springlobby-0.169/.mailmap0000600000176000000410000000371012105760277017056 0ustar buildbotwww-data00000000000000Dmytry Lavrov Dmytry Dmytry Lavrov Dmytry Lavrov Dmytry Lavrov Dmytry Lavrov Kaot Kaot Kaot Kaot Kaot Kaot Leo Moisio added by portage for buildbot Leo Moisio Leo Moisio Leo Moisio Leo Moisio teZeriusz Łukasz Wychrystenko teZeriusz t0 Ole Martin Solaas olemars René Milk René Milk René Milk Rene Milk René Milk René Milk René Milk Rene Milk René Milk René Milk René Milk René Milk René Milk rene_milk René Milk Rene Milk René Milk Rene Milk René Milk koshi Tommy Carlsson Tommy Carlsson Tommy Carlsson Tommy Carlsson Tommy Carlsson Tommy Carlsson Tommy Carlsson Tommy Carlsson Tommy Carlsson tc- Andrea Piras unknown springlobby-0.169/.tx/config0000600000176000000410000000021412105760277017332 0ustar buildbotwww-data00000000000000[main] host = https://www.transifex.com [springlobby.master] file_filter = po/.po source_file = po/springlobby.pot source_lang = en springlobby-0.169/ABOUT-NLS0000600000176000000410000022532612105760277016675 0ustar buildbotwww-data000000000000001 Notes on the Free Translation Project *************************************** Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. When reporting bugs in the `intl/' directory or bugs which may be related to internationalization, you should tell about the version of `gettext' which is used. The information can be found in the `intl/VERSION' file, in internationalized packages. 1.1 Quick configuration advice ============================== If you want to exploit the full power of internationalization, you should configure it using ./configure --with-included-gettext to force usage of internationalizing routines provided within this package, despite the existence of internationalizing capabilities in the operating system where this package is being installed. So far, only the `gettext' implementation in the GNU C library version 2 provides as many features (such as locale alias, message inheritance, automatic charset conversion or plural form handling) as the implementation here. It is also not possible to offer this additional functionality on top of a `catgets' implementation. Future versions of GNU `gettext' will very likely convey even more functionality. So it might be a good idea to change to GNU `gettext' as soon as possible. So you need _not_ provide this option if you are using GNU libc 2 or you have installed a recent copy of the GNU gettext package with the included `libintl'. 1.2 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. If not, the included GNU `gettext' library will be used. This library is wholly contained within this package, usually in the `intl/' subdirectory, so prior installation of the GNU `gettext' package is _not_ required. Installers may use special options at configuration time for changing the default behaviour. The commands: ./configure --with-included-gettext ./configure --disable-nls will, respectively, bypass any pre-existing `gettext' to use the internationalizing routines provided within this package, or else, _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl.a' file and will decide to use this. This might not be desirable. You should use the more recent version of the GNU `gettext' library. I.e. if the file `intl/VERSION' shows that the library which comes with this package is more recent, you should use ./configure --with-included-gettext to prevent auto-detection. The configuration process will not test for the `catgets' function and therefore it will not be used. The reason is that even an emulation of `gettext' on top of `catgets' could not provide all the extensions of the GNU `gettext' library. Internationalized packages usually have many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.3 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. If you happen to have the `LC_ALL' or some other `LC_xxx' environment variables set, you should unset them before setting `LANG', otherwise the setting of `LANG' will not have the desired effect. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your language by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. 1.4 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skills are praised more than programming skills, here. 1.5 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of November 2007. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB eo +----------------------------------------------------+ Compendium | [] [] [] [] | a2ps | [] [] [] [] [] | aegis | () | ant-phone | () | anubis | [] | ap-utils | | aspell | [] [] [] [] [] | bash | [] | bfd | | bibshelf | [] | binutils | | bison | [] [] | bison-runtime | [] | bluez-pin | [] [] [] [] [] | cflow | [] | clisp | [] [] [] | console-tools | [] [] | coreutils | [] [] [] [] | cpio | | cpplib | [] [] [] | cryptonit | [] | dialog | | diffutils | [] [] [] [] [] [] | doodle | [] | e2fsprogs | [] [] | enscript | [] [] [] [] | fetchmail | [] [] () [] [] | findutils | [] | findutils_stable | [] [] [] | flex | [] [] [] | fslint | | gas | | gawk | [] [] [] | gcal | [] | gcc | [] | gettext-examples | [] [] [] [] [] | gettext-runtime | [] [] [] [] [] | gettext-tools | [] [] | gip | [] | gliv | [] [] | glunarclock | [] | gmult | [] [] | gnubiff | () | gnucash | [] [] () () [] | gnuedu | | gnulib | [] | gnunet | | gnunet-gtk | | gnutls | [] | gpe-aerial | [] [] | gpe-beam | [] [] | gpe-calendar | | gpe-clock | [] [] | gpe-conf | [] [] | gpe-contacts | | gpe-edit | [] | gpe-filemanager | | gpe-go | [] | gpe-login | [] [] | gpe-ownerinfo | [] [] | gpe-package | | gpe-sketchbook | [] [] | gpe-su | [] [] | gpe-taskmanager | [] [] | gpe-timesheet | [] | gpe-today | [] [] | gpe-todo | | gphoto2 | [] [] [] [] | gprof | [] [] | gpsdrive | | gramadoir | [] [] | grep | [] [] | gretl | () | gsasl | | gss | | gst-plugins-bad | [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] [] | gst-plugins-ugly | [] [] | gstreamer | [] [] [] [] [] [] [] | gtick | () | gtkam | [] [] [] [] | gtkorphan | [] [] | gtkspell | [] [] [] [] | gutenprint | [] | hello | [] [] [] [] [] | herrie | [] | hylafax | | idutils | [] [] | indent | [] [] [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] [] | iso_639 | [] [] [] [] | jpilot | [] | jtag | | jwhois | | kbd | [] [] [] [] | keytouch | [] [] | keytouch-editor | [] | keytouch-keyboa... | [] | latrine | () | ld | [] | leafpad | [] [] [] [] [] | libc | [] [] [] [] | libexif | [] | libextractor | [] | libgpewidget | [] [] [] | libgpg-error | [] | libgphoto2 | [] [] | libgphoto2_port | [] [] | libgsasl | | libiconv | [] [] | libidn | [] [] [] | lifelines | [] () | lilypond | [] | lingoteach | | lprng | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailfromd | | mailutils | [] | make | [] [] | man-db | [] [] [] | minicom | [] [] [] | nano | [] [] [] | opcodes | [] | parted | [] [] | pilot-qof | | popt | [] [] [] | psmisc | [] | pwdutils | | qof | | radius | [] | recode | [] [] [] [] [] [] | rpm | [] | screem | | scrollkeeper | [] [] [] [] [] [] [] [] | sed | [] [] [] | shared-mime-info | [] [] [] [] () [] [] [] | sharutils | [] [] [] [] [] [] | shishi | | skencil | [] () | solfege | | soundtracker | [] [] | sp | [] | system-tools-ba... | [] [] [] [] [] [] [] [] [] | tar | [] [] | texinfo | [] [] [] | tin | () () | tuxpaint | [] [] [] [] [] [] | unicode-han-tra... | | unicode-transla... | | util-linux | [] [] [] [] | util-linux-ng | [] [] [] [] | vorbis-tools | [] | wastesedge | () | wdiff | [] [] [] [] | wget | [] [] [] | xchat | [] [] [] [] [] [] [] | xkeyboard-config | [] | xpad | [] [] [] | +----------------------------------------------------+ af am ar az be bg bs ca cs cy da de el en en_GB eo 6 0 2 1 8 26 2 40 48 2 56 88 15 1 15 18 es et eu fa fi fr ga gl gu he hi hr hu id is it +--------------------------------------------------+ Compendium | [] [] [] [] [] | a2ps | [] [] [] () | aegis | | ant-phone | [] | anubis | [] | ap-utils | [] [] | aspell | [] [] [] | bash | [] | bfd | [] [] | bibshelf | [] [] [] | binutils | [] [] [] | bison | [] [] [] [] [] [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] | cflow | [] | clisp | [] [] | console-tools | | coreutils | [] [] [] [] [] [] | cpio | [] [] [] | cpplib | [] [] | cryptonit | [] | dialog | [] [] [] | diffutils | [] [] [] [] [] [] [] [] [] | doodle | [] [] | e2fsprogs | [] [] [] | enscript | [] [] [] | fetchmail | [] | findutils | [] [] [] | findutils_stable | [] [] [] [] | flex | [] [] [] | fslint | | gas | [] [] | gawk | [] [] [] [] () | gcal | [] [] | gcc | [] | gettext-examples | [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] | gettext-tools | [] [] [] [] | gip | [] [] [] [] | gliv | () | glunarclock | [] [] [] | gmult | [] [] [] | gnubiff | () () | gnucash | () () () | gnuedu | [] | gnulib | [] [] [] | gnunet | | gnunet-gtk | | gnutls | | gpe-aerial | [] [] | gpe-beam | [] [] | gpe-calendar | | gpe-clock | [] [] [] [] | gpe-conf | [] | gpe-contacts | [] [] | gpe-edit | [] [] [] [] | gpe-filemanager | [] | gpe-go | [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] [] [] [] | gpe-package | [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] [] | gpe-taskmanager | [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] | gpe-todo | [] | gphoto2 | [] [] [] [] [] | gprof | [] [] [] [] [] | gpsdrive | [] | gramadoir | [] [] | grep | [] [] [] | gretl | [] [] [] () | gsasl | [] [] | gss | [] [] | gst-plugins-bad | [] [] [] [] | gst-plugins-base | [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] | gstreamer | [] [] [] | gtick | [] [] [] | gtkam | [] [] [] [] | gtkorphan | [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | [] | hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | herrie | [] | hylafax | | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] [] [] [] | iso_15924 | [] | iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | [] | iso_4217 | [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] | jpilot | [] [] | jtag | [] | jwhois | [] [] [] [] [] | kbd | [] [] | keytouch | [] [] [] | keytouch-editor | [] | keytouch-keyboa... | [] [] | latrine | [] [] | ld | [] [] [] [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] [] | libexif | [] | libextractor | [] | libgpewidget | [] [] [] [] [] | libgpg-error | [] | libgphoto2 | [] [] [] | libgphoto2_port | [] [] | libgsasl | [] [] | libiconv | [] [] [] | libidn | [] [] | lifelines | () | lilypond | [] [] [] | lingoteach | [] [] [] | lprng | | lynx | [] [] [] | m4 | [] [] [] [] | mailfromd | | mailutils | [] [] | make | [] [] [] [] [] [] [] [] | man-db | [] | minicom | [] [] [] [] | nano | [] [] [] [] [] [] [] | opcodes | [] [] [] [] | parted | [] [] [] | pilot-qof | | popt | [] [] [] [] | psmisc | [] [] | pwdutils | | qof | [] | radius | [] [] | recode | [] [] [] [] [] [] [] [] | rpm | [] [] | screem | | scrollkeeper | [] [] [] | sed | [] [] [] [] [] | shared-mime-info | [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] [] [] | shishi | [] | skencil | [] [] | solfege | [] | soundtracker | [] [] [] | sp | [] | system-tools-ba... | [] [] [] [] [] [] [] [] [] | tar | [] [] [] [] [] | texinfo | [] [] [] | tin | [] () | tuxpaint | [] [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux | [] [] [] [] [] [] [] | util-linux-ng | [] [] [] [] [] [] [] | vorbis-tools | | wastesedge | () | wdiff | [] [] [] [] [] [] [] [] | wget | [] [] [] [] [] [] [] [] | xchat | [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] | xpad | [] [] [] | +--------------------------------------------------+ es et eu fa fi fr ga gl gu he hi hr hu id is it 85 22 14 2 48 101 61 12 2 8 2 6 53 29 1 52 ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl nn +--------------------------------------------------+ Compendium | [] | a2ps | () [] [] | aegis | () | ant-phone | [] | anubis | [] [] [] | ap-utils | [] | aspell | [] [] | bash | [] | bfd | | bibshelf | [] | binutils | | bison | [] [] [] | bison-runtime | [] [] [] | bluez-pin | [] [] [] | cflow | | clisp | [] | console-tools | | coreutils | [] | cpio | [] | cpplib | [] | cryptonit | [] | dialog | [] [] | diffutils | [] [] [] | doodle | | e2fsprogs | [] | enscript | [] | fetchmail | [] [] | findutils | [] | findutils_stable | [] | flex | [] [] | fslint | | gas | | gawk | [] [] | gcal | | gcc | | gettext-examples | [] [] [] | gettext-runtime | [] [] [] | gettext-tools | [] [] | gip | [] [] | gliv | [] | glunarclock | [] [] | gmult | [] [] [] | gnubiff | | gnucash | () () () | gnuedu | | gnulib | [] [] | gnunet | | gnunet-gtk | | gnutls | [] | gpe-aerial | [] | gpe-beam | [] | gpe-calendar | [] | gpe-clock | [] [] [] | gpe-conf | [] [] [] | gpe-contacts | [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] | gpe-go | [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] | gpe-taskmanager | [] [] [] [] | gpe-timesheet | [] | gpe-today | [] [] | gpe-todo | [] | gphoto2 | [] [] | gprof | [] | gpsdrive | [] | gramadoir | () | grep | [] [] | gretl | | gsasl | [] | gss | | gst-plugins-bad | [] | gst-plugins-base | [] | gst-plugins-good | [] | gst-plugins-ugly | [] | gstreamer | [] | gtick | [] | gtkam | [] [] | gtkorphan | [] | gtkspell | [] [] | gutenprint | [] | hello | [] [] [] [] [] [] [] | herrie | [] | hylafax | | idutils | [] | indent | [] [] | iso_15924 | [] | iso_3166 | [] [] [] [] [] [] [] [] | iso_3166_2 | [] | iso_4217 | [] [] [] | iso_639 | [] [] [] [] | jpilot | () () | jtag | | jwhois | [] | kbd | [] | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | | latrine | [] | ld | | leafpad | [] [] | libc | [] [] [] | libexif | | libextractor | | libgpewidget | [] | libgpg-error | | libgphoto2 | [] | libgphoto2_port | [] | libgsasl | [] | libiconv | [] | libidn | [] [] | lifelines | [] | lilypond | [] | lingoteach | [] | lprng | | lynx | [] [] | m4 | [] [] | mailfromd | | mailutils | | make | [] [] [] | man-db | | minicom | [] | nano | [] [] [] | opcodes | [] | parted | [] [] | pilot-qof | | popt | [] [] [] | psmisc | [] [] [] | pwdutils | | qof | | radius | | recode | [] | rpm | [] [] | screem | [] | scrollkeeper | [] [] [] [] | sed | [] [] | shared-mime-info | [] [] [] [] [] [] [] | sharutils | [] [] | shishi | | skencil | | solfege | () () | soundtracker | | sp | () | system-tools-ba... | [] [] [] [] | tar | [] [] [] | texinfo | [] [] | tin | | tuxpaint | () [] [] | unicode-han-tra... | | unicode-transla... | | util-linux | [] [] | util-linux-ng | [] [] | vorbis-tools | | wastesedge | [] | wdiff | [] [] | wget | [] [] | xchat | [] [] [] [] | xkeyboard-config | [] [] [] | xpad | [] [] [] | +--------------------------------------------------+ ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl nn 51 2 25 3 2 0 6 0 2 2 20 0 11 1 103 6 or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta +--------------------------------------------------+ Compendium | [] [] [] [] [] | a2ps | () [] [] [] [] [] [] | aegis | () () | ant-phone | [] [] | anubis | [] [] [] | ap-utils | () | aspell | [] [] [] | bash | [] [] | bfd | | bibshelf | [] | binutils | [] [] | bison | [] [] [] [] [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] [] | cflow | [] | clisp | [] | console-tools | [] | coreutils | [] [] [] [] | cpio | [] [] [] | cpplib | [] | cryptonit | [] [] | dialog | [] | diffutils | [] [] [] [] [] [] | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] [] | fetchmail | [] [] [] | findutils | [] [] [] | findutils_stable | [] [] [] [] [] [] | flex | [] [] [] [] [] | fslint | [] | gas | | gawk | [] [] [] [] | gcal | [] | gcc | [] [] | gettext-examples | [] [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] [] | gip | [] [] [] [] | gliv | [] [] [] [] [] [] | glunarclock | [] [] [] [] [] [] | gmult | [] [] [] [] | gnubiff | () [] | gnucash | () [] | gnuedu | | gnulib | [] [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gpe-aerial | [] [] [] [] [] [] [] | gpe-beam | [] [] [] [] [] [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] [] [] [] [] [] | gpe-conf | [] [] [] [] [] [] [] | gpe-contacts | [] [] [] [] [] | gpe-edit | [] [] [] [] [] [] [] [] [] | gpe-filemanager | [] [] | gpe-go | [] [] [] [] [] [] [] [] | gpe-login | [] [] [] [] [] [] [] [] | gpe-ownerinfo | [] [] [] [] [] [] [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] [] [] [] [] [] [] | gpe-su | [] [] [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] [] | gpe-todo | [] [] [] [] | gphoto2 | [] [] [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] | gramadoir | [] [] | grep | [] [] [] [] | gretl | [] [] [] | gsasl | [] [] [] | gss | [] [] [] [] | gst-plugins-bad | [] [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] | gst-plugins-ugly | [] [] [] | gstreamer | [] [] [] [] | gtick | [] | gtkam | [] [] [] [] [] | gtkorphan | [] | gtkspell | [] [] [] [] [] [] [] [] | gutenprint | [] | hello | [] [] [] [] [] [] [] [] | herrie | [] [] [] | hylafax | | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] [] | jpilot | | jtag | [] | jwhois | [] [] [] [] | kbd | [] [] [] | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | [] | latrine | | ld | [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] | libextractor | [] [] | libgpewidget | [] [] [] [] [] [] [] [] | libgpg-error | [] [] [] | libgphoto2 | [] | libgphoto2_port | [] [] [] | libgsasl | [] [] [] [] | libiconv | [] [] [] | libidn | [] [] () | lifelines | [] [] | lilypond | | lingoteach | [] | lprng | [] | lynx | [] [] [] | m4 | [] [] [] [] [] | mailfromd | [] | mailutils | [] [] [] | make | [] [] [] [] | man-db | [] [] [] [] | minicom | [] [] [] [] [] | nano | [] [] [] [] | opcodes | [] [] | parted | [] | pilot-qof | | popt | [] [] [] [] | psmisc | [] [] | pwdutils | [] [] | qof | [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] | rpm | [] [] [] [] | screem | | scrollkeeper | [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] | shared-mime-info | [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] | skencil | [] [] [] | solfege | [] | soundtracker | [] [] | sp | | system-tools-ba... | [] [] [] [] [] [] [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] [] | tin | () | tuxpaint | [] [] [] [] [] [] | unicode-han-tra... | | unicode-transla... | | util-linux | [] [] [] [] | util-linux-ng | [] [] [] [] | vorbis-tools | [] | wastesedge | | wdiff | [] [] [] [] [] [] [] | wget | [] [] [] [] | xchat | [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | xpad | [] [] [] | +--------------------------------------------------+ or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta 0 5 77 31 53 4 58 72 3 45 46 9 45 122 3 tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu +---------------------------------------------------+ Compendium | [] [] [] [] | 19 a2ps | [] [] [] | 19 aegis | [] | 1 ant-phone | [] [] | 6 anubis | [] [] [] | 11 ap-utils | () [] | 4 aspell | [] [] [] | 16 bash | [] | 6 bfd | | 2 bibshelf | [] | 7 binutils | [] [] [] [] | 9 bison | [] [] [] [] | 20 bison-runtime | [] [] [] [] | 18 bluez-pin | [] [] [] [] [] [] | 28 cflow | [] [] | 5 clisp | | 9 console-tools | [] [] | 5 coreutils | [] [] [] | 18 cpio | [] [] [] [] | 11 cpplib | [] [] [] [] [] | 12 cryptonit | [] | 6 dialog | [] [] [] | 9 diffutils | [] [] [] [] [] | 29 doodle | [] | 6 e2fsprogs | [] [] | 10 enscript | [] [] [] | 16 fetchmail | [] [] | 12 findutils | [] [] [] | 11 findutils_stable | [] [] [] [] | 18 flex | [] [] | 15 fslint | [] | 2 gas | [] | 3 gawk | [] [] [] | 16 gcal | [] | 5 gcc | [] [] [] | 7 gettext-examples | [] [] [] [] [] [] | 29 gettext-runtime | [] [] [] [] [] [] | 28 gettext-tools | [] [] [] [] [] | 20 gip | [] [] | 13 gliv | [] [] | 11 glunarclock | [] [] [] | 15 gmult | [] [] [] [] | 16 gnubiff | [] | 2 gnucash | () [] | 5 gnuedu | [] | 2 gnulib | [] | 10 gnunet | | 0 gnunet-gtk | [] [] | 3 gnutls | | 4 gpe-aerial | [] [] | 14 gpe-beam | [] [] | 14 gpe-calendar | [] [] | 7 gpe-clock | [] [] [] [] | 21 gpe-conf | [] [] [] | 16 gpe-contacts | [] [] | 10 gpe-edit | [] [] [] [] [] | 22 gpe-filemanager | [] [] | 7 gpe-go | [] [] [] [] | 19 gpe-login | [] [] [] [] [] | 21 gpe-ownerinfo | [] [] [] [] | 21 gpe-package | [] | 6 gpe-sketchbook | [] [] | 16 gpe-su | [] [] [] [] | 21 gpe-taskmanager | [] [] [] [] | 21 gpe-timesheet | [] [] [] [] | 18 gpe-today | [] [] [] [] [] | 21 gpe-todo | [] [] | 8 gphoto2 | [] [] [] [] | 21 gprof | [] [] | 13 gpsdrive | [] | 5 gramadoir | [] | 7 grep | [] | 12 gretl | | 6 gsasl | [] [] [] | 9 gss | [] | 7 gst-plugins-bad | [] [] [] | 13 gst-plugins-base | [] [] | 11 gst-plugins-good | [] [] [] [] [] | 16 gst-plugins-ugly | [] [] [] | 13 gstreamer | [] [] [] | 18 gtick | [] [] | 7 gtkam | [] | 16 gtkorphan | [] | 7 gtkspell | [] [] [] [] [] [] | 27 gutenprint | | 4 hello | [] [] [] [] [] | 38 herrie | [] [] | 8 hylafax | | 0 idutils | [] [] | 15 indent | [] [] [] [] [] | 28 iso_15924 | [] [] | 4 iso_3166 | [] [] [] [] [] [] [] [] [] | 54 iso_3166_2 | [] [] | 4 iso_4217 | [] [] [] [] [] | 24 iso_639 | [] [] [] [] [] | 26 jpilot | [] [] [] [] | 7 jtag | [] | 3 jwhois | [] [] [] | 13 kbd | [] [] [] | 13 keytouch | [] | 8 keytouch-editor | [] | 5 keytouch-keyboa... | [] | 5 latrine | [] [] | 5 ld | [] [] [] [] | 10 leafpad | [] [] [] [] [] | 24 libc | [] [] [] | 19 libexif | [] | 5 libextractor | [] | 5 libgpewidget | [] [] [] | 20 libgpg-error | [] | 6 libgphoto2 | [] [] | 9 libgphoto2_port | [] [] [] | 11 libgsasl | [] | 8 libiconv | [] [] | 11 libidn | [] [] | 11 lifelines | | 4 lilypond | [] | 6 lingoteach | [] | 6 lprng | [] | 2 lynx | [] [] [] | 15 m4 | [] [] [] | 18 mailfromd | [] [] | 3 mailutils | [] [] | 8 make | [] [] [] | 20 man-db | [] | 9 minicom | [] | 14 nano | [] [] [] | 20 opcodes | [] [] | 10 parted | [] [] [] | 11 pilot-qof | [] | 1 popt | [] [] [] [] | 18 psmisc | [] [] | 10 pwdutils | [] | 3 qof | [] | 4 radius | [] [] | 7 recode | [] [] [] | 25 rpm | [] [] [] [] | 13 screem | [] | 2 scrollkeeper | [] [] [] [] | 26 sed | [] [] [] [] | 23 shared-mime-info | [] [] [] | 29 sharutils | [] [] [] | 23 shishi | [] | 3 skencil | [] | 7 solfege | [] | 3 soundtracker | [] [] | 9 sp | [] | 3 system-tools-ba... | [] [] [] [] [] [] [] | 38 tar | [] [] [] | 17 texinfo | [] [] [] | 15 tin | | 1 tuxpaint | [] [] [] | 19 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux | [] [] [] | 20 util-linux-ng | [] [] [] | 20 vorbis-tools | [] [] | 4 wastesedge | | 1 wdiff | [] [] | 23 wget | [] [] [] | 20 xchat | [] [] [] [] | 29 xkeyboard-config | [] [] [] | 14 xpad | [] [] [] | 15 +---------------------------------------------------+ 76 teams tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu 163 domains 0 3 1 74 51 0 143 21 1 57 7 45 0 2036 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If November 2007 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://translationproject.org/extra/matrix.html'. 1.6 Using `gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `coordinator@translationproject.org' to make the `.pot' files available to the translation teams. springlobby-0.169/AUTHORS0000600000176000000410000000057512105760277016513 0ustar buildbotwww-data00000000000000The SpringLobby Team tc Original author, responsible for basically all features. koshi Responsible for services, site, build and packaging, portability, springsettings etc. (also BD's GUI-goto-guy ;-) ) braindamage Some features and rpm maintenance. Tobi map selector, threaded unitsync Retired Team Members tronic C++ and design mentor, refactoring. semi springlobby-0.169/CMakeLists.txt0000600000176000000410000001442012105760277020175 0ustar buildbotwww-data00000000000000PROJECT(springlobby) #set minimum cmake version cmake_minimum_required(VERSION 2.8) #ignore warnings about macosx app bundle output dir cmake_policy(SET CMP0006 OLD) #don't ouch (supposedly) relative paths passed to link_directories cmake_policy(SET CMP0015 OLD) SET(CMAKE_COLOR_MAKEFILE ON) SET(CROSS_COMPILING "FALSE") set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH} ) #---------------------------------------------------------------------------------------------------- # General Settings #---------------------------------------------------------------------------------------------------- SET( CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true ) #---------------------------------------------------------------------------------------------------- # Load needed Modules #---------------------------------------------------------------------------------------------------- if(NOT DEFINED SPRINGLOBBY_REV) EXECUTE_PROCESS(COMMAND ${springlobby_SOURCE_DIR}/tools/get-revision.sh OUTPUT_VARIABLE SPRINGLOBBY_REV ERROR_VARIABLE GIT_ERROR OUTPUT_STRIP_TRAILING_WHITESPACE ) endif(NOT DEFINED SPRINGLOBBY_REV) # PKG-Config FIND_PACKAGE( PkgConfig ) #if nothing went wrong we have the file and can define HAVE_CONFIG_H IF ( EXISTS ${springlobby_BINARY_DIR}/springlobby_config.h) ADD_DEFINITIONS( -DHAVE_CONFIG_H ) INCLUDE_DIRECTORIES(${springlobby_BINARY_DIR}) ELSEIF ( EXISTS ${springlobby_SOURCE_DIR}/springlobby_config.h ) ADD_DEFINITIONS( -DHAVE_CONFIG_H ) INCLUDE_DIRECTORIES(${springlobby_SOURCE_DIR}) ENDIF () #---------------------------------------------------------------------------------------------------- # Options, that can be changed be the User in order to customise springlobby #---------------------------------------------------------------------------------------------------- if(WIN32) #FIXME: remove this when static compiled alure is fixed SET( OPTION_SOUND FALSE CACHE BOOL "sound disabled because of an alure bug" FORCE ) else(WIN32) SET( OPTION_SOUND TRUE CACHE BOOL "Enables sound notification functionality (requires openAL libraries)" ) endif(WIN32) SET( OPTION_TRANSLATION_SUPPORT TRUE CACHE BOOL "Enables translation support to the programs and adds facilities for helping translators (requires GNU Gettext)" ) SET( OPTION_NOTIFY TRUE CACHE BOOL "Enables libnotify support for popup status messages (requires libnotify)" ) SET( BUILD_SHARED_LIBS FALSE CACHE BOOL "Chooses whether to link dynamic or static libraries. Recommend keeping this activated unless you know what you're doing." ) SET( ENABLE_DEBUG_REPORT TRUE CACHE BOOL "Enable automatic uploading of crash information (requires libcurl)" ) SET( SPRINGLOBBY_REV "${SPRINGLOBBY_REV}" CACHE STRING "The revision string used in packages etc." ) SET( LOCALE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/locale CACHE STRING "message catalogs will installed here" ) IF( AUX_VERSION ) ADD_DEFINITIONS( -DAUX_VERSION="${AUX_VERSION}" ) ENDIF( AUX_VERSION ) INCLUDE(SpringLobbyMacros) clear(link_directories) clear(springlobbySrc) Add_Subdirectory(doc) #---------------------------------------------------------------------------------------------------- # L10n support #---------------------------------------------------------------------------------------------------- if( OPTION_TRANSLATION_SUPPORT ) add_subdirectory(po) endif( OPTION_TRANSLATION_SUPPORT ) Add_Subdirectory(src) #cppcheck stuff find_program( CPPCHECK_BINARY NAMES cppcheck ) IF( EXISTS ${CPPCHECK_BINARY} ) ADD_CUSTOM_TARGET( cppcheck ) FOREACH( list ${updaterSrc} ${header} ${SLSharedWithSettings} ${StandAloneSettings} ${curlSRC} ${SettingsSrc} ${springlobbySrc} ) FOREACH( SOURCEFILE ${list} ) LIST( APPEND CHECKPATHS ${SOURCEFILE} ) ENDFOREACH( SOURCEFILE ) ENDFOREACH( list ) ADD_CUSTOM_TARGET( cppcheck-full ${CPPCHECK_BINARY} "--xml" "--enable=all" "-f" "--quiet" ${CHECKPATHS} "2>${CMAKE_CURRENT_BINARY_DIR}/cppcheck-full.xml" "&&" "${CMAKE_CURRENT_SOURCE_DIR}/tools/cppcheck-htmlreport" "--source-dir=${CMAKE_CURRENT_SOURCE_DIR}/" "--file=${CMAKE_CURRENT_BINARY_DIR}/cppcheck-full.xml" "--report-dir=report-full" "--title=SpringLobby - Full") ADD_CUSTOM_TARGET( cppcheck-lite ${CPPCHECK_BINARY} "--xml" "-f" "--quiet" ${CHECKPATHS} "2>${CMAKE_CURRENT_BINARY_DIR}/cppcheck-lite.xml" "&&" "${CMAKE_CURRENT_SOURCE_DIR}/tools/cppcheck-htmlreport" "--source-dir=${CMAKE_CURRENT_SOURCE_DIR}/" "--file=${CMAKE_CURRENT_BINARY_DIR}/cppcheck-lite.xml" "--report-dir=report-lite" "--title=SpringLobby - Lite") add_dependencies( cppcheck cppcheck-full ) add_dependencies( cppcheck cppcheck-lite ) ENDIF( EXISTS ${CPPCHECK_BINARY} ) IF( WIN32 ) LIST( APPEND SLSharedWithSettings stacktrace.c ) ELSE( WIN32 ) LIST( APPEND SLSharedWithSettings stacktrace.cpp ) ENDIF( WIN32 ) INCLUDE(cmake/package_config.cmake) IF(WIN32) install(FILES AUTHORS COPYING NEWS README THANKS DESTINATION .) install(DIRECTORY ${CMAKE_INSTALL_PREFIX}/locale DESTINATION .) ELSE (WIN32) install(FILES AUTHORS COPYING NEWS README THANKS DESTINATION ${CMAKE_INSTALL_PREFIX}/share/doc/springlobby ) install(FILES src/images/springlobby.svg DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps) install(FILES src/springlobby.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications) ENDIF (WIN32) add_custom_target(pack ${CMAKE_MAKE_PROGRAM} package && ${springlobby_SOURCE_DIR}/tools/transform_release_zip.sh ${CMAKE_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}-win32.zip ${CMAKE_STRIP} ) # setup make dist add_custom_target(dist ${CMAKE_SOURCE_DIR}/tools/make_dist.sh "${springlobby_BINARY_DIR}" "${PACKAGE_NAME}-${PACKAGE_VERSION}" ) # setup make distcheck add_custom_target(distcheck + cd ${CMAKE_BINARY_DIR} && rm -rf ${PACKAGE_NAME}-${PACKAGE_VERSION} && tar -xzf ${PACKAGE_NAME}-${PACKAGE_VERSION}.tar.gz && cd ${PACKAGE_NAME}-${PACKAGE_VERSION}/ && cmake "-DCMAKE_CXX_FLAGS:STRING=-O0". && ${CMAKE_MAKE_PROGRAM} ) add_custom_target( version ${springlobby_SOURCE_DIR}/tools/regen_config_header.sh ${springlobby_SOURCE_DIR}/cmake/config.h ${springlobby_BINARY_DIR}/springlobby_config.h ) add_dependencies( distcheck dist ) #add_dependencies( versiontest version ) springlobby-0.169/COPYING0000600000176000000410000004312212105760277016471 0ustar buildbotwww-data00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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 Library General Public License instead of this License. springlobby-0.169/ChangeLog0000600000176000000410000413546612105760277017231 0ustar buildbotwww-data000000000000002009-11-04 Rene Milk * src/utils/platform.cpp: fix windows build error 2009-11-04 Rene Milk * src/utils/platform.cpp, src/utils/platform.h: fix wrong shellexecuteex verb on pre vista 2009-11-03 Rene Milk * : commit 4c10d263711a84ca8f535c70398814432e1e4694 Author: Rene Milk Date: Mon Nov 2 23:57:52 2009 +0100 2009-10-31 Rene Milk * src/aui/slbook.cpp, src/aui/slbook.h: fixes 1071 2009-10-30 Andrea Piras * src/battle.cpp, src/ibattle.cpp, src/iunitsync.h, src/mapctrl.cpp, src/mapgridctrl.cpp, src/mapselectdialog.cpp, src/spring.cpp, src/springunitsync.cpp, src/springunitsynclib.cpp: use a vector to hold start positions instead of array 2009-10-28 Rene Milk * src/mainoptionstab.cpp: fix tabs duplication in options 2009-10-27 Rene Milk * : Merge commit 'bd/master' 2009-10-27 Rene Milk * : Merge commit 'bd/master' 2009-10-27 Rene Milk * po/ar.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/en_US.po, po/es.po, po/fi.po, po/fr.po, po/it.po, po/pl.po, po/pt.po, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po, po/zh_CN.po, src/settings++/panel_pathoption.cpp, src/settings.cpp: apply mammadoris patches 2009-10-27 Rene Milk * springlobby.cbp: cbp change 2009-10-26 Rene Milk * : Merge commit 'koshi/master' 2009-10-26 Rene Milk * : Merge commit 'koshi/master' 2009-10-26 Rene Milk * src/images/replay_icon.png.h: fix BIG replay icon 2009-10-25 Rene Milk * src/aui/slbook.cpp: only honor GetShowXallTabs for ChatNotebook 2009-10-24 Rene Milk * src/mainwindow.cpp: refresh current chat tab after perspective load 2009-10-24 Rene Milk * : commit f3a29593ad9616d08257c9aea70a0d5d676538ec Author: Rene Milk Date: Sat Oct 24 21:58:44 2009 +0200 2009-10-23 Andrea Piras * : commit c3527c1cc4effac34befc3d455d7667bd336d6a9 Author: Andrea Piras Date: Fri Oct 23 16:17:17 2009 +0200 2009-10-21 Andrea Piras * src/tasserver.cpp: fixed ring with relayhosts 2009-10-21 Andrea Piras * src/chatoptionstab.cpp: enable button to toggle irc color code parsing 2009-10-19 Andrea Piras * : commit 840fe886f127f9fe820463e8dd6f6a2a61e7a355 Merge: 9a53ae1 e535f2e Author: Andrea Piras Date: Mon Oct 19 00:39:48 2009 +0200 2009-10-19 Andrea Piras * src/spring.cpp: only copy the needed amount of startpositions 2009-10-19 Andrea Piras * src/spring.cpp: fixed typo 2009-10-19 Andrea Piras * src/spring.cpp: fixed random start pos never working 2009-10-19 Andrea Piras * src/spring.cpp: less wtf and more compact code 2009-10-18 Andrea Piras * src/spring.cpp: don't reinit random seed every iteration 2009-10-18 Andrea Piras * src/battlemaptab.cpp: forgot to remove one limitation for relayhost start pos 2009-10-18 Andrea Piras * src/spring.cpp: shuffle doesn't work yet, but random start pos won't crash relayhost anymore 2009-10-18 Andrea Piras * src/spring.cpp: convert startpostype fixed to chose before game if using relayhost 2009-10-18 Andrea Piras * src/battlemaptab.cpp, src/battleroomtab.cpp, src/spring.cpp: write player's position on script.txt using map's coordinates if using startposing fixed or random 2009-10-18 Andrea Piras * src/spring.cpp: correct playercount when using relayhosts 2009-10-17 Rene Milk * springlobby.cbp: remove obsolete files from cbp 2009-10-17 Rene Milk * src/battleroomtab.cpp, src/channel/channellistctrl.cpp, src/mmoptionwindows.cpp, src/serverevents.cpp: fix post merge problems 2009-10-17 Rene Milk * : commit 371bf7dd28521203095c3a7b0028fcdab7f67384 Merge: bd6b946 330bff7 Author: Andrea Piras Date: Fri Oct 9 20:25:53 2009 +0200 2009-10-09 Andrea Piras * po/POTFILES.in: removed file from buildsystem 2009-10-09 Andrea Piras * : commit 2f89ae24ad3ada7310e92c93732747371197dbd2 Merge: 04708c3 97bdcdc Author: Andrea Piras Date: Fri Oct 9 19:03:45 2009 +0200 2009-10-09 Andrea Piras * src/addbotdialog.cpp: fixed column autosize for ai options 2009-10-09 Andrea Piras * src/addbotdialog.cpp: fixed column autosize for ai options 2009-10-09 Andrea Piras * src/addbotdialog.cpp: don't skip option 0 for ais 2009-10-09 Andrea Piras * src/addbotdialog.cpp: fixed AI options not being listed 2009-10-09 Andrea Piras * src/mmoptionswrapper.cpp: better debug log in ai options load 2009-10-09 Andrea Piras * src/mmoptionswrapper.cpp: fixed a bug where AI modoption index was not stored 2009-10-09 Andrea Piras * po/ar.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/en_US.po, po/es.po, po/fi.po, po/it.po, po/pl.po, po/pt.po, po/ro.po, po/ru.po, po/sv.po, po/uk.po, po/zh_CN.po, src/addbotdialog.cpp, src/addbotdialog.h, src/ibattle.cpp, src/mmoptionwindows.cpp, src/mmoptionwindows.h: added AI options support 2009-10-07 Rene Milk * src/springlobbyapp.cpp: use LOCALEDIR define for search path if available, fixes 1110 2009-10-07 Rene Milk * : Merge commit 'bd/master' 2009-09-16 Andrea Piras * CMakeLists.txt, Makefile.am, src/settings++/frame.cpp, src/settings++/frame.h, src/settings++/tab_debug.cpp, src/settings++/tab_debug.h: removed obsolete debug settings tab 2009-09-16 Andrea Piras * src/serverevents.cpp: fixed build error 2009-09-14 Andrea Piras * src/battle.cpp: don't report yourself as ingame if spring couldn't start 2009-09-14 Andrea Piras * src/spring.cpp: apparently the autoquit function from command line in spring has been removed, fixed autohost mode 2009-09-13 Rene Milk * : Merge commit 'koshi/master' 2009-09-13 Rene Milk * src/battleroomtab.cpp, src/ui.cpp: fixes 1074 2009-09-13 Rene Milk * src/chatpanel.cpp: fixes 1088 2009-09-12 Andrea Piras * src/serverevents.cpp: don't corrupt arbitrary mute messages 2009-09-09 Rene Milk * : Merge commit 'bd/master' 2009-09-06 Rene Milk * : Merge commit 'koshi/master' 2009-09-06 Rene Milk * : commit 9669a4f3c4b8f74c476e1802129e67a71bf3abee Merge: e5d2179 801398e Author: Rene Milk Date: Sun Sep 6 13:06:12 2009 +0200 2009-09-01 Andrea Piras * src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/user.h: support for rename-costant user ids 2009-09-01 Andrea Piras * src/springlobbyapp.cpp: diable crash hander on mac 2009-08-30 Andrea Piras * src/battlelisttab.cpp, src/battleroomtab.cpp, src/hostbattledialog.cpp, src/mainoptionstab.cpp: use buttons aligned on the same side 2009-08-30 Andrea Piras * src/battlelisttab.cpp: disable nat traversal when using relayhosts 2009-08-27 Andrea Piras * src/flagimages.cpp: added fix for building SL on mac 2009-08-26 Rene Milk * Makefile.am: add Cmake file to autotools generated tarball 2009-08-24 Rene Milk * : commit 3a92df063cd023a7567b074c34f7732abf18d08a Merge: 46b5ad2 b5dec44 Author: Rene Milk Date: Mon Aug 24 20:24:06 2009 +0200 2009-08-24 Rene Milk * tools/upload-temp-win-build_debug.sh: upload script w/o strip 2009-08-23 Andrea Piras * src/channel/channellistctrl.cpp: autosize topic in channel list window 2009-08-22 Rene Milk * : Merge commit 'koshi/master' 2009-08-22 Rene Milk * : commit 448fe2871bb2e0921e9db4018bc875f0fefc19c7 Merge: 4e2c162 d3026c7 Author: Rene Milk Date: Sat Aug 22 15:35:35 2009 +0200 2009-08-22 Rene Milk * src/updater/updater.cpp: do not try to create updater dir if already present 2009-08-22 Andrea Piras * : commit d3026c77eac798b5a328d29622fdb40ba7ddd430 Author: Andrea Piras Date: Sat Aug 22 14:51:29 2009 +0200 2009-08-22 Andrea Piras * : commit 4d69736352e6f858e5262d626b7d897621a175c1 Author: Andrea Piras Date: Sat Aug 22 14:23:09 2009 +0200 2009-08-22 Andrea Piras * src/serverevents.cpp: added quote wrapping for shell execute 2009-08-22 Rene Milk * src/ibattle.cpp, src/ibattle.h, src/mapctrl.cpp, src/settings.cpp: Revert "validate boxes again in data, since we cannot seem to trust UI data and might;ve been saved corrupted in settings" This reverts commit 90924dc324bf66005677a4dd0ae86e6385f5af3d. 2009-08-22 Rene Milk * : Merge commit 'bd/master' 2009-08-22 Andrea Piras * src/serverevents.cpp: add popup on update finished 2009-08-22 Rene Milk * src/hostbattledialog.cpp, src/hostbattledialog.h: show currently selected RH as button label, hide the button if checkbox is unchecked Conflicts: src/hostbattledialog.cpp src/hostbattledialog.h 2009-08-22 Rene Milk * : commit fac8c18ce8cc63cacd64e7676e160222d0466904 Author: Andrea Piras Date: Sat Aug 22 02:22:47 2009 +0200 2009-08-22 Andrea Piras * src/tasserver.cpp: fixed spring version request 2009-08-22 Andrea Piras * src/serverevents.cpp: strip http from download urls 2009-08-22 Andrea Piras * src/serverevents.cpp: some improvements to the spring updater 2009-08-21 Rene Milk * : commit ff685c67d2842c0bb2fa0e0b11ede27e1a120a81 Author: Rene Milk Date: Fri Aug 21 19:33:50 2009 +0200 2009-08-21 Rene Milk * : commit 0bcdf52679db809b63be532855f484d760421bee Merge: 28d4315 241d766 Author: Rene Milk Date: Fri Aug 21 18:57:28 2009 +0200 2009-08-21 Rene Milk * src/mainwindow.cpp, src/mainwindow.h, src/settings.cpp, src/settings.h: make use of layout names 2009-08-21 Rene Milk * src/Helper/wxtextctrlhist.cpp, src/battle.cpp, src/channel/autojoinchanneldialog.cpp, src/chatpanel.cpp, src/ibattle.cpp, src/mainwindow.cpp, src/mainwindow.h, src/mapselectdialog.cpp, src/playback/playbacklistctrl.cpp, src/serverevents.cpp, src/settings++/frame.cpp, src/settings.cpp, src/settings.h, src/spring.cpp, src/springunitsync.cpp, src/uiutils.cpp, src/widgets/downloadlistctrl.cpp: unsigned/signed comparision warnings fixed 2009-08-21 Rene Milk * src/aui/slbook.cpp, src/aui/slbook.h: comments 2009-08-21 Rene Milk * src/battlelisttab.cpp, src/maintorrenttab.cpp, src/playback/playbacktab.cpp, src/playback/playbacktab.h: make battlelist, playback and torrent tab properly scroll 2009-08-21 Rene Milk * src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/chatoptionstab.cpp, src/lobbyoptionstab.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainoptionstab.cpp, src/mainsingleplayertab.cpp, src/maintorrenttab.cpp, src/settings++/tab_abstract.cpp, src/singleplayertab.cpp, src/springoptionstab.cpp, src/torrentoptionspanel.cpp, src/utils/controls.h: use a globally defined scroll rate for scrolwins 2009-08-21 Rene Milk * po/POTFILES.in: fix distcheck 2009-08-21 Rene Milk * src/mainchattab.cpp, src/mainchattab.h, src/mainwindow.cpp: chat tab stubs 2009-08-21 Rene Milk * src/ibattle.cpp, src/ibattle.h, src/mapctrl.cpp, src/settings.cpp: validate boxes again in data, since we cannot seem to trust UI data and might;ve been saved corrupted in settings 2009-08-20 Rene Milk * src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mainwindow.cpp: autosaveload works using diff profiles for in battle and other 2009-08-20 Rene Milk * : commit 49bc56c5b754ca434af6c77403cb5b5540185670 Author: Rene Milk Date: Thu Aug 20 21:43:07 2009 +0200 2009-08-20 Rene Milk * : Merge commit 'bd/master' into rc2 Conflicts: src/battlelisttab.cpp src/hostbattledialog.cpp src/hostbattledialog.h 2009-08-20 Rene Milk * src/battlemaptab.cpp, src/battleroomtab.cpp, src/chatpanel.cpp, src/spring.cpp: fix merge aritifacts Signed-off-by: Rene Milk 2009-08-20 Rene Milk * : commit 2d899b7ac131c330bc9d34ea16988929410207cf Merge: 76d7d77 21b41c2 Author: Rene Milk Date: Thu Aug 20 19:27:05 2009 +0200 2009-08-20 Andrea Piras * src/spring.cpp: fixed logic error 2009-08-20 Rene Milk * Makefile.am, cmake/libtorrent.cmake, po/POTFILES.in, po/ar.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/en_US.po, po/es.po, po/fi.po, po/fr.po, po/it.po, po/pl.po, po/pt.po, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po, po/zh_CN.po, src/Helper/tasclientimport.cpp, src/libtorrent/asio.hpp, src/libtorrent/asio/basic_raw_socket.hpp, src/libtorrent/asio/basic_serial_port.hpp, src/libtorrent/asio/basic_socket.hpp, src/libtorrent/asio/buffer.hpp, src/libtorrent/asio/buffers_iterator.hpp, src/libtorrent/asio/detail/deadline_timer_service.hpp, src/libtorrent/asio/detail/descriptor_ops.hpp, src/libtorrent/asio/detail/dev_poll_reactor.hpp, src/libtorrent/asio/detail/epoll_reactor.hpp, src/libtorrent/asio/detail/handler_base_from_member.hpp, src/libtorrent/asio/detail/handler_queue.hpp, src/libtorrent/asio/detail/hash_map.hpp, src/libtorrent/asio/detail/indirect_handler_queue.hpp, src/libtorrent/asio/detail/kqueue_reactor.hpp, src/libtorrent/asio/detail/null_thread.hpp, src/libtorrent/asio/detail/old_win_sdk_compat.hpp, src/libtorrent/asio/detail/posix_thread.hpp, src/libtorrent/asio/detail/reactive_descriptor_service.hpp, src/libtorrent/asio/detail/reactive_serial_port_service.hpp, src/libtorrent/asio/detail/reactive_socket_service.hpp, src/libtorrent/asio/detail/reactor_op_queue.hpp, src/libtorrent/asio/detail/select_reactor.hpp, src/libtorrent/asio/detail/socket_types.hpp, src/libtorrent/asio/detail/strand_service.hpp, src/libtorrent/asio/detail/task_io_service.hpp, src/libtorrent/asio/detail/task_io_service_2lock.hpp, src/libtorrent/asio/detail/timer_queue.hpp, src/libtorrent/asio/detail/timer_queue_base.hpp, src/libtorrent/asio/detail/win_iocp_handle_service.hpp, src/libtorrent/asio/detail/win_iocp_io_service.hpp, src/libtorrent/asio/detail/win_iocp_serial_port_service.hpp, src/libtorrent/asio/detail/win_iocp_socket_service.hpp, src/libtorrent/asio/detail/win_thread.hpp, src/libtorrent/asio/detail/wince_thread.hpp, src/libtorrent/asio/detail/wrapped_handler.hpp, src/libtorrent/asio/handler_alloc_hook.hpp, src/libtorrent/asio/impl/read_at.ipp, src/libtorrent/asio/impl/read_until.ipp, src/libtorrent/asio/impl/serial_port_base.ipp, src/libtorrent/asio/impl/write_at.ipp, src/libtorrent/asio/io_service.hpp, src/libtorrent/asio/ip/icmp.hpp, src/libtorrent/asio/ip/resolver_query_base.hpp, src/libtorrent/asio/local/basic_endpoint.hpp, src/libtorrent/asio/raw_socket_service.hpp, src/libtorrent/asio/read.hpp, src/libtorrent/asio/read_at.hpp, src/libtorrent/asio/read_until.hpp, src/libtorrent/asio/serial_port.hpp, src/libtorrent/asio/serial_port_base.hpp, src/libtorrent/asio/serial_port_service.hpp, src/libtorrent/asio/ssl/basic_context.hpp, src/libtorrent/asio/ssl/context_base.hpp, src/libtorrent/asio/ssl/context_service.hpp, src/libtorrent/asio/ssl/detail/openssl_context_service.hpp, src/libtorrent/asio/ssl/detail/openssl_init.hpp, src/libtorrent/asio/ssl/detail/openssl_operation.hpp, src/libtorrent/asio/ssl/detail/openssl_types.hpp, src/libtorrent/asio/ssl/stream_base.hpp, src/libtorrent/asio/thread.hpp, src/libtorrent/asio/version.hpp, src/libtorrent/asio/windows/basic_random_access_handle.hpp, src/libtorrent/asio/windows/random_access_handle.hpp, src/libtorrent/asio/windows/random_access_handle_service.hpp, src/libtorrent/asio/write.hpp, src/libtorrent/asio/write_at.hpp, src/libtorrent/include/libtorrent/GeoIP.h, src/libtorrent/include/libtorrent/alert.hpp, src/libtorrent/include/libtorrent/alert_types.hpp, src/libtorrent/include/libtorrent/asio.hpp, src/libtorrent/include/libtorrent/assert.hpp, src/libtorrent/include/libtorrent/aux_/session_impl.hpp, src/libtorrent/include/libtorrent/bandwidth_manager.hpp, src/libtorrent/include/libtorrent/bencode.hpp, src/libtorrent/include/libtorrent/bitfield.hpp, src/libtorrent/include/libtorrent/broadcast_socket.hpp, src/libtorrent/include/libtorrent/bt_peer_connection.hpp, src/libtorrent/include/libtorrent/buffer.hpp, src/libtorrent/include/libtorrent/chained_buffer.hpp, src/libtorrent/include/libtorrent/config.hpp, src/libtorrent/include/libtorrent/connection_queue.hpp, src/libtorrent/include/libtorrent/create_torrent.hpp, src/libtorrent/include/libtorrent/debug.hpp, src/libtorrent/include/libtorrent/disk_buffer_holder.hpp, src/libtorrent/include/libtorrent/disk_io_thread.hpp, src/libtorrent/include/libtorrent/entry.hpp, src/libtorrent/include/libtorrent/enum_net.hpp, src/libtorrent/include/libtorrent/error_code.hpp, src/libtorrent/include/libtorrent/escape_string.hpp, src/libtorrent/include/libtorrent/extensions.hpp, src/libtorrent/include/libtorrent/extensions/smart_ban.hpp, src/libtorrent/include/libtorrent/extensions/ut_metadata.hpp, src/libtorrent/include/libtorrent/file.hpp, src/libtorrent/include/libtorrent/file_pool.hpp, src/libtorrent/include/libtorrent/file_storage.hpp, src/libtorrent/include/libtorrent/gzip.hpp, src/libtorrent/include/libtorrent/hasher.hpp, src/libtorrent/include/libtorrent/http_connection.hpp, src/libtorrent/include/libtorrent/http_parser.hpp, src/libtorrent/include/libtorrent/http_stream.hpp, src/libtorrent/include/libtorrent/http_tracker_connection.hpp, src/libtorrent/include/libtorrent/instantiate_connection.hpp, src/libtorrent/include/libtorrent/intrusive_ptr_base.hpp, src/libtorrent/include/libtorrent/invariant_check.hpp, src/libtorrent/include/libtorrent/kademlia/closest_nodes.hpp, src/libtorrent/include/libtorrent/kademlia/dht_tracker.hpp, src/libtorrent/include/libtorrent/kademlia/find_data.hpp, src/libtorrent/include/libtorrent/kademlia/msg.hpp, src/libtorrent/include/libtorrent/kademlia/node.hpp, src/libtorrent/include/libtorrent/kademlia/node_entry.hpp, src/libtorrent/include/libtorrent/kademlia/observer.hpp, src/libtorrent/include/libtorrent/kademlia/packet_iterator.hpp, src/libtorrent/include/libtorrent/kademlia/routing_table.hpp, src/libtorrent/include/libtorrent/kademlia/rpc_manager.hpp, src/libtorrent/include/libtorrent/lazy_entry.hpp, src/libtorrent/include/libtorrent/lsd.hpp, src/libtorrent/include/libtorrent/magnet_uri.hpp, src/libtorrent/include/libtorrent/natpmp.hpp, src/libtorrent/include/libtorrent/parse_url.hpp, src/libtorrent/include/libtorrent/pch.hpp, src/libtorrent/include/libtorrent/pe_crypto.hpp, src/libtorrent/include/libtorrent/peer_connection.hpp, src/libtorrent/include/libtorrent/peer_id.hpp, src/libtorrent/include/libtorrent/peer_info.hpp, src/libtorrent/include/libtorrent/piece_picker.hpp, src/libtorrent/include/libtorrent/policy.hpp, src/libtorrent/include/libtorrent/proxy_base.hpp, src/libtorrent/include/libtorrent/session.hpp, src/libtorrent/include/libtorrent/session_settings.hpp, src/libtorrent/include/libtorrent/session_status.hpp, src/libtorrent/include/libtorrent/size_type.hpp, src/libtorrent/include/libtorrent/socket.hpp, src/libtorrent/include/libtorrent/socks4_stream.hpp, src/libtorrent/include/libtorrent/socks5_stream.hpp, src/libtorrent/include/libtorrent/ssl_stream.hpp, src/libtorrent/include/libtorrent/stat.hpp, src/libtorrent/include/libtorrent/storage.hpp, src/libtorrent/include/libtorrent/time.hpp, src/libtorrent/include/libtorrent/torrent.hpp, src/libtorrent/include/libtorrent/torrent_handle.hpp, src/libtorrent/include/libtorrent/torrent_info.hpp, src/libtorrent/include/libtorrent/tracker_manager.hpp, src/libtorrent/include/libtorrent/udp_socket.hpp, src/libtorrent/include/libtorrent/udp_tracker_connection.hpp, src/libtorrent/include/libtorrent/upnp.hpp, src/libtorrent/include/libtorrent/variant_stream.hpp, src/libtorrent/include/libtorrent/version.hpp, src/libtorrent/include/libtorrent/web_peer_connection.hpp, src/libtorrent/include/libtorrent/xml_parse.hpp, src/libtorrent/src/GeoIP.c, src/libtorrent/src/Makefile.am, src/libtorrent/src/alert.cpp, src/libtorrent/src/assert.cpp, src/libtorrent/src/broadcast_socket.cpp, src/libtorrent/src/bt_peer_connection.cpp, src/libtorrent/src/connection_queue.cpp, src/libtorrent/src/create_torrent.cpp, src/libtorrent/src/disk_buffer_holder.cpp, src/libtorrent/src/disk_io_thread.cpp, src/libtorrent/src/entry.cpp, src/libtorrent/src/enum_net.cpp, src/libtorrent/src/error_code.cpp, src/libtorrent/src/escape_string.cpp, src/libtorrent/src/file.cpp, src/libtorrent/src/file_old.cpp, src/libtorrent/src/file_pool.cpp, src/libtorrent/src/file_storage.cpp, src/libtorrent/src/gzip.cpp, src/libtorrent/src/http_connection.cpp, src/libtorrent/src/http_parser.cpp, src/libtorrent/src/http_stream.cpp, src/libtorrent/src/http_tracker_connection.cpp, src/libtorrent/src/identify_client.cpp, src/libtorrent/src/instantiate_connection.cpp, src/libtorrent/src/kademlia/closest_nodes.cpp, src/libtorrent/src/kademlia/dht_tracker.cpp, src/libtorrent/src/kademlia/find_data.cpp, src/libtorrent/src/kademlia/node.cpp, src/libtorrent/src/kademlia/refresh.cpp, src/libtorrent/src/kademlia/routing_table.cpp, src/libtorrent/src/kademlia/rpc_manager.cpp, src/libtorrent/src/kademlia/traversal_algorithm.cpp, src/libtorrent/src/lazy_bdecode.cpp, src/libtorrent/src/logger.cpp, src/libtorrent/src/lsd.cpp, src/libtorrent/src/magnet_uri.cpp, src/libtorrent/src/metadata_transfer.cpp, src/libtorrent/src/natpmp.cpp, src/libtorrent/src/parse_url.cpp, src/libtorrent/src/pch.cpp, src/libtorrent/src/pe_crypto.cpp, src/libtorrent/src/peer_connection.cpp, src/libtorrent/src/piece_picker.cpp, src/libtorrent/src/policy.cpp, src/libtorrent/src/session.cpp, src/libtorrent/src/session_impl.cpp, src/libtorrent/src/smart_ban.cpp, src/libtorrent/src/socks4_stream.cpp, src/libtorrent/src/socks5_stream.cpp, src/libtorrent/src/stat.cpp, src/libtorrent/src/storage.cpp, src/libtorrent/src/torrent.cpp, src/libtorrent/src/torrent_handle.cpp, src/libtorrent/src/torrent_info.cpp, src/libtorrent/src/tracker_manager.cpp, src/libtorrent/src/udp_socket.cpp, src/libtorrent/src/udp_tracker_connection.cpp, src/libtorrent/src/upnp.cpp, src/libtorrent/src/ut_metadata.cpp, src/libtorrent/src/ut_pex.cpp, src/libtorrent/src/web_peer_connection.cpp, tools/update-potfileslist.sh: Revert "Merge branch 'libt-update' into updater_improvements" This reverts commit fb4c994d2121fbe8f709c616c966991d8bcd9842, reversing changes made to f6832b7818dcd386e4b2a0f8375e28b64afa020a. 2009-08-19 Rene Milk * Makefile.am: add missing image header 2009-08-19 Rene Milk * Makefile.am: fix makefile for settings changes 2009-08-19 Rene Milk * src/settings++/Main.cpp, src/settings.cpp, src/settings.h: fix settings pickung up wrong conf file on win, some naming in Settings corrected 2009-08-19 Rene Milk * src/spring.cpp: add existence check for spring binary before starting 2009-08-19 Rene Milk * CMakeLists.txt, src/settings++/frame.cpp, src/settings++/panel_pathoption.cpp, src/settings++/se_utils.cpp, src/settings++/se_utils.h: change springsettings unitsync loading to use usync gloabl from SL Conflicts: src/settings++/se_utils.cpp 2009-08-19 Rene Milk * src/spring.cpp, src/ui.cpp: bring back the infolog on crash question and dbg report prototype 2009-08-17 Rene Milk * src/chatpanel.cpp: don't update channel icon highlighst if tabs is visible 2009-08-19 Rene Milk * src/settings++/Main.cpp, src/settings.cpp, src/settings.h: fix settings pickung up wrong conf file on win, some naming in Settings corrected 2009-08-19 Rene Milk * src/spring.cpp: add existence check for spring binary before starting 2009-08-19 Rene Milk * src/aui/slbook.cpp, src/aui/slbook.h, src/battleroomlistctrl.cpp, src/chatpanel.cpp, src/chatpanelmenu.cpp, src/chatpanelmenu.h, src/usermenu.h: fix usermenu in brommlistctrl 2009-08-19 Rene Milk * CMakeLists.txt, src/settings++/frame.cpp, src/settings++/panel_pathoption.cpp, src/settings++/se_utils.cpp, src/settings++/se_utils.h: change springsettings unitsync loading to use usync gloabl from SL 2009-08-19 Rene Milk * src/spring.cpp, src/ui.cpp: bring back the infolog on crash question and dbg report prototype 2009-08-19 Rene Milk * src/mainjoinbattletab.cpp, src/mainoptionstab.cpp, src/mainsingleplayertab.cpp, src/mainwindow.cpp: mostly works, some quirks with layout after laod reamin 2009-08-19 Rene Milk * src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mainoptionstab.cpp, src/mainoptionstab.h, src/mainsingleplayertab.cpp, src/mainwindow.cpp, src/mainwindow.h: battle,sp,and otpionstab load/save works 2009-08-19 Rene Milk * src/aui/slbook.cpp, src/aui/slbook.h, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainoptionstab.cpp, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h, src/mainwindow.cpp, src/settings.cpp, src/settings.h, src/widgets/infopanel.cpp: preperations for all around layout saving 2009-08-19 Rene Milk * src/mainchattab.cpp, src/mainwindow.cpp: save load ,_func_tabs 2009-08-19 Rene Milk * src/mainchattab.cpp: add load/save 2009-08-19 Rene Milk * src/aui/slbook.cpp, src/aui/slbook.h, src/settings.cpp, src/settings.h: add a patch from wx trac that might give perspection saving on chat tabs 2009-08-19 Rene Milk * src/aui/slbook.cpp: tried a couple more non working poss to disallow tab splitting 2009-08-19 Rene Milk * src/aui/slbook.cpp, src/aui/slbook.h: add new tab menu entry 2009-08-19 Rene Milk * src/aui/slbook.cpp, src/aui/slbook.h, src/chatpanelmenu.h: tab header menus work, a sigbart/segv remains on destr 2009-08-19 Rene Milk * src/aui/slbook.cpp: add chanserv too 2009-08-19 Rene Milk * src/aui/slbook.cpp, src/chatpanelmenu.cpp, src/usermenu.h: shit works 2009-08-19 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/chatpanelmenu.cpp, src/chatpanelmenu.h: a bit working 2009-08-19 Rene Milk * src/chatpanelmenu.cpp, src/chatpanelmenu.h, src/usermenu.h: still nothing 2009-08-19 Rene Milk * src/aui/slbook.cpp, src/chatpanel.cpp, src/chatpanelmenu.cpp, src/chatpanelmenu.h: still not wokring 2009-08-19 Rene Milk * src/battleroomlistctrl.cpp, src/chatpanel.cpp, src/chatpanel.h, src/chatpanelmenu.cpp, src/chatpanelmenu.h, src/nicklistctrl.cpp, src/nicklistctrl.h, src/usermenu.h: shits not working 2009-08-19 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/aui/slbook.cpp, src/chatpanel.cpp, src/chatpanel.h, src/chatpanelmenu.cpp, src/chatpanelmenu.h, src/server.cpp: split menu from chatpanel.cpp 2009-08-18 Rene Milk * src/settings++/se_utils.cpp, src/settings.cpp: code format 2009-08-18 Rene Milk * src/aui/slbook.cpp, src/aui/slbook.h, src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainchattab.h, src/usermenu.h: on the way to factoring out the menu stuff from chatpanel 2009-08-18 Andrea Piras * src/server.cpp, src/tasserver.cpp, src/tasserver.h: listing actually works now 2009-08-18 Andrea Piras * src/spring.cpp: fixed script generation when using relayhosts 2009-08-18 Andrea Piras * src/hostbattledialog.cpp, src/hostbattledialog.h, src/server.cpp, src/server.h, src/settings.cpp, src/tasserver.cpp: now the user can pick the relayhost manually from the hosting dialog 2009-08-18 Andrea Piras * src/battlelisttab.cpp, src/ibattle.h, src/tasserver.cpp: fixed some indentation fuckup 2009-08-12 Tiziano * src/battlelisttab.cpp, src/hostbattledialog.cpp, src/hostbattledialog.h, src/ibattle.h, src/settings.cpp, src/settings.h, src/tasserver.cpp: Now user can choose the relayhostmanager to use when hosting 2009-08-17 Rene Milk * src/chatpanel.cpp: don't update channel icon highlighst if tabs is visible 2009-08-17 Rene Milk * src/channel/channellistctrl.cpp, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h: trying to get rid of the width issues on win 2009-08-17 Rene Milk * src/hostbattledialog.cpp, src/hostbattledialog.h: implement reload button in host battle dialog 2009-08-17 Rene Milk * src/hostbattledialog.cpp, src/hostbattledialog.h, src/images/arrow_refresh.png.h: improve hostbattle dialog layout (again??) 2009-08-17 Andrea Piras * : commit 30adc8ace8fd801a764e8aea8ac32afa372009f9 Author: Rene Milk Date: Sat Aug 15 15:54:00 2009 +0200 2009-08-15 Rene Milk * src/ui.cpp: Revert "disable dbg report for spring" This reverts commit 689ac4f2ff4c159cd0746996d76996fa8712c52b. 2009-08-15 Rene Milk * src/battlemaptab.cpp, src/battlemaptab.h, src/battleroomtab.cpp, src/battleroomtab.h: fixes 1010 2009-08-15 Tiziano * src/chatpanel.cpp: Preserve custom bold from settings when using irc colors Implemented escape code 0x0f to pop any formatting 2009-08-12 Tiziano * src/chatpanel.cpp: Fix the exploit & apply patch on IRC Colors parser 2009-08-15 Rene Milk * src/lobbyoptionstab.cpp: fix checkbox label cut off 2009-08-15 Rene Milk * src/aui/slbook.cpp, src/lobbyoptionstab.cpp, src/lobbyoptionstab.h, src/settings.cpp, src/settings.h: optional close button on all tabs, fixes 919 2009-08-15 Rene Milk * src/tasserver.cpp: possible fix for empty ADDBOT 2009-08-14 Rene Milk * src/settings.cpp: try to use notepad as default editor on msw 2009-08-14 Rene Milk * src/ui.cpp: disable dbg report for spring 2009-08-14 Rene Milk * src/spring.cpp, src/springprocess.cpp, src/springprocess.h, src/ui.cpp, src/ui.h: first version of debug report for crashed spring 2009-08-14 Rene Milk * src/chatlog.cpp, src/ui.cpp, src/ui.h, src/uiutils.cpp, src/uiutils.h: a little restrucuring to not make springsettings depend uppon Ui and mainwindow 2009-08-14 Rene Milk * src/chatlog.cpp, src/chatlog.h, src/chatpanel.cpp, src/chatpanel.h, src/lobbyoptionstab.cpp, src/lobbyoptionstab.h, src/settings.cpp, src/settings.h, src/uiutils.cpp, src/uiutils.h: implemented opening chtalogs in external editor, fixes 844 2009-08-12 Rene Milk * : commit b3a65b106c1dc3df771c8bccb4b2e44301016953 Merge: 3c024b7 e1a495e Author: Rene Milk Date: Wed Aug 12 12:44:43 2009 +0200 2009-08-12 Rene Milk * tools/buildbot-create-build-dirs.sh: temp disable sounds cause build env is fubar 2009-08-11 Rene Milk * src/chatoptionstab.cpp, src/chatpanel.cpp: disable irc colors in chatpanel due to possible inf loop 2009-08-08 Rene Milk * src/maintorrenttab.cpp: fix conflict resolution error 2009-08-08 Rene Milk * : commit 07001790c64ac2b44bcfa5f086fa26c44220ea1a Author: Rene Milk Date: Fri Aug 7 16:38:17 2009 +0200 2009-08-07 Rene Milk * src/agreementdialog.cpp, src/autohost.cpp, src/battlelistfilter.cpp, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroomtab.cpp, src/battleroomtab.h, src/chatlog.cpp, src/chatoptionstab.cpp, src/flagimages.cpp, src/hostbattledialog.cpp, src/hostbattledialog.h, src/httpdownloader.cpp, src/httpdownloader.h, src/lobbyoptionstab.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainoptionstab.cpp, src/mainoptionstab.h, src/mainsingleplayertab.cpp, src/maintorrenttab.cpp, src/mapselectdialog.cpp, src/mmoptionwindows.cpp, src/nicklistctrl.cpp, src/playback/playbacktab.cpp, src/settings.cpp, src/springoptionstab.cpp, src/springprocess.cpp, src/tdfcontainer.cpp, src/tdfcontainer.h, src/thread.cpp: code formatting 2009-08-07 Rene Milk * src/playback/playbacktab.cpp: fixes 1044 2009-08-07 Rene Milk * src/hostbattledialog.cpp, src/hostbattledialog.h: completely remove fw test, fixes 1001 2009-08-07 Rene Milk * src/tasserver.cpp: disabled time out assumption 2009-08-07 Rene Milk * src/addbotdialog.cpp, src/channel/channelchooser.cpp: a couple more v aligns 2009-08-07 Rene Milk * src/chatoptionstab.cpp, src/groupoptionspanel.cpp, src/torrentoptionspanel.cpp: more alignement fixes 2009-08-07 Rene Milk * src/battleroommmoptionstab.cpp: v-align preset selection combo 2009-08-07 Rene Milk * src/singleplayertab.cpp: proper label align in sptab 2009-08-07 Rene Milk * src/battleroommmoptionstab.cpp: fix optiontab layout when only one string option has no section defined 2009-08-07 Rene Milk * src/battleroomtab.cpp: vertical center labels 2009-08-07 Rene Milk * src/connectwindow.cpp: language fix 2009-08-07 Rene Milk * src/updater/updater.cpp: make error msg on updater exe replace fail a bit more clear 2009-08-07 Rene Milk * src/springlobbyapp.cpp: default to loglevel 3 if gui logging is enabled, 5 otherwise 2009-08-07 Rene Milk * : commit d169092b4e94c970ca3466a4abd17fd06235d341 Author: Rene Milk Date: Fri Aug 7 00:06:12 2009 +0200 2009-08-06 Rene Milk * src/gui/simplefront.h, src/gui/skirmish_dialog.cpp: close the simple interface when moving to adavanced singleplayer 2009-08-06 Rene Milk * : commit 6ef098bd96b613cad07ec778a15d5513dfbc162b Author: Rene Milk Date: Thu Aug 6 21:28:29 2009 +0200 2009-07-27 Rene Milk * tools/addFileToBuildsystems.sh: new script to easily add existing source files to git adn buildsystems 2009-08-06 Rene Milk * src/boost/README.txt, src/boost/md5.cpp, src/boost/md5.hpp, src/tasserver.cpp: working stuff 2009-08-05 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/aui/slbook.cpp, src/aui/slbook.h, src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainchattab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mainoptionstab.cpp, src/mainoptionstab.h, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h, src/mainwindow.cpp, src/mainwindow.h, src/widgets/infopanel.cpp, src/widgets/infopanel.h: Fix crash when dragging tabs with desktop effects/composition enabled 2009-08-05 Rene Milk * src/aui/auimanager.h, src/mainwindow.cpp: adds a dummy manager class, not used, but maybe useful in the future 2009-08-04 Rene Milk * src/mainwindow.cpp: dur, put include in wrong code path. now really fix no torrent compile 2009-08-04 Rene Milk * src/mainwindow.cpp: fix non-torrent build 2009-08-04 Rene Milk * : commit c2028b0af3369d9e29065e4b9a98dac37e172e36 Merge: 906cabe 0dba501 Author: Rene Milk Date: Tue Aug 4 01:41:48 2009 +0200 2009-08-04 Rene Milk * src/ui.cpp: potential fix for 1042 2009-08-02 Rene Milk * src/gui/skirmish_dialog.cpp: msw idiocy workaround 2009-08-02 Rene Milk * src/gui/simplefront.cpp: don|t show help if url not set 2009-08-02 Rene Milk * src/gui/simplefront.cpp: use help url 2009-08-02 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/customizations.cpp, src/customizations.h, src/gui/simplefront.cpp, src/gui/simplefront.h, src/gui/skirmish_dialog.cpp, src/gui/skirmish_dialog.h, src/springlobbyapp.cpp: refactor lobby customizations into a singleton class 2009-08-02 Rene Milk * src/gui/simplefront.cpp, src/gui/simplefront.h: add help button 2009-08-02 Rene Milk * src/battle.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/singleplayertab.cpp, src/uiutils.h: remove useless define 2009-07-31 Rene Milk * src/gui/skirmish_dialog.cpp, src/gui/skirmish_dialog.h, src/utils/controls.cpp, src/utils/controls.h: finished skirmish panel rework 2009-07-31 Rene Milk * src/gui/gradientpanel.cpp, src/gui/gradientpanel.h, src/gui/skirmish_dialog.cpp, src/gui/skirmish_dialog.h: pre-sizer change in sp panel 2009-07-31 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/gui/gradientpanel.cpp, src/gui/gradientpanel.h, src/gui/simplefront.cpp, src/gui/simplefront.h, src/gui/skirmish_dialog.cpp, src/gui/skirmish_dialog.h: better looking sp panel 2009-07-31 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/gui/simplefront.cpp, src/gui/simplefront.h, src/gui/wxgradientbutton.cpp, src/gui/wxgradientbutton.h, src/springlobbyapp.cpp, src/ui.cpp: use gradient buttons on simple front 2009-07-30 Rene Milk * src/gui/simplefront.cpp, src/springlobbyapp.cpp, src/ui.cpp, src/ui.h: phase out some welcome stuff to Ui, so i ca call it from simpleinterface too 2009-07-30 Rene Milk * src/crashreport.cpp, src/crashreport.h: remove uneeded header icludes 2009-07-30 Rene Milk * src/springlobbyapp.cpp: remove silly code duplication 2009-07-30 Rene Milk * src/springlobbyapp.cpp, src/springlobbyapp.h: add new cli args for modname to load customizations from and starting simpleinterface 2009-07-30 Rene Milk * src/gui/simplefront.cpp, src/gui/wxbackgroundimage.h: warnings fixed 2009-07-30 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/gui/simplefrontbase.cpp, src/gui/simplefrontbase.h: remove obsolete files 2009-07-30 Rene Milk * src/gui/skirmish_dialog.cpp: fix back button 2009-07-30 Rene Milk * src/gui/simplefront.cpp, src/gui/simplefront.h, src/gui/skirmish_dialog.cpp: layout issue resolved 2009-07-30 Rene Milk * src/gui/simplefront.cpp, src/gui/simplefront.h, src/gui/simplefrontbase.cpp, src/gui/simplefrontbase.h, src/gui/skirmish_dialog.cpp, src/gui/skirmish_dialog.h: got rid of simplefront base class, made skirmish:dialog a panel to be added to simplefront frame 2009-07-30 Rene Milk * src/gui/skirmish_dialog.cpp: implement random map choice 2009-07-30 Rene Milk * src/gui/simplefront.cpp, src/gui/simplefront.h, src/gui/skirmish_dialog.cpp, src/gui/skirmish_dialog.h: allow multiple ai libs per skirmish template 2009-07-29 Rene Milk * src/gui/skirmish_dialog.cpp, src/gui/skirmish_dialog.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h: implemented player and AI side selection/setting 2009-07-29 Rene Milk * src/gui/simplefront.cpp, src/gui/simplefront.h, src/gui/skirmish_dialog.cpp, src/gui/skirmish_dialog.h: almost finished GUI 2009-07-29 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp: buildsystem fix 2009-07-29 Rene Milk * src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h: implement loading arbitrary images from vfs 2009-07-29 Rene Milk * formbuilder/simplefront.fbp, src/gui/simplefront.cpp, src/gui/simplefrontbase.cpp, src/gui/simplefrontbase.h, src/gui/skirmish_dialog.cpp, src/gui/skirmish_dialog.h, src/images/replay_icon.png.h, src/images/s44.png.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/springunitsync.cpp: make size of simplefornt dpe on bg image 2009-07-29 Rene Milk * src/gui/skirmish_dialog.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/springlobbyapp.cpp, src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: overwriting modoptions with values from custom loaded table works 2009-07-29 Rene Milk * formbuilder/simpleSP.fbp, src/gui/skirmish_dialog.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: implemented OptionWrapper merging 2009-07-28 Rene Milk * src/gui/skirmish_dialog.cpp, src/gui/skirmish_dialog.h, src/singleplayerbattle.cpp: launching SP works 2009-07-28 Rene Milk * src/spring.cpp, src/spring.h: being lazy and duplicated launch code for NoGuiSinglePlayerBattle 2009-07-28 Rene Milk * src/gui/simplefront.cpp, src/gui/simplefront.h, src/ibattle.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/springlobbyapp.cpp, src/springunitsync.cpp: lmost ready to launch singleplaer game from simple interface 2009-07-28 Rene Milk * src/iunitsync.h, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.cpp, src/springunitsynclib.h: loading skirmish list works 2009-07-28 Rene Milk * springlobby.cbp: cbp update 2009-07-28 Rene Milk * src/gui/simplefront.cpp, src/gui/simplefront.h, src/springlobbyapp.cpp, src/springlobbyapp.h, src/springunitsynclib.cpp, src/springunitsynclib.h: successfully load custom option table thru patched usync 2009-07-28 Rene Milk * formbuilder/simplefront.fbp: teh formbuilder file for simple frontend 2009-07-27 Rene Milk * src/gui/simplefront.cpp, src/gui/simplefront.h, src/mainwindow.cpp, src/springlobbyapp.cpp: make simplefront actually do stuff 2009-07-27 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/gui/simplefront.cpp, src/gui/simplefrontbase.cpp, src/gui/simplefrontbase.h, src/gui/wxbackgroundimage.cpp, src/gui/wxbackgroundimage.h, src/images/s44.png.h, src/lobbyoptionstab.cpp: background grahpic example + support files 2009-07-27 Rene Milk * tools/addFileToBuildsystems.sh: new script to easily add existing source files to git adn buildsystems 2009-07-27 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/gui/simplefront.cpp, src/gui/simplefront.h, src/gui/simplefrontbase.cpp, src/gui/simplefrontbase.h: new files for simple greeeter frontend 2009-07-26 Rene Milk * src/ibattle.cpp: proxy class for arecolours similar to allow custom mindiff in std::unique 2009-07-26 Rene Milk * src/ibattle.cpp: fix for > 16 teams 2009-07-26 Rene Milk * src/ibattle.cpp: seems to work 2009-07-25 Andrea Piras * src/ibattle.cpp: typo 2009-07-25 Andrea Piras * src/ibattle.cpp: correct code to skip an user's colour 2009-07-25 Andrea Piras * : Merge commit 'koshi/getfreecolour' into getfreecolour Conflicts: src/ibattle.cpp 2009-07-25 Andrea Piras * src/ibattle.cpp: fixed typo 2009-07-25 Rene Milk * src/ibattle.cpp: fix compile 2009-07-25 Andrea Piras * src/ibattle.cpp: don't loop endlessy in getfreecolour if there is only 1 team 2009-07-25 Andrea Piras * src/ibattle.cpp, src/uiutils.cpp: tried to rewrite getfreecolour 2009-07-25 Andrea Piras * src/battle.cpp, src/ibattle.cpp, src/ibattle.h, src/uiutils.cpp: fixed fixcolours for good 2009-07-25 Andrea Piras * src/ibattle.cpp: more fixes for fix colours 2009-07-25 Andrea Piras * src/ibattle.cpp: fixed typo 2009-07-25 Andrea Piras * src/ibattle.cpp: hopefulyl fixed team & ally & spec count 2009-07-25 Rene Milk * tools/buildbot-create-even-more-build-dirs.sh: a script to create 6 more build tests 2009-07-21 Rene Milk * src/chatpanel.cpp: applied patch by wouter, thanks! fixes 1009 2009-07-20 Rene Milk * : Merge commit 'buildbot/master' 2009-07-19 Rene Milk * : Merge commit 'buildbot/master' into rc1 2009-07-19 Andrea Piras * src/ibattle.cpp: fixed random crash 2009-07-19 Andrea Piras * src/ibattle.cpp: only assign new colours, team and ally if you're the host 2009-07-19 Andrea Piras * src/ibattle.cpp: fixed random crash 2009-07-19 Andrea Piras * src/ibattle.cpp: only assign new colours, team and ally if you're the host 2009-07-19 Rene Milk * : Merge commit 'buildbot/master' into rc1 2009-07-17 Andrea Piras * src/ibattle.cpp, src/offlinebattle.cpp: more fixes for replay script parsing 2009-07-17 Rene Milk * src/playback/playbacklistctrl.cpp, src/playback/playbackstructs.h, src/playback/replaylist.cpp: additionally save time_t from replay header to use in sorting 2009-07-17 Rene Milk * src/mainwindow.h: fix wrong label for replay/savegame tab 2009-07-17 Andrea Piras * src/offlinebattle.cpp: more fixes for replays 2009-07-17 Andrea Piras * src/ibattle.cpp: fixed parsing of ally in replays 2009-07-17 Andrea Piras * src/offlinebattle.cpp, src/spring.cpp: some improvements for script.txt generation for replays 2009-07-17 Andrea Piras * src/spring.cpp: fixed broken script.txt generation 2009-07-15 Rene Milk * springlobby.cbp: my own little wx29 build config for c::b 2009-07-15 Rene Milk * : Merge commit 'insaneinside/master' into wxtrunk 2009-07-15 Andrea Piras * : commit 58140dfc9b1dbad1b3dee6ad4035e89427e2d31f Merge: 49a1965 8070720 Author: Andrea Piras Date: Wed Jul 15 12:58:48 2009 +0200 2009-07-15 Andrea Piras * : commit 57876fd3d21ab6d65aa5d09a772bed58e22390a7 Author: Rene Milk Date: Wed Jul 15 01:45:20 2009 +0200 2009-07-15 Rene Milk * src/torrentlistctrl.cpp: Merge commit 'ole/libt-update' into rc1 Conflicts: src/maintorrenttab.cpp src/torrentlistctrl.cpp 2009-07-14 Collin J. Sutton * src/battlelisttab.cpp: Corrected base class in BattleListTab event table declaration 2009-07-15 Rene Milk * : Merge commit 'ole/libt-update' into wxtrunk Conflicts: src/maintorrenttab.cpp src/torrentlistctrl.cpp 2009-07-15 Rene Milk * : commit e8e6da337ff8eed102c74818f479c5c2f71d0b77 Author: Rene Milk Date: Tue Jul 14 23:03:05 2009 +0200 2009-07-14 Rene Milk * src/mmoptionmodel.cpp: actual bugfix 2009-07-14 Rene Milk * src/playback/playbackthread.h: fix for gcc 4.3 2009-07-14 Rene Milk * Makefile.am, springlobby.cbp, src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/connectwindow.cpp, src/defines.h, src/playback/playbackthread.h, src/settings.h: some minor fixes to build against wx-trunk 2009-07-13 Rene Milk * : Merge commit 'insaneinside/master' into rc1 2009-07-13 Rene Milk * : Merge commit 'bd/master' 2009-07-12 Tommy Carlsson * : Merge commit 'bd/master' Conflicts: src/channel/channel.cpp src/ui.cpp 2009-07-12 Andrea Piras * src/ibattle.cpp: reduce tollerance when searching for new colours for bots 2009-07-12 Andrea Piras * src/spring.cpp: append isfromdemo to bots too 2009-07-12 Andrea Piras * src/battleroomtab.cpp: always enable ready check when not spec 2009-07-12 olemars * : commit b28821d7679fbceae16f3a52ab265628a5e373f4 Author: olemars Date: Sun Jul 12 01:51:01 2009 +0200 2009-07-11 Collin J. Sutton * src/battlelistfilter.cpp: Fixed battle status filters (checkboxes) behavior. Those filters are now evaluated ONLY when checked, and a battle is filtered out ONLY if it does NOT meet a condition. 2009-07-11 olemars * src/torrentlistctrl.cpp, src/torrentwrapper.h: fixed some programming-at-2AM code, changed column widths 2009-07-10 Rene Milk * : commit f6832b7818dcd386e4b2a0f8375e28b64afa020a Author: Rene Milk Date: Fri Jul 10 02:19:16 2009 +0200 2009-07-10 Rene Milk * : commit 008020637e38dfa28bce4c86848a0efa8eb174d0 Merge: 3b18d57 17bacf0 Author: Rene Milk Date: Fri Jul 10 02:04:15 2009 +0200 2009-07-10 Rene Milk * : commit 1f0349c35e62337175eb1220ba5e215d9abcc988 Merge: 20165ed 8070720 Author: Rene Milk Date: Fri Jul 10 01:55:59 2009 +0200 2009-07-10 Rene Milk * src/Helper/wxTranslationHelper.h, src/addbotdialog.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/iunitsync.h, src/mmoptionmodel.h, src/server.h, src/settings++/custom_dialogs.h, src/settings.h, src/springunitsynclib.h, src/ui.h, src/user.h: - copy-protected some classes 2009-07-10 Rene Milk * src/Helper/imageviewer.cpp, src/Helper/wxtextctrlhist.cpp, src/addbotdialog.cpp, src/agreementdialog.cpp, src/aui/artprovider.cpp, src/autobalancedialog.cpp, src/autohost.cpp, src/battle.cpp, src/battlelistctrl.cpp, src/battlelistfilter.cpp, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroomlistctrl.cpp, src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/boost/md5.cpp, src/channel/autojoinchanneldialog.cpp, src/channel/channelchooser.cpp, src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/chatoptionstab.cpp, src/chatpanel.cpp, src/customlistctrl.cpp, src/customvirtlistctrl.cpp, src/filelister/filelistctrl.cpp, src/filelister/filelistdialog.cpp, src/groupoptionspanel.cpp, src/hostbattledialog.cpp, src/ibattle.cpp, src/iconimagelist.cpp, src/inetclass.h, src/lobbyoptionstab.cpp, src/maintorrenttab.cpp, src/mainwindow.cpp, src/mapctrl.cpp, src/mapgridctrl.cpp, src/mapselectdialog.cpp, src/mmoptionwindows.cpp, src/nicklistctrl.cpp, src/playback/playbackfilter.cpp, src/playback/playbacklistctrl.cpp, src/playback/playbacklistctrl.h, src/playback/playbacktab.cpp, src/selectusersdialog.cpp, src/serverevents.cpp, src/settings++/custom_dialogs.cpp, src/settings++/frame.cpp, src/settings++/panel_pathoption.cpp, src/settings++/tab_abstract.cpp, src/settings++/tab_audio.cpp, src/settings++/tab_ui.cpp, src/settings.cpp, src/settings.h, src/singleplayerbattle.h, src/singleplayertab.cpp, src/spring.cpp, src/springoptionstab.cpp, src/springunitsynclib.cpp, src/tasserver.cpp, src/tdfcontainer.cpp, src/torrentlistctrl.cpp, src/torrentoptionspanel.cpp, src/torrentwrapper.cpp, src/ui.cpp, src/uiutils.cpp, src/updater/updater.cpp, src/user.cpp, src/userlistctrl.cpp, src/utils/sltipwin.cpp, src/widgets/downloadlistctrl.cpp, src/widgets/downloadlistctrl.h, src/widgets/downloadpanel.cpp, src/widgets/infopanel.cpp: fix lots of unused parameter and missing default case warnings 2009-07-10 olemars * src/torrentlistctrl.cpp: filter out seeds that aren't actually uploading 2009-07-10 olemars * src/maintorrenttab.cpp, src/maintorrenttab.h, src/torrentlistctrl.cpp, src/torrentlistctrl.h, src/torrentwrapper.cpp, src/torrentwrapper.h: revamp getting somewhere usable 2009-07-10 Dmytry Lavrov * src/utils/events.h: Fixed segfault, updated comments 2009-07-09 Rene Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/mmoptionswrapper.cpp, src/nicklistctrl.cpp, src/nicklistctrl.h, src/settings.cpp, src/settings.h, src/uiutils.cpp, src/uiutils.h, src/userlist.h: some coding style fixes 2009-07-09 Rene Milk * src/utils/events.h: replaced code in event.h with new from dize 2009-07-09 Rene Milk * src/updater/updatermainwindow.cpp, src/updater/updatermainwindow.h, src/utils/platform.cpp: updatermainwindow now beahving nicely 2009-07-09 Rene Milk * src/springlobbyapp.cpp, src/updater/updatermainwindow.cpp, src/utils/platform.cpp: trying to fix window display 2009-07-09 Rene Milk * src/springlobbyapp.cpp, src/updater/updatermainwindow.cpp: trying to get updater win to behave correctly 2009-07-09 Rene Milk * src/updater/updater.cpp, src/updater/updatermainwindow.cpp, src/updater/updatermainwindow.h, src/utils/globalevents.h, src/utils/platform.cpp, src/utils/platform.h: notify update mainwin when update has finished 2009-07-09 Rene Milk * src/utils/activitynotice.cpp, src/utils/activitynotice.h: fix msw compile 2009-07-09 Rene Milk * src/springlobbyapp.cpp, src/updater/updater.cpp, src/updater/updater.h, src/updater/updatermainwindow.cpp: make all win OS use the seperate instance for updating 2009-07-09 Rene Milk * src/utils/customdialogs.cpp, src/utils/customdialogs.h: adds nonModal variant of timed messagebox 2009-07-09 Rene Milk * src/updater/updatermainwindow.cpp, src/utils/customdialogs.cpp, src/utils/customdialogs.h: new timedMessageBox, that is uncloseable for X seconds 2009-07-09 Rene Milk * src/Helper/slhtmlwindow.cpp, src/chatpanel.cpp, src/mainwindow.cpp, src/springlobbyapp.cpp, src/ui.cpp, src/ui.h, src/uiutils.cpp, src/uiutils.h, src/updater/updatermainwindow.cpp, src/updater/updatermainwindow.h, src/utils/activitynotice.cpp, src/utils/activitynotice.h, src/utils/math.h, src/utils/misc.cpp, src/widgets/downloadlistctrl.cpp: - move openbrowser to uiutils so i can use it w/o creating mainwindow - revamp act. notice for definable gauge size - add a changelog button to updatermainwin 2009-07-09 Rene Milk * src/springlobbyapp.cpp, src/updater/updatermainwindow.cpp, src/updater/updatermainwindow.h: testing updaterwin 2009-07-09 Rene Milk * src/lobbyoptionstab.cpp, src/springlobbyapp.cpp, src/springlobbyapp.h, src/utils/activitynotice.h: new member win in springlobbyapp 2009-07-09 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/updater/updatermainwindow.cpp, src/updater/updatermainwindow.h: new files for showing a toplevelwindow while updating 2009-07-09 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/utils/activitynotice.cpp, src/utils/activitynotice.h, src/utils/customdialogs.cpp, src/utils/customdialogs.h: seperate activity notice into own header/source 2009-07-09 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/Helper/imageviewer.cpp, src/Helper/wxTranslationHelper.cpp, src/addbotdialog.cpp, src/battle.cpp, src/battlelistctrl.cpp, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/chatlog.cpp, src/chatpanel.cpp, src/connectwindow.cpp, src/customlistctrl.cpp, src/customvirtlistctrl.cpp, src/hostbattledialog.cpp, src/lobbyoptionstab.cpp, src/mainwindow.cpp, src/mmoptionswrapper.cpp, src/playback/playbacktab.cpp, src/playback/replaylist.cpp, src/playback/savegamelist.cpp, src/serverevents.cpp, src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h, src/settings++/frame.cpp, src/settings++/helpmenufunctions.cpp, src/settings++/panel_pathoption.cpp, src/settings++/se_utils.cpp, src/settings++/tab_abstract.cpp, src/settings.cpp, src/singleplayertab.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springunitsync.cpp, src/tasserver.cpp, src/torrentwrapper.cpp, src/ui.cpp, src/uiutils.cpp, src/updater/updater.cpp, src/updater/versionchecker.cpp, src/useractions.cpp, src/utils/customdialogs.cpp, src/utils/customdialogs.h, src/widgets/infopanel.cpp: move custom dialogs to a better place 2009-07-09 Rene Milk * : commit 16b62d6780f3bed18b3c8d3570af01ddcc9929b8 Merge: f98f87d a10fbb0 Author: Rene Milk Date: Thu Jul 9 11:59:03 2009 +0200 2009-07-09 olemars * src/maintorrenttab.cpp, src/maintorrenttab.h, src/torrentlistctrl.cpp: minor cleanup 2009-07-09 Rene Milk * src/mainwindow.cpp, src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h: trying with auto pointer, scoped notice still not working 2009-07-09 Rene Milk * src/springunitsync.cpp: remove examples 2009-07-09 Rene Milk * src/settings++/custom_dialogs.cpp: simplfy static box deconstruction, add one forgotten 2009-07-09 Rene Milk * : commit f98f87d3e3110b39076400a6c0afb1728d77cf25 Author: Rene Milk Date: Thu Jul 9 00:01:15 2009 +0200 2009-07-08 Andrea Piras * src/uiutils.cpp: changed series using tobi's algorythm so that numbers are less adjacent now in the fixcolours palette 2009-07-08 Rene Milk * : commit f7b29951b5cc0fa351322a6d67dc5ae616d820af Merge: 9c1a1e4 e6748aa Author: Rene Milk Date: Wed Jul 8 20:53:30 2009 +0200 2009-07-08 olemars * : commit ccb798fed79b50b58ef25d3c5b2dd0d9cfc37481 Author: Rene Milk Date: Wed Jul 8 20:08:38 2009 +0200 2009-07-08 olemars * : commit 9c1a1e41a9455a3416f74b80f3590985f36c1b4c Author: Rene Milk Date: Wed Jul 8 19:54:14 2009 +0200 2009-07-08 olemars * src/torrentlistctrl.cpp: text change 2009-07-08 Andrea Piras * : commit cf93e942f926dea010cd3aaadb7f034c1821b364 Author: Rene Milk Date: Wed Jul 8 16:50:02 2009 +0200 2009-07-08 Andrea Piras * src/uiutils.h: removed useless colour table 2009-07-08 Andrea Piras * src/ibattle.cpp, src/ibattle.h: now getfreecolour uses the new palettes too 2009-07-08 Andrea Piras * src/battle.cpp, src/ibattle.cpp, src/ibattle.h: now GetFixColoursPalette automagically returns the correct palette size 2009-07-08 Andrea Piras * src/uiutils.cpp: reworked a bit the GetBigFixColoursPalette so it returns more various results 2009-07-08 Rene Milk * src/customvirtlistctrl.cpp: fixes 988, putting sort indicator on wrong 2009-07-08 olemars * src/torrentlistctrl.cpp: Fixed refresh a bit 2009-07-07 Rene Milk * src/customvirtlistctrl.cpp: revert to correct timer id 2009-07-08 Rene Milk * : commit 8bfb8a7bc91d8cf7011d5e8eaf778d1749f2e20a Author: Rene Milk Date: Tue Jul 7 23:09:16 2009 +0200 2009-07-07 Rene Milk * src/singleplayerbattle.cpp, src/singleplayertab.cpp: fix sp not starting with nickname set, fixes 806 Conflicts: src/singleplayertab.cpp 2009-07-07 olemars * src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h: moved event stuff from IUnitSync to SpringUnitSync 2009-07-07 Andrea Piras * src/battle.cpp, src/ibattle.cpp, src/uiutils.cpp, src/uiutils.h: fixed build and added function to generate more colors if too many players are present 2009-07-07 Andrea Piras * src/battle.cpp, src/uiutils.cpp, src/uiutils.h: added function to generated big palette of colors to fix colors 2009-07-07 Andrea Piras * src/ibattle.cpp: fixed counting of teams and allies 2009-07-06 Rene Milk * src/singleplayertab.cpp, src/utils/conversion.cpp, src/utils/conversion.h: simplfy maplist filling Conflicts: src/singleplayertab.cpp src/springunitsync.h 2009-07-06 Rene Milk * src/utils/events.h: remove unnecessary header 2009-07-06 olemars * src/maintorrenttab.cpp, src/maintorrenttab.h, src/torrentlistctrl.cpp, src/torrentlistctrl.h, src/torrentwrapper.cpp: WiP - porting torrentlistctrl to virtlistctrl 2009-07-06 Rene Milk * src/battleroomtab.cpp, src/httpdownloader.cpp, src/mapctrl.cpp, src/singleplayertab.cpp: getting weird abort on torrent complete 2009-07-06 Rene Milk * src/singleplayertab.cpp, src/springunitsync.h, src/utils/conversion.cpp, src/utils/conversion.h: simplfy maplist filling 2009-07-06 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/globaleventshandler.cpp, src/globaleventshandler.h: remove obsolete files 2009-07-06 Rene Milk * src/globaleventshandler.cpp, src/globaleventshandler.h, src/mainwindow.cpp, src/mapctrl.cpp, src/playback/playbacktab.cpp, src/springlobbyapp.cpp, src/ui.cpp, src/ui.h: trigger all unitsync reloads via events 2009-07-06 Rene Milk * src/iunitsync.h, src/singleplayertab.cpp, src/springlobbyapp.cpp, src/springunitsync.h, src/torrentwrapper.cpp, src/utils/globalevents.h: trying events for triggering unitsync reload 2009-07-06 Rene Milk * src/mainwindow.cpp: resolve deadlock 2009-07-06 Rene Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.cpp, src/battlelisttab.h, src/battlemaptab.cpp, src/battlemaptab.h, src/battleoptionstab.cpp, src/battleoptionstab.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp, src/battleroomtab.h, src/channel/channel.cpp, src/channel/channel.h, src/chatoptionstab.cpp, src/chatoptionstab.h, src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainchattab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mainoptionstab.cpp, src/mainoptionstab.h, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h, src/maintorrenttab.cpp, src/maintorrenttab.h, src/mainwindow.cpp, src/mainwindow.h, src/mapctrl.cpp, src/mapctrl.h, src/mapgridctrl.cpp, src/mapgridctrl.h, src/mapselectdialog.cpp, src/mapselectdialog.h, src/mmoptionwindows.cpp, src/mmoptionwindows.h, src/playback/playbacktab.cpp, src/playback/playbacktab.h, src/server.cpp, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/singleplayertab.cpp, src/singleplayertab.h, src/springoptionstab.cpp, src/springoptionstab.h, src/torrentlistctrl.cpp, src/torrentlistctrl.h, src/torrentoptionspanel.cpp, src/torrentoptionspanel.h, src/ui.cpp, src/ui.h: reduce compile time by 17% when only doing a single change in Ui.h all Ui member refs removed in favor of the global, all unnesseray ui.h includes gone 2009-07-06 Rene Milk * src/battlelisttab.cpp, src/battlemaptab.h: remove extra updates of battle/minimap, those do themselves now 2009-07-06 Rene Milk * src/addbotdialog.h, src/battlemaptab.cpp, src/ibattle.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mainwindow.cpp, src/singleplayertab.cpp, src/singleplayertab.h, src/springoptionstab.cpp, src/ui.cpp, src/ui.h: all unitsync reloading replaced with events 2009-07-06 Rene Milk * src/battlelisttab.cpp, src/battlemaptab.cpp, src/battlemaptab.h, src/battleroomtab.cpp, src/battleroomtab.h, src/ibattle.cpp, src/ibattle.h, src/mainjoinbattletab.cpp, src/mainwindow.cpp, src/utils/isink.h: some more classes converted 2009-07-06 Rene Milk * src/tdfcontainer.cpp, src/tdfcontainer.h: same as last 2009-07-06 Rene Milk * src/utils/events.h: make dize's code more readable 2009-07-06 Rene Milk * src/utils/globalevents.cpp, src/utils/globalevents.h, src/utils/networkevents.cpp, src/utils/networkevents.h, src/utils/uievents.cpp, src/utils/uievents.h: more of teh same for other event subs 2009-07-06 Rene Milk * src/battlelisttab.cpp, src/battlelisttab.h, src/springunitsync.cpp, src/utils/globalevents.cpp, src/utils/globalevents.h, src/utils/isink.h: fixes a very subtle nming issue by introducing seperate namespace 2009-07-06 Rene Milk * src/battlelisttab.cpp, src/battlelisttab.h, src/utils/isink.h: interface works 2009-07-06 Rene Milk * Makefile.am, springlobby.cbp, src/battlelisttab.cpp, src/battlelisttab.h, src/utils/isink.h: prototype unitsync sink interface 2009-07-06 Rene Milk * springlobby.cbp, src/globaleventshandler.cpp, src/httpdownloader.cpp, src/torrentwrapper.cpp, src/utils/networkevents.h: fix build 2009-07-06 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/globalevents.cpp, src/globalevents.h, src/globaleventshandler.cpp, src/globaleventshandler.h: rename files so autofools are happy 2009-07-06 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/utils/networkevents.cpp, src/utils/networkevents.h: forgot two files 2009-07-06 Rene Milk * CMakeLists.txt, Makefile.am, src/battlelisttab.cpp, src/battlelisttab.h, src/common/events.h, src/mainjoinbattletab.cpp, src/springunitsync.cpp, src/utils/events.h, src/utils/globalevents.cpp, src/utils/globalevents.h, src/utils/uievents.cpp, src/utils/uievents.h: ported unitsync reload event example from dysfunctional events branch 2009-07-06 Rene Milk * src/singleplayerbattle.h: comment useless func declarations 2009-07-05 Rene Milk * src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp: timer stuff works now 2009-07-05 Rene Milk * : commit c14d95afe138bb0922d385930c7bcf4cf35e2766 Merge: eecaee3 8f3ff09 Author: Rene Milk Date: Sun Jul 5 21:53:21 2009 +0200 2009-07-05 Rene Milk * src/mainchattab.cpp, src/mainchattab.h, src/mainwindow.cpp, src/ui.cpp: typo fix 2009-07-05 Rene Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/battleroommmoptionstab.cpp, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/mainchattab.cpp, src/mainchattab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/nicklistctrl.cpp, src/ui.cpp, src/ui.h: peridioc update tiemrs moved to customvirtlistctrl base -- not working corretcly yet 2009-07-05 olemars * src/mainwindow.cpp: compile fix: wxLogStream only declared if wxUSE_STD_IOSTREAM is 1 (default 0) 2009-07-05 olemars * : commit 9b7d7956a53b23414c41ebb96a93834321c7d2af Merge: 43f747a 88f7eb3 Author: Rene Milk Date: Sun Jul 5 17:03:57 2009 +0200 2009-07-05 Rene Milk * src/chatpanel.cpp, src/chatpanel.h: didn't mean to commit the focus event handler, it's not needed and potentially harmful 2009-07-05 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp: focus input box when chat tabs have changed 2009-07-05 Rene Milk * src/settings.cpp: adda notice when col widths are adjusted after sett rev bump 2009-07-05 Rene Milk * src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nonportable.h, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: bump sett rev with impl of transaltion for col sizes wrt dummy col move DUMMY_COL define to a more proper place 2009-07-05 olemars * : commit 0a3b01e49a400df4bc85b9823a99b9142b2aa26f Author: olemars Date: Sun Jul 5 16:06:39 2009 +0200 2009-07-05 Rene Milk * src/widgets/downloadlistctrl.cpp: fix col num in widgetdllist 2009-07-05 Rene Milk * src/customvirtlistctrl.h: had the define for dummy col _not_ defined on win, but on all others 2009-07-05 Rene Milk * src/singleplayertab.cpp: insert trace output to start event sink in SP 2009-07-05 Rene Milk * : commit 88f7eb33fedcf054b99c7e978efefed980e3599f Author: olemars Date: Sun Jul 5 01:31:08 2009 +0200 2009-07-05 Andrea Piras * src/spring.cpp: fix div by 0 error 2009-07-04 Andrea Piras * : commit 78c97d5ac8df746c2e851bf2cf03546e9ca261dc Author: Andrea Piras Date: Sat Jul 4 17:18:07 2009 +0200 2009-07-04 Rene Milk * src/mainwindow.cpp, src/mainwindow.h, src/serverevents.cpp, src/settings++/Main.cpp, src/springlobbyapp.cpp, src/ui.cpp, src/utils/platform.cpp, src/utils/platform.h: cleanup app exit, logging works (loglevel > 3 will crash gui logging) 2009-07-04 Rene Milk * : Merge commit 'ole/master' 2009-07-04 Andrea Piras * src/ibattle.cpp: fixed build 2009-07-04 olemars * src/mainwindow.cpp, src/mainwindow.h, src/springlobbyapp.cpp, src/springlobbyapp.h, src/utils/platform.cpp: Cleaned up logwindow creation and destruction (hopefully). Should also eliminate the message duplication in the log. 2009-07-04 Rene Milk * : commit f05e7b7649a25512356bf6c312216ab0297d467c Author: olemars Date: Sat Jul 4 00:06:35 2009 +0200 2009-07-03 Rene Milk * src/ibattle.cpp: fix compile error 2009-07-03 Rene Milk * : commit 3ede2322c101f4d7a8b27e580ae9fb912a68efa2 Author: Rene Milk Date: Fri Jul 3 23:05:29 2009 +0200 2009-07-03 Andrea Piras * src/ibattle.cpp: don't loop start game 2009-07-03 Rene Milk * src/springlobbyapp.cpp, src/springlobbyapp.h, src/utils/platform.cpp: fix cmd line stuff and logging 2009-07-03 Andrea Piras * src/battle.cpp: moved autocontrol right before spring launch 2009-07-03 Andrea Piras * src/battle.cpp, src/battle.h, src/ibattle.cpp, src/ibattle.h: fixed autobalance 2009-07-03 Rene Milk * : commit 62040c6251d787d9dbe29d6beb15a49023821565 Author: Andrea Piras Date: Fri Jul 3 20:20:02 2009 +0200 2009-07-03 Rene Milk * src/ibattle.cpp: meh, wrong conflict resolution 2009-07-03 Rene Milk * : commit a65721af4cc71725e2a660b31d20ead3a094cc22 Merge: 14250f9 c536ab3 Author: Rene Milk Date: Fri Jul 3 19:57:22 2009 +0200 2009-07-03 Rene Milk * src/customvirtlistctrl.h: don't define SL_DUMMY_COL on non-windows 2009-07-03 Rene Milk * src/customvirtlistctrl.cpp, src/customvirtlistctrl.h: fix sort col icon with dummy col 2009-07-03 Andrea Piras * src/battle.cpp, src/battle.h: don't autospec players when you're ingame and reset timers after the game finished 2009-07-03 Rene Milk * src/customvirtlistctrl.cpp, src/ibattle.cpp, src/settings.h: fix col size loading/saving 2009-07-03 Andrea Piras * src/battle.cpp, src/battle.h, src/ibattle.cpp, src/ibattle.h: only create timer if it's needed to avoid useless load 2009-07-03 Andrea Piras * src/spring.cpp: more fixes for script.txt generation 2009-07-03 Rene Milk * src/customvirtlistctrl.cpp: fix tooltips with dummy col 2009-07-03 Rene Milk * src/customvirtlistctrl.cpp, src/customvirtlistctrl.h: remove obsolete func 2009-07-03 Rene Milk * src/customvirtlistctrl.cpp, src/customvirtlistctrl.h: dummy column seems to work 2009-07-03 Rene Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp, src/nicklistctrl.h, src/playback/playbacklistctrl.cpp, src/playback/playbacklistctrl.h, src/widgets/downloadlistctrl.cpp, src/widgets/downloadlistctrl.h: remove virtual function calls from listctrl base class 2009-07-03 Rene Milk * src/customvirtlistctrl.cpp: do not block sort on col click after mouse move 2009-07-03 Rene Milk * src/battleroomlistctrl.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp: trying to use GteItemImage for first col in nicklist 2009-07-03 Rene Milk * : commit 7cc5e460c15ea76b995db31e10651259786a1d57 Author: Rene Milk Date: Fri Jul 3 12:09:28 2009 +0200 2009-07-03 Rene Milk * : Merge commit 'bd/master' into libt-update 2009-07-03 Rene Milk * po/POTFILES.in: another dupe in potfiles, sigh 2009-07-03 Rene Milk * po/POTFILES.in, tools/update-potfileslist.sh: fix potfiles list 2009-07-03 Rene Milk * Makefile.am: don't ask don't tell fix for distcheck 2009-07-02 Rene Milk * cmake/Toolchain-mingw32.cmake: Revert "some changes for my new test env" This reverts commit 546dee1f0a44ff772189574c0d3cdb1eacb2b175. 2009-07-02 Rene Milk * Makefile.am: fix autofool for libt update too 2009-07-02 Rene Milk * : Merge commit 'ole/libt-update' into libt-update 2009-07-02 olemars * cmake/libtorrent.cmake: fixed libt cmake file list 2009-07-02 Andrea Piras * src/spring.cpp: added team resorting to workaround a spring bug 2009-07-02 Andrea Piras * src/ibattle.cpp: try to autostart the battle only i it's full or locked 2009-07-02 Andrea Piras * src/battle.cpp, src/ibattle.cpp: fixed fixcolors right before autostart working 2009-07-02 Rene Milk * : commit a065be0f44f1b38f09b27d23bc31404f82431d2b Author: Andrea Piras Date: Thu Jul 2 02:51:42 2009 +0200 2009-07-02 Andrea Piras * src/battle.cpp: fix spring start 2009-07-01 Andrea Piras * src/battle.cpp: fixed spring autostart 2009-07-01 Andrea Piras * src/battleroomtab.cpp: divide by 60 the spect time 2009-07-01 Andrea Piras * src/battle.cpp, src/battle.h, src/battleroomtab.cpp, src/ibattle.cpp: fixed autospec code 2009-07-01 Andrea Piras * src/ibattle.cpp, src/serverevents.cpp: fuck me 2009-07-01 Andrea Piras * src/ibattle.cpp: fixed typo 2009-07-01 Andrea Piras * src/battle.cpp, src/ibattle.cpp, src/serverevents.cpp: fixed spring not starting as client 2009-07-01 Andrea Piras * po/POTFILES.in: fixed autofools build 2009-07-01 Andrea Piras * : commit 2af330b9e76e1ab62624891842cbc0455f3790ce Merge: d4bd025 f8f3f10 Author: Andrea Piras Date: Wed Jul 1 20:11:59 2009 +0200 2009-07-01 Andrea Piras * CMakeLists.txt: fixed cmake project 2009-07-01 Andrea Piras * src/hostbattledialog.cpp, src/hostbattledialog.h: added gui to automagically spam the battle descripting to joining users 2009-07-01 Andrea Piras * : commit 04d831501a0f865eb8a0137d96ababa1acb3533f Author: Andrea Piras Date: Wed Jul 1 19:29:23 2009 +0200 2009-07-01 Andrea Piras * src/ibattle.cpp: removed silly hardcoded numbers, fixed a bit autospect code 2009-07-01 Andrea Piras * src/ibattle.cpp: fixed autostart trigger 2009-07-01 Andrea Piras * src/ibattle.cpp: fixed timer possibly 2009-07-01 Andrea Piras * src/ibattle.cpp: fixed uninitialized mem 2009-07-01 Andrea Piras * src/ibattle.cpp: more clear code 2009-07-01 Andrea Piras * src/ibattle.cpp: don't force the color for the same user multiple times 2009-07-01 Andrea Piras * src/battleroomtab.cpp: wrong button auto checked 2009-07-01 Andrea Piras * : commit 17f4a882625d6302cf626fd1a3207e38edadca80 Author: Andrea Piras Date: Wed Jul 1 18:31:44 2009 +0200 2009-07-01 Andrea Piras * src/ibattle.cpp: don't run certain commands if oyu're not founder 2009-07-01 Rene Milk * src/ibattle.h, src/offlinebattle.cpp, src/offlinebattle.h: implement copy ctor/assign op 2009-07-01 Andrea Piras * src/offlinebattle.cpp: forgot to commit a file 2009-07-01 Andrea Piras * src/ibattle.cpp: fixed compile 2009-07-01 Andrea Piras * src/ibattle.cpp: fixed fix colors function when using comshare 2009-07-01 Andrea Piras * springlobby.cbp: forgot to commit a change to the project 2009-07-01 Andrea Piras * src/offlinebattle.cpp: forgot to commit a file 2009-07-01 Andrea Piras * src/ibattle.cpp: fixed compile 2009-07-01 Andrea Piras * : commit 43d2f04c9bc71f1ec5bb37e822bac4c3b7f643cd Author: Andrea Piras Date: Wed Jul 1 17:46:49 2009 +0200 2009-07-01 Rene Milk * src/offlinebattle.h, src/settings.cpp: compile fix, will abort at runtime tho 2009-07-01 Andrea Piras * src/ibattle.cpp: increase spect count when they join too 2009-07-01 Andrea Piras * springlobby.cbp: forgot to commit a change to the project 2009-07-01 Andrea Piras * src/battleroomtab.cpp, src/battleroomtab.h, src/ibattle.cpp, src/ibattle.h, src/settings.cpp, src/settings.h: noncompiling almost done version of code that auto spects players when unready or unsynced 2009-07-01 Andrea Piras * src/hostbattledialog.cpp: permanently disable port test check feature 2009-07-01 Andrea Piras * Makefile.am, src/battle.cpp, src/battle.h, src/ibattle.cpp, src/ibattle.h, src/offlinebattle.h, src/playback/playbacktab.cpp, src/serverevents.cpp, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/singleplayertab.cpp, src/spring.cpp, src/spring.h, src/ui.cpp, src/ui.h: made spring class static instance, now starting spring is done by battles implementation instead of ui class 2009-07-01 Andrea Piras * src/ibattle.cpp, src/ibattle.h: added function to automatically balance before starting the game 2009-07-01 Andrea Piras * src/autohost.cpp, src/battle.cpp, src/battle.h, src/ibattle.cpp, src/ibattle.h: moved autobalance functions to iBattle, started adding functionality for automatic control of battle 2009-07-01 Andrea Piras * src/ibattle.cpp: fixed logic of counting sync/ready players 2009-07-01 Andrea Piras * src/battle.cpp, src/ibattle.cpp, src/ibattle.h: added functions to count players in teams, in allyteams, unsynced players and ready players 2009-07-01 Andrea Piras * src/battle.cpp, src/battle.h, src/battleroomtab.cpp, src/battleroomtab.h: added buttons to ring/force spect a conbination of unready/unsync players 2009-07-01 Rene Milk * src/libtorrent/src/session_impl.cpp: another libt compile fix 2009-07-01 olemars * : commit 546dee1f0a44ff772189574c0d3cdb1eacb2b175 Author: Rene Milk Date: Wed Jul 1 00:17:31 2009 +0200 2009-06-30 Rene Milk * src/libtorrent/asio.hpp, src/libtorrent/asio/basic_raw_socket.hpp, src/libtorrent/asio/basic_serial_port.hpp, src/libtorrent/asio/basic_socket.hpp, src/libtorrent/asio/buffer.hpp, src/libtorrent/asio/buffers_iterator.hpp, src/libtorrent/asio/detail/deadline_timer_service.hpp, src/libtorrent/asio/detail/descriptor_ops.hpp, src/libtorrent/asio/detail/dev_poll_reactor.hpp, src/libtorrent/asio/detail/epoll_reactor.hpp, src/libtorrent/asio/detail/handler_base_from_member.hpp, src/libtorrent/asio/detail/handler_queue.hpp, src/libtorrent/asio/detail/hash_map.hpp, src/libtorrent/asio/detail/indirect_handler_queue.hpp, src/libtorrent/asio/detail/kqueue_reactor.hpp, src/libtorrent/asio/detail/null_thread.hpp, src/libtorrent/asio/detail/old_win_sdk_compat.hpp, src/libtorrent/asio/detail/posix_thread.hpp, src/libtorrent/asio/detail/reactive_descriptor_service.hpp, src/libtorrent/asio/detail/reactive_serial_port_service.hpp, src/libtorrent/asio/detail/reactive_socket_service.hpp, src/libtorrent/asio/detail/reactor_op_queue.hpp, src/libtorrent/asio/detail/select_reactor.hpp, src/libtorrent/asio/detail/socket_types.hpp, src/libtorrent/asio/detail/strand_service.hpp, src/libtorrent/asio/detail/task_io_service.hpp, src/libtorrent/asio/detail/task_io_service_2lock.hpp, src/libtorrent/asio/detail/timer_queue.hpp, src/libtorrent/asio/detail/timer_queue_base.hpp, src/libtorrent/asio/detail/win_iocp_handle_service.hpp, src/libtorrent/asio/detail/win_iocp_io_service.hpp, src/libtorrent/asio/detail/win_iocp_serial_port_service.hpp, src/libtorrent/asio/detail/win_iocp_socket_service.hpp, src/libtorrent/asio/detail/win_thread.hpp, src/libtorrent/asio/detail/wince_thread.hpp, src/libtorrent/asio/detail/wrapped_handler.hpp, src/libtorrent/asio/handler_alloc_hook.hpp, src/libtorrent/asio/impl/read_at.ipp, src/libtorrent/asio/impl/read_until.ipp, src/libtorrent/asio/impl/serial_port_base.ipp, src/libtorrent/asio/impl/write_at.ipp, src/libtorrent/asio/io_service.hpp, src/libtorrent/asio/ip/icmp.hpp, src/libtorrent/asio/ip/resolver_query_base.hpp, src/libtorrent/asio/local/basic_endpoint.hpp, src/libtorrent/asio/raw_socket_service.hpp, src/libtorrent/asio/read.hpp, src/libtorrent/asio/read_at.hpp, src/libtorrent/asio/read_until.hpp, src/libtorrent/asio/serial_port.hpp, src/libtorrent/asio/serial_port_base.hpp, src/libtorrent/asio/serial_port_service.hpp, src/libtorrent/asio/ssl/basic_context.hpp, src/libtorrent/asio/ssl/context_base.hpp, src/libtorrent/asio/ssl/context_service.hpp, src/libtorrent/asio/ssl/detail/openssl_context_service.hpp, src/libtorrent/asio/ssl/detail/openssl_init.hpp, src/libtorrent/asio/ssl/detail/openssl_operation.hpp, src/libtorrent/asio/ssl/detail/openssl_types.hpp, src/libtorrent/asio/ssl/stream_base.hpp, src/libtorrent/asio/thread.hpp, src/libtorrent/asio/version.hpp, src/libtorrent/asio/windows/basic_random_access_handle.hpp, src/libtorrent/asio/windows/random_access_handle.hpp, src/libtorrent/asio/windows/random_access_handle_service.hpp, src/libtorrent/asio/write.hpp, src/libtorrent/asio/write_at.hpp, src/libtorrent/include/libtorrent/GeoIP.h, src/libtorrent/include/libtorrent/alert.hpp, src/libtorrent/include/libtorrent/alert_types.hpp, src/libtorrent/include/libtorrent/asio.hpp, src/libtorrent/include/libtorrent/assert.hpp, src/libtorrent/include/libtorrent/aux_/session_impl.hpp, src/libtorrent/include/libtorrent/bandwidth_manager.hpp, src/libtorrent/include/libtorrent/bencode.hpp, src/libtorrent/include/libtorrent/bitfield.hpp, src/libtorrent/include/libtorrent/broadcast_socket.hpp, src/libtorrent/include/libtorrent/bt_peer_connection.hpp, src/libtorrent/include/libtorrent/buffer.hpp, src/libtorrent/include/libtorrent/chained_buffer.hpp, src/libtorrent/include/libtorrent/config.hpp, src/libtorrent/include/libtorrent/connection_queue.hpp, src/libtorrent/include/libtorrent/create_torrent.hpp, src/libtorrent/include/libtorrent/debug.hpp, src/libtorrent/include/libtorrent/disk_buffer_holder.hpp, src/libtorrent/include/libtorrent/disk_io_thread.hpp, src/libtorrent/include/libtorrent/entry.hpp, src/libtorrent/include/libtorrent/enum_net.hpp, src/libtorrent/include/libtorrent/error_code.hpp, src/libtorrent/include/libtorrent/escape_string.hpp, src/libtorrent/include/libtorrent/extensions.hpp, src/libtorrent/include/libtorrent/extensions/smart_ban.hpp, src/libtorrent/include/libtorrent/extensions/ut_metadata.hpp, src/libtorrent/include/libtorrent/file.hpp, src/libtorrent/include/libtorrent/file_pool.hpp, src/libtorrent/include/libtorrent/file_storage.hpp, src/libtorrent/include/libtorrent/gzip.hpp, src/libtorrent/include/libtorrent/hasher.hpp, src/libtorrent/include/libtorrent/http_connection.hpp, src/libtorrent/include/libtorrent/http_parser.hpp, src/libtorrent/include/libtorrent/http_stream.hpp, src/libtorrent/include/libtorrent/http_tracker_connection.hpp, src/libtorrent/include/libtorrent/instantiate_connection.hpp, src/libtorrent/include/libtorrent/intrusive_ptr_base.hpp, src/libtorrent/include/libtorrent/invariant_check.hpp, src/libtorrent/include/libtorrent/kademlia/closest_nodes.hpp, src/libtorrent/include/libtorrent/kademlia/dht_tracker.hpp, src/libtorrent/include/libtorrent/kademlia/find_data.hpp, src/libtorrent/include/libtorrent/kademlia/msg.hpp, src/libtorrent/include/libtorrent/kademlia/node.hpp, src/libtorrent/include/libtorrent/kademlia/node_entry.hpp, src/libtorrent/include/libtorrent/kademlia/observer.hpp, src/libtorrent/include/libtorrent/kademlia/packet_iterator.hpp, src/libtorrent/include/libtorrent/kademlia/routing_table.hpp, src/libtorrent/include/libtorrent/kademlia/rpc_manager.hpp, src/libtorrent/include/libtorrent/lazy_entry.hpp, src/libtorrent/include/libtorrent/lsd.hpp, src/libtorrent/include/libtorrent/magnet_uri.hpp, src/libtorrent/include/libtorrent/natpmp.hpp, src/libtorrent/include/libtorrent/parse_url.hpp, src/libtorrent/include/libtorrent/pch.hpp, src/libtorrent/include/libtorrent/pe_crypto.hpp, src/libtorrent/include/libtorrent/peer_connection.hpp, src/libtorrent/include/libtorrent/peer_id.hpp, src/libtorrent/include/libtorrent/peer_info.hpp, src/libtorrent/include/libtorrent/piece_picker.hpp, src/libtorrent/include/libtorrent/policy.hpp, src/libtorrent/include/libtorrent/proxy_base.hpp, src/libtorrent/include/libtorrent/session.hpp, src/libtorrent/include/libtorrent/session_settings.hpp, src/libtorrent/include/libtorrent/session_status.hpp, src/libtorrent/include/libtorrent/size_type.hpp, src/libtorrent/include/libtorrent/socket.hpp, src/libtorrent/include/libtorrent/socks4_stream.hpp, src/libtorrent/include/libtorrent/socks5_stream.hpp, src/libtorrent/include/libtorrent/ssl_stream.hpp, src/libtorrent/include/libtorrent/stat.hpp, src/libtorrent/include/libtorrent/storage.hpp, src/libtorrent/include/libtorrent/time.hpp, src/libtorrent/include/libtorrent/torrent.hpp, src/libtorrent/include/libtorrent/torrent_handle.hpp, src/libtorrent/include/libtorrent/torrent_info.hpp, src/libtorrent/include/libtorrent/tracker_manager.hpp, src/libtorrent/include/libtorrent/udp_socket.hpp, src/libtorrent/include/libtorrent/udp_tracker_connection.hpp, src/libtorrent/include/libtorrent/upnp.hpp, src/libtorrent/include/libtorrent/variant_stream.hpp, src/libtorrent/include/libtorrent/version.hpp, src/libtorrent/include/libtorrent/web_peer_connection.hpp, src/libtorrent/include/libtorrent/xml_parse.hpp, src/libtorrent/src/GeoIP.c, src/libtorrent/src/Makefile.am, src/libtorrent/src/alert.cpp, src/libtorrent/src/assert.cpp, src/libtorrent/src/broadcast_socket.cpp, src/libtorrent/src/bt_peer_connection.cpp, src/libtorrent/src/connection_queue.cpp, src/libtorrent/src/create_torrent.cpp, src/libtorrent/src/disk_buffer_holder.cpp, src/libtorrent/src/disk_io_thread.cpp, src/libtorrent/src/entry.cpp, src/libtorrent/src/enum_net.cpp, src/libtorrent/src/error_code.cpp, src/libtorrent/src/escape_string.cpp, src/libtorrent/src/file.cpp, src/libtorrent/src/file_old.cpp, src/libtorrent/src/file_pool.cpp, src/libtorrent/src/file_storage.cpp, src/libtorrent/src/gzip.cpp, src/libtorrent/src/http_connection.cpp, src/libtorrent/src/http_parser.cpp, src/libtorrent/src/http_stream.cpp, src/libtorrent/src/http_tracker_connection.cpp, src/libtorrent/src/identify_client.cpp, src/libtorrent/src/instantiate_connection.cpp, src/libtorrent/src/kademlia/closest_nodes.cpp, src/libtorrent/src/kademlia/dht_tracker.cpp, src/libtorrent/src/kademlia/find_data.cpp, src/libtorrent/src/kademlia/node.cpp, src/libtorrent/src/kademlia/refresh.cpp, src/libtorrent/src/kademlia/routing_table.cpp, src/libtorrent/src/kademlia/rpc_manager.cpp, src/libtorrent/src/kademlia/traversal_algorithm.cpp, src/libtorrent/src/lazy_bdecode.cpp, src/libtorrent/src/logger.cpp, src/libtorrent/src/lsd.cpp, src/libtorrent/src/magnet_uri.cpp, src/libtorrent/src/metadata_transfer.cpp, src/libtorrent/src/natpmp.cpp, src/libtorrent/src/parse_url.cpp, src/libtorrent/src/pch.cpp, src/libtorrent/src/pe_crypto.cpp, src/libtorrent/src/peer_connection.cpp, src/libtorrent/src/piece_picker.cpp, src/libtorrent/src/policy.cpp, src/libtorrent/src/session.cpp, src/libtorrent/src/session_impl.cpp, src/libtorrent/src/smart_ban.cpp, src/libtorrent/src/socks4_stream.cpp, src/libtorrent/src/socks5_stream.cpp, src/libtorrent/src/stat.cpp, src/libtorrent/src/storage.cpp, src/libtorrent/src/torrent.cpp, src/libtorrent/src/torrent_handle.cpp, src/libtorrent/src/torrent_info.cpp, src/libtorrent/src/tracker_manager.cpp, src/libtorrent/src/udp_socket.cpp, src/libtorrent/src/udp_tracker_connection.cpp, src/libtorrent/src/upnp.cpp, src/libtorrent/src/ut_metadata.cpp, src/libtorrent/src/ut_pex.cpp, src/libtorrent/src/web_peer_connection.cpp: updated to libtorrent 0.14.4 2009-06-30 olemars * src/battlelisttab.cpp: Fixes 973 Trying to join the game you're currently in will notify you of this and ask if you wish to leave it. 2009-06-30 olemars * src/serverevents.cpp, src/settings++/helpmenufunctions.cpp, src/socket.cpp, src/tasserver.cpp, src/utils/conversion.h, src/utils/platform.cpp: windows build fixes after koshi's gigacommit 2009-06-30 olemars * : commit 55b72a3b37ecb4c71eebe363289fd682b448becd Author: Rene Milk Date: Tue Jun 30 00:20:47 2009 +0200 2009-06-29 Rene Milk * src/utils/conversion.h: fix segfault 2009-06-29 olemars * : commit 88a6e9dcd8293d7c6cad8c6fd3d8587299303d7e Author: Rene Milk Date: Mon Jun 29 23:11:05 2009 +0200 2009-06-29 olemars * : commit fb4d5815d36676e976b12059c2de278bb03daa73 Author: Rene Milk Date: Mon Jun 29 23:04:56 2009 +0200 2009-06-29 olemars * : commit 88416ac7998347c4aa3b79c121a582cb96254a54 Author: olemars Date: Mon Jun 29 21:40:00 2009 +0200 2009-06-29 Rene Milk * : Merge commit 'bd/master' Conflicts: src/utils.cpp 2009-06-29 Rene Milk * : commit 62c2267e37981d9844326741cc7ae8c9a6de72b3 Author: Rene Milk Date: Mon Jun 29 20:10:11 2009 +0200 2009-06-29 Andrea Piras * CMakeLists.txt: removed unneeded media and xrc lib so macports version of wx can be linked from 2009-06-29 Andrea Piras * CMakeLists.txt: removed unneeded richtext lib so macports version of wx can be linked from sl 2009-06-29 Andrea Piras * CMakeLists.txt: removed unneeded qa lib so macports version of wx can be linked from sl 2009-06-29 Andrea Piras * po/fr.po, po/springlobby.pot, src/Helper/wxtextctrlhist.h, src/autobalancedialog.cpp, src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/chatoptionstab.cpp, src/filelister/filelistfilter.cpp, src/playback/playbacktab.cpp, src/serverevents.cpp, src/ui.cpp, src/utils.cpp: applied remram's patch to fix french translation and all native english strings 2009-06-29 Rene Milk * : Merge commit 'ole/master' 2009-06-29 Rene Milk * : Merge commit 'semi/tooltip2' 2009-06-29 olemars * src/utils.cpp: fix issue with unicode/non-unicode build on windows (msvc) 2009-06-29 olemars * CMakeLists.txt, src/springlobby.rc: minor hack to avoid manifest clashes 2009-06-29 Leo Moisio * src/battleroomlistctrl.cpp: informative tooltip for player ready icon 2009-06-29 olemars * : commit 3c30d8c125f3d2624fefa1580e56add216b04af3 Author: Andrea Piras Date: Sun Jun 28 23:59:00 2009 +0200 2009-06-28 Leo Moisio * src/battlelistctrl.cpp, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/channel/channellistctrl.cpp, src/customlistctrl.cpp, src/customlistctrl.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/filelister/filelistctrl.cpp, src/nicklistctrl.cpp, src/playback/playbacklistctrl.cpp, src/playback/playbacklistctrl.h, src/settings.cpp, src/settings.h: language fix: s/coloumn/column/ 2009-06-28 Rene Milk * buildbot/master.cfg: current buildbot config added 2009-06-28 Rene Milk * springlobby.cbp, src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp: hotfix for idle crashing in battlelist/nicklist 2009-06-28 olemars * : commit 40e687becdb331be3f8884051b44c2af47788012 Author: olemars Date: Sun Jun 28 11:59:55 2009 +0200 2009-06-28 Rene Milk * CMakeLists.txt, Makefile.am: fix settings compile 2009-06-28 Rene Milk * springlobby.cbp, src/battlelistctrl.cpp, src/settings++/Main.cpp, src/utils/controls.cpp, src/utils/platform.cpp, src/utils/platform.h, src/utils/sltipwin.cpp, src/utils/sltipwin.h: yay, shit buuilds 2009-06-28 Rene Milk * : Merge commit 'ole/master' 2009-06-27 olemars * : commit 8801c1fe574959316c23cfd3aff7b5bb7e5f189e Merge: 1800dc3 a1cf573 Author: olemars Date: Sat Jun 27 20:32:16 2009 +0200 2009-06-27 Andrea Piras * src/settings.h: bumped max users to 64 2009-06-27 Rene Milk * src/Helper/colorbutton.cpp, src/addbotdialog.cpp, src/battle.cpp, src/battleroommmoptionstab.cpp, src/ibattle.cpp, src/mainchattab.cpp, src/mapctrl.cpp, src/mmoptionwindows.cpp, src/springoptionstab.cpp, src/uiutils.cpp, src/uiutils.h, src/utils.h: remove CLAMP macro 2009-06-27 Rene Milk * : commit 69c7782a2b1a97abdaa110744e776971369661a6 Author: Rene Milk Date: Sat Jun 27 17:41:22 2009 +0200 2009-06-27 Rene Milk * : commit 3f470d74cb095662d6c10061a758b67f45019fb6 Author: Rene Milk Date: Sat Jun 27 17:19:07 2009 +0200 2009-06-27 Rene Milk * tools/newfile.sh, tools/template.cpp, tools/template.h: revamped old "newfile" script for git, c::b and cmake 2009-06-27 Rene Milk * : commit c6332ed2fa66b0d93f1ebb1a329f742974b69312 Merge: 38d9ccc c6aa048 Author: Rene Milk Date: Sat Jun 27 13:28:42 2009 +0200 2009-06-27 Rene Milk * src/updater/updater.cpp: do not set window title when using vista update mechanism 2009-06-27 Rene Milk * src/springlobbyapp.cpp, src/springlobbyapp.h: re-arrange init for less clutter, do not start GUI logic when updating only 2009-06-27 Rene Milk * : commit 1af3acc17b8769619b393ea4bab19f786c477d48 Merge: 2efca89 c6aa048 Author: Rene Milk Date: Sat Jun 27 11:46:17 2009 +0200 2009-06-27 Rene Milk * : Merge commit 'bd/master' 2009-06-27 Rene Milk * src/iconimagelist.cpp: change tooltips to translateable strings 2009-06-27 Leo Moisio * src/iconimagelist.cpp: IconImageList::GetBattleStatus: better tooltips 2009-06-27 Leo Moisio * src/iconimagelist.cpp: refactor: IconImageList::GetBattleStatus{,Icon} 2009-06-27 Rene Milk * src/customvirtlistctrl.cpp: refreshing only visible items seems to have a problem on win, now we'll redraw the entire list instead 2009-06-27 Rene Milk * src/springunitsync.cpp, src/springunitsync.h: implements cleanrock's patch http://springlobby.info/issues/show/872#change-2118 with tobi's cache class 2009-06-26 Rene Milk * : commit 2efca898cfde3dd033e80a31e31f2f1b56a51a62 Author: Rene Milk Date: Fri Jun 26 22:48:42 2009 +0200 2009-06-26 Rene Milk * src/springlobbyapp.cpp: linux compile fix 2009-06-26 olemars * src/battle.cpp, src/ibattle.cpp, src/ibattle.h, src/mapctrl.cpp, src/spring.cpp, src/tasserver.cpp: fixes a few startbox issues 2009-06-26 Andrea Piras * src/ui.cpp: fixed build with torrent off 2009-06-25 Rene Milk * src/springlobbyapp.cpp, src/updater/updater.cpp, src/updater/updater.h, src/updater/versionchecker.cpp, src/utils.cpp: seems vista update with uac is somewhat working 2009-06-25 olemars * : commit 9d3cb44e6c4a281214e8aa09e2330ba8cce334ae Author: Rene Milk Date: Thu Jun 25 20:05:38 2009 +0200 2009-06-25 Rene Milk * src/serverevents.cpp: fix non-POD warning 2009-06-25 Rene Milk * : commit dfd050c957b0f8a432a32e423811a5d342f29b70 Author: Rene Milk Date: Thu Jun 25 19:49:51 2009 +0200 2009-06-25 Rene Milk * src/settings++/Main.cpp, src/settings++/main.h: fix springsettings for new logging init / command line params 2009-06-25 Rene Milk * : Merge commit 'buildbot/master' into cmd_line 2009-06-24 Andrea Piras * src/settings.h: cache version bump 2009-06-24 Andrea Piras * src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.cpp, src/springunitsynclib.h: cache archive path for all files cache archive unchained checksum for all files use unchained checksum for the map positions & map pic to avoid recaching on every spring release 2009-06-24 Andrea Piras * src/battleroomtab.cpp: update ready status checkbox when required 2009-06-24 Rene Milk * src/springlobbyapp.cpp: re-enable some opts 2009-06-24 Rene Milk * src/springlobbyapp.cpp: working ok 2009-06-24 Rene Milk * src/springlobbyapp.cpp: new funcs only were called after calling BAse::OnInit 2009-06-24 Rene Milk * src/springlobbyapp.cpp, src/springlobbyapp.h: refactor to use default setup from wx 2009-06-24 Rene Milk * src/springlobbyapp.cpp, src/utils.cpp: disable not working cli parms for now 2009-06-23 Rene Milk * : commit 3fb7114f0a664a8190e4b5f6d077f9f66663fea2 Merge: 401b0a0 822200f Author: Andrea Piras Date: Tue Jun 23 21:53:47 2009 +0200 2009-06-23 Andrea Piras * src/battleroomtab.cpp: fixed build 2009-06-23 Andrea Piras * src/battleroomtab.cpp: don't disable i'm ready check in the battleroom for the host 2009-06-23 Rene Milk * : Merge commit 'insaneinside/master' 2009-06-22 Collin J. Sutton * src/battlelistfilter.cpp, src/battlelistfilter.h: BattleListFilter cleanup, rank comparison fix attempt * Renamed: BattleListFilter::{m_button_mode -> ButtonMode}. Type names should _always_ be clearly distinguisable from member variable names. * Removed incorrect divide-by-100 of battle's minimum-rank-to-join when comparing. 2009-06-23 olemars * src/ibattle.cpp, src/mapctrl.cpp, src/mapctrl.h: Fixes 936 Fixes start rects running wild on mouse move and another issue that was hidden by the first one 2009-06-22 olemars * : commit 17540d60d66b2d29a684d6ff61218137f29c1968 Author: olemars Date: Sun Jun 21 23:08:28 2009 +0200 2009-06-21 olemars * src/mapctrl.cpp, src/mapctrl.h: Fix to bug 961: SP tab: resizing window changes player/bot positions 2009-06-21 Andrea Piras * SpringLobby.sln, SpringLobby.vcproj: removed obsolete vc project files, the project should be generated using cmake now 2009-06-21 Andrea Piras * : commit d7d10c88a01fe68ecc48787a02034e440fab5b80 Author: olemars Date: Sat Jun 20 22:00:37 2009 +0200 2009-06-20 Andrea Piras * src/chatlog.cpp: fixed possibly undefined compiler behaviour 2009-06-20 olemars * src/settings.cpp: Fix to bug958, chat highlight words not getting deleted from conf file. 2009-06-20 Andrea Piras * src/chatoptionstab.cpp, src/chatoptionstab.h: added checkbox to disable usage of irc colors 2009-06-20 Andrea Piras * src/customvirtlistctrl.h: fixed compile 2009-06-20 Andrea Piras * : commit 6f618a24b0d92a52082e4fe153aa097654f1b6eb Author: Andrea Piras Date: Sat Jun 20 20:55:20 2009 +0200 2009-06-20 Andrea Piras * : commit 223b826a260a914f7965217dd57384cd2ebd1f72 Author: olemars Date: Sat Jun 20 19:53:35 2009 +0200 2009-06-20 olemars * src/torrentlistctrl.h: Fix apparent typo forward declaring TorrentInfos as class (it's a struct). Gcc accepts this but msvc does not. 2009-06-20 olemars * src/filelister/filelistctrl.cpp, src/filelister/filelistdialog.cpp, src/filelister/filelistfilter.cpp, src/maintorrenttab.cpp, src/mainwindow.cpp, src/serverevents.cpp, src/socket.cpp, src/spring.cpp, src/springlobbyapp.cpp, src/tasserver.cpp, src/torrentlistctrl.cpp, src/torrentoptionspanel.cpp, src/torrentwrapper.cpp, src/ui.cpp, src/updater/versionchecker.cpp, src/widgets/downloadpanel.cpp, src/widgets/widget.cpp: msvc build fixes If building under msvc, include winsock2.h anywhere wxSockets are used or included, otherwise wx reverts to winsock1 which is bad and clashes with torrentlib. Also define NOMINMAX so windows doesn't mess up std::min and std::max 2009-06-20 Andrea Piras * CMakeLists.txt: translation support is default off in cmake now until it gets fixed again 2009-06-17 Andrea Piras * src/settings.cpp: chatlog enabled by default for new users 2009-06-17 Rene Milk * : commit 2a7238a9fcf503725f2c34fe3b15e7639026cf93 Merge: 0792909 b9d656b Author: Rene Milk Date: Wed Jun 17 02:17:07 2009 +0200 2009-06-17 Rene Milk * : commit b9d656bb02751ff2f3141459b7fc43c64797237d Merge: e9268d8 a4b2b2c Author: Rene Milk Date: Wed Jun 17 01:42:40 2009 +0200 2009-06-17 Rene Milk * : commit a4b2b2c03a6c30e034adfe6cc17b85be022042ea Author: Rene Milk Date: Tue Jun 16 02:11:47 2009 +0200 2009-06-16 Rene Milk * po/POTFILES.in: rename file in POTFILES too 2009-06-16 Rene Milk * cmake/Toolchain-mingw32.cmake: fix toolchain file 2009-06-16 Rene Milk * : my bad, didn't see the push before that reverted this already 2009-06-16 Ole Martin Solaas * CMakeLists.txt: fix compile 2009-06-16 Ole Martin Solaas * src/customlistctrl.h: partial revert of changes to customlistctrl 2009-06-16 Rene Milk * : Merge commit 'bd/master' into cmake-update 2009-06-16 Ole Martin Solaas * : commit 70ce7584366173d0b30a29c4c3192ab0b09709df Author: Andrea Piras Date: Tue Jun 16 00:35:31 2009 +0200 2009-06-16 Rene Milk * : commit aea7d45ace7aa6ee4e11fba9e35e52a77635be31 Author: Rene Milk Date: Tue Jun 16 00:28:37 2009 +0200 2009-06-16 Andrea Piras * springlobby.cbp, src/httpdownloader.cpp, src/httpdownloader.h: noncompiling buggy attempt to make downloader class use templates to get parent class 2009-06-15 Ole Martin Solaas * : commit 950e643d6e8a1184349defbbb9a31ad25a28bc5c Author: Rene Milk Date: Mon Jun 15 23:08:18 2009 +0200 2009-06-15 unknown * src/libtorrent/include/libtorrent/bandwidth_manager.hpp: libtorrent fix to compile correctly in MingW on win32 2009-06-15 Rene Milk * : Merge commit 'buildbot/master' 2009-06-15 Rene Milk * : commit b88aa24245718d095ccf1e3e769e0c2e298771da Author: Rene Milk Date: Mon Jun 15 01:48:59 2009 +0200 2009-06-15 Andrea Piras * : commit d66428ba187f1401e94c45a51dfde91edf70a083 Merge: f9d0985 d0f8f28 Author: Andrea Piras Date: Mon Jun 15 00:22:35 2009 +0200 2009-06-14 Dmytry Lavrov * src/settings.h, src/spring.cpp: Fix for router issues 2009-06-14 unknown * CMakeLists.txt: minor cmake fix 2009-06-14 Rene Milk * : commit b2b8c40c2260f8287c8107e279d8fbbb3816f77e Author: Rene Milk Date: Sun Jun 14 15:32:21 2009 +0200 2009-06-14 unknown * CMakeLists.txt: Added more crosscompile checks so sound support works 2009-06-14 unknown * CMakeLists.txt, cmake/Toolchain-mingw32.cmake: Made sure crosscompiling still works with changes to cmake script (hopefully) *crosscompile-specific steps are identified by the cmake macro CMAKE_CROSSCOMPILING in CMakeLists.txt *moved some crosscompile-speciific variables from CMakeLists.txt to toolchain file *reverted some stupidity from last commit *only link libtorrent if torrent support option is selected *minor cleanup although my cleanup vs mess ratio is poor This revision of CMakeLists.txt should be generic enough for general use on windows. There are some source code issues remaining though, especially with torrent support. 2009-06-11 Andrea Piras * src/battle.cpp, src/battle.h, src/serverevents.cpp: automatically load the map defaults when hosting 2009-06-11 Rene Milk * src/mainwindow.cpp, src/mainwindow.h, src/springlobby.exe.manifest, src/springlobby.rc: manifest, sample code temp elevation in mainwindow 2009-06-11 Andrea Piras * src/battle.cpp, src/ibattle.cpp: possibly fixed server kicked at random when removing boxes 2009-06-11 Andrea Piras * src/autohost.cpp, src/battle.cpp, src/battle.h, src/battleroomtab.cpp: fixed map preset boxes being saved flipped 2009-06-11 Andrea Piras * src/autohost.cpp: addbox arguments now range from 0 to 200 instead from 0 to 100 2009-06-11 Andrea Piras * src/autohost.cpp, src/battle.cpp, src/battle.h, src/battlemaptab.cpp, src/battleroomtab.cpp, src/ibattle.cpp, src/settings.cpp, src/settings.h: automatically save boxes & startpostype on spring start, recall on map change if you're not the host 2009-06-11 Andrea Piras * src/autohost.cpp: fixed addbox command 2009-06-11 Andrea Piras * src/autohost.cpp: don't try to add the same box twice 2009-06-11 Andrea Piras * src/autohost.cpp: actually sends the starts rects changes to clients with !addbox !removebox 2009-06-11 Andrea Piras * src/mmoptionswrapper.cpp: compile fixes 2009-06-11 Andrea Piras * src/autohost.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: now !set actually broadcasts the option change to the clients 2009-06-11 Andrea Piras * src/autohost.cpp: addded !addbox and !removebox commands 2009-06-11 Andrea Piras * src/autohost.cpp, src/autohost.h, src/battle.cpp, src/battle.h, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: added keyExist command in options interface that checks for a key existance in all containers made !ring command accept an optional user to ring added !set command to set a battle value fixed !help command 2009-06-11 Andrea Piras * src/autohost.cpp: removed useless command duplication in autohost, added !map command 2009-06-11 Andrea Piras * src/battleroomtab.cpp: skip ring all question on start press, ask directly for force start 2009-06-11 Rene Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp, src/nicklistctrl.h, src/playback/playbacklistctrl.cpp, src/playback/playbacklistctrl.h, src/widgets/downloadlistctrl.cpp, src/widgets/downloadlistctrl.h: new template param to customvirtlistctrl base class: the second template param is actually just a dummy to ensure the compiler generates distinct code in case we have different listctrls with same datatype 2009-06-11 unknown * CMakeLists.txt: Some cleanup, made libtorrent a separate lib target, better wxWidgets detection 2009-06-06 Rene Milk * src/battleroomlistctrl.cpp, src/playback/playbacklistctrl.cpp, src/playback/playbacklistctrl.h: use proper method for setting wrong tooltips 2009-06-07 Rene Milk * tools/buildbot-create-build-dirs.sh: mingw build set to O2, seems to have been lost.... 2009-06-07 Rene Milk * src/customvirtlistctrl.cpp: don't block sorting on col click 2009-06-06 Rene Milk * src/customvirtlistctrl.cpp, src/customvirtlistctrl.h: block sort while mouse is movin 2009-06-07 Rene Milk * src/mapctrl.cpp: remove wx 26 compat macro 2009-06-09 unknown * CMakeLists.txt, src/utils.cpp: CMake and compile fixes under windows Cmake should now be able to setup libtorrent properly, although it will only build on mingw for now. Changed sound detection under win32 to just query for paths and lib files since there's no way to autofind them on win. "Fixed" msvc build error in utils.h, won't compile if windows.h is included and needed a typedef. 2009-06-07 Andrea Piras * src/springunitsynclib.cpp: attempt to make unitsync init spew it's errors to a popup dialog instead of stdout 2009-06-07 Andrea Piras * src/battleroomlistctrl.cpp: fixed side icon not being displayed in battleroomlistctrl 2009-06-07 Andrea Piras * src/ui.cpp: try to search on jobjol directly for the map/mod name 2009-06-07 Andrea Piras * src/settings.h: use wxFileConfig class explicitly on mac 2009-06-07 Andrea Piras * src/spring.cpp: prepend a path separator when preparing the app bundle path for spring 2009-06-07 Andrea Piras * src/settings.cpp: fixed config file for mac, now mac users can use the portable mode too 2009-06-07 Rene Milk * tools/buildbot-create-build-dirs.sh: mingw build set to O2, seems to have been lost.... 2009-06-07 Rene Milk * src/battleroomlistctrl.cpp, src/ui.cpp, src/user.h: cache side icon index in User too, this saves a couple of usync calls _every_ redraw 2009-06-07 Rene Milk * src/customvirtlistctrl.cpp: don't block sorting on col click 2009-06-07 Rene Milk * src/mapctrl.cpp: remove wx 26 compat macro 2009-06-06 Rene Milk * src/mapctrl.cpp: fix sideicons not being cached in mapctrl 2009-06-06 Rene Milk * src/customvirtlistctrl.cpp, src/customvirtlistctrl.h: block sort while mouse is movin 2009-06-06 Rene Milk * src/battleroomlistctrl.cpp, src/playback/playbacklistctrl.cpp, src/playback/playbacklistctrl.h: use proper method for setting wrong tooltips 2009-06-06 Andrea Piras * src/spring.cpp: even more fixes for mac build 2009-06-06 Andrea Piras * src/spring.cpp: fixed mac build 2009-06-06 Rene Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/customvirtlistctrl.cpp, src/nicklistctrl.cpp, src/playback/playbacklistctrl.cpp, src/widgets/downloadlistctrl.cpp: unify AddItem 2009-06-06 Rene Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp, src/playback/playbacklistctrl.cpp: unify item removal 2009-06-06 Andrea Piras * src/battleroomlistctrl.cpp: removed useless icon fetch 2009-06-06 Andrea Piras * src/iconimagelist.cpp: return default icon 2 for all icons >= 2 2009-06-06 Andrea Piras * : Merge commit 'koshi/master' 2009-06-06 Andrea Piras * src/iconimagelist.cpp: removed useless part of code that was never reached anyway 2009-06-06 Rene Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/nicklistctrl.cpp: correct errors of bd's merge 2009-06-06 Rene Milk * src/customvirtlistctrl.cpp, src/customvirtlistctrl.h: stabilize selection on sort 2009-06-06 Andrea Piras * src/spring.cpp: in mac, append app bundle's inner path if spring bin path ends with .app 2009-06-06 Andrea Piras * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/nicklistctrl.cpp: fixed GetIndexFromData search 2009-06-06 Rene Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp: clamp seekpos in case vec size changed 2009-06-06 Rene Milk * src/nicklistctrl.cpp: nicklist 2009-06-06 Rene Milk * src/battleroomlistctrl.cpp: battleroomlistctrl 2009-06-06 Rene Milk * src/battlelistctrl.cpp: begin improving GetDataFromIndex performance - battlelistctrl 2009-06-06 Rene Milk * src/iconimagelist.cpp: sanitize in-cache-map check for side image 2009-06-06 Rene Milk * src/customvirtlistctrl.cpp: greatly improve sort order reversion efficiency 2009-06-06 Andrea Piras * src/springoptionstab.cpp: added additional file mask to unitsync search on mac 2009-06-06 Andrea Piras * src/tasserver.cpp: don't disable relayhost functionality if stat report is off 2009-06-06 unknown * CMakeLists.txt, src/Helper/tasclientimport.cpp, src/customlistctrl.h, src/playback/playbackthread.cpp, src/settings++/settings.rc, src/utils.h: Fixes to make Springlobby successfully build on windows using msvc and mingw out of the box Notes: * msvc build is still slightly broken, will need fix for strange compile error in utils.cpp * msvc build does not yet support torrents, sounds or translation * mingw build supports torrents, but not sounds or translation * only tested on msvs 2008 express and code::Blocks/mingw. Should also work on msvs2005 and eclipse. 2009-06-06 Rene Milk * src/battleroomtab.cpp, src/battleroomtab.h: allow splitting to change at runtime 2009-06-06 Rene Milk * src/battleroomtab.cpp, src/battleroomtab.h, src/settings.cpp, src/settings.h: implemented optional horizontal splitting of broomtab 2009-06-05 Rene Milk * src/chatpanel.cpp: fix windows only logging bug 2009-06-05 Rene Milk * src/ui.cpp: prevent a segfault with autojoin enabled and server unreachable 2009-06-05 Andrea Piras * src/battleroomtab.cpp: show the ready button properly in replay&savegame MP auto set properly the ready button when hosting 2009-06-03 Rene Milk * src/mainwindow.cpp: closes 759 2009-06-02 Andrea Piras * src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp: correctly parse incoming bitfields for offerfile, fixed build error 2009-06-02 Andrea Piras * src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h, src/updater/updater.cpp, src/updater/updater.h: almost finished automatic spring update 2009-06-02 Andrea Piras * : commit 676bacd9e193a69b7547be3554ff8c98624bfe4e Author: Andrea Piras Date: Tue Jun 2 21:04:08 2009 +0200 2009-06-02 Rene Milk * src/ui.cpp: fixes 938 2009-06-02 Rene Milk * : commit 7ca069eb5a8eaaee60535f4a24d872b6b46aca27 Author: Rene Milk Date: Tue Jun 2 18:08:17 2009 +0200 2009-06-02 Rene Milk * tools/buildbot-create-build-dirs.sh: new gcc4.4 step 2009-06-02 Rene Milk * CMakeLists.txt: do not set opt level, defaults to O2 anyways and prevented setting another one 2009-06-02 Rene Milk * tools/buildbot-create-build-dirs.sh: remove moronic extra buildstep 2009-06-01 Andrea Piras * : commit eb5cec6eb2bc268e73123d4315e267f359507b9d Author: Andrea Piras Date: Mon Jun 1 16:00:15 2009 +0200 2009-06-01 Andrea Piras * src/chatlog.cpp: fixed missing ; 2009-06-01 Andrea Piras * src/playback/savegamelist.cpp: don't read the whole file when parsing replays 2009-06-01 Andrea Piras * src/chatlog.cpp: fixed compile 2009-06-01 Andrea Piras * src/chatlog.cpp: use \r\n for line endings in chatlogs in windows 2009-05-31 Andrea Piras * src/playback/savegamelist.cpp: fixed logic 2009-05-31 Andrea Piras * src/playback/savegamelist.cpp: fixed crash in savegame load 2009-05-30 Andrea Piras * configure.ac.m4: patch by hawk78 for configure.ac.m4 2009-05-29 Rene Milk * po/ar.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/en_US.po, po/es.po, po/fi.po, po/fr.po, po/it.po, po/pl.po, po/pt.po, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po, po/zh_CN.po: Revert "pofile changes" This reverts commit 15fc9907ad2cac724ba05ddaf1831a7d46e7a9ae. 2009-05-29 Rene Milk * Makefile.am: fix distcheck truly? 2009-05-29 Rene Milk * po/ar.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/en_US.po, po/es.po, po/fi.po, po/fr.po, po/it.po, po/pl.po, po/pt.po, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po, po/zh_CN.po: pofile changes 2009-05-29 Rene Milk * po/POTFILES.in: fix distcheck even more 2009-05-29 Rene Milk * Makefile.am: fix distcheck more 2009-05-29 Rene Milk * Makefile.am: fix distcheck 2009-05-29 Andrea Piras * : commit 36eef595e62f7980b9b108fcd42e299afb17a037 Author: Andrea Piras Date: Fri May 29 17:24:08 2009 +0200 2009-05-29 Rene Milk * : Merge commit 'bd/master' 2009-05-29 Rene Milk * : Merge commit 'bd/master' 2009-05-28 Andrea Piras * src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/spring.cpp: fixed compiling 2009-05-28 Andrea Piras * src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: fixed typos >_> 2009-05-28 Andrea Piras * src/user.h: fixed initialization order ( removes warnings) 2009-05-28 Andrea Piras * src/battleroomtab.cpp: fixed typo 2009-05-28 Andrea Piras * : commit 5326b0598b7bbfe799c2a9e83892e78212f59aa6 Author: Andrea Piras Date: Thu May 28 16:43:23 2009 +0200 2009-05-28 Andrea Piras * src/playback/savegamelist.cpp: don't crash if there is no savegame 2009-05-28 Andrea Piras * src/mainchattab.cpp, src/ui.cpp: removed popup message & brought back disconnect message to all chats 2009-05-28 Andrea Piras * src/tasserver.cpp, src/tasserver.h: redirect now doesn't popups failed to connect message 2009-05-28 Rene Milk * src/chatpanel.cpp: fixes changeing topic with GUI 2009-05-27 Andrea Piras * src/ibattle.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/singleplayertab.cpp, src/spring.cpp, src/tasserver.cpp: load bot options after adding it 2009-05-27 Rene Milk * Makefile.am: yet another autofools fix 2009-05-27 Andrea Piras * src/addbotdialog.cpp, src/addbotdialog.h, src/battleroomtab.cpp, src/singleplayertab.cpp: locally store AI type 2009-05-27 Andrea Piras * src/spring.cpp, src/user.cpp, src/user.h: fixed typo in user status check, added aitype to the user struct 2009-05-27 Rene Milk * : commit f325b6eca182751b3181e740501a8edbd97cc54d Author: Rene Milk Date: Wed May 27 23:18:25 2009 +0200 2009-05-27 Andrea Piras * src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.cpp, src/springunitsynclib.h: added function to fetch AI option list 2009-05-27 Andrea Piras * : Merge commit 'koshi/master' 2009-05-27 Rene Milk * Makefile.am: fix autofools compile 2009-05-27 Andrea Piras * src/battle.cpp: set isfromdemo flag to server users to false 2009-05-27 Andrea Piras * src/serverevents.cpp: parse script.txt when hosting a replay 2009-05-27 Andrea Piras * : Merge commit 'tobi/removeallarchives' 2009-05-27 Rene Milk * : commit e176485a10c95e9ff990c223cddc8c756d87ba04 Merge: 08a0327 d160a8a Author: Rene Milk Date: Wed May 27 19:51:26 2009 +0200 2009-05-27 Rene Milk * src/mmoptionswrapper.cpp: remove unnecessary map copying 2009-05-27 Rene Milk * src/battleroommmoptionstab.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/mmoptionwindows.cpp: constify mmoptionswrapper more 2009-05-27 Rene Milk * src/nicklistctrl.h: remove never used funcs 2009-05-27 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/sdlsound.cpp, src/sdlsound.h, src/server.h, src/socket.cpp, src/socket.h, src/spring.cpp, src/spring.h, src/tasserver.cpp, src/tasserver.h: constify 2009-05-26 Tobi Vollebregt * src/springunitsynclib.cpp, src/springunitsynclib.h: use new unitsync RemoveAllArchives API 2009-05-26 Rene Milk * src/mainwindow.cpp, src/mainwindow.h, src/ui.cpp: set correct focus when doing autoconnect 2009-05-26 Rene Milk * src/lobbyoptionstab.cpp, src/lobbyoptionstab.h, src/mainwindow.cpp, src/mainwindow.h, src/ui.cpp: add UI for setting starttab 2009-05-26 Rene Milk * src/battleroomlistctrl.cpp, src/chatpanel.cpp, src/mainwindow.h, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: added new settings for startab, moved constants for tab idx into mainwindow 2009-05-26 Rene Milk * src/replay/replaytab.cpp, src/replay/replaytab.h, src/spring.cpp, src/spring.h, src/ui.cpp, src/ui.h: fixes #814 2009-05-26 Rene Milk * : commit 47526e5032fc44f94f51cc758605e2334e50424f Author: Rene Milk Date: Tue May 26 02:33:20 2009 +0200 2009-05-26 Rene Milk * src/settings++/Defs.hpp, src/settings++/tab_render_detail.cpp: fixes #853 2009-05-26 Andrea Piras * src/spring.cpp: simplified & improved script.txt generation 2009-05-26 Rene Milk * src/chatpanel.cpp: forst half of ticket 711 2009-05-26 Rene Milk * src/chatpanel.cpp: add switch in createpopup for user specific oart 2009-05-26 Rene Milk * src/ui.cpp, src/ui.h: re-implement old autoconnect behaviour 2009-05-26 Rene Milk * src/battleroomlistctrl.cpp: fixes #891 wrong tooltip content in battleroomlisctrl 2009-05-26 Rene Milk * src/customvirtlistctrl.cpp: makes listctr redraw behave way better on win 2009-05-25 Rene Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/nicklistctrl.cpp, src/replay/replaylistctrl.cpp, src/widgets/downloadlistctrl.cpp: fixes double entry in list until first sort issue 2009-05-25 Andrea Piras * src/server.h, src/tasserver.cpp, src/tasserver.h: more timeout disconnect fixes 2009-05-25 Andrea Piras * src/tasserver.cpp: empty buffer before connecting 2009-05-25 Andrea Piras * src/socket.cpp, src/tasserver.cpp: empty socket's buffer after disconnect 2009-05-25 Rene Milk * : commit 11e46bd74d1dba9a6686da7c6be67eb49511aafa Merge: 1b0ca3e cc6e1ae Author: Rene Milk Date: Mon May 25 02:01:55 2009 +0200 2009-05-25 Rene Milk * src/mapselectdialog.cpp: add note for dragscroll in mapselectdialog 2009-05-24 Rene Milk * : Merge commit 'bd/master' into listctrl-redraw 2009-05-24 Andrea Piras * Makefile.am: typo 2009-05-24 Andrea Piras * Makefile.am: fixed makefile 2009-05-24 Andrea Piras * : Merge commit 'koshi/master' 2009-05-24 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springunitsynclib.cpp: spring version search a magnitude faster ( no init called ), and done only when needed and result cached in ram 2009-05-24 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h: show number of users in a channel 2009-05-23 Rene Milk * src/images/floppy_icon.png.h, src/mainwindow.cpp: new icon for savegame tab 2009-05-23 Andrea Piras * src/battleroomtab.cpp, src/battleroomtab.h: use checkbox for lock status, moved autohost button to manage menu 2009-05-23 Andrea Piras * src/settings.cpp, src/settings.h, src/springoptionstab.cpp, src/springoptionstab.h: added function to search for spring exec only in the current SL folder ( on by default for windows users ) 2009-05-23 Andrea Piras * src/battle.cpp: don't force spect bots and yourself with rank limit 2009-05-22 Rene Milk * : commit 513d0912dfdc59231d9b254487205a3c5880650a Merge: 0c3b8e8 e8a4ba6 Author: Rene Milk Date: Fri May 22 18:11:00 2009 +0200 2009-05-22 Rene Milk * : commit 003a5092db9cbb4dff3e678cab3c9ee069a85d17 Merge: 4ae0bed 0c3b8e8 Author: Rene Milk Date: Fri May 22 18:04:55 2009 +0200 2009-05-22 Rene Milk * src/settings++/presets.h: fix compile 2009-05-22 Rene Milk * : commit 0c3b8e8298ed82d7dc6a4e8f20b2795a04deac6e Merge: 841f12a 7511d64 Author: Rene Milk Date: Fri May 22 10:12:48 2009 +0200 2009-05-21 Rene Milk * src/settings++/presets.h: add preset for MaxNanoParticles 2009-05-20 Rene Milk * src/settings++/Defs.hpp, src/settings++/tab_abstract.cpp, src/settings++/tab_render_detail.cpp, src/settings++/tab_render_detail.h: added MaxNanoParticles 2009-05-20 Rene Milk * src/settings++/tab_abstract.cpp: simplified opt saving a bit 2009-05-20 Rene Milk * src/settings++/Defs.hpp, src/settings++/tab_abstract.cpp, src/settings++/tab_audio.cpp, src/settings++/tab_audio.h: added new sound options 2009-05-20 Rene Milk * src/settings++/Defs.hpp, src/settings++/tab_abstract.cpp, src/settings++/tab_debug.cpp: remove stdout opt for debug 2009-05-19 Rene Milk * CMakeLists.txt, tools/buildbot-create-build-dirs.sh: Revert "some fixes for cmake mingw build, also trying for buildbot cmake setup" This reverts commit b7ae9fbdec334a38d975dde92362b14a062566a4. Conflicts: tools/buildbot-create-build-dirs.sh 2009-05-19 Rene Milk * tools/buildbot-create-build-dirs.sh: Revert "fix toolchain file location" This reverts commit dc8c477e7c710a482885d680cf5fe01477ad5fc6. Conflicts: tools/buildbot-create-build-dirs.sh 2009-05-19 Rene Milk * CMakeLists.txt, tools/buildbot-create-build-dirs.sh: Revert "hopefully fix cmake warning and toolchain path" This reverts commit de7f47fe16ec7c7b2024f58ade48772983869765. Conflicts: tools/buildbot-create-build-dirs.sh 2009-05-19 Rene Milk * tools/buildbot-create-build-dirs.sh: Revert "next try" This reverts commit 82e06efac4202e749c9bdb1feecc951c49c4181d. Conflicts: tools/buildbot-create-build-dirs.sh 2009-05-19 Rene Milk * dummy: Revert "demo for BD" This reverts commit ff75cea3dc33f76b56a8de2d9ba21e85e7be5d0d. 2009-05-19 Rene Milk * dummy: demo for BD 2009-05-19 Rene Milk * : Merge commit 'buildbot/master' Conflicts: tools/buildbot-create-build-dirs.sh 2009-05-19 Rene Milk * dummy: hello #springlobby (hopefully) 2009-05-18 Rene Milk * tools/buildbot-create-build-dirs.sh: next try 2009-05-18 Rene Milk * CMakeLists.txt, tools/buildbot-create-build-dirs.sh: hopefully fix cmake warning and toolchain path 2009-05-18 Rene Milk * tools/buildbot-create-build-dirs.sh: fix toolchain file location 2009-05-18 Rene Milk * CMakeLists.txt, tools/buildbot-create-build-dirs.sh: some fixes for cmake mingw build, also trying for buildbot cmake setup 2009-05-18 Rene Milk * CMakeLists.txt, tools/buildbot-create-build-dirs.sh: some fixes for cmake mingw build, also trying for buildbot cmake setup 2009-05-17 Andrea Piras * : commit b30ec1c15dad85267afa772856f61d2fae8f94c2 Merge: fcc6117 7a16584 Author: Andrea Piras Date: Sun May 17 23:05:12 2009 +0200 2009-05-17 Andrea Piras * src/battleroommmoptionstab.cpp: fixed indentation 2009-05-17 Andrea Piras * src/battleroomtab.cpp: removed duplicate (and buggy) map options reload that was using modname as argument 2009-05-17 Rene Milk * src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: change param passing, remove default val 2009-05-16 Andrea Piras * : commit ae8bcb92c1ad0c7049a807fba64b03bcd210e778 Author: Andrea Piras Date: Sat May 16 23:00:43 2009 +0200 2009-05-16 Andrea Piras * src/serverevents.cpp, src/tasserver.cpp, src/tasserver.h: brought back ping time check, and fixed typo 2009-05-16 Andrea Piras * src/mutexwrapper.h, src/server.cpp, src/server.h, src/serverevents.cpp, src/serverevents.h, src/socket.cpp, src/socket.h, src/tasserver.cpp, src/tasserver.h: Revert "now ping thread is done in server class instead of socket, added ping round trip check" This reverts commit 693a1127e4c986dbd707ed6a10172aa531832909. 2009-05-16 Andrea Piras * src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h: Revert "more sane ping behaviour" This reverts commit abbd9cc0f24dbb54ff2452897f31130971782e94. 2009-05-16 Andrea Piras * src/tasserver.cpp, src/tasserver.h: Revert "enable id tagged transmission only after logininfocompleted to workaround a tasserver idiocy" This reverts commit 5b2130ee733a374ff52a86404457f1a58ba6d946. 2009-05-16 Andrea Piras * src/tasserver.cpp, src/tasserver.h: Revert "fixed ping woes for good now" This reverts commit 7bdcb38eecb2b4a6c41267949d701f93ea747fd8. 2009-05-16 Andrea Piras * src/serverevents.cpp: use proper iterators instead of int iterator for std::vector 2009-05-16 Andrea Piras * src/mainchattab.cpp: don't try to rejoin channels you're already in 2009-05-16 Andrea Piras * src/spring.cpp: enable config path for all users that don't use spring 0.78 2009-05-16 Andrea Piras * : commit c1cb2817b21fd21302995a024bd1da2d989277ed Author: Andrea Piras Date: Sat May 16 16:27:47 2009 +0200 2009-05-16 Andrea Piras * : commit 8c918c734c8f7f4b1761b306c9b86154c70d0ef6 Author: Andrea Piras Date: Sat May 16 13:18:23 2009 +0200 2009-05-15 Andrea Piras * src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: now mmaoptions code can accept arbitrary amounts of scopes 2009-05-15 Andrea Piras * : commit 1761dd93d7721c7c8393cdddc3b6f2f71b045454 Author: Andrea Piras Date: Fri May 15 22:10:18 2009 +0200 2009-05-15 Andrea Piras * : commit 866d0899b1c6508b6588cf7b8be667ca04781fe2 Author: Andrea Piras Date: Fri May 15 21:26:52 2009 +0200 2009-05-15 Andrea Piras * springlobby.cbp, src/user.cpp, src/user.h, src/userrankdb.cpp, src/userrankdb.h: Revert "fixed codeblocks project, now it compiles & auto loads ranks when available" This reverts commit 642411ea9fcf7b3f39cde2cbfbb9d7c831608dc5. 2009-05-15 Andrea Piras * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h: Revert "now trust & rank can be set in the battleroom" This reverts commit c9256a53238da9c8046f1261f9b2f7dc8489c96c. 2009-05-15 Andrea Piras * src/battleroomlistctrl.cpp, src/ibattle.cpp, src/ibattle.h, src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h, src/user.cpp, src/user.h, src/userrankdb.cpp, src/userrankdb.h: Revert "now everything but battle list & GetBalanceRank can handle ranks for different mods" This reverts commit dd21fd215315bff15c704afa1285b6f9b6f08f52. Conflicts: src/spring.cpp 2009-05-15 Andrea Piras * src/battle.cpp, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/ibattle.cpp, src/ibattle.h, src/user.cpp, src/user.h, src/userrankdb.cpp, src/userrankdb.h: Revert "now autobalance uses per mod rank if available, added gui to display rank, trust & rank accuracy ( needs more eyecandy )" This reverts commit 03ecd74c69495b62c4ec9b85de169231a4afe518. 2009-05-15 Andrea Piras * src/battleroomlistctrl.cpp: Revert "changed force rank to set rank" This reverts commit 63fccdad93de9fc41653d75f78cca72f4d5b675c. 2009-05-15 Andrea Piras * CMakeLists.txt, Makefile.am: Revert "fixed cmakelist & makefile" This reverts commit 292e15218aab89a2c1e345ab5ebe979eb74bb4a8. 2009-05-15 Andrea Piras * src/battleroomlistctrl.cpp: Revert "add separators in right click popup menu in the battleroom" This reverts commit a24a6720c033bb3a6f42f5c4e5a0fa0dcefdf015. 2009-05-15 Andrea Piras * src/serverevents.cpp, src/userrankdb.cpp: Revert "actually save & load to disk the ranks" This reverts commit 848c198ed151ba54178148dff6cfcb267da01062. 2009-05-15 Andrea Piras * src/userrankdb.cpp: Revert "forgot an #include" This reverts commit ec58fd1afe343980c0368680343dfc5d730177ad. 2009-05-15 Andrea Piras * src/userrankdb.cpp: Revert "hopefully compiles now" This reverts commit 8c0e8702a678e7bee4fbf610dff4485a03a0847a. 2009-05-15 Andrea Piras * src/springlobbyapp.cpp: fixed function name 2009-05-15 Andrea Piras * : commit ec5f21db28770e284fb0a3324449330f39d424ee Author: Andrea Piras Date: Fri May 15 21:00:34 2009 +0200 2009-05-15 Andrea Piras * src/settings++/Defs.hpp, src/settings++/presets.h: fixed unit detail name in springsettings, & range, fixed also send debug to console name 2009-05-15 Andrea Piras * src/spring.cpp: use --config command line flag in windows too 2009-05-14 Andrea Piras * src/httpdownloader.cpp, src/httpdownloader.h, src/updater/updater.cpp: now has optional unzip argument 2009-05-14 Andrea Piras * src/globalevents.cpp, src/updater/updater.cpp: actually compiles now 2009-05-14 Andrea Piras * CMakeLists.txt, Makefile.am, springlobby.cbp, src/updater/exedownloader.cpp, src/updater/exedownloader.h, src/updater/updater.cpp: removed obsolete file 2009-05-14 Andrea Piras * springlobby.cbp, src/globalevents.cpp, src/globalevents.h, src/httpdownloader.cpp, src/httpdownloader.h, src/poolmanager.cpp, src/poolmanager.h, src/updater/exedownloader.h, src/updater/updater.cpp, src/updater/updater.h: noncompiling refactor of threaded downloader so i can be resued in multiple places 2009-05-14 Andrea Piras * src/tasserver.cpp, src/tasserver.h: fixed ping woes for good now 2009-05-10 Vincenzo Di Massa * CMakeLists.txt: install xdg menu item and icon 2009-05-10 Vincenzo Di Massa * CMakeLists.txt, cmake/FindGettext.cmake, cmake/KWWidgetsInternationalizationMacros.cmake: attempt to fix cmake+gettext build&install 2009-05-10 Andrea Piras * src/tasserver.cpp, src/tasserver.h: enable id tagged transmission only after logininfocompleted to workaround a tasserver idiocy 2009-05-10 Andrea Piras * src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h: more sane ping behaviour 2009-05-09 Andrea Piras * CMakeLists.txt, Makefile.am, springlobby.cbp: fixed c::b project, cmake project, makefile 2009-05-09 Andrea Piras * src/mainwindow.cpp: fixed a bit tab layout, still needs new icon for savegame tab 2009-05-09 Andrea Piras * src/battle.cpp, src/battle.h, src/ibattle.cpp, src/ibattle.h, src/playback/replaylist.cpp, src/playback/savegamelist.cpp, src/playback/scriptparser.cpp, src/playback/scriptparser.h, src/server.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h: script parsing has to be issued from within the battle itself added functions to send/recieve the battle script from/to clients removed useless separate script parse file 2009-05-09 Andrea Piras * : Merge commit 'koshi/master' 2009-05-07 Andrea Piras * CMakeLists.txt: fixed cmake file 2009-05-07 Andrea Piras * src/playback/playbacktab.cpp, src/playback/savegamelist.cpp: now launching savegames work 2009-05-07 Andrea Piras * src/playback/scriptparser.cpp: possibily fixed segfaults on script parse 2009-05-07 Andrea Piras * CMakeLists.txt, Makefile.am, springlobby.cbp, src/playback/savegamelist.cpp: correctly parses savegames infos & fixed c::b project, cmakelists & makefile 2009-05-07 Andrea Piras * src/playback/replaylist.cpp, src/playback/replaylist.h, src/playback/savegamelist.cpp, src/playback/savegamelist.h, src/playback/scriptparser.cpp, src/playback/scriptparser.h: splitted script parser to separate header, fixed script.txt extraction from savegames 2009-05-04 Andrea Piras * src/tasserver.cpp: fixed unmute command 2009-05-04 Rene Milk * src/mainwindow.cpp, src/mainwindow.h, src/playback/playbackthread.cpp, src/playback/savegamelist.cpp, src/springlobbyapp.cpp: onstart load works 2009-05-03 Rene Milk * : commit 436cbc521cb75c00460805247d2a9f9e7bc60391 Author: Rene Milk Date: Sun May 3 23:32:11 2009 +0200 2009-05-03 Andrea Piras * src/playback/playbacktab.cpp: compiles again 2009-05-03 Andrea Piras * src/offlinebattle.h, src/playback/playbacktab.cpp, src/spring.cpp, src/spring.h, src/ui.cpp, src/ui.h: launch replays & savegames using script.txt rather than passing the filename directly 2009-05-03 Rene Milk * : commit 351feca7b581bde0ec3d5fc446dcfe135b1b1648 Author: Rene Milk Date: Sun May 3 22:34:35 2009 +0200 2009-05-03 Andrea Piras * src/playback/replaylist.cpp: store in the battle class if it's a replay or savegame 2009-05-03 Rene Milk * src/ibattle.cpp, src/playback/savegamelist.cpp, src/playback/savegamelist.h: fix compile err after merge 2009-05-03 Rene Milk * : commit a9d34f2b18d3caef85d4decf28cf3b9e7969e50d Author: Andrea Piras Date: Sun May 3 21:52:02 2009 +0200 2009-05-03 Rene Milk * : commit 2b0eb7df292d4c10dd096d5659d89c89c54791c6 Author: Rene Milk Date: Sun May 3 21:44:06 2009 +0200 2009-05-03 Andrea Piras * src/ibattle.cpp, src/ibattle.h, src/offlinebattle.h, src/playback/replaylist.cpp, src/playback/replaylist.h: script gets saved in the battle itself now, also moved some functionality from OfflineBattle to IBattle 2009-05-03 Andrea Piras * springlobby.cbp: now compiles again 2009-05-03 Rene Milk * src/playback/playbacklist.cpp, src/playback/playbacklist.h, src/playback/playbacktab.cpp, src/playback/replaylist.cpp: change func names list to playback instrad of replay 2009-05-03 Andrea Piras * src/playback/replaylist.cpp: store the filename of the replay/savegame inside the battle class 2009-05-03 Andrea Piras * : commit bad00f9d9a7f2d8eb94a116b85472f3f1b388d78 Author: Andrea Piras Date: Sun May 3 20:40:30 2009 +0200 2009-05-03 Rene Milk * src/iunitsync.h, src/mapselectdialog.cpp, src/playback/playbacklist.cpp, src/playback/playbacklist.h, src/playback/playbacktab.cpp, src/playback/playbacktab.h, src/playback/playbackthread.cpp, src/playback/playbackthread.h, src/playback/replaylist.cpp, src/playback/replaylist.h, src/springunitsync.cpp, src/springunitsync.h: re-enabled loader functionality 2009-05-03 Rene Milk * src/playback/playbacktab.cpp, src/playback/playbacktab.h, src/playback/playbackthread.cpp, src/playback/playbackthread.h: - give loader the full Tab type as parent - split loader back in two files 2009-05-03 Rene Milk * src/battlemaptab.cpp, src/battleroomtab.cpp, src/mainwindow.cpp, src/mainwindow.h, src/mapselectdialog.h, src/playback/playbacklist.cpp, src/playback/playbacklist.h, src/playback/playbacklistctrl.cpp, src/playback/playbacklistctrl.h, src/playback/playbacktab.h, src/playback/playbacktraits.h, src/playback/replaylist.cpp, src/playback/replaylist.h, src/singleplayertab.cpp, src/springlobbyapp.cpp: reduce header entanglement 2009-05-03 Rene Milk * springlobby.cbp, src/playback/playbacklist.cpp, src/playback/playbacklist.h, src/playback/replaylist.h: split playback class in two files 2009-05-03 Rene Milk * src/battlelisttab.cpp, src/mainwindow.h, src/playback/playbacktab.cpp, src/playback/playbacktab.h, src/playback/playbackthread.cpp, src/playback/playbacktraits.h, src/playback/replaylist.cpp, src/playback/replaylist.h: compiles again 2009-05-02 Rene Milk * src/playback/playbackfilter.h, src/playback/playbacktab.cpp, src/playback/playbacktab.h, src/playback/playbackthread.h: enum name changes 2009-05-02 Andrea Piras * src/ibattle.h, src/replay/replaylist.cpp, src/serverevents.cpp, src/serverevents.h, src/spring.cpp, src/tasserver.cpp, src/user.h: added isfromdemo user battlestatus property, will be written to script.txt added functions to store/recall script.txt for battles added functions to set replay/savegame path to write into script.txt 2009-05-02 Rene Milk * src/playback/playbackfilter.cpp, src/playback/playbackfilter.h, src/playback/playbackfiltervalues.h, src/settings.cpp, src/settings.h: some name changes 2009-05-02 Rene Milk * src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/customvirtlistctrl.cpp: remove superflous highlight update and freeze/thaw 2009-05-02 Rene Milk * src/playback/playbacklistctrl.cpp, src/playback/playbacklistctrl.h, src/playback/playbacktab.cpp: old functionality should be back 2009-05-02 Rene Milk * springlobby.cbp: c::b proj fixed 2009-05-02 Rene Milk * src/customvirtlistctrl.h, src/playback/playbacklistctrl.cpp, src/playback/playbacklistctrl.h, src/playback/playbacktab.cpp, src/playback/playbacktab.h: made playbacklistctrl into template class too 2009-05-02 Andrea Piras * : Merge commit 'koshi/master' 2009-05-01 Rene Milk * src/replay/replayfilter.cpp, src/replay/replayfilter.h, src/replay/replaylist.h, src/replay/replaytab.cpp, src/replay/replaytab.h: Signed-off-by: Rene Milk 2009-05-01 Rene Milk * src/mainwindow.cpp, src/mainwindow.h, src/replay/replayfilter.cpp, src/replay/replayfilter.h, src/replay/replaylist.h, src/replay/replaytab.cpp, src/replay/replaytab.h, src/spring.cpp, src/spring.h, src/ui.cpp, src/ui.h: begun awesome replayX refactor 2009-05-01 Rene Milk * src/customvirtlistctrl.h, src/replay/replaytab.cpp: fix crash in replaylist reload 2009-05-01 Andrea Piras * src/customvirtlistctrl.h: added missing default ctor 2009-04-28 Andrea Piras * src/chatpanel.cpp: preliminary, ugly version to support irc color strings 2009-04-28 Andrea Piras * src/ibattle.h: fix for VC++ build 2009-04-26 Rene Milk * src/battleroommmoptionstab.cpp: remove some lingering wx26 ifdefs 2009-04-26 Andrea Piras * src/filelister/filelistctrl.cpp, src/filelister/filelistdialog.cpp: fixed hash sign with torrent downloads 2009-04-25 Andrea Piras * src/userrankdb.cpp: hopefully compiles now 2009-04-25 Andrea Piras * src/userrankdb.cpp: forgot an #include 2009-04-25 Andrea Piras * src/serverevents.cpp, src/userrankdb.cpp: actually save & load to disk the ranks 2009-04-25 Andrea Piras * src/battleroomlistctrl.cpp: add separators in right click popup menu in the battleroom 2009-04-25 Andrea Piras * CMakeLists.txt, Makefile.am: fixed cmakelist & makefile 2009-04-25 Andrea Piras * src/battleroomlistctrl.cpp: changed force rank to set rank 2009-04-25 Andrea Piras * src/battle.cpp, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/ibattle.cpp, src/ibattle.h, src/user.cpp, src/user.h, src/userrankdb.cpp, src/userrankdb.h: now autobalance uses per mod rank if available, added gui to display rank, trust & rank accuracy ( needs more eyecandy ) 2009-04-23 Andrea Piras * src/battleroomlistctrl.cpp, src/ibattle.cpp, src/ibattle.h, src/iunitsync.h, src/spring.cpp, src/springunitsync.cpp, src/springunitsync.h, src/user.cpp, src/user.h, src/userrankdb.cpp, src/userrankdb.h: now everything but battle list & GetBalanceRank can handle ranks for different mods 2009-04-23 Andrea Piras * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h: now trust & rank can be set in the battleroom 2009-04-23 Andrea Piras * springlobby.cbp, src/user.cpp, src/user.h, src/userrankdb.cpp, src/userrankdb.h: fixed codeblocks project, now it compiles & auto loads ranks when available 2009-04-23 Andrea Piras * src/replay/replaylist.cpp, src/tasserver.cpp, src/user.cpp, src/user.h, src/userrankdb.cpp, src/userrankdb.h: noncompiling, gui-less first attempt to allow users to set their own ranks for players 2009-04-23 Andrea Piras * src/battleroomlistctrl.cpp: don't perform needless ( and wrong ) operations to countrycode in battleroom listctrl tooltip 2009-04-22 Andrea Piras * src/server.cpp, src/server.h, src/tasserver.cpp: fixed server's data containers not getting flushed on disconnect 2009-04-21 Andrea Piras * : commit 491089cb28f94beece7260056b698c6fdd645f3f Author: Andrea Piras Date: Tue Apr 21 23:45:14 2009 +0200 2009-04-21 Andrea Piras * src/singleplayertab.cpp: fixed revert 2009-04-21 Andrea Piras * src/replay/replaylist.cpp: users in replays are in sync & ready by default 2009-04-21 Andrea Piras * : commit 164402ec0a8d71ba58a0f35cd18f3a8b3f43c15f Merge: a68c0f9 96156a6 Author: Andrea Piras Date: Tue Apr 21 23:31:16 2009 +0200 2009-04-21 Rene Milk * src/battlemaptab.cpp, src/battleroomtab.cpp, src/iunitsync.h, src/singleplayertab.cpp, src/springunitsync.cpp: Revert "warn user when sleceting maps that getting info on failed." This reverts commit d6d70aecb3edb84bfc1fa445bfa8cdc74609b942. Conflicts: src/singleplayertab.cpp 2009-04-21 Andrea Piras * src/torrentwrapper.cpp: Revert "default torrent timeout is now 2 seconds" This reverts commit 60aeae81c655ea39458f90d66a65df5aee2738e4. 2009-04-20 Andrea Piras * src/torrentwrapper.cpp: default torrent timeout is now 2 seconds 2009-04-21 Andrea Piras * src/hostbattledialog.cpp: tooltip for relayhost checkbox 2009-04-21 Andrea Piras * src/springlobbyapp.cpp: add default options if groups are missing, not only @ first time startup 2009-04-21 Andrea Piras * src/springlobbyapp.cpp: added some default useful groups 2009-04-21 Andrea Piras * src/springlobbyapp.cpp: rephrased statistic info box slightly 2009-04-21 Andrea Piras * src/springlobbyapp.cpp, src/springlobbyapp.h, src/springoptionstab.cpp, src/springoptionstab.h: datadir prompt is no more for new users, now it's a button in the options tab 2009-04-18 Kaot * po/de.po: Some Changes in the german Localisation. Signed-off-by: Kaot 2009-04-13 Kaot * po/de.po: Some Changes in the german Localisation. Signed-off-by: Kaot 2009-04-20 Andrea Piras * src/springlobbyapp.cpp, src/springlobbyapp.h: don't call OnExit multiple times 2009-04-20 Andrea Piras * src/torrentwrapper.cpp: default torrent timeout is now 2 seconds 2009-04-17 Andrea Piras * src/spring.cpp: now startrects for nonexistant allyteams-players gets written to script.txt too 2009-04-15 Andrea Piras * : commit d6b193164a48642d83de91ac2a4c4a2b096365fc Merge: 9a1e8bc e886f76 Author: Andrea Piras Date: Wed Apr 15 18:37:19 2009 +0200 2009-04-15 Andrea Piras * : Merge commit 'koshi/master' into config-win 2009-04-13 Rene Milk * : Merge commit 'bd/master' 2009-04-12 Rene Milk * src/mapctrl.cpp, src/singleplayertab.cpp: astyle mapctrl,singelplayertab Signed-off-by: Rene Milk 2009-04-12 Andrea Piras * : Merge commit 'koshi/master' 2009-04-12 Rene Milk * : commit 30edcd5fe297b5e856052a4fdabd91e192c1b5b3 Author: Rene Milk Date: Sat Apr 11 23:06:55 2009 +0200 2009-04-11 Rene Milk * src/chatlog.cpp, src/chatlog.h, src/chatpanel.cpp, src/mainchattab.cpp: logging bug fixed! 2009-04-11 Rene Milk * src/chatlog.cpp, src/chatlog.h, src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainchattab.h, src/ui.cpp: some work towards fixing logging bug 2009-04-11 Andrea Piras * src/battle.cpp: don't apply rank limit to bots 2009-04-11 Rene Milk * src/socket.cpp: possibly fix all local ip issues 2009-04-11 Rene Milk * : commit afd92eb9fcc3b58640d5cce28f83aa255d1e3153 Author: Rene Milk Date: Sat Apr 11 15:00:24 2009 +0200 2009-04-11 Rene Milk * src/battlemaptab.cpp, src/battleroomtab.cpp, src/iunitsync.h, src/singleplayertab.cpp, src/springunitsync.cpp: warn user when sleceting maps that getting info on failed. 2009-04-11 Rene Milk * : Merge commit 'bd/master' Conflicts: src/thread.cpp 2009-04-08 Rene Milk * src/battlelistctrl.cpp: fixes #849 (mapname displayed with extension) 2009-04-08 Rene Milk * : commit 5fafa51ec1980e16ec76b6dc13e79e3538c97855 Author: Rene Milk Date: Wed Apr 8 23:31:44 2009 +0200 2009-04-08 Andrea Piras * src/addbotdialog.cpp: fixed missing return T_T 2009-04-08 Rene Milk * : Merge commit 'bd/master' 2009-04-08 Andrea Piras * src/tasserver.cpp: ignore relay host managers that are away ( disabled ) 2009-04-07 Andrea Piras * src/chatpanel.cpp: fixed typo appending "@IRC" to tizbacbridgebot's talk rather than skipping 2009-04-08 Andrea Piras * Makefile.am, src/iconimagelist.cpp, src/iconimagelist.h, src/images/away.xpm, src/images/bot_away.xpm: added bot away status icon 2009-04-08 Andrea Piras * src/tasserver.cpp: ignore relay host managers that are away ( disabled ) 2009-04-07 Andrea Piras * src/chatpanel.cpp: fixed typo appending "@IRC" to tizbacbridgebot's talk rather than skipping 2009-04-07 Rene Milk * src/settings++/panel_pathoption.cpp, src/springoptionstab.cpp: avoids possible segfault with certain wx/WM combinations 2009-04-07 Andrea Piras * src/spring.cpp: now dedicated server wants hash in unsigned format 2009-04-05 Andrea Piras * src/addbotdialog.cpp, src/addbotdialog.h: show infos for the default selected AI in addbotdialog 2009-04-05 Andrea Piras * src/chatpanel.cpp: gon't append @IRC if the chat is relayed by tizbacbridgebot 2009-04-05 Andrea Piras * src/addbotdialog.cpp: fixed addbotdialog not working with luaai & next version of spring 2009-04-05 Andrea Piras * src/springunitsync.cpp: possibly fixed luaai problems with next spring version 2009-04-07 Rene Milk * src/settings++/panel_pathoption.cpp, src/springoptionstab.cpp: avoids possible segfault with certain wx/WM combinations 2009-04-07 Rene Milk * : Merge commit 'bd/master' 2009-04-06 Rene Milk * src/Helper/imageviewer.cpp, src/springunitsync.cpp: fixes screenshot viewer crashes 2009-04-05 Andrea Piras * src/addbotdialog.cpp, src/addbotdialog.h: show infos for the default selected AI in addbotdialog 2009-04-05 Andrea Piras * src/chatpanel.cpp: gon't append @IRC if the chat is relayed by tizbacbridgebot 2009-04-05 Rene Milk * src/thread.cpp: averts a crash in Thread dtor 2009-04-05 Rene Milk * src/replay/replaylistctrl.cpp, src/replay/replaylistctrl.h, src/replay/replaytab.cpp, src/replay/replaytab.h: fixes 820 (Application crashes when deleting replies) 2009-04-05 Rene Milk * src/battleroomlistctrl.cpp, src/customvirtlistctrl.cpp, src/ibattle.cpp, src/ibattle.h, src/offlinebattle.h, src/replay/replaylist.cpp, src/replay/replaylist.h, src/replay/replaytab.cpp: fix crash on replay selection 2009-04-05 Rene Milk * : Merge commit 'koshi/master' 2009-04-05 Andrea Piras * src/addbotdialog.cpp: bleh, forgot to commit this 2009-04-05 Andrea Piras * src/torrentwrapper.cpp: call torrent resume only when TLISTDONE arrived from torrent tracker 2009-04-05 Andrea Piras * src/addbotdialog.cpp: fixed addbotdialog not working with luaai & next version of spring 2009-04-05 Andrea Piras * src/springunitsync.cpp: possibly fixed luaai problems with next spring version 2009-04-04 Andrea Piras * src/connectwindow.cpp, src/ui.cpp, src/ui.h: registration failed because of connection failure now brings a prompt to switch server 2009-04-04 Andrea Piras * src/tasserver.cpp, src/tasserver.h, src/ui.cpp: server switching code actually works now 2009-04-04 Andrea Piras * src/ui.cpp: this can actually happend now 2009-04-04 Andrea Piras * src/socket.cpp, src/tasserver.cpp, src/torrentwrapper.cpp: possibly fixed some dtor crashes 2009-04-04 Andrea Piras * src/inetclass.h, src/tasserver.cpp: register socket doesn't attach handler -> no more disconnect messages during register 2009-04-04 Andrea Piras * src/ui.cpp: use GetServer() instead of m_serv-> 2009-04-04 Andrea Piras * src/ui.cpp: register works with single server now 2009-04-04 Andrea Piras * src/ui.cpp: have a single server instance for now instead of keeping new'ing & deleting it 2009-04-04 Andrea Piras * src/ui.cpp: compile fix 2009-04-04 Andrea Piras * src/ui.cpp: don't leak a server class while registering 2009-04-04 Andrea Piras * src/tasserver.cpp: don't rely on sendcmd to register 2009-04-04 Andrea Piras * src/tasserver.cpp: forgot to commit 2009-04-04 Andrea Piras * src/tasserver.cpp: create a special temp socket for registration pourposes 2009-04-04 Andrea Piras * src/server.cpp, src/tasserver.cpp: delete all the (now) useless socket checks 2009-04-04 Andrea Piras * src/server.cpp, src/server.h, src/ui.cpp: socket should live as long as server class exist, not be spawned before and delete separately 2009-04-04 Andrea Piras * src/ui.cpp: fixed message dialog having inverted title & message 2009-04-04 Andrea Piras * src/connectwindow.cpp, src/server.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: on connection failure prompt the user to reconnect, do nothing or swtch to next server made default server be saved only on connectionm success & oly if it's not a fallback server fixed server name in server tab displaying hardcoded "TAS Server" 2009-04-03 Andrea Piras * src/torrentwrapper.cpp: correctly handle infohashes in unsigned format 2009-04-03 Rene Milk * : Merge commit 'koshi/master' 2009-04-03 Rene Milk * : commit 8d163ba35798b0c8ec4b0484d83b05e609275bbc Author: Rene Milk Date: Fri Apr 3 12:29:35 2009 +0200 2009-04-03 Andrea Piras * : commit 840718ab6c9008582d8cff6177eb80e4de96baad Author: Andrea Piras Date: Fri Apr 3 02:16:39 2009 +0200 2009-04-03 Andrea Piras * : Merge commit 'koshi/master' 2009-04-02 Rene Milk * : commit 470cdf49bfe577b27f91a64b2ff224e16d0aa313 Author: Andrea Piras Date: Thu Apr 2 23:09:42 2009 +0200 2009-04-02 Andrea Piras * src/chatoptionstab.cpp, src/chatpanel.cpp, src/serverevents.cpp, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: changed how highlighted words are stored internally ( no more ; separated list ), now on successful login if the user isn't in highlight list it gets auto added 2009-04-02 Rene Milk * src/user.cpp: fix user status icon not updated 2009-04-02 Andrea Piras * src/torrentwrapper.cpp: added back misteriously disappeared for loop 2009-04-02 Rene Milk * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h: fix periodic auto sort in broomlistctrl 2009-04-02 Andrea Piras * src/torrentwrapper.cpp: how could this slip trough? :/ 2009-04-02 Andrea Piras * src/torrentwrapper.cpp: fixed build with old libtorrent versions 2009-04-02 Rene Milk * : commit 1602c6c761bd9c86e809047b7c279d7d46ab7f4c Author: Andrea Piras Date: Thu Apr 2 21:41:30 2009 +0200 2009-04-02 Rene Milk * : commit 54f6f32d2b4f1792174c6cc7d958764b8def6d68 Merge: 79f310d b33c55d Author: Rene Milk Date: Thu Apr 2 21:32:36 2009 +0200 2009-04-02 Rene Milk * src/maintorrenttab.cpp, src/widgets/infopanel.cpp, src/widgets/widget.cpp: fix non working dl button, wrong save path and dialog name 2009-04-02 Andrea Piras * : commit 28c4e45cbe45cdfb21da8734b9c171cc8e5de82e Author: Andrea Piras Date: Thu Apr 2 21:16:20 2009 +0200 2009-04-02 Rene Milk * : commit a0b058bfd0a9c80f482502bae8e6cab0fe8cea2f Author: Rene Milk Date: Thu Apr 2 00:18:53 2009 +0200 2009-04-01 Andrea Piras * src/replay/replaylist.cpp, src/replay/replaythread.cpp: fixed include paths 2009-04-01 Rene Milk * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h: sorting and highlighting works, status icon broken 2009-04-01 Andrea Piras * : commit c7fd2e0f0c060363c7958872520afefce6b0295d Author: Andrea Piras Date: Wed Apr 1 23:21:02 2009 +0200 2009-04-01 Andrea Piras * src/replay/replaylist.cpp, src/replay/replaylist.h: reverted the change that removed reference fetch in replaylist when adding a new replay ( was creating pointers leading nowhere ) 2009-04-01 Rene Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp: - remove extra parameter from http://thecoccinella.org/about - implement highlight for broomlistctrl 2009-04-01 Rene Milk * src/battleroomlistctrl.cpp: refactor done (minus sorting and highlighting) 2009-04-01 Rene Milk * src/battleroomlistctrl.cpp: got text in the listctrl and no more warnings 2009-03-31 Rene Milk * src/battleroomlistctrl.cpp, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h: done with text items 2009-03-31 Rene Milk * src/battleroomlistctrl.cpp: converting setting list items to GetItemText usage 2009-03-31 Rene Milk * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/user.cpp, src/user.h: changed battleroomlistctrl to virtual style. compiles, but not more 2009-03-31 Rene Milk * src/springunitsync.cpp: fix possible crash with not fully parsed mapinfos 2009-03-30 Rene Milk * src/utils.cpp, src/utils.h: my idea of a possible fix 2009-03-29 Andrea Piras * src/battlemaptab.cpp, src/battleroomtab.cpp: restrict start position choices when in relay host mode, use as default start type chose before game 2009-03-29 Andrea Piras * src/replay/replaythread.cpp: removed useless space 2009-03-29 Andrea Piras * src/replay/replaythread.cpp: don't let 2 concurrent replay threads to run 2009-03-29 Andrea Piras * src/replay/replaythread.cpp: fixed replay thread crashing when being called more than once 2009-03-29 Andrea Piras * : commit 14fdf021762b59c20b0094b88786f831e17f0213 Author: Andrea Piras Date: Sun Mar 29 00:03:49 2009 +0100 2009-03-28 Rene Milk * src/battleroomlistctrl.cpp, src/springlobbyapp.cpp: fix layout and missing include 2009-03-28 Rene Milk * : commit ed39c1490b35b19578608042ef0519f786c9acd1 Merge: 198e6a9 21cfd12 Author: Andrea Piras Date: Sat Mar 28 23:20:31 2009 +0100 2009-03-28 Andrea Piras * : commit 21cfd12fb07d3ec04f104a19871f30e94eedc172 Author: Rene Milk Date: Sat Mar 28 23:17:40 2009 +0100 2009-03-28 Andrea Piras * src/replay/replaythread.cpp: fixed useless segfault check 2009-03-28 Andrea Piras * src/replay/replaytab.cpp: accidentally committed removal of const 2009-03-28 Andrea Piras * src/iunitsync.h, src/mainwindow.cpp, src/mapselectdialog.cpp, src/mapselectdialog.h, src/replay/replaylist.cpp, src/replay/replaylist.h, src/replay/replaylistctrl.cpp, src/replay/replaylistctrl.h, src/replay/replaytab.cpp, src/replay/replaytab.h, src/replay/replaythread.cpp, src/replay/replaythread.h, src/springlobbyapp.cpp, src/springunitsync.cpp, src/springunitsync.h: rewrote huge chunk how replays gets loaded 2009-03-28 Rene Milk * src/mainwindow.cpp, src/springlobbyapp.cpp: move intial load of replays 2009-03-28 Rene Milk * src/replay/replaythread.h: fix utterly stupid mistake 2009-03-28 Rene Milk * src/mainwindow.cpp, src/replay/replaytab.cpp, src/replay/replaytab.h, src/replay/replaythread.cpp, src/replay/replaythread.h: run thread from unitsync reloaded 2009-03-28 Rene Milk * src/replay/replaylist.cpp, src/replay/replaylist.h, src/replay/replaytab.cpp, src/replay/replaythread.cpp, src/replay/replaythread.h: pass filenames to relaylist thru thread 2009-03-28 Andrea Piras * : Merge commit 'koshi/master' 2009-03-28 Rene Milk * src/settings++/tab_ui.h: fix springsettings segfaulting 2009-03-28 Rene Milk * src/replay/replayfilter.cpp, src/replay/replayfilter.h, src/replay/replaylist.cpp, src/replay/replaylist.h, src/replay/replaytab.cpp, src/replay/replaytab.h, src/replay/replaythread.cpp, src/replay/replaythread.h, src/springlobbyapp.cpp: - not stupid imp almost works - decoupled replaylist from replaytab - constify data handling in replaytab 2009-03-28 Rene Milk * src/replay/replaylist.h, src/replay/replaytab.cpp, src/replay/replaythread.cpp: stupid imp works 2009-03-28 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/replay/replaylist.cpp, src/replay/replaylist.h, src/replay/replaythread.cpp, src/replay/replaythread.h: added stubs for new replaythread, also entries in buildsystem 2009-03-28 Andrea Piras * src/mainwindow.cpp, src/mainwindow.h, src/springlobbyapp.cpp: now SL focus at boot on singleplayer rather than MP so it's more intuitive it can work offline 2009-03-28 Rene Milk * : Merge commit 'bd/master' 2009-03-28 Andrea Piras * : Merge commit 'koshi/master' 2009-03-28 Rene Milk * src/settings++/tab_abstract.cpp: fix initialization error 2009-03-26 Andrea Piras * src/settings++/Defs.hpp: remove the luaui checkbox in springsettings 2009-03-28 Rene Milk * : commit 6eaf801c8e456b0aafa758c79911064b253a4d0c Author: Andrea Piras Date: Fri Mar 27 23:42:30 2009 +0100 2009-03-27 Andrea Piras * src/settings++/Defs.hpp: Revert "remove the luaui checkbox in springsettings" This reverts commit df0b6184c7d080869d2ee76fb4f62ecc7e35a1e7. 2009-03-26 Andrea Piras * src/settings++/Defs.hpp: remove the luaui checkbox in springsettings 2009-03-25 Andrea Piras * src/tasserver.cpp: better logic flow in relay host open 2009-03-25 Andrea Piras * src/settings.cpp: fixed autojoin channel conversion putting channel name in password field is password wasn't set for the channel 2009-03-22 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/ui.cpp: implement /clear and euqiv menu entry to clear current chatpanel 2009-03-22 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/settings++/presets.cpp: remove now obsolete presets.cpp 2009-03-22 Rene Milk * src/settings++/presets.cpp, src/settings++/presets.h: fixes 816 2009-03-19 Rene Milk * src/replay/replaylistctrl.cpp: all good 2009-03-19 Rene Milk * src/replay/replaylistctrl.cpp, src/replay/replaylistctrl.h, src/replay/replaytab.cpp: sorting kinda works 2009-03-19 Rene Milk * src/replay/replaytab.cpp: commented reload time notice 2009-03-19 Rene Milk * src/replay/replaytab.cpp: filter works again 2009-03-19 Rene Milk * src/customvirtlistctrl.cpp, src/replay/replaylistctrl.cpp, src/replay/replaylistctrl.h, src/replay/replaytab.cpp: sorting still does not work 2009-03-19 Rene Milk * src/replay/replaylistctrl.cpp, src/replay/replaytab.cpp, src/replay/replaytab.h: fix 807 and get further along wiht refact 2009-03-19 Rene Milk * src/replay/replaylist.h, src/replay/replaylistctrl.cpp, src/replay/replaylistctrl.h, src/replay/replaytab.cpp, src/replay/replaytab.h: type changed to virt, no explosion, no replays in list either 2009-03-19 Rene Milk * src/Helper/wxtextctrlhist.cpp: fixes #772 2009-03-19 Rene Milk * src/Helper/wxtextctrlhist.cpp, src/Helper/wxtextctrlhist.h: made text control remember text entered before skipping thru history 2009-03-18 Rene Milk * AUTHORS, README: Signed-off-by: Rene Milk 2009-03-18 Rene Milk * src/Helper/colorbutton.h, src/Helper/listctrl.h, src/Helper/sortutil.h, src/Helper/tasclientimport.h, src/Helper/wxTranslationHelper.h, src/Helper/wxtextctrlhist.h, src/aui/artprovider.h, src/aui/auimanager.h, src/aui/auiutils.h, src/channel/autojoinchanneldialog.h, src/channel/channel.h, src/channel/channelchooser.h, src/channel/channelchooserdialog.h, src/channel/channellist.h, src/channel/channellistctrl.h, src/common/events.h, src/filelister/filelistctrl.h, src/filelister/filelistdialog.h, src/filelister/filelistfilter.h, src/gui/globalauimanager.h, src/replay/replayfilter.h, src/replay/replaylist.h, src/replay/replaylistctrl.h, src/replay/replaylistfiltervalues.h, src/replay/replaytab.h, src/settings++/custom_dialogs.h, src/settings++/helpmenufunctions.h, src/updater/exedownloader.h, src/updater/updater.h, src/updater/versionchecker.h: SL license fix part 2 -- fixes #810 2009-03-18 Rene Milk * src/addbotdialog.h, src/agreementdialog.h, src/autobalancedialog.h, src/autohost.h, src/autopointers.h, src/battle.h, src/battlelist.h, src/battlelistctrl.h, src/battlelistfilter.h, src/battlelistfiltervalues.h, src/battlelisttab.h, src/battlemaptab.h, src/battleoptionstab.h, src/battleroomlistctrl.h, src/battleroommmoptionstab.h, src/battleroomtab.h, src/bimap.h, src/chatlog.h, src/chatoptionstab.h, src/chatpanel.h, src/connectwindow.h, src/countrycodes.h, src/crashreport.h, src/crc.h, src/customlistctrl.h, src/customvirtlistctrl.h, src/flagimagedata.h, src/flagimages.h, src/globalevents.h, src/globalsmanager.h, src/groupoptionspanel.h, src/hostbattledialog.h, src/httpdownloader.h, src/ibattle.h, src/iconimagelist.h, src/inetclass.h, src/iunitsync.h, src/lobbyoptionstab.h, src/mainchattab.h, src/mainjoinbattletab.h, src/mainoptionstab.h, src/mainsingleplayertab.h, src/maintorrenttab.h, src/mainwindow.h, src/mapctrl.h, src/mapgridctrl.h, src/mapselectdialog.h, src/mmoptionmodel.h, src/mmoptionswrapper.h, src/mmoptionwindows.h, src/mutexwrapper.h, src/nicklistctrl.h, src/nonportable.h, src/offlinebattle.h, src/sdlsound.h, src/selectusersdialog.h, src/server.h, src/serverevents.h, src/settings.h, src/singleplayerbattle.h, src/singleplayertab.h, src/socket.h, src/spring.h, src/springlobbyapp.h, src/springoptionstab.h, src/springprocess.h, src/springunitsync.h, src/springunitsynclib.h, src/tasserver.h, src/tasservertokentable.h, src/tdfcontainer.h, src/thingdef.h, src/thread.h, src/torrentlistctrl.h, src/torrentoptionspanel.h, src/torrentwrapper.h, src/ui.h, src/uiutils.h, src/unitsyncthread.h, src/user.h, src/useractions.h, src/userlist.h, src/userlistctrl.h, src/usermenu.h, src/utils.h: SL license fix part1 2009-03-18 Rene Milk * src/settings++/Defs.hpp, src/settings++/frame.h, src/settings++/panel_pathoption.h, src/settings++/presets.h, src/settings++/se_utils.h, src/settings++/tab_abstract.h, src/settings++/tab_audio.h, src/settings++/tab_debug.h, src/settings++/tab_quality_video.h, src/settings++/tab_render_detail.h, src/settings++/tab_simple.h, src/settings++/tab_ui.h: springsettings license fix 2009-03-18 Andrea Piras * src/torrentwrapper.cpp: fixed torrent protocol comment 2009-03-16 Rene Milk * tools/upload-temp-win-build.sh: i will test bash scripts before pushing i will test bash scripts before pushing i will test bash scripts before pushing ... 2009-03-16 Rene Milk * tools/upload-temp-win-build.sh: missed a "then" 2009-03-16 Rene Milk * tools/upload-temp-win-build.sh: more finesse for the win builds 2009-03-16 Rene Milk * : commit 01126c999f4460d3ed230804fbb5e606174154d0 Author: Rene Milk Date: Mon Mar 16 22:25:56 2009 +0100 2009-03-14 Andrea Piras * src/torrentwrapper.cpp: properly decode hash quries requests from torrent tracker 2009-03-14 Andrea Piras * src/torrentwrapper.cpp: use proper case to decode incoming hash queries from torrent manager 2009-03-14 Andrea Piras * src/torrentwrapper.cpp: added support for hash queries in torrent system 2009-03-12 Andrea Piras * src/tasserver.cpp: make register answer check be \r\n tolerant too 2009-03-12 Andrea Piras * src/tasserver.cpp: convert incoming \r\n from buffer into \n if the server is acting retarded 2009-03-11 Andrea Piras * : commit 1cd24b3baefac32bbec5c893a5d95c1af8455cc2 Author: Rene Milk Date: Tue Mar 10 23:51:28 2009 +0100 2009-03-11 Andrea Piras * src/tasserver.cpp, src/utils.cpp, src/utils.h: removed code duplication & fixed broken logic in param splitting 2009-03-10 Rene Milk * tools/update-docs.sh: don't be verbose when updating doxygen docs 2009-03-10 Rene Milk * Doxyfile: exclude images and sounds subdir from doxygen 2009-03-09 Rene Milk * Makefile.am: removed compile flags that i didn't mean to commit 2009-03-09 Rene Milk * : commit 5c332567eeb785492f5ec5d2b3f86cc8f7bb09e1 Merge: ebf144c f3cc770 Author: Rene Milk Date: Mon Mar 9 21:01:26 2009 +0100 2009-03-09 Rene Milk * src/chatpanel.cpp, src/chatpanel.h: fix nicklist width in chatpanels restting with resize/focus events, instead use a fixed ratio to grow the two panes 2009-03-08 Andrea Piras * src/ibattle.cpp: bleh, i should compile more often before hitting commit 2009-03-08 Andrea Piras * : commit 412bb24a068d01572869fc5a4926e9e391c0d060 Author: Andrea Piras Date: Sun Mar 8 21:50:50 2009 +0100 2009-03-08 Rene Milk * tools/changelog.sh: added the script now acting as post-recieve hook on buildbot repo 2009-03-08 Andrea Piras * src/channel/autojoinchanneldialog.cpp, src/settings.cpp: correctly list channels 2009-03-08 Andrea Piras * src/settings.cpp: don't copy the channel name in the password field 2009-03-08 Andrea Piras * src/settings.cpp: forgot to commit again >_> 2009-03-08 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: properly convert old channel options 2009-03-08 Andrea Piras * src/settings.cpp: changed channels autojoin parent in the settings to avoid conflicts 2009-03-08 Andrea Piras * src/serverevents.cpp: bleh, forgot to commit 2009-03-08 Andrea Piras * src/serverevents.cpp: forgot to fix a function 2009-03-08 Andrea Piras * src/channel/autojoinchanneldialog.cpp, src/chatpanel.cpp, src/settings.cpp, src/settings.h: channel list now returns a vector of a struct rather than a space delimited token 2009-03-08 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: automatically convert old channel options 2009-03-08 Andrea Piras * src/channel/autojoinchanneldialog.cpp, src/channel/autojoinchanneldialog.h, src/chatpanel.cpp, src/serverevents.cpp, src/settings.cpp, src/settings.h: changed format how channels are stored in settings 2009-03-07 Rene Milk * src/battlelistctrl.cpp, src/battleroommmoptionstab.cpp: fix opt preset not being saved 2009-03-07 Andrea Piras * src/utils.cpp: nickname sanitizing checks for not being empty 2009-03-07 Andrea Piras * src/tasserver.cpp: better order in variable assignment 2009-03-07 Andrea Piras * src/tasserver.cpp: full range of managers allowed now 2009-03-07 Andrea Piras * src/tasserver.cpp: better relay host manager selection code 2009-03-07 Andrea Piras * src/tasserver.cpp: skip relay host managers that have ingame status, means that they don't have any available hoster slots 2009-03-06 Andrea Piras * src/chatoptionstab.cpp: chat options panel to preview color correctly inherits background color now 2009-03-06 Rene Milk * Makefile.am: fix distcheck 2009-03-05 Andrea Piras * src/battle.h, src/serverevents.cpp: fixed crash when a user was removed from the server before he was leaving the battle he was in 2009-03-05 Andrea Piras * src/battleroomtab.cpp, src/ibattle.cpp, src/ibattle.h, src/singleplayertab.cpp: no more random crash on user joined battle 2009-03-05 Andrea Piras * : commit 6ad32448cd1751c9a776893546f351636c1456d3 Author: Andrea Piras Date: Thu Mar 5 21:25:45 2009 +0100 2009-03-05 Rene Milk * : commit c278e1f4f3d019cb1cf5d9ca05cd87969940b4cc Author: Andrea Piras Date: Thu Mar 5 17:09:38 2009 +0100 2009-03-05 Rene Milk * src/widgets/downloadpanel.cpp: remove extra includes 2009-03-05 Andrea Piras * src/tasserver.cpp: lowercase incoming script tags 2009-03-05 tc- * src/channel/channel.cpp: Fixed compile error in channel.cpp 2009-03-05 Andrea Piras * src/channel/channel.cpp, src/ui.cpp: added /p & /part commands to leave current channel 2009-03-05 Andrea Piras * src/channel/channel.cpp, src/ui.cpp: added /p & /part commands to leave current channel 2009-03-05 Andrea Piras * src/chatpanel.cpp, src/ui.cpp: when LEAVE is issued as raw command, disable the tab, don't close it 2009-03-05 Andrea Piras * src/settings.cpp: add all server urls for new users, not just main & backup 1 2009-03-05 Andrea Piras * src/tasserver.cpp: login works again 2009-03-04 Andrea Piras * src/tasserver.cpp: incoming commands are case insensitive now 2009-03-04 Andrea Piras * src/tasserver.cpp: get login nick from ACCEPTED argument 2009-03-04 Andrea Piras * src/Helper/TextCompletionDatabase.cpp: make chat completion case insensitive 2009-03-04 Andrea Piras * src/springunitsync.cpp: removed disk caching for map & mod options 2009-03-04 Andrea Piras * src/torrentwrapper.cpp: removed useless function 2009-03-04 Andrea Piras * src/spring.cpp: fixed teamspeak command not being sent correctly 2009-03-03 Andrea Piras * src/widgets/infopanel.cpp: fixed #include path 2009-03-02 Rene Milk * src/widgets/downloadpanel.cpp: remove old includes 2009-03-02 Rene Milk * : commit 2308a54f6c889fc4da2bf2853aff10a26ac9ad2a Author: Rene Milk Date: Mon Mar 2 23:13:19 2009 +0100 2009-03-02 Rene Milk * src/widgets/infopanel.cpp, src/widgets/infopanel.h: layout tweaks 2009-03-02 Andrea Piras * src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/hostbattledialog.cpp, src/mapctrl.cpp, src/settings.h: use global constant unsigned int rather than hardcoding the same value all over the place 2009-03-02 Rene Milk * src/Helper/imageviewer.cpp: trim extra vars 2009-03-02 Rene Milk * src/Helper/imageviewer.cpp: fix ratio and bg clearing in imageviewer 2009-03-02 Rene Milk * : commit a450a0fbbbc132b1e5967a89c00a842e788c9245 Author: Andrea Piras Date: Mon Mar 2 20:39:40 2009 +0100 2009-03-02 Andrea Piras * src/tasserver.cpp: removed boundary checks for max 16 team boxes 2009-03-02 Andrea Piras * src/singleplayertab.cpp: removed 16 players limitation in SP 2009-03-02 Andrea Piras * src/springunitsync.cpp, src/uiutils.cpp, src/uiutils.h: moved makefit from unitsync to uiutils 2009-03-02 Rene Milk * : commit 91df6c9797576943e5a5a3a967596955257aa83a Author: Andrea Piras Date: Mon Mar 2 13:47:19 2009 +0100 2009-03-02 Andrea Piras * src/replay/replaytab.cpp: properly sized userlist in replay tab 2009-03-02 Andrea Piras * src/replay/replaytab.cpp: now users are actually shown 2009-03-02 Andrea Piras * : commit ed9696b4e6faedaef7fb0dc822f15dbf64a8bcae Merge: 180eff8 39eeeab Author: Andrea Piras Date: Mon Mar 2 13:02:46 2009 +0100 2009-03-02 tc- * src/chatpanel.cpp, src/chatpanel.h, src/iconimagelist.cpp, src/iconimagelist.h, src/images/channel_options.xpm: Added channel options button to chatpanel. 2009-03-02 tc- * : Resolved conflicts 2009-03-01 Andrea Piras * : Merge commit 'koshi/master' 2009-03-01 Rene Milk * src/chatpanel.cpp: example of how to get "default" menu items into custom menu 2009-03-01 Rene Milk * src/chatpanel.cpp: re-enable event handlers for context menu in all chatpanels; TODO add to defautl menu instead of replace 2009-03-01 Rene Milk * src/battlelistctrl.cpp: recreate right click popup every time it's requested, fixes #110 2009-03-01 Rene Milk * src/lobbyoptionstab.cpp, src/lobbyoptionstab.h, src/mainwindow.cpp, src/mainwindow.h, src/settings.cpp, src/settings.h: make big tab icons optional, somewhat fixes #712 2009-03-01 Rene Milk * src/battle.cpp, src/battlelistctrl.cpp, src/customvirtlistctrl.cpp, src/mainwindow.cpp, src/mainwindow.h, src/nicklistctrl.cpp: fix some warnings 2009-03-01 Rene Milk * src/mainwindow.cpp, src/mainwindow.h: removed no-op function 2009-03-01 Rene Milk * src/widgets/downloadlistctrl.cpp, src/widgets/downloadpanel.cpp, src/widgets/infopanel.cpp, src/widgets/infopanel.h: rework ui layout a lot 2009-02-28 Rene Milk * src/flagimages.cpp: prolly save thousands of compares cause of non-set flag strings 2009-02-28 Andrea Piras * src/springunitsync.cpp: don't cache to disk the sidepic, ram is enough 2009-02-28 Rene Milk * src/Helper/imageviewer.cpp: keeping ratio doesn't work yet 2009-02-28 Rene Milk * src/widgets/downloadpanel.cpp, src/widgets/infopanel.cpp, src/widgets/infopanel.h: got rid of additional popups 2009-02-28 Rene Milk * src/Helper/imageviewer.cpp, src/Helper/imageviewer.h, src/mainwindow.cpp, src/widgets/downloadlistctrl.cpp, src/widgets/downloadlistctrl.h, src/widgets/downloadpanel.cpp, src/widgets/infopanel.cpp: refactor imageviewer 2009-02-28 Rene Milk * : commit 973503180e3af59c0624010bdcd521f18b02ab2b Author: Rene Milk Date: Sat Feb 28 15:57:39 2009 +0100 2009-02-28 Rene Milk * src/battlemaptab.cpp, src/battlemaptab.h, src/mapctrl.cpp, src/singleplayertab.cpp, src/singleplayertab.h: fixes #675, minimap mode display switching non functional on win 2009-02-28 Rene Milk * src/battlelisttab.cpp, src/battlelisttab.h: show number of displayed battles at bottom of battlelisttab 2009-02-28 Rene Milk * src/torrentoptionspanel.cpp: fixes #759 2009-02-28 Rene Milk * src/widgets/downloadlistctrl.cpp: fix windows crash 2009-02-28 Rene Milk * CMakeLists.txt, configure.ac.m4: fix linking 2009-02-27 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/Helper/slhtmlwindow.cpp, src/Helper/slhtmlwindow.h, src/widgets/infopanel.cpp, src/widgets/infopanel.h: implemented mini wrapper for wxHtmlWindow so i can control link clicking behaviour in widget info panel 2009-02-27 Rene Milk * : commit b5034cd7c68778701f93d45455f27ce6324b594f Merge: 7eb125a 540fe07 Author: Andrea Piras Date: Fri Feb 27 01:44:09 2009 +0100 2009-02-27 Rene Milk * src/battlelistctrl.cpp, src/channel/channellistctrl.cpp, src/customvirtlistctrl.cpp, src/nicklistctrl.cpp: fix stupid init mistake for sortorder 2009-02-27 Rene Milk * src/widgets/downloadpanel.cpp: sort after populate 2009-02-26 Rene Milk * src/battlelistctrl.cpp, src/widgets/downloadlistctrl.cpp: implement sorting 2009-02-26 Rene Milk * src/springunitsync.cpp, src/widgets/downloadlistctrl.cpp: fix compile err 2009-02-26 Rene Milk * : commit 7eb125af8eea2c1fd25bccdf92d34312d38a71ee Author: Andrea Piras Date: Thu Feb 26 19:01:12 2009 +0100 2009-02-26 Andrea Piras * src/tasserver.cpp: automatically PM RelayHostManagerList on login to get relay host manager list 2009-02-26 Andrea Piras * src/tasserver.cpp: fixed typo 2009-02-26 Andrea Piras * src/tasserver.cpp: user a bot rather than #autohost topic to list relay managers 2009-02-26 Andrea Piras * src/tasserver.cpp: user a bot rather than #autohost topic to list relay managers 2009-02-26 Andrea Piras * src/battle.cpp, src/tasserver.cpp: fixed bot ally change not being sent 2009-02-26 Andrea Piras * : commit 366c61a6be7e99cb1603a3af6b0dc17f096328e9 Author: Andrea Piras Date: Thu Feb 26 00:45:57 2009 +0100 2009-02-26 Andrea Piras * : Merge commit 'koshi/master' 2009-02-26 Andrea Piras * src/spring.cpp: correctly write myplayername when using relayhosts 2009-02-25 Andrea Piras * src/battle.cpp, src/battle.h, src/ibattle.cpp, src/ibattle.h, src/spring.cpp: better script generation for relayhosts 2009-02-25 Andrea Piras * src/ui.cpp: save relay host script.txt locally before submitting 2009-02-25 Rene Milk * src/battlelistctrl.cpp, src/battlelistctrl.h: removed legacy code 2009-02-25 Rene Milk * src/battlelistctrl.cpp, src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp: autoload/save works 2009-02-25 Rene Milk * springlobby.cbp, src/customvirtlistctrl.cpp, src/nicklistctrl.cpp, src/nicklistctrl.h: laoding of sortorder works, savin fubared 2009-02-25 Rene Milk * springlobby.cbp, src/Helper/sortutil.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp, src/settings.cpp, src/settings.h: prelim work on autoload/save sortorder 2009-02-24 Andrea Piras * src/chatpanel.cpp: fixed font color properties not being applied correctly to chat entry box 2009-02-24 Andrea Piras * src/tasserver.cpp: some sanity checks on commands sent to the server 2009-02-24 Andrea Piras * src/tasserver.cpp: send correct command to the server instead of displaying it locally 2009-02-24 Rene Milk * src/mainwindow.cpp, src/mainwindow.h, src/nicklistctrl.cpp: set focus on manual request pm windows, but prohiibt focus stealing by automatics 2009-02-24 Rene Milk * src/replay/replaylistctrl.cpp: fix sorting in replaytab for real 2009-02-24 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/customvirtlistctrl.h: fixes adding user to group via nicklist context menu 2009-02-23 Rene Milk * src/replay/replaylistctrl.cpp: fixes CompareUniversal again 2009-02-23 Rene Milk * src/battlelistctrl.cpp, src/replay/replaylistctrl.cpp: TODO: fix ComapreUniversal disabled in replaylistctrl 2009-02-23 Rene Milk * : commit 11195c486457256192aa9957287d25f7bc695583 Author: Andrea Piras Date: Mon Feb 23 03:30:38 2009 +0100 2009-02-23 Andrea Piras * : commit f7d576425665b584513e4764eeb6976c7ee8e1d3 Merge: 3228c41 0b709e1 Author: Andrea Piras Date: Mon Feb 23 01:17:17 2009 +0100 2009-02-23 Rene Milk * src/torrentwrapper.cpp: use 1 second timeout in torrentwrapper dtor 2009-02-23 Rene Milk * src/socket.cpp, src/socket.h, src/torrentwrapper.cpp: set socket tiemout to 0 at torrentwrapper dtor start 2009-02-23 Andrea Piras * src/battleroomtab.cpp, src/battleroomtab.h: use editable combobox instead of choice box in battleroom or map name won't be show in not existing 2009-02-23 Andrea Piras * : commit ab77cd9f85cb4b4ab1b590a55975065841a46785 Merge: ce20238 658326f Author: Rene Milk Date: Sun Feb 22 23:54:04 2009 +0100 2009-02-22 Andrea Piras * src/battleroomtab.cpp: fixed map combo not being filled with default selection on battleroom 2009-02-22 Rene Milk * : commit 2d4eb1df4c1457d6d5818e379b88c13371f68e29 Author: Andrea Piras Date: Sun Feb 22 23:23:25 2009 +0100 2009-02-22 Rene Milk * src/chatpanel.cpp, src/customlistctrl.cpp, src/selectusersdialog.cpp: use wxWindowUpdateLocker instead of manually freeze/thaw 2009-02-22 Rene Milk * src/Helper/wxtextctrlhist.cpp, src/battlelistctrl.cpp, src/battlelistfilter.cpp, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/chatoptionstab.cpp, src/chatpanel.cpp, src/chatpanel.h, src/lobbyoptionstab.cpp, src/mainchattab.cpp, src/mainchattab.h, src/mainoptionstab.cpp, src/mainoptionstab.h, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h, src/maintorrenttab.cpp, src/mainwindow.cpp, src/mainwindow.h, src/replay/replaytab.cpp, src/settings++/custom_dialogs.cpp, src/settings.cpp, src/singleplayertab.cpp, src/socket.cpp, src/springlobbyapp.cpp, src/tasserver.cpp, src/torrentoptionspanel.cpp, src/ui.cpp, src/utils.h: removed all uses of conditional compile for wx 2.6 Signed-off-by: Rene Milk 2009-02-22 Rene Milk * src/battleroomtab.cpp: remove obsolete code/whitespace 2009-02-22 Rene Milk * src/battleroomtab.cpp: fixes 679, side selection width not corresponding to contents 2009-02-22 Andrea Piras * src/ibattle.cpp: ignore spectators when searching for free map spot 2009-02-22 Rene Milk * : commit 50ea55650f84f6afeddd6b36677b51df05c7b3c1 Author: Rene Milk Date: Sun Feb 22 20:21:09 2009 +0100 2009-02-22 Rene Milk * src/chatpanel.cpp: fixes flood warning resetting SL to one screen 2009-02-22 Andrea Piras * src/addbotdialog.cpp: if no AI info functionality is available, don't waste space in addbot dialog 2009-02-22 Rene Milk * : commit fa2c0aeb1efed27080180c4eba33a2f97a5418f4 Merge: 0b7d650 47b129c Author: Andrea Piras Date: Sun Feb 22 13:11:15 2009 +0100 2009-02-22 Andrea Piras * src/battlemaptab.cpp, src/battleroomtab.cpp, src/battleroomtab.h: added map combo selector in the battleroom tab too 2009-02-22 Andrea Piras * src/battlemaptab.cpp, src/battleroomtab.cpp: now clicking on a map in a battleroom as client suggests it to the host 2009-02-22 Andrea Piras * src/battlemaptab.cpp, src/battleroomtab.cpp: now clicking on a map in a battleroom as client suggests it to the host 2009-02-22 Andrea Piras * : commit 3e40af95326971d5656c56ab5e8d778f76627118 Merge: 05c8868 f3f23b2 Author: Andrea Piras Date: Sun Feb 22 12:25:48 2009 +0100 2009-02-22 Andrea Piras * src/hostbattledialog.cpp: host slider back to 32 max for the moment 2009-02-22 Andrea Piras * src/autohost.cpp, src/battleroomtab.cpp, src/ibattle.cpp, src/ibattle.h: removed bot comsharing checks 2009-02-22 Andrea Piras * : commit 191a431d5592d2cef43625b3680fabc3a9a1d7c1 Author: Andrea Piras Date: Sun Feb 22 12:13:24 2009 +0100 2009-02-21 Andrea Piras * src/addbotdialog.cpp: show infos for default AI too 2009-02-21 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/springlobbyapp.h: removed ota content downloader & prompt 2009-02-21 Andrea Piras * src/addbotdialog.cpp: properly expand the ai infos 2009-02-21 Rene Milk * : Merge commit 'bd/master' 2009-02-20 Collin J. Sutton * src/mapctrl.cpp, src/mapctrl.h: Fixed some drawing glitches for expanded user box in SP 2009-02-20 Andrea Piras * src/springlobbyapp.cpp: fixed compiler error 2009-02-20 Andrea Piras * src/springlobbyapp.cpp: this only made problems 2009-02-20 Rene Milk * src/mainjoinbattletab.cpp, src/mainjoinbattletab.h: remove wx2.6 legacy code, reorder includes 2009-02-20 Andrea Piras * : commit 62bdcacdf0386bb4b3a3dcb4c425192b38c5ae49 Merge: 0d46952 44991e0 Author: Andrea Piras Date: Fri Feb 20 02:13:18 2009 +0100 2009-02-20 Andrea Piras * : commit 0d46952c34ed79d9f868be00b7b06ed317561e8f Author: Andrea Piras Date: Thu Feb 19 23:15:36 2009 +0100 2009-02-19 Rene Milk * src/mapctrl.cpp: only change to cross for horst 2009-02-19 Rene Milk * src/mapctrl.cpp, src/mapgridctrl.cpp: - change mouse in mapgridctrl to hand to signal drag capability - change mouse in mapctrl back to cross when mode is chooose ingame 2009-02-19 Andrea Piras * : commit 38794f4c03866facc5956470002176253e0113b8 Author: Andrea Piras Date: Thu Feb 19 20:47:19 2009 +0100 2009-02-19 Andrea Piras * src/battleoptionstab.cpp, src/battleroomtab.cpp, src/ibattle.cpp, src/ibattle.h, src/mmoptionswrapper.cpp, src/serverevents.cpp, src/serverevents.h, src/spring.cpp, src/tasserver.cpp: now SL handles internally unit limit restrictions with a very dirty protocol hax no gui yet 2009-02-19 tc- * src/battle.cpp, src/battleroomlistctrl.cpp, src/iconimagelist.cpp: Fixed some more warnings 2009-02-19 tc- * src/battle.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/mainwindow.cpp, src/mmoptionwindows.cpp, src/replay/replaytab.cpp: Fixed some warnings 2009-02-18 Andrea Piras * src/mainchattab.cpp: pm's don't steal focus anymore, wooohoo! 2009-02-18 Rene Milk * src/chatoptionstab.cpp: fixes 755 2009-02-18 Andrea Piras * : Merge commit 'koshi/master' 2009-02-18 Andrea Piras * src/socket.cpp, src/socket.h: better behaviour of sending socket so it handles nonblocking properly 2009-02-18 Rene Milk * : commit 9418d39ae3f9114ec8a76a1cdf3e0f53ba587941 Author: Rene Milk Date: Wed Feb 18 15:53:16 2009 +0100 2009-02-18 Andrea Piras * src/singleplayertab.cpp: use fixed button size to prevent segfault in ctor 2009-02-18 Andrea Piras * src/singleplayertab.cpp: use right color 2009-02-18 Andrea Piras * src/singleplayertab.cpp, src/singleplayertab.h: segfaults on load, but should create color selection button in sp + windows :P 2009-02-18 Rene Milk * src/springlobby.desktop: fix suse build idiocy 2009-02-18 Rene Milk * po/LINGUAS, po/ar.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/en_US.po, po/es.po, po/fi.po, po/fr.po, po/it.po, po/pl.po, po/pt.po, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po, po/zh_CN.po: enable switching back to english 2009-02-18 Andrea Piras * : commit c6c692f57f5eb1360795ec175cbf4b511985416d Merge: 5f783f8 74c5485 Author: Andrea Piras Date: Wed Feb 18 13:09:04 2009 +0100 2009-02-18 Andrea Piras * src/settings.cpp: convert action color too 2009-02-18 Andrea Piras * src/settings.cpp: fixed idiotic assignment 2009-02-18 Andrea Piras * src/torrentwrapper.cpp: check for queued status, not success to remove to resume lists 2009-02-18 Andrea Piras * src/torrentwrapper.cpp: check for queued status, not success to remove to resume lists 2009-02-18 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: initial work to thread maintenance jobs for torrent system, misses all locks so espect it to lock almost always :P 2009-02-18 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: moved dependency check queue to torrenttable, changed from vector to set 2009-02-18 Andrea Piras * src/settings.cpp: typo >_> 2009-02-18 Andrea Piras * src/settings.cpp: hopefully fixed 64 bit problems 2009-02-18 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: automatically convert old color format for options to new 2009-02-17 Andrea Piras * src/settings.cpp: 2 more missing functions 2009-02-17 Andrea Piras * src/settings.cpp: forgot to fix a function 2009-02-17 Andrea Piras * : commit d49ac03c5c8bdc4a367670734f3e7440983c4d67 Merge: f6225df c939f5c Author: Andrea Piras Date: Tue Feb 17 23:20:57 2009 +0100 2009-02-17 Andrea Piras * : commit c939f5c7ec7e579332a342dc8b77bc5705e3bc69 Author: Andrea Piras Date: Tue Feb 17 22:04:25 2009 +0100 2009-02-17 Andrea Piras * src/settings.h: Revert "Named chat colors WIP" This reverts commit d34b9875eb0387d880753002c55d897bfdcabff2. Conflicts: src/chatpanel.cpp 2009-02-17 Andrea Piras * src/settings.h: Revert "Completed inital changes for color getting/setting" This reverts commit 27ad87b8ac18a376592bffa36e0761db80937e66. 2009-02-17 Andrea Piras * src/settings.cpp: Revert "Implemented (Get|Set)ChatColor functions, added default color map" This reverts commit 1c99be4ba79ff3a6eda8d127744d954f7783d48a. Conflicts: src/settings.cpp 2009-02-17 Andrea Piras * src/chatoptionstab.cpp, src/chatpanel.cpp, src/mainchattab.cpp, src/settings.cpp: Revert "Changed GetChatColor* calls to new format" This reverts commit 18bcd87958a5b89845d66815cf2b580e9b541a22. Conflicts: src/chatpanel.cpp 2009-02-17 Andrea Piras * src/updater/updater.cpp: fixed updater message 2009-02-17 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: added automatic removal of torrent seeds who didn't transfer any data in the last 2 minutes 2009-02-17 Andrea Piras * src/torrentwrapper.cpp: access the torrentwrapper using GETtorrentwrapper, also remove the queued torrents/seed from the copyloop rather than join function 2009-02-17 Andrea Piras * src/torrentwrapper.cpp: check for leech count, not seed 2009-02-17 Andrea Piras * src/socket.cpp: don't use linux specific socket code for other OS such as BSD 2009-02-17 Andrea Piras * src/torrentwrapper.cpp: better layout 2009-02-17 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: now leech & seed count are handled interally in torrenttable class 2009-02-17 Andrea Piras * src/torrentwrapper.cpp: remove seed request when you cancel a torrent too 2009-02-17 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: all torrents are now queued by default rather than joined directly on fail they get auto removed from the queue/seed list remove torrent now removes queued torrents too 2009-02-17 Rene Milk * src/battle.cpp, src/channel/channellistctrl.cpp, src/mainwindow.cpp, src/mmoptionwindows.cpp, src/user.h: fix some warnings 2009-02-17 Rene Milk * src/iconimagelist.cpp, src/iconimagelist.h: fixes 674 2009-02-17 Andrea Piras * src/settings.cpp, src/uiutils.cpp, src/uiutils.h: changed the way colors are loaded/saved in the options, this breaks retro compatibility but should fix all the 64 bit woes 2009-02-16 Andrea Piras * : Merge commit 'koshi/master' 2009-02-16 Andrea Piras * src/springlobbyapp.cpp: removed #springlobby autojoin removal 2009-02-16 Rene Milk * : commit b1b5cf276de31247efb37f8bd28d0c77770756fe Merge: 1f15e2e 4de3107 Author: Andrea Piras Date: Mon Feb 16 23:17:47 2009 +0100 2009-02-16 Rene Milk * src/Helper/tasclientimport.cpp: import works 2009-02-16 Rene Milk * src/Helper/tasclientimport.cpp, src/springlobbyapp.cpp: not quite working 2009-02-16 tc- * : Merge commit 'bd/master' 2009-02-16 Andrea Piras * : Merge commit 'koshi/master' 2009-02-16 Andrea Piras * src/singleplayerbattle.cpp, src/singleplayertab.cpp, src/singleplayertab.h: added button to chose colour in singleplayer 2009-02-16 Andrea Piras * src/singleplayertab.cpp, src/singleplayertab.h: added spectator button in single player 2009-02-16 Andrea Piras * src/battleroomtab.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: added api to fetch default mod/map option, now options summary highlights in bold options who are not on default 2009-02-16 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/Helper/tasclientimport.cpp, src/Helper/tasclientimport.h: added new files 2009-02-16 Rene Milk * CMakeLists.txt, configure.ac.m4: - up min wx version to 2.8.2 - remove qa lib linking 2009-02-16 Rene Milk * Makefile.am: added notice for new EXTRA_DIST part 2009-02-16 Rene Milk * src/settings.cpp: fixes #724, not returning all possible unitsync finds on linux 2009-02-16 Rene Milk * : commit 22df5daf0a25570afb13aee2125c4aba55a87264 Author: Rene Milk Date: Mon Feb 16 17:35:35 2009 +0100 2009-02-16 Rene Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h: revert dirty 2009-02-16 Rene Milk * Makefile.am: maybe fix template file issue 2009-02-16 Andrea Piras * src/springlobbyapp.cpp: only add #main autojoin if #springlobby was previously there 2009-02-16 Andrea Piras * src/battleroomtab.cpp: don't allow the user change map size :P 2009-02-16 Andrea Piras * src/battleroomtab.cpp: disable option set for the clients 2009-02-16 Andrea Piras * src/mmoptionwindows.cpp: use whole option popup size for the control 2009-02-15 Rene Milk * po/POTFILES.in, po/ar.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/fi.po, po/fr.po, po/it.po, po/pl.po, po/pt.po, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po, po/zh_CN.po: some pot updates 2009-02-15 Rene Milk * Makefile.am, src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h: temp fix template file compile thing Conflicts: src/battleroommmoptionstab.h 2009-02-15 Andrea Piras * src/battleroommmoptionstab.h: FUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUCKKKKKKKKKK 2009-02-15 Andrea Piras * Makefile.am: FUUUUCK 2009-02-15 Andrea Piras * CMakeLists.txt, Makefile.am: fixed buildsystemsfor missing files 2009-02-15 Andrea Piras * src/ibattle.cpp: temp disabled prefetching in windows, TODO: revert this 2009-02-15 Andrea Piras * src/settings.h, src/springlobbyapp.cpp: bumped options version, removed SL channel autojoin for old users, replaced with #main ( can always be added back afterwards ) 2009-02-15 Andrea Piras * src/springlobbyapp.cpp: add #main autojoin for new users, not springlobby or #springlobby would become new main -.- 2009-02-15 Andrea Piras * src/battleroomtab.cpp: added tooltip on options summary 2009-02-15 Andrea Piras * src/mmoptionwindows.cpp: no more crash on ok on options popup 2009-02-15 Andrea Piras * src/mmoptionwindows.cpp: fixed popup layout 2009-02-15 Andrea Piras * src/mmoptionwindows.cpp: typo 2009-02-15 Andrea Piras * src/mmoptionwindows.cpp: send host info on ok 2009-02-15 Andrea Piras * springlobby.cbp: added new files to c::b project wrt option popups 2009-02-15 Andrea Piras * src/battleroomtab.cpp: don't show the dialog for invalid options 2009-02-15 Andrea Piras * src/battleroomtab.cpp: dialog shows 2009-02-15 Andrea Piras * src/battleroommmoptionstab.h, src/battleroomtab.cpp, src/battleroomtab.h, src/mmoptionmodel.h, src/mmoptionwindows.cpp, src/mmoptionwindows.h: experimental options popup window on list double click, it should work, but doesn't atm 2009-02-15 Andrea Piras * src/chatpanel.cpp, src/tasserver.cpp: put \\n <-> \n conversions on tasserver class, fixed relay host functionality 2009-02-15 Andrea Piras * src/battleroomtab.cpp: use correct background for options summary, size correctly columns so they never get an horizontal scollbar 2009-02-13 Rene Milk * src/battleroomtab.cpp: minor layout adj. 2009-02-13 Andrea Piras * src/battleroomtab.cpp: some layout improvements in battleroom 2009-02-13 Andrea Piras * : Merge commit 'koshi/template_mmoptionspanel' 2009-02-13 Andrea Piras * src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/battleroomtab.h: added preset managing from the main battle panel too 2009-02-13 Andrea Piras * src/battleroomtab.cpp, src/iunitsync.h, src/mmoptionmodel.cpp, src/mmoptionmodel.h, src/mmoptionswrapper.cpp: removed useless int option type, switched startpostype to list, now options summary uses full name rather than shortname 2009-02-13 Andrea Piras * src/tasserver.cpp, src/tasserver.h: cleanup in relay hosting code 2009-02-13 Andrea Piras * src/battlelistctrl.cpp, src/battlelisttab.cpp, src/channel/channellistctrl.cpp, src/chatlog.cpp, src/chatpanel.cpp, src/crashreport.cpp, src/filelister/filelistctrl.cpp, src/httpdownloader.cpp, src/ibattle.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/maintorrenttab.cpp, src/mainwindow.cpp, src/mmoptionswrapper.cpp, src/nicklistctrl.cpp, src/replay/replaylist.cpp, src/replay/replaylistctrl.cpp, src/serverevents.cpp, src/settings.cpp, src/socket.cpp, src/springlobbyapp.cpp, src/springunitsync.cpp, src/springunitsynclib.cpp, src/tdfcontainer.cpp, src/ui.cpp, src/unitsyncthread.cpp, src/updater/exedownloader.cpp, src/updater/updater.cpp, src/userlistctrl.cpp, src/utils.cpp: fixed mixed doxygen vs c++ comments in the repo 2009-02-13 Andrea Piras * src/tasserver.cpp: fixed comment types 2009-02-13 Andrea Piras * src/tasserver.cpp: disable token mode by default, not enable -.- 2009-02-13 Andrea Piras * springlobby.cbp: forgot to commit c::b project changes 2009-02-12 Andrea Piras * src/tasservertokentable.h: fixed segfault on login ( missing iterator init ) 2009-02-12 Andrea Piras * Makefile.am, src/tasserver.cpp, src/tasservertokentable.h: moved token table from tasserver class to separate header file 2009-02-12 Andrea Piras * : commit fb26a43d13994e249a71bac702cb49faebe969b7 Author: Andrea Piras Date: Thu Feb 12 19:59:32 2009 +0100 2009-02-11 Rene Milk * : commit d4b7601a2748b32c867d56a744d8b3c46a445bf2 Author: Rene Milk Date: Wed Feb 11 16:11:31 2009 +0100 2009-02-11 Rene Milk * src/battleroommmoptionstab.cpp: fix template class 2009-02-11 Rene Milk * : commit 737c9646b8530987d0751723aa6792e8db515377 Author: Andrea Piras Date: Tue Feb 10 21:13:06 2009 +0100 2009-02-10 Andrea Piras * src/mapctrl.cpp: enabled accumulated metal map generation in SP too, this will generate small slowdown the first time but should perform identically to MP now ( plus someday the feature could be used in SP too ) 2009-02-10 Andrea Piras * src/mapctrl.cpp: don't let the user move the positions in read only mode 2009-02-10 Andrea Piras * src/serverevents.cpp: correctly parse teams 2009-02-10 Andrea Piras * src/ibattle.cpp: only generate a new pos if you're the host 2009-02-10 Andrea Piras * src/tasserver.cpp: send correctly player start pos 2009-02-10 Andrea Piras * src/ibattle.cpp, src/ibattle.h, src/mapctrl.cpp: use UserPos properly 2009-02-10 Andrea Piras * src/ibattle.cpp: send to users their position on join 2009-02-10 Andrea Piras * src/serverevents.cpp: server lowercases incoming tags, fixed parsing 2009-02-10 Andrea Piras * src/ibattle.cpp, src/ibattle.h, src/singleplayertab.cpp: free teams, ally & color shouldn't be searched for bots 2009-02-10 Andrea Piras * src/ibattle.cpp, src/ibattle.h: new users don't override the host's ally, color, handicap, etc 2009-02-10 Andrea Piras * src/battle.cpp, src/battle.h, src/ibattle.cpp, src/ibattle.h, src/mapctrl.cpp, src/replay/replaylist.cpp, src/server.h, src/serverevents.cpp, src/spring.cpp, src/tasserver.cpp, src/tasserver.h, src/ui.h, src/user.cpp, src/user.h: experimental support to send/recieve user positions on the server 2009-02-10 Andrea Piras * src/mapctrl.cpp, src/mapctrl.h: use enums, not constant ints 2009-02-10 Andrea Piras * src/mapctrl.cpp: fixed function naming wtf 2009-02-10 Andrea Piras * src/mapctrl.cpp: forgot to commit a rename 2009-02-10 Andrea Piras * src/mapctrl.cpp, src/mapctrl.h: renamed function & removed useless code 2009-02-10 Andrea Piras * : commit 12072cf0aaeb0815e6865ec11798b15db604c391 Author: Andrea Piras Date: Tue Feb 10 16:02:56 2009 +0100 2009-02-10 Andrea Piras * : commit e5df69bdfb778383069928d7410852d0458e13e0 Author: Andrea Piras Date: Tue Feb 10 15:37:07 2009 +0100 2009-02-10 Andrea Piras * : commit fd80b18c254218b65fc1f3816c068fe6d72df822 Author: Andrea Piras Date: Tue Feb 10 15:24:16 2009 +0100 2009-02-10 Andrea Piras * src/springunitsync.cpp: now modoptions handle newlines gracefully rather than stripping them 2009-02-10 Rene Milk * src/battleroommmoptionstab.cpp: move tip window above cursor 2009-02-10 Rene Milk * src/battleroommmoptionstab.cpp: now using flat button Signed-off-by: Rene Milk 2009-02-10 Rene Milk * src/battleroommmoptionstab.cpp: use tipwindow instead of messagebox 2009-02-10 Rene Milk * src/battleroommmoptionstab.cpp: fix layout a little 2009-02-10 Rene Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h: remove button on reload 2009-02-10 Rene Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h: new mapping works 2009-02-10 Rene Milk * src/battleroommmoptionstab.cpp: bleh mapping Ids to ifo doesn't work; ids aren't unique 2009-02-10 Rene Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h: use map for info strings (so itfunctionality won#t be affected by tooltip setting) 2009-02-10 Rene Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h: proof of concept impl 2009-02-10 Rene Milk * src/updater/updater.cpp: more cleanup 2009-02-10 Rene Milk * src/updater/updater.cpp: fix locale copy error 2009-02-10 Rene Milk * src/updater/updater.cpp: remove debug code 2009-02-10 Rene Milk * src/updater/exedownloader.cpp, src/updater/updater.cpp, src/updater/updater.h: fixes subdir extraction / copying locale dir 2009-02-09 Andrea Piras * src/ibattle.cpp: clear start rects when leaving a battle 2009-02-09 Rene Milk * src/utils.cpp, src/utils.h: adds copydir function and re-organizes includes 2009-02-09 Rene Milk * src/lobbyoptionstab.cpp, src/lobbyoptionstab.h: remove the lang selector from optionstab 2009-02-08 Rene Milk * src/springlobbyapp.cpp: locale working on win 2009-02-08 Andrea Piras * src/ui.cpp: enable sorting while ingame too 2009-02-07 Rene Milk * tools/buildbot-add-locale-win-zip.sh: fix path error in new scipt 2009-02-07 Rene Milk * tools/buildbot-add-locale-win-zip.sh: addded new bbot script 2009-02-07 Rene Milk * configure.ac.m4: go back to win2k build flag 2009-02-07 Rene Milk * : commit a223d37786b8b187860ca733d2b2c25cd9b36461 Author: Rene Milk Date: Sat Feb 7 17:00:56 2009 +0100 2009-02-07 Andrea Piras * src/springlobbyapp.cpp: fixed segfault on cancel on locale select 2009-02-07 Rene Milk * src/springlobbyapp.cpp: fix freeze on exit 2009-02-07 Rene Milk * src/Helper/wxTranslationHelper.cpp, src/springlobbyapp.cpp: workaround for locale lookup path on linux 2009-02-07 Rene Milk * : commit ddc01781e70b09179cd2f45101e6314a37b8ca32 Author: Rene Milk Date: Sat Feb 7 03:59:23 2009 +0100 2009-02-07 Rene Milk * ABOUT-NLS, ChangeLog, configure.ac.m4, m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/intdiv0.m4, m4/intmax.m4, m4/inttypes-pri.m4, m4/inttypes_h.m4, m4/lcmessage.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/longlong.m4, m4/nls.m4, m4/po.m4, m4/printf-posix.m4, m4/progtest.m4, m4/size_max.m4, m4/stdint_h.m4, m4/uintmax_t.m4, m4/wchar_t.m4, m4/wint_t.m4, m4/xsize.m4, po/ChangeLog, po/Makefile.in.in: - fixes gettext not found on my box - set req. gettext version to 0.17 - ran gettextize in top dir - that updated m4 macros 2009-02-06 Rene Milk * src/settings.h: fix merge error 2009-02-06 Andrea Piras * src/autohost.cpp, src/battleroomtab.cpp, src/hostbattledialog.cpp, src/serverevents.cpp: removed player limit checks 2009-02-06 Rene Milk * : commit 7d6885878a364d5ff41d8d5118a5576d3cf421f8 Merge: e337527 d1bd8b6 Author: Rene Milk Date: Fri Feb 6 02:00:41 2009 +0100 2009-02-05 Andrea Piras * src/battle.cpp, src/hostbattledialog.cpp, src/tasserver.cpp, src/user.cpp, src/user.h: hopefully fixed rank problems for good 2009-02-05 Andrea Piras * src/iconimagelist.cpp, src/tasserver.cpp: server ranks start by 0, not 1 2009-02-05 Andrea Piras * src/hostbattledialog.cpp, src/iconimagelist.cpp, src/serverevents.cpp: fixed minrank detection 2009-02-04 Rene Milk * src/mapselectdialog.cpp, src/mapselectdialog.h, src/settings.cpp, src/settings.h: remember filter radio choice too 2009-02-04 Andrea Piras * src/settings.cpp: better default color for join/part 2009-02-04 Andrea Piras * src/settings.cpp: create defaults when reading values & they aren't present 2009-02-04 Rene Milk * : commit ad274b3a79cbb301e1a46f5b4f5d462253a5dc72 Author: Tobi Vollebregt Date: Wed Feb 4 22:07:36 2009 +0100 2009-02-04 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h, src/mapselectdialog.cpp, src/mapselectdialog.h: mapsel: Fixed applying sort order as early as in OnInit. For this, MapGridCtrl raises a LoadingCompletedEvt so that MapSelectDialog can re-issue UpdateSortAndFilter(). 2009-02-04 Rene Milk * src/mapselectdialog.cpp, src/mapselectdialog.h: - remember maspel dialog size - make dtor wxsmith compatible 2009-02-04 Rene Milk * src/mapselectdialog.cpp: move setting the labels on sort direction buttons to OnInit 2009-02-04 Rene Milk * src/mapselectdialog.cpp, src/settings.cpp, src/settings.h: remembers direction and seleced key 2009-02-04 Rene Milk * : commit 4fd139a318416db561bc7ec7092d0efcb67e421b Author: Andrea Piras Date: Wed Feb 4 16:34:18 2009 +0100 2009-02-04 Andrea Piras * src/chatpanel.cpp: show multiple chained newlines in topics 2009-02-02 Andrea Piras * src/settings.cpp, src/settings.h: fixed windows build 2009-02-02 Andrea Piras * src/springlobbyapp.cpp: fixed typo >_> 2009-02-02 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: fixed some bool checks 2009-02-02 Andrea Piras * src/settings++/se_utils.cpp, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/utils.cpp, src/utils.h: fixed importing of default/global config 2009-02-01 Rene Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/singleplayerbattle.cpp: fixes MP too 2009-02-01 Rene Milk * springlobby.cbp, src/ibattle.cpp, src/settings.cpp, src/singleplayerbattle.cpp: fixes preset loading in SP 2009-02-01 Andrea Piras * src/tasserver.cpp: remove automatic find ip aliases on server message 2009-02-01 Rene Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h: Signed-off-by: Rene Milk 2009-01-31 Collin J. Sutton * src/mapctrl.cpp, src/utils.h: Some minor readability improvements P.S. Yes, I do know some LISP. What makes you ask?? <_< >_> 2009-01-31 Collin J. Sutton * src/mapctrl.cpp, src/mapctrl.h, src/user.h: Started reworking some MapCtrl stuff for sanity, clarity 2009-01-31 Collin J. Sutton * : commit 3e0ffdbb17c478e3932b48ae3ba8d78a3fc69699 Author: Collin J. Sutton Date: Sat Jan 31 14:37:31 2009 -0800 2009-01-31 Rene Milk * : commit 877e40b7e8d21bfb608bc871533b543b62719af2 Author: Rene Milk Date: Sat Jan 31 19:00:58 2009 +0100 2009-01-31 Rene Milk * : commit 27700d05c80547dc999f11b97600d20e76addc39 Author: Rene Milk Date: Sat Jan 31 14:11:44 2009 +0100 2009-01-31 Rene Milk * src/chatoptionstab.cpp, src/lobbyoptionstab.cpp, src/springoptionstab.cpp: harmonize sizer spacing throughout option tabs 2009-01-31 Rene Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h: fix minor layout issue inmmoptionstab 2009-01-30 Andrea Piras * src/spring.cpp: even better layout of script.txt 2009-01-30 Andrea Piras * src/spring.cpp: improved slightly generated script.txt on readbility 2009-01-30 Andrea Piras * src/spring.cpp: fixed script generation troubles when there are spectators and there is no team0 2009-01-30 Andrea Piras * src/mapctrl.cpp: don't show spectators in startpos4 mode 2009-01-30 Andrea Piras * src/spring.cpp: fixed script generation for spectators in lone teams 2009-01-30 Andrea Piras * src/mapctrl.cpp: layout fix 2009-01-30 Andrea Piras * src/mapctrl.cpp: only draw one box per team in startpos4 mode 2009-01-30 Andrea Piras * src/ui.cpp: update minimap on startpos4 player status changes 2009-01-30 Andrea Piras * src/mapctrl.cpp: attempt to remove player info window expansion on hover in startpos 4 & MP ( locks pos if too close to edge ) 2009-01-30 Andrea Piras * src/battlemaptab.cpp: re-enabled startpos 4 in MP 2009-01-30 Andrea Piras * : commit 9be3bb0552ad2c52843ed732981257c75000bdd1 Merge: 7340e23 e9668f8 Author: Rene Milk Date: Fri Jan 30 19:18:18 2009 +0100 2009-01-30 Rene Milk * : commit a045dcae3168866b032a0ef56837196a13f9f1fa Merge: 2421dd4 e9668f8 Author: Rene Milk Date: Fri Jan 30 17:45:19 2009 +0100 2009-01-30 Rene Milk * : commit e9668f8e2026533316b7bc8b8887b47493ded0d5 Author: Andrea Piras Date: Fri Jan 30 16:33:15 2009 +0100 2009-01-30 Andrea Piras * : Merge commit 'insaneinside/master' Conflicts: src/tasserver.cpp 2009-01-29 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: removed Backup server, added Backup server 1 & Backup server 2 & Test server 2009-01-27 Rene Milk * configure.ac.m4: works now 2009-01-27 Rene Milk * configure.ac.m4: link iphlpapi in mingw builds 2009-01-27 Andrea Piras * src/socket.cpp: magically fixed now? 2009-01-27 Andrea Piras * src/socket.cpp: fixed mingw compiler error 2009-01-27 Andrea Piras * : commit 35a70219abb56a6756f7837a44cc873c3b4290b8 Author: Andrea Piras Date: Tue Jan 27 19:19:00 2009 +0100 2009-01-27 Andrea Piras * src/settings.cpp, src/springlobbyapp.cpp: only add sl & newbies autojoin if the lobby doesn't have a preset lif of channels to autojoin 2009-01-27 Andrea Piras * src/mapctrl.cpp: fixed second crash in SP masquerated by another one 2009-01-27 Andrea Piras * src/battle.cpp, src/battlelisttab.cpp, src/ibattle.cpp, src/ui.cpp: fixed crash on bot removal in SP 2009-01-27 Andrea Piras * src/socket.cpp: fixed moar socket stability in win ( horrible typo ) 2009-01-26 Tobi Vollebregt * src/mapgridctrl.cpp, src/settings.cpp, src/settings.h: mapsel: Added option "GUI/MapSelector/SelectionFollowsMouse" 2009-01-26 Tobi Vollebregt * src/ibattle.cpp: Don't queue new maps to prefetch when spring is running. 2009-01-26 Tobi Vollebregt * src/mapselectdialog.cpp: Focus filter text box when map selector is opened. 2009-01-25 Tobi Vollebregt * src/mapselectdialog.cpp, wxsmith/MapSelectDialog.wxs: Don't display a border around map opts list. 2009-01-25 Tobi Vollebregt * src/replay/replaytab.cpp: Fix parameter passing. 2009-01-25 Tobi Vollebregt * src/replay/replaylistctrl.h, src/replay/replaytab.h, src/settings.h: Fix Visual Studio compiler warnings. 2009-01-25 Tobi Vollebregt * src/aui/auiutils.h, src/autopointers.h, src/bimap.h, src/common/events.h, src/replay/replayfilter.h, src/replay/replaylistctrl.h, src/replay/replaylistfiltervalues.h, src/replay/replaytab.h, src/useractions.h: Fix incorrect newlines. 2009-01-25 Tobi Vollebregt * : commit 50bdf144ac4770fb3f99a7552ab8ac144ea6b7a7 Author: Tobi Vollebregt Date: Sun Jan 25 21:57:59 2009 +0100 2009-01-25 Tobi Vollebregt * src/mapselectdialog.cpp: Refresh mapgrid after changing displayed maps. 2009-01-25 Tobi Vollebregt * src/mapselectdialog.cpp: Metal scale -> Max metal (consistency) 2009-01-25 Tobi Vollebregt * Makefile.am: Missing headers.. 2009-01-25 Tobi Vollebregt * src/mapgridctrl.cpp: Fix: Clear pending fetches when cleared. 2009-01-25 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h: Added (compile time) option to make selection follow mouse. 2009-01-25 Tobi Vollebregt * src/mapselectdialog.cpp, wxsmith/MapSelectDialog.wxs: Fix: ensure wxStaticText has correct size. 2009-01-25 Tobi Vollebregt * src/mapgridctrl.cpp: Fix: Prefer loading visible maps first again.. 2009-01-25 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h: Removed tooltip for consistency across platforms. (and it's redundant now anyway) 2009-01-25 Tobi Vollebregt * src/mapselectdialog.cpp, src/mapselectdialog.h, wxsmith/MapSelectDialog.wxs: Added side panel with map details. 2009-01-25 Tobi Vollebregt * src/mapselectdialog.cpp, src/mapselectdialog.h, wxsmith/MapSelectDialog.wxs: Remove pointless complexity, now MapGridCtrl uses async GetMapEx. 2009-01-25 Tobi Vollebregt * src/mapgridctrl.cpp: Check the grid is in bounds whenever the size changes. 2009-01-25 Tobi Vollebregt * src/springunitsync.cpp: Raise event even after error, to preserve async start/finish symmetry. (This is important for e.g. MapGridCtrl, which holds a count of number of queued jobs...) 2009-01-25 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h: Limited number of mapinfo fetches queued at the same time. 2009-01-25 Tobi Vollebregt * src/springunitsync.cpp, src/springunitsync.h: Cache MapInfos in _GetMapInfoEx. 2009-01-25 Tobi Vollebregt * src/springunitsync.cpp, src/springunitsync.h: Cache result of sett().GetCachePath(). That method calls twice into susynclib, so it may block the main thread when it is called just when worker thread is performing a heavy unitsync operation (e.g. GetMinimap). The cache is invalidated when unitsync is reloaded. 2009-01-25 Tobi Vollebregt * src/iunitsync.h, src/mapctrl.cpp, src/mapgridctrl.cpp, src/mapgridctrl.h, src/springunitsync.cpp, src/springunitsync.h: Threaded SpringUnitSync::GetMapEx 2009-01-25 Tobi Vollebregt * springlobby.cbp: Fix Profile build target + enable optimizations in it. 2009-01-25 Rene Milk * : commit 09eeb9ec1dd0dc3749bfc3e1d5e31e1266549c73 Merge: 7dc2ee5 ea6774a Author: Tobi Vollebregt Date: Sun Jan 25 00:01:08 2009 +0100 2009-01-25 Tobi Vollebregt * : commit ea6774af0d3037d88d3a6c41ced1f4eb01cefd4a Author: Andrea Piras Date: Sat Jan 24 19:15:59 2009 +0100 2009-01-24 Andrea Piras * src/springlobbyapp.cpp: possibly fixed crash if unitsync wasn't initialized correctly 2009-01-24 Andrea Piras * src/springlobbyapp.cpp: possibly fixed crash if unitsync wasn't initialized correctly 2009-01-24 Andrea Piras * : commit e92b86b329312e5439fa33aeebd31b533282deac Merge: 74e390e fbc98be Author: Andrea Piras Date: Sat Jan 24 03:27:27 2009 +0100 2009-01-24 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: auto download of mod/map deps on download finished 2009-01-24 Andrea Piras * src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: fixed copypasta mess >_< 2009-01-24 Andrea Piras * src/iunitsync.h, src/mapctrl.cpp, src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.cpp, src/springunitsynclib.h: added functions to fetch map/mod deps from unitsync 2009-01-24 Rene Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.cpp, src/chatpanel.cpp, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/user.cpp, src/user.h: fix highlighting 2009-01-23 Rene Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.cpp, src/user.cpp, src/user.h: fix last post-merge issues 2009-01-23 Rene Milk * src/ibattle.h: re-add some missing funcs 2009-01-23 Rene Milk * : commit f7e4315a9c710e461a24331e0be1474ef1551cce Author: Tobi Vollebregt Date: Fri Jan 23 20:22:41 2009 +0100 2009-01-22 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h: catch paste event and convert \r & \r\n to \n there 2009-01-22 Andrea Piras * src/chatpanel.cpp: multiline paste should work for \r\n too now 2009-01-22 Andrea Piras * src/chatpanel.cpp: magically fixed multiline paste in win? 2009-01-22 Andrea Piras * src/springlobbyapp.cpp, src/tasserver.cpp: fixed version report new users hould autojoin #springlobby 2009-01-22 Andrea Piras * Makefile.am: should finally compile 2008-12-23 Rene Milk * Makefile.am, po/ar.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/fi.po, po/fr.po, po/it.po, po/pl.po, po/pt.po, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po, po/zh_CN.po: successful distcheck 2009-01-22 Andrea Piras * po/ru.po: Revert "possibly fixed russian translation" This reverts commit 160032fa7f7fdd70b689368ebe0de60a7a9b9554. 2009-01-22 Andrea Piras * po/ru.po: possibly fixed russian translation 2009-01-22 Andrea Piras * src/tasserver.cpp: fixed os detection in version report 2009-01-22 Andrea Piras * src/tasserver.cpp: fixed version autoreporting 2009-01-22 Andrea Piras * : commit de946e06f44a8922dc3c9eed09bafa1db889d11f Author: Andrea Piras Date: Thu Jan 22 01:40:31 2009 +0100 2009-01-22 Andrea Piras * src/springlobbyapp.cpp: moar fixes :/ 2009-01-22 Andrea Piras * src/springlobbyapp.cpp: fixed compile 2009-01-22 Andrea Piras * src/springlobbyapp.cpp: copy uikeys.txt for everyone, not just autocreated dirs 2009-01-22 Andrea Piras * : commit 3deff83ed50c0794067e69145eba4e7c9d94446e Author: Andrea Piras Date: Thu Jan 22 00:15:41 2009 +0100 2009-01-21 Rene Milk * : commit e688673cfaed34ecd3fdf004f8a3dbfb209a31b4 Author: Rene Milk Date: Wed Jan 21 21:18:58 2009 +0100 2009-01-21 Andrea Piras * src/tasserver.cpp: use same report string on all bots 2009-01-21 Andrea Piras * src/tasserver.cpp, src/utils.cpp: correctly report version to insanebot 2009-01-21 Andrea Piras * src/chatpanel.cpp, src/serverevents.cpp, src/settings.h, src/springlobbyapp.cpp, src/tasserver.cpp: removed hardcoded #springlobby version announcement removed hardcoded sl channel autojoin ( still added but can be removed now ) 2009-01-21 Andrea Piras * src/spring.cpp: use a unique number for bots & players 2009-01-21 Andrea Piras * src/torrentwrapper.cpp: hopefully fixed crash with libtorrent version < 0.14 2009-01-21 Andrea Piras * Makefile.am, po/ar.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/fi.po, po/fr.po, po/it.po, po/pl.po, po/pt.po, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po, po/zh_CN.po: Revert "successful distcheck" This reverts commit 6467ea042d90bdde0913630a29aa51e4d62526b1. 2009-01-21 Andrea Piras * Makefile.am: Revert "removed old file from libt section in makefile" This reverts commit 1bb4fbc7b83b6e022751c471cf420377d546a0a8. 2009-01-21 Andrea Piras * cmake/libtorrent.cmake: Revert "cmakes builds too" This reverts commit c3c29959fe1a80e55695d26fd97cfc2300ee7610. 2009-01-21 Andrea Piras * Makefile.am, src/libtorrent/asio/basic_raw_socket.hpp, src/libtorrent/asio/basic_serial_port.hpp, src/libtorrent/asio/basic_socket.hpp, src/libtorrent/asio/buffer.hpp, src/libtorrent/asio/buffers_iterator.hpp, src/libtorrent/asio/detail/deadline_timer_service.hpp, src/libtorrent/asio/detail/descriptor_ops.hpp, src/libtorrent/asio/detail/dev_poll_reactor.hpp, src/libtorrent/asio/detail/epoll_reactor.hpp, src/libtorrent/asio/detail/handler_base_from_member.hpp, src/libtorrent/asio/detail/handler_queue.hpp, src/libtorrent/asio/detail/hash_map.hpp, src/libtorrent/asio/detail/indirect_handler_queue.hpp, src/libtorrent/asio/detail/kqueue_reactor.hpp, src/libtorrent/asio/detail/null_thread.hpp, src/libtorrent/asio/detail/old_win_sdk_compat.hpp, src/libtorrent/asio/detail/posix_thread.hpp, src/libtorrent/asio/detail/reactive_descriptor_service.hpp, src/libtorrent/asio/detail/reactive_serial_port_service.hpp, src/libtorrent/asio/detail/reactive_socket_service.hpp, src/libtorrent/asio/detail/reactor_op_queue.hpp, src/libtorrent/asio/detail/select_reactor.hpp, src/libtorrent/asio/detail/socket_types.hpp, src/libtorrent/asio/detail/strand_service.hpp, src/libtorrent/asio/detail/task_io_service.hpp, src/libtorrent/asio/detail/task_io_service_2lock.hpp, src/libtorrent/asio/detail/timer_queue.hpp, src/libtorrent/asio/detail/timer_queue_base.hpp, src/libtorrent/asio/detail/win_iocp_handle_service.hpp, src/libtorrent/asio/detail/win_iocp_io_service.hpp, src/libtorrent/asio/detail/win_iocp_serial_port_service.hpp, src/libtorrent/asio/detail/win_iocp_socket_service.hpp, src/libtorrent/asio/detail/win_thread.hpp, src/libtorrent/asio/detail/wince_thread.hpp, src/libtorrent/asio/detail/wrapped_handler.hpp, src/libtorrent/asio/handler_alloc_hook.hpp, src/libtorrent/asio/impl/read_at.ipp, src/libtorrent/asio/impl/read_until.ipp, src/libtorrent/asio/impl/serial_port_base.ipp, src/libtorrent/asio/impl/write_at.ipp, src/libtorrent/asio/io_service.hpp, src/libtorrent/asio/ip/icmp.hpp, src/libtorrent/asio/ip/resolver_query_base.hpp, src/libtorrent/asio/local/basic_endpoint.hpp, src/libtorrent/asio/raw_socket_service.hpp, src/libtorrent/asio/read.hpp, src/libtorrent/asio/read_at.hpp, src/libtorrent/asio/read_until.hpp, src/libtorrent/asio/serial_port.hpp, src/libtorrent/asio/serial_port_base.hpp, src/libtorrent/asio/serial_port_service.hpp, src/libtorrent/asio/ssl/basic_context.hpp, src/libtorrent/asio/ssl/context_base.hpp, src/libtorrent/asio/ssl/context_service.hpp, src/libtorrent/asio/ssl/detail/openssl_context_service.hpp, src/libtorrent/asio/ssl/detail/openssl_init.hpp, src/libtorrent/asio/ssl/detail/openssl_operation.hpp, src/libtorrent/asio/ssl/detail/openssl_types.hpp, src/libtorrent/asio/ssl/stream_base.hpp, src/libtorrent/asio/thread.hpp, src/libtorrent/asio/version.hpp, src/libtorrent/asio/windows/basic_random_access_handle.hpp, src/libtorrent/asio/windows/random_access_handle.hpp, src/libtorrent/asio/windows/random_access_handle_service.hpp, src/libtorrent/asio/write.hpp, src/libtorrent/asio/write_at.hpp, src/libtorrent/include/libtorrent/GeoIP.h, src/libtorrent/include/libtorrent/alert.hpp, src/libtorrent/include/libtorrent/alert_types.hpp, src/libtorrent/include/libtorrent/asio.hpp, src/libtorrent/include/libtorrent/assert.hpp, src/libtorrent/include/libtorrent/aux_/session_impl.hpp, src/libtorrent/include/libtorrent/bandwidth_manager.hpp, src/libtorrent/include/libtorrent/bencode.hpp, src/libtorrent/include/libtorrent/bitfield.hpp, src/libtorrent/include/libtorrent/broadcast_socket.hpp, src/libtorrent/include/libtorrent/bt_peer_connection.hpp, src/libtorrent/include/libtorrent/buffer.hpp, src/libtorrent/include/libtorrent/chained_buffer.hpp, src/libtorrent/include/libtorrent/config.hpp, src/libtorrent/include/libtorrent/connection_queue.hpp, src/libtorrent/include/libtorrent/create_torrent.hpp, src/libtorrent/include/libtorrent/debug.hpp, src/libtorrent/include/libtorrent/disk_buffer_holder.hpp, src/libtorrent/include/libtorrent/disk_io_thread.hpp, src/libtorrent/include/libtorrent/entry.hpp, src/libtorrent/include/libtorrent/enum_net.hpp, src/libtorrent/include/libtorrent/error_code.hpp, src/libtorrent/include/libtorrent/escape_string.hpp, src/libtorrent/include/libtorrent/extensions.hpp, src/libtorrent/include/libtorrent/extensions/smart_ban.hpp, src/libtorrent/include/libtorrent/extensions/ut_metadata.hpp, src/libtorrent/include/libtorrent/file.hpp, src/libtorrent/include/libtorrent/file_pool.hpp, src/libtorrent/include/libtorrent/file_storage.hpp, src/libtorrent/include/libtorrent/gzip.hpp, src/libtorrent/include/libtorrent/hasher.hpp, src/libtorrent/include/libtorrent/http_connection.hpp, src/libtorrent/include/libtorrent/http_parser.hpp, src/libtorrent/include/libtorrent/http_stream.hpp, src/libtorrent/include/libtorrent/http_tracker_connection.hpp, src/libtorrent/include/libtorrent/instantiate_connection.hpp, src/libtorrent/include/libtorrent/intrusive_ptr_base.hpp, src/libtorrent/include/libtorrent/invariant_check.hpp, src/libtorrent/include/libtorrent/kademlia/closest_nodes.hpp, src/libtorrent/include/libtorrent/kademlia/dht_tracker.hpp, src/libtorrent/include/libtorrent/kademlia/find_data.hpp, src/libtorrent/include/libtorrent/kademlia/msg.hpp, src/libtorrent/include/libtorrent/kademlia/node.hpp, src/libtorrent/include/libtorrent/kademlia/node_entry.hpp, src/libtorrent/include/libtorrent/kademlia/observer.hpp, src/libtorrent/include/libtorrent/kademlia/packet_iterator.hpp, src/libtorrent/include/libtorrent/kademlia/routing_table.hpp, src/libtorrent/include/libtorrent/kademlia/rpc_manager.hpp, src/libtorrent/include/libtorrent/lazy_entry.hpp, src/libtorrent/include/libtorrent/lsd.hpp, src/libtorrent/include/libtorrent/magnet_uri.hpp, src/libtorrent/include/libtorrent/natpmp.hpp, src/libtorrent/include/libtorrent/parse_url.hpp, src/libtorrent/include/libtorrent/pch.hpp, src/libtorrent/include/libtorrent/pe_crypto.hpp, src/libtorrent/include/libtorrent/peer_connection.hpp, src/libtorrent/include/libtorrent/peer_id.hpp, src/libtorrent/include/libtorrent/peer_info.hpp, src/libtorrent/include/libtorrent/piece_picker.hpp, src/libtorrent/include/libtorrent/policy.hpp, src/libtorrent/include/libtorrent/proxy_base.hpp, src/libtorrent/include/libtorrent/session.hpp, src/libtorrent/include/libtorrent/session_settings.hpp, src/libtorrent/include/libtorrent/session_status.hpp, src/libtorrent/include/libtorrent/socket.hpp, src/libtorrent/include/libtorrent/socks4_stream.hpp, src/libtorrent/include/libtorrent/socks5_stream.hpp, src/libtorrent/include/libtorrent/ssl_stream.hpp, src/libtorrent/include/libtorrent/stat.hpp, src/libtorrent/include/libtorrent/storage.hpp, src/libtorrent/include/libtorrent/time.hpp, src/libtorrent/include/libtorrent/torrent.hpp, src/libtorrent/include/libtorrent/torrent_handle.hpp, src/libtorrent/include/libtorrent/torrent_info.hpp, src/libtorrent/include/libtorrent/tracker_manager.hpp, src/libtorrent/include/libtorrent/udp_socket.hpp, src/libtorrent/include/libtorrent/udp_tracker_connection.hpp, src/libtorrent/include/libtorrent/upnp.hpp, src/libtorrent/include/libtorrent/variant_stream.hpp, src/libtorrent/include/libtorrent/version.hpp, src/libtorrent/include/libtorrent/web_peer_connection.hpp, src/libtorrent/src/GeoIP.c, src/libtorrent/src/alert.cpp, src/libtorrent/src/assert.cpp, src/libtorrent/src/broadcast_socket.cpp, src/libtorrent/src/bt_peer_connection.cpp, src/libtorrent/src/connection_queue.cpp, src/libtorrent/src/create_torrent.cpp, src/libtorrent/src/disk_buffer_holder.cpp, src/libtorrent/src/disk_io_thread.cpp, src/libtorrent/src/entry.cpp, src/libtorrent/src/enum_net.cpp, src/libtorrent/src/error_code.cpp, src/libtorrent/src/escape_string.cpp, src/libtorrent/src/file.cpp, src/libtorrent/src/file_old.cpp, src/libtorrent/src/file_pool.cpp, src/libtorrent/src/file_storage.cpp, src/libtorrent/src/gzip.cpp, src/libtorrent/src/http_connection.cpp, src/libtorrent/src/http_parser.cpp, src/libtorrent/src/http_stream.cpp, src/libtorrent/src/http_tracker_connection.cpp, src/libtorrent/src/identify_client.cpp, src/libtorrent/src/instantiate_connection.cpp, src/libtorrent/src/kademlia/closest_nodes.cpp, src/libtorrent/src/kademlia/dht_tracker.cpp, src/libtorrent/src/kademlia/find_data.cpp, src/libtorrent/src/kademlia/node.cpp, src/libtorrent/src/kademlia/refresh.cpp, src/libtorrent/src/kademlia/routing_table.cpp, src/libtorrent/src/kademlia/rpc_manager.cpp, src/libtorrent/src/kademlia/traversal_algorithm.cpp, src/libtorrent/src/lazy_bdecode.cpp, src/libtorrent/src/logger.cpp, src/libtorrent/src/lsd.cpp, src/libtorrent/src/magnet_uri.cpp, src/libtorrent/src/metadata_transfer.cpp, src/libtorrent/src/natpmp.cpp, src/libtorrent/src/parse_url.cpp, src/libtorrent/src/pch.cpp, src/libtorrent/src/pe_crypto.cpp, src/libtorrent/src/peer_connection.cpp, src/libtorrent/src/piece_picker.cpp, src/libtorrent/src/policy.cpp, src/libtorrent/src/session.cpp, src/libtorrent/src/session_impl.cpp, src/libtorrent/src/smart_ban.cpp, src/libtorrent/src/socks4_stream.cpp, src/libtorrent/src/socks5_stream.cpp, src/libtorrent/src/stat.cpp, src/libtorrent/src/storage.cpp, src/libtorrent/src/torrent.cpp, src/libtorrent/src/torrent_handle.cpp, src/libtorrent/src/torrent_info.cpp, src/libtorrent/src/tracker_manager.cpp, src/libtorrent/src/udp_socket.cpp, src/libtorrent/src/udp_tracker_connection.cpp, src/libtorrent/src/upnp.cpp, src/libtorrent/src/ut_metadata.cpp, src/libtorrent/src/ut_pex.cpp, src/libtorrent/src/web_peer_connection.cpp: Revert "new libt builds successfully on mingw with autotools" This reverts commit f1da22cc1f93cac4e781d1d5b9545e61d8468e03. 2009-01-21 Andrea Piras * src/aui/auiutils.h, src/autopointers.h, src/bimap.h, src/common/events.h, src/libtorrent/src/pe_crypto.cpp, src/replay/replayfilter.h, src/replay/replaylistctrl.h, src/replay/replaylistfiltervalues.h, src/replay/replaytab.h, src/useractions.h: Revert "Use LF, not CRLF." This reverts commit 686d839f0bc4faad3751fa4ec2f4cef49af5ccd0. 2009-01-21 Andrea Piras * src/spring.cpp, src/springunitsynclib.cpp: commit as-is hoijui's patch to fix script & AI fetch 2009-01-21 Andrea Piras * src/chatpanel.cpp: default to ip mute for right click menu 2009-01-20 Andrea Piras * src/addbotdialog.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/replay/replaylist.cpp, src/singleplayertab.cpp, src/spring.cpp, src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h, src/tasserver.cpp, src/user.cpp, src/user.h: hopefully got rid of all luaui legacy code and special cases 2009-01-20 Andrea Piras * src/replay/replaylist.cpp: keep replay/savegame bots separated from real users 2009-01-20 Andrea Piras * src/replay/replaylist.cpp: fixed compile 2009-01-20 Andrea Piras * src/battleroomtab.cpp, src/replay/replaylist.cpp, src/singleplayertab.cpp, src/spring.cpp, src/tasserver.cpp, src/user.cpp, src/user.h: now ifthe ai is luaai type is internally stored in a bool in battlestatus instead of checking for the "LuaAI:" string in the ailib 2009-01-20 Andrea Piras * : commit 3b4da0c52858606f56d91a447fa46d578a2060ea Author: Andrea Piras Date: Tue Jan 20 15:09:44 2009 +0100 2009-01-20 Andrea Piras * src/tdfcontainer.cpp: tdf parser is now case insensitive 2009-01-20 Andrea Piras * src/ibattle.h, src/replay/replaylist.cpp, src/replay/replaylist.h, src/spring.cpp, src/uiutils.cpp, src/uiutils.h: improved a lot replay parsing, now it should be almost be able to parse almost all fields ( bots still not parsed ) 2009-01-19 Collin J. Sutton * src/tasserver.cpp, src/ui.cpp: Move/replace /channels handler code into ui.cpp 2009-01-20 Rene Milk * src/ui.cpp: fixed channels command 2009-01-19 Collin J. Sutton * src/mainwindow.cpp, src/mainwindow.h, src/tasserver.cpp: Added /channels command; fixed signedness warnings in mainwindow.cpp 2009-01-19 Collin J. Sutton * cmake/config.h: Added headerguard, #undef VERSION before #define ... in cmake/config.h 2009-01-19 Andrea Piras * src/mainwindow.cpp: fixed downloads icon 2009-01-19 Rene Milk * : Merge commit 'buildbot/master' 2009-01-19 Andrea Piras * src/springlobbyapp.cpp: fixed buildbot 2009-01-19 Rene Milk * : Merge commit 'buildbot/master' 2009-01-19 Andrea Piras * src/mainwindow.cpp: fixed downloads icon 2009-01-19 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h: Display empty frame while loading minimap. 2009-01-19 Tobi Vollebregt * CMakeLists.txt, Makefile.am, SpringLobby.vcproj, springlobby.cbp, src/mapselectctrl.cpp, src/mapselectctrl.h: Removed unused file. 2009-01-19 Tobi Vollebregt * springlobby.cbp: Remove chmod +x, it causes empty local uncommit changes to show up in gitk. 2009-01-19 Tobi Vollebregt * : commit bb5853fbe7e386b90494defdab6bbbbf11da7fb8 Merge: e49aa07 c7dee80 Author: Tobi Vollebregt Date: Mon Jan 19 19:16:04 2009 +0100 2009-01-19 Rene Milk * : Merge commit 'braindamage/master' 2009-01-19 Andrea Piras * src/mainwindow.cpp: fixed switched replay icon with downloader 2009-01-19 Andrea Piras * : commit 5a476cba0def6c8550659235a70098943c86ccab Author: Andrea Piras Date: Mon Jan 19 03:27:07 2009 +0100 2009-01-19 Andrea Piras * src/offlinebattle.h, src/replay/replaylist.cpp, src/replay/replaylist.h, src/replay/replaytab.cpp: fixed replay crashing for good, thansk for the help tobi 2009-01-19 Tobi Vollebregt * : Merge commit 'bd/master' 2009-01-18 Andrea Piras * src/serverevents.cpp: fixed crash on user left battle 2009-01-18 Andrea Piras * src/ibattle.cpp, src/ibattle.h, src/offlinebattle.h, src/replay/replaylist.cpp, src/user.h: temp users created for offlinebattle were never stored anywhere -> crash on access attemp 2009-01-18 Andrea Piras * : commit 32b8c45b47f5123956d2e3291f8f55017943dc25 Author: Andrea Piras Date: Sun Jan 18 19:26:25 2009 +0100 2009-01-18 Andrea Piras * src/chatoptionstab.cpp: renamed chat preview 2009-01-18 Andrea Piras * src/settings.cpp: actually convert TAS Server name, don't skip it -.- 2009-01-18 Andrea Piras * src/settings.cpp, src/settings.h: added backup server to default serverlist 2009-01-18 Andrea Piras * src/settings.cpp: don't segfault on converting options >_> 2009-01-18 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: convert old server settings instead of just deleting them 2009-01-18 Andrea Piras * src/settings.h: renamed TAS Server to Official Server 2009-01-18 Andrea Piras * src/connectwindow.cpp, src/serverevents.cpp, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: rewritten server handling code Conflicts: src/settings.cpp 2009-01-18 Tobi Vollebregt * src/mapselectdialog.cpp, wxsmith/MapSelectDialog.wxs: Attempt to get maximize box on win. 2009-01-17 Andrea Piras * src/battleroomlistctrl.cpp: fixed error message 2009-01-17 Tobi Vollebregt * : commit 79e953b6940a521c8e9c0298dd337581479c762b Author: Tobi Vollebregt Date: Sat Jan 17 20:00:02 2009 +0100 2009-01-17 Tobi Vollebregt * : commit c95a49750202f38b347dea7ea897b00de2c962a6 Author: Tobi Vollebregt Date: Sat Jan 17 18:05:12 2009 +0100 2009-01-17 Andrea Piras * src/torrentwrapper.cpp: fixed crash on torrent download finished 2009-01-17 Andrea Piras * : commit 8c2a66cbec3b4f11f41545007746848a9ceec4b6 Author: Tobi Vollebregt Date: Sat Jan 17 17:57:39 2009 +0100 2009-01-17 Tobi Vollebregt * src/mapgridctrl.cpp: Fake OnLeftUp event when left button was released outside control. 2009-01-17 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h: Use wxBufferedPaintDC in MapGridCtrl to avoid flicker. 2009-01-17 Tobi Vollebregt * src/mapgridctrl.cpp: Always create wxPaintDC, to avoid paint message spam. 2009-01-17 Andrea Piras * src/spring.cpp: don't create void teams for spectators 2009-01-17 Tobi Vollebregt * src/mapselectdialog.cpp: Check return value of m_timer.Start(). 2009-01-17 Tobi Vollebregt * : commit 415ab6085dd86f7add192e3869967baac3168952 Author: Tobi Vollebregt Date: Sat Jan 17 14:36:15 2009 +0100 2009-01-17 Tobi Vollebregt * SpringLobby.vcproj: Removed maplistctrl from project. 2009-01-17 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: added springlobby.global.conf to windows to add default configs to SL 2009-01-16 Andrea Piras * src/utils.cpp: fix for AUX_VERSION inclusion 2009-01-16 Rene Milk * src/battle.h, src/channel/channel.h, src/channel/channelchooser.h, src/chatpanel.h, src/filelister/filelistctrl.h, src/globalsmanager.cpp, src/globalsmanager.h, src/serverevents.h, src/singleplayerbattle.h, src/tdfcontainer.cpp, src/tdfcontainer.h: - cleaned up includes - removed obsolete forward decl 2009-01-16 Tobi Vollebregt * src/mapgridctrl.cpp: Fix ambiguous reference to sqrt. 2009-01-16 Tobi Vollebregt * SpringLobby.vcproj: Update project file with mapgridctrl.{cpp,h} 2009-01-16 Tobi Vollebregt * : commit 7b527a2bc38e43d76c47632cadf9cdd40aeda5bb Author: Andrea Piras Date: Thu Jan 15 23:57:11 2009 +0100 2009-01-15 Tobi Vollebregt * SpringLobby.vcproj: Added missing files to project. 2009-01-15 Tobi Vollebregt * src/useractions.cpp: Fixed MSVC compile error (cast from double to enum not allowed) 2009-01-15 Rene Milk * CMakeLists.txt, configure.ac.m4: do not link unnecessary richtext lib anymore 2009-01-15 Rene Milk * : commit 0956c86679cd74eaf375b88e96d3934ddd5d7ee5 Author: Rene Milk Date: Thu Jan 15 23:27:54 2009 +0100 2009-01-15 Tobi Vollebregt * src/autobalancedialog.cpp: Remove redundant 'AutoBalanceDialog::' prefix. (doesn't compile in MSVC) 2009-01-15 Andrea Piras * src/battlemaptab.cpp: re-disabled chose before game in MP until it works stably 2009-01-15 Tobi Vollebregt * SpringLobby.vcproj: Removed missing files from project. 2009-01-15 Andrea Piras * src/mainwindow.cpp: temp disabled layout menu until it works 2009-01-15 Andrea Piras * src/addbotdialog.cpp, src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h: try to list the AIs from the CAIinterface unitsync wrapper 2009-01-15 Tobi Vollebregt * : commit 686d839f0bc4faad3751fa4ec2f4cef49af5ccd0 Author: Tobi Vollebregt Date: Thu Jan 15 23:08:03 2009 +0100 2009-01-15 Rene Milk * src/settings++/Defs.hpp, src/settings++/tab_abstract.h, src/settings++/tab_audio.cpp: - new UnitReplyVolume values: min 0, max 150, default 100 - provisions for scaling to/from of user input 2009-01-15 Andrea Piras * src/addbotdialog.cpp, src/addbotdialog.h, src/battle.cpp, src/battle.h, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/server.h, src/singleplayertab.cpp, src/spring.cpp, src/tasserver.cpp, src/tasserver.h, src/user.cpp, src/user.h: first attempt to add caiinterface to script.txt & network, missing options support & listing AI trough unitsync 2009-01-15 Andrea Piras * : commit f0507c97226c3413c35b85c43e5b78fb25328ce1 Author: Andrea Piras Date: Thu Jan 15 17:41:45 2009 +0100 2009-01-15 Andrea Piras * src/springunitsynclib.cpp, src/springunitsynclib.h: added caiinterface unitsync calls to retrieve ai infos 2009-01-15 Andrea Piras * src/mapctrl.cpp: some experiments with mapctrl to allow startpos4 in MP to work smoother 2009-01-15 Andrea Piras * src/ibattle.cpp, src/user.cpp: autoplace users if their position wasn't specified before 2009-01-15 Rene Milk * : commit ea6451cc45339eeb7283fe36597592544f3a4084 Author: Andrea Piras Date: Thu Jan 15 01:16:41 2009 +0100 2009-01-15 Andrea Piras * src/mainwindow.cpp, src/mainwindow.h, src/settings.cpp, src/settings.h: added load/save layout profiles 2009-01-14 Tobi Vollebregt * src/mapselectdialog.cpp: Attemp to fix loss of precision error on 64 bit systems. 2009-01-14 Tobi Vollebregt * : commit 6866976ff889c89292aa9025d63a2738505ba468 Merge: 899bbc5 66acd9d Author: Tobi Vollebregt Date: Wed Jan 14 21:02:52 2009 +0100 2009-01-14 Andrea Piras * : commit 66acd9dfda3c6d05ba11fea97f4b876f5a564de5 Author: Rene Milk Date: Wed Jan 14 20:28:48 2009 +0100 2009-01-14 Rene Milk * src/replay/replaylist.h: fix cmake build path issue 2009-01-14 Rene Milk * : Merge commit 'koshi/master' 2009-01-14 Andrea Piras * : commit 06093a294f616b2623ade2100c5845d2cb3f9c3f Author: Andrea Piras Date: Wed Jan 14 19:29:41 2009 +0100 2009-01-14 Andrea Piras * src/battleroomlistctrl.cpp, src/iconimagelist.cpp, src/iconimagelist.h: even more clear icon pick 2009-01-14 Rene Milk * src/user.cpp: fix bots not placed on startpos in SP 2009-01-14 Andrea Piras * src/battleroomlistctrl.cpp: better handling of icons in battleroomlistctrl 2009-01-14 Andrea Piras * src/spring.cpp: don't write useless infos in script.txt when not being host 2009-01-14 Andrea Piras * src/server.h, src/tasserver.cpp, src/tasserver.h, src/user.cpp: don't forget it's an AI on status change 2009-01-14 Rene Milk * : commit 7b2a768df042832e511cb15dcada89b4c41579c8 Merge: 05c8f26 fb68d50 Author: Rene Milk Date: Wed Jan 14 18:55:46 2009 +0100 2009-01-14 Andrea Piras * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h: now bot changes get shown in battleroom 2009-01-14 Andrea Piras * src/battleroomtab.cpp, src/singleplayerbattle.cpp: use reference 2009-01-13 Andrea Piras * src/spring.cpp: use reference not copy 2009-01-13 Andrea Piras * src/ibattle.cpp: workaround to not invalidate pointers/iterators when adding elements until a more proper fix is added 2009-01-13 Rene Milk * src/springunitsynclib.cpp: fix compile issue with missing std header/namespace 2009-01-13 Rene Milk * src/battle.cpp, src/ibattle.cpp, src/ibattle.h: implement the functionality of unsetting mod in battle ctor if Self was in that battle w/o making it segfault 2009-01-13 Tobi Vollebregt * tools/test-susynclib.awk: func is a keyword in gawk (not in mawk) 2009-01-13 Rene Milk * : commit e1a4d2fa009a7965b57eb2febe10f1d97e3977e2 Author: Rene Milk Date: Tue Jan 13 22:31:07 2009 +0100 2009-01-13 Tobi Vollebregt * tools/test-susynclib.awk: func is a keyword in gawk (not in mawk) 2009-01-10 Rene Milk * springlobby.cbp: added -Wno-strict-aliasing to c::b target in order to get rid of wxWdiegts warnings (same setting is used in autotools compile) 2009-01-13 Rene Milk * : commit 0fcbbf711076e419f56553d5c90807ee858c0b27 Author: Andrea Piras Date: Tue Jan 13 17:02:08 2009 +0100 2009-01-13 Andrea Piras * src/spring.cpp: fixed script generation, not very elegant but works 2009-01-13 Andrea Piras * : commit 502bef969907d033b31483f52fd4630061d5c7ca Author: Andrea Piras Date: Tue Jan 13 01:54:24 2009 +0100 2009-01-13 Rene Milk * src/settings++/Defs.hpp: fixed UnitReplySoundVolume ---> UnitReplyVolume in springsettings 2009-01-12 Andrea Piras * src/spring.cpp: actually remove the config flags >_> 2009-01-10 Rene Milk * tools/upload-temp-win-build.sh: hopefully fix temp upload again 2009-01-12 Andrea Piras * src/spring.cpp: temp commented settings path in windows 2009-01-12 Tobi Vollebregt * : Merge commit 'bd/master' 2009-01-12 Andrea Piras * src/springlobbyapp.cpp: don't append ; to highlight list if it's empty or ends with ; 2009-01-12 Andrea Piras * : commit 3d3545cfef3672e2bb51da3576ccffdd72fc1152 Merge: 6d1132a f2d26f7 Author: Andrea Piras Date: Mon Jan 12 20:40:13 2009 +0100 2009-01-12 Andrea Piras * src/singleplayerbattle.cpp: fixed so it doesn't use a function which source ui() in a ctor ( was violating initialization order ) 2009-01-12 Andrea Piras * src/user.h: default battlestatus should NOT be spectator 2009-01-12 Andrea Piras * src/battle.cpp, src/battleroomtab.cpp, src/ibattle.cpp, src/ibattle.h, src/singleplayerbattle.cpp, src/singleplayertab.cpp: fixed GetFreeColour and now 2009-01-12 Andrea Piras * src/battleroomlistctrl.cpp: fixed highlight not working 2009-01-12 Andrea Piras * src/battle.cpp, src/ibattle.cpp: improvements on bot leaving battle 2009-01-12 Andrea Piras * : commit f2d26f7c4f96e3c085f63910105f4665603f56b0 Author: Andrea Piras Date: Mon Jan 12 18:46:48 2009 +0100 2009-01-12 Andrea Piras * src/ibattle.cpp, src/serverevents.cpp: removed conflicting check 2009-01-12 Andrea Piras * src/serverevents.cpp: fixed my battlestatus not being updated properly 2009-01-12 Andrea Piras * src/battleroomtab.cpp: use correct functions in battleroomtab 2009-01-12 Andrea Piras * src/tasserver.cpp: better structure for if checks in force events in server 2009-01-12 Andrea Piras * src/battle.cpp, src/battleroomtab.cpp, src/battleroomtab.h, src/serverevents.cpp, src/ui.cpp, src/ui.h: removed needless code duplication 2009-01-12 Andrea Piras * src/battleroomlistctrl.cpp: use correct icon for bot 2009-01-12 Andrea Piras * src/battleroomlistctrl.cpp: not's show cpu for bots in battleroom 2009-01-12 Andrea Piras * src/ibattle.cpp: don't crash on add bot >_> 2009-01-12 Andrea Piras * src/user.cpp: use IsEmpty, empty is deprecated 2009-01-12 Andrea Piras * src/user.cpp, src/user.h: update owner & ailib when updating battlestatus 2009-01-12 Andrea Piras * src/ibattle.cpp, src/ibattle.h, src/serverevents.cpp, src/serverevents.h, src/singleplayertab.cpp, src/tasserver.cpp: onbotadded now calls onuseradded and only takes name & battlestatus as argument 2009-01-11 Andrea Piras * : Merge commit 'koshi/settings_hotfix' 2009-01-11 Andrea Piras * src/chatpanel.cpp, src/settings.h, src/springlobbyapp.cpp: removed hardcoded nickname highlight, nicks gets added to highlight list for backwards compatibility 2009-01-11 Andrea Piras * : commit cc63bb4a7e130d0fef8517f92791f193b33b31da Author: Rene Milk Date: Sat Jan 10 23:49:46 2009 +0100 2009-01-10 Rene Milk * src/settings++/se_utils.cpp: meh, didn't actually try to compile before 2009-01-10 Rene Milk * src/settings++/se_utils.cpp: do not use forcedpath for settings file, even if portable 2009-01-10 Rene Milk * tools/upload-temp-win-build.sh: hopefully fix temp upload again 2009-01-10 Rene Milk * tools/upload-temp-win-build.sh: hopefully fix temp upload again 2009-01-10 Tobi Vollebregt * src/mapselectdialog.cpp: More logging. 2009-01-10 Rene Milk * springlobby.cbp: added -Wno-strict-aliasing to c::b target in order to get rid of wxWdiegts warnings (same setting is used in autotools compile) 2009-01-10 Tobi Vollebregt * : commit 432788e8519182265011825c4c5b9179fb602010 Merge: 8afecf0 1f1240f Author: Tobi Vollebregt Date: Sat Jan 10 14:10:04 2009 +0100 2009-01-10 Tobi Vollebregt * : Merge commit 'bd/master' 2009-01-09 Andrea Piras * src/settings.cpp: the section name is Servers not Server, don't reset default server if section key is existant 2009-01-09 Rene Milk * tools/upload-temp-win-build.sh: try to keep read perm for other when uploading 2009-01-09 Rene Milk * tools/upload-temp-win-build.sh: ssh config didn't take, diff approach now 2009-01-09 Rene Milk * tools/upload-temp-win-build.sh: trying to use diff scp setup 2009-01-09 Andrea Piras * src/settings++/se_utils.cpp, src/settings.cpp: fixed springsettings in windows ( forced portable mode was forcing it to use wrong config paths ) 2009-01-09 Andrea Piras * src/battle.cpp: fixes of typos in autobalance 2009-01-09 Rene Milk * tools/upload-temp-win-build.sh: try to keep read perm for other when uploading 2009-01-09 Rene Milk * tools/upload-temp-win-build.sh: ssh config didn't take, diff approach now 2009-01-09 Rene Milk * tools/upload-temp-win-build.sh: trying to use diff scp setup 2009-01-08 Tobi Vollebregt * src/mapgridctrl.cpp: Attempt to fix buildbot compile error. 2009-01-08 Tobi Vollebregt * src/mapselectdialog.cpp: Fix disabling of 'show recent maps' when there are no replays. 2009-01-08 Tobi Vollebregt * src/mapselectdialog.cpp: Don't crash when not online. 2009-01-08 Tobi Vollebregt * : commit 1f96ccf99d8752bf2f1dc717175eefb7bff18a7d Merge: 17783f1 185e332 Author: Tobi Vollebregt Date: Thu Jan 8 16:52:22 2009 +0100 2009-01-08 Tobi Vollebregt * : Merge commit 'koshi/master' 2009-01-08 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h, src/mapselectdialog.cpp, src/mapselectdialog.h, wxsmith/MapSelectDialog.wxs: Filtering on name/description/author. 2009-01-08 Tobi Vollebregt * src/mapselectdialog.cpp, src/mapselectdialog.h, wxsmith/MapSelectDialog.wxs: Show all maps / show recently played maps working. 2009-01-08 Tobi Vollebregt * src/mapgridctrl.cpp: Correct rounding. 2009-01-08 Rene Milk * src/ibattle.cpp, src/ibattle.h, src/ui.cpp: - added a function OnSelfLeft to IBattle maybe useful for clearing up variants (does UnsSetCurrentmod atm) - call this func on Ui::UserLEftBattle, should fix side not loaded properly issue after being kicked 2009-01-08 Tobi Vollebregt * src/mapgridctrl.cpp: Ignore GetMapEx errors. 2009-01-08 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h, src/mapselectdialog.cpp: MapSelectDialog puts maps into MapGridCtrl. (instead of MapGridCtrl loading maps by itself) 2009-01-08 Tobi Vollebregt * src/mapgridctrl.cpp: map.minimap is valid only in MapState_GotMinimap 2009-01-08 Tobi Vollebregt * src/mapgridctrl.cpp: Fix "Gdk-CRITICAL **: gdk_gc_set_foreground: assertion `color != NULL' failed" 2009-01-08 Tobi Vollebregt * src/battlemaptab.cpp, src/singleplayertab.cpp: Fix crash when clicking OK without having a map selected. 2009-01-08 Tobi Vollebregt * src/mapselectdialog.cpp, wxsmith/MapSelectDialog.wxs: Replace Apply button with (working) OK button. 2009-01-08 Tobi Vollebregt * src/mapgridctrl.cpp: Refresh when selection changes. 2009-01-08 Tobi Vollebregt * src/mapgridctrl.cpp: Show the current selection. 2009-01-07 Tobi Vollebregt * src/uiutils.cpp: Fix bug when expanding, center pixels where filled incorrectly. 2009-01-07 Tobi Vollebregt * src/mapgridctrl.cpp: Rounded corners supported on non-square minimaps too. 2009-01-07 Tobi Vollebregt * src/uiutils.cpp, src/uiutils.h: Added BorderInvariantResizeImage. Resizes image by removing/duplicating rows/columns in the center. 2009-01-07 Tobi Vollebregt * : commit 17783f1c1e0fbeb7530982fd1e993002b301053c Merge: e9f912d 0cf5bf1 Author: Tobi Vollebregt Date: Wed Jan 7 21:16:37 2009 +0100 2009-01-07 Tobi Vollebregt * : Merge commit 'bd/master' 2009-01-07 Andrea Piras * src/iconimagelist.cpp, src/mainoptionstab.cpp, src/mainwindow.cpp, src/mainwindow.h, src/mapctrl.cpp, src/uiutils.cpp, src/uiutils.h: don't memleak over icons, return reference, not pointer 2009-01-07 Tobi Vollebregt * src/uiutils.cpp, src/uiutils.h: Added option to not generate alpha channel. (wxImage does not seem to have any way to remove an alpha channel..) 2009-01-07 Tobi Vollebregt * src/uiutils.cpp: Fix compile warning & code style. 2009-01-07 Tobi Vollebregt * src/uiutils.cpp, src/uiutils.h: Added charArr2wxImage function. 2009-01-05 Tobi Vollebregt * src/uiutils.cpp: BlendImage now supports blending RGBA foreground over RGB background. (Previously both foreground and background needed to be RGBA.) 2009-01-07 Tobi Vollebregt * : Merge commit 'bd/master' 2009-01-07 Andrea Piras * src/springunitsynclib.cpp: fixed unitsync assert in a way it doesn't deadlocks libunitsync class 2009-01-07 Andrea Piras * : Merge commit 'tobi/master' 2009-01-07 Tobi Vollebregt * src/springunitsynclib.cpp: Reverting "fixed unitsync exception" because it takes unitsync lock twice. Revert "fixed unitsync exception" This reverts commit 82b84a87a33fd36e3ae1f45045c458e1fe38e17b. 2009-01-07 Tobi Vollebregt * src/springunitsynclib.cpp: Reverting "fixed unitsync exception" because it takes unitsync lock twice. Revert "typo" This reverts commit 87963fe46da5cf6c809befbf63a2f1f02db893ca. 2009-01-07 Tobi Vollebregt * : commit f8145ae5a096fb429dd2e65b2553f2b1b4a89e17 Author: Tobi Vollebregt Date: Wed Jan 7 13:49:37 2009 +0100 2009-01-07 Tobi Vollebregt * tools/test-susynclib.awk: Output filename/line numbers so IDE can jump to location. 2009-01-07 Tobi Vollebregt * springlobby.cbp: Added prebuild step to run tools/test-susynclib.awk (Prevents build if there are potential deadlocks.) 2009-01-06 Tobi Vollebregt * tools/test-susynclib.awk: Static code analysis test against simple deadlocks in susynclib. 2009-01-07 Tobi Vollebregt * src/springunitsynclib.cpp: UnSetCurrentMod() when unitsync is reloaded This fixes in-game desync because sides aren't available when a download finished while the user was waiting in the battleroom. (Similar to 153a40ba7ee6001a90c0ab5f224088dbdade9c1a) Conflicts: src/springunitsynclib.cpp 2008-12-18 Tobi Vollebregt * src/springunitsync.cpp: typo 2008-12-15 Tobi Vollebregt * src/springunitsync.cpp: Don't crash if _GetMapInfoEx throws an exception. 2008-12-14 Tobi Vollebregt * src/springunitsync.cpp, src/springunitsync.h: Remove unnecessary susynclib calls from GetFileCachePath. 2008-12-13 Tobi Vollebregt * src/filelister/filelistdialog.cpp: Include iunitsync, not springunitsync 2009-01-07 Tobi Vollebregt * src/springunitsynclib.cpp: Fix compile error and segmentation fault. Conflicts: src/springunitsync.cpp 2008-12-13 Tobi Vollebregt * src/springunitsynclib.cpp, src/springunitsynclib.h: Small tweaks 2008-12-13 Tobi Vollebregt * src/springunitsynclib.cpp, src/springunitsynclib.h: Removed Reload and Init (unused). 2008-12-10 Tobi Vollebregt * src/springunitsync.cpp: Use .clear() to clear STL containers, not .empty() 2008-12-10 Tobi Vollebregt * src/springunitsync.cpp: This is done by SpringUnitSyncLib already. 2008-12-10 Tobi Vollebregt * src/settings++/se_utils.cpp, src/settings.cpp, src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: Unitsync thread safety. In particular: * Removed {} in InitLib #define, so the scope of wxCriticalSectionLocker extends over entire block, instead of just the InitLib(...) statement. * Moved InitLib to springunitsynclib.cpp * Removed DoInit param from Load/Reload/ctor, loading but not initializing is not thread safe. * Moved assignments to m_loaded to the position where loading finishes or unloading starts, instead of halfway in between. * AssertUnitSyncOk calls unitsync inside the critical section now. * Added _SetCurrentMod, non locking version of SetCurrentMod, and use this in all the internal methods which already keep the lock. * Added GetSpringVersionList to be able to load all Spring versions from multiple unitsyncs in a single atomic transaction. (Otherwise bg thread might load some maps from other unitsyncs etc.) This method should probably be moved to SpringUnitSync. Note that still not everything is perfect; most of the locks in SpringUnitSyncLib are too fine grained: unitsync still maintains some state between calls to for example GetOption*, Archive methods, Parser methods, etc. 2009-01-07 Tobi Vollebregt * CMakeLists.txt: Added cmake prebuild step to run tools/test-susynclib.awk 2009-01-07 Tobi Vollebregt * tools/test-susynclib.awk: Output filename/line numbers so IDE can jump to location. 2009-01-07 Tobi Vollebregt * springlobby.cbp: Added prebuild step to run tools/test-susynclib.awk (Prevents build if there are potential deadlocks.) 2009-01-07 Tobi Vollebregt * : Merge commit 'koshi/master' 2009-01-06 Tobi Vollebregt * tools/test-susynclib.awk: Static code analysis test against simple deadlocks in susynclib. 2009-01-06 Andrea Piras * : Merge commit 'koshi/master' 2009-01-06 Rene Milk * src/ui.cpp: fix another side not loaded bug 2009-01-06 Rene Milk * src/battleroomtab.cpp: removed uneeded code 2009-01-06 Andrea Piras * src/battleroomtab.cpp, src/ibattle.cpp: push status updates trough the gui 2009-01-06 Rene Milk * src/battleroomtab.cpp: fixed almost ancient todo of making selection choices more flexibel 2009-01-06 Andrea Piras * src/battle.cpp, src/ibattle.cpp, src/ibattle.h, src/mapctrl.cpp, src/serverevents.cpp, src/singleplayerbattle.cpp: fixed actions not being applied on server / gui 2009-01-06 Andrea Piras * src/battleroomlistctrl.cpp: don't display ( ) with humans in battleroom 2009-01-06 Rene Milk * : commit f7a00b53fc808358a96366a43495c61c95275cfb Author: Andrea Piras Date: Tue Jan 6 01:17:44 2009 +0100 2009-01-06 Rene Milk * : commit d2916b6becf2c6df95d37677f5b17a89d5477ea7 Merge: 76049bc a0de600 Author: Andrea Piras Date: Tue Jan 6 01:09:48 2009 +0100 2009-01-06 Andrea Piras * src/singleplayerbattle.cpp: fixed startpostype in SP 2009-01-06 Andrea Piras * src/mapctrl.cpp, src/mapctrl.h: refactored mapctrl, now there is little to nothing difference between SP & MP 2009-01-06 Rene Milk * src/battle.cpp: temp fix 2009-01-05 Andrea Piras * src/mapctrl.cpp: fixed stickyness to mouse cursort of player icon in SP 2009-01-05 Andrea Piras * src/singleplayerbattle.cpp: don't crash on SP mod change 2009-01-05 Andrea Piras * src/battle.cpp, src/battle.h, src/ibattle.cpp, src/ibattle.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h: more decent me& in singleplayerbattle 2009-01-05 Rene Milk * src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp, src/nicklistctrl.h: fixed HL in nicklist 2009-01-05 Andrea Piras * src/spring.cpp, src/spring.h: unified SP & MP script generation, fixed some signed<->unsigned warnings 2009-01-05 Andrea Piras * src/ibattle.cpp, src/replay/replaylist.cpp: don't segfault on replay parse >_> 2009-01-05 Andrea Piras * src/spring.cpp: write unitsync name, not mod archive in script.txt 2009-01-05 Andrea Piras * src/ibattle.cpp, src/offlinebattle.h: ZOMG IT FINALLY LINKS 2009-01-05 Andrea Piras * src/user.h: fixed tons of warnings :p 2009-01-05 Andrea Piras * src/offlinebattle.h: forgot to commit a file 2009-01-05 Rene Milk * src/widgets/downloaddialog.cpp, src/widgets/downloadlistctrl.cpp, src/widgets/downloadpanel.cpp: Signed-off-by: Rene Milk 2009-01-05 Andrea Piras * src/battle.cpp, src/battle.h, src/ibattle.h, src/mapctrl.cpp, src/replay/replaylist.cpp, src/replay/replaylist.h, src/replay/replaytab.cpp, src/user.h: moved offlinebattle to be child of ibattle, removed more linker errors 2009-01-05 Rene Milk * src/battlelistctrl.cpp, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp: - implemented resetcolumn sizes - added moreinfo to colInfo 2009-01-05 Rene Milk * src/customvirtlistctrl.cpp: set coulmn width on insert 2009-01-05 Rene Milk * src/battlelistctrl.cpp, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp: - implemented resetcolumn sizes - added moreinfo to colInfo 2009-01-05 Andrea Piras * src/battle.cpp, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp, src/ibattle.cpp, src/ui.h: removed distinction in many places from bot to player 2009-01-05 Andrea Piras * src/battle.cpp, src/battle.h, src/ibattle.cpp, src/ibattle.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/singleplayertab.cpp: moar linker fixes 2009-01-05 Rene Milk * src/widgets/infopanel.cpp, src/widgets/infopanel.h: tokenize chglog into servermessage box 2009-01-05 Andrea Piras * src/battle.cpp, src/battle.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/ibattle.cpp, src/ibattle.h, src/mapctrl.cpp, src/mapctrl.h, src/serverevents.cpp, src/singleplayertab.cpp, src/spring.cpp: fixed some compile & linker errors 2009-01-05 Rene Milk * src/widgets/downloaddialog.cpp, src/widgets/downloaddialog.h, src/widgets/downloadpanel.cpp, src/widgets/infopanel.cpp, src/widgets/widget.cpp: fix window size remembernace 2009-01-05 Andrea Piras * : commit bfc213d1f2ac1b9720663843c2371014c15eb037 Merge: c3c543e d3751cd Author: Andrea Piras Date: Mon Jan 5 16:29:34 2009 +0100 2009-01-05 Rene Milk * src/widgets/downloadpanel.cpp, src/widgets/infopanel.cpp: moved to wxhtmlwindow 2009-01-05 Andrea Piras * src/springunitsynclib.cpp: typo 2009-01-05 Andrea Piras * src/springunitsynclib.cpp: fixed unitsync exception 2009-01-05 Rene Milk * src/customvirtlistctrl.cpp: set coulmn width on insert 2009-01-05 Rene Milk * src/widgets/infopanel.cpp, src/widgets/infopanel.h: fixed most of the layout issues 2009-01-04 Rene Milk * src/maintorrenttab.cpp, src/maintorrenttab.h, src/mainwindow.cpp, src/mainwindow.h: moved widgets dialog to torrentpanel 2009-01-04 Andrea Piras * : commit a33c14c5c333da15ed5d0c9a57537be23831f599 Merge: 657a3ab 628d317 Author: Andrea Piras Date: Sun Jan 4 20:56:45 2009 +0100 2009-01-04 Andrea Piras * src/serverevents.cpp, src/tasserver.cpp, src/ui.cpp: improved & fixed disconnect code, now it's run only once and a not modal popup message is shown 2009-01-04 Andrea Piras * src/tasserver.cpp: fixed relay host 2009-01-04 Rene Milk * src/widgets/infopanel.cpp: - implement view changelog - remove update button 2009-01-04 Rene Milk * src/widgets/infopanel.cpp, src/widgets/widget.cpp, src/widgets/widget.h: remove works 2009-01-04 Rene Milk * src/widgets/widget.cpp: create directories before DL 2009-01-04 Tobi Vollebregt * : Merge commit 'koshi/master' 2009-01-04 Rene Milk * tools/upload-temp-win-build.sh: zip exe before upload 2009-01-04 Rene Milk * src/widgets/infopanel.cpp, src/widgets/widget.cpp, src/widgets/widget.h: can install files if dir already present 2009-01-04 Tobi Vollebregt * : commit 2f32f23b4eabd4baf75ac1b5548c8003030aad7b Merge: 4fbbecf b6ea590 Author: Tobi Vollebregt Date: Sun Jan 4 12:06:12 2009 +0100 2009-01-04 Tobi Vollebregt * : Merge commit 'bd/master' 2009-01-04 Rene Milk * : commit 08d2bb775d34bf34cb0a9f316a620d9c22cfb4d1 Author: Rene Milk Date: Sun Jan 4 02:02:18 2009 +0100 2009-01-04 Rene Milk * src/springunitsync.cpp: changed mask for finding screenshots in VFS to *.* 2009-01-04 Rene Milk * : commit d0ea8130429d7f6d39ec4c51f25ddfaf645d4698 Author: Rene Milk Date: Sun Jan 4 00:23:46 2009 +0100 2009-01-03 Rene Milk * src/Helper/imageviewer.h: add default for title arg 2009-01-03 Rene Milk * src/Helper/imageviewer.h: add default for title arg 2009-01-03 Rene Milk * src/widgets/infopanel.cpp, src/widgets/infopanel.h, src/widgets/widget.cpp, src/widgets/widget.h: viewing screenshots works 2009-01-03 Tobi Vollebregt * src/battlemaptab.cpp, src/battlemaptab.h, src/mapselectdialog.h, src/singleplayertab.cpp: Browse button in BattleMapTab enabled. Simpler SetMap code using wxControlWithItems::FindString. 2009-01-03 Andrea Piras * : Merge commit 'buildbot/master' 2009-01-03 Rene Milk * src/widgets/downloadpanel.cpp: remove windows newlines too 2009-01-03 Rene Milk * src/mainwindow.cpp, src/mainwindow.h, src/widgets/downloadpanel.cpp, src/widgets/infopanel.cpp, src/widgets/infopanel.h: - menu item for LUA widgets downlaods - 2 step creation for info panel 2009-01-03 Rene Milk * src/widgets/downloadlistctrl.cpp, src/widgets/downloadlistctrl.h, src/widgets/downloadpanel.cpp, src/widgets/downloadpanel.h: added info panel beloew listctrl 2009-01-03 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/widgets/downloadlistctrl.cpp, src/widgets/downloadpanel.cpp, src/widgets/infodialog.cpp, src/widgets/infodialog.h: removed infodialog 2009-01-03 Rene Milk * src/widgets/downloadpanel.cpp, src/widgets/infodialog.cpp, src/widgets/infodialog.h, src/widgets/infopanel.cpp, src/widgets/infopanel.h, src/widgets/widget.cpp, src/widgets/widget.h: panel works almos in dialog 2009-01-03 Rene Milk * : commit a2bb3f752f2ddee58a10d1e6ddbaa1975f24b3a1 Author: Rene Milk Date: Sat Jan 3 16:04:13 2009 +0100 2009-01-03 Rene Milk * src/Helper/imageviewer.cpp, src/Helper/imageviewer.h, src/iunitsync.h, src/mainwindow.cpp, src/mainwindow.h, src/springunitsync.cpp, src/springunitsync.h: screenshots viewer working 2009-01-03 Tobi Vollebregt * src/springunitsynclib.cpp: UnSetCurrentMod() when unitsync is reloaded This fixes in-game desync because sides aren't available when a download finished while the user was waiting in the battleroom. (Similar to 153a40ba7ee6001a90c0ab5f224088dbdade9c1a) 2009-01-03 Tobi Vollebregt * : commit 5b4eff8256a7c7461b66cb354f0c85dc3619b98a Author: Rene Milk Date: Sat Jan 3 13:27:11 2009 +0100 2009-01-03 Rene Milk * src/Helper/imageviewer.cpp, src/Helper/imageviewer.h: not using custom jpeg handler works well enough it seems 2009-01-03 Rene Milk * src/chatpanel.cpp: added tizbac's bridgebot to IRC thingy in chatpanel 2009-01-02 Rene Milk * src/Helper/imageviewer.cpp, src/Helper/jpeghandler.cpp, src/Helper/jpeghandler.h, src/mainwindow.cpp: stuff 2008-12-31 Rene Milk * src/Helper/imageviewer.cpp, src/Helper/imageviewer.h, src/mainwindow.cpp: moved functionality from dialog to a new panel 2008-12-31 Rene Milk * src/Helper/imageviewer.cpp, src/Helper/imageviewer.h, src/mainwindow.cpp: successfully open dialog and display image 2008-12-31 Rene Milk * : commit e2699099034b0989ea897f1145ac212ff8f2a238 Author: Rene Milk Date: Wed Dec 31 15:06:52 2008 +0100 2008-12-31 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/Helper/imageviewer.cpp, src/Helper/imageviewer.h: new classes 2008-12-31 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/Helper/jpeghandler.cpp, src/Helper/jpeghandler.h: copied custom jpeghandler from other branch 2008-12-31 Rene Milk * src/widgets/downloadlistctrl.cpp, src/widgets/downloadlistctrl.h, src/widgets/downloadpanel.cpp, src/widgets/infopanel.cpp, src/widgets/widget.h: i has downloaded teh widgets images 2008-12-31 Rene Milk * : commit 0a92ee8a8bff6f4a75590669c022170191dce970 Author: Rene Milk Date: Wed Dec 31 01:56:59 2008 +0100 2008-12-31 Rene Milk * src/settings.h: bumped cachce version _again_ 2008-12-31 Rene Milk * : commit 57ddf177a819a7f624e2ac8f3a1f40d3c9090026 Author: Tobi Vollebregt Date: Wed Dec 10 11:57:01 2008 +0100 2008-12-30 Tobi Vollebregt * src/springunitsynclib.cpp: UnSetCurrentMod() when unitsync is reloaded This fixes in-game desync because sides aren't available when a download finished while the user was waiting in the battleroom. 2008-12-31 Rene Milk * configure.ac.m4, src/widgets/downloadpanel.h, src/widgets/infodialog.cpp, src/widgets/infodialog.h, src/widgets/infopanel.cpp, src/widgets/infopanel.h: some more new stuff 2008-12-31 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/widgets/infodialog.cpp, src/widgets/infodialog.h, src/widgets/infopanel.cpp, src/widgets/infopanel.h, src/widgets/widget.h: new classes 2008-12-30 Rene Milk * src/widgets/downloadlistctrl.cpp, src/widgets/downloadlistctrl.h, src/widgets/downloadpanel.cpp, src/widgets/downloadpanel.h, src/widgets/widget.h: populating list is working, except for issues with description content rendering 2008-12-10 Tobi Vollebregt * src/springunitsync.cpp: Use .clear() to clear STL containers, not .empty() 2008-12-30 Tobi Vollebregt * src/springunitsynclib.cpp: UnSetCurrentMod() when unitsync is reloaded This fixes in-game desync because sides aren't available when a download finished while the user was waiting in the battleroom. 2008-12-30 Rene Milk * : commit fa630a1d5da8e4c4dc424b5e56db5fc2ed3a855a Merge: 0a7528a e2a089a Author: Tobi Vollebregt Date: Tue Dec 30 21:22:18 2008 +0100 2008-12-30 Rene Milk * Makefile.am, configure.ac.m4, tools/buildbot-create-build-dirs.sh: new configure switches: --with-opt-level=0..3 --enable-debug 2008-12-30 Rene Milk * src/mainwindow.cpp, src/mainwindow.h, src/widgets/downloaddialog.cpp, src/widgets/downloaddialog.h, src/widgets/downloadlistctrl.cpp, src/widgets/downloadlistctrl.h, src/widgets/widget.h: display dialog with panel, no crash yet :) 2008-12-30 Rene Milk * : commit bc47ad070159d38f86284f5da7da1f2f157fdb64 Merge: a5a2f2d c09d172 Author: Rene Milk Date: Tue Dec 30 18:19:29 2008 +0100 2008-12-30 Rene Milk * tools/buildbot-create-build-dirs.sh: meh, escaping sucks 2008-12-30 Rene Milk * tools/buildbot-create-build-dirs.sh: speedup buildslave compile by 40% 2008-12-30 Rene Milk * src/widgets/downloadlistctrl.cpp, src/widgets/downloadpanel.cpp, src/widgets/downloadpanel.h: some code from wxwiki 2008-12-30 Rene Milk * : commit a5a2f2df9dc3d86084686043dbb36805e7483a63 Author: Rene Milk Date: Tue Dec 30 17:42:24 2008 +0100 2008-12-30 Rene Milk * : commit db012b0a93fbbd3c08caf5248bb38359ed2879dd Author: Rene Milk Date: Tue Dec 30 17:24:34 2008 +0100 2008-12-30 Rene Milk * src/customvirtlistctrl.h: remove obsolete file 2008-12-30 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/widgets/downloaddialog.cpp, src/widgets/downloaddialog.h, src/widgets/downloadlistctrl.cpp, src/widgets/downloadlistctrl.h, src/widgets/downloadpanel.cpp, src/widgets/downloadpanel.h, src/widgets/widget.cpp, src/widgets/widget.h: initial commit of new classes 2008-12-30 Rene Milk * : commit 46187e49c4d84f6ed9adf7d102bc8785894cad9e Author: Rene Milk Date: Tue Dec 30 14:54:20 2008 +0100 2008-12-30 Rene Milk * src/spring.cpp: fixes #684, wrong teamspeak command format 2008-12-29 Rene Milk * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: new cli param not working correctly 2008-12-29 Rene Milk * src/springlobbyapp.cpp, src/utils.cpp, src/utils.h: logging targets not quite working 2008-12-29 Tobi Vollebregt * src/mapselectdialog.cpp, src/mapselectdialog.h, wxsmith/MapSelectDialog.wxs: GUI for filtering. (no implementation) 2008-12-29 Tobi Vollebregt * src/mapgridctrl.cpp: Fix bug in hit test, it didn't take margin into account. 2008-12-29 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h: Continue fetching non-visible maps when all visible maps have been fetched. 2008-12-29 Tobi Vollebregt * src/mapselectdialog.cpp, src/mapselectdialog.h, wxsmith/MapSelectDialog.wxs: Double click closes dialog instead of single click. 2008-12-29 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h, src/mapselectdialog.cpp, src/mapselectdialog.h, wxsmith/MapSelectDialog.wxs: Sort direction can be reversed. 2008-12-29 Rene Milk * : commit 2421dd49ed771660214b83cd7e461d8c0ad15eb8 Merge: 03e1414 3b6666a Author: Rene Milk Date: Mon Dec 29 13:02:02 2008 +0100 2008-12-29 Rene Milk * : commit 579f80538ecb02312fe48cba895430d637ee7f66 Author: Tobi Vollebregt Date: Mon Dec 29 01:16:41 2008 +0100 2008-12-29 Andrea Piras * src/tasserver.cpp: fixed login message 2008-12-29 Tobi Vollebregt * src/mapgridctrl.cpp: Fix possible segfault when releasing left mouse button. 2008-12-29 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h, src/mapselectdialog.cpp: Added a number of possible easily available SortKeys. 2008-12-29 Rene Milk * : commit bcc9a2b49e5389aca93590f6741912711bf67cc0 Author: Tobi Vollebregt Date: Mon Dec 29 00:09:22 2008 +0100 2008-12-29 Tobi Vollebregt * src/mapgridctrl.cpp: Fix bug with hit detection for maps on N&W borders. 2008-12-29 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h: Better tooltip when not pointing at a map. 2008-12-28 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h, src/mapselectdialog.cpp: Fixed compile errors. (use UnitSyncAsyncOps) 2008-12-28 Andrea Piras * src/spring.cpp: compiles now 2008-12-28 Tobi Vollebregt * : commit 5bd8f599bf2e7f392287dd3be029dfce96da443b Merge: 8af205c 53c7b86 Author: Tobi Vollebregt Date: Sun Dec 28 22:18:21 2008 +0100 2008-12-28 Andrea Piras * : commit 76ac5897795468b79c2d736422e63227b789d566 Merge: 1a62c71 3b6666a Author: Andrea Piras Date: Sun Dec 28 21:41:17 2008 +0100 2008-12-28 Rene Milk * src/battle.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: unset modname from battle::leave 2008-12-28 Collin J. Sutton * src/springlobbyapp.cpp: Don't fail if any SpringData directories already exist 2008-12-28 Rene Milk * : commit d9f9297c3464507ac8254ab7076130d601195c8d Merge: 8da974f 0e76671 Author: Rene Milk Date: Sun Dec 28 21:03:21 2008 +0100 2008-12-28 Collin J. Sutton * : Merge commit 'BrainDamage/master' 2008-12-28 Andrea Piras * : commit 8a82c12dee6e6ea70d03ea4761f0911960c97b2c Author: Andrea Piras Date: Sun Dec 28 19:34:47 2008 +0100 2008-12-28 Andrea Piras * src/springunitsynclib.cpp: fixed mod logging on set 2008-12-28 Andrea Piras * src/springunitsynclib.cpp: fixed compile 2008-12-28 Andrea Piras * src/settings++/se_utils.cpp: fixed compile 2008-12-28 Andrea Piras * : commit 8c13f4b214b6d891b76b3b7578158f5a76138e09 Merge: 9387133 e1e5fec Author: Andrea Piras Date: Sun Dec 28 19:24:10 2008 +0100 2008-12-28 Andrea Piras * : commit 02e6e85c57e560e83d9a7280c67cc9ccab49cb64 Author: Andrea Piras Date: Sun Dec 28 19:16:49 2008 +0100 2008-12-28 Andrea Piras * src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/iconimagelist.cpp, src/iunitsync.h, src/mapctrl.cpp, src/spring.cpp, src/springunitsync.cpp, src/springunitsync.h, src/tasserver.cpp, src/unitsyncthread.cpp: less WTF cache pattern 2008-12-28 Andrea Piras * : commit 0e7667126966c2011e53c00a2a37ba5e31c4eb26 Author: Rene Milk Date: Sun Dec 28 18:14:11 2008 +0100 2008-12-28 Andrea Piras * : commit 59dc2ed91dbd86bcb4d6945f397e7bfd5efa48e9 Author: Rene Milk Date: Sun Dec 28 18:08:35 2008 +0100 2008-12-28 Andrea Piras * src/globalsmanager.cpp, src/globalsmanager.h: run source formatter on globals manager 2008-12-28 Andrea Piras * : commit d9a9543c275c47f82d3c00ad09e16f2aea912b08 Author: Rene Milk Date: Sun Dec 28 17:05:29 2008 +0100 2008-12-28 Andrea Piras * src/settings.cpp, src/springlobbyapp.cpp: osdir should be low prio when searching paths 2008-12-28 Andrea Piras * src/springlobbyapp.cpp: fixed uac detection in first time wizard 2008-12-28 Andrea Piras * src/settings.cpp: added couple search paths 2008-12-28 Andrea Piras * src/autobalancedialog.cpp, src/channel/channelchooserdialog.cpp, src/lobbyoptionstab.cpp, src/mainoptionstab.cpp, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: removed useless includes from settings.h, splitted path search detection into multiple functions, improved uikeys.txt search in first time wizard, added support for vista's UAC in first time wizard 2008-12-28 Andrea Piras * src/springlobbyapp.cpp: use variables rather than hardcoded indexes in first time dialog ( adding entries won't screw up indexes ) 2008-12-28 Andrea Piras * src/settings.h, src/springlobbyapp.cpp: fixed torrent port not switching to defaultspringport+1 from old configs 2008-12-28 Tobi Vollebregt * src/iunitsync.h, src/mapctrl.cpp, src/mapctrl.h, src/springunitsync.cpp, src/springunitsync.h: Attempt to fix crash when wxEvtHandler is destroyed while WorkItem that is still running will later post an event to it. 2008-12-28 Tobi Vollebregt * : Merge commit 'bd/unitsync_thread' into usyncthread 2008-12-28 Tobi Vollebregt * src/singleplayertab.cpp: Select the map chosen in MapSelectDialog. 2008-12-28 Tobi Vollebregt * src/mapselectdialog.cpp, src/mapselectdialog.h, wxsmith/MapSelectDialog.wxs: Added handling of MapSelectedEvt and added GetSelectedMap method. 2008-12-28 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h: Added wxWindowID ctor parameter and added MapSelectedEvt. (raised on single click (no drag) on a map) 2008-12-27 Collin J. Sutton * : Merge commit 'buildbot/master' 2008-12-28 Rene Milk * src/battlelistctrl.cpp: segfault fixed, HL remain to be fixed 2008-12-28 Rene Milk * src/battlelistctrl.cpp, src/battlelisttab.cpp: getting segfault on HL 2008-12-27 Andrea Piras * : Merge commit 'koshi/master' into unitsync_thread 2008-12-27 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h, src/mapselectdialog.cpp, src/mapselectdialog.h, wxsmith/MapSelectDialog.wxs: Basically working wxChoices to select sortkeys. 2008-12-27 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h: Allow passing size to MapGridCtrl ctor. (fixes minsize issue) 2008-12-27 Rene Milk * src/battlelisttab.cpp: leave battle fails 2008-12-26 Tobi Vollebregt * springlobby.cbp, src/mapselectdialog.cpp, src/mapselectdialog.h, wxsmith/MapSelectDialog.wxs: Initial attempt at MapSelectDialog in wxSmith. Very WIP! 2008-12-26 Tobi Vollebregt * src/mapselectdialog.cpp, src/singleplayertab.cpp: MapSelectDialog gets shown in SinglePlayerTab when clicking "..." 2008-12-26 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h: Remove link to IBattle from MapGridCtrl. 2008-12-26 Tobi Vollebregt * src/singleplayertab.cpp, src/singleplayertab.h: Enabled map browse "..." button in SinglePlayerTab and added event. 2008-12-26 Tobi Vollebregt * src/singleplayertab.cpp, src/singleplayertab.h: Revert "Temporarily show MapListCtrl in SinglePlayerTab for testing." This reverts commit d886d0b7add90bde1c92f70273bfab08609ef9e1. Conflicts: src/singleplayertab.cpp src/singleplayertab.h 2008-12-26 Tobi Vollebregt * src/mapselectdialog.cpp, src/mapselectdialog.h: Minor bit of code for MapSelectDialog. 2008-12-24 Andrea Piras * springlobby.cbp: updated c::b project 2008-12-24 Andrea Piras * src/mapgridctrl.cpp: added missing include 2008-12-24 Andrea Piras * : commit 240e2d4872b39fd46ad1396c9354a3d56be22353 Merge: 2a04160 919c1a4 Author: Andrea Piras Date: Wed Dec 24 10:54:13 2008 +0100 2008-12-23 Rene Milk * src/battlelisttab.cpp, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h: Signed-off-by: Rene Milk 2008-12-23 Rene Milk * Makefile.am, po/ar.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/fi.po, po/fr.po, po/it.po, po/pl.po, po/pt.po, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po, po/zh_CN.po: successful distcheck 2008-12-23 Rene Milk * Makefile.am: removed old file from libt section in makefile 2008-12-23 Rene Milk * cmake/libtorrent.cmake: cmakes builds too 2008-12-23 Andrea Piras * src/battle.cpp, src/battle.h, src/battlelistfilter.cpp, src/battlelistfilter.h, src/battlelisttab.cpp, src/battlelisttab.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp, src/battleroomtab.h, src/iconimagelist.cpp, src/iconimagelist.h, src/server.h, src/serverevents.cpp, src/serverevents.h, src/singleplayerbattle.cpp, src/singleplayertab.cpp, src/spring.cpp, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: compiles but not links 2008-12-23 Rene Milk * Makefile.am, src/libtorrent/asio/basic_raw_socket.hpp, src/libtorrent/asio/basic_serial_port.hpp, src/libtorrent/asio/basic_socket.hpp, src/libtorrent/asio/buffer.hpp, src/libtorrent/asio/buffers_iterator.hpp, src/libtorrent/asio/detail/deadline_timer_service.hpp, src/libtorrent/asio/detail/descriptor_ops.hpp, src/libtorrent/asio/detail/dev_poll_reactor.hpp, src/libtorrent/asio/detail/epoll_reactor.hpp, src/libtorrent/asio/detail/handler_base_from_member.hpp, src/libtorrent/asio/detail/handler_queue.hpp, src/libtorrent/asio/detail/hash_map.hpp, src/libtorrent/asio/detail/indirect_handler_queue.hpp, src/libtorrent/asio/detail/kqueue_reactor.hpp, src/libtorrent/asio/detail/null_thread.hpp, src/libtorrent/asio/detail/old_win_sdk_compat.hpp, src/libtorrent/asio/detail/posix_thread.hpp, src/libtorrent/asio/detail/reactive_descriptor_service.hpp, src/libtorrent/asio/detail/reactive_serial_port_service.hpp, src/libtorrent/asio/detail/reactive_socket_service.hpp, src/libtorrent/asio/detail/reactor_op_queue.hpp, src/libtorrent/asio/detail/select_reactor.hpp, src/libtorrent/asio/detail/socket_types.hpp, src/libtorrent/asio/detail/strand_service.hpp, src/libtorrent/asio/detail/task_io_service.hpp, src/libtorrent/asio/detail/task_io_service_2lock.hpp, src/libtorrent/asio/detail/timer_queue.hpp, src/libtorrent/asio/detail/timer_queue_base.hpp, src/libtorrent/asio/detail/win_iocp_handle_service.hpp, src/libtorrent/asio/detail/win_iocp_io_service.hpp, src/libtorrent/asio/detail/win_iocp_serial_port_service.hpp, src/libtorrent/asio/detail/win_iocp_socket_service.hpp, src/libtorrent/asio/detail/win_thread.hpp, src/libtorrent/asio/detail/wince_thread.hpp, src/libtorrent/asio/detail/wrapped_handler.hpp, src/libtorrent/asio/handler_alloc_hook.hpp, src/libtorrent/asio/impl/read_at.ipp, src/libtorrent/asio/impl/read_until.ipp, src/libtorrent/asio/impl/serial_port_base.ipp, src/libtorrent/asio/impl/write_at.ipp, src/libtorrent/asio/io_service.hpp, src/libtorrent/asio/ip/icmp.hpp, src/libtorrent/asio/ip/resolver_query_base.hpp, src/libtorrent/asio/local/basic_endpoint.hpp, src/libtorrent/asio/raw_socket_service.hpp, src/libtorrent/asio/read.hpp, src/libtorrent/asio/read_at.hpp, src/libtorrent/asio/read_until.hpp, src/libtorrent/asio/serial_port.hpp, src/libtorrent/asio/serial_port_base.hpp, src/libtorrent/asio/serial_port_service.hpp, src/libtorrent/asio/ssl/basic_context.hpp, src/libtorrent/asio/ssl/context_base.hpp, src/libtorrent/asio/ssl/context_service.hpp, src/libtorrent/asio/ssl/detail/openssl_context_service.hpp, src/libtorrent/asio/ssl/detail/openssl_init.hpp, src/libtorrent/asio/ssl/detail/openssl_operation.hpp, src/libtorrent/asio/ssl/detail/openssl_types.hpp, src/libtorrent/asio/ssl/stream_base.hpp, src/libtorrent/asio/thread.hpp, src/libtorrent/asio/version.hpp, src/libtorrent/asio/windows/basic_random_access_handle.hpp, src/libtorrent/asio/windows/random_access_handle.hpp, src/libtorrent/asio/windows/random_access_handle_service.hpp, src/libtorrent/asio/write.hpp, src/libtorrent/asio/write_at.hpp, src/libtorrent/include/libtorrent/GeoIP.h, src/libtorrent/include/libtorrent/alert.hpp, src/libtorrent/include/libtorrent/alert_types.hpp, src/libtorrent/include/libtorrent/asio.hpp, src/libtorrent/include/libtorrent/assert.hpp, src/libtorrent/include/libtorrent/aux_/session_impl.hpp, src/libtorrent/include/libtorrent/bandwidth_manager.hpp, src/libtorrent/include/libtorrent/bencode.hpp, src/libtorrent/include/libtorrent/bitfield.hpp, src/libtorrent/include/libtorrent/broadcast_socket.hpp, src/libtorrent/include/libtorrent/bt_peer_connection.hpp, src/libtorrent/include/libtorrent/buffer.hpp, src/libtorrent/include/libtorrent/chained_buffer.hpp, src/libtorrent/include/libtorrent/config.hpp, src/libtorrent/include/libtorrent/connection_queue.hpp, src/libtorrent/include/libtorrent/create_torrent.hpp, src/libtorrent/include/libtorrent/debug.hpp, src/libtorrent/include/libtorrent/disk_buffer_holder.hpp, src/libtorrent/include/libtorrent/disk_io_thread.hpp, src/libtorrent/include/libtorrent/entry.hpp, src/libtorrent/include/libtorrent/enum_net.hpp, src/libtorrent/include/libtorrent/error_code.hpp, src/libtorrent/include/libtorrent/escape_string.hpp, src/libtorrent/include/libtorrent/extensions.hpp, src/libtorrent/include/libtorrent/extensions/smart_ban.hpp, src/libtorrent/include/libtorrent/extensions/ut_metadata.hpp, src/libtorrent/include/libtorrent/file.hpp, src/libtorrent/include/libtorrent/file_pool.hpp, src/libtorrent/include/libtorrent/file_storage.hpp, src/libtorrent/include/libtorrent/gzip.hpp, src/libtorrent/include/libtorrent/hasher.hpp, src/libtorrent/include/libtorrent/http_connection.hpp, src/libtorrent/include/libtorrent/http_parser.hpp, src/libtorrent/include/libtorrent/http_stream.hpp, src/libtorrent/include/libtorrent/http_tracker_connection.hpp, src/libtorrent/include/libtorrent/instantiate_connection.hpp, src/libtorrent/include/libtorrent/intrusive_ptr_base.hpp, src/libtorrent/include/libtorrent/invariant_check.hpp, src/libtorrent/include/libtorrent/kademlia/closest_nodes.hpp, src/libtorrent/include/libtorrent/kademlia/dht_tracker.hpp, src/libtorrent/include/libtorrent/kademlia/find_data.hpp, src/libtorrent/include/libtorrent/kademlia/msg.hpp, src/libtorrent/include/libtorrent/kademlia/node.hpp, src/libtorrent/include/libtorrent/kademlia/node_entry.hpp, src/libtorrent/include/libtorrent/kademlia/observer.hpp, src/libtorrent/include/libtorrent/kademlia/packet_iterator.hpp, src/libtorrent/include/libtorrent/kademlia/routing_table.hpp, src/libtorrent/include/libtorrent/kademlia/rpc_manager.hpp, src/libtorrent/include/libtorrent/lazy_entry.hpp, src/libtorrent/include/libtorrent/lsd.hpp, src/libtorrent/include/libtorrent/magnet_uri.hpp, src/libtorrent/include/libtorrent/natpmp.hpp, src/libtorrent/include/libtorrent/parse_url.hpp, src/libtorrent/include/libtorrent/pch.hpp, src/libtorrent/include/libtorrent/pe_crypto.hpp, src/libtorrent/include/libtorrent/peer_connection.hpp, src/libtorrent/include/libtorrent/peer_id.hpp, src/libtorrent/include/libtorrent/peer_info.hpp, src/libtorrent/include/libtorrent/piece_picker.hpp, src/libtorrent/include/libtorrent/policy.hpp, src/libtorrent/include/libtorrent/proxy_base.hpp, src/libtorrent/include/libtorrent/session.hpp, src/libtorrent/include/libtorrent/session_settings.hpp, src/libtorrent/include/libtorrent/session_status.hpp, src/libtorrent/include/libtorrent/socket.hpp, src/libtorrent/include/libtorrent/socks4_stream.hpp, src/libtorrent/include/libtorrent/socks5_stream.hpp, src/libtorrent/include/libtorrent/ssl_stream.hpp, src/libtorrent/include/libtorrent/stat.hpp, src/libtorrent/include/libtorrent/storage.hpp, src/libtorrent/include/libtorrent/time.hpp, src/libtorrent/include/libtorrent/torrent.hpp, src/libtorrent/include/libtorrent/torrent_handle.hpp, src/libtorrent/include/libtorrent/torrent_info.hpp, src/libtorrent/include/libtorrent/tracker_manager.hpp, src/libtorrent/include/libtorrent/udp_socket.hpp, src/libtorrent/include/libtorrent/udp_tracker_connection.hpp, src/libtorrent/include/libtorrent/upnp.hpp, src/libtorrent/include/libtorrent/variant_stream.hpp, src/libtorrent/include/libtorrent/version.hpp, src/libtorrent/include/libtorrent/web_peer_connection.hpp, src/libtorrent/src/GeoIP.c, src/libtorrent/src/alert.cpp, src/libtorrent/src/assert.cpp, src/libtorrent/src/broadcast_socket.cpp, src/libtorrent/src/bt_peer_connection.cpp, src/libtorrent/src/connection_queue.cpp, src/libtorrent/src/create_torrent.cpp, src/libtorrent/src/disk_buffer_holder.cpp, src/libtorrent/src/disk_io_thread.cpp, src/libtorrent/src/entry.cpp, src/libtorrent/src/enum_net.cpp, src/libtorrent/src/error_code.cpp, src/libtorrent/src/escape_string.cpp, src/libtorrent/src/file.cpp, src/libtorrent/src/file_old.cpp, src/libtorrent/src/file_pool.cpp, src/libtorrent/src/file_storage.cpp, src/libtorrent/src/gzip.cpp, src/libtorrent/src/http_connection.cpp, src/libtorrent/src/http_parser.cpp, src/libtorrent/src/http_stream.cpp, src/libtorrent/src/http_tracker_connection.cpp, src/libtorrent/src/identify_client.cpp, src/libtorrent/src/instantiate_connection.cpp, src/libtorrent/src/kademlia/closest_nodes.cpp, src/libtorrent/src/kademlia/dht_tracker.cpp, src/libtorrent/src/kademlia/find_data.cpp, src/libtorrent/src/kademlia/node.cpp, src/libtorrent/src/kademlia/refresh.cpp, src/libtorrent/src/kademlia/routing_table.cpp, src/libtorrent/src/kademlia/rpc_manager.cpp, src/libtorrent/src/kademlia/traversal_algorithm.cpp, src/libtorrent/src/lazy_bdecode.cpp, src/libtorrent/src/logger.cpp, src/libtorrent/src/lsd.cpp, src/libtorrent/src/magnet_uri.cpp, src/libtorrent/src/metadata_transfer.cpp, src/libtorrent/src/natpmp.cpp, src/libtorrent/src/parse_url.cpp, src/libtorrent/src/pch.cpp, src/libtorrent/src/pe_crypto.cpp, src/libtorrent/src/peer_connection.cpp, src/libtorrent/src/piece_picker.cpp, src/libtorrent/src/policy.cpp, src/libtorrent/src/session.cpp, src/libtorrent/src/session_impl.cpp, src/libtorrent/src/smart_ban.cpp, src/libtorrent/src/socks4_stream.cpp, src/libtorrent/src/socks5_stream.cpp, src/libtorrent/src/stat.cpp, src/libtorrent/src/storage.cpp, src/libtorrent/src/torrent.cpp, src/libtorrent/src/torrent_handle.cpp, src/libtorrent/src/torrent_info.cpp, src/libtorrent/src/tracker_manager.cpp, src/libtorrent/src/udp_socket.cpp, src/libtorrent/src/udp_tracker_connection.cpp, src/libtorrent/src/upnp.cpp, src/libtorrent/src/ut_metadata.cpp, src/libtorrent/src/ut_pex.cpp, src/libtorrent/src/web_peer_connection.cpp: new libt builds successfully on mingw with autotools 2008-12-23 Andrea Piras * src/battle.cpp, src/battle.h, src/battleoptionstab.cpp, src/ibattle.cpp, src/ibattle.h, src/mapctrl.cpp, src/mapctrl.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/ui.h, src/user.cpp, src/user.h: almost compiles 2008-12-23 Rene Milk * : commit befd3fa0869fe756e52b7f5e47842fcec1e99ff1 Merge: 741df8c 919c1a4 Author: Rene Milk Date: Tue Dec 23 14:45:42 2008 +0100 2008-12-23 Rene Milk * src/battlelistctrl.cpp: getting libtorrent error on right-click download 2008-12-23 Andrea Piras * src/battle.cpp, src/battle.h, src/battlelisttab.cpp, src/battleroomtab.cpp, src/ibattle.cpp, src/ibattle.h, src/server.h, src/user.cpp, src/user.h: some progress 2008-12-23 Rene Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.cpp, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h: select works in balltelist 2008-12-22 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h: Sorting in two dimensions. (no UI yet) 2008-12-22 Andrea Piras * src/spring.cpp: fixed script generation 2008-12-22 Andrea Piras * src/battle.cpp: /replacehostip command was accidentally host-only (useless) 2008-12-22 Rene Milk * src/battlelistctrl.cpp: display mod/mapname 2008-12-22 Rene Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/channel/channellistctrl.cpp, src/nicklistctrl.cpp: sort in blist works 2008-12-21 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h: Removed scrolling with non-left mouse buttons. (hence bypassing OnLeftDown/OnLeftUp events...) 2008-12-21 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h, src/mapselectctrl.cpp, src/mapselectctrl.h: Working tile mapped draggable grid of minimaps. 2008-12-21 Tobi Vollebregt * src/mapgridctrl.cpp, src/mapgridctrl.h, src/singleplayertab.cpp, src/singleplayertab.h: Renamed MapListCtrl->MapGridCtrl in code. 2008-12-21 Tobi Vollebregt * CMakeLists.txt, Makefile.am, src/mapgridctrl.cpp, src/mapgridctrl.h, src/maplistctrl.cpp, src/maplistctrl.h, src/mapselectctrl.cpp, src/mapselectctrl.h, src/singleplayertab.cpp: Renamed maplistctrl->mapgridctrl and added mapselectctrl. 2008-12-21 Tobi Vollebregt * src/maplistctrl.cpp, src/maplistctrl.h: Working prototype map grid. 2008-12-21 Tobi Vollebregt * src/singleplayertab.cpp, src/singleplayertab.h: Temporarily show MapListCtrl in SinglePlayerTab for testing. 2008-12-21 Andrea Piras * src/spring.cpp: fixed teamspeak generation 2008-12-21 Andrea Piras * src/torrentwrapper.cpp: logging of outgoing torrent messages 2008-12-21 Andrea Piras * src/utils.cpp: proper log initialization order 2008-12-21 Rene Milk * src/springlobbyapp.cpp: fixed word order 2008-12-21 Rene Milk * src/battle.h, src/battlelistctrl.cpp, src/battlelisttab.cpp: adding and updating works 2008-12-20 Andrea Piras * : commit 2a041604baf12d5e458e6be4ef1ffc6c86acb470 Author: Tobi Vollebregt Date: Sat Dec 20 12:41:33 2008 +0100 2008-12-20 Tobi Vollebregt * : Merge commit 'bd/master' into usyncthread 2008-12-20 Andrea Piras * src/torrentwrapper.cpp: use try/catch to handle the case that download finished before web seed list arrives 2008-12-20 Andrea Piras * po/ru.po: updated russian translation 2008-12-20 Andrea Piras * : Merge commit 'koshi/master' 2008-12-19 Rene Milk * : commit 9e6e6d6828e76b4d1176d7791c8ea2cec125f3dd Author: Rene Milk Date: Fri Dec 19 19:48:03 2008 +0100 2008-12-18 Tobi Vollebregt * src/iunitsync.h, src/replay/replaylist.cpp, src/springunitsync.cpp, src/springunitsync.h, src/thread.cpp, src/thread.h: Attempt to reduce replay tab blocking UI after application start. 2008-12-18 Tobi Vollebregt * src/springunitsync.cpp, src/springunitsync.h: Reduced m_map_image_cache size and added comments. (The reduced cache size barely affects performance because of the new bigger cache for smaller images.) 2008-12-18 Andrea Piras * src/serverevents.cpp: don't spam autokick messages, and don't attempt to autokick multiple times 2008-12-18 Tobi Vollebregt * src/springunitsync.cpp, src/springunitsync.h: Special cache for tiny minimaps (for BattleList). This takes much less memory per image then the other MRU cache. 2008-12-18 Tobi Vollebregt * src/iunitsync.h, src/mapctrl.cpp, src/springunitsync.cpp, src/springunitsync.h: Added rescaling Get***MapAsync methods. 2008-12-18 Tobi Vollebregt * src/springunitsync.cpp: Different locking strategy, prefetch _GetMapInfoEx. 2008-12-18 Tobi Vollebregt * src/springunitsync.cpp: typo 2008-12-17 Rene Milk * src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/tasserver.cpp: fixed warnings before merge in master 2008-12-17 Rene Milk * src/battleroommmoptionstab.cpp: finally fixed V-align of controls 2008-12-17 Rene Milk * src/battleroommmoptionstab.cpp: mark empty option category sizer 2008-12-17 Rene Milk * springlobby.cbp, src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/mmoptionmodel.cpp: empty section sizers are no longer displayed 2008-12-16 Rene Milk * : commit d7c832cec10db165699f41a3fed215d6c994a422 Merge: 19efbc5 32406f1 Author: Rene Milk Date: Tue Dec 16 21:42:11 2008 +0100 2008-12-16 Rene Milk * : Merge commit 'bd/master' 2008-12-15 Tobi Vollebregt * src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h: Caching improvements.. * Separate WorkItems for prefetching minimap, metalmap, heightmap, so MapCtrl loads images a bit earlier when WorkerThread is prefetching. * Give prefetch WorkItems a priority based on hash of map name, this has effect of grouping together prefetches for the same map, which, in turn, improves MRU cache performance. 2008-12-15 Tobi Vollebregt * src/thread.cpp: Yield seems better behaving (because DoWork calls WakeUp maybe?) 2008-12-15 Tobi Vollebregt * : Merge commit 'bd/master' into usyncthread 2008-12-14 Andrea Piras * src/springlobbyapp.cpp: applied patch by awilliamson: create base dir before downloading ota content 2008-12-14 Andrea Piras * src/settings.h: removed obsolete #define 2008-12-14 Andrea Piras * src/springoptionstab.cpp: fixed SL not always saving auto detected spring paths 2008-12-14 Andrea Piras * src/springlobbyapp.cpp: typo fix 2008-12-14 Andrea Piras * src/tasserver.cpp: fixed typo 2008-12-14 Andrea Piras * CMakeLists.txt, Makefile.am: fixed buildsystems >_> 2008-12-14 Andrea Piras * src/crc.cpp, src/crc.h: forgot to commit 2 files >_> 2008-12-14 Andrea Piras * springlobby.cbp, src/socket.cpp, src/socket.h, src/tasserver.cpp, src/tasserver.h: fixed c::b project fixed network handler glitching randomly 2008-12-14 Tobi Vollebregt * : Merge commit 'bd/master' into usyncthread Conflicts: src/settings.cpp 2008-12-14 Tobi Vollebregt * src/iunitsync.h, src/mapctrl.cpp, src/springunitsync.cpp, src/springunitsync.h: Finally async map image loading that seems to work :-) Details: * Added MRU cache for map images (only original size ones) * Don't use something like AsyncResult anymore, the ownership of memory is to painful to get right on non-GC'ed platform * Use MRU cache instead, ie. when MapCtrl gets notified about finished async map image fetch, it calls usync().Get***Map again, which gets image from cache because other thread fetched it moments ago. 2008-12-14 Andrea Piras * src/singleplayertab.cpp: typo fix 2008-12-14 Tobi Vollebregt * src/iunitsync.h, src/mapctrl.cpp, src/mapctrl.h, src/springunitsync.cpp, src/springunitsync.h: Removed buggy async calls, going for MRU approach, where async map fetch result is just to put map in MRU cache. 2008-12-13 Andrea Piras * CMakeLists.txt, Makefile.am, src/settings.cpp: temp removed thread from settings class to fix buildsystem wtf ( not used atm anyway ) 2008-12-14 Tobi Vollebregt * src/springunitsync.cpp, src/springunitsync.h: Remove unnecessary susynclib calls from GetFileCachePath. 2008-12-14 Tobi Vollebregt * src/iunitsync.h, src/mapctrl.cpp, src/mapctrl.h, src/springunitsync.cpp, src/springunitsync.h, src/thread.cpp, src/thread.h: Half working async fetching of minimap/metalmap/heightmap in MapCtrl. 2008-12-13 Tobi Vollebregt * src/filelister/filelistdialog.cpp: Include iunitsync, not springunitsync 2008-12-13 Tobi Vollebregt * src/springunitsync.cpp: Debug.. 2008-12-13 Tobi Vollebregt * src/springunitsync.cpp: Remove some unneeded LOCK_UNITSYNCs. 2008-12-13 Tobi Vollebregt * src/ibattle.cpp: Trigger prefetch when map is changed in any battle. 2008-12-13 Tobi Vollebregt * src/springunitsync.cpp, src/springunitsynclib.cpp: Fix compile error and segmentation fault. 2008-12-13 Tobi Vollebregt * src/iunitsync.h, src/springoptionstab.cpp, src/springunitsync.cpp, src/springunitsync.h: Added CacheMap, PrefetchMap methods to IUnitSync. Added m_cache_thread unitsync background thread to SpringUnitSync. Removed redundant (and dangerous, when background thread is used!) usync().FreeUnitSyncLib() calls. 2008-12-13 Tobi Vollebregt * src/springunitsynclib.cpp, src/springunitsynclib.h: Small tweaks 2008-12-13 Tobi Vollebregt * src/springlobbyapp.cpp, src/springunitsync.cpp, src/springunitsync.h, src/ui.cpp, src/unitsyncthread.cpp, src/unitsyncthread.h: Disabled unitsyncthread entirely (obsolete) 2008-12-13 Tobi Vollebregt * src/springunitsynclib.cpp, src/springunitsynclib.h: Removed Reload and Init (unused). 2008-12-13 Andrea Piras * src/battle.cpp, src/battle.h, src/ibattle.cpp, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/tasserver.cpp, src/user.h: preliminary not compiling work to merge user and battlebot classes 2008-12-13 Andrea Piras * src/spring.cpp: fixed indentation 2008-12-13 Andrea Piras * src/spring.cpp: append hostport when you're client to script.txt 2008-12-13 Andrea Piras * src/spring.cpp: removed double entry of script.txt keys 2008-12-13 Andrea Piras * src/spring.cpp: fixed hash format in script.txt 2008-12-13 Andrea Piras * src/springunitsynclib.cpp: no more unitsync crash 2008-12-13 Andrea Piras * CMakeLists.txt, Makefile.am, src/settings.cpp: temp removed thread from settings class to fix buildsystem wtf ( not used atm anyway ) 2008-12-13 Andrea Piras * : commit fad9772f2d0a0a070a11fefe88d6be91435e9145 Author: Andrea Piras Date: Sat Dec 13 02:41:36 2008 +0100 2008-12-13 Andrea Piras * : commit 9e75c3604dd3d7465cc9845c38a1e386f0afb8ea Author: Andrea Piras Date: Sat Dec 13 02:01:09 2008 +0100 2008-12-13 Rene Milk * src/torrentwrapper.cpp: Signed-off-by: Rene Milk 2008-12-13 Andrea Piras * src/torrentwrapper.cpp: moar libtorrent fixes 2008-12-13 Andrea Piras * src/torrentwrapper.cpp: some changes hoping to reduce libtorrent build errors with old libtorrent versions 2008-12-13 Andrea Piras * : commit 8f08f233642a9124fb0e6a62045dc0d99432c573 Merge: e9aae31 233ad00 Author: Andrea Piras Date: Fri Dec 12 23:06:46 2008 +0100 2008-12-12 Andrea Piras * src/springunitsynclib.cpp: layout fix 2008-12-12 Andrea Piras * src/autohost.cpp, src/autohost.h, src/settings++/se_utils.cpp, src/settings.cpp, src/settings.h, src/spring.cpp, src/spring.h, src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: now SL forces spring into portable mode too if available, refactored spring launch functions to get less code duplication 2008-12-12 Andrea Piras * src/springunitsynclib.cpp, src/springunitsynclib.h: added get/set spring config file path calls for unitsync 2008-12-12 Tobi Vollebregt * src/thread.h: comments 2008-12-11 Tobi Vollebregt * src/thread.cpp, src/thread.h: Implemented WorkerThread, WorkItem framework. 2008-12-11 Andrea Piras * CMakeLists.txt: fixed springsettings build 2008-12-11 Andrea Piras * src/settings.cpp, src/unitsyncthread.cpp, src/unitsyncthread.h: disable caching thread while getting unitsync versions 2008-12-11 Andrea Piras * src/tasserver.cpp, src/tasserver.h: added option to disable catchall for network 2008-12-11 Andrea Piras * src/settings.cpp: pause / resume unitsync thread while fetching unitsync versions 2008-12-11 Rene Milk * src/battlelistctrl.cpp, src/battlelisttab.cpp, src/nicklistctrl.cpp: getting strange sigabrt 2008-12-11 Rene Milk * src/ibattle.cpp, src/ibattle.h: constify *exists funcs 2008-12-11 Rene Milk * src/battle.h, src/battlelistctrl.cpp, src/battlelisttab.cpp, src/channel/channellistctrl.cpp, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp: further along with battlelist 2008-12-10 Rene Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.cpp, src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/customvirtlistctrl.h, src/nicklistctrl.cpp, src/nicklistctrl.h: begun batlelist conversion 2008-12-10 Rene Milk * src/nicklistctrl.cpp: cleanup 2008-12-10 Rene Milk * src/nicklistctrl.cpp, src/nicklistctrl.h: nicklist save/restore selection during sort 2008-12-10 Rene Milk * src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.h: fixed selection save/restore 2008-12-10 Rene Milk * src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp, src/nicklistctrl.h: post-template of virtlisctrl base 2008-12-10 Rene Milk * src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp: pre-template params for virt-base 2008-12-10 Tobi Vollebregt * src/springunitsync.cpp: Use .clear() to clear STL containers, not .empty() 2008-12-10 Tobi Vollebregt * src/unitsyncthread.cpp: Call Thread::TestDestroy and hence wxThread::TestDestroy in usync threads. 2008-12-10 Tobi Vollebregt * src/springunitsync.cpp: This is done by SpringUnitSyncLib already. 2008-12-10 Tobi Vollebregt * src/settings++/se_utils.cpp, src/settings.cpp, src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: Unitsync thread safety. In particular: * Removed {} in InitLib #define, so the scope of wxCriticalSectionLocker extends over entire block, instead of just the InitLib(...) statement. * Moved InitLib to springunitsynclib.cpp * Removed DoInit param from Load/Reload/ctor, loading but not initializing is not thread safe. * Moved assignments to m_loaded to the position where loading finishes or unloading starts, instead of halfway in between. * AssertUnitSyncOk calls unitsync inside the critical section now. * Added _SetCurrentMod, non locking version of SetCurrentMod, and use this in all the internal methods which already keep the lock. * Added GetSpringVersionList to be able to load all Spring versions from multiple unitsyncs in a single atomic transaction. (Otherwise bg thread might load some maps from other unitsyncs etc.) This method should probably be moved to SpringUnitSync. Note that still not everything is perfect; most of the locks in SpringUnitSyncLib are too fine grained: unitsync still maintains some state between calls to for example GetOption*, Archive methods, Parser methods, etc. 2008-12-10 Tobi Vollebregt * src/unitsyncthread.cpp, src/unitsyncthread.h: Enabled map cache thread. 2008-12-09 Rene Milk * src/channel/channellistctrl.cpp: tooltips for channeltopic column 2008-12-09 Andrea Piras * springlobby.cbp: some more c::b project fixes 2008-12-09 Andrea Piras * src/battle.cpp: fixed silly mistake ( empty vs clear ) 2008-12-08 Andrea Piras * springlobby.cbp, src/battle.cpp: no more crash in autobalance, fixed c::b project 2008-12-08 Andrea Piras * src/tasserver.cpp: added safeguard catch all on net code, might make random clitches but at least won't crash the app entirely on malformed messages 2008-12-05 Andrea Piras * src/settings.cpp: use defaultspringport + 1 as default torrent port 2008-12-03 Rene Milk * src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h: fixed filter after sorting 2008-12-03 Rene Milk * src/Helper/sortutil.h, src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h: fixed restore selection 2008-12-02 Rene Milk * src/mainchattab.cpp: fixes 667 2008-12-02 Rene Milk * src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp: selection restoring not working yet 2008-12-02 Andrea Piras * src/battleroommmoptionstab.cpp: put preset frame before options frames 2008-12-02 Rene Milk * src/channel/channellistctrl.cpp: cleanup and formatting 2008-12-02 Rene Milk * : commit 9a3370555e6f132bf992dd8a7798265da494c3a6 Author: Andrea Piras Date: Mon Dec 1 16:48:52 2008 +0100 2008-11-30 Arvid Norberg * CMakeLists.txt: made CMakeLists.txt build a bundle on OSX, since this is required by wx on mac. I haven't figured out how to avoid the developer warning yet, doesn't seem to be documented 2008-11-30 Arvid Norberg * src/torrentwrapper.cpp: indentation fixes and fixed merge problems related to libtorrent-0.14.1 patch 2008-11-30 Arvid Norberg * : commit e4e44ed6ea820e1853523810eb8cb2925b0a856c Author: Arvid Norberg Date: Sun Nov 30 13:17:30 2008 -0800 2008-11-29 Rene Milk * : commit 18bcd87958a5b89845d66815cf2b580e9b541a22 Author: Collin J. Sutton Date: Thu Nov 27 13:51:03 2008 -0800 2008-11-27 Collin J. Sutton * : Merge commit '0.0.1.10367' into settings-named-colors Conflicts: src/chatpanel.cpp 2008-11-27 Rene Milk * src/channel/channellistctrl.cpp, src/channel/channellistctrl.h: implemented filter/visibility map 2008-11-27 Rene Milk * src/nicklistctrl.cpp, src/nicklistctrl.h, src/user.cpp, src/user.h: - cache icon indexes for rank, status and country - implement compare func for status 2008-11-26 Andrea Piras * src/chatpanel.cpp: fixed url events not passing correct string 2008-11-26 Rene Milk * src/Helper/sortutil.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp, src/nicklistctrl.h: some cleanups and documentation 2008-11-26 Rene Milk * src/Helper/sortutil.h, src/Helper/utilclasses.h, src/channel/channellistctrl.cpp, src/customlistctrl.h, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp, src/nicklistctrl.h: moved sort functionality to customvirtlistctrl 2008-11-25 Rene Milk * src/Helper/sortutil.h, src/nicklistctrl.cpp, src/nicklistctrl.h: the last of the template monster, useful for comparison maybe, will be removed 2008-11-25 Rene Milk * Makefile.am: added new file to autotools build 2008-11-25 Rene Milk * src/nicklistctrl.cpp, src/nicklistctrl.h: store compare function pointer in nicklist 2008-11-25 Rene Milk * src/Helper/sortutil.h, src/Helper/utilclasses.h, src/channel/channellistctrl.cpp, src/nicklistctrl.cpp, src/nicklistctrl.h: dynamic sort order for nicklist 2008-11-25 Rene Milk * src/Helper/sortutil.h, src/nicklistctrl.cpp: moved to sort direction at runtime, lookup table complete Signed-off-by: Rene Milk 2008-11-25 Rene Milk * src/Helper/sortutil.h: pre moving to runtime sort direction 2008-11-24 Rene Milk * src/Helper/sortutil.h, src/nicklistctrl.cpp: static sort-order sorting works 2008-11-24 Rene Milk * src/Helper/sortutil.h, src/nicklistctrl.cpp: more kinda working 2008-11-24 Rene Milk * src/nicklistctrl.cpp: seems to be working 2008-11-24 Rene Milk * src/Helper/sortutil.h, src/nicklistctrl.cpp, src/nicklistctrl.h, src/user.cpp, src/user.h: still getting segfaults 2008-11-24 Andrea Piras * : commit 91a5c7eb6fe2372d397ead631848f63eabfd32e1 Author: Andrea Piras Date: Mon Nov 24 19:17:38 2008 +0100 2008-11-24 Andrea Piras * src/battlelisttab.cpp, src/battlelisttab.h: ewmove annoying battle list filter notice stripe 2008-11-24 Rene Milk * : commit 955c803f16ff313f0ffa6f0e8b699d900998af97 Author: Rene Milk Date: Mon Nov 24 18:48:49 2008 +0100 2008-11-24 Andrea Piras * src/battleroomtab.cpp, src/battleroomtab.h: moved some management buttons into a popup menu in the battleroom 2008-11-24 Andrea Piras * src/battle.cpp, src/battle.h, src/battleroomtab.cpp, src/battleroomtab.h: added lock balance changes button, changed look of ui to use togglebutton instead of checkbox for admin stuff (saves lil space) but may still need refactoring 2008-11-24 Andrea Piras * src/battle.cpp: move comsharesd players too when doing autobalance 2008-11-23 Tobi Vollebregt * src/utils.h: Disallow copying of uninitialized_array 2008-11-23 Andrea Piras * src/autohost.cpp, src/battleroomtab.cpp, src/singleplayertab.cpp: added dialogs when trying to start a game with more players that spring supports 2008-11-23 Andrea Piras * src/autobalancedialog.cpp, src/autobalancedialog.h, src/battleroomtab.cpp, src/battleroomtab.h, src/settings.cpp, src/settings.h: reused autobalance gui dialog to add fix teams choices, added option to chose team size manually 2008-11-23 Andrea Piras * src/tasserver.cpp: fixed math wtf in random pick of relay host manager 2008-11-23 Andrea Piras * src/battle.cpp: finally spectator detection code should work :P 2008-11-23 Andrea Piras * src/battlelistctrl.cpp: fixed tooltips for spectators and players in battle list 2008-11-23 Andrea Piras * src/battle.cpp: now SL should cont spectators correctly 2008-11-23 Andrea Piras * src/battle.cpp: now SL shoudl count correctly spectators 2008-11-23 Andrea Piras * : commit 7b308bd005bcc760d715b6e6a7cd016cecf621ad Author: Andrea Piras Date: Sun Nov 23 15:07:00 2008 +0100 2008-11-23 Andrea Piras * src/tasserver.cpp: error code handling for relay host bot 2008-11-23 Andrea Piras * : commit 933518670641e5b7621f818a37018eb8c0a5cb0a Author: Tobi Vollebregt Date: Sun Nov 23 13:36:20 2008 +0100 2008-11-23 Andrea Piras * src/battle.cpp: layout fix 2008-11-23 Andrea Piras * src/battle.cpp, src/ibattle.h, src/spring.cpp: use num start pos of the map to clamp if fixed start pos or random is being used 2008-11-23 Andrea Piras * src/autohost.cpp, src/battle.cpp, src/battle.h, src/battleroomtab.cpp, src/ibattle.h: added arguements to fixids to make autobalance for comshare, needs refining and testing 2008-11-23 Andrea Piras * src/serverevents.cpp: added autolock if numusers > 31 in battle 2008-11-23 Tobi Vollebregt * src/iunitsync.h, src/mapctrl.cpp, src/mapctrl.h, src/springunitsynclib.cpp, src/springunitsynclib.h: heightmap display 2008-11-23 Andrea Piras * src/serverevents.cpp: correctly mark the boxes as added/removed as client 2008-11-22 Andrea Piras * src/serverevents.cpp: tons moar try/catch 2008-11-22 Andrea Piras * src/tasserver.cpp: don't allow removeuser with yourself as argument 2008-11-22 Andrea Piras * src/chatpanel.cpp: fixed order in leave channel 2008-11-22 Andrea Piras * src/tasserver.cpp: who the hell addeed disconnect on DENIED ????? 2008-11-22 Tobi Vollebregt * src/springunitsync.cpp, src/springunitsync.h: WIP refactoring 2008-11-22 Andrea Piras * src/tasserver.cpp: handle more gracefully non existing managers 2008-11-22 Andrea Piras * src/server.h, src/tasserver.cpp: use autohost manager list from #autohost 2008-11-22 Andrea Piras * src/serverevents.cpp, src/spring.cpp: added missing try/catch, fixed script generation to write hashes in signed int format 2008-11-22 Rene Milk * src/Helper/sortutil.h: interface for compare objects, refixed sort criteria ordering 2008-11-22 Rene Milk * src/Helper/sortutil.h, src/nicklistctrl.cpp: nicklist sorting works when using stable sort 2008-11-21 Rene Milk * : commit 233ad0063e3f76adcfa9442ae090c32a6b6980cb Merge: 25e4c24 b7ab252 Author: Andrea Piras Date: Fri Nov 21 22:45:51 2008 +0100 2008-11-21 Andrea Piras * src/spring.cpp: include map hashes in script.txt 2008-11-21 Andrea Piras * src/serverevents.cpp: fixed options not loading in relayed host mode 2008-11-20 Rene Milk * src/Helper/sortutil.h, src/channel/channellistctrl.cpp, src/nicklistctrl.cpp, src/nicklistctrl.h: implemented insertionsort (faulty one) experimenting with mutexes 2008-11-20 Rene Milk * : commit bae95bd6af53c6b9b09dd9183197ccd233a343d7 Author: Andrea Piras Date: Thu Nov 20 09:52:05 2008 +0100 2008-11-20 Andrea Piras * src/settings++/Main.cpp, src/settings++/se_utils.cpp, src/settings++/se_utils.h, src/springlobbyapp.cpp, src/springunitsynclib.cpp: call init for springsettings when loading unitsync in standalone mode 2008-11-19 Andrea Piras * src/chatpanel.cpp: now behaves normally in windows 2008-11-19 Andrea Piras * src/chatpanel.cpp: re-added freeze & thaw 2008-11-19 Andrea Piras * src/chatpanel.cpp, src/settings.cpp, src/settings.h: better handling for limiting history backlog 2008-11-19 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h: removed some junk from text ctrl handling 2008-11-19 Andrea Piras * src/chatpanel.h: fixed compiling 2008-11-19 Andrea Piras * src/chatpanel.cpp: typo 2008-11-19 Andrea Piras * src/chatpanel.cpp: wipe the vector upon chat append 2008-11-19 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h: got rid of rich text ctrl for good 2008-11-19 Rene Milk * : commit c8cb27cb47bad6bbbba959c9aada1f70c3bad699 Author: Rene Milk Date: Wed Nov 19 01:17:34 2008 +0100 2008-11-19 Rene Milk * src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/customvirtlistctrl.cpp, src/nicklistctrl.cpp: implemented alternatice bubblesort changed channellist to use virtual style same crash happens with channellist as before with nicklist 2008-11-18 Andrea Piras * src/updater/updater.cpp: only download updates in windows 2008-11-18 Andrea Piras * src/settings.cpp, src/torrentwrapper.cpp: fixed compiling 2008-11-17 Rene Milk * src/settings.cpp, src/torrentwrapper.cpp: fixed compile error 2008-11-17 Andrea Piras * src/settings.cpp: more decent fallback for linux & win to detrmine datadir 2008-11-17 Andrea Piras * src/settings.cpp, src/springlobbyapp.cpp, src/torrentwrapper.cpp: fixed path creation and torrent so it handles folders creation more gracefully 2008-11-17 Rene Milk * src/nicklistctrl.cpp, src/user.h: Signed-off-by: Rene Milk 2008-11-17 Rene Milk * src/nicklistctrl.cpp: simplified compare type propagation 2008-11-17 Rene Milk * src/nicklistctrl.cpp, src/user.cpp, src/user.h: not quite working yet 2008-11-17 Rene Milk * src/nicklistctrl.cpp: the monster is almost there :P 2008-11-16 Collin J. Sutton * src/settings.h: Completed inital changes for color getting/setting 2008-11-16 Collin J. Sutton * src/nicklistctrl.cpp: Multiple-parameter specialization of member functions 2008-11-16 Collin J. Sutton * CMakeLists.txt, src/nicklistctrl.cpp: Look, ma! No templates! ;) 2008-11-16 Collin J. Sutton * src/chatpanel.cpp, src/settings.h: Named chat colors WIP 2008-11-17 Rene Milk * src/nicklistctrl.cpp, src/nicklistctrl.h: trying diff sort mechanism 2008-11-16 Rene Milk * src/nicklistctrl.cpp, src/user.h: fixed compare for now 2008-11-16 Rene Milk * src/Helper/utilclasses.h: Signed-off-by: Rene Milk 2008-11-16 Rene Milk * springlobby.cbp, src/customvirtlistctrl.cpp, src/customvirtlistctrl.h, src/nicklistctrl.cpp, src/nicklistctrl.h, src/user.cpp, src/user.h: new virt custom list base class 2008-11-16 Rene Milk * src/customlistctrl.cpp, src/customlistctrl.h, src/nicklistctrl.cpp, src/nicklistctrl.h, src/user.cpp: sort freezes app 2008-11-16 Rene Milk * src/battlelistctrl.h, src/battleroomlistctrl.h, src/channel/channellistctrl.h, src/customlistctrl.cpp, src/customlistctrl.h, src/filelister/filelistctrl.h, src/nicklistctrl.h, src/replay/replaylistctrl.cpp, src/replay/replaylistctrl.h, src/torrentlistctrl.cpp, src/torrentlistctrl.h, src/userlistctrl.cpp, src/userlistctrl.h: moved to new SortOrder struct 2008-11-16 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainchattab.h, src/mainwindow.cpp, src/mainwindow.h, src/nicklistctrl.cpp, src/nicklistctrl.h, src/user.cpp, src/user.h: first working stage 2008-11-16 Rene Milk * src/customlistctrl.cpp: dummy init 2008-11-16 Rene Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/channel/channellistctrl.cpp, src/customlistctrl.cpp, src/customlistctrl.h, src/filelister/filelistctrl.cpp, src/replay/replaylistctrl.cpp, src/settings.cpp, src/settings.h, src/torrentlistctrl.cpp: added column count member to listctrls 2008-11-16 Rene Milk * src/customlistctrl.cpp, src/customlistctrl.h, src/nicklistctrl.cpp: some trial and error 2008-11-16 Andrea Piras * src/chatpanel.cpp: don't drop a space before the url begin 2008-11-16 Andrea Piras * src/chatpanel.cpp: better url detection 2008-11-16 Rene Milk * src/customlistctrl.cpp: temp revert the "fix" for msw icon coulmns. actually introduced a regression on "real" windows. vm tests were all clear. this sucks! 2008-11-16 Rene Milk * CMakeLists.txt: missed remivong the last obsolete file in cmakellist, now going on 10th try on buildbot :/ 2008-11-16 Rene Milk * po/POTFILES.in, po/ar.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/fi.po, po/fr.po, po/it.po, po/pl.po, po/pt.po, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po, po/zh_CN.po, springlobby.cbp, src/groupuserdialog.cpp, src/groupuserdialog.h: another po update, another obsolete file removed 2008-11-16 Rene Milk * po/POTFILES.in: one more garbage file removed, jeez 2008-11-16 Rene Milk * po/POTFILES.in: bleh, ended up with garbage in potfiles.in 2008-11-16 Rene Milk * po/POTFILES.in, po/ar.po, po/cs.po, po/da.po, po/de.po, po/el.po, po/es.po, po/fi.po, po/fr.po, po/it.po, po/pl.po, po/pt.po, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po, po/zh_CN.po: updated po files 2008-11-16 Rene Milk * src/channel/channellist.cpp: fix yet another include path 2008-11-16 Rene Milk * src/channel/autojoinchanneldialog.cpp, src/channel/channel.cpp, src/channel/channel.h, src/channel/channelchooser.cpp, src/channel/channellistctrl.cpp, src/channel/channellistctrl.h: hopefully fixed cmake compile 2008-11-16 Rene Milk * CMakeLists.txt: removed obsolete file from cmake build 2008-11-16 Rene Milk * src/mainwindow.cpp: changed name for channel chooser menu item 2008-11-16 Rene Milk * src/channel/channelchooserdialog.cpp, src/channel/channelchooserdialog.h: use new window pos/size interface to save/load better default sizes for dialog 2008-11-16 Rene Milk * : commit a108b183cbd07b9c40510997ed08ad2ca0a86232 Author: Rene Milk Date: Sun Nov 16 00:18:47 2008 +0100 2008-11-16 Rene Milk * src/settings.cpp, src/settings.h: further simply window size interface 2008-11-15 Rene Milk * : commit 0746f3cc094207988007f0b5f484eba7da4d1c1f Author: Rene Milk Date: Sat Nov 15 23:03:42 2008 +0100 2008-11-15 Rene Milk * src/channel/channelchooserdialog.h, src/channel/channellistctrl.cpp: fix missing close button on msw 2008-11-15 Rene Milk * src/customlistctrl.cpp, src/images/empty.xpm: fix hedaer alignemt issues on msw 2008-11-15 Rene Milk * src/channel/channelchooser.cpp, src/channel/channelchooser.h, src/channel/channelchooserdialog.cpp, src/channel/channellistctrl.cpp, src/channel/channellistctrl.h: implemented filter 2008-11-15 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/channel/channelchooser.cpp, src/channel/channelchooser.h, src/channel/channelchooserdialog.cpp, src/channel/channelchooserdialog.h, src/channel/channellistctrl.cpp, src/mainwindow.cpp, src/mainwindow.h: introduced new dialog class to hold chooser panel 2008-11-15 Rene Milk * src/channel/channellistctrl.cpp: removed icon column, changed sort order accordingly 2008-11-15 Rene Milk * src/channel/channelchooser.cpp, src/channel/channellistctrl.cpp, src/mainwindow.cpp, src/tasserver.cpp: basic functionality done 2008-11-15 Rene Milk * src/channel/channelchooser.cpp, src/channel/channelchooser.h, src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/mainwindow.cpp, src/mainwindow.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp: - channel info is passed from server to dialog - changed data storage to include topic 2008-11-15 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/Helper/channelchooser.cpp, src/Helper/channelchooser.h, src/autojoinchanneldialog.cpp, src/autojoinchanneldialog.h, src/channel.cpp, src/channel.h, src/channel/autojoinchanneldialog.cpp, src/channel/autojoinchanneldialog.h, src/channel/channel.cpp, src/channel/channel.h, src/channel/channelchooser.cpp, src/channel/channelchooser.h, src/channel/channellist.cpp, src/channel/channellist.h, src/channel/channellistctrl.cpp, src/channel/channellistctrl.h, src/channellist.cpp, src/channellist.h, src/channellistctrl.cpp, src/channellistctrl.h, src/chatpanel.cpp, src/mainchattab.cpp, src/mainwindow.cpp, src/server.cpp, src/server.h, src/serverevents.cpp, src/springlobbyapp.cpp, src/tasserver.cpp, src/ui.cpp: moved strictly channel related files to own subdir 2008-11-15 Rene Milk * src/channellistctrl.cpp, src/mainwindow.h: fixed compile errors after merge 2008-11-15 Rene Milk * : commit 03e1414e40d777196a41165f66bf34ffb075b79c Merge: 45ba174 1adbe9f Author: Rene Milk Date: Sat Nov 15 10:46:22 2008 +0100 2008-11-15 Rene Milk * : commit 3c6623ab793b79a260c539cdecfab9f21631eab7 Merge: a33900a 1adbe9f Author: Rene Milk Date: Sat Nov 15 10:42:29 2008 +0100 2008-11-14 Rene Milk * : commit 5b61ff861873e0ac7e8f8073d515175d5187ac05 Author: Rene Milk Date: Fri Nov 14 23:50:35 2008 +0100 2008-11-14 Rene Milk * src/chatpanel.cpp, src/chatpanel.h: added show mutelist to channel context menu 2008-11-14 Rene Milk * springlobby.cbp: remove some missing files from cbp 2008-11-14 Rene Milk * src/serverevents.cpp: fix mute message 2008-11-14 Rene Milk * src/channel.cpp, src/channel.h, src/serverevents.cpp, src/ui.cpp, src/ui.h: move to directly displaying mutes in new MuteWindow isntead of storing mutelist in channel 2008-11-13 Rene Milk * src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h: new static mutelist window 2008-11-13 Rene Milk * src/channel.cpp, src/channel.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: mutelist is working, as long as one doesn't request the list for a channel one isn't in. forgot that there won't we be a channel object for those to hold the mutelist 2008-11-13 Rene Milk * src/chatpanel.cpp, src/nicklistctrl.cpp, src/nicklistctrl.h: fixes really bad regression in right-click menu for nicklist 2008-11-13 Rene Milk * src/battlelistctrl.cpp, src/customlistctrl.cpp, src/customlistctrl.h: fixes 650 2008-11-13 Rene Milk * springlobby.cbp, src/managegroupspanel.cpp, src/managegroupspanel.h: remove obsolete files 2008-11-13 tc- * : Merge commit 'bd/master' 2008-11-10 Collin J. Sutton * src/chatpanel.cpp, src/chatpanel.h: Styled URLs, fixed URL link extraction The URL cutoff error was caused by bad URL extraction in ChatPanel::OnLinkEvent. Using the same method as the wxWidgets sample `richtext' fixed that. 2008-11-10 Andrea Piras * src/spring.cpp: use the right path for script.txt in SP mode 2008-11-10 Rene Milk * src/lobbyoptionstab.cpp, src/lobbyoptionstab.h, src/mainwindow.cpp, src/mainwindow.h, src/springlobbyapp.cpp, src/springlobbyapp.h: put select language in diff places. the button in lobbyoptionstab needs to be move or sth 2008-11-10 Rene Milk * springlobby.cbp: removed some missing files from cbp 2008-11-10 Rene Milk * src/Helper/wxTranslationHelper.cpp, src/Helper/wxTranslationHelper.h, src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h, src/springlobbyapp.cpp, src/utils.cpp, src/utils.h: by using custom getSinglechoiceindex method, have the dialog preset selected item 2008-11-10 Andrea Piras * : commit 8d1762bc765f06dfcea9d5baba891eec517cd26e Author: Rene Milk Date: Sun Nov 9 23:38:07 2008 +0100 2008-11-09 Rene Milk * src/springlobbyapp.cpp: save lang choice after dialog closed 2008-11-09 Rene Milk * src/Helper/wxTranslationHelper.cpp: tweaked searching for mo files to fit actual path structure produced my cmake builds 2008-11-09 Andrea Piras * src/autohost.cpp, src/battle.cpp, src/battle.h: added optional argument to specify how big is the ally team when balancing 2008-11-09 Rene Milk * src/Helper/wxTranslationHelper.cpp, src/springlobbyapp.cpp: alternative lookup method 2008-11-09 Rene Milk * src/Helper/wxTranslationHelper.cpp, src/mainwindow.cpp, src/springlobbyapp.cpp, src/springlobbyapp.h: test implementation 2008-11-09 Rene Milk * src/springlobbyapp.cpp, src/springlobbyapp.h: changed SL init to use new translation helper 2008-11-09 Rene Milk * src/Helper/wxTranslationHelper.cpp, src/Helper/wxTranslationHelper.h: removed some unnecessary funcs + tewaked layout 2008-11-09 Rene Milk * src/Helper/wxTranslationHelper.cpp, src/Helper/wxTranslationHelper.h, src/settings.cpp, src/settings.h: settings interface 2008-11-09 Rene Milk * src/Helper/wxTranslationHelper.cpp, src/Helper/wxTranslationHelper.h: includes fixed 2008-11-09 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/Helper/wxTranslationHelper.cpp, src/Helper/wxTranslationHelper.h: added new files 2008-11-09 Andrea Piras * : commit 4825846c39d23d6ec3ff0b10cad3ab9862b542ed Author: Andrea Piras Date: Sun Nov 9 16:57:31 2008 +0100 2008-11-09 Rene Milk * src/spring.cpp, src/springprocess.cpp, src/springprocess.h, src/ui.cpp, src/ui.h: now passing the exit code of both launch methods for spring around as event payload so it's available in Ui::OnSpringterminated 2008-11-09 Andrea Piras * src/tasserver.cpp: fixed logic vs runtime errors 2008-11-09 Rene Milk * src/battlelisttab.cpp, src/battlelisttab.h: closes http://trac.springlobby.info/ticket/556 2008-11-09 Rene Milk * src/battlelisttab.cpp: ups, wrong comparison 2008-11-09 Rene Milk * src/battlelisttab.cpp, src/battlelisttab.h: simplified show/hiding code 2008-11-09 Andrea Piras * src/tasserver.cpp: fixed start command 2008-11-09 Andrea Piras * src/tasserver.cpp, src/ui.cpp: fixed compiler error 2008-11-09 Andrea Piras * src/ui.cpp: send !startgame to relay bot 2008-11-09 Rene Milk * src/singleplayertab.cpp, src/singleplayertab.h: removed reset button in SP tab, added stub for handler 2008-11-09 Rene Milk * : commit b6cfd9f109a3ebcc711b3627569840ac8100d544 Author: Rene Milk Date: Sun Nov 9 01:31:58 2008 +0100 2008-11-09 Rene Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/mmoptionmodel.cpp: first attempt at GUI side, no nested sections yet 2008-11-09 Rene Milk * src/springunitsync.cpp: changed all section values to lowercase when creating option containers 2008-11-09 Rene Milk * src/mmoptionswrapper.cpp: deelte the temp file if we're not debugging 2008-11-09 Rene Milk * src/mmoptionswrapper.cpp: remove nested for loop 2008-11-09 Rene Milk * src/mmoptionswrapper.cpp: use temp filename for config in section tree 2008-11-09 Rene Milk * src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/springunitsync.cpp: finally handle multi-level nesting of sections 2008-11-08 Rene Milk * src/mmoptionswrapper.cpp: possibly made parsing smarter 2008-11-08 Rene Milk * src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: fix compile error and remove deprecated function reloadMapoptons 2008-11-08 Rene Milk * src/mmoptionswrapper.cpp: added clearing of trees on unloading options 2008-11-08 Andrea Piras * src/tasserver.cpp: use nick, not ip to join the battle :p 2008-11-08 Rene Milk * src/mmoptionswrapper.cpp: fix tree parsing 2008-11-08 Andrea Piras * src/tasserver.cpp: fixed case message for relay hsot bot 2008-11-08 Andrea Piras * src/settings.cpp: fixed typo in options 2008-11-08 Andrea Piras * src/hostbattledialog.cpp: fixed layout 2008-11-08 Andrea Piras * src/battlelisttab.cpp, src/hostbattledialog.cpp, src/hostbattledialog.h, src/settings.cpp, src/settings.h: added gui option to enable relayed host mode 2008-11-08 Andrea Piras * src/tasserver.cpp: forgot to set proxy flag for relayed battles 2008-11-08 Andrea Piras * src/tasserver.cpp, src/tasserver.h: added support for AutoHostManager 2008-11-08 Andrea Piras * src/tasserver.cpp: drop messages if no relay bot is set 2008-11-08 Andrea Piras * src/hostbattledialog.cpp, src/tasserver.cpp: autojoin & leave relayed host games 2008-11-08 Andrea Piras * src/battle.cpp, src/battle.h, src/server.cpp, src/server.h, src/spring.cpp, src/tasserver.cpp, src/tasserver.h, src/ui.cpp: now SL generates script.txt for the relay bot and sends to it 2008-11-08 Andrea Piras * src/battle.cpp, src/battle.h, src/server.h, src/tasserver.cpp, src/tasserver.h: started adding net part of relaye host mode 2008-11-08 Rene Milk * src/mmoptionmodel.cpp: fix empty cache entries for sections/styles 2008-11-08 Rene Milk * src/mmoptionmodel.h, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/springunitsync.cpp: added parsing of cahced sections in wrapper, not working 2008-11-08 Andrea Piras * : commit e0fa94f1dd9a6f7fda3b650362d527208745b4e7 Author: Rene Milk Date: Sat Nov 8 16:16:44 2008 +0100 2008-11-08 Andrea Piras * src/spring.cpp: fixed wrong index 2008-11-08 Rene Milk * src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: add trees for sections to wrapper 2008-11-08 Andrea Piras * src/spring.cpp, src/user.cpp, src/user.h: started rewriting script generation & user sorting for new spring 2008-11-08 Rene Milk * src/iunitsync.h, src/mmoptionmodel.cpp, src/mmoptionmodel.h, src/springunitsync.cpp: completed section caching 2008-11-08 Andrea Piras * src/chatpanel.cpp: Revert "even better syntax" This reverts commit af791da81c79ef7fcd85255423a12b09bd26d0eb. 2008-11-08 Rene Milk * tools/upload-temp-win-build.sh: fix perm. err when file already exists 2008-11-08 Andrea Piras * : commit 5e60436349d07f63aa76bc0295172016dd7e38ea Author: Rene Milk Date: Sat Nov 8 02:34:30 2008 +0100 2008-11-08 Andrea Piras * : commit 20305d1a03e4afb31c1e3d5d39e42a5ef440d29c Author: Rene Milk Date: Sat Nov 8 02:20:45 2008 +0100 2008-11-08 Rene Milk * tools/upload-temp-win-build.sh: get branch name from buildbot 2008-11-08 Rene Milk * tools/upload-temp-win-build.sh: fixed perm. err after upload 2008-11-08 Andrea Piras * : commit bf15cce67bf9a2ba79c659d5b937b7126b47a103 Author: Rene Milk Date: Sat Nov 8 01:19:02 2008 +0100 2008-11-08 Rene Milk * tools/upload-temp-win-build.sh: added branchname to exe for temp bulds 2008-11-07 Collin J. Sutton * src/torrentwrapper.cpp: Fix download move-on-completion, add log messages 2008-11-08 Andrea Piras * : commit 2d297e100d3611d0c517502bb7a577f5de6dd5c6 Author: Rene Milk Date: Sat Nov 8 00:38:58 2008 +0100 2008-11-07 Collin J. Sutton * : commit af791da81c79ef7fcd85255423a12b09bd26d0eb Author: Andrea Piras Date: Sat Nov 8 00:18:39 2008 +0100 2008-11-08 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h: magically fixed multiline paste in windows? 2008-11-07 Rene Milk * : Merge commit 'bd/master' 2008-11-07 Andrea Piras * src/ibattle.cpp: fixed wrongly named assert 2008-11-07 Andrea Piras * src/hostbattledialog.cpp, src/tasserver.cpp, src/tasserver.h: fixed hole punching for good now 2008-11-07 Collin J. Sutton * src/torrentwrapper.cpp: When moving downloaded files, use name from libtorrent 2008-11-07 Rene Milk * : Merge commit 'bd/master' 2008-11-07 Rene Milk * : Merge commit 'bd/master' 2008-11-07 Andrea Piras * INSTALL, src/tasserver.cpp: fixed hole punching 2008-11-07 Rene Milk * : commit 13a1073c939697aefbfa8ebb7a651ae4c6a30003 Author: Rene Milk Date: Fri Nov 7 21:50:14 2008 +0100 2008-11-07 Rene Milk * tools/update-translations-buildbot.sh: first draft of update script for translations 2008-11-07 Andrea Piras * : commit 4617025038798cf4f63d938f830ee21e02820326 Merge: fefe597 2c4a5b2 Author: Rene Milk Date: Fri Nov 7 00:15:58 2008 +0100 2008-11-07 Andrea Piras * src/autohost.cpp: fixed autohost mode in windows for good 2008-11-06 Andrea Piras * src/chatpanel.cpp: show highlight color for server messages only in server tab 2008-11-06 Rene Milk * : Merge commit 'bd/master' 2008-11-04 Andrea Piras * src/chatpanel.cpp, src/mainchattab.cpp: fixed server tab not getting icon hightlights (now it does but with an ugly color) 2008-11-04 Andrea Piras * src/settings.cpp: fixed crash when having invalid unitsync in current settings (uncaught assertion) 2008-11-04 Andrea Piras * src/torrentlistctrl.cpp: fixed column headers not being translated 2008-11-03 Andrea Piras * src/mainwindow.cpp: fixed main tab's strings not being translated 2008-11-03 Andrea Piras * : commit 2de4aeac961269d72e3602334ba06e12f143ad9f Author: Andrea Piras Date: Mon Nov 3 22:37:48 2008 +0100 2008-11-03 Andrea Piras * CMake_Setup.sh: removed obsolete file 2008-11-03 Rene Milk * src/settings++/Main.cpp: fix msw compile for SS 2008-11-03 Rene Milk * src/settings.cpp: fix msw compile for SL 2008-11-02 Rene Milk * : commit 7e52711f15af5f45b699bf833f6ceda84f333e6a Merge: 93bcfa9 045c82a Author: Rene Milk Date: Sun Nov 2 22:38:20 2008 +0100 2008-11-02 Rene Milk * : commit 45ba174d3612bf27808a244db6e648a640b4a39a Author: Rene Milk Date: Sun Nov 2 22:19:42 2008 +0100 2008-11-02 Rene Milk * src/settings++/custom_dialogs.cpp, src/springunitsync.cpp: added the notice to some usync funcs, isn't showing much for me tho :/ 2008-11-02 Rene Milk * : hopefully completed refactor, also: commit 6bd2ebdeaa680167876fe5d8e78dd9d5170e9321 Author: Collin J. Sutton Date: Sun Nov 2 10:36:32 2008 -0800 2008-11-02 Collin J. Sutton * src/settings.cpp, src/settings.h, src/torrentwrapper.cpp: GetTorrentDir and GetTorrentDataDir now return wxFileName 2008-11-02 Rene Milk * : commit 1e0e48df9a38a83e9d28d8645f06a5938ccef58f Author: Dmytry Date: Sat Nov 1 22:38:04 2008 +0200 2008-11-01 Collin J. Sutton * src/torrentwrapper.cpp: Create the temporary subdirectory if it doesn't exist. 2008-11-01 Collin J. Sutton * Doxyfile, src/settings.cpp, src/settings.h, src/torrentwrapper.cpp: First try on temp. download directory 2008-11-01 Dmytry * src/globalsmanager.cpp: Fixed tiny but important mistake, forgot to return true . 2008-10-08 Collin J. Sutton * CMakeLists.txt: Prefer dynamic libraries (avoids missing link deps issues) 2008-10-06 Collin J. Sutton * tools/update-potfileslist.sh: Rewrote tools/update-potfiles.sh 2008-11-02 Andrea Piras * : commit 0b4dd1e354c868ed525deceb86bfdd12f8f1c87c Author: Andrea Piras Date: Sun Nov 2 04:02:23 2008 +0100 2008-11-02 Andrea Piras * src/torrentwrapper.cpp: improved seed/leech gui show in torrent listing 2008-11-02 Andrea Piras * src/torrentwrapper.cpp: better logic and a bit more decent logging 2008-11-02 Rene Milk * src/torrentwrapper.cpp: fixed double declaration of path 2008-11-02 Andrea Piras * : commit 786d2e87821fbe523ff6f16f1f740ff6d6cf41ec Author: Andrea Piras Date: Sun Nov 2 02:06:45 2008 +0100 2008-11-02 Rene Milk * src/battleroomtab.cpp: fixes 626 2008-11-02 Rene Milk * : commit dbc151a0744614b43827799080518e2a504e5025 Author: Rene Milk Date: Sun Nov 2 01:09:08 2008 +0100 2008-11-02 Rene Milk * src/iconimagelist.cpp: switch swords and red bg on ICON_STARTED_GAME_LOCKED 2008-11-02 Rene Milk * src/torrentwrapper.cpp, src/torrentwrapper.h, src/ui.cpp: changed return value when torrent is missing in table (when requested) 2008-11-02 Rene Milk * src/torrentwrapper.cpp, src/torrentwrapper.h: Signed-off-by: Rene Milk 2008-11-02 Rene Milk * src/maintorrenttab.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h: moved enum FileStatus into stupidly named, but seperate namespace 2008-11-02 Rene Milk * src/filelister/filelistdialog.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h, src/ui.cpp: moved Downloadrequest enum to class scope 2008-11-02 Rene Milk * src/ui.cpp, src/ui.h: removed code duplication 2008-11-01 Rene Milk * src/battlelisttab.cpp, src/replay/replaytab.cpp: - fixed typo 2008-11-01 Rene Milk * src/lobbyoptionstab.cpp: -fixed minor layout inconsitency -fixed lobbyoptions tab not being scrollalble 2008-11-01 Andrea Piras * : commit ff9439a74a3abcc371922a415b365faf4e48f576 Author: Rene Milk Date: Sat Nov 1 21:22:35 2008 +0100 2008-11-01 Rene Milk * : commit d0fec3731a5371dd8d5fc3c9e44d7953f4e29c3d Merge: 0cb1b6d 39fbc57 Author: Tommy Carlsson Date: Sat Nov 1 20:39:25 2008 +0100 2008-11-01 Andrea Piras * src/singleplayertab.cpp: fixed singleplayer battle 2008-11-01 Dmytry * src/mainwindow.cpp, src/mainwindow.h: Added 'Save options' to file menu. 2008-10-31 Andrea Piras * src/battleroomtab.cpp, src/settings.cpp, src/settings.h: now SL saves battle autolock status 2008-10-31 Andrea Piras * src/spring.cpp: added MyPlayerName support 2008-10-31 Andrea Piras * src/spring.cpp: added IsHost tag to script.txt 2008-10-29 Andrea Piras * src/spring.cpp: fixed spring launching 2008-10-29 Andrea Piras * src/replay/replaytab.cpp: fixed spring version not being detected in replay tab 2008-10-29 Andrea Piras * src/ui.cpp: don't reset filter enable on disconnect 2008-10-29 Andrea Piras * src/replay/replaytab.cpp: now the replay tab handles spring version check 2008-10-29 Andrea Piras * src/singleplayerbattle.cpp: remove bots from single player when switching mod 2008-10-29 Andrea Piras * src/settings++/frame.cpp, src/settings.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: safeguards to avoid unitsync being de-init'ed 2008-10-29 Andrea Piras * src/settings.cpp, src/ui.cpp: now SL detects properly spring versions 2008-10-29 Andrea Piras * springlobby.cbp, src/ui.cpp: now SL auto switched to the right profile when connecting to a server 2008-10-29 Andrea Piras * src/settings++/Main.cpp: force portable mode only for win :P 2008-10-29 Andrea Piras * src/settings++/Main.cpp, src/settings.cpp, src/settings.h: added back forcing of portable mode for springsettings 2008-10-29 Andrea Piras * CMakeLists.txt, Makefile.am, src/iunitsync.h, src/settings.cpp, src/springunitsync.cpp, src/springunitsync.h: fuck buildsystems 2008-10-29 Andrea Piras * CMakeLists.txt, Makefile.am: moar buildsystem fixes 2008-10-29 Andrea Piras * CMakeLists.txt, Makefile.am, src/settings++/Main.cpp: forgot to commit buildsystem changes 2008-10-29 Andrea Piras * src/settings++/panel_pathoption.cpp, src/settings++/se_utils.cpp, src/settings++/tab_abstract.cpp, src/settings++/tab_quality_video.cpp, src/settings++/tab_simple.cpp, src/settings.cpp, src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h, src/unitsyncthread.cpp: fixed susynclib returing reference and not a pointer, added DoInit param to SpringUnitsyncLib to specify whenever init should be auto-run after load 2008-10-29 Andrea Piras * src/settings++/frame.cpp, src/settings++/panel_pathoption.cpp, src/settings++/se_settings.cpp, src/settings++/se_settings.h, src/settings++/se_utils.cpp, src/settings++/tab_abstract.cpp, src/settings++/tab_simple.cpp, src/settings.cpp, src/settings.h, src/springoptionstab.cpp, src/springoptionstab.h: now springsettings shares the static config class with springlobby (removed tons of code duplication) 2008-10-29 Andrea Piras * : commit 24796dff7b10ea884dd64acf0041366814455f90 Author: Andrea Piras Date: Wed Oct 29 14:52:57 2008 +0100 2008-10-29 Andrea Piras * src/settings++/se_settings.cpp: fixed springsettings 2008-10-29 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springunitsync.cpp: added compatibility layer to temporaney make old spring paths to work 2008-10-29 Andrea Piras * src/serverevents.cpp: fixed crash on setchanneltopic for non existing channels 2008-10-28 Andrea Piras * src/chatoptionstab.cpp, src/chatoptionstab.h, src/lobbyoptionstab.cpp, src/lobbyoptionstab.h, src/settings.cpp, src/settings.h, src/spring.cpp, src/spring.h, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springoptionstab.h, src/springunitsync.cpp, src/torrentwrapper.cpp, src/ui.cpp: added support for multiple spring versions, need some tweaks in order to be able to change them on the fly and auto pick the correct one when connecting to the server 2008-10-28 Andrea Piras * src/torrentwrapper.cpp: fixed libtorrent so it renames files in torrent descriptor before seeding (will allow more seeds) (untested) 2008-10-27 Andrea Piras * src/torrentwrapper.cpp: fixed torrent creation so it uses VFS to find the archive path 2008-10-27 Andrea Piras * src/iunitsync.h, src/singleplayertab.cpp, src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: now SL gets datadir directly from unitsync the "proper way" 2008-10-27 Andrea Piras * src/iunitsync.h, src/mainoptionstab.cpp, src/mainoptionstab.h, src/mainwindow.cpp, src/mainwindow.h, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springoptionstab.h, src/springunitsync.cpp, src/springunitsync.h, src/tasserver.cpp: removed springdatadir gui from SL, soon will start fetching from spring itself 2008-10-27 Andrea Piras * src/battlelisttab.cpp: refined element auto hiding in battle list 2008-10-26 Rene Milk * src/nicklistctrl.cpp: possibly fixes 634 2008-10-26 Rene Milk * : Merge commit 'bd/master' 2008-10-25 Andrea Piras * : commit ffe70d0e426a0800e04ab0997885401cdab67aab Merge: 84e7895 7b647dc Author: Rene Milk Date: Thu Oct 23 19:59:47 2008 +0200 2008-10-23 Andrea Piras * src/springunitsynclib.cpp, src/springunitsynclib.h: added code for new stle of unitsync error handling 2008-10-22 Rene Milk * : commit 34222e387c54102573591ede1c74442f2ad0d87e Merge: 4097434 3c5c253 Author: Rene Milk Date: Wed Oct 22 11:37:54 2008 +0200 2008-10-22 Andrea Piras * src/battlelistctrl.cpp: preserve sorting in started games 2008-10-22 Andrea Piras * src/aui/artprovider.cpp: fuck #includes 2008-10-22 Andrea Piras * src/aui/auiuitls.h, src/aui/auiutils.h: fixed filename 2008-10-21 Rene Milk * : commit 409743429cc6c98832fe77fb0dfa826f0e989a18 Author: Rene Milk Date: Tue Oct 21 22:25:14 2008 +0200 2008-10-21 Rene Milk * src/aui/auiuitls.h, src/aui/auiutils.h: properly renamed file 2008-10-21 Rene Milk * src/utils.cpp: clamped cpuspeed to prevent possible error on neg number 2008-10-21 Rene Milk * src/utils.cpp: fixed type error on msw 2008-10-21 Rene Milk * : commit 9d548ec72ddf28fd3ef4ffa2b662c34dc96d5132 Author: Andrea Piras Date: Tue Oct 21 21:57:51 2008 +0200 2008-10-21 Rene Milk * src/aui/auimanager.cpp: fixes include pathe rror when building with cmake 2008-10-21 Andrea Piras * src/utils.cpp: fixed build in mingw 2008-10-21 Andrea Piras * src/iconimagelist.cpp, src/utils.cpp: fixed compile errors in win 2008-10-21 Rene Milk * : commit 202472aa2db1d902013c612f877acbeeb130b879 Author: Rene Milk Date: Tue Oct 21 21:07:06 2008 +0200 2008-10-21 Andrea Piras * src/serverevents.cpp: fixed compiler errors 2008-10-20 Rene Milk * Makefile.am, src/customlistctrl.h, src/mainwindow.cpp: use custom artprovider for mainwindow tabs too revert back to native listctrl on win 2008-10-21 Rene Milk * : commit 79f9bbe15c96df3c2e964e60ddf2c9a8deea5786 Author: Dmytry Date: Tue Oct 21 16:46:58 2008 +0300 2008-10-21 Dmytry * src/utils.cpp: Cleaned up and fixed /proc/cpuinfo parsing (much simpler now). 2008-10-21 Rene Milk * src/mmoptionmodel.h, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: added wxfileconfig to store section keys in a tree 2008-10-20 Dmytry * CMakeLists.txt, Makefile.am, src/updater/updater.cpp: makefiles fixed, error in updater.cpp fixed 2008-10-21 Andrea Piras * src/battle.cpp, src/battle.h, src/globalsmanager.h, src/server.cpp, src/server.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp: Added new exception GlobalRecursiveError, thrown by GlobalObjectHolder when trying to access global that is being constructed. Replaced m_ui with ui() in some classes, to minimize risk of dangling references. Conflicts: src/serverevents.cpp src/tasserver.h 2008-10-20 Dmytry * src/globalsmanager.h, src/springunitsync.cpp: Catch GlobalDestroyedError when destroying SpringUnitSync on exit. 2008-10-20 Dmytry * CMakeLists.txt: updated CMakeLists.txt 2008-10-20 Dmytry * springlobby.cbp, src/auimanager.cpp, src/battlelisttab.cpp, src/customlistctrl.cpp, src/globalevents.cpp, src/globalevents.h, src/globalsmanager.cpp, src/globalsmanager.h, src/mainwindow.cpp, src/replay/replaytab.cpp, src/serverevents.cpp, src/settings.cpp, src/springlobbyapp.cpp, src/springunitsync.cpp, src/springunitsynclib.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h, src/ui.cpp, src/unitsyncthread.cpp, src/updater/updater.cpp, src/useractions.cpp: added GlobalsManager 2008-10-21 Rene Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h: tweaked layout a little 2008-10-21 Rene Milk * src/battleroommmoptionstab.cpp: tweaked layout a little layout 2008-10-21 Andrea Piras * : commit 1b23c642453adf7538e6dde7794af58e10e6a450 Author: Andrea Piras Date: Tue Oct 21 17:17:07 2008 +0200 2008-10-21 Andrea Piras * src/battle.cpp, src/battle.h, src/battleoptionstab.cpp, src/battleroomtab.cpp, src/battleroomtab.h, src/ibattle.cpp, src/tasserver.cpp, src/ui.cpp: added option to autolock battle on game start 2008-10-20 Andrea Piras * : commit 8946045afca93b86b7e8badc2860bec718add19f Merge: 6a4593f bba0f6a Author: Andrea Piras Date: Mon Oct 20 20:30:21 2008 +0200 2008-10-20 Andrea Piras * src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp: fixed order of tabs (options and restrictions ) 2008-10-20 Andrea Piras * src/battleoptionstab.cpp, src/battleoptionstab.h, src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp, src/singleplayertab.cpp, src/singleplayertab.h: moved checkbox of random start pos to singleplayer tab 2008-10-20 Andrea Piras * src/battleoptionstab.cpp, src/battleoptionstab.h, src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp, src/mmoptionswrapper.cpp: removed (most of ) engine settings, gave a swept trought the gui, still needs work especially in the gui 2008-10-19 Andrea Piras * src/tasserver.cpp: fixed hangs when trying hole punching 2008-10-19 Rene Milk * src/mmoptionmodel.cpp, src/mmoptionmodel.h: added section type option 2008-10-19 Rene Milk * src/mmoptionmodel.cpp, src/mmoptionmodel.h, src/springunitsync.cpp: cache section and style 2008-10-19 Rene Milk * src/springunitsync.cpp: changed func name for more clarity 2008-10-19 Rene Milk * src/springunitsync.cpp: removed even more duplicated code 2008-10-19 Rene Milk * src/springunitsync.cpp: removed _lots_ of duplicated code 2008-10-19 Rene Milk * src/springunitsync.cpp: simplifeid modoption cache file writing 2008-10-19 Rene Milk * src/mmoptionmodel.cpp, src/mmoptionmodel.h: added section/ct_style to indiviual optionmodels 2008-10-19 Rene Milk * src/springunitsynclib.cpp, src/springunitsynclib.h: extract style/section funcs from unitsync 2008-10-19 Tobi Vollebregt * src/mapctrl.cpp, src/mapctrl.h: show percentage of total metal instead of absolute amounts (Absolute amount is influenced by the extraction depth of the building that's extracting it, plus it doesn't take into account things like mex overdrive.) 2008-10-19 Tobi Vollebregt * src/mapctrl.cpp, src/mapctrl.h: precalculate cumulative metal distribution (This way GetStartRectMetal, which is called everytime in OnPaint, does not need to do (nested) loops over metalmap.) 2008-10-19 Rene Milk * src/aui/auimanager.cpp, src/battleoptionstab.cpp: fixed conflict resolve fixed cmake build error 2008-10-19 Rene Milk * : commit 5f19fc3d313ab4880d537f5cc65c7f7a99baf72b Merge: bba0f6a ca02cea Author: Rene Milk Date: Sun Oct 19 15:59:49 2008 +0200 2008-10-19 Rene Milk * src/aui/artprovider.cpp: fixed apllying new bd text color to all tabs 2008-10-19 Andrea Piras * src/aui/artprovider.cpp, src/mainchattab.cpp, src/utils.h: fixed compiler error, attempt at auto creating a different color in aui if font & background are too similar 2008-10-19 Rene Milk * src/aui/artprovider.cpp, src/aui/artprovider.h: added missing files 2008-10-19 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/Helper/auiuitls.h, src/aui/auibook.cpp, src/aui/auibook.h, src/aui/auimanager.cpp, src/aui/auimanager.h, src/aui/auiuitls.h, src/mainchattab.cpp, src/mainwindow.cpp: removed own notebook impl moved auiutils added text to top tabs 2008-10-18 Andrea Piras * src/chatpanel.cpp: fixed disconnect detection in chatpanel 2008-10-18 Andrea Piras * src/battleoptionstab.cpp, src/mmoptionswrapper.cpp: fixed fixedallies option 2008-10-17 Rene Milk * src/aui/auibook.cpp: deliberate segfault inserted 2008-10-17 Rene Milk * src/aui/auibook.cpp, src/aui/auibook.h, src/aui/auimanager.cpp, src/aui/auimanager.h, src/mainwindow.cpp, src/mainwindow.h: copied auinotebook works 2008-10-17 Rene Milk * springlobby.cbp, src/aui/auibook.cpp, src/aui/auibook.h, src/aui/auimanager.cpp, src/aui/auimanager.h, src/auimanager.cpp, src/auimanager.h, src/battlelistctrl.cpp, src/battlelistfilter.cpp, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroomlistctrl.cpp, src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/chatoptionstab.cpp, src/chatpanel.cpp, src/lobbyoptionstab.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainoptionstab.cpp, src/mainsingleplayertab.cpp, src/maintorrenttab.cpp, src/mainwindow.cpp, src/managegroupspanel.cpp, src/singleplayertab.cpp, src/torrentoptionspanel.cpp: moved auimanager 2008-10-17 Andrea Piras * src/autohost.cpp: hopefully fixed autohost mode in windows 2008-10-16 Rene Milk * src/auimanager.cpp, src/auimanager.h: the whole shit events fucker ain't working 2008-10-16 Andrea Piras * src/utils.h: print file and line number on assertion message 2008-10-16 Rene Milk * src/auimanager.cpp, src/auimanager.h, src/customlistctrl.cpp, src/customlistctrl.h, src/mainwindow.cpp, src/mainwindow.h, src/uiutils.cpp, src/uiutils.h: derived a new auinotebook moved SLtipwindow to uiutils 2008-10-14 Rene Milk * src/torrentwrapper.cpp: catch libtorrent::invalid_encoding in TorrentWrapper::JoinTorrent 2008-10-14 Rene Milk * : commit 966f393bf02ad7e39fecd6883cafa200b120c394 Merge: 83d483e 9d9d00b Author: Rene Milk Date: Tue Oct 14 01:50:34 2008 +0200 2008-10-14 Rene Milk * : commit 9d9d00b8509c4ad906195fbd799c6ed1a9f6e62f Author: Rene Milk Date: Tue Oct 14 00:41:24 2008 +0200 2008-10-14 Rene Milk * : commit 985c1dfc7c32e1fa220940c6eb3799876b06c841 Author: Rene Milk Date: Tue Oct 14 00:34:18 2008 +0200 2008-10-13 Rene Milk * src/Helper/TextCompletionDatabase.cpp, src/Helper/wxtextctrlhist.cpp, src/autohost.cpp, src/settings.cpp, src/settings.h, src/utils.cpp, src/utils.h: - moved neareast match funcs to utils - new settings function for getting completeion mode 2008-10-13 Tobi Vollebregt * src/mapctrl.cpp: allow switching to metalmap in readonly mode (but not in battlelist) 2008-10-13 Rene Milk * src/mapctrl.cpp, src/mapctrl.h: MAPCTRL 2008-10-13 Rene Milk * src/battlelisttab.cpp, src/battleoptionstab.cpp, src/replay/replaytab.cpp, src/springlobbyapp.cpp, src/uiutils.h: some more defines removeed 2008-10-13 Rene Milk * src/spring.cpp: changed to const_iterator 2008-10-13 Rene Milk * src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/battleroomtab.cpp, src/battleroomtab.h, src/ibattle.cpp, src/ibattle.h, src/mainsingleplayertab.cpp, src/mapctrl.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/replay/replaylist.cpp, src/serverevents.cpp, src/singleplayerbattle.cpp, src/singleplayertab.cpp, src/spring.cpp, src/tasserver.cpp: renamed mmtopionwrapper and removed global types there 2008-10-13 Tobi Vollebregt * : Merge commit 'bd/master' into metalmap 2008-10-13 Rene Milk * src/tasserver.h: tasserver types/define 2008-10-13 Rene Milk * src/battleroomtab.cpp, src/channellist.cpp, src/spring.cpp, src/tasserver.cpp, src/userlist.cpp, src/userlist.h: userlist types 2008-10-13 Rene Milk * src/iconimagelist.cpp, src/tasserver.cpp, src/user.cpp, src/user.h: user enum 2008-10-13 Rene Milk * src/battle.h, src/mainwindow.h: important change of default host port in battle 2008-10-13 Rene Milk * src/battleroommmoptionstab.cpp, src/iunitsync.h, src/mmoptionswrapper.cpp: iunitsync types 2008-10-13 Rene Milk * src/filelister/filelistctrl.cpp, src/filelister/filelistdialog.cpp, src/filelister/filelistfilter.cpp, src/iunitsync.h, src/mapctrl.cpp, src/singleplayertab.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h: iunitsync enums 2008-10-13 Rene Milk * src/battle.h, src/battleroomlistctrl.h, src/channel.h, src/customlistctrl.h, src/server.h: defines into constants 2008-10-13 Rene Milk * src/settings.h, src/ui.h: settings default 2008-10-13 Rene Milk * src/battleroomlistctrl.cpp, src/customlistctrl.cpp, src/customlistctrl.h, src/filelister/filelistctrl.cpp, src/nicklistctrl.cpp, src/replay/replaylistctrl.cpp, src/torrentlistctrl.cpp: removed define of tooltip delay in favor of "real" var 2008-10-13 Rene Milk * src/battlelistctrl.h, src/battlelisttab.cpp, src/battlelisttab.h, src/battlemaptab.h, src/battleoptionstab.h, src/battleroomlistctrl.h, src/battleroomtab.h, src/connectwindow.h, src/hostbattledialog.h, src/mainchattab.h, src/mainjoinbattletab.h, src/mainoptionstab.h, src/mainwindow.h, src/nicklistctrl.h, src/singleplayertab.h, src/springoptionstab.h, src/torrentlistctrl.h: GUI enums (button/event ids and such) 2008-10-13 Rene Milk * src/battlelist.cpp, src/battlelist.h: battöeist types 2008-10-13 Rene Milk * src/autohost.cpp, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroomtab.cpp, src/ibattle.h, src/mapctrl.cpp, src/serverevents.cpp, src/singleplayertab.cpp, src/spring.cpp, src/tasserver.cpp: battle constants 2008-10-13 Rene Milk * src/addbotdialog.h, src/agreementdialog.h, src/autohost.cpp, src/battle.h, src/battlelisttab.cpp, src/ibattle.h, src/serverevents.cpp, src/serverevents.h, src/settings++/custom_dialogs.h, src/spring.cpp, src/tasserver.cpp, src/ui.cpp: battle enums 2008-10-13 Rene Milk * src/Helper/TextCompletionDatabase.cpp, src/Helper/TextCompletionDatabase.hpp, src/Helper/wxtextctrlhist.h, src/filelister/filelistctrl.cpp, src/replay/replaylist.h, src/replay/replaylistctrl.cpp, src/replay/replaylistctrl.h, src/replay/replaytab.cpp, src/replay/replaytab.h, src/springprocess.h, src/springunitsync.h, src/tasserver.h, src/torrentlistctrl.cpp, src/torrentlistctrl.h, src/torrentwrapper.h, src/updater/exedownloader.h, src/updater/updater.h, src/updater/versionchecker.h, src/userlistctrl.h: last part of header moving 2008-10-13 Rene Milk * src/chatoptionstab.h, src/globalevents.h, src/groupoptionspanel.cpp, src/groupoptionspanel.h, src/ibattle.h, src/iconimagelist.h, src/mainchattab.h, src/maintorrenttab.h, src/mmoptionswrapper.h, src/nicklistctrl.h, src/selectusersdialog.cpp, src/selectusersdialog.h, src/singleplayerbattle.h, src/spring.h, src/springoptionstab.h: yet more headers removed 2008-10-13 Rene Milk * src/addbotdialog.cpp, src/agreementdialog.cpp, src/agreementdialog.h, src/autobalancedialog.cpp, src/autobalancedialog.h, src/autohost.h, src/autojoinchanneldialog.h, src/battle.cpp, src/battlelist.cpp, src/battlelistctrl.cpp, src/battlelisttab.h, src/battlemaptab.h, src/battleoptionstab.h, src/battleroomtab.h, src/chatlog.h, src/countrycodes.h, src/crashreport.h, src/customlistctrl.h, src/flagimages.h, src/ibattle.cpp, src/ibattle.h, src/mainwindow.cpp, src/serverevents.h, src/settings++/custom_dialogs.h: moved more headers away 2008-10-13 Rene Milk * src/selectusersdialog.cpp, src/settings.cpp, src/settings.h, src/ui.h, src/uiutils.h, src/usermenu.h, src/utils.h: moved more includes out of headers 2008-10-13 Rene Milk * src/autohost.cpp, src/battle.cpp, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/channel.cpp, src/channellist.cpp, src/chatlog.cpp, src/chatpanel.cpp, src/connectwindow.cpp, src/customlistctrl.cpp, src/flagimages.cpp, src/hostbattledialog.cpp, src/httpdownloader.cpp, src/ibattle.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainoptionstab.cpp, src/mainsingleplayertab.cpp, src/mapctrl.cpp, src/mmoptionswrapper.cpp, src/nicklistctrl.cpp, src/replay/replaylist.cpp, src/replay/replaylistctrl.cpp, src/replay/replaytab.cpp, src/server.cpp, src/settings.cpp, src/singleplayerbattle.cpp, src/singleplayertab.cpp, src/socket.cpp, src/springoptionstab.cpp, src/springprocess.cpp, src/springunitsync.cpp, src/springunitsynclib.cpp, src/tasserver.cpp, src/tdfcontainer.cpp, src/uiutils.cpp, src/updater/exedownloader.cpp, src/updater/versionchecker.cpp, src/userlist.cpp, src/utils.cpp, src/utils.h: moved #include out of utils header 2008-10-13 Rene Milk * : commit 7887f13e503fb60c80c06f506873a8837720176e Author: Andrea Piras Date: Mon Oct 13 00:52:04 2008 +0200 2008-10-13 Andrea Piras * src/connectwindow.cpp, src/connectwindow.h: fixed login dialog to use more proper sizer for buttons 2008-10-12 Rene Milk * : commit dfbbc671f256efd97326513010cc020182848115 Author: Rene Milk Date: Sun Oct 12 15:31:49 2008 +0200 2008-10-11 Tobi Vollebregt * src/mapctrl.cpp: fix crash when metalmap isn't loaded 2008-10-09 Tobi Vollebregt * src/mapctrl.cpp, src/mapctrl.h: show metal in start rect 2008-10-09 Tobi Vollebregt * src/springunitsync.cpp: fix caching of maxMetal, it is a float not a long! 2008-10-09 Tobi Vollebregt * src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.cpp: added GetMinimap/GetMetalmap methods which return native size image 2008-10-11 Andrea Piras * src/utils.cpp: added support for AUX_VERSION in the #defines, if defined will get appened to the version string with a space as separator 2008-10-11 Rene Milk * src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h: refactor 2008-10-11 Rene Milk * src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h: wrapper for notice 2008-10-11 Rene Milk * src/mainwindow.cpp, src/settings++/custom_dialogs.cpp: Signed-off-by: Rene Milk 2008-10-11 Rene Milk * src/mainwindow.cpp, src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h: prototype working 2008-10-11 Rene Milk * src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h: initial work, untested 2008-10-10 Rene Milk * src/replay/replaylist.cpp, src/replay/replaylist.h, src/replay/replaytab.cpp, src/springunitsync.cpp: commented some unnecessary stuff, tweakek mem handling a little 2008-10-10 Andrea Piras * : commit 3f8acb535e511a1a0223eff726994c7ea15e5b1d Author: Dmytry Lavrov Date: Fri Oct 10 19:48:13 2008 +0300 2008-10-10 Rene Milk * springlobby.cbp, src/Helper/auiuitls.h, src/auimanager.cpp, src/auimanager.h, src/mainchattab.cpp: copied defaulttabartprovider from wx source and made it compile. copy was needed, not my idea 2008-10-10 Dmytry Lavrov * springlobby.cbp, src/springunitsync.cpp, src/springunitsynclib.cpp: Possibly fixed close crash in springunitsynclib (segfault in critical section lock or unlock, on win32) 2008-10-10 Rene Milk * src/mapctrl.cpp: dammit introduced compile error, fixed 2008-10-10 Rene Milk * src/mapctrl.cpp: reverted fubared merge/oush/whatever 2008-10-10 Rene Milk * : commit 8bcc04a7f2f765262eff376d90501045998e0137 Merge: db8d505 a77ad7d Author: Dmytry Lavrov Date: Fri Oct 10 14:53:16 2008 +0300 2008-10-10 Rene Milk * : commit db8d505dade25795eb5fd623356c10063848a0ac Author: Dmytry Lavrov Date: Fri Oct 10 12:31:52 2008 +0300 2008-10-10 Andrea Piras * src/chatpanel.cpp: fixed icons highlights in channels now showing correctly 2008-10-10 Andrea Piras * src/tasserver.cpp: useless 2008-10-10 Andrea Piras * : commit 050a41679220716cfd38bbc5dc280e18d5d498a3 Author: Andrea Piras Date: Fri Oct 10 00:10:03 2008 +0200 2008-10-10 Dmytry Lavrov * src/ibattle.h, src/mapctrl.cpp, src/mapctrl.h: Fixed start rect crash (hopefully). 2008-10-09 Andrea Piras * src/tasserver.cpp: fixed win build 2008-10-09 Andrea Piras * CMakeLists.txt, Makefile.am, src/disphelper.c, src/disphelper.h, src/tasserver.cpp: possibly fixed this for good 2008-10-09 Andrea Piras * CMakeLists.txt, Makefile.am: fixed typos 2008-10-09 Andrea Piras * CMakeLists.txt, Makefile.am, springlobby.cbp, src/disphelper.c, src/disphelper.h: forgot to commit buildsystem changes 2008-10-09 Andrea Piras * src/tasserver.cpp, src/tasserver.h: fixed login data 2008-10-09 Rene Milk * src/mapctrl.cpp, src/utils.h: should fix box crash 2008-10-09 Andrea Piras * : commit 0cb1b6d45906316cc1a667ecc6256b5002b39ccf Merge: 31ebf6a 9f42d64 Author: Tommy Carlsson Date: Thu Oct 9 21:32:30 2008 +0200 2008-10-09 Andrea Piras * : commit 0f30505a6434b514862c524e9b90db8050c43297 Author: Rene Milk Date: Thu Oct 9 20:56:58 2008 +0200 2008-10-09 Tommy Carlsson * : Merge commit 'bd/master' 2008-10-09 Dmytry Lavrov * src/replay/replaylist.cpp, src/replay/replaylistctrl.cpp, src/replay/replaylistctrl.h, src/replay/replaytab.cpp: Before reloading, remove sort order icon (it isnt sorted after reload yet). 2008-10-09 Andrea Piras * : commit b4164052f8bb35629735001c9f644cbe2f5c82f0 Author: Andrea Piras Date: Thu Oct 9 18:13:47 2008 +0200 2008-10-09 Dmytry Lavrov * src/battlelistctrl.cpp, src/replay/replaylist.cpp, src/replay/replaylistctrl.cpp, src/replay/replaylistctrl.h, src/replay/replaytab.cpp, src/replay/replaytab.h: Replay fixes: sorting works, mapctrl crashbug fixed (?), "deleting when deselected" bug fixed, possibly few other bugs fixed as well. 2008-10-09 Andrea Piras * : commit ed54ae46e029605b0b4eb86a16be76c3ff8328e6 Author: Dmytry Lavrov Date: Thu Oct 9 15:37:22 2008 +0300 2008-10-09 Dmytry Lavrov * src/iunitsync.h, src/replay/replaylist.cpp, src/replay/replaylist.h, src/springunitsync.cpp, src/springunitsync.h: replay bugfixes: duplicate files ignored, script extraction bug fixed, memory leak fixed, count off by 1 bug fixed. 2008-10-09 Rene Milk * : commit d90fb86127d384c5a2232713261a6a5073f3cafd Author: Dmytry Lavrov Date: Thu Oct 9 11:49:23 2008 +0300 2008-10-09 Dmytry Lavrov * src/replay/replaylist.cpp, src/replay/replaylist.h, src/replay/replaylistctrl.cpp, src/replay/replaytab.cpp: Many replay bugs fixed, O(n^2) fixed as well. 'GetReplay' removed, GetReplayById should be used instead. 2008-10-09 Dmytry Lavrov * src/springunitsync.cpp: Fix by Det: CA crash in singleplayer. 2008-10-09 Dmytry Lavrov * : commit 1bd4f0509478274e31600b4358e8434d73d5e2af Author: Andrea Piras Date: Thu Oct 9 03:57:30 2008 +0200 2008-10-09 Andrea Piras * src/chatpanel.cpp: fixing highlighting of your own colour in chat 2008-10-09 Andrea Piras * src/serverevents.cpp: fixed Fucking fucked fucking mod fucking options broken which lead to desync 2008-10-09 Rene Milk * src/springoptionstab.cpp: added "lib" prefix to autofind unitsync options 2008-10-08 Tommy Carlsson * : Merge commit 'koshi/master' 2008-10-08 Rene Milk * src/battleoptionstab.cpp, src/serverevents.cpp: fix build errors after merge of 077 2008-10-08 Rene Milk * : commit f031f640ef9e7914498a62a1a18dc38a2bfd5903 Merge: 22cb04f d6a31f0 Author: Rene Milk Date: Wed Oct 8 21:10:36 2008 +0200 2008-10-08 Rene Milk * src/replay/replaylist.cpp, src/replay/replaytab.cpp: removed obsoltete comments 2008-10-08 Tommy Carlsson * : Merge commit 'koshi/master' 2008-10-08 Andrea Piras * src/chatpanel.cpp: now SL no more highlights when current user talks in a PM window 2008-10-08 Rene Milk * : commit 87a20d34c372e320ba80409ea0b1baf13bb614e0 Author: Rene Milk Date: Wed Oct 8 16:43:58 2008 +0200 2008-10-08 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h: removed tons of code duplication in chatpanel, now PM icon highlight works again in AUI 2008-10-08 Tommy Carlsson * : Merge commit 'koshi/master' 2008-10-08 Tommy Carlsson * : Merge commit 'koshi/master' 2008-10-08 Rene Milk * : commit e664e71a1f7489c9d571f4697feddd844017ffd8 Author: Rene Milk Date: Wed Oct 8 15:10:18 2008 +0200 2008-10-08 Andrea Piras * src/replay/replaylist.cpp: fixed typo 2008-10-08 Rene Milk * : commit f90fe765695bdef405c42ddf9ca59462d5886451 Author: Andrea Piras Date: Wed Oct 8 14:57:06 2008 +0200 2008-10-08 Tommy Carlsson * : Merge commit 'koshi/master' 2008-10-08 Tommy Carlsson * : Merge commit 'koshi/master' 2008-10-08 Rene Milk * src/replay/replaylistctrl.cpp: better default sizes for columns in replaytab 2008-10-08 Rene Milk * src/mainwindow.cpp: fixes wrong order of maintabs 2008-10-08 Rene Milk * src/mainwindow.cpp: possibly fixes transparent pixel border on msw 2008-10-08 Rene Milk * src/mainoptionstab.cpp: another fix for missing tab 2008-10-08 Rene Milk * src/mainoptionstab.cpp: fixed FUBAR mainsettings tab 2008-10-08 Andrea Piras * src/settings.h: bumped settings & cache version 2008-10-08 Andrea Piras * : commit ca81bca03150584cddb3287e697c3e2b8717318d Merge: f1ff632 eee86be Author: Andrea Piras Date: Wed Oct 8 04:23:09 2008 +0200 2008-10-08 Andrea Piras * : commit f5979ea6f320e6cadefff0a42128fb9316e807c4 Author: Rene Milk Date: Wed Oct 8 04:07:53 2008 +0200 2008-10-08 Rene Milk * src/replay/replaytab.cpp: removed extra reload of unitsync 2008-10-08 Andrea Piras * : commit 73eb478078909d098aa8cdeb8edf7a3cf998f3e0 Author: Rene Milk Date: Wed Oct 8 03:32:43 2008 +0200 2008-10-08 Rene Milk * src/replay/replaylistctrl.h, src/userlistctrl.h: fixes player selecting on replaytab crash 2008-10-08 Rene Milk * src/replay/replaytab.cpp, src/replay/replaytab.h, src/userlistctrl.cpp, src/userlistctrl.h: makes custom id for userlictctrl 2008-10-08 Rene Milk * src/replay/replaytab.cpp: no crash on delete replay 2008-10-08 Rene Milk * src/replay/replaylist.cpp, src/replay/replaylist.h, src/replay/replaytab.cpp: reload works properly (removing data from list as well as gui elements) 2008-10-08 Andrea Piras * : commit d4401e48128809f7a30c0facd31f0effe60b55db Author: Rene Milk Date: Wed Oct 8 01:57:43 2008 +0200 2008-10-08 Andrea Piras * src/chatpanel.cpp: no more random crashes ( no init ) 2008-10-08 Rene Milk * src/replay/replaylist.cpp, src/replay/replaytab.cpp: disable replayfilter by default fix a "off-by-one" possibly causing duplicates 2008-10-08 Andrea Piras * src/mainwindow.cpp: removed wrong tab added 2008-10-08 Rene Milk * src/images/replay_icon.png.h, src/mainwindow.cpp: fixed replay icon 2008-10-08 Andrea Piras * : commit 7fa8dcf697cb6f0bee859a3a6a7696451a9ae008 Author: Rene Milk Date: Wed Oct 8 01:00:51 2008 +0200 2008-10-08 Rene Milk * : commit f44f28b930629a7a38bae6d91c4e9085b2466f6c Merge: aaa15cf 451721c Author: Rene Milk Date: Tue Oct 7 23:43:16 2008 +0200 2008-10-07 Rene Milk * src/images/chat_icon.png.h, src/images/chat_icon_text.png.h, src/images/downloads_icon.png.h, src/images/join_icon.png.h, src/images/options_icon.png.h, src/images/single_player_icon.png.h, src/mainwindow.cpp, src/uiutils.cpp, src/uiutils.h: smaller icons for func tabs 2008-10-07 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h: ensure consistent EOL over multiple OS for multiline messages 2008-10-06 Tommy Carlsson * : Merge commit 'koshi/master' 2008-10-06 Rene Milk * : commit 50a16fab8621598e3cea28ffe6eef9a3a41b4e4c Author: Rene Milk Date: Mon Oct 6 23:24:41 2008 +0200 2008-10-06 Tommy Carlsson * : Merge commit 'koshi/master' 2008-10-06 Collin J. Sutton * CMakeLists.txt: Added new source files to CMakeLists.txt 2008-10-06 Rene Milk * src/channellistctrl.cpp, src/channellistctrl.h, src/replay/replaylistctrl.cpp, src/replay/replaylistctrl.h: fixed class names after merge 2008-10-06 Collin J. Sutton * : commit 2566bc9870599f7a3e8def0ec47f78a46f1c5aa6 Merge: bc5f0c9 9dbfd7f Author: Rene Milk Date: Mon Oct 6 21:36:31 2008 +0200 2008-10-06 Rene Milk * CMake_Setup.sh, autogen.sh, git-stat.sh, src/images/flags/mkflaghead.sh, tools/buildbot-create-build-dirs.sh, tools/buildbot-regen-makefiles.sh, tools/developer-merge.sh, tools/get-revision.sh, tools/make_header_from_png.sh, tools/newfile.sh, tools/test-tarball.sh, tools/update-buildbot.sh, tools/update-docs.sh, tools/update-ebuilds-slave.sh, tools/update-ebuilds.sh, tools/update-potfileslist.sh, tools/update-rpm.sh, tools/util.sh, tools/xcf2pngh.sh: fixed mixed up file modes (most of them anyways) 2008-10-06 Tommy Carlsson * src/springunitsync.cpp, src/springunitsynclib.cpp: Possibly fixed zombie bug 2008-10-06 Andrea Piras * : commit 42ee2b78a102fc983b2dd9516de3b7efe78a20ab Author: Tommy Carlsson Date: Tue Sep 30 19:57:08 2008 +0200 2008-09-30 Tommy Carlsson * Makefile.am: Fixed Makefile 2008-10-06 Andrea Piras * : commit 6bb1257d3d7983606a93001e1b67bd73d05426ac Merge: f88c3c1 96676e65 Author: Andrea Piras Date: Mon Oct 6 01:07:09 2008 +0200 2008-10-05 Dmytry Lavrov * src/battle.cpp: Fixed rank limit bug when user rank is unknown and you host with no rank limit. 2008-10-04 Dmytry Lavrov * src/battleroomlistctrl.cpp: Fixed crashbug when setting color of user that left battle. 2008-10-05 Tommy Carlsson * src/groupoptionspanel.cpp: Fixed groupoptions reload bug 2008-10-05 Tommy Carlsson * src/chatpanel.cpp, src/useractions.cpp: Minor changes 2008-10-05 Tommy Carlsson * src/chatpanel.cpp, src/customlistctrl.h, src/mainoptionstab.cpp, src/mainwindow.cpp, src/springunitsynclib.cpp, src/useractions.cpp: Fixed some crash bugs and update bug in groupoptions 2008-10-05 Dmytry Lavrov * : commit 39acbdfd0682ccf4742730513d99258ccc5fe47d Author: Collin J. Sutton Date: Sun Oct 5 12:12:09 2008 -0700 2008-10-05 Andrea Piras * src/springunitsynclib.cpp, src/springunitsynclib.h: TITANIC work of wrapping unitsync's lua parser in unitsync wrapper class 2008-10-05 Andrea Piras * src/springunitsync.cpp: Revert "valid mod maps uses caching now" This reverts commit 870683c2ae025d4bd032bca4a6c619f446c05146. 2008-10-05 Andrea Piras * src/springunitsync.cpp: valid mod maps uses caching now 2008-10-05 Tommy Carlsson * src/torrentwrapper.cpp, src/torrentwrapper.h: Fixed crash/zombie bug in torrent system 2008-10-05 Andrea Piras * src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.cpp, src/springunitsynclib.h: added GetModValidMapList to unitsync wrapper 2008-10-05 Andrea Piras * : commit 4b566eeeb7ba4d11d4d69e95062b971d3eead6c9 Author: Dmytry Lavrov Date: Sun Oct 5 16:45:39 2008 +0300 2008-10-05 Tommy Carlsson * CMake_Setup.sh, autogen.sh, debian/rules, git-stat.sh, springlobby.cbp, src/battlelistctrl.cpp, src/battlelistctrl.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/chatpanel.cpp, src/customlistctrl.cpp, src/customlistctrl.h, src/filelister/filelistctrl.cpp, src/filelister/filelistctrl.h, src/groupoptionspanel.cpp, src/groupoptionspanel.h, src/images/flags/mkflaghead.sh, src/libtorrent/asio/ssl/detail/openssl_operation.hpp, src/libtorrent/include/libtorrent/alert.hpp, src/libtorrent/include/libtorrent/alert_types.hpp, src/libtorrent/include/libtorrent/bencode.hpp, src/libtorrent/include/libtorrent/bt_peer_connection.hpp, src/libtorrent/include/libtorrent/config.hpp, src/libtorrent/include/libtorrent/debug.hpp, src/libtorrent/include/libtorrent/entry.hpp, src/libtorrent/include/libtorrent/escape_string.hpp, src/libtorrent/include/libtorrent/file.hpp, src/libtorrent/include/libtorrent/fingerprint.hpp, src/libtorrent/include/libtorrent/hasher.hpp, src/libtorrent/include/libtorrent/http_tracker_connection.hpp, src/libtorrent/include/libtorrent/identify_client.hpp, src/libtorrent/include/libtorrent/invariant_check.hpp, src/libtorrent/include/libtorrent/io.hpp, src/libtorrent/include/libtorrent/peer.hpp, src/libtorrent/include/libtorrent/peer_connection.hpp, src/libtorrent/include/libtorrent/peer_id.hpp, src/libtorrent/include/libtorrent/peer_info.hpp, src/libtorrent/include/libtorrent/piece_picker.hpp, src/libtorrent/include/libtorrent/policy.hpp, src/libtorrent/include/libtorrent/session.hpp, src/libtorrent/include/libtorrent/size_type.hpp, src/libtorrent/include/libtorrent/socket.hpp, src/libtorrent/include/libtorrent/stat.hpp, src/libtorrent/include/libtorrent/storage.hpp, src/libtorrent/include/libtorrent/torrent.hpp, src/libtorrent/include/libtorrent/torrent_handle.hpp, src/libtorrent/include/libtorrent/torrent_info.hpp, src/libtorrent/include/libtorrent/tracker_manager.hpp, src/libtorrent/include/libtorrent/udp_tracker_connection.hpp, src/libtorrent/include/libtorrent/version.hpp, src/libtorrent/include/libtorrent/web_peer_connection.hpp, src/libtorrent/src/alert.cpp, src/libtorrent/src/bt_peer_connection.cpp, src/libtorrent/src/entry.cpp, src/libtorrent/src/escape_string.cpp, src/libtorrent/src/file_old.cpp, src/libtorrent/src/http_tracker_connection.cpp, src/libtorrent/src/identify_client.cpp, src/libtorrent/src/peer_connection.cpp, src/libtorrent/src/piece_picker.cpp, src/libtorrent/src/policy.cpp, src/libtorrent/src/session.cpp, src/libtorrent/src/session_impl.cpp, src/libtorrent/src/sha1.cpp, src/libtorrent/src/stat.cpp, src/libtorrent/src/storage.cpp, src/libtorrent/src/torrent.cpp, src/libtorrent/src/torrent_handle.cpp, src/libtorrent/src/torrent_info.cpp, src/libtorrent/src/tracker_manager.cpp, src/libtorrent/src/udp_tracker_connection.cpp, src/libtorrent/src/web_peer_connection.cpp, src/libtorrent/zlib/crc32.h, src/libtorrent/zlib/infback.c, src/libtorrent/zlib/inflate.h, src/mainoptionstab.cpp, src/mainoptionstab.h, src/mainwindow.cpp, src/mainwindow.h, src/nicklistctrl.cpp, src/nicklistctrl.h, src/torrentlistctrl.cpp, src/torrentlistctrl.h, src/useractions.cpp, src/userlistctrl.cpp, src/userlistctrl.h, tools/developer-merge.sh, tools/fix-xpm, tools/get-revision.sh, tools/make_header_from_png.sh, tools/newfile.sh, tools/png2c.py, tools/test-tarball.sh, tools/update-potfileslist.sh, tools/update-rpm.sh, tools/xcf2pngh.sh: renamed customListCtrl to CustomListCtrl to follow class naming convetions and fixed some bugs in groupoptions 2008-10-05 Andrea Piras * : commit 79bc7c7768053f1cb2cc5862bfa3bf323c22d346 Author: Tobi Vollebregt Date: Sun Oct 5 13:15:59 2008 +0200 2008-10-05 Tobi Vollebregt * src/autohost.cpp: typo 2008-10-05 Tobi Vollebregt * src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.h: Feature based check for GetInfoMap (instead of version based) 2008-10-04 Andrea Piras * src/springlobbyapp.cpp: save the settings after the first time startup 2008-10-04 Andrea Piras * src/chatpanel.cpp: fixed crash when someone calls your nick in battle room with aui 2008-10-04 Dmytry Lavrov * src/battleroomlistctrl.cpp: Fixed crashbug when setting color of user that left battle. 2008-10-04 Rene Milk * Makefile.am: Signed-off-by: Rene Milk 2008-10-04 Rene Milk * Makefile.am: Signed-off-by: Rene Milk 2008-10-04 Rene Milk * CMakeLists.txt, Makefile.am, springlobby.cbp, src/mainwindow.cpp, src/replay/replayfilter.cpp, src/replay/replayfilter.h, src/replay/replaylist.cpp, src/replay/replaylist.h, src/replay/replaylistctrl.cpp, src/replay/replaylistctrl.h, src/replay/replaylistfiltervalues.h, src/replay/replaytab.cpp, src/replay/replaytab.h, src/replayfilter.cpp, src/replayfilter.h, src/replaylist.cpp, src/replaylist.h, src/replaylistctrl.cpp, src/replaylistctrl.h, src/replaylistfiltervalues.h, src/replaytab.cpp, src/replaytab.h, src/settings++/helpmenufunctions.cpp, src/settings.cpp, src/tdfcontainer.h: moved replay files to subdir hopefully added all files to all buildsystems 2008-10-04 Rene Milk * src/ibattle.cpp: changed lodmod assert to exception instead of logic 2008-10-04 Rene Milk * src/replayfilter.cpp: make filter layout 2 coulmns 2008-10-03 Rene Milk * src/battle.cpp, src/battle.h, src/iunitsync.h, src/replaylist.cpp, src/replaytab.cpp, src/springunitsync.cpp, src/springunitsync.h: added mod/map download notice 2008-10-03 Rene Milk * src/replaylist.cpp: country codes for users get parsed too now 2008-10-03 Rene Milk * src/battle.h, src/replaytab.cpp, src/userlistctrl.cpp, src/userlistctrl.h: show users in replay tab 2008-10-03 Rene Milk * src/replayfilter.cpp, src/replaytab.cpp: all filters work 2008-10-03 Rene Milk * src/battlelistfilter.cpp, src/replayfilter.cpp, src/replayfilter.h, src/replaytab.cpp: filtering works halfway 2008-10-03 Rene Milk * src/replayfilter.cpp, src/settings++/helpmenufunctions.cpp, src/settings.cpp: implemented replay filter settings funcs 2008-10-03 Rene Milk * src/battlelistfilter.cpp, src/battlelisttab.cpp, src/mainjoinbattletab.cpp, src/settings.cpp, src/settings.h: renamed battle filter settiings funcs 2008-10-03 Rene Milk * src/settings.h: settings funcs 2008-10-03 Rene Milk * src/replayfilter.cpp, src/replayfilter.h, src/replaytab.cpp: gui elements in place 2008-10-03 Rene Milk * src/replayfilter.cpp, src/replayfilter.h, src/replaylistfiltervalues.h, src/replaytab.cpp: partial replay filetrirng 2008-10-03 Rene Milk * src/replaylist.cpp, src/replaylist.h, src/replaytab.cpp: implemented replay delete 2008-10-03 Rene Milk * src/replaylist.cpp, src/replaylist.h: moved functions into class scope 2008-10-03 Rene Milk * : commit 5831ca95781bc6d60edf0490e124d19d889cd81a Author: Rene Milk Date: Fri Oct 3 03:03:28 2008 +0200 2008-10-03 Rene Milk * src/replaytab.cpp, src/replaytab.h: added reload (including time output if > 0 seconds) 2008-10-03 Rene Milk * src/replaylist.cpp, src/replaytab.cpp, src/replaytab.h: some minor fixes to displayed info 2008-10-03 Rene Milk * src/lobbyoptionstab.cpp: meh, added wrong control to new sizer; fixed 2008-10-03 Rene Milk * src/lobbyoptionstab.cpp, src/lobbyoptionstab.h, src/mainwindow.cpp, src/mainwindow.h: moved show tooltips setting from menu to genral options tab 2008-10-02 Rene Milk * : commit 695012d560291d52bef74bff1979e8270f6ae257 Merge: d52d739 ba8c6cf Author: Rene Milk Date: Thu Oct 2 23:56:44 2008 +0200 2008-10-02 Rene Milk * : commit c723aca0a2e1956e9a24cb1cbbb29a5d9e990fc5 Merge: 1fe9edf ba8c6cf Author: Rene Milk Date: Thu Oct 2 23:55:33 2008 +0200 2008-10-02 Rene Milk * src/settings++/Defs.hpp, src/settings++/presets.h: changed some defaults 2008-10-02 Rene Milk * src/settings++/helpmenufunctions.cpp: fixed a warning 2008-10-02 Rene Milk * Makefile.am, src/settings++/Main.cpp, src/settings++/custom_dialogs.cpp, src/settings++/helpmenufunctions.cpp, src/settings++/main.h, src/settings++/panel_pathoption.cpp, src/settings++/se_settings.cpp, src/settings++/se_settings.h, src/settings++/tab_abstract.cpp, src/springunitsynclib.cpp, src/utils.cpp, src/utils.h: completely decoupled springsettings from using uitls.h/cpp 2008-10-02 Rene Milk * src/addbotdialog.cpp, src/autobalancedialog.cpp, src/battleoptionstab.cpp, src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/chatoptionstab.cpp, src/chatpanel.cpp, src/connectwindow.cpp, src/hostbattledialog.cpp, src/managegroupspanel.cpp, src/singleplayertab.cpp, src/springoptionstab.cpp: added TE wrapper to tooltips 2008-10-02 Rene Milk * src/mainwindow.cpp, src/utils.cpp, src/utils.h: disable works 2008-10-02 Rene Milk * src/chatpanel.cpp, src/utils.cpp, src/utils.h: nothing really yet 2008-10-02 Andrea Piras * src/uiutils.cpp, src/uiutils.h: improved a lot blend function, now works with non squared pics, doesn't need to have size as param and return result in a different object 2008-10-02 Rene Milk * src/battle.h, src/mapctrl.cpp, src/replaylist.cpp, src/replaylist.h, src/replaytab.cpp: fixes segafults in minimap update cause by invalid pointers 2008-10-02 Rene Milk * src/replaylist.cpp, src/replaylistctrl.cpp, src/replaytab.cpp: adds download map/mod by right click 2008-10-02 Rene Milk * src/replaylist.cpp, src/replaylistctrl.cpp, src/replaytab.cpp: fixed playernum and filename column 2008-10-02 Andrea Piras * src/mainwindow.cpp: rescaled main window icons to 32*32 2008-10-02 Rene Milk * : commit b180b70c052c8a728a50545649faa644ac85b465 Merge: 238e82d 064dbe5 Author: Tobi Vollebregt Date: Thu Oct 2 01:56:30 2008 +0200 2008-10-02 Tobi Vollebregt * src/ibattle.cpp: SaveOptionsPreset and DeletePreset are now case insensitive too 2008-10-02 Rene Milk * src/replaytab.cpp: fixed compile error due to visibility change in mapcontrol 2008-10-02 Rene Milk * : commit 076a75f1f6e847ce8f659f6c0d7e961515cfb2fe Author: Rene Milk Date: Thu Oct 2 01:23:37 2008 +0200 2008-10-02 Tobi Vollebregt * src/ibattle.cpp: LoadOptionsPreset is case insensitive now 2008-10-02 Andrea Piras * : commit 5fb0d65e311c08b078d75fe434162a110eec6900 Author: Tobi Vollebregt Date: Sun Sep 21 20:10:33 2008 +0200 2008-10-02 Andrea Piras * : commit 064dbe5c7e9fdd585a68d389174fd60b6431b6ed Author: Andrea Piras Date: Thu Oct 2 00:54:28 2008 +0200 2008-10-02 Andrea Piras * src/ibattle.cpp, src/tasserver.cpp: some more attempts to actually remove boxes on profile load 2008-10-02 Rene Milk * src/replaylist.cpp, src/replaylist.h, src/replaylistctrl.cpp, src/replaytab.cpp: added filesize 2008-10-02 Rene Milk * src/replaylist.cpp, src/replaylist.h, src/replaylistctrl.cpp, src/replaytab.cpp: properly get gametime from replay 2008-10-01 Rene Milk * : commit 3c6a9612f56168cbc953f168a9a01e6696be8d3d Author: Andrea Piras Date: Wed Oct 1 22:06:05 2008 +0200 2008-10-01 Andrea Piras * src/replaylist.cpp: fixed filename parsing in replays 2008-10-01 Rene Milk * src/spring.cpp: added "" around replayname in launch command 2008-10-01 Andrea Piras * src/ui.cpp: /ingame can fetch other nicks too when admin 2008-10-01 Rene Milk * src/replaylist.cpp, src/replaylist.h, src/replaylistctrl.cpp: skip no script replay files 2008-10-01 Rene Milk * : commit 58d0a51d6c30483e5a30913c5e38349fde07edaa Author: Rene Milk Date: Wed Oct 1 19:38:19 2008 +0200 2008-10-01 Rene Milk * src/replaylist.cpp, src/replaylist.h, src/replaytab.cpp: minimap pic showing 2008-10-01 Rene Milk * src/replaylist.cpp, src/replaytab.cpp, src/replaytab.h, src/user.h: infos in list correctly displayed 2008-10-01 Rene Milk * src/ibattle.h, src/replaylist.cpp, src/replaylist.h, src/replaytab.cpp: halfway thru parsing the script from replay 2008-10-01 Dmytry Lavrov * src/replaylist.cpp: Convert wxstring to stringstream directly (rather than to std::string first) 2008-10-01 Dmytry Lavrov * src/replaylist.cpp, src/tdfcontainer.cpp: Fixed false error reports in TDF parser. 2008-10-01 Rene Milk * src/battle.cpp, src/battle.h, src/replaylist.cpp, src/replaylist.h, src/replaytab.cpp: parser not working 2008-10-01 Andrea Piras * : commit 2c2c275e53666fa4c4ec81d5026740701374da10 Author: Rene Milk Date: Tue Sep 30 22:17:26 2008 +0200 2008-09-30 Rene Milk * src/battle.cpp, src/battle.h, src/user.cpp, src/user.h: last part (i hope) 2008-09-30 Rene Milk * springlobby.cbp: added new files 2008-09-30 Tobi Vollebregt * src/springunitsync.cpp, src/springunitsynclib.cpp, src/utils.h: Rewrote explicit buffer allocation using new uninitialized_array class 2008-09-30 Rene Milk * : commit 9b6cd9b6d9c97f3165ec2a4f8fe6d5c9c6ebe356 Author: Rene Milk Date: Tue Sep 30 20:40:58 2008 +0200 2008-09-30 Tommy Carlsson * src/selectusersdialog.cpp, src/ui.cpp: Fixed some minor build probs and removed some warnings 2008-09-30 Rene Milk * src/battle.cpp, src/battle.h: second part of battle refactor 2008-09-30 Tommy Carlsson * : Merge commit 'koshi/master' * commit 'koshi/master': (116 commits) fix scroll on listcontrols while tipwindow is displayed changed windows version, so win compile will work on w2k upwards Whitespace cleanup and some SDL (sound)-related fixes in CMakeLists.txt Add missing incl. path for config.h; remove trailing whitespace Move generated config.h to the build directory; simplify check for it removed useless update calls added !fixids and !spectunsynced commands to autohost temporanely disabled unitsync thread until it's stable updated cmake & autotools buildsystems to thread files Added Thread class, which overrides fails of wxThread. Changed unisyncthread to use new thread class. Added Thread class, which overrides fails of wxThread. Fixed incorrect minimap image sizes, removed code duplication. refactored loop sorting, now battle gets auto sorted too anb by team first (to show comshare) call sort on nick list ctrl column click fixed crash on app startup drop useless battle status updates now nicklist sorts are cyclic too (and off when ingame) lots speedup in status updates, no more loops cyclic sort doesn't tries to sort when no updates were made in battlelist ... 2008-09-30 Tommy Carlsson * Makefile.am: Fixed Makefile 2008-09-30 Rene Milk * src/user.cpp, src/user.h: refactored "offline" functionality in user class out to OfflineUser intermediate class 2008-09-30 Andrea Piras * src/springunitsynclib.cpp: fixed memleaks 2008-09-30 Dmytry Lavrov * : commit 8c61d59c49341e0028696a9db473e1353e80f98f Author: Dmytry Lavrov Date: Tue Sep 30 18:11:14 2008 +0300 2008-09-30 Dmytry Lavrov * : commit ae33f97516606a2979f2abaa51376321ddc8a5a5 Merge: d92d109 8fb5c05 Author: Dmytry Lavrov Date: Tue Sep 30 17:42:07 2008 +0300 2008-09-30 Tobi Vollebregt * src/springunitsynclib.cpp: Show metalmap in green instead of red (consistency with spring) 2008-09-30 Tobi Vollebregt * src/mapctrl.cpp, src/mapctrl.h: Mousewheel changes between minimap/metalmap (and other infomaps in case they are added later on) 2008-09-30 Tommy Carlsson * src/selectusersdialog.cpp: Fixed bug in SelectUsersDialog related to sorting 2008-09-30 Tommy Carlsson * src/selectusersdialog.cpp, src/selectusersdialog.h: Fixed bug in SelectUsersDialog sorting 2008-09-30 Tobi Vollebregt * src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h: Add GetMetalmap method to SpringUnitSync 2008-09-30 Tobi Vollebregt * src/springunitsynclib.cpp, src/springunitsynclib.h: Add GetMetalmap method to SpringUnitSyncLib 2008-09-30 Tommy Carlsson * .gitignore, src/selectusersdialog.cpp, src/selectusersdialog.h: Fixed filter in SelectUsersDialog 2008-09-30 Tommy Carlsson * GroupOptions.fbp, src/groupoptionspanel.cpp, src/selectusersdialog.cpp, src/selectusersdialog.h: Added new generic dialog to select users 2008-09-29 Rene Milk * src/customlistctrl.cpp, src/customlistctrl.h: fix scroll on listcontrols while tipwindow is displayed 2008-09-29 Rene Milk * configure.ac.m4: changed windows version, so win compile will work on w2k upwards 2008-09-29 Rene Milk * : commit 86a155856690c34ed09b91085d7c3fdcf98a1570 Author: Tommy Carlsson Date: Sun Sep 28 20:39:36 2008 +0200 2008-09-28 Tommy Carlsson * .gitignore, GroupOptions.fbp, springlobby.cbp, src/groupoptionspanel.cpp, src/groupoptionspanel.h, src/mainoptionstab.cpp, src/mainoptionstab.h: Added new group options gui 2008-09-23 Collin J. Sutton * CMakeLists.txt: Whitespace cleanup and some SDL (sound)-related fixes in CMakeLists.txt 2008-09-23 Collin J. Sutton * cmake/package_config.cmake: Add missing incl. path for config.h; remove trailing whitespace 2008-09-21 Collin J. Sutton * cmake/package_config.cmake: Move generated config.h to the build directory; simplify check for it 2008-09-27 Andrea Piras * src/battle.cpp: removed useless update calls 2008-09-27 Andrea Piras * src/autohost.cpp, src/battle.cpp, src/battle.h: added !fixids and !spectunsynced commands to autohost 2008-09-27 Andrea Piras * src/mainjoinbattletab.cpp, src/unitsyncthread.cpp, src/unitsyncthread.h: temporanely disabled unitsync thread until it's stable 2008-09-27 Andrea Piras * CMakeLists.txt, Makefile.am: updated cmake & autotools buildsystems to thread files 2008-09-27 Andrea Piras * : commit f6b7ae69e158060ed460fb89ea29b4317ac1ed13 Merge: e8eed48 74980a7 Author: Andrea Piras Date: Sat Sep 27 14:44:11 2008 +0200 2008-09-27 Dmytry Lavrov * : commit 74980a7623d5748449b0246cc8530b7ffb1eaf31 Merge: eb284f6 6ee15fa Author: Dmytry Lavrov Date: Sat Sep 27 11:48:51 2008 +0300 2008-09-27 Dmytry Lavrov * : commit eb284f65a93ce99cabadc6d31ab382b8883dc212 Author: Dmytry Lavrov Date: Sat Sep 27 11:32:46 2008 +0300 2008-09-27 Dmytry Lavrov * src/unitsyncthread.cpp, src/unitsyncthread.h: Changed unisyncthread to use new thread class. 2008-09-27 Dmytry Lavrov * springlobby.cbp, src/socket.cpp, src/socket.h, src/thread.cpp, src/thread.h: Added Thread class, which overrides fails of wxThread. Only joinable threads is possible with it. Gracefully stops when destroyed. Sleep method returns bool (true if sleept false if woken up) and wakes up when therad wants to exit. Call WakeUp() to wake from Sleep() 2008-09-27 Dmytry Lavrov * src/springunitsync.cpp: Fixed incorrect minimap image sizes, removed code duplication. 2008-09-27 Andrea Piras * : commit f40e37a0f471ed0253dcf444e2c67566dc6cf192 Author: Andrea Piras Date: Sat Sep 27 00:59:18 2008 +0200 2008-09-27 Andrea Piras * src/nicklistctrl.cpp: call sort on nick list ctrl column click 2008-09-26 Andrea Piras * src/mainchattab.cpp: fixed crash on app startup 2008-09-26 Rene Milk * src/replaylist.cpp: Signed-off-by: Rene Milk 2008-09-26 Rene Milk * src/replaylist.cpp, src/replaytab.cpp: some working stuff 2008-09-26 Andrea Piras * src/serverevents.cpp, src/user.h: drop useless battle status updates 2008-09-26 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainchattab.h, src/mainwindow.cpp, src/nicklistctrl.cpp, src/nicklistctrl.h, src/ui.cpp, src/ui.h: now nicklist sorts are cyclic too (and off when ingame) 2008-09-26 Andrea Piras * src/battle.cpp, src/battle.h, src/serverevents.cpp: lots speedup in status updates, no more loops 2008-09-26 Andrea Piras * src/battlelisttab.cpp, src/battlelisttab.h: cyclic sort doesn't tries to sort when no updates were made in battlelist 2008-09-26 Andrea Piras * src/battlelisttab.cpp, src/battlelisttab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/ui.cpp, src/ui.h: now battlelist sorts only every 5 secs 2008-09-26 Rene Milk * : commit 52638dd5aa81934c0e646ec21f6dea4d683e1239 Merge: 0024ce2 940a241 Author: Rene Milk Date: Fri Sep 26 19:31:53 2008 +0200 2008-09-26 Rene Milk * src/mainwindow.cpp, src/replaylistctrl.h: renabled icon 2008-09-26 Dmytry Lavrov * src/tdfcontainer.cpp, src/tdfcontainer.h: More friendly access functions added to TDFParser. 2008-09-26 Rene Milk * src/replaylist.cpp: Signed-off-by: Rene Milk 2008-09-26 Dmytry Lavrov * src/springlobbyapp.cpp, src/tdfcontainer.cpp, src/tdfcontainer.h: TDF parser works. Todo: add more usable wrappers for common functions such as getting value by name. 2008-09-26 Dmytry Lavrov * : commit 71ba2615eb5c151d7e42fddddd9d759d794ce352 Merge: 88fad95 4cb3807 Author: Dmytry Lavrov Date: Fri Sep 26 15:44:23 2008 +0300 2008-09-26 Dmytry Lavrov * src/springunitsync.cpp, src/unitsyncthread.cpp: disabled unitsync thread for testing purposes. 2008-09-26 Rene Milk * : commit 80d326b85d8091e449c7749ea9dcd2656c93efb3 Merge: 9dabb5e 78ba4aa Author: Rene Milk Date: Thu Sep 25 20:40:13 2008 +0200 2008-09-25 Rene Milk * : commit 78ba4aa211d1538f4453d51a8025bd599240d30d Author: Rene Milk Date: Wed Sep 24 19:21:44 2008 +0200 2008-09-24 Rene Milk * : commit 1bb1a18724eb0164d79c03fbac3a5f6c470fa3fc Author: Rene Milk Date: Wed Sep 24 15:30:09 2008 +0200 2008-09-23 Rene Milk * : Merge commit 'koshi/master' 2008-09-23 Rene Milk * src/settings++/Defs.hpp, src/settings++/tab_quality_video.cpp: chnaged some default values in UI and sound 2008-09-23 Rene Milk * : commit 94090043f2d940a13aa98b9824858b667e1c4b6a Author: Rene Milk Date: Tue Sep 23 18:12:37 2008 +0200 2008-09-23 Andrea Piras * : commit 22df7461d9dca58fd821b61de617dc16b130f905 Merge: f9fc5ce 6c3b0ce Author: Andrea Piras Date: Tue Sep 23 15:37:09 2008 +0200 2008-09-23 Andrea Piras * src/serverevents.cpp, src/serverevents.h: small code speedup in flood autokick 2008-09-23 Andrea Piras * src/serverevents.cpp: typo fix 2008-09-23 Andrea Piras * : commit 7464acf631a7c5d3cc791d54eaccbaa4a251d9c4 Author: Andrea Piras Date: Tue Sep 23 03:34:30 2008 +0200 2008-09-23 Andrea Piras * src/serverevents.cpp, src/serverevents.h: added battle status spam autokick, sending 4 or more updates in less than a second triggers an utokick 2008-09-22 Andrea Piras * src/tasserver.cpp: ignore redirect commands when being online 2008-09-22 Andrea Piras * : commit 6432fd7e869f0f10cc6d5d4d1a03aaf6fe8e3114 Author: Andrea Piras Date: Mon Sep 22 14:59:17 2008 +0200 2008-09-22 Andrea Piras * : commit fae1aa00773a0f3d0363b08bea6e3198ad02c12f Author: Andrea Piras Date: Mon Sep 22 14:54:31 2008 +0200 2008-09-22 Andrea Piras * : commit 971811d6679742113580c5e2da919e6945beb8fb Author: Andrea Piras Date: Mon Sep 22 14:41:47 2008 +0200 2008-09-22 Andrea Piras * src/ibattle.cpp: fixed minimap infos in battleroom not getting updated properly when loading a preset 2008-09-22 Andrea Piras * src/ibattle.cpp: fixed battle options not being sent when loading a profiles 2008-09-22 Andrea Piras * src/battle.cpp, src/battle.h: added Battle::MakeTeamsUnique that assignes to each user a different team number 2008-09-22 Andrea Piras * CMakeLists.txt, po/LINGUAS, po/POTFILES.in, po/springlobby.pot, po/springlobby_ar.po, po/springlobby_cs.po, po/springlobby_da.po, po/springlobby_de.po, po/springlobby_el.po, po/springlobby_es.po, po/springlobby_fi.po, po/springlobby_fr.po, po/springlobby_it.po, po/springlobby_pl.po, po/springlobby_pt.po, po/springlobby_ro.po, po/springlobby_ru.po, po/springlobby_sv.po, po/springlobby_uk.po, po/springlobby_zh_CN.po: updated translations 2008-09-22 Rene Milk * : commit 0ac8c293a7a2b2aeb75ea7a26dc48f4fdecb4b9e Merge: 3fda62d 480ab35 Author: Rene Milk Date: Mon Sep 22 11:54:41 2008 +0200 2008-09-21 Andrea Piras * src/ibattle.cpp: settings gets saved instantly when a new profile gets created 2008-09-21 Andrea Piras * src/battle.cpp, src/ibattle.h: fxied SL crashing when drawing start rectangles outside map boundaries 2008-09-21 Rene Milk * : commit 7ac0950f26560fd7cfe816ee61dfd40e7ec03fc2 Author: Andrea Piras Date: Sun Sep 21 17:08:58 2008 +0200 2008-09-21 Andrea Piras * src/autohost.cpp, src/battleoptionstab.cpp, src/battleroomtab.cpp, src/ibattle.cpp: refresh gui signal sent from ibattle rather than every single gui control which changes(removes lot of duplication) 2008-09-21 Andrea Piras * src/ibattle.cpp: fixed box profile saving 2008-09-21 Andrea Piras * : commit 0a09be57e1d7785516917da3d34d564057f69024 Merge: 71637ca de154fa Author: Andrea Piras Date: Sun Sep 21 15:59:25 2008 +0200 2008-09-21 Andrea Piras * src/autohost.cpp, src/autohost.h, src/battle.cpp: added !lock & !unlock commands, in autohost mode SL auto unlocks when all other players leave, fixed welcome message being displayed in non-autohost mode too 2008-09-21 Tobi Vollebregt * src/autohost.cpp: typos and string fixes 2008-09-21 Andrea Piras * src/autohost.cpp: added !fixcolors command 2008-09-21 Tobi Vollebregt * src/autohost.cpp: typo 2008-09-21 Tobi Vollebregt * : Merge commit 'bd/autohost' into autohost Fixed compile error in ibattle.cpp Conflicts: src/autohost.cpp 2008-09-21 Andrea Piras * src/autohost.cpp, src/ibattle.cpp, src/ibattle.h: implemented !help, !ring !listprofiles and !loadprofile in autohost mode 2008-09-21 Andrea Piras * src/autohost.cpp: implemented !help command in autohost mode 2008-09-21 Andrea Piras * CMakeLists.txt, springlobby.cbp: updated cmake and c::b projects files 2008-09-21 Andrea Piras * : commit 6ba43cfcedcb52d5aef3d6c32086c5858bc895f6 Merge: d694849 1d7ab84 Author: Tobi Vollebregt Date: Sun Sep 21 14:28:08 2008 +0200 2008-09-21 Andrea Piras * src/mainoptionstab.cpp, src/mainoptionstab.h, src/mainwindow.cpp, src/mainwindow.h, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springoptionstab.h: now when using the first time wizard the spring dir gets correctly visualized in the settings 2008-09-21 Rene Milk * Makefile.am: Signed-off-by: Rene Milk 2008-09-21 Rene Milk * src/battleroomlistctrl.cpp: null-init of some pointers 2008-09-21 Rene Milk * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/chatpanel.cpp: gettings segfault on adding user to group Signed-off-by: Rene Milk 2008-09-21 Andrea Piras * src/battle.cpp, src/battleroomtab.cpp, src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp, src/mapctrl.cpp, src/serverevents.cpp, src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h, src/torrentwrapper.cpp, src/userlist.cpp, src/utils.h: moved std::runtime errors to subclass std::excpetion to allow selective catching 2008-09-21 Tobi Vollebregt * src/autohost.cpp, src/autohost.h, src/spring.cpp: pass extra commandline params to spring in autohost mode Spring is started minimised and spring quits after the game is over. 2008-09-21 Tobi Vollebregt * src/autohost.cpp, src/autohost.h, src/battle.cpp, src/battle.h, src/battleroomtab.cpp, src/battleroomtab.h, src/serverevents.cpp, src/serverevents.h: made autohost functionality optional (checkbox in battleroomtab) To get this done properly, I refactored AutoHost to live in Battle, instead of in ServerEvents. 2008-09-21 Rene Milk * src/usermenu.h: forgot the new file, ofc 2008-09-21 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/nicklistctrl.cpp, src/nicklistctrl.h: much better with class internal typedefs 2008-09-21 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/nicklistctrl.cpp, src/nicklistctrl.h: working, albeit butt-ugly 2008-09-21 Rene Milk * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/chatpanel.cpp, src/chatpanel.h, src/nicklistctrl.cpp: first step to factoring out usermneu 2008-09-21 Tobi Vollebregt * src/autohost.cpp, src/autohost.h: simple spam protection 2008-09-21 Tobi Vollebregt * src/autohost.cpp, src/autohost.h: sanity checks before starting battle 2008-09-21 Tobi Vollebregt * Makefile.am, src/autohost.cpp, src/autohost.h, src/serverevents.cpp, src/serverevents.h: refactored autohost logic into separate class 2008-09-20 Andrea Piras * : commit 8fab45506c6721ecf5e11c9ff968b25dd343b3a3 Author: Tobi Vollebregt Date: Sat Sep 20 23:08:37 2008 +0200 2008-09-20 Andrea Piras * : commit bc90068247f581c562d9f0bf8f7962a5228960b7 Author: Andrea Piras Date: Sat Sep 20 23:07:14 2008 +0200 2008-09-20 Rene Milk * src/battleoptionstab.cpp: added buttons to option profiles errror boxes 2008-09-20 Rene Milk * : commit 2e53dd7db044e0558bd4ab91a7b12127903ae22b Author: Andrea Piras Date: Sat Sep 20 20:20:00 2008 +0200 2008-09-20 Andrea Piras * src/ui.cpp: removed silly message >_> 2008-09-20 Andrea Piras * src/battle.cpp: now SL remembers correctly the colour between battles 2008-09-20 Andrea Piras * src/serverevents.cpp: removed duplicate call 2008-09-20 Andrea Piras * src/battleroomtab.cpp: small ui improvement in options summary in battle list 2008-09-20 Andrea Piras * src/mmoptionswrapper.cpp: removed unneeded mm options entry 2008-09-20 Andrea Piras * src/mmoptionswrapper.cpp: forgot braces and breaks so the mmoptions don't get added to unneeded cathegories 2008-09-20 Andrea Piras * src/ibattle.cpp: fixed save & load of battle starboxes in profiles 2008-09-20 Andrea Piras * src/serverevents.cpp, src/tasserver.cpp: fixed rank limit in games 2008-09-20 Andrea Piras * src/battle.h, src/ibattle.h, src/singleplayerbattle.h: removed code rendundancy 2008-09-20 Andrea Piras * src/serverevents.cpp: forgot to commit the rest of the fix 2008-09-20 Andrea Piras * src/battleroomtab.cpp: fixed mapinfos not getting updated in battleroomtab 2008-09-20 Andrea Piras * src/addbotdialog.cpp, src/battle.cpp, src/battle.h, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/chatpanel.cpp, src/filelister/filelistdialog.cpp, src/hostbattledialog.cpp, src/ibattle.cpp, src/ibattle.h, src/iconimagelist.cpp, src/iunitsync.h, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h, src/mapctrl.cpp, src/mmoptionswrapper.cpp, src/server.h, src/settings.cpp, src/settings.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/singleplayertab.cpp, src/singleplayertab.h, src/spring.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springunitsync.cpp, src/tasserver.cpp, src/torrentwrapper.cpp, src/ui.cpp: loads of fixes + battle profiles should also save map, map boxes & restrictions now 2008-09-20 Andrea Piras * src/battle.cpp, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/battleroomtab.cpp, src/battleroomtab.h, src/ibattle.cpp, src/ibattle.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mapctrl.cpp, src/mmoptionmodel.cpp, src/mmoptionmodel.h, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/serverevents.cpp, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/ui.cpp, src/ui.h: removed loads of junk from the code, added private options section to mmoptionswrapper to hold data to save in the profiles 2008-09-20 Andrea Piras * src/battleroomtab.cpp: fixed problems when mod didn't ship sidepics 2008-09-19 Andrea Piras * : Merge commit 'koshi/cmake_intl' 2008-09-19 Rene Milk * : commit b8bc47bafe82b02d7b7e536b40e69d5d6d835fe1 Author: Andrea Piras Date: Fri Sep 19 14:55:51 2008 +0200 2008-09-19 Andrea Piras * src/ibattle.cpp: typo fix 2008-09-19 Andrea Piras * src/battleoptionstab.cpp, src/ibattle.cpp, src/ibattle.h: now deleted presets don't get listed anymore if were previously active 2008-09-19 Andrea Piras * : commit b3500cc0561aecbb03dafa431149b068867cf866 Merge: bb6e3ee ba2eb35 Author: Andrea Piras Date: Fri Sep 19 01:16:34 2008 +0200 2008-09-19 Andrea Piras * src/battleoptionstab.cpp: now refresh events are generated correctly by the gui 2008-09-19 Andrea Piras * src/battleoptionstab.cpp, src/battleoptionstab.h, src/battleroomtab.cpp, src/battleroomtab.h, src/ibattle.cpp, src/ibattle.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h, src/singleplayerbattle.cpp, src/ui.cpp, src/ui.h, src/useractions.cpp: refactored LOt of code to use try/catch and added function to refresh preset list 2008-09-18 Andrea Piras * src/mainsingleplayertab.cpp, src/mainsingleplayertab.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h: preset gets auto loaded in SP mode too 2008-09-18 Andrea Piras * src/common/events.h: committed dizekat's events header 2008-09-18 Andrea Piras * src/battleoptionstab.cpp, src/battleoptionstab.h, src/ibattle.cpp, src/ibattle.h: added battle options gui to add/save/remove/set preset 2008-09-18 Andrea Piras * src/battleroomtab.cpp, src/battleroomtab.h, src/ibattle.cpp, src/ibattle.h, src/serverevents.cpp: added drop down box to load saved options presets 2008-09-18 Andrea Piras * src/battleroomtab.cpp: moved the "i'm ready" button to the center of battleroom, togheter with all other buttons regarding the self 2008-09-18 Andrea Piras * src/battle.cpp, src/battle.h, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/ibattle.h, src/mainjoinbattletab.cpp, src/mapctrl.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/serverevents.cpp, src/settings.cpp, src/settings.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/spring.cpp, src/tasserver.cpp, src/ui.cpp: speeded up battle hosting by a lot, added core code to support battle settings defaults and profiles 2008-09-18 Tommy Carlsson * : Merged bd/master 2008-09-18 Andrea Piras * src/battle.cpp, src/battleroomtab.cpp: fixed not always being able to add bots > max players and code complaing multiple bots in same team when total players > max players 2008-09-15 Andrea Piras * : commit e58cb660fa64cf6b6fe3a303f2ff3eb8e71fa356 Merge: f60c399 ccbed90 Author: Rene Milk Date: Mon Sep 15 18:35:10 2008 +0200 2008-09-15 Rene Milk * : commit 0df9ee7c0108bd4b2bb874ae4731302fd0c3f61d Merge: ccbed90 0e7d3fc Author: Andrea Piras Date: Mon Sep 15 18:11:56 2008 +0200 2008-09-14 Rene Milk * cmake/KWWidgetsGettextInitOrMerge.cmake: forgot a file 2008-09-14 Rene Milk * : fixed doubled locale dir in package commit 4796719b3e83f2ebc4b54755ef22ac7c4dd1392c Author: Rene Milk Date: Sun Sep 14 20:37:17 2008 +0200 2008-09-14 Dmytry Lavrov * springlobby.cbp, src/socket.cpp, src/socket.h, src/thread.cpp, src/thread.h, src/unitsyncthread.cpp, src/unitsyncthread.h: Added Thread class, which overrides fails of wxThread. Only joinable threads is possible with it. Gracefully stops when destroyed. Sleep method returns bool (true if sleept false if woken up) and wakes up when therad wants to exit. Call WakeUp() to wake from Sleep() 2008-09-14 Dmytry Lavrov * springlobby.cbp: Changed version string 2008-09-14 Andrea Piras * src/unitsyncthread.cpp: increased map cache delay to 20 sec 2008-09-14 Andrea Piras * src/unitsyncthread.cpp, src/unitsyncthread.h: split the map caching and mod chaching in 2 separate thread, i've set 15 sec daly for maps and 67 for mods 2008-09-13 Andrea Piras * src/springlobbyapp.cpp, src/unitsyncthread.cpp, src/unitsyncthread.h: now caching thread progress gets reset if cache version gets bumped 2008-09-13 Andrea Piras * src/unitsyncthread.cpp: fixed tiny copypasta error 2008-09-13 Rene Milk * : commit 8032eb168a7cc11a52b99cc08be4a87b5da87eef Author: Andrea Piras Date: Sat Sep 13 21:15:55 2008 +0200 2008-09-13 Andrea Piras * src/ui.cpp: cache thread now pauses / resumes when spring is launched 2008-09-13 Andrea Piras * src/unitsyncthread.cpp: no more crash on app close 2008-09-13 Andrea Piras * src/addbotdialog.cpp, src/battle.cpp, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/chatpanel.cpp, src/filelister/filelistdialog.cpp, src/hostbattledialog.cpp, src/ibattle.cpp, src/iconimagelist.cpp, src/iunitsync.h, src/mapctrl.cpp, src/mmoptionswrapper.cpp, src/settings.cpp, src/settings.h, src/singleplayertab.cpp, src/spring.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springunitsync.cpp, src/springunitsync.h, src/tasserver.cpp, src/torrentwrapper.cpp, src/ui.cpp, src/ui.h, src/unitsyncthread.cpp, src/unitsyncthread.h: first attempt at unitsync background caching thread, needs testing and atm crashes on app close 2008-09-13 Andrea Piras * src/springunitsync.cpp: hopefully fixed minimap caching algo for good 2008-09-13 Andrea Piras * src/springunitsync.cpp: made minimap caching a bit more robust 2008-09-12 Andrea Piras * src/springunitsync.cpp: fixed minimap not getting resized when not being loaded from cache 2008-09-12 Andrea Piras * : commit 1aa027ecb0a4cf04e91325a622270556d08a493a Author: Andrea Piras Date: Fri Sep 12 22:20:52 2008 +0200 2008-09-11 Rene Milk * git-stat.sh, tools/developer-merge.sh, tools/get-revision.sh, tools/update-buildbot.sh, tools/update-ebuilds-slave.sh, tools/update-ebuilds.sh: changed all git commands to "new" style 2008-09-11 Rene Milk * src/torrentoptionspanel.cpp: fixed build 2008-09-10 Rene Milk * : commit 5def72ee2d7415fa78f8df217db605b458ab8005 Author: Rene Milk Date: Wed Sep 10 22:41:36 2008 +0200 2008-09-10 Rene Milk * : commit eb8020d11481f6cca98ea91c97dc768e7709ea2f Merge: 083c362 3376299 Author: Rene Milk Date: Wed Sep 10 21:01:12 2008 +0200 2008-09-10 Dmytry Lavrov * src/socket.cpp, src/socket.h: Minor cleanup 2008-09-10 Dmytry Lavrov * src/socket.cpp, src/socket.h, src/torrentwrapper.cpp: Fixed disconnect and close times issue, now close is instaneous. (Changed ping thread to use wxSemaphore::WaitTimeout instead of Sleep, changed thread kind to joinable thread, PingThread::Wait() posts to semaphore ending the "sleep" in the thread. Cleaned up code a little) 2008-09-10 Rene Milk * : commit 9dee6f5e3054a48bbc45c88ae15218c312074f48 Merge: 6f678d9 553a863 Author: Rene Milk Date: Wed Sep 10 08:54:33 2008 +0200 2008-09-09 Andrea Piras * src/chatpanel.cpp: fixed accidentally committed merge symbols 2008-09-09 Dmytry Lavrov * src/maintorrenttab.cpp: Fixed layout of download manager tab. 2008-09-09 Andrea Piras * : commit 4cf81fe4d66ccae97c8950d6fe9ccaa7523bee0f Author: Dmytry Lavrov Date: Tue Sep 9 17:31:26 2008 +0300 2008-09-09 Andrea Piras * : Merge commit 'dizekat/master' 2008-09-09 Andrea Piras * src/torrentwrapper.cpp: fixed formatting and added check for torrent to contain only a single file 2008-09-09 Dmytry Lavrov * src/chatlog.cpp, src/chatpanel.cpp: Fixed a crashbug from unitialized pointer. Todo: replace all that pointer crap with smartpointers. 2008-09-09 Dmytry Lavrov * src/settings.cpp, src/torrentwrapper.cpp, src/useractions.h: Fixes and minor cleanup for torrent seeds. Group actions config format changed, using names instead of bitmasks, tested, backward compatible. 2008-09-09 Dmytry Lavrov * : commit 198cb8ab6fdd2432c40acb46a2fb842a1d4cc039 Merge: fec402b ddefa0f Author: Dmytry Lavrov Date: Tue Sep 9 08:34:07 2008 +0300 2008-09-08 Andrea Piras * src/torrentwrapper.cpp: fixed seed join for torrents 2008-09-08 Andrea Piras * : commit de6b889635a0bf37bd78bc16d5395f7a8b4dc8bc Author: Andrea Piras Date: Mon Sep 8 18:06:33 2008 +0200 2008-09-08 Andrea Piras * src/torrentwrapper.cpp: made the torrent system tollerant of folders inside torrent files 2008-09-08 Andrea Piras * src/torrentwrapper.cpp: forgot to commit a small fix 2008-09-08 Dmytry Lavrov * : commit 38671d7c77d5dc79a1fcdc075d2e13b5d2ce0659 Author: Dmytry Lavrov Date: Mon Sep 8 18:08:03 2008 +0300 2008-09-08 Andrea Piras * src/torrentwrapper.cpp: fixed bool logic typoe 2008-09-08 Andrea Piras * src/maintorrenttab.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h: fixed remove function to accept row and automated some tasks, much more failsafe now 2008-09-08 Dmytry Lavrov * : commit 2791636b09ca00cf1939e2be498decb4b7341ba8 Author: Andrea Piras Date: Mon Sep 8 16:22:17 2008 +0200 2008-09-08 Dmytry Lavrov * springlobby.cbp: Have to do some stupid changes to codeblocks project file to build here. 2008-09-08 Dmytry Lavrov * src/maintorrenttab.cpp: Fixed selection save&restore in TorrentTab, tested, seem to work correctly now. 2008-09-08 Andrea Piras * src/torrentwrapper.cpp: now files should be correctly marked as available when present locally for seeding 2008-09-07 Andrea Piras * : commit 553a8630ea102cad2f074c13d15725a1f32b63d0 Author: Andrea Piras Date: Sun Sep 7 23:39:24 2008 +0200 2008-09-07 Rene Milk * : commit 5e456226e2f2f2f6a49c96dc993bca3c6379fecb Merge: b75d7d3 b3eeb0c Author: Rene Milk Date: Sun Sep 7 23:33:19 2008 +0200 2008-09-07 Rene Milk * Makefile.am: Signed-off-by: Rene Milk 2008-09-07 Rene Milk * Makefile.am: bleh, added missing file to makefile 2008-09-07 Andrea Piras * : commit 48d93f35bdbf1606cf53483e4cd502b812619cc0 Author: Rene Milk Date: Sun Sep 7 23:13:39 2008 +0200 2008-09-07 Rene Milk * : commit 442d654f9f1e27ed529e1edaee4338a84d1ad598 Author: Rene Milk Date: Sun Sep 7 23:07:21 2008 +0200 2008-09-07 Andrea Piras * tools/buildbot-create-build-dirs.sh: fixed buildbot script 2008-09-07 Andrea Piras * : commit 3a0abaf2ad2ab7085cd9d72496126f1a9e30d6e1 Merge: de9584e 2e5cd9c Author: Rene Milk Date: Sun Sep 7 22:14:06 2008 +0200 2008-09-07 Andrea Piras * src/filelister/filelistdialog.cpp: fixed search form crashing 2008-09-07 Andrea Piras * src/torrentwrapper.cpp: now download finally works again :) 2008-09-07 Andrea Piras * src/filelister/filelistdialog.cpp, src/torrentwrapper.cpp: fixed file duplicate error on every file 2008-09-07 Rene Milk * src/chatpanel.cpp: "applied" patch by danuker 2008-09-07 Rene Milk * src/Helper/colorbutton.cpp: removed colorbutton background on non-msw plattforms 2008-09-07 Andrea Piras * src/filelister/filelistdialog.cpp, src/maintorrenttab.cpp, src/mainwindow.cpp, src/serverevents.cpp, src/spring.cpp, src/springlobbyapp.cpp, src/torrentoptionspanel.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h, src/ui.cpp: pass reference, not pointer of torrentwrapper class 2008-09-07 Andrea Piras * src/filelister/filelistdialog.cpp, src/maintorrenttab.cpp, src/mainwindow.cpp, src/serverevents.cpp, src/spring.cpp, src/springlobbyapp.cpp, src/torrentoptionspanel.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h, src/ui.cpp: no more segfault on load 2008-09-07 Rene Milk * : commit 0df6c18877e399c19fe80b731dfdb436daac4eb6 Author: Rene Milk Date: Sun Sep 7 19:22:58 2008 +0200 2008-09-07 Andrea Piras * : commit f5831ad7472bf64d702eb57bf2ac335c3c611625 Merge: 8fb1317 a9bcf18 Author: Rene Milk Date: Sun Sep 7 18:40:57 2008 +0200 2008-09-07 Andrea Piras * src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h, src/torrentwrapper.cpp, src/torrentwrapper.h: now SL stops joining dodgy or unrequested torrents 2008-09-07 Rene Milk * CMakeLists.txt, cmake/Toolchain-mingw32.cmake: resource files get compiled and included in exe properly 2008-09-07 Rene Milk * CMakeLists.txt, src/Helper/colorbutton.cpp, src/Helper/listctrl.cpp, src/springlobbyapp.cpp: fix some build issues, put locales in windows zip and adjust catalog path to load them 2008-09-07 Andrea Piras * src/mainwindow.cpp: now torrent system auto switches to manual mode when a stop is issued 2008-09-07 Rene Milk * CMakeLists.txt, cmake/KWWidgetsGettextExtract.cmake, cmake/KWWidgetsInternationalizationMacros.cmake, po/ar.po, po/da.po, po/de.po, po/es.po, po/fi.po, po/fr.po, po/it.po, po/pt.po, po/ro.po, po/ru.po, po/springlobby_ar.po, po/springlobby_da.po, po/springlobby_de.po, po/springlobby_es.po, po/springlobby_fi.po, po/springlobby_fr.po, po/springlobby_it.po, po/springlobby_pt.po, po/springlobby_ro.po, po/springlobby_ru.po, po/springlobby_sv.po, po/springlobby_uk.po, po/springlobby_zh_CN.po, po/sv.po, po/uk.po, po/zh_CN.po: seems to be working now 2008-09-06 Andrea Piras * src/ui.cpp: server messages gets properly displayed in server tab 2008-09-06 Rene Milk * CMakeLists.txt, cmake/FindGettext.cmake: Signed-off-by: Rene Milk 2008-09-04 Rene Milk * : commit 9f4f9692622931a69a604d839621da1a72e1dba2 Author: Rene Milk Date: Thu Sep 4 22:20:26 2008 +0200 2008-09-04 Rene Milk * src/battlelisttab.cpp, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/settings.cpp, src/settings.h, src/ui.cpp: adds battle filter actvie state load/save 2008-09-02 Andrea Piras * src/iconimagelist.cpp: when caching sidepic icons in the ram, don't mix different mod icons if the faction has the same name 2008-09-02 Andrea Piras * src/iconimagelist.cpp, src/iconimagelist.h, src/images/rank_unknown.xpm, src/tasserver.cpp, src/user.cpp, src/user.h: added unknown rank icon and now the lobby shouldn't glitch if it doesn't recieves a status message for players 2008-08-30 Andrea Piras * : commit c502170869d60ed79149a75aa9235aa4089f325c Author: Rene Milk Date: Sat Aug 30 22:25:16 2008 +0200 2008-08-30 Andrea Piras * : commit 5e241114a5e879068d2a61ebd689e260368e9de8 Merge: ae8ace4 2f4d189 Author: Rene Milk Date: Sat Aug 30 20:15:36 2008 +0200 2008-08-30 Andrea Piras * : commit 6a69bf79c6085cfb21765147f917d8402b19aadc Author: Andrea Piras Date: Sat Aug 30 14:26:43 2008 +0200 2008-08-29 Rene Milk * : commit ae8ace488d60c30b3720f0cc1f37a6262802fb30 Merge: ccd901e 5b1499b Author: Rene Milk Date: Fri Aug 29 21:46:46 2008 +0200 2008-08-29 Andrea Piras * : commit 5b1499b8ea1a444b4e33ecc3345be7102e00324c Author: Andrea Piras Date: Fri Aug 29 14:28:04 2008 +0200 2008-08-29 Andrea Piras * : commit 7a10e0de3e6c1e28fae8b9f070901b3a34e63c03 Merge: 431c693 df52f66 Author: Andrea Piras Date: Fri Aug 29 14:22:45 2008 +0200 2008-08-29 Rene Milk * : commit 0aaff57971a21011ac5027f8d95a744245229efd Author: Rene Milk Date: Fri Aug 29 00:02:52 2008 +0200 2008-08-28 Rene Milk * : commit 5f5b55ee0ee38548dbefaee7249175273291f0a9 Author: Rene Milk Date: Thu Aug 28 23:27:01 2008 +0200 2008-08-28 Rene Milk * src/updater/updater.cpp: now backupfile gets removed before starting the rename/copy process 2008-08-28 Rene Milk * src/springlobbyapp.cpp, src/ui.cpp, src/ui.h, src/updater/updater.cpp, src/updater/versionchecker.cpp: call updater from ui::onupdtae instead of app::oninit 2008-08-28 Rene Milk * src/springlobbyapp.cpp, src/updater/exedownloader.cpp, src/updater/updater.cpp: manual update works 2008-08-28 Andrea Piras * : commit 431c69310267bef6a4e5f8c8919c71de89504b69 Author: Andrea Piras Date: Thu Aug 28 20:46:58 2008 +0200 2008-08-28 Rene Milk * : commit 6ff674986965676aa203c04346dff93621c6eb14 Merge: c0e1f7d 2248fff Author: Rene Milk Date: Thu Aug 28 20:01:28 2008 +0200 2008-08-28 Andrea Piras * CMakeLists.txt: fixed minimum cmake version 2008-08-28 Andrea Piras * : commit 63ba8fc65f21982312a4ea639710f58ed6901fd2 Author: Andrea Piras Date: Thu Aug 28 15:18:36 2008 +0200 2008-08-28 Andrea Piras * src/spring.cpp: fixed script.txt not getting passed corrrectly to spring in MP if there is a space in the path 2008-08-28 Rene Milk * : Merge commit 'koshi/master' 2008-08-27 Rene Milk * : commit 6353dc40527f01e764633726f39ba4425b16896b Author: Andrea Piras Date: Wed Aug 27 23:12:57 2008 +0200 2008-08-27 Rene Milk * : commit 5b334337dd3cfaf241f9fba2fd186b5c65b58d13 Author: Andrea Piras Date: Wed Aug 27 22:28:00 2008 +0200 2008-08-27 Rene Milk * : commit 1c76a9cfb0f0da30c073663df237e178f934001e Author: Andrea Piras Date: Wed Aug 27 22:18:10 2008 +0200 2008-08-27 Andrea Piras * src/updater/updater.cpp: fixed exe replacing logic in updater 2008-08-27 Rene Milk * : commit 1336f5730c8f8f518f855db1f75dea8100515632 Author: Rene Milk Date: Wed Aug 27 20:54:43 2008 +0200 2008-08-27 Andrea Piras * src/updater/updater.cpp: fixed wxChar <-> wxString problems 2008-08-27 Andrea Piras * : commit 1e617b68d63d9b01a9cd9f544b7a34b70a064d77 Author: Andrea Piras Date: Wed Aug 27 20:45:26 2008 +0200 2008-08-27 Andrea Piras * src/updater/updater.cpp: forgot to create the temp dir to download stuff to 2008-08-27 Andrea Piras * src/updater/updater.cpp: use the lobby write dir and not the dir of the exe in the updater for the temp download 2008-08-27 Andrea Piras * : commit 24ab456bcf7cdfdaa83bd2192005ce738384f85c Author: Andrea Piras Date: Wed Aug 27 20:01:12 2008 +0200 2008-08-27 Andrea Piras * src/settings.cpp, src/settings.h: now all the folder the lobby needs to write to should be based on the setting GetLobbyWriteDir() 2008-08-27 Rene Milk * : commit 6cf94953ed5cdce0964e2bd65414d62bf9ee049d Merge: 9c01fbc 6905aa1 Author: Andrea Piras Date: Wed Aug 27 19:24:18 2008 +0200 2008-08-27 Andrea Piras * src/springlobbyapp.cpp: fixed cache dir not created regression 2008-08-27 Andrea Piras * src/springlobbyapp.cpp: improved a bit first time wizard 2008-08-27 Andrea Piras * CMakeLists.txt, Makefile.am: fixed buildsystems 2008-08-27 Andrea Piras * src/chatoptionstab.cpp, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springoptionstab.h, src/torrentwrapper.cpp: now SL uses standard lobby paths to avoid forum drama, improved slightly the portable mode, now the paths in the options panel are ignored when using it rather then overwritten everytime (panels in the options gets grayed out) 2008-08-27 Rene Milk * : commit c0f7ff7d96c57ac51b4e094d74918a5208589fe9 Author: Andrea Piras Date: Wed Aug 27 16:57:33 2008 +0200 2008-08-26 Andrea Piras * src/globalevents.cpp, src/updater/updater.cpp, src/updater/updater.h: now compiles, links and should autodownload stuff 2008-08-26 Rene Milk * : commit 4347e04b53e9a4e8eed9316819e17971448a945b Merge: 7d780d3 6730880 Author: Rene Milk Date: Tue Aug 26 22:06:16 2008 +0200 2008-08-26 Andrea Piras * src/updater/exedownloader.cpp, src/updater/exedownloader.h, src/updater/updater.cpp, src/updater/updater.h: forgot to commit a couple of files >_> 2008-08-26 Andrea Piras * springlobby.cbp, src/globalevents.cpp, src/globalevents.h, src/mainwindow.cpp, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/updater/versionchecker.h: first wersion, doesnt link and doesn't downloads stuff :P 2008-08-26 Andrea Piras * src/tasserver.cpp: stop whining about invalid m_battle_id 2008-08-26 Andrea Piras * CMakeLists.txt: fixed typo in cmake buildsystem 2008-08-26 Andrea Piras * springlobby.cbp: how could i miss this one? 2008-08-26 Rene Milk * : Merge commit 'koshi/master' 2008-08-26 Andrea Piras * : commit 469c08c451bedfe792f0e23caa13cd147415c2f7 Author: Andrea Piras Date: Tue Aug 26 03:35:29 2008 +0200 2008-08-26 Andrea Piras * : commit 2df623a274b487a471de8c55b0b8438a8ee25ad3 Author: Andrea Piras Date: Tue Aug 26 03:05:40 2008 +0200 2008-08-26 Rene Milk * : commit a5656884665f29d8839e78e4d5b30ab5b2fef8b9 Author: Rene Milk Date: Tue Aug 26 02:05:05 2008 +0200 2008-08-26 Rene Milk * src/userlistctrl.cpp: fixes add user in groupdialog 2008-08-25 Andrea Piras * : commit 00872b21cd32b9839573568a7ca8fd21b3712a0e Merge: 9b1dc08 f19b4e8 Author: Andrea Piras Date: Mon Aug 25 21:03:56 2008 +0200 2008-08-25 Andrea Piras * src/settings.h: bumped cache version 2008-08-25 Andrea Piras * src/springunitsync.cpp: forgot to commit curly braces, removed warning 2008-08-25 Andrea Piras * src/springunitsync.cpp: fixed mod options cache loading 2008-08-25 Rene Milk * src/battlelisttab.cpp, src/customlistctrl.cpp, src/customlistctrl.h: fixes battlelist scrolling when selected battle is deleted 2008-08-25 Rene Milk * : commit 522a7c827c1bc4467319fdc366ea34a421795ee3 Merge: 6106dce f942a5e Author: Rene Milk Date: Mon Aug 25 10:34:08 2008 +0200 2008-08-25 Rene Milk * src/springunitsync.cpp: a little comment so i won't remove the unused total variable again 2008-08-25 Rene Milk * : commit f942a5e1c52b3118cd40cdf2f6ed36fc6708fcd3 Merge: f5c9175 0a2ba64 Author: Andrea Piras Date: Mon Aug 25 04:15:45 2008 +0200 2008-08-25 Andrea Piras * src/springunitsync.cpp: Revert "commented out unused variable" This reverts commit 5fe2fb85805987bfbdd0a152747cbecaf9a6a4d0. Conflicts: src/springunitsync.cpp 2008-08-24 Andrea Piras * : commit ead12be035750b4ac969c436dbd10f7c691a29ec Author: Andrea Piras Date: Sun Aug 24 23:35:44 2008 +0200 2008-08-24 Rene Milk * src/httpdownloader.cpp: should fix error on suse buildservice 2008-08-24 Rene Milk * src/mainchattab.cpp: revert to old icon/replace func 2008-08-24 Rene Milk * Makefile.am, src/Helper/colorbutton.cpp: fixes windows compile 2008-08-24 Rene Milk * : commit 33e1252e2d1e83638546df0f8538b5e59244dc87 Merge: b41c641 ccaf542 Author: Rene Milk Date: Sun Aug 24 16:26:13 2008 +0200 2008-08-24 Rene Milk * : commit e818864b76a4a138f35dbf6a8c538962ee6db62d Merge: f3c74ce ccaf542 Author: Rene Milk Date: Sun Aug 24 15:53:54 2008 +0200 2008-08-24 Rene Milk * src/settings++/presets.h: Signed-off-by: Rene Milk 2008-08-24 Rene Milk * src/settings++/presets.h: Signed-off-by: Rene Milk 2008-08-24 Rene Milk * src/settings++/custom_dialogs.cpp: Signed-off-by: Rene Milk 2008-08-24 Rene Milk * src/settings++/custom_dialogs.cpp: Signed-off-by: Rene Milk 2008-08-24 Rene Milk * src/springunitsync.cpp: triv change for hook testing 2008-08-24 Rene Milk * src/springunitsync.cpp: commented out unused variable 2008-08-24 Rene Milk * CMakeLists.txt: added one missing file to cmakelists 2008-08-24 Rene Milk * tools/test-tarball.sh: really remove buidl dir this time 2008-08-24 Rene Milk * tools/test-tarball.sh: not everyone wnat to build with -j4 :P 2008-08-24 Rene Milk * tools/test-tarball.sh: remove build-distcheck on success 2008-08-24 Rene Milk * tools/test-tarball.sh: prototype tarball.test (=make distcheck replacement) 2008-08-24 Rene Milk * cmake/package_config.cmake: windows zip name changed to what buildbot expected 2008-08-24 Rene Milk * CMakeLists.txt, cmake/config.h, cmake/package_config.cmake, tools/get-revision.sh: fixed VERSION / HAVE_CONFIG_H behaviour 2008-08-24 Rene Milk * CMakeLists.txt: Signed-off-by: Rene Milk 2008-08-24 Rene Milk * CMakeLists.txt, cmake/FindSDL.cmake, cmake/FindSDL_mixer.cmake, cmake/FindSDL_sound.cmake: fixed sdl cmake finding 2008-08-24 Rene Milk * cmake/config.h, cmake/package_config.cmake: added cmake/config.h template 2008-08-24 Rene Milk * CMakeLists.txt, tools/buildbot-create-build-dirs.sh: duh, trying to test buildbot w/o changed scripts.. 2008-08-23 Rene Milk * CMakeLists.txt, cmake/package_config.cmake, tools/get-revision.sh: added install for NOT WIN32, getting error 2008-08-23 Rene Milk * CMakeLists.txt: also build springsettings and have install target 2008-08-23 Rene Milk * CMakeLists.txt, cmake/package_config.cmake, tools/get-revision.sh: strange prob with linefeed in zipname 2008-08-23 Andrea Piras * : commit 4e8cb5aba362ed519d5fa9fce3e896c38f2cb1de Author: Rene Milk Date: Sat Aug 23 18:52:59 2008 +0200 2008-08-23 Rene Milk * cmake/libtorrent.cmake: libtorrent sources file 2008-08-23 Rene Milk * CMakeLists.txt, cmake/Toolchain-mingw32.cmake: cmake cross compiel with libt 2008-08-23 Andrea Piras * CMakeLists.txt, Makefile.am, springlobby.cbp: forgot to commit buildsystem changes 2008-08-23 Rene Milk * CMakeLists.txt, cmake/Toolchain-mingw32.cmake: win specifics back in toolcahin file 2008-08-23 Rene Milk * CMakeLists.txt, cmake/Toolchain-mingw32.cmake: Signed-off-by: Rene Milk 2008-08-23 Andrea Piras * : commit f3cb1184e51b7a5839bf682aa8fff93a3bc5cb3c Author: Andrea Piras Date: Sat Aug 23 17:17:56 2008 +0200 2008-08-23 Andrea Piras * git-stat.sh, src/images/userchat.png.h, src/mainchattab.cpp: Revert "new icon trial" This reverts commit 87c3461ae12f24db5febb758f9c5676edcef4f1e. 2008-08-23 Andrea Piras * src/mainchattab.cpp: Revert "Merge branch 'new_pm_icon' of git://graasmilk.net/git/BrainDamage/springlobby.git into wxaui" This reverts commit 303fb11e370e03910366d13c1faf325e48f5538b. 2008-08-23 Andrea Piras * src/battlelistctrl.cpp, src/battlelistfilter.cpp, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroomlistctrl.cpp, src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/chatoptionstab.cpp, src/chatpanel.cpp, src/lobbyoptionstab.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainoptionstab.cpp, src/mainsingleplayertab.cpp, src/maintorrenttab.cpp, src/managegroupspanel.cpp, src/singleplayertab.cpp, src/torrentoptionspanel.cpp: most panels should auto-register/unregister in aui manager now 2008-08-23 Andrea Piras * src/mainwindow.cpp: forgot to commit a thing 2008-08-23 Andrea Piras * src/auimanager.cpp, src/auimanager.h, src/battlelisttab.cpp, src/mainwindow.cpp: aui manager works! 2008-08-23 Rene Milk * cmake/Toolchain-mingw32.cmake: added what could become the toolcahin file for cross compiles, however using that wx ain't found 2008-08-23 Rene Milk * CMakeLists.txt, src/Helper/colorbutton.cpp, src/Helper/wxtextctrlhist.cpp: cmkae builds again 2008-08-22 Rene Milk * src/battleroomtab.cpp, src/customlistctrl.cpp: fixed fubared merge resoltuoin for real this time, possibly fix mixup in hl in brroomtab 2008-08-22 Rene Milk * src/settings++/Defs.hpp, src/settings++/tab_abstract.cpp, src/settings++/tab_quality_video.cpp, src/settings++/tab_quality_video.h: adds UsePBO and CompressTextures 2008-08-22 Rene Milk * src/settings++/Defs.hpp, src/settings++/tab_abstract.cpp, src/settings++/tab_ui.h: adds hardware cursor 2008-08-22 Rene Milk * src/customlistctrl.cpp: bleh, fubared merge resolution 2008-08-22 Rene Milk * src/auimanager.h, src/battlelisttab.cpp, src/mainwindow.cpp: lazy fix: put func inside class scope 2008-08-22 Rene Milk * : commit c9dfcd6d1be9a30ca2482fec15004bea6ab5c420 Merge: bbde771 0d9f13c Author: Rene Milk Date: Fri Aug 22 17:50:14 2008 +0200 2008-08-22 Rene Milk * : commit 68993551d69e243a0f4e5a9e4dd46c0c9ee48383 Author: Andrea Piras Date: Fri Aug 22 17:48:35 2008 +0200 2008-08-22 Rene Milk * : commit 0d9f13cc7c969c157ad12c2f16a8b709576beb1e Author: Andrea Piras Date: Fri Aug 22 17:46:14 2008 +0200 2008-08-22 Andrea Piras * src/battlelisttab.cpp, src/mainwindow.cpp, src/mainwindow.h: attempt to move aui manager to it's own class 2008-08-22 Rene Milk * tools/update-docs.sh: new docs script for buildbot/site 2008-08-22 Rene Milk * src/battlelisttab.cpp, src/mainwindow.cpp, src/mainwindow.h: trying with derived notebook 2008-08-22 Rene Milk * src/battleroommmoptionstab.cpp, src/customlistctrl.cpp, src/springunitsync.cpp: fixed missing '=' and unsigned warnigs 2008-08-22 Rene Milk * src/battleroommmoptionstab.cpp: fixes layout issues in battleoptionstab; controls of same type are h-aligned, proper scrolling behaviour and siozer grwoth prevents overflow 2008-08-22 Andrea Piras * src/mainwindow.cpp, src/mainwindow.h: added aui manager to mainwindow 2008-08-22 Andrea Piras * : commit 4f39afe71f964de4848d3733a6468621499fcd1a Author: Rene Milk Date: Fri Aug 22 03:08:59 2008 +0200 2008-08-22 Rene Milk * src/iconimagelist.cpp, src/images/spectator.png.h, src/images/warning_small.png.h: added spec icon as png for alpha and some missing image header 2008-08-22 Rene Milk * src/battleroomlistctrl.cpp, src/iconimagelist.cpp, src/iconimagelist.h, src/uiutils.cpp, src/uiutils.h: cahnged status icons in battleroomlist to have on the fly overlays, spec image still missing (lacking alpha currently) 2008-08-22 Rene Milk * : commit 0936d301fc102bee15bf920496fb6cfa85146d88 Merge: 082a15f c2a22de Author: Rene Milk Date: Fri Aug 22 00:33:46 2008 +0200 2008-08-22 Rene Milk * src/settings++/helpmenufunctions.cpp: bumped version 2008-08-22 Rene Milk * src/settings++/Defs.hpp, src/settings++/se_utils.h, src/settings++/tab_abstract.cpp, src/settings++/tab_quality_video.cpp: all w4 opts work 2008-08-21 Collin J. Sutton * src/chatpanel.cpp: Rewrote URL handling code in chatpanel Spaces in messages are now correctly preserved. 2008-08-21 Rene Milk * src/settings++/Defs.hpp, src/settings++/tab_quality_video.cpp: minor layout 2008-08-21 Rene Milk * src/settings++/presets.h, src/settings++/tab_abstract.cpp, src/settings++/tab_quality_video.cpp, src/settings++/tab_quality_video.h: w4 presets work 2008-08-21 Andrea Piras * src/socket.cpp: fixed some socket problems at app close ( crashes, hangs and deadlocks) 2008-08-21 Andrea Piras * : commit f3264584729d70d8307db58a391ea4aa5973442d Author: Andrea Piras Date: Thu Aug 21 17:04:22 2008 +0200 2008-08-21 Rene Milk * src/images/springsettings.xpm: Signed-off-by: Rene Milk 2008-08-21 Rene Milk * src/settings++/tab_quality_video.cpp: new options work 2008-08-21 Rene Milk * Makefile.am, src/settings++/tab_abstract.cpp, src/settings++/tab_quality_video.cpp: works except for spinctrl 2008-08-20 Rene Milk * src/images/springsettings.xpm, src/settings++/Defs.hpp, src/settings++/tab_abstract.cpp, src/settings++/tab_abstract.h, src/settings++/tab_quality_video.cpp, src/settings++/tab_quality_video.h: w4 almost complete, needs writing on change 2008-08-20 Andrea Piras * src/springunitsync.cpp, src/springunitsync.h: now even mod hash check gets cache speedup 2008-08-20 Andrea Piras * src/springunitsync.cpp: fixed side caching for good 2008-08-19 Tobi Vollebregt * src/battlelistctrl.cpp, src/nicklistctrl.cpp: Use .CmpNoCase instead of .MakeUpper and operator < > This saves a bunch of memory allocations, in particular in - NickListCtrl::ComparePlayernameUP (22.05% -> 14.69%), and - NickListCtrl::ComparePlayercountryUP (18.50% -> 14.93%), which were the two methods taking over 40% of the execution time when idling in #main and some other channels. 2008-08-19 Rene Milk * src/settings++/Defs.hpp, src/settings++/tab_abstract.cpp, src/settings++/tab_abstract.h: added w4 controls 2008-08-19 Rene Milk * src/settings++/tab_abstract.cpp, src/settings++/tab_quality_video.cpp: show new w4 string in combox 2008-08-19 Rene Milk * src/settings++/presets.cpp, src/settings++/presets.h: added prelim default presets for water 4 2008-08-19 Rene Milk * src/settings++/se_settings.cpp: makes springsettings always go into portable mode on windows to circumvent diff unitsync issues 2008-08-18 Rene Milk * Makefile.am, src/settings++/se_settings.cpp, src/settings++/se_settings.h: changed settings handler for file conf on win 2008-08-18 Rene Milk * Makefile.am: Signed-off-by: Rene Milk 2008-08-18 Rene Milk * src/settings++/frame.cpp, src/settings++/se_utils.cpp: changed unitsync loading on win to check cwd first for unitsync 2008-08-18 Rene Milk * src/settings++/helpmenufunctions.cpp: bumped version string 2008-08-18 Rene Milk * src/replaylistctrl.cpp, src/replaylistctrl.h, src/replaytab.cpp: replaced ui n replaylist with global 2008-08-18 Rene Milk * : commit 7e0067906ce64a1ffe0375ac722a46d99d7c0327 Merge: 7162a8d 082a15f Author: Rene Milk Date: Mon Aug 18 21:44:14 2008 +0200 2008-08-18 Rene Milk * : commit ef3539f8a59820870294c3b681ec35b86a0ad30c Merge: 2e27058 7b55dd2 Author: Rene Milk Date: Mon Aug 18 21:40:52 2008 +0200 2008-08-18 Rene Milk * : commit 082a15fd7227241e5acb0e3a0a60c4a9dc304426 Author: Rene Milk Date: Mon Aug 18 21:25:05 2008 +0200 2008-08-18 Rene Milk * Makefile.am: fixed makefile Conflicts: Makefile.am 2008-08-18 Rene Milk * src/lobbyoptionstab.cpp, src/lobbyoptionstab.h: Signed-off-by: Rene Milk 2008-08-18 Rene Milk * Makefile.am: fixed makefile 2008-08-18 Andrea Piras * src/springunitsync.cpp: fixed sidename caching 2008-08-17 Rene Milk * src/torrentwrapper.cpp, src/torrentwrapper.h: removed unnecessary code 2008-08-17 Rene Milk * src/torrentwrapper.cpp, src/torrentwrapper.h: foxes 568 2008-08-17 Rene Milk * springlobby.cbp: fixed codeblocks file Signed-off-by: Rene Milk 2008-08-17 Rene Milk * src/groupuserdialog.cpp, src/mainoptionstab.cpp, src/mainwindow.h, src/userlistctrl.cpp, src/userlistctrl.h: sorting in user add dialog (again? didn't i do that already?) 2008-08-17 Rene Milk * springlobby.cbp: Signed-off-by: Rene Milk 2008-08-17 Rene Milk * : commit 2e841b74e614c501fc8f3aa907d95c7cfc83771d Author: Rene Milk Date: Sun Aug 17 16:57:44 2008 +0200 2008-08-17 Rene Milk * src/springlobbyapp.cpp: show notice on first run 2008-08-17 Rene Milk * src/chatoptionstab.cpp, src/chatoptionstab.h, src/mainoptionstab.cpp, src/mainoptionstab.h, src/settings.cpp, src/settings.h: move autoconnect to new tab alongside disabling stats option 2008-08-17 Rene Milk * configure.ac.m4: Signed-off-by: Rene Milk 2008-08-17 Rene Milk * Makefile.am, configure.ac.m4: fixes NO_TORRENT on windows and add windows to version string 2008-08-17 Rene Milk * src/utils.cpp: removed degub variable Signed-off-by: Rene Milk 2008-08-17 Rene Milk * : commit 99c22a2b0fb4d3db7f07f0893d87ba1b25bb119a Author: Rene Milk Date: Sun Aug 17 13:19:09 2008 +0200 2008-08-17 Rene Milk * src/filelister/filelistctrl.cpp, src/nicklistctrl.cpp, src/userlistctrl.cpp: removed windows only coloumn sizes 2008-08-17 Rene Milk * : commit bd487cf17dae7789bfe3baabdbe3dd6d7052b8a1 Merge: 76a27d8 4a4de29 Author: Rene Milk Date: Sun Aug 17 13:02:09 2008 +0200 2008-08-17 Rene Milk * src/httpdownloader.cpp, src/springlobbyapp.cpp: fixes http downloader on windows 2008-08-17 Rene Milk * : commit 35a29887a7cc3ac00d417f22a800de4c4be51006 Author: Rene Milk Date: Sun Aug 17 02:56:17 2008 +0200 2008-08-16 Rene Milk * src/managegroupspanel.cpp, src/useractions.h: theoretically added tooltips to action checkboxes, only they don't show 2008-08-16 Rene Milk * src/chatpanel.cpp, src/customlistctrl.cpp: fix possible ground for segfault 2008-08-16 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/mainoptionstab.cpp, src/mainoptionstab.h, src/mainwindow.cpp, src/mainwindow.h, src/managegroupspanel.h: create a new group via right-click innicklist and add user to it in one step 2008-08-16 Rene Milk * : commit 8d695f1d6b4ddbb74cbd4d01b342998739bfb5de Author: Rene Milk Date: Sat Aug 16 17:49:29 2008 +0200 2008-08-16 Andrea Piras * : commit d21a8f01986bcf46fd8f72a29b4e29bb6286f251 Author: Rene Milk Date: Sat Aug 16 16:53:49 2008 +0200 2008-08-16 Rene Milk * src/iconimagelist.cpp, src/iconimagelist.h, src/serverevents.cpp, src/useractions.h: differentiate ignore chat/pm 2008-08-16 Rene Milk * : commit ccc1b55781f9ceace48173dae305db03419a2793 Merge: 5f351e8 9c037d4 Author: Rene Milk Date: Sat Aug 16 15:46:08 2008 +0200 2008-08-16 Rene Milk * src/customlistctrl.cpp: ups, compiles again 2008-08-16 Rene Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/customlistctrl.cpp, src/nicklistctrl.cpp, src/torrentlistctrl.cpp, src/userlistctrl.cpp: moved setting of image lists to base class 2008-08-16 Rene Milk * springlobby.cbp: Signed-off-by: Rene Milk 2008-08-16 Rene Milk * Makefile.am, src/Helper/listctrl.cpp, src/Helper/listctrl.h, src/battleroomtab.cpp, src/customlistctrl.cpp, src/customlistctrl.h, src/iconimagelist.cpp, src/iconimagelist.h: no more listctrl issues, nuff said 2008-08-15 Andrea Piras * src/springunitsync.cpp: fixed filename of mapoptions cache 2008-08-15 Andrea Piras * src/springunitsync.cpp: fixed some unitsync problems 2008-08-15 Andrea Piras * src/settings.h: bumped cache version 2008-08-15 Andrea Piras * src/springunitsync.cpp, src/springunitsync.h: minimap cache uses standardized path now 2008-08-15 Andrea Piras * src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h, src/unitsyncthread.cpp: standardized more unitsync caching behviours, now all routine operations are cached when trying to access unitsync 2008-08-15 Andrea Piras * src/springunitsync.cpp, src/springunitsync.h: mod options cached to disk, same for sidepics, sidenames, side numbers, added standardized way to cache files to disk for unitsync 2008-08-15 Rene Milk * src/Helper/colorbutton.cpp: fixes weird bg in colorbuttons on windows 2008-08-15 Rene Milk * src/battlelistctrl.cpp, src/battlelisttab.cpp: fixes battlelist highlights not updating properly 2008-08-15 Rene Milk * src/battlelistctrl.cpp, src/serverevents.cpp: bah, what the last commit said + changed notif for hosted battle to say user opened battle xyz 2008-08-15 Rene Milk * src/battlelistctrl.cpp: bleh, changed behaviour again to avoid color flicker. host is still checked first, then on first return after highlighting the first user 2008-08-15 Rene Milk * src/battlelistctrl.cpp: changed highlighting behaviour in battlelist to prioritize highlighting the host over other users, if host isn't in any group all players are checked for highlight, with last player highlight color taken precedence 2008-08-15 Rene Milk * src/Helper/colorbutton.cpp, src/groupuserdialog.cpp, src/managegroupspanel.cpp: instead of crashing, display a warning when not connected and opening the adduser dialog 2008-08-15 Rene Milk * : commit 664def60c848f268750788247fb8f46cb36b9eeb Author: Rene Milk Date: Fri Aug 15 03:47:13 2008 +0200 2008-08-15 Rene Milk * : commit 86b04e0931b606692dc04eed85560df3e46bb42a Merge: 80bce8d ca02f30 Author: Rene Milk Date: Fri Aug 15 02:17:40 2008 +0200 2008-08-15 Rene Milk * : commit 2e27058675f202003dfac6bda3017c5ce25634ae Author: Rene Milk Date: Fri Aug 15 02:15:19 2008 +0200 2008-08-15 Rene Milk * src/channellistctrl.cpp: sorting works 2008-08-15 Rene Milk * springlobby.cbp, src/Helper/channelchooser.cpp, src/Helper/channelchooser.h, src/channellistctrl.cpp, src/channellistctrl.h, src/mainwindow.cpp, src/mainwindow.h: proof of concept for channel chooser, lets you join by double click on listitem 2008-08-14 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: added settings versioning 2008-08-14 Rene Milk * src/Helper/colorbutton.cpp, src/managegroupspanel.cpp, src/managegroupspanel.h: bad things happening 2008-08-14 Rene Milk * CMakeLists.txt, Makefile.am: added files to buildsystem 2008-08-14 Rene Milk * : commit 7c3dbaf94f23258883e11657b2b87b983202c6ef Merge: 23e34ea 580b406 Author: Rene Milk Date: Thu Aug 14 04:58:28 2008 +0200 2008-08-14 Rene Milk * src/groupuserdialog.cpp, src/mainoptionstab.cpp, src/managegroupspanel.cpp, src/managegroupspanel.h: - added pre group buttons for dialogs - dialogs don't work when offline 2008-08-14 Rene Milk * src/groupuserdialog.cpp, src/userlistctrl.cpp, src/userlistctrl.h: add dialog wokrs completely 2008-08-14 Rene Milk * src/groupuserdialog.cpp, src/groupuserdialog.h, src/nicklistctrl.cpp, src/user.h, src/useractions.cpp, src/useractions.h, src/userlistctrl.cpp, src/userlistctrl.h: almost completely rewrote data storage/handling in dialog, now stuff works! 2008-08-13 Rene Milk * src/groupuserdialog.cpp, src/groupuserdialog.h, src/nicklistctrl.cpp, src/nicklistctrl.h, src/user.h, src/userlistctrl.cpp, src/userlistctrl.h: mass adiing users works somewhat 2008-08-13 Rene Milk * src/customlistctrl.cpp, src/customlistctrl.h, src/groupuserdialog.cpp, src/nicklistctrl.cpp, src/nicklistctrl.h, src/user.cpp, src/user.h: can't use nicklist to display not online users 2008-08-13 Rene Milk * src/connectwindow.cpp, src/groupuserdialog.cpp, src/mainoptionstab.cpp: yay, dialog shows ok 2008-08-13 Rene Milk * src/groupuserdialog.cpp, src/useractions.h: list population 2008-08-13 Rene Milk * src/battle.cpp, src/battle.h, src/battlelistctrl.cpp, src/groupuserdialog.cpp, src/groupuserdialog.h, src/ibattle.cpp, src/ibattle.h, src/iconimagelist.cpp, src/iconimagelist.h, src/server.cpp, src/server.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/ui.h, src/userlist.cpp, src/userlist.h: a shitload more of const 2008-08-13 Rene Milk * src/battlelisttab.cpp, src/chatpanel.cpp, src/groupuserdialog.cpp, src/nicklistctrl.cpp, src/nicklistctrl.h: removed Ui param from nicklist in favor of the global ui() 2008-08-13 Rene Milk * src/groupuserdialog.cpp, src/groupuserdialog.h, src/nicklistctrl.cpp, src/nicklistctrl.h: inital funcs 2008-08-13 Rene Milk * springlobby.cbp, src/groupuserdialog.cpp, src/groupuserdialog.h: Signed-off-by: Rene Milk 2008-08-13 Rene Milk * : commit a341ae40eb7aca230410383c1294ca4ea3ea49db Merge: 8dacf2b 23e34ea Author: Rene Milk Date: Wed Aug 13 00:53:05 2008 +0200 2008-08-12 Andrea Piras * src/springlobbyapp.cpp: now SL copies uikeys.txt to user folder at first time startup in linux 2008-08-12 Rene Milk * src/managegroupspanel.cpp: better layout of mgmn panel 2008-08-12 Rene Milk * src/managegroupspanel.cpp: fixes render aerror on add/delete 2008-08-12 Andrea Piras * src/Helper/colorbutton.cpp, src/Helper/wxtextctrlhist.cpp: fixed #include paths 2008-08-12 Andrea Piras * : Merge commit 'koshi/friends_support' into groups_support Conflicts: CMakeLists.txt 2008-08-12 Rene Milk * src/battlelisttab.cpp, src/chatpanel.cpp, src/customlistctrl.cpp, src/customlistctrl.h, src/useractions.cpp: ui updates for existing actions complete (and no more segfaults) 2008-08-12 Rene Milk * src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/battleroomtab.h, src/chatpanel.cpp, src/mainjoinbattletab.cpp, src/nicklistctrl.cpp, src/useractions.cpp: - battleroom updating - fixes possible segfault in nicklist upfdteing 2008-08-12 Andrea Piras * src/mainchattab.cpp: now PM icon colour change works correctly 2008-08-12 Rene Milk * git-stat.sh, src/images/userchat.png.h, src/mainchattab.cpp: new icon trial 2008-08-12 Rene Milk * git-stat.sh, src/images/userchat.png.h, src/mainchattab.cpp: new icon trial 2008-08-12 Rene Milk * src/images/spring.xpm: new springoptions tyb icon 2008-08-12 Rene Milk * src/customlistctrl.cpp: Signed-off-by: Rene Milk 2008-08-12 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/customlistctrl.cpp, src/customlistctrl.h, src/mainchattab.cpp, src/mainchattab.h, src/nicklistctrl.cpp, src/useractions.cpp: removing highlight action from group reflects in bg change in lists 2008-08-12 Rene Milk * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/customlistctrl.h, src/filelister/filelistctrl.cpp, src/filelister/filelistctrl.h, src/nicklistctrl.cpp, src/nicklistctrl.h, src/torrentlistctrl.cpp, src/torrentlistctrl.h, src/useractions.cpp: getting the changed color into battölelist works 2008-08-12 Rene Milk * src/battlelisttab.cpp, src/battlelisttab.h, src/customlistctrl.cpp, src/useractions.cpp, src/useractions.h: updaehighlights not working, as expected 2008-08-12 Rene Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/customlistctrl.cpp, src/customlistctrl.h, src/nicklistctrl.cpp: move to new way of handling highlight thru customlist control 2008-08-11 Rene Milk * src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/customlistctrl.cpp, src/customlistctrl.h, src/nicklistctrl.cpp: moved the highlight stuff to customlistctrl -_> less code in child classes 2008-08-11 Rene Milk * : commit 038d1499136a3eda6ad81b67ca35c64fa6f91e6e Author: Rene Milk Date: Mon Aug 11 18:44:25 2008 +0200 2008-08-11 Rene Milk * CMakeLists.txt, Makefile.am, src/channellistctrl.cpp, src/channellistctrl.h, src/userlistctrl.cpp, src/userlistctrl.h: - new files added - also, for the first time, i did add them to buildsystem right away ;-) 2008-08-11 Rene Milk * src/nicklistctrl.cpp: nicklist highlight works on adduser/user status change 2008-08-11 Dmytry Lavrov * src/battle.cpp, src/battle.h, src/images/fixcolours_palette.xpm: Fix ids after autobalance, tested. 2008-08-11 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/settings.cpp, src/useractions.cpp, src/useractions.h: removing users works 2008-08-11 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/nicklistctrl.cpp, src/ui.cpp, src/ui.h, src/useractions.cpp, src/useractions.h: - added item for remove to nicklist ctx menu (unahndled) TODO: deleted groups don't get removed from submenu 2008-08-11 Rene Milk * src/ui.cpp, src/ui.h, src/useractions.cpp: - prevents doing actions on myself - prevents adding myself to a group 2008-08-11 Rene Milk * src/managegroupspanel.cpp, src/managegroupspanel.h, src/settings.cpp, src/useractions.cpp, src/useractions.h: implemented delete group 2008-08-11 Rene Milk * src/managegroupspanel.cpp: setting hl colors for groups work 2008-08-10 Rene Milk * : commit ad6542a7a8df574fef6071954efd190a1b4616ba Author: Rene Milk Date: Sun Aug 10 23:41:06 2008 +0200 2008-08-10 Rene Milk * : commit 4a8d3bc993f64fece9e7e607ce49fd2ceb8663c1 Author: Rene Milk Date: Sun Aug 10 23:19:42 2008 +0200 2008-08-10 Rene Milk * src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/settings.cpp, src/uiutils.h: - new colorchooser for battleromlist - added notice to non msw builds about only 16 colors being saved 2008-08-10 Rene Milk * src/chatoptionstab.cpp, src/chatoptionstab.h: -HUGE reduction in code redundancy -changed to use the new color chooser 2008-08-10 Rene Milk * src/Helper/colorbutton.cpp, src/Helper/colorbutton.h, src/chatoptionstab.cpp, src/maintorrenttab.cpp, src/maintorrenttab.h: colorbutton for chatoptions and maintorrenttab 2008-08-10 Rene Milk * springlobby.cbp, src/Helper/colorbutton.cpp, src/chatoptionstab.cpp, src/settings.cpp, src/settings.h, src/uiutils.cpp, src/uiutils.h: new color chooser that saves color palette 2008-08-10 Rene Milk * src/Helper/colorbutton.cpp, src/Helper/colorbutton.h, src/battleroomtab.cpp, src/battleroomtab.h: -swapped colorbutton in battleroom -new ctor for colorbutton: ability to directly set color without second call to setcolor 2008-08-10 Rene Milk * src/Helper/colorbutton.cpp, src/Helper/colorbutton.h, src/chatoptionstab.cpp, src/chatoptionstab.h, src/uiutils.h: introducing new ColorButton class as replacement for wxButton with color bg hack 2008-08-10 Rene Milk * src/chatpanel.cpp: adds all palyers already in a battle to textcompletion db 2008-08-10 Rene Milk * src/Helper/wxtextctrlhist.cpp, src/Helper/wxtextctrlhist.h, src/chatpanel.cpp, src/chatpanel.h: moved textcompletion to the new textctrl fixed tab handling, so textcompletion and history work both now \o/ 2008-08-10 Rene Milk * CMakeLists.txt, Makefile.am, THANKS, src/Helper/wxtextctrlhist.cpp, src/Helper/wxtextctrlhist.h, src/chatpanel.cpp, src/chatpanel.h: added new files + thanks currently it's either history OR text completion 2008-08-10 Rene Milk * src/serverevents.cpp, src/useractions.cpp: ups, accidentally cached ALL actions for ALL groups... fixes actions not being properly applied 2008-08-10 Rene Milk * src/chatpanel.cpp, src/chatpanel.h: adding users per context menu now works properly 2008-08-10 Rene Milk * src/chatpanel.cpp, src/chatpanel.h: yay, get the event 2008-08-10 Rene Milk * src/managegroupspanel.cpp, src/useractions.cpp, src/useractions.h: setting highlight colors works 2008-08-09 Rene Milk * src/serverevents.cpp: implement ignore 2008-08-09 Rene Milk * src/battle.cpp, src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h: implemented autokick 2008-08-09 Rene Milk * src/battle.cpp, src/serverevents.cpp, src/user.cpp, src/user.h: own box for user notifs 2008-08-09 Rene Milk * src/settings++/custom_dialogs.h: Signed-off-by: Rene Milk 2008-08-09 Rene Milk * src/serverevents.cpp, src/useractions.h: added logout event and actions: _T("notify hosted battle"),_T("notify status change") 2008-08-09 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/nicklistctrl.cpp, src/nicklistctrl.h: those fucking events ain't getting called no more 2008-08-09 Rene Milk * : commit f2191acc0653c54ef7f9eebdce35c10ae03d9d31 Author: Rene Milk Date: Sat Aug 9 05:40:43 2008 +0200 2008-08-09 Rene Milk * src/battlelisttab.cpp, src/chatpanel.cpp, src/managegroupspanel.cpp, src/settings.h, src/ui.h, src/useractions.cpp, src/useractions.h: renamed bogus hh (in source this time) another map in useractions storing user --> group 2008-08-09 Rene Milk * springlobby.cbp, src/chatpanel.cpp, src/serverevents.cpp, src/ui.cpp, src/ui.h, src/useractions.h, src/useractions.hh: removed traces of useractions from Ui renamed bogus hh 2008-08-09 Rene Milk * src/battlelisttab.cpp, src/settings.cpp, src/useractions.cpp, src/useractions.hh: yay, stuff works 2008-08-09 Rene Milk * src/managegroupspanel.cpp, src/managegroupspanel.h, src/settings.cpp, src/useractions.cpp, src/useractions.hh: setting actions works 2008-08-08 Rene Milk * src/managegroupspanel.cpp, src/managegroupspanel.h: proto handlers 2008-08-08 Rene Milk * src/mainoptionstab.cpp, src/mainoptionstab.h, src/managegroupspanel.cpp, src/managegroupspanel.h, src/ui.cpp, src/ui.h, src/useractions.cpp, src/useractions.hh: sigh, another global for useractions seemed neccessary also protopype gui elements for groups 2008-08-08 Rene Milk * CMakeLists.txt, Makefile.am, src/managegroupspanel.cpp, src/managegroupspanel.h: new files, yay 2008-08-08 Rene Milk * CMakeLists.txt, Makefile.am: added new files to makefile,cmakelist 2008-08-08 Rene Milk * springlobby.cbp: Signed-off-by: Rene Milk 2008-08-08 Rene Milk * src/chatpanel.cpp, src/useractions.cpp, src/useractions.hh: adding users to group with popup works 2008-08-08 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/ui.cpp, src/ui.h: need a way to get group name from event in popup menu, atm it segfaults 2008-08-08 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/ui.cpp, src/ui.h: added menu items for groups, reading groups from file works 2008-08-08 Rene Milk * src/battlelisttab.cpp, src/chatpanel.cpp, src/serverevents.cpp, src/settings.cpp, src/settings.h, src/ui.cpp, src/ui.h: changed all the handling to support an arbitray num of groups (ie not just friends) and a limited num of actions. not tested at all :P 2008-08-07 Rene Milk * src/settings.cpp: saving of friends fixed 2008-08-07 Rene Milk * src/battlelisttab.cpp: really ugly battöelist notif for friends 2008-08-07 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/serverevents.cpp, src/ui.cpp, src/ui.h: basic friends support, can add user to a list per userlist context menu, will be notified per servermessagebox if he logs on 2008-08-07 Rene Milk * src/settings.cpp: firewall test off by default 2008-08-07 Rene Milk * src/settings.cpp, src/settings.h: added settigns stuff 2008-08-07 Rene Milk * src/settings.cpp: Signed-off-by: Rene Milk 2008-08-06 Dmytry Lavrov * : commit d30ce7c5ef73c00da0c12805f0aac94ffbdf18a7 Author: Rene Milk Date: Wed Aug 6 17:31:25 2008 +0200 2008-08-05 Rene Milk * src/springlobbyapp.cpp: fixed doubled/wrong path seps in windows buld 2008-08-05 Rene Milk * src/springlobbyapp.cpp: wrong sep in download destination fixed 2008-08-05 Rene Milk * src/springlobbyapp.cpp: reset to right url for ota-content 2008-08-05 Rene Milk * src/httpdownloader.cpp, src/httpdownloader.h: i "fixed" a segfault by not deleting the pointer to the downloader thread, no idea why that's happening even with a valid pointer. 2008-08-05 Rene Milk * springlobby.cbp, src/httpdownloader.cpp, src/httpdownloader.h, src/springlobbyapp.cpp: download and unzip works again 2008-08-01 Andrea Piras * : commit ec18b896d407d84be9fa5393ed3a87b96aca895f Merge: 175e315 4f6a446 Author: Andrea Piras Date: Thu Jul 31 20:06:42 2008 +0200 2008-07-31 Andrea Piras * src/utils.h: forgot to commit an #endif 2008-07-31 Andrea Piras * : commit 04fdcc557e1dd27e43c64fd1f36baea07ab9f634 Merge: 5f351e8 6b1c49a Author: Andrea Piras Date: Thu Jul 31 18:34:06 2008 +0200 2008-07-31 Rene Milk * src/spring.cpp: checks if boxes have been deleted in script generation, thereby fixes 561 2008-07-31 Rene Milk * : commit cf62b90aad6091a0bb90130c89ce273b02e5cc57 Author: Rene Milk Date: Thu Jul 31 14:07:39 2008 +0200 2008-07-31 Rene Milk * : now channel is left on chatpanel tab closed commit fe42bd0488b90697ca4fcdb926c557edc660994f Author: Rene Milk Date: Thu Jul 31 12:52:38 2008 +0200 2008-07-31 Rene Milk * : commit adcb63c1a3b09a8474607e5742724bb40d972acc Merge: f3a4eff b190bc1 Author: Rene Milk Date: Thu Jul 31 02:34:37 2008 +0200 2008-07-31 Rene Milk * : commit b190bc15b20b99effa4a670b2b5b51ae0e490992 Merge: a1ed6dd 175e315 Author: Rene Milk Date: Thu Jul 31 02:31:41 2008 +0200 2008-07-31 Rene Milk * src/battlelisttab.cpp: makes pw dialog have focus when entering from battlelist 2008-07-31 Rene Milk * src/battleroommmoptionstab.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: more const 2008-07-31 Rene Milk * src/battleroomtab.cpp: fixes the goddamn modoptions bug 2008-07-31 Rene Milk * src/iunitsync.h, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: constifying the mm-wrapper 2008-07-31 Andrea Piras * po/LINGUAS, po/ar.po, po/da.po, po/de.po, po/es.po, po/fi.po, po/fr.po, po/it.po, po/pt.po, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po, po/zh_CN.po: updated translations 2008-07-30 Rene Milk * src/chatpanel.cpp, src/ui.cpp, src/ui.h: closing works, rejoin broken Signed-off-by: Rene Milk 2008-07-30 Rene Milk * src/chatpanel.cpp: Signed-off-by: Rene Milk 2008-07-27 Andrea Piras * CMakeLists.txt: more includes fix in the cmake file 2008-07-26 Andrea Piras * CMakeLists.txt: SDL libs are now finally found by cmake 2008-07-26 Andrea Piras * CMakeLists.txt: created packaging build targets to cmake 2008-07-26 Andrea Piras * CMakeLists.txt: more clear cmake file 2008-07-26 Andrea Piras * CMakeLists.txt: fixed libtorrent error message in cmake 2008-07-26 Andrea Piras * CMakeLists.txt: bleh forgot to commit a fix 2008-07-26 Andrea Piras * CMakeLists.txt: even more cleaning in the cmake stuff 2008-07-26 Andrea Piras * CMakeLists.txt: more cleaning in the cmake file 2008-07-26 Andrea Piras * CMakeLists.txt, src/boost/CMakeLists.txt, src/settings++/CMakeLists.txt: more clearence in the cmake files, removed some useless files 2008-07-26 Andrea Piras * CMakeLists.txt, src/utils.h: now cmake really compiles, more progress on translation support 2008-07-26 Andrea Piras * CMakeLists.txt: cmake builds work again, added package build target, removed verbose console log by default, and started working on adding gettext support 2008-07-26 Andrea Piras * cmake/KWWidgetsGettextExtract.cmake, cmake/KWWidgetsInternationalizationMacros.cmake: imported gettext tools from kwwidgets project 2008-07-25 Rene Milk * : commit 032b01940e91ae14b2489c719fbaa3fea86809ba Merge: 4197f35 35dbd46 Author: Rene Milk Date: Wed Jul 23 14:33:26 2008 +0200 2008-07-20 Collin J. Sutton * src/torrentwrapper.cpp: Correct libt rate limiting for libt in Debian repos * libtorrent-rasterbar0 currently in the Debian repositories seems to do stricter checks on the up/down rate limits. Allowed values are x:x==-1|x>0. Since we store the user's preference in kilobytes/second, we needed to be a bit more careful about the value we pass. 2008-07-20 Collin J. Sutton * configure.ac.m4: Cleaned up output of libtorrent checks in configure 2008-07-21 Rene Milk * : commit 4197f353621fc17974a14e6806e7d04004b883b8 Author: Rene Milk Date: Sat Jul 19 18:52:29 2008 +0200 2008-07-19 Rene Milk * : Merge commit '0.0.1.10292' into local_koshi Conflicts: src/settings.cpp 2008-07-19 Rene Milk * : Merge commit 'insaneinside/master' 2008-07-15 Collin J. Sutton * configure.ac.m4: Fixed: rb-libtorrent, not libtorrent-rb 2008-07-15 Collin J. Sutton * configure.ac.m4: Add support for some alternate names for libtorrent 2008-07-14 Rene Milk * INSTALL, src/replayfilter.h, src/replaytab.h: just to make it compile 2008-07-14 Rene Milk * src/battlelisttab.cpp: duh, merge confilct in there 2008-07-14 Rene Milk * src/settings++/Main.cpp: params for springsettings init logger 2008-07-14 Rene Milk * : commit f3f400093f989f4ed0886f63874a0ee0bbb65f4c Merge: cb80821 4eb0cf3 Author: Rene Milk Date: Mon Jul 14 13:11:21 2008 +0200 2008-07-14 Rene Milk * : commit 0f6d9c885efcf16abf7e385048ec8e52fcb0bfa2 Merge: 36350a7 5d8d3c1 Author: Collin J. Sutton Date: Sun Jul 13 16:02:09 2008 -0700 2008-07-14 Rene Milk * : Merge commit 'koshi/master' 2008-07-13 Rene Milk * : Merge commit 'braindamage/master' 2008-07-13 Dmytry Lavrov * springlobby.cbp, src/filelister/filelistctrl.cpp, src/filelister/filelistdialog.cpp, src/filelister/filelistdialog.h, src/filelister/filelistfilter.cpp, src/filelister/filelistfilter.h, src/torrentwrapper.cpp, src/torrentwrapper.h: Half done, doesnt build. 2008-07-12 Collin J. Sutton * : Merge commit 'buildbot/master' 2008-07-12 Rene Milk * src/customlistctrl.cpp, src/customlistctrl.h: Signed-off-by: Rene Milk 2008-07-12 Rene Milk * src/customlistctrl.cpp, src/customlistctrl.h: Signed-off-by: Rene Milk 2008-07-12 Rene Milk * src/addbotdialog.h, src/agreementdialog.h, src/autobalancedialog.h, src/battle.h, src/battlelist.h, src/battlemaptab.h, src/battleoptionstab.h, src/battleroomlistctrl.h, src/battleroomtab.h: some more docs 2008-07-12 Rene Milk * springlobby.cbp, src/base16.cpp, src/base16.h: removes base16.* 2008-07-12 Rene Milk * src/battlelistfilter.cpp, src/filelister/filelistctrl.cpp, src/flagimages.cpp, src/springunitsync.cpp, src/utils.h: - fix a some warnings 2008-07-12 Rene Milk * src/utils.cpp, src/utils.h: removed stupid code duplication 2008-07-12 Rene Milk * src/autojoinchanneldialog.h, src/battlelistctrl.h, src/battlelistfilter.h, src/battlelisttab.h, src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/filelister/filelistctrl.h, src/mainwindow.cpp, src/settings++/panel_pathoption.h, src/settings++/presets.h, src/settings++/se_utils.h, src/torrentlistctrl.h, src/uiutils.cpp, src/uiutils.h: even moar docs! 2008-07-12 Rene Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/mainjoinbattletab.cpp, src/mainoptionstab.cpp, src/mainoptionstab.h, src/mainsingleplayertab.cpp, src/settings++/custom_dialogs.h, src/settings++/helpmenufunctions.cpp, src/settings++/helpmenufunctions.h: moar docs 2008-07-12 Rene Milk * : commit c07158fc2fa1cd378532e333a4761f23335dda65 Author: Rene Milk Date: Sat Jul 12 11:47:12 2008 +0200 2008-07-12 Rene Milk * src/mainoptionstab.cpp: docs 2008-07-12 Rene Milk * doc/mainpage.dox: -TA +spring link 2008-07-12 Rene Milk * : commit 94bb68c2a892ca96bdbf8d8d7a9060709981fb32 Author: Rene Milk Date: Fri Jul 11 15:18:50 2008 +0200 2008-07-11 Dmytry Lavrov * src/filelister/filelistctrl.cpp, src/filelister/filelistdialog.cpp, src/filelister/filelistdialog.h, src/torrentwrapper.cpp, src/torrentwrapper.h: temp commit, doesnt build. 2008-07-11 Rene Milk * src/battlelistctrl.cpp, src/customlistctrl.cpp, src/customlistctrl.h: tooltips are only displayed for a defined duration in listctrls 2008-07-11 Rene Milk * : commit bd3225f2470df64af01c7f5b7e01bebbefe1cde4 Author: Rene Milk Date: Fri Jul 11 12:53:17 2008 +0200 2008-07-09 Collin J. Sutton * tools/util.sh: Fixed and documented util.sh * stderr is fd 2, not 1. * How's this for non-cryptic? :P 2008-07-10 Rene Milk * : Merge commit 'insaneinside/master' 2008-07-09 Collin J. Sutton * autogen.sh: Run autoreconf instead of true. ;) 2008-07-10 Andrea Piras * src/maintorrenttab.cpp: cancel button should work now 2008-07-09 Collin J. Sutton * autogen.sh: Fixed some mistakes in autogen.sh 2008-07-09 Collin J. Sutton * autogen.sh, tools/get-revision.sh, tools/util.sh: Added proper error handling to autogen.sh, tools/get-revision.sh See the shell include file tools/util.sh for some fantastically overkill error functions. ;) 2008-07-10 Andrea Piras * src/torrentwrapper.cpp: resuming torrents between sessions works again 2008-07-10 Andrea Piras * src/torrentwrapper.cpp: ops forgot to commit part of the fix 2008-07-10 Andrea Piras * src/torrentwrapper.cpp: fixed an old error when trying to remove unexistant torrent, i wonder why i never noticed before 2008-07-09 Andrea Piras * src/torrentwrapper.cpp: slightly better code when going ingame to perform actions on torrent wrapper 2008-07-09 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: splitted fixtorrentlist function, now it's much clearer to read and use 2008-07-09 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: removed all threading/locking crap from towrent wrapper since it was TOTALLY useless, now code is 3x clean, shorter and better 2008-07-08 Dmytry Lavrov * src/autopointers.h, src/torrentwrapper.cpp, src/torrentwrapper.h: Torrent rewrite in progress. 2008-07-08 Dmytry Lavrov * src/torrentwrapper.h: Torent rewrite: cleaning up the data. 2008-07-07 Rene Milk * : commit 3686f8610ee241ad99e4bb3add701e92d05c7ba9 Author: Tobi Vollebregt Date: Mon Jul 7 22:38:28 2008 +0200 2008-07-07 Dmytry Lavrov * : commit 9de546b43ff980904b3579aa60dae29d00d8d9a7 Author: Dmytry Lavrov Date: Mon Jul 7 17:27:35 2008 +0300 2008-07-06 Rene Milk * src/chatpanel.cpp: new channel prefix for windows/linux logs 2008-07-06 Rene Milk * : commit d75dfbd9f83a5d3cdcfda51fae84bf512c9de659 Merge: 4c844ee 28c9ba2 Author: Rene Milk Date: Sun Jul 6 15:03:19 2008 +0200 2008-07-06 Rene Milk * src/chatpanel.cpp: don't highlight/ req attention if user is talking from IRC 2008-07-06 Rene Milk * src/chatoptionstab.cpp, src/chatpanel.cpp, src/settings.cpp, src/settings.h: user can now specify if he wants full blinking/sound on highlighted lines or just the color change 2008-07-06 Rene Milk * src/chatoptionstab.cpp, src/chatoptionstab.h: added new chkbox to make highlight notifs more flexible 2008-07-06 Rene Milk * src/chatoptionstab.cpp, src/chatpanel.cpp, src/chatpanel.h, src/settings.cpp, src/settings.h: adds words highlight 2008-07-05 Collin J. Sutton * src/iunitsync.h: Add some brief docs to some of the IUnitSync methods 2008-07-05 Rene Milk * src/mainwindow.cpp: adds username as reporter on new trac ticket 2008-07-04 Collin J. Sutton * src/mapctrl.cpp: Include config.h in src/mapctrl.cpp This ensures that HAVE_WX28 is defined so we don't use the deprecated Inside function. 2008-07-04 Rene Milk * : Merge commit 'koshi/master' 2008-07-02 Rene Milk * : Merge commit 'insaneinside/master' 2008-07-02 Rene Milk * : Merge commit 'insaneinside/master' 2008-07-01 Andrea Piras * : commit fb55952dce0d2054805ebd9ef410da8cd01e3290 Author: Rene Milk Date: Mon Jun 30 22:31:05 2008 +0200 2008-06-29 Collin J. Sutton * src/maintorrenttab.cpp: Fixed a typo: "Tranfers" -> "Transfers" 2008-06-29 Andrea Piras * : commit 4c5dca6070c43cc913361d94e124c00ef394849e Author: Andrea Piras Date: Sun Jun 29 19:03:21 2008 +0200 2008-06-29 Rene Milk * src/springunitsynclib.cpp: ups, left some debug code in there... 2008-06-29 Rene Milk * src/battleroommmoptionstab.cpp, src/mainwindow.cpp, src/mmoptionmodel.cpp, src/springunitsynclib.cpp: index wasn't porperly set according to default when loading mod option type list 2008-06-29 Rene Milk * src/torrentoptionspanel.cpp, src/torrentoptionspanel.h: fixes torrent system autostart radio button not set correctly in options tab 2008-06-28 Rene Milk * : commit fcdb79d2d33bfc73e3dbd02cd963d4e4832a4779 Author: Collin J. Sutton Date: Fri Jun 27 18:07:36 2008 -0700 2008-06-27 Rene Milk * springlobby.cbp, src/mainwindow.cpp: fixes tooltip enabled state not set on app launch 2008-06-27 Rene Milk * : Merge commit 'insaneinside/master' 2008-06-27 Rene Milk * src/autojoinchanneldialog.cpp, src/autojoinchanneldialog.h: DUH forgot to add new files 2008-06-27 Rene Milk * src/mainwindow.cpp: removed superflous seperator in tools menu 2008-06-27 Rene Milk * Makefile.am, src/mainwindow.cpp, src/mainwindow.h: adds edit dialog for autojoin channels in tools menu 2008-06-27 Collin J. Sutton * autogen.sh, configure.ac.m4: Move version selection (auto vs. specified) to autogen.sh Rationale: the less cryptic, the better. Now configure.ac.m4 uses only the VERSION environment variable; however, autogen.sh still sets this appropriately if not set (or if implicitly supplied via a command-line argument). 2008-06-27 Rene Milk * src/mainwindow.cpp: added kaot and insaneinside to about 2008-06-26 Collin J. Sutton * src/battleoptionstab.cpp: Fixed a typo in src/battleoptionstab.cpp 2008-06-27 Rene Milk * : Merge commit 'insaneinside/master' 2008-06-26 Rene Milk * : commit 57c15999aee6db6b5526de590fcdb751ea6843fa Merge: 720b2d0 2f9e458 Author: Collin J. Sutton Date: Thu Jun 26 02:40:23 2008 -0700 2008-06-26 Collin J. Sutton * Makefile.am: Oops, need to keep libt_dir defined... 2008-06-26 Collin J. Sutton * : commit 1d1a166327e6076c2abc20b21b555694a1f01a4e Author: Collin J. Sutton Date: Thu Jun 26 01:44:13 2008 -0700 2008-06-26 Rene Milk * : Merge commit 'insaneinside/revision-string' into insane_master Conflicts: configure.ac.m4 2008-06-26 Rene Milk * tools/buildbot-create-build-dirs.sh: removed unnecessary parameters 2008-06-25 Collin J. Sutton * src/utils.h: utils.h: remove HAVE_WX_* #defines (#include config.h instead!) 2008-06-25 Collin J. Sutton * : commit 2bbdc2f39f09e58a587896bd52631f19eff577fc Author: Collin J. Sutton Date: Wed Jun 25 19:12:18 2008 -0700 2008-06-26 Rene Milk * src/mainwindow.cpp, src/mainwindow.h: adds win-only menu entry to globally disable tooltips 2008-06-25 Tobi Vollebregt * src/torrentwrapper.cpp: fixed ';' after if statement 2008-06-21 Tobi Vollebregt * SpringLobby.vcproj: filters in project file now match subfolders of src 2008-06-24 Collin J. Sutton * src/springoptionstab.cpp: Reset to buildbot master, merge tip commit of proper-english 2008-06-25 Rene Milk * : Merge commit 'koshi/master' 2008-06-25 Rene Milk * src/torrentwrapper.cpp, src/torrentwrapper.h: fixes torrent resume from prev saved list 2008-06-24 Rene Milk * src/filelister/filelistctrl.cpp, src/filelister/filelistdialog.cpp: fixes 552; additionally downloads are now requested by numeric hash instead of archive name 2008-06-24 Rene Milk * src/filelister/filelistctrl.cpp: debug steps 2008-06-24 Rene Milk * : Merge commit 'koshi/master' 2008-06-23 Collin J. Sutton * Makefile.am, autogen.sh, configure.ac, configure.ac.m4, src/nonautotools.cpp, src/revision.cpp.in, src/revision.h, src/settings++/helpmenufunctions.cpp, src/utils.cpp, src/utils.h: Do version string the right way (i hope), remove related excess cruft * configure.ac no longer exists. It's generated -- with the proper version string -- from configure.ac/m4. 2008-06-24 Rene Milk * src/filelister/filelistctrl.cpp: fixed sorting, but broke downloading by hash :/ 2008-06-24 Rene Milk * src/filelister/filelistctrl.cpp, src/filelister/filelistctrl.h, src/filelister/filelistdialog.cpp, src/filelister/filelistdialog.h: should fix 522 2008-06-24 Rene Milk * src/filelister/filelistctrl.cpp, src/filelister/filelistctrl.h, src/filelister/filelistdialog.cpp: Signed-off-by: Rene Milk 2008-06-24 Rene Milk * src/torrentlistctrl.cpp, src/torrentlistctrl.h: fixes ticket 521 event handler were not called due to enum mix up added compare functions so filesize column is now sortable too 2008-06-24 Rene Milk * src/ui.cpp: moved last lingering instances of m_main_win calls to mw() 2008-06-23 Rene Milk * : Merge commit 'koshi/master' 2008-06-23 Rene Milk * : Merge commit 'koshi/master' 2008-06-23 Collin J. Sutton * configure.ac, tools/get-revision.sh: Make version string generation even more flexible * tools/get-revision.sh can take an explicit argument telling where the project root is. If ommitted, it'll figure it out on its own. (Previous behavior was to assume current directory as the project root.) * Added argument --with-version=VERSION to configure.ac so we can keep buildbot's tag-after-compile behavior. 2008-06-23 Rene Milk * : Merge commit 'koshi/master' 2008-06-23 Rene Milk * : Merge commit 'koshi/master' 2008-06-23 Rene Milk * : Merge commit 'insaneinside/master' Conflicts: configure.ac 2008-06-23 Collin J. Sutton * : commit 445cf0b2c2b11307b2d927fa0cecacad4b70be9b Author: Collin J. Sutton Date: Mon Jun 23 00:54:57 2008 -0700 2008-06-23 Rene Milk * configure.ac: fixes new rev string for subdir builds 2008-06-23 Collin J. Sutton * src/settings.h: Begin grouping, documenting members of Settings class 2008-06-23 Rene Milk * : Merge commit 'koshi/master' 2008-06-23 Collin J. Sutton * src/battleroomtab.cpp: Improved tooltips, other UI niceties in battle room tab * Tweaked tooltip text, including one typo (fixes ticket #500). * Set tooltips on buttons disabled when not hosting. The tooltips now read, "Only the host can..." * Disable side, ally, and team selection widgets if we're a spectator. 2008-06-23 Rene Milk * : Merge commit 'insaneinside/master' 2008-06-23 Rene Milk * : Merge commit 'insaneinside/master' 2008-06-22 Rene Milk * : commit 3215d6ed6fe7f827ec5c543d3270acdcd1d90495 Author: Collin J. Sutton Date: Fri Jun 20 21:45:30 2008 -0700 2008-06-20 Rene Milk * src/battleoptionstab.cpp: fixed typo, thanks to satirik for spotting it 2008-06-20 Rene Milk * : Merge commit 'insaneinside/master' 2008-06-19 Tobi Vollebregt * src/settings.cpp, src/torrentwrapper.cpp: fix uninitialized loop variables 2008-06-18 Tobi Vollebregt * SpringLobby.vcproj: updated vc9 project file 2008-06-18 Collin J. Sutton * src/springoptionstab.cpp, src/ui.cpp: Fixed: Ui::OpenWebBrowser, SpringOptionsTab::DoRestore * Now I know what _T(...) is for. Added that to the check for old "use default" WebBrowserPath, and added a check for an empty string. * Added a call to HandleWebloc in SpringOptionsTab::DoRestore to keep everything consistent (edit field needs to be disabled). 2008-06-18 Collin J. Sutton * : commit 705831aea87f71a338daadbb2a5095e8233ce8e0 Author: Collin J. Sutton Date: Wed Jun 18 18:24:12 2008 -0700 2008-06-19 Rene Milk * src/settings++/Defs.hpp: fixes reset of options in springsettings 2008-06-17 Rene Milk * src/filelister/filelistctrl.cpp: fixes segfault on right click in file search dia 2008-06-16 Rene Milk * configure.ac: Signed-off-by: Rene Milk 2008-06-15 Rene Milk * configure.ac: Signed-off-by: Rene Milk 2008-06-16 Dmytry Lavrov * src/autopointers.h, src/tdfcontainer.h: Added autopointers.h 2008-06-15 Rene Milk * : Merge commit 'bd/master' 2008-06-15 Andrea Piras * configure.ac: perhaps build errors on sdl and libtorrent will be shown entirely 2008-06-15 Andrea Piras * INSTALL, src/filelister/filelistctrl.cpp, src/filelister/filelistctrl.h, src/filelister/filelistdialog.cpp, src/filelister/filelistdialog.h, src/filelister/filelistfilter.cpp, src/filelister/filelistfilter.h: now SL compiles again even if you disable libtorrent support 2008-06-15 Andrea Piras * src/torrentwrapper.cpp: beutified slightly a part of the code 2008-06-15 Andrea Piras * src/torrentwrapper.cpp: fixed silly copypasta error due to working late night :p 2008-06-15 Rene Milk * src/torrentwrapper.cpp: compile err fix 2008-06-15 Rene Milk * : Merge commit 'bd/master' Conflicts: src/torrentwrapper.cpp 2008-06-15 Andrea Piras * src/torrentwrapper.cpp: fixed path probs in windows torrents 2008-06-15 Andrea Piras * src/tasserver.cpp: fixed bit fields _AGAIN_ since tasfail wants them in signed int format 2008-06-15 Rene Milk * : Merge commit 'bd/master' 2008-06-15 Rene Milk * src/chatpanel.cpp, src/springlobbyapp.cpp, src/torrentwrapper.cpp: should build now 2008-06-15 Rene Milk * configure.ac, src/agreementdialog.cpp: richtext disabled in 2.6 aui enabled in 2.8 only 2008-06-15 Andrea Piras * : commit b999156e3f72880fe73db209ef9efe3550e0ac56 Merge: c8e438f 1308dc5 Author: Rene Milk Date: Sun Jun 15 00:54:47 2008 +0200 2008-06-15 Andrea Piras * src/springlobbyapp.cpp: fixed ota content not detected properly 2008-06-15 Rene Milk * src/connectwindow.cpp, src/filelister/filelistdialog.cpp: fixes missing close boxes 2008-06-15 Rene Milk * springlobby.cbp: removed missing file from project 2008-06-15 Rene Milk * : Merge commit 'bd/master' 2008-06-14 Andrea Piras * : commit 21864f93b29edf867d0f2747eea565f46d10646d Author: Andrea Piras Date: Sat Jun 14 23:49:51 2008 +0200 2008-06-14 Andrea Piras * : commit ff39f773b56af92530d19a0be8e4a0cd35d1732a Merge: f93888d f9a161e Author: Rene Milk Date: Sat Jun 14 23:42:55 2008 +0200 2008-06-14 Andrea Piras * src/torrentwrapper.cpp: fixed queued torrents reported as leeching by the gui 2008-06-14 Rene Milk * : Merge commit 'bd/torrent_download' into torrent_usync_reload 2008-06-14 Rene Milk * src/filelister/filelistfilter.cpp: choice box better size 2008-06-14 Rene Milk * : Merge commit 'bd/torrent_download' into torrent_usync_reload 2008-06-14 Andrea Piras * src/customlistctrl.cpp, src/filelister/filelistdialog.cpp: temp disabled select all none inv buttons in file list dialog until they work 2008-06-14 Andrea Piras * : commit 857bd741aa448a4bc59f758380510b336f8c8a16 Author: Rene Milk Date: Sat Jun 14 22:39:09 2008 +0200 2008-06-14 Andrea Piras * : commit 3c5ae813e57c6359f9e0de642a75a0b80102e42d Author: Andrea Piras Date: Sat Jun 14 22:36:27 2008 +0200 2008-06-14 Andrea Piras * CMakeLists.txt: updated cmake file 2008-06-14 Rene Milk * src/filelister/filelistctrl.cpp: still nothin 2008-06-14 Rene Milk * src/filelister/filelistctrl.cpp: it's not sorting 2008-06-14 Rene Milk * : Merge commit 'bd/torrent_download' into torrent_usync_reload 2008-06-14 Andrea Piras * src/torrentwrapper.cpp: re added hardcoded single server since it seems i did some crap :p 2008-06-14 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: removed debugging feature to always connect to only the first server (now switches to nest when the first is down) 2008-06-14 Andrea Piras * : commit 2b211336bd1a6a86c7abef0c713057ebf0f5a0ce Author: Andrea Piras Date: Sat Jun 14 19:45:44 2008 +0200 2008-06-14 Andrea Piras * src/torrentwrapper.cpp: fixed crash 2008-06-14 Rene Milk * src/customlistctrl.cpp, src/filelister/filelistctrl.cpp, src/filelister/filelistctrl.h, src/filelister/filelistdialog.cpp: slect buttons working 2008-06-14 Andrea Piras * src/maintorrenttab.cpp, src/torrentlistctrl.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h: added support for leech queue, but borked normal torrent join (all look queued) 2008-06-14 Rene Milk * src/customlistctrl.cpp, src/customlistctrl.h, src/filelister/filelistctrl.cpp, src/filelister/filelistdialog.cpp, src/filelister/filelistdialog.h: select buttons in place, logic doesnt work 2008-06-14 Andrea Piras * src/filelister/filelistdialog.cpp: fixed foo form title 2008-06-14 Andrea Piras * src/maintorrenttab.cpp, src/maintorrenttab.h, src/torrentoptionspanel.h: adde a bit ugly status indicator in download manager tab 2008-06-14 Andrea Piras * src/maintorrenttab.cpp: dynamically disable/enable buttons in download manager tab according to the status 2008-06-14 Andrea Piras * src/maintorrenttab.cpp: renamed search dialog popup button in download manager 2008-06-14 Rene Milk * src/maintorrenttab.cpp, src/maintorrenttab.h, src/mainwindow.cpp: moved download dialog to correct place 2008-06-14 Rene Milk * : Merge commit 'bd/torrent_download' into torrent_usync_reload 2008-06-14 Rene Milk * src/filelister/filelistctrl.cpp, src/filelister/filelistctrl.h, src/filelister/filelistdialog.cpp: working with request by filename 2008-06-14 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: more detailed return codes for requestfile for torrent wrapper 2008-06-14 Andrea Piras * src/filelister/filelistctrl.cpp: more translation fixes 2008-06-14 Andrea Piras * src/filelister/filelistdialog.cpp: fixed strings not translated in gui 2008-06-14 Rene Milk * src/filelister/filelistctrl.cpp, src/filelister/filelistctrl.h, src/filelister/filelistdialog.cpp, src/filelister/filelistdialog.h: segfault in requestbyhash 2008-06-14 Rene Milk * springlobby.cbp, src/filelister/filelistfilter.cpp: filetype filter works too 2008-06-14 Rene Milk * : commit aae09554b692f502f997764a501a1ca2808fa9f2 Author: Rene Milk Date: Sat Jun 14 01:18:43 2008 +0200 2008-06-14 Rene Milk * src/filelister/filelistfilter.cpp: move along 2008-06-14 Rene Milk * src/filelister/filelistdialog.cpp, src/filelister/filelistdialog.h, src/filelister/filelistfilter.cpp, src/filelister/filelistfilter.h: filenmae filter working 2008-06-14 Rene Milk * src/filelister/filelistdialog.cpp, src/filelister/filelistdialog.h, src/filelister/filelistfilter.h: list + filter displayed nicely 2008-06-13 Rene Milk * : commit 46225e313758d7daf8ad987d7c74a203e3be42c0 Merge: 4308919 541c4dd Author: Rene Milk Date: Fri Jun 13 23:28:43 2008 +0200 2008-06-13 Andrea Piras * src/tasserver.cpp: make sure bitfields are sent unsigned 2008-06-13 Rene Milk * src/battlelisttab.cpp: changed ifno string on joining battles with no map mod to refelct torrent system usage 2008-06-13 Rene Milk * src/filelister/filelistctrl.cpp, src/filelister/filelistdialog.cpp, src/mainwindow.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h: help->about displays a dialog with lotsa files \o/ 2008-06-13 Rene Milk * src/filelister/filelistdialog.cpp: might insert stuff into list 2008-06-13 Andrea Piras * src/battlelistfilter.cpp: fixed wrong login in battle filter 2008-06-13 Andrea Piras * src/battlelistfilter.cpp: moar fixes for the filter crash in win 2008-06-13 Rene Milk * src/filelister/filelistdialog.cpp, src/filelister/filelistdialog.h: move along 2008-06-13 Rene Milk * : Merge commit 'bd/master' into torrent_usync_reload Conflicts: Makefile.am 2008-06-13 Andrea Piras * : commit 5892b2c84429814aab588b9996ac61bd24bfb049 Author: Andrea Piras Date: Fri Jun 13 00:24:42 2008 +0200 2008-06-12 Andrea Piras * src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp: proper implementation of REDIRECT now :p 2008-06-12 Andrea Piras * src/tasserver.cpp: implemented REDIRECT 2008-06-12 Andrea Piras * src/channel.cpp, src/channel.h, src/chatpanel.cpp, src/server.h, src/serverevents.cpp, src/tasserver.cpp: now SL silently stores channel PW in ram and uses it when using autojoin without prompting the user again 2008-06-12 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: added function to retrieve list of files in torrent system 2008-06-12 Tobi Vollebregt * .gitignore, SpringLobby.sln, SpringLobby.vcproj, libtorrent.vcproj: output goes to bin, intermediate files to obj 2008-06-12 Rene Milk * src/battleroomtab.h, src/settings.cpp, src/settings.h: adds functions for setting/getting layouts in settingshandler 2008-06-12 Tobi Vollebregt * SpringLobby.vcproj: enable link time code generation and whole program optimization (solves linker warning) 2008-06-12 Rene Milk * src/battleoptionstab.cpp, src/battleroommmoptionstab.cpp: now i got em 2008-06-12 Rene Milk * src/battlemaptab.cpp, src/battlemaptab.h, src/battleroomtab.cpp, src/battleroomtab.h: all panels should be scrollwin now 2008-06-12 Andrea Piras * : commit fa865b4fd3ac35f60d911964c8e14c1e1d324276 Author: Rene Milk Date: Thu Jun 12 17:43:16 2008 +0200 2008-06-12 Andrea Piras * src/chatpanel.cpp: possibly fixed empty page prob in windows chat panel on scroll event 2008-06-12 Andrea Piras * src/settings.cpp, src/settings.h, src/torrentwrapper.cpp: now torrent system saves leeched files list to resume on next connection 2008-06-12 Tobi Vollebregt * SpringLobby.sln, SpringLobby.vcproj, libtorrent.vcproj: oops, based "Release with libtorrent" on "Debug with libtorrent" instead of "Release" 2008-06-12 Tobi Vollebregt * .gitignore: ignore "Debug with libtorrent" and "Release with libtorrent" dirs. 2008-06-12 Tobi Vollebregt * SpringLobby.sln, SpringLobby.vcproj, libtorrent.vcproj: added "Release with libtorrent" configuration 2008-06-12 Tobi Vollebregt * SpringLobby.sln, SpringLobby.vcproj, libtorrent.vcproj: made "Debug with libtorrent" configuration solution wide (so libraries end up in right directories etc.) 2008-06-12 Andrea Piras * : commit a9dc3db306b7121c4c2f55911f25d51d1788ebac Author: Tobi Vollebregt Date: Thu Jun 12 16:19:36 2008 +0200 2008-06-12 Andrea Piras * : commit 1079493a06adb3ca649afb5562fd5c7b86262841 Author: Andrea Piras Date: Thu Jun 12 16:12:45 2008 +0200 2008-06-12 Rene Milk * src/torrentwrapper.cpp: k 2008-06-12 Andrea Piras * src/globalevents.cpp, src/globalevents.h, src/torrentwrapper.cpp: non compiling attempt to make unitsync ui reload signals from torrent branch 2008-06-12 Tobi Vollebregt * libtorrent.vcproj: disabled warning C4503, 'decorated name length exceeded' (in asio) 2008-06-12 Tobi Vollebregt * libtorrent.vcproj: enable SEH exception handling (because _set_se_translator is called) 2008-06-12 Tobi Vollebregt * src/libtorrent/include/libtorrent/bandwidth_manager.hpp: compiles in debug mode with boost 1.35 now 2008-06-12 Tobi Vollebregt * SpringLobby.sln, SpringLobby.vcproj, libtorrent.vcproj, src/libtorrent/src/pch.cpp: added libtorrent project file, compiles in VC9 in Release mode 2008-06-12 Andrea Piras * src/springlobbyapp.cpp, src/springlobbyapp.h, src/ui.cpp, src/ui.h: changed ui class to static single instance 2008-06-12 Andrea Piras * src/battle.cpp, src/battleroomtab.cpp, src/settings.cpp, src/settings.h: added code that should save last selected color but some wtf code changes that before loading default 2008-06-12 Tobi Vollebregt * src/libtorrent/src/pe_crypto.cpp: try workaround git bug? 2008-06-11 Rene Milk * Makefile.am: fixes asserts hit in torrentlib 2008-06-11 Andrea Piras * src/socket.cpp, src/socket.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp: fixed a race condition on login for gui, added local ip msg to server when connecting, and silly pw for lan server 2008-06-11 Rene Milk * : Merge commit 'tobi/vc9' Conflicts: src/serverevents.cpp 2008-06-11 Rene Milk * Makefile.am: should pass distcheck now 2008-06-11 Tobi Vollebregt * SpringLobby.vcproj: fixed VC9 release mode warnings 2008-06-11 Rene Milk * Makefile.am: added libt headers to be packed in dist 2008-06-11 Rene Milk * Makefile.am: removed hardcoded string 2008-06-11 Tobi Vollebregt * src/battle.cpp, src/battleroommmoptionstab.cpp, src/mmoptionswrapper.h, src/serverevents.cpp, src/ui.h: fixed VC9 debug mode warnings This includes 2 warnings about ';' after if statement: ("if (...) ;") - battleroommmoptionstab.cpp - serverevents.cpp Only remaining warnings are in serverevents.cpp: warning C4101: 'except' : unreferenced local variable Maybe this serves as note that the catch blocks should still be implemented? 2008-06-11 Rene Milk * src/serverevents.cpp: fixes bug reported by tobi 2008-06-11 Tobi Vollebregt * : commit 716672946b92c8ab2e63de11002797b7bc8e8395 Author: Rene Milk Date: Wed Jun 11 20:56:00 2008 +0200 2008-06-11 Rene Milk * configure.ac: move along 2008-06-11 Rene Milk * Makefile.am, configure.ac, tools/buildbot-create-build-dirs.sh: more cleanup 2008-06-11 Rene Milk * configure.ac: some buildsystem cleanup 2008-06-11 Rene Milk * : Merge commit 'buildbot/master' into libt_mingw_fubar 2008-06-10 Rene Milk * Makefile.am, configure.ac: linux build works 2008-06-10 Rene Milk * INSTALL, Makefile.am, configure.ac, src/libtorrent/asio.hpp, src/libtorrent/asio/basic_datagram_socket.hpp, src/libtorrent/asio/basic_deadline_timer.hpp, src/libtorrent/asio/basic_io_object.hpp, src/libtorrent/asio/basic_socket.hpp, src/libtorrent/asio/basic_socket_acceptor.hpp, src/libtorrent/asio/basic_socket_iostream.hpp, src/libtorrent/asio/basic_socket_streambuf.hpp, src/libtorrent/asio/basic_stream_socket.hpp, src/libtorrent/asio/basic_streambuf.hpp, src/libtorrent/asio/buffer.hpp, src/libtorrent/asio/buffered_read_stream.hpp, src/libtorrent/asio/buffered_read_stream_fwd.hpp, src/libtorrent/asio/buffered_stream.hpp, src/libtorrent/asio/buffered_stream_fwd.hpp, src/libtorrent/asio/buffered_write_stream.hpp, src/libtorrent/asio/buffered_write_stream_fwd.hpp, src/libtorrent/asio/completion_condition.hpp, src/libtorrent/asio/datagram_socket_service.hpp, src/libtorrent/asio/deadline_timer.hpp, src/libtorrent/asio/deadline_timer_service.hpp, src/libtorrent/asio/detail/bind_handler.hpp, src/libtorrent/asio/detail/buffer_resize_guard.hpp, src/libtorrent/asio/detail/buffered_stream_storage.hpp, src/libtorrent/asio/detail/call_stack.hpp, src/libtorrent/asio/detail/const_buffers_iterator.hpp, src/libtorrent/asio/detail/consuming_buffers.hpp, src/libtorrent/asio/detail/deadline_timer_service.hpp, src/libtorrent/asio/detail/descriptor_ops.hpp, src/libtorrent/asio/detail/dev_poll_reactor.hpp, src/libtorrent/asio/detail/dev_poll_reactor_fwd.hpp, src/libtorrent/asio/detail/epoll_reactor.hpp, src/libtorrent/asio/detail/epoll_reactor_fwd.hpp, src/libtorrent/asio/detail/event.hpp, src/libtorrent/asio/detail/fd_set_adapter.hpp, src/libtorrent/asio/detail/handler_alloc_helpers.hpp, src/libtorrent/asio/detail/handler_invoke_helpers.hpp, src/libtorrent/asio/detail/handler_queue.hpp, src/libtorrent/asio/detail/hash_map.hpp, src/libtorrent/asio/detail/io_control.hpp, src/libtorrent/asio/detail/kqueue_reactor.hpp, src/libtorrent/asio/detail/kqueue_reactor_fwd.hpp, src/libtorrent/asio/detail/local_free_on_block_exit.hpp, src/libtorrent/asio/detail/mutex.hpp, src/libtorrent/asio/detail/noncopyable.hpp, src/libtorrent/asio/detail/null_event.hpp, src/libtorrent/asio/detail/null_mutex.hpp, src/libtorrent/asio/detail/null_signal_blocker.hpp, src/libtorrent/asio/detail/null_thread.hpp, src/libtorrent/asio/detail/null_tss_ptr.hpp, src/libtorrent/asio/detail/old_win_sdk_compat.hpp, src/libtorrent/asio/detail/pipe_select_interrupter.hpp, src/libtorrent/asio/detail/pop_options.hpp, src/libtorrent/asio/detail/posix_event.hpp, src/libtorrent/asio/detail/posix_fd_set_adapter.hpp, src/libtorrent/asio/detail/posix_mutex.hpp, src/libtorrent/asio/detail/posix_signal_blocker.hpp, src/libtorrent/asio/detail/posix_thread.hpp, src/libtorrent/asio/detail/posix_tss_ptr.hpp, src/libtorrent/asio/detail/push_options.hpp, src/libtorrent/asio/detail/reactive_descriptor_service.hpp, src/libtorrent/asio/detail/reactive_socket_service.hpp, src/libtorrent/asio/detail/reactor_op_queue.hpp, src/libtorrent/asio/detail/resolver_service.hpp, src/libtorrent/asio/detail/scoped_lock.hpp, src/libtorrent/asio/detail/select_interrupter.hpp, src/libtorrent/asio/detail/select_reactor.hpp, src/libtorrent/asio/detail/select_reactor_fwd.hpp, src/libtorrent/asio/detail/service_base.hpp, src/libtorrent/asio/detail/service_id.hpp, src/libtorrent/asio/detail/service_registry.hpp, src/libtorrent/asio/detail/service_registry_fwd.hpp, src/libtorrent/asio/detail/signal_blocker.hpp, src/libtorrent/asio/detail/signal_init.hpp, src/libtorrent/asio/detail/socket_holder.hpp, src/libtorrent/asio/detail/socket_ops.hpp, src/libtorrent/asio/detail/socket_option.hpp, src/libtorrent/asio/detail/socket_select_interrupter.hpp, src/libtorrent/asio/detail/socket_types.hpp, src/libtorrent/asio/detail/strand_service.hpp, src/libtorrent/asio/detail/task_io_service.hpp, src/libtorrent/asio/detail/task_io_service_fwd.hpp, src/libtorrent/asio/detail/thread.hpp, src/libtorrent/asio/detail/throw_error.hpp, src/libtorrent/asio/detail/timer_queue.hpp, src/libtorrent/asio/detail/timer_queue_base.hpp, src/libtorrent/asio/detail/tss_ptr.hpp, src/libtorrent/asio/detail/win_event.hpp, src/libtorrent/asio/detail/win_fd_set_adapter.hpp, src/libtorrent/asio/detail/win_iocp_handle_service.hpp, src/libtorrent/asio/detail/win_iocp_io_service.hpp, src/libtorrent/asio/detail/win_iocp_io_service_fwd.hpp, src/libtorrent/asio/detail/win_iocp_socket_service.hpp, src/libtorrent/asio/detail/win_mutex.hpp, src/libtorrent/asio/detail/win_signal_blocker.hpp, src/libtorrent/asio/detail/win_thread.hpp, src/libtorrent/asio/detail/win_tss_ptr.hpp, src/libtorrent/asio/detail/wince_thread.hpp, src/libtorrent/asio/detail/winsock_init.hpp, src/libtorrent/asio/detail/wrapped_handler.hpp, src/libtorrent/asio/error.hpp, src/libtorrent/asio/error_code.hpp, src/libtorrent/asio/handler_alloc_hook.hpp, src/libtorrent/asio/handler_invoke_hook.hpp, src/libtorrent/asio/impl/error_code.ipp, src/libtorrent/asio/impl/io_service.ipp, src/libtorrent/asio/impl/read.ipp, src/libtorrent/asio/impl/read_until.ipp, src/libtorrent/asio/impl/write.ipp, src/libtorrent/asio/io_service.hpp, src/libtorrent/asio/ip/address.hpp, src/libtorrent/asio/ip/address_v4.hpp, src/libtorrent/asio/ip/address_v6.hpp, src/libtorrent/asio/ip/basic_endpoint.hpp, src/libtorrent/asio/ip/basic_resolver.hpp, src/libtorrent/asio/ip/basic_resolver_entry.hpp, src/libtorrent/asio/ip/basic_resolver_iterator.hpp, src/libtorrent/asio/ip/basic_resolver_query.hpp, src/libtorrent/asio/ip/detail/socket_option.hpp, src/libtorrent/asio/ip/host_name.hpp, src/libtorrent/asio/ip/multicast.hpp, src/libtorrent/asio/ip/resolver_query_base.hpp, src/libtorrent/asio/ip/resolver_service.hpp, src/libtorrent/asio/ip/tcp.hpp, src/libtorrent/asio/ip/udp.hpp, src/libtorrent/asio/ip/unicast.hpp, src/libtorrent/asio/ip/v6_only.hpp, src/libtorrent/asio/is_read_buffered.hpp, src/libtorrent/asio/is_write_buffered.hpp, src/libtorrent/asio/local/basic_endpoint.hpp, src/libtorrent/asio/local/connect_pair.hpp, src/libtorrent/asio/local/datagram_protocol.hpp, src/libtorrent/asio/local/stream_protocol.hpp, src/libtorrent/asio/placeholders.hpp, src/libtorrent/asio/posix/basic_descriptor.hpp, src/libtorrent/asio/posix/basic_stream_descriptor.hpp, src/libtorrent/asio/posix/descriptor_base.hpp, src/libtorrent/asio/posix/stream_descriptor.hpp, src/libtorrent/asio/posix/stream_descriptor_service.hpp, src/libtorrent/asio/read.hpp, src/libtorrent/asio/read_until.hpp, src/libtorrent/asio/socket_acceptor_service.hpp, src/libtorrent/asio/socket_base.hpp, src/libtorrent/asio/ssl.hpp, src/libtorrent/asio/ssl/basic_context.hpp, src/libtorrent/asio/ssl/context.hpp, src/libtorrent/asio/ssl/context_base.hpp, src/libtorrent/asio/ssl/context_service.hpp, src/libtorrent/asio/ssl/detail/openssl_context_service.hpp, src/libtorrent/asio/ssl/detail/openssl_init.hpp, src/libtorrent/asio/ssl/detail/openssl_operation.hpp, src/libtorrent/asio/ssl/detail/openssl_stream_service.hpp, src/libtorrent/asio/ssl/detail/openssl_types.hpp, src/libtorrent/asio/ssl/stream.hpp, src/libtorrent/asio/ssl/stream_base.hpp, src/libtorrent/asio/ssl/stream_service.hpp, src/libtorrent/asio/strand.hpp, src/libtorrent/asio/stream_socket_service.hpp, src/libtorrent/asio/streambuf.hpp, src/libtorrent/asio/system_error.hpp, src/libtorrent/asio/thread.hpp, src/libtorrent/asio/time_traits.hpp, src/libtorrent/asio/version.hpp, src/libtorrent/asio/windows/basic_handle.hpp, src/libtorrent/asio/windows/basic_stream_handle.hpp, src/libtorrent/asio/windows/stream_handle.hpp, src/libtorrent/asio/windows/stream_handle_service.hpp, src/libtorrent/asio/write.hpp, src/libtorrent/include/libtorrent/alert.hpp, src/libtorrent/include/libtorrent/alert_types.hpp, src/libtorrent/include/libtorrent/asio.hpp, src/libtorrent/include/libtorrent/assert.hpp, src/libtorrent/include/libtorrent/aux_/session_impl.hpp, src/libtorrent/include/libtorrent/bandwidth_limit.hpp, src/libtorrent/include/libtorrent/bandwidth_manager.hpp, src/libtorrent/include/libtorrent/bandwidth_queue_entry.hpp, src/libtorrent/include/libtorrent/bencode.hpp, src/libtorrent/include/libtorrent/broadcast_socket.hpp, src/libtorrent/include/libtorrent/bt_peer_connection.hpp, src/libtorrent/include/libtorrent/buffer.hpp, src/libtorrent/include/libtorrent/chained_buffer.hpp, src/libtorrent/include/libtorrent/config.hpp, src/libtorrent/include/libtorrent/connection_queue.hpp, src/libtorrent/include/libtorrent/debug.hpp, src/libtorrent/include/libtorrent/disk_io_thread.hpp, src/libtorrent/include/libtorrent/entry.hpp, src/libtorrent/include/libtorrent/enum_net.hpp, src/libtorrent/include/libtorrent/escape_string.hpp, src/libtorrent/include/libtorrent/extensions.hpp, src/libtorrent/include/libtorrent/extensions/logger.hpp, src/libtorrent/include/libtorrent/extensions/metadata_transfer.hpp, src/libtorrent/include/libtorrent/extensions/ut_pex.hpp, src/libtorrent/include/libtorrent/file.hpp, src/libtorrent/include/libtorrent/file_pool.hpp, src/libtorrent/include/libtorrent/fingerprint.hpp, src/libtorrent/include/libtorrent/hasher.hpp, src/libtorrent/include/libtorrent/http_connection.hpp, src/libtorrent/include/libtorrent/http_stream.hpp, src/libtorrent/include/libtorrent/http_tracker_connection.hpp, src/libtorrent/include/libtorrent/identify_client.hpp, src/libtorrent/include/libtorrent/instantiate_connection.hpp, src/libtorrent/include/libtorrent/intrusive_ptr_base.hpp, src/libtorrent/include/libtorrent/invariant_check.hpp, src/libtorrent/include/libtorrent/io.hpp, src/libtorrent/include/libtorrent/ip_filter.hpp, src/libtorrent/include/libtorrent/kademlia/closest_nodes.hpp, src/libtorrent/include/libtorrent/kademlia/dht_tracker.hpp, src/libtorrent/include/libtorrent/kademlia/find_data.hpp, src/libtorrent/include/libtorrent/kademlia/logging.hpp, src/libtorrent/include/libtorrent/kademlia/msg.hpp, src/libtorrent/include/libtorrent/kademlia/node.hpp, src/libtorrent/include/libtorrent/kademlia/node_entry.hpp, src/libtorrent/include/libtorrent/kademlia/node_id.hpp, src/libtorrent/include/libtorrent/kademlia/observer.hpp, src/libtorrent/include/libtorrent/kademlia/packet_iterator.hpp, src/libtorrent/include/libtorrent/kademlia/refresh.hpp, src/libtorrent/include/libtorrent/kademlia/routing_table.hpp, src/libtorrent/include/libtorrent/kademlia/rpc_manager.hpp, src/libtorrent/include/libtorrent/kademlia/traversal_algorithm.hpp, src/libtorrent/include/libtorrent/lsd.hpp, src/libtorrent/include/libtorrent/natpmp.hpp, src/libtorrent/include/libtorrent/pch.hpp, src/libtorrent/include/libtorrent/pe_crypto.hpp, src/libtorrent/include/libtorrent/peer.hpp, src/libtorrent/include/libtorrent/peer_connection.hpp, src/libtorrent/include/libtorrent/peer_id.hpp, src/libtorrent/include/libtorrent/peer_info.hpp, src/libtorrent/include/libtorrent/peer_request.hpp, src/libtorrent/include/libtorrent/piece_block_progress.hpp, src/libtorrent/include/libtorrent/piece_picker.hpp, src/libtorrent/include/libtorrent/policy.hpp, src/libtorrent/include/libtorrent/proxy_base.hpp, src/libtorrent/include/libtorrent/random_sample.hpp, src/libtorrent/include/libtorrent/session.hpp, src/libtorrent/include/libtorrent/session_settings.hpp, src/libtorrent/include/libtorrent/session_status.hpp, src/libtorrent/include/libtorrent/size_type.hpp, src/libtorrent/include/libtorrent/socket.hpp, src/libtorrent/include/libtorrent/socket_type.hpp, src/libtorrent/include/libtorrent/socks4_stream.hpp, src/libtorrent/include/libtorrent/socks5_stream.hpp, src/libtorrent/include/libtorrent/stat.hpp, src/libtorrent/include/libtorrent/storage.hpp, src/libtorrent/include/libtorrent/time.hpp, src/libtorrent/include/libtorrent/torrent.hpp, src/libtorrent/include/libtorrent/torrent_handle.hpp, src/libtorrent/include/libtorrent/torrent_info.hpp, src/libtorrent/include/libtorrent/tracker_manager.hpp, src/libtorrent/include/libtorrent/udp_tracker_connection.hpp, src/libtorrent/include/libtorrent/upnp.hpp, src/libtorrent/include/libtorrent/utf8.hpp, src/libtorrent/include/libtorrent/variant_stream.hpp, src/libtorrent/include/libtorrent/version.hpp, src/libtorrent/include/libtorrent/web_peer_connection.hpp, src/libtorrent/include/libtorrent/xml_parse.hpp, src/libtorrent/src/alert.cpp, src/libtorrent/src/assert.cpp, src/libtorrent/src/broadcast_socket.cpp, src/libtorrent/src/bt_peer_connection.cpp, src/libtorrent/src/connection_queue.cpp, src/libtorrent/src/disk_io_thread.cpp, src/libtorrent/src/entry.cpp, src/libtorrent/src/enum_net.cpp, src/libtorrent/src/escape_string.cpp, src/libtorrent/src/file.cpp, src/libtorrent/src/file_old.cpp, src/libtorrent/src/file_pool.cpp, src/libtorrent/src/http_connection.cpp, src/libtorrent/src/http_stream.cpp, src/libtorrent/src/http_tracker_connection.cpp, src/libtorrent/src/identify_client.cpp, src/libtorrent/src/instantiate_connection.cpp, src/libtorrent/src/ip_filter.cpp, src/libtorrent/src/kademlia/closest_nodes.cpp, src/libtorrent/src/kademlia/dht_tracker.cpp, src/libtorrent/src/kademlia/find_data.cpp, src/libtorrent/src/kademlia/node.cpp, src/libtorrent/src/kademlia/node_id.cpp, src/libtorrent/src/kademlia/refresh.cpp, src/libtorrent/src/kademlia/routing_table.cpp, src/libtorrent/src/kademlia/rpc_manager.cpp, src/libtorrent/src/kademlia/traversal_algorithm.cpp, src/libtorrent/src/logger.cpp, src/libtorrent/src/lsd.cpp, src/libtorrent/src/metadata_transfer.cpp, src/libtorrent/src/natpmp.cpp, src/libtorrent/src/pe_crypto.cpp, src/libtorrent/src/peer_connection.cpp, src/libtorrent/src/piece_picker.cpp, src/libtorrent/src/policy.cpp, src/libtorrent/src/session.cpp, src/libtorrent/src/session_impl.cpp, src/libtorrent/src/sha1.cpp, src/libtorrent/src/socks4_stream.cpp, src/libtorrent/src/socks5_stream.cpp, src/libtorrent/src/stat.cpp, src/libtorrent/src/storage.cpp, src/libtorrent/src/torrent.cpp, src/libtorrent/src/torrent_handle.cpp, src/libtorrent/src/torrent_info.cpp, src/libtorrent/src/tracker_manager.cpp, src/libtorrent/src/udp_tracker_connection.cpp, src/libtorrent/src/upnp.cpp, src/libtorrent/src/ut_pex.cpp, src/libtorrent/src/web_peer_connection.cpp, src/libtorrent/zlib/adler32.c, src/libtorrent/zlib/compress.c, src/libtorrent/zlib/crc32.c, src/libtorrent/zlib/crc32.h, src/libtorrent/zlib/deflate.c, src/libtorrent/zlib/deflate.h, src/libtorrent/zlib/gzio.c, src/libtorrent/zlib/infback.c, src/libtorrent/zlib/inffast.c, src/libtorrent/zlib/inffast.h, src/libtorrent/zlib/inffixed.h, src/libtorrent/zlib/inflate.c, src/libtorrent/zlib/inflate.h, src/libtorrent/zlib/inftrees.c, src/libtorrent/zlib/inftrees.h, src/libtorrent/zlib/trees.c, src/libtorrent/zlib/trees.h, src/libtorrent/zlib/uncompr.c, src/libtorrent/zlib/zconf.h, src/libtorrent/zlib/zlib.h, src/libtorrent/zlib/zutil.c, src/libtorrent/zlib/zutil.h: rediciously hacky, but working 2008-06-09 Rene Milk * src/settings++/helpmenufunctions.cpp: incremented springsettings version 2008-06-07 Andrea Piras * gentoo/overlay/games-util/springlobby/springlobby-0.0.1.10245.ebuil d: updated gentoo ebuild, thanks auswashbar! 2008-06-07 Andrea Piras * : commit 2af22e1791f83d30754895bdcda277209b70cc4e Author: Andrea Piras Date: Sat Jun 7 13:39:39 2008 +0200 2008-06-07 Andrea Piras * src/chatpanel.cpp, src/globalevents.cpp, src/springlobbyapp.cpp: fixed build probs in wx2.6 2008-06-06 Rene Milk * configure.ac: Signed-off-by: Rene Milk 2008-06-05 Andrea Piras * : commit a4ac201555572477f17f807bbc457fc8de136a6c Author: Andrea Piras Date: Thu Jun 5 00:02:18 2008 +0200 2008-06-04 Andrea Piras * src/tasserver.cpp: changed to non-modal message box in case of NAT punch failure 2008-06-04 Andrea Piras * : commit 2fa2b26af951a90546210ed6d2da57b86ed3ab7f Author: Andrea Piras Date: Wed Jun 4 22:29:44 2008 +0200 2008-06-04 Andrea Piras * src/spring.cpp: fixed other instances where locale decimal separator was being used in script generation 2008-06-04 Andrea Piras * src/spring.cpp: fixed code still using local separator in script generation 2008-06-04 Andrea Piras * src/spring.cpp: fixed code still using local separator in script generation 2008-06-04 Andrea Piras * src/tasserver.cpp: changed to non-modal message box in case of NAT punch failure 2008-06-04 Andrea Piras * src/utils.cpp: now console logging can be explictly activated an no log gets instantiated by default if no console logging is available 2008-06-04 Tobi Vollebregt * src/mapctrl.cpp: variant of the wxImage::SetData() issue 2008-06-04 Tobi Vollebregt * src/tasserver.cpp: dont spam messagebox if punching through NAT failed (wxMessageBox only returns after user clicks OK, and Update can be re-entered in the mean time, causing new messagebox to pop up, etc.) 2008-06-04 Tobi Vollebregt * src/battlelistfilter.cpp: wxRE_ICASE isn't allowed in wxRegex::Matches() 2008-06-04 Tobi Vollebregt * src/springunitsynclib.cpp: another case of wxImage::SetData() 2008-06-04 Tobi Vollebregt * .gitignore: ignore Visual Studio generated files 2008-06-04 Tobi Vollebregt * src/chatpanel.cpp: ctrl+c and ctrl+a working in chatpanel 2008-06-04 Tobi Vollebregt * src/mainjoinbattletab.cpp: uninitialized m_mm_opts_tab 2008-06-03 Tobi Vollebregt * src/settings.cpp: create wxStandardPaths::Get().GetUserDataDir() if it doesn't exist yet (ie. the SpringLobby folder under AppData on Win Vista) 2008-06-03 Tobi Vollebregt * src/settings.cpp: fix failed assert by creating empty settings file if it doesn't exist yet TODO: error handling 2008-06-03 Tobi Vollebregt * src/settings.cpp: fixed a bunch of assertions in wxFont by using a sane default font 2008-06-03 Tobi Vollebregt * src/uiutils.cpp: fixed the _crtIsValidHeapPointer debug assert failure Issue was probably that the chunk of memory for SetData() was malloced in a different heap (SL) then in which it was freed (WX DLL). Also the size check is now useful (sizeof in this case just returned size of the pointer, not size of chunk the pointer points to.) 2008-06-03 Andrea Piras * springlobby.cbp: simplified a LOT windows linkings for wx in c::b project 2008-06-03 Tobi Vollebregt * src/utils.cpp: temporarily suppress all logging 2008-06-03 Tobi Vollebregt * src/tasserver.cpp: replyid was uninitialized (Very cool VC 9 actually detects it and offers you to break on it :)) 2008-06-03 Tobi Vollebregt * SpringLobby.vcproj: ignoring default libs isn't needed, fixed debug build by excluding resource file 2008-06-02 Tobi Vollebregt * src/unitsyncthread.cpp, src/unitsyncthread.h: refactored UnitSyncThread to remove multiple inheritance this to fix the following VC 9 warning: 1>...\src\unitsyncthread.cpp(19) : warning C4407: cast between different pointer to member representations, compiler may generate incorrect code still hits breakpoint in IMPLEMENT_APP though 2008-06-02 Tobi Vollebregt * SpringLobby.sln, SpringLobby.vcproj, src/mainchattab.cpp, src/mapctrl.cpp, src/settings++/Defs.hpp, src/utils.cpp: compiles and links in Visual Studio 9 2008-06-02 Andrea Piras * src/spring.cpp, src/tasserver.cpp: Revert "enabled option to disable udp" This reverts commit 73167d1b7f461a752eb2bd3dca92e6b5b66d8b2d. 2008-06-01 Andrea Piras * CMakeLists.txt: added aui dep to cmake buildsystem 2008-06-01 Rene Milk * : Merge commit 'bd/wxAui' into wxAui 2008-06-01 Andrea Piras * src/mainsingleplayertab.cpp, src/mainsingleplayertab.h: now SP tabs uses wxaui notebook 2008-06-01 Andrea Piras * src/chatpanel.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainwindow.cpp: skip listbook and notebook include if using wxaui 2008-06-01 Andrea Piras * src/mainoptionstab.cpp, src/mainoptionstab.h: now options tab uses wxaui 2008-06-01 Andrea Piras * src/mainjoinbattletab.cpp, src/mainjoinbattletab.h: join panel uses aui tabs 2008-06-01 Rene Milk * configure.ac: fixes autotools build 2008-06-01 Andrea Piras * src/mainchattab.cpp: wrote ifndef instead of ifdef :P 2008-06-01 Andrea Piras * src/mainchattab.cpp: disabled behaviour of close tab in the chat tabs 2008-06-01 Andrea Piras * src/mainchattab.cpp, src/mainchattab.h, src/mainwindow.cpp, src/mainwindow.h: fixed code not catching notbook change events 2008-06-01 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainchattab.h, src/mainwindow.cpp, src/mainwindow.h, src/uiutils.cpp, src/uiutils.h: started adding wxAui controls to the left sidebar and chat tabs, broke showing connect dialog on tab highlight and channel highlight 2008-06-01 Andrea Piras * src/ui.cpp: added automatic reconnection to p2p tracker in case of disconnection and manual mode not enabled 2008-06-01 Andrea Piras * src/springlobbyapp.cpp: possibly fixed problem when debug report wasn't available 2008-06-01 Andrea Piras * : commit 05bcae139d4e9aa8559afece61ffc25fdc59b2bf Author: Andrea Piras Date: Sun Jun 1 14:08:07 2008 +0200 2008-06-01 Rene Milk * src/torrentwrapper.cpp: fixes missing include 2008-06-01 Rene Milk * configure.ac: cahnged torrent to be enabled by default in linux build 2008-06-01 Rene Milk * src/images/broom.xpm, src/images/rank6.xpm: new rank 6 icon 2008-06-01 Rene Milk * src/connectwindow.cpp: test 2008-06-01 Rene Milk * : Merge commit 'bd/master' 2008-06-01 Rene Milk * : Merge commit 'bd/master' 2008-06-01 Rene Milk * tools/buildbot-create-build-dirs.sh: should fix buildbot compile 2008-06-01 Rene Milk * : Merge commit 'bd/master' 2008-06-01 Andrea Piras * src/settings++/custom_dialogs.cpp: fixed message boxes having weird sizes in windows 2008-06-01 Andrea Piras * src/settings.cpp, src/springlobbyapp.cpp: fixed portable mode in windows 2008-06-01 Andrea Piras * THANKS, configure.ac: improved thanks file, made error messare on missing sdl deps more clear in autotools 2008-06-01 Andrea Piras * CMakeLists.txt: improved error message on cmake configure failure if sdl libs aren't found 2008-05-31 Andrea Piras * src/springunitsync.cpp: fixed loading of map info 2008-05-31 Andrea Piras * src/settings.cpp, src/springunitsync.cpp: fixed problem when author wasn't found and cache version not saved 2008-05-31 Andrea Piras * src/springunitsync.cpp: changed token separator in map info cache so line feed will work 2008-05-31 Andrea Piras * src/spring.cpp, src/tasserver.cpp: enabled option to disable udp 2008-05-31 Andrea Piras * : commit 89440e1da0f1da34d8448b2e45d1cfc98d38b7b6 Author: Andrea Piras Date: Sat May 31 21:02:31 2008 +0200 2008-05-31 Andrea Piras * src/springunitsync.cpp: added better error debug messages in file cache in unitsync 2008-05-31 Andrea Piras * src/springunitsync.cpp: added space to beautify unit restriction list 2008-05-31 Andrea Piras * src/springunitsync.cpp, src/springunitsync.h: fixed mod unit list caching 2008-05-31 Andrea Piras * src/springunitsync.cpp: fixed memleak 2008-05-31 Andrea Piras * src/springunitsync.cpp: changed cache file name and fixed error messages 2008-05-31 Andrea Piras * src/springunitsync.cpp, src/springunitsync.h: now map info caching fully works 2008-05-31 Andrea Piras * src/springunitsync.cpp, src/springunitsync.h: changed how map info gets cached, enabled? map info caching 2008-05-31 Andrea Piras * src/socket.cpp: fixed using stream append instead of sstring add in socket operation (should give speedup) 2008-05-31 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/springlobbyapp.h: bumped cache version and moved cache location to spring data dir / lobbycache 2008-05-31 Rene Milk * : Merge commit 'bd/master' Conflicts: src/mainwindow.cpp src/mainwindow.h 2008-05-31 Rene Milk * src/springlobbyapp.cpp: ups code that shouldn't have been merged 2008-05-30 Rene Milk * src/chatoptionstab.cpp, src/chatoptionstab.h, src/mainwindow.cpp, src/mainwindow.h, src/ui.cpp: moved autojoin and play sounds to chtaoptionspanel 2008-05-30 Rene Milk * src/chatpanel.cpp, src/settings.cpp: fixes pm sound on app not active 2008-05-30 Rene Milk * : commit 6944f3ecb16fb21f27c46f81d23a71c69388f27e Merge: 0a4e22c 9a4de1c Author: Rene Milk Date: Mon May 26 23:20:01 2008 +0200 2008-05-25 Andrea Piras * src/chatpanel.cpp, src/customlistctrl.cpp: fixed some warnings + reenabled tooltips in win 2008-05-25 Andrea Piras * : commit f5d2eda73bdc90c81e15f6d9cf1df093f79a4164 Author: Andrea Piras Date: Sun May 25 19:19:02 2008 +0200 2008-05-25 Andrea Piras * src/springunitsync.cpp: fixed strings which should not be localized 2008-05-25 Andrea Piras * src/springunitsync.cpp: changed how SL handles hash collsions, no more crash into oblivion but skips the file and throws error 2008-05-25 Andrea Piras * : commit 0a4e22c94459b9782e4b139483aba732f9c0427d Merge: 0dde601 7cc7e6e Author: Rene Milk Date: Sun May 25 11:15:41 2008 +0200 2008-05-25 Rene Milk * : Merge commit 'bd/master' 2008-05-25 Andrea Piras * src/chatpanel.cpp: fixed weird scrolling behaviour in win using normal textctrl 2008-05-25 Andrea Piras * : commit b6ed9b40860994862d043e4983651ca15c47fa85 Author: Andrea Piras Date: Sun May 25 04:19:17 2008 +0200 2008-05-25 Andrea Piras * : commit ee411c2694a52e0de37fa781a1ff94801013f5ff Author: Andrea Piras Date: Sun May 25 04:14:05 2008 +0200 2008-05-25 Andrea Piras * : commit 966a4d1ba7bdf5352158de90a14431c18858bf25 Author: Andrea Piras Date: Sun May 25 03:16:21 2008 +0200 2008-05-25 Rene Milk * : Merge commit '0.0.1.10233' 2008-05-25 Rene Milk * : Merge commit 'bd/master' 2008-05-25 Rene Milk * tools/buildbot-create-build-dirs.sh: nother try 2008-05-25 Rene Milk * tools/buildbot-create-build-dirs.sh: temp measure for win build Signed-off-by: Rene Milk 2008-05-25 Rene Milk * configure.ac: buildsystem fix 2008-05-25 Andrea Piras * tools/buildbot-create-build-dirs.sh: temp disabled sound in buildbot builds 2008-05-25 Andrea Piras * : commit 0faa678f2177983dac6b5b4fba23c93ff9ac236d Author: Andrea Piras Date: Sun May 25 00:12:25 2008 +0200 2008-05-24 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h: added optional define NO_RICHTEXT_CHAT to use wxTextCtrl instead of wxRichTextCtrl (won't have optional autoscroll but will be much faster) 2008-05-24 Andrea Piras * po/Makefile, po/POTFILES, po/da.po, po/de.po, po/fi.po, po/fr.po, po/it.po, po/remove-potcdate.sed, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po: updated translations and fixed buildsystem 2008-05-24 Rene Milk * configure.ac: changes to configure.ac 2008-05-24 Andrea Piras * src/settings.cpp: fixed used settings class in everything but windows 2008-05-24 Andrea Piras * : commit 49c20cd113f5a2c2912cf95193bbc82fde55b13b Author: Rene Milk Date: Sat May 24 20:55:16 2008 +0200 2008-05-24 Andrea Piras * : commit 30c830094652670fe7b93d2b27ce63a61301d6cb Author: Rene Milk Date: Sat May 24 20:16:54 2008 +0200 2008-05-24 Rene Milk * src/mainwindow.cpp, src/mainwindow.h: prepare for edit menu sounds disable 2008-05-24 Andrea Piras * src/chatpanel.cpp: fixed highlight and sound on notification when not focused 2008-05-24 Rene Milk * src/springlobbyapp.cpp: tries to en/disable tooltips on lobby start 2008-05-24 Rene Milk * src/sdlsound.h: fixes build for me 2008-05-24 Andrea Piras * : commit 979f8a39b6da4bbc4cefb5474602f27cce8b0d62 Author: Andrea Piras Date: Sat May 24 17:48:54 2008 +0200 2008-05-24 Andrea Piras * src/sounds/pm_sound.h: forgot to commit pm sound file 2008-05-24 Andrea Piras * CMakeLists.txt, Makefile.am: updated buildsystems 2008-05-24 Andrea Piras * springlobby.cbp, src/chatpanel.cpp, src/ring_sound.h, src/sdlring.cpp, src/sdlring.h, src/sdlsound.cpp, src/sdlsound.h, src/sounds/ring_sound.h, src/ui.cpp, src/ui.h, tools/wav2c.py: renamed files, changed instnatiated class to static instance, added pm sound, added tool to convert wavs in text files 2008-05-24 Dmytry Lavrov * : More tooltip fixes. 2008-05-24 Dmytry Lavrov * src/nicklistctrl.cpp: minor mac fix 2008-05-24 Dmytry Lavrov * src/battlelistctrl.cpp, src/nicklistctrl.cpp: fixes for mac 2008-05-24 Dmytry Lavrov * springlobby.cbp, src/iconimagelist.h, src/nicklistctrl.cpp: More mac fixes: runs but column autosizing is borked. 2008-05-24 Dmytry Lavrov * src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/maintorrenttab.cpp, src/nicklistctrl.cpp, src/settings++/custom_dialogs.cpp: cherry-picking mac fixes for list ctrl Conflicts: src/nicklistctrl.cpp 2008-05-24 Andrea Piras * : commit f33ec420ef13629c92c95ec7377529d472e3923a Author: Rene Milk Date: Sat May 24 14:34:04 2008 +0200 2008-05-22 Rene Milk * src/settings++/Main.cpp: fixes springsettings standalone build 2008-05-22 Rene Milk * src/settings++/Main.cpp, src/settings.cpp, src/settings.h: derived class for win 2008-05-22 Andrea Piras * src/settings++/Main.cpp: fixed settings tool not compiling when debug report was disabled 2008-05-22 Rene Milk * : Merge commit 'bd/master' 2008-05-22 Andrea Piras * src/hostbattledialog.cpp: increased max players limit in hosting dialog to 32 (spring supports up to 16 teams tho) 2008-05-21 Andrea Piras * src/crashreport.cpp, src/crashreport.h, src/springlobbyapp.cpp, src/utils.cpp: made debug report being disabled by default unless spefifically enabled 2008-05-21 Rene Milk * : Merge commit 'bd/master' 2008-05-21 Andrea Piras * CMakeLists.txt: partially adde sound support to cmake buildsystem (atm sdl_sound check fails) 2008-05-21 Andrea Piras * springlobby.cbp: updated c::b project to support SDL sound 2008-05-21 Andrea Piras * : commit 8d93d6e6cd86378bb4ddf255427bc23d281818fa Author: Andrea Piras Date: Wed May 21 14:16:29 2008 +0200 2008-05-20 Andrea Piras * : commit d33dadbe76ab682c1fde67dbe230e8d0934856fc Author: Andrea Piras Date: Tue May 20 23:28:56 2008 +0200 2008-05-20 Andrea Piras * src/ring_sound.h, src/sdlring.cpp, src/sdlring.h: forgot to commit a couple of files 2008-05-20 Andrea Piras * Makefile.am, configure.ac, src/ui.cpp, src/ui.h: commit as-is morphriz's patch to allow sound trought sdl_sound 2008-05-20 Andrea Piras * src/settings.cpp, src/uiutils.cpp: changed load / store settings to use casts to long data type explicitly 2008-05-20 Andrea Piras * src/settings.cpp: ups wrote false instead of true :( 2008-05-20 Andrea Piras * src/settings.cpp: made autoscroll disable on chat focus lost off by default 2008-05-20 Andrea Piras * : commit 04795d406b91d6b6dfcfb8eabb80f53946f28221 Merge: 91dbe78 5bbb178 Author: Rene Milk Date: Mon May 19 20:13:56 2008 +0200 2008-05-19 Andrea Piras * src/settings.cpp, src/springlobbyapp.cpp: now the lobby automatically rebase the spring paths every startup in portable mode 2008-05-18 Andrea Piras * src/chatpanel.cpp, src/torrentwrapper.cpp: improved string tokenizing in torrent & output chat functions 2008-05-18 Andrea Piras * : commit d731e34fc3b5fa7b100533d4bd19aea279ac3548 Author: Andrea Piras Date: Sun May 18 22:16:25 2008 +0200 2008-05-18 Andrea Piras * src/settings.cpp, src/settings.h, src/spring.cpp: now file settings in windows should work, added option to detect portable mode (not used yet), script.txt gets saved in spring dir now 2008-05-18 Andrea Piras * : commit abec673b92c091cca9cd54905e8d6500b2886f80 Author: Andrea Piras Date: Sun May 18 19:45:49 2008 +0200 2008-05-18 Andrea Piras * src/chatlog.cpp, src/chatpanel.cpp, src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp, src/mapctrl.cpp: added more try/catch 2008-05-18 Andrea Piras * src/battleroomlistctrl.cpp: added try/catch to battleroomlistctrl 2008-05-18 Andrea Piras * src/battle.cpp, src/battlelisttab.cpp: wrapped asserts in try/catch in battle & battlelisttab 2008-05-18 Andrea Piras * src/serverevents.cpp: more stuff wrapped in try/catch 2008-05-18 Andrea Piras * src/tasserver.cpp: wrapped properly the asserts in the tasserver class in try/catch resulting i way much more stable app 2008-05-18 Andrea Piras * : commit bc5bb47c25bcb45ff4b7b16ce55ffa9bd3b11b9b Merge: 219ebea a034d92 Author: Andrea Piras Date: Sun May 18 18:48:35 2008 +0200 2008-05-18 Andrea Piras * src/battle.cpp, src/battlemaptab.cpp, src/battleroomtab.cpp, src/ibattle.cpp, src/ibattle.h, src/iunitsync.h, src/mapctrl.cpp, src/singleplayerbattle.cpp, src/singleplayertab.cpp, src/spring.cpp, src/ui.cpp: renamed LocalMap/Mod to LoadMap/LoadMod, now void hash is void string and not NULL and sync check now works perfectly 2008-05-18 Andrea Piras * src/chatpanel.cpp: partially added code to detect urls 2008-05-18 Andrea Piras * src/chatpanel.cpp: made code simpler and faster thansk to dizekat 2008-05-18 Andrea Piras * configure.ac: now configure fails properly if torrent mode was enabled and libtorrent not found 2008-05-18 Andrea Piras * src/chatpanel.cpp, src/settings.cpp, src/settings.h: added option to disable autoscroll when chat doesn't have focus (default is on) 2008-05-18 Andrea Piras * CMakeLists.txt, configure.ac: added richtext lib linking to buildsystems 2008-05-18 Andrea Piras * src/chatpanel.cpp: ups, the limit to disabe autoscroll shouldn't be 3 lines below bottom scrollbar 2008-05-18 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h: changed chat panel to be wxRichTextCtrl, made working autoscroll 2008-05-18 Andrea Piras * src/mainchattab.cpp: now server panel can be closed like a normal panel 2008-05-17 Andrea Piras * src/battlemaptab.cpp: fixed map not changing in MP 2008-05-17 Andrea Piras * : commit 260edb85522ddd7189bacbcb129b380f15972a3a Author: Andrea Piras Date: Sat May 17 20:21:30 2008 +0200 2008-05-17 Dmytry Lavrov * src/tdfcontainer.cpp, src/tdfcontainer.h: adding parser. incomplete. 2008-05-16 Rene Milk * src/maintorrenttab.cpp: selection in torrent tab should be stable now 2008-05-17 Dmytry Lavrov * : commit 5d66a3cb80d27213190499a5048590e1b91e4227 Author: Dmytry Lavrov Date: Sat May 17 15:31:36 2008 +0300 2008-05-17 Rene Milk * src/ui.cpp: fixes segfault with autojoin on exit 2008-05-16 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h, src/ui.cpp: now torrent system can download files by name too and mod download works 2008-05-16 Andrea Piras * src/battlemaptab.cpp, src/hostbattledialog.cpp, src/singleplayertab.cpp: commented out sorting functions in map/mod chosing controls since they were messing up indexes for map/mods 2008-05-16 Andrea Piras * src/battlemaptab.cpp, src/hostbattledialog.cpp, src/iunitsync.h, src/singleplayertab.cpp, src/springunitsync.cpp, src/springunitsync.h: now lobby uses the map/mod cache arrays to populate mod & map choices controls in gui for huge speedup at lobby startup and battle join/host 2008-05-16 Andrea Piras * : commit 505f22fa8632d8db313170284a2f064bfeef246f Author: Rene Milk Date: Fri May 16 15:34:18 2008 +0200 2008-05-16 Rene Milk * src/chatpanel.cpp: fixes a warning 2008-05-16 Rene Milk * : commit 68309cf0551ee087565b52588a799fc806423452 Merge: bb783e5 21eb020 Author: Rene Milk Date: Fri May 16 15:03:34 2008 +0200 2008-05-16 Andrea Piras * src/chatpanel.cpp: now carriage returns gets displayed/converted correctly when setting chat topics 2008-05-16 Andrea Piras * : commit 0dcb318e34bcec03eff60cb4ae3430dde312f098 Author: Andrea Piras Date: Fri May 16 14:26:38 2008 +0200 2008-05-16 Andrea Piras * : commit 974c8921013127bc07e47a10f5bdd3a638781c70 Merge: 23d8a04 97043a9 Author: Andrea Piras Date: Fri May 16 14:02:36 2008 +0200 2008-05-16 Rene Milk * src/chatpanel.cpp, src/ui.cpp, src/ui.h: - fixes 475 by allowing to pass custom textctrl flags to Ui::AskText, default is old behaviour wxOK | wxCANCEL | wxCENTRE 2008-05-16 Rene Milk * src/connectwindow.cpp: force saving of pw on autoconnect 2008-05-16 Rene Milk * src/connectwindow.cpp: fixes layout of connect window 2008-05-16 Rene Milk * src/connectwindow.cpp, src/connectwindow.h, src/settings.cpp, src/settings.h, src/ui.cpp: ups, didn't commit the changes for autojoin to work 2008-05-16 Rene Milk * src/ui.cpp: adds autoconnect support (disabled) 2008-05-15 Andrea Piras * src/chatoptionstab.cpp: fixed chat font not changing in windows 2008-05-15 Rene Milk * src/singleplayertab.cpp: changed no bot behaviour to ask instead of refuse 2008-05-15 Rene Milk * src/singleplayertab.cpp: adds informative tooltip to minimap in sp 2008-05-15 Rene Milk * src/battlelisttab.cpp: changed failure condition 2008-05-15 Rene Milk * src/battlelisttab.cpp, src/server.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: makes firewall text results more verbose 2008-05-15 Rene Milk * src/chatpanel.cpp: adds tooltip pointing to autojoin 2008-05-15 Rene Milk * src/hostbattledialog.cpp: makes the host button in host dialog have focus after creation of dialog 2008-05-15 Rene Milk * src/battlemaptab.cpp, src/singleplayertab.cpp, src/utils.cpp, src/utils.h: fixes 467 2008-05-15 Rene Milk * src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp: fixes 476 2008-05-13 Andrea Piras * : Merge commit 'local/master' 2008-05-11 Andrea Piras * src/battleoptionstab.cpp, src/mmoptionswrapper.cpp, src/serverevents.cpp, src/tasserver.cpp: set start max M & E to 100 M, max units to 10k and changed script tags separator to be / 2008-05-11 Andrea Piras * src/spring.cpp, src/springunitsync.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h: now SL sends a message to p2p coordinator to autoset teamspeak chat rooms 2008-05-11 Andrea Piras * src/springunitsync.cpp: now SL lists jar files in global AI folder as AIs 2008-05-10 Andrea Piras * src/ibattle.cpp: fixed missing string check Signed-off-by: Andrea Piras 2008-05-10 Andrea Piras * src/singleplayertab.cpp: fixed map/mod not being set corrently in SP 2008-05-10 Andrea Piras * src/addbotdialog.cpp, src/battle.cpp, src/battlelistctrl.cpp, src/battlelistfilter.cpp, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/chatpanel.cpp, src/ibattle.cpp, src/ibattle.h, src/iunitsync.h, src/mainjoinbattletab.cpp, src/mapctrl.cpp, src/serverevents.cpp, src/settings.cpp, src/singleplayerbattle.cpp, src/singleplayertab.cpp, src/spring.cpp, src/springunitsync.cpp, src/springunitsync.h, src/tasserver.cpp, src/ui.cpp: distinguished local map/mod hash/name from host map/mod hash/name in variables and function calls 2008-05-09 Andrea Piras * src/base64.h: added #include so SL builds on mac too 2008-05-09 Andrea Piras * src/battleroomlistctrl.cpp: lol i was trying to strip the player name & not the dll name 2008-05-09 Andrea Piras * src/battleroomlistctrl.cpp: fixed silly code trying to strip path infos from modname instead of botname in battleroomlistctrl 2008-05-09 Andrea Piras * src/battleroomlistctrl.cpp: fixed small typo :p 2008-05-09 Andrea Piras * src/addbotdialog.cpp, src/battleroomlistctrl.cpp: now bot name gets refined in player list in battleroomlistctrl too 2008-05-09 Kaot * CMakeLists.txt: - Correct the hardcoded Path to the PkgConfig Modul of CMake - Added a Versioncheck for libtorrent where we at least require Version 0.13 - If no sufficient Option is found the OPTION_USE_TORRENT Variable is automatically set to 0 Signed-off-by: Kaot 2008-05-08 Andrea Piras * src/addbotdialog.cpp: strip luaai prefix in add bot list 2008-05-08 Kaot * CMakeLists.txt, src/mainoptionstab.cpp: - Extended the CMake Build System by a first optional Parameter for SpringLobby: - OPTION_USE_TORRENT_SYSTEM: Enables the Torrent System - Minor Corrections in the Context of the Torrent Build System Signed-off-by: Kaot 2008-05-08 Kaot * : Merge commit 'bd/master' into Beta Conflicts: src/chatpanel.cpp src/iconimagelist.cpp src/tasserver.cpp Signed-off-by: Kaot 2008-05-08 Andrea Piras * src/springunitsynclib.cpp: fixed unitsync loading reporting success even in case of nonexisting file 2008-05-08 Tobi Vollebregt * src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.cpp, src/springunitsynclib.h: added IUnitSync GetMapArchive and GetArchivePath methods 2008-05-08 Andrea Piras * : Merge commit 'local/master' 2008-05-08 Andrea Piras * src/addbotdialog.cpp, src/tasserver.cpp: forgot to commit some changes :P 2008-05-08 Tobi Vollebregt * : commit 82175bf0d3f93481e5ca6dc8b073fdd942d7c882 Author: Andrea Piras Date: Thu May 8 19:13:48 2008 +0200 2008-05-08 Andrea Piras * : Merge commit 'local/master' 2008-05-08 Tobi Vollebregt * src/singleplayertab.cpp, src/springunitsync.cpp: don't call GetNumMaps/GetNumMods in each loop iteration 2008-05-07 Tobi Vollebregt * src/torrentwrapper.cpp: initialize m_timer_count et al. 2008-05-07 Tobi Vollebregt * src/springlobbyapp.cpp: initialize m_otadownloader et al. 2008-05-07 Tobi Vollebregt * src/torrentwrapper.cpp: initialize globalinfos members 2008-05-07 Andrea Piras * src/springunitsync.cpp: fixed typo in luaai load 2008-05-07 Tobi Vollebregt * src/torrentlistctrl.cpp: initialize m_sortorder 2008-05-06 Kaot * src/chatpanel.cpp, src/chatpanel.h: - Added Testframework for testing pressing/releasing of Keys, but wxTextCtrl is shadowing/catching Key_Down Events. :( Signed-off-by: Kaot 2008-05-06 Andrea Piras * : commit a179b79edffa366c931e304865b541541904a201 Author: Andrea Piras Date: Tue May 6 20:39:01 2008 +0200 2008-05-06 Rene Milk * : commit 9c7392b8193b57c79d833474fe04e2d083220c92 Merge: 7fcb9fa 49b1011 Author: Rene Milk Date: Tue May 6 11:25:34 2008 +0200 2008-05-06 Rene Milk * src/battlelistctrl.cpp, src/battlelisttab.cpp, src/customlistctrl.cpp, src/customlistctrl.h, src/nicklistctrl.cpp, src/torrentlistctrl.cpp, src/torrentlistctrl.h: refactor pt1 2008-05-05 Rene Milk * src/battlelisttab.cpp: this should be it 2008-05-05 Rene Milk * src/battlelisttab.cpp: more stability for selection 2008-05-05 Rene Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.cpp: some selection improvements 2008-05-05 Rene Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.cpp, src/customlistctrl.cpp, src/customlistctrl.h: refactored some stuff to list parent class 2008-05-05 Rene Milk * src/battlelisttab.cpp: this should be it 2008-05-05 Rene Milk * src/battlelisttab.cpp: more stability for selection 2008-05-05 Rene Milk * : commit 546576ba036431b9bdb9e5a9d954bf9c5e14b1eb Author: Rene Milk Date: Mon May 5 20:10:13 2008 +0200 2008-05-05 Rene Milk * src/mmoptionswrapper.cpp, src/settings++/tab_abstract.cpp, src/torrentlistctrl.cpp: default sort order:name --> percent completed --> mb donwloaded changed two todos 2008-05-05 Rene Milk * src/maintorrenttab.cpp, src/maintorrenttab.h, src/torrentlistctrl.cpp, src/torrentwrapper.h: added sorting for eta (needed additional field in torrentinfo) 2008-05-05 Rene Milk * : commit e858792af09ac90d4529f0daacae61e906e171a3 Author: Rene Milk Date: Mon May 5 11:19:33 2008 +0200 2008-05-05 Rene Milk * : commit 4d05e77ffa3dc76a32493033251bcaeb3cb10d38 Author: Rene Milk Date: Mon May 5 02:51:59 2008 +0200 2008-05-05 Rene Milk * : commit 64171d8b1a55945005bf4361e667559eb2f4150f Author: Rene Milk Date: Mon May 5 01:51:31 2008 +0200 2008-05-05 Rene Milk * src/httpdownloader.cpp: removed comment Signed-off-by: Rene Milk 2008-05-05 Andrea Piras * Makefile.am: updated makefile for missing header *sigh* 2008-05-05 Andrea Piras * INSTALL, po/da.po, po/de.po, po/fi.po, po/fr.po, po/it.po, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po: updated translations and removed mo files 2008-05-05 Andrea Piras * : commit 95c0743d62d6a4e2ef11f4174f0c8f663b200c57 Author: Andrea Piras Date: Mon May 5 00:01:34 2008 +0200 2008-05-04 Andrea Piras * Makefile.am: added missing files to buildsystem 2008-05-04 Andrea Piras * : commit ea837eeb00690338a13e45a49d8d0980bc048a45 Author: Rene Milk Date: Sun May 4 23:43:38 2008 +0200 2008-05-04 Rene Milk * src/globalevents.cpp, src/globalevents.h, src/httpdownloader.h: strange things happen in mingw compile 2008-05-04 Andrea Piras * src/httpdownloader.h: removed useless #include from header 2008-05-04 Rene Milk * configure.ac: made configure to fail if libtorrent not found 2008-05-04 Rene Milk * Makefile.am: fixed missing file in makefile 2008-05-04 Rene Milk * : Merge commit 'bd/master' 2008-05-04 Rene Milk * springlobby.cbp: removed missing files 2008-05-04 Andrea Piras * src/mainchattab.cpp: fixed copypasta error in color replacing 2008-05-04 Rene Milk * configure.ac: now it should be working 2008-05-04 Rene Milk * INSTALL, configure.ac: changed configure to default to NO_TORRENT_SYSTEM 2008-05-04 Andrea Piras * CMakeLists.txt, src/springlobbyapp.cpp: updated cmakefile, now the download is prompted only at first time startup 2008-05-04 Andrea Piras * src/springunitsync.cpp: fixed fileexist search method in unitsync not closing file handlers 2008-05-04 Rene Milk * : Merge commit 'bd/torrent' into torrent 2008-05-04 Rene Milk * : commit 7ef2142543e463779e51d1d2b784bba504ce97ca Author: Rene Milk Date: Sun May 4 19:35:01 2008 +0200 2008-05-04 Andrea Piras * src/torrentwrapper.cpp: create the torrent folder in SpringData in case it's missing, otherwise the app crashes 2008-05-04 Rene Milk * : Merge commit 'bd/master' 2008-05-04 Andrea Piras * src/singleplayerbattle.cpp: fixed updated triggering refresh in sections they didn't belong in SP tab 2008-05-04 Andrea Piras * src/mainchattab.cpp: now chat panel uses HSV instead of RGB to produce new notification icons ( still distorts the colour tho) 2008-05-04 Rene Milk * po/LINGUAS, po/Makefile, po/POTFILES, po/da.po, po/de.po, po/fi.po, po/fr.po, po/it.po, po/remove-potcdate.sed, po/ro.po, po/ru.po, po/springlobby.pot, po/sv.po, po/uk.po: added translations from launchpad 2008-05-04 Andrea Piras * : commit 849624531e5adb1e6d165eb533af80fc0ab66386 Merge: b23d7af 491ca06 Author: Rene Milk Date: Sun May 4 16:59:54 2008 +0200 2008-05-04 Rene Milk * src/battleroommmoptionstab.cpp, src/mainchattab.cpp, src/mapctrl.cpp, src/singleplayerbattle.cpp, src/utils.h: renamed boundry to CLAMP 2008-05-04 Andrea Piras * src/addbotdialog.cpp, src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.cpp, src/springunitsynclib.h: load the mods before fetching luaais ( wasn't threadsafe also could fail in case of MP + SP usage) 2008-05-04 Rene Milk * src/mainchattab.cpp, src/utils.h: changed color replace to real clamp 2008-05-04 Rene Milk * src/Helper/TextCompletionDatabase.cpp, src/chatpanel.cpp, src/utils.cpp: fixes ansi build 2008-05-04 Andrea Piras * : commit eee836a59e84df2feb346b3caf62ebd424bfc0fb Author: Andrea Piras Date: Sun May 4 15:20:38 2008 +0200 2008-05-03 Andrea Piras * src/torrentwrapper.cpp: forgot to release files on system disconnection 2008-05-03 Andrea Piras * src/torrentwrapper.cpp: prevent the torrent system to connect twice 2008-05-03 Andrea Piras * : commit 4ba3274c0a9d0064a89e73770f28252dd1f3e1f2 Merge: 9205e71 b1e79e3 Author: Andrea Piras Date: Sat May 3 18:52:07 2008 +0200 2008-05-03 Andrea Piras * : commit 5ea27b5f80ae9d405eb4bcf850626ac4e79fd9fb Author: Kaot Date: Sat May 3 02:59:16 2008 +0200 2008-05-02 Rene Milk * src/mainwindow.cpp, src/settings++/Defs.hpp, src/settings++/tab_abstract.cpp: more todos updated 2008-05-02 Rene Milk * src/iconimagelist.cpp, src/settings++/se_utils.cpp, src/settings++/tab_abstract.cpp, src/spinctld.cpp: updated some todos 2008-05-02 Rene Milk * src/ui.cpp: added todo 2008-05-02 Rene Milk * gentoo/overlay/games-util/springlobby/Manifest, gentoo/overlay/games-util/springlobby/springlobby-0.0.1.10219.ebuil d: manually added ebuild 2008-05-02 Rene Milk * : Merge commit 'buildbot/master' 2008-05-02 Kaot * : Merge commit 'koshi/master' into Aktuelles_SpringLobby 2008-05-02 Rene Milk * : commit 60ecc668776a8ed01c6950c88251447901910403 Merge: 8bf8e8f 3e6c7b2 Author: Andrea Piras Date: Fri May 2 01:39:22 2008 +0200 2008-05-02 Rene Milk * : commit 3e6c7b2931acd74266bbf6241c631327ce2ff7c7 Author: Kaot Date: Fri May 2 01:33:23 2008 +0200 2008-05-02 Rene Milk * : Merge commit 'bd/master' 2008-05-02 Rene Milk * tools/update-ebuilds-slave.sh: trying ebuild01 2008-05-01 Andrea Piras * src/battlelistctrl.cpp, src/battlelisttab.cpp, src/mapctrl.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h, src/ui.cpp, src/ui.h: added internal code to call torrent wrapper passing archive unitsync name instead of hash 2008-05-01 Rene Milk * : commit 3f2026bce93f6d8dc5248060d42827e8891d55bc Author: Rene Milk Date: Thu May 1 21:33:44 2008 +0200 2008-05-01 Rene Milk * src/chatpanel.h: now or never 2008-05-01 Rene Milk * src/Helper/TextCompletionDatabase.cpp, src/chatlog.cpp, src/mainwindow.cpp: now it fixes compile error, really also warning fixed about m_chatlog == 0 having no effect 2008-05-01 Rene Milk * src/Helper/TextCompletionDatabase.cpp: hopefully fixes compile error 2008-05-01 koshi * src/utils.cpp: fixes cpu report on win 2008-05-01 Andrea Piras * CMakeLists.txt: fixed cmakefile 2008-05-01 Dmytry Lavrov * src/battleroommmoptionstab.cpp: Fixed segfault (caused by erasing iterator in map and then trying to increment it) 2008-05-01 Andrea Piras * : commit 3dec36fcb7927c90f9f76d8a5e7f2615a69d95ac Merge: da63ea3 f3ae809 Author: Andrea Piras Date: Thu May 1 19:12:57 2008 +0200 2008-05-01 Andrea Piras * CMakeLists.txt: updated cmake file 2008-05-01 Rene Milk * Makefile.am, springlobby.cbp: amended cbp and makefile.am 2008-05-01 Rene Milk * : commit 30a0a5822085622a0221204d0307c25c886d357a Author: Andrea Piras Date: Thu May 1 18:12:03 2008 +0200 2008-05-01 Kaot * src/Helper/TextCompletionDatabase.cpp, src/Helper/TextCompletionDatabase.hpp, src/chatpanel.cpp, src/chatpanel.h: - TextCompletionDatabase: - Feedable with Pairs of (Abbreviaton, Completion) so one could complete for Example "lol" -> "Laughing out loud!" - Features: - The TextCompletionDatabase is able to return all Abbreviations and their corresponding Completions, that contain the requested Abbreviation: - Example: Querying for "ao" returns all off the following Pairs: - ("Kaot", "Kaot") - ("Kaos", "Kaos is in my Room") - ("Lao", "Lao is a Country" - Chatpanel: - Insert/Remove Completion-Pairs to/from the TextCompletionDatabase with Nicks, as User join/leave a Chanel - Nicks just have the same Abbreviation as their Completion, so for Kaot the Pair would look like: Insert(Kaot,Kaot) Signed-off-by: Kaot 2008-05-01 Rene Milk * src/torrentoptionspanel.cpp, src/torrentoptionspanel.h: added status display, update isn't working correctly tho 2008-05-01 Andrea Piras * : commit 54cec2b9e2c59604d147fc276ab22fd11a14cee5 Merge: 8dc7882 5340189 Author: Andrea Piras Date: Thu May 1 16:46:19 2008 +0200 2008-05-01 Rene Milk * src/chatpanel.cpp, src/chatpanel.h: added a menu entry for clearing channel text 2008-05-01 Rene Milk * configure.ac: added base to wx lib explicit dep 2008-05-01 Andrea Piras * src/battlelistctrl.cpp, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleroomlistctrl.cpp, src/chatlog.cpp, src/chatpanel.cpp, src/nicklistctrl.cpp, src/singleplayertab.cpp: now SL autosizes columns automagically 2008-05-01 Rene Milk * src/mainoptionstab.cpp: was lost in conflict resolution dammit 2008-05-01 Rene Milk * src/tasserver.cpp: applied wrong merge resolution 2008-05-01 Rene Milk * : commit 7e7d0594485d970fd0cd068c4f37d206b396aed9 Author: Rene Milk Date: Thu May 1 14:29:34 2008 +0200 2008-05-01 Rene Milk * Makefile.am: DO ADD _ALL_ include files in MAkefile.am goddammit 2008-05-01 Rene Milk * tools/.astylerc: astyle config added in tools/ 2008-05-01 Andrea Piras * src/battlelistctrl.cpp, src/battlemaptab.cpp, src/battleroomlistctrl.cpp, src/chatpanel.cpp, src/mainwindow.cpp, src/nicklistctrl.cpp, src/singleplayertab.cpp: hide lot of gui controls which don't have logic behind, made columns autosize in listctrl 2008-05-01 Rene Milk * configure.ac, src/uiutils.cpp, src/utils.cpp: win and ansi build fixes 2008-05-01 Rene Milk * NEWS, README, THANKS, src/mainwindow.cpp: - added dizekat as dev in about - updated thanks for icons - links to wiki/mailinglists in NEWS/UPDATES 2008-05-01 Rene Milk * : commit 7946413821fd0db66fcda3f75681fd9107664f74 Author: Rene Milk Date: Thu May 1 01:15:03 2008 +0200 2008-05-01 Rene Milk * : commit f6d8ed2bcb15d76573426b47b5274f1399ae8eaa Merge: 5f502a5 a06481c Author: Rene Milk Date: Wed Apr 30 23:15:15 2008 +0200 2008-04-30 Andrea Piras * src/images/arm.xpm, src/images/core.xpm: removed arm & core icons from repo 2008-04-30 Andrea Piras * : commit 815e65255d297af18b43e5e6ac09e447ccf45c1d Author: Andrea Piras Date: Wed Apr 30 22:59:40 2008 +0200 2008-04-30 Rene Milk * src/iconimagelist.cpp, src/images/no1_icon.png.h, src/images/no2_icon.png.h: added two numbers icon 2008-04-30 Rene Milk * src/iconimagelist.cpp, src/images/admin.png.h, src/images/admin.xpm, src/images/admin_away.png.h, src/images/admin_away.xpm, src/images/admin_broom.png.h, src/images/admin_broom.xpm, src/images/admin_ingame.png.h, src/images/admin_ingame.xpm, src/images/away.xpm, src/images/bot_broom.png.h, src/images/bot_broom.xpm, src/images/bot_ingame.png.h, src/images/bot_ingame.xpm, src/images/broom.png.h, src/images/closed_game.xpm, src/images/closed_pw_game.xpm, src/images/ingame.png.h, src/images/ingame.xpm, src/images/open_full_pw_game.xpm, src/images/open_game.xpm, src/images/open_pw_game.xpm, src/images/torrentoptionspanel_icon.png.h, src/mainoptionstab.cpp: again, new icons and sources, also provision in mainoptionstab for torrent icon 2008-04-30 Rene Milk * src/iconimagelist.cpp, src/images/broom.png.h, src/images/broom.xpm, src/images/ingame.png.h: changed broom + added source files 2008-04-30 Rene Milk * src/torrentoptionspanel.cpp: gui beautufics 2008-04-30 Rene Milk * src/mainoptionstab.cpp, src/mainoptionstab.h, src/torrentoptionspanel.cpp: added logic for options 2008-04-29 Rene Milk * : Merge commit 'bd/torrent' into torrent Conflicts: src/torrentoptionspanel.cpp src/torrentoptionspanel.h 2008-04-29 Kaot * CMakeLists.txt: - Added tdfcontainer to the CMakeLists.txt File in order to be able to successfully compile Springlobby Signed-off-by: Kaot 2008-04-29 Kaot * : Merge commit 'bd/master' into Aktuelles_SpringLobby 2008-04-29 Andrea Piras * src/chatpanel.cpp: now springlobby doesn't broadcast chat lines which starts with / and are not found in it's internal command list 2008-04-29 Andrea Piras * src/maintorrenttab.cpp: forgot commenting not working code >_> 2008-04-29 Andrea Piras * src/maintorrenttab.cpp, src/maintorrenttab.h, src/torrentlistctrl.cpp: now cancel button in the torrent gui works 2008-04-29 Andrea Piras * src/settings.cpp, src/settings.h, src/torrentwrapper.cpp: added torrent multiple suspend modes core code and settings part 2008-04-29 Rene Milk * src/httpdownloader.cpp, src/httpdownloader.h: made thread class protected in downloader itslef 2008-04-29 Rene Milk * src/httpdownloader.cpp, src/httpdownloader.h: - renamed updateprogressbar to httpdownloaderthread (that's what it is now) - added switch to disable notifications on downloadevents - added possibility for custom notification texts 2008-04-29 Andrea Piras * src/serverevents.cpp, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/torrentoptionspanel.cpp, src/torrentoptionspanel.h, src/torrentwrapper.cpp, src/torrentwrapper.h: replace enable torrent settings with autostartmode, changed program logics accordingly, needs gui yet 2008-04-29 Rene Milk * src/springlobbyapp.cpp: changed text of ota downlaod 2008-04-29 Rene Milk * src/torrentlistctrl.cpp: fixed leeching vs seeding col header 2008-04-29 Rene Milk * src/images/fixcolours_palette.xpm: fix xpm 2008-04-29 Andrea Piras * src/maintorrenttab.cpp, src/torrentlistctrl.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h: fixed uknown distrubtured sources gui message, fixed unlocalized strings, fixed segfault on app close, changed leech display & logic to be seed instead 2008-04-28 Andrea Piras * src/torrentwrapper.cpp: auto leeching torrents works 2008-04-28 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: added function to remove (cancel) torrents 2008-04-28 Rene Milk * src/maintorrenttab.cpp: small adjustment 2008-04-28 Rene Milk * src/maintorrenttab.cpp, src/maintorrenttab.h, src/torrentlistctrl.cpp: moar gui fixes 2008-04-28 Rene Milk * : Merge commit 'bd/torrent' into torrent 2008-04-28 Andrea Piras * src/torrentwrapper.cpp: fixed removing seeded torrents decreasing open leeched torrents 2008-04-28 Rene Milk * src/maintorrenttab.cpp: numbers fixed 2008-04-28 Rene Milk * src/maintorrenttab.cpp: fixed numbers in list (i hope) 2008-04-28 Rene Milk * : Merge commit 'bd/torrent' into torrent 2008-04-28 Andrea Piras * src/torrentwrapper.cpp: removed the (useless since duplicate) check if file was already present locally before leeching 2008-04-28 Andrea Piras * src/torrentwrapper.cpp: forgot a ; 2008-04-28 Andrea Piras * src/maintorrenttab.cpp: forgot to commit changes in the gui section 2008-04-28 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: fixed passing params to the gui, added filesize and changed hash container to be wxString 2008-04-28 Rene Milk * src/maintorrenttab.cpp: guesswork 2008-04-28 Rene Milk * : Merge commit 'bd/torrent' into torrent 2008-04-28 Andrea Piras * src/torrentwrapper.cpp: added checks to prevent joining duplicate torrents or requesting files you already have 2008-04-28 Rene Milk * src/maintorrenttab.cpp: changed speed calc 2008-04-28 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: now torrent system uses .torrent files instead of infohahes, fixed logic that was assuming that torrent name was equal to unitsync name 2008-04-28 Rene Milk * src/iconimagelist.cpp, src/iconimagelist.h: added logic for full games 2008-04-28 Rene Milk * src/images/closed_full_game.png.h, src/images/full_game.xpm, src/images/open_full_game.png.h: added icons for full games (non-pw) 2008-04-27 Rene Milk * src/images/open_full_pw_game.xpm: openfullpw 2008-04-28 Dmytry Lavrov * springlobby.cbp, src/base16.cpp, src/base16.h, src/tasserver.cpp, src/torrentwrapper.cpp: Fixed lot of bugs in torrentwrapper. Current state: getting using infohash does not work because of division by zero in libtorrent. 2008-04-27 Rene Milk * src/images/admin_away.xpm: new admin away 2008-04-27 Rene Milk * src/iconimagelist.cpp, src/iconimagelist.h, src/images/away.png.h, src/images/away.xpm, src/images/closed_full_pw_game.png.h, src/images/closed_pw_game.png.h, src/images/open_full_pw_game.png.h, src/images/open_pw_game.png.h, src/images/spectator.xpm: new icons (away+spec+fullgames) 2008-04-27 Rene Milk * src/globalevents.cpp, src/globalevents.h: same as last 2008-04-27 Rene Milk * springlobby.cbp: add globalevents to cbp 2008-04-27 Andrea Piras * src/base64.cpp, src/base64.h, src/tasserver.cpp, src/torrentwrapper.cpp: changed base64 lib to be from codeblocks, tweaked it to return std::string and used in torrent wrapper 2008-04-26 Andrea Piras * src/torrentwrapper.cpp: added checks on messages from server to prevent segfaults on malformed messages 2008-04-26 Andrea Piras * src/maintorrenttab.cpp, src/torrentwrapper.cpp: now gui displays global speeds and renabled buggy seed request handler to fix 2008-04-26 Andrea Piras * src/torrentlistctrl.cpp: made columns resizeable in torrent tab 2008-04-26 Andrea Piras * src/torrentoptionspanel.cpp: fixed slightly description of torrent system settings 2008-04-26 Andrea Piras * src/torrentwrapper.cpp: fixed settings torrent network speeds 2008-04-26 Andrea Piras * src/maintorrenttab.cpp, src/torrentlistctrl.cpp: fixed torrent gui so it list torrents correctly and columns sizes properly 2008-04-26 Andrea Piras * src/torrentwrapper.cpp: temporanely disabled autoseeding torrents fixed missing base64 decoding of torent infohash fixed adding http urls for seeds (now adds them all, not just first) now doesn't saves locally .torrent info file anymore when creating a new one 2008-04-26 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: now finally torrent socket reads all the data (i missed to copy a part of code from tasserver socket operation) 2008-04-25 Andrea Piras * src/torrentwrapper.cpp: fixed enfocing max 5 open torrents in leech mode 2008-04-25 Andrea Piras * src/torrentwrapper.cpp: torrent system won't do roitine maintenance if not connected to the system 2008-04-25 Andrea Piras * src/torrentwrapper.cpp: made network message handler for torrent lib much mroe robust in case of race conditions 2008-04-25 Andrea Piras * Makefile.am, configure.ac: added patch to buildsystem from tizbac to allow building SL with libtorrent 2008-04-25 Rene Milk * src/springlobbyapp.cpp: added path to base and filename 2008-04-25 Rene Milk * src/httpdownloader.cpp, src/httpdownloader.h: fixed segfault 2008-04-25 Rene Milk * src/httpdownloader.cpp, src/httpdownloader.h, src/uiutils.cpp, src/uiutils.h: moved global handler to own file 2008-04-25 Dmytry Lavrov * src/mutexwrapper.h, src/torrentwrapper.cpp, src/torrentwrapper.h: Fixes in mutex locking. Builds, but not tested. 2008-04-24 Rene Milk * src/httpdownloader.cpp, src/httpdownloader.h, src/uiutils.cpp, src/uiutils.h: added global handler for events 2008-04-24 Rene Milk * src/httpdownloader.cpp, src/httpdownloader.h: with eventdefines 2008-04-24 Rene Milk * src/httpdownloader.cpp, src/httpdownloader.h, src/springlobbyapp.cpp: event not processed 2008-04-24 Dmytry Lavrov * : commit 93572965a232bd87e235db702f94191591057d2e Author: Dmytry Lavrov Date: Thu Apr 24 23:09:52 2008 +0300 2008-04-24 Andrea Piras * src/bimap.h, src/mutexwrapper.h, src/torrentwrapper.cpp, src/torrentwrapper.h: finished adding mutexes templates to torrent wrapper code 2008-04-24 Rene Milk * src/httpdownloader.cpp, src/httpdownloader.h, src/springlobbyapp.cpp, src/springlobbyapp.h: kinda working 2008-04-24 Andrea Piras * : commit e09bbf5007f6e0f011d51b1776505399774dc527 Author: Dmytry Lavrov Date: Thu Apr 24 14:50:46 2008 +0300 2008-04-23 Andrea Piras * src/mainoptionstab.cpp, src/maintorrenttab.cpp, src/maintorrenttab.h, src/mainwindow.cpp, src/mainwindow.h, src/serverevents.cpp, src/springunitsync.cpp, src/torrentlistctrl.cpp, src/torrentlistctrl.h, src/torrentoptionspanel.cpp, src/torrentoptionspanel.h, src/torrentwrapper.cpp, src/torrentwrapper.h, src/ui.cpp: added optional #define NO_TORRENT_SYSTEM to disable compilation and excution of content downloader 2008-04-23 Dmytry Lavrov * : commit d25267ad43bb810373676cb1f98beaca815661d5 Author: Dmytry Lavrov Date: Wed Apr 23 19:27:44 2008 +0300 2008-04-23 Dmytry Lavrov * : commit f8abbaad1b8b14fb005bb226a376ca52f23ff887 Author: Dmytry Lavrov Date: Wed Apr 23 19:18:09 2008 +0300 2008-04-23 Andrea Piras * src/httpdownloader.cpp: now it downloads finally! 2008-04-23 Andrea Piras * src/httpdownloader.cpp: fixed race condition for pointer 2008-04-23 Andrea Piras * src/httpdownloader.cpp, src/httpdownloader.h, src/springlobbyapp.cpp: fixed compilation problems (dunno why i didn't have those before) 2008-04-23 Andrea Piras * src/httpdownloader.h: fixed class pointer location 2008-04-23 Andrea Piras * src/httpdownloader.cpp, src/httpdownloader.h: moved all downloading stuff to the thread to prevent race bugs 2008-04-23 Rene Milk * src/httpdownloader.cpp, src/springlobbyapp.cpp: trying stuff 2008-04-23 Rene Milk * Makefile.am, src/httpdownloader.cpp, src/springlobbyapp.cpp: fixes makefile and add example 2008-04-23 Andrea Piras * src/httpdownloader.cpp, src/httpdownloader.h: possibily fixed segfault on read from http stream 2008-04-22 Rene Milk * src/settings++/tab_audio.cpp: cahnged min slider pos to 0 on audio tab 2008-04-22 Rene Milk * src/mainwindow.cpp, src/settings++/Main.cpp, src/settings++/frame.cpp, src/settings++/frame.h, src/settings++/se_settings.cpp, src/settings++/se_settings.h, src/settings.cpp: made springsettings remember pos and size 2008-04-22 Rene Milk * : commit 5f502a50bc08f5d7bcd4311a1ed63b11c7984565 Merge: af5f0ab c20ec58 Author: Rene Milk Date: Tue Apr 22 01:38:27 2008 +0200 2008-04-22 Rene Milk * src/connectwindow.cpp: chaned connect window focus behaviour: if username is non-empty focus is set to ok button 2008-04-21 Rene Milk * src/iconimagelist.cpp, src/iconimagelist.h, src/images/closed_game.png.h, src/images/closed_pw_game.png.h, src/images/download_man_icon.png.h, src/images/full_game.xpm, src/images/open_game.png.h, src/images/open_pw_game.png.h: started work on game full icon 2008-04-21 Andrea Piras * src/httpdownloader.cpp: fixed url for fetching files (forgot a / ) 2008-04-21 Andrea Piras * src/httpdownloader.cpp: removed potential segfault on http connecrion failure 2008-04-21 Andrea Piras * springlobby.cbp, src/httpdownloader.cpp, src/httpdownloader.h: initial version of an http downloader with progress dialog and automatic unzip 2008-04-21 Rene Milk * src/iconimagelist.cpp, src/images/admin.xpm, src/images/closed_game.xpm, src/images/closed_pw_game.xpm, src/images/open_game.xpm, src/images/open_pw_game.xpm, src/images/rank0.xpm, src/images/rank1.xpm, src/images/rank2.xpm, src/images/rank3.xpm, src/images/rank5.xpm, src/images/rank6.xpm, src/images/star_gold.xpm, src/uiutils.cpp, src/uiutils.h: some new icons 2008-04-20 Rene Milk * tools/update-ebuilds-slave.sh: changed eubuild update 2008-04-20 Andrea Piras * src/ui.cpp: fixed refresh button in minimap preview crashing lobby if not in a battle 2008-04-20 Rene Milk * : commit cfbf57ad7ac692dab169bafcbb42fdd6af2ec903 Merge: f0b3d38 622f612 Author: Rene Milk Date: Sun Apr 20 12:28:01 2008 +0200 2008-04-20 Andrea Piras * src/springlobbyapp.cpp: fixed a string that should not be translated 2008-04-20 Andrea Piras * src/springlobbyapp.cpp: changed title of first time widzrd to reflect what it actually is :P 2008-04-20 Andrea Piras * : commit dfd693c90e161a5823d8d1b178897b5ea4f2f4bc Author: Andrea Piras Date: Sun Apr 20 01:15:42 2008 +0200 2008-04-20 Andrea Piras * src/settings.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp: fixed trying to access untisync when it wasn't loaded, now suggestion in case of dir creation failed doesn't uses empty prefix anymore on cancel button 2008-04-19 Dmytry Lavrov * src/settings.cpp: merge resolutions - done 2008-04-19 Dmytry Lavrov * : commit e3ac22844233f45c635d8a3908b39ca1bd6f4076 Author: Andrea Piras Date: Sat Apr 19 18:59:41 2008 +0200 2008-04-19 Andrea Piras * src/torrentwrapper.cpp: now dht gets stopped while spring is running 2008-04-19 Andrea Piras * : commit dbd0cc9996855af6e63e036d808fbd55c3aeda54 Author: Rene Milk Date: Sat Apr 19 16:39:41 2008 +0200 2008-04-19 Rene Milk * src/images/downloads_icon.png.h, src/images/downloads_icon_text.png.h, src/mainwindow.cpp: added new icon 2008-04-19 Rene Milk * : commit 9bed3b8cf2bc459821428fd6eeda1d6e45d2e718 Author: Rene Milk Date: Sat Apr 19 15:21:25 2008 +0200 2008-04-19 Andrea Piras * src/torrentwrapper.cpp: fixed return instead of break 2008-04-19 Rene Milk * THANKS, tools/make_header_from_png.sh, tools/png2c.py, tools/xcf2pngh.sh: added some hints on image scripts 2008-04-19 Andrea Piras * src/torrentwrapper.cpp: first join torrents that needs to be seeded THEN leave torrents that don't need anymore to avoid threading errors 2008-04-19 Andrea Piras * src/torrentwrapper.cpp: now torrent uses infohash to join a torrent instead of downloading file from tracker 2008-04-19 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: added support for infohash, fixed behaviour to add http mirrors, and some race conditions 2008-04-19 Andrea Piras * src/torrentwrapper.cpp, src/ui.cpp: fixed some silly typos forgot negations, ecc in torrent code 2008-04-19 Rene Milk * springlobby.cbp: forgot project file 2008-04-18 Rene Milk * src/maintorrenttab.cpp, src/maintorrenttab.h, src/mainwindow.cpp, src/mainwindow.h, src/torrentlistctrl.cpp, src/torrentlistctrl.h, src/ui.cpp, src/ui.h: no info in map 2008-04-18 Rene Milk * src/maintorrenttab.cpp, src/maintorrenttab.h, src/torrentlistctrl.cpp, src/torrentlistctrl.h: nothing really 2008-04-18 Rene Milk * : Merge commit 'bd/torrent' into torrent 2008-04-18 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: now CollectGuiInfos is public in torrent wrapper and will be called from gui code instead 2008-04-18 Andrea Piras * : commit 06e8bd643f08adc5838dc3b624906a114e62ce4e Author: Andrea Piras Date: Fri Apr 18 21:51:43 2008 +0200 2008-04-18 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: now map container to pass torrent infos is indexed by file hashes instead 2008-04-18 Rene Milk * : Merge commit 'bd/torrent' into torrent 2008-04-18 Andrea Piras * src/torrentwrapper.cpp: added handling of max connections settings in torrent wrapper 2008-04-18 Andrea Piras * src/iunitsync.h, src/settings.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springunitsync.cpp, src/springunitsync.h: now SL properly read & write to .springrc file the SpringData path 2008-04-18 Rene Milk * src/torrentoptionspanel.cpp: disconnect from system if requested 2008-04-18 Rene Milk * src/mainoptionstab.cpp, src/torrentoptionspanel.cpp, src/torrentoptionspanel.h: settings get saved 2008-04-18 Andrea Piras * src/springlobbyapp.cpp, src/springlobbyapp.h: added automatic & assited user data folder creation under linux 2008-04-18 Rene Milk * src/mainoptionstab.cpp, src/mainoptionstab.h, src/torrentoptionspanel.cpp: settings not getting set 2008-04-18 Rene Milk * src/torrentoptionspanel.cpp, src/torrentwrapper.cpp: compiles 2008-04-18 Rene Milk * : Merge commit 'bd/torrent' into torrent 2008-04-18 Rene Milk * src/torrentoptionspanel.cpp, src/utils.cpp, src/utils.h: need bd's stuff 2008-04-18 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: added function to check torrent system connectivity 2008-04-18 Rene Milk * src/settings.cpp, src/settings.h, src/torrentoptionspanel.cpp, src/torrentoptionspanel.h, src/torrentwrapper.h: halfway through optionspanel for torrent 2008-04-18 Andrea Piras * src/ui.cpp: hooked the function for torrent threaded slowupdate 2008-04-18 Andrea Piras * src/ui.cpp: hooked ui class to the wrapper to auto pause/resume upon game launch 2008-04-18 Andrea Piras * src/serverevents.cpp, src/torrentwrapper.cpp: torrents gets all removed upon disconnection, now lobby autoconnects to system at lobby server connection 2008-04-18 Andrea Piras * src/hostbattledialog.cpp: now it uses (none) instead of a space to represent empty description 2008-04-18 Andrea Piras * src/hostbattledialog.cpp: replace empty battle description with a space 2008-04-18 Rene Milk * : Merge commit 'bd/torrent' into torrent 2008-04-17 rene_milk * : Merge commit 'bd/torrent' into torrent 2008-04-17 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: added (not used yet) function that uses metadata exchange and infohash insteead of downloading .torrent files from the tracker 2008-04-17 Andrea Piras * src/torrentwrapper.cpp: enabled libtorrent 0.13 additional functions 2008-04-17 Andrea Piras * src/torrentwrapper.h: fixed function position in torrent class 2008-04-17 Andrea Piras * src/battlelistctrl.cpp, src/battlelisttab.cpp, src/mapctrl.cpp, src/ui.cpp, src/ui.h: changed gui functions to they use torrent wrapper to download medias 2008-04-17 rene_milk * : Merge commit 'bd/torrent' into torrent 2008-04-17 Dmytry Lavrov * src/battle.cpp, src/battlemaptab.cpp, src/ibattle.h, src/mainwindow.cpp, src/settings.cpp, src/settings.h, src/ui.cpp: Implemented saving of start pos type and rectangles(if any) per map. 2008-04-17 Andrea Piras * src/torrentwrapper.cpp: forgot int conversion 2008-04-17 Andrea Piras * src/springunitsync.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h, src/ui.cpp: added function to list files in the system, now unitsync reload automatically adds file listing to the torrent 2008-04-17 rene_milk * : Merge commit 'bd/torrent' into torrent 2008-04-16 Andrea Piras * src/maintorrenttab.cpp, src/maintorrenttab.h: some initial fixes for gui code 2008-04-16 Andrea Piras * src/chatpanel.cpp: removed useless debug code 2008-04-16 Andrea Piras * MainTorrentTab.cpp, MainTorrentTab.h, springlobby.cbp, src/maintorrenttab.cpp, src/maintorrenttab.h: fixed file locations 2008-04-16 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: fixed minor problem with how torrent names were passed between different section of codes 2008-04-16 Andrea Piras * src/torrentwrapper.cpp: added code to write torrent descriptor file from tracker 2008-04-16 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: removed thread, now uses timer updates to do cyclic operations, now lobby does maintenance operations on torrents 2008-04-16 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: automatically leave torrents when not needing to seed them anymore 2008-04-15 Andrea Piras * src/torrentwrapper.cpp: forgot #include 2008-04-15 Andrea Piras * src/torrentwrapper.cpp: autodownloads descriptor file from tracker if not present locally 2008-04-15 Andrea Piras * src/settings.cpp, src/settings.h, src/torrentwrapper.cpp, src/torrentwrapper.h: now torrent settings uses settings class directly instead of function calls 2008-04-15 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: fixed selection of server to download torrent infos 2008-04-15 Andrea Piras * src/torrentwrapper.cpp: fixed connecting port to p2p coordinator 2008-04-15 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: started adding thread to send torrent infos to the gui 2008-04-15 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: fixed compiling errors 2008-04-15 Andrea Piras * MainTorrentTab.cpp, MainTorrentTab.h, springlobby.cbp, src/autobalancedialog.cpp, wxsmith/MainTorrentTab.wxs: initial version of gui to control torrent interface 2008-04-15 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: started adding function to download torrent file from server 2008-04-15 Andrea Piras * : commit 0e29e8c35eaef0a20fe797cc937d6eae5768fb17 Author: Andrea Piras Date: Tue Apr 15 19:04:34 2008 +0200 2008-04-15 Andrea Piras * INSTALL, src/torrentwrapper.cpp: fixed compilation error 2008-04-15 Andrea Piras * : commit 15e56c82a79de0a6ce42b1915b5530dc852aeebb Merge: f2b3cb8 506daa0 Author: Andrea Piras Date: Tue Apr 15 18:14:57 2008 +0200 2008-04-15 Andrea Piras * : commit 9bfd427e8ef6027422e0430355fbf3b477ca4246 Author: Andrea Piras Date: Tue Apr 15 18:03:26 2008 +0200 2008-04-15 rene_milk * Doxyfile: forgot to put footer in doxyfile 2008-04-15 rene_milk * doc/html_footer, doc/html_header: trying diff html header/footer 2008-04-15 rene_milk * doc/html_header: forgot html header changed doc/.gitignore to change everything but this one 2008-04-15 rene_milk * Doxyfile, Doxyfile_local: split Doxyfile, some tweaks 2008-04-14 rene_milk * src/images/arm.xpm, src/images/core.xpm, src/images/host.xpm, src/images/host_spectator.xpm, src/images/player.xpm, src/images/rank0.xpm, src/images/rank1.xpm, src/images/rank2.xpm, src/images/rank3.xpm, src/images/rank4.xpm, src/images/rank5.xpm, src/images/spectator.xpm, src/images/spring.xpm, src/images/springlobby.xpm, src/images/star_bronze.xpm, src/images/star_gold.xpm, src/images/star_silver.xpm: partly applied patch from ticket 311 2008-04-14 rene_milk * src/settings.h, tools/update-rpm.sh: incremented cache version changed rpm update script to my slave situation 2008-04-14 rene_milk * : commit b5d758f7ece6cc34b78c9b7701e7ed33860bb0c2 Author: rene_milk Date: Mon Apr 14 19:37:24 2008 +0200 2008-04-14 rene_milk * Makefile.am, configure.ac: looks like fixed 2008-04-14 rene_milk * src/spring.cpp: fixes script error in sp causing restriction list to load wrong 2008-04-14 rene_milk * Doxyfile, Makefile.am: maybe it 2008-04-14 Dmytry Lavrov * : commit 1b1af8ce1c0b9c8953d32cf4361dd4a53bc7e984 Author: Dmytry Lavrov Date: Mon Apr 14 08:54:59 2008 +0300 2008-04-10 rene_milk * : Merge commit 'bd/master' 2008-04-10 Kaot * : Merge commit 'remotes/bd/master' into Aktuelles_SpringLobby Conflicts: po/sv.po src/battleroomtab.cpp src/battleroomtab.h 2008-04-04 Andrea Piras * : Merge commit 'koshi/master' 2008-04-02 Dmytry Lavrov * src/spring.cpp, src/spring.h, src/tdfcontainer.cpp, src/tdfcontainer.h, src/utils.h: Rewrote script generation to use TDFWriter class. 2008-04-01 Dmytry Lavrov * src/chatpanel.cpp: fixed compiler warning 2008-04-01 koshi * src/tasserver.cpp, src/tasserver.h: missing include was causing compile error on gcc4.3 opensuse11(alpha), adds #include 2008-04-01 koshi * src/tasserver.h: missing include was causing compile error on gcc4.3 opensuse11(alpha), adds #include 2008-03-31 Dmytry Lavrov * : commit 7515d86bb833e0e61e630d0e3f7b52865f708e2d Author: Andrea Piras Date: Mon Mar 31 00:31:22 2008 +0200 2008-03-31 Andrea Piras * src/spring.cpp: forgot a long <-> int conversion 2008-03-30 Andrea Piras * src/battleoptionstab.cpp, src/mmoptionmodel.cpp, src/mmoptionmodel.h, src/mmoptionswrapper.cpp, src/spring.cpp: changed long containers to int in mm options, used functions like i2s & f2s to avoid locale probs 2008-03-30 Andrea Piras * src/utils.cpp, src/utils.h: added utility functions for numbers to wxString conversions in utils 2008-03-30 Andrea Piras * src/battleoptionstab.cpp, src/mmoptionswrapper.cpp: added fixed allies to the options (new spring ver) 2008-03-30 Dmytry Lavrov * src/battleroommmoptionstab.cpp, src/mmoptionswrapper.cpp, src/spring.cpp: Fixed wront results produced by wxString::Format (32-bit variables read as 64-bit). Not tested. 2008-03-30 Dmytry Lavrov * : commit 2614396054137cb7abbfae09a9aabf0c6fbde1a9 Author: koshi Date: Sun Mar 30 13:17:08 2008 +0200 2008-03-30 Kaot * : 4 4 CMakeLists.txt 2202 2202 po/sv.po 2008-03-30 koshi * Makefile.am: fixes qutotools build 2008-03-29 koshi * Makefile.am, replaylist.h, replaylistctrl.h, src/replaylist.cpp, src/replaylist.h: file weirdness 2008-03-29 koshi * replaylist.h, src/chatpanel.cpp, src/replaylist.cpp, src/replaytab.cpp: reads rubbish from demo file 2008-03-29 Dmytry Lavrov * src/battle.cpp, src/battle.h, src/serverevents.cpp: Implemented bans and ip-bans, non-permanent (inside Battle class). IP bans are untested. 2008-03-29 koshi * src/ui.cpp: changed site links 2008-03-29 koshi * Makefile.am, po/springlobby.pot, po/sv.po: fixes makefile 2008-03-29 Andrea Piras * : Merge commit 'koshi/master' 2008-03-28 koshi * : Merge commit 'bd/master' Conflicts: springlobby.cbp 2008-03-26 koshi * src/battleroomtab.cpp, src/battleroomtab.h, src/mapctrl.cpp, src/mapctrl.h, src/ui.cpp, src/ui.h: fixes map stats not updating after clicking refresh map on mapctrl after downloading the map 2008-03-26 koshi * replaylist.h, src/replaylist.cpp, src/replaylistctrl.cpp, src/replaylistctrl.h, src/replaytab.cpp, src/replaytab.h, src/spring.cpp, src/spring.h: cleanup 2008-03-26 koshi * replaylist.h, src/replaylist.cpp, src/replaylistctrl.cpp, src/replaylistctrl.h, src/replaytab.cpp, src/replaytab.h, src/spring.cpp, src/spring.h, src/ui.cpp, src/ui.h: starting a replay works 2008-03-25 koshi * src/ui.cpp: replace dead uf links 2008-03-25 Dmytry Lavrov * src/chatpanel.cpp: sort of fixed weird crashbug when you're already logged on. However the bug needs to be investigated much more closely. When ChatPanel::SetChannel(0) gets called after disconnect, m_show_nick_list is true, but m_nicklist is NULL. Method seems to be called before execution of constructor, or during execution of constructor, in separate thread. 2008-03-25 Dmytry Lavrov * src/chatpanel.cpp: Autoscroll cleanup, unused variables and functions removed, logging removed. 2008-03-25 Dmytry Lavrov * src/channellist.cpp, src/chatpanel.cpp, src/tasserver.cpp, src/userlist.cpp: Fixed autoscroll, tested. Fixed some compiler warnings. Todo: major cleanup in autoscroll/ 2008-03-25 koshi * springlobby.cbp: fixed cbp 2008-03-24 koshi * src/chatpanel.cpp: fixes right-click join crash if mod nonexistant 2008-03-24 Dmytry Lavrov * src/battle.cpp: Fixed bug in autobalance. Added messaging about balance in battle room. 2008-03-24 Dmytry Lavrov * src/autobalancedialog.cpp, src/battle.h, src/settings.cpp, wxsmith/AutoBalanceDialog.wxs: changed order of balance methods, now Random , Divide ranks evenly 2008-03-24 Dmytry Lavrov * : commit 3c09f109adf68f8485f476265d01d6786b1ef7ae Author: Dmytry Lavrov Date: Mon Mar 24 12:05:46 2008 +0200 2008-03-24 Dmytry Lavrov * src/battle.cpp: Tiny fix for autobalance when theres 1 start box. 2008-03-24 Dmytry Lavrov * src/battle.cpp: Now autobalance works with nonsequential start recs. Will put that commit to autobalance branch too. 2008-03-24 Dmytry Lavrov * src/battle.cpp: Now autobalance works with nonsequential start recs. Will put that commit to autobalance branch too. 2008-03-24 Dmytry Lavrov * : Merged branch 'autobalance' into autoscroll. 2008-03-24 Andrea Piras * src/tasserver.cpp, src/tasserver.h: added handshake with TOKENIKE and TOKENIZED to enable support for tokenized transmission 2008-03-24 Andrea Piras * src/tasserver.cpp: added tokenizing on sending message 2008-03-24 Andrea Piras * src/tasserver.cpp: removed obsolete WX_STRING & STD_STRING conversions 2008-03-24 Andrea Piras * src/tasserver.h: more conflicts i forgot to merge >_> 2008-03-24 Andrea Piras * src/tasserver.cpp: forgot to commit a fix 2008-03-24 Andrea Piras * : commit eca4e1dbc89db4aa651df4bf34497339efd4ab07 Author: Andrea Piras Date: Sun Mar 23 23:28:19 2008 +0100 2008-03-23 Dmytry Lavrov * src/autobalancedialog.cpp, src/autobalancedialog.h, src/battle.cpp, src/settings.cpp, wxsmith/AutoBalanceDialog.wxs: Changes in user interface for balancing. Now has choice list Clans with values None,Fair,Always. Tested. Signed-off-by: Dmytry Lavrov 2008-03-23 unknown * src/chatpanel.cpp, src/settings.cpp, src/settings.h: added option to set max size in chat log, and initial work on disabling autoscroll 2008-03-23 Dmytry Lavrov * Makefile.am: Added new source files for autobalance to makefile. 2008-03-23 Dmytry Lavrov * src/battle.cpp: More autobalance fixes. Tested. Works correctly apart from minor problem when start boxes are not numbered sequentially. Signed-off-by: Dmytry Lavrov 2008-03-23 Tommy Carlsson * src/battleroomtab.cpp, src/tasserver.cpp: Took away an annoying misspelled tooltip and fixed a warning 2008-03-23 Dmytry Lavrov * src/autobalancedialog.cpp, src/autobalancedialog.h, src/battle.cpp, src/battle.h, src/battleroomtab.cpp, src/settings.cpp, src/settings.h, src/user.cpp, src/user.h, wxsmith/AutoBalanceDialog.wxs: Autobalance nearly done. 2008-03-23 unknown * springlobby.cbp, src/chatpanel.cpp, src/ui.cpp: fixed channel messages not being displayed properly 2008-03-23 Dmytry Lavrov * springlobby.cbp, src/autobalancedialog.cpp, src/autobalancedialog.h, src/battleroomtab.cpp, src/battleroomtab.h, src/settings.cpp, src/user.cpp, src/user.h, wxsmith/AutoBalanceDialog.wxs: Started implementing autobalance 2008-03-23 koshi * springlobby.cbp: adds files to cbp 2008-03-23 koshi * Makefile.am, replaylist.h, replaylistctrl.h, src/images/replay_icon.png.h, src/images/replay_icon_text.png.h, src/iunitsync.h, src/mainwindow.cpp, src/mainwindow.h, src/replayfilter.cpp, src/replayfilter.h, src/replaylist.cpp, src/replaylistctrl.cpp, src/replaylistctrl.h, src/replaytab.cpp, src/replaytab.h, src/uiutils.cpp, src/uiutils.h: replaytab is there (still empty tho) also added icon for replay in sidebar 2008-03-23 unknown * : Merge commit 'koshi/master' Conflicts: springlobby.cbp 2008-03-22 koshi * : commit 0ebd7aef50348f26d6f410be332bbf97dab261d7 Author: koshi Date: Sat Mar 22 22:50:00 2008 +0100 2008-03-22 koshi * : commit 72901c92c541232fe143bee07d2fdcf95c0eb117 Merge: d559a85 fae6a34 Author: koshi Date: Sat Mar 22 22:16:01 2008 +0100 2008-03-22 koshi * : commit b9de4ff86427d67f4de596c71e21d619544910e3 Author: koshi Date: Sat Mar 22 21:50:10 2008 +0100 2008-03-22 koshi * src/images/single_player_icon_text.png.h, src/uiutils.cpp: blending werks 2008-03-22 Dmytry Lavrov * : commit 8a38ccc9efbdfca046d2940433627279f5224b3e Author: Dmytry Lavrov Date: Sat Mar 22 21:30:12 2008 +0200 2008-03-22 koshi * src/uiutils.cpp: blending eq not right 2008-03-22 koshi * src/images/options_icon.png.h, src/images/options_icon_text.png.h: got the options text right 2008-03-22 unknown * src/tasserver.cpp: added support for /hook and /quit commands for aegis server 2008-03-22 unknown * src/battlelistctrl.cpp: fixed column size of battlelist on windows 2008-03-22 koshi * src/images/chat_icon_text.png.h, src/images/downloads_icon_text.png.h, src/images/join_icon_text.png.h, src/images/options_icon.png.h, src/images/options_icon_text.png.h, src/images/single_player_icon_text.png.h, src/mainwindow.cpp, src/mainwindow.h, src/uiutils.cpp, src/uiutils.h: all but one icon working 2008-03-21 koshi * src/images/chat_icon.png.h, src/mainwindow.cpp: no text icons ok 2008-03-21 koshi * src/images/chat_icon.png.h, src/images/downloads_icon.png.h, src/images/join_icon.png.h, src/images/options_icon.png.h, src/images/single_player_icon.png.h, tools/make_header_from_png.sh, tools/png2c.py, tools/xcf2pngh.sh: added images headers and scripts 2008-03-21 koshi * : Merge commit 'bd/master' Conflicts: springlobby.cbp 2008-03-21 unknown * : commit 0c11589b57b780aaa8fe63957a8b2e07843b20d8 Author: unknown Date: Fri Mar 21 17:00:38 2008 +0100 2008-03-21 unknown * springlobby.cbp: now win codeblocks project is more path tollerant using global variables 2008-03-21 koshi * po/springlobby.pot, po/sv.po, src/images/chat_icon.xpm, src/images/options_icon.xpm, src/mainwindow.cpp, src/mainwindow.h, src/springlobbyapp.cpp: png kinds working 2008-03-21 unknown * springlobby.cbp, src/mainjoinbattletab.cpp: fixed horrible syntax 2008-03-21 unknown * springlobby.cbp, src/battlelistctrl.cpp, src/battleroomtab.cpp, src/mainjoinbattletab.cpp: no more battle rendering glitches in windows (workaround by redraw) 2008-03-21 unknown * : commit 5ee462650d8836f75d2f603dc6a77d02e833ac58 Author: unknown Date: Fri Mar 21 01:05:54 2008 +0100 2008-03-21 koshi * : Merge commit 'bd/master' 2008-03-20 unknown * src/battlelisttab.cpp: changed modal of messagebox, and the message in case of hosting fail 2008-03-20 unknown * src/battlelisttab.cpp, src/hostbattledialog.cpp, src/hostbattledialog.h: now the test firewall button gets disabled when NAT traversal is on 2008-03-20 unknown * src/settings.cpp: now the app tries to use first global file, then user config file 2008-03-20 unknown * : commit 571e5be5a8f1f4b2a2c4dda15a769c4e9afe879c Author: unknown Date: Thu Mar 20 18:20:05 2008 +0100 2008-03-20 unknown * src/iconimagelist.cpp: fixed flag icons index 2008-03-20 unknown * src/battlelistctrl.cpp, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/chatpanel.cpp, src/nicklistctrl.cpp: fixed iconsimagelist call type 2008-03-20 unknown * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp: fixed typo in void icon name 2008-03-20 unknown * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/iconimagelist.cpp: removed useless nonIcon declaration 2008-03-20 koshi * src/battleroomlistctrl.cpp, src/iconimagelist.h: fixed the static stuff 2008-03-20 unknown * src/battlelistctrl.cpp, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/flagimages.cpp, src/flagimages.h, src/iconimagelist.cpp, src/iconimagelist.h, src/nicklistctrl.cpp: now all icons in inconimagelist gets their index value defined at runtime instead of defines at compile time 2008-03-20 unknown * : Merge commit 'koshi/master' Conflicts: src/socket.cpp src/socket.h 2008-03-20 unknown * src/battleroomlistctrl.cpp: fixed crash on join in windows 2008-03-20 koshi * springlobby.cbp: project file changed 2008-03-20 koshi * : commit e8f78bab69ec7bdbac308f8ccc897209b01057a1 Author: koshi Date: Mon Mar 17 21:05:30 2008 +0100 2008-03-17 Dmytry Lavrov * src/tasserver.cpp: now pinging all clients right before battle start. 2008-03-17 Dmytry Lavrov * src/tasserver.cpp: Misread tasclient sources. Now pinging all from same port. 2008-03-17 Dmytry Lavrov * src/battle.cpp, src/battlelisttab.cpp, src/hostbattledialog.cpp, src/serverevents.cpp, src/serverevents.h, src/settings.cpp, src/settings.h, src/tasserver.cpp, src/tasserver.h, src/user.cpp, src/user.h: Implemented nat holepunching hosting. Not much tested, but no crashbugs found yet, and hosting works if firewall is off (i dont have router). 2008-03-17 koshi * src/images/chat_icon.xpm, src/images/singleplayer_icon.xpm, src/mainwindow.cpp, src/mainwindow.h: fixed naming errors in xpm added dummy download page in mainwindow 2008-03-17 koshi * src/images/chat_icon.xpm, src/images/downloads_icon.xpm, src/images/join_icon.xpm, src/images/options_icon.xpm, src/images/singleplayer_icon.xpm: new sidebar icons 2008-03-16 Dmytry Lavrov * src/tasserver.cpp: Very minor changes. Updated comments about nat traversal. 2008-03-15 Dmytry Lavrov * src/tasserver.cpp, src/tasserver.h: Hole punching finally fixed. Tested. 2008-03-15 Dmytry Lavrov * src/tasserver.cpp, src/tasserver.h: Some fixes for nat traversal / hole punching. Incomplete. 2008-03-14 koshi * src/settings++/Defs.hpp, src/settings++/tab_abstract.cpp, src/settings++/tab_quality_video.h: halfway through with constant elimination 2008-03-14 koshi * src/settings++/Defs.hpp, src/settings++/tab_abstract.cpp, src/settings++/tab_ui.h: adds MiniMapFullProxy 2008-03-12 koshi * src/chatlog.cpp: fixes possible crash in chatlog destructor 2008-03-12 koshi * Makefile.am: added battlelistfiltervalues to makefile 2008-03-12 koshi * src/mainwindow.cpp: wx26 fixed (typo) 2008-03-12 koshi * : load/save RegEX for filters are still untested Merge commit 'bd/master' Conflicts: src/battlelistfilter.cpp 2008-03-12 koshi * src/battlelistfilter.cpp, src/settings.cpp: realized int values in param, pre removing string comparison 2008-03-11 koshi * src/battlelistfilter.cpp: filter modifier for rank should work 2008-03-11 koshi * src/battlelistfilter.cpp: saving is ok 2008-03-11 koshi * src/battlelistfilter.cpp: preps for regex 2008-03-11 Andrea Piras * : commit 98198e77ada0cd1e291911c0bd8d8cd5855a8da5 Author: Andrea Piras Date: Tue Mar 11 20:04:17 2008 +0100 2008-03-10 Andrea Piras * src/torrentwrapper.cpp: now it compiles again 2008-03-10 Andrea Piras * : commit 348d7647ff158ebc6e4287e77bde8180726f2116 Author: Andrea Piras Date: Mon Mar 10 22:31:08 2008 +0100 2008-03-10 koshi * src/battlelistfilter.cpp, src/battlelistfilter.h, src/battlelistfiltervalues.h, src/settings.cpp: on the way to 404 2008-03-10 Andrea Piras * src/battlelistfilter.cpp, src/battlelistfilter.h, src/battlelisttab.cpp, src/battlelisttab.h: removed LOT of includes in a header, now filters match against regexes too 2008-03-09 Andrea Piras * src/torrentwrapper.cpp: fixed some compiling errors 2008-03-09 koshi * : commit 3c6f3094a217b9af8978c933b8fcf5aac9b704e1 Author: koshi Date: Sun Mar 9 23:15:39 2008 +0100 2008-03-09 koshi * src/mainwindow.cpp, src/mainwindow.h: about box for wx 2.8 2008-03-09 Kaot * : Merge commit 'bd/master' into Aktuelles_SpringLobby 2008-03-09 koshi * : Merge commit 'bd/master' into battlefilter Conflicts: src/settings.cpp src/settings.h 2008-03-09 Andrea Piras * src/tasserver.cpp: fixed udpping timer 2008-03-09 Andrea Piras * src/spring.cpp: now SL writes game/ModHash in the script.txt to help with replays 2008-03-09 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: added some needed function to interface lobby with wrapper 2008-03-09 Andrea Piras * : commit 4cd59975b54147dfbec5744d3559ac1784c10edf Author: koshi Date: Sat Mar 8 22:44:50 2008 +0100 2008-03-08 koshi * src/battlelistfilter.cpp, src/battlelistfilter.h, src/settings.cpp, src/settings.h: save load functions in place 2008-03-08 Andrea Piras * src/settings.cpp, src/settings.h, src/ui.cpp: added option to disable spring version check compatibility 2008-03-08 Andrea Piras * src/tasserver.cpp: fixed udp ping timings 2008-03-08 Andrea Piras * src/tasserver.cpp: fixed udp pinging logging 2008-03-08 Andrea Piras * src/server.h, src/serverevents.cpp, src/serverevents.h, src/socket.cpp, src/socket.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp: brought back to main thread the udp ping to punch trough nat 2008-03-08 Andrea Piras * src/channel.cpp: fixed compilation for wxWidgets version which doesn't support advanced regex 2008-03-08 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: moved p2p infos containers to std::map, added extension support to libtorrent 2008-03-08 Andrea Piras * springlobby.cbp: forgot to commit a necessary change to compile 2008-03-07 Andrea Piras * src/torrentwrapper.cpp: fixed publishing address for torrents and check for being online before getting a file 2008-03-07 Andrea Piras * src/inetclass.h, src/server.h, src/socket.cpp, src/socket.h, src/tasserver.cpp, src/torrentwrapper.cpp, src/torrentwrapper.h: added net interface for the torrent wrapper to connect to p2p coordinator 2008-03-07 Andrea Piras * springlobby.cbp, src/torrentwrapper.cpp: it finally compiles!!!11111eleventyone 2008-03-07 Andrea Piras * src/torrentwrapper.cpp: added missing #includes 2008-03-07 Andrea Piras * : commit d620ae1a19989193c15cb1eca39aca3dca966807 Author: koshi Date: Sun Feb 17 23:42:06 2008 +0100 2008-03-05 Andrea Piras * src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: possibly fixed again restriction list not loaded properly 2008-03-05 Andrea Piras * src/settings.cpp: fixed conversion wxConfig to wxFileConfig 2008-03-05 Andrea Piras * src/settings.cpp, src/settings.h: changed settings storage format in windows from registry to ini file 2008-03-05 Andrea Piras * src/tasserver.cpp, src/ui.cpp: fixed compiling errors 2008-03-05 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: fixed many compiler errors 2008-03-04 Dmytry Lavrov * src/battlelist.cpp, src/channel.cpp, src/channel.h, src/chatpanel.cpp, src/server.cpp, src/serverevents.cpp, src/userlist.cpp, src/utils.cpp: Numerous fixes for std::logic_error related bugs, mostly in userlist but also a bit in battlelist. Frivolous: added regex based bans. 2008-03-01 Andrea Piras * src/tasserver.cpp, src/ui.cpp: implemented CHANGEPASSWORD command, added few command descriptors to the help 2008-03-02 Dmytry Lavrov * src/battle.h, src/settings.cpp, src/settings.h, src/socket.cpp, src/spring.cpp, src/ui.cpp, src/utils.cpp, src/utils.h: Fixes and magic for nat traversal. Changed port from 12345 (famous malware) to 16941 Minor fixes. Added option General/NoUDP , which allows to disable udp pinging. Removed logging from ping thread. ASSERT_LOGIC now makes crash report using Crash() function 2008-02-29 Kaot * : Merge commit 'bd/master' into Aktuelles_SpringLobby 2008-02-29 Andrea Piras * src/battlelist.cpp, src/battlelist.h, src/battlelisttab.cpp, src/server.cpp: Revert "maybe solves nonexisting battlöe probs" This reverts commit fb1c345a46df67727fb5cf9e4ad24d7d16b4073a. 2008-02-29 Andrea Piras * src/battleoptionstab.cpp, src/battleroommmoptionstab.cpp, src/ibattle.cpp, src/serverevents.cpp, src/singleplayerbattle.cpp, src/springunitsync.cpp: Revert "fixes 383 and unitlist caching" This reverts commit d3f8a8a872a766e9032e77d2310857000155c505. 2008-02-28 Andrea Piras * springlobby.cbp, src/torrentwrapper.cpp, src/torrentwrapper.h: fixed many compiler errors, lot still missing 2008-02-28 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: fixed variable names and torrent joining 2008-02-28 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: better handling 2008-02-27 Dmytry Lavrov * : commit c76ea08fe455866bbf4fa0a507be4364b69c0ab8 Merge: c7580c8 d789a6e Author: Andrea Piras Date: Tue Feb 26 18:28:10 2008 +0100 2008-02-26 koshi * src/settings++/custom_dialogs.cpp: fixes wx26 build 2008-02-26 koshi * src/settings++/presets.h: fixes small bug where dualscreen wouldn't be set correctly 2008-02-24 Andrea Piras * src/battle.h, src/server.h, src/serverevents.cpp, src/serverevents.h, src/socket.cpp, src/socket.h, src/spring.cpp, src/tasserver.cpp, src/tasserver.h, src/ui.cpp: initial version of fix for nat traversal, not fully working yet (expecially fixed source ports) 2008-02-24 Dmytry Lavrov * : commit 8d0756d6131695a5b56c393baaa6edac4c274418 Merge: cad2ac4 22450f4 Author: Kaot Date: Sat Feb 23 16:59:59 2008 +0100 2008-02-23 Andrea Piras * src/battleroommmoptionstab.cpp, src/settings++/custom_dialogs.cpp: fixed #include problems 2008-02-23 Andrea Piras * : commit 86a051b0e014610fc78153af0d959c9513afd0fa Merge: e585478 fa0a9bd Author: Andrea Piras Date: Sat Feb 23 14:30:57 2008 +0100 2008-02-23 Andrea Piras * src/settings++/custom_dialogs.cpp: some layout tweaks 2008-02-23 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: more progresses 2008-02-21 Andrea Piras * src/torrentwrapper.cpp, src/torrentwrapper.h: fixed some torrent handling 2008-02-20 koshi * src/battleoptionstab.cpp, src/battleroommmoptionstab.cpp, src/ibattle.cpp, src/serverevents.cpp, src/singleplayerbattle.cpp, src/springunitsync.cpp: fixes 383 and unitlist caching 2008-02-20 koshi * : commit 32ff7af5824fa264d6c59974eb85fc67a3a33edd Author: Andrea Piras Date: Wed Feb 20 18:43:09 2008 +0100 2008-02-20 Andrea Piras * src/springlobbyapp.cpp, src/springlobbyapp.h, src/utils.cpp, src/utils.h: improved logging switching 2008-02-20 Andrea Piras * : commit 6169d775073b54ee1b2f95200a405816fd895b80 Author: koshi Date: Wed Feb 20 17:11:43 2008 +0100 2008-02-20 Andrea Piras * src/ui.cpp: now warnings about web browser are non-modal as well 2008-02-20 Andrea Piras * src/mainwindow.cpp: removed test message 2008-02-20 Andrea Piras * src/settings++/custom_dialogs.cpp: fixed compiling problems with autotools 2008-02-20 Andrea Piras * src/battle.cpp, src/battle.h, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/ibattle.h, src/mapctrl.cpp, src/server.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/singleplayertab.cpp, src/spring.cpp, src/tasserver.cpp, src/tasserver.h, src/uiutils.cpp, src/uiutils.h, src/user.cpp, src/user.h: removed some includes from headers, now user data functions uses wxColour instead of a bunch of ints 2008-02-20 Andrea Piras * src/battleroomlistctrl.cpp: fixed not being able to control bots in the battle room 2008-02-20 koshi * src/mainwindow.cpp, src/settings++/custom_dialogs.cpp: size of serverbox ok 2008-02-20 koshi * src/mainwindow.cpp, src/mmoptionswrapper.cpp, src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h, src/settings++/helpmenufunctions.cpp, src/ui.cpp: almost there, only size is still wrong 2008-02-19 koshi * src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h, src/settings++/frame.cpp: buttons working 2008-02-19 koshi * src/mainwindow.cpp, src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h: almost working 2008-02-19 koshi * : commit b59da959c28666ded8f186e07d8a62da4dbdd314 Author: koshi Date: Tue Feb 19 19:48:33 2008 +0100 2008-02-19 koshi * src/mainwindow.cpp: added menuentry for springsettings again 2008-02-19 koshi * : Merge commit 'bd/master' 2008-02-19 koshi * src/settings++/custom_dialogs.cpp: icons not right yet 2008-02-19 Andrea Piras * src/mainwindow.cpp: fixed springsettings not being in the menu anymore 2008-02-19 koshi * : commit aff4ad1d965de9b6028def45e60da9cc26bbdd63 Author: koshi Date: Tue Feb 19 16:45:50 2008 +0100 2008-02-19 Andrea Piras * springlobby.cbp, src/torrentwrapper.cpp, src/torrentwrapper.h: horrible, incomplete, not working and not compiling initial verion of torrent support 2008-02-19 koshi * src/addbotdialog.cpp, src/battlelistctrl.cpp, src/battlelistfilter.cpp, src/battleoptionstab.cpp, src/battleroomtab.cpp, src/chatlog.cpp, src/chatpanel.cpp, src/singleplayertab.cpp, src/tasserver.cpp: some string changes 2008-02-18 koshi * src/battlelisttab.cpp: fixed typo 2008-02-18 Andrea Piras * : commit fb1c345a46df67727fb5cf9e4ad24d7d16b4073a Author: koshi Date: Sun Feb 17 23:42:06 2008 +0100 2008-02-17 Andrea Piras * po/POTFILES.in, tools/update-potfileslist.sh: updated POTFILES.in, made updater script to recurse subdirectories 2008-02-17 Andrea Piras * : commit 4462beb80b9067bc91fc5b81458f0b360da772aa Author: Andrea Piras Date: Sun Feb 17 23:13:11 2008 +0100 2008-02-17 Andrea Piras * : commit aa75cabc7bc9693538316a2483453e1a35acb8ba Author: Dmytry Lavrov Date: Fri Feb 15 22:44:51 2008 +0200 2008-02-15 Dmytry Lavrov * src/channel.cpp, src/channel.h: Implemented /ban and /unban channel commands 2008-02-14 Kaot * CMakeLists.txt: - Modification in order to get wxWidgets findable under Windows 2008-02-12 Kaot * : Merge commit 'bd/master' into Aktuelles_SpringLobby 2008-02-11 koshi * src/springlobbyapp.cpp, src/springunitsync.cpp, src/ui.cpp, src/utils.cpp: fixes ticket 415 2008-02-11 koshi * : Merge commit 'bd/master' 2008-02-11 Andrea Piras * src/socket.cpp: fixed registering timeout problem, made socket operations much more responsive 2008-02-11 Leo Moisio * : Merge commit 'bd/master' 2008-02-10 koshi * src/ui.cpp: fixed compile error <_< 2008-02-10 koshi * : Merge commit 'bd/master' Conflicts: src/ui.cpp 2008-02-10 Andrea Piras * src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: fixed pointer hell and verious memleaks in mmoptionswrapper class 2008-02-10 Andrea Piras * src/connectwindow.cpp, src/server.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: improved registration message verbosity for the user, removed a very potential memleak/segfault 2008-02-10 Andrea Piras * : commit 252582e842363f509a42ed555b9fe559580d1112 Author: Tommy Carlsson Date: Sun Feb 10 03:11:44 2008 +0100 2008-02-10 Tommy Carlsson * : Merge commit 'koshi/master' into l18n * commit 'koshi/master': (31 commits) fixes wx26 build fixes 410 and hopefully buildbot buld fixes 387 fixes ticket 374 prep for intl fixed enum warnigs, removed uneccessary define closes ticket 358 kill usync thread fixed crash when trying to login again after the server denied first login attempt map/mod options loading failed now is correctly reckognized fixed silly typo that made unitsync to crash, now everything fulyl works improved mod loadion from unitsync removed useless commeted code in mod/map SP loading add unitsync assertion on mod options load :P fixed translation issues added SERVERMSGBOX command support don't lose commits in the ebuilds builder don't add origin twice on ebuild builder fetch/merge instead of pull for ebuilds builder get those tags onto the ebuild builder for real ... 2008-02-10 koshi * src/settings++/helpmenufunctions.cpp, src/settings++/se_utils.cpp: fixes wx26 build 2008-02-10 koshi * autogen.sh, src/addbotdialog.cpp: fixes 410 and hopefully buildbot buld 2008-02-10 koshi * : commit 4888dcaf69937124abea3ad4c4e33b0b8ad3a697 Author: koshi Date: Sun Feb 10 00:39:50 2008 +0100 2008-02-10 koshi * src/settings++/frame.cpp, src/settings++/tab_abstract.cpp, src/settings++/tab_ui.cpp: fixes ticket 374 2008-02-09 koshi * src/settings++/Defs.hpp, src/settings++/frame.cpp, src/settings++/helpmenufunctions.cpp, src/settings++/panel_pathoption.cpp, src/settings++/presets.h, src/settings++/se_utils.cpp, src/settings++/tab_abstract.cpp, src/settings++/tab_audio.cpp, src/settings++/tab_debug.cpp, src/settings++/tab_quality_video.cpp, src/settings++/tab_render_detail.cpp, src/settings++/tab_simple.cpp, src/settings++/tab_ui.cpp: prep for intl 2008-02-09 koshi * src/battleroommmoptionstab.cpp, src/mmoptionswrapper.cpp, src/settings++/se_utils.h: fixed enum warnigs, removed uneccessary define 2008-02-09 Andrea Piras * : commit 0aa10b43e0dd8a1c906fec78ef10c6cd9633280e Author: unknown Date: Sat Feb 9 22:41:20 2008 +0100 2008-02-09 Tommy Carlsson * INSTALL, po/LINGUAS, po/POTFILES, po/springlobby.pot, po/sv.po, src/springlobbyapp.cpp, src/springlobbyapp.h: Added Swedish language 2008-02-09 unknown * src/ui.cpp: kill usync thread 2008-02-09 Andrea Piras * src/battleroomtab.cpp, src/ui.cpp: fixed the sources to not use gettext reserved strings 2008-02-09 Andrea Piras * Makefile.am: now the buildsystem correctly finds the OS locale dir 2008-02-09 Andrea Piras * Makefile.am, po/Makevars: more progresses towards generation of .pot files from the buildsystem 2008-02-09 Kaot * CMakeLists.txt, src/battleroomtab.cpp, src/battleroomtab.h: - Added Gettext to CMakeLists.txt Merge commit 'bd/auto_tools_host' into BrainDamage_Autobalance Conflicts: src/battleroomtab.cpp 2008-02-08 Andrea Piras * src/tasserver.cpp: fixed crash when trying to login again after the server denied first login attempt 2008-02-08 Andrea Piras * src/springunitsync.cpp: map/mod options loading failed now is correctly reckognized 2008-02-08 Andrea Piras * : commit 12ff6583d795a866c9a7ff8742d6ef5b8d70c4a1 Author: Andrea Piras Date: Fri Feb 8 22:43:42 2008 +0100 2008-02-08 Andrea Piras * src/springunitsync.cpp, src/springunitsynclib.cpp: improved mod loadion from unitsync 2008-02-08 Andrea Piras * src/singleplayerbattle.cpp: removed useless commeted code in mod/map SP loading 2008-02-08 Andrea Piras * src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/iunitsync.h, src/mainsingleplayertab.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/singleplayerbattle.cpp, src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.cpp, src/springunitsynclib.h: add unitsync assertion on mod options load :P refactored map/mod options loading in unitsync changed functions to return values to avoid pointer hell in options wrapper now map/mod options work in singleplayer if the asser is fixed 2008-02-08 Andrea Piras * src/addbotdialog.cpp: fixed translation issues 2008-02-08 Andrea Piras * src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp: added SERVERMSGBOX command support 2008-02-07 Andrea Piras * Makefile.am, po/POTFILES.in: now it compiles but doesn't generate po files 2008-02-07 Andrea Piras * ABOUT-NLS, ChangeLog, Makefile.am, configure.ac, m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/intdiv0.m4, m4/intmax.m4, m4/inttypes-pri.m4, m4/inttypes.m4, m4/inttypes_h.m4, m4/isc-posix.m4, m4/lcmessage.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/longdouble.m4, m4/longlong.m4, m4/nls.m4, m4/po.m4, m4/printf-posix.m4, m4/progtest.m4, m4/signed.m4, m4/size_max.m4, m4/stdint_h.m4, m4/uintmax_t.m4, m4/ulonglong.m4, m4/wchar_t.m4, m4/wint_t.m4, m4/xsize.m4, po/ChangeLog, po/Makefile.in.in, po/Makevars.template, po/Rules-quot, po/boldquot.sed, po/en@boldquot.header, po/en@quot.header, po/insert-header.sin, po/quot.sed, po/remove-potcdate.sin: tried to add translation support to the autotools buildsystem, result: phail 2008-02-07 Andrea Piras * autogen.sh: made autogen exectuable again 2008-02-07 added by portage for buildbot * gentoo/overlay/games-util/springlobby/Manifest, gentoo/overlay/games-util/springlobby/files/digest-springlobby-0.0. 1.10125, gentoo/overlay/games-util/springlobby/springlobby-0.0.1.10125.ebuil d: automatic update of springlobby ebuild for automated tarball release 2008-02-07 added by portage for buildbot * : Merge commit 'origin/master' 2008-02-07 added by portage for buildbot * gentoo/overlay/games-util/springlobby/Manifest, gentoo/overlay/games-util/springlobby/files/digest-springlobby-0.0. 1.10123, gentoo/overlay/games-util/springlobby/springlobby-0.0.1.10123.ebuil d: automatic update of springlobby ebuild for automated tarball release 2008-02-07 Leo Moisio * tools/update-ebuilds-slave.sh: don't add origin twice on ebuild builder 2008-02-07 Leo Moisio * tools/update-ebuilds-slave.sh: fetch/merge instead of pull for ebuilds builder 2008-02-07 Leo Moisio * tools/update-ebuilds-slave.sh: get those tags onto the ebuild builder for real 2008-02-07 Leo Moisio * tools/update-ebuilds-slave.sh: try to get the tags to ebuild builder too 2008-02-07 Leo Moisio * buildbot/master.cfg: buildbot push the changes too instead of just the tags to it's own public repo 2008-02-07 Leo Moisio * buildbot/master.cfg: buildbot push changes to it's public repo too, not just the tags 2008-02-07 Leo Moisio * buildbot/master.cfg, tools/update-ebuilds-slave.sh: ebuilds update automation almost done 2008-02-06 Andrea Piras * src/tasserver.cpp: fixed a bit code when registering 2008-02-07 Leo Moisio * buildbot/master.cfg: added error323 buildslave 2008-02-07 Leo Moisio * buildbot/master.cfg: added buildslave for gentoo ebuilds 2008-02-06 Leo Moisio * tools/update-rpm.sh: don't fail if there's no previous tarball in the opensuse build service 2008-02-06 Leo Moisio * buildbot/master.cfg, tools/update-rpm.sh: fix rpm update script bootstrap 2008-02-06 Leo Moisio * buildbot/master.cfg: buildbot should now automatically update rpm 2008-02-06 Leo Moisio * tools/update-rpm.sh: update rpm script can initialize itself 2008-02-05 Andrea Piras * src/chatpanel.cpp: added join/part messages for battles 2008-02-05 Andrea Piras * : commit 9f8a9fa34a42ccdc8a16df6df3853666bbc33e56 Author: Andrea Piras Date: Tue Feb 5 21:43:21 2008 +0100 2008-02-05 Andrea Piras * src/battleroomtab.cpp, src/iconimagelist.cpp, src/iconimagelist.h: now your own player colour is correctly displayed in the battle tab (not yet the list) 2008-02-05 Andrea Piras * : commit 20bbc339ede833a043f6bd811600e64c763a7e62 Author: koshi Date: Tue Feb 5 12:53:48 2008 +0100 2008-02-05 koshi * autogen.sh: changed autogen.sh so it'll execute on mac 2008-02-04 koshi * src/chatoptionstab.cpp: fixes ticket 401 2008-02-04 koshi * : Merge commit 'bd/master' 2008-02-04 Andrea Piras * src/battlemaptab.cpp, src/socket.cpp, src/tasserver.cpp: now map change gets broadcasted correctly 2008-02-04 Andrea Piras * src/spring.cpp: country codes in spript.txr are lowercase now 2008-02-04 Andrea Piras * src/spring.cpp: fixed missing \n in script generation 2008-02-04 Andrea Piras * src/socket.cpp: now ping gets sent immediactly when enabled 2008-02-04 René Milk * src/settings++/se_utils.cpp, src/settings++/se_utils.h: removed unneccessary function 2008-02-04 Leo Moisio * gentoo/overlay/games-util/springlobby/Manifest, gentoo/overlay/games-util/springlobby/files/digest-springlobby-0.0. 1.10112, gentoo/overlay/games-util/springlobby/springlobby-0.0.1.10112.ebuil d: automatic update of springlobby ebuild for automated tarball release 2008-02-04 Andrea Piras * src/socket.cpp: fixed PING interval becoming too short after leaving NAT battle 2008-02-04 Andrea Piras * src/tasserver.cpp: fixed starting trigger for udp pings 2008-02-03 Andrea Piras * src/chatoptionstab.cpp, src/chatoptionstab.h, src/settings.cpp, src/springoptionstab.cpp, src/springoptionstab.h: moved chat logging options from spring options tab to chat options tab 2008-02-03 Andrea Piras * src/tasserver.cpp: implemented BROADCAST message 2008-02-03 Andrea Piras * src/socket.cpp: fixed wx2.6 missing function 2008-02-03 Kaot * CMakeLists.txt: - Added qa Flag for Use of wxDebug* 2008-02-03 Andrea Piras * : commit 3cd80cdc916ebbd12a10869eee89dc5ed7253694 Author: René Milk Date: Sun Feb 3 12:52:49 2008 +0100 2008-02-03 Andrea Piras * src/socket.cpp: slightly improved speed when checking against multiple locales in incoming socket stream 2008-02-03 Andrea Piras * src/mainwindow.cpp: fixed obsolete WX_STRING conversions 2008-02-03 Andrea Piras * src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: removed rendundant pointer check 2008-02-03 Andrea Piras * : commit b6e0fddccb41db7cc69c8e9d3a674d2ad9322914 Author: Andrea Piras Date: Sun Feb 3 02:26:23 2008 +0100 2008-02-03 Andrea Piras * CMakeLists.txt, Makefile.am: fixed file paths in buildsystems 2008-02-03 Andrea Piras * src/mainwindow.cpp: fixed unicode problems 2008-02-03 Andrea Piras * src/mainwindow.cpp: moar fixes for wxchar! 2008-02-03 Andrea Piras * src/mainwindow.cpp: fixed parenthesis mistake \o/ 2008-02-03 Andrea Piras * src/mainwindow.cpp: fixed wx2.6 problems 2008-02-03 Andrea Piras * : commit a88b5089758fb3139c069a21842fd2ca3cac96ff Author: Andrea Piras Date: Sun Feb 3 01:59:35 2008 +0100 2008-02-03 Andrea Piras * CMakeLists.txt, Makefile.am, springlobby.cbp: removed usless lines in codeblocks project, added necessary files to makefile.am and cmakefile 2008-02-03 Andrea Piras * src/iconimagelist.cpp: fixed flag indexes 2008-02-03 Tommy Carlsson * src/socket.cpp, src/socket.h: Fixed some problems with string locale conversions 2008-02-03 Andrea Piras * : commit 371342025e7cbd03f413a68c24c23f5df0c63ac0 Merge: 7aa0e5a 4646ba3 Author: Andrea Piras Date: Sun Feb 3 00:03:15 2008 +0100 2008-02-03 Andrea Piras * : commit ddada8e861d0826c1fe438e87dadab78e40827df Author: Jon Morton Date: Sat Feb 2 13:35:21 2008 -0600 2008-02-02 Jon Morton * springlobby.cbp, src/chatpanel.cpp, src/mainwindow.cpp, src/mainwindow.h, src/updater/versionchecker.cpp, src/updater/versionchecker.h, src/utils.cpp: Added check for latest version tool, added seconds to timestamps 2008-02-02 Andrea Piras * src/spring.cpp: removed obsolete std::string function in script generation 2008-02-02 Andrea Piras * src/singleplayerbattle.cpp: fixed start position type in SP that was set as default to fixed instead of pick 2008-02-02 Andrea Piras * src/ibattle.cpp, src/spring.cpp, src/springprocess.cpp, src/springunitsync.cpp, src/springunitsynclib.cpp: removed obsolete STD_STRING calls 2008-02-02 Andrea Piras * src/addbotdialog.cpp, src/battlelistctrl.cpp, src/battlelistfilter.cpp, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/chatpanel.cpp, src/connectwindow.cpp, src/crashreport.cpp, src/hostbattledialog.cpp, src/mainchattab.cpp, src/nicklistctrl.cpp, src/settings.cpp, src/singleplayerbattle.cpp, src/singleplayertab.cpp, src/spring.cpp, src/springoptionstab.cpp, src/springunitsync.cpp, src/ui.cpp: removed obsolete (and silly) wxString -> wxString conversions 2008-02-02 Andrea Piras * SpringLobby.fbp, src/battlelisttab.cpp, src/hostbattledialog.cpp, src/hostbattledialog.h, src/settings.cpp, src/settings.h: now testing hosting port is optional in the host dialog (on by default) 2008-02-01 Jon Morton * : commit 1b2115c33abf07232bd9ce97de22d6a905e60074 Author: Jon Morton Date: Fri Feb 1 18:51:48 2008 -0600 2008-02-02 Leo Moisio * buildbot/master.cfg: fix critical typo in buildbot 2008-02-02 Leo Moisio * buildbot/master.cfg: fix quotation of shell command for version number publish 2008-02-01 Andrea Piras * CMakeLists.txt: fixed cmake file 2008-02-01 Leo Moisio * buildbot/master.cfg: fix critical typo in buildbot 2008-02-01 Leo Moisio * : Merge commit 'bd/master' 2008-02-01 Andrea Piras * src/socket.cpp: applied semi's fix to use wxChar in the incoming buffer in the socket 2008-02-01 Andrea Piras * src/socket.cpp: re-added forced conversion to utf-8 for incoming strings (many ppl were usable to decode incoming strings without it) 2008-02-01 Andrea Piras * src/socket.cpp: Revert "attempt to make automatic decoding conversion for incoming strings to work" This reverts commit 6c744882042e699b30efc749bbfb4dde3e19e18c. 2008-02-01 Andrea Piras * THANKS: added flag source in THANKS file 2008-01-31 Andrea Piras * src/socket.cpp: attempt to make automatic decoding conversion for incoming strings to work 2008-01-31 Andrea Piras * src/tasserver.cpp: removed useless extra logging 2008-01-31 Tommy Carlsson * src/socket.cpp, src/tasserver.cpp: Fixed login 2008-01-31 Andrea Piras * src/tasserver.cpp: simplified decoding incoming buffer 2008-01-31 René Milk * src/chatpanel.cpp: fixes ticket 389 2008-01-31 René Milk * : Merge commit 'semi/master' 2008-01-31 Andrea Piras * src/tasserver.cpp: fixed commands not getting params tokenized correctly 2008-01-31 Andrea Piras * src/addbotdialog.cpp, src/battle.cpp, src/battle.h, src/battlelistfilter.cpp, src/battlelisttab.cpp, src/battleoptionstab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/channel.cpp, src/channel.h, src/channellist.cpp, src/channellist.h, src/chatpanel.cpp, src/connectwindow.cpp, src/flagimages.cpp, src/flagimages.h, src/hostbattledialog.cpp, src/ibattle.cpp, src/ibattle.h, src/iconimagelist.cpp, src/iconimagelist.h, src/iunitsync.h, src/mainchattab.cpp, src/mainwindow.cpp, src/mapctrl.cpp, src/server.cpp, src/server.h, src/serverevents.cpp, src/serverevents.h, src/settings.cpp, src/settings.h, src/singleplayerbattle.cpp, src/socket.cpp, src/socket.h, src/spring.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.cpp, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h, src/user.cpp, src/user.h, src/userlist.cpp, src/userlist.h, src/utils.cpp, src/utils.h: first (compiling) version with stdd::strinng replaced almosst everywhere by wxString 2008-01-30 Andrea Piras * src/springlobbyapp.cpp: fixed error message when the creash report is not available 2008-01-30 Andrea Piras * src/battlelisttab.cpp, src/socket.cpp: now SL sucessfully test for open hosting port before creating a new battle 2008-01-30 Andrea Piras * src/socket.cpp: now SL should connect correctly to the http server, but still always returns the test as passed 2008-01-30 Andrea Piras * src/socket.cpp: fixed check that was reporting successful connect when it wasn't 2008-01-30 Andrea Piras * src/battle.h, src/battlelisttab.cpp, src/server.h, src/socket.cpp, src/socket.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: not yet working attempt to make SL to test port forwarding whne hosting 2008-01-30 Andrea Piras * src/battle.h, src/battlelisttab.cpp: removed spring engine options hardcoded in battle options 2008-01-30 Andrea Piras * : commit dbd44f3fbd2de004812316bc202db20031918de3 Author: Leo Moisio Date: Wed Jan 30 00:55:12 2008 +0200 2008-01-29 Leo Moisio * : Merge commit 'bd/master' 2008-01-29 Andrea Piras * src/utils.cpp: re-enabled full app logging for the moment 2008-01-29 Tommy Carlsson * src/socket.cpp, src/tasserver.cpp: Fixed bug in disconnect 2008-01-29 Andrea Piras * src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp: possibly fixed windows rendering bugs 2008-01-29 Andrea Piras * src/battleroomlistctrl.cpp, src/iconimagelist.cpp, src/iconimagelist.h: moved player icon creating from hardcoded array to dynamic vector 2008-01-29 Tommy Carlsson * src/tasserver.cpp: Pings are sent less frequently 2008-01-29 Tommy Carlsson * src/socket.cpp, src/socket.h, src/tasserver.cpp: UDP ping added to ping thread 2008-01-28 Leo Moisio * tools/buildbot-create-build-dirs.sh: fixed a comment in a script 2008-01-28 Leo Moisio * tools/update-buildbot.sh: relative address of buildbot home 2008-01-28 Leo Moisio * buildbot/master.cfg, tools/buildbot-create-build-dirs.sh, tools/buildbot-regen-makefiles.sh, tools/create-build-dirs: launch the makefile regen from existing script 2008-01-28 Andrea Piras * : commit e870d48e7ddf2d41d89fe49a6cb2044283ae2c82 Merge: 93c4b90 0dc20c5 Author: Andrea Piras Date: Mon Jan 28 22:30:08 2008 +0100 2008-01-28 René Milk * src/crashreport.cpp, src/crashreport.h, src/settings++/Main.cpp, src/springlobbyapp.cpp, src/utils.cpp: fixes wx 28 build 2008-01-28 René Milk * src/crashreport.cpp, src/crashreport.h, src/mmoptionswrapper.cpp, src/settings++/Main.cpp, src/springlobbyapp.cpp, src/utils.cpp: fixes wx 26 build 2008-01-28 René Milk * src/crashreport.cpp, src/crashreport.h, src/springlobbyapp.cpp: maybe working 2008-01-28 Tommy Carlsson * src/socket.cpp, src/socket.h, src/tasserver.cpp: Put ping thread in socket. 2008-01-28 Andrea Piras * : commit 5a85137ad84c626a15f1bca34f6da42bf4298154 Merge: c8a9403 a8cd14d Author: René Milk Date: Mon Jan 28 19:02:51 2008 +0100 2008-01-28 Andrea Piras * : commit a8cd14d5057df10b99617eac09e1879e423da384 Author: Andrea Piras Date: Mon Jan 28 19:00:41 2008 +0100 2008-01-28 Andrea Piras * springlobby.cbp: fixed codeblocks project, removed useless #define and removed obsolete include dirs in win 2008-01-28 René Milk * Makefile.am: found stray c in makefile.am 2008-01-28 Andrea Piras * : commit 49a9910a47757bc5258cdd67b0b8dd9fffa1c511 Author: Andrea Piras Date: Mon Jan 28 18:43:12 2008 +0100 2008-01-28 Andrea Piras * src/spring.cpp, src/tasserver.cpp: fixed script generation and option sending 2008-01-28 Andrea Piras * src/battleroomtab.cpp: changed how std::map indexes values in battle options summary 2008-01-28 Andrea Piras * src/serverevents.cpp: removed obsolete todo 2008-01-28 Andrea Piras * src/tasserver.cpp: a bit less fount prone if check when sending tags 2008-01-28 Andrea Piras * src/mainjoinbattletab.cpp: now start position type gets correctly propagated in the gui 2008-01-28 Andrea Piras * src/tasserver.cpp: fixed sending options as a single command 2008-01-28 Andrea Piras * : commit 66b128f1044fa8eb3c022d33f0157c094ebb1498 Author: Andrea Piras Date: Mon Jan 28 14:38:39 2008 +0100 2008-01-28 Andrea Piras * src/mainwindow.cpp, src/springlobbyapp.cpp: fixed dialogs grammar 2008-01-28 Andrea Piras * src/tasserver.cpp: improved search time in the alias table 2008-01-28 Andrea Piras * springlobby.cbp: forgot to fix the command line flag in the c::b project 2008-01-28 Andrea Piras * src/server.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp: now lobby accepts commands in both old & aliased form, added /sendcmdlist to list command aliases in #main channel 2008-01-28 Andrea Piras * src/tasserver.cpp: fixed alias table for duplicates 2008-01-28 Andrea Piras * src/tasserver.cpp, src/tasserver.h: added string alias table for incoming tasserver commands 2008-01-28 Andrea Piras * springlobby.cbp, src/springlobbyapp.cpp: improved console launching a bit 2008-01-27 Jonanin * src/ui.cpp: Removed unnecessary m_main_win checking Less stupidness 2008-01-27 Jonanin * src/ui.cpp: Added checking for m_main_win == 0 in events Prevents crashing when receiving commands after m_main_win is set to 0. 2008-01-27 Andrea Piras * src/springlobbyapp.cpp: now command line switches doesn't stops the app, gui console doesn't work yet 2008-01-27 Andrea Piras * src/crashreport.cpp, src/springlobbyapp.cpp, src/springlobbyapp.h, src/utils.cpp, src/utils.h: not working attempt to add command line options to control logging to SL 2008-01-27 Andrea Piras * src/utils.cpp: re-enabled accidentally commited code 2008-01-27 Andrea Piras * springlobby.cbp: disabled debug report uploading in codeblocks builds 2008-01-27 Andrea Piras * src/utils.cpp: improved logging a bit, disabled console verbose logging if the debug report is available 2008-01-27 Andrea Piras * : commit 188706b78cf2b52c9138c2bf2bacb640bb016ded Author: Andrea Piras Date: Sun Jan 27 13:53:00 2008 +0100 2008-01-27 Andrea Piras * src/crashreport.cpp: fixed crash report url 2008-01-26 Leo Moisio * tools/update-ebuilds.sh: stay on master when updating ebuilds 2008-01-26 Andrea Piras * : commit 90a0ef85365ae3f4289761ce981412697808643d Author: Andrea Piras Date: Sat Jan 26 16:45:59 2008 +0100 2008-01-26 René Milk * src/serverevents.cpp, src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h, src/ui.cpp: another try & fail at non-blocking msgbox 2008-01-26 Leo Moisio * : Merge commit 'koshi/master' 2008-01-26 René Milk * src/battleoptionstab.cpp, src/mainjoinbattletab.cpp, src/ui.cpp: removed msgbox on battle_left again 2008-01-26 René Milk * : Merge commit 'semi/master' 2008-01-26 Leo Moisio * tools/developer-merge.sh: fixed a typo in a comment 2008-01-26 Leo Moisio * buildbot/master.cfg: commented buildbot patch 2008-01-26 Leo Moisio * .gitignore: can't ignore doc dir because it's in version control 2008-01-26 Leo Moisio * tools/update-ebuilds.sh: when updating ebuilds, also publish them to overlay 2008-01-26 Andrea Piras * src/battle.h, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroomtab.cpp, src/ibattle.cpp, src/ibattle.h, src/mapctrl.cpp, src/serverevents.cpp, src/singleplayerbattle.h, src/spring.cpp, src/tasserver.cpp: not-yet working attempt to move engine options to the new map/mod containers 2008-01-25 Andrea Piras * src/mmoptionswrapper.h: fixed copy-paste error 2008-01-25 René Milk * src/settings++/presets.h: forgot to disable aa too 2008-01-25 René Milk * src/settings++/presets.h: lowered aa settings 2008-01-25 Leo Moisio * gentoo/overlay/games-util/springlobby/Manifest, gentoo/overlay/games-util/springlobby/files/digest-springlobby-0.0. 1.1006, gentoo/overlay/games-util/springlobby/springlobby-0.0.1.1006.ebuild: ebuild automatic version bump 2008-01-25 Leo Moisio * tools/damage-my-brain.sh, tools/developer-merge.sh: renamed the weird script 2008-01-25 Leo Moisio * tools/damage-my-brain.sh, tools/update-ebuilds.sh, tools/update-rpm.sh: improved release scripts 2008-01-25 Andrea Piras * src/chatoptionstab.cpp: fixed chat color options panel having black background in windows 2008-01-25 Leo Moisio * : Merge commit 'bd/master' 2008-01-25 Andrea Piras * src/springlobbyapp.cpp: changed wxLogMessage to wxLogWarning when erasing cache 2008-01-25 Leo Moisio * gentoo/overlay/games-util/springlobby/springlobby-template: upstream has desktop entry, so ebuild does not have to generate one 2008-01-25 Andrea Piras * : commit ddf144a4491591a7559e06c5924fdb4af49089dd Author: Leo Moisio Date: Fri Jan 25 18:49:03 2008 +0200 2008-01-25 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/springunitsync.cpp: fixed unit names not being saved correctly, added cache versioning (deleting cache if is too old) 2008-01-25 Andrea Piras * src/battleoptionstab.cpp, src/battleroomtab.cpp, src/ibattle.cpp, src/ibattle.h, src/spring.cpp, src/tasserver.cpp: simplified unit restrictions code a LOT, improved performance 2008-01-25 René Milk * src/battleroomlistctrl.cpp, src/tasserver.cpp: fixes 375 2008-01-25 René Milk * src/images/flags/BH.xpm: applied patch from ticket 369 2008-01-25 René Milk * src/singleplayerbattle.cpp: fixes 376 2008-01-25 Andrea Piras * src/mainjoinbattletab.cpp: now unit restrictions are updated in the gui for clients 2008-01-25 Andrea Piras * src/mainjoinbattletab.h, src/tasserver.cpp, src/ui.cpp: setting restrictions from host now works 2008-01-25 René Milk * : Merge commit 'bd/master' 2008-01-25 Andrea Piras * src/battleoptionstab.cpp: the allow/restrict buttons aren't available when not being host 2008-01-25 Andrea Piras * src/battleroommmoptionstab.cpp, src/tasserver.cpp: fixed warnings 2008-01-25 Andrea Piras * src/utils.h: fixed double definition of HAVE_WX28 and HAVE_WX26 2008-01-25 René Milk * : Merge commit 'semi/master' 2008-01-24 Leo Moisio * tools/update-rpm.sh: fixed sed 2008-01-24 Leo Moisio * tools/update-rpm.sh: script for upgrading rpm packages on opensuse build service 2008-01-24 Leo Moisio * buildbot/master.cfg: git-push does not have short option for --tags 2008-01-24 Leo Moisio * buildbot/master.cfg: buildbot also push tags 2008-01-24 Leo Moisio * tools/update-buildbot.sh: buildbot update script 2008-01-24 Leo Moisio * buildbot/master.cfg: critical typo fix makes git-tag work 2008-01-24 Leo Moisio * buildbot/master.cfg: buildbot release generator tags git source 2008-01-24 Leo Moisio * buildbot/master.cfg: make the build numbering more consistent with the old way 2008-01-24 Andrea Piras * src/crashreport.cpp, src/utils.cpp: fixed a typo, changed debug repport url and fixed log verbosity 2008-01-24 Leo Moisio * buildbot/master.cfg: buildbot SVN support dropped, uses only git now 2008-01-24 Leo Moisio * : Merge commit 'bd/master' 2008-01-23 Kaot * : Merge commit 'semi/master' 2008-01-23 Andrea Piras * src/crashreport.cpp: added #ifdef NO_DEBUG_REPORT_UPLOAD to disable debug report uploading 2008-01-23 Andrea Piras * src/crashreport.cpp, src/crashreport.h, src/springlobbyapp.cpp, src/utils.cpp: now the debug report successfully collects all the needed infos 2008-01-23 Andrea Piras * src/crashreport.cpp, src/crashreport.h, src/springlobbyapp.cpp: added some informations on crash report tool, now checks if the computer is online 2008-01-23 Andrea Piras * : commit 04e420bba13df5c2368495c81e8281adae36a24c Author: Andrea Piras Date: Wed Jan 23 13:32:40 2008 +0100 2008-01-23 Leo Moisio * : Merge commit 'bd/master' 2008-01-23 Andrea Piras * src/chatpanel.cpp: fixed setting text properties in chat not working correctly 2008-01-22 Andrea Piras * CMakeLists.txt, Makefile.am, src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/countrycodes.cpp, src/countrycodes.h, src/nicklistctrl.cpp: now flag tooltips uses full name instead of country code 2008-01-21 Leo Moisio * gentoo/overlay/games-strategy/spring-ota-content/Manifest, gentoo/overlay/games-strategy/spring-ota-content/files/digest-sprin g-ota-content-1.0, gentoo/overlay/games-strategy/spring-ota-content/spring-ota-content -1.0.ebuild: ota content ebuild 2008-01-21 René Milk * Makefile.am: before bisect 2008-01-21 Leo Moisio * gentoo/overlay/games-util/springlobby/Manifest, gentoo/overlay/games-util/springlobby/files/digest-springlobby-0.0. 1.0747, gentoo/overlay/games-util/springlobby/springlobby-0.0.1.0747.ebuild: automatic update of springlobby ebuild for automated tarball release 2008-01-21 Leo Moisio * tools/update-ebuilds.sh: ebuild update script made even more automatic 2008-01-21 Leo Moisio * gentoo/spring-overlay: git-svn fails 2008-01-21 Leo Moisio * gentoo/overlays.xml: overlay descriptions updated regarding merge 2008-01-21 Leo Moisio * gentoo/spring-overlay: link spring-overlay to overlay 2008-01-21 Leo Moisio * gentoo/overlay/games-strategy/spring-svn/Manifest, gentoo/overlay/games-strategy/spring-svn/files/digest-spring-svn-20 070716, gentoo/overlay/games-strategy/spring-svn/files/spring-svn_coexist_w ith_release.patch, gentoo/overlay/games-strategy/spring-svn/spring-svn-20070716.ebuild , gentoo/overlay/games-strategy/spring/Manifest, gentoo/overlay/games-strategy/spring/files/digest-spring-0.75_p2, gentoo/overlay/games-strategy/spring/files/digest-spring-0.76_p1, gentoo/overlay/games-strategy/spring/files/digest-spring-0.76_p1-r1 , gentoo/overlay/games-strategy/spring/files/digest-spring-0.76_p1-r2 , gentoo/overlay/games-strategy/spring/spring-0.75_p2.ebuild, gentoo/overlay/games-strategy/spring/spring-0.76_p1-r1.ebuild, gentoo/overlay/games-strategy/spring/spring-0.76_p1-r2.ebuild, gentoo/overlay/games-strategy/spring/spring-0.76_p1.ebuild, gentoo/overlay/profiles/package.mask, gentoo/spring-overlay/games-strategy/spring-svn/Manifest, gentoo/spring-overlay/games-strategy/spring-svn/files/digest-spring -svn-20070716, gentoo/spring-overlay/games-strategy/spring-svn/files/spring-svn_co exist_with_release.patch, gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-20070716 .ebuild, gentoo/spring-overlay/games-strategy/spring/Manifest, gentoo/spring-overlay/games-strategy/spring/files/digest-spring-0.7 5_p2, gentoo/spring-overlay/games-strategy/spring/files/digest-spring-0.7 6_p1, gentoo/spring-overlay/games-strategy/spring/files/digest-spring-0.7 6_p1-r1, gentoo/spring-overlay/games-strategy/spring/files/digest-spring-0.7 6_p1-r2, gentoo/spring-overlay/games-strategy/spring/spring-0.75_p2.ebuild, gentoo/spring-overlay/games-strategy/spring/spring-0.76_p1-r1.ebuil d, gentoo/spring-overlay/games-strategy/spring/spring-0.76_p1-r2.ebuil d, gentoo/spring-overlay/games-strategy/spring/spring-0.76_p1.ebuild: merge the 2 overlays 2008-01-21 Leo Moisio * gentoo/overlay/games-util/springlobby/springlobby-template: make springlobby ebuild conflict with springlobby-svn 2008-01-21 Leo Moisio * gentoo/overlay/games-util/springlobby-svn/Manifest, gentoo/overlay/games-util/springlobby-svn/files/digest-springlobby- svn-0.0.20070722, gentoo/overlay/games-util/springlobby-svn/springlobby-svn-0.0.20070 722.ebuild: remove the springlobby-svn ebuild altogether. use the springlobby ebuild instead 2008-01-21 Leo Moisio * gentoo/overlay/games-util/springlobby-svn/springlobby-svn-0.0.20070 722.ebuild: last changes to springlobby-svn ebuild 2008-01-21 Leo Moisio * gentoo/overlay/games-util/springlobby/springlobby-template: desktop icon for springlobby ebuild 2008-01-20 René Milk * src/settings++/settings.rc, src/springlobby.rc: changed include in .rc 2008-01-20 Andrea Piras * : commit b35ada13455d7b82f8242c02da5ee5ad33cba72b Author: René Milk Date: Sun Jan 20 21:22:19 2008 +0100 2008-01-20 Leo Moisio * tools/damage-my-brain.sh: script for pulling and putting to svn 2008-01-20 Leo Moisio * gentoo/overlay/games-util/springlobby/Manifest, gentoo/overlay/games-util/springlobby/files/digest-springlobby-0.0. 1.0746, gentoo/overlay/games-util/springlobby/springlobby-0.0.1.0746.ebuild: automatic update of springlobby ebuild for automated tarball release 2008-01-20 Leo Moisio * tools/update-ebuilds.sh: fix for the ebuild update script 2008-01-20 Leo Moisio * tools/update-ebuilds.sh: fix for the ebuild update script 2008-01-20 Leo Moisio * tools/update-ebuilds.sh: fix for the ebuild update script 2008-01-20 Leo Moisio * tools/update-ebuilds.sh: tiny robustness fix for the ebuild update script 2008-01-20 Leo Moisio * gentoo/overlay/games-util/springlobby/springlobby-template, tools/update-ebuilds.sh: script for updating ebuilds 2008-01-20 Leo Moisio * : Merge commit 'zifi/master' 2008-01-20 Leo Moisio * gentoo/overlay/games-util/springlobby/springlobby-0.0.1.0745.ebuild , gentoo/overlay/games-util/springlobby/springlobby-0.1_alpha.ebuild: real ebuild for springlobby tarball 2008-01-19 Leo Moisio * : Merge commit 'koshi/master' 2008-01-16 René Milk * src/nonportable.h, src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h, src/ui.cpp: damn, forgot to checkout correct branch 2008-01-16 Andrea Piras * : commit 11830b9f5fc08fabd2b9c55d6dd46370d5440457 Author: René Milk Date: Wed Jan 16 00:03:27 2008 +0100 2008-01-15 René Milk * src/chatpanel.h, src/mapctrl.cpp, src/mmoptionswrapper.cpp, src/spinctld.cpp: fixed all linux warnings 2008-01-15 René Milk * src/chatpanel.cpp, src/settings.h: some misplaced comments removed 2008-01-15 René Milk * : Merge commit 'bd/master' 2008-01-15 Andrea Piras * : commit 5dbec1c8ab3cfb49bc661c48c7247b263f87963c Author: Andrea Piras Date: Tue Jan 15 01:34:36 2008 +0100 2008-01-15 René Milk * src/ui.cpp: fixes tickets 317 and 342 for good 2008-01-15 René Milk * src/chatpanel.cpp, src/chatpanel.h: removed stuff that should have gone into a branch itfp 2008-01-15 René Milk * src/chatpanel.cpp: output of line for foxcus lost working 2008-01-14 René Milk * : commit c851a7849af26135bd491a94763a2c41ef115c39 Author: René Milk Date: Mon Jan 14 23:12:07 2008 +0100 2008-01-14 René Milk * src/chatpanel.cpp: fixed compile errro with missing font argument 2008-01-14 René Milk * : commit b18959955d4e010251cde99e6d43d545c8f757dd Author: René Milk Date: Mon Jan 14 22:16:26 2008 +0100 2008-01-14 René Milk * : commit 77b8df74219993056aef58f99e28eb916656ff45 Author: René Milk Date: Mon Jan 14 22:07:53 2008 +0100 2008-01-14 Andrea Piras * : commit a3d8420bb3176af4c5425c4de38fbcf4c003dcee Merge: 400353c c39cc37 Author: René Milk Date: Mon Jan 14 20:46:50 2008 +0100 2008-01-14 René Milk * src/battle.cpp, src/chatpanel.cpp, src/mapctrl.cpp, src/spring.cpp: fixed unsigned vs signed comparison warnings 2008-01-14 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2008-01-14 Andrea Piras * src/battle.cpp, src/chatlog.cpp, src/chatpanel.cpp, src/connectwindow.cpp, src/flagimages.cpp, src/spring.cpp, src/springunitsync.cpp, src/springunitsynclib.cpp, src/tasserver.cpp, src/ui.cpp, src/utils.h: possibly fixed unicode problems 2008-01-14 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2008-01-14 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2008-01-13 Andrea Piras * CMakeLists.txt: possibly fixed include problems in cmake file 2008-01-13 Leo Moisio * buildbot/master.cfg: make version clear not fail initially in buildbot 2008-01-13 Andrea Piras * CMakeLists.txt, src/CMakeLists.txt, src/boost/CMakeLists.txt, src/settings++/CMakeLists.txt: now CMake is fully cpable of out of source builds added some source groupings, so adding a cmake target for settings++ will be easy now removed useles cmakelist.txt files 2008-01-13 Leo Moisio * buildbot/master.cfg: fix critical typo in buildbot 2008-01-13 Leo Moisio * buildbot/master.cfg: buildbot builders for all devs whose git repo is on springlobby.info 2008-01-12 Andrea Piras * : commit 3355970cb1ddc4a5aa0d425c52ca3ef892ab2521 Merge: 552f7f7 a9aaaa8 Author: Andrea Piras Date: Sat Jan 12 16:58:21 2008 +0100 2008-01-12 Andrea Piras * src/springoptionstab.cpp, src/springoptionstab.h: committed as-is kinection's patch to make options tab scrollable 2008-01-12 Kaot * : Merge commit 'bd/master' 2008-01-12 Andrea Piras * : Merge commit 'dizekat/script_fix' 2008-01-12 René Milk * src/battleroommmoptionstab.cpp, src/mainsingleplayertab.cpp, src/mmoptionswrapper.cpp, src/singleplayerbattle.cpp, src/singleplayertab.cpp: map options work in sp 2008-01-12 Andrea Piras * src/battleroomtab.cpp, src/battleroomtab.h, src/mainjoinbattletab.cpp: now the battle option summary works correctly 2008-01-12 René Milk * : commit c0b93db4727f04cbb8f543d699807a0c0e132c67 Author: Andrea Piras Date: Sat Jan 12 00:22:08 2008 +0100 2008-01-11 René Milk * src/singleplayertab.cpp: no need to reload unitsync there (i guess) 2008-01-11 René Milk * : commit 11b45ee57d4cc91fc76e386a80a5b3ba5a98f21e Author: René Milk Date: Fri Jan 11 23:36:28 2008 +0100 2008-01-11 Andrea Piras * src/ui.cpp: now start rectangles are supposed to be updated 2008-01-11 Andrea Piras * src/tasserver.cpp: possibly fixed start boxes not sent 2008-01-11 Andrea Piras * : commit 3d602aeea8157ea2eb50e5ae6016638b8f9faa30 Author: Andrea Piras Date: Fri Jan 11 21:27:11 2008 +0100 2008-01-11 Andrea Piras * src/nonportable.h, src/settings++/panel_pathoption.cpp, src/settings++/se_settings.cpp, src/settings.cpp, src/springoptionstab.cpp, src/springunitsync.cpp, src/utils.cpp, src/utils.h: unitsync detection/selection should be truly crossplatform now 2008-01-11 Andrea Piras * src/addbotdialog.cpp, src/addbotdialog.h, src/battleroomtab.cpp, src/nonportable.h, src/springunitsync.cpp: now AI detection is 100% cross platform 2008-01-11 René Milk * src/battleroommmoptionstab.cpp, src/mainjoinbattletab.cpp, src/mmoptionmodel.cpp: fix for default listitem 2008-01-11 René Milk * src/battlemaptab.cpp, src/ui.cpp: mm-option now also work for host in mp 2008-01-11 René Milk * src/battlemaptab.cpp, src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/singleplayerbattle.cpp, src/singleplayertab.cpp, src/ui.cpp: mm-options in mp works completly for client 2008-01-11 Andrea Piras * src/nonportable.h: fixed build errors and fixed spring app name in macosx 2008-01-11 Andrea Piras * src/nonportable.h: added some OS local defines for OSX 2008-01-11 Andrea Piras * src/springlobbyapp.cpp, src/utils.cpp: i forgot to move an include, whoops 2008-01-11 Andrea Piras * src/settings++/Main.cpp, src/springlobbyapp.cpp, src/utils.cpp, src/utils.h: moved logging targets unitializers from main app file to utils.cpp Conflicts: src/springlobbyapp.cpp src/utils.cpp src/utils.h 2008-01-11 Andrea Piras * src/springlobbyapp.cpp: fixed merge conflicts :P 2008-01-11 Andrea Piras * src/springlobbyapp.cpp: added wxlogwindow for msw Conflicts: src/crashreport.cpp src/springlobbyapp.cpp 2008-01-11 Andrea Piras * : commit 1dd873c9435d334f444b58b76203805aa418cc4c Author: René Milk Date: Fri Jan 11 03:18:11 2008 +0100 2008-01-11 Andrea Piras * src/battlelistfilter.h: fixed case typo 2008-01-11 René Milk * src/battlelistfilter.h: again case 2008-01-11 René Milk * src/battlelisttab.h: lower to upper case 2008-01-11 René Milk * src/battlelisttab.cpp: made the event handler conditional 2008-01-11 René Milk * src/battlelisttab.cpp, src/battlelisttab.h: checkbox 2008-01-11 René Milk * src/battlelistctrl.cpp, src/battlelistfilter.h, src/battlelisttab.h, src/battleroomlistctrl.cpp, src/customlistctrl.cpp, src/customlistctrl.h, src/nicklistctrl.cpp: fixed conditionals 2008-01-11 René Milk * src/battlelistctrl.cpp, src/battlelistfilter.h, src/battlelisttab.cpp, src/battlelisttab.h, src/battleroomlistctrl.cpp, src/customlistctrl.cpp, src/customlistctrl.h, src/nicklistctrl.cpp: possible mac fixes 2008-01-11 René Milk * src/battle.h, src/battleoptionstab.cpp, src/battleroommmoptionstab.cpp, src/ibattle.h, src/mainjoinbattletab.cpp, src/singleplayerbattle.cpp, src/singleplayerbattle.h: still fixing mm-opt in sp, not working atm 2008-01-10 René Milk * src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp: almost sp fixed 2008-01-10 René Milk * src/battleroommmoptionstab.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: fixed update controls on mmtab 2008-01-10 René Milk * src/battleroommmoptionstab.cpp, src/mmoptionmodel.h, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: except listoption options are updated correctly 2008-01-10 Dmytry Lavrov * src/spring.cpp: Fixed script generation bug when bot owner is spectator. 2008-01-10 René Milk * src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: worked around crash bug 2008-01-10 Andrea Piras * src/battle.cpp, src/serverevents.cpp: now the options are correctly loaded on battle join 2008-01-10 Andrea Piras * src/battle.cpp, src/battle.h, src/battlemaptab.cpp, src/battlemaptab.h, src/battleoptionstab.cpp, src/battleoptionstab.h, src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/battleroomtab.h, src/ibattle.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/server.h, src/serverevents.cpp, src/singleplayerbattle.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: renamed some functions to use overloading to make the code a bit cleaner 2008-01-10 Andrea Piras * src/serverevents.cpp, src/tasserver.cpp: now map/mod network layer works, setting the option, no 2008-01-10 Andrea Piras * : commit 86bd246e66e5ab46a206871e8ae8848d2e3210d8 Merge: cc18443 1ec7355 Author: Andrea Piras Date: Thu Jan 10 13:44:01 2008 +0100 2008-01-10 René Milk * src/battleroommmoptionstab.cpp, src/serverevents.cpp: added some comments where stuff goes wring 2008-01-10 René Milk * src/battleroommmoptionstab.cpp: pointer to refs 2008-01-10 René Milk * src/battleroommmoptionstab.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/tasserver.cpp: mmoptions arrive correctly at protocol level 2008-01-10 Andrea Piras * : commit 437ea80e44e07e9a25f0903b7a5a7252cf12b86f Author: Andrea Piras Date: Thu Jan 10 01:21:12 2008 +0100 2008-01-10 René Milk * : commit 1a7bed5a9d12841c9fa68fc9348db21404256ce1 Merge: 7fc18c0 86eb43c Author: René Milk Date: Thu Jan 10 00:46:27 2008 +0100 2008-01-10 Andrea Piras * Doxyfile: improved a bit the doxyfile 2008-01-10 René Milk * : commit 1ed522303b8f0fcc7bb5d522fb9689c944d5137a Author: René Milk Date: Thu Jan 10 00:26:06 2008 +0100 2008-01-09 Andrea Piras * src/ui.cpp: fixed unicode problems 2008-01-09 Andrea Piras * src/battleroomtab.cpp: now option summary in battleroomtab is supposed to be populated 2008-01-09 René Milk * src/battleroommmoptionstab.cpp: uhm, nothing 2008-01-09 Andrea Piras * src/battle.cpp, src/battle.h, src/battlemaptab.cpp, src/battlemaptab.h, src/battleoptionstab.cpp, src/battleoptionstab.h, src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/battleroomtab.h, src/ibattle.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/server.h, src/serverevents.cpp, src/singleplayerbattle.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: changed internal structure for the communication of SETSCRIPTTAGS 2008-01-09 René Milk * : commit f22f6dde619752f50742fd2d0dd1eb82e1e431b3 Author: René Milk Date: Wed Jan 9 20:34:04 2008 +0100 2008-01-09 Andrea Piras * src/ui.cpp: fixed a ++ typo 2008-01-09 Andrea Piras * src/chatpanel.cpp: fixed segfault on connect o_O 2008-01-09 Andrea Piras * src/chatpanel.cpp, src/springlobbyapp.cpp: fixed unicode problems, fixed a missing #ifdef check for warning about using wx 2.6 2008-01-09 Andrea Piras * src/battle.h, src/battleroommmoptionstab.cpp, src/battleroomtab.cpp, src/ibattle.h, src/mainjoinbattletab.cpp, src/tasserver.cpp: fixed some bugs when sending map/mod options 2008-01-09 Andrea Piras * src/battleroomtab.cpp, src/battleroomtab.h: partially fixed options list in battleroomtab 2008-01-09 Andrea Piras * : commit 08c077a8ec294b711ebcaae5d571155dd41f15ec Author: Andrea Piras Date: Wed Jan 9 00:05:26 2008 +0100 2008-01-08 René Milk * src/battleroommmoptionstab.cpp: called delete on control pointer before removin it from the map 2008-01-08 Andrea Piras * src/serverevents.cpp, src/serverevents.h: removed despricated function 2008-01-08 René Milk * src/battleroommmoptionstab.cpp: added brackets for ifs 2008-01-08 Andrea Piras * src/tasserver.cpp: removed depricated server message 2008-01-08 Andrea Piras * src/battleroomtab.cpp: removed fixme 2008-01-08 Andrea Piras * : commit 9411f9c4ca2758282deb37f0dfedb7a9846b0211 Author: Andrea Piras Date: Tue Jan 8 23:26:41 2008 +0100 2008-01-08 René Milk * src/singleplayerbattle.cpp: fixed ansi<->unicode stuff 2008-01-08 Andrea Piras * : commit 889526c8c6d7df0146919d59b20f2c86c2168067 Merge: 37d5b4d b4bbe98 Author: René Milk Date: Tue Jan 8 23:11:57 2008 +0100 2008-01-08 René Milk * src/battle.cpp, src/battleroomtab.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/spring.cpp: changed getoptions to contain name of the option also 2008-01-08 Andrea Piras * src/tasserver.cpp: removed code for old version of server 2008-01-08 Andrea Piras * src/battleroommmoptionstab.h, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h, src/server.h, src/singleplayerbattle.cpp, src/singleplayertab.cpp: code for updating map/mod tab when chaging map/mod in SP (but not working :s) 2008-01-08 Andrea Piras * src/battle.cpp, src/battleroomtab.cpp, src/battleroomtab.h, src/ibattle.h, src/mainjoinbattletab.cpp, src/mmoptionswrapper.h, src/serverevents.cpp, src/tasserver.cpp: changed itaration method to access element to map[ keyname ], now map/mod options gets loaded on battle constructor 2008-01-08 Andrea Piras * src/mmoptionmodel.cpp, src/mmoptionmodel.h, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: changed #defines for option type to enum 2008-01-08 Andrea Piras * : commit 3d27be7fc56d1fa80dbe5b4806f889dac29fcf90 Author: Andrea Piras Date: Tue Jan 8 18:18:37 2008 +0100 2008-01-08 René Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: implemented refresh controls and getoptiontype function 2008-01-08 René Milk * src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: fixed compile errors 2008-01-08 René Milk * src/battleroommmoptionstab.cpp: fixed error in updatecontrols 2008-01-08 René Milk * src/mmoptionswrapper.cpp: implemented GetSinglevalue 2008-01-08 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h: now monospacee font is being used for topics MOTDs and #news channel 2008-01-08 René Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/battleroomtab.cpp, src/mainjoinbattletab.cpp: changed vectors to maps and removed looping through controls 2008-01-08 Andrea Piras * src/images/channel.xpm, src/ui.cpp: added /channels command to list channels, fixed warning about xpm file 2008-01-08 René Milk * : commit 6d963716cd5ada9b167ddf8c7983fb9134926de7 Author: Kaot Date: Mon Jan 7 23:58:31 2008 +0100 2008-01-07 Kaot * : Merge commit 'bd/master' Conflicts: src/chatpanel.cpp 2008-01-07 Andrea Piras * src/battleroommmoptionstab.h, src/battleroomtab.cpp, src/battleroomtab.h: now map/mod options gets listed in battleroomtab (glitch duplicate entries are created) 2008-01-07 Andrea Piras * src/serverevents.cpp, src/spring.cpp, src/springunitsynclib.cpp, src/tasserver.cpp: map/mod options now working, net messages are sent/received properly and script generation works 2008-01-07 Andrea Piras * src/images/channel.xpm: fixed channel icon colour so it doesn't pain ugly lines when switching to diff statuses 2008-01-06 Andrea Piras * src/chatoptionstab.cpp, src/chatpanel.cpp, src/mainchattab.cpp, src/mainchattab.h: now channel icons color of notification colour when there is an unread messssage there 2008-01-06 Andrea Piras * : commit dd048c38d11680d71fa207056fc9e36f65c1a76e Author: Andrea Piras Date: Sun Jan 6 18:29:09 2008 +0100 2008-01-06 Andrea Piras * : commit 44625de761dcf99a2a9639d4d772c7d068f25b6b Author: Andrea Piras Date: Sun Jan 6 18:15:01 2008 +0100 2008-01-06 Andrea Piras * src/battle.cpp, src/battle.h: removed segmentation fault on team boxes draw (still does when boxes are > 16) 2008-01-06 Andrea Piras * : commit c055f1408645701b1d0ff369ca06907f09e31cf7 Merge: 472beea 89a1bab Author: Andrea Piras Date: Sun Jan 6 13:36:05 2008 +0100 2008-01-06 Andrea Piras * : commit de08f4a560b68d3a0ff5a245ae6d9f601579b85a Merge: b9f4d40 26b1fe2 Author: Andrea Piras Date: Sun Jan 6 13:25:48 2008 +0100 2008-01-06 Andrea Piras * : commit 08d9766e368a0259698a116014c554c833d4d4fb Merge: ca88c3c fa22010 Author: Andrea Piras Date: Sun Jan 6 01:27:09 2008 +0100 2008-01-06 Leo Moisio * buildbot/master.cfg: buildbot conf refactor 2008-01-06 Leo Moisio * tools/create-build-dirs: configure build dirs when creating them 2008-01-06 Leo Moisio * buildbot/master.cfg: change order of buildsteps 2008-01-06 Leo Moisio * buildbot/master.cfg, tools/create-build-dirs: buildbot create build dirs if missing 2008-01-06 Leo Moisio * tools/create-build-dirs: script for creating all the different build dirs 2008-01-05 Leo Moisio * Makefile.am: coherent indentation in Makefile.am 2008-01-05 Leo Moisio * buildbot/master.cfg: buildbot conf does not use features deprecated in 0.76 anymore 2008-01-05 Leo Moisio * buildbot/master.cfg: dynamic typing ftl, fixed typo in buildbot conf 2008-01-05 Leo Moisio * buildbot/master.cfg: add missing import in buildbot conf 2008-01-05 Leo Moisio * buildbot/master.cfg: fix fatal typo in buildbot conf 2008-01-05 Leo Moisio * buildbot/master.cfg: buildbot for every dev under way 2008-01-05 René Milk * src/settings++/Defs.hpp: amended tooltip for disabling helper ais 2008-01-05 Leo Moisio * buildbot/master.cfg: fixed buildbot deprecations for 0.76 2008-01-05 Leo Moisio * : Merge commit 'koshi/master' 2008-01-05 Andrea Piras * src/tasserver.cpp: now player status is reported correctly 2008-01-05 René Milk * : commit 477354e775d8b9e8b829f70da175375ea8a92fe8 Author: Andrea Piras Date: Sat Jan 5 16:06:59 2008 +0100 2008-01-05 René Milk * src/battleroommmoptionstab.cpp: forgot to commit last night 2008-01-05 Andrea Piras * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h: now the map/mod options tab is spawned in singleplayer mode too (not updated on mod change yet) 2008-01-05 Andrea Piras * springlobby.cbp: updated codeblocks project file 2008-01-05 Andrea Piras * src/spring.cpp: now the app logs correctly the start position type in singleplayer scrip generation 2008-01-05 Andrea Piras * src/spring.cpp: fixed singleplayer start position mode 2008-01-05 Andrea Piras * src/springlobbyapp.cpp: now only new players autojoin #newbies 2008-01-05 Leo Moisio * buildbot/master.cfg: fix deprecated things for buildbot 0.75 2008-01-04 René Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/mmoptionswrapper.cpp: options get sent correctly 2008-01-04 Andrea Piras * src/chatpanel.cpp, src/serverevents.cpp: Revert "addded hardcoded autojoin to #newbies channel" This reverts commit 342d5096667cbb20d7ccaa8d6aa27f87b28d710d. 2008-01-04 Andrea Piras * : commit acf46c94e004497738d6a992e89a46ad27c8c831 Author: René Milk Date: Fri Jan 4 17:54:59 2008 +0100 2008-01-04 René Milk * src/battleroommmoptionstab.h: added spinctrl vectror 2008-01-04 René Milk * src/battleoptionstab.cpp: fixes startmetal/energy/maxunits regression 2008-01-04 René Milk * : fixes gameoptions regression, also: commit bc65c5aac22349435988ec9bb4fd40e66bba036a Author: Andrea Piras Date: Fri Jan 4 15:54:09 2008 +0100 2008-01-04 Andrea Piras * src/battle.cpp: now the creation vector size of the start rectangles is big as the battle's max player limit 2008-01-04 René Milk * src/chatpanel.cpp, src/chatpanel.h, src/customrichtextctrl.cpp, src/customrichtextctrl.h: bs 2008-01-04 René Milk * src/customrichtextctrl.cpp, src/customrichtextctrl.h: custom richtext 2008-01-04 Andrea Piras * : commit 86b07ee4d328324e6fb597fff6925fd545f1d9c3 Author: René Milk Date: Thu Jan 3 23:41:28 2008 +0100 2008-01-03 René Milk * src/battlelisttab.cpp: fixed typo 2008-01-03 René Milk * src/chatpanel.cpp, src/chatpanel.h: moved to richtextctrl 2008-01-03 René Milk * src/settings.cpp, src/ui.cpp: removed references to lobbysounds.h forgot to make sonds a branch earlier 2008-01-03 René Milk * : commit 0d1c57b6710d062473176bcaa8766a2a4ea6993a Merge: 8bc7c6e 1bda185 Author: Leo Moisio Date: Thu Jan 3 20:13:35 2008 +0200 2008-01-03 René Milk * Makefile.am: fixed missing icon in kaefile 2008-01-03 René Milk * src/lobbysounds.cpp, src/lobbysounds.h: sounds 2008-01-03 Leo Moisio * : Merge commit 'koshi/master' 2008-01-03 René Milk * src/settings++/Defs.hpp, src/settings++/helpmenufunctions.cpp, src/settings++/presets.h, src/settings++/tab_render_detail.cpp: hotfix for ground decals 2008-01-03 Andrea Piras * src/tasserver.cpp: forgot to change some values in last commit 2008-01-03 Andrea Piras * src/tasserver.cpp: increased start rectangles limit to 16 2008-01-03 René Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/customlistctrl.cpp, src/nicklistctrl.cpp: fixed an issue with my customlistctrl that prevented compilation on wx 2.6.x 2008-01-03 Leo Moisio * : Merge commit 'zifi/master' 2008-01-03 Leo Moisio * : Merge commit 'zifi/master' 2008-01-03 René Milk * Makefile.am, src/settings.cpp, src/settings.h, src/ui.cpp: protypes for playing sounds and setting them in config 2008-01-03 René Milk * src/battleroomlistctrl.cpp, src/ui.cpp, src/ui.h: fixes ticket # 342 2008-01-03 René Milk * src/battleroomtab.cpp, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/ui.cpp: this closes ticket #325 2008-01-03 René Milk * src/uiutils.cpp: this might close ticket #49 2008-01-03 René Milk * src/chatpanel.cpp, src/chatpanel.h: example implementation of focus lost line dranw in chat see ticket http://trac.springlobby.info/ticket/222 disabled for now by const bool draw_focus_lost_seperation = false; in chatpanel.cpp 2008-01-03 René Milk * : commit 1b50aca3586971dc024cf56b903d67444d5a41a0 Merge: c8d7133 9cf1ec1 Author: René Milk Date: Wed Jan 2 23:31:10 2008 +0100 2008-01-02 René Milk * src/springoptionstab.cpp: fixed tab order 2008-01-02 René Milk * src/settings++/helpmenufunctions.cpp, src/settings++/se_settings.cpp: changed unitsync lookup path 2008-01-02 Leo Moisio * : Merge commit 'zifi/master' 2008-01-02 René Milk * src/settings++/tab_abstract.cpp, src/settings++/tab_audio.cpp, src/settings++/tab_debug.cpp, src/settings++/tab_quality_video.cpp, src/settings++/tab_simple.cpp, src/settings++/tab_ui.cpp: aded tabbing through the controls 2008-01-02 René Milk * src/settings++/panel_pathoption.cpp: fixed typo 2008-01-02 René Milk * : commit c13cea1d0c2712286443ead51793b94a30265e69 Author: René Milk Date: Tue Jan 1 23:17:44 2008 +0100 2008-01-01 René Milk * src/settings++/panel_pathoption.cpp: changed paths to path 2007-12-31 René Milk * src/settings++/Main.cpp: #include throws a hello of linker errors on mingw build so i made it conditional 2007-12-31 René Milk * : commit a3459546c4b089c24ea744a6ba8cd3a8a203ecb5 Author: René Milk Date: Sun Dec 30 23:58:14 2007 +0100 2007-12-31 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2007-12-29 Andrea Piras * src/chatpanel.cpp, src/serverevents.cpp: addded hardcoded autojoin to #newbies channel 2007-12-29 Andrea Piras * src/mapctrl.cpp: removed FIXMe 2007-12-29 René Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/ibattle.h, src/mainjoinbattletab.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/serverevents.cpp, src/spring.cpp, src/tasserver.cpp: infrastructure for setting/updating customoptions is there settings don't get set right, though 2007-12-29 René Milk * : commit 27675e873c8bbecb5f37abdcb1b993bba2e16d0a Author: René Milk Date: Sat Dec 29 13:47:24 2007 +0100 2007-12-29 René Milk * src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: did some prototyping for event handling and updating controls 2007-12-29 Andrea Piras * src/mapctrl.cpp: removed hardcoded start boxes n° from mapctrl (TODO: quit iterating trought boxes every time you draw something) 2007-12-29 Andrea Piras * src/mapctrl.cpp, src/mapctrl.h: fixed function names for mapctrl 2007-12-29 René Milk * : commit d48ee14a2c7925af8aa96ebac2f342d995f77d7d Author: René Milk Date: Fri Dec 28 20:14:16 2007 +0100 2007-12-28 René Milk * src/settings++/Defs.hpp, src/settings++/tab_abstract.cpp, src/settings++/tab_abstract.h, src/settings++/tab_ui.cpp, src/settings++/tab_ui.h: added scrollwheelspeed and windowededgemove 2007-12-28 René Milk * src/tasserver.cpp: fixed missing wxstring conversion 2007-12-28 René Milk * Makefile.am, src/battleroommmoptionstab.cpp, src/spinctld.cpp, src/spinctld.h, src/thingdef.h: spinctrl not quite working 2007-12-28 Andrea Piras * src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp: now the messages should be formatted the same as tasclient 2007-12-28 Andrea Piras * src/spring.cpp: added script generation for custom options 2007-12-28 Andrea Piras * src/ibattle.h, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/serverevents.cpp, src/tasserver.cpp: moved options wrapper class declaration from singleton to ibattle class, now sending/receiving options list works 2007-12-28 Andrea Piras * src/serverevents.cpp: forgot to commit the actual todo 2007-12-28 Andrea Piras * springlobby.cbp: added TodDo item, more codeblocks project fixes 2007-12-28 Andrea Piras * springlobby.cbp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h, src/serverevents.cpp: updated codeblocks project, created singleton of options wrapper class, now receiving/setting options works 2007-12-28 Andrea Piras * : commit 679673158dc81296d5f80b37a3b7f0c18f16eb30 Author: Andrea Piras Date: Fri Dec 28 01:27:04 2007 +0100 2007-12-27 René Milk * src/battleroommmoptionstab.cpp, src/mmoptionmodel.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: added setSingleOption(key,value) and examplotry gui 2007-12-27 René Milk * src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: getoptions done added missing return true; 2007-12-27 Andrea Piras * : commit 863533b323f3b49bd05a24b10ece88340fe27a8c Author: René Milk Date: Thu Dec 27 20:37:14 2007 +0100 2007-12-27 Andrea Piras * src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: now windows build defaults to old launching method (no more ugly shell spawned) 2007-12-27 Andrea Piras * : commit 043811f47734a616529d15c13e21de47248d547e Author: Andrea Piras Date: Thu Dec 27 18:15:56 2007 +0100 2007-12-27 Leo Moisio * : Merge commit 'bd@springlobby.info/master' Conflicts: Makefile.am 2007-12-27 René Milk * Makefile.am, SpringLobby.fbp, src/battleroommmoptionstab.cpp, src/battleroommmoptionstab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mmoptionmodel.cpp, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: mmoptions poc 2007-12-26 René Milk * Makefile.am, src/mmoptionmodel.h, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: ready for first gui-get mmoptions 2007-12-26 Kaot * src/uiutils.cpp: - Don't do RegEx Matching if /proc/cpuinfo could not be read, instead just return 0. 2007-12-26 René Milk * src/mmoptionmodel.cpp, src/mmoptionmodel.h, src/mmoptionswrapper.cpp, src/mmoptionswrapper.h: first preps 2007-12-26 Kaot * Doxyfile: - Tuned the Doxyfile to print out undocumented Methods and Classes. - Tuned the HTML Output of Doxygen 2007-12-26 Kaot * src/tasserver.cpp, src/tasserver.h, src/uiutils.cpp, src/uiutils.h: - CPU Detection for Linux added. - Current State of CPU is counted, so this may vary for Linux'es that support ACPI CPU Throttling. 2007-12-25 Kaot * CMakeLists.txt, CMake_Setup.sh, src/boost/CMakeLists.txt, src/settings++/CMakeLists.txt: - Cleaned up a bit - CMake_Setup.sh Script expanded and Infotext added, so that the User is aware of what the Script will do. He is also asked whether to proceed or not. 2007-12-23 Kaot * CMake_Setup.sh: Improved the CMake Generator and commented all Lines 2007-12-23 Kaot * .gitignore, src/CMakeLists.txt: Forgot two Files 2007-12-23 Kaot * CMakeLists.txt, CMake_Setup.sh, src/CMakeLists.txt, src/boost/CMakeLists.txt, src/settings++/CMakeLists.txt: Inital CMake Files added in order to be able to build the Project with CMake and KDevelop. 2007-12-24 Andrea Piras * springlobby.cbp, src/battlelistctrl.cpp: udpated codeblocks project, refined map/mod name in tooltips 2007-12-24 René Milk * src/connectwindow.cpp, src/server.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: improved register dialog: password/confirmation are checked for equality reason for register rejection is displayed 2007-12-23 René Milk * src/connectwindow.cpp, src/connectwindow.h: connectwindow now derived from wxDialog, doesnt get displayed anymore in taskbar closes ticket 273 2007-12-23 René Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/nicklistctrl.cpp: regression fixed 2007-12-23 René Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp, src/customlistctrl.cpp, src/customlistctrl.h, src/nicklistctrl.cpp, src/nicklistctrl.h: completed nicklistctrl tooltips cleaned up constructors from customlistctrl and derived classes 2007-12-23 Kaot * SpringLobby.kdevelop, SpringLobby.kdevelop.filelist, SpringLobby.kdevses: Brauch ich nicht mehr 2007-12-23 Kaot * : commit 5a2c0fc16e39fe6c4cae903e474e47f3e62b0fa1 Author: Kaot Date: Sun Dec 23 21:08:59 2007 +0100 2007-12-23 Kaot * : commit 423775ed7db63a0b7947705fabe64f350f456ccd Author: Kaot Date: Sun Dec 23 20:36:29 2007 +0100 2007-12-23 René Milk * src/battlelistctrl.cpp: cleanup 2007-12-23 René Milk * src/battleroomlistctrl.cpp: cleanup 2007-12-23 René Milk * src/battlelistctrl.cpp: removed unnecessary handling of mouse.leaving() 2007-12-23 Kaot * CMakeLists.txt, CMake_Setup.sh, src/CMakeLists.txt, src/boost/CMakeLists.txt, src/settings++/CMakeLists.txt: Inital CMake Files added in order to be able to build the Project with CMake and KDevelop. 2007-12-23 René Milk * src/customlistctrl.cpp: fixed minimap not displayed on click in battlelist 2007-12-23 Andrea Piras * src/settings++/Main.cpp, src/springlobbyapp.cpp, src/utils.cpp, src/utils.h: moved logging targets unitializers from main app file to utils.cpp 2007-12-23 René Milk * : commit e1b94b87acb592d9458f8e158fa49aef7a7a88ed Author: René Milk Date: Sun Dec 23 17:21:51 2007 +0100 2007-12-23 Andrea Piras * Makefile.am, src/settings++/Main.cpp: fixed settings++ to use the crash report tool 2007-12-23 Andrea Piras * : commit bb28b40db101ca38f47559cdb2d2b2965fa924e1 Author: René Milk Date: Sun Dec 23 14:38:53 2007 +0100 2007-12-23 René Milk * src/battleroomlistctrl.cpp: closes http://trac.springlobby.info/ticket/231 (again ;-)) 2007-12-23 René Milk * src/battlelistctrl.cpp: fix for active playlist in tooltip 2007-12-23 René Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp: minor tweaks 2007-12-23 Andrea Piras * src/channel.cpp, src/channel.h, src/chatpanel.cpp, src/chatpanel.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/ui.cpp, src/ui.h: made distintion between JOINED & CLIENT messages, removed flood of joined messages when joining a channel 2007-12-23 René Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h: tooltips for battleroomlist completed 2007-12-23 René Milk * src/battlelistctrl.cpp, src/iconimagelist.cpp, src/iconimagelist.h: battlelist tooltips complete 2007-12-23 René Milk * src/battlelistctrl.cpp: TOOLTIPS 2007-12-22 René Milk * src/battlelistctrl.cpp, src/battlelistctrl.h, src/customlistctrl.cpp, src/customlistctrl.h, src/settings++/frame.cpp, src/settings++/helpmenufunctions.cpp, src/settings++/tab_abstract.cpp: detailed tooltips, almost 2007-12-22 René Milk * src/customlistctrl.cpp, src/customlistctrl.h: fixes tooltips 2007-12-22 René Milk * src/settings++/presets.h, src/settings++/tab_abstract.cpp, src/settings++/tab_simple.cpp, src/settings++/tab_simple.h: fixes forum mentioned things 2007-12-22 Kaot * SpringLobby.kdevelop, SpringLobby.kdevelop.filelist, SpringLobby.kdevses: Added initial Project Files for KDevelop 2007-12-22 René Milk * src/customlistctrl.cpp, src/customlistctrl.h: focus bug still there 2007-12-22 René Milk * src/tasserver.cpp: compile errror in tasserver commented out 2007-12-22 René Milk * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp: dropped the sort icon arrows indicator 2007-12-22 René Milk * src/battlelistctrl.cpp, src/battleroomtab.cpp: added missing tooltips on columns in battleromlist 2007-12-22 René Milk * src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/customlistctrl.cpp, src/customlistctrl.h: fixes ticket http://trac.springlobby.info/ticket/258 2007-12-22 Tommy Carlsson * src/chatoptionstab.cpp, src/chatoptionstab.h, src/chatpanel.cpp, src/settings.cpp, src/settings.h: Setting font should work 2007-12-22 René Milk * src/battlelistctrl.cpp, src/customlistctrl.cpp, src/customlistctrl.h, src/iconimagelist.cpp, src/iconimagelist.h, src/images/empty.xpm: improved resizing bug on win closes http://trac.springlobby.info/ticket/231 2007-12-21 René Milk * src/battlelisttab.cpp, src/customlistctrl.cpp: tooltips disabled for now on w32, linux works fine 2007-12-21 René Milk * Makefile.am, src/battlelistctrl.h, src/battleroomlistctrl.h, src/customListCtrl.cpp, src/customListCtrl.h, src/customlistctrl.cpp, src/customlistctrl.h: renamed customlistctrl, removed some unnecessary includes 2007-12-21 René Milk * src/settings++/frame.cpp: fixed bug reported by lordmatt 2007-12-21 René Milk * src/customListCtrl.cpp: tooltips are displayed on win, they just don't disappear on muse move 2007-12-21 René Milk * src/battlemaptab.cpp, src/battleoptionstab.cpp: added comments where tooltips need to be added 2007-12-21 Tommy Carlsson * src/settings.cpp, src/uiutils.cpp, src/uiutils.h: Possily fixed wx2.6 compability 2007-12-21 René Milk * src/battleroomtab.cpp: added tooltips to battleroomtab 2007-12-20 René Milk * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp: added tooltips to battleroomlistctrl 2007-12-20 Kaot * : Merge commit 'tc/chatcolors' into colormerge Conflicts: src/chatpanel.cpp 2007-12-20 René Milk * Makefile.am, src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.cpp, src/customListCtrl.cpp, src/customListCtrl.h: added customListCtrl so battle list can get tooltips 2007-12-20 René Milk * src/battlelisttab.cpp, src/connectwindow.cpp, src/mainwindow.cpp, src/mainwindow.h, src/ui.cpp: fixed some menuboxes remove/add settings menuitem, not gray it 2007-12-20 René Milk * : commit fd57d0c6207c1eab36b370d92dc129df578aead8 Merge: e2b6b72 301d93a Author: Andrea Piras Date: Thu Dec 20 15:47:19 2007 +0100 2007-12-20 Dmytry Lavrov * src/spring.cpp: Fixed crash when starting singleplayer with bots. 2007-12-20 Andrea Piras * src/spring.cpp: fixed crsah in singleplayer generation script, thanks dizekat! 2007-12-20 Dmytry Lavrov * : commit 334ed95d2ecaa4e8e39f92cc5e2ecfdbc6ef8c58 Author: Andrea Piras Date: Thu Dec 20 15:05:17 2007 +0100 2007-12-20 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h: Revert funtion rename _SetPanel since it was conflicting with another 2007-12-20 Andrea Piras * src/chatlog.cpp, src/chatlog.h, src/chatpanel.cpp, src/chatpanel.h, src/tasserver.cpp: made functions names more std C++ 2007-12-20 Dmytry Lavrov * : commit 2d0092132d7d5b6e1ca948ea934d5de57dae6121 Author: Andrea Piras Date: Thu Dec 20 14:20:28 2007 +0100 2007-12-20 Dmytry Lavrov * : commit 37883a1cc72b830a0b7ebb3b193fc6161ce3f228 Author: Dmytry Lavrov Date: Thu Dec 20 14:50:54 2007 +0200 2007-12-20 Dmytry Lavrov * src/nicklistctrl.cpp: Fixed crashes after /j main 2007-12-20 Dmytry Lavrov * src/serverevents.cpp: Try/catch block for OnUserStatus to prevent crashes. 2007-12-20 Dmytry Lavrov * src/tasserver.cpp: minor change to logging. 2007-12-20 Dmytry Lavrov * src/nicklistctrl.cpp: Fixed crashes after /j main 2007-12-20 Andrea Piras * src/ui.cpp: added /msg command for PM 2007-12-20 René Milk * : commit 29d43a4d5fd40448acc5cf32cc136250a5e0545b Merge: 4e70fcd bf4f017 Author: René Milk Date: Thu Dec 20 03:06:01 2007 +0100 2007-12-20 Andrea Piras * : commit 4e70fcd97632c13ab5111e4f0f056604c29cb0b6 Author: René Milk Date: Thu Dec 20 01:33:58 2007 +0100 2007-12-20 Andrea Piras * src/springunitsync.cpp: fixed spring feature detection for valrious locales 2007-12-20 Tommy Carlsson * src/chatpanel.cpp: Fixed minor bug in chatpanel 2007-12-20 Tommy Carlsson * src/chatoptionstab.cpp: Colordialogs not open with last color 2007-12-20 Tommy Carlsson * springlobby.cbp: Added files to cb project file 2007-12-20 Tommy Carlsson * src/chatoptionstab.cpp, src/chatpanel.cpp: Chat colors tuned a bit 2007-12-19 Tommy Carlsson * Makefile.am, src/chatoptionstab.cpp, src/chatoptionstab.h, src/chatpanel.cpp, src/mainoptionstab.cpp, src/mainoptionstab.h, src/settings.cpp, src/settings.h: Chat colors added. 2007-12-19 René Milk * src/mainwindow.cpp, src/settings++/Defs.hpp, src/settings++/panel_pathoption.cpp, src/settings++/presets.h, src/settings++/tab_abstract.cpp, src/settings++/tab_render_detail.cpp, src/settings++/tab_render_detail.h: removed sm3texstages option renabled test ss menuitem 2007-12-19 René Milk * src/settings++/Defs.hpp, src/settings++/panel_pathoption.cpp, src/settings++/panel_pathoption.h: removed unnecceassry springpath option 2007-12-19 René Milk * src/settings++/frame.cpp, src/settings++/se_utils.cpp, src/settings++/se_utils.h: linker error fixed 2007-12-19 René Milk * Makefile.am, src/settings++/frame.cpp, src/settings++/panel_pathoption.cpp, src/settings++/se_utils.h: still linker error 2007-12-19 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2007-12-19 René Milk * Makefile.am, src/settings++/frame.cpp, src/settings++/panel_pathoption.cpp, src/settings++/se_utils.h, src/settings++/tab_abstract.cpp, src/springunitsynclib.cpp: linker error 2007-12-19 René Milk * src/mainwindow.cpp, src/settings++/frame.cpp, src/settings++/panel_pathoption.cpp, src/springunitsynclib.cpp: integrated works 2007-12-19 Andrea Piras * src/tasserver.cpp: fixed unicode probs 2007-12-18 Andrea Piras * src/tasserver.cpp: added the tasserver bugged checksum to battle hosting, so fixed hosting problems 2007-12-18 Andrea Piras * src/springunitsync.cpp: added missing #include switched from C floor function to C++ std::floor 2007-12-18 Andrea Piras * : commit d58cdd1deadd997b8639d7398b6c8d4bca927ac3 Author: Andrea Piras Date: Tue Dec 18 16:20:16 2007 +0100 2007-12-18 Andrea Piras * src/crashreport.cpp, src/crashreport.h: tiny refactor out from header for a function 2007-12-18 Andrea Piras * src/springunitsync.cpp, src/springunitsync.h: improved spring features version detection 2007-12-18 Andrea Piras * springlobby.cbp, src/springunitsync.cpp, src/ui.cpp: fixed merged problems, updated codeblocks project 2007-12-18 René Milk * : commit a7673db7744bb32d550ffa172eee247a393b19f0 Author: René Milk Date: Tue Dec 18 13:51:22 2007 +0100 2007-12-18 René Milk * src/settings++/Defs.hpp, src/settings++/custom_dialogs.cpp, src/settings++/frame.cpp, src/settings++/helpmenufunctions.cpp, src/settings++/helpmenufunctions.h, src/settings++/se_utils.cpp, src/settings++/se_utils.h, src/ui.cpp: contact, reportbug and credits 2007-12-18 René Milk * Makefile.am, src/addbotdialog.cpp, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/chatlog.cpp, src/connectwindow.cpp, src/hostbattledialog.cpp, src/settings++/Defs.hpp, src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h, src/settings++/frame.cpp, src/settings++/helpmenufunctions.cpp, src/settings++/helpmenufunctions.h, src/settings++/panel_pathoption.cpp, src/settings++/tab_abstract.cpp, src/singleplayertab.cpp, src/springoptionstab.cpp, src/ui.cpp, src/utils.cpp: added simple credits dialog renamed custom_msgbox to custom_dialogs 2007-12-17 René Milk * src/settings++/custom_dialogs.cpp, src/settings++/custom_dialogs.h, src/settings++/custom_msgbox.cpp, src/settings++/custom_msgbox.h, src/settings++/frame.cpp, src/settings++/helpmenufunctions.cpp: going to add custom credits dialog 2007-12-17 René Milk * : commit 51bddc4a6f55ff83cf9da177554e9fc994bfda1a Merge: ba9eea8 2027a70 Author: René Milk Date: Mon Dec 17 20:00:06 2007 +0100 2007-12-17 Andrea Piras * springlobby.cbp, src/udpsocket.cpp, src/udpsocket.h: removed useless (obsolete) files 2007-12-17 René Milk * src/settings++/custom_msgbox.cpp: using default icon for custom msg box if null is passed 2007-12-17 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2007-12-17 Andrea Piras * : commit ad787772f19caaaeb1f069c13d0203892ff2876f Author: Dmytry Lavrov Date: Mon Dec 17 17:43:19 2007 +0200 2007-12-17 Dmytry Lavrov * src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: Added SpringUnitSyncLib::HasLuaAI() function , added check for HasLuaAI before using LuaAI functions. 2007-12-17 Dmytry Lavrov * src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: Added SpringUnitSyncLib::HasLuaAI() function , added check for HasLuaAI before using LuaAI functions. 2007-12-17 Andrea Piras * src/ui.cpp: forgot to commit a change 2007-12-17 Andrea Piras * src/spring.cpp, src/springunitsync.cpp, src/ui.cpp, src/ui.h: fixed server spring version not correctly detected, improved assertion check for spring version in unitsync 2007-12-17 Andrea Piras * : commit da3ca4abbc5b4c902583353b883a342ade999b0d Author: Dmytry Lavrov Date: Mon Dec 17 15:40:13 2007 +0200 2007-12-17 Dmytry Lavrov * src/tasserver.cpp, src/ui.cpp, src/utils.h: No nat traversal support for wx 2.6 , warning messagebox for wx 2.6 2007-12-17 Dmytry Lavrov * src/tasserver.cpp, src/ui.cpp: Added logging of all commands; commented out warning about nat traversal not being supported; added support for fixed source ports nat traversal (untested) 2007-12-17 Dmytry Lavrov * src/tasserver.cpp: Fixed hole punching, should work now. More logging. 2007-12-17 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2007-12-17 Andrea Piras * src/battlelisttab.cpp, src/chatpanel.cpp: fixed typo in #ifdef check for wx2.6, now windows version chunks messages based on CR LF line return chars 2007-12-17 Andrea Piras * src/battlelisttab.cpp, src/springlobbyapp.cpp: now the battle list filter won't be available for wx2.6 users, will show a warning at the first time startup 2007-12-17 Andrea Piras * src/chatpanel.cpp: part of disconnect bug fixed ( still present in some functions ) 2007-12-17 Andrea Piras * src/springunitsync.cpp: fixed mods not being refreshed properly 2007-12-16 Dmytry Lavrov * src/tasserver.cpp: made GetCurrentBattle more robust. Now it checks if battle exists, and returns NULL otherwise. 2007-12-16 Dmytry Lavrov * src/tasserver.cpp: Doesn't crash anymore when datagram socket doesn't work. Changed logging. 2007-12-16 Dmytry Lavrov * src/battle.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h: Implemented Hole Punching NAT travelsal. Untested. 2007-12-16 Andrea Piras * src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp: added event to handle HOSTPORT event 2007-12-16 Andrea Piras * src/ui.cpp: fixed unicode problem 2007-12-15 René Milk * src/settings++/custom_msgbox.cpp, src/settings++/tab_simple.cpp: changed default icon to wxNullIcon 2007-12-15 René Milk * Makefile.am, src/settings++/Defs.hpp, src/settings++/frame.cpp, src/settings++/frame.h, src/settings++/helpmenufunctions.cpp, src/settings++/helpmenufunctions.h: preps for help menu 2007-12-15 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2007-12-15 René Milk * : commit adc894319c6c9e8d3e6b8d03f8293ae97b91b444 Author: Andrea Piras Date: Sat Dec 15 13:48:50 2007 +0100 2007-12-15 René Milk * src/addbotdialog.cpp, src/addbotdialog.h, src/battlelisttab.cpp, src/battlelisttab.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/chatlog.cpp, src/chatlog.h, src/connectwindow.cpp, src/connectwindow.h, src/hostbattledialog.cpp, src/hostbattledialog.h, src/settings++/custom_msgbox.cpp, src/settings++/custom_msgbox.h, src/settings++/frame.cpp, src/settings++/panel_pathoption.cpp, src/settings++/tab_abstract.cpp, src/singleplayertab.cpp, src/singleplayertab.h, src/springoptionstab.cpp, src/springoptionstab.h, src/ui.cpp, src/ui.h, src/utils.cpp: moved icon loading to custom message box 2007-12-15 Andrea Piras * src/ui.cpp: fixed unicode problems 2007-12-15 Andrea Piras * src/mapctrl.cpp, src/tasserver.cpp: added back hardcoded limit to team boxes as long as SL has to be TASServer compatible 2007-12-15 Andrea Piras * src/iunitsync.h, src/mainwindow.cpp, src/mainwindow.h, src/springunitsync.cpp: now the spring settings tool will be enabled only if the selected unitsync supports it 2007-12-14 Andrea Piras * : commit 84c8dc9210ce10d0ebb39dd5afae821bcf99de01 Merge: 6a80d1c a8b24f0 Author: Andrea Piras Date: Fri Dec 14 22:51:09 2007 +0100 2007-12-14 René Milk * src/addbotdialog.cpp, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/chatlog.cpp, src/connectwindow.cpp, src/hostbattledialog.cpp, src/settings++/custom_msgbox.cpp, src/settings++/custom_msgbox.h, src/settings++/frame.cpp, src/settings++/panel_pathoption.cpp, src/settings++/tab_abstract.cpp, src/singleplayertab.cpp, src/springoptionstab.cpp, src/ui.cpp, src/utils.cpp: added static window pointer in custommessagebox 2007-12-14 René Milk * : commit 3f1cdc6d48b0c34d9cdd645c01fd16d4d3db190d Author: René Milk Date: Fri Dec 14 19:04:24 2007 +0100 2007-12-14 René Milk * src/images/springsettings.xpm, src/images/star_bronze.xpm, src/images/star_gold.xpm, src/images/star_silver.xpm: fixed xpms 2007-12-14 René Milk * src/settings++/frame.cpp, src/settings++/se_settings.cpp, src/settings++/se_settings.h: added reload to se_settings is called in settings_frame constructor 2007-12-14 René Milk * src/settings++/Defs.hpp, src/settings++/frame.cpp, src/settings++/frame.h, src/settings++/panel_pathoption.cpp, src/settings++/presets.h, src/settings++/se_settings.cpp, src/settings++/se_settings.h, src/settings++/tab_abstract.cpp, src/settings++/tab_audio.cpp, src/settings++/tab_debug.cpp, src/settings++/tab_quality_video.cpp, src/settings++/tab_quality_video.h, src/settings++/tab_simple.cpp, src/settings++/tab_simple.h, src/settings++/tab_ui.cpp: fully tooltipped rearranged tab_quality 2007-12-14 Andrea Piras * src/ibattle.h, src/mapctrl.cpp, src/singleplayerbattle.h: removed hardcoded 16 from MapCtrl::_GetNewRectIndex 2007-12-14 Andrea Piras * src/battle.cpp, src/battle.h, src/tasserver.cpp: removed hardcoded limit on start boxes n° 2007-12-13 Andrea Piras * src/battle.cpp: removed logic asserts if the team box ally number is above 16 from battle class 2007-12-13 Andrea Piras * src/singleplayerbattle.cpp: removed hardcoded 16 from SinglePlayerBattlle::GetFreeColour 2007-12-13 Andrea Piras * src/battle.cpp, src/spring.cpp: removed hardcoded 16 from singleplayer generation script 2007-12-13 Andrea Piras * src/battle.cpp: removed hardcoded 16 from Battle::GetFreeColour 2007-12-13 Andrea Piras * src/ui.cpp: fixed /ingame not working for normal users (no moderator privileges) 2007-12-13 Andrea Piras * springlobby.cbp, src/udpsocket.cpp, src/udpsocket.h: add files for the udp network class 2007-12-13 René Milk * Makefile.am, src/settings++/custom_msgbox.cpp, src/settings++/custom_msgbox.h, src/settings++/frame.cpp, src/settings++/frame.h, src/settings++/panel_pathoption.cpp, src/settings++/tab_abstract.cpp: added customMessageBox 2007-12-13 Dmytry Lavrov * src/spring.cpp: Fixed single player limit = 16 2007-12-13 Andrea Piras * : commit ae14dfa60d2c39e104df56756d0dccf61c43ed5f Author: Dmytry Lavrov Date: Thu Dec 13 16:53:01 2007 +0200 2007-12-13 Andrea Piras * : commit e76b0169ebb9e4a5e214b669953a3abc18d22d69 Author: Dmytry Lavrov Date: Thu Dec 13 15:59:20 2007 +0200 2007-12-13 Andrea Piras * src/chatpanel.cpp: now channel topics uses the string "\n" as carriage return 2007-12-13 Andrea Piras * src/crashreport.cpp, src/crashreport.h, src/springlobbyapp.cpp, src/springoptionstab.cpp: attempts to have it submitted trought http protocol 2007-12-13 René Milk * src/settings++/Defs.hpp, src/settings++/frame.cpp, src/settings++/tab_abstract.cpp: some string changes 2007-12-12 Andrea Piras * src/ui.cpp: added error catching on browser launch 2007-12-12 René Milk * src/settings++/panel_pathoption.cpp, src/settings++/panel_pathoption.h: error panel looks better now 2007-12-12 René Milk * src/settings++/Main.cpp, src/settings++/frame.cpp, src/settings++/panel_pathoption.cpp: fixed core dump on exit in standalone; didnt unload unitsync 2007-12-12 René Milk * src/settings++/frame.cpp, src/settings++/frame.h, src/settings++/panel_pathoption.cpp: implemented recovery from usync fail 2007-12-12 René Milk * Makefile.am, src/settings++/Defs.hpp, src/settings++/frame.cpp, src/settings++/frame.h, src/settings++/panel_pathoption.cpp, src/settings++/panel_pathoption.h, src/settings++/se_settings.cpp, src/settings++/se_settings.h: missing unitsync handling panel 2007-12-12 René Milk * src/settings++/frame.cpp, src/settings++/se_utils.cpp, src/settings++/se_utils.h, src/settings++/tab_abstract.cpp, src/settings++/tab_abstract.h: unitsync exceptions caught waring about redfining std_string in integration mode fixed 2007-12-12 René Milk * src/settings++/Defs.hpp, src/settings++/frame.cpp, src/settings++/tab_abstract.cpp, src/settings++/tab_quality_video.cpp: some todos added moved debug tab to last changed tooltips fro hardware needy options 2007-12-12 Andrea Piras * Makefile.am, src/crashreport.cpp, src/crashreport.h, src/springlobbyapp.cpp, src/stacktrace.cpp, src/stacktrace.h: progress in crash report tool (atm saves to zip container locally), removed obsolete txt stacktrace dump 2007-12-12 René Milk * src/ui.cpp: resolved segafult on messagebox 2007-12-12 René Milk * src/mainwindow.cpp, src/mainwindow.h, src/settings++/frame.cpp, src/settings++/frame.h, src/ui.cpp, src/ui.h: getting segfault on messagebox in settings_frame::handleExternExit() 2007-12-11 René Milk * src/mainwindow.cpp, src/mainwindow.h, src/settings++/frame.cpp, src/settings++/frame.h: kinda working,, missing the messagebox on externalexit 2007-12-11 René Milk * src/mainwindow.cpp, src/settings++/frame.cpp, src/settings++/frame.h, src/settings++/tab_simple.cpp: changed frame destruction so springlobby will terminate correctly 2007-12-11 Andrea Piras * springlobby.cbp, src/crashreport.cpp, src/crashreport.h, src/springlobbyapp.cpp, src/utils.cpp, src/utils.h: first (not working) version of the crash report tool 2007-12-11 René Milk * src/settings++/Defs.hpp, src/settings++/tab_quality_video.cpp, src/settings++/tab_simple.cpp: added minimum graphics cards to shader needed tooltips fixed typos 2007-12-11 René Milk * src/mainwindow.cpp, src/settings++/frame.cpp, src/settings++/frame.h: added forced shutdown of springsettings from sl-mainwindow 2007-12-10 René Milk * src/settings++/frame.h, src/settings++/tab_audio.cpp, src/settings++/tab_debug.cpp, src/settings++/tab_quality_video.cpp, src/settings++/tab_render_detail.cpp, src/settings++/tab_simple.cpp, src/settings++/tab_ui.cpp: slight mods on renderdetail tab removed commented out unitsync includes for good 2007-12-10 René Milk * Makefile.am, src/images/springsettings.xpm, src/settings++/frame.cpp, src/settings++/main.h, src/settings++/se_settings.cpp: added icon 2007-12-10 René Milk * src/settings++/frame.cpp, src/settings++/main.h, src/settings++/se_settings.cpp, src/settings++/se_settings.h, src/settings++/tab_abstract.cpp: resolved some TODOs 2007-12-10 René Milk * src/settings++/se_settings.cpp: added autofindspringdir 2007-12-10 René Milk * src/settings++/Defs.hpp, src/settings++/frame.cpp, src/settings++/frame.h, src/settings++/tab_abstract.cpp, src/settings++/tab_simple.cpp, src/settings++/tab_simple.h: implemented functionality for button on simple tab 2007-12-10 René Milk * src/settings++/Defs.hpp, src/settings++/frame.cpp, src/settings++/tab_abstract.cpp, src/settings++/tab_abstract.h, src/settings++/tab_audio.cpp, src/settings++/tab_debug.cpp, src/settings++/tab_quality_video.cpp, src/settings++/tab_quality_video.h, src/settings++/tab_render_detail.cpp, src/settings++/tab_simple.cpp, src/settings++/tab_ui.cpp: propagation of changes work again config handler only used in abstrct panel 2007-12-10 René Milk * src/settings++/Defs.hpp, src/settings++/tab_audio.cpp, src/settings++/tab_debug.cpp, src/settings++/tab_quality_video.cpp, src/settings++/tab_render_detail.cpp, src/settings++/tab_simple.cpp, src/settings++/tab_simple.h, src/settings++/tab_ui.cpp, src/settings++/tab_ui.h: boxes aligned across tabs, borders, etc 2007-12-10 René Milk * src/settings++/Defs.hpp, src/settings++/tab_render_detail.cpp: fixed sliders 2007-12-10 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2007-12-09 René Milk * src/settings++/frame.cpp: removed broken reset settings 2007-12-09 René Milk * : win works 2007-12-09 René Milk * : commit 1c4cad68a8cebc28888d7bb0275409cefe8061d1 Author: René Milk Date: Sun Dec 9 16:47:27 2007 +0100 2007-12-09 René Milk * src/settings++/frame.cpp, src/settings++/se_settings.h, src/settings++/se_utils.h: part3 2007-12-09 René Milk * src/settings++/se_settings.cpp: part2 2007-12-09 René Milk * src/settings++/frame.cpp: part1 2007-12-05 unknown * src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp: * only channels with unread messages have an icon now\n * fixed MelBot 2007-12-09 René Milk * src/settings++/frame.cpp, src/settings++/se_settings.cpp: 2 2007-12-09 René Milk * src/settings++/Defs.hpp: added todo 2007-12-09 Andrea Piras * src/springunitsync.cpp, src/tasserver.cpp: more unicode fixes 2007-12-09 René Milk * src/settings++/Main.cpp: corrected name 2007-12-09 René Milk * src/settings++/frame.cpp: further string changes Conflicts: src/settings++/frame.cpp 2007-12-09 René Milk * : commit ba697a52e41a2e385cdbd0229b51a69e96c94492 Merge: 751af7c 44264cc Author: René Milk Date: Sun Dec 9 14:31:47 2007 +0100 2007-12-09 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2007-12-09 Leo Moisio * buildbot/master.cfg: buildbot join #springlobby 2007-12-09 Andrea Piras * : commit bcc468fba7e1bcf3164df4c80553d48ed27d141b Author: Andrea Piras Date: Sun Dec 9 12:47:08 2007 +0100 2007-12-09 Jan Holthusen * src/tasserver.cpp: fixed the regex for smurfs 2007-12-09 Andrea Piras * src/chatpanel.cpp, src/tasserver.cpp: fixed unicode problems,fixed regex problems, changed wxString( wxT() ) to _() macro, 2007-12-07 unknown * src/chatpanel.cpp: Moderator -> Admin for server commands 2007-12-07 unknown * src/chatpanel.cpp, src/chatpanel.h, src/server.h, src/tasserver.cpp, src/tasserver.h: further improved the moderator context menu 2007-12-09 René Milk * : commit 43b2a9f6f4ffdf64884f9beb30e63e116408a9cf Author: unknown Date: Fri Dec 7 15:42:49 2007 +0100 2007-12-09 René Milk * : commit 44264ccabe0a43490bc7059597524c813f8cd910 Author: Andrea Piras Date: Sun Dec 9 02:05:59 2007 +0100 2007-12-09 Andrea Piras * src/unitsyncthread.cpp: removed useless log message 2007-12-09 René Milk * src/mapctrl.cpp, src/unitsyncthread.cpp: ansi vs unicode resolved 2007-12-09 René Milk * src/mapctrl.cpp, src/unitsyncthread.cpp: ansi vs unicode resolved 2007-12-09 Andrea Piras * Makefile.am, src/springunitsync.cpp: fixed compilation/include problems 2007-12-09 René Milk * : commit 72affeadc2f825f01c19ff8d2484b9041f4c521a Merge: 1091fb8 a7994bb Author: René Milk Date: Sun Dec 9 00:01:57 2007 +0100 2007-12-08 Andrea Piras * : commit 1091fb81788830c8d7efad07e09ca122a67aa982 Author: René Milk Date: Sat Dec 8 23:39:07 2007 +0100 2007-12-08 René Milk * : commit 91b64250fa008422a0e9bf60fcb9ca76d979b0a7 Author: René Milk Date: Sat Dec 8 23:21:53 2007 +0100 2007-12-08 René Milk * Makefile.am, src/settings++/se_settings.cpp, src/settings++/se_utils.h, src/settings++/tab_quality_video.cpp: no idea 2007-12-07 René Milk * src/settings++/frame.cpp, src/settings++/se_settings.cpp: further string changes 2007-12-07 René Milk * src/settings++/Defs.hpp: strign Capitalization 2007-12-07 René Milk * src/settings++/Defs.hpp: forgot to change branch, should be ui-mods 2007-12-07 Andrea Piras * src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h: added tasserver messages to dispatch necessary infos to make NAT transversal to work 2007-11-26 Andrea Piras * src/server.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/ui.cpp, src/ui.h: refactored spring version check and added support to retrive udpport from tasserver 2007-12-06 Andrea Piras * src/battleroomlistctrl.cpp: fixed unicode problems 2007-12-06 Andrea Piras * : commit 567e8f1534de4bda54ba74cd454eb07c991d6e44 Author: Andrea Piras Date: Thu Dec 6 15:14:48 2007 +0100 2007-12-06 Andrea Piras * src/battleroomlistctrl.cpp: added color sorting to the battleroomlistcontrol 2007-12-06 Andrea Piras * THANKS: added more credits to people who helped the project 2007-12-06 René Milk * Makefile.am, src/settings++/se_settings.cpp, src/settings++/se_utils.h: include refactor part 3 2007-12-05 René Milk * Makefile.am, src/settings++/Main.cpp, src/settings++/frame.cpp, src/settings++/se_utils.cpp, src/settings++/se_utils.h, src/settings++/tab_abstract.cpp, src/settings++/tab_abstract.h, src/settings++/tab_audio.cpp, src/settings++/tab_debug.cpp, src/settings++/tab_quality_video.cpp, src/settings++/tab_render_detail.cpp, src/settings++/tab_render_detail.h, src/settings++/tab_simple.cpp, src/settings++/tab_ui.cpp: include refactor part 2b 2007-12-05 René Milk * src/settings++/tabs.h: include refactor part 2 2007-12-05 René Milk * Makefile.am: semis correction for less rebuilds 2007-12-05 René Milk * : commit ec397a7741193f33d0016dbc3519acf9eeaf2f61 Author: Leo Moisio Date: Wed Dec 5 22:51:36 2007 +0200 2007-12-05 René Milk * src/settings++/Defs.hpp, src/settings++/Main.cpp, src/settings++/frame.cpp, src/settings++/frame.h, src/settings++/main.h, src/settings++/se_settings.cpp, src/settings++/se_settings.h, src/settings++/tab_abstract.cpp, src/settings++/tab_abstract.h, src/settings++/tab_audio.cpp, src/settings++/tab_audio.h, src/settings++/tab_debug.cpp, src/settings++/tab_debug.h, src/settings++/tab_quality_video.cpp, src/settings++/tab_quality_video.h, src/settings++/tab_render_detail.cpp, src/settings++/tab_render_detail.h, src/settings++/tab_simple.cpp, src/settings++/tab_simple.h, src/settings++/tab_ui.cpp, src/settings++/tab_ui.h, src/settings++/tabs.h: include refactor, part 1 2007-12-05 Andrea Piras * src/springlobbyapp.cpp: possibly fixed windows compiling errors 2007-12-05 René Milk * src/mainwindow.cpp, src/mainwindow.h: brought back the settingsframe 2007-12-05 unknown * src/battleroomlistctrl.cpp: all sorting except for colour should work now 2007-12-05 René Milk * src/settings++/Defs.hpp, src/settings++/Main.cpp, src/settings++/frame.cpp, src/settings++/frame.h, src/settings++/main.h, src/settings++/presets.h, src/settings++/tab_abstract.cpp, src/settings++/tab_abstract.h, src/settings++/tab_audio.cpp, src/settings++/tab_audio.h, src/settings++/tab_debug.cpp, src/settings++/tab_debug.h, src/settings++/tab_quality_video.cpp, src/settings++/tab_quality_video.h, src/settings++/tab_render_detail.cpp, src/settings++/tab_render_detail.h, src/settings++/tab_simple.cpp, src/settings++/tab_simple.h, src/settings++/tab_ui.cpp, src/settings++/tab_ui.h, src/settings++/tabs.h: replaced all occurences of settings++ with springsettings 2007-12-05 Andrea Piras * src/springlobbyapp.cpp, src/utils.h: moved wxLogDebugFunc to a lower log devel in release builds, set stdout verbose 2007-12-05 Andrea Piras * src/springlobbyapp.cpp, src/utils.cpp: now the error messages are a bit more scary (and standardized layout) 2007-12-05 Tommy Carlsson * src/unitsyncthread.cpp, src/unitsyncthread.h: Fixed bug where application never terminated fully. 2007-12-05 unknown * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h: * fixed line endings * removed non-working functions 2007-12-05 unknown * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h: * fixes #183 * sorting by ally, team and name works (now default in that order) 2007-12-05 René Milk * src/mainwindow.cpp, src/mainwindow.h: removed my crude settingsframe from sl 2007-12-05 René Milk * src/settings++/frame.cpp: removed multiple call to Destroy() 2007-12-05 Leo Moisio * Makefile.am: fixed the standalone build for springsettings (former settings++) 2007-12-04 René Milk * Makefile.am, src/settings++/Defs.hpp, src/settings++/presets.h, src/settings++/se_settings.cpp, src/settings++/se_settings.h, src/settings++/se_utils.cpp, src/settings++/se_utils.h, src/settings++/tab_abstract.cpp, src/settings++/tab_audio.cpp, src/settings++/tab_debug.cpp, src/settings++/tab_quality_video.cpp, src/settings++/tab_render_detail.cpp, src/settings++/tab_simple.cpp, src/settings++/tab_ui.cpp: got rid of even more std::strings 2007-12-04 René Milk * src/settings++/frame.cpp, src/settings++/frame.h, src/settings++/presets.cpp, src/settings++/presets.h, src/settings++/tab_abstract.cpp: resolved: //TODO figure out why length = 3 doesnt work 2007-12-04 René Milk * src/settings++/Defs.hpp, src/settings++/frame.cpp, src/settings++/presets.h, src/settings++/se_settings.h, src/settings++/tab_abstract.cpp, src/settings++/tab_abstract.h, src/settings++/tab_audio.cpp, src/settings++/tab_audio.h, src/settings++/tab_simple.cpp, src/settings++/tab_simple.h: resolved more TODOs: more video modes audio slider in simpletab ... 2007-12-04 René Milk * src/settings++/Defs.hpp, src/settings++/se_settings.cpp, src/settings++/tab_audio.cpp, src/settings++/tab_debug.cpp, src/settings++/tab_quality_video.cpp, src/settings++/tab_render_detail.cpp, src/settings++/tab_ui.cpp: changed almost all std::string to wxString 2007-12-04 René Milk * src/settings++/frame.cpp, src/settings++/tab_abstract.cpp: did: TODO add cancel option 2007-12-04 René Milk * .gitignore: added unitsync.log to gitignore 2007-12-04 René Milk * src/settings++/tab_abstract.cpp: catches unitsync exceptions when saving 2007-12-04 René Milk * src/mainwindow.cpp, src/settings++/frame.h, unitsync.log: made handlexit public 2007-12-04 Andrea Piras * src/utils.h: logic asserts now triggers an error message, not fatal error (stacktrace wasn't dumped) 2007-12-04 unknown * : commit 6dee32c5c1e85eb2ae2467b342581444670c696c Author: unknown Date: Tue Dec 4 20:06:19 2007 +0100 2007-12-04 René Milk * src/settings++/tab_abstract.cpp, unitsync.log: fiexd segfault on resetting values 2007-12-04 Andrea Piras * : commit f706238efeb7c426520c0535dcb2f8c89ffb371e Author: René Milk Date: Tue Dec 4 18:45:23 2007 +0100 2007-12-04 Andrea Piras * src/springlobbyapp.cpp: less verbosy gui messages (rendundant since i reintroduced the message boxes) 2007-12-04 Andrea Piras * src/connectwindow.cpp, src/hostbattledialog.cpp, src/singleplayertab.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/ui.cpp, src/utils.cpp: fixed merge conflicts 2007-12-04 Andrea Piras * src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/chatlog.cpp, src/connectwindow.cpp, src/hostbattledialog.cpp, src/singleplayertab.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/ui.cpp, src/utils.cpp: Revert "experimental replace of wxMessageBox with wxLogWarning and wxLogMessage" This reverts commit 6abeaad246a2d444faa952cf829ba3f6b23dc1ed. 2007-12-04 René Milk * src/springunitsync.cpp: conflict resolution 2007-12-04 René Milk * : commit 7f93e374697990dc466a9671191b6c2ead87af27 Merge: 351fb5d a675436 Author: René Milk Date: Tue Dec 4 13:37:57 2007 +0100 2007-12-04 Tommy Carlsson * : commit 16c9c234c76533e9223e20e3b17508afc1ab6d9d Author: Tommy Carlsson Date: Tue Dec 4 00:37:17 2007 +0100 2007-12-03 Tommy Carlsson * : commit f05f10ef7b20b92551ec7ed16ac431156328d723 Author: Tommy Carlsson Date: Mon Dec 3 21:46:26 2007 +0100 2007-12-03 Andrea Piras * src/springunitsynclib.cpp: now the app doesn't throw an error anymore when loading an unitsync lib with missing functions 2007-12-03 Andrea Piras * springlobby.cbp, src/utils.h: fixed problems with debug builds of wxwidgets 2007-12-03 Andrea Piras * : commit 128577bb94eb6b271e1c18ab560b130f64fb338e Author: Andrea Piras Date: Mon Dec 3 16:55:03 2007 +0100 2007-12-03 Andrea Piras * src/springlobbyapp.cpp: changed output level of the stacktrace on crash 2007-12-03 Andrea Piras * src/springlobbyapp.cpp, src/utils.cpp, src/utils.h: now app dumps a stacktrace on assert_logic errors 2007-12-03 Andrea Piras * src/springlobbyapp.cpp: finally different verbosity for different log target works!!!!11one 2007-12-03 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2007-12-03 Tommy Carlsson * src/mapctrl.cpp: Fixes #275: Minimap overlap bug. 2007-12-02 Tommy Carlsson * src/singleplayertab.cpp: Fixed minor compile error. 2007-12-02 Tommy Carlsson * src/singleplayertab.cpp, src/singleplayertab.h: Fixed SP unitsync reload bug. Conflicts: src/singleplayertab.cpp 2007-12-02 René Milk * src/settings++/Defs.hpp, src/settings++/frame.cpp, src/settings++/tab_simple.cpp, src/settings++/tab_ui.cpp: added TODOs 2007-12-02 Tommy Carlsson * src/singleplayertab.cpp, src/singleplayertab.h: Fixed SP unitsync reload bug. 2007-12-02 René Milk * Makefile.am, src/mainwindow.cpp, src/mainwindow.h, src/settings++/Defs.hpp, src/settings++/frame.cpp, src/settings++/presets.cpp, src/settings++/presets.h, src/settings++/tab_quality_video.cpp: tools/settings++ opens settings++ 2007-12-02 René Milk * : commit 6d272cdd9febd48688691f497a1b84eb48d017af Merge: 09535dc 96017d7 Author: René Milk Date: Sun Dec 2 20:53:13 2007 +0100 2007-12-02 René Milk * src/settings++/Defs.hpp, src/settings++/se_settings.cpp, src/settings++/se_settings.h, src/settings++/tab_quality_video.cpp: made some warnigs disappear 2007-12-02 René Milk * .gitignore: added my eclipse project file to .gitignore 2007-12-02 René Milk * Makefile.am: commented in settings++ standalone files 2007-12-02 Tommy Carlsson * src/battlemaptab.cpp: A little cleanup in battlemaptab. 2007-12-02 René Milk * Makefile.am, src/settings++/tab_quality_video.cpp: fixes compile errors 2007-12-02 Leo Moisio * Makefile.am: commented out the standalone build for a while 2007-12-02 Leo Moisio * Makefile.am: build both separate and integrated settings++ with autotools by default 2007-12-02 Leo Moisio * : commit d1696d9fea1a90ae6cea99a0588ec74370fb9650 Author: Leo Moisio Date: Sun Dec 2 17:48:17 2007 +0200 2007-12-02 Leo Moisio * .cproject, .project, COMPILATION, COPYING, Makefile.win, README-Settings++, SConstruct, Settings++.dev, Settings++.layout, gpl.txt, src/Main.cpp, src/configHandler.cpp, src/configHandler.h, src/frame.cpp, src/frame.h, src/frame_get_usync.cpp, src/frame_get_usync.h, src/main.h, src/presets.h, src/se_settings.cpp, src/se_settings.h, src/settings++/Main.cpp, src/settings++/configHandler.cpp, src/settings++/configHandler.h, src/settings++/frame.cpp, src/settings++/frame.h, src/settings++/frame_get_usync.cpp, src/settings++/frame_get_usync.h, src/settings++/main.h, src/settings++/presets.h, src/settings++/se_settings.cpp, src/settings++/se_settings.h, src/settings++/tab_abstract.cpp, src/settings++/tab_abstract.h, src/settings++/tab_audio.cpp, src/settings++/tab_audio.h, src/settings++/tab_debug.cpp, src/settings++/tab_debug.h, src/settings++/tab_quality_video.cpp, src/settings++/tab_quality_video.h, src/settings++/tab_render_detail.cpp, src/settings++/tab_render_detail.h, src/settings++/tab_simple.cpp, src/settings++/tab_simple.h, src/settings++/tab_ui.cpp, src/settings++/tab_ui.h, src/settings++/tabs.h, src/tab_abstract.cpp, src/tab_abstract.h, src/tab_audio.cpp, src/tab_audio.h, src/tab_debug.cpp, src/tab_debug.h, src/tab_quality_video.cpp, src/tab_quality_video.h, src/tab_render_detail.cpp, src/tab_render_detail.h, src/tab_simple.cpp, src/tab_simple.h, src/tab_ui.cpp, src/tab_ui.h, src/tabs.h: reorganized tree before project merge 2007-12-02 René Milk * src/Defs.hpp, src/tab_quality_video.cpp, src/tab_render_detail.cpp: dummy tooltips 2007-12-02 René Milk * unitsync.log: deleted unitsyn.log 2007-12-02 René Milk * src/frame.cpp, src/tab_simple.cpp, src/tab_simple.h: added placeholder for infotext on simpletab set selection to first tab on startup 2007-12-02 René Milk * : commit c5ff4f603f7822b80382ec18840e137a7fe6b951 Author: René Milk Date: Sun Dec 2 14:42:17 2007 +0100 2007-12-02 Tommy Carlsson * src/tasserver.cpp: Fixed changing map when hosting. 2007-12-02 Tommy Carlsson * src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: Listing Bot-libs fixed. 2007-12-02 Tommy Carlsson * src/addbotdialog.cpp, src/springunitsync.cpp: Fixed bug in SpringUnitSync::GetAIList(). Added message when no AI's are found in addbotdialog. 2007-12-02 Tommy Carlsson * src/addbotdialog.cpp, src/addbotdialog.h, src/singleplayertab.cpp: Disabled add bot button in SP when no map selected, and disabled add button in addbotdialog when no ai selected. 2007-12-02 Tommy Carlsson * src/mapctrl.cpp: Fixed crashbug when no mod selected in SP. 2007-12-02 Tommy Carlsson * src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: Fixed minimap loading from unitsync. 2007-12-02 Andrea Piras * src/utils.cpp: removed obsolete #include in utils 2007-12-02 Andrea Piras * src/springlobbyapp.cpp: double log target works, but setting different verbosity for each logger doesn't 2007-12-01 René Milk * : commit 7dd85ba552d32a7fdaedaed442999b86648dc5e3 Author: René Milk Date: Sat Dec 1 23:42:17 2007 +0100 2007-12-01 René Milk * src/Defs.hpp, src/frame.cpp, src/frame.h: implemented disable expert mode warning 2007-12-01 René Milk * src/frame.cpp, src/se_settings.cpp, src/se_settings.h, src/tab_abstract.cpp, src/tab_abstract.h: moved storing expertmode to optionshandler 2007-12-01 René Milk * src/configHandler.cpp, src/configHandler.h: rudimentary error message on unitsyn loading failure 2007-12-01 René Milk * src/configHandler.cpp, src/se_settings.cpp, src/se_settings.h: loads unitsync if present, no sanity yet though 2007-12-01 René Milk * SConstruct, src/Defs.hpp, src/se_settings.cpp, src/se_settings.h, src/tabs.h: saving options to wxcongig 2007-12-01 René Milk * : commit 34902a685cbca07ddd643fa39b7dc9a4969e7964 Author: René Milk Date: Sat Dec 1 15:58:05 2007 +0100 2007-12-01 René Milk * src/tab_abstract.cpp: removed output preset values 2007-12-01 René Milk * src/frame.cpp, src/frame.h: switching mode works 2007-12-01 René Milk * src/Defs.hpp, src/frame.cpp: added menuitems for mode selection emtpy handling 2007-12-01 René Milk * src/Defs.hpp: commented out DEFAULT array as it is not used anywhere 2007-12-01 Andrea Piras * src/chatpanel.cpp: fixed unicode problems 2007-12-01 Andrea Piras * src/springoptionstab.cpp: added unitsync path detection for 64 bit gentoo 2007-12-01 Andrea Piras * src/mainwindow.cpp, src/ui.cpp, src/ui.h: removed catched assert in favour to if check (no more annoying msg for windows users) 2007-12-01 René Milk * src/tab_abstract.cpp: reset to default fully implemented and working 2007-12-01 Andrea Piras * src/mainwindow.cpp, src/springlobbyapp.h: fixed SpringLobby spelling, we really phailed for that :P 2007-12-01 René Milk * src/frame.cpp, src/tab_quality_video.cpp: fixed segfault on updateControls in tab_quality 2007-12-01 René Milk * src/frame.cpp: forgot to updateControls on simple tab 2007-12-01 René Milk * src/frame.cpp, src/tab_abstract.cpp, src/tab_abstract.h, src/tab_audio.cpp, src/tab_audio.h, src/tab_debug.cpp, src/tab_debug.h, src/tab_simple.cpp, src/tab_simple.h: dummy implementation compiles 2007-12-01 René Milk * : commit eb4043a847ca8e1a8d2982541a137a31000cb29b Author: René Milk Date: Sat Dec 1 02:07:32 2007 +0100 2007-12-01 René Milk * .cproject, .project: added scons clean to project settings 2007-12-01 René Milk * src/tab_quality_video.h, src/tab_ui.h: fixed compile errors 2007-12-01 René Milk * src/tab_abstract.cpp, src/tab_abstract.h, src/tab_audio.cpp, src/tab_audio.h, src/tab_debug.cpp, src/tab_debug.h, src/tab_quality_video.cpp, src/tab_render_detail.cpp, src/tab_render_detail.h, src/tab_simple.cpp, src/tab_ui.cpp, src/tab_ui.h, src/tabs.h: all pointers to controls are stored all updateControl functions are implemented 2007-12-01 Tommy Carlsson * src/springunitsync.cpp: Temporary caching from main thread. 2007-12-01 René Milk * src/presets.h, src/tab_abstract.cpp, src/tab_abstract.h, src/tab_quality_video.cpp, src/tab_quality_video.h, src/tab_render_detail.cpp, src/tab_render_detail.h, src/tab_simple.cpp: change propagation complete from simple to other tabs 2007-11-30 René Milk * src/presets.h, src/tab_abstract.cpp, src/tab_quality_video.cpp, src/tab_quality_video.h, src/tab_simple.cpp, src/tab_simple.h: propagation working from simple_tab_quality_combobox to tab_quality_video 2007-11-30 René Milk * src/tab_simple.cpp: kp 2007-11-30 Andrea Piras * src/chatpanel.cpp, src/settings.cpp, src/settings.h: now join/part message filtering is set per-channel 2007-11-30 Tommy Carlsson * src/battlemaptab.cpp, src/ibattle.cpp, src/iunitsync.h, src/singleplayertab.cpp, src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.cpp, src/springunitsynclib.h, src/tasserver.cpp: Added hax to dehax TASServers hax map hashes. Also minor unitsync refactor. 2007-11-29 Andrea Piras * src/chatpanel.cpp, src/chatpanel.h, src/settings.cpp, src/settings.h: applied as-id tombom's patch to filter join/part messages 2007-11-29 Tommy Carlsson * src/iunitsync.h, src/springunitsync.h: Some cleaning up 2007-11-28 Tommy Carlsson * src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/hostbattledialog.cpp, src/ibattle.cpp, src/iconimagelist.cpp, src/singleplayertab.cpp, src/spring.cpp, src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.cpp, src/tasserver.cpp, src/ui.cpp: Added try/catch statements where unitsync functions are called since most of the throw exceptions. 2007-11-28 René Milk * src/frame.cpp, src/frame.h, src/presets.h, src/tab_abstract.cpp, src/tab_abstract.h, src/tab_audio.cpp, src/tab_audio.h, src/tab_debug.cpp, src/tab_debug.h, src/tab_quality_video.cpp, src/tab_quality_video.h, src/tab_render_detail.cpp, src/tab_render_detail.h, src/tab_simple.cpp, src/tab_simple.h, src/tab_ui.cpp, src/tab_ui.h, src/tabs.h: simple_tab almost working, no updating of referenced controls yet 2007-11-27 René Milk * src/tab_abstract.cpp, src/tab_simple.cpp: fixed comboboxes (again and hopefully once and for all) 2007-11-27 René Milk * src/Defs.hpp, src/configHandler.cpp, src/presets.h, src/tab_abstract.cpp, src/tab_abstract.h, src/tab_quality_video.cpp, src/tab_quality_video.h, src/tab_simple.cpp, src/tab_simple.h: presets and tab_simple prototype implementation 2007-11-27 Andrea Piras * src/chatpanel.cpp: fixed autoscrolling not working in windows 2007-11-27 Andrea Piras * SpringLobby.fbp: new layout for host dialog 2007-11-27 René Milk * .cproject, .project, src/configHandler.cpp, src/tab_general.cpp, src/tab_general.h, src/tab_mouse.cpp, src/tab_mouse.h, src/tab_rendering.cpp, src/tab_rendering.h, src/tab_video.cpp, src/tab_video.h, src/tabs.h: removed obsolete tab sources; added eclipse project files 2007-11-27 René Milk * src/tab_audio.cpp, src/tab_debug.cpp, src/tab_general.cpp, src/tab_mouse.cpp, src/tab_quality_video.cpp, src/tab_render_detail.cpp, src/tab_rendering.cpp, src/tab_simple.cpp, src/tab_ui.cpp, src/tab_video.cpp: added flag to delete sizers if old one present 2007-11-27 René Milk * SConstruct: typo in SConstruct 2007-11-27 René Milk * SConstruct, src/frame.cpp, src/presets.h, src/simple.cpp, src/tab_simple.cpp, src/tab_simple.h, src/tabs.h: preperations for tab_simple 2007-11-27 René Milk * SConstruct, src/Defs.hpp, src/frame.cpp, src/frame.h, src/tab_quality_video.cpp, src/tab_ui.cpp, src/tab_ui.h, src/tabs.h, unitsync.log: completed tab_ui, removed tab_mouse 2007-11-26 René Milk * src/configHandler.cpp, src/tab_abstract.cpp, src/tab_quality_video.cpp: fixed combobox 2007-11-26 Andrea Piras * src/battlelisttab.cpp, src/hostbattledialog.cpp, src/hostbattledialog.h, src/settings.cpp, src/settings.h, src/tasserver.cpp, src/user.cpp, src/user.h: applied as-is tombom's patch to set rank requiement while hosting 2007-11-26 René Milk * src/frame_get_usync.cpp, src/frame_get_usync.h: prototypes for get_unitsync_frame 2007-11-26 Andrea Piras * src/springunitsync.cpp: slighly better portability 2007-11-26 Andrea Piras * src/nonportable.h, src/springunitsync.cpp: tiny refactor for better code clarity 2007-11-26 Tommy Carlsson * src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h, src/springunitsynclib.cpp, src/springunitsynclib.h: Finally compiles :) 2007-11-25 Leo Moisio * src/battle.cpp: fixed a syntax error that gcc seems to allow 2007-11-25 Leo Moisio * src/battlelist.cpp, src/battlelistctrl.cpp, src/battlelistfilter.cpp, src/battlelisttab.cpp, src/chatlog.cpp, src/nicklistctrl.cpp, src/utils.cpp: changed keyword and to && 2007-11-25 Andrea Piras * src/mainwindow.cpp: forgot to re-enable chat & battlelist panels :P 2007-11-25 Andrea Piras * : removed accidentally committed binary object file 2007-11-25 Andrea Piras * : commit 90b80b045b489042170d3f2e56f7f71457878baf Author: Andrea Piras Date: Sun Nov 25 20:28:53 2007 +0100 2007-11-25 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2007-11-25 Andrea Piras * src/springoptionstab.cpp, src/springoptionstab.h: added gui to choose wich web browser to launch 2007-11-25 Tommy Carlsson * : Merged bd/usync_refac 2007-11-25 Andrea Piras * src/springunitsynclib.cpp: more fixes 2007-11-25 Andrea Piras * src/springunitsynclib.cpp: fixed few compiler errors (still many to fix) 2007-11-25 Andrea Piras * src/springunitsync.cpp, src/springunitsynclib.cpp, src/springunitsynclib.h: HUGE work of implementing unitsync calls, my eyes hurts 2007-11-25 Tommy Carlsson * : temp 2007-11-25 Tommy Carlsson * src/springunitsync.cpp, src/springunitsynclib.cpp: Minor changes 2007-11-25 Andrea Piras * src/springunitsync.cpp: added modname argument to GetSideCount unitsync calls 2007-11-25 Andrea Piras * : commit 494bf273f239e90bab5ee1e4bda580175fa376e3 Merge: d3c44d0 694ba7d Author: Tommy Carlsson Date: Sun Nov 25 00:27:29 2007 +0100 2007-11-25 Tommy Carlsson * src/unitsyncthread.cpp, src/unitsyncthread.h: Changes in UnitSyncThread 2007-11-25 Andrea Piras * src/battleoptionstab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/iconimagelist.cpp, src/iconimagelist.h, src/iunitsync.h, src/mapctrl.cpp, src/spring.cpp, src/springunitsync.cpp, src/springunitsync.h, src/tasserver.cpp: refactored unitsync for threading, added luaAI support, removed GetBotLibPath 2007-11-24 Tommy Carlsson * src/springunitsynclib.cpp, src/springunitsynclib.h, src/utils.h: Functions added to SpringUnitSyncLib 2007-11-24 Tommy Carlsson * springlobby.cbp: Updated project file 2007-11-24 Tommy Carlsson * src/springunitsynclib.cpp, src/springunitsynclib.h: Added missing files 2007-11-24 Andrea Piras * src/chatpanel.cpp: readded accidentally commented lines in chatpanel.cpp 2007-11-24 Andrea Piras * src/chatpanel.cpp, src/utils.h: buildsystem-indipendent definition of HAVE_WX26 & HAVE_WX28 2007-11-24 Andrea Piras * src/chatpanel.cpp: fixed flickering effect in the chat autoscrolling 2007-11-24 Leo Moisio * src/tasserver.cpp: fixed some compiler warnings 2007-11-24 Leo Moisio * src/server.h, src/socket.cpp, src/socket.h, src/tasserver.cpp, src/tasserver.h: typo fix, s/Recive/Receive/g 2007-11-23 Tommy Carlsson * Doxyfile, Makefile.am, src/springunitsync.cpp, src/springunitsync.h: Large Unitsync refactor 2007-11-23 René Milk * src/configHandler.cpp, src/configHandler.h: prototypes for getting unitsync location 2007-11-22 Andrea Piras * src/battle.cpp, src/battle.h, src/battleoptionstab.cpp, src/ibattle.h, src/singleplayerbattle.h: fixed IsFounderMe() not detected properly in ibattle, fixed options tab not grayed when joining a battle 2007-11-22 René Milk * .gitignore, SConstruct: added bin/ obj/ *~ to gitignore 2007-11-22 Andrea Piras * springlobby.cbp: removed __DEBUG__ and __WXDEBUG__ defines in the codeblocks project 2007-11-22 Andrea Piras * src/addbotdialog.cpp, src/battle.cpp, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/chatlog.cpp, src/chatpanel.cpp, src/connectwindow.cpp, src/flagimages.cpp, src/hostbattledialog.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp, src/mainwindow.cpp, src/nicklistctrl.cpp, src/serverevents.cpp, src/singleplayertab.cpp, src/socket.cpp, src/spring.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springprocess.cpp, src/springunitsync.cpp, src/tasserver.cpp, src/ui.cpp, src/utils.h: logging works, console verbosity needs to be set properly 2007-11-22 Andrea Piras * src/springlobbyapp.cpp, src/utils.h: fixed log messages verbosity, fixed wxLogMessage number of args 2007-11-21 René Milk * SConstruct: removed unnneccessary line 2007-11-21 Andrea Piras * src/battleroomtab.cpp: fixed spelling of a variable :P 2007-11-21 Leo Moisio * COMPILATION, COPYING, Makefile.win, Settings++.dev, Settings++.layout, src/Main.cpp, src/frame.cpp, src/frame.h, src/main.h, src/settings.rc, src/tab_abstract.cpp, src/tab_abstract.h, src/tab_audio.cpp, src/tab_audio.h, src/tab_debug.cpp, src/tab_debug.h, src/tab_general.cpp, src/tab_general.h, src/tab_mouse.cpp, src/tab_mouse.h, src/tab_quality_video.cpp, src/tab_quality_video.h, src/tab_render_detail.cpp, src/tab_render_detail.h, src/tab_rendering.cpp, src/tab_rendering.h, src/tab_simple.cpp, src/tab_simple.h, src/tab_video.cpp, src/tab_video.h, src/tabs.h: dos line endings to unix line endings in ALL files 2007-11-21 Andrea Piras * src/battle.cpp, src/battleroomlistctrl.cpp, src/chatpanel.cpp, src/connectwindow.cpp, src/flagimages.cpp, src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp, src/mainwindow.cpp, src/server.cpp, src/socket.cpp, src/spring.cpp, src/springlobbyapp.cpp, src/springprocess.cpp, src/springunitsync.cpp, src/tasserver.cpp, src/ui.cpp, src/utils.h: fixes std::string <> wxString conversion, removed wxDebug & wxLogDebug since they need a debug build of wxWsigets thanks a lot dizekat! 2007-11-21 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2007-11-20 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2007-11-19 Andrea Piras * src/springunitsync.cpp, src/springunitsync.h, src/uiutils.cpp, src/uiutils.h: added unitsync function to list spring replays, added function to extract replay data from filepath 2007-11-18 Andrea Piras * src/chatpanel.cpp: fixed username detection in melbot relayed chat 2007-11-18 Andrea Piras * src/battleroomlistctrl.cpp, src/battleroomtab.cpp: added includes to fix the buildbot 2007-11-18 Leo Moisio * : Merge commit 'bd@springlobby.info/master' 2007-11-18 Andrea Piras * src/ui.cpp: map search on UF working again 2007-11-18 Andrea Piras * src/tasserver.cpp: added EXIT command for comaptibility with aegis' implementation of the new lobby protocol 2007-11-17 Andrea Piras * springlobby.cbp, src/springlobbyapp.cpp, src/utils.h: broke compiling , added std::cout log redirection 2007-11-16 Andrea Piras * src/chatpanel.cpp: removed trailing space 2007-11-16 Andrea Piras * src/chatpanel.cpp: applied chlue's patch to have melbot's renamaed when he's relying irc chat 2007-11-16 Andrea Piras * src/springlobbyapp.cpp: missed to convert a wxLogMessage fucntion 2007-11-16 Andrea Piras * src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/chatlog.cpp, src/connectwindow.cpp, src/hostbattledialog.cpp, src/serverevents.cpp, src/singleplayertab.cpp, src/springoptionstab.cpp, src/ui.cpp: fixed wxLogWarning and wxLogMessage number of args 2007-11-16 Andrea Piras * src/utils.h: fixed parethesis in ASSERTs functions 2007-11-16 Andrea Piras * src/battle.cpp, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/chatlog.cpp, src/chatpanel.cpp, src/ibattle.cpp, src/iconimagelist.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp, src/mainwindow.cpp, src/mapctrl.cpp, src/nicklistctrl.cpp, src/server.cpp, src/serverevents.cpp, src/singleplayerbattle.cpp, src/singleplayertab.cpp, src/socket.cpp, src/spring.cpp, src/springunitsync.cpp, src/tasserver.cpp, src/ui.cpp, src/utils.h: converted all ASSERTs to use wxString 2007-11-16 Andrea Piras * src/battle.cpp, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/channel.cpp, src/chatpanel.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp, src/mainwindow.cpp, src/mapctrl.cpp, src/nicklistctrl.cpp, src/serverevents.cpp, src/spring.cpp, src/springlobbyapp.cpp, src/springprocess.cpp, src/springunitsync.cpp, src/tasserver.cpp, src/ui.cpp: now all logging functions takes wxString instead of std::string 2007-11-16 Andrea Piras * src/battle.cpp, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/channel.cpp, src/chatpanel.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp, src/mainwindow.cpp, src/mapctrl.cpp, src/nicklistctrl.cpp, src/serverevents.cpp, src/spring.cpp, src/springlobbyapp.cpp, src/springprocess.cpp, src/springunitsync.cpp, src/tasserver.cpp, src/ui.cpp, src/utils.cpp, src/utils.h: renamed debug_funct to wxLogDebugFunct 2007-11-16 Andrea Piras * src/battleroomlistctrl.cpp, src/battleroomtab.cpp: now when user pushes cancel when selecting a colour it doesn't sets it to black anymore 2007-11-16 Andrea Piras * src/utils.h: converted all logging functions to wxLog 2007-11-15 Andrea Piras * src/socket.cpp, src/tasserver.cpp, src/utils.h: forgot some debug() conversions, moved ASSERT logging functions to wxLog calls 2007-11-13 Rene Milk * SConstruct, src/configHandler.cpp, src/configHandler.h: unitsync calls working git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@36 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-13 Rene Milk * : deleted empty spring subdir git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@35 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-13 Rene Milk * src/spring/ConfigHandler.cpp, src/spring/ConfigHandler9.h, src/spring/DotfileHandler.cpp, src/spring/DotfileHandler.h, src/spring/RegHandler.cpp, src/spring/RegHandler.h, src/spring/errorhandler.cpp, src/spring/errorhandler.h: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@33 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-13 Rene Milk * SConstruct, src/configHandler.cpp, src/configHandler.h, src/spring/ConfigHandler.cpp, src/spring/ConfigHandler.h, src/spring/ConfigHandler9.h, src/tab_quality_video.cpp, src/tabs.h: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@32 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-13 Rene Milk * SConstruct, src/Main.cpp, src/tab_quality_video.cpp: removed wx static libs git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@31 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-13 Rene Milk * src/tab_abstract.cpp, src/tab_quality_video.cpp: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@30 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-12 Andrea Piras * src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/chatlog.cpp, src/connectwindow.cpp, src/hostbattledialog.cpp, src/singleplayertab.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/ui.cpp, src/utils.cpp: experimental replace of wxMessageBox with wxLogWarning and wxLogMessage 2007-11-12 Andrea Piras * src/battle.cpp, src/battleroomlistctrl.cpp, src/chatpanel.cpp, src/flagimages.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp, src/mainwindow.cpp, src/nicklistctrl.cpp, src/serverevents.cpp, src/socket.cpp, src/spring.cpp, src/springlobbyapp.cpp, src/springprocess.cpp, src/springunitsync.cpp, src/tasserver.cpp, src/ui.cpp: started basic handing using wxLog for error, info and stadard messages, lots of work to do yet 2007-11-11 Leo Moisio * : Merge commit 'zifi/master' 2007-11-11 Rene Milk * SConstruct, src/Defs.hpp, src/tab_abstract.cpp, src/tab_abstract.h, src/tab_mouse.cpp, src/tab_quality_video.cpp, src/tab_render_detail.cpp: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@29 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-11 Tommy Carlsson * Makefile.am: Added new files to Makefile.am 2007-11-11 Tommy Carlsson * : commit b373876be83178abfd0f6102b531686693cfa1f2 Merge: 3ede89b 3f6679e Author: Tommy Carlsson Date: Sun Nov 11 02:23:29 2007 +0100 2007-11-11 Tommy Carlsson * src/images/rank4.xpm, src/images/rank5.xpm, src/images/rank6.xpm: Fixed xpm files 2007-11-11 Andrea Piras * : commit 320fc0516503a8d5ee6a509a85ea840b71c30419 Author: Andrea Piras Date: Sun Nov 11 01:45:54 2007 +0100 2007-11-11 Leo Moisio * : Merge commit 'tc@springlobby.info/master' 2007-11-10 Andrea Piras * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp, src/battleroomtab.h: now user color selecting is made using OS's native dialog 2007-11-10 Tommy Carlsson * src/settings.cpp, src/settings.h, src/springunitsync.cpp: Fixes #229: specify cache location 2007-11-10 Tommy Carlsson * src/springunitsync.cpp: Fixed crash bug when units cache file is empty 2007-11-09 Tommy Carlsson * src/tasserver.cpp: Fixed JOINBATTLE server command 2007-11-09 Tommy Carlsson * src/iconimagelist.cpp, src/iconimagelist.h, src/user.h: Rank images now used 2007-11-09 Tommy Carlsson * src/images/rank4.xpm, src/images/rank5.xpm, src/images/rank6.xpm: Fixed the rank images 2007-11-09 Tommy Carlsson * src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp: TASServer 0.35 hosting support added 2007-11-05 Andrea Piras * src/images/star_bronze.xpm, src/images/star_gold.xpm, src/images/star_silver.xpm: added prototypes for 2 new rank icons 2007-11-05 Rene Milk * src/tab_render_detail.cpp: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@28 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-05 Rene Milk * Makefile.win, Settings++.layout, src/Defs.hpp, src/tab_quality_video.cpp, src/tab_quality_video.h, src/tab_render_detail.cpp: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@27 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-05 Rene Milk * SConstruct, src/frame.cpp, src/tabs.h: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@26 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-05 Rene Milk * Makefile.win, Settings++.dev, Settings++.layout, src/Defs.hpp, src/frame.cpp, src/frame.h, src/tab_abstract.cpp, src/tab_quality_video.cpp, src/tab_quality_video.h, src/tabs.h: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@25 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-05 Andrea Piras * src/springlobbyapp.cpp: added stacktrace hash to the stdout dump 2007-11-05 Rene Milk * SConstruct, src/tab_render_detail.cpp, src/tabs.h: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@24 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-05 Rene Milk * src/tab_render_detail.cpp, src/tab_render_detail.h: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@23 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-05 Rene Milk * Makefile.win, Settings++.dev, Settings++.layout, src/Defs.hpp, src/frame.cpp, src/frame.h, src/tab_abstract.cpp, src/tabs.h: first layout changes (tab_render_detail.cpp) git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@22 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-05 Rene Milk * Makefile.win, Settings++.dev, Settings++.layout, src/Defs.hpp, src/settings.rc: pre major layout changes git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@21 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-04 Andrea Piras * : commit 822a81cd0130ff6dc3a1a3362bc1f9a7230dd724 Author: Tommy Carlsson Date: Sun Nov 4 19:20:36 2007 +0100 2007-11-04 Tommy Carlsson * src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainchattab.h, src/ui.cpp: Fixes #207: Online state not detected in ChatPanel 2007-11-04 Leo Moisio * gentoo/spring-overlay/games-strategy/spring-svn/Manifest, gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-20070716 .ebuild, gentoo/spring-overlay/games-strategy/spring/Manifest, gentoo/spring-overlay/games-strategy/spring/spring-0.75_p2.ebuild: fixed a fatal typo in spring ebuilds 2007-11-04 Leo Moisio * : Merge commit 'bd/master' into to-svn 2007-11-04 Rene Milk * COMPILATION, Makefile.win, Settings++.layout, src/frame.cpp: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@19 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-04 Rene Milk * SConstruct: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@18 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-04 Rene Milk * Makefile.win, Settings++.dev, Settings++.layout, src/frame.cpp, src/frame.h: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@17 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-04 Rene Milk * COMPILATION: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@16 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-04 Rene Milk * SConstruct: fixed SConstruct for 0.97 git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@15 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-04 Rene Milk * src/frame.cpp: fixed missing wxT() in frame.cpp git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@14 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-04 Rene Milk * SConstruct: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@13 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-04 Rene Milk * Makefile.win, Settings++.layout, src/Defs.hpp, src/frame.cpp, src/frame.h, src/tab_abstract.cpp, src/tab_abstract.h: implemented on demand save git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@12 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-04 Andrea Piras * src/stacktrace.cpp: changed line separator identifier in the stracktrace builder 2007-11-04 Andrea Piras * : commit 60e08f647d2f95a80cc1a409362602a78b67a449 Merge: 0eabed1 61b2fc2 Author: Andrea Piras Date: Sun Nov 4 00:25:17 2007 +0100 2007-11-04 Tommy Carlsson * src/battleoptionstab.cpp, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/ui.cpp: Applied remram's restrictions reload restrict patch 2007-11-03 Tommy Carlsson * src/socket.cpp, src/socket.h: Fixed some bugs in Socket 2007-11-03 Rene Milk * Makefile.win, Settings++.layout, src/tab_abstract.h: pre save on demand git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@11 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-03 Rene Milk * Makefile.win, Settings++.dev, Settings++.layout: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@10 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-03 Rene Milk * : git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@9 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-03 Tommy Carlsson * src/battlelist.cpp, src/battlelistctrl.cpp, src/battlelisttab.cpp, src/server.h: Removed some warnings 2007-11-03 Rene Milk * COPYING, Makefile.win, Project2.dev, Project2.layout, Settings++.dev, Settings++.layout, gpl.txt, src/ConfigHandler.cpp, src/ConfigHandler.h, src/Defs.hpp, src/DotfileHandler.cpp, src/DotfileHandler.h, src/Main.cpp, src/RegHandler.cpp, src/RegHandler.h, src/errorhandler.cpp, src/errorhandler.h, src/frame.cpp, src/frame.h, src/main.h, src/spring/ConfigHandler.cpp, src/spring/ConfigHandler.h, src/spring/DotfileHandler.cpp, src/spring/DotfileHandler.h, src/spring/RegHandler.cpp, src/spring/RegHandler.h, src/spring/errorhandler.cpp, src/spring/errorhandler.h, src/tab_abstract.cpp, src/tab_abstract.h, src/tab_audio.cpp, src/tab_audio.h, src/tab_debug.cpp, src/tab_debug.h, src/tab_general.cpp, src/tab_general.h, src/tab_mouse.cpp, src/tab_mouse.h, src/tab_rendering.cpp, src/tab_rendering.h, src/tab_simple.cpp, src/tab_simple.h, src/tab_video.cpp, src/tab_video.h, src/tabs.h: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@7 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-02 Rene Milk * SConstruct: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@6 b37137be-173c-410d-ac9e-2715a310e01f 2007-11-02 Leo Moisio * : commit 0eabed18c583d0710e68e672db108863f5836256 Author: Leo Moisio Date: Fri Nov 2 00:08:14 2007 +0200 2007-11-02 Leo Moisio * gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-20070716 .ebuild, gentoo/spring-overlay/games-strategy/spring/spring-0.75_p2.ebuild: Ebuild: boost >= 1.34 is not tested for threads useflag, but older boost is. 2007-10-31 Rene Milk * SConstruct: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@5 b37137be-173c-410d-ac9e-2715a310e01f 2007-10-31 Rene Milk * Makefile.win, Project2.dev, Project2.layout, src/Main.cpp, src/frame.cpp, src/frame.h, src/main.h: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@4 b37137be-173c-410d-ac9e-2715a310e01f 2007-10-30 Rene Milk * SConstruct, src/frame.cpp: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@3 b37137be-173c-410d-ac9e-2715a310e01f 2007-10-30 Rene Milk * Makefile.win, Objects/MingW/Project2_private.h, Objects/MingW/Project2_private.rc, Project2.dev, Project2.layout, SConstruct, Settings.dev, Settings.layout, src/Defs.hpp, src/Dialog.cpp, src/Dialog.hpp, src/Main.cpp, src/Main.hpp, src/StdAfx.cpp, src/StdAfx.h, src/Window.cpp, src/Window.hpp, src/frame.cpp, src/frame.h, src/main.h, src/mmgr.cpp, src/mmgr.h, src/simple.cpp, src/tab_abstract.cpp, src/tab_abstract.h, src/tab_audio.cpp, src/tab_audio.h, src/tab_debug.cpp, src/tab_debug.h, src/tab_general.cpp, src/tab_general.h, src/tab_mouse.cpp, src/tab_mouse.h, src/tab_rendering.cpp, src/tab_rendering.h, src/tab_simple.cpp, src/tab_simple.h, src/tab_video.cpp, src/tab_video.h, src/tabs.h: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@2 b37137be-173c-410d-ac9e-2715a310e01f 2007-10-29 Rene Milk * Makefile.win, SConstruct, Settings.dev, Settings.layout, src/ConfigHandler.cpp, src/ConfigHandler.h, src/Defs.hpp, src/Dialog.cpp, src/Dialog.hpp, src/DotfileHandler.cpp, src/DotfileHandler.h, src/Main.cpp, src/Main.hpp, src/RegHandler.cpp, src/RegHandler.h, src/StdAfx.cpp, src/StdAfx.h, src/Window.cpp, src/Window.hpp, src/errorhandler.cpp, src/errorhandler.h, src/mmgr.cpp, src/mmgr.h: git-svn-id: file:///tmp/koshi-svn-magic/springlobby.git@1 b37137be-173c-410d-ac9e-2715a310e01f 2007-10-24 Leo Moisio * : commit 353d221494877bae49b075b134ce66e24d37adcc Author: Tobi Vollebregt Date: Wed Oct 24 11:20:24 2007 +0200 2007-10-15 Andrea Piras * src/battleoptionstab.cpp: disabled some controls wich have no code yet, fixed bahviour of clear restrictions button 2007-10-14 Andrea Piras * src/utils.cpp: fixed wxString conversion in debug_error message for windows 2007-10-14 Andrea Piras * src/battlelistfilter.cpp: now the filter is capable of searching using the refined version of mod too, while relis only on refined for map 2007-10-14 Andrea Piras * SpringLobby.fbp: more layout changees to the report dialog 2007-10-14 Andrea Piras * src/stacktrace.cpp: better visual appeal of stacktrace 2007-09-24 Andrea Piras * Makefile.am, SpringLobby.fbp, src/springlobbyapp.cpp, src/stacktrace.cpp: few code beautifies started adding crash dialog in the wxFormBuilder project added the new files to MakeFile.am 2007-09-23 Andrea Piras * src/springlobbyapp.cpp, src/stacktrace.cpp: added hash tag for bugreport to prevent duplicate auto-reports 2007-09-23 Andrea Piras * src/springlobbyapp.cpp, src/stacktrace.cpp: beautifed stacktrace output and removed double call 2007-09-23 Andrea Piras * src/springlobbyapp.cpp, src/stacktrace.cpp, src/stacktrace.h: now app dumps a stacktrace to stdout when crash 2007-09-23 Andrea Piras * springlobby.cbp, src/springlobbyapp.cpp, src/springlobbyapp.h, src/stacktrace.cpp, src/stacktrace.h: added basic stack frame processor 2007-10-14 Andrea Piras * src/battle.h, src/battlelistfilter.cpp, src/nicklistctrl.cpp: more fix for the buildbot, removed few warnings 2007-10-13 Andrea Piras * src/battlelistfilter.cpp, src/flagimages.cpp: patch by de_little_bubi: flag not found doesn't generate an error message anymore(now a warning) and fixed ids in battlelistfilter.cpp 2007-10-13 Andrea Piras * src/nicklistctrl.cpp: lol forgot the actual include 2007-10-13 Andrea Piras * src/nicklistctrl.cpp: even more includes for buildbot, removed some useless legacy code & includes 2007-10-13 Andrea Piras * src/battlelistfilter.cpp: more fixes for the buildbot & for the windows version 2007-10-13 Andrea Piras * Makefile.am, src/battlelistctrl.cpp: possibily fixed buildbot problems 2007-10-13 Leo Moisio * : commit a9da87d75ee3552ae200175325347323eab722ae Author: Andrea Piras Date: Sat Oct 13 16:17:37 2007 +0200 2007-10-13 Andrea Piras * src/battlelisttab.cpp: fixed merge conflicts 2007-10-13 Andrea Piras * : commit 399806727cb1c0f4f3715b91e90ba2fb67c9a411 Author: Andrea Piras Date: Sat Oct 13 15:57:11 2007 +0200 2007-10-13 Andrea Piras * : commit 7ade616f38c7636a24ab66bae2019ec91b6d71de Author: Andrea Piras Date: Sat Oct 13 03:56:23 2007 +0200 2007-10-13 Andrea Piras * src/battlelistfilter.cpp: fixed button labels in battlelistfilter 2007-10-13 Andrea Piras * src/battlelistfilter.cpp, src/battlelistfilter.h: now filter works again 2007-10-13 Andrea Piras * SpringLobby.fbp, src/battle.h, src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelistfilter.cpp, src/battlelistfilter.h, src/battlelisttab.cpp: now filter is a panel, fixed status sorting priority, changed status listbox to multiple checkbox , now the filter doesn't work *_* 2007-10-13 Leo Moisio * : commit ff2b220f7b8a7d0867200ad726368c005cd79d46 Author: Andrea Piras Date: Tue Oct 9 02:28:48 2007 +0200 2007-10-09 Andrea Piras * SpringLobby.fbp: more gui fixes for the filter 2007-10-09 Andrea Piras * SpringLobby.fbp: updated project file to use form & fixed sizers 2007-10-08 Andrea Piras * src/battlelistctrl.cpp: now sorting columns in battle list works 2007-10-08 Andrea Piras * springlobby.cbp, src/battlelist.cpp, src/battlelistctrl.cpp, src/battlelistfilter.cpp, src/battlelistfilter.h, src/nicklistctrl.cpp: fixed many localization probs fixced code blocks project now filter works 2007-10-08 Andrea Piras * src/battle.cpp, src/battle.h, src/battlelist.cpp, src/battlelist.h, src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.cpp, src/battlelisttab.h, src/battleroomtab.h, src/chatlog.cpp, src/mainwindow.cpp, src/nicklistctrl.cpp, src/nicklistctrl.h, src/server.cpp, src/server.h, src/ui.cpp, src/ui.h, src/utils.cpp, src/utils.h: applied as-is bubi's patch 2007-10-07 Leo Moisio * THANKS: dummy commit to make buildbot generate new packages 2007-10-07 Leo Moisio * THANKS: dummy commit to make buildbot generate new packages 2007-10-07 Leo Moisio * THANKS: dummy commit to make buildbot generate new packages 2007-10-07 Andrea Piras * src/ui.cpp: Revert "added additional messages when trying to launch a second instance of spring" bad bad me, this does more harm than good This reverts commit 12eb4694184a7b70d434caf0dd56adcdb13e1d03. 2007-10-04 Andrea Piras * src/battleroomtab.cpp: improved enable/disable controls in battles 2007-10-04 Andrea Piras * src/ui.cpp: added additional messages when trying to launch a second instance of spring 2007-10-04 Andrea Piras * src/battlelisttab.cpp, src/battlelisttab.h, src/chatpanel.cpp, src/mainjoinbattletab.cpp, src/mainwindow.cpp, src/mainwindow.h, src/ui.cpp: added event driven GUI enable/disable for controls 2007-10-03 Andrea Piras * src/battlelisttab.cpp, src/singleplayertab.cpp, src/ui.cpp, src/ui.h: now the lobby warns if spring is already running before joining/hosting/starting singleplayer games 2007-10-03 Andrea Piras * src/iunitsync.h, src/mapctrl.cpp, src/mapctrl.h, src/socket.cpp, src/springoptionstab.cpp, src/springprocess.cpp, src/springunitsync.cpp, src/springunitsync.h, src/ui.cpp, src/ui.h, src/unitsyncthread.cpp, src/unitsyncthread.h: now master branch is finally stable, unstable material will remain in branches Revert "Experimental unitsync thread support." This reverts commit bfe7e1b638f115b7f4bab6a01e691797424bec3a. 2007-10-03 Andrea Piras * src/battlemaptab.cpp, src/ibattle.cpp, src/iunitsync.h, src/singleplayertab.cpp, src/springunitsync.cpp, src/springunitsync.h, src/ui.cpp, src/ui.h, src/unitsyncthread.cpp: first step to bring back stability into master branch Revert "Experimental GetMapInfoEx thread support" This reverts commit cd4e1daffaf12eb7a41466bab274ff11a9df2605. 2007-09-25 Andrea Piras * src/ui.cpp: changed unknown files search url to reflect the new site 2007-09-25 Andrea Piras * src/battlelistctrl.cpp, src/battlelisttab.cpp, src/chatpanel.cpp, src/mainwindow.cpp, src/settings.cpp, src/settings.h, src/ui.cpp, src/ui.h: added setting to chose wich browser to launch to open links 2007-09-25 Andrea Piras * src/tasserver.cpp, src/utils.cpp, src/utils.h: fixed tabs truncating chat line messages 2007-09-24 Leo Moisio * : Merge commit 'bd/master' 2007-09-20 Andrea Piras * springlobby.cbp: removed an old deleted icon from the codeblocks project 2007-09-20 Andrea Piras * src/ui.cpp: added again /rename to /help after my mistake in reverting the commit 2007-09-20 Andrea Piras * : commit 9904436675ee19dd8597aebaddd3a326ad29f7ab Author: Andrea Piras Date: Thu Sep 20 18:50:56 2007 +0200 2007-09-20 Andrea Piras * springlobby.cbp: removed useless link in codeblocks windows targets 2007-09-20 Andrea Piras * springlobby.cbp: changed working dir for GNU targets in codeblocks 2007-09-20 Andrea Piras * springlobby.cbp: removed "all" virtual build target in codeblocks 2007-09-20 Andrea Piras * springlobby.cbp: added codeblocks windows profiling build target 2007-09-20 Andrea Piras * src/ui.cpp: Revert "forgot to add /rename to the list of available commands in /help" This reverts commit bbd40425da021db53a0af4b0a4b79d14159523cb. 2007-09-20 Andrea Piras * springlobby.cbp: added profiling build targets for codeblocks 2007-09-20 Andrea Piras * src/ui.cpp: forgot to add /rename to the list of available commands in /help 2007-09-20 Andrea Piras * src/tasserver.cpp: added /rename command 2007-09-19 Andrea Piras * src/springlobby.rc: fixed manifest file (windows look 'n feel), thanks for helping, De_Little_Bubi 2007-09-19 Andrea Piras * springlobby.cbp: fixed resource compiling include paths in the codeblock projects 2007-09-19 Leo Moisio * buildbot/master.cfg: buildbot needs to regenerate build system just in case 2007-09-19 Leo Moisio * Makefile.am: Fixed a FTBFS when locale was german. 2007-09-19 Leo Moisio * : Merge commit 'bd/master' 2007-09-19 Leo Moisio * tools/fix-xpm: Tool for fixing xpm files to compile as c++ source with gcc 4.2 and newer. 2007-09-19 Leo Moisio * .gitignore: git ignores all autotools-generated files 2007-09-19 Leo Moisio * configure.ac: Put most autotools generated files in their own dir to keep the main dir uncluttered. 2007-09-19 Leo Moisio * autogen.sh: removed unnecessary special handling of config.{guess,sub} 2007-09-19 Leo Moisio * AUTHORS: Added BrainDamage. 2007-09-18 Andrea Piras * src/mapctrl.cpp: now the up/down arrows in singleplayer makes bonus to step by 5 2007-09-18 Andrea Piras * src/mapctrl.cpp, src/mapctrl.h: fixed placements & text size in the players boxesa in singleplayer 2007-09-17 Tommy Carlsson * springlobby.cbp, src/nonautotools.cpp: Added simple non autotools revision() function 2007-09-16 Tommy Carlsson * src/ibattle.h, src/mapctrl.cpp, src/mapctrl.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/singleplayertab.cpp: Patch by BrainDamage. Bonus in singleplayer. git-svn-id: http://svn.springlobby.info/trunk@677 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-16 Leo Moisio * Makefile.am, configure.ac, src/revision.cpp.in, src/revision.h, src/utils.cpp: Built from revision is now calculated when possible. git-svn-id: http://svn.springlobby.info/trunk@676 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-16 Tommy Carlsson * src/battlemaptab.cpp, src/ibattle.cpp, src/iunitsync.h, src/singleplayertab.cpp, src/springunitsync.cpp, src/springunitsync.h, src/ui.cpp, src/ui.h, src/unitsyncthread.cpp: Experimental GetMapInfoEx thread support git-svn-id: http://svn.springlobby.info/trunk@675 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-16 Tommy Carlsson * src/iunitsync.h, src/mapctrl.cpp, src/mapctrl.h, src/socket.cpp, src/springoptionstab.cpp, src/springprocess.cpp, src/springunitsync.cpp, src/springunitsync.h, src/ui.cpp, src/ui.h, src/unitsyncthread.cpp, src/unitsyncthread.h: Experimental unitsync thread support. git-svn-id: http://svn.springlobby.info/trunk@674 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-15 Leo Moisio * Makefile.am, configure.ac: Windres support for mingw build, resource file compiled and linked in. You can select another windres by ./configure WINDRES=/path/to/windres if the default can not find it for you. git-svn-id: http://svn.springlobby.info/trunk@673 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-15 Lasse Karkkainen * gentoo/overlay/games-util/springlobby-svn/Manifest: New digests git-svn-id: http://svn.springlobby.info/trunk@672 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-14 Tommy Carlsson * springlobby.cbp, src/iunitsync.h, src/springlobby.rc, src/springlobby.rs, src/springoptionstab.cpp, src/springunitsync.cpp, src/springunitsync.h, src/ui.cpp, src/unitsyncthread.h: SpringUnitSync threadsafe. Fixed .rc file. git-svn-id: http://svn.springlobby.info/trunk@671 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-14 Tommy Carlsson * src/chatpanel.cpp, src/chatpanel.h, src/serverevents.cpp, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp: Patch by tombom. Autojoin channels. Fixes #91 git-svn-id: http://svn.springlobby.info/trunk@670 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-14 Tommy Carlsson * Makefile.am, springlobby.cbp, src/unitsyncthread.cpp, src/unitsyncthread.h: Added new files for unitsyncthread git-svn-id: http://svn.springlobby.info/trunk@669 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-14 Tommy Carlsson * src/battle.cpp: Patch by BrainDamage. Message when changing bot bonus owned by others git-svn-id: http://svn.springlobby.info/trunk@668 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-13 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/ibattle.h, src/server.h, src/tasserver.cpp, src/tasserver.h: Patch by BrainDamage. Set handicap in multiplayer. Fixes #123 git-svn-id: http://svn.springlobby.info/trunk@667 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-13 Leo Moisio * autogen.sh: made build sys bootstrap failure message more helpful git-svn-id: http://svn.springlobby.info/trunk@666 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-13 Tommy Carlsson * src/chatpanel.cpp, src/spring.cpp: Fixed log bug and problem with whitespaces in path when starting spring. Fixes #189 git-svn-id: http://svn.springlobby.info/trunk@665 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-13 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battleoptionstab.cpp, src/ibattle.cpp, src/ibattle.h, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h, src/singleplayerbattle.cpp, src/singleplayertab.cpp, src/springunitsync.cpp, src/springunitsync.h: Unit restrictions in signle player works git-svn-id: http://svn.springlobby.info/trunk@664 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-12 Tommy Carlsson * src/battlemaptab.cpp, src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h, src/tasserver.cpp: Login failed messages fixed. Cache unitsync unitnames. git-svn-id: http://svn.springlobby.info/trunk@663 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-12 Tommy Carlsson * src/singleplayertab.cpp: Fixed some bugs in Singleplayer tab git-svn-id: http://svn.springlobby.info/trunk@662 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-10 Tommy Carlsson * src/battlelisttab.cpp, src/ibattle.cpp, src/ibattle.h, src/mapctrl.cpp, src/springlobbyapp.cpp, src/springunitsync.cpp: Fixes #196 git-svn-id: http://svn.springlobby.info/trunk@659 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-10 Tommy Carlsson * src/chatlog.cpp, src/chatlog.h, src/chatpanel.cpp: Fixed a crashbug and lso some changes to chat logs git-svn-id: http://svn.springlobby.info/trunk@658 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-09 Tommy Carlsson * src/agreementdialog.cpp, src/uiutils.cpp: Patch by BrainDamage. Fixes #170 git-svn-id: http://svn.springlobby.info/trunk@657 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-08 Tommy Carlsson * Makefile.am, src/maplistctrl.cpp, src/maplistctrl.h, src/mapselectdialog.cpp, src/mapselectdialog.h: Added new files. git-svn-id: http://svn.springlobby.info/trunk@656 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-08 Tommy Carlsson * src/mapctrl.cpp, src/mapctrl.h, src/singleplayertab.cpp, src/springunitsync.cpp, src/uiutils.cpp: Fixes #151 git-svn-id: http://svn.springlobby.info/trunk@655 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-08 Tommy Carlsson * src/uiutils.cpp: first attempt of regex git-svn-id: http://svn.springlobby.info/trunk@654 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-08 Tommy Carlsson * src/uiutils.cpp, src/uiutils.h: initial version, regexes not implemeted yet git-svn-id: http://svn.springlobby.info/trunk@653 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-07 Tommy Carlsson * src/ui.cpp: Fixed shoemessage problems. Fixes #153. git-svn-id: http://svn.springlobby.info/trunk@652 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-07 Tommy Carlsson * src/chatpanel.cpp, src/tasserver.cpp: Fixed forceleavechannel command. Fixes#190. git-svn-id: http://svn.springlobby.info/trunk@651 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-07 Tommy Carlsson * src/chatlog.cpp, src/chatpanel.cpp, src/chatpanel.h: Fixed crash bug when disconnecting. git-svn-id: http://svn.springlobby.info/trunk@650 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-07 Tommy Carlsson * src/chatpanel.cpp, src/chatpanel.h: Crash bug when closing channel chatpanel possibly fixed. git-svn-id: http://svn.springlobby.info/trunk@649 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-07 Tommy Carlsson * src/spring.cpp: Fixes singleplayer bug. git-svn-id: http://svn.springlobby.info/trunk@648 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-07 Tommy Carlsson * src/chatlog.cpp, src/chatpanel.cpp, src/springoptionstab.cpp: Patch by De_little_Bubi. ChatLog cleanup. git-svn-id: http://svn.springlobby.info/trunk@647 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-07 Tommy Carlsson * src/chatlog.cpp: Compile errors fixed again. git-svn-id: http://svn.springlobby.info/trunk@646 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-07 Tommy Carlsson * Makefile.am: Files added to Makefile.am git-svn-id: http://svn.springlobby.info/trunk@645 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-07 Tommy Carlsson * src/chatlog.cpp, src/chatlog.h, src/chatpanel.cpp, src/chatpanel.h: Compile errors fixed. git-svn-id: http://svn.springlobby.info/trunk@644 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-07 Tommy Carlsson * springlobby.cbp, src/chatpanel.cpp, src/chatpanel.h, src/settings.cpp, src/settings.h, src/springoptionstab.cpp, src/springoptionstab.h: Patch by De_little_Bubi. Chat logs saved. Fixes #179. git-svn-id: http://svn.springlobby.info/trunk@643 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-06 Tommy Carlsson * src/springunitsync.cpp: Uses png files for map chache. git-svn-id: http://svn.springlobby.info/trunk@642 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-06 Tommy Carlsson * src/chatpanel.cpp, src/user.h: Server commands work in all chatpanels. git-svn-id: http://svn.springlobby.info/trunk@641 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-06 Tommy Carlsson * src/tasserver.cpp: Fixed /topic /chanmsg. git-svn-id: http://svn.springlobby.info/trunk@640 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-06 Tommy Carlsson * src/tasserver.cpp: /ban /unban /kick fixed. git-svn-id: http://svn.springlobby.info/trunk@639 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-06 Tommy Carlsson * src/tasserver.cpp: Getlastlogin time admin command fixed. git-svn-id: http://svn.springlobby.info/trunk@638 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-06 Tommy Carlsson * src/tasserver.cpp: Getingame time admin command fixed. git-svn-id: http://svn.springlobby.info/trunk@637 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-06 Tommy Carlsson * src/ui.cpp: On battle closed resets state for all users still in battle. git-svn-id: http://svn.springlobby.info/trunk@636 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-06 Tommy Carlsson * Makefile.am, src/chatpanel.cpp, src/chatpanel.h, src/iconimagelist.cpp, src/iconimagelist.h, src/images/admin_away.xpm, src/images/admin_broom.xpm, src/images/admin_ingame.xpm, src/images/away.xpm, src/images/bot_broom.xpm, src/images/bot_ingame.xpm, src/images/broom.xpm, src/images/chanop.xpm, src/images/chanop_away.xpm, src/images/chanop_broom.xpm, src/images/chanop_ingame.xpm, src/nicklistctrl.cpp, src/nicklistctrl.h, src/server.h, src/spring.cpp, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/user.cpp, src/user.h: New icons and in lobby state shown in nick list. git-svn-id: http://svn.springlobby.info/trunk@635 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-05 Tommy Carlsson * src/channel.h, src/chatpanel.cpp, src/chatpanel.h, src/nicklistctrl.cpp, src/server.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: Admin commands implemented and some popup menus for channel and server tabs. git-svn-id: http://svn.springlobby.info/trunk@634 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-05 Tommy Carlsson * src/spring.cpp: Patch by BrainDamage. Fixes segault when using old Spring execmethod. Fixes #188. git-svn-id: http://svn.springlobby.info/trunk@633 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-04 Tommy Carlsson * springlobby.cbp: Fixed BrainDamage's typo ;) git-svn-id: http://svn.springlobby.info/trunk@632 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-04 Tommy Carlsson * springlobby.cbp: CodeBlocks project updated. git-svn-id: http://svn.springlobby.info/trunk@631 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-04 Tommy Carlsson * src/battle.cpp, src/springlobbyapp.cpp, src/springunitsync.cpp, src/springunitsync.h: Cache GetMapInfoEx unitsync calls. Fixes #181. git-svn-id: http://svn.springlobby.info/trunk@630 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-03 Tommy Carlsson * src/ibattle.cpp, src/springunitsync.cpp, src/springunitsync.h: Some Unitsync optimizations. Thanks for the help Tobi :) git-svn-id: http://svn.springlobby.info/trunk@629 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-03 Tommy Carlsson * src/battlelisttab.cpp, src/mainwindow.cpp, src/spring.cpp, src/ui.cpp, src/ui.h: Ask if user wants to leave current battle when trying to join new. Fixes #96. git-svn-id: http://svn.springlobby.info/trunk@628 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-02 Tommy Carlsson * src/serverevents.cpp, src/tasserver.cpp: Disconnect on ping timeout. Fixes #120. git-svn-id: http://svn.springlobby.info/trunk@627 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-02 Tommy Carlsson * src/mapctrl.cpp, src/settings.cpp: Fixes #165. git-svn-id: http://svn.springlobby.info/trunk@626 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-02 Tommy Carlsson * src/settings.cpp, src/spring.cpp: Fixed crash when starting game. git-svn-id: http://svn.springlobby.info/trunk@625 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-02 Tommy Carlsson * src/serverevents.cpp, src/tasserver.cpp: Restrictions working. Fixes #79. git-svn-id: http://svn.springlobby.info/trunk@624 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-02 Tommy Carlsson * src/battleoptionstab.cpp, src/battleoptionstab.h, src/ibattle.h, src/iunitsync.h, src/server.h, src/springunitsync.cpp, src/springunitsync.h, src/tasserver.cpp, src/ui.cpp: Restrictions possibly working. git-svn-id: http://svn.springlobby.info/trunk@623 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-02 Tommy Carlsson * src/settings.cpp, src/settings.h, src/spring.cpp, src/spring.h, src/springprocess.cpp, src/springprocess.h: Patch by BrainDamage. Allow old way of Spring execute. Fixes #175. git-svn-id: http://svn.springlobby.info/trunk@622 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-02 Tommy Carlsson * src/ui.cpp: Patch by juhe. Allow any spring version if server sends * as spring version. Fixes #174. git-svn-id: http://svn.springlobby.info/trunk@621 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-01 Tommy Carlsson * src/chatpanel.cpp, src/chatpanel.h: Patch by BrainDamage. Clicking on url opens browser. Fixes #172. git-svn-id: http://svn.springlobby.info/trunk@620 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-01 Tommy Carlsson * src/iunitsync.h, src/spring.cpp, src/springunitsync.cpp, src/springunitsync.h: Get correct bot lib paths for startscripts using unitsync. Fixes #171. git-svn-id: http://svn.springlobby.info/trunk@619 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-01 Tommy Carlsson * src/battleroomlistctrl.cpp, src/iconimagelist.cpp, src/iconimagelist.h: What is a host whithout a crown? :) Fixes #169. git-svn-id: http://svn.springlobby.info/trunk@618 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-01 Tommy Carlsson * Makefile.am, src/iconimagelist.cpp, src/iconimagelist.h, src/images/host.xpm, src/images/host_spectator.xpm: Added host.xpm and host_spectator.xpm. git-svn-id: http://svn.springlobby.info/trunk@617 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-01 Tommy Carlsson * src/connectwindow.cpp, src/connectwindow.h: Minor fix in connect window. git-svn-id: http://svn.springlobby.info/trunk@616 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-01 Tommy Carlsson * src/connectwindow.cpp, src/connectwindow.h: Patch by BrainDamage. Update server details. Fixes #50. git-svn-id: http://svn.springlobby.info/trunk@615 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-01 Tommy Carlsson * src/springunitsync.cpp: Poked around a bit with unitsync. Fixes #166,#162. git-svn-id: http://svn.springlobby.info/trunk@614 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-01 Tommy Carlsson * THANKS, src/connectwindow.cpp: Possibly fixed compile errors. git-svn-id: http://svn.springlobby.info/trunk@613 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-09-01 Tommy Carlsson * src/connectwindow.cpp, src/settings.h: Patch by BrainDamage. Default to serverport 8200. Fixes #161,#46. git-svn-id: http://svn.springlobby.info/trunk@612 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-31 Tommy Carlsson * src/battlelisttab.cpp, src/chatpanel.cpp, src/nicklistctrl.cpp, src/nicklistctrl.h, src/springoptionstab.cpp: Activating item in nicklist ctrl will open chat window. Fixes #54. git-svn-id: http://svn.springlobby.info/trunk@611 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-31 Tommy Carlsson * src/springlobbyapp.cpp: Connect window shown again on startup. git-svn-id: http://svn.springlobby.info/trunk@610 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-31 Tommy Carlsson * src/mainwindow.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springunitsync.h: Unitsync not loaded before Ui is created. git-svn-id: http://svn.springlobby.info/trunk@609 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-31 Tommy Carlsson * src/ui.cpp: Fixed bad startup crash. git-svn-id: http://svn.springlobby.info/trunk@608 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-31 Tommy Carlsson * src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp, src/mainwindow.cpp: Debug added to reload unitsync code. git-svn-id: http://svn.springlobby.info/trunk@607 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-31 Tommy Carlsson * springlobby.cbp, src/battle.cpp, src/battlelistctrl.cpp, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/chatpanel.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainwindow.cpp, src/nicklistctrl.cpp, src/server.cpp, src/socket.cpp, src/springunitsync.cpp, src/tasserver.cpp, src/ui.cpp: assert refactor. git-svn-id: http://svn.springlobby.info/trunk@606 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-31 Tommy Carlsson * src/chatpanel.cpp, src/chatpanel.h, src/springlobbyapp.cpp: Welcome message newlines remved. Chatlog limited to 1000 lines. Fixes #117,#160 git-svn-id: http://svn.springlobby.info/trunk@605 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-30 Tommy Carlsson * src/addbotdialog.cpp, src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h: Patch by BrainDamage. Load bot-libs from unitsync. Fixes #113. git-svn-id: http://svn.springlobby.info/trunk@604 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-30 Tommy Carlsson * src/battleroomtab.cpp: Updates sync status after Unitsync reload. Fixes #146. git-svn-id: http://svn.springlobby.info/trunk@603 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-30 Tommy Carlsson * src/battlelisttab.cpp, src/battlelisttab.h, src/battlemaptab.cpp, src/battlemaptab.h, src/battleroomtab.cpp, src/battleroomtab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h, src/mainwindow.cpp, src/mainwindow.h, src/singleplayertab.cpp, src/singleplayertab.h, src/springoptionstab.cpp, src/ui.cpp: Relaoding unitsync reloads all content fetched from unitsync. Fixes #157. git-svn-id: http://svn.springlobby.info/trunk@602 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-30 Tommy Carlsson * src/settings.cpp: Config file moved to ~/.springlobby folder in linux. git-svn-id: http://svn.springlobby.info/trunk@601 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-30 Tommy Carlsson * src/chatpanel.cpp, src/server.h, src/settings.cpp, src/socket.cpp, src/socket.h, src/springlobbyapp.cpp, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: Paste multiple lines, warns if more than 5. Send rate control. Config file changed to springlobby.conf. Fixes #142,#156,#144. git-svn-id: http://svn.springlobby.info/trunk@600 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-30 Tommy Carlsson * src/mainchattab.cpp, src/mainchattab.h, src/mainwindow.cpp, src/mainwindow.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/ui.cpp, src/ui.h: Channelmessage server command implemented. git-svn-id: http://svn.springlobby.info/trunk@599 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-30 Tommy Carlsson * src/spring.cpp, src/springprocess.cpp: Some debug added to spring start code. git-svn-id: http://svn.springlobby.info/trunk@598 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-30 Tommy Carlsson * src/battleroomtab.cpp, src/mainchattab.cpp, src/mainchattab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mainwindow.cpp, src/mainwindow.h, src/serverevents.cpp, src/tasserver.cpp, src/ui.cpp, src/ui.h: /help command implemented and server error messages are displayed. Fixes #152 and #57. git-svn-id: http://svn.springlobby.info/trunk@597 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-29 Tommy Carlsson * src/chatpanel.cpp, src/server.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp: /ingame inplemented and server tab sends raw to server. git-svn-id: http://svn.springlobby.info/trunk@596 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-29 Tommy Carlsson * Makefile.am: Added not_found_icon.xpm to makefile.am git-svn-id: http://svn.springlobby.info/trunk@595 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-29 Tommy Carlsson * Makefile.am, src/images/download_map.xpm, src/images/reload_map.xpm: Added missing images. git-svn-id: http://svn.springlobby.info/trunk@594 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-29 Tommy Carlsson * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.cpp, src/images/not_found_icon.xpm, src/mainwindow.cpp, src/mapctrl.cpp, src/mapctrl.h, src/ui.cpp, src/ui.h: MapCtrl shows download and refresh butons if map not found. Fixes #70,#78. git-svn-id: http://svn.springlobby.info/trunk@593 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-29 Tommy Carlsson * src/mapctrl.cpp: Some minor tweak in Singleplayer. git-svn-id: http://svn.springlobby.info/trunk@592 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-29 Tommy Carlsson * src/mapctrl.cpp, src/singleplayerbattle.cpp, src/singleplayertab.cpp, src/uiutils.cpp, src/uiutils.h: Some minor tweaks in Singleplayer. git-svn-id: http://svn.springlobby.info/trunk@591 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/battleroomtab.cpp: Added tidal str. to battle room tab info. git-svn-id: http://svn.springlobby.info/trunk@590 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/battleroomtab.cpp: Column width tweak. git-svn-id: http://svn.springlobby.info/trunk@589 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/battleroomtab.cpp: Some minor improvements on battleroom options. git-svn-id: http://svn.springlobby.info/trunk@588 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/battlelistctrl.cpp: Map search function improved. git-svn-id: http://svn.springlobby.info/trunk@587 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/battleroomtab.cpp, src/battleroomtab.h, src/uiutils.h: Battle options in battle room. Fixes #80. git-svn-id: http://svn.springlobby.info/trunk@586 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/battleroomtab.cpp, src/battleroomtab.h: Lock battles. Fixes #135. git-svn-id: http://svn.springlobby.info/trunk@585 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/mapctrl.cpp: Startrect number outlined. git-svn-id: http://svn.springlobby.info/trunk@584 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/mapctrl.cpp, src/tasserver.cpp: Limit TASServer to max 10 startrects. git-svn-id: http://svn.springlobby.info/trunk@583 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/mapctrl.cpp, src/mapctrl.h: Singleplayer beautification. git-svn-id: http://svn.springlobby.info/trunk@582 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/mapctrl.cpp, src/singleplayerbattle.cpp, src/singleplayertab.cpp: Removed some compile warnings. git-svn-id: http://svn.springlobby.info/trunk@581 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/addbotdialog.cpp, src/settings.cpp, src/settings.h, src/spring.cpp: Save last used AI git-svn-id: http://svn.springlobby.info/trunk@580 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/singleplayertab.cpp: Fixed singleplayer bug. git-svn-id: http://svn.springlobby.info/trunk@579 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/ibattle.cpp: Reload maps/mods fixed again. git-svn-id: http://svn.springlobby.info/trunk@578 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/iunitsync.h, src/mapctrl.cpp, src/singleplayertab.cpp, src/spring.cpp, src/springunitsync.cpp, src/springunitsync.h, src/tasserver.cpp: Unitsync refactor. git-svn-id: http://svn.springlobby.info/trunk@577 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-28 Tommy Carlsson * src/battleoptionstab.cpp, src/ibattle.h, src/mapctrl.cpp, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/singleplayertab.cpp, src/singleplayertab.h, src/spring.cpp, src/spring.h, src/ui.cpp, src/ui.h: Singleplayer actually working. git-svn-id: http://svn.springlobby.info/trunk@576 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-27 Tommy Carlsson * src/mapctrl.cpp: Singleplayer Progress. git-svn-id: http://svn.springlobby.info/trunk@575 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-27 Tommy Carlsson * src/battle.cpp, src/mapctrl.cpp, src/mapctrl.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/singleplayertab.cpp, src/uiutils.cpp, src/uiutils.h: Singleplayer Progress. git-svn-id: http://svn.springlobby.info/trunk@574 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-27 Tommy Carlsson * src/addbotdialog.cpp, src/mapctrl.cpp, src/mapctrl.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/utils.h: Singleplayer Progress. git-svn-id: http://svn.springlobby.info/trunk@573 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-27 Tommy Carlsson * src/spring.cpp, src/springoptionstab.cpp: Path to script.txt changed to application directory. git-svn-id: http://svn.springlobby.info/trunk@572 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-27 Tommy Carlsson * src/addbotdialog.cpp, src/addbotdialog.h, src/ibattle.h, src/singleplayertab.cpp, src/springoptionstab.cpp, src/ui.cpp, src/ui.h: Some singleplayer progress. Autodetect unitsync on 64 bit linux. git-svn-id: http://svn.springlobby.info/trunk@571 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-27 Tommy Carlsson * src/addbotdialog.cpp, src/addbotdialog.h, src/mapctrl.cpp, src/mapctrl.h, src/singleplayerbattle.cpp, src/singleplayertab.cpp, src/singleplayertab.h, src/utils.h: Singleplayer Progress. git-svn-id: http://svn.springlobby.info/trunk@570 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-26 Tommy Carlsson * Makefile.am, src/images/up_down.xpm, src/images/up_downsel.xpm, src/images/upsel_down.xpm, src/mapctrl.h: Some images added. git-svn-id: http://svn.springlobby.info/trunk@569 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-26 Tommy Carlsson * src/ibattle.h, src/mapctrl.cpp: Singleplayer progress. git-svn-id: http://svn.springlobby.info/trunk@568 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-26 Tommy Carlsson * src/mapctrl.cpp, src/mapctrl.h, src/springunitsync.cpp: Some singleplayer progress. git-svn-id: http://svn.springlobby.info/trunk@567 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-25 Tommy Carlsson * Makefile.am, src/chatpanel.cpp, src/chatpanel.h, src/images/player.xpm, src/mapctrl.cpp, src/mapctrl.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/singleplayertab.cpp, src/singleplayertab.h, src/ui.cpp: Some singleplayer progress. Flash on new pm's and highlighted messages. Note in springlobby channel on join. git-svn-id: http://svn.springlobby.info/trunk@566 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-25 Tommy Carlsson * springlobby.cbp, src/battle.cpp, src/battle.h, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleroomtab.cpp, src/ibattle.h, src/mapctrl.cpp, src/mapctrl.h, src/serverevents.cpp, src/serverevents.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/singleplayertab.cpp, src/spring.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springunitsync.cpp, src/tasserver.cpp, src/ui.cpp, src/ui.h: Fixed #31 patch by BrainDamage. Also some improvements on singleplayer. git-svn-id: http://svn.springlobby.info/trunk@565 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-24 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battlemaptab.cpp, src/battleoptionstab.cpp, src/battleoptionstab.h, src/ibattle.h, src/images/away.xpm, src/images/bot.xpm, src/images/nexists.xpm, src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h, src/mapctrl.cpp, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/singleplayertab.cpp, src/singleplayertab.h, src/ui.cpp, src/ui.h: Singleplayer options tab functional. Edited some icons. git-svn-id: http://svn.springlobby.info/trunk@564 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-24 Tommy Carlsson * src/battle.h, src/battleoptionstab.cpp, src/battleoptionstab.h, src/ibattle.cpp, src/ibattle.h, src/mainjoinbattletab.cpp, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h, src/mapctrl.cpp, src/mapctrl.h, src/singleplayertab.cpp, src/singleplayertab.h: Options tab added to singleplayer. git-svn-id: http://svn.springlobby.info/trunk@563 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-24 Tommy Carlsson * Makefile.am, springlobby.cbp, src/battle.cpp, src/battle.h, src/battlelist.cpp, src/battlelistctrl.cpp, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battlemaptab.h, src/battleoptionstab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/ibattle.cpp, src/ibattle.h, src/iconimagelist.cpp, src/mapctrl.cpp, src/mapctrl.h, src/server.cpp, src/serverevents.cpp, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/spring.cpp, src/tasserver.cpp, src/ui.cpp: IBattle interface added and Battle class refactored. git-svn-id: http://svn.springlobby.info/trunk@562 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-23 Leo Moisio * tools/newfile.sh: test if a file to be added already exists, so don't overwrite it git-svn-id: http://svn.springlobby.info/trunk@561 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-23 Tommy Carlsson * Makefile.am: Added image to makefile. git-svn-id: http://svn.springlobby.info/trunk@560 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-23 Tommy Carlsson * src/mainsingleplayertab.cpp: More includes for windows build. git-svn-id: http://svn.springlobby.info/trunk@559 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-23 Tommy Carlsson * src/mainsingleplayertab.cpp, src/singleplayertab.cpp: Includes added git-svn-id: http://svn.springlobby.info/trunk@558 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-23 Tommy Carlsson * Makefile.am: Makefile updated. git-svn-id: http://svn.springlobby.info/trunk@557 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-23 Tommy Carlsson * SpringLobby.fbp, springlobby.cbp, src/images/chat_icon.xpm, src/images/join_icon.xpm, src/images/singleplayer_icon.xpm, src/mainsingleplayertab.cpp, src/mainsingleplayertab.h, src/mainwindow.cpp, src/mainwindow.h, src/mapctrl.cpp, src/mapctrl.h, src/singleplayerbattle.cpp, src/singleplayerbattle.h, src/singleplayertab.cpp, src/singleplayertab.h, src/tasserver.cpp: Singleplayer tab added and some new main icons. git-svn-id: http://svn.springlobby.info/trunk@556 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-22 Tommy Carlsson * src/battlelisttab.cpp: fixes #131 git-svn-id: http://svn.springlobby.info/trunk@555 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-22 Tommy Carlsson * src/mapctrl.cpp: Took away errors and inserted warnings again instead. git-svn-id: http://svn.springlobby.info/trunk@554 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-22 Tommy Carlsson * springlobby.cbp, src/mapctrl.cpp: Romeved some compiler warnings in wx2.8 build. git-svn-id: http://svn.springlobby.info/trunk@553 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-21 Tommy Carlsson * src/battleroomtab.cpp, src/chatpanel.cpp, src/mapctrl.cpp, src/springunitsync.cpp, src/ui.cpp: Fixed crash bug when map not available. git-svn-id: http://svn.springlobby.info/trunk@552 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-21 Tommy Carlsson * src/nicklistctrl.cpp, src/ui.cpp: Fixed NickList update bug. git-svn-id: http://svn.springlobby.info/trunk@551 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-21 Tommy Carlsson * src/springprocess.cpp, src/springprocess.h: Trying to fix mingw link error. git-svn-id: http://svn.springlobby.info/trunk@550 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-21 Tommy Carlsson * src/springprocess.cpp, src/springprocess.h: Poked around a bit with events. git-svn-id: http://svn.springlobby.info/trunk@549 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-21 Tommy Carlsson * src/battlelisttab.cpp, src/chatpanel.cpp, src/hostbattledialog.cpp, src/nicklistctrl.cpp, src/nicklistctrl.h, src/spring.cpp, src/spring.h, src/springprocess.cpp, src/springprocess.h: Spring is now started with system() via a thread. Userstatus updated in channels. git-svn-id: http://svn.springlobby.info/trunk@548 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-21 Tommy Carlsson * src/chatpanel.cpp, src/ui.cpp: Fixed crash bug in chat. git-svn-id: http://svn.springlobby.info/trunk@547 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-21 Tommy Carlsson * src/hostbattledialog.cpp: git-svn-id: http://svn.springlobby.info/trunk@546 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-21 Tommy Carlsson * SpringLobby.fbp, src/battle.cpp, src/battle.h, src/battleroomlistctrl.cpp, src/mainoptionstab.cpp, src/server.h, src/tasserver.cpp, src/tasserver.h: Changing side bug fixed. git-svn-id: http://svn.springlobby.info/trunk@545 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-20 Tommy Carlsson * src/battle.cpp, src/battlelistctrl.cpp, src/uiutils.cpp: fixes #129 patch by BrainDamage. git-svn-id: http://svn.springlobby.info/trunk@544 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-20 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battleroomtab.cpp: Some bugfixes related to bots. git-svn-id: http://svn.springlobby.info/trunk@543 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-20 Tommy Carlsson * src/mapctrl.cpp: Shows startpositions in random. git-svn-id: http://svn.springlobby.info/trunk@542 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-19 Leo Moisio * src/images/admin.xpm, src/images/admin_away.xpm, src/images/admin_ingame.xpm, src/images/arm.xpm, src/images/away.xpm, src/images/battle.xpm, src/images/battle_list.xpm, src/images/battle_map.xpm, src/images/battle_settings.xpm, src/images/bot.xpm, src/images/channel.xpm, src/images/chat_icon.xpm, src/images/close.xpm, src/images/close_hi.xpm, src/images/closed_game.xpm, src/images/closed_pw_game.xpm, src/images/colourbox.xpm, src/images/connect.xpm, src/images/core.xpm, src/images/down.xpm, src/images/exists.xpm, src/images/flags/AD.xpm, src/images/flags/AE.xpm, src/images/flags/AF.xpm, src/images/flags/AG.xpm, src/images/flags/AI.xpm, src/images/flags/AL.xpm, src/images/flags/AM.xpm, src/images/flags/AN.xpm, src/images/flags/AO.xpm, src/images/flags/AR.xpm, src/images/flags/AS.xpm, src/images/flags/AT.xpm, src/images/flags/AU.xpm, src/images/flags/AW.xpm, src/images/flags/AX.xpm, src/images/flags/AZ.xpm, src/images/flags/BA.xpm, src/images/flags/BB.xpm, src/images/flags/BD.xpm, src/images/flags/BE.xpm, src/images/flags/BF.xpm, src/images/flags/BG.xpm, src/images/flags/BH.xpm, src/images/flags/BI.xpm, src/images/flags/BJ.xpm, src/images/flags/BM.xpm, src/images/flags/BN.xpm, src/images/flags/BO.xpm, src/images/flags/BR.xpm, src/images/flags/BS.xpm, src/images/flags/BT.xpm, src/images/flags/BV.xpm, src/images/flags/BW.xpm, src/images/flags/BY.xpm, src/images/flags/BZ.xpm, src/images/flags/CA.xpm, src/images/flags/CC.xpm, src/images/flags/CD.xpm, src/images/flags/CF.xpm, src/images/flags/CG.xpm, src/images/flags/CH.xpm, src/images/flags/CI.xpm, src/images/flags/CK.xpm, src/images/flags/CL.xpm, src/images/flags/CM.xpm, src/images/flags/CN.xpm, src/images/flags/CO.xpm, src/images/flags/CR.xpm, src/images/flags/CS.xpm, src/images/flags/CU.xpm, src/images/flags/CV.xpm, src/images/flags/CX.xpm, src/images/flags/CY.xpm, src/images/flags/CZ.xpm, src/images/flags/DE.xpm, src/images/flags/DJ.xpm, src/images/flags/DK.xpm, src/images/flags/DM.xpm, src/images/flags/DO.xpm, src/images/flags/DZ.xpm, src/images/flags/EC.xpm, src/images/flags/EE.xpm, src/images/flags/EG.xpm, src/images/flags/EH.xpm, src/images/flags/ER.xpm, src/images/flags/ES.xpm, src/images/flags/ET.xpm, src/images/flags/FAM.xpm, src/images/flags/FI.xpm, src/images/flags/FJ.xpm, src/images/flags/FK.xpm, src/images/flags/FM.xpm, src/images/flags/FO.xpm, src/images/flags/FR.xpm, src/images/flags/GA.xpm, src/images/flags/GB.xpm, src/images/flags/GD.xpm, src/images/flags/GE.xpm, src/images/flags/GF.xpm, src/images/flags/GH.xpm, src/images/flags/GI.xpm, src/images/flags/GL.xpm, src/images/flags/GM.xpm, src/images/flags/GN.xpm, src/images/flags/GP.xpm, src/images/flags/GQ.xpm, src/images/flags/GR.xpm, src/images/flags/GS.xpm, src/images/flags/GT.xpm, src/images/flags/GU.xpm, src/images/flags/GW.xpm, src/images/flags/GY.xpm, src/images/flags/HK.xpm, src/images/flags/HM.xpm, src/images/flags/HN.xpm, src/images/flags/HR.xpm, src/images/flags/HT.xpm, src/images/flags/HU.xpm, src/images/flags/ID.xpm, src/images/flags/IE.xpm, src/images/flags/IL.xpm, src/images/flags/IN.xpm, src/images/flags/IO.xpm, src/images/flags/IQ.xpm, src/images/flags/IR.xpm, src/images/flags/IS.xpm, src/images/flags/IT.xpm, src/images/flags/JM.xpm, src/images/flags/JO.xpm, src/images/flags/JP.xpm, src/images/flags/KE.xpm, src/images/flags/KG.xpm, src/images/flags/KH.xpm, src/images/flags/KI.xpm, src/images/flags/KM.xpm, src/images/flags/KN.xpm, src/images/flags/KP.xpm, src/images/flags/KR.xpm, src/images/flags/KW.xpm, src/images/flags/KY.xpm, src/images/flags/KZ.xpm, src/images/flags/LA.xpm, src/images/flags/LB.xpm, src/images/flags/LC.xpm, src/images/flags/LI.xpm, src/images/flags/LK.xpm, src/images/flags/LR.xpm, src/images/flags/LS.xpm, src/images/flags/LT.xpm, src/images/flags/LU.xpm, src/images/flags/LV.xpm, src/images/flags/LY.xpm, src/images/flags/MA.xpm, src/images/flags/MC.xpm, src/images/flags/MD.xpm, src/images/flags/ME.xpm, src/images/flags/MG.xpm, src/images/flags/MH.xpm, src/images/flags/MK.xpm, src/images/flags/ML.xpm, src/images/flags/MM.xpm, src/images/flags/MN.xpm, src/images/flags/MO.xpm, src/images/flags/MP.xpm, src/images/flags/MQ.xpm, src/images/flags/MR.xpm, src/images/flags/MS.xpm, src/images/flags/MT.xpm, src/images/flags/MU.xpm, src/images/flags/MV.xpm, src/images/flags/MW.xpm, src/images/flags/MX.xpm, src/images/flags/MY.xpm, src/images/flags/MZ.xpm, src/images/flags/NA.xpm, src/images/flags/NC.xpm, src/images/flags/NE.xpm, src/images/flags/NF.xpm, src/images/flags/NG.xpm, src/images/flags/NI.xpm, src/images/flags/NL.xpm, src/images/flags/NO.xpm, src/images/flags/NP.xpm, src/images/flags/NR.xpm, src/images/flags/NU.xpm, src/images/flags/NZ.xpm, src/images/flags/OM.xpm, src/images/flags/PA.xpm, src/images/flags/PE.xpm, src/images/flags/PF.xpm, src/images/flags/PG.xpm, src/images/flags/PH.xpm, src/images/flags/PK.xpm, src/images/flags/PL.xpm, src/images/flags/PM.xpm, src/images/flags/PN.xpm, src/images/flags/PR.xpm, src/images/flags/PS.xpm, src/images/flags/PT.xpm, src/images/flags/PW.xpm, src/images/flags/PY.xpm, src/images/flags/QA.xpm, src/images/flags/RE.xpm, src/images/flags/RO.xpm, src/images/flags/RS.xpm, src/images/flags/RU.xpm, src/images/flags/RW.xpm, src/images/flags/SA.xpm, src/images/flags/SB.xpm, src/images/flags/SC.xpm, src/images/flags/SD.xpm, src/images/flags/SE.xpm, src/images/flags/SG.xpm, src/images/flags/SH.xpm, src/images/flags/SI.xpm, src/images/flags/SJ.xpm, src/images/flags/SK.xpm, src/images/flags/SL.xpm, src/images/flags/SM.xpm, src/images/flags/SN.xpm, src/images/flags/SO.xpm, src/images/flags/SR.xpm, src/images/flags/ST.xpm, src/images/flags/SV.xpm, src/images/flags/SY.xpm, src/images/flags/SZ.xpm, src/images/flags/TC.xpm, src/images/flags/TD.xpm, src/images/flags/TF.xpm, src/images/flags/TG.xpm, src/images/flags/TH.xpm, src/images/flags/TJ.xpm, src/images/flags/TK.xpm, src/images/flags/TL.xpm, src/images/flags/TM.xpm, src/images/flags/TN.xpm, src/images/flags/TO.xpm, src/images/flags/TR.xpm, src/images/flags/TT.xpm, src/images/flags/TV.xpm, src/images/flags/TW.xpm, src/images/flags/TZ.xpm, src/images/flags/UA.xpm, src/images/flags/UG.xpm, src/images/flags/UM.xpm, src/images/flags/US.xpm, src/images/flags/UY.xpm, src/images/flags/UZ.xpm, src/images/flags/VA.xpm, src/images/flags/VC.xpm, src/images/flags/VE.xpm, src/images/flags/VG.xpm, src/images/flags/VI.xpm, src/images/flags/VN.xpm, src/images/flags/VU.xpm, src/images/flags/WF.xpm, src/images/flags/WS.xpm, src/images/flags/YE.xpm, src/images/flags/YT.xpm, src/images/flags/ZA.xpm, src/images/flags/ZM.xpm, src/images/flags/ZW.xpm, src/images/ingame.xpm, src/images/join_icon.xpm, src/images/nexists.xpm, src/images/not_found_icon.xpm, src/images/nready_q.xpm, src/images/nready_unsync.xpm, src/images/open_game.xpm, src/images/open_pw_game.xpm, src/images/options_icon.xpm, src/images/rank0.xpm, src/images/rank1.xpm, src/images/rank2.xpm, src/images/rank3.xpm, src/images/rank4.xpm, src/images/ready_q.xpm, src/images/ready_unsync.xpm, src/images/select_icon.xpm, src/images/server.xpm, src/images/spectator.xpm, src/images/spring.xpm, src/images/springlobby.xpm, src/images/start_ally.xpm, src/images/start_enemy.xpm, src/images/start_unused.xpm, src/images/started_game.xpm, src/images/unknown_flag.xpm, src/images/up.xpm, src/images/userchat.xpm: should fix mass flood of warnings on gcc 4.2 git-svn-id: http://svn.springlobby.info/trunk@541 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-19 Leo Moisio * Makefile.am: added missing xpm files to Makefile.am git-svn-id: http://svn.springlobby.info/trunk@540 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-19 Leo Moisio * src/mapctrl.cpp, src/utils.cpp: fixed some compilation warnings git-svn-id: http://svn.springlobby.info/trunk@539 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-19 Leo Moisio * THANKS, configure.ac, tools/newfile.sh: adding new xpm files to project is now easy git-svn-id: http://svn.springlobby.info/trunk@538 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-19 Tommy Carlsson * src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleroomtab.cpp, src/iunitsync.h, src/mapctrl.cpp, src/mapctrl.h: Minimap shows startpositions when gametype is fixed. git-svn-id: http://svn.springlobby.info/trunk@537 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-19 Tommy Carlsson * src/channel.cpp, src/chatpanel.cpp, src/serverevents.cpp, src/utils.cpp, src/utils.h: Implemented /ver and /sayver commands git-svn-id: http://svn.springlobby.info/trunk@536 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-19 Tommy Carlsson * src/serverevents.cpp: Client announces its' version in #springlobby on connect. git-svn-id: http://svn.springlobby.info/trunk@535 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-19 Tommy Carlsson * src/springlobby.rc, src/springlobby.rs: rs file updated git-svn-id: http://svn.springlobby.info/trunk@534 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-19 Tommy Carlsson * src/addbotdialog.cpp: Prevent botnames from containing spaces. git-svn-id: http://svn.springlobby.info/trunk@533 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-19 Tommy Carlsson * : eol-style props added. git-svn-id: http://svn.springlobby.info/trunk@532 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-19 Tommy Carlsson * src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp, src/iunitsync.h, src/mapctrl.cpp, src/mapctrl.h, src/springunitsync.cpp, src/springunitsync.h: Optimized minimap cache for battle list. git-svn-id: http://svn.springlobby.info/trunk@530 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-18 Tommy Carlsson * SpringLobby.fbp, src/battlelisttab.cpp: Fixed crash bug when trying to host while not connected. git-svn-id: http://svn.springlobby.info/trunk@529 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-18 Tommy Carlsson * src/battlelisttab.cpp, src/iconimagelist.cpp, src/serverevents.cpp, src/ui.cpp: fixes #55, #48 git-svn-id: http://svn.springlobby.info/trunk@528 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-18 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battlelisttab.cpp, src/serverevents.cpp, src/ui.cpp: Fixed some nasty bugs. git-svn-id: http://svn.springlobby.info/trunk@527 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-18 Tommy Carlsson * src/battlelistctrl.cpp, src/battlelisttab.cpp, src/battlelisttab.h, src/battlemaptab.cpp, src/battleroomtab.cpp, src/mapctrl.cpp, src/mapctrl.h, src/nicklistctrl.cpp, src/nicklistctrl.h: Battle info under battle list. git-svn-id: http://svn.springlobby.info/trunk@526 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-18 Tommy Carlsson * src/connectwindow.cpp, src/springoptionstab.cpp: Autosearch directory priority changed. And Connect Window beautified slightly. git-svn-id: http://svn.springlobby.info/trunk@525 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-18 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battleroomtab.cpp: Ring all not ready players and force start. git-svn-id: http://svn.springlobby.info/trunk@524 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-18 Tommy Carlsson * src/spring.cpp: Fixed another bug in script git-svn-id: http://svn.springlobby.info/trunk@523 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-18 Tommy Carlsson * src/spring.cpp: fixes #119 git-svn-id: http://svn.springlobby.info/trunk@522 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-17 Tommy Carlsson * src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/ui.cpp, src/ui.h: Ring implemented. git-svn-id: http://svn.springlobby.info/trunk@521 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-17 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battleroomlistctrl.cpp, src/server.h, src/tasserver.cpp, src/tasserver.h: Ring and bugfix in battlelistctrl. git-svn-id: http://svn.springlobby.info/trunk@520 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-17 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battleroomlistctrl.cpp, src/server.h, src/tasserver.cpp, src/tasserver.h: Some cleanup. git-svn-id: http://svn.springlobby.info/trunk@519 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-17 Tommy Carlsson * src/battleroomlistctrl.cpp: Fixed bug in in battleliststrl and bot owner now displayed. git-svn-id: http://svn.springlobby.info/trunk@518 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-17 Tommy Carlsson * src/battleroomlistctrl.cpp, src/battleroomtab.cpp: Force spectator works. git-svn-id: http://svn.springlobby.info/trunk@517 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-17 Tommy Carlsson * springlobby.cbp, src/battle.cpp, src/battle.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/iunitsync.h, src/serverevents.cpp, src/spring.cpp, src/springunitsync.cpp, src/springunitsync.h, src/tasserver.cpp: Setting side on bots, and kicking them now possible. Also checking spring version using unitsync( thanks BrainDamage ). git-svn-id: http://svn.springlobby.info/trunk@516 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-17 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battleroomlistctrl.cpp, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/ui.cpp: Set bot's team, ally, colour etc works. git-svn-id: http://svn.springlobby.info/trunk@515 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-17 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/serverevents.cpp, src/tasserver.cpp: Set players team, ally, colour etc works. git-svn-id: http://svn.springlobby.info/trunk@514 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-17 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp, src/battleroomtab.h, src/chatpanel.h, src/server.h, src/tasserver.cpp, src/tasserver.h, src/ui.h, src/uiutils.h: Forcing team etc in progress. git-svn-id: http://svn.springlobby.info/trunk@513 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-16 Tommy Carlsson * src/addbotdialog.cpp: Fixed compile error. git-svn-id: http://svn.springlobby.info/trunk@512 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-16 Tommy Carlsson * src/addbotdialog.cpp, src/addbotdialog.h, src/battle.cpp, src/battle.h, src/battleroomtab.cpp, src/uiutils.h: Bot support improved a bit. git-svn-id: http://svn.springlobby.info/trunk@511 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-16 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battleroomtab.cpp, src/spring.cpp: Bot team, and ai extension fixed. git-svn-id: http://svn.springlobby.info/trunk@510 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-16 Tommy Carlsson * Makefile.am, src/addbotdialog.cpp, src/addbotdialog.h, src/battle.cpp, src/battle.h, src/battleroomtab.cpp, src/server.h, src/tasserver.cpp, src/tasserver.h: Add bot now works. git-svn-id: http://svn.springlobby.info/trunk@509 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-15 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp, src/battleroomtab.h, src/iconimagelist.h, src/serverevents.cpp, src/serverevents.h, src/spring.cpp, src/springoptionstab.cpp, src/tasserver.cpp, src/ui.cpp, src/ui.h: VERY experimental bot support, no bug reports needed yet. git-svn-id: http://svn.springlobby.info/trunk@508 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-14 Leo Moisio * Makefile.am, tools/newfile.sh, tools/template.cpp, tools/template.h: script for adding new source files fixes #19 git-svn-id: http://svn.springlobby.info/trunk@507 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-14 Tommy Carlsson * src/springoptionstab.cpp: Autodetect spring options now works on tc's linux box. git-svn-id: http://svn.springlobby.info/trunk@506 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-13 Leo Moisio * autogen.sh: added a clear error message helping you when autogen.sh fails git-svn-id: http://svn.springlobby.info/trunk@505 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-13 Leo Moisio * buildbot/master.cfg, doc/mainpage.dox, gentoo/overlay/games-util/springlobby-svn/springlobby-svn-0.0.20070 722.ebuild, gentoo/overlay/games-util/springlobby/springlobby-0.1_alpha.ebuild, gentoo/overlays.xml, rpm/svn.spec, rpm/tarball.spec, src/mainwindow.cpp: updated all urls to springlobby.info git-svn-id: http://svn.springlobby.info/trunk@504 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-13 Tommy Carlsson * SpringLobby.fbp: FormBuilder updates git-svn-id: http://svn.springlobby.info/trunk@503 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-11 Leo Moisio * src/springoptionstab.cpp: fixed compile errors on wxWidgets 2.6.* git-svn-id: http://svn.springlobby.info/trunk@502 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-10 Tommy Carlsson * springlobby.cbp, src/connectwindow.cpp, src/mainjoinbattletab.cpp, src/mainwindow.cpp, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springoptionstab.h: Autodetects spring options a bit better now. git-svn-id: http://svn.springlobby.info/trunk@501 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-08 Leo Moisio * Makefile.am, configure.ac: check automake version automatically on svn builds git-svn-id: http://svn.springlobby.info/trunk@500 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-07 Tommy Carlsson * SpringLobby.fbp, src/battle.h, src/battleoptionstab.cpp, src/battleoptionstab.h, src/server.h: Battle options can now be set from BattleOptionsTab. git-svn-id: http://svn.springlobby.info/trunk@499 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-07 Tommy Carlsson * src/battleoptionstab.cpp, src/battleoptionstab.h, src/mainjoinbattletab.cpp, src/tasserver.cpp: BattleOptionsTab values now updated. git-svn-id: http://svn.springlobby.info/trunk@498 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-07 Tommy Carlsson * src/battleoptionstab.cpp: Fixed linux compile error. git-svn-id: http://svn.springlobby.info/trunk@497 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-07 Tommy Carlsson * SpringLobby.fbp, src/battleoptionstab.h: Fixed linux compile error. git-svn-id: http://svn.springlobby.info/trunk@496 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-07 Tommy Carlsson * Makefile.am, SpringLobby.fbp, SpringLobby.vcproj, src/battleoptionstab.cpp, src/battleoptionstab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mapctrl.cpp: BattleOptionsTAb layout. git-svn-id: http://svn.springlobby.info/trunk@495 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-06 Tommy Carlsson * src/mapctrl.cpp: Resizing in upper left corner of startrects now works. git-svn-id: http://svn.springlobby.info/trunk@494 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-06 Tommy Carlsson * src/mapctrl.cpp: Resizing in lower right corner of startrects now works. git-svn-id: http://svn.springlobby.info/trunk@493 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-06 Tommy Carlsson * src/mapctrl.cpp: Fixed MapCtrl Minimap positioning bug. git-svn-id: http://svn.springlobby.info/trunk@492 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-06 Tommy Carlsson * src/iunitsync.h, src/mapctrl.cpp, src/springunitsync.cpp, src/springunitsync.h: Fix #74. Thanks for the patch jihi :) git-svn-id: http://svn.springlobby.info/trunk@491 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-06 Tommy Carlsson * src/mapctrl.cpp, src/springunitsync.cpp: Some minor tweaks. git-svn-id: http://svn.springlobby.info/trunk@490 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-06 Tommy Carlsson * src/battlelisttab.cpp: Fixed unhandled exception. git-svn-id: http://svn.springlobby.info/trunk@489 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-06 Tommy Carlsson * src/tasserver.cpp: Hosting without password now works. git-svn-id: http://svn.springlobby.info/trunk@488 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-06 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battlemaptab.cpp, src/battleroomtab.cpp, src/mapctrl.cpp, src/mapctrl.h, src/server.h, src/tasserver.cpp: Startrect updates are sent to server. git-svn-id: http://svn.springlobby.info/trunk@487 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Leo Moisio * src/mapctrl.cpp: fixed a couple warnings about initialization order git-svn-id: http://svn.springlobby.info/trunk@484 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Leo Moisio * src/nonportable.h: fixes #29 git-svn-id: http://svn.springlobby.info/trunk@483 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Leo Moisio * Makefile.am: closes #68, see ticket comments for further info git-svn-id: http://svn.springlobby.info/trunk@482 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Tommy Carlsson * src/mapctrl.cpp, src/mapctrl.h: Adding and removing startrects locally. git-svn-id: http://svn.springlobby.info/trunk@481 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Leo Moisio * AUTHORS: dummy commit, testing buildbot git-svn-id: http://svn.springlobby.info/trunk@480 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Leo Moisio * AUTHORS: wrote initial version git-svn-id: http://svn.springlobby.info/trunk@479 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Leo Moisio * buildbot/master.cfg: perhaps now the revision numbering works git-svn-id: http://svn.springlobby.info/trunk@478 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Leo Moisio * src/settings.h: culled one extra include git-svn-id: http://svn.springlobby.info/trunk@477 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Tommy Carlsson * Makefile.am, src/images/close_hi.xpm, src/mapctrl.cpp, src/mapctrl.h: Close button added to startrects. git-svn-id: http://svn.springlobby.info/trunk@476 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Leo Moisio * src/agreementdialog.cpp, src/base64.cpp, src/battle.cpp, src/battlelist.cpp, src/battlelistctrl.cpp, src/battlelisttab.cpp, src/battlemaptab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/channel.cpp, src/channellist.cpp, src/chatpanel.cpp, src/connectwindow.cpp, src/flagimages.cpp, src/hostbattledialog.cpp, src/iconimagelist.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainoptionstab.cpp, src/mainwindow.cpp, src/mapctrl.cpp, src/nicklistctrl.cpp, src/server.cpp, src/serverevents.cpp, src/settings.cpp, src/socket.cpp, src/spring.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springprocess.cpp, src/springunitsync.cpp, src/tasserver.cpp, src/ui.cpp, src/uiutils.cpp, src/user.cpp, src/userlist.cpp, src/utils.cpp: added copyright clause to .cpp files, so microsoft cannot steal our code ;) git-svn-id: http://svn.springlobby.info/trunk@475 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Leo Moisio * buildbot/master.cfg: automatic revision numbering of releases git-svn-id: http://svn.springlobby.info/trunk@474 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Tommy Carlsson * src/mapctrl.cpp, src/mapctrl.h: Cursors shown correctly in minimap edit mode. git-svn-id: http://svn.springlobby.info/trunk@473 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Tommy Carlsson * src/battlemaptab.cpp, src/mapctrl.cpp, src/mapctrl.h, src/utils.cpp: Started fixing startrect editing. git-svn-id: http://svn.springlobby.info/trunk@472 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Tommy Carlsson * src/battlemaptab.cpp, src/battlemaptab.h, src/mainjoinbattletab.cpp, src/mapctrl.cpp, src/mapctrl.h, src/server.h, src/springunitsync.cpp, src/springunitsync.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: Change start position in hosted game. Minimap in Map tab size change on resize. Minimap creation optimized. git-svn-id: http://svn.springlobby.info/trunk@471 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Leo Moisio * buildbot/master.cfg: fixed typo git-svn-id: http://svn.springlobby.info/trunk@470 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Leo Moisio * buildbot/master.cfg: revision to automatic build, yet another try git-svn-id: http://svn.springlobby.info/trunk@469 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Tommy Carlsson * src/server.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp: Save last used map in hosted battle. git-svn-id: http://svn.springlobby.info/trunk@468 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-05 Tommy Carlsson * src/battle.h, src/battlemaptab.cpp, src/battlemaptab.h, src/chatpanel.cpp, src/server.h, src/spring.cpp, src/tasserver.cpp, src/tasserver.h: Change map in hosted game. git-svn-id: http://svn.springlobby.info/trunk@467 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Leo Moisio * buildbot/master.cfg: skip version bumping for test git-svn-id: http://svn.springlobby.info/trunk@466 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Leo Moisio * src/spring.cpp: fixed a comment on a non-portable hack (really just to test buildbot) git-svn-id: http://svn.springlobby.info/trunk@465 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Leo Moisio * buildbot/master.cfg: fix windows release zip generation git-svn-id: http://svn.springlobby.info/trunk@464 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Leo Moisio * buildbot/master.cfg: added version bumping git-svn-id: http://svn.springlobby.info/trunk@463 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Leo Moisio * buildbot/master.cfg: forgot to type it all in git-svn-id: http://svn.springlobby.info/trunk@462 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Leo Moisio * buildbot/master.cfg: revision numbers in automatic builds git-svn-id: http://svn.springlobby.info/trunk@461 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Leo Moisio * buildbot/master.cfg: release the generated windows zip also git-svn-id: http://svn.springlobby.info/trunk@460 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Leo Moisio * configure.ac: stricter dependency on wx: 2.6.3 instead of 2.6.0 git-svn-id: http://svn.springlobby.info/trunk@459 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Leo Moisio * buildbot/master.cfg: wrong path git-svn-id: http://svn.springlobby.info/trunk@458 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Leo Moisio * buildbot/master.cfg: fixing the windows automatic release git-svn-id: http://svn.springlobby.info/trunk@457 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Leo Moisio * buildbot/master.cfg: fixed 2 typos git-svn-id: http://svn.springlobby.info/trunk@456 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Leo Moisio * buildbot/master.cfg: fixing tarball creation that I just broke git-svn-id: http://svn.springlobby.info/trunk@455 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Leo Moisio * buildbot/master.cfg: make -k and dist-bzip2 git-svn-id: http://svn.springlobby.info/trunk@454 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Tommy Carlsson * src/tasserver.cpp: Fixed linux runtime error. git-svn-id: http://svn.springlobby.info/trunk@453 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Tommy Carlsson * src/settings.cpp: Fixed yet another linux compile error. git-svn-id: http://svn.springlobby.info/trunk@452 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Tommy Carlsson * src/settings.h: Fixed another linux compile error. git-svn-id: http://svn.springlobby.info/trunk@451 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Tommy Carlsson * src/battleroomtab.cpp: Worked around linux compile error. git-svn-id: http://svn.springlobby.info/trunk@450 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-04 Tommy Carlsson * SpringLobby.fbp, src/battle.cpp, src/battleroomtab.cpp, src/battleroomtab.h, src/connectwindow.cpp, src/connectwindow.h, src/server.h, src/serverevents.cpp, src/serverevents.h, src/settings.cpp, src/settings.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: Starting hosted battle. git-svn-id: http://svn.springlobby.info/trunk@449 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-03 Leo Moisio * src/tasserver.cpp: fixed a fatal compiler warning (would crash at runtime) git-svn-id: http://svn.springlobby.info/trunk@448 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-03 Tommy Carlsson * src/settings.cpp: Fixed linux compile error. git-svn-id: http://svn.springlobby.info/trunk@447 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-03 Tommy Carlsson * src/battle.cpp, src/battlelisttab.cpp: Some minor tweaks on hosting feature. git-svn-id: http://svn.springlobby.info/trunk@446 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-03 Tommy Carlsson * src/battle.h, src/battlelisttab.cpp, src/hostbattledialog.cpp, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/server.h, src/serverevents.cpp, src/serverevents.h, src/settings.cpp, src/settings.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: Hosting feature one step closer. git-svn-id: http://svn.springlobby.info/trunk@445 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-03 Leo Moisio * Makefile.am: tiny change that helps in future git-svn-id: http://svn.springlobby.info/trunk@444 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-03 Leo Moisio * src/hostbattledialog.cpp: fixed linux compile errors git-svn-id: http://svn.springlobby.info/trunk@443 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-03 Tommy Carlsson * src/hostbattledialog.cpp, src/hostbattledialog.h, src/iunitsync.h, src/settings.cpp, src/settings.h, src/springunitsync.cpp, src/springunitsync.h: HostBattleDialog saves settings from last host. git-svn-id: http://svn.springlobby.info/trunk@442 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-03 Tommy Carlsson * Makefile.am, src/hostbattledialog.h: Fixed typo in Makefile.am. git-svn-id: http://svn.springlobby.info/trunk@441 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-03 Tommy Carlsson * src/hostbattledialog.cpp, src/hostbattledialog.h: Possibly fixed linux errors. git-svn-id: http://svn.springlobby.info/trunk@440 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-03 Tommy Carlsson * Makefile.am, SpringLobby.vcproj, src/battlelisttab.cpp, src/battlelisttab.h, src/hostbattledialog.cpp, src/hostbattledialog.h: Added HostBattleDialog. git-svn-id: http://svn.springlobby.info/trunk@439 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-03 Tommy Carlsson * SpringLobby.fbp, src/battle.cpp, src/battlelisttab.cpp, src/battlelisttab.h, src/battlemaptab.cpp: Added host button and fixed crash when joining battle. Thanks for the patch Malric :) git-svn-id: http://svn.springlobby.info/trunk@438 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-02 Tommy Carlsson * src/settings.cpp, src/springoptionstab.cpp: SpringOptionsTab cleanup cleanup. git-svn-id: http://svn.springlobby.info/trunk@437 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-02 Tommy Carlsson * src/settings.cpp, src/settings.h, src/springoptionstab.cpp, src/springoptionstab.h, src/springunitsync.cpp: SpringOptionsTab cleanup. git-svn-id: http://svn.springlobby.info/trunk@436 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-02 Tommy Carlsson * src/chatpanel.cpp: Fixed assert bug when closing channel tab after disconnect. git-svn-id: http://svn.springlobby.info/trunk@435 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-02 Tommy Carlsson * src/chatpanel.cpp: Should fix #42. git-svn-id: http://svn.springlobby.info/trunk@433 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-02 Tommy Carlsson * src/mapctrl.cpp: MapCtrl draws startbox number centered and with matching colour. git-svn-id: http://svn.springlobby.info/trunk@432 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-02 Tommy Carlsson * src/battlelisttab.cpp, src/battlelisttab.h, src/ui.cpp: Clear battle list when disconnecting. git-svn-id: http://svn.springlobby.info/trunk@431 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-02 Tommy Carlsson * src/chatpanel.h, src/mainchattab.cpp, src/mainchattab.h, src/serverevents.cpp, src/ui.cpp, src/ui.h: Rejoins open channel tabs on connect. git-svn-id: http://svn.springlobby.info/trunk@430 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-02 Tommy Carlsson * src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainchattab.h, src/nicklistctrl.cpp, src/nicklistctrl.h, src/ui.cpp: Fixes Ticket #42. Reclaims ChatPanels on reconnect. git-svn-id: http://svn.springlobby.info/trunk@429 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Tommy Carlsson * src/chatpanel.cpp, src/springunitsync.cpp: I'm you or me am you or you are not you but me bug fixed. git-svn-id: http://svn.springlobby.info/trunk@428 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Tommy Carlsson * src/battlelist.cpp, src/battlelist.h, src/server.cpp, src/server.h, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springoptionstab.h: Fixed more memleaks. git-svn-id: http://svn.springlobby.info/trunk@427 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Tommy Carlsson * src/battlelistctrl.cpp, src/mainwindow.cpp, src/springoptionstab.cpp, src/ui.cpp: Fixed some memleaks. git-svn-id: http://svn.springlobby.info/trunk@426 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Tommy Carlsson * src/spring.cpp, src/ui.cpp: Added startscript debug info to help find start script bugs. Also disabled Spring binary check on battle join. git-svn-id: http://svn.springlobby.info/trunk@425 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Tommy Carlsson * src/battlemaptab.cpp, src/battlemaptab.h, src/battleroomtab.cpp, src/mainjoinbattletab.cpp, src/mapctrl.cpp: Visualize what startrect self is starting in. git-svn-id: http://svn.springlobby.info/trunk@424 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Tommy Carlsson * src/spring.cpp: Hack to make windows detect spring binary somewhat ok. git-svn-id: http://svn.springlobby.info/trunk@423 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * src/spring.cpp: avoid bug reports from my fix git-svn-id: http://svn.springlobby.info/trunk@422 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * src/spring.cpp: spring binary version test git-svn-id: http://svn.springlobby.info/trunk@421 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Tommy Carlsson * src/battlemaptab.cpp, src/mapctrl.cpp, src/ui.cpp: Draw startrects with interlaced alpha blending. git-svn-id: http://svn.springlobby.info/trunk@420 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * buildbot/master.cfg: fixed git-svn-id: http://svn.springlobby.info/trunk@419 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * buildbot/master.cfg: automatic windows binaries git-svn-id: http://svn.springlobby.info/trunk@418 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * buildbot/master.cfg: trying to fix the revision number of automated tarballs git-svn-id: http://svn.springlobby.info/trunk@417 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * buildbot/master.cfg: trying to fix the revision number of automated tarballs git-svn-id: http://svn.springlobby.info/trunk@416 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * buildbot/master.cfg: trying to fix the revision number of automated tarballs git-svn-id: http://svn.springlobby.info/trunk@415 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * buildbot/master.cfg: fix git-svn-id: http://svn.springlobby.info/trunk@414 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * buildbot/master.cfg: irc status notifier git-svn-id: http://svn.springlobby.info/trunk@413 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * src/battlemaptab.cpp, src/battlemaptab.h: fixed linux compile errors git-svn-id: http://svn.springlobby.info/trunk@412 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * buildbot/master.cfg: automated tarballs git-svn-id: http://svn.springlobby.info/trunk@411 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Tommy Carlsson * src/battlemaptab.cpp, src/battlemaptab.h, src/iunitsync.h, src/mainjoinbattletab.cpp, src/springunitsync.cpp, src/springunitsync.h: BattleMapTab test implemented. git-svn-id: http://svn.springlobby.info/trunk@410 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * buildbot/master.cfg, configure.ac: towards automated tarball releases git-svn-id: http://svn.springlobby.info/trunk@409 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * THANKS: Dummy commit, but if it works, it closes #35. git-svn-id: http://svn.springlobby.info/trunk@408 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * src/chatpanel.cpp, src/tasserver.cpp, src/ui.cpp: remove trailing spaces git-svn-id: http://svn.springlobby.info/trunk@407 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * Makefile.am: add missing file to build git-svn-id: http://svn.springlobby.info/trunk@406 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-08-01 Leo Moisio * src/battlelisttab.cpp, src/chatpanel.cpp, src/connectwindow.cpp, src/mainwindow.cpp, src/settings.cpp, src/springoptionstab.cpp, src/springunitsync.cpp, src/ui.cpp, src/utils.h: s/STL_STRING/STD_STRING/g git-svn-id: http://svn.springlobby.info/trunk@405 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Tommy Carlsson * src/channel.cpp, src/channel.h, src/chatpanel.cpp, src/server.h, src/tasserver.cpp, src/tasserver.h, src/utils.cpp, src/utils.h: Implemented /me command. git-svn-id: http://svn.springlobby.info/trunk@404 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * src/nonportable.h, src/spring.cpp, src/springoptionstab.cpp, src/springunitsync.cpp, src/springunitsync.h: removed some nonportable things git-svn-id: http://svn.springlobby.info/trunk@403 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * src/nonportable.h, src/settings.cpp, src/springoptionstab.cpp, src/springoptionstab.h, src/springunitsync.cpp, src/utils.h: removing nonportabilities one by one git-svn-id: http://svn.springlobby.info/trunk@402 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * src/nonportable.h, src/settings.cpp, src/spring.cpp, src/springoptionstab.h, src/springunitsync.cpp, src/springunitsync.h, src/utils.h: isolated most portability issues to one file git-svn-id: http://svn.springlobby.info/trunk@401 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * gentoo/spring-overlay/games-strategy/spring/spring-0.75_p2.ebuild: revert last change git-svn-id: http://svn.springlobby.info/trunk@400 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Tommy Carlsson * src/channel.cpp, src/channel.h, src/chatpanel.cpp, src/chatpanel.h: Added GetMe() to channel. Fixed some alert colour then message contains the users nickname. And gray text if message is from self. git-svn-id: http://svn.springlobby.info/trunk@399 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Tommy Carlsson * src/battleroomtab.cpp, src/spring.cpp, src/ui.cpp: Ready off when battle starts. git-svn-id: http://svn.springlobby.info/trunk@398 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * src/springunitsync.cpp: fixed translation issues and unicode problem in GetSidePicture git-svn-id: http://svn.springlobby.info/trunk@397 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * src/springunitsync.cpp: quick fix to a windows problem I created with wxDynamicLibrary git-svn-id: http://svn.springlobby.info/trunk@396 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Tommy Carlsson * src/tasserver.cpp, src/ui.cpp: Added warning about NAT traversal when joining battle. git-svn-id: http://svn.springlobby.info/trunk@395 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * src/springunitsync.h: wxDynamicLibrary can add .dll and .so automatically git-svn-id: http://svn.springlobby.info/trunk@394 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * src/springunitsync.cpp, src/springunitsync.h: wxDynamicLibrary used instead of non-portable ifdef codes git-svn-id: http://svn.springlobby.info/trunk@393 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * THANKS: dummy commit to see if triggers work git-svn-id: http://svn.springlobby.info/trunk@392 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * THANKS: dummy commit to see if triggers work git-svn-id: http://svn.springlobby.info/trunk@391 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * buildbot/master.cfg: switch order of steps git-svn-id: http://svn.springlobby.info/trunk@390 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * buildbot/master.cfg: added linux wx28 build git-svn-id: http://svn.springlobby.info/trunk@389 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * buildbot/master.cfg: added mingw build git-svn-id: http://svn.springlobby.info/trunk@388 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * buildbot/master.cfg: fix git-svn-id: http://svn.springlobby.info/trunk@387 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * src/chatpanel.cpp: dummy commit to see if buildbot works git-svn-id: http://svn.springlobby.info/trunk@386 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * src/mainjoinbattletab.cpp, src/mapctrl.cpp, src/springunitsync.cpp: replaced all NULLs with 0 and fixed one warning git-svn-id: http://svn.springlobby.info/trunk@385 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * buildbot/master.cfg: fix git-svn-id: http://svn.springlobby.info/trunk@384 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * buildbot/master.cfg: fix git-svn-id: http://svn.springlobby.info/trunk@383 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * buildbot/master.cfg: fix git-svn-id: http://svn.springlobby.info/trunk@382 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * buildbot/master.cfg: fix git-svn-id: http://svn.springlobby.info/trunk@381 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * buildbot/master.cfg: imports git-svn-id: http://svn.springlobby.info/trunk@380 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * buildbot/master.cfg, gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-20070716 .ebuild, gentoo/spring-overlay/games-strategy/spring/spring-0.75_p2.ebuild: perhaps a working config for buildbot git-svn-id: http://svn.springlobby.info/trunk@379 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Leo Moisio * src/socket.cpp, src/ui.cpp: fixed linux compile errors and warnings git-svn-id: http://svn.springlobby.info/trunk@378 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Tommy Carlsson * src/battleroomtab.cpp, src/battleroomtab.h, src/server.h, src/spring.cpp, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/user.cpp, src/user.h: Added Server.SendMyUserStatus() call. Tweaked Battle join a bit. User now goes in_game while spring is running. git-svn-id: http://svn.springlobby.info/trunk@377 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Tommy Carlsson * src/spring.cpp, src/spring.h, src/springoptionstab.cpp, src/tasserver.cpp, src/ui.cpp: Added test to spring options that checks if the Spring binary can be executed. Also fixed an socket event bug. git-svn-id: http://svn.springlobby.info/trunk@376 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Tommy Carlsson * src/chatpanel.cpp: ChatPanel scroll hack for wxmsw port. git-svn-id: http://svn.springlobby.info/trunk@375 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-31 Tommy Carlsson * src/battle.h, src/serverevents.cpp, src/serverevents.h, src/spring.cpp, src/tasserver.cpp: Fixed GameMode bug in start scripts. git-svn-id: http://svn.springlobby.info/trunk@374 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Tommy Carlsson * src/spring.cpp: Fix a locale problem in start scripts. git-svn-id: http://svn.springlobby.info/trunk@373 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Tommy Carlsson * src/spring.cpp: Possibly fixed start script bug. git-svn-id: http://svn.springlobby.info/trunk@372 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Tommy Carlsson * src/battleroomtab.cpp: Beautified the BattleRoomTab buttons. git-svn-id: http://svn.springlobby.info/trunk@371 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Tommy Carlsson * src/battleroomtab.cpp, src/chatpanel.cpp: Show joined and parted messages in battleroom. git-svn-id: http://svn.springlobby.info/trunk@370 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Leo Moisio * buildbot/master.cfg: buildmaster almost configured git-svn-id: http://svn.springlobby.info/trunk@369 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Leo Moisio * src/agreementdialog.cpp, src/agreementdialog.h, src/connectwindow.cpp, src/connectwindow.h, src/mapctrl.cpp: tab/space inconsistency and trailing spaces fixed git-svn-id: http://svn.springlobby.info/trunk@368 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Leo Moisio * buildbot/Makefile, buildbot/Makefile.sample, buildbot/master.cfg, buildbot/master.cfg.sample: renamed git-svn-id: http://svn.springlobby.info/trunk@367 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Leo Moisio * buildbot/Makefile.sample, buildbot/buildbot.tac, buildbot/master.cfg.sample: initial buildbot create-master invocation git-svn-id: http://svn.springlobby.info/trunk@366 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Leo Moisio * src/iconimagelist.cpp, src/iconimagelist.h: fixed english spelling git-svn-id: http://svn.springlobby.info/trunk@365 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Tommy Carlsson * src/chatpanel.cpp, src/chatpanel.h, src/connectwindow.cpp: ChatPanel scroll bug fixed. Also added message when registration was successful. git-svn-id: http://svn.springlobby.info/trunk@364 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Leo Moisio * src/agreementdialog.cpp, src/agreementdialog.h: fixed linux compile errors git-svn-id: http://svn.springlobby.info/trunk@363 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Tommy Carlsson * Makefile.am: Updated makefile.am git-svn-id: http://svn.springlobby.info/trunk@362 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Tommy Carlsson * SpringLobby.vcproj, src/agreementdialog.cpp, src/agreementdialog.h, src/connectwindow.cpp, src/connectwindow.h, src/server.h, src/serverevents.cpp, src/serverevents.h, src/socket.cpp, src/socket.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: First version of the register feature. git-svn-id: http://svn.springlobby.info/trunk@361 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Tommy Carlsson * src/battle.cpp, src/serverevents.cpp: Possible fix for Ticket #33. Also, no longer spectator as default. git-svn-id: http://svn.springlobby.info/trunk@360 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-30 Tommy Carlsson * src/ui.cpp: Leave battle when disconnected from server. git-svn-id: http://svn.springlobby.info/trunk@359 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-29 Tommy Carlsson * src/battleroomtab.cpp, src/springunitsync.cpp: Some minor tweaks. git-svn-id: http://svn.springlobby.info/trunk@358 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-29 Tommy Carlsson * rpm/svn.spec, springlobby.cbp, src/battle.cpp, src/battleroomlistctrl.cpp, src/iconimagelist.cpp, src/iconimagelist.h, src/iunitsync.h, src/springunitsync.cpp, src/springunitsync.h: BrainDamage's patch for ticket #30: Load side icons from mod file. Thanks a lot BrainDamage! git-svn-id: http://svn.springlobby.info/trunk@357 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-28 Leo Moisio * src/battleroomtab.cpp: fixed compile error on linux git-svn-id: http://svn.springlobby.info/trunk@356 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-28 Leo Moisio * configure.ac: configure now shows more clear msg from the wx2.8 check git-svn-id: http://svn.springlobby.info/trunk@355 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-27 Leo Moisio * src/spring.cpp: fixed the decimal point issue, hopefully for good git-svn-id: http://svn.springlobby.info/trunk@354 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-27 Tommy Carlsson * src/mapctrl.cpp, src/ui.cpp: Startrects drawn on minimap. git-svn-id: http://svn.springlobby.info/trunk@353 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-27 Tommy Carlsson * src/battle.cpp, src/battleroomlistctrl.cpp, src/serverevents.cpp, src/ui.cpp: Checks sync when map changes. git-svn-id: http://svn.springlobby.info/trunk@352 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-27 Tommy Carlsson * src/battleroomtab.cpp, src/chatpanel.cpp, src/iconimagelist.cpp, src/mapctrl.cpp: Fixed tickets #10, #14, and #15. git-svn-id: http://svn.springlobby.info/trunk@351 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-26 Leo Moisio * src/spring.cpp: fixes Ticket #13 where generated script fails when decimal point is something else because of locale git-svn-id: http://svn.springlobby.info/trunk@350 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-26 Tommy Carlsson * SpringLobby.vcproj, src/spring.cpp: countryCode added to start scripts. git-svn-id: http://svn.springlobby.info/trunk@349 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-26 Tommy Carlsson * src/battleroomtab.cpp, src/battleroomtab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mapctrl.cpp, src/mapctrl.h, src/springunitsync.cpp, src/ui.cpp: Mapinfo updated when host chagnges map. Minimap caching bug fixed. git-svn-id: http://svn.springlobby.info/trunk@348 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-24 Tommy Carlsson * Makefile.am, SpringLobby.vcproj, src/battlemaptab.cpp, src/battlemaptab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h: Added Map tab to battleroom. git-svn-id: http://svn.springlobby.info/trunk@347 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-24 Tommy Carlsson * src/battleroomtab.cpp, src/battleroomtab.h: Added mapsize, wind speed, and tidal strength to battleroomtab. git-svn-id: http://svn.springlobby.info/trunk@346 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-24 Tommy Carlsson * src/spring.cpp: Possibly fixed startscript MyPlayerNum bug. git-svn-id: http://svn.springlobby.info/trunk@345 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-23 Leo Moisio * gentoo/spring-overlay/games-strategy/spring-svn/Manifest, gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-20070716 .ebuild: fixed spring-svn ebuild git-svn-id: http://svn.springlobby.info/trunk@344 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-23 Leo Moisio * configure.ac, src/channellist.cpp, src/mapctrl.cpp, src/springunitsync.cpp, src/userlist.cpp: r364@multic0rn: semi | 2007-07-23 21:32:20 +0300 configure tests for both wx2.6 and wx2.8, also fixed all compilation warnings git-svn-id: http://svn.springlobby.info/trunk@343 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-23 Tommy Carlsson * src/battleroomtab.cpp, src/iunitsync.h, src/mapctrl.cpp, src/springunitsync.cpp, src/springunitsync.h: Minimaps aspect ratio corrected. git-svn-id: http://svn.springlobby.info/trunk@342 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-23 Leo Moisio * gentoo/spring-overlay/games-strategy/spring-svn/Manifest, gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-20070716 .ebuild: all ebuilds should be now fine. git-svn-id: http://svn.springlobby.info/trunk@341 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-23 Leo Moisio * gentoo/spring-overlay/games-strategy/spring/Manifest, gentoo/spring-overlay/games-strategy/spring/spring-0.75_p2.ebuild: now the ebuild for spring actually really works git-svn-id: http://svn.springlobby.info/trunk@340 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-23 Leo Moisio * : r362@multic0rn: semi | 2007-07-23 04:17:38 +0300 r359@multic0rn (orig r337): semi | 2007-07-23 03:26:47 +0300 r358@multic0rn: semi | 2007-07-23 03:26:31 +0300 r309@multic0rn (orig r306): semi | 2007-07-19 16:18:40 +0300 r308@multic0rn: semi | 2007-07-19 16:17:43 +0300 svn:eol-style native to the new sources r311@multic0rn (orig r307): semi | 2007-07-19 19:51:41 +0300 r310@multic0rn: semi | 2007-07-19 19:51:30 +0300 yet another small simplification of the build system r319@multic0rn (orig r312): semi | 2007-07-20 00:49:11 +0300 r316@multic0rn: semi | 2007-07-20 00:35:17 +0300 cleaning the flagimage handling r320@multic0rn (orig r313): semi | 2007-07-20 00:49:12 +0300 r317@multic0rn: semi | 2007-07-20 00:49:02 +0300 completed cleaning the flagimage handling r323@multic0rn (orig r314): semi | 2007-07-20 02:01:04 +0300 r321@multic0rn: semi | 2007-07-20 01:26:40 +0300 getting rid of non-c++ headers r324@multic0rn (orig r315): semi | 2007-07-20 02:01:05 +0300 r322@multic0rn: semi | 2007-07-20 02:00:53 +0300 cleaned headers a bit r326@multic0rn (orig r316): semi | 2007-07-20 15:38:32 +0300 r325@multic0rn: semi | 2007-07-20 15:37:27 +0300 refactored unitsync, included pure interface r329@multic0rn (orig r317): semi | 2007-07-22 00:02:20 +0300 r327@multic0rn: semi | 2007-07-21 23:58:39 +0300 some non-interesting cleanups r330@multic0rn (orig r318): semi | 2007-07-22 00:02:20 +0300 r328@multic0rn: semi | 2007-07-22 00:02:10 +0300 patch from tilman, fixes a visual glitch. thanks r335@multic0rn (orig r319): tc | 2007-07-22 09:51:08 +0300 Unselected bitmap in DrawBmpOnBmp function. r336@multic0rn (orig r320): tc | 2007-07-22 14:54:47 +0300 Some progress generating minimaps. r337@multic0rn (orig r321): tc | 2007-07-22 18:30:55 +0300 Minimaps showing in battleroom. r338@multic0rn (orig r322): semi | 2007-07-22 20:07:33 +0300 r331@multic0rn: semi | 2007-07-22 19:43:34 +0300 fixed springlobby ebuilds r339@multic0rn (orig r323): semi | 2007-07-22 20:07:34 +0300 r332@multic0rn: semi | 2007-07-22 20:00:38 +0300 fixed spring ebuilds r340@multic0rn (orig r324): semi | 2007-07-22 20:07:34 +0300 r333@multic0rn: semi | 2007-07-22 20:06:54 +0300 spring ebuilds fix r341@multic0rn (orig r325): semi | 2007-07-22 20:07:34 +0300 r334@multic0rn: semi | 2007-07-22 20:07:17 +0300 fix overlay descriptor r344@multic0rn (orig r326): semi | 2007-07-22 20:33:48 +0300 r342@multic0rn: semi | 2007-07-22 20:24:34 +0300 yet another fix to spring ebuilds r345@multic0rn (orig r327): semi | 2007-07-22 20:33:48 +0300 r343@multic0rn: semi | 2007-07-22 20:33:40 +0300 fixed a stupid typo in overlay descriptor r347@multic0rn (orig r328): semi | 2007-07-22 20:52:10 +0300 generated digests for all ebuild and fixed typos r348@multic0rn (orig r329): semi | 2007-07-22 21:01:44 +0300 fix a message in ebuilds r349@multic0rn (orig r330): semi | 2007-07-22 21:02:43 +0300 digests for all ebuilds again r350@multic0rn (orig r331): semi | 2007-07-22 23:08:43 +0300 added a warning to ebuild r351@multic0rn (orig r332): semi | 2007-07-23 01:05:24 +0300 r346@multic0rn: semi | 2007-07-23 01:05:17 +0300 set HAVE_WX28 in config.h when we have it r354@multic0rn (orig r333): semi | 2007-07-23 01:16:42 +0300 fix spring ebuilds and made digests r355@multic0rn (orig r334): tc | 2007-07-23 01:25:36 +0300 Caching minimaps. r356@multic0rn (orig r335): semi | 2007-07-23 02:17:24 +0300 fixed ebuilds r357@multic0rn (orig r336): semi | 2007-07-23 03:12:56 +0300 r353@multic0rn: semi | 2007-07-23 03:12:42 +0300 comment out some changes to make it compile again, need to think of another way r361@multic0rn (orig r338): semi | 2007-07-23 04:17:34 +0300 r360@multic0rn: semi | 2007-07-23 04:17:28 +0300 fixed compile errors on linux from tc's changes git-svn-id: http://svn.springlobby.info/trunk@339 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-23 Leo Moisio * : r358@multic0rn: semi | 2007-07-23 03:26:31 +0300 r309@multic0rn (orig r306): semi | 2007-07-19 16:18:40 +0300 r308@multic0rn: semi | 2007-07-19 16:17:43 +0300 svn:eol-style native to the new sources r311@multic0rn (orig r307): semi | 2007-07-19 19:51:41 +0300 r310@multic0rn: semi | 2007-07-19 19:51:30 +0300 yet another small simplification of the build system r319@multic0rn (orig r312): semi | 2007-07-20 00:49:11 +0300 r316@multic0rn: semi | 2007-07-20 00:35:17 +0300 cleaning the flagimage handling r320@multic0rn (orig r313): semi | 2007-07-20 00:49:12 +0300 r317@multic0rn: semi | 2007-07-20 00:49:02 +0300 completed cleaning the flagimage handling r323@multic0rn (orig r314): semi | 2007-07-20 02:01:04 +0300 r321@multic0rn: semi | 2007-07-20 01:26:40 +0300 getting rid of non-c++ headers r324@multic0rn (orig r315): semi | 2007-07-20 02:01:05 +0300 r322@multic0rn: semi | 2007-07-20 02:00:53 +0300 cleaned headers a bit r326@multic0rn (orig r316): semi | 2007-07-20 15:38:32 +0300 r325@multic0rn: semi | 2007-07-20 15:37:27 +0300 refactored unitsync, included pure interface r329@multic0rn (orig r317): semi | 2007-07-22 00:02:20 +0300 r327@multic0rn: semi | 2007-07-21 23:58:39 +0300 some non-interesting cleanups r330@multic0rn (orig r318): semi | 2007-07-22 00:02:20 +0300 r328@multic0rn: semi | 2007-07-22 00:02:10 +0300 patch from tilman, fixes a visual glitch. thanks r335@multic0rn (orig r319): tc | 2007-07-22 09:51:08 +0300 Unselected bitmap in DrawBmpOnBmp function. r336@multic0rn (orig r320): tc | 2007-07-22 14:54:47 +0300 Some progress generating minimaps. r337@multic0rn (orig r321): tc | 2007-07-22 18:30:55 +0300 Minimaps showing in battleroom. r338@multic0rn (orig r322): semi | 2007-07-22 20:07:33 +0300 r331@multic0rn: semi | 2007-07-22 19:43:34 +0300 fixed springlobby ebuilds r339@multic0rn (orig r323): semi | 2007-07-22 20:07:34 +0300 r332@multic0rn: semi | 2007-07-22 20:00:38 +0300 fixed spring ebuilds r340@multic0rn (orig r324): semi | 2007-07-22 20:07:34 +0300 r333@multic0rn: semi | 2007-07-22 20:06:54 +0300 spring ebuilds fix r341@multic0rn (orig r325): semi | 2007-07-22 20:07:34 +0300 r334@multic0rn: semi | 2007-07-22 20:07:17 +0300 fix overlay descriptor r344@multic0rn (orig r326): semi | 2007-07-22 20:33:48 +0300 r342@multic0rn: semi | 2007-07-22 20:24:34 +0300 yet another fix to spring ebuilds r345@multic0rn (orig r327): semi | 2007-07-22 20:33:48 +0300 r343@multic0rn: semi | 2007-07-22 20:33:40 +0300 fixed a stupid typo in overlay descriptor r347@multic0rn (orig r328): semi | 2007-07-22 20:52:10 +0300 generated digests for all ebuild and fixed typos r348@multic0rn (orig r329): semi | 2007-07-22 21:01:44 +0300 fix a message in ebuilds r349@multic0rn (orig r330): semi | 2007-07-22 21:02:43 +0300 digests for all ebuilds again r350@multic0rn (orig r331): semi | 2007-07-22 23:08:43 +0300 added a warning to ebuild r351@multic0rn (orig r332): semi | 2007-07-23 01:05:24 +0300 r346@multic0rn: semi | 2007-07-23 01:05:17 +0300 set HAVE_WX28 in config.h when we have it r354@multic0rn (orig r333): semi | 2007-07-23 01:16:42 +0300 fix spring ebuilds and made digests r355@multic0rn (orig r334): tc | 2007-07-23 01:25:36 +0300 Caching minimaps. r356@multic0rn (orig r335): semi | 2007-07-23 02:17:24 +0300 fixed ebuilds r357@multic0rn (orig r336): semi | 2007-07-23 03:12:56 +0300 r353@multic0rn: semi | 2007-07-23 03:12:42 +0300 comment out some changes to make it compile again, need to think of another way git-svn-id: http://svn.springlobby.info/trunk@337 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Leo Moisio * gentoo/spring-overlay/games-strategy/spring-svn/Manifest, gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-20070716 .ebuild, gentoo/spring-overlay/games-strategy/spring/Manifest, gentoo/spring-overlay/games-strategy/spring/spring-0.75_p2.ebuild: fixed ebuilds git-svn-id: http://svn.springlobby.info/trunk@335 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Tommy Carlsson * src/springlobbyapp.cpp, src/springlobbyapp.h, src/springunitsync.cpp, src/springunitsync.h: Caching minimaps. git-svn-id: http://svn.springlobby.info/trunk@334 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Leo Moisio * gentoo/spring-overlay/games-strategy/spring-svn/Manifest, gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-20070716 .ebuild, gentoo/spring-overlay/games-strategy/spring/Manifest, gentoo/spring-overlay/games-strategy/spring/files/digest-spring-0.7 5_p2, gentoo/spring-overlay/games-strategy/spring/spring-0.75_p2.ebuild: fix spring ebuilds and made digests git-svn-id: http://svn.springlobby.info/trunk@333 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Leo Moisio * autogen.sh, configure.ac: r346@multic0rn: semi | 2007-07-23 01:05:17 +0300 set HAVE_WX28 in config.h when we have it git-svn-id: http://svn.springlobby.info/trunk@332 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Leo Moisio * gentoo/overlay/games-util/springlobby-svn/Manifest, gentoo/overlay/games-util/springlobby-svn/springlobby-svn-0.0.20070 722.ebuild: added a warning to ebuild git-svn-id: http://svn.springlobby.info/trunk@331 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Leo Moisio * gentoo/overlay/games-util/springlobby-svn/Manifest, gentoo/spring-overlay/games-strategy/spring-svn/Manifest, gentoo/spring-overlay/games-strategy/spring/Manifest: digests for all ebuilds again git-svn-id: http://svn.springlobby.info/trunk@330 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Leo Moisio * gentoo/overlay/games-util/springlobby-svn/springlobby-svn-0.0.20070 722.ebuild, gentoo/overlay/games-util/springlobby/springlobby-0.1_alpha.ebuild, gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-20070716 .ebuild, gentoo/spring-overlay/games-strategy/spring/spring-0.75_p2.ebuild: fix a message in ebuilds git-svn-id: http://svn.springlobby.info/trunk@329 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Leo Moisio * gentoo/overlay/games-util/springlobby-svn/Manifest, gentoo/overlay/games-util/springlobby-svn/files/digest-springlobby- svn-0.0.20070710, gentoo/overlay/games-util/springlobby-svn/files/digest-springlobby- svn-0.0.20070715, gentoo/overlay/games-util/springlobby-svn/files/digest-springlobby- svn-0.0.20070722, gentoo/overlay/games-util/springlobby-svn/springlobby-svn-0.0.20070 710.ebuild, gentoo/overlay/games-util/springlobby-svn/springlobby-svn-0.0.20070 715.ebuild, gentoo/overlay/games-util/springlobby-svn/springlobby-svn-0.0.20070 716.ebuild, gentoo/overlay/games-util/springlobby/Manifest, gentoo/overlay/games-util/springlobby/files/digest-springlobby-0.1_ alpha, gentoo/spring-overlay/games-strategy/spring-svn/Manifest, gentoo/spring-overlay/games-strategy/spring-svn/files/digest-spring -svn-20070716, gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-20070716 .ebuild, gentoo/spring-overlay/games-strategy/spring/Manifest, gentoo/spring-overlay/games-strategy/spring/files/digest-spring-0.7 5_p2, gentoo/spring-overlay/games-strategy/spring/spring-0.75_p2.ebuild: generated digests for all ebuild and fixed typos git-svn-id: http://svn.springlobby.info/trunk@328 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Leo Moisio * gentoo/overlays.xml: r343@multic0rn: semi | 2007-07-22 20:33:40 +0300 fixed a stupid typo in overlay descriptor git-svn-id: http://svn.springlobby.info/trunk@327 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Leo Moisio * gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-20070716 .ebuild, gentoo/spring-overlay/games-strategy/spring/spring-0.75_p2.ebuild: r342@multic0rn: semi | 2007-07-22 20:24:34 +0300 yet another fix to spring ebuilds git-svn-id: http://svn.springlobby.info/trunk@326 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Leo Moisio * gentoo/overlays.xml: r334@multic0rn: semi | 2007-07-22 20:07:17 +0300 fix overlay descriptor git-svn-id: http://svn.springlobby.info/trunk@325 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Leo Moisio * gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-20070716 .ebuild, gentoo/spring-overlay/games-strategy/spring/spring-0.75_p2.ebuild, gentoo/spring-overlay/games-strategy/spring/spring-0.75b1.ebuild: r333@multic0rn: semi | 2007-07-22 20:06:54 +0300 spring ebuilds fix git-svn-id: http://svn.springlobby.info/trunk@324 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Leo Moisio * gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-0.75b1.2 0070716.ebuild, gentoo/spring-overlay/games-strategy/spring-svn/spring-svn-20070716 .ebuild, gentoo/spring-overlay/games-strategy/spring/spring-0.75b1.ebuild: r332@multic0rn: semi | 2007-07-22 20:00:38 +0300 fixed spring ebuilds git-svn-id: http://svn.springlobby.info/trunk@323 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Leo Moisio * gentoo/overlay/games-util/springlobby-svn/springlobby-svn-0.0.20070 722.ebuild, gentoo/overlay/games-util/springlobby/springlobby-0.1_alpha.ebuild: r331@multic0rn: semi | 2007-07-22 19:43:34 +0300 fixed springlobby ebuilds git-svn-id: http://svn.springlobby.info/trunk@322 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Tommy Carlsson * src/mapctrl.cpp, src/springunitsync.cpp: Minimaps showing in battleroom. git-svn-id: http://svn.springlobby.info/trunk@321 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Tommy Carlsson * SpringLobby.vcproj, src/iunitsync.h, src/mapctrl.cpp, src/mapctrl.h, src/springunitsync.cpp, src/springunitsync.h: Some progress generating minimaps. git-svn-id: http://svn.springlobby.info/trunk@320 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-22 Tommy Carlsson * src/mainwindow.cpp: Unselected bitmap in DrawBmpOnBmp function. git-svn-id: http://svn.springlobby.info/trunk@319 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-21 Leo Moisio * src/springoptionstab.cpp: r328@multic0rn: semi | 2007-07-22 00:02:10 +0300 patch from tilman, fixes a visual glitch. thanks git-svn-id: http://svn.springlobby.info/trunk@318 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-21 Leo Moisio * Makefile.am, configure.ac, src/chatpanel.cpp, src/mapctrl.cpp, src/server.cpp, src/springunitsync.h, src/tasserver.cpp, src/user.cpp, src/utils.cpp: r327@multic0rn: semi | 2007-07-21 23:58:39 +0300 some non-interesting cleanups git-svn-id: http://svn.springlobby.info/trunk@317 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-20 Leo Moisio * Makefile.am, src/battle.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/iunitsync.h, src/mainwindow.cpp, src/mainwindow.h, src/settings.cpp, src/settings.h, src/spring.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springunitsync.cpp, src/springunitsync.h, src/tasserver.cpp, src/ui.cpp, src/unitsync.cpp, src/unitsync.h: r325@multic0rn: semi | 2007-07-20 15:37:27 +0300 refactored unitsync, included pure interface git-svn-id: http://svn.springlobby.info/trunk@316 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-19 Leo Moisio * src/base64.h, src/battle.h, src/battlelist.h, src/battlelistctrl.h, src/battlelisttab.h, src/battleroomlistctrl.h, src/battleroomtab.h, src/channel.h, src/channellist.h, src/chatpanel.h, src/connectwindow.h, src/flagimages.h, src/iconimagelist.h, src/images/flags/mkflagmakefileam.sh, src/mainchattab.h, src/mainjoinbattletab.h, src/mainoptionstab.h, src/mainwindow.h, src/mapctrl.h, src/nicklistctrl.h, src/server.h, src/serverevents.h, src/settings.h, src/socket.h, src/spring.h, src/springlobbyapp.h, src/springoptionstab.h, src/springprocess.h, src/tasserver.h, src/ui.h, src/uiutils.h, src/unitsync.h, src/user.h, src/userlist.h, src/utils.h: r322@multic0rn: semi | 2007-07-20 02:00:53 +0300 cleaned headers a bit git-svn-id: http://svn.springlobby.info/trunk@315 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-19 Leo Moisio * src/server.cpp, src/tasserver.cpp, src/unitsync.cpp: r321@multic0rn: semi | 2007-07-20 01:26:40 +0300 getting rid of non-c++ headers git-svn-id: http://svn.springlobby.info/trunk@314 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-19 Leo Moisio * Makefile.am, src/flagimagedata.cpp, src/flagimagedata.h, src/flagimages.cpp, src/flagimages.h, src/images/flags/mkflaghead.sh: r317@multic0rn: semi | 2007-07-20 00:49:02 +0300 completed cleaning the flagimage handling git-svn-id: http://svn.springlobby.info/trunk@313 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-19 Leo Moisio * src/flagimagedata.cpp, src/flagimages.h, src/images/flags/mkflaghead.sh: r316@multic0rn: semi | 2007-07-20 00:35:17 +0300 cleaning the flagimage handling git-svn-id: http://svn.springlobby.info/trunk@312 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-19 Leo Moisio * Makefile.am, src/mapctrl.cpp: r312@multic0rn: semi | 2007-07-19 22:28:45 +0300 make it compile on linux git-svn-id: http://svn.springlobby.info/trunk@310 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-19 Leo Moisio * : r310@multic0rn: semi | 2007-07-19 19:51:30 +0300 yet another small simplification of the build system git-svn-id: http://svn.springlobby.info/trunk@309 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-19 Leo Moisio * autogen.sh, configure.ac: r310@multic0rn: semi | 2007-07-19 19:51:30 +0300 yet another small simplification of the build system git-svn-id: http://svn.springlobby.info/trunk@307 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-19 Leo Moisio * : r308@multic0rn: semi | 2007-07-19 16:17:43 +0300 svn:eol-style native to the new sources git-svn-id: http://svn.springlobby.info/trunk@306 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/chatpanel.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainoptionstab.cpp, src/springoptionstab.cpp: r4745@multic0rn: semi | 2007-07-18 02:07:17 +0300 Added missing includes necessary for compilation on wxWidgets 2.8. Thanks to det for reporting. git-svn-id: http://svn.springlobby.info/trunk@304 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/battleroomlistctrl.cpp, src/iconimagelist.cpp, src/iconimagelist.h, src/tasserver.h: r4740@multic0rn: semi | 2007-07-17 23:21:28 +0300 less deps for iconimagelist git-svn-id: http://svn.springlobby.info/trunk@303 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/ui.h: r4737@multic0rn: semi | 2007-07-17 23:03:30 +0300 removed useless comment git-svn-id: http://svn.springlobby.info/trunk@302 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/mainwindow.cpp, src/mainwindow.h, src/springlobbyapp.cpp, src/ui.cpp: r4736@multic0rn: semi | 2007-07-17 23:02:31 +0300 less deps for mainwindow git-svn-id: http://svn.springlobby.info/trunk@301 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/serverevents.cpp, src/serverevents.h: r4731@multic0rn: semi | 2007-07-17 22:49:51 +0300 less deps for serverevents git-svn-id: http://svn.springlobby.info/trunk@300 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/springlobbyapp.cpp, src/springlobbyapp.h: r4730@multic0rn: semi | 2007-07-17 22:41:52 +0300 less deps for springlobbyapp git-svn-id: http://svn.springlobby.info/trunk@299 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/tasserver.cpp, src/tasserver.h, src/ui.cpp: r4729@multic0rn: semi | 2007-07-17 22:35:07 +0300 less deps for tasserver git-svn-id: http://svn.springlobby.info/trunk@298 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/tasserver.cpp, src/tasserver.h: r4728@multic0rn: semi | 2007-07-17 22:07:44 +0300 uninlined tasserver (de)constructor git-svn-id: http://svn.springlobby.info/trunk@297 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/battle.cpp, src/battlelisttab.cpp, src/channel.h, src/chatpanel.cpp, src/flagimages.cpp, src/flagimages.h, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainwindow.cpp, src/mainwindow.h, src/nicklistctrl.cpp, src/server.cpp, src/server.h, src/serverevents.cpp, src/socket.cpp, src/spring.cpp, src/tasserver.cpp, src/ui.cpp, src/unitsync.cpp, src/user.cpp, src/user.h: r4725@multic0rn: semi | 2007-07-17 20:35:49 +0300 In C++, NULL should not be used. Prefer 0 instead. Replaced all NULLs to 0. git-svn-id: http://svn.springlobby.info/trunk@296 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mainwindow.cpp, src/ui.cpp: r4708@multic0rn: semi | 2007-07-17 20:19:03 +0300 less deps for mainjoinbattletab git-svn-id: http://svn.springlobby.info/trunk@295 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/mainchattab.cpp, src/mainchattab.h, src/ui.cpp: r4707@multic0rn: semi | 2007-07-17 20:08:49 +0300 less deps for mainchattab git-svn-id: http://svn.springlobby.info/trunk@294 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/battlelisttab.cpp, src/battleroomtab.cpp, src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainwindow.cpp, src/serverevents.cpp, src/springlobbyapp.cpp, src/ui.cpp: r4706@multic0rn: semi | 2007-07-17 19:59:49 +0300 less deps for chatpanel git-svn-id: http://svn.springlobby.info/trunk@293 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/battleroomtab.cpp, src/battleroomtab.h, src/mainjoinbattletab.cpp, src/serverevents.cpp, src/springlobbyapp.cpp: r4704@multic0rn: semi | 2007-07-17 19:10:53 +0300 less deps for battleroomtab git-svn-id: http://svn.springlobby.info/trunk@292 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/base64.cpp, src/battle.cpp, src/battle.h, src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/battleroomtab.h, src/channel.cpp, src/chatpanel.h, src/connectwindow.cpp, src/connectwindow.h, src/flagimages.cpp, src/flagimages.h, src/iconimagelist.cpp, src/iconimagelist.h, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mainoptionstab.cpp, src/mainwindow.h, src/nicklistctrl.cpp, src/server.h, src/serverevents.cpp, src/serverevents.h, src/settings.cpp, src/settings.h, src/socket.cpp, src/socket.h, src/spring.cpp, src/springlobby.rc, src/springlobbyapp.cpp, src/springlobbyapp.h, src/springoptionstab.cpp, src/tasserver.cpp, src/ui.cpp, src/ui.h, src/unitsync.cpp, src/user.h: r4700@multic0rn: semi | 2007-07-17 18:47:34 +0300 removed all trailing spaces git-svn-id: http://svn.springlobby.info/trunk@291 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/channel.h: r4699@multic0rn: semi | 2007-07-17 18:44:47 +0300 removed trailing spaces git-svn-id: http://svn.springlobby.info/trunk@290 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/battlelisttab.cpp, src/battlelisttab.h, src/ui.cpp: r4698@multic0rn: semi | 2007-07-17 18:42:09 +0300 less deps for battlelisttabs git-svn-id: http://svn.springlobby.info/trunk@289 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * Makefile.am, src/spring.cpp, src/spring.h, src/springprocess.cpp, src/springprocess.h: r4693@multic0rn: semi | 2007-07-17 18:31:15 +0300 less deps for spring git-svn-id: http://svn.springlobby.info/trunk@288 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/spring.h: r4692@multic0rn: semi | 2007-07-17 18:18:38 +0300 tiny change git-svn-id: http://svn.springlobby.info/trunk@287 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/socket.cpp, src/socket.h: r4691@multic0rn: semi | 2007-07-17 18:12:58 +0300 less deps for socket git-svn-id: http://svn.springlobby.info/trunk@286 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp, src/battleroomtab.h, src/mainchattab.cpp, src/mainoptionstab.cpp, src/mainoptionstab.h, src/serverevents.cpp, src/springoptionstab.h, src/ui.cpp: r4690@multic0rn: semi | 2007-07-17 18:01:49 +0300 less deps for springoptionstab mainoptionstab battleroomlistctrl git-svn-id: http://svn.springlobby.info/trunk@285 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.cpp, src/springlobbyapp.cpp, src/ui.cpp: r4688@multic0rn: semi | 2007-07-17 17:34:43 +0300 less deps for battlelistctrl git-svn-id: http://svn.springlobby.info/trunk@284 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springoptionstab.h: r4685@multic0rn: semi | 2007-07-17 16:41:13 +0300 less deps for springoptionstab git-svn-id: http://svn.springlobby.info/trunk@283 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/connectwindow.cpp, src/connectwindow.h, src/nicklistctrl.cpp, src/nicklistctrl.h: r4684@multic0rn: semi | 2007-07-17 16:27:14 +0300 less deps for connectwindow and nicklistctrl git-svn-id: http://svn.springlobby.info/trunk@282 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/battle.cpp, src/channellist.cpp, src/settings.cpp, src/springoptionstab.cpp, src/tasserver.cpp, src/unitsync.cpp, src/unitsync.h: r4678@multic0rn: semi | 2007-07-17 15:18:55 +0300 less deps for unitsync git-svn-id: http://svn.springlobby.info/trunk@281 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Tommy Carlsson * SpringLobby.vcproj, src/images/core.xpm: Ticket #48 fixed: patch: fixed alpha levels of core icon git-svn-id: http://svn.springlobby.info/trunk@280 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/settings.cpp, src/settings.h: r4673@multic0rn: semi | 2007-07-17 14:32:06 +0300 less deps for settings git-svn-id: http://svn.springlobby.info/trunk@279 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/boost/md5.cpp, src/boost/md5.hpp: r4672@multic0rn: semi | 2007-07-17 14:21:20 +0300 less deps in md5 git-svn-id: http://svn.springlobby.info/trunk@278 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/battle.cpp, src/battleroomlistctrl.cpp, src/connectwindow.cpp, src/mainoptionstab.cpp, src/settings.cpp, src/settings.h, src/spring.cpp, src/springoptionstab.cpp, src/tasserver.cpp, src/tasserver.h, src/unitsync.cpp, src/unitsync.h, src/user.h: r4671@multic0rn: semi | 2007-07-17 14:01:39 +0300 removed all tab characters from sources and continuing dependency killing git-svn-id: http://svn.springlobby.info/trunk@277 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * rpm/tarball.spec: r4658@multic0rn: semi | 2007-07-17 13:09:51 +0300 Brain Damage's patch to the rpm git-svn-id: http://svn.springlobby.info/trunk@276 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/chatpanel.cpp, src/chatpanel.h, src/nicklistctrl.cpp, src/server.h, src/serverevents.cpp, src/spring.cpp, src/spring.h, src/ui.cpp, src/user.h, src/userlist.cpp: Fixed vc++ compability. git-svn-id: http://svn.springlobby.info/trunk@275 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/battle.cpp, src/boost/md5.hpp, src/channel.cpp, src/channel.h, src/server.h, src/serverevents.h, src/settings.h: r4656@multic0rn: semi | 2007-07-17 12:19:27 +0300 less deps git-svn-id: http://svn.springlobby.info/trunk@274 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/battle.cpp, src/battle.h, src/battlelistctrl.cpp, src/battlelisttab.cpp, src/battleroomtab.cpp, src/channel.cpp, src/channel.h, src/chatpanel.cpp, src/iconimagelist.cpp, src/mainwindow.cpp, src/server.cpp, src/server.h, src/serverevents.cpp, src/serverevents.h, src/spring.cpp, src/spring.h, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/tasserver.cpp, src/ui.cpp, src/ui.h: r4652@multic0rn: semi | 2007-07-17 03:36:45 +0300 largeish refactor for dependency reduction git-svn-id: http://svn.springlobby.info/trunk@273 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/flagimages.cpp: r4651@multic0rn: semi | 2007-07-17 01:44:42 +0300 less dependencies for flagimages.cpp git-svn-id: http://svn.springlobby.info/trunk@272 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-17 Leo Moisio * src/utils.cpp, src/utils.h: r4650@multic0rn: semi | 2007-07-17 01:27:03 +0300 less dependencies for util git-svn-id: http://svn.springlobby.info/trunk@271 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-16 Leo Moisio * Makefile.am, src/battlelist.h, src/channellist.cpp, src/channellist.h, src/chatpanel.cpp, src/server.cpp, src/serverevents.cpp, src/ui.cpp, src/userlist.cpp, src/userlist.h: r4646@multic0rn: semi | 2007-07-17 01:03:02 +0300 refactor channellist for less dependencies git-svn-id: http://svn.springlobby.info/trunk@270 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-16 Leo Moisio * Makefile.am, src/battlelist.cpp, src/battlelist.h, src/server.cpp, src/server.h, src/userlist.cpp: r4645@multic0rn: semi | 2007-07-17 00:24:11 +0300 refactor battlelist for less dependencies git-svn-id: http://svn.springlobby.info/trunk@269 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-16 Leo Moisio * src/base64.cpp: r4644@multic0rn: semi | 2007-07-16 23:47:41 +0300 less dependencies for base64 git-svn-id: http://svn.springlobby.info/trunk@268 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-16 Leo Moisio * Makefile.am, src/battle.cpp, src/battle.h, src/battleroomtab.cpp, src/channel.h, src/chatpanel.h, src/nicklistctrl.cpp, src/spring.cpp, src/userlist.cpp, src/userlist.h: r4642@multic0rn: semi | 2007-07-16 23:34:49 +0300 refactor userlist for minimal dependencies git-svn-id: http://svn.springlobby.info/trunk@267 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-16 Leo Moisio * gentoo/overlay/games-util/springlobby-svn/springlobby-svn-0.0.20070 716.ebuild: r4632@multic0rn: semi | 2007-07-16 19:47:01 +0300 updated ebuilds git-svn-id: http://svn.springlobby.info/trunk@266 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-16 Leo Moisio * : r4631@multic0rn: semi | 2007-07-16 19:44:41 +0300 I took some more autogenerated files out of svn with last commit, and now I'll svn:ignore them. git-svn-id: http://svn.springlobby.info/trunk@265 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-16 Leo Moisio * autogen.sh: r4629@multic0rn: semi | 2007-07-16 19:31:07 +0300 added a better autogen.sh git-svn-id: http://svn.springlobby.info/trunk@263 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-16 Leo Moisio * Makefile.am: r4628@multic0rn: semi | 2007-07-16 18:50:35 +0300 Added some sourcefiles to Makefile.am to fix make distcheck. git-svn-id: http://svn.springlobby.info/trunk@262 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-16 Leo Moisio * : r4627@multic0rn: semi | 2007-07-16 18:27:19 +0300 Svn ignores in src/ were outdated so I took them away. Feel free to add back those that you actually need. This is just so that nothing weird gets hiding in there. git-svn-id: http://svn.springlobby.info/trunk@261 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-16 Leo Moisio * THANKS: r4302@multic0rn: semi | 2007-07-15 23:57:01 +0300 mention nice people in our THANKS file and what they did git-svn-id: http://svn.springlobby.info/trunk@259 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-16 Tommy Carlsson * SpringLobby.vcproj, src/images/select_icon.xpm, src/mainwindow.cpp, src/mainwindow.h: Made maintab selection more obvious. git-svn-id: http://svn.springlobby.info/trunk@258 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-15 Leo Moisio * rpm/svn.spec, rpm/tarball.spec: r4294@multic0rn: semi | 2007-07-15 23:53:38 +0300 RPM scripts contributed by Brain Damage. Thank you. git-svn-id: http://svn.springlobby.info/trunk@257 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-15 Leo Moisio * gentoo/overlay/games-util/springlobby-svn/Manifest, gentoo/overlay/games-util/springlobby-svn/files/digest-springlobby- svn-0.0.20070715, gentoo/overlay/games-util/springlobby/Manifest: ebuild digests generated git-svn-id: http://svn.springlobby.info/trunk@256 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-15 Leo Moisio * gentoo/overlay/games-util/springlobby-svn/springlobby-svn-0.0.20070 715.ebuild, gentoo/overlay/games-util/springlobby/springlobby-0.1_alpha.ebuild: r4285@multic0rn: semi | 2007-07-15 23:26:04 +0300 updated ebuilds a bit git-svn-id: http://svn.springlobby.info/trunk@255 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-15 Leo Moisio * gentoo/overlays.xml: r4284@multic0rn: semi | 2007-07-15 22:50:18 +0300 removed redundant char git-svn-id: http://svn.springlobby.info/trunk@254 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-15 Tommy Carlsson * src/socket.h, src/springlobby.rc, src/ui.cpp, src/ui.h: Ticket #7 fixed, again. Connecting twice opens two server tabs. git-svn-id: http://svn.springlobby.info/trunk@253 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-15 Leo Moisio * gentoo/overlays.xml: r4270@multic0rn: semi | 2007-07-15 20:19:09 +0300 misunderstood overlay xml schema git-svn-id: http://svn.springlobby.info/trunk@252 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-15 Leo Moisio * gentoo/overlays.xml: r4268@multic0rn: semi | 2007-07-15 20:11:14 +0300 setting up layman git-svn-id: http://svn.springlobby.info/trunk@251 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-15 Leo Moisio * gentoo/overlays.xml: r4266@multic0rn: semi | 2007-07-15 20:00:50 +0300 added the overlay description file to use with app-portage/layman git-svn-id: http://svn.springlobby.info/trunk@250 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-15 Leo Moisio * ebuild/games-util/springlobby-svn/Manifest, ebuild/games-util/springlobby-svn/files/digest-springlobby-svn-0.0. 20070710, ebuild/games-util/springlobby-svn/springlobby-svn-0.0.20070710.ebui ld, ebuild/games-util/springlobby/Manifest, ebuild/games-util/springlobby/files/digest-springlobby-0.1_alpha, ebuild/games-util/springlobby/springlobby-0.1_alpha.ebuild, gentoo/overlay/games-util/springlobby-svn/Manifest, gentoo/overlay/games-util/springlobby-svn/files/digest-springlobby- svn-0.0.20070710, gentoo/overlay/games-util/springlobby-svn/springlobby-svn-0.0.20070 710.ebuild, gentoo/overlay/games-util/springlobby/Manifest, gentoo/overlay/games-util/springlobby/files/digest-springlobby-0.1_ alpha, gentoo/overlay/games-util/springlobby/springlobby-0.1_alpha.ebuild: r4263@multic0rn: semi | 2007-07-15 19:48:46 +0300 adding support for layman for handling gentoo portage overlays git-svn-id: http://svn.springlobby.info/trunk@249 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-15 Tommy Carlsson * SpringLobby.vcproj, src/battlelisttab.cpp, src/connectwindow.cpp, src/images/connect.xpm, src/images/springlobby.xpm, src/mainwindow.cpp, src/serverevents.cpp, src/spring.cpp, src/springlobby.rc: Application icon added. Added icon to connect window. Small tweaks here and there. git-svn-id: http://svn.springlobby.info/trunk@248 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-14 Tommy Carlsson * src/battleroomtab.cpp, src/battleroomtab.h: Added spectator checkbox to battleroomtab. git-svn-id: http://svn.springlobby.info/trunk@247 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-14 Tommy Carlsson * src/battleroomlistctrl.cpp: Trivial icon bug in battleroomlistctrl. git-svn-id: http://svn.springlobby.info/trunk@246 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-14 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/spring.cpp, src/unitsync.cpp: Fixed start script bug. git-svn-id: http://svn.springlobby.info/trunk@245 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-14 Tommy Carlsson * : Added an application icon with 16, 23, 64 sizes. git-svn-id: http://svn.springlobby.info/trunk@244 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-14 Leo Moisio * debian/README, debian/README.Debian, debian/changelog, debian/compat, debian/control, debian/copyright, debian/cron.d.ex, debian/dirs, debian/docs, debian/emacsen-install.ex, debian/emacsen-remove.ex, debian/emacsen-startup.ex, debian/init.d.ex, debian/manpage.1.ex, debian/manpage.sgml.ex, debian/manpage.xml.ex, debian/menu.ex, debian/postinst.ex, debian/postrm.ex, debian/preinst.ex, debian/prerm.ex, debian/rules, debian/springlobby-default.ex, debian/springlobby.doc-base.EX, debian/watch.ex: r4217@multic0rn: semi | 2007-07-14 03:35:23 +0300 starting to make debian package, initial dh_make invocation git-svn-id: http://svn.springlobby.info/trunk@243 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-14 Leo Moisio * configure.ac, configure.in: r4216@multic0rn: semi | 2007-07-14 02:48:25 +0300 filename extension was deprecated git-svn-id: http://svn.springlobby.info/trunk@242 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-13 Tommy Carlsson * src/battleroomtab.cpp: Ticket #35 fixed. Side index wrong. Just a cut n' paste bug :) git-svn-id: http://svn.springlobby.info/trunk@241 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-13 Tommy Carlsson * src/battleroomlistctrl.cpp, src/iconimagelist.cpp, src/iconimagelist.h, src/images/arm.xpm, src/images/core.xpm: Ticket #34 fixed. Side icons in battleroom player list. git-svn-id: http://svn.springlobby.info/trunk@240 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-13 Leo Moisio * ebuild/games-util/springlobby-svn/Manifest, ebuild/games-util/springlobby-svn/files/digest-springlobby-svn-0.0. 20070710, ebuild/games-util/springlobby-svn/files/digest-springlobby-svn-2007 0710, ebuild/games-util/springlobby-svn/springlobby-svn-0.0.20070710.ebui ld, ebuild/games-util/springlobby-svn/springlobby-svn-20070710.ebuild: re-versionnumbered ebuild git-svn-id: http://svn.springlobby.info/trunk@239 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Leo Moisio * : r4200@multic0rn: semi | 2007-07-13 02:31:53 +0300 the files added in previous commit need svn:eol-style native git-svn-id: http://svn.springlobby.info/trunk@238 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Leo Moisio * ebuild/games-util/springlobby-svn/Manifest, ebuild/games-util/springlobby-svn/files/digest-springlobby-svn-2007 0710, ebuild/games-util/springlobby/Manifest, ebuild/games-util/springlobby/files/digest-springlobby-0.1_alpha: digests and manifests for the ebuilds git-svn-id: http://svn.springlobby.info/trunk@236 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Leo Moisio * ebuild/games-util/springlobby-svn/springlobby-svn-20070710.ebuild, ebuild/games-util/springlobby/springlobby-0.1_alpha.ebuild: r4195@multic0rn: semi | 2007-07-13 01:54:11 +0300 fixed a stupid bug in ebuilds git-svn-id: http://svn.springlobby.info/trunk@235 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Leo Moisio * ebuild/games-util/springlobby-svn/springlobby-svn-20070710.ebuild, ebuild/games-util/springlobby/springlobby-0.1_alpha.ebuild: r4192@multic0rn: semi | 2007-07-13 01:38:51 +0300 initial ebuilds. digest and manifest not done yet git-svn-id: http://svn.springlobby.info/trunk@234 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Leo Moisio * : r4191@multic0rn: semi | 2007-07-13 01:05:28 +0300 svn ignore config.h.in git-svn-id: http://svn.springlobby.info/trunk@233 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Leo Moisio * autogen.sh, config.h.in: r4186@multic0rn: semi | 2007-07-13 00:28:06 +0300 config.h.in is automatically generated so it should not be in version control. autoreconf does everything that autogen.sh does for us. git-svn-id: http://svn.springlobby.info/trunk@231 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Leo Moisio * autogen.sh, configure.in, m4/wxwin.m4: r4181@multic0rn: semi | 2007-07-12 23:16:22 +0300 Keeping build system as simple as possible for less dependencies and less flood until we actually need them. git-svn-id: http://svn.springlobby.info/trunk@230 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Leo Moisio * Makefile.am: r4180@multic0rn: semi | 2007-07-12 23:15:53 +0300 Keeping build system as simple as possible for less dependencies and less flood until we actually need them. git-svn-id: http://svn.springlobby.info/trunk@229 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Leo Moisio * src/settings.cpp, src/settings.h, src/springoptionstab.cpp, src/springoptionstab.h: fixed compile errors on linux from those _() and _T() things git-svn-id: http://svn.springlobby.info/trunk@228 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Leo Moisio * src/battle.cpp: fixed signedness mismatch git-svn-id: http://svn.springlobby.info/trunk@227 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Leo Moisio * configure.in: require autoconf 2.59c git-svn-id: http://svn.springlobby.info/trunk@226 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Tommy Carlsson * src/battlelistctrl.cpp, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/battleroomtab.h, src/chatpanel.cpp, src/connectwindow.cpp, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainoptionstab.cpp, src/mainwindow.cpp, src/nicklistctrl.cpp, src/serverevents.cpp, src/settings.cpp, src/settings.h, src/spring.cpp, src/springlobbyapp.cpp, src/springoptionstab.cpp, src/springoptionstab.h, src/ui.cpp, src/unitsync.cpp: All _() changed to _T() and all _T() changed to _(). git-svn-id: http://svn.springlobby.info/trunk@225 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Leo Moisio * src/spring.cpp: fix compile error on linux git-svn-id: http://svn.springlobby.info/trunk@224 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-12 Tommy Carlsson * src/spring.cpp: Ticket #33 possibly fixed. git-svn-id: http://svn.springlobby.info/trunk@223 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-11 Leo Moisio * configure.in: streamlined configure.in for speed, simplicity, less flood and less obsoleteness git-svn-id: http://svn.springlobby.info/trunk@222 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-10 Leo Moisio * Makefile.am: proper use of dist_doc_DATA target instead of hackery git-svn-id: http://svn.springlobby.info/trunk@221 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-10 Leo Moisio * Makefile.am, configure.in, src/Makefile.am, src/boost/md5.cpp, src/images/Makefile.am, src/images/flags/Makefile.am, src/tasserver.h: Made the build system flat for speed and simplicity, see http://aegis.sourceforge.net/auug97.pdf git-svn-id: http://svn.springlobby.info/trunk@220 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-10 Leo Moisio * : svn ignore generated release packages git-svn-id: http://svn.springlobby.info/trunk@219 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-10 Leo Moisio * SpringLobby.sln, src/battle.cpp, src/images/colourbox.xpm, src/images/nexists.xpm, src/images/options_icon.xpm, src/images/spectator.xpm, src/images/spring.xpm, src/mainoptionstab.cpp, src/mainoptionstab.h, src/mainwindow.h, src/spring.cpp, src/spring.h, src/springoptionstab.cpp, src/springoptionstab.h, src/unitsync.cpp, src/unitsync.h: svn:eol-style native for all text files that were missing it git-svn-id: http://svn.springlobby.info/trunk@217 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-09 Tommy Carlsson * src/battle.cpp, src/battle.h, src/serverevents.cpp, src/serverevents.h, src/spring.cpp, src/tasserver.cpp, src/ui.cpp, src/ui.h, src/unitsync.cpp, src/unitsync.h: Ticket #32 fixed. Disabled units/buildings support in start script. Also a starttype bug fixed in start script. git-svn-id: http://svn.springlobby.info/trunk@216 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-09 Tommy Carlsson * src/battle.h: Linux build compile errors fixed git-svn-id: http://svn.springlobby.info/trunk@215 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-08 Tommy Carlsson * src/spring.cpp: Fixed bug in script generator. git-svn-id: http://svn.springlobby.info/trunk@214 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-08 Tommy Carlsson * src/battle.cpp, src/battle.h, src/serverevents.cpp, src/serverevents.h, src/spring.cpp, src/tasserver.cpp, src/ui.cpp, src/ui.h: Fixed ticket #27. Team boxes now supported. git-svn-id: http://svn.springlobby.info/trunk@213 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-08 Tommy Carlsson * src/battleroomtab.cpp, src/battleroomtab.h, src/mainjoinbattletab.cpp: Ally, side, and team comos in battle room updates. git-svn-id: http://svn.springlobby.info/trunk@212 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-07 Tommy Carlsson * springlobby.cbp, src/battleroomtab.cpp, src/battleroomtab.h, src/iconimagelist.cpp, src/images/colourbox.xpm, src/unitsync.cpp, src/unitsync.h: Setting colours and sides in battleroom fixed. git-svn-id: http://svn.springlobby.info/trunk@211 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-07 Tommy Carlsson * src/battlelistctrl.cpp, src/battlelistctrl.h: Error message when browser couldn't be launched when searching for mod/map. git-svn-id: http://svn.springlobby.info/trunk@210 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-07 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battlelistctrl.cpp, src/battlelistctrl.h, src/battlelisttab.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp, src/battleroomtab.h, src/mainwindow.cpp, src/mainwindow.h, src/tasserver.cpp: Setting team and ally in battle room. Unitsync reload tool. git-svn-id: http://svn.springlobby.info/trunk@209 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-06 Tommy Carlsson * src/battlelistctrl.cpp, src/battlelistctrl.h, src/spring.cpp: Possibly fixed script.txt generation error(untested). Also added popupmenu on battle list for downloading mods and maps. git-svn-id: http://svn.springlobby.info/trunk@208 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-05 Tommy Carlsson * src/ui.cpp: Fixed broken /join with password. git-svn-id: http://svn.springlobby.info/trunk@207 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-05 Tommy Carlsson * src/chatpanel.cpp, src/mainwindow.cpp, src/mainwindow.h, src/server.cpp, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/ui.cpp, src/ui.h, src/user.cpp, src/user.h: Implemented ticket #20. Added a way to open private chats. Also fixed the problem with not being able to speak in private. git-svn-id: http://svn.springlobby.info/trunk@206 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-05 Tommy Carlsson * src/battle.h, src/battleroomtab.cpp, src/battleroomtab.h, src/channel.h, src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainchattab.h, src/mainjoinbattletab.cpp, src/mainwindow.cpp, src/ui.cpp, src/ui.h, src/user.h: Ticket #17 fixed. /join and /j now works. git-svn-id: http://svn.springlobby.info/trunk@205 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-05 Tommy Carlsson * src/iconimagelist.h: Linux build compile errors fixed git-svn-id: http://svn.springlobby.info/trunk@204 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-05 Tommy Carlsson * src/battleroomlistctrl.cpp, src/iconimagelist.cpp, src/iconimagelist.h, src/images/colourbox.xpm: Player colours in battlelist implemented. git-svn-id: http://svn.springlobby.info/trunk@203 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-05 Tommy Carlsson * src/battlelisttab.cpp, src/battlelisttab.h: Fixed joining passworded battle. git-svn-id: http://svn.springlobby.info/trunk@202 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-04 Tommy Carlsson * src/spring.cpp, src/tasserver.h: Bug that read the wrong colors from server fixed and some updates to the script.txt generator done. Playing is now possible in some cases. git-svn-id: http://svn.springlobby.info/trunk@201 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-04 Tommy Carlsson * src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/serverevents.cpp, src/settings.h, src/spring.cpp, src/tasserver.cpp, src/ui.cpp, src/ui.h, src/unitsync.cpp, src/unitsync.h, src/utils.h: Fixed ticket #7, and script.txt generation one step closer. git-svn-id: http://svn.springlobby.info/trunk@200 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-04 Tommy Carlsson * src/spring.cpp: Linux build compile errors fixed git-svn-id: http://svn.springlobby.info/trunk@199 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-04 Tommy Carlsson * src/battle.h, src/utils.h: Linux build compile errors fixed git-svn-id: http://svn.springlobby.info/trunk@198 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-04 Tommy Carlsson * src/battle.h, src/battleroomlistctrl.cpp, src/iconimagelist.cpp, src/iconimagelist.h, src/images/spectator.xpm, src/serverevents.cpp, src/serverevents.h, src/spring.cpp, src/spring.h, src/tasserver.cpp, src/tasserver.h, src/unitsync.cpp, src/unitsync.h, src/user.cpp, src/user.h, src/utils.h: Loads of things fixed in able to generate a working script.txt(half way there now). Some visual enhancements in battleroom when player is spectator. git-svn-id: http://svn.springlobby.info/trunk@197 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-03 Tommy Carlsson * src/spring.cpp: LinuLinux build compile error fixed git-svn-id: http://svn.springlobby.info/trunk@196 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-03 Tommy Carlsson * src/spring.cpp: LinuLinux build compile error fixed git-svn-id: http://svn.springlobby.info/trunk@195 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-03 Tommy Carlsson * src/utils.h: Linux build compile error fixed git-svn-id: http://svn.springlobby.info/trunk@194 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-03 Tommy Carlsson * src/spring.cpp, src/spring.h: spring.h/.cpp added. git-svn-id: http://svn.springlobby.info/trunk@193 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-03 Tommy Carlsson * src/Makefile.am: Makefile updated git-svn-id: http://svn.springlobby.info/trunk@192 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-03 Tommy Carlsson * SpringLobby.vcproj, src/battle.cpp, src/battle.h, src/serverevents.cpp, src/settings.cpp, src/settings.h, src/ui.cpp, src/ui.h, src/unitsync.h, src/utils.cpp, src/utils.h: Now generates script.txt(incomplete) and starts spring when battle starts. git-svn-id: http://svn.springlobby.info/trunk@191 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-01 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battlelisttab.cpp, src/battleroomtab.cpp, src/battleroomtab.h, src/chatpanel.cpp, src/iconimagelist.cpp, src/iconimagelist.h, src/images/exists.xpm, src/unitsync.cpp, src/unitsync.h, src/user.h, src/utils.h: Battle sync checks added and I'm ready button implemented. git-svn-id: http://svn.springlobby.info/trunk@190 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-07-01 Tommy Carlsson * src/mainoptionstab.cpp, src/mainoptionstab.h, src/springlobbyapp.cpp, src/springlobbyapp.h, src/springoptionstab.cpp, src/springoptionstab.h, src/unitsync.cpp, src/unitsync.h: Spring options implemented. git-svn-id: http://svn.springlobby.info/trunk@189 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-29 Tommy Carlsson * src/images/exists.xpm: Added icon file. git-svn-id: http://svn.springlobby.info/trunk@188 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-29 Tommy Carlsson * src/battlelistctrl.cpp, src/iconimagelist.cpp, src/iconimagelist.h, src/images/logo.svg: Added new icon that shows if map/mod is found. git-svn-id: http://svn.springlobby.info/trunk@187 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-29 Tommy Carlsson * src/images/logo.svg: Added logo candidate svg file. git-svn-id: http://svn.springlobby.info/trunk@186 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-29 Tommy Carlsson * src/springlobbyapp.cpp: Fixed linux build compiler error. git-svn-id: http://svn.springlobby.info/trunk@185 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-29 Tommy Carlsson * src/mainwindow.cpp, src/mainwindow.h, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/springlobbyapp.h: Added first startup message and added report bug, documentation in the help menu. git-svn-id: http://svn.springlobby.info/trunk@184 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-29 Tommy Carlsson * src/battle.cpp, src/unitsync.cpp, src/unitsync.h: Detects if mod is available in battle list. git-svn-id: http://svn.springlobby.info/trunk@183 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-29 Tommy Carlsson * src/mainwindow.cpp, src/unitsync.cpp, src/unitsync.h: Removed some warnings from linux build. git-svn-id: http://svn.springlobby.info/trunk@182 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-29 Tommy Carlsson * src/settings.cpp, src/settings.h: Compile error in linux build fixed. git-svn-id: http://svn.springlobby.info/trunk@181 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-29 Tommy Carlsson * SpringLobby.vcproj, src/images/nexists.xpm, src/settings.h, src/unitsync.cpp, src/unitsync.h: Now detects if map is not available in the battles list. git-svn-id: http://svn.springlobby.info/trunk@180 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-28 Tommy Carlsson * src/battle.cpp, src/unitsync.cpp, src/unitsync.h: Fixed incompatibilities with unistd.h git-svn-id: http://svn.springlobby.info/trunk@179 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-28 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battlelistctrl.cpp, src/battleroomtab.cpp, src/iconimagelist.cpp, src/iconimagelist.h, src/images/nexists.xpm, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h, src/unitsync.cpp, src/unitsync.h: Fixed some wx errors in battleroom tab and also made made BattleListCtrl ask Unitsync if maps and mods are available. git-svn-id: http://svn.springlobby.info/trunk@178 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-27 Tommy Carlsson * src/mainjoinbattletab.cpp, src/mainjoinbattletab.h: Leaving battle crash bug fixed. git-svn-id: http://svn.springlobby.info/trunk@177 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-27 Tommy Carlsson * src/springoptionstab.cpp: Cast needed by linux build added. git-svn-id: http://svn.springlobby.info/trunk@176 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-26 Tommy Carlsson * src/springoptionstab.cpp: Removed wx 2.8 only constant. git-svn-id: http://svn.springlobby.info/trunk@175 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-26 Tommy Carlsson * src/unitsync.cpp: Trying to fix build errors on linux build. git-svn-id: http://svn.springlobby.info/trunk@174 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-26 Tommy Carlsson * src/Makefile.am: Added files to Makefile.am git-svn-id: http://svn.springlobby.info/trunk@173 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-26 Tommy Carlsson * src/settings.cpp: Fixed some convertion errors in settings.cpp git-svn-id: http://svn.springlobby.info/trunk@172 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-26 Tommy Carlsson * src/settings.cpp: Fixed some convertion errors in settings.cpp git-svn-id: http://svn.springlobby.info/trunk@171 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-25 Leo Moisio * src/Makefile.am: removed duplicate AM_CXXFLAG lines git-svn-id: http://svn.springlobby.info/trunk@170 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-25 Tommy Carlsson * src/unitsync.cpp, src/unitsync.h: Windows linux incompability with __stdcall possibly fixed. git-svn-id: http://svn.springlobby.info/trunk@169 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-25 Tommy Carlsson * src/chatpanel.cpp: Fixed bug reported in ticket #19 git-svn-id: http://svn.springlobby.info/trunk@168 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-24 Tommy Carlsson * src/settings.cpp, src/settings.h, src/springoptionstab.cpp, src/springoptionstab.h, src/unitsync.cpp, src/unitsync.h: Spring settings tab fixed up a little and the unitsync library is loaded from the right location. git-svn-id: http://svn.springlobby.info/trunk@167 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-24 Tommy Carlsson * SpringLobby.vcproj, src/images/options_icon.xpm, src/images/spring.xpm, src/mainoptionstab.cpp, src/mainoptionstab.h, src/mainwindow.cpp, src/mainwindow.h, src/springoptionstab.cpp, src/springoptionstab.h, src/unitsync.cpp, src/unitsync.h: Options main tab added with spring options (not yet functional). git-svn-id: http://svn.springlobby.info/trunk@166 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-23 Tommy Carlsson * SpringLobby.sln, SpringLobby.vcproj, src/chatpanel.cpp, src/images/chat_icon.xpm, src/images/join_icon.xpm, src/mainwindow.cpp, src/mainwindow.h, src/nicklistctrl.cpp, src/tasserver.cpp, src/unitsync.cpp, src/unitsync.h, src/utils.h: Work on loading the Unitsync library started and some new graphics on the left menu. git-svn-id: http://svn.springlobby.info/trunk@165 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-21 Tommy Carlsson * src/battlelistctrl.cpp, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/chatpanel.cpp, src/connectwindow.cpp, src/serverevents.cpp: Bug fixed when joining battle and also some beautifying for the windows build. git-svn-id: http://svn.springlobby.info/trunk@164 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-21 Tommy Carlsson * src/battlelistctrl.cpp, src/mainwindow.h, src/serverevents.cpp, src/tasserver.cpp: Login should now work in both linux and windows. git-svn-id: http://svn.springlobby.info/trunk@163 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-21 Tommy Carlsson * src/tasserver.cpp, src/utils.h: Now compiles git-svn-id: http://svn.springlobby.info/trunk@162 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-21 Tommy Carlsson * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/channel.cpp, src/chatpanel.cpp, src/flagimages.cpp, src/mainchattab.cpp, src/nicklistctrl.cpp, src/serverevents.cpp, src/socket.cpp, src/springlobbyapp.cpp, src/tasserver.cpp, src/ui.cpp, src/utils.cpp, src/utils.h: Added some debug macros to simplify output of debug messages on various platforms. git-svn-id: http://svn.springlobby.info/trunk@161 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-21 Tommy Carlsson * src/Makefile.am, src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/chatpanel.cpp, src/mainjoinbattletab.cpp, src/server.h, src/socket.cpp, src/tasserver.cpp, src/tasserver.h, src/user.h, src/utils.cpp: semi added -Wall and removed some warnings. Also some changes for vc++. git-svn-id: http://svn.springlobby.info/trunk@160 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-20 Tommy Carlsson * SpringLobby.vcproj, springlobby.dev, src/battlelistctrl.cpp, src/boost/md5.hpp, src/chatpanel.cpp, src/mainchattab.cpp, src/mainwindow.cpp: Added svn:eol-style native to all files git-svn-id: http://svn.springlobby.info/trunk@159 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-20 Tommy Carlsson * SpringLobby.vcproj, src/flagimages.cpp, src/flagimages.h, src/iconimagelist.cpp: Fixed linux build, thanks semi :) git-svn-id: http://svn.springlobby.info/trunk@158 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-20 Tommy Carlsson * SpringLobby.vcproj, springlobby.cbp, springlobby.dev, src/battle.cpp, src/battlelist.h, src/battlelistctrl.cpp, src/channellist.h, src/chatpanel.cpp, src/flagimages.cpp, src/flagimages.h, src/iconimagelist.cpp, src/iconimagelist.h, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainwindow.cpp, src/server.cpp, src/serverevents.cpp, src/settings.cpp, src/socket.cpp, src/tasserver.cpp, src/tasserver.h, src/userlist.h: Lots of changes for cv++ compability, might break linux build... git-svn-id: http://svn.springlobby.info/trunk@157 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-06 Tommy Carlsson * src/battleroomtab.cpp, src/battleroomtab.h: Added team and allies to the comboboxes in Battleroom tab git-svn-id: http://svn.springlobby.info/trunk@156 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-06 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battleroomtab.h, src/chatpanel.cpp, src/mainjoinbattletab.cpp, src/server.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: Chat in battleroom implemented git-svn-id: http://svn.springlobby.info/trunk@155 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-06 Tommy Carlsson * src/battleroomlistctrl.cpp, src/mainjoinbattletab.h: Added some missing includes in mainbatleroomtab git-svn-id: http://svn.springlobby.info/trunk@154 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-05 Tommy Carlsson * src/battle.cpp, src/battle.h, src/battleroomlistctrl.cpp, src/server.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: Pics appropriate team when joining battle git-svn-id: http://svn.springlobby.info/trunk@153 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-05 Tommy Carlsson * src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/battleroomtab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/serverevents.cpp, src/ui.cpp: Fixed so that players are added/removed players when they join/leave in Battle room git-svn-id: http://svn.springlobby.info/trunk@152 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-05 Tommy Carlsson * src/battlelistctrl.cpp, src/battleroomlistctrl.cpp, src/battleroomtab.cpp, src/nicklistctrl.cpp: Fixed a few bugs git-svn-id: http://svn.springlobby.info/trunk@151 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-05 Tommy Carlsson * Doxyfile, doc/mainpage.dox: Changes in documentation mainpage git-svn-id: http://svn.springlobby.info/trunk@150 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-04 Tommy Carlsson * src/server.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h: CHANNELS command implemented git-svn-id: http://svn.springlobby.info/trunk@149 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-04 Tommy Carlsson * src/battleroomtab.h, src/images/nready_q.xpm, src/images/nready_unsync.xpm, src/images/ready_q.xpm, src/images/ready_unsync.xpm, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/server.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h, src/user.h: BattleroomTab user updates git-svn-id: http://svn.springlobby.info/trunk@148 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-04 Tommy Carlsson * configure.in, src/battlelistctrl.cpp, src/battlelisttab.cpp, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp, src/iconimagelist.cpp, src/iconimagelist.h, src/images/Makefile.am, src/images/flags/Makefile.am, src/serverevents.cpp, src/tasserver.cpp, src/ui.cpp, src/ui.h, src/user.cpp, src/user.h: BattleroomTab player list enniced git-svn-id: http://svn.springlobby.info/trunk@147 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * src/images/Makefile.am, src/images/flags/Makefile.am: automake changes git-svn-id: http://svn.springlobby.info/trunk@146 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * src/Makefile.am, src/images/Makefile.am, src/images/flags/Makefile.am: Still trying git-svn-id: http://svn.springlobby.info/trunk@145 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * configure.in, src/Makefile.am, src/images/Makefile.am, src/images/flags/Makefile.am, src/images/flags/mkflagmakefileam.sh: Trying to add the images and flags directories to dist git-svn-id: http://svn.springlobby.info/trunk@144 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * po/POTFILES, po/springlobby.pot: git-svn-id: http://svn.springlobby.info/trunk@143 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * doc/mainpage.dox, po/POTFILES.in: Removed src/main.c from pofiles git-svn-id: http://svn.springlobby.info/trunk@142 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * : Some Ignore on autogenerated files git-svn-id: http://svn.springlobby.info/trunk@141 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * aclocal.m4, config.guess, config.sub, configure, libtool, ltmain.sh, po/Makefile.in, po/Makefile.in.in, src/serverevents.cpp: Removed autogenerated files git-svn-id: http://svn.springlobby.info/trunk@139 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * src/Makefile.am, src/battle.cpp, src/battle.h, src/battlelisttab.cpp, src/battleroomtab.cpp, src/battleroomtab.h, src/server.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/tasserver.h, src/user.cpp, src/utils.cpp, src/utils.h: Started with joining battle git-svn-id: http://svn.springlobby.info/trunk@138 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * src/battleroomlistctrl.cpp, src/battleroomtab.cpp: Battleroom layout refined. git-svn-id: http://svn.springlobby.info/trunk@137 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * src/Makefile.am, src/battlelistctrl.cpp, src/battlelistctrl.h, src/battleroomlistctrl.cpp, src/battleroomlistctrl.h, src/battleroomtab.cpp: git-svn-id: http://svn.springlobby.info/trunk@136 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@135 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Lasse Karkkainen * src/Makefile.am, src/boost/README.txt, src/boost/md5.cpp, src/boost/md5.hpp, src/md5.c, src/md5.h, src/tasserver.cpp: New MD5 implementation git-svn-id: http://svn.springlobby.info/trunk@133 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * src/battleroomtab.cpp, src/battleroomtab.h, src/chatpanel.cpp: Created the layout for the battleroomtab. git-svn-id: http://svn.springlobby.info/trunk@132 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Lasse Karkkainen * src/tasserver.cpp: Cleaned up GetPasswordHash git-svn-id: http://svn.springlobby.info/trunk@131 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Lasse Karkkainen * src/ui.cpp: Fixed a typo, and then removed the dialog in which it was :) git-svn-id: http://svn.springlobby.info/trunk@130 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * src/mainwindow.cpp, src/ui.h: git-svn-id: http://svn.springlobby.info/trunk@129 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@128 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Tommy Carlsson * src/battlelisttab.cpp, src/battlelisttab.h: git-svn-id: http://svn.springlobby.info/trunk@126 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-03 Lasse Karkkainen * src/Makefile.in, src/test.cpp: Removed test.cpp git-svn-id: http://svn.springlobby.info/trunk@125 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-02 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@124 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-02 Tommy Carlsson * src/iconimagelist.h, src/images/battle.xpm, src/images/battle_list.xpm, src/images/battle_map.xpm, src/images/battle_settings.xpm, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h: git-svn-id: http://svn.springlobby.info/trunk@122 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-02 Tommy Carlsson * src/battlelisttab.cpp, src/chatpanel.cpp: git-svn-id: http://svn.springlobby.info/trunk@121 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-02 Tommy Carlsson * src/batlelisttab.cpp, src/batlelisttab.h: git-svn-id: http://svn.springlobby.info/trunk@120 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-02 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@119 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-02 Tommy Carlsson * src/Makefile.am, src/Makefile.in, src/batlelisttab.cpp, src/battlelisttab.cpp, src/battlelisttab.h, src/chatpanel.cpp, src/mainjoinbattletab.h: git-svn-id: http://svn.springlobby.info/trunk@117 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-02 Tommy Carlsson * doc/mainpage.dox, src/batlelisttab.cpp, src/batlelisttab.h, src/channellist.h, src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mainwindow.cpp, src/nicklistctrl.cpp, src/nicklistctrl.h, src/server.cpp, src/server.h, src/ui.cpp: git-svn-id: http://svn.springlobby.info/trunk@116 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-01 Tommy Carlsson * src/mainwindow.cpp, src/mainwindow.h, src/ui.cpp: git-svn-id: http://svn.springlobby.info/trunk@115 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-01 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@114 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-01 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@112 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-01 Tommy Carlsson * src/battlelistctrl.cpp, src/battlelistctrl.h, src/serverevents.cpp, src/ui.cpp, src/ui.h: git-svn-id: http://svn.springlobby.info/trunk@110 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-01 Tommy Carlsson * src/battle.h, src/battlelistctrl.cpp, src/battlelistctrl.h, src/mainjoinbattletab.cpp, src/serverevents.cpp, src/ui.cpp, src/ui.h: git-svn-id: http://svn.springlobby.info/trunk@109 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-01 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@108 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-06-01 Tommy Carlsson * src/Makefile.am, src/Makefile.in, src/battle.cpp, src/battle.h, src/battlelist.h, src/battlelistctrl.cpp, src/battlelistctrl.h, src/chatpanel.cpp, src/images/ingame.xpm, src/images/server.xpm, src/images/user.xpm, src/images/userchat.xpm, src/mainchattab.cpp, src/mainchattab.h, src/mainjoinbattletab.cpp, src/mainjoinbattletab.h, src/mainwindow.cpp, src/mainwindow.h, src/server.cpp, src/server.h, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/ui.cpp, src/ui.h: git-svn-id: http://svn.springlobby.info/trunk@106 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-31 Tommy Carlsson * src/channel.cpp, src/chatpanel.cpp, src/connectwindow.cpp, src/mainchattab.cpp, src/mainwindow.cpp, src/serverevents.cpp, src/springlobbyapp.cpp: git-svn-id: http://svn.springlobby.info/trunk@105 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-31 Tommy Carlsson * src/Makefile.am, src/Makefile.in, src/serverevents.cpp, src/serverevents.h, src/system.cpp, src/system.h: git-svn-id: http://svn.springlobby.info/trunk@104 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-30 Tommy Carlsson * src/channel.cpp, src/images/unknown_flag.xpm, src/nicklistctrl.cpp, src/nicklistctrl.h, src/serverevents.cpp, src/ui.cpp: git-svn-id: http://svn.springlobby.info/trunk@103 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-30 Tommy Carlsson * src/flagimages.cpp, src/userlist.h: git-svn-id: http://svn.springlobby.info/trunk@102 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-29 Tommy Carlsson * src/channel.cpp, src/channel.h, src/channellist.h, src/chatpanel.cpp, src/chatpanel.h, src/connectwindow.cpp, src/connectwindow.h, src/flagimages.h, src/images/flags/AD.xpm, src/images/flags/AE.xpm, src/images/flags/AF.xpm, src/images/flags/AG.xpm, src/images/flags/AI.xpm, src/images/flags/AL.xpm, src/images/flags/AM.xpm, src/images/flags/AN.xpm, src/images/flags/AO.xpm, src/images/flags/AR.xpm, src/images/flags/AS.xpm, src/images/flags/AT.xpm, src/images/flags/AU.xpm, src/images/flags/AW.xpm, src/images/flags/AX.xpm, src/images/flags/AZ.xpm, src/images/flags/BA.xpm, src/images/flags/BB.xpm, src/images/flags/BD.xpm, src/images/flags/BE.xpm, src/images/flags/BF.xpm, src/images/flags/BG.xpm, src/images/flags/BH.xpm, src/images/flags/BI.xpm, src/images/flags/BJ.xpm, src/images/flags/BM.xpm, src/images/flags/BN.xpm, src/images/flags/BO.xpm, src/images/flags/BR.xpm, src/images/flags/BS.xpm, src/images/flags/BT.xpm, src/images/flags/BV.xpm, src/images/flags/BW.xpm, src/images/flags/BY.xpm, src/images/flags/BZ.xpm, src/images/flags/CA.xpm, src/images/flags/CC.xpm, src/images/flags/CD.xpm, src/images/flags/CF.xpm, src/images/flags/CG.xpm, src/images/flags/CH.xpm, src/images/flags/CI.xpm, src/images/flags/CK.xpm, src/images/flags/CL.xpm, src/images/flags/CM.xpm, src/images/flags/CN.xpm, src/images/flags/CO.xpm, src/images/flags/CR.xpm, src/images/flags/CS.xpm, src/images/flags/CU.xpm, src/images/flags/CV.xpm, src/images/flags/CX.xpm, src/images/flags/CY.xpm, src/images/flags/CZ.xpm, src/images/flags/DE.xpm, src/images/flags/DJ.xpm, src/images/flags/DK.xpm, src/images/flags/DM.xpm, src/images/flags/DO.xpm, src/images/flags/DZ.xpm, src/images/flags/EC.xpm, src/images/flags/EE.xpm, src/images/flags/EG.xpm, src/images/flags/EH.xpm, src/images/flags/ER.xpm, src/images/flags/ES.xpm, src/images/flags/ET.xpm, src/images/flags/FAM.xpm, src/images/flags/FI.xpm, src/images/flags/FJ.xpm, src/images/flags/FK.xpm, src/images/flags/FM.xpm, src/images/flags/FO.xpm, src/images/flags/FR.xpm, src/images/flags/GA.xpm, src/images/flags/GB.xpm, src/images/flags/GD.xpm, src/images/flags/GE.xpm, src/images/flags/GF.xpm, src/images/flags/GH.xpm, src/images/flags/GI.xpm, src/images/flags/GL.xpm, src/images/flags/GM.xpm, src/images/flags/GN.xpm, src/images/flags/GP.xpm, src/images/flags/GQ.xpm, src/images/flags/GR.xpm, src/images/flags/GS.xpm, src/images/flags/GT.xpm, src/images/flags/GU.xpm, src/images/flags/GW.xpm, src/images/flags/GY.xpm, src/images/flags/HK.xpm, src/images/flags/HM.xpm, src/images/flags/HN.xpm, src/images/flags/HR.xpm, src/images/flags/HT.xpm, src/images/flags/HU.xpm, src/images/flags/ID.xpm, src/images/flags/IE.xpm, src/images/flags/IL.xpm, src/images/flags/IN.xpm, src/images/flags/IO.xpm, src/images/flags/IQ.xpm, src/images/flags/IR.xpm, src/images/flags/IS.xpm, src/images/flags/IT.xpm, src/images/flags/JM.xpm, src/images/flags/JO.xpm, src/images/flags/JP.xpm, src/images/flags/KE.xpm, src/images/flags/KG.xpm, src/images/flags/KH.xpm, src/images/flags/KI.xpm, src/images/flags/KM.xpm, src/images/flags/KN.xpm, src/images/flags/KP.xpm, src/images/flags/KR.xpm, src/images/flags/KW.xpm, src/images/flags/KY.xpm, src/images/flags/KZ.xpm, src/images/flags/LA.xpm, src/images/flags/LB.xpm, src/images/flags/LC.xpm, src/images/flags/LI.xpm, src/images/flags/LK.xpm, src/images/flags/LR.xpm, src/images/flags/LS.xpm, src/images/flags/LT.xpm, src/images/flags/LU.xpm, src/images/flags/LV.xpm, src/images/flags/LY.xpm, src/images/flags/MA.xpm, src/images/flags/MC.xpm, src/images/flags/MD.xpm, src/images/flags/ME.xpm, src/images/flags/MG.xpm, src/images/flags/MH.xpm, src/images/flags/MK.xpm, src/images/flags/ML.xpm, src/images/flags/MM.xpm, src/images/flags/MN.xpm, src/images/flags/MO.xpm, src/images/flags/MP.xpm, src/images/flags/MQ.xpm, src/images/flags/MR.xpm, src/images/flags/MS.xpm, src/images/flags/MT.xpm, src/images/flags/MU.xpm, src/images/flags/MV.xpm, src/images/flags/MW.xpm, src/images/flags/MX.xpm, src/images/flags/MY.xpm, src/images/flags/MZ.xpm, src/images/flags/NA.xpm, src/images/flags/NC.xpm, src/images/flags/NE.xpm, src/images/flags/NF.xpm, src/images/flags/NG.xpm, src/images/flags/NI.xpm, src/images/flags/NL.xpm, src/images/flags/NO.xpm, src/images/flags/NP.xpm, src/images/flags/NR.xpm, src/images/flags/NU.xpm, src/images/flags/NZ.xpm, src/images/flags/OM.xpm, src/images/flags/PA.xpm, src/images/flags/PE.xpm, src/images/flags/PF.xpm, src/images/flags/PG.xpm, src/images/flags/PH.xpm, src/images/flags/PK.xpm, src/images/flags/PL.xpm, src/images/flags/PM.xpm, src/images/flags/PN.xpm, src/images/flags/PR.xpm, src/images/flags/PS.xpm, src/images/flags/PT.xpm, src/images/flags/PW.xpm, src/images/flags/PY.xpm, src/images/flags/QA.xpm, src/images/flags/RE.xpm, src/images/flags/RO.xpm, src/images/flags/RS.xpm, src/images/flags/RU.xpm, src/images/flags/RW.xpm, src/images/flags/SA.xpm, src/images/flags/SB.xpm, src/images/flags/SC.xpm, src/images/flags/SD.xpm, src/images/flags/SE.xpm, src/images/flags/SG.xpm, src/images/flags/SH.xpm, src/images/flags/SI.xpm, src/images/flags/SJ.xpm, src/images/flags/SK.xpm, src/images/flags/SL.xpm, src/images/flags/SM.xpm, src/images/flags/SN.xpm, src/images/flags/SO.xpm, src/images/flags/SR.xpm, src/images/flags/ST.xpm, src/images/flags/SV.xpm, src/images/flags/SY.xpm, src/images/flags/SZ.xpm, src/images/flags/TC.xpm, src/images/flags/TD.xpm, src/images/flags/TF.xpm, src/images/flags/TG.xpm, src/images/flags/TH.xpm, src/images/flags/TJ.xpm, src/images/flags/TK.xpm, src/images/flags/TL.xpm, src/images/flags/TM.xpm, src/images/flags/TN.xpm, src/images/flags/TO.xpm, src/images/flags/TR.xpm, src/images/flags/TT.xpm, src/images/flags/TV.xpm, src/images/flags/TW.xpm, src/images/flags/TZ.xpm, src/images/flags/UA.xpm, src/images/flags/UG.xpm, src/images/flags/UM.xpm, src/images/flags/US.xpm, src/images/flags/UY.xpm, src/images/flags/UZ.xpm, src/images/flags/VA.xpm, src/images/flags/VC.xpm, src/images/flags/VE.xpm, src/images/flags/VG.xpm, src/images/flags/VI.xpm, src/images/flags/VN.xpm, src/images/flags/VU.xpm, src/images/flags/WF.xpm, src/images/flags/WS.xpm, src/images/flags/YE.xpm, src/images/flags/YT.xpm, src/images/flags/ZA.xpm, src/images/flags/ZM.xpm, src/images/flags/ZW.xpm, src/images/flags/mkflaghead.sh, src/mainchattab.cpp, src/mainchattab.h, src/mainwindow.cpp, src/mainwindow.h, src/nicklistctrl.h, src/server.cpp, src/server.h, src/serverevents.cpp, src/serverevents.h, src/socket.cpp, src/socket.h, src/springlobbyapp.cpp, src/springlobbyapp.h, src/system.cpp, src/system.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h, src/user.h, src/utils.h: git-svn-id: http://svn.springlobby.info/trunk@101 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-28 Tommy Carlsson * src/images/flags/back.xpm: git-svn-id: http://svn.springlobby.info/trunk@100 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-28 Tommy Carlsson * src/images/flags/CATALONIA.xpm, src/images/flags/ENGLAND.xpm, src/images/flags/EUROPEANUNION.xpm, src/images/flags/SCOTLAND.xpm, src/images/flags/TEST.xpm, src/images/flags/WALES.xpm: git-svn-id: http://svn.springlobby.info/trunk@99 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-28 Tommy Carlsson * src/images/flags/AD.xpm, src/images/flags/AE.xpm, src/images/flags/AF.xpm, src/images/flags/AG.xpm, src/images/flags/AI.xpm, src/images/flags/AL.xpm, src/images/flags/AM.xpm, src/images/flags/AN.xpm, src/images/flags/AO.xpm, src/images/flags/AR.xpm, src/images/flags/AS.xpm, src/images/flags/AT.xpm, src/images/flags/AU.xpm, src/images/flags/AW.xpm, src/images/flags/AX.xpm, src/images/flags/AZ.xpm, src/images/flags/BA.xpm, src/images/flags/BB.xpm, src/images/flags/BD.xpm, src/images/flags/BE.xpm, src/images/flags/BF.xpm, src/images/flags/BG.xpm, src/images/flags/BH.xpm, src/images/flags/BI.xpm, src/images/flags/BJ.xpm, src/images/flags/BM.xpm, src/images/flags/BN.xpm, src/images/flags/BO.xpm, src/images/flags/BR.xpm, src/images/flags/BS.xpm, src/images/flags/BT.xpm, src/images/flags/BV.xpm, src/images/flags/BW.xpm, src/images/flags/BY.xpm, src/images/flags/BZ.xpm, src/images/flags/CA.xpm, src/images/flags/CATALONIA.xpm, src/images/flags/CC.xpm, src/images/flags/CD.xpm, src/images/flags/CF.xpm, src/images/flags/CG.xpm, src/images/flags/CH.xpm, src/images/flags/CI.xpm, src/images/flags/CK.xpm, src/images/flags/CL.xpm, src/images/flags/CM.xpm, src/images/flags/CN.xpm, src/images/flags/CO.xpm, src/images/flags/CR.xpm, src/images/flags/CS.xpm, src/images/flags/CU.xpm, src/images/flags/CV.xpm, src/images/flags/CX.xpm, src/images/flags/CY.xpm, src/images/flags/CZ.xpm, src/images/flags/DE.xpm, src/images/flags/DJ.xpm, src/images/flags/DK.xpm, src/images/flags/DM.xpm, src/images/flags/DO.xpm, src/images/flags/DZ.xpm, src/images/flags/EC.xpm, src/images/flags/EE.xpm, src/images/flags/EG.xpm, src/images/flags/EH.xpm, src/images/flags/ENGLAND.xpm, src/images/flags/ER.xpm, src/images/flags/ES.xpm, src/images/flags/ET.xpm, src/images/flags/EUROPEANUNION.xpm, src/images/flags/FAM.xpm, src/images/flags/FI.xpm, src/images/flags/FJ.xpm, src/images/flags/FK.xpm, src/images/flags/FM.xpm, src/images/flags/FO.xpm, src/images/flags/FR.xpm, src/images/flags/GA.xpm, src/images/flags/GB.xpm, src/images/flags/GD.xpm, src/images/flags/GE.xpm, src/images/flags/GF.xpm, src/images/flags/GH.xpm, src/images/flags/GI.xpm, src/images/flags/GL.xpm, src/images/flags/GM.xpm, src/images/flags/GN.xpm, src/images/flags/GP.xpm, src/images/flags/GQ.xpm, src/images/flags/GR.xpm, src/images/flags/GS.xpm, src/images/flags/GT.xpm, src/images/flags/GU.xpm, src/images/flags/GW.xpm, src/images/flags/GY.xpm, src/images/flags/HK.xpm, src/images/flags/HM.xpm, src/images/flags/HN.xpm, src/images/flags/HR.xpm, src/images/flags/HT.xpm, src/images/flags/HU.xpm, src/images/flags/ID.xpm, src/images/flags/IE.xpm, src/images/flags/IL.xpm, src/images/flags/IN.xpm, src/images/flags/IO.xpm, src/images/flags/IQ.xpm, src/images/flags/IR.xpm, src/images/flags/IS.xpm, src/images/flags/IT.xpm, src/images/flags/JM.xpm, src/images/flags/JO.xpm, src/images/flags/JP.xpm, src/images/flags/KE.xpm, src/images/flags/KG.xpm, src/images/flags/KH.xpm, src/images/flags/KI.xpm, src/images/flags/KM.xpm, src/images/flags/KN.xpm, src/images/flags/KP.xpm, src/images/flags/KR.xpm, src/images/flags/KW.xpm, src/images/flags/KY.xpm, src/images/flags/KZ.xpm, src/images/flags/LA.xpm, src/images/flags/LB.xpm, src/images/flags/LC.xpm, src/images/flags/LI.xpm, src/images/flags/LK.xpm, src/images/flags/LR.xpm, src/images/flags/LS.xpm, src/images/flags/LT.xpm, src/images/flags/LU.xpm, src/images/flags/LV.xpm, src/images/flags/LY.xpm, src/images/flags/MA.xpm, src/images/flags/MC.xpm, src/images/flags/MD.xpm, src/images/flags/ME.xpm, src/images/flags/MG.xpm, src/images/flags/MH.xpm, src/images/flags/MK.xpm, src/images/flags/ML.xpm, src/images/flags/MM.xpm, src/images/flags/MN.xpm, src/images/flags/MO.xpm, src/images/flags/MP.xpm, src/images/flags/MQ.xpm, src/images/flags/MR.xpm, src/images/flags/MS.xpm, src/images/flags/MT.xpm, src/images/flags/MU.xpm, src/images/flags/MV.xpm, src/images/flags/MW.xpm, src/images/flags/MX.xpm, src/images/flags/MY.xpm, src/images/flags/MZ.xpm, src/images/flags/NA.xpm, src/images/flags/NC.xpm, src/images/flags/NE.xpm, src/images/flags/NF.xpm, src/images/flags/NG.xpm, src/images/flags/NI.xpm, src/images/flags/NL.xpm, src/images/flags/NO.xpm, src/images/flags/NP.xpm, src/images/flags/NR.xpm, src/images/flags/NU.xpm, src/images/flags/NZ.xpm, src/images/flags/OM.xpm, src/images/flags/PA.xpm, src/images/flags/PE.xpm, src/images/flags/PF.xpm, src/images/flags/PG.xpm, src/images/flags/PH.xpm, src/images/flags/PK.xpm, src/images/flags/PL.xpm, src/images/flags/PM.xpm, src/images/flags/PN.xpm, src/images/flags/PR.xpm, src/images/flags/PS.xpm, src/images/flags/PT.xpm, src/images/flags/PW.xpm, src/images/flags/PY.xpm, src/images/flags/QA.xpm, src/images/flags/RE.xpm, src/images/flags/RO.xpm, src/images/flags/RS.xpm, src/images/flags/RU.xpm, src/images/flags/RW.xpm, src/images/flags/SA.xpm, src/images/flags/SB.xpm, src/images/flags/SC.xpm, src/images/flags/SCOTLAND.xpm, src/images/flags/SD.xpm, src/images/flags/SE.xpm, src/images/flags/SG.xpm, src/images/flags/SH.xpm, src/images/flags/SI.xpm, src/images/flags/SJ.xpm, src/images/flags/SK.xpm, src/images/flags/SL.xpm, src/images/flags/SM.xpm, src/images/flags/SN.xpm, src/images/flags/SO.xpm, src/images/flags/SR.xpm, src/images/flags/ST.xpm, src/images/flags/SV.xpm, src/images/flags/SY.xpm, src/images/flags/SZ.xpm, src/images/flags/TC.xpm, src/images/flags/TD.xpm, src/images/flags/TEST.xpm, src/images/flags/TF.xpm, src/images/flags/TG.xpm, src/images/flags/TH.xpm, src/images/flags/TJ.xpm, src/images/flags/TK.xpm, src/images/flags/TL.xpm, src/images/flags/TM.xpm, src/images/flags/TN.xpm, src/images/flags/TO.xpm, src/images/flags/TR.xpm, src/images/flags/TT.xpm, src/images/flags/TV.xpm, src/images/flags/TW.xpm, src/images/flags/TZ.xpm, src/images/flags/UA.xpm, src/images/flags/UG.xpm, src/images/flags/UM.xpm, src/images/flags/US.xpm, src/images/flags/UY.xpm, src/images/flags/UZ.xpm, src/images/flags/VA.xpm, src/images/flags/VC.xpm, src/images/flags/VE.xpm, src/images/flags/VG.xpm, src/images/flags/VI.xpm, src/images/flags/VN.xpm, src/images/flags/VU.xpm, src/images/flags/WALES.xpm, src/images/flags/WF.xpm, src/images/flags/WS.xpm, src/images/flags/YE.xpm, src/images/flags/YT.xpm, src/images/flags/ZA.xpm, src/images/flags/ZM.xpm, src/images/flags/ZW.xpm, src/images/flags/back.xpm: git-svn-id: http://svn.springlobby.info/trunk@98 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-28 Tommy Carlsson * src/chatpanel.cpp, src/chatpanel.h, src/images/flags/AD.xpm, src/images/flags/AE.xpm, src/images/flags/AF.xpm, src/images/flags/AG.xpm, src/images/flags/AI.xpm, src/images/flags/AL.xpm, src/images/flags/AM.xpm, src/images/flags/AN.xpm, src/images/flags/AO.xpm, src/images/flags/AP.xpm, src/images/flags/AQ.xpm, src/images/flags/AR.xpm, src/images/flags/AS.xpm, src/images/flags/AT.xpm, src/images/flags/AU.xpm, src/images/flags/AW.xpm, src/images/flags/AZ.xpm, src/images/flags/BA.xpm, src/images/flags/BB.xpm, src/images/flags/BD.xpm, src/images/flags/BE.xpm, src/images/flags/BF.xpm, src/images/flags/BG.xpm, src/images/flags/BH.xpm, src/images/flags/BI.xpm, src/images/flags/BJ.xpm, src/images/flags/BM.xpm, src/images/flags/BN.xpm, src/images/flags/BO.xpm, src/images/flags/BR.xpm, src/images/flags/BS.xpm, src/images/flags/BT.xpm, src/images/flags/BV.xpm, src/images/flags/BW.xpm, src/images/flags/BY.xpm, src/images/flags/BZ.xpm, src/images/flags/CA.xpm, src/images/flags/CC.xpm, src/images/flags/CD.xpm, src/images/flags/CF.xpm, src/images/flags/CG.xpm, src/images/flags/CH.xpm, src/images/flags/CI.xpm, src/images/flags/CK.xpm, src/images/flags/CL.xpm, src/images/flags/CM.xpm, src/images/flags/CN.xpm, src/images/flags/CO.xpm, src/images/flags/CR.xpm, src/images/flags/CS.xpm, src/images/flags/CU.xpm, src/images/flags/CV.xpm, src/images/flags/CX.xpm, src/images/flags/CY.xpm, src/images/flags/CZ.xpm, src/images/flags/DE.xpm, src/images/flags/DJ.xpm, src/images/flags/DK.xpm, src/images/flags/DM.xpm, src/images/flags/DO.xpm, src/images/flags/DZ.xpm, src/images/flags/EC.xpm, src/images/flags/EE.xpm, src/images/flags/EG.xpm, src/images/flags/EH.xpm, src/images/flags/ER.xpm, src/images/flags/ES.xpm, src/images/flags/ET.xpm, src/images/flags/FI.xpm, src/images/flags/FJ.xpm, src/images/flags/FK.xpm, src/images/flags/FM.xpm, src/images/flags/FO.xpm, src/images/flags/FR.xpm, src/images/flags/GA.xpm, src/images/flags/GB.xpm, src/images/flags/GD.xpm, src/images/flags/GE.xpm, src/images/flags/GF.xpm, src/images/flags/GH.xpm, src/images/flags/GI.xpm, src/images/flags/GL.xpm, src/images/flags/GM.xpm, src/images/flags/GN.xpm, src/images/flags/GP.xpm, src/images/flags/GQ.xpm, src/images/flags/GR.xpm, src/images/flags/GS.xpm, src/images/flags/GT.xpm, src/images/flags/GU.xpm, src/images/flags/GW.xpm, src/images/flags/GY.xpm, src/images/flags/HK.xpm, src/images/flags/HM.xpm, src/images/flags/HN.xpm, src/images/flags/HR.xpm, src/images/flags/HT.xpm, src/images/flags/HU.xpm, src/images/flags/ID.xpm, src/images/flags/IE.xpm, src/images/flags/IL.xpm, src/images/flags/IN.xpm, src/images/flags/IO.xpm, src/images/flags/IQ.xpm, src/images/flags/IR.xpm, src/images/flags/IS.xpm, src/images/flags/IT.xpm, src/images/flags/JM.xpm, src/images/flags/JO.xpm, src/images/flags/JP.xpm, src/images/flags/KE.xpm, src/images/flags/KG.xpm, src/images/flags/KH.xpm, src/images/flags/KI.xpm, src/images/flags/KM.xpm, src/images/flags/KN.xpm, src/images/flags/KP.xpm, src/images/flags/KR.xpm, src/images/flags/KW.xpm, src/images/flags/KY.xpm, src/images/flags/KZ.xpm, src/images/flags/LA.xpm, src/images/flags/LB.xpm, src/images/flags/LC.xpm, src/images/flags/LI.xpm, src/images/flags/LK.xpm, src/images/flags/LR.xpm, src/images/flags/LS.xpm, src/images/flags/LT.xpm, src/images/flags/LU.xpm, src/images/flags/LV.xpm, src/images/flags/LY.xpm, src/images/flags/MA.xpm, src/images/flags/MC.xpm, src/images/flags/MD.xpm, src/images/flags/MG.xpm, src/images/flags/MH.xpm, src/images/flags/MK.xpm, src/images/flags/ML.xpm, src/images/flags/MM.xpm, src/images/flags/MN.xpm, src/images/flags/MO.xpm, src/images/flags/MP.xpm, src/images/flags/MQ.xpm, src/images/flags/MR.xpm, src/images/flags/MS.xpm, src/images/flags/MT.xpm, src/images/flags/MU.xpm, src/images/flags/MV.xpm, src/images/flags/MW.xpm, src/images/flags/MX.xpm, src/images/flags/MY.xpm, src/images/flags/MZ.xpm, src/images/flags/NA.xpm, src/images/flags/NC.xpm, src/images/flags/NE.xpm, src/images/flags/NF.xpm, src/images/flags/NG.xpm, src/images/flags/NI.xpm, src/images/flags/NL.xpm, src/images/flags/NO.xpm, src/images/flags/NP.xpm, src/images/flags/NR.xpm, src/images/flags/NU.xpm, src/images/flags/NZ.xpm, src/images/flags/OM.xpm, src/images/flags/PA.xpm, src/images/flags/PE.xpm, src/images/flags/PF.xpm, src/images/flags/PG.xpm, src/images/flags/PH.xpm, src/images/flags/PK.xpm, src/images/flags/PL.xpm, src/images/flags/PM.xpm, src/images/flags/PN.xpm, src/images/flags/PR.xpm, src/images/flags/PS.xpm, src/images/flags/PT.xpm, src/images/flags/PW.xpm, src/images/flags/PY.xpm, src/images/flags/QA.xpm, src/images/flags/RE.xpm, src/images/flags/RO.xpm, src/images/flags/RU.xpm, src/images/flags/RW.xpm, src/images/flags/SA.xpm, src/images/flags/SB.xpm, src/images/flags/SC.xpm, src/images/flags/SD.xpm, src/images/flags/SE.xpm, src/images/flags/SG.xpm, src/images/flags/SH.xpm, src/images/flags/SI.xpm, src/images/flags/SJ.xpm, src/images/flags/SK.xpm, src/images/flags/SL.xpm, src/images/flags/SM.xpm, src/images/flags/SN.xpm, src/images/flags/SO.xpm, src/images/flags/SR.xpm, src/images/flags/ST.xpm, src/images/flags/SV.xpm, src/images/flags/SY.xpm, src/images/flags/SZ.xpm, src/images/flags/TC.xpm, src/images/flags/TD.xpm, src/images/flags/TF.xpm, src/images/flags/TG.xpm, src/images/flags/TH.xpm, src/images/flags/TJ.xpm, src/images/flags/TK.xpm, src/images/flags/TL.xpm, src/images/flags/TM.xpm, src/images/flags/TN.xpm, src/images/flags/TO.xpm, src/images/flags/TR.xpm, src/images/flags/TT.xpm, src/images/flags/TV.xpm, src/images/flags/TW.xpm, src/images/flags/TZ.xpm, src/images/flags/UA.xpm, src/images/flags/UG.xpm, src/images/flags/UM.xpm, src/images/flags/US.xpm, src/images/flags/UY.xpm, src/images/flags/UZ.xpm, src/images/flags/VA.xpm, src/images/flags/VC.xpm, src/images/flags/VE.xpm, src/images/flags/VG.xpm, src/images/flags/VI.xpm, src/images/flags/VN.xpm, src/images/flags/VU.xpm, src/images/flags/WF.xpm, src/images/flags/WS.xpm, src/images/flags/YE.xpm, src/images/flags/YT.xpm, src/images/flags/YU.xpm, src/images/flags/ZA.xpm, src/images/flags/ZM.xpm, src/images/flags/ZW.xpm: git-svn-id: http://svn.springlobby.info/trunk@97 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-28 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@96 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-25 Tommy Carlsson * src/images/join_icon.xpm, src/mainchattab.cpp, src/mainwindow.cpp, src/mainwindow.h: git-svn-id: http://svn.springlobby.info/trunk@94 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-24 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@93 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-23 Tommy Carlsson * src/images/channel.xpm, src/images/close.xpm, src/images/server.xpm, src/mainwindow.cpp: git-svn-id: http://svn.springlobby.info/trunk@91 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-23 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@90 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-23 Tommy Carlsson * src/images/flags/AD.xpm, src/images/flags/AE.xpm, src/images/flags/AF.xpm, src/images/flags/AG.xpm, src/images/flags/AI.xpm, src/images/flags/AL.xpm, src/images/flags/AM.xpm, src/images/flags/AN.xpm, src/images/flags/AO.xpm, src/images/flags/AP.xpm, src/images/flags/AQ.xpm, src/images/flags/AR.xpm, src/images/flags/AS.xpm, src/images/flags/AT.xpm, src/images/flags/AU.xpm, src/images/flags/AW.xpm, src/images/flags/AZ.xpm, src/images/flags/BA.xpm, src/images/flags/BB.xpm, src/images/flags/BD.xpm, src/images/flags/BE.xpm, src/images/flags/BF.xpm, src/images/flags/BG.xpm, src/images/flags/BH.xpm, src/images/flags/BI.xpm, src/images/flags/BJ.xpm, src/images/flags/BM.xpm, src/images/flags/BN.xpm, src/images/flags/BO.xpm, src/images/flags/BR.xpm, src/images/flags/BS.xpm, src/images/flags/BT.xpm, src/images/flags/BV.xpm, src/images/flags/BW.xpm, src/images/flags/BY.xpm, src/images/flags/BZ.xpm, src/images/flags/CA.xpm, src/images/flags/CC.xpm, src/images/flags/CD.xpm, src/images/flags/CF.xpm, src/images/flags/CG.xpm, src/images/flags/CH.xpm, src/images/flags/CI.xpm, src/images/flags/CK.xpm, src/images/flags/CL.xpm, src/images/flags/CM.xpm, src/images/flags/CN.xpm, src/images/flags/CO.xpm, src/images/flags/CR.xpm, src/images/flags/CS.xpm, src/images/flags/CU.xpm, src/images/flags/CV.xpm, src/images/flags/CX.xpm, src/images/flags/CY.xpm, src/images/flags/CZ.xpm, src/images/flags/DE.xpm, src/images/flags/DJ.xpm, src/images/flags/DK.xpm, src/images/flags/DM.xpm, src/images/flags/DO.xpm, src/images/flags/DZ.xpm, src/images/flags/EC.xpm, src/images/flags/EE.xpm, src/images/flags/EG.xpm, src/images/flags/EH.xpm, src/images/flags/ER.xpm, src/images/flags/ES.xpm, src/images/flags/ET.xpm, src/images/flags/FI.xpm, src/images/flags/FJ.xpm, src/images/flags/FK.xpm, src/images/flags/FM.xpm, src/images/flags/FO.xpm, src/images/flags/FR.xpm, src/images/flags/GA.xpm, src/images/flags/GB.xpm, src/images/flags/GD.xpm, src/images/flags/GE.xpm, src/images/flags/GF.xpm, src/images/flags/GH.xpm, src/images/flags/GI.xpm, src/images/flags/GL.xpm, src/images/flags/GM.xpm, src/images/flags/GN.xpm, src/images/flags/GP.xpm, src/images/flags/GQ.xpm, src/images/flags/GR.xpm, src/images/flags/GS.xpm, src/images/flags/GT.xpm, src/images/flags/GU.xpm, src/images/flags/GW.xpm, src/images/flags/GY.xpm, src/images/flags/HK.xpm, src/images/flags/HM.xpm, src/images/flags/HN.xpm, src/images/flags/HR.xpm, src/images/flags/HT.xpm, src/images/flags/HU.xpm, src/images/flags/ID.xpm, src/images/flags/IE.xpm, src/images/flags/IL.xpm, src/images/flags/IN.xpm, src/images/flags/IO.xpm, src/images/flags/IQ.xpm, src/images/flags/IR.xpm, src/images/flags/IS.xpm, src/images/flags/IT.xpm, src/images/flags/JM.xpm, src/images/flags/JO.xpm, src/images/flags/JP.xpm, src/images/flags/KE.xpm, src/images/flags/KG.xpm, src/images/flags/KH.xpm, src/images/flags/KI.xpm, src/images/flags/KM.xpm, src/images/flags/KN.xpm, src/images/flags/KP.xpm, src/images/flags/KR.xpm, src/images/flags/KW.xpm, src/images/flags/KY.xpm, src/images/flags/KZ.xpm, src/images/flags/LA.xpm, src/images/flags/LB.xpm, src/images/flags/LC.xpm, src/images/flags/LI.xpm, src/images/flags/LK.xpm, src/images/flags/LR.xpm, src/images/flags/LS.xpm, src/images/flags/LT.xpm, src/images/flags/LU.xpm, src/images/flags/LV.xpm, src/images/flags/LY.xpm, src/images/flags/MA.xpm, src/images/flags/MC.xpm, src/images/flags/MD.xpm, src/images/flags/MG.xpm, src/images/flags/MH.xpm, src/images/flags/MK.xpm, src/images/flags/ML.xpm, src/images/flags/MM.xpm, src/images/flags/MN.xpm, src/images/flags/MO.xpm, src/images/flags/MP.xpm, src/images/flags/MQ.xpm, src/images/flags/MR.xpm, src/images/flags/MS.xpm, src/images/flags/MT.xpm, src/images/flags/MU.xpm, src/images/flags/MV.xpm, src/images/flags/MW.xpm, src/images/flags/MX.xpm, src/images/flags/MY.xpm, src/images/flags/MZ.xpm, src/images/flags/NA.xpm, src/images/flags/NC.xpm, src/images/flags/NE.xpm, src/images/flags/NF.xpm, src/images/flags/NG.xpm, src/images/flags/NI.xpm, src/images/flags/NL.xpm, src/images/flags/NO.xpm, src/images/flags/NP.xpm, src/images/flags/NR.xpm, src/images/flags/NU.xpm, src/images/flags/NZ.xpm, src/images/flags/OM.xpm, src/images/flags/PA.xpm, src/images/flags/PE.xpm, src/images/flags/PF.xpm, src/images/flags/PG.xpm, src/images/flags/PH.xpm, src/images/flags/PK.xpm, src/images/flags/PL.xpm, src/images/flags/PM.xpm, src/images/flags/PN.xpm, src/images/flags/PR.xpm, src/images/flags/PS.xpm, src/images/flags/PT.xpm, src/images/flags/PW.xpm, src/images/flags/PY.xpm, src/images/flags/QA.xpm, src/images/flags/RE.xpm, src/images/flags/RO.xpm, src/images/flags/RU.xpm, src/images/flags/RW.xpm, src/images/flags/SA.xpm, src/images/flags/SB.xpm, src/images/flags/SC.xpm, src/images/flags/SD.xpm, src/images/flags/SE.xpm, src/images/flags/SG.xpm, src/images/flags/SH.xpm, src/images/flags/SI.xpm, src/images/flags/SJ.xpm, src/images/flags/SK.xpm, src/images/flags/SL.xpm, src/images/flags/SM.xpm, src/images/flags/SN.xpm, src/images/flags/SO.xpm, src/images/flags/SR.xpm, src/images/flags/ST.xpm, src/images/flags/SV.xpm, src/images/flags/SY.xpm, src/images/flags/SZ.xpm, src/images/flags/TC.xpm, src/images/flags/TD.xpm, src/images/flags/TF.xpm, src/images/flags/TG.xpm, src/images/flags/TH.xpm, src/images/flags/TJ.xpm, src/images/flags/TK.xpm, src/images/flags/TL.xpm, src/images/flags/TM.xpm, src/images/flags/TN.xpm, src/images/flags/TO.xpm, src/images/flags/TR.xpm, src/images/flags/TT.xpm, src/images/flags/TV.xpm, src/images/flags/TW.xpm, src/images/flags/TZ.xpm, src/images/flags/UA.xpm, src/images/flags/UG.xpm, src/images/flags/UM.xpm, src/images/flags/US.xpm, src/images/flags/UY.xpm, src/images/flags/UZ.xpm, src/images/flags/VA.xpm, src/images/flags/VC.xpm, src/images/flags/VE.xpm, src/images/flags/VG.xpm, src/images/flags/VI.xpm, src/images/flags/VN.xpm, src/images/flags/VU.xpm, src/images/flags/WF.xpm, src/images/flags/WS.xpm, src/images/flags/YE.xpm, src/images/flags/YT.xpm, src/images/flags/YU.xpm, src/images/flags/ZA.xpm, src/images/flags/ZM.xpm, src/images/flags/ZW.xpm, src/images/flags/mkflaghead.sh: git-svn-id: http://svn.springlobby.info/trunk@88 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-23 Tommy Carlsson * src/chatpanel.h, src/flagimages.h, src/images/down.xpm, src/images/up.xpm, src/nicklistctrl.cpp, src/nicklistctrl.h: git-svn-id: http://svn.springlobby.info/trunk@87 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-22 Lasse Karkkainen * src/connectwindow.cpp: Typo fix git-svn-id: http://svn.springlobby.info/trunk@86 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-22 Tommy Carlsson * src/images/admin.xpm, src/images/admin_away.xpm, src/images/admin_ingame.xpm, src/images/away.xpm, src/images/ingame.xpm, src/nicklistctrl.cpp, src/nicklistctrl.h: git-svn-id: http://svn.springlobby.info/trunk@85 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-22 Tommy Carlsson * src/socket.cpp, src/socket.h, src/tasserver.cpp, src/tasserver.h, src/user.cpp, src/user.h: git-svn-id: http://svn.springlobby.info/trunk@84 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-22 Lasse Karkkainen * src/Makefile.am, src/Makefile.in, src/channellist.h, src/userlist.cpp, src/userlist.h: userlist.cpp removed git-svn-id: http://svn.springlobby.info/trunk@83 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-22 Lasse Karkkainen * src/chatpanel.cpp: Adjust colors for readability git-svn-id: http://svn.springlobby.info/trunk@82 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-22 Lasse Karkkainen * src/user.h: UserStatus was used uninitialized git-svn-id: http://svn.springlobby.info/trunk@81 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-22 Lasse Karkkainen * src/userlist.h: Fixed UserList::GetUser - now optimized, nicklists should work again git-svn-id: http://svn.springlobby.info/trunk@80 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-21 Tommy Carlsson * springlobby.cbp: git-svn-id: http://svn.springlobby.info/trunk@79 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-21 Tommy Carlsson * src/mainchattab.cpp, src/mainchattab.h, src/mainwindow.cpp, src/mainwindow.h, src/nicklistctrl.cpp: git-svn-id: http://svn.springlobby.info/trunk@78 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-21 Lasse Karkkainen * src/serverevents.cpp: Kludge to fix assert bug git-svn-id: http://svn.springlobby.info/trunk@77 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-21 Tommy Carlsson * src/nicklistctrl.cpp: git-svn-id: http://svn.springlobby.info/trunk@76 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-21 Lasse Karkkainen * src/tasserver.cpp: Memory handling bug fixed: TASServer::IsConnected used new[] to allocate, didn't use delete[] for deleting git-svn-id: http://svn.springlobby.info/trunk@75 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-21 Tommy Carlsson * src/images/admin.xpm, src/images/bot.xpm, src/mainwindow.cpp, src/nicklistctrl.cpp, src/nicklistctrl.h, src/userlist.h: git-svn-id: http://svn.springlobby.info/trunk@74 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-21 Lasse Karkkainen * src/channel.cpp, src/channel.h, src/channellist.h, src/nicklistctrl.cpp, src/serverevents.cpp, src/user.cpp, src/user.h, src/userlist.cpp, src/userlist.h: It still compiles after all these changes git-svn-id: http://svn.springlobby.info/trunk@73 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-21 Tommy Carlsson * src/chatpanel.cpp, src/nicklistctrl.cpp: git-svn-id: http://svn.springlobby.info/trunk@72 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-21 Tommy Carlsson * src/chatpanel.cpp: git-svn-id: http://svn.springlobby.info/trunk@71 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-20 Tommy Carlsson * src/channel.cpp, src/chatpanel.cpp, src/images/channel.xpm, src/images/server.xpm, src/images/user.xpm, src/mainchattab.cpp, src/serverevents.cpp, src/serverevents.h, src/tasserver.cpp, src/user.cpp, src/user.h: git-svn-id: http://svn.springlobby.info/trunk@70 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-20 Tommy Carlsson * src/chatpanel.cpp, src/chatpanel.h, src/nicklistctrl.cpp, src/nicklistctrl.h: git-svn-id: http://svn.springlobby.info/trunk@69 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-20 Tommy Carlsson * src/channel.cpp, src/channel.h, src/chatpanel.cpp, src/nicklistctrl.cpp, src/serverevents.cpp, src/ui.cpp, src/ui.h, src/userlist.h: git-svn-id: http://svn.springlobby.info/trunk@68 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-20 Tommy Carlsson * src/Makefile.am, src/Makefile.in, src/userlist.cpp, src/userlist.h: git-svn-id: http://svn.springlobby.info/trunk@67 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-20 Tommy Carlsson * src/serverevents.cpp: git-svn-id: http://svn.springlobby.info/trunk@66 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-19 Tommy Carlsson * src/chatpanel.cpp, src/mainchattab.cpp, src/serverevents.cpp, src/serverevents.h, src/socket.cpp, src/socket.h, src/springlobbyapp.cpp, src/system.cpp, src/system.h, src/tasserver.cpp: git-svn-id: http://svn.springlobby.info/trunk@65 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-19 Tommy Carlsson * src/serverevents.h, src/system.h: git-svn-id: http://svn.springlobby.info/trunk@64 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-19 Tommy Carlsson * src/chatlist.cpp, src/chatlist.h: git-svn-id: http://svn.springlobby.info/trunk@63 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-19 Tommy Carlsson * src/Makefile.am, src/Makefile.in, src/chatlist.h, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/springlobbyapp.h, src/system.cpp, src/system.h, src/tasserver.cpp, src/tasserver.h: git-svn-id: http://svn.springlobby.info/trunk@62 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-19 Tommy Carlsson * src/channellist.cpp, src/userlist.cpp: git-svn-id: http://svn.springlobby.info/trunk@61 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-19 Tommy Carlsson * src/Makefile.am, src/channellist.cpp, src/channellist.h: git-svn-id: http://svn.springlobby.info/trunk@60 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-19 Tommy Carlsson * src/channellist.cpp, src/channellist.h, src/ui.cpp: git-svn-id: http://svn.springlobby.info/trunk@59 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-19 Tommy Carlsson * src/channellist.cpp, src/channellist.h: git-svn-id: http://svn.springlobby.info/trunk@58 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-19 Tommy Carlsson * src/Makefile.am, src/Makefile.in, src/channel.cpp, src/channel.h, src/chatpanel.cpp, src/chatpanel.h, src/connectwindow.cpp, src/connectwindow.h, src/mainchattab.h, src/mainwindow.cpp, src/mainwindow.h, src/nicklistctrl.cpp, src/nicklistctrl.h, src/server.cpp, src/server.h, src/serverevents.cpp, src/serverevents.h, src/system.cpp, src/system.h, src/tasserver.cpp, src/tasserver.h, src/ui.cpp, src/ui.h, src/user.cpp, src/user.h, src/userlist.cpp, src/userlist.h, src/utils.h: git-svn-id: http://svn.springlobby.info/trunk@57 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-19 Lasse Karkkainen * src/channellist.cpp, src/channellist.h: Little cleanup in channellist.c and fixed #include path git-svn-id: http://svn.springlobby.info/trunk@56 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-19 Tommy Carlsson * src/Makefile.am, src/Makefile.in, src/channel.cpp, src/chatpanel.cpp, src/chatpanel.h, src/nicklistctrl.cpp, src/nicklistctrl.h, src/ui.cpp, src/userlist.cpp: git-svn-id: http://svn.springlobby.info/trunk@55 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-18 Tommy Carlsson * src/Makefile.am, src/channel.cpp, src/tasserver.cpp, src/test.cpp, src/userlist.cpp: git-svn-id: http://svn.springlobby.info/trunk@54 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-18 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@53 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-18 Tommy Carlsson * src/serverevents.cpp: git-svn-id: http://svn.springlobby.info/trunk@51 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-18 Tommy Carlsson * src/.deps/base64.Po, src/.deps/channel.Po, src/.deps/channellist.Po, src/.deps/chatlist.Po, src/.deps/chatpanel.Po, src/.deps/connectframe.Po, src/.deps/connectwindow.Po, src/.deps/main.Po, src/.deps/mainchattab.Po, src/.deps/mainwindow.Po, src/.deps/md5.Po, src/.deps/server.Po, src/.deps/serverevents.Po, src/.deps/settings.Po, src/.deps/socket.Po, src/.deps/springlobbyapp.Po, src/.deps/system.Po, src/.deps/tasserver.Po, src/.deps/test.Po, src/.deps/ui.Po, src/.deps/user.Po, src/.deps/userlist.Po: git-svn-id: http://svn.springlobby.info/trunk@50 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-18 Tommy Carlsson * src/.deps/channel.Po, src/.deps/chatlist.Po, src/.deps/chatpanel.Po, src/.deps/connectwindow.Po, src/.deps/mainchattab.Po, src/.deps/mainwindow.Po, src/.deps/serverevents.Po, src/.deps/springlobbyapp.Po, src/.deps/system.Po, src/.deps/tasserver.Po, src/.deps/test.Po, src/.deps/ui.Po, src/channel.cpp, src/channel.h, src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainchattab.h, src/mainwindow.cpp, src/mainwindow.h, src/serverevents.cpp, src/serverevents.h, src/springlobbyapp.cpp, src/system.h, src/tasserver.cpp, src/ui.cpp, src/ui.h: git-svn-id: http://svn.springlobby.info/trunk@49 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-18 Tommy Carlsson * src/.deps/channel.Po, src/.deps/channellist.Po, src/.deps/chatpanel.Po, src/.deps/connectwindow.Po, src/.deps/mainchattab.Po, src/.deps/mainwindow.Po, src/.deps/serverevents.Po, src/.deps/settings.Po, src/.deps/springlobbyapp.Po, src/.deps/system.Po, src/.deps/tasserver.Po, src/.deps/test.Po, src/.deps/ui.Po, src/.deps/userlist.Po, src/Makefile.am, src/Makefile.in, src/channel.cpp, src/channel.h, src/channellist.cpp, src/channellist.h, src/chatpanel.cpp, src/chatpanel.h, src/connectwindow.cpp, src/mainchattab.cpp, src/mainchattab.h, src/mainwindow.cpp, src/mainwindow.h, src/server.cpp, src/serverevents.cpp, src/serverevents.h, src/settings.cpp, src/settings.h, src/socket.cpp, src/springlobbyapp.cpp, src/springlobbyapp.h, src/system.cpp, src/system.h, src/tasserver.cpp, src/ui.cpp, src/ui.h, src/user.h, src/userlist.cpp, src/userlist.h, src/utils.h: git-svn-id: http://svn.springlobby.info/trunk@48 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-16 Tommy Carlsson * src/.deps/mainchattab.Po, src/chatpanel.cpp, src/chatpanel.h, src/connectwindow.cpp, src/images/close.xpm, src/mainchattab.cpp, src/mainchattab.h, src/mainwindow.cpp, src/springlobbyapp.cpp: git-svn-id: http://svn.springlobby.info/trunk@47 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-16 Tommy Carlsson * src/.deps/mainwindow.Po, src/chatpanel.cpp, src/mainwindow.cpp, src/mainwindow.h: git-svn-id: http://svn.springlobby.info/trunk@46 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-15 Tommy Carlsson * src/.deps/chatlist.Po, src/.deps/chatpanel.Po, src/.deps/connectwindow.Po, src/.deps/mainchattab.Po, src/.deps/mainwindow.Po, src/.deps/server.Po, src/.deps/serverevents.Po, src/.deps/settings.Po, src/.deps/socket.Po, src/.deps/springlobbyapp.Po, src/.deps/tasserver.Po, src/.deps/test.Po, src/.deps/user.Po, src/.deps/userlist.Po, src/Makefile.am, src/Makefile.in, src/chatpanel.cpp, src/chatpanel.h, src/connectwindow.h, src/mainchattab.h, src/mainwindow.cpp, src/mainwindow.h, src/server.h, src/serverevents.h, src/settings.cpp, src/settings.h, src/socket.h, src/springlobbyapp.cpp, src/springlobbyapp.h, src/tasserver.cpp, src/tasserver.h, src/test.cpp, src/user.cpp, src/user.h, src/userlist.cpp, src/userlist.h: git-svn-id: http://svn.springlobby.info/trunk@45 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-15 Tommy Carlsson * src/chatpanel.cpp, src/chatpanel.h: git-svn-id: http://svn.springlobby.info/trunk@44 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-15 Tommy Carlsson * src/chatpanel.cpp, src/chatpanel.h, src/serverevents.h, src/springlobbyapp.cpp, src/springlobbyapp.h, src/tasserver.cpp: git-svn-id: http://svn.springlobby.info/trunk@43 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-15 Tommy Carlsson * config.status: git-svn-id: http://svn.springlobby.info/trunk@42 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-15 Tommy Carlsson * config.status: git-svn-id: http://svn.springlobby.info/trunk@41 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-15 Tommy Carlsson * src/.deps/chatpanel.Po, src/chatpanel.cpp, src/chatpanel.h, src/mainchattab.cpp, src/mainwindow.cpp, src/mainwindow.h, src/serverevents.h, src/springlobbyapp.cpp, src/springlobbyapp.h, src/tasserver.cpp: git-svn-id: http://svn.springlobby.info/trunk@40 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-14 Tommy Carlsson * src/chatpanel.cpp, src/chatpanel.h, src/connectwindow.cpp, src/mainchattab.cpp, src/mainchattab.h, src/mainwindow.cpp, src/mainwindow.h, src/serverevents.h, src/springlobbyapp.cpp, src/springlobbyapp.h, src/tasserver.cpp: git-svn-id: http://svn.springlobby.info/trunk@39 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-14 Tommy Carlsson * src/chatpanel.cpp, src/mainwindow.cpp, src/mainwindow.h, src/server.cpp, src/server.h, src/socket.cpp, src/socket.h, src/springlobbyapp.cpp, src/springlobbyapp.h, src/tasserver.cpp, src/tasserver.h: git-svn-id: http://svn.springlobby.info/trunk@38 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-14 Tommy Carlsson * Doxyfile, src/.deps/connectwindow.Po, src/.deps/mainchattab.Po, src/.deps/mainwindow.Po, src/.deps/serverevents.Po, src/.deps/springlobbyapp.Po, src/chatpanel.cpp, src/connectwindow.cpp, src/mainwindow.cpp, src/serverevents.cpp, src/serverevents.h, src/settings.cpp, src/settings.h, src/socket.cpp, src/springlobbyapp.cpp, src/springlobbyapp.h, src/tasserver.cpp: git-svn-id: http://svn.springlobby.info/trunk@37 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-13 Tommy Carlsson * src/socket.cpp, src/tasserver.cpp: git-svn-id: http://svn.springlobby.info/trunk@36 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-13 Tommy Carlsson * src/.deps/connectwindow.Po, src/.deps/mainchattab.Po, src/.deps/server.Po, src/.deps/serverevents.Po, src/.deps/socket.Po, src/.deps/springlobbyapp.Po, src/.deps/tasserver.Po, src/chatpanel.cpp, src/connectwindow.cpp, src/server.h, src/serverevents.cpp, src/socket.cpp, src/socket.h, src/tasserver.cpp, src/tasserver.h: git-svn-id: http://svn.springlobby.info/trunk@35 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-13 Tommy Carlsson * src/settings.cpp, src/settings.h, src/socket.cpp, src/test.cpp: git-svn-id: http://svn.springlobby.info/trunk@34 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-12 Tommy Carlsson * src/.deps/connectwindow.Po, src/.deps/mainchattab.Po, src/.deps/serverevents.Po, src/.deps/springlobbyapp.Po, src/chatpanel.cpp, src/chatpanel.h, src/connectwindow.cpp, src/mainchattab.cpp, src/server.cpp, src/server.h, src/serverevents.cpp, src/settings.cpp, src/settings.h, src/socket.cpp, src/socket.h, src/springlobbyapp.cpp, src/springlobbyapp.h, src/tasserver.cpp, src/tasserver.h: git-svn-id: http://svn.springlobby.info/trunk@33 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-12 Tommy Carlsson * config.status, src/.deps/springlobbyapp.Po, src/settings.cpp, src/settings.h, src/springlobbyapp.cpp, src/springlobbyapp.h: git-svn-id: http://svn.springlobby.info/trunk@32 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-11 Tommy Carlsson * src/main.cpp: git-svn-id: http://svn.springlobby.info/trunk@31 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-11 Tommy Carlsson * src/.deps/connectwindow.Po, src/.deps/main.Po, src/.deps/springlobbyapp.Po, src/Makefile.am, src/Makefile.in, src/chatpanel.cpp, src/connectwindow.cpp, src/connectwindow.h, src/main.cpp, src/springlobbyapp.cpp, src/springlobbyapp.h: git-svn-id: http://svn.springlobby.info/trunk@30 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-10 Tommy Carlsson * Doxyfile, doc/mainpage.dox, doc/modules.dox, src/.deps/settings.Po, src/.deps/test.Po, src/Makefile.am, src/Makefile.in, src/chatlist.h, src/chatpanel.cpp, src/chatpanel.h, src/settings.cpp, src/settings.h, src/test.cpp: git-svn-id: http://svn.springlobby.info/trunk@29 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * src/chatlist.cpp: Fixed build error in ChatList git-svn-id: http://svn.springlobby.info/trunk@28 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * doc/mainpage.dox, src/chatlist.h, src/connectwindow.h, src/mainchattab.h, src/mainwindow.h, src/server.h, src/serverevents.h, src/socket.h, src/tasserver.h: Documentation updated git-svn-id: http://svn.springlobby.info/trunk@27 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * src/.deps/mainchatpanel.Po: git-svn-id: http://svn.springlobby.info/trunk@26 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * doc/mainpage.dox, src/.deps/mainchattab.Po: git-svn-id: http://svn.springlobby.info/trunk@25 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * src/.deps/main.Po, src/.deps/mainwindow.Po, src/Makefile.in, src/mainwindow.cpp, src/mainwindow.h: git-svn-id: http://svn.springlobby.info/trunk@24 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * src/Makefile.am, src/mainchattab.cpp, src/mainchattab.h: git-svn-id: http://svn.springlobby.info/trunk@23 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * src/mainchatpanel.h, src/mainchattab.cpp, src/mainchattab.h: git-svn-id: http://svn.springlobby.info/trunk@22 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * src/mainchatpanel.cpp: git-svn-id: http://svn.springlobby.info/trunk@21 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@20 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * Makefile.in: git-svn-id: http://svn.springlobby.info/trunk@18 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * doc/mainpage.dox, src/.deps/connectwindow.Po: git-svn-id: http://svn.springlobby.info/trunk@17 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * doc/mainpage.dox, doc/modules.dox: git-svn-id: http://svn.springlobby.info/trunk@16 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * doc/documentation.dox, doc/mainpage.dox: git-svn-id: http://svn.springlobby.info/trunk@15 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * doc/documentation.dox, doc/modules.dox: git-svn-id: http://svn.springlobby.info/trunk@14 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-09 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@13 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-08 Tommy Carlsson * src/.deps/chatlist.Po, src/.deps/chatpanel.Po, src/.deps/chatwindow.Po, src/.deps/connectframe.Po, src/.deps/consolecontrol.Po, src/.deps/mainchatpanel.Po, src/.deps/mainchatwindow.Po, src/.deps/protocol.Po, src/.deps/sdlsocket.Po, src/.deps/server.Po, src/.deps/serverevents.Po, src/.deps/tasprotocol.Po, src/.deps/tasserver.Po, src/.deps/test.Po, src/.deps/uicontrol.Po: git-svn-id: http://svn.springlobby.info/trunk@11 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-08 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@10 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-08 Tommy Carlsson * src/.deps/main.Po, src/.deps/mainwindow.Po, src/.deps/tasprotocol.Po, src/Makefile.am, src/chatlist.cpp, src/chatlist.h, src/chatpanel.cpp, src/chatpanel.h, src/chatwindow.cpp, src/chatwindow.h, src/connectwindow.cpp, src/connectwindow.h, src/consolecontrol.cpp, src/consolecontrol.h, src/main.cpp, src/mainchatpanel.cpp, src/mainchatpanel.h, src/mainchatwindow.cpp, src/mainchatwindow.h, src/mainwindow.cpp, src/mainwindow.h, src/protocol.cpp, src/protocol.h, src/sdlsocket.cpp, src/sdlsocket.h, src/server.cpp, src/server.h, src/serverevents.cpp, src/serverevents.h, src/tasprotocol.cpp, src/tasprotocol.h, src/tasserver.cpp, src/tasserver.h, src/test.cpp, src/uicontrol.cpp, src/uicontrol.h: git-svn-id: http://svn.springlobby.info/trunk@8 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-08 Tommy Carlsson * doc/documentation.dox: git-svn-id: http://svn.springlobby.info/trunk@7 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-03 Tommy Carlsson * : git-svn-id: http://svn.springlobby.info/trunk@6 1d9fd447-6eb1-4854-8194-394dbce8a230 2007-05-03 Tommy Carlsson * Added Trunk git-svn-id: http://svn.springlobby.info/trunk@4 1d9fd447-6eb1-4854-8194-394dbce8a230 springlobby-0.169/GroupOptions.fbp0000600000176000000410000035332212105760277020605 0ustar buildbotwww-data00000000000000 C++ 1 UTF-8 table groupoption_frames 1000 none 1 GroupOptions . 1 1 0 1 0 wxID_ANY GroupOptionsPanel 656,537 wxTAB_TRAVERSAL mainSizer wxHORIZONTAL none 5 wxEXPAND 2 groupListSizer wxVERTICAL none 5 wxEXPAND|wxTOP|wxRIGHT|wxLEFT 1 1 0 GROUPS_LIST m_group_list protected wxLB_ALWAYS_SB|wxLB_SINGLE|wxLB_SORT OnGroupListSelectionChange 5 wxEXPAND|wxBOTTOM 0 groupListButtonsSizer wxHORIZONTAL none 5 wxTOP|wxRIGHT|wxLEFT 0 0 0 0 REMOVE_GROUP Remove m_remove_group_button protected -1,-1 wxBU_EXACTFIT Remove an existing group OnRemoveGroup 5 wxTOP|wxRIGHT|wxLEFT 0 0 0 0 RENAME_GROUP Rename.. m_rename_group_button protected -1,-1 wxBU_EXACTFIT Rename an existing group OnRenameGroup 5 wxEXPAND 1 0 protected 0 5 wxTOP|wxRIGHT|wxLEFT 0 0 1 0 ADD_GROUP Add New.. m_add_group_button protected -1,-1 wxBU_EXACTFIT Add new group OnAddNewGroup 5 wxEXPAND|wxALL 3 1 0 wxID_ANY m_group_panel protected wxSUNKEN_BORDER|wxTAB_TRAVERSAL mainGroupPanelSizer wxVERTICAL none 5 wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT 0 wxID_ANY Group Actions actionsSizer wxVERTICAL none 5 wxEXPAND 1 2 0 actionCheckSizer none 2 0 5 wxTOP|wxRIGHT|wxLEFT 0 0 1 0 NOTIFY_LOGIN Notify login/logout m_login_notify_check protected Notify when users of this group go online or offline OnGroupActionsChange 5 wxTOP|wxRIGHT|wxLEFT 0 0 1 0 IGNORE_CHAT Ignore Chat m_ignore_chat_check protected Ignore anything said in channel by any of the users in this group OnGroupActionsChange 5 wxTOP|wxRIGHT|wxLEFT 0 0 1 0 NOTIFY_HOST Notify Hosted Battles m_notify_host_check protected Notify when users of this group hosts a battle OnGroupActionsChange 5 wxTOP|wxRIGHT|wxLEFT 0 0 1 0 IGNORE_PM Ignore PM m_ignore_pm_check protected Ignore anything said in private chat by any of the users in this group OnGroupActionsChange 5 wxTOP|wxRIGHT|wxLEFT 0 0 1 0 NOTIFY_STATUS Notify Status Change m_notify_status_check protected Notify when the status of a users in this group changes OnGroupActionsChange 5 wxALL 0 0 1 0 AUTOCKICK Autokick m_autokick_check protected Auto kick any of the users in this group from battles hosted OnGroupActionsChange 5 wxTOP|wxRIGHT|wxLEFT 0 0 1 0 NOTIFY_HIGHLIGHT Highlight m_highlight_check protected Highlight battles and the names of users in this group OnGroupActionsChange 5 wxEXPAND 1 colorSizer wxHORIZONTAL none 5 wxALL 0 1 0 wxID_ANY Highlight Color m_highlight_colorstaticText protected -1 5 wxALL 0 0 1 0 HIGHLIGHT_COLOR MyButton m_highlight_color_button protected 20,20 wxBU_AUTODRAW Select highlight color OnHighlightColorClick 5 wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT 1 wxID_ANY Users in group usersSizer wxVERTICAL none 5 wxEXPAND 1 userListSizer wxHORIZONTAL none 5 wxALL|wxEXPAND 1 1 0 USERS_LIST m_user_list protected wxLB_MULTIPLE OnUsersListSelectionChange 5 wxEXPAND 0 userButtonSizer wxVERTICAL none 5 wxEXPAND|wxTOP|wxRIGHT 0 0 1 0 ADD_USER Add.. m_add_user_button protected wxBU_EXACTFIT Add users to group OnAddUsers 5 wxEXPAND|wxTOP|wxRIGHT 0 0 0 0 REMOVE_USER Remove m_remove_user_button protected wxBU_EXACTFIT Remove users from group OnRemoveUser 1 0 wxID_ANY SelectUsersDialog 358,518 wxDEFAULT_DIALOG_STYLE Select Users mainSizer wxVERTICAL none 5 wxEXPAND 1 1 0 wxID_ANY m_users_panel protected -1,-1 wxTAB_TRAVERSAL bUsersListSizer wxVERTICAL none 5 wxEXPAND 0 filterSizer wxHORIZONTAL none 5 wxALL|wxALIGN_BOTTOM 0 1 0 wxID_ANY Filter names m_filter_names_staticText protected -1 5 wxLEFT|wxRIGHT|wxTOP 1 1 0 FILTER_TEXT 0 m_name_filter_text protected Enter text filter to filter the online users list OnNameFilterChange 5 wxALL|wxEXPAND 1 1 0 NICK_LIST m_user_list protected wxLC_REPORT wxSUNKEN_BORDER OnNameActivated OnNameDeselected OnNameSelected 5 wxEXPAND 0 bNameSizer wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT 0 1 0 wxID_ANY Name m_name_staticText protected -1 5 wxBOTTOM|wxRIGHT|wxLEFT 1 1 0 NAME_TEXT 0 m_selection_text protected 5 wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT 0 1 0 wxID_ANY m_buttons_hr protected wxLI_HORIZONTAL 5 wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT 0 0 1 0 0 0 1 0 0 m_dialog_buttons protected OnCancel OnOk springlobby-0.169/INSTALL0000600000176000000410000000020612105760277016463 0ustar buildbotwww-data00000000000000- Installation Instructions cmake . make make install You can change build settings like install prefix using 'ccmake .' springlobby-0.169/NEWS0000600000176000000410000000045312105760277016135 0ustar buildbotwww-data00000000000000we provide two mailinglists: http://springlobby.info/cgi-bin/mailman/listinfo/devel for general discussion http://springlobby.info/cgi-bin/mailman/listinfo/releases for release notifications and such you may also want to visit our wiki, especially the roadmap: http://trac.springlobby.info/roadmapspringlobby-0.169/README0000600000176000000410000000016312105760277016314 0ustar buildbotwww-data00000000000000all installation information can be found here: http://projects.springlobby.info/projects/springlobby/wiki/Install springlobby-0.169/README-Settings++0000600000176000000410000000204012105760277020234 0ustar buildbotwww-data00000000000000/** This is Settings++, Copyright (C) 2007 Original work by Kloot cross-plattform/UI adaptation and currently maintained by koshi (Ren Milk) visit http://springrts.com/phpbb/viewtopic.php?t=12104 for more info/help All files in src/spring are taken from the spring engine source (https://github.com/spring/spring) and slightly modified (unnecessary includes removed and such) Settings++ 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. Settings++ 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 Settings++. If not, see . **/ springlobby-0.169/THANKS0000600000176000000410000000166112105760277016353 0ustar buildbotwww-data00000000000000accAgon for suse open build service maintenance for several rpm-based distros MelTrax for windows installer, news reporter, in-battle table sorting and fixed various windows-only bugs dizekat for help on wxwidgets logging functions and unicode tombom for adding channel automatic joining, option to disable join/part messages and rank selection for hosting heze for apache and zonefile consultation AF for consultation on generating TASClient compatible scripts www.famfamfam.com for the flag icons tango.freedesktop.org for sidebar icons kNeu and Nuovo projects for some icons curved for current rank icons everybody who has put in an effort translating danuker for the sword icon morphriz for his patch to allow to play sounds using SDL_sound all the translators for their hard work Lamego (from wxForum) for the textcontrol with built-in history MidKnight for the popup notification background daftalx for getting SpringLobby working on macs springlobby-0.169/branches.txt0000600000176000000410000000055412105760277017766 0ustar buildbotwww-data00000000000000 TODO: exceptions: expand caught exceptions with mor debug info paint-locker: actually useful?? stacktrace: realtion to dbg-report? variable_saytext: status? webconncet-win, webconncet-win2: ?? Notes: gl-test: renderer in channelchooser menu item in mainwindow html-test: html-conatiner in mainwindow/torrent springlobby-0.169/build/springsettings.vcproj0000600000176000000410000011010012105760277023034 0ustar buildbotwww-data00000000000000 springlobby-0.169/buildbot/Makefile0000600000176000000410000000066212105760277020704 0ustar buildbotwww-data00000000000000# -*- makefile -*- # This is a simple makefile which lives in a buildmaster/buildslave # directory (next to the buildbot.tac file). It allows you to start/stop the # master or slave by doing 'make start' or 'make stop'. # The 'reconfig' target will tell a buildmaster to reload its config file. start: twistd --no_save -y buildbot.tac stop: kill `cat twistd.pid` reconfig: kill -HUP `cat twistd.pid` log: tail -f twistd.log springlobby-0.169/buildbot/buildbot.tac0000600000176000000410000000042112105760277021532 0ustar buildbotwww-data00000000000000 from twisted.application import service from buildbot.master import BuildMaster basedir = r'/var/lib/buildbot/master/springlobby' configfile = r'master.cfg' application = service.Application('buildmaster') BuildMaster(basedir, configfile).setServiceParent(application) springlobby-0.169/buildbot/create-build-dirs.sh0000600000176000000410000000053212105760277023073 0ustar buildbotwww-data00000000000000#!/usr/bin/env bash set -e cd $(dirname ${0})/.. git submodule update --init DIR=build-${1} shift REV=${1} shift echo -n creating ${DIR} ... if [ ! -d ${DIR} ] ; then mkdir ${DIR} echo done else echo skipped fi PARAMS="-DSPRINGLOBBY_REV=${REV} ${@}" echo configuring ${DIR} with $PARAMS cd ${DIR} rm -fv CMakeCache.txt cmake $PARAMS .. springlobby-0.169/buildbot/master.cfg0000600000176000000410000005321312121446441021210 0ustar buildbotwww-data00000000000000#!/usr/bin/env python # -*- python -*- # vim: syntax=python import time import itertools ### basis for the revision string base_rev_major = "0." base_rev = base_rev_major master_repo = 'git://github.com/springlobby/springlobby.git' master_repo_rw = 'git@github.com:springlobby/springlobby.git' active_devs = {'koshi': 'git://github.com/renemilk/springlobby.git', 'abma': 'git://github.com/abma/springlobby.git'} WIN_STRIP="/opt/mingw32/usr/bin/i686-pc-mingw32-strip" WIN_EXE_DIR="build-msw-default/src/" c = BuildmasterConfig = {} c['slaves'] = [] c['builders'] = [] c['schedulers'] = [] c['status'] = [] ####### BUILDSLAVES from buildbot.buildslave import BuildSlave from spring import SpringNotifier #import the pw vars from another file. this way we can keep config in git import pw #c['slaves'].append(BuildSlave("testbot", pw.my_pw, max_builds=1)) c['slaves'].append(BuildSlave("release-slave", pw.release_slave_pw, max_builds=1)) c['slaves'].append(BuildSlave("koshi-springlobby-slave", pw.koshi_springlobby_slave_pw, max_builds=1)) c['slaves'].append(BuildSlave("koshi-springlobby-slave2", pw.koshi_springlobby_slave2_pw, max_builds=1)) c['slaves'].append(BuildSlave("documentation", pw.documentation_pw, max_builds=1)) #c['slaves'].append(BuildSlave("macosx1", pw.mac_pw, max_builds=1)) c['slavePortnum'] = 9989 ### CONFIGS commom_win_opts = [ '-DOPTION_SOUND=ON', '-DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw32_static.cmake', '-DCMAKE_BUILD_TYPE=RelWithDebInfo', '-DAUX_VERSION=msw', '-DENABLE_DEBUG_REPORT=ON', '-DCMAKE_EXE_LINKER_FLAGS:STRING=-L/opt/mingw32/lib', '-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM:STRING=NEVER', '-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY:STRING=ONLY', '-DCMAKE_FIND_ROOT_PATH:PATH=/opt/mingw32/usr/i686-pc-mingw32', '-DCMAKE_SYSTEM_NAME:STRING=Windows', '-DBoost_THREADAPI:STRING=win32', '-DCURL_CONFIG:PATH=/opt/mingw32/usr/i686-pc-mingw32/bin/curl-config', '-DCMAKE_RC_COMPILER:PATH=/opt/mingw32/usr/bin/i686-pc-mingw32-windres', '-DCMAKE_C_COMPILER:PATH=/opt/mingw32/usr/bin/i686-pc-mingw32-gcc', '-DCMAKE_CXX_COMPILER:PATH=/opt/mingw32/usr/bin/i686-pc-mingw32-g++', ] no_opti = ['-DCMAKE_CXX_FLAGS:STRING=-O0'] common_nix_opts = [] build_configs = dict() # name -> options_string build_configs['msw-default'] = commom_win_opts + ['-DCMAKE_CXX_FLAGS:STRING=-DNDEBUG'] build_configs['msw-debug'] = commom_win_opts + ['-DCMAKE_BUILD_TYPE=DEBUG', '-DCMAKE_CXX_FLAGS:STRING=-g3 -ggdb -O0'] build_configs['msw-no-optionals'] = commom_win_opts + no_opti build_configs['linux-default'] = no_opti + common_nix_opts build_configs['linux-no-optionals'] = ['-DCMAKE_BUILD_TYPE=PROFILE'] + no_opti + common_nix_opts common_mac_opts = "-DCMAKE_TOOLCHAIN_FILE:STRING=../cmake/Toolchain-osx.cmake" #build_configs['osx-default'] = ' ' + common_mac_opts #builds with extra env file sourced build_env_configs = dict() # name -> options_string #disabled cause compiler segfaults #build_env_configs['gcc-svn-linux-default'] = "-DCMAKE_CXX_COMPILER=/opt/gcc-svn/bin/g++ -DCMAKE_C_COMPILER=/opt/gcc-svn/bin/gcc -DCMAKE_LINKER=/opt/gcc-svn/bin/ld" + no_opti + common_nix_opts build_env_configs['wx2.9-linux-default'] = no_opti + common_nix_opts build_env_configs['clang-linux-default'] = [ '-DCMAKE_CXX_COMPILER=/opt/llvm/bin/clang++', '-DCMAKE_C_COMPILER=/opt/llvm/bin/clang', '-DCMAKE_LINKER=/opt/llvm/bin/llvm-ld' ] + no_opti + common_nix_opts env_builds = [ ] #env_builds.append( ( "/opt/gcc-svn.PATH", "gcc-svn-linux-default" ) ) env_builds.append( ( "/opt/wx2.9.PATH", "wx2.9-linux-default" ) ) env_builds.append( ( "/opt/llvm.PATH", "clang-linux-default" ) ) ####### CHANGESOURCES def changeIsImportant(change): for name in change.files: if (name.endswith('.cpp') or name.endswith('.c') or name.endswith('.hpp') or name.endswith('.h') or name.endswith('.cmake') or name.endswith('.hh') or name.endswith('.inl') or name.endswith('CMakeLists.txt')): return True return False from buildbot.changes.pb import PBChangeSource c['change_source'] = PBChangeSource() ####### SCHEDULERS from buildbot.schedulers.filter import ChangeFilter from buildbot.schedulers.basic import AnyBranchScheduler as Scheduler from buildbot.schedulers.forcesched import ForceScheduler from buildbot.schedulers import timed for name in active_devs.keys(): c['schedulers'].append(Scheduler( name="%s_Scheduler"%name, change_filter=ChangeFilter(category_re = '.*%s.*'%name), treeStableTimer=60, fileIsImportant=changeIsImportant, builderNames=[name])) #builderNames=[name,'%s-osx'%name])) #the osx build is delayed so trivial fails in the default builder may be corrected before it's started #c['schedulers'].append(Scheduler( # name="%s-osx_Scheduler"%name, # change_filter=ChangeFilter(category_re = '.*%s.*'%name), # fileIsImportant=changeIsImportant, # treeStableTimer=6*60, # builderNames=['%s-osx'%name])) #c['schedulers'].append(timed.Nightly( # name='nightly_sched', # branch='master', # fileIsImportant=changeIsImportant, # onlyIfChanged=True, # builderNames=["buildbot-osx" ], hour=5, minute=0)) c['schedulers'].append(ForceScheduler( name='force_sched', builderNames=["docs", "release" ] + ['{}{}'.format(x,f) for (x,f) in itertools.product(active_devs.keys(), ['', '-win_debug', '-win'])] )) ####### BUILDERS from buildbot.process.factory import BuildFactory from buildbot.steps.source import Git from buildbot.steps.shell import Compile, ShellCommand, WithProperties class SyncSubmodules(ShellCommand) : name = "syncsubmodules" description = 'syncing .gitmodules with .git/config' descriptionDone = 'synced submodule paths' command = ['git', 'submodule', 'sync'] class InitSubmodules(ShellCommand) : name = "submodules" description = 'updating submodules' descriptionDone = 'updated submodules' command = ['git', 'submodule', 'update', '--init'] class BuildDocs(ShellCommand) : name = "execute doxygen" description = ["generating doxygen documentation"] descriptionDone = ["docs generated"] command = ["/bin/sh","./tools/update-docs.sh"] class UploadTranslations(ShellCommand) : name = "UploadTranslations" description = ["Upload translations"] descriptionDone = ["translations uploaded"] command = ["sl-update-translations","po/springlobby.pot"] class StripWindowsInstaller(ShellCommand) : name = "stripping installer files" description = ["stripping installer files"] descriptionDone = ["installer files stripped"] command = [WIN_STRIP,WIN_EXE_DIR + "/updater/springlobby_updater.exe" , WIN_EXE_DIR + "/springsettings/springsettings.exe" ,WIN_EXE_DIR + "/springlobby.exe" ] class WindowsInstaller(ShellCommand) : name = "putting installer files" description = ["putting installer files"] descriptionDone = ["installer files copied"] command = ["install","--mode=755",WIN_EXE_DIR + "/updater/springlobby_updater.exe" ,WIN_EXE_DIR + "/springsettings/springsettings.exe" ,WIN_EXE_DIR + "/springlobby.exe", "/data/www/springlobby.info/installer/" ] class WindowsBinary(ShellCommand) : name = "windows binary" description = ["making windows binary"] descriptionDone = ["windows binary"] command = ["zip", "-jr", WithProperties("build-msw-default/springlobby-"+base_rev+"%(buildnumber)s-win32.zip"), "build-msw-default/wininst"] class WindowsLocales(ShellCommand) : name = "windows locale" description = ["adding locales to win zip"] descriptionDone = ["windows locale added"] command = ["/bin/sh", "./tools/buildbot-add-locale-win-zip.sh", WithProperties("springlobby-"+base_rev+"%(buildnumber)s-win32.zip")] class ReleaseWin(ShellCommand) : name = "release windows binary" description = ["releasing windows binary"] descriptionDone = ["windows binary release"] command = ["/usr/bin/install","-t", "/data/www/springlobby.info/windows/", WithProperties("build-msw-default/springlobby-"+base_rev+"%(buildnumber)s-win32.zip")] class ReleaseTarball(ShellCommand) : name = "release tarball" description = ["releasing tarball"] descriptionDone = ["tarball release"] command = ["/usr/bin/install", "-t", "/data/www/springlobby.info/tarballs/", WithProperties("build-linux-default/springlobby-"+base_rev+"%(buildnumber)s.tar.gz"), WithProperties("build-linux-default/springlobby-"+base_rev+"%(buildnumber)s.tar.bz2")] class RsyncStuff(ShellCommand) : name = "RSYNC stuff" description = ["rsycn tarball and windows zip"] descriptionDone = ["rsync done"] command =["rsync", "-lrvz", "/data/www/springlobby.info/", "kosh@springlobby.info:/data/www/springlobby.info/"] class GitTag(ShellCommand) : name = "git tag" description = "git tagging" descriptionDone = "git tag" command = ["git","tag", "-a", "-m", WithProperties(base_rev+"%(buildnumber)s"), WithProperties(base_rev+"%(buildnumber)s")] class ReportNews(ShellCommand) : name = "report" description = "report" descriptionDone = "reported" command = ["/usr/local/bin/sl_report.py", WithProperties(base_rev+"%(buildnumber)s")] class LatestZip(ShellCommand) : name = "latest zip" description = "latest zip" descriptionDone = "latest zip" command = ["/data/www/springlobby.info/windows/latest.sh", WithProperties(base_rev+"%(buildnumber)s")] class PublishVersion(ShellCommand) : name = "publish version number" description = "publishing version" descriptionDone = "published version" command = ["/bin/bash", "-c", WithProperties("echo "+base_rev+"%(buildnumber)s > /data/www/springlobby.info/version/current.txt")] # TODO osc needs user/pass for opensuse build service # but of course we can't set them here, so you have to do it manually the first time class UpdateRPM(ShellCommand) : name = "update rpm" description = "updating rpm" descriptionDone = "updated rpm" command = ["/bin/bash", "./tools/update-rpm.sh", WithProperties(base_rev+"%(buildnumber)s")] class UpdateEbuild(ShellCommand) : name = "update ebuild" description = "updating ebuild" descriptionDone = "updated ebuild" command = ["/bin/bash", "./tools/update-ebuilds.sh", WithProperties(base_rev+"%(buildnumber)s")] class UpdateTranslations(ShellCommand) : name = "update translations" description = "updating translations" descriptionDone = "updated translations" command = ["/bin/bash", "./tools/update-translations-buildbot.sh"] class UploadBundle(ShellCommand) : name = "upload bundle" def __init__(self, configname='osx-default',who='buildbot',**kwargs): self.configname = configname self.who = who ShellCommand.__init__(self, **kwargs) #mandatory for later (automatic) re-creation of step object self.addFactoryArguments(configname = configname) self.addFactoryArguments(who= who) self.description = "uploading bundle" self.descriptionDone = "uploaded bundle" self.command = ["/bin/bash", "./tools/upload-macosx-build.sh", "build-%s"%configname, self.who, WithProperties("%s","branch")] class UploadTempBuild(ShellCommand) : name = "upload exe" def __init__(self, configname='linux-default',who='koshi',**kwargs): self.configname = configname self.who = who ShellCommand.__init__(self, **kwargs) #mandatory for later (automatic) re-creation of step object self.addFactoryArguments(configname = configname) self.addFactoryArguments(who= who) self.description = "uploading exe" self.descriptionDone = "uploaded exe" self.command = ["/bin/bash", "./tools/upload-temp-win-build.sh", "build-%s"%configname, self.who, WithProperties("%s","branch")] class UploadTempDebugBuild(ShellCommand) : name = "upload exe" def __init__(self, configname='linux-default', who='koshi', **kwargs): self.configname = configname self.who = who ShellCommand.__init__(self, **kwargs) #mandatory for later (automatic) re-creation of step object self.addFactoryArguments(configname = configname) self.addFactoryArguments(who= who) self.description = "uploading exe" self.descriptionDone = "uploaded exe" self.command = ["/bin/bash", "./tools/upload-temp-win-build_debug.sh", "build-%s"%configname, self.who, WithProperties("%s","branch")] class AnnounceBuild(ShellCommand) : name = "announce" def __init__(self, who,**kwargs): self.who = who ShellCommand.__init__(self, **kwargs) self.addFactoryArguments(who= who) self.description = "announce build in #springlobby" self.descriptionDone = "announced" self.command = ["/usr/local/bin/sl_announce.py", who] # common build config steps ---------------------------------------------@ class buildConfig(Compile): name = 'buildConfig' def __init__(self, configname='linux-default',jobs=1,release=False,**kwargs): self.configname = configname self.release = release Compile.__init__(self, **kwargs) self.haltOnFailure = True #mandatory for later (automatic) re-creation of step object self.addFactoryArguments(configname = configname) self.addFactoryArguments(jobs = jobs) self.addFactoryArguments(release= release) #self.name = self.configname + " build" self.description = ["building " + self.configname + " config"] self.descriptionDone = ["built " + self.configname + " config"] if self.release: self.command = ['make' ,'BUILDBOT_RELEASE=1','-k', '-j%d'%jobs, '-C', 'build-%s'%(self.configname)] else: self.command = ['make' ,'-k', '-j%d'%jobs, '-C', 'build-%s'%(self.configname)] class buildEnvConfig(Compile): name = 'buildConfig' def __init__(self, env_file,configname,jobs=1,release=False,**kwargs): self.configname = configname self.release = release self.env_file = env_file Compile.__init__(self, **kwargs) self.haltOnFailure = True #mandatory for later (automatic) re-creation of step object self.addFactoryArguments(configname = configname) self.addFactoryArguments(jobs = jobs) self.addFactoryArguments(release= release) self.addFactoryArguments(env_file= env_file) if 'gcc-svn' in configname: self.addFactoryArguments(flunkOnFailure=False) self.addFactoryArguments(haltOnFailure=False) #self.name = self.configname + " build" self.description = ["building " + self.configname + " config"] self.descriptionDone = ["built " + self.configname + " config"] if self.release: self.command = ' '.join(['source', self.env_file, '&&', 'make' ,'BUILDBOT_RELEASE=1','-k', '-j%d'%jobs, '-C', 'build-%s'%(self.configname)]) else: self.command = ' '.join(['source', self.env_file, '&&', 'make' ,'-k', '-j%d'%jobs, '-C', 'build-%s'%(self.configname)]) # TODO fail and stop the build if this fails class CreateBuildDir(ShellCommand) : name = "build dir create" def __init__(self, configname='linux-default',**kwargs): self.configname = configname ShellCommand.__init__(self, **kwargs) #mandatory for later (automatic) re-creation of step object self.addFactoryArguments(configname = configname) self.haltOnFailure = True self.description = ["creating dir %s"%(self.configname)] self.descriptionDone = ["%s dir created"%(self.configname)] self.command = ["/bin/bash", "./buildbot/create-build-dirs.sh", self.configname, WithProperties(base_rev+"%(buildnumber)s") , ] + build_configs[self.configname] class CreateEnvBuildDir(ShellCommand) : name = "build dir create" def __init__(self, env_file,configname='linux-default',**kwargs): self.configname = configname self.env_file = env_file ShellCommand.__init__(self,**kwargs) #mandatory for later (automatic) re-creation of step object self.addFactoryArguments(configname = configname) self.addFactoryArguments(env_file= env_file) self.haltOnFailure = True self.description = ["creating dir %s"%(self.configname)] self.descriptionDone = ["%s dir created"%(self.configname)] self.command = ["source", self.env_file, "&&", "/bin/bash", "./buildbot/create-build-dirs.sh", self.configname, str(time.time()), build_env_configs[self.configname]] # common build config steps ---------------------------------------------@ JOBS='-j2' ft = BuildFactory() ft.addStep(Git(repourl=master_repo)) ft.addStep( SyncSubmodules() ) ft.addStep( InitSubmodules() ) for i in ['linux-default','msw-default']: ft.addStep(CreateBuildDir(i)) ft.addStep( buildConfig(configname=i,jobs=2,release=True) ) ft.addStep(Compile(command=["make", 'BUILDBOT_RELEASE=1',JOBS, "-k", "-C", "build-linux-default", "distcheck"])) ft.addStep(Compile(command=["make", 'BUILDBOT_RELEASE=1',JOBS, "-C", "build-msw-default", "pack"])) ft.addStep(ReleaseTarball()) ft.addStep(ReleaseWin()) ft.addStep(GitTag()) ft.addStep(ShellCommand(command=["git","push", "--tags", master_repo_rw])) ft.addStep(ShellCommand(command=["git","push", master_repo_rw, "master"])) ft.addStep(StripWindowsInstaller()) ft.addStep(WindowsInstaller()) ft.addStep(PublishVersion()) #ft.addStep(UpdateRPM()) #ft.addStep(UpdateEbuild()) #ft.addStep(UploadTranslations()) ft.addStep(ReportNews()) ft.addStep(LatestZip()) bt = {'name': "release", 'slavenames': ["release-slave"], 'builddir': "release", 'factory': ft, } c['builders'].append(bt) f2 = BuildFactory() f2.addStep(Git(repourl=master_repo)) f2.addStep(BuildDocs()) b2 = {'name': "docs", 'slavename': "documentation", 'builddir': "docs", 'factory': f2, } c['builders'].append(b2) class FullBuildFactory(BuildFactory): def __init__(self,dude): BuildFactory.__init__(self) self.addStep(Git(repourl=active_devs[dude])) self.addStep( SyncSubmodules() ) self.addStep( InitSubmodules() ) for name in set(build_configs.keys()) - set(['osx-default']): self.addStep( CreateBuildDir(name) ) self.addStep( buildConfig(configname=name,jobs=2) ) for env in env_builds: self.addStep( CreateEnvBuildDir(env[0],env[1]) ) self.addStep( buildEnvConfig(env[0],env[1],jobs=2) ) self.addStep(Compile(command=["make", "-j2","-C", "build-linux-default", "distcheck"])) class TestBuildFactory(BuildFactory): def __init__(self,dude): BuildFactory.__init__(self) self.addStep(Git(repourl=active_devs[dude])) self.addStep( SyncSubmodules() ) self.addStep( InitSubmodules() ) for env in env_builds: self.addStep( CreateEnvBuildDir(env[0],env[1]) ) self.addStep( buildEnvConfig(env[0],env[1],jobs=2) ) class WinTempBuildFactory(BuildFactory): def __init__(self, who): BuildFactory.__init__(self) self.addStep(Git(repourl=active_devs[who])) self.addStep( SyncSubmodules() ) self.addStep( InitSubmodules() ) self.addStep( CreateBuildDir('msw-default') ) self.addStep( buildConfig(configname='msw-default',jobs=2) ) self.addStep(UploadTempBuild(configname='msw-default',who=who )) self.addStep(AnnounceBuild( who )) class WinTempDebugBuildFactory(BuildFactory): def __init__(self, who): BuildFactory.__init__(self) self.addStep(Git(repourl=active_devs[who])) self.addStep( SyncSubmodules() ) self.addStep( InitSubmodules() ) self.addStep( CreateBuildDir('msw-debug') ) self.addStep( buildConfig(configname='msw-debug',jobs=2) ) self.addStep(UploadTempDebugBuild(configname='msw-debug',who=who )) self.addStep(AnnounceBuild( who )) class OSXBuildFactory(BuildFactory): def __init__(self, who): BuildFactory.__init__(self) self.addStep(Git(repourl=active_devs[who])) self.addStep( SyncSubmodules() ) self.addStep( InitSubmodules() ) self.addStep( CreateBuildDir('osx-default') ) self.addStep( buildConfig(configname='osx-default',jobs=1) ) self.addStep(UploadBundle(configname='osx-default',who=who )) #self.addStep(AnnounceBuild( who )) for name in active_devs.keys(): c['builders'].append({'name': name, 'slavenames': ["release-slave"], 'builddir': name, 'factory': FullBuildFactory(name) }) c['builders'].append({'name': name+'-win', 'slavenames': ["release-slave"], 'builddir': name+'-win', 'factory': WinTempBuildFactory(name) }) c['builders'].append({'name': name+'-win_debug', 'slavenames': ["release-slave"], 'builddir': name+'-win_debug', 'factory': WinTempDebugBuildFactory(name) }) #c['builders'].append({'name': name+'-osx', #'slavenames': ["macosx1"], #'builddir': name+'-osx', #'factory': OSXBuildFactory(name) #}) #c['builders'].append({'name': 'buildbot-osx', #'slavenames': ["macosx1"], #'builddir': 'buildbot-osx', #'factory': OSXBuildFactory('buildbot') #}) class DummyFactory(BuildFactory): def __init__(self, who): BuildFactory.__init__(self) self.addStep(Git(repourl=master_repo)) self.addStep( SyncSubmodules() ) self.addStep( InitSubmodules() ) self.addStep(UploadTranslations()) b00 = {'name': "dummy", 'slavenames': ["release-slave"], 'builddir': "dummy", 'factory': DummyFactory("koshi") } #c['builders'].append(b00) ####### STATUS TARGETS from buildbot.status.html import WebStatus from buildbot.status.web.authz import Authz from buildbot.status.web.auth import HTPasswdAuth auth = (HTPasswdAuth('/home/buildbot/.htpasswd')) authz = Authz(auth=auth, forceBuild='auth', # only authenticated users pingBuilder=True, # but anyone can do this ) c['status'].append(WebStatus(http_port=8010, authz=authz)) #from buildbot.status import words #c['status'].append(words.IRC(host="orwell.freenode.net", nick="springlobby", # channels=["#springlobby"])) from buildbot.status import client c['status'].append(client.PBListener(9988)) from buildbot.status.mail import MailNotifier #mn = MailNotifier(fromaddr="koshi@springlobby.info",builders=['release'], # sendToInterestedUsers=False, # extraRecipients=['releases@www.springlobby.info']) bnames = ['koshi-win_dbg','dummy','tc','koshi','release','docs','BrainDamage','bd-win', 'tobi','olemars','koshi-win_dbg','koshi-full','koshi-win','olemars-win','tc-win'] mn = SpringNotifier( builders=bnames,mode='all') c['status'].append(mn) ####### DEBUGGING OPTIONS #c['debugPassword'] = "debugpassword" #c['manhole'] = buildbot.manhole.PasswordManhole("tcp:9999:interface=127.0.0.1", "admin", "password") ####### PROJECT IDENTITY c['projectName'] = "SpringLobby" c['projectURL'] = "http://springlobby.info/" c['buildbotURL'] = "http://buildbot.springlobby.info/" springlobby-0.169/cmake/FindAlure.cmake0000600000176000000410000000354212105760277021373 0ustar buildbotwww-data00000000000000# - Try to find Alure # Once done this will define # # ALURE_FOUND - system has Alure # ALURE_INCLUDE_DIRS - the Alure include directory # ALURE_LIBRARIES - Link these to use Alure # # Copyright © 2011 Laszlo Papp # # Redistribution and use is allowed according to the terms of the New # BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # find_path(ALURE_INCLUDE_DIR NAMES alure.h PATH_SUFFIXES AL OpenAL PATHS /usr/include /usr/local/include /opt/local/include /sw/include ) #IF (NOT ALURE_MIN_VERSION) # SET(ALURE_MIN_VERSION "1.1") #ENDIF(NOT ALURE_MIN_VERSION) #SET(ALURE_VERSION_OK TRUE) #IF(ALURE_INCLUDE_DIR) # FILE(READ ${ALURE_INCLUDE_DIR}/alure.h ALURE_VERSION_CONTENT) # STRING (REGEX MATCH "ALURE_API.*.alureUpdateInterval" ALURE_VERSION_MATCH "${ALURE_VERSION_CONTENT}") # IF(ALURE_VERSION_MATCH) # SET(ALURE_VERSION "1.1") # ELSE(ALURE_VERSION_MATCH) # SET(ALURE_VERSION_OK FALSE) # MESSAGE(STATUS "Can not find a recent enough version of Alure. Please install ${ALURE_MIN_VERSION} or newer. Found ${ALURE_VERSION}") # ENDIF(ALURE_VERSION_MATCH) #ENDIF(ALURE_INCLUDE_DIR) find_library(ALURE_LIBRARY NAMES alure alure 32 ALURE32-static ALURE32 PATHS /usr/lib /usr/local/lib /opt/local/lib /sw/lib ) set(ALURE_INCLUDE_DIRS ${ALURE_INCLUDE_DIR} ) set(ALURE_LIBRARIES ${ALURE_LIBRARY} ) INCLUDE(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set ALURE_FOUND to TRUE if # all listed variables are TRUE FIND_PACKAGE_HANDLE_STANDARD_ARGS(Alure DEFAULT_MSG ALURE_LIBRARY ALURE_INCLUDE_DIR) # show the ALURE_INCLUDE_DIRS and ALURE_LIBRARIES variables only in the advanced view mark_as_advanced(ALURE_INCLUDE_DIRS ALURE_LIBRARIES) springlobby-0.169/cmake/FindGettext.cmake0000600000176000000410000001711312105760277021746 0ustar buildbotwww-data00000000000000# - Find GNU gettext tools # This module looks for the GNU gettext tools. This module defines the # following values: # GETTEXT_MSGMERGE_EXECUTABLE: the full path to the msgmerge tool. # GETTEXT_MSGFMT_EXECUTABLE: the full path to the msgfmt tool. # GETTEXT_FOUND: True if gettext has been found. # # Additionally it provides the following macros: # GETTEXT_CREATE_TRANSLATIONS ( outputFile [ALL] file1 ... fileN ) # This will create a target "translations" which will convert the # given input po files into the binary output mo file. If the # ALL option is used, the translations will also be created when # building the default target. # - Find Gettext run-time library and tools. # This module finds the GNU gettext run-time library (LGPL), include paths and # associated tools (GPL). This code sets the following variables: # GETTEXT_INCLUDE_DIR = path(s) to gettext's include files # GETTEXT_LIBRARIES = the libraries to link against to use gettext # GETTEXT_INTL_LIBRARY = path to gettext's intl library # GETTEXT_RUNTIME_FOUND = true if runtime libs were found (intl) # GETTEXT_INFO_MSG = information string about gettext # GETTEXT_XGETTEXT_EXECUTABLE = xgettext tool # GETTEXT_MSGINIT_EXECUTABLE = msginit tool # GETTEXT_MSGMERGE_EXECUTABLE = msgmerge tool # GETTEXT_MSGCAT_EXECUTABLE = msgcat tool # GETTEXT_MSGCONV_EXECUTABLE = msgconv tool # GETTEXT_MSGFMT_EXECUTABLE = msgfmt tool # GETTEXT_TOOLS_FOUND = true if all the tools were found # GETTEXT_FOUND = true if both runtime and tools were found # As a convenience, the following variables can be set before including # this module to make its life easier: # GETTEXT_SEARCH_PATH = list of path to search gettext components for # -------------------------------------------------------------------------- # As a convenience, try to find everything as soon as we set any one of # the cache variables. macro(GETTEXT_FIND_POTENTIAL_DIRS) set(potential_bin_dirs) set(potential_lib_dirs) set(potential_include_dirs) foreach(filepath "${GETTEXT_INTL_LIBRARY}" "${GETTEXT_XGETTEXT_EXECUTABLE}" "${GETTEXT_MSGINIT_EXECUTABLE}" "${GETTEXT_MSGMERGE_EXECUTABLE}" "${GETTEXT_MSGCAT_EXECUTABLE}" "${GETTEXT_MSGCONV_EXECUTABLE}" "${GETTEXT_MSGFMT_EXECUTABLE}" ) get_filename_component(path "${filepath}" PATH) set(potential_bin_dirs ${potential_bin_dirs} "${path}/../bin") set(potential_lib_dirs ${potential_lib_dirs} "${path}/../lib") set(potential_include_dirs ${potential_include_dirs} "${path}/../include") endforeach(filepath) foreach(path "${GETTEXT_INCLUDE_DIR}" "${GETTEXT_SEARCH_PATH}" ) set(potential_bin_dirs ${potential_bin_dirs} "${path}/../bin") set(potential_lib_dirs ${potential_lib_dirs} "${path}/../lib") set(potential_include_dirs ${potential_include_dirs} "${path}/../include") endforeach(path) endmacro(GETTEXT_FIND_POTENTIAL_DIRS) # -------------------------------------------------------------------------- # Find the runtime lib macro(GETTEXT_FIND_RUNTIME_LIBRARY) set(GETTEXT_RUNTIME_FOUND 1) # The gettext intl include dir (libintl.h) find_path(GETTEXT_INCLUDE_DIR libintl.h ${potential_include_dirs} DOC "Path to gettext include directory (where libintl.h can be found)") mark_as_advanced(GETTEXT_INCLUDE_DIR) if(NOT GETTEXT_INCLUDE_DIR) set(GETTEXT_RUNTIME_FOUND 0) endif(NOT GETTEXT_INCLUDE_DIR) set(GETTEXT_LIBRARIES) # The gettext intl library # Some Unix system (like Linux) have gettext right into libc if(WIN32) set(HAVE_GETTEXT 0) else(WIN32) include(CheckFunctionExists) check_function_exists(gettext HAVE_GETTEXT) endif(WIN32) if(HAVE_GETTEXT) # Even if we have a system one, let the user provide another one # eventually (i.e., more recent, or GNU). set(GETTEXT_INTL_LIBRARY "" CACHE FILEPATH "Path to gettext intl library (leave it empty to use the system one)") else(HAVE_GETTEXT) find_library(GETTEXT_INTL_LIBRARY NAMES intl PATHS ${potential_lib_dirs} DOC "Path to gettext intl library") if(NOT GETTEXT_INTL_LIBRARY) set(GETTEXT_RUNTIME_FOUND 0) endif(NOT GETTEXT_INTL_LIBRARY) endif(HAVE_GETTEXT) mark_as_advanced(GETTEXT_INTL_LIBRARY) if(GETTEXT_INTL_LIBRARY) set(GETTEXT_LIBRARIES ${GETTEXT_LIBRARIES} ${GETTEXT_INTL_LIBRARY}) endif(GETTEXT_INTL_LIBRARY) # The gettext asprintf library # Actually not useful as it does not seem to exist on Unix # IF(WIN32) # FIND_LIBRARY(GETTEXT_ASPRINTF_LIBRARY # NAMES asprintf # PATHS ${potential_lib_dirs} # DOC "Gettext asprintf library") # MARK_AS_ADVANCED(GETTEXT_ASPRINTF_LIBRARY) # IF(NOT GETTEXT_ASPRINTF_LIBRARY) # SET(GETTEXT_RUNTIME_FOUND 0) # ELSE(NOT GETTEXT_ASPRINTF_LIBRARY) # SET(GETTEXT_LIBRARIES ${GETTEXT_LIBRARIES} ${GETTEXT_ASPRINTF_LIBRARY}) # ENDIF(NOT GETTEXT_ASPRINTF_LIBRARY) # ENDIF(WIN32) endmacro(GETTEXT_FIND_RUNTIME_LIBRARY) # -------------------------------------------------------------------------- # Find the tools macro(GETTEXT_FIND_TOOLS) set(GETTEXT_TOOLS_FOUND 1) foreach(tool xgettext msginit msgmerge msgcat msgconv msgfmt ) string(TOUPPER ${tool} tool_upper) find_program(GETTEXT_${tool_upper}_EXECUTABLE NAMES ${tool} PATHS ${potential_bin_dirs} DOC "Path to gettext ${tool} tool") mark_as_advanced(GETTEXT_${tool_upper}_EXECUTABLE) if(NOT GETTEXT_${tool_upper}_EXECUTABLE) set(GETTEXT_TOOLS_FOUND 0) endif(NOT GETTEXT_${tool_upper}_EXECUTABLE) endforeach(tool) endmacro(GETTEXT_FIND_TOOLS) # -------------------------------------------------------------------------- # Some convenient info about gettext, where to get it, etc. set(GETTEXT_INFO_MSG "More information about gettext can be found at http://directory.fsf.org/gettext.html.") if(WIN32) set(GETTEXT_INFO_MSG "${GETTEXT_INFO_MSG} Windows users can download gettext-runtime-0.13.1.bin.woe32.zip (LGPL), gettext-tools-0.13.1.bin.woe32.zip (GPL) as well as libiconv-1.9.1.bin.woe32.zip (LGPL) from any GNU mirror (say, http://mirrors.kernel.org/gnu/gettext/ and http://mirrors.kernel.org/gnu/libiconv/), unpack the archives in the same directory, then set GETTEXT_INTL_LIBRARY to 'lib/intl.lib' in and GETTEXT_INCLUDE_DIR to 'include' in that directory.\n\nWarning: if you are using ActiveTcl, the ActiveState binary distribution for Tcl, make sure you overwrite the iconv.dll file found in both the Tcl bin/ and lib/ directories with the iconv.dll file found in your gettext bin/ directory.") endif(WIN32) # -------------------------------------------------------------------------- # Found ? gettext_find_potential_dirs() gettext_find_runtime_library() gettext_find_tools() # Try again with new potential dirs now that we may have found the runtime # or the tools gettext_find_potential_dirs() if(NOT GETTEXT_RUNTIME_FOUND) gettext_find_runtime_library() endif(NOT GETTEXT_RUNTIME_FOUND) if(NOT GETTEXT_TOOLS_FOUND) gettext_find_tools() endif(NOT GETTEXT_TOOLS_FOUND) if(GETTEXT_RUNTIME_FOUND AND GETTEXT_TOOLS_FOUND) set(GETTEXT_FOUND 1) else(GETTEXT_RUNTIME_FOUND AND GETTEXT_TOOLS_FOUND) set(GETTEXT_FOUND 0) endif(GETTEXT_RUNTIME_FOUND AND GETTEXT_TOOLS_FOUND) if(NOT GETTEXT_FOUND AND NOT Gettext_FIND_QUIETLY AND Gettext_FIND_REQUIRED) message(FATAL_ERROR "Could not find gettext runtime library and tools for internationalization purposes.\n\n${GETTEXT_INFO_MSG}") endif(NOT GETTEXT_FOUND AND NOT Gettext_FIND_QUIETLY AND Gettext_FIND_REQUIRED) springlobby-0.169/cmake/FindSDL.cmake0000600000176000000410000001371312105760277020746 0ustar buildbotwww-data00000000000000# Locate SDL library # This module defines # SDL_LIBRARY, the name of the library to link against # SDL_FOUND, if false, do not try to link to SDL # SDL_INCLUDE_DIR, where to find SDL.h # # This module responds to the the flag: # SDL_BUILDING_LIBRARY # If this is defined, then no SDL_main will be linked in because # only applications need main(). # Otherwise, it is assumed you are building an application and this # module will attempt to locate and set the the proper link flags # as part of the returned SDL_LIBRARY variable. # # Don't forget to include SDLmain.h and SDLmain.m your project for the # OS X framework based version. (Other versions link to -lSDLmain which # this module will try to find on your behalf.) Also for OS X, this # module will automatically add the -framework Cocoa on your behalf. # # # Additional Note: If you see an empty SDL_LIBRARY_TEMP in your configuration # and no SDL_LIBRARY, it means CMake did not find your SDL library # (SDL.dll, libsdl.so, SDL.framework, etc). # Set SDL_LIBRARY_TEMP to point to your SDL library, and configure again. # Similarly, if you see an empty SDLMAIN_LIBRARY, you should set this value # as appropriate. These values are used to generate the final SDL_LIBRARY # variable, but when these values are unset, SDL_LIBRARY does not get created. # # # $SDLDIR is an environment variable that would # correspond to the ./configure --prefix=$SDLDIR # used in building SDL. # l.e.galup 9-20-02 # # Modified by Eric Wing. # Added code to assist with automated building by using environmental variables # and providing a more controlled/consistent search behavior. # Added new modifications to recognize OS X frameworks and # additional Unix paths (FreeBSD, etc). # Also corrected the header search path to follow "proper" SDL guidelines. # Added a search for SDLmain which is needed by some platforms. # Added a search for threads which is needed by some platforms. # Added needed compile switches for MinGW. # # On OSX, this will prefer the Framework version (if found) over others. # People will have to manually change the cache values of # SDL_LIBRARY to override this selection or set the CMake environment # CMAKE_INCLUDE_PATH to modify the search paths. # # Note that the header path has changed from SDL/SDL.h to just SDL.h # This needed to change because "proper" SDL convention # is #include "SDL.h", not . This is done for portability # reasons because not all systems place things in SDL/ (see FreeBSD). FIND_PATH(SDL_INCLUDE_DIR SDL.h HINTS $ENV{SDLDIR} PATH_SUFFIXES include PATHS ~/Library/Frameworks /Library/Frameworks /usr/local/include/SDL /usr/include/SDL /usr/local/include/SDL12 /usr/local/include/SDL11 # FreeBSD ports /usr/include/SDL12 /usr/include/SDL11 /usr/local/include /usr/include /sw/include/SDL # Fink /sw/include /opt/local/include/SDL # DarwinPorts /opt/local/include /opt/csw/include/SDL # Blastwave /opt/csw/include /opt/include/SDL /opt/include ) #MESSAGE("SDL_INCLUDE_DIR is ${SDL_INCLUDE_DIR}") # SDL-1.1 is the name used by FreeBSD ports... # don't confuse it for the version number. FIND_LIBRARY(SDL_LIBRARY_TEMP NAMES SDL SDL-1.1 libSDL HINTS $ENV{SDLDIR} PATH_SUFFIXES lib64 lib PATHS /usr/local /usr /usr/ /sw /opt/local /opt/csw /opt ) #MESSAGE("SDL_LIBRARY_TEMP is ${SDL_LIBRARY_TEMP}") IF(NOT SDL_BUILDING_LIBRARY) IF(NOT ${SDL_INCLUDE_DIR} MATCHES ".framework") # Non-OS X framework versions expect you to also dynamically link to # SDLmain. This is mainly for Windows and OS X. Other (Unix) platforms # seem to provide SDLmain for compatibility even though they don't # necessarily need it. FIND_LIBRARY(SDLMAIN_LIBRARY NAMES SDLmain SDLmain-1.1 HINTS $ENV{SDLDIR} PATH_SUFFIXES lib64 lib PATHS /usr/local /usr /sw /opt/local /opt/csw /opt ) ENDIF(NOT ${SDL_INCLUDE_DIR} MATCHES ".framework") ENDIF(NOT SDL_BUILDING_LIBRARY) # SDL may require threads on your system. # The Apple build may not need an explicit flag because one of the # frameworks may already provide it. # But for non-OSX systems, I will use the CMake Threads package. IF(NOT APPLE) FIND_PACKAGE(Threads) ENDIF(NOT APPLE) # MinGW needs an additional library, mwindows # It's total link flags should look like -lmingw32 -lSDLmain -lSDL -lmwindows # (Actually on second look, I think it only needs one of the m* libraries.) IF(MINGW) SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") ENDIF(MINGW) SET(SDL_FOUND "NO") IF(SDL_LIBRARY_TEMP) # For SDLmain IF(NOT SDL_BUILDING_LIBRARY) IF(SDLMAIN_LIBRARY) SET(SDL_LIBRARY_TEMP ${SDLMAIN_LIBRARY} ${SDL_LIBRARY_TEMP}) ENDIF(SDLMAIN_LIBRARY) ENDIF(NOT SDL_BUILDING_LIBRARY) # For OS X, SDL uses Cocoa as a backend so it must link to Cocoa. # CMake doesn't display the -framework Cocoa string in the UI even # though it actually is there if I modify a pre-used variable. # I think it has something to do with the CACHE STRING. # So I use a temporary variable until the end so I can set the # "real" variable in one-shot. IF(APPLE) SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} "-framework Cocoa") ENDIF(APPLE) # For threads, as mentioned Apple doesn't need this. # In fact, there seems to be a problem if I used the Threads package # and try using this line, so I'm just skipping it entirely for OS X. IF(NOT APPLE) SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) ENDIF(NOT APPLE) # For MinGW library IF(MINGW) SET(SDL_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL_LIBRARY_TEMP}) ENDIF(MINGW) # Set the final string here so the GUI reflects the final state. SET(SDL_LIBRARY ${SDL_LIBRARY_TEMP} CACHE STRING "Where the SDL Library can be found") # Set the temp variable to INTERNAL so it is not seen in the CMake GUI SET(SDL_LIBRARY_TEMP "${SDL_LIBRARY_TEMP}" CACHE INTERNAL "") SET(SDL_FOUND "YES") ENDIF(SDL_LIBRARY_TEMP) #MESSAGE("SDL_LIBRARY is ${SDL_LIBRARY}") springlobby-0.169/cmake/FindSDL_mixer.cmake0000600000176000000410000000265112105760277022151 0ustar buildbotwww-data00000000000000# Locate SDL_mixer library # This module defines # SDLMIXER_LIBRARY, the name of the library to link against # SDLMIXER_FOUND, if false, do not try to link to SDL # SDLMIXER_INCLUDE_DIR, where to find SDL/SDL.h # # $SDLDIR is an environment variable that would # correspond to the ./configure --prefix=$SDLDIR # used in building SDL. # # Created by Eric Wing. This was influenced by the FindSDL.cmake # module, but with modifications to recognize OS X frameworks and # additional Unix paths (FreeBSD, etc). FIND_PATH(SDLMIXER_INCLUDE_DIR SDL_mixer.h HINTS $ENV{SDLMIXERDIR} $ENV{SDLDIR} PATH_SUFFIXES include PATHS ~/Library/Frameworks /Library/Frameworks /usr/local/include/SDL /usr/include/SDL /usr/local/include/SDL12 /usr/local/include/SDL11 # FreeBSD ports /usr/include/SDL12 /usr/include/SDL11 /usr/local/include /usr/include /sw/include/SDL # Fink /sw/include /opt/local/include/SDL # DarwinPorts /opt/local/include /opt/csw/include/SDL # Blastwave /opt/csw/include /opt/include/SDL /opt/include ) FIND_LIBRARY(SDLMIXER_LIBRARY NAMES SDL_mixer libSDL_mixer HINTS $ENV{SDLMIXERDIR} $ENV{SDLDIR} PATH_SUFFIXES lib64 lib PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt ) SET(SDLMIXER_FOUND "NO") IF(SDLMIXER_LIBRARY AND SDLMIXER_INCLUDE_DIR) SET(SDLMIXER_FOUND "YES") ENDIF(SDLMIXER_LIBRARY AND SDLMIXER_INCLUDE_DIR) springlobby-0.169/cmake/FindSDL_sound.cmake0000600000176000000410000003232312105760277022154 0ustar buildbotwww-data00000000000000# Locates the SDL_sound library # This module depends on SDL being found and # must be called AFTER FindSDL.cmake is called. # This module defines # SDL_SOUND_INCLUDE_DIR, where to find SDL_sound.h # SDL_SOUND_FOUND, if false, do not try to link to SDL # SDL_SOUND_LIBRARIES, this contains the list of libraries that you need # to link against. This is a read-only variable and is marked INTERNAL. # SDL_SOUND_EXTRAS, this is an optional variable for you to add your own # flags to SDL_SOUND_LIBRARIES. This is prepended to SDL_SOUND_LIBRARIES. # This is available mostly for cases this module failed to anticipate for # and you must add additional flags. This is marked as ADVANCED. # # This module also defines (but you shouldn't need to use directly) # SDL_SOUND_LIBRARY, the name of just the SDL_sound library you would link # against. Use SDL_SOUND_LIBRARIES for you link instructions and not this one. # And might define the following as needed # MIKMOD_LIBRARY # MODPLUG_LIBRARY # OGG_LIBRARY # VORBIS_LIBRARY # SMPEG_LIBRARY # FLAC_LIBRARY # SPEEX_LIBRARY # # Typically, you should not use these variables directly, and you should use # SDL_SOUND_LIBRARIES which contains SDL_SOUND_LIBRARY and the other audio libraries # (if needed) to successfully compile on your system . # # Created by Eric Wing. # This module is a bit more complicated than the other FindSDL* family modules. # The reason is that SDL_sound can be compiled in a large variety of different ways # which are independent of platform. SDL_sound may dynamically link against other 3rd # party libraries to get additional codec support, such as Ogg Vorbis, SMPEG, ModPlug, # MikMod, FLAC, Speex, and potentially others. # Under some circumstances which I don't fully understand, # there seems to be a requirement # that dependent libraries of libraries you use must also be explicitly # linked against in order to successfully compile. SDL_sound does not currently # have any system in place to know how it was compiled. # So this CMake module does the hard work in trying to discover which 3rd party # libraries are required for building (if any). # This module uses a brute force approach to create a test program that uses SDL_sound, # and then tries to build it. If the build fails, it parses the error output for # known symbol names to figure out which libraries are needed. # # Responds to the $SDLDIR and $SDLSOUNDDIR environmental variable that would # correspond to the ./configure --prefix=$SDLDIR used in building SDL. # # On OSX, this will prefer the Framework version (if found) over others. # People will have to manually change the cache values of # SDL_LIBRARY to override this selectionor set the CMake environment # CMAKE_INCLUDE_PATH to modify the search paths. # SET(SDL_SOUND_EXTRAS "" CACHE STRING "SDL_sound extra flags") MARK_AS_ADVANCED(SDL_SOUND_EXTRAS) # Find SDL_sound.h FIND_PATH(SDL_SOUND_INCLUDE_DIR SDL_sound.h HINTS $ENV{SDLSOUNDDIR}/include $ENV{SDLSOUNDDIR} $ENV{SDLDIR}/include $ENV{SDLDIR} PATHS /usr/local/include/SDL /usr/include/SDL /usr/local/include/SDL12 /usr/local/include/SDL11 # FreeBSD ports /usr/include/SDL12 /usr/include/SDL11 /usr/local/include /usr/include /sw/include/SDL # Fink /sw/include /opt/local/include/SDL # DarwinPorts /opt/local/include /opt/csw/include/SDL # Blastwave /opt/csw/include /opt/include/SDL /opt/include ) FIND_LIBRARY(SDL_SOUND_LIBRARY NAMES SDL_sound;libSDL_sound HINTS $ENV{SDLSOUNDDIR}/lib $ENV{SDLSOUNDDIR} $ENV{SDLDIR}/lib $ENV{SDLDIR} PATHS /usr/local/lib /usr/lib /sw/lib /opt/local/lib /opt/csw/lib /opt/lib ) SET(SDL_SOUND_FOUND "NO") IF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) # CMake is giving me problems using TRY_COMPILE with the CMAKE_FLAGS # for the :STRING syntax if I have multiple values contained in a # single variable. This is a problem for the SDL_LIBRARY variable # because it does just that. When I feed this variable to the command, # only the first value gets the appropriate modifier (e.g. -I) and # the rest get dropped. # To get multiple single variables to work, I must separate them with a "\;" # I could go back and modify the FindSDL.cmake module, but that's kind of painful. # The solution would be to try something like: # SET(SDL_TRY_COMPILE_LIBRARY_LIST "${SDL_TRY_COMPILE_LIBRARY_LIST}\;${CMAKE_THREAD_LIBS_INIT}") # Instead, it was suggested on the mailing list to write a temporary CMakeLists.txt # with a temporary test project and invoke that with TRY_COMPILE. # See message thread "Figuring out dependencies for a library in order to build" # 2005-07-16 # TRY_COMPILE( # MY_RESULT # ${CMAKE_BINARY_DIR} # ${PROJECT_SOURCE_DIR}/DetermineSoundLibs.c # CMAKE_FLAGS # -DINCLUDE_DIRECTORIES:STRING=${SDL_INCLUDE_DIR}\;${SDL_SOUND_INCLUDE_DIR} # -DLINK_LIBRARIES:STRING=${SDL_SOUND_LIBRARY}\;${SDL_LIBRARY} # OUTPUT_VARIABLE MY_OUTPUT # ) # To minimize external dependencies, create a sdlsound test program # which will be used to figure out if additional link dependencies are # required for the link phase. FILE(WRITE ${PROJECT_BINARY_DIR}/CMakeTmp/DetermineSoundLibs.c "#include \"SDL_sound.h\" #include \"SDL.h\" int main(int argc, char* argv[]) { Sound_AudioInfo desired; Sound_Sample* sample; SDL_Init(0); Sound_Init(); /* This doesn't actually have to work, but Init() is a no-op * for some of the decoders, so this should force more symbols * to be pulled in. */ sample = Sound_NewSampleFromFile(argv[1], &desired, 4096); Sound_Quit(); SDL_Quit(); return 0; }" ) # Calling # TARGET_LINK_LIBRARIES(DetermineSoundLibs "${SDL_SOUND_LIBRARY} ${SDL_LIBRARY}) # causes problems when SDL_LIBRARY looks like # /Library/Frameworks/SDL.framework;-framework Cocoa # The ;-framework Cocoa seems to be confusing CMake once the OS X # framework support was added. I was told that breaking up the list # would fix the problem. SET(TMP_TRY_LIBS) FOREACH(lib ${SDL_SOUND_LIBRARY} ${SDL_LIBRARY}) SET(TMP_TRY_LIBS "${TMP_TRY_LIBS} \"${lib}\"") ENDFOREACH(lib) # MESSAGE("TMP_TRY_LIBS ${TMP_TRY_LIBS}") # Write the CMakeLists.txt and test project # Weird, this is still sketchy. If I don't quote the variables # in the TARGET_LINK_LIBRARIES, I seem to loose everything # in the SDL_LIBRARY string after the "-framework". # But if I quote the stuff in INCLUDE_DIRECTORIES, it doesn't work. FILE(WRITE ${PROJECT_BINARY_DIR}/CMakeTmp/CMakeLists.txt "PROJECT(DetermineSoundLibs) cmake_minimum_required(VERSION 2.4) INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR} ${SDL_SOUND_INCLUDE_DIR}) ADD_EXECUTABLE(DetermineSoundLibs DetermineSoundLibs.c) TARGET_LINK_LIBRARIES(DetermineSoundLibs ${TMP_TRY_LIBS})" ) TRY_COMPILE( MY_RESULT ${PROJECT_BINARY_DIR}/CMakeTmp ${PROJECT_BINARY_DIR}/CMakeTmp DetermineSoundLibs OUTPUT_VARIABLE MY_OUTPUT ) # MESSAGE("${MY_RESULT}") # MESSAGE(${MY_OUTPUT}) IF(NOT MY_RESULT) # I expect that MPGLIB, VOC, WAV, AIFF, and SHN are compiled in statically. # I think Timidity is also compiled in statically. # I've never had to explcitly link against Quicktime, so I'll skip that for now. SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARY}) # Find MikMod IF("${MY_OUTPUT}" MATCHES "MikMod_") FIND_LIBRARY(MIKMOD_LIBRARY NAMES libmikmod-coreaudio mikmod PATHS $ENV{MIKMODDIR}/lib $ENV{MIKMODDIR} $ENV{SDLSOUNDDIR}/lib $ENV{SDLSOUNDDIR} $ENV{SDLDIR}/lib $ENV{SDLDIR} /usr/local/lib /usr/lib /sw/lib /opt/local/lib /opt/csw/lib /opt/lib ) IF(MIKMOD_LIBRARY) SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${MIKMOD_LIBRARY}) ENDIF(MIKMOD_LIBRARY) ENDIF("${MY_OUTPUT}" MATCHES "MikMod_") # Find ModPlug IF("${MY_OUTPUT}" MATCHES "MODPLUG_") FIND_LIBRARY(MODPLUG_LIBRARY NAMES modplug PATHS $ENV{MODPLUGDIR}/lib $ENV{MODPLUGDIR} $ENV{SDLSOUNDDIR}/lib $ENV{SDLSOUNDDIR} $ENV{SDLDIR}/lib $ENV{SDLDIR} /usr/local/lib /usr/lib /sw/lib /opt/local/lib /opt/csw/lib /opt/lib ) IF(MODPLUG_LIBRARY) SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${MODPLUG_LIBRARY}) ENDIF(MODPLUG_LIBRARY) ENDIF("${MY_OUTPUT}" MATCHES "MODPLUG_") # Find Ogg and Vorbis IF("${MY_OUTPUT}" MATCHES "ov_") FIND_LIBRARY(VORBIS_LIBRARY NAMES vorbis Vorbis VORBIS PATHS $ENV{VORBISDIR}/lib $ENV{VORBISDIR} $ENV{OGGDIR}/lib $ENV{OGGDIR} $ENV{SDLSOUNDDIR}/lib $ENV{SDLSOUNDDIR} $ENV{SDLDIR}/lib $ENV{SDLDIR} /usr/local/lib /usr/lib /sw/lib /opt/local/lib /opt/csw/lib /opt/lib ) IF(VORBIS_LIBRARY) SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${VORBIS_LIBRARY}) ENDIF(VORBIS_LIBRARY) FIND_LIBRARY(OGG_LIBRARY NAMES ogg Ogg OGG PATHS $ENV{OGGDIR}/lib $ENV{OGGDIR} $ENV{VORBISDIR}/lib $ENV{VORBISDIR} $ENV{SDLSOUNDDIR}/lib $ENV{SDLSOUNDDIR} $ENV{SDLDIR}/lib $ENV{SDLDIR} /usr/local/lib /usr/lib /sw/lib /opt/local/lib /opt/csw/lib /opt/lib ) IF(OGG_LIBRARY) SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${OGG_LIBRARY}) ENDIF(OGG_LIBRARY) ENDIF("${MY_OUTPUT}" MATCHES "ov_") # Find SMPEG IF("${MY_OUTPUT}" MATCHES "SMPEG_") FIND_LIBRARY(SMPEG_LIBRARY NAMES smpeg SMPEG Smpeg SMpeg PATHS $ENV{SMPEGDIR}/lib $ENV{SMPEGDIR} $ENV{SDLSOUNDDIR}/lib $ENV{SDLSOUNDDIR} $ENV{SDLDIR}/lib $ENV{SDLDIR} /usr/local/lib /usr/lib /sw/lib /opt/local/lib /opt/csw/lib /opt/lib ) IF(SMPEG_LIBRARY) SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${SMPEG_LIBRARY}) ENDIF(SMPEG_LIBRARY) ENDIF("${MY_OUTPUT}" MATCHES "SMPEG_") # Find FLAC IF("${MY_OUTPUT}" MATCHES "FLAC_") FIND_LIBRARY(FLAC_LIBRARY NAMES flac FLAC PATHS $ENV{FLACDIR}/lib $ENV{FLACDIR} $ENV{SDLSOUNDDIR}/lib $ENV{SDLSOUNDDIR} $ENV{SDLDIR}/lib $ENV{SDLDIR} /usr/local/lib /usr/lib /sw/lib /opt/local/lib /opt/csw/lib /opt/lib ) IF(FLAC_LIBRARY) SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${FLAC_LIBRARY}) ENDIF(FLAC_LIBRARY) ENDIF("${MY_OUTPUT}" MATCHES "FLAC_") # Hmmm...Speex seems to depend on Ogg. This might be a problem if # the TRY_COMPILE attempt gets blocked at SPEEX before it can pull # in the Ogg symbols. I'm not sure if I should duplicate the ogg stuff # above for here or if two ogg entries will screw up things. IF("${MY_OUTPUT}" MATCHES "speex_") FIND_LIBRARY(SPEEX_LIBRARY NAMES speex SPEEX PATHS $ENV{SPEEXDIR}/lib $ENV{SPEEXDIR} $ENV{SDLSOUNDDIR}/lib $ENV{SDLSOUNDDIR} $ENV{SDLDIR}/lib $ENV{SDLDIR} /usr/local/lib /usr/lib /sw/lib /opt/local/lib /opt/csw/lib /opt/lib ) IF(SPEEX_LIBRARY) SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${SPEEX_LIBRARY}) ENDIF(SPEEX_LIBRARY) # Find OGG (needed for Speex) # We might have already found Ogg for Vorbis, so skip it if so. IF(NOT OGG_LIBRARY) FIND_LIBRARY(OGG_LIBRARY NAMES ogg Ogg OGG PATHS $ENV{OGGDIR}/lib $ENV{OGGDIR} $ENV{VORBISDIR}/lib $ENV{VORBISDIR} $ENV{SPEEXDIR}/lib $ENV{SPEEXDIR} $ENV{SDLSOUNDDIR}/lib $ENV{SDLSOUNDDIR} $ENV{SDLDIR}/lib $ENV{SDLDIR} /usr/local/lib /usr/lib /sw/lib /opt/local/lib /opt/csw/lib /opt/lib ) IF(OGG_LIBRARY) SET(SDL_SOUND_LIBRARIES_TMP ${SDL_SOUND_LIBRARIES_TMP} ${OGG_LIBRARY}) ENDIF(OGG_LIBRARY) ENDIF(NOT OGG_LIBRARY) ENDIF("${MY_OUTPUT}" MATCHES "speex_") ELSE(NOT MY_RESULT) SET(SDL_SOUND_LIBRARIES "${SDL_SOUND_EXTRAS} ${SDL_SOUND_LIBRARY}" CACHE INTERNAL "SDL_sound and dependent libraries") ENDIF(NOT MY_RESULT) SET(SDL_SOUND_LIBRARIES "${SDL_SOUND_EXTRAS} ${SDL_SOUND_LIBRARIES_TMP}" CACHE INTERNAL "SDL_sound and dependent libraries") SET(SDL_SOUND_FOUND "YES") ENDIF(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY) # MESSAGE("SDL_SOUND_LIBRARIES is ${SDL_SOUND_LIBRARIES}") springlobby-0.169/cmake/FindwxWidgets.cmake0000600000176000000410000011475412105760277022320 0ustar buildbotwww-data00000000000000# - Find a wxWidgets (a.k.a., wxWindows) installation. # This module finds if wxWidgets is installed and selects a default # configuration to use. wxWidgets is a modular library. To specify the # modules that you will use, you need to name them as components to # the package: # # FIND_PACKAGE(wxWidgets COMPONENTS core base ...) # # There are two search branches: a windows style and a unix style. For # windows, the following variables are searched for and set to # defaults in case of multiple choices. Change them if the defaults # are not desired (i.e., these are the only variables you should # change to select a configuration): # # wxWidgets_ROOT_DIR - Base wxWidgets directory # (e.g., C:/wxWidgets-2.6.3). # wxWidgets_LIB_DIR - Path to wxWidgets libraries # (e.g., C:/wxWidgets-2.6.3/lib/vc_lib). # wxWidgets_CONFIGURATION - Configuration to use # (e.g., msw, mswd, mswu, mswunivud, etc.) # wxWidgets_EXCLUDE_COMMON_LIBRARIES # - Set to TRUE to exclude linking of # commonly required libs (e.g., png tiff # jpeg zlib regex expat). # # For unix style it uses the wx-config utility. You can select between # debug/release, unicode/ansi, universal/non-universal, and # static/shared in the QtDialog or ccmake interfaces by turning ON/OFF # the following variables: # # wxWidgets_USE_DEBUG # wxWidgets_USE_UNICODE # wxWidgets_USE_UNIVERSAL # wxWidgets_USE_STATIC # # There is also a wxWidgets_CONFIG_OPTIONS variable for all other # options that need to be passed to the wx-config utility. For # example, to use the base toolkit found in the /usr/local path, set # the variable (before calling the FIND_PACKAGE command) as such: # # SET(wxWidgets_CONFIG_OPTIONS --toolkit=base --prefix=/usr) # # The following are set after the configuration is done for both # windows and unix style: # # wxWidgets_FOUND - Set to TRUE if wxWidgets was found. # wxWidgets_INCLUDE_DIRS - Include directories for WIN32 # i.e., where to find "wx/wx.h" and # "wx/setup.h"; possibly empty for unices. # wxWidgets_LIBRARIES - Path to the wxWidgets libraries. # wxWidgets_LIBRARY_DIRS - compile time link dirs, useful for # rpath on UNIX. Typically an empty string # in WIN32 environment. # wxWidgets_DEFINITIONS - Contains defines required to compile/link # against WX, e.g. WXUSINGDLL # wxWidgets_DEFINITIONS_DEBUG- Contains defines required to compile/link # against WX debug builds, e.g. __WXDEBUG__ # wxWidgets_CXX_FLAGS - Include dirs and compiler flags for # unices, empty on WIN32. Essentially # "`wx-config --cxxflags`". # wxWidgets_USE_FILE - Convenience include file. # # Sample usage: # # Note that for MinGW users the order of libs is important! # FIND_PACKAGE(wxWidgets COMPONENTS net gl core base) # IF(wxWidgets_FOUND) # INCLUDE(${wxWidgets_USE_FILE}) # # and for each of your dependent executable/library targets: # TARGET_LINK_LIBRARIES( ${wxWidgets_LIBRARIES}) # ENDIF(wxWidgets_FOUND) # # If wxWidgets is required (i.e., not an optional part): # FIND_PACKAGE(wxWidgets REQUIRED net gl core base) # INCLUDE(${wxWidgets_USE_FILE}) # # and for each of your dependent executable/library targets: # TARGET_LINK_LIBRARIES( ${wxWidgets_LIBRARIES}) #============================================================================= # Copyright 2004-2009 Kitware, Inc. # Copyright 2007-2009 Miguel A. Figueroa-Villanueva # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) # # FIXME: check this and provide a correct sample usage... # Remember to connect back to the upper text. # Sample usage with monolithic wx build: # # FIND_PACKAGE(wxWidgets COMPONENTS mono) # ... # NOTES # # This module has been tested on the WIN32 platform with wxWidgets # 2.6.2, 2.6.3, and 2.5.3. However, it has been designed to # easily extend support to all possible builds, e.g., static/shared, # debug/release, unicode, universal, multilib/monolithic, etc.. # # If you want to use the module and your build type is not supported # out-of-the-box, please contact me to exchange information on how # your system is setup and I'll try to add support for it. # # AUTHOR # # Miguel A. Figueroa-Villanueva (miguelf at ieee dot org). # Jan Woetzel (jw at mip.informatik.uni-kiel.de). # # Based on previous works of: # Jan Woetzel (FindwxWindows.cmake), # Jorgen Bodde and Jerry Fath (FindwxWin.cmake). # TODO/ideas # # (1) Option/Setting to use all available wx libs # In contrast to expert developer who lists the # minimal set of required libs in wxWidgets_USE_LIBS # there is the newbie user: # - who just wants to link against WX with more 'magic' # - doesn't know the internal structure of WX or how it was built, # in particular if it is monolithic or not # - want to link against all available WX libs # Basically, the intent here is to mimic what wx-config would do by # default (i.e., `wx-config --libs`). # # Possible solution: # Add a reserved keyword "std" that initializes to what wx-config # would default to. If the user has not set the wxWidgets_USE_LIBS, # default to "std" instead of "base core" as it is now. To implement # "std" will basically boil down to a FOR_EACH lib-FOUND, but maybe # checking whether a minimal set was found. # FIXME: This and all the DBG_MSG calls should be removed after the # module stabilizes. # # Helper macro to control the debugging output globally. There are # two versions for controlling how verbose your output should be. MACRO(DBG_MSG _MSG) # MESSAGE(STATUS # "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}") ENDMACRO(DBG_MSG) MACRO(DBG_MSG_V _MSG) # MESSAGE(STATUS # "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): ${_MSG}") ENDMACRO(DBG_MSG_V) # Clear return values in case the module is loaded more than once. SET(wxWidgets_FOUND FALSE) SET(wxWidgets_INCLUDE_DIRS "") SET(wxWidgets_LIBRARIES "") SET(wxWidgets_LIBRARY_DIRS "") SET(wxWidgets_CXX_FLAGS "") # Using SYSTEM with INCLUDE_DIRECTORIES in conjunction with wxWidgets on # the Mac produces compiler errors. Set wxWidgets_INCLUDE_DIRS_NO_SYSTEM # to prevent UsewxWidgets.cmake from using SYSTEM. # # See cmake mailing list discussions for more info: # http://www.cmake.org/pipermail/cmake/2008-April/021115.html # http://www.cmake.org/pipermail/cmake/2008-April/021146.html # IF(APPLE OR CMAKE_CXX_PLATFORM_ID MATCHES "OpenBSD") SET(wxWidgets_INCLUDE_DIRS_NO_SYSTEM 1) ENDIF() # DEPRECATED: This is a patch to support the DEPRECATED use of # wxWidgets_USE_LIBS. # # If wxWidgets_USE_LIBS is set: # - if using , then override wxWidgets_USE_LIBS # - else set wxWidgets_FIND_COMPONENTS to wxWidgets_USE_LIBS IF(wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS) SET(wxWidgets_FIND_COMPONENTS ${wxWidgets_USE_LIBS}) ENDIF(wxWidgets_USE_LIBS AND NOT wxWidgets_FIND_COMPONENTS) DBG_MSG("wxWidgets_FIND_COMPONENTS : ${wxWidgets_FIND_COMPONENTS}") # Add the convenience use file if available. # # Get dir of this file which may reside in: # - CMAKE_MAKE_ROOT/Modules on CMake installation # - CMAKE_MODULE_PATH if user prefers his own specialized version SET(wxWidgets_USE_FILE "") GET_FILENAME_COMPONENT( wxWidgets_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH) # Prefer an existing customized version, but the user might override # the FindwxWidgets module and not the UsewxWidgets one. IF(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") SET(wxWidgets_USE_FILE "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") ELSE(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") SET(wxWidgets_USE_FILE UsewxWidgets) ENDIF(EXISTS "${wxWidgets_CURRENT_LIST_DIR}/UsewxWidgets.cmake") #===================================================================== #===================================================================== IF(WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT CMAKE_CROSSCOMPILING) SET(wxWidgets_FIND_STYLE "win32") ELSE(WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT CMAKE_CROSSCOMPILING) IF(UNIX OR MSYS OR CMAKE_CROSSCOMPILING) SET(wxWidgets_FIND_STYLE "unix") ENDIF(UNIX OR MSYS OR CMAKE_CROSSCOMPILING) ENDIF(WIN32 AND NOT CYGWIN AND NOT MSYS AND NOT CMAKE_CROSSCOMPILING) #===================================================================== # WIN32_FIND_STYLE #===================================================================== IF(wxWidgets_FIND_STYLE STREQUAL "win32") # Useful common wx libs needed by almost all components. SET(wxWidgets_COMMON_LIBRARIES png tiff jpeg zlib regex expat) # DEPRECATED: Use FIND_PACKAGE(wxWidgets COMPONENTS mono) instead. IF(NOT wxWidgets_FIND_COMPONENTS) IF(wxWidgets_USE_MONOLITHIC) SET(wxWidgets_FIND_COMPONENTS mono) ELSE(wxWidgets_USE_MONOLITHIC) SET(wxWidgets_FIND_COMPONENTS core base) # this is default ENDIF(wxWidgets_USE_MONOLITHIC) ENDIF(NOT wxWidgets_FIND_COMPONENTS) # Add the common (usually required libs) unless # wxWidgets_EXCLUDE_COMMON_LIBRARIES has been set. IF(NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES) LIST(APPEND wxWidgets_FIND_COMPONENTS ${wxWidgets_COMMON_LIBRARIES}) ENDIF(NOT wxWidgets_EXCLUDE_COMMON_LIBRARIES) #------------------------------------------------------------------- # WIN32: Helper MACROS #------------------------------------------------------------------- # # Get filename components for a configuration. For example, # if _CONFIGURATION = mswunivud, then _UNV=univ, _UCD=u _DBG=d # if _CONFIGURATION = mswu, then _UNV="", _UCD=u _DBG="" # MACRO(WX_GET_NAME_COMPONENTS _CONFIGURATION _UNV _UCD _DBG) STRING(REGEX MATCH "univ" ${_UNV} "${_CONFIGURATION}") STRING(REGEX REPLACE "msw.*(u)[d]*$" "u" ${_UCD} "${_CONFIGURATION}") IF(${_UCD} STREQUAL ${_CONFIGURATION}) SET(${_UCD} "") ENDIF(${_UCD} STREQUAL ${_CONFIGURATION}) STRING(REGEX MATCH "d$" ${_DBG} "${_CONFIGURATION}") ENDMACRO(WX_GET_NAME_COMPONENTS) # # Find libraries associated to a configuration. # MACRO(WX_FIND_LIBS _UNV _UCD _DBG) DBG_MSG_V("m_unv = ${_UNV}") DBG_MSG_V("m_ucd = ${_UCD}") DBG_MSG_V("m_dbg = ${_DBG}") # FIXME: What if both regex libs are available. regex should be # found outside the loop and only wx${LIB}${_UCD}${_DBG}. # Find wxWidgets common libraries. FOREACH(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla) FIND_LIBRARY(WX_${LIB}${_DBG} NAMES wx${LIB}${_UCD}${_DBG} # for regex wx${LIB}${_DBG} PATHS ${WX_LIB_DIR} NO_DEFAULT_PATH ) MARK_AS_ADVANCED(WX_${LIB}${_DBG}) ENDFOREACH(LIB) # Find wxWidgets multilib base libraries. FIND_LIBRARY(WX_base${_DBG} NAMES wxbase29${_UCD}${_DBG} wxbase28${_UCD}${_DBG} wxbase27${_UCD}${_DBG} wxbase26${_UCD}${_DBG} wxbase25${_UCD}${_DBG} PATHS ${WX_LIB_DIR} NO_DEFAULT_PATH ) MARK_AS_ADVANCED(WX_base${_DBG}) FOREACH(LIB net odbc xml) FIND_LIBRARY(WX_${LIB}${_DBG} NAMES wxbase29${_UCD}${_DBG}_${LIB} wxbase28${_UCD}${_DBG}_${LIB} wxbase27${_UCD}${_DBG}_${LIB} wxbase26${_UCD}${_DBG}_${LIB} wxbase25${_UCD}${_DBG}_${LIB} PATHS ${WX_LIB_DIR} NO_DEFAULT_PATH ) MARK_AS_ADVANCED(WX_${LIB}${_DBG}) ENDFOREACH(LIB) # Find wxWidgets monolithic library. FIND_LIBRARY(WX_mono${_DBG} NAMES wxmsw${_UNV}29${_UCD}${_DBG} wxmsw${_UNV}28${_UCD}${_DBG} wxmsw${_UNV}27${_UCD}${_DBG} wxmsw${_UNV}26${_UCD}${_DBG} wxmsw${_UNV}25${_UCD}${_DBG} PATHS ${WX_LIB_DIR} NO_DEFAULT_PATH ) MARK_AS_ADVANCED(WX_mono${_DBG}) # Find wxWidgets multilib libraries. FOREACH(LIB core adv aui html media xrc dbgrid gl qa richtext stc ribbon propgrid webview) FIND_LIBRARY(WX_${LIB}${_DBG} NAMES wxmsw${_UNV}29${_UCD}${_DBG}_${LIB} wxmsw${_UNV}28${_UCD}${_DBG}_${LIB} wxmsw${_UNV}27${_UCD}${_DBG}_${LIB} wxmsw${_UNV}26${_UCD}${_DBG}_${LIB} wxmsw${_UNV}25${_UCD}${_DBG}_${LIB} PATHS ${WX_LIB_DIR} NO_DEFAULT_PATH ) MARK_AS_ADVANCED(WX_${LIB}${_DBG}) ENDFOREACH(LIB) ENDMACRO(WX_FIND_LIBS) # # Clear all library paths, so that FIND_LIBRARY refinds them. # # Clear a lib, reset its found flag, and mark as advanced. MACRO(WX_CLEAR_LIB _LIB) SET(${_LIB} "${_LIB}-NOTFOUND" CACHE FILEPATH "Cleared." FORCE) SET(${_LIB}_FOUND FALSE) MARK_AS_ADVANCED(${_LIB}) ENDMACRO(WX_CLEAR_LIB) # Clear all debug or release library paths (arguments are "d" or ""). MACRO(WX_CLEAR_ALL_LIBS _DBG) # Clear wxWidgets common libraries. FOREACH(LIB ${wxWidgets_COMMON_LIBRARIES} scintilla) WX_CLEAR_LIB(WX_${LIB}${_DBG}) ENDFOREACH(LIB) # Clear wxWidgets multilib base libraries. WX_CLEAR_LIB(WX_base${_DBG}) FOREACH(LIB net odbc xml) WX_CLEAR_LIB(WX_${LIB}${_DBG}) ENDFOREACH(LIB) # Clear wxWidgets monolithic library. WX_CLEAR_LIB(WX_mono${_DBG}) # Clear wxWidgets multilib libraries. FOREACH(LIB core adv aui html media xrc dbgrid gl qa richtext stc ribbon propgrid) WX_CLEAR_LIB(WX_${LIB}${_DBG}) ENDFOREACH(LIB) ENDMACRO(WX_CLEAR_ALL_LIBS) # Clear all wxWidgets debug libraries. MACRO(WX_CLEAR_ALL_DBG_LIBS) WX_CLEAR_ALL_LIBS("d") ENDMACRO(WX_CLEAR_ALL_DBG_LIBS) # Clear all wxWidgets release libraries. MACRO(WX_CLEAR_ALL_REL_LIBS) WX_CLEAR_ALL_LIBS("") ENDMACRO(WX_CLEAR_ALL_REL_LIBS) # # Set the wxWidgets_LIBRARIES variable. # Also, Sets output variable wxWidgets_FOUND to FALSE if it fails. # MACRO(WX_SET_LIBRARIES _LIBS _DBG) DBG_MSG_V("Looking for ${${_LIBS}}") IF(WX_USE_REL_AND_DBG) FOREACH(LIB ${${_LIBS}}) DBG_MSG_V("Searching for ${LIB} and ${LIB}d") DBG_MSG_V("WX_${LIB} : ${WX_${LIB}}") DBG_MSG_V("WX_${LIB}d : ${WX_${LIB}d}") IF(WX_${LIB} AND WX_${LIB}d) DBG_MSG_V("Found ${LIB} and ${LIB}d") LIST(APPEND wxWidgets_LIBRARIES debug ${WX_${LIB}d} optimized ${WX_${LIB}} ) ELSE(WX_${LIB} AND WX_${LIB}d) DBG_MSG_V("- not found due to missing WX_${LIB}=${WX_${LIB}} or WX_${LIB}d=${WX_${LIB}d}") SET(wxWidgets_FOUND FALSE) ENDIF(WX_${LIB} AND WX_${LIB}d) ENDFOREACH(LIB) ELSE(WX_USE_REL_AND_DBG) FOREACH(LIB ${${_LIBS}}) DBG_MSG_V("Searching for ${LIB}${_DBG}") DBG_MSG_V("WX_${LIB}${_DBG} : ${WX_${LIB}${_DBG}}") IF(WX_${LIB}${_DBG}) DBG_MSG_V("Found ${LIB}${_DBG}") LIST(APPEND wxWidgets_LIBRARIES ${WX_${LIB}${_DBG}}) ELSE(WX_${LIB}${_DBG}) DBG_MSG_V( "- not found due to missing WX_${LIB}${_DBG}=${WX_${LIB}${_DBG}}") SET(wxWidgets_FOUND FALSE) ENDIF(WX_${LIB}${_DBG}) ENDFOREACH(LIB) ENDIF(WX_USE_REL_AND_DBG) DBG_MSG_V("OpenGL") LIST(FIND ${_LIBS} gl WX_USE_GL) IF(NOT WX_USE_GL EQUAL -1) DBG_MSG_V("- is required.") LIST(APPEND wxWidgets_LIBRARIES opengl32 glu32) ENDIF(NOT WX_USE_GL EQUAL -1) LIST(APPEND wxWidgets_LIBRARIES winmm comctl32 rpcrt4 wsock32) ENDMACRO(WX_SET_LIBRARIES) #------------------------------------------------------------------- # WIN32: Start actual work. #------------------------------------------------------------------- # Look for an installation tree. FIND_PATH(wxWidgets_ROOT_DIR NAMES include/wx/wx.h PATHS $ENV{wxWidgets_ROOT_DIR} $ENV{WXWIN} "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\wxWidgets_is1;Inno Setup: App Path]" # WX 2.6.x C:/ D:/ $ENV{ProgramFiles} PATH_SUFFIXES wxWidgets-2.9.4 wxWidgets-2.9.3 wxWidgets-2.9.2 wxWidgets-2.9.1 wxWidgets-2.9.0 wxWidgets-2.8.9 wxWidgets-2.8.8 wxWidgets-2.8.7 wxWidgets-2.8.6 wxWidgets-2.8.5 wxWidgets-2.8.4 wxWidgets-2.8.3 wxWidgets-2.8.2 wxWidgets-2.8.1 wxWidgets-2.8.0 wxWidgets-2.7.4 wxWidgets-2.7.3 wxWidgets-2.7.2 wxWidgets-2.7.1 wxWidgets-2.7.0 wxWidgets-2.7.0-1 wxWidgets-2.6.4 wxWidgets-2.6.3 wxWidgets-2.6.2 wxWidgets-2.6.1 wxWidgets-2.5.4 wxWidgets-2.5.3 wxWidgets-2.5.2 wxWidgets-2.5.1 wxWidgets DOC "wxWidgets base/installation directory?" ) # If wxWidgets_ROOT_DIR changed, clear lib dir. IF(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR) SET(WX_ROOT_DIR ${wxWidgets_ROOT_DIR} CACHE INTERNAL "wxWidgets_ROOT_DIR") SET(wxWidgets_LIB_DIR "wxWidgets_LIB_DIR-NOTFOUND" CACHE PATH "Cleared." FORCE) ENDIF(NOT WX_ROOT_DIR STREQUAL wxWidgets_ROOT_DIR) IF(WX_ROOT_DIR) # Select one default tree inside the already determined wx tree. # Prefer static/shared order usually consistent with build # settings. IF(MINGW) SET(WX_LIB_DIR_PREFIX gcc) ELSE(MINGW) SET(WX_LIB_DIR_PREFIX vc) ENDIF(MINGW) IF(BUILD_SHARED_LIBS) FIND_PATH(wxWidgets_LIB_DIR NAMES msw/wx/setup.h mswd/wx/setup.h mswu/wx/setup.h mswud/wx/setup.h mswuniv/wx/setup.h mswunivd/wx/setup.h mswunivu/wx/setup.h mswunivud/wx/setup.h PATHS ${WX_ROOT_DIR}/lib/${WX_LIB_DIR_PREFIX}_dll # prefer shared ${WX_ROOT_DIR}/lib/${WX_LIB_DIR_PREFIX}_lib DOC "Path to wxWidgets libraries?" NO_DEFAULT_PATH ) ELSE(BUILD_SHARED_LIBS) FIND_PATH(wxWidgets_LIB_DIR NAMES msw/wx/setup.h mswd/wx/setup.h mswu/wx/setup.h mswud/wx/setup.h mswuniv/wx/setup.h mswunivd/wx/setup.h mswunivu/wx/setup.h mswunivud/wx/setup.h PATHS ${WX_ROOT_DIR}/lib/${WX_LIB_DIR_PREFIX}_lib # prefer static ${WX_ROOT_DIR}/lib/${WX_LIB_DIR_PREFIX}_dll DOC "Path to wxWidgets libraries?" NO_DEFAULT_PATH ) ENDIF(BUILD_SHARED_LIBS) # If wxWidgets_LIB_DIR changed, clear all libraries. IF(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR) SET(WX_LIB_DIR ${wxWidgets_LIB_DIR} CACHE INTERNAL "wxWidgets_LIB_DIR") WX_CLEAR_ALL_DBG_LIBS() WX_CLEAR_ALL_REL_LIBS() ENDIF(NOT WX_LIB_DIR STREQUAL wxWidgets_LIB_DIR) IF(WX_LIB_DIR) # If building shared libs, define WXUSINGDLL to use dllimport. IF(WX_LIB_DIR MATCHES ".*[dD][lL][lL].*") SET(wxWidgets_DEFINITIONS WXUSINGDLL) DBG_MSG_V("detected SHARED/DLL tree WX_LIB_DIR=${WX_LIB_DIR}") ENDIF(WX_LIB_DIR MATCHES ".*[dD][lL][lL].*") # Search for available configuration types. FOREACH(CFG mswunivud mswunivd mswud mswd mswunivu mswuniv mswu msw) SET(WX_${CFG}_FOUND FALSE) IF(EXISTS ${WX_LIB_DIR}/${CFG}) LIST(APPEND WX_CONFIGURATION_LIST ${CFG}) SET(WX_${CFG}_FOUND TRUE) SET(WX_CONFIGURATION ${CFG}) ENDIF(EXISTS ${WX_LIB_DIR}/${CFG}) ENDFOREACH(CFG) DBG_MSG_V("WX_CONFIGURATION_LIST=${WX_CONFIGURATION_LIST}") IF(WX_CONFIGURATION) SET(wxWidgets_FOUND TRUE) # If the selected configuration wasn't found force the default # one. Otherwise, use it but still force a refresh for # updating the doc string with the current list of available # configurations. IF(NOT WX_${wxWidgets_CONFIGURATION}_FOUND) SET(wxWidgets_CONFIGURATION ${WX_CONFIGURATION} CACHE STRING "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE) ELSE(NOT WX_${wxWidgets_CONFIGURATION}_FOUND) SET(wxWidgets_CONFIGURATION ${wxWidgets_CONFIGURATION} CACHE STRING "Set wxWidgets configuration (${WX_CONFIGURATION_LIST})" FORCE) ENDIF(NOT WX_${wxWidgets_CONFIGURATION}_FOUND) # If release config selected, and both release/debug exist. IF(WX_${wxWidgets_CONFIGURATION}d_FOUND) OPTION(wxWidgets_USE_REL_AND_DBG "Use release and debug configurations?" TRUE) SET(WX_USE_REL_AND_DBG ${wxWidgets_USE_REL_AND_DBG}) ELSE(WX_${wxWidgets_CONFIGURATION}d_FOUND) # If the option exists (already in cache), force it false. IF(wxWidgets_USE_REL_AND_DBG) SET(wxWidgets_USE_REL_AND_DBG FALSE CACHE BOOL "No ${wxWidgets_CONFIGURATION}d found." FORCE) ENDIF(wxWidgets_USE_REL_AND_DBG) SET(WX_USE_REL_AND_DBG FALSE) ENDIF(WX_${wxWidgets_CONFIGURATION}d_FOUND) # Get configuration parameters from the name. WX_GET_NAME_COMPONENTS(${wxWidgets_CONFIGURATION} UNV UCD DBG) # Set wxWidgets lib setup include directory. IF(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h) SET(wxWidgets_INCLUDE_DIRS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}) ELSE(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h) DBG_MSG("wxWidgets_FOUND FALSE because ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h does not exists.") SET(wxWidgets_FOUND FALSE) ENDIF(EXISTS ${WX_LIB_DIR}/${wxWidgets_CONFIGURATION}/wx/setup.h) # Set wxWidgets main include directory. IF(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h) LIST(APPEND wxWidgets_INCLUDE_DIRS ${WX_ROOT_DIR}/include) ELSE(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h) DBG_MSG("wxWidgets_FOUND FALSE because WX_ROOT_DIR=${WX_ROOT_DIR} has no ${WX_ROOT_DIR}/include/wx/wx.h") SET(wxWidgets_FOUND FALSE) ENDIF(EXISTS ${WX_ROOT_DIR}/include/wx/wx.h) # Find wxWidgets libraries. WX_FIND_LIBS("${UNV}" "${UCD}" "${DBG}") IF(WX_USE_REL_AND_DBG) WX_FIND_LIBS("${UNV}" "${UCD}" "d") ENDIF(WX_USE_REL_AND_DBG) # Settings for requested libs (i.e., include dir, libraries, etc.). WX_SET_LIBRARIES(wxWidgets_FIND_COMPONENTS "${DBG}") # Add necessary definitions for unicode builds IF("${UCD}" STREQUAL "u") LIST(APPEND wxWidgets_DEFINITIONS UNICODE _UNICODE) ENDIF("${UCD}" STREQUAL "u") # Add necessary definitions for debug builds SET(wxWidgets_DEFINITIONS_DEBUG _DEBUG __WXDEBUG__) ENDIF(WX_CONFIGURATION) ENDIF(WX_LIB_DIR) ENDIF(WX_ROOT_DIR) #===================================================================== # UNIX_FIND_STYLE #===================================================================== ELSE(wxWidgets_FIND_STYLE STREQUAL "win32") IF(wxWidgets_FIND_STYLE STREQUAL "unix") #----------------------------------------------------------------- # UNIX: Helper MACROS #----------------------------------------------------------------- # # Set the default values based on "wx-config --selected-config". # MACRO(WX_CONFIG_SELECT_GET_DEFAULT) EXECUTE_PROCESS( COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" ${wxWidgets_CONFIG_OPTIONS} --selected-config OUTPUT_VARIABLE _wx_selected_config RESULT_VARIABLE _wx_result ERROR_QUIET ) IF(_wx_result EQUAL 0) FOREACH(_opt_name debug static unicode universal) STRING(TOUPPER ${_opt_name} _upper_opt_name) IF(_wx_selected_config MATCHES ".*${_opt_name}.*") SET(wxWidgets_DEFAULT_${_upper_opt_name} ON) ELSE(_wx_selected_config MATCHES ".*${_opt_name}.*") SET(wxWidgets_DEFAULT_${_upper_opt_name} OFF) ENDIF(_wx_selected_config MATCHES ".*${_opt_name}.*") ENDFOREACH(_opt_name) ELSE(_wx_result EQUAL 0) FOREACH(_upper_opt_name DEBUG STATIC UNICODE UNIVERSAL) SET(wxWidgets_DEFAULT_${_upper_opt_name} OFF) ENDFOREACH(_upper_opt_name) ENDIF(_wx_result EQUAL 0) ENDMACRO(WX_CONFIG_SELECT_GET_DEFAULT) # # Query a boolean configuration option to determine if the system # has both builds available. If so, provide the selection option # to the user. # MACRO(WX_CONFIG_SELECT_QUERY_BOOL _OPT_NAME _OPT_HELP) EXECUTE_PROCESS( COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=yes RESULT_VARIABLE _wx_result_yes OUTPUT_QUIET ERROR_QUIET ) EXECUTE_PROCESS( COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" ${wxWidgets_CONFIG_OPTIONS} --${_OPT_NAME}=no RESULT_VARIABLE _wx_result_no OUTPUT_QUIET ERROR_QUIET ) STRING(TOUPPER ${_OPT_NAME} _UPPER_OPT_NAME) IF(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0) OPTION(wxWidgets_USE_${_UPPER_OPT_NAME} ${_OPT_HELP} ${wxWidgets_DEFAULT_${_UPPER_OPT_NAME}}) ELSE(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0) # If option exists (already in cache), force to available one. IF(DEFINED wxWidgets_USE_${_UPPER_OPT_NAME}) IF(_wx_result_yes EQUAL 0) SET(wxWidgets_USE_${_UPPER_OPT_NAME} ON CACHE BOOL ${_OPT_HELP} FORCE) ELSE(_wx_result_yes EQUAL 0) SET(wxWidgets_USE_${_UPPER_OPT_NAME} OFF CACHE BOOL ${_OPT_HELP} FORCE) ENDIF(_wx_result_yes EQUAL 0) ENDIF(DEFINED wxWidgets_USE_${_UPPER_OPT_NAME}) ENDIF(_wx_result_yes EQUAL 0 AND _wx_result_no EQUAL 0) ENDMACRO(WX_CONFIG_SELECT_QUERY_BOOL) # # Set wxWidgets_SELECT_OPTIONS to wx-config options for selecting # among multiple builds. # MACRO(WX_CONFIG_SELECT_SET_OPTIONS) SET(wxWidgets_SELECT_OPTIONS ${wxWidgets_CONFIG_OPTIONS}) FOREACH(_opt_name debug static unicode universal) STRING(TOUPPER ${_opt_name} _upper_opt_name) IF(DEFINED wxWidgets_USE_${_upper_opt_name}) IF(wxWidgets_USE_${_upper_opt_name}) LIST(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=yes) ELSE(wxWidgets_USE_${_upper_opt_name}) LIST(APPEND wxWidgets_SELECT_OPTIONS --${_opt_name}=no) ENDIF(wxWidgets_USE_${_upper_opt_name}) ENDIF(DEFINED wxWidgets_USE_${_upper_opt_name}) ENDFOREACH(_opt_name) ENDMACRO(WX_CONFIG_SELECT_SET_OPTIONS) #----------------------------------------------------------------- # UNIX: Start actual work. #----------------------------------------------------------------- # Support cross-compiling, only search in the target platform. FIND_PROGRAM(wxWidgets_CONFIG_EXECUTABLE wx-config ONLY_CMAKE_FIND_ROOT_PATH ) IF(wxWidgets_CONFIG_EXECUTABLE) SET(wxWidgets_FOUND TRUE) # get defaults based on "wx-config --selected-config" WX_CONFIG_SELECT_GET_DEFAULT() # for each option: if both builds are available, provide option WX_CONFIG_SELECT_QUERY_BOOL(debug "Use debug build?") WX_CONFIG_SELECT_QUERY_BOOL(unicode "Use unicode build?") WX_CONFIG_SELECT_QUERY_BOOL(universal "Use universal build?") WX_CONFIG_SELECT_QUERY_BOOL(static "Link libraries statically?") # process selection to set wxWidgets_SELECT_OPTIONS WX_CONFIG_SELECT_SET_OPTIONS() DBG_MSG("wxWidgets_SELECT_OPTIONS=${wxWidgets_SELECT_OPTIONS}") # run the wx-config program to get cxxflags EXECUTE_PROCESS( COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" ${wxWidgets_SELECT_OPTIONS} --cxxflags OUTPUT_VARIABLE wxWidgets_CXX_FLAGS RESULT_VARIABLE RET ERROR_QUIET ) IF(RET EQUAL 0) STRING(STRIP "${wxWidgets_CXX_FLAGS}" wxWidgets_CXX_FLAGS) SEPARATE_ARGUMENTS(wxWidgets_CXX_FLAGS) DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}") # parse definitions from cxxflags; # drop -D* from CXXFLAGS and the -D prefix STRING(REGEX MATCHALL "-D[^;]+" wxWidgets_DEFINITIONS "${wxWidgets_CXX_FLAGS}") STRING(REGEX REPLACE "-D[^;]+(;|$)" "" wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}") STRING(REGEX REPLACE ";$" "" wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}") STRING(REPLACE "-D" "" wxWidgets_DEFINITIONS "${wxWidgets_DEFINITIONS}") # parse include dirs from cxxflags; drop -I prefix STRING(REGEX MATCHALL "-I[^;]+" wxWidgets_INCLUDE_DIRS "${wxWidgets_CXX_FLAGS}") STRING(REGEX REPLACE "-I[^;]+;" "" wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}") STRING(REPLACE "-I" "" wxWidgets_INCLUDE_DIRS "${wxWidgets_INCLUDE_DIRS}") DBG_MSG_V("wxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}") DBG_MSG_V("wxWidgets_INCLUDE_DIRS=${wxWidgets_INCLUDE_DIRS}") DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}") ELSE(RET EQUAL 0) SET(wxWidgets_FOUND FALSE) DBG_MSG_V( "${wxWidgets_CONFIG_EXECUTABLE} --cxxflags FAILED with RET=${RET}") ENDIF(RET EQUAL 0) # run the wx-config program to get the libs # - NOTE: wx-config doesn't verify that the libs requested exist # it just produces the names. Maybe a TRY_COMPILE would # be useful here... STRING(REPLACE ";" "," wxWidgets_FIND_COMPONENTS "${wxWidgets_FIND_COMPONENTS}") EXECUTE_PROCESS( COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}" ${wxWidgets_SELECT_OPTIONS} --libs ${wxWidgets_FIND_COMPONENTS} OUTPUT_VARIABLE wxWidgets_LIBRARIES RESULT_VARIABLE RET ERROR_QUIET ) IF(RET EQUAL 0) STRING(STRIP "${wxWidgets_LIBRARIES}" wxWidgets_LIBRARIES) SEPARATE_ARGUMENTS(wxWidgets_LIBRARIES) STRING(REPLACE "-framework;" "-framework " wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") STRING(REPLACE "-arch;" "-arch " wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") STRING(REPLACE "-isysroot;" "-isysroot " wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}") # extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES) STRING(REGEX MATCHALL "-L[^;]+" wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARIES}") STRING(REPLACE "-L" "" wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARY_DIRS}") DBG_MSG_V("wxWidgets_LIBRARIES=${wxWidgets_LIBRARIES}") DBG_MSG_V("wxWidgets_LIBRARY_DIRS=${wxWidgets_LIBRARY_DIRS}") ELSE(RET EQUAL 0) SET(wxWidgets_FOUND FALSE) DBG_MSG("${wxWidgets_CONFIG_EXECUTABLE} --libs ${wxWidgets_FIND_COMPONENTS} FAILED with RET=${RET}") ENDIF(RET EQUAL 0) ENDIF(wxWidgets_CONFIG_EXECUTABLE) #===================================================================== # Neither UNIX_FIND_STYLE, nor WIN32_FIND_STYLE #===================================================================== ELSE(wxWidgets_FIND_STYLE STREQUAL "unix") IF(NOT wxWidgets_FIND_QUIETLY) MESSAGE(STATUS "${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): \n" " Platform unknown/unsupported. It's neither WIN32 nor UNIX " "find style." ) ENDIF(NOT wxWidgets_FIND_QUIETLY) ENDIF(wxWidgets_FIND_STYLE STREQUAL "unix") ENDIF(wxWidgets_FIND_STYLE STREQUAL "win32") # Debug output: DBG_MSG("wxWidgets_FOUND : ${wxWidgets_FOUND}") DBG_MSG("wxWidgets_INCLUDE_DIRS : ${wxWidgets_INCLUDE_DIRS}") DBG_MSG("wxWidgets_LIBRARY_DIRS : ${wxWidgets_LIBRARY_DIRS}") DBG_MSG("wxWidgets_LIBRARIES : ${wxWidgets_LIBRARIES}") DBG_MSG("wxWidgets_CXX_FLAGS : ${wxWidgets_CXX_FLAGS}") DBG_MSG("wxWidgets_USE_FILE : ${wxWidgets_USE_FILE}") #===================================================================== #===================================================================== #INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) FIND_PACKAGE_HANDLE_STANDARD_ARGS(wxWidgets DEFAULT_MSG wxWidgets_FOUND) # Maintain consistency with all other variables. SET(wxWidgets_FOUND ${WXWIDGETS_FOUND}) #===================================================================== # Macros for use in wxWidgets apps. # - This module will not fail to find wxWidgets based on the code # below. Hence, it's required to check for validity of: # # wxWidgets_wxrc_EXECUTABLE #===================================================================== # Resource file compiler. FIND_PROGRAM(wxWidgets_wxrc_EXECUTABLE wxrc ${wxWidgets_ROOT_DIR}/utils/wxrc/vc_msw ) # # WX_SPLIT_ARGUMENTS_ON( ...) # # Sets and to contain arguments to the left and right, # respectively, of . # # Example usage: # FUNCTION(WXWIDGETS_ADD_RESOURCES outfiles) # WX_SPLIT_ARGUMENTS_ON(OPTIONS wxrc_files wxrc_options ${ARGN}) # ... # ENDFUNCTION(WXWIDGETS_ADD_RESOURCES) # # WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o file.C) # # NOTE: This is a generic piece of code that should be renamed to # SPLIT_ARGUMENTS_ON and put in a file serving the same purpose as # FindPackageStandardArgs.cmake. At the time of this writing # FindQt4.cmake has a QT4_EXTRACT_OPTIONS, which I basically copied # here a bit more generalized. So, there are already two find modules # using this approach. # FUNCTION(WX_SPLIT_ARGUMENTS_ON _keyword _leftvar _rightvar) # FIXME: Document that the input variables will be cleared. #LIST(APPEND ${_leftvar} "") #LIST(APPEND ${_rightvar} "") SET(${_leftvar} "") SET(${_rightvar} "") SET(_doing_right FALSE) FOREACH(element ${ARGN}) IF("${element}" STREQUAL "${_keyword}") SET(_doing_right TRUE) ELSE("${element}" STREQUAL "${_keyword}") IF(_doing_right) LIST(APPEND ${_rightvar} "${element}") ELSE(_doing_right) LIST(APPEND ${_leftvar} "${element}") ENDIF(_doing_right) ENDIF("${element}" STREQUAL "${_keyword}") ENDFOREACH(element) SET(${_leftvar} ${${_leftvar}} PARENT_SCOPE) SET(${_rightvar} ${${_rightvar}} PARENT_SCOPE) ENDFUNCTION(WX_SPLIT_ARGUMENTS_ON) # # WX_GET_DEPENDENCIES_FROM_XML( # # # # # # ) # # FIXME: Add documentation here... # FUNCTION(WX_GET_DEPENDENCIES_FROM_XML _depends _match_patt _clean_patt _xml_contents _depends_path ) STRING(REGEX MATCHALL ${_match_patt} dep_file_list "${${_xml_contents}}" ) FOREACH(dep_file ${dep_file_list}) STRING(REGEX REPLACE ${_clean_patt} "" dep_file "${dep_file}") # make the file have an absolute path IF(NOT IS_ABSOLUTE "${dep_file}") SET(dep_file "${${_depends_path}}/${dep_file}") ENDIF(NOT IS_ABSOLUTE "${dep_file}") # append file to dependency list LIST(APPEND ${_depends} "${dep_file}") ENDFOREACH(dep_file) SET(${_depends} ${${_depends}} PARENT_SCOPE) ENDFUNCTION(WX_GET_DEPENDENCIES_FROM_XML) # # WXWIDGETS_ADD_RESOURCES( # OPTIONS [NO_CPP_CODE]) # # Adds a custom command for resource file compilation of the # and appends the output files to . # # Example usages: # WXWIDGETS_ADD_RESOURCES(sources xrc/main_frame.xrc) # WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o altname.cxx) # FUNCTION(WXWIDGETS_ADD_RESOURCES _outfiles) WX_SPLIT_ARGUMENTS_ON(OPTIONS rc_file_list rc_options ${ARGN}) # Parse files for dependencies. SET(rc_file_list_abs "") SET(rc_depends "") FOREACH(rc_file ${rc_file_list}) GET_FILENAME_COMPONENT(depends_path ${rc_file} PATH) GET_FILENAME_COMPONENT(rc_file_abs ${rc_file} ABSOLUTE) LIST(APPEND rc_file_list_abs "${rc_file_abs}") # All files have absolute paths or paths relative to the location # of the rc file. FILE(READ "${rc_file_abs}" rc_file_contents) # get bitmap/bitmap2 files WX_GET_DEPENDENCIES_FROM_XML( rc_depends "]*>" rc_file_contents depends_path ) # get url files WX_GET_DEPENDENCIES_FROM_XML( rc_depends "]*>" rc_file_contents depends_path ) # get wxIcon files WX_GET_DEPENDENCIES_FROM_XML( rc_depends "]*class=\"wxIcon\"[^<]+" "^]*>" rc_file_contents depends_path ) ENDFOREACH(rc_file) # # Parse options. # # If NO_CPP_CODE option specified, then produce .xrs file rather # than a .cpp file (i.e., don't add the default --cpp-code option). LIST(FIND rc_options NO_CPP_CODE index) IF(index EQUAL -1) LIST(APPEND rc_options --cpp-code) # wxrc's default output filename for cpp code. SET(outfile resource.cpp) ELSE(index EQUAL -1) LIST(REMOVE_AT rc_options ${index}) # wxrc's default output filename for xrs file. SET(outfile resource.xrs) ENDIF(index EQUAL -1) # Get output name for use in ADD_CUSTOM_COMMAND. # - short option scanning LIST(FIND rc_options -o index) IF(NOT index EQUAL -1) MATH(EXPR filename_index "${index} + 1") LIST(GET rc_options ${filename_index} outfile) #LIST(REMOVE_AT rc_options ${index} ${filename_index}) ENDIF(NOT index EQUAL -1) # - long option scanning STRING(REGEX MATCH "--output=[^;]*" outfile_opt "${rc_options}") IF(outfile_opt) STRING(REPLACE "--output=" "" outfile "${outfile_opt}") ENDIF(outfile_opt) #STRING(REGEX REPLACE "--output=[^;]*;?" "" rc_options "${rc_options}") #STRING(REGEX REPLACE ";$" "" rc_options "${rc_options}") IF(NOT IS_ABSOLUTE "${outfile}") SET(outfile "${CMAKE_CURRENT_BINARY_DIR}/${outfile}") ENDIF(NOT IS_ABSOLUTE "${outfile}") ADD_CUSTOM_COMMAND( OUTPUT "${outfile}" COMMAND ${wxWidgets_wxrc_EXECUTABLE} ${rc_options} ${rc_file_list_abs} DEPENDS ${rc_file_list_abs} ${rc_depends} ) # Add generated header to output file list. LIST(FIND rc_options -e short_index) LIST(FIND rc_options --extra-cpp-code long_index) IF(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1) GET_FILENAME_COMPONENT(outfile_ext ${outfile} EXT) STRING(REPLACE "${outfile_ext}" ".h" outfile_header "${outfile}") LIST(APPEND ${_outfiles} "${outfile_header}") SET_SOURCE_FILES_PROPERTIES( "${outfile_header}" PROPERTIES GENERATED TRUE ) ENDIF(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1) # Add generated file to output file list. LIST(APPEND ${_outfiles} "${outfile}") SET(${_outfiles} ${${_outfiles}} PARENT_SCOPE) ENDFUNCTION(WXWIDGETS_ADD_RESOURCES) springlobby-0.169/cmake/SpringLobbyMacros.cmake0000600000176000000410000000226412105760277023121 0ustar buildbotwww-data00000000000000MACRO(CreateResourceCompileCommand out_var dirIn fileIn fileOut) # SET( fileIn "${dirIn}/${fileIn}" ) SET( fileOut "${CMAKE_CURRENT_BINARY_DIR}/${fileOut}" ) ADD_CUSTOM_COMMAND( OUTPUT "${fileOut}" DEPENDS "${fileIn}" COMMAND "${CMAKE_RC_COMPILER}" "-I${dirIn}" "-I${wxWidgets_RC_DIR}" "-i${CMAKE_CURRENT_SOURCE_DIR}/${fileIn}" "-o" "${fileOut}" "-v" ) SET_SOURCE_FILES_PROPERTIES(${fileOut} PROPERTIES GENERATED TRUE OBJECT_DEPENDS ${fileIn} ) SET(${out_var} "${fileOut}") ENDMACRO (CreateResourceCompileCommand out_var dirIn fileIn fileOut) function (add_sources varname ) foreach (_src ${ARGN}) list (APPEND tmp "${CMAKE_CURRENT_SOURCE_DIR}/${_src}") endforeach() set (${varname} ${${varname}} ${tmp} CACHE INTERNAL "${varname}" FORCE) endfunction() function (add_to_global varname ) foreach (_src ${ARGN}) list (APPEND tmp "${_src}") endforeach() set (${varname} ${${varname}} ${ARGN} CACHE INTERNAL "${varname}" FORCE) endfunction() function (clear varname) set (${varname} "" CACHE INTERNAL "" FORCE) endfunction() macro(mylink var) foreach( lib ${var}) link_directories( ${lib} ) endforeach() endmacro(mylink) springlobby-0.169/cmake/Toolchain-mingw32.cmake0000600000176000000410000000465312105760277022732 0ustar buildbotwww-data00000000000000# the name of the target operating system SET(CMAKE_SYSTEM_NAME Windows) # only use static libs for linking set(CMAKE_FIND_LIBRARY_SUFFIXES .a ) #set(CMAKE_SHARED_LIBRARY_PREFIX "") set(CMAKE_SHARED_MODULE_SUFFIX "") # which compilers to use for C and C++ SET(CMAKE_C_COMPILER /usr/bin/i586-mingw32msvc-gcc) SET(CMAKE_CXX_COMPILER /usr/bin/i586-mingw32msvc-g++) SET(CMAKE_RC_COMPILER /usr/bin/i586-mingw32msvc-windres) SET( MINGWLIBS /opt/mingw32/ CACHE INTERNAL MINGWLIB_DUMMMY_DIR FORCE ) SET( BUILD_SHARED_LIBS OFF CACHE INTERNAL MINGWLIB_DUMMMY_DIR FORCE ) SET(CMAKE_FIND_ROOT_PATH /opt/mingw32 ) SET( wxWidgets_CONFIG_EXECUTABLE /opt/mingw32/bin/wx-config ) SET( wxWidgets_LIBRARIES wx_baseu_net-2.8-i586-pc-mingw32.dll wx_mswu_core-2.8-i586-pc-mingw32.dll wx_baseu-2.8-i586-pc-mingw32.dll wx_mswu_adv-2.8-i586-pc-mingw32.dll wx_mswu_aui-2.8-i586-pc-mingw32.dll wx_mswu_html-2.8-i586-pc-mingw32.dll wx_mswu_gl-2.8-i586-pc-mingw32.dll wx_baseu_xml-2.8-i586-pc-mingw32.dll wx_mswu_qa-2.8-i586-pc-mingw32.dll wx_mswu_richtext-2.8-i586-pc-mingw32.dll wx_mswu_xrc-2.8-i586-pc-mingw32.dll) SET( wxWidgets_INCLUDE_DIRS /opt/mingw32/include/wx-2.8/ /opt/mingw32/lib/wx/include/i586-pc-mingw32-msw-unicode-release-2.8/) SET( wxWidgets_LIB_DIR /opt/mingw32/lib ) SET( wxWidgets_CONFIGURATION mswu ) SET( CMAKE_VERBOSE_MAKEFILE OFF ) SET( wxWidgets_RC_DIR /opt/mingw32/include/wx-2.8 ) #otherwise cmake finds linux lib for win... SET( ENV{OPENALDIR} /opt/mingw32/ ) SET( OPENAL_LIBRARY OpenAL32 ) SET( OPENAL_INCLUDE_DIR /opt/mingw32/include/AL ) SET( Boost_LIBRARIES boost_thread-gcc44-mt-1_41 boost_filesystem-gcc44-mt-1_41 boost_system-gcc44-mt-1_41 ) SET( boost_LIB_DIR /opt/mingw32/lib ) SET( boost_INCLUDE_DIR /opt/mingw32/include ) SET( WINDRES /usr/bin/i586-mingw32msvc-windres ) link_directories( /opt/mingw32/lib ) INCLUDE_DIRECTORIES(/opt/mingw32/include ) INCLUDE_DIRECTORIES(/opt/mingw32/include/drmingw/include ) SET( PKG_CONFIG_EXECUTABLE /opt/mingw32/bin/pkg-config ) ADD_DEFINITIONS( -DCURL_STATICLIB -DWXUSINGDLL -D__WXMSW__ -mthreads) SET( LOCALE_INSTALL_DIR "${CMAKE_BINARY_DIR}/locale" CACHE STRING "message catalogs will installed here" FORCE ) SET( CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}" CACHE STRING "install prefix" FORCE ) SET( CURL_CFLAGS "-I/opt/mingw32/include" ) SET( CURL_STATIC_LIBRARY_DIRS "/opt/mingw32/lib") SET( CURL_STATIC_LDFLAGS "-L/opt/mingw32/lib;-lcurl;-lws2_32") SET( CURL_INCLUDE_DIR "/opt/mingw32/include") springlobby-0.169/cmake/Toolchain-mingw32_debug.cmake0000600000176000000410000000375312105760277024100 0ustar buildbotwww-data00000000000000# the name of the target operating system SET(CMAKE_SYSTEM_NAME Windows) # which compilers to use for C and C++ SET(CMAKE_C_COMPILER i586-mingw32msvc-gcc) SET(CMAKE_CXX_COMPILER i586-mingw32msvc-g++) SET( wxWidgets_ROOT_DIR /var/lib/buildbot/lib/mingw/wx/2.8/ ) # here is the target environment located SET(CMAKE_FIND_ROOT_PATH /usr/bin/i586-mingw32msvc /var/lib/buildbot/lib/mingw /var/lib/buildbot/lib/mingw/wx/2.8/include/wx-2.8) # adjust the default behaviour of the FIND_XXX() commands: # search headers and libraries in the target environment, search # programs in the host environment # SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) # SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) SET( wxWidgets_CONFIG_EXECUTABLE /var/lib/buildbot/lib/mingw/wx/2.8/bin/wx-config ) SET( wxWidgets_LIBRARIES wx_baseud-2.8-i586-mingw32msvc wx_mswud_core-2.8-i586-mingw32msvc wx_baseud_net-2.8-i586-mingw32msvc wx_mswud_adv-2.8-i586-mingw32msvc wx_mswud_aui-2.8-i586-mingw32msvc wx_mswud_html-2.8-i586-mingw32msvc wx_mswud_qa-2.8-i586-mingw32msvc wx_baseud_xml-2.8-i586-mingw32msvc) SET( wxWidgets_INCLUDE_DIRS /var/lib/buildbot/lib/mingw/wx/2.8/include/wx-2.8 /var/lib/buildbot/lib/mingw/wx/2.8/lib/wx/include/i586-mingw32msvc-msw-unicode-debug-2.8/) SET( wxWidgets_LIB_DIR /var/lib/buildbot/lib/mingw/wx/2.8/lib ) SET( wxWidgets_CONFIGURATION mswu ) SET( CMAKE_VERBOSE_MAKEFILE ON ) SET( sdl_INCLUDE_DIR /var/lib/buildbot/lib/mingw/include/SDL ) SET( wxWidgets_RC_DIR /var/lib/buildbot/lib/mingw/wx/2.8/include/wx-2.8 ) SET( Boost_LIBRARIES libboost_thread-gcc42-mt-d-1_41.a boost_filesystem-gcc42-mt-d-1_41 boost_date_time-gcc42-mt-d-1_41 boost_system-gcc42-mt-d-1_41 ) SET( boost_LIB_DIR /var/lib/buildbot/lib/mingw/lib ) SET( boost_INCLUDE_DIR /var/lib/buildbot/lib/mingw/include ) link_directories( /var/lib/buildbot/lib/mingw/lib ) INCLUDE_DIRECTORIES(/var/lib/buildbot/lib/mingw/include /var/lib/buildbot/lib/mingw/include/zlib/ ) ADD_DEFINITIONS( -DWXUSINGDLL -D__WXMSW__) springlobby-0.169/cmake/Toolchain-mingw32_new.cmake0000600000176000000410000000517312105760277023601 0ustar buildbotwww-data00000000000000# the name of the target operating system SET(CMAKE_SYSTEM_NAME Windows) # which compilers to use for C and C++ SET(CMAKE_C_COMPILER /opt/mingw32/bin/i586-pc-mingw32-gcc) SET(CMAKE_CXX_COMPILER /opt/mingw32/bin/i586-pc-mingw32-g++) SET( wxWidgets_ROOT_DIR /opt/mingw32/ ) # here is the target environment located #this is just a compat setting for pr-downloader SET( MINGWLIBS /opt/mingw32/ CACHE INTERNAL MINGWLIB_DUMMMY_DIR FORCE ) SET( BUILD_SHARED_LIBS OFF CACHE INTERNAL MINGWLIB_DUMMMY_DIR FORCE ) # adjust the default behaviour of the FIND_XXX() commands: # search headers and libraries in the target environment, search # programs in the host environment # SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) # SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) SET( wxWidgets_CONFIG_EXECUTABLE /opt/mingw32/bin/wx-config ) SET( wxWidgets_LIBRARIES wx_baseu_net-2.8-i586-pc-mingw32.dll wx_mswu_core-2.8-i586-pc-mingw32.dll wx_baseu-2.8-i586-pc-mingw32.dll wx_mswu_adv-2.8-i586-pc-mingw32.dll wx_mswu_aui-2.8-i586-pc-mingw32.dll wx_mswu_html-2.8-i586-pc-mingw32.dll wx_mswu_gl-2.8-i586-pc-mingw32.dll wx_baseu_xml-2.8-i586-pc-mingw32.dll wx_mswu_qa-2.8-i586-pc-mingw32.dll wx_mswu_richtext-2.8-i586-pc-mingw32.dll wx_mswu_xrc-2.8-i586-pc-mingw32.dll) SET( wxWidgets_INCLUDE_DIRS /opt/mingw32/include/wx-2.8/ /opt/mingw32/lib/wx/include/i586-pc-mingw32-msw-unicode-release-2.8/) SET( wxWidgets_LIB_DIR /opt/mingw32/lib ) SET( wxWidgets_CONFIGURATION mswu ) SET( CMAKE_VERBOSE_MAKEFILE OFF ) SET( wxWidgets_RC_DIR /opt/mingw32/include/wx-2.8 ) #otherwise cmake finds linux lib for win... SET( ENV{OPENALDIR} /opt/mingw32/ ) SET( OPENAL_LIBRARY OpenAL32 ) SET( OPENAL_INCLUDE_DIR /opt/mingw32/include/AL ) SET( Boost_LIBRARIES boost_thread-gcc44-mt-1_41 boost_filesystem-gcc44-mt-1_41 boost_system-gcc44-mt-1_41 ) SET( boost_LIB_DIR /opt/mingw32/lib ) SET( boost_INCLUDE_DIR /opt/mingw32/include ) SET( WINDRES /opt/mingw32/bin/i586-pc-mingw32-windres ) link_directories( /opt/mingw32/lib ) INCLUDE_DIRECTORIES(/opt/mingw32/include ) INCLUDE_DIRECTORIES(/opt/mingw32/include/drmingw/include ) SET( PKG_CONFIG_EXECUTABLE /opt/mingw32/bin/pkg-config ) ADD_DEFINITIONS( -DCURL_STATICLIB -DWXUSINGDLL -D__WXMSW__ -mthreads) SET( LOCALE_INSTALL_DIR "${CMAKE_BINARY_DIR}/locale" CACHE STRING "message catalogs will installed here" FORCE ) SET( CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}" CACHE STRING "install prefix" FORCE ) SET( CURL_CFLAGS "-I/opt/mingw32/include" ) SET( CURL_STATIC_LIBRARY_DIRS "/opt/mingw32/lib") SET( CURL_STATIC_LDFLAGS "-L/opt/mingw32/lib;-lcurl;-lws2_32") SET( CURL_INCLUDE_DIR "/opt/mingw32/include") springlobby-0.169/cmake/Toolchain-mingw32_static.cmake0000600000176000000410000000031212106236467024265 0ustar buildbotwww-data00000000000000SET( LOCALE_INSTALL_DIR "${CMAKE_BINARY_DIR}/locale" CACHE STRING "message catalogs will installed here" FORCE ) SET( CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}" CACHE STRING "install prefix" FORCE ) springlobby-0.169/cmake/Toolchain-osx.cmake0000600000176000000410000000003712105760277022245 0ustar buildbotwww-data00000000000000SET( ENABLE_DEBUG_REPORT OFF ) springlobby-0.169/cmake/compat_flags.cmake0000600000176000000410000000457412105760277022167 0ustar buildbotwww-data00000000000000Include(TestCXXAcceptsFlag) execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) # try to use compiler flag -std=c++11 include(TestCXXAcceptsFlag) MACRO(AddSTDFlag FLAG) set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} ${FLAG} ") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG} ") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${FLAG} ") set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${FLAG} ") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${FLAG} ") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${FLAG} ") set(CXX_STD0X_FLAGS "${FLAG}" ) ENDMACRO(AddSTDFlag FLAG) # newer c++ standards are badly supported, disable it #if(WIN32) # CHECK_CXX_ACCEPTS_FLAG("-std=gnu++0x" CXX_FLAG_GXX0X) # if(CXX_FLAG_GXX0X) # AddSTDFlag("-std=gnu++0x") # endif(CXX_FLAG_GXX0X) #else(WIN32) # CHECK_CXX_ACCEPTS_FLAG("-std=c++11" CXX_FLAG_CXX11) # if(CXX_FLAG_CXX11) # AddSTDFlag("-std=c++11") # else() # # try to use compiler flag -std=c++0x for older compilers # CHECK_CXX_ACCEPTS_FLAG("-std=c++0x" CXX_FLAG_CXX0X) # if(CXX_FLAG_CXX0X) # AddSTDFlag("-std=c++0x") # endif(CXX_FLAG_CXX0X) # endif(CXX_FLAG_CXX11) #endif(WIN32) #if(NOT CXX_STD0X_FLAGS) # message(FATAL_ERROR "you need a c++11 compatible compiler") #endif() If(NOT DEFINED LTO_FLAGS) Set(LTO_FLAGS "") Set(LTO FALSE CACHE BOOL "Link Time Optimizations (LTO)") If (LTO) CHECK_CXX_ACCEPTS_FLAG("-flto" HAS_LTO_FLAG) If (HAS_LTO_FLAG) Set(LTO_FLAGS "${LTO_FLAGS} -flto") Else (HAS_LTO_FLAG) Set(LTO_FLAGS "${LTO_FLAGS} -flto") EndIf (HAS_LTO_FLAG) EndIf (LTO) Set(LTO_WHOPR FALSE CACHE BOOL "Link Time Optimizations (LTO) - Whole program optimizer (WHOPR)") If (LTO_WHOPR) CHECK_CXX_ACCEPTS_FLAG("-fwhopr" HAS_LTO_WHOPR_FLAG) If (HAS_LTO_WHOPR_FLAG) Set(LTO_FLAGS "${LTO_FLAGS} -fwhopr") EndIf (HAS_LTO_WHOPR_FLAG) EndIf (LTO_WHOPR) If (LTO AND LTO_WHOPR) Message( FATAL_ERROR "LTO and LTO_WHOPR are mutually exclusive, please enable only one at a time." ) EndIf (LTO AND LTO_WHOPR) EndIf (NOT DEFINED LTO_FLAGS) # Add Link-Time-Optimization flags, if supported (GCC >= 4.5) and enabled Set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LTO_FLAGS}") Set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LTO_FLAGS}") Set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LTO_FLAGS}") springlobby-0.169/cmake/config.h0000600000176000000410000000033712105760277020135 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_CONFIG_H #define SPRINGLOBBY_HEADERGUARD_CONFIG_H #undef VERSION /* the git tag / commit we build from */ #define VERSION "@SPRINGLOBBY_REV@" #endif /* SPRINGLOBBY_HEADERGUARD_CONFIG_H */ springlobby-0.169/cmake/package_config.cmake0000600000176000000410000000402212105760277022434 0ustar buildbotwww-data00000000000000#http://www.cmake.org/Wiki/CMake:CPackConfiguration #don't write when git errored out resulting in unset version (ie when compiling from tarball) IF ( NOT GIT_ERROR ) CONFIGURE_FILE( ${springlobby_SOURCE_DIR}/cmake/config.h ${springlobby_BINARY_DIR}/springlobby_config.h ) ENDIF ( NOT GIT_ERROR ) SET( PACKAGE_NAME springlobby ) SET( PACKAGE_VERSION ${SPRINGLOBBY_REV} ) IF (WIN32) SET(CPACK_GENERATOR "ZIP") SET(CPACK_PACKAGE_FILE_NAME "springlobby-${SPRINGLOBBY_REV}-win32") ELSE (WIN32) SET(CPACK_CMAKE_GENERATOR "Unix Makefiles") SET(CPACK_GENERATOR "TBZ2;TGZ") SET(CPACK_PACKAGE_FILE_NAME "springlobby-${SPRINGLOBBY_REV}") ENDIF (WIN32) SET(CPACK_INSTALL_CMAKE_PROJECTS "${CMAKE_BINARY_DIR};${CMAKE_PROJECT_NAME};ALL;/") # SET(CPACK_OUTPUT_CONFIG_FILE "/home/andy/vtk/CMake-bin/CPackConfig.cmake") # SET(CPACK_PACKAGE_DESCRIPTION_FILE "/home/andy/vtk/CMake/Copyright.txt") # SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "CMake is a build tool") #SET(CPACK_PACKAGE_EXECUTABLES "springlobby" "springsettings") SET(CPACK_PACKAGE_INSTALL_DIRECTORY "springlobby") SET(CPACK_PACKAGE_NAME "springlobby") SET(CPACK_PACKAGE_VENDOR "The SpringLobby Team") SET(CPACK_PACKAGE_VERSION ${SPRINGLOBBY_REV}) SET(CPACK_RESOURCE_FILE_LICENSE ${springlobby_SOURCE_DIR}/COPYING) SET(CPACK_RESOURCE_FILE_README ${springlobby_SOURCE_DIR}/README) # SET(CPACK_RESOURCE_FILE_WELCOME "/home/andy/vtk/CMake/Templates/CPack.GenericWelcome.txt") SET(CPACK_SOURCE_GENERATOR "TGZ;TBZ2") # SET(CPACK_SOURCE_OUTPUT_CONFIG_FILE "/home/andy/vtk/CMake-bin/CPackSourceConfig.cmake") SET(CPACK_SOURCE_PACKAGE_FILE_NAME "springlobby-${SPRINGLOBBY_REV}") SET(CPACK_STRIP_FILES TRUE) SET(CPACK_SOURCE_STRIP_FILES TRUE) # SET(CPACK_SYSTEM_NAME "Linux-i686") # SET(CPACK_TOPLEVEL_TAG "Linux-i686") set(CPACK_SOURCE_IGNORE_FILES "^${springlobby_SOURCE_DIR}/build*" "^${springlobby_SOURCE_DIR}/bin/" "^${springlobby_SOURCE_DIR}/.*" "^${springlobby_SOURCE_DIR}/auto*" "^${springlobby_SOURCE_DIR}/doc/" "^${springlobby_SOURCE_DIR}/m4/" "^${springlobby_SOURCE_DIR}/obj/" ) INCLUDE(CPack) springlobby-0.169/configure0000700000176000000410000000422712105760277017346 0ustar buildbotwww-data00000000000000#!/bin/sh #got this from somewhere within KDE4 (koshi) # Internal variables. alnum=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 CMAKEFLAGS= srcdir="." # Get command line options. We use getopt to "break them down into nice, digestible particles". set -- `getopt -l "srcdir:,prefix:,eprefix:,bindir:,sbindir:,libexecdir:,sysconfdir:,libdir:,includedir:,oldincludedir:,datarootdir:,datadir:,infodir:,localedir:,mandir:,docdir:,htmldir:,dvidir:,pdfdir:,psdir:,quiet,silent,version,help,run" hVqn "$@"` test $# -lt 1 && exit 1 while test $# -gt 0 do case "$1" in -h|--help) echo "$help"; exit;; -V|--version) cmake --version; exit;; --srcdir) srcdir="$2"; shift;; --prefix) prefix="$2"; shift;; --bindir) bindir="$2"; shift;; --libdir) libdir="$2"; shift;; --includedir) includedir="$2"; shift;; --) shift; break;; esac shift done # Set up CMake flags. # Set prefix if test -n "$prefix"; then CMAKEFLAGS="$CMAKEFLAGS -DCMAKE_INSTALL_PREFIX:PATH=$prefix" fi # Set bindir. if test -n "$bindir"; then CMAKEFLAGS="$CMAKEFLAGS -DBIN_INSTALL_DIR:PATH=$bindir" fi # Set libdir. if test -n "$libdir"; then CMAKEFLAGS="$CMAKEFLAGS -DLIB_INSTALL_DIR:PATH=$libdir" fi # Set includedir. if test -n "$includedir"; then CMAKEFLAGS="$CMAKEFLAGS -DINCLUDE_INSTALL_DIR:PATH=$includedir" fi # print info. echo "" echo "SpringLobby uses the CMake (http://www.cmake.org) buildsystem instead of configure." echo "CMake uses different options than configure, but some have direct equivalents:" echo " : the source directory" echo " --prefix= : -DCMAKE_INSTALL_PREFIX:PATH=" echo " --bindir= : -DBIN_INSTALL_DIR:PATH=" echo " --includedir= : -DINCLUDE_INSTALL_DIR:PATH=" echo " --libdir= : -DLIB_INSTALL_DIR:PATH=" echo "Once CMake has run successfully, you can use \"make edit_cache\" to view and modify all settings." echo "For more information visit \"http://techbase.kde.org/Development/Tutorials/CMake#Run_CMake\"" echo "" echo "Your current configure options translate more or less to:" echo " cmake$CMAKEFLAGS $srcdir ; make ; make install" echo "" springlobby-0.169/doc/CMakeLists.txt0000600000176000000410000000031212105760277020735 0ustar buildbotwww-data00000000000000set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) set(DOXYFILE_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/doxygen" ) set(DOXYFILE_HTML_DIR "${CMAKE_CURRENT_BINARY_DIR}/doxygen/html" ) include(UseDoxygen) springlobby-0.169/doc/Doxyfile.in0000600000176000000410000017463112105760277020330 0ustar buildbotwww-data00000000000000# Doxyfile 1.5.8 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "@PROJECT_NAME@" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = "@PROJECT_VERSION@" # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = "@DOXYFILE_OUTPUT_DIR@" # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, # Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = YES # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 4 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = YES # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = YES # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = "@CMAKE_CURRENT_SOURCE_DIR@/../src" \ "@CMAKE_CURRENT_SOURCE_DIR@/lib" \ "@CMAKE_CURRENT_SOURCE_DIR@/test" # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.h *.hh \ *.cpp *.cc # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = "@CMAKE_CURRENT_SOURCE_DIR@/lib/boost/mm" # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = "@CMAKE_CURRENT_SOURCE_DIR@" # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 3 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = "@DOXYFILE_HTML_DIR@" # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = YES # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to FRAME, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. Other possible values # for this tag are: HIERARCHIES, which will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list; # ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which # disables this behavior completely. For backwards compatibility with previous # releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE # respectively. GENERATE_TREEVIEW = NONE # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = "@DOXYFILE_LATEX_DIR@" # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = "@LATEX_COMPILER@" # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = "@MAKEINDEX_COMPILER@" # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = amsmath \ amssymb # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = @DOXYFILE_PDFLATEX@ # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = "@CMAKE_CURRENT_BINARY_DIR@" # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = DOXYGEN # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @DOXYFILE_DOT@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = YES # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = NO # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = "@DOXYGEN_DOT_PATH@" # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = NO # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = NO #--------------------------------------------------------------------------- # Options related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = YES springlobby-0.169/doc/UseDoxygen.cmake0000600000176000000410000000773312105760277021307 0ustar buildbotwww-data00000000000000# Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. The name of the author may not be used to endorse or promote products # derived from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # - Run Doxygen # # Adds a doxygen target that runs doxygen to generate the html # and optionally the LaTeX API documentation. # The doxygen target is added to the doc target as dependency. # i.e.: the API documentation is built with: # make doc # # USAGE: GLOBAL INSTALL # # Install it with: # cmake ./ && sudo make install # Add the following to the CMakeLists.txt of your project: # include(UseDoxygen OPTIONAL) # Optionally copy Doxyfile.in in the directory of CMakeLists.txt and edit it. # # USAGE: INCLUDE IN PROJECT # # set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}) # include(UseDoxygen) # Add the Doxyfile.in and UseDoxygen.cmake files to the projects source directory. # # # Variables you may define are: # DOXYFILE_OUTPUT_DIR - Path where the Doxygen output is stored. Defaults to "doc". # # DOXYFILE_LATEX_DIR - Directory where the Doxygen LaTeX output is stored. Defaults to "latex". # # DOXYFILE_HTML_DIR - Directory where the Doxygen html output is stored. Defaults to "html". # # # Copyright (c) 2009 Tobias Rautenkranz # # Redistribution and use is allowed according to the terms of the New # BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # macro(usedoxygen_set_default name value) if(NOT DEFINED "${name}") set("${name}" "${value}") endif() endmacro() find_package(Doxygen) if(DOXYGEN_FOUND) find_file(DOXYFILE_IN "Doxyfile.in" PATHS "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_ROOT}/Modules/") include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Doxyfile.in DEFAULT_MSG DOXYFILE_IN) endif() if(DOXYGEN_FOUND AND DOXYFILE_IN) add_custom_target(doxygen ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile) usedoxygen_set_default(DOXYFILE_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/doc") usedoxygen_set_default(DOXYFILE_HTML_DIR "html") set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_HTML_DIR}") set(DOXYFILE_LATEX "NO") set(DOXYFILE_PDFLATEX "NO") set(DOXYFILE_DOT "NO") find_package(LATEX) if(LATEX_COMPILER AND MAKEINDEX_COMPILER) set(DOXYFILE_LATEX "YES") usedoxygen_set_default(DOXYFILE_LATEX_DIR "latex") set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_LATEX_DIR}") if(PDFLATEX_COMPILER) set(DOXYFILE_PDFLATEX "YES") endif() if(DOXYGEN_DOT_EXECUTABLE) set(DOXYFILE_DOT "YES") endif() endif() configure_file(${DOXYFILE_IN} Doxyfile ESCAPE_QUOTES IMMEDIATE @ONLY) get_target_property(DOC_TARGET doc TYPE) if(NOT DOC_TARGET) add_custom_target(doc) endif() add_dependencies(doc doxygen) endif() springlobby-0.169/doc/html_footer0000600000176000000410000000041312105760277020444 0ustar buildbotwww-data00000000000000
Generated on $datetime for $projectname by doxygen $doxygenversion
springlobby-0.169/doc/html_header0000600000176000000410000000047012105760277020401 0ustar buildbotwww-data00000000000000 $title springlobby-0.169/doc/html_stylesheet0000600000176000000410000002161012105760277021341 0ustar buildbotwww-data00000000000000BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV { font-family: Geneva, Arial, Helvetica, sans-serif; } BODY,TD { font-size: 90%; } H1 { text-align: center; font-size: 160%; } H2 { font-size: 120%; } H3 { font-size: 100%; } CAPTION { font-weight: bold } DIV.qindex { width: 100%; background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; line-height: 140%; } DIV.navpath { width: 100%; background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; padding: 2px; line-height: 140%; } DIV.navtab { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } TD.navtab { font-size: 70%; } A.qindex { text-decoration: none; font-weight: bold; color: #1A419D; } A.qindex:visited { text-decoration: none; font-weight: bold; color: #1A419D } A.qindex:hover { text-decoration: none; background-color: #ddddff; } A.qindexHL { text-decoration: none; font-weight: bold; background-color: #6666cc; color: #ffffff; border: 1px double #9295C2; } A.qindexHL:hover { text-decoration: none; background-color: #6666cc; color: #ffffff; } A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } A.el { text-decoration: none; font-weight: bold } A.elRef { font-weight: bold } A.code:link { text-decoration: none; font-weight: normal; color: #0000FF } A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF } A.codeRef:link { font-weight: normal; color: #0000FF } A.codeRef:visited { font-weight: normal; color: #0000FF } A:hover { text-decoration: none; background-color: #f2f2ff } DL.el { margin-left: -1cm } .fragment { font-family: monospace, fixed; font-size: 95%; } PRE.fragment { border: 1px solid #CCCCCC; background-color: #f5f5f5; margin-top: 4px; margin-bottom: 4px; margin-left: 2px; margin-right: 8px; padding-left: 6px; padding-right: 6px; padding-top: 4px; padding-bottom: 4px; } DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold; } DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% } BODY { background: white; color: black; margin-right: 20px; margin-left: 20px; } TD.indexkey { background-color: #e8eef2; font-weight: bold; padding-right : 10px; padding-top : 2px; padding-left : 10px; padding-bottom : 2px; margin-left : 0px; margin-right : 0px; margin-top : 2px; margin-bottom : 2px; border: 1px solid #CCCCCC; } TD.indexvalue { background-color: #e8eef2; font-style: italic; padding-right : 10px; padding-top : 2px; padding-left : 10px; padding-bottom : 2px; margin-left : 0px; margin-right : 0px; margin-top : 2px; margin-bottom : 2px; border: 1px solid #CCCCCC; } TR.memlist { background-color: #f0f0f0; } P.formulaDsp { text-align: center; } IMG.formulaDsp { } IMG.formulaInl { vertical-align: middle; } SPAN.keyword { color: #008000 } SPAN.keywordtype { color: #604020 } SPAN.keywordflow { color: #e08000 } SPAN.comment { color: #800000 } SPAN.preprocessor { color: #806020 } SPAN.stringliteral { color: #002080 } SPAN.charliteral { color: #008080 } SPAN.vhdldigit { color: #ff00ff } SPAN.vhdlchar { color: #000000 } SPAN.vhdlkeyword { color: #700070 } SPAN.vhdllogic { color: #ff0000 } .mdescLeft { padding: 0px 8px 4px 8px; font-size: 80%; font-style: italic; background-color: #FAFAFA; border-top: 1px none #E0E0E0; border-right: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0; border-left: 1px none #E0E0E0; margin: 0px; } .mdescRight { padding: 0px 8px 4px 8px; font-size: 80%; font-style: italic; background-color: #FAFAFA; border-top: 1px none #E0E0E0; border-right: 1px none #E0E0E0; border-bottom: 1px none #E0E0E0; border-left: 1px none #E0E0E0; margin: 0px; } .memItemLeft { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: solid; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memItemRight { padding: 1px 8px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: solid; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memTemplItemLeft { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memTemplItemRight { padding: 1px 8px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; background-color: #FAFAFA; font-size: 80%; } .memTemplParams { padding: 1px 0px 0px 8px; margin: 4px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: #E0E0E0; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-left-color: #E0E0E0; border-top-style: solid; border-right-style: none; border-bottom-style: none; border-left-style: none; color: #606060; background-color: #FAFAFA; font-size: 80%; } .search { color: #003399; font-weight: bold; } FORM.search { margin-bottom: 0px; margin-top: 0px; } INPUT.search { font-size: 75%; color: #000080; font-weight: normal; background-color: #e8eef2; } TD.tiny { font-size: 75%; } a { color: #1A41A8; } a:visited { color: #2A3798; } .dirtab { padding: 4px; border-collapse: collapse; border: 1px solid #84b0c7; } TH.dirtab { background: #e8eef2; font-weight: bold; } HR { height: 1px; border: none; border-top: 1px solid black; } /* Style for detailed member documentation */ .memtemplate { font-size: 80%; color: #606060; font-weight: normal; margin-left: 3px; } .memnav { background-color: #e8eef2; border: 1px solid #84b0c7; text-align: center; margin: 2px; margin-right: 15px; padding: 2px; } .memitem { padding: 4px; background-color: #eef3f5; border-width: 1px; border-style: solid; border-color: #dedeee; -moz-border-radius: 8px 8px 8px 8px; } .memname { white-space: nowrap; font-weight: bold; } .memdoc{ padding-left: 10px; } .memproto { background-color: #d5e1e8; width: 100%; border-width: 1px; border-style: solid; border-color: #84b0c7; font-weight: bold; -moz-border-radius: 8px 8px 8px 8px; } .paramkey { text-align: right; } .paramtype { white-space: nowrap; } .paramname { color: #602020; font-style: italic; white-space: nowrap; } /* End Styling for detailed member documentation */ /* for the tree view */ .ftvtree { font-family: sans-serif; margin:0.5em; } /* these are for tree view when used as main index */ .directory { font-size: 9pt; font-weight: bold; } .directory h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } /* The following two styles can be used to replace the root node title */ /* with an image of your choice. Simply uncomment the next two styles, */ /* specify the name of your image and be sure to set 'height' to the */ /* proper pixel height of your image. */ /* .directory h3.swap { */ /* height: 61px; */ /* background-repeat: no-repeat; */ /* background-image: url("yourimage.gif"); */ /* } */ /* .directory h3.swap span { */ /* display: none; */ /* } */ .directory > h3 { margin-top: 0; } .directory p { margin: 0px; white-space: nowrap; } .directory div { display: none; margin: 0px; } .directory img { vertical-align: -30%; } /* these are for tree view when not used as main index */ .directory-alt { font-size: 100%; font-weight: bold; } .directory-alt h3 { margin: 0px; margin-top: 1em; font-size: 11pt; } .directory-alt > h3 { margin-top: 0; } .directory-alt p { margin: 0px; white-space: nowrap; } .directory-alt div { display: none; margin: 0px; } .directory-alt img { vertical-align: -30%; } springlobby-0.169/doc/mainpage.dox0000600000176000000410000000112412105760277020474 0ustar buildbotwww-data00000000000000 /*! @mainpage SpringLobby Source Documentation @section intro Introduction This is the source documentation for the SpringLobby client. SpringLobby is an open source lobby client for the Spring project written in C++ and licensed with the GPL license. This documentation will try to help ease the development of SpringLobby and help new developers to understand the source. @section links Links A trac server for SpringLobby has been setup at http://springlobby.info \n The Spring engine website is at http://springrts.com/ */ /*! @namespace std @brief The standard std namespace. */ springlobby-0.169/doc/modules.dox0000600000176000000410000000076012105760277020370 0ustar buildbotwww-data00000000000000/*! @page modules Source Modules These are the modules that make up the sourcecode of the SpringLobby client. TODO @section server_module Server Module This module handles the connection with the server. TODO @section setting_module Settings Module Saves and restores application settings. TODO @section gui_module GUI Module The module that binds it all together to creates the application. TODO @section socket_module Socket Module Handles communication through TCP. TODO */ springlobby-0.169/formbuilder/simpleSP.fbp0000600000176000000410000007132412105760277022202 0ustar buildbotwww-data00000000000000 C++ 1 UTF-8 connect simplesp 1000 none 1 simplesp ../src/gui/ 1 1 0 1 0 wxID_ANY Skirmish 500,300 wxDEFAULT_FRAME_STYLE|wxFRAME_FLOAT_ON_PARENT Skirmish wxTAB_TRAVERSAL 1 bSizer3 wxVERTICAL none 10 wxALL|wxALIGN_CENTER_HORIZONTAL 0 "easy" "medium" "hard" 1 0 wxID_ANY Difficulty 1 m_difficulty protected 0 wxRA_SPECIFY_ROWS 5 wxEXPAND|wxALIGN_CENTER_HORIZONTAL 1 bSizer5 wxHORIZONTAL none 5 wxALL 0 1 0 wxID_ANY Map: m_map_label protected -1 5 wxALL 0 1 0 wxID_ANY m_map protected 0 5 wxALIGN_LEFT|wxALL 0 1 1 0 wxID_ANY random m_random_map protected 5 wxALIGN_BOTTOM|wxALIGN_CENTER_HORIZONTAL|wxALL 1 bSizer6 wxHORIZONTAL none 5 wxALL 0 0 1 0 wxID_ANY Close m_close protected 5 wxALL 0 0 1 0 wxID_ANY Advanced setup m_expert protected 5 wxALL 0 0 1 0 wxID_ANY Start m_start protected springlobby-0.169/formbuilder/simplefront.fbp0000600000176000000410000004647312105760277023017 0ustar buildbotwww-data00000000000000 ; C++ 1 UTF-8 connect simplefrontbase 1000 none 1 MyProject1 ../src/gui/ 1 1 0 wxBOTH 1 wxFRAME_EX_METAL 0 wxID_ANY SimpleFrontBase 703,313 wxCAPTION|wxCLOSE_BOX|wxDEFAULT_FRAME_STYLE LALALALAUNCHER wxTAB_TRAVERSAL 1 bSizer1 wxVERTICAL none 5 wxEXPAND 1 0 protected 0 5 wxALIGN_CENTER|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL 0 bSizer3 wxHORIZONTAL none 5 wxALL 0 1 1 0 wxID_ANY Singleplayer m_sp protected OnSingleplayer 5 wxALL 0 0 1 0 wxID_ANY Multiplayer m_mp protected OnMultiplayer 5 wxALL 0 0 1 0 wxID_ANY Settings m_settings protected OnSettings 5 wxALL 0 0 1 0 wxID_ANY Exit m_exit protected OnExit 5 wxEXPAND 1 0 protected 0 springlobby-0.169/git-stat.sh0000600000176000000410000000044512105760277017527 0ustar buildbotwww-data00000000000000#! /bin/bash REVS1=`git tag -l "r*"` REVS2=`git tag -l "0*"` REVS1=($REVS1) REVS2=($REVS2) REVS=( ${REVS1[@]} ${REVS2[@]} ) NUMREVS=${#REVS[*]} for i in $(seq 1 $NUMREVS) ; do echo echo "diff ${REVS[$i-1]} ${REVS[$i]}" git diff ${REVS[$i-1]} ${REVS[$i]} --shortstat done springlobby-0.169/images/exported/away.png0000600000176000000410000000152712105760277022207 0ustar buildbotwww-data00000000000000PNG  IHDRasRGBbKGD pHYs  tIME: CuJIDAT8˥MlulwgfZGKK- QR '8P. ńTD1?R 1 FMP$jSZZ"mYu۝|(z/OJB&~<50QC+J@\U qmLzŖ{T5G0?EflTV{>>KL`3yDn zq;~l=:`tO2?ӑz]ʨ6ϮK3dE4Uic˧OV@շ?h6e2X(ؽ.(&auAd>y5қ2,U7Fvq|_Co*u&y[ Uhbs/3 G L*;W^ޠl1:75JF&(*DB =[67P-&r-sy;sJ8&};;E$Af|4s4[1wRTc"x[jl2Y9o.Ų 0%h4|{}}}*{DqˇZZ[g7GA9?&%+NP;֗n`[[~CAY4qA;vӃ/DWMfuIENDB`springlobby-0.169/images/exported/broom.png0000600000176000000410000000123412105760277022357 0ustar buildbotwww-data00000000000000PNG  IHDRasRGBbKGDxqhZ pHYs  tIMEqctEXtCommentCreated with GIMPWIDAT8˕OHq19CmRes.Y0b%"`E[t%~-VYP`[-E.1sM+os{/}yNeygTMBsCC}뎊it:t!|ʵJfR) f@PIU"K[堤7\,d|v 9, Hcoͭm7^FE2oPXJ$WB+Rl6[֤jb(r>K}kMh D<6n/uHHѓIqjxDDoGiʤC}J]K:j5_n+;11f (a\galfa޸ˌx0<^1Ew#^¿ԩ4qs ߡ^>22-[:1MGw"iK.s E%h.>;D@~a%W'w 4ͺ.4IENDB`springlobby-0.169/images/exported/chat_icon.png0000600000176000000410000001025312105760277023171 0ustar buildbotwww-data00000000000000PNG  IHDR szzsRGBbKGD pHYs B(xtIME ).gE+IDATX  xxx)111sssN[[[餤J%%% 33344`555ѷiii RRRSSSTTT9닃zzz$<<<&&&4 """ ]aO>>>QQ  """A///UUU / %%%*p5""" R&+Mm) NRؼ9Ѥ$h%(6B +=?F;;; џ˺..3BE...Y"*?7,*83 =8 .6F̋ '(-T@@{5 &i>=8.(#E """ si   ʤdlS888,;***="""Ѻ 2;NM<}L֩*" 6(&555!!!YR  ø  >( SD G8 @!O\|E` #? XN=wY L0* K.Ӷ0BU H 0Ϊ+_p7]F-(+Y<:3ʉG\x rf%BUE.c- 粇l/ճPde 30+% $1.*  )n}ҕ& ZO9308)۲n 6o7IENDB`springlobby-0.169/images/exported/chat_icon_text.png0000600000176000000410000001025312105760277024235 0ustar buildbotwww-data00000000000000PNG  IHDR szzsRGBbKGD pHYs B(xtIME l+IDATX  Z!/IIENDB`springlobby-0.169/images/exported/closed_full_game.png0000600000176000000410000000153112105760277024525 0ustar buildbotwww-data00000000000000PNG  IHDRasRGBbKGD pHYs  tIME;#mIDAT8ˍMh\e_2IfPcIc mبw+7R(g!( . rӍ AHDѩXJ2t&ܹ~\_8s=o_Nzzlh#aljN^ ;X[}xӌh`rTញ(U'a΁`w[(\j(sRt*oO9#ط P#uI؊Glf}A姆w&V  R b`s7M"cMW[$ 0B(x *Ed,=cW3μƥ;M?׿^=1̀#xQvMցg/}'V#/5F?蠧}e"m/nZA)eY\8Oc&hFK<6ok̑sd*R.R6)]j fV3κHCej=GvX,,.W TälbhFt]ħ׳W_&2 W , :ّMP:^}X |.-0ufWl,IAE[g'QʄLwyF'  UPDyRiCd̍~'qٜ<6T & 񥤭4CWTgbX1n0JVz9zzCMPkJC..#Ơ6tcΟڨ~tVqZP 2`U[⽃5y><Ʋi#rr~6kޭ/o]~ +{N pIENDB`springlobby-0.169/images/exported/closed_game.png0000600000176000000410000000137312105760277023507 0ustar buildbotwww-data00000000000000PNG  IHDRasRGBbKGD pHYs  tIMETe{IDAT8ˍ;hTQsdq7n("qWARXk!Xha%vB@ XXZ`- 6+bHPj\5M<-Q(LuF# 8خU'6ɱɃ+{R_P/5'ajܩLJo_yAޠ K2)IC9p}XӖ(p2)d).IHdXn+J;@HU,+͂t!uB?ZQaծekVjj]X6pu-2w:S|[{`FnDv#W.AӫwIENDB`springlobby-0.169/images/exported/closed_pw_game.png0000600000176000000410000000147112105760277024214 0ustar buildbotwww-data00000000000000PNG  IHDRasRGBbKGD pHYs  tIME(yIDAT8uMh\UfI'[JN- 2 mD".̢ݸ u#BZҕu+غ"KӅSBh^LL&u߽E2S sWxZl5}qofdʓ fƞdou~x/v=TЙw?Ϝ|yth`f/|y_J n΁5( p@P;1@':[M>96PʃrҮx8B P}* D0>A99^"3fVj"Y!%K4qj /WPY91&N=?*qVjg0ȶ1wVQ·<~%NRrm%4>,sU5?caz$+X[f;gW4&ǝ@7+%-DoLx/G=XX3Ɯ){lXyU ko3SOZ'0Nk[^'o/RE' IENDB`springlobby-0.169/images/exported/download_man_icon.png0000600000176000000410000001335112105760277024716 0ustar buildbotwww-data00000000000000PNG  IHDR@@iqsRGBbKGD pHYs B(xtIME ]iIDATxy]}?~oZI!$$l(rb=S)O킸TL\3IUT)ە I*8@b#,vЊvn[~揷赐gjS{=s>hoSf}ˎLl m+NDDY헺'j0_)ZDhƁQ(!Яmڲ֛h]:wZ;E>m>|ZAضE[[ ضEnjQyh"<}S=R 5oͮv@-u$R_.\mhO"@y>10o^鴋ekɎ9'9u A7n|r|뎥K=EjJss6n7F;QV }ј0^k-xg7W_rWnZd_0cFimmv 'r9e1ҵcB׿޽"ƚ5b`(KO68 çY:M1/U 06Ld' 4OWGoDغu묣{NMn*Nx)WUT)30+]&+?c=q1\AXLcjjxs'{h:vABńa#m$9>gyMl~i6CYBIcO pvC[}fp >b 6=㋔&ĺukx3m{Ț:Xw( Dm2n`mkhm>K+liHkvqT7w&r O݊nhQyƍ1locDꨩЙoO/'z*Ȇv|.(Ozᮻ]u '{ڨolFD8}MӰ02DIB$aldRo^v20 ۶w'6B)g[Z8}sY(RJ)(4 J>s3fLiF)E>T?E ~#}@ @ya׵V?:Irbρ#9DJUFT_y@}xx?8pEKWVK ``ovc8NW}_n5i\+²?NOQ4OA&_|)]K"0H$ޚTʣkIaȏoz罄`iU2yc*MM.ǀ+N\Gk퉈%"%+@+$@Hew^}c308īwr>1禕ĉ$8jR!F(1IazOSCۤ'rӍ ut"ŽV,cfݼv#7~`-RJyi{D7( "P&wm l^Թ CY.aTLk 6IQaT;1C$?/Ü}&qhu]U' f`DR:}E>@P jhdVэ@E'a\H ?Lb aQxd?fN'"2[=Cx^S)RI' ^YTfL!( J  8r,C# %`$!1ˀEQUXp_ lgsO- RJ"bR+`4ζxDD6JL A ,5  l뷹~bqi̛ɑ݌8s}0㤸`f4,ae0$"p򹌎d2:ٔUࡵ% A:@D|ĕ7iϪD3{'9sg8g >?*ED! '<?Ɇ׶~ɑc'ð@c/VM3)K1>^(u"K٠RJ8VpDhoLr8tZ œx;^ȭԇg| E cNpC7t~v $AC6$,t1"_1WA J$3"^db,Gm?r[wJT2J, QnAD c~2?Lu) [ Y/TP~ɮ<򤨼J>Y))nJZ)R$1>|&<|Y=KXܘT1g4}ETKE$bZel4xIdn@$J" (5xA VցvBqݖWv%@?yu!|'Iwxh&P22ؿWQ̄ $$>8?Q=!CU02coD*ƍcﺻ 7Z=G.#W&^vbٱq^9-PZ*$b IACI8}<"q۶'OU01R\tE}U$;hknȓ@_^*X!OP(y0 Te0Hmޡ{#Gzkt-̖%Y֞-@Dּa֭*œw%B' )CP McWP()_6",0}?+cwuQ/ƘQ{]S]58cF$tꇧ^_{m8P wƫ0 ϓxwA .80 1Ϟ  `V.{яT…ˀ*/9A;joTۊMHcԌOa6M)6cC#l;>_YR:ZRBGB|N Y?+t55{r>پU/4K(ipb?9p7}R;8닯Vx~Z[{]Nީa -fC#1œ$I$IHA#qDGmiXwqQl^Q9D)qCT p:EbS5߻Vzt1m[3Vc`0/ A)A(^bvs-)ޞA:MFym۞I|N,Z7;REOj[H&qGT4=_6իmK[]mm :5k*uG10!1 J )L }}Ü8q Zg7oށIN hWWzfyKMӏ5Bҥg]d\}r@D}X8ӦDSS Lb ! fs f!"s 񼶿)%_մOi"x])6ݹ3;)@+V }!Ds{,zjjDSU Q?I'۸'^uJLq2"݈lB͞[.RJzp/_o57:toH5ýI66wo1Be+R6\+]i)E:<~&$ (uu'](l W5i۶k̙ssA5uTIO8qb'HR?Q*丶uVd2+ַc)nf!I-[8 a7ޠwcNU7oDQ}Æ C7Z hmZ{wDD$q88vK$Ilc:|pj߾}5<c̙hX89z(Bgʺu,2J)Z˲b˲"۶C۶۶ut ð=.˲ξ/f̘,+8NZ Rq{QqWFGGٻw/tttNqlʭ.N<Zk5r}@V v'm;tw]7p]qBl*^z%?(}}}ٳ=`"Rj㠯}kBaֺ h7ƴ8FQqk$MIGQ8$NLL044TIJeYCmضYu{9y1|o1O\{a6E3r6irk[*DA=E"Kok[_3_xZ[VV 0 b##^w<<+I?Uo!H"[H Z?#;~97q߱%E ܡp椉?@T>~cq93|=P0LF.WfUd2 VVI3' UU9dKlqYYEC1TZr?X{y4l]g\4 ^q b8pJ[7 4LL DˇZxJ'g~7&jGIͪr]݋9%%w^{ PSaC$E6s! <%*nx *WUWΗo4ykm$ 焁Y1NuA8{IL PPv~P/nAȗ-p:wi'ivCo"$udM&nP}U193z2N4G'}D";Xx^h,[*_U#tZ*i^&jjNptf!a^dC"B4p jL)PIT!FOV "(FfKs_3 h*sF$m2Dh7\UPlCfZ (`Dz$-;_EQPHgņ" (e?1,c+ 2‚g.mp8[(ay8q hP^^H,H&(s2Ҳo2jXe ^G)n(Zto (xyEBX ~pJ/]j-br.LRg`;V|f9Y)0"D}3OPh@])ʬi e ͫzݳ1]ZZµQ(T#~(n @6@K04}}0?gxFQ%8‹qDD$&cx2H$`H4Uf[ r{5ȵͦ@{hק}{ `Pב  BfgLγX& u[^E\>INr?]ˬ'Dk=?O[p@,-ƈ(p09=bU,ei[X"xJgE* viҦm74Ai?gV3}7pd?a>!"!'P1%(Z>D:4vv3cɏI!|O￲8F֊6;ε[7={U9ъL*AJCI GMҊ"ɗ07w:;y=oV?K&&eQ̮$mq+wmȜ/7̏3Ն R9e6K?Zɧ;Q(<}B ]t%IE/4㌹'+N_W?>P2 _ Ȳe;v\09 ^z}3c9r]~z|`٦^|9-$-m2L<UVVWTTp,ܼySГdQR)Eb5gΜtzl$ͧ\ Qe7CqqtkH__&*)+fyLm6ۅ{i~6'ڿ#&$ H& ^֓Cn.BcXUUeؽ{7K *UɜB^9cf<ѣGl'N }t4pwUeKbØ&(Tb|n]]`V@.6zTQ{*"lGɰ~=LhFsE!ʣ!b P3"0a:\.Wj&C"+ BJ8S>Iä,mk8|XKZl8 ;+#(ӎǏ}%:g ]m45IENDB`springlobby-0.169/images/exported/downloads_icon_text.png0000600000176000000410000000256712105760277025321 0ustar buildbotwww-data00000000000000PNG  IHDR@@iqsRGBbKGD, pHYs B(xtIME&VIDATxMhTWoHH6!ЈPW"." U(D tS(e .lBLp0Di,B1b#L~]8/<#7Qb-ż;νbX,bX,6~{%iJO>O2[xEyAѣ$$}5UVöq"'OX]]رcHUZ=ʬLRg>Qey/ [UGҀFI5Pz00%455.LL&455Qȳ9D4 "?r^xKgb|1ۑV&&&*J@c0`yyK9ss.xH$عs'$Iv@<H@ww7mmmRZ3dݽ{05576F 4 fBa27޾>^ ׮]I7B@<~E `bbBr\C@j8@:fff`0 ٳgtJwM<[> x:"H͛7U,uuIU$ɓ:u$)HxqIRCCn߾;vHJombNt GUW- b%>|X^{q]l6K6ehhfo#wt:M>I_I8CiG 0Şx"T&={xiMAhZϾW_)-egk,bUV/ -B.VyDzAIaIlRֆo_ImYU)H[Ғz%սm[Qb2VMJ̤L7 JF޽˗/YYY!H{nOgS deeem߾}B@gggyG&%fR~F%8<.\(?w=?΁t]+W8di$LoJ.WSrsLbWWW+ Qww V9;)9Ist [a3kS6bQ,nRb&LÒ>}yh4z'q)Y1%f\֍w ܹsZosڨͤL%"ȑ#[\Ǐ9|0?֣_$}jUbX,bX,Ųe~sf@IENDB`springlobby-0.169/images/exported/ingame.png0000600000176000000410000000153212105760277022502 0ustar buildbotwww-data00000000000000PNG  IHDRasRGBbKGDxqhZ pHYs  tIME(ަtEXtCommentCreated with GIMPWIDAT8˅[HQ[M,JpM+9])d@qJm I FȚhe VRb` ^E70E4AkrzEV<|wp#ET*^1uLga~ϡ hGM %erii "( PZ\SxwRc6Vk$rC&A4t:$IBIѤ3 P@V[~@e07[Tv?tݒ⻘6G^|dg0VrC@gj^ mٺ)r_zG}Ŝ7@$?OY9E9lk-:?_qb NՋG'"*t?fM8ec1 ^B|[!Ѹ1y=O=Nz*b#T8v'H=ti:j;q[bW,cT9;`~f Xf bTY T(,ƫa՚DZb{L}Q8ϕ6NB!O<fVJ~d[c yArBx$Gəz#g7L}4y,=hyi`'_ؕ ~ק!i]t)EW/ڪ P*`2IENDB`springlobby-0.169/images/exported/join_icon.png0000600000176000000410000000473612105760277023222 0ustar buildbotwww-data00000000000000PNG  IHDR szzsRGBbKGD pHYs B(xtIME 6r ^IDATXGV[lYflk4i.mmӦlU[DE%<"`ŮVtᑋZ`A ҢMhiIݴI8cgTM.3:Ϝ}W{Eլc5B{hxH=0QVKvyaj$(2痬B&1ZйFjOKNO8rݜ I>lh롨:xP-1q妺0}W=cg8~N|y-qx !DPF?; Fi`N޽]',8maaS ^}酥#9XΔJx_Ho_'d("< Er_#_%셞J+҉W_JI8[F3C7Y.zMy@ '-U3i ޞG*+ O$36^gsktĕ+4'8@$.?Jێvk^>W wEna . dyBXr DH*{4-'5r԰?x|%Z<ӟݺs_7I ^t YaT-Q$>b"U06ljm!X͗aoXs/D{~tN{}+,|O\Q8>SA*#' j[ 8I3(Tx\Q ܙcfaVq _d|i hijw M{$yDNBn4m@y*o'߽7Hg>}k9l.WM˗m[ay{LÀ)@ 4,gFUJ<,|psSQ&Wn O,x4^<{wj(TGOWtK5 j 90Bh(W5RG&WHyN:1cbCCXAѠ*-H&::?%2Էk Ն4Ċ+oÔʞò^LhrL-f)# ~^ c,䮯~`-@! a &T&[(jS7noY~|J`dY>FpR)B'13<.!:rJ>AV*H'M oՐfbj6ܮu¥{c^&kk O6AB*ZϾDv7ОU4<;}ꈖ}J/U5̼%POjIt,H&"z)zrjܱ˗<O`y!xhm=tQSvL(  3hHʔTp5AAYFA4n.O sތOQinn8 w ~/W(*V$D^kX"z4aznLfP{PH7kFq4K4TJ!lJwO`ռseeLs~蓜uA)`-]hœ{QQ ߙv&C~hj0N㓓ϟOAؐkL&َV*.m569zErFقLeCHpe'wB!k̖ey)]p!6 ٳgp<< f8LM?X{ȀYc߯+ k?=UtIENDB`springlobby-0.169/images/exported/join_icon_text.png0000600000176000000410000000275712105760277024267 0ustar buildbotwww-data00000000000000PNG  IHDR@@iqsRGBbKGD pHYs B(xtIME,0oIDATx_hSWǿcnRƦ8%Zֲұ *F)2yF*hQ`[Ʋڢ cևU&޸jv>{9߽{w~@ @ @ `y* T>$HvsI&D"ܿ?- 4ͳ|2n: $~?sv@nI_Nso_-nD&#GLӜ3gXUUE#Iܹ4k۾};IRQp0##Gzt:{n  $988gp$yСX+Hf#INOOhs;N0LL\~=4DXvm19뜝ct]{  Iٳ~hhh ILް)i(8`e⻫$j׺qFΑH?~$I9 S X2$I^P:7l{1ܥ"@ccw%Iڵ,/ܸqc$sΑ$ `f5+@mm-ǩi=zݻwV+>|BݫZXc.!|>|$cvxpi `yy9]F sgzp8q=pX)Ñp5 i$P%eYeyv߾}T*P(Dñɱ, 7y^PaO-?enCvll6m$i$QH&|nnniy&kjjUVVΟ={$A/9TU%6$$x^ih IR)ӓft("I.Muu5I2djlPft,c! FQ欮O<ϒ1iyc(Ƨ,˰X,KnW8x%@{{; IO˗/R]ݾ}m6@qSѰEnݢiN\.+x 8W$Ln˖-L$F[jMMBWWă#$~_SEWUUWUUWP!TxԞ77p{ qMU\2*ZUZOzi'6CU` ,n,髻*,3&oュ.p]{Xy_UUݮ; _IENDB`springlobby-0.169/images/exported/map_select_2.png0000600000176000000410000000155412105760277023603 0ustar buildbotwww-data00000000000000PNG  IHDRbbsBIT|d pHYs!!𫃃tEXtSoftwarewww.inkscape.org<IDATxױKUq{*B)p zR[j_֋D,:78ۿZKh WťA &n-y=g8Gyy^Ή"1r4 o9vN93l ,)^3UPd@wCxWWD\πp.3?`+"&tn%`vO3QS<,yfB1VU&0|y3cN99xvr IENDB`springlobby-0.169/images/exported/no1_icon.png0000600000176000000410000000064112105760277022747 0ustar buildbotwww-data00000000000000PNG  IHDRasRGBbKGD pHYs  tIME%~,TtEXtCommentCreated with GIMPWIDAT8˥Sn0u$z(A??p "%R#Pg{pvl:?f5;^o8,oa  H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FPIDATxYd}s\n4}#.D&%SRHdi<qx7?aBb41ǚE/%IYh @@WU2s3"9ōSYY_}jۻKս!!>SO#x!qx<} |!___.C%L[B-Vw @~-Vv D^Pi^nt{xg<*D!6k+k?xp>7!:VY~'4!gVvfSun3V~SjBݑ~WjFLe8|6z:(qw\{w]$qמD&*kͿomͼۨaZe>?hP]@&*QY[%V -Tִn[MT76V\W7V Ս L9F+wE?ۛӭ?h3d\T@(M Tk6dd"J:b~jbus 4χmB0hCa%"l `iAzySzn?~Mƶ:@ucMeW6@ E0.vny֮runZ.VV+[ d߰%>_|>M}Ϳ7_x8KVy\mD\Nn^})ciE3wU=72Je i2 B&q B)^8W΁R7߆4Izz-|?==χ9<8򏌆eSB 0x]|F@H?:oy,Amʐ\BdgȠ~iR̵[Lno>Q-&1}t(Q^&G=AyRlo;nRqIx5 M(: (?1(e]_"SEReŀgmc:^|4ΜFHHrNl' ](1MMJ-Tq /(`֎ x\&nr7l[y}89\V3h7\;aLQE=ld^3~.k4p m_Y~9\zN !:\!ͿsC`s8%P[,8呌\Cm|C R !x*/Wdbܤg\pY%Q߸fh[E@J7Y6A~:Q{-1&sO=p4&(,I/!&1>Q[Q (@2C0h"I$Ṳ8t\"J p\sz]LNߨc:"eh~=|=7v d21Y3!6e8?c$ N7x&qoDusK>W T{ ~t\:ϕ_+k=h53kqn\ };<\9<>}q2 3sNCoV+(=omH<ơysEGkrg0EA3k+gt:5pLqG}'<FC9ƾ&7օ"8 REdޛq) h5\ 8bkg__^>!_;Bem^/B{uI~#840JRVo}t1qBIue9b0!LY"80MY[V9 S/c$`1z2+q;v$ L2cYaPz<.ۆ<F?(? \Pgj`2. 0tff*eי33spBUUͿv QB\ N܂\Q.j\Wpki}g2 -ԶAPmGH9yDѠn) a©dO*LG +M\+I4N2U.Jq8nτHSpb*L;0Ʊ(G+2ByS/OpG$nU)MC(9k-:m h絀1}W 7jaxMsufIV\w&*t}cg\.BpZK,Q.suk 0#k4X=` ʨt{Yٚbibxnl F2Ʒ.CrTp /UX_bck{ \/p] d:A8bInhfswZqEi>f9jERfHv9\T7+

jseڹLR W\&-lHWG):wl7s t6\gJ^IaGSn29B5=j_wH@:\wU8q|UQsC8L}_T}_GN$dGد^xpjq ؘල5wun)$MTR&k4\V 8f-=B#\@ò.C 3N@q5U(jYŤ%`kBȑgF-8΍, XS,,g`iદyfCY\k{98wvACqԪcm{WLH>bϢɞ^~YBG- 2Yj3F<80qUpqӍׂ14 s-H(Bq8jZ{nQ!v9Rgzs1L')m+OO$qGyuM+mF(M@3*gͫᣂdeh#5 Q+ttLUKjsY\Yez8 Es&i(n͇t6nYn/X9j`mYbJ ͆ mp.(,럥5_K}Zm]:n+@NS<3xWeynRZ w};VV*ԕP i<'AhFϑ৵I$gH@`j}ϜCdhY4O}#V|i`y~@UBAm^n$uwQS|؉.g! ai?/L VkqHyHha K{($/,S^VC_x+TNd8@}岇3gsgX4\2W66"E3Tհ\ VR^{(Ű Տ˧O5kkcs/9<} C01IT)(>{ej146J(ej| $f`,C@M1 LRIP#D$%@p1VW  #x\ W"M"3y&_ ,^ؗ 4VwQ< 5j1t$Z#G+(cGY]=(G=m8ֲ kꉜ\s=t 0ON٣vˌ.NռG;LmsZRb<(ׯmya8b˚n-C5e3 e)ڣj/W~bhSe*yצ%0uW~\ɧvJe/<CRAŘ SxgA)I qqwm9r41b4@AI bq`$C Ai 7 SqMN,pX΀io,~q(̼v4W1lU@hR$GeϜ~ 湸λ1u xCNd/7I<o@qQs }t<uS#/EY* ΅g| [pʭL%5s,P°An)@(m G% ---?JᛂּTF`̗l~a zrƯ<TV0 c/ 1 vp=GK*Dj.A`Li "MF"pOO0j61F,P& r L `X2%xNg' cBM FcxlK22s30/B u*W: 5kG1%#gm8<mDV8R/,XµD8l/v\7sC*,gyI`kr^^ JhKp|8r?00ğ}1D17p-~ӟJE:E*7f0!)2{["*GD5 ~J9MQPRJ^e*)]r 8qWNqqJԲ s!^op;p8KpJA=*ػFLl:jt81 ;n `zo ѥ^#d rY' g]93fC@6w%k;O v ^`h(9,ՙo5eg?)F#dO/v,n  F]zOP=j`ۅ(%r! dOIa6 +̧H(t"YJ ]7O͎,8!z(x3_Aoi/ ]cEyy%nWw OsdNuAV .^wKo; jo9H+ǹe!~͑n97y1l5, , +Kُ}?' k#I4lD(]졀tm(^??a0sgq׵ฎI@( L2*<akV]"lԓfǤ<4UQnRqA],|n/R_.@+-'.s6$W.Soq7_k۰,yXZ RfRu U*gydRA(6r'9n0!`udQsI  F@PvaՐ&x3Ѱ$~C2K&(pqNFa&sq8,m #Ml]u jۻBθב }qkv(]8>;H^{`~ YK}):XEWPzev;GV&[9$,قne0 J][_",W^ Q/~5U HD) 0IpڹD-e0wXaSRYɷS!&Ć ϵ-cP& }^Zax E:nj1|p-8v\&|y?ǓyJO*8ej=V.Q-B n zpvrR/^p!||4tf`YepA[ZŻ2ͦ2UlhgY12(kV/=[7x~?RZwho =~ϾPGWpbcuBsQPIHk̷V+-Bƹy$@L'c ॳ$! A8 q-|SU\qm94 }yAظ\O#GN~C ^iY:~KuF rq@Qh.4K]*Y.S7Ks}_ePv#Cnxol#uxFSH$IWH8h0p5 '2vuB&n9˨#WI Q٣Ont1ù:3WOP<~z2kXS`;dǴ bO nQmB^ˣs.p{Eؾ˴CrGVzڰ,-U Ît}(:Jm:2%uWoەK/:5*N1- vWi{XBdf{SUW@$1M鯞|c LRyGz%@tB4}r +;r<%6^E[ۂz9Xz:"HÜ!l&RK8̦t[,0* BiaeQmŒi>*ϱZsEiШ? a[ڮ{f%9 (Wj T\3{+aVȹoҜQK~}2B/>4Ֆ"2N\0MAg>F^itpCb2" vtR8~*x5$dLMdX[,G6**`]ga_4Ctn{w5]y׎ڔ~1$zRʍBANs$ϵ woV|'nv I\\\jjc\:?W:B9@6)줜(pujcWC^)(T&8d }gȐ&QzNw?,}ߍW>|ٔ. gJcm<fd:sDBǎ \B/[|Fkf˪5]P +j[mv^`i˼Yf$έe[ݒW$48Ulk;jF`I=}xp Cn d/GO.Ns՘&qW-zVs8w8JGqUXLvٴpĸF`&:^}Ad9 3.m?p p .8GH(6;=ip^Gc˫*f.bs=/Wpmw"Bs탾3}Bux49, fynoP%U˛${+kfW1+!"C茶%xF D$ 0p[s}ՉU7'Dc7+%e27w~NeȔ+eFtYΙɡdʈL݋_Ɯ|ù6cPk9subǺSϧ8~?77ϽR c_~%r݄Z!7I}QfkzW9NR2bm_pQ:s S-zS H)w+ϋ +7CHu]$q^qXRA `X# ?OCQH+Q L3Qu88H>IP஛cT+$:Zaj`Z'sK?*6xj ^|z/Zkp^2,klUB9\;m@oXxނu M 9f-ufc3֌րܴ`e`Y޹(@jM9 EGN)7)rnpDDfSpE$ rcW4U:1$\kNCJʹ27wC@!O\"$Q] 00E0R8>zoTp?M<|3~N{{l˽o."`y!Zem"8-7aZobiò׬a)V6 ,W ,WvЫu],)<(wri3Brl֛6C`H# 6:t2m'Z ϙ|!O:kq qN(uMhaGbn2GL#PG ﻗ!yBɑs-C x?AK7@Ɇ̙<^ǰkA*:K}fQ=&-XaiEg` K t/M{(^dPÃdyW\"<҉!upP+$PNq)HLLANBрĄBLTn5!8\I{.a> $ 1Ft$AX?o|nB8#x p8!LSckP@iu^b3QP? m= ڡqs:{4\/ܤ&mX^RsHQ@Zp8F3.*Oj导o/|H4y8TpURL,hÈx ߊpq/xQ.(' C!& , VY}w7RC7x__> (&I+n oyr7e1gy>YCA6л:W6 ’<@Yjos/4đ[㨧j2$Q ׯV $ }5yFFq!ds8s93䌶kdTP:8QMWR$1<ុ֫q>ynY̲I4SS8T?Ñ!G;&Q9ZꮝRPo' \6&EeaсyؽznZ'$z/}7\?﬷7@Oy-B:H.7m2~ޱΑ7Tyq]p|3?}+bB~pq8!p 9Cx>P:㪪7{SU2׿30Ta;%[Dx8s6Ÿ? ƪx#2&d)Du~uy{aH79ſodkdjX=/M]IWͮ@`OPDX_@6eB-؈\nmL+_s*g)4}k2OɹOL'jQ8N7Ac`̥-ۯkcZZ+MCN\-Br<1(vR-R/Rn5MBo!{ݪcIO:E'j ⮺!ùtTedoevh,GnD|,Wu>2I"dr~a.;c@SB/Pt9&*v9Gbr&Azm5x/<MM [ޥ^Z/G·ݹr_karB&6!XĠI@P2@CoYiX}u3hwvѭr 㡕 s(*bcy{JewFrrrvweS3IrqzFJو #LxܕM39DIl( Dո\RS5 ,ax58ົߏKo&Dnxcdu}cMBD/ruk2bջqfM[mW:K*mΈ,q{ ig"ǵWP*;CLqGpZ$rq{Nd^T9G!k$\u xb6pղIs-o=$@(-?a|HKvC| e39D/M΄M9W]㑰lrV7ѷ o6fm7BoJ/CTr(&q!høKny~q]>Άs,#Sqdo[]ȋ7붋雴*vh7i&,S6 9ҽk;.u͚n8PFm*( rL?z/$Gy.Ȁ$\P#0G^7 2Q,hUIg^wFW\aoVRM-f}fmԑ#GSӾ]ޫ;;l EV;rZIFό83#EHf\]wgd E5:}3ϑD ;>Pe<&rR'l|>z%]>sf;HQsB rMAHÃ2n 54Wu*ר 6US Uu{=u(G[,ع<)j>C1}}TnrM*K로pY6`3 õV32=_UTu7FtWp r 'bPG3IMh]GbDCIdc&[ !.0ksIUepNg[yPem}.y>@yMyɛB=SYmA fm2}ѹIBH-^: gιMF6'8z%Jp}Wݸ DA&[2!@]h$G<@G ,LvYX=kEz#^u<_h>OHbG6,{]g]y#@ l0^I ˕ +O9S[o&m(aYtݷMUoJEyn p^$I7Brqh09 \~(Yl B>9ȣdu}k! W7;W1l.xZM7g orA3]ݾp;<#m&wWM^.@zS5^(cVXŦ 1Cz|ф jL,s$QPLs?;z'ڋ,}lHP]߅Vq'2$gneơ7knu$(CMa.R>GAq}ӸFD6mTr@{چR#W\c)X!H&EAfnbUet'&)Ϙp*h@0"LBUְ$Vn5h1!Lp70:ֹRyEX0T=n\E4"]~ CB E;hu 4\m(jX.GnIpn}k;{|؅I~/Nu>hA)䨐9'\?@QxAhd:H &5,^I,C%>= żCD>rg]yguL8WkuLKNh3)Cf{9(jWm$57BEԎP^mYpn;vً7 Bo.U( Dj8Lt^ ( *ܶ*݉ (/%Q$Q^+6aMₛ$Dwܤtqa'o |CBP?K {v]"!+[sa9BE[#5 | ;{GF1{[djbfl-_}(ſ}G&Se¸*01pLva·LnWÿC`%7Ǧs뵑 _sј-/ɐ<YP_BNiʜ<2#7o>!3ϵ=dYde;.a%FHd%TSU%wjmGyn7MzMy$T͝keX;&Z7gzj}|VU~qAQF]pZa6FmmBr{ǀs2Ħł'αf򷸺}t [ś|m(G-e-G-[r<_,K)0QL&(@@;ly$:B销< c<>qm&c%?Km6DsP\ զirks90‚1\# V]2 'rܙaw[A*i=prpz+GhRSGK܁kV.S)yPP w@By_pYo˔/r[;esesöuF RA2j|(es97ΞZ&6 f"s(#Hi<s(H1V Ͻ b0@&9(4siǟ1lO1MC8 溈q8:xR!9.R}OC|k.&Bw0Ej$#s]$a 渠̑q8A ރ A\3yU/u0c0+Q/+v2xa^tdR/[˕CRU\ƨ݆__~^ε_.cn"к^R׬To5W** Z * jA~RAPYg+ku*u*UtTvM/pTW# Gpb,Ȑ#x $g8U8zPZ]Ѡkc먮c!=]H8 pdzǟA "ñ9cF|J2!;܇Ȁ\aULV"Qʐ=ܟD'^Q{~gM^c?h6rm?_~7vk-@Ր/(]8#_h(-\4cʦjkͺƁ߬'W.@)zCyuu'~M!66o1@uλZo}3\Vp92$-h@ #D?3wHU< (8e^s%OQ[ x kU5@8!2 LG|vN۞c8qֽF}^w.Յs 9Ds(qka~ή})}c*(.{"bpCD8 u<<4$Do\6@2]GGdkrm+@8nR(2Nj|]^G4P\rߍz5.f1|@!Xd{BQ;n\#A~7&w>#O% 5,I7No|7~Ò9]7TJ@rJp hJ-h$dBp[²RG#<B|>SyAmg+B>\CY~)P۳"(JWtFUX- /D{5]7IENDB`springlobby-0.169/images/exported/open_full_game.png0000600000176000000410000000151212105760277024214 0ustar buildbotwww-data00000000000000PNG  IHDRasRGBbKGD pHYs  tIME;99{DIDAT8ˍk\e{|4ކXjTmݹuBJځ ")D+A_4vj@v;sgr3s}"IAy~8G52;4:l@ CF+?ۉCggg^N'2NT5?F*#ՅKǃ-y(QܸӢ]-\=v}dPY;[:q_4 _˹aS:3EڻGo|fƮ<;~Ɏx'BYx{`fȷ P)W/i -֚4[9?a&tӂ`EOd#3YnX ƙo .j@+JٸMeqzOd[ kWh TffgR3=[\Eojzq=ADM&V-_s8m'ɹ>~'VK̶Nn`D$mQGTM:b~#R A2 %ج|P,Y+ `;`Kѱ]$ء |5'щvܱd )讇=@lTOs /ʀX Wq"k_Y\~ Y(l!/8[N$N!]MeOr?0pAy4|ueq6WF8Ro j 8IENDB`springlobby-0.169/images/exported/open_full_pw_game.png0000600000176000000410000000156312105760277024730 0ustar buildbotwww-data00000000000000PNG  IHDRasRGBbKGD pHYs  tIME)n$IDAT8uKh\estf2tN2 h*UhR.\kWRZ]+E܈*EELM&ss3̜.ҌT}<`*>#Fk:! >:{O3/=gNNŃD.Q0M9j=*?>|Y䓅ұ#NFƃ.z@#T%̖rasSK_/.v=9rG[(οpc4/w5[p+oZP?9zAqc 4Fl g eQˮbeC)|*s:^IȱIr͚|967qXǽYFn",JZˣ~Ox"ʼnG.[W _|4>5q7^#a zcE~ec0c[ k+\Ye͈ҞMɾUA&ȅ;ir\$ƀ[TZ=_GOmrhPizb]1Z֝'z_lwac *Fu5 k} :'gKڄBT'!=@l D/F̳MQ߼rݿo l (;jvlRQFMn n1qiͫ gg3kUF ro7{j/%p% >IENDB`springlobby-0.169/images/exported/open_game.png0000600000176000000410000000132112105760277023170 0ustar buildbotwww-data00000000000000PNG  IHDRasRGBbKGD pHYs  tIME, QIDAT8ˍkSQ?{i)FD@ѥ?#3t5I\AIE$//:4- U<ws9 Z{~lN]"ٯݨ>j5lGNvSW7k::sVkϮlVlmF+9EZmIaT*+zmk~jÅAܽ*iMigْonvuV9eZSȜBQȜ1UFL66Vi}85tpʡԟ+"<р3< GG4 (g0lͪd:bP8\N` 8}%_MGQ)1D)! [uӏmtB3"!8y\= y f3,O< 9q>ME\/.z0f?7% HBM vb)~$IENDB`springlobby-0.169/images/exported/open_pw_game.png0000600000176000000410000000144012105760277023700 0ustar buildbotwww-data00000000000000PNG  IHDRasRGBbKGD pHYs  tIME(&ҕIDAT8uk\UΝLfN&&v  (?" RtBp#E+nDPD-|4If2ܹd {8pyy) D`w VWWoT_\VUx46oz[nt{ hwZLVMJ<*'ν7tjvp|ܕ?[JŸ6(d匼tA iZy?ڝٵ/Ym+X9NXX]0QDfo}H7nftaz@ y48oqޒGc+{fHtRI]_=T#AF"ē1qVyt-y@Qj r2d+ aJvUGg<<`aGhĘ}g'S7>dC߻ta͗zg 6 G`MU ݞMí[|}$ b7>ȡ&L"ƻZJYi޺dLD Al'c@p \źx$ӘbPF܁'Nn1 2[x&9xOmOğ\jlKl?"oGQ%>u>~潏UjrJEeh>D4EIENDB`springlobby-0.169/images/exported/options_icon.png0000600000176000000410000000406412105760277023750 0ustar buildbotwww-data00000000000000PNG  IHDR szzsRGBbKGD pHYs B(xtIME  gRIDATXGViP[>Oi$;f6n&).t u$v L q$!N:NgvR{m&vPEBh{lw}3w9s9?ij/{ Ag)7]t=HyS/DF"p0knn7$n6Pn:rpCAo<߰~Q peu]_tCzVڳnw'+w|k0xq49qX홙}vmfuMS(s,6[pgXsT*"=;#mMlc `@%BFFS=Tg|!f{]/m@6!Cg3JFD:t"8AZ3py>O@E6D; iibM0A 3S3Uu곲/H,}Ě'ybqT1p8_EOƠiJ><}?:~edgc#I2m3铃>Tæ=jX,p:h$b x2 `!: *,-?rp0oM?SSG_=  j&b#C~J vE"aYt~q+7h wʊ* 88 . r9=n򕁾pJ'ϽTQV،lGSwmNwCd>04m+/II+XLfl0H2}MKK29!_,c2)L~jw5v=.97A6  K /,<.@OiZEzm#1S]S+t8 Hnw/L/vS !&'u<Hwnjw@ .QQea`''6DBKbWL+_ >1c_KW UEW1Ώܻ`s>$l[TOryUl>pIG<6?}لIga(a{l8`Cf>*p#ǥB?135?흞h$' ɀqwȸmmbOʵ5Q~%ȮFN·[WWacIENDB`springlobby-0.169/images/exported/options_icon_text.png0000600000176000000410000000234512105760277025014 0ustar buildbotwww-data00000000000000PNG  IHDR@@iqsRGBbKGD pHYs B(xtIME pIeIDATx_hSwǿ]܍ 85}}v}-2)B_  LH^`B76'}Cj}i4FEۨԈk%7{x,v+ԍ$s;@ @ @ @ ӶK ye? 0}d7*.:5h\PPrF$G `a1$I85Mc(\.䤮:8L?,}g[h3̖}M_*:/tx@ r N70I0<55E 4?‚ ߿_-\]]e }4f/Me=HRPH&,:ͼv鴦۷oש:>}jϿ\ P$^}Or4JAյv7cIl˲,ZZnjJYifGL&þ$ϝ;GL4ߴz'(IRT&&&~} PU$4|HDTe>ѣGIdf*L&|$D"eA Iu݊jFƞn.~$:tZוJm (Jxmoo'wS3LmT*1… |>lY9ݻ%ޑ#GwnU[W@'ǃ={ɓepyyٳtB ˠE,V߯DQ(B@vI2J\$ID"Z>7TU5TU5|F6SѣjRǏ pxpnlll ZMX*2FFFV>}B`A̰4mܴ5Eslo&,YuV[4AFކ_^>) C>mW3;}qV @ ` '^uIENDB`springlobby-0.169/images/exported/replay_icon.png0000600000176000000410000001067012105760277023551 0ustar buildbotwww-data00000000000000PNG  IHDR@@iqsRGBbKGD pHYs B(xtIME'2A8IDATx[YPTW9h( *(C$xSWT]ԗT%LJRƧT|0_7%B&Z$ "DdTfh>þIHwWk}:'----XL9j:G$BAoܸ=uj/INNNbY6@6˲ Ͳ,8LggX7DOјN)]òl60ق  zjb .11z=FFFߊM&a@ZZZ k!j:Gg$IR ƍI||>>.$ yyyw., JłbDFFaX,X,AƍD&ɴ Hrrr0kaY6%,e˖\`` zbb/hfSс'OzF~xB|Mt:jT*pJ)_qL&feT*():,'!d F(fggӌ .)) Ԅ$ RPJQRRݭ[z?W:o۶ ZhiiACCr ?00&5<_βl W{gj/_E)=WPP@333'N@qq1XENN92і-[N)$I8sM㑚 RRR~z0 !wng9^ERZ^:(:ƹ ᆱ$ (O͛aZQTT1ѶmeW+++A;wBARd2FGGN#zKxR]__-}l 8{,~ml޼$!..Ǐ dee) (--U7ހJR\__Oy٬fYVt*_ \5LV0F#yt:<~zF?^}U0 I@ZnGjj*yEV+zzzPTT>>>D__xرc;aܹs&VTT8 /eΏIʗWTTd޽[0AvڅǏ#''t:R:tJ:/$U߾}[%!p8.<ɓjܻwo0::Z[XXv</  $$/2s̙WVzS󣔲Ӟ14RK)e#IR5gg7=|z 99 %(((@JJ Y\MM ***"22 eY!544!!!J ||| ͦ$E܁F!\Պ8krssa00r/͆}oݺu*jӾ}H~~>233<t:Pj~z 6mBPPǸu)AFeeeJ044^x.Qݻ^ײw^enBXEVVtr3@e0󼂰/rss˖-J>|~]]]pAc!DYYL&502a!//OIƜN`,˂apDB<ؘL&Ԁa⋐$;fq5lR B>cTUU.)Uto>ݯ!s*v@ll,L&u622V^z ~!Μ9q199{!!! ;pE;- ߏR'NU}edd&$$ &&o y(ll`Y{+ctten A"QTTTx=11ٌM6)c벲P\\ z`TTRRRq._k<0#$l!&&| Ο?/[ѣG]Jn}>#---Gtt58q˲ nݺt7|?cmW\A~~>4֖jcDDDxun疝Cӥe҂%|(Zy&"##Vߖt˖-Q 믾 ٨nV5~:azFV+ lJ~$Ip85>9y .q oYK$Iqa0999DUQ4**Nkת]Hλ 6 ;;GEFk ^k`@Vcll s2R#**j`&UE}v6~S>$I_x {, ^pLjgq>Ϸy{b!Y, v744$LC ~L[< Y~,b3@K)U9Sq,Щe&7N@ܪCSgJ)ZKSe,Rm7 8rntAMLLp===ζJK?Wjj)G,D7@p8 t"b2}ܺ0!~ʪIENDB`springlobby-0.169/images/exported/replay_icon_text.png0000600000176000000410000000274312105760277024617 0ustar buildbotwww-data00000000000000PNG  IHDR@@iqsRGBbKGD pHYs  tIME'$]tEXtCommentCreated with GIMPW>IDATxHg^ɩȴDnWd?FheAP$,jcp#sH#* 6.3*)IDa؜vy~ʱZ1|}>}Ioo$!8QRA5g͒}'|tC'Ɯx$~BI$즤JI/%<++ GI/А566F{{;k׮u?߆ }v,)`ǎb1#++ ImmmN/oK.ƍH:9~8=b||ZSLJl_d h ^СC&+ZZZ9sS2$զ`Ϟ=͛8r***hjjBRȾsN$^v իWx3f̈lٲL 4 R?'ARL@(J%@ܹs9s O0r!iŋXI?۾s욮M풒$$J D@WEEE$vy,sMFFFzHz~=zD&%( :u 5k n…a޽nhaaXee寝}477FG.\ʕ+S]֭[GNNعsuYY$UݺuA =///2n vIENDB`springlobby-0.169/images/exported/single_player_icon.png0000600000176000000410000000335312105760277025112 0ustar buildbotwww-data00000000000000PNG  IHDR szzsRGBbKGD pHYs B(xtIME 4VK:jkIDATXGVKl\W}ߙ;I: + Z l*ʦ,mP *+n.S TBTHPCqm-;q1{>9|gH Ұ#}9D}+WN3#G$$V  )HAX iH ߿k+:/|\rVaEpQwgൖ.M/^aڍZo$d$NJBBkmv Fv |?`8\uj~rwdvr's.־")3Rɳ-_L%arF-$Bce?S/~p[z[Ȓ˕>F21:ZazےRSQ Ck7m1E$`g巗2; زbLk*?"wZ0>R)ض{ߘaH3fj$AcSq?{Zz @0j\ȣ34FOME;B{5PGuیߵ\P.Ek[iq AtW  Qpؔ5̰I&Hࡓ4PtU[H?,ѩgRɳ5d@*BSgήvO8mqO|) m9qN*=CR^ABkAE3Σ2)jQQaHRT ۨ_C?ݑs;lGj|֣U;DA{wi& n?5"8JD_|6He-&?r6+8,l /|E#ӂSSi`00nlǛ\ onӡj=OہI/O$0#vcB~fSs \rv$uVk V/\;uUo 5iqo,IENDB`springlobby-0.169/images/exported/single_player_icon_text.png0000600000176000000410000000336612105760277026162 0ustar buildbotwww-data00000000000000PNG  IHDR@@iqsRGBbKGD pHYs B(xtIME(6svIDATx]hWnLMZbKCPFKE/VQ|HZ%iD+X 薥IL,P %c?'3,u׬dW-sf91 q0؀Ē8}/Ao7$A"cbȑ#$ NNjD}RǤĉ$rׯ߸qcB/LgC0Wg/"@&<0_|(y<dvv6\%c:6C 6vK~_n'_3 K.--O=lٲƔ@ nܸQQB#I޽{GڵkI~Uj.t8cݻInj.[z5I6g|S )I71vidii)8"@II G$fQ]1_x…p@qzz:IrrrRikk#IN.Yd*$cI&@_jj*WXS t:T. @ZP|>b!tY)z*p0}F;v$ "k 55U9sfěckHO>Zr@SSIr͚5*Gt6}WVV>w8VUJOOI; It2''Ǘ~T/]`}}}\`Ad2zzz'L{Ie`]]]ܿ?f3|5 ^{{{[F&2/^ +$qppPt͛/%J}x@8,BqPB#Iht-Y0-Z7ނߵkշbvر֭[r(u%KćiUOԨQw}/q7:Iv` Odff$Y]]M7b0bHZ)״탈"W4C2FΝK|lΝ$IYc:uJkεֹSټrp O~MvC Y>l22BZVjٳg $Р0]WWG"qv|߼ycX > 0?dLIIїβja(3 ReΙ3U:ϟO&%Ɠv^|###T%|]QmLMM Ir۶mp$ro>g4 ]@$eW Z,1 ( [[[ @>tIj^K. Pͯv_bB!dZZ|_XX-LF*|vvv1##BwΝ;$-[p֬Y+WDuPϜ9CpxԤo p$ۣm4yUVt| ΂"rU-TZ,_{!I>y&rtuR3f`}}=IЍwZm?gX%@ @ @ @  1cIENDB`springlobby-0.169/images/exported/spectator.png0000600000176000000410000000133312105760277023245 0ustar buildbotwww-data00000000000000PNG  IHDRasRGBbKGD pHYs  tIME6v[IDAT8OSNA=U= 24(0 hbhܸ01F.ܻ11!Lܘ&Ct#ڼfGOw˚^#@%wQsNpҋo`3SA/&/B ˳rOT~Ôu,0Owq d IEZDjvn҂"kKWq06}||gNA)E-$є$xt?>A~~`hpgoܛB@I އD6v5 vBPJm#-X籃 R>dF&TypÀCa5&ј6Y-mlvv+ygN.HQB?M\53Dje0w+${1,.L ցԕQfRPryX l\whw"Z!n"_Uic(7_L##Hԃ`ΓN/091+ IENDB`springlobby-0.169/images/exported/springlobby_64.png0000600000176000000410000001172712105760277024114 0ustar buildbotwww-data00000000000000PNG  IHDR@@iqsBIT|d pHYsu85tEXtSoftwarewww.inkscape.org<TIDATxyxT̜$ְ#PVi?q*bX+Xh[SYpV*ZbEA6e 4N̜8g$u뜙s}D7jX)RJոZ퇷IDD)j@]PJ5u݇ի =x'd~m6|3uvTD@[eΟy2_>w?}+Oi喠Y+fQ9yh' X-R8Wi<@+M;gfi/IJLJ#JJV!z(tFi6p?HO-KO wJ/ڴ>HbHO߮7[Z5u׳ԡeA3ֳc*J)X|)ƪUׯ۶m-Z:v.}TDZ}8Ѷw'!?{50QJ]JW5Onv0' HaᦽZ#"M4M۰bŊw{f ߨ]nl|R*ϫi~ȃ&uj8@N82tmݘ7}MyK)uW|[6wvFa}F0V1PJ=|b!FUVW[ /:ޑ5X0S7 F#$4ydмn NQ$ha[aZi)Yx>}.m@mZ0eݾ@Uܴ|ޝU*vR~U{gׯUe~g Tux<3g$ 8 .Q2oܶq3K7=n0󒓓[& ԡY$&'d!0hRj~?^?:Gm7=SEd1^˗ԯ+ 4t챖M"7avӹS;҆w %,~'z,+y-|6Rh)]={ç }UԨF R&߾zQj%dѤ KR"AW.V剧77,QѡeJw'!Yu\`ɼ|}{ ΐvAn|pnB[Ҏ Um~4OUk+%((*kdqЧ< >0y+*3uV`(7lgFŴ,{kpI\' Jl:pB^W˲/[ΌZo>3aGXzu}@ey ~ H(H'#8pʘ2&_S o/@[2]gӴf,M̊Ƈ;5ޛ .;k#&2)ss>[Nu2},|V2|0O"PDN4m۵io1LJ=t`ty+|ci$Dh c0{f-bֿ.SWRJhoS zd y_!rN?`ނ{CPiW>LZ: ayuc yVf`j&I9@ ^`b0MS#wbNy&$32V " v iZ >qͭ׵vM$p]dgmQdFL,'lNum vc!X}Ӳ 0-OۍҠΦ٬{5٪,dx|aeV OekH;ݐJvm)2uĴ}/dL1S8r\Z3a_VQ [ kEؠK4`v!%k3$h&״Yw=Y {]^{'PLy͝s5]ñ"noc؞Ibb'>m7 \|>7#~#+} ^>ZtjVgL3Kѩu:n™ {n&Xu7cziÎ3OwƌN.GG}Hc!U R1 pc+L´~fεl3Io\" F5}- -Z`,#ݚD}<iV[ā\KbeX2 e#ԣu/;E@2 \ JAvd=Ed8>@Dvs}lYA?햀Y') i٢) RG5 1fOxSCrJEek;>3$DP *c s~CAZbaŐ`)[ L zD\}!ӿ@#$" :nl _t"bkϣm y 1AVbX7bU Q|l'B _,BӴk_hȽ;NO DѱRDWJ dW>z*0/9 ? +i#!byc q}0M8S 9P#D܊}(Т)ԯ g9SZƙ2JӒ4)g|*XaKzsGK׷mhwOLn!>cؼ17x'">p)̢028oǹswLM<}'sƫSް '2lX' J{|NJގ!&IEдsn]Es (gp"k%zmn,7FS?La9ca;E]+V^>V;0mq+=ȁM dOf mʉC@Y>?z 8Yw}DuU|L6$>/ PC@jT r]V[#GK(((ƎyAޙSJKsΞF= 9OF/lz$u7Enqp"0sξhĎ1 ӃmҰ771 a8[mx{oň>>枊 %N.+/?<o?Lu_FEpD/LBitFꂺ_+Vw|J,jH0+~M^8G`>8}Z4MB0vg1ZsM~.!Gr"NMn|x+ ¯G?Uq[0q4'![탺MS"׫Tya긽Ixg7sǭo#1-,qzװ_Y9eyaB)U 8 }SࡢK ¶8o]@pmKHmiQè›Qw,  {-v"!-;T5yPr5> 4*;³!dߋ[bpH ,rPWtza7ʥuӉiک^\bkKPo@39"2p\, SF>uw}eN/2)75םP#!c+}ҳ% pH|x fCRTXؠ"*χCev?__,,`x+JCB;uj$"~ӊ,!޷w>"2~9PJ>~Р>L{J~mr2Уw=i0PD2.K/*tjЭN놝7vBle& `zS78녜/8} YL?U)" (݁bEZԿ4T*h 4Z5C@#"EW?WmT/\lIENDB`springlobby-0.169/images/exported/torrentoptionspanel_icon.png0000600000176000000410000000135712105760277026410 0ustar buildbotwww-data00000000000000PNG  IHDR Vu\sRGBbKGDC pHYs  tIME 5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPًo.IDAT(-OHSq{Ե́7T)E$#Y:ԡnҥ[D]ɤC:! %G㵙ηM{{COpCZ6-ϗhC@mƵ{K;q sAi˲ dEn²~y,d70|TAضF5r4^KO<r/ŢmEI/Σ]Z$֐݇+. Q"HT %TO 8bv-mk)MRDtQ  ÄWrbHzU،Aq꫃u֡ ^A6m=fe7(%`l.8:;+6H'\ 珩(X/UѸ ̬onW%[T7_JE~c*" &?,;f</i|M/a14Cmi.@wTw$tU((W-;'j6RΌ=8'D#T'uE;k8;d>IENDB`springlobby-0.169/images/notifications_background.psd0000600000176000000410000102202012105760277024456 0ustar buildbotwww-data000000000000008BPSPJX8BIM%8BIM$9 Adobe Photoshop CS5 Windows 2010-10-16T21:26:08-04:00 2010-10-27T23:51:38-04:00 2010-10-27T23:51:38-04:00 application/vnd.adobe.photoshop 3 sRGB IEC61966-2.1 xmp.iid:57ACB26146E2DF11B19BE5D066B605F1 xmp.did:56ACB26146E2DF11B19BE5D066B605F1 xmp.did:56ACB26146E2DF11B19BE5D066B605F1 created xmp.iid:56ACB26146E2DF11B19BE5D066B605F1 2010-10-16T21:26:08-04:00 Adobe Photoshop CS5 Windows converted from image/png to application/vnd.adobe.photoshop saved xmp.iid:57ACB26146E2DF11B19BE5D066B605F1 2010-10-27T23:51:38-04:00 Adobe Photoshop CS5 Windows / 8BIM: printOutputClrSenumClrSRGBCInteenumInteClrmMpBlboolprintSixteenBitbool printerNameTEXT8BIM;printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@oGrn doub@oBl doub@oBrdTUntF#RltBld UntF#RltRsltUntF#Pxl@V@ vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@Y8BIMYY8BIM&?8BIMAlpha 18BIMAlpha 18BIM5N28BIM528BIM8BIM 8BIM8BIM 8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIM8BIM8BIM0 8BIM-8BIM@@8BIM8BIM5PJJPnullboundsObjcRct1Top longLeftlongBtomlongPRghtlongJslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongPRghtlongJurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?8BIM H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Km8BIM8BIM 'I  Adobe_CMAdobed            '" ?   3!1AQa"q2B#$Rb34rC%Scs5&DTdE£t6UeuF'Vfv7GWgw5!1AQaq"2B#R3$brCScs4%&5DTdEU6teuFVfv'7GWgw ?̢Uouɥ>Uo*]Rs˜m܇vZ[YM[1t,J:KZ_v>ŧvo?5znM'_A;u_7ܙ/ uU)u+iNe6Qk^{\=;Z=]ULSV}F=9[=;?-YbxxAmIJʯKjwg꾃ON=cѓ%]F lVbc_-kmή/ltfM"i$nAgݕԬuY#vz-Ӿm@am 7`z=h4t} y*FSoS0ti>SޖAKU7+U6s◮|UMoJM;Hd@TJN2e5$2ʝ|!XhT)zEk-U/cU;M}j'U/7+Ն6v2!ޖ例7{ ]VncAGupgV-ZQ9uUkq{c+VA'Fƀn+ulfNK[ic=0@-?8U:B"c?uW7tHoCzW^QPwTv;ͯe}[i*Ћ?1.1iW*<.s!%l|:2$?s#4Ԣ$MlWڶ$MlIV$MlIV$MlIV8S؜1%)Pkb()V tV3;]N {Fz=F}_\Xߪ꽮ȥk6$0{|~zһ7_QS wt+_z;oW:^>.'MK[zVAk>Hk[yH{~/Uqq8"7g}3*r:~/?SЧQ6~Ė)Cj_󚹸; SxKg/,I%jxKg/,I%jxKg/,I%jxN+g/+I%jkg#zA[u)"8BIM!UAdobe PhotoshopAdobe Photoshop CS58BIM".MM*bj(1r2i R' R'Adobe Photoshop CS5 Windows2010:10:27 23:51:38JP&(.HH8BIM maniIRFR8BIMAnDsnullAFStlongFrInVlLsObjcnullFrIDlong]FrGAdoub@>FStsVlLsObjcnullFsIDlongAFrmlongFsFrVlLslong]LCntlong8BIMRoll8BIMmfriD PJ8BIMnorm <(Layer 18BIMluniLayer 18BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMshmdH8BIMcust4metadata layerTimedoubA.L#8BIMfxrpPJ8BIMnorm <(Layer 38BIMluniLayer 38BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMshmdH8BIMcust4metadata layerTimedoubA.L#w8BIMfxrpdDPJg"g"g"8BIMnorm <(Layer 48BIMluniLayer 48BIMlnsrlayr8BIMlyid 8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMshmdH8BIMcust4metadata layerTimedoubA.L#8BIMfxrp|`uPJTz8BIMnorm<(Layer 68BIMluniLayer 68BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMshmdH8BIMcust4metadata layerTimedoubA.\8BIMfxrpPJ8BIMnorm((Layer 28BIMlfx2nullScl UntF#Prc@_?NrmasterFXSwitchboolDrShObjcDrSh enabboolMd enumBlnMMltpClr ObjcRGBCRd doubGrn doubBl doubOpctUntF#Prc@RuglgboollaglUntF#Ang@^DstnUntF#Pxl@CkmtUntF#Pxl@blurUntF#Pxl@9NoseUntF#PrcAntAboolTrnSObjcShpCNm TEXTLinearCrv VlLsObjcCrPtHrzndoubVrtcdoubObjcCrPtHrzndoub@oVrtcdoub@o layerConcealsboolFrFXObjcFrFXenabboolStylenumFStlInsFPntTenumFrFlSClrMd enumBlnMCDdgOpctUntF#Prc@KSz UntF#Pxl?Clr ObjcRGBCRd doub@oGrn doub@oBl doub@oIrGlObjcIrGl enabboolMd enumBlnMCDdgClr ObjcRGBCRd doub@oGrn doub@oBl doub@oOpctUntF#Prc@IGlwTenumBETESfBLCkmtUntF#PxlblurUntF#Pxl@VShdNUntF#PrcNoseUntF#PrcAntAboolglwSenumIGSrSrcETrnSObjcShpCNm TEXTLinearCrv VlLsObjcCrPtHrzndoubVrtcdoubObjcCrPtHrzndoub@oVrtcdoub@oInprUntF#Prc@L8BIMlrFX8BIMcmnS8BIMdsdw3x8BIMmul 8BIMisdw3x8BIMmul 8BIMoglw*8BIMscrn8BIMiglw+28BIMdiv 8BIMbevlNx8BIMscrn8BIMmul 8BIMsofi"8BIMnorm8BIMluniLayer 28BIMlnsrlayr8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMshmdH8BIMcust4metadata layerTimedoubA.Of8BIMfxrpdD8BIMnorm(Hue/Saturation 18BIMhue2dV;Y--KiKi;Y8BIMluni$Hue/Saturation 18BIMlnsrcont8BIMlyid8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMshmdH8BIMcust4metadata layerTimedoubA.L$p8BIMfxrpdDPJg"8BIMnormtPJ(Layer 0 copy 28BIMluni Layer 0 copy 28BIMlnsrlayr8BIMlyid 8BIMiOpa=8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMshmdH8BIMcust4metadata layerTimedoubA.L$t8BIMfxrp>8PbP i8BIMnorm`PJ(Layer 08BIMluniLayer 08BIMlnsrlayr8BIMlyid8BIMiOpa8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMshmdH8BIMcust4metadata layerTimedoubA.L${-8BIMfxrp>88BIMnorm(Hue/Saturation 28BIMhue2d;Y--KiKi;Y8BIMluni$Hue/Saturation 28BIMlnsrcont8BIMlyid 8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMshmdH8BIMcust4metadata layerTimedoubA.L$8BIMfxrpdDOJzzz8BIMnormW pPJ( Layer 0 copy8BIMluni Layer 0 copy8BIMlnsrlayr8BIMlyid 8BIMiOpa=8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMshmdH8BIMcust4metadata layerTimedoubA.L$S8BIMfxrp>8NHcbbb8BIMnormL(Layer 58BIMluniLayer 58BIMlnsrlayr8BIMlyid8BIMiOpaJ8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMshmdH8BIMcust4metadata layerTimedoubA.L$8BIMfxrpdDPJ*bbb8BIMnorm L(Layer 78BIMluniLayer 78BIMlnsrlayr8BIMlyid8BIMiOpa8BIMclbl8BIMinfx8BIMknko8BIMlspf8BIMlclr8BIMshmdH8BIMcust4metadata layerTimedoubA.{&Y8BIMfxrpGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG!$$'%7%1).;"*S5>B00$1,."$ !(&,#5&"%0"(:1+.PNL0*/$?m'!'6&/"%&"*%#&*+-1-)9rɹ륏ɺԁRo@8=97//2232273AS>a[lq{jeoP`vNDBNNPdnu۞kWѶus`NbkYaoqiw}}{Κн갯牰ඩ "!'&&*( ) '5*1CE0{wJlll5DGI9/979343;DPG/MPCSv֤|}rslligegrZ]lix|wq{d`⋂|tqsOkelskblqvxc_\sw즖ųxwkζ锤!!"/ &(+KjA:zB*`N4 "25%*! # '53;)395D*")3"'ZF;<:?1,,,NZ 5.)/ ,(!#%*-$."'0,+3A>AO9Y~ޅe;F?D;<>96-694@S78HR>XЯ˯qkmlejjguysjg~XkZ~uڬtnmVlvn|_[_hUUPeeng|qro읱dz㱴׶*$!$",$%(9G^8BmI19KB+50 #'(.+*@4>A1P=#/;2,`>0FI)/83",#&/;,$ .'4,'+1#1.,389:QI:G͹k>C7:515753563:T@?>MEgɞzĮԸȌavnridr\[bqutvnreq\zu}寧pdesfr\a_aYVXQWTZde[hqnߣ~Ӛά||pl~ץ؛&(!$#$%!+"(.5O6E:-7OJ*%2%!',2'(B-4KAEG$),3'0sO;0A855* %&<5()-0(%% %.:5&/263/85B`HJMzݷٲƉxU?::@6168637624]D=JMHDixptn]X[khScyɀp{߭uZb_^dmvXvZYTRYggjkg~}{qԭײ𞂑Ȋqثɺ˕  &! $#*8**HFx:%-1)& +(64.!&&"+;/+6@?F7'&(!1Z?%qEG7/* +0" !#!>7#%)7>-/32;;:;8EKCOM~c>B@B974:806575gLALFSJRt¨q|wpl[Zgklbnpk̬ω`u{{|㞢sJZdWJnSgRTY[ZQSaqsmlum{ݢœqw{驨ȶ ( !  !&<+Pb*#FE1-)"-=)84& ,2""15431CH=A4"($0X @):$-" #=#'<-&)%F89)50229>;@K\z|4F?>=@2;651.=9pN0FHPUg^ƂҪ{xzyt^\e^ppouqgfm~tv{\Fi|eOZXWEWS^k\w|y^ewzx}}}}uxz|~zurɯxⲘι$+!*#&/M'F<3BK/++$!8&%2+!&"1##21254@O?296.&:3/8StI"99#$%..%02&&#(#_D3/-6?BDBJ\yƎvtQ6C.9AA5<11128ApB=Q;KVfy򃉯}w}uwhb{mdknqvyu^x}؁k˯]UvVgii}vhIYZK=U{pWr`xmhzst}|}xӕ~۷ !#%)4#&?[+C[s'88F(!&# *%0;)*!#0#)6+&,@EEF8.>($*)Vk}(#*B5%*%-,(*Q.,7612CE@WP·x}CA=3<>2::)095T_NEKCBUcluuj{oslopekokcv|~{sݹv>QLbYSee_ym@KI`hWv`Ychlmn{vzt|{̧}~{z|Ѝ4"=!JDBe9p54356,&0&%53&!))"()!>A558))'83leVT"#$!'4##.0*$0(B=|K2BPOGWjcí~kknqkhjfj_b~۟wqaftnVUbףHW\Lfv`tgp^Y]uj^ghn|s{Ŕzv}w  B<!""6G=QBN.86>-*:0%,("!'&&+&&"% *E8/(MU(,F,>.?B%.+%+: "C;05;\dJl+3B475/452/:I}C>=KPT^gVϛ\nkrf~zpffmnm`\pvzձz{cnsad\w@mQDLnzYrcUxbTSn_PX|}~{}zԈ}s}|t <%;/)&$R>FC]W6I6".&*-3%",4"%&LJ.&`b#*2"'1 +/?-7))8 )4..8&yr08@KNGk@5C868204/4(%# # $06)<0),)0#&$49!"!#0/'#4.#3+)0&"433AHTӅ{t2P787.557.67_O*5?GGOVpdNx쐅}yjntxleqvjlpx}˫{k\c[S69c>5WSNNVWANWF;VHRbzbcx{кՏw||}w|}~&5+&#,/!Ev:SvREQDU_]TUP/!%###&()'/!!"# #&70+-!(3@#663 ,->*#& 67-'*")3'"( DB1ZLcxz|~hvpixD?6A>98;>/46sZ%9DH>Kbyrzșʝxsxntnnitp`jp|،⺚{b`lieDGڟ*LR\TNKBRpjRH`sH[u{~}~|賡ȾÞ/"$/(#-"%#)zB[wWVbT;%$""+#!%(/-!(*'))(6O4)0#*"#49A.#"#(,2).++#,(8!.)$ybQRnťǷukU{l/8AB52:7989md(;HJ@Sk麬׸txvyustqrtmf{Ϲ縡}x}yhabKBhE?AMKXNPMT\SZI\cTdɤxwl싍{}}}|ž}"'$ 2'!.Q-',$YA|ybRS6.*)%!! )&'1((")1*,286@9%+--)22= #$ "",,%'0-2&%(@4$)#;|^d잕IA1=D:7CDLDQdf/KL@M^eϒr~x|~|Ȑٍٰz{nd|ͧ8MCKYJGHLF[Mde͗_V[ow{{~~qݪ򻵯#+!/610& :k0:I?Nt+`#BH=*%!)!#)-$/'" '$"$)$)%#$<872:GO]557HUOVPlXv|}{xԟؚ͕{qfcZe4PVOKJ=EINJRdɻUUe|ghy}ʩrimf]lpt{||⃏쵶ͬλ))&'-/96UORZ׉7.30' "$+($#"'"!(+*,(%$!$ 4+$,SW!32+7,231.25h|&%28:944'12H/$)8EFC7CISRaIJNRMgʎZ8F45:7:-;:Q]*8;CKEMU^{Jx}}xǩ㣭ݔ}|sl^jkAUMIIGGPKSqsyVlsexښᬚ~mo}ztv~ȴvͶַƊ! 6/#70"+E=[S>2pvQ,&%'2* (71(##$*.(&,3+!" &/(52$pg?X38.4.56<9JÍ * #""%0-,1,*(R5+.::3DN?SbytdDFIBEeyسd@IR@96601/?;QZ+>B=?9N]L}P{}y||~ۡѻƊ|sp`Xd]PCRUJ?HCJPNU]|bWhk~ʹΦٌؘt}O}vҍ媛럣ɖ# =.'E"!@1"@GK*]^O?3P@)(%++&'$0$"#! '0+%""$&$!#!66,,/7|@&`>/+5:7?BCj,)+/)%%"*))-$B5-0398?THJQszpHU]bNHXz}hRLGYK2;@>87MdOIћɤ~qreTYKIPRTMLHLMPNJmDepk|mົĞvtdڞ鰛ʘڦ! (%6(I020'";JJ:eY{^B$ !*' )&%# !'(-($+ "&&'&$!49,,73?JTG7+25>CSU[E)+%%" )74/$4@+51KC;IJSdvɦx`XQTUax^S\yT3G=5;;)54:AR9708DD?C\V{Lݩ՞Ɇ~vtgeUPPONIFHEOTUJT\Iihu´~zEpǿx忩ƣյ ((30E+&19 NE,8[[T (('#+)0)!," 0-*(!" 66,("2**38=#/,/$"3*$%!,'!$69/)(3'+>>>E/UcWK;7:=IR]ZḾ04/+%%$'+1../6@33OY=HVQ^{rnqLWls]l^QMX`B1;64JjB76773IGIjQwe}~|{ñ㬍~yym_\h_XMRRJGHUUPWabdojqxڽζ̶rͻֽ!(.$*-:BB-+%")WZV" /,<-()!,#%'%#!(,3/-( 0713B>37KIAcIn{vo|{z}ߙ~|ysog]ZYUUNRVSNL\\]cmqsz磍sz}n}ŸƩ$%#!&")3--1;G))!,=Loc50=+" -+)7/0$ $%$$(.%.5$).390;FCF/fTO>2695;B?EQIR`uxt`OP7@HU`t5FF?YNG28SH;>DF6\M5L]~b|z~Ȇzvtpzq^\\VKWSTWPW[^ci|{ybuל"&%' /#-0IC,0+8BKfr,2.+)4?226902+#%&,$(/1.0'796899DJF<_GXF4/5:Y[HyJy|xR}~}~~pj}wi\V]^TRP\TQV_dmv}x󆏒玉ʲ󿘞 '%,4*5'($O?+.8ELnO?7=38KE+'-*!#&'"%)$"%-%?<2:G9HN7Hj;`D776AAJWVuJ"3'+"2/(*1*%-3642:CHQddX쫋vu|RQTSbR\ZIaa?MG79?BF0849UZ]=SVj͕Lq{yyyx{蟆wttpmd]\h_SQ\Ya[cekt}ԝ鏍򔋆˨떙Ɩ!+*+6:I-&(FA7,'Om"[NKE?ER,),$)&&++""!%*(/+./*'@BE<>JQQpIerI|xu{}|{yuphbbbSX\Wdbefzrs{k¼Ɣ ,&!(("!587+/?A('IY*|0PTB>@+*!$!(2 #'('")#..8-.5/0E5,JC:>kVL<;C=?\Zqr((,)*&-1.)'*,'4<5EGFI\]eщ|nowhUIMCMQAB<=<>FQG:JPS^k6V[tjDvx{ݒ}xzvedvn]]\\omgsx{舅쌎|w댙̻矗%).0 '@B8"/ 7@&!?F^OZTSIE2)##))7," %&*65*6)11( HL j,KCNBGBGI\RB2'#%,,*)-1,/(*4.6?4>LPHX_S׏t[_OZN=ER@8?577<@AS?9HKIYL44=BCKGNYZIi|c^gst{Ў{wunjqlajhtqjw|{}삗˵쪞ѭ䁍~ڇ⸽Ѵ) (!'@0)!0I542.=8.RcNRF"(-'%)4%! #((.%0((&#-FKP2W>?sY@;:CJHE3)0.&'&'#'-3)-'(6747ACIHTPc\𓩕\\[SPWO:;;:49::JL/47@Egi5DDtCj{dexx{~~xtvwqqojq}yots{䉍Ŀ֫ι~kӁɘˮ2'"$")++0&(,(5-OC>EfVU$!03#)$" !%%/#+#">[CIMN\i\߆OVXWH]R:>;:9:8=>J5.;?<2<;@9ecZhiaTlrxߓ}yvntznngqzz~yyw߰壮η㒚{л٨Ƃ" )*&%;<**0'zh[afvTj]D=6-21.,1./*&)*)*+1(&$/D95@IHLQTec}¸ͱQ_T`V_U<==<;:6635.18;64:;D8]mZ`v@ZjcY^ahu}۷{wuxufuuy~ϯ۳z죍Ӎx!$&&-'3;/*&0%nXGqdgbm8RB5A1/872'&!%#%!'!&4 kKzZrXA?9-*+#+0..-5*0/+025)1,4C5?NLASf`dŠ[fM[V`XB=@B97105/-1.68@:=48J^~~FIMc\_bcdn|òyv{vvw~֔Ǥ{ѿ󮓷$/.)&.19-.75;`Ij?NRD}r@2+-FB221,-*'"&&#"$#!&A>")\FM@>;-+! '/+"&+6-++-2: +',?95IMLXb]kߓkdJUXPeHB;:;7-.502018;33-47e@YJ>H9*4-,  ' "%$'#) +??-%TTIpWBG>6=2*0&"(31'/20+-'&(,34;DHSRfjgtҠϼf[d^Z^D>;<73/27.-,098;=BB2Q=?_eYzx{|喋~vؾطӡu~íҜτ &&!/602K@Wx'PYAycD]D:;34*#&% "$'!%#)+'3;98-HDcUmc:JCA<@D.%//'()++*/5)$%(12:847AKO[dehϔ_[_]SNCA??<734811/2<<76=P8UKCtD`wy~~񓅓}~ρ~ԭᰡŽʸ˦~%$$#%#(69(4HCxw Ie3PGUXXA977,'  !&'$ %(7QD4+atJvWoW>JJ@:HOO5(-(/)!*0,57!'%).4:35BBPV^nƁֲrcOc^RIEB>9;92/2363088;99:=B]NljTsttty쫄}򊚟Œ㈗ˆҜz*#$-)4%!+A3xq?VR%Qo"_[SF>D@'' #"1/;;?;@G-FdV*dqW4SOIHLQV:*-&(! +30.3(+"(5,7<:A?HgZczܦnlY^eYPHEC>@;1./24504<@?;9=iVdiUjotuzyѭ~͘齚$%&(4<,0/5.KU)-+(+")24D757-4;AUYE=EDH1*)$'"('0=7)$(%$3,1?9=CG^X`ыӳovWWcSMECCA@<55520754B;C<;H`peRkt~xxǜ~{ɾ~v}򭜡 !"/X1&519*Od]aKQġkFWQ@0H?6=/)$'+'#**(*2.,/;=2/4-Ga}PdFYRIH@CD3,*)% -3-<8*&72#*0/>::@EJOaҮjYWbYOHDCD<979=70:95HIB@6P[nIpsy|ԑ~߾|㵖}tu$#)'+(!*=1%4;%2tsua^~ZcNH2E=/@3$) "'',+ ()56256.3F9\=}F_BZUEEBQXO-$)'%0A34..%=2(*++;9:>GOXbؔZjZlWKGHHL939;4=C=:5q_|Ims|{˼ϳ{rxql~! !+##$!(518/(3NrJȚFDQNAB6/4.&.2',!""((**9>25NAJUcP=PSIHJIPD4)'&'.?413,&3'%)*)9E9=GDNu멩U{UhPQMJ@?==45:=9=78;>A?CZZiGix~ãȆ~{¿ܮu}|s{}yxع  !)!*,6.1(5/R;hKVUNWS;68=5(3(#,$ (".*;=-9H=ewNUT?PPE8>HDS}auZ`QUPI?>==33737@;4;ECINQ3sDlxɃӈϘ}zutoxnlbjp{$.00'.5%)0/?LA{]O[PHCG=&-5'*$%-(&%+& ,0/<@69LJCoISqv\E-#13--==>46;29@?6HLCKYmEQ~Bny}ƾ琓y㨨¿~modUUU"%*+.%&')2,)AF9uxD[SD;488034(-,*$&$#- " ,,364BBCJVhLb}EDJK[SYzU/.1)5B(&%#/,251@>77<9;<<9GPKMS_TNuIoz|狇ɮܹ|sbsed #$%($(9;2)*,%8j};ZSSE=452(-8*"'*#' #)&&44-/2GNLJIima/A?4+:>72$&Ixo\J+&/6*)0&))',13??eYD^wǠȑWi[ZOMKC?B?>98>?A>@JLAUOlDSsz~̟|лŏ̱jy}|t|q(&"(;83.!1,Evwȑԡ8Q]ZJC677&%?1%))1(!##"$5."4OD7C=oIߔSA=<73::@@DFL@VLvCKzvx߽{зɓ忻яv~wsj}!""$'#'!6G,$/)78M^fHH31;,".7(*%'3%+-" 72*3LF5@A]T?M=IELIB33+0%@cZ-#""'#/'4?@LNdHXdϣҩUbZULLKG?@>=:8::?DIEMN]F^]ɨJzvw~ځݱ긋يƷݱs{hxye %$"+)#*"8C$&+/)n~wy-`OQMP8F-3@-'011)'(! (&%!"+'1<+984=EFJMReRZplyxx}|ü񻗠é뙆X`'#:%,+.5@''(=3Kl5;PYd_6=5,/<)36-47(/%"12%+.&-D16=I>@8"5?)<7;@A:75=/)!(2+5/0U>B4.16=/"?e5CUZZYWq~yM^R^YVFBGCB<=;9=EHMOBJuQlIt~{||~޵}pwzΉzlqnf_'))*4(#+4(@+4&?4FuˁM LJ^KGE2,6-1>-%32*!2.!53% "$'*7+939OG[f'&))06' #$!&+.%"$3KF6*4+*.:D0@DIXc`ZQ\ulu}W]]UXSJ@=?B8?=;=LKMGUM{]|z|~{갪ޟְ{q}trlrnin80".D+-#,"8,Dbkո~&3???I;*34*9*"'/,&45%2+$%' $#31B:=NK)ze.")(&'"'!! !!&&*V\.91DZ`[TwtN[`qzwvdXb[ZPMF;=;:===9KPOHWSuÖN{zxڗŴۘss}yzztsvju!# '*(&'%'.+(30Rdl0NH<6B>37(4713)('!%(/),,* '++B<4GSQWu\KGBA@B2*%!+(&,+)$"' !# 2v$/7/2>K^e_ϡgzxxv|{xoqc_k[]UZTGIJA@??<>?9FORT\cNwy]yᢄܼ짙Աwznnrrfg! $')*&$%585(O.agͼ5JZV00HRM4(3>.$%$.&***12$!%#-BANZh~ԔĞ}{}zq]`TNIFHGBAE??D@BCJPY[hYnhx{w˯wz׎gtz}{]a`iocf ,#+.$&5).-I:ReCM]J )KPT=58(!,#"2-0%%29'""!07N2YU>VH6%519564'*2!#'$&# !#'%))14:@w3 -9B<@SNYd}iȗhO]TJDEEFF@@:DF;GDFNYe`[uqzwǯʢĦs種՞rp{xnv`_iV[ikg ('!+1#'$#6,,5?=QR]}UdLq&6)P:5A72)$%+1'#+/'")+>5L7MSY`':0++%7?>:.*,,%).%-&67=)5/7IQ+4.=N:!0"!&$!#"%&%%#$*27HNE=;??BIMMEtTfp|v}z{v哅ҽ잍򓆐lkfkd^hmyl\c,'$!"!#)-% 9<2BT]@uL7rYbXI>:6."#dx&/9;>?&' !#,!&"0&)<-&&35 LNQJM94#8\.)((%-.0#!i]$!0@PQRJJOa{Ӳv\]XLNHFIGLE?A@@BIGOQOeiTV}n|z}vq~xҧ~ؒ̊pvq]b`fyZ]ZWW(72)%"",!(6>0IUB92\LM2*=/$!8=&4-QX+76;@<-8e*$"*2@9i[,6425399P]fg}nlɷ~ʑf[\RSOHKEBGFFDB@JQK`Obri牅~zunu|||ٟϽŠԘۆޚ_jopaef{VH\ &$)15/%'>0*>+C<34PhZWWYI8OD,+T"1&sblnE/!!'.#$),8/6E3$%3^P{ZQRKE<74?IG0*?w&.2Bb- bl/(#+698>FXMXO`h{z|~ϻZ`[QVPKPTNADDGEET[a_XgchȾǍ{yskjzuᷡȡᓧے~v}rqr]PipGOWo"!0/*3")5(?F>PWXP{dǼwF=A6<$1,$*'4T\@O*#%>2.$!28;M=VH>70GQ>;,,~($*a'7*/+.99??GVX_YYwfkor୲XtaWUPQVWPEGEDFEQU^]Qq}jǼǿ}zsspihw~{t̲͑~{fbsk[VfuO_ '&,-)28:3;4VYt?|lnd>HZA1$>46A&/g@*('!D]4%.?;''%89IKCFAEB8HN;5./!+&{Rj)-+-57>DI]bgyvslw^nka\UWXVRIHEBEDLMe_Qvl˽߇}wwtslgi{wy~wٲ跓ǝyenN !# ?M642:9G+sc{U`D[rv$7Uw?>)9J488' +#ZC-2*+# 0;'!+62-PUȭGTED?9BJ@/0-,(v=0;_.*&024;9CES[cu~tepjeb]VRWTOLLIHENQ`dVdnzyutqokiixq|~x|ͮ؜衖nhjm##,=619:8CH0)WZ׹=IGBF?=47:6)-,'(1$@S(-33568F@PXYiefujhj_TPOLIHLMGGR]Xa^Ymعvyztnmkggqp}x~̴קּԧƸw_h{%$")G""A,>3/*+50+.'$! 1(4!*)Pr9#1@6U>)EO1=N-KC2+,5+-1""D3>-)+,-58:KKNU\vrv}zlqvnj`XMJKIIKKGHQZVThXyzgαyzuogiorn|}ܯ{xJ68"1:/#',Q151Dk_5߼TDc:P=048+*/5''1!cn2 (kH(=MIdNpν.JC81PDCC33,/0A5!"Ju@>.(-248?IMRR`{◘kvyle^ZOKLHKKIDCJS\Uk`qk|mү{uvxmhprsw|z~Сݗg謕m? 1,#3<#O45.Ւ',0)#$( #  &$*"3"$* &5+%(MMI-! #,<`%'7!(# +)&*.-/07:8]ﳏºʔUg@;?C<.04451140C80UYp输~NYeJYf?DFNRUV]mu~gɨx}nzlVgf\`dklwuwxyȋϵɿԭ둚ͮ %"&$4'-A= ,=3!&*/! ""-&2"$$! *)0EG1J;  '/$/G%2=1&(1*#(18U⻋ܚ֛{^TIL@FF<6..7;4/2485iY.W\q|oJ`la_bGILKRVSa~omɲ~|bOchc[Z\_kmwxzڰƖͽݜ˲Ǐ !+"0)$"'=*`MEH':' .+&&!' '5#!$'(3>"<-./*1 $+  N!2%7%&*!!+3@FP~t\>LNC5972980/684Qv1=^t{jF^lcJNTmpUMMKWS\g|}jxtǻtyzcO_kdgjbY``as}㬅‹ǛؒϮ{˵ıҪѠ  "!324.5CqiD;$5<, '"*+)" /&".**k= $) &*68 /!1G&.!$#%!&,2BGHVyvkaXn|ԱoXEKNC47607:4./9Ke0NE><77782328@K7;HIBWz͠etpe^^[UUY]gTV]gXxpuyix}|}eesZlepsrppw{mdetļߪ〃~̰옢 ' $)Gc6@r\C\Q+#'.#% -,,)40B%(.V<6,;;&',VM ;*%, (' ),(%&20-2=?FI4Xٮu㎒v@H=B809;5,561>S87HK8gԺsX[^XT\^Yjth\adxlnǰptvȡxsitekwqnvmdfkia[[fuv|wuqҢ絙|ʔw匩ܨԵ$##:DY/6_J9MN8&*+!"'##5*5;-M9 /,2[1(OD&('%' , %!3:) '&0*")!%*)*1334LG?J˹ۻ}t7E@>=4::72332/#%%5B3'+00(# '1;1"")01-3.:WBLTmzz͓֑lrgADC?>94<825338d28DMGMsʘu~XZ_`^SQO]\TTjnmxyѱch`co{irYig_]`_hjee~xx|}~§̵{ҴɾΜ㵙   '8+(C8nG#*/3$!%/.) $5($1;:B2%'"2[;#`>A&!" (4""#A5!$-;9/%/4=?>@7DJ_wé1DC@<=<;5400?1;{TnD,+'!!17,1%  8UQ1(&1=>>@@9:0256:ApD,$(#$+($)"1'#7==A229&"?uX`  # :H/$!*%! :\5,0/,0A@CDIt<@B;D=657*4=7S[IE>JFY]q{yقalo]a^a`Wd[hb~s_}zöq̍^SRbg^ahhzIPYhn_zflqpzny}w{~~}zҋ 2:H><^5b:63<+ $-1/ "" 8<227-)$1,g`}D] Hh9*>M?='677E@H\Z;D<:;;:4,,70mw)ABCDR^[SהZabaj^\`_a[Zb^twŬ뿅v{nkojecleVhaaP\ajpe_jzni^^f|p}{zvn{wv|~Ⱦ}x޻   1 F'&.X4@FkR+-! '+#$#$,5>)("(%Jc335N2*' UN,2  %%7M<#+4*,+"'Pt^-:=@JY~nRAE8:87633:9d^7;DHGPY`ZԵbi]`bhc`]bdZbn{ywǥytzwselkccfnvea^TWW]WconpneEer~vnv{zyuz|~{~}}~}Ͽţٛ  0)3'!%&9V7DCZZ,+C87@;476273\<6=CIMOUcaZxٞrfjdacid]ba_aezxt׺~|yqiif`^TSqM?LLUT]_[a]\OlXbdwjszxĵyԗ{~   5&#+("?q5MgF:NJWdeVXR4%"$!#&'& " !6.(*!7B!.2&;38% %!!1++"#$)5$&(XJ6OQzѶzwtys|s}tvQ?8?><2:<129tB.=CJGI]feiѢÌyhm_b_cae[_ihtԝ§w|ve`kiiO`FOW[T]SMRpmQ[jS`zؘ~|{{}~֣ĕ $2#0('!r?VtgJTlW<)#   !"#('!$"(&+4M:#*(-% 0183'$&&(+#(# 43$$1j_WWl|ymezj58?=878276BsG+=CJFOehu⵬ƨcjhcbiic_[_hy̦ڦڵyzxr{|mgboVOlSDNPOZ__X\_ZS\acWk}|{zv~}}|ڿ噘ۆ  ( )M*%,NB}fVGE9&$  $* &/%(347B=)$'&*677    ,*# #!/$+M(#$%QygXaȥQEBC<87FCG>NgW0>FMLJ\ٶrlljdcedjloijutܾĿ୿z{stnlisyk;:IIDGZ]VWYRFDT_KQ]]o|}׹}}~~~ء˞ !V0%,+A=TSj'nM/9=;+&  %1$",/.5114%"'.=GC.& !#$$ '(M:,*$1-,@Y}sǝk:NDAE?@KMCE3jb)DFAJOZn쀘qopkjklhkppjmwت勓uylgsELGNZMNRSL^Tdo|Ѱvip|}{znѶ " )4))9j%9>,RtUmԚ*>58$# %# !(#(29'3-0*+#$/" "1!'#%'+*K(N5'5;72::?Fkꬃv8F39>679E;7g]/9@P_FFZjncopmmxslnkqmγȖڶ{}ske`cgBNPOELCDUUdd^Y`^ѿا}ˑ鬚 $$3*<:U9S=S+*87-%,(.+#&)'""$&D9056**&.)(08? #,#$""+'$:(EF%+8=7>?A?<@FXQTQia4K@;<;9:3IS\,8:KSHPSby鿾minoonojlnhwuȝӗyz|jaclMQ\WUPBIMNJUcpcl{nn{ﴚysrh_r~rwሒ௳Ʃ !'"$,:3LIPRl߻ (,.+ "&$%#"!  "0 J=.52)',/*5824@RY&:>HIDLTZh[dmomnmfnqpwr|ȹݠ˕~{vojeqnK]UQSQQW\Xjp}Zjsrp掇آɩ~v}wv}Ԅʹʻò  5%4+ 'F:MHA5gxUrk++!+"-(!#*" )1$-*[U,=/.502/<67[ //'*1*(*R/%,9<@MN>N]tcdgLOUKN`vӹ`LKJ@A?8728EPV->?DBBMQQv}ejknilqgmrootu~ٚɱĈ{uoh\glVP[\QJVNTXcb]ʸq`mzþĺƟ̈́h{ay֝ާޝš 6!@ <*<>F%NW;@IAB%&"((!!&%  11'-.#aJ;_A.*+/368>BQ%#",+$(%A5--076=ORL\WoQZe_]Z[~ufHEOIF><>1-6;EXJ/<7@GEGXZz]jprklomnpttw{ʔœͻс}{slcb`RRWYYTUSWV\\QmRnssٳ§tthwޫ浔򿖤͡ /F.//;DF6WSOo<'"$)$#""#!24'+/'BSF020+18)20KC;MSUQdyn`^\\U^ue\QeO=F@5@=(208@Q850=DJ?@VYu{mYisummonqptxu~ՠΖ}{tklu\UUTURQSUVYX\_k]il~䮕ʽ󆀍c|Ŗ⾢侣  " -(B*%04O@&3NXpG&!  '#$!*/'#,%*.6702Msa,:7467;AAGtL% ! ":3%('57,1NR4HSG[ipnVcaYlbni`jYBH7E:.112XR5753?K?EYRi}q\jnspmmlqtqxw~šӞ떉}yrmqlSUUWUXSTTW]ag^aktzw컸ܵ֐nnfh˔ѫ  /)>(,@3&?#@XZ*#+(%(*! ).'"",-8<6.8Y&>7;66@IIG_k)! "&,))-4>22OY=FPUamq~unT\jogi_g@M^;*231IkB5665=TKDZWpaolpomkjpurzzʻצ}wtphkh_[RY[URSX`^^fkghuw{ͶɱͧԺɵ &((,9AA,- 'LVL' $&.+-,#+ ('%!*0)3<=11Cm$@34469?JRe"! " )3*4;7F5:ACJMNYex}qn]TjoQJb;222DoS/CJ<4_4?267984>Ty!$  ((!"3-.17I>@=CMMWbyt|hd[JCBJO_m.<@=WMI36SG:9<>?ZPIb{}ajifglnnqvux{Ǝ}ttpxo^_`\R^X]b^]jlnotwx|~Ж  %'!*.FC*.$6?>_h'-1,-.- &,%+%$(,))/32022?@>H`9D7325;<TYOfŸpv~qRPZVUZWSpKFIYKBP29DA>:<;?SZRnsbYinmoomnrvu{y񙐎}srt{ui_ZacYY_a[Ugikso򐋑襅ǭୗ *2$."%"L>(-3BJaG0/1-/47-),' #&88.2=2AE5On4H76726ADBQkN ##  "#(*$'(,//0=9:;7EJZbfzER_pVjkjjjlnrvxy㢗{yrppga`kbZda\`fglnyΛ훆ɧ虞 " ..B"+#AI.)Mcz C798689%(* ""$("'#,40'D54B7jIGF47?98DH\ok&$""# --&)+*563=CCI\e_nZ_`US^igCAZ?;>AEA@C@ANVVe~JftPjlhkplntvw~~yzwsnhegiYba`bfhqoxp讅}~뒐꽑& "34,.)@? >T"}1><686($)!"!)&,$,72.F.*F=AQKN>5<@<:KR_c!'!"! )'& %+&1:3CEFHTWdҋ{~kkdb[KHGOS@A;?>=ESIWZrrEbkkllmmry}|Ԓ~{vxvhi|odhb\krrqs~ϖ|ވ哠Ŷ⧙""%%CC-%,#7;49NJzUB;061&#"+##-)0+2.&&;D+bG<-'"!$ $'(!!2-3=2688:@EVA:KOTq~h@S[_jeMfnmkkmosx|}Ûɢ}~xtysiirlmnjlpnuq췳ƪʙԔzؘ޽ΰ׼" !&)%;D 30%3-Ht$%VJ'>IG>:,$1 " 4.5)?EST=7>;8=<9BP65>DHrRTMTV[dpvaZfmjkmlpuwyʿΉ|ywuploojmhntpty}ꒇ稜ѳ׎␉ّ䫭& %8, *B):*%=1%LO>M> %#%&#&/!%+ +'"*)(8OD;]h1RJ=:9BEAE3).' !" "(+,*&!6625?AGGSS]d낦Y^ZWMXP;<<;6;;<;9:?@L7/<@DA;:=GVcfimm[elqrv{ytv|ّ|wtmtrplmoxxuxzrٷجᝒς再ӽتݰ &%98#'yZPYrT(7&-4,$ ")C9pa?ܼDHKB=662-#,&*!("&"#$$)0+ *D73>FEKPS\[˰ѯh\UZOaW?@@?=97746/29<;@<5>EQ^^iwlRW_b\aafqwy~zٵ|x{{rpxuhss{u}z—ӳȾ͵щ㨐֕΅ !&#%3>-%)"eQDaTOYkU)84%+521** ! #*_HOMF<<96*%)&*'(-*'#$%00)%4A3a*;IHsy<.6<;32.)'$ !2&%1\N^DDB<,*$"#**$$$.&&(&)3*!)<84IKJS\Zeىơ͠p`PTZViGC@B>8./613./6;:<6=@fRVuTYdfjknpp{ָއ~|zzxzx|{{~}ӯнߪۣ̳%#)J'Fg-S;3wc2>?7;9*1*&*52$$YW_JPGH:2<1%.% !+*%--)&,)%%&01:DHQPYeemʚýdhc[_`C?>A:2038/.-1:6=:<8DES_bsXlkllqxx}{樀y{|xzҩݘⲬǺ###/&<+wd:D<+X-LL?79?<" +)5:9:60'JOYD9MG5H??BCCH6&(!%)..-2'*#)0'5>111&3;9709faDJBHE<9<6:0&#$!&"+;6(!%$%.*0A=@FJ[eeˍۺҷup`XcQNHFE@A?66853:87B=H;=]bstUdkrspqvz~x}񻙿ʌ˽嫑 *P*$,%8$DUWZJQw2HD5,D:/6(" %$ $#!#,)(+17556(>Vw8FKK;?H98;4($$"+-'77(!2/$'/1@>=CFT\eͮh`Z]XRMGEC==8:>81;:6FGA:8_|\oPjlmopsx{|Ѝy}{ۦͿЍ򘈓Ӹ$ '5*#+/$-bnnZ\¢3T??/?6(:-"%%!"015-.(,?2MHs6@ISZa|ۓ\lZaYNOMJK<77:A@6?<5BBFFHqhIejnpopuy}}ꭁ~쾷ΰ羅捊ܗ~}$#0,3,%.~=ngKw僧<=LK7B4)4.(-"%!&(07850KBiNUM;DKA6;C?BD1# #"'8--/*#1%"(,1?E=EARRfer]aSTPMCB>>78=@<@:;?BQABWZcRelnmruvy~|¢̎⺵Ա~{y|{{}  $$'0(,%3-I3Z_Ḡ:GJSH<42=5!,#% ),52-5A=TbFT5:?-*+!$&://2%$%'"(/4F@@MR]tvy nma\TXSLBA>>66:6:C>7>IMHKUHsWhjlosuvxؐ𹦴ϖ}tnump{ )+)!)/'-->E- !#$(,*-EEIPOerrꦨjhd[VXRJA@>?79>5??MDA@:20+&+.! $! -,%318BBANrc]9LA3'7?815NqxbTG'&/5(&-%(-*.07HFf_U`oxYh\]RPNFBC@A<;ABDACHIJRS`JSonptutx}~ƛ|͸Ɛ̺{{z~o& %:82+0&Gaiur8=2 3C<8ZE+*&.#$,.152GRj]O[jĭ˴ڳXgbZOQQIAB>?:6==CCG@JOTYQSqnotwvy~}ٸ}ѸƖֵɢ~zu#!$ 6H)2"9zk@BW]ED1,0'!%+%"!+$!5+$2E@5;HzwbN:@2>589<3-!#CdY(!)+11?9?VSYRVlӾγʧ\f]WOONJBA?@=;==BGLKFLV[\hŴ\prqquxz}μ܄ؼܲ෕Ǚʰгxu{|x%"%!' 8D! +,&fnckc>NxNHJL8A,.5(('&)$$  *'*-&586;VqW|Ĩ)ED48;?9CL3" $#%"2'&04,./@G?=A@HIJMRXTNgplvuoqy|{罛顋~in3&%0!05 *)60Fv\\8*;>Wmb@;3.,3'5.')**!!"($" (5108I>@lD3@H:9B==A=86=6* +>79,4YAE604;:;2KU7DV]a\^euO`b_XUIJPF@A@>:?DGLLRS]SsSrtorvswv}~󧀅Ы䯊s~}vwvnl!"#/" ,7&5$7091EnzjkS.AGVTLA1/1&,3()'#-)(& (*+3.6ODVzY, *.201)$!"&&'*'%($)(7OG7+5,89ClM9EGVe^X\ddjlrz~[\aVWTMHEB@=B@>?KJLJ]Uz|\uzpquxwzxעТӾywzyzspqy1+-E($/+:%8]j٬l,6FED902+".(&%!20*  !"(1<48JD5r[o4#$)*! $$"/]Y*-=>OYZZ_pfQfktutnXa\[QPNC@42112AA><1+-oa75800##.")!$"")-!+3B2N`BQFA67/87;9(*2$&)'))&&!%*(..8;AIp?$13:6AMU]lqzՠʸug^[UKGJJIGCDBIK@JEGOa`Y]}~mxz|z}y{{}{Ƕâŝ۽֫}xw{kmjlrokx&. "1'+8@5OU_zdIWul%.O90A30( ( $&  &$91>8BRUR.-)+>D.% '*'6=GI52.?CNRQt|饀cTQKGHGILG?BHG?HHIOQyQy~l||y}{~{~zx{~⎑ǡ՚죔޸ͣtxvmrspkvt$!%3,,9S1rQA~iKXdU4:"HR@(8>3*"%) "' ' 23.))03; /+&0?>,&1v{'" " *=KTVQ@BFQZrʉu|ٱnOUNNMKINOEECDDELNNUrs\hnxx|}w{zyxy}吀Ϻ߷ۧ˓疊tkwzriittrki)!!&36,:UU?zUDtcTRT<69,Tr3%5;6/ ") + 7,%#34ʇ;>8AO141>oY'"! &)&%+_S,/>JVTRSER]pŰmZVNPKILJMFBDCCELJRTQ[fbf~ly}~|z|yxtusu}˪àȹϓ횫oxlelnjpnmf^"8/"*&5<,ERB8,YNP8(@53.<9(- UG!,2A@9*,-'%0#(#(&46+,5.*wxA>677*2-,5F6#%&#',**#&;v6 (,33>JVddT[ዠхߓy]XNTOKPJHKEHGDBLNNTRa_hwk|~~z|xppnq{~󸑚ؿ㑚Ʌstvhkkuwfa_k3;+! )!34?.AJ+(1DGrV5>=6+05>=-(\q($,1?.#>`1"//-096@GHKZc`uϙ\e[UWSONMLFEDGEJVU`X_lj|j}yzwvtlnnnytwĐͼ̱䠳іvrust|nfbm !)!4%')%SH)7YaPTaL?`}~4-):)!e 5S[{X' +(#$(-!Pi=<:61+(7E@!4=`'"(2I0&X^'%'.77:BCWPMYgh쬨xfk]TYUPSWRDGGJHHW^]\Vhll}ĺʐ|xusllmqzt{ڱ̟ܜ՗{zuqrnepwgVat )&$-#/%?;;OITQng˨keZ|>A6;*k-IWBM$'9#" #,'Al+.(-<>BAAXWYa_wontȧYkbXXSTYYRHJHGIHTXZ^Zn{un|ҿø~|tppjjknuwzz~}ܼਲ਼ʙurrqiemzaj &'"-596=6[SoA2mSf;O=^}f+:IjE9.13.<.Uw< %*6"*2*/Hd6>984.6:55.')%6p$23=`'%(578>=FKSU]fxekidc^WSVSROOLKHQTZ`^hqvr{|׾xwutpjllmvu}zy̭̥ܵ㣘؎}u  &!0::;*5C>;vv`KkqC_g=B611#42!%!>J-.%/" !*B' %%9$-Oc9F08519,820+#&"29!">W#'/5688:EDNU[|zd~cskil`UQPNLIMPKKSZWb]czus|zб聁|wrmllffpr{x~š©xz  (B$$A%98<1/(-/$)) +&. % Td( 169Rh2V+:)8A=6,)!$,;4!Iy12((-.08:}⪨l@^JF9).2&)$*'#%\e- $[x> 4?KV@eE307-O~:-:*-%%,F9  Pf06-*/57:AHRTUbyw~ړnvrhb[XPLMKLLLHGKR[Vdbhf}s}{ϫ~{uvuqlloquy{{~򾨣͕աχܶ׏qJ    2 ,-    ! ,&   6     @~~x~ΒuyұtBT& )+(#-Mn';3`WOƤp}bhrC?cB*GIABPSQ_bginy{v|غѷƚϼyv    *& o`        $%!   )   @uqũs|ƔvYR4;'*/)$"# ##@H"=;Zmklή\נrd/>NDAF-,.19?;GdjUs}_DZ`isܮG7JMH9DEFPT`chrvx}п֯ĺʇܔxҷyjи  ! <"*           -    /4ckoqxy}sx|I)23,!'$ # $#-rW"*FWomMBXV܍l~F27;QS8/23@@BMil~uXqtuҺ_hgrA2GLIN@B:CEEVggbipʗyӬ|±ڰq~˱w}ȱͽŔ    $NA#          A "      &%.9{p|qr`HIi{uww~lG./5.%$!"!'lR ,*UmsjxlPPivoq|:8A5;HOA3;9>        9 72     "   &'#7ikp>EWcqp<.3;*'!&'%&\S!5>*8j_|lsaO,VSN::ABH:'IcE<9ADH          $(,,+buORezoϹƻn)3.,' "$%'+'%29.6xduxעl}]`PEMA=:=?BfI2:FNIiskid^v^mb`qpfo^KO0LIOQPLMQSYHDFRiqfdl~xu~~yxx~x̑૵qxޫ`护ه     "9C ,     ' %*    (3!<|pafn{xfzwcwc,0&-% %#  # '1&%,8(Fjsyۨsz_D:?=:BD?NTJAGSjvqQ}euvwdjhxֺ]fURJHJPeJZr{n_okkyj[onm~~jx͉{oQJFPOZo7>IK@9:;?;HRPNY]`njsv~u{{~{ӹއr}woxzurץǶď    %" #&     K#   #:(45Jqpnol`j\P|Q,+(*'"!" !B&$*532Ztql:OAED855CB25U`qoyuoj|^vvqjĖpDD@CMa|uPU7F<=@=CIKOOezrVgmbms|rjv}}v{z~yy|v}ຠْqto~s}lŸ۷нء      #S-        1 F"     $%$%)%+)';0by\mt|nX][d]-/',$"$ & J&)16:/0YڟztCQE@C:9BBCWF:DDHPVWQMchz|y㱶]pa\~@KOT^`esV*<@3);W]Q?U{LZPGY^cni]dlnuoorknrvuxtpvsp|rxmirv{pš}|   :0I    -G:>  "   Up (*$56X}\ctigbL_bZ_iXXn)++&/)"&&!766)++-HGZzxmdR_WGIDFFnvm'.?\xlTQYkR1CPADHscAW]fcmib^^eqgdqkrhimihlq}urssrttzrpkllnrqqyyڑl{  )  'A0        ')P!  +! `O (''0.H7h}a`ggdeg`_`gq\XdRHQX_'-#" ## ( T'/981AEK|”ؐIPG^CGECF?KFDcjkyezvkg|㰩ILUUD@J|=8=7LWaWFhFGsuOLCSvYKOUY[e^qhkuzooongvqspoxxsutmnsnuo}ziwpaehxzz  !%    '$       *    "(CD!%,;H+Jtdh`]fbk`]dfnhrqk_uA"!(!! !$/X ()27=HGBriqʵǡ_bRUG[SICCIFLFCO`oq|m{ubp~ixst{ݘMWWKNaAlTs,C1(1FP>JA?NqvA;>kbE=Hkdi{kiidipm{wkrrwqwmpv}ngnighjivxuw{vzy}~}|   /!!7/        +98   !   FP8 31-+Ejbmgbghlaixzj`S^gs~T#&$" !'&K\*,//=JK@xymIQIKUICFHKKDIH]gg~r{fzzsmwj^[ZRIEQIHxCC=(0.+&$,$!#          ' 'Ya%;1Pqfb_ZXPXSWHTOKV5'#*&'%'#R8&.2*0GWUayմͰzkRYLNJMJPHJTS_mwz{xȍ˷ghcn`JFOMN-9|49=24*#.LN3=O_1Bpusqlx|Ńkon{yoxssuvssolfkiifjngkjjvnlhmopluwʖ붌  N.SC*+-,     '     Cb659Sou~b^_`H6LZ{S**## )%O?(/0*6MZh{{}ТpNTTONSRNLMMYdoyɚxңkutwq`ecOKJ`h43Sc/&03.53607B9@Ph}|uz]f|v,$ '%)'1./#%%0:8@6Ix}gqӪdYZXUTWTX[Yebfq~ү|{{sndd\OJDMw/18236+0262DQkMBK_ORcpᫎឆy~~~z~|rklc\pgenwst}yҟy϶     +'*._[|!        )&:xJ  " ')!3'$,588A4?>DC[mw}zyO"6&!#''!&2@$)*02:8?Zp~׻SaYZWXWRY[]f`jrxy}ϴ͑ݿ}wlld`VQFRsY(8.*0//58:Z]c_xERTNi~{Ëo~usidqrquxzյq߽}~  $2*"FYDi<  !         ;/(3,1/8DCi³PAO[p}xͽƼؽwjvvkxr׿˔͈Я     ! !(-:"!        P1(Z-(]z   , &977>K^}[>DMPHDPv}ldZI(8/&%$-'(.<6(&((+9JEIObeF??Z9%1%*(!%#"5&(',.'/F>UungӫؼOb[_YY^]]\bgft{wʙԸӾ~vrmhd\PM\o=776633585;;4=L8MQc׶˻Ӛݮrrp޻eǻ|ߠϪթ  #!/# .+V?      $ ?t-$ # ?. %3519/H`bvsQNNMZGLG>J>110#"&16&"##(2)-E9GrwbܰQaZ_[ZXW\]ahjtyĸÎ~}wmjhaWPUjO68786:545:?=EABLU`\nyة̥ݬ|yrktv}v{غvϲ   "" % (7      ## #HW)#(&%tF  %3=%-6>F`cvnmgIHSRBH@sP07E(!""5I(("&%60.J=Vr|q޸VgZ^][WVY^blmw{zºжǘutqib^UKJLC>4:<745;@==FLHLU]glıѵص|н}x΢Ǫĸ  $"% ,3(     $!',Va#$&0_a      .%,16;D~rk~|SeeTSD:Q]:4Be&&%-[860#$&93%@6P|n{fh׊bjZWVYYY]`ekow}uٸûđ|xmhf`XQLC@A??8<<=<;CDHMRY`np̍rt⤁ɸrư̦  %M: "  ' +'M%%&OX    4&'$.42CMytəyk­qjhRMG<--57@P24$@83!'9+(&)+$C5&crwhUcy]h[XVXZZ]deinvyѧസԷyrph_\X_VDDE@3?8@B=AIHNSaiirxʯܹxmsw   %CD   "%34P," 8rH  !$#<1)@LE;AA6U413@:%5$$(*&'+((=>0Z\if{R|}|Rb_\][Y[_fcmkxሆ}xria\Yb\OD?FE;8BC<B[msiwGb^lMZ[WUUV[aeehru|ЏvpodbYVULFENE9FC?KHFMQsnmwѰܸ҇|~ِιׄ & #$$0\b     #$" $\ү;)&*5GI  "!&,+4ITL|wMHQ@B?CLF,,E+&))*',3+&-68Isnfsj8Vd~H\\X[]Z\bcelow~լ{uokfeb\ULHIJ7@CCIKKO[^ta~Ӡzۓ|~ؙzڄ۬~!& .n kS      '-/1|ջ;2*$!-+7B %,..3AIRzyop\RSLA54.9=,-'*()0;1$49:Cmj~R&EH]{[x3]YZY[Y\`fmlrwநň{tmlkf__\KK`PCHFBRTRZ]iyʅw|嫄~}Ձϐ (#'&>*aV!         (7`('%$#,#  (%3:2;IFt|szzsl{[NE=E:2.<,#,&((+($7+*642XcsI)?FFYR`8YYWWX[^ahmnr|γڻxmlkc]_XNNVONSOURN^powbתѷząɨ¦˫  !" 'U5= #"$       # )7+]2'"!)%'  !##1472=Pޭ樁~z|TJKT?2<>(%.+(+./!'./*Yd388>=5G[^nLNHSQTXZ_cglruxЯþƒytpid_]XTVTMRNVYTcfgjwxӛŹť~Džτy̘ #(%(w7.71        ,.*QP(3)$($#   ! *,22>>MUv߳xvwTIF@:F>+,,)!&)$02%*31LQ&15Sf-P}_`bMJYWWWVZbennz}ľ隉~{rnkb^`aYYVRWfaY]bemtxڵͮǜ°}ٖoĂߠɹѶ{  5qXFI?       #'!(9dz|wB4  $!'-278COQwl׭ywm[HEA6NC,0+'%$%)*6!,2,$&&,-?f?BtGTdAEPUX]efcdnuw~Ʉ~ztolgb_X\]XSSXacddh~oDZɥǑՍ{{|վĕ΢s    Z542~`J|Z !     *VN7ԟ7/# * )326;?KP{{ҺƶnMCD=LB,--,(%%%"$ '*%('%.+7==JhS:NMMAFGMXafliqw׹ʹʩ|wtqiehh^Z`]P\^cemnz|Ĥϸ̱§t|Ҕ}~࣒kyׯ "#D'%?:CR^7'        GC}9:  *)86+=LFRy|ҒqzWBAJJD0-04*$"$""'('+%,ax9C]e@AEEGJKLLUbkppw}ܬ҂{xtoljjee]eZ`i_ajourxāίyyܩ߹t榈ܞ} +*@*@:iq9!    \7D! ! +$143=LGW~uɑsaB@E:P21,-+&$! '()!(%Gy8Gyy|DLSRVVY]^krs}|ĦЁ{{xplkiggddadnfgsttţ|۽ìʗ|Ɖ * F7%#lU# *     !BNب;%&&  %,0:9FQXgz׽}։eWNJHJ/-+-' !&!*('*)$2-5UvqyxAVTUXaecjoqzԌsplljhhlfclnoyyny¬ȧúѺػս~}yƷxzr}{   '+C-62oA#"       /0N4%"& ! "!!+59>LU]{ջ\ZHHA=021/+$#$(!!!#-)'"):,5;?ip˜VNVX][`cbglq{؄~{wmmjhejhgkkksyutֶ¶㝍ز}ޕzǗಞ|x{pp  $MC *G,K%$"     ,DHGQ .$!"&$  ! #!./=:H^q}طۓ^JMHC:43-(*&""#&# (0*''+20JO`zIZZYY^egkku{֟}~}rpnmhiipmepmwx|wzְɳ~~}}Тڢvzi   XB&..Pa ,# %)#     %#1>H(-&("&+   (&/-8HER|pמ׎dOQNHA942+/*!"$% $1-.(,0I{Tb~ISUXX\bfiouq~ztqrnlks{emp|zyʼ̽½ۮ͚ࠂܦƽݨzyzzՏrw   ,*,1Vt#!+#"-#    ( !$#)\hV..&"  $!+&+17HKOx㻊ƪtMRKB>530./,&&'" '%$*'1)(6~_jqLT\bb`afjntp}wroollfpux}ҹߩ޸{{ŵvy|ssp}ouҔ}y    9$ $>3>8GS1"+&# -Dbh.,#&&  !"*'(.4<@Nޚο׺ɕvPSGF?720/+,(*.&)($/2,*"6fNq~ߋI\\]_`chkpw|Ąs~xqrnll{ftsz~Ω̚í{݈~zĥ{z}uzsnmqwsnbkrn  ^JHQHP3("'#$  #6&Xz'&%&"+.3 # $(&'+4>>6.0,,'#**004*=:EGyΈ^Hha^dklnsw{}Ͳܹx{uzlqzsouyxȺϻ޳̢ʼdpfjbk`YUgd    )$ha~f^(,-4&+    )(ZW|.&D; !!43E:AUrĒuԪۻdXLI>>;7//--*(**/491"7@?ALYlkyκ^[=OFC43;31--+(*03897>QEk՜Rfh_fplliqtyy~̽Ŀyzvtssrrtvwuݪڵş}u̙pw{}`mnfajn^SSOGA   "#"# )Qmc^I/$1%#&   -#9O$   .'  K0%48GHKOQWhditqq}~dXJFEB810/1)/-+*7685E@j}v|bkkfknmjov{w}Ͽqwvuroosutwؼɕŏòr}}ybqj]^vwhXVQKJO  3 $"Ghh'       $-'K&YV      '6$$1DDFQf[J^]krmw{~mNLLI?;7.-,+.--(8;:9@Dbuazughmmoovyx~ɸȼxwusolnqspysʻƌέŅpnbfcdta_VX`RPV   "#,Af!     &%-6/2DiS#     = &(5FJYdv~|zspyxyzxs`QHKC7892000-//(5>?DBM?oi߅itogmmqrtvzʶȾȓ|xqpmnnnnpqs|~{ҮȮԓvqc[crTRU\RLG   "$5CmX3'&)* (  ,3+G(*!   F> $&'0/@Abz{}{wnpqm[SG?97762170050229?HAOHayuoxjmorttxy~Ӿľԧ{vqnnonmmpov}q|ӣ͗sz]tr``mscMILORCG    +!9p]G#`& #.    (.8!+        F #/&1=EO_s|rtq}{cKNE;4644503-57,735=JLIHwo{l{norqtuyz}˾»txqppokjmpqhu~rѻ˻ٳwDzĖy~icec_bmlIJJEHKGN    !":BZqM4IN!      #$&$&+     "'&4>AEkqҔ|ݩLI@;3314:4--33+557=7of:xpsmwrlsrwwx}ſvwrponlhijvwk{zvչ޽ƇОאТݸt{lxs[ZlVNUOKIQK    6W;;sοؚ7+>)) #$        &  I_   &./-'-16Ifqtݥ~˓lUHG>:854<<30.0029<>8]_DZ~܌quukrwxwy}ľĸپߥqwqmlnmedeqwupl݋|ؿ؛ϧӖ۴zӁytuz\QW]OGIRTNBC # #51+Z8=iܤA:8,% 34    #"`_ A,  ! .:'45882=Qsۖj֫{~j}[SG9;8697=6-/002;9AA9ie$(& %:!  $ #W# <   02"$#3MTUjmgzu|}mZSCE?9<50486420:A;BDPRtڣnytvuuwy|~̾·Շ|t}rmifbb]^fkgt}̅ì˞}ɐ~w{~w|rxURUXMTTadC?H   (()!%:>7=p|9! %0 :)>4   $ -10   0L  " 5'"$#3GYXiͻs{}wwZWMDF?;885543425A@JFQWT~uަm{suvtwz{~Źr~t|hffd]\]bjedmk~xռϋ{מr~~tqz{XTVQVjpOF@R  ;-'99>IBw5KV(  F=-)Q<  )K}'  RN3 #9%(%)0;=;AWj{ߪ}{}҅d[OCHA<>B;366753BIBKIXWwܫo|tuvux|Ⱥ㹇nvlhec\ZZblghk{iy~~̿ȥ绐ɉŃxwwoimwXUXNDQX@7?T    '%*0/;/]R{FAI]'  SE--'    G '"]I/M '*-,1@EIRQwlep~z;я]dRHG@ADD=797465?C?LI_ok؋q{suvuv||Ƕ޶}tskd__ZXX_hefflzphz̬ל{~osiXU]WOFN\;H   "$'!29[qnC39)!  $ 2   !,  Lw" ! HSF1:e #,33@DRiiukr}yifZRKEGGC=;85254<=IMD]|pڞsysvwvu{Ծ~vwphfe`XUWaachai}uwŞգ̾Թɣl}tlXk~^ANTFOhouytxyxu|ѹk~wliec^XWW[_bhdftzu{ɲ⸙ɤ~Ѝyfrd~t_  !"#)TZR>[ĺR-CJ'# &"   #  +Ii)    6 !##$0+ABCurttg]WWNEA>877;?::AICPIJsrszrquyy{{Ŧqughc[ZZRR\]fj^dt}Ź޽ܟxݰڿ̴znZ`|uk  " '##/3:N0J6( '    /H=$)Ap- _"   )R"#%&559BMcqwy~Կxrg]WMG@9878:=:;@FAERHdl|m{vrrwz}~޼xt{qmhgb[TVZ\\gskbwx~߸ӹƠ|֜mzx~ըΫжh957 2#CE-ǔJ4#   0, A[S2 %&/7( #U  ( "? ! "%+3;<@Tsx͈u~h\QLKB<;6::;769@GFRL_`ws{ttvxy}پ|j|wtogda_XUZ\`dgfiokuz{߬卄‰ԱbĔ~V,v`'`5ZCPQ D]5f&lg۾n Jn-jlݼc@YM LǺ?1 Iù">{ jZ*< Lη"u+XF/fR*&=r R9g~x?"9(p-+1P 3&3F1".g )0#{7zyi3 Tn >!,Nh,HY, z" Oҷ>-bn B% Mɹ8"K R̺^!o E|s 2 P n ,  : JyWjdZGU3I!LM~ LYJ  zjzzzwxzjzzzzyzjzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyzzzzzzzyzzzzyzzzzyzzzzyzzzzyzzzzyzzzzyzzzzyzzzzyzzzzyzzzzyzzzzyzzzzyzzzzyxzzzzzyxzzzzzyxzzzzzyxyzzzzyxyzzzzyxxzzzzyxxzzzzyxxzzzzyxwzzzzyxwzzzzywwzzzzywvzzzzywvzzzzywvzzzzyvqzzzzxvzzzzzywuzzzzzywuzzzzzyvtzzzzzxvszzzzj  íȭŭ˭ʭʭɭɭȭȭǭǭǭǭƭƭƭƭƭŭŭŭŭŭŭŭŭŭŭŭŭŭŭŭŭƭƭƭǭȭ úȺź̺˺˺ʺʺʺɺɺȺȺȺǺǺǺƺƺƺƺƺźźźźźźźźźźźźźźźźƺƺƺTǺRTȺ  GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG    l*`7 $${AM'yL+]; / f3w)`8%T;ps&:O bv(g,x=ňN֙_"o3֠$7B[j $7B[m^9 ?I.<As 2(!,&# !$'(*)')*-5=?9356234342)*+,-,+,,--./00079:;:873,""$*~6x=5O f +hUIC+  HDL7ԯvk]LDPbp|n[PғQ /k3TE[  \XPn\ 6d̿|P% r%4 Gs)hCK#}`#8" kde(Pn,K)j fP Q<^ l1 EVqO sw&^odP*!9 ٺH,3>WˑXb ۠i.Gu@y>  " Hy)rq+=dcFFT幡VZZFMbFEFs #o*JFzFEIm-WFGHFEI}?FxJFFEFp4PF$ʰ4eFe|HF؆rFUפvF9Fo mg (2 3!/\'Lz K 9¿ 0¿ t V // ocſ  ȽY3/»| }ɼ  ùN{ 0dȼG -¸e)Ǻ+XXi Ḧ?.Ķ*=PRF0 ǻVǾE8µ0$ |ĸh*`Ÿ"$&'',+3*$29:=?A?DA?C?>@@?;ABFGKJDEHHLPNJJKNGGHKIB@EFDE?>ACA<=BC@@>DBDC@?;4(((.m'RY*o$x7 FcfG:2A$ XDZ/tsE-fVMC608DMUg L?Gär> Iue#g ۳I7G? ԰I 7LͭK 5aövL#N ɐ) Fl'G ʮ5J{ ZZ dY&ɥ cEz ]gɾ@m(o3ȭ)IƢe7sŕH)A  `"s/ ;NKnvQZiYg G ~(   ޳ 6݁X1 *07<c=] ٺnH C h,yS+ ^  ր1S' cmxNq) }9þY{  \AAM̥~Υ;U SAGW>?fh(EAp>=AbQA@A@>=AȕV+A@kB>=>d$7A@۴.EA@ZUBA@wkci@MQs@?'@?ec] ſ!ļ$"¼-#º-$ܧ*SĿ#ܽ Dþ l C 3¿+ h M ٦**cX¿¿xהO -*o ֊ouy Em*Y¿ ? ׿(Y$ ך&ٹNN^ @{׵z8)%7GI?+ ¿L¿=2+ o]ތ%U{"$&'',*3*$29<?BCEGHJLKIHD@:>ADCC@=<<=;:;9876310.,'%$#"!  d >q~~Cj T|~l*4i~rkKx~Mu~~5+`~&? ~tBs~yA|~C#W}~V߭B'jRE>5*%+3:@Nat~z 9l~/ԩA_47XLNz~} ʤB/w= /c~` ¿A )n~9A *Mi}r_F,;s~ }$;syX65q~j ¿.A{wso^5 D|~C W$}{wsokgc_G!_~¿(Ŀ{wsokgc_[WSF3{~sjÿ|{wsokgc_[WSOKF<m~M7/eÿ~{xuqnkhdbaceec^ZVRNJFB>:+ T~'2'Ǿ~{xuqnkhda]ZVSPQSURNJFB>:62.7~z 4`˻~{xuqmjgd`]ZVSPMIFCEGFB>:62.*&){~V7ν~zwtqmjgd`]ZVSPMIFC@<99;:62.*&"y~0|9 Ŭ~zwtqmjgd`]ZVSPMIFC@<963//1.)%!y~} 0϶~zwtqmjgd`]ZVSPMIFC@<952.+(%! #}~~a<ǫ~zwtqmjgd`]ZVSPMIEB?<852.+(%! ,~~:<վ/@~zwtqmjgd`\YVROLIEB?<852.+(%! =~Զ9);~zwtplifc_\YVROLIEB?<852.+(%! N Ӵx' }zvsplifc_\YVROLIEB?<852.+(%!  vӲq&}zvsplifc_\YVROLIEB?<852.+(%!  Ӳt&Rzvsplifc_\YVROLIEB?<851.*'$!  Դ &czvsplifc_\YVROLIEA>;741.*'$! p`B% չ'd}zvsplifc_\XURNKHEA>;741.*'$! -~}hK-§X'2}}zvsplheb_[XURNKHEA>;741.*'$! a~qS6ʩ '$~|yurolheb_[XURNKHEA>;741.*'$! !~x[> ЮR' w|yurolheb_[XURNKHEA>;741.*'$! d~|cGѼ&M|yurolheb_[XURNKHEA>;741-*&#  %~>ɥs&{yurolheb_[XURNKHE@=:730-*&#  j~J@%Hyurolheb_[XTQMJGD@=:730-*&#  :~U%rurolhda^[WTQMJGD@=:730-*&#   }~]$uqnkhda^ZHDNMJGD@=:730-*&#  \~g # qnkhda^P";GD@=:730-*&#  -~l .#ankhda^V;@=:730-)&" |~t,{6"Xnkhda^[5<963/,)&" `~w+~{xuqnkhda^[W563/,)&" @~{!*~{xuqnkhd`]ZVK*3/,)&" ~}))~{wtqmjgd`]ZVSD$/,)&" z~4(~zwtqmjgd`]ZVSPC",)&" c~~@'~zwtqmjgd`]ZVSPMF %(%! Q~J&~zwtqmjgd`]ZVSPMIF '%! =V%zwtqmjgd`]ZVSOLIEB1 %! $wtqmjgd_\YVROLIEB?< $! #splifc_\YVROLIEB?<85#$! !plifc_\YVROLIEB?<852.+(%!  lifc_\YVROLIEB?<852.+($! ifc_\YVROLIEB?<741.*'$! fc_\YVROKHEA>;741.*'$! c_[XURNKHEA>;741.*'$! _[XURNKHEA>;741.*'$! URNKHEA>;741.*'$! XURNKHEA>;741.*'$  URNKHEA>;730-*&#  RNKGD@=:730-*&#  MJGD@=:730-*&#  JGD@=:730-*&#  GD@=:730-*&#  D@=:730-*&#  @=:73/,)&" <963/,)&" 963/,)&"  63/,)&" 3/,)&" /,)&"  ,(%!  -%!  -#  )$ %! !          ,}uqnjgcaa^\ZXUSQONLJHFECA@>=;:97653210/.,+*)('&%%$#"! LĿ~ywurnmigc`_\YWUSPNNKIHFEDCCA@>=<<:877653210./.-,+*)*+,-.01332//,+)($#  $ !%)-26:?BGLPTY[\Z[XXWVSSRQPOONMLKLKLLMMN.OQRRSTUWXZZ\^_aacdggilmorsvv{|i}zvsqnjgfca^[YUSQPMKJHGDDA@?==<::986654532010/.-, +,*++**)()(('&'( &#!   "(.5:@EJMKJIIHHGHIJIJKKM*OPQQTTVWXZ[\`_`cdfhjknpqvvz}d|ztspmlhfc_]ZXURPNMJGEDCB?>=<;98776 53321100/..-,+**))('&%$    ")/6<<:87654423110/.--,+*)*)('&%$!  '.5=;9875543211/.,+**))('&%$# 5 (08?ABBCDDFFGHJJKMNNQRTUWY[\^`cdhimoqty{}g~yytrpljgda^[YVTQNLJHECA?><:976422110.--,,++*)('&%$#   (1:BCF!HIIKLNORRTVWX[^_cegjmptvy}h}yvupoljfea_[YWSPNLIHECA>=<9765310/.--,+*))('&'%%$#)%/9ABCEEGHJKMNORSUWY[]acdgjmqux{n~|zwtqmlifda]]XTSQOLJHEC@?=:8754320.-,+**)(('&%$ #"#" $ %1=:865310/.,+*)('&&%# $#""! +6BFHIKMNPRTXY]^aegjnquz}b¿}zxvqomkhfd__[XVSRPLJHFB@?<:96521/--++)''&%%$#"    )5BIIMOPSUWZ^`cfimptw{~e}{xurnmkgec`]ZYVTQOLJHEDA?;;86531/.,+*)'&%%$#"!  )6FMOQTVZ\_bdhkptv|o~{xvvsnmjhgb`^[XWUROLJHFCA@=:86530/.,+)((&&$#""!  -=MSUXZ^adhlpsw{g|{xvsqmkhgec_]ZXVRQNMKHFDA?=<975410-,+*)'&%#""!"5HVY]_dgkorv{i|{vusplkigc``^YXVSQOLJIGCA@=<986310/-+*('%%$"   /CW_dhkosva|zwtrpmkheca_[ZYVRROMKIFEB?><:76420/-,*('&%$ )BYgjns U~|yvvqnligfbb^]ZWVTQOLKJGDB??=:975310.,+*(&% (A\ob~{yuttomjgfc`_][WUTQOMKHFEB@?=;97633//-+)('! 'i¾~~{xvsqqljhdb`^\ZWUSQONKIFFCBA<;:75422/-,+*#^}{xvrpomjhfb_][YYUTPPLJIGDCA?=<:975322.-+'Z~{wvrpmligec`\ZYWUTQPMKHFFCB@>=;:76531/-+"[¾zxvsonlifeaa_\XVTTQPNLJHECCA@=;99654300' Wzxusqmlifec_^]ZWTSQPNLJIFDBA?>=:875530-"U¿|zxtpokigeba^[ZVVSSOMKJHGECA?>=;:76432( QĿ~zwtromihec`^\ZXVTSOOKIHFECB@?=<:86641%Qzyvspmkgeba^\ZWVTRQPLKHFEDB@@==:9765/ Mþ}{wtqnkiecb]]ZXVUSPOMKIGEDBA?>=;:974, N¿}zusoligfc`^[XVUTQPNMJIFECA?><;;896+Pþ~|ytqokifda^\ZWVTRONMKIGFDB@>>=:987(K¿~zwuqmkhdb_\[YWSSPNLKJGFEDA@?=;:85)K|zvrnljfca^[YVTSQOMKJGFECB@??=;:7)I|xtrnlieb`][YVTQONLJHGEDC@@>=<;8*GĿ{ytpnlieb_\YYTSQNLKIHFEBB@?==<;+F{wtqnigea][YVURPNLJIFECAA?>=;;.DĿ{wtpmigd`^[WVSQOMKIGFDCA@>=<;1B~{wspljfc`^ZXUSPOLKIFECBA?>=<5# @{vtplifb_\\XTSPNKJHFDBB@?=<9)>¼~{wtolhfc_]YWTSPNKJIFDCA?><<5 ;ÿ~{vtpmiec`\ZVTRPMLIGEDB@?>;*9|xtpliec_\ZWTROMJIGECB@?=38}xurlifb_]ZVTQOMKHGDDC??<)6}yurnjec`\ZVTQOMKIHDCB@?35~zuqojgc`\[VTQOMKIHECB@=*3yvrokgea]ZXTQONKIGEDB@72{wsolieb^[XUSONKIGFDB@/1Ŀ{ytqmjfb_\YUSQNLIHFDB=&/~zvrnkfd`\XWSQNMJHFDC8.Ľzwsplhda]ZWTQOMKHFDC1-}wuqmiec_[WUSOOKIFDB)+þyvsnjgd`\ZVSPOLIGE>#*|wsplhda^[VTRNLJHE:)½~zvrmkfc_\YURONJJG6(Ŀ{wsokhda]ZVSQNLJH3'~yuqnjeb^\YUQPMJI0 &Ŀ|wtplhda]ZWSQOLJ-$¼~yuqmjfc_[YVRPNI+#Ŀ|xtplhea^[WURNJ*"}zvrojgc`]YWTPK*!|xtpmieb_\YUSL+ þzwrolhea][WUN+}yvqnjgb`]ZWR.Ŀ|xtplieb_\ZV1~{vsokgea_[X6|yurokfda^Z<|yuqmjfc`]C ÿ{xspmhfb`K¾~zwsolhfbT }zvrnkgd]-½|zupojhe;}ytqnjfI|ytqmjX|xtqlg.ſ|xtqmC{xuqX{xuk.|xuI;ADEGMGGILJF=1H9#$##$$%%$$%$%%$$$#$$###""!!! !! !! !!! ! ! l -E;CEFEEGGB(      - ,8¼ ,;ú  "@¿!K~xrmljeeddfghnruz~C'~||}}zzywvutrpnoljjijmlt{M˻zpia[VSLMKKLKLMNRVW^afkosuz~*~}{|{{zyzX{|{z{{}~~~||{zwuwwvvtsrqpomonllmlmmnoonmmlnnmnmnnmmlmlmlnlmommlmlnojkljkjiig/ieefefedcabca__^a_][Z\[ZXVVSTQQPOQRTWdo~ȷyk^VNHA=;74543377:=?CGIORVY[cggknprwy}/}zwssqmmkgfgbcbaba_]\^]\](^\]_\__^`bbcdflotz,}{{ywvssqqplmmjkhfgdba`^_]]\ZZXWYYWWV UTSRTSQQRRSQSPPQRSSQPSQTQQRRQRSPQSQRSPQROROONNLLKJKJJKIIGHIIGFCFBBCACA@?>;:779879IXnH̻{jVJ?5-$!"!$')--12479;>CBEGKLNQSUVZZ]]befehjlopsuuv2xwxyvvuutpnnlkie``\YWQNMKHFC@?><9868552210/.//..,-..,,+,..0//11367:>BFJNSU[]_b_``]\[[XUSTTSTQQSQRQPNMLIFCDBCB@>;<:9 8723321/0//.,+-+*+*(&(('&%&'&%&'((''&'%&'%''(''&%''(('&(&%'&&%$#!" "#! #"  ,BBDDFGIKMOORRUWXYZXZZY[YYZYYWVSRPPKIGEC@><89620,-+)(&$#!! X"%%')+/349>?@BEFDDBA@@??>;;=::8;;8:996755430/0//--*((+)&(&''%""#!   $4G_xɳmVC6(!   Q   ##$$()')+*-00323378:;=>;:65200.+)&%&#" H $&),,/-./-.,+*))*''%''(''&&%'&$"$##!            0>Ws&v^I6)     $#$%''*+*,-++,+-,)'& #!""                         *>UrйlQ=+      +        '9Up̴~dI4"            &2(;Uo ɲx\E/        (Ws ȬrW<&  (=Wt ȯuX@)   '?Wt ʲwZA+  *>Wt ͵z[E/ (Vt ԿgK5"   (;Up ԿgL4$   %9Po iO4#   %8Sl jO5%   &6Nk èkQ9%  $8Nk æmP7$  #5Nl ¨mP:&  %7Mj ©lR9$  $6Oi ĨlR:&  %5Ok ŪoQ:( ':Rk ĪoR<( / (;Qn8ƪoU=) 2  6   '=A<>>==?;?@?>@=@?BABACDEFHIJIIHEC@;965321--,.--*+-.,,+,,--,*+,,-+*,.,.-,.-"+,./20126586::==?=BABDEDGIIJKMNONLONONMMKLLNKLJJHKGGEGEFDADCAAC@A@ =?<=<9::9<;989:7:97 698647655434312122/020/0$/0/-,,-.,*)*)(&&$&'%$#!   !"'-7CRe ưrdWPMJIJMKLMPQRQRSQQSTSVPUWWVWVWXVYYXXZWXXWXX[[Z^]\_`acddebdb_YUROKJGDCDDB@AABA@B@CAB@A@AABA@@AA?A@ABAAB@BAB8?CDDFGGKLMOPSTVWWXZ\\^^`ccfeggjilijkjilkjijiihihgfgeeddeba`^ ]\][YYXYWXURUSRQSRQOSRQRQPRQQPQNNMMNKKMKLKJIIHFHFFGFE FEDBDBAB@?>=;;:87756320/+)(&%#  "%%')*/148>HR`t ͼyoidcdfghjCkllomomnonmoonqrosrrstssusttsusuvtuuvtuuvwzz|{~~|wsoigd`_\[[ZYZ[[\Z \[Z[XZ[Y[[YYZYZ\[Z\]\^^ccgeiklnprstxyxy|~~ ~}~}||zyxutsrppoonommomnnkmmkmml hjiijjhhigfe deccaab`^`^aa__^[ZXXVUTSSROPPMKKGFDB@<;74/+,((&"  !##%)+-1247::884220/.11277::AAEGKORVYY\adjnt ƽ  '~}xvrnjd`\YSOLLIHEIGKLMQUW\abfjnptvy|   G}ytonidde`_`bbceloquw{ :}~~   zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz   έ쭖έ򭁭סּ   κ캖κ򺁺ﺁ28BIMPatt8BIMFMsk 2MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM  zjzzjzzjzzjzzjzzjzzj[1*|ƿƿſľQ*2njyxhxxhwvguuetsdsrcqq`W;'--';uu,,Ton`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`n}`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`noaooaooappIbpqbqqbqqcrsdsteuugvwhxxhxyjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzz}jzzjzzjzzjzzjzzjzw01>ƿƿſžľ0*FxhwwgvufttdsrcqqbqqZL2',,&QK&2m_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm`nIn`noaopbpqbqqbrrdsteuugvwhxxhyyjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjCozlgϊhczm^Y^]^̼XVb|{yxvus~q~|p|{o{zmzylxxkwwjwwivviuuhuuhutgttgttgttgtsfssessessesserrerrerrerrerrerressessfstgtsfsrerqcppbpoann`mm^ll^lk]kk]kk^ll^mm`nnbpqdrsgtuhvwkxynz{n{{nzzn{Gn{zm{{n{{o||p}}p~~qsuvxyz{|}}jzz1+jlzӾifjre^Y]\kʝQUx{zxwut~r}}p||o{zmyylxxkwwivvivuhuuht}gttfssfssfssfrrerrdrrdrrdrqdqqdqqdqqcppcppcpqdqqcppaon`ml^kk\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj]lnapqdsuIiwwlyymyylyymz{n||o}}o~~qsvvyyz{|}~jz1}hmlgҐee{j_^Y\_~wSQywvts}}q||pzznyylwwkvvjutittgssgsrfrqeqqeqqeqpdppdppcppcppcoocoocooboobooboobnnamm_kj]ih[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hi[ii[jIj\kl`oqesuixxlxxlyzm{{n|}p~rtvwyyz{|~zjYmhmmwhlfci}b^]X\hQQaxvus~}r||p{zoyymxxkvvjuuhtthsrfrreqqdqqdppdpocoocooboobnnbnnbnnbnnannanm`mm`lk^ji[hgZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZgg[hG[ii[jj\jj^mpdrthwxlzzn{|n|}qsuwxyz{|}~zzhmmi|lgО_c|t\^]W[zţPLou~s~}r|{p{zoyymxwkvujuthssfrreppdppcoobnnbnnam}ammammall`ll`ll_ll_ll_lk_kj]ihZffXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXefYffYggIZggZgh[hi[ij\jj]kl_opetvky{n||o}~qtuxyyz|}~jzmmhm|hlƶn\dk[^[WcxNNq~~r||q{zoyymxxkwvjuthtsgsreqqdppconbnnbmmamm`ll`ll_kk_kk_kk^kk^kk^jj^ii\gfXddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddXeeXeIeXffYggZgg[hh[ij\jj]ll_mmbqtixzn}}p~stwxyz{}~zj׾mhmlt~lgƪxlejjdiidgfaff`dccw`\_dY^\WsWGX|q{{pzznxxmwwkvuittgsrfqqeppcoobnmamm`ll_lk_kk^jj^jj]jj]jj]ii]ii]ihZedVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccWdGXeeXefYfgZgg[hi[jj\kk^lm_mnaqrgwzm}~qtwwyy{|~zzĐhllgyhltfkkejjdiidggbff`cc^cb\a`\c_Y]\[ƥKJ]zzmxxlwwkuuittgrrfqpdpocnnamm`ll_kj^jj]ii]hh\hh\h}[hg[gg[gg[geXcbTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTbbUbbVccIVccVcdWeeXefYggZgh[ii\jj]ll_mm`opbqqewzn~tuwxyz|}jzōmlgllgrkfkkejjeiidhgbffadc_cb\a`\__Z]\[ŁEIrmxxkwvjutisrgqqeppdoncmmall`kk_ji^ii]hh\gg\gg[gg[ff[ff[feXbaT``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T`aTaaTaaTaaTaIbUbbVccVcdWeeXefZggZhh[jj\kk^mm_nobqqbrsfx{ouwwyz|}zj“mglkfkkfkjeol__Y]]W[ZU][GJwvkvujttissgqqeppdoncmmall`kk_ji^ii]hg\gg[gg[ff[ffZffYdbU``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``TaGTaaUbbVccVcdWeeYfgZgh[ij\jk]lm_nnapqbrseuvhz|pvwyz|}zzָ~lkfkkfkoȯk\ZUXXSVXıBE[kutisrgqpfpodnnbmmakk`kj^ii]hg\gg[ffZfeYeeYddYddXbaT_^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^_S__S__T``IT``TaaTaaUbcVccWdeXefYggZhi\jj]ll_mnapqbqrdtugwxi|~qwxz{}jz}ȄllfkkfmѾhSVVQTTRÿE?hshrrgqqepodnncmmakk`jj_ii]hg\gg[ffZffYedYddYdbV`_R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R_I_S``T``TaaTabUccVcdWeeYfgZhh[jj\kl_mn`opbqrdtugwxizzj|~rxy{}zjӝnlglkfvϴUTNRQL`Ŀÿ\CFhqqepoeoncnmall`kj_ji]hh]gg[ffZeeYedYdcXccVa`R]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]R^^R^GR^_S``T``TaaTbbVccWdeXffZgh[ij\kl^mm`opbqrdtugwxizzjzzj}sy{}zzֿzlgllfyκTLPNJM}Ŀÿ½B=Sqepocnmbml`kk_ii^hh]hg\ffZeeZddXdcXcbWb`T^]P\\P\\P\}P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\]Q]]Q]]IQ]^R^^R__S``T`aTabUccVddXefZgg[ij\jk^mm`opbqrdtugwxizzjzzjzzk~u{}jz}ѮngllfsJMKGK^Ŀþ½@@Woocnmbml`jj^ii]hg[gf[eeYedYccWcbWbaU`^P[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O\\P\\P\\P\\P]I]Q]]Q]^R^^S_`T``TaaTbcVcdXefYgg[ii\jk^mm`opbqrdtuhxxizzjzzjzzjzzmy}zjюgllgm˱^JJEIK¾½f:@lbllakk`jj^ii]hg[gg[feYedYccWccWbaT^\O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[P\\P\GP\]Q]]Q^^R^_S``TaaTbbVccWeeYggZhi\jk^mm`opbqrdtvhxxizzjzzjzzjzzjz|q}zzƿullgl|ɏKGCFEw½C=Emlakk_ji]hh\gf[ffZedYddXcbVbbV`_Q[ZNZZNZZNZZNZZNZZNZ}NZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZN[[O[[O[[IO\\P\\P]]Q]^R^^S_`T`aTabVccWeeYggZhi\jk^mm`opbqrduvhxxjzzjzzjzzjzzjzzj|jz}tlgllɮVE@DCg8;Y`jj_ih]gg[feZedYdcWccWbaVaaT^\NYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMZZNZZO[I[O[[P\\P\]Q]]R^^R__T``TaaUccWdeYfgZhi\jk^mm`opbqseuvhxyjzzjzzjzzjzzjzzjzzjpglliǾnC>AA[m:7ei^hh\gg\feZeeYddXccWcaVa`S\ZMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYZNZGO[[O[\P\\P]]Q^^R^_T``TaaUccVdeXfgZhi\jk^mm`opbrseuwhxyjzzjzzjzzjzzjzzjzz.llgpzATA9D^ih\ff[edZddZccXbbWaaV`_QYXMXXMXXMXXMXXMXXMXXMXXMXXMX}MXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMYYMYYIMYZNZ[O[[O\\P\]Q]^R^_S``TaaUccVdeXfgZhi\jk^mmapqbrsfvwhyzjzzjzzjzzjzzjzzjz61glt>:=<]94Qg]ff\edZddZccYbbWbaW_]PXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMYIYMYYMZZO[[O[\P\]Q]]R^^S``TaaUccVdeXfgZhi\jk_mnapqbstfvxhyzjzzjzzjzzjzzjzzj*1lq=8;;dr87Wff\edYdcYcbWbaWa`U^[MWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLXXMXXMXGMYYMYZN[[O[\P\\Q]]R^^S``TaaUccVdeYgg[ij\kl_mnaqqcstgwxizzjzzjzzjzzjzzjzz1*rȅgtÿ:699tL2=f[edYdcYcbXbbWaaT\YLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLW}LWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLXXIMXXMYYMYYNZ[O[[P\\Q]]R^^S``TaaUccVdeYgg[ij\kl_nobqqdtugxxizzjzzjzzjzzjzzjz14ύigbfe½p948865DddYddYbaWaaV`_SZWKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKWWLWWLWIWMXXMXYMYYMZZO[[P\\Q]]R^^S``TaaUccWeeYgg[ij\lm_nobqrdtvhxyjzzjzzjzzjzzjzzj,ٹshcffaen¾»c836;14:I[dXbbWaaV`_QYVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVLWWLWGLXXMXXMYYMZZO[[P\\Q]]R^^S``TaaUccWeeYgh[jj]lm_opbqseuwhxzjzzjzzjzzjzzjzz}Ӹlchfbfe`uþ½G6154032.5@CV_U_^PWUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJU}JUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUVKVVKVWILWWLWXMXXMYYMZZO[[P\\Q]]R^^S``TabUccWefZgh[jj^mm`oqbrsfvwhyzjzzjzzjzzjzzjzٻghhbff`dfþ¾8403E221-10-188FQJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJVVKVIVLWWLWWMXXMYYMYZO[[P\\Q]]R^_S``TabVcdXefZhi\jk^mnapqcstgwxizzjzzjzzjzzjzzjqhchgafexþ42/8yY50,$#""*/BNJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUVKVGKWWLWWMXXMYYMYZO[[P\\Q]]R^_T`aTabVcdXfgZhi\kl_mnbqqdtuhxxjzzjzzjzzjzzjzz|chhbffwþQ22.ayW0"""""',?KIUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJU}JUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUIKVVKVWLWWMXXMYYMZZO[[P\\Q]^R^_T`aTbcVdeXfg[ij\km_nobqrduvhxyjzzjzzjzzjzzjz}أhhcgfaÿ121-a9$""""$)1OITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTJUUJUUJUUJUUJUIUJVVKVWLWWMXXMYYMZZO[[P\]Q]^R_`TaaTbcVdeYgg[jj]lm`opbrsevwhyzjzzjzzjzzjzzjochgafĿ¾r-0,HjB("""*TITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTIUUJUUJUUJUGJVVKVWLWWMXXMYYMZ[O[\P\]Q^^R_`TaaUccWefZgh[jk^mmapqbstgwxizzjzzjzzjzzjzzؠhhbffk¿;$""t""(TTITTITTITTITTITTITTITTITTITTIT}ITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTJUUJUUIJUUJVVKVWLWWMXXMYYNZ[O[\P]]Q^^S``TabVcdXegZhi\jk_mnbqqdtuhxyjzzjzzjzzjzzjz}wcgfafÿ½x""Mj"'NITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTJUUJUIUJUUJVVKWWLWXMXXMYYN[[O\\P]]R^_T``TabVceXfgZij\kl_nobqreuvhxzjzzjzzjzzjzzjػhgaffs¾/"#x"&CTTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTJUUJUGJUUJVVKWWLWXMXYMYZN[[P\\Q]^R^_T`aTbcVdeYgg[jj]lm`opbrsfvxhzzjzzjzzjzzjzzؚcffafþo""e#"ITITTITTITTITTITTITTITTITTITTITTIT}ITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTJUUIJUUJUUKVVLWWLXXMYYMYZO[[P\]Q]^R_`TaaUccWefZgh[jk^mnapqcsugxxizzjzzjzzjzzjz}zfaffdĿý&"")%#GITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTJUIUJUUJUVKVVLWWMXXMYYMZ[O[\P]]Q^^S``TabVcdXfgZhi\kl_nobqrduvhxyjzzjzzjzzjzzjcffafҹþ½^""%!"8SSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSTITTITTITTITUJUGJUUJUVKVWLWWMXXMYYN[[O\\Q]]R^_T`aTbcVdeYgg[ij]lm_opbrsfvwhyzjzzjzzjzzjzzoaff_mzt~Ʒ""U-!>SHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHS}HSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSTITTITTITTITUIJUUJUUJVVKWWLWXMXYMYZO[[P\\Q]^R_`TaaUccWefZgh[jk^mmapqcstgwxizzjzzjzzjzzjz}ӎf`fkͅvyxryƢm``[_^Z]]Wu5"'6!9HSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHTTITTITTITTIUIUJUUJUUKVVLWWLXXMYYMZ[O[\P\]Q^^S``TabVcdXfgZhi\kl_mobqrdtvhxyjzzjzzjzzjzzjЗxԟ{ztwvpƦba[`_Z]]X\ZV\_""8!!.SSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSSHSTITTITTITTITUJUGJUUJUVKVWLWWMXXMYYN[[O\\Q]]R^_T`aTbcVdeYgg[ij]lm_opbrsfvwhyzjzzjzzjzzjzzԃvyxrvtnƯ^``Z^^X]\WZZX""hG"1SITTITTITTITTITTITTITTITTITTITTITTITTIT}ITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTIUUIJUUJUUKVVKWWLXXMXYMYZO[[P\]Q]^R_`TaaUccWefZgh[jk^mnapqcsugwxizzjzzjzzjzzjz}{zswvptrŮwb^Z]]W[[Wr%"AR".GTTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITUJUIUJUUJUVKVWLWWMXXMYYMZ[O[\P]]Q^^S``TabVcdXfgZhi\kl_nobqrduvhxyjzzjzzjzzjzzjuywrutnrĺA"$Z""%QTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTJUUJUGJUUJVVKWWLWXMXYMYZN[[P\\Q]^R^_T`aTbcVdeYgg[jj]lm`opbrsfvxhzzjzzjzzjzzjzzyswvpsrmĿ¾Z""l"(NITTITTITTITTITTITTITTITTITTITTITTITTITTIT}ITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTIUUJUUIJUUJUVKVWLWWMXXMYYMZ[O[\P\]Q^^S``TaaUccXefZgi\jk^mnaqqctugxxjzzjzzjzzjzzjz}zxquunrqĿ¾¼r""{x"&CTTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITUJUUJUIUJUUKVVKWWLWXMXYMYZN[[O\\Q]]R^_T`aTbcVdeXgg[ij\km_npbqseuwhyzjzzjzzjzzjzzjӉwvptrlxÿ½""i$"ITITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTIUUJUUJUUJUGJVVKVWLWWMXXMYYMZ[O[\P\]Q^^R_`TaaUccWefZgh[jk^mmapqbstgwxizzjzzjzzjzzjzzӶrvtorq¾""D&#HJUUITTITTITTITTITTITTITTITTITTITTITTITTITTIT}ITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTITTIUUJUUJUUJUUJUUIJUVKVVLWWLXXMXYMYZN[[O\\Q]]R^_T`aTabVcdXfgZhj\kl_nobqrdtvhxyjzzjzzjzzjzzjz}ҙqtsmľ¼#"""":UUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUIVKVVKWWLWXMXXMYYNZ[O[\P\]Q^^R_`TaaUccWeeYgh[jj]mm`oqbrsfvxhyzjzzjzzjzzjzzjѫþ-""?UJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUVKVGKWWLWWMXXMYYMYZO[[P\\Q]]R^_T`aTabVcdXfgZhi\kl_mnbqqdtuhxxjzzjzzjzzjzzjzzľ4"":JUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJU}JUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUVKVVIKWWLWWLXXMXYMYYN[[O\\P]]Q^^S_`TaaUccWeeYgh[jj]lm`opbrsevwhyzjzzjzzjzzjzzjz}û6""UUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJUUJVVKVVKWIWLWWLXXMXXMYYNZ[O[\P\]Q]^R^_T`aTbbVcdXfgZhi\jl_mnaqqcsugwxizzjzzjzzjzzjzzjĽA""JVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVLWWLWGLXXMXXMYYMZZO[[P\\Q]]R^^S``TaaUccWeeYgh[jj]lm_opbqseuwhxzjzzjzzjzzjzzjzzA##UKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKV}KVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVVKVWLWWLWWILXXMXXMYYMYZN[[O\\P]]Q^^R_`T`aTbcVdeXfgZhi\jl_mnapqcstgwxizzjzzjzzjzzjzzjz}ûB&#\6##WWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWMXIXMXXMYYMYZN[[O[\P\]Q]^R^_T``TabVccWefZgh[jj]lm`opbqseuvhxyjzzjzzjzzjzzjzzjƾ.!&& S5#&LWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLWWLXXMXXMXGMYYMYZN[[O[\P\\Q]]R^^S``TaaUccVdeYgg[ij\kl_mnaqqcstgwxizzjzzjzzjzzjzzjzzk&&!&& /#(XMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMX}MXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXYIMYYMYZN[[O[[P\\Q]]Q^^R_`T`aTbcVcdXefZgh[jj]mm`opbqseuvhxyjzzjzzjzzjzzjzzjzJļT"&&!&&$/&XXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXXMXYMYYMYIYMZZN[[O[[P\\P]]Q^^R__T`aTabVccWeeYgg[ij\kl_mobqqcsugwxizzjzzjzzjzzjzzjzzjǿI'"&&!&$$4MYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYZNZGO[[O[\P\\P]]Q^^R^_T``TaaUccVdeXfgZhi\jk^mm`opbrseuwhxyjzzjzzjzzjzzjzzjzz¼>''"&&!v$$>YMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMY}MYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYYMYZNZZN[[IO[[O\\P\\Q]]Q^^R^_S``TaaTbcVddXffZgh[jj]lm_nobqqdtugwxizzjzzjzzjzzjzzjzzjz}ƽ¼5"''"&&j $$>[ZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZNZZO[[O[[O[I[P\\P\\Q]]Q^^R^_S``TaaTbcVcdXefZgg[ij\kl_mnapqbrsfvwhxzjzzjzzjzzjzzjzzjzzjý(("''"+X% $OO[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[P\\P\GP\]Q]]Q^^R^_S``TaaTbbVccWeeYggZhi\jk^mm`opbqrdtvhxxizzjzzjzzjzzjzzjzzjzzľ¼#(("''><%%!Y\P\\P\[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[}O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[[O[\P\\P\\P\\P\]IQ]]Q]]R^^R__T``TaaTabVccWeeYfgZhi[jj]lm_nobqqcstfwxhyzjzzjzzjzzjzzjzzjzzjz}ɿĽ»k(#(("(c) %0Q\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P\\P]]Q]]Q]I]Q^^R^^S__T``TaaTbbVccWdeXfgZgh[jj\kl_mnapqbrseuvhxyjzzjzzjzzjzzjzzjzzjzzjſý5)(#(("r&& A]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]Q]]R^^R^GR^_S``T``TaaTbbVccWdeXffZgh[ij\kl^mm`opbqrdtugwxizzjzzjzzjzzjzzjzzjzzjzzǿľ¼)$))#(([!&&F^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^}R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^_IS_`T``T`aTaaUbcVccWdeXffZgh[ij\jk^mm`nobqqcstfvwhyzjzzjzzjzzjzzjzzjzzjzzjz}ƿĽ»C*)$))$E8&!(^S__S^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R^^R__S__S_`T`I`T``TaaTabUccVcdWeeXffZgg[ij\jk^lm_nobqqbrseuvhxyjzzjzzjzzjzzjzzjzzjzzjzzjΑZL^ƿý*%**$))o}"&&2``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``TaGTaaUbbVccVcdWeeYfgZgh[ij\jk]lm_nnapqbrseuvhxxizzjzzjzzjzzjzzjzzjzzjzzjzzԕNSQKPž¼2+*%**$0V'"'PTaaTaaT``T``T``T``T``T``T``T``T``T``T``T``T``T``T`}T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``T``TaaTaaTaaTaaIUbbUccVccWdeXeeYggZgh[ij\jk]lm_mnapqbqrdtugwxhyzjzzjzzjzzjzzjzzjzzjzzjzzjz}`TLQQINĽ»H,&++%**`+((%abUbaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaTaaUbbUbcVcIcVccVddXeeXffZggZhh[ij\jk^lm_mnappbqrdtufvwhxyjzzjzzjzzjzzjzzjzzjzzjzzjzzjPSRKQOHMqƿĽG&,,&++%6e("(BVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccVccWdGXeeXefYfgZgg[hi[jj\kk^lm_mnappbqrcstfvwhxyjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzhMRQKONGLXžü6--',,&,,}/((#ZeWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWd}WddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWddWeeXeeIXefYfgZggZhh[ii\jj\kl^mm_nnappbqrcstfvwhxxizzjzzjzzjzzjzzjzzjzzjzzjzzjzzjz}ΩSLQPINMFLJZž¼]..'--',,&`h)$)9YffYeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXeeXffYffZgIgZggZhh[ii[jj\jk]ll_mm_noapqbqrcstfvvhxxizzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzj͜RKPOHMLFK@*7\}ƿĻO0/(..(--'-H1**$XgZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZggZgg[hG[ii[jj\jj]kl^lm_mm`oobpqbqrdstfvvhxxiyzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzz͞RJONGLL@51*11*5JOabTN6*00*0/)..(..:^*%*8[ii[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[h}[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[hh[ii[ijI\jj\jj]kk^lm_mm_nnaopbqqbrrdttfvwhxxiyzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjz}̬YINMFJ<*11*11*11*11*11*00*00)//(A(++%Zj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\jj\kIk]kl^lm_mm_mn`oobpqbqqcrsetugvwhxxiyzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjrHML<11*11*11*11*11*11*10*00*0QH,&,A^ll^ll]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk]kk^ll^ll_mG_mm_nn`ooappbqqbrrdsteuugwwhxxizzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzə@11*11*11*11*11*11*11*11*05tk',,(gn_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_m}_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_mm_nnI`nnaoobppbqqbqrcssetufvvhwxhxyizzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzƉJ1*11*11*11*11*11*11*14dz0-'-Rbpoaooaooann`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`nn`ooaooaoobpIpbqqbqqbqrcssdttfuvgwwhxxhyzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjE<Ƽù]ŵŵŵŵĿxzļwuzulekjr]c}IE}u|ŵŵĵĵztĽts}nlejl~za]Il{u{|ŵŵĵĽvzžqqzqkkdjr\_u~~~~~~~~~~~~~~~~~~~~~~~~~~Gʘu{{uĵĵztžkpikkdi^W}~|||||||||||||||||||||||||||}}~~I~Ȓ|{u{ĵĺuzþxhs~gkicnu\\}|||||||||||||||||||||||||||||||||I}~~™|u{zĵztzryyrwwovtnttlrqn~nhltekjcybTj}zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{|G||~~ȚuzztuzszzryyrwwovuottlqqjqphnngolekjfYXs~~}~}}}{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyzIz{||~Ɠ{ztzztzszzryyrxwqvvottmrqkpphnnhllfkje~PV~~||||{{yvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwxIyz{|}~Ҿ{tzzszzszyr~wmlekkchhahaUW~}|||{{zwvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwGxyz{|~~Ѹzzszzsz~θuihaee^de~MSs~}|{{zzzwuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvIvvwyz||~ŋzzszzs{Ÿt^dd]aa]RL~}|{{zyywtttttttttttttttttttttttttttttttttttttttttuuIvvvxy{|~Ο|ztzzsԻcaZ_^Wh_PU~}|{zyyxxvsrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssttGuvvwxz|}~ŻѺztzzsҽaW][UZ{OIh~~}{zzyxxurrr}rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrIstuvvwy{|~ɮ|tzzsʼnUZYRXd~MMp~|{zzxxwvuqppppppppppppppppppppppppppppppppppppppppppqqrrIrstvvwxz|~̖tzzt{εgWWPVWgFO}{{yywwvusooooooooooooooooooooooooooooooooooooooooooooppqqGrrsuvvxz|~zztzʔXUNSRrOKV~}{zzyxwvuqoooooo}ooooooooooooooooooooooooooooooooooooooooopIpqrstvvwz|~ztzzʯaRLQPfCIs~}|zzywwvupoooooooooooooooooooooooooooooooooooooooooooooooooIoqrrtuvwy|~~tzzvȼvPJNN]kHB}{zyxwwusn~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~nooGopqrsuvwy{}?zztNGMLWJGV|{xxwvvtp~}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}n~~n~Ioooprstvwy{}IEtzžLEJI]E@jzyxwwvuo}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m~I~nooprrtvvy{}Nxwuutr}k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{}k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{{k{|l||l}}Im}}m~~nooqrtvvy{~EI٘wwnttĿüwF@EEwDCXvutsp}{jzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzjzzj{{k{|l|I|m}}m}~n~ooqrtvvy|~>wputms}Ŀ¼lE?DF=8?JLcshxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhyyiyyizzjzIzk{{l||m}}m~~ooqrtvwz|~̀wpwvntsž¼A@:CoZ>=:010*0Xigxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhx}hxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxhxxiyyIjzzjz{k||m}}m~~ooqruvx{}wwpvunƿý»8r[=10*00*03:EphwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhxxhxxhxxhxxhyIyizzjz{k||m}}m~~ooqruvx{~}pwvnuǿĽ¼y8=:HxaC40*00*;whwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhxxhxxhxxhyGizzjz{k||m}}m~oorsuvy|~HwwouuwžýG03yh*00:wwhwwhwwhwwhwwhwwhwwhwwhwwhwwhw}hwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhwwhxxhxxIhyyizzjz{k||m}}n~oprsvwz|pvunuƿĽ»}0*0Ma/)6ngvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvhwwhwwhxxhxIxhyyizzj{{l|}m}}noprtvwz}wvnuuľü<0*0k)/5^vvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgwwhwwhxxhxGhyyizzj{{l|}m}~noqruvx{~puunuſýr00*^m0/,gvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgv}gvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvwhwwhxxIhxxhyyjzzk{|l}}m~~ooqsuvy|~}ۈunuuqĽ»1002z2)1cgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvwhwwhxIxhxxiyzjzzk{|m}}m~oorsvwz|puuntؾſý»e*00s//0QvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgwwhwxhxGhxyiyzjz{k||m}}noprtvx{~}nutm|Ɣŷ0*0S8/)Xvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgv}gvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvhwwhwxIhxxhyyizzj{{l|}m}~ooqruvy|~}ڛuntzԑ|Ʀsjjcigaff`{A0*3>)/QgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvvgvwhwwhxIxhxxiyyjzzk{|l}}m~oorsvwz|ףڧ~{Ʀljcjibgg`ed^fd00*|/65.^A,25l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l||l}}m}}m}Gn~~oopqrtvvy{~p66/65.<2,9}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}~In~oopqrsuvxz|~}ź_/66/651225}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}}m}~n~~nIoopqrsuvwz|~ȾU7/66/63,3In~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~nooGopqrsuvwy{}ûJ77/66/y33,Xoooooooooooooooo}ooooooooooooooooooooooooooooooooooooooooooIopqrsuvvx{|~}ȼûD077066r,33WooooooooooooooooooooooooooooooooooooooooooooooooooooooooopIqrrsuvvxz|~ż¹880870;b4-4ppooooooooooooooooooooooooooooooooooooooooooooooooooooooppqqGrrsuvvxz|~ƾĻ288187IG44.~qqpppppppppppppp}ppppppppppppppppppppppppppppppppppppppqqqrIrstuvvxz|~}˿żúu929818l7.4DrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrsIstvvvxz|}~ǾżºB::2991v55.\srrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssttGuvvwxz|}~ƾļ¹:2::299e/66dtttttttttttttttt}ttttttttttttttttttttttttttttttttttttttttuuIvvvwyz|}~}ɿǽϹO;:3::2SF6/9vvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvIvwxyz|}~Ϝi[nȿƼú<4;;3::u/66GvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwGxyz{|~~؟]dbZaǾżú@=<4<;3Aa707qwwwvvvvvvvvvvvvvv}vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwxIyy{||~Gpd[baX_ǾżW>5==4<>6==5Gn918]{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{|G||~~w\cbZ`_W^hɿǽûD??7>>6>><992|||||||||||||||||}||||||||||||||||||||||||||||||||||||||||||I}~~ϰd[aaX__V]\gȾƼıhAA8@@7??6mr:2:Q~~}}||||||||||||||||||||||||||||||||||||||||||||||||||||}}~~I~ϥc[a`X_^U\S6>[G͢PEE>9}Iʐ[EDC=HX]yzvqqqqqqqqqqqqqq}qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrIsttuvwy{|}ż®vzzszwpwwy~{qusimjaebZ][QVTKOLDJJCIIAGF?FE>DM>BB;BA;CORj{ppppppppppppppppppppppppppppppppppppppppppppppppppppppqqqIsttuvwy{|}ʾ¯ztzzqww{||swulpmche\`]UWVMQNFJJCIIBGF@FF>EC=FrgV?A>354-4@HdwppppppppppppppppppppppppppppppppppppppppppppppppppppppqqGrstuvwy{|~Ļtzzsyx|vzxorpfjg_b`W[XORQGKKCIIBHF@FF>ED>CB<[naO633,33,3:C^pnooooooooooo}oooooooooooooooooooooooooooooooooooooooopqIqrstuvwy{|~żzztzyqy}zptrimjaeaY\[QURIMKDIICHG@FF>ED>CBJxoooooooooooooooooooooooooooooooooooooooooooooooooooppIqqstuvwy{|Կ¹tzzry|}twulomdge[_\TWULPLEKICHHAFF?EE>CCExxxtjX@63,33,@oooooooooooooooooooooooooooooooooooooooooooooooooooppGqqstuvwz{|ʾĻzzsyywv{worpfjh_b_UZWNRPFKJCIHAGG?EE>DC344hxxxxwo^,33=oooooooooo}ooooooooooooooooooooooooooooooooooooooooooIpqqstvwxz{}FȻtzyryz~{purimjaebY\ZPTRILKDJHBGG@EE>DD=BB;B>45-3Ixxx~x~~x~~xX3,:woooooooooooooooooooooooooooooooooooooooooooooooooooooIpqrttvwxz|~zzryyz}~txulpmdge[_\TWUKOLDJJCGG@GF>DD>CB;B?454-43,3sxx~x~~x~~x~_,39eoooooooooooooooooooooooooooooooooooooooooooooooooooooGpqrtuvwy{|~tyyryw{xnrpgjh^b_VZWNRPGKJCIGAGF?DD>CC=B@564-44,33,Vx~x~~x~~x~~_330oooooooooooo}ooooooooooooooooooooooooooooooooooooooooooIopqstuvwy{|yryys{~|rvsinjafcX][QURJMKCIIBGG?FE>DC=BB784-44-43,332~x~~x~~x~~xk5,5kooooooooooooooooooooooooooooooooooooooooooooooooooooooIpqqstuvwz{}syyrx}vyvlqodif\_]TWULPMDKICHG@FF>EC=BB9:4-44-44,33,33d~x~~x~~x~p023V~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~oooooGpqqstvwx{|~~ryxq{|umsx|zptqhki`c`VZXNROFKKCIHAGF?EE>CB:<7.44-44-43,33,3Nx~~x~~x~~m82,^~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~}n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~ooooIopqrtuvwy{|yqxz{ptsjp||twtkolafcZ]ZQURHLKDJIBGG@FE>DDED>B;.55.44-44-44,33,33,m~x~~x~z:22F~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~oooooGpqqstvwx{|~{ptrjomc|{qtrimj`d`W\YOSPFLKDIIAGG@FD>C?255.55.44-44-44,33,33S~~x~~vG3,J~ooooooooooooo}ooooooooooooooooooooooooooooooooooooooooooIopqrtuvwy{|7wulqogljoyvlomcge[_[SVSJNLEJICHH@FF?DB6D.55.55.44-44-43,33,3Cx~~x~K,3EloooooooooooooooooooooooooooooooooooooooooooooooooooooooIpqqstvvxz{}ntrioldirosqhkh^b_VZWMQNELKDIHBHG?FE:96/66.55.54-44-44-43,33,4|x~L338{ooooooooooooooooooooooooooooooooooooooooooooooooooooooooGpqrtuvwy{|~ukqofki`ptjokafbX]YQSQHMMDKJBHHAGF=>7/66/65.55.54-44-44-43,33,oxZ3,<4<<4;:2::299188188077077066/66/66/55.59ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttuGvvwxy{|}v|uzxlqncgdZ^[QWWLSSJPPGG>5=<4<<4;:3::299188188077077076/66/66/66/=tttttttttttttttt}ttttttttttttttttttttttttttttttttttttttttuuIvvwxy{{|}x~{puqgli^c`UZXPVTLSRIOH6>>5=<4<<4;;3::299288188087077077066/66/669uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvIvwxyz{|~t|{~sywkpmbfdY]\RXXOUTKQP@??6>>5=<4<<4;;3::299298188188077077077066/6NvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwGwxyz{|~|p~v{zotrgkh^b`T[YQXWNUSII@7??6>>5==4<<4;;3::2:92991881880880770770770^vvvvvvvvvvvvvvvv}vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwIwxy{{|}ywy|rwtjpmbfeY^\SZYPVUMSJ8@@7??6>>5==4<<4;;3::2::299288188188087077077]wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxIyz{{|}mu}uzxnsqfkh]b`V\\QYXOUUDBA8@@7??7>>6==4<<4<;3;:2::29929818818818808807xxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxyyGz{{|}ujx}{qvtimlafdY`^U[ZQYWNMC:BA8@@7@?7>>6==5<<4<;4;;3::2::2992881881881881yyxxxxxxxxxxxxxx}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyzI{{||~sq{~tyvkqncig]baX^^TZZPXP;CC:BA8@@8@?7>>6>=5=<4<<4;;3::2::2:929928818818I{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{I{|}~go~v{yotrglj_ecZaaW^]SZYIFD;CC:BA9A@8@?7?>6>>5==4<<4<;4;;3::2::2992992991b{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||G|}~ncz|rwukpmchf\cbZa`V]\RTH>6==5<<4<<4;;3;:3::2::2:9299j||||||||||||||||}||||||||||||||||||||||||||||||||||||||||||I}~mk}u{xmspekh^dd[aaY__U\XCFF>6>=5==4<<4<<4;;3;:3::2::2<}}||||||||||||||||||||||||||||||||||||||||||||||||||||||}}~Iaix}{qvtjkh`fe]ccZa`W_^RNH>GF6>>6==5<<4<<4<<4;;3;;3::L~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Gi]|uzwmrmahf^ed[baY`_W]S@HH>GF>6>>5==5<<4<<4<<4;;4;z}Ige~w|zourhji`ff]dcZaaX__NJJ@HH>GG=FE>6>=5==5<<4<<4<<9I[bz~sxvkpobhg_fd\cbZa`WYKAJJ@IH?HG=FE6>>6>=5==5==4FF6>>6>>6==5}Ie_y|rxujpmcih`fe]dcZa`WSJAJJAJJAJI?HH>GF>6>WIY`uzxnsqfkjahg_ed\cbZaWAJJAJJAJJAJJ@HH>HG=FFFFHG=FFGF=FFGF=FFGF=FFA%<A">A%<A">A%<A7+A MAF{A^AU0AO gimp-commentCreated with GIMPgimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches)  *! New Layer#2     K[o\qxx Lxx LwwLxxLwwLwxLwwLxrRRMLnRLƮYNLfMR4LNR02zRRJ20F0y؂R D0}RB H00Mb{ Sу SςS܃S𯂂S𰂃S𮂂S{<S[GKicgxc]PZQeQRNVUNV_RYWTBLMFV[]ZhlZZ[QS_=C@6@EFDHDDBHCDIM2::GU`YOGKELD49}B:NO3__Uu|j0B@D|fqN%_``/EM9=\WYmUOCMDYBD?HG@HQEKIF3>@7HMOLZ_LLMBDR/71&05868654:44<@$++9GUL@7=9?5%*r5,@?3_?8bo],6Ei3%NAp.%%>ԡ>%N   .NW+"(ٜ3 ߢu^胕ղrr~zyڲP R&,F2/f . New Layer#3     \^r i`i `i `v`v``v``iiSv``v`SS`v˜i`v`iSiSvv`iv`i`iS``vJv` SJ ժ =5= 5|=\ \5\\Lf\5L55L\\55==,\fL55Lff5,||,ff5Lتt=t\5L5=,=t\,fLff\tL5t=\L5=5\=,t55Lت'L5\ ,' Ċ .%. %p.N N%NN>XN%>%%>NN%%..NX>%%>XX%ppXX%>ԡh.hN%>%..hNX>XXNh>%h.N>%.%N.h%%>ԡ>%N     Ψ%2^2 N r  New Layer#1     CARlnf6Dka󀰫zqzHQ@g.S0eeDU[U!K#<|o7.^TQ+ c@R9Wx3G}]_0'3ʁElI&PS&mI`< f|1Tj$wn &LUV.YS:on~Qqܣ(YY`Kn* fo(x BTmkh7Cd]vxr{H@2^'ℵA&egBNuUVF#:{u9!\UV" aBW9Js2E}_d3#.~DmI%PT'jGa= g|1|Ri#xn &MU{S-ZT:pn{Oqܣ(YX]Kn(}fo(x 6VJV9o!8xs6e^VS|cAU5A%<A">A%<A">A%<A7+A MAF{A^AU0AO gimp-commentCreated with GIMPgimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches)  8 color copy     AJ^n xxq\xxL wwLxxLLwwLL xwLLwwLLMRRrxLLRnLLNYƨLLRMfLLRNL4Rz20Ry0F02JBR}0D M00H {bS SSSSS SSSSS<<{SS.cJUqxo^FT$jklU?W"e[jmP??JG:U$gRP1*//+5:S#_A5><:88k5lB788;j?ZrXLToe;MB W Sl.,  J     |  q4"&4mw?-   4 Selection Mask   0*     springlobby-0.169/images/originals/chat_icon_text.xcf0000600000176000000410000000305112105760277024364 0ustar buildbotwww-data00000000000000gimp xcf file BB$gimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) M  Pasted LayerM     L ` p"  "  "    "         New Layer#1        springlobby-0.169/images/originals/closed_game.xcf0000700000176000000410000000257612105760277023647 0ustar buildbotwww-data00000000000000gimp xcf fileBB$gimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches)  Background     :N^ Ѿɾ޾տ̿Ⱦ˿ȿ )**)*ac*)HǜL)EI**MQ)^a*_x||w^)*:[lv{||{vl[:))+1:O]ceec]O90+*.4*z@}A  New Layer         v&  *VtV5lvlj?tt@|,,օ_w(VtWvx=x:tt>,!%f@eCv ej@Rx\A@{@HvHvAtM@b'  Rendered SVG        % 5f9:9999eiC9@9b鲫@89޿̻P99ƺD;8Rߟ99ƷP7<ʫ·93hܢʗ99qڸ蜴w99aεjr9PꤛLo9:u}tiʄH`99vrsmeZxʼvcC89A`b\TLpVa9$ 9VҤRPKD@Il<79Y\B@>=<;xo@9+:KpVHDJYm[;8$:9BPX`\M;9@']vdiF5=?izzK<9 {ywvsh~ۺ\rtvxɬw͡^ZUPKGBVhha@BGLPV[hPONJA:4Rjj]74;BKOS\ -*)'')+%if3;;9:999<;;<99eiC9@$3;=9bǾ@8U+,@3;;9P9@,)9;9D;,,;98Rߟ9,+,D;;9P70+,;:<Ծ·9++*;:;83h͠9,++<;;@9q訵~9++9;<@9a{9++;:Pht9++,:;;:ʪʐh`9++<;9vȜʼrC8++<;<9Aꬎ}hb9,++I:;@9Vҭ~|wpop<7++@;<9Y|troje_p@9+++;9:Kvnjhnu\;8++$*:9BPX`\M;9@ ,++3']vdiF$* 5=?izzK<9 {ywvsh~ۺ\rtvxɬw͡^ZUPKGBVhha@BGLPV[hPONJA:4Rjj]74;BKOS\ -*)'')+%iffhhijll cihhllslp$3ghhl̢qlU+,@fhhglzk@,)9hlrm,,hqj~߰l,+,fhhlxi0+,hgnΟl++*ihhfЪl,++ghhpk賷l++jghokęl++hgg}Šl++,ihhmʞl++ghhl¼ʼsp++hgghrl,++mgh`lҷon++`fflql++Ufmlvnm++mUklsst{mk ,++3)duvK$* 5=?izzK<9 {ywvsh~ۺ\rtvxɬw͡^ZUPKGBVhha@BGLPV[hPONJA:4Rjj]74;BKOS\ -*)'')+%if0a' >akV(7u"j"{`"R} +#(TT ?2׶ %Y"cf a`.TN|($:W/ 2pC>r/Nk `J^ΐ,O 2b22G b$i "d` NMz;Vp߭r5  %Z-#B. "5˹O2 3rE ԓ(l U*z@}A  New Layer         v&  *VtV5lvlj?tt@|,,օ_w(VtWvx=x:tt>,!%f@eCv ej@Rx\A@{@HvHvAtM@b'  Rendered SVG        ) 9f9:9999eiC9@9b鲫@89޿̻P99ƺD;8Rߟ99ƷP7<ʫ·93hܢʗ99qڸ蜴w99aεjr9PꤛLo9:u}tiʄH`99vrsmeZxʼvcC89A`b\TLpVa9$ 9VҤRPKD@Il<79Y\B@>=<;xo@9+:KpVHDJYm[;8$:9BPX`\M;9@']vdiF5=?izzK<9 {ywvsh~ۺ\rtvxɬw͡^ZUPKGBVhha@BGLPV[hPONJA:4Rjj]74;BKOS\ -*)'')+%if3;;9:999<;;<99eiC9@;=9bǾ@83;;9P9;9D;;98Rߟ9D;;9P7;:<Ծ·9;:;83h͠9<;;@9q訵~99;<@9a{9;:Pht9:;;:ʪʐh`9<;9vȜʼrC8<;<9Aꬎ}hb9I:;@9Vҭ~|wpop<7\@;<9Y|troje_p@9+;9:Kvnjhnu\;8$*:9BPX`\M;9@']vdiF w5=?izzK<9 {ywvsh~ۺ\rtvxɬw͡^ZUPKGBVhha@BGLPV[hPONJA:4Rjj]74;BKOS\ -*)'')+%iffhhijll cihhllslp%3ghhl̢qlU,,AfhhglzkA,*9hlrm-,,hqj~߰l-+-fhhlxi1+-hgnΟl,,+ihhfЪl,+,ghhpk賷l,,jghokęl,,hgg}Šl,,ihhmʞl,,ghhl¼ʼsp,,hgghrl-,,mgh`lҷon,,+`fflql,,Ufmlvnm,,+,,mUklsst{mk!,,4)duvK%*!5=?izzK<9 {ywvsh~ۺ\rtvxɬw͡^ZUPKGBVhha@BGLPV[hPONJA:4Rjj]74;BKOS\ -*)'')+%if0a' >akV(7u"j"{`"R} +#(TT ?2׶ %Y"cf a`.TN|($:W/ 2pC>r/Nk `J^ΐ,O 2b22G b$i "d` NMz;Vp߭r5  %Z-#B. "5˹O2 3rE ԓ(l UP@@ New Layer      o@@@@܉qq#qqqqqq     FF    qq; qq qs qs 4 4g#fk (    h  \,7@@ Rendered SVG      @@ +@@ ;$798:9:99$799=RaeaS?9987+:99]ɭZ:99@:99i򦯨§i:98 $ 9Wú󵼶P99  9{ȬŤĺp9:+ 9欹Ϸǥɷ9:  9}ȸĶѭ|9: :9Tڽ^9; 9ʯ=9U 8999 9;ùC: 39݆ͯ97:9Ƿ̾{Ҿ::9AK99~ꨒؙn9@39ֻks9959yz9:;9❊}e}9989Ԟy>h|99;9ǩȸ9mv9; 9p~䮣ٻ{;Z9I9esaD97  79KUWNNLJHEB??>=CeO99 89MîAEECA??>>==<;wR99 89HƙB??>=<<;;:VwzK9: +;9=wbC==<;Wm~zkW@99@896 ,6:7997@$7AS\TMOT]K<,(2FzzR84%'&/.-=CzzQC,-+*;CFFCH~zzTCFFDC";FHFGGFC bFG GFHC 벫xJ ÎHľ ǐI Т{J ǐH gI pgiig_XTOKHE@?DbbVC7;89HƜbqqponmkifda^ZfzK9: +=9C;9=wokjihfeb`^\j|h?98 @<+=:9Eo|vpnmnrzkI99;3:99>Wm~zkW@99@896 ,6:7997@$7AS\TMOT]K<(2FzzR8'&/.-=CzzQC,-+*;CFFCH~zzTCFFDC";FHFGGFC bFG GFHC 벫xJ ÎHľ ǐI Т{J ǐH gI pgiig_XTOKHE@?DbbVC76-$&0:D~KA7-# Ey%J !XĶj0 )aЫ{< )aЫ{< *?UjȰz^G0 P|ʩX! @gmF !,6ANRH>3)%.7QɾF=5+""*18>DIMPSTUUTROLGB<6/'" $)-1467887530,'"(  @@Selection Mask -@@-@@-l6֪04 4.4Tz4S 3`3 {3W3'2i12 F11F 22(4444455 44$4.4{33w 3 2I 2 1H 0; / . -,$*)H) ߩc+Nͤ[(0C}I Jspringlobby-0.169/images/originals/game_state_open+closed-pw+no-pw.xcf0000600000176000000410000001333712105760277027460 0ustar buildbotwww-data00000000000000gimp xcf fileBBI$gimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) w png     !?Sc ǞЮ֞u֧цֳuǽĭƯǰвȱwBȱɲyʳ}ʳoCk~ ǞЮ֞u֧цֳuv}e[󂕧Ȼyd÷}e}eƤ~e󂹻V0~e󂱶be󂮶~Wd󂩶[P󂀊pD'A^jM ǞЮ֞u֧цֳu1 9^W#WZl}l."h|{zzyxe0'_rqppnm]0'VgVD`dcU0'NJ:DXM0(;=- :9BF0(2=*:9890(,=+:9861( $*/46% D{0 ^>Kx5Hi* I(L(L(L(L(L(M'_L= 3Fav/ New Layer#1     ._sЫ|s}~whwq纰ïoϾɺĴ܏ѫ﹜閛ճrqoؼͺӽ{whfɑrJl`Io<< o New Layer#2     0 ' ; Kʰٸ ~ڸ1ڹ\ۺ7ܺeݹ=ɫ0v`i`[`$`C`(`I$|r  #&#59#4974%>0974%>7 .974%><:975%>: 4975%9-975$  $%%" Yzҵ*Hئsvg      }   ǞЮ֞u֧цֳuǽĭƯǰвȱwBȱɲyʳ}ʳoCk~ ǞЮ֞u֧цֳuv}e[󂕧Ȼyd÷}e}eƤ~e󂹻V0~e󂱶be󂮶~Wd󂩶[PpD'A^jM ǞЮ֞u֧цֳu1 9^W#WZl}l."h|{zzyxe0'_rqppnm]0'VgVD`dcU0'NJ:DXM0(;=- :9BF0(2=*:9890(,=+:9861( $*/46% D{0 ^>Kx5Hi* I(L(L(L(L(L(M'_L= 3Fav/New Layer copy     ( (BNZZMC((;UnjkkinU<9Z`\]ZZ]]`[;(LXRSSQQSSRXM(;NJFKKMMKJFHO=(@B<>ABBA>350''+,,+''164*!##! *4(&'(!!  !!!! ! !  70yw7*     0$yjwj*$  New Layer      Ѿ޾տ̿Ⱦ˿ȿ )**)*ac*)HǜLEI**MQ)^a*_x||w^)*:[lv{||{vl[:))+1:O]ceec]O90+*.4.JL9䐔p¸}DA>:74;/,J:LNC@=:634:))oOVέǽFA>;842.9*0VFXƻJ><9630--:X<QzBHB41.+()C`9J^xsl@A?5,5dN8A湨ĭM>Y~~xqqxfdbXJsRD96Xϐ|joi:dwrmm{zzU;9xS@68tlgcqv`@2yZX6233>krٟmpm\R8//6MVS[zﱏ{GTT7,,=KJGDHg諥S*PI+,>@@>>B]Ӻܶ. 1UHK@>><<\a }fFPQ\V`pyk {o@<3,5MdolT!EK;:;99<:@;Ai]:9 Nč|d:: 츎­ՙǶh?ȭٺӸ}ڰȖx``xR<Ҡvc`]_j:扽⴯^ZdT7q麕~wXj<tൢljM3͎mzՐkhvz|jZqc9䐫¾Ԡljheb`h\[s:Uvkifda^`iVUO^̼njgec`^[hX\uF_Ľrhfda_\Z[Zdu<TŨlrl`][XVUiv:Jȝijh`X__:Bɻоsh{poM96aݫdm=:yibckA2~b^^i௛opf\\c{򼒞{GmgXYl||zwz뮥S*drW[psrpnnฯ. 1`gtmjihf}¯a }fOdp{ptz{k {sGA4,5MdolT!EKomnllnljlrƫnk }⺫ƒmh ʭ‘súŭ¶iŪmЬmּ˰׮o؟ĶОfڶﻠΓkȢm먠|ߢvঞoʡlyŞmr֥ɵ{kk̽ӳ±nmȪͪq^ʼų爩̭{k²SPʸ. JƳ¹a }ĕk {sm_QIMdolT!EK Eul58  $  )e -y ^04| T`R<tQKz>   gd,Z#-@ R" (;M k> ->OękH!  )7Gx׹xrhU:  '2@@ New Layer#1     @@@@030801]:c{Y:٢|$*68L4$o6+A88 Q 88/1#GK55  GK/0 #88ΗΗ 88 xk@@Selection Mask  "@@ 6@@ F0r0x0pUHz%z%`huxs"` L- K6*ww  ww%%<Unp@^*,tt*,1 1 mo/_ww;ww4>springlobby-0.169/images/originals/map_select_1.svg0000600000176000000410000000570712105760277023756 0ustar buildbotwww-data00000000000000 image/svg+xml springlobby-0.169/images/originals/map_select_2.svg0000600000176000000410000000567012105760277023756 0ustar buildbotwww-data00000000000000 image/svg+xml springlobby-0.169/images/originals/numbers_icon.xcf0000600000176000000410000000735512105760277024067 0ustar buildbotwww-data00000000000000gimp xcf fileBB,O gimp-commentCreated with GIMPgimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches)  2      gimp-text-layer(text "2") (font "Sans Bold") (font-size 15.000000) (font-size-unit pixels) (hinting no) (antialias no) (language "en-us") (base-direction ltr) (color (color-rgb 0.000000 0.000000 0.000000)) (justify left) (box-mode dynamic) (box-unit pixels)    1     gimp-text-layer(text "1") (font "Sans Bold") (font-size 15.000000) (font-size-unit pixels) (hinting no) (antialias no) (language "en-us") (base-direction ltr) (color (color-rgb 0.000000 0.000000 0.000000)) (justify left) (box-mode dynamic) (box-unit pixels)    New Layer#4     A@AA@AA\]\]\\A\wxwwxwxw\AA]ww\AA\ww\AA\wíw\AA\xɭw\AA\wɮw\AA\wȮw\AA\wȮw\AA\wɮw\AA\xw\AA\xw]AA\xwwxwxwxww\AA\\]\]]\\A@AA New Layer#3      szxzzxzz zzzzzzzòzzzzzzſzzzzzzzzzzzz zxzz   poppopp pppppppppӵpppppppppppppppp popponoonoo ooo嘄oooooooo­oo­oo­oo­oooooooo onoo New Layer#2      K _ o!        !   rqrrqrr rrrrrrrrrӶrrrrrrrrrrrrrrrr rqrronoonoo ooo嘄oooooooo­oo­oo­oo­oooooooo onoospringlobby-0.169/images/originals/open_game.xcf0000700000176000000410000000261012105760277023324 0ustar buildbotwww-data00000000000000gimp xcf fileBB$gimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches)  Background     :N^- -dg--LʞP-JM--QT-b󛕐d-b|󍇀{b.->_pyyp`>.-/5?T`gkkg`R?6/.3:BKQRRQKB93.-/6:BHJJHB;50-.169=>><950.-.03688630.-.//0/.- - ѾȾ޾ɾ¾  VY<@9<}~ADS󍇁~URlpz~~xpkS+L^hnppnh^M+'=KSWWSK;&!)39;;93)!!)/11/)" $$#!  70yw7*     0$yjwj*$ springlobby-0.169/images/originals/options_icon.xcf0000600000176000000410000000617712105760277024110 0ustar buildbotwww-data00000000000000gimp xcf file BB$gimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches)   New Layer#1      ? S cH ר 峊å Þ 㯆躇ᘈژ䨇ِٔ ՏÛ ǸߪĞ򇈉ߪţ!OƤlj"Q}Gzȥ X}bHoﺋ JmYSKZ4볊 Jn_e=@U'筈 !Qps{>:K? θэ$jB8DH ͸ʠ!pmRH8=R$ Ľ̌@eK=;M3 [BX@CL2D>$UH ת 崍а Щ 㱉ȗ車Ţᚌۚ䩇ڕڒŸ ֕Ȣ Ⱥ߯Ȥ߰ʨJhʪȋLvm̫ŒK|nﻍKp~wZ봋 Kpaj}Q篋 Kv`ezcK⪉JO`czdKޤJZƪ`aycK٠Jlأb_uhKθяNҏj^oqK͸ʢJ}s]j|M Ľ̎;gwegz\* ^CjlsvBDZmhL"=5UH ֦ 屈ݽ ݶ 㭆ե蹄ЯᕄŹږ䥇ّũَȫ ֠ͭ Ʒί򄅃߹ϲдƆģеܽ︇Ƽ뱆 툥ƾ竅 뇪č⦆􈋶̌ޠ΍؜ʒθЊ͸ʞĶĽ̉lN }Yxx| ApaUH8r  HdH 6-_ .C ~Bj  Gǀv\:$ \  D .jrHZ=A32* 7> R&A7E \0HR8LvQPZZNq Q Q  New Layer      K  _ ospringlobby-0.169/images/originals/options_icon_text.xcf0000600000176000000410000001744712105760277025156 0ustar buildbotwww-data00000000000000gimp xcf file@@BB"OptionszA@B80AB:A B>A BDA BIUABMUA@BOA BR@UUBT@BT@BT@BR@BO@UUBMU@BIU@BD@B>@UUB:@B80@B5eU@B4@B4@UUB4A B5eU@UB5P@UUB8ګ@B=@BD@BJ@@UUBO%U@UBR@UBV:@BX@BXA BXAUBV:A*BRA8BO%UA@BJ@A@BDA@B=A8B8ګA*B5PAUB1UA B0@B0@B0@UB1UA`BWAʫBWAUBXA BXAUBXA`BVUA`BSAuUBPABLUABHABCJAuUB?uUA`B<A`B9AUB8A B8AUB8AʫB8UUA`B9AUB9AUB:AB<AB<AB8AB8AB8A`B8A`B8A`B8A`BdA`BdA`BdABdABdABdABTABTAUBU`AUBVeUAB?ABAABDUABHABKABNUABPA5UBRAJBTA BTABTABRA BPA`BNګABKABHABD A`BA*A B? AB= AB<A B<AJB<A5UB=UAB0AB0AB8AB8AB8AB8AB8AB8AB<AB<AB<AB<AB<AB<ABNABNABR AUUBTUABUAƪBWPA*BXAрBXAрBXABXABXABXABTABTABTA@BTA@BTAUUBTA`BSUA`BRAuUBR0ABPʫABNABNAB<AB<AB<AB<AB<AB<AB8AB8AB8AB8AB8AB8AB0AB0AB0AB0ABXABXBBXBBXBBXBB8BB8BB8AB8AB8AB8ABXAB4AB4BB4BB4BB4BB,BB,BB,AB,AB,AB,AB4BB? BPBA*B BD B BHB BKBPBNګBBPBBRBUBTBBTBpBTBpBRBBPBBNګBBKBBHBBD BBA*BB? BpB= BpB<BB<BUB<BB= B @B<@B jB?UBBCBBHBBMB jBPB @BSBUBVUBUBXBBXBBXB UBVUB#BSB&UBPB(BMB(BHB(BCB&UB?UB#B<@B UB9jBB8BB8BUB8BUB9jBLB:BJʫB8BGB8BCB8BAeUB8B?JB8UUB=`B9B;B9B9UB:B8B<B8B<B8B8B8B8B8B8B0B8B0B8B0B8B0BXB0BXB0BXB8BXB8BXB8BXB8BFpB8BFpB8BC0B8UB@UB:B>B<*B<B>zB<BApB<BBB<BCB<5UBDB<BEUB= BFUUB=BFB>`BGJB>BGUB?UBGB@BGBBBHBD:BHBGPBHBGPBHBTpBHBTpBHBTpBHBXBHBXBHBXBPBXBPBXBPBXBPBB@BPBB@BPB>BNUB<`BlB9BjUB8UUBhUB8BfB8BaB8B^ B8B[B:pBY5UB<BXB>BXBABXBDUBXBGEUBZBHB\`BJPB_pBKZBcBKBcBKBeBL0BeBL0BhZBLzBiUBLBjBMBkUBN BlBNBlBPBlBQJBkuUBRJBj`BSBiUUBSBgBTBeBTBc@BTB`BSB^BSB\`BRUUBZ*BQUUBXBPBXBPBXBTBXBTBZUUBUUUB\BVUUB^BWBaUBWBc*BXBe@BXBj*BXBmګBW*BpPBUBrUBSUBtBQUUBtBNBtBJUBs%UBHBqpBG`BoUBFBlBEBgBD`BgBD`BeBD BeBD BcUBCBbUBCuUBa0BBB`ZBBJB_BApB_B@PB_B>UB`zB=ګBaB=0BbUBBtB@BtB@BtB<BtB<BquUB:BoB9$gimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) =Options     gimp-text-layer(text "Options") (font "Sans Bold") (font-size 14.000000) (font-size-unit pixels) (hinting yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgb 1.000000 1.000000 1.000000)) (justify left) (box-mode dynamic) (box-unit pixels) P=d=t   ww np $ww^\FFS% =*,LFF)tPZ54551 <ϐ*, ww4445 WmoN)FFPIww_^hFG@ ::j@@ New Layer     J@@^@@n !88   88! pl/1 ӔGK Ӕ5먔   GK  /08888#*sk ;;@@ Background     @@@@@@Selection Mask a@@u@@  ww ww\ FF% =np FF *,t*,5451 445mo)wwNFFww^hFG@ ;;springlobby-0.169/images/originals/replay_icon.xcf0000600000176000000410000002156012105760277023702 0ustar buildbotwww-data00000000000000gimp xcf file@@BB$gimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) @@ Rendered SVG     <@@P@@`11..423/3,//2.1UxS3. .-02.:r˫/3)1-.40.Bi<60-%,/.2./Kj}I. 9.-02.:r˽fE#4j01-.40+=aTc2,/.3./FbsԬXuq.19.-02.;uǓfE#`*%Gi.-1/.40.L{_  tshd53 ,.03.1[}U|k^B,.30/9.12.=# 0 (11..423/3,//2.1UxS3. .-02.:r˫/3)1-.40.Bi<60-%,/.2./Kj}I. 9.-02.:r˽fE#4j01-.40+=aTc2,/.3./FbsԬXuq.19.-02.;uǓfE#`*%Gi.-1/.40.L{_  tshd53 ,.03.1[}U|k^B,.30/9.12.=# 0 (11..423/3,//2.1UxS3. .-02.:r˫/3)1-.40.Bi<60-%,/.2./Kj}I. 9.-02.:r˽fE#4j01-.40+=aTc2,/.3./FbsԬXuq.19.-02.;uǓfE#`*%Gi.-1/.40.L{_  tshd53 ,.03.1[}U|k^B,.30/9.12.=# 0 (1N2)b.=w )O ?$)bz =wP)b* =w!-Q" )c#b M"ΏQ <"{> f,kΎQ1{> f,! ͍Q& {= *E . 1\2222221a>1~0 i0 i0 i0 i0 i0 i0 i0 i0 i0 i0 i0 i0 i0 i0 i0 i0 i0 i0 i0 i0 i0 i0o0 w0  ~0#0'  '0,# (h/-#%..F*   '/=IMMQ'QMNKE3+# #)-115'51/+&   !"&'&#"   ' springlobby-0.169/images/originals/replay_icon_text.xcf0000600000176000000410000000660012105760277024744 0ustar buildbotwww-data00000000000000gimp xcf file@@BBO gimp-commentCreated with GIMPgimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches)  f A=Replays     ,gimp-text-layer(text "Replays") (font "Sans Bold") (font-size 14.000000) (font-size-unit pixels) (hinting yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgb 1.000000 1.000000 1.000000)) (justify left) (box-mode dynamic) (box-unit pixels) ==   _^-iK@y G@@ New Layer     @@@@ `Wx!1]plW#:{YӔW:Ӕ|*먔X  L  #$ΗwΗo xk#sk A Q@@ Background      @@ !@@ 1@@Selection Mask  @@ @@  `<U\pUHѩ=@^Lzz%h544//_"` NLO4>^- K@ springlobby-0.169/images/originals/single_player_icon.xcf0000600000176000000410000000703012105760277025237 0ustar buildbotwww-data00000000000000gimp xcf file BB$gimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches)  Rendered SVG     @Tdyyw½ܣ  j\`nijتsi5/XՔ0  /M:YͰ|JK/ 'L:6IIYW:4J( 09A679;h><329> $F64667:ٮ63210G( *I3244543210.B2JH1022v`110/*@2 <6001W=0//.'A) $F40040/..0<1 %   ):#+60*Xd\RF4"bltp^F86LhrT56#WgwX8)5Q^ylP3&: FL_jfW?))4 7:CJG<,%6#  &<-,+'%07 2 d7:7/1;4P X:13@t | hޫ zԪ ȿ | ]u j -i Xaa^[YY[_c`E >7߷XZ!l@S@ : 2 ' c  NH Q U F  d :   "Xr;  < Comp      +  ? Oä}{{zvՋǏspmkigdcuӋǀgdcb`]O>_ʖn_^\[O7//P˛`XWUG6567FПYROE<<=>?D͟|QIDCCDEFF˟wLIJKLLMNOHȝqȜŞHnNDo|p{dP=U}pC7b{j ]v Ͻ̿fp}||}b¿Ħ~||w،ȐspmkigdcvՌɂgdcb`]O>_̖o_^\[O7//Q͜aXWUG6567GӠYROE<<=>?DР|RIDCCDEFFΠwMIJKLLMNOH˞qʟȠHnNDqr{eQ=WsD8b}j ]v Ǿ¾ſgq~ ~c»ҋƪЋƠ~seȕŔ~uc]]ɚÍ~~}sfegh{Ν~|tnnpqr}˞|{xwxyz{|ɞwćƛqƴœHnNDn~{p{cO&(3!^(SP$r#x#$pUHy* *C@@ New Layer#1      @@@@GեUեե I#u5   i /M #ΗQΗ{=u xk'u% u#3 811] :{Y# : |*8L4$ #ΗoΗ xk(7A7Q@@ New Layer      @@ @@ @@Selection Mask  .@@ B@@ R%[<UшL@^t[1 57F17m+/_L;}4>'% ^r SPx1pUH<U z^ %z %h( ,xs"`/_ L;- K4>(67springlobby-0.169/po/CMakeLists.txt0000600000176000000410000000521012105760277020610 0ustar buildbotwww-data00000000000000FIND_PROGRAM(GETTEXT_MSGFMT_EXECUTABLE msgfmt) IF(NOT GETTEXT_MSGFMT_EXECUTABLE) MESSAGE( "------ NOTE: msgfmt not found. Translations will *not* be installed ------") ELSE(NOT GETTEXT_MSGFMT_EXECUTABLE) SET(catalogname springlobby) FILE(GLOB PO_FILES ${CMAKE_SOURCE_DIR}/po/*.po) SET(gmofiles "") FOREACH(_poFile ${PO_FILES}) GET_FILENAME_COMPONENT(_poFileName ${_poFile} NAME) STRING(REGEX REPLACE "^${catalogname}_?" "" _langCode ${_poFileName} ) STRING(REGEX REPLACE "\\.po$" "" _langCode ${_langCode} ) IF( _langCode ) GET_FILENAME_COMPONENT(_lang ${_poFile} NAME_WE) SET(_gmoFile ${CMAKE_CURRENT_BINARY_DIR}/${_lang}.gmo) ADD_CUSTOM_COMMAND( OUTPUT ${_gmoFile} COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} --check -o ${_gmoFile} ${_poFile} DEPENDS ${_poFile}) INSTALL(FILES ${_gmoFile} DESTINATION ${LOCALE_INSTALL_DIR}/${_langCode}/LC_MESSAGES/ RENAME ${catalogname}.mo) LIST(APPEND gmofiles ${_gmoFile}) ENDIF( _langCode ) ENDFOREACH(_poFile ${PO_FILES}) add_custom_target(translations ALL DEPENDS ${gmofiles}) ENDIF(NOT GETTEXT_MSGFMT_EXECUTABLE) file(GLOB_RECURSE srcfiles RELATIVE ${springlobby_SOURCE_DIR}/ FOLLOW_SYMLINKS ${springlobby_SOURCE_DIR}/src/*.h ${springlobby_SOURCE_DIR}/src/*.cpp ${springlobby_SOURCE_DIR}/src/*.hpp ) list(SORT srcfiles) FIND_PROGRAM( XGETTEXT NAMES "xgettext" ) IF(${XGETTEXT} STREQUAL "XGETTEXT-NOTFOUND") MESSAGE(STATUS "Warning: xgettext not found - will not update springlobby.pot") ELSE(${XGETTEXT} STREQUAL "XGETTEXT-NOTFOUND") MESSAGE(STATUS "Found xgettext: ${XGETTEXT}") SET(MESSAGES_POT_FILE ${springlobby_SOURCE_DIR}/po/springlobby.pot) ADD_CUSTOM_TARGET( update-potfile COMMAND ${XGETTEXT} -k_ --from-code=utf-8 -C --directory ${springlobby_SOURCE_DIR} --msgid-bugs-address "devel@www.springlobby.info" -o ${MESSAGES_POT_FILE} ${srcfiles} DEPENDS springlobby WORKING_DIRECTORY ${springlobby_SOURCE_DIR} ) ENDIF(${XGETTEXT} STREQUAL "XGETTEXT-NOTFOUND") FIND_PROGRAM( MSGMERGE NAMES "msgmerge" ) IF(${MSGMERGE} STREQUAL "MSGMERGE-NOTFOUND") MESSAGE(STATUS "Warning: msgmerge not found - will not update po files") ELSE(${MSGMERGE} STREQUAL "MSGMERGE-NOTFOUND") MESSAGE(STATUS "Found msgmerge: ${MSGMERGE}") ADD_CUSTOM_TARGET( update-po ) FILE(GLOB PO_FILES ${CMAKE_SOURCE_DIR}/po/*.po) SET( POTFILE ${springlobby_SOURCE_DIR}/po/springlobby.pot ) FOREACH(_poFile ${PO_FILES}) ADD_CUSTOM_COMMAND(TARGET update-po COMMAND ${MSGMERGE} -vU ${_poFile} ${POTFILE} DEPENDS ${_poFile}) ENDFOREACH(_poFile ${PO_FILES}) ENDIF(${MSGMERGE} STREQUAL "MSGMERGE-NOTFOUND") ADD_CUSTOM_TARGET( update-translations DEPENDS update-potfile update-po) springlobby-0.169/po/ChangeLog0000600000176000000410000000120412105760277017621 0ustar buildbotwww-data000000000000002009-02-07 gettextize * Makefile.in.in: Upgrade to gettext-0.17. 2009-02-07 gettextize * Makefile.in.in: Upgrade to gettext-0.17. 2008-02-07 gettextize * Makefile.in.in: New file, from gettext-0.16.1. * boldquot.sed: New file, from gettext-0.16.1. * en@boldquot.header: New file, from gettext-0.16.1. * en@quot.header: New file, from gettext-0.16.1. * insert-header.sin: New file, from gettext-0.16.1. * quot.sed: New file, from gettext-0.16.1. * remove-potcdate.sin: New file, from gettext-0.16.1. * Rules-quot: New file, from gettext-0.16.1. springlobby-0.169/po/LINGUAS0000600000176000000410000000007112105760277017075 0ustar buildbotwww-data00000000000000ar cs de da el es fi fr it pl pt ro ru sv uk zh_CN en_US springlobby-0.169/po/Makefile.in.in0000600000176000000410000003552412105760277020535 0ustar buildbotwww-data00000000000000# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2007 by Ulrich Drepper # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. # # Origin: gettext-0.17 GETTEXT_MACRO_VERSION = 0.17 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) MSGFMT_ = @MSGFMT@ MSGFMT_no = @MSGFMT@ MSGFMT_yes = @MSGFMT_015@ MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: check-macro-version all-@USE_NLS@ all-yes: stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. check-macro-version: @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, stamp-po is a nop (i.e. a phony target). # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch stamp-po" && \ echo timestamp > stamp-poT && \ mv stamp-poT stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \ package_gnu='GNU '; \ else \ package_gnu=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_gnu}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all $(mkdir_p) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: $(mkdir_p) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(MAKE) update-po @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: stamp-po $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && $(SHELL) ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: springlobby-0.169/po/Makevars0000600000176000000410000000340412105760277017547 0ustar buildbotwww-data00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = The SpringLobby team # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = springlobby-0.169/po/Makevars.template0000600000176000000410000000341612105760277021364 0ustar buildbotwww-data00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = springlobby-0.169/po/POTFILES.in0000600000176000000410000000413612105760277017633 0ustar buildbotwww-data00000000000000src/addbotdialog.cpp src/agreementdialog.cpp src/autobalancedialog.cpp src/battlelistctrl.cpp src/battlelistfilter.cpp src/battlelisttab.cpp src/battlemaptab.cpp src/battleoptionstab.cpp src/battleroomlistctrl.cpp src/battleroommmoptionstab.cpp src/battleroomtab.cpp src/channel/autojoinchanneldialog.cpp src/channel/channelchooser.cpp src/channel/channelchooserdialog.cpp src/channel/channellistctrl.cpp src/chatlog.cpp src/chatoptionstab.cpp src/chatpanel.cpp src/connectwindow.cpp src/countrycodes.cpp src/crashreport.cpp src/filelister/filelistctrl.cpp src/filelister/filelistdialog.cpp src/filelister/filelistfilter.cpp src/utils/globalevents.cpp src/groupoptionspanel.cpp src/Helper/imageviewer.cpp src/Helper/wxtextctrlhist.h src/Helper/wxTranslationHelper.cpp src/hostbattledialog.cpp src/httpdownloader.cpp src/lobbyoptionstab.cpp src/mainchattab.cpp src/mainjoinbattletab.cpp src/mainoptionstab.cpp src/mainsingleplayertab.cpp src/maintorrenttab.cpp src/mainwindow.cpp src/mainwindow.h src/mapctrl.cpp src/mapselectdialog.cpp src/mmoptionswrapper.cpp src/mmoptionwindows.cpp src/nicklistctrl.cpp src/nonportable.h src/playback/playbackfilter.cpp src/playback/playbacklistctrl.cpp src/playback/playbacktab.cpp src/selectusersdialog.cpp src/selectusersdialog.h src/serverevents.cpp src/settings++/Defs.hpp src/settings++/frame.cpp src/settings++/helpmenufunctions.cpp src/settings++/Main.cpp src/settings++/panel_pathoption.cpp src/settings++/presets.h src/settings++/se_utils.cpp src/settings++/tab_abstract.cpp src/settings++/tab_audio.cpp src/settings++/tab_quality_video.cpp src/settings++/tab_render_detail.cpp src/settings++/tab_simple.cpp src/settings++/tab_ui.cpp src/singleplayerbattle.cpp src/singleplayertab.cpp src/springlobbyapp.cpp src/springoptionstab.cpp src/tasserver.cpp src/tdfcontainer.cpp src/torrentlistctrl.cpp src/torrentoptionspanel.cpp src/torrentwrapper.cpp src/ui.cpp src/uiutils.h src/httpdownloader.cpp src/updater/updater.cpp src/useractions.cpp src/useractions.h src/user.cpp src/userlistctrl.cpp src/usermenu.h src/widgets/downloaddialog.cpp src/widgets/downloadlistctrl.cpp src/widgets/infopanel.cpp springlobby-0.169/po/README.transifex0000600000176000000410000000046012105760277020734 0ustar buildbotwww-data00000000000000Transifex.net Token Verification ================================= The list of tokens bellow guarantee the respective users to be able to enable submission on components using the following repository url: git@github.com:springlobby/springlobby.git Tokens: 6P9pXSg4XS6z5EhYYfP5cAtUteDHaSxC / koshi springlobby-0.169/po/Rules-quot0000600000176000000410000000337612105760277020066 0ustar buildbotwww-data00000000000000# Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header springlobby-0.169/po/ar.po0000600000176000000410000043472712105760277017035 0ustar buildbotwww-data00000000000000# Arabic translation for springlobby # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the springlobby package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: springlobby\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2008-07-30 23:38+0000\n" "Last-Translator: SpringLobby_Buildbot \n" "Language-Team: Arabic \n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2008-09-20 21:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "" #: src/Helper/imageviewer.cpp:92 #, fuzzy msgid "delete" msgstr "إنتقاء..." #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "خطأ" #: src/Helper/imageviewer.cpp:160 #, fuzzy msgid "Choose a filename" msgstr "اختار في اللعبة" #: src/Helper/imageviewer.cpp:167 msgid "File successfully saved" msgstr "" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 msgid "Success" msgstr "" #: src/Helper/imageviewer.cpp:170 msgid "Couldn't save file" msgstr "" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 #, fuzzy msgid "Default" msgstr "المبدئي" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" #: src/Helper/wxTranslationHelper.cpp:148 #, fuzzy msgid "Select the language" msgstr "معلومات القناة" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "قبول الاتفاق" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "هل تقبل شروط هذا الاتفاق؟" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "نعم" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "لا" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 #, fuzzy msgid "User" msgstr "خادوم" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 #, fuzzy msgid "Channel" msgstr "قناة" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "الحالة:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Minimum rank to join" msgstr "" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "وصف" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "وصف" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "خارطة" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 #, fuzzy msgid "Mapname" msgstr "الكنية" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "الكنية" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "مستضيف" #: src/battlelist/battlelistctrl.cpp:60 msgid "Name of the Host" msgstr "" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "المتابعون:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "مواقع البدء" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 #, fuzzy msgid "Players" msgstr "اللّاعبون:" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "مواقع البدء" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "خارطة" #: src/battlelist/battlelistctrl.cpp:63 msgid "Maximum number of Players that can join" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "تنزيل ال&خارطة" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "تنزيل ال&خارطة" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "المتابعون:" #: src/battlelist/battlelistctrl.cpp:370 #, fuzzy msgid "Active Players:" msgstr "اللّاعبون:" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "المستضيف:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "الحالة:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "مقفل" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "مقفل بكلمة سرّ" #: src/battlelist/battlelistfilter.cpp:122 msgid "Highlighted only" msgstr "" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "حدّ الترتيب:" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "وصف:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "بدئت" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "كاملة" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "فتح" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "لاعب:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "الكل" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "الخارطة:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "فقط الخرائطي التي أملكها" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "الحدّ الأعلى للاعبين:" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 msgid "Game:" msgstr "" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "فقط الخرائطي التي أملكها" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " متابع:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "اللّاعبون:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 msgid " Filter " msgstr "" #: src/battlelist/battlelisttab.cpp:144 #, fuzzy msgid "Activated" msgstr "بدئت" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 msgid " Battle infos " msgstr "" #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "استضافة جديدة..." #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "انضمام" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "غير متصل." #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "" #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "خطأ Spring" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 msgid "Matchmaker detected" msgstr "" #: src/battlelist/battlelisttab.cpp:420 msgid "Already in another battle" msgstr "" #: src/battlelist/battlelisttab.cpp:420 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" #: src/battlelist/battlelisttab.cpp:430 msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" #: src/battlelist/battlelisttab.cpp:433 msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 msgid "Game not available" msgstr "" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 msgid "Edit auto-joined channels" msgstr "" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "" #: src/channel/channelchooser.cpp:30 #, fuzzy msgid "Find channel:" msgstr "قناة" #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 msgid "Choose channels to join" msgstr "" #: src/channel/channellistctrl.cpp:30 msgid "# users" msgstr "" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "" #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "" #: src/chatpanel.cpp:69 msgid "#" msgstr "" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, c-format msgid "%d users" msgstr "" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "" #: src/chatpanel.cpp:296 msgid "Send" msgstr "إرسال" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr " !! أمر: \"" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "" #: src/chatpanel.cpp:717 msgid "channel" msgstr "قناة" #: src/chatpanel.cpp:718 msgid "battle" msgstr "معركة" #: src/chatpanel.cpp:719 msgid "server" msgstr "خادوم" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr "" #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr "" #: src/chatpanel.cpp:814 #, fuzzy msgid " ** Channel topic:" msgstr "معلومات القناة" #: src/chatpanel.cpp:821 msgid " ** Set by " msgstr "" #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "قد أغلقت الدردشة." #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr "" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr "" #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr "" #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr "" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "" #: src/chatpanel.cpp:1090 msgid " ** User is now offline." msgstr "" #: src/chatpanel.cpp:1097 msgid " ** User just got online." msgstr "" #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 msgid " ** Joined Battle." msgstr "" #: src/chatpanelmenu.cpp:34 msgid "Disable text appending" msgstr "" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "نسخ" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "مسح" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "مغادرة" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "معلومات القناة" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "تعيين الموضوع..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "رسالة القناة..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "قفل..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "إلغاء القفل" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "تسجيل..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "إلغاء التسجيل" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "إعادة الاتصال" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "" #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "تغيير كلمة السرّ" #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "" #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "حسابات" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "إذاعة..." #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "الإداري" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "فتح الدردشة" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "" #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "طرد..." #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "منع..." #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "رفع المنع" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "صفع!" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "" #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "" #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "" #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "" #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" #: src/chatpanelmenu.cpp:774 msgid "couldn't add user" msgstr "" #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "الخادوم" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "الكنية" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" #: src/connectwindow.cpp:85 msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "موافق" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "إلغاء" #: src/connectwindow.cpp:91 msgid "Login" msgstr "" #: src/connectwindow.cpp:92 msgid "Register" msgstr "" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "" #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "" #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" #: src/connectwindow.cpp:294 #, fuzzy msgid "Invalid nickname" msgstr "رقم غير صالح" #: src/connectwindow.cpp:301 msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "" #: src/countrycodes.cpp:11 msgid " Andorra" msgstr "" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "" #: src/countrycodes.cpp:25 msgid "Åland Islands" msgstr "" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "" #: src/countrycodes.cpp:56 msgid "China" msgstr "" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "" #: src/countrycodes.cpp:82 msgid "France" msgstr "" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "" #: src/countrycodes.cpp:110 msgid "India" msgstr "" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "" #: src/countrycodes.cpp:234 msgid "United Kingdom" msgstr "" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "" #: src/countrycodes.cpp:236 msgid "United States" msgstr "" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "" #: src/crashreport.cpp:168 msgid "System informations" msgstr "" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "لم يتم العثور على أي خريطة" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "تنزيل ال&خارطة" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "تنزيل ال&خارطة" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 #, fuzzy msgid "Name" msgstr "الكنية" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "حجم" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "خارطة" #: src/downloader/filelister/filelistctrl.cpp:174 #, fuzzy msgid "game" msgstr "الكنية" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:55 #, fuzzy msgid "Download selected" msgstr "تنزيل ال&خارطة" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "الكنية:" #: src/downloader/filelister/filelistfilter.cpp:69 msgid "Filetype:" msgstr "" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:78 msgid "" "\n" "successfully unzipped in:\n" msgstr "" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "تنزيل ال&خارطة" #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "إضافة بوت" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "الكنية:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "الذكاء الاصطناعي:" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "اختار مكتبة الذكاء الاصطناعي لاستخدامها مع البوت." #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 #, fuzzy msgid "value" msgstr "قيمة" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "إضافة بوت" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "لم يتم العثور على أي بوتات ذكاء اصطناعي على نسختك من Spring." #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "لم يتم العثور على مكتبات البوت" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "طريقة" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "عشوائي" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "فرق" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "لا شيء" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "معتدل" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "دائماً" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" #: src/hosting/autobalancedialog.cpp:53 msgid "Number of allies" msgstr "" #: src/hosting/autobalancedialog.cpp:56 #, fuzzy msgid "Auto select" msgstr "إعادة الاتصال" #: src/hosting/battlemaptab.cpp:69 #, fuzzy msgid "Select" msgstr "إنتقاء..." #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "خيار" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "قيمة" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "الجاذبيّة" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "ثابت" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "اختار في اللعبة" #: src/hosting/battlemaptab.cpp:103 #, fuzzy msgid "Chose before game" msgstr "اختار في اللعبة" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "مواقع البدء" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "" #: src/hosting/battleoptionstab.cpp:77 #, fuzzy msgid "Disable selected units." msgstr "تفعيل كل الوحدات." #: src/hosting/battleoptionstab.cpp:81 #, fuzzy msgid "Re-enable selected units." msgstr "تفعيل كل الوحدات." #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "تفعيل كل الوحدات." #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "" #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "" #: src/hosting/battleoptionstab.cpp:242 msgid "Unit restriction" msgstr "" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "فريق" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "حليف" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "جهة" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "تعيين اللون" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "متابع" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "طرد" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "رجاء إدخال رقم بين 0 و100" #: src/hosting/battleroomlistctrl.cpp:750 #, fuzzy msgid "AI (bot)\n" msgstr "إضافة بوت" #: src/hosting/battleroomlistctrl.cpp:754 msgid "Human\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:759 #, fuzzy msgid "Spectator\n" msgstr "متابع" #: src/hosting/battleroomlistctrl.cpp:763 #, fuzzy msgid "Player\n" msgstr "لاعب:" #: src/hosting/battleroomlistctrl.cpp:768 #, fuzzy msgid "Host\n" msgstr "مستضيف" #: src/hosting/battleroomlistctrl.cpp:772 #, fuzzy msgid "Client\n" msgstr "العميل" #: src/hosting/battleroomlistctrl.cpp:777 #, fuzzy msgid "Ready\n" msgstr "دائماً" #: src/hosting/battleroomlistctrl.cpp:781 #, fuzzy msgid "Not ready\n" msgstr "غير جاهز" #: src/hosting/battleroomlistctrl.cpp:786 msgid "In sync" msgstr "" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "" #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "" #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "إعادة الاتصال" #: src/hosting/battleroomtab.cpp:144 msgid "automatically unspec when there's a free slot" msgstr "" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "أنا جاهز" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "" #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "اللون" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "استضافة جديدة..." #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "خطأ في بدأ المعركة." #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "بدء" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "إضافة بوت..." #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "وصف" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 #, fuzzy msgid "AutoSpect" msgstr "إعادة الاتصال" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "بدء" #: src/hosting/battleroomtab.cpp:209 msgid "Automatically start the battle when all players are ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Ring unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 msgid "Ring ..." msgstr "" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "غير جاهز" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 msgid "Force spectate ..." msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "تثبيت الألوان" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "" #: src/hosting/battleroomtab.cpp:255 #, fuzzy msgid "Save" msgstr "حفظ..." #: src/hosting/battleroomtab.cpp:256 msgid "Save a set of options." msgstr "" #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 msgid "Delete" msgstr "" #: src/hosting/battleroomtab.cpp:261 msgid "Delete a set of options." msgstr "" #: src/hosting/battleroomtab.cpp:265 #, fuzzy msgid "Set default" msgstr "المبدئي" #: src/hosting/battleroomtab.cpp:266 msgid "Use the current set of options as game's default." msgstr "" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "" #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "غير جاهز" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "اختار في اللعبة" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "وصف" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "المبدئي" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 msgid "Delete preset" msgstr "" #: src/hosting/battleroomtab.cpp:996 #, fuzzy msgid "Set game default preset" msgstr "المبدئي" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "" #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "وصف" #: src/hosting/hostbattledialog.cpp:91 msgid "Automatically write the battle description when a user joins." msgstr "" #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "معلومات القناة" #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "مقفل بكلمة سرّ" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "" #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Randomly picks an available one" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "" #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "" #: src/hosting/hostbattledialog.cpp:185 msgid "NAT traversal to use." msgstr "" #: src/hosting/hostbattledialog.cpp:190 msgid "Rank requirement" msgstr "" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 msgid "Select the type of rank enforcement." msgstr "" #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "" #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 msgid "You have to select a game first." msgstr "" #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "تنزيل ال&خارطة" #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" #: src/hosting/hostbattledialog.cpp:427 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:459 msgid "Battle not started beacuse the game you selected could not be found. " msgstr "" #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "خطأ في بدأ المعركة." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "لم يتم العثور على أي خريطة" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "خيارات" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 msgid "Unit Restrictions" msgstr "" #: src/hosting/mmoptionwindows.cpp:36 #, fuzzy msgid "Change option" msgstr "خيارات الخارطة" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "" #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "" #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "" #: src/iconimagelist.cpp:322 #, fuzzy msgid "Game is closed." msgstr "قد أغلقت الدردشة." #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "" #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "" #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "" #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "" #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "" #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "" #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "" #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "" #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "" #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "" #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 msgid "Newbies guide" msgstr "" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 msgid "Joining a battle:\n" msgstr "" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "خطأ في بدأ المعركة." #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "خطأ Spring" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 msgid "Singleplayer gamee" msgstr "" #: src/introguide.cpp:110 msgid "Multiplayer gamee" msgstr "" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 msgid "Disconnected from server, chat closed." msgstr "" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "" #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "" #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "" #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 #, fuzzy msgid "&Save options" msgstr "خيارات الخارطة" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "قناة" #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "خطأ Spring" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "خيارات الخارطة" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "" #: src/mainwindow.cpp:164 #, fuzzy msgid "Channel &list" msgstr "معلومات القناة" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "" #: src/mainwindow.cpp:166 #, fuzzy msgid "Change &username" msgstr "معلومات القناة" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "" #: src/mainwindow.cpp:169 msgid "&Reload maps/games" msgstr "" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "" #: src/mainwindow.cpp:178 msgid "&System Info" msgstr "" #: src/mainwindow.cpp:179 #, fuzzy msgid "&Change language" msgstr "معلومات القناة" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "" #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "الخادوم" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "" #: src/mainwindow.cpp:500 msgid "You need to be connected to a server to view the channel list" msgstr "" #: src/mainwindow.cpp:500 #, fuzzy msgid "Not connected" msgstr "إعادة الاتصال" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "" #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "" #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "" #: src/mainwindow.cpp:540 #, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 #, fuzzy msgid "No files found" msgstr "لم يتم العثور على أي خريطة" #: src/mainwindow.cpp:656 #, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "" #: src/mainwindow.cpp:692 msgid "This profile is write protected, please choose another name" msgstr "" #: src/mainwindow.cpp:703 msgid "Which profile do you want to load?" msgstr "" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "الكنية" #: src/mainwindow.cpp:767 msgid "Enter new nickname" msgstr "" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "معركة" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "" #: src/mainwindow.h:203 #, fuzzy msgid "Replays" msgstr "دائماً" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 #, fuzzy msgid "Downloads" msgstr "تنزيل ال&خارطة" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "" #: src/mapctrl.cpp:897 msgid "side:" msgstr "" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 msgid "Show" msgstr "" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" #: src/mapselectdialog.cpp:95 #, fuzzy msgid "Filter" msgstr "معتدل" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" #: src/mapselectdialog.cpp:100 #, fuzzy msgid "Map details" msgstr "خيارات الخارطة" #: src/mapselectdialog.cpp:163 #, fuzzy msgid "Start positions" msgstr "مواقع البدء" #: src/mapselectdialog.cpp:261 msgid "Minimum wind" msgstr "" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "" #: src/mapselectdialog.cpp:263 msgid "Average wind" msgstr "" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "" #: src/mapselectdialog.cpp:265 #, fuzzy msgid "Aspect ratio" msgstr "متابع" #: src/mapselectdialog.cpp:266 #, fuzzy msgid "Number of start positions" msgstr "مواقع البدء" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "" #: src/mmoptionswrapper.cpp:122 msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "اختار في اللعبة" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "اختار في اللعبة" #: src/mmoptionswrapper.cpp:132 msgid "List of restricted units" msgstr "" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "خلفيَّة" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "اجراء" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "راسالتي" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "العميل" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "اشعار" #: src/options/chatoptionstab.cpp:258 msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "الخطّ:" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "المبدئي" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "إنتقاء..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "سلوك" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "" #: src/options/chatoptionstab.cpp:300 msgid "Copy server messages in current channel" msgstr "" #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "سجلّات الدردشة" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "حفظ سجلّات الدردشة" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "" #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 msgid "Remove" msgstr "" #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:61 msgid "Rename.." msgstr "" #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:70 #, fuzzy msgid "Add New.." msgstr "إضافة بوت..." #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "" #: src/options/groupoptionspanel.cpp:84 #, fuzzy msgid "Group Actions" msgstr "اجراء" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "" #: src/options/groupoptionspanel.cpp:95 #, fuzzy msgid "Ignore Chat" msgstr "فتح الدردشة" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:101 msgid "Notify Hosted Battles" msgstr "" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:134 msgid "Highlight Color" msgstr "" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "" #: src/options/groupoptionspanel.cpp:163 #, fuzzy msgid "Add.." msgstr "إضافة بوت..." #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "" #: src/options/groupoptionspanel.cpp:170 msgid "Remove users from group" msgstr "" #: src/options/groupoptionspanel.cpp:264 msgid "Name of new group:" msgstr "" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "" #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 msgid "Use a file dialog to find the editor binary" msgstr "" #: src/options/lobbyoptionstab.cpp:91 #, fuzzy msgid "Autoconnect" msgstr "إعادة الاتصال" #: src/options/lobbyoptionstab.cpp:94 #, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" #: src/options/lobbyoptionstab.cpp:96 msgid "Autoconnect on lobby start" msgstr "" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:104 #, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "" #: src/options/lobbyoptionstab.cpp:120 #, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "" #: src/options/lobbyoptionstab.cpp:130 msgid "Tooltips" msgstr "" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "" #: src/options/lobbyoptionstab.cpp:134 #, c-format msgid "Requires %s restart to take effect." msgstr "" #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "اشعار" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 msgid "Display time for popup notifications in seconds" msgstr "" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 #, fuzzy msgid "Start tab" msgstr "بدء" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "" #: src/options/lobbyoptionstab.cpp:282 msgid "Choose a editor browser executable" msgstr "" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "" #: src/options/mainoptionstab.cpp:73 msgid "General" msgstr "" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 msgid "Reloading unitsync" msgstr "" #: src/options/springoptionstab.cpp:315 #, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" #: src/playback/playbackfilter.cpp:60 msgid "Filter settings" msgstr "" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "فقط الخرائطي التي أملكها" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "" #: src/playback/playbackfilter.cpp:190 msgid "Duration (hh:mm:ss):" msgstr "" #: src/playback/playbacklistctrl.cpp:42 #, fuzzy msgid "Date" msgstr "معركة" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "معلومات القناة" #: src/playback/playbacklistctrl.cpp:46 #, fuzzy msgid "Duration" msgstr "وصف" #: src/playback/playbacklistctrl.cpp:47 #, fuzzy msgid "Spring Version" msgstr "خطأ Spring" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize" msgstr "" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "تحميل..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "دائماً" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "savegame" msgstr "حفظ..." #: src/playback/playbacktab.cpp:288 msgid "Couldn't get your spring versions from any unitsync library." msgstr "" #: src/playback/playbacktab.cpp:306 #, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" #: src/playback/playbacktab.cpp:323 msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" #: src/playback/playbacktab.cpp:356 #, fuzzy msgid "Invalid replay" msgstr "رقم غير صالح" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr "" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr "" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 msgid "There was an error downloading for the latest version.\n" msgstr "" #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "اشعار" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "رقم غير صالح" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 msgid "File doesn't exit" msgstr "" #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "بدئت" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "إعادة الاتصال" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 msgid "Unknown Error" msgstr "" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "" #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 #, fuzzy msgid "Download complete." msgstr "تنزيل ال&خارطة" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer." msgstr "" #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "إعادة الاتصال" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "إعادة الاتصال" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 msgid "Tries to connect to the next server in the list." msgstr "" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 msgid "Do nothing" msgstr "" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "" #: src/selectusersdialog.h:67 #, fuzzy msgid "Select Users" msgstr "إنتقاء الكل" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 msgid " is online" msgstr "" #: src/serverevents.cpp:165 msgid " is now " msgstr "" #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "" #: src/serverevents.cpp:224 msgid " just went offline" msgstr "" #: src/serverevents.cpp:259 msgid " opened battle " msgstr "" #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "" #: src/serverevents.cpp:583 msgid " because: " msgstr "" #: src/serverevents.cpp:826 msgid "Server Message" msgstr "" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr "" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr "" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "" #: src/serverevents.cpp:928 #, c-format msgid "%s mutelist" msgstr "" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "" #: src/serverevents.cpp:984 #, fuzzy msgid "Download update" msgstr "تنزيل ال&خارطة" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 msgid "Automatically moved to new battle" msgstr "" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "" #: src/singleplayertab.cpp:99 #, fuzzy msgid "Spectate only" msgstr "متابع" #: src/singleplayertab.cpp:102 #, fuzzy msgid "Random start positions" msgstr "مواقع البدء" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 msgid "Game setup error" msgstr "" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "" #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "" #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 msgid "Coulnd't load required unitsync library" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Fatal error" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 #, fuzzy msgid "Ignore chat" msgstr "فتح الدردشة" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 msgid "Battle Autokick" msgstr "" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 #, fuzzy msgid "Friends" msgstr "ثابت" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "" #: src/springsettings/ctrlconstants.h:229 #, fuzzy msgid "Terrain detail" msgstr "خيارات الخارطة" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "Unit LOD distance" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "higher value = units will remain detailed even when zooming out" msgstr "" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "Grass detail" msgstr "خيارات الخارطة" #: src/springsettings/ctrlconstants.h:231 msgid "higher value = more detailed grass" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:236 msgid "Max nano simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "Enable v-sync" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "Full-scene anti-aliasing samples" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "Master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "General sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "general volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "reply volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 msgid "Battle volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 msgid "battle volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "User interface volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "ui volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "" #: src/springsettings/ctrlconstants.h:291 #, fuzzy msgid "Reflective units" msgstr "اجراء" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "" #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 #, fuzzy msgid "left is the default" msgstr "المبدئي" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Use less colors" msgstr "" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" #: src/springsettings/ctrlconstants.h:320 msgid "Show in-game player information" msgstr "" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" #: src/springsettings/ctrlconstants.h:385 #, fuzzy msgid "Reflective" msgstr "اجراء" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "" #: src/springsettings/ctrlconstants.h:415 #, fuzzy msgid "Blur reflection" msgstr "اجراء" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Shore waves" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Enables shorewaves" msgstr "" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "اجراء" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 #, fuzzy msgid "Reflection texture size" msgstr "اجراء" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "اجراء" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "off" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "" #: src/springsettings/frame.cpp:315 msgid "(simple mode)" msgstr "" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "" #: src/springsettings/frame.cpp:367 msgid "(expert mode)" msgstr "" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "رقم غير صالح" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 msgid "Hotkey Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Enter new command:" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 msgid "Hotkey SaveSettings error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "لم يتم العثور على أي خريطة" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "" #: src/springsettings/panel_pathoption.cpp:34 msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "" #: src/springsettings/panel_pathoption.cpp:96 msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "" #: src/springsettings/presets.h:45 msgid "very low" msgstr "" #: src/springsettings/presets.h:45 msgid "very high" msgstr "" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "" #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "" #: src/springsettings/tab_quality_video.cpp:166 msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "" #: src/springsettings/tab_simple.cpp:40 msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr "" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:99 msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "" #: src/springsettings/tab_ui.cpp:37 msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 msgid "loading unitsync" msgstr "" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" #: src/tdfcontainer.cpp:131 msgid "line " msgstr "" #: src/tdfcontainer.cpp:131 msgid " , column " msgstr "" #: src/ui.cpp:175 msgid "Server password" msgstr "" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" #: src/ui.cpp:294 msgid "Registration successful" msgstr "" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "" #: src/ui.cpp:458 msgid "Help error" msgstr "" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, c-format msgid "%s commands help." msgstr "" #: src/ui.cpp:465 msgid "Global commands:" msgstr "" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr "" #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr "" #: src/ui.cpp:468 msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" #: src/ui.cpp:469 msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr "" #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr "" #: src/ui.cpp:472 msgid " \"/join channel [password]\" - Joins a channel." msgstr "" #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr "" #: src/ui.cpp:474 msgid " \"/ingame\" - Shows how much time you have in game." msgstr "" #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" #: src/ui.cpp:476 msgid " \"/part\" - Leaves current channel." msgstr "" #: src/ui.cpp:477 msgid " \"/p\" - Alias to /part." msgstr "" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr "" #: src/ui.cpp:479 #, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr "" #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr "" #: src/ui.cpp:481 #, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr "" #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr "" #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "" #: src/ui.cpp:496 msgid "The topic \"" msgstr "" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "" #: src/ui.cpp:580 msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" #: src/ui.cpp:599 msgid "Online play is currently disabled." msgstr "" #: src/ui.cpp:631 #, c-format msgid "disconnected from server: %s" msgstr "" #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "" #: src/ui.cpp:839 #, c-format msgid "%s (%d users)" msgstr "" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "" #: src/ui.cpp:993 msgid "Battle closed" msgstr "" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "" #: src/ui.cpp:1337 #, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" #: src/ui.cpp:1340 msgid "Welcome" msgstr "" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 msgid "Import settings?" msgstr "" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/ui.cpp:1387 msgid "Your Version: " msgstr "" #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "" #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 msgid "Not up to date" msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "خطأ Spring" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" #: src/updater/updater.cpp:72 msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/updater/updater.cpp:81 #, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 msgid "the SpringLobby revision to update to" msgstr "" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 msgid "Warning" msgstr "" #: src/user.cpp:83 #, fuzzy msgid "away" msgstr "دائماً" #: src/user.cpp:83 msgid "back" msgstr "" #: src/user.cpp:85 #, fuzzy msgid "ingame" msgstr "الكنية" #: src/user.cpp:85 msgid "back from game" msgstr "" #: src/user.cpp:195 msgid "Newbie" msgstr "" #: src/user.cpp:196 msgid "Beginner" msgstr "" #: src/user.cpp:197 msgid "Average" msgstr "" #: src/user.cpp:198 msgid "Above average" msgstr "" #: src/user.cpp:199 msgid "Experienced" msgstr "" #: src/user.cpp:200 msgid "Highly experienced" msgstr "" #: src/user.cpp:201 msgid "Veteran" msgstr "" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 msgid "Unknown" msgstr "" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "" #: src/useractions.h:11 #, fuzzy msgid "none" msgstr "لا شيء" #: src/useractions.h:11 msgid "highlight" msgstr "" #: src/useractions.h:11 msgid "notify login/out" msgstr "" #: src/useractions.h:11 msgid "ignore chat" msgstr "" #: src/useractions.h:11 msgid "ignore pm" msgstr "" #: src/useractions.h:12 msgid "autokick" msgstr "" #: src/useractions.h:12 msgid "notify hosted battle" msgstr "" #: src/useractions.h:12 msgid "notify status change" msgstr "" #: src/useractions.h:19 msgid "no action at all" msgstr "" #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" #: src/usermenu.h:31 msgid "Create new group..." msgstr "" #: src/usermenu.h:37 #, fuzzy msgid "Add to group..." msgstr "إضافة بوت..." #: src/usermenu.h:38 msgid "Remove from group" msgstr "" #: src/utils/controls.h:22 #, fuzzy msgid "Choose color" msgstr "تعيين اللون" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 msgid "Author" msgstr "" #: src/widgets/downloadlistctrl.cpp:31 msgid "Games" msgstr "" #: src/widgets/downloadlistctrl.cpp:31 msgid "Compatible games" msgstr "" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "حفظ..." #: src/widgets/infopanel.cpp:74 #, fuzzy msgid "Current version" msgstr "خطأ Spring" #: src/widgets/infopanel.cpp:79 #, fuzzy msgid "# downloaded" msgstr "تنزيل ال&خارطة" #: src/widgets/infopanel.cpp:84 msgid "Published on" msgstr "" #: src/widgets/infopanel.cpp:121 #, fuzzy msgid "Changelog" msgstr "إلغاء" #: src/widgets/infopanel.cpp:126 msgid "Screenshots" msgstr "" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" #, fuzzy #~ msgid "Faction" #~ msgstr "اجراء" #, fuzzy #~ msgid "spectators" #~ msgstr "المتابعون:" #, fuzzy #~ msgid "players" #~ msgstr "اللّاعبون:" #~ msgid "Enter password" #~ msgstr "أدخل كلمة السرّ" #, fuzzy #~ msgid "team" #~ msgstr "فريق" #, fuzzy #~ msgid "ally" #~ msgstr "حليف" #, fuzzy #~ msgid "Save..." #~ msgstr "حفظ..." #, fuzzy #~ msgid "Delete..." #~ msgstr "إنتقاء..." #, fuzzy #~ msgid "Set default..." #~ msgstr "المبدئي" #, fuzzy #~ msgid "Mod Options" #~ msgstr "خيارات الخارطة" #~ msgid "Map Options" #~ msgstr "خيارات الخارطة" #, fuzzy #~ msgid "Tab icons" #~ msgstr "خيارات الخارطة" #, fuzzy #~ msgid "Download Lua widgets" #~ msgstr "تنزيل ال&خارطة" #, fuzzy #~ msgid "Download started" #~ msgstr "تنزيل ال&خارطة" #, fuzzy #~ msgid "Disconnecting" #~ msgstr "إعادة الاتصال" #, fuzzy #~ msgid "Player" #~ msgstr "لاعب:" #, fuzzy #~ msgid "Notice" #~ msgstr "لا شيء" #, fuzzy #~ msgid "Grouping size" #~ msgstr "اجراء" #~ msgid "a" #~ msgstr "أ" #~ msgid "m" #~ msgstr "م" #~ msgid "%d%" #~ msgstr "%d%" #~ msgid "Not a number" #~ msgstr "هذا ليس رقم" #~ msgid "_SERVER" #~ msgstr "_خادوم" #, fuzzy #~ msgid "Not online" #~ msgstr "غير متصل." #~ msgid "Select all" #~ msgstr "إنتقاء الكل" #, fuzzy #~ msgid "Unitsync error" #~ msgstr "خطأ Spring" #~ msgid "End condition" #~ msgstr "شرط الإنتهاء" #~ msgid "Resources" #~ msgstr "الموارد" #~ msgid "Save to:" #~ msgstr "حفظ في:" #~ msgid "Browse..." #~ msgstr "استعراض..." #~ msgid "Choose a directory" #~ msgstr "اختيار دليل" springlobby-0.169/po/boldquot.sed0000600000176000000410000000033112105760277020375 0ustar buildbotwww-data00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g s/“/“/g s/”/”/g s/‘/‘/g s/’/’/g springlobby-0.169/po/cs.po0000600000176000000410000050741512105760277017033 0ustar buildbotwww-data00000000000000# Czech translation for springlobby # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the springlobby package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: springlobby\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2008-09-06 12:50+0000\n" "Last-Translator: vejha_cz \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2008-09-20 21:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "" #: src/Helper/imageviewer.cpp:92 #, fuzzy msgid "delete" msgstr "Vyber..." #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "Chyba" #: src/Helper/imageviewer.cpp:160 #, fuzzy msgid "Choose a filename" msgstr "Nastavit ve hře" #: src/Helper/imageviewer.cpp:167 #, fuzzy msgid "File successfully saved" msgstr "" "\n" "úspěšně uloženo do:\n" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 #, fuzzy msgid "Success" msgstr "Nastavit přistup..." #: src/Helper/imageviewer.cpp:170 #, fuzzy msgid "Couldn't save file" msgstr "Nemohl uložit\n" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 #, fuzzy msgid "Default" msgstr "výchozí" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" #: src/Helper/wxTranslationHelper.cpp:148 #, fuzzy msgid "Select the language" msgstr "Informace o místnosti" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Přijmout Podmínky" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Ano" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "Ne" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 #, fuzzy msgid "User" msgstr "Vykopnout uživatele" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 #, fuzzy msgid "Channel" msgstr "místnost" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Stav:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 #, fuzzy msgid "Minimum rank to join" msgstr "Minimální potřebná hodnost" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Popis" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Popis" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Mapa" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 #, fuzzy msgid "Mapname" msgstr "Panama" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "Hra" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "Hra" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Host" #: src/battlelist/battlelistctrl.cpp:60 #, fuzzy msgid "Name of the Host" msgstr "Jméno uživatele" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Pozorovatelé:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "Počet hráčů" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 #, fuzzy msgid "Players" msgstr "Hráči:" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "Počet hráčů" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Mapa" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Maximum number of Players that can join" msgstr "maximální počet souběžných připojení" #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "Stáhnout &mapu" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "Stáhnout &mapu" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Pozorovatelé:" #: src/battlelist/battlelistctrl.cpp:370 #, fuzzy msgid "Active Players:" msgstr "Hráči:" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Stav:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Uzamčeno" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "Zaheslováno" #: src/battlelist/battlelistfilter.cpp:122 #, fuzzy msgid "Highlighted only" msgstr "Zvýraznění" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "Omezení Hodnosti:" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Popis:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Spuštěno" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Plný" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "Otevřít" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Hráč:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Všechny" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Mapa:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Mapy, které mám" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "Max. Hráčů:" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 #, fuzzy msgid "Game:" msgstr "Hra" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Mapy, které mám" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Pozorovatel:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "%d" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Hráči:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 #, fuzzy msgid " Filter " msgstr "Soubor" #: src/battlelist/battlelisttab.cpp:144 #, fuzzy msgid "Activated" msgstr "Spuštěno" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 #, fuzzy msgid " Battle infos " msgstr "Seznam bitev" #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "Založit novou..." #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "Připojit" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" "Nemůžete zakládat hru, když jste offline. Prosím připojte se k lobby serveru." #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "Není připojený." #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "Nemůžete zakládat hru, protože máte nekompatibilní verzi" #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Spring error" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" "Připojování k bitvám je zakázáno, ptotože používáte nekopmatibilní verzi " "springu." #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 msgid "Matchmaker detected" msgstr "" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "Založit bitvu" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "Již jste zapojeni v bitvě.\n" "\n" "Chcete opustit současnou bitvu a připojit se k této?" #: src/battlelist/battlelisttab.cpp:430 #, fuzzy msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" "Mám se pokusit to stáhnout?\n" "Průběh můžete vidět v záložce \"Správce Stahování\"." #: src/battlelist/battlelisttab.cpp:433 #, fuzzy msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" "Než se připojíte k této hře, musíte stáhnout mod.\n" "\n" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "Mapa není dostupná" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" "Musíte nejprve stáhnout mapu, aby jste mohli hrát tuto hru.\n" "\n" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "Mapa není dostupná" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "Heslo bitvy" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 #, fuzzy msgid "Edit auto-joined channels" msgstr "&Autotomaticky vstoupit do místností..." #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "" #: src/channel/channelchooser.cpp:30 #, fuzzy msgid "Find channel:" msgstr "Vstoupit do místnosti..." #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 #, fuzzy msgid "Choose channels to join" msgstr "Jméno místnosti k připojení" #: src/channel/channellistctrl.cpp:30 #, fuzzy msgid "# users" msgstr "(%d uživatelé)" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "### Sezení Ukončeno v [" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" "Nemohu vytvořit složku. \n" "Přesvědčte se, že je povoleno zapisování.\n" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "Zaznamenávání vypnuto do restartování SpringLobby." #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" "Nemohu zapsal zprávu do záznamu.\n" "Zaznamenávání pro místnost bude vypnuto. " #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" ".\n" "\n" "Znovu se připojte do místnosti, pro aktivaci zaznamenávání." #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 #, fuzzy msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" "Nemohu otevřít soubor záznamu. \n" "Ujistěte se, že je povoleno zapisování.\n" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "místnost_" #: src/chatpanel.cpp:69 msgid "#" msgstr "#" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, fuzzy, c-format msgid "%d users" msgstr "(%d uživatelé)" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "klikněte pravým tlačítkem pro možnosti (jako automatické připojení)" #: src/chatpanel.cpp:296 msgid "Send" msgstr "Odeslat" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr " !! Příkaz: \"" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "\" parametry: \"" #: src/chatpanel.cpp:717 msgid "channel" msgstr "místnost" #: src/chatpanel.cpp:718 msgid "battle" msgstr "Bitva" #: src/chatpanel.cpp:719 msgid "server" msgstr "server" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr " se připojil k " #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr " odešel z " #: src/chatpanel.cpp:814 #, fuzzy msgid " ** Channel topic:" msgstr "Informace o místnosti" #: src/chatpanel.cpp:821 #, fuzzy msgid " ** Set by " msgstr "" "\n" " * Nastaven od " #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "Chat zavřen." #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "Opravdu chcete vložit %d řádků?" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr " Vaše verze SpringLobby je" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr " Nejste v místnosti nebo místnost neexistuje." #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" " Chyba: Příkaz (%s) neexistuje, použijte /help pro seznam možných příkazů." #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" " Nejste v bitvě, nebo bitva neexistuje, použijte /help pro seznam dostupných " "příkazů." #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr " Uživatel není připojen." #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr " Odesláno: \"" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "\"" #: src/chatpanel.cpp:1090 #, fuzzy msgid " ** User is now offline." msgstr " Uživatel není připojen." #: src/chatpanel.cpp:1097 #, fuzzy msgid " ** User just got online." msgstr " Uživatel není připojen." #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 #, fuzzy msgid " ** Joined Battle." msgstr " se připojil k " #: src/chatpanelmenu.cpp:34 msgid "Disable text appending" msgstr "" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "Kopírovat" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "Vymazat" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "Automaticky se připojit do této místnosti" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "Odejít" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "Zobrazovat Zprávy Připojení/Odpojení" #: src/chatpanelmenu.cpp:68 #, fuzzy msgid "Show mute list" msgstr "Zobrazit tipy" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "Informace o místnosti" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "Nastavit téma..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "Zpráva místnost..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "Uzamknout..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "Odemknout" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "Registrovat se..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "Zrušit registraci" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "Zapnout" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "Vypnout" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "Je zapnuto?" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "Ochrana před spamem" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "ChanServ" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "Odpojit" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "Znovu se připojit" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "Odstranit..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "Změnit heslo..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "Nastavit přistup..." #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "Účty" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "Vysílání" #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "Administrátor" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "Otevřít Chat" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "Přidat se ke stejné bitvě" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "Čas ve hře" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "Utlumit..." #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "Utlumit na 5 minut" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "Utlumit na 10 minut" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "Utlumit na 30 minut" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "Utlumit na 2 hodiny" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "Utlumit na 1 den" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "Zrušit utlumení" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "Utlumit" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "Vykopnout..." #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "Ban..." #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "Unban" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "Zazvonit" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "Slap!" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "Op" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "DeOp" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "ChanServ error" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "ChanServ není v této místnosti." #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "Jaké by mělo být nové téma?" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "Zpráva:" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "Ukamknout místnost" #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "Jaké by mělo nové heslo?" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "Odemknout Místnost" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "Opravdu chctete odemknout tuto místnost?" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "ChanServ není na tomto serveru." #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "Registrovat Místnost" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "Odhlásit Místnost" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "Opravdu chcete odhlásit tuto místnost?" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "Odstranit Uživatelský Účet" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "Který uživatelský účet si přejete odstranit?" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "Odstranit účet" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "Opravdu si přejete odstranit účet? " #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "Změnit Heslo Uživatelského Účtu" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "Pro jaký uživatelský účet si přejete změnit heslo?" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "Jaké bude nové heslo?" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "Neimplementováno" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "Vykopnout uživatele" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "Důvod:" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "Vykopnout uživatele" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "Doba trvání:" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" #: src/chatpanelmenu.cpp:774 msgid "couldn't add user" msgstr "" #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "Připojit se k lobby serveru" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "Server" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" "Server k připojení. Můžete se připojit k jakémukoli serveru, napsáním textu " "ve formátu hostaddress:port." #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "Přezdívka" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "Heslo" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "Zapamtovat si heslo" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" "pamatovat si detaily připojení a automaticky se připojit k serveru při " "dalším startu lobby" #: src/connectwindow.cpp:85 #, fuzzy msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" "Poznámka: pokud nemáte účet, můžete\n" "si ho zdarma registrovat pod\n" "záložkou \"Registrovat\"." #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "Ok" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Zrušit" #: src/connectwindow.cpp:91 msgid "Login" msgstr "Přihlášení" #: src/connectwindow.cpp:92 msgid "Register" msgstr "Registrace" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "Přezdívka" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "Neplatný port." #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "Neplatný port" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" "Číslo portu mimo meze.\n" "\n" "Musí být celočíselnou hodnotou mezi 1 a 65535" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "" #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" #: src/connectwindow.cpp:294 #, fuzzy msgid "Invalid nickname" msgstr "Neplatné číslo" #: src/connectwindow.cpp:301 msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "Registrace selhala." #: src/countrycodes.cpp:11 msgid " Andorra" msgstr " Andorra" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "Spojené Arabské Emiráty" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "Afghánistán" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "Antigua a Barbuda" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "Anguilla" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "Albánie" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "Arménie" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "Nizozemské Antily" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "Angola" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "Antarktida" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "Argentina" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "Americká Samoa" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "Rakousko" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "Austrálie" #: src/countrycodes.cpp:25 #, fuzzy msgid "Åland Islands" msgstr "Kajmanské ostrovy" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "Aruba" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "Azerbajdžán" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "Bosna a Hercegovina" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "Barbados" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "Bangladéš" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "Belgie" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "Burkina Faso" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "Bulharsko" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "Bahrajn" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "Burundi" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "Benin" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "Bermudy" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "Brunej" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "Bolívie" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "Brazílie" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "Bahamy" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "Bhútán" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "Bouvetův ostrov" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "Botswana" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "Bělorusko" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "Belize" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "Kanada" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "kosové ostrovy" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "Středoafrická republika" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "Kongo" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "Švýcarsko" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "Cookovy ostrovy" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "Chile" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "Kamerun" #: src/countrycodes.cpp:56 msgid "China" msgstr "Čína" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "Kolumbie" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "Kostarika" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "Kuba" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "Kapverdské ostrovy" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "Vánoční ostrov" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "Kypr" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "Česká republika" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "Německo" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "Džibuti" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "Dánsko" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "Dominika" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "Dominikánská republika" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "Alžír" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "Ekvádor" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "Estonsko" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "Egypt" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "Západní Sahara" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "Eritrea" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "Španělsko" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "Etiopie" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "Finsko" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "Fidži" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "Fallandské ostrovy (Malvíny)" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "Mikronésie" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "Faerské ostrovy" #: src/countrycodes.cpp:82 msgid "France" msgstr "Francie" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "Francie, metropolitní" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "Gabon" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "Grenada" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "Gruzie" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "Francouzská Guayana" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "Ghana" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "Gibraltar" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "Grónsko" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "Gambie" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "Guinea" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "Guadeloupe" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "Rovníková Guinea" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "Řecko" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "Ostrovy svatá Georgia a Sandwich" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "Guatemala" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "Guam" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "Guinea-Bissau" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "Guayana" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "Hong Kong" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "Honduras" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "Chorvatsko" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "Haiti" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "Maďarsko" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "Indonésie" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "Irsko" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "Izrael" #: src/countrycodes.cpp:110 msgid "India" msgstr "Indie" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "Britské teritorium v Indickém oceánu" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "Irák" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "Írán" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "Island" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "Itálie" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "Jamajka" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "Jordánsko" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "Japonsko" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "Keňa" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "Kambodža" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "Kiribati" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "Komory" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "Svatý Kryštof a Nevis" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "Korejská lidově demokratická republika (Severní Korea)" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "Korejská republika (Jižní Korea)" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "Kuvajt" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "Kajmanské ostrovy" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "Kazachstán" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "Laos" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "Libanon" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "Svatá Lucie" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "Lichtenštejnsko" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "Srí Lanka" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "Libérie" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "Lesotho" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "Litva" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "Lucembursko" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "Lotyšsko" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "Libye" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "Maroko" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "Monako" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "Moldávie" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "Černá hora" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "Madagaskar" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "Marshallovy ostrovy" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "Makedonie" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "Mali" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "Myanmar" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "Mongolsko" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "Macao" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "Severní Mariánské Ostrovy" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "Martinik" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "Mauritánie" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "Montserrat" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "Malta" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "Mauritius" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "Maledivy" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "Malawi" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "Mexiko" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "Malajsie" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "Mosambik" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "Namíbie" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "Nová Kaledonie" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "Nigerie" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "Norfolkský ostrov" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "Nigérie" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "Nikaragua" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "Nizozemí" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "Norsko" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "Nepál" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "Nauru" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "Neutrální Území (Saudská Arabie/irák)" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "Niue" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "Nový Zéland" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "Omán" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "Panama" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "Peru" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "Francouzská Polynésie" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "Papua Nová Guinea" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "Filipíny" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "Pákistán" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "Polsko" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "St. Pierre a Miquelon" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "Pitcairnovy ostrovy" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "Portoriko" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "Portugalsko" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "Palauská republika" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "Paraguay" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "Katar" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "Reunion" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "Rumunsko" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "Srbsko" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "Ruská federace" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "Rwanda" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "Saudská Arábie" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "Šalamounovy ostrovy" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "Seychelské ostrovy" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "Súdán" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "Švédsko" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "Singapur" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "Sv. Helena" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "Slovinsko" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "Ostrovy Svalbard a Jan Mayen" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "Slovensko" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "Sierra Leone" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "San Marino" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "Senegal" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "Somálsko" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "Surinam" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "Svatý Tomáš a Princův ostrov" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "Sovětský Svaz (bývalý)" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "Salvádor" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "Sýrie" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "Svazijsko" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "Ostrovy Turks a Caicos" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "Čad" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "Francouzská Jižní Teritoria" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "Togo" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "Thajsko" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "Tádžikistán" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "Tokelau" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "Turkmenistán" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "Tunis" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "Tonga" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "Východní Timor" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "Turecko" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "Trinidad a Tobago" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "Tuvalu" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "Tchaj-wan" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "Tanzanie" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "Ukrajina" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "Uganda" #: src/countrycodes.cpp:234 #, fuzzy msgid "United Kingdom" msgstr "Velká Británie" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "US menší pobřežní ostrovy" #: src/countrycodes.cpp:236 msgid "United States" msgstr "Spojené státy" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "Uruguay" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "Uzbekistán" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "Vatikánský městský stát (Svatý stolec)" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "Svatý Vincenc a Grenadiny" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "Venezuela" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "Panenské ostrovy" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "Panenské ostrovy" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "Vietnam" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "Vanuatu" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "Ostrovy Wallis a Futuna" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "Samoa" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "Jemen" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "Mayotte" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "Jugoslávie" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "Jižní Afrika" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "Zambie" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "Zair" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "Zimbabwe" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "Plné jméno země nenalezeno" #: src/crashreport.cpp:168 msgid "System informations" msgstr "Systémové informace" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "Naposledy vytvořený skript spouštící spring" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "Mapy nenalezeny" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "Stáhnout" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "Stahování selhalo" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 #, fuzzy msgid "Name" msgstr "Hra" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "Velikost" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Mapa" #: src/downloader/filelister/filelistctrl.cpp:174 #, fuzzy msgid "game" msgstr "Přezdívka" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "neznámý" #: src/downloader/filelister/filelistdialog.cpp:26 #, fuzzy msgid "Search and download files" msgstr "Hledat soubor" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:55 #, fuzzy msgid "Download selected" msgstr "Stahování selhalo" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Přezdívka:" #: src/downloader/filelister/filelistfilter.cpp:69 #, fuzzy msgid "Filetype:" msgstr "Soubor" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" "\n" "úspěšně uloženo do:\n" #: src/downloader/httpdownloader.cpp:78 #, fuzzy msgid "" "\n" "successfully unzipped in:\n" msgstr "" "\n" "úspěšně uloženo do:\n" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "Nemohl uložit\n" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" "\n" "do:\n" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "Stahování selhalo" #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Přezdívka:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "UI:" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "Vyberte knihovnu UI pro tohoto protihráče." #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 #, fuzzy msgid "value" msgstr "Hodnota" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "" "Ve vaší Spring instalaci nebyly nalezeny žádné UI pro počítačové hráče." #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "Nebyly nalelezeny žádné bot-libs" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "Automaticky vyrovnat počet hráčů v týmech" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "Metoda" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "Rozděl hodnosti rovnoměrně" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Náhodný" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "Klany" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Žádný" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "Slušný" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "Vždy" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" "Přemístit hráče stejného klanu (se stejným klan-tagem, jako [smurfzor]Alice' " "and '[smurfzor]Bob' ) do společné aliance. \n" "Žádné: nepřemisťovat hráče podle klanů\n" "Vyrovnané: přesunout členy klanu do jedné aliance, pokud tak bude hra " "vyrovaná\n" "Vždy přemístit: hráči jednoho klanu budou přesunuti vždy do jedné aliance" #: src/hosting/autobalancedialog.cpp:53 #, fuzzy msgid "Number of allies" msgstr "Počet hráčů" #: src/hosting/autobalancedialog.cpp:56 #, fuzzy msgid "Auto select" msgstr "Znovu se připojit" #: src/hosting/battlemaptab.cpp:69 #, fuzzy msgid "Select" msgstr "Vyber..." #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "Možnost" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "Hodnota" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "Rychlost větru" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "Síla přílivu" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "Gravitace" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "Dosah extraktoru" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "Max kov" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "Neměnný" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "Nastavit ve hře" #: src/hosting/battlemaptab.cpp:103 #, fuzzy msgid "Chose before game" msgstr "Nastavit ve hře" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "Startovní pozice" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "Omezení jednotky" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "Povolené jednotky" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "jednotky v tomto seznamu budou ve hře povoleny." #: src/hosting/battleoptionstab.cpp:77 #, fuzzy msgid "Disable selected units." msgstr "Povolit všechny jednotky." #: src/hosting/battleoptionstab.cpp:81 #, fuzzy msgid "Re-enable selected units." msgstr "Povolit všechny jednotky." #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "Povolit všechny jednotky." #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "Zakázané jednotky" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "jednotky v tomto seznamu nebudou ve hře povoleny." #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "" #: src/hosting/battleoptionstab.cpp:242 #, fuzzy msgid "Unit restriction" msgstr "Omezení jednotky" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "Tým" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "Spojenec" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "Bonus Surovin" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "Frakce" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "Nastavit barvu" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "Nastavit bonus surovit" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "Pozorovatel" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "Vykopnout" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "Prosím vložte hodnotu mezi 0 a 100" #: src/hosting/battleroomlistctrl.cpp:750 msgid "AI (bot)\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:754 #, fuzzy msgid "Human\n" msgstr "Omán" #: src/hosting/battleroomlistctrl.cpp:759 #, fuzzy msgid "Spectator\n" msgstr "Pozorovatel" #: src/hosting/battleroomlistctrl.cpp:763 #, fuzzy msgid "Player\n" msgstr "Hráč:" #: src/hosting/battleroomlistctrl.cpp:768 #, fuzzy msgid "Host\n" msgstr "Host" #: src/hosting/battleroomlistctrl.cpp:772 #, fuzzy msgid "Client\n" msgstr "Klient" #: src/hosting/battleroomlistctrl.cpp:777 #, fuzzy msgid "Ready\n" msgstr "Vždy" #: src/hosting/battleroomlistctrl.cpp:781 #, fuzzy msgid "Not ready\n" msgstr "Nepřipraven" #: src/hosting/battleroomlistctrl.cpp:786 #, fuzzy msgid "In sync" msgstr "Zapnout v-sync" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "Hráčí se stejným číslem týmu se děli o kontrolu jejich nad jednotkami." #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" "Hráčí se stejným číslem spojenectví hrají se pokoušejí společně dosáhnout " "vítězství." #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "Zvolte barvu pro identifikaci vašich jednotek ve hře." #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "Zvolte vaši frakci" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "Pozorovat bitvu namísto hraní." #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "Znovu se připojit" #: src/hosting/battleroomtab.cpp:144 msgid "automatically unspec when there's a free slot" msgstr "" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "Jsem připraven" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "Klikněte sem, pokud jste připraveni k začátku hry." #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "Barva" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" "Náhled zvolené mapy. Můžete vidět startovní pozice nebo (pokud nastaveno) " "startovní boxy." #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Založit novou..." #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Zahájit bitvu" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "Start" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "Zahájit bitvu" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "" #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "Přidat počítačem kontrolovaného hráče do hry" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "Zakázat dalším hráčům připojit se k bitvě" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Popis" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 #, fuzzy msgid "AutoSpect" msgstr "Znovu se připojit" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Start" #: src/hosting/battleroomtab.cpp:209 msgid "Automatically start the battle when all players are ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:213 #, fuzzy msgid "Lock Balance" msgstr "Rozdělit" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 #, fuzzy msgid "Ring unsynced" msgstr "Zapnout v-sync" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 #, fuzzy msgid "Ring ..." msgstr "Zazvonit" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "Nepřipraven" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 #, fuzzy msgid "Force spectate ..." msgstr "Vynutit začátek?" #: src/hosting/battleroomtab.cpp:235 #, fuzzy msgid "Balance alliances" msgstr "Pouze zakladatel může vyrovnávat aliance." #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "Automaticky rodělit hráče do dvou nebo více aliancí" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "Uzamknout barvy" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "Nastavit barvu hráče jedinečnou" #: src/hosting/battleroomtab.cpp:241 #, fuzzy msgid "Balance teams" msgstr "Rozdělit" #: src/hosting/battleroomtab.cpp:241 #, fuzzy msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "Automaticky rodělit hráče do dvou nebo více aliancí" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "" #: src/hosting/battleroomtab.cpp:255 #, fuzzy msgid "Save" msgstr "Uložit..." #: src/hosting/battleroomtab.cpp:256 #, fuzzy msgid "Save a set of options." msgstr "Uložit seznam omezení." #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 msgid "Delete" msgstr "" #: src/hosting/battleroomtab.cpp:261 #, fuzzy msgid "Delete a set of options." msgstr "Uložit seznam omezení." #: src/hosting/battleroomtab.cpp:265 #, fuzzy msgid "Set default" msgstr "výchozí" #: src/hosting/battleroomtab.cpp:266 msgid "Use the current set of options as game's default." msgstr "" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "Boxy" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "Vybrat" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "Pokračovat" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "Konec" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "Mapa neexistuje." #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 #, fuzzy msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" "Někteří hráči ještě nejsou připraveni.\n" "Zazvonit na ně?" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "Nepřipraven" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "Nastavit ve hře" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Popis" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "výchozí" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "chyba" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 msgid "Delete preset" msgstr "" #: src/hosting/battleroomtab.cpp:996 #, fuzzy msgid "Set game default preset" msgstr "výchozí" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "" #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Popis" #: src/hosting/hostbattledialog.cpp:91 msgid "Automatically write the battle description when a user joins." msgstr "" #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "Vyberte mod, který chcete hrát." #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "Zaheslováno" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "Pro vstup do hry je nutné heslo. Ponechte prázdné pro žádné heslo" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "Port" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "" #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 #, fuzzy msgid "Randomly picks an available one" msgstr "nepoužitelné" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "Počet hráčů" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "" #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "" #: src/hosting/hostbattledialog.cpp:185 msgid "NAT traversal to use." msgstr "" #: src/hosting/hostbattledialog.cpp:190 msgid "Rank requirement" msgstr "" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 #, fuzzy msgid "Select the type of rank enforcement." msgstr "Vyberte mod, který chcete hrát." #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "Založit bitvu" #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 #, fuzzy msgid "You have to select a game first." msgstr "Musíte nejdřív vybrat mód." #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "Nebyl vybrán žádný mod." #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" "Používáte wxWidgety předcházející verze 2.8\n" " testování portů není podporováno\n" " Zakládání bitev nemusí fungovat." #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" "Server použil pro testování váš port %d je nedostupný. \n" "Zakládání her s tímto nastavením nemusí fungovat." #: src/hosting/hostbattledialog.cpp:427 #, fuzzy, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "Bitva nemohla být zahájena, protože vámi vybraný port (%d) není schopen " "příjmu příchozích packetů.\n" " zkontrolujte znovu vaši konfiguraci routeru & firewallu a změňte port v " "dialogu." #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "Bitva nemohla být zahájena, protože vámi vybraný port (%d) není schopen " "příjmu příchozích packetů.\n" " zkontrolujte znovu vaši konfiguraci routeru & firewallu a změňte port v " "dialogu." #: src/hosting/hostbattledialog.cpp:459 #, fuzzy msgid "Battle not started beacuse the game you selected could not be found. " msgstr "" "Bitva nemohla být zahájena, protože vámi vybraný mod nemůže být nalezen. " #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "Error při startování bitvy." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" "Ve vaší instalaci Springu nebyly nalezeny žádné mapy. Může to být způsobeno " "špatným nastavením Springu." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "Mapy nenalezeny" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "Místnost hry" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "Nastavení" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 #, fuzzy msgid "Unit Restrictions" msgstr "Omezení jednotky" #: src/hosting/mmoptionwindows.cpp:36 #, fuzzy msgid "Change option" msgstr "nastavení UI" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "" #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "" #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "" #: src/iconimagelist.cpp:322 #, fuzzy msgid "Game is closed." msgstr "Chat zavřen." #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "" #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "" #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "" #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "" #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "" #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "" #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "" #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "" #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "" #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "" #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 #, fuzzy msgid "Newbies guide" msgstr "Nováček" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 #, fuzzy msgid "Joining a battle:\n" msgstr "Přidat se ke stejné bitvě" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "Přidat se ke stejné bitvě" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Spring error" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 msgid "Singleplayer gamee" msgstr "" #: src/introguide.cpp:110 msgid "Multiplayer gamee" msgstr "" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "Jakýkoliv soubor (*)|*" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 #, fuzzy msgid "Disconnected from server, chat closed." msgstr "Neznámá zpravá ze serveru" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "" #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "" #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "Zrušit stahování" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "" #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 #, fuzzy msgid "&Save options" msgstr "nastavení UI" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "&Konec" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "&Autotomaticky vstoupit do místností..." #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "SpringNastavení" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "nastavení UI" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "" #: src/mainwindow.cpp:164 #, fuzzy msgid "Channel &list" msgstr "Informace o místnosti" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "" #: src/mainwindow.cpp:166 #, fuzzy msgid "Change &username" msgstr "Informace o místnosti" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "" #: src/mainwindow.cpp:169 #, fuzzy msgid "&Reload maps/games" msgstr "&Znovu zavést mapy/módy" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "&O programu" #: src/mainwindow.cpp:178 #, fuzzy msgid "&System Info" msgstr "Systémové informace" #: src/mainwindow.cpp:179 #, fuzzy msgid "&Change language" msgstr "Informace o místnosti" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "&Nahlásit bug..." #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "&Dokumentace" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "Server" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "&Nástroje" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "&Nápověda" #: src/mainwindow.cpp:500 msgid "You need to be connected to a server to view the channel list" msgstr "" #: src/mainwindow.cpp:500 #, fuzzy msgid "Not connected" msgstr "Stav: připojen" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "Vstoupit do místnosti..." #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "Jméno místnosti k připojení" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "" #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "Jméno uživatele" #: src/mainwindow.cpp:540 #, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 #, fuzzy msgid "No files found" msgstr "Mapy nenalezeny" #: src/mainwindow.cpp:656 #, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "" #: src/mainwindow.cpp:692 #, fuzzy msgid "This profile is write protected, please choose another name" msgstr "Tato bitva je chráněna heslem,zadejte heslo." #: src/mainwindow.cpp:703 #, fuzzy msgid "Which profile do you want to load?" msgstr "Který uživatelský účet si přejete odstranit?" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "Odstranit..." #: src/mainwindow.cpp:767 msgid "Enter new nickname" msgstr "" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "Chat" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "Seznam bitev" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "" #: src/mainwindow.h:203 #, fuzzy msgid "Replays" msgstr "Vždy" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 #, fuzzy msgid "Downloads" msgstr "Stáhnout" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "Aktualizovat" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "Stáhnout" #: src/mapctrl.cpp:897 msgid "side:" msgstr "frakce:" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "bonus: %d%%" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 msgid "Show" msgstr "" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" #: src/mapselectdialog.cpp:95 #, fuzzy msgid "Filter" msgstr "Soubor" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" #: src/mapselectdialog.cpp:100 #, fuzzy msgid "Map details" msgstr "Max kov" #: src/mapselectdialog.cpp:163 #, fuzzy msgid "Start positions" msgstr "Startovní pozice" #: src/mapselectdialog.cpp:261 #, fuzzy msgid "Minimum wind" msgstr "Minimální potřebná hodnost" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "" #: src/mapselectdialog.cpp:263 #, fuzzy msgid "Average wind" msgstr "Průměrný" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "" #: src/mapselectdialog.cpp:265 #, fuzzy msgid "Aspect ratio" msgstr "Pozorovatel" #: src/mapselectdialog.cpp:266 #, fuzzy msgid "Number of start positions" msgstr "Náhodné startovní pozice" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "Typ Startovní Pozice" #: src/mmoptionswrapper.cpp:122 #, fuzzy msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" "Jak hráči vyberou, kde se objeví na mapě\n" "0: pevné pozice na mapě\n" "1: náhodné pozice na mapě\n" "2: vybrat za hry\n" "3: vybrat z lobby před zahájením" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "Nastavit ve hře" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "Nastavit ve hře" #: src/mmoptionswrapper.cpp:132 #, fuzzy msgid "List of restricted units" msgstr "Zakázané jednotky" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "s" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "c" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "r" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "Spustitelné Soubory (*.exe)|*.exe|Jakýkoliv Soubor (*.*)|*.*" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "Barvy a font" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "Požívat systémové barvy" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "Normální" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "Pozadí" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "Akce" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "Zvýraznění" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "Přpojit/Odpojit se" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "Mé zprávy" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "Klient" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "Časová značka" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "Upozornění" #: src/options/chatoptionstab.cpp:258 #, fuzzy msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" "[19:35] ** Server ** Connected to TAS Server.\n" "[22:30] zdravim\n" "[22:30] ** Lama joined the channel.\n" "[22:30] * Lama si mysli ze ty barvy jsou proste super\n" "[22:45] Lama: fakt?\n" "[22:46] jeste bych to mel nejak vic prohazet...\n" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "Písmo:" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "výchozí" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "Vyber..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "Chování" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "Přehrávat zvuky upozornění" #: src/options/chatoptionstab.cpp:300 msgid "Copy server messages in current channel" msgstr "" #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "Záznamy chatů" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "Ukládat záznamy chatů" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "Zvýraznit slova" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "Slova k zvýraznění v chatu:" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "vložte ; rozdělený list" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "" #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "Pozastavit všechny torrenty" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "upload (KB/s)" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "stahování (KB/s)" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "Čísla" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "maximální rychlost uploadu v KB/sec" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "maximální rychlost stahování v KB/sec" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "port je použit pro připojení torrentů" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "maximální počet souběžných připojení" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 #, fuzzy msgid "Remove" msgstr "Odstranit..." #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:61 #, fuzzy msgid "Rename.." msgstr "Odstranit..." #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:70 #, fuzzy msgid "Add New.." msgstr "Přidat počítač..." #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "" #: src/options/groupoptionspanel.cpp:84 #, fuzzy msgid "Group Actions" msgstr "Akce" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "" #: src/options/groupoptionspanel.cpp:95 #, fuzzy msgid "Ignore Chat" msgstr "Otevřít Chat" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:101 msgid "Notify Hosted Battles" msgstr "" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:134 #, fuzzy msgid "Highlight Color" msgstr "Zvýraznit slova" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "" #: src/options/groupoptionspanel.cpp:163 #, fuzzy msgid "Add.." msgstr "Přidat počítač..." #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "" #: src/options/groupoptionspanel.cpp:170 #, fuzzy msgid "Remove users from group" msgstr "Odstranit Uživatelský Účet" #: src/options/groupoptionspanel.cpp:264 #, fuzzy msgid "Name of new group:" msgstr "Jméno uživatele" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "Webový prohlížeč" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "Standardní prohlížeč." #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "Specifikovat:" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "Určete webový prohlížeč,který chcete používat" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "Procházet" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 msgid "Use a file dialog to find the editor binary" msgstr "" #: src/options/lobbyoptionstab.cpp:91 #, fuzzy msgid "Autoconnect" msgstr "Znovu se připojit" #: src/options/lobbyoptionstab.cpp:94 #, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" #: src/options/lobbyoptionstab.cpp:96 #, fuzzy msgid "Autoconnect on lobby start" msgstr "Připojit se k lobby serveru" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:104 #, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "" #: src/options/lobbyoptionstab.cpp:120 #, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "" #: src/options/lobbyoptionstab.cpp:130 #, fuzzy msgid "Tooltips" msgstr "&Nástroje" #: src/options/lobbyoptionstab.cpp:131 #, fuzzy msgid "Show Tooltips?" msgstr "Zobrazit tipy" #: src/options/lobbyoptionstab.cpp:134 #, c-format msgid "Requires %s restart to take effect." msgstr "" #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "Přehrávat zvuky upozornění" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 #, fuzzy msgid "Display time for popup notifications in seconds" msgstr "Přehrávat zvuky upozornění" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 #, fuzzy msgid "Start tab" msgstr "Počáteční kov" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "" #: src/options/lobbyoptionstab.cpp:282 msgid "Choose a editor browser executable" msgstr "" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "Spring" #: src/options/mainoptionstab.cpp:73 #, fuzzy msgid "General" msgstr "Senegal" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "Vrátit" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "Použít" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "Umístění" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "Najdi" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "UnitSync knihovna" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "Automatické nastavení" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "Knihovna" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "Libovolný soubor" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 msgid "Reloading unitsync" msgstr "" #: src/options/springoptionstab.cpp:315 #, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "Zvolte složku" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" #: src/playback/playbackfilter.cpp:60 #, fuzzy msgid "Filter settings" msgstr "Uložit nastavení" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Mapy, které mám" #: src/playback/playbackfilter.cpp:164 #, fuzzy msgid "Filesize in KB:" msgstr "Velikost souboru (MB)" #: src/playback/playbackfilter.cpp:190 #, fuzzy msgid "Duration (hh:mm:ss):" msgstr "Doba trvání:" #: src/playback/playbacklistctrl.cpp:42 #, fuzzy msgid "Date" msgstr "Bitva" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Nastavit přistup..." #: src/playback/playbacklistctrl.cpp:46 #, fuzzy msgid "Duration" msgstr "Doba trvání:" #: src/playback/playbacklistctrl.cpp:47 #, fuzzy msgid "Spring Version" msgstr "Spring error" #: src/playback/playbacklistctrl.cpp:48 #, fuzzy msgid "Filesize" msgstr "Velikost souboru (MB)" #: src/playback/playbacklistctrl.cpp:48 #, fuzzy msgid "Filesize in kilobyte" msgstr "Velikost souboru (MB)" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "Soubor" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "Stáhnout mod" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "Načítání..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "Vždy" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "savegame" msgstr "Uložit..." #: src/playback/playbacktab.cpp:288 msgid "Couldn't get your spring versions from any unitsync library." msgstr "" #: src/playback/playbacktab.cpp:306 #, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "" #: src/playback/playbacktab.cpp:319 #, fuzzy msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" "Mám se pokusit to stáhnout?\n" "Průběh můžete vidět v záložce \"Správce Stahování\"." #: src/playback/playbacktab.cpp:323 #, fuzzy msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" "Než se připojíte k této hře, musíte stáhnout mod.\n" "\n" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" #: src/playback/playbacktab.cpp:356 #, fuzzy msgid "Invalid replay" msgstr "Neplatný port" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr "" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr "" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 #, fuzzy msgid "There was an error downloading for the latest version.\n" msgstr "" "Nastal problém při ověřování poslední verze.\n" "Prosím zopakujte později.\n" "Pokud problém přetrvává, použijte Nápověda->Nahlásit Bug, aby jste na chybu " "upozornili." #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "Upozornění" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "Neplatné číslo" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 #, fuzzy msgid "File doesn't exit" msgstr "Mapa neexistuje." #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Spuštěno" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "Znovu se připojit" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 #, fuzzy msgid "Unknown Error" msgstr "neznámý" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "" #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 #, fuzzy msgid "Download complete." msgstr "Stahování selhalo" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer." msgstr "" #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "Znovu se připojit" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "Znovu se připojit" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 msgid "Tries to connect to the next server in the list." msgstr "" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 msgid "Do nothing" msgstr "" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "" #: src/selectusersdialog.h:67 #, fuzzy msgid "Select Users" msgstr "Vybrat vše" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 #, fuzzy msgid " is online" msgstr " Uživatel není připojen." #: src/serverevents.cpp:165 msgid " is now " msgstr "" #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "" #: src/serverevents.cpp:224 #, fuzzy msgid " just went offline" msgstr " Uživatel není připojen." #: src/serverevents.cpp:259 #, fuzzy msgid " opened battle " msgstr " se připojil k " #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "Nepodařilo se připojit do místnosti" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "Nemohu se připojit k místnosti " #: src/serverevents.cpp:583 msgid " because: " msgstr " protože: " #: src/serverevents.cpp:826 msgid "Server Message" msgstr "" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr " má ip=%s" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr "" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "" #: src/serverevents.cpp:928 #, fuzzy, c-format msgid "%s mutelist" msgstr "Seznam bitev" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "" #: src/serverevents.cpp:984 #, fuzzy msgid "Download update" msgstr "Stahování selhalo" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 msgid "Automatically moved to new battle" msgstr "" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "Přidat počítač..." #: src/singleplayertab.cpp:99 #, fuzzy msgid "Spectate only" msgstr "Pozorovatel" #: src/singleplayertab.cpp:102 #, fuzzy msgid "Random start positions" msgstr "Náhodné startovní pozice" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 #, fuzzy msgid "Game setup error" msgstr "Chyba herního nastavení" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "Nejprve musíte vybrat mapu" #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "" #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 msgid "Coulnd't load required unitsync library" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 #, fuzzy msgid "Fatal error" msgstr "Kritická chyba" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "Kritická chyba" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 #, fuzzy msgid "Ignore chat" msgstr "Otevřít Chat" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 #, fuzzy msgid "Battle Autokick" msgstr "Seznam bitev" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 #, fuzzy msgid "Friends" msgstr "Najdi" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" "Větší hodnoty zrychlují přibližování/oddalování pomocí kolečka myši.\n" "Záporné hodnoty invertují směr přibližování/oddalování.\n" "Výsledek může záviset na módu kamery!" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" "větší hodnota = lépe vypadající stíny\n" "možné hodnoty: 1024, 2048, 4096, 8192" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "" #: src/springsettings/ctrlconstants.h:229 #, fuzzy msgid "Terrain detail" msgstr "Grafické detaily" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "Unit LOD distance" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "higher value = units will remain detailed even when zooming out" msgstr "" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "Grass detail" msgstr "Grafické detaily" #: src/springsettings/ctrlconstants.h:231 msgid "higher value = more detailed grass" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "limituje kolik částic je zobrazeno najednou" #: src/springsettings/ctrlconstants.h:236 msgid "Max nano simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "Mód dvou obrazovek" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "" #: src/springsettings/ctrlconstants.h:245 #, fuzzy msgid "Enable v-sync" msgstr "Zapnout v-sync" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "" #: src/springsettings/ctrlconstants.h:251 #, fuzzy msgid "16-bit Z-buffer" msgstr "24-bit Z-buffer" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "24-bit Z-buffer" #: src/springsettings/ctrlconstants.h:259 msgid "Full-scene anti-aliasing samples" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "Master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "General sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "general volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "reply volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "Battle volume" msgstr "Místnost hry" #: src/springsettings/ctrlconstants.h:276 msgid "battle volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "User interface volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "ui volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "" #: src/springsettings/ctrlconstants.h:291 #, fuzzy msgid "Reflective units" msgstr "Akce" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:306 #, fuzzy msgid "Issue commands on mini-map" msgstr "Zobrazit příkazy na mini-mapě" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "" #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "Zobrazit příkazy na mini-mapě" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "" #: src/springsettings/ctrlconstants.h:308 #, fuzzy msgid "Draw icons on mini-map" msgstr "Zobrazit příkazy na mini-mapě" #: src/springsettings/ctrlconstants.h:309 #, fuzzy msgid "Draw markers on mini-map" msgstr "Zobrazit příkazy na mini-mapě" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 msgid "left is the default" msgstr "levá je standardní" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "" #: src/springsettings/ctrlconstants.h:312 #, fuzzy msgid "Use less colors" msgstr "Požívat systémové barvy" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" #: src/springsettings/ctrlconstants.h:320 #, fuzzy msgid "Show in-game player information" msgstr "Systémové informace" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "Převrátit Y-osu myši v FPS módu" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "nastavit rychlost rolování (myš+klávesnice) pro tento mód" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "" #: src/springsettings/ctrlconstants.h:340 #, fuzzy msgid "First person camera" msgstr "První osoba" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "Základní" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" #: src/springsettings/ctrlconstants.h:385 #, fuzzy msgid "Reflective" msgstr "Akce" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "Zrcadlící + lomivý" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "Dynamický" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "" #: src/springsettings/ctrlconstants.h:389 #, fuzzy msgid "Invert mouse y-axis" msgstr "Převrátit Y-osu myši v FPS módu" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "První osoba" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "šířka obrazovky" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "výška obrazovky" #: src/springsettings/ctrlconstants.h:415 #, fuzzy msgid "Blur reflection" msgstr "Akce" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Shore waves" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Enables shorewaves" msgstr "" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "Akce" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 #, fuzzy msgid "Reflection texture size" msgstr "Akce" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "omezení" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 #, fuzzy msgid "off" msgstr "Vypnout" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "Kombinované nastavení" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "Kvalita vykreslování/Zobrazovací mód" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "nastavení UI" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "Audio" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "Chyba!" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "Uložit nastavení Springu před ukončením?" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "Nastavení Springu (jednoduchý mód)" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "Uložit nastavení" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "Restartovat nastavení na standardní hodnoty" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "Konec" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "Kontakt" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "Nahlásit chybu" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "Mód" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "Info/Nápověda" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "Restartovat všechna nastavení na standardní hodnoty?" #: src/springsettings/frame.cpp:315 #, fuzzy msgid "(simple mode)" msgstr "Nastavení Springu (jednoduchý mód)" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "" #: src/springsettings/frame.cpp:367 #, fuzzy msgid "(expert mode)" msgstr "Přepnout do expertního módu" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "Neplatný port" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 msgid "Hotkey Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Enter new command:" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 #, fuzzy msgid "Hotkey SaveSettings error" msgstr "Chyba v nastavení Springu" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "Mapy nenalezeny" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "" #: src/springsettings/panel_pathoption.cpp:34 msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "Použít tuto cestu" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "" #: src/springsettings/panel_pathoption.cpp:96 msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "nízké" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "střední" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "vysoké" #: src/springsettings/presets.h:45 msgid "very low" msgstr "" #: src/springsettings/presets.h:45 msgid "very high" msgstr "" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "" #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "Audio volby" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "Rozlišení obrazovky" #: src/springsettings/tab_quality_video.cpp:166 msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "Kvalita vody" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "Rozlišení v bitech" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "Nastavení kvality vykreslování" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "Nastavení zobrazovacího módu" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "Nastavení vyhlazování" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "Úrovně vykreslovaných detailů" #: src/springsettings/tab_simple.cpp:40 msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "Grafické detaily" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "Rozlišení obrazovky" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "Přepnout do expertního módu" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr " (aktuální)" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:99 msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "Info" #: src/springsettings/tab_ui.cpp:37 msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "Rychlost rolování (myš+klávesnice)" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "Standardní režim kamery" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "Zvětšit" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "Povolené jednotky" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "Čas spojení vypršel" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "Neznámá zpravá ze serveru" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" #: src/tdfcontainer.cpp:131 msgid "line " msgstr "" #: src/tdfcontainer.cpp:131 msgid " , column " msgstr "" #: src/ui.cpp:175 msgid "Server password" msgstr "Serverové heslo" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" #: src/ui.cpp:294 msgid "Registration successful" msgstr "" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "" #: src/ui.cpp:458 msgid "Help error" msgstr "" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, c-format msgid "%s commands help." msgstr "" #: src/ui.cpp:465 msgid "Global commands:" msgstr "Globální příkazy:" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr "" #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr "" #: src/ui.cpp:468 msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" #: src/ui.cpp:469 msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr "" #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr "" #: src/ui.cpp:472 msgid " \"/join channel [password]\" - Joins a channel." msgstr "" #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr "" #: src/ui.cpp:474 msgid " \"/ingame\" - Shows how much time you have in game." msgstr "" #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" #: src/ui.cpp:476 msgid " \"/part\" - Leaves current channel." msgstr "" #: src/ui.cpp:477 msgid " \"/p\" - Alias to /part." msgstr "" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr "" #: src/ui.cpp:479 #, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr "" #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr "" #: src/ui.cpp:481 #, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr "" #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr "" #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "" #: src/ui.cpp:496 msgid "The topic \"" msgstr "Předmět \"" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "" #: src/ui.cpp:580 msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" #: src/ui.cpp:599 #, fuzzy msgid "Online play is currently disabled." msgstr "Online hraní bude zakázáno." #: src/ui.cpp:631 #, fuzzy, c-format msgid "disconnected from server: %s" msgstr "Neznámá zpravá ze serveru" #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "" #: src/ui.cpp:839 #, fuzzy, c-format msgid "%s (%d users)" msgstr "(%d uživatelé)" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "Aktuální bitva byla uzavřena hostem." #: src/ui.cpp:993 msgid "Battle closed" msgstr "Uzavřená bitva" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "Chyba v nastavení Springu" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "" #: src/ui.cpp:1337 #, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" #: src/ui.cpp:1340 msgid "Welcome" msgstr "Vítejte" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 #, fuzzy msgid "Import settings?" msgstr "Uložit nastavení" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Nastal problém při ověřování poslední verze.\n" "Prosím zopakujte později.\n" "Pokud problém přetrvává, použijte Nápověda->Nahlásit Bug, aby jste na chybu " "upozornili." #: src/ui.cpp:1387 msgid "Your Version: " msgstr "Vaše verze: " #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "Poslední verze: " #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 #, fuzzy msgid "Not up to date" msgstr "Není aktuální" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "Počet hráčů" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" "Vaše SpringLobby verze není aktuální.\n" "\n" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "Není aktuální" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" #: src/updater/updater.cpp:72 #, fuzzy msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Nastal problém při ověřování poslední verze.\n" "Prosím zopakujte později.\n" "Pokud problém přetrvává, použijte Nápověda->Nahlásit Bug, aby jste na chybu " "upozornili." #: src/updater/updater.cpp:81 #, fuzzy, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" "Nastal problém při ověřování poslední verze.\n" "Prosím zopakujte později.\n" "Pokud problém přetrvává, použijte Nápověda->Nahlásit Bug, aby jste na chybu " "upozornili." #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 #, fuzzy msgid "the SpringLobby revision to update to" msgstr "" "Vaše SpringLobby verze je aktuální!\n" "\n" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "SpringLobby" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 msgid "Warning" msgstr "" #: src/user.cpp:83 #, fuzzy msgid "away" msgstr "Vždy" #: src/user.cpp:83 msgid "back" msgstr "" #: src/user.cpp:85 #, fuzzy msgid "ingame" msgstr "Přezdívka" #: src/user.cpp:85 msgid "back from game" msgstr "" #: src/user.cpp:195 msgid "Newbie" msgstr "Nováček" #: src/user.cpp:196 msgid "Beginner" msgstr "Začátečník" #: src/user.cpp:197 msgid "Average" msgstr "Průměrný" #: src/user.cpp:198 msgid "Above average" msgstr "Nadprůměrný" #: src/user.cpp:199 msgid "Experienced" msgstr "Zkušený" #: src/user.cpp:200 msgid "Highly experienced" msgstr "Nejzkušenější" #: src/user.cpp:201 msgid "Veteran" msgstr "Veterán" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 #, fuzzy msgid "Unknown" msgstr "neznámý" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "" #: src/useractions.h:11 #, fuzzy msgid "none" msgstr "Žádný" #: src/useractions.h:11 #, fuzzy msgid "highlight" msgstr "Zvýraznění" #: src/useractions.h:11 msgid "notify login/out" msgstr "" #: src/useractions.h:11 msgid "ignore chat" msgstr "" #: src/useractions.h:11 msgid "ignore pm" msgstr "" #: src/useractions.h:12 msgid "autokick" msgstr "" #: src/useractions.h:12 #, fuzzy msgid "notify hosted battle" msgstr "Přidat se ke stejné bitvě" #: src/useractions.h:12 msgid "notify status change" msgstr "" #: src/useractions.h:19 msgid "no action at all" msgstr "" #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" #: src/usermenu.h:31 msgid "Create new group..." msgstr "" #: src/usermenu.h:37 #, fuzzy msgid "Add to group..." msgstr "Přidat počítač..." #: src/usermenu.h:38 #, fuzzy msgid "Remove from group" msgstr "Odstranit Uživatelský Účet" #: src/utils/controls.h:22 #, fuzzy msgid "Choose color" msgstr "Zvolte složku" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 #, fuzzy msgid "Author" msgstr "Rakousko" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Games" msgstr "Hra" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Compatible games" msgstr "Normální" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "Uložit..." #: src/widgets/infopanel.cpp:74 #, fuzzy msgid "Current version" msgstr "Vaše verze springu" #: src/widgets/infopanel.cpp:79 #, fuzzy msgid "# downloaded" msgstr "Stáhnout" #: src/widgets/infopanel.cpp:84 #, fuzzy msgid "Published on" msgstr "Uveřejnit nový soubor" #: src/widgets/infopanel.cpp:121 #, fuzzy msgid "Changelog" msgstr "Zrušit" #: src/widgets/infopanel.cpp:126 #, fuzzy msgid "Screenshots" msgstr "Rozlišení obrazovky" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" #, fuzzy #~ msgid "Settings" #~ msgstr "Uložit nastavení" #, fuzzy #~ msgid "Help" #~ msgstr "&Nápověda" #, fuzzy #~ msgid "Faction" #~ msgstr "Akce" #~ msgid "Mod" #~ msgstr "Mod" #, fuzzy #~ msgid "spectators" #~ msgstr "Pozorovatelé:" #, fuzzy #~ msgid "players" #~ msgstr "Hráči:" #~ msgid "Mod:" #~ msgstr "Mod:" #~ msgid "Only mods i have" #~ msgstr "Mody, které mám" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to host a new game" #~ msgstr "" #~ "Již máte jednu spuštěnu instanci Spring, nejdříve ji vypněte, aby jste " #~ "mohli založit novou hru" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to join another battle." #~ msgstr "" #~ "Již máte spuštěnu jedno instanci Springu, nejprve ji zavřete, aby jste se " #~ "mohli přidat k další bitvě." #~ msgid "Do you want me to take you to the download page?" #~ msgstr "Chcete se přemístit na stránku stahování?" #~ msgid "Mod not available" #~ msgstr "Mod není dostupný" #~ msgid "Enter password" #~ msgstr "Zadejte heslo" #, fuzzy #~ msgid "team" #~ msgstr "Tým" #, fuzzy #~ msgid "ally" #~ msgstr "Spojenec" #~ msgid "cpu" #~ msgstr "procesor" #, fuzzy #~ msgid "Load a saved set of options." #~ msgstr "Náčíst uložený seznam omezení." #, fuzzy #~ msgid "Save..." #~ msgstr "Uložit..." #, fuzzy #~ msgid "Delete..." #~ msgstr "Vyber..." #, fuzzy #~ msgid "Set default..." #~ msgstr "výchozí" #~ msgid "Mod Options" #~ msgstr "Nastavení Modu" #~ msgid "Map Options" #~ msgstr "Nastavení Mapy" #~ msgid "You don't have the mod " #~ msgstr "Nemáte tento mod " #, fuzzy #~ msgid "unknown hash " #~ msgstr "neznámý" #~ msgid "Select the mod to play with." #~ msgstr "Vyberte mod, který chcete hrát." #~ msgid "Test firewall" #~ msgstr "Test firewallu" #, fuzzy #~ msgid "Tab icons" #~ msgstr "Nastavení Mapy" #~ msgid "P2P" #~ msgstr "P2P" #~ msgid "Publish new file" #~ msgstr "Uveřejnit nový soubor" #~ msgid "Search file" #~ msgstr "Hledat soubor" #, fuzzy #~ msgid "Download Lua widgets" #~ msgstr "Stahování selhalo" #~ msgid "not available" #~ msgstr "nepoužitelné" #~ msgid "Status: not connected" #~ msgstr "Stav: nepřipojený" #~ msgid "Status: connected" #~ msgstr "Stav: připojen" #~ msgid "Status: unknown" #~ msgstr "Stav: neznámý" #~ msgid "Total Outgoing: %.2f KB/s" #~ msgstr "Celkový výstup: %.2f KB/s" #~ msgid "Total Incoming: %.2f KB/s" #~ msgstr "Celkový vstup: %.2f KB/s" #~ msgid "&File" #~ msgstr "&Soubor" #~ msgid "Manually &Start Torrent System" #~ msgstr "Ručně &Spustit Torrent Systém" #~ msgid "Manually &Stop Torrent System" #~ msgstr "Ručně &Zastavit Torrent Systém" #, fuzzy #~ msgid "Modname" #~ msgstr "Mód" #, fuzzy #~ msgid "Download started" #~ msgstr "Stahování selhalo" #, fuzzy #~ msgid "Disconnecting" #~ msgstr "Odpojit" #~ msgid "Debug" #~ msgstr "Ladění" #~ msgid "SpringSettings (expert mode)" #~ msgstr "Nastavení Springu (expertní mód)" #, fuzzy #~ msgid "Player" #~ msgstr "Hráč:" #~ msgid "Hi " #~ msgstr "Ahoj " #, fuzzy #~ msgid "Notice" #~ msgstr "Žádný" #, fuzzy #~ msgid "MB downloaded" #~ msgstr "Stáhnout" #~ msgid "status" #~ msgstr "stav" #~ msgid "KB/s up" #~ msgstr "KB/s up" #~ msgid "KB/s down" #~ msgstr "KB/s down" #~ msgid "Filesize (MB)" #~ msgstr "Velikost souboru (MB)" #~ msgid "Torrent system autostart" #~ msgstr "Automatický start torrentového systému" #~ msgid "manual" #~ msgstr "ručně" #, fuzzy #~ msgid "Torrent system failure" #~ msgstr "Automatický start torrentového systému" #, fuzzy #~ msgid "Disconnected from server." #~ msgstr "Neznámá zpravá ze serveru" #, fuzzy #~ msgid "Connection failure" #~ msgstr "Čas spojení vypršel" #~ msgid "Server message" #~ msgstr "Serverová zpráva" #, fuzzy #~ msgid "Grouping size" #~ msgstr "Akce" #~ msgid "a" #~ msgstr "a" #~ msgid "p" #~ msgstr "p" #~ msgid "m" #~ msgstr "m" #~ msgid "%d%" #~ msgstr "%d%" #~ msgid "t" #~ msgstr "t" #~ msgid "Not a number" #~ msgstr "Není čislo" #~ msgid "" #~ "Value out of range.\n" #~ " Enter an integer between 0 & 100." #~ msgstr "" #~ "Hodnota mimo meze\n" #~ " Vložte celé číslo mezi 0 & 100." #~ msgid "" #~ "There are two or more bots on the same team. Because bots don't know how " #~ "to share, this won't work." #~ msgstr "" #~ "Dva nebo více počítačů se nachází v jednom týmu, protože počítač nevím " #~ "jak sdílet, toto nebude fungovat." #~ msgid "Bot team sharing." #~ msgstr "Sdílení v týmu s počítačem." #, fuzzy #~ msgid "topic" #~ msgstr "Předmět \"" #~ msgid "_SERVER" #~ msgstr "_SERVER" #, fuzzy #~ msgid "" #~ "You need to download the map to be able to watch this replay.\n" #~ "\n" #~ msgstr "" #~ "Musíte nejprve stáhnout mapu, aby jste mohli hrát tuto hru.\n" #~ "\n" #~ msgid "Missing Functionality" #~ msgstr "Chybějící závislost" #~ msgid "Download OTA content?" #~ msgstr "Stáhnout obsah OTA?" #, fuzzy #~ msgid "Create a spring directory in my documents folder" #~ msgstr "Vytvořit .spring soubor v domovském adresáři (doporučeno)" #, fuzzy #~ msgid "Not online" #~ msgstr "Není připojený." #, fuzzy #~ msgid "Only the host can change the game options" #~ msgstr "Pouze zakladatel může uzamknout hru." #~ msgid "Only the host can start the battle." #~ msgstr "Pouze zakladatel může začít bitvu." #, fuzzy #~ msgid "Only the host can use those functions." #~ msgstr "Pouze zakladatel může uzamknout hru." #~ msgid "Only the host can lock the game." #~ msgstr "Pouze zakladatel může uzamknout hru." #, fuzzy #~ msgid "Only the host can toggle autohost mode." #~ msgstr "Pouze zakladatel může uzamknout hru." #~ msgid "Invalid host/port or servername." #~ msgstr "Neplatné host/port nebo jméno serveru." #~ msgid "no rank" #~ msgstr "bez hodnosti" #, fuzzy #~ msgid "Battle filter is active" #~ msgstr "Seznam bitev" #~ msgid "Only the host can fix player colours." #~ msgstr "Pouze zakladatel může přidělovat barvy hráčům." #~ msgid "Select all" #~ msgstr "Vybrat vše" #, fuzzy #~ msgid "Add user" #~ msgstr "(%d uživatelé)" #, fuzzy #~ msgid "Remove selected" #~ msgstr "Nebyl vybrán žádný mod." #, fuzzy #~ msgid "you can also enter a ';' seperated list of usernames:" #~ msgstr "vložte ; rozdělený list" #, fuzzy #~ msgid "Invalid usernames" #~ msgstr "Neplatné číslo" #, fuzzy #~ msgid "Unitsync error" #~ msgstr "UnitSync knihovna" #~ msgid "Continue if commander dies" #~ msgstr "Pokračovat, když velitel zemře" #~ msgid "End if commander dies" #~ msgstr "Skončit, když velitel zemře" #~ msgid "End condition" #~ msgstr "Podmínka konce" #~ msgid "Resources" #~ msgstr "Suroviny" #~ msgid "The amount of metal each player starts with." #~ msgstr "Množství kovu, se kterým hráč začíná." #~ msgid "Start Energy" #~ msgstr "Počáteční energie" #~ msgid "The amount of energy each player starts with." #~ msgstr "Množství energie, se kterou hráč začíná." #~ msgid "Max units" #~ msgstr "Max jednotek" #~ msgid "The maximum number of units allowed per player." #~ msgstr "Maximální počet jednotek na jednoho hráče." #~ msgid "Limit d-gun" #~ msgstr "Omezit d-gun" #~ msgid "Diminishing metal makers" #~ msgstr "Vyčerpávání ložisek kovu" #~ msgid "This chat is exclusively for participants of this battle." #~ msgstr "Tento chat je pouze pro účastníky této bitvy." #~ msgid "Cannot add bot, maximum number of players already reached." #~ msgstr "Nemohu přidat počítač, maximální počet hráčů byl již dosažen." #~ msgid "Max players reached" #~ msgstr "Maximální počet hráčů dosažen" #~ msgid "Autoconnect last server" #~ msgstr "Znovu se připojit k poslednímu serveru" #~ msgid "Save to:" #~ msgstr "Uložit do:" #~ msgid "Browse..." #~ msgstr "Procházet..." #~ msgid "Choose a directory" #~ msgstr "Zvolte adresář" #~ msgid "Map/Mod Options" #~ msgstr "Nastavení Map/Módů" #~ msgid "Up to Date" #~ msgstr "Aktuální" #~ msgid "" #~ "\n" #~ "\n" #~ "Would you like to visit a page with instructions on how to download the " #~ "newest version?" #~ msgstr "" #~ "\n" #~ "\n" #~ "Chcete zobrazit stránku s instrukcemi, jak stáhnout nejnovější verzi?" #~ msgid "Limit D-Gun" #~ msgstr "Omezit D-Gun" #~ msgid "" #~ "Disables commander's D-gun when being too far away from the starting point" #~ msgstr "" #~ "Zakáže veliteli používat jeho D-Gun, pokud je příliš daleko od startovní " #~ "pozice" #~ msgid "Sets the amount of metal that players will start with" #~ msgstr "Nastavuje množství kovu, s kterým hráč začíná" #~ msgid "Sets the amount of energy that players will start with" #~ msgstr "Nastavuje množství energie, s kterou hráč začíná" #~ msgid "" #~ "Sets the maximum amount of units that a player will be allowed to build" #~ msgstr "Nastavuje maximální počet jednotek, které může hráč postavit" #~ msgid "Reset" #~ msgstr "Resetovat" #~ msgid "Spring directory" #~ msgstr "adresář Springu" #~ msgid "Default location." #~ msgstr "Standardní umístění." springlobby-0.169/po/da.po0000600000176000000410000046433612105760277017016 0ustar buildbotwww-data00000000000000# Danish translation for springlobby # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the springlobby package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: springlobby\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2009-12-30 15:02+0000\n" "Last-Translator: nanker \n" "Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2009-12-31 05:00+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "forrige" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "næste" #: src/Helper/imageviewer.cpp:92 msgid "delete" msgstr "slet" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "gem som" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "kunne ikke fjerne fil" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "Fejl" #: src/Helper/imageviewer.cpp:160 msgid "Choose a filename" msgstr "Vælg et filnavn" #: src/Helper/imageviewer.cpp:167 msgid "File successfully saved" msgstr "Fil blev gemt med succes" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 msgid "Success" msgstr "Succés" #: src/Helper/imageviewer.cpp:170 msgid "Couldn't save file" msgstr "Kunne ikke gemme fil" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 msgid "Default" msgstr "Standard" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "SØGER EFTER %s" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" #: src/Helper/wxTranslationHelper.cpp:148 msgid "Select the language" msgstr "Vælg et sprog" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "Sprog" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "wxTranslationHelper: Path Prefix = \"%s\"" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "wxTranslationHelper: Catalog Name = \"%s\"" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Akceptér aftale" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "Akcepterer du denne aftales betingelser?" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Ja" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "Nej" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 msgid "User" msgstr "Bruger" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 msgid "Channel" msgstr "Kanal" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Status:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 #, fuzzy msgid "Minimum rank to join" msgstr "Minimum vind" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Beskrivelse" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Beskrivelse" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Kort" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 msgid "Mapname" msgstr "Kortnavn" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "Spil" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "Spil" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Vært" #: src/battlelist/battlelistctrl.cpp:60 #, fuzzy msgid "Name of the Host" msgstr "Navn for ny gruppe" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Tilskuere:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "Antal spillere" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 msgid "Players" msgstr "Spillere" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "Antal spillere" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Kort" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Maximum number of Players that can join" msgstr "Det maksimale antal spillere tilladt i slaget." #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "Download &kort" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "Download &kort" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Tilskuere:" #: src/battlelist/battlelistctrl.cpp:370 msgid "Active Players:" msgstr "Aktive spillere" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "Vært:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Status:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Låst" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "Adgangsbeskyttet" #: src/battlelist/battlelistfilter.cpp:122 msgid "Highlighted only" msgstr "" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Beskrivelse:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Startet" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Fuld" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "Åben" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Spiller:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Alt" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Kort:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Kun kort jeg har" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "Maks.spiller:" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 #, fuzzy msgid "Game:" msgstr "Spil" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Kun kort jeg har" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Tilskuer:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "%d" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Spillere:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 msgid " Filter " msgstr " Filter " #: src/battlelist/battlelisttab.cpp:144 msgid "Activated" msgstr "Aktiveret" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 msgid " Battle infos " msgstr " Kamp info " #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "0 slag vises" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "Vært ny..." #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "Deltag" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "%d slag vises" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" "Du kan ikke være vært for et spil når du er offline. Forbind venligst til en " "lobby server." #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "Ikke online." #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "" #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Spring fejl" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "Er allerede i et slag" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" "Du deltager allerede i et slag.\n" "\n" "Vil du forlade det nuværende og starte et nyt?" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 msgid "Matchmaker detected" msgstr "" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "Er allerede i et slag" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "Du deltager allerede i et slag.\n" "\n" "Vil du forlade det nuværende og deltage i dette?" #: src/battlelist/battlelisttab.cpp:430 msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" #: src/battlelist/battlelisttab.cpp:433 msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "Kort ikke tilgængeligt" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "Kort ikke tilgængeligt" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "Adgangskode til slag" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 msgid "Edit auto-joined channels" msgstr "" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "Dobbelt klik for at deltage" #: src/channel/channelchooser.cpp:30 msgid "Find channel:" msgstr "Findkanal:" #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 msgid "Choose channels to join" msgstr "Vælg kanal for deltagelse" #: src/channel/channellistctrl.cpp:30 msgid "# users" msgstr "# bruger" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "Viser %d ud af %d kanaler" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "" #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "Log advarsel" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "kanal_" #: src/chatpanel.cpp:69 msgid "#" msgstr "#" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, c-format msgid "%d users" msgstr "%d brugere" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "" #: src/chatpanel.cpp:296 msgid "Send" msgstr "Send" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr " !! Kommando: \"" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "" #: src/chatpanel.cpp:717 msgid "channel" msgstr "kanal" #: src/chatpanel.cpp:718 msgid "battle" msgstr "slag" #: src/chatpanel.cpp:719 msgid "server" msgstr "server" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr "" #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr "" #: src/chatpanel.cpp:814 msgid " ** Channel topic:" msgstr "" #: src/chatpanel.cpp:821 msgid " ** Set by " msgstr "" #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "Chat lukket." #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr " Du har SpringLobby v" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr "" #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr " Bruger er offline." #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr " Sendt: \"" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "\"" #: src/chatpanel.cpp:1090 #, fuzzy msgid " ** User is now offline." msgstr " Bruger er offline." #: src/chatpanel.cpp:1097 #, fuzzy msgid " ** User just got online." msgstr " Bruger er offline." #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 #, fuzzy msgid " ** Joined Battle." msgstr " åbnede spillet " #: src/chatpanelmenu.cpp:34 msgid "Disable text appending" msgstr "" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "Kopiér" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "Ryd" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "Forlad" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "Kanal info" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "Sæt emne..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "Kanal meddelelse..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "Lås..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "Lås op" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "Tilmeld..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "Frameld..." #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "Til" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "Fra" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "Er på?" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "Span beskyttelse" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "Afbryd forbindelse" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "Opret forbindelse" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "Slet..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "Skift adgangskode..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "Sæt adgang..." #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "Konti" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "Udsend..." #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "Admin" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "Åben chat" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "Deltag i samme slag" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "Uden lyd..." #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "Uden lyd i 5 minutter" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "Uden lyd i 10 minutter" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "Uden lyd i 30 minutter" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "Uden lyd i 2 timer" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "Uden lyd i 1 dag" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "Aktiver lyd" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "Uden lyd" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "Spark..." #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "" #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "Ring" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "Slå!" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "Op" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "" #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "Hvad skal være det nye emne?" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "Meddelelse:" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "Lås kanal..." #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "Hvad skal den nye adgangskode være?" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "Lås kanal op" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "Er du sikker på at du vil låse denne kanal op?" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "ChanServ er ikke på denne server." #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "Fjern brugerkonto" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "Hvilken brugerkonto vil du fjerne idag?" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "Fjern konto" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "Er du sikker på at du vil fjerne kontoen " #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "Ændre brugerens adgangskode til konto" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "Hvilken brugerkonto vil du ændre adgangskode for?" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "Hvad skal den nye adgangskode være?" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "Ikke implementeret" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "Udsend meddelelse" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "Meddelelse klar til udsendelse:" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "Lydløs bruger" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "Hvor mange minutter skal bruger være lydløs?" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "Spark bruger" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "Grund:" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "Spark bruger" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "Lydløs bruger" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "Varighed:" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "Indtast navn" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" "Indtast venligst navnet for den nye gruppe.\n" "Efter klik på ok så vil du skulle justere indstillinger." #: src/chatpanelmenu.cpp:774 msgid "couldn't add user" msgstr "kunne ikke tilføje bruger" #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "Forbind til lobby server" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "Server" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "Kaldenavn" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "Adgangskode" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "Husk adgangskode" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" #: src/connectwindow.cpp:85 msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "OK" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Fortryd" #: src/connectwindow.cpp:91 msgid "Login" msgstr "Logind" #: src/connectwindow.cpp:92 msgid "Register" msgstr "Registrér" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "Alias" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "Ugyldig port." #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "Ugyldig port" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "Ugyldig vært/port" #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "Ugyldig vært" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" #: src/connectwindow.cpp:294 msgid "Invalid nickname" msgstr "" #: src/connectwindow.cpp:301 msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "Registrering mislykkedes." #: src/countrycodes.cpp:11 msgid " Andorra" msgstr " Andorra" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "Forenede Arabiske Emirater" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "Afghanistan" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "Antigua og Barbuda" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "Anguilla" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "Albanien" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "Armenien" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "Nederlandske Antiller" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "Angola" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "Antarktis" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "Argentina" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "Amerikansk Samoa" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "Østrig" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "Australien" #: src/countrycodes.cpp:25 #, fuzzy msgid "Åland Islands" msgstr "Cayman øerne" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "Aruba" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "Azerbajdzjan" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "Bosnien-Hercegovina" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "Barbados" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "Bangladesh" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "Belgien" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "Burkina Faso" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "Bulgarien" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "Bahrain" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "Burundi" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "Benin" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "Bermuda" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "Brunei" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "Bolivia" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "Brasilien" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "Bahamas" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "Bhutan" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "Bouvetøen" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "Botswana" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "Hviderusland" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "Belize" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "Canada" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "Centralafrikanske Republik" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "Congo" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "Schweiz" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "Elfenbenskysten" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "Cook øerne" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "Chile" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "Cameroon" #: src/countrycodes.cpp:56 msgid "China" msgstr "Kina" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "Colombia" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "Costa Rica" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "Cuba" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "Kap Verde" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "Juleøen" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "Cypern" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "Tjekkiet" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "Tyskland" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "Djibouti" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "Danmark" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "Dominica" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "Dominikanske Republik" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "Algeriet" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "Ecuador" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "Estland" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "Egypten" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "Vest Sahara" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "Eritrea" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "Spanien" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "Etiopien" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "Finland" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "Fiji" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "Falklandsøerne" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "Mikronesien" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "Færøerne" #: src/countrycodes.cpp:82 msgid "France" msgstr "Frankrig" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "Gabon" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "Grenada" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "Georgien" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "Fransk Guyana" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "Ghana" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "Gibraltar" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "Grønland" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "Gambia" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "Guinea" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "Guadeloupe" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "Ækvatorialguinea" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "Grækenland" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "Guatemala" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "Guam" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "Guinea-Bissau" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "Guyana" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "Hong Kong" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "Heard og McDonald øerne" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "Honduras" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "Kroatien" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "Haiti" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "Ungarn" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "Indonesien" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "Irland" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "Israel" #: src/countrycodes.cpp:110 msgid "India" msgstr "Indien" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "Det britiske territorium i Indiske Ocean" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "Irak" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "Iran" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "Island" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "Italien" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "Jamaica" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "Jordan" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "Japan" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "Kenya" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "Kirgisistan" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "Kambodia" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "Kiribati" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "Komorene" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "Sankt Kitts og Nevis" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "Nordkorea" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "Sydkorea" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "Kuwait" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "Cayman øerne" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "Kazakhstan" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "Laos" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "Libanon" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "Sankt Lucia" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "Liechtenstein" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "Sri Lanka" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "Liberia" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "Lesotho" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "Litauen" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "Luxembourg" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "Letland" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "Libyen" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "Marokko" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "Monaco" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "Moldavien" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "Montenegro" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "Madagaskar" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "Marshall øerne" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "Makedonien" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "Mali" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "Myanmar (Burma)" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "Mongoliet" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "Macau" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "Nordmaria øerne" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "Martinique" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "Mauretanien" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "Montserrat" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "Malta" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "Mauritius" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "Maldiverne" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "Malawi" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "Mexico" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "Malaysia" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "Mocambique" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "Namibia" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "Ny Caledonien" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "Niger" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "Norfolk øen" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "Nigeria" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "Nicaragua" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "Nederlandene (\"Holland\")" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "Norge" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "Nepal" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "Nauru" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "Neutral zone (Saudiarabien/Irak)" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "Niue" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "New Zeeland" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "Oman" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "Panama" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "Peru" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "Fransk Polynesien" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "Papua New Guinea" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "Filippinerne" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "Pakistan" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "Polen" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "Saint-Pierre og Miquelon" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "Pitcairn" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "Puerto Rico" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "Portugal" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "Palau" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "Paraguay" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "Qatar" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "Reunion" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "Rumænien" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "Serbien" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "Russiske føderation" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "Rwanda" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "Saudiarabien" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "Salomon øerne" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "Seychellerne" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "Sudan" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "Sverige" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "Singapore" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "St. Helena" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "Slovenien" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "Svalbard og Jan Mayen øerne" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "Slovakiet" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "Sierra Leone" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "San Marino" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "Senegal" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "Somalia" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "Surinam" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "São Tomé og Príncipe" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "Sovjetunionen (tidligere)" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "El Salvador" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "Syrien" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "Swaziland" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "Turks- og Caicos øerne" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "Tchad" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "Sydlige Franske Territorier" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "Togo" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "Thailand" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "Tadzjikistan" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "Tokelau" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "Turkmenistan" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "Tunesien" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "Tonga" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "Øst-Timor" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "Tyrkiet" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "Trinidad og Tobago" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "Tuvalu" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "Taiwan" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "Tanzania" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "Ukraine" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "Uganda" #: src/countrycodes.cpp:234 #, fuzzy msgid "United Kingdom" msgstr "England" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "" #: src/countrycodes.cpp:236 msgid "United States" msgstr "USA" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "Uruguay" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "Uzbekistan" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "Vatikanstaten" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "Saint Vincent og Grenadine øerne" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "Venezuela" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "De britisk vestindiske ører" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "Vestindiske øer (USA)" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "Vietnam" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "Vanuatu" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "Wallis og Futunaøerne" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "Samoa" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "Yemen" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "Mayotte" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "Jugoslavien" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "Sydafrika" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "Zambia" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "Zaire" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "Zimbabwe" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "(Hele landenavnet ikke fundet)" #: src/crashreport.cpp:168 msgid "System informations" msgstr "System informationer" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "Fandt ingen kort" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "Download" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "% gennemført" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 msgid "Name" msgstr "Navn" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "Størrelse" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "Type" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Kort" #: src/downloader/filelister/filelistctrl.cpp:174 #, fuzzy msgid "game" msgstr "Gemte spil" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "ukendt" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "Søg og download filer" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "Viste filer" #: src/downloader/filelister/filelistdialog.cpp:55 msgid "Download selected" msgstr "Download valgte" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "%u viste filer" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Alias:" #: src/downloader/filelister/filelistfilter.cpp:69 #, fuzzy msgid "Filetype:" msgstr "Fil" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:78 msgid "" "\n" "successfully unzipped in:\n" msgstr "" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "Kunne ikke gemme\n" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" "\n" "til:\n" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" "\n" "Fejl nummer: " #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "Download gennemført." #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "Oversvømmelses advarsel" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Alias:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "" #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 msgid "value" msgstr "værdi" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "" #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "Metode" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Tilfældig" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Ingen" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "Altid" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" #: src/hosting/autobalancedialog.cpp:53 msgid "Number of allies" msgstr "Antal allierede" #: src/hosting/autobalancedialog.cpp:56 msgid "Auto select" msgstr "Autovalg" #: src/hosting/battlemaptab.cpp:69 msgid "Select" msgstr "Vælg" #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "Mulighed" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "Værdi" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "Vindhastighed" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "Tidevandsstyrke" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "Tyngdekraft" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "Fast" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "Vælg i spil" #: src/hosting/battlemaptab.cpp:103 msgid "Chose before game" msgstr "Vælg før spil" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "Start position" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "Enheds begrænsninger" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "Tilladte enheder" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "Enheder på denne liste vil være tilgængelige i spillet." #: src/hosting/battleoptionstab.cpp:77 msgid "Disable selected units." msgstr "Slå valgt enheder fra." #: src/hosting/battleoptionstab.cpp:81 msgid "Re-enable selected units." msgstr "Slå valgte enhed til." #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "<<" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "Tillad alle enheder." #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "Begrænsede enheder" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "Enheder på denne liste vil ikke være tilgængelige i spillet." #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "Hvor mange nehder af denne type vil du tillade?" #: src/hosting/battleoptionstab.cpp:242 msgid "Unit restriction" msgstr "Begrænsning af enheder" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "Hold" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "Allieret" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "Ressource bonus" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "Side" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "Vælg farve" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "Sæt ressourcebonus" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "Tilskuer" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "Spark" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "Indtast venligst en værdi mellem 0 og 100" #: src/hosting/battleroomlistctrl.cpp:750 msgid "AI (bot)\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:754 msgid "Human\n" msgstr "Menneske\n" #: src/hosting/battleroomlistctrl.cpp:759 msgid "Spectator\n" msgstr "Tilskuer\n" #: src/hosting/battleroomlistctrl.cpp:763 msgid "Player\n" msgstr "Spiller\n" #: src/hosting/battleroomlistctrl.cpp:768 msgid "Host\n" msgstr "Vært\n" #: src/hosting/battleroomlistctrl.cpp:772 msgid "Client\n" msgstr "Klient\n" #: src/hosting/battleroomlistctrl.cpp:777 msgid "Ready\n" msgstr "Klar\n" #: src/hosting/battleroomlistctrl.cpp:781 msgid "Not ready\n" msgstr "Ikke klar\n" #: src/hosting/battleroomlistctrl.cpp:786 msgid "In sync" msgstr "I synk" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "Ikke i synk" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "Spillere med det samme holdnummer deler kontrollen over deres enheder." #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" "Spillere med det samme allieret nummer arbejder sammen for at opnå sejr." #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "Vælg en farve for at identificere din enhed i spillet." #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "Vælg din fraktion" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "Se slaget frem for at deltage i det" #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "Autovalg" #: src/hosting/battleroomtab.cpp:144 #, fuzzy msgid "automatically unspec when there's a free slot" msgstr "tjek automatisk for opdateringer" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "Jeg er klar" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "Klik hvis du er tilfreds med slagets indstillinger." #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "Farve" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Vært ny..." #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Vær vært for nyt slag" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "Forlad slaget og returner til slagsiden" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "Start" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "Start slaget" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "" #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "Tilføj en computer-kontrolleret spiller til spillet" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "Autovært" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Beskrivelse" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 #, fuzzy msgid "AutoSpect" msgstr "Autovalg" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Start" #: src/hosting/battleroomtab.cpp:209 msgid "Automatically start the battle when all players are ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 #, fuzzy msgid "Ring unsynced" msgstr "I synk" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 #, fuzzy msgid "Ring ..." msgstr "Ring" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "Ikke parat" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 msgid "Force spectate ..." msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "Juster forudindstillinger" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "" #: src/hosting/battleroomtab.cpp:255 msgid "Save" msgstr "Gem" #: src/hosting/battleroomtab.cpp:256 msgid "Save a set of options." msgstr "Gem et sæt af valg." #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 msgid "Delete" msgstr "Slet" #: src/hosting/battleroomtab.cpp:261 msgid "Delete a set of options." msgstr "Slet alle sæt af valg" #: src/hosting/battleroomtab.cpp:265 msgid "Set default" msgstr "" #: src/hosting/battleroomtab.cpp:266 msgid "Use the current set of options as game's default." msgstr "" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "Vælg" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "Fortsæt" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "Afslut" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "Kort findes ikke." #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" "Nogle spillere er endnu ikke klar\n" "Vil du fremtvinge en start?" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "Ikke parat" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "Vælg i spil" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Beskrivelse" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "Sæt navn." #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "Indtast forud valgt navn" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "fejl" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 msgid "Delete preset" msgstr "Slet forudindstilling" #: src/hosting/battleroomtab.cpp:996 msgid "Set game default preset" msgstr "" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "Vær vært for nyt slag" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "En kort beskrivelse af slaget, som vil blive vist på slaglisten." #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Beskrivelse" #: src/hosting/hostbattledialog.cpp:91 msgid "Automatically write the battle description when a user joins." msgstr "" #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "Vælg et sprog" #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "Adgangsbeskyttet" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "Port" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "" #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 #, fuzzy msgid "Randomly picks an available one" msgstr "ingen valg tilgængelige" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "Antal spillere" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "Det maksimale antal spillere tilladt i slaget." #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "" #: src/hosting/hostbattledialog.cpp:185 msgid "NAT traversal to use." msgstr "" #: src/hosting/hostbattledialog.cpp:190 #, fuzzy msgid "Rank requirement" msgstr "Genstart påkrævet" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 msgid "Select the type of rank enforcement." msgstr "" #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "Start som vært for slaget." #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 #, fuzzy msgid "You have to select a game first." msgstr "Du skal vælge et kort først" #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "Download valgte" #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" #: src/hosting/hostbattledialog.cpp:427 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:459 msgid "Battle not started beacuse the game you selected could not be found. " msgstr "" #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "Fejl ved start af slag." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" "Kunne ikke finde nogle kort i din spring installation. Det kan ske når du " "har opsat Spring indstillingerne forkert." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "Fandt ingen kort" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "Valgmuligheder" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 msgid "Unit Restrictions" msgstr "Enheds begrænsninger" #: src/hosting/mmoptionwindows.cpp:36 msgid "Change option" msgstr "" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "Spil er åbent" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "Spil er beskyttet af adgangskode." #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "Spil er fuldt optaget." #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "Spil er fuldt optaget og beskyttet af adgangskode." #: src/iconimagelist.cpp:322 msgid "Game is closed." msgstr "Spil er lukket." #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "Spil er lukket og beskyttet af adgangskode." #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "Spil er lukket og fuldt optaget." #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "Spil er lukket, fuldt optaget og beskyttet af adgangskode." #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "Spil er påbegyndt." #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "Spil er påbegyndt og beskyttet af adgangskode." #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "Spil er påbegyndt og fuldt optaget." #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "Spil er påbegyndt, fuldt optaget og beskyttet af adgangskode." #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "Spil er påbegyndt og lukket." #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "Spil er påbegyndt, lukket og beskyttet af adgangskode." #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "Spil er påbegyndt, lukket og fuldt optaget." #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "Spil er påbegyndt, lukket, fuldt optaget og beskyttet af adgangskode." #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 #, fuzzy msgid "Newbies guide" msgstr "Nybegynder" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 #, fuzzy msgid "Joining a battle:\n" msgstr "Deltag i samme slag" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "Vær vært for nyt slag" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Spring version" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 msgid "Singleplayer gamee" msgstr "" #: src/introguide.cpp:110 msgid "Multiplayer gamee" msgstr "" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "Alle filer (*) |*" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 msgid "Disconnected from server, chat closed." msgstr "" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "" #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "" #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "Afbryd download" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "&Forbind..." #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 msgid "&Save options" msgstr "" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "&Afslut" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "Findkanal:" #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "Spring opsætning" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "Gem til:" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "" #: src/mainwindow.cpp:164 msgid "Channel &list" msgstr "" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "Åben prival &chat..." #: src/mainwindow.cpp:166 #, fuzzy msgid "Change &username" msgstr "&Skift sprog" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "" #: src/mainwindow.cpp:169 msgid "&Reload maps/games" msgstr "" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "Tjek for nye versioner" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "&Om" #: src/mainwindow.cpp:178 #, fuzzy msgid "&System Info" msgstr "System informationer" #: src/mainwindow.cpp:179 msgid "&Change language" msgstr "&Skift sprog" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "&Rapportér en fejl..." #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "&Dokumentation" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "Server" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "&Redigér" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "Værk&tøjer" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "&Hjælp" #: src/mainwindow.cpp:500 #, fuzzy msgid "You need to be connected to a server to view the channel list" msgstr "Du skal være forbundet til serveren for at se kanalliste" #: src/mainwindow.cpp:500 msgid "Not connected" msgstr "Ikke forbundet" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "" #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "Åben privat chat..." #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "Brugernavn" #: src/mainwindow.cpp:540 #, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 msgid "No files found" msgstr "Ingen filer fundet" #: src/mainwindow.cpp:656 #, fuzzy, c-format msgid "You need to restart %s for the language change to take effect." msgstr "Du skal genstarte SpringLobby for at sproget virker." #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "Genstart påkrævet" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "Indtast et profilnavn" #: src/mainwindow.cpp:692 #, fuzzy msgid "This profile is write protected, please choose another name" msgstr "Slaget er beskyttet af en adgangskode, angiv denne." #: src/mainwindow.cpp:703 #, fuzzy msgid "Which profile do you want to load?" msgstr "Hvilken profil ønsker du at indlæse?" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "Giv nyt ´navn..." #: src/mainwindow.cpp:767 #, fuzzy msgid "Enter new nickname" msgstr "Indtast navn" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "Chat" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "Slagliste" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "" #: src/mainwindow.h:203 msgid "Replays" msgstr "" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 msgid "Downloads" msgstr "Downloads" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "Genopfrisk" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "Download" #: src/mapctrl.cpp:897 msgid "side:" msgstr "side:" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "allieret: %d" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "bonus: %d%%" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 msgid "Show" msgstr "Vis" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "Alle kort" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "Vis alle tilgængelige kort" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "Populære kort" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" "Vis kun kort som aktuelt bliver spillet på serveren. Du skal være on-line " "for at bruge dette." #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "Senest spillede kort" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "Vis kun kort som du har spillet fornyligt. (baseret på dine repalys.)" #: src/mapselectdialog.cpp:95 msgid "Filter" msgstr "Filter" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" "Vis kun kort som indeholder denne tekst i deres navn eller beskrivelse." #: src/mapselectdialog.cpp:100 msgid "Map details" msgstr "Kort detaljer" #: src/mapselectdialog.cpp:163 msgid "Start positions" msgstr "Start positioner" #: src/mapselectdialog.cpp:261 msgid "Minimum wind" msgstr "Minimum vind" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "Maximum vind" #: src/mapselectdialog.cpp:263 msgid "Average wind" msgstr "Gennemsnitlig vind" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "Størrelse (kortareal)" #: src/mapselectdialog.cpp:265 msgid "Aspect ratio" msgstr "Formatforhold" #: src/mapselectdialog.cpp:266 msgid "Number of start positions" msgstr "Antal start positioner" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "Start positions type" #: src/mmoptionswrapper.cpp:122 msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "Vælg i spil" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "Vælg før spil" #: src/mmoptionswrapper.cpp:132 msgid "List of restricted units" msgstr "" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "Kort navn" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "s" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "r" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "Farver og skrifttyper" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "Brug systemets farver" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "Normal" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "Baggrund" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "Handling" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "Fremhæv" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "Deltag/forlad" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "Min meddelelse" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "Klient" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "Tidsstempel" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "Påmindelse" #: src/options/chatoptionstab.cpp:258 msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "Skrifttype:" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "standard" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "Vælg..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "Opførsel" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "Afspil lyd ved besked" #: src/options/chatoptionstab.cpp:300 msgid "Copy server messages in current channel" msgstr "" #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "Chat log" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "Gem chat log" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "Fremhæv ord" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "" #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "Sæt alle torrents på pause" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "upload (KB/s)" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "download (KB/s)" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "Numre" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "port anvendt til torrent forbindelser" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 msgid "Remove" msgstr "Fjern" #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "Fjern en eksisterende gruppe" #: src/options/groupoptionspanel.cpp:61 msgid "Rename.." msgstr "Giv nyt ´navn..." #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "Giv nyt navn til eksisterende gruppe" #: src/options/groupoptionspanel.cpp:70 msgid "Add New.." msgstr "Tilføj ny..." #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "Tilføj ny gruppe" #: src/options/groupoptionspanel.cpp:84 msgid "Group Actions" msgstr "" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "" #: src/options/groupoptionspanel.cpp:95 msgid "Ignore Chat" msgstr "" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:101 msgid "Notify Hosted Battles" msgstr "" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:134 msgid "Highlight Color" msgstr "" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "Brugere i gruppen" #: src/options/groupoptionspanel.cpp:163 msgid "Add.." msgstr "Tilføj..." #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "Tilføj brugere til gruppen" #: src/options/groupoptionspanel.cpp:170 msgid "Remove users from group" msgstr "Fjern brugere fra gruppen" #: src/options/groupoptionspanel.cpp:264 msgid "Name of new group:" msgstr "Navn for ny gruppe" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "Tilføj ny gruppe" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "Webbrowser" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "Standard browser." #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "Angiv:" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "Angiv den web browser du vil benytte" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "Browse" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 msgid "Use a file dialog to find the editor binary" msgstr "" #: src/options/lobbyoptionstab.cpp:91 msgid "Autoconnect" msgstr "" #: src/options/lobbyoptionstab.cpp:94 #, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" #: src/options/lobbyoptionstab.cpp:96 msgid "Autoconnect on lobby start" msgstr "" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:104 #, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "rapport statistik" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "Automatisk opdatering" #: src/options/lobbyoptionstab.cpp:120 #, fuzzy, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" "SpringLobby kan tjekke ved start om der findes en nyere version og " "automatisk downloade den til dig." #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "tjek automatisk for opdateringer" #: src/options/lobbyoptionstab.cpp:130 msgid "Tooltips" msgstr "Værktøjstips" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "Vis værktøjstips?" #: src/options/lobbyoptionstab.cpp:134 #, fuzzy, c-format msgid "Requires %s restart to take effect." msgstr "Kræver genstart af SpringLobby før det virker." #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "Afspil lyd ved besked" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 #, fuzzy msgid "Display time for popup notifications in seconds" msgstr "Afspil lyd ved besked" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 msgid "Start tab" msgstr "" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "" #: src/options/lobbyoptionstab.cpp:282 msgid "Choose a editor browser executable" msgstr "" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "Spring" #: src/options/mainoptionstab.cpp:73 msgid "General" msgstr "Generelt" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "Grupper" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "Gendan" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "Anvend" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "Placering" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "Søg" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "UnitSync bibliotek" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "Konfigurer automatisk" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "Bibliotek" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "Alle filer" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "Vælg UnitSync bibliotek" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 msgid "Reloading unitsync" msgstr "" #: src/options/springoptionstab.cpp:315 #, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "Vælg en mappe" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" #: src/playback/playbackfilter.cpp:60 msgid "Filter settings" msgstr "Filterindstillinger" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Kun kort jeg har" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "Filstørrelse i KB:" #: src/playback/playbackfilter.cpp:190 msgid "Duration (hh:mm:ss):" msgstr "Varighed (tt:mm:ss):" #: src/playback/playbacklistctrl.cpp:42 msgid "Date" msgstr "Dato" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Kort navn" #: src/playback/playbacklistctrl.cpp:46 msgid "Duration" msgstr "Varighed" #: src/playback/playbacklistctrl.cpp:47 msgid "Spring Version" msgstr "Spring version" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize" msgstr "Filstørrelse" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "Filstørrelse i kilobytes" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "Fil" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "Observér" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "Indlæs..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "spillere" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "savegame" msgstr "Gemte spil" #: src/playback/playbacktab.cpp:288 msgid "Couldn't get your spring versions from any unitsync library." msgstr "" #: src/playback/playbacktab.cpp:306 #, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "Din nuværende version er:" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" #: src/playback/playbacktab.cpp:323 msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "Invalid replay" msgstr "" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "Du blev sparket ud af slaget!" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "Sparket ud af vært" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr "" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr " %d minutter tilbage" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 #, fuzzy msgid "There was an error downloading for the latest version.\n" msgstr "" "der var en fejl ved download af den seneste version.\n" "Opdater venligst manuelt fra http://springrts.com" #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "Påmindelse" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "Ugyldigt tal." #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 #, fuzzy msgid "File doesn't exit" msgstr "Kort findes ikke." #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Aktiveret" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "Opret forbindelse" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 #, fuzzy msgid "Unknown Error" msgstr "Ukendt" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "Download gennemført, placering er: " #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 msgid "Download complete." msgstr "Download gennemført." #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer." msgstr "" #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "Opret forbindelse" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "Opret forbindelse" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 #, fuzzy msgid "Tries to connect to the next server in the list." msgstr "Du skal være forbundet til serveren for at se kanalliste" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 msgid "Do nothing" msgstr "" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "" #: src/selectusersdialog.h:67 msgid "Select Users" msgstr "Vælg brugere" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 msgid " is online" msgstr " er online" #: src/serverevents.cpp:165 msgid " is now " msgstr " er nu " #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "" #: src/serverevents.cpp:224 msgid " just went offline" msgstr " er netop gået offline" #: src/serverevents.cpp:259 msgid " opened battle " msgstr " åbnede spillet " #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "" #: src/serverevents.cpp:583 msgid " because: " msgstr " fordi: " #: src/serverevents.cpp:826 msgid "Server Message" msgstr "Server meddelelse" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr " har ip=%s" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr "" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "" #: src/serverevents.cpp:928 #, c-format msgid "%s mutelist" msgstr "" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "" #: src/serverevents.cpp:984 msgid "Download update" msgstr "Download opdatering" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 #, fuzzy msgid "Automatically moved to new battle" msgstr "tjek automatisk for opdateringer" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "" #: src/singleplayertab.cpp:99 msgid "Spectate only" msgstr "" #: src/singleplayertab.cpp:102 msgid "Random start positions" msgstr "" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "- Vælg en -" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 #, fuzzy msgid "Game setup error" msgstr "Opsætningsfejl i spil" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "Du skal vælge et kort først" #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "" #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 #, fuzzy msgid "Coulnd't load required unitsync library" msgstr "Vælg et unitsync bibliotek" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 #, fuzzy msgid "Fatal error" msgstr "Kritisk fejl" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "Kritisk fejl" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "vis denne hjælpebesked" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 msgid "Ignore chat" msgstr "Se bort fra chat" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 msgid "Battle Autokick" msgstr "" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 msgid "Friends" msgstr "Venner" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "" #: src/springsettings/ctrlconstants.h:229 #, fuzzy msgid "Terrain detail" msgstr "Grafiske deltaljer" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "Unit LOD distance" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "higher value = units will remain detailed even when zooming out" msgstr "" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "Grass detail" msgstr "Grafiske deltaljer" #: src/springsettings/ctrlconstants.h:231 msgid "higher value = more detailed grass" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:236 msgid "Max nano simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "hvis du har to skærme kan du bruge begge" #: src/springsettings/ctrlconstants.h:245 #, fuzzy msgid "Enable v-sync" msgstr "I synk" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "Full-scene anti-aliasing samples" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "Master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "General sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "general volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "reply volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "Battle volume" msgstr "Slag lukket" #: src/springsettings/ctrlconstants.h:276 msgid "battle volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "User interface volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "ui volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "Skygger (langsom)" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "" #: src/springsettings/ctrlconstants.h:291 #, fuzzy msgid "Reflective units" msgstr "Begrænsede enheder" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "" #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 msgid "left is the default" msgstr "" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Use less colors" msgstr "brug færre fraver" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "gør forskel i højde klarere" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "Vis spilleur" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" #: src/springsettings/ctrlconstants.h:320 #, fuzzy msgid "Show in-game player information" msgstr "Vis spilleur" #: src/springsettings/ctrlconstants.h:322 #, fuzzy msgid "Show in-game framerate" msgstr "Vis spilleur" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:339 #, fuzzy msgid "Total war camera" msgstr "Total krig" #: src/springsettings/ctrlconstants.h:340 #, fuzzy msgid "First person camera" msgstr "Første person" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "Grundlæggende" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" #: src/springsettings/ctrlconstants.h:385 #, fuzzy msgid "Reflective" msgstr "Vælg" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "Dynamisk" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "Total krig" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "Første person" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "skærm bredde" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "skærm højde" #: src/springsettings/ctrlconstants.h:415 msgid "Blur reflection" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Shore waves" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Enables shorewaves" msgstr "" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "Handling" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 msgid "Reflection texture size" msgstr "" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "Varighed" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 #, fuzzy msgid "off" msgstr "Fra" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "Lyd" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "Fejl!" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "Gem Spring opsætning før den forlades?" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "Bekræftelse nødvendig" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "SpringSettings (enkel tilstand)" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "Gem indstillinger" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "Gendan indstillinger til standard" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "Afslut" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "Simpel (få muligheder)" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "Ekspert (alle muligheder)" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "Om" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "Kontakt" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "Bidragydere" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "Rapportér en Fejl (Bug)" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "Tilstand" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "Info/hjælp" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "" #: src/springsettings/frame.cpp:315 #, fuzzy msgid "(simple mode)" msgstr "SpringSettings (enkel tilstand)" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "Tip" #: src/springsettings/frame.cpp:367 #, fuzzy msgid "(expert mode)" msgstr "Skift til ekspert tilstand" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "SpringLobby teamet" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "Ugyldig port" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 #, fuzzy msgid "Hotkey Error" msgstr "Hjælp fejl" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 #, fuzzy msgid "Enter new command:" msgstr "Chat kommandoer:" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 #, fuzzy msgid "Hotkey SaveSettings error" msgstr "Spring opsætningsfejl" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "Ingen filer fundet" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "" #: src/springsettings/panel_pathoption.cpp:34 msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "Brug denne sti" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "Sti opsætning" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "Vælg et unitsync bibliotek" #: src/springsettings/panel_pathoption.cpp:96 msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "lav" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "middel" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "høj" #: src/springsettings/presets.h:45 msgid "very low" msgstr "meget lav" #: src/springsettings/presets.h:45 msgid "very high" msgstr "meget høj" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "kan ikke køre standard browser" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "Kunne ikke køre browser. URL er: " #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "Kunne ikke køre browser." #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "Spring opsætningsfejl" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "Lydindstillinger" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "Skærmopløsning" #: src/springsettings/tab_quality_video.cpp:166 msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "Vand kvalitet" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "" #: src/springsettings/tab_simple.cpp:40 msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "Grafisk kvalitet" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "Grafiske deltaljer" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "Skærmopløsning" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "Skift til ekspert tilstand" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr " (denne)" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:99 msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "Info" #: src/springsettings/tab_ui.cpp:37 msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "Zoom" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "Tilladte enheder" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "Tidsudløb på forbindelsen" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "Ukendt svar fra server" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" #: src/tdfcontainer.cpp:131 msgid "line " msgstr "" #: src/tdfcontainer.cpp:131 msgid " , column " msgstr "" #: src/ui.cpp:175 msgid "Server password" msgstr "Adgangskode til server" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" "Registrering lykkedes,\n" "du skulle nu kunne logge ind." #: src/ui.cpp:294 msgid "Registration successful" msgstr "Registrering lykkedes" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "" #: src/ui.cpp:458 msgid "Help error" msgstr "Hjælp fejl" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, c-format msgid "%s commands help." msgstr "" #: src/ui.cpp:465 msgid "Global commands:" msgstr "" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr "" #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr "" #: src/ui.cpp:468 msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" #: src/ui.cpp:469 msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr "" #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr "" #: src/ui.cpp:472 msgid " \"/join channel [password]\" - Joins a channel." msgstr "" #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr "" #: src/ui.cpp:474 msgid " \"/ingame\" - Shows how much time you have in game." msgstr "" #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" #: src/ui.cpp:476 msgid " \"/part\" - Leaves current channel." msgstr "" #: src/ui.cpp:477 msgid " \"/p\" - Alias to /part." msgstr "" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr "" #: src/ui.cpp:479 #, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr "" #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr "" #: src/ui.cpp:481 #, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr "" #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "Chat kommandoer:" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr "" #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "Ingen emner skrevet endnu." #: src/ui.cpp:496 msgid "The topic \"" msgstr "Emnet \"" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "" "\" blev ikke fundet. Skriv \"/hjælp emner\" kun for tilgængelige emner." #: src/ui.cpp:580 msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" #: src/ui.cpp:599 msgid "Online play is currently disabled." msgstr "Online spil er pt slået fra." #: src/ui.cpp:631 #, fuzzy, c-format msgid "disconnected from server: %s" msgstr "Koblet fra server." #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "" #: src/ui.cpp:839 #, fuzzy, c-format msgid "%s (%d users)" msgstr "(%d brugere)" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "Det aktuelle slag blev lukket af værten." #: src/ui.cpp:993 msgid "Battle closed" msgstr "Slag lukket" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "Spring opsætningsfejl" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "Kort mangler" #: src/ui.cpp:1337 #, fuzzy, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" ",\n" "Det ser ud som om det er første gang du bruger SpringLobby. Jeg har gættet " "på en opsætning, som jeg tror vil virke for dig, men du bør tjekke den, " "særligt Spring opsætningen. \n" "Når du er færdig kan du gå til filmenuen, tilslutte dig til en server og " "nyde et godt spil Spring :)" #: src/ui.cpp:1340 msgid "Welcome" msgstr "Velkommen" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 msgid "Import settings?" msgstr "" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/ui.cpp:1387 msgid "Your Version: " msgstr "Din version: " #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "Sidste version: " #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 msgid "Not up to date" msgstr "Ikke opdateret" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "Spring fejl" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" "Din SpringLobby version er ikke opdateret!\n" "\n" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "Ikke opdateret" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" #: src/updater/updater.cpp:72 msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/updater/updater.cpp:81 #, fuzzy, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" "der var en fejl ved download af den seneste version.\n" "Opdater venligst manuelt fra http://springrts.com" #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "Delvis succes" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 #, fuzzy msgid "the SpringLobby revision to update to" msgstr "" "Din SpringLobby version er opdateret!\n" "\n" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "SpringLobby" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 #, fuzzy msgid "Warning" msgstr "Log advarsel" #: src/user.cpp:83 msgid "away" msgstr "borte" #: src/user.cpp:83 msgid "back" msgstr "tilbage" #: src/user.cpp:85 msgid "ingame" msgstr "" #: src/user.cpp:85 msgid "back from game" msgstr "" #: src/user.cpp:195 msgid "Newbie" msgstr "Nybegynder" #: src/user.cpp:196 msgid "Beginner" msgstr "Begynder" #: src/user.cpp:197 msgid "Average" msgstr "Middel" #: src/user.cpp:198 msgid "Above average" msgstr "Over middel" #: src/user.cpp:199 msgid "Experienced" msgstr "Erfaren" #: src/user.cpp:200 msgid "Highly experienced" msgstr "Meget erfaren" #: src/user.cpp:201 msgid "Veteran" msgstr "Veteran" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 msgid "Unknown" msgstr "Ukendt" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "" #: src/useractions.h:11 msgid "none" msgstr "ingen" #: src/useractions.h:11 msgid "highlight" msgstr "" #: src/useractions.h:11 msgid "notify login/out" msgstr "" #: src/useractions.h:11 msgid "ignore chat" msgstr "se bort fra chat" #: src/useractions.h:11 msgid "ignore pm" msgstr "" #: src/useractions.h:12 msgid "autokick" msgstr "" #: src/useractions.h:12 msgid "notify hosted battle" msgstr "" #: src/useractions.h:12 msgid "notify status change" msgstr "" #: src/useractions.h:19 msgid "no action at all" msgstr "" #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" #: src/usermenu.h:31 msgid "Create new group..." msgstr "Skab ny gruppe..." #: src/usermenu.h:37 msgid "Add to group..." msgstr "Tilføj til gruppe..." #: src/usermenu.h:38 msgid "Remove from group" msgstr "Fjern fra gruppe" #: src/utils/controls.h:22 msgid "Choose color" msgstr "Vælg farve" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "Vælg farve (kun de første16 vil blive gemt)" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 msgid "Author" msgstr "Forfatter" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Games" msgstr "Spil" #: src/widgets/downloadlistctrl.cpp:31 msgid "Compatible games" msgstr "" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "Gemte spil" #: src/widgets/infopanel.cpp:74 msgid "Current version" msgstr "Nuværende version" #: src/widgets/infopanel.cpp:79 msgid "# downloaded" msgstr "# downloadet" #: src/widgets/infopanel.cpp:84 msgid "Published on" msgstr "Publiseret" #: src/widgets/infopanel.cpp:121 msgid "Changelog" msgstr "Ændringslog" #: src/widgets/infopanel.cpp:126 msgid "Screenshots" msgstr "Skærmbilleder" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" #, fuzzy #~ msgid "Settings" #~ msgstr "Gem indstillinger" #, fuzzy #~ msgid "Help" #~ msgstr "&Hjælp" #, fuzzy #~ msgid "Faction" #~ msgstr "Handling" #~ msgid "spectators" #~ msgstr "tilskuere" #~ msgid "max" #~ msgstr "maks" #~ msgid "Do you want me to take you to the download page?" #~ msgstr "Ønsker du at jeg tager dig til download siden?" #~ msgid "Enter password" #~ msgstr "Indtast adgangskode" #~ msgid "team" #~ msgstr "hold" #~ msgid "ally" #~ msgstr "allieret" #~ msgid "cpu" #~ msgstr "cpu" #~ msgid "Load a saved set of options." #~ msgstr "Indlæst et gemt sæt af valg." #~ msgid "Delete..." #~ msgstr "Slet..." #~ msgid "Map Options" #~ msgstr "Kort indstillinger" #~ msgid " . Please download it first" #~ msgstr " . Download den først" #~ msgid "Hash" #~ msgstr "Hash" #~ msgid "unknown hash " #~ msgstr "ukendt hash " #~ msgid "Test firewall" #~ msgstr "Test firewall" #~ msgid "P2P" #~ msgstr "P2P" #~ msgid "Publish new file" #~ msgstr "Publiser ny fil" #~ msgid "Search file" #~ msgstr "Søg fil" #~ msgid "not available" #~ msgstr "ikke tilgængelig" #~ msgid "Status: not connected" #~ msgstr "Status: ikke forbundet" #~ msgid "Status: connected" #~ msgstr "Status: forbundet" #~ msgid "Status: unknown" #~ msgstr "Status:ukendt" #~ msgid "&File" #~ msgstr "&Fil" #~ msgid "Which profile do you want to be default?" #~ msgstr "Hvilken profil ønsker du som standard?" #~ msgid "" #~ "Download started in the background, please be patient\n" #~ "you will be notified on operation completed." #~ msgstr "" #~ "Download starter i baggrunden, være venligst tålmodig\n" #~ "du vil få besked når den er afsluttet." #~ msgid "Download started" #~ msgstr "Download påbegyndt" #~ msgid "You refused a mandatory update, you will be disconnected now." #~ msgstr "Du afviste en tvungen opdatering, du vil blive frakoblet nu." #~ msgid "Disconnecting" #~ msgstr "frakobler" #~ msgid "Debug" #~ msgstr "Fejlfinding" #~ msgid "SpringSettings (expert mode)" #~ msgstr "SpringSettings (ekspert tilstand)" #~ msgid "Hi " #~ msgstr "Hej " #~ msgid "Notice" #~ msgstr "Bemærk" #~ msgid "MB downloaded" #~ msgstr "MB downloadet" #~ msgid "MB uploaded" #~ msgstr "MB uploadet" #~ msgid "status" #~ msgstr "Status:" #~ msgid "KB/s up" #~ msgstr "KB/s op" #~ msgid "KB/s down" #~ msgstr "KB/s ned" #~ msgid "Filesize (MB)" #~ msgstr "Filstørrelse (MB)" #~ msgid "Torrent system failure" #~ msgstr "Torrent system fejl" #~ msgid "Connection failure" #~ msgstr "Forbindelsesfejl" #~ msgid "Server message" #~ msgstr "Server meddelelse" #~ msgid "SpringLobby -- downloading update" #~ msgstr "SpringLobby -- downloader opdatering" #~ msgid "Update complete. The changes will be available next lobby start." #~ msgstr "" #~ "Opdatering gennemført. Ændringer vil være tilgængelige næste gang " #~ "programmet startes." #~ msgid "Not a number" #~ msgstr "Ikke et tal" #~ msgid "" #~ "Value out of range.\n" #~ " Enter an integer between 0 & 100." #~ msgstr "" #~ "Værdi udenfor interval.\n" #~ " Indtast en værdi mellem 0 og 100." #~ msgid "_SERVER" #~ msgstr "_SERVER" #~ msgid "Unit detail" #~ msgstr "Detaljer om enheder" #~ msgid "Missing Functionality" #~ msgstr "Manglende funktionalitet" #~ msgid "Invalid host/port or servername." #~ msgstr "Ugyldig vært/port eller servernavn." #~ msgid "Active chat channels:" #~ msgstr "Aktive chat kanaler:" #~ msgid "Select all" #~ msgstr "Vælg alle" #~ msgid "Continue if commander dies" #~ msgstr "Fortsæt hvis kommandør dør" #~ msgid "End if commander dies" #~ msgstr "Slut hvis kommandør dør" #~ msgid "End condition" #~ msgstr "Slut betingelser" #~ msgid "Resources" #~ msgstr "Ressourcer" #~ msgid "The amount of metal each player starts with." #~ msgstr "Mængden af metal til hver spiller ved start." #~ msgid "Start Energy" #~ msgstr "Start energi" #~ msgid "The amount of energy each player starts with." #~ msgstr "Mængden af energi hos hver spiller ved start." #~ msgid "Max units" #~ msgstr "Maks enheder" #~ msgid "The maximum number of units allowed per player." #~ msgstr "Det maksimale antal enheder tilladt pr. spiller." #~ msgid "Browse..." #~ msgstr "Gennemse..." #~ msgid "Choose a directory" #~ msgstr "Vælg et katalog" #~ msgid "Up to Date" #~ msgstr "Opdateret" #~ msgid "Game Ending condition" #~ msgstr "Slutbetingelser for spil" #~ msgid "Max Units Allowed" #~ msgstr "Maks antal tilladte enheder" #~ msgid "" #~ "Sets the maximum amount of units that a player will be allowed to build" #~ msgstr "Sæt det maksimale antal enheder en spiller må bygge" #~ msgid "Reset" #~ msgstr "Nulstil" #~ msgid "Spring directory" #~ msgstr "Spring katalog" springlobby-0.169/po/de.po0000600000176000000410000057472712105760277017030 0ustar buildbotwww-data00000000000000# German translations for SpringLobby package # German messages for SpringLobby. # Copyright (C) 2008 The SpringLobby team # This file is distributed under the same license as the SpringLobby package. # root , 2008. # msgid "" msgstr "" "Project-Id-Version: SpringLobby 0.0.1.10128\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2010-01-10 00:17+0000\n" "Last-Translator: Alexander Minges \n" "Language-Team: German\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-01-10 07:19+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "zurück" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "weiter" #: src/Helper/imageviewer.cpp:92 msgid "delete" msgstr "löschen" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "speichern unter" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "kann Datei nicht löschen" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "Fehler" #: src/Helper/imageviewer.cpp:160 msgid "Choose a filename" msgstr "Wähle einen Dateinamen" #: src/Helper/imageviewer.cpp:167 msgid "File successfully saved" msgstr "Datei erfolgreich gespeichert" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 msgid "Success" msgstr "Erfolg" #: src/Helper/imageviewer.cpp:170 msgid "Couldn't save file" msgstr "Konnte Datei nicht speichern" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 msgid "Default" msgstr "Standard" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "SUCHEN NACH %s" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "Feld von Sprachnamen und Identifikatoren sollte die selbe Größe haben." #: src/Helper/wxTranslationHelper.cpp:148 msgid "Select the language" msgstr "Sprache wählen" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "Sprache" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "wxTranslationHelper: Path Prefix = \"%s\"" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "wxTranslationHelper: Catalog Name = \"%s\"" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Akzeptiere Lizenzbestimmungen" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "Lizenzbestimmungen akzeptieren?" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Ja" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "Nein" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 msgid "User" msgstr "Benutzer" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 msgid "Channel" msgstr "Kanal" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Status:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 #, fuzzy msgid "Minimum rank to join" msgstr "Mindestrang benötigt" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Beschreibung" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Beschreibung" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Karte" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 msgid "Mapname" msgstr "Kartenname" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "Spiel" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "Spiel" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Host" #: src/battlelist/battlelistctrl.cpp:60 #, fuzzy msgid "Name of the Host" msgstr "Name der neuen Gruppe:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Zuschauer:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "Anzahl der Spieler" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 msgid "Players" msgstr "Spieler" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "Anzahl der Spieler" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Karte" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Maximum number of Players that can join" msgstr "Maximale Anzahl an Spielern die in dieser Schlacht erlaubt sind." #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "Karte &herunterladen" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "Karte &herunterladen" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Zuschauer:" #: src/battlelist/battlelistctrl.cpp:370 msgid "Active Players:" msgstr "Aktive Spieler" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "Host:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Status:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Gesperrt" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "kennwortgeschützt" #: src/battlelist/battlelistfilter.cpp:122 msgid "Highlighted only" msgstr "Nur hervorgehobene" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "Rang Limit" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Beschreibung:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Gestartet" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Voll" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "Öffnen" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Spieler:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Alle" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Karte:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Nur bereits geladene Karten" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "Max. Spieler:" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 #, fuzzy msgid "Game:" msgstr "Spiel" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Nur bereits geladene Karten" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Zuschauer:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "%d" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Spieler:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 msgid " Filter " msgstr " Filter " #: src/battlelist/battlelisttab.cpp:144 msgid "Activated" msgstr "Aktiviert" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 msgid " Battle infos " msgstr " Schlachten Infos " #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "0 Schlachten angezeigt" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "Host eröffnen" #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "Teilnehmen" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "%d Schlachten angezeigt" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" "Du kannst kein Spiel eröffnen, solange du nicht mit einem Lobby-Server " "verbunden bist" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "Offline" #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "" "Da deine Version des Spiels inkomatibel ist, kannst du kein Spiel eröffnen" #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Spring Fehler" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "Spiel läuft bereits" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" "Du bist bereits in einem Spiel\n" "\n" "Möchtest du das aktuelle Spiel verlassen um ein neues zu starten?" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" "Aufgrund inkompatibler Spring Versionen kannst du keinen Schlachten " "beitreten." #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 #, fuzzy msgid "Matchmaker detected" msgstr "Genaue Übereinstimmung" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "Spiel läuft bereits" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "Du bist bereits in einer Schlacht.\n" "\n" "Möchtest du die aktive verlassen und dieser beitreten?" #: src/battlelist/battlelisttab.cpp:430 #, fuzzy msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "Soll ich versuchen es für dich zu laden?" #: src/battlelist/battlelisttab.cpp:433 #, fuzzy msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" "Du musst die Modifikation herunterladen, bevor du das Spiel betreten " "kannst.\n" "\n" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "Karte nicht verfügbar" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" "Du musst die Karte herunterladen, bevor du in der Lage bist dieses Spiel zu " "spielen.\n" "\n" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "Karte nicht verfügbar" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "Passwort der Schlacht" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 msgid "Edit auto-joined channels" msgstr "Bearbeite Kanäle mit Auto-Beitreten" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" "Füge einen Kanal pro Zeile wie folgt hinzu:\n" "kanalname passwort\n" "(Passwörter für existierende Kanäle werden nicht angezeigt)" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "Doppelklick um beizutreten" #: src/channel/channelchooser.cpp:30 msgid "Find channel:" msgstr "Finde Kanal:" #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 msgid "Choose channels to join" msgstr "Wähle Kanäle zum Beitreten" #: src/channel/channellistctrl.cpp:30 msgid "# users" msgstr "# users" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "Zeige %d von %d Kanälen" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "### Sitzung geschlossen um [" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" "Konnte Ordner nicht erstellen. \n" "Überprüfe ob die Zugriffsrechte korrekt sind (Schreibschutz?)\n" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "Starte SpringLobby neu um die Log Funktion zu aktivieren." #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "Log Warnung" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" "Konnte Nachricht nicht in den Log schreiben.\n" "Protokollierung wird in dem Raum deaktiviert " #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "Betrete den Raum um Protokollierung zu reaktivieren" #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 #, fuzzy msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "Konnte Log Datei nicht öffnen.\n" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "channel_" #: src/chatpanel.cpp:69 msgid "#" msgstr "#" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, c-format msgid "%d users" msgstr "%d Benutzer" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "Rechtsklick für Optionen (wie Autojoin)" #: src/chatpanel.cpp:296 msgid "Send" msgstr "Senden" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr " !! Befehl: \"" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "\" Parameter: \"" #: src/chatpanel.cpp:717 msgid "channel" msgstr "Raum" #: src/chatpanel.cpp:718 msgid "battle" msgstr "Kampf" #: src/chatpanel.cpp:719 msgid "server" msgstr "Server" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr " hat die " #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr " verliess die " #: src/chatpanel.cpp:814 msgid " ** Channel topic:" msgstr " ** Kanal-Thema:" #: src/chatpanel.cpp:821 msgid " ** Set by " msgstr " **Eingerichtet von " #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "Chat geschlossen" #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "Bist du sicher das du %d Zeilen einfügen willst?" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr " Du hast SpringLobby v" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr " Du bist nicht im Kanal oder der Kanal existiert nicht" #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" " Fehler: Der Befehl (%s) existiert nicht, benutze '/help' um alle " "verfügbaren Befehle zu sehen." #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" " Du bist nicht in einer Schlacht oder die Schlacht existiert nicht, benutze /" "help für eine Liste der verfügbaren Kommandos." #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr " Benutzer ist offline" #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr " Gesendet: \"" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "\"" #: src/chatpanel.cpp:1090 #, fuzzy msgid " ** User is now offline." msgstr " Benutzer ist offline" #: src/chatpanel.cpp:1097 #, fuzzy msgid " ** User just got online." msgstr " Benutzer ist offline" #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 #, fuzzy msgid " ** Joined Battle." msgstr " öffnete eine Schlacht " #: src/chatpanelmenu.cpp:34 #, fuzzy msgid "Disable text appending" msgstr "Deaktiviere Experten-Modus Warnung" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "Kopieren" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "Kopiere Linkadresse" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "Reset" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "Automatisch diesen Channel betreten" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "Verlassen" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "Zeige Betreten/Verlassen Meldungen" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "Zeige Stumm-Liste" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "Raum Info" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "Setze Thema..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "Raum Nachricht..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "Sperren..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "Entsperren" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "Registrieren..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "Entregistrieren" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "An" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "Aus" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "Ist an?" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "Spamschutz" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "ChanServ" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "Trennen" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "Neu Verbinden" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "Entfernen..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "Passwort ändern..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "Setze Zugriff..." #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "Konten" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "Broadcast..." #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "Admin" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "Öffne Chat" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "Betrete gleiche Schlacht" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "Spielinterne Zeit" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "IP Adressen und Smurfs anzeigen" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "Muten..." #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "Für 5 Minuten muten" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "Für 10 Minuten muten" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "Für 30 Minuten muten" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "Für 2 Stunden muten" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "Für einen Tag muten" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "Entmuten" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "Mute" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "Kicken..." #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "Bannen..." #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "Entbannen..." #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "Klingeln" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "Schlagen!" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "OP" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "EntOPen" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "ChanServ Fehler" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "ChanServ ist nicht in diesem Raum." #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "Wie soll das neue Thema lauten?" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "Nachricht:" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "Raum sperren..." #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "Wie soll das neue Passwort sein?" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "Raum entsprerren" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "Bist du sicher, dass du diesen Raum entsperren willst?" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "ChanServ existiert nicht auf diesem Server." #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "Raum registrieren" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "Wer soll der eingetragene Besitzer für diesen Raum sein?" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "Raum deregistrieren" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "Bist du dir sicher, dass du diesen Raum deregistrieren willst?" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "Benutzer entfernen" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "Welchen Benutzer willst du entfernen?" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "Benutzer entfernen" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "Bist du dir sicher, dass du diesen Benutzer entfernen willst? " #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "Ändere Benutzerpasswort" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "Wessen Benutzerpasswort willst du ändern?" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "Wie soll das neue Passwort lauten?" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "Nicht Implementiert" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "Broadcast Nachricht" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "Nachricht die gebroadcasted werden soll:" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "Benutzer muten" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "Für wieviele Minuten soll der Benutzer gemutet werden?" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "Benutzer rauswerfen" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "Grund:" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "Benutzer kicken" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "Benutzer stummschalten" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "Dauer:" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "Namen eingeben" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" "Bitte gebe den Namen für die neue Gruppe ein.\n" "Nach dem Klick auf OK wirst du gebeten die Einstellungen anzupassen." #: src/chatpanelmenu.cpp:774 msgid "couldn't add user" msgstr "Kann Benutzer nicht hinzufügen" #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "Verbinde zu Lobbyserver" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "Server" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" "Server zu dem verbunden wird. Du kannst zu jedem beliebigen Server " "verbinden, indem du das serveradresse:port Format benutzt." #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "Spitzname" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "Kennwort" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "Kennwort merken" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "Beim nächsten Start automatisch verbinden" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" "Merke die Verbindungsdaten und verbinde beim nächsten Start der Lobby " "automatisch." #: src/connectwindow.cpp:85 #, fuzzy msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" "Hinweis: Falls du keinen Benutzernamen hast,\n" " kannst du einen kostenlos unter der \"Registrieren\"\n" " Registerkarte registrieren." #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "Ok" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Abbrechen" #: src/connectwindow.cpp:91 msgid "Login" msgstr "Anmelden" #: src/connectwindow.cpp:92 msgid "Register" msgstr "Registrieren" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "Nick" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "Ungültiger Port." #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "Ungültiger Port" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" "Portnummer ausserhalb des gültigen Wertebreichs.\n" "\n" "Sie muss eine ganze Zahl zwischen 1 und 65536 sein" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "Ungültiger Host/Port." #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "Ungültiger Host" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" "Der eingegebene Benutzername enthält ungültige Zeichen wie )? &%.\n" " Bitte noch einmal versuchen" #: src/connectwindow.cpp:294 msgid "Invalid nickname" msgstr "Ungültiger Benutzername" #: src/connectwindow.cpp:301 msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" "Registrierung scheiterte aus folgendem Grund:\n" "Passwort / Bestätigung stimmt nicht überein (oder kein Passwort)" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "Registrierung fehlgeschlagen." #: src/countrycodes.cpp:11 msgid " Andorra" msgstr " Andorra" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "Vereinigte Arabische Emirate" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "Afghanistan" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "Antigua und Barbuda" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "Anguilla" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "Albanien" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "Armenien" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "Niederländische Antillen" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "Angola" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "Antarktis" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "Argentinien" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "Amerikanisch-Samoa" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "Österreich" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "Australien" #: src/countrycodes.cpp:25 #, fuzzy msgid "Åland Islands" msgstr "Cayman Inseln" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "Aruba" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "Aserbaidschan" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "Bosnien und Herzegowina" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "Barbados" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "Bangladesch" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "Belgien" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "Burkina Faso" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "Bulgarien" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "Bahrain" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "Burundi" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "Benin" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "Bermuda" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "Brunei Darussalam" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "Bolivien" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "Brasilien" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "Bahamas" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "Bhutan" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "Bouvetinsel" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "Botsuana" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "Weißrussland" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "Belize" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "Kanada" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "Kokosinseln" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "Zentralafrikanische Republik" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "Kongo" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "Schweiz" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "Elfenbeinküste" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "Cookinseln" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "Chile" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "Kamerun" #: src/countrycodes.cpp:56 msgid "China" msgstr "China" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "Kolumbien" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "Costa Rica" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "Kuba" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "Kap Verde" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "Weihnachtsinsel (Australien)" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "Republik Zypern" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "Tschechien" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "Deutschland" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "Dschibuti" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "Dänemark" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "Dominica" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "Dominikanische Republik" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "Algerien" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "Ecuador" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "Estland" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "Ägypten" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "Westsahara" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "Eritrea" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "Spanien" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "Äthiopien" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "Finnland" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "Fidschi" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "Falklandinseln (Malvinas)" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "Mikronesien" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "Färöer Inseln" #: src/countrycodes.cpp:82 msgid "France" msgstr "Frankreich" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "Frankreich, Metropolitan" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "Gabon" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "Grenada" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "Georgien" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "Französisch-Guinea" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "Ghana" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "Gibraltar" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "Grönland" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "Gambia" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "Guinea" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "Gouadeloupe" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "Äquatorial-Guinea" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "Griechenland" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "S. Georgia und S. Sandwich Inslen" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "Guatemala" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "Guam" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "Guinea-Bissau" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "Guyana" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "Hong-Kong" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "Heard- und McDonald-Inseln" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "Honduras" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "Kroatien" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "Haiti" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "Ungarn" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "Indonesien" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "Irland" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "Israel" #: src/countrycodes.cpp:110 msgid "India" msgstr "Indien" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "Britisches Territorium im Indischen Ozean" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "Irak" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "Iran" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "Island" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "Italien" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "Jamaika" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "Jordanien" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "Japan" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "Kenia" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "Kyrgyzstan" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "Kambodscha" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "Kiribati" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "Komoren" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "St. Kitts und Nevis" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "Nordkorea" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "Südkorea" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "Kuwait" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "Cayman Inseln" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "Kasachstan" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "Laos" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "Libanon" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "St. Lucia" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "Liechtenstein" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "Sri Lanka" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "Liberia" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "Lesotho" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "Litauen" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "Luxemburg" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "Litauen" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "Libyen" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "Marokko" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "Monaco" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "Moldawien" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "Montenegro" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "Madagaskar" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "Marshall Inseln" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "Mazedonien" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "Mali" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "Myanmar" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "Mongolei" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "Macao" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "Nördliche Mariana-Inseln" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "Martinique" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "Mauretanien" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "Montserrat" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "Malta" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "Mauritius" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "Malediven" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "Malawi" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "Mexiko" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "Malaysia" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "Mosambik" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "Namibia" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "Neu Kaledonien" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "Niger" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "Norfolkinsel" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "Nigeria" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "Nikaragua" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "Holland" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "Norwegen" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "Nepal" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "Nauruanisch" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "Neutrale Zone (Saudi Arabien/Irak)" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "Niue" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "Neuseeland" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "Oman" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "Panama" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "Peru" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "Französisch Polinesien" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "Papua-Neuguinea" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "Philippinen" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "Pakistan" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "Polen" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "St. Pierre und Miquelon" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "Pitcairninsel" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "Puerto Rico" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "Portugal" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "Palau" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "Paraguay" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "Quatar" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "Réunion" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "Rumänien" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "Serbien" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "Russische Föderation" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "Ruanda" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "Saudi-Arabien" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "Salomoninseln" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "Seychellen" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "Sudan" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "Schweden" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "Singapur" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "St. Helena" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "Slowenien" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "Svalbard- und Jan Mayen-Inseln" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "Slowakei (Slowakische Republik)" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "Sierra Leone" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "San Marino" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "Senegal" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "Somalia" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "Surinam" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "Sao Tomé und Príncipe" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "Soejetunion (UdSSR)" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "El Salvador" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "Syrien" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "Swaziland" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "Turks- und Caicosinseln" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "Tschad" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "Südliche Französische Territorien" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "Togo" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "Thailand" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "Tadschikistan" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "Tokelau" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "Turkmenistan" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "Tunesien" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "Tonga" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "Ost-Timor" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "Türkei" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "Trinidad und Tobago" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "Tuvalu" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "Taiwan" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "Tansania" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "Ukraine" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "Uganda" #: src/countrycodes.cpp:234 #, fuzzy msgid "United Kingdom" msgstr "Vereinigtes Königreich (Großbritannien)" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "Kleinere, auswärtige US-Inseln" #: src/countrycodes.cpp:236 msgid "United States" msgstr "Vereinigte Staaten" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "Uruguay" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "Usbekistan" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "Vatikan" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "Saint Vincent und die Grenadines Inseln" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "Venezuela" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "Jungfraueninseln (GB)" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "Jungfraueninseln (US)" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "Vietnam" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "Vanuatu" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "Wallis- und Futuna-Inseln" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "Samoa" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "Jemen" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "Mayotte" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "Jugoslawien" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "Südafrika" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "Sambia" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "Zaire" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "Simbabwe" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "(Vollen Ländernamen nicht gefunden)" #: src/crashreport.cpp:168 msgid "System informations" msgstr "System Informationen" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "Ausführliche Anwendungs Log" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "Zuletzt erstelltes Spring Startskript" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "Keine Karten gefunden" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "in Warteschlange" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "Herunterladen" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "% complete" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 msgid "Name" msgstr "Name" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "Größe" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "Typ" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Karte" #: src/downloader/filelister/filelistctrl.cpp:174 #, fuzzy msgid "game" msgstr "Im Spiel" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "Unbekannt" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "Suche und lade Dateien" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "Angezeigte Dateien" #: src/downloader/filelister/filelistdialog.cpp:55 msgid "Download selected" msgstr "Downloade Ausgewählte" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "%u Dateien angezeigt" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Namen filtern" #: src/downloader/filelister/filelistfilter.cpp:69 #, fuzzy msgid "Filetype:" msgstr "Datei" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" "\n" "Erfolgreich gespeichert in:\n" #: src/downloader/httpdownloader.cpp:78 msgid "" "\n" "successfully unzipped in:\n" msgstr "" "\n" "erfolgreich entpackt in:\n" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" "\n" " entpacken scheiterte, bitte manuell korrigieren" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "Konnte nicht speichern\n" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" "\n" "nach:\n" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" "\n" "Fehlernummer: " #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "Download komplett." #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "Flutwarnung" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "Bot hinzufügen" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Spitzname:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "KI:" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "Wähle die KI-Programmbibliothek für diesen Bot" #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "Eigenschaft" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 msgid "value" msgstr "Wert" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "Bot hinzufügen" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "Keine KI-Bots gefunden" #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "Keine Bot-Libs gefunden" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "Teams automatisch aufteilen" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "Methode" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "Ränge gleich verteilen" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Zufällig" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "Clans" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Keine" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "Gerecht" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "Immer" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" "Alle Mitglieder eines Clans (z.B. '[smurfzor]Alice' und '[smurfzor]Bob') " "zusammen in die gleiche Allianz einteilen. \n" "Nein: Nichts Besonderes für Clans.\n" "Gerecht: Alle Mitglieder eines Clans werden in eine Allianz eingeteil, außer " "es wird ungerecht.\n" "Immer: Immer alle Clanmitglieder in Allianzen einteilen, auch wenn es " "ungerecht wird." #: src/hosting/autobalancedialog.cpp:53 msgid "Number of allies" msgstr "Anzahl der Allianzen" #: src/hosting/autobalancedialog.cpp:56 msgid "Auto select" msgstr "Automatisch wählen" #: src/hosting/battlemaptab.cpp:69 msgid "Select" msgstr "Auswählen" #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "Option" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "Wert" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "Windgeschwindigkeit" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "Gezeitenstärke" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "Schwerkraft" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "Extraktorradius" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "Max Metall" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "Fixiert" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "Im Spiel wählbar" #: src/hosting/battlemaptab.cpp:103 msgid "Chose before game" msgstr "Wähle vor dem Spiel" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "Startpositionen" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "Einheitenbeschränkungen" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "Erlaubte Einheiten" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "Einheiten in dieser Liste werden im Spiel verfügbar sein." #: src/hosting/battleoptionstab.cpp:77 msgid "Disable selected units." msgstr "Ausgewählte Einheiten deaktivieren." #: src/hosting/battleoptionstab.cpp:81 msgid "Re-enable selected units." msgstr "Re-aktivieren der ausgewählten Einheiten" #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "<<" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "Erlaube alle Einheiten" #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "Verbotene Einheiten" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "Einheiten in dieser Liste werden im Spiel nicht verfügbar sein." #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "Wie viele Einheiten dieses Typs möchtest du erlauben?" #: src/hosting/battleoptionstab.cpp:242 msgid "Unit restriction" msgstr "Einheitenbeschränkung" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "Team" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "Bündnis" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "Rohstoff-Bonus" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "Seite" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "Farbe setzen" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "Rohstoff-Bonus setzen" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "Zuschauer" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "Rauswerfen" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "Bitte einen Wert zwischen 0 und 100 eingeben" #: src/hosting/battleroomlistctrl.cpp:750 msgid "AI (bot)\n" msgstr "KI (Bot)\n" #: src/hosting/battleroomlistctrl.cpp:754 msgid "Human\n" msgstr "Mensch\n" #: src/hosting/battleroomlistctrl.cpp:759 msgid "Spectator\n" msgstr "Beobachter\n" #: src/hosting/battleroomlistctrl.cpp:763 msgid "Player\n" msgstr "Spieler\n" #: src/hosting/battleroomlistctrl.cpp:768 msgid "Host\n" msgstr "Hauptcomputer\n" #: src/hosting/battleroomlistctrl.cpp:772 msgid "Client\n" msgstr "Client\n" #: src/hosting/battleroomlistctrl.cpp:777 msgid "Ready\n" msgstr "Bereit\n" #: src/hosting/battleroomlistctrl.cpp:781 msgid "Not ready\n" msgstr "Nicht bereit\n" #: src/hosting/battleroomlistctrl.cpp:786 msgid "In sync" msgstr "synchron" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "nicht synchron" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "" "Spieler mit der gleichen Team-Nummer teilen die Kontrolle über ihre " "Einheiten." #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" "Spieler mit der gleichen Bündnisnummer arbeiten zusammen um den Sieg zu " "erreichen." #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "" "Suche dir eine Farbe aus um deine Einheiten im Spiel identifizieren zu können" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "Wähle deine Fraktion" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "Beobachte das Spiel anstatt aktiv daran teil zu nehmen." #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "Automatisch wählen" #: src/hosting/battleroomtab.cpp:144 #, fuzzy msgid "automatically unspec when there's a free slot" msgstr "aumatisches Prüfen auf Aktualisierungen" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "Bereit" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "Klicke hier wenn du zufireden bist mit den Einstellungen" #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "Farbe" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" "Eine Vorschau der Map. Du kannst die Startpositionen oder die Startboxen " "sehen." #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Host eröffnen" #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Neue Schlacht eröffnen" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "Verlasse das Spiel und gehe zurück zur Spiele-Liste." #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "Start" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "Starte die Schlacht" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "Spielerverwaltung" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "Verschiedene Funktionen, um Team-Spiele einfacher einzustellen" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "Bot hinzufügen" #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "Füge einen Computer-Spieler zum Spiel hinzu." #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "Automatisches Sperren beim Start" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" "Automatisches Sperren des Kampfes wenn das Spiel gestartet wird und " "entsperren wenn es beendet wurde." #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "Verhindert dass weitere Spieler dem Spiel beitreten" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "Autohost" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" "Toggle autohost mode. Dies erlaubt Spieler deine Schlacht mit Kommandos wie " "'!balance' und '!start' zu kontrollieren." #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Beschreibung" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 #, fuzzy msgid "AutoSpect" msgstr "Automatisch wählen" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Start" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "Automatically start the battle when all players are ready and synced" msgstr "" "Automatisches Sperren des Kampfes wenn das Spiel gestartet wird und " "entsperren wenn es beendet wurde." #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "Sperre Gleichgewicht" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" "Wenn aktiviert, verhindert, dass irgendjemand, außer dem Host, sein Team " "oder Bündnis ändert" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 #, fuzzy msgid "Ring unsynced" msgstr "synchron" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 #, fuzzy msgid "Ring ..." msgstr "Klingeln" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "Nicht Bereit" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 #, fuzzy msgid "Force spectate ..." msgstr "Start erzwingen?" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "Ausbalancieren der Allianzen" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "Autmatisches Ausbalancieren der Spieler in zwei oder mehr Allianzen" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "Farben korrigieren" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "Gib jedem Spieler eine andere Farbe" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "Teams ausbalancieren" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" "Automatisches Ausbalancieren der Spieler in Kontrollteams, standardmäßig " "teilt keiner die Kontrolle" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "Voreinstellungen verwalten" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "Lade Schlachtvoreinstellungen" #: src/hosting/battleroomtab.cpp:255 msgid "Save" msgstr "Speichern" #: src/hosting/battleroomtab.cpp:256 msgid "Save a set of options." msgstr "Speichere eine Reihe von Optionen" #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 msgid "Delete" msgstr "Löschen" #: src/hosting/battleroomtab.cpp:261 msgid "Delete a set of options." msgstr "Lösche eine Reihe von Optionen." #: src/hosting/battleroomtab.cpp:265 msgid "Set default" msgstr "Als Standard" #: src/hosting/battleroomtab.cpp:266 #, fuzzy msgid "Use the current set of options as game's default." msgstr "Nutze die aktuelle Reihe von Optionen als Standard für Mods." #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "Aktiviere ein Element, um es direkt zu ändern" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "Boxen" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "Auswählen" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "Weiter" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "Ende" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "Abstammung" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "Die Map ist nicht verfügbar." #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" "Einige Spieler sind noch nicht bereit\n" "Willst du den Start erzwingen?" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "Nicht Bereit" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "Im Spiel wählen" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Beschreibung" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "Ping Timeout!" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "Voreinstellungsnamen eingeben" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" "Einen Namen eingeben, um die aktuellen Optionen zu speichern\n" "Falls eine Voreinstellung mit dem gleichen Namen schon existiert, wird sie " "überschrieben" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "Kann keine Optionen ohne Namen speichern." #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "Fehler" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "Wähle eine existierende Option aus der Liste" #: src/hosting/battleroomtab.cpp:987 msgid "Delete preset" msgstr "Voreinstellung löschen" #: src/hosting/battleroomtab.cpp:996 #, fuzzy msgid "Set game default preset" msgstr "Setze Standardvoreinstellungen für Mods" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "Neue Schlacht eröffnen" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "" "Eine kurze Beschreibung des Spiels, welche in der Liste der Schlachten " "auftauchen wird." #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Beschreibung" #: src/hosting/hostbattledialog.cpp:91 #, fuzzy msgid "Automatically write the battle description when a user joins." msgstr "" "Automatisches Sperren des Kampfes wenn das Spiel gestartet wird und " "entsperren wenn es beendet wurde." #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "Wähle den Mod aus mit dem du spielen willst." #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "kennwortgeschützt" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "" "Welches Passwort benötigt wird um der Schlacht beizutreten. Leerlassen für " "kein Passwort" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "Port" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "UDP Port auf dem das Spiel laufen wird. Standart ist 8452." #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" "Hoste und kontrollieren Spiel auf einem Remote-Server, hilft falls du " "Schwierigkeiten hast zu hosten" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 #, fuzzy msgid "Randomly picks an available one" msgstr "keine Optionen verfügbar" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "Anzahl der Spieler" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "Maximale Anzahl an Spielern die in dieser Schlacht erlaubt sind." #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "Hole Punching" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "NAT traversal" #: src/hosting/hostbattledialog.cpp:185 msgid "NAT traversal to use." msgstr "NAT traversal benutzen." #: src/hosting/hostbattledialog.cpp:190 #, fuzzy msgid "Rank requirement" msgstr "Neustart erforderlich" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 msgid "Select the type of rank enforcement." msgstr "" #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "Starte Host für eine Schlacht." #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 #, fuzzy msgid "You have to select a game first." msgstr "Sie müssen erst einen Mod auswählen." #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "Kein Mod ausgewählt." #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" "Your using wxWidgets prior to version 2.8,\n" " Port-testen wird nicht unterstützt.\n" " Hosten kann nicht funktionieren." #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" "Der Port %d vom Server nur zu Testzwecken verwendet ist nicht erreichbar. \n" "Hosten wird vielleicht mit diesen Einstellungen nicht funktionieren." #: src/hosting/hostbattledialog.cpp:427 #, fuzzy, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "Schlacht nicht gestartet, weil der gewählte Port (%d) unfähig ist " "einkommende Pakete zu empfangen\n" " überprüfe deine Router & Firewall Einstellungen oder ändere den Port.\n" "\n" "Falls gar nichts geht, aktiviere die \"Hole Punching NAT Traversal\"\n" "Option in den Hosteinstellungen." #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "Schlacht nicht gestartet, weil der gewählte Port (%d) unfähig ist " "einkommende Pakete zu empfangen\n" " überprüfe deine Router & Firewall Einstellungen oder ändere den Port.\n" "\n" "Falls gar nichts geht, aktiviere die \"Hole Punching NAT Traversal\"\n" "Option in den Hosteinstellungen." #: src/hosting/hostbattledialog.cpp:459 #, fuzzy msgid "Battle not started beacuse the game you selected could not be found. " msgstr "" "Die Schlacht wurde nicht gestartet, weil der gewählte Mod nicht gefunden " "wurde. " #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "Fehler beim Starten des Spiels" #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" "Es wurden keine Karten in ihrer Spring Installation gefunden. Die kann " "passieren, wenn ihre Spring einstellungen falsch gesetzt wurden." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "Keine Karten gefunden" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "Schlachtraum" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "Optionen" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 msgid "Unit Restrictions" msgstr "Einheitenbeschränkungen" #: src/hosting/mmoptionwindows.cpp:36 msgid "Change option" msgstr "Ändere Position" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "Spiel ist offen." #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "Spiel ist passwortgeschützt." #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "Spiel ist voll." #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "Spiel ist voll und passwortgeschützt." #: src/iconimagelist.cpp:322 msgid "Game is closed." msgstr "Spiel ist geschlossen." #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "Spiel ist geschlossen und passwortgeschützt." #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "Spiel ist geschlossen und voll." #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "Spiel ist geschlossen, voll und passwortgeschützt." #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "Das Spiel ist im Gange." #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "Das Spiel ist im Gange und passwortgeschützt." #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "Das Spiel ist im Gange und voll." #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "Das Spiel ist im Gange, voll und passwortgeschützt." #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "Das Spiel ist im Gange und geschlossen." #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "Das Spiel ist im Gange, geschlossen und passwortgeschützt." #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "Das Spiel ist im Gange, geschlossen und voll." #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "Das Spiel ist im Gange, geschlossen, voll und passwortgeschützt." #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 #, fuzzy msgid "Newbies guide" msgstr "Neuling" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 #, fuzzy msgid "Joining a battle:\n" msgstr "Betrete gleiche Schlacht" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "Neue Schlacht eröffnen" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Spring-Version" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 #, fuzzy msgid "Singleplayer gamee" msgstr "Einzelspieler" #: src/introguide.cpp:110 #, fuzzy msgid "Multiplayer gamee" msgstr "Mehrspieler" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "Alle Dateien (*)|*" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "App Bundles (*.app)|*.app|Any File (*.*)|*.*" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 msgid "Disconnected from server, chat closed." msgstr "Verbindung zum Server unterbrochen, Chat geschlossen." #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "Aktive Übertragungen: " #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "Gesamt eingehend: " #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "Breche Download ab" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "Lua Widget Downloader" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "&Verbinden..." #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "&Trennen" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 msgid "&Save options" msgstr "&Speichere Optionen" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "&Beenden" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "&Autobeitreten von Kanälen..." #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "Spring Einstellungen" #: src/mainwindow.cpp:156 msgid "&Save layout" msgstr "&Speichere Layout" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "&Lade Layout" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "&Setze Layout zurück" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "&Kanal beitreten..." #: src/mainwindow.cpp:164 msgid "Channel &list" msgstr "Channel&liste" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "Öffne privaten &Chat..." #: src/mainwindow.cpp:166 #, fuzzy msgid "Change &username" msgstr "&Wechsel Sprache" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "&Zeige Screenshots" #: src/mainwindow.cpp:169 #, fuzzy msgid "&Reload maps/games" msgstr "&Maps/Mods neu laden" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "Auf neue Version prüfen" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "&Über uns" #: src/mainwindow.cpp:178 #, fuzzy msgid "&System Info" msgstr "System Informationen" #: src/mainwindow.cpp:179 msgid "&Change language" msgstr "&Wechsel Sprache" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "&Fehler melden.." #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "&Dokumentation" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "Server" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "&Bearbeiten" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "&Werkzeuge" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "&Hilfe" #: src/mainwindow.cpp:500 #, fuzzy msgid "You need to be connected to a server to view the channel list" msgstr "" "Du musst mit dem Server verbunden sein, um die Liste aller Kanäle zu sehen" #: src/mainwindow.cpp:500 msgid "Not connected" msgstr "Nicht verbunden" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "Channel beitreten..." #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "Name des Channels dem beigetreten wird" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "Öffne privaten Chat" #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "Name des Benutzers" #: src/mainwindow.cpp:540 #, fuzzy, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" "Die SpringLobby ist ein Cross-Plattform Lobby-Client für die RTS-Spring " "Spiele-Engine" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "Es wurden keine Screenshots in deinem Spring Verzeichnis gefunden." #: src/mainwindow.cpp:602 msgid "No files found" msgstr "Keine Dateien gefunden" #: src/mainwindow.cpp:656 #, fuzzy, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" "Du musst SpringLobby neustarten, damit die Änderung der Sprache wirksam wird." #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "Neustart erforderlich" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "Andordnungsverwalter" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "Gibt ein Profilname an" #: src/mainwindow.cpp:692 #, fuzzy msgid "This profile is write protected, please choose another name" msgstr "Diese Schlacht ist mit passwortgeschützt. Gib das Passwort ein." #: src/mainwindow.cpp:703 #, fuzzy msgid "Which profile do you want to load?" msgstr "Welches Profil soll geladen werden?" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "Umbenennen.." #: src/mainwindow.cpp:767 #, fuzzy msgid "Enter new nickname" msgstr "Namen eingeben" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "Chat" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "Schlachtenliste" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "Einzelspieler" #: src/mainwindow.h:203 msgid "Replays" msgstr "Aufzeichnungen der Spiele" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 msgid "Downloads" msgstr "Downloads" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "Metall: %.1f%%" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "Aktualisieren" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "Herunterladen" #: src/mapctrl.cpp:897 msgid "side:" msgstr "Seite:" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "Bündnis: %d" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "Bonus: %d%%" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "Karte auswählen (Klicken und ziehen um zu blättern)" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "Vertikaler Sortierschlüssel" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "Horizontaler Sortierschlüssel" #: src/mapselectdialog.cpp:83 msgid "Show" msgstr "Anzeigen" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "Alle Karten" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "Zeige alle verfügbaren Karten" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "Beliebte Karten" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" "Zeige nur die Karten, die momentan auf dem Server gespielt werden. Du musst " "online sein um dies zu nutzen." #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "Kürzlich gespielte Karten" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" "Zeige alle Karten, die du kürzlich gespielt hast (basierend auf deinen " "Wiederholungen)." #: src/mapselectdialog.cpp:95 msgid "Filter" msgstr "Filter" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" "Zeige nur Karten, die diesen Text im Namen oder in der Beschriftung " "enthalten." #: src/mapselectdialog.cpp:100 msgid "Map details" msgstr "Kartendetails" #: src/mapselectdialog.cpp:163 msgid "Start positions" msgstr "Startpunkte" #: src/mapselectdialog.cpp:261 msgid "Minimum wind" msgstr "Minimaler Wind" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "Maximaler Wind" #: src/mapselectdialog.cpp:263 msgid "Average wind" msgstr "Durschnittlicher Wind" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "Größe (Kartenbereich)" #: src/mapselectdialog.cpp:265 msgid "Aspect ratio" msgstr "Seitenverhältnis" #: src/mapselectdialog.cpp:266 msgid "Number of start positions" msgstr "Anzahl der Startpunkte" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "Typ der Startposition" #: src/mmoptionswrapper.cpp:122 #, fuzzy msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" "Wie Spieler auf der Karte platziert werden\n" "0: feste Position\n" "1: zufällige Position\n" "2: Position nach Spielstart auswählen\n" "3: In der Lobby vor dem Spielstart auswählen" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "Im Spiel wählbar" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "Wähle vor dem Spiel" #: src/mmoptionswrapper.cpp:132 msgid "List of restricted units" msgstr "Liste der beschränkten Einheiten" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "Kartenname" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "s" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "l" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "r" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "Ausführbare Dateien (*.exe)|*.exe|Alle Dateien (*.*)|*.*" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "Schrift und Farben" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "Benutze Systemfarben" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "Normal" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "Hintergrund" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "Aktion" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "Hervorheben" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "Betreten/Verlassen" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "Meine Nachrichten" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "Client" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "Zeitstempel" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "Benachrichtigung" #: src/options/chatoptionstab.cpp:258 msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" "[19:35] ** Server ** Verbunden mit Server.\n" "[22:30] hi an alle.\n" "[22:30] ** Kerl2 betritt den Kanal.\n" "[22:30] * Kerl2 denkt, dass seine Farben gut aussehen\n" "[22:45] Kerl2: was?\n" "[22:46] Aber es wäre besser, sie ein weiteres Mal zu optimieren...\n" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "Schrift:" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "Standart" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "Auswählen..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "Verhalten" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "Aktivieren IRC Farben in Chat Nachrichten" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "Spiele Mitteilungston" #: src/options/chatoptionstab.cpp:300 #, fuzzy msgid "Copy server messages in current channel" msgstr " \"/part\" - Verlässt den Kanal" #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "Chat Logs" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "Speichere Chat Logs" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "Hervorzuhebende Wörter" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "Wörter die im Chat hervorgehoben werden sollen:" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "gib eine Liste mit ; als Trennzeichen ein" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "zusätzlich Ton abspielen/ Titelzeile blinken " #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "Beim Spielstart einstellen" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "Pausiere alle Torrents" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "Geschwindigkeiten drosseln:" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "Upload (KB/s)" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "herunterladen (KB/s)" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "Nummern" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "Maximale Upload Geschwindigkeit in KB/sek(-1 für unendlich)" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "Maximale Download Geschwindigkeit in KB/sek(-1 für unendlich)" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "Port, der für die Torrentverbindung genutzt wird" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "Maximale Anzahl der gleichzeitigen Verbindungen" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 msgid "Remove" msgstr "Entfernen" #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "Entferne eine existierende Gruppe" #: src/options/groupoptionspanel.cpp:61 msgid "Rename.." msgstr "Umbenennen.." #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "Benenne eine existierende Gruppe um" #: src/options/groupoptionspanel.cpp:70 msgid "Add New.." msgstr "Neuen hinzufügen.." #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "Füge eine neue Gruppe hinzu" #: src/options/groupoptionspanel.cpp:84 msgid "Group Actions" msgstr "Gruppenaktionen" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "Melde An-/Abmeldungen" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "Melde, wenn Benutzer dieser Gruppe on-/offline gehen" #: src/options/groupoptionspanel.cpp:95 msgid "Ignore Chat" msgstr "Ignoriere Geschnacke" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" "Ignoriere alles, was im Kanal von irgendeinem Benutzer dieser Gruppe gesagt " "wird" #: src/options/groupoptionspanel.cpp:101 msgid "Notify Hosted Battles" msgstr "Benachrichtigung bei geöffneten Schlachten" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "Melde, wenn Benutzer dieser Grupper Schlachten eröffnen" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "Ignoriere Privatnachrichten (PM)" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" "Ignoriere alles, was im privaten Dialog von irgendeinem Benutzer dieser " "Gruppe gesagt wird" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "Melde Statusveränderungen" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "Melde, wenn sich der Status eines Benutzers dieser Gruppe ändert" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "Autokick" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" "Werfe jeden Benutzer dieser Gruppe automatisch raus, wenn er deiner " "eröffneten Schlacht beitritt" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "Hebe Schlachten und Namen von Benutzern dieser Gruppe hervor" #: src/options/groupoptionspanel.cpp:134 msgid "Highlight Color" msgstr "Markierungsfarbe" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "Wähle Farbe zum Hervorheben" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "Benutzer in dieser Gruppe" #: src/options/groupoptionspanel.cpp:163 msgid "Add.." msgstr "Hinzufügen.." #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "Füge Benutzer zur Gruppe hinzu" #: src/options/groupoptionspanel.cpp:170 msgid "Remove users from group" msgstr "Entferne Benutzer aus der Gruppe" #: src/options/groupoptionspanel.cpp:264 msgid "Name of new group:" msgstr "Name der neuen Gruppe:" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "Neue Gruppe hinzufügen" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "Web Browser" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "Standard Brwoser" #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "Nutzte deinen systembezogenen Browservorzug" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "Angeben:" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "Gib den Web-Browser an, den du verwenden möchtest" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "Durchsuchen" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "Verwende ein Datei-Dialogfeld, um den Browser zu finden" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 #, fuzzy msgid "Use a file dialog to find the editor binary" msgstr "Verwende ein Datei-Dialogfeld, um den Browser zu finden" #: src/options/lobbyoptionstab.cpp:91 msgid "Autoconnect" msgstr "Automatisches Verbinden" #: src/options/lobbyoptionstab.cpp:94 #, fuzzy, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" "Wenn ausgewählt, wird SpringLobby automatisch die letzten benutzten Server " "protokollieren" #: src/options/lobbyoptionstab.cpp:96 msgid "Autoconnect on lobby start" msgstr "Automatisches Verbinden beim Lobbystart" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "Sende Statistiken" #: src/options/lobbyoptionstab.cpp:104 #, fuzzy, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" "Standardmäßig wird SpringLobby einige Statistiken (Betriebssystem, SL-" "Version) zum Server senden,\n" "um dir einerseits bei Problemen einfacher zu helfen und dich andereseits bei " "kritischen Updates zu infromieren.\n" "Abwählen, um zu dies deaktiveren." #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "sende Statistiken" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "Automatisches Aktualisieren" #: src/options/lobbyoptionstab.cpp:120 #, fuzzy, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" "SpringLobby kann beim Starten prüfen, ob eine neuere Version verfügbar ist " "und diese automatisch herunterladen." #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "aumatisches Prüfen auf Aktualisierungen" #: src/options/lobbyoptionstab.cpp:130 msgid "Tooltips" msgstr "Tooltips" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "Zeige Tooltips?" #: src/options/lobbyoptionstab.cpp:134 #, fuzzy, c-format msgid "Requires %s restart to take effect." msgstr "Benötigt SpringLobby Neustart um aktiv zu werden." #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "Tab-Vervollständigung" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" "\"Genaue Übereinstimmung\" wird ein Word vervollständigen wenn nur eins da " "ist und nur ein Treffer.\n" "\"Genauste Übereinstimmung\" wird den ersten Treffer auswählen, der am " "dichtesten ist." #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "Genaue Übereinstimmung" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "Dichteste Übereinstimmung" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "Zeige große Symbole in Tabs im Hauptfenster?" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "Spiele Mitteilungston" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 #, fuzzy msgid "Display time for popup notifications in seconds" msgstr "Spiele Mitteilungston" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 msgid "Start tab" msgstr "Anfangstab" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "Auswählen des Tabs, welcher zu Beginn angezeigt werden soll" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "Einen Browser (ausführbare Datei) auswählen." #: src/options/lobbyoptionstab.cpp:282 #, fuzzy msgid "Choose a editor browser executable" msgstr "Einen Browser (ausführbare Datei) auswählen." #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "Spring" #: src/options/mainoptionstab.cpp:73 msgid "General" msgstr "Allgemein" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "Gruppen" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "Wiederherstellen" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "Übernehmen" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "Nur im akt. Installationspfad suchen" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "Spring ausführbare Datei" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "Ort" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "Finde" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "UnitSync Bibliothek" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "Automatisch konfigurieren" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "Wechseln des Datenpfads" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "Die Spring Anwendung auswählen" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "Bibliothek" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "Eine beliebige Datei" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "Wähle UnitSync Bibl." #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 #, fuzzy msgid "Reloading unitsync" msgstr "Liste neuladen" #: src/options/springoptionstab.cpp:315 #, fuzzy, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" "SpringLobby ist nicht in der Lage die UnitSync Bibl. zu laden\n" "\n" "Du möchtest vllt. einen Blick auf deine UnitSync Einstellungen werfen." #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" "Willst du, dass ich den Datenpfad ändere? (auswählen von Ja wenn du weisst " "was du tust)" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "Datenpfad Zauberer" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "Wähle einen Ordner" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" "Beim erstellen eines Ordners trat ein Fehler auf\n" "Bitte erstellen sie Manuell folgenden Ordner:" #: src/playback/playbackfilter.cpp:60 msgid "Filter settings" msgstr "Filtereinstellungen" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Nur bereits geladene Karten" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "Größe in KB:" #: src/playback/playbackfilter.cpp:190 msgid "Duration (hh:mm:ss):" msgstr "Dauer (hh:mm:ss):" #: src/playback/playbacklistctrl.cpp:42 msgid "Date" msgstr "Datum" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "Datum der Aufnahme" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Kartenname" #: src/playback/playbacklistctrl.cpp:46 msgid "Duration" msgstr "Dauer" #: src/playback/playbacklistctrl.cpp:47 msgid "Spring Version" msgstr "Spring-Version" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize" msgstr "Dateigröße" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "Dateigröße in Kilobyte" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "Datei" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "M&odifikation herunterladen" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "Ansehen" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "Laden..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "Liste neuladen" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "Aufzeichnungen der Spiele" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "savegame" msgstr "Gespeicherte Spiele" #: src/playback/playbacktab.cpp:288 msgid "Couldn't get your spring versions from any unitsync library." msgstr "Konnte deine Spring Version aus keiner unitsync Bibliothek auslesen." #: src/playback/playbacktab.cpp:306 #, fuzzy, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" "Keine kompatible Spring Version gefunden, dieser Server benötigt Version: " "%s\n" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "Deine aktuelle Version ist:" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "Soll ich versuchen es für dich zu laden?" #: src/playback/playbacktab.cpp:323 #, fuzzy msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" "Du musst die Modifikation erst laden, bevor du die Wiederholung sehen " "kannst.\n" "\n" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" " Ich konnte die Karte nicht finden, um die Wiederholung zu sehen\n" "Dies kann durch tasclient verursacht sein, der einen kaputten Hash Wert " "geschrieben hat\n" "Wenn du dir sicher bist, die Karte zu besitzen, klicke nein\n" "Du musst die Karte herunterladen, um diese Wiederholung zu sehen.\n" "\n" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" "Ich glaube du bist nicht in der Lage diese Wiederholung zu sehen.\n" "Trotzdem versuchen? (Könnte CRASHEN!)" #: src/playback/playbacktab.cpp:356 msgid "Invalid replay" msgstr "Ungültige Wiederholung" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "Konnte Wiederholung nicht löschen: " #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "SIe wurden aus der Schlacht gekickt!" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "Vom Host rausgeworfen" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr " unbestimmte Zeit verbleibenden" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr " %d Minuten ausstehend" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 #, fuzzy msgid "There was an error downloading for the latest version.\n" msgstr "" "Ein Fehler trat während des Downloadens der letzten Version auf.\n" "Bitte aktualisiere manuell von http://springrts.com" #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "Benachrichtigung" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "Ungültige Zahl" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 #, fuzzy msgid "File doesn't exit" msgstr "Die Map ist nicht verfügbar." #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Aktiviert" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "Neu Verbinden" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 #, fuzzy msgid "Unknown Error" msgstr "Unbekannt" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "Download komplett, Dateipfad: " #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 msgid "Download complete." msgstr "Download komplett." #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "" "Konnte die Installationroutine nicht starten. Datei befindet sich hier: " #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer." msgstr "Konnte die Installationroutine nicht starten." #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "Neu Verbinden" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "Neu Verbinden" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 #, fuzzy msgid "Tries to connect to the next server in the list." msgstr "" "Du musst mit dem Server verbunden sein, um die Liste aller Kanäle zu sehen" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 #, fuzzy msgid "Do nothing" msgstr "Hole Punching" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "Namen filtern" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "Text eingeben, um die Online Benutzerliste zu filtern" #: src/selectusersdialog.h:67 msgid "Select Users" msgstr "Benutzer auswählen" #: src/serverevents.cpp:124 #, fuzzy, c-format msgid "ping: %s ms" msgstr "Pingantwort dauerte %s ms" #: src/serverevents.cpp:142 msgid " is online" msgstr " ist online" #: src/serverevents.cpp:165 msgid " is now " msgstr " is jetzt " #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "OnUserStatus() fehlgeschlagen ! (Ausnahme)" #: src/serverevents.cpp:224 msgid " just went offline" msgstr " hat sich eben abgemeldet" #: src/serverevents.cpp:259 msgid " opened battle " msgstr " öffnete eine Schlacht " #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "Betreten des Channels fehlgeschlagen" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "Konnte dem Channel nicht beitreten " #: src/serverevents.cpp:583 msgid " because: " msgstr " weil: " #: src/serverevents.cpp:826 msgid "Server Message" msgstr "Server Nachricht" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr " hat die ip=%s" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr " unterstützt kein NAT-Translation" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "Beginn der Stummliste für " #: src/serverevents.cpp:928 #, c-format msgid "%s mutelist" msgstr "%s Stummliste" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "Ende der Stummliste für " #: src/serverevents.cpp:984 msgid "Download update" msgstr "Download der Aktualisierung" #: src/serverevents.cpp:984 #, fuzzy, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" "Möchtest du %s downloaden? Die Datei ermöglicht folgende Aktualisierungen:\n" "%s" #: src/serverevents.cpp:1067 #, fuzzy msgid "Automatically moved to new battle" msgstr "aumatisches Prüfen auf Aktualisierungen" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" "Du kannst das Sonnen-/Bot-Symbol umher ziehen, um eine Startposition zu " "bestimmen.\n" " Halte die Maus über das Symbol, um ein Fenster mit Einstellungen zur Seite, " "Allianz und Boni anzuzeigen." #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "Bot hinzufügen" #: src/singleplayertab.cpp:99 msgid "Spectate only" msgstr "Nur beobachten" #: src/singleplayertab.cpp:102 msgid "Random start positions" msgstr "Zufällige Startpositionen" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "-- Wähle eine aus --" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 #, fuzzy msgid "Game setup error" msgstr "Fehler beim Einrichten des Spiels" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "Sie müssen zuerst eine Karte auswählen" #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" "Fortsetzen ohne zuerst einen Bot hinzuzufügen?\n" " Das Spiel wird sehr schnell zu Ende sein.\n" " " #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "Kein Bot hinzugefügt" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "" "Sie können kein Spring starten, während ein anderer Spring Prozess schon " "läuft." #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 #, fuzzy msgid "Coulnd't load required unitsync library" msgstr "Wähle eine unitsync-Library" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 #, fuzzy msgid "Fatal error" msgstr "Kritischer Fehler" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" "Diese Anwendung hat einen schweren Fehler generiert und wird beendet\n" "Generierung eines Fehlerberichts ist nicht möglich\n" "\n" "bitte nutze eine wxWidgets Bibl. die wxUSE_DEBUGREPORT unterstützt" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "Kritischer Fehler" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "Zeige diese Hilfemeldung" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "benutze nicht den Crash-Handler (nützlich für die Fehlersuche)" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "zeigt den Anwendungsbericht in der Konsole (wenn verfügbar)" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "aktiviert das Anwendungsberichtfenster" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" "überschreiben der standardmäßigen Ausführlichkeit der Protokolle, kann " "sein:\n" " 0: Kein Protokoll\n" " 1: kritische Fehler\n" " 2: Fehler\n" " 3: Warnungen (standard)\n" " 4: Nachrichten\n" " 5: Trace-Funktion" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 msgid "Ignore chat" msgstr "Geplauder ignorieren" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 msgid "Battle Autokick" msgstr "Spiel Autokick" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 msgid "Friends" msgstr "Freunde" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "Mausrad geschwindigkeit" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" "Höhere Werte meinen schnelleren Zoom mit dem Mausrad.\n" "Negative Werte invertieren die Zoom richtung.\n" "Ergebnisse hängen von dem Kamera Modus ab!" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "Shadow-map grösse" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" "höherer Wert = schönere Schatten\n" "mögliche Werte: 1024, 2048, 4096, 8192" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "Baum anzeige Entfernung" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "setzt die maximale Distanz bis zu der Bäume noch gezeichnet werden" #: src/springsettings/ctrlconstants.h:229 msgid "Terrain detail" msgstr "Oberflächen Detail" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "höherer Wert = höher detailierte Oberfläsche" #: src/springsettings/ctrlconstants.h:230 #, fuzzy msgid "Unit LOD distance" msgstr "Entfernung Einheitenicons" #: src/springsettings/ctrlconstants.h:230 #, fuzzy msgid "higher value = units will remain detailed even when zooming out" msgstr "höherer Wert = höher detailierte Einheiten" #: src/springsettings/ctrlconstants.h:231 msgid "Grass detail" msgstr "Gras Detail" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "higher value = more detailed grass" msgstr "höherer Wert = höher detailierte Einheiten" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "Boden-Details" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "Entfernung Einheitenicons" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" "bestimmt bis zu welcher Entfernung Einheiten vollständig gerendert werden\n" "höherer Wert = grössere Entfernung = mehr Einheiten müssen zur selben Zeit " "gerendert werden" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "Max Anzahl gleichzeitiger Partikel" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "beschränkt wieviele Partikel gleichzeitig gerendert werden" #: src/springsettings/ctrlconstants.h:236 #, fuzzy msgid "Max nano simultaneous particles" msgstr "Max Anzahl gleichzeitiger Partikel" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "Vollbildmodus" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "Vollbild- oder Fesntermodus" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "Dual-Monitor modus" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "wenn du zwei Monitore hast kannst du beide benutzen" #: src/springsettings/ctrlconstants.h:245 #, fuzzy msgid "Enable v-sync" msgstr "synchron" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "V-Sync an/aus" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "16-bit Z-buffer" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "Platzhalter" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "24-bit Z-buffer" #: src/springsettings/ctrlconstants.h:259 #, fuzzy msgid "Full-scene anti-aliasing samples" msgstr "Wie viel Anti-Aliasing angewendet werden soll" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "Wie viel Anti-Aliasing angewendet werden soll" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "Maximum an gleichzeitigen Klängen" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" "Maximum an verschiedenen Klängen die gleichzeitigen gespielt werden\n" "Setze sie dies auf 0 um Klang komplett zu deaktivieren." #: src/springsettings/ctrlconstants.h:273 #, fuzzy msgid "Master sound volume" msgstr "Insgesamte Lautstärke" #: src/springsettings/ctrlconstants.h:273 #, fuzzy msgid "master sound volume" msgstr "Insgesamte Lautstärke" #: src/springsettings/ctrlconstants.h:274 #, fuzzy msgid "General sound volume" msgstr "Insgesamte Lautstärke" #: src/springsettings/ctrlconstants.h:274 #, fuzzy msgid "general volume relative to master volume" msgstr "Lautstärke der Einheiten im vergleich zur globalen Lautstärke" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "Lautstärke der Einheiten" #: src/springsettings/ctrlconstants.h:275 #, fuzzy msgid "reply volume relative to master volume" msgstr "Lautstärke der Einheiten im vergleich zur globalen Lautstärke" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "Battle volume" msgstr "Schlachtraum" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "battle volume relative to global volume" msgstr "Lautstärke der Einheiten im vergleich zur globalen Lautstärke" #: src/springsettings/ctrlconstants.h:277 #, fuzzy msgid "User interface volume" msgstr "Lautstärke der Einheiten" #: src/springsettings/ctrlconstants.h:277 #, fuzzy msgid "ui volume relative to global volume" msgstr "Lautstärke der Einheiten im vergleich zur globalen Lautstärke" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "Schatten (langsam)" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "Schatten aktivieren?" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "3D Bäume" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" "Wollen sie schönere Bäume?\n" "Geforce 2/Radeon 8500/Intel 830 oder Grafikkarten neuerer Generation benötigt" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "Hochauflösende Wolken" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" "Wollen sie einen schöneren Himmel?\n" "Geforce 2/Radeon 8500/Intel 830 oder Grafikkarten neuerer Generation benötigt" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "Dynamische Wolken (langsam)" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "Wollen sie sich bewegende Wolken im Himmel?" #: src/springsettings/ctrlconstants.h:291 msgid "Reflective units" msgstr "Reflektierende Einheiten" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" "Wollen sie glänzende Einheiten?\n" "Geforce 5/Radeon 9500/Intel 915 oder Grafikkarten neuerer Generation " "benörtigt" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "Niemals Shader beim Rendern von SM3 Karten verwenden" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "Probleme mit SM3 Karten? Aktivieren Sie dies" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "Aktiviere LuaShaders Unterstützung" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "Hochauflösende LOS (Line of Sight) Texturen" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "Weichere LOS (Line of Sight) Einblendungen" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "Punkte weichzeichnen" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "Anti-Aliasing für Punkte?" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "Linien weichzeichnen" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "Sollen Linien weichgezeichnet werden?" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "Befehle über die Minikarte erlauben" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "GIb Kommandos auf der Minimap " #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "Befehle auf Minimap zeigen" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "Standardwert ist \"an\"" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "Symbole auf Minimap zeichnen" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "Markierungen auf Minimap zeichnen" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 msgid "left is the default" msgstr "links ist der Standard" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "Einfache Minimap Farben" #: src/springsettings/ctrlconstants.h:312 msgid "Use less colors" msgstr "weniger Farben verwenden" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "Nanospray in Teamfarbe" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "Nanopartikel werden mit Teamfarbe eingefärbt" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "Farbige Höhen-Anzeigen" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "macht Höhenunterschieder klarer" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "Zeige Ingame-Uhr" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" "Benötigt 'LuaWidgets' um aktiviert zu werden.\n" "Wird in der rechten unteren Ecke angezeigt werden." #: src/springsettings/ctrlconstants.h:320 msgid "Show in-game player information" msgstr "Zeige in-game Spieler Informationen" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "Zeige in-game FPS" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "Grafikfehler bei Alt-Tab beheben" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "Nicht ändern, wenn es nicht benötigt ist" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" "Econonmy AI, etc abschalten\n" "falls aktiviert kann LuaUI Fehlermeldungen produzieren" #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "Scrollen am Fensterrand" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "Scrollen wenn Maus den Fensterrand erreicht" #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "Maustasten umkehren" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "Invertiert die Y-Achse der Maus im FPS-Modus" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "Scrollgeschwindigkeit (Maus+tastatur) setzen" #: src/springsettings/ctrlconstants.h:338 #, fuzzy msgid "Rotatable overhead camera" msgstr "Drehbar Von-oben" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "FPS Kamera" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 #, fuzzy msgid "Free camera" msgstr "FPS Kamera" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "Menge an Konsolenausgabe (0=min,10=max)" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "Wie viele Informationen sollen ausgegeben werden?" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "KI Ausnahmen abfangen" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "deaktiviert Fehlerdiagnose für KI" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective" msgstr "Spiegelnd" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "Reflektierend und lichtbrechend" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "Dynamisch" #: src/springsettings/ctrlconstants.h:385 #, fuzzy msgid "Bump-mapped" msgstr "gebeultes Wasser" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "Invertiere Y-Achse der Maus" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "hoch/runter mit runter/hoch tauschen" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "3-Tasten-Maus-Unterstützung für die Minimap" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "Drehbar Von-oben" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "Draufsicht" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "First Person" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "Kamera aus Sicht einer Einheit" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "Bildschirmbreite" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "Bildschirmhöhe" #: src/springsettings/ctrlconstants.h:415 msgid "Blur reflection" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Shore waves" msgstr "" #: src/springsettings/ctrlconstants.h:417 #, fuzzy msgid "Enables shorewaves" msgstr "Schatten aktivieren?" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "Spiegelnd" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 msgid "Reflection texture size" msgstr "" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "Dauer" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 #, fuzzy msgid "off" msgstr "Aus" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "Kombinierte Optionen" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "Renderer Qualität / Video-Optionen" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "Render-Details" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "UI Optionen" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "Audio" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 #, fuzzy msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" "Änderungen im Expertenmodus werden verworfen\n" "sobald Du Änderungen im simplen Modus machst.\n" "Die Optionen dort orientieren sich NICHT an den\n" "Einstellungen im Expertenmodus.\n" "(Du kannst diese Nachricht im \"Datei\" Menü ausschalten)" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "Fehler!" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "Speichere Einstellungen von Spring vor dem beenden?" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "Bestätigung benötigt" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "Spring Einstellungen (Einfacher Modus)" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "Speichere Einstellungen" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "Resette die Einstellungen auf die Standard-Optionen" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "Deaktiviere Experten-Modus Warnung" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "Beenden" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "Einfach (wenig Optionen)" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "Experte (alle optionen)" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "Über" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "Kontakt" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "Mitwirkende" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "Einen Fehler melden" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "Modus" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "Information / Hilfe" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "Setze ALLE Optionen zurück?" #: src/springsettings/frame.cpp:315 #, fuzzy msgid "(simple mode)" msgstr "Spring Einstellungen (Einfacher Modus)" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "Tipp" #: src/springsettings/frame.cpp:367 #, fuzzy msgid "(expert mode)" msgstr "Wechsle zum Experten-Modus" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "" "SpringSettings ist eine Graphische Oberfläche für die Einstellungen der " "Spring-Engine" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "Kloot" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "Das SpringLobby Team" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "jeder meldet Fehler/Vorschläge" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "Ungültiger Port" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 #, fuzzy msgid "Hotkey Error" msgstr "Hilfe Fehler" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 #, fuzzy msgid "Enter new command:" msgstr "Chat Kommandos:" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 #, fuzzy msgid "Hotkey SaveSettings error" msgstr "SpringSettings Fehler" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "Keine Dateien gefunden" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "Pfad zur Unitsync-Library" #: src/springsettings/panel_pathoption.cpp:34 #, fuzzy msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" "Es gab ein Problem beim Abrufen von deinen Einstellungen.\n" "Bitte überprüfe, dass der Pfad unten richtig ist.\n" "Wenn du ihn korrigiert hast, klicke\n" "\"Verwende diesen Pfad\", um es erneut zu versuchen." #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "Benutze diesen Pfad" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "libunitsync.so unter linux, unitsync.dll unter windows" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "Pfad-Einstellungen" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "Wähle eine unitsync-Library" #: src/springsettings/panel_pathoption.cpp:96 #, fuzzy msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" "SpringSettings ist nicht in der Lage deine Unitsync Bibl. zu laden.\n" "Vielleicht möchtes du einen weiteren Blick auf die Unitsync Einstellung " "nehmen.\n" "Deine Spring Version musst 0.76 oder neuer sein, sonst \n" "wird dies jedes Mal scheitern." #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "Niedrig" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "Mittel" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "Hoch" #: src/springsettings/presets.h:45 msgid "very low" msgstr "Sehr niedirg" #: src/springsettings/presets.h:45 msgid "very high" msgstr "Sehr hoch" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "Der Standard-Browser kann nicht gestartet werden" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "Konnte den Browser nicht laden. Die URL ist: " #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "Der Browser konnte nicht geladen werden." #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "Es konnte nicht auf die Einstellungen zugegriffen werden\n" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "Konnte nicht speichern, unitsync wurde nicht korrekt geladen" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "SpringSettings Fehler" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "Audio-Einstellungen" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "Bildschirmauflösung" #: src/springsettings/tab_quality_video.cpp:166 #, fuzzy msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" "Wenn eine option spezielle hardware braucht um zu funkionieren\n" "wird sie im Tooltip aufgeführt sein." #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "Wasserqualität" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "Auflösung in Bit" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "Renderer Qualitätseinstellungen" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "Video-Modus Optionen" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "Anti-Aliasing Optionen" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "Z-/Depth-Buffer" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "gebeultes Wasser" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "Renderer-Detail Level" #: src/springsettings/tab_simple.cpp:40 #, fuzzy msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" "Mit diese Optionen kannst hast die Kontrolle rund um das Rendering in " "Spring.\n" "Für mehr Geschwindigkeit verringere die Einstellungen.\n" "Volle Kontrolle über alle Einstellungen erhälst du in dem vorliegenden\n" "\"Expert Mode\", klicke entweder auf den\n" "rechten Knopf oder benutze das \"Mode\"-Menü in der obigen Menüleiste.\n" "Du kannst jeder Zeit zu diesem Modus zurückkehren, indem du\n" "\"Simple Mode\" aus dem \"Mode\"-Menü auswählst.\n" "Falls du Fehlernachrichten bekommst im Bereich Grafik\n" "wenn du Spring spielst, solltest du einige Optionen\n" " im \"Expert-Mode\" deaktivieren.\n" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "Grafik-Qualität" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "Grafik-Details" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "Bildschirmauflösung" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "Wechsle zum Experten-Modus" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr " (aktuell)" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" "Setze alle Qualitäts-Einstellungen auf die Vordefinierten Werte nach deiner " "Auswahl" #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" "Setze alle Detail-Einstellungen auf die Vordefinierten Werte nach deiner " "Auswahl" #: src/springsettings/tab_simple.cpp:99 #, fuzzy msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" "Wähle die passende Auflösung des Monitors.\n" "Auswählen einer Dual-Screen-Auflösung aktiviert automatisch den Dual-Screen-" "Modus.\n" "Wenn die entsprechende Auflösung nicht verfügbar ist, kann sie manuell im " "Experten-Modus eingestellt ist.\n" "Bitte beachte auch den Kontakt mit dem Autor, damit es in zukünftigen " "Versionen hinzugefügt werden kann." #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "Info" #: src/springsettings/tab_ui.cpp:37 #, fuzzy msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" "Den Regler auf 0 zu setzen würde den Modus\n" "vom Radeln im Spiel ausschließen." #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "Scroll-Geschwindigkeiten (Maus+Tastatur)" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "Standard Kamera-Modus" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "Verschiedene UI-Optionen" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "Zoom" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "Erlaubte Einheiten" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "Verbindung wegen Zeitüberschreitung geschlossen" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "Unbekannte Antwort vom Server" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" "Konnte nicht durch NAT leiten, diese Schlacht mit anderen Spielern zu " "spielen wird wahrscheinlich nicht möglich sein." #: src/tdfcontainer.cpp:131 msgid "line " msgstr "Zeile " #: src/tdfcontainer.cpp:131 msgid " , column " msgstr " , Spalte " #: src/ui.cpp:175 msgid "Server password" msgstr "Server Passwort" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" "Registrierung war erfolgreich,\n" "du solltest dich jetzt einloggen können." #: src/ui.cpp:294 msgid "Registration successful" msgstr "Registrierung erfolgreich" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "Registrierung fehlgeschlafen. Grund:\n" #: src/ui.cpp:458 msgid "Help error" msgstr "Hilfe Fehler" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, fuzzy, c-format msgid "%s commands help." msgstr "SpringLobby Kommando Hilfe." #: src/ui.cpp:465 msgid "Global commands:" msgstr "Globale Kommandos:" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr " \"/away\" - Setzt deine Status auf abwesend." #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr " \"/back\" - Setzt deinen Abwesenheits Status zurück." #: src/ui.cpp:468 #, fuzzy msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" " \"/changepassword altespasswort neuespasswort\" - Ändert das Passwort des " "momentan aktiven Accounts." #: src/ui.cpp:469 #, fuzzy msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" " \"/changepassword altespasswort neuespasswort\" - Ändert das Passwort des " "momentan aktiven Accounts." #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr " \"/channels\" - Zeigt momentan aktive Chaträume an." #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr " \"/help [topic]\" - Zeigt Informationen zum Thema \"topic\" an.." #: src/ui.cpp:472 #, fuzzy msgid " \"/join channel [password]\" - Joins a channel." msgstr "" " \"/join Kanal [Passwort] [,Kanal2 [Passwort2]]\" - Betritt einen Kanal" #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr " \"/j\" - Alias für /join." #: src/ui.cpp:474 msgid " \"/ingame\" - Shows how much time you have in game." msgstr " \"/ingame\" - Zeigt, wie viel Zeit du im Spiel verbracht hast." #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" " \"/msg Benutzername [Text]\" - Sendet eine private Nachricht mit dem " "Inhalt Text an den Benutzernamen" #: src/ui.cpp:476 msgid " \"/part\" - Leaves current channel." msgstr " \"/part\" - Verlässt den Kanal" #: src/ui.cpp:477 msgid " \"/p\" - Alias to /part." msgstr " \"/p\" - identisch zu /part" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr " \"/rename newalias\" - Ändert deinen Benutzernamen zu newalias." #: src/ui.cpp:479 #, fuzzy, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr " \"/sayver\" - Sagt dir im Chat welche SpringLobby Version du hast." #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr "" " \"/testmd5 text\" - Gibt einen md5-b64 Hash des gegeben Textes zurück." #: src/ui.cpp:481 #, fuzzy, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr " \"/ver\" - Zeigt deine SpringLobby Version an." #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr " \"/clear\" - Löscht den Text aus dem akt. Kanalfeld" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "Chat Kommandos:" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr " \"/me action\" - Gibt Aktionsnachricht im IRC Stil aus.." #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" "Wenn du irgendein Kommando vermisst, versuche es in #springlobby " "einzutippen :)" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "Keine Themen bisher." #: src/ui.cpp:496 msgid "The topic \"" msgstr "Das Thema \"" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "\" nicht gefunden. Tippe \"/help topics\" nur für vorhandene Themen." #: src/ui.cpp:580 msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" "Konnte deine Version von Spring nicht aus einer UnitSync Bibl. lesen.\n" "\n" "Das Spielen im Internet ist momentan deaktiviert." #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" "Keine kompatible Spring Version gefunden, dieser Server benötigt Version: " "%s\n" #: src/ui.cpp:599 msgid "Online play is currently disabled." msgstr "Das Spielen im Internet ist momentan deaktiviert." #: src/ui.cpp:631 #, fuzzy, c-format msgid "disconnected from server: %s" msgstr "Verbindung zum Server getrennt." #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "Keine aktiven Kanalfelder offen." #: src/ui.cpp:839 #, fuzzy, c-format msgid "%s (%d users)" msgstr "(%d Benutzer)" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "Die aktuelle Schlacht wurde vom Host geschlossen." #: src/ui.cpp:993 msgid "Battle closed" msgstr "Schlacht geschlossen" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" "Deine Spring Einstellungen sind wahrscheinlich nicht korrekt,\n" " du solltest sie nochmal überprüfen,\n" " bevor du versuchst online zu spielen." #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "Spring settings Fehler" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "Die gewählte Voreinstellung benötigt die Karte " #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" ". Soll es geladen werden? \n" " Bei \"Nein\" wird die fehlende Karte aus den Voreinstellungen entfernt.\n" " Bitte wähle die Voreinstellungen neu " "aus, nachdem der Download beendet wurde" #: src/ui.cpp:1304 msgid "Map missing" msgstr "Karte fehlt" #: src/ui.cpp:1337 #, fuzzy, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" ",\n" "Es scheint so, als wäre es das erste Mal, dass du SpringLobby benutzt. Ich " "habe eine Konfiguration, die denke ich funktionieren sollte, für dich " "eingestellt, aber du solltest es nochmal durchgucken. \n" "\n" "Wenn du das getan hast, dann kannst du zum Dateimenü gehen, mit dem Server " "verbinden und ein nettes Spiel mit Spring erleben :)" #: src/ui.cpp:1340 msgid "Welcome" msgstr "Willkommen" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "Soll ich versuchen ein paar TASClient Einstellungen zu importieren?\n" #: src/ui.cpp:1359 msgid "Import settings?" msgstr "Einstellungen importieren?" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Ein Fehler ist bei der Überprüfung auf die letzte Version aufgetreten.\n" "Bitte später nochmal versuchen.\n" "Wenn das Problem weiterhin besteht, bitte \"Hilfe\" -> \"Fehler berichten\" " "wählen." #: src/ui.cpp:1387 msgid "Your Version: " msgstr "Ihre Version: " #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "Neuste Version: " #: src/ui.cpp:1392 #, fuzzy, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" "\n" "\n" "Soll ich die aktuelle Version automat. laden? Änderungen werden mit dem " "nächsten Lobbystart effektiv." #: src/ui.cpp:1395 msgid "Not up to date" msgstr "Nicht aktuell" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "ChanServ Fehler" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" "Ihre SpringLobby Version ist nicht auf dem neusten Stand.\n" "\n" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "Nicht auf dem neusten Stand" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" "\n" "Browser Pfad ist: " #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" "Nicht in der lage in das Lobbyverzeichnis zu schreiben.\n" "Bitte manuell aktualisieren oder Schreibebereichtigungen für den akt. " "Benutzer erteilen." #: src/updater/updater.cpp:72 msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Ein Fehler ist bei der Überprüfung auf die letzte Version aufgetreten.\n" "Bitte später nochmal versuchen.\n" "Wenn das Problem weiterhin besteht, bitte \"Hilfe\" -> \"Fehler berichten\" " "wählen." #: src/updater/updater.cpp:81 #, fuzzy, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" "Es ist ein Fehler beim Versuch die akt. ausfürhbare Datei zu ersetzen " "aufgetreten\n" " manuelles Kopieren ist erforderlich von: %s\n" " nach: %s\n" "Bitte \"Hilfe\" -> \"Fehler berichten\" wählen." #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, fuzzy, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" "Binäre Aktualisierung erfolgreich. \n" "Einige Übersetzungen würden nicht aktualisiert.\n" "Bitte melde dies in #springlobby nach dem Neustart." #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "Teilerfolg" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 #, fuzzy msgid "the SpringLobby revision to update to" msgstr "" "Ihre SpringLobby Version ist auf dem neusten Stand!\n" "\n" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "SpringLobby" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 #, fuzzy msgid "Warning" msgstr "Log Warnung" #: src/user.cpp:83 msgid "away" msgstr "Abwesend" #: src/user.cpp:83 msgid "back" msgstr "zurück" #: src/user.cpp:85 msgid "ingame" msgstr "Im Spiel" #: src/user.cpp:85 msgid "back from game" msgstr "Zurück vom Spiel" #: src/user.cpp:195 msgid "Newbie" msgstr "Neuling" #: src/user.cpp:196 msgid "Beginner" msgstr "Anfänger" #: src/user.cpp:197 msgid "Average" msgstr "Durchschnittlich" #: src/user.cpp:198 msgid "Above average" msgstr "Überduchschnittlich" #: src/user.cpp:199 msgid "Experienced" msgstr "Erfahren" #: src/user.cpp:200 msgid "Highly experienced" msgstr "Sehr erfahren" #: src/user.cpp:201 msgid "Veteran" msgstr "Veteran" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 msgid "Unknown" msgstr "Unbekannt" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" "Um logische Inkonsistenzen zu vermeiden, ist das Hinzufügen eines Benutzers " "zu mehr als einer Gruppe nicht erlaubt" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "Kann Benutzer nicht zur Gruppe hinzufügen" #: src/useractions.h:11 msgid "none" msgstr "keine" #: src/useractions.h:11 msgid "highlight" msgstr "hervorheben" #: src/useractions.h:11 msgid "notify login/out" msgstr "Benachrichtigen bei An-/Abmelden" #: src/useractions.h:11 msgid "ignore chat" msgstr "Geplauder ignorieren" #: src/useractions.h:11 msgid "ignore pm" msgstr "private Nachrichten ignorieren" #: src/useractions.h:12 msgid "autokick" msgstr "Autokick" #: src/useractions.h:12 msgid "notify hosted battle" msgstr "Benachrichtigen bei geöffneten Schlachten" #: src/useractions.h:12 msgid "notify status change" msgstr "Benachrichtigen bei Statusänderung" #: src/useractions.h:19 msgid "no action at all" msgstr "überhaupt keine Maßnahmen" #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" "hervorheben des Benutzer in der Namenslist und den Schlachten, an denen er " "teilnimmt" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" "Erscheinen eines Nachrichtenfensters, wenn der Benutzer sich am Server an " "bzw. abmeldet" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" "Ignorieren von privaten Nachrichten, kein Nachrichtenfenster wird geöffnet " "wenn einer von diesen versucht dich privat zu kontaktieren" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" "Erscheinen eines Nachrichtenfensters, wenn der Benutzer eine Schlacht " "eröffnet" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" "Erscheinen eines Nachrichtenfensters, wenn der Benutzer seinen " "Abwesenheitsstatus ändert" #: src/usermenu.h:31 msgid "Create new group..." msgstr "Neue Gruppe erstellen..." #: src/usermenu.h:37 msgid "Add to group..." msgstr "Zur Gruppe hinzufügen..." #: src/usermenu.h:38 msgid "Remove from group" msgstr "Von Gruppe entfernen" #: src/utils/controls.h:22 msgid "Choose color" msgstr "Wähle eine Farbe" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "Wähle eine Farbe (nur die ersten 16 werden gespeichert)" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "Widgets" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 msgid "Author" msgstr "Autor" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Games" msgstr "Spiel" #: src/widgets/downloadlistctrl.cpp:31 msgid "Compatible games" msgstr "" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "Infos erhalten" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "angemessene Modifikationen" #: src/widgets/infopanel.cpp:74 msgid "Current version" msgstr "Aktuelle Version" #: src/widgets/infopanel.cpp:79 msgid "# downloaded" msgstr "# geladen" #: src/widgets/infopanel.cpp:84 msgid "Published on" msgstr "veröffentlicht auf" #: src/widgets/infopanel.cpp:121 msgid "Changelog" msgstr "Änderungsprotokoll" #: src/widgets/infopanel.cpp:126 msgid "Screenshots" msgstr "Screenshots" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "Widgetdateien wurde installiert" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "Widgetdateien wurden nicht installiert." #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "Widgetdateien wurden entfernt." #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "Widgetdateien wurden nicht entfernt." #, fuzzy #~ msgid "Settings" #~ msgstr "Einstellungen" #, fuzzy #~ msgid "Help" #~ msgstr "&Hilfe" #, fuzzy #~ msgid "Faction" #~ msgstr "Aktion" #~ msgid "Mod" #~ msgstr "Modifikation" #~ msgid "spectators" #~ msgstr "Beobachter" #~ msgid "players" #~ msgstr "Spieler" #~ msgid "max" #~ msgstr "max." #~ msgid "Mod:" #~ msgstr "Mod:" #~ msgid "Only mods i have" #~ msgstr "Nur bereits geladene Mods" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to host a new game" #~ msgstr "" #~ "Ein Spring Prozess läuft bereits.Schliesse diesen erst bevor du ein neues " #~ "Spiel aufmachst" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to join another battle." #~ msgstr "" #~ "Du hast bereits eine Instanz von Spring offen. Schliesse diese zuerst, um " #~ "einer anderen Schlacht beizutreten." #~ msgid "Do you want me to take you to the download page?" #~ msgstr "Willst du, dass ich dich zur Download-Seite bringe?" #~ msgid "Mod not available" #~ msgstr "Mod nicht verfügbar" #~ msgid "Enter password" #~ msgstr "Passwort eingeben" #~ msgid "team" #~ msgstr "Mannschaft" #~ msgid "ally" #~ msgstr "Verbündete" #~ msgid "cpu" #~ msgstr "CPU" #~ msgid "Set name." #~ msgstr "Namen setzen." #~ msgid "Load a saved set of options." #~ msgstr "Laden einer gespeicherten Reihe von Optionen." #~ msgid "Save..." #~ msgstr "Speichern..." #~ msgid "Delete..." #~ msgstr "Löschen..." #~ msgid "Set default..." #~ msgstr "Setze als Standard..." #~ msgid "Mod Options" #~ msgstr "Mod Optionen" #~ msgid "Map Options" #~ msgstr "Karten Optionen" #~ msgid "" #~ "Cannot load an options set without a name\n" #~ "Please select one from the list and try again." #~ msgstr "" #~ "Kann keine Optionen ohne Namen laden\n" #~ "Bitte selektiere einen von der Liste und versuche nochmal." #~ msgid "Disable text appending (workaround for autoscroll)" #~ msgstr "Deaktivere Textanhänge (Abhilfe für Autoscrollen)" #~ msgid "You don't have the mod " #~ msgstr "Du hast nicht den benötigten Mod " #~ msgid " . Please download it first" #~ msgstr " . Bitte downloade ihn zuerst" #~ msgid "Mod unavailable" #~ msgstr "Mod nicht verfügbar" #~ msgid "Hash" #~ msgstr "Prüfsumme" #~ msgid "unknown hash " #~ msgstr "unbekannte Prüfsumme " #~ msgid "Test firewall" #~ msgstr "Port testen" #~ msgid "Relay battle to an Autohost" #~ msgstr "Übertragen der Schlacht an einen Autohost" #~ msgid "Tab icons" #~ msgstr "Tab Symbol" #~ msgid "P2P" #~ msgstr "P2P" #~ msgid "Total Outgoing: " #~ msgstr "Gesamt ausgehend: " #~ msgid "Publish new file" #~ msgstr "Veröffentliche neue Datei:" #~ msgid "Search file" #~ msgstr "Suche eine Datei" #~ msgid "Download Lua widgets" #~ msgstr "Laden von Lua Widgets" #~ msgid "not available" #~ msgstr "nicht verfügbar" #~ msgid "seeding" #~ msgstr "sende" #~ msgid "leeching" #~ msgstr "sauge" #~ msgid "Status: not connected" #~ msgstr "Status: nicht verbunden" #~ msgid "Status: connected" #~ msgstr "Status: verbunden" #~ msgid "Status: throttled or paused (ingame)" #~ msgstr "Status: gebremst oder angehalten (im Spiel)" #~ msgid "Status: unknown" #~ msgstr "Status: unbekannt" #~ msgid "Total Outgoing: %.2f KB/s" #~ msgstr "Gesamt ausgehend: %.2f KB/s" #~ msgid "Total Incoming: %.2f KB/s" #~ msgstr "Gesamt eingehend: %.2f KB/s" #~ msgid "&File" #~ msgstr "&Datei" #~ msgid "Manually &Start Torrent System" #~ msgstr "Torrentsystem manuell starten" #~ msgid "Manually &Stop Torrent System" #~ msgstr "Torrentsystem manuell stoppen" #~ msgid "Which profile do you want to be default?" #~ msgstr "Welches Profil soll als Standard gesetzt werden?" #~ msgid "Modname" #~ msgstr "Modifikationsname" #~ msgid "" #~ "No compatible installed spring version has been found, this replay " #~ "requires version: %s\n" #~ msgstr "" #~ "Eine nicht kompatible Spring Version wurde gefunden, die Wiederholung " #~ "benötigt die Version: %s\n" #~ msgid "" #~ "Download started in the background, please be patient\n" #~ "you will be notified on operation completed." #~ msgstr "" #~ "Der Download wurde im Hintergrund gestartet, bitte habe Geduld\n" #~ "du wirst über den Abschluss informiert." #~ msgid "Download started" #~ msgstr "Download gestartet" #~ msgid "You refused a mandatory update, you will be disconnected now." #~ msgstr "" #~ "Du verweigerst eine verbindliche Aktualisierung, deine Verbindung wird " #~ "jetzt getrennt." #~ msgid "Disconnecting" #~ msgstr "Trenne Verbindung" #~ msgid "Debug" #~ msgstr "Fehlerdiagnose" #~ msgid "SpringSettings (expert mode)" #~ msgstr "Spring Einstellungen (Experten-Modus)" #~ msgid "" #~ "thanks for inviting me in, code to re-use, infrastructure and help in " #~ "general" #~ msgstr "" #~ "danke für die Einladung, Code erneuern, Infrastruktur und helfen in der " #~ "Regel" #~ msgid "" #~ "The application has generated a fatal error and will be terminated\n" #~ "Generating a bug report is not possible\n" #~ "\n" #~ "please enable wxUSE_DEBUGREPORT" #~ msgstr "" #~ "Diese Anwendung hat einen fatalen Fehler produziert und wird beendet\n" #~ "Einen Fehlerbericht zu generieren ist nicht möglich\n" #~ "\n" #~ "bitte wxUSE_DEBUGREPORT einschalten" #~ msgid "Debug Options" #~ msgstr "Debug Optionen" #~ msgid "Player" #~ msgstr "Spieler" #~ msgid "Hi " #~ msgstr "Hi " #~ msgid "" #~ "By default SpringLobby reports some usage statistics.\n" #~ "You can disable that on options tab --> General." #~ msgstr "" #~ "Standardmäßig sendet SpringLobby einige Benutzerstatistiken.\n" #~ "Du kannst dies deaktivieren in \"Optionen\" --> \"Allgemein\"." #~ msgid "Notice" #~ msgstr "Hinweis" #~ msgid "only run update, quit immediately afterwards" #~ msgstr "nur die Aktualisierung ausführen, danach sofort schließen" #~ msgid "Timeout assumed, disconnecting" #~ msgstr "Timeout vermutet, trennen" #~ msgid "numcopies" #~ msgstr "numcopies" #~ msgid "MB downloaded" #~ msgstr "MB geladen" #~ msgid "MB uploaded" #~ msgstr "MB hochgeladen" #~ msgid "status" #~ msgstr "Status" #~ msgid "KB/s up" #~ msgstr "KB/s up" #~ msgid "KB/s down" #~ msgstr "KB/s down" #~ msgid "ETA (s)" #~ msgstr "ETA (s)" #~ msgid "Filesize (MB)" #~ msgstr "Dateigrösse (MB)" #~ msgid "Torrent system autostart" #~ msgstr "Autmat. Starten des Torrentsytem s" #~ msgid "at lobby connection (default)" #~ msgstr "bei Verbindung zur Lobby (standard)" #~ msgid "at lobby start" #~ msgstr "beim Lobbystart" #~ msgid "manual" #~ msgstr "manuell" #~ msgid "" #~ "Tried all known trackers for torrent system. No connection could be " #~ "established" #~ msgstr "" #~ "Habe alle bekannten Aufspürer nach Torrentsysteme probiert. Es konnte " #~ "keine Verbindung hergestellt werden" #~ msgid "Torrent system failure" #~ msgstr "Torrensystem Ausfall" #~ msgid "Type /help in a chat box." #~ msgstr "Tippe /help in einem Chatraum." #~ msgid "" #~ "A connection couldn't be established with the server\n" #~ "Would you like to try again with the same server?\n" #~ "No to switch to next server in the list" #~ msgstr "" #~ "Es konnte keine Verbindung mit dem Server hergestellt werden\n" #~ "Möchtest du ein nochmal mit dem gleichen Server versuchen?\n" #~ "'Nein' wechselt zum nächsten Server in der Liste" #~ msgid "Connection failure" #~ msgstr "Verbindungsfehler" #~ msgid "Server message" #~ msgstr "Server Nachricht" #~ msgid "SpringLobby -- downloading update" #~ msgstr "SpringLobby -- Downloaden der Aktualisierung" #~ msgid "Update complete. The changes will be available next lobby start." #~ msgstr "" #~ "Aktualisierung komplett. Die Änderungen werden nach einem Neustart aktiv." #~ msgid "a" #~ msgstr "a" #~ msgid "p" #~ msgstr "p" #~ msgid "m" #~ msgstr "m" #~ msgid "%d%" #~ msgstr "%d%" #~ msgid "t" #~ msgstr "t" #~ msgid "Not a number" #~ msgstr "Das ist doch keine Zahl.." #~ msgid "" #~ "Value out of range.\n" #~ " Enter an integer between 0 & 100." #~ msgstr "Wert muss zwischen 0 und 100 liegen!" #~ msgid "Bot team sharing." #~ msgstr "Bots teilen Spieler ." #~ msgid "Use smart scrolling" #~ msgstr "Benutze weichen Bildlauf" #~ msgid "_SERVER" #~ msgstr "_SERVER" #~ msgid "Download failed" #~ msgstr "Download fehlgeschlagen" #~ msgid "Unit detail" #~ msgstr "Einheiten Detail" #~ msgid "only on/off available at this time" #~ msgstr "nur an/aus möglich im Moment" #~ msgid "Global sound volume" #~ msgstr "Globale Lautstärke" #~ msgid "mark to be able to use" #~ msgstr "anklicken um LuaUi Wigets verfügbar zu machen" #~ msgid "Send debug info to console" #~ msgstr "Gibt Fehlerdiagnose auf der Konsole aus" #~ msgid "if disabled these will only be logged" #~ msgstr "wenn ausgeschaltet, wird es nur geloggt" #~ msgid "Missing Functionality" #~ msgstr "Fehlende Funktionen" #~ msgid "Download OTA content?" #~ msgstr "OTA-content herunterladen?" #~ msgid "" #~ "This game uses NAT traversal that is not supported by wx 2.6 build of " #~ "springlobby. \n" #~ "\n" #~ "You will not be able to play in this battle. \n" #~ "Update your wxwidgets to 2.8 or newer to enable NAT traversal support." #~ msgstr "" #~ "Diese Schlacht benutzt NAT-Traversal, dies ist mit einer wx 2.6 Version " #~ "von SpringLobby nicht möglich.\n" #~ " \n" #~ " Du kannst dieser Schlacht nihct beitreten.\n" #~ " Update auf wx 2.8 oder neuer um NAT support zu ermöglichen." #~ msgid "Only the host can lock the game." #~ msgstr "Nur der Host kann das Spiel für neue Mitspieler sperren" #~ msgid "Invalid host/port or servername." #~ msgstr "Ungültiger host/port oder Servername." #~ msgid "Active chat channels:" #~ msgstr "Aktive Chaträume:" #~ msgid "no rank" #~ msgstr "kein rang" #~ msgid "Only the host can fix player colours." #~ msgstr "Nur der Host kann die Spieler-Farben verteilen" #~ msgid "Select all" #~ msgstr "Alles auswählen" #~ msgid "NAT traversal to use. Experimental support." #~ msgstr "NAT Translation. Experimentelle unterstützung." #~ msgid "You have one or more bots sharing team, this is not possible." #~ msgstr "Du hast mehr als einen Bot in einem Team, das ist nicht möglich" #~ msgid "" #~ "Please enter password needed to join this channel, leave blank for no " #~ "passwrd." #~ msgstr "" #~ "Passwort für diese Schlacht eingeben, leer lassen für kein Passwort." #~ msgid "Fixed source ports" #~ msgstr "Feste Ursprungsports" #~ msgid "LuaAI" #~ msgstr "LuaAI" #~ msgid "Bot%d" #~ msgstr "Bot%d" #~ msgid "%Y-%m-%d %H:%M" #~ msgstr "%d.%m.%Y %H:%M" #~ msgid "[" #~ msgstr "[" #~ msgid "%H:%M" #~ msgstr "%H:%M" #~ msgid "?" #~ msgstr "?" #~ msgid "=" #~ msgstr "=" #~ msgid ">" #~ msgstr ">" #~ msgid "" #~ "Couldn't find any maps in you spring installation. This could happen when " #~ "you set the Spring settings incorrectly." #~ msgstr "" #~ "Keine Karten in deiner Spring Installation gefunden. Dies kann passieren, " #~ "wenn die Spring Einstellungen falsch gesetzt wurden." #~ msgid "The maximun number of units allowed per player." #~ msgstr "Die Anzahl von Einheiten die jeder Spieler maximal haben kann." #~ msgid "You have one or more bots shring team, this is not possible." #~ msgstr "" #~ "Zwei oder mehr Bots teilen sich einen Spieler. Dies ist nicht möglich." #~ msgid "" #~ " \n" #~ " \n" #~ " \n" #~ msgstr "" #~ " \n" #~ " \n" #~ " \n" #~ msgid " " #~ msgstr " " #~ msgid "\n" #~ msgstr "\n" #~ msgid "_BATTLE_" #~ msgstr "_BATTLE_" #~ msgid "IP and Smurfs" #~ msgstr "IP und Fake-Accounts" #~ msgid "/ban" #~ msgstr "/ban" #~ msgid "" #~ "You should add a bot before starting a game.\n" #~ "If you don't want an opponent add TestGlobalAi" #~ msgstr "" #~ "Sie sollten dem Spiel einen Bot hinzufügen bevor sie das Spiel starten.\n" #~ "Wenn sie keinen Gegner wollen, fügen sie TestGlobalAi hinzu." #~ msgid "Stop system" #~ msgstr "System stoppen" #~ msgid "Continue if commander dies" #~ msgstr "Nicht Verloren trotz Commanderverlust" #~ msgid "End if commander dies" #~ msgstr "Verloren wenn der Commander stirbt" #~ msgid "End condition" #~ msgstr "Siegesbedingungen" #~ msgid "Resources" #~ msgstr "Ressourcen" #~ msgid "The amount of metal each player starts with." #~ msgstr "Die Menge an Metall mit der jeder Spieler startet" #~ msgid "Start Energy" #~ msgstr "Start Energie" #~ msgid "The amount of energy each player starts with." #~ msgstr "Die Menge der Energy mit der jeder Spieler startet" #~ msgid "Max units" #~ msgstr "Max Einheiten" #~ msgid "The maximum number of units allowed per player." #~ msgstr "Maximal erlaubte Einheitenanzahl pro Spieler" #~ msgid "Limit d-gun" #~ msgstr "Limitiere D-Gun" #~ msgid "Ghosted buildings" #~ msgstr "Einmal gesichtete Gebäude bleiben sichtbar" #~ msgid "Diminishing metal makers" #~ msgstr "Abnehmende Metal Maker" #~ msgid "This chat is exclusively for participants of this battle." #~ msgstr "Dieser Chat ist nur für Teilnehmer dieses Spiels." #~ msgid "Max players reached" #~ msgstr "Die Maximale Spieleranzahl ist erreicht." #~ msgid "Save to:" #~ msgstr "Speichern unter:" #~ msgid "Browse..." #~ msgstr "Durchsuchen..." #~ msgid "Choose a directory" #~ msgstr "Verzeichnis wählen" #~ msgid "Map/Mod Options" #~ msgstr "Map/Mod Optionen" #~ msgid "Up to Date" #~ msgstr "Auf dem neusten Stand" #~ msgid "" #~ "\n" #~ "\n" #~ "Would you like to visit a page with instructions on how to download the " #~ "newest version?" #~ msgstr "" #~ "\n" #~ "\n" #~ "Wollen sie eine Internetseite mit Anweisungen wie man die neuste Version " #~ "herunterläd besuchen?" #~ msgid "Limit D-Gun" #~ msgstr "D-Gun begrenzen" #~ msgid "" #~ "Disables commander's D-gun when being too far away from the starting point" #~ msgstr "" #~ "Deaktiviert die D-Gun des Commander, wenn er zu weit von seinem " #~ "Startpunkt entfernt ist." #~ msgid "Ghosted Buildings" #~ msgstr "Schatten Gebäude" #~ msgid "" #~ "Enemy buildings will leave a ghost image on the map after losing LoS on " #~ "them" #~ msgstr "" #~ "Feindliche Gebäude lassen einen transparenten Umriss auf der Karte nach " #~ "dem sie aus dem eigenen Sichtfeld sind" #~ msgid "" #~ "Efficiency of MetalMakers will progressively reduce as much as you build " #~ "them" #~ msgstr "Effizienz von MetalMakern nimmt ab je mehr du baust" #~ msgid "Game Ending condition" #~ msgstr "Spiel Endbedinung" #~ msgid "Sets the amount of metal that players will start with" #~ msgstr "Setzt die Menge Metall mit der der Spieler starten wird" #~ msgid "Sets the amount of energy that players will start with" #~ msgstr "Setzt die Menge Energie mit der der Spieler starten wird" #~ msgid "Max Units Allowed" #~ msgstr "Max erlaubte Einheiten" #~ msgid "" #~ "Sets the maximum amount of units that a player will be allowed to build" #~ msgstr "Setzte die maximale Anzahl an Einheiten die ein Spieler bauen darf" #~ msgid "Reset" #~ msgstr "zurücksetzen" #~ msgid "Spring directory" #~ msgstr "Spring Verzeichnis" #~ msgid "Default location." #~ msgstr "Standard Ort." #~ msgid "" #~ "Unitsync loading was aborted because your spring data directory is not " #~ "writable. Please check." #~ msgstr "" #~ "Das laden von Unitsync wurde abgebrochen weil dein Spring " #~ "Datenverzeichnis nicht beschreibbar ist. Bitte überprüfe das." #~ msgid "is not supported by the lobby server that requires version" #~ msgstr "wird nicht unterstützt vom Lobbyserver; Vorraussetzung ist Version" #~ msgid "" #~ "This is the SpringLobby channel, please report any problems you are " #~ "having with SpringLobby here and the friendly developers will help you." #~ msgstr "" #~ "Dies ist der SpringLobby Chatraum, bitte melde Probleme mit SpringLobby " #~ "hier und einer der freundlichen Entwickler wird dir helfen." springlobby-0.169/po/el.po0000600000176000000410000065575012105760277017034 0ustar buildbotwww-data00000000000000# Greek translation for springlobby # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the springlobby package. # Antonis Kanouras , 2008. # msgid "" msgstr "" "Project-Id-Version: springlobby\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2008-08-31 17:39+0000\n" "Last-Translator: Antonis Kanouras \n" "Language-Team: Greek \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2008-09-20 21:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Poedit-Language: Greek\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "" #: src/Helper/imageviewer.cpp:92 #, fuzzy msgid "delete" msgstr "Με ανάκλαση" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "Σφάλμα" #: src/Helper/imageviewer.cpp:160 #, fuzzy msgid "Choose a filename" msgstr "Επιλ. στο παιχνίδι" #: src/Helper/imageviewer.cpp:167 #, fuzzy msgid "File successfully saved" msgstr "" "\n" "αποθηκεύτηκε επιτυχώς στο:\n" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 #, fuzzy msgid "Success" msgstr "Ορισμός πρόσβασης..." #: src/Helper/imageviewer.cpp:170 #, fuzzy msgid "Couldn't save file" msgstr "Αδύνατη η αποθήκευση\n" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 #, fuzzy msgid "Default" msgstr "προεπιλογή" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" #: src/Helper/wxTranslationHelper.cpp:148 #, fuzzy msgid "Select the language" msgstr "Πληροφορίες καναλιού" #: src/Helper/wxTranslationHelper.cpp:149 #, fuzzy msgid "Language" msgstr "Καταγωγή" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Αποδοχή Συμφωνίας" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "Αποδέχεστε τους όρους αυτής της συμφωνίας;" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Ναι" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "Όχι" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 #, fuzzy msgid "User" msgstr "Αποσιώπηση Χρήστη" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 #, fuzzy msgid "Channel" msgstr "κανάλι" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Κατάσταση:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 #, fuzzy msgid "Minimum rank to join" msgstr "Κατώτερος βαθμός" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Περιγραφή" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Περιγραφή" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Χάρτης" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 #, fuzzy msgid "Mapname" msgstr "Παναμάς" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "Παιχνίδι" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "Παιχνίδι" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Οικοδεσπότης" #: src/battlelist/battlelistctrl.cpp:60 #, fuzzy msgid "Name of the Host" msgstr "Όνομα χρήστη" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Θεατές:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "Αριθμός παικτών" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 #, fuzzy msgid "Players" msgstr "Παίκτες:" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "Αριθμός παικτών" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Χάρτης" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Maximum number of Players that can join" msgstr "Ο μέγιστος αριθμός παιχτών που θα επιτραπεί στη μάχη." #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "Κατέβασμα χάρτη" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "Κατέβασμα χάρτη" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Θεατές:" #: src/battlelist/battlelistctrl.cpp:370 #, fuzzy msgid "Active Players:" msgstr "Παίκτες:" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "Οικοδεσπότης:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Κατάσταση:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Κλειδωμένο" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "Με κωδικό" #: src/battlelist/battlelistfilter.cpp:122 #, fuzzy msgid "Highlighted only" msgstr "Επισήμανση" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "Όριο βαθμού:" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Περιγραφή:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Ξεκίνησε" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Πλήρης" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "Ανοιχτό" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Παίκτες:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Όλα" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Χάρτης:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Μόνο χάρτες που έχω" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "Μεγ. Παίκτες:" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 #, fuzzy msgid "Game:" msgstr "Παιχνίδι" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Μόνο χάρτες που έχω" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Θεατές:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "%d" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Παίκτες:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 #, fuzzy msgid " Filter " msgstr "Αρχείο" #: src/battlelist/battlelisttab.cpp:144 #, fuzzy msgid "Activated" msgstr "Ξεκίνησε" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 #, fuzzy msgid " Battle infos " msgstr "Λίστα μαχών" #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "Φιλοξενία νέου..." #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "Συμμετοχή" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" "Δεν μπορείτε να φιλοξενήσετε παιχνίδι εκτός σύνδεσης. Παρακαλώ συνδεθείτε " "στο lobby." #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "Εκτός Σύνδεσης." #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "Η φιλοξενία έχει απενεργοποιηθεί λόγω ασυμβατότητας έκδοσης" #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Πρόβλημα του Spring" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "Ήδη σε μάχη" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "Είστε ήδη σε μάχη." #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" "Η συμμετοχή σε μάχες έχει απενεργοποιηθεί επειδή χρησιμοποιείτε ασύμβατη " "έκδοση του Spring." #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 #, fuzzy msgid "Matchmaker detected" msgstr "Αρπαγή εξαιρέσεων AI (exceptions)" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "Ήδη σε μάχη" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "Είστε ήδη σε μάχη.\n" "\n" "Θέλετε να εγκαταλείψετε την τρέχουσα μάχη και να συμμετάσχετε στην νέα;" #: src/battlelist/battlelisttab.cpp:430 #, fuzzy msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" "Θέλετε να δοκιμάσω να το κατεβάσω για εσάς;\n" "Μπορείτε να δείτε την εξέλιξη στην καρτέλα \"Διαχειριστής Λήψεων.\"" #: src/battlelist/battlelisttab.cpp:433 #, fuzzy msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" "Πρέπει να κατεβάσετε το mod πριν να συμμετάσχετε σε αυτό το παιχνίδι.\n" "\n" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "Ο χάρτης δεν είναι διαθέσιμος" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" "Πρέπει να κατεβάσετε τον χάρτη πριν να συμμετάσχετε σε αυτό το παιχνίδι.\n" "\n" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "Ο χάρτης δεν είναι διαθέσιμος" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "Κωδικός μάχης" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 #, fuzzy msgid "Edit auto-joined channels" msgstr "Αυτόματη είσοδος σε κανάλια..." #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "" #: src/channel/channelchooser.cpp:30 #, fuzzy msgid "Find channel:" msgstr "Είσοδος σε κανάλι..." #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 #, fuzzy msgid "Choose channels to join" msgstr "Όνομα καναλιού" #: src/channel/channellistctrl.cpp:30 #, fuzzy msgid "# users" msgstr "(%d χρήστες)" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "### Η Σύνοδος Έκλεισε στις [" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" "Αδύνατη η δημιουργία φακέλου. \n" "Παρακαλώ βεβαιωθείτε ότι δεν υπάρχει προστασία εγγραφής.\n" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "" "Η δυνατότητα καταγραφής έχει απενεργοποιηθεί μέχρι να επανεκκινήσετε το " "SpringLobby." #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "Καταγραφή Προειδοποίησης" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" "Αδύνατη η καταγραφή.\n" "Η καταγραφή θα απενεργοποιηθεί για το δωμάτιο " #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" ".\n" "\n" "Παρακαλώ επανεισέλθετε στο δωμάτιο για να ενεργοποιηθεί η καταγραφή." #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 #, fuzzy msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" "Αδύνατο το άνοιγμα του αρχείου καταγραφής. \n" "Βεβαιωθείτε ότι δεν υπάρχει προστασία εγγραφής.\n" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "κανάλι_" #: src/chatpanel.cpp:69 msgid "#" msgstr "#" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, fuzzy, c-format msgid "%d users" msgstr "(%d χρήστες)" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "κάνετε δεξί κλικ για επιλογές (όπως αυτόματη είσοδος)" #: src/chatpanel.cpp:296 msgid "Send" msgstr "Αποστολή" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr " !! Εντολή: \"" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "\" παράμετροι: \"" #: src/chatpanel.cpp:717 msgid "channel" msgstr "κανάλι" #: src/chatpanel.cpp:718 msgid "battle" msgstr "μάχη" #: src/chatpanel.cpp:719 msgid "server" msgstr "εξυπηρετητής" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr " εισήλθε στο " #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr " εξήλθε από το " #: src/chatpanel.cpp:814 #, fuzzy msgid " ** Channel topic:" msgstr "Πληροφορίες καναλιού" #: src/chatpanel.cpp:821 #, fuzzy msgid " ** Set by " msgstr "" "\n" " * Ορίστηκε από " #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "Η συνομιλία έκλεισε." #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "Είστε βέβαιος ότι θέλετε να κάνετε επικόλληση %d γραμμών;" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr " Χρησιμοποιείτε το SpringLobby v" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr " Δεν είστε σε κανάλι ή το κανάλι δεν υπάρχει." #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" " Σφάλμα: Η εντολή (%s) δεν υπάρχει. Πληκτρολογήστε /help για μια λίστα των " "διαθέσιμων εντολών." #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" " Δεν είστε σε μάχη ή η μάχη δεν υπάρχει. Πληκρτολογήστε /help για μια λίστα " "των διαθέσιμων εντολών." #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr " Ο χρήστης είναι εκτός σύνδεσης." #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr " Στάλθηκε: \"" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "\"" #: src/chatpanel.cpp:1090 #, fuzzy msgid " ** User is now offline." msgstr " Ο χρήστης είναι εκτός σύνδεσης." #: src/chatpanel.cpp:1097 #, fuzzy msgid " ** User just got online." msgstr " Ο χρήστης είναι εκτός σύνδεσης." #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 #, fuzzy msgid " ** Joined Battle." msgstr " εισήλθε στο " #: src/chatpanelmenu.cpp:34 #, fuzzy msgid "Disable text appending" msgstr "Απενεργοποίηση προειδοποίησης λειτουργίας για προχωρημένους" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "Αντιγραφή" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "Εκκαθάριση" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "Αυτόματη είσοδος σε αυτό το κανάλι" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "Αποχώρηση" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "Εμφάνιση μηνυμάτων Εισόδου/Εξόδου" #: src/chatpanelmenu.cpp:68 #, fuzzy msgid "Show mute list" msgstr "Εμφάνιση συμβουλών" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "Πληροφορίες καναλιού" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "Ορισμός θέματος..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "Μήνυμα καναλιού..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "Κλείδωμα..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "Ξεκλείδωμα" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "Εγγραφή..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "Διαγραφή" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "Ανοιχτό" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "Κλειστό" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "Είναι ανοιχτό;" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "Προστασία από ανεπιθύμητα μηνύματα" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "ChanServ" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "Αποσύνδεση" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "Επανασύνδεση" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "Αφαίρεση..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "Αλλαγή κωδικού..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "Ορισμός πρόσβασης..." #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "Λογαριασμοί" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "Μετάδοση..." #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "Διαχειριστής" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "Ανοιχτή Συνομιλία" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "Σύνδεση στην ίδια μάχη" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "Χρόνος παιχνιδιού" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "Εύρεση διεύθυνσης IP και Smurf" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "Αποσιώπηση..." #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "Αποσιώπηση για 5 λεπτά" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "Αποσιώπηση για 10 λεπτά" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "Αποσιώπηση για 30 λεπτά" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "Αποσιώπηση για 2 ώρες" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "Αποσιώπηση για 1 ημέρα" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "Αναίρεση αποσιώπησης" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "Αποσιώπηση" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "Αποπομπή..." #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "Αποκλεισμός..." #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "Άρση αποκλεισμού" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "Κλήση" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "Δώσε μπάτσα!" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "Κάνε διαχειριστή" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "Άρση δικαιώματος διαχείρησης" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "Σφάλμα ChanServ" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "Το ChanServ δεν είναι σε αυτό το κανάλι" #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "Ποιο πρέπει να είναι το νέο θέμα;" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "Μήνυμα:" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "Κλείδωμα καναλιού..." #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "Ποιος πρέπει να είναι ο νέος κωδικός;" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "Ξεκλείδωμα Καναλιού" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "Επιβεβαίωση ξεκλειδώματος του καναλιού;" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "Το ChanServ δεν είναι σε αυτό τον εξυπηρετητή." #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "Δήλωση Καναλιού" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "Ποιος πρέπει να δηλωθεί ως δημιουργός του καναλιού;" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "Διαγραφή Καναλιού" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "Επιβεβαίωση διαγραφής του καναλιού;" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "Διαγραφή Λογαριασμού Χρήστη" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "Ποιον λογαριασμό χρήστη θέλετε να διαγράψετε σήμερα;" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "Διαγραφή λογαριασμού" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "Επιβεβαίωση διαγραφής λογαριασμού " #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "Αλλαγή Κωδικού Λογαριασμού Χρήστη" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "Για ποιον λογαριασμό θέλετε να αλλάξετε τον κωδικό;" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "Ποιος θα είναι ο νέος κωδικός;" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "Δεν έχει υλοποιηθεί" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "Μετάδοση Μηνύματος" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "Μήνυμα προς μετάδοση:" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "Αποσιώπηση Χρήστη" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "Πόσα λεπτά να διαρκέσει η αποσιώπηση του χρήστη;" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "Αποπομπή Χρήστη" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "Αιτία:" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "Αποπομπή χρήστη" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "Αποσιώπηση χρήστη" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "Διάρκεια:" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" #: src/chatpanelmenu.cpp:774 #, fuzzy msgid "couldn't add user" msgstr "Αδυναμία εκκίνησης περιηγητή." #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "Σύνδεση στον εξυπηρετητή lobby" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "Εξυπηρετητής" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" "Εξυπηρετητής στον οποίο θα γίνει σύνδεση. Μπορείτε να συνδεθείτε σε όποιον " "εξυπηρετητή θέλετε δηλώνοντας τον στη μορφή \"εξυπηρετητής:θύρα\"" #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "Ψευδώνυμο" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "Κωδικός πρόσβασης" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "Αποθήκευση κωδικού πρόσβασης" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "Αυτόματη σύνδεση την επόμενη φορά" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" "Αποθήκευση των στοιχείων σύνδεσης και αυτόματη σύνδεση στον εξυπηρετητή κατά " "την επόμενη εκκίνηση του lobby" #: src/connectwindow.cpp:85 #, fuzzy msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" "Σημείωση: Αν δεν έχετε λογαριασμό,\n" "μπορείτε να εγγραφείτε δωρεάν στην\n" "καρτέλα \"Εγγραφή\"" #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "Εντάξει" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Ακύρωση" #: src/connectwindow.cpp:91 msgid "Login" msgstr "Είσοδος" #: src/connectwindow.cpp:92 msgid "Register" msgstr "Εγγραφή" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "Ψευδώνυμο" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "Μη έγκυρη θύρα." #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "Μη έγκυρη θύρα" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" "Αριθμός θύρας εκτός ορίων.\n" "\n" "Πρέπει να είναι ακέραιος από 1 εως 65535" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "Μη έγκυρος εξυπηρετητής/θύρα" #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "Μη έγκυρος εξυπηρετητής" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" #: src/connectwindow.cpp:294 #, fuzzy msgid "Invalid nickname" msgstr "Μη έγκυρος αριθμός" #: src/connectwindow.cpp:301 #, fuzzy msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" "Η εγγραφή απέτυχε, ο λόγος ήταν:\n" "Ασυμφωνία κωδικού και επιβεβαίωσής του" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "Αποτυχία εγγραφής." #: src/countrycodes.cpp:11 msgid " Andorra" msgstr " Ανδόρα" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "Ηνωμένα Αραβικά Εμιράτα" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "Αφγανιστάν" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "Αντίγκουα και Μπαρμπούντα" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "Ανγκίλα" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "Αλβανία" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "Αρμενία" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "Ολλανδικές Αντίλλες" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "Ανγκόλα" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "Ανταρκτική" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "Αργεντινή" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "Αμερικανική Σαμόα" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "Αυστρία" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "Αυστραλία" #: src/countrycodes.cpp:25 #, fuzzy msgid "Åland Islands" msgstr "Νήσοι Κέυμαν" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "Αρούμπα" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "Αζερμπαϊτζάν" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "Βοσνία-Ερζεγοβίνη" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "Μπαρμπάντος" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "Μπανγκλαντές" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "Βέλγιο" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "Μπουρκίνα Φάσο" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "Βουλγαρία" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "Μπαχρέιν" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "Μπουρούντι" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "Μπενίν" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "Βερμούδες" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "Μπρουνέι Νταρουσαλάμ" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "Βολιβία" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "Βραζιλία" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "Μπαχάμες" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "Μπουτάν" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "Νήσος Μπουβέ" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "Μποτσουάνα" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "Λευκορωσία" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "Μπελίζ" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "Καναδάς" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "Νήσοι Κόκος (Κήλινγκ)" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "Κεντρική Αφρικανική Δημοκρατία" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "Κονγκό" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "Ελβετία" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "Ακτή Ελεφαντοστού" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "Νήσοι Κουκ" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "Χιλή" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "Καμερούν" #: src/countrycodes.cpp:56 msgid "China" msgstr "Κίνα" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "Κολομβία" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "Κόστα Ρίκα" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "Κούβα" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "Πράσινο Ακρωτήριο" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "Νήσοι Χριστουγέννων" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "Κύπρος" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "Τσεχική Δημοκρατία" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "Γερμανία" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "Τζιμπουτί" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "Δανία" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "Δομηνίκη" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "Δομινικανή Δημοκρατία" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "Αλγερία" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "Ισημερινός" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "Εσθονία" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "Αίγυπτος" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "Δυτική Σαχάρα" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "Ερυθραία" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "Ισπανία" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "Αιθιοπία" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "Φινλανδία" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "Φίτζι" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "Νήσοι Φώκλαντ (Μαλβίνες)" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "Μικρονησία" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "Νήσοι Φερόες" #: src/countrycodes.cpp:82 msgid "France" msgstr "Γαλλία" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "Γαλλία, Μητροπολιτική" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "Γκαμπόν" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "Γρενάδα" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "Γεωργία" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "Γαλλική Γουϊάνα" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "Γκάνα" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "Γιβραλτάρ" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "Γροιλανδία" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "Γκάμπια" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "Γουϊνέα" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "Γουαδελούπη" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "Ισημερινή Γουϊνέα" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "Ελλάδα" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "Ν. Γεωργία και Ν. Σάντουιτς Νήσοι" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "Γουατεμάλα" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "Γκουάμ" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "Γουϊνέα-Μπισάου" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "Γουϊάνα" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "Χονγκ Κονγκ" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "Νήσοι Χερντ και ΜακΝτόναλτ" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "Ονδούρα" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "Κροατία" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "Αϊτή" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "Ουγγαρία" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "Ινδονησία" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "Ιρλανδία" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "Ισραήλ" #: src/countrycodes.cpp:110 msgid "India" msgstr "Ινδία" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "Βρετανικά Εδάφη Ινδικού Ωκεανού" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "Ιράκ" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "Ιράν" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "Ισλανδία" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "Ιταλία" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "Τζαμάικα" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "Ιορδανία" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "Ιαπωνία" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "Κένυα" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "Κιργιστάν (Δημοκρατία της Κιργιζίας)" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "Καμπότζη" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "Κιριμπάτι" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "Κομόρες" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "Άγιος Χριστόφορος και Νέβις" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "Κορέα (Βόρεια) (Λαική Δημοκρατία)" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "Κορέα (Νότια) (Δημοκρατία)" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "Κουβέιτ" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "Νήσοι Κέυμαν" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "Καζακστάν" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "Λάος" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "Λίβανος" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "Αγία Λουκία" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "Λιχτενστάιν" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "Σρι Λάνκα" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "Λιβερία" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "Λεσότο" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "Λιθουανία" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "Λουξεμβούργο" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "Λεττονία" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "Λιβύη" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "Μαρόκο" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "Μονακό" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "Μολδαβία" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "Μαυροβούνιο" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "Μαδαγασκάρη" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "Νήσοι Μάρσαλ" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "Fyrom" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "Μάλι" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "Μιανμάρ" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "Μογγολία" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "Μακάο" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "Νήσοι Βορείων Μαριάννων" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "Μαρτινίκα" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "Μαυριτανία" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "Μονσεράτ" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "Μάλτα" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "Μαυρίκιος" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "Μαλδίβες" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "Μαλάουι" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "Μεξικό" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "Μαλαισία" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "Μοζαμβίκη" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "Ναμίμπια" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "Νέα Καληδονία" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "Νίγηρας" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "Νήσοι Νόρφολκ" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "Νιγηρία" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "Νικαράγουα" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "Ολλανδία" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "Νορβηγία" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "Νεπάλ" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "Ναούρου" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "Ουδέτερη Ζώνη Σαουδικής Αραβίας/Ιράκ" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "Νιούε" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "Νέα Ζηλανδία" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "Ομάν" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "Παναμάς" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "Περού" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "Γαλλική Πολυνησία" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "Παπούα-Νέα Γουινέα" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "Φιλιππίνες" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "Πακιστάν" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "Πολωνία" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "Σαν Πιέρ και Μικελόν" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "Νήσοι Πίτκαιρν" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "Πόρτο Ρίκο" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "Πορτογαλία" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "Παλάου" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "Παραγουάη" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "Κατάρ" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "Νήσος Επανένωσης" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "Ρουμανία" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "Σερβία" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "Ρωσική Ομοσπονδία" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "Ρουάντα" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "Σαουδική Αραβία" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "Νήσοι Σολομώντα" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "Σεϋχέλλες" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "Σουδάν" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "Σουηδία" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "Σιγκαπούρη" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "Αγία Ελένη" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "Σλοβενία" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "Νήσοι Σβάλμπαρντ και Ζαν Μαγιέν" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "Σλοβακία (Σλοβάκικη Δημοκρατία)" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "Σιέρρα Λεόνε" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "Σαν Μαρίνο" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "Σενεγάλη" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "Σομαλία" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "Σουρινάμ" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "Σάο Τομέ και Πρίνσιπε" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "Σοβιετική Ένωση (πρώην)" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "Ελ Σαλβαδόρ" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "Συρία" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "Σουαζιλάνδη" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "Νήσοι Τούρκς και Καΐκος" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "Τσαντ" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "Γαλλικά Νότια Εδάφη" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "Τόγκο" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "Ταϋλάνδη" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "Τατζικιστάν" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "Τοκελάου" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "Τουρκμενιστάν" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "Τυνησία" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "Τόγκα" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "Ανατολικό Τιμούρ" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "Τουρκία" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "Τρινιδάδ και Τομπάγκο" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "Τουβαλού" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "Ταϊβάν" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "Τανζανία" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "Ουκρανία" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "Ουγκάντα" #: src/countrycodes.cpp:234 #, fuzzy msgid "United Kingdom" msgstr "Ηνωμένο Βασίλειο (Μεγάλη Βρετανία)" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "Μικροί Απόμεροι Νήσοι των ΗΠΑ" #: src/countrycodes.cpp:236 msgid "United States" msgstr "Ηνωμένες Πολιτείες" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "Ουρουγουάη" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "Ουζμπεκιστάν" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "Πόλη του Βατικανού (Αγία Έδρα)" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "Άγιος Βικέντιος και Γρεναδίνες" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "Βενεζουέλα" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "Παρθένοι Νήσοι (Βρετανικές)" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "Παρθένοι Νήσοι (Ηνωμένων Πολιτειών)" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "Βιετνάμ" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "Βανουάτου" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "Νήσοι Ουώλλις και Φουτούνα" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "Σαμόα" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "Υεμένη" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "Μαγιότ" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "Γιουγκοσλαβία" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "Νότια Αφρική" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "Ζάμπια" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "Ζαΐρ" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "Ζιμπάμπουε" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "(Δεν βρέθηκε ονομασία κράτους)" #: src/crashreport.cpp:168 msgid "System informations" msgstr "Πληροφορίες συστήματος" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "Αναλυτική καταγραφή εφαρμογής" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "Τελευταία δημιουργημένο script εκτέλεσης" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "Δεν βρέθηκαν χάρτες" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "σε σειρά" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "Λήψη αρχείου" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "Λήψη ολοκληρώθηκε" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 #, fuzzy msgid "Name" msgstr "Παιχνίδι" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "Μέγεθος" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Χάρτης" #: src/downloader/filelister/filelistctrl.cpp:174 #, fuzzy msgid "game" msgstr "Ψευδώνυμο" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "άγνωστο" #: src/downloader/filelister/filelistdialog.cpp:26 #, fuzzy msgid "Search and download files" msgstr "Αναζήτηση αρχείου" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:55 #, fuzzy msgid "Download selected" msgstr "Λήψη ολοκληρώθηκε" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Ψευδώνυμο:" #: src/downloader/filelister/filelistfilter.cpp:69 #, fuzzy msgid "Filetype:" msgstr "Αρχείο" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" "\n" "αποθηκεύτηκε επιτυχώς στο:\n" #: src/downloader/httpdownloader.cpp:78 #, fuzzy msgid "" "\n" "successfully unzipped in:\n" msgstr "" "\n" "αποθηκεύτηκε επιτυχώς στο:\n" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "Αδύνατη η αποθήκευση\n" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" "\n" "προς:\n" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "Λήψη ολοκληρώθηκε" #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "Προειδοποίηση πλημμύρας" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "Προσθήκη bot" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Ψευδώνυμο:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "Τύπος bot:" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "Επιλέξτε τον τύπο του bot." #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 #, fuzzy msgid "value" msgstr "Τιμή" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "Προσθήκη Bot" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "Δεν βρέθηκαν bot στην εγκατάσταση σας." #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "Δεν βρέθηκαν bot" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "Εξισορρόπηση παικτών σε ομάδες" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "Μέθοδος" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "Ομοιόμορφο μοίρασμα βαθμών" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Τυχαίο" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "Ομάδες" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Καθόλου" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "Μέτρια" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "Πάντα" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" "Τοποθέτηση μελών της ίδιας ομάδας (παίκτες που έχουν το ίδιο τag ομάδας, " "όπως '[smurfzor]Alice' και '[smurfzor]Bob') στην ίδια συμμαχία.\n" "Καθόλου: τίποτα ιδιαίτερο για τις ομάδες.\n" "Μέτρια: τοποθέτηση μελών της ίδιας ομάδας στην ίδια συμμαχία, εκτός κι αν " "αυτό την κάνει άδικη.\n" "Πάντα: τοποθέτηση μελών της ίδιας ομάδας στην ίδια συμμαχία, ακόμα κι αν " "αυτό την κάνει άδικη." #: src/hosting/autobalancedialog.cpp:53 #, fuzzy msgid "Number of allies" msgstr "Αριθμός παικτών" #: src/hosting/autobalancedialog.cpp:56 #, fuzzy msgid "Auto select" msgstr "Επανασύνδεση" #: src/hosting/battlemaptab.cpp:69 #, fuzzy msgid "Select" msgstr "Επιλογή..." #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "Επιλογή" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "Τιμή" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "Ταχύτητα ανέμου" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "Δύναμη κυμάτων" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "Βαρύτητα" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "Ακτίνα εξαγωγέων" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "Μεγ. μέταλλο" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "Σταθερό" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "Επιλ. στο παιχνίδι" #: src/hosting/battlemaptab.cpp:103 #, fuzzy msgid "Chose before game" msgstr "Επιλ. στο παιχνίδι" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "Αρχικές θέσεις" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "Περιορισμοί μονάδων" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "Επιτρεπτές μονάδες" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "Οι μονάδες αυτής της λίστας θα είναι διαθέσιμες στο παιχνίδι." #: src/hosting/battleoptionstab.cpp:77 #, fuzzy msgid "Disable selected units." msgstr "Ενεργοποίηση όλων των μονάδων." #: src/hosting/battleoptionstab.cpp:81 #, fuzzy msgid "Re-enable selected units." msgstr "Ενεργοποίηση όλων των μονάδων." #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "Ενεργοποίηση όλων των μονάδων." #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "Περιορισμένες μονάδες" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "Οι μονάδες αυτής της λίστας δεν θα είναι διαθέσιμες στο παιχνίδι." #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "" #: src/hosting/battleoptionstab.cpp:242 #, fuzzy msgid "Unit restriction" msgstr "Περιορισμοί μονάδων" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "Ομάδα" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "Συμμαχία" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "Επίδομα Πόρων" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "Πλευρά" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "Ορισμός χρώματος" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "Ορισμός Επιδόματος Πόρων" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "Θεατής" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "Αποπομπή" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "Παρακαλώ εισάγετε μια τιμή από 0 εώς 100" #: src/hosting/battleroomlistctrl.cpp:750 #, fuzzy msgid "AI (bot)\n" msgstr "Προσθήκη bot" #: src/hosting/battleroomlistctrl.cpp:754 #, fuzzy msgid "Human\n" msgstr "Ομάν" #: src/hosting/battleroomlistctrl.cpp:759 #, fuzzy msgid "Spectator\n" msgstr "Θεατής" #: src/hosting/battleroomlistctrl.cpp:763 #, fuzzy msgid "Player\n" msgstr "Παίκτες:" #: src/hosting/battleroomlistctrl.cpp:768 #, fuzzy msgid "Host\n" msgstr "Οικοδεσπότης" #: src/hosting/battleroomlistctrl.cpp:772 #, fuzzy msgid "Client\n" msgstr "Πελάτης" #: src/hosting/battleroomlistctrl.cpp:777 #, fuzzy msgid "Ready\n" msgstr "Πάντα" #: src/hosting/battleroomlistctrl.cpp:781 #, fuzzy msgid "Not ready\n" msgstr "Δεν είναι έτοιμο" #: src/hosting/battleroomlistctrl.cpp:786 #, fuzzy msgid "In sync" msgstr "Ενεργοποίηση κάθετου συγχρονισμού" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "" "Οι παίκτες με τον ίδιο αριθμό ομάδας μοιράζονται των έλεγχο των μονάδων τους." #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" "Οι παίκτες με τον ίδιο αριθμό συμμαχίας συνεργάζονται για να πετύχουν τη " "νίκη." #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "Επιλέξτε ένα χρώμα για να ξεχωρίζουν οι μονάδες σας στο παιχνίδι" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "Επιλέξτε την φατριά σας" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "Παρακολουθήστε τη μάχη αντί να συμμετάσχετε" #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "Επανασύνδεση" #: src/hosting/battleroomtab.cpp:144 msgid "automatically unspec when there's a free slot" msgstr "" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "Είμαι έτοιμος" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "Επιλέξτε εδώ αν συμφωνείτε με τις ρυθμίσεις της μάχης." #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "Χρώμα" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" "Προεπισκόπηση του επιλεγμένου χάρτη. Διακρίνετε τις αρχικές θέσεις ή (αν " "έχουν ρυθμιστεί) τις αρχικές περιοχές." #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Φιλοξενία νέου..." #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Φιλοξενία νέας μάχης" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "Αποχώρηση από τη μάχη και επιστροφή στη λίστα μαχών" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "Έναρξη" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "Έναρξη μάχης" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "Προσθήκη Bot..." #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "Προσθήκη bot στο παιχνίδι" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "Αποτροπή συμμετοχής επιπλέον παιχτών στη μάχη" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Περιγραφή" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 #, fuzzy msgid "AutoSpect" msgstr "Επανασύνδεση" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Έναρξη" #: src/hosting/battleroomtab.cpp:209 msgid "Automatically start the battle when all players are ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:213 #, fuzzy msgid "Lock Balance" msgstr "Εξισορρόπηση" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 #, fuzzy msgid "Ring unsynced" msgstr "Ενεργοποίηση κάθετου συγχρονισμού" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 #, fuzzy msgid "Ring ..." msgstr "Κλήση" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "Δεν είναι έτοιμο" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 #, fuzzy msgid "Force spectate ..." msgstr "Αναγκαστική εκκίνηση;" #: src/hosting/battleroomtab.cpp:235 #, fuzzy msgid "Balance alliances" msgstr "Μόνο ο οικοδεσπότης μπορεί να εξισορροπήσει τις συμμαχίες." #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "Αυτόματη εξισορρόπηση παιχτών σε δύο ή περισσότερες συμμαχίες" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "Επιδιόρθωση χρωμάτων" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "Κάνει τα χρώματα των παικτών μοναδικά" #: src/hosting/battleroomtab.cpp:241 #, fuzzy msgid "Balance teams" msgstr "Εξισορρόπηση" #: src/hosting/battleroomtab.cpp:241 #, fuzzy msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "Αυτόματη εξισορρόπηση παιχτών σε δύο ή περισσότερες συμμαχίες" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "" #: src/hosting/battleroomtab.cpp:255 #, fuzzy msgid "Save" msgstr "Αποθήκευση..." #: src/hosting/battleroomtab.cpp:256 #, fuzzy msgid "Save a set of options." msgstr "Αποθήκευση λίστας περιορισμών." #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 #, fuzzy msgid "Delete" msgstr "Με ανάκλαση" #: src/hosting/battleroomtab.cpp:261 #, fuzzy msgid "Delete a set of options." msgstr "Αποθήκευση λίστας περιορισμών." #: src/hosting/battleroomtab.cpp:265 #, fuzzy msgid "Set default" msgstr "προεπιλογή" #: src/hosting/battleroomtab.cpp:266 msgid "Use the current set of options as game's default." msgstr "" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "Περιοχές" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "Επιλογή" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "Συνέχεια" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "Τέλος" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "Καταγωγή" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "Δεν υπάρχει ο χάρτης." #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 #, fuzzy msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" "Κάποιοι παίκτες δεν είναι έτοιμοι.\n" "Κλήση αυτών των παιχτών;" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "Δεν είναι έτοιμο" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "Επιλ. στο παιχνίδι" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Περιγραφή" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "Λήξη προθεσμίας Ping!" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "σφάλμα" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 #, fuzzy msgid "Delete preset" msgstr "Με ανάκλαση" #: src/hosting/battleroomtab.cpp:996 #, fuzzy msgid "Set game default preset" msgstr "προεπιλογή" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "Φιλοξενία νέας μάχης" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "Σύντομη περιγραφή του παιχνιδιού, θα εμφανιστεί στη λίστα μαχών." #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Περιγραφή" #: src/hosting/hostbattledialog.cpp:91 msgid "Automatically write the battle description when a user joins." msgstr "" #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "Επιλέξτε το mod που θέλετε να παίξετε." #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "Με κωδικό" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "Κωδικός για συμμετοχή στο παιχνίδι. Αφήστε κενό για ελεύθερη συμμετοχή" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "Θύρα" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "" "Θύρα UDP για φιλοξενία του παιχνιδιού. Εξ ορισμού χρησιμοποιείται η 8452." #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 #, fuzzy msgid "Randomly picks an available one" msgstr "μη διαθέσιμο" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "Αριθμός παικτών" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "Ο μέγιστος αριθμός παιχτών που θα επιτραπεί στη μάχη." #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "Διάτρηση" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "Διάτρηση NAT" #: src/hosting/hostbattledialog.cpp:185 #, fuzzy msgid "NAT traversal to use." msgstr "Διάτρηση NAT" #: src/hosting/hostbattledialog.cpp:190 msgid "Rank requirement" msgstr "" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 #, fuzzy msgid "Select the type of rank enforcement." msgstr "Επιλέξτε το mod που θέλετε να παίξετε." #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "Έναρξη φιλοξενίας της μάχης." #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 #, fuzzy msgid "You have to select a game first." msgstr "Πρέπει πρώτα να επιλέξετε ένα mod." #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "Δεν επιλέχθηκε mod." #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" "Χρησιμοποιείτε wxWidgets παλαιότερα από την έκδοση 2.8.\n" " Ο έλεγχος τείχους προστασίας δεν υποστηρίζεται.\n" " Η φιλοξενία παιχνιδιών μπορεί να μην δουλεύει." #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" "Ο εξυπηρετητής που χρησιμοποιείται για να ελεγχθεί η θύρα %d δεν είναι " "προσπελάσιμος.\n" "Η φιλοξενία παιχνιδιών μπορεί να μην δουλεύει με αυτή την ρύθμιση." #: src/hosting/hostbattledialog.cpp:427 #, fuzzy, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "Η μάχη δεν ξεκίνησε επειδή η επιλεγμένη θύρα (%d) δεν λαμβάνει εισερχόμενα " "πακέτα.\n" " Παρακαλώ ελέγξτε τις ρυθμίσεις διανεμητή και τείχους προστασίας ή αλλάξτε " "θύρα στον διάλογο.\n" "\n" "Αν αποτύχουν όλα, ενεργοποιήστε τη Διάτρηση NAT στις ρυθμίσεις φιλοξενίας." #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "Η μάχη δεν ξεκίνησε επειδή η επιλεγμένη θύρα (%d) δεν λαμβάνει εισερχόμενα " "πακέτα.\n" " Παρακαλώ ελέγξτε τις ρυθμίσεις διανεμητή και τείχους προστασίας ή αλλάξτε " "θύρα στον διάλογο.\n" "\n" "Αν αποτύχουν όλα, ενεργοποιήστε τη Διάτρηση NAT στις ρυθμίσεις φιλοξενίας." #: src/hosting/hostbattledialog.cpp:459 #, fuzzy msgid "Battle not started beacuse the game you selected could not be found. " msgstr "Η μάχη δεν ξεκίνησε επειδή το mod που επιλέξατε δεν βρέθηκε. " #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "Πρόβλημα στην εκκίνηση μάχης." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" "Δεν βρέθηκαν χάρτες στην εγκατάστασή σας. Αυτό μπορεί να συμβεί όταν είναι " "λάθος οι ρυθμίσεις του Spring." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "Δεν βρέθηκαν χάρτες" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "Δωμάτιο μάχης" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "Επιλογές" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 #, fuzzy msgid "Unit Restrictions" msgstr "Περιορισμοί μονάδων" #: src/hosting/mmoptionwindows.cpp:36 #, fuzzy msgid "Change option" msgstr "Επιλογές διεπαφής" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "" #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "" #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "" #: src/iconimagelist.cpp:322 #, fuzzy msgid "Game is closed." msgstr "Η συνομιλία έκλεισε." #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "" #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "" #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "" #: src/iconimagelist.cpp:326 #, fuzzy msgid "Game is in progress." msgstr "Λήψεις σε εξέλιξη: " #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "" #: src/iconimagelist.cpp:328 #, fuzzy msgid "Game is in progress and full." msgstr "Λήψεις σε εξέλιξη: " #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "" #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "" #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "" #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "" #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 #, fuzzy msgid "Newbies guide" msgstr "Νέος" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 #, fuzzy msgid "Joining a battle:\n" msgstr "Σύνδεση στην ίδια μάχη" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "Φιλοξενία νέας μάχης" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Πρόβλημα του Spring" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 msgid "Singleplayer gamee" msgstr "" #: src/introguide.cpp:110 msgid "Multiplayer gamee" msgstr "" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "Όλα τα αρχεία (*)|*" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "Πακέτα Εφαρμογών (*.app)|*.app|Όλα τα αρχεία (*.*)|*.*" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 #, fuzzy msgid "Disconnected from server, chat closed." msgstr "Άγνωστη απάντηση από τον εξυπηρετητή" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "Λήψεις σε εξέλιξη: " #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "Συνολικά εισερχόμενα: " #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "Ακύρωση λήψης" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "&Σύνδεση..." #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "&Αποσύνδεση" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 #, fuzzy msgid "&Save options" msgstr "Επιλογές διεπαφής" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "&Τερματισμός" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "Αυτόματη είσοδος σε κανάλια..." #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "Ρυθμίσεις Spring" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "Επιλογές διεπαφής" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "Είσοδος σε κανάλι..." #: src/mainwindow.cpp:164 #, fuzzy msgid "Channel &list" msgstr "Πληροφορίες καναλιού" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "Έναρξη prive συνομιλίας..." #: src/mainwindow.cpp:166 #, fuzzy msgid "Change &username" msgstr "Πληροφορίες καναλιού" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "" #: src/mainwindow.cpp:169 #, fuzzy msgid "&Reload maps/games" msgstr "Ανανέωση χαρτών/mod" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "Έλεγχος για νέα έκδοση" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "&Περί" #: src/mainwindow.cpp:178 #, fuzzy msgid "&System Info" msgstr "Πληροφορίες συστήματος" #: src/mainwindow.cpp:179 #, fuzzy msgid "&Change language" msgstr "Πληροφορίες καναλιού" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "Αναφορά προβλήματος..." #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "&Τεκμηρίωση" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "Εξυπηρετητής" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "&Εργαλεία" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "&Βοήθεια" #: src/mainwindow.cpp:500 msgid "You need to be connected to a server to view the channel list" msgstr "" #: src/mainwindow.cpp:500 #, fuzzy msgid "Not connected" msgstr "Κατάσταση: Συνδεμένο" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "Είσοδος σε κανάλι..." #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "Όνομα καναλιού" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "Έναρξη prive συνομιλίας..." #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "Όνομα χρήστη" #: src/mainwindow.cpp:540 #, fuzzy, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" "Το SpringLobby είναι ένας πελάτης lobby της μηχανής RTS Spring για πολλαπλά " "λειτουργικά περιβάλλοντα" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 #, fuzzy msgid "No files found" msgstr "Δεν βρέθηκαν χάρτες" #: src/mainwindow.cpp:656 #, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "" #: src/mainwindow.cpp:692 #, fuzzy msgid "This profile is write protected, please choose another name" msgstr "" "Αυτή η μάχη είναι προστατευμένη με κωδικό, παρακαλώ εισάγετε τον κωδικό:" #: src/mainwindow.cpp:703 #, fuzzy msgid "Which profile do you want to load?" msgstr "Ποιον λογαριασμό χρήστη θέλετε να διαγράψετε σήμερα;" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "Αφαίρεση..." #: src/mainwindow.cpp:767 msgid "Enter new nickname" msgstr "" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "Συνομιλία" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "Λίστα μαχών" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "" #: src/mainwindow.h:203 #, fuzzy msgid "Replays" msgstr "Πάντα" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 #, fuzzy msgid "Downloads" msgstr "Λήψη αρχείου" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "Ανανέωση" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "Λήψη αρχείου" #: src/mapctrl.cpp:897 msgid "side:" msgstr "πλευρά:" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "συμμαχία: %d" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "επίδομα: %d%%" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 msgid "Show" msgstr "" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" #: src/mapselectdialog.cpp:95 #, fuzzy msgid "Filter" msgstr "Αρχείο" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" #: src/mapselectdialog.cpp:100 #, fuzzy msgid "Map details" msgstr "Μεγ. μέταλλο" #: src/mapselectdialog.cpp:163 #, fuzzy msgid "Start positions" msgstr "Αρχικές θέσεις" #: src/mapselectdialog.cpp:261 #, fuzzy msgid "Minimum wind" msgstr "Κατώτερος βαθμός" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "" #: src/mapselectdialog.cpp:263 #, fuzzy msgid "Average wind" msgstr "Μέσος" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "" #: src/mapselectdialog.cpp:265 #, fuzzy msgid "Aspect ratio" msgstr "Θεατής" #: src/mapselectdialog.cpp:266 #, fuzzy msgid "Number of start positions" msgstr "Τυχαίες αρχικές θέσεις" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "Τύπος Αρχικής Θέσης" #: src/mmoptionswrapper.cpp:122 #, fuzzy msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" "Πως θα επιλέγουν οι παίκτες το που θα εμφανιστούν στον χάρτη\n" "0: σταθερές θέσεις στον χάρτη\n" "1: τυχαίες θέσεις στον χάρτη\n" "2: θα επιλέγουν μέσα στο παιχνίδι\n" "3: θα επιλέγουν στο lobby πριν ξεκινήσουν" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "Επιλ. στο παιχνίδι" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "Επιλ. στο παιχνίδι" #: src/mmoptionswrapper.cpp:132 #, fuzzy msgid "List of restricted units" msgstr "Περιορισμένες μονάδες" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "κ" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "χ" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "β" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "Εκτελέσιμα (*.exe)|*.exe|Όλα τα αρχεία (*.*)|*.*" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "Χρώματα και γραμματοσειρά" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "Χρήση χρωμάτων συστήματος" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "Κανονικό" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "Φόντο" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "Ενέργεια" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "Επισήμανση" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "Είσοδος/Έξοδος" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "Τα μηνύματά μου" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "Πελάτης" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "Χρονόσημο" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "Ειδοποίηση" #: src/options/chatoptionstab.cpp:258 #, fuzzy msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" "[19:35] ** Server ** Connected to TAS Server.\n" "[22:30] γεια σας\n" "[22:30] ** Dude2 εισήλθε στο κανάλι.\n" "[22:30] * Dude2 του αρέσουν τα χρώματά του\n" "[22:45] Dude2: πλάκα κάνεις!\n" "[22:46] Θα μπορούσαν να είναι καλύτερα, πρέπει να τα πειράξω λίγο " "ακόμα...\n" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "Γραμματοσειρά:" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "προεπιλογή" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "Επιλογή..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "Συμπεριφορά" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "Χρήση ήχων ειδοποίησης" #: src/options/chatoptionstab.cpp:300 #, fuzzy msgid "Copy server messages in current channel" msgstr " \"/channels\" - Εμφανίζει μια λίστα των ενεργών καναλιών." #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "Καταγραφές συνομιλιών" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "Αποθήκευση καταγραφών συνομιλιών" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "Επισήμανση λέξεων" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "Λέξεις προς επισήμανση σε συνομιλίες:" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "Εισάγετε λίστα χωρισμένη με \";\"" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "Επιπλέον χρήση ήχων/αναβόσβημα τίτλου παραθύρου " #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "Αναστολή στην εκκίνηση παιχνιδιού" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "Παύση όλων των λήψεων" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "Περιορισμός ταχυτήτων:" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "Αποστολή (KB/s)" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "Λήψη (KB/s)" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "Αριθμοί" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "Μέγιστη ταχύτητα αποστολής σε KB/sec(-1 για άπειρο)" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "Μέγιστη ταχύτητα λήψης σε KB/sec(-1 για άπειρο)" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "Χρήση θύρας για συνδέσεις torrent" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "Μέγιστος αριθμός ταυτόχρονων συνδέσεων" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 #, fuzzy msgid "Remove" msgstr "Αφαίρεση..." #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:61 #, fuzzy msgid "Rename.." msgstr "Αφαίρεση..." #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:70 #, fuzzy msgid "Add New.." msgstr "Προσθήκη Bot..." #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "" #: src/options/groupoptionspanel.cpp:84 #, fuzzy msgid "Group Actions" msgstr "Ενέργεια" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "" #: src/options/groupoptionspanel.cpp:95 #, fuzzy msgid "Ignore Chat" msgstr "Ανοιχτή Συνομιλία" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:101 #, fuzzy msgid "Notify Hosted Battles" msgstr "Φιλοξενία νέας μάχης" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:134 #, fuzzy msgid "Highlight Color" msgstr "Επισήμανση λέξεων" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "" #: src/options/groupoptionspanel.cpp:163 #, fuzzy msgid "Add.." msgstr "Προσθήκη Bot..." #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "" #: src/options/groupoptionspanel.cpp:170 #, fuzzy msgid "Remove users from group" msgstr "Διαγραφή Λογαριασμού Χρήστη" #: src/options/groupoptionspanel.cpp:264 #, fuzzy msgid "Name of new group:" msgstr "Όνομα χρήστη" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "Περιηγητής ιστοσελίδων" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "Εξ ορισμού" #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "Χρήση της ρύθμισης συστήματος" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "Προσδιορίστε:" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "Προσδιορίστε τον περιηγητή που θέλετε να χρησιμοποιήσετε" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "Αναζήτηση" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "Χρήση διαλόγου αρχείων για αναζήτηση του περιηγητή" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 #, fuzzy msgid "Use a file dialog to find the editor binary" msgstr "Χρήση διαλόγου αρχείων για αναζήτηση του περιηγητή" #: src/options/lobbyoptionstab.cpp:91 #, fuzzy msgid "Autoconnect" msgstr "Επανασύνδεση" #: src/options/lobbyoptionstab.cpp:94 #, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" #: src/options/lobbyoptionstab.cpp:96 #, fuzzy msgid "Autoconnect on lobby start" msgstr "Σύνδεση στον εξυπηρετητή lobby" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:104 #, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "" #: src/options/lobbyoptionstab.cpp:120 #, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "" #: src/options/lobbyoptionstab.cpp:130 #, fuzzy msgid "Tooltips" msgstr "&Εργαλεία" #: src/options/lobbyoptionstab.cpp:131 #, fuzzy msgid "Show Tooltips?" msgstr "Εμφάνιση συμβουλών" #: src/options/lobbyoptionstab.cpp:134 #, c-format msgid "Requires %s restart to take effect." msgstr "" #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" #: src/options/lobbyoptionstab.cpp:144 #, fuzzy msgid "Match exact" msgstr "Αρπαγή εξαιρέσεων AI (exceptions)" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "Χρήση ήχων ειδοποίησης" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 #, fuzzy msgid "Display time for popup notifications in seconds" msgstr "Χρήση ήχων ειδοποίησης" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 #, fuzzy msgid "Start tab" msgstr "Αρχικό Μέταλλο" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "Επιλέξτε το εκτελέσιμο του περιηγητή" #: src/options/lobbyoptionstab.cpp:282 #, fuzzy msgid "Choose a editor browser executable" msgstr "Επιλέξτε το εκτελέσιμο του περιηγητή" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "Spring" #: src/options/mainoptionstab.cpp:73 #, fuzzy msgid "General" msgstr "Σενεγάλη" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "Επαναφορά" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "Εφαρμογή" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "Εκτελέσιμο του Spring" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "Τοποθεσία" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "Αναζήτηση" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "Μονάδα UnitSync" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "Αυτόματη Ρύθμιση" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "Επιλέξτε το εκτελέσιμο του Spring" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "Μονάδα" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "Όλα τα αρχεία" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "Επιλέξτε τη μονάδα UnitSync" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 msgid "Reloading unitsync" msgstr "" #: src/options/springoptionstab.cpp:315 #, fuzzy, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" "Αποτυχία φόρτωσης μονάδας UnitSync.\n" "\n" "Παρακαλώ επιβεβαιώστε τη ρύθμιση UnitSync." #: src/options/springoptionstab.cpp:355 #, fuzzy msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "Καμία ενέργεια (χρησιμοποιήστε το μόνο αν είστε απόλυτα σίγουροι)" #: src/options/springoptionstab.cpp:355 #, fuzzy msgid "Data dir wizard" msgstr "Οδηγός πρώτης φοράς" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "Επιλογή φακέλου" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" "Κάτι πήγε στραβά κατά τη δημιουργία των φακέλων\n" "Παρακαλώ δημιουργήστε με το χέρι τους παρακάτω φάκελους:" #: src/playback/playbackfilter.cpp:60 #, fuzzy msgid "Filter settings" msgstr "Αποθήκευση ρυθμίσεων" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Μόνο χάρτες που έχω" #: src/playback/playbackfilter.cpp:164 #, fuzzy msgid "Filesize in KB:" msgstr "μέγεθος (MB)" #: src/playback/playbackfilter.cpp:190 #, fuzzy msgid "Duration (hh:mm:ss):" msgstr "Διάρκεια:" #: src/playback/playbacklistctrl.cpp:42 #, fuzzy msgid "Date" msgstr "Με ανάκλαση" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Ορισμός πρόσβασης..." #: src/playback/playbacklistctrl.cpp:46 #, fuzzy msgid "Duration" msgstr "Διάρκεια:" #: src/playback/playbacklistctrl.cpp:47 #, fuzzy msgid "Spring Version" msgstr "Πρόβλημα του Spring" #: src/playback/playbacklistctrl.cpp:48 #, fuzzy msgid "Filesize" msgstr "μέγεθος (MB)" #: src/playback/playbacklistctrl.cpp:48 #, fuzzy msgid "Filesize in kilobyte" msgstr "μέγεθος (MB)" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "Αρχείο" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "Κατέβασμα mod" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "Φόρτωση..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "Πάντα" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "savegame" msgstr "Αποθήκευση..." #: src/playback/playbacktab.cpp:288 #, fuzzy msgid "Couldn't get your spring versions from any unitsync library." msgstr "" "Δεν βρέθηκε η έκδοση του Spring από τη μονάδα UnitSync.\n" "\n" "Τα δικτυακά παιχνίδια θα απενεργοποιηθούν." #: src/playback/playbacktab.cpp:306 #, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "" #: src/playback/playbacktab.cpp:319 #, fuzzy msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" "Θέλετε να δοκιμάσω να το κατεβάσω για εσάς;\n" "Μπορείτε να δείτε την εξέλιξη στην καρτέλα \"Διαχειριστής Λήψεων.\"" #: src/playback/playbacktab.cpp:323 #, fuzzy msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" "Πρέπει να κατεβάσετε το mod πριν να συμμετάσχετε σε αυτό το παιχνίδι.\n" "\n" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" #: src/playback/playbacktab.cpp:356 #, fuzzy msgid "Invalid replay" msgstr "Μη έγκυρη θύρα" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "Εκδιωχθήκατε από τη μάχη!" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "Αποπομπή από Οικοδεσπότη" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr "" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr "" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 #, fuzzy msgid "There was an error downloading for the latest version.\n" msgstr "" "Παρουσιάστηκε πρόβλημα κατά τον έλεγχο για νέα έκδοση.\n" "Παρακαλώ προσπαθήστε αργότερα.\n" "Αν το πρόβλημα παραμένει, παρακαλώ χρησιμοποιήστε το Βοηθεία -> Αναφορά " "Προβλήματος για να αναφέρετε αυτό το πρόβλημα." #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "Ειδοποίηση" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "Μη έγκυρος αριθμός" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 #, fuzzy msgid "File doesn't exit" msgstr "Δεν υπάρχει ο χάρτης." #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Ξεκίνησε" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "Επανασύνδεση" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 #, fuzzy msgid "Unknown Error" msgstr "άγνωστο" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 #, fuzzy msgid "Download complete, location is: " msgstr "Λήψη ολοκληρώθηκε" #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 #, fuzzy msgid "Download complete." msgstr "Λήψη ολοκληρώθηκε" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 #, fuzzy msgid "Couldn't launch installer. File location is: " msgstr "Αδυναμία εκκίνησης περιηγητή. Το URL είναι: " #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 #, fuzzy msgid "Couldn't launch installer." msgstr "Αδυναμία εκκίνησης περιηγητή." #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "Επανασύνδεση" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "Επανασύνδεση" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 msgid "Tries to connect to the next server in the list." msgstr "" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 #, fuzzy msgid "Do nothing" msgstr "Διάτρηση" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "" #: src/selectusersdialog.h:67 #, fuzzy msgid "Select Users" msgstr "Επιλογή όλων" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 #, fuzzy msgid " is online" msgstr " Ο χρήστης είναι εκτός σύνδεσης." #: src/serverevents.cpp:165 msgid " is now " msgstr "" #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "OnUserStatus() απέτυχε ! (εξαίρεση)" #: src/serverevents.cpp:224 #, fuzzy msgid " just went offline" msgstr " Ο χρήστης είναι εκτός σύνδεσης." #: src/serverevents.cpp:259 #, fuzzy msgid " opened battle " msgstr " εισήλθε στο " #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "Η είσοδος στο κανάλι απέτυχε" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "Απέτυχε η είσοδος στο κανάλι " #: src/serverevents.cpp:583 msgid " because: " msgstr " επειδή: " #: src/serverevents.cpp:826 msgid "Server Message" msgstr "Μήνημα Εξυπηρετητή" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr " έχει διεύθυνση IP=%s" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr " δεν υποστηρίζει πραγματικά την Διάτρηση NAT" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "" #: src/serverevents.cpp:928 #, fuzzy, c-format msgid "%s mutelist" msgstr "Λίστα μαχών" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "" #: src/serverevents.cpp:984 #, fuzzy msgid "Download update" msgstr "Λήψη ολοκληρώθηκε" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 msgid "Automatically moved to new battle" msgstr "" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" "Μπορείτε να σύρετε το εικονίδιο ήλιου/bot για να ορίσετε την αρχική θέση.\n" " Πηγαίνετε το ποντίκι πάνω από το εικονίδιο για να αλλάξετε μεριά, συμμαχία " "και επίδομα." #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "Προσθήκη bot..." #: src/singleplayertab.cpp:99 #, fuzzy msgid "Spectate only" msgstr "Θεατής" #: src/singleplayertab.cpp:102 #, fuzzy msgid "Random start positions" msgstr "Τυχαίες αρχικές θέσεις" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "-- Επιλέξτε κάποιο --" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 #, fuzzy msgid "Game setup error" msgstr "Σφάλμα ρύθμισης παιχνιδιού" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "Πρέπει να επιλέξετε έναν χάρτη πρώτα." #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" "Συνέχιση χωρίς προσθήκη bot πρώτα;\n" " Το παιχνίδι θα τελειώσει εξαιρετικά γρήγορα.\n" " " #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "Δεν προστέθηκε Bot" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "Δεν μπορείτε να εκκινήσετε ξανά το Spring όσο αυτό ήδη τρέχει." #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 #, fuzzy msgid "Coulnd't load required unitsync library" msgstr "Επιλέξτε μια μονάδα unitsync" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 #, fuzzy msgid "Fatal error" msgstr "Κρίσιμο σφάλμα" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" "Η εφαρμογή προκάλεσε ένα μοιραίο σφάλμα και θα τερματιστεί\n" "Η δημιουργία αναφοράς προβλήματος δεν είναι δυνατή\n" "\n" "παρακαλώ χρησιμοποιήστε μια έκδοση της μονάδας wxWidgets\n" "που να υποστηρίζει το wxUSE_DEBUGREPORT" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "Κρίσιμο σφάλμα" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 #, fuzzy msgid "Ignore chat" msgstr "Ανοιχτή Συνομιλία" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 #, fuzzy msgid "Battle Autokick" msgstr "Λίστα μαχών" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 #, fuzzy msgid "Friends" msgstr "Αναζήτηση" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "Ταχύτητα ροδέλας κύλισης" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" "Μεγαλύτερες τιμές σημαίνουν γρηγορότερη μεγέθυνση με τη ροδέλα του " "ποντικιού.\n" "Αρνητικές τιμές αντιστρέφουν την φορά μεγέθυνσης.\n" "Φέρει διαφορετικά αποτελέσματα ανάλογα με τον τύπο κάμερας!" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "Μέγεθος χάρτη σκιων" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" "μεγαλύτερη τιμή = καλύτερες σκιες\n" "επιτρεπτές τιμες: 1024, 2048, 4096, 8192" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "Απόσταση εμφάνισης δέντρων" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "Ορίζει τη μέγιστη απόσταση που θα σχεδιάζονται τα δέντρα" #: src/springsettings/ctrlconstants.h:229 msgid "Terrain detail" msgstr "Λεπτομέρειες εδάφους" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "μεγαλύτερες τιμές = περισσότερες λεπτομέρειες εδάφους" #: src/springsettings/ctrlconstants.h:230 #, fuzzy msgid "Unit LOD distance" msgstr "Απόσταση εικονιδίων μονάδων" #: src/springsettings/ctrlconstants.h:230 #, fuzzy msgid "higher value = units will remain detailed even when zooming out" msgstr "μεγαλύτερες τιμές = πιο λεπτομερείς μονάδες" #: src/springsettings/ctrlconstants.h:231 msgid "Grass detail" msgstr "Λεπτομέρεια χορταριού" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "higher value = more detailed grass" msgstr "μεγαλύτερες τιμές = πιο λεπτομερές χόρτο" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "Decal εδάφους" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "Απόσταση εικονιδίων μονάδων" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" "Προσδιορίζει μέχρι πια απόσταση θα σχεδιάζονται πλήρως οι μονάδες\n" "μεγαλύτερες τιμές = μεγαλύτερη απόσταση = περισσότερες μονάδες σχεδιάζονται " "ταυτόχρονα" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "Μέγιστος αριθμός ταυτόχρονων σωματιδίων" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "περιορίζει το πόσα σωματίδια (κομματάκια) θα εμφανίζονται ταυτόχρονα" #: src/springsettings/ctrlconstants.h:236 #, fuzzy msgid "Max nano simultaneous particles" msgstr "Μέγιστος αριθμός ταυτόχρονων σωματιδίων" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "Εκτέλεση σε πλήρη οθόνη" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "εκτέλεση σε πλήρη οθόνη ή σε παράθυρο;" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "Λειτουργία διπλής οθόνης" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "αν έχετε δύο οθόνες μπορείτε να τις χρησιμοποιήσετε ταυτόχρονα" #: src/springsettings/ctrlconstants.h:245 #, fuzzy msgid "Enable v-sync" msgstr "Ενεργοποίηση κάθετου συγχρονισμού" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "Ενεργός/ανενεργός κάθετος συγχρονισμός (V-Sync)" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "Πίνακας βάθους (Z-buffer) ανάλυσης 16-bit" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "placeholder" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "Πίνακας βάθους (Z-buffer) ανάλυσης 24-bit" #: src/springsettings/ctrlconstants.h:259 #, fuzzy msgid "Full-scene anti-aliasing samples" msgstr "Δείγματα εξομάλυνσης γωνιών πλήρους οθόνης (FSAA)" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "πόση εξομάλυνση γωνιών πρέπει να εφαρμοστεί" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "Μέγιστος αριθμός ταυτόχρονων ήχων" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" "Μέγιστος αριθμός διαφορετικών ήχων που θα αναπαράγονται ταυτόχρονα\n" "Ορίστε ως 0 για να απεργοποιηθεί πλήρως ο ήχος." #: src/springsettings/ctrlconstants.h:273 #, fuzzy msgid "Master sound volume" msgstr "Γενική ένταση ήχου" #: src/springsettings/ctrlconstants.h:273 #, fuzzy msgid "master sound volume" msgstr "Γενική ένταση ήχου" #: src/springsettings/ctrlconstants.h:274 #, fuzzy msgid "General sound volume" msgstr "Γενική ένταση ήχου" #: src/springsettings/ctrlconstants.h:274 #, fuzzy msgid "general volume relative to master volume" msgstr "Ένταση απαντήσεων μονάδων σχετική προς την Γενική ένταση ήχου" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "Ένταση απαντήσεων μονάδων" #: src/springsettings/ctrlconstants.h:275 #, fuzzy msgid "reply volume relative to master volume" msgstr "Ένταση απαντήσεων μονάδων σχετική προς την Γενική ένταση ήχου" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "Battle volume" msgstr "Δωμάτιο μάχης" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "battle volume relative to global volume" msgstr "Ένταση απαντήσεων μονάδων σχετική προς την Γενική ένταση ήχου" #: src/springsettings/ctrlconstants.h:277 #, fuzzy msgid "User interface volume" msgstr "Ένταση απαντήσεων μονάδων" #: src/springsettings/ctrlconstants.h:277 #, fuzzy msgid "ui volume relative to global volume" msgstr "Ένταση απαντήσεων μονάδων σχετική προς την Γενική ένταση ήχου" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "Σκιές (αργό)" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "Ενεργοποίηση σκιών;" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "Τρισδιάστατα δέντρα" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" "θέλετε πιο όμορφα δέντρα;\n" "απαιτεί Geforce 2/Radeon 8500/Intel 830 ή μεταγενέστερες κάρτες γραφικών" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "Σύννεφα υψηλής ανάλυσης" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" "θέλετε πιο όμορφο ουρανό;\n" "απαιτεί Geforce 5/Radeon 9500/Intel 915 ή μεταγενέστερες κάρτες γραφικών" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "Δυναμικά σύννεφα (αργό)" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "θέλετε κινούμενα σύννεφα στον ουρανό;" #: src/springsettings/ctrlconstants.h:291 msgid "Reflective units" msgstr "Ανάκλαση στις μονάδες" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" "γυαλιστερές μονάδες;\n" "απαιτεί Geforce 5/Radeon 9500/Intel 915 ή μεταγενέστερες κάρτες γραφικών" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "" "Να μην χρησιμοποιούνται σκιαστές (shaders) όταν σχεδιάζονται χάρτες SM3" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "προβλήματα με χάρτες sm3; ενεργοποιήστε αυτό" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "Ενεργοποίηση υποστήριξης LuaShader" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "για cool εφέ" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "Υψηλής ανάλυσης texture Οπτικής Επαφής" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "πιο ομαλές επικαλύψεις Οπτικής Επαφής" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "Σχεδίαση ομαλών σημείων" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "να εξομαλύνονται οι γωνίες σημείων" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "Σχεδίαση ομαλών γραμμών" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "να εξομαλύνονται οι γωνίες γραμμών" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "Έκδοση εντολών στον υποχάρτη" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "Δώστε εντολές στον υποχάρτη όπως θα κάνατε " #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "Εμφάνιση εντολών στον υποχάρτη" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "η εξ ορισμού τιμή είναι \"on\"" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "Σχεδίαση εικονιδίων στον υποχάρτη" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "Σχεδίαση δεικτών στον υποχάρτη" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "Υποχάρτης στα αριστερά (μονή οθόνη)" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 msgid "left is the default" msgstr "εξ ορισμού είναι αριστερά" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "Υποχάρτης στα αριστερά (διπλή οθόνη)" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "Απλοποιημένα χρώματα υποχάρτη" #: src/springsettings/ctrlconstants.h:312 msgid "Use less colors" msgstr "Χρήση λιγότερων χρωμάτων" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "Χρώματα ομάδας για σπράυ των nano-turret" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "" "Να χρησιμοποιούνται τα χρώματα της ομάδας για τα σωματίδια των nano-turret;" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "Χρωματιστός υψομετρικός χάρτης" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "κάνει πιο εμφανείς τις υψομετρικές διαφορές" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "Εμφάνιση χρόνου παιχνιδιού" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" "απαιτεί να είναι ορισμένο το \"Ενεργοποίηση LuaWidgets\".\n" "Εμφανίζεται στην κάτω δεξιά γωνία" #: src/springsettings/ctrlconstants.h:320 msgid "Show in-game player information" msgstr "Εμφάνιση πληροφοριών παικτών" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "Εμφάνιση ρυθμού καρέ (FPS)" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "Επιδιόρθωση σχεδίασης κατά το Alt-Tab" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "Μην το αλλάζετε αν δεν χρειαστεί" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "Απενεργοποίηση των μονάδων Βοηθητικής Λογικής" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" "Απενεργοποιεί τα Economy AI κλπ.\n" "Αν ενεργοποιηθεί μπορεί να δημιουργήσει προβλήματα με το LuaUI." #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "Ενεργοποίηση κύλισης στις άκρες του παραθύρου" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "Κύλισης της οθόνης όταν το ποντίκι φτάνει τις άκρες της οθόνης." #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "Αντιστροφή Ποντικιού" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "Αντιστρέφει τον κάθετο άξονα του ποντικιού σε λειτουργία FPS" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "Υπερυψωμένη κάμερα" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "" "ορίστε την ταχύτητα κύλισης (ποντίκι + πληκτρολόγιο) για αυτή τη λειτουργία" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "Περιστρεφόμενη υπερυψωμένη κάμερα" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "Κάμερα Total War" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "Κάμερα πρώτου πλάνου" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "Ελεύθερη κάμερα" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" "Να γίνει το εξ ορισμού όταν ξεκινάει το Spring.\n" "Μπορεί να αλλαχθεί μέσα στο παιχνίδι." #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "Βαθμός αναλυτικότητας κονσόλας (0=ελαχ,10=μεγ)" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "Πόσο αναλυτικές πληροφορίες να εκδίδονται;" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "Αρπαγή εξαιρέσεων AI (exceptions)" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "απενεργοποιήστε για εκσφαλμάτωση AI" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "Βασική" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" "Η επιλογή μεγαλύτερης ποιότητας από την βασική\n" "μπορεί να επηρεάσει δραματικά την απόδοση του Spring,\n" "ανάλογα με την ισχύ της κάρτας γραφικών σας,\n" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective" msgstr "Με ανάκλαση" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "Με ανάκλαση και διάθλαση" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "Δυναμική" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "Αντιστροφή κάθετου άξονα ποντικιού" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "το πάνω/κάτω γίνεται κάτω/πάνω" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "Υποστήριξη υποχάρτη για ποντίκια με 3 πλήκτρα" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" "αν δεν θέλετε να μπορείτε να χρησιμοποιείτε εκείνο το κουμπί, " "απενεργοποιήστε το εδώ" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "Υπερυψωμένη" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "Στατική οπτική πουλιού" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "Περιστρεφόμενη υπερυψωμένη" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" "Ίδια με την υπερυψωμένη, αλλά μπορείτε να περιστρέφεστε γύρω από τον άξονα " "ύψους" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "Total war" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "Κάμερα από πάνω, με δυνατότητα κλίσης στον οριζόντιο άξονα" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "Πρώτου προσώπου" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "Κάμερα από την οπτική της μονάδας" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "Τροποποιήστε τη θέα όπως θέλετε" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "πλάτος οθόνης" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "ύψος οθόνης" #: src/springsettings/ctrlconstants.h:415 #, fuzzy msgid "Blur reflection" msgstr "Με ανάκλαση" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 #, fuzzy msgid "Shore waves" msgstr "Ενεργοποίηση σκιών;" #: src/springsettings/ctrlconstants.h:417 #, fuzzy msgid "Enables shorewaves" msgstr "Ενεργοποίηση σκιών;" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "Με ανάκλαση" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 #, fuzzy msgid "Reflection texture size" msgstr "Με ανάκλαση" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "περιορισμοί" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 #, fuzzy msgid "off" msgstr "Κλειστό" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "Συνδυασμένες Επιλογές" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "Ποιότητα σχεδίασης / Λειτουργία video" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "Λεπτομέρεια σχεδιάσης" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "Επιλογές διεπαφής" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "Ήχος" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 #, fuzzy msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" "Οι αλλαγές που τυχόν κάνετε στις καρτέλες Ποιότητα/Λεπτομέρειες σε\n" " λειτουργία για προχωρημένους θα χαθούν αν αλλάξετε τις απλές ρυθμίσεις\n" "μετέπειτα. Επίσης, αυτές οι αλλαγές ΔΕΝ αντικατοπτρίζονται από τις\n" "επιλογές στην καρτέλα Συνδυασμένων επιλογών.\n" "(αυτό το μήνυμα μπορεί να απενεργοποιηθέι από το μενού \"Αρχείο\")" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "Σφάλμα!" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "Αποθήκευση των ρυθμίσεων του Spring πριν την έξοδο;" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "Απαιτείται επιβεβαίωση" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "Ρυθμίσεις Spring (απλή λειτουργία)" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "Αποθήκευση ρυθμίσεων" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "Επαναφορά αρχικών ρυθμίσεων" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "Απενεργοποίηση προειδοποίησης λειτουργίας για προχωρημένους" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "Έξοδος" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "Απλό (λιγότερες επιλογές)" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "Για προχωρημένους (όλες οι επιλογές)" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "Περί" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "Επαφή" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "Μνεία" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "Αναφορά σφάλματος" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "Κατάσταση" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "Βοήθεια" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "Επαναφορά ΟΛΩΝ των ρυθμίσεων στις αρχικές τιμές;" #: src/springsettings/frame.cpp:315 #, fuzzy msgid "(simple mode)" msgstr "Ρυθμίσεις Spring (απλή λειτουργία)" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "Υπόδειξη" #: src/springsettings/frame.cpp:367 #, fuzzy msgid "(expert mode)" msgstr "Αλλαγή σε λειτουργία για προχωρημένους" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "Το SpringSettings είναι ένα γρaφικό κέλυφος για τη ρύθμιση του Spring" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "Kloot" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "The SpringLobby team" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "everyone reporting bugs/suggestions" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "Μη έγκυρη θύρα" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 #, fuzzy msgid "Hotkey Error" msgstr "Σφάλμα βοήθειας" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 #, fuzzy msgid "Enter new command:" msgstr "Εντολές συνομιλίας:" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 #, fuzzy msgid "Hotkey SaveSettings error" msgstr "Σφάλμα SpringSettings" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "Δεν βρέθηκαν χάρτες" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "Διαδρομή για τη μονάδα unitsync" #: src/springsettings/panel_pathoption.cpp:34 #, fuzzy msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" "Υπήρξε κάποιο πρόβλημα κατά την ανάκτηση των ρυθμίσεών σας.\n" "Παρακαλώ ελέξτε αν η παρακάτω διαδρομή είναι σωστή.\n" "Μετά επιλέξτε το \"Χρήση αυτής της διαδρομής\" για να\n" "προσπαθήσετε ξανά." #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "Χρήση αυτής της διαδρομής" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "libunitsync.so στο Linux, unitsync.dll στα Windows" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "Ρυθμίσεις διαδρομής" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "Επιλέξτε μια μονάδα unitsync" #: src/springsettings/panel_pathoption.cpp:96 #, fuzzy msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" "Αδύνατη η φόρτωση της μονάδας unitsync.\n" "Παρακαλώ επιβεβαιώστε τη ρύθμιση unitsync.\n" "Η έκδοση του Spring πρέπει να είναι τουλάχιστον 0.76,\n" "διαφορετικά αυτό θα αποτύχει σε κάθε περίπτωση." #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "χαμηλή" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "μεσαία" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "υψηλή" #: src/springsettings/presets.h:45 msgid "very low" msgstr "πολύ χαμηλή" #: src/springsettings/presets.h:45 msgid "very high" msgstr "πολύ υψηλή" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "Αδυναμία εκκίνησης του εξ ορισμού περιηγητή" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "Αδυναμία εκκίνησης περιηγητή. Το URL είναι: " #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "Αδυναμία εκκίνησης περιηγητή." #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "Αδύνατη η προσπέλαση των ρυθμίσεων σας.\n" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "Αδύνατη η αποθήκευση, το unitsync δεν φορτώθηκε σωστά" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "Σφάλμα SpringSettings" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "Επιλογές Ήχου" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "Ανάλυση Οθόνης" #: src/springsettings/tab_quality_video.cpp:166 #, fuzzy msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" "Αν μια επιλογή χρειάζεται ειδικό hardware για να λειτουργήσει,\n" "θα αναφέρεται στην υπόδειξη." #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "Ποιότητα Νερού" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "Ανάλυση σε bit" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "Επιλογές Ποιότητας Σχεδίασης" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "Επιλογές Λειτουργίας Video" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "Επιλογές Εξομάλυνσης Γωνιών" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "Πίνακας Βάθους (Ζ-Buffer)" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "Επίπεδα λεπτομερειών σχεδίασης" #: src/springsettings/tab_simple.cpp:40 #, fuzzy msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" "Αυτές οι επιλογές σας δίνουν τη δυνατότητα να ελέγξετε χονδρικά\n" "τη σχεδίαση του Spring. Δοκιμάστε να τις ελαττώσετε για μεγαλύτερη\n" "ταχύτητα. Πλήρης έλεγχος σε όλες τις ρυθμίσεις είναι διαθέσιμος στη\n" "λειτουργία \"Για προχωρημένους\", κάνετε κλικ είτε στο κουμπί στα\n" "δεξιά είτε χρησιμοποιήστε το μενού \"Λειτουργία\" στην μπάρα μενού.\n" "Μπορείτε να επιστρέψετε σε αυτή τη λειτουργία κάθε στιγμή\n" "επιλέγοντας \"Απλή λειτουργία\" από το μενού \"Λειτουργία\". Αν\n" "συναντήσετε μηνύματα λάθους σχετικά με τα γραφικά καθώς\n" "εκτελείται το Spring μπορεί να χρειαστεί να απενεργοποιήσετε\n" "κάποιες επιλογές στη λειτουργία για προχωρημένους.\n" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "Ποιότητα γραφικών" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "Λεπτομέρεια γραφικών" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "Ανάλυση οθόνης" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "Αλλαγή σε λειτουργία για προχωρημένους" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr " (τρέχουσα)" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" "Θέτει όλες τις επιλογές ποιότητας σε εξ ορισμού τιμές ανάλογα με την επιλογή " "σας." #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" "Θέτει όλες τις επιλογές λεπτομερειών σε εξ ορισμού τιμές ανάλογα με την " "επιλογή σας." #: src/springsettings/tab_simple.cpp:99 #, fuzzy msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" "Επιλέξτε την ανάλυση που ταιριάζει στην/στις οθόνες σας.\n" "Η επιλογή αναλύσης διπλής οθόνης θα ενεργοποιήσει αυτόματα τη λειτουργία " "διπλής οθόνης.\n" "Αν η κατάλληλη ανάλυση δεν είναι διαθέσιμη μπορείτε να την ορίσετε με το " "χέρι στη\n" "λειτουργία για προχωρημένους. Σ'αυτή την περίπτωση παρακαλώ επικοινωνήστε με " "τον\n" "δημιουργό του προγράμματος ώστε αυτή να προστεθεί σε μελλοντικές εκδόσεις." #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "Πληροφορίες" #: src/springsettings/tab_ui.cpp:37 #, fuzzy msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" "Θέτοντας τη μπάρα στο 0 θα εξαιρέσει αυτή τη\n" "λειτουργία από τις εναλλαγές εντός του παιχνιδιού." #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "Ταχύτητες Κύλισης (ποντίκι & πληκτρολόγιο)" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "Αρχική Λειτουργία Κάμερας" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "Άλλες επιλογές διεπαφής" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "Μεγέθυνση" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "Επιτρεπτές μονάδες" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "Λήξη χρόνου σύνδεσης" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "Άγνωστη απάντηση από τον εξυπηρετητή" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" "Αποτυχία Διάτρησης NAT, αυτή η μάχη μπορεί να μην δουλέψει για έσας ή άλλους " "παίκτες." #: src/tdfcontainer.cpp:131 msgid "line " msgstr "" #: src/tdfcontainer.cpp:131 msgid " , column " msgstr "" #: src/ui.cpp:175 msgid "Server password" msgstr "Κωδικός εξυπηρετητή" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "Επιτυχής εγγραφή." #: src/ui.cpp:294 msgid "Registration successful" msgstr "Επιτυχής εγγραφή" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "Η εγγραφή απέτυχε, ο λόγος ήταν:\n" #: src/ui.cpp:458 msgid "Help error" msgstr "Σφάλμα βοήθειας" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, fuzzy, c-format msgid "%s commands help." msgstr "Βοήθεια εντολών SpringLobby." #: src/ui.cpp:465 msgid "Global commands:" msgstr "Γενικές εντολές:" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr " \"/away\" - Ορίζει την κατάσταση σας ως μακρυά από τον υπολογιστή." #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr " \"/back\" - Ορίζει την κατάσταση σας ως κοντά στον υπολογιστή." #: src/ui.cpp:468 #, fuzzy msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" " \"/changepassword παλιόςκωδικός νέοςκωδικός\" - Αλλάζει τον κωδικό του " "τρέχοντος λογαριασμού." #: src/ui.cpp:469 #, fuzzy msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" " \"/changepassword παλιόςκωδικός νέοςκωδικός\" - Αλλάζει τον κωδικό του " "τρέχοντος λογαριασμού." #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr " \"/channels\" - Εμφανίζει μια λίστα των ενεργών καναλιών." #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr "" " \"/help [θέμα]\" - Βάλτε θέμα αν θέλετε πιο συγκεκριμένες πληροφορίες για " "μια εντολή." #: src/ui.cpp:472 #, fuzzy msgid " \"/join channel [password]\" - Joins a channel." msgstr "" " \"/join κανάλι [κωδικός] [,κανάλι2 [κωδικός2]]\" - Είσοδος σε κανάλι." #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr " \"/j\" - Συνώνυμο του /join." #: src/ui.cpp:474 #, fuzzy msgid " \"/ingame\" - Shows how much time you have in game." msgstr " \"/ingame\" - Εμφανίζει πόσο χρόνο έχετε περάσει μέσα σε παιχνίδια." #: src/ui.cpp:475 #, fuzzy msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" " \"/msg όνομαχρήστη [κείμενο]\" - στέλνει ένα prive μήνυμα σε κάποιον " "χρήστη." #: src/ui.cpp:476 #, fuzzy msgid " \"/part\" - Leaves current channel." msgstr " \"/channels\" - Εμφανίζει μια λίστα των ενεργών καναλιών." #: src/ui.cpp:477 #, fuzzy msgid " \"/p\" - Alias to /part." msgstr " \"/j\" - Συνώνυμο του /join." #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr " \"/rename νέοψευδώνυμο\" - Αλλάζει το ψευδώνυμο σας σε νέοψευδώνυμο." #: src/ui.cpp:479 #, fuzzy, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr "" " \"/sayver\" - Αναφέρει την έκδοση του SpringLobby που χρησιμοποιείτε στην " "συνομιλία." #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr " \"/testmd5 κείμενο\" - Επιστρέφει ένα md5-b64 hash του κειμένου." #: src/ui.cpp:481 #, fuzzy, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr " \"/ver\" - Εμφάνιση της έκδοσης SpringLobby που χρησιμοποιείτε." #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "Εντολές συνομιλίας:" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr "" " \"/me δραστηριότητα\" - Στέλνει ένα μήνυμα δραστηριότητας σε στυλ IRC (/e)." #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" "Αν δεν μπορείτε να θυμηθείτε κάποια εντολή, πηγαίνετε στο #springlobby και " "δοκιμάστε να την πληκτρολογήσετε εκεί :)" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "Κανένα θέμα δεν έχει γραφτεί ακόμα." #: src/ui.cpp:496 msgid "The topic \"" msgstr "Το θέμα \"" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "" "\" δεν βρέθηκε. Πληκτρολογήστε \"/help topics\" για μια λίστα των διαθέσιμων " "θεμάτων." #: src/ui.cpp:580 #, fuzzy msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" "Δεν βρέθηκε η έκδοση του Spring από τη μονάδα UnitSync.\n" "\n" "Τα δικτυακά παιχνίδια θα απενεργοποιηθούν." #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" #: src/ui.cpp:599 #, fuzzy msgid "Online play is currently disabled." msgstr "Τα δικτυακά παιχνίδια θα απενεργοποιηθούν." #: src/ui.cpp:631 #, fuzzy, c-format msgid "disconnected from server: %s" msgstr "Άγνωστη απάντηση από τον εξυπηρετητή" #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "καμία ενεργή συνομιλία ανοιχτή." #: src/ui.cpp:839 #, fuzzy, c-format msgid "%s (%d users)" msgstr "(%d χρήστες)" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "Η τρέχουσα μάχη έκλεισε από τον οικοδεσπότη." #: src/ui.cpp:993 msgid "Battle closed" msgstr "Η μάχη έκλεισε" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" "Οι ρυθμίσεις του Spring μάλλον δεν είναι σωστές.\n" "Παρακαλώ επιβεβαιώστε τις πριν προσπαθήσετε\n" "να παίξετε δικτυακά." #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "Σφάλμα ρυθμίσεων Spring" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "" #: src/ui.cpp:1337 #, fuzzy, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" ".\n" "Φαίνεται πως χρησιμοποιείτε για πρώτη φορά το SpringLobby. Έχω μαντέψει " "κάποιες αρχικές ρυθμίσεις που πιστέυω πως θα δουλέψουν για σας, αλλά καλό θα " "ήταν να τις ελέγξετε, είδικα τις ρυθμίσεις του Spring.\n" "\n" "Όταν είστε έτοιμοι, επιλέξτε Σύνδεση σε Εξυπηρετητή από το μενού Αρχείο και " "απολαύστε το Spring :)" #: src/ui.cpp:1340 msgid "Welcome" msgstr "Καλώς Ήλθατε" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 #, fuzzy msgid "Import settings?" msgstr "Ρυθμίσεις διαδρομής" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Παρουσιάστηκε πρόβλημα κατά τον έλεγχο για νέα έκδοση.\n" "Παρακαλώ προσπαθήστε αργότερα.\n" "Αν το πρόβλημα παραμένει, παρακαλώ χρησιμοποιήστε το Βοηθεία -> Αναφορά " "Προβλήματος για να αναφέρετε αυτό το πρόβλημα." #: src/ui.cpp:1387 msgid "Your Version: " msgstr "Η έκδοσή σας: " #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "Τελευταία έκδοση: " #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 #, fuzzy msgid "Not up to date" msgstr "Μη Ενημερωμένο" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "Αριθμός παικτών" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" "Η έκδοση του SpringLobby δεν είναι ενημερωμένη.\n" "\n" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "Μη Ενημερωμένο" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" "\n" "Διαδρομή περιηγητή είναι: " #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" #: src/updater/updater.cpp:72 #, fuzzy msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Παρουσιάστηκε πρόβλημα κατά τον έλεγχο για νέα έκδοση.\n" "Παρακαλώ προσπαθήστε αργότερα.\n" "Αν το πρόβλημα παραμένει, παρακαλώ χρησιμοποιήστε το Βοηθεία -> Αναφορά " "Προβλήματος για να αναφέρετε αυτό το πρόβλημα." #: src/updater/updater.cpp:81 #, fuzzy, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" "Παρουσιάστηκε πρόβλημα κατά τον έλεγχο για νέα έκδοση.\n" "Παρακαλώ προσπαθήστε αργότερα.\n" "Αν το πρόβλημα παραμένει, παρακαλώ χρησιμοποιήστε το Βοηθεία -> Αναφορά " "Προβλήματος για να αναφέρετε αυτό το πρόβλημα." #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 #, fuzzy msgid "the SpringLobby revision to update to" msgstr "" "H έκδοση του SpringLobby είναι ενημερωμένη!\n" "\n" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "SpringLobby" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 #, fuzzy msgid "Warning" msgstr "Καταγραφή Προειδοποίησης" #: src/user.cpp:83 #, fuzzy msgid "away" msgstr "Πάντα" #: src/user.cpp:83 msgid "back" msgstr "" #: src/user.cpp:85 #, fuzzy msgid "ingame" msgstr "Ψευδώνυμο" #: src/user.cpp:85 msgid "back from game" msgstr "" #: src/user.cpp:195 msgid "Newbie" msgstr "Νέος" #: src/user.cpp:196 msgid "Beginner" msgstr "Αρχάριος" #: src/user.cpp:197 msgid "Average" msgstr "Μέσος" #: src/user.cpp:198 msgid "Above average" msgstr "Πάνω του μέσου" #: src/user.cpp:199 msgid "Experienced" msgstr "Πεπειραμένος" #: src/user.cpp:200 msgid "Highly experienced" msgstr "Ιδιαίτερα πεπειραμένος" #: src/user.cpp:201 msgid "Veteran" msgstr "Βετεράνος" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 #, fuzzy msgid "Unknown" msgstr "άγνωστο" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "" #: src/useractions.h:11 #, fuzzy msgid "none" msgstr "Καθόλου" #: src/useractions.h:11 #, fuzzy msgid "highlight" msgstr "Επισήμανση" #: src/useractions.h:11 msgid "notify login/out" msgstr "" #: src/useractions.h:11 msgid "ignore chat" msgstr "" #: src/useractions.h:11 msgid "ignore pm" msgstr "" #: src/useractions.h:12 msgid "autokick" msgstr "" #: src/useractions.h:12 #, fuzzy msgid "notify hosted battle" msgstr "Σύνδεση στην ίδια μάχη" #: src/useractions.h:12 msgid "notify status change" msgstr "" #: src/useractions.h:19 #, fuzzy msgid "no action at all" msgstr "καμία ενεργή συνομιλία ανοιχτή." #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" #: src/usermenu.h:31 msgid "Create new group..." msgstr "" #: src/usermenu.h:37 #, fuzzy msgid "Add to group..." msgstr "Προσθήκη Bot..." #: src/usermenu.h:38 #, fuzzy msgid "Remove from group" msgstr "Διαγραφή Λογαριασμού Χρήστη" #: src/utils/controls.h:22 #, fuzzy msgid "Choose color" msgstr "Επιλογή φακέλου" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 #, fuzzy msgid "Author" msgstr "Αυστρία" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Games" msgstr "Παιχνίδι" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Compatible games" msgstr "Κανονικό" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "Αποθήκευση..." #: src/widgets/infopanel.cpp:74 #, fuzzy msgid "Current version" msgstr "Η έκδοση Spring σας" #: src/widgets/infopanel.cpp:79 #, fuzzy msgid "# downloaded" msgstr "MB στάλθηκαν" #: src/widgets/infopanel.cpp:84 #, fuzzy msgid "Published on" msgstr "Έκδοση νέου αρχείου" #: src/widgets/infopanel.cpp:121 #, fuzzy msgid "Changelog" msgstr "Ακύρωση" #: src/widgets/infopanel.cpp:126 #, fuzzy msgid "Screenshots" msgstr "Ανάλυση Οθόνης" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" #, fuzzy #~ msgid "Settings" #~ msgstr "Αποθήκευση ρυθμίσεων" #, fuzzy #~ msgid "Help" #~ msgstr "&Βοήθεια" #, fuzzy #~ msgid "Faction" #~ msgstr "Ενέργεια" #~ msgid "Mod" #~ msgstr "Mod" #, fuzzy #~ msgid "spectators" #~ msgstr "Θεατές:" #, fuzzy #~ msgid "players" #~ msgstr "Παίκτες:" #~ msgid "Mod:" #~ msgstr "Mod:" #~ msgid "Only mods i have" #~ msgstr "Μόνο mod που έχω" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to host a new game" #~ msgstr "" #~ "Το Spring τρέχει ήδη, παρακαλώ κλείστε το για να φιλοξενήσετε νέο παιχνίδι" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to join another battle." #~ msgstr "" #~ "Το Spring τρέχει ήδη, παρακαλώ κλείστε το για να συμμετάσχετε σε άλλη " #~ "μάχη." #~ msgid "Do you want me to take you to the download page?" #~ msgstr "Θέλετε να ανοίξω την σελίδα λήψεων;" #~ msgid "Mod not available" #~ msgstr "Το mod δεν είναι διαθέσιμο" #~ msgid "Enter password" #~ msgstr "Εισάγετε κωδικό" #, fuzzy #~ msgid "team" #~ msgstr "Ομάδα" #, fuzzy #~ msgid "ally" #~ msgstr "Συμμαχία" #~ msgid "cpu" #~ msgstr "Επεξεργαστής" #, fuzzy #~ msgid "Load a saved set of options." #~ msgstr "Φόρτωση αποθηκευμένης λίστας περιορισμών" #, fuzzy #~ msgid "Save..." #~ msgstr "Αποθήκευση..." #, fuzzy #~ msgid "Delete..." #~ msgstr "Επιλογή..." #, fuzzy #~ msgid "Set default..." #~ msgstr "προεπιλογή" #~ msgid "Mod Options" #~ msgstr "Επιλογές Mod" #~ msgid "Map Options" #~ msgstr "Επιλογές Χάρτη" #~ msgid "You don't have the mod " #~ msgstr "Δεν έχετε το mod " #~ msgid " . Please download it first" #~ msgstr " . Παρακαλώ κατεβάστε το πρώτα" #~ msgid "Mod unavailable" #~ msgstr "Mod μη διαθέσιμο" #, fuzzy #~ msgid "unknown hash " #~ msgstr "άγνωστο" #~ msgid "Select the mod to play with." #~ msgstr "Επιλέξτε το mod που θέλετε να παίξετε." #~ msgid "Test firewall" #~ msgstr "Έλεγχος τείχους προστασίας" #, fuzzy #~ msgid "Tab icons" #~ msgstr "Επιλογές Χάρτη" #~ msgid "P2P" #~ msgstr "P2P" #~ msgid "Total Outgoing: " #~ msgstr "Συνολικά εξερχόμενα: " #~ msgid "Publish new file" #~ msgstr "Έκδοση νέου αρχείου" #~ msgid "Search file" #~ msgstr "Αναζήτηση αρχείου" #, fuzzy #~ msgid "Download Lua widgets" #~ msgstr "Ενεργοποίηση LuaUI widget" #~ msgid "not available" #~ msgstr "μη διαθέσιμο" #~ msgid "seeding" #~ msgstr "τροφοδοσία" #~ msgid "leeching" #~ msgstr "ρουφάει" #~ msgid "Status: not connected" #~ msgstr "Κατάσταση: Χωρίς σύνδεση" #~ msgid "Status: connected" #~ msgstr "Κατάσταση: Συνδεμένο" #~ msgid "Status: throttled or paused (ingame)" #~ msgstr "Κατάσταση: Επιβραδυνόμενο ή σταματημένο (σε παιχνίδι)" #~ msgid "Status: unknown" #~ msgstr "Κατάσταση: Άγνωστο" #~ msgid "Total Outgoing: %.2f KB/s" #~ msgstr "Συνολικά Εξερχόμενα: %.2f KB/s" #~ msgid "Total Incoming: %.2f KB/s" #~ msgstr "Συνολικά Εισερχόμενα: %.2f KB/s" #~ msgid "&File" #~ msgstr "&Αρχείο" #~ msgid "Manually &Start Torrent System" #~ msgstr "Χειροκίνητη έναρξη συστήματος Torrent" #~ msgid "Manually &Stop Torrent System" #~ msgstr "Χειροκίνητη διακοπή συστήματος Torrent" #, fuzzy #~ msgid "Modname" #~ msgstr "Κατάσταση" #, fuzzy #~ msgid "Download started" #~ msgstr "Λήψη ολοκληρώθηκε" #, fuzzy #~ msgid "Disconnecting" #~ msgstr "Αποσύνδεση" #~ msgid "Debug" #~ msgstr "Εκσφαλμάτωση" #~ msgid "SpringSettings (expert mode)" #~ msgstr "Ρυθμίσεις Spring (για προχωρημένους)" #~ msgid "" #~ "thanks for inviting me in, code to re-use, infrastructure and help in " #~ "general" #~ msgstr "" #~ "thanks for inviting me in, code to re-use, infrastructure and help in " #~ "general" #~ msgid "" #~ "The application has generated a fatal error and will be terminated\n" #~ "Generating a bug report is not possible\n" #~ "\n" #~ "please enable wxUSE_DEBUGREPORT" #~ msgstr "" #~ "Η εφαρμογή προκάλεσε ένα μοιραίο σφάλμα και θα τερματιστεί\n" #~ "Δεν είναι δυνατή η δημιουργία αναφοράς προβλήματος\n" #~ "\n" #~ "παρακαλώ ενεργοποιείστε το wxUSE_DEBUGREPORT" #~ msgid "Debug Options" #~ msgstr "Επιλογές Εκσφαλμάτωσης" #, fuzzy #~ msgid "Player" #~ msgstr "Παίκτες:" #~ msgid "Hi " #~ msgstr "Γεια " #, fuzzy #~ msgid "Notice" #~ msgstr "Καθόλου" #, fuzzy #~ msgid "MB downloaded" #~ msgstr "MB στάλθηκαν" #~ msgid "MB uploaded" #~ msgstr "MB στάλθηκαν" #~ msgid "status" #~ msgstr "Κατάσταση" #~ msgid "KB/s up" #~ msgstr "KB/s αποστέλονται" #~ msgid "KB/s down" #~ msgstr "KB/s λαμβάνονται" #~ msgid "ETA (s)" #~ msgstr "Χρόνος (δευ.)" #~ msgid "Filesize (MB)" #~ msgstr "μέγεθος (MB)" #~ msgid "Torrent system autostart" #~ msgstr "Αυτόματη εκκίνηση συστήματος λήψεων" #~ msgid "at lobby connection (default)" #~ msgstr "κατά τη σύνδεση στο lobby (εξ ορισμού)" #~ msgid "at lobby start" #~ msgstr "κατά την εκκίνηση" #~ msgid "manual" #~ msgstr "χειροκίνητα" #, fuzzy #~ msgid "Torrent system failure" #~ msgstr "Αυτόματη εκκίνηση συστήματος λήψεων" #~ msgid "Type /help in a chat box." #~ msgstr "Πληκρτολογήστε /help σε ένα παράθυρο συνομιλίας" #, fuzzy #~ msgid "Disconnected from server." #~ msgstr "Άγνωστη απάντηση από τον εξυπηρετητή" #, fuzzy #~ msgid "Connection failure" #~ msgstr "Λήξη χρόνου σύνδεσης" #~ msgid "Server message" #~ msgstr "Μήνυμα εξυπηρετητή" #, fuzzy #~ msgid "Grouping size" #~ msgstr "Ενέργεια" #~ msgid "a" #~ msgstr "θ" #~ msgid "p" #~ msgstr "π" #~ msgid "m" #~ msgstr "μ" #~ msgid "%d%" #~ msgstr "%d%" #~ msgid "t" #~ msgstr "ο" #~ msgid "Not a number" #~ msgstr "Δεν είναι αριθμός" #~ msgid "" #~ "Value out of range.\n" #~ " Enter an integer between 0 & 100." #~ msgstr "" #~ "Τιμή εκτός ορίων.\n" #~ " Παρακαλώ εισάγετε έναν ακέραιο από 0 εως 100." #~ msgid "" #~ "There are two or more bots on the same team. Because bots don't know how " #~ "to share, this won't work." #~ msgstr "" #~ "Υπάρχουν δύο ή περισσότερα bot στην ίδια ομάδα. Επειδή δεν ξέρουν να " #~ "μοιράζονται, αυτό δεν θα λειτουργήσει." #~ msgid "Bot team sharing." #~ msgstr "Διαμοιρασμός ομάδας bot." #, fuzzy #~ msgid "topic" #~ msgstr "Το θέμα \"" #~ msgid "Use smart scrolling" #~ msgstr "Χρήση έξυπνης κύλισης" #~ msgid "_SERVER" #~ msgstr "_ΕΞΥΠΗΡΕΤΗΤΗΣ" #~ msgid "Download failed" #~ msgstr "Αποτυχία λήψης" #, fuzzy #~ msgid "" #~ "You need to download the map to be able to watch this replay.\n" #~ "\n" #~ msgstr "" #~ "Πρέπει να κατεβάσετε τον χάρτη πριν να συμμετάσχετε σε αυτό το παιχνίδι.\n" #~ "\n" #~ msgid "Unit detail" #~ msgstr "Λεπτομέρειες μονάδων" #~ msgid "only on/off available at this time" #~ msgstr "μόνο ενεργό/ανενεργό για την ώρα" #~ msgid "Global sound volume" #~ msgstr "Γενική ένταση ήχου" #~ msgid "mark to be able to use" #~ msgstr "επιλέξτε για να μπορείτε να τα χρησιμοποιείτε" #~ msgid "Send debug info to console" #~ msgstr "Αποστολή πληροφοριών εκσφαλμάτωσης στην κονσόλα" #~ msgid "if disabled these will only be logged" #~ msgstr "αν απενεργοποιηθεί θα καταγράφονται μονάχα" #~ msgid "" #~ "You're using a wxwidgets library of the 2.6.x series\n" #~ " battle filtering, advanced gui and joining/hosting games using nat " #~ "traversal\n" #~ " won't be available" #~ msgstr "" #~ "Χρησιμοποιείτε wxWidgets της σειράς 2.6.\n" #~ " Το φιλτράρισμα μαχών, η προχωρημένη διεπαφή και η συμμετοχή/φιλοξενία " #~ "παιχνιδιών\n" #~ " με χρήση Διάτρησης Nat δεν θα είναι διαθέσιμες." #~ msgid "Missing Functionality" #~ msgstr "Ελλιπής Λειτουργικότητα" #, fuzzy #~ msgid "" #~ "Do you want to download OTA content?\n" #~ "You need this to be able to play TA based mods.\n" #~ "You need to own a copy of Total Annihilation do legally download it." #~ msgstr "" #~ "Θέλετε να κατεβάσω τα βασικά αρχεία του OTA (Original Total " #~ "Annihilation);\n" #~ "Θα χρειαστούν αν θελήσετε να παίξετε mod που βασίζονται σ'αυτό.\n" #~ "Χρειάζετε να είστε νόμιμος κάτοχος του Total Annihilation για να είναι " #~ "νόμιμη η λήψη τους." #~ msgid "Download OTA content?" #~ msgstr "Λήψη βασικών αρχείων OTA;" #, fuzzy #~ msgid "Create a spring directory in my documents folder" #~ msgstr "" #~ "Δημιουργία του φακέλου .spring στον αρχικό κατάλογο σας (συνιστάται)" #~ msgid "Create a folder in a custom path (you'll get prompted for the path)" #~ msgstr "Δημιουργία φακέλου σε άλλη διαδρομή (θα ερωτηθείτε για τη διαδρομή)" #~ msgid "I have already a SpringData folder, i want to browse manually for it" #~ msgstr "" #~ "Έχω ήδη έναν φάκελο δεδομένων του Spring, θέλω να τον αναζητήσω με το χέρι" #, fuzzy #~ msgid "" #~ "Looks like you don't have yet a user SpringData folder structure\n" #~ "What would you like to do? (leave default choice if you don't know what " #~ "this is for)" #~ msgstr "" #~ "Φαίνεται πως δεν έχετε φάκελο δεδομένων του Spring\n" #~ "Τι θα θέλατε να κάνω; (αφήστε την αρχική επιλογή αν δεν γνωρίζετε περί " #~ "τίνος πρόκειται αυτό)" #, fuzzy #~ msgid "Not online" #~ msgstr "Εκτός Σύνδεσης." #~ msgid "" #~ "This game uses NAT traversal that is not supported by wx 2.6 build of " #~ "springlobby. \n" #~ "\n" #~ "You will not be able to play in this battle. \n" #~ "Update your wxwidgets to 2.8 or newer to enable NAT traversal support." #~ msgstr "" #~ "Αυτό το παιχνίδι χρησιμοποιεί Διάτρηση NAT που όμως δεν υποστηρίζεται από " #~ "τη σειρά 2.6 του WxWidgets.\n" #~ "\n" #~ "Δεν θα μπορέσετε να συμμετάσχετε σε αυτή την μάχη.\n" #~ "Παρακαλώ ενημερώστε το wxWidgets στη σειρά 2.8 ή νεώτερη για να " #~ "ενεργοποιηθεί η Διάτρηση NAT." #, fuzzy #~ msgid "Only the host can change the game options" #~ msgstr "Μόνο ο οικοδεσπότης μπορεί να κλειδώσει το παιχνίδι." #~ msgid "Only the host can start the battle." #~ msgstr "Μόνο ο οικοδεσπότης μπορεί να εκκινήσει τη μάχη." #, fuzzy #~ msgid "Only the host can use those functions." #~ msgstr "Μόνο ο οικοδεσπότης μπορεί να κλειδώσει το παιχνίδι." #~ msgid "Only the host can lock the game." #~ msgstr "Μόνο ο οικοδεσπότης μπορεί να κλειδώσει το παιχνίδι." #, fuzzy #~ msgid "Only the host can toggle autohost mode." #~ msgstr "Μόνο ο οικοδεσπότης μπορεί να κλειδώσει το παιχνίδι." #~ msgid "Invalid host/port or servername." #~ msgstr "Μη έγκυρος εξυπηρετητής/θύρα ή όνομα εξυπηρετητή." #~ msgid "Active chat channels:" #~ msgstr "Ενεργά κανάλια συνομιλίας:" #~ msgid "no rank" #~ msgstr "χωρίς βαθμό" #, fuzzy #~ msgid "Battle filter is active" #~ msgstr "Λίστα μαχών" #~ msgid "Only the host can fix player colours." #~ msgstr "Μόνο ο οικοδεσπότης μπορεί να διορθώσει τα χρώματα των παιχτών." #~ msgid "Select all" #~ msgstr "Επιλογή όλων" #, fuzzy #~ msgid "Add user" #~ msgstr "(%d χρήστες)" #, fuzzy #~ msgid "Remove selected" #~ msgstr "Δεν επιλέχθηκε mod." #, fuzzy #~ msgid "you can also enter a ';' seperated list of usernames:" #~ msgstr "Εισάγετε λίστα χωρισμένη με \";\"" #, fuzzy #~ msgid "Invalid usernames" #~ msgstr "Μη έγκυρος αριθμός" #, fuzzy #~ msgid "" #~ "A short description of the game, this will show up in the battle list. " #~ "This will be read-only for ladder" #~ msgstr "Σύντομη περιγραφή του παιχνιδιού, θα εμφανιστεί στη λίστα μαχών." #~ msgid "NAT traversal to use. Experimental support." #~ msgstr "Τύπος Διάτρησης NAT προς χρήση. Πειραματική υποστήριξη." #, fuzzy #~ msgid "Unitsync error" #~ msgstr "Σφάλμα UnitSync" #~ msgid "Continue if commander dies" #~ msgstr "Συνεχίστε αν πεθάνει ο Διοικητής" #~ msgid "End if commander dies" #~ msgstr "Τερματισμός αν πεθάνει ο Διοικητής" #~ msgid "Lineage mode" #~ msgstr "Λειτουργία καταγωγής" #~ msgid "End condition" #~ msgstr "Συνθήκη τερματισμού" #~ msgid "Resources" #~ msgstr "Πόροι" #~ msgid "The amount of metal each player starts with." #~ msgstr "Η ποσότητα μετάλλου με την οποία ξεκινάει ο κάθε παίκτης." #~ msgid "Start Energy" #~ msgstr "Αρχική Ενέργεια" #~ msgid "The amount of energy each player starts with." #~ msgstr "Η ποσότητα ενέργειας με την οποία ξεκινάει ο κάθε παίκτης." #~ msgid "Max units" #~ msgstr "Όριο μονάδων" #~ msgid "The maximum number of units allowed per player." #~ msgstr "Το μέγιστο πλήθος μονάδων ανά παίκτη." #~ msgid "Limit d-gun" #~ msgstr "Περιορισμός D-Gun" #~ msgid "Ghosted buildings" #~ msgstr "Φαντάσματα κτιρίων" #~ msgid "Diminishing metal makers" #~ msgstr "Σταδιακά μειούμενη παραγωγή μετάλλου" #~ msgid "This chat is exclusively for participants of this battle." #~ msgstr "Η συζήτηση είναι αποκλειστικά για τους συμμετέχοντες στη μάχη." #~ msgid "Cannot add bot, maximum number of players already reached." #~ msgstr "Αδύνατη η προσθήκη bot, ο μέγιστος αριθμός παιχτών έχει φτασθεί." #~ msgid "Max players reached" #~ msgstr "Ο μέγιστος αριθμός παιχτών έχει φτασθεί" #~ msgid "Autoconnect last server" #~ msgstr "Αυτόματη σύνδεση στον τελευταίο εξυπηρετητή" #~ msgid "Save to:" #~ msgstr "Αποθήκευση σε:" #~ msgid "Browse..." #~ msgstr "Αναζήτηση..." #~ msgid "Choose a directory" #~ msgstr "Επιλέξτε έναν φάκελο" #~ msgid "Map/Mod Options" #~ msgstr "Επιλογές Χάρτη/Mod" #~ msgid "Up to Date" #~ msgstr "Ενημερωμένο" #~ msgid "" #~ "\n" #~ "\n" #~ "Would you like to visit a page with instructions on how to download the " #~ "newest version?" #~ msgstr "" #~ "\n" #~ "\n" #~ "Θέλετε να επισκεφθείτε μια σελίδα με οδηγίες σχετικά με το πως να " #~ "κατεβάσετε την τελευταία έκδοση;" #~ msgid "Limit D-Gun" #~ msgstr "Περιορισμός D-Gun" #~ msgid "" #~ "Disables commander's D-gun when being too far away from the starting point" #~ msgstr "" #~ "Απενεργοποιεί το D-Gun του Διοικητή όταν βρίσκεστε μακρυά από την αρχική " #~ "θέση σας" #~ msgid "Ghosted Buildings" #~ msgstr "Φαντάσματα Κτιρίων" #~ msgid "" #~ "Enemy buildings will leave a ghost image on the map after losing LoS on " #~ "them" #~ msgstr "" #~ "Τα εχθρικά κτίρια θα αφήνουν αποτύπωμα στον χάρτη αφού χάσετε οπτική " #~ "επαφή μαζί τους" #~ msgid "Diminishing MM" #~ msgstr "Μειούμενοι MM" #~ msgid "" #~ "Efficiency of MetalMakers will progressively reduce as much as you build " #~ "them" #~ msgstr "" #~ "Η αποτελεσματικότητα των Κατασκευαστών Μετάλλου θα μειώνεται προοδευτικά " #~ "καθώς τους χτίζετε" #~ msgid "Game Ending condition" #~ msgstr "Συνθήκη Τέλους Παιχνιδιού" #~ msgid "" #~ "The condition that will end the game\n" #~ "0: when all units will be destroyed\n" #~ "1: when the commander will be destroyed\n" #~ "2: lineage mode (see option 1, but given away units will still die" #~ msgstr "" #~ "Η συνθήκη που θα τερματίσει το παιχνίδι\n" #~ "0: όταν καταστραφούν όλες οι μονάδες\n" #~ "1: όταν καταστραφεί ο Διοικητής\n" #~ "2: λειτουργία καταγωγής (όπως το 1, αλλά ο δωρισμένες μονάδες θα " #~ "πεθαίνουν)" #~ msgid "Sets the amount of metal that players will start with" #~ msgstr "Ορίζει την ποσότητα μετάλλου με την οποία θα αρχίζουν οι παίκτες" #~ msgid "Sets the amount of energy that players will start with" #~ msgstr "Ορίζει την ποσότητα ενέργειας με την οποία θα αρχίζουν οι παίκτες" #~ msgid "Max Units Allowed" #~ msgstr "Μέγιστος Αριθμός Μονάδων" #~ msgid "" #~ "Sets the maximum amount of units that a player will be allowed to build" #~ msgstr "Ορίζει τον μέγιστο αριθμό μονάδων που μπορούν να χτίζουν οι παίκτες" #~ msgid "Reset" #~ msgstr "Επαναφορά" #~ msgid "" #~ "You have bots that are not assingled to startpositions. In the current " #~ "version of spring you are only allowed to use start positions positioning " #~ "them freely is not allowed.\n" #~ "\n" #~ "This will be fixed in next version of Spring." #~ msgstr "" #~ "Δεν ορίστηκαν αρχικές θέσεις για κάποια bot. Στην τρέχουσα έκδοση του " #~ "Spring επιτρέπεται μόνο η χρήση των αρχικών περιοχών και όχι η ελεύθερη " #~ "τοποθέτηση τους.\n" #~ "\n" #~ "Αυτό θα διορθωθεί σε επόμενη έκδοση του Spring." #~ msgid "" #~ "You are not using consecutive start position numbers.\n" #~ "\n" #~ "In the current version of spring you are not allowed to skip any " #~ "startpositions. You have to use all consecutive position.\n" #~ "\n" #~ "Example: if you have 2 bots + yourself you have to use start positions " #~ "1,2,3 not 1,3,4 or 2,3,4.\n" #~ "\n" #~ "This will be fixed in next version of Spring." #~ msgstr "" #~ "Δεν χρησιμοποιείτε διαδοχικούς αριθμούς αρχικών θέσεων.\n" #~ "\n" #~ "Στην τρέχουσα έκδοση του Spring δεν επιτρέπεται η παράκαμψη οποιωνδήποτε " #~ "αρχικών θέσεων. Θα χρειαστεί να τις χρησιμοποιήσετε διαδοχικά.\n" #~ "\n" #~ "Παράδειγμα: αν έχετε 2 bot & τον εαυτό σας, θα πρέπει να χρησιμοποιήσετε " #~ "τις αρχικές θέσεις 1, 2, 3 και όχι τις 1, 3, 4 ή 2, 3, 4.\n" #~ "\n" #~ "Αυτό θα διορθωθεί σε επόμενη έκδοση του Spring." #~ msgid "Spring directory" #~ msgstr "Κατάλογος Spring" #~ msgid "Default location." #~ msgstr "Εξ ορισμού" #~ msgid "The Spring executable is installed in the default location" #~ msgstr "Το εκτελέσιμο του Spring είναι εγκατεστημένο στην εξ ορισμού θέση" #~ msgid "Specify the location of the Spring executable" #~ msgstr "Προσδιορίστε τη θέση του εκτελέσιμου του Spring" #~ msgid "The UnitSync library is installed in the default location" #~ msgstr "Η μονάδα UnitSync είναι εγκατεστημένη στην εξ ορισμού θέση" #~ msgid "" #~ "SpringLobby is unable to determine your Spring version from the UnitSync " #~ "library.\n" #~ "\n" #~ "You might want to take another look at your settings." #~ msgstr "" #~ "Το SpringLobby δεν μπόρεσε να προσδιορίσει την έκδοση του Spring μέσω της " #~ "μονάδας UnitSync.\n" #~ "\n" #~ "Παρακαλώ επιβεβαιώστε τη ρύθμιση UnitSync." #~ msgid "" #~ "Unitsync loading was aborted because your spring data directory is not " #~ "writable. Please check." #~ msgstr "" #~ "Η φόρτωση του Unitsync διακόπηκε επειδή ο φάκελος δεδομένων του Spring " #~ "δεν ειναι εγγράξιμος. Παρακαλώ επιβεβαιώστε." #~ msgid "is not supported by the lobby server that requires version" #~ msgstr "δεν υποστηρίζεται από τον εξυπηρετητή lobby ο οποιό απαιτεί έκδοση" #~ msgid "" #~ "This is the SpringLobby channel, please report any problems you are " #~ "having with SpringLobby here and the friendly developers will help you." #~ msgstr "" #~ "Αυτό είναι το κανάλι του SpringLobby, παρακαλώ αναφέρετε τυχόν προβλήματα " #~ "που έχετε με το SpringLobby εδώ και οι δημιουργοί θα σας βοηθήσουν " #~ "πρόθυμα. Σημείωση: Το κανάλι είναι αγγλόφωνο!" springlobby-0.169/po/en@boldquot.header0000600000176000000410000000247112105760277021504 0ustar buildbotwww-data00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # springlobby-0.169/po/en@quot.header0000600000176000000410000000226312105760277020642 0ustar buildbotwww-data00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # springlobby-0.169/po/es.po0000600000176000000410000047326412105760300017024 0ustar buildbotwww-data00000000000000# Spanish translation for springlobby # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the springlobby package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: springlobby\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2010-01-02 04:01+0000\n" "Last-Translator: Federico Vera \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-01-03 04:49+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "anterior" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "siguiente" #: src/Helper/imageviewer.cpp:92 msgid "delete" msgstr "eliminar" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "guardar como" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "no se pudo eliminar el archivo" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "Error" #: src/Helper/imageviewer.cpp:160 msgid "Choose a filename" msgstr "Elija un nombre de archivo" #: src/Helper/imageviewer.cpp:167 msgid "File successfully saved" msgstr "Archivo guardado correctamente" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 msgid "Success" msgstr "Éxito" #: src/Helper/imageviewer.cpp:170 msgid "Couldn't save file" msgstr "No se pudo guardar el archivo" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 msgid "Default" msgstr "Predeterminado" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "BUSCANDO %s" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" "Los arreglos de nombres de idiomas e identificadores deben tener el mismo " "tamaño." #: src/Helper/wxTranslationHelper.cpp:148 msgid "Select the language" msgstr "Seleccione el idioma" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "Idioma" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Aceptar los términos del acuerdo" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "¿Aceptas los términos del acuerdo?" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Sí" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "No" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 msgid "User" msgstr "Usuario" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 msgid "Channel" msgstr "Canal" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Estado:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 #, fuzzy msgid "Minimum rank to join" msgstr "Rango mínimo requerido" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Descripción" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Descripción" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Mapa" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 msgid "Mapname" msgstr "" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "Juego" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "Juego" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Host" #: src/battlelist/battlelistctrl.cpp:60 #, fuzzy msgid "Name of the Host" msgstr "Nombre del nuevo grupo:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Espectadores:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "Número de jugadores" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 msgid "Players" msgstr "Jugadores" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "Número de jugadores" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Mapa" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Maximum number of Players that can join" msgstr "El máximo número de jugadores permitidos en esta batalla." #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "Descargar &map" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "Descargar &map" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Espectadores:" #: src/battlelist/battlelistctrl.cpp:370 msgid "Active Players:" msgstr "Jugadores Activos:" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "Servidor:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Estado:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Bloqueado" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "Con contraseña" #: src/battlelist/battlelistfilter.cpp:122 msgid "Highlighted only" msgstr "" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "Límite de rango" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Descripción:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Iniciado" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Lleno" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "Abierto" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Jugador:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Todo" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Mapa:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Sólo mapas que tengo" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "Máx. Jugadores:" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 #, fuzzy msgid "Game:" msgstr "Juego" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Sólo mapas que tengo" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Espectador:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "%d" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Jugadores:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 msgid " Filter " msgstr " Filtro " #: src/battlelist/battlelisttab.cpp:144 msgid "Activated" msgstr "Activado" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 msgid " Battle infos " msgstr " Información de batalla " #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "0 batallas mostradas" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "Nuevo servidor..." #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "Unirse" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "%d batallas mostradas" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" "No puedes ser servidor de un juego mientras continues en NO CONECTADO. Por " "favor favor, conéctate a un servidor." #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "No estás en línea" #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "" "No puedes ser servidor, lo tienes desactivado debido a que estás usando una " "versión incompatible" #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Error de Spring" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "Ya estás en una batalla" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "¿Quieres abandonar la batalla y empezar una nueva?" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" "Unirse a las batallas está desactivado debido a que la versión que usas de " "Spring es incompatible." #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 msgid "Matchmaker detected" msgstr "" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "Ya estás en una batalla" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "Ya estás en una batalla.\n" "\n" "¿Quieres abandonar la batalla y unirte a ésta?" #: src/battlelist/battlelisttab.cpp:430 msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" #: src/battlelist/battlelisttab.cpp:433 msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "Mapa no avalible" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "Mapa no avalible" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "Password de batalla" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 msgid "Edit auto-joined channels" msgstr "" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "Doble click para unirse" #: src/channel/channelchooser.cpp:30 msgid "Find channel:" msgstr "Buscar canal:" #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 msgid "Choose channels to join" msgstr "Elegir a que canales unirse" #: src/channel/channellistctrl.cpp:30 msgid "# users" msgstr "# usuarios" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "Mostrando %d de %d canales" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "### Sesión Cerrada [" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" "No se pudo crear la carpeta. \n" "Asegúrate de que no esté protegida contra escritura.\n" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "" #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 #, fuzzy msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" "No se pudo crear la carpeta. \n" "Asegúrate de que no esté protegida contra escritura.\n" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "canal_" #: src/chatpanel.cpp:69 msgid "#" msgstr "#" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, c-format msgid "%d users" msgstr "%d usuarios" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "" #: src/chatpanel.cpp:296 msgid "Send" msgstr "Enviar" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr " !! Comando: \"" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "\" params: \"" #: src/chatpanel.cpp:717 msgid "channel" msgstr "canal" #: src/chatpanel.cpp:718 msgid "battle" msgstr "batalla" #: src/chatpanel.cpp:719 msgid "server" msgstr "servidor" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr " se unió a " #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr " abandonó " #: src/chatpanel.cpp:814 msgid " ** Channel topic:" msgstr "" #: src/chatpanel.cpp:821 msgid " ** Set by " msgstr "" #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "Chat cerrado" #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "¿Está seguro que desea pegar %d lineas?" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr "" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr "" #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr "" #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr "" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "\"" #: src/chatpanel.cpp:1090 msgid " ** User is now offline." msgstr "" #: src/chatpanel.cpp:1097 #, fuzzy msgid " ** User just got online." msgstr " se acaba de desconctar" #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 #, fuzzy msgid " ** Joined Battle." msgstr " se unió a " #: src/chatpanelmenu.cpp:34 #, fuzzy msgid "Disable text appending" msgstr "Desactivar advertencias en modo experto" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "Copiar" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "Copiar la ubicación del enlace" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "Limpiar" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "Unirse automáticamente a este canal" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "Abandonar" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "Información del canal" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "Asignar tema..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "Mensaje del canal..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "Bloquear..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "Desbloquear" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "Registrar..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "Cancelar cuenta" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "Activo" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "Desactivado" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "¿Está activo?" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "Protección de Spam" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "ChanServ" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "Desconectar" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "Reconectar" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "Eliminar..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "Cambiar contraseña..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "" #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "Cuentas" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "" #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "Administrador" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "Abrir Chat" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "Mudo..." #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "Mudo por 5 minutos" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "Mudo por 10 minutos" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "Mudo por 30 minutos" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "Mudo por 5 horas" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "Mudo por 1 día" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "Desilenciar" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "Silenciar" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "" #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "Ban..." #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "Anillo" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "error de ChanServ" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "" #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "¿Cuál debe ser el nuevo tema?" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "Mensaje:" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "Bloquear canal..." #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "¿Cuál debe ser la nueva contraseña?" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "Desbloquear canal" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "¿Está seguro que desea desbloquear este canal?" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "ChanServ no está en este servidor." #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "Registrar Canal" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "¿Quién será considerado como fundador de este canal?" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "Desregistrar canal" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "¿Está seguro que desea desregistrar este canal?" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "Remover Cuenta de Usuario" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "¿Qué cuenta de usuario desea eliminar hoy?" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "Eliminar cuenta" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "" #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "No implementado" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "Transmitir mensaje" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "Mensaje a transmitir:" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "Usuario Mudo" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "Patear Usuario" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "Motivo:" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "Patear usuario" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "Duración:" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "Ingrese nombre" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" #: src/chatpanelmenu.cpp:774 msgid "couldn't add user" msgstr "no se pudo agregar el usuario" #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "Servidor" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "Apodo" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "Contraseña" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "Recordar contraseña" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" #: src/connectwindow.cpp:85 msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "Ok" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Cancelar" #: src/connectwindow.cpp:91 msgid "Login" msgstr "Iniciar sesión" #: src/connectwindow.cpp:92 msgid "Register" msgstr "Regístrese" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "Apodo" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "puerto inválido." #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "puerto inválido" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "Anfitrión/puerto inválido." #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "host inválido" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" #: src/connectwindow.cpp:294 msgid "Invalid nickname" msgstr "Apodo inválido" #: src/connectwindow.cpp:301 msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "Registro fallido." #: src/countrycodes.cpp:11 msgid " Andorra" msgstr " Andorra" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "Emiratos Árabes Unidos" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "Afganistán" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "Antigua y Barbuda" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "Anguila" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "Albania" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "Armenia" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "Antillas Holandesas" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "Angola" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "Antártida" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "Argentina" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "Samoa Americana" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "Austria" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "Australia" #: src/countrycodes.cpp:25 #, fuzzy msgid "Åland Islands" msgstr "Islas Caimán" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "Aruba" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "Azerbaiyán" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "Bosnia y Herzegovina" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "Barbados" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "Bangladesh" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "Bélgica" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "Burkina Faso" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "Bulgaria" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "Bahréin" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "Burundi" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "Benín" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "Bermuda" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "Brunéi" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "Bolivia" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "Brasil" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "Bahamas" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "Bután" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "Isla Bouvet" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "Botswana" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "Bielorrusia" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "Belice" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "Canadá" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "República Centroafricana" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "Congo" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "Suiza" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "Costa de Marfil" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "Islas Cook" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "Chile" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "Camerún" #: src/countrycodes.cpp:56 msgid "China" msgstr "China" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "Colombia" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "Costa Rica" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "Cuba" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "Cabo Verde" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "Isla de Navidad" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "Chipre" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "República Checa" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "Alemania" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "Djibouti" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "Dinamarca" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "Dominica" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "República Dominicana" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "Algeria" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "Ecuador" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "Estonia" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "Egipto" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "Sáhara occidental" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "Eritrea" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "España" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "Etiopía" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "Finlandia" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "Islas Fiji" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "Islas Falkland (Malvinas)" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "Micronesia" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "Islas Faroe" #: src/countrycodes.cpp:82 msgid "France" msgstr "Francia" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "Francia, zona metropolitana" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "Gabón" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "Granada" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "Georgia" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "Guayana Francesa" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "Ghana" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "Gibraltar" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "Groenlandia" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "Gambia" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "Guinea" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "Guadalupe" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "Guinea Ecuatorial" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "Grecia" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "Islas Georgia y Sandwich del sur" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "Guatemala" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "Guam" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "Guinea-Bissau" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "Guyana" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "Hong Kong" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "Islas Heard y McDonald" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "Honduras" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "Croacia (Hrvatska)" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "Haití" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "Hungría" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "Indonesia" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "Irlanda" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "Israel" #: src/countrycodes.cpp:110 msgid "India" msgstr "India" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "Territorio Británico del Océano Índico" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "Irak" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "Irán" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "Islandia" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "Italia" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "Jamaica" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "Jordania" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "Japón" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "Kenia" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "Camboya" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "Kiribati" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "Comoros" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "San Cristóbal y Nevis" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "Korea (Norte) (República popular)" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "Korea (Sur) (República)" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "Kuwait" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "Islas Caimán" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "Kazajstán" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "Laos" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "Líbano" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "Santa Lucía" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "Liechtenstein" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "Sri Lanka" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "Liberia" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "Lesoto" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "Lituania" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "Luxemburgo" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "Latvia" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "Libia" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "Marruecos" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "Mónaco" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "Moldavia" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "Montenegro" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "Madagascar" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "Islas Marshall" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "Macedonia" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "Mali" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "Myanmar" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "Mongolia" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "Macao" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "Islas Marianas del Norte" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "Martinica" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "Mauritania" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "Montserrat" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "Malta" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "Islas Mauricio" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "Islas Maldivas" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "Malaui" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "México" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "Malasia" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "Mozambique" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "Namibia" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "Nueva Caledonia" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "Níger" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "Islas Norfolk" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "Nigeria" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "Nicaragua" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "Países Bajos" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "Noruega" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "Nepal" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "Nauru" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "Zona Neutral (Arabia Saudita / Irak)" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "Niue" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "Nueva Zelanda" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "Omán" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "Panamá" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "Perú" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "Polinesia Francesa" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "Papúa Nueva Guinea" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "Filipinas" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "Pakistán" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "Polonia" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "St. Pierre y Miquelon" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "Pitcairn" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "Puerto Rico" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "Portugal" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "Palau" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "Paraguay" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "Qatar" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "Reunión" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "Rumania" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "Serbia" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "Federación Rusa" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "Ruanda" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "Arabia Saudita" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "Islas Salomón" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "Islas Seicheles" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "Sudán" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "Suecia" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "Singapur" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "Santa Helena" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "Eslovenia" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "Islas Jan Mayen y Svalbard" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "Eslovakia (República Eslovaka)" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "Sierra Leone" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "San Marino" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "Senegal" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "Somalía" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "Surinám" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "Santo Tomé y Príncipe" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "Unión Soviética (Ex)" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "El Salvador" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "Siria" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "Suazilandia" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "Islas Turcas y Caicos" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "Chad" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "Territorios Franceses del Sur" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "Togo" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "Tailandia" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "Tayikistán" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "Toquelau" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "Turkmenistán" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "Túnez" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "Tonga" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "Timor Oriental" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "Turquía" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "Trinidad y Tobago" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "Tuvalú" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "Taiwán" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "Tanzania" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "Ucrania" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "Uganda" #: src/countrycodes.cpp:234 #, fuzzy msgid "United Kingdom" msgstr "Reino Unido (Gran Bretaña)" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "Islas Americanas Menores del Exterior" #: src/countrycodes.cpp:236 msgid "United States" msgstr "Estados Unidos" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "Uruguay" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "Uzbequistán" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "Ciudad Estado del Vaticano (Santa Sede)" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "San Vicente y las Granadinas" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "Venezuela" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "Islas Vírgenes (Británicas)" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "Islas Vírgenes (EE.UU.)" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "Vietnám" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "Vanuatu" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "Islas Wallis y Futuna" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "Samoa" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "Yemen" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "Mayotte" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "Yugoslavia" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "Sudáfrica" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "Zambia" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "Zaire" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "Zimbabwe" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "(No se encontró el nombre completo del país)" #: src/crashreport.cpp:168 msgid "System informations" msgstr "Información del sistema" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "No se encontraron mapas" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "en cola" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "Descarga" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "% completado" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 msgid "Name" msgstr "Nombre" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "Tamaño" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "Tipo" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Mapa" #: src/downloader/filelister/filelistctrl.cpp:174 msgid "game" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "desconocido" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "Buscar y descargar archivos" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "Archivos mostrados" #: src/downloader/filelister/filelistdialog.cpp:55 msgid "Download selected" msgstr "Descargar seleccionados" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "%u archivos mostrados" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Filtrar nombres" #: src/downloader/filelister/filelistfilter.cpp:69 #, fuzzy msgid "Filetype:" msgstr "Archivo" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" "\n" "guardado correctamente en:\n" #: src/downloader/httpdownloader.cpp:78 msgid "" "\n" "successfully unzipped in:\n" msgstr "" "\n" "descomprimido correctamente en:\n" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" "\n" " falló la descompresión, por favor soluciónelo manualmente" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "No se pudo guardar\n" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" "\n" "Error número: " #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "Descarga completa." #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "Añadir robot" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Apodo:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "IA" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "" "Elige la librería IA (Inteligencia Artificial) para usar con los robots." #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "propiedad" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 msgid "value" msgstr "valor" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "Añadir robot" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "No se han encontrado robots con IA en tu instalación Spring" #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "No se han encontrado librerías de robots." #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "Método" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "Dividir rangos uniformemente" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Aleatorio" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "Clanes" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Ninguno" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "Limpio" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "Siempre" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" "Poner los miembros del mismo clan (usuarios con la msima etiqueta de clan, " "como '[ibericos]Alice' y '[ibericos]Bob' ) dentro de la misma alianza.\n" "None: nada especial para los clanes.\n" "Limpio: poner los miembros del clan en la alianza, almenos que haga la " "alianza injusta.\n" "Siempre: poner siempre los miembros del clan en la alianza, siempre que la " "alianza no sea injusta." #: src/hosting/autobalancedialog.cpp:53 msgid "Number of allies" msgstr "Número de aliados" #: src/hosting/autobalancedialog.cpp:56 msgid "Auto select" msgstr "Auto seleccionar" #: src/hosting/battlemaptab.cpp:69 msgid "Select" msgstr "Seleccionar" #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "Opción" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "Valor" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "Windspeed" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "Gravedad" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "Max metal" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "Arreglado" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "Elegir durante el juego" #: src/hosting/battlemaptab.cpp:103 msgid "Chose before game" msgstr "Elegir antes el juego" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "POsiciones iniciales" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "Restricciones de unidad" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "Unidades permitidas" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "Las unidades de esta lista estarán disponibles en el juego." #: src/hosting/battleoptionstab.cpp:77 msgid "Disable selected units." msgstr "Desactivar las unidades seleccionadas." #: src/hosting/battleoptionstab.cpp:81 msgid "Re-enable selected units." msgstr "Re-activar las unidades seleccionadas." #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "<<" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "Activar todas las unidades" #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "Unidades restringidas." #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "Las unidades de esta lista no estarán disponibles en el juego." #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "¿Cuántas unidades de este tipo desea permitir?" #: src/hosting/battleoptionstab.cpp:242 msgid "Unit restriction" msgstr "Restricción de unidades" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "Equipo" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "Aliado" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "Lado" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "Escoger color" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "Espectador" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "Expulsar" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "Por favor, introduzca un valor entre 0 y 100" #: src/hosting/battleroomlistctrl.cpp:750 msgid "AI (bot)\n" msgstr "IA (bot)\n" #: src/hosting/battleroomlistctrl.cpp:754 msgid "Human\n" msgstr "Humano\n" #: src/hosting/battleroomlistctrl.cpp:759 msgid "Spectator\n" msgstr "Espectador\n" #: src/hosting/battleroomlistctrl.cpp:763 msgid "Player\n" msgstr "Jugador\n" #: src/hosting/battleroomlistctrl.cpp:768 msgid "Host\n" msgstr "Anfitrión\n" #: src/hosting/battleroomlistctrl.cpp:772 msgid "Client\n" msgstr "Cliente\n" #: src/hosting/battleroomlistctrl.cpp:777 msgid "Ready\n" msgstr "Listo\n" #: src/hosting/battleroomlistctrl.cpp:781 msgid "Not ready\n" msgstr "No está listo\n" #: src/hosting/battleroomlistctrl.cpp:786 msgid "In sync" msgstr "Sincronizado" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "no sincronizado" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "" "Los jugadores con el mismo número de equipo compartirán el control de sus " "unidades." #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" "Los jugadores con el mismo número de aliado trabajaran juntos para lograr la " "victoria." #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "Seleccione un color para identificar sus unidades en el juego" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "Mirar una batalla en lugar de jugar" #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "Auto seleccionar" #: src/hosting/battleroomtab.cpp:144 #, fuzzy msgid "automatically unspec when there's a free slot" msgstr "revisar actualizaciones automáticamente" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "Estoy listo" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "" #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "Color" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Nuevo servidor..." #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Iniciar la batalla" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "Abandonar la batalla y volver a la lista de batallas" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "Comenzar" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "Iniciar la batalla" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "Administración de jugadores" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "Añadir robot" #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "Añadir un jugador controlado por la computadora al juego" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "Prevenir que jugadores adicionales se unan a la batalla" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Descripción" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 #, fuzzy msgid "AutoSpect" msgstr "Auto seleccionar" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Comenzar" #: src/hosting/battleroomtab.cpp:209 msgid "Automatically start the battle when all players are ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "Bloquear balance" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" "Cuando está activado, previene que alguien que no sea el administrador " "cambie equipos y aliados" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 #, fuzzy msgid "Ring unsynced" msgstr "Sincronizado" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 #, fuzzy msgid "Ring ..." msgstr "Anillo" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "No está listo" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 msgid "Force spectate ..." msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "Fijar colores" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "Hacer que el color de los jugadores sea único" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "" #: src/hosting/battleroomtab.cpp:255 msgid "Save" msgstr "Guardar" #: src/hosting/battleroomtab.cpp:256 msgid "Save a set of options." msgstr "Guardar un conjunto de opciones." #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 msgid "Delete" msgstr "Eliminar" #: src/hosting/battleroomtab.cpp:261 msgid "Delete a set of options." msgstr "Eliminar un conjunto de opciones." #: src/hosting/battleroomtab.cpp:265 msgid "Set default" msgstr "" #: src/hosting/battleroomtab.cpp:266 msgid "Use the current set of options as game's default." msgstr "" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "Elegir" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "Continuar" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "Fin" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "El mapa no existe." #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "No está listo" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "Elegir durante el juego" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Descripción" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "Asignar nombre." #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "No se puede guardar las opciones sin un nombre." #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "error" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 msgid "Delete preset" msgstr "" #: src/hosting/battleroomtab.cpp:996 msgid "Set game default preset" msgstr "" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "" "Una descripción corta del juego, esta aparecerá en la lista de batallas." #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Descripción" #: src/hosting/hostbattledialog.cpp:91 msgid "Automatically write the battle description when a user joins." msgstr "" #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "Seleccione el idioma" #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "Con contraseña" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "" "Contraseña requerida para iniciar el juego. Déjelo vació si no quiere usar " "una contraseña" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "Puerto" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "" #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 #, fuzzy msgid "Randomly picks an available one" msgstr "no hay opciones disponibles" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "Número de jugadores" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "El máximo número de jugadores permitidos en esta batalla." #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "" #: src/hosting/hostbattledialog.cpp:185 msgid "NAT traversal to use." msgstr "" #: src/hosting/hostbattledialog.cpp:190 #, fuzzy msgid "Rank requirement" msgstr "Se requiere reiniciar" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 msgid "Select the type of rank enforcement." msgstr "" #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "" #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 #, fuzzy msgid "You have to select a game first." msgstr "Tú has seleccionado un mapa primero." #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "Descargar seleccionados" #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" #: src/hosting/hostbattledialog.cpp:427 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:459 #, fuzzy msgid "Battle not started beacuse the game you selected could not be found. " msgstr "La batalla no comenzará porque no se encuentra el mod seleccionado. " #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "Error empezando batalla." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "No se encontraron mapas" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "Opciones" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 msgid "Unit Restrictions" msgstr "Restricciones de la unidad" #: src/hosting/mmoptionwindows.cpp:36 msgid "Change option" msgstr "Cambiar opción" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "El juego está abierto." #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "El juego está protegido por contraseña." #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "El juego está completo." #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "El juego está completo y protegido por contraseña." #: src/iconimagelist.cpp:322 msgid "Game is closed." msgstr "El juego está cerrado" #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "El juego está cerrado y protegido por contraseña." #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "El juego está cerrado y completo." #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "El juego está cerrado, completo y protegido por contraseña." #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "El juego está en progreso." #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "El juego está en progreso y protegido por contraseña." #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "El juego está en progreso y completo." #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "El juego está en progreso, completo y protegido por contraseña." #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "El juego está en progreso y cerrado." #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "El juego está en progreso, cerrado y protegido por contraseña." #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "El juego está en progreso, cerrado y completo." #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" "El juego está en progreso, cerrado, completo y protegido por contraseña." #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 #, fuzzy msgid "Newbies guide" msgstr "Novato en canzoncillos" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 msgid "Joining a battle:\n" msgstr "" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "Error empezando batalla." #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Version de Spring" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 #, fuzzy msgid "Singleplayer gamee" msgstr "Un jugador" #: src/introguide.cpp:110 #, fuzzy msgid "Multiplayer gamee" msgstr "Multijugador" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "Cualquier archivo (*)|*" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 msgid "Disconnected from server, chat closed." msgstr "Desconectado del servidor, chat cerrado." #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "Transferencias en progreso: " #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "Total Entrante: " #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "Cancelar descarga" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "&Conectar..." #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "&Desconectar" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 msgid "&Save options" msgstr "Guardar opcione_s" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "Salir" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "Unirse automáticamente a este canal" #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "Error en la configuración de Spring" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "Guardar opcione_s" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "Unirse al canal..." #: src/mainwindow.cpp:164 msgid "Channel &list" msgstr "&Lista de canales" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "Abrir &chat privado..." #: src/mainwindow.cpp:166 #, fuzzy msgid "Change &username" msgstr "&Cambiar idioma" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "&Ver capturas de pantalla" #: src/mainwindow.cpp:169 msgid "&Reload maps/games" msgstr "" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "Buscar nuevas versiones" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "&Acerca de" #: src/mainwindow.cpp:178 #, fuzzy msgid "&System Info" msgstr "Información del sistema" #: src/mainwindow.cpp:179 msgid "&Change language" msgstr "&Cambiar idioma" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "Info&rmar un error..." #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "&Documentación" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "Servidor" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "Herramien&tas" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "Ayuda" #: src/mainwindow.cpp:500 #, fuzzy msgid "You need to be connected to a server to view the channel list" msgstr "Necesita estar conectado al servidor para ver la lista de canales" #: src/mainwindow.cpp:500 msgid "Not connected" msgstr "No conectado" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "Unirse al canal..." #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "Abrir chat privado..." #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "Nombre de usuario" #: src/mainwindow.cpp:540 #, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 msgid "No files found" msgstr "No se encontraron archivos" #: src/mainwindow.cpp:656 #, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "Se requiere reiniciar" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "Ingrese un nombre de perfil" #: src/mainwindow.cpp:692 msgid "This profile is write protected, please choose another name" msgstr "" #: src/mainwindow.cpp:703 #, fuzzy msgid "Which profile do you want to load?" msgstr "¿Qué perfil desea cargar?" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "Renombrar..." #: src/mainwindow.cpp:767 #, fuzzy msgid "Enter new nickname" msgstr "Ingrese nombre" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "Chat" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "Lista de batallas" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "Un jugador" #: src/mainwindow.h:203 msgid "Replays" msgstr "Repeticiones" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 msgid "Downloads" msgstr "Descargas" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "Metal: %.1f%%" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "Actualizar" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "Descarga" #: src/mapctrl.cpp:897 msgid "side:" msgstr "lado:" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "aliado: %d" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "bonus: %d%%" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 msgid "Show" msgstr "Mostrar" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" #: src/mapselectdialog.cpp:95 msgid "Filter" msgstr "Filtrar" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" #: src/mapselectdialog.cpp:100 msgid "Map details" msgstr "" #: src/mapselectdialog.cpp:163 msgid "Start positions" msgstr "Iniciar posiciones" #: src/mapselectdialog.cpp:261 msgid "Minimum wind" msgstr "Viento mínimo" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "Viento máximo" #: src/mapselectdialog.cpp:263 msgid "Average wind" msgstr "Viento promedio" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "Tamaño (área del mapa)" #: src/mapselectdialog.cpp:265 msgid "Aspect ratio" msgstr "Relación de aspecto" #: src/mapselectdialog.cpp:266 msgid "Number of start positions" msgstr "Número de posiciones iniciales" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "Tipo de posición inicial" #: src/mmoptionswrapper.cpp:122 msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "Elegir durante el juego" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "Elegir antes el juego" #: src/mmoptionswrapper.cpp:132 msgid "List of restricted units" msgstr "Lista de unidades restringidas" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "Nombre del mapa" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "s" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "c" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "r" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "Colores y fuentes" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "Utilice los colores del sistema" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "Normal" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "Fondo" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "Acción" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "Highlight" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "Unir/Abanadonar" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "Mis mensajes" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "Cliente" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "Timestamp" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "Notificación" #: src/options/chatoptionstab.cpp:258 msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "Tipografía" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "predeterminado" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "Seleccionar..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "Comportamiento" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "Activar colores IRC en los mensajes de chat" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "Reproducir sonidos de notificación" #: src/options/chatoptionstab.cpp:300 msgid "Copy server messages in current channel" msgstr "" #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "Registros de chat" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "Guardar registros de chat" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "Resaltar palabras" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "Palabras que se resaltarán en el chat:" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "ingrese una lista separada por ;" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "" #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "Detener todos los torrents" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "Regular velocidad:" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "subida (KB/s)" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "bajada (KB/s)" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "Números" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "velocidad de subida máxima en KB/sec (-1 para infinito)" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "velocidad de descarga máxima en KB/sec (-1 para infinito)" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "Puertos usados para las conexiones de los torrents" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "Número máximo de conexiones simultaneas" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 msgid "Remove" msgstr "Eliminar" #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "Eliminar un grupo existente" #: src/options/groupoptionspanel.cpp:61 msgid "Rename.." msgstr "Renombrar..." #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "Renombrar un grupo existente" #: src/options/groupoptionspanel.cpp:70 msgid "Add New.." msgstr "Añadir Nuevo..." #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "Añadir nuevo grupo" #: src/options/groupoptionspanel.cpp:84 msgid "Group Actions" msgstr "Acciones del grupo" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "Notificar cuando los usuarios de este grupo inician o cierran sesión" #: src/options/groupoptionspanel.cpp:95 msgid "Ignore Chat" msgstr "Ignorar Chat" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "Ignorar todo lo dicho en el canal por miembros de este grupo" #: src/options/groupoptionspanel.cpp:101 msgid "Notify Hosted Battles" msgstr "" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:134 msgid "Highlight Color" msgstr "Color de resaltado" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "Seleccione el color de resaltado" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "Usuarios en el grupo" #: src/options/groupoptionspanel.cpp:163 msgid "Add.." msgstr "Añadir." #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "Añadir usuario al grupo" #: src/options/groupoptionspanel.cpp:170 msgid "Remove users from group" msgstr "Eliminar usuario del grupo" #: src/options/groupoptionspanel.cpp:264 msgid "Name of new group:" msgstr "Nombre del nuevo grupo:" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "Añadir Nuevo Grupo" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "Navegador web" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "Buscador predeterminado" #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "Especificar:" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "Especifique el navegador web que quiera usar" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "Explorar" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 msgid "Use a file dialog to find the editor binary" msgstr "" #: src/options/lobbyoptionstab.cpp:91 msgid "Autoconnect" msgstr "Autoconectar" #: src/options/lobbyoptionstab.cpp:94 #, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" #: src/options/lobbyoptionstab.cpp:96 msgid "Autoconnect on lobby start" msgstr "" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "Estadísticas del informe" #: src/options/lobbyoptionstab.cpp:104 #, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "estadísticas del informe" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "Actualizaciones automáticas" #: src/options/lobbyoptionstab.cpp:120 #, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "revisar actualizaciones automáticamente" #: src/options/lobbyoptionstab.cpp:130 msgid "Tooltips" msgstr "Consejos" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "¿Mostrar consejos?" #: src/options/lobbyoptionstab.cpp:134 #, c-format msgid "Requires %s restart to take effect." msgstr "" #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "Reproducir sonidos de notificación" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 #, fuzzy msgid "Display time for popup notifications in seconds" msgstr "Reproducir sonidos de notificación" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 msgid "Start tab" msgstr "" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "Elegir una navegador web ejecutable" #: src/options/lobbyoptionstab.cpp:282 #, fuzzy msgid "Choose a editor browser executable" msgstr "Elegir una navegador web ejecutable" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "Spring" #: src/options/mainoptionstab.cpp:73 msgid "General" msgstr "General" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "Grupos" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "Restaurar" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "Aplicar" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "Ejecutable Spring" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "Ubicación" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "Buscar" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "Librería UnitSync" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "Configurar automáticamente" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "Elegir un ejecutable Spring" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "Librería" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "Cualquier archivo" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 #, fuzzy msgid "Reloading unitsync" msgstr "Actualizar lista" #: src/options/springoptionstab.cpp:315 #, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "Elegir carpeta" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" #: src/playback/playbackfilter.cpp:60 msgid "Filter settings" msgstr "Configuración de filtros" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Sólo mapas que tengo" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "Tamaño de archivo en KB:" #: src/playback/playbackfilter.cpp:190 msgid "Duration (hh:mm:ss):" msgstr "Duración (hh:mm:ss):" #: src/playback/playbacklistctrl.cpp:42 msgid "Date" msgstr "Fecha" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "Fecha de grabación" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Nombre del mapa" #: src/playback/playbacklistctrl.cpp:46 msgid "Duration" msgstr "Duración" #: src/playback/playbacklistctrl.cpp:47 msgid "Spring Version" msgstr "Version de Spring" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize" msgstr "Tamaño del archivo" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "Tamaño del archivo en kilobytes" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "Archivo" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "Descargar m&od" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "Observar" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "Cargar..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "Actualizar lista" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "Repeticiones" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "savegame" msgstr "guardar como" #: src/playback/playbacktab.cpp:288 msgid "Couldn't get your spring versions from any unitsync library." msgstr "" #: src/playback/playbacktab.cpp:306 #, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "Sus versiones actualmente instalados son:" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" #: src/playback/playbacktab.cpp:323 msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" "No creo que pueda ver esta repetición.\n" "¿Intentar de todas formas? (¡PUEDE FALLAR!)" #: src/playback/playbacktab.cpp:356 msgid "Invalid replay" msgstr "Repetición inválida" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "No se pudo eliminar la repetición: " #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr " tiempo restante indefinido" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr " %d minutos restantes" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 #, fuzzy msgid "There was an error downloading for the latest version.\n" msgstr "" "Ocurrió un error descargando la última versión.\n" "Por favor actualice manualmente desde http://springrts.com" #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "Notificación" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "Número inválido" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 #, fuzzy msgid "File doesn't exit" msgstr "El mapa no existe." #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Activado" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "Reconectar" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 #, fuzzy msgid "Unknown Error" msgstr "Respuesta desconocida del servidor" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "Descarga completa, la ubicación del archivo es: " #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 msgid "Download complete." msgstr "Descarga completa." #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "No se pudo ejecutar el instalador. La ubicación del archivo es: " #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer." msgstr "No se pudo ejecutar el instalador." #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "Reconectar" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "Reconectar" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 #, fuzzy msgid "Tries to connect to the next server in the list." msgstr "Necesita estar conectado al servidor para ver la lista de canales" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 msgid "Do nothing" msgstr "" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "Filtrar nombres" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "" #: src/selectusersdialog.h:67 msgid "Select Users" msgstr "Seleccionar Usuarios" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 msgid " is online" msgstr " está conectado" #: src/serverevents.cpp:165 msgid " is now " msgstr " está ahora " #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "" #: src/serverevents.cpp:224 msgid " just went offline" msgstr " se acaba de desconctar" #: src/serverevents.cpp:259 msgid " opened battle " msgstr "" #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "No pudo unirse al canal " #: src/serverevents.cpp:583 msgid " because: " msgstr " porque: " #: src/serverevents.cpp:826 msgid "Server Message" msgstr "Mensaje del servidor" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr " tiene ip=%s" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr "" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "" #: src/serverevents.cpp:928 #, c-format msgid "%s mutelist" msgstr "" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "" #: src/serverevents.cpp:984 msgid "Download update" msgstr "Descargar actualización" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 #, fuzzy msgid "Automatically moved to new battle" msgstr "revisar actualizaciones automáticamente" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "Añadir robor..." #: src/singleplayertab.cpp:99 msgid "Spectate only" msgstr "" #: src/singleplayertab.cpp:102 msgid "Random start positions" msgstr "" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "-- Seleccionar una --" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 #, fuzzy msgid "Game setup error" msgstr "Error de la configuración del juego" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "Tú has seleccionado un mapa primero." #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "No hay robots añadidos" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "No puedes comenzar un spring mientras ya esté otro en ejecución" #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 msgid "Coulnd't load required unitsync library" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 #, fuzzy msgid "Fatal error" msgstr "Error crítico" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "Error crítico" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "mostrar este mensaje de ayuda" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 msgid "Ignore chat" msgstr "Ignorar chat" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 msgid "Battle Autokick" msgstr "" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 msgid "Friends" msgstr "Amigos" #: src/springsettings/ctrlconstants.h:215 #, fuzzy msgid "Scrollwheel speed" msgstr "Regular velocidad:" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "" #: src/springsettings/ctrlconstants.h:229 #, fuzzy msgid "Terrain detail" msgstr "Detalle de gráficos" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "Unit LOD distance" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "higher value = units will remain detailed even when zooming out" msgstr "" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "Grass detail" msgstr "Detalle de gráficos" #: src/springsettings/ctrlconstants.h:231 msgid "higher value = more detailed grass" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:236 msgid "Max nano simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "" #: src/springsettings/ctrlconstants.h:245 #, fuzzy msgid "Enable v-sync" msgstr "Sincronizado" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "Full-scene anti-aliasing samples" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "Master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "General sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "general volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "reply volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "Battle volume" msgstr "Batalla cerrada" #: src/springsettings/ctrlconstants.h:276 msgid "battle volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "User interface volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "ui volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "" #: src/springsettings/ctrlconstants.h:291 #, fuzzy msgid "Reflective units" msgstr "Unidades restringidas." #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "" #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 #, fuzzy msgid "left is the default" msgstr " abandonó " #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "" #: src/springsettings/ctrlconstants.h:312 #, fuzzy msgid "Use less colors" msgstr "Utilice los colores del sistema" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" #: src/springsettings/ctrlconstants.h:320 #, fuzzy msgid "Show in-game player information" msgstr "Información del sistema" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 #, fuzzy msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "Velocidad de scroll (ratón + teclado)" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" #: src/springsettings/ctrlconstants.h:385 #, fuzzy msgid "Reflective" msgstr "Seleccionar" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "" #: src/springsettings/ctrlconstants.h:415 msgid "Blur reflection" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Shore waves" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Enables shorewaves" msgstr "" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "Acción" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 msgid "Reflection texture size" msgstr "" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "Duración" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 #, fuzzy msgid "off" msgstr "Desactivado" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "Opciones combinadas" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "Calidad de renderizado / Modo de Vídeo" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "Detalle de renderizado" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "Opciones de la IU" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "Audio" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "¡Error!" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "Se necesita confirmación" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "Guardar configuración" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "Resetear valores a valores predeterminados" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "Desactivar advertencias en modo experto" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "Salir" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "Simple (pocas opciones)" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "EXperto (todas las opciones)" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "Acerca de" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "Contacto" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "Créditos" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "Informar sobre un error" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "Modo" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "Info/Ayuda" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "¿Resetear todos los valores a valores predeterminados?" #: src/springsettings/frame.cpp:315 msgid "(simple mode)" msgstr "" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "Sugerencia" #: src/springsettings/frame.cpp:367 #, fuzzy msgid "(expert mode)" msgstr "Activar modo experto" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "Kloot" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "El equipo de SpringLobby" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "puerto inválido" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 #, fuzzy msgid "Hotkey Error" msgstr "Error en ayuda" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 #, fuzzy msgid "Enter new command:" msgstr "Comandos de chat:" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 #, fuzzy msgid "Hotkey SaveSettings error" msgstr "Error en la configuración de Spring" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "No se encontraron archivos" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "" #: src/springsettings/panel_pathoption.cpp:34 msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "Usar esta ruta" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "libunitsync.so en linux, unitsync.dll en windows" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "Configuración de ruta" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "" #: src/springsettings/panel_pathoption.cpp:96 msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "bajo" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "medio" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "alto" #: src/springsettings/presets.h:45 msgid "very low" msgstr "muy bajo" #: src/springsettings/presets.h:45 msgid "very high" msgstr "muy alto" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "No se puede lanzar el explorador predeterminado" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "No se pudo lanzar el explorador. URL is: " #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "No se pudo lanzar el explorador." #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "No se pudo acceder a tu configuración.\n" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "Opciones de Audio" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "Resolución de pantalla" #: src/springsettings/tab_quality_video.cpp:166 #, fuzzy msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" "Si una opción necesita hardware especial para funcionar\n" "se mencionará en la herramienta de consejos." #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "Calidad del agua" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "Resolución en bit" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "Opciones de calidad de renderizado" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "Opciones de modos de vídeo" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "Opciones de Anti-Aliasing" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "Detalle de niveles de renderizado" #: src/springsettings/tab_simple.cpp:40 msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "Calidad de gráficos" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "Detalle de gráficos" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "Resolución de pantalla" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "Activar modo experto" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr " (actual)" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" "Fijar todos los valores de calidad de las opciones predefinidas de acuerdo a " "tus cambios." #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" "Fijar todos los valores de detgalle de las opciones predefinidas de acuerdo " "a tus cambios." #: src/springsettings/tab_simple.cpp:99 msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "Info" #: src/springsettings/tab_ui.cpp:37 msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "Velocidad de scroll (ratón + teclado)" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "Modo de cámara predeterminado" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "Misc. UI Opciones" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "Zoom" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "Unidades permitidas" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "Expiró la conexión" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "Respuesta desconocida del servidor" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" #: src/tdfcontainer.cpp:131 msgid "line " msgstr "línea " #: src/tdfcontainer.cpp:131 msgid " , column " msgstr " , columna " #: src/ui.cpp:175 msgid "Server password" msgstr "Contraseña de servidor" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" #: src/ui.cpp:294 msgid "Registration successful" msgstr "" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "" #: src/ui.cpp:458 msgid "Help error" msgstr "Error en ayuda" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, c-format msgid "%s commands help." msgstr "" #: src/ui.cpp:465 msgid "Global commands:" msgstr "Comandos globales:" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr "" #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr "" #: src/ui.cpp:468 msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" #: src/ui.cpp:469 msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr "" #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr "" #: src/ui.cpp:472 msgid " \"/join channel [password]\" - Joins a channel." msgstr "" #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr " \"/j\" - Alias to /join." #: src/ui.cpp:474 msgid " \"/ingame\" - Shows how much time you have in game." msgstr "" #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" #: src/ui.cpp:476 msgid " \"/part\" - Leaves current channel." msgstr "" #: src/ui.cpp:477 msgid " \"/p\" - Alias to /part." msgstr "" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr " \"/rename newalias\" - Cambiar tu alias actual por otro." #: src/ui.cpp:479 #, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr "" #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr "" #: src/ui.cpp:481 #, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr "" #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "Comandos de chat:" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr "" #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "No hay temas escritos aún." #: src/ui.cpp:496 msgid "The topic \"" msgstr "El tema \"" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "" #: src/ui.cpp:580 msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" #: src/ui.cpp:599 msgid "Online play is currently disabled." msgstr "" #: src/ui.cpp:631 #, fuzzy, c-format msgid "disconnected from server: %s" msgstr "Desconectado del servidor, chat cerrado." #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "no hay abiertos paneles de chat activos" #: src/ui.cpp:839 #, fuzzy, c-format msgid "%s (%d users)" msgstr "(%d usuarios)" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "La batalla actual fue cerrada por el servidor." #: src/ui.cpp:993 msgid "Battle closed" msgstr "Batalla cerrada" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "Error en la configuración de Spring" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "" #: src/ui.cpp:1337 #, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" #: src/ui.cpp:1340 msgid "Welcome" msgstr "Bienvenido" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 msgid "Import settings?" msgstr "" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/ui.cpp:1387 msgid "Your Version: " msgstr "" #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "" #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 msgid "Not up to date" msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "error de ChanServ" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" #: src/updater/updater.cpp:72 msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/updater/updater.cpp:81 #, fuzzy, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" "Ocurrió un error descargando la última versión.\n" "Por favor actualice manualmente desde http://springrts.com" #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 msgid "the SpringLobby revision to update to" msgstr "" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "SpringLobby" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 msgid "Warning" msgstr "" #: src/user.cpp:83 msgid "away" msgstr "" #: src/user.cpp:83 msgid "back" msgstr "" #: src/user.cpp:85 msgid "ingame" msgstr "" #: src/user.cpp:85 msgid "back from game" msgstr "" #: src/user.cpp:195 msgid "Newbie" msgstr "Novato en canzoncillos" #: src/user.cpp:196 msgid "Beginner" msgstr "Principiante" #: src/user.cpp:197 msgid "Average" msgstr "Avanzado" #: src/user.cpp:198 msgid "Above average" msgstr "Muy avanzado" #: src/user.cpp:199 msgid "Experienced" msgstr "Experimentado" #: src/user.cpp:200 msgid "Highly experienced" msgstr "Altamente experimentado" #: src/user.cpp:201 msgid "Veteran" msgstr "Veterano" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 msgid "Unknown" msgstr "" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "" #: src/useractions.h:11 msgid "none" msgstr "" #: src/useractions.h:11 msgid "highlight" msgstr "" #: src/useractions.h:11 msgid "notify login/out" msgstr "" #: src/useractions.h:11 msgid "ignore chat" msgstr "" #: src/useractions.h:11 msgid "ignore pm" msgstr "" #: src/useractions.h:12 msgid "autokick" msgstr "" #: src/useractions.h:12 msgid "notify hosted battle" msgstr "" #: src/useractions.h:12 msgid "notify status change" msgstr "" #: src/useractions.h:19 msgid "no action at all" msgstr "" #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" #: src/usermenu.h:31 msgid "Create new group..." msgstr "" #: src/usermenu.h:37 msgid "Add to group..." msgstr "" #: src/usermenu.h:38 msgid "Remove from group" msgstr "" #: src/utils/controls.h:22 msgid "Choose color" msgstr "" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 msgid "Author" msgstr "" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Games" msgstr "Juego" #: src/widgets/downloadlistctrl.cpp:31 msgid "Compatible games" msgstr "" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "Filtrar nombres" #: src/widgets/infopanel.cpp:74 msgid "Current version" msgstr "" #: src/widgets/infopanel.cpp:79 msgid "# downloaded" msgstr "" #: src/widgets/infopanel.cpp:84 msgid "Published on" msgstr "" #: src/widgets/infopanel.cpp:121 msgid "Changelog" msgstr "" #: src/widgets/infopanel.cpp:126 msgid "Screenshots" msgstr "" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" #, fuzzy #~ msgid "Settings" #~ msgstr "Guardar configuración" #, fuzzy #~ msgid "Help" #~ msgstr "Ayuda" #, fuzzy #~ msgid "Faction" #~ msgstr "Acción" #~ msgid "Mod" #~ msgstr "Mod" #~ msgid "spectators" #~ msgstr "espectadores" #~ msgid "players" #~ msgstr "jugadores" #~ msgid "max" #~ msgstr "máx" #~ msgid "Mod:" #~ msgstr "Mod:" #~ msgid "Only mods i have" #~ msgstr "Sólo mods que tengo" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to host a new game" #~ msgstr "" #~ "Ya estás corriendo un Spring, cierra este primero para poder ser servidor " #~ "en juego nuevo" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to join another battle." #~ msgstr "" #~ "Ya estás ejecutando un Spring, cierra primero éste para poder unirte a " #~ "otra batalla." #~ msgid "Do you want me to take you to the download page?" #~ msgstr "¿Desea que lo lleve a la página de descargas?" #~ msgid "Mod not available" #~ msgstr "Mot no disponible" #~ msgid "Enter password" #~ msgstr "Introduzca la contraseña" #~ msgid "team" #~ msgstr "equipo" #~ msgid "ally" #~ msgstr "aliado" #~ msgid "cpu" #~ msgstr "cpu" #~ msgid "Load a saved set of options." #~ msgstr "Cargar un conjunto de opciones guardadas." #~ msgid "Save..." #~ msgstr "Guardar…" #~ msgid "Delete..." #~ msgstr "Eliminar…" #~ msgid "Mod Options" #~ msgstr "Opciones de Mod" #~ msgid "Map Options" #~ msgstr "Opciones de mapa" #~ msgid "Hash" #~ msgstr "Hash" #~ msgid "unknown hash " #~ msgstr "hash desconocido " #~ msgid "Test firewall" #~ msgstr "Probar firewall" #~ msgid "P2P" #~ msgstr "P2P" #~ msgid "Total Outgoing: " #~ msgstr "Total Saliente: " #~ msgid "Publish new file" #~ msgstr "Publicar un nuevo archivo" #~ msgid "Search file" #~ msgstr "Buscar archivo" #~ msgid "not available" #~ msgstr "no disponible" #~ msgid "seeding" #~ msgstr "enviando" #~ msgid "Status: not connected" #~ msgstr "Estado: no conectado" #~ msgid "Status: connected" #~ msgstr "Estado: conectado" #~ msgid "Status: unknown" #~ msgstr "Estado: desconocido" #~ msgid "Total Outgoing: %.2f KB/s" #~ msgstr "Total Saliente: %.2f KB/s" #~ msgid "Total Incoming: %.2f KB/s" #~ msgstr "Total Entrante: %.2f KB/s" #~ msgid "&File" #~ msgstr "Archivo" #~ msgid "Which profile do you want to be default?" #~ msgstr "¿Cuál es el perfil que desea utilizar como predeterminado?" #~ msgid "Download started" #~ msgstr "Descarga iniciada" #~ msgid "You refused a mandatory update, you will be disconnected now." #~ msgstr "" #~ "Usted se rehusó a realizar una actualización obligatoria, será " #~ "desconectado inmediatamente." #~ msgid "Disconnecting" #~ msgstr "Desconectando" #~ msgid "Debug" #~ msgstr "Depuración" #~ msgid "Debug Options" #~ msgstr "Opciones de depuración" #~ msgid "Player" #~ msgstr "Jugador" #~ msgid "Hi " #~ msgstr "Hola " #~ msgid "Notice" #~ msgstr "Aviso" #~ msgid "MB downloaded" #~ msgstr "MB descargados" #~ msgid "MB uploaded" #~ msgstr "MB subidos" #~ msgid "status" #~ msgstr "estado" #~ msgid "KB/s up" #~ msgstr "KB/s subiendo" #~ msgid "KB/s down" #~ msgstr "KB/s bajando" #~ msgid "ETA (s)" #~ msgstr "ETA (s)" #~ msgid "Filesize (MB)" #~ msgstr "Tamaño (MB)" #~ msgid "Torrent system autostart" #~ msgstr "Autocomenzar sistema de torrent" #~ msgid "manual" #~ msgstr "manual" #~ msgid "Type /help in a chat box." #~ msgstr "Escribir /help en una ventana de chat" #~ msgid "a" #~ msgstr "a" #~ msgid "p" #~ msgstr "p" #~ msgid "m" #~ msgstr "m" #~ msgid "%d%" #~ msgstr "%d%" #~ msgid "t" #~ msgstr "t" #~ msgid "Not a number" #~ msgstr "No un número" #~ msgid "_SERVER" #~ msgstr "_SERVER" #~ msgid "Missing Functionality" #~ msgstr "Funcionalidad perdida" #~ msgid "Download OTA content?" #~ msgstr "¿Descargar contenido OTA?" #~ msgid "Create a folder in a custom path (you'll get prompted for the path)" #~ msgstr "" #~ "Crear una carpeta en la ruta definida (tendrás que escribir la ruta)" #~ msgid "Active chat channels:" #~ msgstr "Activar canales de chat:" #~ msgid "no rank" #~ msgstr "Sin rango" #~ msgid "You have one or more bots sharing team, this is not possible." #~ msgstr "Tienes uno o más robots compatiendo equipo, esto no es posible." #~ msgid "/.spring" #~ msgstr "/.spring" #~ msgid "Start system" #~ msgstr "Comenzar sistema" #~ msgid "Stop system" #~ msgstr "Parar sistema" #~ msgid "End condition" #~ msgstr "Fin de condición" #~ msgid "Resources" #~ msgstr "Recursos" #~ msgid "Max units" #~ msgstr "Unidades máximas" #~ msgid "Limit d-gun" #~ msgstr "Límite d-gun" #~ msgid "Reset" #~ msgstr "Restablecer" #~ msgid "Spring directory" #~ msgstr "Directorio Spring" #~ msgid "Default location." #~ msgstr "Localización predefinida" springlobby-0.169/po/fi.po0000600000176000000410000047714512105760300017015 0ustar buildbotwww-data00000000000000# Finnish translation for springlobby # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the springlobby package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: springlobby\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2008-07-30 23:31+0000\n" "Last-Translator: SpringLobby_Buildbot \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2008-09-20 21:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "" #: src/Helper/imageviewer.cpp:92 #, fuzzy msgid "delete" msgstr "Valitse" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "Virhe" #: src/Helper/imageviewer.cpp:160 #, fuzzy msgid "Choose a filename" msgstr "Valitse pelissä" #: src/Helper/imageviewer.cpp:167 msgid "File successfully saved" msgstr "" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 #, fuzzy msgid "Success" msgstr "Aseta oikeudet..." #: src/Helper/imageviewer.cpp:170 msgid "Couldn't save file" msgstr "" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 #, fuzzy msgid "Default" msgstr "oletus" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" #: src/Helper/wxTranslationHelper.cpp:148 #, fuzzy msgid "Select the language" msgstr "Kanavan tiedot" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Hyväksy sopimus" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "Haluatko hyväksyä tämän sopimuksen ehdot?" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Kyllä" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "Ei" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 #, fuzzy msgid "User" msgstr "Hiljennä käyttäjä" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 #, fuzzy msgid "Channel" msgstr "kanava" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Tila:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 #, fuzzy msgid "Minimum rank to join" msgstr "Minimi arvomerkkivaatimus" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Kuvaus" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Kuvaus" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Kenttä" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 #, fuzzy msgid "Mapname" msgstr "Panama" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "Peli" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "Peli" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Palvelin" #: src/battlelist/battlelistctrl.cpp:60 #, fuzzy msgid "Name of the Host" msgstr "Käyttäjän nimi" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Katsojat:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "Pelaajien määrä" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 #, fuzzy msgid "Players" msgstr "Pelaajat:" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "Pelaajien määrä" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Kenttä" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Maximum number of Players that can join" msgstr "Maksimi määrä pelaajia sallittu pelissä." #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "Lataa &map" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "Lataa &map" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Katsojat:" #: src/battlelist/battlelistctrl.cpp:370 #, fuzzy msgid "Active Players:" msgstr "Pelaajat:" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "Palvelin:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Tila:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Lukittu" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "Salasanasuojattu" #: src/battlelist/battlelistfilter.cpp:122 #, fuzzy msgid "Highlighted only" msgstr "Korostus" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "Tasorajoitus" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Kuvaus:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Aloitettu" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Täysi" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "Avaa" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Pelaaja:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Kaikki" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Kartta:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Vain asennetut kartat" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "Maksimi määrä pelaajia:" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 #, fuzzy msgid "Game:" msgstr "Peli" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Vain asennetut kartat" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Katsoja:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Pelaajat:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 #, fuzzy msgid " Filter " msgstr "&Tiedosto" #: src/battlelist/battlelisttab.cpp:144 #, fuzzy msgid "Activated" msgstr "Aloitettu" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 #, fuzzy msgid " Battle infos " msgstr "Pelilistaus" #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "Isännöi uusi..." #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "liity" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" "Et voi isännöidä peliä ellet ole yhdistyneenä. Ole hyvä ja yhdistä " "palvelimeen." #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "Ei kirjautuneena." #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "Pelien isännöinti estetty väärän ohjelmistoversion vuoksi." #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Spring virhe" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "Olet jo mukana pelissä" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" "Olet jo mukana pelissä.\n" "\n" "Haluatko poistua nykyisestä pelistä käynnistääksesi uuden?" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "Peleihin liittyminen on estetty johtuen väärästä Spring-versiosta." #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 msgid "Matchmaker detected" msgstr "" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "Olet jo mukana pelissä" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "Olet jo mukana pelissä.\n" "\n" "Haluatko poistua nykyisestä pelistä liittyäksesi tähän?" #: src/battlelist/battlelisttab.cpp:430 msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" #: src/battlelist/battlelisttab.cpp:433 msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "Karttatiedostoa ei saatavilla" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "Karttatiedostoa ei saatavilla" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "Pelin salasana" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 #, fuzzy msgid "Edit auto-joined channels" msgstr "Liity tähän kanavaan automaattisesti" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "" #: src/channel/channelchooser.cpp:30 #, fuzzy msgid "Find channel:" msgstr "Liity kanavalle..." #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 #, fuzzy msgid "Choose channels to join" msgstr "Kanavan nimi" #: src/channel/channellistctrl.cpp:30 #, fuzzy msgid "# users" msgstr "(%d käyttäjät)" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "### Yhteys suljettu [" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" "Kansiota ei pystytty luomaan. \n" "Varmista että kirjoitus ei ole estettynä.\n" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "Loki -toiminto on estetty kunnes käynnistät ohjelman uudelleen." #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "Varoitus lokissa." #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" "Viestiä ei pystytty tallentamaan lokiin.\n" "Loki -toiminto poissa käytössä tässä pelissä. " #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" ".\n" "\n" "Liity peliin uudelleen käynnistääksesi loki -toiminnon." #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 #, fuzzy msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" "Lokitiedostoa ei voitu avata. \n" "Varmistu että kirjoittaminen on sallittu.\n" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "" #: src/chatpanel.cpp:69 msgid "#" msgstr "" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, fuzzy, c-format msgid "%d users" msgstr "(%d käyttäjät)" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "" #: src/chatpanel.cpp:296 msgid "Send" msgstr "Lähetä" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr " !! Komento: \"" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "\" parametrit: \"" #: src/chatpanel.cpp:717 msgid "channel" msgstr "kanava" #: src/chatpanel.cpp:718 msgid "battle" msgstr "peli" #: src/chatpanel.cpp:719 msgid "server" msgstr "palvelin" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr " liityit peliin " #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr " poistuit pelistä " #: src/chatpanel.cpp:814 #, fuzzy msgid " ** Channel topic:" msgstr "Kanavan tiedot" #: src/chatpanel.cpp:821 #, fuzzy msgid " ** Set by " msgstr "" "\n" " * Asettaja " #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "Keskustelu suljettu." #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "Oletko varma että haluat liittää %d riviä?" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr " Sinulla on käytössä SpringLobby v" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr " Et ole kanavalla tai kanavaa ei ole olemassa." #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr " Käyttäjä ei ole yhdistyneenä." #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr " Lähetetty: \"" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "\"" #: src/chatpanel.cpp:1090 #, fuzzy msgid " ** User is now offline." msgstr " Käyttäjä ei ole yhdistyneenä." #: src/chatpanel.cpp:1097 #, fuzzy msgid " ** User just got online." msgstr " Käyttäjä ei ole yhdistyneenä." #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 #, fuzzy msgid " ** Joined Battle." msgstr " liityit peliin " #: src/chatpanelmenu.cpp:34 msgid "Disable text appending" msgstr "" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "Kopioi" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "Tyhjennä" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "Liity tähän kanavaan automaattisesti" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "Poistu" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "Näytä Liity/Poistu -ilmoitukset" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "Kanavan tiedot" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "Aseta kanavan ostikko..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "Kanavan viesti..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "Lukitse..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "Poista lukitus" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "Rekisteröidy..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "Rekisteröinnin poisto" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "Päällä" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "Pois päältä" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "On päällä?" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "Spammin esto" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "ChanServ" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "Katkaise yhteys" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "Yhdistä uudelleen" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "Poista..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "Vaihda salasana..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "Aseta oikeudet..." #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "Tilit" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "Kuulutus..." #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "Ylläpitäjä" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "Avoin keskustelu" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "Liity samaan keskusteluun" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "Pelissä vietetty aika" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "Etsi IP sekä smurffipelaajat" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "Hiljennä..." #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "Hiljennä 5 minuutiksi" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "Hiljennä 10 minuutiksi" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "Hiljennä 30 minuutiksi" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "Hiljennä 2 tunniksi" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "Hiljennä 1 päiväksi" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "Poista hiljennys" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "Hiljennä" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "Potkaise..." #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "Banni..." #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "Poista banni" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "Heräte" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "Läimäytä!" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "Anna opit" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "Poista opit" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "ChanServ virhe" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "ChanServ ei ole tällä kanavalla." #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "Anna uusi kanavan otsikko?" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "Viesti:" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "Lukitse kanava..." #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "Anna uusi salasana?" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "Poista lukitus" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "Oletko varma että haluat poistaa lukituksen tältä kanavalta?" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "ChanServ ei ole tällä palvelimella." #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "Rekisteröi kanava" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "Kuka nimetään tämän kanavan perustajaksi?" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "Poista rekisteröinti tältä kanavalta" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "Oletko varma että haluat poistaa rekisteröinnin tältä kanavalta?" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "Käyttäjätili poistettu" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "Minkä käyttäjätilin haluat poistaa tänään?" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "Poista käyttäjätili" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "Oletko varma että haluat poistaa käyttäjätilin? " #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "Vaihda käyttäjätilin salasana" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "Minkä käyttäjätilin salasanan haluat vaihtaa?" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "Anna uusi salasana?" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "Ei toteutettu" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "Kuuluta viesti" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "Kuulutettava viesti:" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "Hiljennä käyttäjä" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "Miten moneksi minuutiksi käyttäjä hiljennetään?" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "Potkaise käyttäjä" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "Syy:" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "Potkaise käyttäjä" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "Hiljennä käyttäjä" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "Kesto:" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" #: src/chatpanelmenu.cpp:774 msgid "couldn't add user" msgstr "" #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "Yhdistä palvelimeen" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "Palvelin" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "Yhdistä palvelimeen. Anna palvelimen osoita muodossa osoite:portti" #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "Nimimerkki" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "Salasana" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" #: src/connectwindow.cpp:85 #, fuzzy msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" "Huomio: Jos sinulla ei ole käyttäjätiliä, voit rekisteröityä\n" " siirtymällä rekisteröitymis välilehdelle" #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "Ok" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Peruuta" #: src/connectwindow.cpp:91 msgid "Login" msgstr "Kirjaudu" #: src/connectwindow.cpp:92 msgid "Register" msgstr "Rekisteröidy" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "Nimimerkki" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "Epäkelpo portti." #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "Virheellinen portti" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" "Porttinumero väärä.\n" "\n" "Oltava väliltä 1 - 633535" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "Epäkelpo palvelin ja/tai portti." #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "Epäkelpo palvelin" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" #: src/connectwindow.cpp:294 #, fuzzy msgid "Invalid nickname" msgstr "Virheellinen numero" #: src/connectwindow.cpp:301 #, fuzzy msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "Rekisteröityminen epäonnistui." #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "Rekisteröinti epäonnistui." #: src/countrycodes.cpp:11 msgid " Andorra" msgstr " Andorra" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "Yhdistyneet Arabiemiirikunnat" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "Afganistan" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "Antigua ja Barbuda" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "Anguilla" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "Albania" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "Armenia" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "Alankomaiden Antillit" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "Angola" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "Etelänapamanner" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "Argentiina" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "Amerikan Samoa" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "Itävalta" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "Australia" #: src/countrycodes.cpp:25 #, fuzzy msgid "Åland Islands" msgstr "Caymansaaret" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "Aruba" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "Azerbaidžan" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "Bosnia-Hertsegovina" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "Barbados" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "Bangladesh" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "Belgia" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "Burkina Faso" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "Bulgaria" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "Bahrain" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "Burundi" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "Benin" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "Bermuda" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "Brunei Darussalamin sulttaanikunta" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "Bolivia" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "Brasilia" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "Bahamasaaret" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "Bhutan" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "Bouvet'n saari" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "Botswana" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "Valko-Venäjä" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "Belize" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "Kanada" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "Cocos (Keelingin saaret)" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "Keski-Afrikan tasavalta" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "Kongo" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "Sveitsi" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "Norsunluunrannikko" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "Cook-saaret" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "Chile" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "Kamerun" #: src/countrycodes.cpp:56 msgid "China" msgstr "Kiina" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "Kolumbia" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "Costa Rica" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "Kuuba" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "Kap Verde" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "Joulusaari" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "Kypros" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "Tšekin tasavalta" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "Saksa" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "Djibouti" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "Tanska" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "Dominica" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "Dominikaaninen tasavalta" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "Algeria" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "Ecuador" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "Viro" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "Egypti" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "Länsi-Sahara" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "Eritrea" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "Espanja" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "Etiopia" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "Suomi" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "Fidzi" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "Falkland-saaret (Malvinas-saaret)" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "Micronesia" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "Färsaaret" #: src/countrycodes.cpp:82 msgid "France" msgstr "Ranska" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "Manner-Ranska" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "Gabon" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "Grenada" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "Georgia" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "Ranskan Guinea" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "Ghana" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "Gibraltar" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "Grönlanti" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "Gambia" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "Guinea" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "Guadeloupe" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "Päiväntasaajan Guinea" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "Kreikka" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "S. Gregoria ja S. Sandwich saaret." #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "Guatemala" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "Guam" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "Guinea-Bissau" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "Guyana" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "Hong Kong" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "Heard ja McDonaldinsaaret" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "Honduras" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "Kroatia" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "Haiti" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "Unkari" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "Indonesia" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "Irlanti" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "Israel" #: src/countrycodes.cpp:110 msgid "India" msgstr "Intia" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "Brittiläinen Intian valtameren alue" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "Irak" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "Iran" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "Islanti" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "Italia" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "Jamaika" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "Jordania" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "Japani" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "Kenia" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "Krygyz Republikaaninen" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "Kambodža" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "Kiribati" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "Komorit" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "Saint Kitts ja Nevis" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "Korea" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "Eteläkorea" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "Kuwait" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "Caymansaaret" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "Kazakstan" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "Laos" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "Libanon" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "Saint Lucia" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "Liechtenstein" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "Sri Lanka" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "Liberia" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "Lesotho" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "Liettua" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "Luxemburg" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "Latvia" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "Libya" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "Marokko" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "Monaco" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "Moldova" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "Montenegro" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "Madagascar" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "Marshallinsaaret" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "Makedonia" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "Mali" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "Myanmar" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "Mongolia" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "Macau" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "Pohjois-Mariaanit" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "Martinique" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "Mauritania" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "Montserrat" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "Malta" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "Mauritius" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "Malediivit" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "Malawi" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "Meksiko" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "Malesia" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "Mosambik" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "Namibia" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "Uusi-Kaledonia" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "Niger" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "Norfolkinsaaret" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "Nigeria" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "Nicaragua" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "Alankomaat" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "Norja" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "Nepal" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "Nauru" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "Neutraali alue (Saudi Arabia/Iraq)" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "Niue" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "Uusi-Seelanti" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "Oman" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "Panama" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "Peru" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "Ranskan Polynesia" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "Papua Uusi-Guinea" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "Filippiinit" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "Pakistan" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "Puola" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "Saint-Pierre ja Miquelon" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "Pitcairn" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "Puerto Rico" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "Portugali" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "Palau" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "Paraguay" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "Qatar" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "Reunion" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "Romania" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "Serbia" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "Venäjä" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "Ruanda" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "Saudi-Arabia" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "Salomonsaaret" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "Seychellit" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "Sudan" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "Ruotsi" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "Singapore" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "Saint Helena" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "Slovenia" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "Svalbard- ja Jan Mayen -saaret" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "Slovakia" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "Sierra Leone" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "San Marino" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "Senegal" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "Somalia" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "Surinam" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "São Tomé ja Príncipe" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "Neuvostoliitto" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "El Salvador" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "Syyria" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "Swazimaa" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "Turks- ja Caicossaaret" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "Tšad" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "Ranskan eteläiset alueet" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "Togo" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "Thaimaa" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "Tadzikistan" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "Tokelau" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "Turkmenistan" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "Tunisia" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "Tonga" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "Itä-Timor" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "Turkki" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "Trinidad ja Tobago" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "Tuvalu" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "Taiwan" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "Tansania" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "Ukraina" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "Uganda" #: src/countrycodes.cpp:234 #, fuzzy msgid "United Kingdom" msgstr "Iso-Britannia" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "Yhdysvaltojen pienet syrjäiset saaret" #: src/countrycodes.cpp:236 msgid "United States" msgstr "Yhdysvallat" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "Uruguay" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "Uzbekistan" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "Vatikaanivaltio" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "ST. Vincent" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "Venezuela" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "Neitsytsaaret (Englanti)" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "Neitsytsaaret (USA)" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "Vietnam" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "Vanuatu" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "Wallis- ja Futunasaaret" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "Samoa" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "Jemen" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "Mayotte" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "Jugoslavia" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "Etelä-Afrikka" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "Sambia" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "Zaire" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "Zimbabwe" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "(Täyttä maan nimeä ei löytynyt)" #: src/crashreport.cpp:168 msgid "System informations" msgstr "Järjestelmän tiedot" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "Ohjelman loki" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "Edellinen Spring -ohjelman tekemä käynnistysskripti" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "Yhtään karttaa ei löytynyt." #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "Lataa" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "Ei modia valittuna." #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 #, fuzzy msgid "Name" msgstr "Peli" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "Koko" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Kenttä" #: src/downloader/filelister/filelistctrl.cpp:174 #, fuzzy msgid "game" msgstr "Nimimerkki" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:55 #, fuzzy msgid "Download selected" msgstr "Ei modia valittuna." #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Nimimerkki:" #: src/downloader/filelister/filelistfilter.cpp:69 msgid "Filetype:" msgstr "" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:78 msgid "" "\n" "successfully unzipped in:\n" msgstr "" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "Ei modia valittuna." #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "Floodaus varoitus" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "Lisää tietokonepelaaja" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Nimimerkki:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "Tekoäly" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "Valitse tämän tietokonepelaajan ohjaukseen käytettävä AI-kirjasto" #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 #, fuzzy msgid "value" msgstr "Arvo" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "Lisää botti" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "Tekoälykirjasto(ja) ei löytynyt." #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "Tekoälykirjasto(ja) ei löytynyt" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Sattumanvarainen" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Ei mitään" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" #: src/hosting/autobalancedialog.cpp:53 #, fuzzy msgid "Number of allies" msgstr "Pelaajien määrä" #: src/hosting/autobalancedialog.cpp:56 #, fuzzy msgid "Auto select" msgstr "Yhdistä uudelleen" #: src/hosting/battlemaptab.cpp:69 #, fuzzy msgid "Select" msgstr "Valitse..." #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "Asetus" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "Arvo" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "Tuulen nopeus" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "Merivirtauksen voimakkuus" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "Painovoima" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "Metallinlouhijan säde" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "Maksimi metalli" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "Ennalta määrätty" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "Valitse pelissä" #: src/hosting/battlemaptab.cpp:103 #, fuzzy msgid "Chose before game" msgstr "Valitse pelissä" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "Aloituskohdat" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "Yksikköjen rajoitukset" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "Sallitut yksiköt" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "Tässä listassa näkyvät yksiköt ovat sallittuja pelissä." #: src/hosting/battleoptionstab.cpp:77 #, fuzzy msgid "Disable selected units." msgstr "Salli kaikki yksiköt." #: src/hosting/battleoptionstab.cpp:81 #, fuzzy msgid "Re-enable selected units." msgstr "Salli kaikki yksiköt." #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "Salli kaikki yksiköt." #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "Kielletyt yksiköt" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "Tässä listassa näkyvät yksiköt ovat kiellettyjä pelissä." #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "" #: src/hosting/battleoptionstab.cpp:242 #, fuzzy msgid "Unit restriction" msgstr "Yksikköjen rajoitukset" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "Joukkue" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "Liittolainen" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "Resurssilisä" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "Puoli" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "Aseta väri" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "Aseta resurssilisä" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "Katsoja" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "Potkaise" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "Anna arvo väliltä 0 - 100" #: src/hosting/battleroomlistctrl.cpp:750 #, fuzzy msgid "AI (bot)\n" msgstr "Lisää tietokonepelaaja" #: src/hosting/battleroomlistctrl.cpp:754 #, fuzzy msgid "Human\n" msgstr "Oman" #: src/hosting/battleroomlistctrl.cpp:759 #, fuzzy msgid "Spectator\n" msgstr "Katsoja" #: src/hosting/battleroomlistctrl.cpp:763 #, fuzzy msgid "Player\n" msgstr "Pelaaja:" #: src/hosting/battleroomlistctrl.cpp:768 #, fuzzy msgid "Host\n" msgstr "Palvelin" #: src/hosting/battleroomlistctrl.cpp:772 #, fuzzy msgid "Client\n" msgstr "Asiakasohjelma" #: src/hosting/battleroomlistctrl.cpp:777 msgid "Ready\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:781 #, fuzzy msgid "Not ready\n" msgstr "Ei valmiina" #: src/hosting/battleroomlistctrl.cpp:786 msgid "In sync" msgstr "" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "" #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "" #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "Yhdistä uudelleen" #: src/hosting/battleroomtab.cpp:144 msgid "automatically unspec when there's a free slot" msgstr "" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "Valmis" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "" #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "Väri" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Isännöi uusi..." #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Isännöi uusi peli" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "Käynnistä" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "Lisää tietokonepelaaja" #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Kuvaus" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 #, fuzzy msgid "AutoSpect" msgstr "Yhdistä uudelleen" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Käynnistä" #: src/hosting/battleroomtab.cpp:209 msgid "Automatically start the battle when all players are ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Ring unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 #, fuzzy msgid "Ring ..." msgstr "Heräte" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "Ei valmiina" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 #, fuzzy msgid "Force spectate ..." msgstr "Pakota pelin alkaminen?" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "" #: src/hosting/battleroomtab.cpp:255 #, fuzzy msgid "Save" msgstr "Tallenna..." #: src/hosting/battleroomtab.cpp:256 #, fuzzy msgid "Save a set of options." msgstr "Tallenna rajoitukset tiedostoon." #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 #, fuzzy msgid "Delete" msgstr "Valitse" #: src/hosting/battleroomtab.cpp:261 #, fuzzy msgid "Delete a set of options." msgstr "Tallenna rajoitukset tiedostoon." #: src/hosting/battleroomtab.cpp:265 #, fuzzy msgid "Set default" msgstr "oletus" #: src/hosting/battleroomtab.cpp:266 msgid "Use the current set of options as game's default." msgstr "" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "" #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 #, fuzzy msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" "Jotkut pelaajat eivät ole valmiita vielä.\n" "Lähetetäänkö heille heräte?" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "Ei valmiina" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "Valitse pelissä" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Kuvaus" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "Ping kutsun aikavirhe!" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "virhe" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 #, fuzzy msgid "Delete preset" msgstr "Valitse" #: src/hosting/battleroomtab.cpp:996 #, fuzzy msgid "Set game default preset" msgstr "oletus" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "Isännöi uusi peli" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "Pelin lyhyt kuvaus. Tämä näkyy pelilistauksessa muille pelaajille." #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Kuvaus" #: src/hosting/hostbattledialog.cpp:91 msgid "Automatically write the battle description when a user joins." msgstr "" #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "Valitse modi." #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "Salasanasuojattu" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "Salasana vaadittu liittyäksesi peliin." #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "Portti" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "Käynnistä pelipalvelin tässä UDP portissa. Oletus on 8452." #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 #, fuzzy msgid "Randomly picks an available one" msgstr "Modia ei ole saatavilla" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "Pelaajien määrä" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "Maksimi määrä pelaajia sallittu pelissä." #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "\"Hole Punching\" tekniikka" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "\"NAT traversal\" tekniikka" #: src/hosting/hostbattledialog.cpp:185 #, fuzzy msgid "NAT traversal to use." msgstr "\"NAT traversal\" tekniikka" #: src/hosting/hostbattledialog.cpp:190 msgid "Rank requirement" msgstr "" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 #, fuzzy msgid "Select the type of rank enforcement." msgstr "Valitse modi." #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "Aloita pelin isännöiminen." #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 #, fuzzy msgid "You have to select a game first." msgstr "Sinun on vlaittava modiu ensin." #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "Ei modia valittuna." #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" #: src/hosting/hostbattledialog.cpp:427 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:459 #, fuzzy msgid "Battle not started beacuse the game you selected could not be found. " msgstr "Peli ei käynnistynyt koska valitsemasi modi ei löytynyt. " #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "Virhe käynnistäessä peliä." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" "Karttatiedostoja ei voitu löytää. Tämä tapahtuu kun et ole säätänyt Spring:" "in asetuksia oikein." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "Yhtään karttaa ei löytynyt." #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "Pelihuone" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "Asetukset" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 #, fuzzy msgid "Unit Restrictions" msgstr "Yksikköjen rajoitukset" #: src/hosting/mmoptionwindows.cpp:36 #, fuzzy msgid "Change option" msgstr "Kartan asetukset" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "" #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "" #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "" #: src/iconimagelist.cpp:322 #, fuzzy msgid "Game is closed." msgstr "Keskustelu suljettu." #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "" #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "" #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "" #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "" #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "" #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "" #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "" #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "" #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "" #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "" #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 msgid "Newbies guide" msgstr "" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 #, fuzzy msgid "Joining a battle:\n" msgstr "Liity samaan keskusteluun" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "Isännöi uusi peli" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Spring virhe" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 msgid "Singleplayer gamee" msgstr "" #: src/introguide.cpp:110 msgid "Multiplayer gamee" msgstr "" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "Mikä tahansa tiedosto (*)|*" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "Ohjelmistopaketit (*.app)|*.app|Any File (*.*)|*.*" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 #, fuzzy msgid "Disconnected from server, chat closed." msgstr "Tuntematon vastaus palvelimelta" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "" #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "" #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "&Yhdistä..." #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "&Katkaise yhteys" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 #, fuzzy msgid "&Save options" msgstr "Kartan asetukset" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "&Poistu" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "Liity tähän kanavaan automaattisesti" #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "Spring asetukset" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "Kartan asetukset" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "&Liity kanavalle..." #: src/mainwindow.cpp:164 #, fuzzy msgid "Channel &list" msgstr "Kanavan tiedot" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "Avaa yksityinen &keskustelu..." #: src/mainwindow.cpp:166 #, fuzzy msgid "Change &username" msgstr "Kanavan tiedot" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "" #: src/mainwindow.cpp:169 #, fuzzy msgid "&Reload maps/games" msgstr "&Lataa uudelleen kartat/modit" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "Tarkista onko uusi versio saatavilla" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "&Tietoja" #: src/mainwindow.cpp:178 #, fuzzy msgid "&System Info" msgstr "Järjestelmän tiedot" #: src/mainwindow.cpp:179 #, fuzzy msgid "&Change language" msgstr "Kanavan tiedot" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "&Ilmoita bugista..." #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "&Dokumentointi" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "Palvelin" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "&Muokkaa" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "&Työkalut" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "&Ohje" #: src/mainwindow.cpp:500 msgid "You need to be connected to a server to view the channel list" msgstr "" #: src/mainwindow.cpp:500 #, fuzzy msgid "Not connected" msgstr "Yhdistä uudelleen" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "Liity kanavalle..." #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "Kanavan nimi" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "Avaa yksityinen keskusteluikkuna..." #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "Käyttäjän nimi" #: src/mainwindow.cpp:540 #, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 #, fuzzy msgid "No files found" msgstr "Yhtään karttaa ei löytynyt." #: src/mainwindow.cpp:656 #, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "" #: src/mainwindow.cpp:692 #, fuzzy msgid "This profile is write protected, please choose another name" msgstr "Tämä peli on suojattu, anna salasana." #: src/mainwindow.cpp:703 #, fuzzy msgid "Which profile do you want to load?" msgstr "Minkä käyttäjätilin haluat poistaa tänään?" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "Poista..." #: src/mainwindow.cpp:767 msgid "Enter new nickname" msgstr "" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "Keskustelu" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "Pelilistaus" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "" #: src/mainwindow.h:203 msgid "Replays" msgstr "" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 #, fuzzy msgid "Downloads" msgstr "Lataa" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "Päivitä" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "Lataa" #: src/mapctrl.cpp:897 msgid "side:" msgstr "Puoli:" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "liitto: %d" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "bonus: %d%%" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 #, fuzzy msgid "Show" msgstr "Näytä kaikki" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" #: src/mapselectdialog.cpp:95 #, fuzzy msgid "Filter" msgstr "&Tiedosto" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" #: src/mapselectdialog.cpp:100 #, fuzzy msgid "Map details" msgstr "Maksimi metalli" #: src/mapselectdialog.cpp:163 #, fuzzy msgid "Start positions" msgstr "Aloituskohdat" #: src/mapselectdialog.cpp:261 #, fuzzy msgid "Minimum wind" msgstr "Minimi arvomerkkivaatimus" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "" #: src/mapselectdialog.cpp:263 msgid "Average wind" msgstr "" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "" #: src/mapselectdialog.cpp:265 #, fuzzy msgid "Aspect ratio" msgstr "Katsoja" #: src/mapselectdialog.cpp:266 #, fuzzy msgid "Number of start positions" msgstr "Aloituskohdat" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "Aloituskohtien tyyppi" #: src/mmoptionswrapper.cpp:122 #, fuzzy msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" "Aloituskohtien valinta\n" "0: ennalta määrätyt kohdat\n" "1: sattumanvaraiset kohdat\n" "2: valitse pelissä\n" "3: valitse ennen pelin alkua" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "Valitse pelissä" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "Valitse pelissä" #: src/mmoptionswrapper.cpp:132 #, fuzzy msgid "List of restricted units" msgstr "Kielletyt yksiköt" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "s" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "c" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "r" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "Suoritettavat tiedostot (*.exe)|*.exe|Any File (*.*)|*.*" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "Värit ja kirjasintyyli" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "Käytä järjestelmän värejä" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "Tavallinen" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "Tausta" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "Toiminto" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "Korostus" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "Liity/Poistu" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "Minun viestit" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "Asiakasohjelma" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "Aikaleima" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "Ilmoitus" #: src/options/chatoptionstab.cpp:258 #, fuzzy msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" "[19:35] ** Server ** Connected to TAS Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "Kirjasin:" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "oletus" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "Valitse..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "" #: src/options/chatoptionstab.cpp:300 #, fuzzy msgid "Copy server messages in current channel" msgstr " \"/channels\" - Näyttää aktiiviset kanavat." #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "Keskustelujen lokit" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "Tallenna keskustelujen lokit" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "Korostetut sanat" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "Sanat jotka korostetaan keskusteluissa:" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "" #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 #, fuzzy msgid "Remove" msgstr "Poista..." #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:61 #, fuzzy msgid "Rename.." msgstr "Poista..." #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:70 #, fuzzy msgid "Add New.." msgstr "Lisää tietokonepelaaja" #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "" #: src/options/groupoptionspanel.cpp:84 #, fuzzy msgid "Group Actions" msgstr "Toiminto" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "" #: src/options/groupoptionspanel.cpp:95 #, fuzzy msgid "Ignore Chat" msgstr "Avoin keskustelu" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:101 #, fuzzy msgid "Notify Hosted Battles" msgstr "Isännöi uusi peli" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:134 #, fuzzy msgid "Highlight Color" msgstr "Korostetut sanat" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "" #: src/options/groupoptionspanel.cpp:163 #, fuzzy msgid "Add.." msgstr "Lisää tietokonepelaaja" #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "" #: src/options/groupoptionspanel.cpp:170 #, fuzzy msgid "Remove users from group" msgstr "Käyttäjätili poistettu" #: src/options/groupoptionspanel.cpp:264 #, fuzzy msgid "Name of new group:" msgstr "Käyttäjän nimi" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "" #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 msgid "Use a file dialog to find the editor binary" msgstr "" #: src/options/lobbyoptionstab.cpp:91 #, fuzzy msgid "Autoconnect" msgstr "Yhdistä uudelleen" #: src/options/lobbyoptionstab.cpp:94 #, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" #: src/options/lobbyoptionstab.cpp:96 #, fuzzy msgid "Autoconnect on lobby start" msgstr "Yhdistä palvelimeen" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:104 #, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "" #: src/options/lobbyoptionstab.cpp:120 #, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "" #: src/options/lobbyoptionstab.cpp:130 #, fuzzy msgid "Tooltips" msgstr "&Työkalut" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "" #: src/options/lobbyoptionstab.cpp:134 #, c-format msgid "Requires %s restart to take effect." msgstr "" #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "Ilmoitus" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 msgid "Display time for popup notifications in seconds" msgstr "" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 #, fuzzy msgid "Start tab" msgstr "Metallimäärä pelin alkaessa" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "" #: src/options/lobbyoptionstab.cpp:282 msgid "Choose a editor browser executable" msgstr "" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "Spring" #: src/options/mainoptionstab.cpp:73 #, fuzzy msgid "General" msgstr "Senegal" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "Palauta" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "Käytä" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 msgid "Reloading unitsync" msgstr "" #: src/options/springoptionstab.cpp:315 #, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" #: src/playback/playbackfilter.cpp:60 msgid "Filter settings" msgstr "" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Vain asennetut kartat" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "" #: src/playback/playbackfilter.cpp:190 #, fuzzy msgid "Duration (hh:mm:ss):" msgstr "Kesto:" #: src/playback/playbacklistctrl.cpp:42 #, fuzzy msgid "Date" msgstr "Valitse" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Aseta oikeudet..." #: src/playback/playbacklistctrl.cpp:46 #, fuzzy msgid "Duration" msgstr "Kesto:" #: src/playback/playbacklistctrl.cpp:47 #, fuzzy msgid "Spring Version" msgstr "Spring virhe" #: src/playback/playbacklistctrl.cpp:48 #, fuzzy msgid "Filesize" msgstr "&Tiedosto" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "Lataa m&od" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "Lataa..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "Pelaajat:" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "savegame" msgstr "Tallenna..." #: src/playback/playbacktab.cpp:288 #, fuzzy msgid "Couldn't get your spring versions from any unitsync library." msgstr "" "Ei pystynyt lukemaan Spring versiotasi unitsync -kirjastosta.\n" "\n" "Verkkopeli tulee olemaan estetty." #: src/playback/playbacktab.cpp:306 #, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" #: src/playback/playbacktab.cpp:323 msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" #: src/playback/playbacktab.cpp:356 #, fuzzy msgid "Invalid replay" msgstr "Virheellinen portti" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr "" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr "" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 #, fuzzy msgid "There was an error downloading for the latest version.\n" msgstr "" "Versiontarkistuksessa tapahtui virhe.\n" "Kokeile myöhemmin uudelleen.\n" "Jos ongelma pysyy, voit tehdä siitä ilmoituksen springlobby:n kehittäjille." #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "Ilmoitus" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "Virheellinen numero" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 msgid "File doesn't exit" msgstr "" #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Aloitettu" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "Yhdistä uudelleen" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 #, fuzzy msgid "Unknown Error" msgstr "Tuntematon vastaus palvelimelta" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "" #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 #, fuzzy msgid "Download complete." msgstr "Ei modia valittuna." #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer." msgstr "" #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "Yhdistä uudelleen" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "Yhdistä uudelleen" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 msgid "Tries to connect to the next server in the list." msgstr "" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 #, fuzzy msgid "Do nothing" msgstr "\"Hole Punching\" tekniikka" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "" #: src/selectusersdialog.h:67 #, fuzzy msgid "Select Users" msgstr "Valitse" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 #, fuzzy msgid " is online" msgstr " Käyttäjä ei ole yhdistyneenä." #: src/serverevents.cpp:165 msgid " is now " msgstr "" #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "OnUserStatus() epäonnistui ! (exception)" #: src/serverevents.cpp:224 #, fuzzy msgid " just went offline" msgstr " Käyttäjä ei ole yhdistyneenä." #: src/serverevents.cpp:259 #, fuzzy msgid " opened battle " msgstr " liityit peliin " #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "" #: src/serverevents.cpp:583 msgid " because: " msgstr "" #: src/serverevents.cpp:826 msgid "Server Message" msgstr "" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr "" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr "" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "" #: src/serverevents.cpp:928 #, fuzzy, c-format msgid "%s mutelist" msgstr "Pelilistaus" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "" #: src/serverevents.cpp:984 #, fuzzy msgid "Download update" msgstr "Lataa &map" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 msgid "Automatically moved to new battle" msgstr "" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "" #: src/singleplayertab.cpp:99 #, fuzzy msgid "Spectate only" msgstr "Katsoja" #: src/singleplayertab.cpp:102 #, fuzzy msgid "Random start positions" msgstr "Aloituskohdat" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 #, fuzzy msgid "Game setup error" msgstr "Aputiedoston virhe" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "" #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "" #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 #, fuzzy msgid "Coulnd't load required unitsync library" msgstr "" "Ei pystynyt lukemaan Spring versiotasi unitsync -kirjastosta.\n" "\n" "Verkkopeli tulee olemaan estetty." #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 #, fuzzy msgid "Fatal error" msgstr "Aputiedoston virhe" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 #, fuzzy msgid "Ignore chat" msgstr "Avoin keskustelu" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 #, fuzzy msgid "Battle Autokick" msgstr "Pelilistaus" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 #, fuzzy msgid "Friends" msgstr "Ennalta määrätty" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "" #: src/springsettings/ctrlconstants.h:229 #, fuzzy msgid "Terrain detail" msgstr "Maksimi metalli" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "Unit LOD distance" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "higher value = units will remain detailed even when zooming out" msgstr "" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "Grass detail" msgstr "Maksimi metalli" #: src/springsettings/ctrlconstants.h:231 msgid "higher value = more detailed grass" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:236 msgid "Max nano simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "Enable v-sync" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "Full-scene anti-aliasing samples" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "Master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "General sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "general volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "reply volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "Battle volume" msgstr "Pelihuone" #: src/springsettings/ctrlconstants.h:276 msgid "battle volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "User interface volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "ui volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "" #: src/springsettings/ctrlconstants.h:291 #, fuzzy msgid "Reflective units" msgstr "Valitse" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "" #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 #, fuzzy msgid "left is the default" msgstr "oletus" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "" #: src/springsettings/ctrlconstants.h:312 #, fuzzy msgid "Use less colors" msgstr "Käytä järjestelmän värejä" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" #: src/springsettings/ctrlconstants.h:320 #, fuzzy msgid "Show in-game player information" msgstr "Järjestelmän tiedot" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" #: src/springsettings/ctrlconstants.h:385 #, fuzzy msgid "Reflective" msgstr "Valitse" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "" #: src/springsettings/ctrlconstants.h:415 #, fuzzy msgid "Blur reflection" msgstr "Valitse" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Shore waves" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Enables shorewaves" msgstr "" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "Valitse" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 #, fuzzy msgid "Reflection texture size" msgstr "Valitse" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "Kesto:" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 #, fuzzy msgid "off" msgstr "Pois päältä" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "" #: src/springsettings/frame.cpp:315 msgid "(simple mode)" msgstr "" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "" #: src/springsettings/frame.cpp:367 msgid "(expert mode)" msgstr "" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "Virheellinen portti" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 #, fuzzy msgid "Hotkey Error" msgstr "Aputiedoston virhe" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 #, fuzzy msgid "Enter new command:" msgstr "Keskustelun komennot:" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 #, fuzzy msgid "Hotkey SaveSettings error" msgstr "Spring -asetuksissa virhe" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "Yhtään karttaa ei löytynyt." #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "" #: src/springsettings/panel_pathoption.cpp:34 msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "" #: src/springsettings/panel_pathoption.cpp:96 msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "" #: src/springsettings/presets.h:45 msgid "very low" msgstr "" #: src/springsettings/presets.h:45 msgid "very high" msgstr "" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "" #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "" #: src/springsettings/tab_quality_video.cpp:166 msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "" #: src/springsettings/tab_simple.cpp:40 msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr "" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:99 msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "" #: src/springsettings/tab_ui.cpp:37 msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "Sallitut yksiköt" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "Tuntematon vastaus palvelimelta" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" #: src/tdfcontainer.cpp:131 msgid "line " msgstr "" #: src/tdfcontainer.cpp:131 msgid " , column " msgstr "" #: src/ui.cpp:175 msgid "Server password" msgstr "Plavelimen salasana" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" "Rekisteröityminen onnistui\n" "Voit kirjautua sisään." #: src/ui.cpp:294 msgid "Registration successful" msgstr "Rekisteröityminen onnistui" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "Rekisteröityminen epäonnistui, syy:\n" #: src/ui.cpp:458 msgid "Help error" msgstr "Aputiedoston virhe" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, fuzzy, c-format msgid "%s commands help." msgstr "SpringLobby:n komennot." #: src/ui.cpp:465 msgid "Global commands:" msgstr "Globaalit komennot:" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr " \"/away\" - Asettaa tilasi poissaolevaksi." #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr " \"/back\" - Poistaa poissaolevan tilan." #: src/ui.cpp:468 msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" #: src/ui.cpp:469 msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr " \"/channels\" - Näyttää aktiiviset kanavat." #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr "" #: src/ui.cpp:472 #, fuzzy msgid " \"/join channel [password]\" - Joins a channel." msgstr " \"/channels\" - Näyttää aktiiviset kanavat." #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr " \"/j\" - Sama kuin \"/join\"" #: src/ui.cpp:474 #, fuzzy msgid " \"/ingame\" - Shows how much time you have in game." msgstr " \"/ingame\" näyttää montako minuuttia olet pelannut." #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" #: src/ui.cpp:476 #, fuzzy msgid " \"/part\" - Leaves current channel." msgstr " \"/channels\" - Näyttää aktiiviset kanavat." #: src/ui.cpp:477 #, fuzzy msgid " \"/p\" - Alias to /part." msgstr " \"/j\" - Sama kuin \"/join\"" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr " \"/rename uusinimi\" - Muuttaa nimimerkkisi uusinimi:ksi" #: src/ui.cpp:479 #, fuzzy, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr " \"/sayver\" - Sanoo SpringLobby -versiosi keskusteluikkunassa." #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr "" #: src/ui.cpp:481 #, fuzzy, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr " \"/ver\" - Näyttää SpringLobby versiosi." #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "Keskustelun komennot:" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr " \"/me action\" - sanoo IRC tyylisen toimintoviestin." #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "Ei viestiketjuja." #: src/ui.cpp:496 msgid "The topic \"" msgstr "Viestiketjua \"" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "\" ei löytynyt. Kirjoita \"/help topics\" listataksesi viestiketjut." #: src/ui.cpp:580 #, fuzzy msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" "Ei pystynyt lukemaan Spring versiotasi unitsync -kirjastosta.\n" "\n" "Verkkopeli tulee olemaan estetty." #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" #: src/ui.cpp:599 #, fuzzy msgid "Online play is currently disabled." msgstr "Verkkopeli tulee olemaan estetty." #: src/ui.cpp:631 #, fuzzy, c-format msgid "disconnected from server: %s" msgstr "Tuntematon vastaus palvelimelta" #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "Ei aktiivisia keskusteluikkunoita auki." #: src/ui.cpp:839 #, fuzzy, c-format msgid "%s (%d users)" msgstr "(%d käyttäjät)" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "Nykyinen peli suljettiin isännän toimesta." #: src/ui.cpp:993 msgid "Battle closed" msgstr "Peli suljettu" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" "Sinun Spring -asetukset eivät ole kunnossa. Tarkasta asetukset ennen kuin " "yrität\n" "pelata verkossa." #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "Spring -asetuksissa virhe" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "" #: src/ui.cpp:1337 #, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" #: src/ui.cpp:1340 msgid "Welcome" msgstr "" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 #, fuzzy msgid "Import settings?" msgstr "Spring asetukset" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Versiontarkistuksessa tapahtui virhe.\n" "Kokeile myöhemmin uudelleen.\n" "Jos ongelma pysyy, voit tehdä siitä ilmoituksen springlobby:n kehittäjille." #: src/ui.cpp:1387 msgid "Your Version: " msgstr "Sinun versio: " #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "Viimeisin versio: " #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 #, fuzzy msgid "Not up to date" msgstr "Ei ajan tasalla" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "Pelaajien määrä" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" "SpringLobby versiosi on vanha.\n" "\n" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "Ei ajan tasalla" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" "\n" "Selaimen polku on: " #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" #: src/updater/updater.cpp:72 #, fuzzy msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Versiontarkistuksessa tapahtui virhe.\n" "Kokeile myöhemmin uudelleen.\n" "Jos ongelma pysyy, voit tehdä siitä ilmoituksen springlobby:n kehittäjille." #: src/updater/updater.cpp:81 #, fuzzy, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" "Versiontarkistuksessa tapahtui virhe.\n" "Kokeile myöhemmin uudelleen.\n" "Jos ongelma pysyy, voit tehdä siitä ilmoituksen springlobby:n kehittäjille." #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 #, fuzzy msgid "the SpringLobby revision to update to" msgstr "" "SpringLobby versio on ajan tasalla!\n" "\n" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "SpringLobby" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 #, fuzzy msgid "Warning" msgstr "Varoitus lokissa." #: src/user.cpp:83 #, fuzzy msgid "away" msgstr "Norja" #: src/user.cpp:83 msgid "back" msgstr "" #: src/user.cpp:85 #, fuzzy msgid "ingame" msgstr "Nimimerkki" #: src/user.cpp:85 msgid "back from game" msgstr "" #: src/user.cpp:195 msgid "Newbie" msgstr "" #: src/user.cpp:196 msgid "Beginner" msgstr "" #: src/user.cpp:197 msgid "Average" msgstr "" #: src/user.cpp:198 msgid "Above average" msgstr "" #: src/user.cpp:199 msgid "Experienced" msgstr "" #: src/user.cpp:200 msgid "Highly experienced" msgstr "" #: src/user.cpp:201 msgid "Veteran" msgstr "" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 msgid "Unknown" msgstr "" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "" #: src/useractions.h:11 #, fuzzy msgid "none" msgstr "Ei mitään" #: src/useractions.h:11 #, fuzzy msgid "highlight" msgstr "Korostus" #: src/useractions.h:11 msgid "notify login/out" msgstr "" #: src/useractions.h:11 msgid "ignore chat" msgstr "" #: src/useractions.h:11 msgid "ignore pm" msgstr "" #: src/useractions.h:12 msgid "autokick" msgstr "" #: src/useractions.h:12 #, fuzzy msgid "notify hosted battle" msgstr "Liity samaan keskusteluun" #: src/useractions.h:12 msgid "notify status change" msgstr "" #: src/useractions.h:19 #, fuzzy msgid "no action at all" msgstr "Ei aktiivisia keskusteluikkunoita auki." #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" #: src/usermenu.h:31 msgid "Create new group..." msgstr "" #: src/usermenu.h:37 #, fuzzy msgid "Add to group..." msgstr "Lisää tietokonepelaaja" #: src/usermenu.h:38 #, fuzzy msgid "Remove from group" msgstr "Käyttäjätili poistettu" #: src/utils/controls.h:22 #, fuzzy msgid "Choose color" msgstr "Aseta väri" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 #, fuzzy msgid "Author" msgstr "Itävalta" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Games" msgstr "Peli" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Compatible games" msgstr "Tavallinen" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "Tallenna..." #: src/widgets/infopanel.cpp:74 #, fuzzy msgid "Current version" msgstr "Sinun Spring versio" #: src/widgets/infopanel.cpp:79 #, fuzzy msgid "# downloaded" msgstr "Lataa" #: src/widgets/infopanel.cpp:84 msgid "Published on" msgstr "" #: src/widgets/infopanel.cpp:121 #, fuzzy msgid "Changelog" msgstr "Peruuta" #: src/widgets/infopanel.cpp:126 msgid "Screenshots" msgstr "" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" #, fuzzy #~ msgid "Settings" #~ msgstr "Spring asetukset" #, fuzzy #~ msgid "Help" #~ msgstr "&Ohje" #, fuzzy #~ msgid "Faction" #~ msgstr "Toiminto" #~ msgid "Mod" #~ msgstr "Modi" #, fuzzy #~ msgid "spectators" #~ msgstr "Katsojat:" #~ msgid "Mod:" #~ msgstr "Modi:" #~ msgid "Only mods i have" #~ msgstr "Vain asennetut modit" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to host a new game" #~ msgstr "Spring on jo käynnissä. Sulje se jotta voit isännöidä uuden pelin" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to join another battle." #~ msgstr "Spring on jo käynnissä. Sulje se pystyäksesi liittymään peliin." #~ msgid "Mod not available" #~ msgstr "Modia ei ole saatavilla" #~ msgid "Enter password" #~ msgstr "Syötä salasana" #, fuzzy #~ msgid "team" #~ msgstr "Joukkue" #, fuzzy #~ msgid "ally" #~ msgstr "Liittolainen" #~ msgid "cpu" #~ msgstr "suoritin" #, fuzzy #~ msgid "Load a saved set of options." #~ msgstr "Lataa tallennettu rajoitustiedosto" #, fuzzy #~ msgid "Save..." #~ msgstr "Tallenna..." #, fuzzy #~ msgid "Delete..." #~ msgstr "Valitse..." #, fuzzy #~ msgid "Set default..." #~ msgstr "oletus" #~ msgid "Mod Options" #~ msgstr "Modin asetukset" #~ msgid "Map Options" #~ msgstr "Kartan asetukset" #~ msgid "Select the mod to play with." #~ msgstr "Valitse modi." #~ msgid "Test firewall" #~ msgstr "Kokeile palomuurin toimivuus" #, fuzzy #~ msgid "Tab icons" #~ msgstr "Kartan asetukset" #, fuzzy #~ msgid "Download Lua widgets" #~ msgstr "Lataa" #~ msgid "&File" #~ msgstr "&Tiedosto" #, fuzzy #~ msgid "Modname" #~ msgstr "Monaco" #, fuzzy #~ msgid "Download started" #~ msgstr "Ei modia valittuna." #, fuzzy #~ msgid "Disconnecting" #~ msgstr "Katkaise yhteys" #, fuzzy #~ msgid "Player" #~ msgstr "Pelaaja:" #, fuzzy #~ msgid "Notice" #~ msgstr "Ei mitään" #, fuzzy #~ msgid "MB downloaded" #~ msgstr "Lataa" #~ msgid "Type /help in a chat box." #~ msgstr "Kirjoita \"/help\" viestiikkunaan." #, fuzzy #~ msgid "Disconnected from server." #~ msgstr "Tuntematon vastaus palvelimelta" #~ msgid "Server message" #~ msgstr "Palvelin viesti" #, fuzzy #~ msgid "Grouping size" #~ msgstr "Toiminto" #~ msgid "a" #~ msgstr "a" #~ msgid "p" #~ msgstr "p" #~ msgid "m" #~ msgstr "m" #~ msgid "t" #~ msgstr "t" #~ msgid "Not a number" #~ msgstr "Ei ole numero" #~ msgid "" #~ "Value out of range.\n" #~ " Enter an integer between 0 & 100." #~ msgstr "" #~ "Annettu arvo virheellinen\n" #~ " Anna kokonaisluku väliltä 0 - 100" #~ msgid "Bot team sharing." #~ msgstr "Tietokonepelaaja jaetussa joukkueessa." #, fuzzy #~ msgid "topic" #~ msgstr "Viestiketjua \"" #~ msgid "_SERVER" #~ msgstr "_PALVELIN" #, fuzzy #~ msgid "Not online" #~ msgstr "Ei kirjautuneena." #~ msgid "" #~ "This game uses NAT traversal that is not supported by wx 2.6 build of " #~ "springlobby. \n" #~ "\n" #~ "You will not be able to play in this battle. \n" #~ "Update your wxwidgets to 2.8 or newer to enable NAT traversal support." #~ msgstr "" #~ "Tämä peli käyttää \"NAT traversal\" menetelmää.\n" #~ "Päivitä wxwidgets versioon 2.8 tai uudempaan saadaksesi ominaisuuden " #~ "käyttöön." #~ msgid "Invalid host/port or servername." #~ msgstr "Väärä palvelimen osoite tai portti." #~ msgid "Active chat channels:" #~ msgstr "Aktiiviset keskusteluikkunat:" #, fuzzy #~ msgid "Battle filter is active" #~ msgstr "Pelilistaus" #~ msgid "Select all" #~ msgstr "Valitse kaikki" #, fuzzy #~ msgid "Add user" #~ msgstr "(%d käyttäjät)" #, fuzzy #~ msgid "Remove selected" #~ msgstr "Ei modia valittuna." #, fuzzy #~ msgid "Invalid usernames" #~ msgstr "Virheellinen numero" #, fuzzy #~ msgid "" #~ "A short description of the game, this will show up in the battle list. " #~ "This will be read-only for ladder" #~ msgstr "Pelin lyhyt kuvaus. Tämä näkyy pelilistauksessa muille pelaajille." #, fuzzy #~ msgid "Unitsync error" #~ msgstr "Spring virhe" #~ msgid "You have one or more bots sharing team, this is not possible." #~ msgstr "" #~ "Yksi tai useampi tietokonepelaaja on samassa joukkueessa, mikä ei ole " #~ "mahdollista." #~ msgid "" #~ "Please enter password needed to join this channel, leave blank for no " #~ "passwrd." #~ msgstr "Anna salasana, jätä tyhjäksi jos salasana on tyhjä." #~ msgid "Fixed source ports" #~ msgstr "\"Fixed source ports\" tekniikka" #~ msgid "" #~ "NAT traversal to use, currently this feature is not supported by " #~ "SpringLobby." #~ msgstr "Valitsemasi tekniikka ei valitettavasti ole vielä tuettu." #~ msgid "Continue if commander dies" #~ msgstr "Jatkuu kun komentaja kuolee" #~ msgid "End if commander dies" #~ msgstr "Päättyy kun komentaja kuolee" #~ msgid "End condition" #~ msgstr "Päättymisehdot" #~ msgid "Resources" #~ msgstr "Resurssit" #~ msgid "The amount of metal each player starts with." #~ msgstr "Metallimäärä pelaajalla pelin alkaessa." #~ msgid "Start Energy" #~ msgstr "Energiamäärä pelin alkaessa" #~ msgid "The amount of energy each player starts with." #~ msgstr "Energiamäärä pelaajalla pelin alkaessa." #~ msgid "Max units" #~ msgstr "Maksimi määrä yksikköjä" #~ msgid "The maximum number of units allowed per player." #~ msgstr "Maksimi määrä sallittuja yksikköjä pelaajaa kohden." #~ msgid "Limit d-gun" #~ msgstr "D-Gun etäisyys rajoitettu" #~ msgid "Ghosted buildings" #~ msgstr "Haamukuvat taloista" #~ msgid "Diminishing metal makers" #~ msgstr "Metallinmuuntimien vähentyvä hyötysuhde" #~ msgid "Save to:" #~ msgstr "Tallenna tiedostoon:" #~ msgid "Browse..." #~ msgstr "Selaa..." #~ msgid "Choose a directory" #~ msgstr "Valitse hakemisto" #~ msgid "Map/Mod Options" #~ msgstr "Kartta/Modi Asetukset" #~ msgid "Up to Date" #~ msgstr "Ajan tasalla" #~ msgid "" #~ "\n" #~ "\n" #~ "Would you like to visit a page with instructions on how to download the " #~ "newest version?" #~ msgstr "" #~ "\n" #~ "\n" #~ "Haluatko siirtyä sivulle jolta voit ladata uusimman version?" #~ msgid "Limit D-Gun" #~ msgstr "D-Gun rajoitus" #~ msgid "" #~ "Disables commander's D-gun when being too far away from the starting point" #~ msgstr "D-Gun käytössä vain aloituskohdan lähettyvillä." #~ msgid "Ghosted Buildings" #~ msgstr "Haamukuvat taloista" #~ msgid "" #~ "Enemy buildings will leave a ghost image on the map after losing LoS on " #~ "them" #~ msgstr "" #~ "Vihollisen talot jäävät näkyviin haamukuvina kun näköyhteys menetetään." #~ msgid "Diminishing MM" #~ msgstr "Vähentyvä metallintekijöiden tehokkuus" #~ msgid "" #~ "Efficiency of MetalMakers will progressively reduce as much as you build " #~ "them" #~ msgstr "Metallintekijöiden hyötysuhde pienenee määrän lisääntyessä" #~ msgid "Game Ending condition" #~ msgstr "Pelin päättymisen ehdot" #~ msgid "" #~ "The condition that will end the game\n" #~ "0: when all units will be destroyed\n" #~ "1: when the commander will be destroyed\n" #~ "2: lineage mode (see option 1, but given away units will still die" #~ msgstr "" #~ "Peli päättyy kun\n" #~ "0: kaikki yksiköt ovat kuolleet\n" #~ "1: kun komentaja kuolee\n" #~ "2: turnajais moodi (myös pois annetut yksiköt kuolevat pelaajan kuollessa)" #~ msgid "Sets the amount of metal that players will start with" #~ msgstr "Asettaa kunkin pelaajan pelin alussa saaman metallimäärän" #~ msgid "Sets the amount of energy that players will start with" #~ msgstr "Aseta pelaajan aloituksessa saama energiamäärä" #~ msgid "Max Units Allowed" #~ msgstr "Maksimi määrä yksiköitä" #~ msgid "" #~ "Sets the maximum amount of units that a player will be allowed to build" #~ msgstr "Asettaa maksimi määrän yksiköitä per pelaaja" #~ msgid "is not supported by the lobby server that requires version" #~ msgstr "ei ole ruettu palvelimen puolelta." #~ msgid "" #~ "This is the SpringLobby channel, please report any problems you are " #~ "having with SpringLobby here and the friendly developers will help you." #~ msgstr "" #~ "Tämä on SpringLobby:n kanava. Ole hyvä ja ilmoita havaitsemasi ongelmat " #~ "koskien SpringLobby:a täällä niin ystävälliset ohjelman kehittäjät voivat " #~ "auttaa sinua." springlobby-0.169/po/fr.po0000600000176000000410000055133012105760300017013 0ustar buildbotwww-data00000000000000# French translation for springlobby # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the springlobby package. # Remi RAMPIN , 2008. # msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2010-10-23 17:35+0200\n" "Last-Translator: frezzer1 \n" "Language-Team: french\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2009-12-24 04:42+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "précédente" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "suivante" #: src/Helper/imageviewer.cpp:92 msgid "delete" msgstr "effacer" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "enregistrer sous" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "impossible de supprimer le fichier" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "Erreur" #: src/Helper/imageviewer.cpp:160 msgid "Choose a filename" msgstr "Choisissez le fichier" #: src/Helper/imageviewer.cpp:167 msgid "File successfully saved" msgstr "Fichier enregistré" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 msgid "Success" msgstr "Réussite" #: src/Helper/imageviewer.cpp:170 msgid "Couldn't save file" msgstr "Impossible de sauvegarder" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 msgid "Default" msgstr "Par défaut" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "RECHERCHE DE %s" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" "Les tableaux de nom de langues et d'identifieurs doivent avoir la même " "taille." #: src/Helper/wxTranslationHelper.cpp:148 msgid "Select the language" msgstr "Choisissez une langue" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "Langue" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "wxTranslationHelper: Préfixe du répertoire = \"%s\"" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "wxTranslationHelper: Nom du catalogue = \"%s\"" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Accepter le contrat" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "Acceptez-vous les termes de cette licence ?" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Oui" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "Non" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 msgid "User" msgstr "Utilisateur" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 msgid "Channel" msgstr "Salle" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Etat :" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 #, fuzzy msgid "Minimum rank to join" msgstr "Grade minimum requis" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Description" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Description" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Carte" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 msgid "Mapname" msgstr "Carte" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "Jeu" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "Jeu" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Héberger" #: src/battlelist/battlelistctrl.cpp:60 #, fuzzy msgid "Name of the Host" msgstr "Nom du nouveau groupe :" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Spectateurs :" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "Nombre de joueurs" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 msgid "Players" msgstr "Joueurs" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "Nombre de joueurs" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Carte" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Maximum number of Players that can join" msgstr "Le nombre maximum de joueurs autorisés à rejoindre la partie." #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "Télécharger la &carte" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "Télécharger la &carte" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Spectateurs :" #: src/battlelist/battlelistctrl.cpp:370 msgid "Active Players:" msgstr "Joueurs :" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "Hôte :" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Etat :" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Verrouillé" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "Protégé par un mot de passe" #: src/battlelist/battlelistfilter.cpp:122 msgid "Highlighted only" msgstr "Surlignées seulement" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "Grade minimum :" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Description :" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Démarré" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Complet" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "Ouvert" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Joueur :" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Tous" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Carte :" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Uniquement les cartes que j'ai" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "Maximum de joueurs" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 #, fuzzy msgid "Game:" msgstr "Jeu" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Uniquement les cartes que j'ai" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Spectateurs :" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "%d" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Joueurs :" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 msgid " Filter " msgstr " Filtre " #: src/battlelist/battlelisttab.cpp:144 msgid "Activated" msgstr "Activé" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 msgid " Battle infos " msgstr " Informations " #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "0 bataille affichée" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "Héberger ..." #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "Rejoindre" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "%d batailles affichées" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" "Vous ne pouvez pas héberger une partie en étant déconnecté. Merci de vous " "connecter à un serveur lobby" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "Hors-ligne." #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "Vous ne pouvez pas héberger avec une version incompatible." #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Erreur de Spring" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "Déjà dans une bataille" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" "Vous êtes déjà dans une bataille\n" "Voulez-vous quitter la bataille actuelle pour commencer une nouvelle ?" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" "La version de spring est incompatible et ne permet pas de rejoindre une " "bataille." #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 #, fuzzy msgid "Matchmaker detected" msgstr "Exacte" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "Déjà dans une bataille" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "Vous êtes déjà dans une bataille\n" "Voulez vous quitter cette bataille et rejoindre celle-ci ?" #: src/battlelist/battlelisttab.cpp:430 #, fuzzy msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" "Voulez-vous que j'essaye de le télécharger pour vous ?\n" "Vous pourrez voir la progression dans l'onglet \"Download Manager\"." #: src/battlelist/battlelisttab.cpp:433 #, fuzzy msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" "Vous devez télécharger la mod avant de pouvoir rejoindre cette bataille.\n" "\n" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "Carte non-disponible" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" "Vous devez télécharger la carte avant de pouvoir rejoindre cette bataille.\n" "\n" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "Carte non-disponible" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "Mot de passe de la partie" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 msgid "Edit auto-joined channels" msgstr "Choisir les canaux rejoints automatiquement" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" "Ajoutez une salle par ligne comme ceci :\n" "nomdelasalle motdepasse\n" "(les mots de passe des salles existantes ne sont pas affichés)" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "Double-cliquez pour rejoindre" #: src/channel/channelchooser.cpp:30 msgid "Find channel:" msgstr "Rejoindre une salle..." #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 msgid "Choose channels to join" msgstr "Nom de la salle à rejoindre" #: src/channel/channellistctrl.cpp:30 msgid "# users" msgstr "nb. d'utilisateurs" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "%d canaux sur %d sont affichés" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "### Session terminée à [" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" "Impossible de créer le dossier.\n" "Vérifiez qu'il n'y a pas de protection en écriture.\n" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "" "La fonction d'enregistrement est désactivée jusqu'au redémarrage de " "SpringLobby." #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "Journaliser les avertissements" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" "Impossible d'écrire le message dans le journal.\n" "La journalisation sera désactivée pour la salle " #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "Rejoignez cette salle pour réactiver la journalisation." #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 #, fuzzy msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" "Impossible d'ouvrir le fichier journal.\n" "Vérifiez qu'il n'y a pas de protection en écriture.\n" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "salle_" #: src/chatpanel.cpp:69 msgid "#" msgstr "#" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, c-format msgid "%d users" msgstr "%d utilisateurs" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "clic droit pour les options (comme autojoin)" #: src/chatpanel.cpp:296 msgid "Send" msgstr "Envoyer" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr " !! Commande : \"" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "\" paramètres : \"" #: src/chatpanel.cpp:717 msgid "channel" msgstr "salle" #: src/chatpanel.cpp:718 msgid "battle" msgstr "bataille" #: src/chatpanel.cpp:719 msgid "server" msgstr "serveur" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr " a rejoint la " #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr " a quitté la " #: src/chatpanel.cpp:814 msgid " ** Channel topic:" msgstr " ** Sujet de la salle :" #: src/chatpanel.cpp:821 msgid " ** Set by " msgstr " ** Défini par " #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "Chat fermé." #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "Êtes-vous sûr de vouloir coller %d lignes ?" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr " Vous avez SpringLobby v" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr " Vous n'êtes pas dans cette salle ou elle n'existe pas." #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" " Erreur: La commande (%s) n'existe pas, tapez /help pour afficher la liste " "des commandes disponibles." #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" " Vous n'êtes pas dans une bataille ou la bataille n'existe pas, utilisez /" "help pour une liste des commandes." #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr " Utilisateur est Hors Ligne" #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr " Envoyé : \"" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "\"" #: src/chatpanel.cpp:1090 #, fuzzy msgid " ** User is now offline." msgstr " Utilisateur est Hors Ligne" #: src/chatpanel.cpp:1097 #, fuzzy msgid " ** User just got online." msgstr " Utilisateur est Hors Ligne" #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 #, fuzzy msgid " ** Joined Battle." msgstr " a ouvert la bataille " #: src/chatpanelmenu.cpp:34 #, fuzzy msgid "Disable text appending" msgstr "Désactiver l'avertissement du mode expert" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "Copier" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "Copier le lien dans le presse-papier" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "Effacer" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "Rejoindre automatiquement cette salle" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "Quitter" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "Afficher les messages d'arrivée/de départ" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "Affiche la liste des muets" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "Information de la salle" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "Changer le sujet..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "Message dans la salle..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "Verrouiller..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "Déverrouiller" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "Inscription ..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "Se désinscrire" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "Activée" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "Désactivée" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "Est activé ?" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "Protection contre le Spam" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "ChanServ" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "Déconnecter" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "Reconnecter" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "Supprimer..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "Changer de mot de passe..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "Changer l'accès..." #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "Comptes" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "Transmission" #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "Admin" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "Ouvrir Chat" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "Rejoindre la même partie" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "Temps passé en jeu" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "Récupérer l'IP, etc" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "Rendre muet..." #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "Rendre muet pour 5 minutes" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "Rendre muet pour 10 minutes" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "Rendre muet pour 30 minutes" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "Rendre muet pour 2 heures" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "Rendre muet pour 1 jour" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "Rendre la parole" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "Rendre muet" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "Expulser" #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "Bannir..." #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "Débannir" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "Biper" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "Baffer !" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "Donner les droits d'opérateur" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "Prendre les droits d'opérateur" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "Erreur ChanServ" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "ChanServ n'est pas dans cette salle." #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "Que devrait être le nouveau sujet ?" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "Message :" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "Verrouiller la salle..." #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "Que devrait être le nouveau mot de passe ?" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "Déverrouiller la salle" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "Etes vous sur de vouloir déverrouiller cette salle ?" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "ChanServ n'est pas sur ce serveur." #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "Enregistrer la salle" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "Qui devra être le fondateur de cette salle ?" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "Désinscrire la salle" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "Etes vous sur de vouloir désinscrire cette salle ?" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "Supprimer le compte utilisateur" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "Quel compte utilisateur voulez vous supprimer aujourd'hui ?" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "Supprimer compte" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "Etes vous sur de vouloir supprimer ce compte ? " #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "Changer le mot de passe du compte utilisateur" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "De quel compte utilisateur voulez-vous changer le mot de passe ?" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "Quel devrait être le nouveau mot de passe ?" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "Non implémenté" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "Transmettre le Message" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "Message à transmettre" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "Rendre l'utilisateur muet" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "Pour combien de minutes l'utilisateur sera-t'il muet ?" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "Expluser l'utilisateur" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "Raison:" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "Expluser l'Utilisateur" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "Rendre muet l'utilisateur" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "Durée :" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "Entrez le nom" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" "Merci d'entrer le nom du nouveau groupe.\n" "Après avoir cliqué sur ok vous pourrez modifier ses paramètres." #: src/chatpanelmenu.cpp:774 msgid "couldn't add user" msgstr "impossible d'ajouter le joueur" #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "Se connecter au serveur lobby" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "Serveur" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" "Server auquel se connecter. Vous pouvez vous connecter au serveur que vous " "voulez en l'entrant sous la forme adresse:port." #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "Surnom" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "Mot de passe" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "Se souvenir du mot de passe" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "Connection automatique la prochaine fois" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" "se souvenir des détails de connexion et se connecter automatiquement au " "serveur au prochain démarrage du lobby" #: src/connectwindow.cpp:85 #, fuzzy msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" "Si vous n'avez pas de compte, vous\n" " pouvez vous inscrire gratuitement dans l'onglet \"S'inscrire\"." #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "Ok" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Annuler" #: src/connectwindow.cpp:91 msgid "Login" msgstr "Connexion" #: src/connectwindow.cpp:92 msgid "Register" msgstr "S'inscrire" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "Pseudo" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "Port invalide." #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "Port invalide" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" "Numéro de port en dehors des limites.\n" "\n" "Il doit être un entier entre 1 et 65535." #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "Hote/port invalide." #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "hote invalide" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" "Le pseudonyme entré contient des caractères invalides comme )?&%.\n" " Merci de réessayer." #: src/connectwindow.cpp:294 msgid "Invalid nickname" msgstr "Pseudonyme invalide" #: src/connectwindow.cpp:301 msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" "L'inscription a échoué, la raison était :\n" "Mot de passe / confirmation différents (ou mot de passe vide)" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "Échec de l'inscription." #: src/countrycodes.cpp:11 msgid " Andorra" msgstr " Andorre" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "Émirats Arabes Unis" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "Afghanistan" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "Antigua et Barbuda" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "Anguilla" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "Albanie" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "Arménie" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "Antilles néerlandaises" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "Angola" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "Antarctique" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "Argentine" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "Samoa américaines" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "Autriche" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "Australie" #: src/countrycodes.cpp:25 #, fuzzy msgid "Åland Islands" msgstr "Îles Caïman" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "Aruba" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "Azérbaïdjan" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "Bosnie-herzégovine" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "La Barbade" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "Bangladesh" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "Belgique" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "Burkina-Faso" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "Bulgarie" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "Bahreïn" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "Burundi" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "Bénin" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "Bermudes" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "Brunéi Darussalam" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "Bolivie" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "Brésil" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "Bahamas" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "Bhoutan" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "Île Bouvet" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "Botswana" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "Biélorussie" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "Bélize" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "Canada" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "Îles Cocos" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "République Centre-Africaine" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "Congo" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "Suisse" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "Cote D'Ivoire" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "Îles de Cook" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "Chili" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "Cameroun" #: src/countrycodes.cpp:56 msgid "China" msgstr "Chine" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "Colombie" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "Costa Rica" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "Cuba" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "Cap Vert" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "Île Christmas" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "Chypre" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "République Tchèque" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "Allemagne" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "Djibouti" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "Danemark" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "Dominique" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "Republique Dominicaine" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "Algérie" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "Équateur" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "Estonie" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "Égypte" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "Sahara occidental" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "Erythrée" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "Espagne" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "Éthiopie" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "Finlande" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "Les Îles Fidji" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "Îles Malouines" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "Micronésie" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "Les Iles Féroé" #: src/countrycodes.cpp:82 msgid "France" msgstr "France" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "France, Métropolitaine" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "Gabon" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "Grenade" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "Géorgie" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "Guyane française" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "Ghana" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "Gibraltar" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "Groënland" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "Gambie" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "Guinée" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "Guadeloupe" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "Guinée équatoriale" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "Grèce" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "Géorgie du Sud et les Îles Sandwich du Sud" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "Guatemala" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "Guam" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "Guinée-Bissau" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "Guyana" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "Hong Kong" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "Îles Head et McDonald" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "Honduras" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "République de Croatie" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "Haïti" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "Hongrie" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "Indonésie" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "Irlande" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "Israël" #: src/countrycodes.cpp:110 msgid "India" msgstr "Inde" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "Territoires britanniques de l'Océan Indien" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "Irak" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "Iran" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "Islande" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "Italie" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "Jamaïque" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "Jordanie" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "Japon" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "Kenya" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "Kirghizistan" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "Cambodge" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "Kiribati" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "Comores" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "Saint Christophe et Niévès" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "Corée du Nord" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "Corée du Sud" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "Koweït" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "Îles Caïman" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "Kazakstan" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "Lao, Rpublique Démocratique Populaire" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "Liban" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "Sainte-Lucie" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "Liechtenstein" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "Sri Lanka" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "Liberia" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "Lesotho" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "Lituanie" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "Luxembourg" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "Lettonie" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "Lybie" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "Maroc" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "Monaco" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "Moldova, république de" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "Le Monténégro" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "Madagascar" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "Îles Marshall" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "La Macédoine" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "Mali" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "Birmanie" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "Mongolie" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "Macau" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "Îles Mariannes du Nord" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "Martinique" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "Mauritanie" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "Montserrat" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "Malte" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "Maurice" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "Maldives" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "Malawi" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "Mexique" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "Malaisie" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "Mozambique" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "Namibie" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "Nouvelle Calédonie" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "Niger" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "Île Norfolk" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "Nigeria" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "Nicaragua" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "Pays-Bas" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "Norvège" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "Népal" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "Nauru" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "Zone Neutre (Arabie Saoudite / Irak)" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "Niué" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "Nouvelle-Zélande" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "Oman" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "Panamá" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "Pérou" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "Polynésie française" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "Papouasie-Nouvelle-Guinée" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "Philippines" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "Pakistan" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "Pologne" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "Saint-Pierre-et-Miquelon" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "Îles Pitcairn" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "Puerto Rico" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "Portugal" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "Palaos" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "Paraguay" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "Qatar" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "Réunion, île de la" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "Roumanie" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "La Serbie" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "Russie" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "Rwanda" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "Arabie Saoudite" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "Îles Salomon" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "Seychelles" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "Soudan" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "Suède" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "Singapour" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "St Hélène" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "Slovénie" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "Svalbard et île Jan Mayen" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "Slovaquie" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "Sierra Léone" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "Saint-Marin" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "Sénégal" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "Somalie" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "Suriname" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "Sao Tomé-et-Principe" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "Union Soviétique (Ex-URSS)" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "Salvador" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "Syrie" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "Swaziland" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "Îles Turques et Caïques" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "Tchad" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "Terres australes françaises" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "Togo" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "Thaïlande" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "Tadjikistan" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "Tokelau" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "Turkmenistan" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "Tunisie" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "Tonga" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "Timor oriental" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "Turquie" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "Trinidad et Tobago" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "Tuvalu" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "Taïwan" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "Tanzanie, République-Unie de" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "Ukraine" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "Ouganda" #: src/countrycodes.cpp:234 #, fuzzy msgid "United Kingdom" msgstr "Royaume-Uni (Grande-Bretagne)" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "Îles mineures éloignées des États-Unis" #: src/countrycodes.cpp:236 msgid "United States" msgstr "États-Unis" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "Uruguay" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "Ouzbékistan" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "Cité du Vatican (Saint-Siège)" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "Saint-Vincent et Les Grenadines" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "Venezuela" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "Îles Vierges (Anglaises)" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "Îles Vierges (Américaines)" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "Vit Nam" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "Vanuatu" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "Wallis et Futuna" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "Samoa" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "Yémen" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "Mayotte" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "Yougoslavie" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "Afrique du Sud" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "Zambie" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "Zaïre" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "Zimbabwe" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "(nom complet du pays non trouvé)" #: src/crashreport.cpp:168 msgid "System informations" msgstr "Information sur le système" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "Journal de l'application" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "Dernier script de lancement de Spring généré" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "Aucune carte trouvée." #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "en attente" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "Télécharger" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "% effectués" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 msgid "Name" msgstr "Nom" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "Taille" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "Type" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Carte" #: src/downloader/filelister/filelistctrl.cpp:174 #, fuzzy msgid "game" msgstr "en jeu" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "inconnu" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "Chercher et télécharger les fichiers" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "Fichiers affichés" #: src/downloader/filelister/filelistdialog.cpp:55 msgid "Download selected" msgstr "Télécharger la sélection" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "%u fichiers affichés" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Filtrer les noms" #: src/downloader/filelister/filelistfilter.cpp:69 #, fuzzy msgid "Filetype:" msgstr "Fichier" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" "\n" "enregistré dans :\n" #: src/downloader/httpdownloader.cpp:78 msgid "" "\n" "successfully unzipped in:\n" msgstr "" "\n" "décompressé avec succès dans :\n" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" "\n" " échec de la décompression, merci de corriger manuellement" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "Impossible de sauvegarder\n" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" "\n" "dans :\n" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" "\n" "Erreur numéro : " #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "Téléchargement terminé." #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "Attention Flood !" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "Ajouter un Bot" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Pseudo :" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "IA" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "Choisissez l'IA du bot." #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "propriété" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 msgid "value" msgstr "valeur" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "Ajouter un bot" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "Aucune bibliothèque d'IA trouvée dans votre installation de Spring." #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "Aucune bibliothèque d'IA trouvée." #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "Equilibrer les équipes" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "Méthode" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "Répartir uniformément les grades" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Aléatoire" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "Clans" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Aucun" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "Equilibré" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "Toujours" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" "Mettre les membres d'un même clan (en utilisant les tags d'alliance, " "comme )'[smurfzor]Alice' and '[smurfzor]Bob' dans la même alliance.\n" "Aucun : Ne tient pas compte des clans pour équilibrer.\n" "Equilibré : Met les membres d'un clan dans la même alliance, sauf si cela " "rend les alliances déséquilibrées.\n" "Toujours : Met toujours les membres d'un clan dans la même alliance, même si " "les alliances sont déséquilibrées." #: src/hosting/autobalancedialog.cpp:53 msgid "Number of allies" msgstr "Nombre d'alliances" #: src/hosting/autobalancedialog.cpp:56 msgid "Auto select" msgstr "Sélection automatique" #: src/hosting/battlemaptab.cpp:69 msgid "Select" msgstr "Sélectionner..." #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "Option" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "Valeur" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "Vitesse du vent" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "Force du courant" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "Gravité" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "Rayon des extracteurs" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "Métal max." #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "Fixes" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "Choisies en jeu" #: src/hosting/battlemaptab.cpp:103 msgid "Chose before game" msgstr "Choisies avant la partie" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "Positions de départ" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "Unités interdites" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "Unités autorisées" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "Les unités dans cette liste seront accessibles pendant la partie." #: src/hosting/battleoptionstab.cpp:77 msgid "Disable selected units." msgstr "Désactiver les unités sélectionnées." #: src/hosting/battleoptionstab.cpp:81 msgid "Re-enable selected units." msgstr "Réactiver les unités sélectionnées." #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "<<" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "Autorise toutes les unités." #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "Unités interdites" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "" "Les unités dans cette liste ne seront pas utilisables pendant la partie." #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "Combien d'unités de ce type souhaitez-vous autoriser ?" #: src/hosting/battleoptionstab.cpp:242 msgid "Unit restriction" msgstr "Unités interdites" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "Équipe" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "Alliance" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "Bonus de ressources" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "Faction" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "Choisir la couleur" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "Choisir le bonus de ressources" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "Spectateur" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "Expulser" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "Veuillez entrer une valeur entre 0 et 100" #: src/hosting/battleroomlistctrl.cpp:750 msgid "AI (bot)\n" msgstr "IA (bot)\n" #: src/hosting/battleroomlistctrl.cpp:754 msgid "Human\n" msgstr "Humain\n" #: src/hosting/battleroomlistctrl.cpp:759 msgid "Spectator\n" msgstr "Spectateur\n" #: src/hosting/battleroomlistctrl.cpp:763 msgid "Player\n" msgstr "Joueur\n" #: src/hosting/battleroomlistctrl.cpp:768 msgid "Host\n" msgstr "Hôte\n" #: src/hosting/battleroomlistctrl.cpp:772 msgid "Client\n" msgstr "Client\n" #: src/hosting/battleroomlistctrl.cpp:777 msgid "Ready\n" msgstr "Prêt\n" #: src/hosting/battleroomlistctrl.cpp:781 msgid "Not ready\n" msgstr "Pas prêt\n" #: src/hosting/battleroomlistctrl.cpp:786 msgid "In sync" msgstr "Synchronisé" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "Non-synchronisé" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "" "Les joueurs avec le même numéro d'équipe partage le contrôle de leurs unités." #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" "Les joueurs avec le même numéro d'alliance jouerons ensemble pour atteindre " "la victoire." #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "Selectionnez une couleur pour identifier vos unités dans le jeu" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "Selectionnez votre faction" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "Regarder la bataille au lieu de jouer" #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "Sélection automatique" #: src/hosting/battleroomtab.cpp:144 #, fuzzy msgid "automatically unspec when there's a free slot" msgstr "Vérifier automatiquement les mises à jour" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "Je suis prêt" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "Cliquez si vous êtes satisfait des paramètres de la bataille." #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "Couleur" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" "Un aperçu de la carte sélectionnée. Vous pouvez voir les positions de " "départ, ou (le cas échéant) les zones de départ." #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Héberger ..." #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Heberger un nouvelle bataille" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "Quitter la bataille et revenir à la liste des parties" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "Démarrer" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "Lancer la bataille" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "Organisation des joueurs" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "Diverses fonctions pour simplifier la mise en place de jeux en équipe" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "Ajouter bot" #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "Ajouter un joueur contrôlé par l'ordinateur à la partie" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "Verrouiller au lancement" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" "Verrouille automatiquement la bataille quand le jeu commence et la " "déverrouille quand il est terminé." #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "Prévenir d'autres joueurs de se joindre à la bataille" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "Hébergement automatique" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" "Active le mode d'hébergement automatisé. Ceci permet aux joueurs de " "contrôler votre bataille en utilisant des commandes comme \"!balance\" et \"!" "start\"." #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Description" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 #, fuzzy msgid "AutoSpect" msgstr "Sélection automatique" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Démarrer" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "Automatically start the battle when all players are ready and synced" msgstr "" "Verrouille automatiquement la bataille quand le jeu commence et la " "déverrouille quand il est terminé." #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "Verrouiller les alliances" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "Quand activé, seul l'hôte peut changer les équipes et les alliances" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 #, fuzzy msgid "Ring unsynced" msgstr "Synchronisé" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 #, fuzzy msgid "Ring ..." msgstr "Biper" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "Non prêt" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 msgid "Force spectate ..." msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "Equilibrer les alliances" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "Répartie automatiquement les joueurs en deux alliances ou plus." #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "Arranger les couleurs" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "Rend les couleurs des joueurs différentes" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "Définir les équipes" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" "Répartit automatiquement en équipes, par défaut sans partage de contrôle" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "Jeux d'options" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "Charge un jeu d'options" #: src/hosting/battleroomtab.cpp:255 msgid "Save" msgstr "Sauvegarder..." #: src/hosting/battleroomtab.cpp:256 msgid "Save a set of options." msgstr "Sauvegarder ce jeu d'options." #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 msgid "Delete" msgstr "Effacer" #: src/hosting/battleroomtab.cpp:261 msgid "Delete a set of options." msgstr "Effacer ce jeu d'options." #: src/hosting/battleroomtab.cpp:265 msgid "Set default" msgstr "Définir par défaut..." #: src/hosting/battleroomtab.cpp:266 #, fuzzy msgid "Use the current set of options as game's default." msgstr "Utiliser les options actuelles comme options par défaut de la mod." #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "Choisissez un jeu d'options enregistré pour les définir rapidement" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "Boîtes" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "Choisir" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "Continuer" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "Terminer" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "Lignée" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "La carte n'existe pas." #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" "Certains joueurs ne sont pas encore prêts.\n" "Voulez-vous forcer le lancement ?" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "Non prêt" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "Choisies en jeu" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Description" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "Définir par défaut..." #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "Entrez le nom du jeu d'options" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" "Entrez un nom pour le jeu d'options actuel\n" "Si un jeu d'options avec le même nom existe déjà, il sera écrasé." #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" "Impossible de charger un jeu d'options sans un nom.\n" "Merci d'en sélectionner un dans la liste et de réessayer." #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "erreur" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "Choisissez un jeu d'options existant dans la liste" #: src/hosting/battleroomtab.cpp:987 msgid "Delete preset" msgstr "Effacer le jeu d'options" #: src/hosting/battleroomtab.cpp:996 #, fuzzy msgid "Set game default preset" msgstr "Définir options de la mod par défaut" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "Heberger un nouvelle bataille" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "" "Une petite description de cette partie, elle apparaîtra dans la liste de " "bataille." #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Description" #: src/hosting/hostbattledialog.cpp:91 #, fuzzy msgid "Automatically write the battle description when a user joins." msgstr "" "Verrouille automatiquement la bataille quand le jeu commence et la " "déverrouille quand il est terminé." #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "Selectionnez le mod avec le quel vous voulez jouer." #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "Protégé par un mot de passe" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "" "Mot de passe requis pour rejoindre la partie. Laissez vide si sans mot de " "passe" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "Port" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "Port UDP pour héberger une partie. Par défaut 8452" #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" "héberge et contrôle la partie sur une autre machine, utile si vous ne " "parvenez pas à héberger" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 #, fuzzy msgid "Randomly picks an available one" msgstr "pas d'options disponibles" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "Nombre de joueurs" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "Le nombre maximum de joueurs autorisés à rejoindre la partie." #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "Hole punching" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "Traversée du NAT" #: src/hosting/hostbattledialog.cpp:185 msgid "NAT traversal to use." msgstr "Méthode de traversée de NAT à utiliser." #: src/hosting/hostbattledialog.cpp:190 #, fuzzy msgid "Rank requirement" msgstr "Redémarrage requis" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 msgid "Select the type of rank enforcement." msgstr "" #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "Démarrer l'hébergement de la bataille." #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 #, fuzzy msgid "You have to select a game first." msgstr "Vous devez choisir un mod d'abord." #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "Pas de mod séléctionner." #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" "Vous utilisez une version de wxWidgets antérieure à la version 2.8.\n" "Le test de port n'est pas pris en charge.\n" "L'hébergement peut fonctionner ou non." #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" "Le serveur utilisé pour tester votre port %d est inaccessible.\n" "L'hébergement peut fonctionner ou non avec ces paramètres." #: src/hosting/hostbattledialog.cpp:427 #, fuzzy, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "La bataille n'a pas été ouverte car le port que vous avez choisi (%d) ne " "peut pas recevoir les paquets entrants.\n" "Vérifiez la configuration de vos pare-feu/routeur à nouveau ou changez le " "port dans la fenêtre.\n" "\n" "Si tout le reste échoue, activez \"Hole punching\" dans les options " "d'hébergement." #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "La bataille n'a pas été ouverte car le port que vous avez choisi (%d) ne " "peut pas recevoir les paquets entrants.\n" "Vérifiez la configuration de vos pare-feu/routeur à nouveau ou changez le " "port dans la fenêtre.\n" "\n" "Si tout le reste échoue, activez \"Hole punching\" dans les options " "d'hébergement." #: src/hosting/hostbattledialog.cpp:459 #, fuzzy msgid "Battle not started beacuse the game you selected could not be found. " msgstr "" "La bataille n'a pas commencé car le mod sélectionné n'est pas installé. " #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "Erreur au démarrage de la bataille." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" "Aucune carte dans votre installation de Spring. Ceci peut arriver si vous " "avez mal réglé les paramètres de Spring." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "Aucune carte trouvée." #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "Salle de bataille" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "Options" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 msgid "Unit Restrictions" msgstr "Unités interdites" #: src/hosting/mmoptionwindows.cpp:36 msgid "Change option" msgstr "Modifier l'option" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "La partie est ouverte." #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "La partie est protégée par un mot de passe." #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "La partie est pleine." #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "La partie est pleine et protégée par un mot de passe." #: src/iconimagelist.cpp:322 msgid "Game is closed." msgstr "La partie est fermée." #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "La partie est fermée et protégée par un mot de passe." #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "La partie est fermée et pleine." #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "La partie est fermée, plein et protégée par un mot de passe." #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "La partie est en cours." #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "La partie est en cours et protégée par un mot de passe." #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "La partie est en cours et pleine." #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "La partie est en cours, pleine et protégée par un mot de passe." #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "La partie est en cours et fermée." #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "La partie est en cours, fermée et protégée par un mot de passe." #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "La partie est en cours, fermée et pleine." #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" "La partie est en cours, fermée, pleine et protégée par un mot de passe." #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 #, fuzzy msgid "Newbies guide" msgstr "Débutant" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 #, fuzzy msgid "Joining a battle:\n" msgstr "Rejoindre la même partie" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "Heberger un nouvelle bataille" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Version de Spring" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 #, fuzzy msgid "Singleplayer gamee" msgstr "Solo" #: src/introguide.cpp:110 #, fuzzy msgid "Multiplayer gamee" msgstr "Multijoueur" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "Tous les fichiers (*)|*" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 msgid "Disconnected from server, chat closed." msgstr "Déconnecté du serveur, fermeture du chat." #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "Transferts en cours : " #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "Total entrant : " #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "Annuler le téléchargement" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "Téléchargement de widgets Lua" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "&Connexion..." #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "&Déconnecter" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 msgid "&Save options" msgstr "&Enregistrer les options" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "&Quitter" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "Canaux rejoints &automatiquement..." #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "&Options de Spring" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "&Enregistrer les options" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "Rejoindre la &salle..." #: src/mainwindow.cpp:164 msgid "Channel &list" msgstr "&Liste des salles" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "Ouvrir un chat &privé" #: src/mainwindow.cpp:166 #, fuzzy msgid "Change &username" msgstr "&Changer de langue" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "&Captures d'écran" #: src/mainwindow.cpp:169 #, fuzzy msgid "&Reload maps/games" msgstr "&Recharger Cartes/Mods" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "Chercher une &mise à jour" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "&A propos" #: src/mainwindow.cpp:178 #, fuzzy msgid "&System Info" msgstr "Information sur le système" #: src/mainwindow.cpp:179 msgid "&Change language" msgstr "&Changer de langue" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "&Signaler un bogue" #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "&Documentation" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "Serveur" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "&Outils" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "&Aide" #: src/mainwindow.cpp:500 #, fuzzy msgid "You need to be connected to a server to view the channel list" msgstr "Vous devez être connecté au serveur pour voir la liste des canaux" #: src/mainwindow.cpp:500 msgid "Not connected" msgstr "Non connecté" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "Rejoindre la salle..." #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "Nom de la salle à rejoindre" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "Ouvrir un chat privé..." #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "Nom de l'utilisateur" #: src/mainwindow.cpp:540 #, fuzzy, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" "SpringLobby est un client lobby multiplateforme pour le moteur de RTS Spring." #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "Il n'y a pas de captures d'écran dans le dossier data de spring." #: src/mainwindow.cpp:602 msgid "No files found" msgstr "Aucun fichier" #: src/mainwindow.cpp:656 #, fuzzy, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" "Vous devez redémarrer SpringLobby pour prendre en compte le changement de " "langue." #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "Redémarrage requis" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "Entrez un nom pour ce profil" #: src/mainwindow.cpp:692 #, fuzzy msgid "This profile is write protected, please choose another name" msgstr "" "Cette bataille est protéger par un mot de passe, entrer le mot de passe." #: src/mainwindow.cpp:703 #, fuzzy msgid "Which profile do you want to load?" msgstr "Quel profil voulez-vous charger ?" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "Renommer..." #: src/mainwindow.cpp:767 #, fuzzy msgid "Enter new nickname" msgstr "Entrez le nom" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "Chat" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "Liste de bataille" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "Solo" #: src/mainwindow.h:203 msgid "Replays" msgstr "Replays" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 msgid "Downloads" msgstr "Téléchargements" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "Métal: %.1f%%" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "Actualiser" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "Télécharger" #: src/mapctrl.cpp:897 msgid "side:" msgstr "faction :" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "allié: %d" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "bonus: %d%%" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "Sélectionnez une carte (cliquez-glissez pour faire défiler)" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "Trier verticalement selon" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "Trier horizontalement selon" #: src/mapselectdialog.cpp:83 msgid "Show" msgstr "Afficher" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "Toutes les cartes" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "Affiche toutes les cartes disponibles" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "Cartes populaires" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" "Affiche uniquement les cartes qui sont actuellement jouées sur le serveur. " "Vous devez être connecté pour utiliser ceci." #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "Cartes jouées récemment." #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" "Affiche uniquement les cartes sur lesquelles vous avez joué récemment (en se " "basant sur vos replays)." #: src/mapselectdialog.cpp:95 msgid "Filter" msgstr "Filtrer" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" "Affiche uniquement les cartes qui contiennent ce texte dans leur nom ou leur " "description." #: src/mapselectdialog.cpp:100 msgid "Map details" msgstr "Détails de la carte" #: src/mapselectdialog.cpp:163 msgid "Start positions" msgstr "Positions de départ" #: src/mapselectdialog.cpp:261 msgid "Minimum wind" msgstr "Vent minimum" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "Vent maximum" #: src/mapselectdialog.cpp:263 msgid "Average wind" msgstr "Vent moyen" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "Taille (map area)" #: src/mapselectdialog.cpp:265 msgid "Aspect ratio" msgstr "Rapport des dimensions" #: src/mapselectdialog.cpp:266 msgid "Number of start positions" msgstr "Nombre de positions de départ" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "Type de position de départ" #: src/mmoptionswrapper.cpp:122 #, fuzzy msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" "Comment les joueurs sélectionneront où ils commencent sur la carte\n" "0 : positions fixes de la carte\n" "1 : positions aléatoires\n" "2 : choisie en jeu\n" "3 : choisie dans le lobby avant de lancer" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "Choisies en jeu" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "Choisies avant la partie" #: src/mmoptionswrapper.cpp:132 msgid "List of restricted units" msgstr "Liste des unités interdites" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "Nom de la carte" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "s" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "c" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "r" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "Exécutables (*.exe)|*.exe|Tous les fichiers (*.*)|*.*" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "Couleurs et police" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "Utilisez les couleurs du système" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "Normal" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "Arrière-plan" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "Action" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "Surligner" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "Rejoindre/Quitter" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "Mes messages" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "Client" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "Horodatage" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "Notification" #: src/options/chatoptionstab.cpp:258 msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" "[19:35] ** Serveur ** Connecté au serveur TAS.\n" "[22:30] bonjour tout le monde\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 pense que ses couleurs sont belles\n" "[22:45] Dude2: vraiment ?\n" "[22:46] Mais elles pourraient être mieux, je vais les peaufiner " "encore un peu...\n" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "Police :" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "Par défaut" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "Sélectionner..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "Comportement des zones de texte" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "Active les couleurs IRC dans les messages du chat" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "Jouer les sons de notification" #: src/options/chatoptionstab.cpp:300 #, fuzzy msgid "Copy server messages in current channel" msgstr " \"/part\" - Quitte la salle actuelle." #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "Journalisation du chat" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "Enregistrer les journaux du chat" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "Mots surlignés" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "Mots à surligner dans le chat" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "entre une liste séparée par des ;" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "Optionnellement, jouer un son/faire clignoter la barre de titre " #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "Suspendre au lancement d'une partie" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "Suspendre les torrents" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "Limiter les vitesses :" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "envoi (ko/s)" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "téléchargement (ko/s)" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "Chiffres" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "vitesse d'envoi maximum en ko/s (-1 > sans limite)" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "vitesse de réception maximum en ko/s (-1 > sans limite)" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "port utilisé pour les connexions torrent" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "connexions parallèles maximum" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 msgid "Remove" msgstr "Effacer" #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "Efface le groupe sélectionné" #: src/options/groupoptionspanel.cpp:61 msgid "Rename.." msgstr "Renommer..." #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "Renomme le groupe sélectionné" #: src/options/groupoptionspanel.cpp:70 msgid "Add New.." msgstr "Ajouter un nouveau..." #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "Ajoute un nouveau groupe" #: src/options/groupoptionspanel.cpp:84 msgid "Group Actions" msgstr "Actions pour ce groupe" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "Avertir de la connexion/déconnexion" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "" "Vous serez averti quand les utilisateurs de ce groupe se connecteront ou se " "déconnecteront." #: src/options/groupoptionspanel.cpp:95 msgid "Ignore Chat" msgstr "Ignorer le chat" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" "Ignore tout ce qui est dit sur une salle par un utilisateur de ce groupe." #: src/options/groupoptionspanel.cpp:101 msgid "Notify Hosted Battles" msgstr "Avertir d'une partie hébergée" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" "Vous serez averti lorsqu'un utilisateur de ce groupe héberge une bataille." #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "Ignorer les messages privés" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "Ignorer tout ce qui est dit en privé par un utilisateur de ce groupe." #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "Avertir du changement d'état" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "Vous serez averti lorsque l'état d'un utilisateur de ce groupe change." #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "Expulsion automatique" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" "Expulse automatiquement les utilisateurs de ce groupe des batailles que vous " "hébergez." #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "Surligner les batailles et les noms des utilisateurs de ce groupe." #: src/options/groupoptionspanel.cpp:134 msgid "Highlight Color" msgstr "Couleur de surlignage" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "Choisissez la couleur du surlignage" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "Utilisateur dans ce groupe" #: src/options/groupoptionspanel.cpp:163 msgid "Add.." msgstr "Ajouter..." #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "Ajouter des utilisateurs au groupe" #: src/options/groupoptionspanel.cpp:170 msgid "Remove users from group" msgstr "Retirer des utilisateurs de ce groupe" #: src/options/groupoptionspanel.cpp:264 msgid "Name of new group:" msgstr "Nom du nouveau groupe :" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "Ajouter un nouveau groupe" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "Navigateur web" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "Navigateur par défaut." #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "Utilisez le navigateur par défaut de votre système" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "Spécifiez :" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "Indiquez le navigateur internet que vous souhaitez utiliser" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "Parcourir" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "Choisir le chemin du navigateur web" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 #, fuzzy msgid "Use a file dialog to find the editor binary" msgstr "Choisir le chemin du navigateur web" #: src/options/lobbyoptionstab.cpp:91 msgid "Autoconnect" msgstr "Connexion automatique" #: src/options/lobbyoptionstab.cpp:94 #, fuzzy, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" "Si coché, SpringLobby se connectera automatiquement au dernier serveur " "utilisé" #: src/options/lobbyoptionstab.cpp:96 msgid "Autoconnect on lobby start" msgstr "Connexion automatique au lancement" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "Envoyer les statistiques" #: src/options/lobbyoptionstab.cpp:104 #, fuzzy, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" "Par défaut, SpringLobby enverra des statistiques (OS, version de " "SpringLobby) au serveur,\n" "pour vous aider plus facilement en cas de problème et pour vous prévenir des " "mises à jour.\n" "Décochez pour désactiver." #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "Envoyer les statistiques" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "Mises à jour automatiques" #: src/options/lobbyoptionstab.cpp:120 #, fuzzy, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" "SpringLobby peut vérifier à son lancement si une version plus récente est " "disponible et la télécharger automatiquement pour vous." #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "Vérifier automatiquement les mises à jour" #: src/options/lobbyoptionstab.cpp:130 msgid "Tooltips" msgstr "Infobulles" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "Afficher des infobulles ?" #: src/options/lobbyoptionstab.cpp:134 #, fuzzy, c-format msgid "Requires %s restart to take effect." msgstr "Nécessite le redémarrage de SpringLobby pour prendre effet." #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "Méthode d'auto-complétion" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" "\"Exacte\" complètera un mot si il n'y a qu'une seule possibilité.\n" "\"Plus proche\" sélectionnera la possibilité qui a la plus faible distance " "de Levenshtein." #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "Exacte" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "Plus proche" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" "Afficher des grosses icônes pour les onglets de la fenêtre principale ?" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "Jouer les sons de notification" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 #, fuzzy msgid "Display time for popup notifications in seconds" msgstr "Jouer les sons de notification" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 msgid "Start tab" msgstr "Onglet de démarrage" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "Sélectionnez quel onglet afficher au démarrage" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "Choisissez un exécutable de navigateur web" #: src/options/lobbyoptionstab.cpp:282 #, fuzzy msgid "Choose a editor browser executable" msgstr "Choisissez un exécutable de navigateur web" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "Spring" #: src/options/mainoptionstab.cpp:73 msgid "General" msgstr "Générales" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "Groupes" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "Restaurer" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "Appliquer" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "Chercher uniquement dans le répertoire d'installation" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "Exécutables de Spring" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "Emplacement" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "Chercher" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "Bibliothèque unitsync" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "Configuration automatique" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "Choisissez un exécutable de Spring" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "Bibliothèque" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "Tous les fichiers" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "Choisir la bibliothèque UnitSync" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 #, fuzzy msgid "Reloading unitsync" msgstr "Rafraîchir la liste" #: src/options/springoptionstab.cpp:315 #, fuzzy, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" "SpringLobby ne parvient pas à charger votre bibliothèque UnitSync.\n" "\n" "Vous devriez vérifier vos paramètres concernant UnitSync." #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "Choisir un dossier" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" "La création des répertoires a échoué\n" "Veuillez créer manuellement les dossiers suivants :" #: src/playback/playbackfilter.cpp:60 msgid "Filter settings" msgstr "Paramètres de filtrage" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Uniquement les cartes que j'ai" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "Taille du fichier en ko :" #: src/playback/playbackfilter.cpp:190 msgid "Duration (hh:mm:ss):" msgstr "Durée (hh:mm:ss)" #: src/playback/playbacklistctrl.cpp:42 msgid "Date" msgstr "Date" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "Date d'enregistrement" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Nom de la carte" #: src/playback/playbacklistctrl.cpp:46 msgid "Duration" msgstr "Durée" #: src/playback/playbacklistctrl.cpp:47 msgid "Spring Version" msgstr "Version de Spring" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize" msgstr "Taille du fichier" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "Taille du fichier en ko" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "Fichier" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "Télécharger le m&od" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "Regarder" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "Chargement ..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "Rafraîchir la liste" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "Replays" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "savegame" msgstr "Sauvegardes" #: src/playback/playbacktab.cpp:288 msgid "Couldn't get your spring versions from any unitsync library." msgstr "" "Impossible de récupérer votre version de Spring depuis une bibliothèque " "unitsync." #: src/playback/playbacktab.cpp:306 #, fuzzy, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" "Aucune version installée et compatible de spring n'a été trouvée, ce serveur " "nécessite la version : %s\n" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "Vos versions actuellement installées sont :" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" "Voulez-vous que j'essaye de le télécharger pour vous ?\n" "Vous pourrez voir la progression dans l'onglet \"Download Manager\"." #: src/playback/playbacktab.cpp:323 #, fuzzy msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" "Vous devez télécharger la mod avant de pouvoir regarder ce replay.\n" "\n" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" " Je n'ai pas pu trouver la carte utilisée sur ce replay.\n" "Ceci peut être provoqué par tasclient qui écrit de mauvaises valeurs du hash " "de la carte.\n" "Si vous êtes sûr de posséder la carte, cliquez sur non.\n" "Vous devez télécharger la carte pour pouvoir visualiser ce replay.\n" "\n" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" "Je ne pense pas que vous pourrez visualiser ce replay.\n" "Essayer quand même ? (PEUT PLANTER !)" #: src/playback/playbacktab.cpp:356 msgid "Invalid replay" msgstr "Replay invalide" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "Impossible d'effacer le replay : " #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "Vous avez été expulsé de la partie !" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "Expulsé par l'hôte" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr " aucune limite de durée" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr " %d minutes restantes" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 #, fuzzy msgid "There was an error downloading for the latest version.\n" msgstr "" "Il y a eu une erreur pendant le téléchargement de la dernière version.\n" "Merci de vous mettre à jour manuellement depuis http://springrts.com" #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "Notification" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "Pseudonyme invalide" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 #, fuzzy msgid "File doesn't exit" msgstr "La carte n'existe pas." #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Activé" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "Reconnecter" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 #, fuzzy msgid "Unknown Error" msgstr "Inconnu" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "Téléchargement terminé, l'emplacement est : " #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 msgid "Download complete." msgstr "Téléchargement terminé." #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "Impossible de lancer l'installeur. L'emplacement du fichier est : " #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer." msgstr "Impossible de lancer l'installeur." #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "Reconnecter" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "Reconnecter" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 #, fuzzy msgid "Tries to connect to the next server in the list." msgstr "Vous devez être connecté au serveur pour voir la liste des canaux" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 #, fuzzy msgid "Do nothing" msgstr "Hole punching" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "Filtrer les noms" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "Entrez un filtre pour filtrer les noms des utilisateurs en ligne" #: src/selectusersdialog.h:67 msgid "Select Users" msgstr "Sélectionner des utilisateurs" #: src/serverevents.cpp:124 #, fuzzy, c-format msgid "ping: %s ms" msgstr "réponse au ping après %s ms" #: src/serverevents.cpp:142 msgid " is online" msgstr " est en ligne" #: src/serverevents.cpp:165 msgid " is now " msgstr " est maintenant " #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "OnUserStatus() a échoué ! (exception)" #: src/serverevents.cpp:224 msgid " just went offline" msgstr " vient de se déconnecter" #: src/serverevents.cpp:259 msgid " opened battle " msgstr " a ouvert la bataille " #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "Impossible de rejoindre la salle" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "Impossible de rejoindre la salle " #: src/serverevents.cpp:583 msgid " because: " msgstr " car : " #: src/serverevents.cpp:826 msgid "Server Message" msgstr "Message du serveur" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr " détient l'ip : %s" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr " ne supporte pas vraiment la traversée de NAT" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "Début de la liste des muets pour " #: src/serverevents.cpp:928 #, c-format msgid "%s mutelist" msgstr "Muets sur %s" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "Fin de la liste des muets pour " #: src/serverevents.cpp:984 msgid "Download update" msgstr "Téléchargement d'une mise à jour" #: src/serverevents.cpp:984 #, fuzzy, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" "Voulez-vous télécharger %s ? Le fichier apporte les mises à jour " "suivantes :\n" "%s" #: src/serverevents.cpp:1067 #, fuzzy msgid "Automatically moved to new battle" msgstr "Vérifier automatiquement les mises à jour" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" "Vous pouvez déplacer le soleil/ordinateur sur la carte pour choisir la " "position de départ.\n" " Passer la souris sur l'icône permet de changer la faction, l'alliance et le " "bonus." #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "Ajouter un bot..." #: src/singleplayertab.cpp:99 msgid "Spectate only" msgstr "Observer seulement" #: src/singleplayertab.cpp:102 msgid "Random start positions" msgstr "Positions de départ aléatoires" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "-- Faites un choix --" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 #, fuzzy msgid "Game setup error" msgstr "Paramètres de jeu invalides" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "Vous devez d'abord sélectionner une carte." #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" "Continuer sans ajouter un bot ?\n" " La partie sera terminée plutôt vite.\n" " " #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "Aucun bot ajouté" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "Vous ne pouvez pas lancer Spring alors qu'il est déjà lancé" #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 #, fuzzy msgid "Coulnd't load required unitsync library" msgstr "Choisissez une bibliothèque unitsync" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 #, fuzzy msgid "Fatal error" msgstr "Erreur critique" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" "Cette application a généré une erreur fatale et va être terminée\n" "La génération d'un rapport de bogue n'est pas possible\n" "\n" "Merci de récupérer une bibliothèque wxWidgets qui supporte wxUSE_DEBUGREPORT" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "Erreur critique" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "affiche ce message d'aide" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "ne pas utiliser le gestionnaire de crashs (utile pour le débogage)" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "écrire le journal de l'application dans la console (si possible)" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "active l'affichage du journal de l'application dans une fenêtre" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" "force la verbosité par défaut du journal, peut être :\n" " 0: pas de journal\n" " 1: erreurs critiques\n" " 2: erreurs\n" " 3: avertissements (par défaut)\n" " 4: messages\n" " 5: appels de fonction" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 msgid "Ignore chat" msgstr "Ignorer le chat" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 msgid "Battle Autokick" msgstr "Expulsion automatique d'une bataille" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 msgid "Friends" msgstr "Amis" #: src/springsettings/ctrlconstants.h:215 #, fuzzy msgid "Scrollwheel speed" msgstr "Limiter les vitesses :" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "" #: src/springsettings/ctrlconstants.h:229 #, fuzzy msgid "Terrain detail" msgstr "Détail graphique" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "Unit LOD distance" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "higher value = units will remain detailed even when zooming out" msgstr "" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "Grass detail" msgstr "Détail graphique" #: src/springsettings/ctrlconstants.h:231 msgid "higher value = more detailed grass" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:236 msgid "Max nano simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "" #: src/springsettings/ctrlconstants.h:245 #, fuzzy msgid "Enable v-sync" msgstr "Synchronisé" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "Full-scene anti-aliasing samples" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "Master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "General sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "general volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "reply volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "Battle volume" msgstr "Salle de bataille" #: src/springsettings/ctrlconstants.h:276 msgid "battle volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "User interface volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "ui volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "" #: src/springsettings/ctrlconstants.h:291 #, fuzzy msgid "Reflective units" msgstr "Unités interdites" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "" #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 #, fuzzy msgid "left is the default" msgstr "Définir par défaut..." #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "" #: src/springsettings/ctrlconstants.h:312 #, fuzzy msgid "Use less colors" msgstr "Utilisez les couleurs du système" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" #: src/springsettings/ctrlconstants.h:320 #, fuzzy msgid "Show in-game player information" msgstr "Information sur le système" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 #, fuzzy msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "Vitesse de défilement (clavier et souris)" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "" #: src/springsettings/ctrlconstants.h:368 #, fuzzy msgid "Catch AI exceptions" msgstr "Exacte" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" #: src/springsettings/ctrlconstants.h:385 #, fuzzy msgid "Reflective" msgstr "Sélectionner..." #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "" #: src/springsettings/ctrlconstants.h:385 #, fuzzy msgid "Bump-mapped" msgstr "Eau bump-mappée" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "" #: src/springsettings/ctrlconstants.h:415 msgid "Blur reflection" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Shore waves" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Enables shorewaves" msgstr "" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "Action" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 msgid "Reflection texture size" msgstr "" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "Durée" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 #, fuzzy msgid "off" msgstr "Désactivée" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "Options combinées" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "Qualité d'affichage / Mode vidéo" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "Détail du rendu" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "Options de l'interface" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "Audio" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 #, fuzzy msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" "Les changements faits dans l'onglet Qualité/Détail\n" "en mode expert seront perdus si vous changez les\n" "options simples à nouveau.\n" "Egalement, ces changements NE SERONT PAS visibles\n" "dans les choix de l'onglet Options combinées (ce\n" "message peut être désactivé dans le meni \"Fichier\")" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "Erreur !" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "Sauvegarder les paramètres de Spring avant de sortir ?" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "Confirmation nécessaire" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "SpringSettings (mode simple)" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "Sauvegarder les paramètres" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "Réinitialiser les paramètres aux valeurs par défaut" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "Désactiver l'avertissement du mode expert" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "Quitter" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "Simple (peu d'options)" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "Expert (toutes les options)" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "A propos" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "Contact" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "Crédits" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "Signaler un bug" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "Mode" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "Info/Aide" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "Rétablier TOUS les paramètres aux valeurs par défaut ?" #: src/springsettings/frame.cpp:315 #, fuzzy msgid "(simple mode)" msgstr "SpringSettings (mode simple)" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "Astuce" #: src/springsettings/frame.cpp:367 #, fuzzy msgid "(expert mode)" msgstr "Passer en mode expert" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "" "SpringSettings est une interface graphique pour le réglage du Spring engine" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "Kloot" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "L'équipe de SpringLobby" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "tous ceux qui rapportent des bogues/des suggestions" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "Port invalide" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 #, fuzzy msgid "Hotkey Error" msgstr "Erreur d'aide" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 #, fuzzy msgid "Enter new command:" msgstr "Commandes de chat :" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 #, fuzzy msgid "Hotkey SaveSettings error" msgstr "Erreur de SpringSettings" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "Aucun fichier" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "Chemin vers la bibliothèque unitsync" #: src/springsettings/panel_pathoption.cpp:34 #, fuzzy msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" "Il y a eu un problème en récupérant vos paramètres.\n" "Merci de vérifier que le chemin ci-dessous est correct.\n" "Quand vous l'aurez corrigé, cliquez sur le bouton\n" "\"Utiliser ce chemin\" à nouveau pour réessayer." #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "Utiliser ce chemin" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "libunitsync.so sous Linux, unitsync.dll sous Windows" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "Réglage des chemins" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "Choisissez une bibliothèque unitsync" #: src/springsettings/panel_pathoption.cpp:96 #, fuzzy msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" "SpringSettings ne peut pas charger votre bibliothèque\n" " unitsync.\n" "Vous devriez vérifier les paramètres d'unitsync.\n" "Votre version de Spring doit être 0.76 ou plus récent,\n" "sinon ceci échouera à chaque fois." #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "basse" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "moyenne" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "haute" #: src/springsettings/presets.h:45 msgid "very low" msgstr "très basse" #: src/springsettings/presets.h:45 msgid "very high" msgstr "très haute" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "Impossible de lancer le navigateur par défaut" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "Impossible de lancer le navigateur. L'URL est : " #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "Impossible de lancer le navigateur." #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "Impossible d'accéder à vos paramètres.\n" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "Impossible de sauvegarder, unitsync n'est pas chargée correctement" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "Erreur de SpringSettings" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "Options audio" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "Résolution de l'écran" #: src/springsettings/tab_quality_video.cpp:166 #, fuzzy msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" "Si une option nécessite du matériel spécial pour\n" "fonctionner, ce sera mentionné dans l'infobulle." #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "Qualité de l'eau" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "Résolution en bits" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "Options de qualité du rendu" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "Options du mode vidéo" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "Options d'anti-aliasing" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "Z-Buffer (tampon de profondeur)" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "Eau bump-mappée" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "Niveau de détail du rendu" #: src/springsettings/tab_simple.cpp:40 #, fuzzy msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" "Ces options vous permettent de contrôler le rendu de Spring.\n" "Pour plus de vitesse, essayez de diminuer ces réglages.\n" "Un contrôle total sur tous les paramètres est accessible dans\n" "le \"Mode expert\", soit en cliquant sur le bouton à droite\n" "soit en utilisant le menu \"Mode\" dans la barre d'outils du\n" "haut. Vous pouvez revenir dans ce mode à n'importe quel\n" "moment en choisissant \"Mode simple\" dans le menu \"Mode\".\n" "Si vous rencontre des messages d'erreur concernant les\n" "graphismes dans Spring, il pourrait être nécessaire de\n" "désactiver certaines options en mode expert.\n" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "Qualité graphique" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "Détail graphique" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "Résolution de l'écran" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "Passer en mode expert" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr " (actuel)" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" "Définit toutes les options de qualité à des valeurs prédéfinies en fonction " "de votre choix." #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" "Définit toutes les options de détail à des valeurs prédéfinies en fonction " "de votre choix." #: src/springsettings/tab_simple.cpp:99 #, fuzzy msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" "Choisissez la résolution qui convient pour votre écran(s).\n" "Choisir une résolution pour deux écran activera automatiquement le mode deux " "écrans.\n" "Si la résolution appropriée n'est pas accessible vous pouvez la définir " "manuellement en mode expert.\n" "Veuillez aussi contacter l'auteur afin qu'elle soit ajoutée dans les futures " "versions." #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "Info" #: src/springsettings/tab_ui.cpp:37 #, fuzzy msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" "Placer une barre à 0 empêchera cette caméra\n" "d'être sélectionnée pendant le jeu" #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "Vitesse de défilement (clavier et souris)" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "Mode de caméra par défaut" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "Options diverse de l'interface" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "Zoom" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "Unités autorisées" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "Délai de connexion expiré" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "Réponse inconnue du serveur" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" "Echec de la traversée du NAT, cette bataille risque de ne pas fonctionner " "pour vous ou d'autres joueurs." #: src/tdfcontainer.cpp:131 msgid "line " msgstr "ligne " #: src/tdfcontainer.cpp:131 msgid " , column " msgstr " , colonne " #: src/ui.cpp:175 msgid "Server password" msgstr "Mot de passe du serveur" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" "Réussite de l'inscription,\n" "vous devriez maintenant pouvoir vous connecter." #: src/ui.cpp:294 msgid "Registration successful" msgstr "Inscription réussie" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "Echec de l'inscription, la raison était :\n" #: src/ui.cpp:458 msgid "Help error" msgstr "Erreur d'aide" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, fuzzy, c-format msgid "%s commands help." msgstr "Aide sur les commandes de SpringLobby." #: src/ui.cpp:465 msgid "Global commands:" msgstr "Commandes globales :" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr " \"/away\" - Définit votre état comme absent." #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr " \"/back\" - Retire votre état absent." #: src/ui.cpp:468 #, fuzzy msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" " \"/changepassword oldpassword newpassword\" - Change le mot de passe du " "compte actuellement actif." #: src/ui.cpp:469 #, fuzzy msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" " \"/changepassword oldpassword newpassword\" - Change le mot de passe du " "compte actuellement actif." #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr " \"/channels\" - Liste les salles actuellement actives." #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr "" " \"/help [sujet]\" - Ajoutez \"sujet\" si vous voulez obtenir des " "informations plus spécifiques sur une commande." #: src/ui.cpp:472 #, fuzzy msgid " \"/join channel [password]\" - Joins a channel." msgstr "" " \"/join salle [mot de passe] [,salle2 [mot de passe2]]\" - Rejoint une " "salle." #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr " \"/j\" - Raccourcis pour /join." #: src/ui.cpp:474 msgid " \"/ingame\" - Shows how much time you have in game." msgstr " \"/ingame\" - Affiche combien de temps vous avez en jeu." #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" " \"/msg pseudo [texte]\" - Envoie un message privé contenant texte à pseudo." #: src/ui.cpp:476 msgid " \"/part\" - Leaves current channel." msgstr " \"/part\" - Quitte la salle actuelle." #: src/ui.cpp:477 msgid " \"/p\" - Alias to /part." msgstr " \"/p\" - Raccourci pour /part." #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr " \"/rename nouveaunom\" - Change votre pseudo en nouveaunom." #: src/ui.cpp:479 #, fuzzy, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr "" " \"/sayver\" - Dit quelle version de SpringLobby vous utilisez dans le chat." #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr " \"/testmd5 text\" - Retourne le hash md5-b64 du texte donné." #: src/ui.cpp:481 #, fuzzy, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr " \"/ver\" - Affiche quelle version de SpringLobby vous utilisez." #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr " \"/clear\" - Efface tout le texte de la fenêtre actuelle" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "Commandes de chat :" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr " \"/me action\" - Fait une action dans le style d'IRC." #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" "Si vous ne comprenez pas une commande, allez sur #springlobby et essayez de " "la taper ici :)" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "Pas de sujets écrits pour le moment." #: src/ui.cpp:496 msgid "The topic \"" msgstr "Le sujet \"" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "" "\" n'a pas été trouvé. Tapez \"/help sujets\" seulement pour des sujets " "disponibles." #: src/ui.cpp:580 msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" "Impossible de récupérer votre version de Spring depuis la bibliothèque " "unitsync.\n" "\n" "Le jeu en ligne est actuellement désactivé." #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" "Aucune version installée et compatible de spring n'a été trouvée, ce serveur " "nécessite la version : %s\n" #: src/ui.cpp:599 msgid "Online play is currently disabled." msgstr "Le jeu en ligne est actuellement désactivé." #: src/ui.cpp:631 #, fuzzy, c-format msgid "disconnected from server: %s" msgstr "Déconnecté du serveur." #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "aucun onglet de chat ouvert." #: src/ui.cpp:839 #, fuzzy, c-format msgid "%s (%d users)" msgstr "(%d utilisateurs)" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "La partie actuelle a été fermée par l'hôte." #: src/ui.cpp:993 msgid "Battle closed" msgstr "Partie fermée" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" "Vos paramètres de Spring ne sont probablement pas réglés\n" "correctement, vous devriez les vérifier avant de tenter\n" "de jouer en ligne." #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "Erreur de configuration de Spring" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "Le jeu d'options sélectionné nécessite la carte " #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" ". Faut-il la télécharger ? Choisir \"non\" retirera la carte manquante du " "jeu d'options\n" "Merci de resélectionner le jeu d'options après la fin du téléchargement." #: src/ui.cpp:1304 msgid "Map missing" msgstr "Carte manquante" #: src/ui.cpp:1337 #, fuzzy, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" ",\n" "Apparemment c'est la première fois que tu utilises SpringLobby. J'ai deviné " "une configuration qui je pense fonctionnera pour toi mais tu devrais la " "vérifier, particulièrement la configuration de Spring.\n" "\n" "Quand tu auras fini tu pourras aller dans la menu Fichier, se connecter à un " "serveur, et apprécier une bonne partie de Spring :)" #: src/ui.cpp:1340 msgid "Welcome" msgstr "Bienvenue" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "Dois-je essayer d'importer (quelques) réglages de TASClient ?\n" #: src/ui.cpp:1359 msgid "Import settings?" msgstr "Importer les paramètres ?" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Il y a eu une erreur pendant la recherche d'une nouvelle version.\n" "Merci de réessayer plus tard.\n" "Si le problème persiste, merci d'utiliser Aide->Signaler un bogue pour " "rapporter ce bogue." #: src/ui.cpp:1387 msgid "Your Version: " msgstr "Votre Version: " #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "Dernière Version: " #: src/ui.cpp:1392 #, fuzzy, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" "\n" "\n" "Dois-je télécharger la dernière version ? Les changements prendront effet la " "prochaine fois que vous lancerez le lobby." #: src/ui.cpp:1395 msgid "Not up to date" msgstr "Pas à jour" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "Erreur ChanServ" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" "Votre version de SpringLobby n'est pas à jour.\n" "\n" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "Non à jours" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" "\n" "Le chemin d'accès du navigateur est : " #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" "Impossible d'écrire dans le répertoire d'installation.\n" "Vérifiez manuellement ou donnez à l'utilisateur actuel la permission " "d'écrire." #: src/updater/updater.cpp:72 msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Il y a eu une erreur pendant le téléchargement de la dernière version.\n" "Merci de réessayer plus tard.\n" "Si le problème persiste, merci d'utiliser Aide->Signaler un bogue." #: src/updater/updater.cpp:81 #, fuzzy, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" "Il y a eu une erreur en tentant de remplacer la version actuelle de " "l'exécutable.\n" " une copie manuelle est nécessaire depuis : %s\n" " vers : %s\n" "Merci d'utiliser Aide->Signaler un bogue pour rapporter ce bogue." #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, fuzzy, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" "Exécutable mis à jour.\n" "Certains fichiers de traduction n'ont pas pu être mis à jour.\n" "Merci de le signaler sur #springlobby après avoir redémarré." #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "Succès partiel" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 #, fuzzy msgid "the SpringLobby revision to update to" msgstr "" "Votre version de SpringLobby n'est pas à jour.\n" "\n" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "SpringLobby" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 #, fuzzy msgid "Warning" msgstr "Journaliser les avertissements" #: src/user.cpp:83 msgid "away" msgstr "absent" #: src/user.cpp:83 msgid "back" msgstr "de retour" #: src/user.cpp:85 msgid "ingame" msgstr "en jeu" #: src/user.cpp:85 msgid "back from game" msgstr "de retour du jeu" #: src/user.cpp:195 msgid "Newbie" msgstr "Débutant" #: src/user.cpp:196 msgid "Beginner" msgstr "Débutant" #: src/user.cpp:197 msgid "Average" msgstr "Normal" #: src/user.cpp:198 msgid "Above average" msgstr "Au dessus de la moyenne" #: src/user.cpp:199 msgid "Experienced" msgstr "Vétéran" #: src/user.cpp:200 msgid "Highly experienced" msgstr "Très expérimenté" #: src/user.cpp:201 msgid "Veteran" msgstr "Vétéran" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 msgid "Unknown" msgstr "Inconnu" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" "Pour prévenir les problèmes logiques, il n'est pas permis d'ajouter un " "utilisateur à plus d'un seul groupe." #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "Impossible d'ajouter l'utilisateur au groupe." #: src/useractions.h:11 msgid "none" msgstr "aucune" #: src/useractions.h:11 msgid "highlight" msgstr "surligner" #: src/useractions.h:11 msgid "notify login/out" msgstr "avertir de la connexion/déconnexion" #: src/useractions.h:11 msgid "ignore chat" msgstr "ignorer le chat" #: src/useractions.h:11 msgid "ignore pm" msgstr "ignorer les messages privés" #: src/useractions.h:12 msgid "autokick" msgstr "expulsion automatique" #: src/useractions.h:12 msgid "notify hosted battle" msgstr "avertir d'une partie hébergée" #: src/useractions.h:12 msgid "notify status change" msgstr "avertir du changement d'état" #: src/useractions.h:19 msgid "no action at all" msgstr "aucune action" #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" "surligne l'utilisateur dans les listes d'utilisateur et les batailles " "auxquelles il participe" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" "affiche une popup quand l'utilisateur se connecte ou se déconnecte du serveur" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" "ignore les messages privés de ces utilisateurs, aucune fenêtre ne s'ouvrira " "si l'un d'eux tente de vous contacter en privé" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "affiche une popup quand l'utilisateur héberge une nouvelle partie" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "affiche une popup quand l'utilisateur change son statut d'absence" #: src/usermenu.h:31 msgid "Create new group..." msgstr "Créer un nouveau groupe..." #: src/usermenu.h:37 msgid "Add to group..." msgstr "Ajouter à un groupe..." #: src/usermenu.h:38 msgid "Remove from group" msgstr "Retirer du groupe" #: src/utils/controls.h:22 msgid "Choose color" msgstr "Choisissez une couleur" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "Choisissez une couleur (seulement les 16 premiers seront sauvegardées)" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "widgets" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 msgid "Author" msgstr "Auteur" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Games" msgstr "Jeu" #: src/widgets/downloadlistctrl.cpp:31 msgid "Compatible games" msgstr "" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "récupère les infos" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "Mods adaptées" #: src/widgets/infopanel.cpp:74 msgid "Current version" msgstr "Version actuelle" #: src/widgets/infopanel.cpp:79 msgid "# downloaded" msgstr "Nb. de téléchargements" #: src/widgets/infopanel.cpp:84 msgid "Published on" msgstr "Publié le" #: src/widgets/infopanel.cpp:121 msgid "Changelog" msgstr "Changelog" #: src/widgets/infopanel.cpp:126 msgid "Screenshots" msgstr "Captures d'écran" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "Le widget a été installé." #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "Le widget n'a pas été installé." #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "Le widget a été supprimé." #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "Le widget n'a pas été supprimé." #, fuzzy #~ msgid "Settings" #~ msgstr "Sauvegarder les paramètres" #, fuzzy #~ msgid "Help" #~ msgstr "&Aide" #, fuzzy #~ msgid "Faction" #~ msgstr "Action" #~ msgid "Mod" #~ msgstr "Mod" #~ msgid "spectators" #~ msgstr "Spectateurs" #~ msgid "players" #~ msgstr "joueurs" #~ msgid "max" #~ msgstr "max" #~ msgid "Mod:" #~ msgstr "Mod :" #~ msgid "Only mods i have" #~ msgstr "Uniquement les mods que j'ai" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to host a new game" #~ msgstr "" #~ "Spring est déjà lancé, fermez-le afin de pouvoir héberger une nouvelle " #~ "partie." #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to join another battle." #~ msgstr "" #~ "Une instance de Spring est déjà en cours d'exécution, arrêtez-la avant de " #~ "rejoindre une autre bataille." #~ msgid "Do you want me to take you to the download page?" #~ msgstr "Souhaitez-vous que je vous mène sur la page de téléchargement ?" #~ msgid "Mod not available" #~ msgstr "Mod non disponible." #~ msgid "Enter password" #~ msgstr "Saisir un mot de passe" #~ msgid "team" #~ msgstr "Équipe" #~ msgid "ally" #~ msgstr "Alliance" #~ msgid "cpu" #~ msgstr "CPU" #~ msgid "Set name." #~ msgstr "Définissez le nom." #~ msgid "Load a saved set of options." #~ msgstr "Charger des options prédéfinies." #~ msgid "Save..." #~ msgstr "Sauvegarder..." #~ msgid "Delete..." #~ msgstr "Effacer..." #~ msgid "Set default..." #~ msgstr "Définir comme options par défaut..." #~ msgid "Mod Options" #~ msgstr "Options du Mod" #~ msgid "Map Options" #~ msgstr "Options de la carte" #~ msgid "" #~ "Cannot load an options set without a name\n" #~ "Please select one from the list and try again." #~ msgstr "" #~ "Impossible d'effacer un jeu d'options sans son nom.\n" #~ "Merci d'en sélectionner un parmi ceux de la liste et de réessayer." #~ msgid "Disable text appending (workaround for autoscroll)" #~ msgstr "Désactiver l'ajout de texte (workaround pour le scrolling)" #~ msgid "You don't have the mod " #~ msgstr "Mod non installé : " #~ msgid " . Please download it first" #~ msgstr " . Veuillez le télécharger." #~ msgid "Mod unavailable" #~ msgstr "Mod inaccessible" #~ msgid "Hash" #~ msgstr "Empreinte" #~ msgid "unknown hash " #~ msgstr "empreinte inconnue " #~ msgid "Test firewall" #~ msgstr "Tester le pare-feu" #~ msgid "Relay battle to an Autohost" #~ msgstr "Relayer la bataille à un Autohost" #~ msgid "Tab icons" #~ msgstr "Icônes des onglets" #~ msgid "P2P" #~ msgstr "Téléchargement mutualisé" #~ msgid "Total Outgoing: " #~ msgstr "Total sortant : " #~ msgid "Publish new file" #~ msgstr "Publier un fichier" #~ msgid "Search file" #~ msgstr "Chercher le fichier" #~ msgid "Download Lua widgets" #~ msgstr "Télécharger des widgets Lua" #~ msgid "not available" #~ msgstr "non disponible" #~ msgid "seeding" #~ msgstr "en partage" #~ msgid "leeching" #~ msgstr "télécharge" #~ msgid "Status: not connected" #~ msgstr "non connecté" #~ msgid "Status: connected" #~ msgstr "connecté" #~ msgid "Status: throttled or paused (ingame)" #~ msgstr "Etat : ralenti ou pausé (en jeu)" #~ msgid "Status: unknown" #~ msgstr "Etat : inconnu" #~ msgid "Total Outgoing: %.2f KB/s" #~ msgstr "Total sortant : %.2f ko/s" #~ msgid "Total Incoming: %.2f KB/s" #~ msgstr "Total entrant : %.2f ko/s" #~ msgid "&File" #~ msgstr "&Fichier" #~ msgid "Manually &Start Torrent System" #~ msgstr "Démarrer manuellement le système de &torrents" #~ msgid "Manually &Stop Torrent System" #~ msgstr "Arrêter manuellement le système de &torrent" #~ msgid "Which profile do you want to be default?" #~ msgstr "Quel profil voulez-vous sélectionner par défaut ?" #~ msgid "Modname" #~ msgstr "Mod" #~ msgid "" #~ "No compatible installed spring version has been found, this replay " #~ "requires version: %s\n" #~ msgstr "" #~ "Aucune version installée et compatible de spring n'a été trouvée, ce " #~ "replay nécessite la version : %s\n" #~ msgid "" #~ "Download started in the background, please be patient\n" #~ "you will be notified on operation completed." #~ msgstr "" #~ "Téléchargement lancé en tâche de fond, merci de patienter\n" #~ "vous serez averti à la fin de l'opération." #~ msgid "Download started" #~ msgstr "Téléchargement en cours" #~ msgid "You refused a mandatory update, you will be disconnected now." #~ msgstr "" #~ "Vous avez refusé une mise à jour obligatoire, vous allez maintenant être " #~ "déconnecté." #~ msgid "Disconnecting" #~ msgstr "Déconnexion" #~ msgid "Debug" #~ msgstr "Débogage" #~ msgid "SpringSettings (expert mode)" #~ msgstr "SpringSettings (mode expert)" #~ msgid "" #~ "thanks for inviting me in, code to re-use, infrastructure and help in " #~ "general" #~ msgstr "" #~ "merci de m'avoir invité, code à réutiliser, infrastructure et aide en " #~ "général" #~ msgid "" #~ "The application has generated a fatal error and will be terminated\n" #~ "Generating a bug report is not possible\n" #~ "\n" #~ "please enable wxUSE_DEBUGREPORT" #~ msgstr "" #~ "Cette application a généré une erreur fatale et va se terminer.\n" #~ "La génération d'un rapport de bogue n'est pas possible.\n" #~ "Merci d'activer wxUSE_DEBUGREPORT" #~ msgid "Debug Options" #~ msgstr "Options de débogage" #~ msgid "Player" #~ msgstr "Joueur" #~ msgid "Hi " #~ msgstr "Salut " #~ msgid "" #~ "By default SpringLobby reports some usage statistics.\n" #~ "You can disable that on options tab --> General." #~ msgstr "" #~ "Par défaut SpringLobby envoie certaines statistiques.\n" #~ "Vous pouvez le désactiver dans les options, onglet \"Générales\"." #~ msgid "Notice" #~ msgstr "Remarque" #~ msgid "only run update, quit immediately afterwards" #~ msgstr "seulement effectuer la mise à jour, quitter immédiatement ensuite" #~ msgid "Timeout assumed, disconnecting" #~ msgstr "Timeout de la connexion détecté, déconnexion" #~ msgid "numcopies" #~ msgstr "nb. copies" #~ msgid "MB downloaded" #~ msgstr "Mo téléchargés" #~ msgid "MB uploaded" #~ msgstr "Mo envoyés" #~ msgid "status" #~ msgstr "état" #~ msgid "KB/s up" #~ msgstr "ko/s sortant" #~ msgid "KB/s down" #~ msgstr "ko/s entrant" #~ msgid "ETA (s)" #~ msgstr "temps restant estimé (s)" #~ msgid "Filesize (MB)" #~ msgstr "Taille (Mo)" #~ msgid "Torrent system autostart" #~ msgstr "Démarrer le torrent automatiquement" #~ msgid "at lobby connection (default)" #~ msgstr "lors de la connexion" #~ msgid "at lobby start" #~ msgstr "lors du lancement" #~ msgid "manual" #~ msgstr "manuel" #~ msgid "" #~ "Tried all known trackers for torrent system. No connection could be " #~ "established" #~ msgstr "" #~ "Tous les trackers ont été testés. Aucune connexion au système de torrents " #~ "n'a pu être établie." #~ msgid "Torrent system failure" #~ msgstr "Echec du système de torrents" #~ msgid "Type /help in a chat box." #~ msgstr "Tapez /help dans une fenêtre de chat." #~ msgid "" #~ "A connection couldn't be established with the server\n" #~ "Would you like to try again with the same server?\n" #~ "No to switch to next server in the list" #~ msgstr "" #~ "Une connexion au serveur n'a pas pu être établie\n" #~ "Voulez-vous essayer à nouveau avec le même serveur ?\n" #~ "Non pour passer au prochain serveur dans la liste" #~ msgid "Connection failure" #~ msgstr "Echec de la connexion" #~ msgid "Server message" #~ msgstr "Message du serveur" #~ msgid "SpringLobby -- downloading update" #~ msgstr "SpringLobby -- télécharge une mise à jour" #~ msgid "Update complete. The changes will be available next lobby start." #~ msgstr "" #~ "Mise à jour effectuée. Les modifications seront accessibles au prochain " #~ "lancement." springlobby-0.169/po/insert-header.sin0000600000176000000410000000124012105760300021277 0ustar buildbotwww-data00000000000000# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } springlobby-0.169/po/it.po0000600000176000000410000051106712105760300017023 0ustar buildbotwww-data00000000000000# Italian translation for springlobby # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the springlobby package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: springlobby\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2008-07-30 23:29+0000\n" "Last-Translator: Daedalus \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2008-09-20 21:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "" #: src/Helper/imageviewer.cpp:92 #, fuzzy msgid "delete" msgstr "Seleziona" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "Errore" #: src/Helper/imageviewer.cpp:160 #, fuzzy msgid "Choose a filename" msgstr "Scegli in gioco" #: src/Helper/imageviewer.cpp:167 #, fuzzy msgid "File successfully saved" msgstr "" "\n" "salvato correttamente in:\n" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 #, fuzzy msgid "Success" msgstr "Setta l'accesso..." #: src/Helper/imageviewer.cpp:170 #, fuzzy msgid "Couldn't save file" msgstr "Non posso lanciare il browser" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 #, fuzzy msgid "Default" msgstr "default" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" #: src/Helper/wxTranslationHelper.cpp:148 #, fuzzy msgid "Select the language" msgstr "Informazioni del canale" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Accetta i termini" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "Accetti i termini di questa licenza?" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Sì" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "No" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 #, fuzzy msgid "User" msgstr "Zittisci utente" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 #, fuzzy msgid "Channel" msgstr "canale" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Stato:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 #, fuzzy msgid "Minimum rank to join" msgstr "Grado minimo richiesto" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Descrizione" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Descrizione" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Mappa" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 #, fuzzy msgid "Mapname" msgstr "Panama" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "Partita" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "Partita" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Host" #: src/battlelist/battlelistctrl.cpp:60 #, fuzzy msgid "Name of the Host" msgstr "Nome dell'utente" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Spettatori:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "Numero di giocatori" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 #, fuzzy msgid "Players" msgstr "Giocatori" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "Numero di giocatori" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Mappa" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Maximum number of Players that can join" msgstr "Il numero massimo di giocatori permessi in battaglia." #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "Scarica &mappa" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "Scarica &mappa" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Spettatori:" #: src/battlelist/battlelistctrl.cpp:370 #, fuzzy msgid "Active Players:" msgstr "Giocatori" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "Host:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Stato:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Bloccata" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "Privata con password" #: src/battlelist/battlelistfilter.cpp:122 #, fuzzy msgid "Highlighted only" msgstr "Evidenzia" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "Limite di grado" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Descrizione:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Avviata" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Piena" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "Aperta" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Giocatore:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Tutte" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Mappa:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Solo mappe che possiedo" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 #, fuzzy msgid "Game:" msgstr "Partita" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Solo mappe che possiedo" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Spettatore:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "%d" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Giocatori" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 #, fuzzy msgid " Filter " msgstr "File" #: src/battlelist/battlelisttab.cpp:144 #, fuzzy msgid "Activated" msgstr "Avviata" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 #, fuzzy msgid " Battle infos " msgstr "Battaglia chiusa" #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "Nuova partita" #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "Partecipa" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" "Tu non puoi hostare una partita mentre sei offline. Connettiti prima a una " "lobby server." #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "Non online" #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "" "L'host e' disabilitato a causa dell'icompatibilità della versione di Spring " "che stai usando" #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Spring error" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "Già in battaglia" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" "Sei già in battaglia.\n" "Vuoi lasciare la partita corrente per far partire una nuova?" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" "La partecipazione alla battaglia è disabilitato a causa dell'incopatibilità " "della versione di spring che stai usando." #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 msgid "Matchmaker detected" msgstr "" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "Già in battaglia" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "Tu sei già in battaglia.\n" "Vuoi lasciare la battaglia corrente e partecipare ad un'altra?" #: src/battlelist/battlelisttab.cpp:430 msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" #: src/battlelist/battlelisttab.cpp:433 msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "Mappa non disponibile" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "Mappa non disponibile" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "Password della partita" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 #, fuzzy msgid "Edit auto-joined channels" msgstr "Non è stato possibile entrare nel canale " #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "" #: src/channel/channelchooser.cpp:30 #, fuzzy msgid "Find channel:" msgstr "&Entra nel canale..." #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 #, fuzzy msgid "Choose channels to join" msgstr "Nome del canale in cui entrare" #: src/channel/channellistctrl.cpp:30 #, fuzzy msgid "# users" msgstr "Kick l'utente" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "### Sessione chiusa a [" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "" #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "Avvertimento Log" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 #, fuzzy msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" "Non posso aprire il file di log.\n" "Assicurati che non ci sia una protezione in scrittura.\n" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "" #: src/chatpanel.cpp:69 msgid "#" msgstr "" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, fuzzy, c-format msgid "%d users" msgstr "Kick l'utente" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "" #: src/chatpanel.cpp:296 msgid "Send" msgstr "Invia" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr " !! Comando: \"" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "\" parametri: \"" #: src/chatpanel.cpp:717 msgid "channel" msgstr "canale" #: src/chatpanel.cpp:718 msgid "battle" msgstr "battaglia" #: src/chatpanel.cpp:719 msgid "server" msgstr "server" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr " partecipa alla " #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr " lasciato il " #: src/chatpanel.cpp:814 #, fuzzy msgid " ** Channel topic:" msgstr "Informazioni del canale" #: src/chatpanel.cpp:821 #, fuzzy msgid " ** Set by " msgstr "" "\n" " * Settato da " #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "Chat chiusa." #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "Sei sicuro di voler incollare %d linee?" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr " Tu hai springlobby v" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr " Tu non sei nel canale o il canale non esiste." #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" " Errore: Il comando (%s) non esiste. Usa /help per una lista dei comandi " "disponibili." #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr " Utente non in linea." #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr " Inviato: \"" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "" #: src/chatpanel.cpp:1090 #, fuzzy msgid " ** User is now offline." msgstr " Utente non in linea." #: src/chatpanel.cpp:1097 #, fuzzy msgid " ** User just got online." msgstr " Utente non in linea." #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 #, fuzzy msgid " ** Joined Battle." msgstr " partecipa alla " #: src/chatpanelmenu.cpp:34 msgid "Disable text appending" msgstr "" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "Copia" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "Pulisci" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "Esci" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "Informazioni del canale" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "Setta il topic..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "Messaggio sul canale..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "Chiudi..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "Sblocca" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "Registra..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "Annulla registrazione" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "Acceso" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "Disattivato" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "è attivato?" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "Protezione contro lo spam" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "ChanServ" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "Disconnetti" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "Riconnetti" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "Rimuovi..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "Cambia password..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "Setta l'accesso..." #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "Accounts" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "" #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "Amministratore" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "Chat aperta" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "Partecipa alla stessa battaglia" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "Tempo all'interno del gioco" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "Recupera IP e Smurfs" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "Zittisci..." #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "Zittisci per 5 minuti" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "Zittisci per 10minuti" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "Zittisci per 30 minuti" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "Zittisci per 2 ore" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "Zittisci per 1 giorno" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "Togli il mute" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "Mute" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "Kick..." #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "Banna..." #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "Togli il ban" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "Fai uno squillo" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "Op" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "DeOp" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "ChanServ error" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "ChanServ non è in questo canale." #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "Cosa dovrebbe essere il nuovo topic?" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "Messaggio:" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "Chiudi il canale..." #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "Quale dovrebbe essere la nuova password?" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "Sblocca il canale" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "Sei sicuro di voler sbloccare questo canale?" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "ChanServ non è su questo server." #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "Registra il canale" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "Chi dovrebbe essere considerato fondatore di questo canale?" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "Sei sicuro di volere eliminare la registrazione di questo canale?" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "Rimuovi l'account dell'utente" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "Quale user accaunt vuoi rimuovere?" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "Rimuovi account" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "Sei sicuro di rimuovere l'accaunt " #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "Cambia la password" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "Di quale account utente vuoi cambiare la password?" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "Non Implementato" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "Messaggio trasmesso in broadcast" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "Messaggio da trasmettere in broadcast" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "Zittisci utente" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "Per quanti minuti questo utente deve essere zittito?" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "Motivo:" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "Kick l'utente" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "Mute l'utente" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "Durata:" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" #: src/chatpanelmenu.cpp:774 #, fuzzy msgid "couldn't add user" msgstr "Non posso lanciare il browser" #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "Connesso a lobby server" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "Server" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" "Server al quale connettersi. Puoi connetterti a qualsiasi server indicato " "nel formato indirizzo:porta" #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "Nickname" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "Password" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" #: src/connectwindow.cpp:85 #, fuzzy msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" "Nota: se non hai un account,\n" " puoi crearne uno gratuitamente nella\n" "scheda \"Registrati\"." #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "Ok" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Annulla" #: src/connectwindow.cpp:91 msgid "Login" msgstr "Accesso" #: src/connectwindow.cpp:92 msgid "Register" msgstr "Registrati" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "Nick" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "Porta non valida." #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "Porta non valida" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" "Numero di porta fuori limite.\n" "\n" "Deve essere un numero intero tra 1 e 65535" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "" #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "Indirizzo non valido" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" #: src/connectwindow.cpp:294 #, fuzzy msgid "Invalid nickname" msgstr "Numero non valido." #: src/connectwindow.cpp:301 #, fuzzy msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" "Registrazione non riuscita. Il motivo è stato:\n" "Le password non coincidono tra loro" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "Registrazione non riuscita." #: src/countrycodes.cpp:11 msgid " Andorra" msgstr " Andorra" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "Emirati Arabi Uniti" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "Afghanistan" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "Antigua e Barbuda" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "Anguilla" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "Albania" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "Armenia" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "Antille Olandesi" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "Angola" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "Antartide" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "Argentina" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "Samoa Americane" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "Austria" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "Australia" #: src/countrycodes.cpp:25 #, fuzzy msgid "Åland Islands" msgstr "Isole Cayman" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "Aruba" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "Azerbaijan" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "Bosnia-Herzegovina" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "Barbados" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "Bangladesh" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "Belgio" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "Burkina Faso" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "Bulgaria" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "Bahrain" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "Burundi" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "Benin" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "Bermuda" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "Brunei" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "Bolivia" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "Brasile" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "Bahamas" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "Bhutan" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "Isole Bouvet" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "Botswana" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "Bielorussia" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "Belize" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "Canada" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "Repubblica Centroafricana" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "Congo" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "Svizzera" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "Costa D'Avorio" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "Isole Cook" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "Cile" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "Camerun" #: src/countrycodes.cpp:56 msgid "China" msgstr "Cina" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "Colombia" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "Costa Rica" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "Cuba" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "Capo Verde" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "Isola di Natale" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "Cipro" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "Repubblica Ceca" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "Germania" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "Gibuti" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "Danimarca" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "Dominica" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "Repubblica Dominicana" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "Algeria" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "Ecuador" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "Estonia" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "Egitto" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "Sahara occidentale" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "Eritrea" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "Spagna" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "Etiopia" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "Finlandia" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "Fiji" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "Isole Falkland (Malvine)" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "Micronesia" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "Isole Fær Øer" #: src/countrycodes.cpp:82 msgid "France" msgstr "Francia" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "Francia Metropolitana" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "Gabon" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "Grenada" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "Georgia" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "Guiana Francese" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "Ghana" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "Gibilterra" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "Groenlandia" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "Gambia" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "Guinea" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "Guadalupe" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "Guinea Equatoriale" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "Grecia" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "Guatemala" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "Guam" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "Guinea Bissau" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "Guyana" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "Hong Kong" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "Isole Heard e McDonald" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "Honduras" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "Croazia (Hrvatska)" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "Haiti" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "Ungheria" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "Indonesia" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "Irlanda" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "Israele" #: src/countrycodes.cpp:110 msgid "India" msgstr "India" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "Territorio Britannico dell'Oceano Indiano" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "Iraq" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "Iran" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "Islanda" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "Italia" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "Giamaica" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "Giordania" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "Giappone" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "Kenya" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "Cambogia" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "Kiribati" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "San Kitts e Nevis" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "Corea del Nord (Repubblica Popolare)" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "Corea del Sud (Repubblica)" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "Kuwait" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "Isole Cayman" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "Kazakistan" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "Laos" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "Libano" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "Santa Lucia" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "Liechtenstein" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "Sri Lanka" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "Liberia" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "Lesotho" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "Lituania" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "Lussemburgo" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "Lettonia" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "Libia" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "Marocco" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "Monaco" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "Moldavia" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "Montenegro" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "Madagascar" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "Isole Marshall" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "Macedonia" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "Mali" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "Mongolia" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "Macao" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "Isole Marianne Settentrionali" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "Martinica" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "Mauritania" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "Montserrat" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "Malta" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "Mauritius" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "Maldive" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "Malawi" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "Messico" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "Malesia" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "Mozambico" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "Namibia" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "Nuova Caledonia" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "Niger" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "Isole Norfolk" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "Nigeria" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "Nicaragua" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "Olanda" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "Norvegia" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "Nepal" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "Nauru" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "Zona Neutrale (Arabia Saudita/Iraq)" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "Niue" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "Nuova Zelanda" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "Oman" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "Panama" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "Perù" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "Polinesia francese" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "Papua Nuova Guinea" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "Filippine" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "Pakistan" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "Polonia" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "St. Pierre e Miquelon" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "Isole Pitcairn" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "Porto Rico" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "Portogallo" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "Palau" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "Paraguay" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "Qatar" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "Romania" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "Serbia" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "Federazione Russa" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "Ruanda" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "Arabia Saudita" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "Isole Solomon" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "Seychelles" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "Sudan" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "Svezia" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "Singapore" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "Sant'Elena" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "Slovenia" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "Isole Svalbard e Jan Mayen" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "Slovacchia" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "Sierra Leone" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "San Marino" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "Senegal" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "Somalia" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "Suriname" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "El Salvador" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "Siria" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "Swaziland" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "Ciad" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "Territori Francesi Meridionali" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "Togo" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "Thailandia" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "Tagikistan" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "Tokelau" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "Turkmenistan" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "Tunisia" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "Tonga" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "Timor Est" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "Turchia" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "Trinidad e Tobago" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "Tuvalu" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "Taiwan" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "Tanzania" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "Ucraina" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "Uganda" #: src/countrycodes.cpp:234 #, fuzzy msgid "United Kingdom" msgstr "Regno Unito (Gran Bretagna)" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "Isole esterne minori americane" #: src/countrycodes.cpp:236 msgid "United States" msgstr "Stati Uniti" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "Uruguay" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "Uzbekistan" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "Stato della Città del Vaticano (Santa Sede)" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "Venezuela" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "Isole Vergini (UK)" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "Isole Vergini (US)" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "Vietnam" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "Vanuatu" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "Isole Wallis e Fortuna" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "Samoa" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "Yemen" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "Mayotte" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "Yugoslavia" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "Sud Africa" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "Zambia" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "Zaire" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "Zimbabwe" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "(Nome completo della nazione non trovato)" #: src/crashreport.cpp:168 msgid "System informations" msgstr "Informazioni di sistema" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "Log esteso dell'applicazione" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "Ultimo script di avvio di spring generato" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "Nessuna mappa trovata" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "Scarica" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "Nessun mod selezionato." #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 #, fuzzy msgid "Name" msgstr "Partita" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "Dimensione" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Mappa" #: src/downloader/filelister/filelistctrl.cpp:174 #, fuzzy msgid "game" msgstr "Nickname" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "sconosciuto" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:55 #, fuzzy msgid "Download selected" msgstr "Nessun mod selezionato." #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Nickname:" #: src/downloader/filelister/filelistfilter.cpp:69 #, fuzzy msgid "Filetype:" msgstr "File" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" "\n" "salvato correttamente in:\n" #: src/downloader/httpdownloader.cpp:78 #, fuzzy msgid "" "\n" "successfully unzipped in:\n" msgstr "" "\n" "salvato correttamente in:\n" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" "\n" "a:\n" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "Nessun mod selezionato." #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "Aggiungi bot" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Nickname:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "IA" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "Scegli la libreria IA da utilizzare con questo bot" #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 #, fuzzy msgid "value" msgstr "Valore" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "Aggiungi Bot" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "Nessuna IA trovata nella tua installazione di Spring" #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "Nessuna libreria bot è stata trovata" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "Bilancia automaticamente le squadre" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "Dividi equamente i ranghi" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Casuale" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Nessuno" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" "Colloca membri dello stesso clan (utenti che hanno lo stesso tag, come " "'[smurfzor]Alice' and '[smurfzor]Bob') nella stessa alleanza insieme. \n" "Nessuno: Niente di speciale per i clan.\n" "Leale: colloca i membri di un clan come alleati, a meno che questo non " "squilibri le squadre.\n" "Sempre: colloca sempre i membri di un clan nella stessa alleanza, anche se " "dovesse squilibrare le squadre." #: src/hosting/autobalancedialog.cpp:53 #, fuzzy msgid "Number of allies" msgstr "Numero di giocatori" #: src/hosting/autobalancedialog.cpp:56 #, fuzzy msgid "Auto select" msgstr "Riconnetti" #: src/hosting/battlemaptab.cpp:69 #, fuzzy msgid "Select" msgstr "Seleziona..." #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "Opzione" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "Valore" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "Velocità del vento" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "Forza delle maree" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "Gravità" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "Raggio degli estrattori" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "Metallo massimo" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "Fisso" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "Scegli in gioco" #: src/hosting/battlemaptab.cpp:103 #, fuzzy msgid "Chose before game" msgstr "Scegli in gioco" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "Posizioni di partenza" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "Restrizioni unità" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "Unità permesse" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "Le unità in questa lista saranno disponibili in gioco." #: src/hosting/battleoptionstab.cpp:77 #, fuzzy msgid "Disable selected units." msgstr "Abilita tutte le unità." #: src/hosting/battleoptionstab.cpp:81 #, fuzzy msgid "Re-enable selected units." msgstr "Abilita tutte le unità." #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "Abilita tutte le unità." #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "Restrizioni unità" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "Le unità in questa lista non saranno disponibili in gioco." #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "" #: src/hosting/battleoptionstab.cpp:242 #, fuzzy msgid "Unit restriction" msgstr "Restrizioni unità" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "Squadra" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "Allineamento" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "Bonus risorse" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "Fazione" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "Settaggio colori" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "Settaggio Risorse Bonus" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "Spettatore" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "Kick" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "Inserisci a valore tra 0 e 100" #: src/hosting/battleroomlistctrl.cpp:750 #, fuzzy msgid "AI (bot)\n" msgstr "Aggiungi bot" #: src/hosting/battleroomlistctrl.cpp:754 #, fuzzy msgid "Human\n" msgstr "Oman" #: src/hosting/battleroomlistctrl.cpp:759 #, fuzzy msgid "Spectator\n" msgstr "Spettatore" #: src/hosting/battleroomlistctrl.cpp:763 #, fuzzy msgid "Player\n" msgstr "Giocatore:" #: src/hosting/battleroomlistctrl.cpp:768 #, fuzzy msgid "Host\n" msgstr "Host" #: src/hosting/battleroomlistctrl.cpp:772 #, fuzzy msgid "Client\n" msgstr "Client" #: src/hosting/battleroomlistctrl.cpp:777 msgid "Ready\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:781 #, fuzzy msgid "Not ready\n" msgstr "Non pronto" #: src/hosting/battleroomlistctrl.cpp:786 #, fuzzy msgid "In sync" msgstr "Abilita V-Sync" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "" #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "" #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "Riconnetti" #: src/hosting/battleroomtab.cpp:144 msgid "automatically unspec when there's a free slot" msgstr "" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "Sono pronto" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "" #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "Colore" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Nuova partita" #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Crea nuova battaglia" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "Avvio" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "Aggiungi bot..." #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Descrizione" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 #, fuzzy msgid "AutoSpect" msgstr "Riconnetti" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Avvio" #: src/hosting/battleroomtab.cpp:209 msgid "Automatically start the battle when all players are ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 #, fuzzy msgid "Ring unsynced" msgstr "Abilita V-Sync" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 #, fuzzy msgid "Ring ..." msgstr "Fai uno squillo" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "Non pronto" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 msgid "Force spectate ..." msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "" #: src/hosting/battleroomtab.cpp:255 #, fuzzy msgid "Save" msgstr "Salva..." #: src/hosting/battleroomtab.cpp:256 #, fuzzy msgid "Save a set of options." msgstr "Salva un set di restrizioni." #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 #, fuzzy msgid "Delete" msgstr "Seleziona" #: src/hosting/battleroomtab.cpp:261 #, fuzzy msgid "Delete a set of options." msgstr "Salva un set di restrizioni." #: src/hosting/battleroomtab.cpp:265 #, fuzzy msgid "Set default" msgstr "default" #: src/hosting/battleroomtab.cpp:266 msgid "Use the current set of options as game's default." msgstr "" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "" #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 #, fuzzy msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" "Alcuni giocatori non sono pronti.\n" "Vuoi fare uno squillo a questi giocatori." #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "Non pronto" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "Scegli in gioco" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Descrizione" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "default" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "errore" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 #, fuzzy msgid "Delete preset" msgstr "Seleziona" #: src/hosting/battleroomtab.cpp:996 #, fuzzy msgid "Set game default preset" msgstr "default" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "Crea nuova battaglia" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "" "Una breve descrizione della partita, che comparirà nella lista battaglie." #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Descrizione" #: src/hosting/hostbattledialog.cpp:91 msgid "Automatically write the battle description when a user joins." msgstr "" #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "Seleziona il mod con il quale giocare." #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "Privata con password" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "" "E' richiesta una password per partecipare. Lascia vuoto per non inserire " "password." #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "Porta" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "Porta UDP sulla quale ospitare la partita. La predefinita è 8452." #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 #, fuzzy msgid "Randomly picks an available one" msgstr "Nessun mod disponibile" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "Numero di giocatori" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "Il numero massimo di giocatori permessi in battaglia." #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "NAT traversal" #: src/hosting/hostbattledialog.cpp:185 #, fuzzy msgid "NAT traversal to use." msgstr "NAT traversal" #: src/hosting/hostbattledialog.cpp:190 msgid "Rank requirement" msgstr "" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 #, fuzzy msgid "Select the type of rank enforcement." msgstr "Seleziona il mod con il quale giocare." #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "Comincia ad ospitare la battaglia." #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 #, fuzzy msgid "You have to select a game first." msgstr "Devi prima selezionare un mod." #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "Nessun mod selezionato." #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" #: src/hosting/hostbattledialog.cpp:427 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:459 #, fuzzy msgid "Battle not started beacuse the game you selected could not be found. " msgstr "" "La battaglia non è iniziata perchè il mod che hai selezionato non e' stato " "rilevato " #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "Errore all'apertura della partita." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" "Non posso trovare nessuna mappa nella directory di Spring. Questo puo' " "succedere se Spring non è settato correttamente." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "Nessuna mappa trovata" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "Opzioni" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 #, fuzzy msgid "Unit Restrictions" msgstr "Restrizioni unità" #: src/hosting/mmoptionwindows.cpp:36 #, fuzzy msgid "Change option" msgstr "Opzioni interfaccia utente" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "" #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "" #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "" #: src/iconimagelist.cpp:322 #, fuzzy msgid "Game is closed." msgstr "Chat chiusa." #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "" #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "" #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "" #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "" #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "" #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "" #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "" #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "" #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "" #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "" #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 msgid "Newbies guide" msgstr "" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 #, fuzzy msgid "Joining a battle:\n" msgstr "Partecipa alla stessa battaglia" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "Crea nuova battaglia" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Spring error" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 msgid "Singleplayer gamee" msgstr "" #: src/introguide.cpp:110 msgid "Multiplayer gamee" msgstr "" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "Tutti i Files (*)|*" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 #, fuzzy msgid "Disconnected from server, chat closed." msgstr "Risposta sconosciuta dal server" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "" #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "Ricevuti in totale: " #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "&Connetti..." #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "&Disconnetti" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 #, fuzzy msgid "&Save options" msgstr "Opzioni interfaccia utente" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "&Esci" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "Non è stato possibile entrare nel canale " #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "Errore nelle impostazioni di Spring" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "Opzioni interfaccia utente" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "&Entra nel canale..." #: src/mainwindow.cpp:164 #, fuzzy msgid "Channel &list" msgstr "Informazioni del canale" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "Apri &chat privata" #: src/mainwindow.cpp:166 #, fuzzy msgid "Change &username" msgstr "Informazioni del canale" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "" #: src/mainwindow.cpp:169 #, fuzzy msgid "&Reload maps/games" msgstr "&Ricarica mappe/mods" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "Controlla nuove Versioni" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "&Informazioni su" #: src/mainwindow.cpp:178 #, fuzzy msgid "&System Info" msgstr "Informazioni di sistema" #: src/mainwindow.cpp:179 #, fuzzy msgid "&Change language" msgstr "Informazioni del canale" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "&Segnala Bug..." #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "&Documentazione" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "Server" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "&Modifica" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "&Strumenti" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "&Aiuto" #: src/mainwindow.cpp:500 msgid "You need to be connected to a server to view the channel list" msgstr "" #: src/mainwindow.cpp:500 #, fuzzy msgid "Not connected" msgstr "Riconnetti" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "&Entra nel canale..." #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "Nome del canale in cui entrare" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "Apri Chat Privata..." #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "Nome dell'utente" #: src/mainwindow.cpp:540 #, fuzzy, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" "SpringLobby è un lobby client multipiattaforma per il motore RTS Spring" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 #, fuzzy msgid "No files found" msgstr "Nessuna mappa trovata" #: src/mainwindow.cpp:656 #, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "" #: src/mainwindow.cpp:692 #, fuzzy msgid "This profile is write protected, please choose another name" msgstr "La partita è protetta da password, per entrare inseriscila." #: src/mainwindow.cpp:703 #, fuzzy msgid "Which profile do you want to load?" msgstr "Quale user accaunt vuoi rimuovere?" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "Rimuovi..." #: src/mainwindow.cpp:767 msgid "Enter new nickname" msgstr "" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "Chat" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "Battaglia chiusa" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "" #: src/mainwindow.h:203 msgid "Replays" msgstr "" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 #, fuzzy msgid "Downloads" msgstr "Scarica" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "Aggiorna" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "Scarica" #: src/mapctrl.cpp:897 msgid "side:" msgstr "Fazione:" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "alleato: %d" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "bonus: %d%%" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 #, fuzzy msgid "Show" msgstr "Mostra tutto" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" #: src/mapselectdialog.cpp:95 #, fuzzy msgid "Filter" msgstr "File" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" #: src/mapselectdialog.cpp:100 #, fuzzy msgid "Map details" msgstr "Metallo massimo" #: src/mapselectdialog.cpp:163 #, fuzzy msgid "Start positions" msgstr "Posizioni di partenza" #: src/mapselectdialog.cpp:261 #, fuzzy msgid "Minimum wind" msgstr "Grado minimo richiesto" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "" #: src/mapselectdialog.cpp:263 msgid "Average wind" msgstr "" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "" #: src/mapselectdialog.cpp:265 #, fuzzy msgid "Aspect ratio" msgstr "Spettatore" #: src/mapselectdialog.cpp:266 #, fuzzy msgid "Number of start positions" msgstr "Posizioni di partenza" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "" #: src/mmoptionswrapper.cpp:122 msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "Scegli in gioco" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "Scegli in gioco" #: src/mmoptionswrapper.cpp:132 #, fuzzy msgid "List of restricted units" msgstr "Restrizioni unità" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "s" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "Eseguibile (*.exe)|*.exe|Tutti i Files (*.*)|*.*" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "Colori e fonts" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "Usa colori di sistema" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "Normale" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "Sfondo" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "Azione" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "Evidenzia" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "Partecipa/Lascia" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "I miei messaggi" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "Client" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "Marcatempo" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "Notifica" #: src/options/chatoptionstab.cpp:258 #, fuzzy msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" "[19:35] ** Server ** Connected to TAS Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "Font:" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "default" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "Seleziona..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "Comportamento" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "" #: src/options/chatoptionstab.cpp:300 #, fuzzy msgid "Copy server messages in current channel" msgstr " \"/channels\" - Elenca i canali al momento attivi" #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "Chat logs" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "Salva i chat logs" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "Evidenzia parole" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "Parole da evidenziare nella chat:" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "" #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "Ferma tutti i torrents" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 #, fuzzy msgid "Remove" msgstr "Rimuovi..." #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:61 #, fuzzy msgid "Rename.." msgstr "Rimuovi..." #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:70 #, fuzzy msgid "Add New.." msgstr "Aggiungi bot..." #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "" #: src/options/groupoptionspanel.cpp:84 #, fuzzy msgid "Group Actions" msgstr "Azione" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "" #: src/options/groupoptionspanel.cpp:95 #, fuzzy msgid "Ignore Chat" msgstr "Chat aperta" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:101 #, fuzzy msgid "Notify Hosted Battles" msgstr "Crea nuova battaglia" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:134 #, fuzzy msgid "Highlight Color" msgstr "Evidenzia parole" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "" #: src/options/groupoptionspanel.cpp:163 #, fuzzy msgid "Add.." msgstr "Aggiungi bot..." #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "" #: src/options/groupoptionspanel.cpp:170 #, fuzzy msgid "Remove users from group" msgstr "Rimuovi l'account dell'utente" #: src/options/groupoptionspanel.cpp:264 #, fuzzy msgid "Name of new group:" msgstr "Nome dell'utente" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "Browser web" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "Browser predefinito." #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "Sfoglia" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 msgid "Use a file dialog to find the editor binary" msgstr "" #: src/options/lobbyoptionstab.cpp:91 #, fuzzy msgid "Autoconnect" msgstr "Riconnetti" #: src/options/lobbyoptionstab.cpp:94 #, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" #: src/options/lobbyoptionstab.cpp:96 #, fuzzy msgid "Autoconnect on lobby start" msgstr "Connesso a lobby server" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:104 #, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "" #: src/options/lobbyoptionstab.cpp:120 #, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "" #: src/options/lobbyoptionstab.cpp:130 #, fuzzy msgid "Tooltips" msgstr "&Strumenti" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "" #: src/options/lobbyoptionstab.cpp:134 #, c-format msgid "Requires %s restart to take effect." msgstr "" #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "Notifica" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 msgid "Display time for popup notifications in seconds" msgstr "" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 #, fuzzy msgid "Start tab" msgstr "Metallo di partenza" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "" #: src/options/lobbyoptionstab.cpp:282 msgid "Choose a editor browser executable" msgstr "" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "Spring" #: src/options/mainoptionstab.cpp:73 #, fuzzy msgid "General" msgstr "Senegal" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "Ripristina" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "Applica" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "Eseguibile Spring" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "Posizione" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "Cerca" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "libreria UnitSync" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "Configurazione automatica" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "Libreria" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "Qualsiasi file" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 msgid "Reloading unitsync" msgstr "" #: src/options/springoptionstab.cpp:315 #, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" #: src/playback/playbackfilter.cpp:60 #, fuzzy msgid "Filter settings" msgstr "Salva impostazioni" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Solo mappe che possiedo" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "" #: src/playback/playbackfilter.cpp:190 #, fuzzy msgid "Duration (hh:mm:ss):" msgstr "Durata:" #: src/playback/playbacklistctrl.cpp:42 #, fuzzy msgid "Date" msgstr "Seleziona" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Setta l'accesso..." #: src/playback/playbacklistctrl.cpp:46 #, fuzzy msgid "Duration" msgstr "Durata:" #: src/playback/playbacklistctrl.cpp:47 #, fuzzy msgid "Spring Version" msgstr "Spring error" #: src/playback/playbacklistctrl.cpp:48 #, fuzzy msgid "Filesize" msgstr "File" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "File" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "Scarica m&od" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "Caricamento..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "Giocatori" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "savegame" msgstr "Salva..." #: src/playback/playbacktab.cpp:288 #, fuzzy msgid "Couldn't get your spring versions from any unitsync library." msgstr "" "Non posso prendere dalla tua versione di spring la libreria unitssync.\n" "Il gioco online sarà disabilitato." #: src/playback/playbacktab.cpp:306 #, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" #: src/playback/playbacktab.cpp:323 msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" #: src/playback/playbacktab.cpp:356 #, fuzzy msgid "Invalid replay" msgstr "Porta non valida" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "Sei stato allontanato dalla battaglia!" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "Espulso dall'host" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr "" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr "" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 #, fuzzy msgid "There was an error downloading for the latest version.\n" msgstr "" "C'è stato un errore nel cercare l'ultima versione.\n" "Per favore riprova più tardi.\n" "Se il problema persiste, vai su Aiuto->Segnala Bug per segnalare questo bug." #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "Notifica" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "Numero non valido." #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 msgid "File doesn't exit" msgstr "" #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Avviata" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "Riconnetti" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 #, fuzzy msgid "Unknown Error" msgstr "sconosciuto" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "" #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 #, fuzzy msgid "Download complete." msgstr "Nessun mod selezionato." #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 #, fuzzy msgid "Couldn't launch installer." msgstr "Non posso lanciare il browser" #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "Riconnetti" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "Riconnetti" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 msgid "Tries to connect to the next server in the list." msgstr "" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 msgid "Do nothing" msgstr "" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "" #: src/selectusersdialog.h:67 #, fuzzy msgid "Select Users" msgstr "Seleziona" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 #, fuzzy msgid " is online" msgstr " Utente non in linea." #: src/serverevents.cpp:165 msgid " is now " msgstr "" #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "" #: src/serverevents.cpp:224 #, fuzzy msgid " just went offline" msgstr " Utente non in linea." #: src/serverevents.cpp:259 #, fuzzy msgid " opened battle " msgstr " partecipa alla " #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "Ingresso nel canale fallito" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "Non è stato possibile entrare nel canale " #: src/serverevents.cpp:583 msgid " because: " msgstr " poiché: " #: src/serverevents.cpp:826 msgid "Server Message" msgstr "Messaggio del Server" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr " ha ip:=%s" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr " in realtà non supporta NAT traversal" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "" #: src/serverevents.cpp:928 #, c-format msgid "%s mutelist" msgstr "" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "" #: src/serverevents.cpp:984 #, fuzzy msgid "Download update" msgstr "Scarica &mappa" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 msgid "Automatically moved to new battle" msgstr "" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "Aggiungi bot..." #: src/singleplayertab.cpp:99 #, fuzzy msgid "Spectate only" msgstr "Spettatore" #: src/singleplayertab.cpp:102 #, fuzzy msgid "Random start positions" msgstr "Posizioni di partenza" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "-- Seleziona --" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 #, fuzzy msgid "Game setup error" msgstr "Errore nella configurazione del gioco" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "Devi prima selezionare una mappa." #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "Nessun bot aggiunto" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "" "Non puoi avviare una istanza di Spring mentre ce n'è un'altra già in " "esecuzione." #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 #, fuzzy msgid "Coulnd't load required unitsync library" msgstr "Scegli una libreria unitsync" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 #, fuzzy msgid "Fatal error" msgstr "Errore critico" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "Errore critico" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 #, fuzzy msgid "Ignore chat" msgstr "Chat aperta" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 msgid "Battle Autokick" msgstr "" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 #, fuzzy msgid "Friends" msgstr "Cerca" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" "Valori alti = ombre graficamente migliori\n" "valori possibili: 1024, 2048, 4096, 8192" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "" #: src/springsettings/ctrlconstants.h:229 msgid "Terrain detail" msgstr "Dettaglio del terreno" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "Valori alti = maggiori dettagli del terreno" #: src/springsettings/ctrlconstants.h:230 msgid "Unit LOD distance" msgstr "" #: src/springsettings/ctrlconstants.h:230 #, fuzzy msgid "higher value = units will remain detailed even when zooming out" msgstr "Valori alti = maggiori dettagli delle unità" #: src/springsettings/ctrlconstants.h:231 msgid "Grass detail" msgstr "Dettaglio erba" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "higher value = more detailed grass" msgstr "Valori alti = maggiori dettagli dell'erba" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "Numero massimo di particelle simultanee" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "Limita il numero di particelle visibili nello stesso tempo" #: src/springsettings/ctrlconstants.h:236 #, fuzzy msgid "Max nano simultaneous particles" msgstr "Numero massimo di particelle simultanee" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "Schermo intero" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "Modalità Dual-screen" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "Sei hai due monitors puoi usarli entrambi" #: src/springsettings/ctrlconstants.h:245 #, fuzzy msgid "Enable v-sync" msgstr "Abilita V-Sync" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "alloggiamento" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:259 #, fuzzy msgid "Full-scene anti-aliasing samples" msgstr "quanto antialias dov" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "quanto antialias dov" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "Numero massimo suoni simultanei" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" "Numero massimo di suoni differenti riprodotti simultaneamente\n" "Imposta questo valore a 0 per disabilitare completamente il suono." #: src/springsettings/ctrlconstants.h:273 #, fuzzy msgid "Master sound volume" msgstr "Volume del suono globale" #: src/springsettings/ctrlconstants.h:273 #, fuzzy msgid "master sound volume" msgstr "Volume del suono globale" #: src/springsettings/ctrlconstants.h:274 #, fuzzy msgid "General sound volume" msgstr "Volume del suono globale" #: src/springsettings/ctrlconstants.h:274 #, fuzzy msgid "general volume relative to master volume" msgstr "Volume delle risposte relativo al volume globale" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "Volume delle risposte delle unità" #: src/springsettings/ctrlconstants.h:275 #, fuzzy msgid "reply volume relative to master volume" msgstr "Volume delle risposte relativo al volume globale" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "Battle volume" msgstr "Battaglia chiusa" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "battle volume relative to global volume" msgstr "Volume delle risposte relativo al volume globale" #: src/springsettings/ctrlconstants.h:277 #, fuzzy msgid "User interface volume" msgstr "Volume delle risposte delle unità" #: src/springsettings/ctrlconstants.h:277 #, fuzzy msgid "ui volume relative to global volume" msgstr "Volume delle risposte relativo al volume globale" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "Ombre (lento)" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "Vuoi abilitare le ombre?" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "Alberi 3D" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" "Vuoi alberi graficamente migliori?\n" "Richiede una scheda video della serie Geforce 2/Radeon 8500/Intel 830 o più " "recente" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "Nuvole ad alta risoluzione" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" "Vuoi un cielo graficamente migliore?\n" "Richiede una scheda video della serie Geforce 5/Radeon 9500/Intel 915 o più " "recente" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "Ombre dinamiche (lento)" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "vuoi nuvole mobili nel cielo?" #: src/springsettings/ctrlconstants.h:291 msgid "Reflective units" msgstr "Unità riflettenti" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" "Unità splendenti?\n" "Richiede una scheda video di classe Geforce 5/Radeon 9500/Intel 915 o " "superiore" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "Problemi con mappe in formato sm3? Attiva questo." #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "Attiva supporto LuaShaders" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 #, fuzzy msgid "High-resolution LOS textures" msgstr "Nuvole ad alta risoluzione" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:306 #, fuzzy msgid "Issue commands on mini-map" msgstr "Mostra comandi sulla minimappa" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "" #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "Mostra comandi sulla minimappa" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "Il valore predefinito è \"sì\"" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "Disegna icone sulla minimappa" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "Disegna marcatori sulla minimappa" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "Minimappa a sinistra (schermo singolo)" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 msgid "left is the default" msgstr "La posizione predefinita è a sinistra" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "Minimappa a sinistra (doppio schermo)" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "Colori mini-mappa semplificati" #: src/springsettings/ctrlconstants.h:312 msgid "Use less colors" msgstr "Usa meno colori" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "Nanospray colore squadra" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "Le nanoparticelle dovrebbero avere il colore della tua squadra?" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "Mostra orologio nel gioco" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" "richiede \"Attiva LuaWidgets\" per funzionare.\n" "Comparirà nell'angolo in basso a destra." #: src/springsettings/ctrlconstants.h:320 msgid "Show in-game player information" msgstr "Mostra informazioni sul giocatore nel gioco" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "Mostra FPS nel gioco" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "Correggi il rendering quando si preme ALT+TAB" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "Non cambiare a meno che non sia necessario" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "Non consentire aiuto dell'IA" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" "Disattiva Economy AI, ecc.\n" "Se attivato potrebbe entrare in conflitto con LuaUI." #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "Attiva scorrimento sui bordi della finestra" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "Scorri lo schermo quando il mouse raggiunge il bordo della finestra." #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "Inverti Mouse" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "Inverti l'asse Y del mouse quando si è in modalità FPS" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "Telecamera dall'alto" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "Telecamera dall'alto roteabile." #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "Telecamera Total War" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "Telecamera in prima persona" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "Telecamera libera" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" "Rendi la visuale predefinita quando viene avviato Spring.\n" "Può essere cambiata durante il gioco." #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "" #: src/springsettings/ctrlconstants.h:362 #, fuzzy msgid "How much information should be outputted?" msgstr "quanto antialias dov" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "Base" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" "A seconda della potenza della tua scheda video,\n" "la scelta di una qualità più alta di quella base può\n" "avere un impatto pesante sulle prestazioni di Spring.\n" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective" msgstr "Riflettente" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "Riflettente + rifrangente" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "Dinamico" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "Inverti l'asse Y del mouse" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "Supporto mouse a 3 tasti nella mini-mappa" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "Dall'alto" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "Telecamera fissa a vista d'uccello" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "Dall'alto roteabile" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "Come la telecamera dall'alto, ma si può ruotare sull'asse Z" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "Total War" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "Telecamera dall'alto, che può essere ruotata sull'asse X" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "Prima persona" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "Telecamera dal punto di vista dell'unità" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "larghezza dello schermo" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "altezza dello schermo" #: src/springsettings/ctrlconstants.h:415 #, fuzzy msgid "Blur reflection" msgstr "Riflettente" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 #, fuzzy msgid "Shore waves" msgstr "Vuoi abilitare le ombre?" #: src/springsettings/ctrlconstants.h:417 #, fuzzy msgid "Enables shorewaves" msgstr "Vuoi abilitare le ombre?" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "Riflettente" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 #, fuzzy msgid "Reflection texture size" msgstr "Riflettente" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "Durata:" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 #, fuzzy msgid "off" msgstr "Disattivato" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "Opzioni combinate" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "Opzioni interfaccia utente" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "Audio" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "Errore!" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "Salvare le impostazioni di Spring prima di uscire?" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "Conferma necessaria" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "Salva impostazioni" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "Esci" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "Semplice (poche opzioni)" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "Esperto (tutte le opzioni)" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "Informazioni su" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "Contatta" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "Riconoscimenti" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "Segnala un bug" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "Modalità" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "Informazioni/Aiuto" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "Vuoi reimpostare TUTTE le impostazioni al loro valore predefinito?" #: src/springsettings/frame.cpp:315 msgid "(simple mode)" msgstr "" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "Suggerimento" #: src/springsettings/frame.cpp:367 #, fuzzy msgid "(expert mode)" msgstr "Passa alla modalità esperto" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "Il team SpringLobby" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "Porta non valida" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 msgid "Hotkey Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 #, fuzzy msgid "Enter new command:" msgstr "Comandi di chat:" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 #, fuzzy msgid "Hotkey SaveSettings error" msgstr "Errore nelle impostazioni di Spring" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "Nessuna mappa trovata" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "Percorso per la libreria condivisa unitsync" #: src/springsettings/panel_pathoption.cpp:34 msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "Usa questo percorso" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "\"libunitsync.so\" su Linux, \"unitsync.dll\" su Windows" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "Impostazioni percorsi" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "Scegli una libreria unitsync" #: src/springsettings/panel_pathoption.cpp:96 msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "basso" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "Medio" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "alto" #: src/springsettings/presets.h:45 msgid "very low" msgstr "molto basso" #: src/springsettings/presets.h:45 msgid "very high" msgstr "molto alto" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "Non posso lanciare il browser predefinito" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "Non posso lanciare il browser" #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "Non posso salvare, unitsync non è stato caricato correttamente" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "Opzioni Audio" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "Risoluzione dello Schermo" #: src/springsettings/tab_quality_video.cpp:166 msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "Qualità dell'Acqua" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "Risoluzione in bit" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "Opzioni Modalità Video" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "Opzioni di Anti-Aliasing" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "" #: src/springsettings/tab_simple.cpp:40 msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "Qualità grafica" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "Dettagli grafici" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "Risoluzione schermo" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "Passa alla modalità esperto" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr " (attuale)" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:99 msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "Informazioni" #: src/springsettings/tab_ui.cpp:37 msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "Ingrandimento" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "Unità permesse" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "Connessione scaduta" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "Risposta sconosciuta dal server" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" #: src/tdfcontainer.cpp:131 msgid "line " msgstr "" #: src/tdfcontainer.cpp:131 msgid " , column " msgstr "" #: src/ui.cpp:175 msgid "Server password" msgstr "Password del server" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" "Registrazione avvenuta con successo,\n" "ora dovresti riuscire ad autenticarti." #: src/ui.cpp:294 msgid "Registration successful" msgstr "Registrazione avvenuta con successo." #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "Registrazione non riuscita. Il motivo è stato:\n" #: src/ui.cpp:458 msgid "Help error" msgstr "" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, c-format msgid "%s commands help." msgstr "" #: src/ui.cpp:465 msgid "Global commands:" msgstr "" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr " \"/away\" - Imposta il tuo stato come \"non al computer\"." #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr "" #: src/ui.cpp:468 msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" #: src/ui.cpp:469 msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr " \"/channels\" - Elenca i canali al momento attivi" #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr "" " \"/help [comando]\" - Scrivi un comando se vuoi avere informazioni più " "specifiche su di esso." #: src/ui.cpp:472 #, fuzzy msgid " \"/join channel [password]\" - Joins a channel." msgstr " \"/channels\" - Elenca i canali al momento attivi" #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr " \"/j\" - Sinonimo di /join" #: src/ui.cpp:474 msgid " \"/ingame\" - Shows how much time you have in game." msgstr "" #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" #: src/ui.cpp:476 #, fuzzy msgid " \"/part\" - Leaves current channel." msgstr " \"/channels\" - Elenca i canali al momento attivi" #: src/ui.cpp:477 #, fuzzy msgid " \"/p\" - Alias to /part." msgstr " \"/j\" - Sinonimo di /join" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr "" #: src/ui.cpp:479 #, fuzzy, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr "" " \"/sayver\" - Comunica in chat la versione di springlobby che stai usando." #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr "" #: src/ui.cpp:481 #, fuzzy, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr " \"/ver\" - Mostra la versione di SpringLobby in uso" #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "Comandi di chat:" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr " \"/me azione\" - Manda un messaggio di azione in stile IRC" #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "Nessun topic scritto finora." #: src/ui.cpp:496 msgid "The topic \"" msgstr "il topic \"" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "" "\" non è stato trovato. Digita \"/help topics\" solo per i topic disponibili" #: src/ui.cpp:580 #, fuzzy msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" "Non posso prendere dalla tua versione di spring la libreria unitssync.\n" "Il gioco online sarà disabilitato." #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" #: src/ui.cpp:599 #, fuzzy msgid "Online play is currently disabled." msgstr "Il gioco onlie sarà disabilitato." #: src/ui.cpp:631 #, fuzzy, c-format msgid "disconnected from server: %s" msgstr "Risposta sconosciuta dal server" #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "" #: src/ui.cpp:839 #, fuzzy, c-format msgid "%s (%d users)" msgstr "Kick l'utente" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "La battaglia attuale è stata chiusa dall'host." #: src/ui.cpp:993 msgid "Battle closed" msgstr "Battaglia chiusa" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" "Probabilmente le tue impostazioni di Spring non sono configurate " "correttamente,\n" "dovresti controllare meglio le tue impostazioni prima di provare\n" "a giocare online." #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "Errore nelle impostazioni di Spring" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "" #: src/ui.cpp:1337 #, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" #: src/ui.cpp:1340 msgid "Welcome" msgstr "Benvenuto" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 #, fuzzy msgid "Import settings?" msgstr "Impostazioni percorsi" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "C'è stato un errore nel cercare l'ultima versione.\n" "Per favore riprova più tardi.\n" "Se il problema persiste, vai su Aiuto->Segnala Bug per segnalare questo bug." #: src/ui.cpp:1387 msgid "Your Version: " msgstr "La tua versione: " #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "Ultima Versione: " #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 #, fuzzy msgid "Not up to date" msgstr "Non aggiornato" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "Numero di giocatori" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" "La tua versione di SpringLobby non è aggiornata.\n" "\n" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "Non aggiornato" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" #: src/updater/updater.cpp:72 #, fuzzy msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "C'è stato un errore nel cercare l'ultima versione.\n" "Per favore riprova più tardi.\n" "Se il problema persiste, vai su Aiuto->Segnala Bug per segnalare questo bug." #: src/updater/updater.cpp:81 #, fuzzy, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" "C'è stato un errore nel cercare l'ultima versione.\n" "Per favore riprova più tardi.\n" "Se il problema persiste, vai su Aiuto->Segnala Bug per segnalare questo bug." #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 #, fuzzy msgid "the SpringLobby revision to update to" msgstr "" "La tua versione di SpringLobby è aggiornata!\n" "\n" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "SpringLobby" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 #, fuzzy msgid "Warning" msgstr "Avvertimento Log" #: src/user.cpp:83 #, fuzzy msgid "away" msgstr "Norvegia" #: src/user.cpp:83 msgid "back" msgstr "" #: src/user.cpp:85 #, fuzzy msgid "ingame" msgstr "Nickname" #: src/user.cpp:85 msgid "back from game" msgstr "" #: src/user.cpp:195 msgid "Newbie" msgstr "" #: src/user.cpp:196 msgid "Beginner" msgstr "" #: src/user.cpp:197 msgid "Average" msgstr "" #: src/user.cpp:198 msgid "Above average" msgstr "" #: src/user.cpp:199 msgid "Experienced" msgstr "" #: src/user.cpp:200 msgid "Highly experienced" msgstr "" #: src/user.cpp:201 msgid "Veteran" msgstr "" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 #, fuzzy msgid "Unknown" msgstr "sconosciuto" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "" #: src/useractions.h:11 #, fuzzy msgid "none" msgstr "Nessuno" #: src/useractions.h:11 #, fuzzy msgid "highlight" msgstr "Evidenzia" #: src/useractions.h:11 msgid "notify login/out" msgstr "" #: src/useractions.h:11 msgid "ignore chat" msgstr "" #: src/useractions.h:11 msgid "ignore pm" msgstr "" #: src/useractions.h:12 msgid "autokick" msgstr "" #: src/useractions.h:12 #, fuzzy msgid "notify hosted battle" msgstr "Partecipa alla stessa battaglia" #: src/useractions.h:12 msgid "notify status change" msgstr "" #: src/useractions.h:19 msgid "no action at all" msgstr "" #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" #: src/usermenu.h:31 msgid "Create new group..." msgstr "" #: src/usermenu.h:37 #, fuzzy msgid "Add to group..." msgstr "Aggiungi bot..." #: src/usermenu.h:38 #, fuzzy msgid "Remove from group" msgstr "Rimuovi l'account dell'utente" #: src/utils/controls.h:22 #, fuzzy msgid "Choose color" msgstr "Settaggio colori" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 #, fuzzy msgid "Author" msgstr "Austria" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Games" msgstr "Partita" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Compatible games" msgstr "Normale" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "Salva..." #: src/widgets/infopanel.cpp:74 #, fuzzy msgid "Current version" msgstr "La tua versione di Spring" #: src/widgets/infopanel.cpp:79 #, fuzzy msgid "# downloaded" msgstr "Scarica" #: src/widgets/infopanel.cpp:84 #, fuzzy msgid "Published on" msgstr "Pubblica nuovo file" #: src/widgets/infopanel.cpp:121 #, fuzzy msgid "Changelog" msgstr "Annulla" #: src/widgets/infopanel.cpp:126 #, fuzzy msgid "Screenshots" msgstr "Risoluzione dello Schermo" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" #, fuzzy #~ msgid "Settings" #~ msgstr "Salva impostazioni" #, fuzzy #~ msgid "Help" #~ msgstr "&Aiuto" #, fuzzy #~ msgid "Faction" #~ msgstr "Azione" #~ msgid "Mod" #~ msgstr "Mod" #, fuzzy #~ msgid "spectators" #~ msgstr "Spettatori:" #~ msgid "Mod:" #~ msgstr "Mod:" #~ msgid "Only mods i have" #~ msgstr "Solo mod che possiedo" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to join another battle." #~ msgstr "" #~ "Sei già all'interno di una stanza, chiudila prima di essere in grado di " #~ "unirti a un'altra partita." #~ msgid "Mod not available" #~ msgstr "Nessun mod disponibile" #~ msgid "Enter password" #~ msgstr "Inserire password" #, fuzzy #~ msgid "team" #~ msgstr "Squadra" #, fuzzy #~ msgid "ally" #~ msgstr "Allineamento" #~ msgid "cpu" #~ msgstr "cpu" #, fuzzy #~ msgid "Load a saved set of options." #~ msgstr "Carica un set di restrizioni." #, fuzzy #~ msgid "Save..." #~ msgstr "Salva..." #, fuzzy #~ msgid "Delete..." #~ msgstr "Seleziona..." #, fuzzy #~ msgid "Set default..." #~ msgstr "default" #~ msgid "Mod Options" #~ msgstr "Opzioni del mod" #~ msgid "Map Options" #~ msgstr "Opzioni della mappa" #~ msgid "You don't have the mod " #~ msgstr "Non possiedi il mod " #~ msgid " . Please download it first" #~ msgstr " . Per favore scaricalo prima." #, fuzzy #~ msgid "unknown hash " #~ msgstr "sconosciuto" #~ msgid "Select the mod to play with." #~ msgstr "Seleziona il mod con il quale giocare." #~ msgid "Test firewall" #~ msgstr "Prova firewall" #, fuzzy #~ msgid "Tab icons" #~ msgstr "Opzioni della mappa" #~ msgid "P2P" #~ msgstr "P2P" #~ msgid "Total Outgoing: " #~ msgstr "Inviati in totale: " #~ msgid "Publish new file" #~ msgstr "Pubblica nuovo file" #, fuzzy #~ msgid "Download Lua widgets" #~ msgstr "Attiva widgets LuaUI" #~ msgid "Total Outgoing: %.2f KB/s" #~ msgstr "Inviati in totale: %.2f KB/s" #~ msgid "Total Incoming: %.2f KB/s" #~ msgstr "Ricevuti in totale: %.2f KB/s" #~ msgid "&File" #~ msgstr "&File" #, fuzzy #~ msgid "Modname" #~ msgstr "Modalità" #, fuzzy #~ msgid "Download started" #~ msgstr "Nessun mod selezionato." #, fuzzy #~ msgid "Disconnecting" #~ msgstr "Disconnetti" #~ msgid "Debug" #~ msgstr "Debug" #, fuzzy #~ msgid "Player" #~ msgstr "Giocatore:" #~ msgid "Hi " #~ msgstr "Ciao " #, fuzzy #~ msgid "Notice" #~ msgstr "Nessuno" #, fuzzy #~ msgid "MB downloaded" #~ msgstr "Scarica" #, fuzzy #~ msgid "Disconnected from server." #~ msgstr "Risposta sconosciuta dal server" #, fuzzy #~ msgid "Connection failure" #~ msgstr "Connessione scaduta" #~ msgid "Server message" #~ msgstr "Messaggio del server" #, fuzzy #~ msgid "Grouping size" #~ msgstr "Azione" #~ msgid "a" #~ msgstr "a" #~ msgid "p" #~ msgstr "g" #~ msgid "m" #~ msgstr "m" #~ msgid "t" #~ msgstr "t" #~ msgid "Not a number" #~ msgstr "Non è un numero" #~ msgid "" #~ "Value out of range.\n" #~ " Enter an integer between 0 & 100." #~ msgstr "" #~ "Valore fuori dal range.\n" #~ "Inserisci un valore intero tra 0 e 100." #, fuzzy #~ msgid "topic" #~ msgstr "il topic \"" #~ msgid "Use smart scrolling" #~ msgstr "usa scorrimento intelligente" #~ msgid "_SERVER" #~ msgstr "_SERVER" #~ msgid "Unit detail" #~ msgstr "Dettaglio delle unità" #~ msgid "Send debug info to console" #~ msgstr "Manda informazioni di debug nella console" #~ msgid "if disabled these will only be logged" #~ msgstr "Se disattivato, queste saranno soltanto raccolte in un log." #~ msgid "Missing Functionality" #~ msgstr "Funzionalità Mancanti" #~ msgid "Download OTA content?" #~ msgstr "Vuoi scaricare i dati OTA? (Original Total Annihilation)" #, fuzzy #~ msgid "Create a spring directory in my documents folder" #~ msgstr "Crea una cartella .spring nella cartella home (raccomandato)" #, fuzzy #~ msgid "Not online" #~ msgstr "Non online" #~ msgid "Invalid host/port or servername." #~ msgstr "Indirizzo/porta o nome del server non valido." #~ msgid "Active chat channels:" #~ msgstr "Canali di chat attivi:" #~ msgid "Select all" #~ msgstr "Seleziona tutto" #, fuzzy #~ msgid "Remove selected" #~ msgstr "Nessun mod selezionato." #, fuzzy #~ msgid "Invalid usernames" #~ msgstr "Numero non valido." #, fuzzy #~ msgid "" #~ "A short description of the game, this will show up in the battle list. " #~ "This will be read-only for ladder" #~ msgstr "" #~ "Una breve descrizione della partita, che comparirà nella lista battaglie." #~ msgid "NAT traversal to use. Experimental support." #~ msgstr "Usa protocollo NAT Traversal. Supporto sperimentale." #, fuzzy #~ msgid "Unitsync error" #~ msgstr "libreria UnitSync" #~ msgid "" #~ "Please enter password needed to join this channel, leave blank for no " #~ "passwrd." #~ msgstr "" #~ "Inserisci una password necessaria per questo canale, lascia in bianco se " #~ "non esiste." #~ msgid "LuaAI" #~ msgstr "LuaAI" #~ msgid "no" #~ msgstr "no" #~ msgid "/.spring" #~ msgstr "/.spring" #~ msgid "Continue if commander dies" #~ msgstr "Continua se il commander muore" #~ msgid "End if commander dies" #~ msgstr "Termina se il commander muore" #~ msgid "End condition" #~ msgstr "Condizioni finali" #~ msgid "Resources" #~ msgstr "Risorse" #~ msgid "The amount of metal each player starts with." #~ msgstr "Ammontare di metallo per ogni giocatore alla partenza." #~ msgid "Start Energy" #~ msgstr "Energia di partenza" #~ msgid "The amount of energy each player starts with." #~ msgstr "Ammontare di energia per ogni giocatore alla partenza." #~ msgid "Max units" #~ msgstr "Unità massime" #~ msgid "The maximum number of units allowed per player." #~ msgstr "Numero massimo di unità permesse per giocatore." #~ msgid "Limit d-gun" #~ msgstr "D-gun limitato" #~ msgid "Ghosted buildings" #~ msgstr "Edifici fantasma" #~ msgid "Save to:" #~ msgstr "Salva in:" #~ msgid "Browse..." #~ msgstr "Sfoglia..." #~ msgid "Choose a directory" #~ msgstr "Scegli una directory" #~ msgid "Map/Mod Options" #~ msgstr "Opzioni mappa/mod" #~ msgid "Up to Date" #~ msgstr "Aggiornato" #~ msgid "" #~ "\n" #~ "\n" #~ "Would you like to visit a page with instructions on how to download the " #~ "newest version?" #~ msgstr "" #~ "\n" #~ "\n" #~ "Vorresti visitare una pagina Internet con le istruzioni per scaricare la " #~ "versione più recente?" #~ msgid "Limit D-Gun" #~ msgstr "Limita D-Gun" #~ msgid "" #~ "Disables commander's D-gun when being too far away from the starting point" #~ msgstr "" #~ "Disabilita il D-Gun del comandante quando si allontana troppo dal punto " #~ "di partenza" #~ msgid "Ghosted Buildings" #~ msgstr "Costruzioni Fantasma" #~ msgid "" #~ "Enemy buildings will leave a ghost image on the map after losing LoS on " #~ "them" #~ msgstr "" #~ "Le costruzioni nemiche lasceranno un'immagine fantasma sulla mappa quando " #~ "si perderà il contatto visivo su di esse" #~ msgid "" #~ "Efficiency of MetalMakers will progressively reduce as much as you build " #~ "them" #~ msgstr "" #~ "L'efficienza dei Metal Makers si ridurrà progressivamente man mano che li " #~ "costruisci" #~ msgid "Game Ending condition" #~ msgstr "Condizioni di Fine Partita" #~ msgid "Sets the amount of metal that players will start with" #~ msgstr "Imposta la quantità di metallo con la quale i giocatori inizieranno" #~ msgid "Sets the amount of energy that players will start with" #~ msgstr "Imposta la quantità di energia con la quale i giocatori inizieranno" #~ msgid "Max Units Allowed" #~ msgstr "Numero massimo di unità consentite" #~ msgid "" #~ "Sets the maximum amount of units that a player will be allowed to build" #~ msgstr "Imposta il numero massimo di unità che un giocatore può costruire" #~ msgid "Reset" #~ msgstr "Ripristina" #~ msgid "Spring directory" #~ msgstr "Directory Spring" #~ msgid "Default location." #~ msgstr "Posizione predefinita." #~ msgid "is not supported by the lobby server that requires version" #~ msgstr "non e' supportata dalla lobby server." #~ msgid "" #~ "This is the SpringLobby channel, please report any problems you are " #~ "having with SpringLobby here and the friendly developers will help you." #~ msgstr "" #~ "Questo è il canale di Springlobby, riportaci qualsiasi problema che hai " #~ "avuto e i tuoi amici sviluppatori ti daranno un aiuto." springlobby-0.169/po/pl.po0000600000176000000410000043307312105760300017022 0ustar buildbotwww-data00000000000000# Polish translation for springlobby # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the springlobby package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: springlobby\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2008-08-22 06:20+0000\n" "Last-Translator: Roman Skrzypiński \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2008-09-20 21:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "" #: src/Helper/imageviewer.cpp:92 #, fuzzy msgid "delete" msgstr "Wybierz..." #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "Błąd" #: src/Helper/imageviewer.cpp:160 #, fuzzy msgid "Choose a filename" msgstr "kanał" #: src/Helper/imageviewer.cpp:167 msgid "File successfully saved" msgstr "" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 msgid "Success" msgstr "" #: src/Helper/imageviewer.cpp:170 msgid "Couldn't save file" msgstr "" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 #, fuzzy msgid "Default" msgstr "domyślny" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" #: src/Helper/wxTranslationHelper.cpp:148 #, fuzzy msgid "Select the language" msgstr "kanał" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Zaakceptuj umowę" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "Czy akceptujesz warunki tej umowy?" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Tak" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "Nie" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 #, fuzzy msgid "User" msgstr "serwer" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 #, fuzzy msgid "Channel" msgstr "kanał" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Status:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Minimum rank to join" msgstr "" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Opis" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Opis" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Mapa" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 #, fuzzy msgid "Mapname" msgstr "Pseudonim" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "Pseudonim" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Host" #: src/battlelist/battlelistctrl.cpp:60 msgid "Name of the Host" msgstr "" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Obserwatorzy:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "Losowe pozycje startowe" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 #, fuzzy msgid "Players" msgstr "Gracze:" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "Losowe pozycje startowe" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Mapa" #: src/battlelist/battlelistctrl.cpp:63 msgid "Maximum number of Players that can join" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "Ściągnij &mape" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "Ściągnij &mape" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Obserwatorzy:" #: src/battlelist/battlelistctrl.cpp:370 #, fuzzy msgid "Active Players:" msgstr "Gracze:" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "Host:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Status:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Zablokowany" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "" #: src/battlelist/battlelistfilter.cpp:122 msgid "Highlighted only" msgstr "" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Opis:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Rozpoczęta" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Pełny" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "Otwarte" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Gracz" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Wszystko" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Mapa" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Tylko mapy które mam" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "Max. Graczy:" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 msgid "Game:" msgstr "" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Tylko mapy które mam" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Obserwator:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Gracze:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 #, fuzzy msgid " Filter " msgstr "Filtr" #: src/battlelist/battlelisttab.cpp:144 #, fuzzy msgid "Activated" msgstr "Rozpoczęta" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 msgid " Battle infos " msgstr "" #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "" #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "Dołącz" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "" #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "" #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 msgid "Matchmaker detected" msgstr "" #: src/battlelist/battlelisttab.cpp:420 msgid "Already in another battle" msgstr "" #: src/battlelist/battlelisttab.cpp:420 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" #: src/battlelist/battlelisttab.cpp:430 msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" #: src/battlelist/battlelisttab.cpp:433 msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "Mapa niedostępna" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "Mapa niedostępna" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 msgid "Edit auto-joined channels" msgstr "" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "" #: src/channel/channelchooser.cpp:30 #, fuzzy msgid "Find channel:" msgstr "kanał" #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 msgid "Choose channels to join" msgstr "" #: src/channel/channellistctrl.cpp:30 #, fuzzy msgid "# users" msgstr "(%d użytkowników)" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "" #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "kanał_" #: src/chatpanel.cpp:69 msgid "#" msgstr "" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, fuzzy, c-format msgid "%d users" msgstr "(%d użytkowników)" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "" #: src/chatpanel.cpp:296 msgid "Send" msgstr "Wyślij" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr "" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "" #: src/chatpanel.cpp:717 msgid "channel" msgstr "kanał" #: src/chatpanel.cpp:718 msgid "battle" msgstr "bitwa" #: src/chatpanel.cpp:719 msgid "server" msgstr "serwer" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr "" #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr "" #: src/chatpanel.cpp:814 msgid " ** Channel topic:" msgstr "" #: src/chatpanel.cpp:821 msgid " ** Set by " msgstr "" #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "" #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr "" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr "" #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr "" #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr "" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "\"" #: src/chatpanel.cpp:1090 msgid " ** User is now offline." msgstr "" #: src/chatpanel.cpp:1097 msgid " ** User just got online." msgstr "" #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 msgid " ** Joined Battle." msgstr "" #: src/chatpanelmenu.cpp:34 msgid "Disable text appending" msgstr "" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "Kopiuj" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "Wyczyść" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "Opuść" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "" #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "" #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "Zablokuj..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "Odblokuj" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "Zarejestruj..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "Wyrejestruj" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "Włącz" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "Wyłącz" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "Rozłącz" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "Połącz ponownie" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "Usuń..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "Zmiana hasła..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "" #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "Konta" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "" #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "Admin" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "" #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "" #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "" #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "" #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "" #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "" #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "" #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" #: src/chatpanelmenu.cpp:774 msgid "couldn't add user" msgstr "" #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "Serwer" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "Pseudonim" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" #: src/connectwindow.cpp:85 msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "Ok" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Anuluj" #: src/connectwindow.cpp:91 msgid "Login" msgstr "" #: src/connectwindow.cpp:92 msgid "Register" msgstr "" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "" #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "" #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" #: src/connectwindow.cpp:294 #, fuzzy msgid "Invalid nickname" msgstr "Nieprawidłowa liczba" #: src/connectwindow.cpp:301 msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "" #: src/countrycodes.cpp:11 msgid " Andorra" msgstr "" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "" #: src/countrycodes.cpp:25 msgid "Åland Islands" msgstr "" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "" #: src/countrycodes.cpp:56 msgid "China" msgstr "" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "" #: src/countrycodes.cpp:82 msgid "France" msgstr "" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "" #: src/countrycodes.cpp:110 msgid "India" msgstr "" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "" #: src/countrycodes.cpp:234 msgid "United Kingdom" msgstr "" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "" #: src/countrycodes.cpp:236 msgid "United States" msgstr "" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "" #: src/crashreport.cpp:168 msgid "System informations" msgstr "" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "Nie znaleziono żadnych map" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "Ściągnij &mape" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "Ściągnij &mape" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 #, fuzzy msgid "Name" msgstr "Pseudonim" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "Rozmiar" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Mapa" #: src/downloader/filelister/filelistctrl.cpp:174 #, fuzzy msgid "game" msgstr "Pseudonim" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:55 #, fuzzy msgid "Download selected" msgstr "Ściągnij &mape" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Pseudonim:" #: src/downloader/filelister/filelistfilter.cpp:69 msgid "Filetype:" msgstr "" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:78 msgid "" "\n" "successfully unzipped in:\n" msgstr "" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "Ściągnij &mape" #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "Dodaj bota" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Pseudonim:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "" #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 #, fuzzy msgid "value" msgstr "Wartość" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "Dodaj bota" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "" #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "Metoda" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Losowo" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "Klany" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Brak" #: src/hosting/autobalancedialog.cpp:49 #, fuzzy msgid "Fair" msgstr "Targi" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "Zawsze" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" #: src/hosting/autobalancedialog.cpp:53 msgid "Number of allies" msgstr "" #: src/hosting/autobalancedialog.cpp:56 #, fuzzy msgid "Auto select" msgstr "Połącz ponownie" #: src/hosting/battlemaptab.cpp:69 #, fuzzy msgid "Select" msgstr "Wybierz..." #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "Opcje" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "Wartość" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "Prędkość wiatru" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "Siła pływów" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "Grawitacja" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "Maksimum metalu" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 #, fuzzy msgid "Fixed" msgstr "Stałe" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "" #: src/hosting/battlemaptab.cpp:103 msgid "Chose before game" msgstr "" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "Pozycja startowa" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "Dozwolone jednostki" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "" #: src/hosting/battleoptionstab.cpp:77 #, fuzzy msgid "Disable selected units." msgstr "Udostępnić wszystkie jednostki." #: src/hosting/battleoptionstab.cpp:81 #, fuzzy msgid "Re-enable selected units." msgstr "Udostępnić wszystkie jednostki." #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "<<" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "Udostępnić wszystkie jednostki." #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "Niedostępne jednostki" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "" #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "" #: src/hosting/battleoptionstab.cpp:242 #, fuzzy msgid "Unit restriction" msgstr "Niedostępne jednostki" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "Drużyna" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "Sojusznik" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "Strona" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "Wybierz kolor" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "Obserwator" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "Usuń" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "" #: src/hosting/battleroomlistctrl.cpp:750 #, fuzzy msgid "AI (bot)\n" msgstr "Dodaj bota" #: src/hosting/battleroomlistctrl.cpp:754 #, fuzzy msgid "Human\n" msgstr "Człowieka \\ n" #: src/hosting/battleroomlistctrl.cpp:759 #, fuzzy msgid "Spectator\n" msgstr "Obserwator" #: src/hosting/battleroomlistctrl.cpp:763 #, fuzzy msgid "Player\n" msgstr "Gracz" #: src/hosting/battleroomlistctrl.cpp:768 #, fuzzy msgid "Host\n" msgstr "Host" #: src/hosting/battleroomlistctrl.cpp:772 #, fuzzy msgid "Client\n" msgstr "Klient" #: src/hosting/battleroomlistctrl.cpp:777 #, fuzzy msgid "Ready\n" msgstr "Zawsze" #: src/hosting/battleroomlistctrl.cpp:781 #, fuzzy msgid "Not ready\n" msgstr "Niegotowy" #: src/hosting/battleroomlistctrl.cpp:786 msgid "In sync" msgstr "" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "" #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "" #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "Połącz ponownie" #: src/hosting/battleroomtab.cpp:144 msgid "automatically unspec when there's a free slot" msgstr "" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "Jestem gotowy" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "" #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "Kolor" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Host" #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Rozpocznij bitwe" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "Rozpocznij" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "Rozpocznij bitwe" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "" #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Opis" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 #, fuzzy msgid "AutoSpect" msgstr "Połącz ponownie" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Rozpocznij" #: src/hosting/battleroomtab.cpp:209 msgid "Automatically start the battle when all players are ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Ring unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 msgid "Ring ..." msgstr "" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "Niegotowy" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 #, fuzzy msgid "Force spectate ..." msgstr "Wymuszony start?" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "" #: src/hosting/battleroomtab.cpp:255 #, fuzzy msgid "Save" msgstr "Zapisz..." #: src/hosting/battleroomtab.cpp:256 #, fuzzy msgid "Save a set of options." msgstr "Zapisz zbiór ograniczeń" #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 msgid "Delete" msgstr "" #: src/hosting/battleroomtab.cpp:261 #, fuzzy msgid "Delete a set of options." msgstr "Zapisz zbiór ograniczeń" #: src/hosting/battleroomtab.cpp:265 #, fuzzy msgid "Set default" msgstr "domyślny" #: src/hosting/battleroomtab.cpp:266 msgid "Use the current set of options as game's default." msgstr "" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "Kontynuuj" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "Koniec" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "Mapa nie istnieje" #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "Niegotowy" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "kanał" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Opis" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "domyślny" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "błąd" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 msgid "Delete preset" msgstr "" #: src/hosting/battleroomtab.cpp:996 #, fuzzy msgid "Set game default preset" msgstr "domyślny" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "" #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Opis" #: src/hosting/hostbattledialog.cpp:91 msgid "Automatically write the battle description when a user joins." msgstr "" #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "kanał" #: src/hosting/hostbattledialog.cpp:113 msgid "" "Password\n" "(no spaces)" msgstr "" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "" #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 #, fuzzy msgid "Randomly picks an available one" msgstr "Mod niedostępny" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "" #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "" #: src/hosting/hostbattledialog.cpp:185 msgid "NAT traversal to use." msgstr "" #: src/hosting/hostbattledialog.cpp:190 msgid "Rank requirement" msgstr "" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 msgid "Select the type of rank enforcement." msgstr "" #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "" #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 msgid "You have to select a game first." msgstr "" #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "Ściągnij &mape" #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" #: src/hosting/hostbattledialog.cpp:427 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:459 msgid "Battle not started beacuse the game you selected could not be found. " msgstr "" #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "" #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "Nie znaleziono żadnych map" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "Opcje" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 #, fuzzy msgid "Unit Restrictions" msgstr "Niedostępne jednostki" #: src/hosting/mmoptionwindows.cpp:36 #, fuzzy msgid "Change option" msgstr "Opcje Mapy" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "" #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "" #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "" #: src/iconimagelist.cpp:322 msgid "Game is closed." msgstr "" #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "" #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "" #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "" #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "" #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "" #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "" #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "" #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "" #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "" #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "" #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 #, fuzzy msgid "Newbies guide" msgstr "Nowicjusz" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 msgid "Joining a battle:\n" msgstr "" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 msgid "Hosting a battle:\n" msgstr "" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 msgid "Spring overview" msgstr "" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 msgid "Singleplayer gamee" msgstr "" #: src/introguide.cpp:110 msgid "Multiplayer gamee" msgstr "" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 msgid "Disconnected from server, chat closed." msgstr "" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "" #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "" #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "" #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 #, fuzzy msgid "&Save options" msgstr "Opcje Mapy" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "kanał" #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 msgid "&Spring settings" msgstr "" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "Opcje Mapy" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "" #: src/mainwindow.cpp:164 #, fuzzy msgid "Channel &list" msgstr "kanał" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "" #: src/mainwindow.cpp:166 #, fuzzy msgid "Change &username" msgstr "kanał" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "" #: src/mainwindow.cpp:169 msgid "&Reload maps/games" msgstr "" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "" #: src/mainwindow.cpp:178 msgid "&System Info" msgstr "" #: src/mainwindow.cpp:179 #, fuzzy msgid "&Change language" msgstr "kanał" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "" #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "Serwer" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "" #: src/mainwindow.cpp:500 msgid "You need to be connected to a server to view the channel list" msgstr "" #: src/mainwindow.cpp:500 #, fuzzy msgid "Not connected" msgstr "Połącz ponownie" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "" #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "" #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "" #: src/mainwindow.cpp:540 #, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 #, fuzzy msgid "No files found" msgstr "Nie znaleziono żadnych map" #: src/mainwindow.cpp:656 #, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "" #: src/mainwindow.cpp:692 msgid "This profile is write protected, please choose another name" msgstr "" #: src/mainwindow.cpp:703 msgid "Which profile do you want to load?" msgstr "" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "Usuń..." #: src/mainwindow.cpp:767 msgid "Enter new nickname" msgstr "" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "bitwa" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "" #: src/mainwindow.h:203 #, fuzzy msgid "Replays" msgstr "Zawsze" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 #, fuzzy msgid "Downloads" msgstr "Ściągnij &mape" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "" #: src/mapctrl.cpp:897 msgid "side:" msgstr "" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 msgid "Show" msgstr "" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" #: src/mapselectdialog.cpp:95 msgid "Filter" msgstr "" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" #: src/mapselectdialog.cpp:100 #, fuzzy msgid "Map details" msgstr "Maksimum metalu" #: src/mapselectdialog.cpp:163 #, fuzzy msgid "Start positions" msgstr "Pozycja startowa" #: src/mapselectdialog.cpp:261 msgid "Minimum wind" msgstr "" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "" #: src/mapselectdialog.cpp:263 #, fuzzy msgid "Average wind" msgstr "Przeciętny" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "" #: src/mapselectdialog.cpp:265 #, fuzzy msgid "Aspect ratio" msgstr "Obserwator" #: src/mapselectdialog.cpp:266 #, fuzzy msgid "Number of start positions" msgstr "Losowe pozycje startowe" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "" #: src/mmoptionswrapper.cpp:122 msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "kanał" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "kanał" #: src/mmoptionswrapper.cpp:132 #, fuzzy msgid "List of restricted units" msgstr "Niedostępne jednostki" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "Normalny" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "Tło" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "Moje wiadomości" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "Klient" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "Powiadomienie" #: src/options/chatoptionstab.cpp:258 msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "Czcionka:" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "domyślny" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "Wybierz..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "Zachowanie" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "" #: src/options/chatoptionstab.cpp:300 msgid "Copy server messages in current channel" msgstr "" #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "" #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 #, fuzzy msgid "Remove" msgstr "Usuń..." #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:61 #, fuzzy msgid "Rename.." msgstr "Usuń..." #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:70 msgid "Add New.." msgstr "" #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "" #: src/options/groupoptionspanel.cpp:84 #, fuzzy msgid "Group Actions" msgstr "Opcje" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "" #: src/options/groupoptionspanel.cpp:95 msgid "Ignore Chat" msgstr "" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:101 msgid "Notify Hosted Battles" msgstr "" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:134 msgid "Highlight Color" msgstr "" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "" #: src/options/groupoptionspanel.cpp:163 msgid "Add.." msgstr "" #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "" #: src/options/groupoptionspanel.cpp:170 msgid "Remove users from group" msgstr "" #: src/options/groupoptionspanel.cpp:264 msgid "Name of new group:" msgstr "" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "" #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 msgid "Use a file dialog to find the editor binary" msgstr "" #: src/options/lobbyoptionstab.cpp:91 #, fuzzy msgid "Autoconnect" msgstr "Połącz ponownie" #: src/options/lobbyoptionstab.cpp:94 #, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" #: src/options/lobbyoptionstab.cpp:96 msgid "Autoconnect on lobby start" msgstr "" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:104 #, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "" #: src/options/lobbyoptionstab.cpp:120 #, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "" #: src/options/lobbyoptionstab.cpp:130 msgid "Tooltips" msgstr "" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "" #: src/options/lobbyoptionstab.cpp:134 #, c-format msgid "Requires %s restart to take effect." msgstr "" #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "Powiadomienie" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 msgid "Display time for popup notifications in seconds" msgstr "" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 #, fuzzy msgid "Start tab" msgstr "Początkowy Metal" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "" #: src/options/lobbyoptionstab.cpp:282 msgid "Choose a editor browser executable" msgstr "" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "" #: src/options/mainoptionstab.cpp:73 msgid "General" msgstr "" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 msgid "Reloading unitsync" msgstr "" #: src/options/springoptionstab.cpp:315 #, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" #: src/playback/playbackfilter.cpp:60 msgid "Filter settings" msgstr "" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Tylko mapy które mam" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "" #: src/playback/playbackfilter.cpp:190 msgid "Duration (hh:mm:ss):" msgstr "" #: src/playback/playbacklistctrl.cpp:42 #, fuzzy msgid "Date" msgstr "bitwa" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Usuń..." #: src/playback/playbacklistctrl.cpp:46 #, fuzzy msgid "Duration" msgstr "Opis" #: src/playback/playbacklistctrl.cpp:47 msgid "Spring Version" msgstr "" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize" msgstr "" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "Wczytaj..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "Zawsze" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "savegame" msgstr "Zapisz..." #: src/playback/playbacktab.cpp:288 msgid "Couldn't get your spring versions from any unitsync library." msgstr "" #: src/playback/playbacktab.cpp:306 #, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" #: src/playback/playbacktab.cpp:323 msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" #: src/playback/playbacktab.cpp:356 #, fuzzy msgid "Invalid replay" msgstr "Nieprawidłowa liczba" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr "" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr "" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 msgid "There was an error downloading for the latest version.\n" msgstr "" #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "Powiadomienie" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "Nieprawidłowa liczba" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 #, fuzzy msgid "File doesn't exit" msgstr "Mapa nie istnieje" #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Rozpoczęta" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "Połącz ponownie" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 msgid "Unknown Error" msgstr "" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "" #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 #, fuzzy msgid "Download complete." msgstr "Ściągnij &mape" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer." msgstr "" #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "Połącz ponownie" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "Połącz ponownie" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 msgid "Tries to connect to the next server in the list." msgstr "" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 msgid "Do nothing" msgstr "" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "" #: src/selectusersdialog.h:67 #, fuzzy msgid "Select Users" msgstr "Zaznacz wszystko" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 #, fuzzy msgid " is online" msgstr "Rozłącz" #: src/serverevents.cpp:165 msgid " is now " msgstr "" #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "" #: src/serverevents.cpp:224 msgid " just went offline" msgstr "" #: src/serverevents.cpp:259 msgid " opened battle " msgstr "" #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "" #: src/serverevents.cpp:583 msgid " because: " msgstr "" #: src/serverevents.cpp:826 msgid "Server Message" msgstr "" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr "" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr "" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "" #: src/serverevents.cpp:928 #, c-format msgid "%s mutelist" msgstr "" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "" #: src/serverevents.cpp:984 #, fuzzy msgid "Download update" msgstr "Ściągnij &mape" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 msgid "Automatically moved to new battle" msgstr "" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "" #: src/singleplayertab.cpp:99 #, fuzzy msgid "Spectate only" msgstr "Obserwator" #: src/singleplayertab.cpp:102 #, fuzzy msgid "Random start positions" msgstr "Losowe pozycje startowe" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 msgid "Game setup error" msgstr "" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "" #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "" #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 msgid "Coulnd't load required unitsync library" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 #, fuzzy msgid "Fatal error" msgstr "błąd" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 msgid "Ignore chat" msgstr "" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 msgid "Battle Autokick" msgstr "" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 msgid "Friends" msgstr "" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "" #: src/springsettings/ctrlconstants.h:229 #, fuzzy msgid "Terrain detail" msgstr "Maksimum metalu" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "Unit LOD distance" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "higher value = units will remain detailed even when zooming out" msgstr "" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "Grass detail" msgstr "Maksimum metalu" #: src/springsettings/ctrlconstants.h:231 msgid "higher value = more detailed grass" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:236 msgid "Max nano simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "Enable v-sync" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "Full-scene anti-aliasing samples" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "Master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "General sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "general volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "reply volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 msgid "Battle volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 msgid "battle volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "User interface volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "ui volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "" #: src/springsettings/ctrlconstants.h:291 #, fuzzy msgid "Reflective units" msgstr "Niedostępne jednostki" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "" #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 #, fuzzy msgid "left is the default" msgstr "domyślny" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Use less colors" msgstr "" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" #: src/springsettings/ctrlconstants.h:320 msgid "Show in-game player information" msgstr "" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" #: src/springsettings/ctrlconstants.h:385 #, fuzzy msgid "Reflective" msgstr "Wybierz..." #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "" #: src/springsettings/ctrlconstants.h:415 msgid "Blur reflection" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Shore waves" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Enables shorewaves" msgstr "" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "Wybierz..." #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 msgid "Reflection texture size" msgstr "" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "Opis" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "off" msgstr "Wyłącz" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "" #: src/springsettings/frame.cpp:315 msgid "(simple mode)" msgstr "" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "" #: src/springsettings/frame.cpp:367 msgid "(expert mode)" msgstr "" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "Nieprawidłowa liczba" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 msgid "Hotkey Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Enter new command:" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 msgid "Hotkey SaveSettings error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "Nie znaleziono żadnych map" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "" #: src/springsettings/panel_pathoption.cpp:34 msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "" #: src/springsettings/panel_pathoption.cpp:96 msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "" #: src/springsettings/presets.h:45 msgid "very low" msgstr "" #: src/springsettings/presets.h:45 msgid "very high" msgstr "" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "" #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "" #: src/springsettings/tab_quality_video.cpp:166 msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "" #: src/springsettings/tab_simple.cpp:40 msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr "" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:99 msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "" #: src/springsettings/tab_ui.cpp:37 msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "Dozwolone jednostki" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" #: src/tdfcontainer.cpp:131 msgid "line " msgstr "" #: src/tdfcontainer.cpp:131 msgid " , column " msgstr "" #: src/ui.cpp:175 msgid "Server password" msgstr "Hasło serwera" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" #: src/ui.cpp:294 msgid "Registration successful" msgstr "" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "" #: src/ui.cpp:458 msgid "Help error" msgstr "" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, c-format msgid "%s commands help." msgstr "" #: src/ui.cpp:465 msgid "Global commands:" msgstr "" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr "" #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr "" #: src/ui.cpp:468 msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" #: src/ui.cpp:469 msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr "" #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr "" #: src/ui.cpp:472 msgid " \"/join channel [password]\" - Joins a channel." msgstr "" #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr "" #: src/ui.cpp:474 msgid " \"/ingame\" - Shows how much time you have in game." msgstr "" #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" #: src/ui.cpp:476 msgid " \"/part\" - Leaves current channel." msgstr "" #: src/ui.cpp:477 msgid " \"/p\" - Alias to /part." msgstr "" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr "" #: src/ui.cpp:479 #, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr "" #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr "" #: src/ui.cpp:481 #, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr "" #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr "" #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "" #: src/ui.cpp:496 msgid "The topic \"" msgstr "" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "" #: src/ui.cpp:580 msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" #: src/ui.cpp:599 msgid "Online play is currently disabled." msgstr "" #: src/ui.cpp:631 #, c-format msgid "disconnected from server: %s" msgstr "" #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "" #: src/ui.cpp:839 #, fuzzy, c-format msgid "%s (%d users)" msgstr "(%d użytkowników)" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "" #: src/ui.cpp:993 msgid "Battle closed" msgstr "" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "" #: src/ui.cpp:1337 #, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" #: src/ui.cpp:1340 msgid "Welcome" msgstr "" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 msgid "Import settings?" msgstr "" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/ui.cpp:1387 msgid "Your Version: " msgstr "" #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "" #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 msgid "Not up to date" msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "Updater error." msgstr "" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" #: src/updater/updater.cpp:72 msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/updater/updater.cpp:81 #, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 msgid "the SpringLobby revision to update to" msgstr "" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 msgid "Warning" msgstr "" #: src/user.cpp:83 #, fuzzy msgid "away" msgstr "Zawsze" #: src/user.cpp:83 msgid "back" msgstr "" #: src/user.cpp:85 #, fuzzy msgid "ingame" msgstr "Pseudonim" #: src/user.cpp:85 msgid "back from game" msgstr "" #: src/user.cpp:195 msgid "Newbie" msgstr "Nowicjusz" #: src/user.cpp:196 msgid "Beginner" msgstr "Początkujący" #: src/user.cpp:197 msgid "Average" msgstr "Przeciętny" #: src/user.cpp:198 msgid "Above average" msgstr "Ponad przeciętny" #: src/user.cpp:199 msgid "Experienced" msgstr "Doświadczony" #: src/user.cpp:200 msgid "Highly experienced" msgstr "Bardzo doświadczony" #: src/user.cpp:201 msgid "Veteran" msgstr "Weteran" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 msgid "Unknown" msgstr "" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "" #: src/useractions.h:11 #, fuzzy msgid "none" msgstr "Brak" #: src/useractions.h:11 msgid "highlight" msgstr "" #: src/useractions.h:11 msgid "notify login/out" msgstr "" #: src/useractions.h:11 msgid "ignore chat" msgstr "" #: src/useractions.h:11 msgid "ignore pm" msgstr "" #: src/useractions.h:12 msgid "autokick" msgstr "" #: src/useractions.h:12 #, fuzzy msgid "notify hosted battle" msgstr "Rozpocznij bitwe" #: src/useractions.h:12 msgid "notify status change" msgstr "" #: src/useractions.h:19 msgid "no action at all" msgstr "" #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" #: src/usermenu.h:31 msgid "Create new group..." msgstr "" #: src/usermenu.h:37 msgid "Add to group..." msgstr "" #: src/usermenu.h:38 msgid "Remove from group" msgstr "" #: src/utils/controls.h:22 #, fuzzy msgid "Choose color" msgstr "Wybierz kolor" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 msgid "Author" msgstr "" #: src/widgets/downloadlistctrl.cpp:31 msgid "Games" msgstr "" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Compatible games" msgstr "Normalny" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "Zapisz..." #: src/widgets/infopanel.cpp:74 msgid "Current version" msgstr "" #: src/widgets/infopanel.cpp:79 #, fuzzy msgid "# downloaded" msgstr "Ściągnij &mape" #: src/widgets/infopanel.cpp:84 msgid "Published on" msgstr "" #: src/widgets/infopanel.cpp:121 #, fuzzy msgid "Changelog" msgstr "Anuluj" #: src/widgets/infopanel.cpp:126 msgid "Screenshots" msgstr "" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" #, fuzzy #~ msgid "Faction" #~ msgstr "Opis" #~ msgid "Mod" #~ msgstr "Mod" #, fuzzy #~ msgid "spectators" #~ msgstr "Obserwatorzy:" #, fuzzy #~ msgid "players" #~ msgstr "Gracze:" #, fuzzy #~ msgid "max" #~ msgstr "max" #~ msgid "Mod:" #~ msgstr "Mod:" #~ msgid "Only mods i have" #~ msgstr "Tylko mody które mam" #~ msgid "Mod not available" #~ msgstr "Mod niedostępny" #~ msgid "Enter password" #~ msgstr "Wprowadź hasło" #, fuzzy #~ msgid "team" #~ msgstr "Drużyna" #, fuzzy #~ msgid "ally" #~ msgstr "Sojusznik" #, fuzzy #~ msgid "cpu" #~ msgstr "cpu" #, fuzzy #~ msgid "Load a saved set of options." #~ msgstr "Zapisz zbiór ograniczeń" #, fuzzy #~ msgid "Save..." #~ msgstr "Zapisz..." #, fuzzy #~ msgid "Delete..." #~ msgstr "Wybierz..." #, fuzzy #~ msgid "Set default..." #~ msgstr "domyślny" #~ msgid "Mod Options" #~ msgstr "Opcje Mod'u" #~ msgid "Map Options" #~ msgstr "Opcje Mapy" #, fuzzy #~ msgid "Tab icons" #~ msgstr "Opcje Mapy" #, fuzzy #~ msgid "Download Lua widgets" #~ msgstr "Ściągnij &mape" #, fuzzy #~ msgid "Modname" #~ msgstr "Pseudonim" #, fuzzy #~ msgid "Download started" #~ msgstr "Ściągnij &mape" #, fuzzy #~ msgid "Disconnecting" #~ msgstr "Rozłącz" #, fuzzy #~ msgid "Player" #~ msgstr "Gracz" #, fuzzy #~ msgid "Notice" #~ msgstr "Brak" #, fuzzy #~ msgid "Connection failure" #~ msgstr "Kontynuuj" #~ msgid "Grouping size" #~ msgstr "Opcje" #~ msgid "a" #~ msgstr "a" #~ msgid "p" #~ msgstr "p" #~ msgid "m" #~ msgstr "m" #~ msgid "%d%" #~ msgstr "%d%" #~ msgid "t" #~ msgstr "t" #~ msgid "_SERVER" #~ msgstr "_SERWER" #~ msgid "Not online" #~ msgstr "Rozłącz" #~ msgid "Only the host can change the game options" #~ msgstr "Tylko host może rozpocząć bitwe" #~ msgid "Only the host can start the battle." #~ msgstr "Tylko host może rozpocząć bitwe" #~ msgid "Only the host can use those functions." #~ msgstr "Tylko host może rozpocząć bitwe" #~ msgid "Only the host can toggle autohost mode." #~ msgstr "Tylko host może rozpocząć bitwe" #~ msgid "Select all" #~ msgstr "Zaznacz wszystko" #~ msgid "Add user" #~ msgstr "(%d użytkowników)" #~ msgid "Resources" #~ msgstr "Zasoby" #~ msgid "Start Energy" #~ msgstr "Początkowa Energia" #~ msgid "Max units" #~ msgstr "Maksimum jednostek" #~ msgid "Save to:" #~ msgstr "Zapisz w:" #~ msgid "Browse..." #~ msgstr "Przeglądaj..." #~ msgid "Choose a directory" #~ msgstr "Wybierz folder" springlobby-0.169/po/pt.po0000600000176000000410000045264312105760300017036 0ustar buildbotwww-data00000000000000# Portuguese translation for springlobby # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the springlobby package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: springlobby\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2010-01-02 03:00+0000\n" "Last-Translator: almufadado \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-01-03 04:49+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "" #: src/Helper/imageviewer.cpp:92 msgid "delete" msgstr "" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "Erro" #: src/Helper/imageviewer.cpp:160 msgid "Choose a filename" msgstr "" #: src/Helper/imageviewer.cpp:167 msgid "File successfully saved" msgstr "" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 msgid "Success" msgstr "" #: src/Helper/imageviewer.cpp:170 msgid "Couldn't save file" msgstr "" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 msgid "Default" msgstr "" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" #: src/Helper/wxTranslationHelper.cpp:148 msgid "Select the language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Aceitar a Licença" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "Aceita os termos desta licença?" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Sim" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "Não" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 msgid "User" msgstr "" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 msgid "Channel" msgstr "" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Estado:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 #, fuzzy msgid "Minimum rank to join" msgstr "Patente Mínima Necessária" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Descrição" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Descrição" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Mapa" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 msgid "Mapname" msgstr "" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "" #: src/battlelist/battlelistctrl.cpp:59 msgid "Gamename" msgstr "" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Anfitrião" #: src/battlelist/battlelistctrl.cpp:60 msgid "Name of the Host" msgstr "" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Espectadores:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "Número de jogadores" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 msgid "Players" msgstr "" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "Número de jogadores" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Mapa" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Maximum number of Players that can join" msgstr "O número máximo de jogadores permitidos na batalha" #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "" #: src/battlelist/battlelistctrl.cpp:209 msgid "Download &game" msgstr "" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Espectadores:" #: src/battlelist/battlelistctrl.cpp:370 msgid "Active Players:" msgstr "" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "Anfitrião:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Estado:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Fechado" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "Com senha" #: src/battlelist/battlelistfilter.cpp:122 msgid "Highlighted only" msgstr "" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Descrição:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Iniciado" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Cheio" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Jogador:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Todos" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Mapa:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Apenas mapas que possuo" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "Max. de jogadores:" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 msgid "Game:" msgstr "" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Apenas mapas que possuo" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Espectador:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Jogadores:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 msgid " Filter " msgstr "" #: src/battlelist/battlelisttab.cpp:144 msgid "Activated" msgstr "" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 msgid " Battle infos " msgstr "" #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "" #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "Entrar" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" "Não pode hospedar um jogo enquanto estiver offline. Por favor ligue-se a um " "servidor." #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "" #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "" "Hospedar jogos está desactivado devido à versão incompatível que está a usar" #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Erro do Spring" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "Numa batalha" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" "Já se encontra numa batalha.\n" "Deseja sair da batalha actual e começar uma nova?" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" "Entrar em batalhas está desactivado devido à versão do Spring que está a " "usar ser incompatível." #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 msgid "Matchmaker detected" msgstr "" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "Numa batalha" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "Já se encontra numa batalha.\n" "\n" "Deseja deixar a batalha actual e entrar nesta?" #: src/battlelist/battlelisttab.cpp:430 msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" #: src/battlelist/battlelisttab.cpp:433 #, fuzzy msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" "Precisa de descarregar o mod antes de entrar neste jogo.\n" "\n" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "Mapa não disponível" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" "Precisa de descarregar o mapa para poder jogar nesta batalha.\n" "\n" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "Mapa não disponível" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "Palavra chave da batalha" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 msgid "Edit auto-joined channels" msgstr "" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "" #: src/channel/channelchooser.cpp:30 msgid "Find channel:" msgstr "" #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 msgid "Choose channels to join" msgstr "" #: src/channel/channellistctrl.cpp:30 msgid "# users" msgstr "" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "### Sessão Fechada a [" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" "Não foi possível criar a pasta.\n" "Verifique que não existe protecção contra a escrita.\n" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "Função de registo desactivada até reiniciar o SpringLobby." #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "Resgisto de Aviso" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" ".\n" "\n" "Volte a entrar na sala para reactivar os registos." #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 #, fuzzy msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" "Não é possível abrir os ficheiros de registo.\n" "Verifique se não existe protecção contra a escrita.\n" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "" #: src/chatpanel.cpp:69 msgid "#" msgstr "#" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, c-format msgid "%d users" msgstr "" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "" #: src/chatpanel.cpp:296 msgid "Send" msgstr "Enviar" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr " !! Comando: \"" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "\" params: \"" #: src/chatpanel.cpp:717 msgid "channel" msgstr "canal" #: src/chatpanel.cpp:718 msgid "battle" msgstr "batalha" #: src/chatpanel.cpp:719 msgid "server" msgstr "servidor" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr "" #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr "" #: src/chatpanel.cpp:814 msgid " ** Channel topic:" msgstr "" #: src/chatpanel.cpp:821 msgid " ** Set by " msgstr "" #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "Conversa fechada." #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "Tem a certeza de que pretende colar %d linhas?" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr " Tem o SpringLobby v" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr " Não está num canal ou o canal não existe." #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" " Erro: O comando (%s) não existe, use /help para obter uma lista dos " "comandos disponíveis." #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" " Não está numa batalha ou a batalha não existe, use /help para obter uma " "lista dos comandos disponíveis." #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr " O utilizador está offline" #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr " Enviado: \"" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "\"" #: src/chatpanel.cpp:1090 #, fuzzy msgid " ** User is now offline." msgstr " O utilizador está offline" #: src/chatpanel.cpp:1097 #, fuzzy msgid " ** User just got online." msgstr " O utilizador está offline" #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 #, fuzzy msgid " ** Joined Battle." msgstr "Entrar na mesma batalha" #: src/chatpanelmenu.cpp:34 msgid "Disable text appending" msgstr "" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "Copiar" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "Limpar" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "Entrar automaticamente neste canal" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "Sair" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "Mostrar Mensagens de Entrada/Saída" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "Informação do canal" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "Definir tópico..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "Menssagem do canal..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "Trancar..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "Registar..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "Remover o Registo" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "Ligado" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "Desligado" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "Protecção de spam" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "ChanServ" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "Desligar" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "Reconectar automaticamente" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "Remover..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "Alterar senha..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "Definir acesso..." #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "Contas" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "" #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "Admin" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "Abrir canal" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "Entrar na mesma batalha" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "Tempo de jogo" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "Silenciar..." #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "Silenciar durante 5 minutos" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "Silenciar durante 10 minutos" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "Silenciar durante 30 minutos" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "Silenciar durante 2 horas" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "Silenciar durante 1 dia" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "Silenciar" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "Expulsar..." #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "Banir..." #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "Desbanir" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "Erro do ChanServ" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "O ChanServ não está neste canal" #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "Qual deve ser o novo tópico?" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "Mensagem:" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "Trancar canal..." #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "Qual deverá ser a nova senha?" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "Destrancar canal" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "Tem a certeza de que pretende destrancar este canal?" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "O ChanServ não está neste servidor." #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "Quem deve ser indicado como fundador deste canal?" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "Remover Conta de Utilizador" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "Que conta de utilizador pretende remover hoje?" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "Remover Conta" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "Tem a certeza que pretende remover a conta " #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "De que conta de utilizador pretende mudar a senha?" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "Qual deverá ser a nova senha?" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "Não Implementado" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "Silenciar Utilizador" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "Por quantos minutos deverá o utilizador ser silenciado?" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "Expulsar Utilizador" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "Razão:" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "Expulsar utilizador" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "Silenciar utilizador" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "Duração:" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" #: src/chatpanelmenu.cpp:774 msgid "couldn't add user" msgstr "" #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "Servidor" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" "Servidor a ligar. Pode ligar a qualquer servidor introduzindo-o no formato " "endereçoDoServidor:porta." #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "Alcunha" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "Senha" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "Lembrar senha" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "Ligar automaticamente da próxima vez" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" "lembrar os detalhes da ligação e ligar automaticamente ao servidor da " "próxima vez que iniciar o lobby" #: src/connectwindow.cpp:85 msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "OK" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Cancelar" #: src/connectwindow.cpp:91 msgid "Login" msgstr "Autentificação" #: src/connectwindow.cpp:92 msgid "Register" msgstr "Registar" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "Alcunha" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "Porta inválida." #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "Porta inválida" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" "Número da porta fora dos limites.\n" "\n" "Tem de ser um inteiro entre 1 e 65535" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "Máquina/porta inválida." #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "Máquina inválida" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" #: src/connectwindow.cpp:294 msgid "Invalid nickname" msgstr "" #: src/connectwindow.cpp:301 msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "O registo falhou." #: src/countrycodes.cpp:11 msgid " Andorra" msgstr " Andorra" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "Emiratos Árabes Unidos" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "Afeganistão" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "Antígua e Barbuda" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "Anguilla" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "Albânia" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "Arménia" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "Antilhas Holandesas" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "Angola" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "Antárctica" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "Argentina" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "Samoa Americana" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "Áustria" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "Austrália" #: src/countrycodes.cpp:25 #, fuzzy msgid "Åland Islands" msgstr "Ilhas Caimão" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "Aruba" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "Azerbaijão" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "Bósnia Herzegovina" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "Barbados" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "Bangladesh" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "Bélgica" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "Burquina Faso" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "Bulgária" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "Barém" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "Burundi" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "Benim" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "Bermudas" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "Darussalam do Brunei" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "Bolívia" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "Brasil" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "Bahamas" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "Butão" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "Ilha Bouvet" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "Botswana" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "Bielorrússia" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "Belize" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "Canadá" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "Ilhas Cocos (Keeling)" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "República Centro-Africana" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "Congo" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "Suíça" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "Costa do Marfim" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "Ilhas Cook" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "Chile" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "República dos Camarões" #: src/countrycodes.cpp:56 msgid "China" msgstr "China" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "Colômbia" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "Costa Rica" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "Cuba" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "Cabo Verde" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "Ilha Natal" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "Chipre" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "República Checa" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "Alemanha" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "Djibuti" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "Dinamarca" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "Dominica" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "República Dominicana" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "Argélia" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "Equador" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "Estónia" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "Egipto" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "Saara Ocidental" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "Eritreia" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "Espanha" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "Etiópia" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "Finlândia" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "Fiji" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "Ilhas Falkland (Malvinas)" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "Micronésia" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "Ilhas Feroé" #: src/countrycodes.cpp:82 msgid "France" msgstr "França" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "França, Metropolitana" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "Gabão" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "Granada" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "Geórgia" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "Guiana Francesa" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "Gana" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "Gibraltar" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "Gronelândia" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "Gâmbia" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "Guiné-Conacri" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "Guadalupe" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "Guiné Equatorial" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "Grécia" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "Ilhas Geórgia do Sul e Sandwich do Sul" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "Guatemala" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "Guam" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "Guiné-Bissau" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "Guiana" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "Hong Kong" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "Ilha Heard e McDonald" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "Honduras" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "Croácia" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "Haiti" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "Hungria" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "Indonésia" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "Irlanda" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "Israel" #: src/countrycodes.cpp:110 msgid "India" msgstr "Índia" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "Território Britânico do Oceano Índico" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "Iraque" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "Irão" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "Islândia" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "Itália" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "Jamaica" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "Jordânia" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "Japão" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "Quénia" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "Quirguistão" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "Camboja" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "Kiribati" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "Comoros" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "São Cristóvão e Neves" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "República Democrática Popular da Coreia" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "República da Coreia (Coreia do Sul)" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "Kuwait" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "Ilhas Caimão" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "Cazaquistão" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "Laos" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "Líbano" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "Santa Lúcia" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "Liechtenstein" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "Sri Lanka" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "Libéria" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "Lesoto" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "Lituânia" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "Luxemburgo" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "Letónia" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "Líbia" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "Marrocos" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "Mónaco" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "Moldávia" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "Montenegro" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "Madagáscar" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "Ilhas Marshall" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "Macedónia" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "Mali" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "Mianmar" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "Mongólia" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "Macau" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "Ilhas Marianas do Norte" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "Martinica" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "Mauritânia" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "Montserrat" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "Malta" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "Maurícias" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "Maldivas" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "Malawi" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "México" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "Malásia" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "Moçambique" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "Namíbia" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "Nova Caledónia" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "Níger" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "Ilha Norfolk" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "Nigéria" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "Nicarágua" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "Holanda" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "Noruega" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "Nepal" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "Nauru" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "Zona Neutra (Arábia Saudita/Iraque)" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "Niue" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "Nova Zelândia" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "Omã" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "Panamá" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "Perú" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "Polinésia Francesa" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "Papua Nova Guiné" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "Filipinas" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "Paquistão" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "Polónia" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "São Pedro e Miquelon" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "Pitcairn" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "Porto Rico" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "Portugal" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "República de Palau" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "Paraguai" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "Qatar" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "Reunião" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "Roménia" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "Sérvia" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "Federação Russa" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "Ruanda" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "Arábia Saudita" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "Ilhas Salomão" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "Seicheles" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "Sudão" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "Suécia" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "Singapura" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "Santa Helena" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "Eslovénia" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "Ilhas Svalbard e Jan Mayen" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "República Eslovaca" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "Serra Leoa" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "San Marino" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "Senegal" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "Somália" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "Suriname" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "São Tomé e Príncipe" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "União Soviética (Antiga)" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "El Salvador" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "Síria" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "Suazilândia" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "Ilhas Turks e Caicos" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "Chade" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "Terras Austrais e Antárcticas Francesas" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "Togo" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "Tailândia" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "Tajiquistão" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "Toquelau" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "Turquemenistão" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "Tunísia" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "Tonga" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "Timor Leste" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "Turquia" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "Trindade e Tobago" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "Tuvalu" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "Formosa" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "Tanzânia" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "Ucrânia" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "Uganda" #: src/countrycodes.cpp:234 #, fuzzy msgid "United Kingdom" msgstr "Reino Unido" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "Ilhas Menores Distantes dos Estados Unidos" #: src/countrycodes.cpp:236 msgid "United States" msgstr "Estados Unidos da América" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "Uruguai" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "Uzbequistão" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "Estado Cidade do Vaticano (Santa Sé)" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "São Vicente e Granadinas" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "Venezuela" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "Ilhas Virgens Britânicas" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "Ilhas Virgens Americanas" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "Vietname" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "Vanuatu" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "Ilhas Wallis e Futuna" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "Samoa" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "Iémen" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "Mayotte" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "Jugoslávia" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "África do Sul" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "Zâmbia" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "Zaire" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "Zimbábue" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "(Nome do país não encontrado)" #: src/crashreport.cpp:168 msgid "System informations" msgstr "Informações do sistema" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "Último script de lançamento gerado pelo Spring" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "Nenhum mapa encontrado" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "" #: src/downloader/downloadlistctrl.cpp:222 msgid "downloading" msgstr "" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "Não Implementado" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 msgid "Name" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "Tamanho" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Mapa" #: src/downloader/filelister/filelistctrl.cpp:174 msgid "game" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:55 msgid "Download selected" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Alcunha:" #: src/downloader/filelister/filelistfilter.cpp:69 msgid "Filetype:" msgstr "" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:78 msgid "" "\n" "successfully unzipped in:\n" msgstr "" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" #: src/downloader/prdownloader.cpp:43 msgid "Download complete: " msgstr "" #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "Adicionar robô" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Alcunha:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "IA:" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "Escolha uma biblioteca de IA para o robô." #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 msgid "value" msgstr "" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "Adicionar robô" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "Não foram encontrados robôs com IA na sua instalação do Spring." #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "Não foram encontradas bibliotecas de IA" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "Método" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "Dividir patentes uniformemente" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Aleatório" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "Clãs" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Nenhum" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "Justo" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "Sempre" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" "Colocar membros do mesmo Clã (utilizadores com o mesmo tag de Clã, como " "'[smurfzor]Alice' e '[smurfzor]Bob') juntos na mesma aliança. \n" "Nenhum: nenhum tratamento especial para clãs.\n" "Justo: colocar membros do mesmo clã numa aliança caso a aliança não seja " "injusta.\n" "Sempre: colocar sempre os membros do mesmo clã numa aliança, mesmo se a " "aliança se tornar injusta." #: src/hosting/autobalancedialog.cpp:53 msgid "Number of allies" msgstr "" #: src/hosting/autobalancedialog.cpp:56 msgid "Auto select" msgstr "" #: src/hosting/battlemaptab.cpp:69 msgid "Select" msgstr "" #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "Opção" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "Valor" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "Velocidade do vento" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "Força das marés" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "Gravidade" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "Raio de extração" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "Fixo" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "Escolher durante o jogo" #: src/hosting/battlemaptab.cpp:103 msgid "Chose before game" msgstr "" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "Posições iniciais" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "Restrições de unidades" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "Unidades permitidas" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "As unidades nesta lista estarão disponíveis durante o jogo." #: src/hosting/battleoptionstab.cpp:77 msgid "Disable selected units." msgstr "" #: src/hosting/battleoptionstab.cpp:81 msgid "Re-enable selected units." msgstr "" #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "Permitir todas as unidades." #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "Unidades proibidas" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "As unidades nesta lista não estarão disponíveis durante o jogo." #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "" #: src/hosting/battleoptionstab.cpp:242 msgid "Unit restriction" msgstr "" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "Equipa" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "Aliado" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "Bonus de Recursos" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "Facção" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "Definir cor" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "Definir Bónus de Recusos" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "Espectador" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "Expulsar" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "Por favor introduza um valor entre 0 e 100" #: src/hosting/battleroomlistctrl.cpp:750 msgid "AI (bot)\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:754 msgid "Human\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:759 msgid "Spectator\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:763 msgid "Player\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:768 msgid "Host\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:772 msgid "Client\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:777 msgid "Ready\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:781 msgid "Not ready\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:786 msgid "In sync" msgstr "" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "" "Jogadores com o mesmo número de equipa partilham o controlo das suas " "unidades." #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" "Jogadores como mesmo número de aliança trabalham juntos para alcançar a " "vitória." #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "Selecione uma cor para identificar as suas unidades durante o jogo" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "Espectar (observar) a batalha em vez de jogar" #: src/hosting/battleroomtab.cpp:143 msgid "Auto un-spectate" msgstr "" #: src/hosting/battleroomtab.cpp:144 msgid "automatically unspec when there's a free slot" msgstr "" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "Estou pronto" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "Pressione aqui se estiver satisfeito com as opções da batalha." #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "Cor" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Criar nova batalha" #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Criar nova batalha" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "Deixar a batalha e voltar à lista de batalhas" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "Começar" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "Começar a batalha" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "Adicionar Robô" #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "Adicionar um jogador controlado pelo computador ao jogo" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "Impedir novos jogadores de entrarem na batalha" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Descrição" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 msgid "AutoSpect" msgstr "" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Começar" #: src/hosting/battleroomtab.cpp:209 msgid "Automatically start the battle when all players are ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Ring unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 msgid "Ring ..." msgstr "" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "Não pronto" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 #, fuzzy msgid "Force spectate ..." msgstr "Forçar o início?" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "Equilibrar automaticamente os jogadores em duas ou mais alianças" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "Corrigir cores" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "Tornas as cores dos jogadores únicas" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "" #: src/hosting/battleroomtab.cpp:255 msgid "Save" msgstr "" #: src/hosting/battleroomtab.cpp:256 msgid "Save a set of options." msgstr "" #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 msgid "Delete" msgstr "" #: src/hosting/battleroomtab.cpp:261 msgid "Delete a set of options." msgstr "" #: src/hosting/battleroomtab.cpp:265 msgid "Set default" msgstr "" #: src/hosting/battleroomtab.cpp:266 msgid "Use the current set of options as game's default." msgstr "" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "Áreas" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "Escolher" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "Continuar" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "Terminar" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "O mapa não existe." #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "Não pronto" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "Escolher durante o jogo" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Descrição" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 msgid "Set Timeout" msgstr "" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 msgid "Delete preset" msgstr "" #: src/hosting/battleroomtab.cpp:996 msgid "Set game default preset" msgstr "" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "Criar nova batalha" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "Uma descrição curta do jogo que irá aparecer na lista das batalhas." #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Descrição" #: src/hosting/hostbattledialog.cpp:91 msgid "Automatically write the battle description when a user joins." msgstr "" #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "Escolha o mod com que pretende jogar." #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "Com senha" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "" "A senha necessária para participar neste jogo. Mantenha vazio para não haver " "senha" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "Porta" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "" #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Randomly picks an available one" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "Número de jogadores" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "O número máximo de jogadores permitidos na batalha" #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "" #: src/hosting/hostbattledialog.cpp:185 msgid "NAT traversal to use." msgstr "" #: src/hosting/hostbattledialog.cpp:190 msgid "Rank requirement" msgstr "" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 msgid "Select the type of rank enforcement." msgstr "" #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "" #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 msgid "You have to select a game first." msgstr "" #: src/hosting/hostbattledialog.cpp:307 msgid "No game selected." msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" "Está a usar uma versão do wxWidgets anterior à 2.8.\n" " O teste de portas não é possível.\n" " A criação de novos jogos poderá não funcionar." #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" "O servidor usado para testar a sua porta %d está inacessível.\n" "A criação de novos jogos poderá não funcionar com esta opção" #: src/hosting/hostbattledialog.cpp:427 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:459 #, fuzzy msgid "Battle not started beacuse the game you selected could not be found. " msgstr "" "A batalha não começou porque o mod que escolheu não pôde ser encontrado. " #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "Erro ao iniciar a batalha." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" "Não foi possível encontrar mapas na sua instalação do Spring. Isto pode " "ocorrer quando as opções do Spring estão incorrectas." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "Nenhum mapa encontrado" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "Opções" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 msgid "Unit Restrictions" msgstr "" #: src/hosting/mmoptionwindows.cpp:36 msgid "Change option" msgstr "" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "" #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "" #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "" #: src/iconimagelist.cpp:322 msgid "Game is closed." msgstr "" #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "" #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "" #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "" #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "" #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "" #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "" #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "" #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "" #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "" #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "" #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 msgid "Newbies guide" msgstr "" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 #, fuzzy msgid "Joining a battle:\n" msgstr "Entrar na mesma batalha" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "Criar nova batalha" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Erro do Spring" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 msgid "Singleplayer gamee" msgstr "" #: src/introguide.cpp:110 msgid "Multiplayer gamee" msgstr "" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 msgid "Disconnected from server, chat closed." msgstr "" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "" #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "" #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "" #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 msgid "&Save options" msgstr "" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "Entrar automaticamente neste canal" #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 msgid "&Spring settings" msgstr "" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "Guardar em:" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "" #: src/mainwindow.cpp:164 msgid "Channel &list" msgstr "" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "" #: src/mainwindow.cpp:166 msgid "Change &username" msgstr "" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "" #: src/mainwindow.cpp:169 msgid "&Reload maps/games" msgstr "" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "" #: src/mainwindow.cpp:178 #, fuzzy msgid "&System Info" msgstr "Informações do sistema" #: src/mainwindow.cpp:179 msgid "&Change language" msgstr "" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "" #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "Servidor" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "" #: src/mainwindow.cpp:500 msgid "You need to be connected to a server to view the channel list" msgstr "" #: src/mainwindow.cpp:500 msgid "Not connected" msgstr "" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "" #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "" #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "" #: src/mainwindow.cpp:540 #, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 msgid "No files found" msgstr "" #: src/mainwindow.cpp:656 #, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "" #: src/mainwindow.cpp:692 #, fuzzy msgid "This profile is write protected, please choose another name" msgstr "Esta batalha está protegida com palavra-chave, introduza-a." #: src/mainwindow.cpp:703 #, fuzzy msgid "Which profile do you want to load?" msgstr "Que conta de utilizador pretende remover hoje?" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 msgid "Rename" msgstr "" #: src/mainwindow.cpp:767 msgid "Enter new nickname" msgstr "" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "batalha" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "" #: src/mainwindow.h:203 msgid "Replays" msgstr "" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 msgid "Downloads" msgstr "" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "" #: src/mapctrl.cpp:897 msgid "side:" msgstr "" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 msgid "Show" msgstr "" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" #: src/mapselectdialog.cpp:95 msgid "Filter" msgstr "" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" #: src/mapselectdialog.cpp:100 msgid "Map details" msgstr "" #: src/mapselectdialog.cpp:163 msgid "Start positions" msgstr "" #: src/mapselectdialog.cpp:261 msgid "Minimum wind" msgstr "" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "" #: src/mapselectdialog.cpp:263 msgid "Average wind" msgstr "" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "" #: src/mapselectdialog.cpp:265 msgid "Aspect ratio" msgstr "" #: src/mapselectdialog.cpp:266 msgid "Number of start positions" msgstr "" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "" #: src/mmoptionswrapper.cpp:122 msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "Escolher durante o jogo" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "Escolher durante o jogo" #: src/mmoptionswrapper.cpp:132 msgid "List of restricted units" msgstr "" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "Cores e tipos de letra" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "Usar as cores do sistema" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "Normal" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "Fundo" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "Acção" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "Realçar" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "Entrar/Sair" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "As minhas mensagens" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "Cliente" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "Notificação" #: src/options/chatoptionstab.cpp:258 msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "Tipo de Letra:" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "predefinido" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "Seleccionar..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "Comportamento" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "" #: src/options/chatoptionstab.cpp:300 msgid "Copy server messages in current channel" msgstr "" #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "Realçar palavras" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "Palavras a realçar nas conversas:" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "introduza uma lista separada por ;" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "" #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 msgid "Remove" msgstr "" #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:61 msgid "Rename.." msgstr "" #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:70 msgid "Add New.." msgstr "" #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "" #: src/options/groupoptionspanel.cpp:84 msgid "Group Actions" msgstr "" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "" #: src/options/groupoptionspanel.cpp:95 msgid "Ignore Chat" msgstr "" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:101 msgid "Notify Hosted Battles" msgstr "" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:134 msgid "Highlight Color" msgstr "" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "" #: src/options/groupoptionspanel.cpp:163 msgid "Add.." msgstr "" #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "" #: src/options/groupoptionspanel.cpp:170 msgid "Remove users from group" msgstr "" #: src/options/groupoptionspanel.cpp:264 msgid "Name of new group:" msgstr "" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "" #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 msgid "Use a file dialog to find the editor binary" msgstr "" #: src/options/lobbyoptionstab.cpp:91 msgid "Autoconnect" msgstr "" #: src/options/lobbyoptionstab.cpp:94 #, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" #: src/options/lobbyoptionstab.cpp:96 msgid "Autoconnect on lobby start" msgstr "" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:104 #, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "" #: src/options/lobbyoptionstab.cpp:120 #, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "" #: src/options/lobbyoptionstab.cpp:130 msgid "Tooltips" msgstr "" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "" #: src/options/lobbyoptionstab.cpp:134 #, c-format msgid "Requires %s restart to take effect." msgstr "" #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "Notificação" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 msgid "Display time for popup notifications in seconds" msgstr "" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 msgid "Start tab" msgstr "" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "" #: src/options/lobbyoptionstab.cpp:282 msgid "Choose a editor browser executable" msgstr "" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "" #: src/options/mainoptionstab.cpp:73 msgid "General" msgstr "" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 msgid "Reloading unitsync" msgstr "" #: src/options/springoptionstab.cpp:315 #, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" #: src/playback/playbackfilter.cpp:60 msgid "Filter settings" msgstr "" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Apenas mapas que possuo" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "" #: src/playback/playbackfilter.cpp:190 msgid "Duration (hh:mm:ss):" msgstr "" #: src/playback/playbacklistctrl.cpp:42 msgid "Date" msgstr "" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Tempo de jogo" #: src/playback/playbacklistctrl.cpp:46 msgid "Duration" msgstr "" #: src/playback/playbacklistctrl.cpp:47 msgid "Spring Version" msgstr "" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize" msgstr "" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "Carregar..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "" #: src/playback/playbacktab.cpp:280 msgid "replay" msgstr "" #: src/playback/playbacktab.cpp:280 msgid "savegame" msgstr "" #: src/playback/playbacktab.cpp:288 msgid "Couldn't get your spring versions from any unitsync library." msgstr "" #: src/playback/playbacktab.cpp:306 #, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" #: src/playback/playbacktab.cpp:323 #, fuzzy msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" "Precisa de descarregar o mod antes de entrar neste jogo.\n" "\n" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "Invalid replay" msgstr "" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr "" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr "" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 msgid "There was an error downloading for the latest version.\n" msgstr "" #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "Notificação" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "Número inválido" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 #, fuzzy msgid "File doesn't exit" msgstr "O mapa não existe." #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Acção" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "Reconectar automaticamente" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 msgid "Unknown Error" msgstr "" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "" #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 msgid "Download complete." msgstr "" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer." msgstr "" #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "Reconectar automaticamente" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "Reconectar automaticamente" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 msgid "Tries to connect to the next server in the list." msgstr "" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 msgid "Do nothing" msgstr "" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "" #: src/selectusersdialog.h:67 msgid "Select Users" msgstr "" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 msgid " is online" msgstr "" #: src/serverevents.cpp:165 msgid " is now " msgstr "" #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "" #: src/serverevents.cpp:224 msgid " just went offline" msgstr "" #: src/serverevents.cpp:259 msgid " opened battle " msgstr "" #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "" #: src/serverevents.cpp:583 msgid " because: " msgstr "" #: src/serverevents.cpp:826 msgid "Server Message" msgstr "" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr "" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr "" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "" #: src/serverevents.cpp:928 #, c-format msgid "%s mutelist" msgstr "" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "" #: src/serverevents.cpp:984 msgid "Download update" msgstr "" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 msgid "Automatically moved to new battle" msgstr "" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "" #: src/singleplayertab.cpp:99 msgid "Spectate only" msgstr "" #: src/singleplayertab.cpp:102 msgid "Random start positions" msgstr "" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 msgid "Game setup error" msgstr "" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "" #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "" #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 msgid "Coulnd't load required unitsync library" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Fatal error" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 msgid "Ignore chat" msgstr "" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 msgid "Battle Autokick" msgstr "" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 msgid "Friends" msgstr "" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "" #: src/springsettings/ctrlconstants.h:229 msgid "Terrain detail" msgstr "" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "Unit LOD distance" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "higher value = units will remain detailed even when zooming out" msgstr "" #: src/springsettings/ctrlconstants.h:231 msgid "Grass detail" msgstr "" #: src/springsettings/ctrlconstants.h:231 msgid "higher value = more detailed grass" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:236 msgid "Max nano simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "Enable v-sync" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "Full-scene anti-aliasing samples" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "Master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "General sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "general volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "reply volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 msgid "Battle volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 msgid "battle volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "User interface volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "ui volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "" #: src/springsettings/ctrlconstants.h:291 #, fuzzy msgid "Reflective units" msgstr "Unidades proibidas" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "" #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 msgid "left is the default" msgstr "" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "" #: src/springsettings/ctrlconstants.h:312 #, fuzzy msgid "Use less colors" msgstr "Usar as cores do sistema" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" #: src/springsettings/ctrlconstants.h:320 #, fuzzy msgid "Show in-game player information" msgstr "Informações do sistema" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "" #: src/springsettings/ctrlconstants.h:415 msgid "Blur reflection" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Shore waves" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Enables shorewaves" msgstr "" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "Acção" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 msgid "Reflection texture size" msgstr "" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "Duração:" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 #, fuzzy msgid "off" msgstr "Desligado" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "" #: src/springsettings/frame.cpp:315 msgid "(simple mode)" msgstr "" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "" #: src/springsettings/frame.cpp:367 msgid "(expert mode)" msgstr "" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "Porta inválida" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 msgid "Hotkey Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Enter new command:" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 msgid "Hotkey SaveSettings error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 msgid "New hotkey profile found" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "" #: src/springsettings/panel_pathoption.cpp:34 msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "" #: src/springsettings/panel_pathoption.cpp:96 msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "" #: src/springsettings/presets.h:45 msgid "very low" msgstr "" #: src/springsettings/presets.h:45 msgid "very high" msgstr "" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "" #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "" #: src/springsettings/tab_quality_video.cpp:166 msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "" #: src/springsettings/tab_simple.cpp:40 msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr "" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:99 msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "" #: src/springsettings/tab_ui.cpp:37 msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "Unidades permitidas" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" #: src/tdfcontainer.cpp:131 msgid "line " msgstr "" #: src/tdfcontainer.cpp:131 msgid " , column " msgstr "" #: src/ui.cpp:175 msgid "Server password" msgstr "" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" "Registo com sucesso,\n" "agora deverá conseguir iniciar a sessão." #: src/ui.cpp:294 msgid "Registration successful" msgstr "Registo com sucesso" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "O registo falhou, a razão foi:\n" #: src/ui.cpp:458 msgid "Help error" msgstr "" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, c-format msgid "%s commands help." msgstr "" #: src/ui.cpp:465 msgid "Global commands:" msgstr "" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr "" #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr "" #: src/ui.cpp:468 msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" #: src/ui.cpp:469 msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr "" #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr "" #: src/ui.cpp:472 msgid " \"/join channel [password]\" - Joins a channel." msgstr "" #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr "" #: src/ui.cpp:474 msgid " \"/ingame\" - Shows how much time you have in game." msgstr "" #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" #: src/ui.cpp:476 msgid " \"/part\" - Leaves current channel." msgstr "" #: src/ui.cpp:477 msgid " \"/p\" - Alias to /part." msgstr "" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr "" #: src/ui.cpp:479 #, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr "" #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr "" #: src/ui.cpp:481 #, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr "" #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr "" #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "" #: src/ui.cpp:496 msgid "The topic \"" msgstr "" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "" #: src/ui.cpp:580 msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" #: src/ui.cpp:599 msgid "Online play is currently disabled." msgstr "" #: src/ui.cpp:631 #, c-format msgid "disconnected from server: %s" msgstr "" #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "" #: src/ui.cpp:839 #, c-format msgid "%s (%d users)" msgstr "" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "" #: src/ui.cpp:993 msgid "Battle closed" msgstr "" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "" #: src/ui.cpp:1337 #, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" #: src/ui.cpp:1340 msgid "Welcome" msgstr "" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 msgid "Import settings?" msgstr "" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/ui.cpp:1387 msgid "Your Version: " msgstr "" #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "" #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 msgid "Not up to date" msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "Erro do ChanServ" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" #: src/updater/updater.cpp:72 msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/updater/updater.cpp:81 #, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 msgid "the SpringLobby revision to update to" msgstr "" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 #, fuzzy msgid "Warning" msgstr "Resgisto de Aviso" #: src/user.cpp:83 msgid "away" msgstr "" #: src/user.cpp:83 msgid "back" msgstr "" #: src/user.cpp:85 msgid "ingame" msgstr "" #: src/user.cpp:85 msgid "back from game" msgstr "" #: src/user.cpp:195 msgid "Newbie" msgstr "" #: src/user.cpp:196 msgid "Beginner" msgstr "" #: src/user.cpp:197 msgid "Average" msgstr "" #: src/user.cpp:198 msgid "Above average" msgstr "" #: src/user.cpp:199 msgid "Experienced" msgstr "" #: src/user.cpp:200 msgid "Highly experienced" msgstr "" #: src/user.cpp:201 msgid "Veteran" msgstr "" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 msgid "Unknown" msgstr "" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "" #: src/useractions.h:11 msgid "none" msgstr "" #: src/useractions.h:11 msgid "highlight" msgstr "" #: src/useractions.h:11 msgid "notify login/out" msgstr "" #: src/useractions.h:11 msgid "ignore chat" msgstr "" #: src/useractions.h:11 msgid "ignore pm" msgstr "" #: src/useractions.h:12 msgid "autokick" msgstr "" #: src/useractions.h:12 msgid "notify hosted battle" msgstr "" #: src/useractions.h:12 msgid "notify status change" msgstr "" #: src/useractions.h:19 msgid "no action at all" msgstr "" #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" #: src/usermenu.h:31 msgid "Create new group..." msgstr "" #: src/usermenu.h:37 msgid "Add to group..." msgstr "" #: src/usermenu.h:38 msgid "Remove from group" msgstr "" #: src/utils/controls.h:22 msgid "Choose color" msgstr "" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 msgid "Author" msgstr "" #: src/widgets/downloadlistctrl.cpp:31 msgid "Games" msgstr "" #: src/widgets/downloadlistctrl.cpp:31 msgid "Compatible games" msgstr "" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 msgid "Suitable games" msgstr "" #: src/widgets/infopanel.cpp:74 msgid "Current version" msgstr "" #: src/widgets/infopanel.cpp:79 msgid "# downloaded" msgstr "" #: src/widgets/infopanel.cpp:84 msgid "Published on" msgstr "" #: src/widgets/infopanel.cpp:121 msgid "Changelog" msgstr "" #: src/widgets/infopanel.cpp:126 msgid "Screenshots" msgstr "" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" #, fuzzy #~ msgid "Faction" #~ msgstr "Acção" #~ msgid "Mod" #~ msgstr "Mod" #~ msgid "Mod:" #~ msgstr "Mod:" #~ msgid "Only mods i have" #~ msgstr "Apenas mods que possuo" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to host a new game" #~ msgstr "" #~ "Já se encontra a correr uma instância do Spring, feche-a primeiro de modo " #~ "a poder hospedar um novo jogo" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to join another battle." #~ msgstr "" #~ "Já se encontra a correr uma instância do Spring, feche-a de modo a poder " #~ "entrar noutra batalha." #~ msgid "Do you want me to take you to the download page?" #~ msgstr "Deseja que o leve à página de downloads?" #~ msgid "Mod not available" #~ msgstr "O mod não está disponível" #~ msgid "Enter password" #~ msgstr "Introduza a palavra chave" #~ msgid "cpu" #~ msgstr "cpu" #~ msgid "Mod Options" #~ msgstr "Opções do Mod" #~ msgid "Map Options" #~ msgstr "Opções do Mapa" #~ msgid "You don't have the mod " #~ msgstr "Não possui o mod " #~ msgid " . Please download it first" #~ msgstr " . Por favor descarregue-o primeiro" #~ msgid "Mod unavailable" #~ msgstr "Mod não disponível" #~ msgid "Test firewall" #~ msgstr "Testar a firewall" #~ msgid "t" #~ msgstr "t" #~ msgid "Not a number" #~ msgstr "Não é um número" #~ msgid "" #~ "There are two or more bots on the same team. Because bots don't know how " #~ "to share, this won't work." #~ msgstr "" #~ "Existem dois ou mais robôs na mesma equipa. Isto não irá funcionar porque " #~ "os robôs não sabem partilhar." #~ msgid "Only the host can start the battle." #~ msgstr "Apenas o anfitrião pode iniciar a batalha." #~ msgid "Only the host can lock the game." #~ msgstr "Apenas o anfitrião pode trancar o jogo." #~ msgid "Only the host can fix player colours." #~ msgstr "Apenas o anfitrião pode corrigir as cores." #~ msgid "Select all" #~ msgstr "Seleccionar tudo" #~ msgid "Continue if commander dies" #~ msgstr "Continuar se o comandante morrer" #~ msgid "End if commander dies" #~ msgstr "Terminar se o comandante morrer" #~ msgid "End condition" #~ msgstr "Condição do fim do jogo" #~ msgid "Resources" #~ msgstr "Recursos" #~ msgid "The amount of metal each player starts with." #~ msgstr "A quantidade de metal com que cada jogador começa." #~ msgid "Start Energy" #~ msgstr "Energia inicial" #~ msgid "The amount of energy each player starts with." #~ msgstr "A quantidade de energia com que cada jogador começa." #~ msgid "Max units" #~ msgstr "Max. de unidades" #~ msgid "The maximum number of units allowed per player." #~ msgstr "O número máximo de unidades permitidas por jogador." #~ msgid "Limit d-gun" #~ msgstr "Limitar o d-gun" #~ msgid "Ghosted buildings" #~ msgstr "Edifícios camuflados" #~ msgid "This chat is exclusively for participants of this battle." #~ msgstr "Esta conversa é exclusivamente para participantes nesta batalha." #~ msgid "Cannot add bot, maximum number of players already reached." #~ msgstr "" #~ "Não é possível adicionar robô, o número máximo de jogadores foi atingido." #~ msgid "Max players reached" #~ msgstr "Número máximo de jogadores atingido" #~ msgid "Browse..." #~ msgstr "Navegar..." #~ msgid "Choose a directory" #~ msgstr "Escolha um directório" springlobby-0.169/po/quot.sed0000600000176000000410000000023112105760300017516 0ustar buildbotwww-data00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g springlobby-0.169/po/remove-potcdate.sin0000600000176000000410000000066012105760300021650 0ustar buildbotwww-data00000000000000# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } springlobby-0.169/po/ro.po0000600000176000000410000055534212105760300017033 0ustar buildbotwww-data00000000000000# Romanian translation for springlobby # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the springlobby package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: springlobby\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2008-09-07 20:22+0000\n" "Last-Translator: Danut Haiduc \n" "Language-Team: Romanian \n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2008-09-20 21:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "" #: src/Helper/imageviewer.cpp:92 #, fuzzy msgid "delete" msgstr "Selectaţi" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "Eroare" #: src/Helper/imageviewer.cpp:160 #, fuzzy msgid "Choose a filename" msgstr "Aleasă în joc" #: src/Helper/imageviewer.cpp:167 #, fuzzy msgid "File successfully saved" msgstr "" "\n" "salvat cu sicces în:\n" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 #, fuzzy msgid "Success" msgstr "Setează acces..." #: src/Helper/imageviewer.cpp:170 #, fuzzy msgid "Couldn't save file" msgstr "Nu pot salva\n" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 #, fuzzy msgid "Default" msgstr "implicit" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" #: src/Helper/wxTranslationHelper.cpp:148 #, fuzzy msgid "Select the language" msgstr "Informaţii canal" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Acceptă acordul" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "Acceptaţi termenii acestui acord?" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Da" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "Nu" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 #, fuzzy msgid "User" msgstr "Muţeşte utilizator" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 #, fuzzy msgid "Channel" msgstr "canal" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Stare:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 #, fuzzy msgid "Minimum rank to join" msgstr "Rang minim necesar" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Descriere" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Descriere" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Hartă" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 #, fuzzy msgid "Mapname" msgstr "Panama" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "Joc" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "Joc" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Gazdă" #: src/battlelist/battlelistctrl.cpp:60 #, fuzzy msgid "Name of the Host" msgstr "Nume de utilizator" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Spectatori:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "Numărul jucătorilor" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 #, fuzzy msgid "Players" msgstr "Jucători:" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "Numărul jucătorilor" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Hartă" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Maximum number of Players that can join" msgstr "Numărul maxim de jucători permis în această luptă." #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "Descarcă &harta" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "Descarcă &harta" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Spectatori:" #: src/battlelist/battlelistctrl.cpp:370 #, fuzzy msgid "Active Players:" msgstr "Jucători:" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "Gazdă:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Stare:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Blocat" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "Parolat" #: src/battlelist/battlelistfilter.cpp:122 #, fuzzy msgid "Highlighted only" msgstr "Evidenţiere" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "Limită de rang:" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Descriere:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Început" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Plin" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "Deschide" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Jucător:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Tot" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Hartă:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Doar hărţi pe care le am" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "Max. Jucători:" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 #, fuzzy msgid "Game:" msgstr "Joc" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Doar hărţi pe care le am" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Spectator:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "%d" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Jucători:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 #, fuzzy msgid " Filter " msgstr "Fişier" #: src/battlelist/battlelisttab.cpp:144 #, fuzzy msgid "Activated" msgstr "Început" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 #, fuzzy msgid " Battle infos " msgstr "Listă de lupte" #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "Găzduieşte nou..." #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "Alătură-te" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" "Nu puteţi găzdui un joc cât timp sunteţi deconectat. Vă rog să vă conectaţi " "la un server." #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "Nu este conectat." #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "" "Găzduirea e dezactivată ca urmare a versiunii incompatibile de Spring " "folosită." #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Eroare Spring" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "Sunteţi deja într-o luptă" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" "Sunteţi deja într-o luptă.\n" "\n" "Doriţi să o părăsiţi şi să deschideţi una?" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" "Alăturarea la lupte e dezactivată deoarece aveţi o versiune incompatibilă de " "Spring." #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 #, fuzzy msgid "Matchmaker detected" msgstr "Prinde exceptii AI" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "Sunteţi deja într-o luptă" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "Sunteţi deja într-o luptă.\n" "\n" "Doriţi să o părăsiţi şi să vă alăturaţi acesteia?" #: src/battlelist/battlelisttab.cpp:430 #, fuzzy msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" "Să încerc să descarc pentru dvs?\n" "Puteţi vedea progresul sub tab-ul \"Download Manager\"" #: src/battlelist/battlelisttab.cpp:433 msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "Hartă indisponibilă" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "Hartă indisponibilă" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "Parola luptei" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 #, fuzzy msgid "Edit auto-joined channels" msgstr "Intră automat în acest canal" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "" #: src/channel/channelchooser.cpp:30 #, fuzzy msgid "Find channel:" msgstr "Intră pe canal..." #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 #, fuzzy msgid "Choose channels to join" msgstr "Numele canalului" #: src/channel/channellistctrl.cpp:30 #, fuzzy msgid "# users" msgstr "(%d utilizatori)" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "### Sesiune Închisă la [" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" "Nu am putut crea folder. \n" "Asiguraţi-vă că nu este protecţie la scriere.\n" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "Funcţia de jurnal este dezactivată până la repornirea SpringLobby." #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "Avertizare de jurnal" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" "Nu pot trece mesajul în jurnal.\n" "Scrierea va fi dezactivată pentru camera " #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" ".\n" "\n" "Intraţi din nou în cameră pentru a reactiva jurnalul." #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 #, fuzzy msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" "Nu pot deschide fişierul jurnal. \n" "Asiguraţi-vă că nu există protecţie la scriere.\n" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "" #: src/chatpanel.cpp:69 msgid "#" msgstr "#" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, fuzzy, c-format msgid "%d users" msgstr "(%d utilizatori)" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "click dreapta pentru opţiuni chat" #: src/chatpanel.cpp:296 msgid "Send" msgstr "Trimite" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr " !! Comandă: \"" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "\" parametri: \"" #: src/chatpanel.cpp:717 msgid "channel" msgstr "canal" #: src/chatpanel.cpp:718 msgid "battle" msgstr "luptă" #: src/chatpanel.cpp:719 msgid "server" msgstr "server" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr " a intrat în " #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr " a părăsit " #: src/chatpanel.cpp:814 #, fuzzy msgid " ** Channel topic:" msgstr "Informaţii canal" #: src/chatpanel.cpp:821 #, fuzzy msgid " ** Set by " msgstr "" "\n" " * Setată de " #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "Chat închis." #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "Sunteţi sigur că vreţi să introduceţi %d rânduri?" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr " Aveţi SpringLobby v" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr " Nu sunteţi în canal sau canalul nu există." #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" " Eroare: comanda (%s) nu există, folosiţi /help pentru o listă de comenzi " "disponibile." #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr " Nu sunteţi în luptă sau lupta nu există." #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr " Utilizatorul e deconectat." #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr " Trimis: \"" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "\"" #: src/chatpanel.cpp:1090 #, fuzzy msgid " ** User is now offline." msgstr " Utilizatorul e deconectat." #: src/chatpanel.cpp:1097 #, fuzzy msgid " ** User just got online." msgstr " Utilizatorul e deconectat." #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 #, fuzzy msgid " ** Joined Battle." msgstr " a intrat în " #: src/chatpanelmenu.cpp:34 #, fuzzy msgid "Disable text appending" msgstr "Dezactivează avertizare pt. mod expert" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "Copiază" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "Curăţă" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "Intră automat în acest canal" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "Părăseşte" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "Arată mesaje de ieşire/intrare" #: src/chatpanelmenu.cpp:68 #, fuzzy msgid "Show mute list" msgstr "Arată ponturi" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "Informaţii canal" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "Setează subiect..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "Mesajul canalului..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "Blochează..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "Deblochează" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "Înregistrează..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "Ştergere înregistrare" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "Pornit" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "Oprit" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "E pornit?" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "Protecţie spam" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "ChanServ" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "Deconectează" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "Reconectează" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "Şterge..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "Schimbă parola..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "Setează acces..." #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "Conturi" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "Emite..." #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "Administrator" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "Deschide chat" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "Intră în aceeaşi luptă" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "Timp în joc" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "Fă rost de IP şi Pitici" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "Muţeşte.." #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "Muţeşte pentru 5 minute" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "Muţeşte pentru 10 minute" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "Muţeşte pentru 30 de minute" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "Muţeşte pentru 2 ore" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "Muţeşte pentru 1 zi" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "Dez-muţeşte" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "Muţeşte" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "Kick..." #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "Ban..." #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "Unban" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "Sună" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "Dă-i palmă!" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "Op" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "DeOp" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "Eroare ChanServ" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "ChanServ nu e în acest canal." #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "Care va fi subiectul nou?" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "Mesaj:" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "Blochează canalul..." #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "Care va fi parola nouă?" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "Deblochează canalul" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "Sunteţi sigur că doriţi să deblocaţi acest canal?" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "ChanServ nu e pe acest server." #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "Înregistrează canal" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "Cine va fi numit fondatorul canalului?" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "Canal neînregistrat" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "Sunteţi sigur că doriţi să dez-înregistraţi acest canal?" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "Şterge cont utilizator" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "Ce cont de utilizator doreşti să ştergi în această zi minunată?" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "Şterge cont" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "Sunteţi sigur că doriţi să ştergeţi contul " #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "Schimbă parola contului de utilizator" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "Pentru ce cont doriţi să schimbaţi parola?" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "Care va fi noua parolă?" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "Nu a fost implementat" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "Emite mesaj" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "Mesajul de emis:" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "Muţeşte utilizator" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "Pentru câte minute să fie muţit utilizatorul?" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "Kick Utilizator" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "Motiv:" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "Kick utilizator" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "Muţeşte utilizator" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "Durata:" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" #: src/chatpanelmenu.cpp:774 #, fuzzy msgid "couldn't add user" msgstr "Nu pot lansa browser." #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "Conectare la serverul lobby" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "Server" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" "Serverul la care să vă conectaţi. Puteţi să vă conectaţi la orice server " "doriţi scriind în formatul \"adresa:portul\"." #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "Porecla" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "Parola" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "Auto-conectare data viitoare" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" "ţine minte detaliile conexiunii şi se conectează automat la următoarea " "pornire a lobby-ului" #: src/connectwindow.cpp:85 #, fuzzy msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" "Notă: Dacă nu aveţi cont, vă\n" " puteţi înregistra pe gratis la\n" "tab-ul \"Înregistrare\"" #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "OK" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Anulează" #: src/connectwindow.cpp:91 msgid "Login" msgstr "Conectare" #: src/connectwindow.cpp:92 msgid "Register" msgstr "Înregistrare" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "Poreclă" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "Port invalid." #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "Port invalid" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" "Port ieşit din interval.\n" "\n" "Trebuie să fie un întreg între 1 şi 65535" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "Gazdă/port invalidă." #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "Gazdă invalidă" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" #: src/connectwindow.cpp:294 #, fuzzy msgid "Invalid nickname" msgstr "Număr invalid" #: src/connectwindow.cpp:301 #, fuzzy msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" "Înregistrare nereuşită, motiv:\n" "Parolă / confirmare non-identice" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "Înregistrare nereuşită." #: src/countrycodes.cpp:11 msgid " Andorra" msgstr " Andorra" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "Emiratele Arabe Unite" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "Afganistan" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "Antigua şi Barbuda" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "Anguilla" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "Albania" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "Armenia" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "Antilele Olandeze" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "Angola" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "Antarctica" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "Argentina" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "Samoa Americană" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "Austria" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "Australia" #: src/countrycodes.cpp:25 #, fuzzy msgid "Åland Islands" msgstr "Insulele Caiman" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "Aruba" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "Azerbaijan" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "Bosnia şi Herţegovina" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "Barbados" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "Bangladeş" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "Belgia" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "Burkina Faso" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "Bulgaria" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "Bahrain" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "Burundi" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "Benin" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "Bermude" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "Brunei" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "Bolivia" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "Brazilia" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "Bahamas" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "Bhutan" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "Insula Bouvet" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "Botswana" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "Bielorusia" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "Belize" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "Canada" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "Cocos (Insulele Keeling)" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "Republica Centrafricană" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "Congo" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "Elveţia" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "Coasta de Fildeş" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "Insulele Cook" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "Chile" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "Camerun" #: src/countrycodes.cpp:56 msgid "China" msgstr "China" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "Columbia" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "Costa Rica" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "Cuba" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "Capul Verde" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "Insula Christmas" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "Cipru" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "Republica Cehă" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "Germania" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "Djibouti" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "Danemarca" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "Dominica" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "Republica Dominicană" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "Algeria" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "Ecuador" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "Estonia" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "Egipt" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "Sahara de Vest" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "Eritreea" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "Spania" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "Etiopia" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "Finlanda" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "Fiji" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "Insulele Falkland" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "Micronezia" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "Insulele Feroe" #: src/countrycodes.cpp:82 msgid "France" msgstr "Franţa" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "Franța, Metropolitan" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "Gabon" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "Grenada" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "Georgia" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "Guiana Franceză" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "Ghana" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "Gibraltar" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "Groenlanda" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "Gambia" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "Guineea" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "Guadalupa" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "Guineea Ecuatorială" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "Grecia" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "Georgia de Sud şi Insulele Sandwich de Sud" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "Guatemala" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "Guam" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "Guineea-Bissau" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "Guiana" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "Hong Kong" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "Heard şi Insulele McDonald" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "Honduras" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "Croaţia" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "Haiti" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "Ungaria" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "Indonezia" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "Irlanda" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "Israel" #: src/countrycodes.cpp:110 msgid "India" msgstr "India" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "Teritoriul Britanic din Oceanul Indian" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "Irak" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "Iran" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "Islanda" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "Italia" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "Jamaica" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "Iordan" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "Japonia" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "Kenya" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "Kârgâzstan" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "Cambogia" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "Kiribati" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "Comoros" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "Saint Kitts si Nevis" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "Coreea de Nord" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "Coreea de Sud" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "Kuweit" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "Insulele Caiman" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "Kazahstan" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "Laos" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "Liban" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "Saint Lucia" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "Liechtenstein" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "Sri Lanka" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "Liberia" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "Lesotho" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "Lituania" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "Luxemburg" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "Letonia" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "Libia" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "Maroc" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "Monaco" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "Rep. Moldova" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "Muntenegru" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "Madagascar" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "Insulele Marshall" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "Macedonia" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "Mali" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "Myanmar" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "Mongolia" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "Macao" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "Insulele Mariane de Nord" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "Martinica" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "Mauritania" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "Montserrat" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "Malta" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "Mauritania" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "Maldive" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "Malawi" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "Mexic" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "Malaezia" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "Mozambic" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "Namibia" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "Noua Caledonie" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "Niger" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "Insula Norfolk" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "Nigeria" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "Nicaragua" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "Olanda" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "Norvegia" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "Nepal" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "Nauru" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "Zonă Neutră (Arabia Saudită/Irak)" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "Niue" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "Noua Zeelandă" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "Oman" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "Panama" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "Peru" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "Polinezia Franceză" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "Papua Noua Guinee" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "Filipine" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "Pakistan" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "Polonia" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "Sf. Pierre şi Miquelon" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "Pitcairn" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "Puerto Rico" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "Portugalia" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "Palau" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "Paraguay" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "Qatar" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "Reunion" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "România" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "Serbia" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "Federația Rusă" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "Rwanda" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "Arabia Saudită" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "Insulele Solomon" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "Seychelles" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "Sudan" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "Suedia" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "Singapore" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "Sfânta Elena" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "Slovenia" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "Svalbard şi Jan Mayen" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "Slovacia (Republica Slovacă)" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "Sierra Leone" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "San Marino" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "Senegal" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "Somalia" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "Suriname" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "Sao Tome şi Principe" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "Uniunea Sovietică (fosta)" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "El Salvador" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "Siria" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "Swaziland" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "Insulele Turks şi Caicos" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "Ciad" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "Teritoriile Franceze de Sud" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "Togo" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "Tailanda" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "Tajikistan" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "Tokelau" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "Turkmenistan" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "Tunisia" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "Tonga" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "Timorul de Est" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "Turcia" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "Trinidad şi Tobago" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "Tuvalu" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "Taiwan" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "Tanzania" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "Ucraina" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "Uganda" #: src/countrycodes.cpp:234 #, fuzzy msgid "United Kingdom" msgstr "Regatul Unit (Marea Britanie)" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "Insulele Minore Externe ale Statelor Unite" #: src/countrycodes.cpp:236 msgid "United States" msgstr "Statele Unite" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "Uruguay" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "Uzbekistan" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "Vatican" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "Sfântul Vincent şi Grenadine" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "Venezuela" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "Insulele Virgine (Britanice)" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "Insulele Virgine (SUA)" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "Vietnam" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "Vanuatu" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "Wallis şi Futuna" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "Samoa" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "Yemen" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "Mayotte" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "Iugoslavia" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "Africa de Sud" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "Zambia" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "Zair" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "Zimbabwe" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "(Numele complet al ţării nu a fost găsit)" #: src/crashreport.cpp:168 msgid "System informations" msgstr "Informaţii de sistem" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "Jurnal extins al aplicaţiei" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "Ultimul script pentru Spring lansat" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "Nici o hartă găsită" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "la rând" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "Descarcă" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "% complet" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 #, fuzzy msgid "Name" msgstr "Joc" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "Dimensiune" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Hartă" #: src/downloader/filelister/filelistctrl.cpp:174 #, fuzzy msgid "game" msgstr "Porecla" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "necunoscut" #: src/downloader/filelister/filelistdialog.cpp:26 #, fuzzy msgid "Search and download files" msgstr "Caută fişier" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:55 #, fuzzy msgid "Download selected" msgstr "Descărcare completă" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Poreclă:" #: src/downloader/filelister/filelistfilter.cpp:69 #, fuzzy msgid "Filetype:" msgstr "Fişier" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" "\n" "salvat cu sicces în:\n" #: src/downloader/httpdownloader.cpp:78 #, fuzzy msgid "" "\n" "successfully unzipped in:\n" msgstr "" "\n" "salvat cu sicces în:\n" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "Nu pot salva\n" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" "\n" "la:\n" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "Descărcare completă" #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "Atenţie: exces de mesaje" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "Adaugă bot" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Poreclă:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "AI:" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "Alege biblioteca AI pentru acest bot." #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 #, fuzzy msgid "value" msgstr "Valoare" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "Adaugă Bot" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "Nu au fost găsiţi boţi în instalaţia dvs. Spring." #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "Nu au fost găsite biblioteci AI." #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "Auto-echilibrează jucătorii în echipe" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "Metodă" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "Împarte rangurile în mod egal" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Aleatoare" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "Clanuri" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Niciunul" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "Echitabil" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "Întotdeauna" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" "Pune membrii aceluiaşi clan (utilizatori cu acelaşi titlu de clan, de ex. " "[smurf]Alice şi [smurf]Bob) împreună. \n" "Nimic: nimic special pentru clanuri.\n" "Echitabil: membrii unui clan sunt puşi în aceeaşi echipă, cu excepţia " "alianţei nedrepte.\n" "Totdeauna: membrii unui clan sunt puşi întotdeauna în aceeaşi echipă, " "indiferent de rang." #: src/hosting/autobalancedialog.cpp:53 #, fuzzy msgid "Number of allies" msgstr "Numărul jucătorilor" #: src/hosting/autobalancedialog.cpp:56 #, fuzzy msgid "Auto select" msgstr "Reconectează" #: src/hosting/battlemaptab.cpp:69 #, fuzzy msgid "Select" msgstr "Alege..." #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "Opţiune" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "Valoare" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "Viteza vântului" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "Puterea valurilor" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "Gravitaţie" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "Raza extractoarelor" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "Maxim de metal" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "Fixată" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "Aleasă în joc" #: src/hosting/battlemaptab.cpp:103 #, fuzzy msgid "Chose before game" msgstr "Aleasă în joc" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "Poziţii de început" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "Unităţi restricţionate" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "Unităţi permise" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "Unităţile din această listă vor fi disponibile în joc." #: src/hosting/battleoptionstab.cpp:77 #, fuzzy msgid "Disable selected units." msgstr "Activează toate unităţile" #: src/hosting/battleoptionstab.cpp:81 #, fuzzy msgid "Re-enable selected units." msgstr "Activează toate unităţile" #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "Activează toate unităţile" #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "Unităţi restricţionate" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "Unităţile din această listă nu vor fi disponibile în joc." #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "" #: src/hosting/battleoptionstab.cpp:242 #, fuzzy msgid "Unit restriction" msgstr "Unităţi restricţionate" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "Echipă" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "Aliat" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "Bonus de resurse" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "Parte" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "Setează culoarea" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "Setează bonusul de resurse" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "Spectator" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "Kick" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "Vă rog introduceţi o valoare între 0 şi 100" #: src/hosting/battleroomlistctrl.cpp:750 #, fuzzy msgid "AI (bot)\n" msgstr "Adaugă bot" #: src/hosting/battleroomlistctrl.cpp:754 #, fuzzy msgid "Human\n" msgstr "Oman" #: src/hosting/battleroomlistctrl.cpp:759 #, fuzzy msgid "Spectator\n" msgstr "Spectator" #: src/hosting/battleroomlistctrl.cpp:763 #, fuzzy msgid "Player\n" msgstr "Jucător:" #: src/hosting/battleroomlistctrl.cpp:768 #, fuzzy msgid "Host\n" msgstr "Gazdă" #: src/hosting/battleroomlistctrl.cpp:772 #, fuzzy msgid "Client\n" msgstr "Client" #: src/hosting/battleroomlistctrl.cpp:777 #, fuzzy msgid "Ready\n" msgstr "Întotdeauna" #: src/hosting/battleroomlistctrl.cpp:781 #, fuzzy msgid "Not ready\n" msgstr "Nu sunt gata" #: src/hosting/battleroomlistctrl.cpp:786 #, fuzzy msgid "In sync" msgstr "Activează v-sync" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "Jucătorii cu acelaşi număr de echipă controlează unităţile în comun." #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" "Jucătorii cu acelaşi număr de aliat lucrează împreună pentru a atinge " "victoria." #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "Alegeţi o culoare pentru a vă identifica unităţile în joc." #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "Alegeţi-vă rasa" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "Intraţi ca spectator în loc să jucaţi" #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "Reconectează" #: src/hosting/battleroomtab.cpp:144 msgid "automatically unspec when there's a free slot" msgstr "" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "Sunt gata" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "Apăsaţi aici dacă ştiţi setările luptei şi sunteţi gata." #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "Culoare" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" "O previzualizare a hărţii selectate. Puteţi vedea poziţiile de start, sau " "(dacă puse) zonele de start." #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Găzduieşte nou..." #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Găzduieşte luptă nouă" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "Părăseşte lupta şi întoarce-te la lista de lupte" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "Start" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "Adaugă Bot..." #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "Adaugă un jucător controlat de calculator" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "Previne alăturarea altor jucători" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Descriere" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 #, fuzzy msgid "AutoSpect" msgstr "Reconectează" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Start" #: src/hosting/battleroomtab.cpp:209 msgid "Automatically start the battle when all players are ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:213 #, fuzzy msgid "Lock Balance" msgstr "Balanţă" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 #, fuzzy msgid "Ring unsynced" msgstr "Activează v-sync" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 #, fuzzy msgid "Ring ..." msgstr "Sună" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "Nu sunt gata" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 #, fuzzy msgid "Force spectate ..." msgstr "Porneşte cu forţa?" #: src/hosting/battleroomtab.cpp:235 #, fuzzy msgid "Balance alliances" msgstr "Doar gazda poate echilibra alianţele." #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "Setează culoarea" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "Face culorile jucătorilor mai uşor de distins." #: src/hosting/battleroomtab.cpp:241 #, fuzzy msgid "Balance teams" msgstr "Balanţă" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "" #: src/hosting/battleroomtab.cpp:255 #, fuzzy msgid "Save" msgstr "Salvează..." #: src/hosting/battleroomtab.cpp:256 #, fuzzy msgid "Save a set of options." msgstr "Salvează un set de restricţii" #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 #, fuzzy msgid "Delete" msgstr "Selectaţi" #: src/hosting/battleroomtab.cpp:261 #, fuzzy msgid "Delete a set of options." msgstr "Salvează un set de restricţii" #: src/hosting/battleroomtab.cpp:265 #, fuzzy msgid "Set default" msgstr "implicit" #: src/hosting/battleroomtab.cpp:266 msgid "Use the current set of options as game's default." msgstr "" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "Zone de start" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "Continuă" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "Sfârşit" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "Harta nu există." #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 #, fuzzy msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" "Unii jucători nu sunt gata încă.\n" "Să îi sun?" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "Nu sunt gata" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "Aleasă în joc" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Descriere" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "Ping Timeout!" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "eroare" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 #, fuzzy msgid "Delete preset" msgstr "Selectaţi" #: src/hosting/battleroomtab.cpp:996 #, fuzzy msgid "Set game default preset" msgstr "implicit" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "Găzduieşte luptă nouă" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "O descriere scurtă a jocului, aceasta va apărea în lista de lupte." #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Descriere" #: src/hosting/hostbattledialog.cpp:91 msgid "Automatically write the battle description when a user joins." msgstr "" #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "Alegeţi mod-ul cu care să jucaţi." #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "Parolat" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "" "Parola necesară pentru joc. Lăsaţi necompletat pentru a nu avea parolă." #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "Port" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "Portul de ascultare UDP pentru găzduire. Implicit: 8452" #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 #, fuzzy msgid "Randomly picks an available one" msgstr "indisponibil" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "Numărul jucătorilor" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "Numărul maxim de jucători permis în această luptă." #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "Hole punching" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "Traversare NAT" #: src/hosting/hostbattledialog.cpp:185 #, fuzzy msgid "NAT traversal to use." msgstr "Traversare NAT" #: src/hosting/hostbattledialog.cpp:190 msgid "Rank requirement" msgstr "" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 #, fuzzy msgid "Select the type of rank enforcement." msgstr "Alegeţi mod-ul cu care să jucaţi." #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "Începe găzduirea luptei." #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 #, fuzzy msgid "You have to select a game first." msgstr "Trebuie să alegeţi un mod prima dată." #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "Nici un mod ales." #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" "Versiunea dvs. de wxWidgets este sub 2.8.\n" " Testarea porturilor nu va funcţiona.\n" " Găzduirea poate să eşueze." #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" "Server-ul folosit pentru testarea portului %d este inaccesibil. \n" "Găzduirea poate să nu funcţioneze cu această setare." #: src/hosting/hostbattledialog.cpp:427 #, fuzzy, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "Lupta nu a fost pornită pentru că portul selectat (%d) nu este capabil de a " "primi pachete.\n" "Verificaţi configuraţia router-ului şi firewall-ului sau alegeţi alt port.\n" "\n" "Dacă totul eşuează, activaţi opţiunea Hole Punching NAT Traversal\n" " din setările pentru găzduire." #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "Lupta nu a fost pornită pentru că portul selectat (%d) nu este capabil de a " "primi pachete.\n" "Verificaţi configuraţia router-ului şi firewall-ului sau alegeţi alt port.\n" "\n" "Dacă totul eşuează, activaţi opţiunea Hole Punching NAT Traversal\n" " din setările pentru găzduire." #: src/hosting/hostbattledialog.cpp:459 #, fuzzy msgid "Battle not started beacuse the game you selected could not be found. " msgstr "" "Lupta nu a fost pornită pentru că mod-ul pe care l-aţi ales nu poate fi " "găsit. " #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "Eroare la pornirea luptei." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" "Nu pot găsi hărţi în instalaţia dvs. Spring. Acest lucru se poate întâmpla " "şi dacă nu aţi setat corect Spring." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "Nici o hartă găsită" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "Cameră de luptă" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "Opțiuni" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 #, fuzzy msgid "Unit Restrictions" msgstr "Unităţi restricţionate" #: src/hosting/mmoptionwindows.cpp:36 #, fuzzy msgid "Change option" msgstr "Opţiuni UI" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "" #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "" #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "" #: src/iconimagelist.cpp:322 #, fuzzy msgid "Game is closed." msgstr "Chat închis." #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "" #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "" #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "" #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "" #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "" #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "" #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "" #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "" #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "" #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "" #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 #, fuzzy msgid "Newbies guide" msgstr "Nou-venit" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 #, fuzzy msgid "Joining a battle:\n" msgstr "Intră în aceeaşi luptă" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "Găzduieşte luptă nouă" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Eroare Spring" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 msgid "Singleplayer gamee" msgstr "" #: src/introguide.cpp:110 msgid "Multiplayer gamee" msgstr "" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "Orice fişier (*)|*" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "App Bundles (*.app)|*.app|Orice fişier (*.*)|*.*" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 #, fuzzy msgid "Disconnected from server, chat closed." msgstr "Răspuns necunoscut de la server" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "" #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "Total Intrare: " #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "Anulează Descărcarea" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "&Conectare..." #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "&Deconectare" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 #, fuzzy msgid "&Save options" msgstr "Opţiuni UI" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "&Termină" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "Intră automat în acest canal" #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "SpringSettings" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "Opţiuni UI" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "&Intrare pe canal..." #: src/mainwindow.cpp:164 #, fuzzy msgid "Channel &list" msgstr "Informaţii canal" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "Deschide chat &privat" #: src/mainwindow.cpp:166 #, fuzzy msgid "Change &username" msgstr "Informaţii canal" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "" #: src/mainwindow.cpp:169 #, fuzzy msgid "&Reload maps/games" msgstr "&Reîncarcă hărţi/mod-uri" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "Verifică pentru Versiune nouă" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "&Despre" #: src/mainwindow.cpp:178 #, fuzzy msgid "&System Info" msgstr "Informaţii de sistem" #: src/mainwindow.cpp:179 #, fuzzy msgid "&Change language" msgstr "Informaţii canal" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "&Raportează o problemă..." #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "&Documentare" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "Server" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "&Editare" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "&Unelte" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "&Ajutor" #: src/mainwindow.cpp:500 msgid "You need to be connected to a server to view the channel list" msgstr "" #: src/mainwindow.cpp:500 #, fuzzy msgid "Not connected" msgstr "Statut: conectat" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "Intră pe canal..." #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "Numele canalului" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "Deschide chat privat..." #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "Nume de utilizator" #: src/mainwindow.cpp:540 #, fuzzy, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" "SpringLobby este un client independent de platformă pentru motorul RTS " "Spring." #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 #, fuzzy msgid "No files found" msgstr "Nici o hartă găsită" #: src/mainwindow.cpp:656 #, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "" #: src/mainwindow.cpp:692 #, fuzzy msgid "This profile is write protected, please choose another name" msgstr "Această luptă e parolată; introduceţi parola." #: src/mainwindow.cpp:703 #, fuzzy msgid "Which profile do you want to load?" msgstr "Ce cont de utilizator doreşti să ştergi în această zi minunată?" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "Şterge..." #: src/mainwindow.cpp:767 msgid "Enter new nickname" msgstr "" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "Chat" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "Listă de lupte" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "" #: src/mainwindow.h:203 #, fuzzy msgid "Replays" msgstr "Întotdeauna" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 #, fuzzy msgid "Downloads" msgstr "Descarcă" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "Reincarcă" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "Descarcă" #: src/mapctrl.cpp:897 msgid "side:" msgstr "parte:" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "aliat: %d" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "bonus: %d%%" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 #, fuzzy msgid "Show" msgstr "Arată totul" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" #: src/mapselectdialog.cpp:95 #, fuzzy msgid "Filter" msgstr "Fişier" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" #: src/mapselectdialog.cpp:100 #, fuzzy msgid "Map details" msgstr "Maxim de metal" #: src/mapselectdialog.cpp:163 #, fuzzy msgid "Start positions" msgstr "Poziţii de început" #: src/mapselectdialog.cpp:261 #, fuzzy msgid "Minimum wind" msgstr "Rang minim necesar" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "" #: src/mapselectdialog.cpp:263 #, fuzzy msgid "Average wind" msgstr "Mediu" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "" #: src/mapselectdialog.cpp:265 #, fuzzy msgid "Aspect ratio" msgstr "Spectator" #: src/mapselectdialog.cpp:266 #, fuzzy msgid "Number of start positions" msgstr "Poziţii de început" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "Tipul poziţiei de început" #: src/mmoptionswrapper.cpp:122 #, fuzzy msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" "Cum vor selecta jucătorii unde să înceapă:\n" "0: poziţie fixă pe hartă\n" "1: poziţie aleatorie pe hartă\n" "2: alegere în joc\n" "3: alegere în lobby înaintea începerii" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "Aleasă în joc" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "Aleasă în joc" #: src/mmoptionswrapper.cpp:132 #, fuzzy msgid "List of restricted units" msgstr "Unităţi restricţionate" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "s" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "ţ" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "r" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "Executabile (*.exe)|*.exe|Orice fişier (*.*)|*.*" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "Culori şi font" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "Foloseşte culorile sistemului" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "Normal" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "Fundal" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "Acţiune" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "Evidenţiere" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "Intră/părăseşte" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "Mesajele mele" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "Client" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "Marcaj de timp" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "Notificare" #: src/options/chatoptionstab.cpp:258 #, fuzzy msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" "[19:35] ** Server ** Conectat la TAS Server.\n" "[22:30] salut lume\n" "[22:30] ** Tip2 a intrat pe canal.\n" "[22:30] * Tip2 crede ca is fain culorile lui\n" "[22:45] o serios?\n" "[22:46] Poate ar fi mai bine altcumva, le mai editez io...\n" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "Font" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "implicit" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "Alege..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "Comportament" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "" #: src/options/chatoptionstab.cpp:300 #, fuzzy msgid "Copy server messages in current channel" msgstr " \"/channels\" - Arată canalele active" #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "Jurnale de chat" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "Salvează jurnalele de chat" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "Evidențiază cuvinte" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "Cuvinte de evidențiat în chat:" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "introduceţi o listă separată prin \";\"" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "În plus, sună avertizare/pâlpâie bara de titlu " #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "La pornirea jocului opreşte modul" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "Pauză toate torrent-ele" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "Limite de viteză:" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "upload (KB/s)" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "descărcare (KB/s)" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "Numere" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "viteză maximă upload în KB/s (-1 pt infinit)" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "viteză maximă download în KB/s (-1 pt infinit)" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "port folosit pentru conexiuni torrent" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "număr maxim de conexiuni simultane" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 #, fuzzy msgid "Remove" msgstr "Şterge..." #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:61 #, fuzzy msgid "Rename.." msgstr "Şterge..." #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:70 #, fuzzy msgid "Add New.." msgstr "Adaugă Bot..." #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "" #: src/options/groupoptionspanel.cpp:84 #, fuzzy msgid "Group Actions" msgstr "Acţiune" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "" #: src/options/groupoptionspanel.cpp:95 #, fuzzy msgid "Ignore Chat" msgstr "Deschide chat" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:101 #, fuzzy msgid "Notify Hosted Battles" msgstr "Găzduieşte luptă nouă" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:134 #, fuzzy msgid "Highlight Color" msgstr "Evidențiază cuvinte" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "" #: src/options/groupoptionspanel.cpp:163 #, fuzzy msgid "Add.." msgstr "Adaugă Bot..." #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "" #: src/options/groupoptionspanel.cpp:170 #, fuzzy msgid "Remove users from group" msgstr "Şterge cont utilizator" #: src/options/groupoptionspanel.cpp:264 #, fuzzy msgid "Name of new group:" msgstr "Nume de utilizator" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "Navigator web" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "Navigator implicit" #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "Foloseşte preferinţa de sistem pentru browser" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "Specificaţi:" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "Specifică browser-ul preferat" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "Răsfoiește" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "Foloseşte un dialog de căutare pentru a găsi executabilul" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 #, fuzzy msgid "Use a file dialog to find the editor binary" msgstr "Foloseşte un dialog de căutare pentru a găsi executabilul" #: src/options/lobbyoptionstab.cpp:91 #, fuzzy msgid "Autoconnect" msgstr "Reconectează" #: src/options/lobbyoptionstab.cpp:94 #, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" #: src/options/lobbyoptionstab.cpp:96 #, fuzzy msgid "Autoconnect on lobby start" msgstr "Conectare la serverul lobby" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:104 #, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "" #: src/options/lobbyoptionstab.cpp:120 #, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "" #: src/options/lobbyoptionstab.cpp:130 #, fuzzy msgid "Tooltips" msgstr "&Unelte" #: src/options/lobbyoptionstab.cpp:131 #, fuzzy msgid "Show Tooltips?" msgstr "Arată ponturi" #: src/options/lobbyoptionstab.cpp:134 #, c-format msgid "Requires %s restart to take effect." msgstr "" #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" #: src/options/lobbyoptionstab.cpp:144 #, fuzzy msgid "Match exact" msgstr "Prinde exceptii AI" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "Notificare" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 msgid "Display time for popup notifications in seconds" msgstr "" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 #, fuzzy msgid "Start tab" msgstr "Metal de început" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "Alegeţi executabilul unui navigator" #: src/options/lobbyoptionstab.cpp:282 #, fuzzy msgid "Choose a editor browser executable" msgstr "Alegeţi executabilul unui navigator" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "Spring" #: src/options/mainoptionstab.cpp:73 #, fuzzy msgid "General" msgstr "Senegal" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "Restaurează" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "Aplică" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "Executabilul Spring" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "Loc" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "Găseşte" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "Biblioteca UnitSync" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "Configurare automată" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "Alegeţi un executabil Spring" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "Bibliotecă" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "Orice fişier" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 msgid "Reloading unitsync" msgstr "" #: src/options/springoptionstab.cpp:315 #, fuzzy, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" "SpringSettings nu poate să încarce biblioteca unitsync.\n" "Atenţie la setările unitsync.\n" "Versiunea dvs. Spring trebuie să fie 0.76 sau mai nouă, altfel \n" "va eşua în orice caz." #: src/options/springoptionstab.cpp:355 #, fuzzy msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "Nu fă nimic (folosiţi în cazul în care ştiţi ce faceţi)" #: src/options/springoptionstab.cpp:355 #, fuzzy msgid "Data dir wizard" msgstr "Wizard pentru început" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "Alegeţi un director" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" "Ceva a eşuat în crearea directoarelor\n" "Vă rog creaţi manual următoarele foldere:" #: src/playback/playbackfilter.cpp:60 #, fuzzy msgid "Filter settings" msgstr "Salvare setări" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Doar hărţi pe care le am" #: src/playback/playbackfilter.cpp:164 #, fuzzy msgid "Filesize in KB:" msgstr "Mărime fişier (MB)" #: src/playback/playbackfilter.cpp:190 #, fuzzy msgid "Duration (hh:mm:ss):" msgstr "Durata:" #: src/playback/playbacklistctrl.cpp:42 #, fuzzy msgid "Date" msgstr "Selectaţi" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Setează acces..." #: src/playback/playbacklistctrl.cpp:46 #, fuzzy msgid "Duration" msgstr "Durata:" #: src/playback/playbacklistctrl.cpp:47 #, fuzzy msgid "Spring Version" msgstr "Eroare Spring" #: src/playback/playbacklistctrl.cpp:48 #, fuzzy msgid "Filesize" msgstr "Mărime fişier (MB)" #: src/playback/playbacklistctrl.cpp:48 #, fuzzy msgid "Filesize in kilobyte" msgstr "Mărime fişier (MB)" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "Fişier" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "Descarcă &mod-ul" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "Încarcă..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "Întotdeauna" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "savegame" msgstr "Salvează..." #: src/playback/playbacktab.cpp:288 #, fuzzy msgid "Couldn't get your spring versions from any unitsync library." msgstr "" "Nu pot găsi versiunea dvs. Spring din biblioteca UnitSync.\n" "\n" "Jocul online va fi dezactivat." #: src/playback/playbacktab.cpp:306 #, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "" #: src/playback/playbacktab.cpp:319 #, fuzzy msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" "Să încerc să descarc pentru dvs?\n" "Puteţi vedea progresul sub tab-ul \"Download Manager\"" #: src/playback/playbacktab.cpp:323 msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" #: src/playback/playbacktab.cpp:356 #, fuzzy msgid "Invalid replay" msgstr "Port invalid" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "Ai fost dat afară din luptă!" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "Dat afară de către gazdă" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr "" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr "" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 #, fuzzy msgid "There was an error downloading for the latest version.\n" msgstr "" "S-a produs o eroare la verificarea versiunii.\n" "Vă rugăm încercaţi din nou mai târziu.\n" "Dacă problema persistă, vă rugăm să o raportaţi folosind Ajutor -> Raportare " "problemă." #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "Notificare" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "Număr invalid" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 #, fuzzy msgid "File doesn't exit" msgstr "Harta nu există." #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Început" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "Reconectează" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 #, fuzzy msgid "Unknown Error" msgstr "necunoscut" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 #, fuzzy msgid "Download complete, location is: " msgstr "Descărcare completă" #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 #, fuzzy msgid "Download complete." msgstr "Descărcare completă" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 #, fuzzy msgid "Couldn't launch installer. File location is: " msgstr "Nu pot lansa browser. URL-ul este: " #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 #, fuzzy msgid "Couldn't launch installer." msgstr "Nu pot lansa browser." #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "Reconectează" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "Reconectează" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 msgid "Tries to connect to the next server in the list." msgstr "" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 #, fuzzy msgid "Do nothing" msgstr "Hole punching" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "" #: src/selectusersdialog.h:67 #, fuzzy msgid "Select Users" msgstr "Selectaţi" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 #, fuzzy msgid " is online" msgstr " Utilizatorul e deconectat." #: src/serverevents.cpp:165 msgid " is now " msgstr "" #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "OnUserStatus() eşuat ! (excepţie)" #: src/serverevents.cpp:224 #, fuzzy msgid " just went offline" msgstr " Utilizatorul e deconectat." #: src/serverevents.cpp:259 #, fuzzy msgid " opened battle " msgstr " a intrat în " #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "Intrare pe canal eşuată" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "Nu pot intra pe canalul " #: src/serverevents.cpp:583 msgid " because: " msgstr " deoarece: " #: src/serverevents.cpp:826 msgid "Server Message" msgstr "Mesaj de la Server" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr " are ip=%s" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr " nu suportă, de fapt, nat traversal" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "" #: src/serverevents.cpp:928 #, fuzzy, c-format msgid "%s mutelist" msgstr "Listă de lupte" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "" #: src/serverevents.cpp:984 #, fuzzy msgid "Download update" msgstr "Descărcare completă" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 msgid "Automatically moved to new battle" msgstr "" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" "Puteţi trage pictograma bot/soare pentru a defini poziţia de start.\n" " Treceţi cu mouse-ul peste ea pentru a putea schimba partea, alianţa şi " "bonusul." #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "Adaugă bot..." #: src/singleplayertab.cpp:99 #, fuzzy msgid "Spectate only" msgstr "Spectator" #: src/singleplayertab.cpp:102 #, fuzzy msgid "Random start positions" msgstr "Poziţii de început" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "-- Alegeţi unul --" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 #, fuzzy msgid "Game setup error" msgstr "Eroare la setarea jocului" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "Trebuie să alegeţi întâi o hartă." #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" "Continuă fără a adăuga bot?\n" " Jocul se va termina repede.\n" " " #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "Nici un bot adăugat" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "Nu puteţi porni altă instanţă de Spring cât timp alta este pornită." #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 #, fuzzy msgid "Coulnd't load required unitsync library" msgstr "Alegeţi o cale către unitsync" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 #, fuzzy msgid "Fatal error" msgstr "Eroare critică" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" "Această aplicaţie a generat o eroare fatală şi va fi terminată.\n" "Generarea unui raport nu este posibilă.\n" "\n" "Vă rugăm obţineţi o bibliotecă wxWidgets care suportă wxUSE_DEBUGREPORT" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "Eroare critică" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 #, fuzzy msgid "Ignore chat" msgstr "Deschide chat" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 #, fuzzy msgid "Battle Autokick" msgstr "Listă de lupte" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 #, fuzzy msgid "Friends" msgstr "Găseşte" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "Viteza rotiţei de scroll" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" "Valorile mai mari înseamnă zoom mai rapid cu rotiţa.\n" "Valorile negative vor inversa direcţia zoom-ului.\n" "Rezultatele pot depinde de modul camerei!" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "Mărimea shadow-map" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" "valori mai mari = umbre care arată mai bine\n" "valori posibile: 1024, 2048, 4096, 8192" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "Distanţa vederii copacilor" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "setează distanţa maximă la care pomii vor fi afişaţi" #: src/springsettings/ctrlconstants.h:229 msgid "Terrain detail" msgstr "Detaliul reliefului" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "valoare mai mare = relief mai detaliat" #: src/springsettings/ctrlconstants.h:230 #, fuzzy msgid "Unit LOD distance" msgstr "Distanţa pictogramelor pt. unităţi" #: src/springsettings/ctrlconstants.h:230 #, fuzzy msgid "higher value = units will remain detailed even when zooming out" msgstr "valoare mai mare = unităţi mai detaliate" #: src/springsettings/ctrlconstants.h:231 msgid "Grass detail" msgstr "Detaliile vegetaţiei" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "higher value = more detailed grass" msgstr "valoare mai mare = iarbă mai detaliată" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "Proiecţii pe pământ [decals]" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "Distanţa pictogramelor pt. unităţi" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" "hotărăşte la ce distanţă unităţile sunt afişate complet; nu pictograme\n" "valoare mai mare = distanţă mai mare = unităţi mai multe afişate" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "Maxim de particule simultane" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "limitează câte particule sunt afişate în acelaşi timp" #: src/springsettings/ctrlconstants.h:236 #, fuzzy msgid "Max nano simultaneous particles" msgstr "Maxim de particule simultane" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "Rulează full-screen" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "rulează pe tot ecranul sau într-o fereastră?" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "Mod dual-screen" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "dacă aveţi două monitoare le puteţi folosi pe ambele" #: src/springsettings/ctrlconstants.h:245 #, fuzzy msgid "Enable v-sync" msgstr "Activează v-sync" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "Sincronizare verticală pornit/oprit" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "16-bit Z-buffer" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "umplutură" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "24-bit Z-buffer" #: src/springsettings/ctrlconstants.h:259 #, fuzzy msgid "Full-scene anti-aliasing samples" msgstr "Full-screen anti-aliasing samples" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "cât de mult anti-aliasing să fie folosit" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "Maxim de sunete simultane" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" "numărul maxim de sunete care să fie redate în acelaşi timp\n" "Setaţi ca zero pentru a dezactiva sunetul de tot." #: src/springsettings/ctrlconstants.h:273 #, fuzzy msgid "Master sound volume" msgstr "volumul de sunet total" #: src/springsettings/ctrlconstants.h:273 #, fuzzy msgid "master sound volume" msgstr "volumul de sunet total" #: src/springsettings/ctrlconstants.h:274 #, fuzzy msgid "General sound volume" msgstr "volumul de sunet total" #: src/springsettings/ctrlconstants.h:274 #, fuzzy msgid "general volume relative to master volume" msgstr "volumul cu care unităţile răspund - afectat de volumul global" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "Volum de sunet de răspuns" #: src/springsettings/ctrlconstants.h:275 #, fuzzy msgid "reply volume relative to master volume" msgstr "volumul cu care unităţile răspund - afectat de volumul global" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "Battle volume" msgstr "Cameră de luptă" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "battle volume relative to global volume" msgstr "volumul cu care unităţile răspund - afectat de volumul global" #: src/springsettings/ctrlconstants.h:277 #, fuzzy msgid "User interface volume" msgstr "Volum de sunet de răspuns" #: src/springsettings/ctrlconstants.h:277 #, fuzzy msgid "ui volume relative to global volume" msgstr "volumul cu care unităţile răspund - afectat de volumul global" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "Umbre (încet)" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "activează umbre?" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "Copaci 3D" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" "doriţi copaci care arată mai bine?\n" "necesită placă video Geforce 2/Radeon 8500/Intel 830 sau mai bună" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "Nori cu rezoluţie înaltă" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" "doriţi un cer mai frumos?\n" "necesită placă video Geforce 5/Radeon 9500/Intel 915 sau mai bună" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "Nori dinamici (încet)" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "doriţi nori care se mişcă?" #: src/springsettings/ctrlconstants.h:291 msgid "Reflective units" msgstr "Reflexii pe unităţi" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" "unităţi strălucitoare\n" "necesită placă video Geforce 5/Radeon 9500/Intel 915 sau mai bună" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "Nu folosi shader-e pentru hărţi SM3" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "aveţi probleme cu hărţi SM3? activaţi asta" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "Activează suport pentru LuaShaders" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "face nişte efecte ca lumea" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "Texturi LOS de rezoluţie înaltă" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "Line of Sight (câmp vizual) mai clar" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "Puncte fine" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "aplicare anti-aliasing pe puncte?" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "Linii fine" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "aplicare anti-aliasing pe linii?" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "Arată comenzi pe mini-hartă" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "Daţi ordine pe mini-hartă cum aţi face " #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "Arată comenzi pe mini-hartă" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "valoarea implicită e \"pornit\"" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "Arată pictograme pe mini-hartă" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "Arată marcaje pe mini-hartă" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "Mini-hartă pe stânga (un singur ecran)" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 msgid "left is the default" msgstr "pe stânga e implicit" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "Mini-hartă pe stânga (dual screen)" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "Culori de pe mini-hartă simplificate" #: src/springsettings/ctrlconstants.h:312 msgid "Use less colors" msgstr "Foloseşte mai puţine culori" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "Nanospray colorat ca echipele" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "Să fie nano-particulele de culoarea echipelor?" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "Hartă de înălţime colorizată" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "face diferenţele în înălţime mai evidente" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "Arată ceas în joc" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" "necesită LuaWidgets (unelte Lua).\n" "Va fi arătat în colţul din dreapta-jos." #: src/springsettings/ctrlconstants.h:320 msgid "Show in-game player information" msgstr "Arată informaţii despre jucători în joc" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "Arată numărul de cadre/secundă (FPS) în joc" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "Reglează afişajul la alt-tab" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "Nu schimbaţi dacă nu este necesar." #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "Interzi ajutoare AI" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" "Dezactivează Economy AI etc,\n" "Poate afecta LuaUI." #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "Activeză deplasarea la margine" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "Mută ecranul dacă săgeata se mută pe margine." #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "Inversează Mouse" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "Inversează axa Y a mouse-ului în modul FPS" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "Cameră de deasupra" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "setează viteza de mutare (mouse şi tastatură) pentru acest mod" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "Cameră de deasupra rotativă" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "Cameră de gen \"Total War\"" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "Cameră persoana I (FPS)" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "Cameră liberă" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" "Fă acesta tipul de cameră implicit în Spring.\n" "Poate fi schimbat în joc." #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "Nivel de verbozitate în consolă (0=min, 10=max)" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "Câtă informaţie să iasă?" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "Prinde exceptii AI" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "dezactivează pentru depanare AI" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "De bază" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" "Depinzând de puterea plăcii dvs. video,\n" "setarea calităţii poate avea influenţe mari\n" "pentru performanţa Spring.\n" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective" msgstr "Cu reflexie" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "Cu reflexie + refracţie" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "Dinamică" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "Inversează axa y a mouse-ului" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "interschimbă sus/jos cu jos/sus" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "Suport pentru mouse cu 3 butoane pe mini-hartă" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "dacă nu doriţi să folosiţi acel buton, dezactivaţi-l" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "De deasupra" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "Vedere de sus statică" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "Vedere de sus rotativă" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" "Ca vederea de sus statică, dar cu posibilitatea rotaţiei în jurul axei Z" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "\"Total War\"" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "Vedere de sus, cu rotaţie pe axa X" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "Persoana I (FPS)" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "Camera din punctul de vedere al unităţii" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "Modifică vederea în orice mod" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "dimensiune orizontală ecran" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "dimensiune verticală ecran" #: src/springsettings/ctrlconstants.h:415 #, fuzzy msgid "Blur reflection" msgstr "Cu reflexie" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 #, fuzzy msgid "Shore waves" msgstr "activează umbre?" #: src/springsettings/ctrlconstants.h:417 #, fuzzy msgid "Enables shorewaves" msgstr "activează umbre?" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "Cu reflexie" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 #, fuzzy msgid "Reflection texture size" msgstr "Cu reflexie" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "Durata:" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 #, fuzzy msgid "off" msgstr "Oprit" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "Opţiuni combinate" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "Calitate video" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "Detaliere" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "Opţiuni UI" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "Audio" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 #, fuzzy msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" "Schimbările efectuate în tab-urile Calitate şi Detalii în modul expert\n" " vor fi pierdute la alegerea din nou a opţiunilor de bază.\n" "Aceste setări nu vor fi afişate în tab-ul de Opţiuni combinate.\n" "(acest mesaj poate fi dezactivat din meniul \"Fişier\")" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "Eroare!" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "Salvez setările Spring înainte de a ieşi?" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "Confirmare necesară" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "SpringSettings (mod simplu)" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "Salvare setări" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "Restaurare setări la valori implicite" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "Dezactivează avertizare pt. mod expert" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "Ieşire" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "Simplu (puţine opţiuni)" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "Expert (toate opţiunile)" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "Despre" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "Contact" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "Autori" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "Raportează o problemă" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "Mod" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "Info/Ajutor" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "Restaurează TOATE setările la valori implicite?" #: src/springsettings/frame.cpp:315 #, fuzzy msgid "(simple mode)" msgstr "SpringSettings (mod simplu)" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "Sugestie" #: src/springsettings/frame.cpp:367 #, fuzzy msgid "(expert mode)" msgstr "Schimbă în modul expert" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "SpringSettings e o interfaţă grafică pentru setările motorului Spring." #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "Kloot" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "Echipa SpringLobby" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "toată lumea care a contribuit sugestii / găsit probleme" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "Port invalid" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 #, fuzzy msgid "Hotkey Error" msgstr "Eroare de help" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 #, fuzzy msgid "Enter new command:" msgstr "Comenzi chat:" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 #, fuzzy msgid "Hotkey SaveSettings error" msgstr "Eroare SpringSettings" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "Nici o hartă găsită" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "Cale către bibliotecă unitsync" #: src/springsettings/panel_pathoption.cpp:34 #, fuzzy msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" "A fost o problemă la citirea setărilor.\n" "Vă rugăm verificaţi dacă această cale e corectă.\n" "După corectare, apăsaţi\n" "butonul \"Foloseşte calea\"." #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "Foloseşte calea" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "libunitsync.so pe linux, unitsync.dll pe windows" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "Setări de cale" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "Alegeţi o cale către unitsync" #: src/springsettings/panel_pathoption.cpp:96 #, fuzzy msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" "SpringSettings nu poate să încarce biblioteca unitsync.\n" "Atenţie la setările unitsync.\n" "Versiunea dvs. Spring trebuie să fie 0.76 sau mai nouă, altfel \n" "va eşua în orice caz." #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "scăzut" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "mediu" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "ridicat" #: src/springsettings/presets.h:45 msgid "very low" msgstr "foarte scăzut" #: src/springsettings/presets.h:45 msgid "very high" msgstr "foarte ridicat" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "nu pot lansa browser-ul implicit" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "Nu pot lansa browser. URL-ul este: " #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "Nu pot lansa browser." #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "Nu pot accesa setările.\n" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "Nu pot salva, unitsync nu este încărcat complet." #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "Eroare SpringSettings" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "Opţiuni audio" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "Rezoluţie ecran" #: src/springsettings/tab_quality_video.cpp:166 #, fuzzy msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" "Dacă este necesară o placă video specială,\n" "va fi menţionată în indicaţie." #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "Calitatea apei" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "Rezoluţia în bit" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "Opţiuni ale calităţii de afişare" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "Opţiuni ale modului video" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "Opţiuni Anti-Aliasing" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "Z-/Depth-Buffer" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "Nivel de afişare detalii" #: src/springsettings/tab_simple.cpp:40 #, fuzzy msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" "Aceste opţiuni vă permite să controlaţi afişarea (rendering) Spring.\n" "Pentru mai multă performanţă, reduceţi-le.\n" "Controlul complet e disponibil sub 'Mod expert' - \n" "apăsaţi meniul 'Mod' sau pe butonul din dreapta.\n" "Pentru a reveni în acest mod, alegeţi 'Mod simplu' din meniu.\n" "Dacă întâmpinaţi erori legate de grafică în timp ce rulaţi Spring\n" "s-ar putea să fie necesar să dezactivaţi unele setări din \n" " modul expert.\n" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "Calitate grafică" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "Detalii grafică" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "Rezoluţie ecran" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "Schimbă în modul expert" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr " (actual)" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" "Setează toate opţiunile de calitate la valori predefinite, după alegere." #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" "Setează toate opţiunile de detalii la valori predefinite, după alegere." #: src/springsettings/tab_simple.cpp:99 #, fuzzy msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "Alegeţi rezoluţia pentru monitorul/arele dvs." #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "Info" #: src/springsettings/tab_ui.cpp:37 #, fuzzy msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" "Setarea unui slider la 0 va exclude acel\n" "element din modificarea în joc." #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "Viteze de derulare (mouse + tastatură)" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "Mod predefinit pt. cameră" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "Alte opţiuni interfaţă" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "Zoom" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "Unităţi permise" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "Timp de conectare expirat" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "Răspuns necunoscut de la server" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" "Intrarea forţată prin NAT a eşuat, s-ar putea ca această luptă să nu " "funcţioneze." #: src/tdfcontainer.cpp:131 msgid "line " msgstr "" #: src/tdfcontainer.cpp:131 msgid " , column " msgstr "" #: src/ui.cpp:175 msgid "Server password" msgstr "Parola server-ului" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" "Înregistrare cu succes.\n" "Ar trebui să vă puteţi conecta." #: src/ui.cpp:294 msgid "Registration successful" msgstr "Înregistrare cu succes." #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "Înregistrare nereuşită, motivul a fost:\n" #: src/ui.cpp:458 msgid "Help error" msgstr "Eroare de help" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, fuzzy, c-format msgid "%s commands help." msgstr "Ajutor comenzi SpringLobby" #: src/ui.cpp:465 msgid "Global commands:" msgstr "Comenzi globale:" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr " \"/away\" - Setează statutul dvs. la \"away\" - absent" #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr " \"/back\" - Revenire la normal (din \"away\")" #: src/ui.cpp:468 #, fuzzy msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" " \"/changepassword parolăveche parolănouă\" - Schimbă parola contului." #: src/ui.cpp:469 #, fuzzy msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" " \"/changepassword parolăveche parolănouă\" - Schimbă parola contului." #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr " \"/channels\" - Arată canalele active" #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr " \"/help [subiect]\" - Arată informaţii despre o comandă." #: src/ui.cpp:472 #, fuzzy msgid " \"/join channel [password]\" - Joins a channel." msgstr "" " \"/join channel [password] [,channel2 [password2]]\" - Intră într-un canal" #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr " \"/j\" - la fel ca \"/join\"" #: src/ui.cpp:474 #, fuzzy msgid " \"/ingame\" - Shows how much time you have in game." msgstr " \"/ingame\" - Arată cât timp aţi petrecut în joc." #: src/ui.cpp:475 #, fuzzy msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" " \"/msg utilizator [text]\" - Trimite un mesaj privat cu textul text către " "utilizator." #: src/ui.cpp:476 #, fuzzy msgid " \"/part\" - Leaves current channel." msgstr " \"/channels\" - Arată canalele active" #: src/ui.cpp:477 #, fuzzy msgid " \"/p\" - Alias to /part." msgstr " \"/j\" - la fel ca \"/join\"" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr " \"/rename newalias\" - Vă schimbă pseudonimul în newalias." #: src/ui.cpp:479 #, fuzzy, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr " \"/sayver\" - Spune ce versiune de SpringLobby aveţi în chat." #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr " \"/testmd5 text\" - Dă hash md5-b64 pentru textul dat." #: src/ui.cpp:481 #, fuzzy, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr " \"/ver\" - Arată ce versiune de SpringLobby aveţi." #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "Comenzi chat:" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr " \"/me acţiune\" - Spune mesaj de acţiune în stil IRC" #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" "Dacă vă lipsesc unele comenzi, duceţi-vă în #springlobby şi încercaţi " "acolo :)" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "Nu au fost scrise subiectele încă." #: src/ui.cpp:496 msgid "The topic \"" msgstr "Subiectul \"" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "" "\" nu a fost găsit. Încercaţi \"/help topics\" numai pentru subiectele " "existente." #: src/ui.cpp:580 #, fuzzy msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" "Nu pot găsi versiunea dvs. Spring din biblioteca UnitSync.\n" "\n" "Jocul online va fi dezactivat." #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" #: src/ui.cpp:599 #, fuzzy msgid "Online play is currently disabled." msgstr "Jocul online va fi dezactivat." #: src/ui.cpp:631 #, fuzzy, c-format msgid "disconnected from server: %s" msgstr "Răspuns necunoscut de la server" #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "nu sunt deschise panouri chat active." #: src/ui.cpp:839 #, fuzzy, c-format msgid "%s (%d users)" msgstr "(%d utilizatori)" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "Lupta a fost închisă de gazdă." #: src/ui.cpp:993 msgid "Battle closed" msgstr "Luptă închisă" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" "Este probabil că setările dvs. Spring nu sunt corecte.\n" "Ar trebui să le verificaţi înainte de a juca online." #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "Eroare setări Spring" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "" #: src/ui.cpp:1337 #, fuzzy, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" ".\n" "Se pare că aceasta este prima dată când folosiţi SpringLobby. Am găsit o " "configuraţie care ar trebui să funcţioneze, dar ar trebui verificată, în " "special configuraţia Spring. \n" "\n" "Când aţi terminat, conectaţi-vă la un server prin meniul Fişier, şi bucuraţi-" "vă de un joc bun de Spring :)" #: src/ui.cpp:1340 msgid "Welcome" msgstr "Bine ați venit" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 #, fuzzy msgid "Import settings?" msgstr "Setări de cale" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "S-a produs o eroare la verificarea versiunii.\n" "Vă rugăm încercaţi din nou mai târziu.\n" "Dacă problema persistă, vă rugăm să o raportaţi folosind Ajutor -> Raportare " "problemă." #: src/ui.cpp:1387 msgid "Your Version: " msgstr "Versiunea dvs.: " #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "Ultima versiune: " #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 #, fuzzy msgid "Not up to date" msgstr "Neactualizat" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "Numărul jucătorilor" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" "Versiunea dvs. SpringLobby nu e actualizată.\n" "\n" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "Neactualizat" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" "\n" "Calea navigatorului: " #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" #: src/updater/updater.cpp:72 #, fuzzy msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "S-a produs o eroare la verificarea versiunii.\n" "Vă rugăm încercaţi din nou mai târziu.\n" "Dacă problema persistă, vă rugăm să o raportaţi folosind Ajutor -> Raportare " "problemă." #: src/updater/updater.cpp:81 #, fuzzy, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" "S-a produs o eroare la verificarea versiunii.\n" "Vă rugăm încercaţi din nou mai târziu.\n" "Dacă problema persistă, vă rugăm să o raportaţi folosind Ajutor -> Raportare " "problemă." #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 #, fuzzy msgid "the SpringLobby revision to update to" msgstr "" "Versiunea dvs. de SpringLobby e actuală!\n" "\n" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "SpringLobby" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 #, fuzzy msgid "Warning" msgstr "Avertizare de jurnal" #: src/user.cpp:83 #, fuzzy msgid "away" msgstr "Întotdeauna" #: src/user.cpp:83 msgid "back" msgstr "" #: src/user.cpp:85 #, fuzzy msgid "ingame" msgstr "Porecla" #: src/user.cpp:85 msgid "back from game" msgstr "" #: src/user.cpp:195 msgid "Newbie" msgstr "Nou-venit" #: src/user.cpp:196 msgid "Beginner" msgstr "Începător" #: src/user.cpp:197 msgid "Average" msgstr "Mediu" #: src/user.cpp:198 msgid "Above average" msgstr "Deasupra mediei" #: src/user.cpp:199 msgid "Experienced" msgstr "Cu experienţă" #: src/user.cpp:200 msgid "Highly experienced" msgstr "Cu multă experienţă" #: src/user.cpp:201 msgid "Veteran" msgstr "Veteran" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 #, fuzzy msgid "Unknown" msgstr "necunoscut" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "" #: src/useractions.h:11 #, fuzzy msgid "none" msgstr "Niciunul" #: src/useractions.h:11 #, fuzzy msgid "highlight" msgstr "Evidenţiere" #: src/useractions.h:11 msgid "notify login/out" msgstr "" #: src/useractions.h:11 msgid "ignore chat" msgstr "" #: src/useractions.h:11 msgid "ignore pm" msgstr "" #: src/useractions.h:12 msgid "autokick" msgstr "" #: src/useractions.h:12 #, fuzzy msgid "notify hosted battle" msgstr "Intră în aceeaşi luptă" #: src/useractions.h:12 msgid "notify status change" msgstr "" #: src/useractions.h:19 #, fuzzy msgid "no action at all" msgstr "nu sunt deschise panouri chat active." #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" #: src/usermenu.h:31 msgid "Create new group..." msgstr "" #: src/usermenu.h:37 #, fuzzy msgid "Add to group..." msgstr "Adaugă Bot..." #: src/usermenu.h:38 #, fuzzy msgid "Remove from group" msgstr "Şterge cont utilizator" #: src/utils/controls.h:22 #, fuzzy msgid "Choose color" msgstr "Alegeţi un director" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 #, fuzzy msgid "Author" msgstr "Austria" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Games" msgstr "Joc" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Compatible games" msgstr "Normal" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "Salvează..." #: src/widgets/infopanel.cpp:74 #, fuzzy msgid "Current version" msgstr "Versiunea dvs. Spring" #: src/widgets/infopanel.cpp:79 #, fuzzy msgid "# downloaded" msgstr "MB trimişi" #: src/widgets/infopanel.cpp:84 #, fuzzy msgid "Published on" msgstr "Publicaţi fişier nou" #: src/widgets/infopanel.cpp:121 #, fuzzy msgid "Changelog" msgstr "Anulează" #: src/widgets/infopanel.cpp:126 #, fuzzy msgid "Screenshots" msgstr "Rezoluţie ecran" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" #, fuzzy #~ msgid "Settings" #~ msgstr "Salvare setări" #, fuzzy #~ msgid "Help" #~ msgstr "&Ajutor" #, fuzzy #~ msgid "Faction" #~ msgstr "Acţiune" #~ msgid "Mod" #~ msgstr "Mod" #, fuzzy #~ msgid "spectators" #~ msgstr "Spectatori:" #, fuzzy #~ msgid "players" #~ msgstr "Jucători:" #~ msgid "Mod:" #~ msgstr "Mod:" #~ msgid "Only mods i have" #~ msgstr "Doar mod-uri pe care le am" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to host a new game" #~ msgstr "" #~ "Rulaţi deja o instanţă de Spring; închideţi-o pentru a putea găzdui un " #~ "nou joc" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to join another battle." #~ msgstr "" #~ "Rulaţi deja o instanţă de Spring; închideţi-o pentru a vă putea alătura " #~ "altei lupte." #~ msgid "Mod not available" #~ msgstr "Mod indisponibil" #~ msgid "Enter password" #~ msgstr "Introduceţi parola" #, fuzzy #~ msgid "team" #~ msgstr "Echipă" #, fuzzy #~ msgid "ally" #~ msgstr "Aliat" #~ msgid "cpu" #~ msgstr "cpu" #, fuzzy #~ msgid "Load a saved set of options." #~ msgstr "Încarcă un set salvat de restricţii." #, fuzzy #~ msgid "Save..." #~ msgstr "Salvează..." #, fuzzy #~ msgid "Delete..." #~ msgstr "Alege..." #, fuzzy #~ msgid "Set default..." #~ msgstr "implicit" #~ msgid "Mod Options" #~ msgstr "Opţiuni mod" #~ msgid "Map Options" #~ msgstr "Opţiuni hartă" #~ msgid "You don't have the mod " #~ msgstr "Nu aveţi modul " #~ msgid " . Please download it first" #~ msgstr " . Vă rugăm descărcaţi-l mai întâi." #~ msgid "Mod unavailable" #~ msgstr "Mod indisponibil" #, fuzzy #~ msgid "unknown hash " #~ msgstr "necunoscut" #~ msgid "Select the mod to play with." #~ msgstr "Alegeţi mod-ul cu care să jucaţi." #~ msgid "Test firewall" #~ msgstr "Testare firewall" #, fuzzy #~ msgid "Tab icons" #~ msgstr "Opţiuni hartă" #~ msgid "P2P" #~ msgstr "P2P" #~ msgid "Total Outgoing: " #~ msgstr "Total Ieşire: " #~ msgid "Publish new file" #~ msgstr "Publicaţi fişier nou" #~ msgid "Search file" #~ msgstr "Caută fişier" #, fuzzy #~ msgid "Download Lua widgets" #~ msgstr "Activează unelte LuaUI" #~ msgid "not available" #~ msgstr "indisponibil" #~ msgid "seeding" #~ msgstr "seeding" #~ msgid "Status: not connected" #~ msgstr "Statut: deconectat" #~ msgid "Status: connected" #~ msgstr "Statut: conectat" #~ msgid "Status: unknown" #~ msgstr "Statut: necunoscut" #~ msgid "Total Outgoing: %.2f KB/s" #~ msgstr "Total Ieşire: %.2f KB/s" #~ msgid "Total Incoming: %.2f KB/s" #~ msgstr "Total Intrare: %.2f KB/s" #~ msgid "&File" #~ msgstr "&Fişier" #~ msgid "Manually &Start Torrent System" #~ msgstr "Porneşte manual sistemul de torente" #~ msgid "Manually &Stop Torrent System" #~ msgstr "Opreşte manual sistemul de torente" #, fuzzy #~ msgid "Modname" #~ msgstr "Mod" #, fuzzy #~ msgid "Download started" #~ msgstr "Descărcare completă" #, fuzzy #~ msgid "Disconnecting" #~ msgstr "Deconectează" #~ msgid "Debug" #~ msgstr "Depanare" #~ msgid "SpringSettings (expert mode)" #~ msgstr "SpringSettings (mod expert)" #~ msgid "" #~ "thanks for inviting me in, code to re-use, infrastructure and help in " #~ "general" #~ msgstr "" #~ "mulţumiri pentru invitaţie, cod pentru refolosit, infrastructură, şi " #~ "ajutor în general" #~ msgid "" #~ "The application has generated a fatal error and will be terminated\n" #~ "Generating a bug report is not possible\n" #~ "\n" #~ "please enable wxUSE_DEBUGREPORT" #~ msgstr "" #~ "Aplicaţia a generat o eroare fatală şi va fi închisă.\n" #~ "Nu este posibilă crearea unui raport.\n" #~ "\n" #~ "vă rugăm să activaţi wxUSE_DEBUGREPORT" #~ msgid "Debug Options" #~ msgstr "Opţiuni depanare" #, fuzzy #~ msgid "Player" #~ msgstr "Jucător:" #~ msgid "Hi " #~ msgstr "Salut, " #, fuzzy #~ msgid "Notice" #~ msgstr "Niciunul" #, fuzzy #~ msgid "MB downloaded" #~ msgstr "MB trimişi" #~ msgid "MB uploaded" #~ msgstr "MB trimişi" #~ msgid "KB/s up" #~ msgstr "KB/s sus" #~ msgid "KB/s down" #~ msgstr "KB/s jos" #~ msgid "ETA (s)" #~ msgstr "Timp estimat (s)" #~ msgid "Filesize (MB)" #~ msgstr "Mărime fişier (MB)" #~ msgid "Torrent system autostart" #~ msgstr "Auto porneşte sistemul Torrent" #~ msgid "at lobby connection (default)" #~ msgstr "la conectarea lobby-ului" #~ msgid "at lobby start" #~ msgstr "la pornirea lobby-ului" #~ msgid "manual" #~ msgstr "manual" #, fuzzy #~ msgid "Torrent system failure" #~ msgstr "Auto porneşte sistemul Torrent" #~ msgid "Type /help in a chat box." #~ msgstr "Scrieţi /help într-o căsuţă de chat." #, fuzzy #~ msgid "Disconnected from server." #~ msgstr "Răspuns necunoscut de la server" #, fuzzy #~ msgid "Connection failure" #~ msgstr "Timp de conectare expirat" #~ msgid "Server message" #~ msgstr "Mesaj server" #, fuzzy #~ msgid "Grouping size" #~ msgstr "Acţiune" #~ msgid "a" #~ msgstr "a" #~ msgid "p" #~ msgstr "j" #~ msgid "m" #~ msgstr "m" #~ msgid "%d%" #~ msgstr "%d" #~ msgid "t" #~ msgstr "e" #~ msgid "Not a number" #~ msgstr "Nu e număr" #~ msgid "" #~ "Value out of range.\n" #~ " Enter an integer between 0 & 100." #~ msgstr "" #~ "Valoare în afara intervalului.\n" #~ " Introduceţi un întreg între 0 şi 100." #~ msgid "" #~ "There are two or more bots on the same team. Because bots don't know how " #~ "to share, this won't work." #~ msgstr "" #~ "Există doi sau mai mulţi boţi în aceeaşi echipă. Pentru că boţii nu ştiu " #~ "cum să joace împreună, aceasta nu va funcţiona." #~ msgid "Bot team sharing." #~ msgstr "Boţi în aceeaşi echipă." #, fuzzy #~ msgid "topic" #~ msgstr "Subiectul \"" #~ msgid "Use smart scrolling" #~ msgstr "Foloseşte derulare inteligentă" #~ msgid "_SERVER" #~ msgstr "_SERVER" #~ msgid "Download failed" #~ msgstr "Descărcare eşuată" #~ msgid "Unit detail" #~ msgstr "Detaliile unităţilor" #~ msgid "only on/off available at this time" #~ msgstr "numai pornit/oprit disponibil acum" #~ msgid "Global sound volume" #~ msgstr "Volum de sunet global" #~ msgid "mark to be able to use" #~ msgstr "activează pentru a le putea folosi" #~ msgid "Send debug info to console" #~ msgstr "Trimite info pt. depanare la consolă" #~ msgid "if disabled these will only be logged" #~ msgstr "dacă e dezactivat, acestea vor fi trecute numai în jurnal" #~ msgid "" #~ "You're using a wxwidgets library of the 2.6.x series\n" #~ " battle filtering, advanced gui and joining/hosting games using nat " #~ "traversal\n" #~ " won't be available" #~ msgstr "" #~ "Folosiţi biblioteca wxWidgets versiunea 2.6.x.\n" #~ " Filtrarea luptelor, interfaţa avansată şi jocurile cu traversare nat\n" #~ " nu vor fi disponibile." #~ msgid "Missing Functionality" #~ msgstr "Lipseşte funcţionalitate" #, fuzzy #~ msgid "" #~ "Do you want to download OTA content?\n" #~ "You need this to be able to play TA based mods.\n" #~ "You need to own a copy of Total Annihilation do legally download it." #~ msgstr "" #~ "Doriţi să descărcaţi conţinutul OTA?\n" #~ "Acesta este necesar pentru a juca modurile bazate pe TA.\n" #~ "Aveţi nevoie de o copie legală a Total Annihilation pentru a-l obţine " #~ "legal." #~ msgid "Download OTA content?" #~ msgstr "Descarc conţinut OTA?" #, fuzzy #~ msgid "Create a spring directory in my documents folder" #~ msgstr "Creează un folder .spring în directorul home. (recomandat)" #~ msgid "Create a folder in a custom path (you'll get prompted for the path)" #~ msgstr "Creează un folder într-o altă cale (veţi fi întrebat)" #~ msgid "I have already a SpringData folder, i want to browse manually for it" #~ msgstr "Am deja un folder SpringData, îl voi căuta manual" #, fuzzy #~ msgid "" #~ "Looks like you don't have yet a user SpringData folder structure\n" #~ "What would you like to do? (leave default choice if you don't know what " #~ "this is for)" #~ msgstr "" #~ "Se pare că nu aveţi o structură de foldere SpringData.\n" #~ "Ce doriţi să fac? (lăsaţi varianta implicită dacă nu ştiţi pentru ce e " #~ "asta)" #, fuzzy #~ msgid "Not online" #~ msgstr "Nu este conectat." #~ msgid "" #~ "This game uses NAT traversal that is not supported by wx 2.6 build of " #~ "springlobby. \n" #~ "\n" #~ "You will not be able to play in this battle. \n" #~ "Update your wxwidgets to 2.8 or newer to enable NAT traversal support." #~ msgstr "" #~ "Această luptă foloseşte NAT traversal care nu este suportată de build-ul " #~ "cu wx 2.6 SpringLobby.\n" #~ "\n" #~ "Nu veţi putea juca în această luptă. \n" #~ "Actualizaţi-vă biblioteca wxWidgets la 2.8 sau mai nou pentru NAT " #~ "traversal." #, fuzzy #~ msgid "Only the host can change the game options" #~ msgstr "Doar gazda poate bloca lupta." #, fuzzy #~ msgid "Only the host can use those functions." #~ msgstr "Doar gazda poate bloca lupta." #~ msgid "Only the host can lock the game." #~ msgstr "Doar gazda poate bloca lupta." #, fuzzy #~ msgid "Only the host can toggle autohost mode." #~ msgstr "Doar gazda poate bloca lupta." #~ msgid "Invalid host/port or servername." #~ msgstr "Nume de server sau server/port invalid." #~ msgid "Active chat channels:" #~ msgstr "Canale de chat active:" #~ msgid "no rank" #~ msgstr "fără rang" #, fuzzy #~ msgid "Battle filter is active" #~ msgstr "Listă de lupte" #~ msgid "Only the host can fix player colours." #~ msgstr "Doar gazda poate regla culorile." #~ msgid "Select all" #~ msgstr "Selectează tot" #, fuzzy #~ msgid "Add user" #~ msgstr "(%d utilizatori)" #, fuzzy #~ msgid "Remove selected" #~ msgstr "Nici un mod ales." #, fuzzy #~ msgid "you can also enter a ';' seperated list of usernames:" #~ msgstr "introduceţi o listă separată prin \";\"" #, fuzzy #~ msgid "Invalid usernames" #~ msgstr "Număr invalid" #, fuzzy #~ msgid "" #~ "A short description of the game, this will show up in the battle list. " #~ "This will be read-only for ladder" #~ msgstr "O descriere scurtă a jocului, aceasta va apărea în lista de lupte." #~ msgid "NAT traversal to use. Experimental support." #~ msgstr "NAT traversal. Suport experimental." #, fuzzy #~ msgid "Unitsync error" #~ msgstr "Problemă Unitsync" #~ msgid "You have one or more bots sharing team, this is not possible." #~ msgstr "Ai unul sau mai mulţi boţi în aceeaşi echipă, nu pot porni." #~ msgid "" #~ "Please enter password needed to join this channel, leave blank for no " #~ "passwrd." #~ msgstr "" #~ "Vă rog introduceţi parola necesară pentru a intra în acest canal; lăsaţi " #~ "liber dacă nu a fost nevoie." #~ msgid "Fixed source ports" #~ msgstr "Porturi sursă fixe" #~ msgid "" #~ "NAT traversal to use, currently this feature is not supported by " #~ "SpringLobby." #~ msgstr "" #~ "Modul de traversare a NAT-ului; funcţia nu este suportată de SpringLobby." #~ msgid "Failed to punch through NAT" #~ msgstr "Eşuare la NAT-punching" #~ msgid "no" #~ msgstr "nu" #~ msgid "yes" #~ msgstr "da" #~ msgid "" #~ "You should add a bot before starting a game.\n" #~ "If you don't want an opponent add TestGlobalAi" #~ msgstr "" #~ "Ar trebui să adăugaţi un bot înainte de a începe un joc.\n" #~ "Dacă nu doriţi un oponent, adăugaţi TestGlobalAI." #~ msgid "/.spring" #~ msgstr "/.spring" #~ msgid "Start system" #~ msgstr "Început" #~ msgid "Stop system" #~ msgstr "Opreşte sistem" #~ msgid "Continue if commander dies" #~ msgstr "Continuă dacă commander-ul moare" #~ msgid "End if commander dies" #~ msgstr "Termină dacă commander-ul moare" #~ msgid "End condition" #~ msgstr "Condiţie de sfârşit" #~ msgid "Resources" #~ msgstr "Resurse" #~ msgid "The amount of metal each player starts with." #~ msgstr "Cantitatea de metal cu care fiecare jucător începe" #~ msgid "Start Energy" #~ msgstr "Energie de început" #~ msgid "The amount of energy each player starts with." #~ msgstr "Cantitatea de energie cu care fiecare jucător începe" #~ msgid "Max units" #~ msgstr "Maxim de unităţi" #~ msgid "The maximum number of units allowed per player." #~ msgstr "Numărul maxim permis per jucător" #~ msgid "Limit d-gun" #~ msgstr "Limitează D-Gun" #~ msgid "Ghosted buildings" #~ msgstr "Clădiri fantomatice" #~ msgid "Diminishing metal makers" #~ msgstr "Reducerea producţiei metal maker" #~ msgid "This chat is exclusively for participants of this battle." #~ msgstr "Acest chat este exclusiv pentru participanţii acestei lupte." #~ msgid "Max players reached" #~ msgstr "Numărul maxim de jucători a fost atins." #~ msgid "Save to:" #~ msgstr "Salvează în:" #~ msgid "Browse..." #~ msgstr "Caută..." #~ msgid "Choose a directory" #~ msgstr "Alegeţi un director" #~ msgid "Map/Mod Options" #~ msgstr "Opţiuni hartă/mod" #~ msgid "Up to Date" #~ msgstr "Actualizat" #~ msgid "" #~ "\n" #~ "\n" #~ "Would you like to visit a page with instructions on how to download the " #~ "newest version?" #~ msgstr "" #~ "\n" #~ "\n" #~ "Aţi dori să vizitaţi o pagină cu instrucţiuni cum să descărcaţi ultima " #~ "versiune?" #~ msgid "Limit D-Gun" #~ msgstr "Limitează D-Gun" #~ msgid "" #~ "Disables commander's D-gun when being too far away from the starting point" #~ msgstr "" #~ "Dezactivează D-Gun-ul commander-ului la distanţe prea mari de punctul de " #~ "pornire" #~ msgid "Ghosted Buildings" #~ msgstr "Clădiri fantomatice" #~ msgid "" #~ "Enemy buildings will leave a ghost image on the map after losing LoS on " #~ "them" #~ msgstr "" #~ "Clădirile inamice vor lăsa o imagine fantomatică pe hartă, după pierderea " #~ "contactului vizual." #~ msgid "Diminishing MM" #~ msgstr "Prodcţie redusă pt. Metal Maker-e" #~ msgid "" #~ "Efficiency of MetalMakers will progressively reduce as much as you build " #~ "them" #~ msgstr "" #~ "Eficienţa Metal Maker-elor va scădea progresiv pe măsură ce construiţi un " #~ "număr mai mare" #~ msgid "Game Ending condition" #~ msgstr "Condiţia sfârşirii jocului" #~ msgid "" #~ "The condition that will end the game\n" #~ "0: when all units will be destroyed\n" #~ "1: when the commander will be destroyed\n" #~ "2: lineage mode (see option 1, but given away units will still die" #~ msgstr "" #~ "Condiţia care va cauza sfârşitul jocului\n" #~ "0: când toate unităţile sunt distruse\n" #~ "1: când commander-ul este distrus\n" #~ "2: mod \"lineage\" (vezi opţ. 1, dar şi celelalte unităţi vor fi distruse" #~ msgid "Sets the amount of metal that players will start with" #~ msgstr "Setează cantitatea de metal cu care se va începe" #~ msgid "Sets the amount of energy that players will start with" #~ msgstr "Setează cantitatea de energie cu care se va începe" #~ msgid "Max Units Allowed" #~ msgstr "Maxim de unităţi permise" #~ msgid "" #~ "Sets the maximum amount of units that a player will be allowed to build" #~ msgstr "" #~ "Setează numărul maxim de unităţi pe care un jucător are voie să " #~ "construiască" #~ msgid "Reset" #~ msgstr "Resetează" #~ msgid "" #~ "You have bots that are not assingled to startpositions. In the current " #~ "version of spring you are only allowed to use start positions positioning " #~ "them freely is not allowed.\n" #~ "\n" #~ "This will be fixed in next version of Spring." #~ msgstr "" #~ "Aveţi boţi care nu au poziţii iniţiale. În versiunea curentă Spring nu " #~ "aveţi voie să îi poziţionaţi manual, ci doar prin punctele de pe hartă.\n" #~ "\n" #~ "Această problemă va fi rezolvată în următoarea versiune de Spring." #~ msgid "" #~ "You are not using consecutive start position numbers.\n" #~ "\n" #~ "In the current version of spring you are not allowed to skip any " #~ "startpositions. You have to use all consecutive position.\n" #~ "\n" #~ "Example: if you have 2 bots + yourself you have to use start positions " #~ "1,2,3 not 1,3,4 or 2,3,4.\n" #~ "\n" #~ "This will be fixed in next version of Spring." #~ msgstr "" #~ "Nu folosiţi poziţii iniţiale consecutive.\n" #~ "\n" #~ "În versiunea curentă de Spring, nu aveţi voie să săriţi peste poziţii. " #~ "Trebuie să folosiţi toate poziţiile marcate consecutiv.\n" #~ "\n" #~ "Exemplu: dacă aveţi 2 boţi + dvs. trebuie să folosiţi poziţiile 1,2,3 şi " #~ "nu 1,3,4 sau 2,3,4.\n" #~ "\n" #~ "Această problemă va fi rezolvată în următoarea versiune de Spring." #~ msgid "Spring directory" #~ msgstr "Directorul Spring" #~ msgid "Default location." #~ msgstr "Locul implicit" #~ msgid "The Spring executable is installed in the default location" #~ msgstr "Executabilul Spring este instalat în locul implicit" #~ msgid "The UnitSync library is installed in the default location" #~ msgstr "Biblioteca UnitSync e instalată în locul implicit" #~ msgid "" #~ "Unitsync loading was aborted because your spring data directory is not " #~ "writable. Please check." #~ msgstr "" #~ "Încărcarea Unitsync a fost anulată deoarece directorul de date Spring nu " #~ "poate fi scris. Vă rugăm verificaţi." #~ msgid "is not supported by the lobby server that requires version" #~ msgstr "nu este suportat de serverul lobby care cere versiunea" #~ msgid "" #~ "This is the SpringLobby channel, please report any problems you are " #~ "having with SpringLobby here and the friendly developers will help you." #~ msgstr "" #~ "Acesta este canalul SpringLobby, vă rugăm raportaţi orice problemă aveţi " #~ "cu SpringLobby aici şi programatorii prietenoşi vă vor ajuta." springlobby-0.169/po/ru.po0000600000176000000410000062527112105760300017040 0ustar buildbotwww-data00000000000000# Russian translation for springlobby # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the springlobby package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: springlobby\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2010-01-03 22:54+0000\n" "Last-Translator: Nkolay Parukhin \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2010-01-05 04:42+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "" #: src/Helper/imageviewer.cpp:92 msgid "delete" msgstr "" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "Ошибка" #: src/Helper/imageviewer.cpp:160 msgid "Choose a filename" msgstr "" #: src/Helper/imageviewer.cpp:167 msgid "File successfully saved" msgstr "" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 msgid "Success" msgstr "Успешно" #: src/Helper/imageviewer.cpp:170 msgid "Couldn't save file" msgstr "" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 msgid "Default" msgstr "" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" #: src/Helper/wxTranslationHelper.cpp:148 msgid "Select the language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Принять Соглашение" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "Вы принимаете условия этого Соглашения?" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Да" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "Нет" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 msgid "User" msgstr "" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 msgid "Channel" msgstr "" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Статус:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 #, fuzzy msgid "Minimum rank to join" msgstr "Минимальный требуемый уровень" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Описание" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Описание" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Карта" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 msgid "Mapname" msgstr "" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "Игра" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "Игра" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Сервер" #: src/battlelist/battlelistctrl.cpp:60 #, fuzzy msgid "Name of the Host" msgstr "Имя пользователя" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Зрители:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "Число игроков" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 msgid "Players" msgstr "" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "Число игроков" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Карта" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Maximum number of Players that can join" msgstr "Максимальное разрешённо количество игроков в сражении." #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "Скачать &карту" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "Скачать &карту" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Зрители:" #: src/battlelist/battlelistctrl.cpp:370 msgid "Active Players:" msgstr "" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "Сервер:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Статус:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Заперто" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "Нужен пароль" #: src/battlelist/battlelistfilter.cpp:122 msgid "Highlighted only" msgstr "" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "Требуемый уровень:" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Описание:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Запущено" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Полный" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "Открыто" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Игрок:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Все" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Карта:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Только имеющиеся у меня карты" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "Макс. количество игроков:" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 #, fuzzy msgid "Game:" msgstr "Игра" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Только имеющиеся у меня карты" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Зритель:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "%d" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Игроки:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 msgid " Filter " msgstr "" #: src/battlelist/battlelisttab.cpp:144 msgid "Activated" msgstr "" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 msgid " Battle infos " msgstr "" #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "Создать игру..." #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "Войти" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" "Вы не можете создать игру без подлючения к серверу. Пожалуйста подлючитесь " "сначала." #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "Не подлючены." #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "Ваша версия игры не подходит, и Вы не можете создавать игры." #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Ошибка в Spring" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "Уже в игре" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" "Вы уже в сражении.\n" "\n" "Хотите покинуть текущее сражение и начать новое?" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" "Невозможен вход в сражения из-за несовместимости Вашей версии Spring'а." #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 #, fuzzy msgid "Matchmaker detected" msgstr "Точное совпадение" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "Уже в игре" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "Вы уже в сражении.\n" "\n" "Хотите выйти из текущего сражения и войти в это?" #: src/battlelist/battlelisttab.cpp:430 msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" #: src/battlelist/battlelisttab.cpp:433 #, fuzzy msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" "Необходимо установить мод для входа в эту игру.\n" "\n" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "Карта не доступна" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" "Необходимо установить карту для входа в эту игру.\n" "\n" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "Карта не доступна" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "Пароль сражения" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 msgid "Edit auto-joined channels" msgstr "" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" "Добвьте канал в линию вот так:\n" "имяканала пароль\n" "(пароли для существующих каналов не отображены)" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "Двойное нажатие для входа" #: src/channel/channelchooser.cpp:30 msgid "Find channel:" msgstr "" #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 msgid "Choose channels to join" msgstr "" #: src/channel/channellistctrl.cpp:30 msgid "# users" msgstr "" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "Показ %d вне %d каналов" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "### Сессия закрыта в [" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" "Невозможно создать папку. \n" "Убедитесь, что она не защищена от записи.\n" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "Функция ведения журнала отключена до перезапуска SpringLobby." #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "Уведомлнение" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" "Ошибка записи в журнал.\n" "Журнал для комнаты будет отключен " #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" ".\n" "\n" "Перезайдите в комнату для включения журнала." #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 #, fuzzy msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" "Ошибка открытия файла журнала. \n" "Убедитесь, что он не защищен от записи.\n" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "канал_" #: src/chatpanel.cpp:69 msgid "#" msgstr "#" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, c-format msgid "%d users" msgstr "" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "правое нажатие для настроек (напр., автовход)" #: src/chatpanel.cpp:296 msgid "Send" msgstr "Сказать" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr " !! Комманда: \"" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "\" параметры: \"" #: src/chatpanel.cpp:717 msgid "channel" msgstr "канал" #: src/chatpanel.cpp:718 msgid "battle" msgstr "сражение" #: src/chatpanel.cpp:719 msgid "server" msgstr "сервер" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr " присоединился к " #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr " ушел из " #: src/chatpanel.cpp:814 msgid " ** Channel topic:" msgstr "" #: src/chatpanel.cpp:821 msgid " ** Set by " msgstr "" #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "Разговор закрыт." #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "Вы уветены, что хотите вставить %d строк?" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr " Ваш SpringLobby версии v" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr " Вы не в канале, или етот канал не существует" #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" " Ошибка: Команда (%s) не существует, используйте /help для отображения " "списка доступных команд." #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" " Вы не в сражении, или такого сражения не существует, используите /help чтоб " "увидеть список возможных комманд" #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr " Пользователь отключен." #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr " Послано: \"" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "\"" #: src/chatpanel.cpp:1090 #, fuzzy msgid " ** User is now offline." msgstr " Пользователь отключен." #: src/chatpanel.cpp:1097 #, fuzzy msgid " ** User just got online." msgstr " Пользователь отключен." #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 #, fuzzy msgid " ** Joined Battle." msgstr "Присоединится к тому же сражению" #: src/chatpanelmenu.cpp:34 #, fuzzy msgid "Disable text appending" msgstr "Отключить предупреждение режима эксперта" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "Копировать" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "Очистить" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "Автоматически присоединяться к каналу" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "Покинуть" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "Показывать сообщения прихода/ухода" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "Показать список молчания" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "Информация канала" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "Поставить заголовок..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "Сообщение каналу..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "Запереть..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "Отпереть" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "Зарегистрировать..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "Отменить регистрацию" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "Вкл." #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "Выкл." #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "Включено?" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "Защита от спама" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "ChanServ" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "Отсоединиться" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "Пересоединиться" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "Удалить..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "Изменить пароль..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "Установить доступ..." #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "Аккаунты" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "Сказать всем..." #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "Администратор" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "Открыть разговор" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "Присоединится к тому же сражению" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "Время, проведенное в игре" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "Узнать IP адреса и не настоящих новичков" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "Заставить молчать..." #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "Молчание на 5 минут" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "Молчание на 10 минут" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "Молчание на 30 минут" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "Молчание на 2 часа" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "Молчание на 1 день" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "Снять молчание" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "Заставить молчать" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "Выгнать..." #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "Запретить..." #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "Снять запрет" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "Позвонить" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "Шлёпнуть!" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "Оператор" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "Снять оператора" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "Ошибка ChanServ" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "ChanServ не присутствует в этом канале." #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "Какой должен быть новый заголовок?" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "Сообщение:" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "Запереть канал..." #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "Какой новый пароль поставить?" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "Отпереть канал..." #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "Вы уверены, что хотите открыть этот канал?" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "ChanServ не на сервере." #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "Зарегестрировать канал" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "Кто должен быть основателем этого канала?" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "Отмена регистрации канала" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "Вы уверены, что хотите отменить регистрацию этого канала?" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "Удалить учетную запись" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "Какую учетную запись Вы хотите удалить?" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "Удалить аккаунт" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "Вы уверены вы хотите удалить аккаунт? " #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "Изменить пароль" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "Пароль какой учетной записи вы хотите изменить?" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "Какой новый пароль?" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "Не реализовано" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "Сообщение всем" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "Сообщение всем:" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "Завставить молчать пользов." #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "На сколько минут надо заставить молчать пользов.?" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "Выгнать пользов." #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "Причина:" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "Выгнать пользов." #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "Заставить молчать пользов." #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "Продолжительность:" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "Введите имя" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" "Пожалуйста, введите имя новой группы.\n" "После нажатия \"Да\" Вам надо будет настроить." #: src/chatpanelmenu.cpp:774 msgid "couldn't add user" msgstr "невозможно добавить пользов." #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "Подлючится к серверу" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "Сервер" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" "Подключиться к серверу. Вы можете ввести адрес:порт сервера к которому " "хотите подключиться." #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "Псевдоним" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "Пароль" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "Запомнить пароль" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "Подключаться автоматически" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" "запомнить установки подключения и подключиться к этому серверу автоматически " "при следующей загрузке лобби" #: src/connectwindow.cpp:85 #, fuzzy msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" "Примечание: если вы не зарегестрированы, то можете\n" " зарегестрироваться бесплатно на \n" "вкладке \"Регистрация\"." #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "Да" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Отмена" #: src/connectwindow.cpp:91 msgid "Login" msgstr "Войти" #: src/connectwindow.cpp:92 msgid "Register" msgstr "Зарегистрироваться" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "Псевдоним" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "Неверный порт." #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "Неверный порт" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" "Неверный номер порта.\n" "\n" "Он должен быть целым числом между 1 и 65535" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "Неверный адрес/порт." #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "Неверный адрес" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" "Введённый псевдоним содержит неразрешённые символы: )? &%.\n" " Пожалуйста, попробуйте снова" #: src/connectwindow.cpp:294 msgid "Invalid nickname" msgstr "" #: src/connectwindow.cpp:301 msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "Ошибка регистрации." #: src/countrycodes.cpp:11 msgid " Andorra" msgstr " Андорра" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "Объединенные Арабские Эмираты" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "Афганистан" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "Антигуа и Барбуда" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "Ангилья" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "Албания" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "Армения" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "Нидерландские Антиллы" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "Ангола" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "Антарктика" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "Аргентина" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "Американское Самоа" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "Австрия" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "Австралия" #: src/countrycodes.cpp:25 #, fuzzy msgid "Åland Islands" msgstr "Острова Кайман" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "Аруба" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "Азербайджан" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "Босния и Герцеговина" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "Барбадос" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "Бангладеш" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "Бельгия" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "Буркина-Фасо" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "Болгария" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "Бахрейн" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "Бурунди" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "Бенин" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "Бермуды" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "Бруней Даруссалам" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "Боливия" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "Бразилия" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "Багамы" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "Бутан" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "Остров Буве" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "Ботсвана" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "Белоруссия" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "Белиз" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "Канада" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "Кокос (Острова Кеелинг)" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "Центрально-Африканская Республика" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "Конго" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "Швейцария" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "Кот-д'Ивуар (Берег Слоновой Кости)" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "Острова Кука" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "Чили" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "Камерун" #: src/countrycodes.cpp:56 msgid "China" msgstr "Китай" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "Колумбия" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "Коста Рика" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "Куба" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "Капе Верде" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "Остров Рождества" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "Кипр" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "Чешская Республика" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "Германия" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "Джибути" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "Дания" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "Доминика" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "Доминиканская Республика" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "Алжир" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "Эквадор" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "Эстония" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "Египет" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "Западная Сахара" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "Эритрея" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "Испания" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "Эфиопия" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "Финляндия" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "Фиджи" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "Фолклендские острова (Мальвины)" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "Микронезия" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "Острова Фарое" #: src/countrycodes.cpp:82 msgid "France" msgstr "Франция" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "Франция, Метрополия" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "Габон" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "Гренада" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "Грузия" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "Французская Гвиана" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "Гана" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "Гибралтар" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "Гренландия" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "Гамбия" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "Гвинея" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "Гваделупа" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "Экваториальная Гвинея" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "Греция" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "Острова Южной Геогия и Южной Сандвич" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "Гватемала" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "Гуам" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "Гвинея-Бисау" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "Гайана" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "Гонконг" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "Острова Херд и Макдональд" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "Гондурас" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "Хорватия" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "Гаити" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "Венгрия" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "Индонезия" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "Ирландия" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "Израиль" #: src/countrycodes.cpp:110 msgid "India" msgstr "Индия" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "Британская территория в Индийском океане" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "Ирак" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "Иран" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "Исландия" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "Италия" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "Ямайка" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "Иордания" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "Япония" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "Кения" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "Кыргызстан" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "Камбоджа" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "Кирибати" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "Коморские острова" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "Сент-Китс и Невис" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "Северная Корея" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "Южная Корея" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "Кувейт" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "Острова Кайман" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "Казахстан" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "Лаос" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "Ливан" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "Сент-Люсия" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "Лихтенштейн" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "Шри-Ланка" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "Либерия" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "Лесото" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "Литва" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "Люксембург" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "Латвия" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "Ливия" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "Марокко" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "Монако" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "Молдавия" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "Черногория" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "Мадагаскар" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "Маршаловы о-ва" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "Македония" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "Мали" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "Мьянма (Бирма)" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "Монголия" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "Макао" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "Северные Марианские Острова" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "Мартиника" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "Мавритания" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "Монтсеррат" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "Мальта" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "Маврикий" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "Мальдивские острова" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "Малави" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "Мексика" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "Малайзия" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "Мозамбик" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "Намибия" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "Новая Каледония" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "Нигер" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "Норфолкские острова" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "Нигерия" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "Никарагуа" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "Нидерланды" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "Норвегия" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "Непал" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "Науру" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "Нейральная Зона (Сауди Арабия/Ирак)" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "Ниуэ" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "Новая Зеландия" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "Оман" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "Панама" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "Перу" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "Французская Полинезия" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "Папуа - Новая Гвинея" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "Филиппины" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "Пакистан" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "Польша" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "Сен-Пьер и Микелон" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "Питкэрн" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "Пуэрто-Рико" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "Португалия" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "Палау" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "Парагвай" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "Катар" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "Реюньон" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "Румыния" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "Сербия" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "Российская Федерация" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "Руанда" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "Саудовская Аравия" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "Соломоновы острова" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "Сейшельские острова" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "Судан" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "Швеция" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "Сингапур" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "Остров Святой Елены" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "Словения" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "Острова Свалбард и Жан Маен" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "Словакия (Словацкая Республика)" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "Сьерра-Леоне" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "Сан-Марино" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "Сенегал" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "Сомали" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "Суринам" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "Сан-Томе и Принсипи" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "екс-СССР" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "Сальвадор" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "Сирия" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "Свазиленд" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "Острова Теркс и Кайкос" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "Чад" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "Французские Южные Территории" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "Того" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "Таиланд" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "Таджикистан" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "Токелау" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "Туркменистан" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "Тунис" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "Тонга" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "Восточный Тимор" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "Турция" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "Тринидад и Тобаго" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "Тувалу" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "Тайвань" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "Танзания" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "Украина" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "Уганда" #: src/countrycodes.cpp:234 #, fuzzy msgid "United Kingdom" msgstr "Англия" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "Внешние земли США" #: src/countrycodes.cpp:236 msgid "United States" msgstr "США" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "Уругвай" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "Узбекистан" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "Государство Ватикан (Папский Престол)" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "Сент-Винсент и Гренадины" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "Венесуэла" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "Виргинские острова (Великобритания)" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "Виргинские острова (США)" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "Вьетнам" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "Вануату" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "Острова Валлис и Футуна" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "Самоа" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "Йемен" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "Майотта" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "Югославия" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "Южно-Африканская Республика" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "Замбия" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "Заир" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "Зимбабве" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "(Имя страны не найдено)" #: src/crashreport.cpp:168 msgid "System informations" msgstr "Информация об системе" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "Уровень сообщений в журнале" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "Последний созданный script для запуска Spring'а" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "Нет карт" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "запрошено" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "Скачать" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "Не реализовано" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 msgid "Name" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "Размер" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "Тип" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Карта" #: src/downloader/filelister/filelistctrl.cpp:174 msgid "game" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "неизвестно" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "Показанные файлы" #: src/downloader/filelister/filelistdialog.cpp:55 msgid "Download selected" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "%u файлов показано" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Отсеивание имён" #: src/downloader/filelister/filelistfilter.cpp:69 #, fuzzy msgid "Filetype:" msgstr "Файл" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" "\n" "успешно сохранено в:\n" #: src/downloader/httpdownloader.cpp:78 msgid "" "\n" "successfully unzipped in:\n" msgstr "" "\n" "успешно распаковано в:\n" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" "\n" " ошибка распаковки, пожалуйста, исправьте вручную" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "Невозможно сохранить\n" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" "\n" "в:\n" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" "\n" "Ошибка номер: " #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "Скачать &карту" #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "Предупреждение флуда" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "Добавить бота" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Псевдоним:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "ИИ:" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "Выберите ИИ для этого бота." #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 msgid "value" msgstr "" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "Добавить бота" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "Не были найдены библиотеки ИИ в Вашем Spring'е" #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "Не найдены библиотеки ИИ" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "Автоматически распределить игроков по командам" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "Метод" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "Разделить ранги равномерно" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Случайные" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "Кланы" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Отсутствует" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "Честно" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "Всегда" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" "Объединять членов одного клана (пользователей с одинаковыми клан-тэгами, " "напр. '[smurfzor]Alice' и '[smurfzor]Bob') в союз.\n" "Нет: нет особых действий для кланов.\n" "Равномерно: объединять членов клана в союз, не нарушая баланса между " "союзами.\n" "Всегда: всегда объединять членов клана в союз, даже, если нарушится баланс." #: src/hosting/autobalancedialog.cpp:53 msgid "Number of allies" msgstr "" #: src/hosting/autobalancedialog.cpp:56 msgid "Auto select" msgstr "" #: src/hosting/battlemaptab.cpp:69 msgid "Select" msgstr "" #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "Параметр" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "Значение" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "Скорость ветра" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "Приливная сила" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "Гравитация" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "Радиус шахты" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "Макс. количество металла" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "Фиксированные" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "Выбор в самой игре" #: src/hosting/battlemaptab.cpp:103 msgid "Chose before game" msgstr "" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "Начинающие позиции" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "Ограничения на войска" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "Разрешенные войска" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "Войска в этом списке будут доступны в игре." #: src/hosting/battleoptionstab.cpp:77 msgid "Disable selected units." msgstr "" #: src/hosting/battleoptionstab.cpp:81 msgid "Re-enable selected units." msgstr "" #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "<<" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "Разрешить все войска." #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "Запрещённые войска" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "Войска в этом списке будут запрещены в игре." #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "" #: src/hosting/battleoptionstab.cpp:242 msgid "Unit restriction" msgstr "" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "Команда" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "Союзник" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "Бонус ресурсов" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "Сторона" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "Выбрать цвет" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "Установить бонус для ресурсов" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "Наблюдатель" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "Выгнать" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "Пожалуйста, введите значение между 0 и 100" #: src/hosting/battleroomlistctrl.cpp:750 msgid "AI (bot)\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:754 msgid "Human\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:759 msgid "Spectator\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:763 msgid "Player\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:768 msgid "Host\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:772 msgid "Client\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:777 msgid "Ready\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:781 msgid "Not ready\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:786 msgid "In sync" msgstr "" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "" "Игроки с одинаковым номером команды могут управлять своими войсками " "совместно." #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" "Игроки с одинаковым номером союза работают для достижения победы совместно." #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "Выберите цвет Ваших войск в игре" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "Выберите Вашу сторону" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "Наблюдать за сражением, не участвуя" #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "Запирать при запуске" #: src/hosting/battleroomtab.cpp:144 #, fuzzy msgid "automatically unspec when there's a free slot" msgstr "автоматически проверить на обновления" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "Я готов" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "Нажмите, если Вас удовлетворяют условия сражения." #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "Цвет" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" "Предпросмотр выбранной карты. Вы можете увидеть начальные позиции или (если " "включено) или начальные зоны." #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Создать игру..." #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Создать новое сражение" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "Покинуть сражение и вернуться к списку сражений" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "Начать" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "Начать сражение" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "Добавить бота..." #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "Добавить игрока, управляемого компьютером" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "Запирать при запуске" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "Запирать сражение, когда оно начато, и отпирать, когда закончено." #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "Запретить новым игрокам присоединяться к этому сражению" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "Автосервер" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" "Включение режима автосервера. Даёт возможность управлять сражением с помощью " "команд '!balance' and '!start' и т.д." #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Описание" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 msgid "AutoSpect" msgstr "" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Начать" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "Automatically start the battle when all players are ready and synced" msgstr "Запирать сражение, когда оно начато, и отпирать, когда закончено." #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Ring unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 #, fuzzy msgid "Ring ..." msgstr "Позвонить" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "Не готов" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 #, fuzzy msgid "Force spectate ..." msgstr "Начать игру всё равно?" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "Разделить игроков на два или более союза" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "Исправить цвета" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "Сделать цвета игроков разными" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "Сохранённые настройки" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "Загрузить настройки сражения" #: src/hosting/battleroomtab.cpp:255 msgid "Save" msgstr "" #: src/hosting/battleroomtab.cpp:256 msgid "Save a set of options." msgstr "" #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 msgid "Delete" msgstr "" #: src/hosting/battleroomtab.cpp:261 msgid "Delete a set of options." msgstr "" #: src/hosting/battleroomtab.cpp:265 msgid "Set default" msgstr "" #: src/hosting/battleroomtab.cpp:266 #, fuzzy msgid "Use the current set of options as game's default." msgstr "Использовать текущие настройки, как по умолчанию для мода." #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "Зоны" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "Взять" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "Продолжить" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "Конец" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "Линия жизни" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "Нет такой карты." #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "Не готов" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "Выбор в самой игре" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Описание" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "Вышло время ожидания!" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "ошибка" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 msgid "Delete preset" msgstr "" #: src/hosting/battleroomtab.cpp:996 msgid "Set game default preset" msgstr "" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "Создать новое сражение" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "Краткое описание игры, которое будет отображаться в списке сражений." #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Описание" #: src/hosting/hostbattledialog.cpp:91 #, fuzzy msgid "Automatically write the battle description when a user joins." msgstr "Запирать сражение, когда оно начато, и отпирать, когда закончено." #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "Выберите мод для игры." #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "Нужен пароль" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "Пароль, необходимый для входа. Оставьте пустым, если нет" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "Порт" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "UDP порт для создания игры. По умолчанию 8452." #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Randomly picks an available one" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "Число игроков" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "Максимальное разрешённо количество игроков в сражении." #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "Пробить дыру" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "NAT обход" #: src/hosting/hostbattledialog.cpp:185 msgid "NAT traversal to use." msgstr "Использовать NAT обход." #: src/hosting/hostbattledialog.cpp:190 msgid "Rank requirement" msgstr "" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 msgid "Select the type of rank enforcement." msgstr "" #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "Создать комнату сражения" #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 #, fuzzy msgid "You have to select a game first." msgstr "Сначала выберите мод." #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "Не выбран мод." #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" "Вы используете версию wxWidgets ранее 2.8,\n" " тестирование портов не поддерживается.\n" " Сервер может не работать." #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" "Сервер, используемый для тестирования Вашего порта %d недоступен. \n" "Сервер может не работать с этой установкой." #: src/hosting/hostbattledialog.cpp:427 #, fuzzy, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "Сражение не начато, потому что выбранный порт (%d) не может принимать " "входящих данных.\n" "Проверьте ваш роутер или фаирволл или поменяйте порт при создании игры.\n" "\n" "Если ничего не помогает, включите Hole Punching NAT Traversal опцию при " "создании игры." #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "Сражение не начато, потому что выбранный порт (%d) не может принимать " "входящих данных.\n" "Проверьте ваш роутер или фаирволл или поменяйте порт при создании игры.\n" "\n" "Если ничего не помогает, включите Hole Punching NAT Traversal опцию при " "создании игры." #: src/hosting/hostbattledialog.cpp:459 #, fuzzy msgid "Battle not started beacuse the game you selected could not be found. " msgstr "Угра не могла быть начатой, потому что выбранный мод небыл найден. " #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "Ошибка при начатии игры." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" "Не найдено карт в Вашем Spring'е. Возможно, причина в неверной настройке " "Spring'а." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "Нет карт" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "Комната сражения" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "Настройки" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 msgid "Unit Restrictions" msgstr "" #: src/hosting/mmoptionwindows.cpp:36 msgid "Change option" msgstr "" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "" #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "" #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "" #: src/iconimagelist.cpp:322 msgid "Game is closed." msgstr "" #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "" #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "" #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "" #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "" #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "" #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "" #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "" #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "" #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "" #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "" #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 #, fuzzy msgid "Newbies guide" msgstr "Начинающий" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 #, fuzzy msgid "Joining a battle:\n" msgstr "Присоединится к тому же сражению" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "Создать новое сражение" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Ошибка в Spring" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 #, fuzzy msgid "Singleplayer gamee" msgstr "Одиночная игра" #: src/introguide.cpp:110 #, fuzzy msgid "Multiplayer gamee" msgstr "Многопользов. игра" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "Любой файл (*)|*" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "Узлы приложения (*.app)|*.app|Любой файл (*.*)|*.*" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 msgid "Disconnected from server, chat closed." msgstr "" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "Передача: " #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "Всего входящих: " #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "Отмена загрузки" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "&Соединение" #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "&Отсоединение" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 msgid "&Save options" msgstr "" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "&Выйти" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "Автовход на каналы..." #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "Настройка Spring" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "Сохранить в:" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "&Присоединится..." #: src/mainwindow.cpp:164 msgid "Channel &list" msgstr "" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "Открыт личный &разговор..." #: src/mainwindow.cpp:166 msgid "Change &username" msgstr "" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "" #: src/mainwindow.cpp:169 #, fuzzy msgid "&Reload maps/games" msgstr "&Перезагрузить карты/моды" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "Найти новую версию SpringLobby" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "&О программе" #: src/mainwindow.cpp:178 #, fuzzy msgid "&System Info" msgstr "Информация об системе" #: src/mainwindow.cpp:179 msgid "&Change language" msgstr "" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "&Сообщить об ошибке..." #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "&Документация" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "Сервер" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "&Изменить" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "&Сервис" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "&Справка" #: src/mainwindow.cpp:500 #, fuzzy msgid "You need to be connected to a server to view the channel list" msgstr "Вам нужно присоединиться к серверу для просмотра списка каналов" #: src/mainwindow.cpp:500 msgid "Not connected" msgstr "" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "Присоединится к каналу..." #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "Имя канала для присоединения" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "Начать личный разговор..." #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "Имя пользователя" #: src/mainwindow.cpp:540 #, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 msgid "No files found" msgstr "" #: src/mainwindow.cpp:656 #, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "" #: src/mainwindow.cpp:692 #, fuzzy msgid "This profile is write protected, please choose another name" msgstr "Сражение под паролем, введите пароль:" #: src/mainwindow.cpp:703 #, fuzzy msgid "Which profile do you want to load?" msgstr "Какую учетную запись Вы хотите удалить?" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "Установить имя." #: src/mainwindow.cpp:767 #, fuzzy msgid "Enter new nickname" msgstr "Введите имя" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "Разговор" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "Список сражений" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "Одиночная игра" #: src/mainwindow.h:203 msgid "Replays" msgstr "" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 msgid "Downloads" msgstr "" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "Металл: %.1f%%" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "Обновить" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "Скачать" #: src/mapctrl.cpp:897 msgid "side:" msgstr "сторона:" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "союз: %d" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "бонус: %d%%" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 msgid "Show" msgstr "" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" #: src/mapselectdialog.cpp:95 msgid "Filter" msgstr "" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" #: src/mapselectdialog.cpp:100 msgid "Map details" msgstr "" #: src/mapselectdialog.cpp:163 msgid "Start positions" msgstr "" #: src/mapselectdialog.cpp:261 msgid "Minimum wind" msgstr "" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "" #: src/mapselectdialog.cpp:263 msgid "Average wind" msgstr "" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "" #: src/mapselectdialog.cpp:265 msgid "Aspect ratio" msgstr "" #: src/mapselectdialog.cpp:266 msgid "Number of start positions" msgstr "" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "Тип стартовой позиции" #: src/mmoptionswrapper.cpp:122 #, fuzzy msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" "Как игроки будут выбрать, где им начинать сражение на карте\n" "0: обычные позиции\n" "1: случайные позиции\n" "2: выбор в игре\n" "3: выбор перед сражением" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "Выбор в самой игре" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "Выбор в самой игре" #: src/mmoptionswrapper.cpp:132 msgid "List of restricted units" msgstr "" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "Имя карты" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "с" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "ц" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "р" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "Исполняемые (*.exe)|*.exe|Любой файл (*.*)|*.*" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "Цвета и шрифт" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "Использовать системные цвета" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "Нормальная" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "Фон" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "Действие" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "Подсветка" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "Войти/Уйти" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "Мои сообщения" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "Клиент" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "Временная метка" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "Уведомление" #: src/options/chatoptionstab.cpp:258 msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "Шрифт:" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "по умолчанию" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "Выбрать..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "Поведение" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "Играть звуки уведомлений" #: src/options/chatoptionstab.cpp:300 msgid "Copy server messages in current channel" msgstr "" #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "Журналы разговоров" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "Сохранить журналы разговоров" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "Подсвечивать слова" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "Слова для подсветки в разговоре:" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "введите ; разделённый список" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "Дополнительно играть звук/мерцать заголовком " #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "Режим засыпания при запуске игры" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "Остановить все потоки" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "Понизить скорость:" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "загрузка (KB/s)" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "скачать (KB/s)" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "Номера" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "максимальная скорость загрузки KB/сек(-1 для бесконечной)" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "максимальная скорость скачивания KB/сек(-1 для бесконечной)" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "порт для соединений потоков" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "максимум одновременных соединений" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 msgid "Remove" msgstr "" #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "Удалить группу" #: src/options/groupoptionspanel.cpp:61 msgid "Rename.." msgstr "" #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "Переименовать группу" #: src/options/groupoptionspanel.cpp:70 msgid "Add New.." msgstr "" #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "Добавить группу" #: src/options/groupoptionspanel.cpp:84 msgid "Group Actions" msgstr "" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "Уведомление о входе/выходе" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "Уведомлять, когда пользователи из группы приходят или уходят" #: src/options/groupoptionspanel.cpp:95 msgid "Ignore Chat" msgstr "" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "Пропускать всё сказанное в канале пользователями из этой группы" #: src/options/groupoptionspanel.cpp:101 msgid "Notify Hosted Battles" msgstr "" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "Уведомлять, когда пользователи этой группы создают сражения" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "Пропускать личное" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" "Пропускать всё сказанное в личном разговоре пользователями из этой игруппы" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "Уведомлять о смене состояния" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "Уведомлять, когда состояние пользователей из этой группы меняется" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "Сразу выгнать" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "Сразу выгонять всех пользователей из этой группы из сражений" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "Подсвечивать сражения и имена пользователей из этой группы" #: src/options/groupoptionspanel.cpp:134 msgid "Highlight Color" msgstr "" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "Выберите цвет подсветки" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "Пользователи в группе" #: src/options/groupoptionspanel.cpp:163 msgid "Add.." msgstr "" #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "Добавить пользователя в группу" #: src/options/groupoptionspanel.cpp:170 msgid "Remove users from group" msgstr "" #: src/options/groupoptionspanel.cpp:264 msgid "Name of new group:" msgstr "" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "Добавить новую группу" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "Веб браузер" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "Браузер по умолчанию" #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "Исп. ваши системные настройки браузера" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "Точно" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "Определите точно Ваш браузер для использования" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "Просмотреть" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "Исп. файловый диалог для поиска веб браузера" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 #, fuzzy msgid "Use a file dialog to find the editor binary" msgstr "Исп. файловый диалог для поиска веб браузера" #: src/options/lobbyoptionstab.cpp:91 msgid "Autoconnect" msgstr "" #: src/options/lobbyoptionstab.cpp:94 #, fuzzy, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" "Если установлено, SpringLobby будет сразу заходить на последний " "использовавшийся сервер" #: src/options/lobbyoptionstab.cpp:96 msgid "Autoconnect on lobby start" msgstr "" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "Сообщить статистику" #: src/options/lobbyoptionstab.cpp:104 #, fuzzy, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" "По умолчанию SpringLobby будет сообщать некоторую статистику (система, " "версия SpringLobby) на сервер,\n" "чтобы одновременно сделать помощь Вам в решении проблем проще и сообщить о " "важных обновлениях.\n" "Уберите отметку для отключения." #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "сообщить статистику" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "Автоматические обновления" #: src/options/lobbyoptionstab.cpp:120 #, fuzzy, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" "SpringLobby при запуске может проверить доступность новой версииd и " "автоматически скачать его для Вас." #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "автоматически проверить на обновления" #: src/options/lobbyoptionstab.cpp:130 msgid "Tooltips" msgstr "" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "Показывать подсказки?" #: src/options/lobbyoptionstab.cpp:134 #, fuzzy, c-format msgid "Requires %s restart to take effect." msgstr "Необходим перезапуск SpringLobby для работы настроек." #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "Завершение через Tab" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" "\"Точное совпадение\" будет заканчивать слово, только если нет вариантов.\n" "\"Приблизительное совпадение\" будет выбирать ближайшее совпадение" #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "Точное совпадение" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "Приблизительное совпадение" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "Играть звуки уведомлений" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 #, fuzzy msgid "Display time for popup notifications in seconds" msgstr "Играть звуки уведомлений" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 msgid "Start tab" msgstr "" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "Выбрать исполняемый файл браузера" #: src/options/lobbyoptionstab.cpp:282 #, fuzzy msgid "Choose a editor browser executable" msgstr "Выбрать исполняемый файл браузера" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "Spring" #: src/options/mainoptionstab.cpp:73 msgid "General" msgstr "" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "Группы" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "Восстановить" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "Применить" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "Исполняемые Spring'а" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "Местоположение" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "Найти" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "UnitSync библиотека" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "Авто настройка" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "Выбрать исполняемый Spring'а" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "Библиотека" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "Любой файл" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "Выбрать UnitSync библиотеку" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 #, fuzzy msgid "Reloading unitsync" msgstr "Обновить список" #: src/options/springoptionstab.cpp:315 #, fuzzy, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" "SpringLobby не может загрузить Вашу UnitSync библиотеку.\n" "\n" "Вы может хотите проверить Ваши настроки unitsync." #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "Выберите папку" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" "Что-то происзошло не так при создании папок\n" "Пожалуйста, создайте вручную следующие папки:" #: src/playback/playbackfilter.cpp:60 msgid "Filter settings" msgstr "Настройки отсеивания" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Только имеющиеся у меня карты" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "Размер файла в KB:" #: src/playback/playbackfilter.cpp:190 msgid "Duration (hh:mm:ss):" msgstr "" #: src/playback/playbacklistctrl.cpp:42 msgid "Date" msgstr "" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Имя карты" #: src/playback/playbacklistctrl.cpp:46 msgid "Duration" msgstr "" #: src/playback/playbacklistctrl.cpp:47 msgid "Spring Version" msgstr "" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize" msgstr "" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "Файл" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "Скачать м&од" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "Смотреть" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "Загрузка..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "Обновить список" #: src/playback/playbacktab.cpp:280 msgid "replay" msgstr "" #: src/playback/playbacktab.cpp:280 msgid "savegame" msgstr "" #: src/playback/playbacktab.cpp:288 msgid "Couldn't get your spring versions from any unitsync library." msgstr "Невозможно проверить версию Spring'а через unitsync библиотеку." #: src/playback/playbacktab.cpp:306 #, fuzzy, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" "Не найдено совместимых версий Spring'а, этот сервер требует версию: %s\n" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "Ваши текущие версии:" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" #: src/playback/playbacktab.cpp:323 #, fuzzy msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" "Вам необходимо иметь мод для просмотра этого повтора.\n" "\n" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "Invalid replay" msgstr "" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "Невозможно удалить повтор: " #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "Вас выгнали из сражения!" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "Был выгнан сервером" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr " осталось неизвестно времени" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr " %d минут осталось" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 msgid "There was an error downloading for the latest version.\n" msgstr "" #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "Уведомление" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "Неправильное число" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 #, fuzzy msgid "File doesn't exit" msgstr "Нет такой карты." #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Действие" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "Пересоединиться" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 #, fuzzy msgid "Unknown Error" msgstr "Неизвестный ответ от сервера" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "" #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 msgid "Download complete." msgstr "" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer." msgstr "" #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "Пересоединиться" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "Пересоединиться" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 #, fuzzy msgid "Tries to connect to the next server in the list." msgstr "Вам нужно присоединиться к серверу для просмотра списка каналов" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 msgid "Do nothing" msgstr "Ничего не делать" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "Отсеивание имён" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "Введите текст для отсеивания пользователей в списке" #: src/selectusersdialog.h:67 msgid "Select Users" msgstr "" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 msgid " is online" msgstr "" #: src/serverevents.cpp:165 msgid " is now " msgstr " сейчас " #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "OnUserStatus() failed ! (exception)" #: src/serverevents.cpp:224 msgid " just went offline" msgstr "" #: src/serverevents.cpp:259 msgid " opened battle " msgstr "" #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "Неудачный вход на канал" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "Невозможно войти на канал " #: src/serverevents.cpp:583 msgid " because: " msgstr " ,потому что: " #: src/serverevents.cpp:826 msgid "Server Message" msgstr "Сообщение сервера" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr " имел ip=%s" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr " не поддерживает NAT обход" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "Начать список молчания для " #: src/serverevents.cpp:928 #, c-format msgid "%s mutelist" msgstr "" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "Завершить список молчания для " #: src/serverevents.cpp:984 msgid "Download update" msgstr "" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 #, fuzzy msgid "Automatically moved to new battle" msgstr "автоматически проверить на обновления" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" "Вы можете разместить значок солнце/бота на определённом месте появления.\n" " Наведите на значок для появления окна и настройки стороны, союза и бонуса." #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "Добавить бота" #: src/singleplayertab.cpp:99 msgid "Spectate only" msgstr "" #: src/singleplayertab.cpp:102 msgid "Random start positions" msgstr "" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "-- Выберите --" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 #, fuzzy msgid "Game setup error" msgstr "Ошибка настроек игры" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "Сначала выберите карту." #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" "Продолжить без добавления бота?.\n" " Игра завершится очень быстро.\n" " " #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "Нет ботов" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "Вы не можете запустить Spring, пока запущен другой" #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 #, fuzzy msgid "Coulnd't load required unitsync library" msgstr "Выберите библиотеку unitsync" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 #, fuzzy msgid "Fatal error" msgstr "Главная ошибка" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" "Приложение сообщило о главной ошибке и будет завершено\n" "Создание сообщения об ошибке невозможно\n" "\n" "пожалуйста, возьмите wxWidgets библиотеку, которая поддерживает " "wxUSE_DEBUGREPORT" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "Главная ошибка" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 msgid "Ignore chat" msgstr "" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 msgid "Battle Autokick" msgstr "" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 msgid "Friends" msgstr "" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "Скорость колеса мыши" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" "Высокие значения означают быстрое приближение колесом мыши.\n" "Отрицательные значения разворачивают направление приближения.\n" "Результат может оченть зависеть от режима камеры!" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "Размер карты тени" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" "высокое значение = более чёткие тени\n" "возможные значения: 1024, 2048, 4096, 8192" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "Расстояние видимости деревьев" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "" "установка максимального расстояния, на котором будут оставаться видны деревья" #: src/springsettings/ctrlconstants.h:229 msgid "Terrain detail" msgstr "Детали поверхности" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "выше значение = более точная земля" #: src/springsettings/ctrlconstants.h:230 #, fuzzy msgid "Unit LOD distance" msgstr "Расстояние значков войск" #: src/springsettings/ctrlconstants.h:230 #, fuzzy msgid "higher value = units will remain detailed even when zooming out" msgstr "выше значение = более точные войска" #: src/springsettings/ctrlconstants.h:231 msgid "Grass detail" msgstr "Детали травы" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "higher value = more detailed grass" msgstr "выше значение = более точные войска" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "Детали земли" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "Расстояние значков войск" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" "определяет значение, на котором войска будут полностью рисоваться\n" "выше значение = больше расстояние = больше одновременно нарисованных войск" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "Максимум единовременных частиц" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "определяет сколько частиц будет отображено в одно время" #: src/springsettings/ctrlconstants.h:236 #, fuzzy msgid "Max nano simultaneous particles" msgstr "Максимум единовременных частиц" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "Запуск в полный экран" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "запускать в полный экран или в окне?" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "Режим двух экранов" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "если у Вас есть два монитора, вы можете исп. оба" #: src/springsettings/ctrlconstants.h:245 msgid "Enable v-sync" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "Вертикальная синхронизация вкл./выкл." #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "16-bit Z-буфер" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "метка" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "24-bit Z-буфер" #: src/springsettings/ctrlconstants.h:259 #, fuzzy msgid "Full-scene anti-aliasing samples" msgstr "как много раз anti-aliasing должен быть наложен" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "как много раз anti-aliasing должен быть наложен" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "Максимум единовременных звуков" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" #: src/springsettings/ctrlconstants.h:273 #, fuzzy msgid "Master sound volume" msgstr "общая громкость звука" #: src/springsettings/ctrlconstants.h:273 #, fuzzy msgid "master sound volume" msgstr "общая громкость звука" #: src/springsettings/ctrlconstants.h:274 #, fuzzy msgid "General sound volume" msgstr "общая громкость звука" #: src/springsettings/ctrlconstants.h:274 #, fuzzy msgid "general volume relative to master volume" msgstr "громкость ответа зависит от общей громкости" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "Громкость ответа войск" #: src/springsettings/ctrlconstants.h:275 #, fuzzy msgid "reply volume relative to master volume" msgstr "громкость ответа зависит от общей громкости" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "Battle volume" msgstr "Комната сражения" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "battle volume relative to global volume" msgstr "громкость ответа зависит от общей громкости" #: src/springsettings/ctrlconstants.h:277 #, fuzzy msgid "User interface volume" msgstr "Громкость ответа войск" #: src/springsettings/ctrlconstants.h:277 #, fuzzy msgid "ui volume relative to global volume" msgstr "громкость ответа зависит от общей громкости" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "Тени" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "включить тени? (может уменьшить производительность)" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "3D деревья" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" "хочешь более красивые деревья?\n" "надо Geforce 2/Radeon 8500/Intel 830 или видеокарта более позднего класса" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "Облака с высоким разрешением" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" "хочешь более красивое небо?\n" "надо Geforce 5/Radeon 9500/Intel 915 или видеокарта более позднего класса" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "Движущиеся облака" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "хочешь движущиеся облака в небе" #: src/springsettings/ctrlconstants.h:291 msgid "Reflective units" msgstr "Блестящие войска" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" "войска блестят?\n" "надо Geforce 5/Radeon 9500/Intel 915 или видеокарта более позднего класса" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "Не использовать ППТ (shaders) на картах SM3" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "проблемы с картами sm3? включите это" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "Включить поддержку LuaShaders" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "для некоторых классных эффектов" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "Исп. Pixelbuffer objects" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" "Если есть поддержка этого, то ускорится загрузка изображения поверхности -> " "более гладкое движение камеры" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "Сжатие текстур" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" "Сжатие текстур в процессе. (Идеально для видеокарт с маленьким размером " "виртуальной памяти)" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "Высокое разрешение LOS" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "более гладкая Line of Sight (линия видимости)" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "Гладкие точки" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "применять ли на точки anti-aliasing" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "Гладкие линии" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "применять ли на линии anti-aliasing" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "Обозначать команды на миникарте" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "Обозначение приказов на миникарте, если хотите " #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "Показывать команды на миникарте" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "начальное значение \"вкл.\"" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "Отображать значки на миникарте" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "Отображать пометки на миникарте" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "Миникарта слева (один монитор)" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 msgid "left is the default" msgstr "слева, по-обычному" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "Миникарта слева (два монитора)" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "Простые цвета на миникарте" #: src/springsettings/ctrlconstants.h:312 msgid "Use less colors" msgstr "Использовать меньше цвета" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "Цветной наноспрей" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "Окрашивать ли нано частицы в цвет Вашей команды?" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "Цветная карта высот" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "делает различия в высотах чётче" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "Показывать часы в игре" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" "требует \"Включить LuaWidgets\"\n" "Будут показываться внизу справа" #: src/springsettings/ctrlconstants.h:320 msgid "Show in-game player information" msgstr "Показывать информацию игрока в игре" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "Показывать FPS в игре" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "Исправлять отрисовку при Alt+Tab" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "Не изменяйте, если ненужно" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "Запретить помощников" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" "Отключение, например, Economy AI.\n" "Если включено, может обрезаться LuaUI." #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "Включить смещение камеры по краю экрана" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "Двигать камеру, при достижении мышкой края экрана." #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "Развернуть мышь" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "Разворачивает Y-ось в режиме FPS" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "Исп. системный указатель" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "Использовать указатель мыши из ОС (аппаратно ускорено)" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "Камера над головой" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "установить скорость прокрутки (мышь + клавиатура) для этого режима" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "Вращаемая камера" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "Камера общего вида" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "Камера от первого лица" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "Свободная камера" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" "Сделать этот режим по умолчанию при запуске Spring'а.\n" "Может быть изменено в игре." #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "Уровень сообщений (0=мин,10=макс)" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "Как много информации должно быть выведено?" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "Вылавливать ИИ исключения" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "отключите для отладки ИИ" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "Основное" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" "В зависимости от мощности Вашей видеокарты,\n" "выбор более высокого качества, чем основное может\n" "основательно повлиять на производительность Spring'а.\n" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective" msgstr "Блестящий" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "Блеск + преломление" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "Движение" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "Bump-mapped" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "Развернуть y-ось мыши" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "меняет верх/низ на низ/верх" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "Поддержка 3х кнопочной мыши в миникарте" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "если вы не хотите использовать эту кнопку, то отключите это" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "Над головой" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "Постоянный вид из глаза птицы" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "Вращаемый вид" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "Тоже что и над головой, но Вы можете вращатся по z-оси" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "Общий вид" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "камера сверху, которая может быть развёрнута по X оси" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "От первого лица" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "Камера с позиции взгляда войск" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "Меняйте вид как Вам захочется" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "ширина экрана" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "высота экрана" #: src/springsettings/ctrlconstants.h:415 msgid "Blur reflection" msgstr "Мутность" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "Исп. глубину картинок" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "включает более гладкое размытие на линии берега" #: src/springsettings/ctrlconstants.h:417 msgid "Shore waves" msgstr "Прибрежные волны" #: src/springsettings/ctrlconstants.h:417 msgid "Enables shorewaves" msgstr "Включить прибрежные волны" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "Блестящий" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "Включает отражение на воде" #: src/springsettings/ctrlconstants.h:420 msgid "Reflection texture size" msgstr "Размер картинки отражений" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "Продолжительность:" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" "Включает преломление на воде.\n" "(0:=выкл., 1:=копия экрана(быстро), 2:=собственная отрисовка(медленно))." #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "Anisotropy" #: src/springsettings/ctrlconstants.h:431 #, fuzzy msgid "off" msgstr "Выкл." #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "копия экрана(быстро)" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "собственная отрисовка(медленно)" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "Общие настройки" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "Качество отрисовки / Режим видео" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "Детальность отрисовки" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "UI настройки" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "Звук" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 #, fuzzy msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" "Изменения, сделанные на вкладке Качество/Детали в режиме эксперта\n" " будут потеряны, если Вы поменяете простые настройки опять.\n" "Также эти изменения НЕ БУДУТ отражены в \n" "выбранных настройка на вкладке Общие настройки.\n" "(это сообщение может быть отключено в меню \"Файл\")" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "Ошибка!" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "Сохранить настройки Spring'а перед выходом?" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "Необходимо подтверждение" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "Настройки Spring'а (простой режим)" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "Созранить настройки" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "Сбросить значения настроек" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "Отключить предупреждение режима эксперта" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "Выход" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "Просто (мало опций)" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "Эксперт (все опции" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "О программе" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "Связь" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "Авторы" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "Сообщить об ошибке" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "Режим" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "Инфо/Помощь" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "Сбросить все настройки?" #: src/springsettings/frame.cpp:315 #, fuzzy msgid "(simple mode)" msgstr "Настройки Spring'а (простой режим)" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "Подсказка" #: src/springsettings/frame.cpp:367 #, fuzzy msgid "(expert mode)" msgstr "Перейти в режим эксперта" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "SpringSettings графическое приложение для настроек движка Spring" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "Kloot" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "Команда SpringLobby" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "все сообщаю ошибки/предложения" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "Неверный порт" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 #, fuzzy msgid "Hotkey Error" msgstr "Ошибка помощи" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 #, fuzzy msgid "Enter new command:" msgstr "Команды разговора:" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 #, fuzzy msgid "Hotkey SaveSettings error" msgstr "Ошибка настроек Spring'а" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 msgid "New hotkey profile found" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "Путь к библиотеке unitsync" #: src/springsettings/panel_pathoption.cpp:34 #, fuzzy msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" "Ошибка в Ваших настройках.\n" "Пожалуйста, проверьте путь на правильность.\n" "После исправление, нажмите\n" "\"Исп. этот путь\" кнопку и попробуйте снова." #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "Исп. этот путь" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "libunitsync.so в linux, unitsync.dll в windows" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "Настройка пути" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "Выберите библиотеку unitsync" #: src/springsettings/panel_pathoption.cpp:96 #, fuzzy msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" "SpringSettings не может загрузить Вашу библиотеку unitsync.\n" "Вам можете взглянуть на настройки.\n" "Версия Вашего Spring'а должна быть 0.76 или новее, иначе \n" "это будет случаться всегда." #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "низко" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "средне" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "высоко" #: src/springsettings/presets.h:45 msgid "very low" msgstr "очень низко" #: src/springsettings/presets.h:45 msgid "very high" msgstr "очень высоко" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "невозможно запустить стандартный браузер" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "Невозможно запустить браузер. URL адрес: " #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "Невозможно запустить браузер" #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "Невозможно получить доступ к Вашим настройкам.\n" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "Невозможно сохранить, т.к. unitsync не загружен" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "Ошибка настроек Spring'а" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "Настройки звука" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "Разрешение экрана" #: src/springsettings/tab_quality_video.cpp:166 msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "Качество воды" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "Разрешение" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "Настройки качество отображения" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "Настройки режима видео" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "Настройки Anti-Aliasing" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "Z-/Глубина-Буфер" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "Bump-mapped вода" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "Уровни отображения деталей" #: src/springsettings/tab_simple.cpp:40 #, fuzzy msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" "Эти настройки дают Вам примерно настроить отображение Spring's.\n" "Для большей скорости попробуйте низкие настройки.\n" "Полный контроль над всеми настройками доступен в\n" "\"EРежиме эксперта\", для чего нажмите на кнопку\n" "справа или используйте меню \"Режим\" вверху.\n" "Вы можете вернуться к этому режиму в любое время, выбрав\n" "\"Простой реим\" из меню \"Режим\".\n" "Если Вы сталкиваетесь с сообщениями об ошибках о графике\n" "при запуске Spring'а, это может означать необходимость в отключении\n" " некоторых настроек в режиме эксперта.\n" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "Качество графики" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "Детали графики" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "Разрешение экрана" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "Перейти в режим эксперта" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr " (текущее)" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" "Устанавливает все настройки качество на значения относительно Вашего выбора" #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" "Устанавливает все настройки деталей на значения относительно Вашего выбора" #: src/springsettings/tab_simple.cpp:99 #, fuzzy msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" "Выберите разрешение экрана под Ваш(и) монитор(ы).\n" "Выбор разрешения на два монитора автоматически включит режим двух экранов.\n" "Если соотетствующее разрешение недоступно, оно может быть установлено " "вручную в режиме эксперта.\n" "Пожалуйстя, свяжитесь с автором, так как это может быть добавлено в будущих " "выпусках." #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "Инфо" #: src/springsettings/tab_ui.cpp:37 #, fuzzy msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" "Установка ползунка на 0 исключит\n" "режим из выбора в игре." #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "Скорость прокрутки (мышь + клавиатура)" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "Режим камера по умолчанию" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "Разное. UI настройки" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "Приближение" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "Разрешенные войска" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "Время ожидания для соединения истекло" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "Неизвестный ответ от сервера" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" "Ошибка прохода через NAT, игра в этом сражении может не работать для Вас или " "для дргих игроков." #: src/tdfcontainer.cpp:131 msgid "line " msgstr "линия " #: src/tdfcontainer.cpp:131 msgid " , column " msgstr " , столбец " #: src/ui.cpp:175 msgid "Server password" msgstr "Пароль сервера" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" "Регистрация прошла успешно,\n" "теперь вы можете подключиться." #: src/ui.cpp:294 msgid "Registration successful" msgstr "Регистрация прошла успешно!" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "Регистрация не удалась, причина:\n" #: src/ui.cpp:458 msgid "Help error" msgstr "Ошибка помощи" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, fuzzy, c-format msgid "%s commands help." msgstr "SpringLobby помощь по командам." #: src/ui.cpp:465 msgid "Global commands:" msgstr "Общие команды:" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr " \"/away\" - Ставит Ваш статус как \"отошёл\"," #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr " \"/back\" - Отменяет статус \"отошёл\"," #: src/ui.cpp:468 #, fuzzy msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" " \"/changepassword oldpassword newpassword\" - Меняет текущий пароль " "аккаунта." #: src/ui.cpp:469 #, fuzzy msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" " \"/changepassword oldpassword newpassword\" - Меняет текущий пароль " "аккаунта." #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr " \"/channels\" - Показывает все каналы." #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr "" " \"/help [topic]\" - Вставьте заголовок (topic), если Вы хотите более " "детальную информацию об этой команде." #: src/ui.cpp:472 #, fuzzy msgid " \"/join channel [password]\" - Joins a channel." msgstr " \"/channels\" - Показывает все каналы." #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr " \"/j\" - Тоже, что и /join." #: src/ui.cpp:474 msgid " \"/ingame\" - Shows how much time you have in game." msgstr "" #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" #: src/ui.cpp:476 msgid " \"/part\" - Leaves current channel." msgstr "" #: src/ui.cpp:477 msgid " \"/p\" - Alias to /part." msgstr "" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr "" " \"/rename newalias\" - Меняет Ваш текущий псевдоним (nickname) на новый " "(newalias)." #: src/ui.cpp:479 #, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr "" #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr "" " \"/testmd5 text\" - Сообщает md5-b64 содержимое введённого текста (text)." #: src/ui.cpp:481 #, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr "" #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "Команды разговора:" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr " \"/me action\" - Сказать о действии в стиле IRC." #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" "Если Вы потеряли какие-то команды, идите на #springlobby и попробуйте ввеси " "их там :)" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "Не введён заголовок." #: src/ui.cpp:496 msgid "The topic \"" msgstr "Заголовок \"" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "" "\" не был найден. Вводите \"/help topics\" только для доступных заголовков." #: src/ui.cpp:580 msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" "Невозможно получить версию Вашего Spring'а из unitsync библиотеки.\n" "\n" "Игра с другими будет недоступна." #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" "Не найдено совместимых версий Spring'а, этот сервер требует версию: %s\n" #: src/ui.cpp:599 msgid "Online play is currently disabled." msgstr "" #: src/ui.cpp:631 #, c-format msgid "disconnected from server: %s" msgstr "" #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "нет открытых работающих вкладок разговора" #: src/ui.cpp:839 #, fuzzy, c-format msgid "%s (%d users)" msgstr "(%d игроков)" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "Сражение было закрыто сервером." #: src/ui.cpp:993 msgid "Battle closed" msgstr "Сражение закрыто" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" "Настройка Вашего Spring'а, возможно, не настроены верно,\n" "Вы должны проверить Ваши настройки перет тем, как попробовать\n" "играть с другими." #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "Ошибка в настройках Spring'а" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "" #: src/ui.cpp:1337 #, fuzzy, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" ",\n" "Похоже это Ваше первое время со SpringLobby. Я полагаю настройки, которые, " "как мне кажется, будут работать у Вас, но Вы должны проверить их, особенно " "настроки Spring'а. \n" "\n" "Когда Вы завершите, Вы можете идти в меню Файл, соединиться с сервером и " "получать удовольствие от классной игры в Spring :)" #: src/ui.cpp:1340 msgid "Welcome" msgstr "Добро пожаловать" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 msgid "Import settings?" msgstr "" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Произошла ошибка при проверке наличия последней версии.\n" "Пожалуйста, попробуйте снова позже.\n" "Если проблема повторится, пожалуйста, возпользуйтесь меню Помощь->Сообщить " "об ошибке для сообщения об этой ошибке." #: src/ui.cpp:1387 msgid "Your Version: " msgstr "Ваша версия: " #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "Новейшая версия: " #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 msgid "Not up to date" msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "Ошибка ChanServ" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" "Версия Вашего SpringLobby не обновлена.\n" "\n" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "Не обновлено" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" "\n" "Пусть просмотра: " #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" "Невозможна запись в папку SpringLobby.\n" "Пожалуйста обновите вручную или включите разрешение к записи для текущего " "пользователя." #: src/updater/updater.cpp:72 msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Была ошибка при скачивании последней версии.\n" "Пожалуйста, попробуйте снова позже.\n" "Если проблема повторится, пожалуйста, возпользуйтесь меню Помощь->Сообщить " "об ошибке для сообщения об этой ошибке." #: src/updater/updater.cpp:81 #, fuzzy, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" "Была ошибка при перезаписи текущего исполняемого\n" " необходимо вручную скопировать: %s\n" " в: %s\n" "Пожалуйста, возпользуйтесь меню Помощь->Сообщить об ошибке для сообщения об " "этой ошибке." #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 #, fuzzy msgid "the SpringLobby revision to update to" msgstr "" "Версия Вашего SpringLobby не обновлена.\n" "\n" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "SpringLobby" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 #, fuzzy msgid "Warning" msgstr "Уведомлнение" #: src/user.cpp:83 msgid "away" msgstr "" #: src/user.cpp:83 msgid "back" msgstr "вернулся" #: src/user.cpp:85 msgid "ingame" msgstr "" #: src/user.cpp:85 msgid "back from game" msgstr "вернулся из игры" #: src/user.cpp:195 msgid "Newbie" msgstr "Начинающий" #: src/user.cpp:196 msgid "Beginner" msgstr "Новичок" #: src/user.cpp:197 msgid "Average" msgstr "Средний" #: src/user.cpp:198 msgid "Above average" msgstr "Выше среднего" #: src/user.cpp:199 msgid "Experienced" msgstr "С навыком" #: src/user.cpp:200 msgid "Highly experienced" msgstr "С большим навыком" #: src/user.cpp:201 msgid "Veteran" msgstr "Ветеран" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 msgid "Unknown" msgstr "" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" "По различным причинам добавление пользователя в более, чем одну группу, " "запрещено" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "Невозможно добавить пользователя в группу" #: src/useractions.h:11 msgid "none" msgstr "" #: src/useractions.h:11 msgid "highlight" msgstr "" #: src/useractions.h:11 msgid "notify login/out" msgstr "напоминать о входе/выходе" #: src/useractions.h:11 msgid "ignore chat" msgstr "не обращать внимания в разговоре" #: src/useractions.h:11 msgid "ignore pm" msgstr "не обращать внимания" #: src/useractions.h:12 msgid "autokick" msgstr "автоматически выгнать" #: src/useractions.h:12 msgid "notify hosted battle" msgstr "" #: src/useractions.h:12 msgid "notify status change" msgstr "уведомлять о смене состояния" #: src/useractions.h:19 msgid "no action at all" msgstr "нет действий для всех" #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "подсвечивать имя пользователя в списке и сражениях, в которых он есть" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "сообщить в окне, когда пользователь входит/выходит с сервера" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" "пропускать сообщения от этих пользователей, личные разговоры не будут " "появляться, если кто-то из них будет пытаться связаться с Вами лично" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "сообщить в окне, если пользователь создаст новое сражение" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "сообщить в окне, если пользователь сметит состояние \"ушёл\"" #: src/usermenu.h:31 msgid "Create new group..." msgstr "Создать группу..." #: src/usermenu.h:37 msgid "Add to group..." msgstr "" #: src/usermenu.h:38 msgid "Remove from group" msgstr "" #: src/utils/controls.h:22 msgid "Choose color" msgstr "" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "Выберите цвет (первых 19 цветов могут быть сохранены)" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 msgid "Author" msgstr "" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Games" msgstr "Игра" #: src/widgets/downloadlistctrl.cpp:31 msgid "Compatible games" msgstr "" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "Отсеивание имён" #: src/widgets/infopanel.cpp:74 msgid "Current version" msgstr "" #: src/widgets/infopanel.cpp:79 msgid "# downloaded" msgstr "" #: src/widgets/infopanel.cpp:84 msgid "Published on" msgstr "" #: src/widgets/infopanel.cpp:121 msgid "Changelog" msgstr "" #: src/widgets/infopanel.cpp:126 msgid "Screenshots" msgstr "" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" #, fuzzy #~ msgid "Settings" #~ msgstr "Созранить настройки" #, fuzzy #~ msgid "Help" #~ msgstr "&Справка" #, fuzzy #~ msgid "Faction" #~ msgstr "Действие" #~ msgid "Mod" #~ msgstr "Мод" #~ msgid "Mod:" #~ msgstr "Мод:" #~ msgid "Only mods i have" #~ msgstr "Только имеющиеся у меня моды" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to host a new game" #~ msgstr "" #~ "Spring уже запущен, пожалуйста закройте его перед тем как создавать новую " #~ "игру" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to join another battle." #~ msgstr "" #~ "Spring уже запущен, так что сначала закройте его перед тем, как " #~ "присоединятся к другим сражениям." #~ msgid "Do you want me to take you to the download page?" #~ msgstr "Хотите ли посетить страницу закачек?" #~ msgid "Mod not available" #~ msgstr "Мод не доступен" #~ msgid "Enter password" #~ msgstr "Введите пароль" #~ msgid "cpu" #~ msgstr "ЦП" #~ msgid "Mod Options" #~ msgstr "Настройки мода" #~ msgid "Map Options" #~ msgstr "Настройки карты" #~ msgid "You don't have the mod " #~ msgstr "У Вас нет мода " #~ msgid " . Please download it first" #~ msgstr " . Пожалуйста, установите сначала" #~ msgid "Mod unavailable" #~ msgstr "Мод не доступен" #~ msgid "Hash" #~ msgstr "содержание" #~ msgid "unknown hash " #~ msgstr "неизвестное содержимое " #~ msgid "Test firewall" #~ msgstr "Проверить фаирволл" #~ msgid "Relay battle to an Autohost" #~ msgstr "Сменить сражение на автосервер" #~ msgid "P2P" #~ msgstr "P2P" #~ msgid "Total Outgoing: " #~ msgstr "Всего исходящих: " #~ msgid "Publish new file" #~ msgstr "Разместить файл" #~ msgid "Search file" #~ msgstr "Поиск файла" #~ msgid "not available" #~ msgstr "недоступно" #~ msgid "seeding" #~ msgstr "раздача" #~ msgid "leeching" #~ msgstr "получение" #~ msgid "Status: not connected" #~ msgstr "Состояние: не подключен" #~ msgid "Status: connected" #~ msgstr "Состояние: подключен" #~ msgid "Status: throttled or paused (ingame)" #~ msgstr "Статус: на паузе (в игре)" #~ msgid "Status: unknown" #~ msgstr "Статус: неизвестно" #~ msgid "Total Outgoing: %.2f KB/s" #~ msgstr "Исходящий всего: %.2f KB/s" #~ msgid "Total Incoming: %.2f KB/s" #~ msgstr "Входящих всего: %.2f KB/s" #~ msgid "&File" #~ msgstr "&Файл" #~ msgid "Manually &Start Torrent System" #~ msgstr "&Запустить систему потоков (torrents)" #~ msgid "Manually &Stop Torrent System" #~ msgstr "&Остановить систему потоков (torrents)" #~ msgid "" #~ "No compatible installed spring version has been found, this replay " #~ "requires version: %s\n" #~ msgstr "" #~ "Не найдено совместимых версий Spring'а, т.к. повтор требует версию: %s\n" #~ msgid "Debug" #~ msgstr "Отладка" #~ msgid "SpringSettings (expert mode)" #~ msgstr "Настройки Spring'а (режим эксперта)" #~ msgid "" #~ "thanks for inviting me in, code to re-use, infrastructure and help in " #~ "general" #~ msgstr "спасибо за приглашение, использование кода, помощь в целом" #~ msgid "" #~ "The application has generated a fatal error and will be terminated\n" #~ "Generating a bug report is not possible\n" #~ "\n" #~ "please enable wxUSE_DEBUGREPORT" #~ msgstr "" #~ "Приложение сообщило о главной ошибке и будет завершено\n" #~ "Создание сообщения об ошибке невозможно\n" #~ "\n" #~ "пожалуйста, включите wxUSE_DEBUGREPORT" #~ msgid "Debug Options" #~ msgstr "Настройки отладки" #~ msgid "Hi " #~ msgstr "Привет " #~ msgid "numcopies" #~ msgstr "число копий" #~ msgid "MB uploaded" #~ msgstr "MB загружено" #~ msgid "status" #~ msgstr "состояние" #~ msgid "KB/s up" #~ msgstr "KB/s ушло" #~ msgid "KB/s down" #~ msgstr "KB/s пришло" #~ msgid "ETA (s)" #~ msgstr "осталось (сек.)" #~ msgid "Filesize (MB)" #~ msgstr "Размер файла (MB)" #~ msgid "Torrent system autostart" #~ msgstr "Автозапуск системы потоков (torrents)" #~ msgid "at lobby connection (default)" #~ msgstr "При соединении с сервером (по умолчанию)" #~ msgid "at lobby start" #~ msgstr "при запуске сервера" #~ msgid "manual" #~ msgstr "ручная" #~ msgid "" #~ "Tried all known trackers for torrent system. No connection could be " #~ "established" #~ msgstr "" #~ "Опробованы все \"охотники\" для системы потоков. Не найдено стабильного " #~ "соединения" #~ msgid "Torrent system failure" #~ msgstr "Ошибка системы потоков" #~ msgid "Type /help in a chat box." #~ msgstr "Введите /help в строке разговора." #~ msgid "Server message" #~ msgstr "Сообщение сервера" #~ msgid "Update complete. The changes will be available next lobby start." #~ msgstr "Обновление завершено. Изменения вступят в силу после перезапуска." #~ msgid "a" #~ msgstr "с" #~ msgid "p" #~ msgstr "и" #~ msgid "m" #~ msgstr "м" #~ msgid "%d%" #~ msgstr "%d%" #~ msgid "t" #~ msgstr "к" #~ msgid "Not a number" #~ msgstr "Это не число" #~ msgid "" #~ "Value out of range.\n" #~ " Enter an integer between 0 & 100." #~ msgstr "" #~ "Значение вне предела.\n" #~ "Пожалуйста, введите между 0 и 100." #~ msgid "" #~ "There are two or more bots on the same team. Because bots don't know how " #~ "to share, this won't work." #~ msgstr "" #~ "Два или более ботов в одной команде. Так как боты не умеют обмениваться, " #~ "этого не будет происходить." #~ msgid "Bot team sharing." #~ msgstr "Совместно с ботом." #~ msgid "Use smart scrolling" #~ msgstr "Исп. резкую прокрутку" #~ msgid "_SERVER" #~ msgstr "_SERVER" #~ msgid "Download failed" #~ msgstr "Ошибка скачивания" #~ msgid "" #~ "You need to download the map to be able to watch this replay.\n" #~ "\n" #~ msgstr "" #~ "Вам необходимо иметь карту для просмотра этого повтора.\n" #~ "\n" #~ msgid "Unit detail" #~ msgstr "Детали войск" #~ msgid "only on/off available at this time" #~ msgstr "возможные значения вкл. и выкл." #~ msgid "Global sound volume" #~ msgstr "Общая громкость звука" #~ msgid "mark to be able to use" #~ msgstr "сделать доступными" #~ msgid "Send debug info to console" #~ msgstr "Посылать отладочную инфу в консоль" #~ msgid "if disabled these will only be logged" #~ msgstr "если отключено, то будет только запись в журнал" #~ msgid "128" #~ msgstr "128" #~ msgid "256" #~ msgstr "256" #~ msgid "512" #~ msgstr "512" #~ msgid "" #~ "You're using a wxwidgets library of the 2.6.x series\n" #~ " battle filtering, advanced gui and joining/hosting games using nat " #~ "traversal\n" #~ " won't be available" #~ msgstr "" #~ "Вы используете библиотеку wxwidgets серии 2.6.x\n" #~ " отсеивание сражений, улудшенный интерфейс и вход/создание игр с NAT " #~ "обходом\n" #~ " не будут доступны" #~ msgid "Missing Functionality" #~ msgstr "Утрачена функциональность" #~ msgid "" #~ "Do you want to download OTA content?\n" #~ "You need this to be able to play TA based mods.\n" #~ "You need to own a copy of Total Annihilation do legally download it." #~ msgstr "" #~ "Хотите ли Вы скачать OTA данные?\n" #~ "Вам нужно это для игры в TA моды.\n" #~ "Вам нужна собственная копия Total Annihilation для разрешённого " #~ "скачивания этого." #~ msgid "Download OTA content?" #~ msgstr "Загрузить OTA данные?" #~ msgid "Create a folder in a custom path (you'll get prompted for the path)" #~ msgstr "Создать папку в произвольном пути (у Вас спросят путь)" #~ msgid "I have already a SpringData folder, i want to browse manually for it" #~ msgstr "У меня уже есть папка Spring'а, я хочу указать вручную её" #~ msgid "" #~ "This game uses NAT traversal that is not supported by wx 2.6 build of " #~ "springlobby. \n" #~ "\n" #~ "You will not be able to play in this battle. \n" #~ "Update your wxwidgets to 2.8 or newer to enable NAT traversal support." #~ msgstr "" #~ "Эта игра использует NAT обход, что не поддерживается в wx 2.6 сборке " #~ "SpringLobby. \n" #~ "\n" #~ "Вы не сможете играть в этом сражении. \n" #~ "Обновите Ваш wxwidgets до 2.8 или новее для включения поддержки NAT " #~ "обхода." #~ msgid "" #~ "Cannot save an options set without a name\n" #~ "Please write one in the list or chose an existing to overwrite and try " #~ "again." #~ msgstr "" #~ "Невозможно сохранить настройки без имени\n" #~ "Пожалуйста, введите имя или выберите из списка для перезаписи и " #~ "попробуйте снова." #~ msgid "" #~ "No options set is selected to set as default\n" #~ "Please select one from the list and try again." #~ msgstr "" #~ "Не выбраны настроки для установки по умолчанию\n" #~ "Пожалуйста, выберите настройки из списка и попробуйте снова." #~ msgid "Only the host can change the game options" #~ msgstr "Только сервер может менять настроки игры" #~ msgid "Only the host can start the battle." #~ msgstr "Только сервер может начинать сражение." #~ msgid "Only the host can lock the game." #~ msgstr "Только сервер может запирать игру." #~ msgid "Only the host can toggle autohost mode." #~ msgstr "Только сервер может включать режим автосервера." #~ msgid "Invalid host/port or servername." #~ msgstr "Не правильный порт/адрес или имя сервера." #~ msgid "Active chat channels:" #~ msgstr "Работающие каналы разговора:" #~ msgid "no rank" #~ msgstr "нету уровня" #~ msgid "Only the host can fix player colours." #~ msgstr "Только сервер может исправлять цвета игроков." #~ msgid "Select all" #~ msgstr "Выделить всё" #~ msgid "not connected to server, no user to display" #~ msgstr "нет соединения с сервером, некого отображать" #~ msgid "" #~ "At least one username contained non-ascii or whitespace character.\n" #~ "Please correct and try again." #~ msgstr "" #~ "Как минимум одно имя пользователя содержит не ascii или пробел.\n" #~ "Пожалуйста, исправьте и попробуйте снова." #~ msgid "You have one or more bots sharing team, this is not possible." #~ msgstr "Два и больше компютера на одной команде, и это не сработает." #~ msgid "" #~ "Please enter password needed to join this channel, leave blank for no " #~ "passwrd." #~ msgstr "" #~ "Пожалуйста дайте пароль для канала, или оставте место если пароль не " #~ "нужен." #~ msgid "LuaAI" #~ msgstr "LuaAI" #~ msgid "yes" #~ msgstr "Да" #~ msgid "/.spring" #~ msgstr "/.spring" #~ msgid "Start system" #~ msgstr "Начать систему" #~ msgid "Continue if commander dies" #~ msgstr "Продолжать игру если коммандир умер" #~ msgid "End if commander dies" #~ msgstr "Продолжать если коммандир умер" #~ msgid "End condition" #~ msgstr "Условия конца" #~ msgid "Resources" #~ msgstr "Ресурсы" #~ msgid "The amount of metal each player starts with." #~ msgstr "Количество металла с которым каждый игрок начинает" #~ msgid "Start Energy" #~ msgstr "Начинающие количество енергии" #~ msgid "The amount of energy each player starts with." #~ msgstr "Количество енергии с которым каждый игрок начинает" #~ msgid "Max units" #~ msgstr "Макс. количество единиц" #~ msgid "The maximum number of units allowed per player." #~ msgstr "Макс. количество единиц для каждого игрока" #~ msgid "Limit d-gun" #~ msgstr "Лимит для Д-пушки" #~ msgid "Ghosted buildings" #~ msgstr "Призраки зданий" #~ msgid "Diminishing metal makers" #~ msgstr "Уменьшающиеся вырабатыватели металла" #~ msgid "This chat is exclusively for participants of this battle." #~ msgstr "Этот чат доступен только участникам этой битвы." #~ msgid "Cannot add bot, maximum number of players already reached." #~ msgstr "Невозможно добавить бота, достигнуто максмимальное число игроков." #~ msgid "Max players reached" #~ msgstr "Достигнуто максимальное число игроков" #~ msgid "Browse..." #~ msgstr "Выбрать..." #~ msgid "Choose a directory" #~ msgstr "Выберите папку" #~ msgid "Up to Date" #~ msgstr "Обновление не нужно" #~ msgid "" #~ "\n" #~ "\n" #~ "Would you like to visit a page with instructions on how to download the " #~ "newest version?" #~ msgstr "" #~ "\n" #~ "\n" #~ "Вы хотите посетить страницу с инструкциями по загрузке последней версии?" #~ msgid "Sets the amount of metal that players will start with" #~ msgstr "Устанавливает начальное количество метала у игроков" #~ msgid "Sets the amount of energy that players will start with" #~ msgstr "Устанавливает начальное количество энергии у игроков" #~ msgid "Max Units Allowed" #~ msgstr "Максимальное число юнитов" #~ msgid "" #~ "Sets the maximum amount of units that a player will be allowed to build" #~ msgstr "" #~ "Устанавливает максимальное число юнитов, которые может построить игрок" #~ msgid "is not supported by the lobby server that requires version" #~ msgstr "не поддерживается сервером, которому нужна версия" springlobby-0.169/po/springlobby.pot0000600000176000000410000041612612105760300021125 0ustar buildbotwww-data00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:49+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "" #: src/Helper/imageviewer.cpp:92 msgid "delete" msgstr "" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "" #: src/Helper/imageviewer.cpp:160 msgid "Choose a filename" msgstr "" #: src/Helper/imageviewer.cpp:167 msgid "File successfully saved" msgstr "" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 msgid "Success" msgstr "" #: src/Helper/imageviewer.cpp:170 msgid "Couldn't save file" msgstr "" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 msgid "Default" msgstr "" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" #: src/Helper/wxTranslationHelper.cpp:148 msgid "Select the language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 msgid "User" msgstr "" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 msgid "Channel" msgstr "" #: src/battlelist/battlelistctrl.cpp:54 msgid "Status" msgstr "" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Minimum rank to join" msgstr "" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "" #: src/battlelist/battlelistctrl.cpp:57 msgid "Battle description" msgstr "" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 msgid "Mapname" msgstr "" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "" #: src/battlelist/battlelistctrl.cpp:59 msgid "Gamename" msgstr "" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "" #: src/battlelist/battlelistctrl.cpp:60 msgid "Name of the Host" msgstr "" #: src/battlelist/battlelistctrl.cpp:61 msgid "Spectators" msgstr "" #: src/battlelist/battlelistctrl.cpp:61 msgid "Number of Spectators" msgstr "" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 msgid "Players" msgstr "" #: src/battlelist/battlelistctrl.cpp:62 msgid "Number of Players joined" msgstr "" #: src/battlelist/battlelistctrl.cpp:63 msgid "Max" msgstr "" #: src/battlelist/battlelistctrl.cpp:63 msgid "Maximum number of Players that can join" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "" #: src/battlelist/battlelistctrl.cpp:209 msgid "Download &game" msgstr "" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "" #: src/battlelist/battlelistctrl.cpp:370 msgid "Active Players:" msgstr "" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "" #: src/battlelist/battlelistfilter.cpp:122 msgid "Highlighted only" msgstr "" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 msgid "Game:" msgstr "" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 msgid "Only games I have" msgstr "" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr "" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 msgid " Filter " msgstr "" #: src/battlelist/battlelisttab.cpp:144 msgid "Activated" msgstr "" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 msgid " Battle infos " msgstr "" #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "" #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "" #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "" #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 msgid "Matchmaker detected" msgstr "" #: src/battlelist/battlelisttab.cpp:420 msgid "Already in another battle" msgstr "" #: src/battlelist/battlelisttab.cpp:420 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" #: src/battlelist/battlelisttab.cpp:430 msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" #: src/battlelist/battlelisttab.cpp:433 msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 msgid "Game not available" msgstr "" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 msgid "Edit auto-joined channels" msgstr "" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "" #: src/channel/channelchooser.cpp:30 msgid "Find channel:" msgstr "" #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 msgid "Choose channels to join" msgstr "" #: src/channel/channellistctrl.cpp:30 msgid "# users" msgstr "" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "" #: src/chatlog.cpp:50 msgid "]" msgstr "" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "" #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "" #: src/chatpanel.cpp:69 msgid "#" msgstr "" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, c-format msgid "%d users" msgstr "" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "" #: src/chatpanel.cpp:296 msgid "Send" msgstr "" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr "" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "" #: src/chatpanel.cpp:717 msgid "channel" msgstr "" #: src/chatpanel.cpp:718 msgid "battle" msgstr "" #: src/chatpanel.cpp:719 msgid "server" msgstr "" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr "" #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr "" #: src/chatpanel.cpp:814 msgid " ** Channel topic:" msgstr "" #: src/chatpanel.cpp:821 msgid " ** Set by " msgstr "" #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "" #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr "" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr "" #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr "" #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr "" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "" #: src/chatpanel.cpp:1090 msgid " ** User is now offline." msgstr "" #: src/chatpanel.cpp:1097 msgid " ** User just got online." msgstr "" #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 msgid " ** Joined Battle." msgstr "" #: src/chatpanelmenu.cpp:34 msgid "Disable text appending" msgstr "" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "" #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "" #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "" #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "" #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "" #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "" #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "" #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "" #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "" #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "" #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "" #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "" #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "" #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "" #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "" #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" #: src/chatpanelmenu.cpp:774 msgid "couldn't add user" msgstr "" #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" #: src/connectwindow.cpp:85 msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "" #: src/connectwindow.cpp:91 msgid "Login" msgstr "" #: src/connectwindow.cpp:92 msgid "Register" msgstr "" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "" #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "" #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" #: src/connectwindow.cpp:294 msgid "Invalid nickname" msgstr "" #: src/connectwindow.cpp:301 msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "" #: src/countrycodes.cpp:11 msgid " Andorra" msgstr "" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "" #: src/countrycodes.cpp:25 msgid "Åland Islands" msgstr "" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "" #: src/countrycodes.cpp:56 msgid "China" msgstr "" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "" #: src/countrycodes.cpp:82 msgid "France" msgstr "" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "" #: src/countrycodes.cpp:110 msgid "India" msgstr "" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "" #: src/countrycodes.cpp:234 msgid "United Kingdom" msgstr "" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "" #: src/countrycodes.cpp:236 msgid "United States" msgstr "" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "" #: src/crashreport.cpp:168 msgid "System informations" msgstr "" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 msgid "not found" msgstr "" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "" #: src/downloader/downloadlistctrl.cpp:222 msgid "downloading" msgstr "" #: src/downloader/downloadlistctrl.cpp:223 msgid "complete" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 msgid "Name" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 msgid "map" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:174 msgid "game" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:55 msgid "Download selected" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "" #: src/downloader/filelister/filelistfilter.cpp:52 msgid "Filename:" msgstr "" #: src/downloader/filelister/filelistfilter.cpp:69 msgid "Filetype:" msgstr "" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:78 msgid "" "\n" "successfully unzipped in:\n" msgstr "" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" #: src/downloader/prdownloader.cpp:43 msgid "Download complete: " msgstr "" #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "" #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 msgid "value" msgstr "" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "" #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" #: src/hosting/autobalancedialog.cpp:53 msgid "Number of allies" msgstr "" #: src/hosting/autobalancedialog.cpp:56 msgid "Auto select" msgstr "" #: src/hosting/battlemaptab.cpp:69 msgid "Select" msgstr "" #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "" #: src/hosting/battlemaptab.cpp:103 msgid "Chose before game" msgstr "" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "" #: src/hosting/battleoptionstab.cpp:77 msgid "Disable selected units." msgstr "" #: src/hosting/battleoptionstab.cpp:81 msgid "Re-enable selected units." msgstr "" #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "" #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "" #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "" #: src/hosting/battleoptionstab.cpp:242 msgid "Unit restriction" msgstr "" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "" #: src/hosting/battleroomlistctrl.cpp:750 msgid "AI (bot)\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:754 msgid "Human\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:759 msgid "Spectator\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:763 msgid "Player\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:768 msgid "Host\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:772 msgid "Client\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:777 msgid "Ready\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:781 msgid "Not ready\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:786 msgid "In sync" msgstr "" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "" #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "" #: src/hosting/battleroomtab.cpp:143 msgid "Auto un-spectate" msgstr "" #: src/hosting/battleroomtab.cpp:144 msgid "automatically unspec when there's a free slot" msgstr "" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "" #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" #: src/hosting/battleroomtab.cpp:174 msgid "Host new" msgstr "" #: src/hosting/battleroomtab.cpp:175 msgid "Host a new battle" msgstr "" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "" #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" #: src/hosting/battleroomtab.cpp:200 msgid "AutoPaste Description" msgstr "" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 msgid "AutoSpect" msgstr "" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 msgid "AutoStart" msgstr "" #: src/hosting/battleroomtab.cpp:209 msgid "Automatically start the battle when all players are ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Ring unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 msgid "Ring ..." msgstr "" #: src/hosting/battleroomtab.cpp:227 msgid "Spect unready" msgstr "" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 msgid "Force spectate ..." msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "" #: src/hosting/battleroomtab.cpp:255 msgid "Save" msgstr "" #: src/hosting/battleroomtab.cpp:256 msgid "Save a set of options." msgstr "" #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 msgid "Delete" msgstr "" #: src/hosting/battleroomtab.cpp:261 msgid "Delete a set of options." msgstr "" #: src/hosting/battleroomtab.cpp:265 msgid "Set default" msgstr "" #: src/hosting/battleroomtab.cpp:266 msgid "Use the current set of options as game's default." msgstr "" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "" #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 msgid "Host is not ingame." msgstr "" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 msgid "Set description" msgstr "" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 msgid "Set Timeout" msgstr "" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 msgid "Delete preset" msgstr "" #: src/hosting/battleroomtab.cpp:996 msgid "Set game default preset" msgstr "" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "" #: src/hosting/hostbattledialog.cpp:89 msgid "Autopaste description" msgstr "" #: src/hosting/hostbattledialog.cpp:91 msgid "Automatically write the battle description when a user joins." msgstr "" #: src/hosting/hostbattledialog.cpp:104 msgid "Select the game to play." msgstr "" #: src/hosting/hostbattledialog.cpp:113 msgid "" "Password\n" "(no spaces)" msgstr "" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "" #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Randomly picks an available one" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "" #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "" #: src/hosting/hostbattledialog.cpp:185 msgid "NAT traversal to use." msgstr "" #: src/hosting/hostbattledialog.cpp:190 msgid "Rank requirement" msgstr "" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 msgid "Select the type of rank enforcement." msgstr "" #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "" #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 msgid "You have to select a game first." msgstr "" #: src/hosting/hostbattledialog.cpp:307 msgid "No game selected." msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" #: src/hosting/hostbattledialog.cpp:427 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:459 msgid "Battle not started beacuse the game you selected could not be found. " msgstr "" #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "" #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 msgid "Unit Restrictions" msgstr "" #: src/hosting/mmoptionwindows.cpp:36 msgid "Change option" msgstr "" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "" #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "" #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "" #: src/iconimagelist.cpp:322 msgid "Game is closed." msgstr "" #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "" #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "" #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "" #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "" #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "" #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "" #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "" #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "" #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "" #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "" #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 msgid "Newbies guide" msgstr "" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 msgid "Joining a battle:\n" msgstr "" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 msgid "Hosting a battle:\n" msgstr "" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 msgid "Spring overview" msgstr "" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 msgid "Singleplayer gamee" msgstr "" #: src/introguide.cpp:110 msgid "Multiplayer gamee" msgstr "" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 msgid "Disconnected from server, chat closed." msgstr "" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "" #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "" #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "" #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 msgid "&Save options" msgstr "" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "" #: src/mainwindow.cpp:148 msgid "&Autojoin channels" msgstr "" #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 msgid "&Spring settings" msgstr "" #: src/mainwindow.cpp:156 msgid "&Save layout" msgstr "" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "" #: src/mainwindow.cpp:164 msgid "Channel &list" msgstr "" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "" #: src/mainwindow.cpp:166 msgid "Change &username" msgstr "" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "" #: src/mainwindow.cpp:169 msgid "&Reload maps/games" msgstr "" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "" #: src/mainwindow.cpp:178 msgid "&System Info" msgstr "" #: src/mainwindow.cpp:179 msgid "&Change language" msgstr "" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "" #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "" #: src/mainwindow.cpp:184 msgid "&Server" msgstr "" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "" #: src/mainwindow.cpp:500 msgid "You need to be connected to a server to view the channel list" msgstr "" #: src/mainwindow.cpp:500 msgid "Not connected" msgstr "" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "" #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "" #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "" #: src/mainwindow.cpp:540 #, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 msgid "No files found" msgstr "" #: src/mainwindow.cpp:656 #, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "" #: src/mainwindow.cpp:692 msgid "This profile is write protected, please choose another name" msgstr "" #: src/mainwindow.cpp:703 msgid "Which profile do you want to load?" msgstr "" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 msgid "Rename" msgstr "" #: src/mainwindow.cpp:767 msgid "Enter new nickname" msgstr "" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "" #: src/mainwindow.h:199 msgid "Battlelist" msgstr "" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "" #: src/mainwindow.h:203 msgid "Replays" msgstr "" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 msgid "Downloads" msgstr "" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "" #: src/mapctrl.cpp:897 msgid "side:" msgstr "" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 msgid "Show" msgstr "" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" #: src/mapselectdialog.cpp:95 msgid "Filter" msgstr "" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" #: src/mapselectdialog.cpp:100 msgid "Map details" msgstr "" #: src/mapselectdialog.cpp:163 msgid "Start positions" msgstr "" #: src/mapselectdialog.cpp:261 msgid "Minimum wind" msgstr "" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "" #: src/mapselectdialog.cpp:263 msgid "Average wind" msgstr "" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "" #: src/mapselectdialog.cpp:265 msgid "Aspect ratio" msgstr "" #: src/mapselectdialog.cpp:266 msgid "Number of start positions" msgstr "" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "" #: src/mmoptionswrapper.cpp:122 msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" #: src/mmoptionswrapper.cpp:125 msgid "Choose in-game" msgstr "" #: src/mmoptionswrapper.cpp:126 msgid "Choose before game" msgstr "" #: src/mmoptionswrapper.cpp:132 msgid "List of restricted units" msgstr "" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "" #: src/options/chatoptionstab.cpp:258 msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "" #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "" #: src/options/chatoptionstab.cpp:300 msgid "Copy server messages in current channel" msgstr "" #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "" #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 msgid "Remove" msgstr "" #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:61 msgid "Rename.." msgstr "" #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:70 msgid "Add New.." msgstr "" #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "" #: src/options/groupoptionspanel.cpp:84 msgid "Group Actions" msgstr "" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "" #: src/options/groupoptionspanel.cpp:95 msgid "Ignore Chat" msgstr "" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:101 msgid "Notify Hosted Battles" msgstr "" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:134 msgid "Highlight Color" msgstr "" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "" #: src/options/groupoptionspanel.cpp:163 msgid "Add.." msgstr "" #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "" #: src/options/groupoptionspanel.cpp:170 msgid "Remove users from group" msgstr "" #: src/options/groupoptionspanel.cpp:264 msgid "Name of new group:" msgstr "" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "" #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 msgid "Use a file dialog to find the editor binary" msgstr "" #: src/options/lobbyoptionstab.cpp:91 msgid "Autoconnect" msgstr "" #: src/options/lobbyoptionstab.cpp:94 #, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" #: src/options/lobbyoptionstab.cpp:96 msgid "Autoconnect on lobby start" msgstr "" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:104 #, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "" #: src/options/lobbyoptionstab.cpp:120 #, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "" #: src/options/lobbyoptionstab.cpp:130 msgid "Tooltips" msgstr "" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "" #: src/options/lobbyoptionstab.cpp:134 #, c-format msgid "Requires %s restart to take effect." msgstr "" #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 msgid "Use notification popups?" msgstr "" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 msgid "Display time for popup notifications in seconds" msgstr "" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 msgid "Start tab" msgstr "" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "" #: src/options/lobbyoptionstab.cpp:282 msgid "Choose a editor browser executable" msgstr "" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "" #: src/options/mainoptionstab.cpp:73 msgid "General" msgstr "" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 msgid "Reloading unitsync" msgstr "" #: src/options/springoptionstab.cpp:315 #, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" #: src/playback/playbackfilter.cpp:60 msgid "Filter settings" msgstr "" #: src/playback/playbackfilter.cpp:113 msgid "Only maps I have" msgstr "" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "" #: src/playback/playbackfilter.cpp:190 msgid "Duration (hh:mm:ss):" msgstr "" #: src/playback/playbacklistctrl.cpp:42 msgid "Date" msgstr "" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "" #: src/playback/playbacklistctrl.cpp:43 msgid "Game name" msgstr "" #: src/playback/playbacklistctrl.cpp:46 msgid "Duration" msgstr "" #: src/playback/playbacklistctrl.cpp:47 msgid "Spring Version" msgstr "" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize" msgstr "" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "" #: src/playback/playbacktab.cpp:134 msgid "Load" msgstr "" #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "" #: src/playback/playbacktab.cpp:280 msgid "replay" msgstr "" #: src/playback/playbacktab.cpp:280 msgid "savegame" msgstr "" #: src/playback/playbacktab.cpp:288 msgid "Couldn't get your spring versions from any unitsync library." msgstr "" #: src/playback/playbacktab.cpp:306 #, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" #: src/playback/playbacktab.cpp:323 msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "Invalid replay" msgstr "" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr "" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr "" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 msgid "There was an error downloading for the latest version.\n" msgstr "" #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 msgid "Negotiation error" msgstr "" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 msgid "Invalid Value" msgstr "" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 msgid "File doesn't exit" msgstr "" #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 msgid "Action Aborted" msgstr "" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 msgid "Reconnection Error" msgstr "" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 msgid "Unknown Error" msgstr "" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "" #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 msgid "Download complete." msgstr "" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer." msgstr "" #: src/reconnectdialog.cpp:23 msgid "Reconnect Dialog" msgstr "" #: src/reconnectdialog.cpp:34 msgid "Try Reconnecting" msgstr "" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 msgid "Tries to connect to the next server in the list." msgstr "" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 msgid "Do nothing" msgstr "" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "" #: src/selectusersdialog.h:67 msgid "Select Users" msgstr "" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 msgid " is online" msgstr "" #: src/serverevents.cpp:165 msgid " is now " msgstr "" #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "" #: src/serverevents.cpp:224 msgid " just went offline" msgstr "" #: src/serverevents.cpp:259 msgid " opened battle " msgstr "" #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "" #: src/serverevents.cpp:583 msgid " because: " msgstr "" #: src/serverevents.cpp:826 msgid "Server Message" msgstr "" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr "" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr "" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "" #: src/serverevents.cpp:928 #, c-format msgid "%s mutelist" msgstr "" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "" #: src/serverevents.cpp:984 msgid "Download update" msgstr "" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 msgid "Automatically moved to new battle" msgstr "" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "" #: src/singleplayertab.cpp:99 msgid "Spectate only" msgstr "" #: src/singleplayertab.cpp:102 msgid "Random start positions" msgstr "" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 msgid "Game setup error" msgstr "" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "" #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "" #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 msgid "Coulnd't load required unitsync library" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Fatal error" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 msgid "Ignore chat" msgstr "" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 msgid "Battle Autokick" msgstr "" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 msgid "Friends" msgstr "" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "" #: src/springsettings/ctrlconstants.h:229 msgid "Terrain detail" msgstr "" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "Unit LOD distance" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "higher value = units will remain detailed even when zooming out" msgstr "" #: src/springsettings/ctrlconstants.h:231 msgid "Grass detail" msgstr "" #: src/springsettings/ctrlconstants.h:231 msgid "higher value = more detailed grass" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:236 msgid "Max nano simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "Enable v-sync" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "Full-scene anti-aliasing samples" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "Master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "General sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "general volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "reply volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 msgid "Battle volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 msgid "battle volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "User interface volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "ui volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "" #: src/springsettings/ctrlconstants.h:291 msgid "Reflective units" msgstr "" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "" #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 msgid "left is the default" msgstr "" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Use less colors" msgstr "" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" #: src/springsettings/ctrlconstants.h:320 msgid "Show in-game player information" msgstr "" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "" #: src/springsettings/ctrlconstants.h:415 msgid "Blur reflection" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Shore waves" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Enables shorewaves" msgstr "" #: src/springsettings/ctrlconstants.h:418 msgid "Reflection" msgstr "" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 msgid "Reflection texture size" msgstr "" #: src/springsettings/ctrlconstants.h:421 msgid "Refraction" msgstr "" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "off" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "" #: src/springsettings/frame.cpp:315 msgid "(simple mode)" msgstr "" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "" #: src/springsettings/frame.cpp:367 msgid "(expert mode)" msgstr "" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 msgid "Invalid input" msgstr "" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 msgid "Hotkey Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Enter new command:" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 msgid "Hotkey SaveSettings error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 msgid "New hotkey profile found" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "" #: src/springsettings/panel_pathoption.cpp:34 msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "" #: src/springsettings/panel_pathoption.cpp:96 msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "" #: src/springsettings/presets.h:45 msgid "very low" msgstr "" #: src/springsettings/presets.h:45 msgid "very high" msgstr "" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "" #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "" #: src/springsettings/tab_quality_video.cpp:166 msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "" #: src/springsettings/tab_simple.cpp:40 msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr "" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:99 msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "" #: src/springsettings/tab_ui.cpp:37 msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 msgid "loading unitsync" msgstr "" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" #: src/tdfcontainer.cpp:131 msgid "line " msgstr "" #: src/tdfcontainer.cpp:131 msgid " , column " msgstr "" #: src/ui.cpp:175 msgid "Server password" msgstr "" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" #: src/ui.cpp:294 msgid "Registration successful" msgstr "" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "" #: src/ui.cpp:458 msgid "Help error" msgstr "" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, c-format msgid "%s commands help." msgstr "" #: src/ui.cpp:465 msgid "Global commands:" msgstr "" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr "" #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr "" #: src/ui.cpp:468 msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" #: src/ui.cpp:469 msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr "" #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr "" #: src/ui.cpp:472 msgid " \"/join channel [password]\" - Joins a channel." msgstr "" #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr "" #: src/ui.cpp:474 msgid " \"/ingame\" - Shows how much time you have in game." msgstr "" #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" #: src/ui.cpp:476 msgid " \"/part\" - Leaves current channel." msgstr "" #: src/ui.cpp:477 msgid " \"/p\" - Alias to /part." msgstr "" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr "" #: src/ui.cpp:479 #, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr "" #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr "" #: src/ui.cpp:481 #, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr "" #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr "" #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "" #: src/ui.cpp:496 msgid "The topic \"" msgstr "" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "" #: src/ui.cpp:580 msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" #: src/ui.cpp:599 msgid "Online play is currently disabled." msgstr "" #: src/ui.cpp:631 #, c-format msgid "disconnected from server: %s" msgstr "" #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "" #: src/ui.cpp:839 #, c-format msgid "%s (%d users)" msgstr "" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "" #: src/ui.cpp:993 msgid "Battle closed" msgstr "" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "" #: src/ui.cpp:1337 #, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" #: src/ui.cpp:1340 msgid "Welcome" msgstr "" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 msgid "Import settings?" msgstr "" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/ui.cpp:1387 msgid "Your Version: " msgstr "" #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "" #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 msgid "Not up to date" msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "Updater error." msgstr "" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" #: src/updater/updater.cpp:72 msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/updater/updater.cpp:81 #, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 msgid "the SpringLobby revision to update to" msgstr "" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 msgid "Warning" msgstr "" #: src/user.cpp:83 msgid "away" msgstr "" #: src/user.cpp:83 msgid "back" msgstr "" #: src/user.cpp:85 msgid "ingame" msgstr "" #: src/user.cpp:85 msgid "back from game" msgstr "" #: src/user.cpp:195 msgid "Newbie" msgstr "" #: src/user.cpp:196 msgid "Beginner" msgstr "" #: src/user.cpp:197 msgid "Average" msgstr "" #: src/user.cpp:198 msgid "Above average" msgstr "" #: src/user.cpp:199 msgid "Experienced" msgstr "" #: src/user.cpp:200 msgid "Highly experienced" msgstr "" #: src/user.cpp:201 msgid "Veteran" msgstr "" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 msgid "Unknown" msgstr "" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "" #: src/useractions.h:11 msgid "none" msgstr "" #: src/useractions.h:11 msgid "highlight" msgstr "" #: src/useractions.h:11 msgid "notify login/out" msgstr "" #: src/useractions.h:11 msgid "ignore chat" msgstr "" #: src/useractions.h:11 msgid "ignore pm" msgstr "" #: src/useractions.h:12 msgid "autokick" msgstr "" #: src/useractions.h:12 msgid "notify hosted battle" msgstr "" #: src/useractions.h:12 msgid "notify status change" msgstr "" #: src/useractions.h:19 msgid "no action at all" msgstr "" #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" #: src/usermenu.h:31 msgid "Create new group..." msgstr "" #: src/usermenu.h:37 msgid "Add to group..." msgstr "" #: src/usermenu.h:38 msgid "Remove from group" msgstr "" #: src/utils/controls.h:22 msgid "Choose color" msgstr "" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 msgid "Author" msgstr "" #: src/widgets/downloadlistctrl.cpp:31 msgid "Games" msgstr "" #: src/widgets/downloadlistctrl.cpp:31 msgid "Compatible games" msgstr "" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 msgid "Suitable games" msgstr "" #: src/widgets/infopanel.cpp:74 msgid "Current version" msgstr "" #: src/widgets/infopanel.cpp:79 msgid "# downloaded" msgstr "" #: src/widgets/infopanel.cpp:84 msgid "Published on" msgstr "" #: src/widgets/infopanel.cpp:121 msgid "Changelog" msgstr "" #: src/widgets/infopanel.cpp:126 msgid "Screenshots" msgstr "" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" springlobby-0.169/po/sv.po0000600000176000000410000047467712105760300017056 0ustar buildbotwww-data00000000000000# Swedish translations for SpringLobby package. # Copyright (C) 2008 The SpringLobby team # This file is distributed under the same license as the SpringLobby package. # Tommy Carlsson , 2008. # msgid "" msgstr "" "Project-Id-Version: SpringLobby 0.0.1-svn\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2008-08-02 17:18+0000\n" "Last-Translator: nanker \n" "Language-Team: Swedish\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2008-09-20 21:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Poedit-Country: SWEDEN\n" "X-Poedit-SourceCharset: utf-8\n" "X-Poedit-Basepath: ..\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "" #: src/Helper/imageviewer.cpp:92 #, fuzzy msgid "delete" msgstr "Välj" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "Felmedelanden" #: src/Helper/imageviewer.cpp:160 #, fuzzy msgid "Choose a filename" msgstr "Välj i spelet" #: src/Helper/imageviewer.cpp:167 msgid "File successfully saved" msgstr "" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 #, fuzzy msgid "Success" msgstr "Sätt åtkomst..." #: src/Helper/imageviewer.cpp:170 #, fuzzy msgid "Couldn't save file" msgstr "Kunde inte starta webbläsaren." #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 #, fuzzy msgid "Default" msgstr "standard" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" #: src/Helper/wxTranslationHelper.cpp:148 #, fuzzy msgid "Select the language" msgstr "Kanal information" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Acceptera avtal" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "Accepterar du avtalet?" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Ja" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "Nej" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 #, fuzzy msgid "User" msgstr "Tysta användare" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 #, fuzzy msgid "Channel" msgstr "kanal" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Status:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 #, fuzzy msgid "Minimum rank to join" msgstr "Minsta rang som behövs" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Beskrivning" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Beskrivning" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Karta" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 #, fuzzy msgid "Mapname" msgstr "Smeknamn" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "Spel" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "Spel" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Värd" #: src/battlelist/battlelistctrl.cpp:60 #, fuzzy msgid "Name of the Host" msgstr "Namn på användaren" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Spektatorer:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "Antal spelare" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 #, fuzzy msgid "Players" msgstr "Spelare:" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "Antal spelare" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Karta" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Maximum number of Players that can join" msgstr "Maximala antalet spelare tillåtna i spelet." #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "Ladda ner &karta" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "Ladda ner &karta" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Spektatorer:" #: src/battlelist/battlelistctrl.cpp:370 #, fuzzy msgid "Active Players:" msgstr "Spelare:" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "Värd:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Status:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Låst" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "Lösenords skyddade" #: src/battlelist/battlelistfilter.cpp:122 #, fuzzy msgid "Highlighted only" msgstr "Markering" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "Rang begränsning:" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Beskrivning:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Startade" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Fulla" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "Öppna" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Spelare:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Alla" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Karta:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Enbart kartor som jag har" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "Max.Spelare:" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 #, fuzzy msgid "Game:" msgstr "Spel" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Enbart kartor som jag har" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Spektator:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Spelare:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 #, fuzzy msgid " Filter " msgstr "Alla filer" #: src/battlelist/battlelisttab.cpp:144 #, fuzzy msgid "Activated" msgstr "Startade" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 #, fuzzy msgid " Battle infos " msgstr "Spel lista" #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "Hosta nytt.." #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "Gå med" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" "Du kan inte skapa ett spel när du är nerkopplad. Var god koppla upp dig mot " "lobby serven." #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "Inte uppkopplad." #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "" "Du kan inte skapa spel eftersom din version av Spring inte är kompatibel." #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Spring fel" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "Du är redan inne i ett spel" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" "Du är redan inne i ett spel.\n" "\n" "Vill du gå ur detta och starta ett nytt?" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" "Du kan inte gå med i nätverks spel eftersom din Spring version är " "inkompatibel." #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 msgid "Matchmaker detected" msgstr "" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "Du är redan inne i ett spel" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "Du är redan inne i ett spel.\n" "\n" "Vill du gå ur detta och starta ett nytt?" #: src/battlelist/battlelisttab.cpp:430 msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" #: src/battlelist/battlelisttab.cpp:433 msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "Kartan inte tillgänglig" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "Kartan inte tillgänglig" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "Spelets lösenord" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 #, fuzzy msgid "Edit auto-joined channels" msgstr "Gå med denna kanalen automatiskt" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "" #: src/channel/channelchooser.cpp:30 #, fuzzy msgid "Find channel:" msgstr "Gå med i kanal..." #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 #, fuzzy msgid "Choose channels to join" msgstr "Namn på kanalen" #: src/channel/channellistctrl.cpp:30 #, fuzzy msgid "# users" msgstr "(%d användare)" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "### Sessionen avslutad [" #: src/chatlog.cpp:50 msgid "]" msgstr "]" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" "Kunde inte skapa katalog.\n" "Kontrollera att den inte är skrivskyddad.\n" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "Log funktionen är avstängd tills du startar om SpringLobby." #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "Log varning" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" "Kunde inte skriva log meddelandet till loggen.\n" "Loggningen kommer att stängas av för kanalen " #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" ".\n" "\n" "Gå in i kanalen igen för att aktivera loggning." #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 #, fuzzy msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" "Kunde inte skapa log filen.\n" "Kontrollera att den inte är skrivskyddad.\n" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "" #: src/chatpanel.cpp:69 msgid "#" msgstr "" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, fuzzy, c-format msgid "%d users" msgstr "(%d användare)" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "" #: src/chatpanel.cpp:296 msgid "Send" msgstr "Skicka" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr "" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "" #: src/chatpanel.cpp:717 msgid "channel" msgstr "kanal" #: src/chatpanel.cpp:718 msgid "battle" msgstr "spel" #: src/chatpanel.cpp:719 msgid "server" msgstr "server" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr " gick med i " #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr " gick ur " #: src/chatpanel.cpp:814 #, fuzzy msgid " ** Channel topic:" msgstr "Kanal information" #: src/chatpanel.cpp:821 #, fuzzy msgid " ** Set by " msgstr "" "\n" " * Satt av " #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "Chat stängd." #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "Är du säker på att du vill klistra in %d rader?" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr " Du har SpringLobby v" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr " Du är inte i kanalen eller så finns den inte." #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr " Användaren är ner kopplad." #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr " Skickade: \"" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "\"" #: src/chatpanel.cpp:1090 #, fuzzy msgid " ** User is now offline." msgstr " Användaren är ner kopplad." #: src/chatpanel.cpp:1097 #, fuzzy msgid " ** User just got online." msgstr " Användaren är ner kopplad." #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 #, fuzzy msgid " ** Joined Battle." msgstr " gick med i " #: src/chatpanelmenu.cpp:34 msgid "Disable text appending" msgstr "" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "Kopiera" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "Rensa" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "Gå med denna kanalen automatiskt" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "Lämna" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "Visa gå med/lämna medelanden" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "Kanal information" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "Sätt ämne..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "Kanal medelande..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "Lås..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "Lås upp..." #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "Registrera..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "Avregistrera" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "På" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "Av" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "Är på?" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "Spam skydd" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "ChanServ" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "Koppla ned" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "Återanslut" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "Ta bort..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "Ändra lösenord..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "Sätt åtkomst..." #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "Konton" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "Broadcasta..." #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "Administrering" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "Öppna chat" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "Gå med samma spel" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "Spel tid" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "Tysta..." #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "Tysta i 5 minuter" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "Tysta i 10 minuter" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "Tysta i 30 minuter" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "Tysta i 2 timmar" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "Tysta i en dag" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "Avtysta" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "Tysta" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "Sparka..." #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "Banna..." #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "Avbanna" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "Ring" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "Slap!" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "Op" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "DeOp" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "ChanServ fel" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "ChanServ är inte i kanalen" #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "Vad ska det nya ämnet vara?" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "Medelande:" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "Lås kanalen..." #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "Ange lösenord" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "Lås upp kanalen" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "Är du säker på att du vill låsa kanalen?" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "ChanServ finns inte på servern." #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "Registrera kanalen" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "Vem skall vara grundare till den här kanalen?" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "Avregistrera kanalen" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "Är du säker på att du vill avregistrera kanalen?" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "Ta bort användarkonto" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "Vilket användar konto vill du ta bort idag?" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "Ta bort konto" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "Är du säker på att du vill ta bort kontot " #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "Ändra användar lösenord" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "Vilken användare vill du byta lösenord för?" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "Vad ska det nya lösenordet bli?" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "Inte implementerad" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "Broadcasta medelande" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "Medelande att broadcasta:" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "Tysta användare" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "I hur många minuter skall han bli tystad?" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "Sparka ut användare" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "Anledning:" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "Sparka ut användare" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "Tysta användare" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "Hur länge?" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" #: src/chatpanelmenu.cpp:774 #, fuzzy msgid "couldn't add user" msgstr "Kunde inte starta webbläsaren." #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "Anslut till lobby server" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "Server" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" "Servern du vill ansluta till. Du kan skriva in vilken adress du vill med " "formatet host:port." #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "Smeknamn" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "Lösenord" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" #: src/connectwindow.cpp:85 #, fuzzy msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" "Notera: Om du inte har något konto\n" "ännu kan du skapa ett under \"Registrering\"\n" "fliken." #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "Ok" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Avbryt" #: src/connectwindow.cpp:91 msgid "Login" msgstr "Login" #: src/connectwindow.cpp:92 msgid "Register" msgstr "Registrering" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "Smeknamn" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "Felaktig port." #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "Felaktig port" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" "Portnumret är utanför tillåtet intervall.\n" "\n" "Det måste liga inom 1 till 65535" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "Felaktig host/port" #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "Felaktig host" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" #: src/connectwindow.cpp:294 #, fuzzy msgid "Invalid nickname" msgstr "Felaktigt nummer" #: src/connectwindow.cpp:301 #, fuzzy msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "Registreringen misslyckades på grund av att lösenorden inte matchade." #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "Registreringen misslyckades." #: src/countrycodes.cpp:11 msgid " Andorra" msgstr "" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "" #: src/countrycodes.cpp:25 msgid "Åland Islands" msgstr "" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "" #: src/countrycodes.cpp:56 msgid "China" msgstr "" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "" #: src/countrycodes.cpp:82 msgid "France" msgstr "" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "" #: src/countrycodes.cpp:110 msgid "India" msgstr "" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "" #: src/countrycodes.cpp:234 msgid "United Kingdom" msgstr "" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "" #: src/countrycodes.cpp:236 msgid "United States" msgstr "" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "(Helt landsnamn ej funnet)" #: src/crashreport.cpp:168 msgid "System informations" msgstr "System information" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "Programmets utförliga logg" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "Det senast skapade start skriptet" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "Inga kartor funna" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "Ladda ner" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "Ingen mod vald." #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 #, fuzzy msgid "Name" msgstr "Spel" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "Storlek" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Karta" #: src/downloader/filelister/filelistctrl.cpp:174 #, fuzzy msgid "game" msgstr "Smeknamn" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:55 #, fuzzy msgid "Download selected" msgstr "Ingen mod vald." #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Smeknamn:" #: src/downloader/filelister/filelistfilter.cpp:69 msgid "Filetype:" msgstr "" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:78 msgid "" "\n" "successfully unzipped in:\n" msgstr "" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "Ingen mod vald." #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "Flood varning" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "Lägg till bot" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Smeknamn:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "AI:" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "Välj vilket AI du vill använda med den här boten." #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 #, fuzzy msgid "value" msgstr "Värde" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "Lägg till bot" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "Hittade inga AI bibliotek i din Spring installation." #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "Inga AI bibliotek funna" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Slumpmässiga" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Ingen" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "Acceptabel" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" #: src/hosting/autobalancedialog.cpp:53 #, fuzzy msgid "Number of allies" msgstr "Antal spelare" #: src/hosting/autobalancedialog.cpp:56 #, fuzzy msgid "Auto select" msgstr "Återanslut" #: src/hosting/battlemaptab.cpp:69 #, fuzzy msgid "Select" msgstr "Välj..." #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "Alternativ" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "Värde" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "Vindhastighet" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "Strömstyrka" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "Gravitation" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "Extractor radie" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "Max metal" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "Fasta" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "Välj i spelet" #: src/hosting/battlemaptab.cpp:103 #, fuzzy msgid "Chose before game" msgstr "Välj i spelet" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "Start positioner" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "Enhets begränsningar" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "Tillåtna enheter" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "Enheter i den här listan kan användas i spelet." #: src/hosting/battleoptionstab.cpp:77 #, fuzzy msgid "Disable selected units." msgstr "Tillåt alla enheter." #: src/hosting/battleoptionstab.cpp:81 #, fuzzy msgid "Re-enable selected units." msgstr "Tillåt alla enheter." #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "Tillåt alla enheter." #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "Begränsade enheter" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "Enheter i den här listan kan inte användas i spelet." #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "" #: src/hosting/battleoptionstab.cpp:242 #, fuzzy msgid "Unit restriction" msgstr "Enhets begränsningar" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "Team" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "Allians" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "Resurs bonus" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "Sida" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "Välj färg" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "Sätt resurs bonus" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "Spektator" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "Släng ut" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "Var god välj ett nummer mellan 0 och 100" #: src/hosting/battleroomlistctrl.cpp:750 #, fuzzy msgid "AI (bot)\n" msgstr "Lägg till bot" #: src/hosting/battleroomlistctrl.cpp:754 msgid "Human\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:759 #, fuzzy msgid "Spectator\n" msgstr "Spektator" #: src/hosting/battleroomlistctrl.cpp:763 #, fuzzy msgid "Player\n" msgstr "Spelare:" #: src/hosting/battleroomlistctrl.cpp:768 #, fuzzy msgid "Host\n" msgstr "Värd" #: src/hosting/battleroomlistctrl.cpp:772 #, fuzzy msgid "Client\n" msgstr "Klient" #: src/hosting/battleroomlistctrl.cpp:777 msgid "Ready\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:781 #, fuzzy msgid "Not ready\n" msgstr "Inte redo" #: src/hosting/battleroomlistctrl.cpp:786 msgid "In sync" msgstr "" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "" #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "" #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "Återanslut" #: src/hosting/battleroomtab.cpp:144 msgid "automatically unspec when there's a free slot" msgstr "" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "Redo" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "" #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "Färg" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Hosta nytt.." #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Starta nytt spel" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "Starta" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "Lägg till bot..." #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Beskrivning" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 #, fuzzy msgid "AutoSpect" msgstr "Återanslut" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Starta" #: src/hosting/battleroomtab.cpp:209 msgid "Automatically start the battle when all players are ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Ring unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 #, fuzzy msgid "Ring ..." msgstr "Ring" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "Inte redo" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 #, fuzzy msgid "Force spectate ..." msgstr "Påtvinga start?" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "" #: src/hosting/battleroomtab.cpp:255 #, fuzzy msgid "Save" msgstr "Spara..." #: src/hosting/battleroomtab.cpp:256 #, fuzzy msgid "Save a set of options." msgstr "Spara lista till fil." #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 #, fuzzy msgid "Delete" msgstr "Välj" #: src/hosting/battleroomtab.cpp:261 #, fuzzy msgid "Delete a set of options." msgstr "Spara lista till fil." #: src/hosting/battleroomtab.cpp:265 #, fuzzy msgid "Set default" msgstr "standard" #: src/hosting/battleroomtab.cpp:266 msgid "Use the current set of options as game's default." msgstr "" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "" #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 #, fuzzy msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" "Några av spelarna är inte redo.\n" "Ska jag ringa dessa?" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "Inte redo" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "Välj i spelet" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Beskrivning" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "standard" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "fel" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 #, fuzzy msgid "Delete preset" msgstr "Välj" #: src/hosting/battleroomtab.cpp:996 #, fuzzy msgid "Set game default preset" msgstr "standard" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "Starta nytt spel" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "En kort beskrivning, denna kommer visas i spel listan." #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Beskrivning" #: src/hosting/hostbattledialog.cpp:91 msgid "Automatically write the battle description when a user joins." msgstr "" #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "Välj den mod som ska användas." #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "Lösenords skyddade" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "Lösenordet som behövs för spelet. Behåll tomt för att inte ha lösenord" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "Port" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "UDP porten att spela spelet på. Standard är 8452." #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 #, fuzzy msgid "Randomly picks an available one" msgstr "Modden inte tillgänlig" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "Antal spelare" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "Maximala antalet spelare tillåtna i spelet." #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "Hole punching" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "NAT traversal" #: src/hosting/hostbattledialog.cpp:185 #, fuzzy msgid "NAT traversal to use." msgstr "NAT traversal" #: src/hosting/hostbattledialog.cpp:190 msgid "Rank requirement" msgstr "" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 #, fuzzy msgid "Select the type of rank enforcement." msgstr "Välj den mod som ska användas." #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "Starta spel lobbyn." #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 #, fuzzy msgid "You have to select a game first." msgstr "Du måste välja en mod först." #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "Ingen mod vald." #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" #: src/hosting/hostbattledialog.cpp:427 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" #: src/hosting/hostbattledialog.cpp:459 #, fuzzy msgid "Battle not started beacuse the game you selected could not be found. " msgstr "Spelet kunde inte startas eftersom modden du valt inte kunde hittas. " #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "Kunde inte starta spel." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "Inga kartor funna" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "Spel lobby" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "Alternativ" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 #, fuzzy msgid "Unit Restrictions" msgstr "Enhets begränsningar" #: src/hosting/mmoptionwindows.cpp:36 #, fuzzy msgid "Change option" msgstr "Kart alternativ" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "" #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "" #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "" #: src/iconimagelist.cpp:322 #, fuzzy msgid "Game is closed." msgstr "Chat stängd." #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "" #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "" #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "" #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "" #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "" #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "" #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "" #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "" #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "" #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "" #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 #, fuzzy msgid "Newbies guide" msgstr "Ny nybörjare" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 #, fuzzy msgid "Joining a battle:\n" msgstr "Gå med samma spel" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "Starta nytt spel" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Spring fel" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 msgid "Singleplayer gamee" msgstr "" #: src/introguide.cpp:110 msgid "Multiplayer gamee" msgstr "" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "Alla filer (*)|*" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "Program paket (*.app)|*.app|Alla filer (*.*)|*.*" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 #, fuzzy msgid "Disconnected from server, chat closed." msgstr "Anslut till lobby server" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "" #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "" #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "&Koppla upp..." #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "Koppla &ner..." #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 #, fuzzy msgid "&Save options" msgstr "Kart alternativ" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "&Avsluta" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "Gå med denna kanalen automatiskt" #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "Spring inställningar" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "Kart alternativ" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "&Gå med kanal..." #: src/mainwindow.cpp:164 #, fuzzy msgid "Channel &list" msgstr "Kanal information" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "Öppna privat &chat fönster..." #: src/mainwindow.cpp:166 #, fuzzy msgid "Change &username" msgstr "Kanal information" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "" #: src/mainwindow.cpp:169 #, fuzzy msgid "&Reload maps/games" msgstr "&Ladda om kartor/moddar" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "Kolla efter ny &version" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "&Om" #: src/mainwindow.cpp:178 #, fuzzy msgid "&System Info" msgstr "System information" #: src/mainwindow.cpp:179 #, fuzzy msgid "&Change language" msgstr "Kanal information" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "&Rapportera bugg..." #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "&Dokumentation" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "Server" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "&Redigera" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "&Verktyg" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "&Hjälp" #: src/mainwindow.cpp:500 msgid "You need to be connected to a server to view the channel list" msgstr "" #: src/mainwindow.cpp:500 #, fuzzy msgid "Not connected" msgstr "Återanslut" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "Gå med i kanal..." #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "Namn på kanalen" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "Öppna privat chat..." #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "Namn på användaren" #: src/mainwindow.cpp:540 #, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 #, fuzzy msgid "No files found" msgstr "Inga kartor funna" #: src/mainwindow.cpp:656 #, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "" #: src/mainwindow.cpp:692 #, fuzzy msgid "This profile is write protected, please choose another name" msgstr "Detta spelet är lösenords skyddat skriv in lösenordet." #: src/mainwindow.cpp:703 #, fuzzy msgid "Which profile do you want to load?" msgstr "Vilket användar konto vill du ta bort idag?" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "Ta bort..." #: src/mainwindow.cpp:767 msgid "Enter new nickname" msgstr "" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "Chat" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "Spel lista" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "" #: src/mainwindow.h:203 msgid "Replays" msgstr "" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 #, fuzzy msgid "Downloads" msgstr "Ladda ner" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "Läs om" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "Ladda ner" #: src/mapctrl.cpp:897 msgid "side:" msgstr "sida:" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "ally: %d" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "bonus: %d%%" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 #, fuzzy msgid "Show" msgstr "Visa alla" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" #: src/mapselectdialog.cpp:95 #, fuzzy msgid "Filter" msgstr "Alla filer" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" #: src/mapselectdialog.cpp:100 #, fuzzy msgid "Map details" msgstr "Max metal" #: src/mapselectdialog.cpp:163 #, fuzzy msgid "Start positions" msgstr "Start positioner" #: src/mapselectdialog.cpp:261 #, fuzzy msgid "Minimum wind" msgstr "Minsta rang som behövs" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "" #: src/mapselectdialog.cpp:263 #, fuzzy msgid "Average wind" msgstr "Medelmåttig" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "" #: src/mapselectdialog.cpp:265 #, fuzzy msgid "Aspect ratio" msgstr "Spektator" #: src/mapselectdialog.cpp:266 #, fuzzy msgid "Number of start positions" msgstr "Start positioner" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "Start positioner" #: src/mmoptionswrapper.cpp:122 #, fuzzy msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" "Hur spelare väljer vart de vill starta på kartan\n" "0: fixerade kart positioner\n" "1: Slumpmässiga kart positioner\n" "2: Välja inne i spelet\n" "3: Välja i spel lobbyn" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "Välj i spelet" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "Välj i spelet" #: src/mmoptionswrapper.cpp:132 #, fuzzy msgid "List of restricted units" msgstr "Begränsade enheter" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "s" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "c" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "r" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "Exekverbara filer (*.exe)|*.exe|Any File (*.*)|*.*" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "Färger och font" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "Använd systemfärger" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "Normal" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "Bakgrund" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "Händelse" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "Markering" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "Gå med/Lämna" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "Mina medelanden" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "Klient" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "Tids stämpel" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "Påminnelse" #: src/options/chatoptionstab.cpp:258 #, fuzzy msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" "[19:35] ** Server ** Ansluten till TAS Server.\n" "[22:30] hi everyone\n" "[22:30] ** Kompis2 kom in i kanalen.\n" "[22:30] * Kompis2 thinks his colors looks nice\n" "[22:45] Kompis2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "Font:" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "standard" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "Välj..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "" #: src/options/chatoptionstab.cpp:300 #, fuzzy msgid "Copy server messages in current channel" msgstr " \"/channels\" - Listar alla aktiva kanaler." #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "Chat loggar" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "Spara chat loggar" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "Markera ord" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "Ord som ska bli markerade" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "" #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 #, fuzzy msgid "Remove" msgstr "Ta bort..." #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:61 #, fuzzy msgid "Rename.." msgstr "Ta bort..." #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:70 #, fuzzy msgid "Add New.." msgstr "Lägg till bot..." #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "" #: src/options/groupoptionspanel.cpp:84 #, fuzzy msgid "Group Actions" msgstr "Händelse" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "" #: src/options/groupoptionspanel.cpp:95 #, fuzzy msgid "Ignore Chat" msgstr "Öppna chat" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:101 #, fuzzy msgid "Notify Hosted Battles" msgstr "Starta nytt spel" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:134 #, fuzzy msgid "Highlight Color" msgstr "Markera ord" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "" #: src/options/groupoptionspanel.cpp:163 #, fuzzy msgid "Add.." msgstr "Lägg till bot..." #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "" #: src/options/groupoptionspanel.cpp:170 #, fuzzy msgid "Remove users from group" msgstr "Ta bort användarkonto" #: src/options/groupoptionspanel.cpp:264 #, fuzzy msgid "Name of new group:" msgstr "Namn på användaren" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "Webbläsare" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "Standard webbläsare" #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "Ange:" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "Bläddra" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 msgid "Use a file dialog to find the editor binary" msgstr "" #: src/options/lobbyoptionstab.cpp:91 #, fuzzy msgid "Autoconnect" msgstr "Återanslut" #: src/options/lobbyoptionstab.cpp:94 #, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" #: src/options/lobbyoptionstab.cpp:96 #, fuzzy msgid "Autoconnect on lobby start" msgstr "Anslut till lobby server" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:104 #, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "" #: src/options/lobbyoptionstab.cpp:120 #, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "" #: src/options/lobbyoptionstab.cpp:130 #, fuzzy msgid "Tooltips" msgstr "&Verktyg" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "" #: src/options/lobbyoptionstab.cpp:134 #, c-format msgid "Requires %s restart to take effect." msgstr "" #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "Påminnelse" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 msgid "Display time for popup notifications in seconds" msgstr "" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 #, fuzzy msgid "Start tab" msgstr "Start metall" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "Ange en webbläsar exekverbar" #: src/options/lobbyoptionstab.cpp:282 #, fuzzy msgid "Choose a editor browser executable" msgstr "Ange en webbläsar exekverbar" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "Spring" #: src/options/mainoptionstab.cpp:73 msgid "General" msgstr "" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "Återställ" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "Spara" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "Spring exekverbar" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "Plats" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "Hitta" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "Unitsync bibliotek" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "Automatisk konfiguration" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "Ange Spring exekverbar" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "Bibliotek" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "Alla filer" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 msgid "Reloading unitsync" msgstr "" #: src/options/springoptionstab.cpp:315 #, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" #: src/playback/playbackfilter.cpp:60 msgid "Filter settings" msgstr "" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Enbart kartor som jag har" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "" #: src/playback/playbackfilter.cpp:190 #, fuzzy msgid "Duration (hh:mm:ss):" msgstr "Hur länge?" #: src/playback/playbacklistctrl.cpp:42 #, fuzzy msgid "Date" msgstr "Välj" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Sätt åtkomst..." #: src/playback/playbacklistctrl.cpp:46 #, fuzzy msgid "Duration" msgstr "Hur länge?" #: src/playback/playbacklistctrl.cpp:47 #, fuzzy msgid "Spring Version" msgstr "Spring fel" #: src/playback/playbacklistctrl.cpp:48 #, fuzzy msgid "Filesize" msgstr "&Arkiv" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "Ladda ner &mod" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "Ladda..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "Spelare:" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "savegame" msgstr "Spara..." #: src/playback/playbacktab.cpp:288 #, fuzzy msgid "Couldn't get your spring versions from any unitsync library." msgstr "" "Kunde inte läsa din Spring version från unitsync biblioteket.\n" "\n" "Multiplayer spel kommer att inaktiveras." #: src/playback/playbacktab.cpp:306 #, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" #: src/playback/playbacktab.cpp:323 msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" #: src/playback/playbacktab.cpp:356 #, fuzzy msgid "Invalid replay" msgstr "Felaktig port" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "Du blev ut sparkad från spelet." #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "Ut sparkad ur spelet" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr "" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr "" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 #, fuzzy msgid "There was an error downloading for the latest version.\n" msgstr "" "Ett fel uppstod under kontrollen för ny version.\n" "Försök igen senare.\n" "Om problemet kvarstår var god rapportera detta." #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "Påminnelse" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "Felaktigt nummer" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 msgid "File doesn't exit" msgstr "" #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Startade" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "Återanslut" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 msgid "Unknown Error" msgstr "" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "" #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 #, fuzzy msgid "Download complete." msgstr "Ingen mod vald." #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 #, fuzzy msgid "Couldn't launch installer. File location is: " msgstr "Kunde inte starta webläsaren. URL: " #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 #, fuzzy msgid "Couldn't launch installer." msgstr "Kunde inte starta webbläsaren." #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "Återanslut" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "Återanslut" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 msgid "Tries to connect to the next server in the list." msgstr "" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 #, fuzzy msgid "Do nothing" msgstr "Hole punching" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "" #: src/selectusersdialog.h:67 #, fuzzy msgid "Select Users" msgstr "Välj" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 #, fuzzy msgid " is online" msgstr " Användaren är ner kopplad." #: src/serverevents.cpp:165 msgid " is now " msgstr "" #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "" #: src/serverevents.cpp:224 #, fuzzy msgid " just went offline" msgstr " Användaren är ner kopplad." #: src/serverevents.cpp:259 #, fuzzy msgid " opened battle " msgstr " gick med i " #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "Kunde inte gå med kanal" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "Kunde inte gå med i kanal " #: src/serverevents.cpp:583 msgid " because: " msgstr " anledning: " #: src/serverevents.cpp:826 msgid "Server Message" msgstr "Server medelande" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr "" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr "" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "" #: src/serverevents.cpp:928 #, fuzzy, c-format msgid "%s mutelist" msgstr "Spel lista" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "" #: src/serverevents.cpp:984 #, fuzzy msgid "Download update" msgstr "Ladda ner &karta" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 msgid "Automatically moved to new battle" msgstr "" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "Lägg till bot..." #: src/singleplayertab.cpp:99 #, fuzzy msgid "Spectate only" msgstr "Spektator" #: src/singleplayertab.cpp:102 #, fuzzy msgid "Random start positions" msgstr "Start positioner" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "-- Välj en --" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 #, fuzzy msgid "Game setup error" msgstr "Kunde inte start spel" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "Du måste välja en karta först." #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "Spring körs redan stäng av det innan du startar ett nytt spel" #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 #, fuzzy msgid "Coulnd't load required unitsync library" msgstr "Ange unitsync bibliotek" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 #, fuzzy msgid "Fatal error" msgstr "Kritiskt fel" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" "Programmet har genererat ett allvarligt fel och kommer att avslutas.\n" "Kan inte generera en bugg rapport.\n" "\n" "Var god fixa en wxWidgets version som har stöd för wxUSE_DEBUGREPORT" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "Kritiskt fel" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 #, fuzzy msgid "Ignore chat" msgstr "Öppna chat" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 #, fuzzy msgid "Battle Autokick" msgstr "Spel lista" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 #, fuzzy msgid "Friends" msgstr "Hitta" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "" #: src/springsettings/ctrlconstants.h:229 #, fuzzy msgid "Terrain detail" msgstr "Max metal" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "Unit LOD distance" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "higher value = units will remain detailed even when zooming out" msgstr "" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "Grass detail" msgstr "Max metal" #: src/springsettings/ctrlconstants.h:231 msgid "higher value = more detailed grass" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:236 msgid "Max nano simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "Enable v-sync" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "Full-scene anti-aliasing samples" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "Master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "General sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "general volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "reply volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "Battle volume" msgstr "Spel lobby" #: src/springsettings/ctrlconstants.h:276 msgid "battle volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "User interface volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "ui volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "" #: src/springsettings/ctrlconstants.h:291 #, fuzzy msgid "Reflective units" msgstr "Välj" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "" #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 #, fuzzy msgid "left is the default" msgstr "standard" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "" #: src/springsettings/ctrlconstants.h:312 #, fuzzy msgid "Use less colors" msgstr "Använd systemfärger" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" #: src/springsettings/ctrlconstants.h:320 #, fuzzy msgid "Show in-game player information" msgstr "System information" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" #: src/springsettings/ctrlconstants.h:385 #, fuzzy msgid "Reflective" msgstr "Välj" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "" #: src/springsettings/ctrlconstants.h:415 #, fuzzy msgid "Blur reflection" msgstr "Välj" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Shore waves" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Enables shorewaves" msgstr "" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "Välj" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 #, fuzzy msgid "Reflection texture size" msgstr "Välj" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "Hur länge?" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 #, fuzzy msgid "off" msgstr "Av" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "" #: src/springsettings/frame.cpp:315 msgid "(simple mode)" msgstr "" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "" #: src/springsettings/frame.cpp:367 msgid "(expert mode)" msgstr "" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "Felaktig port" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 #, fuzzy msgid "Hotkey Error" msgstr "Hjälp fel" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 #, fuzzy msgid "Enter new command:" msgstr "Chat kommandon:" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 #, fuzzy msgid "Hotkey SaveSettings error" msgstr "Spring inställnings fel" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "Inga kartor funna" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "" #: src/springsettings/panel_pathoption.cpp:34 msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "Ange unitsync bibliotek" #: src/springsettings/panel_pathoption.cpp:96 msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "" #: src/springsettings/presets.h:45 msgid "very low" msgstr "" #: src/springsettings/presets.h:45 msgid "very high" msgstr "" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "Kunde inte starta webläsaren. URL: " #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "Kunde inte starta webbläsaren." #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "" #: src/springsettings/tab_quality_video.cpp:166 msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "" #: src/springsettings/tab_simple.cpp:40 msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr "" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:99 msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "" #: src/springsettings/tab_ui.cpp:37 msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "Tillåtna enheter" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" #: src/tdfcontainer.cpp:131 msgid "line " msgstr "" #: src/tdfcontainer.cpp:131 msgid " , column " msgstr "" #: src/ui.cpp:175 msgid "Server password" msgstr "Lösenord" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" "Registreringen lyckades,\n" "du ska nu kunna logga in." #: src/ui.cpp:294 msgid "Registration successful" msgstr "Registreringen lyckades" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "Registreringen misslyckades med meddelandet:\n" #: src/ui.cpp:458 msgid "Help error" msgstr "Hjälp fel" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, fuzzy, c-format msgid "%s commands help." msgstr "SpringLobby kommando hjälp." #: src/ui.cpp:465 msgid "Global commands:" msgstr "Globala kommandon:" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr " \"/away\" - Sätter din status till borta." #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr " \"/back\" - Sätter din status till närvarande." #: src/ui.cpp:468 msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" #: src/ui.cpp:469 msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr " \"/channels\" - Listar alla aktiva kanaler." #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr " \"/help [ämne]\" - Visar hjälp om ett visst ämne." #: src/ui.cpp:472 #, fuzzy msgid " \"/join channel [password]\" - Joins a channel." msgstr "" " \"/join kanal [lösenord] [,kanal2 [lösenord22]]\" - Gå med i en kanal " "eller flera." #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr " \"/j\" - Alias till /join." #: src/ui.cpp:474 #, fuzzy msgid " \"/ingame\" - Shows how much time you have in game." msgstr " \"/ingame\" - Visar hur mycket spel tid du har." #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" #: src/ui.cpp:476 #, fuzzy msgid " \"/part\" - Leaves current channel." msgstr " \"/channels\" - Listar alla aktiva kanaler." #: src/ui.cpp:477 #, fuzzy msgid " \"/p\" - Alias to /part." msgstr " \"/j\" - Alias till /join." #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr " \"/rename nyttsmeknamn\" - Ändrar ditt smeknamn." #: src/ui.cpp:479 #, fuzzy, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr " \"/sayver\" - Säger vilken version av SpringLobby du har i chatten." #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr "" #: src/ui.cpp:481 #, fuzzy, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr " \"/ver\" - Visar vilken version av SpringLobby du har." #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "Chat kommandon:" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr " \"/me action\" - Aktions medelande a la IRC." #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "Om du saknar något kommando, gå till #springlobby och skriv det där :)" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "Det finns inga ämnen ännu." #: src/ui.cpp:496 msgid "The topic \"" msgstr "Ämnet \"" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "\" hittades inte. Skriv \"/help\" för att se vilka som finns." #: src/ui.cpp:580 #, fuzzy msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" "Kunde inte läsa din Spring version från unitsync biblioteket.\n" "\n" "Multiplayer spel kommer att inaktiveras." #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" #: src/ui.cpp:599 #, fuzzy msgid "Online play is currently disabled." msgstr "Multiplayer spel kommer att inaktiveras." #: src/ui.cpp:631 #, fuzzy, c-format msgid "disconnected from server: %s" msgstr "Anslut till lobby server" #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "inga aktiva chat paneler öppna." #: src/ui.cpp:839 #, fuzzy, c-format msgid "%s (%d users)" msgstr "(%d användare)" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "" #: src/ui.cpp:993 msgid "Battle closed" msgstr "" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" "Dina Spring inställningar är förmodligen inte korrekt inställda,\n" "du bör ta en titt på dem innan du spelar multiplayer." #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "Spring inställnings fel" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "" #: src/ui.cpp:1337 #, fuzzy, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" "Det ser ut som om detta är den första gången du använder SpringLobby. Jag " "har gissat mig till en konfiguration som jag tror skall fungera men du borde " "kolla igenom den för säkerhets skull.\n" "När du är klar är det bara att börja spel Spring :)" #: src/ui.cpp:1340 msgid "Welcome" msgstr "Välkommen" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 #, fuzzy msgid "Import settings?" msgstr "Spring inställningar" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Ett fel uppstod under kontrollen för ny version.\n" "Försök igen senare.\n" "Om problemet kvarstår var god rapportera detta." #: src/ui.cpp:1387 msgid "Your Version: " msgstr "Er version: " #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "Senaste versionen: " #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 #, fuzzy msgid "Not up to date" msgstr "Inte uppdaterad" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "Antal spelare" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" "Du har en äldre version av SpringLobby.\n" "\n" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "Inte uppdaterad" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" "\n" "Webbläsarens plats är: " #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" #: src/updater/updater.cpp:72 #, fuzzy msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "Ett fel uppstod under kontrollen för ny version.\n" "Försök igen senare.\n" "Om problemet kvarstår var god rapportera detta." #: src/updater/updater.cpp:81 #, fuzzy, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" "Ett fel uppstod under kontrollen för ny version.\n" "Försök igen senare.\n" "Om problemet kvarstår var god rapportera detta." #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 #, fuzzy msgid "the SpringLobby revision to update to" msgstr "" "Din SpringLobby version är redan uppdaterad.\n" "\n" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "SpringLobby" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 #, fuzzy msgid "Warning" msgstr "Log varning" #: src/user.cpp:83 msgid "away" msgstr "" #: src/user.cpp:83 msgid "back" msgstr "" #: src/user.cpp:85 #, fuzzy msgid "ingame" msgstr "Smeknamn" #: src/user.cpp:85 msgid "back from game" msgstr "" #: src/user.cpp:195 msgid "Newbie" msgstr "Ny nybörjare" #: src/user.cpp:196 msgid "Beginner" msgstr "Nybörjare" #: src/user.cpp:197 msgid "Average" msgstr "Medelmåttig" #: src/user.cpp:198 msgid "Above average" msgstr "Duktig" #: src/user.cpp:199 msgid "Experienced" msgstr "Erfaren" #: src/user.cpp:200 msgid "Highly experienced" msgstr "Mycket erfaren" #: src/user.cpp:201 msgid "Veteran" msgstr "Veteran" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 msgid "Unknown" msgstr "" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "" #: src/useractions.h:11 #, fuzzy msgid "none" msgstr "Ingen" #: src/useractions.h:11 #, fuzzy msgid "highlight" msgstr "Markering" #: src/useractions.h:11 msgid "notify login/out" msgstr "" #: src/useractions.h:11 msgid "ignore chat" msgstr "" #: src/useractions.h:11 msgid "ignore pm" msgstr "" #: src/useractions.h:12 msgid "autokick" msgstr "" #: src/useractions.h:12 #, fuzzy msgid "notify hosted battle" msgstr "Gå med samma spel" #: src/useractions.h:12 msgid "notify status change" msgstr "" #: src/useractions.h:19 #, fuzzy msgid "no action at all" msgstr "inga aktiva chat paneler öppna." #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" #: src/usermenu.h:31 msgid "Create new group..." msgstr "" #: src/usermenu.h:37 #, fuzzy msgid "Add to group..." msgstr "Lägg till bot..." #: src/usermenu.h:38 #, fuzzy msgid "Remove from group" msgstr "Ta bort användarkonto" #: src/utils/controls.h:22 #, fuzzy msgid "Choose color" msgstr "Välj färg" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 msgid "Author" msgstr "" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Games" msgstr "Spel" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Compatible games" msgstr "Normal" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "Spara..." #: src/widgets/infopanel.cpp:74 #, fuzzy msgid "Current version" msgstr "Din Spring version" #: src/widgets/infopanel.cpp:79 #, fuzzy msgid "# downloaded" msgstr "Ladda ner" #: src/widgets/infopanel.cpp:84 msgid "Published on" msgstr "" #: src/widgets/infopanel.cpp:121 #, fuzzy msgid "Changelog" msgstr "Avbryt" #: src/widgets/infopanel.cpp:126 msgid "Screenshots" msgstr "" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" #, fuzzy #~ msgid "Settings" #~ msgstr "Spring inställningar" #, fuzzy #~ msgid "Help" #~ msgstr "&Hjälp" #, fuzzy #~ msgid "Faction" #~ msgstr "Händelse" #~ msgid "Mod" #~ msgstr "Mod" #, fuzzy #~ msgid "spectators" #~ msgstr "Spektatorer:" #~ msgid "Mod:" #~ msgstr "Mod:" #~ msgid "Only mods i have" #~ msgstr "Bara moddar som jag har" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to host a new game" #~ msgstr "" #~ "Spring körs redan, stäng det innan du försöker starta ett nytt spel." #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to join another battle." #~ msgstr "" #~ "Spring körs redan, stäng det innan du försöker starta ett nytt spel." #~ msgid "Mod not available" #~ msgstr "Modden inte tillgänlig" #~ msgid "Enter password" #~ msgstr "Skriv in lösenord" #, fuzzy #~ msgid "team" #~ msgstr "Team" #, fuzzy #~ msgid "ally" #~ msgstr "Allians" #~ msgid "cpu" #~ msgstr "cpu" #, fuzzy #~ msgid "Load a saved set of options." #~ msgstr "Ladda lista från fil." #, fuzzy #~ msgid "Save..." #~ msgstr "Spara..." #, fuzzy #~ msgid "Delete..." #~ msgstr "Välj..." #, fuzzy #~ msgid "Set default..." #~ msgstr "standard" #~ msgid "Mod Options" #~ msgstr "Mod alternativ" #~ msgid "Map Options" #~ msgstr "Kart alternativ" #~ msgid "Select the mod to play with." #~ msgstr "Välj den mod som ska användas." #~ msgid "Test firewall" #~ msgstr "Testa firewallen" #, fuzzy #~ msgid "Tab icons" #~ msgstr "Kart alternativ" #, fuzzy #~ msgid "Download Lua widgets" #~ msgstr "Ladda ner" #~ msgid "&File" #~ msgstr "&Arkiv" #, fuzzy #~ msgid "Modname" #~ msgstr "Smeknamn" #, fuzzy #~ msgid "Download started" #~ msgstr "Ingen mod vald." #, fuzzy #~ msgid "Disconnecting" #~ msgstr "Koppla ned" #, fuzzy #~ msgid "Player" #~ msgstr "Spelare:" #~ msgid "Hi " #~ msgstr "Hej " #, fuzzy #~ msgid "Notice" #~ msgstr "Ingen" #, fuzzy #~ msgid "MB downloaded" #~ msgstr "Ladda ner" #~ msgid "Type /help in a chat box." #~ msgstr "Skriv /help i chatten." #, fuzzy #~ msgid "Disconnected from server." #~ msgstr "Anslut till lobby server" #~ msgid "Server message" #~ msgstr "Server medelanden" #, fuzzy #~ msgid "Grouping size" #~ msgstr "Händelse" #~ msgid "a" #~ msgstr "a" #~ msgid "p" #~ msgstr "p" #~ msgid "m" #~ msgstr "m" #~ msgid "%d%" #~ msgstr "%d%" #~ msgid "t" #~ msgstr "t" #~ msgid "Not a number" #~ msgstr "Inget nummer" #~ msgid "" #~ "Value out of range.\n" #~ " Enter an integer between 0 & 100." #~ msgstr "Numret ligger utanför intervallet 0 och 100." #~ msgid "Bot team sharing." #~ msgstr "Bot team delning." #, fuzzy #~ msgid "topic" #~ msgstr "Ämnet \"" #~ msgid "" #~ "You're using a wxwidgets library of the 2.6.x series\n" #~ " battle filtering, advanced gui and joining/hosting games using nat " #~ "traversal\n" #~ " won't be available" #~ msgstr "" #~ "Du använder en wxWidgets version i 2.6.x serien\n" #~ "vissa funktioner kommer att bli avstängda. Skaffa\n" #~ "en nyare version för att få full funktionalitet." #~ msgid "Missing Functionality" #~ msgstr "Saknad funktionalitet" #, fuzzy #~ msgid "Not online" #~ msgstr "Inte uppkopplad." #~ msgid "" #~ "This game uses NAT traversal that is not supported by wx 2.6 build of " #~ "springlobby. \n" #~ "\n" #~ "You will not be able to play in this battle. \n" #~ "Update your wxwidgets to 2.8 or newer to enable NAT traversal support." #~ msgstr "" #~ "Det här spelet använder NAT traversal som inte stödjs för wxWidgets 2.6.x." #~ msgid "Invalid host/port or servername." #~ msgstr "Felaktigt host/port eller servernamn." #~ msgid "Active chat channels:" #~ msgstr "Aktiva chat kanaler:" #~ msgid "no rank" #~ msgstr "ingen rank" #, fuzzy #~ msgid "Battle filter is active" #~ msgstr "Spel lista" #~ msgid "Select all" #~ msgstr "Markera allt" #, fuzzy #~ msgid "Add user" #~ msgstr "(%d användare)" #, fuzzy #~ msgid "Remove selected" #~ msgstr "Ingen mod vald." #, fuzzy #~ msgid "Invalid usernames" #~ msgstr "Felaktigt nummer" #, fuzzy #~ msgid "" #~ "A short description of the game, this will show up in the battle list. " #~ "This will be read-only for ladder" #~ msgstr "En kort beskrivning, denna kommer visas i spel listan." #, fuzzy #~ msgid "Unitsync error" #~ msgstr "Unitsync bibliotek" #~ msgid "" #~ "Please enter password needed to join this channel, leave blank for no " #~ "passwrd." #~ msgstr "" #~ "Var vänlig skriv in kanalen lösenord om detta behövs, annars lämnar du " #~ "det tomt." #~ msgid "Fixed source ports" #~ msgstr "Fixed source ports" #~ msgid "" #~ "NAT traversal to use, currently this feature is not supported by " #~ "SpringLobby." #~ msgstr "" #~ "NAT traversal att använda, detta stöds för tillfället inte av SpringLobby." #~ msgid "LuaAI" #~ msgstr "LuaAI" #~ msgid "Bot%d" #~ msgstr "Bot%d" #~ msgid "%Y-%m-%d %H:%M" #~ msgstr "%Y-%m-%d %H:%M" #~ msgid "[" #~ msgstr "[" #~ msgid "%H:%M" #~ msgstr "%H:%M" #~ msgid "?" #~ msgstr "?" #~ msgid "..." #~ msgstr "..." #~ msgid "Continue if commander dies" #~ msgstr "Fortsätt on din commander dör" #~ msgid "End if commander dies" #~ msgstr "Avsluta don din commander dör" #~ msgid "End condition" #~ msgstr "Spelets avslutning" #~ msgid "Resources" #~ msgstr "Resurser" #~ msgid "The amount of metal each player starts with." #~ msgstr "Hur mycket metall varje spelare startar med." #~ msgid "Start Energy" #~ msgstr "Start energi" #~ msgid "The amount of energy each player starts with." #~ msgstr "Hur mycket energi varje spelare startar med." #~ msgid "Max units" #~ msgstr "Max enheter" #~ msgid "Limit d-gun" #~ msgstr "Begränsa d-gun" #~ msgid "Ghosted buildings" #~ msgstr "Spök byggnader" #~ msgid "Diminishing metal makers" #~ msgstr "Av tagande metall skapare" #~ msgid "Save to:" #~ msgstr "Spara till:" #~ msgid "Browse..." #~ msgstr "Bläddra..." #~ msgid "Choose a directory" #~ msgstr "Välj en katalog" #~ msgid "Map/Mod Options" #~ msgstr "Kart/mod alternativ" #~ msgid "Up to Date" #~ msgstr "Uppdaterad" #~ msgid "" #~ "\n" #~ "\n" #~ "Would you like to visit a page with instructions on how to download the " #~ "newest version?" #~ msgstr "" #~ "\n" #~ "\n" #~ "Vill du gå till sidan som beskriver hur du uppdaterar?" #~ msgid "Limit D-Gun" #~ msgstr "Begränsa d-gun" #~ msgid "" #~ "Disables commander's D-gun when being too far away from the starting point" #~ msgstr "" #~ "Stänger av en commanders D-gun nät han går för långt från sin start " #~ "position" #~ msgid "Ghosted Buildings" #~ msgstr "Spök byggnader" #~ msgid "" #~ "Enemy buildings will leave a ghost image on the map after losing LoS on " #~ "them" #~ msgstr "" #~ "Fientliga byggnader lämna en spökbild på kartan efter att de kommit utom " #~ "synhåll" #~ msgid "Diminishing MM" #~ msgstr "Avtagande MM" #~ msgid "" #~ "Efficiency of MetalMakers will progressively reduce as much as you build " #~ "them" #~ msgstr "Effektiviteten av dina metall skapare sjunker ju fler du bygger" #~ msgid "Game Ending condition" #~ msgstr "Spelets avslutning" #~ msgid "" #~ "The condition that will end the game\n" #~ "0: when all units will be destroyed\n" #~ "1: when the commander will be destroyed\n" #~ "2: lineage mode (see option 1, but given away units will still die" #~ msgstr "" #~ "Spelet avlutnings villkor\n" #~ "0: Alla enheter döda\n" #~ "1: När commandern dör\n" #~ "2: lineage mode" #~ msgid "Sets the amount of metal that players will start with" #~ msgstr "Hur mycket metall en spelare startar med" #~ msgid "Sets the amount of energy that players will start with" #~ msgstr "Hur mycket energi en spelare startar med" #~ msgid "Max Units Allowed" #~ msgstr "Max antal enheter" #~ msgid "" #~ "Sets the maximum amount of units that a player will be allowed to build" #~ msgstr "Maximalt antal enheter en spelare kan ha" #~ msgid "Reset" #~ msgstr "Återställ" #~ msgid "" #~ "You have bots that are not assingled to startpositions. In the current " #~ "version of spring you are only allowed to use start positions positioning " #~ "them freely is not allowed.\n" #~ "\n" #~ "This will be fixed in next version of Spring." #~ msgstr "" #~ "Du har botar som inte är knutna till någon startposition. I denna " #~ "versionen av Spring är detta inte tillåtet." #~ msgid "" #~ "You are not using consecutive start position numbers.\n" #~ "\n" #~ "In the current version of spring you are not allowed to skip any " #~ "startpositions. You have to use all consecutive position.\n" #~ "\n" #~ "Example: if you have 2 bots + yourself you have to use start positions " #~ "1,2,3 not 1,3,4 or 2,3,4.\n" #~ "\n" #~ "This will be fixed in next version of Spring." #~ msgstr "" #~ "Du använder inte konsekutiva startpositions nummer, detta krävs i den här " #~ "versionen av Spring." #~ msgid "Spring directory" #~ msgstr "Spring katalogen" #~ msgid "Default location." #~ msgstr "Standard plats" #~ msgid "is not supported by the lobby server that requires version" #~ msgstr "supportras inte av lobby servern som kräver version" #~ msgid "" #~ "This is the SpringLobby channel, please report any problems you are " #~ "having with SpringLobby here and the friendly developers will help you." #~ msgstr "" #~ "Det här är SpringLobby kanalen, var god rapportera alla problem du har i " #~ "denna kanalen, så hjälper de välliga utvecklarna dig." springlobby-0.169/po/uk.po0000600000176000000410000043222412105760300017023 0ustar buildbotwww-data00000000000000# Ukrainian translation for springlobby # Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 # This file is distributed under the same license as the springlobby package. # FIRST AUTHOR , 2008. # msgid "" msgstr "" "Project-Id-Version: springlobby\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2008-07-30 23:43+0000\n" "Last-Translator: SpringLobby_Buildbot \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2008-09-20 21:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "" #: src/Helper/imageviewer.cpp:92 msgid "delete" msgstr "" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "" #: src/Helper/imageviewer.cpp:160 #, fuzzy msgid "Choose a filename" msgstr "Прізвисько:" #: src/Helper/imageviewer.cpp:167 msgid "File successfully saved" msgstr "" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 msgid "Success" msgstr "" #: src/Helper/imageviewer.cpp:170 msgid "Couldn't save file" msgstr "" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 msgid "Default" msgstr "" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "" #: src/Helper/wxTranslationHelper.cpp:148 msgid "Select the language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "Прийняти угоду" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "Ви приймаєте умови цієї угоди?" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "Так" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "Ні" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 msgid "User" msgstr "" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 #, fuzzy msgid "Channel" msgstr "Скасувати" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "Стан:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Minimum rank to join" msgstr "" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "Опис" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "Опис" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "Мапа" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 #, fuzzy msgid "Mapname" msgstr "Прізвисько:" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "Прізвисько:" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "Хост" #: src/battlelist/battlelistctrl.cpp:60 msgid "Name of the Host" msgstr "" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "Спостерігачі:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr " Спостерігач:" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 #, fuzzy msgid "Players" msgstr "Гравці:" #: src/battlelist/battlelistctrl.cpp:62 msgid "Number of Players joined" msgstr "" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "Мапа" #: src/battlelist/battlelistctrl.cpp:63 msgid "Maximum number of Players that can join" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "Скачати &мапу" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "Скачати &мапу" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "Спостерігачі:" #: src/battlelist/battlelistctrl.cpp:370 #, fuzzy msgid "Active Players:" msgstr "Гравці:" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "Хост:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "Стан:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "Заблоковано" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "Захищено паролем" #: src/battlelist/battlelistfilter.cpp:122 msgid "Highlighted only" msgstr "" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "Обмеження по рангу:" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "Опис:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "Розпочато" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "Досягнуто макс. кількість гравців" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "Відкрито" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "Гравець:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "Усі" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "Мапа:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "Тільки мапи, що є у мене" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "Макс.гравців:" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 msgid "Game:" msgstr "" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "Тільки мапи, що є у мене" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " Спостерігач:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "Гравці:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 msgid " Filter " msgstr "" #: src/battlelist/battlelisttab.cpp:144 #, fuzzy msgid "Activated" msgstr "Розпочато" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 msgid " Battle infos " msgstr "" #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "Створити нову гру" #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "Приєднатись" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "" "Ви не можете створити нову гру, не під'єднавшися до серверу. Будь ласка, " "зайдіть на сервер." #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "Не Підключено" #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "Ви не можете створити гру через несумісність Вашої версії" #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Помилка Spring" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "Вже у битві" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" "Ви вже у битві.\n" "Ви дійсно бажаєте залишити поточну битву та створити нову?" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "" #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 msgid "Matchmaker detected" msgstr "" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "Вже у битві" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "Ви вже у битві.\n" "Ви дійсно бажаєте залишити поточну битву та створити нову?" #: src/battlelist/battlelisttab.cpp:430 msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" #: src/battlelist/battlelisttab.cpp:433 msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 msgid "Game not available" msgstr "" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 msgid "Edit auto-joined channels" msgstr "" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "" #: src/channel/channelchooser.cpp:30 msgid "Find channel:" msgstr "" #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 msgid "Choose channels to join" msgstr "" #: src/channel/channellistctrl.cpp:30 msgid "# users" msgstr "" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "" #: src/chatlog.cpp:50 msgid "]" msgstr "" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "" #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "" #: src/chatpanel.cpp:69 msgid "#" msgstr "" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, c-format msgid "%d users" msgstr "" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "" #: src/chatpanel.cpp:296 msgid "Send" msgstr "" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr "" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "" #: src/chatpanel.cpp:717 msgid "channel" msgstr "" #: src/chatpanel.cpp:718 msgid "battle" msgstr "" #: src/chatpanel.cpp:719 msgid "server" msgstr "" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr "" #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr "" #: src/chatpanel.cpp:814 msgid " ** Channel topic:" msgstr "" #: src/chatpanel.cpp:821 msgid " ** Set by " msgstr "" #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "" #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr "" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr "" #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr "" #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr "" #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr "" #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr "" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "" #: src/chatpanel.cpp:1090 msgid " ** User is now offline." msgstr "" #: src/chatpanel.cpp:1097 msgid " ** User just got online." msgstr "" #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 msgid " ** Joined Battle." msgstr "" #: src/chatpanelmenu.cpp:34 msgid "Disable text appending" msgstr "" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "" #: src/chatpanelmenu.cpp:46 #, fuzzy msgid "Clear" msgstr "Клани" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "" #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "" #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "" #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "" #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "" #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "" #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "" #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "" #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "" #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "" #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "" #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "" #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "" #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "" #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "" #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "" #: src/chatpanelmenu.cpp:774 msgid "couldn't add user" msgstr "" #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "" #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "" #: src/connectwindow.cpp:85 msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "Гаразд" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "Скасувати" #: src/connectwindow.cpp:91 msgid "Login" msgstr "" #: src/connectwindow.cpp:92 msgid "Register" msgstr "" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "" #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "" #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" #: src/connectwindow.cpp:294 msgid "Invalid nickname" msgstr "" #: src/connectwindow.cpp:301 msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "" #: src/countrycodes.cpp:11 msgid " Andorra" msgstr "" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "" #: src/countrycodes.cpp:25 msgid "Åland Islands" msgstr "" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "" #: src/countrycodes.cpp:56 msgid "China" msgstr "" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "" #: src/countrycodes.cpp:82 msgid "France" msgstr "" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "" #: src/countrycodes.cpp:110 msgid "India" msgstr "" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "" #: src/countrycodes.cpp:234 msgid "United Kingdom" msgstr "" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "" #: src/countrycodes.cpp:236 msgid "United States" msgstr "" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "" #: src/crashreport.cpp:168 msgid "System informations" msgstr "" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "Не знайдено жодної мапи" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "Скачати &мапу" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "Скачати &мапу" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 #, fuzzy msgid "Name" msgstr "Прізвисько:" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "Мапа" #: src/downloader/filelister/filelistctrl.cpp:174 #, fuzzy msgid "game" msgstr "Прізвисько:" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "" #: src/downloader/filelister/filelistdialog.cpp:55 #, fuzzy msgid "Download selected" msgstr "Скачати &мапу" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "Прізвисько:" #: src/downloader/filelister/filelistfilter.cpp:69 msgid "Filetype:" msgstr "" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:78 msgid "" "\n" "successfully unzipped in:\n" msgstr "" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "Скачати &мапу" #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "Додати бота" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "Прізвисько:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "ШІ:" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "Оберіть бібліотеку штучного інтелекту для цього бота" #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 msgid "value" msgstr "" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "Додати бота" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "У вашому Spring немає жодного бота" #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "Не знайдено бібліотек ботів" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "Автоматичне балансування гравців по командам" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "Розподілити ранги рівно" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "Випадково" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "Клани" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "Немає" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "Чесно" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "Завжди" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" #: src/hosting/autobalancedialog.cpp:53 msgid "Number of allies" msgstr "" #: src/hosting/autobalancedialog.cpp:56 msgid "Auto select" msgstr "" #: src/hosting/battlemaptab.cpp:69 msgid "Select" msgstr "" #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "" #: src/hosting/battlemaptab.cpp:103 msgid "Chose before game" msgstr "" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "" #: src/hosting/battleoptionstab.cpp:77 msgid "Disable selected units." msgstr "" #: src/hosting/battleoptionstab.cpp:81 msgid "Re-enable selected units." msgstr "" #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "" #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "" #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "" #: src/hosting/battleoptionstab.cpp:242 msgid "Unit restriction" msgstr "" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "" #: src/hosting/battleroomlistctrl.cpp:750 #, fuzzy msgid "AI (bot)\n" msgstr "Додати бота" #: src/hosting/battleroomlistctrl.cpp:754 msgid "Human\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:759 #, fuzzy msgid "Spectator\n" msgstr "Спостерігачі:" #: src/hosting/battleroomlistctrl.cpp:763 #, fuzzy msgid "Player\n" msgstr "Гравець:" #: src/hosting/battleroomlistctrl.cpp:768 #, fuzzy msgid "Host\n" msgstr "Хост" #: src/hosting/battleroomlistctrl.cpp:772 msgid "Client\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:777 #, fuzzy msgid "Ready\n" msgstr "Завжди" #: src/hosting/battleroomlistctrl.cpp:781 msgid "Not ready\n" msgstr "" #: src/hosting/battleroomlistctrl.cpp:786 msgid "In sync" msgstr "" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "" #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "" #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "" #: src/hosting/battleroomtab.cpp:143 msgid "Auto un-spectate" msgstr "" #: src/hosting/battleroomtab.cpp:144 msgid "automatically unspec when there's a free slot" msgstr "" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "" #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "Створити нову гру" #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "Помилка при запуску битви." #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "" #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "Опис" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 msgid "AutoSpect" msgstr "" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "Розпочато" #: src/hosting/battleroomtab.cpp:209 msgid "Automatically start the battle when all players are ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Ring unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 msgid "Ring ..." msgstr "" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "Спостерігачі:" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 msgid "Force spectate ..." msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "" #: src/hosting/battleroomtab.cpp:255 msgid "Save" msgstr "" #: src/hosting/battleroomtab.cpp:256 msgid "Save a set of options." msgstr "" #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 msgid "Delete" msgstr "" #: src/hosting/battleroomtab.cpp:261 msgid "Delete a set of options." msgstr "" #: src/hosting/battleroomtab.cpp:265 msgid "Set default" msgstr "" #: src/hosting/battleroomtab.cpp:266 msgid "Use the current set of options as game's default." msgstr "" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "" #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "Прізвисько:" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "Опис" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 msgid "Set Timeout" msgstr "" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "" #: src/hosting/battleroomtab.cpp:987 msgid "Delete preset" msgstr "" #: src/hosting/battleroomtab.cpp:996 msgid "Set game default preset" msgstr "" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "" #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "Опис" #: src/hosting/hostbattledialog.cpp:91 msgid "Automatically write the battle description when a user joins." msgstr "" #: src/hosting/hostbattledialog.cpp:104 msgid "Select the game to play." msgstr "" #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "Захищено паролем" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "" #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 msgid "Randomly picks an available one" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "" #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "" #: src/hosting/hostbattledialog.cpp:185 msgid "NAT traversal to use." msgstr "" #: src/hosting/hostbattledialog.cpp:190 msgid "Rank requirement" msgstr "" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 msgid "Select the type of rank enforcement." msgstr "" #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "" #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 msgid "You have to select a game first." msgstr "" #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "Скачати &мапу" #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" #: src/hosting/hostbattledialog.cpp:427 #, fuzzy, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "Битву не розпочато через неможливість обраного (%d) порту приймати пакети. " "Перевірте налаштування мережевого екрану та шлюзу або змініть порт. Якщо " "нічого не допомогло, задійте у налаштуваннях опцію \"Hole Punching NAT " "Traversal\"." #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "Битву не розпочато через неможливість обраного (%d) порту приймати пакети. " "Перевірте налаштування мережевого екрану та шлюзу або змініть порт. Якщо " "нічого не допомогло, задійте у налаштуваннях опцію \"Hole Punching NAT " "Traversal\"." #: src/hosting/hostbattledialog.cpp:459 #, fuzzy msgid "Battle not started beacuse the game you selected could not be found. " msgstr "Битву не розпочато через неможливість знайти обрану модифікацію. " #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "Помилка при запуску битви." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "" "Не можу знайти жодної карти у вашому Spring. Можливо ви вказали невірний " "шлях до директорії Spring." #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "Не знайдено жодної мапи" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 msgid "Unit Restrictions" msgstr "" #: src/hosting/mmoptionwindows.cpp:36 msgid "Change option" msgstr "" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "" #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "" #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "" #: src/iconimagelist.cpp:322 msgid "Game is closed." msgstr "" #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "" #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "" #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "" #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "" #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "" #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "" #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "" #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "" #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "" #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "" #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "" #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 msgid "Newbies guide" msgstr "" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 msgid "Joining a battle:\n" msgstr "" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "Помилка при запуску битви." #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Помилка Spring" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 msgid "Singleplayer gamee" msgstr "" #: src/introguide.cpp:110 msgid "Multiplayer gamee" msgstr "" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 msgid "Disconnected from server, chat closed." msgstr "" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "" #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "" #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "" #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 msgid "&Save options" msgstr "" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "" #: src/mainwindow.cpp:148 msgid "&Autojoin channels" msgstr "" #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "Помилка Spring" #: src/mainwindow.cpp:156 msgid "&Save layout" msgstr "" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "" #: src/mainwindow.cpp:164 msgid "Channel &list" msgstr "" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "" #: src/mainwindow.cpp:166 msgid "Change &username" msgstr "" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "" #: src/mainwindow.cpp:169 msgid "&Reload maps/games" msgstr "" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "" #: src/mainwindow.cpp:178 msgid "&System Info" msgstr "" #: src/mainwindow.cpp:179 msgid "&Change language" msgstr "" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "" #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "" #: src/mainwindow.cpp:184 msgid "&Server" msgstr "" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "" #: src/mainwindow.cpp:500 msgid "You need to be connected to a server to view the channel list" msgstr "" #: src/mainwindow.cpp:500 msgid "Not connected" msgstr "" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "" #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "" #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "" #: src/mainwindow.cpp:540 #, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "" #: src/mainwindow.cpp:602 #, fuzzy msgid "No files found" msgstr "Не знайдено жодної мапи" #: src/mainwindow.cpp:656 #, c-format msgid "You need to restart %s for the language change to take effect." msgstr "" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "" #: src/mainwindow.cpp:692 msgid "This profile is write protected, please choose another name" msgstr "" #: src/mainwindow.cpp:703 msgid "Which profile do you want to load?" msgstr "" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "Прізвисько:" #: src/mainwindow.cpp:767 msgid "Enter new nickname" msgstr "" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "" #: src/mainwindow.h:199 msgid "Battlelist" msgstr "" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "" #: src/mainwindow.h:203 #, fuzzy msgid "Replays" msgstr "Завжди" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 #, fuzzy msgid "Downloads" msgstr "Скачати &мапу" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "" #: src/mapctrl.cpp:897 msgid "side:" msgstr "" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "" #: src/mapselectdialog.cpp:83 msgid "Show" msgstr "" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "" #: src/mapselectdialog.cpp:95 #, fuzzy msgid "Filter" msgstr "Чесно" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "" #: src/mapselectdialog.cpp:100 msgid "Map details" msgstr "" #: src/mapselectdialog.cpp:163 msgid "Start positions" msgstr "" #: src/mapselectdialog.cpp:261 msgid "Minimum wind" msgstr "" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "" #: src/mapselectdialog.cpp:263 msgid "Average wind" msgstr "" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "" #: src/mapselectdialog.cpp:265 #, fuzzy msgid "Aspect ratio" msgstr "Спостерігачі:" #: src/mapselectdialog.cpp:266 msgid "Number of start positions" msgstr "" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "" #: src/mmoptionswrapper.cpp:122 msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "Прізвисько:" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "Прізвисько:" #: src/mmoptionswrapper.cpp:132 msgid "List of restricted units" msgstr "" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "" #: src/options/chatoptionstab.cpp:258 msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "" #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "" #: src/options/chatoptionstab.cpp:300 msgid "Copy server messages in current channel" msgstr "" #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "" #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 msgid "Remove" msgstr "" #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:61 msgid "Rename.." msgstr "" #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "" #: src/options/groupoptionspanel.cpp:70 msgid "Add New.." msgstr "" #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "" #: src/options/groupoptionspanel.cpp:84 msgid "Group Actions" msgstr "" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "" #: src/options/groupoptionspanel.cpp:95 msgid "Ignore Chat" msgstr "" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:101 msgid "Notify Hosted Battles" msgstr "" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "" #: src/options/groupoptionspanel.cpp:134 msgid "Highlight Color" msgstr "" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "" #: src/options/groupoptionspanel.cpp:163 msgid "Add.." msgstr "" #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "" #: src/options/groupoptionspanel.cpp:170 msgid "Remove users from group" msgstr "" #: src/options/groupoptionspanel.cpp:264 msgid "Name of new group:" msgstr "" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "" #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 msgid "Use a file dialog to find the editor binary" msgstr "" #: src/options/lobbyoptionstab.cpp:91 msgid "Autoconnect" msgstr "" #: src/options/lobbyoptionstab.cpp:94 #, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "" #: src/options/lobbyoptionstab.cpp:96 msgid "Autoconnect on lobby start" msgstr "" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:104 #, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "" #: src/options/lobbyoptionstab.cpp:120 #, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "" #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "" #: src/options/lobbyoptionstab.cpp:130 msgid "Tooltips" msgstr "" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "" #: src/options/lobbyoptionstab.cpp:134 #, c-format msgid "Requires %s restart to take effect." msgstr "" #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "" #: src/options/lobbyoptionstab.cpp:158 msgid "Use notification popups?" msgstr "" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 msgid "Display time for popup notifications in seconds" msgstr "" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 #, fuzzy msgid "Start tab" msgstr "Розпочато" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "" #: src/options/lobbyoptionstab.cpp:282 msgid "Choose a editor browser executable" msgstr "" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "" #: src/options/mainoptionstab.cpp:73 msgid "General" msgstr "" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 msgid "Reloading unitsync" msgstr "" #: src/options/springoptionstab.cpp:315 #, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" #: src/playback/playbackfilter.cpp:60 msgid "Filter settings" msgstr "" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "Тільки мапи, що є у мене" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "" #: src/playback/playbackfilter.cpp:190 msgid "Duration (hh:mm:ss):" msgstr "" #: src/playback/playbacklistctrl.cpp:42 msgid "Date" msgstr "" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "Прізвисько:" #: src/playback/playbacklistctrl.cpp:46 #, fuzzy msgid "Duration" msgstr "Опис" #: src/playback/playbacklistctrl.cpp:47 #, fuzzy msgid "Spring Version" msgstr "Помилка Spring" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize" msgstr "" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "" #: src/playback/playbacktab.cpp:134 msgid "Load" msgstr "" #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "Завжди" #: src/playback/playbacktab.cpp:280 msgid "savegame" msgstr "" #: src/playback/playbacktab.cpp:288 msgid "Couldn't get your spring versions from any unitsync library." msgstr "" #: src/playback/playbacktab.cpp:306 #, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" #: src/playback/playbacktab.cpp:323 msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" #: src/playback/playbacktab.cpp:356 msgid "Invalid replay" msgstr "" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr "" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr "" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 msgid "There was an error downloading for the latest version.\n" msgstr "" #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 msgid "Negotiation error" msgstr "" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 msgid "Invalid Value" msgstr "" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 msgid "File doesn't exit" msgstr "" #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "Розпочато" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 msgid "Reconnection Error" msgstr "" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 msgid "Unknown Error" msgstr "" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "" #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 #, fuzzy msgid "Download complete." msgstr "Скачати &мапу" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer." msgstr "" #: src/reconnectdialog.cpp:23 msgid "Reconnect Dialog" msgstr "" #: src/reconnectdialog.cpp:34 msgid "Try Reconnecting" msgstr "" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 msgid "Tries to connect to the next server in the list." msgstr "" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 msgid "Do nothing" msgstr "" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "" #: src/selectusersdialog.h:67 msgid "Select Users" msgstr "" #: src/serverevents.cpp:124 #, c-format msgid "ping: %s ms" msgstr "" #: src/serverevents.cpp:142 msgid " is online" msgstr "" #: src/serverevents.cpp:165 msgid " is now " msgstr "" #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "" #: src/serverevents.cpp:224 msgid " just went offline" msgstr "" #: src/serverevents.cpp:259 msgid " opened battle " msgstr "" #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "" #: src/serverevents.cpp:583 msgid " because: " msgstr "" #: src/serverevents.cpp:826 msgid "Server Message" msgstr "" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr "" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr "" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "" #: src/serverevents.cpp:928 #, c-format msgid "%s mutelist" msgstr "" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "" #: src/serverevents.cpp:984 #, fuzzy msgid "Download update" msgstr "Скачати &мапу" #: src/serverevents.cpp:984 #, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" #: src/serverevents.cpp:1067 msgid "Automatically moved to new battle" msgstr "" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "" #: src/singleplayertab.cpp:99 #, fuzzy msgid "Spectate only" msgstr "Спостерігачі:" #: src/singleplayertab.cpp:102 msgid "Random start positions" msgstr "" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 msgid "Game setup error" msgstr "" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "" #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "" #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 msgid "Coulnd't load required unitsync library" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Fatal error" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 msgid "Ignore chat" msgstr "" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 msgid "Battle Autokick" msgstr "" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 msgid "Friends" msgstr "" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "" #: src/springsettings/ctrlconstants.h:229 msgid "Terrain detail" msgstr "" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "Unit LOD distance" msgstr "" #: src/springsettings/ctrlconstants.h:230 msgid "higher value = units will remain detailed even when zooming out" msgstr "" #: src/springsettings/ctrlconstants.h:231 msgid "Grass detail" msgstr "" #: src/springsettings/ctrlconstants.h:231 msgid "higher value = more detailed grass" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "" #: src/springsettings/ctrlconstants.h:236 msgid "Max nano simultaneous particles" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "Enable v-sync" msgstr "" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "Full-scene anti-aliasing samples" msgstr "" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "Master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:273 msgid "master sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "General sound volume" msgstr "" #: src/springsettings/ctrlconstants.h:274 msgid "general volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "" #: src/springsettings/ctrlconstants.h:275 msgid "reply volume relative to master volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 msgid "Battle volume" msgstr "" #: src/springsettings/ctrlconstants.h:276 msgid "battle volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "User interface volume" msgstr "" #: src/springsettings/ctrlconstants.h:277 msgid "ui volume relative to global volume" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "" #: src/springsettings/ctrlconstants.h:291 msgid "Reflective units" msgstr "" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "" #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 msgid "left is the default" msgstr "" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "" #: src/springsettings/ctrlconstants.h:312 msgid "Use less colors" msgstr "" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" #: src/springsettings/ctrlconstants.h:320 msgid "Show in-game player information" msgstr "" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "" #: src/springsettings/ctrlconstants.h:385 msgid "Bump-mapped" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "" #: src/springsettings/ctrlconstants.h:415 msgid "Blur reflection" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Shore waves" msgstr "" #: src/springsettings/ctrlconstants.h:417 msgid "Enables shorewaves" msgstr "" #: src/springsettings/ctrlconstants.h:418 msgid "Reflection" msgstr "" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 msgid "Reflection texture size" msgstr "" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "Опис" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "off" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "" #: src/springsettings/frame.cpp:315 msgid "(simple mode)" msgstr "" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "" #: src/springsettings/frame.cpp:367 msgid "(expert mode)" msgstr "" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 msgid "Invalid input" msgstr "" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 msgid "Hotkey Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Enter new command:" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 msgid "Hotkey SaveSettings error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "Не знайдено жодної мапи" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "" #: src/springsettings/panel_pathoption.cpp:34 msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "" #: src/springsettings/panel_pathoption.cpp:96 msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "" #: src/springsettings/presets.h:45 msgid "very low" msgstr "" #: src/springsettings/presets.h:45 msgid "very high" msgstr "" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "" #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "" #: src/springsettings/tab_quality_video.cpp:166 msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "" #: src/springsettings/tab_simple.cpp:40 msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr "" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "" #: src/springsettings/tab_simple.cpp:99 msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "" #: src/springsettings/tab_ui.cpp:37 msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 msgid "loading unitsync" msgstr "" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "" #: src/tdfcontainer.cpp:131 msgid "line " msgstr "" #: src/tdfcontainer.cpp:131 msgid " , column " msgstr "" #: src/ui.cpp:175 msgid "Server password" msgstr "" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" #: src/ui.cpp:294 msgid "Registration successful" msgstr "" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "" #: src/ui.cpp:458 msgid "Help error" msgstr "" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, c-format msgid "%s commands help." msgstr "" #: src/ui.cpp:465 msgid "Global commands:" msgstr "" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr "" #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr "" #: src/ui.cpp:468 msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr "" #: src/ui.cpp:469 msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr "" #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr "" #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr "" #: src/ui.cpp:472 msgid " \"/join channel [password]\" - Joins a channel." msgstr "" #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr "" #: src/ui.cpp:474 msgid " \"/ingame\" - Shows how much time you have in game." msgstr "" #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr "" #: src/ui.cpp:476 msgid " \"/part\" - Leaves current channel." msgstr "" #: src/ui.cpp:477 msgid " \"/p\" - Alias to /part." msgstr "" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr "" #: src/ui.cpp:479 #, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr "" #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr "" #: src/ui.cpp:481 #, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr "" #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr "" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr "" #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "" #: src/ui.cpp:496 msgid "The topic \"" msgstr "" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "" #: src/ui.cpp:580 msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "" #: src/ui.cpp:599 msgid "Online play is currently disabled." msgstr "" #: src/ui.cpp:631 #, c-format msgid "disconnected from server: %s" msgstr "" #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "" #: src/ui.cpp:839 #, c-format msgid "%s (%d users)" msgstr "" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "" #: src/ui.cpp:993 msgid "Battle closed" msgstr "" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "" #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" #: src/ui.cpp:1304 msgid "Map missing" msgstr "" #: src/ui.cpp:1337 #, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" #: src/ui.cpp:1340 msgid "Welcome" msgstr "" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "" #: src/ui.cpp:1359 msgid "Import settings?" msgstr "" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/ui.cpp:1387 msgid "Your Version: " msgstr "" #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "" #: src/ui.cpp:1392 #, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" #: src/ui.cpp:1395 msgid "Not up to date" msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "Помилка Spring" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" #: src/updater/updater.cpp:72 msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" #: src/updater/updater.cpp:81 #, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 msgid "the SpringLobby revision to update to" msgstr "" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 msgid "Warning" msgstr "" #: src/user.cpp:83 #, fuzzy msgid "away" msgstr "Завжди" #: src/user.cpp:83 msgid "back" msgstr "" #: src/user.cpp:85 #, fuzzy msgid "ingame" msgstr "Прізвисько:" #: src/user.cpp:85 msgid "back from game" msgstr "" #: src/user.cpp:195 msgid "Newbie" msgstr "" #: src/user.cpp:196 msgid "Beginner" msgstr "" #: src/user.cpp:197 msgid "Average" msgstr "" #: src/user.cpp:198 msgid "Above average" msgstr "" #: src/user.cpp:199 msgid "Experienced" msgstr "" #: src/user.cpp:200 msgid "Highly experienced" msgstr "" #: src/user.cpp:201 msgid "Veteran" msgstr "" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 msgid "Unknown" msgstr "" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "" #: src/useractions.h:11 #, fuzzy msgid "none" msgstr "Немає" #: src/useractions.h:11 msgid "highlight" msgstr "" #: src/useractions.h:11 msgid "notify login/out" msgstr "" #: src/useractions.h:11 msgid "ignore chat" msgstr "" #: src/useractions.h:11 msgid "ignore pm" msgstr "" #: src/useractions.h:12 msgid "autokick" msgstr "" #: src/useractions.h:12 msgid "notify hosted battle" msgstr "" #: src/useractions.h:12 msgid "notify status change" msgstr "" #: src/useractions.h:19 msgid "no action at all" msgstr "" #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "" #: src/usermenu.h:31 msgid "Create new group..." msgstr "" #: src/usermenu.h:37 msgid "Add to group..." msgstr "" #: src/usermenu.h:38 msgid "Remove from group" msgstr "" #: src/utils/controls.h:22 msgid "Choose color" msgstr "" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 msgid "Author" msgstr "" #: src/widgets/downloadlistctrl.cpp:31 msgid "Games" msgstr "" #: src/widgets/downloadlistctrl.cpp:31 msgid "Compatible games" msgstr "" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "" #: src/widgets/infopanel.cpp:69 msgid "Suitable games" msgstr "" #: src/widgets/infopanel.cpp:74 #, fuzzy msgid "Current version" msgstr "Помилка Spring" #: src/widgets/infopanel.cpp:79 #, fuzzy msgid "# downloaded" msgstr "Скачати &мапу" #: src/widgets/infopanel.cpp:84 msgid "Published on" msgstr "" #: src/widgets/infopanel.cpp:121 #, fuzzy msgid "Changelog" msgstr "Скасувати" #: src/widgets/infopanel.cpp:126 msgid "Screenshots" msgstr "" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "" #, fuzzy #~ msgid "Faction" #~ msgstr "Опис" #~ msgid "Mod" #~ msgstr "Модифікація" #, fuzzy #~ msgid "spectators" #~ msgstr "Спостерігачі:" #, fuzzy #~ msgid "players" #~ msgstr "Гравці:" #~ msgid "Mod:" #~ msgstr "Модифікація:" #~ msgid "Only mods i have" #~ msgstr "Тільки модифікації, що є у мене" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to host a new game" #~ msgstr "" #~ "Ви вже маєте копію Spring у запущенному стані, для створенні нової гри її " #~ "треба закрити" #, fuzzy #~ msgid "Download Lua widgets" #~ msgstr "Скачати &мапу" #, fuzzy #~ msgid "Download started" #~ msgstr "Скачати &мапу" #, fuzzy #~ msgid "Player" #~ msgstr "Гравець:" #, fuzzy #~ msgid "Notice" #~ msgstr "Немає" #, fuzzy #~ msgid "Not online" #~ msgstr "Не Підключено" #, fuzzy #~ msgid "Unitsync error" #~ msgstr "Помилка Spring" springlobby-0.169/po/zh_CN.po0000600000176000000410000056462712105760300017422 0ustar buildbotwww-data00000000000000# # Jie , 2010. # msgid "" msgstr "" "Project-Id-Version: springlobby\n" "Report-Msgid-Bugs-To: devel@www.springlobby.info\n" "POT-Creation-Date: 2013-01-04 11:44+0100\n" "PO-Revision-Date: 2010-07-08 14:24+1000\n" "Last-Translator: Jie \n" "Language-Team: Simplified Chinese <18n-translation@lists.linux.net.cn>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: UTF-8\n" "X-Launchpad-Export-Date: 2008-09-20 21:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Plural-Forms: nplurals=1; plural=0\n" #: src/Helper/imageviewer.cpp:85 msgid "previous" msgstr "前一个" #: src/Helper/imageviewer.cpp:88 msgid "next" msgstr "下一个" #: src/Helper/imageviewer.cpp:92 msgid "delete" msgstr "删除" #: src/Helper/imageviewer.cpp:96 msgid "save as" msgstr "保存为" #: src/Helper/imageviewer.cpp:146 msgid "couldn't remove file" msgstr "无法移除文件" #: src/Helper/imageviewer.cpp:146 src/Helper/imageviewer.cpp:170 #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 src/chatpanelmenu.cpp:774 #: src/hosting/battleroomtab.cpp:632 src/hosting/battleroomtab.cpp:634 #: src/mainwindow.cpp:692 src/options/chatoptionstab.cpp:220 #: src/playback/playbacktab.cpp:374 src/qt/simpleserverevents.cpp:927 #: src/serverevents.cpp:1004 src/springsettings/tab_abstract.cpp:139 #: src/tasserver.cpp:526 src/ui.cpp:1381 src/updater/updater.cpp:47 #: src/updater/updater.cpp:72 src/updater/updater.cpp:84 #: src/widgets/infopanel.cpp:161 src/widgets/infopanel.cpp:173 msgid "Error" msgstr "错误" #: src/Helper/imageviewer.cpp:160 msgid "Choose a filename" msgstr "选择一个文件名" #: src/Helper/imageviewer.cpp:167 msgid "File successfully saved" msgstr "文件成功保存" #: src/Helper/imageviewer.cpp:167 src/updater/updater.cpp:89 #: src/widgets/infopanel.cpp:158 src/widgets/infopanel.cpp:170 msgid "Success" msgstr "成功" #: src/Helper/imageviewer.cpp:170 msgid "Couldn't save file" msgstr "无法保存为文件" #: src/Helper/wxTranslationHelper.cpp:99 src/springlobbyapp.cpp:518 msgid "Default" msgstr "默认" #: src/Helper/wxTranslationHelper.cpp:130 #, c-format msgid "SEARCHING FOR %s" msgstr "搜索 %s" #: src/Helper/wxTranslationHelper.cpp:147 msgid "Array of language names and identifiers should have the same size." msgstr "排列语言/标示列表应有同样尺寸。" #: src/Helper/wxTranslationHelper.cpp:148 msgid "Select the language" msgstr "选择语言" #: src/Helper/wxTranslationHelper.cpp:149 msgid "Language" msgstr "语言" #: src/Helper/wxTranslationHelper.cpp:159 #, c-format msgid "wxTranslationHelper: Path Prefix = \"%s\"" msgstr "wxTranslationHelper: Path Prefix = \"%s\"" #: src/Helper/wxTranslationHelper.cpp:162 #, c-format msgid "wxTranslationHelper: Catalog Name = \"%s\"" msgstr "wxTranslationHelper: Catalog Name = \"%s\"" #: src/agreementdialog.cpp:24 msgid "Accept Agreement" msgstr "接受协议" #: src/agreementdialog.cpp:33 msgid "Do you accept the terms of this agreement?" msgstr "你接受协议中的条款吗?" #: src/agreementdialog.cpp:41 src/utils/controls.h:19 msgid "Yes" msgstr "是" #: src/agreementdialog.cpp:46 src/utils/controls.h:19 msgid "No" msgstr "否" #: src/aui/slbook.cpp:111 msgid "New Tab" msgstr "" #: src/aui/slbook.cpp:112 msgid "Close" msgstr "" #: src/aui/slbook.cpp:115 msgid "Close all chats" msgstr "" #: src/aui/slbook.cpp:116 msgid "Close all other chats" msgstr "" #: src/aui/slbook.cpp:121 src/aui/slbook.cpp:123 src/chatpanelmenu.cpp:144 msgid "User" msgstr "用户" #: src/aui/slbook.cpp:122 msgid "Panel" msgstr "" #: src/aui/slbook.cpp:126 src/channel/channellistctrl.cpp:29 msgid "Channel" msgstr "频道" #: src/battlelist/battlelistctrl.cpp:54 #, fuzzy msgid "Status" msgstr "状态:" #: src/battlelist/battlelistctrl.cpp:55 msgid "Country" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 msgid "Rank" msgstr "" #: src/battlelist/battlelistctrl.cpp:56 #, fuzzy msgid "Minimum rank to join" msgstr "最低需求级别" #: src/battlelist/battlelistctrl.cpp:57 src/hosting/hostbattledialog.cpp:80 #: src/widgets/infopanel.cpp:120 msgid "Description" msgstr "描述" #: src/battlelist/battlelistctrl.cpp:57 #, fuzzy msgid "Battle description" msgstr "描述" #: src/battlelist/battlelistctrl.cpp:58 #: src/downloader/filelister/filelistfilter.cpp:83 #: src/hosting/battleroomtab.cpp:166 src/hosting/mainjoinbattletab.cpp:60 #: src/playback/playbacklistctrl.cpp:44 msgid "Map" msgstr "地图" #: src/battlelist/battlelistctrl.cpp:58 src/playback/playbacklistctrl.cpp:44 msgid "Mapname" msgstr "地图名" #: src/battlelist/battlelistctrl.cpp:59 #: src/downloader/filelister/filelistfilter.cpp:84 #: src/hosting/hostbattledialog.cpp:97 src/hosting/mainsingleplayertab.cpp:39 #: src/playback/playbacklistctrl.cpp:43 msgid "Game" msgstr "游戏" #: src/battlelist/battlelistctrl.cpp:59 #, fuzzy msgid "Gamename" msgstr "游戏" #: src/battlelist/battlelistctrl.cpp:60 src/hosting/hostbattledialog.cpp:267 msgid "Host" msgstr "主机" #: src/battlelist/battlelistctrl.cpp:60 #, fuzzy msgid "Name of the Host" msgstr "新租的名称:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Spectators" msgstr "旁观者:" #: src/battlelist/battlelistctrl.cpp:61 #, fuzzy msgid "Number of Spectators" msgstr "玩家数量" #: src/battlelist/battlelistctrl.cpp:62 src/playback/playbacklistctrl.cpp:45 msgid "Players" msgstr "玩家" #: src/battlelist/battlelistctrl.cpp:62 #, fuzzy msgid "Number of Players joined" msgstr "玩家数量" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Max" msgstr "地图" #: src/battlelist/battlelistctrl.cpp:63 #, fuzzy msgid "Maximum number of Players that can join" msgstr "战斗中允许的最大玩家数量。" #: src/battlelist/battlelistctrl.cpp:64 msgid "Running" msgstr "" #: src/battlelist/battlelistctrl.cpp:64 msgid "How long the game has been running for" msgstr "" #: src/battlelist/battlelistctrl.cpp:206 src/playback/playbacklistctrl.cpp:66 msgid "Download &map" msgstr "下载地图" #: src/battlelist/battlelistctrl.cpp:209 #, fuzzy msgid "Download &game" msgstr "下载地图" #: src/battlelist/battlelistctrl.cpp:363 src/battlelist/battlelisttab.cpp:108 msgid "Spectators:" msgstr "旁观者:" #: src/battlelist/battlelistctrl.cpp:370 msgid "Active Players:" msgstr "活跃玩家:" #: src/battlelist/battlelistfilter.cpp:89 msgid "Host:" msgstr "主机:" #: src/battlelist/battlelistfilter.cpp:108 #: src/battlelist/battlelistfilter.cpp:183 msgid "Status:" msgstr "状态:" #: src/battlelist/battlelistfilter.cpp:112 src/hosting/battleroomtab.cpp:190 msgid "Locked" msgstr "已锁定" #: src/battlelist/battlelistfilter.cpp:117 msgid "Passworded" msgstr "有密码的" #: src/battlelist/battlelistfilter.cpp:122 msgid "Highlighted only" msgstr "仅高亮显示者" #: src/battlelist/battlelistfilter.cpp:132 msgid "Rank Limit:" msgstr "等级限制" #: src/battlelist/battlelistfilter.cpp:166 msgid "Description:" msgstr "描述:" #: src/battlelist/battlelistfilter.cpp:187 msgid "Started" msgstr "已开始" #: src/battlelist/battlelistfilter.cpp:192 msgid "Full" msgstr "人数已满" #: src/battlelist/battlelistfilter.cpp:197 msgid "Open" msgstr "开放的" #: src/battlelist/battlelistfilter.cpp:207 src/playback/playbackfilter.cpp:68 msgid "Player:" msgstr "玩家:" #: src/battlelist/battlelistfilter.cpp:216 src/playback/playbackfilter.cpp:75 msgid "All" msgstr "全部" #: src/battlelist/battlelistfilter.cpp:235 src/battlelist/battlelisttab.cpp:90 #: src/playback/playbackfilter.cpp:96 src/playback/playbacktab.cpp:84 #: src/singleplayertab.cpp:62 msgid "Map:" msgstr "地图:" #: src/battlelist/battlelistfilter.cpp:252 msgid "Only maps i have" msgstr "仅列出我拥有地图的游戏" #: src/battlelist/battlelistfilter.cpp:263 msgid "Max.Player:" msgstr "最大玩家数" #: src/battlelist/battlelistfilter.cpp:290 src/battlelist/battlelisttab.cpp:96 #: src/playback/playbackfilter.cpp:129 src/playback/playbacktab.cpp:90 #: src/singleplayertab.cpp:71 #, fuzzy msgid "Game:" msgstr "游戏" #: src/battlelist/battlelistfilter.cpp:307 src/playback/playbackfilter.cpp:146 #, fuzzy msgid "Only games I have" msgstr "仅列出我拥有地图的游戏" #: src/battlelist/battlelistfilter.cpp:318 msgid " Spectator:" msgstr " 观众数:" #: src/battlelist/battlelistfilter.cpp:690 #: src/battlelist/battlelistfilter.cpp:695 #: src/battlelist/battlelistfilter.cpp:696 #: src/battlelist/battlelistfilter.cpp:698 src/playback/playbackfilter.cpp:414 #: src/springsettings/tab_quality_video.cpp:90 #: src/springsettings/tab_quality_video.cpp:91 #, c-format msgid "%d" msgstr "%d" #: src/battlelist/battlelisttab.cpp:102 src/playback/playbacktab.cpp:96 msgid "Players:" msgstr "玩家:" #: src/battlelist/battlelisttab.cpp:138 src/battlelist/battlelisttab.cpp:140 msgid " Filter " msgstr " 过滤" #: src/battlelist/battlelisttab.cpp:144 msgid "Activated" msgstr "已启动" #: src/battlelist/battlelisttab.cpp:148 src/battlelist/battlelisttab.cpp:150 msgid " Battle infos " msgstr " 战斗信息" #: src/battlelist/battlelisttab.cpp:154 msgid "0 battles displayed" msgstr "显示 0 场战斗" #: src/battlelist/battlelisttab.cpp:158 msgid "Host new..." msgstr "建立新游戏" #: src/battlelist/battlelisttab.cpp:161 msgid "Join" msgstr "加入" #: src/battlelist/battlelisttab.cpp:191 #, c-format msgid "%d battles displayed" msgstr "%d 战斗现实" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "" "You cannot host a game while being offline. Please connect to a lobby server." msgstr "离线时你不能主建游戏。请连接到服务器。" #: src/battlelist/battlelisttab.cpp:306 src/hosting/battleroomtab.cpp:1222 msgid "Not Online." msgstr "不在线" #: src/battlelist/battlelisttab.cpp:313 src/hosting/battleroomtab.cpp:1229 msgid "Hosting is disabled due to the incompatible version you're using" msgstr "因为你使用了不匹配的版本,你将不能主建游戏" #: src/battlelist/battlelisttab.cpp:313 src/battlelist/battlelisttab.cpp:397 #: src/hosting/battleroomtab.cpp:1229 src/options/springoptionstab.cpp:316 #: src/playback/playbacktab.cpp:288 src/playback/playbacktab.cpp:309 #: src/singleplayertab.cpp:325 src/springsettings/panel_pathoption.cpp:99 #: src/ui.cpp:580 src/ui.cpp:600 msgid "Spring error" msgstr "Spring运行错误" #: src/battlelist/battlelisttab.cpp:319 msgid "Already in a battle" msgstr "已经在战斗中" #: src/battlelist/battlelisttab.cpp:319 msgid "" "You are already in a battle.\n" "\n" "Do you want to leave current battle to start a new?" msgstr "" "你已经在战斗中。\n" "你想离开现在的战斗以开始新的战斗吗?" #: src/battlelist/battlelisttab.cpp:397 msgid "" "Joining battles is disabled due to the incompatible spring version you're " "using." msgstr "因为您的Spring版本不兼容,因此无法加入战斗。" #: src/battlelist/battlelisttab.cpp:407 msgid "" "You are about to join a matchmaking battleroom.\n" "The host might move you to another battle at any time. In case of problems " "please contact the host or a lobby moderator.\n" "Do you want to continue?" msgstr "" #: src/battlelist/battlelisttab.cpp:408 #, fuzzy msgid "Matchmaker detected" msgstr "精确匹配" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "Already in another battle" msgstr "已经在战斗中" #: src/battlelist/battlelisttab.cpp:420 #, fuzzy msgid "" "You are already in a battle.\n" "\n" "Do you want to leave your current battle and join this one?" msgstr "" "你已经在一局战斗中了。\n" "\n" "你想要离开当前战斗并加入这一个吗?" #: src/battlelist/battlelisttab.cpp:430 #, fuzzy msgid "" "Should I try to download it for you?\n" "You'll be notified once it's complete" msgstr "" "是否要下载它?\n" "你可以在“下载管理器”选项卡中看到其进度。" #: src/battlelist/battlelisttab.cpp:433 #, fuzzy msgid "" "You need to download the game before you can join this game.\n" "\n" msgstr "" "在你能够加入该游戏前,你需要下载模组。\n" "\n" #: src/battlelist/battlelisttab.cpp:434 src/playback/playbacktab.cpp:323 #, fuzzy msgid "Game not available" msgstr "地图不可用" #: src/battlelist/battlelisttab.cpp:445 msgid "" "You need to download the map to be able to play in this game.\n" "\n" msgstr "" "在玩此游戏前你需要下载地图。\n" "\n" #: src/battlelist/battlelisttab.cpp:446 src/playback/playbacktab.cpp:335 msgid "Map not available" msgstr "地图不可用" #: src/battlelist/battlelisttab.cpp:457 msgid "Battle password" msgstr "游戏密码" #: src/battlelist/battlelisttab.cpp:457 msgid "Enter password (spaces will be stripped)" msgstr "" #: src/channel/autojoinchanneldialog.cpp:25 msgid "Edit auto-joined channels" msgstr "修改自动加入频道选项" #: src/channel/autojoinchanneldialog.cpp:34 msgid "" "Add one channel per line like this:\n" "channelname password\n" "(passwords for existing channels are not displayed)" msgstr "" "每一行添加一个频道,就像:\n" "频道名 密码\n" "(已经存在的频道密码不显示)" #: src/channel/channelchooser.cpp:23 msgid "Double click to join" msgstr "双击加入" #: src/channel/channelchooser.cpp:30 msgid "Find channel:" msgstr "寻找频道:" #: src/channel/channelchooserdialog.cpp:14 src/mainwindow.cpp:230 msgid "Choose channels to join" msgstr "选择要加入的频道" #: src/channel/channellistctrl.cpp:30 msgid "# users" msgstr "# 名用户" #: src/channel/channellistctrl.cpp:117 #, c-format msgid "Displaying %d out of %d channels" msgstr "显示 %d %d 频道" #: src/chatlog.cpp:50 msgid "### Session Closed at [" msgstr "### 会话于 [" #: src/chatlog.cpp:50 msgid "]" msgstr "] 结束" #: src/chatlog.cpp:78 msgid "" "Couldn't create folder. \n" "Be sure that there isn't a write protection.\n" msgstr "" "无法创建目录。 \n" "请确认写保护是否被打开。\n" #: src/chatlog.cpp:79 msgid "Log function is disabled until restart SpringLobby." msgstr "日志功能将在SpringLobby重新启动后启用。" #: src/chatlog.cpp:79 src/chatlog.cpp:94 src/chatlog.cpp:112 msgid "Log Warning" msgstr "日志警报" #: src/chatlog.cpp:92 msgid "" "Couldn't write message to log.\n" "Logging will be disabled for room " msgstr "" "无法将信息写入日志。\n" "日志将在该房间被禁用 " #: src/chatlog.cpp:93 msgid "" ".\n" "\n" "Rejoin room to reactivate logging." msgstr "" "。\n" "\n" "重新进入房间来重新启用日志功能。" #: src/chatlog.cpp:111 msgid "Can't open log file \"" msgstr "" #: src/chatlog.cpp:111 #, fuzzy msgid "" "\".\n" "Be sure that there isn't a write protection.\n" msgstr "" "无法打开日志文件。 \n" "请确认写保护是否被打开。\n" #: src/chatpanel.cpp:67 msgid "channel_" msgstr "频道_" #: src/chatpanel.cpp:69 msgid "#" msgstr "#" #: src/chatpanel.cpp:253 src/chatpanel.cpp:740 src/chatpanel.cpp:755 #: src/chatpanel.cpp:791 #, c-format msgid "%d users" msgstr "%d 用户" #: src/chatpanel.cpp:283 msgid "right click for options (like autojoin)" msgstr "右键选项(如自动加入)" #: src/chatpanel.cpp:296 msgid "Send" msgstr "发送" #: src/chatpanel.cpp:712 msgid " !! Command: \"" msgstr " !! 指令:“" #: src/chatpanel.cpp:712 msgid "\" params: \"" msgstr "” 参数:“" #: src/chatpanel.cpp:717 msgid "channel" msgstr "频道" #: src/chatpanel.cpp:718 msgid "battle" msgstr "战斗" #: src/chatpanel.cpp:719 msgid "server" msgstr "服务器" #: src/chatpanel.cpp:730 src/chatpanel.cpp:733 msgid " joined the " msgstr " 加入 " #: src/chatpanel.cpp:777 src/chatpanel.cpp:781 msgid " left the " msgstr " 离开 " #: src/chatpanel.cpp:814 msgid " ** Channel topic:" msgstr " ** 频道主题:" #: src/chatpanel.cpp:821 msgid " ** Set by " msgstr "** 设置" #: src/chatpanel.cpp:851 src/chatpanel.cpp:879 src/chatpanel.cpp:909 msgid "Chat closed." msgstr "聊天被关闭。" #: src/chatpanel.cpp:957 #, c-format msgid "Are you sure you want to paste %d lines?" msgstr "你确认你要粘贴 %d 行吗?" #: src/chatpanel.cpp:968 msgid "Failed to post to pastebin.com." msgstr "" #: src/chatpanel.cpp:986 msgid " You have SpringLobby v" msgstr " 您使用 SpringLobby v" #: src/chatpanel.cpp:998 msgid " You are not in channel or channel does not exist." msgstr " 你还没有加入频道或者频道不存在。" #: src/chatpanel.cpp:1004 src/chatpanel.cpp:1018 src/chatpanel.cpp:1032 #: src/chatpanel.cpp:1042 #, c-format msgid "" " Error: Command (%s) does not exist, use /help for a list of available " "commands." msgstr " 错误: 指令 %s 不存在,请使用 /help 获得指令列表。" #: src/chatpanel.cpp:1012 msgid "" " You are not in battle or battle does not exist, use /help for a list of " "available commands." msgstr " 你不在战斗中或者战斗不存在,使用 /help 获得指令列表。" #: src/chatpanel.cpp:1026 msgid " User is offline." msgstr " 用户不在线。" #: src/chatpanel.cpp:1060 msgid " Sent: \"" msgstr " 已发送: “" #: src/chatpanel.cpp:1060 msgid "\"" msgstr "”" #: src/chatpanel.cpp:1090 #, fuzzy msgid " ** User is now offline." msgstr " 用户不在线。" #: src/chatpanel.cpp:1097 #, fuzzy msgid " ** User just got online." msgstr " 用户不在线。" #: src/chatpanel.cpp:1232 msgid " ** Left Battle." msgstr "" #: src/chatpanel.cpp:1233 #, fuzzy msgid " ** Joined Battle." msgstr " 开放的游戏" #: src/chatpanelmenu.cpp:34 #, fuzzy msgid "Disable text appending" msgstr "禁用 专家模式警告" #: src/chatpanelmenu.cpp:38 msgid "Copy" msgstr "复制" #: src/chatpanelmenu.cpp:42 msgid "Copy link location" msgstr "复制链接" #: src/chatpanelmenu.cpp:46 msgid "Clear" msgstr "清除" #: src/chatpanelmenu.cpp:52 msgid "Auto join this channel" msgstr "自动加入该频道" #: src/chatpanelmenu.cpp:59 src/hosting/battleroomtab.cpp:176 msgid "Leave" msgstr "离开" #: src/chatpanelmenu.cpp:62 msgid "Display Join/Leave Messages" msgstr "显示 加入/离开 信息" #: src/chatpanelmenu.cpp:68 msgid "Show mute list" msgstr "显示静音列表" #: src/chatpanelmenu.cpp:76 msgid "Channel info" msgstr "频道信息" #: src/chatpanelmenu.cpp:80 src/chatpanelmenu.cpp:325 msgid "Set topic..." msgstr "设置话题..." #: src/chatpanelmenu.cpp:82 src/chatpanelmenu.cpp:342 msgid "Channel message..." msgstr "频道消息..." #: src/chatpanelmenu.cpp:86 msgid "Lock..." msgstr "锁定..." #: src/chatpanelmenu.cpp:88 msgid "Unlock" msgstr "解锁" #: src/chatpanelmenu.cpp:92 msgid "Register..." msgstr "注册..." #: src/chatpanelmenu.cpp:94 msgid "Unregister" msgstr "注销" #: src/chatpanelmenu.cpp:100 msgid "On" msgstr "打开" #: src/chatpanelmenu.cpp:102 msgid "Off" msgstr "关闭" #: src/chatpanelmenu.cpp:106 msgid "Is on?" msgstr "是否开启" #: src/chatpanelmenu.cpp:108 msgid "Spam protection" msgstr "垃圾消息保护" #: src/chatpanelmenu.cpp:109 src/chatpanelmenu.cpp:236 msgid "ChanServ" msgstr "频道服务器" #: src/chatpanelmenu.cpp:117 msgid "Disconnect" msgstr "断开连接" #: src/chatpanelmenu.cpp:119 msgid "Reconnect" msgstr "重新连接" #: src/chatpanelmenu.cpp:128 msgid "Remove..." msgstr "移除..." #: src/chatpanelmenu.cpp:130 msgid "Change password..." msgstr "更改密码..." #: src/chatpanelmenu.cpp:132 msgid "Set access..." msgstr "设置权限..." #: src/chatpanelmenu.cpp:134 msgid "Accounts" msgstr "帐户" #: src/chatpanelmenu.cpp:137 msgid "Broadcast..." msgstr "广播..." #: src/chatpanelmenu.cpp:139 msgid "Admin" msgstr "管理员" #: src/chatpanelmenu.cpp:148 msgid "Open log in editor" msgstr "" #: src/chatpanelmenu.cpp:162 msgid "Open Chat" msgstr "公众聊天" #: src/chatpanelmenu.cpp:165 msgid "Join same battle" msgstr "加入同一战斗" #: src/chatpanelmenu.cpp:175 msgid "Ingame time" msgstr "游戏持续时间" #: src/chatpanelmenu.cpp:177 msgid "Retrieve IP and Smurfs" msgstr "返回IP与Smurf" #: src/chatpanelmenu.cpp:184 src/chatpanelmenu.cpp:223 msgid "Mute..." msgstr "禁言..." #: src/chatpanelmenu.cpp:186 msgid "Mute for 5 minutes" msgstr "禁言5分钟" #: src/chatpanelmenu.cpp:188 msgid "Mute for 10 minutes" msgstr "禁言10分钟" #: src/chatpanelmenu.cpp:190 msgid "Mute for 30 minutes" msgstr "禁言30分钟" #: src/chatpanelmenu.cpp:192 msgid "Mute for 2 hours" msgstr "禁言2小时" #: src/chatpanelmenu.cpp:194 msgid "Mute for 1 day" msgstr "禁言1天" #: src/chatpanelmenu.cpp:197 src/chatpanelmenu.cpp:225 msgid "Unmute" msgstr "取消禁言" #: src/chatpanelmenu.cpp:199 msgid "Mute" msgstr "禁言" #: src/chatpanelmenu.cpp:201 src/chatpanelmenu.cpp:228 msgid "Kick..." msgstr "踢出..." #: src/chatpanelmenu.cpp:205 msgid "Ban..." msgstr "禁闭..." #: src/chatpanelmenu.cpp:207 msgid "Unban" msgstr "解禁" #: src/chatpanelmenu.cpp:211 src/hosting/battleroomlistctrl.cpp:182 #: src/hosting/battleroomlistctrl.cpp:374 #: src/hosting/battleroomlistctrl.cpp:384 msgid "Ring" msgstr "闹铃提示" #: src/chatpanelmenu.cpp:215 msgid "Slap!" msgstr "打耳光!" #: src/chatpanelmenu.cpp:232 msgid "Op" msgstr "给管理员权限" #: src/chatpanelmenu.cpp:234 msgid "DeOp" msgstr "取消管理员权限" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:386 #: src/chatpanelmenu.cpp:403 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ error" msgstr "频道服务器错误" #: src/chatpanelmenu.cpp:305 src/chatpanelmenu.cpp:319 #: src/chatpanelmenu.cpp:336 src/chatpanelmenu.cpp:353 #: src/chatpanelmenu.cpp:370 src/chatpanelmenu.cpp:419 #: src/chatpanelmenu.cpp:433 src/chatpanelmenu.cpp:447 #: src/chatpanelmenu.cpp:540 src/chatpanelmenu.cpp:562 #: src/chatpanelmenu.cpp:579 src/chatpanelmenu.cpp:601 #: src/chatpanelmenu.cpp:618 msgid "ChanServ is not in this channel." msgstr "频道服务器不在该频道。" #: src/chatpanelmenu.cpp:325 msgid "What should be the new topic?" msgstr "新话题应该是什么?" #: src/chatpanelmenu.cpp:342 msgid "Message:" msgstr "消息:" #: src/chatpanelmenu.cpp:359 msgid "Lock channel..." msgstr "锁定频道..." #: src/chatpanelmenu.cpp:359 msgid "What should the new password be?" msgstr "新密码应该是什么?" #: src/chatpanelmenu.cpp:375 msgid "Unlock Channel" msgstr "解锁频道" #: src/chatpanelmenu.cpp:375 msgid "Are you sure you want to unlock this channel?" msgstr "你确认你要解锁该频道?" #: src/chatpanelmenu.cpp:386 src/chatpanelmenu.cpp:403 msgid "ChanServ is not on this server." msgstr "频道服务器不在该服务器。" #: src/chatpanelmenu.cpp:392 msgid "Register Channel" msgstr "注册频道" #: src/chatpanelmenu.cpp:392 msgid "Who should be appointed founder of this channel?" msgstr "谁应该被指派为该频道的创建者?" #: src/chatpanelmenu.cpp:408 msgid "Unregister Channel" msgstr "注销频道" #: src/chatpanelmenu.cpp:408 msgid "Are you sure you want to unregister this channel?" msgstr "你确认你要注销此频道?" #: src/chatpanelmenu.cpp:472 msgid "Remove User Acount" msgstr "移除用户帐户" #: src/chatpanelmenu.cpp:472 msgid "What user account do you want to remove today?" msgstr "你想要移除哪个用户帐户?" #: src/chatpanelmenu.cpp:473 msgid "Remove Account" msgstr "删除账户" #: src/chatpanelmenu.cpp:473 msgid "Are you sure you want to remove the account " msgstr "你确认你要移除帐户 " #: src/chatpanelmenu.cpp:481 src/chatpanelmenu.cpp:482 msgid "Change User Acount Password" msgstr "修改用户帐户密码" #: src/chatpanelmenu.cpp:481 msgid "What user account do you want to change the password for?" msgstr "你想为哪位用户修改密码?" #: src/chatpanelmenu.cpp:482 msgid "What would be the new password?" msgstr "新密码应该是什么?" #: src/chatpanelmenu.cpp:489 src/chatpanelmenu.cpp:653 #: src/chatpanelmenu.cpp:659 msgid "Not Implemented" msgstr "尚未实现" #: src/chatpanelmenu.cpp:496 msgid "Broadcast Message" msgstr "广播消息" #: src/chatpanelmenu.cpp:496 msgid "Message to be broadcasted:" msgstr "要广播的消息:" #: src/chatpanelmenu.cpp:545 msgid "Mute User" msgstr "禁言用户" #: src/chatpanelmenu.cpp:545 msgid "For how many minutes should the user be muted?" msgstr "该用户将被禁言几分钟?" #: src/chatpanelmenu.cpp:587 msgid "Kick User" msgstr "踢出用户" #: src/chatpanelmenu.cpp:587 src/chatpanelmenu.cpp:646 msgid "Reason:" msgstr "原因:" #: src/chatpanelmenu.cpp:646 msgid "Kick user" msgstr "踢出用户" #: src/chatpanelmenu.cpp:666 msgid "Mute user" msgstr "禁言用户" #: src/chatpanelmenu.cpp:666 msgid "Duration:" msgstr "持续时间:" #: src/chatpanelmenu.cpp:764 src/hosting/battleroomlistctrl.cpp:874 msgid "Enter name" msgstr "输入名称" #: src/chatpanelmenu.cpp:765 src/hosting/battleroomlistctrl.cpp:875 msgid "" "Please enter the name for the new group.\n" "After clicking ok you will be taken to adjust its settings." msgstr "请键入新组的名称。点击OK之后可以改变设定。" #: src/chatpanelmenu.cpp:774 msgid "couldn't add user" msgstr "无法添加用户" #: src/connectwindow.cpp:44 msgid "Connect to lobby server" msgstr "连接到对战大厅服务器" #: src/connectwindow.cpp:65 src/options/chatoptionstab.cpp:192 msgid "Server" msgstr "服务器" #: src/connectwindow.cpp:67 msgid "" "Server to connect to. You can connect to any server you like by typing in " "hostaddress:port format." msgstr "服务器连接至。 你可以以 主机地址:端口号 的格式输入并连接到任何服务器。" #: src/connectwindow.cpp:71 src/hosting/battleroomlistctrl.cpp:115 #: src/nicklistctrl.cpp:62 src/selectusersdialog.cpp:106 msgid "Nickname" msgstr "昵称" #: src/connectwindow.cpp:73 src/connectwindow.cpp:160 src/ui.cpp:175 msgid "Password" msgstr "密码" #: src/connectwindow.cpp:75 msgid "Remember password" msgstr "记住密码" #: src/connectwindow.cpp:76 msgid "Autoconnect next time" msgstr "下次自动连接" #: src/connectwindow.cpp:77 msgid "" "remember connection details and automatically connect to server on next " "lobby startup" msgstr "记住连接详细设置并在下次游戏大厅启动时自动连接到服务器" #: src/connectwindow.cpp:85 #, fuzzy msgid "" "Note: If you do not have an account, you\n" " can register one for free on the\n" "\"Register\" tab." msgstr "" "提示:如果你还没有一个账户,你\n" "可以在“注册”选项卡内免费注册\n" "一个。" #: src/connectwindow.cpp:87 src/hosting/autobalancedialog.cpp:68 #: src/hosting/mmoptionwindows.cpp:106 msgid "Ok" msgstr "确定" #: src/connectwindow.cpp:88 src/hosting/addbotdialog.cpp:112 #: src/hosting/autobalancedialog.cpp:65 src/hosting/hostbattledialog.cpp:263 #: src/hosting/mmoptionwindows.cpp:103 msgid "Cancel" msgstr "取消" #: src/connectwindow.cpp:91 msgid "Login" msgstr "登陆" #: src/connectwindow.cpp:92 msgid "Register" msgstr "注册" #: src/connectwindow.cpp:147 msgid "Nick" msgstr "昵称" #: src/connectwindow.cpp:261 msgid "Invalid port." msgstr "无效的端口。" #: src/connectwindow.cpp:261 src/connectwindow.cpp:267 msgid "Invalid port" msgstr "无效的端口" #: src/connectwindow.cpp:267 msgid "" "Port number out of range.\n" "\n" "It must be an integer between 1 and 65535" msgstr "" "端口号超出范围。\n" "\n" "端口号必须介于1到65535" #: src/connectwindow.cpp:276 msgid "Invalid host/port." msgstr "无效的主机/端口。" #: src/connectwindow.cpp:276 msgid "Invalid host" msgstr "无效的主机" #: src/connectwindow.cpp:294 msgid "" "The entered nickname contains invalid characters like )? &%.\n" " Please try again" msgstr "" "输入的昵称包含不可用字符,比如 )? &%。\n" " 请再试。" #: src/connectwindow.cpp:294 msgid "Invalid nickname" msgstr "无效的用户名" #: src/connectwindow.cpp:301 msgid "" "Registration failed, the reason was:\n" "Password / confirmation mismatch (or empty passwort)" msgstr "" "注册失败,原因是:\n" "密码与确认不匹配(或者空密码)" #: src/connectwindow.cpp:301 src/ui.cpp:300 msgid "Registration failed." msgstr "注册失败。" #: src/countrycodes.cpp:11 msgid " Andorra" msgstr " 安道尔共和国" #: src/countrycodes.cpp:12 msgid "United Arab Emirates" msgstr "阿拉伯联合酋长国" #: src/countrycodes.cpp:13 msgid "Afghanistan" msgstr "阿富汗" #: src/countrycodes.cpp:14 msgid "Antigua and Barbuda" msgstr "安提瓜和巴布达" #: src/countrycodes.cpp:15 msgid "Anguilla" msgstr "安圭拉" #: src/countrycodes.cpp:16 msgid "Albania" msgstr "阿尔巴尼亚" #: src/countrycodes.cpp:17 msgid "Armenia" msgstr "亚美尼亚" #: src/countrycodes.cpp:18 msgid "Netherlands Antilles" msgstr "荷属安的列斯" #: src/countrycodes.cpp:19 msgid "Angola" msgstr "安哥拉" #: src/countrycodes.cpp:20 msgid "Antarctica" msgstr "南极洲" #: src/countrycodes.cpp:21 msgid "Argentina" msgstr "阿根廷" #: src/countrycodes.cpp:22 msgid "American Samoa" msgstr "美洲萨摩亚" #: src/countrycodes.cpp:23 msgid "Austria" msgstr "奥地利" #: src/countrycodes.cpp:24 msgid "Australia" msgstr "澳大利亚" #: src/countrycodes.cpp:25 #, fuzzy msgid "Åland Islands" msgstr "开曼群岛" #: src/countrycodes.cpp:26 msgid "Aruba" msgstr "阿鲁巴" #: src/countrycodes.cpp:27 msgid "Azerbaijan" msgstr "阿塞拜疆" #: src/countrycodes.cpp:28 msgid "Bosnia and Herzegovina" msgstr "波斯尼亚和黑塞哥维那" #: src/countrycodes.cpp:29 msgid "Barbados" msgstr "巴巴多斯" #: src/countrycodes.cpp:30 msgid "Bangladesh" msgstr "孟加拉国" #: src/countrycodes.cpp:31 msgid "Belgium" msgstr "比利时" #: src/countrycodes.cpp:32 msgid "Burkina Faso" msgstr "布基纳法索" #: src/countrycodes.cpp:33 msgid "Bulgaria" msgstr "保加利亚" #: src/countrycodes.cpp:34 msgid "Bahrain" msgstr "巴林" #: src/countrycodes.cpp:35 msgid "Burundi" msgstr "布隆迪" #: src/countrycodes.cpp:36 msgid "Benin" msgstr "贝宁" #: src/countrycodes.cpp:37 msgid "Bermuda" msgstr "百慕大" #: src/countrycodes.cpp:38 msgid "Brunei Darussalam" msgstr "文莱德鲁萨兰" #: src/countrycodes.cpp:39 msgid "Bolivia" msgstr "玻利维亚" #: src/countrycodes.cpp:40 msgid "Brazil" msgstr "巴西" #: src/countrycodes.cpp:41 msgid "Bahamas" msgstr "巴哈马" #: src/countrycodes.cpp:42 msgid "Bhutan" msgstr "不丹" #: src/countrycodes.cpp:43 msgid "Bouvet Island" msgstr "布维群岛" #: src/countrycodes.cpp:44 msgid "Botswana" msgstr "博茨瓦纳" #: src/countrycodes.cpp:45 msgid "Belarus" msgstr "白俄罗斯" #: src/countrycodes.cpp:46 msgid "Belize" msgstr "伯利兹" #: src/countrycodes.cpp:47 msgid "Canada" msgstr "加拿大" #: src/countrycodes.cpp:48 msgid "Cocos (Keeling Islands)" msgstr "柯林斯群岛" #: src/countrycodes.cpp:49 msgid "Central African Republic" msgstr "中非共和国" #: src/countrycodes.cpp:50 msgid "Congo" msgstr "刚果" #: src/countrycodes.cpp:51 msgid "Switzerland" msgstr "瑞士" #: src/countrycodes.cpp:52 msgid "Cote D'Ivoire (Ivory Coast)" msgstr "象牙海岸" #: src/countrycodes.cpp:53 msgid "Cook Islands" msgstr "库克群岛" #: src/countrycodes.cpp:54 msgid "Chile" msgstr "智利" #: src/countrycodes.cpp:55 msgid "Cameroon" msgstr "喀麦隆" #: src/countrycodes.cpp:56 msgid "China" msgstr "中国" #: src/countrycodes.cpp:57 msgid "Colombia" msgstr "哥伦比亚" #: src/countrycodes.cpp:58 msgid "Costa Rica" msgstr "哥斯达黎加" #: src/countrycodes.cpp:59 msgid "Cuba" msgstr "古巴" #: src/countrycodes.cpp:60 msgid "Cape Verde" msgstr "佛得角" #: src/countrycodes.cpp:61 msgid "Christmas Island" msgstr "圣诞岛" #: src/countrycodes.cpp:62 msgid "Cyprus" msgstr "塞普勒斯" #: src/countrycodes.cpp:63 msgid "Czech Republic" msgstr "捷克共和国" #: src/countrycodes.cpp:64 msgid "Germany" msgstr "德国" #: src/countrycodes.cpp:65 msgid "Djibouti" msgstr "吉布提" #: src/countrycodes.cpp:66 msgid "Denmark" msgstr "丹麦" #: src/countrycodes.cpp:67 msgid "Dominica" msgstr "多米尼加" #: src/countrycodes.cpp:68 msgid "Dominican Republic" msgstr "多米尼加共和国" #: src/countrycodes.cpp:69 msgid "Algeria" msgstr "阿尔及利亚" #: src/countrycodes.cpp:70 msgid "Ecuador" msgstr "厄瓜多尔" #: src/countrycodes.cpp:71 msgid "Estonia" msgstr "爱沙尼亚" #: src/countrycodes.cpp:72 msgid "Egypt" msgstr "埃及" #: src/countrycodes.cpp:73 msgid "Western Sahara" msgstr "西撒哈拉" #: src/countrycodes.cpp:74 msgid "Eritrea" msgstr "厄立特里亚" #: src/countrycodes.cpp:75 msgid "Spain" msgstr "西班牙" #: src/countrycodes.cpp:76 msgid "Ethiopia" msgstr "埃塞俄比亚" #: src/countrycodes.cpp:77 msgid "Finland" msgstr "芬兰" #: src/countrycodes.cpp:78 msgid "Fiji" msgstr "斐济" #: src/countrycodes.cpp:79 msgid "Falkland Islands (Malvinas)" msgstr "福克兰群岛(马尔维纳斯)" #: src/countrycodes.cpp:80 msgid "Micronesia" msgstr "密克罗尼西亚" #: src/countrycodes.cpp:81 msgid "Faroe Islands" msgstr "法罗群岛" #: src/countrycodes.cpp:82 msgid "France" msgstr "法国" #: src/countrycodes.cpp:83 msgid "France, Metropolitan" msgstr "法国,欧洲本土" #: src/countrycodes.cpp:84 msgid "Gabon" msgstr "加蓬" #: src/countrycodes.cpp:85 msgid "Grenada" msgstr "格林纳达" #: src/countrycodes.cpp:86 msgid "Georgia" msgstr "格鲁吉亚" #: src/countrycodes.cpp:87 msgid "French Guiana" msgstr "法属圭亚那" #: src/countrycodes.cpp:88 msgid "Ghana" msgstr "加纳" #: src/countrycodes.cpp:89 msgid "Gibraltar" msgstr "直布罗陀" #: src/countrycodes.cpp:90 msgid "Greenland" msgstr "格陵兰" #: src/countrycodes.cpp:91 msgid "Gambia" msgstr "冈比亚" #: src/countrycodes.cpp:92 msgid "Guinea" msgstr "几内亚" #: src/countrycodes.cpp:93 msgid "Guadeloupe" msgstr "瓜德罗普" #: src/countrycodes.cpp:94 msgid "Equatorial Guinea" msgstr "赤道几内亚" #: src/countrycodes.cpp:95 msgid "Greece" msgstr "希腊" #: src/countrycodes.cpp:96 msgid "S. Georgia and S. Sandwich Isls." msgstr "南乔治亚与南三明治群岛" #: src/countrycodes.cpp:97 msgid "Guatemala" msgstr "危地马拉" #: src/countrycodes.cpp:98 msgid "Guam" msgstr "关岛" #: src/countrycodes.cpp:99 msgid "Guinea-Bissau" msgstr "几内亚比绍" #: src/countrycodes.cpp:100 msgid "Guyana" msgstr "圭亚那" #: src/countrycodes.cpp:101 msgid "Hong Kong" msgstr "香港特别行政区" #: src/countrycodes.cpp:102 msgid "Heard and McDonald Islands" msgstr "赫德与麦克唐纳群岛" #: src/countrycodes.cpp:103 msgid "Honduras" msgstr "洪都拉斯" #: src/countrycodes.cpp:104 msgid "Croatia (Hrvatska)" msgstr "克罗地亚" #: src/countrycodes.cpp:105 msgid "Haiti" msgstr "海地" #: src/countrycodes.cpp:106 msgid "Hungary" msgstr "匈牙利" #: src/countrycodes.cpp:107 msgid "Indonesia" msgstr "印度尼西亚" #: src/countrycodes.cpp:108 msgid "Ireland" msgstr "爱尔兰" #: src/countrycodes.cpp:109 msgid "Israel" msgstr "以色列" #: src/countrycodes.cpp:110 msgid "India" msgstr "印度" #: src/countrycodes.cpp:111 msgid "British Indian Ocean Territory" msgstr "英属印度洋地区" #: src/countrycodes.cpp:112 msgid "Iraq" msgstr "伊拉克" #: src/countrycodes.cpp:113 msgid "Iran" msgstr "伊朗" #: src/countrycodes.cpp:114 msgid "Iceland" msgstr "冰岛" #: src/countrycodes.cpp:115 msgid "Italy" msgstr "意大利" #: src/countrycodes.cpp:116 msgid "Jamaica" msgstr "牙买加" #: src/countrycodes.cpp:117 msgid "Jordan" msgstr "约旦" #: src/countrycodes.cpp:118 msgid "Japan" msgstr "日本" #: src/countrycodes.cpp:119 msgid "Kenya" msgstr "肯尼亚" #: src/countrycodes.cpp:120 msgid "Kyrgyzstan (Kyrgyz Republic)" msgstr "吉尔吉斯斯坦" #: src/countrycodes.cpp:121 msgid "Cambodia" msgstr "柬埔寨" #: src/countrycodes.cpp:122 msgid "Kiribati" msgstr "基里巴斯" #: src/countrycodes.cpp:123 msgid "Comoros" msgstr "科摩罗" #: src/countrycodes.cpp:124 msgid "Saint Kitts and Nevis" msgstr "圣基茨和尼维斯" #: src/countrycodes.cpp:125 msgid "Korea (North) (People's Republic)" msgstr "朝鲜" #: src/countrycodes.cpp:126 msgid "Korea (South) (Republic)" msgstr "韩国" #: src/countrycodes.cpp:127 msgid "Kuwait" msgstr "科威特" #: src/countrycodes.cpp:128 msgid "Cayman Islands" msgstr "开曼群岛" #: src/countrycodes.cpp:129 msgid "Kazakhstan" msgstr "哈萨克斯坦" #: src/countrycodes.cpp:130 msgid "Laos" msgstr "老挝" #: src/countrycodes.cpp:131 msgid "Lebanon" msgstr "黎巴嫩" #: src/countrycodes.cpp:132 msgid "Saint Lucia" msgstr "圣路西亚" #: src/countrycodes.cpp:133 msgid "Liechtenstein" msgstr "列支敦士登" #: src/countrycodes.cpp:134 msgid "Sri Lanka" msgstr "斯里兰卡" #: src/countrycodes.cpp:135 msgid "Liberia" msgstr "利比里亚" #: src/countrycodes.cpp:136 msgid "Lesotho" msgstr "莱索托" #: src/countrycodes.cpp:137 msgid "Lithuania" msgstr "立陶宛" #: src/countrycodes.cpp:138 msgid "Luxembourg" msgstr "卢森堡" #: src/countrycodes.cpp:139 msgid "Latvia" msgstr "拉脱维亚" #: src/countrycodes.cpp:140 msgid "Libya" msgstr "利比亚" #: src/countrycodes.cpp:141 msgid "Morocco" msgstr "摩洛哥" #: src/countrycodes.cpp:142 msgid "Monaco" msgstr "摩纳哥" #: src/countrycodes.cpp:143 msgid "Moldova" msgstr "摩尔多瓦" #: src/countrycodes.cpp:144 msgid "Montenegro" msgstr "芒特尼格罗共和国" #: src/countrycodes.cpp:145 msgid "Madagascar" msgstr "马达加斯加" #: src/countrycodes.cpp:146 msgid "Marshall Islands" msgstr "马绍尔群岛" #: src/countrycodes.cpp:147 msgid "Macedonia" msgstr "马其顿" #: src/countrycodes.cpp:148 msgid "Mali" msgstr "马里" #: src/countrycodes.cpp:149 msgid "Myanmar" msgstr "缅甸" #: src/countrycodes.cpp:150 msgid "Mongolia" msgstr "蒙古" #: src/countrycodes.cpp:151 msgid "Macau" msgstr "澳门特别行政区" #: src/countrycodes.cpp:152 msgid "Northern Mariana Islands" msgstr "北马里亚纳群岛" #: src/countrycodes.cpp:153 msgid "Martinique" msgstr "马提尼克" #: src/countrycodes.cpp:154 msgid "Mauritania" msgstr "毛里塔尼亚" #: src/countrycodes.cpp:155 msgid "Montserrat" msgstr "蒙特塞拉特" #: src/countrycodes.cpp:156 msgid "Malta" msgstr "马耳他" #: src/countrycodes.cpp:157 msgid "Mauritius" msgstr "毛里求斯" #: src/countrycodes.cpp:158 msgid "Maldives" msgstr "马尔代夫" #: src/countrycodes.cpp:159 msgid "Malawi" msgstr "马拉维" #: src/countrycodes.cpp:160 msgid "Mexico" msgstr "墨西哥" #: src/countrycodes.cpp:161 msgid "Malaysia" msgstr "马来西亚" #: src/countrycodes.cpp:162 msgid "Mozambique" msgstr "莫桑比克" #: src/countrycodes.cpp:163 msgid "Namibia" msgstr "纳米比亚" #: src/countrycodes.cpp:164 msgid "New Caledonia" msgstr "新喀里多尼亚" #: src/countrycodes.cpp:165 msgid "Niger" msgstr "尼日尔" #: src/countrycodes.cpp:166 msgid "Norfolk Island" msgstr "诺福克岛" #: src/countrycodes.cpp:167 msgid "Nigeria" msgstr "尼日利亚" #: src/countrycodes.cpp:168 msgid "Nicaragua" msgstr "尼加拉瓜" #: src/countrycodes.cpp:169 msgid "Netherlands" msgstr "荷兰" #: src/countrycodes.cpp:170 msgid "Norway" msgstr "挪威" #: src/countrycodes.cpp:171 msgid "Nepal" msgstr "尼泊尔" #: src/countrycodes.cpp:172 msgid "Nauru" msgstr "瑙鲁" #: src/countrycodes.cpp:173 msgid "Neutral Zone (Saudia Arabia/Iraq)" msgstr "中立区(沙特阿拉伯/伊拉克)" #: src/countrycodes.cpp:174 msgid "Niue" msgstr "纽埃" #: src/countrycodes.cpp:175 msgid "New Zealand" msgstr "新西兰" #: src/countrycodes.cpp:176 msgid "Oman" msgstr "阿曼" #: src/countrycodes.cpp:177 msgid "Panama" msgstr "巴拿马" #: src/countrycodes.cpp:178 msgid "Peru" msgstr "秘鲁" #: src/countrycodes.cpp:179 msgid "French Polynesia" msgstr "法属波利尼西亚" #: src/countrycodes.cpp:180 msgid "Papua New Guinea" msgstr "巴布亚新几内亚" #: src/countrycodes.cpp:181 msgid "Philippines" msgstr "菲律宾" #: src/countrycodes.cpp:182 msgid "Pakistan" msgstr "巴基斯坦" #: src/countrycodes.cpp:183 msgid "Poland" msgstr "波兰" #: src/countrycodes.cpp:184 msgid "St. Pierre and Miquelon" msgstr "圣皮埃尔和麦克伦群岛" #: src/countrycodes.cpp:185 msgid "Pitcairn" msgstr "皮特克恩" #: src/countrycodes.cpp:186 msgid "Puerto Rico" msgstr "波多黎各" #: src/countrycodes.cpp:187 msgid "Portugal" msgstr "葡萄牙" #: src/countrycodes.cpp:188 msgid "Palau" msgstr "帕劳" #: src/countrycodes.cpp:189 msgid "Paraguay" msgstr "巴拉圭" #: src/countrycodes.cpp:190 msgid "Qatar" msgstr "卡塔尔" #: src/countrycodes.cpp:191 msgid "Reunion" msgstr "留尼汪" #: src/countrycodes.cpp:192 msgid "Romania" msgstr "罗马尼亚" #: src/countrycodes.cpp:193 msgid "Serbia" msgstr "塞尔维亚" #: src/countrycodes.cpp:194 msgid "Russian Federation" msgstr "俄罗斯" #: src/countrycodes.cpp:195 msgid "Rwanda" msgstr "卢旺达" #: src/countrycodes.cpp:196 msgid "Saudi Arabia" msgstr "沙特阿拉伯" #: src/countrycodes.cpp:197 msgid "Solomon Islands" msgstr "所罗门群岛" #: src/countrycodes.cpp:198 msgid "Seychelles" msgstr "塞舌尔" #: src/countrycodes.cpp:199 msgid "Sudan" msgstr "苏丹" #: src/countrycodes.cpp:200 msgid "Sweden" msgstr "瑞典" #: src/countrycodes.cpp:201 msgid "Singapore" msgstr "新加坡" #: src/countrycodes.cpp:202 msgid "St. Helena" msgstr "圣赫勒拿岛" #: src/countrycodes.cpp:203 msgid "Slovenia" msgstr "斯洛文尼亚" #: src/countrycodes.cpp:204 msgid "Svalbard and Jan Mayen Islands" msgstr "斯瓦尔巴特和扬马延岛" #: src/countrycodes.cpp:205 msgid "Slovakia (Slovak Republic)" msgstr "斯洛伐克" #: src/countrycodes.cpp:206 msgid "Sierra Leone" msgstr "塞拉利昂" #: src/countrycodes.cpp:207 msgid "San Marino" msgstr "圣马力诺" #: src/countrycodes.cpp:208 msgid "Senegal" msgstr "塞内加尔" #: src/countrycodes.cpp:209 msgid "Somalia" msgstr "索马里" #: src/countrycodes.cpp:210 msgid "Suriname" msgstr "苏里南" #: src/countrycodes.cpp:211 msgid "Sao Tome and Principe" msgstr "圣多美和普林西比" #: src/countrycodes.cpp:212 msgid "Soviet Union (former)" msgstr "前苏联" #: src/countrycodes.cpp:213 msgid "El Salvador" msgstr "萨尔瓦多" #: src/countrycodes.cpp:214 msgid "Syria" msgstr "叙利亚" #: src/countrycodes.cpp:215 msgid "Swaziland" msgstr "史瓦济兰" #: src/countrycodes.cpp:216 msgid "Turks and Caicos Islands" msgstr "特克斯和凯科斯群岛" #: src/countrycodes.cpp:217 msgid "Chad" msgstr "乍得" #: src/countrycodes.cpp:218 msgid "French Southern Territories" msgstr "法属南半球领地" #: src/countrycodes.cpp:219 msgid "Togo" msgstr "多哥" #: src/countrycodes.cpp:220 msgid "Thailand" msgstr "泰国" #: src/countrycodes.cpp:221 msgid "Tajikistan" msgstr "塔吉克斯坦" #: src/countrycodes.cpp:222 msgid "Tokelau" msgstr "托克劳群岛" #: src/countrycodes.cpp:223 msgid "Turkmenistan" msgstr "土库曼斯坦" #: src/countrycodes.cpp:224 msgid "Tunisia" msgstr "突尼斯" #: src/countrycodes.cpp:225 msgid "Tonga" msgstr "汤加" #: src/countrycodes.cpp:226 msgid "East Timor" msgstr "东帝汶" #: src/countrycodes.cpp:227 msgid "Turkey" msgstr "土耳其" #: src/countrycodes.cpp:228 msgid "Trinidad and Tobago" msgstr "特里尼达和多巴哥" #: src/countrycodes.cpp:229 msgid "Tuvalu" msgstr "图瓦卢" #: src/countrycodes.cpp:230 msgid "Taiwan" msgstr "中国台湾" #: src/countrycodes.cpp:231 msgid "Tanzania" msgstr "坦桑尼亚" #: src/countrycodes.cpp:232 msgid "Ukraine" msgstr "乌克兰" #: src/countrycodes.cpp:233 msgid "Uganda" msgstr "乌干达" #: src/countrycodes.cpp:234 #, fuzzy msgid "United Kingdom" msgstr "英国" #: src/countrycodes.cpp:235 msgid "US Minor Outlying Islands" msgstr "美国周边岛屿" #: src/countrycodes.cpp:236 msgid "United States" msgstr "美国" #: src/countrycodes.cpp:237 msgid "Uruguay" msgstr "乌拉圭" #: src/countrycodes.cpp:238 msgid "Uzbekistan" msgstr "乌兹别克斯坦" #: src/countrycodes.cpp:239 msgid "Vatican City State (Holy See)" msgstr "梵蒂冈城国 (教廷)" #: src/countrycodes.cpp:240 msgid "Saint Vincent and The Grenadines" msgstr "圣文森特和格林纳丁斯" #: src/countrycodes.cpp:241 msgid "Venezuela" msgstr "委内瑞拉" #: src/countrycodes.cpp:242 msgid "Virgin Islands (British)" msgstr "英属维京群岛" #: src/countrycodes.cpp:243 msgid "Virgin Islands (US)" msgstr "美属维京群岛" #: src/countrycodes.cpp:244 msgid "Viet Nam" msgstr "越南" #: src/countrycodes.cpp:245 msgid "Vanuatu" msgstr "瓦努阿图" #: src/countrycodes.cpp:246 msgid "Wallis and Futuna Islands" msgstr "瓦利斯和富图群岛" #: src/countrycodes.cpp:247 msgid "Samoa" msgstr "萨摩亚" #: src/countrycodes.cpp:248 msgid "Yemen" msgstr "也门" #: src/countrycodes.cpp:249 msgid "Mayotte" msgstr "马约特" #: src/countrycodes.cpp:250 msgid "Yugoslavia" msgstr "南斯拉夫" #: src/countrycodes.cpp:251 msgid "South Africa" msgstr "南非" #: src/countrycodes.cpp:252 msgid "Zambia" msgstr "赞比亚" #: src/countrycodes.cpp:253 msgid "Zaire" msgstr "扎伊尔" #: src/countrycodes.cpp:254 msgid "Zimbabwe" msgstr "津巴布韦" #: src/countrycodes.cpp:261 msgid "(Full country name not found)" msgstr "(国家名称未找到)" #: src/crashreport.cpp:168 msgid "System informations" msgstr "系统信息" #: src/crashreport.cpp:170 msgid "Application verbose log" msgstr "应用程序详细日志" #: src/crashreport.cpp:174 msgid "Last generated spring launching script" msgstr "上一次生成的Spring启动脚本" #: src/crashreport.cpp:179 src/crashreport.cpp:186 msgid "StackTrace" msgstr "" #: src/downloader/downloadlistctrl.cpp:20 msgid "N/A" msgstr "" #: src/downloader/downloadlistctrl.cpp:220 #, fuzzy msgid "not found" msgstr "没有找到地图" #: src/downloader/downloadlistctrl.cpp:221 msgid "queued" msgstr "队列中" #: src/downloader/downloadlistctrl.cpp:222 #, fuzzy msgid "downloading" msgstr "下载" #: src/downloader/downloadlistctrl.cpp:223 #, fuzzy msgid "complete" msgstr "%c 完成" #: src/downloader/filelister/filelistctrl.cpp:40 src/mapselectdialog.cpp:256 #: src/selectusersdialog.cpp:73 src/widgets/downloadlistctrl.cpp:29 #: src/widgets/infopanel.cpp:59 msgid "Name" msgstr "名称" #: src/downloader/filelister/filelistctrl.cpp:41 #: src/hosting/battlemaptab.cpp:93 src/hosting/battleroomtab.cpp:523 #: src/hosting/battleroomtab.cpp:530 src/hosting/battleroomtab.cpp:1186 #: src/hosting/battleroomtab.cpp:1187 src/mapselectdialog.cpp:157 msgid "Size" msgstr "大小" #: src/downloader/filelister/filelistctrl.cpp:42 msgid "Type" msgstr "输入" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "Depends" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:43 msgid "has dependencies?" msgstr "" #: src/downloader/filelister/filelistctrl.cpp:173 #, fuzzy msgid "map" msgstr "地图" #: src/downloader/filelister/filelistctrl.cpp:174 #, fuzzy msgid "game" msgstr "游戏中" #: src/downloader/filelister/filelistctrl.cpp:175 src/maindownloadtab.cpp:63 msgid "unknown" msgstr "未知" #: src/downloader/filelister/filelistdialog.cpp:26 msgid "Search and download files" msgstr "搜索及下载文件" #: src/downloader/filelister/filelistdialog.cpp:30 msgid "Files displayed" msgstr "文件显示" #: src/downloader/filelister/filelistdialog.cpp:55 msgid "Download selected" msgstr "下载选定的" #: src/downloader/filelister/filelistdialog.cpp:83 #, c-format msgid "%u files displayed" msgstr "%u 文件已经显示" #: src/downloader/filelister/filelistfilter.cpp:52 #, fuzzy msgid "Filename:" msgstr "过滤名称" #: src/downloader/filelister/filelistfilter.cpp:69 #, fuzzy msgid "Filetype:" msgstr "文件" #: src/downloader/httpdownloader.cpp:72 msgid "" "\n" "successfully saved to:\n" msgstr "" "\n" "成功的被保存到:\n" #: src/downloader/httpdownloader.cpp:78 msgid "" "\n" "successfully unzipped in:\n" msgstr "" "\n" "成功的(zip)解压到:\n" #: src/downloader/httpdownloader.cpp:79 msgid "" "\n" " unzipping failed, please correct manually" msgstr "" "\n" "(zip)解压失败,请手动纠正" #: src/downloader/httpdownloader.cpp:100 msgid "Could not save\n" msgstr "无法保存\n" #: src/downloader/httpdownloader.cpp:100 msgid "" "\n" "to:\n" msgstr "" "\n" "到:\n" #: src/downloader/httpdownloader.cpp:103 msgid "" "\n" "Error number: " msgstr "" "\n" "错误号码:" #: src/downloader/prdownloader.cpp:43 #, fuzzy msgid "Download complete: " msgstr "下载完毕。" #: src/gui/notificationmanager.cpp:89 #, c-format msgid "%d more events" msgstr "" #: src/gui/pastedialog.cpp:46 msgid "Flood warning" msgstr "Flood警报" #: src/gui/pastedialog.cpp:69 msgid "Use pastebin" msgstr "" #: src/hosting/addbotdialog.cpp:32 msgid "Add bot" msgstr "添加AI" #: src/hosting/addbotdialog.cpp:44 msgid "Nickname:" msgstr "昵称:" #: src/hosting/addbotdialog.cpp:63 msgid "AI:" msgstr "AI:" #: src/hosting/addbotdialog.cpp:67 msgid "Choose the AI library to use with this bot." msgstr "选择该AI所使用的库文件。" #: src/hosting/addbotdialog.cpp:77 src/hosting/addbotdialog.cpp:87 msgid "property" msgstr "特性" #: src/hosting/addbotdialog.cpp:81 src/hosting/addbotdialog.cpp:91 msgid "value" msgstr "值" #: src/hosting/addbotdialog.cpp:117 msgid "Add Bot" msgstr "添加AI" #: src/hosting/addbotdialog.cpp:203 msgid "No AI bots found in your Spring installation." msgstr "你当前的Spring中没有AI" #: src/hosting/addbotdialog.cpp:203 msgid "No bot-libs found" msgstr "AI库文件未找到" #: src/hosting/autobalancedialog.cpp:36 msgid "Autobalance players into teams" msgstr "自动平衡队伍" #: src/hosting/autobalancedialog.cpp:39 msgid "Method" msgstr "方法" #: src/hosting/autobalancedialog.cpp:42 msgid "Divide ranks evenly" msgstr "按玩家级别平分" #: src/hosting/autobalancedialog.cpp:43 src/hosting/battlemaptab.cpp:103 #: src/hosting/battleroomtab.cpp:391 src/mmoptionswrapper.cpp:124 msgid "Random" msgstr "随机" #: src/hosting/autobalancedialog.cpp:45 msgid "Clans" msgstr "派别" #: src/hosting/autobalancedialog.cpp:48 src/hosting/hostbattledialog.cpp:177 msgid "None" msgstr "无" #: src/hosting/autobalancedialog.cpp:49 msgid "Fair" msgstr "一般" #: src/hosting/autobalancedialog.cpp:50 msgid "Always" msgstr "总是" #: src/hosting/autobalancedialog.cpp:51 msgid "" "Put members of same clan ( users having same clantag, like '[smurfzor]Alice' " "and '[smurfzor]Bob' ) together into same alliance. \n" "None: nothing special for clans.\n" "Fair: put clanmembers into alliance, unless this makes alliances unfair.\n" "Always: always put clanmembers into alliance, even if that alliance is " "unfair." msgstr "" "将同一个派别的成员(例如“[smurfzor]Alice”及“[smurfzor]Bob”)归入同一联盟。 \n" "无:同派别成员不受影响。\n" "一般:将同派别成员加入联盟,除非联盟实力悬殊。\n" "总是:总是将同派别成员归入同一联盟,无论联盟实力悬殊与否。" #: src/hosting/autobalancedialog.cpp:53 msgid "Number of allies" msgstr "同盟玩家数量" #: src/hosting/autobalancedialog.cpp:56 msgid "Auto select" msgstr "自动选取" #: src/hosting/battlemaptab.cpp:69 msgid "Select" msgstr "选择" #: src/hosting/battlemaptab.cpp:86 src/hosting/battleroomtab.cpp:279 #: src/mapselectdialog.cpp:150 msgid "Option" msgstr "选项" #: src/hosting/battlemaptab.cpp:88 src/hosting/battleroomtab.cpp:281 #: src/mapselectdialog.cpp:152 msgid "Value" msgstr "值" #: src/hosting/battlemaptab.cpp:94 src/hosting/battleroomtab.cpp:524 #: src/hosting/battleroomtab.cpp:531 src/hosting/battleroomtab.cpp:1189 #: src/hosting/battleroomtab.cpp:1190 src/mapselectdialog.cpp:158 msgid "Windspeed" msgstr "风速" #: src/hosting/battlemaptab.cpp:95 src/hosting/battleroomtab.cpp:525 #: src/hosting/battleroomtab.cpp:532 src/hosting/battleroomtab.cpp:1192 #: src/hosting/battleroomtab.cpp:1193 src/mapselectdialog.cpp:159 #: src/mapselectdialog.cpp:257 msgid "Tidal strength" msgstr "潮汐强度" #: src/hosting/battlemaptab.cpp:96 src/mapselectdialog.cpp:160 #: src/mapselectdialog.cpp:258 msgid "Gravity" msgstr "重力" #: src/hosting/battlemaptab.cpp:97 src/mapselectdialog.cpp:161 #: src/mapselectdialog.cpp:260 msgid "Extractor radius" msgstr "金属采集半径" #: src/hosting/battlemaptab.cpp:98 src/mapselectdialog.cpp:162 #: src/mapselectdialog.cpp:259 msgid "Max metal" msgstr "金属含量" #: src/hosting/battlemaptab.cpp:103 src/hosting/battleroomtab.cpp:389 #: src/mmoptionswrapper.cpp:123 msgid "Fixed" msgstr "固定位置" #: src/hosting/battlemaptab.cpp:103 msgid "Choose in game" msgstr "在游戏中选择" #: src/hosting/battlemaptab.cpp:103 msgid "Chose before game" msgstr "在游戏之前选择" #: src/hosting/battlemaptab.cpp:106 msgid "Startpositions" msgstr "出生位置" #: src/hosting/battleoptionstab.cpp:53 msgid "Unit restrictions" msgstr "单位限制" #: src/hosting/battleoptionstab.cpp:61 msgid "Allowed units" msgstr "允许单位" #: src/hosting/battleoptionstab.cpp:65 msgid "Units in this list will be available in the game." msgstr "在这个清单中的单位将在游戏中可用" #: src/hosting/battleoptionstab.cpp:77 msgid "Disable selected units." msgstr "禁止所选单位。" #: src/hosting/battleoptionstab.cpp:81 msgid "Re-enable selected units." msgstr "再次允许所选单位。" #: src/hosting/battleoptionstab.cpp:84 msgid "<<" msgstr "<<" #: src/hosting/battleoptionstab.cpp:85 msgid "Enable all units." msgstr "允许所有单位。" #: src/hosting/battleoptionstab.cpp:94 msgid "Restricted units" msgstr "限制单位" #: src/hosting/battleoptionstab.cpp:98 msgid "Units in this list will not be available in the game." msgstr "该列表中的单位将不能在游戏中使用" #: src/hosting/battleoptionstab.cpp:242 msgid "How many units of this type do you wish to allow?" msgstr "类型的单位最大数量?" #: src/hosting/battleoptionstab.cpp:242 msgid "Unit restriction" msgstr "单位限制" #: src/hosting/battleroomlistctrl.cpp:118 #: src/hosting/battleroomlistctrl.cpp:148 src/hosting/battleroomtab.cpp:148 msgid "Team" msgstr "队伍" #: src/hosting/battleroomlistctrl.cpp:121 #: src/hosting/battleroomlistctrl.cpp:157 src/hosting/battleroomtab.cpp:149 msgid "Ally" msgstr "联盟" #: src/hosting/battleroomlistctrl.cpp:124 msgid "Resource Bonus" msgstr "资源加成" #: src/hosting/battleroomlistctrl.cpp:161 src/hosting/battleroomtab.cpp:151 msgid "Side" msgstr "阵营" #: src/hosting/battleroomlistctrl.cpp:165 msgid "Set color" msgstr "设置颜色" #: src/hosting/battleroomlistctrl.cpp:170 #: src/hosting/battleroomlistctrl.cpp:441 msgid "Set Resource Bonus" msgstr "设置资源加成" #: src/hosting/battleroomlistctrl.cpp:175 #: src/hosting/battleroomlistctrl.cpp:371 #: src/hosting/battleroomlistctrl.cpp:381 src/hosting/battleroomtab.cpp:141 msgid "Spectator" msgstr "旁观者" #: src/hosting/battleroomlistctrl.cpp:180 #: src/hosting/battleroomlistctrl.cpp:375 #: src/hosting/battleroomlistctrl.cpp:386 msgid "Kick" msgstr "踢出" #: src/hosting/battleroomlistctrl.cpp:441 msgid "Please enter a value between 0 and 100" msgstr "请输入介于0与100之间的一个值" #: src/hosting/battleroomlistctrl.cpp:750 msgid "AI (bot)\n" msgstr " AI \n" #: src/hosting/battleroomlistctrl.cpp:754 msgid "Human\n" msgstr "人类\n" #: src/hosting/battleroomlistctrl.cpp:759 msgid "Spectator\n" msgstr "旁观者\n" #: src/hosting/battleroomlistctrl.cpp:763 msgid "Player\n" msgstr "玩家\n" #: src/hosting/battleroomlistctrl.cpp:768 msgid "Host\n" msgstr "主机\n" #: src/hosting/battleroomlistctrl.cpp:772 msgid "Client\n" msgstr "客户端\n" #: src/hosting/battleroomlistctrl.cpp:777 msgid "Ready\n" msgstr "准备好了\n" #: src/hosting/battleroomlistctrl.cpp:781 msgid "Not ready\n" msgstr "未就绪\n" #: src/hosting/battleroomlistctrl.cpp:786 msgid "In sync" msgstr "同步" #: src/hosting/battleroomlistctrl.cpp:790 msgid "Not in sync" msgstr "未同步" #: src/hosting/battleroomtab.cpp:134 msgid "Players with the same team number share control of their units." msgstr "拥有相同队伍编号的玩家共同控制他们的单位。" #: src/hosting/battleroomtab.cpp:136 msgid "Players with the same ally number work together to achieve victory." msgstr "拥有相同联盟编号的玩家共同协作以达到胜利。" #: src/hosting/battleroomtab.cpp:138 msgid "Select a color to identify your units in-game" msgstr "选择一个用来在游戏中识别你的单位的颜色" #: src/hosting/battleroomtab.cpp:140 msgid "Select your faction" msgstr "选择你的阵营" #: src/hosting/battleroomtab.cpp:142 msgid "Spectate (watch) the battle instead of playing" msgstr "观看此场战斗,而不是参与战斗" #: src/hosting/battleroomtab.cpp:143 #, fuzzy msgid "Auto un-spectate" msgstr "自动选取" #: src/hosting/battleroomtab.cpp:144 #, fuzzy msgid "automatically unspec when there's a free slot" msgstr "自动检查升级" #: src/hosting/battleroomtab.cpp:145 msgid "I'm ready" msgstr "我准备好了" #: src/hosting/battleroomtab.cpp:146 msgid "Click this if you are content with the battle settings." msgstr "如果你满意战斗的设置,请点击此处。 " #: src/hosting/battleroomtab.cpp:150 msgid "Color" msgstr "颜色" #: src/hosting/battleroomtab.cpp:153 msgid "Setup: " msgstr "" #: src/hosting/battleroomtab.cpp:154 msgid "Unready: 0" msgstr "" #: src/hosting/battleroomtab.cpp:164 msgid "" "A preview of the selected map. You can see the starting positions, or (if " "set) starting boxes." msgstr "" "选中地图的预览图。你可以看到出生位置,或者(如果已设置好的话)出生区域。" #: src/hosting/battleroomtab.cpp:174 #, fuzzy msgid "Host new" msgstr "建立新游戏" #: src/hosting/battleroomtab.cpp:175 #, fuzzy msgid "Host a new battle" msgstr "主建新战斗" #: src/hosting/battleroomtab.cpp:177 msgid "Leave the battle and return to the battle list" msgstr "离开战斗并返回大厅" #: src/hosting/battleroomtab.cpp:178 src/singleplayertab.cpp:105 msgid "Start" msgstr "开始" #: src/hosting/battleroomtab.cpp:179 msgid "Start the battle" msgstr "开始战斗" #: src/hosting/battleroomtab.cpp:181 msgid "Player Management" msgstr "玩家管理" #: src/hosting/battleroomtab.cpp:182 msgid "Various functions to make team games simplers to setup" msgstr "各种功能使得游戏易于设置" #: src/hosting/battleroomtab.cpp:184 msgid "Add Bot..." msgstr "添加AI..." #: src/hosting/battleroomtab.cpp:185 msgid "Add a computer-controlled player to the game" msgstr "增加一个电脑控制的玩家进入游戏" #: src/hosting/battleroomtab.cpp:186 msgid "Autolock on start" msgstr "开始后自动锁定" #: src/hosting/battleroomtab.cpp:187 msgid "" "Automatically locks the battle when the game starts and unlock when it's " "finished." msgstr "游戏开始时自动锁定,结束时自动解锁" #: src/hosting/battleroomtab.cpp:191 msgid "Prevent additional players from joining the battle" msgstr "阻止更多其他玩家进入该战斗" #: src/hosting/battleroomtab.cpp:195 msgid "Autohost" msgstr "自动架设" #: src/hosting/battleroomtab.cpp:195 msgid "" "Toggle autohost mode. This allows players to control your battle using " "commands like '!balance' and '!start'." msgstr "" "切换自动建立模式。这样玩家可以控制使用'!balance' 和 '!start'等命令自己的游戏" #: src/hosting/battleroomtab.cpp:200 #, fuzzy msgid "AutoPaste Description" msgstr "描述" #: src/hosting/battleroomtab.cpp:200 msgid "Automatically paste battle's descriptoin when a new user joins" msgstr "" #: src/hosting/battleroomtab.cpp:203 #, fuzzy msgid "AutoSpect" msgstr "自动选取" #: src/hosting/battleroomtab.cpp:203 msgid "" "Automatically spectate players that don't ready up or become synced within x " "seconds." msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "AutoControlBalance" msgstr "" #: src/hosting/battleroomtab.cpp:206 msgid "" "Automatically balance teams and allies and fix colors when all players are " "ready and synced" msgstr "" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "AutoStart" msgstr "开始" #: src/hosting/battleroomtab.cpp:209 #, fuzzy msgid "Automatically start the battle when all players are ready and synced" msgstr "游戏开始时自动锁定,结束时自动解锁" #: src/hosting/battleroomtab.cpp:213 msgid "Lock Balance" msgstr "锁定平衡" #: src/hosting/battleroomtab.cpp:213 msgid "When activated, prevents anyone but the host to change team and ally" msgstr "激活后阻止主机之外任何玩家改变队伍或盟友" #: src/hosting/battleroomtab.cpp:218 msgid "Ring unready" msgstr "" #: src/hosting/battleroomtab.cpp:218 msgid "Rings all players that don't have ready status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:220 #, fuzzy msgid "Ring unsynced" msgstr "同步" #: src/hosting/battleroomtab.cpp:220 msgid "Rings all players that don't have sync status and aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "Ring unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:222 msgid "" "Rings all players that don't have sync status or don't have ready status and " "aren't spectators" msgstr "" #: src/hosting/battleroomtab.cpp:224 #, fuzzy msgid "Ring ..." msgstr "闹铃提示" #: src/hosting/battleroomtab.cpp:227 #, fuzzy msgid "Spect unready" msgstr "未就绪" #: src/hosting/battleroomtab.cpp:227 msgid "Force to spectate all players that don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Spect unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:229 msgid "Force to spectate all players that don't have sync status" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "Force to spectate unready and unsynced" msgstr "" #: src/hosting/battleroomtab.cpp:231 msgid "" "Rings all players that don't have sync status or don't have ready status" msgstr "" #: src/hosting/battleroomtab.cpp:233 #, fuzzy msgid "Force spectate ..." msgstr "强制开始?" #: src/hosting/battleroomtab.cpp:235 msgid "Balance alliances" msgstr "平衡联盟" #: src/hosting/battleroomtab.cpp:235 msgid "Automatically balance players into two or more alliances" msgstr "自动平衡分配到两个或多个联盟" #: src/hosting/battleroomtab.cpp:238 msgid "Fix colours" msgstr "修改颜色" #: src/hosting/battleroomtab.cpp:238 msgid "Make player colors unique" msgstr "使玩家的颜色不重复" #: src/hosting/battleroomtab.cpp:241 msgid "Balance teams" msgstr "平衡队伍" #: src/hosting/battleroomtab.cpp:241 msgid "" "Automatically balance players into control teams, by default none shares " "control" msgstr "自动平衡分配到两个或多个联盟,默认不分享控制权" #: src/hosting/battleroomtab.cpp:245 msgid "Manage Presets" msgstr "管理预设" #: src/hosting/battleroomtab.cpp:251 msgid "Load battle preset" msgstr "读取战斗预设" #: src/hosting/battleroomtab.cpp:255 msgid "Save" msgstr "保存" #: src/hosting/battleroomtab.cpp:256 msgid "Save a set of options." msgstr "保存为一个配置" #: src/hosting/battleroomtab.cpp:260 src/playback/playbacktab.cpp:137 msgid "Delete" msgstr "删除" #: src/hosting/battleroomtab.cpp:261 msgid "Delete a set of options." msgstr "删除一个配置." #: src/hosting/battleroomtab.cpp:265 msgid "Set default" msgstr "设为默认" #: src/hosting/battleroomtab.cpp:266 #, fuzzy msgid "Use the current set of options as game's default." msgstr "使用现在的设定作为此mod默认" #: src/hosting/battleroomtab.cpp:276 msgid "Activate an element to quickly change it" msgstr "激活一个元素快速改变它" #: src/hosting/battleroomtab.cpp:393 msgid "Boxes" msgstr "出生区域框个数" #: src/hosting/battleroomtab.cpp:395 msgid "Pick" msgstr "挑选" #: src/hosting/battleroomtab.cpp:407 msgid "Continue" msgstr "继续" #: src/hosting/battleroomtab.cpp:409 msgid "End" msgstr "结束" #: src/hosting/battleroomtab.cpp:411 msgid "Lineage" msgstr "血统模式" #: src/hosting/battleroomtab.cpp:451 #, c-format msgid "%d way FFA" msgstr "" #: src/hosting/battleroomtab.cpp:453 #, c-format msgid "Setup: %s" msgstr "" #: src/hosting/battleroomtab.cpp:521 msgid "Map does not exist." msgstr "地图不存在。" #: src/hosting/battleroomtab.cpp:538 #, c-format msgid "Unready: %d" msgstr "" #: src/hosting/battleroomtab.cpp:619 msgid "" "Some Players are not ready yet\n" "Do you want to force start?" msgstr "" "有些玩家还没准备好。\n" "需要强制开始吗?" #: src/hosting/battleroomtab.cpp:619 msgid "Not ready" msgstr "未就绪" #: src/hosting/battleroomtab.cpp:632 msgid "Spring is already running." msgstr "" #: src/hosting/battleroomtab.cpp:634 #, fuzzy msgid "Host is not ingame." msgstr "在游戏中选择" #: src/hosting/battleroomtab.cpp:753 msgid "Enter a battle description" msgstr "" #: src/hosting/battleroomtab.cpp:753 #, fuzzy msgid "Set description" msgstr "描述" #: src/hosting/battleroomtab.cpp:774 msgid "Enter timeout before autospeccing a player in minutes" msgstr "" #: src/hosting/battleroomtab.cpp:774 #, fuzzy msgid "Set Timeout" msgstr "Ping超时!" #: src/hosting/battleroomtab.cpp:913 #, c-format msgid "%s joined your active battle" msgstr "" #: src/hosting/battleroomtab.cpp:972 msgid "Enter preset name" msgstr "输入预设名称" #: src/hosting/battleroomtab.cpp:972 msgid "" "Enter a name to save the current set of options\n" "If a preset with the same name already exist, it will be overwritten" msgstr "输入一个名称保存为当前设定,假如已经有一个同名预设存在,将被覆盖" #: src/hosting/battleroomtab.cpp:976 msgid "Cannot save an options set without a name." msgstr "无法保存一个未命名的配置" #: src/hosting/battleroomtab.cpp:976 src/ui.cpp:836 msgid "error" msgstr "错误" #: src/hosting/battleroomtab.cpp:987 src/hosting/battleroomtab.cpp:996 msgid "Pick an existing option set from the list" msgstr "从列表中选取一个现存配置" #: src/hosting/battleroomtab.cpp:987 msgid "Delete preset" msgstr "删除预设" #: src/hosting/battleroomtab.cpp:996 #, fuzzy msgid "Set game default preset" msgstr "设置为此 mod 默认预设" #: src/hosting/hostbattledialog.cpp:63 msgid "Host new battle" msgstr "主建新战斗" #: src/hosting/hostbattledialog.cpp:86 msgid "A short description of the game, this will show up in the battle list." msgstr "游戏的简短描述,这将会显示在大厅中的游戏列表中。" #: src/hosting/hostbattledialog.cpp:89 #, fuzzy msgid "Autopaste description" msgstr "描述" #: src/hosting/hostbattledialog.cpp:91 #, fuzzy msgid "Automatically write the battle description when a user joins." msgstr "游戏开始时自动锁定,结束时自动解锁" #: src/hosting/hostbattledialog.cpp:104 #, fuzzy msgid "Select the game to play." msgstr "选择游戏使用的模组。" #: src/hosting/hostbattledialog.cpp:113 #, fuzzy msgid "" "Password\n" "(no spaces)" msgstr "有密码的" #: src/hosting/hostbattledialog.cpp:118 msgid "Password needed to join game. Keep empty for no password" msgstr "加入该游戏所需要密码。保持空白表示没有密码" #: src/hosting/hostbattledialog.cpp:121 msgid "Port" msgstr "端口" #: src/hosting/hostbattledialog.cpp:126 msgid "UDP port to host game on. Default is 8452." msgstr "主建游戏所使用的UDP端口。默认为8452。" #: src/hosting/hostbattledialog.cpp:135 msgid "Use relayhost" msgstr "" #: src/hosting/hostbattledialog.cpp:136 msgid "" "host and control game on remote server, helps if you have trouble hosting" msgstr "使用远程服务器建立和控制游戏——如果有建立游戏的问题这是一个解决方案" #: src/hosting/hostbattledialog.cpp:141 msgid "Chose automatically" msgstr "" #: src/hosting/hostbattledialog.cpp:141 #, fuzzy msgid "Randomly picks an available one" msgstr "无选项可用" #: src/hosting/hostbattledialog.cpp:145 msgid "Manually enter the manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:145 msgid "You'll get prompted for the exact manager name" msgstr "" #: src/hosting/hostbattledialog.cpp:165 src/playback/playbacklistctrl.cpp:45 msgid "Number of players" msgstr "玩家数量" #: src/hosting/hostbattledialog.cpp:169 msgid "The maximum number of players to allow in the battle." msgstr "战斗中允许的最大玩家数量。" #: src/hosting/hostbattledialog.cpp:177 msgid "Hole punching" msgstr "穿孔" #: src/hosting/hostbattledialog.cpp:179 msgid "NAT traversal" msgstr "NAT穿越" #: src/hosting/hostbattledialog.cpp:185 msgid "NAT traversal to use." msgstr "使用NAT穿越。" #: src/hosting/hostbattledialog.cpp:190 #, fuzzy msgid "Rank requirement" msgstr "需要重新启动程序" #: src/hosting/hostbattledialog.cpp:192 msgid "At least" msgstr "" #: src/hosting/hostbattledialog.cpp:193 msgid "No greater than" msgstr "" #: src/hosting/hostbattledialog.cpp:195 #, fuzzy msgid "Select the type of rank enforcement." msgstr "选择游戏使用的模组。" #: src/hosting/hostbattledialog.cpp:268 msgid "Start hosting the battle." msgstr "开始主建游戏。" #: src/hosting/hostbattledialog.cpp:307 src/singleplayertab.cpp:230 #, fuzzy msgid "You have to select a game first." msgstr "你必须先选择一个模组。" #: src/hosting/hostbattledialog.cpp:307 #, fuzzy msgid "No game selected." msgstr "模组未选择。" #: src/hosting/hostbattledialog.cpp:376 msgid "Manually chose a manager" msgstr "" #: src/hosting/hostbattledialog.cpp:376 msgid "Please type the nick of the manager you want to use ( case sensitive )" msgstr "" #: src/hosting/hostbattledialog.cpp:412 msgid "" "Your using wxWidgets prior to version 2.8,\n" " port testing is not supported.\n" " Hosting may or may not work." msgstr "" "你使用的wxWidget版本比2.8早,\n" " 端口测试不支持。\n" " 可能无法主建新游戏。" #: src/hosting/hostbattledialog.cpp:419 #, c-format msgid "" "The server used for testing your port %d is unreachable. \n" "Hosting may or may not work with this setting." msgstr "" "无法连接到用来测试端口 %d 的服务器。 \n" "使用该设置可能无法主建游戏。" #: src/hosting/hostbattledialog.cpp:427 #, fuzzy, c-format msgid "" "Battle not started because the port you selected (%d) is unable to-f /home/" "kosh/.springlobby/testing.conf recieve incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "因为你选择的端口 %d 无法接收传送来的数据包,因此战斗无法开始。\n" " 请再次检查你的路由及防火墙设置,或者在对话框中修改端口号。\n" "\n" "如果上述方法依然失败,请在主建设置中启用 穿越NAT阻挡 选项。" #: src/hosting/hostbattledialog.cpp:440 #, c-format msgid "" "Battle not started because the port you selected (%d) is unable to recieve " "incoming packets\n" " checks your router & firewall configuration again or change port in the " "dialog.\n" "\n" "If everything else fails, enable the Hole Punching NAT Traversal\n" " option in the hosting settings." msgstr "" "因为你选择的端口 %d 无法接收传送来的数据包,因此战斗无法开始。\n" " 请再次检查你的路由及防火墙设置,或者在对话框中修改端口号。\n" "\n" "如果上述方法依然失败,请在主建设置中启用 穿越NAT阻挡 选项。" #: src/hosting/hostbattledialog.cpp:459 #, fuzzy msgid "Battle not started beacuse the game you selected could not be found. " msgstr "因为你选择的模组无法被找到,因此战斗无法开始。 " #: src/hosting/hostbattledialog.cpp:459 msgid "Error starting battle." msgstr "启动战斗时出错。" #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "" "Couldn't find any maps in your spring installation. This could happen when " "you set the Spring settings incorrectly." msgstr "无法找到任何地图。可能是因为您错误的设置了Spring导致的。" #: src/hosting/hostbattledialog.cpp:471 src/hosting/hostbattledialog.cpp:482 msgid "No maps found" msgstr "没有找到地图" #: src/hosting/mainjoinbattletab.cpp:57 src/mainwindow.h:200 msgid "Battleroom" msgstr "游戏房间" #: src/hosting/mainjoinbattletab.cpp:63 src/hosting/mainsingleplayertab.cpp:41 #: src/springsettings/tab_simple.cpp:134 msgid "Options" msgstr "选项" #: src/hosting/mainjoinbattletab.cpp:66 src/hosting/mainsingleplayertab.cpp:43 msgid "Unit Restrictions" msgstr "单位限制" #: src/hosting/mmoptionwindows.cpp:36 msgid "Change option" msgstr "改变选项" #: src/iconimagelist.cpp:318 msgid "Game is open." msgstr "游戏开放。" #: src/iconimagelist.cpp:319 msgid "Game is password-protected." msgstr "游戏有密码保护" #: src/iconimagelist.cpp:320 msgid "Game is full." msgstr "游戏满员。" #: src/iconimagelist.cpp:321 msgid "Game is full and password-protected." msgstr "游戏满员且密码保护。" #: src/iconimagelist.cpp:322 msgid "Game is closed." msgstr "游戏关闭。" #: src/iconimagelist.cpp:323 msgid "Game is closed and password-protected." msgstr "游戏关闭且密码保护。" #: src/iconimagelist.cpp:324 msgid "Game is closed and full." msgstr "游戏满员且关闭。" #: src/iconimagelist.cpp:325 msgid "Game is closed, full and password-protected." msgstr "游戏关闭、满员且密码保护。" #: src/iconimagelist.cpp:326 msgid "Game is in progress." msgstr "游戏进行中" #: src/iconimagelist.cpp:327 msgid "Game is in progress and password-protected." msgstr "游戏进行中且密码保护。" #: src/iconimagelist.cpp:328 msgid "Game is in progress and full." msgstr "游戏进行中(满员)" #: src/iconimagelist.cpp:329 msgid "Game is in progress, full and password-protected." msgstr "游戏进行中,满员且密码保护。" #: src/iconimagelist.cpp:330 msgid "Game is in progress and closed." msgstr "游戏进行中(关闭)" #: src/iconimagelist.cpp:331 msgid "Game is in progress, closed and password-protected." msgstr "游戏进行中,关闭且密码保护。" #: src/iconimagelist.cpp:332 msgid "Game is in progress, closed and full." msgstr "游戏进行中,关闭且满员。" #: src/iconimagelist.cpp:333 msgid "Game is in progress, closed, full and password-protected." msgstr "游戏进行中,关闭、满员且密码保护。" #: src/infodialog.cpp:49 msgid "path shit" msgstr "" #: src/introguide.cpp:37 #, fuzzy msgid "Newbies guide" msgstr "新手" #: src/introguide.cpp:39 msgid "" "Spring is just an engine, alone it won't do much, games are games that run " "on the engine.\n" msgstr "" #: src/introguide.cpp:40 msgid "" "You will need to install at least a map and a game in order to play.\n" "\n" msgstr "" #: src/introguide.cpp:41 msgid "" "As a user, you can extend functionality downloading small scripts (LuaUI " "Widgets) and activate them ingame trough the F11-button list.\n" "\n" msgstr "" #: src/introguide.cpp:42 msgid "" "For players with previous RTS experience, one tricky part of spring is that " "fog of war is present, but not visualized by default ingame until you press " "the \"L\" button.\n" "\n" msgstr "" #: src/introguide.cpp:43 msgid "" "For developers, spring is highly customizable, with a scripting engine, " "you'd want to check out the forum/wiki to get started.\n" msgstr "" #: src/introguide.cpp:45 msgid "" "If you skip the automatic content installer for some reason, you can still " "download and install content manually.\n" msgstr "" #: src/introguide.cpp:46 msgid "The most popular download site is http://www.springfiles.com .\n" msgstr "" #: src/introguide.cpp:47 msgid "" "The installation directory, differs according to the operative system:\n" msgstr "" #: src/introguide.cpp:48 msgid "Windows XP: Spring's installation path.\n" msgstr "" #: src/introguide.cpp:49 msgid "" "Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This " "folder is default insibie, change your file manager settings to display " "it).\n" msgstr "" #: src/introguide.cpp:50 msgid "" "Linux: ~/.spring (this folder is default invisible, you might want to create " "a visible link using \"ln -s ~/.spring ~/spring\").\n" msgstr "" #: src/introguide.cpp:51 msgid "" "As obvious as it could be, maps belong to the maps subdirectory, games to " "the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n" "\n" msgstr "" #: src/introguide.cpp:52 msgid "" "In order for the lobby to detect correctly a freshly installed map/game, " "you'll need to trigger a refresh, to do it click on tools->Reload map/game " "list." msgstr "" #: src/introguide.cpp:53 msgid "Select in order, first the game, then the map.\n" msgstr "" #: src/introguide.cpp:54 msgid "" "You'll need to add at least one bot to play, if the game ship it's own AI, " "it's highly recommended to use that since bots are not compatible with all " "games.\n" msgstr "" #: src/introguide.cpp:55 msgid "" "You can drag both the bot and yourself(the sun icon) anywhere, map's default " "start positions will snap on.\n" msgstr "" #: src/introguide.cpp:56 msgid "" "You can change alliances (same number equals to allied players) and color by " "hovering the icon.\n" msgstr "" #: src/introguide.cpp:57 msgid "" "Bonus number is a resource multiplier bonus, if the bot feels too weak, try " "increasing the number on the bot or add more of them, if it feels too " "strong, do on yourself.\n" msgstr "" #: src/introguide.cpp:58 msgid "" "EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE " "THERE, EXPLORE THE WHOLE MAP TO FIND IT." msgstr "" #: src/introguide.cpp:59 msgid "The lobby has an irc-like chat for talk and a battlelist\n" msgstr "" #: src/introguide.cpp:60 msgid "You can get a list of available chat commands using /help\n" msgstr "" #: src/introguide.cpp:61 msgid "" "Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is " "actually considered rude if you don't specify your problem.\n" msgstr "" #: src/introguide.cpp:62 msgid "" "It's also highly recommended to avoid asking questions such as \"what is the " "best game\" since it's a very touchy subject for many players.\n" msgstr "" #: src/introguide.cpp:63 msgid "" "In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, " "older or newer or development versions won't work.\n" "\n" "\n" msgstr "" #: src/introguide.cpp:64 #, fuzzy msgid "Joining a battle:\n" msgstr "加入同一战斗" #: src/introguide.cpp:65 msgid "" "In order to join a battle, simply double click on it on the list, and the " "lobby will prompt you for downloading the necessary files.\n" msgstr "" #: src/introguide.cpp:66 msgid "" "When you are in a battleroom, focus your attention to the middle bar on the " "the screen.\n" msgstr "" #: src/introguide.cpp:67 msgid "" "When two or more players have the same team number, they will share controls " "(also referred as comshare or coop).\n" msgstr "" #: src/introguide.cpp:68 msgid "" "When two or more players have the same ally number, they will be allied " "together.\n" msgstr "" #: src/introguide.cpp:69 msgid "" "The host has possibility to override your values anytime with the exception " "of spectator.\n" msgstr "" #: src/introguide.cpp:70 msgid "" "If you are not a spectator, you will have to press the ready button once " "you're ready to play." msgstr "" #: src/introguide.cpp:71 msgid "" "The unsynced status (the ! status icon) appears when you lack the map or the " "game, or they are corrupted, you might need a list refresh to update them " "(tools->reload map/game list).\n" msgstr "" #: src/introguide.cpp:72 msgid "" "If you are insecure about the gameplay of a game, it's suggested that you " "activate the spectator button at first, so you'll be able to observe other " "players to learn.\n" msgstr "" #: src/introguide.cpp:73 msgid "" "The game will start when the host decides so, just sit down and wait (don't " "forget to press ready).\n" msgstr "" #: src/introguide.cpp:74 msgid "" "Some hosts are automatically controlled (autohosts), they can be controlled " "trough a list of chat commands ( for the list, send !help in the chat).\n" "\n" "\n" msgstr "" #: src/introguide.cpp:75 #, fuzzy msgid "Hosting a battle:\n" msgstr "主建新战斗" #: src/introguide.cpp:76 msgid "" "Almost the totality of the options in the hosting dialog cannot be changed " "without reopening the battle (sorry this won't change' in the foreseeable " "future).\n" msgstr "" #: src/introguide.cpp:77 msgid "" "You'll need to open the port indicated in the hosting dialog (default: " "8452), type: UDP in your firewall/router in order to let other players to " "join your game.\n" msgstr "" #: src/introguide.cpp:78 msgid "" "Alternatively, you can enable the option \"Hole punching\"(not recommended) " "which uses a small hack to bypass the firewall, but it might not work for " "all the firewalls/routers, and it might not work for all the clients.\n" msgstr "" #: src/introguide.cpp:79 msgid "" "More recommended instead, is to use the option \"Use Relayhost\", which will " "spawn a bot that your lobby will control, the bot will host for you " "instead.\n" msgstr "" #: src/introguide.cpp:80 msgid "" "Most of the graphic-related problems come from old or bad video drivers.\n" msgstr "" #: src/introguide.cpp:81 msgid "" "Before considering \"But XYZ game works fine!\", remember that most games on " "Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is " "rather large, and certain bugs appear only with very specific conditions.\n" msgstr "" #: src/introguide.cpp:82 msgid "" "That being said, the first thing you should do open the Spring settings " "editor, and lower the graphic detail, some video cards don't work well with " "some advanced options.\n" msgstr "" #: src/introguide.cpp:83 msgid "" "If the problem persists, try to update your video drivers to the latest " "version (as weird as it may sound, ATI users might actually want to try " "older versions too, see the forums for an explanation).\n" msgstr "" #: src/introguide.cpp:84 msgid "" "If your map/gameels are white or generally untextured, and you're using " "Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?" "f=20&t=20809.\n" "\n" msgstr "" #: src/introguide.cpp:85 msgid "" "If you're using an integrated card, chances are you're simply unable to run " "smoothly Spring, because of the high requirements which those chips can't " "provide.\n" "\n" msgstr "" #: src/introguide.cpp:86 msgid "" "For further help, visit the help section of the forums at http://springrts." "com ." msgstr "" #: src/introguide.cpp:87 msgid "Main website: http://springrts.com\n" msgstr "" #: src/introguide.cpp:88 msgid "Lobby website: http://springlobby.info\n" msgstr "" #: src/introguide.cpp:89 msgid "Games page: http://springrts.com/wiki/Games\n" msgstr "" #: src/introguide.cpp:90 msgid "General info website: http://springinfo.info\n" msgstr "" #: src/introguide.cpp:91 msgid "Wiki: http://springrts.com/wiki\n" msgstr "" #: src/introguide.cpp:92 msgid "Frequently Asked Questions: http://springrts.com/wiki/FAQ\n" msgstr "" #: src/introguide.cpp:93 msgid "Development infos: http://springrts.com/wiki/Engine_Development\n" msgstr "" #: src/introguide.cpp:100 msgid "" "Introduction to Spring and Frequently Asked Questions\n" "It's HIGHLY recommended you read this through completely.\n" "Click on a button to view the topic." msgstr "" #: src/introguide.cpp:107 #, fuzzy msgid "Spring overview" msgstr "Spring 版本" #: src/introguide.cpp:108 msgid "Installing content" msgstr "" #: src/introguide.cpp:109 #, fuzzy msgid "Singleplayer gamee" msgstr "单人游戏" #: src/introguide.cpp:110 #, fuzzy msgid "Multiplayer gamee" msgstr "多人游戏" #: src/introguide.cpp:111 msgid "Graphic and performance problems" msgstr "" #: src/introguide.cpp:112 msgid "Useful links" msgstr "" #: src/lsl/src/lslunitsync/nonportable.h:10 src/nonportable.h:12 msgid "Any file (*)|*" msgstr "所有文件 (*)|*" #: src/lsl/src/lslunitsync/nonportable.h:16 src/nonportable.h:18 msgid "App Bundles (*.app)|*.app|Any File (*.*)|*.*" msgstr "程序包 (*.app)|*.app|所有文件 (*.*)|*.*" #: src/mainchattab.cpp:182 src/mainchattab.cpp:186 msgid "Disconnected from server, chat closed." msgstr "从服务器端断开,交谈关闭" #: src/maindownloadtab.cpp:49 msgid "Transfers in progress: " msgstr "正在传输中: " #: src/maindownloadtab.cpp:54 msgid "Download statistics/control currently not available." msgstr "" #: src/maindownloadtab.cpp:57 msgid "Total Incoming: " msgstr "总共下载: " #: src/maindownloadtab.cpp:70 msgid "Cancel Download" msgstr "取消下载" #: src/maindownloadtab.cpp:73 msgid "Clear finished" msgstr "" #: src/maindownloadtab.cpp:129 msgid "Lua widget downloader" msgstr "Lua widget —界面插件下载管理" #: src/mainwindow.cpp:136 msgid "&Connect..." msgstr "(&C) 连接..." #: src/mainwindow.cpp:137 msgid "&Disconnect" msgstr "(&D) 断开" #: src/mainwindow.cpp:138 msgid "&Reopen server panel" msgstr "" #: src/mainwindow.cpp:142 msgid "&Save options" msgstr "(&S) 保存选项" #: src/mainwindow.cpp:145 msgid "&Quit" msgstr "(&Q) 退出" #: src/mainwindow.cpp:148 #, fuzzy msgid "&Autojoin channels" msgstr "(&A) 自动加入频道" #: src/mainwindow.cpp:149 msgid "&Preferences" msgstr "" #: src/mainwindow.cpp:150 #, fuzzy msgid "&Spring settings" msgstr "Spring设置" #: src/mainwindow.cpp:156 #, fuzzy msgid "&Save layout" msgstr "(&S) 保存选项" #: src/mainwindow.cpp:157 msgid "&Load layout" msgstr "" #: src/mainwindow.cpp:158 msgid "&Reset layout" msgstr "" #: src/mainwindow.cpp:163 msgid "&Join channel..." msgstr "(&J) 加入频道..." #: src/mainwindow.cpp:164 msgid "Channel &list" msgstr "(&L) 频道列表" #: src/mainwindow.cpp:165 msgid "Open private &chat..." msgstr "(&C) 打开私人聊天..." #: src/mainwindow.cpp:166 #, fuzzy msgid "Change &username" msgstr "频道信息" #: src/mainwindow.cpp:167 msgid "&View screenshots" msgstr "(&V) 察看截图" #: src/mainwindow.cpp:169 #, fuzzy msgid "&Reload maps/games" msgstr "(&R) 重新载入地图/模组" #: src/mainwindow.cpp:173 msgid "Check for new Version" msgstr "检查新版本" #: src/mainwindow.cpp:176 msgid "&Help, tutorial and FAQ" msgstr "" #: src/mainwindow.cpp:177 msgid "&About" msgstr "(&A) 关于" #: src/mainwindow.cpp:178 #, fuzzy msgid "&System Info" msgstr "系统信息" #: src/mainwindow.cpp:179 msgid "&Change language" msgstr "(&C) 选择语言" #: src/mainwindow.cpp:180 msgid "&Report a bug..." msgstr "(&R) 报告一个Bug..." #: src/mainwindow.cpp:181 msgid "&Documentation" msgstr "(&D) 文档" #: src/mainwindow.cpp:184 #, fuzzy msgid "&Server" msgstr "服务器" #: src/mainwindow.cpp:185 msgid "&Edit" msgstr "" #: src/mainwindow.cpp:187 msgid "&View" msgstr "" #: src/mainwindow.cpp:189 msgid "&Tools" msgstr "工具(&T)" #: src/mainwindow.cpp:190 msgid "&Help" msgstr "帮助(&H)" #: src/mainwindow.cpp:500 #, fuzzy msgid "You need to be connected to a server to view the channel list" msgstr "您需要连接到服务器察看频道列表" #: src/mainwindow.cpp:500 msgid "Not connected" msgstr "未连接" #: src/mainwindow.cpp:514 msgid "Join channel..." msgstr "加入频道..." #: src/mainwindow.cpp:514 msgid "Name of channel to join" msgstr "加入频道的名称" #: src/mainwindow.cpp:526 msgid "Open Private Chat..." msgstr "打开私聊..." #: src/mainwindow.cpp:526 msgid "Name of user" msgstr "用户名" #: src/mainwindow.cpp:540 #, fuzzy, c-format msgid "%s is a cross-plattform lobby client for the Spring RTS engine" msgstr "SpringLobby 是一个供RTS Spring 引擎使用的跨平台游戏大厅客户端" #: src/mainwindow.cpp:554 msgid "The numerous contributors from launchpad.net" msgstr "" #: src/mainwindow.cpp:602 msgid "There were no screenshots found in your spring data directory." msgstr "在您的Spring数据目录没有发现截图" #: src/mainwindow.cpp:602 msgid "No files found" msgstr "没有找到文件" #: src/mainwindow.cpp:656 #, fuzzy, c-format msgid "You need to restart %s for the language change to take effect." msgstr "您需要重新启动SpringLobby以便改变界面语言" #: src/mainwindow.cpp:657 msgid "Restart required" msgstr "需要重新启动程序" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 src/mainwindow.cpp:703 msgid "Layout manager" msgstr "登出管理" #: src/mainwindow.cpp:689 src/mainwindow.cpp:694 msgid "Enter a profile name" msgstr "输入档案名称" #: src/mainwindow.cpp:692 #, fuzzy msgid "This profile is write protected, please choose another name" msgstr "这个战斗有密码保护,请输入密码。" #: src/mainwindow.cpp:703 #, fuzzy msgid "Which profile do you want to load?" msgstr "您要使用哪个档案?" #: src/mainwindow.cpp:714 #, c-format msgid "Please restart %s now" msgstr "" #: src/mainwindow.cpp:767 #, fuzzy msgid "Rename" msgstr "重命名.." #: src/mainwindow.cpp:767 #, fuzzy msgid "Enter new nickname" msgstr "输入名称" #: src/mainwindow.h:198 src/options/mainoptionstab.cpp:70 msgid "Chat" msgstr "聊天" #: src/mainwindow.h:199 #, fuzzy msgid "Battlelist" msgstr "游戏列表" #: src/mainwindow.h:201 msgid "Singleplayer" msgstr "单人游戏" #: src/mainwindow.h:203 msgid "Replays" msgstr "回放" #: src/mainwindow.h:204 src/options/mainoptionstab.cpp:67 #: src/widgets/downloadlistctrl.cpp:32 msgid "Downloads" msgstr "下载" #: src/mapctrl.cpp:588 #, c-format msgid "Metal: %.1f%%" msgstr "金属: %.1f%%" #: src/mapctrl.cpp:694 src/mapctrl.cpp:695 msgid "Refresh" msgstr "刷新" #: src/mapctrl.cpp:696 src/mapctrl.cpp:697 src/widgets/infopanel.cpp:91 msgid "Download" msgstr "下载" #: src/mapctrl.cpp:897 msgid "side:" msgstr "阵营:" #: src/mapctrl.cpp:910 #, c-format msgid "ally: %d" msgstr "联盟:%d" #: src/mapctrl.cpp:921 #, c-format msgid "bonus: %d%%" msgstr "加成:%d%%" #: src/mapselectdialog.cpp:68 msgid "Select map (click and drag to scroll)" msgstr "选择地图 (点击并托拽)" #: src/mapselectdialog.cpp:71 msgid "Vertical sort key" msgstr "垂直清理键" #: src/mapselectdialog.cpp:77 msgid "Horizontal sort key" msgstr "水平清理键" #: src/mapselectdialog.cpp:83 msgid "Show" msgstr "显示" #: src/mapselectdialog.cpp:84 msgid "All maps" msgstr "全部地图" #: src/mapselectdialog.cpp:85 msgid "Shows all available maps" msgstr "显示全部可用地图" #: src/mapselectdialog.cpp:87 msgid "Popular maps" msgstr "常用地图" #: src/mapselectdialog.cpp:88 msgid "" "Shows only maps which are currently being player on the server. You must be " "online to use this." msgstr "仅仅显示有玩家在服务器的地图,您必须在线才可以使用。" #: src/mapselectdialog.cpp:90 msgid "Recently played maps" msgstr "最近玩过的地图" #: src/mapselectdialog.cpp:92 msgid "Shows only maps you played recently. (Based on your replays.)" msgstr "仅仅显示您最近玩的地图。(基于您的回放)" #: src/mapselectdialog.cpp:95 msgid "Filter" msgstr "过滤" #: src/mapselectdialog.cpp:97 msgid "Shows only maps which contain this text in their name or description." msgstr "仅仅显示名称或描述中包含此文字的地图" #: src/mapselectdialog.cpp:100 msgid "Map details" msgstr "地图细节" #: src/mapselectdialog.cpp:163 msgid "Start positions" msgstr "起始位置" #: src/mapselectdialog.cpp:261 msgid "Minimum wind" msgstr "最低风力" #: src/mapselectdialog.cpp:262 msgid "Maximum wind" msgstr "最大风力" #: src/mapselectdialog.cpp:263 msgid "Average wind" msgstr "平均风力" #: src/mapselectdialog.cpp:264 msgid "Size (map area)" msgstr "尺寸(地图范围)" #: src/mapselectdialog.cpp:265 msgid "Aspect ratio" msgstr "方向性比例" #: src/mapselectdialog.cpp:266 msgid "Number of start positions" msgstr "起始位置数量" #: src/mmoptionswrapper.cpp:122 msgid "Start Position Type" msgstr "出生位置类型" #: src/mmoptionswrapper.cpp:122 #, fuzzy msgid "" "How players will select where to be spawned in the map\n" "0: fixed map positions\n" "1: random map positions\n" "2: choose in game\n" "3: choose in the lobby before starting" msgstr "" "玩家如何选择出生点?\n" "0:固定的出生点\n" "1:随机的出生点\n" "2:在游戏中选择\n" "3:游戏开始前在大厅中选择" #: src/mmoptionswrapper.cpp:125 #, fuzzy msgid "Choose in-game" msgstr "在游戏中选择" #: src/mmoptionswrapper.cpp:126 #, fuzzy msgid "Choose before game" msgstr "在游戏之前选择" #: src/mmoptionswrapper.cpp:132 msgid "List of restricted units" msgstr "限制单位列表" #: src/mmoptionswrapper.cpp:133 msgid "Map name" msgstr "地图名称" #: src/nicklistctrl.cpp:59 msgid "s" msgstr "状态" #: src/nicklistctrl.cpp:60 msgid "c" msgstr "国家/地区" #: src/nicklistctrl.cpp:61 msgid "r" msgstr "级别" #: src/nonportable.h:6 msgid "Executables (*.exe)|*.exe|Any File (*.*)|*.*" msgstr "程序文件 (*.exe)|*.exe|所有文件 (*.*)|*.*" #: src/options/chatoptionstab.cpp:72 msgid "Colors and font" msgstr "颜色与字体" #: src/options/chatoptionstab.cpp:77 msgid "Use system colors" msgstr "使用系统颜色" #: src/options/chatoptionstab.cpp:103 msgid "Normal" msgstr "普通" #: src/options/chatoptionstab.cpp:117 msgid "Background" msgstr "背景" #: src/options/chatoptionstab.cpp:131 msgid "Action" msgstr "动作" #: src/options/chatoptionstab.cpp:145 src/options/groupoptionspanel.cpp:125 msgid "Highlight" msgstr "高亮显示" #: src/options/chatoptionstab.cpp:159 msgid "Join/Leave" msgstr "加入/离开" #: src/options/chatoptionstab.cpp:173 msgid "My messages" msgstr "我的消息" #: src/options/chatoptionstab.cpp:206 msgid "Client" msgstr "客户端" #: src/options/chatoptionstab.cpp:234 msgid "Timestamp" msgstr "时间戳" #: src/options/chatoptionstab.cpp:248 msgid "Notification" msgstr "通知" #: src/options/chatoptionstab.cpp:258 msgid "" "[19:35] ** Server ** Connected to Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" msgstr "" "[19:35] ** Server ** Connected to TAS Server.\n" "[22:30] hi everyone\n" "[22:30] ** Dude2 joined the channel.\n" "[22:30] * Dude2 thinks his colors looks nice\n" "[22:45] Dude2: orl?\n" "[22:46] But could be better, should tweak them some more...\n" #: src/options/chatoptionstab.cpp:269 msgid "Font:" msgstr "字体:" #: src/options/chatoptionstab.cpp:273 msgid "default" msgstr "默认" #: src/options/chatoptionstab.cpp:277 msgid "Select..." msgstr "选择..." #: src/options/chatoptionstab.cpp:288 msgid "Behavior" msgstr "行为" #: src/options/chatoptionstab.cpp:290 msgid "Enable Irc colors in chat messages" msgstr "在信息中开启IRC色彩" #: src/options/chatoptionstab.cpp:295 msgid "Play notification sounds" msgstr "播放通知声音" #: src/options/chatoptionstab.cpp:300 #, fuzzy msgid "Copy server messages in current channel" msgstr " \"/part\" - 离开当前频道。" #: src/options/chatoptionstab.cpp:310 msgid "Chat logs" msgstr "聊天日志" #: src/options/chatoptionstab.cpp:313 msgid "Save chat logs" msgstr "保存聊天记录" #: src/options/chatoptionstab.cpp:320 msgid "approx. number of lines loaded from log into chat" msgstr "" #: src/options/chatoptionstab.cpp:328 msgid "Highlight words" msgstr "高亮文本" #: src/options/chatoptionstab.cpp:330 msgid "Words to highlight in chat:" msgstr "聊天中高亮显示字:" #: src/options/chatoptionstab.cpp:339 msgid "enter a ; seperated list" msgstr "输入一个由 ; 分隔开的列表" #: src/options/chatoptionstab.cpp:343 msgid "Additionally play sound/flash titlebar " msgstr "额外的播放声音/闪烁标题栏 " #: src/options/downloadoptionspanel.cpp:35 msgid "At game start suspend mode" msgstr "游戏开始时自动暂停" #: src/options/downloadoptionspanel.cpp:37 msgid "Pause all torrents" msgstr "暂停所有Torrent" #: src/options/downloadoptionspanel.cpp:38 msgid "Throttle speeds:" msgstr "调节速度:" #: src/options/downloadoptionspanel.cpp:41 msgid "upload (KB/s)" msgstr "上传(KB/s)" #: src/options/downloadoptionspanel.cpp:43 msgid "download (KB/s)" msgstr "下载(KB/s)" #: src/options/downloadoptionspanel.cpp:56 msgid "Numbers" msgstr "数字" #: src/options/downloadoptionspanel.cpp:60 msgid "maximum upload speed in KB/sec(-1 for infinite)" msgstr "最大上传速度(KB/s),-1代表无上限" #: src/options/downloadoptionspanel.cpp:67 msgid "maximum download speed in KB/sec (-1 for infinite)" msgstr "最大下载速度(KB/s),-1代表无上限" #: src/options/downloadoptionspanel.cpp:74 msgid "port used for torrent connections" msgstr "Torrent连接端口" #: src/options/downloadoptionspanel.cpp:81 msgid "maximum number of concurrent connections" msgstr "最大同时连接数量" #: src/options/groupoptionspanel.cpp:55 src/options/groupoptionspanel.cpp:168 #: src/widgets/infopanel.cpp:93 msgid "Remove" msgstr "移除" #: src/options/groupoptionspanel.cpp:57 msgid "Remove an existing group" msgstr "移除一个现存的组" #: src/options/groupoptionspanel.cpp:61 msgid "Rename.." msgstr "重命名.." #: src/options/groupoptionspanel.cpp:63 msgid "Rename an existing group" msgstr "重命名一个现存的组" #: src/options/groupoptionspanel.cpp:70 msgid "Add New.." msgstr "添加新的.." #: src/options/groupoptionspanel.cpp:71 msgid "Add new group" msgstr "添加组" #: src/options/groupoptionspanel.cpp:84 msgid "Group Actions" msgstr "组行为" #: src/options/groupoptionspanel.cpp:89 msgid "Notify login/logout" msgstr "提示登陆/登出" #: src/options/groupoptionspanel.cpp:91 msgid "Notify when users of this group go online or offline" msgstr "在此组用户上线或离线时通知" #: src/options/groupoptionspanel.cpp:95 msgid "Ignore Chat" msgstr "忽略聊天信息" #: src/options/groupoptionspanel.cpp:97 msgid "Ignore anything said in channel by any of the users in this group" msgstr "忽略任何此分组内用户在频道发出的言语" #: src/options/groupoptionspanel.cpp:101 msgid "Notify Hosted Battles" msgstr "通知新架设的游戏" #: src/options/groupoptionspanel.cpp:103 msgid "Notify when users of this group hosts a battle" msgstr "当此分组的用户建立游戏时提示" #: src/options/groupoptionspanel.cpp:107 src/springlobbyapp.cpp:519 #: src/springlobbyapp.cpp:520 msgid "Ignore PM" msgstr "忽略私人信息" #: src/options/groupoptionspanel.cpp:109 msgid "Ignore anything said in private chat by any of the users in this group" msgstr "忽略任何此分组内用户发出的非公共信息" #: src/options/groupoptionspanel.cpp:113 msgid "Notify Status Change" msgstr "提示状态改变" #: src/options/groupoptionspanel.cpp:115 msgid "Notify when the status of a users in this group changes" msgstr "当此分组内用户状态改变时提示" #: src/options/groupoptionspanel.cpp:119 msgid "Autokick" msgstr "自动踢出" #: src/options/groupoptionspanel.cpp:121 msgid "Auto kick any of the users in this group from battles hosted" msgstr "建立的游戏中自动踢出此分组内的用户" #: src/options/groupoptionspanel.cpp:127 msgid "Highlight battles and the names of users in this group" msgstr "高亮战斗和此组中的玩家名称" #: src/options/groupoptionspanel.cpp:134 msgid "Highlight Color" msgstr "高亮色彩" #: src/options/groupoptionspanel.cpp:139 src/options/groupoptionspanel.cpp:141 msgid "Select highlight color" msgstr "选择高亮色彩" #: src/options/groupoptionspanel.cpp:152 msgid "Users in group" msgstr "组中的用户" #: src/options/groupoptionspanel.cpp:163 msgid "Add.." msgstr "添加.." #: src/options/groupoptionspanel.cpp:164 msgid "Add users to group" msgstr "添加用户到组" #: src/options/groupoptionspanel.cpp:170 msgid "Remove users from group" msgstr "从组中移除用户" #: src/options/groupoptionspanel.cpp:264 msgid "Name of new group:" msgstr "新租的名称:" #: src/options/groupoptionspanel.cpp:264 msgid "Add New Group" msgstr "添加新组" #: src/options/lobbyoptionstab.cpp:45 src/options/lobbyoptionstab.cpp:46 msgid "Web Browser" msgstr "网络浏览器" #: src/options/lobbyoptionstab.cpp:48 msgid "Default Browser." msgstr "默认浏览器。" #: src/options/lobbyoptionstab.cpp:50 msgid "Use your system-wide browser preference" msgstr "使用你的系统浏览器设置" #: src/options/lobbyoptionstab.cpp:52 msgid "Specify:" msgstr "自定义:" #: src/options/lobbyoptionstab.cpp:53 msgid "Specify the web browser you want to use" msgstr "自定义你想要使用的浏览器" #: src/options/lobbyoptionstab.cpp:57 src/options/lobbyoptionstab.cpp:79 #: src/options/springoptionstab.cpp:83 src/options/springoptionstab.cpp:93 #: src/options/springoptionstab.cpp:103 #: src/springsettings/panel_pathoption.cpp:42 msgid "Browse" msgstr "浏览" #: src/options/lobbyoptionstab.cpp:58 msgid "Use a file dialog to find the web browser" msgstr "使用一个文件对话框来查找网络浏览器" #: src/options/lobbyoptionstab.cpp:74 msgid "External text editor" msgstr "" #: src/options/lobbyoptionstab.cpp:75 msgid "Path" msgstr "" #: src/options/lobbyoptionstab.cpp:80 #, fuzzy msgid "Use a file dialog to find the editor binary" msgstr "使用一个文件对话框来查找网络浏览器" #: src/options/lobbyoptionstab.cpp:91 msgid "Autoconnect" msgstr "自动连接" #: src/options/lobbyoptionstab.cpp:94 #, fuzzy, c-format msgid "If checked, %s will automatically log on to the last used server" msgstr "选中则SpringLobby自动连接到上次使用的服务器" #: src/options/lobbyoptionstab.cpp:96 msgid "Autoconnect on lobby start" msgstr "SpringLobby启动后自动连接" #: src/options/lobbyoptionstab.cpp:101 msgid "Report statistics" msgstr "报告统计信息" #: src/options/lobbyoptionstab.cpp:104 #, fuzzy, c-format msgid "" "By default %s will send some statistics (OS,lobby version) to server,\n" "to both make helping you in case of problems easier and inform of critical " "updates.\n" "Uncheck to disable." msgstr "" "默认情况下SpringLobby会发送数据(操作系统,SpringLobby版本)到服务器\n" "这样可以帮助判断错误和提醒重要更新\n" "不建议禁止" #: src/options/lobbyoptionstab.cpp:106 msgid "report statistics" msgstr "报告统计信息" #: src/options/lobbyoptionstab.cpp:117 msgid "Automatic updates" msgstr "自动升级" #: src/options/lobbyoptionstab.cpp:120 #, fuzzy, c-format msgid "" "%s can check at startup if a newer version is available and automatically " "download it for you." msgstr "SpringLobby可以在启动时检查新版本,并自动下载" #: src/options/lobbyoptionstab.cpp:122 msgid "automatically check for updates" msgstr "自动检查升级" #: src/options/lobbyoptionstab.cpp:130 msgid "Tooltips" msgstr "工具提示" #: src/options/lobbyoptionstab.cpp:131 msgid "Show Tooltips?" msgstr "显示工具提示?" #: src/options/lobbyoptionstab.cpp:134 #, fuzzy, c-format msgid "Requires %s restart to take effect." msgstr "需要SpringLobby重新启动生效。" #: src/options/lobbyoptionstab.cpp:141 msgid "Tab completion method" msgstr "Tab 补齐方式" #: src/options/lobbyoptionstab.cpp:142 msgid "" "\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein " "distance" msgstr "" "\"精确匹配\" 会自动完成一个词——只有一个匹配的情况下。\n" "\"匹配最接近的\"选择编辑距离最近的一项" #: src/options/lobbyoptionstab.cpp:144 msgid "Match exact" msgstr "精确匹配" #: src/options/lobbyoptionstab.cpp:145 msgid "Match nearest" msgstr "匹配最接近的" #: src/options/lobbyoptionstab.cpp:154 msgid "Misc GUI" msgstr "" #: src/options/lobbyoptionstab.cpp:155 msgid "Show big icons in mainwindow tabs?" msgstr "在主窗口标签页显示大图标?" #: src/options/lobbyoptionstab.cpp:158 #, fuzzy msgid "Use notification popups?" msgstr "播放通知声音" #: src/options/lobbyoptionstab.cpp:161 msgid "Screen position for notification popups" msgstr "" #: src/options/lobbyoptionstab.cpp:168 #, fuzzy msgid "Display time for popup notifications in seconds" msgstr "播放通知声音" #: src/options/lobbyoptionstab.cpp:174 msgid "Show close button on all tabs? (needs restart to take effect)" msgstr "" #: src/options/lobbyoptionstab.cpp:179 msgid "Start tab" msgstr "初始标签页" #: src/options/lobbyoptionstab.cpp:182 msgid "Select which tab to show at startup" msgstr "选择启动时显示的标签页" #: src/options/lobbyoptionstab.cpp:276 msgid "Choose a web browser executable" msgstr "选择一个网络浏览器执行文件" #: src/options/lobbyoptionstab.cpp:282 #, fuzzy msgid "Choose a editor browser executable" msgstr "选择一个网络浏览器执行文件" #: src/options/mainoptionstab.cpp:64 msgid "Spring" msgstr "Spring" #: src/options/mainoptionstab.cpp:73 msgid "General" msgstr "通用" #: src/options/mainoptionstab.cpp:76 msgid "Groups" msgstr "组" #: src/options/mainoptionstab.cpp:78 msgid "Restore" msgstr "恢复" #: src/options/mainoptionstab.cpp:79 msgid "Apply" msgstr "应用" #: src/options/mainoptionstab.cpp:156 #, c-format msgid "%s Preferences" msgstr "" #: src/options/springoptionstab.cpp:64 msgid "Search only in current installed path" msgstr "仅仅搜索现在安装的路径" #: src/options/springoptionstab.cpp:66 msgid "" "Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE " "DOING)" msgstr "" #: src/options/springoptionstab.cpp:68 msgid "Use the Spring version in the current bundle" msgstr "" #: src/options/springoptionstab.cpp:79 msgid "Spring executable" msgstr "Spring 执行文件" #: src/options/springoptionstab.cpp:81 src/options/springoptionstab.cpp:92 #: src/options/springoptionstab.cpp:102 msgid "Location" msgstr "位置" #: src/options/springoptionstab.cpp:84 src/options/springoptionstab.cpp:94 #: src/options/springoptionstab.cpp:104 msgid "Find" msgstr "查找" #: src/options/springoptionstab.cpp:89 msgid "UnitSync library" msgstr "UnitSync库" #: src/options/springoptionstab.cpp:99 msgid "Spring App Bundle" msgstr "" #: src/options/springoptionstab.cpp:116 msgid "Auto Configure" msgstr "自动配置" #: src/options/springoptionstab.cpp:117 msgid "Change Datadir path" msgstr "改变数据文件路径" #: src/options/springoptionstab.cpp:267 src/options/springoptionstab.cpp:290 msgid "Choose a Spring executable" msgstr "选择Spring执行文件" #: src/options/springoptionstab.cpp:275 src/options/springoptionstab.cpp:277 #: src/options/springoptionstab.cpp:283 msgid "Library" msgstr "库" #: src/options/springoptionstab.cpp:279 src/options/springoptionstab.cpp:283 #: src/springsettings/panel_pathoption.cpp:84 msgid "Any File" msgstr "所有文件" #: src/options/springoptionstab.cpp:280 msgid "Choose UnitSync library" msgstr "选择UnitSync库" #: src/options/springoptionstab.cpp:292 msgid "App bundle" msgstr "" #: src/options/springoptionstab.cpp:309 #, fuzzy msgid "Reloading unitsync" msgstr "重新读取列表" #: src/options/springoptionstab.cpp:315 #, fuzzy, c-format msgid "" "%s is unable to load your UnitSync library.\n" "\n" "You might want to take another look at your unitsync setting." msgstr "" "Spring大厅无法载入你的UnitSync库。\n" "\n" "你可能需要再次检查你的UnitSync设置。" #: src/options/springoptionstab.cpp:355 msgid "" "Do you want to change spring's datadir location? (select yes only if you " "know what you're doing)" msgstr "您想改变Spring的数据目录位置?(只有在你知道你在做什么的时候才选择它)" #: src/options/springoptionstab.cpp:355 msgid "Data dir wizard" msgstr "数据目录向导" #: src/options/springoptionstab.cpp:359 msgid "Choose a folder" msgstr "选择文件夹" #: src/options/springoptionstab.cpp:373 msgid "" "Something went wrong when creating the directories\n" "Please create manually the following folders:" msgstr "" "创建目录时发生错误\n" "请手动创建下列目录:" #: src/playback/playbackfilter.cpp:60 msgid "Filter settings" msgstr "过滤设置" #: src/playback/playbackfilter.cpp:113 #, fuzzy msgid "Only maps I have" msgstr "仅列出我拥有地图的游戏" #: src/playback/playbackfilter.cpp:164 msgid "Filesize in KB:" msgstr "文件大小(KB计量)" #: src/playback/playbackfilter.cpp:190 msgid "Duration (hh:mm:ss):" msgstr "持续时间 (时:分:秒):" #: src/playback/playbacklistctrl.cpp:42 msgid "Date" msgstr "日期" #: src/playback/playbacklistctrl.cpp:42 msgid "Date of recording" msgstr "记录日期" #: src/playback/playbacklistctrl.cpp:43 #, fuzzy msgid "Game name" msgstr "地图名称" #: src/playback/playbacklistctrl.cpp:46 msgid "Duration" msgstr "持续时间" #: src/playback/playbacklistctrl.cpp:47 msgid "Spring Version" msgstr "Spring 版本" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize" msgstr "文件大小" #: src/playback/playbacklistctrl.cpp:48 msgid "Filesize in kilobyte" msgstr "文件大小(kilobyte计量)" #: src/playback/playbacklistctrl.cpp:49 src/springsettings/frame.cpp:266 msgid "File" msgstr "文件" #: src/playback/playbacklistctrl.cpp:67 msgid "Download m&od" msgstr "下载模组" #: src/playback/playbacktab.cpp:134 msgid "Watch" msgstr "观看" #: src/playback/playbacktab.cpp:134 #, fuzzy msgid "Load" msgstr "载入..." #: src/playback/playbacktab.cpp:140 msgid "Reload list" msgstr "重新读取列表" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "replay" msgstr "回放" #: src/playback/playbacktab.cpp:280 #, fuzzy msgid "savegame" msgstr "进度" #: src/playback/playbacktab.cpp:288 msgid "Couldn't get your spring versions from any unitsync library." msgstr "无法从UnitSync库中获取你的Spring版本。" #: src/playback/playbacktab.cpp:306 #, fuzzy, c-format msgid "" "No compatible installed spring version has been found, this %s requires " "version: %s\n" msgstr "没有找到匹配的Spring版本,服务器需要%s\n" #: src/playback/playbacktab.cpp:307 src/ui.cpp:597 msgid "Your current installed versions are:" msgstr "当前安装版本是:" #: src/playback/playbacktab.cpp:319 msgid "" "Should i try to download it for you?\n" "You can see the progress in the \"Download Manager\" tab." msgstr "" "是否要下载它?\n" "你可以在“下载管理器”选项卡中看到其进度。" #: src/playback/playbacktab.cpp:323 #, fuzzy msgid "" "You need to download the game before you can watch this replay.\n" "\n" msgstr "" "在你观看该游戏前,你必须下载模组。\n" "\n" #: src/playback/playbacktab.cpp:335 msgid "" " I couldn't find the map to be able to watch this replay\n" "This can be caused by tasclient writing broken map hash value\n" "If you're sure you have the map, press no\n" "You need to download the map to be able to watch this replay.\n" "\n" msgstr "" "找不到需要的地图\n" "可能是tasclient写入了错误的地图hash\n" "如果您确认有此地图,点击 否\n" "您需要下载地图才可以看\n" "\n" #: src/playback/playbacktab.cpp:356 msgid "" "I don't think you will be able to watch this replay.\n" "Try anyways? (MIGHT CRASH!)" msgstr "" "我可不认为你能看这个回放。\n" "试验吗?(可能崩溃的!)" #: src/playback/playbacktab.cpp:356 msgid "Invalid replay" msgstr "无效的回放" #: src/playback/playbacktab.cpp:373 msgid "Could not delete Replay: " msgstr "无法删除回放:" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "You were kicked from the battle!" msgstr "你从战斗中被踢出了!" #: src/qt/simpleserverevents.cpp:818 src/serverevents.cpp:898 msgid "Kicked by Host" msgstr "被主机踢出" #: src/qt/simpleserverevents.cpp:858 src/serverevents.cpp:937 msgid " indefinite time remaining" msgstr " 剩余时间不确定" #: src/qt/simpleserverevents.cpp:860 src/serverevents.cpp:938 #, c-format msgid " %d minutes remaining" msgstr " %d 剩余" #: src/qt/simpleserverevents.cpp:927 src/serverevents.cpp:1004 #, fuzzy msgid "There was an error downloading for the latest version.\n" msgstr "" "下载最新版本时发生错误。\n" "请手动前往 http://springrts.com" #: src/qt/simpleserverevents.cpp:932 src/serverevents.cpp:1009 msgid "Network Error" msgstr "" #: src/qt/simpleserverevents.cpp:935 src/serverevents.cpp:1012 #, fuzzy msgid "Negotiation error" msgstr "通知" #: src/qt/simpleserverevents.cpp:941 src/serverevents.cpp:1018 #, fuzzy msgid "Invalid Value" msgstr "无效的数字" #: src/qt/simpleserverevents.cpp:944 src/serverevents.cpp:1021 msgid "No Handler" msgstr "" #: src/qt/simpleserverevents.cpp:947 src/serverevents.cpp:1024 #, fuzzy msgid "File doesn't exit" msgstr "地图不存在。" #: src/qt/simpleserverevents.cpp:950 src/serverevents.cpp:1027 #, fuzzy msgid "Action Aborted" msgstr "已启动" #: src/qt/simpleserverevents.cpp:953 src/serverevents.cpp:1030 #, fuzzy msgid "Reconnection Error" msgstr "重新连接" #: src/qt/simpleserverevents.cpp:956 src/serverevents.cpp:1033 #, fuzzy msgid "Unknown Error" msgstr "未知" #: src/qt/simpleserverevents.cpp:966 src/serverevents.cpp:1043 msgid "Download complete, location is: " msgstr "下载完毕,位置是:" #: src/qt/simpleserverevents.cpp:967 src/serverevents.cpp:1044 msgid "" "\n" "lobby will get closed now." msgstr "" #: src/qt/simpleserverevents.cpp:968 src/serverevents.cpp:1045 msgid "Download complete." msgstr "下载完毕。" #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer. File location is: " msgstr "无法运行安装程序。文件地址是: " #: src/qt/simpleserverevents.cpp:973 src/serverevents.cpp:1050 msgid "Couldn't launch installer." msgstr "无法启动安装程序。" #: src/reconnectdialog.cpp:23 #, fuzzy msgid "Reconnect Dialog" msgstr "重新连接" #: src/reconnectdialog.cpp:34 #, fuzzy msgid "Try Reconnecting" msgstr "重新连接" #: src/reconnectdialog.cpp:35 src/reconnectdialog.cpp:39 #, fuzzy msgid "Tries to connect to the next server in the list." msgstr "您需要连接到服务器察看频道列表" #: src/reconnectdialog.cpp:38 msgid "Try Next Server" msgstr "" #: src/reconnectdialog.cpp:42 #, fuzzy msgid "Do nothing" msgstr "穿孔" #: src/reconnectdialog.cpp:45 msgid "" "Couldn't estabilish a connection with the server\n" "What would you like to do?" msgstr "" #: src/selectusersdialog.cpp:51 msgid "Filter names" msgstr "过滤名称" #: src/selectusersdialog.cpp:56 msgid "Enter text filter to filter the online users list" msgstr "输入文字,以便过滤在线玩家列表" #: src/selectusersdialog.h:67 msgid "Select Users" msgstr "选择用户" #: src/serverevents.cpp:124 #, fuzzy, c-format msgid "ping: %s ms" msgstr "ping返回用了%s 毫秒(ms )" #: src/serverevents.cpp:142 msgid " is online" msgstr " 在线" #: src/serverevents.cpp:165 msgid " is now " msgstr " 现在" #: src/serverevents.cpp:192 msgid "OnUserStatus() failed ! (exception)" msgstr "OnUserStatus() 失败!(异常)" #: src/serverevents.cpp:224 msgid " just went offline" msgstr " 刚刚离线" #: src/serverevents.cpp:259 msgid " opened battle " msgstr " 开放的游戏" #: src/serverevents.cpp:583 msgid "Join channel failed" msgstr "加入频道失败" #: src/serverevents.cpp:583 msgid "Could not join channel " msgstr "无法加入频道 " #: src/serverevents.cpp:583 msgid " because: " msgstr " 因为: " #: src/serverevents.cpp:826 msgid "Server Message" msgstr "服务器消息" #: src/serverevents.cpp:874 #, c-format msgid " has ip=%s" msgstr " 拥有 IP=%s" #: src/serverevents.cpp:883 msgid " does not really support nat traversal" msgstr " 不真正支持NAT穿越" #: src/serverevents.cpp:928 msgid "Begin mutelist for " msgstr "开始静音列表" #: src/serverevents.cpp:928 #, c-format msgid "%s mutelist" msgstr "%s 静音列表" #: src/serverevents.cpp:946 msgid "End mutelist for " msgstr "结束静音列表" #: src/serverevents.cpp:984 msgid "Download update" msgstr "下载更新" #: src/serverevents.cpp:984 #, fuzzy, c-format msgid "" "Would you like to download %s ? The file offers the following updates:\n" "\n" "%s\n" "\n" "The download will be started in the background, you will be notified on " "operation completed." msgstr "" "您想要下载%s 吗?包含以下更新\n" "%s" #: src/serverevents.cpp:1067 #, fuzzy msgid "Automatically moved to new battle" msgstr "自动检查升级" #: src/settings.cpp:2374 msgid "" "The way column widths are saved has changed, you may need to re-adjust your " "col widths manually once." msgstr "" #: src/settings.cpp:2374 msgid "Important" msgstr "" #: src/settings.h:70 msgid "Bottom right" msgstr "" #: src/settings.h:70 msgid "Bottom left" msgstr "" #: src/settings.h:70 msgid "Top right" msgstr "" #: src/settings.h:70 msgid "Top left" msgstr "" #: src/singleplayertab.cpp:56 msgid "" "You can drag the sun/bot icon around to define start position.\n" " Hover over the icon for a popup that lets you change side, ally and bonus." msgstr "" "你可以将太阳/机器人图标拖动到预先设定的起始点附近。\n" " 将鼠标移至图标上会弹出一个界面让你选择阵营,联盟以及资源加成。" #: src/singleplayertab.cpp:80 msgid "Add bot..." msgstr "添加AI..." #: src/singleplayertab.cpp:99 msgid "Spectate only" msgstr "仅旁观者" #: src/singleplayertab.cpp:102 msgid "Random start positions" msgstr "随机起始位置" #: src/singleplayertab.cpp:138 src/singleplayertab.cpp:164 msgid "-- Select one --" msgstr "-- 请选择一个 --" #: src/singleplayertab.cpp:230 src/singleplayertab.cpp:237 #, fuzzy msgid "Game setup error" msgstr "游戏设置错误" #: src/singleplayertab.cpp:237 msgid "You have to select a map first." msgstr "你必须先选择一个地图" #: src/singleplayertab.cpp:244 msgid "" "Continue without adding a bot first?.\n" " The game will be over pretty fast.\n" " " msgstr "" "不添加AI而继续?\n" " 游戏将很快结束。\n" " " #: src/singleplayertab.cpp:245 msgid "No Bot added" msgstr "没有AI被添加" #: src/singleplayertab.cpp:265 msgid "Incompatible bots have been removed after game selection changed." msgstr "" #: src/singleplayertab.cpp:265 msgid "Bots removed" msgstr "" #: src/singleplayertab.cpp:325 msgid "You cannot start a spring instance while another is already running" msgstr "你不能在有另一个Spring正在执行的时候再次启动Spring" #: src/springlobbyapp.cpp:187 msgid "" "Please check that the file given in Preferences->Spring is a proper, " "readable unitsync library" msgstr "" #: src/springlobbyapp.cpp:188 #, fuzzy msgid "Coulnd't load required unitsync library" msgstr "选择一个unitsync库" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "Couldn't load customizations for " msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 msgid "" "\n" "Please check that that is the correct name, passed in qoutation" msgstr "" #: src/springlobbyapp.cpp:204 src/springsettings/main.cpp:166 #, fuzzy msgid "Fatal error" msgstr "致命错误" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "" "The application has generated a fatal error and will be terminated\n" "Generating a bug report is not possible\n" "\n" "please get a wxWidgets library that supports wxUSE_DEBUGREPORT" msgstr "" "该程序产生了一个严重错误,即将被关闭\n" "并且生成一个Bug报告是不可能的\n" "\n" "请使用支持wxUSE_DEBUGREPORT的wxWidgets库" #: src/springlobbyapp.cpp:270 src/springsettings/main.cpp:85 #: src/updater/updaterapp.cpp:138 msgid "Critical error" msgstr "致命错误" #: src/springlobbyapp.cpp:308 src/springsettings/main.cpp:213 #: src/updater/updaterapp.cpp:159 msgid "show this help message" msgstr "显示帮助信息" #: src/springlobbyapp.cpp:309 src/springsettings/main.cpp:214 msgid "don't use the crash handler (useful for debugging)" msgstr "不使用崩溃处理(debug需要)" #: src/springlobbyapp.cpp:310 src/springsettings/main.cpp:216 msgid "dumps application log to a file ( enter path )" msgstr "" #: src/springlobbyapp.cpp:311 src/springsettings/main.cpp:215 msgid "shows application log to the console(if available)" msgstr "现实应用程序日志 (假如可用)" #: src/springlobbyapp.cpp:312 src/springsettings/main.cpp:217 msgid "enables application log window" msgstr "开启应用程序日志窗口" #: src/springlobbyapp.cpp:313 src/springsettings/main.cpp:218 msgid "override default choice for config-file" msgstr "" #: src/springlobbyapp.cpp:314 src/springsettings/main.cpp:222 msgid "" "overrides default logging verbosity, can be:\n" " 0: no log\n" " 1: critical errors\n" " 2: errors\n" " 3: warnings (default)\n" " 4: messages\n" " 5: function trace" msgstr "" #: src/springlobbyapp.cpp:315 msgid "load lobby customizations from game archive. Expects the shortname." msgstr "" #: src/springlobbyapp.cpp:316 src/springsettings/main.cpp:221 msgid "overrides default application name" msgstr "" #: src/springlobbyapp.cpp:521 src/springlobbyapp.cpp:522 msgid "Ignore chat" msgstr "忽略聊天信息" #: src/springlobbyapp.cpp:523 src/springlobbyapp.cpp:524 msgid "Battle Autokick" msgstr "战斗自动踢出" #: src/springlobbyapp.cpp:525 src/springlobbyapp.cpp:526 #: src/springlobbyapp.cpp:527 src/springlobbyapp.cpp:528 #: src/springlobbyapp.cpp:529 msgid "Friends" msgstr "朋友" #: src/springsettings/ctrlconstants.h:215 msgid "Scrollwheel speed" msgstr "鼠标滚轮速度" #: src/springsettings/ctrlconstants.h:216 msgid "" "Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!" msgstr "" "更高的值表示使用鼠标滚轮放大更快。\n" "负数值可以反转滚轮方向。\n" "效果可能在不同视角模式中不同!" #: src/springsettings/ctrlconstants.h:226 msgid "Shadow-map size" msgstr "阴影区块维数" #: src/springsettings/ctrlconstants.h:226 msgid "" "higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192" msgstr "" "更高的值 = 更好看的阴影\n" "可使用的值有: 1024,2048,4096,8192" #: src/springsettings/ctrlconstants.h:228 msgid "Tree view-distance" msgstr "树木显示距离" #: src/springsettings/ctrlconstants.h:228 msgid "sets the maximum distance at which trees will still be rendered" msgstr "设置树木被渲染的最大距离" #: src/springsettings/ctrlconstants.h:229 msgid "Terrain detail" msgstr "地形细节" #: src/springsettings/ctrlconstants.h:229 msgid "higher value = more terrain details" msgstr "更高的值 = 更多的地形细节" #: src/springsettings/ctrlconstants.h:230 #, fuzzy msgid "Unit LOD distance" msgstr "显示单位图标的距离" #: src/springsettings/ctrlconstants.h:230 #, fuzzy msgid "higher value = units will remain detailed even when zooming out" msgstr "更高的值 = 单位细节程度越高" #: src/springsettings/ctrlconstants.h:231 msgid "Grass detail" msgstr "草丛细节" #: src/springsettings/ctrlconstants.h:231 #, fuzzy msgid "higher value = more detailed grass" msgstr "更高的值 = 更加细致的草丛" #: src/springsettings/ctrlconstants.h:232 msgid "Ground decals" msgstr "地表贴图" #: src/springsettings/ctrlconstants.h:232 msgid "" "settings higher than 1 might have unwelcome side-effects / be very resource " "hungry" msgstr "" #: src/springsettings/ctrlconstants.h:233 msgid "Unit icon distance" msgstr "显示单位图标的距离" #: src/springsettings/ctrlconstants.h:233 msgid "" "determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time" msgstr "" "决定了单位被完整渲染的最大距离\n" "更高的值 = 更远的距离 = 更多单位同时被渲染" #: src/springsettings/ctrlconstants.h:235 msgid "Max simultaneous particles" msgstr "最大粒子数" #: src/springsettings/ctrlconstants.h:235 #: src/springsettings/ctrlconstants.h:236 msgid "limits how many particles are displayed at the same time" msgstr "限制同时最多显示多少粒子" #: src/springsettings/ctrlconstants.h:236 #, fuzzy msgid "Max nano simultaneous particles" msgstr "最大粒子数" #: src/springsettings/ctrlconstants.h:243 msgid "Run full-screen" msgstr "全屏运行" #: src/springsettings/ctrlconstants.h:243 msgid "run fullscreen or in a window?" msgstr "全屏运行还是窗口化运行?" #: src/springsettings/ctrlconstants.h:244 msgid "Dual-screen mode" msgstr "双屏模式" #: src/springsettings/ctrlconstants.h:244 msgid "if you have two monitors you can use both" msgstr "如果你拥有两台显示器,可以都使用" #: src/springsettings/ctrlconstants.h:245 #, fuzzy msgid "Enable v-sync" msgstr "同步" #: src/springsettings/ctrlconstants.h:245 msgid "V-Sync on/off" msgstr "垂直同步 开/关" #: src/springsettings/ctrlconstants.h:251 msgid "16-bit Z-buffer" msgstr "16位 深度缓冲" #: src/springsettings/ctrlconstants.h:251 #: src/springsettings/ctrlconstants.h:252 msgid "placeholder" msgstr "占位符" #: src/springsettings/ctrlconstants.h:252 msgid "24-bit Z-buffer" msgstr "24位 深度缓冲" #: src/springsettings/ctrlconstants.h:259 #, fuzzy msgid "Full-scene anti-aliasing samples" msgstr "全屏抗锯齿取样" #: src/springsettings/ctrlconstants.h:259 msgid "how much anti-aliasing should be applied" msgstr "抗锯齿采样应该几次" #: src/springsettings/ctrlconstants.h:271 msgid "Maximum simultaneous sounds" msgstr "最大声音数" #: src/springsettings/ctrlconstants.h:271 msgid "" "maximum different sounds played at the same time\n" "Set this to zero to disable sound completely." msgstr "" "最多可以同时播放不同声音的数目\n" "设置为0则完全禁用声音。" #: src/springsettings/ctrlconstants.h:273 #, fuzzy msgid "Master sound volume" msgstr "总体的音量" #: src/springsettings/ctrlconstants.h:273 #, fuzzy msgid "master sound volume" msgstr "总体的音量" #: src/springsettings/ctrlconstants.h:274 #, fuzzy msgid "General sound volume" msgstr "总体的音量" #: src/springsettings/ctrlconstants.h:274 #, fuzzy msgid "general volume relative to master volume" msgstr "相对全局音量的单位回复音量" #: src/springsettings/ctrlconstants.h:275 msgid "Unit reply volume" msgstr "单位回复音量" #: src/springsettings/ctrlconstants.h:275 #, fuzzy msgid "reply volume relative to master volume" msgstr "相对全局音量的单位回复音量" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "Battle volume" msgstr "游戏房间" #: src/springsettings/ctrlconstants.h:276 #, fuzzy msgid "battle volume relative to global volume" msgstr "相对全局音量的单位回复音量" #: src/springsettings/ctrlconstants.h:277 #, fuzzy msgid "User interface volume" msgstr "单位回复音量" #: src/springsettings/ctrlconstants.h:277 #, fuzzy msgid "ui volume relative to global volume" msgstr "相对全局音量的单位回复音量" #: src/springsettings/ctrlconstants.h:278 msgid "Air Absorbtion factor" msgstr "" #: src/springsettings/ctrlconstants.h:278 msgid "How far sounds will have high frequencies dampened" msgstr "" #: src/springsettings/ctrlconstants.h:285 #: src/springsettings/tab_quality_video.cpp:180 msgid "Shadows (slow)" msgstr "阴影(慢)" #: src/springsettings/ctrlconstants.h:285 msgid "enable shadows?" msgstr "启用阴影?" #: src/springsettings/ctrlconstants.h:286 msgid "3D trees" msgstr "3D 树木" #: src/springsettings/ctrlconstants.h:286 msgid "" "want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card" msgstr "" "想要更好看的树木?\n" "需要 GeForce 2/Radeon 8500/Intel 830或更新级别的显卡" #: src/springsettings/ctrlconstants.h:288 msgid "High-resolution clouds" msgstr "高解析度云" #: src/springsettings/ctrlconstants.h:288 msgid "" "want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" "想要更好看的云?\n" "需要 GeForce 5/Radeon 9500/Intel 915或更新级别的显卡" #: src/springsettings/ctrlconstants.h:290 msgid "Dynamic clouds (slow)" msgstr "动态云层(慢)" #: src/springsettings/ctrlconstants.h:290 msgid "want moving clouds in the sky?" msgstr "想要在空中有会移动的云吗?" #: src/springsettings/ctrlconstants.h:291 msgid "Reflective units" msgstr "反射光线的单位" #: src/springsettings/ctrlconstants.h:291 msgid "" "shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card" msgstr "" "眩目的单位?\n" "需要 GeForce 5/Radeon 9500/Intel 915或更新级别的显卡" #: src/springsettings/ctrlconstants.h:293 msgid "Never use shaders when rendering SM3 maps" msgstr "当渲染SM3地图时永远不使用渲染器" #: src/springsettings/ctrlconstants.h:293 msgid "problems with sm3 maps? enable this" msgstr "使用SM3地图有问题?请启用它" #: src/springsettings/ctrlconstants.h:294 msgid "Enable LuaShaders support" msgstr "启用 Lua渲染器支持" #: src/springsettings/ctrlconstants.h:294 msgid "makes for some cool effects" msgstr "达到更多漂亮的效果" #: src/springsettings/ctrlconstants.h:295 msgid "Use Pixelbuffer objects" msgstr "" #: src/springsettings/ctrlconstants.h:295 msgid "" "If supported, it speeds up the dynamic loading of terrain textures -> " "smoother camera movement" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "Compress textures" msgstr "" #: src/springsettings/ctrlconstants.h:296 msgid "" "Runtime texture compression. (Ideal for graphic cards with small amount of " "vram)" msgstr "" #: src/springsettings/ctrlconstants.h:297 msgid "High-resolution LOS textures" msgstr "高分辨率的视野贴图" #: src/springsettings/ctrlconstants.h:297 msgid "smoother Line of Sight overlays" msgstr "更平滑的视野覆盖图" #: src/springsettings/ctrlconstants.h:298 msgid "Draw smooth points" msgstr "绘制光滑点" #: src/springsettings/ctrlconstants.h:298 msgid "should points be anti-aliased" msgstr "点是否要抗锯齿" #: src/springsettings/ctrlconstants.h:299 msgid "Draw smooth lines" msgstr "绘制光滑直线" #: src/springsettings/ctrlconstants.h:299 msgid "should lines be anti-aliased" msgstr "直线是否要抗锯齿" #: src/springsettings/ctrlconstants.h:306 msgid "Issue commands on mini-map" msgstr "在小地图上施加命令" #: src/springsettings/ctrlconstants.h:306 msgid "Issue orders on the mini-map like you would " msgstr "在小地图上像大地图中一样施加命令 " #: src/springsettings/ctrlconstants.h:307 msgid "Show commands on mini-map" msgstr "在小地图上显示命令" #: src/springsettings/ctrlconstants.h:307 #: src/springsettings/ctrlconstants.h:308 #: src/springsettings/ctrlconstants.h:309 msgid "default value is \"on\"" msgstr "默认值为 启用" #: src/springsettings/ctrlconstants.h:308 msgid "Draw icons on mini-map" msgstr "在小地图上绘制图标" #: src/springsettings/ctrlconstants.h:309 msgid "Draw markers on mini-map" msgstr "在小地图上绘制标记" #: src/springsettings/ctrlconstants.h:310 msgid "Mini-map on left (single screen)" msgstr "小地图在左侧(单屏幕)" #: src/springsettings/ctrlconstants.h:310 #: src/springsettings/ctrlconstants.h:311 msgid "left is the default" msgstr "默认值为 左侧" #: src/springsettings/ctrlconstants.h:311 msgid "Mini-map on left (dual screen)" msgstr "小地图在左侧(双屏幕)" #: src/springsettings/ctrlconstants.h:312 msgid "Simplified mini-map colors" msgstr "简化的小地图颜色" #: src/springsettings/ctrlconstants.h:312 msgid "Use less colors" msgstr "使用更少的颜色" #: src/springsettings/ctrlconstants.h:314 msgid "Team-colored nanospray" msgstr "队伍颜色的纳米粒子" #: src/springsettings/ctrlconstants.h:315 msgid "Should nano particels be the color of your team?" msgstr "纳米粒子的颜色是否与队伍颜色一致?" #: src/springsettings/ctrlconstants.h:316 msgid "Colorized elevation map" msgstr "高度层地图分色" #: src/springsettings/ctrlconstants.h:316 msgid "makes differences in height clearer" msgstr "使高度差别更明显" #: src/springsettings/ctrlconstants.h:318 msgid "Show in-game clock" msgstr "显示游戏中的时钟" #: src/springsettings/ctrlconstants.h:319 #: src/springsettings/ctrlconstants.h:321 #: src/springsettings/ctrlconstants.h:323 msgid "" "requires \"Enable LuaWidgets\" to be set.\n" "Will be displayed in the bottom right corner" msgstr "" "需要启用 “启用 Lua插件”。\n" "将会在屏幕右下方显示" #: src/springsettings/ctrlconstants.h:320 msgid "Show in-game player information" msgstr "显示游戏中各玩家的信息" #: src/springsettings/ctrlconstants.h:322 msgid "Show in-game framerate" msgstr "显示游戏中的帧速" #: src/springsettings/ctrlconstants.h:325 msgid "Fix rendering on alt-tab" msgstr "修复Alt+Tab导致的渲染问题" #: src/springsettings/ctrlconstants.h:325 msgid "Do not change if not needed" msgstr "如果不必要请不要修改" #: src/springsettings/ctrlconstants.h:326 msgid "Disallow helper AI's" msgstr "禁用AI助手" #: src/springsettings/ctrlconstants.h:326 msgid "" "Disables Economy AI, etc.\n" "If enabled might screw with LuaUi." msgstr "" "禁用 经济AI 等等。\n" "如果启用,可能导致Lua图形界面插件功能紊乱。" #: src/springsettings/ctrlconstants.h:327 msgid "Enable scroll on window edge" msgstr "启用 屏幕边缘滚屏" #: src/springsettings/ctrlconstants.h:327 msgid "Scroll the screen when mouse reaches the screen's edge." msgstr "当鼠标移动到屏幕边缘时,滚动屏幕视野" #: src/springsettings/ctrlconstants.h:328 msgid "Invert Mouse" msgstr "鼠标上下反向" #: src/springsettings/ctrlconstants.h:328 msgid "Inverts the Mouse Y-axis in FPS mode" msgstr "在FPS模式中使鼠标上下反向" #: src/springsettings/ctrlconstants.h:329 msgid "Use Hardware Cursor" msgstr "" #: src/springsettings/ctrlconstants.h:329 msgid "Use native OS mouse cursor (hardware accelerated)" msgstr "" #: src/springsettings/ctrlconstants.h:337 msgid "Overhead camera" msgstr "顶部视角" #: src/springsettings/ctrlconstants.h:337 #: src/springsettings/ctrlconstants.h:338 #: src/springsettings/ctrlconstants.h:339 #: src/springsettings/ctrlconstants.h:340 #: src/springsettings/ctrlconstants.h:341 msgid "set the scroll speed (mouse + keyboard) for this mode" msgstr "设置该模式下的滚动速度(鼠标与键盘)" #: src/springsettings/ctrlconstants.h:338 msgid "Rotatable overhead camera" msgstr "可旋转的顶部视角" #: src/springsettings/ctrlconstants.h:339 msgid "Total war camera" msgstr "全面战争模式视角" #: src/springsettings/ctrlconstants.h:340 msgid "First person camera" msgstr "第一人称视角" #: src/springsettings/ctrlconstants.h:341 #: src/springsettings/ctrlconstants.h:400 msgid "Free camera" msgstr "自由视角" #: src/springsettings/ctrlconstants.h:347 #: src/springsettings/ctrlconstants.h:349 #: src/springsettings/ctrlconstants.h:351 #: src/springsettings/ctrlconstants.h:353 #: src/springsettings/ctrlconstants.h:355 msgid "" "Make this the default view when startins Spring.\n" "Can be changed ingame." msgstr "" "设置该视角为进入Spring后的默认视角。\n" "可以在游戏中更改。" #: src/springsettings/ctrlconstants.h:362 msgid "Console verbose level (0=min,10=max)" msgstr "控制台消息量(0=最少 10=最多)" #: src/springsettings/ctrlconstants.h:362 msgid "How much information should be outputted?" msgstr "多少信息可以被输出到控制台?" #: src/springsettings/ctrlconstants.h:368 msgid "Catch AI exceptions" msgstr "捕捉AI异常" #: src/springsettings/ctrlconstants.h:368 msgid "disable for AI debugging" msgstr "禁用AI调试" #: src/springsettings/ctrlconstants.h:374 #: src/springsettings/ctrlconstants.h:385 msgid "Basic" msgstr "基本的" #: src/springsettings/ctrlconstants.h:374 msgid "" "Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n" msgstr "" "取决于你的显卡能力,选择更\n" "高质量可能会对Spring的运行\n" "速度产生较大影响。\n" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective" msgstr "反射的" #: src/springsettings/ctrlconstants.h:385 msgid "Reflective + refractive" msgstr "反射的 + 折射的" #: src/springsettings/ctrlconstants.h:385 msgid "Dynamic" msgstr "动态的" #: src/springsettings/ctrlconstants.h:385 #, fuzzy msgid "Bump-mapped" msgstr "水面凹凸贴图" #: src/springsettings/ctrlconstants.h:389 msgid "Invert mouse y-axis" msgstr "鼠标上下反向" #: src/springsettings/ctrlconstants.h:389 msgid "swap up/down with down/up" msgstr "将 上/下 翻转为 下/上" #: src/springsettings/ctrlconstants.h:390 msgid "Mini-map 3-button mouse support" msgstr "小地图三键鼠标支持" #: src/springsettings/ctrlconstants.h:390 msgid "if you don't want to able to use that button, disable it here" msgstr "如果你不想使用那个按键,在这里禁用它" #: src/springsettings/ctrlconstants.h:396 msgid "Overhead" msgstr "顶部视角" #: src/springsettings/ctrlconstants.h:396 msgid "Static bird's eye view" msgstr "固定的俯视视角" #: src/springsettings/ctrlconstants.h:397 msgid "Rotatable overhead" msgstr "可旋转的顶部视角" #: src/springsettings/ctrlconstants.h:397 msgid "Same as overhead, but you can rotate around the z-axis" msgstr "与顶部视角相同,但视角可以左右旋转" #: src/springsettings/ctrlconstants.h:398 msgid "Total war" msgstr "全面战争模式视角" #: src/springsettings/ctrlconstants.h:398 msgid "top-view camera, which can be tilted on the X axis" msgstr "俯视视角,可以降低观察高度与角度" #: src/springsettings/ctrlconstants.h:399 msgid "First person" msgstr "第一人称视角" #: src/springsettings/ctrlconstants.h:399 msgid "Camera from unit's point of view" msgstr "跟随单位的视角" #: src/springsettings/ctrlconstants.h:400 msgid "Modify the view anyway you want" msgstr "对视角作任何你想作的调整" #: src/springsettings/ctrlconstants.h:406 msgid "screen width" msgstr "屏幕宽度" #: src/springsettings/ctrlconstants.h:407 msgid "screen height" msgstr "屏幕高度" #: src/springsettings/ctrlconstants.h:415 #, fuzzy msgid "Blur reflection" msgstr "反射的" #: src/springsettings/ctrlconstants.h:416 msgid "Use depth texture" msgstr "" #: src/springsettings/ctrlconstants.h:416 msgid "enables smoother blending on coastlines" msgstr "" #: src/springsettings/ctrlconstants.h:417 #, fuzzy msgid "Shore waves" msgstr "启用阴影?" #: src/springsettings/ctrlconstants.h:417 #, fuzzy msgid "Enables shorewaves" msgstr "启用阴影?" #: src/springsettings/ctrlconstants.h:418 #, fuzzy msgid "Reflection" msgstr "反射的" #: src/springsettings/ctrlconstants.h:418 msgid "Turn on water reflections" msgstr "" #: src/springsettings/ctrlconstants.h:420 #, fuzzy msgid "Reflection texture size" msgstr "反射的" #: src/springsettings/ctrlconstants.h:421 #, fuzzy msgid "Refraction" msgstr "限制" #: src/springsettings/ctrlconstants.h:421 msgid "" "Turn on water refractions.\n" "(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow))." msgstr "" #: src/springsettings/ctrlconstants.h:423 msgid "Anisotropy" msgstr "" #: src/springsettings/ctrlconstants.h:431 #, fuzzy msgid "off" msgstr "关闭" #: src/springsettings/ctrlconstants.h:431 msgid "screencopy(fast)" msgstr "" #: src/springsettings/ctrlconstants.h:431 msgid "own rendering pass(slow)" msgstr "" #: src/springsettings/frame.cpp:52 msgid "Combined Options" msgstr "综合选项" #: src/springsettings/frame.cpp:53 msgid "Render quality / Video mode" msgstr "渲染质量 / 显示模式" #: src/springsettings/frame.cpp:54 msgid "Render detail" msgstr "渲染细节" #: src/springsettings/frame.cpp:55 msgid "UI options" msgstr "图形界面选项" #: src/springsettings/frame.cpp:56 msgid "Audio" msgstr "声音" #: src/springsettings/frame.cpp:57 msgid "Hotkeys" msgstr "" #: src/springsettings/frame.cpp:58 #, fuzzy msgid "" "Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)" msgstr "" "在专家模式中对 图像质量/细节 选项卡中选项所作的修改\n" " 将会因为在简易模式中再次修改而丢失。\n" "所有这些修改将不会被反映在 \n" "综合选项中的选项中。\n" "(这条消息可以在“文件”菜单中被禁用)" #: src/springsettings/frame.cpp:102 src/springsettings/frame.cpp:123 msgid "Error!" msgstr "错误!" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 msgid "Save Spring settings before exiting?" msgstr "退出前是否保存Spring设置?" #: src/springsettings/frame.cpp:150 src/springsettings/frame.cpp:179 #: src/springsettings/frame.cpp:289 msgid "Confirmation needed" msgstr "需要确认" #: src/springsettings/frame.cpp:225 msgid "SpringSettings (simple mode)" msgstr "Spring设置(简易模式)" #: src/springsettings/frame.cpp:236 msgid "Save settings" msgstr "保存设置" #: src/springsettings/frame.cpp:237 msgid "Reset settings to default values" msgstr "重设所有选项为默认值" #: src/springsettings/frame.cpp:238 msgid "Disable expert mode warning" msgstr "禁用 专家模式警告" #: src/springsettings/frame.cpp:240 msgid "Quit" msgstr "退出" #: src/springsettings/frame.cpp:245 msgid "Simple (few options)" msgstr "简易(较少选项)" #: src/springsettings/frame.cpp:246 msgid "Expert (all options" msgstr "专家(全部选项)" #: src/springsettings/frame.cpp:249 msgid "About" msgstr "关于" #: src/springsettings/frame.cpp:250 msgid "Contact" msgstr "联系" #: src/springsettings/frame.cpp:251 msgid "Credits" msgstr "关于作者" #: src/springsettings/frame.cpp:252 msgid "Report a bug" msgstr "报告 Bug" #: src/springsettings/frame.cpp:267 msgid "Mode" msgstr "模式" #: src/springsettings/frame.cpp:268 msgid "Info/Help" msgstr "信息/帮助" #: src/springsettings/frame.cpp:289 msgid "Reset ALL settings to default values?" msgstr "将所有设置全部重设为默认值?" #: src/springsettings/frame.cpp:315 #, fuzzy msgid "(simple mode)" msgstr "Spring设置(简易模式)" #: src/springsettings/frame.cpp:317 msgid "Hint" msgstr "提示" #: src/springsettings/frame.cpp:367 #, fuzzy msgid "(expert mode)" msgstr "切换到专家模式" #: src/springsettings/helpmenufunctions.cpp:31 msgid "" "SpringSettings is a graphical frontend to the Settings of the Spring engine" msgstr "Spring设置是一个Spring引擎图形方面的设置软件" #: src/springsettings/helpmenufunctions.cpp:40 msgid "koshi" msgstr "" #: src/springsettings/helpmenufunctions.cpp:41 msgid "Very Bad Soldier" msgstr "" #: src/springsettings/helpmenufunctions.cpp:42 msgid "Kloot" msgstr "Kloot" #: src/springsettings/helpmenufunctions.cpp:43 msgid "The SpringLobby team" msgstr "SpringLobby 团队" #: src/springsettings/helpmenufunctions.cpp:44 msgid "everyone reporting bugs/suggestions" msgstr "每个报告Bug/提出意见的人" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:17 msgid "Invalid value for distance from mouse!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:25 msgid "Invalid value for selection count!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:32 msgid "Invalid value for selection percentage!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:40 #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:64 msgid "Invalid value for absolute health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:48 msgid "Invalid value for relative health!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:56 msgid "Invalid value for weapon range!" msgstr "" #: src/springsettings/hotkeys/AddSelectionCmdDlg.cpp:304 #, fuzzy msgid "Invalid input" msgstr "无效的端口" #: src/springsettings/hotkeys/commandlist.h:82 msgid "Command already exists! Not added!" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:71 #: src/springsettings/hotkeys/hotkey_panel.cpp:77 #, fuzzy msgid "Hotkey Error" msgstr "帮助错误" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 #, fuzzy msgid "Enter new command:" msgstr "聊天命令:" #: src/springsettings/hotkeys/hotkey_panel.cpp:98 msgid "Add Custom Command" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:118 msgid "Add Command Error" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:297 #, fuzzy msgid "Hotkey SaveSettings error" msgstr "Spring设置 出错" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "' has been created." msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:407 msgid "" "Your current hotkey configuration does not match any known profile.\n" " A new profile with the name '" msgstr "" #: src/springsettings/hotkeys/hotkey_panel.cpp:408 #, fuzzy msgid "New hotkey profile found" msgstr "没有找到文件" #: src/springsettings/hotkeys/hotkey_panel.cpp:471 msgid "Error parsing springsettings hotkey profile. Invalid order index: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:34 msgid "can't open " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:134 msgid "skipping uikeys.txt line (unknown token '" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:169 msgid "Error opening file for writing: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:176 msgid "Error opening file for reading: " msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:235 #, c-format msgid "Error renaming %s to %s" msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:243 msgid "Error renaming uikeys.txt.tmp to uikeys.txt." msgstr "" #: src/springsettings/hotkeys/hotkey_parser.cpp:248 msgid " Restoring backup failed also. Good luck!" msgstr "" #: src/springsettings/main.cpp:219 msgid "override default choice for engine config-file, needs absolute path" msgstr "" #: src/springsettings/main.cpp:220 msgid "" "load lobby customizations from given archive. Expects the archive filename." msgstr "" #: src/springsettings/panel_pathoption.cpp:33 msgid "Path to unitsync shared library" msgstr "UnitSync共享库的目录路径" #: src/springsettings/panel_pathoption.cpp:34 #, fuzzy msgid "" "There was a problem retrieving your settings.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tPlease check that the path below is correct.\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tWhen you have corrected it, click\n" "\t\t\t\t\t\t\t\t\t\t\t\t\t\tthe \"Use this Path\" button to try again." msgstr "" "获取你的设置时发生问题。\n" "请检查一下路径是否正确。\n" "当你更正好以后,点击\n" "“使用该路径”按钮重试。" #: src/springsettings/panel_pathoption.cpp:41 msgid "Use this path" msgstr "使用该路径" #: src/springsettings/panel_pathoption.cpp:47 msgid "libunitsync.so on linux, unitsync.dll on windows" msgstr "Linux中的libunitsync.so Windows中的unitsync.dll" #: src/springsettings/panel_pathoption.cpp:53 msgid "Path settings" msgstr "路径设置" #: src/springsettings/panel_pathoption.cpp:82 msgid "Choose an unitsync library" msgstr "选择一个unitsync库" #: src/springsettings/panel_pathoption.cpp:96 #, fuzzy msgid "" "SpringSettings is unable to load your unitsync library.\n" "\t\t\t\tYou might want to take another look at your unitsync setting.\n" "\t\t\t\tYour Spring version has to be 0.76 or newer, otherwise \n" "\t\t\t\tthis will fail in any case." msgstr "" "Spring设置无法载入你的UnitSync库。\n" "你也许需要再次检查你的UnitSync设置。\n" "你的Spring版本必须为0.76或更新,否则 \n" "程序无法正确运行。" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "low" msgstr "低" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "medium" msgstr "中" #: src/springsettings/presets.h:44 src/springsettings/presets.h:45 msgid "high" msgstr "高" #: src/springsettings/presets.h:45 msgid "very low" msgstr "非常低" #: src/springsettings/presets.h:45 msgid "very high" msgstr "非常高" #: src/springsettings/se_utils.cpp:40 msgid "can't launch default browser" msgstr "无法启动默认浏览器" #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser. URL is: " msgstr "无法启动浏览器。地址是: " #: src/springsettings/se_utils.cpp:41 src/uiutils.cpp:495 src/uiutils.cpp:503 msgid "Couldn't launch browser." msgstr "无法启动浏览器。" #: src/springsettings/tab_abstract.cpp:139 msgid "Could not access your settings.\n" msgstr "无法获得你的设置。\n" #: src/springsettings/tab_abstract.cpp:614 msgid "Could not save, unitsync not properly loaded" msgstr "无法保存,UnitSync无法正确载入" #: src/springsettings/tab_abstract.cpp:614 msgid "SpringSettings Error" msgstr "Spring设置 出错" #: src/springsettings/tab_audio.cpp:65 msgid "Audio Options" msgstr "声音选项" #: src/springsettings/tab_quality_video.cpp:67 msgid "Screen Resolution" msgstr "屏幕分辨率" #: src/springsettings/tab_quality_video.cpp:166 #, fuzzy msgid "" "If an option needs special hardware to work\n" "\t\t\t\t\t\t\t\t\t\t\t\tit will be mentioned in the tooltip." msgstr "" "如果一个选项需要特殊的硬件配置才能运行\n" "它将会被提示。" #: src/springsettings/tab_quality_video.cpp:188 msgid "Water Quality" msgstr "水面质量" #: src/springsettings/tab_quality_video.cpp:217 msgid "Resolution in bit" msgstr "位解析度" #: src/springsettings/tab_quality_video.cpp:281 msgid "Render Quality Options" msgstr "渲染质量选项" #: src/springsettings/tab_quality_video.cpp:282 msgid "Video Mode Options" msgstr "视频模式选项" #: src/springsettings/tab_quality_video.cpp:283 msgid "Anti-Aliasing Options" msgstr "抗锯齿选项" #: src/springsettings/tab_quality_video.cpp:284 msgid "Z-/Depth-Buffer" msgstr "深度缓冲" #: src/springsettings/tab_quality_video.cpp:285 msgid "Bump-mapped Water" msgstr "水面凹凸贴图" #: src/springsettings/tab_render_detail.cpp:64 msgid "Rendering detail levels" msgstr "渲染细节级别" #: src/springsettings/tab_simple.cpp:40 #, fuzzy msgid "" "These options let you roughly control Spring's rendering.\n" "\t\t\t\t\t\t\t\t\tFor more speed try lowering the settings.\n" "\t\t\t\t\t\t\t\t\tFull control over all settings is available in the\n" "\t\t\t\t\t\t\t\t\t\"Expert mode\", either click on the button on the\n" "\t\t\t\t\t\t\t\t\tright or use the \"Mode\" menu in the top menubar.\n" "\t\t\t\t\t\t\t\t\tYou can go back to this mode at any time by choosing\n" "\t\t\t\t\t\t\t\t\t\"Simple mode\" from the \"Mode\" menu.\n" "\t\t\t\t\t\t\t\t\tIf you encounter error messages concerning graphics\n" "\t\t\t\t\t\t\t\t\twhen running Spring it might be necessary to disable\n" " \t\t\t\t\t\t\t\t\tsome options in expert mode.\n" msgstr "" "这些选项让你粗略的调整Spring的渲染。\n" "如果想要更高的游戏流畅度,可以尝试调低设置。\n" "想要全面调节所有设置,可以进入“专家模式”,\n" "点击右侧的按钮或使用顶部菜单栏中的“模式”菜单。\n" "你可随时回到简易模式,只需在“模式”菜单中点选“简易模式”即可。\n" "如果你在运行Spring的时候遇到任何关于图像的错误信息,\n" "也许需要你在“专家模式”中禁用某些选项。\n" #: src/springsettings/tab_simple.cpp:51 msgid "Graphics quality" msgstr "图像质量" #: src/springsettings/tab_simple.cpp:52 msgid "Graphics detail" msgstr "图像细节" #: src/springsettings/tab_simple.cpp:53 msgid "Screen resolution" msgstr "屏幕分辨率" #: src/springsettings/tab_simple.cpp:54 msgid "Switch to expert mode" msgstr "切换到专家模式" #: src/springsettings/tab_simple.cpp:77 msgid " (current)" msgstr " (当前)" #: src/springsettings/tab_simple.cpp:88 msgid "Sets all quality options to predefined values according to your choice." msgstr "根据你的选择设置所有画质选项为预设值。" #: src/springsettings/tab_simple.cpp:94 msgid "Sets all detail options to predefined values according to your choice." msgstr "根据你的选择设置所有细节选项为预设值。" #: src/springsettings/tab_simple.cpp:99 #, fuzzy msgid "" "Select the resolution fitting your monitor(s).\n" "\t\t\tSelecting a dual screen resolution will automatically enable dual " "screen mode.\n" "\t\t\tIf the appropiate resolution is not available you can set it manually " "in expert mode.\n" "\t\t\tPlease also contact the author so it can be added in future releases." msgstr "" "选择适合你显示器的分辨率。\n" "选择一个双屏幕的分辨率将会自动启用 双屏幕模式。\n" "如果正确的分辨率未被列出,你可以在专家模式中手动设置。\n" "同时请联系作者,以便在后期版本中加入。" #: src/springsettings/tab_simple.cpp:135 msgid "Info" msgstr "信息" #: src/springsettings/tab_ui.cpp:37 #, fuzzy msgid "" "Setting a slider to 0 will exclude that\n" "\t\t\t\t\t\t\t\t\t\t\tmode from being cycled through ingame." msgstr "" "设置一个滑块到0将会使该视角模式在\n" "游戏中被禁用。" #: src/springsettings/tab_ui.cpp:128 msgid "Scroll Speeds (mouse + keyboard)" msgstr "滚动速度(鼠标 + 键盘)" #: src/springsettings/tab_ui.cpp:132 msgid "Default Camera Mode" msgstr "默认视角模式" #: src/springsettings/tab_ui.cpp:134 msgid "Misc. UI Options" msgstr "其他 图形界面选项" #: src/springsettings/tab_ui.cpp:136 msgid "Zoom" msgstr "缩放" #: src/springunitsync.cpp:112 src/springunitsync.cpp:130 #, fuzzy msgid "loading unitsync" msgstr "允许单位" #: src/tasserver.cpp:317 msgid "There is no saved password for this account, please use /changepassword" msgstr "" #: src/tasserver.cpp:392 src/ui.cpp:299 msgid "Connection timed out" msgstr "连接超时" #: src/tasserver.cpp:405 msgid "Unknown answer from server" msgstr "服务器传来未知答案" #: src/tasserver.cpp:526 msgid "" "Failed to punch through NAT, playing this battle might not work for you or " "for other players." msgstr "无法穿越NAT,你或其他玩家可能无法参与这场战斗。" #: src/tdfcontainer.cpp:131 msgid "line " msgstr "行" #: src/tdfcontainer.cpp:131 msgid " , column " msgstr ",列" #: src/ui.cpp:175 msgid "Server password" msgstr "服务器密码" #: src/ui.cpp:199 msgid "Waiting for reconnect" msgstr "" #: src/ui.cpp:294 msgid "" "Registration successful,\n" "you should now be able to login." msgstr "" "注册成功,\n" "你现在就应该能够登陆。" #: src/ui.cpp:294 msgid "Registration successful" msgstr "注册成功" #: src/ui.cpp:300 msgid "Registration failed, the reason was:\n" msgstr "注册失败,原因是:\n" #: src/ui.cpp:458 msgid "Help error" msgstr "帮助错误" #: src/ui.cpp:458 msgid "" "Type /help in a chat box. (A bug currently prevents this from working in " "battleroom" msgstr "" #: src/ui.cpp:463 #, fuzzy, c-format msgid "%s commands help." msgstr "Spring大厅指令帮助。" #: src/ui.cpp:465 msgid "Global commands:" msgstr "全局指令:" #: src/ui.cpp:466 msgid " \"/away\" - Sets your status to away." msgstr " /away 设置你的状态为离开。" #: src/ui.cpp:467 msgid " \"/back\" - Resets your away status." msgstr " /back 取消你的离开状态。" #: src/ui.cpp:468 #, fuzzy msgid "" " \"/changepassword2 newpassword\" - Changes the current active account's " "password, needs the old password saved in login box" msgstr " /changepassword 旧密码 新密码 修改当前活动帐户的密码。" #: src/ui.cpp:469 #, fuzzy msgid "" " \"/changepassword oldpassword newpassword\" - Changes the current active " "account's password, password cannot contain spaces" msgstr " /changepassword 旧密码 新密码 修改当前活动帐户的密码。" #: src/ui.cpp:470 msgid " \"/channels\" - Lists currently active channels." msgstr " /channels 列举所有当前活动的频道。" #: src/ui.cpp:471 msgid "" " \"/help [topic]\" - Put topic if you want to know more specific " "information about a command." msgstr " /help [话题] 如果你想了解有关一个指令的更多详细信息,请将话题写入。" #: src/ui.cpp:472 #, fuzzy msgid " \"/join channel [password]\" - Joins a channel." msgstr " \"/join 频道名 [密码] [,频道名2 [密码2]...]\" 加入一个频道。" #: src/ui.cpp:473 msgid " \"/j\" - Alias to /join." msgstr " /j 同于 /join" #: src/ui.cpp:474 msgid " \"/ingame\" - Shows how much time you have in game." msgstr " \"/ingame\" 显示你在游戏中的时间长度。" #: src/ui.cpp:475 msgid "" " \"/msg username [text]\" - Sends a private message containing text to " "username." msgstr " \"/msg 用户名 [消息文本]\" 向某个用户发送私人消息。" #: src/ui.cpp:476 msgid " \"/part\" - Leaves current channel." msgstr " \"/part\" - 离开当前频道。" #: src/ui.cpp:477 msgid " \"/p\" - Alias to /part." msgstr " \"/p\" 同于 /part" #: src/ui.cpp:478 msgid " \"/rename newalias\" - Changes your nickname to newalias." msgstr " \"/rename 新用户名\" 将你的昵称修改为新的用户名。" #: src/ui.cpp:479 #, fuzzy, c-format msgid " \"/sayver\" - Says what version of %s you have in chat." msgstr " \"/sayver\" 告诉用户你正在使用的Spring大厅版本号。" #: src/ui.cpp:480 msgid " \"/testmd5 text\" - Returns md5-b64 hash of given text." msgstr " \"/testmd5 文本\" 返回给定文本的md5-b64 Hash。" #: src/ui.cpp:481 #, fuzzy, c-format msgid " \"/ver\" - Displays what version of %s you have." msgstr " \"/ver\" - 显示你拥有的Spring大厅版本号。" #: src/ui.cpp:482 msgid " \"/clear\" - Clears all text from current chat panel" msgstr " \"/clear\" - 清除当前聊天面板上的所有文字" #: src/ui.cpp:484 msgid "Chat commands:" msgstr "聊天命令:" #: src/ui.cpp:485 msgid " \"/me action\" - Say IRC style action message." msgstr " \"/me action\" 发送IRC样式的行为消息。" #: src/ui.cpp:487 msgid "" "If you are missing any commands, go to #springlobby and try to type it " "there :)" msgstr "如果你忘记任何的命令,到#springlobby频道并在那里尝试输入 :)" #: src/ui.cpp:492 msgid "No topics written yet." msgstr "还没有写话题。" #: src/ui.cpp:496 msgid "The topic \"" msgstr "话题 “" #: src/ui.cpp:496 msgid "\" was not found. Type \"/help topics\" only for available topics." msgstr "”未被找到。输入“/help 话题名”时仅限可用的话题。" #: src/ui.cpp:580 msgid "" "Couldn't get your spring versions from any unitsync library.\n" "\n" "Online play is currently disabled." msgstr "" "无法从UnitSync库中获取你的Spring版本。\n" "\n" "在线游戏将被禁用。" #: src/ui.cpp:596 #, c-format msgid "" "No compatible installed spring version has been found, this server requires " "version: %s\n" msgstr "没有找到匹配的Spring版本,服务器需要%s\n" #: src/ui.cpp:599 msgid "Online play is currently disabled." msgstr "在线游戏关闭" #: src/ui.cpp:631 #, fuzzy, c-format msgid "disconnected from server: %s" msgstr "服务器传来未知答案" #: src/ui.cpp:836 msgid "no active chat panels open." msgstr "没有活动的聊天面板开启" #: src/ui.cpp:839 #, fuzzy, c-format msgid "%s (%d users)" msgstr "(%d 名用户)" #: src/ui.cpp:993 msgid "The current battle was closed by the host." msgstr "当前战斗被主建者关闭" #: src/ui.cpp:993 msgid "Battle closed" msgstr "战场已关闭" #: src/ui.cpp:1103 msgid "" "Your spring settings are probably not configured correctly,\n" "you should take another look at your settings before trying\n" "to play online." msgstr "你的Spring设置并不正确,在开始网上对战前请再次检查你的设置。" #: src/ui.cpp:1103 msgid "Spring settings error" msgstr "Spring设置错误" #: src/ui.cpp:1219 #, c-format msgid "" "%s:\n" "ring!" msgstr "" #: src/ui.cpp:1301 msgid "The selected preset requires the map " msgstr "选择的预设需要这个地图" #: src/ui.cpp:1301 msgid "" ". Should it be downloaded? \n" " Selecting \"no\" will remove the missing map from the preset.\n" " Please reselect the preset after " "download finished" msgstr "" ".下载吗? \n" "选择 \"否\" 将移除预设中的地图\n" " 请在下载结束后再次选择此预设" #: src/ui.cpp:1304 msgid "Map missing" msgstr "地图缺失" #: src/ui.cpp:1337 #, fuzzy, c-format msgid "" "Hi %s,\n" "It looks like this is your first time using %s. I have guessed a " "configuration that I think will work for you but you should review it, " "especially the Spring configuration." msgstr "" ",\n" "看来这是你第一次使用Spring游戏大厅。我已经为你预先进行了选项设置。不过你最好" "再自己看一下,尤其是Spring的配置。 \n" "\n" "当你完成后,你可以打开文件菜单,连接到一个服务器,并享受Spring带给你的精彩游" "戏。 :)" #: src/ui.cpp:1340 msgid "Welcome" msgstr "欢迎" #: src/ui.cpp:1359 msgid "Should I try to import (some) TASClient settings?\n" msgstr "导入TASClient设定吗?\n" #: src/ui.cpp:1359 msgid "Import settings?" msgstr "导入设置?" #: src/ui.cpp:1381 msgid "" "There was an error checking for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "检查最新版本时发生错误。\n" "请稍候尝试。\n" "如果问题依然存在,请使用 帮助 -> 报告Bug。" #: src/ui.cpp:1387 msgid "Your Version: " msgstr "你的版本: " #: src/ui.cpp:1387 msgid "Latest Version: " msgstr "最新版本: " #: src/ui.cpp:1392 #, fuzzy, c-format msgid "" "Your %s version is not up to date.\n" "\n" "%s\n" "\n" "Would you like for me to autodownload the new version? Changes will take " "effect next you launch the lobby again." msgstr "" "\n" "\n" "需要自动下载新版本吗?重新启动后将会使用。" #: src/ui.cpp:1395 msgid "Not up to date" msgstr "不是最新的" #: src/ui.cpp:1408 src/updater/updater.cpp:75 msgid "" "Automatic update failed\n" "\n" "you will be redirected to a web page with instructions and the download link " "will be opened in your browser." msgstr "" #: src/ui.cpp:1408 src/updater/updater.cpp:75 #, fuzzy msgid "Updater error." msgstr "玩家数量" #: src/ui.cpp:1415 msgid "" "Your SpringLobby version is not up to date.\n" "\n" msgstr "" "你的 SpringLobby 版本不是最新的。\n" "\n" #: src/ui.cpp:1415 msgid "Not up to Date" msgstr "不是最新的" #: src/uiutils.cpp:503 msgid "" "\n" "Broser path is: " msgstr "" "\n" "浏览器路径为: " #: src/updater/updater.cpp:47 msgid "" "Unable to write to the lobby installation directory.\n" "Please update manually or enable write permissions for the current user." msgstr "" "无法写入lobby安装路径。\n" "请手动更新或者给与当前用户写权限。" #: src/updater/updater.cpp:72 msgid "" "There was an error downloading for the latest version.\n" "Please try again later.\n" "If the problem persists, please use Help->Report Bug to report this bug." msgstr "" "下载最新版本时发生错误。\n" "请稍候尝试。\n" "如果问题依然存在,请使用 帮助 -> 报告Bug。" #: src/updater/updater.cpp:81 #, fuzzy, c-format msgid "" "There was an error while trying to replace the current executable version.\n" " Please manually copy springlobby.exe from: %s\n" " to: %s\n" msgstr "" "替代当前执行文件本时发生错误。\n" "需要手动复制 %s\n" "到 %s\n" "请使用 帮助 -> 报告Bug。" #: src/updater/updater.cpp:89 #, c-format msgid "" "Update complete. \n" "Please restart %s now." msgstr "" #: src/updater/updater.cpp:93 #, fuzzy, c-format msgid "" "Binary updated successfully. \n" "Some translation files could not be updated.\n" "Please report this in #springlobby. \n" "Please restart %s now." msgstr "" "二进制升级成功。\n" "有些翻译文件无法升级。\n" "请报告#springlobby " #: src/updater/updater.cpp:94 msgid "Partial success" msgstr "部分成功" #: src/updater/updaterapp.cpp:160 msgid "the SpringLobby executeable to be updated" msgstr "" #: src/updater/updaterapp.cpp:161 #, fuzzy msgid "the SpringLobby revision to update to" msgstr "" "你的 SpringLobby 版本是最新的!\n" "\n" #: src/updater/updatermainwindow.cpp:43 msgid "Open changelog in browser" msgstr "" #: src/updater/updatermainwindow.cpp:73 msgid "SpringLobby" msgstr "Spring游戏大厅——SpringLobby" #: src/updater/updatermainwindow.cpp:96 msgid "" "Closing this window will abort the update, you may end up with a broken " "client.\n" "Abort?" msgstr "" #: src/updater/updatermainwindow.cpp:96 #, fuzzy msgid "Warning" msgstr "日志警报" #: src/user.cpp:83 msgid "away" msgstr "离开" #: src/user.cpp:83 msgid "back" msgstr "返回" #: src/user.cpp:85 msgid "ingame" msgstr "游戏中" #: src/user.cpp:85 msgid "back from game" msgstr "从游戏中返回" #: src/user.cpp:195 msgid "Newbie" msgstr "新手" #: src/user.cpp:196 msgid "Beginner" msgstr "初学者" #: src/user.cpp:197 msgid "Average" msgstr "大众级新兵" #: src/user.cpp:198 msgid "Above average" msgstr "老兵" #: src/user.cpp:199 msgid "Experienced" msgstr "富有经验的玩家" #: src/user.cpp:200 msgid "Highly experienced" msgstr "极富经验的" #: src/user.cpp:201 msgid "Veteran" msgstr "老鸟" #: src/user.cpp:202 msgid "Badly needs to get laid" msgstr "" #: src/user.cpp:203 msgid "Unknown" msgstr "未知" #: src/useractions.cpp:179 msgid "" "To prevent logical inconsistencies, adding a user to more than one group is " "not allowed" msgstr "为防止逻辑不一致,添加一个用户到多个组是不允许的" #: src/useractions.cpp:180 msgid "Cannot add user to group" msgstr "无法添加用户到组" #: src/useractions.h:11 msgid "none" msgstr "无" #: src/useractions.h:11 msgid "highlight" msgstr "高亮" #: src/useractions.h:11 msgid "notify login/out" msgstr "提示登陆/登出" #: src/useractions.h:11 msgid "ignore chat" msgstr "忽略聊天信息" #: src/useractions.h:11 msgid "ignore pm" msgstr "忽略个人信息" #: src/useractions.h:12 msgid "autokick" msgstr "自动踢出" #: src/useractions.h:12 msgid "notify hosted battle" msgstr "提示建立游戏" #: src/useractions.h:12 msgid "notify status change" msgstr "提示状态改变" #: src/useractions.h:19 msgid "no action at all" msgstr "没有活动" #: src/useractions.h:19 msgid "highlight user in nick list and battles he participates in" msgstr "高亮用户昵称列表和参与的战斗" #: src/useractions.h:20 msgid "popup a message box when user logs in/out from the server" msgstr "用户登陆或登出服务器用则弹出信息框" #: src/useractions.h:20 msgid "you won't see message by these users in normal channels" msgstr "" #: src/useractions.h:21 msgid "" "ignore private messages of these users, no pm window will open if any of " "these try to contact you privately" msgstr "忽略私人信息" #: src/useractions.h:22 msgid "automatically kick users from battles hosted by yourself" msgstr "" #: src/useractions.h:22 msgid "popup a message box when user hosts a new battle" msgstr "用户建立新游戏则弹出信息框" #: src/useractions.h:23 msgid "popup a message box when user changes away status" msgstr "用户状态改变则弹出信息框" #: src/usermenu.h:31 msgid "Create new group..." msgstr "建立新组" #: src/usermenu.h:37 msgid "Add to group..." msgstr "添加到组..." #: src/usermenu.h:38 msgid "Remove from group" msgstr "从组中移除" #: src/utils/controls.h:22 msgid "Choose color" msgstr "选择色彩" #: src/utils/controls.h:24 msgid "Choose color (only first 16 will be saved)" msgstr "选择颜色(前16个会被保存)" #: src/utils/customdialogs.cpp:505 src/utils/customdialogs.cpp:549 #, c-format msgid "Please standby %d seconds" msgstr "" #: src/utils/platform.cpp:74 #, c-format msgid "%s error console" msgstr "" #: src/widgets/downloaddialog.cpp:15 msgid "widgets" msgstr "widget界面插件" #: src/widgets/downloadlistctrl.cpp:30 src/widgets/infopanel.cpp:64 msgid "Author" msgstr "作者" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Games" msgstr "游戏" #: src/widgets/downloadlistctrl.cpp:31 #, fuzzy msgid "Compatible games" msgstr "普通" #: src/widgets/infopanel.cpp:35 msgid "getting infos" msgstr "获取信息" #: src/widgets/infopanel.cpp:69 #, fuzzy msgid "Suitable games" msgstr "合适的模组" #: src/widgets/infopanel.cpp:74 msgid "Current version" msgstr "当前版本" #: src/widgets/infopanel.cpp:79 msgid "# downloaded" msgstr "# 已下载" #: src/widgets/infopanel.cpp:84 msgid "Published on" msgstr "发布于" #: src/widgets/infopanel.cpp:121 msgid "Changelog" msgstr "改动" #: src/widgets/infopanel.cpp:126 msgid "Screenshots" msgstr "屏幕截图" #: src/widgets/infopanel.cpp:158 msgid "Widget files have been installed." msgstr "界面插件文件安装完成" #: src/widgets/infopanel.cpp:161 msgid "Widget files have not been installed." msgstr "界面插件文件没有安装" #: src/widgets/infopanel.cpp:170 msgid "Widget files have been removed." msgstr "界面插件文件已经移除" #: src/widgets/infopanel.cpp:173 msgid "Widget files have not been removed." msgstr "界面插件文件没有移除" #, fuzzy #~ msgid "Settings" #~ msgstr "保存设置" #, fuzzy #~ msgid "Help" #~ msgstr "帮助(&H)" #, fuzzy #~ msgid "Faction" #~ msgstr "动作" #~ msgid "Mod" #~ msgstr "模组" #~ msgid "spectators" #~ msgstr "旁观者" #~ msgid "players" #~ msgstr "玩家" #~ msgid "max" #~ msgstr "最高" #~ msgid "Mod:" #~ msgstr "模组:" #~ msgid "Only mods i have" #~ msgstr "仅列出我拥有模组的游戏" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to host a new game" #~ msgstr "你已经在运行一个Spring程序了,请在主建新游戏前将它关闭。" #~ msgid "" #~ "You already are running a Spring instance, close it first in order to be " #~ "able to join another battle." #~ msgstr "你已经运行了一个Spring,请先关闭Spring再加入其他战斗。" #~ msgid "Do you want me to take you to the download page?" #~ msgstr "你想要前往下载页面吗?" #~ msgid "Mod not available" #~ msgstr "模组不可用" #~ msgid "Enter password" #~ msgstr "输入密码" #~ msgid "team" #~ msgstr "队伍" #~ msgid "ally" #~ msgstr "联盟" #~ msgid "cpu" #~ msgstr "CPU" #~ msgid "Set name." #~ msgstr "设置名称" #~ msgid "Load a saved set of options." #~ msgstr "载入保存的配置" #~ msgid "Save..." #~ msgstr "保存..." #~ msgid "Delete..." #~ msgstr "删除..." #~ msgid "Set default..." #~ msgstr "作为默认..." #~ msgid "Mod Options" #~ msgstr "模组选项" #~ msgid "Map Options" #~ msgstr "地图选项" #~ msgid "" #~ "Cannot load an options set without a name\n" #~ "Please select one from the list and try again." #~ msgstr "无法读取无名称的一系列设定。请从列表选择一个再试。" #~ msgid "Disable text appending (workaround for autoscroll)" #~ msgstr "禁止文字推进(自动滚动)" #~ msgid "You don't have the mod " #~ msgstr "你没有 " #~ msgid " . Please download it first" #~ msgstr " 模组。请先下载" #~ msgid "Mod unavailable" #~ msgstr "模组不可用" #~ msgid "Hash" #~ msgstr "Hash" #~ msgid "unknown hash " #~ msgstr "未知 hash" #~ msgid "Select the mod to play with." #~ msgstr "选择游戏使用的模组。" #~ msgid "Test firewall" #~ msgstr "测试防火墙" #~ msgid "Relay battle to an Autohost" #~ msgstr "交递给自动架设游戏" #~ msgid "Tab icons" #~ msgstr "标签页图标" #~ msgid "P2P" #~ msgstr "点对点" #~ msgid "Total Outgoing: " #~ msgstr "总共上传: " #~ msgid "Publish new file" #~ msgstr "发布新文件" #~ msgid "Search file" #~ msgstr "搜索文件" #~ msgid "Download Lua widgets" #~ msgstr "下载 Lua widget —界面插件" #~ msgid "not available" #~ msgstr "不可用" #~ msgid "seeding" #~ msgstr "做种" #~ msgid "leeching" #~ msgstr "吸血中" #~ msgid "Status: not connected" #~ msgstr "状态:未连接" #~ msgid "Status: connected" #~ msgstr "状态:已连接" #~ msgid "Status: throttled or paused (ingame)" #~ msgstr "状态:暂停(在游戏中)" #~ msgid "Status: unknown" #~ msgstr "状态:未知" #~ msgid "Total Outgoing: %.2f KB/s" #~ msgstr "总共上传: %.2f KB/s" #~ msgid "Total Incoming: %.2f KB/s" #~ msgstr "总共下载: %.2f KB/s" #~ msgid "&File" #~ msgstr "(&F) 文件" #~ msgid "Manually &Start Torrent System" #~ msgstr "手动 (&S) 启动 Torrent 系统" #~ msgid "Manually &Stop Torrent System" #~ msgstr "手动 (&S) 停止 Torrent 系统" #~ msgid "Which profile do you want to be default?" #~ msgstr "您要使用哪个档案作为默认?" #~ msgid "Modname" #~ msgstr "Mod名称" #~ msgid "" #~ "No compatible installed spring version has been found, this replay " #~ "requires version: %s\n" #~ msgstr "不兼容的spring版本。这个回放要求:%s\n" #~ msgid "" #~ "Download started in the background, please be patient\n" #~ "you will be notified on operation completed." #~ msgstr "" #~ "下载开始,请耐心\n" #~ "结束后会有提示" #~ msgid "Download started" #~ msgstr "下载开始" #~ msgid "You refused a mandatory update, you will be disconnected now." #~ msgstr "您拒绝了一个强制性更新,将会自动断线。" #~ msgid "Disconnecting" #~ msgstr "正在断开连接" #~ msgid "Debug" #~ msgstr "调试" #~ msgid "SpringSettings (expert mode)" #~ msgstr "Spring设置(专家模式)" #~ msgid "" #~ "thanks for inviting me in, code to re-use, infrastructure and help in " #~ "general" #~ msgstr "感谢你们邀请我加入,重用代码,基础支持以及各种帮助" #~ msgid "" #~ "The application has generated a fatal error and will be terminated\n" #~ "Generating a bug report is not possible\n" #~ "\n" #~ "please enable wxUSE_DEBUGREPORT" #~ msgstr "" #~ "这个程序已经产生了一个严重错误,即将被关闭\n" #~ "并且无法生成一个Bug报告\n" #~ "\n" #~ "请启用 wxUSE_DEBUGREPORT" #~ msgid "Debug Options" #~ msgstr "调试选项" #~ msgid "Player" #~ msgstr "玩家" #~ msgid "Hi " #~ msgstr "嗨 " #~ msgid "" #~ "By default SpringLobby reports some usage statistics.\n" #~ "You can disable that on options tab --> General." #~ msgstr "" #~ "默认SpringLobby报告一些使用数据。\n" #~ "可以在 选项 标签 —>常规 里关闭。" #~ msgid "Notice" #~ msgstr "提示" #~ msgid "only run update, quit immediately afterwards" #~ msgstr "仅仅运行更新,然后直接退出" #~ msgid "Timeout assumed, disconnecting" #~ msgstr "判断为超时,正在断开连接" #~ msgid "MB downloaded" #~ msgstr "兆字节—下载量" #~ msgid "MB uploaded" #~ msgstr "兆字节—上传量" #~ msgid "status" #~ msgstr "状态" #~ msgid "KB/s up" #~ msgstr "KB/s 上传" #~ msgid "KB/s down" #~ msgstr "KB/s 下载" #~ msgid "ETA (s)" #~ msgstr "估计剩余时间(秒)" #~ msgid "Filesize (MB)" #~ msgstr "文件大小(MB)" #~ msgid "Torrent system autostart" #~ msgstr "Torrent系统自动开始" #~ msgid "at lobby connection (default)" #~ msgstr "当大厅连接到服务器时(默认)" #~ msgid "at lobby start" #~ msgstr "当大厅启动时" #~ msgid "manual" #~ msgstr "手动" #~ msgid "" #~ "Tried all known trackers for torrent system. No connection could be " #~ "established" #~ msgstr "尝试了所有已知的 tracker ,但是没法连接。" #~ msgid "Torrent system failure" #~ msgstr "Torrent系统失败" #~ msgid "Type /help in a chat box." #~ msgstr "在聊天文本框中输入 /help。" #~ msgid "Disconnected from server." #~ msgstr "服务器端断开" #~ msgid "" #~ "A connection couldn't be established with the server\n" #~ "Would you like to try again with the same server?\n" #~ "No to switch to next server in the list" #~ msgstr "" #~ "与服务器的连接无法建立\n" #~ "您要再试着连接此服务器吗?\n" #~ "否在切换到列表里的下一个服务器" #~ msgid "Connection failure" #~ msgstr "连接失败" #~ msgid "Server message" #~ msgstr "服务器消息" #~ msgid "SpringLobby -- downloading update" #~ msgstr "SpringLobby -- 下载更新" #~ msgid "Update complete. The changes will be available next lobby start." #~ msgstr "更新完成。下次启动即应用。" #, fuzzy #~ msgid "Grouping size" #~ msgstr "动作" #~ msgid "a" #~ msgstr "a" #~ msgid "p" #~ msgstr "玩家数" #~ msgid "m" #~ msgstr "最大玩家数" #~ msgid "%d%" #~ msgstr "%d%" #~ msgid "t" #~ msgstr "队伍" #~ msgid "Not a number" #~ msgstr "不是一个数字" #~ msgid "" #~ "Value out of range.\n" #~ " Enter an integer between 0 & 100." #~ msgstr "" #~ "数值超出范围。\n" #~ " 请输入介0与100之间的一个整数。" #~ msgid "" #~ "There are two or more bots on the same team. Because bots don't know how " #~ "to share, this won't work." #~ msgstr "" #~ "有两个或以上的AI使用同一个队伍号码。因为AI没有共享队伍的能力,因此不能执" #~ "行。" #~ msgid "Bot team sharing." #~ msgstr "AI队伍共用。" #, fuzzy #~ msgid "topic" #~ msgstr "话题 “" #~ msgid "Use smart scrolling" #~ msgstr "启用智能滚动" #~ msgid "_SERVER" #~ msgstr "_SERVER" #~ msgid "Download failed" #~ msgstr "下载失败" #, fuzzy #~ msgid "" #~ "You need to download the map to be able to watch this replay.\n" #~ "\n" #~ msgstr "" #~ "在玩此游戏前你需要下载地图。\n" #~ "\n" #~ msgid "Unit detail" #~ msgstr "单位细节" #~ msgid "only on/off available at this time" #~ msgstr "该版本仅有 启用/禁用 选择" #~ msgid "Global sound volume" #~ msgstr "全局音量" #~ msgid "mark to be able to use" #~ msgstr "勾选以启用" #~ msgid "Send debug info to console" #~ msgstr "将调试信息输出到控制台" #~ msgid "if disabled these will only be logged" #~ msgstr "如果被禁用,它们只会被记录而不会被输出" #~ msgid "" #~ "You're using a wxwidgets library of the 2.6.x series\n" #~ " battle filtering, advanced gui and joining/hosting games using nat " #~ "traversal\n" #~ " won't be available" #~ msgstr "" #~ "你正在使用2.6.x系列版本的wxWidgets库\n" #~ " 战斗过滤,高级的图形界面以及使用NAT穿越进入/主建游戏\n" #~ " 将不被支持" #~ msgid "Missing Functionality" #~ msgstr "丢失的功能" #, fuzzy #~ msgid "" #~ "Do you want to download OTA content?\n" #~ "You need this to be able to play TA based mods.\n" #~ "You need to own a copy of Total Annihilation do legally download it." #~ msgstr "" #~ "你想要下载OTA资料吗?\n" #~ "你需要这个来玩基于TA开发的各类模组。\n" #~ "你需要有一份正版的Total Annihilation来使你能合法的下载OTA资料。" #~ msgid "Download OTA content?" #~ msgstr "下载OTA资料?" #, fuzzy #~ msgid "Create a spring directory in my documents folder" #~ msgstr "在当前目录下创建一个.spring目录(推荐)" #~ msgid "Create a folder in a custom path (you'll get prompted for the path)" #~ msgstr "创建一个自定义路径的目录(你将会被要求输入该路径)" #~ msgid "I have already a SpringData folder, i want to browse manually for it" #~ msgstr "我已经有一个Spring数据目录了,我想手动浏览寻找它。" #, fuzzy #~ msgid "" #~ "Looks like you don't have yet a user SpringData folder structure\n" #~ "What would you like to do? (leave default choice if you don't know what " #~ "this is for)" #~ msgstr "" #~ "看起来你还没有一个用户的Spring数据目录结构\n" #~ "你想要做什么?(如果你不知道这是什么,就保持默认的选择)" #, fuzzy #~ msgid "Not online" #~ msgstr "不在线" #~ msgid "" #~ "This game uses NAT traversal that is not supported by wx 2.6 build of " #~ "springlobby. \n" #~ "\n" #~ "You will not be able to play in this battle. \n" #~ "Update your wxwidgets to 2.8 or newer to enable NAT traversal support." #~ msgstr "" #~ "这个游戏使用不支持NAT traversal的wx2.6版Springlobby。\n" #~ "你不能加入这场战斗。\n" #~ "请更新你的wxwidgets到2.8或更新版以打开NAT traversal支持" #, fuzzy #~ msgid "Only the host can change the game options" #~ msgstr "只有主机可以锁定游戏。" #~ msgid "Only the host can start the battle." #~ msgstr "只有主机才能开始战斗。" #, fuzzy #~ msgid "Only the host can use those functions." #~ msgstr "只有主机可以锁定游戏。" #~ msgid "Only the host can lock the game." #~ msgstr "只有主机可以锁定游戏。" #, fuzzy #~ msgid "Only the host can toggle autohost mode." #~ msgstr "只有主机可以锁定游戏。" #~ msgid "Invalid host/port or servername." #~ msgstr "无效的主机/端口或服务器名称。" #~ msgid "Active chat channels:" #~ msgstr "活动的聊天频道:" #~ msgid "no rank" #~ msgstr "没有级别" #, fuzzy #~ msgid "Battle filter is active" #~ msgstr "游戏列表" #~ msgid "Only the host can fix player colours." #~ msgstr "只有主机才能修改玩家颜色。" #~ msgid "Select all" #~ msgstr "全选" #, fuzzy #~ msgid "Add user" #~ msgstr "(%d 名用户)" #, fuzzy #~ msgid "Remove selected" #~ msgstr "模组未选择。" #, fuzzy #~ msgid "you can also enter a ';' seperated list of usernames:" #~ msgstr "输入一个由 ; 分隔开的列表" #, fuzzy #~ msgid "Invalid usernames" #~ msgstr "无效的数字" #, fuzzy #~ msgid "" #~ "A short description of the game, this will show up in the battle list. " #~ "This will be read-only for ladder" #~ msgstr "游戏的简短描述,这将会显示在大厅中的游戏列表中。" #~ msgid "NAT traversal to use. Experimental support." #~ msgstr "使用的NAT穿越方式。不完全支持。" #, fuzzy #~ msgid "Unitsync error" #~ msgstr "UnitSync问题" #~ msgid "You have one or more bots sharing team, this is not possible." #~ msgstr "你有多个AI共用队伍序号,这是不允许的。" #~ msgid "" #~ "Please enter password needed to join this channel, leave blank for no " #~ "passwrd." #~ msgstr "请输入加入该频道所需的密码,保持空白代表无密码。" #~ msgid "Continue if commander dies" #~ msgstr "指挥官被消灭后游戏继续" #~ msgid "End if commander dies" #~ msgstr "指挥官被消灭后游戏结束" #~ msgid "Lineage mode" #~ msgstr "血统模式" #~ msgid "End condition" #~ msgstr "游戏结束条件" #~ msgid "Resources" #~ msgstr "资源" #~ msgid "The amount of metal each player starts with." #~ msgstr "每个玩家游戏开始时拥有的金属" #~ msgid "Start Energy" #~ msgstr "初始能量" #~ msgid "The amount of energy each player starts with." #~ msgstr "每个玩家游戏开始时拥有的能量" #~ msgid "Max units" #~ msgstr "单位数上限" #~ msgid "The maximum number of units allowed per player." #~ msgstr "每个玩家拥有的单位个数" #~ msgid "Limit d-gun" #~ msgstr "限制使用 D-Gun" #~ msgid "Ghosted buildings" #~ msgstr "建筑物残影" #~ msgid "Diminishing metal makers" #~ msgstr "金属转换器效率逐渐减低" #~ msgid "This chat is exclusively for participants of this battle." #~ msgstr "此次聊天仅限本次战斗的参与者内部进行。" #~ msgid "Cannot add bot, maximum number of players already reached." #~ msgstr "无法添加AI,已达到最大玩家个数。" #~ msgid "Max players reached" #~ msgstr "已达到最大玩家个数" #~ msgid "Autoconnect last server" #~ msgstr "自动连接到最近使用的服务器" #~ msgid "Save to:" #~ msgstr "保存到:" #~ msgid "Browse..." #~ msgstr "浏览..." #~ msgid "Choose a directory" #~ msgstr "选择一个目录" #~ msgid "Map/Mod Options" #~ msgstr "地图/模组选项" #~ msgid "Up to Date" #~ msgstr "最新的" #~ msgid "" #~ "\n" #~ "\n" #~ "Would you like to visit a page with instructions on how to download the " #~ "newest version?" #~ msgstr "" #~ "\n" #~ "\n" #~ "你是否想要访问相关介绍/下载最新版本的页面?" #~ msgid "Limit D-Gun" #~ msgstr "限制 D-Gun 使用" #~ msgid "" #~ "Disables commander's D-gun when being too far away from the starting point" #~ msgstr "当指挥官离出生位置过远时禁用 D-Gun" #~ msgid "Ghosted Buildings" #~ msgstr "建筑物虚像" #~ msgid "" #~ "Enemy buildings will leave a ghost image on the map after losing LoS on " #~ "them" #~ msgstr "视野消失后敌方建筑物将会留下一个虚像" #~ msgid "Diminishing MM" #~ msgstr "金属转换器效率逐渐降低" #~ msgid "" #~ "Efficiency of MetalMakers will progressively reduce as much as you build " #~ "them" #~ msgstr "你建造的金属转换器越多,其运行效率就会越低" #~ msgid "Game Ending condition" #~ msgstr "游戏结束条件" #~ msgid "" #~ "The condition that will end the game\n" #~ "0: when all units will be destroyed\n" #~ "1: when the commander will be destroyed\n" #~ "2: lineage mode (see option 1, but given away units will still die" #~ msgstr "" #~ "结束游戏的条件\n" #~ "0:当所有单位都被消灭后\n" #~ "1:当指挥官被消灭后\n" #~ "2:血统模式 (见选项1,但被共享/赠送的单位也会死亡)" #~ msgid "Sets the amount of metal that players will start with" #~ msgstr "设置玩家开始游戏时拥有的金属" #~ msgid "Sets the amount of energy that players will start with" #~ msgstr "设置玩家开始游戏时拥有的能量" #~ msgid "Max Units Allowed" #~ msgstr "最大玩家人数" #~ msgid "" #~ "Sets the maximum amount of units that a player will be allowed to build" #~ msgstr "设置每个玩家最多能够建造的单位个数" #~ msgid "Reset" #~ msgstr "重置" #~ msgid "" #~ "You have bots that are not assingled to startpositions. In the current " #~ "version of spring you are only allowed to use start positions positioning " #~ "them freely is not allowed.\n" #~ "\n" #~ "This will be fixed in next version of Spring." #~ msgstr "" #~ "有的AI未被分配到出生地点。在目前版本的Spring,你只能将它们分配到预设的出生" #~ "地点,随意设置出生地点不被允许。\n" #~ "\n" #~ "这将会在下个版本的Spring中被修正。" #~ msgid "" #~ "You are not using consecutive start position numbers.\n" #~ "\n" #~ "In the current version of spring you are not allowed to skip any " #~ "startpositions. You have to use all consecutive position.\n" #~ "\n" #~ "Example: if you have 2 bots + yourself you have to use start positions " #~ "1,2,3 not 1,3,4 or 2,3,4.\n" #~ "\n" #~ "This will be fixed in next version of Spring." #~ msgstr "" #~ "你没有使用连续的出生地点序号。\n" #~ "\n" #~ "在目前版本的Spring中,你不能跳过任何出生地点。你必须使用连续的出生地点序" #~ "号。\n" #~ "\n" #~ "举例:如果你有两个AI和你自己,你必须使用1,2,3而不是1,3,4或2,3,4。\n" #~ "\n" #~ "这将在下一个版本的Spring中被修正。" #~ msgid "Spring directory" #~ msgstr "Spring 目录" #~ msgid "Default location." #~ msgstr "默认位置。" #~ msgid "The Spring executable is installed in the default location" #~ msgstr "Spring 执行文件被安装在默认位置" #~ msgid "Specify the location of the Spring executable" #~ msgstr "自定义Spring执行文件的位置" #~ msgid "The UnitSync library is installed in the default location" #~ msgstr "UnitSync库被安装在默认位置" #~ msgid "" #~ "SpringLobby is unable to determine your Spring version from the UnitSync " #~ "library.\n" #~ "\n" #~ "You might want to take another look at your settings." #~ msgstr "" #~ "Spring大厅无法从你的UnitSync库判断你的Spring版本。\n" #~ "\n" #~ "你可能需要再次检查你的设置。" #~ msgid "" #~ "Unitsync loading was aborted because your spring data directory is not " #~ "writable. Please check." #~ msgstr "UnitSync载入被中止,因为你的Spring数据目录不可写入。请检查。" #~ msgid "is not supported by the lobby server that requires version" #~ msgstr "不被需要指定版本的大厅服务器所支持" #~ msgid "" #~ "This is the SpringLobby channel, please report any problems you are " #~ "having with SpringLobby here and the friendly developers will help you." #~ msgstr "" #~ "这是SpringLobby频道,如果你使用Spring大厅遇到任何问题,请在这里报告。友善" #~ "的开发者们将会帮助你。" springlobby-0.169/rpm/svn.spec0000600000176000000410000000416412105760300017704 0ustar buildbotwww-data00000000000000# # spec file for package SpringLobby # # Copyright (c) 2007 tc- # This file and all modifications and additions to the pristine # package are under the same license as the package itself. # # Please submit bugfixes or comments via http://trac.springlobby.info/newticket # # norootforbuild Name: SpringLobby Version: 1 Release: 1 Url: http://springlobby.info License: GPL Group: Amusements/Games/Other Autoreqprov: on Summary: A cross-platform lobby for the RTS engine Spring Source: SpringLobby-%{version}-src.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-build #define the minimum version number requied for packages %define req_wxgtk 2.6.0 %define req_automake 1.8 %define req_autoconf 2.59 #dependencies check for mandrake-mandriva %if 0%{?suse_version} Requires: libwxgtk2.6 >= %{req_wxgtk} BuildRequires: gcc-c++ , make, subversion, automake1.8 >= %{req_automake}, autoconf2.5 >= %{req_autoconf}, libwxgtk2.6-devel >= %{req_wxgtk} %endif #dependencies check for SuSe %if 0%{?suse_version} Requires: libwxgtk >= %{req_wxgtk} BuildRequires: gcc-c++ , make, subversion, automake >= %{req_automake}, autoconf >= %{req_autoconf}, libwxgtk-devel >= %{req_wxgtk} %endif #dependencies check for Fedora %if 0%{?fedora_version} Requires: libwxgtk >= %{req_wxgtk} BuildRequires: gcc-c++ , make, subversion, automake >= %{req_automake}, autoconf >= %{req_autoconf}, libwxgtk-devel >= %{req_wxgtk} %endif %description Spring Lobby is a free lobby client for the Spring RTS project. It is implemented in C++, using wxWidgets and is licensed under the GPL. The client will be designed to match the following design goals which are listed in no particular order: Have a very easy to learn and use user interface. Support all platforms supported by Spring engine. Have all the popular features seen in other clients. Have a clean, well designed, and well documented source code. %prep svn co http://svn.springlobby.info/trunk springlobby && cd springlobby ./autogen.sh %build ./configure make %install make install %changelog * Sat Jul 14 2007 - Brain Damage - Initial Version springlobby-0.169/rpm/tarball.spec0000600000176000000410000000523112105760300020513 0ustar buildbotwww-data00000000000000# # spec file for package SpringLobby # # Copyright (c) 2007 tc- # This file and all modifications and additions to the pristine # package are under the same license as the package itself. # # Please submit bugfixes or comments via http://trac.springlobby.info/newticket # # norootforbuild #are we not using suse buildservice? %if ! 0%{?fedora_version} %if ! 0%{?suse_version} %if ! 0%{?mandriva_version} %define noredhat 0 #manual check the distro %if [ -f /etc/mandrake-release ] %define mandriva_version %(cat /etc/mandrake-release|cut -f4 -d" ") %define noredhat 1 %endif %if [ -f /etc/fedora-release ] %define fedora_version %(cat /etc/fedora-release | cut -f4 -d" ") %define noredhat 1 %endif %if [ -f /etc/redhat-release ] %if {noredhat} %define redhat_version %(rpm -qf --queryformat %{VERSION} /etc/redhat-release|tr -d '.') %endif %endif %if [ -f /etc/SuSE-release ] %define suse_version %(grep VERSION /etc/SuSE-release|cut -f3 -d" ") %endif %endif %endif %endif Name: SpringLobby Version: 1 Release: 1 Url: http://springlobby.info License: GPL Group: Amusements/Games/Other Autoreqprov: on Summary: A cross-platform lobby for the RTS engine Spring Source: SpringLobby-%{version}-src.tar.bz2 BuildRoot: %{_tmppath}/%{name}-%{version}-build #define the minimum version number requied for packages %define req_wxgtk 2.6.0 #dependencies check for mandrake-mandriva %if 0%{?suse_version} Requires: libwxgtk2.6 >= %{req_wxgtk} BuildRequires: gcc-c++ , make, libwxgtk2.6-devel >= %{req_wxgtk} %endif #dependencies check for SuSe %if 0%{?suse_version} Requires: libwxgtk >= %{req_wxgtk} BuildRequires: gcc-c++ , make, libwxgtk-devel >= %{req_wxgtk} %endif #dependencies check for Fedora %if 0%{?fedora_version} Requires: libwxgtk >= %{req_wxgtk} BuildRequires: gcc-c++ , make, libwxgtk-devel >= %{req_wxgtk} %endif %description Spring Lobby is a free lobby client for the Spring RTS project. It is implemented in C++, using wxWidgets and is licensed under the GPL. The client will be designed to match the following design goals which are listed in no particular order: Have a very easy to learn and use user interface. Support all platforms supported by Spring engine. Have all the popular features seen in other clients. Have a clean, well designed, and well documented source code. %build ./configure -prefix=/usr make %install make install %changelog * Tue Jul 17 2007 - Brain Damage - Removed useless deps when building from tarball package - Added script to auto-detect build envronment when not using SuSe's buildservice * Sat Jul 14 2007 - Brain Damage - Initial Version springlobby-0.169/src/CMakeLists.txt0000600000176000000410000002171412105760300020753 0ustar buildbotwww-data00000000000000INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) INCLUDE(compat_flags) ADD_DEFINITIONS(-DHAVE_SPRINGLOBBY=1) # Add Definitions, Compiler-Switches, etc.: -Wall -O2 -g3 ... # MSVC compiler (cl.exe) does not accept the same switches as gcc, although preprocessor definitions in the -D form will work for both IF(NOT MSVC) IF( NOT MINGW ) #wxMSW generates > 9000 warnings with -wextra... set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wextra") ENDIF( NOT MINGW ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-strict-aliasing") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-strict-aliasing") ELSE(NOT MSVC) ADD_DEFINITIONS(-D_RC_MSVC) ENDIF(NOT MSVC) if(WIN32) add_definitions( -D__WXMSW__ -D_WIN32_WINNT=0x0501 -DBOOST_THREAD_USE_LIB -DAL_LIBTYPE_STATIC -DSTRICT -DHAVE_W32API_H ) endif(WIN32) set(Boost_USE_MULTITHREADED ON) if( ${CMAKE_CROSSCOMPILING} ) set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_STATIC_RUNTIME ON) endif() FIND_PACKAGE(Boost 1.42.0 COMPONENTS thread system REQUIRED) INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS}) add_to_global(link_directories ${Boost_LIBRARY_DIRS} ${BOOST_LIB_DIR}) ADD_DEFINITIONS( -DLOCALE_INSTALL_DIR="${LOCALE_INSTALL_DIR}" ) #---------------------------------------------------------------------------------------------------- # wxWidgets lib dependency check #---------------------------------------------------------------------------------------------------- # Here you can define, what Libraries of wxWidgets you need for your Application. You can figure out what Libraries you need here: # http://www.wxwidgets.org/manuals/2.8/wx_librarieslist.html # order matters! SET(wxWidgets_USE_LIBS net aui xml qa richtext html adv core base ) # We need the Find package for wxWidgets to work, but auto-find is broken in x-compile setup FIND_PACKAGE(wxWidgets REQUIRED ${wxWidgets_USE_LIBS}) # Did we find wxWidgets ? This condition will fail for as long as the internal Vars do not point to the proper wxWidgets Configuration. IF(wxWidgets_FOUND) INCLUDE(${wxWidgets_USE_FILE}) INCLUDE_DIRECTORIES( ${wxWidgets_INCLUDE_DIRS} ) ELSE(wxWidgets_FOUND) # For Convenience. If we cannot continue, inform the User. MESSAGE( FATAL_ERROR "wxWidgets library not found! Please install the package to continue") ENDIF(wxWidgets_FOUND) execute_process(COMMAND ${wxWidgets_CONFIG_EXECUTABLE} "--cppflags" OUTPUT_VARIABLE WX_CXX_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process(COMMAND ${wxWidgets_CONFIG_EXECUTABLE} "--libs" OUTPUT_VARIABLE WX_LD_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE ) #---------------------------------------------------------------------------------------------------- # openAL libs dependency check #---------------------------------------------------------------------------------------------------- IF( ENABLE_DEBUG_REPORT ) ADD_DEFINITIONS( -DENABLE_DEBUG_REPORT ) IF( MINGW ) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -gstabs") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -gstabs") LINK_LIBRARIES( intl) ENDIF( MINGW ) ENDIF( ENABLE_DEBUG_REPORT ) FIND_PACKAGE( CURL REQUIRED libcurl ) IF( NOT CURL_FOUND ) MESSAGE( FATAL_ERROR "required library libCURL not found" ) ENDIF( NOT CURL_FOUND ) if(DEFINED CURL_CONFIG) # override CURL_LIBRARIES if curl-config is set execute_process(COMMAND ${CURL_CONFIG} "--libs" OUTPUT_VARIABLE CURL_LINKFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE ) set(CURL_LIBRARIES "" CACHE STRING "" FORCE) add_to_global(CURL_LINKFLAGS "${CURL_LINKLIBS}") message(STATUS "${CURL_CONFIG} returned ${CURL_LINKFLAGS} for linking to libcurl") endif() ADD_DEFINITIONS( ${CURL_CFLAGS} ) add_to_global(link_directories ${CURL_LIB_DIRS} ) INCLUDE_DIRECTORIES( ${CURL_INCLUDE_DIR} ) #---------------------------------------------------------------------------------------------------- # libnotify dependency check #---------------------------------------------------------------------------------------------------- IF( OPTION_NOTIFY AND NOT WIN32 ) pkg_check_modules( LIBNOTIFY libnotify ) pkg_check_modules( GLIB glib-2.0 ) IF( LIBNOTIFY_FOUND ) INCLUDE_DIRECTORIES( ${LIBNOTIFY_INCLUDE_DIRS} ) LINK_LIBRARIES( ${LIBNOTIFY_LIBRARIES} ) INCLUDE_DIRECTORIES( ${GLIB_INCLUDE_DIRS} ) LINK_LIBRARIES( ${GLIB_LIBRARIES} ) ADD_DEFINITIONS( -DHAVE_LIBNOTIFY ) ENDIF( LIBNOTIFY_FOUND ) ENDIF( OPTION_NOTIFY AND NOT WIN32 ) #---------------------------------------------------------------------------------------------------- # libalure dependency check #---------------------------------------------------------------------------------------------------- if ( OPTION_SOUND ) message(STATUS "Sound enabled!") find_package(Alure REQUIRED) include_directories(${ALURE_INCLUDE_DIRS}) find_package(OpenAL REQUIRED) else ( OPTION_SOUND ) # Disable sound. message(STATUS "Sound disabled!") add_definitions( -DDISABLE_SOUND ) unset(ALURE_LIBRARIES) unset(OPENAL_LIBRARIES) endif ( OPTION_SOUND ) clear(springlobbySrc) add_sources(springlobbySrc chatpanelmenu.cpp updater/updater.cpp agreementdialog.cpp base64.cpp battle.cpp crc.cpp chatlog.cpp chatpanel.cpp connectwindow.cpp countrycodes.cpp customlistctrl.cpp flagimages.cpp ibattle.cpp iconimagelist.cpp introguide.cpp mainchattab.cpp maindownloadtab.cpp mainwindow.cpp mapctrl.cpp mapgridctrl.cpp mapselectdialog.cpp nicklistctrl.cpp offlinebattle.cpp playback/replaylist.cpp playback/savegamelist.cpp selectusersdialog.cpp server.cpp reconnectdialog.cpp serverevents.cpp singleplayerbattle.cpp singleplayertab.cpp socket.cpp spring.cpp springlobbyapp.cpp springprocess.cpp tasserver.cpp tdfcontainer.cpp ui.cpp user.cpp useractions.cpp userlist.cpp toasterbox/ToasterBox.cpp toasterbox/ToasterBoxWindow.cpp toasterbox/ToasterBoxWindowList.cpp pingthread.cpp iserverevents.cpp ) SET(springlobbySoundsrc sound/alsound.cpp ) clear(SLSharedWithSettings) add_sources(SLSharedWithSettings customizations.cpp Helper/wxTranslationHelper.cpp uiutils.cpp updater/versionchecker.cpp updater/updatehelper.cpp utils/controls.cpp utils/conversion.cpp utils/customdialogs.cpp utils/debug.cpp utils/globalevents.cpp utils/platform.cpp utils/pathlistfactory.cpp utils/sltipwin.cpp utils/uievents.cpp utils/curlhelper.cpp crashreport.cpp globalsmanager.cpp mmoptionmodel.cpp mmoptionswrapper.cpp settings.cpp springunitsynclib.cpp springunitsync.cpp thread.cpp infodialog.cpp gui/windowattributespickle.cpp gui/spinctl/generic/spinctlg.cpp Helper/slconfig.cpp ) FILE( GLOB header "*.h" ) FILE( GLOB header2 "*/*.h" ) # FILE( GLOB header3 "*/*/*.h" ) #grep -lR cpp\"$ * | sed -e "s/\.h/\.cpp/g" clear( templatesources) add_sources( templatesources hosting/battleroommmoptionstab.cxx customvirtlistctrl.cpp downloader/httpdownloader.cpp playback/playbackfilter.cpp playback/playbacklist.cpp playback/playbacklistctrl.cpp playback/playbackthread.cpp playback/playbacktab.cpp utils/stringserializer.cpp ) IF(WIN32) add_sources(SLSharedWithSettings stacktrace.c Helper/listctrl.cpp) ELSE(WIN32) add_sources(SLSharedWithSettings stacktrace.cpp) ENDIF(WIN32) add_library(slcommon STATIC ${SLSharedWithSettings} ) target_link_libraries(slcommon ${wxWidgets_LIBRARIES} ${CURL_LIBRARIES} ) set_target_properties(slcommon PROPERTIES LINK_FLAGS "${CURL_LINKFLAGS}" ) add_subdirectory(aui) add_subdirectory(battlelist) add_subdirectory(channel) add_subdirectory(downloader) add_subdirectory(gui) add_subdirectory(Helper) add_subdirectory(hosting) add_subdirectory(options) add_subdirectory(utils) add_subdirectory(widgets) add_subdirectory(wxkeybinder) set(LSLSERVER OFF CACHE BOOL "disable lsl-server build" FORCE) if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/lsl/CMakeLists.txt") MESSAGE(FATAL_ERROR "lsl/CMakeLists.txt doesn't exist, please run \ngit submodule update --init") else() Add_Subdirectory(lsl) INCLUDE_DIRECTORIES(lsl/src) endif() add_subdirectory(springsettings) set_source_files_properties( ${templatesources} PROPERTIES HEADER_FILE_ONLY 1 ) mylink( ${EXTRA_LIB_DIRS} ${link_directories} ) IF(WIN32) set(springlobby_RC_FILE springlobby.rc) add_subdirectory(updater) ENDIF() ADD_EXECUTABLE(springlobby WIN32 MACOSX_BUNDLE ${springlobbySoundsrc} ${springlobbySrc} ${springlobby_RC_FILE} ) #the updater needs to be build for windows only IF(WIN32) TARGET_LINK_LIBRARIES( springlobby iphlpapi nettle ws2_32 ) install(TARGETS springlobby RUNTIME DESTINATION .) ELSE (WIN32) install(TARGETS springlobby RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin ) #only do this on platforms with awk expected to be installed ADD_CUSTOM_TARGET(test_susynclib ALL COMMAND tools/test-susynclib.awk src/springunitsynclib.cpp WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) ENDIF (WIN32) TARGET_LINK_LIBRARIES(springlobby slcommon libsettings lsl-utils pr-downloader_static ${wxWidgets_LIBRARIES} ${Boost_LIBRARIES} ${ALURE_LIBRARIES} ${OPENAL_LIBRARY} ${CURL_LIBRARIES} ${CURL_LINKFLAGS} ) IF(UNIX) TARGET_LINK_LIBRARIES(springlobby X11) ENDIF(UNIX) add_subdirectory(tests) springlobby-0.169/src/Helper/CMakeLists.txt0000600000176000000410000000022512105760300022164 0ustar buildbotwww-data00000000000000add_sources(springlobbySrc tasclientimport.cpp TextCompletionDatabase.cpp imageviewer.cpp slhtmlwindow.cpp wxtextctrlhist.cpp colorbutton.cpp )springlobby-0.169/src/Helper/TextCompletionDatabase.cpp0000600000176000000410000001001512105760300024531 0ustar buildbotwww-data00000000000000#include "TextCompletionDatabase.hpp" #include #include //-------------------------------------------------------------------------------- /// /// Konstruktor /// //-------------------------------------------------------------------------------- TextCompletionDatabase::TextCompletionDatabase() { } //-------------------------------------------------------------------------------- /// /// Destruktor /// //-------------------------------------------------------------------------------- TextCompletionDatabase::~TextCompletionDatabase() { } //-------------------------------------------------------------------------------- /// /// Returns the current Count of Mapping in the TextCompletionDatabase. /// /// \return /// The current Count of Mapping in the TextCompletionDatabase. /// //-------------------------------------------------------------------------------- unsigned int TextCompletionDatabase::Size() { return hm.size(); } //-------------------------------------------------------------------------------- /// /// Insert an Abbreviation and it's corresponding Mapping into the TextCompletionDatabase /// /// \parem abbreviaton /// The Abbreviation to insert into the TextCompletionDatabase. /// /// \parem mapping /// The Mapping of Abbreviation to insert into the TextCompletionDatabase. /// //-------------------------------------------------------------------------------- void TextCompletionDatabase::Insert_Mapping( const wxString& abbreviation, const wxString& mapping ) { HashMap_String_String::const_iterator iter = hm.find( abbreviation ); if ( iter == hm.end() ) { hm[abbreviation] = mapping; } } //-------------------------------------------------------------------------------- /// /// Delete an Abbreviation and it's corresponding Mapping into the TextCompletionDatabase /// /// \parem abbreviaton /// The Abbreviation to insert into the TextCompletionDatabase. /// //-------------------------------------------------------------------------------- void TextCompletionDatabase::Delete_Mapping( const wxString& abbreviation ) { HashMap_String_String::iterator iter = hm.find( abbreviation ); if ( iter != hm.end() ) { hm.erase( iter ); } } //-------------------------------------------------------------------------------- /// /// Get all Abbreviations, that match the provided Abbreviation. All matching Abbreviations and their corresponding Mapping are returned. /// /// \parem abbreviaton /// The Abbreviation to search for matching Abbreviations already contained in the TextCompletionDatabase. /// /// \return /// A HashMap containing all Matches. /// //-------------------------------------------------------------------------------- HashMap_String_String TextCompletionDatabase::GetMapping( wxString abbreviation ) { HashMap_String_String hashmap; // Search for all Abbreviations, containing the provided one. // The Regex Container wxRegEx regex_Abbreviations; // We build the regular Expression: // We need to escape all regular Expression Characters, that have a special Meaning abbreviation.Replace( _T("["), _T("\\[") ); abbreviation.Replace( _T("]"), _T("\\]") ); wxString regex_Text; regex_Text.append( abbreviation ); regex_Text.append( wxT( ".*" ) ); // We compile the regular Expression and if it's correct, we store it in the Regex Container #ifdef wxHAS_REGEX_ADVANCED regex_Abbreviations.Compile( regex_Text, wxRE_ADVANCED | wxRE_ICASE ); #else regex_Abbreviations.Compile( regex_Text, wxRE_EXTENDED | wxRE_ICASE ); #endif // Now we iterate over all stored Abbreviations and search for Abbreviations containing the provided Abbreviation // std::cout << "Abbr: (" << abbreviation.char_str() << ")" << std::endl; for ( HashMap_String_String::const_iterator iter = hm.begin() ; iter != hm.end() ; ++iter ) { // std::cout << "iter->first: (" << iter->first.char_str() << ")" << std::endl; if ( regex_Abbreviations.Matches( iter->first ) ) { // std::cout << "Match found!" << std::endl; hashmap[ iter->first ] = iter->second; } } return hashmap; } springlobby-0.169/src/Helper/TextCompletionDatabase.hpp0000600000176000000410000000114512105760300024542 0ustar buildbotwww-data00000000000000#ifndef TEXTCOMPLETIONDATABASE_HPP #define TEXTCOMPLETIONDATABASE_HPP // wxWidgets #include #include WX_DECLARE_STRING_HASH_MAP( wxString, HashMap_String_String ); class TextCompletionDatabase { private: HashMap_String_String hm; public: TextCompletionDatabase(); virtual ~TextCompletionDatabase(); unsigned int Size(); void Insert_Mapping( const wxString& abbreviation, const wxString& mapping ); void Delete_Mapping( const wxString& abbreviation ); HashMap_String_String GetMapping( wxString text ); protected: }; #endif // TEXTCOMPLETIONDATABASE_HPP springlobby-0.169/src/Helper/colorbutton.cpp0000600000176000000410000000411312105760300022502 0ustar buildbotwww-data00000000000000#include "colorbutton.h" #include "../uiutils.h" #include "../utils/controls.h" #include #ifdef __WXMSW__ #include "../images/colourbox.xpm" #endif ColorButton::ColorButton(wxWindow* parent, wxWindowID id, const wxBitmap& bitmap, const wxPoint& pos , const wxSize& size , long style , const wxValidator& validator, const wxString& name ) : wxBitmapButton( parent, id, bitmap, pos , size , style , validator, name ), m_size(size), m_color() { //ctor } ColorButton::ColorButton(wxWindow* parent, wxWindowID id, const wxColour& color, const wxPoint& pos , const wxSize& size , long style , const wxValidator& validator, const wxString& name ) : wxBitmapButton( parent, id, wxBitmap(), pos , size , style , validator, name ), m_size(size),m_color(color) { SetColor( color ); } ColorButton::~ColorButton() { //dtor } wxColour ColorButton::GetColor( ) { return m_color; } void ColorButton::SetColor( const wxColour& color ) { m_color = color; SetBitmapLabel ( GetBitmapFromColor( color ) ); #ifdef __WXMSW__ SetBackgroundColour( GetDefaultAttributes().colBg ); #endif } wxBitmap ColorButton::GetBitmapFromColor( const wxColour& colour ) { #ifdef __WXMSW__ wxImage img( colourbox_xpm ); img.Replace( 1, 1, 1, colour.Red(), colour.Green(), colour.Blue() ); int r,g,b; r = colour.Red()+80; g = colour.Green()+80; b = colour.Blue()+80; img.Replace( 2, 2, 2, r>255?255:r, g>255?255:g, b>255?255:b ); return wxBitmap ( img ); #else unsigned int h = m_size.GetHeight() > 0 ? m_size.GetHeight() : CONTROL_HEIGHT; unsigned int w = m_size.GetWidth() > 0 ? m_size.GetWidth() : m_size.GetHeight(); wxImage img ( w, h, true ); unsigned char* data = img.GetData(); unsigned int pixels = w * h; for (unsigned int i = 0; i < pixels*3; i+=3) { data[i] = colour.Red(); data[i+1] = colour.Green(); data[i+2] = colour.Blue(); } return wxBitmap ( img ); #endif } springlobby-0.169/src/Helper/colorbutton.h0000600000176000000410000000333012105760300022147 0ustar buildbotwww-data00000000000000#ifndef SL_HEADERGUARD_COLORBUTTON_H #define SL_HEADERGUARD_COLORBUTTON_H #include //! a wxBitmapButton whose Bitmap is a rectangle with uni color solid fill class ColorButton : public wxBitmapButton { public: ColorButton(wxWindow* parent, wxWindowID id, const wxBitmap& bitmap = wxBitmap(), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxBU_AUTODRAW, const wxValidator& validator = wxDefaultValidator, const wxString& name = _T("button") ); ColorButton(wxWindow* parent, wxWindowID id, const wxColour& color, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxBU_AUTODRAW, const wxValidator& validator = wxDefaultValidator, const wxString& name = _T("button") ); virtual ~ColorButton(); void SetColor( const wxColour& color ); wxColour GetColor( ); protected: wxSize m_size; wxColour m_color; wxBitmap GetBitmapFromColor( const wxColour& color ); }; #endif // SL_HEADERGUARD_COLORBUTTON_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/Helper/imageviewer.cpp0000600000176000000410000001240612105760300022440 0ustar buildbotwww-data00000000000000#include "imageviewer.h" #include //#include //#include #include #include //#include #include #include #include #include #include #include #include "../utils/customdialogs.h" #include "../uiutils.h" BEGIN_EVENT_TABLE( ImagePanel, wxPanel ) EVT_PAINT(ImagePanel::OnPaint) EVT_SIZE( ImagePanel::OnSize) END_EVENT_TABLE() BEGIN_EVENT_TABLE( ImageViewerPanel, wxPanel ) EVT_BUTTON( ImageViewerPanel::ID_NEXT, ImageViewerPanel::OnNext ) EVT_BUTTON( ImageViewerPanel::ID_DELETE, ImageViewerPanel::OnDelete ) EVT_BUTTON( ImageViewerPanel::ID_PREV, ImageViewerPanel::OnPrev ) EVT_BUTTON( ImageViewerPanel::ID_SAVE_AS, ImageViewerPanel::OnSaveAs ) END_EVENT_TABLE() ImagePanel::ImagePanel( const wxString& file, wxWindow* parent, wxWindowID id ) : wxPanel( parent, id ), m_file( file ) {} ImagePanel::ImagePanel( wxWindow* parent, wxWindowID id ) : wxPanel( parent, id ) {} ImagePanel::~ImagePanel() {} void ImagePanel::SetBitmap( const wxString& file ) { m_file = file; wxPaintEvent p; OnPaint( p ); } void ImagePanel::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc( this ); dc.Clear(); wxImage im; if ( !im.LoadFile( m_file ) ) return; wxSize c_sz = GetClientSize(); wxSize im_sz ( im.GetWidth(), im.GetHeight() ); im_sz = MakeFit( im_sz, c_sz ); dc.DrawBitmap( wxBitmap(im.Rescale( im_sz.GetWidth(), im_sz.GetHeight() ) ), 0, 0, true /* use mask */ ); } void ImagePanel::OnSize(wxSizeEvent& WXUNUSED(event)) { wxPaintEvent p; OnPaint( p ); } ImageViewerPanel::ImageViewerPanel(const wxArrayString& filenames, bool enable_delete, wxWindow* parent, wxWindowID id, long /*style*/ ) : wxPanel ( parent, id, wxDefaultPosition, wxDefaultSize ), m_filenames( filenames ), m_current_file_index( 0 ), m_num_files( filenames.Count() ), m_enable_delete( enable_delete ), m_delete( 0 ) { m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_button_sizer = new wxBoxSizer( wxHORIZONTAL ); m_panel = new ImagePanel( this, -1 ); m_main_sizer->Add( m_panel, 1, wxEXPAND | wxALL, 0 ); m_prev = new wxButton( this, ID_PREV, _("previous") ); m_button_sizer->Add( m_prev, 0, wxALL, 5 ); m_next = new wxButton( this, ID_NEXT, _("next") ); m_button_sizer->Add( m_next, 0, wxALL, 5 ); if ( m_enable_delete ) { m_delete = new wxButton( this, ID_DELETE, _("delete") ); m_button_sizer->Add( m_delete, 0, wxALL, 5 ); } m_save_as = new wxButton( this, ID_SAVE_AS, _("save as") ); m_button_sizer->Add( m_save_as, 0, wxALL, 5 ); m_main_sizer->Add( m_button_sizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 0 ); SetSizer( m_main_sizer ); SetButtonStates(); SetImage(); Layout(); m_panel->Refresh(); } ImageViewerPanel::~ImageViewerPanel() { } void ImageViewerPanel::SetButtonStates() { m_next->Enable( m_current_file_index < m_num_files -1 ); m_prev->Enable( m_current_file_index > 0 ); if ( m_delete ) m_delete->Enable( m_num_files > 0 ); m_save_as->Enable( m_num_files > 0 ); } void ImageViewerPanel::SetImage() { SetButtonStates(); m_panel->SetBitmap( m_filenames[m_current_file_index] ); // SetTitle( m_filenames[m_current_file_index] ); } void ImageViewerPanel::OnNext( wxCommandEvent& /*evt*/ ) { m_current_file_index++; SetImage(); } void ImageViewerPanel::OnDelete( wxCommandEvent& /*evt*/ ) { wxString file = m_filenames[m_current_file_index]; if ( wxRemoveFile( file ) ) { m_filenames.RemoveAt( m_current_file_index ); m_num_files--; if ( m_current_file_index > m_num_files -1 ) m_current_file_index--; SetImage(); } else { customMessageBoxNoModal( SL_MAIN_ICON, _("couldn't remove file"), _("Error") ); } } void ImageViewerPanel::OnPrev( wxCommandEvent& /*evt*/ ) { m_current_file_index--; SetImage(); } void ImageViewerPanel::OnSaveAs( wxCommandEvent& /*evt*/ ) { wxString ext = m_filenames[m_current_file_index].AfterLast( '.' ); wxString mask = _T("*.") + ext; wxFileDialog fd( this, _("Choose a filename"), _T(""), _T(""), mask, wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); if ( fd.ShowModal() == wxID_OK ) { wxString new_file = fd.GetPath(); if ( !new_file.EndsWith( ext ) ) new_file += _T(".") + ext; if ( wxCopyFile( m_filenames[m_current_file_index], new_file ) ) { customMessageBoxNoModal( SL_MAIN_ICON, _("File successfully saved"), _("Success") ); } else { customMessageBoxNoModal( SL_MAIN_ICON, _("Couldn't save file"), _("Error") ); } } } ImageViewerDialog::ImageViewerDialog(const wxArrayString& filenames, bool enable_delete, wxWindow* parent, wxWindowID id, const wxString& title, long style ) : wxDialog ( parent, id, title, wxDefaultPosition, wxDefaultSize, style) { m_main_sizer = new wxBoxSizer( wxVERTICAL ); long p_style = 0; m_imageviewer_panel = new ImageViewerPanel( filenames, enable_delete, this, -1,p_style ); m_main_sizer->Add( m_imageviewer_panel, 1, wxEXPAND|wxALIGN_CENTER, 0 ); SetSizer( m_main_sizer ); } springlobby-0.169/src/Helper/imageviewer.h0000600000176000000410000000470312105760300022106 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_IMAGEVIEWER_H_INCLUDED #define SPRINGLOBBY_IMAGEVIEWER_H_INCLUDED #include #include class wxPaintEvent; class SL_JPEGHandler;//this would be a custom jpeg handler with better resizing implemented class wxPaintDC; //! panel displaying bitmap loaded from file class ImagePanel : public wxPanel { public: ImagePanel( const wxString& file, wxWindow* parent, wxWindowID id ); ImagePanel( wxWindow* parent, wxWindowID id ); virtual ~ImagePanel(); void SetBitmap( const wxString& file ); protected: wxString m_file; // SL_JPEGHandler* m_jpeg_handler; void OnPaint(wxPaintEvent& WXUNUSED(event)); void OnSize(wxSizeEvent& WXUNUSED(event)); DECLARE_EVENT_TABLE() }; class wxBoxSizer; class wxButton; //! panel containing a ImagePanel plus navigation buttons to view a list of filenames class ImageViewerPanel : public wxPanel { public: ImageViewerPanel(const wxArrayString& filenames, bool enable_delete, wxWindow* parent, wxWindowID id, long style ); virtual ~ImageViewerPanel(); protected: wxArrayString m_filenames; unsigned int m_current_file_index; unsigned int m_num_files; bool m_enable_delete; wxBoxSizer* m_main_sizer; wxBoxSizer* m_button_sizer; wxButton* m_next; wxButton* m_prev; wxButton* m_delete; wxButton* m_save_as; ImagePanel* m_panel; void OnNext( wxCommandEvent& evt ); void OnDelete( wxCommandEvent& evt ); void OnPrev( wxCommandEvent& evt ); void OnSaveAs( wxCommandEvent& evt ); void SetButtonStates(); void SetImage(); enum { ID_DELETE, ID_NEXT, ID_PREV, ID_SAVE_AS }; DECLARE_EVENT_TABLE() }; //! dialog used as container for ImageViewerPanel, eg for screenshots filenames retrieved via Unitsysnc class ImageViewerDialog : public wxDialog { public: ImageViewerDialog(const wxArrayString& filenames, bool enable_delete, wxWindow* parent, wxWindowID id, const wxString& title = _T(""), long style = wxCAPTION | wxRESIZE_BORDER | wxCLOSE_BOX | wxMAXIMIZE_BOX | wxMINIMIZE_BOX | wxDEFAULT_DIALOG_STYLE ); virtual ~ImageViewerDialog(){} protected: ImageViewerPanel* m_imageviewer_panel; wxBoxSizer* m_main_sizer; }; #endif // SPRINGLOBBY_IMAGEVIEWER_H_INCLUDED springlobby-0.169/src/Helper/listctrl.cpp0000600000176000000410000050235512105760300022003 0ustar buildbotwww-data00000000000000///////////////////////////////////////////////////////////////////////////// // Name: src/generic/listctrl.cpp // Purpose: generic implementation of wxListCtrl // Author: Robert Roebling // Vadim Zeitlin (virtual list control support) // Id: $Id: listctrl.cpp 8318 2008-04-01 18:41:23Z gonosztopi $ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // TODO // // 1. we need to implement searching/sorting for virtual controls somehow // 2. when changing selection the lines are refreshed twice // For compilers that support precompilation, includes "wx.h". #include #ifdef __BORLANDC__ #pragma hdrstop #endif #if wxUSE_LISTCTRL #include "listctrl.h" #ifndef WX_PRECOMP #include #include #include #include #include #include #include #endif #include #include #include #include #ifdef __WXMAC__ #include #endif // NOTE: If using the wxListBox visual attributes works everywhere then this can // be removed, as well as the #else case below. #define _USE_VISATTR 0 namespace SL_Extern { // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- // // the height of the header window (FIXME: should depend on its font!) // static const int HEADER_HEIGHT = 23; static const int SCROLL_UNIT_X = 15; // the spacing between the lines (in report mode) static const int LINE_SPACING = 0; // extra margins around the text label #ifdef __WXGTK__ static const int EXTRA_WIDTH = 6; #else static const int EXTRA_WIDTH = 4; #endif static const int EXTRA_HEIGHT = 4; // margin between the window and the items static const int EXTRA_BORDER_X = 2; static const int EXTRA_BORDER_Y = 2; // offset for the header window static const int HEADER_OFFSET_X = 0; static const int HEADER_OFFSET_Y = 0; // margin between rows of icons in [small] icon view static const int MARGIN_BETWEEN_ROWS = 6; // when autosizing the columns, add some slack static const int AUTOSIZE_COL_MARGIN = 10; // default width for the header columns static const int WIDTH_COL_DEFAULT = 80; // the space between the image and the text in the report mode static const int IMAGE_MARGIN_IN_REPORT_MODE = 5; // the space between the image and the text in the report mode in header static const int HEADER_IMAGE_MARGIN_IN_REPORT_MODE = 2; // ============================================================================ // private classes // ============================================================================ //----------------------------------------------------------------------------- // wxColWidthInfo (internal) //----------------------------------------------------------------------------- struct wxColWidthInfo { int nMaxWidth; bool bNeedsUpdate; // only set to true when an item whose // width == nMaxWidth is removed wxColWidthInfo(int w = 0, bool needsUpdate = false) { nMaxWidth = w; bNeedsUpdate = needsUpdate; } }; WX_DEFINE_ARRAY_PTR(wxColWidthInfo *, ColWidthArray); //----------------------------------------------------------------------------- // wxListItemData (internal) //----------------------------------------------------------------------------- class wxListItemData { public: wxListItemData(wxListMainWindow *owner); ~wxListItemData(); void SetItem( const wxListItem &info ); void SetImage( int image ) { m_image = image; } void SetData( wxUIntPtr data ) { m_data = data; } void SetPosition( int x, int y ); void SetSize( int width, int height ); bool HasText() const { return !m_text.empty(); } const wxString& GetText() const { return m_text; } void SetText(const wxString& text) { m_text = text; } // we can't use empty string for measuring the string width/height, so // always return something wxString GetTextForMeasuring() const { wxString s = GetText(); if ( s.empty() ) s = _T('H'); return s; } bool IsHit( int x, int y ) const; int GetX() const; int GetY() const; int GetWidth() const; int GetHeight() const; int GetImage() const { return m_image; } bool HasImage() const { return GetImage() != -1; } void GetItem( wxListItem &info ) const; void SetAttr(wxListItemAttr *attr) { m_attr = attr; } wxListItemAttr *GetAttr() const { return m_attr; } public: // the item image or -1 int m_image; // user data associated with the item wxUIntPtr m_data; // the item coordinates are not used in report mode; instead this pointer is // NULL and the owner window is used to retrieve the item position and size wxRect *m_rect; // the list ctrl we are in wxListMainWindow *m_owner; // custom attributes or NULL wxListItemAttr *m_attr; protected: // common part of all ctors void Init(); wxString m_text; }; //----------------------------------------------------------------------------- // wxListHeaderData (internal) //----------------------------------------------------------------------------- class wxListHeaderData : public wxObject { public: wxListHeaderData(); wxListHeaderData( const wxListItem &info ); void SetItem( const wxListItem &item ); void SetPosition( int x, int y ); void SetWidth( int w ); void SetState( int state ); void SetFormat( int format ); void SetHeight( int h ); bool HasImage() const; bool HasText() const { return !m_text.empty(); } const wxString& GetText() const { return m_text; } void SetText(const wxString& text) { m_text = text; } void GetItem( wxListItem &item ); bool IsHit( int x, int y ) const; int GetImage() const; int GetWidth() const; int GetFormat() const; int GetState() const; protected: long m_mask; int m_image; wxString m_text; int m_format; int m_width; int m_xpos, m_ypos; int m_height; int m_state; private: void Init(); }; //----------------------------------------------------------------------------- // wxListLineData (internal) //----------------------------------------------------------------------------- WX_DECLARE_LIST(wxListItemData, wxListItemDataList); #include "wx/listimpl.cpp" WX_DEFINE_LIST(wxListItemDataList) class wxListLineData { public: // the list of subitems: only may have more than one item in report mode wxListItemDataList m_items; // this is not used in report view struct GeometryInfo { // total item rect wxRect m_rectAll; // label only wxRect m_rectLabel; // icon only wxRect m_rectIcon; // the part to be highlighted wxRect m_rectHighlight; // extend all our rects to be centered inside the one of given width void ExtendWidth(wxCoord w) { wxASSERT_MSG( m_rectAll.width <= w, _T("width can only be increased") ); m_rectAll.width = w; m_rectLabel.x = m_rectAll.x + (w - m_rectLabel.width) / 2; m_rectIcon.x = m_rectAll.x + (w - m_rectIcon.width) / 2; m_rectHighlight.x = m_rectAll.x + (w - m_rectHighlight.width) / 2; } } *m_gi; // is this item selected? [NB: not used in virtual mode] bool m_highlighted; // back pointer to the list ctrl wxListMainWindow *m_owner; public: wxListLineData(wxListMainWindow *owner); ~wxListLineData() { WX_CLEAR_LIST(wxListItemDataList, m_items); delete m_gi; } // are we in report mode? inline bool InReportView() const; // are we in virtual report mode? inline bool IsVirtual() const; // these 2 methods shouldn't be called for report view controls, in that // case we determine our position/size ourselves // calculate the size of the line void CalculateSize( wxDC *dc, int spacing ); // remember the position this line appears at void SetPosition( int x, int y, int spacing ); // wxListCtrl API void SetImage( int image ) { SetImage(0, image); } int GetImage() const { return GetImage(0); } void SetImage( int index, int image ); int GetImage( int index ) const; bool HasImage() const { return GetImage() != -1; } bool HasText() const { return !GetText(0).empty(); } void SetItem( int index, const wxListItem &info ); void GetItem( int index, wxListItem &info ); wxString GetText(int index) const; void SetText( int index, const wxString& s ); wxListItemAttr *GetAttr() const; void SetAttr(wxListItemAttr *attr); // return true if the highlighting really changed bool Highlight( bool on ); void ReverseHighlight(); bool IsHighlighted() const { wxASSERT_MSG( !IsVirtual(), _T("unexpected call to IsHighlighted") ); return m_highlighted; } // draw the line on the given DC in icon/list mode void Draw( wxDC *dc ); // the same in report mode void DrawInReportMode( wxDC *dc, const wxRect& rect, const wxRect& rectHL, bool highlighted ); private: // set the line to contain num items (only can be > 1 in report mode) void InitItems( int num ); // get the mode (i.e. style) of the list control inline int GetMode() const; // prepare the DC for drawing with these item's attributes, return true if // we need to draw the items background to highlight it, false otherwise bool SetAttributes(wxDC *dc, const wxListItemAttr *attr, bool highlight); // draw the text on the DC with the correct justification; also add an // ellipsis if the text is too large to fit in the current width void DrawTextFormatted(wxDC *dc, const wxString &text, int col, int x, int yMid, // this is middle, not top, of the text int width); }; WX_DECLARE_OBJARRAY(wxListLineData, wxListLineDataArray); #include WX_DEFINE_OBJARRAY(wxListLineDataArray) //----------------------------------------------------------------------------- // wxListHeaderWindow (internal) //----------------------------------------------------------------------------- class wxListHeaderWindow : public wxWindow { protected: wxListMainWindow *m_owner; const wxCursor *m_currentCursor; wxCursor *m_resizeCursor; bool m_isDragging; // column being resized or -1 int m_column; // divider line position in logical (unscrolled) coords int m_currentX; // minimal position beyond which the divider line // can't be dragged in logical coords int m_minX; public: wxListHeaderWindow(); wxListHeaderWindow( wxWindow *win, wxWindowID id, wxListMainWindow *owner, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = 0, const wxString &name = wxT("wxlistctrlcolumntitles") ); virtual ~wxListHeaderWindow(); void DrawCurrent(); void AdjustDC( wxDC& dc ); void OnPaint( wxPaintEvent &event ); void OnMouse( wxMouseEvent &event ); void OnSetFocus( wxFocusEvent &event ); // needs refresh bool m_dirty; private: // common part of all ctors void Init(); // generate and process the list event of the given type, return true if // it wasn't vetoed, i.e. if we should proceed bool SendListEvent(wxEventType type, const wxPoint& pos); // DECLARE_DYNAMIC_CLASS(wxListHeaderWindow) DECLARE_EVENT_TABLE() }; //----------------------------------------------------------------------------- // wxListRenameTimer (internal) //----------------------------------------------------------------------------- class wxListRenameTimer: public wxTimer { private: wxListMainWindow *m_owner; public: wxListRenameTimer( wxListMainWindow *owner ); void Notify(); }; //----------------------------------------------------------------------------- // wxListTextCtrlWrapper: wraps a wxTextCtrl to make it work for inline editing //----------------------------------------------------------------------------- class wxListTextCtrlWrapper : public wxEvtHandler { public: // NB: text must be a valid object but not Create()d yet wxListTextCtrlWrapper(wxListMainWindow *owner, wxTextCtrl *text, size_t itemEdit); wxTextCtrl *GetText() const { return m_text; } void AcceptChangesAndFinish(); protected: void OnChar( wxKeyEvent &event ); void OnKeyUp( wxKeyEvent &event ); void OnKillFocus( wxFocusEvent &event ); bool AcceptChanges(); void Finish(); private: wxListMainWindow *m_owner; wxTextCtrl *m_text; wxString m_startValue; size_t m_itemEdited; bool m_finished; bool m_aboutToFinish; DECLARE_EVENT_TABLE() }; //----------------------------------------------------------------------------- // wxListMainWindow (internal) //----------------------------------------------------------------------------- WX_DECLARE_LIST(wxListHeaderData, wxListHeaderDataList); #include "wx/listimpl.cpp" WX_DEFINE_LIST(wxListHeaderDataList) class wxListMainWindow : public wxScrolledWindow { public: wxListMainWindow(); wxListMainWindow( wxWindow *parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0, const wxString &name = _T("listctrlmainwindow") ); virtual ~wxListMainWindow(); bool HasFlag(int flag) const { return m_parent->HasFlag(flag); } // return true if this is a virtual list control bool IsVirtual() const { return HasFlag(wxLC_VIRTUAL); } // return true if the control is in report mode bool InReportView() const { return HasFlag(wxLC_REPORT); } // return true if we are in single selection mode, false if multi sel bool IsSingleSel() const { return HasFlag(wxLC_SINGLE_SEL); } // do we have a header window? bool HasHeader() const { return InReportView() && !HasFlag(wxLC_NO_HEADER); } void HighlightAll( bool on ); // all these functions only do something if the line is currently visible // change the line "selected" state, return true if it really changed bool HighlightLine( size_t line, bool highlight = true); // as HighlightLine() but do it for the range of lines: this is incredibly // more efficient for virtual list controls! // // NB: unlike HighlightLine() this one does refresh the lines on screen void HighlightLines( size_t lineFrom, size_t lineTo, bool on = true ); // toggle the line state and refresh it void ReverseHighlight( size_t line ) { HighlightLine(line, !IsHighlighted(line)); RefreshLine(line); } // return true if the line is highlighted bool IsHighlighted(size_t line) const; // refresh one or several lines at once void RefreshLine( size_t line ); void RefreshLines( size_t lineFrom, size_t lineTo ); // refresh all selected items void RefreshSelected(); // refresh all lines below the given one: the difference with // RefreshLines() is that the index here might not be a valid one (happens // when the last line is deleted) void RefreshAfter( size_t lineFrom ); // the methods which are forwarded to wxListLineData itself in list/icon // modes but are here because the lines don't store their positions in the // report mode // get the bound rect for the entire line wxRect GetLineRect(size_t line) const; // get the bound rect of the label wxRect GetLineLabelRect(size_t line) const; // get the bound rect of the items icon (only may be called if we do have // an icon!) wxRect GetLineIconRect(size_t line) const; // get the rect to be highlighted when the item has focus wxRect GetLineHighlightRect(size_t line) const; // get the size of the total line rect wxSize GetLineSize(size_t line) const { return GetLineRect(line).GetSize(); } // return the hit code for the corresponding position (in this line) long HitTestLine(size_t line, int x, int y) const; // bring the selected item into view, scrolling to it if necessary void MoveToItem(size_t item); // bring the current item into view void MoveToFocus() { MoveToItem(m_current); } // start editing the label of the given item wxTextCtrl *EditLabel(long item, wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl)); wxTextCtrl *GetEditControl() const { return m_textctrlWrapper ? m_textctrlWrapper->GetText() : NULL; } void FinishEditing(wxTextCtrl *text) { delete text; m_textctrlWrapper = NULL; SetFocusIgnoringChildren(); } // suspend/resume redrawing the control void Freeze(); void Thaw(); void OnRenameTimer(); bool OnRenameAccept(size_t itemEdit, const wxString& value); void OnRenameCancelled(size_t itemEdit); void OnMouse( wxMouseEvent &event ); // called to switch the selection from the current item to newCurrent, void OnArrowChar( size_t newCurrent, const wxKeyEvent& event ); void OnChar( wxKeyEvent &event ); void OnKeyDown( wxKeyEvent &event ); void OnKeyUp( wxKeyEvent &event ); void OnSetFocus( wxFocusEvent &event ); void OnKillFocus( wxFocusEvent &event ); void OnScroll( wxScrollWinEvent& event ); void OnPaint( wxPaintEvent &event ); void DrawImage( int index, wxDC *dc, int x, int y ); void GetImageSize( int index, int &width, int &height ) const; int GetTextLength( const wxString &s ) const; void SetImageList( wxImageList *imageList, int which ); void SetItemSpacing( int spacing, bool isSmall = false ); int GetItemSpacing( bool isSmall = false ); void SetColumn( int col, wxListItem &item ); void SetColumnWidth( int col, int width ); void GetColumn( int col, wxListItem &item ) const; int GetColumnWidth( int col ) const; int GetColumnCount() const { return m_columns.GetCount(); } // returns the sum of the heights of all columns int GetHeaderWidth() const; int GetCountPerPage() const; void SetItem( wxListItem &item ); void GetItem( wxListItem &item ) const; void SetItemState( long item, long state, long stateMask ); void SetItemStateAll( long state, long stateMask ); int GetItemState( long item, long stateMask ) const; void GetItemRect( long index, wxRect &rect ) const; wxRect GetViewRect() const; bool GetItemPosition( long item, wxPoint& pos ) const; int GetSelectedItemCount() const; wxString GetItemText(long item) const { wxListItem info; info.m_mask = wxLIST_MASK_TEXT; info.m_itemId = item; GetItem( info ); return info.m_text; } void SetItemText(long item, const wxString& value) { wxListItem info; info.m_mask = wxLIST_MASK_TEXT; info.m_itemId = item; info.m_text = value; SetItem( info ); } // set the scrollbars and update the positions of the items void RecalculatePositions(bool noRefresh = false); // refresh the window and the header void RefreshAll(); long GetNextItem( long item, int geometry, int state ) const; void DeleteItem( long index ); void DeleteAllItems(); void DeleteColumn( int col ); void DeleteEverything(); void EnsureVisible( long index ); long FindItem( long start, const wxString& str, bool partial = false ); long FindItem( long start, wxUIntPtr data); long FindItem( const wxPoint& pt ); long HitTest( int x, int y, int &flags ) const; void InsertItem( wxListItem &item ); void InsertColumn( long col, wxListItem &item ); int GetItemWidthWithImage(wxListItem * item); void SortItems( wxListCtrlCompare fn, long data ); size_t GetItemCount() const; bool IsEmpty() const { return GetItemCount() == 0; } void SetItemCount(long count); // change the current (== focused) item, send a notification event void ChangeCurrent(size_t current); void ResetCurrent() { ChangeCurrent((size_t)-1); } bool HasCurrent() const { return m_current != (size_t)-1; } // send out a wxListEvent void SendNotify( size_t line, wxEventType command, const wxPoint& point = wxDefaultPosition ); // override base class virtual to reset m_lineHeight when the font changes virtual bool SetFont(const wxFont& font) { if ( !wxScrolledWindow::SetFont(font) ) return false; m_lineHeight = 0; return true; } // these are for wxListLineData usage only // get the backpointer to the list ctrl wxGenericListCtrl *GetListCtrl() const { return wxStaticCast(GetParent(), wxGenericListCtrl); } // get the height of all lines (assuming they all do have the same height) wxCoord GetLineHeight() const; // get the y position of the given line (only for report view) wxCoord GetLineY(size_t line) const; // get the brush to use for the item highlighting wxBrush *GetHighlightBrush() const { return m_hasFocus ? m_highlightBrush : m_highlightUnfocusedBrush; } bool HasFocus() const { return m_hasFocus; } //protected: // the array of all line objects for a non virtual list control (for the // virtual list control we only ever use m_lines[0]) wxListLineDataArray m_lines; // the list of column objects wxListHeaderDataList m_columns; // currently focused item or -1 size_t m_current; // the number of lines per page int m_linesPerPage; // this flag is set when something which should result in the window // redrawing happens (i.e. an item was added or deleted, or its appearance // changed) and OnPaint() doesn't redraw the window while it is set which // allows to minimize the number of repaintings when a lot of items are // being added. The real repainting occurs only after the next OnIdle() // call bool m_dirty; wxColour *m_highlightColour; wxImageList *m_small_image_list; wxImageList *m_normal_image_list; int m_small_spacing; int m_normal_spacing; bool m_hasFocus; bool m_lastOnSame; wxTimer *m_renameTimer; bool m_isCreated; int m_dragCount; wxPoint m_dragStart; ColWidthArray m_aColWidths; // for double click logic size_t m_lineLastClicked, m_lineBeforeLastClicked, m_lineSelectSingleOnUp; protected: wxWindow *GetMainWindowOfCompositeControl() { return GetParent(); } // the total count of items in a virtual list control size_t m_countVirt; // the object maintaining the items selection state, only used in virtual // controls wxSelectionStore m_selStore; // common part of all ctors void Init(); // get the line data for the given index wxListLineData *GetLine(size_t n) const { wxASSERT_MSG( n != (size_t)-1, _T("invalid line index") ); if ( IsVirtual() ) { wxConstCast(this, wxListMainWindow)->CacheLineData(n); n = 0; } return &m_lines[n]; } // get a dummy line which can be used for geometry calculations and such: // you must use GetLine() if you want to really draw the line wxListLineData *GetDummyLine() const; // cache the line data of the n-th line in m_lines[0] void CacheLineData(size_t line); // get the range of visible lines void GetVisibleLinesRange(size_t *from, size_t *to); // force us to recalculate the range of visible lines void ResetVisibleLinesRange() { m_lineFrom = (size_t)-1; } // get the colour to be used for drawing the rules wxColour GetRuleColour() const { return wxSystemSettings::GetColour(wxSYS_COLOUR_3DLIGHT); } private: // initialize the current item if needed void UpdateCurrent(); // delete all items but don't refresh: called from dtor void DoDeleteAllItems(); // the height of one line using the current font wxCoord m_lineHeight; // the total header width or 0 if not calculated yet wxCoord m_headerWidth; // the first and last lines being shown on screen right now (inclusive), // both may be -1 if they must be calculated so never access them directly: // use GetVisibleLinesRange() above instead size_t m_lineFrom, m_lineTo; // the brushes to use for item highlighting when we do/don't have focus wxBrush *m_highlightBrush, *m_highlightUnfocusedBrush; // if this is > 0, the control is frozen and doesn't redraw itself size_t m_freezeCount; // wrapper around the text control currently used for in place editing or // NULL if no item is being edited wxListTextCtrlWrapper *m_textctrlWrapper; //DECLARE_DYNAMIC_CLASS(wxListMainWindow) DECLARE_EVENT_TABLE() friend class wxGenericListCtrl; }; wxListItemData::~wxListItemData() { // in the virtual list control the attributes are managed by the main // program, so don't delete them if ( !m_owner->IsVirtual() ) delete m_attr; delete m_rect; } void wxListItemData::Init() { m_image = -1; m_data = 0; m_attr = NULL; } wxListItemData::wxListItemData(wxListMainWindow *owner) { Init(); m_owner = owner; if ( owner->InReportView() ) m_rect = NULL; else m_rect = new wxRect; } void wxListItemData::SetItem( const wxListItem &info ) { if ( info.m_mask & wxLIST_MASK_TEXT ) SetText(info.m_text); if ( info.m_mask & wxLIST_MASK_IMAGE ) m_image = info.m_image; if ( info.m_mask & wxLIST_MASK_DATA ) m_data = info.m_data; if ( info.HasAttributes() ) { if ( m_attr ) m_attr->AssignFrom(*info.GetAttributes()); else m_attr = new wxListItemAttr(*info.GetAttributes()); } if ( m_rect ) { m_rect->x = m_rect->y = m_rect->height = 0; m_rect->width = info.m_width; } } void wxListItemData::SetPosition( int x, int y ) { wxCHECK_RET( m_rect, _T("unexpected SetPosition() call") ); m_rect->x = x; m_rect->y = y; } void wxListItemData::SetSize( int width, int height ) { wxCHECK_RET( m_rect, _T("unexpected SetSize() call") ); if ( width != -1 ) m_rect->width = width; if ( height != -1 ) m_rect->height = height; } bool wxListItemData::IsHit( int x, int y ) const { wxCHECK_MSG( m_rect, false, _T("can't be called in this mode") ); return wxRect(GetX(), GetY(), GetWidth(), GetHeight()).Contains(x, y); } int wxListItemData::GetX() const { wxCHECK_MSG( m_rect, 0, _T("can't be called in this mode") ); return m_rect->x; } int wxListItemData::GetY() const { wxCHECK_MSG( m_rect, 0, _T("can't be called in this mode") ); return m_rect->y; } int wxListItemData::GetWidth() const { wxCHECK_MSG( m_rect, 0, _T("can't be called in this mode") ); return m_rect->width; } int wxListItemData::GetHeight() const { wxCHECK_MSG( m_rect, 0, _T("can't be called in this mode") ); return m_rect->height; } void wxListItemData::GetItem( wxListItem &info ) const { long mask = info.m_mask; if ( !mask ) // by default, get everything for backwards compatibility mask = -1; if ( mask & wxLIST_MASK_TEXT ) info.m_text = m_text; if ( mask & wxLIST_MASK_IMAGE ) info.m_image = m_image; if ( mask & wxLIST_MASK_DATA ) info.m_data = m_data; if ( m_attr ) { if ( m_attr->HasTextColour() ) info.SetTextColour(m_attr->GetTextColour()); if ( m_attr->HasBackgroundColour() ) info.SetBackgroundColour(m_attr->GetBackgroundColour()); if ( m_attr->HasFont() ) info.SetFont(m_attr->GetFont()); } } //----------------------------------------------------------------------------- // wxListHeaderData //----------------------------------------------------------------------------- void wxListHeaderData::Init() { m_mask = 0; m_image = -1; m_format = 0; m_width = 0; m_xpos = 0; m_ypos = 0; m_height = 0; m_state = 0; } wxListHeaderData::wxListHeaderData() { Init(); } wxListHeaderData::wxListHeaderData( const wxListItem &item ) { Init(); SetItem( item ); } void wxListHeaderData::SetItem( const wxListItem &item ) { m_mask = item.m_mask; if ( m_mask & wxLIST_MASK_TEXT ) m_text = item.m_text; if ( m_mask & wxLIST_MASK_IMAGE ) m_image = item.m_image; if ( m_mask & wxLIST_MASK_FORMAT ) m_format = item.m_format; if ( m_mask & wxLIST_MASK_WIDTH ) SetWidth(item.m_width); if ( m_mask & wxLIST_MASK_STATE ) SetState(item.m_state); } void wxListHeaderData::SetPosition( int x, int y ) { m_xpos = x; m_ypos = y; } void wxListHeaderData::SetHeight( int h ) { m_height = h; } void wxListHeaderData::SetWidth( int w ) { m_width = w < 0 ? WIDTH_COL_DEFAULT : w; } void wxListHeaderData::SetState( int flag ) { m_state = flag; } void wxListHeaderData::SetFormat( int format ) { m_format = format; } bool wxListHeaderData::HasImage() const { return m_image != -1; } bool wxListHeaderData::IsHit( int x, int y ) const { return ((x >= m_xpos) && (x <= m_xpos+m_width) && (y >= m_ypos) && (y <= m_ypos+m_height)); } void wxListHeaderData::GetItem( wxListItem& item ) { item.m_mask = m_mask; item.m_text = m_text; item.m_image = m_image; item.m_format = m_format; item.m_width = m_width; item.m_state = m_state; } int wxListHeaderData::GetImage() const { return m_image; } int wxListHeaderData::GetWidth() const { return m_width; } int wxListHeaderData::GetFormat() const { return m_format; } int wxListHeaderData::GetState() const { return m_state; } //----------------------------------------------------------------------------- // wxListLineData //----------------------------------------------------------------------------- inline int wxListLineData::GetMode() const { return m_owner->GetListCtrl()->GetWindowStyleFlag() & wxLC_MASK_TYPE; } inline bool wxListLineData::InReportView() const { return m_owner->HasFlag(wxLC_REPORT); } inline bool wxListLineData::IsVirtual() const { return m_owner->IsVirtual(); } wxListLineData::wxListLineData( wxListMainWindow *owner ) { m_owner = owner; if ( InReportView() ) m_gi = NULL; else // !report m_gi = new GeometryInfo; m_highlighted = false; InitItems( GetMode() == wxLC_REPORT ? m_owner->GetColumnCount() : 1 ); } void wxListLineData::CalculateSize( wxDC *dc, int spacing ) { wxListItemDataList::compatibility_iterator node = m_items.GetFirst(); wxCHECK_RET( node, _T("no subitems at all??") ); wxListItemData *item = node->GetData(); wxString s; wxCoord lw, lh; switch ( GetMode() ) { case wxLC_ICON: case wxLC_SMALL_ICON: m_gi->m_rectAll.width = spacing; s = item->GetText(); if ( s.empty() ) { lh = m_gi->m_rectLabel.width = m_gi->m_rectLabel.height = 0; } else // has label { dc->GetTextExtent( s, &lw, &lh ); lw += EXTRA_WIDTH; lh += EXTRA_HEIGHT; m_gi->m_rectAll.height = spacing + lh; if (lw > spacing) m_gi->m_rectAll.width = lw; m_gi->m_rectLabel.width = lw; m_gi->m_rectLabel.height = lh; } if (item->HasImage()) { int w, h; m_owner->GetImageSize( item->GetImage(), w, h ); m_gi->m_rectIcon.width = w + 8; m_gi->m_rectIcon.height = h + 8; if ( m_gi->m_rectIcon.width > m_gi->m_rectAll.width ) m_gi->m_rectAll.width = m_gi->m_rectIcon.width; if ( m_gi->m_rectIcon.height + lh > m_gi->m_rectAll.height - 4 ) m_gi->m_rectAll.height = m_gi->m_rectIcon.height + lh + 4; } if ( item->HasText() ) { m_gi->m_rectHighlight.width = m_gi->m_rectLabel.width; m_gi->m_rectHighlight.height = m_gi->m_rectLabel.height; } else // no text, highlight the icon { m_gi->m_rectHighlight.width = m_gi->m_rectIcon.width; m_gi->m_rectHighlight.height = m_gi->m_rectIcon.height; } break; case wxLC_LIST: s = item->GetTextForMeasuring(); dc->GetTextExtent( s, &lw, &lh ); lw += EXTRA_WIDTH; lh += EXTRA_HEIGHT; m_gi->m_rectLabel.width = lw; m_gi->m_rectLabel.height = lh; m_gi->m_rectAll.width = lw; m_gi->m_rectAll.height = lh; if (item->HasImage()) { int w, h; m_owner->GetImageSize( item->GetImage(), w, h ); m_gi->m_rectIcon.width = w; m_gi->m_rectIcon.height = h; m_gi->m_rectAll.width += 4 + w; if (h > m_gi->m_rectAll.height) m_gi->m_rectAll.height = h; } m_gi->m_rectHighlight.width = m_gi->m_rectAll.width; m_gi->m_rectHighlight.height = m_gi->m_rectAll.height; break; case wxLC_REPORT: wxFAIL_MSG( _T("unexpected call to SetSize") ); break; default: wxFAIL_MSG( _T("unknown mode") ); break; } } void wxListLineData::SetPosition( int x, int y, int spacing ) { wxListItemDataList::compatibility_iterator node = m_items.GetFirst(); wxCHECK_RET( node, _T("no subitems at all??") ); wxListItemData *item = node->GetData(); switch ( GetMode() ) { case wxLC_ICON: case wxLC_SMALL_ICON: m_gi->m_rectAll.x = x; m_gi->m_rectAll.y = y; if ( item->HasImage() ) { m_gi->m_rectIcon.x = m_gi->m_rectAll.x + 4 + (m_gi->m_rectAll.width - m_gi->m_rectIcon.width) / 2; m_gi->m_rectIcon.y = m_gi->m_rectAll.y + 4; } if ( item->HasText() ) { if (m_gi->m_rectAll.width > spacing) m_gi->m_rectLabel.x = m_gi->m_rectAll.x + (EXTRA_WIDTH/2); else m_gi->m_rectLabel.x = m_gi->m_rectAll.x + (EXTRA_WIDTH/2) + (spacing / 2) - (m_gi->m_rectLabel.width / 2); m_gi->m_rectLabel.y = m_gi->m_rectAll.y + m_gi->m_rectAll.height + 2 - m_gi->m_rectLabel.height; m_gi->m_rectHighlight.x = m_gi->m_rectLabel.x - 2; m_gi->m_rectHighlight.y = m_gi->m_rectLabel.y - 2; } else // no text, highlight the icon { m_gi->m_rectHighlight.x = m_gi->m_rectIcon.x - 4; m_gi->m_rectHighlight.y = m_gi->m_rectIcon.y - 4; } break; case wxLC_LIST: m_gi->m_rectAll.x = x; m_gi->m_rectAll.y = y; m_gi->m_rectHighlight.x = m_gi->m_rectAll.x; m_gi->m_rectHighlight.y = m_gi->m_rectAll.y; m_gi->m_rectLabel.y = m_gi->m_rectAll.y + 2; if (item->HasImage()) { m_gi->m_rectIcon.x = m_gi->m_rectAll.x + 2; m_gi->m_rectIcon.y = m_gi->m_rectAll.y + 2; m_gi->m_rectLabel.x = m_gi->m_rectAll.x + 4 + (EXTRA_WIDTH/2) + m_gi->m_rectIcon.width; } else { m_gi->m_rectLabel.x = m_gi->m_rectAll.x + (EXTRA_WIDTH/2); } break; case wxLC_REPORT: wxFAIL_MSG( _T("unexpected call to SetPosition") ); break; default: wxFAIL_MSG( _T("unknown mode") ); break; } } void wxListLineData::InitItems( int num ) { for (int i = 0; i < num; i++) m_items.Append( new wxListItemData(m_owner) ); } void wxListLineData::SetItem( int index, const wxListItem &info ) { wxListItemDataList::compatibility_iterator node = m_items.Item( index ); wxCHECK_RET( node, _T("invalid column index in SetItem") ); wxListItemData *item = node->GetData(); item->SetItem( info ); } void wxListLineData::GetItem( int index, wxListItem &info ) { wxListItemDataList::compatibility_iterator node = m_items.Item( index ); if (node) { wxListItemData *item = node->GetData(); item->GetItem( info ); } } wxString wxListLineData::GetText(int index) const { wxString s; wxListItemDataList::compatibility_iterator node = m_items.Item( index ); if (node) { wxListItemData *item = node->GetData(); s = item->GetText(); } return s; } void wxListLineData::SetText( int index, const wxString& s ) { wxListItemDataList::compatibility_iterator node = m_items.Item( index ); if (node) { wxListItemData *item = node->GetData(); item->SetText( s ); } } void wxListLineData::SetImage( int index, int image ) { wxListItemDataList::compatibility_iterator node = m_items.Item( index ); wxCHECK_RET( node, _T("invalid column index in SetImage()") ); wxListItemData *item = node->GetData(); item->SetImage(image); } int wxListLineData::GetImage( int index ) const { wxListItemDataList::compatibility_iterator node = m_items.Item( index ); wxCHECK_MSG( node, -1, _T("invalid column index in GetImage()") ); wxListItemData *item = node->GetData(); return item->GetImage(); } wxListItemAttr *wxListLineData::GetAttr() const { wxListItemDataList::compatibility_iterator node = m_items.GetFirst(); wxCHECK_MSG( node, NULL, _T("invalid column index in GetAttr()") ); wxListItemData *item = node->GetData(); return item->GetAttr(); } void wxListLineData::SetAttr(wxListItemAttr *attr) { wxListItemDataList::compatibility_iterator node = m_items.GetFirst(); wxCHECK_RET( node, _T("invalid column index in SetAttr()") ); wxListItemData *item = node->GetData(); item->SetAttr(attr); } bool wxListLineData::SetAttributes(wxDC *dc, const wxListItemAttr *attr, bool highlighted) { wxWindow *listctrl = m_owner->GetParent(); // fg colour // don't use foreground colour for drawing highlighted items - this might // make them completely invisible (and there is no way to do bit // arithmetics on wxColour, unfortunately) wxColour colText; if ( highlighted ) #ifdef __WXMAC__ { if (m_owner->HasFocus() #ifdef __WXMAC__ && IsControlActive( (ControlRef)m_owner->GetHandle() ) #endif ) colText = *wxWHITE; else colText = *wxBLACK; } #else colText = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT); #endif else if ( attr && attr->HasTextColour() ) colText = attr->GetTextColour(); else colText = listctrl->GetForegroundColour(); dc->SetTextForeground(colText); // font wxFont font; if ( attr && attr->HasFont() ) font = attr->GetFont(); else font = listctrl->GetFont(); dc->SetFont(font); // bg colour bool hasBgCol = attr && attr->HasBackgroundColour(); if ( highlighted || hasBgCol ) { if ( highlighted ) dc->SetBrush( *m_owner->GetHighlightBrush() ); else dc->SetBrush(wxBrush(attr->GetBackgroundColour(), wxSOLID)); dc->SetPen( *wxTRANSPARENT_PEN ); return true; } return false; } void wxListLineData::Draw( wxDC *dc ) { wxListItemDataList::compatibility_iterator node = m_items.GetFirst(); wxCHECK_RET( node, _T("no subitems at all??") ); bool highlighted = IsHighlighted(); wxListItemAttr *attr = GetAttr(); if ( SetAttributes(dc, attr, highlighted) ) #if ( !defined(__WXGTK20__) && !defined(__WXMAC__) ) { dc->DrawRectangle( m_gi->m_rectHighlight ); } #else { if (highlighted) { int flags = wxCONTROL_SELECTED; if (m_owner->HasFocus() #ifdef __WXMAC__ && IsControlActive( (ControlRef)m_owner->GetHandle() ) #endif ) flags |= wxCONTROL_FOCUSED; wxRendererNative::Get().DrawItemSelectionRect( m_owner, *dc, m_gi->m_rectHighlight, flags ); } else { dc->DrawRectangle( m_gi->m_rectHighlight ); } } #endif // just for debugging to better see where the items are #if 0 dc->SetPen(*wxRED_PEN); dc->SetBrush(*wxTRANSPARENT_BRUSH); dc->DrawRectangle( m_gi->m_rectAll ); dc->SetPen(*wxGREEN_PEN); dc->DrawRectangle( m_gi->m_rectIcon ); #endif wxListItemData *item = node->GetData(); if (item->HasImage()) { // centre the image inside our rectangle, this looks nicer when items // ae aligned in a row const wxRect& rectIcon = m_gi->m_rectIcon; m_owner->DrawImage(item->GetImage(), dc, rectIcon.x, rectIcon.y); } if (item->HasText()) { const wxRect& rectLabel = m_gi->m_rectLabel; wxDCClipper clipper(*dc, rectLabel); dc->DrawText(item->GetText(), rectLabel.x, rectLabel.y); } } void wxListLineData::DrawInReportMode( wxDC *dc, const wxRect& rect, const wxRect& rectHL, bool highlighted ) { // TODO: later we should support setting different attributes for // different columns - to do it, just add "col" argument to // GetAttr() and move these lines into the loop below wxListItemAttr *attr = GetAttr(); if ( SetAttributes(dc, attr, highlighted) ) #if ( !defined(__WXGTK20__) && !defined(__WXMAC__) ) { dc->DrawRectangle( rectHL ); } #else { if (highlighted) { int flags = wxCONTROL_SELECTED; if (m_owner->HasFocus() #ifdef __WXMAC__ && IsControlActive( (ControlRef)m_owner->GetHandle() ) #endif ) flags |= wxCONTROL_FOCUSED; wxRendererNative::Get().DrawItemSelectionRect( m_owner, *dc, rectHL, flags ); } else { dc->DrawRectangle( rectHL ); } } #endif wxCoord x = rect.x + HEADER_OFFSET_X, yMid = rect.y + rect.height/2; x += 4; size_t col = 0; for ( wxListItemDataList::compatibility_iterator node = m_items.GetFirst(); node; node = node->GetNext(), col++ ) { wxListItemData *item = node->GetData(); int width = m_owner->GetColumnWidth(col); int xOld = x; x += width; if ( item->HasImage() ) { int ix, iy; m_owner->GetImageSize( item->GetImage(), ix, iy ); m_owner->DrawImage( item->GetImage(), dc, xOld, yMid - iy/2 ); ix += IMAGE_MARGIN_IN_REPORT_MODE; xOld += ix; width -= ix; } if ( item->HasText() ) DrawTextFormatted(dc, item->GetText(), col, xOld, yMid, width - 8); } } void wxListLineData::DrawTextFormatted(wxDC *dc, const wxString& textOrig, int col, int x, int yMid, int width) { // we don't support displaying multiple lines currently (and neither does // wxMSW FWIW) so just merge all the lines wxString text(textOrig); text.Replace(_T("\n"), _T(" ")); wxCoord w, h; dc->GetTextExtent(text, &w, &h); const wxCoord y = yMid - (h + 1)/2; wxDCClipper clipper(*dc, x, y, width, h); // determine if the string can fit inside the current width if (w <= width) { // it can, draw it using the items alignment wxListItem item; m_owner->GetColumn(col, item); switch ( item.GetAlign() ) { case wxLIST_FORMAT_LEFT: // nothing to do break; case wxLIST_FORMAT_RIGHT: x += width - w; break; case wxLIST_FORMAT_CENTER: x += (width - w) / 2; break; default: wxFAIL_MSG( _T("unknown list item format") ); break; } dc->DrawText(text, x, y); } else // otherwise, truncate and add an ellipsis if possible { // determine the base width wxString ellipsis(wxT("...")); wxCoord base_w; dc->GetTextExtent(ellipsis, &base_w, &h); // continue until we have enough space or only one character left wxCoord w_c, h_c; size_t len = text.length(); wxString drawntext = text.Left(len); while (len > 1) { dc->GetTextExtent(drawntext.Last(), &w_c, &h_c); drawntext.RemoveLast(); len--; w -= w_c; if (w + base_w <= width) break; } // if still not enough space, remove ellipsis characters while (ellipsis.length() > 0 && w + base_w > width) { ellipsis = ellipsis.Left(ellipsis.length() - 1); dc->GetTextExtent(ellipsis, &base_w, &h); } // now draw the text dc->DrawText(drawntext, x, y); dc->DrawText(ellipsis, x + w, y); } } bool wxListLineData::Highlight( bool on ) { wxCHECK_MSG( !IsVirtual(), false, _T("unexpected call to Highlight") ); if ( on == m_highlighted ) return false; m_highlighted = on; return true; } void wxListLineData::ReverseHighlight( void ) { Highlight(!IsHighlighted()); } //----------------------------------------------------------------------------- // wxListHeaderWindow //----------------------------------------------------------------------------- //IMPLEMENT_DYNAMIC_CLASS(wxListHeaderWindow,wxWindow) BEGIN_EVENT_TABLE(wxListHeaderWindow,wxWindow) EVT_PAINT (wxListHeaderWindow::OnPaint) EVT_MOUSE_EVENTS (wxListHeaderWindow::OnMouse) EVT_SET_FOCUS (wxListHeaderWindow::OnSetFocus) END_EVENT_TABLE() void wxListHeaderWindow::Init() { m_currentCursor = (wxCursor *) NULL; m_isDragging = false; m_dirty = false; } wxListHeaderWindow::wxListHeaderWindow() : m_owner(NULL), m_currentCursor(NULL), m_resizeCursor(NULL), m_isDragging(false), m_column(-1), m_currentX(0), m_minX(0), m_dirty(false) { Init(); m_owner = (wxListMainWindow *) NULL; m_resizeCursor = (wxCursor *) NULL; } wxListHeaderWindow::wxListHeaderWindow( wxWindow *win, wxWindowID id, wxListMainWindow *owner, const wxPoint& pos, const wxSize& size, long style, const wxString &name ) : wxWindow( win, id, pos, size, style, name ) { Init(); m_owner = owner; m_resizeCursor = new wxCursor( wxCURSOR_SIZEWE ); #if _USE_VISATTR wxVisualAttributes attr = wxPanel::GetClassDefaultAttributes(); SetOwnForegroundColour( attr.colFg ); SetOwnBackgroundColour( attr.colBg ); if (!m_hasFont) SetOwnFont( attr.font ); #else SetOwnForegroundColour( wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); SetOwnBackgroundColour( wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE)); if (!m_hasFont) SetOwnFont( wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT )); #endif } wxListHeaderWindow::~wxListHeaderWindow() { delete m_resizeCursor; } #ifdef __WXUNIVERSAL__ #include "wx/univ/renderer.h" #include "wx/univ/theme.h" #endif // shift the DC origin to match the position of the main window horz // scrollbar: this allows us to always use logical coords void wxListHeaderWindow::AdjustDC(wxDC& dc) { int xpix; m_owner->GetScrollPixelsPerUnit( &xpix, NULL ); int view_start; m_owner->GetViewStart( &view_start, NULL ); int org_x = 0; int org_y = 0; dc.GetDeviceOrigin( &org_x, &org_y ); // account for the horz scrollbar offset #ifdef __WXGTK__ if (GetLayoutDirection() == wxLayout_RightToLeft) { // Maybe we just have to check for m_signX // in the DC, but I leave the #ifdef __WXGTK__ // for now dc.SetDeviceOrigin( org_x + (view_start * xpix), org_y ); } else #endif dc.SetDeviceOrigin( org_x - (view_start * xpix), org_y ); } void wxListHeaderWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) { wxPaintDC dc( this ); PrepareDC( dc ); AdjustDC( dc ); dc.SetFont( GetFont() ); // width and height of the entire header window int w, h; GetClientSize( &w, &h ); m_owner->CalcUnscrolledPosition(w, 0, &w, NULL); dc.SetBackgroundMode(wxTRANSPARENT); dc.SetTextForeground(GetForegroundColour()); int x = HEADER_OFFSET_X; int numColumns = m_owner->GetColumnCount(); wxListItem item; for ( int i = 0; i < numColumns && x < w; i++ ) { m_owner->GetColumn( i, item ); int wCol = item.m_width; int cw = wCol; int ch = h; int flags = 0; if (!m_parent->IsEnabled()) flags |= wxCONTROL_DISABLED; // NB: The code below is not really Mac-specific, but since we are close // to 2.8 release and I don't have time to test on other platforms, I // defined this only for wxMac. If this behavior is desired on // other platforms, please go ahead and revise or remove the #ifdef. #ifdef __WXMAC__ if ( !m_owner->IsVirtual() && (item.m_mask & wxLIST_MASK_STATE) && (item.m_state & wxLIST_STATE_SELECTED) ) flags |= wxCONTROL_SELECTED; #endif wxRendererNative::Get().DrawHeaderButton ( this, dc, wxRect(x, HEADER_OFFSET_Y, cw, ch), flags ); // see if we have enough space for the column label // for this we need the width of the text wxCoord wLabel; wxCoord hLabel; dc.GetTextExtent(item.GetText(), &wLabel, &hLabel); wLabel += 2 * EXTRA_WIDTH; // and the width of the icon, if any int ix = 0, iy = 0; // init them just to suppress the compiler warnings const int image = item.m_image; wxImageList *imageList; if ( image != -1 ) { imageList = m_owner->m_small_image_list; if ( imageList ) { imageList->GetSize(image, ix, iy); wLabel += ix + HEADER_IMAGE_MARGIN_IN_REPORT_MODE; } } else { imageList = NULL; } // ignore alignment if there is not enough space anyhow int xAligned; switch ( wLabel < cw ? item.GetAlign() : wxLIST_FORMAT_LEFT ) { default: wxFAIL_MSG( _T("unknown list item format") ); // fall through case wxLIST_FORMAT_LEFT: xAligned = x; break; case wxLIST_FORMAT_RIGHT: xAligned = x + cw - wLabel; break; case wxLIST_FORMAT_CENTER: xAligned = x + (cw - wLabel) / 2; break; } // draw the text and image clipping them so that they // don't overwrite the column boundary wxDCClipper clipper(dc, x, HEADER_OFFSET_Y, cw, h ); // if we have an image, draw it on the right of the label if ( imageList ) { imageList->Draw ( image, dc, xAligned + wLabel - ix - HEADER_IMAGE_MARGIN_IN_REPORT_MODE, HEADER_OFFSET_Y + (h - 4 - iy)/2, wxIMAGELIST_DRAW_TRANSPARENT ); } dc.DrawText( item.GetText(), xAligned + EXTRA_WIDTH, h / 2 - hLabel / 2 ); //HEADER_OFFSET_Y + EXTRA_HEIGHT ); x += wCol; } } void wxListHeaderWindow::DrawCurrent() { #if 1 m_owner->SetColumnWidth( m_column, m_currentX - m_minX ); #else int x1 = m_currentX; int y1 = 0; m_owner->ClientToScreen( &x1, &y1 ); int x2 = m_currentX; int y2 = 0; m_owner->GetClientSize( NULL, &y2 ); m_owner->ClientToScreen( &x2, &y2 ); wxScreenDC dc; dc.SetLogicalFunction( wxINVERT ); dc.SetPen( wxPen( *wxBLACK, 2, wxSOLID ) ); dc.SetBrush( *wxTRANSPARENT_BRUSH ); AdjustDC(dc); dc.DrawLine( x1, y1, x2, y2 ); dc.SetLogicalFunction( wxCOPY ); dc.SetPen( wxNullPen ); dc.SetBrush( wxNullBrush ); #endif } void wxListHeaderWindow::OnMouse( wxMouseEvent &event ) { // we want to work with logical coords int x; m_owner->CalcUnscrolledPosition(event.GetX(), 0, &x, NULL); int y = event.GetY(); if (m_isDragging) { SendListEvent(wxEVT_COMMAND_LIST_COL_DRAGGING, event.GetPosition()); // we don't draw the line beyond our window, but we allow dragging it // there int w = 0; GetClientSize( &w, NULL ); m_owner->CalcUnscrolledPosition(w, 0, &w, NULL); w -= 6; // erase the line if it was drawn if ( m_currentX < w ) DrawCurrent(); if (event.ButtonUp()) { ReleaseMouse(); m_isDragging = false; m_dirty = true; m_owner->SetColumnWidth( m_column, m_currentX - m_minX ); SendListEvent(wxEVT_COMMAND_LIST_COL_END_DRAG, event.GetPosition()); } else { if (x > m_minX + 7) m_currentX = x; else m_currentX = m_minX + 7; // draw in the new location if ( m_currentX < w ) DrawCurrent(); } } else // not dragging { m_minX = 0; bool hit_border = false; // end of the current column int xpos = 0; // find the column where this event occurred int col, countCol = m_owner->GetColumnCount(); for (col = 0; col < countCol; col++) { xpos += m_owner->GetColumnWidth( col ); m_column = col; if ( (abs(x-xpos) < 3) && (y < 22) ) { // near the column border hit_border = true; break; } if ( x < xpos ) { // inside the column break; } m_minX = xpos; } if ( col == countCol ) m_column = -1; if (event.LeftDown() || event.RightUp()) { if (hit_border && event.LeftDown()) { if ( SendListEvent(wxEVT_COMMAND_LIST_COL_BEGIN_DRAG, event.GetPosition()) ) { m_isDragging = true; m_currentX = x; CaptureMouse(); DrawCurrent(); } //else: column resizing was vetoed by the user code } else // click on a column { // record the selected state of the columns if (event.LeftDown()) { for (int i=0; i < m_owner->GetColumnCount(); i++) { wxListItem colItem; m_owner->GetColumn(i, colItem); long state = colItem.GetState(); if (i == m_column) colItem.SetState(state | wxLIST_STATE_SELECTED); else colItem.SetState(state & ~wxLIST_STATE_SELECTED); m_owner->SetColumn(i, colItem); } } SendListEvent( event.LeftDown() ? wxEVT_COMMAND_LIST_COL_CLICK : wxEVT_COMMAND_LIST_COL_RIGHT_CLICK, event.GetPosition()); } } else if (event.Moving()) { bool setCursor; if (hit_border) { setCursor = m_currentCursor == wxSTANDARD_CURSOR; m_currentCursor = m_resizeCursor; } else { setCursor = m_currentCursor != wxSTANDARD_CURSOR; m_currentCursor = wxSTANDARD_CURSOR; } if ( setCursor ) SetCursor(*m_currentCursor); } } } void wxListHeaderWindow::OnSetFocus( wxFocusEvent &WXUNUSED(event) ) { m_owner->SetFocus(); m_owner->Update(); } bool wxListHeaderWindow::SendListEvent(wxEventType type, const wxPoint& pos) { wxWindow *parent = GetParent(); wxListEvent le( type, parent->GetId() ); le.SetEventObject( parent ); le.m_pointDrag = pos; // the position should be relative to the parent window, not // this one for compatibility with MSW and common sense: the // user code doesn't know anything at all about this header // window, so why should it get positions relative to it? le.m_pointDrag.y -= GetSize().y; le.m_col = m_column; return !parent->GetEventHandler()->ProcessEvent( le ) || le.IsAllowed(); } //----------------------------------------------------------------------------- // wxListRenameTimer (internal) //----------------------------------------------------------------------------- wxListRenameTimer::wxListRenameTimer( wxListMainWindow *owner ) { m_owner = owner; } void wxListRenameTimer::Notify() { m_owner->OnRenameTimer(); } //----------------------------------------------------------------------------- // wxListTextCtrlWrapper (internal) //----------------------------------------------------------------------------- BEGIN_EVENT_TABLE(wxListTextCtrlWrapper, wxEvtHandler) EVT_CHAR (wxListTextCtrlWrapper::OnChar) EVT_KEY_UP (wxListTextCtrlWrapper::OnKeyUp) EVT_KILL_FOCUS (wxListTextCtrlWrapper::OnKillFocus) END_EVENT_TABLE() wxListTextCtrlWrapper::wxListTextCtrlWrapper(wxListMainWindow *owner, wxTextCtrl *text, size_t itemEdit) : m_startValue(owner->GetItemText(itemEdit)), m_itemEdited(itemEdit) { m_owner = owner; m_text = text; m_finished = false; m_aboutToFinish = false; wxRect rectLabel = owner->GetLineLabelRect(itemEdit); m_owner->CalcScrolledPosition(rectLabel.x, rectLabel.y, &rectLabel.x, &rectLabel.y); m_text->Create(owner, wxID_ANY, m_startValue, wxPoint(rectLabel.x-4,rectLabel.y-4), wxSize(rectLabel.width+11,rectLabel.height+8)); m_text->SetFocus(); m_text->PushEventHandler(this); } void wxListTextCtrlWrapper::Finish() { if ( !m_finished ) { m_finished = true; m_text->RemoveEventHandler(this); m_owner->FinishEditing(m_text); wxPendingDelete.Append( this ); } } bool wxListTextCtrlWrapper::AcceptChanges() { const wxString value = m_text->GetValue(); // notice that we should always call OnRenameAccept() to generate the "end // label editing" event, even if the user hasn't really changed anything if ( !m_owner->OnRenameAccept(m_itemEdited, value) ) { // vetoed by the user return false; } // accepted, do rename the item (unless nothing changed) if ( value != m_startValue ) m_owner->SetItemText(m_itemEdited, value); return true; } void wxListTextCtrlWrapper::AcceptChangesAndFinish() { m_aboutToFinish = true; // Notify the owner about the changes AcceptChanges(); // Even if vetoed, close the control (consistent with MSW) Finish(); } void wxListTextCtrlWrapper::OnChar( wxKeyEvent &event ) { switch ( event.m_keyCode ) { case WXK_RETURN: AcceptChangesAndFinish(); break; case WXK_ESCAPE: m_owner->OnRenameCancelled( m_itemEdited ); Finish(); break; default: event.Skip(); } } void wxListTextCtrlWrapper::OnKeyUp( wxKeyEvent &event ) { if (m_finished) { event.Skip(); return; } // auto-grow the textctrl: wxSize parentSize = m_owner->GetSize(); wxPoint myPos = m_text->GetPosition(); wxSize mySize = m_text->GetSize(); int sx, sy; m_text->GetTextExtent(m_text->GetValue() + _T("MM"), &sx, &sy); if (myPos.x + sx > parentSize.x) sx = parentSize.x - myPos.x; if (mySize.x > sx) sx = mySize.x; m_text->SetSize(sx, wxDefaultCoord); event.Skip(); } void wxListTextCtrlWrapper::OnKillFocus( wxFocusEvent &event ) { if ( !m_finished && !m_aboutToFinish ) { if ( !AcceptChanges() ) m_owner->OnRenameCancelled( m_itemEdited ); Finish(); } // We must let the native text control handle focus event.Skip(); } //----------------------------------------------------------------------------- // wxListMainWindow //----------------------------------------------------------------------------- //IMPLEMENT_DYNAMIC_CLASS(wxListMainWindow,wxScrolledWindow) BEGIN_EVENT_TABLE(wxListMainWindow,wxScrolledWindow) EVT_PAINT (wxListMainWindow::OnPaint) EVT_MOUSE_EVENTS (wxListMainWindow::OnMouse) EVT_CHAR (wxListMainWindow::OnChar) EVT_KEY_DOWN (wxListMainWindow::OnKeyDown) EVT_KEY_UP (wxListMainWindow::OnKeyUp) EVT_SET_FOCUS (wxListMainWindow::OnSetFocus) EVT_KILL_FOCUS (wxListMainWindow::OnKillFocus) EVT_SCROLLWIN (wxListMainWindow::OnScroll) END_EVENT_TABLE() void wxListMainWindow::Init() { m_dirty = true; m_countVirt = 0; m_lineFrom = m_lineTo = (size_t)-1; m_linesPerPage = 0; m_headerWidth = m_lineHeight = 0; m_small_image_list = (wxImageList *) NULL; m_normal_image_list = (wxImageList *) NULL; m_small_spacing = 30; m_normal_spacing = 40; m_hasFocus = false; m_dragCount = 0; m_isCreated = false; m_lastOnSame = false; m_renameTimer = new wxListRenameTimer( this ); m_textctrlWrapper = NULL; m_current = m_lineLastClicked = m_lineSelectSingleOnUp = m_lineBeforeLastClicked = (size_t)-1; m_freezeCount = 0; } wxListMainWindow::wxListMainWindow() : m_highlightColour(NULL) { Init(); m_highlightBrush = m_highlightUnfocusedBrush = (wxBrush *) NULL; } wxListMainWindow::wxListMainWindow( wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString &name ) : wxScrolledWindow( parent, id, pos, size, style | wxHSCROLL | wxVSCROLL, name ) { Init(); m_highlightBrush = new wxBrush ( wxSystemSettings::GetColour ( wxSYS_COLOUR_HIGHLIGHT ), wxSOLID ); m_highlightUnfocusedBrush = new wxBrush ( wxSystemSettings::GetColour ( wxSYS_COLOUR_BTNSHADOW ), wxSOLID ); SetScrollbars( 0, 0, 0, 0, 0, 0 ); wxVisualAttributes attr = wxGenericListCtrl::GetClassDefaultAttributes(); SetOwnForegroundColour( attr.colFg ); SetOwnBackgroundColour( attr.colBg ); if (!m_hasFont) SetOwnFont( attr.font ); } wxListMainWindow::~wxListMainWindow() { DoDeleteAllItems(); WX_CLEAR_LIST(wxListHeaderDataList, m_columns); WX_CLEAR_ARRAY(m_aColWidths); delete m_highlightBrush; delete m_highlightUnfocusedBrush; delete m_renameTimer; } void wxListMainWindow::CacheLineData(size_t line) { wxGenericListCtrl *listctrl = GetListCtrl(); wxListLineData *ld = GetDummyLine(); size_t countCol = GetColumnCount(); for ( size_t col = 0; col < countCol; col++ ) { ld->SetText(col, listctrl->OnGetItemText(line, col)); ld->SetImage(col, listctrl->OnGetItemColumnImage(line, col)); } ld->SetAttr(listctrl->OnGetItemAttr(line)); } wxListLineData *wxListMainWindow::GetDummyLine() const { wxASSERT_MSG( !IsEmpty(), _T("invalid line index") ); wxASSERT_MSG( IsVirtual(), _T("GetDummyLine() shouldn't be called") ); wxListMainWindow *self = wxConstCast(this, wxListMainWindow); // we need to recreate the dummy line if the number of columns in the // control changed as it would have the incorrect number of fields // otherwise if ( !m_lines.IsEmpty() && m_lines[0].m_items.GetCount() != (size_t)GetColumnCount() ) { self->m_lines.Clear(); } if ( m_lines.IsEmpty() ) { wxListLineData *line = new wxListLineData(self); self->m_lines.Add(line); // don't waste extra memory -- there never going to be anything // else/more in this array self->m_lines.Shrink(); } return &m_lines[0]; } // ---------------------------------------------------------------------------- // line geometry (report mode only) // ---------------------------------------------------------------------------- wxCoord wxListMainWindow::GetLineHeight() const { // we cache the line height as calling GetTextExtent() is slow if ( !m_lineHeight ) { wxListMainWindow *self = wxConstCast(this, wxListMainWindow); wxClientDC dc( self ); dc.SetFont( GetFont() ); wxCoord y; dc.GetTextExtent(_T("H"), NULL, &y); if ( m_small_image_list && m_small_image_list->GetImageCount() ) { int iw = 0, ih = 0; m_small_image_list->GetSize(0, iw, ih); y = wxMax(y, ih); } y += EXTRA_HEIGHT; self->m_lineHeight = y + LINE_SPACING; } return m_lineHeight; } wxCoord wxListMainWindow::GetLineY(size_t line) const { wxASSERT_MSG( InReportView(), _T("only works in report mode") ); return LINE_SPACING + line * GetLineHeight(); } wxRect wxListMainWindow::GetLineRect(size_t line) const { if ( !InReportView() ) return GetLine(line)->m_gi->m_rectAll; wxRect rect; rect.x = HEADER_OFFSET_X; rect.y = GetLineY(line); rect.width = GetHeaderWidth(); rect.height = GetLineHeight(); return rect; } wxRect wxListMainWindow::GetLineLabelRect(size_t line) const { if ( !InReportView() ) return GetLine(line)->m_gi->m_rectLabel; int image_x = 0; wxListLineData *data = GetLine(line); wxListItemDataList::compatibility_iterator node = data->m_items.GetFirst(); if (node) { wxListItemData *item = node->GetData(); if ( item->HasImage() ) { int ix, iy; GetImageSize( item->GetImage(), ix, iy ); image_x = 3 + ix + IMAGE_MARGIN_IN_REPORT_MODE; } } wxRect rect; rect.x = image_x + HEADER_OFFSET_X; rect.y = GetLineY(line); rect.width = GetColumnWidth(0) - image_x; rect.height = GetLineHeight(); return rect; } wxRect wxListMainWindow::GetLineIconRect(size_t line) const { if ( !InReportView() ) return GetLine(line)->m_gi->m_rectIcon; wxListLineData *ld = GetLine(line); wxASSERT_MSG( ld->HasImage(), _T("should have an image") ); wxRect rect; rect.x = HEADER_OFFSET_X; rect.y = GetLineY(line); GetImageSize(ld->GetImage(), rect.width, rect.height); return rect; } wxRect wxListMainWindow::GetLineHighlightRect(size_t line) const { return InReportView() ? GetLineRect(line) : GetLine(line)->m_gi->m_rectHighlight; } long wxListMainWindow::HitTestLine(size_t line, int x, int y) const { wxASSERT_MSG( line < GetItemCount(), _T("invalid line in HitTestLine") ); wxListLineData *ld = GetLine(line); if ( ld->HasImage() && GetLineIconRect(line).Contains(x, y) ) return wxLIST_HITTEST_ONITEMICON; // VS: Testing for "ld->HasText() || InReportView()" instead of // "ld->HasText()" is needed to make empty lines in report view // possible if ( ld->HasText() || InReportView() ) { wxRect rect = InReportView() ? GetLineRect(line) : GetLineLabelRect(line); if ( rect.Contains(x, y) ) return wxLIST_HITTEST_ONITEMLABEL; } return 0; } // ---------------------------------------------------------------------------- // highlight (selection) handling // ---------------------------------------------------------------------------- bool wxListMainWindow::IsHighlighted(size_t line) const { if ( IsVirtual() ) { return m_selStore.IsSelected(line); } else // !virtual { wxListLineData *ld = GetLine(line); wxCHECK_MSG( ld, false, _T("invalid index in IsHighlighted") ); return ld->IsHighlighted(); } } void wxListMainWindow::HighlightLines( size_t lineFrom, size_t lineTo, bool highlight ) { if ( IsVirtual() ) { wxArrayInt linesChanged; if ( !m_selStore.SelectRange(lineFrom, lineTo, highlight, &linesChanged) ) { // meny items changed state, refresh everything RefreshLines(lineFrom, lineTo); } else // only a few items changed state, refresh only them { size_t count = linesChanged.GetCount(); for ( size_t n = 0; n < count; n++ ) { RefreshLine(linesChanged[n]); } } } else // iterate over all items in non report view { for ( size_t line = lineFrom; line <= lineTo; line++ ) { if ( HighlightLine(line, highlight) ) RefreshLine(line); } } } bool wxListMainWindow::HighlightLine( size_t line, bool highlight ) { bool changed; if ( IsVirtual() ) { changed = m_selStore.SelectItem(line, highlight); } else // !virtual { wxListLineData *ld = GetLine(line); wxCHECK_MSG( ld, false, _T("invalid index in HighlightLine") ); changed = ld->Highlight(highlight); } if ( changed ) { SendNotify( line, highlight ? wxEVT_COMMAND_LIST_ITEM_SELECTED : wxEVT_COMMAND_LIST_ITEM_DESELECTED ); } return changed; } void wxListMainWindow::RefreshLine( size_t line ) { if ( InReportView() ) { size_t visibleFrom, visibleTo; GetVisibleLinesRange(&visibleFrom, &visibleTo); if ( line < visibleFrom || line > visibleTo ) return; } wxRect rect = GetLineRect(line); CalcScrolledPosition( rect.x, rect.y, &rect.x, &rect.y ); RefreshRect( rect ); } void wxListMainWindow::RefreshLines( size_t lineFrom, size_t lineTo ) { // we suppose that they are ordered by caller wxASSERT_MSG( lineFrom <= lineTo, _T("indices in disorder") ); wxASSERT_MSG( lineTo < GetItemCount(), _T("invalid line range") ); if ( InReportView() ) { size_t visibleFrom, visibleTo; GetVisibleLinesRange(&visibleFrom, &visibleTo); if ( lineFrom < visibleFrom ) lineFrom = visibleFrom; if ( lineTo > visibleTo ) lineTo = visibleTo; wxRect rect; rect.x = 0; rect.y = GetLineY(lineFrom); rect.width = GetClientSize().x; rect.height = GetLineY(lineTo) - rect.y + GetLineHeight(); CalcScrolledPosition( rect.x, rect.y, &rect.x, &rect.y ); RefreshRect( rect ); } else // !report { // TODO: this should be optimized... for ( size_t line = lineFrom; line <= lineTo; line++ ) { RefreshLine(line); } } } void wxListMainWindow::RefreshAfter( size_t lineFrom ) { if ( InReportView() ) { size_t visibleFrom, visibleTo; GetVisibleLinesRange(&visibleFrom, &visibleTo); if ( lineFrom < visibleFrom ) lineFrom = visibleFrom; else if ( lineFrom > visibleTo ) return; wxRect rect; rect.x = 0; rect.y = GetLineY(lineFrom); CalcScrolledPosition( rect.x, rect.y, &rect.x, &rect.y ); wxSize size = GetClientSize(); rect.width = size.x; // refresh till the bottom of the window rect.height = size.y - rect.y; RefreshRect( rect ); } else // !report { // TODO: how to do it more efficiently? m_dirty = true; } } void wxListMainWindow::RefreshSelected() { if ( IsEmpty() ) return; size_t from, to; if ( InReportView() ) { GetVisibleLinesRange(&from, &to); } else // !virtual { from = 0; to = GetItemCount() - 1; } if ( HasCurrent() && m_current >= from && m_current <= to ) RefreshLine(m_current); for ( size_t line = from; line <= to; line++ ) { // NB: the test works as expected even if m_current == -1 if ( line != m_current && IsHighlighted(line) ) RefreshLine(line); } } void wxListMainWindow::Freeze() { m_freezeCount++; } void wxListMainWindow::Thaw() { wxCHECK_RET( m_freezeCount > 0, _T("thawing unfrozen list control?") ); if ( --m_freezeCount == 0 ) Refresh(); } void wxListMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) { // Note: a wxPaintDC must be constructed even if no drawing is // done (a Windows requirement). wxPaintDC dc( this ); if ( IsEmpty() || m_freezeCount ) // nothing to draw or not the moment to draw it return; if ( m_dirty ) // delay the repainting until we calculate all the items positions return; PrepareDC( dc ); int dev_x, dev_y; CalcScrolledPosition( 0, 0, &dev_x, &dev_y ); dc.SetFont( GetFont() ); if ( InReportView() ) { int lineHeight = GetLineHeight(); size_t visibleFrom, visibleTo; GetVisibleLinesRange(&visibleFrom, &visibleTo); wxRect rectLine; int xOrig = dc.LogicalToDeviceX( 0 ); int yOrig = dc.LogicalToDeviceY( 0 ); // tell the caller cache to cache the data if ( IsVirtual() ) { wxListEvent evCache(wxEVT_COMMAND_LIST_CACHE_HINT, GetParent()->GetId()); evCache.SetEventObject( GetParent() ); evCache.m_oldItemIndex = visibleFrom; evCache.m_itemIndex = visibleTo; GetParent()->GetEventHandler()->ProcessEvent( evCache ); } for ( size_t line = visibleFrom; line <= visibleTo; line++ ) { rectLine = GetLineRect(line); if ( !IsExposed(rectLine.x + xOrig, rectLine.y + yOrig, rectLine.width, rectLine.height) ) { // don't redraw unaffected lines to avoid flicker continue; } GetLine(line)->DrawInReportMode( &dc, rectLine, GetLineHighlightRect(line), IsHighlighted(line) ); } if ( HasFlag(wxLC_HRULES) ) { wxPen pen(GetRuleColour(), 1, wxSOLID); wxSize clientSize = GetClientSize(); size_t i = visibleFrom; if (i == 0) i = 1; // Don't draw the first one for ( ; i <= visibleTo; i++ ) { dc.SetPen(pen); dc.SetBrush( *wxTRANSPARENT_BRUSH ); dc.DrawLine(0 - dev_x, i * lineHeight, clientSize.x - dev_x, i * lineHeight); } // Draw last horizontal rule if ( visibleTo == GetItemCount() - 1 ) { dc.SetPen( pen ); dc.SetBrush( *wxTRANSPARENT_BRUSH ); dc.DrawLine(0 - dev_x, (m_lineTo + 1) * lineHeight, clientSize.x - dev_x , (m_lineTo + 1) * lineHeight ); } } // Draw vertical rules if required if ( HasFlag(wxLC_VRULES) && !IsEmpty() ) { wxPen pen(GetRuleColour(), 1, wxSOLID); wxRect firstItemRect, lastItemRect; GetItemRect(visibleFrom, firstItemRect); GetItemRect(visibleTo, lastItemRect); int x = firstItemRect.GetX(); dc.SetPen(pen); dc.SetBrush(* wxTRANSPARENT_BRUSH); for (int col = 0; col < GetColumnCount(); col++) { int colWidth = GetColumnWidth(col); x += colWidth; int x_pos = x - dev_x; if (col < GetColumnCount()-1) x_pos -= 2; dc.DrawLine(x_pos, firstItemRect.GetY() - 1 - dev_y, x_pos, lastItemRect.GetBottom() + 1 - dev_y); } } } else // !report { size_t count = GetItemCount(); for ( size_t i = 0; i < count; i++ ) { GetLine(i)->Draw( &dc ); } } #ifndef __WXMAC__ // Don't draw rect outline under Mac at all. if ( HasCurrent() ) { if ( m_hasFocus ) { wxRect rect( GetLineHighlightRect( m_current ) ); #ifndef __WXGTK20__ dc.SetPen( *wxBLACK_PEN ); dc.SetBrush( *wxTRANSPARENT_BRUSH ); dc.DrawRectangle( rect ); #else wxRendererNative::Get().DrawItemSelectionRect( this, dc, rect, wxCONTROL_CURRENT|wxCONTROL_FOCUSED ); #endif } } #endif } void wxListMainWindow::HighlightAll( bool on ) { if ( IsSingleSel() ) { wxASSERT_MSG( !on, _T("can't do this in a single selection control") ); // we just have one item to turn off if ( HasCurrent() && IsHighlighted(m_current) ) { HighlightLine(m_current, false); RefreshLine(m_current); } } else // multi selection { if ( !IsEmpty() ) HighlightLines(0, GetItemCount() - 1, on); } } void wxListMainWindow::SendNotify( size_t line, wxEventType command, const wxPoint& point ) { wxListEvent le( command, GetParent()->GetId() ); le.SetEventObject( GetParent() ); le.m_itemIndex = line; // set only for events which have position if ( point != wxDefaultPosition ) le.m_pointDrag = point; // don't try to get the line info for virtual list controls: the main // program has it anyhow and if we did it would result in accessing all // the lines, even those which are not visible now and this is precisely // what we're trying to avoid if ( !IsVirtual() ) { if ( line != (size_t)-1 ) { GetLine(line)->GetItem( 0, le.m_item ); } //else: this happens for wxEVT_COMMAND_LIST_ITEM_FOCUSED event } //else: there may be no more such item GetParent()->GetEventHandler()->ProcessEvent( le ); } void wxListMainWindow::ChangeCurrent(size_t current) { m_current = current; // as the current item changed, we shouldn't start editing it when the // "slow click" timer expires as the click happened on another item if ( m_renameTimer->IsRunning() ) m_renameTimer->Stop(); SendNotify(current, wxEVT_COMMAND_LIST_ITEM_FOCUSED); } wxTextCtrl *wxListMainWindow::EditLabel(long item, wxClassInfo* textControlClass) { wxCHECK_MSG( (item >= 0) && ((size_t)item < GetItemCount()), NULL, wxT("wrong index in wxGenericListCtrl::EditLabel()") ); wxASSERT_MSG( textControlClass->IsKindOf(CLASSINFO(wxTextCtrl)), wxT("EditLabel() needs a text control") ); size_t itemEdit = (size_t)item; wxListEvent le( wxEVT_COMMAND_LIST_BEGIN_LABEL_EDIT, GetParent()->GetId() ); le.SetEventObject( GetParent() ); le.m_itemIndex = item; wxListLineData *data = GetLine(itemEdit); wxCHECK_MSG( data, NULL, _T("invalid index in EditLabel()") ); data->GetItem( 0, le.m_item ); if ( GetParent()->GetEventHandler()->ProcessEvent( le ) && !le.IsAllowed() ) { // vetoed by user code return NULL; } // We have to call this here because the label in question might just have // been added and no screen update taken place. if ( m_dirty ) { wxSafeYield(); // Pending events dispatched by wxSafeYield might have changed the item // count if ( (size_t)item >= GetItemCount() ) return NULL; } wxTextCtrl * const text = (wxTextCtrl *)textControlClass->CreateObject(); m_textctrlWrapper = new wxListTextCtrlWrapper(this, text, item); return m_textctrlWrapper->GetText(); } void wxListMainWindow::OnRenameTimer() { wxCHECK_RET( HasCurrent(), wxT("unexpected rename timer") ); EditLabel( m_current ); } bool wxListMainWindow::OnRenameAccept(size_t itemEdit, const wxString& value) { wxListEvent le( wxEVT_COMMAND_LIST_END_LABEL_EDIT, GetParent()->GetId() ); le.SetEventObject( GetParent() ); le.m_itemIndex = itemEdit; wxListLineData *data = GetLine(itemEdit); wxCHECK_MSG( data, false, _T("invalid index in OnRenameAccept()") ); data->GetItem( 0, le.m_item ); le.m_item.m_text = value; return !GetParent()->GetEventHandler()->ProcessEvent( le ) || le.IsAllowed(); } void wxListMainWindow::OnRenameCancelled(size_t itemEdit) { // let owner know that the edit was cancelled wxListEvent le( wxEVT_COMMAND_LIST_END_LABEL_EDIT, GetParent()->GetId() ); le.SetEditCanceled(true); le.SetEventObject( GetParent() ); le.m_itemIndex = itemEdit; wxListLineData *data = GetLine(itemEdit); wxCHECK_RET( data, _T("invalid index in OnRenameCancelled()") ); data->GetItem( 0, le.m_item ); GetEventHandler()->ProcessEvent( le ); } void wxListMainWindow::OnMouse( wxMouseEvent &event ) { #ifdef __WXMAC__ // On wxMac we can't depend on the EVT_KILL_FOCUS event to properly // shutdown the edit control when the mouse is clicked elsewhere on the // listctrl because the order of events is different (or something like // that), so explicitly end the edit if it is active. if ( event.LeftDown() && m_textctrlWrapper ) m_textctrlWrapper->AcceptChangesAndFinish(); #endif // __WXMAC__ if ( event.LeftDown() ) SetFocusIgnoringChildren(); event.SetEventObject( GetParent() ); if ( GetParent()->GetEventHandler()->ProcessEvent( event) ) return; if (event.GetEventType() == wxEVT_MOUSEWHEEL) { // let the base handle mouse wheel events. event.Skip(); return; } if ( !HasCurrent() || IsEmpty() ) { if (event.RightDown()) { SendNotify( (size_t)-1, wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, event.GetPosition() ); // Allow generation of context menu event event.Skip(); } return; } if (m_dirty) return; if ( !(event.Dragging() || event.ButtonDown() || event.LeftUp() || event.ButtonDClick()) ) return; int x = event.GetX(); int y = event.GetY(); CalcUnscrolledPosition( x, y, &x, &y ); // where did we hit it (if we did)? long hitResult = 0; size_t count = GetItemCount(), current; if ( InReportView() ) { current = y / GetLineHeight(); if ( current < count ) hitResult = HitTestLine(current, x, y); } else // !report { // TODO: optimize it too! this is less simple than for report view but // enumerating all items is still not a way to do it!! for ( current = 0; current < count; current++ ) { hitResult = HitTestLine(current, x, y); if ( hitResult ) break; } } if (event.Dragging()) { if (m_dragCount == 0) { // we have to report the raw, physical coords as we want to be // able to call HitTest(event.m_pointDrag) from the user code to // get the item being dragged m_dragStart = event.GetPosition(); } m_dragCount++; if (m_dragCount != 3) return; int command = event.RightIsDown() ? wxEVT_COMMAND_LIST_BEGIN_RDRAG : wxEVT_COMMAND_LIST_BEGIN_DRAG; wxListEvent le( command, GetParent()->GetId() ); le.SetEventObject( GetParent() ); le.m_itemIndex = m_lineLastClicked; le.m_pointDrag = m_dragStart; GetParent()->GetEventHandler()->ProcessEvent( le ); return; } else { m_dragCount = 0; } if ( !hitResult ) { // outside of any item if (event.RightDown()) { SendNotify( (size_t) -1, wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, event.GetPosition() ); wxContextMenuEvent evtCtx( wxEVT_CONTEXT_MENU, GetParent()->GetId(), ClientToScreen(event.GetPosition())); evtCtx.SetEventObject(GetParent()); GetParent()->GetEventHandler()->ProcessEvent(evtCtx); } else { // reset the selection and bail out HighlightAll(false); } return; } bool forceClick = false; if (event.ButtonDClick()) { if ( m_renameTimer->IsRunning() ) m_renameTimer->Stop(); m_lastOnSame = false; if ( current == m_lineLastClicked ) { SendNotify( current, wxEVT_COMMAND_LIST_ITEM_ACTIVATED ); return; } else { // The first click was on another item, so don't interpret this as // a double click, but as a simple click instead forceClick = true; } } if (event.LeftUp()) { if (m_lineSelectSingleOnUp != (size_t)-1) { // select single line HighlightAll( false ); ReverseHighlight(m_lineSelectSingleOnUp); } if (m_lastOnSame) { if ((current == m_current) && (hitResult == wxLIST_HITTEST_ONITEMLABEL) && HasFlag(wxLC_EDIT_LABELS) ) { if (InReportView()) { wxRect label = GetLineLabelRect( current ); if (label.Contains( x, y )) m_renameTimer->Start( 250, true ); } else m_renameTimer->Start( 250, true ); } } m_lastOnSame = false; m_lineSelectSingleOnUp = (size_t)-1; } else { // This is necessary, because after a DnD operation in // from and to ourself, the up event is swallowed by the // DnD code. So on next non-up event (which means here and // now) m_lineSelectSingleOnUp should be reset. m_lineSelectSingleOnUp = (size_t)-1; } if (event.RightDown()) { m_lineBeforeLastClicked = m_lineLastClicked; m_lineLastClicked = current; // If the item is already selected, do not update the selection. // Multi-selections should not be cleared if a selected item is clicked. if (!IsHighlighted(current)) { HighlightAll(false); ChangeCurrent(current); ReverseHighlight(m_current); } SendNotify( current, wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, event.GetPosition() ); wxContextMenuEvent evtCtx( wxEVT_CONTEXT_MENU, GetParent()->GetId(), ClientToScreen(event.GetPosition())); evtCtx.SetEventObject(GetParent()); GetParent()->GetEventHandler()->ProcessEvent(evtCtx); } else if (event.MiddleDown()) { SendNotify( current, wxEVT_COMMAND_LIST_ITEM_MIDDLE_CLICK ); } else if ( event.LeftDown() || forceClick ) { m_lineBeforeLastClicked = m_lineLastClicked; m_lineLastClicked = current; size_t oldCurrent = m_current; bool oldWasSelected = IsHighlighted(m_current); bool cmdModifierDown = event.CmdDown(); if ( IsSingleSel() || !(cmdModifierDown || event.ShiftDown()) ) { if ( IsSingleSel() || !IsHighlighted(current) ) { HighlightAll( false ); ChangeCurrent(current); ReverseHighlight(m_current); } else // multi sel & current is highlighted & no mod keys { m_lineSelectSingleOnUp = current; ChangeCurrent(current); // change focus } } else // multi sel & either ctrl or shift is down { if (cmdModifierDown) { ChangeCurrent(current); ReverseHighlight(m_current); } else if (event.ShiftDown()) { ChangeCurrent(current); size_t lineFrom = oldCurrent, lineTo = current; if ( lineTo < lineFrom ) { lineTo = lineFrom; lineFrom = m_current; } HighlightLines(lineFrom, lineTo); } else // !ctrl, !shift { // test in the enclosing if should make it impossible wxFAIL_MSG( _T("how did we get here?") ); } } if (m_current != oldCurrent) RefreshLine( oldCurrent ); // forceClick is only set if the previous click was on another item m_lastOnSame = !forceClick && (m_current == oldCurrent) && oldWasSelected; } } void wxListMainWindow::MoveToItem(size_t item) { if ( item == (size_t)-1 ) return; wxRect rect = GetLineRect(item); int client_w, client_h; GetClientSize( &client_w, &client_h ); const int hLine = GetLineHeight(); int view_x = SCROLL_UNIT_X * GetScrollPos( wxHORIZONTAL ); int view_y = hLine * GetScrollPos( wxVERTICAL ); if ( InReportView() ) { // the next we need the range of lines shown it might be different, // so recalculate it ResetVisibleLinesRange(); if (rect.y < view_y) Scroll( -1, rect.y / hLine ); if (rect.y + rect.height + 5 > view_y + client_h) Scroll( -1, (rect.y + rect.height - client_h + hLine) / hLine ); #ifdef __WXMAC__ // At least on Mac the visible lines value will get reset inside of // Scroll *before* it actually scrolls the window because of the // Update() that happens there, so it will still have the wrong value. // So let's reset it again and wait for it to be recalculated in the // next paint event. I would expect this problem to show up in wxGTK // too but couldn't duplicate it there. Perhaps the order of events // is different... --Robin ResetVisibleLinesRange(); #endif } else // !report { if (rect.x-view_x < 5) Scroll( (rect.x - 5) / SCROLL_UNIT_X, -1 ); if (rect.x + rect.width - 5 > view_x + client_w) Scroll( (rect.x + rect.width - client_w + SCROLL_UNIT_X) / SCROLL_UNIT_X, -1 ); } } // ---------------------------------------------------------------------------- // keyboard handling // ---------------------------------------------------------------------------- void wxListMainWindow::OnArrowChar(size_t newCurrent, const wxKeyEvent& event) { wxCHECK_RET( newCurrent < (size_t)GetItemCount(), _T("invalid item index in OnArrowChar()") ); size_t oldCurrent = m_current; // in single selection we just ignore Shift as we can't select several // items anyhow if ( event.ShiftDown() && !IsSingleSel() ) { ChangeCurrent(newCurrent); // refresh the old focus to remove it RefreshLine( oldCurrent ); // select all the items between the old and the new one if ( oldCurrent > newCurrent ) { newCurrent = oldCurrent; oldCurrent = m_current; } HighlightLines(oldCurrent, newCurrent); } else // !shift { // all previously selected items are unselected unless ctrl is held // in a multiselection control if ( !event.ControlDown() || IsSingleSel() ) HighlightAll(false); ChangeCurrent(newCurrent); // refresh the old focus to remove it RefreshLine( oldCurrent ); // in single selection mode we must always have a selected item if ( !event.ControlDown() || IsSingleSel() ) HighlightLine( m_current, true ); } RefreshLine( m_current ); MoveToFocus(); } void wxListMainWindow::OnKeyDown( wxKeyEvent &event ) { wxWindow *parent = GetParent(); // propagate the key event upwards wxKeyEvent ke( wxEVT_KEY_DOWN ); ke.m_shiftDown = event.m_shiftDown; ke.m_controlDown = event.m_controlDown; ke.m_altDown = event.m_altDown; ke.m_metaDown = event.m_metaDown; ke.m_keyCode = event.m_keyCode; ke.m_x = event.m_x; ke.m_y = event.m_y; ke.SetEventObject( parent ); if (parent->GetEventHandler()->ProcessEvent( ke )) return; event.Skip(); } void wxListMainWindow::OnKeyUp( wxKeyEvent &event ) { wxWindow *parent = GetParent(); // propagate the key event upwards wxKeyEvent ke( wxEVT_KEY_UP ); ke.m_shiftDown = event.m_shiftDown; ke.m_controlDown = event.m_controlDown; ke.m_altDown = event.m_altDown; ke.m_metaDown = event.m_metaDown; ke.m_keyCode = event.m_keyCode; ke.m_x = event.m_x; ke.m_y = event.m_y; ke.SetEventObject( parent ); if (parent->GetEventHandler()->ProcessEvent( ke )) return; event.Skip(); } void wxListMainWindow::OnChar( wxKeyEvent &event ) { wxWindow *parent = GetParent(); // send a list_key event up if ( HasCurrent() ) { wxListEvent le( wxEVT_COMMAND_LIST_KEY_DOWN, GetParent()->GetId() ); le.m_itemIndex = m_current; GetLine(m_current)->GetItem( 0, le.m_item ); le.m_code = event.GetKeyCode(); le.SetEventObject( parent ); parent->GetEventHandler()->ProcessEvent( le ); } // propagate the char event upwards wxKeyEvent ke( wxEVT_CHAR ); ke.m_shiftDown = event.m_shiftDown; ke.m_controlDown = event.m_controlDown; ke.m_altDown = event.m_altDown; ke.m_metaDown = event.m_metaDown; ke.m_keyCode = event.m_keyCode; ke.m_x = event.m_x; ke.m_y = event.m_y; ke.SetEventObject( parent ); if (parent->GetEventHandler()->ProcessEvent( ke )) return; if (event.GetKeyCode() == WXK_TAB) { wxNavigationKeyEvent nevent; nevent.SetWindowChange( event.ControlDown() ); nevent.SetDirection( !event.ShiftDown() ); nevent.SetEventObject( GetParent()->GetParent() ); nevent.SetCurrentFocus( m_parent ); if (GetParent()->GetParent()->GetEventHandler()->ProcessEvent( nevent )) return; } // no item -> nothing to do if (!HasCurrent()) { event.Skip(); return; } // don't use m_linesPerPage directly as it might not be computed yet const int pageSize = GetCountPerPage(); wxCHECK_RET( pageSize, _T("should have non zero page size") ); if (GetLayoutDirection() == wxLayout_RightToLeft) { if (event.GetKeyCode() == WXK_RIGHT) event.m_keyCode = WXK_LEFT; else if (event.GetKeyCode() == WXK_LEFT) event.m_keyCode = WXK_RIGHT; } switch ( event.GetKeyCode() ) { case WXK_UP: if ( m_current > 0 ) OnArrowChar( m_current - 1, event ); break; case WXK_DOWN: if ( m_current < (size_t)GetItemCount() - 1 ) OnArrowChar( m_current + 1, event ); break; case WXK_END: if (!IsEmpty()) OnArrowChar( GetItemCount() - 1, event ); break; case WXK_HOME: if (!IsEmpty()) OnArrowChar( 0, event ); break; case WXK_PAGEUP: { int steps = InReportView() ? pageSize - 1 : m_current % pageSize; int index = m_current - steps; if (index < 0) index = 0; OnArrowChar( index, event ); } break; case WXK_PAGEDOWN: { int steps = InReportView() ? pageSize - 1 : pageSize - (m_current % pageSize) - 1; size_t index = m_current + steps; size_t count = GetItemCount(); if ( index >= count ) index = count - 1; OnArrowChar( index, event ); } break; case WXK_LEFT: if ( !InReportView() ) { int index = m_current - pageSize; if (index < 0) index = 0; OnArrowChar( index, event ); } break; case WXK_RIGHT: if ( !InReportView() ) { size_t index = m_current + pageSize; size_t count = GetItemCount(); if ( index >= count ) index = count - 1; OnArrowChar( index, event ); } break; case WXK_SPACE: if ( IsSingleSel() ) { if ( event.ControlDown() ) { ReverseHighlight(m_current); } else // normal space press { SendNotify( m_current, wxEVT_COMMAND_LIST_ITEM_ACTIVATED ); } } else // multiple selection { ReverseHighlight(m_current); } break; case WXK_RETURN: case WXK_EXECUTE: SendNotify( m_current, wxEVT_COMMAND_LIST_ITEM_ACTIVATED ); break; default: event.Skip(); } } // ---------------------------------------------------------------------------- // focus handling // ---------------------------------------------------------------------------- void wxListMainWindow::OnSetFocus( wxFocusEvent &WXUNUSED(event) ) { if ( GetParent() ) { wxFocusEvent event( wxEVT_SET_FOCUS, GetParent()->GetId() ); event.SetEventObject( GetParent() ); if ( GetParent()->GetEventHandler()->ProcessEvent( event) ) return; } // wxGTK sends us EVT_SET_FOCUS events even if we had never got // EVT_KILL_FOCUS before which means that we finish by redrawing the items // which are already drawn correctly resulting in horrible flicker - avoid // it if ( !m_hasFocus ) { m_hasFocus = true; RefreshSelected(); } } void wxListMainWindow::OnKillFocus( wxFocusEvent &WXUNUSED(event) ) { if ( GetParent() ) { wxFocusEvent event( wxEVT_KILL_FOCUS, GetParent()->GetId() ); event.SetEventObject( GetParent() ); if ( GetParent()->GetEventHandler()->ProcessEvent( event) ) return; } m_hasFocus = false; RefreshSelected(); } void wxListMainWindow::DrawImage( int index, wxDC *dc, int x, int y ) { if ( HasFlag(wxLC_ICON) && (m_normal_image_list)) { m_normal_image_list->Draw( index, *dc, x, y, wxIMAGELIST_DRAW_TRANSPARENT ); } else if ( HasFlag(wxLC_SMALL_ICON) && (m_small_image_list)) { m_small_image_list->Draw( index, *dc, x, y, wxIMAGELIST_DRAW_TRANSPARENT ); } else if ( HasFlag(wxLC_LIST) && (m_small_image_list)) { m_small_image_list->Draw( index, *dc, x, y, wxIMAGELIST_DRAW_TRANSPARENT ); } else if ( InReportView() && (m_small_image_list)) { m_small_image_list->Draw( index, *dc, x, y, wxIMAGELIST_DRAW_TRANSPARENT ); } } void wxListMainWindow::GetImageSize( int index, int &width, int &height ) const { if ( HasFlag(wxLC_ICON) && m_normal_image_list ) { m_normal_image_list->GetSize( index, width, height ); } else if ( HasFlag(wxLC_SMALL_ICON) && m_small_image_list ) { m_small_image_list->GetSize( index, width, height ); } else if ( HasFlag(wxLC_LIST) && m_small_image_list ) { m_small_image_list->GetSize( index, width, height ); } else if ( InReportView() && m_small_image_list ) { m_small_image_list->GetSize( index, width, height ); } else { width = height = 0; } } int wxListMainWindow::GetTextLength( const wxString &s ) const { wxClientDC dc( wxConstCast(this, wxListMainWindow) ); dc.SetFont( GetFont() ); wxCoord lw; dc.GetTextExtent( s, &lw, NULL ); return lw + AUTOSIZE_COL_MARGIN; } void wxListMainWindow::SetImageList( wxImageList *imageList, int which ) { m_dirty = true; // calc the spacing from the icon size int width = 0, height = 0; if ((imageList) && (imageList->GetImageCount()) ) imageList->GetSize(0, width, height); if (which == wxIMAGE_LIST_NORMAL) { m_normal_image_list = imageList; m_normal_spacing = width + 8; } if (which == wxIMAGE_LIST_SMALL) { m_small_image_list = imageList; m_small_spacing = width + 14; m_lineHeight = 0; // ensure that the line height will be recalc'd } } void wxListMainWindow::SetItemSpacing( int spacing, bool isSmall ) { m_dirty = true; if (isSmall) m_small_spacing = spacing; else m_normal_spacing = spacing; } int wxListMainWindow::GetItemSpacing( bool isSmall ) { return isSmall ? m_small_spacing : m_normal_spacing; } // ---------------------------------------------------------------------------- // columns // ---------------------------------------------------------------------------- void wxListMainWindow::SetColumn( int col, wxListItem &item ) { wxListHeaderDataList::compatibility_iterator node = m_columns.Item( col ); wxCHECK_RET( node, _T("invalid column index in SetColumn") ); if ( item.m_width == wxLIST_AUTOSIZE_USEHEADER ) item.m_width = GetTextLength( item.m_text ); wxListHeaderData *column = node->GetData(); column->SetItem( item ); wxListHeaderWindow *headerWin = GetListCtrl()->m_headerWin; if ( headerWin ) headerWin->m_dirty = true; m_dirty = true; // invalidate it as it has to be recalculated m_headerWidth = 0; } void wxListMainWindow::SetColumnWidth( int col, int width ) { wxCHECK_RET( col >= 0 && col < GetColumnCount(), _T("invalid column index") ); wxCHECK_RET( InReportView(), _T("SetColumnWidth() can only be called in report mode.") ); m_dirty = true; wxListHeaderWindow *headerWin = GetListCtrl()->m_headerWin; if ( headerWin ) headerWin->m_dirty = true; wxListHeaderDataList::compatibility_iterator node = m_columns.Item( col ); wxCHECK_RET( node, _T("no column?") ); wxListHeaderData *column = node->GetData(); size_t count = GetItemCount(); if (width == wxLIST_AUTOSIZE_USEHEADER) { width = GetTextLength(column->GetText()); width += 2*EXTRA_WIDTH; // check for column header's image availability const int image = column->GetImage(); if ( image != -1 ) { if ( m_small_image_list ) { int ix = 0, iy = 0; m_small_image_list->GetSize(image, ix, iy); width += ix + HEADER_IMAGE_MARGIN_IN_REPORT_MODE; } } } else if ( width == wxLIST_AUTOSIZE ) { if ( IsVirtual() ) { // TODO: determine the max width somehow... width = WIDTH_COL_DEFAULT; } else // !virtual { wxClientDC dc(this); dc.SetFont( GetFont() ); int max = AUTOSIZE_COL_MARGIN; // if the cached column width isn't valid then recalculate it if (m_aColWidths.Item(col)->bNeedsUpdate) { for (size_t i = 0; i < count; i++) { wxListLineData *line = GetLine( i ); wxListItemDataList::compatibility_iterator n = line->m_items.Item( col ); wxCHECK_RET( n, _T("no subitem?") ); wxListItemData *itemData = n->GetData(); wxListItem item; itemData->GetItem(item); int itemWidth = GetItemWidthWithImage(&item); if (itemWidth > max) max = itemWidth; } m_aColWidths.Item(col)->bNeedsUpdate = false; m_aColWidths.Item(col)->nMaxWidth = max; } max = m_aColWidths.Item(col)->nMaxWidth; width = max + AUTOSIZE_COL_MARGIN; } } column->SetWidth( width ); // invalidate it as it has to be recalculated m_headerWidth = 0; } int wxListMainWindow::GetHeaderWidth() const { if ( !m_headerWidth ) { wxListMainWindow *self = wxConstCast(this, wxListMainWindow); size_t count = GetColumnCount(); for ( size_t col = 0; col < count; col++ ) { self->m_headerWidth += GetColumnWidth(col); } } return m_headerWidth; } void wxListMainWindow::GetColumn( int col, wxListItem &item ) const { wxListHeaderDataList::compatibility_iterator node = m_columns.Item( col ); wxCHECK_RET( node, _T("invalid column index in GetColumn") ); wxListHeaderData *column = node->GetData(); column->GetItem( item ); } int wxListMainWindow::GetColumnWidth( int col ) const { wxListHeaderDataList::compatibility_iterator node = m_columns.Item( col ); wxCHECK_MSG( node, 0, _T("invalid column index") ); wxListHeaderData *column = node->GetData(); return column->GetWidth(); } // ---------------------------------------------------------------------------- // item state // ---------------------------------------------------------------------------- void wxListMainWindow::SetItem( wxListItem &item ) { long id = item.m_itemId; wxCHECK_RET( id >= 0 && (size_t)id < GetItemCount(), _T("invalid item index in SetItem") ); if ( !IsVirtual() ) { wxListLineData *line = GetLine((size_t)id); line->SetItem( item.m_col, item ); // Set item state if user wants if ( item.m_mask & wxLIST_MASK_STATE ) SetItemState( item.m_itemId, item.m_state, item.m_state ); if (InReportView()) { // update the Max Width Cache if needed int width = GetItemWidthWithImage(&item); if (width > m_aColWidths.Item(item.m_col)->nMaxWidth) m_aColWidths.Item(item.m_col)->nMaxWidth = width; } } // update the item on screen wxRect rectItem; GetItemRect(id, rectItem); RefreshRect(rectItem); } void wxListMainWindow::SetItemStateAll(long state, long stateMask) { if ( IsEmpty() ) return; // first deal with selection if ( stateMask & wxLIST_STATE_SELECTED ) { // set/clear select state if ( IsVirtual() ) { // optimized version for virtual listctrl. m_selStore.SelectRange(0, GetItemCount() - 1, state == wxLIST_STATE_SELECTED); Refresh(); } else if ( state & wxLIST_STATE_SELECTED ) { const long count = GetItemCount(); for( long i = 0; i < count; i++ ) { SetItemState( i, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED ); } } else { // clear for non virtual (somewhat optimized by using GetNextItem()) long i = -1; while ( (i = GetNextItem(i, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED)) != -1 ) { SetItemState( i, 0, wxLIST_STATE_SELECTED ); } } } if ( HasCurrent() && (state == 0) && (stateMask & wxLIST_STATE_FOCUSED) ) { // unfocus all: only one item can be focussed, so clearing focus for // all items is simply clearing focus of the focussed item. SetItemState(m_current, state, stateMask); } //(setting focus to all items makes no sense, so it is not handled here.) } void wxListMainWindow::SetItemState( long litem, long state, long stateMask ) { if ( litem == -1 ) { SetItemStateAll(state, stateMask); return; } wxCHECK_RET( litem >= 0 && (size_t)litem < GetItemCount(), _T("invalid list ctrl item index in SetItem") ); size_t oldCurrent = m_current; size_t item = (size_t)litem; // safe because of the check above // do we need to change the focus? if ( stateMask & wxLIST_STATE_FOCUSED ) { if ( state & wxLIST_STATE_FOCUSED ) { // don't do anything if this item is already focused if ( item != m_current ) { ChangeCurrent(item); if ( oldCurrent != (size_t)-1 ) { if ( IsSingleSel() ) { HighlightLine(oldCurrent, false); } RefreshLine(oldCurrent); } RefreshLine( m_current ); } } else // unfocus { // don't do anything if this item is not focused if ( item == m_current ) { ResetCurrent(); if ( IsSingleSel() ) { // we must unselect the old current item as well or we // might end up with more than one selected item in a // single selection control HighlightLine(oldCurrent, false); } RefreshLine( oldCurrent ); } } } // do we need to change the selection state? if ( stateMask & wxLIST_STATE_SELECTED ) { bool on = (state & wxLIST_STATE_SELECTED) != 0; if ( IsSingleSel() ) { if ( on ) { // selecting the item also makes it the focused one in the // single sel mode if ( m_current != item ) { ChangeCurrent(item); if ( oldCurrent != (size_t)-1 ) { HighlightLine( oldCurrent, false ); RefreshLine( oldCurrent ); } } } else // off { // only the current item may be selected anyhow if ( item != m_current ) return; } } if ( HighlightLine(item, on) ) { RefreshLine(item); } } } int wxListMainWindow::GetItemState( long item, long stateMask ) const { wxCHECK_MSG( item >= 0 && (size_t)item < GetItemCount(), 0, _T("invalid list ctrl item index in GetItemState()") ); int ret = wxLIST_STATE_DONTCARE; if ( stateMask & wxLIST_STATE_FOCUSED ) { if ( (size_t)item == m_current ) ret |= wxLIST_STATE_FOCUSED; } if ( stateMask & wxLIST_STATE_SELECTED ) { if ( IsHighlighted(item) ) ret |= wxLIST_STATE_SELECTED; } return ret; } void wxListMainWindow::GetItem( wxListItem &item ) const { wxCHECK_RET( item.m_itemId >= 0 && (size_t)item.m_itemId < GetItemCount(), _T("invalid item index in GetItem") ); wxListLineData *line = GetLine((size_t)item.m_itemId); line->GetItem( item.m_col, item ); // Get item state if user wants it if ( item.m_mask & wxLIST_MASK_STATE ) item.m_state = GetItemState( item.m_itemId, wxLIST_STATE_SELECTED | wxLIST_STATE_FOCUSED ); } // ---------------------------------------------------------------------------- // item count // ---------------------------------------------------------------------------- size_t wxListMainWindow::GetItemCount() const { return IsVirtual() ? m_countVirt : m_lines.GetCount(); } void wxListMainWindow::SetItemCount(long count) { m_selStore.SetItemCount(count); m_countVirt = count; ResetVisibleLinesRange(); // scrollbars must be reset m_dirty = true; } int wxListMainWindow::GetSelectedItemCount() const { // deal with the quick case first if ( IsSingleSel() ) return HasCurrent() ? IsHighlighted(m_current) : false; // virtual controls remmebers all its selections itself if ( IsVirtual() ) return m_selStore.GetSelectedCount(); // TODO: we probably should maintain the number of items selected even for // non virtual controls as enumerating all lines is really slow... size_t countSel = 0; size_t count = GetItemCount(); for ( size_t line = 0; line < count; line++ ) { if ( GetLine(line)->IsHighlighted() ) countSel++; } return countSel; } // ---------------------------------------------------------------------------- // item position/size // ---------------------------------------------------------------------------- wxRect wxListMainWindow::GetViewRect() const { wxASSERT_MSG( !HasFlag(wxLC_REPORT | wxLC_LIST), _T("wxListCtrl::GetViewRect() only works in icon mode") ); // we need to find the longest/tallest label wxCoord xMax = 0, yMax = 0; const int count = GetItemCount(); if ( count ) { for ( int i = 0; i < count; i++ ) { wxRect r; GetItemRect(i, r); wxCoord x = r.GetRight(), y = r.GetBottom(); if ( x > xMax ) xMax = x; if ( y > yMax ) yMax = y; } } // some fudge needed to make it look prettier xMax += 2 * EXTRA_BORDER_X; yMax += 2 * EXTRA_BORDER_Y; // account for the scrollbars if necessary const wxSize sizeAll = GetClientSize(); if ( xMax > sizeAll.x ) yMax += wxSystemSettings::GetMetric(wxSYS_HSCROLL_Y); if ( yMax > sizeAll.y ) xMax += wxSystemSettings::GetMetric(wxSYS_VSCROLL_X); return wxRect(0, 0, xMax, yMax); } void wxListMainWindow::GetItemRect( long index, wxRect &rect ) const { wxCHECK_RET( index >= 0 && (size_t)index < GetItemCount(), _T("invalid index in GetItemRect") ); // ensure that we're laid out, otherwise we could return nonsense if ( m_dirty ) { wxConstCast(this, wxListMainWindow)-> RecalculatePositions(true /* no refresh */); } rect = GetLineRect((size_t)index); CalcScrolledPosition(rect.x, rect.y, &rect.x, &rect.y); } bool wxListMainWindow::GetItemPosition(long item, wxPoint& pos) const { wxRect rect; GetItemRect(item, rect); pos.x = rect.x; pos.y = rect.y; return true; } // ---------------------------------------------------------------------------- // geometry calculation // ---------------------------------------------------------------------------- void wxListMainWindow::RecalculatePositions(bool noRefresh) { const int lineHeight = GetLineHeight(); wxClientDC dc( this ); dc.SetFont( GetFont() ); const size_t count = GetItemCount(); int iconSpacing; if ( HasFlag(wxLC_ICON) ) iconSpacing = m_normal_spacing; else if ( HasFlag(wxLC_SMALL_ICON) ) iconSpacing = m_small_spacing; else iconSpacing = 0; // Note that we do not call GetClientSize() here but // GetSize() and subtract the border size for sunken // borders manually. This is technically incorrect, // but we need to know the client area's size WITHOUT // scrollbars here. Since we don't know if there are // any scrollbars, we use GetSize() instead. Another // solution would be to call SetScrollbars() here to // remove the scrollbars and call GetClientSize() then, // but this might result in flicker and - worse - will // reset the scrollbars to 0 which is not good at all // if you resize a dialog/window, but don't want to // reset the window scrolling. RR. // Furthermore, we actually do NOT subtract the border // width as 2 pixels is just the extra space which we // need around the actual content in the window. Other- // wise the text would e.g. touch the upper border. RR. int clientWidth, clientHeight; GetSize( &clientWidth, &clientHeight ); if ( InReportView() ) { // all lines have the same height and we scroll one line per step int entireHeight = count * lineHeight + LINE_SPACING; m_linesPerPage = clientHeight / lineHeight; ResetVisibleLinesRange(); SetScrollbars( SCROLL_UNIT_X, lineHeight, GetHeaderWidth() / SCROLL_UNIT_X, (entireHeight + lineHeight - 1) / lineHeight, GetScrollPos(wxHORIZONTAL), GetScrollPos(wxVERTICAL), true ); } else // !report { // we have 3 different layout strategies: either layout all items // horizontally/vertically (wxLC_ALIGN_XXX styles explicitly given) or // to arrange them in top to bottom, left to right (don't ask me why // not the other way round...) order if ( HasFlag(wxLC_ALIGN_LEFT | wxLC_ALIGN_TOP) ) { int x = EXTRA_BORDER_X; int y = EXTRA_BORDER_Y; wxCoord widthMax = 0; size_t i; for ( i = 0; i < count; i++ ) { wxListLineData *line = GetLine(i); line->CalculateSize( &dc, iconSpacing ); line->SetPosition( x, y, iconSpacing ); wxSize sizeLine = GetLineSize(i); if ( HasFlag(wxLC_ALIGN_TOP) ) { if ( sizeLine.x > widthMax ) widthMax = sizeLine.x; y += sizeLine.y; } else // wxLC_ALIGN_LEFT { x += sizeLine.x + MARGIN_BETWEEN_ROWS; } } if ( HasFlag(wxLC_ALIGN_TOP) ) { // traverse the items again and tweak their sizes so that they are // all the same in a row for ( i = 0; i < count; i++ ) { wxListLineData *line = GetLine(i); line->m_gi->ExtendWidth(widthMax); } } SetScrollbars ( SCROLL_UNIT_X, lineHeight, (x + SCROLL_UNIT_X) / SCROLL_UNIT_X, (y + lineHeight) / lineHeight, GetScrollPos( wxHORIZONTAL ), GetScrollPos( wxVERTICAL ), true ); } else // "flowed" arrangement, the most complicated case { // at first we try without any scrollbars, if the items don't fit into // the window, we recalculate after subtracting the space taken by the // scrollbar int entireWidth = 0; for (int tries = 0; tries < 2; tries++) { entireWidth = 2 * EXTRA_BORDER_X; if (tries == 1) { // Now we have decided that the items do not fit into the // client area, so we need a scrollbar entireWidth += SCROLL_UNIT_X; } int x = EXTRA_BORDER_X; int y = EXTRA_BORDER_Y; int maxWidthInThisRow = 0; m_linesPerPage = 0; int currentlyVisibleLines = 0; for (size_t i = 0; i < count; i++) { currentlyVisibleLines++; wxListLineData *line = GetLine( i ); line->CalculateSize( &dc, iconSpacing ); line->SetPosition( x, y, iconSpacing ); wxSize sizeLine = GetLineSize( i ); if ( maxWidthInThisRow < sizeLine.x ) maxWidthInThisRow = sizeLine.x; y += sizeLine.y; if (currentlyVisibleLines > m_linesPerPage) m_linesPerPage = currentlyVisibleLines; if ( y + sizeLine.y >= clientHeight ) { currentlyVisibleLines = 0; y = EXTRA_BORDER_Y; maxWidthInThisRow += MARGIN_BETWEEN_ROWS; x += maxWidthInThisRow; entireWidth += maxWidthInThisRow; maxWidthInThisRow = 0; } // We have reached the last item. if ( i == count - 1 ) entireWidth += maxWidthInThisRow; if ( (tries == 0) && (entireWidth + SCROLL_UNIT_X > clientWidth) ) { clientHeight -= wxSystemSettings:: GetMetric(wxSYS_HSCROLL_Y); m_linesPerPage = 0; break; } if ( i == count - 1 ) tries = 1; // Everything fits, no second try required. } } SetScrollbars ( SCROLL_UNIT_X, lineHeight, (entireWidth + SCROLL_UNIT_X) / SCROLL_UNIT_X, 0, GetScrollPos( wxHORIZONTAL ), 0, true ); } } if ( !noRefresh ) { // FIXME: why should we call it from here? UpdateCurrent(); RefreshAll(); } } void wxListMainWindow::RefreshAll() { m_dirty = false; Refresh(); wxListHeaderWindow *headerWin = GetListCtrl()->m_headerWin; if ( headerWin && headerWin->m_dirty ) { headerWin->m_dirty = false; headerWin->Refresh(); } } void wxListMainWindow::UpdateCurrent() { if ( !HasCurrent() && !IsEmpty() ) ChangeCurrent(0); } long wxListMainWindow::GetNextItem( long item, int WXUNUSED(geometry), int state ) const { long ret = item, max = GetItemCount(); wxCHECK_MSG( (ret == -1) || (ret < max), -1, _T("invalid listctrl index in GetNextItem()") ); // notice that we start with the next item (or the first one if item == -1) // and this is intentional to allow writing a simple loop to iterate over // all selected items ret++; if ( ret == max ) // this is not an error because the index was OK initially, // just no such item return -1; if ( !state ) // any will do return (size_t)ret; size_t count = GetItemCount(); for ( size_t line = (size_t)ret; line < count; line++ ) { if ( (state & wxLIST_STATE_FOCUSED) && (line == m_current) ) return line; if ( (state & wxLIST_STATE_SELECTED) && IsHighlighted(line) ) return line; } return -1; } // ---------------------------------------------------------------------------- // deleting stuff // ---------------------------------------------------------------------------- void wxListMainWindow::DeleteItem( long lindex ) { size_t count = GetItemCount(); wxCHECK_RET( (lindex >= 0) && ((size_t)lindex < count), _T("invalid item index in DeleteItem") ); size_t index = (size_t)lindex; // we don't need to adjust the index for the previous items if ( HasCurrent() && m_current >= index ) { // if the current item is being deleted, we want the next one to // become selected - unless there is no next one - so don't adjust // m_current in this case if ( m_current != index || m_current == count - 1 ) m_current--; } if ( InReportView() ) { // mark the Column Max Width cache as dirty if the items in the line // we're deleting contain the Max Column Width wxListLineData * const line = GetLine(index); wxListItemDataList::compatibility_iterator n; wxListItemData *itemData; wxListItem item; int itemWidth; for (size_t i = 0; i < m_columns.GetCount(); i++) { n = line->m_items.Item( i ); itemData = n->GetData(); itemData->GetItem(item); itemWidth = GetItemWidthWithImage(&item); if (itemWidth >= m_aColWidths.Item(i)->nMaxWidth) m_aColWidths.Item(i)->bNeedsUpdate = true; } ResetVisibleLinesRange(); } SendNotify( index, wxEVT_COMMAND_LIST_DELETE_ITEM, wxDefaultPosition ); if ( IsVirtual() ) { m_countVirt--; m_selStore.OnItemDelete(index); } else { m_lines.RemoveAt( index ); } // we need to refresh the (vert) scrollbar as the number of items changed m_dirty = true; RefreshAfter(index); } void wxListMainWindow::DeleteColumn( int col ) { wxListHeaderDataList::compatibility_iterator node = m_columns.Item( col ); wxCHECK_RET( node, wxT("invalid column index in DeleteColumn()") ); m_dirty = true; delete node->GetData(); m_columns.Erase( node ); if ( !IsVirtual() ) { // update all the items for ( size_t i = 0; i < m_lines.GetCount(); i++ ) { wxListLineData * const line = GetLine(i); wxListItemDataList::compatibility_iterator n = line->m_items.Item( col ); delete n->GetData(); line->m_items.Erase(n); } } if ( InReportView() ) // we only cache max widths when in Report View { delete m_aColWidths.Item(col); m_aColWidths.RemoveAt(col); } // invalidate it as it has to be recalculated m_headerWidth = 0; } void wxListMainWindow::DoDeleteAllItems() { if ( IsEmpty() ) // nothing to do - in particular, don't send the event return; ResetCurrent(); // to make the deletion of all items faster, we don't send the // notifications for each item deletion in this case but only one event // for all of them: this is compatible with wxMSW and documented in // DeleteAllItems() description wxListEvent event( wxEVT_COMMAND_LIST_DELETE_ALL_ITEMS, GetParent()->GetId() ); event.SetEventObject( GetParent() ); GetParent()->GetEventHandler()->ProcessEvent( event ); if ( IsVirtual() ) { m_countVirt = 0; m_selStore.Clear(); } if ( InReportView() ) { ResetVisibleLinesRange(); for (size_t i = 0; i < m_aColWidths.GetCount(); i++) { m_aColWidths.Item(i)->bNeedsUpdate = true; } } m_lines.Clear(); } void wxListMainWindow::DeleteAllItems() { DoDeleteAllItems(); RecalculatePositions(); } void wxListMainWindow::DeleteEverything() { WX_CLEAR_LIST(wxListHeaderDataList, m_columns); WX_CLEAR_ARRAY(m_aColWidths); DeleteAllItems(); } // ---------------------------------------------------------------------------- // scanning for an item // ---------------------------------------------------------------------------- void wxListMainWindow::EnsureVisible( long index ) { wxCHECK_RET( index >= 0 && (size_t)index < GetItemCount(), _T("invalid index in EnsureVisible") ); // We have to call this here because the label in question might just have // been added and its position is not known yet if ( m_dirty ) RecalculatePositions(true /* no refresh */); MoveToItem((size_t)index); } long wxListMainWindow::FindItem(long start, const wxString& str, bool partial ) { if (str.empty()) return wxNOT_FOUND; long pos = start; wxString str_upper = str.Upper(); if (pos < 0) pos = 0; size_t count = GetItemCount(); for ( size_t i = (size_t)pos; i < count; i++ ) { wxListLineData *line = GetLine(i); wxString line_upper = line->GetText(0).Upper(); if (!partial) { if (line_upper == str_upper ) return i; } else { if (line_upper.find(str_upper) == 0) return i; } } return wxNOT_FOUND; } long wxListMainWindow::FindItem(long start, wxUIntPtr data) { long pos = start; if (pos < 0) pos = 0; size_t count = GetItemCount(); for (size_t i = (size_t)pos; i < count; i++) { wxListLineData *line = GetLine(i); wxListItem item; line->GetItem( 0, item ); if (item.m_data == data) return i; } return wxNOT_FOUND; } long wxListMainWindow::FindItem( const wxPoint& pt ) { size_t topItem; GetVisibleLinesRange( &topItem, NULL ); wxPoint p; GetItemPosition( GetItemCount() - 1, p ); if ( p.y == 0 ) return topItem; long id = (long)floor( pt.y * double(GetItemCount() - topItem - 1) / p.y + topItem ); if ( id >= 0 && id < (long)GetItemCount() ) return id; return wxNOT_FOUND; } long wxListMainWindow::HitTest( int x, int y, int &flags ) const { CalcUnscrolledPosition( x, y, &x, &y ); size_t count = GetItemCount(); if ( InReportView() ) { size_t current = y / GetLineHeight(); if ( current < count ) { flags = HitTestLine(current, x, y); if ( flags ) return current; } } else // !report { // TODO: optimize it too! this is less simple than for report view but // enumerating all items is still not a way to do it!! for ( size_t current = 0; current < count; current++ ) { flags = HitTestLine(current, x, y); if ( flags ) return current; } } return wxNOT_FOUND; } // ---------------------------------------------------------------------------- // adding stuff // ---------------------------------------------------------------------------- void wxListMainWindow::InsertItem( wxListItem &item ) { wxASSERT_MSG( !IsVirtual(), _T("can't be used with virtual control") ); int count = GetItemCount(); wxCHECK_RET( item.m_itemId >= 0, _T("invalid item index") ); if (item.m_itemId > count) item.m_itemId = count; size_t id = item.m_itemId; m_dirty = true; if ( InReportView() ) { ResetVisibleLinesRange(); // calculate the width of the item and adjust the max column width wxColWidthInfo *pWidthInfo = m_aColWidths.Item(item.GetColumn()); int width = GetItemWidthWithImage(&item); item.SetWidth(width); if (width > pWidthInfo->nMaxWidth) pWidthInfo->nMaxWidth = width; } wxListLineData *line = new wxListLineData(this); line->SetItem( item.m_col, item ); m_lines.Insert( line, id ); m_dirty = true; // If an item is selected at or below the point of insertion, we need to // increment the member variables because the current row's index has gone // up by one if ( HasCurrent() && m_current >= id ) m_current++; SendNotify(id, wxEVT_COMMAND_LIST_INSERT_ITEM); RefreshLines(id, GetItemCount() - 1); } void wxListMainWindow::InsertColumn( long col, wxListItem &item ) { m_dirty = true; if ( InReportView() ) { if (item.m_width == wxLIST_AUTOSIZE_USEHEADER) item.m_width = GetTextLength( item.m_text ); wxListHeaderData *column = new wxListHeaderData( item ); wxColWidthInfo *colWidthInfo = new wxColWidthInfo(); bool insert = (col >= 0) && ((size_t)col < m_columns.GetCount()); if ( insert ) { wxListHeaderDataList::compatibility_iterator node = m_columns.Item( col ); m_columns.Insert( node, column ); m_aColWidths.Insert( colWidthInfo, col ); } else { m_columns.Append( column ); m_aColWidths.Add( colWidthInfo ); } if ( !IsVirtual() ) { // update all the items for ( size_t i = 0; i < m_lines.GetCount(); i++ ) { wxListLineData * const line = GetLine(i); wxListItemData * const data = new wxListItemData(this); if ( insert ) line->m_items.Insert(col, data); else line->m_items.Append(data); } } // invalidate it as it has to be recalculated m_headerWidth = 0; } } int wxListMainWindow::GetItemWidthWithImage(wxListItem * item) { int width = 0; wxClientDC dc(this); dc.SetFont( GetFont() ); if (item->GetImage() != -1) { int ix, iy; GetImageSize( item->GetImage(), ix, iy ); width += ix + 5; } if (!item->GetText().empty()) { wxCoord w; dc.GetTextExtent( item->GetText(), &w, NULL ); width += w; } return width; } // ---------------------------------------------------------------------------- // sorting // ---------------------------------------------------------------------------- wxListCtrlCompare list_ctrl_compare_func_2; long list_ctrl_compare_data; int LINKAGEMODE list_ctrl_compare_func_1( wxListLineData **arg1, wxListLineData **arg2 ) { wxListLineData *line1 = *arg1; wxListLineData *line2 = *arg2; wxListItem item; line1->GetItem( 0, item ); wxUIntPtr data1 = item.m_data; line2->GetItem( 0, item ); wxUIntPtr data2 = item.m_data; return list_ctrl_compare_func_2( data1, data2, list_ctrl_compare_data ); } void wxListMainWindow::SortItems( wxListCtrlCompare fn, long data ) { // selections won't make sense any more after sorting the items so reset // them HighlightAll(false); ResetCurrent(); list_ctrl_compare_func_2 = fn; list_ctrl_compare_data = data; m_lines.Sort( list_ctrl_compare_func_1 ); m_dirty = true; } // ---------------------------------------------------------------------------- // scrolling // ---------------------------------------------------------------------------- void wxListMainWindow::OnScroll(wxScrollWinEvent& event) { // FIXME #if ( defined(__WXGTK__) || defined(__WXMAC__) ) && !defined(__WXUNIVERSAL__) wxScrolledWindow::OnScroll(event); #else HandleOnScroll( event ); #endif // update our idea of which lines are shown when we redraw the window the // next time ResetVisibleLinesRange(); if ( event.GetOrientation() == wxHORIZONTAL && HasHeader() ) { wxGenericListCtrl* lc = GetListCtrl(); wxCHECK_RET( lc, _T("no listctrl window?") ); lc->m_headerWin->Refresh(); lc->m_headerWin->Update(); } } int wxListMainWindow::GetCountPerPage() const { if ( !m_linesPerPage ) { wxConstCast(this, wxListMainWindow)-> m_linesPerPage = GetClientSize().y / GetLineHeight(); } return m_linesPerPage; } void wxListMainWindow::GetVisibleLinesRange(size_t *from, size_t *to) { wxASSERT_MSG( InReportView(), _T("this is for report mode only") ); if ( m_lineFrom == (size_t)-1 ) { size_t count = GetItemCount(); if ( count ) { m_lineFrom = GetScrollPos(wxVERTICAL); // this may happen if SetScrollbars() hadn't been called yet if ( m_lineFrom >= count ) m_lineFrom = count - 1; // we redraw one extra line but this is needed to make the redrawing // logic work when there is a fractional number of lines on screen m_lineTo = m_lineFrom + m_linesPerPage; if ( m_lineTo >= count ) m_lineTo = count - 1; } else // empty control { m_lineFrom = 0; m_lineTo = (size_t)-1; } } wxASSERT_MSG( IsEmpty() || (m_lineFrom <= m_lineTo && m_lineTo < GetItemCount()), _T("GetVisibleLinesRange() returns incorrect result") ); if ( from ) *from = m_lineFrom; if ( to ) *to = m_lineTo; } // ------------------------------------------------------------------------------------- // wxGenericListCtrl // ------------------------------------------------------------------------------------- BEGIN_EVENT_TABLE(wxGenericListCtrl,wxControl) EVT_SIZE(wxGenericListCtrl::OnSize) END_EVENT_TABLE() wxGenericListCtrl::wxGenericListCtrl() { m_imageListNormal = (wxImageList *) NULL; m_imageListSmall = (wxImageList *) NULL; m_imageListState = (wxImageList *) NULL; m_ownsImageListNormal = m_ownsImageListSmall = m_ownsImageListState = false; m_mainWin = (wxListMainWindow*) NULL; m_headerWin = (wxListHeaderWindow*) NULL; m_headerHeight = 0; } wxGenericListCtrl::~wxGenericListCtrl() { if (m_ownsImageListNormal) delete m_imageListNormal; if (m_ownsImageListSmall) delete m_imageListSmall; if (m_ownsImageListState) delete m_imageListState; } void wxGenericListCtrl::CalculateAndSetHeaderHeight() { if ( m_headerWin ) { #ifdef __WXMAC__ SInt32 h; GetThemeMetric( kThemeMetricListHeaderHeight, &h ); #else // we use 'g' to get the descent, too int w, h, d; m_headerWin->GetTextExtent(wxT("Hg"), &w, &h, &d); h += d + 2 * HEADER_OFFSET_Y + EXTRA_HEIGHT; #endif // only update if changed if ( h != m_headerHeight ) { m_headerHeight = h; if ( HasHeader() ) ResizeReportView(true); else //why is this needed if it doesn't have a header? m_headerWin->SetSize(m_headerWin->GetSize().x, m_headerHeight); } } } void wxGenericListCtrl::CreateHeaderWindow() { m_headerWin = new wxListHeaderWindow ( this, wxID_ANY, m_mainWin, wxPoint(0,0), wxSize(GetClientSize().x, m_headerHeight), wxTAB_TRAVERSAL ); CalculateAndSetHeaderHeight(); } bool wxGenericListCtrl::Create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, long style, const wxValidator &validator, const wxString &name) { m_imageListNormal = m_imageListSmall = m_imageListState = (wxImageList *) NULL; m_ownsImageListNormal = m_ownsImageListSmall = m_ownsImageListState = false; m_mainWin = (wxListMainWindow*) NULL; m_headerWin = (wxListHeaderWindow*) NULL; m_headerHeight = 0; if ( !(style & wxLC_MASK_TYPE) ) { style = style | wxLC_LIST; } // add more styles here that should only appear // in the main window unsigned long only_main_window_style = wxALWAYS_SHOW_SB; if ( !wxControl::Create( parent, id, pos, size, style & ~only_main_window_style, validator, name ) ) return false; // don't create the inner window with the border style &= ~wxBORDER_MASK; m_mainWin = new wxListMainWindow( this, wxID_ANY, wxPoint(0, 0), size, style ); #ifdef __WXMAC_CARBON__ // Human Interface Guidelines ask us for a special font in this case if ( GetWindowVariant() == wxWINDOW_VARIANT_NORMAL ) { wxFont font; font.MacCreateThemeFont( kThemeViewsFont ); SetFont( font ); } #endif if ( InReportView() ) { CreateHeaderWindow(); #ifdef __WXMAC_CARBON__ if (m_headerWin) { wxFont font; font.MacCreateThemeFont( kThemeSmallSystemFont ); m_headerWin->SetFont( font ); CalculateAndSetHeaderHeight(); } #endif if ( HasFlag(wxLC_NO_HEADER) ) // VZ: why do we create it at all then? m_headerWin->Show( false ); } SetInitialSize(size); return true; } void wxGenericListCtrl::SetSingleStyle( long style, bool add ) { wxASSERT_MSG( !(style & wxLC_VIRTUAL), _T("wxLC_VIRTUAL can't be [un]set") ); long flag = GetWindowStyle(); if (add) { if (style & wxLC_MASK_TYPE) flag &= ~(wxLC_MASK_TYPE | wxLC_VIRTUAL); if (style & wxLC_MASK_ALIGN) flag &= ~wxLC_MASK_ALIGN; if (style & wxLC_MASK_SORT) flag &= ~wxLC_MASK_SORT; } if (add) flag |= style; else flag &= ~style; SetWindowStyleFlag( flag ); } void wxGenericListCtrl::SetWindowStyleFlag( long flag ) { if (m_mainWin) { m_mainWin->DeleteEverything(); // has the header visibility changed? bool hasHeader = HasHeader(); bool willHaveHeader = (flag & wxLC_REPORT) && !(flag & wxLC_NO_HEADER); if ( hasHeader != willHaveHeader ) { // toggle it if ( hasHeader ) { if ( m_headerWin ) { // don't delete, just hide, as we can reuse it later m_headerWin->Show(false); } //else: nothing to do } else // must show header { if (!m_headerWin) { CreateHeaderWindow(); } else // already have it, just show { m_headerWin->Show( true ); } } ResizeReportView(willHaveHeader); } } wxWindow::SetWindowStyleFlag( flag ); } bool wxGenericListCtrl::GetColumn(int col, wxListItem &item) const { m_mainWin->GetColumn( col, item ); return true; } bool wxGenericListCtrl::SetColumn( int col, wxListItem& item ) { m_mainWin->SetColumn( col, item ); return true; } int wxGenericListCtrl::GetColumnWidth( int col ) const { return m_mainWin->GetColumnWidth( col ); } bool wxGenericListCtrl::SetColumnWidth( int col, int width ) { m_mainWin->SetColumnWidth( col, width ); return true; } int wxGenericListCtrl::GetCountPerPage() const { return m_mainWin->GetCountPerPage(); // different from Windows ? } bool wxGenericListCtrl::GetItem( wxListItem &info ) const { m_mainWin->GetItem( info ); return true; } bool wxGenericListCtrl::SetItem( wxListItem &info ) { m_mainWin->SetItem( info ); return true; } long wxGenericListCtrl::SetItem( long index, int col, const wxString& label, int imageId ) { wxListItem info; info.m_text = label; info.m_mask = wxLIST_MASK_TEXT; info.m_itemId = index; info.m_col = col; if ( imageId > -1 ) { info.m_image = imageId; info.m_mask |= wxLIST_MASK_IMAGE; } m_mainWin->SetItem(info); return true; } int wxGenericListCtrl::GetItemState( long item, long stateMask ) const { return m_mainWin->GetItemState( item, stateMask ); } bool wxGenericListCtrl::SetItemState( long item, long state, long stateMask ) { m_mainWin->SetItemState( item, state, stateMask ); return true; } bool wxGenericListCtrl::SetItemImage( long item, int image, int WXUNUSED(selImage) ) { return SetItemColumnImage(item, 0, image); } bool wxGenericListCtrl::SetItemColumnImage( long item, long column, int image ) { wxListItem info; info.m_image = image; info.m_mask = wxLIST_MASK_IMAGE; info.m_itemId = item; info.m_col = column; m_mainWin->SetItem( info ); return true; } wxString wxGenericListCtrl::GetItemText( long item ) const { return m_mainWin->GetItemText(item); } void wxGenericListCtrl::SetItemText( long item, const wxString& str ) { m_mainWin->SetItemText(item, str); } wxUIntPtr wxGenericListCtrl::GetItemData( long item ) const { wxListItem info; info.m_mask = wxLIST_MASK_DATA; info.m_itemId = item; m_mainWin->GetItem( info ); return info.m_data; } bool wxGenericListCtrl::SetItemPtrData( long item, wxUIntPtr data ) { wxListItem info; info.m_mask = wxLIST_MASK_DATA; info.m_itemId = item; info.m_data = data; m_mainWin->SetItem( info ); return true; } bool wxGenericListCtrl::SetItemData(long item, long data) { return SetItemPtrData(item, data); } wxRect wxGenericListCtrl::GetViewRect() const { return m_mainWin->GetViewRect(); } bool wxGenericListCtrl::GetItemRect( long item, wxRect &rect, int WXUNUSED(code) ) const { m_mainWin->GetItemRect( item, rect ); if ( m_mainWin->HasHeader() ) rect.y += m_headerHeight + 1; return true; } bool wxGenericListCtrl::GetItemPosition( long item, wxPoint& pos ) const { m_mainWin->GetItemPosition( item, pos ); return true; } bool wxGenericListCtrl::SetItemPosition( long WXUNUSED(item), const wxPoint& WXUNUSED(pos) ) { return 0; } int wxGenericListCtrl::GetItemCount() const { return m_mainWin->GetItemCount(); } int wxGenericListCtrl::GetColumnCount() const { return m_mainWin->GetColumnCount(); } void wxGenericListCtrl::SetItemSpacing( int spacing, bool isSmall ) { m_mainWin->SetItemSpacing( spacing, isSmall ); } wxSize wxGenericListCtrl::GetItemSpacing() const { const int spacing = m_mainWin->GetItemSpacing(HasFlag(wxLC_SMALL_ICON)); return wxSize(spacing, spacing); } #if WXWIN_COMPATIBILITY_2_6 int wxGenericListCtrl::GetItemSpacing( bool isSmall ) const { return m_mainWin->GetItemSpacing( isSmall ); } #endif // WXWIN_COMPATIBILITY_2_6 void wxGenericListCtrl::SetItemTextColour( long item, const wxColour &col ) { wxListItem info; info.m_itemId = item; info.SetTextColour( col ); m_mainWin->SetItem( info ); } wxColour wxGenericListCtrl::GetItemTextColour( long item ) const { wxListItem info; info.m_itemId = item; m_mainWin->GetItem( info ); return info.GetTextColour(); } void wxGenericListCtrl::SetItemBackgroundColour( long item, const wxColour &col ) { wxListItem info; info.m_itemId = item; info.SetBackgroundColour( col ); m_mainWin->SetItem( info ); } wxColour wxGenericListCtrl::GetItemBackgroundColour( long item ) const { wxListItem info; info.m_itemId = item; m_mainWin->GetItem( info ); return info.GetBackgroundColour(); } int wxGenericListCtrl::GetScrollPos( int orient ) const { return m_mainWin->GetScrollPos( orient ); } void wxGenericListCtrl::SetScrollPos( int orient, int pos, bool refresh ) { m_mainWin->SetScrollPos( orient, pos, refresh ); } void wxGenericListCtrl::SetItemFont( long item, const wxFont &f ) { wxListItem info; info.m_itemId = item; info.SetFont( f ); m_mainWin->SetItem( info ); } wxFont wxGenericListCtrl::GetItemFont( long item ) const { wxListItem info; info.m_itemId = item; m_mainWin->GetItem( info ); return info.GetFont(); } int wxGenericListCtrl::GetSelectedItemCount() const { return m_mainWin->GetSelectedItemCount(); } wxColour wxGenericListCtrl::GetTextColour() const { return GetForegroundColour(); } void wxGenericListCtrl::SetTextColour(const wxColour& col) { SetForegroundColour(col); } long wxGenericListCtrl::GetTopItem() const { size_t top; m_mainWin->GetVisibleLinesRange(&top, NULL); return (long)top; } long wxGenericListCtrl::GetNextItem( long item, int geom, int state ) const { return m_mainWin->GetNextItem( item, geom, state ); } wxImageList *wxGenericListCtrl::GetImageList(int which) const { if (which == wxIMAGE_LIST_NORMAL) return m_imageListNormal; else if (which == wxIMAGE_LIST_SMALL) return m_imageListSmall; else if (which == wxIMAGE_LIST_STATE) return m_imageListState; return (wxImageList *) NULL; } void wxGenericListCtrl::SetImageList( wxImageList *imageList, int which ) { if ( which == wxIMAGE_LIST_NORMAL ) { if (m_ownsImageListNormal) delete m_imageListNormal; m_imageListNormal = imageList; m_ownsImageListNormal = false; } else if ( which == wxIMAGE_LIST_SMALL ) { if (m_ownsImageListSmall) delete m_imageListSmall; m_imageListSmall = imageList; m_ownsImageListSmall = false; } else if ( which == wxIMAGE_LIST_STATE ) { if (m_ownsImageListState) delete m_imageListState; m_imageListState = imageList; m_ownsImageListState = false; } m_mainWin->SetImageList( imageList, which ); } void wxGenericListCtrl::AssignImageList(wxImageList *imageList, int which) { SetImageList(imageList, which); if ( which == wxIMAGE_LIST_NORMAL ) m_ownsImageListNormal = true; else if ( which == wxIMAGE_LIST_SMALL ) m_ownsImageListSmall = true; else if ( which == wxIMAGE_LIST_STATE ) m_ownsImageListState = true; } bool wxGenericListCtrl::Arrange( int WXUNUSED(flag) ) { return 0; } bool wxGenericListCtrl::DeleteItem( long item ) { m_mainWin->DeleteItem( item ); return true; } bool wxGenericListCtrl::DeleteAllItems() { m_mainWin->DeleteAllItems(); return true; } bool wxGenericListCtrl::DeleteAllColumns() { size_t count = m_mainWin->m_columns.GetCount(); for ( size_t n = 0; n < count; n++ ) DeleteColumn( 0 ); return true; } void wxGenericListCtrl::ClearAll() { m_mainWin->DeleteEverything(); } bool wxGenericListCtrl::DeleteColumn( int col ) { m_mainWin->DeleteColumn( col ); // if we don't have the header any longer, we need to relayout the window if ( !GetColumnCount() ) ResizeReportView(false /* no header */); return true; } wxTextCtrl *wxGenericListCtrl::EditLabel(long item, wxClassInfo* textControlClass) { return m_mainWin->EditLabel( item, textControlClass ); } wxTextCtrl *wxGenericListCtrl::GetEditControl() const { return m_mainWin->GetEditControl(); } bool wxGenericListCtrl::EnsureVisible( long item ) { m_mainWin->EnsureVisible( item ); return true; } long wxGenericListCtrl::FindItem( long start, const wxString& str, bool partial ) { return m_mainWin->FindItem( start, str, partial ); } long wxGenericListCtrl::FindItem( long start, wxUIntPtr data ) { return m_mainWin->FindItem( start, data ); } long wxGenericListCtrl::FindItem( long WXUNUSED(start), const wxPoint& pt, int WXUNUSED(direction)) { return m_mainWin->FindItem( pt ); } // TODO: sub item hit testing long wxGenericListCtrl::HitTest(const wxPoint& point, int& flags, long *) const { return m_mainWin->HitTest( (int)point.x, (int)point.y, flags ); } long wxGenericListCtrl::InsertItem( wxListItem& info ) { m_mainWin->InsertItem( info ); return info.m_itemId; } long wxGenericListCtrl::InsertItem( long index, const wxString &label ) { wxListItem info; info.m_text = label; info.m_mask = wxLIST_MASK_TEXT; info.m_itemId = index; return InsertItem( info ); } long wxGenericListCtrl::InsertItem( long index, int imageIndex ) { wxListItem info; info.m_mask = wxLIST_MASK_IMAGE; info.m_image = imageIndex; info.m_itemId = index; return InsertItem( info ); } long wxGenericListCtrl::InsertItem( long index, const wxString &label, int imageIndex ) { wxListItem info; info.m_text = label; info.m_image = imageIndex; info.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_IMAGE; info.m_itemId = index; return InsertItem( info ); } long wxGenericListCtrl::InsertColumn( long col, wxListItem &item ) { wxCHECK_MSG( m_headerWin, -1, _T("can't add column in non report mode") ); m_mainWin->InsertColumn( col, item ); // if we hadn't had a header before but have one now // then we need to relayout the window if ( GetColumnCount() == 1 && m_mainWin->HasHeader() ) ResizeReportView(true /* have header */); m_headerWin->Refresh(); return 0; } long wxGenericListCtrl::InsertColumn( long col, const wxString &heading, int format, int width ) { wxListItem item; item.m_mask = wxLIST_MASK_TEXT | wxLIST_MASK_FORMAT; item.m_text = heading; if (width >= -2) { item.m_mask |= wxLIST_MASK_WIDTH; item.m_width = width; } item.m_format = format; return InsertColumn( col, item ); } bool wxGenericListCtrl::ScrollList( int WXUNUSED(dx), int WXUNUSED(dy) ) { return 0; } // Sort items. // fn is a function which takes 3 long arguments: item1, item2, data. // item1 is the long data associated with a first item (NOT the index). // item2 is the long data associated with a second item (NOT the index). // data is the same value as passed to SortItems. // The return value is a negative number if the first item should precede the second // item, a positive number of the second item should precede the first, // or zero if the two items are equivalent. // data is arbitrary data to be passed to the sort function. bool wxGenericListCtrl::SortItems( wxListCtrlCompare fn, long data ) { m_mainWin->SortItems( fn, data ); return true; } // ---------------------------------------------------------------------------- // event handlers // ---------------------------------------------------------------------------- void wxGenericListCtrl::OnSize(wxSizeEvent& WXUNUSED(event)) { if ( !m_mainWin ) return; ResizeReportView(m_mainWin->HasHeader()); m_mainWin->RecalculatePositions(); } void wxGenericListCtrl::ResizeReportView(bool showHeader) { int cw, ch; GetClientSize( &cw, &ch ); if ( showHeader ) { m_headerWin->SetSize( 0, 0, cw, m_headerHeight ); if(ch > m_headerHeight) m_mainWin->SetSize( 0, m_headerHeight + 1, cw, ch - m_headerHeight - 1 ); else m_mainWin->SetSize( 0, m_headerHeight + 1, cw, 0); } else // no header window { m_mainWin->SetSize( 0, 0, cw, ch ); } } void wxGenericListCtrl::OnInternalIdle() { wxWindow::OnInternalIdle(); // do it only if needed if ( !m_mainWin->m_dirty ) return; m_mainWin->RecalculatePositions(); } // ---------------------------------------------------------------------------- // font/colours // ---------------------------------------------------------------------------- bool wxGenericListCtrl::SetBackgroundColour( const wxColour &colour ) { if (m_mainWin) { m_mainWin->SetBackgroundColour( colour ); m_mainWin->m_dirty = true; } return true; } bool wxGenericListCtrl::SetForegroundColour( const wxColour &colour ) { if ( !wxWindow::SetForegroundColour( colour ) ) return false; if (m_mainWin) { m_mainWin->SetForegroundColour( colour ); m_mainWin->m_dirty = true; } if (m_headerWin) m_headerWin->SetForegroundColour( colour ); return true; } bool wxGenericListCtrl::SetFont( const wxFont &font ) { if ( !wxWindow::SetFont( font ) ) return false; if (m_mainWin) { m_mainWin->SetFont( font ); m_mainWin->m_dirty = true; } if (m_headerWin) { m_headerWin->SetFont( font ); CalculateAndSetHeaderHeight(); } Refresh(); return true; } // static wxVisualAttributes wxGenericListCtrl::GetClassDefaultAttributes(wxWindowVariant variant) { #if _USE_VISATTR // Use the same color scheme as wxListBox return wxListBox::GetClassDefaultAttributes(variant); #else wxUnusedVar(variant); wxVisualAttributes attr; attr.colFg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); attr.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_LISTBOX); attr.font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); return attr; #endif } // ---------------------------------------------------------------------------- // methods forwarded to m_mainWin // ---------------------------------------------------------------------------- #if wxUSE_DRAG_AND_DROP void wxGenericListCtrl::SetDropTarget( wxDropTarget *dropTarget ) { m_mainWin->SetDropTarget( dropTarget ); } wxDropTarget *wxGenericListCtrl::GetDropTarget() const { return m_mainWin->GetDropTarget(); } #endif bool wxGenericListCtrl::SetCursor( const wxCursor &cursor ) { return m_mainWin ? m_mainWin->wxWindow::SetCursor(cursor) : false; } wxColour wxGenericListCtrl::GetBackgroundColour() const { return m_mainWin ? m_mainWin->GetBackgroundColour() : wxColour(); } wxColour wxGenericListCtrl::GetForegroundColour() const { return m_mainWin ? m_mainWin->GetForegroundColour() : wxColour(); } bool wxGenericListCtrl::DoPopupMenu( wxMenu *menu, int x, int y ) { #if wxUSE_MENUS return m_mainWin->PopupMenu( menu, x, y ); #else return false; #endif } void wxGenericListCtrl::DoClientToScreen( int *x, int *y ) const { m_mainWin->DoClientToScreen(x, y); } void wxGenericListCtrl::DoScreenToClient( int *x, int *y ) const { m_mainWin->DoScreenToClient(x, y); } void wxGenericListCtrl::SetFocus() { // The test in window.cpp fails as we are a composite // window, so it checks against "this", but not m_mainWin. if ( DoFindFocus() != this ) m_mainWin->SetFocus(); } wxSize wxGenericListCtrl::DoGetBestSize() const { // Something is better than nothing... // 100x80 is what the MSW version will get from the default // wxControl::DoGetBestSize return wxSize(100, 80); } // ---------------------------------------------------------------------------- // virtual list control support // ---------------------------------------------------------------------------- wxString wxGenericListCtrl::OnGetItemText(long WXUNUSED(item), long WXUNUSED(col)) const { // this is a pure virtual function, in fact - which is not really pure // because the controls which are not virtual don't need to implement it wxFAIL_MSG( _T("wxGenericListCtrl::OnGetItemText not supposed to be called") ); return wxEmptyString; } int wxGenericListCtrl::OnGetItemImage(long WXUNUSED(item)) const { wxCHECK_MSG(!GetImageList(wxIMAGE_LIST_SMALL), -1, wxT("List control has an image list, OnGetItemImage or OnGetItemColumnImage should be overridden.")); return -1; } int wxGenericListCtrl::OnGetItemColumnImage(long item, long column) const { if (!column) return OnGetItemImage(item); return -1; } wxListItemAttr * wxGenericListCtrl::OnGetItemAttr(long WXUNUSED_UNLESS_DEBUG(item)) const { wxASSERT_MSG( item >= 0 && item < GetItemCount(), _T("invalid item index in OnGetItemAttr()") ); // no attributes by default return NULL; } void wxGenericListCtrl::SetItemCount(long count) { wxASSERT_MSG( IsVirtual(), _T("this is for virtual controls only") ); m_mainWin->SetItemCount(count); } void wxGenericListCtrl::RefreshItem(long item) { m_mainWin->RefreshLine(item); } void wxGenericListCtrl::RefreshItems(long itemFrom, long itemTo) { m_mainWin->RefreshLines(itemFrom, itemTo); } // Generic wxListCtrl is more or less a container for two other // windows which drawings are done upon. These are namely // 'm_headerWin' and 'm_mainWin'. // Here we override 'virtual wxWindow::Refresh()' to mimic the // behaviour wxListCtrl has under wxMSW. // void wxGenericListCtrl::Refresh(bool eraseBackground, const wxRect *rect) { if (!rect) { // The easy case, no rectangle specified. if (m_headerWin) m_headerWin->Refresh(eraseBackground); if (m_mainWin) m_mainWin->Refresh(eraseBackground); } else { // Refresh the header window if (m_headerWin) { wxRect rectHeader = m_headerWin->GetRect(); rectHeader.Intersect(*rect); if (rectHeader.GetWidth() && rectHeader.GetHeight()) { int x, y; m_headerWin->GetPosition(&x, &y); rectHeader.Offset(-x, -y); m_headerWin->Refresh(eraseBackground, &rectHeader); } } // Refresh the main window if (m_mainWin) { wxRect rectMain = m_mainWin->GetRect(); rectMain.Intersect(*rect); if (rectMain.GetWidth() && rectMain.GetHeight()) { int x, y; m_mainWin->GetPosition(&x, &y); rectMain.Offset(-x, -y); m_mainWin->Refresh(eraseBackground, &rectMain); } } } } void wxGenericListCtrl::Freeze() { m_mainWin->Freeze(); } void wxGenericListCtrl::Thaw() { m_mainWin->Thaw(); } } // namespace SL_Extern #endif // wxUSE_LISTCTRL springlobby-0.169/src/Helper/listctrl.h0000600000176000000410000002576312105760300021453 0ustar buildbotwww-data00000000000000///////////////////////////////////////////////////////////////////////////// // Name: wx/generic/listctrl.h // Purpose: Generic list control // Author: Robert Roebling // Created: 01/02/97 // RCS-ID: $Id: listctrl.h 8318 2008-04-01 18:41:23Z gonosztopi $ // Copyright: (c) 1998 Robert Roebling and Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef LISTCTRL_287_H #define LISTCTRL_287_H #include #include #include #define wxLC_OWNERDRAW 0x10000 class WXDLLIMPEXP_CORE wxImageList; #if wxUSE_DRAG_AND_DROP class WXDLLEXPORT wxDropTarget; #endif namespace SL_Extern { // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- const wxChar wxListCtrlNameStr[] = _T("sllist"); //----------------------------------------------------------------------------- // internal classes //----------------------------------------------------------------------------- class wxListHeaderWindow; class wxListMainWindow; //----------------------------------------------------------------------------- // wxListCtrl //----------------------------------------------------------------------------- class wxGenericListCtrl: public wxControl { public: wxGenericListCtrl(); wxGenericListCtrl( wxWindow *parent, wxWindowID winid = wxID_ANY, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxLC_ICON, const wxValidator& validator = wxDefaultValidator, const wxString &name = wxListCtrlNameStr) { Create(parent, winid, pos, size, style, validator, name); } virtual ~wxGenericListCtrl(); bool Create( wxWindow *parent, wxWindowID winid = wxID_ANY, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxLC_ICON, const wxValidator& validator = wxDefaultValidator, const wxString &name = wxListCtrlNameStr); bool GetColumn( int col, wxListItem& item ) const; bool SetColumn( int col, wxListItem& item ); int GetColumnWidth( int col ) const; bool SetColumnWidth( int col, int width); int GetCountPerPage() const; // not the same in wxGLC as in Windows, I think wxRect GetViewRect() const; bool GetItem( wxListItem& info ) const; bool SetItem( wxListItem& info ) ; long SetItem( long index, int col, const wxString& label, int imageId = -1 ); int GetItemState( long item, long stateMask ) const; bool SetItemState( long item, long state, long stateMask); bool SetItemImage( long item, int image, int selImage = -1 ); bool SetItemColumnImage( long item, long column, int image ); wxString GetItemText( long item ) const; void SetItemText( long item, const wxString& str ); wxUIntPtr GetItemData( long item ) const; #if wxABI_VERSION >= 20804 bool SetItemPtrData(long item, wxUIntPtr data); #endif // wxABI 2.8.4+ bool SetItemData(long item, long data); bool GetItemRect( long item, wxRect& rect, int code = wxLIST_RECT_BOUNDS ) const; bool GetItemPosition( long item, wxPoint& pos ) const; bool SetItemPosition( long item, const wxPoint& pos ); // not supported in wxGLC int GetItemCount() const; int GetColumnCount() const; void SetItemSpacing( int spacing, bool isSmall = false ); wxSize GetItemSpacing() const; void SetItemTextColour( long item, const wxColour& col); wxColour GetItemTextColour( long item ) const; void SetItemBackgroundColour( long item, const wxColour &col); wxColour GetItemBackgroundColour( long item ) const; void SetItemFont( long item, const wxFont &f); wxFont GetItemFont( long item ) const; int GetSelectedItemCount() const; wxColour GetTextColour() const; void SetTextColour(const wxColour& col); long GetTopItem() const; void SetSingleStyle( long style, bool add = true ) ; void SetWindowStyleFlag( long style ); void RecreateWindow() {} long GetNextItem( long item, int geometry = wxLIST_NEXT_ALL, int state = wxLIST_STATE_DONTCARE ) const; wxImageList *GetImageList( int which ) const; void SetImageList( wxImageList *imageList, int which ); void AssignImageList( wxImageList *imageList, int which ); bool Arrange( int flag = wxLIST_ALIGN_DEFAULT ); // always wxLIST_ALIGN_LEFT in wxGLC void ClearAll(); bool DeleteItem( long item ); bool DeleteAllItems(); bool DeleteAllColumns(); bool DeleteColumn( int col ); void SetItemCount(long count); wxTextCtrl *EditLabel(long item, wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl)); wxTextCtrl* GetEditControl() const; void Edit( long item ) { EditLabel(item); } bool EnsureVisible( long item ); long FindItem( long start, const wxString& str, bool partial = false ); long FindItem( long start, wxUIntPtr data ); long FindItem( long start, const wxPoint& pt, int direction ); // not supported in wxGLC long HitTest( const wxPoint& point, int& flags, long *pSubItem = NULL ) const; long InsertItem(wxListItem& info); long InsertItem( long index, const wxString& label ); long InsertItem( long index, int imageIndex ); long InsertItem( long index, const wxString& label, int imageIndex ); long InsertColumn( long col, wxListItem& info ); long InsertColumn( long col, const wxString& heading, int format = wxLIST_FORMAT_LEFT, int width = -1 ); bool ScrollList( int dx, int dy ); bool SortItems( wxListCtrlCompare fn, long data ); bool Update( long item ); // Must provide overload to avoid hiding it (and warnings about it) virtual void Update() { wxControl::Update(); } // are we in report mode? bool InReportView() const { return HasFlag(wxLC_REPORT); } // are we in virtual report mode? bool IsVirtual() const { return HasFlag(wxLC_VIRTUAL); } // do we have a header window? bool HasHeader() const { return InReportView() && !HasFlag(wxLC_NO_HEADER); } // refresh items selectively (only useful for virtual list controls) void RefreshItem(long item); void RefreshItems(long itemFrom, long itemTo); #if WXWIN_COMPATIBILITY_2_6 // obsolete, don't use wxDEPRECATED( int GetItemSpacing( bool isSmall ) const ); #endif // WXWIN_COMPATIBILITY_2_6 virtual wxVisualAttributes GetDefaultAttributes() const { return GetClassDefaultAttributes(GetWindowVariant()); } static wxVisualAttributes GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL); // implementation only from now on // ------------------------------- void OnInternalIdle( ); void OnSize( wxSizeEvent &event ); // We have to hand down a few functions virtual void Refresh(bool eraseBackground = true, const wxRect *rect = NULL); virtual void Freeze(); virtual void Thaw(); virtual bool SetBackgroundColour( const wxColour &colour ); virtual bool SetForegroundColour( const wxColour &colour ); virtual wxColour GetBackgroundColour() const; virtual wxColour GetForegroundColour() const; virtual bool SetFont( const wxFont &font ); virtual bool SetCursor( const wxCursor &cursor ); virtual int GetScrollPos(int orient) const; virtual void SetScrollPos(int orient, int pos, bool refresh = true); #if wxUSE_DRAG_AND_DROP virtual void SetDropTarget( wxDropTarget *dropTarget ); virtual wxDropTarget *GetDropTarget() const; #endif virtual bool ShouldInheritColours() const { return false; } virtual void SetFocus(); // implementation // -------------- wxImageList *m_imageListNormal; wxImageList *m_imageListSmall; wxImageList *m_imageListState; // what's that ? bool m_ownsImageListNormal, m_ownsImageListSmall, m_ownsImageListState; wxListHeaderWindow *m_headerWin; wxListMainWindow *m_mainWin; wxCoord m_headerHeight; protected: virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); // take into account the coordinates difference between the container // window and the list control window itself here virtual void DoClientToScreen( int *x, int *y ) const; virtual void DoScreenToClient( int *x, int *y ) const; virtual wxSize DoGetBestSize() const; // return the text for the given column of the given item virtual wxString OnGetItemText(long item, long column) const; // return the icon for the given item. In report view, OnGetItemImage will // only be called for the first column. See OnGetItemColumnImage for // details. virtual int OnGetItemImage(long item) const; // return the icon for the given item and column. virtual int OnGetItemColumnImage(long item, long column) const; // return the attribute for the item (may return NULL if none) virtual wxListItemAttr *OnGetItemAttr(long item) const; // it calls our OnGetXXX() functions friend class wxListMainWindow; private: // create the header window void CreateHeaderWindow(); // calculate and set height of the header void CalculateAndSetHeaderHeight(); // reposition the header and the main window in the report view depending // on whether it should be shown or not void ResizeReportView(bool showHeader); DECLARE_EVENT_TABLE() }; #if (!defined(__WXMSW__) || defined(__WXUNIVERSAL__)) && (!defined(__WXMAC__) || defined(__WXUNIVERSAL__)) /* * wxListCtrl has to be a real class or we have problems with * the run-time information. */ class wxListCtrl: public wxGenericListCtrl { public: wxListCtrl() {} wxListCtrl(wxWindow *parent, wxWindowID winid = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxLC_ICON, const wxValidator &validator = wxDefaultValidator, const wxString &name = wxListCtrlNameStr) : wxGenericListCtrl(parent, winid, pos, size, style, validator, name) { } }; #endif // !__WXMSW__ || __WXUNIVERSAL__ } // namespace SL_Extern #endif // LISTCTRL_287_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/Helper/qtargparser/CHANGES0000600000176000000410000000077212105760300022761 0ustar buildbotwww-data00000000000000version 1.0.1 (2010.03.18) * Fixed compilation errors and warnings under QT 4.6 and GCC 4.4.3. * Changed author's email. version 1.0.2 (2010.06.01) * Fixed throwing exception on not required argument with option that not defined. version 1.0.3 (2010.10.05) * Fixed issue #2 (If one passes "--test=1" the program crashes with a segfault). * Added support of flags with values without spaces ("-b5" for example). version 1.0.4 (2010.10.08) * Correctness of the exceptions.springlobby-0.169/src/Helper/qtargparser/COPYING0000600000176000000410000000207312105760300023015 0ustar buildbotwww-data00000000000000Copyright (c) 2009 Igor P. Mironchik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. springlobby-0.169/src/Helper/qtargparser/QtArg/Arg0000600000176000000410000000002412105760300023426 0ustar buildbotwww-data00000000000000#include "arg.hpp" springlobby-0.169/src/Helper/qtargparser/QtArg/ArgConstraint0000600000176000000410000000003612105760300025476 0ustar buildbotwww-data00000000000000#include "argconstraint.hpp" springlobby-0.169/src/Helper/qtargparser/QtArg/CmdLine0000600000176000000410000000003012105760300024225 0ustar buildbotwww-data00000000000000#include "cmdline.hpp" springlobby-0.169/src/Helper/qtargparser/QtArg/CmdLineContext0000600000176000000410000000003712105760300025601 0ustar buildbotwww-data00000000000000#include "cmdlinecontext.hpp" springlobby-0.169/src/Helper/qtargparser/QtArg/Exceptions0000600000176000000410000000003312105760300025036 0ustar buildbotwww-data00000000000000#include "exceptions.hpp" springlobby-0.169/src/Helper/qtargparser/QtArg/Help0000600000176000000410000000002512105760300023606 0ustar buildbotwww-data00000000000000#include "help.hpp" springlobby-0.169/src/Helper/qtargparser/QtArg/MultiArg0000600000176000000410000000003112105760300024437 0ustar buildbotwww-data00000000000000#include "multiarg.hpp" springlobby-0.169/src/Helper/qtargparser/QtArg/Visitor0000600000176000000410000000003012105760300024351 0ustar buildbotwww-data00000000000000#include "visitor.hpp" springlobby-0.169/src/Helper/qtargparser/QtArg/XorArg0000600000176000000410000000002712105760300024122 0ustar buildbotwww-data00000000000000#include "xorarg.hpp" springlobby-0.169/src/Helper/qtargparser/QtArg/arg.hpp0000600000176000000410000006177712105760300024302 0ustar buildbotwww-data00000000000000 /*! \file \brief Command Line Argument. \author Igor P. Mironchik (imironchick at gmail dot com). Copyright (c) 2010 Igor P. Mironchik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef QTARG__ARG_HPP__INCLUDED #define QTARG__ARG_HPP__INCLUDED // Qt include. #include #include #include #include #include #include // QtArg include. #include "exceptions.hpp" #include "cmdlinecontext.hpp" #include "visitor.hpp" #include "argconstraint.hpp" #include "cmdlineiface.hpp" class QtArgCmdLine; // // class QtArgIface // //! Interface of the argument. /*! Should be implemented by every class wanted to be an argument. */ class QtArgIface { friend class QtArgCmdLine; public: //! Type of the list of argument's names. typedef QStringList NamesList; //! Type of the list of argument's flags. typedef QList< QChar > FlagsList; protected: QtArgIface() {} QtArgIface( const NamesList & names, const FlagsList & flags ) : m_flags( flags ) , m_names( names ) {} virtual ~QtArgIface() {} public: /*! \retval true if argument is required. \retval false otherwise. */ virtual bool isRequired() const = 0; /*! \retval true if argument has decided he gas been defined. \retval false otherwise. */ virtual bool isDefined() const = 0; /*! Check correctness of the names, flags and so on before parsing. Should throw QtArgDissallowedFlagOrNameEx or QtArgNameOrFlagAlreadyKnownEx on errors. */ virtual void check( //! Delimiter. const QChar & delimiter, //! Already known flags. FlagsList & alreadyKnownFlags, //! Already known names. NamesList & alreadyKnownNames ) const = 0; //! Check correctness of the state of the argument after parsing. virtual void check() const = 0; //! \return All flags of the argument. virtual const FlagsList & flags() const { return m_flags; } //! \return All names of the argument. virtual const NamesList & names() const { return m_names; } //! \return Description of the argument. virtual QString description() const = 0; /*! \brief Should return pointer to the QtArgIface if this argument know how to do it, usually returns "this" if he does. \retval Pointer to the QtArgIface if flag \a flag determines this argument. \retval NULL if flag \a flag doesn't determine this argument. */ virtual QtArgIface * giveArgument( const QChar & flag ) = 0; /*! \brief Should return pointer to the QtArgIface if this argument know how to do it, usually returns "this" if he does. \retval Pointer to the QtArgIface if name \a name determines this argument. \retval NULL if name \a name doesn't determine this argument. */ virtual QtArgIface * giveArgument( const QString & name ) = 0; //! \return List of the arguments handled by this argument. /*! Usually returns list with "this" pointer. */ virtual const QtArgCmdLineIface::QtArgumentsList & arguments() const = 0; //! Check corrcetness of the argument constraint. /*! Should throw QtArgContraintNotObservedEx if constraint didn't observed. */ virtual void checkConstraint() const = 0; protected: //! Process argument. //! Can throw exceptions. //! \return The number of processed arguments. virtual int process( QtArgCmdLineContext & context ) = 0; //! Process with visitor. virtual void visit( QtArgCmdLineContext & context ) = 0; protected: //! Flag of the argument. If defined. FlagsList m_flags; //! List of the names of the argument. NamesList m_names; }; // class QtArgIface // // class QtArg // //! Base class of the command line argument. class QtArg : public QtArgIface { public: explicit QtArg( //! Flag of the argument. const QChar & flag, //! Name of the argument. const QString & name = QString(), //! Description of the argument. const QString & description = QString(), //! Is argument required? bool required = false, //! Should argument has a value? bool withValue = false, //! Visitor of the argument. QtArgVisitorIface * visitor = NULL, //! Constraint for the argument's values. QtArgConstraintIface * constraint = NULL ); QtArg( //! Flag of the argument. const QChar & flag, //! Various names of the argument. const QtArgIface::NamesList & names, //! Description of the argument. const QString & description = QString(), //! Is argument required? bool required = false, //! Should argument has a value? bool withValue = false, //! Visitor of the argument. QtArgVisitorIface * visitor = NULL, //! Constraint for the argument's values. QtArgConstraintIface * constraint = NULL ); explicit QtArg( //! Name of the argument. const QString & name, //! Description of the argument. const QString & description = QString(), //! Is argument required? bool required = false, //! Should argument has a value? bool withValue = false, //! Visitor of the argument. QtArgVisitorIface * visitor = NULL, //! Constraint for the argument's values. QtArgConstraintIface * constraint = NULL ); explicit QtArg( //! Various names of the argument. const QtArgIface::NamesList & names, //! Description of the argument. const QString & description = QString(), //! Is argument required? bool required = false, //! Should argument has a value? bool withValue = false, //! Visitor of the argument. QtArgVisitorIface * visitor = NULL, //! Constraint for the argument's values. QtArgConstraintIface * constraint = NULL ); explicit QtArg( //! Various flags of the argument. const QtArgIface::FlagsList & flags, //! Description of the argument. const QString & description = QString(), //! Is argument required? bool required = false, //! Should argument has a value? bool withValue = false, //! Visitor of the argument. QtArgVisitorIface * visitor = NULL, //! Constraint for the argument's values. QtArgConstraintIface * constraint = NULL ); QtArg( //! Various flags of the argument. const QtArgIface::FlagsList & flags, //! Various names of the argument. const QtArgIface::NamesList & names, //! Description of the argument. const QString & description = QString(), //! Is argument required? bool required = false, //! Should argument has a value? bool withValue = false, //! Visitor of the argument. QtArgVisitorIface * visitor = NULL, //! Constraint for the argument's values. QtArgConstraintIface * constraint = NULL ); QtArg( const QtArg & arg ); QtArg & operator = ( const QtArg & arg ); virtual ~QtArg(); //! \return Flag of the argument. virtual QChar flag() const; /*! Returns first value from the list of flags if defined more than one. */ //! Set new value for the flag of the argument. /*! Clears all previously defined flags from the list and set this new value as only one defined. */ virtual void setFlag( const QChar & fl ); //! Set new value of the name of the argument. /*! Clears all previously defined names from the list and set this new value as only one defined. */ virtual void setFlags( const QtArgIface::FlagsList & f ); //! \return Name of the argument. /*! Returns first value from the list of names if defined more than one. */ QString name() const; //! Set new value of the name of the argument. /*! Clears all previously defined names from the list and set this new value as only one defined. */ void setName( const QString & n ); //! Set new value of the name of the argument. /*! Clears all previously defined names from the list and set this new value as only one defined. */ void setNames( const QtArgIface::NamesList & n ); //! Set value of the description of the argument. //! Rewrites previously defined description. void setDescription( const QString & ds ); //! Set value of the required property. void setRequired( bool on = true ); //! \return Whether this argument should have a value or not. bool isWithValue() const; //! Set value of the property that hold whether this argument //! should have a value or not. void setWithValue( bool on = true ); //! \return Visitor of this argument, //! NULL if visitor wasn't defined. QtArgVisitorIface * visitor() const; //! Set visitor to this argument. //! Replace previously defined visitor if defined. void setVisitor( QtArgVisitorIface * v ); //! \return Constraint for the values, //! NULL if constraint wasn't defined. QtArgConstraintIface * constraint() const; //! Set constraint to this argument. //! Replace previously defined constraint if defined. void setConstraint( QtArgConstraintIface * c ); //! \return Value of the argument. const QVariant & value() const; //! \return Value of the argument. QVariant & value(); //! Set value of the argument. virtual void setValue( const QVariant & v ); //! Set m_defined flag. void setDefined( bool on = true ); //! \return true if argument was present in the command line. bool isPresent() const; //! Set m_present flag. void setPresent( bool on = true ); //! \name Equal and not equal operators. //! \{ friend bool operator == ( const QtArg & a1, const QtArg & a2 ); friend bool operator != ( const QtArg & a1, const QtArg & a2 ); friend bool operator == ( const QtArg & a1, const QString & a2 ); friend bool operator != ( const QtArg & a1, const QString & a2 ); friend bool operator == ( const QtArg & a1, const QChar & a2 ); friend bool operator != ( const QtArg & a1, const QChar & a2 ); friend bool operator == ( const QtArg & a1, const QtArgIface::FlagsList & a2 ); friend bool operator != ( const QtArg & a1, const QtArgIface::FlagsList & a2 ); friend bool operator == ( const QtArg & a1, const QtArgIface::NamesList & a2 ); friend bool operator != ( const QtArg & a1, const QtArgIface::NamesList & a2 ); //! \} //! \name QtArgIface implementation. //! \{ /*! \retval true if argument is required. \retval false otherwise. */ virtual bool isRequired() const; /*! \retval true if argument has decided he gas been defined. \retval false otherwise. */ virtual bool isDefined() const; //! \throws QtArgDissallowedFlagOrNameEx if the flag is equal //! to the delimiter or one of the names is empty or equal //! to the space symbol. virtual void check( //! Delimiter. const QChar & delimiter, //! Already known flags. QtArgIface::FlagsList & alreadyKnownFlags, //! Already known names. QtArgIface::NamesList & alreadyKnownNames ) const; //! Check correctness of the state of the argument after parsing. virtual void check() const; //! \return Description of the argument. virtual QString description() const; /*! \brief Should return pointer to the QtArgIface if this argument know how to do it, usually returns "this" if he does. \retval Pointer to the QtArgIface if flag \a flag determines this argument. \retval NULL if flag \a flag doesn't determine this argument. */ virtual QtArgIface * giveArgument( const QChar & flag ); /*! \brief Should return pointer to the QtArgIface if this argument know how to do it, usually returns "this" if he does. \retval Pointer to the QtArgIface if name \a name determines this argument. \retval NULL if name \a name doesn't determine this argument. */ virtual QtArgIface * giveArgument( const QString & name ); //! \return List of the arguments handled by this argument. /*! Usually returns list with "this" pointer. */ virtual const QtArgCmdLineIface::QtArgumentsList & arguments() const; //! Check corrcetness of the argument constraint. /*! Should throw QtArgContraintNotObservedEx if constraint didn't observed. */ virtual void checkConstraint() const; protected: //! Process argument. //! Can throw exceptions. //! \return The number of processed arguments. virtual int process( QtArgCmdLineContext & context ); //! Process with visitor. virtual void visit( QtArgCmdLineContext & context ); //! \} private: //! Description of the argument. QString m_description; //! Is argument required? bool m_required; //! Should argument has a value? bool m_withValue; //! Is this argument and probaly his value defined. bool m_defined; //! Was this argument present in the command line. bool m_present; //! Value of the argument. QVariant m_value; //! Visitor of the argument. //! QtArg doesn't handle life cycle of the //! QtArgVisitor. So you must care about it. QtArgVisitorIface * m_visitor; //! Constraint foor the argument's values. QtArgConstraintIface * m_constraint; //! Arguments handled by this argument. QtArgCmdLineIface::QtArgumentsList m_args; }; // class QtArg // // QtArg implementation. // inline QtArg::QtArg( const QChar & flag, const QString & name, const QString & description, bool required, bool withValue, QtArgVisitorIface * visitor, QtArgConstraintIface * constraint ) : QtArgIface( name.length() ? QtArgIface::NamesList() << name : QtArgIface::NamesList(), QtArgIface::FlagsList() << flag ) , m_description( description ) , m_required( required ) , m_withValue( withValue ) , m_defined( false ) , m_present( false ) , m_visitor( visitor ) , m_constraint( constraint ) { m_args << this; } inline QtArg::QtArg( const QChar & flag, const QtArgIface::NamesList & names, const QString & description, bool required, bool withValue, QtArgVisitorIface * visitor, QtArgConstraintIface * constraint ) : QtArgIface( names, QtArgIface::FlagsList() << flag ) , m_description( description ) , m_required( required ) , m_withValue( withValue ) , m_defined( false ) , m_present( false ) , m_visitor( visitor ) , m_constraint( constraint ) { m_args << this; } inline QtArg::QtArg( const QString & name, const QString & description, bool required, bool withValue, QtArgVisitorIface * visitor, QtArgConstraintIface * constraint ) : QtArgIface( QtArgIface::NamesList() << name, QtArgIface::FlagsList() ) , m_description( description ) , m_required( required ) , m_withValue( withValue ) , m_defined( false ) , m_present( false ) , m_visitor( visitor ) , m_constraint( constraint ) { m_args << this; } inline QtArg::QtArg( const QtArgIface::NamesList & names, const QString & description, bool required, bool withValue, QtArgVisitorIface * visitor, QtArgConstraintIface * constraint ) : QtArgIface( names, QtArgIface::FlagsList() ) , m_description( description ) , m_required( required ) , m_withValue( withValue ) , m_defined( false ) , m_present( false ) , m_visitor( visitor ) , m_constraint( constraint ) { m_args << this; } inline QtArg::QtArg( const QtArgIface::FlagsList & flags, const QString & description, bool required, bool withValue, QtArgVisitorIface * visitor, QtArgConstraintIface * constraint ) : QtArgIface( QtArgIface::NamesList(), flags ) , m_description( description ) , m_required( required ) , m_withValue( withValue ) , m_defined( false ) , m_present( false ) , m_visitor( visitor ) , m_constraint( constraint ) { m_args << this; } inline QtArg::QtArg( const QtArgIface::FlagsList & flags, const QtArgIface::NamesList & names, const QString & description, bool required, bool withValue, QtArgVisitorIface * visitor, QtArgConstraintIface * constraint ) : QtArgIface( names, flags ) , m_description( description ) , m_required( required ) , m_withValue( withValue ) , m_defined( false ) , m_present( false ) , m_visitor( visitor ) , m_constraint( constraint ) { m_args << this; } inline QtArg::QtArg( const QtArg & arg ) : QtArgIface( arg.m_names, arg.m_flags ) , m_description( arg.m_description ) , m_required( arg.m_required ) , m_withValue( arg.m_withValue ) , m_defined( arg.m_defined ) , m_present( arg.m_present ) , m_value( arg.m_value ) , m_visitor( arg.m_visitor ) , m_constraint( arg.m_constraint ) { m_args << this; } inline QtArg & QtArg::operator = ( const QtArg & arg ) { m_flags = arg.m_flags; m_names = arg.m_names; m_description = arg.m_description; m_required = arg.m_required; m_withValue = arg.m_withValue; m_visitor = arg.m_visitor; m_defined = arg.m_defined; m_present = arg.m_present; m_value = arg.m_value; m_constraint = arg.m_constraint; return *this; } inline QtArg::~QtArg() { } inline QChar QtArg::flag() const { if( !m_flags.isEmpty() ) return m_flags.front(); else return QChar(); } inline void QtArg::setFlag( const QChar & fl ) { m_flags.clear(); m_flags << fl; } inline void QtArg::setFlags( const QtArgIface::FlagsList & f ) { m_flags = f; } inline QString QtArg::name() const { if( !m_names.isEmpty() ) return m_names.front(); else return QString(); } inline void QtArg::setName( const QString & n ) { m_names.clear(); m_names << n; } inline void QtArg::setNames( const QtArgIface::NamesList & n ) { m_names = n; } inline QString QtArg::description() const { return m_description; } inline void QtArg::setDescription( const QString & ds ) { m_description = ds; } inline bool QtArg::isRequired() const { return m_required; } inline void QtArg::setRequired( bool on ) { m_required = on; } inline bool QtArg::isWithValue() const { return m_withValue; } inline void QtArg::setWithValue( bool on ) { m_withValue = on; } inline QtArgVisitorIface * QtArg::visitor() const { return m_visitor; } inline void QtArg::setVisitor( QtArgVisitorIface * v ) { m_visitor = v; } inline QtArgConstraintIface * QtArg::constraint() const { return m_constraint; } inline void QtArg::setConstraint( QtArgConstraintIface * c ) { m_constraint = c; } inline const QVariant & QtArg::value() const { return m_value; } inline QVariant & QtArg::value() { return m_value; } inline void QtArg::setValue( const QVariant & v ) { m_value = v; setDefined(); } inline bool QtArg::isDefined() const { return m_defined; } inline void QtArg::setDefined( bool on ) { m_defined = on; setPresent(); } inline bool QtArg::isPresent() const { return m_present; } inline void QtArg::setPresent( bool on ) { m_present = on; } inline QtArgIface * QtArg::giveArgument( const QChar & f ) { if( !m_flags.isEmpty() ) foreach( QChar flag, m_flags ) if( flag == f ) return this; return NULL; } inline QtArgIface * QtArg::giveArgument( const QString & n ) { if( m_names.size() ) foreach( QString name, m_names ) if( name.startsWith( n ) ) return this; return NULL; } inline const QtArgCmdLineIface::QtArgumentsList & QtArg::arguments() const { return m_args; } inline void QtArg::check( const QChar & delimiter, QtArgIface::FlagsList & alreadyKnownFlags, QtArgIface::NamesList & alreadyKnownNames ) const { if( m_flags.isEmpty() && m_names.isEmpty() ) throw QtArgNotDefinedNorNameNorFlagEx(); if( m_flags.size() ) { foreach( QChar flag, m_flags ) { if( delimiter == flag || !flag.isLetterOrNumber() ) throw QtArgDissallowedFlagOrNameEx( QString::fromLatin1( "Dissallowed flag: \"%1\"." ) .arg( flag ) ); if( alreadyKnownFlags.contains( flag ) ) throw QtArgNameOrFlagAlreadyKnownEx( QString::fromLatin1( "Flag already in use: %1." ) .arg( flag ) ); alreadyKnownFlags.append( flag ); } } if( m_names.size() ) { foreach( QString name, m_names ) { if( name.isEmpty() || name.contains( QRegExp( QString::fromLatin1( "\\s" ) ) ) ) throw QtArgDissallowedFlagOrNameEx( QString::fromLatin1( "Dissallowed name: \"%1\"." ) .arg( name ) ); if( alreadyKnownNames.contains( name ) ) throw QtArgNameOrFlagAlreadyKnownEx( QString::fromLatin1( "Name already in use: %1." ) .arg( name ) ); alreadyKnownNames.append( name ); } } } inline void QtArg::check() const { if( !isDefined() ) { if( isRequired() && !isPresent() ) throw QtArgNotDefinedMandatoryArgumentEx( QString::fromLatin1( "Not defined mandatory argument: %1" ) .arg( names().size() ? names().front() : flags().front() ) ); if( isPresent() && isWithValue() ) throw QtArgNotDefinedOptionForTheArgumentEx( QString::fromLatin1( "Not defined value of the argument: %1" ) .arg( names().size() ? names().front() : flags().front() ) ); } } inline int QtArg::process( QtArgCmdLineContext & context ) { if( isWithValue() ) { if( !context.atEnd() ) { setValue( context.next() ); return 1; } else setPresent(); } else setValue( QVariant( true ) ); return 0; } inline void QtArg::visit( QtArgCmdLineContext & context ) { if( visitor() ) visitor()->visit( context ); } inline void QtArg::checkConstraint() const { if( m_constraint && isDefined() ) if( !m_constraint->check( m_value ) ) throw QtArgContraintNotObservedEx( QString::fromLatin1( "Constraint for the argument: %1" " hasn't observed. Wrong value is: %2" ) .arg( names().size() ? names().front() : flags().front() ) .arg( m_value.toString() ) ); } namespace /* anonymous */ { inline bool isNamesEqual( const QtArgIface::NamesList & l1, const QtArgIface::NamesList & l2 ) { if( l1.size() == l2.size() ) { foreach( QString name, l1 ) if( !l2.contains( name ) ) return false; } else return false; return true; } inline bool isFlagsEqual( const QtArgIface::FlagsList & f1, const QtArgIface::FlagsList & f2 ) { if( f1.size() == f2.size() ) { foreach( QChar flag, f1 ) if( !f2.contains( flag ) ) return false; } else return false; return true; } } /* namespace anonymous */ inline bool operator == ( const QtArg & a1, const QtArg & a2 ) { if( a1.m_flags.isEmpty() && a2.m_flags.isEmpty() ) return isNamesEqual( a1.m_names, a2.m_names ); else if( !a1.m_flags.isEmpty() && !a2.m_flags.isEmpty() ) { if( isFlagsEqual( a1.m_flags, a2.m_flags ) ) return isNamesEqual( a1.m_names, a2.m_names ); else return false; } else return false; } inline bool operator != ( const QtArg & a1, const QtArg & a2 ) { return !( a1 == a2 ); } inline bool operator == ( const QtArg & a1, const QString & a2 ) { QtArg tmp = a1; tmp.setName( a2 ); return ( a1 == tmp ); } inline bool operator != ( const QtArg & a1, const QString & a2 ) { QtArg tmp = a1; tmp.setName( a2 ); return ( a1 != tmp ); } inline bool operator == ( const QtArg & a1, const QChar & a2 ) { QtArg tmp = a1; tmp.setFlag( a2 ); return ( a1 == tmp ); } inline bool operator != ( const QtArg & a1, const QChar & a2 ) { QtArg tmp = a1; tmp.setFlag( a2 ); return ( a1 != tmp ); } inline bool operator == ( const QtArg & a1, const QtArgIface::FlagsList & a2 ) { QtArg tmp = a1; tmp.setFlags( a2 ); return ( a1 == tmp ); } inline bool operator != ( const QtArg & a1, const QtArgIface::FlagsList & a2 ) { QtArg tmp = a1; tmp.setFlags( a2 ); return ( a1 != tmp ); } inline bool operator == ( const QtArg & a1, const QtArgIface::NamesList & a2 ) { QtArg tmp = a1; tmp.setNames( a2 ); return ( a1 == tmp ); } inline bool operator != ( const QtArg & a1, const QtArgIface::NamesList & a2 ) { QtArg tmp = a1; tmp.setNames( a2 ); return ( a1 != tmp ); } #endif // QTARG__ARG_HPP__INCLUDED springlobby-0.169/src/Helper/qtargparser/QtArg/argconstraint.hpp0000600000176000000410000000335712105760300026375 0ustar buildbotwww-data00000000000000 /*! \file \brief Command Line Argument's Constraint. \author Igor P. Mironchik (imironchick at gmail dot com). Copyright (c) 2010 Igor P. Mironchik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef QTARG__ARGCONSTRAINT_HPP__INCLUDED #define QTARG__ARGCONSTRAINT_HPP__INCLUDED // Qt include. #include // // QtArgConstraintIface // //! Base class fot the constraints for argument's values. class QtArgConstraintIface { protected: virtual ~QtArgConstraintIface() {} public: //! \retval true if caonstraint observed. //! \retval false otherwise. virtual bool check( const QVariant & value ) const = 0; }; // class QtArgConstraintIface #endif // QTARG__ARGCONSTRAINT_HPP__INCLUDED springlobby-0.169/src/Helper/qtargparser/QtArg/cmdline.hpp0000600000176000000410000002355312105760300025132 0ustar buildbotwww-data00000000000000 /*! \file \brief Command Line Parser. \author Igor P. Mironchik (imironchick at gmail dot com). Copyright (c) 2010 Igor P. Mironchik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef QTARG__CMDLINE_HPP__INCLUDED #define QTARG__CMDLINE_HPP__INCLUDED // QtArg include. #include "cmdlineiface.hpp" #include "exceptions.hpp" #include "visitor.hpp" #include "arg.hpp" #include "cmdlinecontext.hpp" // Qt include. #include #include #include #include #include // // QtArgCmdLine // //! Command line arguments parser. class QtArgCmdLine : public QtArgCmdLineIface { public: /*! Construct QtArgCmdLine and initialize him with QCoreApplication::arguments(). So be carefull to initialize QCoreApplication first. */ QtArgCmdLine(); /*! We expect programm name as first argument. That means that \arg args[ 0 ] should be a name of the programm. */ explicit QtArgCmdLine( const QStringList & args ); /*! We expect programm name as first argument. That means that \arg argv[ 0 ] should be a name of the programm. */ QtArgCmdLine( int argc, char ** argv ); ~QtArgCmdLine(); //! \return List of arguments handled by this QtArgCmdLine. const QtArgCmdLineIface::QtArgumentsList & arguments() const; //! \return Delimiter char. const QChar & delimiter() const; //! Set delimiter char. void setDelimiter( const QChar & delim ); //! Find argument by his name. QtArgIface * findArgument( const QString & name ); //! Find argument by his flag. QtArgIface * findArgument( const QChar & flag ); //! Add new argument. //! Can throw exceptions. void addArg( QtArgIface & arg ); //! Add new argument. //! Can throw exceptions. void addArg( QtArgIface * arg ); //! Parse arguments. //! Can throw exceptions. void parse(); private: //! Command line context. QtArgCmdLineContext m_context; //! User-defined arguments. //! Result of the parsing stores in this arguments. QtArgCmdLineIface::QtArgumentsList m_args; //! Delimiter. With this QChar starts every option or flag. QChar m_delimiter; private: //! Add new argument. void addArgImpl( QtArgIface * arg ); //! Check correctness of all arguments. //! Can throw Exceptions. void checkArgumentsCorrectness() const; //! \return true if \a str is an flag or string of the flags. bool isFlag( const QString & str ) const; //! \return true if \a str is an argument. bool isArgument( const QString & str ) const; /*! Split string into argument and his value. Value can be QString::null if there is no '=' character will be found. \par toCheck - QString that should be splitted. \par argument - Name of the argument. \par value - Value of the argument. */ void splitArgumentAndValue( const QString & toCheck, QString & argument, QString & value ); //! Removes all delimiters from the beginning of the given string. QString removeDelimiters( const QString & str ) const; //! Check all mndatory argumentss are defined. void checkMandatoryArguments() const; }; // class QtArgCmdLine // // QtArgCmdLine implementation. // namespace /* anonymous */ { //! Every flag starts with this character. //! Every option name start with doubled this character. const QChar defaultDelimiter = QChar( 0x2D ); } /* namespace anonymous */ inline QtArgCmdLine::QtArgCmdLine() : m_context( QCoreApplication::arguments() ) , m_delimiter( defaultDelimiter ) { // Skip program name. m_context.next(); } inline QtArgCmdLine::QtArgCmdLine( const QStringList & args ) : m_context( args ) , m_delimiter( defaultDelimiter ) { // Skip program name. m_context.next(); } inline QtArgCmdLine::QtArgCmdLine( int argc, char ** argv ) : m_context( QStringList() ) , m_delimiter( defaultDelimiter ) { QStringList tmp; if( argc > 1 ) { for( int i = 1; i < argc; ++i ) tmp.append( QString::fromLocal8Bit( argv[ i ] ) ); } m_context = QtArgCmdLineContext( tmp ); } inline QtArgCmdLine::~QtArgCmdLine() { } inline const QtArgCmdLineIface::QtArgumentsList & QtArgCmdLine::arguments() const { return m_args; } inline const QChar & QtArgCmdLine::delimiter() const { return m_delimiter; } inline void QtArgCmdLine::setDelimiter( const QChar & delim ) { m_delimiter = delim; } inline void QtArgCmdLine::addArg( QtArgIface & arg ) { addArgImpl( &arg ); } inline void QtArgCmdLine::addArg( QtArgIface * arg ) { addArgImpl( arg ); } inline void QtArgCmdLine::parse() { checkArgumentsCorrectness(); QString lastArgNameOrFlag; while( !m_context.atEnd() ) { const QString & arg = m_context.next(); QString name, nameWithoutDelims; { QString value; splitArgumentAndValue( arg, name, value ); nameWithoutDelims = removeDelimiters( name ); if( !value.isNull() ) m_context.prepend( value ); } // Argument. if( isArgument( arg ) ) { QtArgIface * argument = findArgument( nameWithoutDelims ); lastArgNameOrFlag = name; if( argument != NULL ) { argument->process( m_context ); argument->visit( m_context ); argument->checkConstraint(); } else throw QtArgUnknownArgumentEx( QString::fromLatin1( "Unknown argument: %1" ) .arg( name ) ); } // Flag. else if( isFlag( arg ) ) { for( int i = 0, i_max = nameWithoutDelims.length() - 1; i <= i_max; ++i ) { QtArgIface * argument = findArgument( nameWithoutDelims[ i ] ); lastArgNameOrFlag = QString( m_delimiter ) + nameWithoutDelims[ i ]; if( i != i_max ) { QStringList dummyArgsList( nameWithoutDelims .right( nameWithoutDelims.length() - i - 1 ) ); QtArgCmdLineContext dummyContext( dummyArgsList ); if( argument->process( dummyContext ) ) { argument->visit( m_context ); argument->checkConstraint(); break; } } else argument->process( m_context ); argument->visit( m_context ); argument->checkConstraint(); } } // Something unexpected. else throw QtArgUnexpectedOptionEx( QString::fromLatin1( "Unexpected option: %1. " "Argument \"%2\" doesn't expect any values." ) .arg( name ).arg( lastArgNameOrFlag ) ); } checkMandatoryArguments(); } inline void QtArgCmdLine::addArgImpl( QtArgIface * arg ) { if( !m_args.contains( arg ) ) { m_args.append( arg ); checkArgumentsCorrectness(); } } inline void QtArgCmdLine::checkArgumentsCorrectness() const { QtArgIface::FlagsList flags; QtArgIface::NamesList names; foreach( QtArgIface * arg, m_args ) arg->check( m_delimiter, flags, names ); } inline bool QtArgCmdLine::isFlag( const QString & str ) const { if( !isArgument( str ) ) if( str.startsWith( m_delimiter ) ) return true; return false; } inline bool QtArgCmdLine::isArgument( const QString & str ) const { static const QString doubleDelimiter = QString( m_delimiter ) + m_delimiter; if( str.startsWith( doubleDelimiter ) ) return true; return false; } inline void QtArgCmdLine::splitArgumentAndValue( const QString & toCheck, QString & argument, QString & value ) { const int index = toCheck.indexOf( '=' ); if( index != -1 ) { argument = toCheck.left( index ); value = toCheck.right( toCheck.length() - index - 1 ); } else { argument = toCheck; value = QString::null; } } inline QString QtArgCmdLine::removeDelimiters( const QString & str ) const { QString tmp = str; if( tmp.startsWith( m_delimiter ) ) tmp.remove( 0, 1 ); if( tmp.startsWith( m_delimiter ) ) tmp.remove( 0, 1 ); return tmp; } inline QtArgIface * QtArgCmdLine::findArgument( const QString & name ) { QtArgIface * ret = NULL; foreach( QtArgIface * arg, m_args ) { QtArgIface * a = arg->giveArgument( name ); if( ret == NULL ) ret = a; else if( a ) throw QtArgUnknownArgumentEx( QString::fromLatin1( "Unknown argument: %1%1%2" ) .arg( m_delimiter ) .arg( name ) ); } if( ret == NULL ) throw QtArgUnknownArgumentEx( QString::fromLatin1( "Unknown argument: %1%1%2" ) .arg( m_delimiter ) .arg( name ) ); return ret; } inline QtArgIface * QtArgCmdLine::findArgument( const QChar & flag ) { foreach( QtArgIface * arg, m_args ) { QtArgIface * ret = arg->giveArgument( flag ); if( ret != NULL ) return ret; } throw QtArgUnknownArgumentEx( QString::fromLatin1( "Unknown argument: %1%2" ) .arg( m_delimiter ) .arg( flag ) ); } inline void QtArgCmdLine::checkMandatoryArguments() const { foreach( const QtArgIface * arg, m_args ) arg->check(); } #endif // QTARG__CMDLINE_HPP__INCLUDED springlobby-0.169/src/Helper/qtargparser/QtArg/cmdlinecontext.hpp0000600000176000000410000000477612105760300026545 0ustar buildbotwww-data00000000000000 /*! \file \brief Command Line Parser Context. \author Igor P. Mironchik (imironchick at gmail dot com). Copyright (c) 2010 Igor P. Mironchik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef QTARG__CMDLINECONTEXT_HPP__INCLUDED #define QTARG__CMDLINECONTEXT_HPP__INCLUDED // Qt include. #include #include class QtArgCmdLine; // // QtArgCmdLineContext // //! Context of the command line. class QtArgCmdLineContext { friend class QtArgCmdLine; static const QString m_null; public: //! \retval true if there are no more arguments. //! \retval false if there are one or more argument exists. bool atEnd() const { return ( m_current == m_argv.end() ); } //! \return Next argument at command line. //! \retval Null QString if there are no more arguments at command line. const QString & next() { if( atEnd() ) return m_null; return ( *( m_current++ ) ); } protected: explicit QtArgCmdLineContext( const QStringList & argv ) : m_argv( argv ) , m_current( m_argv.begin() ) {} //! Prepend context with new value. void prepend( const QString & value ) { m_current = m_argv.insert( m_current, value ); } private: //! Command line. QStringList m_argv; //! Current position. QStringList::Iterator m_current; }; // class QtArgCmdLineContext const QString QtArgCmdLineContext::m_null = QString::null; #endif // QTARG__CMDLINECONTEXT_HPP__INCLUDED springlobby-0.169/src/Helper/qtargparser/QtArg/cmdlineiface.hpp0000600000176000000410000000437312105760300026121 0ustar buildbotwww-data00000000000000 /*! \file \brief Command Line Parser. \author Igor P. Mironchik (imironchick at gmail dot com). Copyright (c) 2010 Igor P. Mironchik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef QTARG__CMDLINEIFACE_HPP__INCLUDED #define QTARG__CMDLINEIFACE_HPP__INCLUDED // Qt include. #include class QtArgIface; // // QtArgCmdLineIface // //! Command line arguments parser interface. class QtArgCmdLineIface { public: //! Type of the list of the arguments in the command line. typedef QList< QtArgIface* > QtArgumentsList; virtual ~QtArgCmdLineIface() {} //! \return List of arguments handled by this QtArgCmdLine. virtual const QtArgumentsList & arguments() const = 0; //! \return Delimiter char. virtual const QChar & delimiter() const = 0; //! Set delimiter char. virtual void setDelimiter( const QChar & delim ) = 0; //! Add new argument. //! Can throw exceptions. virtual void addArg( QtArgIface & arg ) = 0; //! Add new argument. //! Can throw exceptions. virtual void addArg( QtArgIface * arg ) = 0; //! Parse arguments. //! Can throw exceptions. virtual void parse() = 0; }; // class QtArgCmdLineIface #endif // QTARG__CMDLINEIFACE_HPP__INCLUDED springlobby-0.169/src/Helper/qtargparser/QtArg/exceptions.hpp0000600000176000000410000001207312105760300025673 0ustar buildbotwww-data00000000000000/*! \file \brief Base class of the QtArg exceptions. \author Igor P. Mironchik (imironchick at gmail dot com). Copyright (c) 2010 Igor P. Mironchik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef QTARG__EXCEPTIONS_HPP__INCLUDED #define QTARG__EXCEPTIONS_HPP__INCLUDED // C++ include. #include // Qt include. #include // // QtArgBaseException // //! Base exception for all exceptions of the QtArg library. class QtArgBaseException : public std::runtime_error { public: explicit QtArgBaseException( const QString & desc ) : std::runtime_error( desc.toLocal8Bit().constData() ) {} virtual ~QtArgBaseException() throw() {} }; // class QtArgBaseException // // QtArgUnknownArgumentEx // //! Throws when in command line found unknown argument. class QtArgUnknownArgumentEx : public QtArgBaseException { public: explicit QtArgUnknownArgumentEx( const QString & desc ) : QtArgBaseException( desc ) {} virtual ~QtArgUnknownArgumentEx() throw() {} }; // class QtArgUnknownArgumentEx // // QtArgUnexpectedOptionEx // //! Throws when in command line found unexpected option. /*! An option differs from an flag or argument by lack of the delimiter or delimiters as prefix. */ class QtArgUnexpectedOptionEx : public QtArgBaseException { public: explicit QtArgUnexpectedOptionEx( const QString & desc ) : QtArgBaseException( desc ) {} virtual ~QtArgUnexpectedOptionEx() throw() {} }; // class QtArgUnexpectedOptionEx // // QtArgNotDefinedOptionForTheArgumentEx // //! Throws when user doesn't define option for the argument //! that expect it. class QtArgNotDefinedOptionForTheArgumentEx : public QtArgBaseException { public: explicit QtArgNotDefinedOptionForTheArgumentEx( const QString & desc ) : QtArgBaseException( desc ) {} virtual ~QtArgNotDefinedOptionForTheArgumentEx() throw() {} }; // QtArgNotDefinedOptionForTheArgumentEx // // QtArgNotDefinedMandatoryArgumentEx // //! Throws when user doesn't define mandatory argument. class QtArgNotDefinedMandatoryArgumentEx : public QtArgBaseException { public: explicit QtArgNotDefinedMandatoryArgumentEx( const QString & desc ) : QtArgBaseException( desc ) {} virtual ~QtArgNotDefinedMandatoryArgumentEx() throw() {} }; // QtArgNotDefinedMandatoryArgumentEx // // QtArgDissallowedFlagOrNameEx // //! Throws when the flag is equal to the delimiter or space. class QtArgDissallowedFlagOrNameEx : public QtArgBaseException { public: explicit QtArgDissallowedFlagOrNameEx( const QString & desc ) : QtArgBaseException( desc ) {} virtual ~QtArgDissallowedFlagOrNameEx() throw() {} }; // class QtArgDissallowedFlagOrNameEx // // QtArgNameOrFlagAlreadyKnownEx // //! Throws when the flag or name already in use by another argument. class QtArgNameOrFlagAlreadyKnownEx : public QtArgBaseException { public: explicit QtArgNameOrFlagAlreadyKnownEx( const QString & desc ) : QtArgBaseException( desc ) {} virtual ~QtArgNameOrFlagAlreadyKnownEx() throw() {} }; // class QtArgNameOrFlagAlreadyKnownEx // // QtArgNotDefinedNorNameNorFlagEx // //! Throws when in command line found argument without defined name and flag. class QtArgNotDefinedNorNameNorFlagEx : public QtArgBaseException { public: explicit QtArgNotDefinedNorNameNorFlagEx() : QtArgBaseException( QString::fromLatin1( "Not defined nor name nor flag for argument." ) ) {} virtual ~QtArgNotDefinedNorNameNorFlagEx() throw() {} }; // class QtArgNotDefinedNorNameNorFlagEx // // QtArgContraintNotObservedEx // //! Throws when constraint for the argument's values didn't observed. class QtArgContraintNotObservedEx : public QtArgBaseException { public: explicit QtArgContraintNotObservedEx( const QString & desc ) : QtArgBaseException( desc ) {} virtual ~QtArgContraintNotObservedEx() throw() {} }; // class QtArgContraintNotObservedEx #endif // QTARG__EXCEPTIONS_HPP__INCLUDED springlobby-0.169/src/Helper/qtargparser/QtArg/help.hpp0000600000176000000410000002723612105760300024451 0ustar buildbotwww-data00000000000000 /*! \file \brief Help printer. \author Igor P. Mironchik (imironchick at gmail dot com). Copyright (c) 2010 Igor P. Mironchik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef QTARG__HELP_HPP__INCLUDED #define QTARG__HELP_HPP__INCLUDED // Qt include. #include #include // QtArg include. #include "cmdline.hpp" #include "arg.hpp" #include "helpiface.hpp" #include "exceptions.hpp" #include // // QtArgHelpPrinterHasntDefinedEx // //! Throws when user hasn't defined help printer. class QtArgHelpPrinterHasntDefinedEx : public QtArgBaseException { public: QtArgHelpPrinterHasntDefinedEx() : QtArgBaseException( QString::fromLatin1( "Help printer hasn't defined" ) ) {} virtual ~QtArgHelpPrinterHasntDefinedEx() throw() {} }; // class QtArgHelpPrinterHasntDefinedEx // // QtHelpHasPrintedEx // //! Throws when help has printed. class QtHelpHasPrintedEx : public QtArgBaseException { public: QtHelpHasPrintedEx() : QtArgBaseException( QString::null ) {} virtual ~QtHelpHasPrintedEx() throw() {} }; // class QtHelpHasPrintedEx // // QtArgDefaultHelpPrinter // //! Default implementation of the QtArgHelpPrinterIface. class QtArgDefaultHelpPrinter : public QtArgHelpPrinterIface { public: QtArgDefaultHelpPrinter( const QString & helpHandle ) : m_max_flags_length( 0 ) , m_max_names_length( 0 ) , m_helpHandle( helpHandle ) { } virtual ~QtArgDefaultHelpPrinter() {} //! Print help on the specified argument. virtual void print( const QtArgIface * arg, const QChar & delimiter ) { QString flags; { const QtArgIface::FlagsList & fs = arg->flags(); if( fs.size() ) flags.append( delimiter ); foreach( QChar f, fs ) flags.append( f ); } if( m_max_flags_length < flags.length() ) m_max_flags_length = flags.length(); if( flags.length() ) { m_help.append( QtArgHelpPrinterIface::beforeFlags ); m_help.append( flags ); } if( flags.length() && arg->names().size() ) { m_help.append( QString::fromLatin1( "," ) ); m_help.append( QtArgHelpPrinterIface::afterFlags ); m_help.append( QtArgHelpPrinterIface::namesString ); m_help.append( QtArgHelpPrinterIface::afterNames ); m_names.append( arg->names() ); } else if( arg->names().size() ) { m_help.append( QtArgHelpPrinterIface::beforeNames ); m_help.append( QtArgHelpPrinterIface::namesString ); m_help.append( QtArgHelpPrinterIface::afterNames ); m_names.append( arg->names() ); } else if( flags.length() ) m_help.append( QtArgHelpPrinterIface::afterNames ); else m_help.append( QtArgHelpPrinterIface::beforeDescription ); m_help.append( arg->description() ); m_help.append( QtArgHelpPrinterIface::newLine ); } //! Print string \par str. virtual void print( const QString & str ) const { QTextStream out( stdout ); out << str << endl; } //! Flush help into the out stream; virtual void flush( const QChar & delimiter ) { prepareNames(); replaceNames( delimiter ); const int beforeFlagsLength = 2; const int afterFlagsLength = 1; const int afterNamesLength = 3; const int beforeNamesLength = beforeFlagsLength + afterFlagsLength + m_max_flags_length + 1; const int beforeDescriptionLength = beforeNamesLength + afterNamesLength + m_max_names_length; const QString beforeFlags = QString( beforeFlagsLength, ' ' ); const QString afterFlags = QString( afterFlagsLength, ' ' ); const QString afterNames = QString( afterNamesLength, ' ' ); const QString beforeNames = QString( beforeNamesLength, ' ' ); const QString beforeDescription = QString( beforeDescriptionLength, ' ' ); m_help.replace( QtArgHelpPrinterIface::beforeFlags, beforeFlags ); m_help.replace( QtArgHelpPrinterIface::beforeNames, beforeNames ); m_help.replace( QtArgHelpPrinterIface::beforeDescription, beforeDescription ); // Replacing of the QtArgHelpPrinterIface::afterFlags. while( true ) { QTextStream out( stdout ); const int afterFlagsIndex = m_help.indexOf( QtArgHelpPrinterIface::afterFlags ); if( afterFlagsIndex != -1 ) { int newLineIndex = m_help.lastIndexOf( QtArgHelpPrinterIface::newLine, afterFlagsIndex ); if( newLineIndex == -1 ) newLineIndex = 0; const int space = beforeNamesLength - ( afterFlagsIndex - newLineIndex ) + ( newLineIndex > 0 ? QtArgHelpPrinterIface::newLine.length() : 0 ); m_help.replace( afterFlagsIndex, QtArgHelpPrinterIface::afterFlags.length(), QString( space, ' ' ) ); } else break; } // Replacing of the QtArgHelpPrinterIface::afterNames. while( true ) { const int afterNamesIndex = m_help.indexOf( QtArgHelpPrinterIface::afterNames ); if( afterNamesIndex != -1 ) { int newLineIndex = m_help.lastIndexOf( QtArgHelpPrinterIface::newLine, afterNamesIndex ); if( newLineIndex == -1 ) newLineIndex = 0; const int space = beforeDescriptionLength - ( afterNamesIndex - newLineIndex ) + ( newLineIndex > 0 ? QtArgHelpPrinterIface::newLine.length() : 0 ); m_help.replace( afterNamesIndex, QtArgHelpPrinterIface::afterNames.length(), QString( space, ' ' ) ); } else break; } m_help.replace( QtArgHelpPrinterIface::newLine, QString::fromLatin1( "\n" ) ); QTextStream out( stdout ); out << m_helpHandle << endl; out << m_help; } private: //! \return Is name \par name unique in names \par list. inline bool isUnique( const QString & name, const QStringList & list ) const { bool contains = false; foreach( QString n, list ) if( n.startsWith( name ) ) { if( !contains ) contains = true; else return false; } return true; } //! Prepare names for printing. inline void prepareNames() { QStringList rawNames; foreach( QStringList list, m_names ) { foreach( QString name, list ) { rawNames << name; } } for( int i = 0; i < m_names.size(); ++i ) { for( int j = 0; j < m_names[ i ].size(); ++j ) { int index = 1; QString & fullName = m_names[ i ][ j ]; while( !isUnique( fullName.left( index ), rawNames ) ) ++index; if( index != fullName.length() ) { fullName.insert( index, '[' ); fullName.append( ']' ); } } } } //! Replace names. inline void replaceNames( const QChar & delimiter ) { foreach( QStringList list, m_names ) { QString namesString; bool isFirst = true; foreach( QString name, list ) { if( !isFirst ) namesString.append( QString::fromLatin1( ", " ) ); else isFirst = false; namesString.append( delimiter ); namesString.append( delimiter ); namesString.append( name ); } if( m_max_names_length < namesString.length() ) m_max_names_length = namesString.length(); m_help.replace( m_help.indexOf( QtArgHelpPrinterIface::namesString ), QtArgHelpPrinterIface::namesString.length(), namesString ); } } private: //! Prepared help string. QString m_help; //! Max length of the flags. int m_max_flags_length; //! Max length of the names. int m_max_names_length; //! Program description printed before help. QString m_helpHandle; typedef QList< QStringList > NamesList; //! Names of arguments. NamesList m_names; }; // class QtArgDefaultHelpPrinter // // QtArgHelp // //! Argument for the help priniting. /*! Defined as argument with "h" flag and "help" name. */ class QtArgHelp : public QtArg { public: QtArgHelp( QtArgCmdLine * cmdLine ); virtual ~QtArgHelp(); //! \return Printer implementation. QtArgHelpPrinterIface * printer(); //! Set printer implementation. void setPrinter( QtArgHelpPrinterIface * p ); //! Set long argument's description. void setArgumentDescription( QtArgIface * arg, const QString & desc ); //! \name QtArgIface implementation. //! \{ //! Process with visitor. virtual void visit( QtArgCmdLineContext & context ); //! \} private: //! Print help on the arg \param arg. void handleArgument( QtArgIface * arg ) const; private: //! Printer implemenation. QtArgHelpPrinterIface * m_printer; //! Pointer to the QtArgCmdLine. QtArgCmdLine * m_cmdLine; //! Long descriptions. QMap< QtArgIface*, QString > m_descriptions; }; // class QtArgHelp // // QtArgHelp implementation. // inline QtArgHelp::QtArgHelp( QtArgCmdLine * cmdLine ) : QtArg( 'h', QString::fromLatin1( "help" ), QString::fromLatin1( "Print this help." ) ) , m_printer( NULL ) , m_cmdLine( cmdLine ) { } inline QtArgHelp::~QtArgHelp() { } inline QtArgHelpPrinterIface * QtArgHelp::printer() { return m_printer; } inline void QtArgHelp::setPrinter( QtArgHelpPrinterIface * p ) { m_printer = p; } inline void QtArgHelp::setArgumentDescription( QtArgIface * arg, const QString & desc ) { m_descriptions.insert( arg, desc ); } inline void QtArgHelp::handleArgument( QtArgIface * arg ) const { const QtArgCmdLineIface::QtArgumentsList & args = arg->arguments(); if( args.size() > 1 ) { foreach( QtArgIface * child, args ) handleArgument( child ); } else m_printer->print( args.front(), m_cmdLine->delimiter() ); } inline void QtArgHelp::visit( QtArgCmdLineContext & context ) { if( m_printer ) { if( !context.atEnd() ) { const QString & argName = context.next(); try { QtArgIface * arg = m_cmdLine->findArgument( argName ); QMap< QtArgIface*, QString>::ConstIterator it = m_descriptions.find( arg ); if( it != m_descriptions.end() ) m_printer->print( it.value() ); else m_printer->print( arg->description() ); } catch( const QtArgUnknownArgumentEx & x ) { m_printer->print( QString::fromLatin1( "Unknown argument: %1%1%2" ) .arg( m_cmdLine->delimiter() ) .arg( argName ) ); } } else { const QtArgCmdLineIface::QtArgumentsList & args = m_cmdLine->arguments(); foreach( QtArgIface * arg, args ) handleArgument( arg ); m_printer->flush( m_cmdLine->delimiter() ); } throw QtHelpHasPrintedEx(); } else throw QtArgHelpPrinterHasntDefinedEx(); } #endif // QTARG__HELP_HPP__INCLUDED springlobby-0.169/src/Helper/qtargparser/QtArg/helpiface.hpp0000600000176000000410000000650212105760300025432 0ustar buildbotwww-data00000000000000 /*! \file \brief Help printer. \author Igor P. Mironchik (imironchick at gmail dot com). Copyright (c) 2010 Igor P. Mironchik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef QTARG__HELPIFACE_HPP__INCLUDED #define QTARG__HELPIFACE_HPP__INCLUDED // Qt include. #include // QtArg include. #include "arg.hpp" // // QtArgHelpPrinterIface // //! Interface for the help printer. class QtArgHelpPrinterIface { protected: virtual ~QtArgHelpPrinterIface() {} public: //! Print help on the specified argument. virtual void print( const QtArgIface * arg, const QChar & delimiter ) = 0; //! Print string \par str. virtual void print( const QString & str ) const = 0; //! Flush help into the out stream; virtual void flush( const QChar & delimite ) = 0; public: /*! \name This constants will be replaced with correct spaces. \li beforeFlags - space before flags. \li afterFlags - space after flags and ','. \li afterNames - space after names. \li beforeNames - space before names. Equals to beforeFlags + longest flags. \li beforeDescription - space before description. Equals to beforeNames + longest names. */ //! \{ static const QString beforeFlags; static const QString afterFlags; static const QString afterNames; static const QString beforeNames; static const QString beforeDescription; //! \} //! New line in help string. static const QString newLine; //! String with names of the argument. static const QString namesString; }; // class QtArgHelpPrinterIface const QString QtArgHelpPrinterIface::beforeFlags = QString::fromLatin1( "%beforeFlags%" ); const QString QtArgHelpPrinterIface::afterFlags = QString::fromLatin1( "%afterFlags%" ); const QString QtArgHelpPrinterIface::afterNames = QString::fromLatin1( "%afterNames%" ); const QString QtArgHelpPrinterIface::beforeNames = QString::fromLatin1( "%beforeNames%" ); const QString QtArgHelpPrinterIface::beforeDescription = QString::fromLatin1( "%beforeDescription%" ); const QString QtArgHelpPrinterIface::newLine = QString::fromLatin1( "%newLine%" ); const QString QtArgHelpPrinterIface::namesString = QString::fromLatin1( "%namesString%" ); #endif // QTARG__HELPIFACE_HPP__INCLUDED springlobby-0.169/src/Helper/qtargparser/QtArg/multiarg.hpp0000600000176000000410000002014312105760300025333 0ustar buildbotwww-data00000000000000 /*! \file \brief Command line argument with multiply values. \author Igor P. Mironchik (imironchick at gmail dot com). Copyright (c) 2010 Igor P. Mironchik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef QTARG__MULTIARG_HPP__INCLUDED #define QTARG__MULTIARG_HPP__INCLUDED // Qt include. #include #include // QtArg include. #include "arg.hpp" // // class QtMultiArg // //! Command line argument with multiply values. /*! Arguments based on this class can be specified multiply times in command line and value for such arguments is a QList< QVariant >. */ class QtMultiArg : public QtArg { public: explicit QtMultiArg( //! Flag of the argument. const QChar & flag, //! Name of the argument. const QString & name = QString(), //! Description of the argument. const QString & description = QString(), //! Is argument required? bool required = false, //! Should argument has a value? bool withValue = false, //! Visitor of the argument. QtArgVisitorIface * visitor = NULL, //! Constraint for the argument's values. QtArgConstraintIface * constraint = NULL ); QtMultiArg( //! Flag of the argument. const QChar & flag, //! Various names of the argument. const QStringList & names, //! Description of the argument. const QString & description = QString(), //! Is argument required? bool required = false, //! Should argument has a value? bool withValue = false, //! Visitor of the argument. QtArgVisitorIface * visitor = NULL, //! Constraint for the argument's values. QtArgConstraintIface * constraint = NULL ); explicit QtMultiArg( //! Name of the argument. const QString & name, //! Description of the argument. const QString & description = QString(), //! Is argument required? bool required = false, //! Should argument has a value? bool withValue = false, //! Visitor of the argument. QtArgVisitorIface * visitor = NULL, //! Constraint for the argument's values. QtArgConstraintIface * constraint = NULL ); explicit QtMultiArg( //! Various names of the argument. const QtArgIface::NamesList & names, //! Description of the argument. const QString & description = QString(), //! Is argument required? bool required = false, //! Should argument has a value? bool withValue = false, //! Visitor of the argument. QtArgVisitorIface * visitor = NULL, //! Constraint for the argument's values. QtArgConstraintIface * constraint = NULL ); explicit QtMultiArg( //! Various flags of the argument. const QtArgIface::FlagsList & flags, //! Description of the argument. const QString & description = QString(), //! Is argument required? bool required = false, //! Should argument has a value? bool withValue = false, //! Visitor of the argument. QtArgVisitorIface * visitor = NULL, //! Constraint for the argument's values. QtArgConstraintIface * constraint = NULL ); QtMultiArg( //! Various flags of the argument. const QtArgIface::FlagsList & flags, //! Various names of the argument. const QtArgIface::NamesList & names, //! Description of the argument. const QString & description = QString(), //! Is argument required? bool required = false, //! Should argument has a value? bool withValue = false, //! Visitor of the argument. QtArgVisitorIface * visitor = NULL, //! Constraint for the argument's values. QtArgConstraintIface * constraint = NULL ); QtMultiArg( const QtArg & arg ); QtMultiArg & operator = ( const QtArg & arg ); QtMultiArg( const QtMultiArg & arg ); QtMultiArg & operator = ( const QtMultiArg & arg ); virtual ~QtMultiArg(); //! Set value of the argument. virtual void setValue( const QVariant & v ); //! \name QtArgIface implementation. //! \{ //! Check corrcetness of the argument constraint. /*! Should throw QtArgContraintNotObservedEx if constraint didn't observed. */ virtual void checkConstraint() const; //! \} }; // class QtMultiArg // // QtMultiArg implementation. // inline QtMultiArg::QtMultiArg( const QChar & flag, const QString & name, const QString & description, bool required, bool withValue, QtArgVisitorIface * visitor, QtArgConstraintIface * constraint ) : QtArg( flag, name, description, required, withValue, visitor, constraint ) { } inline QtMultiArg::QtMultiArg( const QChar & flag, const QStringList & names, const QString & description, bool required, bool withValue, QtArgVisitorIface * visitor, QtArgConstraintIface * constraint ) : QtArg( flag, names, description, required, withValue, visitor, constraint ) { } inline QtMultiArg::QtMultiArg( const QString & name, const QString & description, bool required, bool withValue, QtArgVisitorIface * visitor, QtArgConstraintIface * constraint ) : QtArg( name, description, required, withValue, visitor, constraint ) { } inline QtMultiArg::QtMultiArg( const QtArgIface::NamesList & names, const QString & description, bool required, bool withValue, QtArgVisitorIface * visitor, QtArgConstraintIface * constraint ) : QtArg( names, description, required, withValue, visitor, constraint ) { } inline QtMultiArg::QtMultiArg( const QtArgIface::FlagsList & flags, const QString & description, bool required, bool withValue, QtArgVisitorIface * visitor, QtArgConstraintIface * constraint ) : QtArg( flags, description, required, withValue, visitor, constraint ) { } inline QtMultiArg::QtMultiArg( const QtArgIface::FlagsList & flags, const QtArgIface::NamesList & names, const QString & description, bool required, bool withValue, QtArgVisitorIface * visitor, QtArgConstraintIface * constraint ) : QtArg( flags, names, description, required, withValue, visitor, constraint ) { } inline QtMultiArg::QtMultiArg( const QtArg & arg ) : QtArg( arg ) { } inline QtMultiArg & QtMultiArg::operator = ( const QtArg & arg ) { QtArg::operator = ( arg ); return *this; } inline QtMultiArg::QtMultiArg( const QtMultiArg & arg ) : QtArg( arg ) { } inline QtMultiArg & QtMultiArg::operator = ( const QtMultiArg & arg ) { QtArg::operator = ( arg ); return *this; } inline QtMultiArg::~QtMultiArg() { } inline void QtMultiArg::setValue( const QVariant & v ) { QList< QVariant > values = value().toList(); values.append( v ); QtArg::setValue( values ); } inline void QtMultiArg::checkConstraint() const { if( isDefined() ) { QList< QVariant > values = value().toList(); foreach( QVariant v, values ) if( constraint() && !constraint()->check( v ) ) throw QtArgContraintNotObservedEx( QString::fromLatin1( "Constraint for the argument: %1" " hasn't observed. Wrong value is: %2" ) .arg( names().size() ? names().front() : flags().front() ) .arg( v.toString() ) ); } } #endif // QTARG__MULTIARG_HPP__INCLUDED springlobby-0.169/src/Helper/qtargparser/QtArg/visitor.hpp0000600000176000000410000000323012105760300025204 0ustar buildbotwww-data00000000000000 /*! \file \brief Interface for the visitors of the QtArg. \author Igor P. Mironchik (imironchick at gmail dot com). Copyright (c) 2010 Igor P. Mironchik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef QTARG__VISITOR_HPP__INCLUDED #define QTARG__VISITOR_HPP__INCLUDED // QtArg include. #include "cmdlinecontext.hpp" // // QtArgVisitorIface // //! Interface for the visitors of the QtArg. class QtArgVisitorIface { protected: virtual ~QtArgVisitorIface() {} public: //! Process with wisitor. virtual void visit( QtArgCmdLineContext & ) {} }; // class QtArgVisitorIface #endif // QTARG__VISITOR_HPP__INCLUDED springlobby-0.169/src/Helper/qtargparser/QtArg/xorarg.hpp0000600000176000000410000002177312105760300025023 0ustar buildbotwww-data00000000000000 /*! \file \brief Command line argument with under the XOR mask. \author Igor P. Mironchik (imironchick at gmail dot com). Copyright (c) 2010 Igor P. Mironchik Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef QTARG__XORARG_HPP__INCLUDED #define QTARG__XORARG_HPP__INCLUDED // QtArg include. #include "arg.hpp" #include "exceptions.hpp" // // Exceptions. // // // QtArgXORMaskNotObservedEx // //! Throws when user defines more than one XORed argument. class QtArgXORMaskNotObservedEx : public QtArgBaseException { public: explicit QtArgXORMaskNotObservedEx( const QString & desc ) : QtArgBaseException( desc ) {} virtual ~QtArgXORMaskNotObservedEx() throw() {} }; // class QtArgXORMaskNotObservedEx // // QtRequiredArgumentUnderXORMaskEx // //! Throws when user tries to add required argument under the XOR mask. class QtRequiredArgumentUnderXORMaskEx : public QtArgBaseException { public: explicit QtRequiredArgumentUnderXORMaskEx( const QString & desc ) : QtArgBaseException( desc ) {} virtual ~QtRequiredArgumentUnderXORMaskEx() throw() {} }; // class QtArgXORMaskNotObservedEx // // class QtXorArg // //! Command line argument under the XOR mask. /*! This class help to specify two or more arguments as a set of arguments in wich only one can be defined in the command line. Adding required argument under the XOR mask is dissallowed. */ class QtXorArg : public QtArgIface { public: QtXorArg( QtArgIface & arg1, QtArgIface & arg2, const QString & name, bool required = false ); QtXorArg( const QtArgCmdLineIface::QtArgumentsList & args, const QString & name, bool required = false ); QtXorArg( const QtXorArg & arg ); QtXorArg & operator = ( const QtXorArg & arg ); virtual ~QtXorArg(); //! Add argument under the XOR mask. void add( QtArgIface & arg ); //! Add argument under the XOR mask. void add( QtArgIface * arg ); //! Set required flag. void setRequired( bool on = true ); //! \name QtArgIface implemenation. //! \{ /*! \retval true if argument is required. \retval false otherwise. */ virtual bool isRequired() const; /*! \retval true if argument has decided he gas been defined. \retval false otherwise. */ virtual bool isDefined() const; //! \return Description of the argument. virtual QString description() const; /*! Check correctness of the names, flags and so on before parsing. Should throw QtArgDissallowedFlagOrNameEx or QtArgNameOrFlagAlreadyKnownEx. */ virtual void check( //! Delimiter. const QChar & delimiter, //! Already known flags. QtArgIface::FlagsList & alreadyKnownFlags, //! Already known names. QtArgIface::NamesList & alreadyKnownNames ) const; //! Check correctness of the state of the argument after parsing. virtual void check() const; /*! \brief Should return pointer to the QtArgIface if this argument know how to do it, as usual returns "this" if he does. \retval Pointer to the QtArgIface if flag \a flag determines this argument. \retval NULL if flag \a flag doesn't determine this argument. */ virtual QtArgIface * giveArgument( const QChar & flag ); /*! \brief Should return pointer to the QtArgIface if this argument know how to do it, as usual returns "this" if he does. \retval Pointer to the QtArgIface if name \a name determines this argument. \retval NULL if name \a name doesn't determine this argument. */ virtual QtArgIface * giveArgument( const QString & name ); //! \return List of the arguments handled by this argument. /*! Usually returns list with "this" pointer. */ virtual const QtArgCmdLineIface::QtArgumentsList & arguments() const; //! Check corrcetness of the argument constraint. /*! Should throw QtArgContraintNotObservedEx if constraint didn't observed. */ virtual void checkConstraint() const; protected: //! Process argument. //! \return The number of processed arguments. virtual int process( QtArgCmdLineContext & context ); //! Process with visitor. virtual void visit( QtArgCmdLineContext & context ); //! \} private: //! XORed arguments. QtArgCmdLineIface::QtArgumentsList m_args; //! Is argument required? bool m_required; //! Name of the argument. QString m_name; }; // class QtXorArg // // QtXorArg implementation. // inline QtXorArg::QtXorArg( QtArgIface & arg1, QtArgIface & arg2, const QString & name, bool required ) : QtArgIface() , m_required( required ) , m_name( name ) { add( arg1 ); add( arg2 ); } inline QtXorArg::QtXorArg( const QtArgCmdLineIface::QtArgumentsList & args, const QString & name, bool required ) : m_required( required ) , m_name( name ) { foreach( QtArgIface * arg, args ) add( arg ); } inline QtXorArg::QtXorArg( const QtXorArg & arg ) : QtArgIface() , m_args( arg.arguments() ) , m_required( arg.m_required ) , m_name( arg.m_name ) { } inline QtXorArg & QtXorArg::operator = ( const QtXorArg & arg ) { m_args = arg.arguments(); m_required = arg.isRequired(); m_name = arg.m_name; return *this; } inline QtXorArg::~QtXorArg() { } inline void QtXorArg::add( QtArgIface & arg ) { add( &arg ); } inline void QtXorArg::add( QtArgIface * arg ) { if( arg && !m_args.contains( arg ) ) { if( !arg->isRequired() ) m_args.append( arg ); else throw QtRequiredArgumentUnderXORMaskEx( QString::fromLatin1( "A try to add required argument under the XOR mask." ) ); } } inline bool QtXorArg::isRequired() const { return m_required; } inline void QtXorArg::setRequired( bool on ) { m_required = on; } inline bool QtXorArg::isDefined() const { bool defined = false; foreach( QtArgIface * arg, m_args ) if( arg->isDefined() ) defined = true; return defined; } inline void QtXorArg::check( const QChar & delimiter, QtArgIface::FlagsList & alreadyKnownFlags, QtArgIface::NamesList & alreadyKnownNames ) const { foreach( QtArgIface * arg, m_args ) arg->check( delimiter, alreadyKnownFlags, alreadyKnownNames ); } inline void QtXorArg::check() const { if( isRequired() && !isDefined() ) throw QtArgNotDefinedMandatoryArgumentEx( QString::fromLatin1( "Not defined mandatory argument: %1" ) .arg( m_name ) ); QString definedArgumentName; foreach( QtArgIface * arg, m_args ) { arg->check(); if( arg->isDefined() && !definedArgumentName.isEmpty() ) throw QtArgXORMaskNotObservedEx( QString::fromLatin1( "Defined more than one argument under XOR mask." " First defined argument: %1. Second defined argument: %2." ) .arg( definedArgumentName ) .arg( arg->names().size() ? arg->names().front() : arg->flags().front() ) ); if( arg->isDefined() ) definedArgumentName = ( arg->names().size() ? arg->names().front() : arg->flags().front() ); } } inline QString QtXorArg::description() const { return QString::null; } inline QtArgIface * QtXorArg::giveArgument( const QChar & flag ) { foreach( QtArgIface * arg, m_args ) { QtArgIface * ret = arg->giveArgument( flag ); if( ret != NULL ) return ret; } return NULL; } inline QtArgIface * QtXorArg::giveArgument( const QString & name ) { foreach( QtArgIface * arg, m_args ) { QtArgIface * ret = arg->giveArgument( name ); if( ret != NULL ) return ret; } return NULL; } inline const QtArgCmdLineIface::QtArgumentsList & QtXorArg::arguments() const { return m_args; } inline int QtXorArg::process( QtArgCmdLineContext & ) { return 0; } inline void QtXorArg::visit( QtArgCmdLineContext & ) { } inline void QtXorArg::checkConstraint() const { if( isDefined() ) { foreach( QtArgIface * arg, m_args ) arg->checkConstraint(); } } #endif // QTARG__XORARG_HPP__INCLUDED springlobby-0.169/src/Helper/qtargparser/README0000600000176000000410000000064112105760300022641 0ustar buildbotwww-data00000000000000This is QtArg version 1.0.0. QtArg is a small C++ library based on the Qt 4 for parsing command line arguments. COMPILING QTARG Just run build.rb which is a Ruby program. REQUIREMENTS For compiling QtArg you should have installed: * Qt 4 framework (http://qt.nokia.com/) * Ruby programming language (http://www.ruby-lang.org/en/) * mxx_ru Ruby gem (http://rubyforge.org/projects/mxx-ru/) springlobby-0.169/src/Helper/slconfig.cpp0000600000176000000410000002105012105760300021733 0ustar buildbotwww-data00000000000000#include "slconfig.h" #include #include #include "../utils/platform.h" #include "../utils/conversion.h" slConfig::slConfig ( const wxString& appName, const wxString& vendorName, const wxString& strLocal, const wxString& strGlobal, long style, const wxMBConv& conv ) : slConfigBaseType( appName, vendorName, strLocal, strGlobal, style, conv ), m_global_config( 0 ) { SetupGlobalconfig(); } #if wxUSE_STREAMS slConfig::slConfig( wxInputStream& in, const wxMBConv& conv ) : slConfigBaseType( in, conv ), m_global_config( 0 ) { SetupGlobalconfig(); } #endif // wxUSE_STREAMS wxString slConfig::GlobalConfigPath() const { #ifdef __WXMSW__ wxString p (wxFileName::GetPathSeparator()); wxString global_config_path = wxFormat( _T("%s%s%s.global.conf") ) % GetExecutableFolder() % p % ::GetAppName( true ); #else wxString global_config_path = IdentityString( _T("/etc/default/%s.conf"), true ); #endif //__WXMSW__ return global_config_path; } void slConfig::SetupGlobalconfig() { SetRecordDefaults( true ); const wxString global_config_path = GlobalConfigPath(); if ( wxFileName::FileExists( global_config_path ) ) { wxFileInputStream instream( global_config_path ); if ( instream.IsOk() ) { m_global_config = new wxFileConfig ( instream ); m_global_config->SetRecordDefaults( false ); } } } #ifdef __WXMSW__ bool slConfig::DoWriteLong( const wxString& key, long lValue ) { return slConfigBaseType::DoWriteString( key, TowxString( lValue ) ); } #endif wxString slConfig::Read(const wxString& key, const wxString& defaultVal ) const { //1. value from self, 2. value from global, 3. default value wxString ret; if ( slConfigBaseType::Read( key, &ret ) ) return ret; else if ( m_global_config && m_global_config->Read( key, &ret ) ) { //basically this means we're treating the global value as a default to our self //and write it according to policy if ( IsRecordingDefaults() ) ((slConfig*)this)->Write( key, ret ); return ret; } if ( IsRecordingDefaults() ) ((slConfig*)this)->Write( key, defaultVal ); return defaultVal; } long slConfig::Read(const wxString& key, long defaultVal) const { long ret; if ( slConfigBaseType::Read( key, &ret ) ) return ret; else if ( m_global_config && m_global_config->Read( key, &ret ) ) { if ( IsRecordingDefaults() ) ((slConfig*)this)->Write( key, ret ); return ret; } if ( IsRecordingDefaults() ) ((slConfig*)this)->Write( key, defaultVal ); return defaultVal; } bool slConfig::Read(const wxString& key, wxString* str) const { //value was found in self -> return true if ( slConfigBaseType::Read( key, str ) ) return true; //value was found in global. while technically this constitutes using a default value //we still return true since no default value was passed as argument to the original call else if ( m_global_config && m_global_config->Read( key, str ) ) { if ( str && IsRecordingDefaults() ) ((slConfig*)this)->Write( key, *str ); return true; } return false; } bool slConfig::Read(const wxString& key, wxString* str, const wxString& defaultVal) const { // do not pass the default to this first call since it might write it back immeadiately if ( slConfigBaseType::Read( key, str ) ) return true; else if ( m_global_config && m_global_config->Read( key, str, defaultVal ) ) return true;//means the default was not used //at this point the last call will have modified *str with defaultVal if ( IsRecordingDefaults() ) ((slConfig*)this)->Write( key, defaultVal ); return false; } bool slConfig::Read(const wxString& key, long* l) const { if ( slConfigBaseType::Read( key, l ) ) return true; else if ( m_global_config && m_global_config->Read( key, l ) ) { if ( l && IsRecordingDefaults() ) ((slConfig*)this)->Write( key, *l ); return true; } return false; } bool slConfig::Read(const wxString& key, long* l, long defaultVal) const { if ( slConfigBaseType::Read( key, l, defaultVal ) ) return true; else if ( m_global_config && m_global_config->Read( key, l, defaultVal ) ) return true; if ( IsRecordingDefaults() ) ((slConfig*)this)->Write( key, defaultVal ); return false; } bool slConfig::Read(const wxString& key, double* d) const { if ( slConfigBaseType::Read( key, d ) ) return true; else if ( m_global_config && m_global_config->Read( key, d ) ) return true; return false; } bool slConfig::Read(const wxString& key, double* d, double defaultVal) const { if ( slConfigBaseType::Read( key, d, defaultVal ) ) return true; else if ( m_global_config && m_global_config->Read( key, d, defaultVal ) ) return true; if ( IsRecordingDefaults() ) ((slConfig*)this)->Write( key, defaultVal ); return false; } bool slConfig::Read(const wxString& key, bool* b) const { if ( slConfigBaseType::Read( key, b ) ) return true; else if ( m_global_config && m_global_config->Read( key, b ) ) return true; return false; } bool slConfig::Read(const wxString& key, bool* b, bool defaultVal) const { if ( slConfigBaseType::Read( key, b, defaultVal ) ) return true; else if ( m_global_config && m_global_config->Read( key, b, defaultVal ) ) return true; if ( IsRecordingDefaults() ) ((slConfig*)this)->Write( key, defaultVal ); return false; } bool slConfig::HasSection( const wxString& strName) const { return Exists( strName ) || ( m_global_config && m_global_config->Exists( strName ) ); } void slConfig::SetPath(const wxString& strPath) { slConfigBaseType::SetPath(strPath); if ( m_global_config ) m_global_config->SetPath(strPath); } bool slConfig::GetFirstEntry(wxString& str, long& index) const { //the common case, no need to query the global conf if ( slConfigBaseType::GetFirstEntry( str, index) ) return true; long index_global; if ( !( m_global_config && m_global_config->GetFirstEntry( str, index_global) ) ) return false; //the local has no entry, but the global does //setup an entry in the forwards map, so we can redirect subsequent call to GetNextEntry to the global m_enumerationId_forwards_entries[index] = index_global; return true; } bool slConfig::GetNextEntry(wxString& str, long& index) const { ForwardsType::iterator forward_it = m_enumerationId_forwards_entries.find( index ); //an entry in the forwards map must take precendence over local if ( forward_it != m_enumerationId_forwards_entries.end() ) { bool ret = m_global_config && m_global_config->GetNextEntry( str, forward_it->second ); if ( !ret ) //returning false here will (in proper usage) stop the outside loop from calling GetNextEntry again //so this is the time to remove the forward m_enumerationId_forwards_entries.erase( forward_it ); return ret; } return slConfigBaseType::GetNextEntry( str, index ); } bool slConfig::GetFirstGroup(wxString& str, long& index) const { //the common case, no need to query the global conf if ( slConfigBaseType::GetFirstGroup( str, index) ) return true; long index_global; if ( !( m_global_config && m_global_config->GetFirstGroup( str, index_global) ) ) return false; //the local has no entry, but the global does //setup an entry in the forwards map, so we can redirect subsequent call to GetNextEntry to the global m_enumerationId_forwards_groups[index] = index_global; return true; } bool slConfig::GetNextGroup(wxString& str, long& index) const { ForwardsType::iterator forward_it = m_enumerationId_forwards_groups.find( index ); //an entry in the forwards map must take precendence over local if ( forward_it != m_enumerationId_forwards_groups.end() ) { bool ret = m_global_config && m_global_config->GetNextGroup( str, forward_it->second ); if ( !ret ) //returning false here will (in proper usage) stop the outside loop from calling GetNextEntry again //so this is the time to remove the forward m_enumerationId_forwards_groups.erase( forward_it ); return ret; } return slConfigBaseType::GetNextGroup( str, index ); } //! only return gobal number if local is zero //size_t slConfig::GetNumberOfGroups(bool bRecursive ) const //{ // return slConfigBaseType::GetNumberOfGroups( bRecursive ); //// size_t this_count = // if ( this_count != 0 ) // return this_count; // if ( m_global_config ) // return m_global_config->GetNumberOfGroups( bRecursive ); // return 0; //} ////! only return gobal number if local is zero //size_t slConfig::GetNumberOfEntries(bool bRecursive ) const //{ // size_t this_count = slConfigBaseType::GetNumberOfEntries( bRecursive ); // if ( this_count != 0 ) // return this_count; // if ( m_global_config ) // return m_global_config->GetNumberOfEntries( bRecursive ); // return 0; //} springlobby-0.169/src/Helper/slconfig.h0000600000176000000410000000556412105760300021414 0ustar buildbotwww-data00000000000000#ifndef SLCONFIG_H #define SLCONFIG_H #include #include #include "../utils/mixins.hh" class wxFileInputStream; typedef wxFileConfig slConfigBaseType; //! a proxy class to wxFileConfig with additional global config values replacing first tier default values class slConfig : public slConfigBaseType, public SL::NonCopyable { public: slConfig ( const wxString& appName = wxEmptyString, const wxString& vendorName = wxEmptyString, const wxString& localFilename = wxEmptyString, const wxString& globalFilename = wxEmptyString, long style = wxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_GLOBAL_FILE, const wxMBConv& conv = wxConvAuto() ); #if wxUSE_STREAMS slConfig ( wxInputStream& in, const wxMBConv& conv = wxConvAuto() ); #endif // wxUSE_STREAMS wxString Read(const wxString& key, const wxString& defVal = wxEmptyString ) const; long Read(const wxString& key, long defaultVal) const; bool Read(const wxString& key, wxString* str) const; bool Read(const wxString& key, wxString* str, const wxString& defaultVal) const; bool Read(const wxString& key, long* l) const; bool Read(const wxString& key, long* l, long defaultVal) const; bool Read(const wxString& key, double* d) const; bool Read(const wxString& key, double* d, double defaultVal) const; bool Read(const wxString& key, bool* b) const; bool Read(const wxString& key, bool* d, bool defaultVal) const; //! this could be a seriously bad idea if it's used internally to determine if default is used or some such // bool Exists( const wxString& strName) const; bool HasSection( const wxString& strName) const; void SetPath(const wxString& strPath); bool GetFirstEntry(wxString& str, long& index) const; bool GetNextEntry(wxString& str, long& index) const; bool GetFirstGroup(wxString& str, long& index) const; bool GetNextGroup(wxString& str, long& index) const; // size_t GetNumberOfGroups(bool bRecursive = false) const; // size_t GetNumberOfEntries(bool bRecursive = false) const; wxString GlobalConfigPath() const; class PathGuard { slConfig* m_config; const wxString m_old_path; DECLARE_NO_COPY_CLASS(PathGuard) public: PathGuard( slConfig* config, const wxString& new_path ) :m_config( config ), m_old_path( m_config ? m_config->GetPath() : _T("") ) { if ( m_config ) m_config->SetPath( new_path ); } ~PathGuard() { if ( m_config ) m_config->SetPath( m_old_path ); } }; protected: #ifdef __WXMSW__ //! on windows writing longs is broken so we redirect this to string bool DoWriteLong(const wxString& key, long lValue); #endif void SetupGlobalconfig(); wxFileConfig* m_global_config; typedef std::map ForwardsType; mutable ForwardsType m_enumerationId_forwards_entries; mutable ForwardsType m_enumerationId_forwards_groups; }; #endif // SLCONFIG_H springlobby-0.169/src/Helper/slhtmlwindow.cpp0000600000176000000410000000113012105760300022657 0ustar buildbotwww-data00000000000000#include "slhtmlwindow.h" #include "../uiutils.h" BEGIN_EVENT_TABLE( slHtmlWindow, wxHtmlWindow ) EVT_HTML_LINK_CLICKED(wxID_ANY, slHtmlWindow::OnLinkClicked) END_EVENT_TABLE() slHtmlWindow::slHtmlWindow( wxWindow *parent, wxWindowID id, const wxPoint& pos , const wxSize& size, long style, const wxString& name ) : wxHtmlWindow( parent, id, pos, size, style, name ) { //ctor } slHtmlWindow::~slHtmlWindow() { //dtor } void slHtmlWindow::OnLinkClicked( wxHtmlLinkEvent& evt ) { wxString url = evt.GetLinkInfo().GetHref(); OpenWebBrowser( url ); } springlobby-0.169/src/Helper/slhtmlwindow.h0000600000176000000410000000112712105760300022332 0ustar buildbotwww-data00000000000000#ifndef SLHTMLWINDOW_H #define SLHTMLWINDOW_H #include //! A simple wxHtmlWindow that forwards link clicks to system browser class slHtmlWindow : public wxHtmlWindow { public: slHtmlWindow( wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxHW_DEFAULT_STYLE, const wxString& name = _T("htmlWindow") ); virtual ~slHtmlWindow(); void OnLinkClicked( wxHtmlLinkEvent& evt ); protected: DECLARE_EVENT_TABLE() }; #endif // SLHTMLWINDOW_H springlobby-0.169/src/Helper/sortutil.h0000600000176000000410000000630012105760300021462 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_SORTUTIL_H_INCLUDED #define SPRINGLOBBY_SORTUTIL_H_INCLUDED #include //! reference sort algo implementation, not in production use template< class ContainerType, class Comparator > void SLBubbleSort( ContainerType& data, const Comparator& cmp ) { const int n = data.size(); int j = 0; bool swapped = true; while ( swapped ) { j++; swapped = false; for ( int i = 0; i < n - j; ++i ) { if ( cmp ( data[i], data[i+1] ) ) { typename Comparator::ObjType tmp = data[i+1]; data[i+1] = data[i]; data[i] = tmp; swapped = true; } } } } //! set direction to +1 for down, -1 for up struct SortOrderItem { int col; int direction; }; //! map sort priority <--> ( column, direction ) typedef std::map SortOrder; //! the sort algo used in almost all ListCtrls template< class ContainerType, class Comparator > void SLInsertionSort( ContainerType& data, const Comparator& cmp ) { const int n = data.size(); for ( int i = 0; i < n; i++ ) { typename Comparator::ObjType v = data[i]; int j; for ( j = i - 1; j >= 0; j--) { if ( cmp( data[j], v ) ) break; data[j + 1] = data[j]; } data[j + 1] = v; } } namespace SlQuickSort { template< class ContainerType, class Comparator > typename ContainerType::size_t partition(ContainerType& a, typename ContainerType::size_t p, typename ContainerType::size_t r, const Comparator& cmp) { typename Comparator::ObjType x = a[r]; typename ContainerType::size_t j = p - 1; for (typename ContainerType::size_t i = p; i < r; i++) { if ( !cmp(x , a[i]) ) { j = j + 1; typename Comparator::ObjType temp = a[j]; a[j] = a[i]; a[i] = temp; } } a[r] = a[j + 1]; a[j + 1] = x; return (j + 1); } template< class ContainerType, class Comparator > void quickSort(ContainerType& a, typename ContainerType::size_t p, typename ContainerType::size_t r, const Comparator& cmp ) { if (p < r) { typename ContainerType::size_t q = partition(a, p, r, cmp); quickSort(a, p, q - 1, cmp); quickSort(a, q + 1, r, cmp); } } template< class ContainerType, class Comparator > void Sort(ContainerType& a, const Comparator& cmp ) { quickSort( a, 0, a.size() - 1, cmp ); } } //end namespace Sl_Quicksort #endif // SPRINGLOBBY_SORTUTIL_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/Helper/tasclientimport.cpp0000600000176000000410000000416712105760300023362 0ustar buildbotwww-data00000000000000#include "tasclientimport.h" #include #ifdef __WXMSW__ #include #include #include #include #include "../settings.h" #include "../utils/platform.h" #include wxString GetChan( const wxString& token ) { wxString ret = token.AfterFirst('#'); ret = ret.Left( ret.Find( ' ' ) ); return ret; } bool ImportAutojoins() { wxString sep = wxFileName::GetPathSeparator(); wxString fname = sett().GetLobbyWriteDir(); fname.Replace( GetAppName() , wxEmptyString ); fname = fname + sep + _T("var") + sep + _T("perform.dat"); if ( wxFileName::FileExists( fname ) ) { wxTextFile file( fname ); wxLogWarning( _T("parsing file: ") + fname ); file.Open(); for ( wxString line = file.GetFirstLine(); !file.Eof(); line = file.GetNextLine() ) { wxString chan = GetChan( line ); sett().AddChannelJoin( chan, _T("") ); } return true; } else { wxLogError( _T("Not found: ") + fname ); return false; } } bool ImportTASClientSettings() { wxRegKey base( _T("HKEY_CURRENT_USER\\Software\\TASClient\\Preferences") ); sett().SetAutoConnect( GetRegkeyVal( base, _T("ConnectOnStartup"), (long) sett().GetAutoConnect() ) ); sett().SetChatPMSoundNotificationEnabled( GetRegkeyVal( base, _T("DisableAllSounds"), (long) sett().GetChatPMSoundNotificationEnabled() ) ); sett().SetServerAccountPass( sett().GetDefaultServer(), GetRegkeyVal( base, _T("Password"), sett().GetServerAccountPass( sett().GetDefaultServer() ) ) ); sett().SetServerAccountSavePass( sett().GetDefaultServer() , GetRegkeyVal( base, _T("RememberPasswords"), (long) sett().GetServerAccountSavePass( sett().GetDefaultServer() ) ) ); sett().SetServerAccountNick( sett().GetDefaultServer() , GetRegkeyVal( base, _T("Username"), sett().GetServerAccountNick( sett().GetDefaultServer() ) ) ); bool ret = ImportAutojoins(); sett().SaveSettings(); return ret; } bool TASClientPresent() { return wxRegKey( _T("HKEY_CURRENT_USER\\Software\\TASClient\\Preferences") ).Exists(); } #endif springlobby-0.169/src/Helper/tasclientimport.h0000600000176000000410000000173312105760300023023 0ustar buildbotwww-data00000000000000#ifndef TASCLIENTIMPORT_H #define TASCLIENTIMPORT_H #ifdef __WXMSW__ //! read some basic tasc settings from registry and map them to our setting handler bool ImportTASClientSettings(); //! return true if "HKEY_CURRENT_USER\\Software\\TASClient\\Preferences" exists bool TASClientPresent(); #endif #endif // TASCLIENTIMPORT_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/Helper/wxTranslationHelper.cpp0000600000176000000410000001010412105760300024142 0ustar buildbotwww-data00000000000000#include "wxTranslationHelper.h" #include #include #include #include #include #include #include #include #include "../settings.h" #include "../utils/customdialogs.h" #include "../utils/platform.h" wxTranslationHelper::wxTranslationHelper( wxApp & app, const wxString & search_path ) : m_App(app), m_SearchPath(search_path), m_Locale(NULL), m_UseNativeConfig(false) { if(search_path.IsEmpty()) { m_SearchPath = wxPathOnly(m_App.argv[0]); } } wxTranslationHelper::~wxTranslationHelper() { if(m_Locale) { Save(); wxDELETE(m_Locale); } } wxLocale * wxTranslationHelper::GetLocale() { return m_Locale; } const wxString & wxTranslationHelper::GetSearchPath() const { return m_SearchPath; } void wxTranslationHelper::SetSearchPath( const wxString& value ) { m_SearchPath = value; if( m_SearchPath.IsEmpty() ) { m_SearchPath = wxPathOnly( m_App.argv[0] ); } } bool wxTranslationHelper::Load() { long language = sett().GetLanguageID(); if(language == wxLANGUAGE_UNKNOWN) { return false; } wxArrayString names; wxArrayLong identifiers; int dummy; GetInstalledLanguages( names, identifiers, dummy ); for(size_t i = 0; i < identifiers.Count(); i++) { if( identifiers[i] == language ) { if(m_Locale) wxDELETE( m_Locale ); m_Locale = new wxLocale; m_Locale->Init( identifiers[i] ); m_Locale->AddCatalogLookupPathPrefix( m_SearchPath ); m_Locale->AddCatalog( m_App.GetAppName().Lower() ); m_Locale->AddCatalog( _T("wxstd") ); return true; } } return false; } void wxTranslationHelper::Save() { sett().SetLanguageID( m_Locale->GetLanguage() ); sett().SaveSettings(); } void wxTranslationHelper::GetInstalledLanguages( wxArrayString & names, wxArrayLong & identifiers, int& selected_index ) { names.Clear(); identifiers.Clear(); wxString filename; const wxLanguageInfo * langinfo; wxString name = wxLocale::GetLanguageName( wxLANGUAGE_DEFAULT ); if(!name.IsEmpty()) { names.Add( _("Default") ); identifiers.Add( wxLANGUAGE_DEFAULT ); } if( !wxDir::Exists( m_SearchPath ) ) { wxLogError( _T("Directory %s DOES NOT EXIST !!!"), m_SearchPath.GetData() ); return; } wxDir dir( m_SearchPath ); #ifdef __WXMSW__ wxString mask = wxT("*.*"); #else wxString mask = wxT("*"); #endif selected_index = -1; for(bool cont = dir.GetFirst(&filename, mask, wxDIR_DEFAULT); cont; cont = dir.GetNext( &filename) ) { langinfo = wxLocale::FindLanguageInfo(filename); if(langinfo != NULL) { wxString mo_file = dir.GetName() + wxFileName::GetPathSeparator() + filename + wxFileName::GetPathSeparator() + _T("LC_MESSAGES") + wxFileName::GetPathSeparator() + m_App.GetAppName().Lower() + wxT(".mo") ; wxLogInfo( _("SEARCHING FOR %s"), mo_file.GetData() ); if( wxFileExists( mo_file ) ) { names.Add(langinfo->Description); identifiers.Add(langinfo->Language); if ( langinfo->Language == sett().GetLanguageID() ) selected_index = names.GetCount() -1; } } } } bool wxTranslationHelper::AskUserForLanguage( wxArrayString& names, wxArrayLong& identifiers, int selected_index) { wxCHECK_MSG( names.Count() == identifiers.Count(), false, _("Array of language names and identifiers should have the same size.") ); long index = GetSingleChoiceIndex( _("Select the language"), _("Language"), names, selected_index ); if( index != -1 ) { if( m_Locale ) { wxDELETE( m_Locale ); } m_Locale = new wxLocale; m_Locale->Init( identifiers[index] ); m_Locale->AddCatalogLookupPathPrefix( m_SearchPath ); wxLogInfo( _("wxTranslationHelper: Path Prefix = \"%s\""), m_SearchPath.GetData() ); m_Locale->AddCatalog( GetAppName( true ) ); wxLogInfo( _("wxTranslationHelper: Catalog Name = \"%s\""), GetAppName( true ).c_str() ); return true; } return false; } springlobby-0.169/src/Helper/wxTranslationHelper.h0000600000176000000410000000344512105760300023621 0ustar buildbotwww-data00000000000000#ifndef _WX_TRANSLATION_HELPER_H #define _WX_TRANSLATION_HELPER_H //note: copied from http://wxwidgets.info/?q=wxTranslation // and modified to fit SL needs #include class wxApp; class wxLocale; class wxArrayString; class wxArrayLong; //! manages locale setting/finding with user interface class wxTranslationHelper { public: wxTranslationHelper( wxApp & app, const wxString & search_path ); ~wxTranslationHelper(); wxLocale * GetLocale(); /** \brief put names and ID for all found .mo files \param current_selected will contain the index of currently in settings selected languageID in name/identifiers array, or -1 if notfound */ void GetInstalledLanguages( wxArrayString& names, wxArrayLong& identifiers, int& current_selected ); bool AskUserForLanguage( wxArrayString& names, wxArrayLong& identifiers, int selected_index ); bool Load(); void Save(); const wxString & GetSearchPath() const; void SetSearchPath( const wxString& value ); private: wxApp& m_App; wxString m_SearchPath; wxLocale * m_Locale; bool m_UseNativeConfig; wxTranslationHelper( const wxTranslationHelper& ); }; #endif /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/Helper/wxtextctrlhist.cpp0000600000176000000410000001422312105760300023253 0ustar buildbotwww-data00000000000000// For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif // for all others, include the necessary headers (this file is usually all you // need because it includes almost all "standard" wxWidgets headers) #ifndef WX_PRECOMP #include "wx/wx.h" #endif #include "wxtextctrlhist.h" #include "TextCompletionDatabase.hpp" #include #include "../utils/misc.h" #include "../settings.h" #include "../ui.h" #include "../mainwindow.h" #include "../mainchattab.h" BEGIN_EVENT_TABLE(wxTextCtrlHist, wxTextCtrl) EVT_TEXT_ENTER(wxID_ANY, wxTextCtrlHist::OnSendMessage) EVT_KEY_DOWN(wxTextCtrlHist::OnChar) END_EVENT_TABLE() void GetArrayStringFromHashMap( const HashMap_String_String& hm , wxArrayString& matches ) { for ( HashMap_String_String::const_iterator it = hm.begin(); it != hm.end(); ++it ) matches.Add( it->second ); } wxTextCtrlHist::wxTextCtrlHist(TextCompletionDatabase& textDb, wxWindow* parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, long /*unused*/ ) : wxTextCtrl(parent, id, value, pos, size, wxTE_PROCESS_ENTER | wxTE_PROCESS_TAB ), textcompletiondatabase(textDb), current_pos(0), history_max(32) { } void wxTextCtrlHist::OnSendMessage( wxCommandEvent &event ) { const wxString msg = GetLineText(0); if ( msg != wxEmptyString ) { Historical.Add( msg ); current_pos = Historical.GetCount(); if(current_pos > history_max) { Historical.RemoveAt(0); --current_pos; } } event.Skip(); } void wxTextCtrlHist::OnChar(wxKeyEvent & event) { const int keyCode = event.GetKeyCode(); const int modifier = event.GetModifiers(); if ( current_pos == int(Historical.GetCount()) ) { m_original = GetValue(); } if(keyCode == WXK_UP) { if(current_pos > 0) { --current_pos; SetValue(Historical[current_pos]); SetInsertionPointEnd(); } } else if(keyCode == WXK_DOWN) { if(current_pos < static_cast(Historical.GetCount())-1) { ++current_pos; SetValue(Historical[current_pos]); } else { current_pos = Historical.GetCount(); SetValue( m_original ); SetInsertionPointEnd(); } } else if(keyCode == WXK_TAB ) { if ( ( modifier & wxMOD_CONTROL ) != 0 ){ ui().mw().GetChatTab().AdvanceSelection( ( modifier & wxMOD_SHIFT ) == 0 ); } else { wxString text = this->GetValue(); long pos_Cursor = this->GetInsertionPoint(); wxString selection_Begin_InsertPos = this->GetRange( 0, pos_Cursor ); wxString selection_InsertPos_End = this->GetRange( pos_Cursor, this->GetLastPosition() ); // Search for the shortest Match, starting from the Insertionpoint to the left, until we find a "\ " // Special Characters according to regular Expression Syntax needs to be escaped: [,] wxRegEx regex_currentWord; #ifdef wxHAS_REGEX_ADVANCED regex_currentWord.Compile( wxT("(_|\\[|\\]|\\w)+$"), wxRE_ADVANCED ); #else regex_currentWord.Compile( wxT("(_|\\[|\\]|\\w)+$"), wxRE_EXTENDED ); #endif if ( regex_currentWord.Matches( selection_Begin_InsertPos ) ) { wxString currentWord = regex_currentWord.GetMatch( selection_Begin_InsertPos ); // std::cout << "#########: Current Word: (" << currentWord.char_str() << ")" << std::endl; wxString selection_Begin_BeforeCurrentWord = this->GetRange( 0, pos_Cursor - currentWord.length() ); // std::cout << "#########: selection_Begin_BeforeCurrentWord: (" << selection_Begin_BeforeCurrentWord.char_str() << ")" << std::endl; HashMap_String_String hm = textcompletiondatabase.GetMapping( currentWord ); // std::cout << "#########: Mapping-Size: (" << hm.size() << ")" << std::endl; wxString completed_Text; int new_Cursor_Pos = 0; if( hm.size() == 1 ) { completed_Text.append( selection_Begin_BeforeCurrentWord ); completed_Text.append( hm.begin()->second ); completed_Text.append( selection_InsertPos_End ); new_Cursor_Pos = selection_Begin_BeforeCurrentWord.length() + hm.begin()->second.length(); } else { //match nearest only makes sense when there's actually more than one match if ( hm.size() > 1 && sett().GetCompletionMethod() == Settings::MatchNearest ) { wxArrayString matches; GetArrayStringFromHashMap( hm , matches ); wxString newWord = GetBestMatch( matches, currentWord ); bool realCompletion = newWord.Len() >= currentWord.Len(); // otherwise we have actually less word than before :P if ( realCompletion ) currentWord = newWord; completed_Text.append( selection_Begin_BeforeCurrentWord ); completed_Text.append( currentWord ); completed_Text.append( selection_InsertPos_End ); new_Cursor_Pos = selection_Begin_BeforeCurrentWord.length() + currentWord.length(); // We ring the System Bell, to signalise the User, that no Completion was applied. if (!realCompletion) wxBell(); } else { completed_Text.append( selection_Begin_BeforeCurrentWord ); completed_Text.append( currentWord ); completed_Text.append( selection_InsertPos_End ); new_Cursor_Pos = selection_Begin_BeforeCurrentWord.length() + currentWord.length(); // We ring the System Bell, to signalise the User, that no Completion was applied. wxBell(); } } // Replace the old Text with our completed Text // or // if nothing was found remove the typed TAB, so that the User stays comfortable not to remove the TAB by himself. this->ChangeValue( completed_Text ); this->SetInsertionPoint( new_Cursor_Pos ); } else { wxString old_Text; old_Text.append( selection_Begin_InsertPos ); old_Text.append( selection_InsertPos_End ); this->ChangeValue( old_Text ); this->SetInsertionPoint( selection_Begin_InsertPos.length() ); wxBell(); } } } else event.Skip(); } springlobby-0.169/src/Helper/wxtextctrlhist.h0000600000176000000410000000324112105760300022716 0ustar buildbotwww-data00000000000000#ifndef SL_HEADERGUARD_TEXTHISTCONROL_H #define SL_HEADERGUARD_TEXTHISTCONROL_H #include //copied from http://wxforum.shadonet.com/viewtopic.php?t=7924 (thanks go to Lamego) //modified some (textcompletion,etc) // Extends wxTextCtrl with input historical functions // to allow user to navigate to previously entered messages class TextCompletionDatabase; class wxTextCtrlHist : public wxTextCtrl { public: wxTextCtrlHist(TextCompletionDatabase& textcompletiondatabase, wxWindow* parent, wxWindowID id, const wxString& value = _T(""), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); void SetHistoryMax(int max) { history_max = max; } private: TextCompletionDatabase& textcompletiondatabase; wxString m_original; int current_pos; int history_max; wxArrayString Historical; void OnSendMessage( wxCommandEvent &event ); void OnChar(wxKeyEvent & event); DECLARE_EVENT_TABLE() }; #endif //SL_HEADERGUARD_TEXTHISTCONROL_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/agreementdialog.cpp0000600000176000000410000000363312105760300022046 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: AgreementDialog // #include "agreementdialog.h" #include #include #include #include #include #include "uiutils.h" BEGIN_EVENT_TABLE( AgreementDialog, wxDialog ) EVT_BUTTON ( AGREE_YES, AgreementDialog::OnYes ) EVT_BUTTON ( AGREE_NO, AgreementDialog::OnNo ) END_EVENT_TABLE() AgreementDialog::AgreementDialog( wxWindow* parent, const wxString& agreement ): wxDialog( parent, -1, _( "Accept Agreement" ), wxDefaultPosition, wxDefaultSize ) { SetSizeHints( wxDefaultSize, wxDefaultSize ); wxBoxSizer* m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_text = new wxTextCtrl( this, wxID_ANY, RTFtoText( agreement ), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_RICH | wxTE_WORDWRAP ); m_main_sizer->Add( m_text, 1, wxALL | wxEXPAND, 5 ); m_accept_lbl = new wxStaticText( this, wxID_ANY, _( "Do you accept the terms of this agreement?" ), wxDefaultPosition, wxDefaultSize, 0 ); m_main_sizer->Add( m_accept_lbl, 0, wxALL, 5 ); m_button_sep = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); m_main_sizer->Add( m_button_sep, 0, wxALL | wxEXPAND, 5 ); wxBoxSizer* m_button_sizer = new wxBoxSizer( wxHORIZONTAL ); m_yes_btn = new wxButton( this, AGREE_YES, _( "Yes" ), wxDefaultPosition, wxDefaultSize, 0 ); m_button_sizer->Add( m_yes_btn, 0, wxALL, 5 ); m_button_sizer->Add( 0, 0, 1, wxEXPAND, 0 ); m_no_btn = new wxButton( this, AGREE_NO, _( "No" ), wxDefaultPosition, wxDefaultSize, 0 ); m_button_sizer->Add( m_no_btn, 0, wxALL, 5 ); m_main_sizer->Add( m_button_sizer, 0, wxEXPAND, 5 ); m_no_btn->SetDefault(); SetSizer( m_main_sizer ); Layout(); } void AgreementDialog::OnYes( wxCommandEvent& /*unused*/ ) { EndModal( 1 ); } void AgreementDialog::OnNo( wxCommandEvent& /*unused*/ ) { EndModal( 0 ); } springlobby-0.169/src/agreementdialog.h0000600000176000000410000000267612105760300021521 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_AGREEMENTDIALOG_H #define SPRINGLOBBY_HEADERGUARD_AGREEMENTDIALOG_H #include class wxTextCtrl; class wxStaticText; class wxStaticLine; class wxButton; /** \brief dialog showing agreement on first start/ register that user needs to accept * \todo DOCMEMORE */ class AgreementDialog : public wxDialog { public: AgreementDialog( wxWindow* parent, const wxString& agreement ); void OnYes( wxCommandEvent& event ); void OnNo( wxCommandEvent& event ); protected: wxTextCtrl* m_text; wxStaticText* m_accept_lbl; wxStaticLine* m_button_sep; wxButton* m_yes_btn; wxButton* m_no_btn; enum { AGREE_YES = wxID_HIGHEST, AGREE_NO }; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_AGREEMENTDIALOG_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/aui/CMakeLists.txt0000600000176000000410000000011212105760300021516 0ustar buildbotwww-data00000000000000add_sources(springlobbySrc slbook.cpp auimanager.cpp artprovider.cpp )springlobby-0.169/src/aui/artprovider.cpp0000600000176000000410000005154712105760300022045 0ustar buildbotwww-data00000000000000#include "artprovider.h" #include #include #include #include #include #include #include #include "auiutils.h" #include "../uiutils.h" SLArtProvider::SLArtProvider() { m_normal_font = *wxNORMAL_FONT; m_selected_font = *wxNORMAL_FONT; m_selected_font.SetWeight(wxBOLD); m_measuring_font = m_selected_font; m_fixed_tab_width = 100; m_tab_ctrl_height = 0; #if defined(__WXMAC__) && defined(__WXOSX_CARBON__) wxBrush toolbarbrush; toolbarbrush.MacSetTheme( kThemeBrushToolbarBackground ); wxColour base_colour = toolbarbrush.GetColour(); #else wxColour base_colour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); #endif m_active_colour = base_colour; // the base_colour is too pale to use as our base colour, // so darken it a bit -- if ((255-base_colour.Red()) + (255-base_colour.Green()) + (255-base_colour.Blue()) < 60) { base_colour = wxAuiStepColour(base_colour, 92); } m_base_colour = base_colour; wxColour border_colour = wxAuiStepColour(base_colour, 75); m_border_pen = wxPen(border_colour); m_base_colour_pen = wxPen(m_base_colour); m_base_colour_brush = wxBrush(m_base_colour); m_active_close_bmp = wxAuiBitmapFromBits(close_bits, 16, 16, *wxBLACK); m_disabled_close_bmp = wxAuiBitmapFromBits(close_bits, 16, 16, wxColour(128,128,128)); m_active_left_bmp = wxAuiBitmapFromBits(left_bits, 16, 16, *wxBLACK); m_disabled_left_bmp = wxAuiBitmapFromBits(left_bits, 16, 16, wxColour(128,128,128)); m_active_right_bmp = wxAuiBitmapFromBits(right_bits, 16, 16, *wxBLACK); m_disabled_right_bmp = wxAuiBitmapFromBits(right_bits, 16, 16, wxColour(128,128,128)); m_active_windowlist_bmp = wxAuiBitmapFromBits(list_bits, 16, 16, *wxBLACK); m_disabled_windowlist_bmp = wxAuiBitmapFromBits(list_bits, 16, 16, wxColour(128,128,128)); m_flags = 0; } SLArtProvider::~SLArtProvider() { } wxAuiTabArt* SLArtProvider::Clone() { SLArtProvider* art = new SLArtProvider; art->SetNormalFont(m_normal_font); art->SetSelectedFont(m_selected_font); art->SetMeasuringFont(m_measuring_font); return art; } void SLArtProvider::SetFlags(unsigned int flags) { m_flags = flags; } void SLArtProvider::SetSizingInfo(const wxSize& tab_ctrl_size, size_t tab_count) { m_fixed_tab_width = 100; int tot_width = (int)tab_ctrl_size.x - GetIndentSize() - 4; if (m_flags & wxAUI_NB_CLOSE_BUTTON) tot_width -= m_active_close_bmp.GetWidth(); if (m_flags & wxAUI_NB_WINDOWLIST_BUTTON) tot_width -= m_active_windowlist_bmp.GetWidth(); if (tab_count > 0) { m_fixed_tab_width = tot_width/(int)tab_count; } if (m_fixed_tab_width < 100) m_fixed_tab_width = 100; if (m_fixed_tab_width > tot_width/2) m_fixed_tab_width = tot_width/2; if (m_fixed_tab_width > 220) m_fixed_tab_width = 220; m_tab_ctrl_height = tab_ctrl_size.y; } void SLArtProvider::DrawBackground(wxDC& dc, wxWindow* WXUNUSED(wnd), const wxRect& rect) { // draw background wxColour top_color = wxAuiStepColour(m_base_colour, 90); wxColour bottom_color = wxAuiStepColour(m_base_colour, 170); wxRect r; if (m_flags &wxAUI_NB_BOTTOM) r = wxRect(rect.x, rect.y, rect.width+2, rect.height); // TODO: else if (m_flags &wxAUI_NB_LEFT) {} // TODO: else if (m_flags &wxAUI_NB_RIGHT) {} else //for wxAUI_NB_TOP r = wxRect(rect.x, rect.y, rect.width+2, rect.height-3); dc.GradientFillLinear(r, top_color, bottom_color, wxSOUTH); // draw base lines dc.SetPen(m_border_pen); int y = rect.GetHeight(); int w = rect.GetWidth(); if (m_flags &wxAUI_NB_BOTTOM) { dc.SetBrush(wxBrush(bottom_color)); dc.DrawRectangle(-1, 0, w+2, 4); } // TODO: else if (m_flags &wxAUI_NB_LEFT) {} // TODO: else if (m_flags &wxAUI_NB_RIGHT) {} else //for wxAUI_NB_TOP { dc.SetBrush(m_base_colour_brush); dc.DrawRectangle(-1, y-4, w+2, 4); } } // DrawTab() draws an individual tab. // // dc - output dc // in_rect - rectangle the tab should be confined to // caption - tab's caption // active - whether or not the tab is active // out_rect - actual output rectangle // x_extent - the advance x; where the next tab should start void SLArtProvider::DrawTab(wxDC& dc, wxWindow* wnd, const wxAuiNotebookPage& page, const wxRect& in_rect, int close_button_state, wxRect* out_tab_rect, wxRect* out_button_rect, int* x_extent) { wxCoord normal_textx, normal_texty; wxCoord selected_textx, selected_texty; wxCoord texty; // if the caption is empty, measure some temporary text wxString caption = page.caption; if (caption.empty()) caption = wxT("Xj"); dc.SetFont(m_selected_font); dc.GetTextExtent(caption, &selected_textx, &selected_texty); dc.SetFont(m_normal_font); dc.GetTextExtent(caption, &normal_textx, &normal_texty); // figure out the size of the tab wxSize tab_size = GetTabSize(dc, wnd, page.caption, page.bitmap, page.active, close_button_state, x_extent); wxCoord tab_height = m_tab_ctrl_height - 3; wxCoord tab_width = tab_size.x; wxCoord tab_x = in_rect.x; wxCoord tab_y = in_rect.y + in_rect.height - tab_height; caption = page.caption; // select pen, brush and font for the tab to be drawn if (page.active) { dc.SetFont(m_selected_font); texty = selected_texty; } else { dc.SetFont(m_normal_font); texty = normal_texty; } // create points that will make the tab outline int clip_width = tab_width; if (tab_x + clip_width > in_rect.x + in_rect.width) clip_width = (in_rect.x + in_rect.width) - tab_x; /* wxPoint clip_points[6]; clip_points[0] = wxPoint(tab_x, tab_y+tab_height-3); clip_points[1] = wxPoint(tab_x, tab_y+2); clip_points[2] = wxPoint(tab_x+2, tab_y); clip_points[3] = wxPoint(tab_x+clip_width-1, tab_y); clip_points[4] = wxPoint(tab_x+clip_width+1, tab_y+2); clip_points[5] = wxPoint(tab_x+clip_width+1, tab_y+tab_height-3); // FIXME: these ports don't provide wxRegion ctor from array of points #if !defined(__WXDFB__) && !defined(__WXCOCOA__) // set the clipping region for the tab -- wxRegion clipping_region(WXSIZEOF(clip_points), clip_points); dc.SetClippingRegion(clipping_region); #endif // !wxDFB && !wxCocoa */ // since the above code above doesn't play well with WXDFB or WXCOCOA, // we'll just use a rectangle for the clipping region for now -- dc.SetClippingRegion(tab_x, tab_y, clip_width+1, tab_height-3); wxPoint border_points[6]; if (m_flags &wxAUI_NB_BOTTOM) { border_points[0] = wxPoint(tab_x, tab_y); border_points[1] = wxPoint(tab_x, tab_y+tab_height-6); border_points[2] = wxPoint(tab_x+2, tab_y+tab_height-4); border_points[3] = wxPoint(tab_x+tab_width-2, tab_y+tab_height-4); border_points[4] = wxPoint(tab_x+tab_width, tab_y+tab_height-6); border_points[5] = wxPoint(tab_x+tab_width, tab_y); } else //if (m_flags & wxAUI_NB_TOP) {} { border_points[0] = wxPoint(tab_x, tab_y+tab_height-4); border_points[1] = wxPoint(tab_x, tab_y+2); border_points[2] = wxPoint(tab_x+2, tab_y); border_points[3] = wxPoint(tab_x+tab_width-2, tab_y); border_points[4] = wxPoint(tab_x+tab_width, tab_y+2); border_points[5] = wxPoint(tab_x+tab_width, tab_y+tab_height-4); } // TODO: else if (m_flags &wxAUI_NB_LEFT) {} // TODO: else if (m_flags &wxAUI_NB_RIGHT) {} int drawn_tab_yoff = border_points[1].y; int drawn_tab_height = border_points[0].y - border_points[1].y; if (page.active) { // draw active tab // draw base background color wxRect r(tab_x, tab_y, tab_width, tab_height); dc.SetPen(m_base_colour_pen); dc.SetBrush(m_base_colour_brush); dc.DrawRectangle(r.x+1, r.y+1, r.width-1, r.height-4); // this white helps fill out the gradient at the top of the tab dc.SetPen(*wxWHITE_PEN); dc.SetBrush(*wxWHITE_BRUSH); dc.DrawRectangle(r.x+2, r.y+1, r.width-3, r.height-4); // these two points help the rounded corners appear more antialiased dc.SetPen(m_base_colour_pen); dc.DrawPoint(r.x+2, r.y+1); dc.DrawPoint(r.x+r.width-2, r.y+1); // set rectangle down a bit for gradient drawing r.SetHeight(r.GetHeight()/2); r.x += 2; r.width -= 2; r.y += r.height; r.y -= 2; // draw gradient background wxColour top_color = *wxWHITE; wxColour bottom_color = m_base_colour; dc.GradientFillLinear(r, bottom_color, top_color, wxNORTH); } else { // draw inactive tab wxRect r(tab_x, tab_y+1, tab_width, tab_height-3); // start the gradent up a bit and leave the inside border inset // by a pixel for a 3D look. Only the top half of the inactive // tab will have a slight gradient r.x += 3; r.y++; r.width -= 4; r.height /= 2; r.height--; // -- draw top gradient fill for glossy look wxColour top_color = m_base_colour; wxColour bottom_color = wxAuiStepColour(top_color, 160); dc.GradientFillLinear(r, bottom_color, top_color, wxNORTH); r.y += r.height; r.y--; // -- draw bottom fill for glossy look top_color = m_base_colour; bottom_color = m_base_colour; dc.GradientFillLinear(r, top_color, bottom_color, wxSOUTH); } // draw tab outline dc.SetPen(m_border_pen); dc.SetBrush(*wxTRANSPARENT_BRUSH); dc.DrawPolygon(WXSIZEOF(border_points), border_points); // there are two horizontal grey lines at the bottom of the tab control, // this gets rid of the top one of those lines in the tab control if (page.active) { if (m_flags &wxAUI_NB_BOTTOM) dc.SetPen(wxPen(wxColour(wxAuiStepColour(m_base_colour, 170)))); // TODO: else if (m_flags &wxAUI_NB_LEFT) {} // TODO: else if (m_flags &wxAUI_NB_RIGHT) {} else //for wxAUI_NB_TOP dc.SetPen(m_base_colour_pen); dc.DrawLine(border_points[0].x+1, border_points[0].y, border_points[5].x, border_points[5].y); } int text_offset = tab_x + 8; int close_button_width = 0; if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN) { close_button_width = m_active_close_bmp.GetWidth(); } int bitmap_offset = 0; if (page.bitmap.IsOk()) { bitmap_offset = tab_x + 8; // draw bitmap dc.DrawBitmap(page.bitmap, bitmap_offset, drawn_tab_yoff + (drawn_tab_height/2) - (page.bitmap.GetHeight()/2), true); text_offset = bitmap_offset + page.bitmap.GetWidth(); text_offset += 3; // bitmap padding } else { text_offset = tab_x + 8; } wxString draw_text = wxAuiChopText(dc, caption, tab_width - (text_offset-tab_x) - close_button_width); // draw tab text wxColour fg_color = dc.GetTextForeground( ); if (!page.active ) { wxColour fg_color_new = fg_color; if ( AreColoursSimilar( fg_color, dc.GetTextBackground() , 50 ) ) { fg_color_new = wxColour( ( fg_color.Red() +125 ) % 255 , ( fg_color.Green() +125 ) % 255, ( fg_color.Blue() +125 ) % 255 ); } dc.SetTextForeground( wxAuiLightContrastColour(fg_color_new) ); } dc.DrawText(draw_text, text_offset, drawn_tab_yoff + (drawn_tab_height)/2 - (texty/2) - 1); dc.SetTextForeground( (fg_color) ); // draw close button if necessary if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN) { wxBitmap bmp = m_disabled_close_bmp; if (close_button_state == wxAUI_BUTTON_STATE_HOVER || close_button_state == wxAUI_BUTTON_STATE_PRESSED) { bmp = m_active_close_bmp; } wxRect rect(tab_x + tab_width - close_button_width - 1, tab_y + (tab_height/2) - (bmp.GetHeight()/2), close_button_width, tab_height); IndentPressedBitmap(&rect, close_button_state); dc.DrawBitmap(bmp, rect.x, rect.y, true); *out_button_rect = rect; } *out_tab_rect = wxRect(tab_x, tab_y, tab_width, tab_height); #ifndef __WXMAC__ // draw focus rectangle if (page.active && (wnd->FindFocus() == wnd)) { wxRect focusRectText(text_offset, (drawn_tab_yoff + (drawn_tab_height)/2 - (texty/2) - 1), selected_textx, selected_texty); wxRect focusRect; wxRect focusRectBitmap; if (page.bitmap.IsOk()) focusRectBitmap = wxRect(bitmap_offset, drawn_tab_yoff + (drawn_tab_height/2) - (page.bitmap.GetHeight()/2), page.bitmap.GetWidth(), page.bitmap.GetHeight()); if (page.bitmap.IsOk() && draw_text.IsEmpty()) focusRect = focusRectBitmap; else if (!page.bitmap.IsOk() && !draw_text.IsEmpty()) focusRect = focusRectText; else if (page.bitmap.IsOk() && !draw_text.IsEmpty()) focusRect = focusRectText.Union(focusRectBitmap); focusRect.Inflate(2, 2); DrawFocusRect(wnd, dc, focusRect, 0); } #endif dc.DestroyClippingRegion(); } int SLArtProvider::GetIndentSize() { return 5; } wxSize SLArtProvider::GetTabSize(wxDC& dc, wxWindow* WXUNUSED(wnd), const wxString& caption, const wxBitmap& bitmap, bool WXUNUSED(active), int close_button_state, int* x_extent) { wxCoord measured_textx, measured_texty, tmp; dc.SetFont(m_measuring_font); dc.GetTextExtent(caption, &measured_textx, &measured_texty); dc.GetTextExtent(wxT("ABCDEFXj"), &tmp, &measured_texty); // add padding around the text wxCoord tab_width = measured_textx; wxCoord tab_height = measured_texty; // if the close button is showing, add space for it if (close_button_state != wxAUI_BUTTON_STATE_HIDDEN) tab_width += m_active_close_bmp.GetWidth() + 3; // if there's a bitmap, add space for it if (bitmap.IsOk()) { tab_width += bitmap.GetWidth(); tab_width += 3; // right side bitmap padding tab_height = wxMax(tab_height, bitmap.GetHeight()); } // add padding tab_width += 16; tab_height += 10; if (m_flags & wxAUI_NB_TAB_FIXED_WIDTH) { tab_width = m_fixed_tab_width; } *x_extent = tab_width; return wxSize(tab_width, tab_height); } void SLArtProvider::DrawButton(wxDC& dc, wxWindow* WXUNUSED(wnd), const wxRect& in_rect, int bitmap_id, int button_state, int orientation, wxRect* out_rect) { wxBitmap bmp; wxRect rect; switch (bitmap_id) { case wxAUI_BUTTON_CLOSE: if (button_state & wxAUI_BUTTON_STATE_DISABLED) bmp = m_disabled_close_bmp; else bmp = m_active_close_bmp; break; case wxAUI_BUTTON_LEFT: if (button_state & wxAUI_BUTTON_STATE_DISABLED) bmp = m_disabled_left_bmp; else bmp = m_active_left_bmp; break; case wxAUI_BUTTON_RIGHT: if (button_state & wxAUI_BUTTON_STATE_DISABLED) bmp = m_disabled_right_bmp; else bmp = m_active_right_bmp; break; case wxAUI_BUTTON_WINDOWLIST: if (button_state & wxAUI_BUTTON_STATE_DISABLED) bmp = m_disabled_windowlist_bmp; else bmp = m_active_windowlist_bmp; break; default: break; } if (!bmp.IsOk()) return; rect = in_rect; if (orientation == wxLEFT) { rect.SetX(in_rect.x); rect.SetY(((in_rect.y + in_rect.height)/2) - (bmp.GetHeight()/2)); rect.SetWidth(bmp.GetWidth()); rect.SetHeight(bmp.GetHeight()); } else { rect = wxRect(in_rect.x + in_rect.width - bmp.GetWidth(), ((in_rect.y + in_rect.height)/2) - (bmp.GetHeight()/2), bmp.GetWidth(), bmp.GetHeight()); } IndentPressedBitmap(&rect, button_state); dc.DrawBitmap(bmp, rect.x, rect.y, true); *out_rect = rect; } int SLArtProvider::ShowDropDown(wxWindow* wnd, const wxAuiNotebookPageArray& pages, int active_idx) { wxMenu menuPopup; size_t i, count = pages.GetCount(); for (i = 0; i < count; ++i) { const wxAuiNotebookPage& page = pages.Item(i); wxString caption = page.caption; // if there is no caption, make it a space. This will prevent // an assert in the menu code. if (caption.IsEmpty()) caption = wxT(" "); menuPopup.AppendCheckItem(1000+i, caption); } if (active_idx != -1) { menuPopup.Check(1000+active_idx, true); } // find out where to put the popup menu of window items wxPoint pt = ::wxGetMousePosition(); pt = wnd->ScreenToClient(pt); // find out the screen coordinate at the bottom of the tab ctrl wxRect cli_rect = wnd->GetClientRect(); pt.y = cli_rect.y + cli_rect.height; wxAuiCommandCapture* cc = new wxAuiCommandCapture; wnd->PushEventHandler(cc); wnd->PopupMenu(&menuPopup, pt); int command = cc->GetCommandId(); wnd->PopEventHandler(true); if (command >= 1000) return command-1000; return -1; } int SLArtProvider::GetBestTabCtrlSize(wxWindow* wnd, const wxAuiNotebookPageArray& pages, const wxSize& required_bmp_size) { wxClientDC dc(wnd); dc.SetFont(m_measuring_font); // sometimes a standard bitmap size needs to be enforced, especially // if some tabs have bitmaps and others don't. This is important because // it prevents the tab control from resizing when tabs are added. wxBitmap measure_bmp; if (required_bmp_size.IsFullySpecified()) { measure_bmp.Create(required_bmp_size.x, required_bmp_size.y); } int max_y = 0; size_t i, page_count = pages.GetCount(); for (i = 0; i < page_count; ++i) { wxAuiNotebookPage& page = pages.Item(i); wxBitmap bmp; if (measure_bmp.IsOk()) bmp = measure_bmp; else bmp = page.bitmap; // we don't use the caption text because we don't // want tab heights to be different in the case // of a very short piece of text on one tab and a very // tall piece of text on another tab int x_ext = 0; wxSize s = GetTabSize(dc, wnd, wxT("ABCDEFGHIj"), bmp, true, wxAUI_BUTTON_STATE_HIDDEN, &x_ext); max_y = wxMax(max_y, s.y); } return max_y+2; } void SLArtProvider::SetNormalFont(const wxFont& font) { m_normal_font = font; } void SLArtProvider::SetSelectedFont(const wxFont& font) { m_selected_font = font; } void SLArtProvider::SetMeasuringFont(const wxFont& font) { m_measuring_font = font; } void SLArtProvider::SetColour(const wxColour& colour) { m_base_colour = colour; #ifdef HAVE_WX29 m_border_pen = wxPen(m_base_colour.ChangeLightness(75)); #else //!todo m_border_pen = wxPen(m_base_colour); #endif m_base_colour_pen = wxPen(m_base_colour); m_base_colour_brush = wxBrush(m_base_colour); } void SLArtProvider::SetActiveColour(const wxColour& colour) { m_active_colour = colour; } springlobby-0.169/src/aui/artprovider.h0000600000176000000410000000617512105760300021507 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_ARTPROVIDER_H_INCLUDED #define SPRINGLOBBY_ARTPROVIDER_H_INCLUDED #include class SLArtProvider : public wxAuiTabArt { public: SLArtProvider(); virtual ~SLArtProvider(); wxAuiTabArt* Clone(); void SetFlags(unsigned int flags); void SetSizingInfo(const wxSize& tab_ctrl_size, size_t tab_count); void SetNormalFont(const wxFont& font); void SetSelectedFont(const wxFont& font); void SetMeasuringFont(const wxFont& font); void DrawBackground( wxDC& dc, wxWindow* wnd, const wxRect& rect); void DrawTab(wxDC& dc, wxWindow* wnd, const wxAuiNotebookPage& pane, const wxRect& in_rect, int close_button_state, wxRect* out_tab_rect, wxRect* out_button_rect, int* x_extent); void DrawButton( wxDC& dc, wxWindow* wnd, const wxRect& in_rect, int bitmap_id, int button_state, int orientation, wxRect* out_rect); int GetIndentSize(); wxSize GetTabSize( wxDC& dc, wxWindow* wnd, const wxString& caption, const wxBitmap& bitmap, bool active, int close_button_state, int* x_extent); int ShowDropDown( wxWindow* wnd, const wxAuiNotebookPageArray& items, int active_idx); int GetBestTabCtrlSize(wxWindow* wnd, const wxAuiNotebookPageArray& pages, const wxSize& required_bmp_size); virtual void SetColour(const wxColour& colour); virtual void SetActiveColour(const wxColour& colour); protected: wxFont m_normal_font; wxFont m_selected_font; wxFont m_measuring_font; wxColour m_base_colour; wxColour m_active_colour; wxPen m_base_colour_pen; wxPen m_border_pen; wxBrush m_base_colour_brush; wxBitmap m_active_close_bmp; wxBitmap m_disabled_close_bmp; wxBitmap m_active_left_bmp; wxBitmap m_disabled_left_bmp; wxBitmap m_active_right_bmp; wxBitmap m_disabled_right_bmp; wxBitmap m_active_windowlist_bmp; wxBitmap m_disabled_windowlist_bmp; int m_fixed_tab_width; int m_tab_ctrl_height; unsigned int m_flags; }; #endif // SPRINGLOBBY_ARTPROVIDER_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/aui/auimanager.cpp0000600000176000000410000000037512105760300021606 0ustar buildbotwww-data00000000000000#include "auimanager.h" #include "../globalsmanager.h" AuiManagerContainer& GetAui() { static LineInfo m( AT ); static GlobalObjectHolder > m_aui( m ); return m_aui; } springlobby-0.169/src/aui/auimanager.h0000600000176000000410000000304012105760300021243 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_AUIMANAGER_H #define SPRINGLOBBY_HEADERGUARD_AUIMANAGER_H #include class wxAuiManagerDupe { public: wxAuiManagerDupe(wxWindow* /*managed_wnd*/ = NULL, unsigned int /*flags*/ = 0 ) {} bool AddPane(wxWindow* /*window*/, int /*direction*/ = wxLEFT, const wxString& /*caption */= wxEmptyString) const { return false; } bool DetachPane(wxWindow* /*window*/) const { return false; } void UnInit() const {} wxString SavePerspective() const { return wxEmptyString; } bool LoadPerspective(const wxString& /*perspective*/, bool /*update*/ = true) const { return false; } }; class AuiManagerContainer { public: AuiManagerContainer() : manager(NULL) {} typedef wxAuiManager ManagerType; ManagerType* manager; }; AuiManagerContainer& GetAui(); #endif // SPRINGLOBBY_HEADERGUARD_AUIMANAGER_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/aui/auiutils.h0000600000176000000410000001620712105760300021002 0ustar buildbotwww-data00000000000000#ifndef AUIUITLS_H_INCLUDED #define AUIUITLS_H_INCLUDED #include #include #include #include #ifdef __WXMSW__ #include #endif #if defined(__WXMAC__) && defined(__WXOSX_CARBON__) #include #endif #include static double wxAuiBlendColour(double fg, double bg, double alpha) { double result = bg + (alpha * (fg - bg)); if (result < 0.0) result = 0.0; if (result > 255) result = 255; return result; } // wxAuiStepColour() it a utility function that simply darkens // or lightens a color, based on the specified percentage // ialpha of 0 would be completely black, 100 completely white // an ialpha of 100 returns the same colour static wxColor wxAuiStepColour(const wxColor& c, int ialpha) { if (ialpha == 100) return c; double r = c.Red(), g = c.Green(), b = c.Blue(); double bg; // ialpha is 0..200 where 0 is completely black // and 200 is completely white and 100 is the same // convert that to normal alpha 0.0 - 1.0 ialpha = wxMin(ialpha, 200); ialpha = wxMax(ialpha, 0); double alpha = ((double)(ialpha - 100.0))/100.0; if (ialpha > 100) { // blend with white bg = 255.0; alpha = 1.0 - alpha; // 0 = transparent fg; 1 = opaque fg } else { // blend with black bg = 0.0; alpha = 1.0 + alpha; // 0 = transparent fg; 1 = opaque fg } r = wxAuiBlendColour(r, bg, alpha); g = wxAuiBlendColour(g, bg, alpha); b = wxAuiBlendColour(b, bg, alpha); return wxColour((unsigned char)r, (unsigned char)g, (unsigned char)b); } static wxColor wxAuiLightContrastColour(const wxColour& c) { int amount = 120; // if the color is especially dark, then // make the contrast even lighter if (c.Red() < 128 && c.Green() < 128 && c.Blue() < 128) amount = 160; return wxAuiStepColour(c, amount); } // wxAuiBitmapFromBits() is a utility function that creates a // masked bitmap from raw bits (XBM format) static wxBitmap wxAuiBitmapFromBits(const unsigned char bits[], int w, int h, const wxColour& color) { wxImage img = wxBitmap((const char*)bits, w, h).ConvertToImage(); img.Replace(0,0,0,123,123,123); img.Replace(255,255,255,color.Red(),color.Green(),color.Blue()); img.SetMaskColour(123,123,123); return wxBitmap(img); } // -- bitmaps -- #if defined( __WXMAC__ ) static unsigned char close_bits[]={ 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0x03, 0xF8, 0x01, 0xF0, 0x19, 0xF3, 0xB8, 0xE3, 0xF0, 0xE1, 0xE0, 0xE0, 0xF0, 0xE1, 0xB8, 0xE3, 0x19, 0xF3, 0x01, 0xF0, 0x03, 0xF8, 0x0F, 0xFE, 0xFF, 0xFF }; #elif defined( __WXGTK__) static unsigned char close_bits[]={ 0xff, 0xff, 0xff, 0xff, 0x07, 0xf0, 0xfb, 0xef, 0xdb, 0xed, 0x8b, 0xe8, 0x1b, 0xec, 0x3b, 0xee, 0x1b, 0xec, 0x8b, 0xe8, 0xdb, 0xed, 0xfb, 0xef, 0x07, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; #else static unsigned char close_bits[]={ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xf3, 0xcf, 0xf9, 0x9f, 0xfc, 0x3f, 0xfe, 0x3f, 0xfe, 0x9f, 0xfc, 0xcf, 0xf9, 0xe7, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; #endif static unsigned char left_bits[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xfe, 0x3f, 0xfe, 0x1f, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x3f, 0xfe, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; static unsigned char right_bits[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x9f, 0xff, 0x1f, 0xff, 0x1f, 0xfe, 0x1f, 0xfc, 0x1f, 0xfe, 0x1f, 0xff, 0x9f, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; static unsigned char list_bits[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf8, 0xff, 0xff, 0x0f, 0xf8, 0x1f, 0xfc, 0x3f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; static wxString wxAuiChopText(wxDC& dc, const wxString& text, int max_size) { wxCoord x,y; // first check if the text fits with no problems dc.GetTextExtent(text, &x, &y); if (x <= max_size) return text; size_t i, len = text.Length(); size_t last_good_length = 0; for (i = 0; i < len; ++i) { wxString s = text.Left(i); s += wxT("..."); dc.GetTextExtent(s, &x, &y); if (x > max_size) break; last_good_length = i; } wxString ret = text.Left(last_good_length); ret += wxT("..."); return ret; } static void IndentPressedBitmap(wxRect* rect, int button_state) { if (button_state == wxAUI_BUTTON_STATE_PRESSED) { rect->x++; rect->y++; } } static void DrawFocusRect(wxWindow* win, wxDC& dc, const wxRect& rect, int flags) { #if (defined(__WXMAC__)) #else wxUnusedVar(win); wxUnusedVar(flags); // draw the pixels manually because the "dots" in wxPen with wxDOT style // may be short traits and not really dots // // note that to behave in the same manner as DrawRect(), we must exclude // the bottom and right borders from the rectangle wxCoord x1 = rect.GetLeft(), y1 = rect.GetTop(), x2 = rect.GetRight(), y2 = rect.GetBottom(); dc.SetPen(*wxBLACK_PEN); #ifdef __WXMAC__ dc.SetLogicalFunction(wxCOPY); #else // this seems to be closer than what Windows does than wxINVERT although // I'm still not sure if it's correct dc.SetLogicalFunction(wxAND_REVERSE); #endif wxCoord z; for ( z = x1 + 1; z < x2; z += 2 ) dc.DrawPoint(z, rect.GetTop()); wxCoord shift = z == x2 ? 0 : 1; for ( z = y1 + shift; z < y2; z += 2 ) dc.DrawPoint(x2, z); shift = z == y2 ? 0 : 1; for ( z = x2 - shift; z > x1; z -= 2 ) dc.DrawPoint(z, y2); shift = z == x1 ? 0 : 1; for ( z = y2 - shift; z > y1; z -= 2 ) dc.DrawPoint(x1, z); dc.SetLogicalFunction(wxCOPY); #endif } // -- GUI helper classes and functions -- class wxAuiCommandCapture : public wxEvtHandler { public: wxAuiCommandCapture() { m_last_id = 0; } int GetCommandId() const { return m_last_id; } bool ProcessEvent(wxEvent& evt) { if (evt.GetEventType() == wxEVT_COMMAND_MENU_SELECTED) { m_last_id = evt.GetId(); return true; } if (GetNextHandler()) return GetNextHandler()->ProcessEvent(evt); return false; } private: int m_last_id; }; #endif // AUIUITLS_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/aui/slbook.cpp0000600000176000000410000003351612105760300020771 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include "slbook.h" #include "../settings.h" #include "../chatpanel.h" #include "../chatpanelmenu.h" #include "../ui.h" #include "../mainwindow.h" #include #include static const long ID_CLOSE_TAB = wxNewId(); static const long ID_CLOSE_TAB_OTHER = wxNewId(); static const long ID_CLOSE_TAB_ALL = wxNewId(); static const long ID_NEW_TAB = wxNewId(); SLNotebook ::SLNotebook (wxWindow* parent, const wxString& name, wxWindowID id , const wxPoint& pos , const wxSize& size , long style ) : wxAuiNotebook( parent, id, pos, size, style ) { SetName( name ); m_mgr.SetFlags(wxAUI_MGR_ALLOW_FLOATING | wxAUI_MGR_HINT_FADE | wxAUI_MGR_VENETIAN_BLINDS_HINT ); } // Advances the selection, generation page selection events void SLNotebook::AdvanceSelection(bool forward) { if (GetPageCount() <= 1) return; int currentSelection = GetSelection(); wxAuiTabCtrl* tabCtrl = 0; int idx = -1; if(!FindTab(GetPage(currentSelection), &tabCtrl, &idx)) return; if(!tabCtrl || idx < 0) return; wxWindow* page = 0; size_t maxPages = tabCtrl->GetPageCount(); forward?idx++:idx--; if(idx < 0) idx = maxPages - 1; if ((size_t)idx < maxPages) page = tabCtrl->GetPage(idx).window; if (!page && maxPages > 0) page = tabCtrl->GetPage(0).window; if(page) { currentSelection = GetPageIndex(page); SetSelection(currentSelection); } } BEGIN_EVENT_TABLE( SLChatNotebook, SLNotebook ) EVT_AUINOTEBOOK_TAB_RIGHT_UP ( wxID_ANY, SLChatNotebook::OnHeaderRightClick ) // EVT_AUINOTEBOOK_ALLOW_DND(wxID_ANY, SLChatNotebook::OnAllowNotebookDnD) // EVT_AUINOTEBOOK_BEGIN_DRAG(wxID_ANY, SLChatNotebook::OnAllowNotebookDnD) // EVT_AUINOTEBOOK_DRAG_DONE(wxID_ANY, SLChatNotebook::OnAllowNotebookDnD) // EVT_AUINOTEBOOK_DRAG_MOTION(wxID_ANY, SLChatNotebook::OnAllowNotebookDnD) END_EVENT_TABLE() bool SLChatNotebook::AddPage(ChatPanel* page, const wxString& caption, bool select, const wxBitmap& bitmap) { return ParentType::AddPage((wxWindow*)page, caption, select, bitmap); } /** @brief SLChatNotebook * * @todo: document this function */ SLChatNotebook::SLChatNotebook(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) : ParentType( parent, _T("chatnotebook"), id, pos, size, sett().GetShowXallTabs() ? style | wxAUI_NB_CLOSE_ON_ALL_TABS : style ) ,m_ch_menu(0) ,m_cur_page(0) { } //should work accroding to docs/sample, but doesn't (not even in sample) void SLChatNotebook::OnAllowNotebookDnD(wxAuiNotebookEvent& evt) { evt.Veto(); } /** @brief OnHeaderRightClick * * @todo: document this function */ void SLChatNotebook::OnHeaderRightClick(wxAuiNotebookEvent &event) { if ( event.GetSelection() == -1 ) return; m_cur_page = static_cast( GetPage( event.GetSelection() ) ); wxMenu* pop = new wxMenu; pop->Append( ID_NEW_TAB, _("New Tab") ); pop->Append( ID_CLOSE_TAB, _("Close") ); if ( GetPageCount() > 1) { pop->Append( ID_CLOSE_TAB_ALL, _("Close all chats")); pop->Append( ID_CLOSE_TAB_OTHER, _("Close all other chats")); } m_ch_menu = new ChatPanelMenu( m_cur_page, true ); if ( m_cur_page->GetPanelType() == CPT_User ) { wxMenu* panel_menu = m_ch_menu->GetMenu( ); panel_menu->Remove( panel_menu->FindItem(_( "User" )) ); pop->AppendSubMenu ( panel_menu, _( "Panel" ) ); pop->AppendSubMenu ( m_ch_menu->GetUserMenuNoCreate() , _( "User" )); } else pop->AppendSubMenu ( m_ch_menu->GetMenu() , _( "Channel" )); Connect( wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SLChatNotebook::OnMenuItem ), 0, this ); PopupMenu(pop); } bool SLChatNotebook::DeleteChatPage( size_t i ) { ChatPanel* cur_page = static_cast( GetPage( i ) ); //the checking for server panel is not supposed to be here, but it prevents a nasty crash bug in handling 'close all' for the time being if ( cur_page && !cur_page->IsServerPanel() ) { cur_page->Part(); ParentType::DeletePage( i ); return true; } return false; } void SLChatNotebook::OnMenuItem( wxCommandEvent& event ) { long id = event.GetId(); if ( id == ID_NEW_TAB ) { ui().mw().OnMenuJoin( event ); } else if ( id == ID_CLOSE_TAB ) { DeleteChatPage( GetSelection() ); } else if ( id == ID_CLOSE_TAB_ALL ) { for ( size_t i = 0; i < GetPageCount(); ++i ){ if ( DeleteChatPage( i ) ) i--; } } else if ( id == ID_CLOSE_TAB_OTHER ) { size_t selected = GetSelection(); for ( size_t i = 0; i < GetPageCount(); ++i ){ if ( i == selected ) continue; else { if ( DeleteChatPage( i ) ) { i--; selected--; } } } } else { if ( m_cur_page ) { m_ch_menu->OnMenuItem( event ); } } Disconnect( wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( SLChatNotebook::OnMenuItem ), 0, this ); } // wxTabFrame is an interesting case. It's important that all child pages // of the multi-notebook control are all actually children of that control // (and not grandchildren). wxTabFrame facilitates this. There is one // instance of wxTabFrame for each tab control inside the multi-notebook. // It's important to know that wxTabFrame is not a real window, but it merely // used to capture the dimensions/positioning of the internal tab control and // it's managed page windows class wxTabFrame : public wxWindow { public: wxTabFrame() { m_tabs = NULL; m_rect = wxRect(0,0,200,200); m_tab_ctrl_height = 20; } ~wxTabFrame() { wxDELETE(m_tabs); } void SetTabCtrlHeight(int h) { m_tab_ctrl_height = h; } void DoSetSize(int x, int y, int width, int height, int WXUNUSED(sizeFlags = wxSIZE_AUTO)) { m_rect = wxRect(x, y, width, height); DoSizing(); } void DoGetClientSize(int* x, int* y) const { *x = m_rect.width; *y = m_rect.height; } bool Show( bool WXUNUSED(show = true) ) { return false; } void DoSizing() { if (!m_tabs) return; if (m_tabs->GetFlags() & wxAUI_NB_BOTTOM) { m_tab_rect = wxRect (m_rect.x, m_rect.y + m_rect.height - m_tab_ctrl_height, m_rect.width, m_tab_ctrl_height); m_tabs->SetSize (m_rect.x, m_rect.y + m_rect.height - m_tab_ctrl_height, m_rect.width, m_tab_ctrl_height); m_tabs->SetRect (wxRect(0, 0, m_rect.width, m_tab_ctrl_height)); } else //TODO: if (GetFlags() & wxAUI_NB_TOP) { m_tab_rect = wxRect (m_rect.x, m_rect.y, m_rect.width, m_tab_ctrl_height); m_tabs->SetSize (m_rect.x, m_rect.y, m_rect.width, m_tab_ctrl_height); m_tabs->SetRect (wxRect(0, 0, m_rect.width, m_tab_ctrl_height)); } // TODO: else if (GetFlags() & wxAUI_NB_LEFT){} // TODO: else if (GetFlags() & wxAUI_NB_RIGHT){} m_tabs->Refresh(); m_tabs->Update(); wxAuiNotebookPageArray& pages = m_tabs->GetPages(); size_t i, page_count = pages.GetCount(); for (i = 0; i < page_count; ++i) { wxAuiNotebookPage& page = pages.Item(i); if (m_tabs->GetFlags() & wxAUI_NB_BOTTOM) { page.window->SetSize(m_rect.x, m_rect.y, m_rect.width, m_rect.height - m_tab_ctrl_height); } else //TODO: if (GetFlags() & wxAUI_NB_TOP) { page.window->SetSize(m_rect.x, m_rect.y + m_tab_ctrl_height, m_rect.width, m_rect.height - m_tab_ctrl_height); } // TODO: else if (GetFlags() & wxAUI_NB_LEFT){} // TODO: else if (GetFlags() & wxAUI_NB_RIGHT){} #if wxUSE_MDI if (page.window->IsKindOf(CLASSINFO(wxAuiMDIChildFrame))) { wxAuiMDIChildFrame* wnd = (wxAuiMDIChildFrame*)page.window; wnd->ApplyMDIChildFrameRect(); } #endif } } void DoGetSize(int* x, int* y) const { if (x) *x = m_rect.GetWidth(); if (y) *y = m_rect.GetHeight(); } void Update() { // does nothing } public: wxRect m_rect; wxRect m_tab_rect; wxAuiTabCtrl* m_tabs; int m_tab_ctrl_height; }; wxString SLNotebook::SavePerspective() { // Build list of panes/tabs wxString tabs; wxAuiPaneInfoArray& all_panes = m_mgr.GetAllPanes(); const size_t pane_count = all_panes.GetCount(); for (size_t i = 0; i < pane_count; ++i) { wxAuiPaneInfo& pane = all_panes.Item(i); if (pane.name == wxT("dummy")) continue; wxTabFrame* tabframe = (wxTabFrame*)pane.window; if (!tabs.empty()) tabs += wxT("|"); tabs += pane.name; tabs += wxT("="); // add tab id's size_t page_count = tabframe->m_tabs->GetPageCount(); for (size_t p = 0; p < page_count; ++p) { wxAuiNotebookPage& page = tabframe->m_tabs->GetPage(p); const size_t page_idx = m_tabs.GetIdxFromWindow(page.window); if (p) tabs += wxT(","); if ((int)page_idx == m_curpage) tabs += wxT("*"); else if ((int)p == tabframe->m_tabs->GetActivePage()) tabs += wxT("+"); tabs += (wxFormat(wxT("%u") ) % page_idx).str(); } } tabs += wxT("@"); // Add frame perspective tabs += m_mgr.SavePerspective(); return tabs; } bool SLNotebook::LoadPerspective(const wxString& layout) { // Remove all tab ctrls (but still keep them in main index) const size_t tab_count = m_tabs.GetPageCount(); for (size_t i = 0; i < tab_count; ++i) { wxWindow* wnd = m_tabs.GetWindowFromIdx(i); // find out which onscreen tab ctrl owns this tab wxAuiTabCtrl* ctrl; int ctrl_idx; if (!FindTab(wnd, &ctrl, &ctrl_idx)) return false; // remove the tab from ctrl if (!ctrl->RemovePage(wnd)) return false; } RemoveEmptyTabFrames(); size_t sel_page = 0; wxString tabs = layout.BeforeFirst(wxT('@')); while (1) { const wxString tab_part = tabs.BeforeFirst(wxT('|')); // if the string is empty, we're done parsing if (tab_part.empty()) break; // Get pane name const wxString pane_name = tab_part.BeforeFirst(wxT('=')); // create a new tab frame wxTabFrame* new_tabs = new wxTabFrame; new_tabs->m_tabs = new wxAuiTabCtrl(this, m_tab_id_counter++, wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxWANTS_CHARS); new_tabs->m_tabs->SetArtProvider(m_tabs.GetArtProvider()->Clone()); new_tabs->SetTabCtrlHeight(m_tab_ctrl_height); new_tabs->m_tabs->SetFlags(m_flags); wxAuiTabCtrl *dest_tabs = new_tabs->m_tabs; // create a pane info structure with the information // about where the pane should be added wxAuiPaneInfo pane_info = wxAuiPaneInfo().Name(pane_name).Bottom().CaptionVisible(false); m_mgr.AddPane(new_tabs, pane_info); // Get list of tab id's and move them to pane wxString tab_list = tab_part.AfterFirst(wxT('=')); while(1) { wxString tab = tab_list.BeforeFirst(wxT(',')); if (tab.empty()) break; tab_list = tab_list.AfterFirst(wxT(',')); // Check if this page has an 'active' marker const wxChar c = tab[0]; if (c == wxT('+') || c == wxT('*')) { tab = tab.Mid(1); } const size_t tab_idx = wxAtoi(tab.c_str()); if (tab_idx >= GetPageCount()) continue; // Move tab to pane wxAuiNotebookPage& page = m_tabs.GetPage(tab_idx); const size_t newpage_idx = dest_tabs->GetPageCount(); dest_tabs->InsertPage(page.window, page, newpage_idx); if (c == wxT('+')) dest_tabs->SetActivePage(newpage_idx); else if ( c == wxT('*')) sel_page = tab_idx; } dest_tabs->DoShowHide(); tabs = tabs.AfterFirst(wxT('|')); } // Load the frame perspective const wxString frames = layout.AfterFirst(wxT('@')); m_mgr.LoadPerspective(frames); // Force refresh of selection m_curpage = -1; SetSelection(sel_page); return true; } void SLNotebook::FitChildPages() { for ( size_t i = 0; i < GetPageCount(); ++i) { wxWindow* page = GetPage( i ); if ( page ) page->FitInside(); } } void LoadNotebookPerspective( SLNotebook* notebook, const wxString& perspective_name ) { wxString pers_name = ( perspective_name.IsEmpty() ? sett().GetLastPerspectiveName() : perspective_name ); wxString name = notebook->GetName(); wxString pers = sett().LoadPerspective( name, pers_name ); if ( !pers.IsEmpty() ) { notebook->LoadPerspective( pers ); notebook->Layout(); wxWindow* parent = notebook->GetParent(); #ifdef __WXMSW__ for( size_t i = 0; i < notebook->GetPageCount(); ++i ) { try { wxWindow* tmp = notebook->GetPage( i ); if ( tmp ) { tmp->Layout(); // tmp->Fit(); // tmp->FitInside();//these two seem to be problematic rather than helpful tmp->Refresh(); } wxScrolledWindow* scrollwin = dynamic_cast( notebook->GetPage( i ) ); if ( scrollwin ) { scrollwin->SetScrollRate( 3, 3 ); } } catch (...) {} } notebook->Refresh(); #endif if ( parent ) { parent->Layout(); parent->Refresh(); } } } void SaveNotebookPerspective( SLNotebook* notebook, const wxString& perspective_name ) { wxString pers = ( perspective_name.IsEmpty() ? sett().GetLastPerspectiveName() : perspective_name ); wxString name = notebook->GetName(); sett().SavePerspective( name, pers, notebook->SavePerspective() ); } springlobby-0.169/src/aui/slbook.h0000600000176000000410000000650212105760300020431 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SLBOOK_H #define SPRINGLOBBY_HEADERGUARD_SLBOOK_H #include #include "../utils/mixins.hh" class ChatPanelMenu; /** \brief wxAuiNotebook derived class that allows child page layouts to be saved/loaded at runtime Originally this was just meant as means of setting the aui manager flags to circumvent the crash with compositing enabled: http://trac.wxwidgets.org/ticket/4841 \n The functionality for perspective loading/saving originates from the patch at: http://trac.wxwidgets.org/ticket/10466 **/ class SLNotebook : public wxAuiNotebook { public: SLNotebook (wxWindow* parent, const wxString& name, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxAUI_NB_DEFAULT_STYLE); // wxAuiManager& GetAuiManager() { return m_mgr; } wxString SavePerspective(); bool LoadPerspective(const wxString& layout); void AdvanceSelection( bool forward ); /** \brief call fitinside for each child page useful after loading perspectives, since that does not generate OnSize events \note koshi: turns out it isn't strictly necessary on at least wxGTK **/ void FitChildPages(); }; class ChatPanel; /** \brief SLNotebook derived class that only accepts ChatPanel pages Provides a common context menu for all tab headers that has a the repective Chatpanel's context menu as a submenu **/ class SLChatNotebook : public SLNotebook, public SL::NonCopyable { public: SLChatNotebook (wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxAUI_NB_DEFAULT_STYLE); bool AddPage(ChatPanel* page, const wxString& caption, bool select = false, const wxBitmap& bitmap = wxNullBitmap); void OnHeaderRightClick(wxAuiNotebookEvent &event); void OnMenuItem( wxCommandEvent& event ); void OnAllowNotebookDnD(wxAuiNotebookEvent& evt); protected: typedef SLNotebook ParentType; //prohibit adding other panels bool AddPage(wxWindow* , const wxString& , bool , const wxBitmap& ); bool DeleteChatPage( size_t i ); ChatPanelMenu* m_ch_menu; ChatPanel* m_cur_page; DECLARE_EVENT_TABLE() }; //! Utility function that handles surrounding Layout updates in addition to loading a notebook perspective void LoadNotebookPerspective( SLNotebook* notebook, const wxString& perspective_name ); void SaveNotebookPerspective( SLNotebook* notebook, const wxString& perspective_name ); #endif // SPRINGLOBBY_HEADERGUARD_SLBOOK_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/base64.cpp0000600000176000000410000000722412105760300020003 0ustar buildbotwww-data00000000000000/* * This file is part of the Code::Blocks IDE and licensed under the GNU Lesser General Public License, version 3 * http://www.gnu.org/licenses/lgpl-3.0.html * * $Revision: 4909 $ * $Id: base64.cpp 4909 2008-02-27 13:15:26Z mortenmacfly $ * $HeadURL: svn://svn.berlios.de/codeblocks/tags/8.02/src/sdk/base64.cpp $ */ //********************************************************************* //* Base64 - a simple base64 encoder and decoder. //* //* Copyright (c) 1999, Bob Withers - bwit@pobox.com //* //* This code may be freely used for any purpose, either personal //* or commercial, provided the authors copyright notice remains //* intact. //********************************************************************* // // converted to wxWindows by Frank Bu? // #include "base64.h" #include "defines.h" #ifdef HAVE_WX29 #include "utils/conversion.h" #endif const wxChar fillchar = '='; // 00000000001111111111222222 // 01234567890123456789012345 static wxString cvt = _T("ABCDEFGHIJKLMNOPQRSTUVWXYZ" // 22223333333333444444444455 // 67890123456789012345678901 "abcdefghijklmnopqrstuvwxyz" // 555555556666 // 234567890123 "0123456789+/"); wxString wxBase64::Encode(const wxString& data) { return wxBase64::Encode((const wxUint8*)data.c_str(), data.Len()); } wxString wxBase64::Encode(const wxUint8* pData, size_t len) { size_t c; wxString ret; ret.Alloc(len * 4 / 3 + len * 2); for (size_t i = 0; i < len; ++i) { c = (pData[i] >> 2) & 0x3f; ret.Append(cvt[c], 1); c = (pData[i] << 4) & 0x3f; if (++i < len) c |= (pData[i] >> 4) & 0x0f; ret.Append(cvt[c], 1); if (i < len) { c = (pData[i] << 2) & 0x3f; if (++i < len) c |= (pData[i] >> 6) & 0x03; ret.Append(cvt[c], 1); } else { ++i; ret.Append(fillchar, 1); } if (i < len) { c = pData[i] & 0x3f; ret.Append(cvt[c], 1); } else { ret.Append(fillchar, 1); } } return ret; } std::string wxBase64::Decode(const wxString& data) { int c; int c1; size_t len = data.Len(); std::string ret; ret.reserve(data.length() * 3 / 4); for (size_t i = 0; i < len; ++i) { // TODO: check all Find results for -1 as result of wrong input data for release build c = cvt.find(data[i]); wxASSERT_MSG(c >= 0, _T("invalid base64 input")); ++i; c1 = cvt.find(data[i]); wxASSERT_MSG(c1 >= 0, _T("invalid base64 input")); c = (c << 2) | ((c1 >> 4) & 0x3); ret.push_back(c); if (++i < len) { c = data[i]; if ((char)fillchar == c) break; #ifndef HAVE_WX29 c = cvt.find(c); #else c = cvt.find( TowxString(c) ); #endif wxASSERT_MSG(c >= 0, _T("invalid base64 input")); c1 = ((c1 << 4) & 0xf0) | ((c >> 2) & 0xf); ret.push_back(c1); } if (++i < len) { c1 = data[i]; if ((char)fillchar == c1) break; #ifndef HAVE_WX29 c1 = cvt.find(c1); #else c1 = cvt.find( TowxString(c1) ); #endif wxASSERT_MSG(c1 >= 0, _T("invalid base64 input")); c = ((c << 6) & 0xc0) | c1; ret.push_back(c); } } return ret; } springlobby-0.169/src/base64.h0000600000176000000410000000071412105760300017445 0ustar buildbotwww-data00000000000000/* * This file is part of the Code::Blocks IDE and licensed under the GNU Lesser General Public License, version 3 * http://www.gnu.org/licenses/lgpl-3.0.html */ #ifndef CB_BASE64_H #define CB_BASE64_H #include #include #include namespace wxBase64 { wxString Encode(const wxUint8* pData, size_t len); wxString Encode(const wxString& data); std::string Decode(const wxString& data); } #endif // CB_BASE64_H springlobby-0.169/src/battle.cpp0000600000176000000410000010704412105760300020173 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: Battle // #include "battle.h" #include "ui.h" #include "springunitsync.h" #include "server.h" #include "user.h" #include "utils/misc.h" #include "utils/debug.h" #include "utils/conversion.h" #include #include "utils/uievents.h" #include "utils/battleevents.h" #include "uiutils.h" #include "settings.h" #include "useractions.h" #include "utils/customdialogs.h" #include "springunitsynclib.h" #include "iconimagelist.h" #include "spring.h" #include #include #include #include #include const unsigned int TIMER_INTERVAL = 1000; const unsigned int TIMER_ID = 101; BEGIN_EVENT_TABLE(Battle, wxEvtHandler) EVT_TIMER(TIMER_ID, Battle::OnTimer) END_EVENT_TABLE() Battle::Battle( Server& serv, int id ) : m_serv(serv), m_ah(*this), m_autolock_on_start(false), m_id( id ) { m_opts.battleid = m_id; } Battle::~Battle() { } void Battle::SendHostInfo( HostInfo update ) { m_serv.SendHostInfo( update ); } void Battle::SendHostInfo( const wxString& Tag ) { m_serv.SendHostInfo( Tag ); } void Battle::Update() { BattleEvents::GetBattleEventSender( BattleEvents::BattleInfoUpdate ).SendEvent( std::make_pair(this,wxString()) ); } void Battle::Update( const wxString& Tag ) { BattleEvents::GetBattleEventSender( BattleEvents::BattleInfoUpdate ).SendEvent( std::make_pair(this,Tag) ); } void Battle::Join( const wxString& password ) { m_serv.JoinBattle( m_opts.battleid, password ); m_is_self_in = true; } void Battle::Leave() { m_serv.LeaveBattle( m_opts.battleid ); } void Battle::OnRequestBattleStatus() { UserBattleStatus& bs = m_serv.GetMe().BattleStatus(); bs.team = GetFreeTeam( true ); bs.ally = GetFreeAlly( true ); bs.spectator = false; bs.colour = sett().GetBattleLastColour(); bs.side = sett().GetBattleLastSideSel( GetHostModName() ); // theres some highly annoying bug with color changes on player join/leave. if ( !bs.colour.IsOk() ) bs.colour = GetFreeColour( GetMe() ); SendMyBattleStatus(); } void Battle::SendMyBattleStatus() { UserBattleStatus& bs = m_serv.GetMe().BattleStatus(); if ( IsSynced() ) bs.sync = SYNC_SYNCED; else bs.sync = SYNC_UNSYNCED; m_serv.SendMyBattleStatus( bs ); } void Battle::SetImReady( bool ready ) { UserBattleStatus& bs = m_serv.GetMe().BattleStatus(); bs.ready = ready; //m_serv.GetMe().SetBattleStatus( bs ); SendMyBattleStatus(); } /*bool Battle::HasMod() { return usync().ModExists( m_opts.modname ); }*/ void Battle::Say( const wxString& msg ) { m_serv.SayBattle( m_opts.battleid, msg ); } void Battle::DoAction( const wxString& msg ) { m_serv.DoActionBattle( m_opts.battleid, msg ); } void Battle::SetLocalMap( const UnitSyncMap& map ) { IBattle::SetLocalMap( map ); if ( IsFounderMe() ) LoadMapDefaults( map.name ); } User& Battle::GetMe() { return m_serv.GetMe(); } const User& Battle::GetMe() const { return m_serv.GetMe(); } void Battle::SaveMapDefaults() { // save map preset wxString mapname = LoadMap().name; wxString startpostype = CustomBattleOptions().getSingleValue( _T("startpostype"), OptionsWrapper::EngineOption ); sett().SetMapLastStartPosType( mapname, startpostype); std::vector rects; for( unsigned int i = 0; i <= GetLastRectIdx(); ++i ) { BattleStartRect rect = GetStartRect( i ); if ( rect.IsOk() ) { Settings::SettStartBox box; box.ally = rect.ally; box.topx = rect.left; box.topy = rect.top; box.bottomx = rect.right; box.bottomy = rect.bottom; rects.push_back( box ); } } sett().SetMapLastRectPreset( mapname, rects ); } void Battle::LoadMapDefaults( const wxString& mapname ) { CustomBattleOptions().setSingleOption( _T("startpostype"), sett().GetMapLastStartPosType( mapname ), OptionsWrapper::EngineOption ); SendHostInfo( wxFormat( _T("%d_startpostype") ) % OptionsWrapper::EngineOption ); for( unsigned int i = 0; i <= GetLastRectIdx(); ++i ) if ( GetStartRect( i ).IsOk() ) RemoveStartRect(i); // remove all rects SendHostInfo( IBattle::HI_StartRects ); std::vector savedrects = sett().GetMapLastRectPreset( mapname ); for ( std::vector::const_iterator itor = savedrects.begin(); itor != savedrects.end(); ++itor ) { AddStartRect( itor->ally, itor->topx, itor->topy, itor->bottomx, itor->bottomy ); } SendHostInfo( IBattle::HI_StartRects ); } User& Battle::OnUserAdded( User& user ) { user = IBattle::OnUserAdded( user ); if ( &user == &GetMe() ) { m_timer = new wxTimer(this,TIMER_ID); m_timer->Start( TIMER_INTERVAL ); } user.SetBattle( this ); user.BattleStatus().isfromdemo = false; if ( IsFounderMe() ) { if ( CheckBan( user ) ) return user; if ( ( &user != &GetMe() ) && !user.BattleStatus().IsBot() && ( m_opts.rankneeded != UserStatus::RANK_1 ) && !user.BattleStatus().spectator ) { if ( m_opts.rankneeded > UserStatus::RANK_1 && user.GetStatus().rank < m_opts.rankneeded ) { DoAction( _T("Rank limit autospec: ") + user.GetNick() ); ForceSpectator( user, true ); } else if ( m_opts.rankneeded < UserStatus::RANK_1 && user.GetStatus().rank > ( -m_opts.rankneeded - 1 ) ) { DoAction( _T("Rank limit autospec: ") + user.GetNick() ); ForceSpectator( user, true ); } } m_ah.OnUserAdded( user ); if ( !user.BattleStatus().IsBot() && sett().GetBattleLastAutoAnnounceDescription() ) DoAction( m_opts.description ); } // any code here may be skipped if the user was autokicked return user; } void Battle::OnUserBattleStatusUpdated( User &user, UserBattleStatus status ) { if ( IsFounderMe() ) { if ( ( &user != &GetMe() ) && !status.IsBot() && ( m_opts.rankneeded != UserStatus::RANK_1 ) && !status.spectator ) { if ( m_opts.rankneeded > UserStatus::RANK_1 && user.GetStatus().rank < m_opts.rankneeded ) { DoAction( _T("Rank limit autospec: ") + user.GetNick() ); ForceSpectator( user, true ); } else if ( m_opts.rankneeded < UserStatus::RANK_1 && user.GetStatus().rank > ( -m_opts.rankneeded - 1 ) ) { DoAction( _T("Rank limit autospec: ") + user.GetNick() ); ForceSpectator( user, true ); } } UserBattleStatus previousstatus = user.BattleStatus(); if ( m_opts.lockexternalbalancechanges ) { if ( previousstatus.team != status.team ) { ForceTeam( user, previousstatus.team ); status.team = previousstatus.team; } if ( previousstatus.ally != status.ally ) { ForceAlly( user, previousstatus.ally ); status.ally = previousstatus.ally; } } } IBattle::OnUserBattleStatusUpdated( user, status ); if ( status.handicap != 0 ) { UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( wxString(_T(" ")) , ( _T("Warning: user ") + user.GetNick() + _T(" got bonus ") ) << status.handicap ) ); } if ( IsFounderMe() ) { if ( ShouldAutoStart() ) { if ( sett().GetBattleLastAutoStartState() ) { if ( !spring().IsRunning() ) StartHostedBattle(); } } } if ( !GetMe().BattleStatus().spectator ) SetAutoUnspec(false); // we don't need auto unspec anymore ShouldAutoUnspec(); #ifndef SL_QT_MODE ui().OnUserBattleStatus( *this, user ); #endif } void Battle::OnUserRemoved( User& user ) { m_ah.OnUserRemoved(user); IBattle::OnUserRemoved( user ); ShouldAutoUnspec(); } void Battle::RingNotReadyPlayers() { for (user_map_t::size_type i = 0; i < GetNumUsers(); i++) { User& u = GetUser(i); UserBattleStatus& bs = u.BattleStatus(); if ( bs.IsBot() ) continue; if ( !bs.ready && !bs.spectator ) m_serv.Ring( u.GetNick() ); } } void Battle::RingNotSyncedPlayers() { for (user_map_t::size_type i = 0; i < GetNumUsers(); i++) { User& u = GetUser(i); UserBattleStatus& bs = u.BattleStatus(); if ( bs.IsBot() ) continue; if ( !bs.sync && !bs.spectator ) m_serv.Ring( u.GetNick() ); } } void Battle::RingNotSyncedAndNotReadyPlayers() { for (user_map_t::size_type i = 0; i < GetNumUsers(); i++) { User& u = GetUser(i); UserBattleStatus& bs = u.BattleStatus(); if ( bs.IsBot() ) continue; if ( ( !bs.sync || !bs.ready ) && !bs.spectator ) m_serv.Ring( u.GetNick() ); } } void Battle::RingPlayer( const User& u ) { if ( u.BattleStatus().IsBot() ) return; m_serv.Ring( u.GetNick() ); } bool Battle::ExecuteSayCommand( const wxString& cmd ) { wxString cmd_name=cmd.BeforeFirst(' ').Lower(); if ( cmd_name == _T("/me") ) { m_serv.DoActionBattle( m_opts.battleid, cmd.AfterFirst(' ') ); return true; } if ( cmd_name == _T("/replacehostip") ) { wxString ip = cmd.AfterFirst(' '); if ( ip.IsEmpty() ) return false; m_opts.ip = ip; return true; } //< quick hotfix for bans if (IsFounderMe()) { if ( cmd_name == _T("/ban") ) { wxString nick=cmd.AfterFirst(' '); m_banned_users.insert(nick); try { User& user = GetUser( nick ); m_serv.BattleKickPlayer( m_opts.battleid, user ); } catch( assert_exception ) {} UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( wxString(_T(" ")) , nick+_T(" banned") ) ); //m_serv.DoActionBattle( m_opts.battleid, cmd.AfterFirst(' ') ); return true; } if ( cmd_name == _T("/unban") ) { wxString nick=cmd.AfterFirst(' '); m_banned_users.erase(nick); UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( wxString(_T(" ")) , nick+_T(" unbanned") ) ); //m_serv.DoActionBattle( m_opts.battleid, cmd.AfterFirst(' ') ); return true; } if ( cmd_name == _T("/banlist") ) { UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( wxString(_T(" ")) , _T("banlist:") ) ); for (std::set::const_iterator i=m_banned_users.begin();i!=m_banned_users.end();++i) { UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( wxString(_T(" ")) , *i ) ); } for (std::set::iterator i=m_banned_ips.begin();i!=m_banned_ips.end();++i) { UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( wxString(_T(" ")) , *i ) ); } return true; } if ( cmd_name == _T("/unban") ) { wxString nick=cmd.AfterFirst(' '); m_banned_users.erase(nick); m_banned_ips.erase(nick); UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( wxString(_T(" ")) , nick+_T(" unbanned") ) ); //m_serv.DoActionBattle( m_opts.battleid, cmd.AfterFirst(' ') ); return true; } if ( cmd_name == _T("/ipban") ) { wxString nick=cmd.AfterFirst(' '); m_banned_users.insert(nick); UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( wxString(_T(" ")) , nick+_T(" banned") ) ); if (UserExists(nick)) { User &user=GetUser(nick); if (!user.BattleStatus().ip.empty()) { m_banned_ips.insert(user.BattleStatus().ip); UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( wxString(_T(" ")) , user.BattleStatus().ip+_T(" banned") ) ); } m_serv.BattleKickPlayer( m_opts.battleid, user ); } //m_banned_ips.erase(nick); //m_serv.DoActionBattle( m_opts.battleid, cmd.AfterFirst(' ') ); return true; } } //> return false; } ///< quick hotfix for bans /// returns true if user is banned (and hence has been kicked) bool Battle::CheckBan(User &user) { if (IsFounderMe()) { if (m_banned_users.count(user.GetNick())>0 || useractions().DoActionOnUser(UserActions::ActAutokick, user.GetNick() ) ) { KickPlayer(user); UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( wxString(_T(" ")) , user.GetNick()+_T(" is banned, kicking") ) ); return true; } else if (m_banned_ips.count(user.BattleStatus().ip)>0) { UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( wxString(_T(" ")) , user.BattleStatus().ip+_T(" is banned, kicking") ) ); KickPlayer(user); return true; } } return false; } ///> void Battle::SetAutoLockOnStart( bool value ) { m_autolock_on_start = value; } bool Battle::GetAutoLockOnStart() { return m_autolock_on_start; } void Battle::SetLockExternalBalanceChanges( bool value ) { if ( value ) DoAction( _T("has locked player balance changes") ); else DoAction( _T("has unlocked player balance changes") ); m_opts.lockexternalbalancechanges = value; } bool Battle::GetLockExternalBalanceChanges() { return m_opts.lockexternalbalancechanges; } void Battle::AddBot( const wxString& nick, UserBattleStatus status ) { m_serv.AddBot( m_opts.battleid, nick, status ); } void Battle::ForceSide( User& user, int side ) { m_serv.ForceSide( m_opts.battleid, user, side ); } void Battle::ForceTeam( User& user, int team ) { IBattle::ForceTeam( user, team ); m_serv.ForceTeam( m_opts.battleid, user, team ); } void Battle::ForceAlly( User& user, int ally ) { IBattle::ForceAlly( user, ally ); m_serv.ForceAlly( m_opts.battleid, user, ally ); } void Battle::ForceColour( User& user, const wxColour& col ) { IBattle::ForceColour( user, col ); m_serv.ForceColour( m_opts.battleid, user, col ); } void Battle::ForceSpectator( User& user, bool spectator ) { m_serv.ForceSpectator( m_opts.battleid, user, spectator ); } void Battle::KickPlayer( User& user ) { m_serv.BattleKickPlayer( m_opts.battleid, user ); } void Battle::SetHandicap( User& user, int handicap) { m_serv.SetHandicap ( m_opts.battleid, user, handicap ); } void Battle::ForceUnsyncedToSpectate() { size_t numusers = GetNumUsers(); for ( size_t i = 0; i < numusers; ++i ) { User &user = GetUser(i); UserBattleStatus& bs = user.BattleStatus(); if ( bs.IsBot() ) continue; if ( !bs.spectator && !bs.sync ) ForceSpectator( user, true ); } } void Battle::ForceUnReadyToSpectate() { size_t numusers = GetNumUsers(); for ( size_t i = 0; i < numusers; ++i ) { User &user = GetUser(i); UserBattleStatus& bs = user.BattleStatus(); if ( bs.IsBot() ) continue; if ( !bs.spectator && !bs.ready ) ForceSpectator( user, true ); } } void Battle::ForceUnsyncedAndUnreadyToSpectate() { size_t numusers = GetNumUsers(); for ( size_t i = 0; i < numusers; ++i ) { User &user = GetUser(i); UserBattleStatus& bs = user.BattleStatus(); if ( bs.IsBot() ) continue; if ( !bs.spectator && ( !bs.sync || !bs.ready ) ) ForceSpectator( user, true ); } } void Battle::UserPositionChanged( const User& user ) { m_serv.SendUserPosition( user ); } void Battle::SendScriptToClients() { m_serv.SendScriptToClients( GetScript() ); } void Battle::StartHostedBattle() { if ( UserExists( GetMe().GetNick() ) ) { if ( IsFounderMe() ) { if ( sett().GetBattleLastAutoControlState() ) { FixTeamIDs( (IBattle::BalanceType)sett().GetFixIDMethod(), sett().GetFixIDClans(), sett().GetFixIDStrongClans(), sett().GetFixIDGrouping() ); Autobalance( (IBattle::BalanceType)sett().GetBalanceMethod(), sett().GetBalanceClans(), sett().GetBalanceStrongClans(), sett().GetBalanceGrouping() ); FixColours(); } if ( IsProxy() ) { if ( UserExists( GetProxy() ) && !GetUser(GetProxy()).Status().in_game ) { // DON'T set m_generating_script here, it will trick the script generating code to think we're the host wxString hostscript = spring().WriteScriptTxt( *this ); try { wxString path = sett().GetCurrentUsedDataDir() + wxFileName::GetPathSeparator() + _T("relayhost_script.txt"); if ( !wxFile::Access( path, wxFile::write ) ) { wxLogError( _T("Access denied to script.txt.") ); } wxFile f( path, wxFile::write ); f.Write( hostscript ); f.Close(); } catch (...) {} m_serv.SendScriptToProxy( hostscript ); } } if( GetAutoLockOnStart() ) { SetIsLocked( true ); SendHostInfo( IBattle::HI_Locked ); } sett().SetLastHostMap( GetServer().GetCurrentBattle()->GetHostMapName() ); sett().SaveSettings(); if ( !IsProxy() ) GetServer().StartHostedBattle(); else if ( UserExists( GetProxy() ) && GetUser(GetProxy()).Status().in_game ) // relayhost is already ingame, let's try to join it { StartSpring(); } } } } void Battle::StartSpring() { if ( UserExists( GetMe().GetNick() ) && !GetMe().Status().in_game ) { GetMe().BattleStatus().ready = false; SendMyBattleStatus(); // set m_generating_script, this will make the script.txt writer realize we're just clients even if using a relayhost m_generating_script = true; GetMe().Status().in_game = spring().Run( *this ); m_generating_script = false; GetMe().SendMyUserStatus(); } ui().OnBattleStarted( *this ); } void Battle::OnTimer( wxTimerEvent& ) { if ( !IsFounderMe() ) return; if ( m_ingame ) return; int autospect_trigger_time = sett().GetBattleLastAutoSpectTime(); if ( autospect_trigger_time == 0 ) return; time_t now = time(0); for ( unsigned int i = 0; i < GetNumUsers(); i++) { User& usr = GetUser( i ); UserBattleStatus& status = usr.BattleStatus(); if ( status.IsBot() || status.spectator ) continue; if ( status.sync && status.ready ) continue; if ( &usr == &GetMe() ) continue; std::map::const_iterator itor = m_ready_up_map.find( usr.GetNick() ); if ( itor != m_ready_up_map.end() ) { if ( ( now - itor->second ) > autospect_trigger_time ) { ForceSpectator( usr, true ); } } } } void Battle::SetInGame( bool value ) { time_t now = time(0); if ( m_ingame && !value ) { for ( int i = 0; i < long(GetNumUsers()); i++ ) { User& user = GetUser( i ); UserBattleStatus& status = user.BattleStatus(); if ( status.IsBot() || status.spectator ) continue; if ( status.ready && status.sync ) continue; m_ready_up_map[user.GetNick()] = now; } } IBattle::SetInGame( value ); } void Battle::FixColours() { if ( !IsFounderMe() )return; std::vector &palette = GetFixColoursPalette( m_teams_sizes.size() + 1 ); std::vector palette_use( palette.size(), 0 ); wxColour my_col = GetMe().BattleStatus().colour; // Never changes color of founder (me) :-) int my_diff = 0; int my_col_i = GetClosestFixColour( my_col, palette_use,my_diff ); palette_use[my_col_i]++; std::set parsed_teams; for ( user_map_t::size_type i = 0; i < GetNumUsers(); i++ ) { User &user=GetUser(i); if ( &user == &GetMe() ) continue; // skip founder ( yourself ) UserBattleStatus& status = user.BattleStatus(); if ( status.spectator ) continue; if ( parsed_teams.find( status.team ) != parsed_teams.end() ) continue; // skip duplicates parsed_teams.insert( status.team ); wxColour &user_col=status.colour; int user_col_i=GetClosestFixColour(user_col,palette_use, 60); palette_use[user_col_i]++; for ( user_map_t::size_type j = 0; j < GetNumUsers(); j++ ) { User &usr=GetUser(j); if ( usr.BattleStatus().team == status.team ) { ForceColour( usr, palette[user_col_i]); } } } } bool PlayerRankCompareFunction( User *a, User *b ) // should never operate on nulls. Hence, ASSERT_LOGIC is appropriate here. { ASSERT_LOGIC( a, _T("fail in Autobalance, NULL player") ); ASSERT_LOGIC( b, _T("fail in Autobalance, NULL player") ); return ( a->GetBalanceRank() > b->GetBalanceRank() ); } bool PlayerTeamCompareFunction( User *a, User *b ) // should never operate on nulls. Hence, ASSERT_LOGIC is appropriate here. { ASSERT_LOGIC( a, _T("fail in Autobalance, NULL player") ); ASSERT_LOGIC( b, _T("fail in Autobalance, NULL player") ); return ( a->BattleStatus().team > b->BattleStatus().team ); } struct Alliance { std::vectorplayers; float ranksum; int allynum; Alliance(): ranksum(0), allynum(-1) {} Alliance(int i): ranksum(0), allynum(i) {} void AddPlayer( User *player ) { if ( player ) { players.push_back( player ); ranksum += player->GetBalanceRank(); } } void AddAlliance( Alliance &other ) { for ( std::vector::const_iterator i = other.players.begin(); i != other.players.end(); ++i ) AddPlayer( *i ); } bool operator < ( const Alliance &other ) const { return ranksum < other.ranksum; } }; struct ControlTeam { std::vector players; float ranksum; int teamnum; ControlTeam(): ranksum(0), teamnum(-1) {} ControlTeam( int i ): ranksum(0), teamnum(i) {} void AddPlayer( User *player ) { if ( player ) { players.push_back( player ); ranksum += player->GetBalanceRank(); } } void AddTeam( ControlTeam &other ) { for ( std::vector::const_iterator i = other.players.begin(); i != other.players.end(); ++i ) AddPlayer( *i ); } bool operator < (const ControlTeam &other) const { return ranksum < other.ranksum; } }; int my_random( int range ) { return rand() % range; } void shuffle(std::vector &players) // proper shuffle. { for ( size_t i=0; i < players.size(); ++i ) // the players below i are shuffled, the players above arent { int rn = i + my_random( players.size() - i ); // the top of shuffled part becomes random card from unshuffled part User *tmp = players[i]; players[i] = players[rn]; players[rn] = tmp; } } /* bool ClanRemovalFunction(const std::map::value_type &v){ return v.second.players.size()<2; } */ /* struct ClannersRemovalPredicate{ std::map &clans; PlayerRemovalPredicate(std::map &clans_):clans(clans_) { } bool operator()(User *u) const{ return clans.find(u->GetClan()); } }*/ void Battle::Autobalance( BalanceType balance_type, bool support_clans, bool strong_clans, int numallyteams ) { wxLogMessage(_T("Autobalancing alliances, type=%d, clans=%d, strong_clans=%d, numallyteams=%d"),balance_type, support_clans,strong_clans, numallyteams); //size_t i; //int num_alliances; std::vectoralliances; if ( numallyteams == 0 || numallyteams == -1 ) // 0 or 1 -> use num start rects { int ally = 0; for ( unsigned int i = 0; i < GetNumRects(); ++i ) { BattleStartRect sr = GetStartRect(i); if ( sr.IsOk() ) { ally=i; alliances.push_back( Alliance( ally ) ); ally++; } } // make at least two alliances while ( alliances.size() < 2 ) { alliances.push_back( Alliance( ally ) ); ally++; } } else { for ( int i = 0; i < numallyteams; i++ ) alliances.push_back( Alliance( i ) ); } //for(i=0;i players_sorted; players_sorted.reserve( GetNumUsers() ); for ( size_t i = 0; i < GetNumUsers(); ++i ) { User& usr = GetUser( i ); if ( !usr.BattleStatus().spectator ) { players_sorted.push_back( &usr ); } } // remove players in the same team so only one remains std::map< int, User*> dedupe_teams; for ( std::vector::const_iterator it = players_sorted.begin(); it != players_sorted.end(); ++it ) { dedupe_teams[(*it)->BattleStatus().team] = *it; } players_sorted.clear(); players_sorted.reserve( dedupe_teams.size() ); for ( std::map::const_iterator it = dedupe_teams.begin(); it != dedupe_teams.end(); ++it ) { players_sorted.push_back( it->second ); } shuffle( players_sorted ); std::map clan_alliances; if ( support_clans ) { for ( size_t i=0; i < players_sorted.size(); ++i ) { wxString clan = players_sorted[i]->GetClan(); if ( !clan.empty() ) { clan_alliances[clan].AddPlayer( players_sorted[i] ); } } }; if ( balance_type != balance_random ) std::sort( players_sorted.begin(), players_sorted.end(), PlayerRankCompareFunction ); if ( support_clans ) { std::map::iterator clan_it = clan_alliances.begin(); while ( clan_it != clan_alliances.end() ) { Alliance &clan = (*clan_it).second; // if clan is too small (only 1 clan member in battle) or too big, dont count it as clan if ( ( clan.players.size() < 2 ) || ( !strong_clans && ( clan.players.size() > ( ( players_sorted.size() + alliances.size() -1 ) / alliances.size() ) ) ) ) { wxLogMessage( _T("removing clan %s"), (*clan_it).first.c_str() ); std::map::iterator next = clan_it; ++next; clan_alliances.erase( clan_it ); clan_it = next; continue; } wxLogMessage( _T("Inserting clan %s"), (*clan_it).first.c_str() ); std::sort( alliances.begin(), alliances.end() ); float lowestrank = alliances[0].ranksum; int rnd_k = 1;// number of alliances with rank equal to lowestrank while ( size_t( rnd_k ) < alliances.size() ) { if ( fabs( alliances[rnd_k].ranksum - lowestrank ) > 0.01 ) break; rnd_k++; } wxLogMessage( _T("number of lowestrank alliances with same rank=%d"), rnd_k ); alliances[my_random( rnd_k )].AddAlliance( clan ); ++clan_it; } } for ( size_t i = 0; i < players_sorted.size(); ++i ) { // skip clanners, those have been added already. if ( clan_alliances.count( players_sorted[i]->GetClan() ) > 0 ) { wxLogMessage( _T("clanner already added, nick=%s"), players_sorted[i]->GetNick().c_str() ); continue; } // find alliances with lowest ranksum // insert current user into random one out of them // since performance doesnt matter here, i simply sort alliances, // then find how many alliances in beginning have lowest ranksum // note that balance player ranks range from 1 to 1.1 now // i.e. them are quasi equal // so we're essentially adding to alliance with smallest number of players, // the one with smallest ranksum. std::sort( alliances.begin(), alliances.end() ); float lowestrank = alliances[0].ranksum; int rnd_k = 1;// number of alliances with rank equal to lowestrank while ( size_t( rnd_k ) < alliances.size() ) { if ( fabs( alliances[rnd_k].ranksum - lowestrank ) > 0.01 ) break; rnd_k++; } wxLogMessage( _T("number of lowestrank alliances with same rank=%d"), rnd_k ); alliances[my_random( rnd_k )].AddPlayer( players_sorted[i] ); } UserList::user_map_t::size_type totalplayers = GetNumUsers(); for ( size_t i = 0; i < alliances.size(); ++i ) { for ( size_t j = 0; j < alliances[i].players.size(); ++j ) { ASSERT_LOGIC( alliances[i].players[j], _T("fail in Autobalance, NULL player") ); int balanceteam = alliances[i].players[j]->BattleStatus().team; wxLogMessage( _T("setting team %d to alliance %d"), balanceteam, i ); for ( size_t h = 0; h < totalplayers; h++ ) // change ally num of all players in the team { User& usr = GetUser( h ); if ( usr.BattleStatus().team == balanceteam ) ForceAlly( usr, alliances[i].allynum ); } } } } void Battle::FixTeamIDs( BalanceType balance_type, bool support_clans, bool strong_clans, int numcontrolteams ) { wxLogMessage(_T("Autobalancing teams, type=%d, clans=%d, strong_clans=%d, numcontrolteams=%d"),balance_type, support_clans, strong_clans, numcontrolteams); //size_t i; //int num_alliances; std::vector control_teams; if ( numcontrolteams == 0 || numcontrolteams == -1 ) numcontrolteams = GetNumUsers() - GetSpectators(); // 0 or -1 -> use num players, will use comshare only if no available team slots IBattle::StartType position_type = (IBattle::StartType)s2l( CustomBattleOptions().getSingleValue( _T("startpostype"), OptionsWrapper::EngineOption ) ); if ( ( position_type == ST_Fixed ) || ( position_type == ST_Random ) ) // if fixed start pos type or random, use max teams = start pos count { try { int mapposcount = LoadMap().info.positions.size(); numcontrolteams = std::min( numcontrolteams, mapposcount ); } catch( assert_exception ) {} } if ( numcontrolteams >= (int)( GetNumUsers() - GetSpectators() ) ) // autobalance behaves weird when trying to put one player per team and i CBA to fix it, so i'll reuse the old code :P { // apparently tasserver doesnt like when i fix/force ids of everyone. std::set allteams; size_t numusers = GetNumUsers(); for( size_t i = 0; i < numusers; ++i ) { User &user = GetUser(i); if( !user.BattleStatus().spectator ) allteams.insert( user.BattleStatus().team ); } std::set teams; int t = 0; for( size_t i = 0; i < GetNumUsers(); ++i ) { User &user = GetUser(i); if( !user.BattleStatus().spectator ) { if( teams.count( user.BattleStatus().team ) ) { while( allteams.count(t) || teams.count( t ) ) t++; ForceTeam( GetUser(i), t ); teams.insert( t ); } else { teams.insert( user.BattleStatus().team ); } } } return; } for ( int i = 0; i < numcontrolteams; i++ ) control_teams.push_back( ControlTeam( i ) ); wxLogMessage(_T("number of teams: %u"), control_teams.size() ); std::vector players_sorted; players_sorted.reserve( GetNumUsers() ); int player_team_counter = 0; for ( size_t i = 0; i < GetNumUsers(); ++i ) // don't count spectators { if ( !GetUser(i).BattleStatus().spectator ) { players_sorted.push_back( &GetUser(i) ); // -- server fail? it doesnt work right. //ForceTeam(GetUser(i),player_team_counter); player_team_counter++; } } shuffle( players_sorted ); std::map clan_teams; if ( support_clans ) { for ( size_t i = 0; i < players_sorted.size(); ++i ) { wxString clan = players_sorted[i]->GetClan(); if ( !clan.empty() ) { clan_teams[clan].AddPlayer( players_sorted[i] ); } } }; if ( balance_type != balance_random ) std::sort( players_sorted.begin(), players_sorted.end(), PlayerRankCompareFunction ); if ( support_clans ) { std::map::iterator clan_it = clan_teams.begin(); while ( clan_it != clan_teams.end() ) { ControlTeam &clan = (*clan_it).second; // if clan is too small (only 1 clan member in battle) or too big, dont count it as clan if ( ( clan.players.size() < 2 ) || ( !strong_clans && ( clan.players.size() > ( ( players_sorted.size() + control_teams.size() -1 ) / control_teams.size() ) ) ) ) { wxLogMessage(_T("removing clan %s"),(*clan_it).first.c_str()); std::map::iterator next = clan_it; ++next; clan_teams.erase( clan_it ); clan_it = next; continue; } wxLogMessage( _T("Inserting clan %s"), (*clan_it).first.c_str() ); std::sort( control_teams.begin(), control_teams.end() ); float lowestrank = control_teams[0].ranksum; int rnd_k = 1; // number of alliances with rank equal to lowestrank while ( size_t( rnd_k ) < control_teams.size() ) { if ( fabs( control_teams[rnd_k].ranksum - lowestrank ) > 0.01 ) break; rnd_k++; } wxLogMessage(_T("number of lowestrank teams with same rank=%d"), rnd_k ); control_teams[my_random( rnd_k )].AddTeam( clan ); ++clan_it; } } for (size_t i = 0; i < players_sorted.size(); ++i ) { // skip clanners, those have been added already. if ( clan_teams.count( players_sorted[i]->GetClan() ) > 0 ) { wxLogMessage( _T("clanner already added, nick=%s"),players_sorted[i]->GetNick().c_str() ); continue; } // find teams with lowest ranksum // insert current user into random one out of them // since performance doesnt matter here, i simply sort teams, // then find how many teams in beginning have lowest ranksum // note that balance player ranks range from 1 to 1.1 now // i.e. them are quasi equal // so we're essentially adding to teams with smallest number of players, // the one with smallest ranksum. std::sort( control_teams.begin(), control_teams.end() ); float lowestrank = control_teams[0].ranksum; int rnd_k = 1; // number of alliances with rank equal to lowestrank while ( size_t( rnd_k ) < control_teams.size() ) { if ( fabs ( control_teams[rnd_k].ranksum - lowestrank ) > 0.01 ) break; rnd_k++; } wxLogMessage( _T("number of lowestrank teams with same rank=%d"), rnd_k ); control_teams[my_random( rnd_k )].AddPlayer( players_sorted[i] ); } for ( size_t i=0; i < control_teams.size(); ++i ) { for ( size_t j = 0; j < control_teams[i].players.size(); ++j ) { ASSERT_LOGIC( control_teams[i].players[j], _T("fail in Autobalance teams, NULL player") ); wxString msg = wxFormat( _T("setting player %s to team and ally %d") ) % control_teams[i].players[j]->GetNick() % i; wxLogMessage( _T("%s"), msg.c_str() ); ForceTeam( *control_teams[i].players[j], control_teams[i].teamnum ); ForceAlly( *control_teams[i].players[j], control_teams[i].teamnum ); } } } void Battle::OnUnitsyncReloaded( GlobalEvents::GlobalEventData data ) { IBattle::OnUnitsyncReloaded( data ); if ( m_is_self_in ) SendMyBattleStatus(); } void Battle::ShouldAutoUnspec() { if ( m_auto_unspec && !IsLocked() && GetMe().BattleStatus().spectator ) { if ( GetNumActivePlayers() < m_opts.maxplayers ) { ForceSpectator(GetMe(),false); } } } void Battle::SetAutoUnspec(bool value) { m_auto_unspec = value; ShouldAutoUnspec(); } springlobby-0.169/src/battle.h0000600000176000000410000000753512105760300017644 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_BATTLE_H #define SPRINGLOBBY_HEADERGUARD_BATTLE_H #include #include "hosting/autohost.h" #include "ibattle.h" class Ui; class Server; class User; class wxTimerEvent; /** \brief model of a sp/mp battle * \todo DOCME */ class Battle : public IBattle { public: Battle( Server& serv, int id ); ~Battle(); //const BattleOptions& opts() { return m_opts; } Server& GetServer() { return m_serv; } AutoHost& GetAutoHost() { return m_ah; } void SendHostInfo( HostInfo update ); void SendHostInfo( const wxString& Tag ); void Update(); void Update( const wxString& Tag ); void Join( const wxString& password = _T("") ); void Leave(); void KickPlayer( User& user ); void RingNotReadyPlayers(); void RingNotSyncedPlayers(); void RingNotSyncedAndNotReadyPlayers(); void RingPlayer( const User& u ); void Say( const wxString& msg ); void DoAction( const wxString& msg ); void SetLocalMap( const UnitSyncMap& map ); void OnRequestBattleStatus(); void SendMyBattleStatus(); bool ExecuteSayCommand( const wxString& cmd ); void AddBot( const wxString& nick, UserBattleStatus status ); void ForceSide( User& user, int side ); void ForceTeam( User& user, int team ); void ForceAlly( User& user, int ally ); void ForceColour( User& user, const wxColour& col ); void ForceSpectator( User& user, bool spectator ); void BattleKickPlayer( User& user ); void SetHandicap( User& user, int handicap); User& OnUserAdded( User& user ); void OnUserBattleStatusUpdated( User &user, UserBattleStatus status ); void OnUserRemoved( User& user ); void ForceUnsyncedToSpectate(); void ForceUnReadyToSpectate(); void ForceUnsyncedAndUnreadyToSpectate(); void SetAutoLockOnStart( bool value ); bool GetAutoLockOnStart(); void SetLockExternalBalanceChanges( bool value ); bool GetLockExternalBalanceChanges(); void FixColours(); void Autobalance( BalanceType balance_type = balance_divide, bool clans = true, bool strong_clans = true, int allyteamsize = 0 ); void FixTeamIDs( BalanceType balance_type = balance_divide, bool clans = true, bool strong_clans = true, int controlteamsize = 0 ); void SendScriptToClients(); ///< quick hotfix for bans bool CheckBan(User &user); ///> void SetImReady( bool ready ); User& GetMe(); const User& GetMe() const; void UserPositionChanged( const User& user ); int GetID() const { return m_id; } void SaveMapDefaults(); void LoadMapDefaults( const wxString& mapname ); void StartHostedBattle(); void StartSpring(); void OnTimer( wxTimerEvent& /*event*/ ); void SetInGame( bool ingame ); void OnUnitsyncReloaded( GlobalEvents::GlobalEventData data ); void SetAutoUnspec(bool value); bool GetAutoUnspec() { return m_auto_unspec; } void ShouldAutoUnspec(); protected: // Battle variables ///< quick hotfix for bans std::set m_banned_users; std::set m_banned_ips; ///> Server& m_serv; AutoHost m_ah; bool m_autolock_on_start; const int m_id; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_BATTLE_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/battlelist/CMakeLists.txt0000600000176000000410000000015112105760300023112 0ustar buildbotwww-data00000000000000add_sources(springlobbySrc battlelist.cpp battlelistctrl.cpp battlelistfilter.cpp battlelisttab.cpp )springlobby-0.169/src/battlelist/battlelist.cpp0000600000176000000410000000311212105760300023225 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include #include "battlelist.h" #include "battle.h" BattleList::BattleList() { } void BattleList::AddBattle( Battle& battle ) { m_battles[battle.GetBattleId()] = &battle; } void BattleList::RemoveBattle( battle_id_t const& id ) { m_battles.erase(id); } /* Battle& BattleList::GetFirstBattle() { return *m_battles.begin()->second; } */ BattleList::battle_map_t::size_type BattleList_Iter::GetNumBattles() const { return (m_battlelist)?(m_battlelist->m_battles.size()):0; } void BattleList_Iter::IteratorBegin() { if (m_battlelist) m_iterator = m_battlelist->m_battles.begin(); } Battle* BattleList_Iter::GetBattle() { Battle* battle = m_iterator->second; if ( m_battlelist && m_iterator != m_battlelist->m_battles.end() ) ++m_iterator; return battle; } bool BattleList_Iter::EOL() const { return ( m_battlelist && m_iterator == m_battlelist->m_battles.end() )?true:false; } Battle& BattleList_Iter::GetBattle( BattleList::battle_id_t const& id ) { if (!m_battlelist) throw std::logic_error("BattleList_Iter::GetBattle(): no battlelist"); BattleList::battle_iter_t b = m_battlelist->m_battles.find(id); if (b == m_battlelist->m_battles.end()) throw std::runtime_error("BattleList_Iter::GetBattle(): no such battle"); return *b->second; } bool BattleList_Iter::BattleExists( BattleList::battle_id_t const& id ) { if (!m_battlelist) throw std::logic_error("BattleList_Iter::BattleExists(): no battlelist"); return m_battlelist->m_battles.find(id) != m_battlelist->m_battles.end(); } springlobby-0.169/src/battlelist/battlelist.h0000600000176000000410000000373412105760300022704 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_BATTLELIST_H #define SPRINGLOBBY_HEADERGUARD_BATTLELIST_H #include #include "utils/mixins.hh" class Battle; /** \brief encapsulates a map */ class BattleList { friend class BattleList_Iter; public: BattleList(); typedef unsigned int battle_id_t; void AddBattle( Battle& battle ); void RemoveBattle( battle_id_t const& id ); //! @brief mapping from battle id number to battle object typedef std::map battle_map_t; //! @brief iterator for battle map typedef battle_map_t::iterator battle_iter_t; private: battle_map_t m_battles; }; /** BattleList_Iter gives us the posibility to get Battles out of the list without the rights to change the list */ class BattleList_Iter : public SL::NonCopyable { public: BattleList_Iter(BattleList* battlelist) : m_battlelist( battlelist ) {} ~BattleList_Iter() {} void IteratorBegin(); Battle* GetBattle(); bool EOL() const; Battle& GetBattle( BattleList::battle_id_t const& id ); //Battle& GetFirstBattle(); bool BattleExists( BattleList::battle_id_t const& id ); BattleList::battle_map_t::size_type GetNumBattles() const; private: BattleList::battle_iter_t m_iterator; BattleList* m_battlelist; }; #endif // SPRINGLOBBY_HEADERGUARD_BATTLELIST_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/battlelist/battlelistctrl.cpp0000600000176000000410000003000012105760300024106 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include "battlelistctrl.h" #include #include #include "user.h" #include "iconimagelist.h" #include "battle.h" #include "uiutils.h" #include "ui.h" #include "server.h" #include "countrycodes.h" #include "settings.h" #include "utils/customdialogs.h" #include "useractions.h" #include "Helper/sortutil.h" #include "aui/auimanager.h" template<> SortOrder CustomVirtListCtrl::m_sortorder = SortOrder(); BEGIN_EVENT_TABLE(BattleListCtrl, BattleListCtrl::BaseType ) EVT_LIST_ITEM_RIGHT_CLICK( BLIST_LIST, BattleListCtrl::OnListRightClick ) EVT_MENU ( BLIST_DLMAP, BattleListCtrl::OnDLMap ) EVT_MENU ( BLIST_DLMOD, BattleListCtrl::OnDLMod ) #if wxUSE_TIPWINDOW #if !defined(__WXMSW__) /* && !defined(__WXMAC__) */ //disables tooltips on msw /* and mac */ EVT_MOTION(BattleListCtrl::OnMouseMotion) #endif #endif END_EVENT_TABLE() BattleListCtrl::BattleListCtrl( wxWindow* parent ) : CustomVirtListCtrl< IBattle *,BattleListCtrl>(parent, BLIST_LIST, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER | wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_ALIGN_LEFT, _T("BattleListCtrl"), 4, &BattleListCtrl::CompareOneCrit, true /*highlight*/, UserActions::ActHighlight, true /*periodic sort*/ ), m_popup( 0 ) { GetAui().manager->AddPane( this, wxLEFT, _T("battlelistctrl") ); const int hd = wxLIST_AUTOSIZE_USEHEADER; #if defined(__WXMAC__) /// on mac, autosize does not work at all const int widths[11] = {20,20,20,170,140,130,110,28,28,28,30}; #else const int widths[11] = {hd,hd,hd,170,140,130,110,hd,hd,hd,hd}; #endif AddColumn( 0, widths[0], _("Status"), _("Status") ); AddColumn( 1, widths[1], _("Country"), _("Country") ); AddColumn( 2, widths[2], _("Rank"), _("Minimum rank to join") ); AddColumn( 3, widths[3], _("Description"), _("Battle description") ); AddColumn( 4, widths[4], _("Map"), _("Mapname") ); AddColumn( 5, widths[5], _("Game"), _("Gamename") ); AddColumn( 6, widths[6], _("Host"), _("Name of the Host") ); AddColumn( 7, widths[7], _("Spectators"), _("Number of Spectators") ); AddColumn( 8, widths[8], _("Players"), _("Number of Players joined") ); AddColumn( 9, widths[9], _("Max"), _("Maximum number of Players that can join") ); AddColumn( 10, widths[10], _("Running"), _("How long the game has been running for") ); if ( m_sortorder.size() == 0 ) { m_sortorder[0].col = 0; m_sortorder[0].direction = true; m_sortorder[1].col = 5; m_sortorder[1].direction = true; m_sortorder[2].col = 9; m_sortorder[2].direction = true; m_sortorder[3].col = 4; m_sortorder[3].direction = true; } } BattleListCtrl::~BattleListCtrl() { delete m_popup; } wxString BattleListCtrl::GetItemText(long item, long column) const { if ( m_data[item] == NULL ) return wxEmptyString; const IBattle& battle= *m_data[item]; const BattleOptions& opts = battle.GetBattleOptions(); switch ( column ) { case 0: case 1: case 2: default: return wxEmptyString; case 3: return ( opts.description ); case 4: return ( battle.GetHostMapName() ); case 5: return ( battle.GetHostModName() ); case 6: return ( opts.founder ); case 7: return wxFormat(_T("%d") ) % int(battle.GetSpectators()); case 8: return wxFormat(_T("%d") ) % (int(battle.GetNumUsers()) - int(battle.GetSpectators())); case 9: return wxFormat(_T("%d") ) % int(battle.GetMaxPlayers()); case 10: return ( wxTimeSpan(0/*h*/,0/*m*/, battle.GetBattleRunningTime()).Format(_T("%H:%M")) ); } } int BattleListCtrl::GetItemImage(long item) const { if ( m_data[item] == NULL ) return -1; return icons().GetBattleStatusIcon( *m_data[item] ); } int BattleListCtrl::GetItemColumnImage(long item, long column) const { if ( m_data[item] == NULL ) return -1; const IBattle& battle= *m_data[item]; switch ( column ) { default: return -1; case 0: return icons().GetBattleStatusIcon( battle ); case 1: { try { return icons().GetFlagIcon( battle.GetFounder().GetCountry() ); }catch(...){} break; } case 2: return icons().GetRankLimitIcon( battle.GetRankNeeded(), false ); case 4: return battle.MapExists() ? icons().ICON_EXISTS : icons().ICON_NEXISTS; case 5: return battle.ModExists() ? icons().ICON_EXISTS : icons().ICON_NEXISTS; } return -1; // simply to avoid compiler warning } wxListItemAttr* BattleListCtrl::GetItemAttr(long item) const { if ( item < (long)m_data.size() && item > -1 ) { const IBattle& b = *m_data[item]; try { wxString host = b.GetFounder().GetNick(); wxListItemAttr* attr = HighlightItemUser( host ); if ( attr != NULL ) return attr; //to avoid color flicker check first if highlighting should be done //and return if it should for ( unsigned int i = 0; i < b.GetNumUsers(); ++i){ wxString name = b.GetUser(i).GetNick(); attr = HighlightItemUser( name ); if ( attr != NULL ) return attr; } }catch(...){} } return NULL; } void BattleListCtrl::AddBattle( IBattle& battle ) { if ( AddItem( &battle ) ) return; wxLogWarning( _T("Battle already in list.") ); } void BattleListCtrl::RemoveBattle( IBattle& battle ) { if ( RemoveItem( &battle ) ) return; wxLogError( _T("Didn't find the battle to remove.") ); } void BattleListCtrl::UpdateBattle( IBattle& battle ) { int index = GetIndexFromData( &battle ); RefreshItem( index ); MarkDirtySort(); } void BattleListCtrl::OnListRightClick( wxListEvent& event ) { int idx = event.GetIndex(); if ( idx < (long)m_data.size() && idx > -1 ) { DataType dt = m_data[idx]; bool mod_missing = !dt->ModExists(); bool map_missing = !dt->MapExists(); m_popup = new wxMenu( _T("") ); // &m enables shortcout "alt + m" and underlines m if ( map_missing ) m_popup->Append( BLIST_DLMAP, _("Download &map") ); if ( mod_missing ) m_popup->Append( BLIST_DLMOD, _("Download &game") ); if ( map_missing || mod_missing ) PopupMenu( m_popup ); } } void BattleListCtrl::OnDLMap( wxCommandEvent& /*unused*/ ) { if ( m_selected_index > 0 && (long)m_data.size() > m_selected_index ) { DataType dt = m_data[m_selected_index]; ui().DownloadMap( dt->GetHostMapHash(), dt->GetHostMapName() ); } } void BattleListCtrl::OnDLMod( wxCommandEvent& /*unused*/ ) { if ( m_selected_index > 0 && (long)m_data.size() > m_selected_index ) { DataType dt = m_data[m_selected_index]; ui().DownloadMod( dt->GetHostModHash(), dt->GetHostModName() ); } } void BattleListCtrl::Sort() { if ( m_data.size() > 0 ) { SaveSelection(); SLInsertionSort( m_data, m_comparator ); RestoreSelection(); } } int BattleListCtrl::CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const { switch ( col ) { case 0: return dir * CompareStatus( u1, u2 ); case 1: { try { return dir * u1->GetFounder().GetCountry().CmpNoCase( u2->GetFounder().GetCountry() ); }catch(...){} break; } case 2: return dir * compareSimple( u1->GetRankNeeded(), u2->GetRankNeeded() ); case 3: return dir * u1->GetDescription().CmpNoCase( u2->GetDescription() ); case 4: return dir * u1->GetHostMapName().CmpNoCase( u2->GetHostMapName() ); case 5: return dir * u1->GetHostModName().CmpNoCase( u2->GetHostModName() ); case 6: { try { return dir * u1->GetFounder().GetNick().CmpNoCase( u2->GetFounder().GetNick() ); }catch(...){} break; } case 7: return dir * compareSimple( u1->GetSpectators(), u2->GetSpectators() ); case 8: return dir * ComparePlayer( u1, u2 ); case 9: return dir * compareSimple( u1->GetMaxPlayers(), u2->GetMaxPlayers() ); case 10: return dir * compareSimple( u1->GetBattleRunningTime(), u2->GetBattleRunningTime()); default: return 0; } return 0; // simply to avoid compiler warning } int BattleListCtrl::CompareStatus( DataType u1, DataType u2 ) { const IBattle& battle1 = *u1; const IBattle& battle2 = *u2; int b1 = 0, b2 = 0; if ( battle1.GetNumActivePlayers() == 0 ) b1 += 2000; if ( battle2.GetNumActivePlayers() == 0 ) b2 += 2000; if ( battle1.GetInGame() ) b1 += 1000; if ( battle2.GetInGame() ) b2 += 1000; if ( battle1.IsLocked() ) b1 += 100; if ( battle2.IsLocked() ) b2 += 100; if ( battle1.IsPassworded() ) b1 += 50; if ( battle2.IsPassworded() ) b2 += 50; if ( battle1.IsFull() ) b1 += 25; if ( battle2.IsFull() ) b2 += 25; // inverse the order if ( b1 < b2 ) return -1; if ( b1 > b2 ) return 1; return 0; } int BattleListCtrl::ComparePlayer( DataType u1, DataType u2 ) { const IBattle& battle1 = *u1; const IBattle& battle2 = *u2; int n1 = battle1.GetNumUsers() - battle1.GetSpectators(); int n2 = battle2.GetNumUsers() - battle2.GetSpectators(); return compareSimple( n1, n2 ); } void BattleListCtrl::SetTipWindowText( const long item_hit, const wxPoint& position) { if ( (long)m_data.size() < item_hit ) { m_tiptext = _T(""); return; } const IBattle& battle= *m_data[item_hit]; int column = getColumnFromPosition(position); switch (column) { case 0: // status m_tiptext = icons().GetBattleStatus(battle); break; case 1: // country try { m_tiptext = GetFlagNameFromCountryCode(battle.GetFounder().GetCountry()); }catch(...){} break; case 2: // rank_min m_tiptext = m_colinfovec[column].tip; break; case 3: // descrp m_tiptext = battle.GetDescription(); break; case 4: //map m_tiptext = battle.GetHostMapName(); break; case 5: //mod m_tiptext = battle.GetHostModName(); break; case 6: // host try { m_tiptext = battle.GetFounder().GetNick(); }catch(...){} break; case 7: // specs m_tiptext = _("Spectators:"); for (unsigned int i = 0; i < battle.GetNumUsers(); ++i ) { if ( battle.GetUser(i).BattleStatus().spectator ) m_tiptext << _T("\n") << battle.GetUser(i).GetNick(); } break; case 8: // player m_tiptext = _("Active Players:"); for ( unsigned int i = 0; i < battle.GetNumUsers(); ++i ) { if ( !battle.GetUser(i).BattleStatus().spectator ) m_tiptext << _T("\n") << battle.GetUser(i).GetNick(); } break; case 9: //max player m_tiptext = (m_colinfovec[column].tip); break; case 10: //running time m_tiptext = (m_colinfovec[column].tip); break; default: m_tiptext = _T(""); break; } } int BattleListCtrl::GetIndexFromData( const DataType& data ) const { static long seekpos; seekpos = LSL::Util::Clamp( seekpos, 0l , (long)m_data.size() ); int index = seekpos; for ( DataCIter f_idx = m_data.begin() + seekpos; f_idx != m_data.end() ; ++f_idx ) { if ( *f_idx != 0 && data->Equals( *(*f_idx) ) ) { seekpos = index; return seekpos; } index++; } //it's ok to init with seekpos, if it had changed this would not be reached int r_index = seekpos - 1; for ( DataRevCIter r_idx = m_data.rbegin() + ( m_data.size() - seekpos ); r_idx != m_data.rend() ; ++r_idx ) { if ( *r_idx != 0 && data->Equals( *(*r_idx) ) ) { seekpos = r_index; return seekpos; } r_index--; } return -1; } springlobby-0.169/src/battlelist/battlelistctrl.h0000600000176000000410000000437712105760300023575 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_BATTLELISTCTRL_H #define SPRINGLOBBY_HEADERGUARD_BATTLELISTCTRL_H #include "battlelistfilter.h" #include "battlelist.h" #include "customvirtlistctrl.h" class wxMenu; class IBattle; class wxListEvent; class wxCommandEvent; class Ui; /** \brief The ListCtrll contained in BattleListTab dispalying all currently active battles with their infos * \todo DOCMEMORE */ class BattleListCtrl : public CustomVirtListCtrl< IBattle *, BattleListCtrl> { public: BattleListCtrl( wxWindow* parent ); ~BattleListCtrl(); void AddBattle( IBattle& battle ); void RemoveBattle( IBattle& battle ); void UpdateBattle( IBattle& battle ); void OnListRightClick( wxListEvent& event ); void OnDLMap( wxCommandEvent& event ); void OnDLMod( wxCommandEvent& event ); virtual void SetTipWindowText( const long item_hit, const wxPoint& position); //these are overloaded to use list in virtual style wxString GetItemText(long item, long column) const; int GetItemImage(long item) const; int GetItemColumnImage(long item, long column) const; wxListItemAttr * GetItemAttr(long item) const; enum { BLIST_LIST = wxID_HIGHEST, BLIST_DLMOD, BLIST_DLMAP }; protected: static int CompareStatus( DataType u1, DataType u2 ); static int ComparePlayer( DataType u1, DataType u2 ); int CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const; int GetIndexFromData( const DataType& data ) const; wxMenu* m_popup; virtual void Sort(); DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_BATTLELISTCTRL_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/battlelist/battlelistfilter.cpp0000600000176000000410000007021212105760300024440 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ // // Class: BattleOptionsTab // #if wxUSE_TOGGLEBTN #include #endif #include #include #include #include #include #include #include #include #include #include #include #include "battlelistfilter.h" #include "battlelistfiltervalues.h" #include "battlelistctrl.h" #include "battle.h" #include "uiutils.h" #include "utils/tasutil.h" #include "settings.h" #include "aui/auimanager.h" #include "useractions.h" /////////////////////////////////////////////////////////////////////////// BEGIN_EVENT_TABLE( BattleListFilter, wxPanel ) EVT_BUTTON ( BATTLE_FILTER_RANK_BUTTON , BattleListFilter::OnRankButton ) EVT_BUTTON ( BATTLE_FILTER_PLAYER_BUTTON , BattleListFilter::OnPlayerButton ) EVT_BUTTON ( BATTLE_FILTER_MAXPLAYER_BUTTON, BattleListFilter::OnMaxPlayerButton ) EVT_BUTTON ( BATTLE_FILTER_SPECTATOR_BUTTON, BattleListFilter::OnSpectatorButton ) EVT_CHOICE ( BATTLE_FILTER_SPECTATOR_CHOICE, BattleListFilter::OnSpectatorChange ) EVT_CHOICE ( BATTLE_FILTER_MAXPLAYER_CHOICE, BattleListFilter::OnMaxPlayerChange ) EVT_CHOICE ( BATTLE_FILTER_PLAYER_CHOICE , BattleListFilter::OnPlayerChange ) EVT_CHOICE ( BATTLE_FILTER_RANK_CHOICE , BattleListFilter::OnRankChange ) EVT_CHECKBOX ( BATTLE_FILTER_LOCKED , BattleListFilter::OnChange ) EVT_CHECKBOX ( BATTLE_FILTER_OPEN , BattleListFilter::OnChange ) EVT_CHECKBOX ( BATTLE_FILTER_PASSWORDED , BattleListFilter::OnChange ) EVT_CHECKBOX ( BATTLE_FILTER_FULL , BattleListFilter::OnChange ) EVT_CHECKBOX ( BATTLE_FILTER_STARTED , BattleListFilter::OnChange ) EVT_TEXT ( BATTLE_FILTER_HOST_EDIT , BattleListFilter::OnChangeHost ) EVT_TEXT ( BATTLE_FILTER_DESCRIPTION_EDIT, BattleListFilter::OnChangeDescription ) EVT_TEXT ( BATTLE_FILTER_MAP_EDIT , BattleListFilter::OnChangeMap ) EVT_TEXT ( BATTLE_FILTER_MOD_EDIT , BattleListFilter::OnChangeMod ) EVT_CHECKBOX ( BATTLE_FILTER_MAP_SHOW , BattleListFilter::OnChange ) EVT_CHECKBOX ( BATTLE_FILTER_MOD_SHOW , BattleListFilter::OnChange ) EVT_CHECKBOX ( BATTLE_FILTER_HIGHLIGHTED , BattleListFilter::OnChange ) END_EVENT_TABLE() BattleListFilter::BattleListFilter( wxWindow* parent, wxWindowID id, BattleListTab* parentBattleListTab, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ), m_parent_battlelisttab( parentBattleListTab ), m_filter_host_edit( 0 ), m_filter_host_expression( 0 ), m_filter_description_edit( 0 ), m_filter_description_expression( 0 ), m_filter_map_edit( 0 ), m_filter_map_expression( 0 ), m_filter_mod_edit( 0 ), m_filter_mod_expression( 0 ), m_filter_highlighted( 0 ) { GetAui().manager->AddPane( this, wxLEFT, _T( "battlelistfilter" ) ); BattleListFilterValues f_values = sett().GetBattleFilterValues( sett().GetLastBattleFilterProfileName() ); wxBoxSizer* m_filter_sizer; m_filter_sizer = new wxBoxSizer( wxVERTICAL ); wxStaticBoxSizer* m_filter_body_sizer; m_filter_body_sizer = new wxStaticBoxSizer( new wxStaticBox( this, -1, wxEmptyString ), wxVERTICAL ); wxBoxSizer* m_filter_body_row1_sizer; m_filter_body_row1_sizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* m_filter_column_1; m_filter_column_1 = new wxBoxSizer( wxHORIZONTAL ); m_filter_host_text = new wxStaticText( this, wxID_ANY, _( "Host:" ), wxDefaultPosition, wxSize( -1, -1 ), 0 ); m_filter_host_text->Wrap( -1 ); m_filter_host_text->SetMinSize( wxSize( 90, -1 ) ); m_filter_column_1->Add( m_filter_host_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_host_edit = new wxTextCtrl( this, BATTLE_FILTER_HOST_EDIT, f_values.host, wxDefaultPosition, wxSize( -1, -1 ), 0 | wxSIMPLE_BORDER ); m_filter_host_edit->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) ); m_filter_host_edit->SetMinSize( wxSize( 220, -1 ) ); m_filter_host_expression = new wxRegEx( m_filter_host_edit->GetValue(), wxRE_ICASE ); m_filter_column_1->Add( m_filter_host_edit, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row1_sizer->Add( m_filter_column_1, 0, wxEXPAND, 5 ); wxBoxSizer* m_filter_status_sizer1; m_filter_status_sizer1 = new wxBoxSizer( wxHORIZONTAL ); m_filter_status_text = new wxStaticText( this, wxID_ANY, _( "Status:" ), wxPoint( -1, -1 ), wxDefaultSize, 0 ); m_filter_status_text->Wrap( -1 ); m_filter_status_sizer1->Add( m_filter_status_text, 0, wxALIGN_RIGHT | wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_status_locked = new wxCheckBox( this, BATTLE_FILTER_LOCKED, _( "Locked" ), wxDefaultPosition, wxDefaultSize, 0 ); m_filter_status_locked->SetValue( f_values.status_locked ); m_filter_status_sizer1->Add( m_filter_status_locked, 0, wxALL | wxALIGN_CENTER_VERTICAL | wxEXPAND, 5 ); m_filter_status_pass = new wxCheckBox( this, BATTLE_FILTER_PASSWORDED, _( "Passworded" ), wxDefaultPosition, wxDefaultSize, 0 ); m_filter_status_pass->SetValue( f_values.status_passworded ); m_filter_status_sizer1->Add( m_filter_status_pass, 0, wxALL | wxALIGN_CENTER_VERTICAL | wxEXPAND, 5 ); m_filter_highlighted = new wxCheckBox( this, BATTLE_FILTER_HIGHLIGHTED , _( "Highlighted only" ), wxDefaultPosition, wxDefaultSize, 0 ); m_filter_highlighted->SetValue( f_values.highlighted_only ); m_filter_status_sizer1->Add( m_filter_highlighted, 0, wxALL | wxALIGN_CENTER_VERTICAL | wxEXPAND, 5 ); m_filter_body_row1_sizer->Add( m_filter_status_sizer1, 1, wxEXPAND, 5 ); wxBoxSizer* m_filter_rank_sizer; m_filter_rank_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_rank_text = new wxStaticText( this, wxID_ANY, _( "Rank Limit:" ), wxDefaultPosition, wxDefaultSize, 0 ); m_filter_rank_text->Wrap( -1 ); m_filter_rank_sizer->Add( m_filter_rank_text, 0, wxALIGN_RIGHT | wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_rank_button = new wxButton( this, BATTLE_FILTER_RANK_BUTTON, f_values.rank_mode, wxDefaultPosition, wxSize( 25, 25 ), 0 ); m_filter_rank_sizer->Add( m_filter_rank_button, 0, wxALIGN_RIGHT | wxALL | wxALIGN_CENTER_VERTICAL, 5 ); wxArrayString m_filter_rank_choiceChoices; m_filter_rank_choiceChoices.Add( _T( "All" ) ); m_filter_rank_choiceChoices.Add( _T( "1" ) ); m_filter_rank_choiceChoices.Add( _T( "2" ) ); m_filter_rank_choiceChoices.Add( _T( "3" ) ); m_filter_rank_choiceChoices.Add( _T( "4" ) ); m_filter_rank_choiceChoices.Add( _T( "5" ) ); m_filter_rank_choiceChoices.Add( _T( "6" ) ); m_filter_rank_choiceChoices.Add( _T( "7" ) ); m_filter_rank_choice = new wxChoice( this, BATTLE_FILTER_RANK_CHOICE, wxDefaultPosition, wxSize( -1, -1 ), m_filter_rank_choiceChoices, wxSIMPLE_BORDER ); m_filter_rank_choice->SetSelection( GetIntParam( f_values.rank ) ); m_filter_rank_choice->SetMinSize( wxSize( 40, -1 ) ); m_filter_rank_sizer->Add( m_filter_rank_choice, 0, wxALIGN_RIGHT | wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row1_sizer->Add( m_filter_rank_sizer, 0, wxEXPAND, 5 ); m_filter_body_sizer->Add( m_filter_body_row1_sizer, 1, wxEXPAND, 5 ); wxBoxSizer* m_filter_body_row2_sizer; m_filter_body_row2_sizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* m_filter_description_sizer; m_filter_description_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_description_text = new wxStaticText( this, wxID_ANY, _( "Description:" ), wxDefaultPosition, wxSize( -1, -1 ), 0 ); m_filter_description_text->Wrap( -1 ); m_filter_description_text->SetMinSize( wxSize( 90, -1 ) ); m_filter_description_sizer->Add( m_filter_description_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_description_edit = new wxTextCtrl( this, BATTLE_FILTER_DESCRIPTION_EDIT, f_values.description, wxDefaultPosition, wxSize( -1, -1 ), 0 | wxSIMPLE_BORDER ); m_filter_description_edit->SetMinSize( wxSize( 220, -1 ) ); m_filter_description_expression = new wxRegEx( m_filter_description_edit->GetValue(), wxRE_ICASE ); m_filter_description_sizer->Add( m_filter_description_edit, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row2_sizer->Add( m_filter_description_sizer, 0, wxEXPAND, 5 ); wxBoxSizer* m_filter_sizer2; m_filter_sizer2 = new wxBoxSizer( wxHORIZONTAL ); m_filter_status_text1 = new wxStaticText( this, wxID_ANY, _( "Status:" ), wxPoint( -1, -1 ), wxDefaultSize, 0 ); m_filter_status_text1->Wrap( -1 ); m_filter_sizer2->Add( m_filter_status_text1, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_status_start = new wxCheckBox( this, BATTLE_FILTER_STARTED, _( "Started" ), wxDefaultPosition, wxDefaultSize, 0 ); m_filter_status_start->SetValue( f_values.status_start ); m_filter_sizer2->Add( m_filter_status_start, 0, wxALL | wxALIGN_CENTER_VERTICAL | wxEXPAND, 5 ); m_filter_status_full = new wxCheckBox( this, BATTLE_FILTER_FULL, _( "Full" ), wxDefaultPosition, wxDefaultSize, 0 ); m_filter_status_full->SetValue( f_values.status_full ); m_filter_sizer2->Add( m_filter_status_full, 0, wxALL | wxALIGN_CENTER_VERTICAL | wxEXPAND, 5 ); m_filter_status_open = new wxCheckBox( this, BATTLE_FILTER_OPEN, _( "Open" ), wxDefaultPosition, wxDefaultSize, 0 ); m_filter_status_open->SetValue( f_values.status_open ); m_filter_sizer2->Add( m_filter_status_open, 0, wxALL | wxALIGN_CENTER_VERTICAL | wxEXPAND, 5 ); m_filter_body_row2_sizer->Add( m_filter_sizer2, 1, wxEXPAND, 5 ); wxBoxSizer* m_filter_player_sizer; m_filter_player_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_player_text = new wxStaticText( this, wxID_ANY, _( "Player:" ), wxDefaultPosition, wxSize( -1, -1 ), 0 ); m_filter_player_text->Wrap( -1 ); m_filter_player_sizer->Add( m_filter_player_text, 0, wxALIGN_RIGHT | wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_player_button = new wxButton( this, BATTLE_FILTER_PLAYER_BUTTON, f_values.player_mode, wxDefaultPosition, wxSize( 25, 25 ), 0 ); m_filter_player_sizer->Add( m_filter_player_button, 0, wxALIGN_RIGHT | wxALL | wxALIGN_CENTER_VERTICAL, 5 ); wxArrayString m_filter_player_choiceChoices; m_filter_player_choiceChoices.Add( _( "All" ) ); for ( wxLongLong i = 0;i <= 32;i++ ) m_filter_player_choiceChoices.Add( i.ToString() ); m_filter_player_choice = new wxChoice( this, BATTLE_FILTER_PLAYER_CHOICE, wxDefaultPosition, wxSize( -1, -1 ), m_filter_player_choiceChoices, 0 ); m_filter_player_choice->SetSelection( GetIntParam( f_values.player_num ) ); m_filter_player_choice->SetMinSize( wxSize( 40, -1 ) ); m_filter_player_sizer->Add( m_filter_player_choice, 0, wxALIGN_RIGHT | wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row2_sizer->Add( m_filter_player_sizer, 0, wxEXPAND | wxLEFT, 5 ); m_filter_body_sizer->Add( m_filter_body_row2_sizer, 1, wxEXPAND, 5 ); wxBoxSizer* m_filter_body_row3_sizer; m_filter_body_row3_sizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* m_filter_map_sizer; m_filter_map_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_map_text = new wxStaticText( this, wxID_ANY, _( "Map:" ), wxDefaultPosition, wxSize( -1, -1 ), 0 ); m_filter_map_text->Wrap( -1 ); m_filter_map_text->SetMinSize( wxSize( 90, -1 ) ); m_filter_map_sizer->Add( m_filter_map_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_map_edit = new wxTextCtrl( this, BATTLE_FILTER_MAP_EDIT, f_values.map, wxDefaultPosition, wxSize( -1, -1 ), 0 | wxSIMPLE_BORDER ); m_filter_map_edit->SetMinSize( wxSize( 140, -1 ) ); m_filter_map_expression = new wxRegEx( m_filter_map_edit->GetValue(), wxRE_ICASE ); m_filter_map_sizer->Add( m_filter_map_edit, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row3_sizer->Add( m_filter_map_sizer, 1, wxEXPAND, 5 ); wxBoxSizer* m_filter_only_map_sizer; m_filter_only_map_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_map_show = new wxCheckBox( this, BATTLE_FILTER_MAP_SHOW, _( "Only maps i have" ), wxDefaultPosition, wxSize( -1, -1 ), 0 ); m_filter_map_show->SetValue( f_values.map_show ); m_filter_map_show->SetMinSize( wxSize( 140, -1 ) ); m_filter_only_map_sizer->Add( m_filter_map_show, 1, wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row3_sizer->Add( m_filter_only_map_sizer, 1, wxEXPAND, 5 ); wxBoxSizer* m_filter_maxplayer_sizer; m_filter_maxplayer_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_maxplayer_text = new wxStaticText( this, wxID_ANY, _( "Max.Player:" ), wxDefaultPosition, wxSize( -1, -1 ), 0 ); m_filter_maxplayer_text->Wrap( -1 ); m_filter_maxplayer_sizer->Add( m_filter_maxplayer_text, 0, wxALIGN_RIGHT | wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_maxplayer_button = new wxButton( this, BATTLE_FILTER_MAXPLAYER_BUTTON, f_values.maxplayer_mode, wxDefaultPosition, wxSize( 25, 25 ), 0 ); m_filter_maxplayer_sizer->Add( m_filter_maxplayer_button, 0, wxALIGN_RIGHT | wxALL | wxALIGN_CENTER_VERTICAL, 5 ); wxArrayString m_filter_maxplayer_choiceChoices; m_filter_maxplayer_choiceChoices.Add( _T( "All" ) ); for ( wxLongLong i = 0;i <= 32;i++ ) m_filter_maxplayer_choiceChoices.Add( i.ToString() ); m_filter_maxplayer_choice = new wxChoice( this, BATTLE_FILTER_MAXPLAYER_CHOICE, wxDefaultPosition, wxSize( -1, -1 ), m_filter_maxplayer_choiceChoices, 0 ); m_filter_maxplayer_choice->SetSelection( GetIntParam( f_values.maxplayer ) ); m_filter_maxplayer_choice->SetMinSize( wxSize( 40, -1 ) ); m_filter_maxplayer_sizer->Add( m_filter_maxplayer_choice, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row3_sizer->Add( m_filter_maxplayer_sizer, 0, wxEXPAND, 5 ); m_filter_body_sizer->Add( m_filter_body_row3_sizer, 1, wxEXPAND, 5 ); wxBoxSizer* m_filter_body_row4_sizer; m_filter_body_row4_sizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* m_filter_mod_sizer; m_filter_mod_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_mod_text = new wxStaticText( this, wxID_ANY, _( "Game:" ), wxDefaultPosition, wxSize( -1, -1 ), 0 ); m_filter_mod_text->Wrap( -1 ); m_filter_mod_text->SetMinSize( wxSize( 90, -1 ) ); m_filter_mod_sizer->Add( m_filter_mod_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_mod_edit = new wxTextCtrl( this, BATTLE_FILTER_MOD_EDIT, f_values.mod, wxDefaultPosition, wxSize( -1, -1 ), 0 | wxSIMPLE_BORDER ); m_filter_mod_edit->SetMinSize( wxSize( 140, -1 ) ); m_filter_mod_expression = new wxRegEx( m_filter_mod_edit->GetValue(), wxRE_ICASE ); m_filter_mod_sizer->Add( m_filter_mod_edit, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row4_sizer->Add( m_filter_mod_sizer, 1, wxEXPAND, 5 ); wxBoxSizer* m_filter_only_mod_sizer; m_filter_only_mod_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_mod_show = new wxCheckBox( this, BATTLE_FILTER_MOD_SHOW, _( "Only games I have" ), wxDefaultPosition, wxSize( -1, -1 ), 0 ); m_filter_mod_show->SetValue( f_values.mod_show ); m_filter_mod_show->SetMinSize( wxSize( 140, -1 ) ); m_filter_only_mod_sizer->Add( m_filter_mod_show, 1, wxALL | wxALIGN_CENTER_VERTICAL | wxALIGN_CENTER_HORIZONTAL | wxEXPAND, 5 ); m_filter_body_row4_sizer->Add( m_filter_only_mod_sizer, 1, wxEXPAND, 5 ); wxBoxSizer* m_filter_spectator_sizer; m_filter_spectator_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_spectator_text = new wxStaticText( this, wxID_ANY, _( " Spectator:" ), wxDefaultPosition, wxSize( -1, -1 ), 0 ); m_filter_spectator_text->Wrap( -1 ); m_filter_spectator_sizer->Add( m_filter_spectator_text, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL | wxALL, 5 ); m_filter_spectator_button = new wxButton( this, BATTLE_FILTER_SPECTATOR_BUTTON, f_values.spectator_mode, wxDefaultPosition, wxSize( 25, 25 ), 0 ); m_filter_spectator_sizer->Add( m_filter_spectator_button, 0, wxALIGN_RIGHT | wxALL | wxALIGN_CENTER_VERTICAL, 5 ); wxArrayString m_filter_spectator_choiceChoices; m_filter_spectator_choiceChoices.Add( _T( "All" ) ); for ( wxLongLong i = 0;i <= 32;i++ ) m_filter_spectator_choiceChoices.Add( i.ToString() ); m_filter_spectator_choice = new wxChoice( this, BATTLE_FILTER_SPECTATOR_CHOICE, wxDefaultPosition, wxSize( -1, -1 ), m_filter_spectator_choiceChoices, 0 ); m_filter_spectator_choice->SetSelection( GetIntParam( f_values.spectator ) ); m_filter_spectator_choice->SetMinSize( wxSize( 40, -1 ) ); m_filter_spectator_sizer->Add( m_filter_spectator_choice, 0, wxALIGN_RIGHT | wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row4_sizer->Add( m_filter_spectator_sizer, 0, wxEXPAND, 5 ); m_filter_body_sizer->Add( m_filter_body_row4_sizer, 1, wxEXPAND, 5 ); m_filter_sizer->Add( m_filter_body_sizer, 1, wxEXPAND | wxALIGN_CENTER_HORIZONTAL, 5 ); m_activ = false; m_filter_rank_mode = _GetButtonMode( f_values.rank_mode ); m_filter_player_mode = _GetButtonMode( f_values.player_mode ); m_filter_maxplayer_mode = _GetButtonMode( f_values.maxplayer_mode ); m_filter_spectator_mode = _GetButtonMode( f_values.spectator_mode ); m_filter_rank_choice_value = m_filter_rank_choice->GetSelection() - 1; m_filter_player_choice_value = m_filter_player_choice->GetSelection() - 1; m_filter_maxplayer_choice_value = m_filter_maxplayer_choice->GetSelection() - 1; m_filter_spectator_choice_value = m_filter_spectator_choice->GetSelection() - 1 ; this->SetSizer( m_filter_sizer ); this->Layout(); m_filter_sizer->Fit( this ); delete m_filter_map_expression; m_filter_map_expression = new wxRegEx( m_filter_map_edit->GetValue(), wxRE_ICASE ); delete m_filter_mod_expression; m_filter_mod_expression = new wxRegEx( m_filter_mod_edit->GetValue(), wxRE_ICASE ); delete m_filter_description_expression; m_filter_description_expression = new wxRegEx( m_filter_description_edit->GetValue(), wxRE_ICASE ); delete m_filter_host_expression; m_filter_host_expression = new wxRegEx( m_filter_host_edit->GetValue(), wxRE_ICASE ); wxCommandEvent dummy; OnChange( dummy ); } BattleListFilter::ButtonMode BattleListFilter::_GetButtonMode( const wxString& sign ) { if ( sign == _T( "<" ) ) return BattleListFilter::BUTTON_MODE_SMALLER; if ( sign == _T( ">" ) ) return BattleListFilter::BUTTON_MODE_BIGGER; return BattleListFilter::BUTTON_MODE_EQUAL; } wxString BattleListFilter::_GetButtonSign( const BattleListFilter::ButtonMode value ) { switch ( value ) { case BUTTON_MODE_EQUAL : return _T( "=" ); case BUTTON_MODE_SMALLER : return _T( "<" ); case BUTTON_MODE_BIGGER : default : return _T( ">" ); } } BattleListFilter::ButtonMode BattleListFilter::_GetNextMode( const BattleListFilter::ButtonMode value ) { switch ( value ) { case BUTTON_MODE_EQUAL : return BUTTON_MODE_SMALLER; case BUTTON_MODE_SMALLER : return BUTTON_MODE_BIGGER; case BUTTON_MODE_BIGGER : default : return BUTTON_MODE_EQUAL; } } bool BattleListFilter::_IntCompare( const int a, const int b, const BattleListFilter::ButtonMode mode ) { switch ( mode ) { case BUTTON_MODE_EQUAL : return ( a == b ); case BUTTON_MODE_SMALLER : return ( a < b ); case BUTTON_MODE_BIGGER : return ( a > b ); default : return false; } } bool BattleListFilter::StringMatches(const wxString& input, const wxString& filter_string, const wxRegEx* filter_regex, StringTransformFunction additional_transform, bool case_sensitive) { if ( filter_string.Len() < 1 || filter_string == _T("") ) return true; wxString input_cased ( input ); wxString filter_cased ( filter_string ); bool use_regex ( filter_regex && filter_regex->IsValid() ); /* Case-(in)sensitivize the input and filter strings. */ if ( ! case_sensitive ) { input_cased.MakeUpper(); filter_cased.MakeUpper(); } if ( input_cased.Find(filter_cased) != wxNOT_FOUND || ( use_regex && filter_regex->Matches(input) ) ) return true; else if ( additional_transform ) { /* Try matching using a transformed input string. */ wxString input_generated ( additional_transform(input) ); if ( ! case_sensitive ) input_generated.MakeUpper(); if ( input_generated.Find(filter_cased) != wxNOT_FOUND || ( use_regex && filter_regex->Matches(input_generated) ) ) return true; } return false; } void BattleListFilter::OnRankButton ( wxCommandEvent& event ) { m_filter_rank_mode = _GetNextMode( m_filter_rank_mode ); m_filter_rank_button->SetLabel( _GetButtonSign( m_filter_rank_mode ) ); OnChange( event ); } void BattleListFilter::OnPlayerButton ( wxCommandEvent& event ) { m_filter_player_mode = _GetNextMode( m_filter_player_mode ); m_filter_player_button->SetLabel( _GetButtonSign( m_filter_player_mode ) ); OnChange( event ); } void BattleListFilter::OnMaxPlayerButton( wxCommandEvent& event ) { m_filter_maxplayer_mode = _GetNextMode( m_filter_maxplayer_mode ); m_filter_maxplayer_button->SetLabel( _GetButtonSign( m_filter_maxplayer_mode ) ); OnChange( event ); } void BattleListFilter::OnSpectatorButton( wxCommandEvent& event ) { m_filter_spectator_mode = _GetNextMode( m_filter_spectator_mode ); m_filter_spectator_button->SetLabel( _GetButtonSign( m_filter_spectator_mode ) ); OnChange( event ); } void BattleListFilter::SetActiv( bool state ) { m_activ = state; if ( m_parent_battlelisttab != 0 ) { m_parent_battlelisttab->UpdateList(); } } bool BattleListFilter::FilterBattle( IBattle& battle ) { if ( !m_activ ) return true; if ( m_filter_highlighted->IsChecked() ) { try { wxString host = battle.GetFounder().GetNick(); if ( !useractions().DoActionOnUser( UserActions::ActHighlight, host ) ) return false; for ( unsigned int i = 0; i < battle.GetNumUsers(); ++i ) { wxString name = battle.GetUser( i ).GetNick(); if ( !useractions().DoActionOnUser( UserActions::ActHighlight, name ) ) return false; } }catch(...){} } //Battle Status Check if ( !m_filter_status_start->GetValue() && battle.GetInGame() ) return false; if ( !m_filter_status_locked->GetValue() && battle.IsLocked() ) return false; if ( !m_filter_status_pass->GetValue() && battle.IsPassworded() ) return false; if ( !m_filter_status_full->GetValue() && battle.IsFull() ) return false; if ( !m_filter_status_open->GetValue() && !battle.IsPassworded() && !battle.IsLocked() && !battle.GetInGame() && !battle.IsFull() ) return false; //Rank Check /** @fixme Is `nonsenserank' useful, or can it be removed? Why is * it here in the first place? */ /* `Nonsense', in this context, apparently means that the battle * requires rank 100, exactly, AND we're filtering for values less * than some number. */ bool nonsenserank = ( m_filter_rank_mode == BUTTON_MODE_SMALLER ) && ( battle.GetRankNeeded() == 100) ; if ( m_filter_rank_choice_value != -1 /* don't have "all" selected */ && !nonsenserank /* Nonsensical `nonsenserank' flag isn't set. */ && !_IntCompare( battle.GetRankNeeded(), m_filter_rank_choice_value, m_filter_rank_mode ) ) return false; //Player Check if ( ( m_filter_player_choice_value != -1 ) && !_IntCompare( battle.GetNumUsers() - battle.GetSpectators() , m_filter_player_choice_value , m_filter_player_mode ) ) return false; //MaxPlayer Check if ( ( m_filter_maxplayer_choice_value != -1 ) && !_IntCompare( battle.GetMaxPlayers() , m_filter_maxplayer_choice_value , m_filter_maxplayer_mode ) ) return false; //Spectator Check if ( ( m_filter_spectator_choice_value != -1 ) && !_IntCompare( battle.GetSpectators() , m_filter_spectator_choice_value , m_filter_spectator_mode ) ) return false; //Only Maps i have Check if ( m_filter_map_show->GetValue() && !battle.MapExists() ) return false; //Only Mods i have Check if ( m_filter_mod_show->GetValue() && !battle.ModExists() ) return false; //Strings Plain Text & RegEx Check (Case insensitiv) //Description: if ( ! StringMatches(battle.GetDescription(), m_filter_description_edit->GetValue(), m_filter_description_expression) ) return false; //Host: try { //!TODO if ( ! StringMatches(battle.GetFounder().GetNick(), m_filter_host_edit->GetValue(), m_filter_host_expression) ) return false; } catch (...) {} //Map: if ( ! StringMatches(battle.GetHostMapName(), m_filter_map_edit->GetValue(), m_filter_map_expression) ) return false; //Mod: if ( ! StringMatches(battle.GetHostModName(), m_filter_mod_edit->GetValue(), m_filter_mod_expression) ) return false; return true; } void BattleListFilter::OnChange ( wxCommandEvent& /*unused*/ ) { if ( !m_activ ) return; m_parent_battlelisttab->UpdateList(); } void BattleListFilter::OnChangeMap ( wxCommandEvent& event ) { if ( m_filter_map_edit == NULL ) return; if ( m_filter_map_expression == NULL ) m_filter_map_expression = new wxRegEx(m_filter_map_edit->GetValue(), wxRE_ICASE); else m_filter_map_expression->Compile(m_filter_map_edit->GetValue(), wxRE_ICASE); OnChange(event); } void BattleListFilter::OnChangeMod ( wxCommandEvent& event ) { if ( m_filter_mod_edit == NULL ) return; if ( m_filter_mod_expression == NULL ) m_filter_mod_expression = new wxRegEx(m_filter_mod_edit->GetValue(), wxRE_ICASE); else m_filter_mod_expression->Compile(m_filter_mod_edit->GetValue(), wxRE_ICASE); OnChange(event); } void BattleListFilter::OnChangeDescription ( wxCommandEvent& event ) { if ( m_filter_description_edit == NULL ) return; if ( m_filter_description_expression == NULL ) m_filter_description_expression = new wxRegEx(m_filter_description_edit->GetValue(), wxRE_ICASE); else m_filter_description_expression->Compile(m_filter_description_edit->GetValue(), wxRE_ICASE); OnChange(event); } void BattleListFilter::OnChangeHost ( wxCommandEvent& event ) { if ( m_filter_host_edit == NULL ) return; if ( m_filter_host_expression == NULL ) m_filter_host_expression = new wxRegEx(m_filter_host_edit->GetValue(), wxRE_ICASE); else m_filter_host_expression->Compile(m_filter_host_edit->GetValue(), wxRE_ICASE); OnChange(event); } void BattleListFilter::OnRankChange( wxCommandEvent& event ) { m_filter_rank_choice_value = m_filter_rank_choice->GetSelection() - 1; OnChange( event ); } void BattleListFilter::OnPlayerChange( wxCommandEvent& event ) { m_filter_player_choice_value = m_filter_player_choice->GetSelection() - 1; OnChange( event ); } void BattleListFilter::OnMaxPlayerChange( wxCommandEvent& event ) { m_filter_maxplayer_choice_value = m_filter_maxplayer_choice->GetSelection() - 1; OnChange( event ); } void BattleListFilter::OnSpectatorChange( wxCommandEvent& event ) { m_filter_spectator_choice_value = m_filter_spectator_choice->GetSelection() - 1; OnChange( event ); } bool BattleListFilter::GetActiv() const { return m_activ; } void BattleListFilter::SaveFilterValues() { BattleListFilterValues filtervalues; filtervalues.description = m_filter_description_edit->GetValue() ; filtervalues.host = m_filter_host_edit->GetValue(); filtervalues.map = m_filter_map_edit->GetValue(); filtervalues.map_show = m_filter_map_show->GetValue(); filtervalues.map = m_filter_map_edit->GetValue(); filtervalues.maxplayer = wxFormat( _( "%d" ) ) % m_filter_maxplayer_choice->GetSelection(); filtervalues.maxplayer_mode = _GetButtonSign( m_filter_maxplayer_mode ); filtervalues.mod = m_filter_mod_edit->GetValue(); filtervalues.mod_show = m_filter_mod_show->GetValue(); filtervalues.player_mode = _GetButtonSign( m_filter_player_mode ); filtervalues.player_num = wxFormat( _( "%d" ) ) % m_filter_player_choice->GetSelection(); filtervalues.rank = wxFormat( _( "%d" ) ) % m_filter_rank_choice->GetSelection(); filtervalues.rank_mode = _GetButtonSign( m_filter_rank_mode ); filtervalues.spectator = wxFormat( _( "%d" ) ) % m_filter_spectator_choice->GetSelection(); filtervalues.spectator_mode = _GetButtonSign( m_filter_spectator_mode ); filtervalues.status_full = m_filter_status_full->IsChecked(); filtervalues.status_locked = m_filter_status_locked->IsChecked(); filtervalues.status_open = m_filter_status_open->IsChecked(); filtervalues.status_passworded = m_filter_status_pass->IsChecked(); filtervalues.status_start = m_filter_status_start->IsChecked(); filtervalues.highlighted_only = m_filter_highlighted->IsChecked(); sett().SetBattleFilterValues( filtervalues ); } springlobby-0.169/src/battlelist/battlelistfilter.h0000600000176000000410000001452412105760300024111 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_BATTLELISTFILTER_H #define SPRINGLOBBY_HEADERGUARD_BATTLELISTFILTER_H #include #include "battlelisttab.h" #include "battle.h" #include "utils/mixins.hh" /////////////////////////////////////////////////////////////////////////// class BattleListTab; class wxToggleButton; class wxCheckBox; class wxStaticText; class wxTextCtrl; class wxChoice; class wxButton; class wxRegEx; class wxStaticText; /** \brief The panel contained in BattleListTab used to filter for diff info of battles * \todo DOCMEMORE */ class BattleListFilter : public wxPanel, public SL::NonCopyable { public: BattleListFilter( wxWindow* parent, wxWindowID id, BattleListTab* parentBattleListTab, const wxPoint& pos, const wxSize& size, long style ); void OnRankButton ( wxCommandEvent& event ); void OnPlayerButton ( wxCommandEvent& event ); void OnMaxPlayerButton( wxCommandEvent& event ); void OnSpectatorButton( wxCommandEvent& event ); void OnActivate ( wxCommandEvent& event ); void SetActiv ( bool state ); void OnChange ( wxCommandEvent& event ); void OnChangeMap ( wxCommandEvent& event ); void OnChangeMod ( wxCommandEvent& event ); void OnChangeDescription ( wxCommandEvent& event ); void OnChangeHost ( wxCommandEvent& event ); void OnRankChange ( wxCommandEvent& event ); void OnPlayerChange ( wxCommandEvent& event ); void OnMaxPlayerChange ( wxCommandEvent& event ); void OnSpectatorChange ( wxCommandEvent& event ); bool FilterBattle(IBattle& battle); bool GetActiv() const; void SetFilterHighlighted( bool state ); void SaveFilterValues(); enum ButtonMode { BUTTON_MODE_EQUAL, BUTTON_MODE_BIGGER, BUTTON_MODE_SMALLER }; protected: wxString _GetButtonSign(ButtonMode value); ButtonMode _GetNextMode(ButtonMode value); ButtonMode _GetButtonMode(const wxString& sign); bool _IntCompare(int a,int b,ButtonMode mode); /** A function callback used to transform an input string. */ typedef wxString (*StringTransformFunction)(const wxString& input); bool m_activ; BattleListTab* m_parent_battlelisttab; #if wxUSE_TOGGLEBTN wxToggleButton* m_filter_show; #else wxCheckBox* m_filter_show; #endif wxStaticText* m_filter_text; wxCheckBox* m_filter_activ; //Host wxStaticText* m_filter_host_text; wxTextCtrl* m_filter_host_edit; wxRegEx* m_filter_host_expression; //Status wxStaticText* m_filter_status_text; wxStaticText* m_filter_status_text1; wxCheckBox* m_filter_status_locked; wxCheckBox* m_filter_status_pass; wxCheckBox* m_filter_status_start; wxCheckBox* m_filter_status_full; wxCheckBox* m_filter_status_open; //Rank wxStaticText* m_filter_rank_text; ButtonMode m_filter_rank_mode; wxButton* m_filter_rank_button; wxChoice* m_filter_rank_choice; int m_filter_rank_choice_value; //Description wxStaticText* m_filter_description_text; wxTextCtrl* m_filter_description_edit; wxRegEx* m_filter_description_expression; //Player wxStaticText* m_filter_player_text; wxButton* m_filter_player_button; ButtonMode m_filter_player_mode; wxChoice* m_filter_player_choice; int m_filter_player_choice_value; //Map wxStaticText* m_filter_map_text; wxTextCtrl* m_filter_map_edit; wxCheckBox* m_filter_map_show; wxRegEx* m_filter_map_expression; //Max Player wxStaticText* m_filter_maxplayer_text; wxButton* m_filter_maxplayer_button; ButtonMode m_filter_maxplayer_mode; wxChoice* m_filter_maxplayer_choice; int m_filter_maxplayer_choice_value; //Mod wxStaticText* m_filter_mod_text; wxTextCtrl* m_filter_mod_edit; wxCheckBox* m_filter_mod_show; wxRegEx* m_filter_mod_expression; //Spectator wxStaticText* m_filter_spectator_text; wxButton* m_filter_spectator_button; ButtonMode m_filter_spectator_mode; wxChoice* m_filter_spectator_choice; int m_filter_spectator_choice_value; wxCheckBox* m_filter_highlighted; public: /** Test whether an input string matches a filter string. * The filter will be tried as both a fixed string, and as a regular expression. * * @param input The input string to test. * * @param filter_string A fixed string to match against. * * @param filter_regex A regular expression object pointer. If * the expression is valid, it will be used to match the input if * the fixed string does not. * * @param additional_transform A function that should be called to * generate an additional input string. * * @param case_sensitive @c true if the comparison should be done case-sensitively. * * @return @c true if the input or generated input matches the filter string, and @c false otherwise. */ static bool StringMatches(const wxString& input, const wxString& filter_string, const wxRegEx* filter_regex = NULL, StringTransformFunction additional_transform = NULL, bool case_sensitive = false); protected: DECLARE_EVENT_TABLE() }; enum { BATTLE_FILTER_HOST_EDIT, BATTLE_FILTER_DESCRIPTION_EDIT, BATTLE_FILTER_MAP_EDIT, BATTLE_FILTER_MOD_EDIT, BATTLE_FILTER_LOCKED, BATTLE_FILTER_OPEN, BATTLE_FILTER_PASSWORDED, BATTLE_FILTER_FULL, BATTLE_FILTER_STARTED, BATTLE_FILTER_RANK_CHOICE, BATTLE_FILTER_RANK_BUTTON, BATTLE_FILTER_PLAYER_CHOICE, BATTLE_FILTER_MAXPLAYER_CHOICE, BATTLE_FILTER_SPECTATOR_CHOICE, BATTLE_FILTER_MAP_SHOW, BATTLE_FILTER_MOD_SHOW, BATTLE_FILTER_PLAYER_BUTTON, BATTLE_FILTER_MAXPLAYER_BUTTON, BATTLE_FILTER_SPECTATOR_BUTTON, BATTLE_FILTER_HIGHLIGHTED }; #endif //SPRINGLOBBY_HEADERGUARD_BATTLELISTFILTER_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/battlelist/battlelistfiltervalues.h0000600000176000000410000000246212105760300025327 0ustar buildbotwww-data00000000000000#include struct BattleListFilterValues { // checkboxes bool status_locked; bool status_passworded; bool status_start; bool status_full; bool status_open; bool map_show; bool mod_show; bool highlighted_only; //text fields wxString host; wxString description; wxString map; wxString mod; //choices wxString rank; wxString player_num; wxString maxplayer; wxString spectator; //modifiers wxString rank_mode; wxString player_mode; wxString maxplayer_mode; wxString spectator_mode; }; /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/battlelist/battlelisttab.cpp0000600000176000000410000003664012105760300023730 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include #include #include #include #include #include #include #include #include #include #if wxUSE_TOGGLEBTN #include #endif #include #include "aui/auimanager.h" #include "battlelisttab.h" #include "battlelistctrl.h" #include "battle.h" #include "ui.h" #include "chatpanel.h" #include "utils/debug.h" #include "utils/conversion.h" #include "utils/controls.h" #include "uiutils.h" #include "hosting/hostbattledialog_public.h" #include "hosting/mainjoinbattletab.h" #include "server.h" #include "settings.h" #include "springunitsync.h" #include "mapctrl.h" #include "nicklistctrl.h" #include "mainwindow.h" #include "battlelistfilter.h" #include "iconimagelist.h" #include "useractions.h" #include "utils/customdialogs.h" const unsigned int BATTLELIST_COLUMNCOUNT = 10; BEGIN_EVENT_TABLE( BattleListTab, wxPanel ) EVT_BUTTON ( BattleListTab::BATTLE_JOIN , BattleListTab::OnJoin ) EVT_BUTTON ( BattleListTab::BATTLE_HOST , BattleListTab::OnHost ) EVT_LIST_ITEM_ACTIVATED ( BattleListTab::BATTLE_JOIN , BattleListTab::OnListJoin ) EVT_LIST_ITEM_SELECTED ( BattleListCtrl::BLIST_LIST , BattleListTab::OnSelect ) EVT_CHECKBOX ( BattleListTab::BATTLE_LIST_FILTER_ACTIV, BattleListTab::OnFilterActiv ) #if wxUSE_TOGGLEBTN EVT_TOGGLEBUTTON ( BattleListTab::BATTLE_LIST_FILTER_BUTTON, BattleListTab::OnFilter ) EVT_TOGGLEBUTTON ( BattleListTab::BATTLE_LIST_INFO_BUTTON, BattleListTab::OnInfoShow ) #else EVT_CHECKBOX ( BattleListTab::BATTLE_LIST_FILTER_BUTTON, BattleListTab::OnFilter ) EVT_CHECKBOX ( BattleListTab::BATTLE_LIST_INFO_BUTTON, BattleListTab::OnOnInfoShow ) #endif EVT_SIZE( BattleListTab::OnResize ) END_EVENT_TABLE() BattleListTab::BattleListTab( wxWindow* parent ) : wxScrolledWindow( parent, -1 ), m_sel_battle( 0 ) { GetAui().manager->AddPane( this, wxLEFT, _T( "battlelisttab" ) ); m_main_sizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* m_filter_sizer; m_filter_sizer = new wxBoxSizer( wxVERTICAL ); m_battlelist_sizer = new wxBoxSizer( wxVERTICAL ); m_battle_list = new BattleListCtrl( this ); m_battle_list->SetHighLightAction ( UserActions::ActHighlight ); m_battlelist_sizer->Add( m_battle_list, 1, wxALL | wxEXPAND, 5 ); m_main_sizer->Add( m_battlelist_sizer, 1, wxEXPAND, 5 );; m_info_sizer = new wxBoxSizer( wxHORIZONTAL ); m_minimap = new MapCtrl( this, 100, 0, true, true, false, false ); m_info_sizer->Add( m_minimap, 0, wxALL, 5 ); m_data_sizer = new wxFlexGridSizer( 4, 2, 0, 0 ); m_map_lbl = new wxStaticText( this, wxID_ANY, _( "Map:" ), wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_map_lbl, 0, wxALL, 5 ); m_map_text = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_map_text, 0, wxALL, 5 ); m_mod_lbl = new wxStaticText( this, wxID_ANY, _( "Game:" ), wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_mod_lbl, 0, wxALL, 5 ); m_mod_text = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_mod_text, 0, wxALL, 5 ); m_players_lbl = new wxStaticText( this, wxID_ANY, _( "Players:" ), wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_players_lbl, 0, wxALL, 5 ); m_players_text = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_players_text, 0, wxALL, 5 ); m_spec_lbl = new wxStaticText( this, wxID_ANY, _( "Spectators:" ), wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_spec_lbl, 0, wxALL, 5 ); m_spec_text = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_spec_text, 0, wxALL, 5 ); m_info_sizer->Add( m_data_sizer, 1, wxEXPAND, 5 ); m_players = new NickListCtrl( this, false, 0, true, _T("battlelist_nicklist") ); int width = m_players->GetClientSize().GetWidth() - 60; m_players->SetColumnWidth( 3, width ); m_info_sizer->Add( m_players, 1, wxALL | wxEXPAND, 5 ); m_main_sizer->Add( m_info_sizer, 0, wxEXPAND, 5 ); m_filter = new BattleListFilter( this , wxID_ANY, this , wxDefaultPosition, wxSize( -1, -1 ), wxEXPAND ); m_filter_sizer->Add( m_filter, 0, wxEXPAND, 5 ); m_main_sizer->Add( m_filter_sizer, 0, wxEXPAND, 5 ); m_buttons_sep = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); m_main_sizer->Add( m_buttons_sep, 0, wxALL | wxEXPAND, 5 ); wxBoxSizer* m_buttons_sizer; m_buttons_sizer = new wxBoxSizer( wxHORIZONTAL ); m_buttons_sizer->Add( 0, 0, 1, wxEXPAND, 0 ); #if wxUSE_TOGGLEBTN m_filter_show = new wxToggleButton( this, BATTLE_LIST_FILTER_BUTTON , _( " Filter " ), wxDefaultPosition , wxSize( -1, 28 ), 0 ); #else m_filter_show = new wxCheckBox( this, BATTLE_LIST_FILTER_BUTTON , _( " Filter " ), wxDefaultPosition , wxSize( -1, 28 ), 0 ); #endif m_buttons_sizer->Add( m_filter_show, 0, 0, 5 ); m_filter_activ = new wxCheckBox( this, BATTLE_LIST_FILTER_ACTIV , _( "Activated" ), wxDefaultPosition, wxDefaultSize, 0 ); m_buttons_sizer->Add( m_filter_activ, 0, wxALL, 5 ); #if wxUSE_TOGGLEBTN m_info_show = new wxToggleButton( this, BATTLE_LIST_INFO_BUTTON , _( " Battle infos " ), wxDefaultPosition , wxSize( -1, 28 ), 0 ); #else m_info_show = new wxCheckBox( this, BATTLE_LIST_INFO_BUTTON, _( " Battle infos " ), wxDefaultPosition , wxSize( -1, 28 ), 0 ); #endif m_buttons_sizer->Add( m_info_show , 0, 0, 5 ); m_battle_num = new wxStaticText( this, wxID_ANY, _( "0 battles displayed" ), wxDefaultPosition, wxDefaultSize, 0 ); m_buttons_sizer->Add( m_battle_num, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, 4 ); m_buttons_sizer->Add( 0, 0, 1, wxEXPAND, 0 ); m_host_btn = new wxButton( this, BATTLE_HOST, _( "Host new..." ), wxDefaultPosition, wxSize( -1, 28 ), 0 ); m_buttons_sizer->Add( m_host_btn, 0, wxBOTTOM | wxLEFT | wxRIGHT, 5 ); m_join_btn = new wxButton( this, BATTLE_JOIN, _( "Join" ), wxDefaultPosition, wxSize( -1, 28 ), 0 ); m_buttons_sizer->Add( m_join_btn, 0, wxBOTTOM | wxRIGHT, 5 ); m_main_sizer->Add( m_buttons_sizer, 0, wxEXPAND, 5 ); m_filter->Hide(); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); SetSizer( m_main_sizer ); Layout(); SelectBattle( 0 ); } BattleListTab::~BattleListTab() { if ( m_filter != 0 ) m_filter->SaveFilterValues(); } void BattleListTab::OnConnected() { bool filter = sett().GetBattleFilterActivState(); SetFilterActiv( filter ); } void BattleListTab::SetNumDisplayed() { int num = m_battle_list->GetItemCount(); m_battle_num->SetLabel( wxFormat( _( "%d battles displayed" ) ) % num ); } void BattleListTab::SelectBattle( IBattle* battle ) { m_sel_battle = battle; m_minimap->SetBattle( m_sel_battle ); m_players->ClearUsers(); if ( m_sel_battle != 0 ) { m_map_text->SetLabel( m_sel_battle->GetHostMapName() ); m_mod_text->SetLabel( m_sel_battle->GetHostModName() ); m_players_text->SetLabel( wxFormat( _T( "%d / %d" ) ) % (int( m_sel_battle->GetNumUsers() ) - int( m_sel_battle->GetSpectators() )) % int( m_sel_battle->GetMaxPlayers() ) ); m_spec_text->SetLabel( wxFormat( _T( "%d" ) ) % m_sel_battle->GetSpectators() ); for ( unsigned int i = 0; i < m_sel_battle->GetNumUsers(); i++ ) { User& usr = m_sel_battle->GetUser( i ); if ( usr.BattleStatus().IsBot() ) continue; m_players->AddUser( usr ); } } else { m_map_text->SetLabel( wxEmptyString ); m_mod_text->SetLabel( wxEmptyString ); m_players_text->SetLabel( _T( "0 / 0" ) ); m_spec_text->SetLabel( _T( "0" ) ); } } void BattleListTab::AddBattle( IBattle& battle ) { if ( battle.GetGUIListActiv() || ( m_filter->GetActiv() && !m_filter->FilterBattle( battle ) ) ) { return; } m_battle_list->AddBattle( battle ); battle.SetGUIListActiv( true ); m_battle_list->MarkDirtySort(); SetNumDisplayed(); } void BattleListTab::RemoveBattle( IBattle& battle ) { if ( &battle == m_sel_battle ) { m_battle_list->ResetSelection(); SelectBattle( 0 ); } m_battle_list->RemoveBattle( battle ); battle.SetGUIListActiv( false ); SetNumDisplayed(); } void BattleListTab::UserUpdate( User& user ) { if ( m_sel_battle && user.GetBattle() == m_sel_battle ) { m_players->UserUpdated( user ); } } void BattleListTab::UpdateBattle( IBattle& battle ) { if ( !battle.GetGUIListActiv() ) { AddBattle( battle ); return; } if ( m_filter->GetActiv() && !m_filter->FilterBattle( battle ) ) { RemoveBattle( battle ); return; } m_battle_list->UpdateBattle( battle ); if ( &battle == m_sel_battle ) SelectBattle( m_sel_battle ); } void BattleListTab::RemoveAllBattles() { SelectBattle( 0 ); serverSelector().GetServer().battles_iter->IteratorBegin(); while ( ! serverSelector().GetServer().battles_iter->EOL() ) { Battle* temp_battle = serverSelector().GetServer().battles_iter->GetBattle(); if ( temp_battle != 0 ) temp_battle->SetGUIListActiv( false ); } m_battle_list->Clear(); SetNumDisplayed(); } void BattleListTab::UpdateList() { serverSelector().GetServer().battles_iter->IteratorBegin(); while ( ! serverSelector().GetServer().battles_iter->EOL() ) { Battle* b = serverSelector().GetServer().battles_iter->GetBattle(); if ( b != 0 ) UpdateBattle( *b ); } m_battle_list->RefreshVisibleItems(); } void BattleListTab::SetFilterActiv( bool activ ) { m_filter->SetActiv( activ ); m_filter_activ->SetValue( activ ); sett().SetBattleFilterActivState( activ ); m_battle_list->MarkDirtySort(); } void BattleListTab::OnHost( wxCommandEvent& /*unused*/ ) { if ( !ui().IsConnected() ) { wxLogWarning( _T( "Trying to host while offline" ) ); customMessageBoxNoModal( SL_MAIN_ICON, _( "You cannot host a game while being offline. Please connect to a lobby server." ), _( "Not Online." ), wxOK ); ui().ShowConnectWindow(); return; } if ( !ui().IsSpringCompatible() ) { wxLogWarning( _T( "Hosting is disabled due to the incompatible version " ) ); customMessageBoxNoModal( SL_MAIN_ICON, _( "Hosting is disabled due to the incompatible version you're using" ), _( "Spring error" ), wxICON_EXCLAMATION | wxOK ); return; } Battle* battle = ui().mw().GetJoinTab().GetCurrentBattle(); if ( battle != 0 ) { if ( ui().Ask( _( "Already in a battle" ), _( "You are already in a battle.\n\nDo you want to leave current battle to start a new?" ) ) ) { battle->Leave(); ui().mw().GetJoinTab().LeaveCurrentBattle(); } else { return; } } SL::RunHostBattleDialog( this ); } void BattleListTab::OnFilter( wxCommandEvent& /*unused*/ ) { if ( m_filter_show->GetValue() ) { m_filter->Show( ); this->Layout(); } else { m_filter->Hide( ); this->Layout(); } } void BattleListTab::OnFilterActiv( wxCommandEvent& /*unused*/ ) { bool active = m_filter_activ->GetValue(); if ( !ui().IsConnected() ) { m_filter_activ->SetValue( !active ); return; } m_filter->SetActiv( active ); sett().SetBattleFilterActivState( active ); SetNumDisplayed(); } void BattleListTab::OnJoin( wxCommandEvent& /*unused*/ ) { try { ASSERT_LOGIC( m_battle_list != 0, _T( "m_battle_list = 0" ) ); } catch ( ... ) { return; } if ( m_battle_list->GetSelectedIndex() < 0 ) return; int id = m_battle_list->GetSelectedData()->GetBattleId(); DoJoin( serverSelector().GetServer().battles_iter->GetBattle( id ) ); } void BattleListTab::OnListJoin( wxListEvent& event ) { try { ASSERT_LOGIC( m_battle_list != 0, _T( "m_battle_list = 0" ) ); } catch ( ... ) { return; } if ( event.GetIndex() < 0 ) return; int id = m_battle_list->GetSelectedData()->GetBattleId(); DoJoin( serverSelector().GetServer().battles_iter->GetBattle( id ) ); } void BattleListTab::DoJoin( Battle& battle ) { if ( !ui().IsSpringCompatible() ) { wxLogWarning( _T( "trying to join battles with incompatible spring version" ) ); customMessageBox( SL_MAIN_ICON, _( "Joining battles is disabled due to the incompatible spring version you're using." ), _( "Spring error" ), wxICON_EXCLAMATION | wxOK ); return; } Battle* curbattle = ui().mw().GetJoinTab().GetCurrentBattle(); //handle matchmakers const std::set cpus = sett().KnownMatchmakerCPU(); if ( cpus.find(battle.GetFounder().GetCpu()) != cpus.end() ) { const wxString msg(_( "You are about to join a matchmaking battleroom.\nThe host might move you to another battle at any time. In case of problems please contact the host or a lobby moderator.\nDo you want to continue?" )); if ( !ui().Ask( _( "Matchmaker detected" ), msg ) ) return; } if ( curbattle != 0 && curbattle->GetID() == battle.GetID() ) { ui().mw().GetJoinTab().FocusBattleRoomTab(); return; } if ( curbattle != 0 ) { if ( ui().Ask( _( "Already in another battle" ), _( "You are already in a battle.\n\nDo you want to leave your current battle and join this one?" ) ) ) { curbattle->Leave(); ui().mw().GetJoinTab().LeaveCurrentBattle(); } else { return; } } const wxString downloadProc = _( "Should I try to download it for you?\nYou'll be notified once it's complete" ); if ( !battle.ModExists() ) { if ( customMessageBox( SL_MAIN_ICON, _( "You need to download the game before you can join this game.\n\n" ) + downloadProc, _( "Game not available" ), wxYES_NO | wxICON_QUESTION ) == wxYES ) { wxString modhash = battle.GetHostModHash(); wxString modname = battle.GetHostModName(); ui().DownloadMod ( modhash, modname ); } else return; } if ( !battle.MapExists() ) { if ( customMessageBox( SL_MAIN_ICON, _( "You need to download the map to be able to play in this game.\n\n" ) + downloadProc, _( "Map not available" ), wxYES_NO | wxICON_QUESTION ) == wxYES ) { wxString maphash = battle.GetHostMapHash(); wxString mapname = battle.GetHostMapName(); ui().DownloadMap ( maphash, mapname ); } else return; } if ( battle.IsPassworded() ) { wxPasswordEntryDialog pw( this, _( "Battle password" ), _( "Enter password (spaces will be stripped)" ) ); pw.SetFocus(); if ( pw.ShowModal() == wxID_OK ) { wxString password = pw.GetValue(); password.Replace(_T(" "), _T("")); battle.Join( password ); } } else { battle.Join(); } } void BattleListTab::OnSelect( wxListEvent& event ) { wxLogDebugFunc( _T( "" ) ); if ( event.GetIndex() == -1 ) { SelectBattle( 0 ); } else { IBattle* b = ( m_battle_list->GetDataFromIndex( event.GetIndex() ) ) ; SelectBattle( b );// } } void BattleListTab::OnUnitsyncReloaded( GlobalEvents::GlobalEventData /*data*/ ) { if ( ! serverSelector().GetServerStatus() ) return; UpdateList(); } void BattleListTab::UpdateHighlights() { m_battle_list->RefreshVisibleItems(); } void BattleListTab::SortBattleList() { m_battle_list->SortList(); } void BattleListTab::ShowExtendedInfos( bool show ) { const bool recursive = true; m_main_sizer->Show( m_info_sizer, show, recursive ); m_main_sizer->Show( m_buttons_sep, show, recursive ); m_info_show->SetValue( show ); Layout(); } void BattleListTab::OnInfoShow( wxCommandEvent& /*unused*/ ) { ShowExtendedInfos( m_info_show->GetValue() ); } void BattleListTab::OnResize( wxSizeEvent& event ) { SetSize( event.GetSize() ); Layout(); // window too small, hide additional infos ShowExtendedInfos( ( GetClientSize().GetHeight() > 400 ) ); } springlobby-0.169/src/battlelist/battlelisttab.h0000600000176000000410000000667012105760300023375 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_BATTLELISTTAB_H #define SPRINGLOBBY_HEADERGUARD_BATTLELISTTAB_H #include #include "utils/isink.h" #include "utils/mixins.hh" class User; class Ui; class IBattle; class Battle; class BattleListCtrl; class BattleListFilter; class MapCtrl; class NickListCtrl; class wxCommandEvent; class wxListEvent; class wxStaticText; class wxComboBox; class wxButton; class wxBoxSizer; class wxStaticText; class wxStaticLine; class wxCheckBox; class wxToggleButton; class wxFlexGridSizer; /** \brief The panel containing a BattleListCtrl and a BattleListFilter * \todo DOCME */ class BattleListTab : public wxScrolledWindow, public UnitsyncReloadedSink, public SL::NonCopyable { friend class BattleListFilter; public: BattleListTab( wxWindow* parent ); ~BattleListTab(); void OnConnected(); void AddBattle( IBattle& battle ); void RemoveBattle( IBattle& battle ); void UpdateBattle( IBattle& battle ); void UserUpdate( User& user ); void RemoveAllBattles(); void UpdateList(); void SelectBattle( IBattle* battle ); void OnHost( wxCommandEvent& event ); void OnFilter( wxCommandEvent& event ); void OnInfoShow( wxCommandEvent& event ); void OnFilterActiv( wxCommandEvent& event ); void SetFilterActiv(bool activ); void OnJoin( wxCommandEvent& event ); void OnListJoin( wxListEvent& event ); void OnResize( wxSizeEvent& event ); void ShowExtendedInfos( bool show ); void DoJoin( Battle& battle ); void OnSelect( wxListEvent& event ); void OnUnitsyncReloaded( GlobalEvents::GlobalEventData data ); void UpdateHighlights(); void SortBattleList(); protected: BattleListFilter* m_filter; BattleListCtrl* m_battle_list; MapCtrl* m_minimap; wxStaticText* m_map_lbl; wxStaticText* m_map_text; wxStaticText* m_mod_lbl; wxStaticText* m_mod_text; wxStaticText* m_players_lbl; wxStaticText* m_players_text; wxStaticText* m_spec_lbl; wxStaticText* m_spec_text; wxStaticText* m_battle_num; NickListCtrl* m_players; wxStaticLine* m_buttons_sep; wxButton* m_host_btn; wxButton* m_join_btn; wxBoxSizer* m_battlelist_sizer; wxFlexGridSizer* m_data_sizer; wxBoxSizer* m_main_sizer; wxBoxSizer* m_info_sizer; wxCheckBox* m_filter_activ; #if wxUSE_TOGGLEBTN wxToggleButton* m_filter_show; wxToggleButton* m_info_show; #else wxCheckBox* m_filter_show; wxCheckBox* m_info_show; #endif IBattle* m_sel_battle; void SetNumDisplayed(); enum { BATTLE_JOIN = wxID_HIGHEST, BATTLE_HOST, BATTLE_LIST, BATTLE_LIST_FILTER_BUTTON, BATTLE_LIST_INFO_BUTTON, BATTLE_LIST_FILTER_ACTIV }; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_BATTLELISTTAB_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/bimap.h0000600000176000000410000021250312105760300017452 0ustar buildbotwww-data00000000000000/* STL-like bidirectional map. * * (C) 2002-2006 Joaqun M Lpez Muoz (joaquin@tid.es). All rights reserved. * * Permission is granted to use, distribute and modify this code provided that: * this copyright notice remain unchanged, * you submit all changes to the copyright holder and properly mark the * changes so they can be told from the original code, * credits are given to the copyright holder in the documentation of any * software using this code with the following line: * "Portions copyright 2002-2006 Joaqun M Lpez Muoz (joaquin@tid.es)" * * The author welcomes any suggestions on the code or reportings of actual * use of the code. Please send your comments to joaquin@tid.es. * * The author makes NO WARRANTY or representation, either express or implied, * with respect to this code, its quality, accuracy, merchantability, or * fitness for a particular purpose. This software is provided "AS IS", and * you, its user, assume the entire risk as to its quality and accuracy. * * Changes in v1.1: * * bimap::erase(to::iterator,to::iterator) incorrectly returned an * iterator. Documentation was also erroneous about this point. * Incorrect use of allocator::allocate and allocator::deallocate * was causing much more memory to be used than necessary. * Improved language conformance with respect to missing typename * and template keywords, faulty friend declarations and broken * implementation of some features of in MSVC++. * allocator::rebind used if compiler supports it. * Fixed some non-conformances about construction of allocator * and comparison objects in copy contructors. * The allocator object used to be protected for no good reason: * changed to private as the rest of internal objects. * Some tweaks to make the thing compile under GNU GCC and Metrowerks * CodeWarrior. * GCC didn't like a template parameter and a defined type to have * the same name: I don't know if this is actually standard conformant. * * Changes in v1.2: * * Fixed the code to make it work under MSVC 7.1. Contributed by * Steve Robb. * * Changes in v1.3: * * Fixed some incorrect (standardwise) friend declarations. * Sprinkled this-> throughout to cope with two-phase name lookup. * * Last modified: October 26th, 2006 */ #ifndef BIMAP_H_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761 #define BIMAP_H_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761 #define VERSION_BIMAP_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761 0x00010003 #ifdef _MSC_VER #pragma warning(disable:4786) #endif #include #include #include #include #include #include #include /* offsetof cannot be used on non-POD types (standard 18.1.5) altough bimap * does it in a safe manner. Starting with GCC 3.1, an annoying warning is * issued in this situation. Workarounded it thanks to a tip by Andrew Pollard. */ #if defined(__GNUC__)&&(__GNUC__>3||(__GNUC__==3&&__GNUC_MINOR__>= 1)) #define BIMAP_OFFSETOF_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761(type,member) \ (__extension__ \ ( \ { \ type* t=0; \ reinterpret_cast( \ reinterpret_cast( \ &(t->member) \ ) \ ); \ } \ ) \ ) #else #define BIMAP_OFFSETOF_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761(type,member) offsetof(type,member) #endif /* MSVC++ 6.0 do not support allocator::rebind; in these cases, the only * option is use the original allocator_type unrebound, which VC++ 6.0 * accepts merrily nevertheless. */ #if defined(_MSC_VER)&&_MSC_VER==1200 /* MSVC++ 6.0 */ #define BIMAP_REBIND_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761(type1,type2) type1 #else #define BIMAP_REBIND_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761(type1,type2) \ typename type1::template rebind::other #endif namespace codeproject{ namespace bimap_detail{ /* Template helper to check for type equality (save possibly constness.) * Refs: * Alexandrescu, A.: Modern C++ Design: Generic Programming and Design * Patterns Applied, ch. 2, Addison-Wesley, February 2001. * Boost, type_traits library, boost::is_same template, * April 2001, http://boost.org/libs/type_traits/index.htm. */ typedef char equal_types_yes; struct equal_types_no {char m[2];}; equal_types_no equal_types_helper(...); template equal_types_yes equal_types_helper(T,T); template struct equal_types_ptr { static const T* make(); }; template struct equal_types { enum{ value= (sizeof(equal_types_helper(equal_types_ptr::make(),equal_types_ptr::make()))== sizeof(equal_types_yes))}; }; /* Template stuff to select one or other type based on a compile-time * condition. This can be used to simulate PTS through derivation. * Refs: * Marcus, M., Jones, J.: "Simulated partial Specialization for C++", * September 2000, http://opensource.adobe.com/project4/project.shtml * Czarnecki, K., Eisenecker, U.: Generative Programming - Methods, Tools, * and Applications, Addison-Wesley, June 2000. */ struct select_then { template struct result { typedef then type; }; }; struct select_else { template struct result { typedef els type; }; }; template struct selector_switch { typedef select_then result; }; template<> struct selector_switch { typedef select_else result; }; template struct select { typedef typename selector_switch::result sel; typedef typename sel::template result::type result; }; } /* namespace bimap_detail */ /* inv_pair provides the symmetrical counterpart to std::pair necessary for * the to memberspace of bimap. Its layout matches that of std::pair in the * sense that an inv_pair can be reinterpret_cast'ed to be an std::pair. * To preserve symmetry, std::pair's should provide the corresponding casting * operator to inv_pair. As this is not feasible (predefined classes cannot be * injected this type of operators), a derivation of std::pair called * direct_pair is defined that plays the role of std::pair. */ #if defined(_MSC_VER)&&_MSC_VER>=1300 /* MSVC++ 7.0 */ #pragma warning(push) #pragma warning(disable:4512) /* see http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q87638 */ #endif template struct direct_pair; template struct inv_pair { typedef first_type_ first_type; typedef second_type_ second_type; second_type second; first_type first; inv_pair():second(second_type()),first(first_type()){} inv_pair(const first_type& first,const second_type& second):second(second),first(first){} inv_pair(const std::pair& r):second(r.second),first(r.first){} template inv_pair(const inv_pair& r):second(r.second),first(r.first){} operator direct_pair&() { return *reinterpret_cast *>(this); } operator const direct_pair&()const { return *reinterpret_cast *>(this); } }; template struct direct_pair:public std::pair { private: typedef std::pair super; public: direct_pair():super(first_type(),second_type()){} direct_pair(const first_type& first,const second_type& second):super(first,second){} direct_pair(const inv_pair& r):super(r.first,r.second){} template direct_pair(const std::pair& r):super(r.first,r.second){} operator inv_pair&() { return *reinterpret_cast *>(this); } operator const inv_pair&()const { return *reinterpret_cast *>(this); } }; #if defined(_MSC_VER)&&_MSC_VER>=1300 /* MSVC++ 7.0 */ #pragma warning(pop) #endif template inv_pair make_inv_pair( const first_type& first, const second_type& second) { return inv_pair(first,second); } /* comparison operators for inv_pair */ /* == */ template bool operator==( const inv_pair& x, const inv_pair& y) { return x.first==y.first&&x.second==y.second; } template bool operator==( const inv_pair& x, const std::pair& y) { return x.first==y.first&&x.second==y.second; } template bool operator==( const std::pair& x, const inv_pair& y) { return x.first==y.first&&x.second==y.second; } /* != */ template bool operator!=( const inv_pair& x, const inv_pair& y) { return !(x==y); } template bool operator!=( const inv_pair& x, const std::pair& y) { return !(x==y); } template bool operator!=( const std::pair& x, const inv_pair& y) { return !(x==y); } /* < */ template bool operator<( const inv_pair& x, const inv_pair& y) { return x.first bool operator<( const inv_pair& x, const std::pair& y) { return x.first bool operator<( const std::pair& x, const inv_pair& y) { return x.first */ template bool operator>( const inv_pair& x, const inv_pair& y) { return y bool operator>( const inv_pair& x, const std::pair& y) { return y bool operator>( const std::pair& x, const inv_pair& y) { return y bool operator<=( const inv_pair& x, const inv_pair& y) { return !(y bool operator<=( const inv_pair& x, const std::pair& y) { return !(y bool operator<=( const std::pair& x, const inv_pair& y) { return !(y= */ template bool operator>=( const inv_pair& x, const inv_pair& y) { return !(x bool operator>=( const inv_pair& x, const std::pair& y) { return !(x bool operator>=( const std::pair& x, const inv_pair& y) { return !(x class from_binding { public: from_binding(bimap_type& bm,const typename bimap_type::from_type& f):bm(bm),f(f){} const typename bimap_type::to_type& get()const { typename bimap_type::from_set::const_iterator it=bm.fset.find(&f); if(it==bm.fset.end())throw value_not_found(); return bimap_type::element_by_from(*it)->second; } operator const typename bimap_type::to_type&()const { return get(); } from_binding& operator=(const typename bimap_type::to_type& t) { /* MSVC++ chokes if a ctor for typename bimap_type::element * is called directly. */ typedef typename bimap_type::element bimap_element; typename bimap_type::fset_iterator fit=bm.fset.find(&f); typename bimap_type::tset_iterator tit=bm.tset.find(&t); if(tit!=bm.tset.end()){ /* v.second shouldn't be already in */ /* small chance the pair (f,t) is already inserted */ if(fit!=bm.fset.end()&& bimap_type::element_by_from(*fit)==bimap_type::element_by_to(*tit)){ return *this; } else throw duplicate_value(); } bimap_element * pne=0; typename bimap_type::tset_iterator tnit=bm.tset.end(); try{ pne=bm.new_element(bimap_element(f,t)); tnit=bm.tset.insert(&pne->second).first; if(fit==bm.fset.end()){ bm.fset.insert(&pne->first); return *this; } else{ // rebound fit bimap_element * pe=bimap_type::element_by_from(*fit); bm.tset.erase(bm.tset.find(&pe->second)); bm.delete_element(pe); const_cast(*fit)= &const_cast(pne->first); return *this; } }catch(...){ if(tnit!=bm.tset.end())bm.tset.erase(tnit); if(pne)bm.delete_element(pne); throw; } } private: from_binding& operator=(const from_binding&); bimap_type& bm; const typename bimap_type::from_type f; }; template class const_from_binding { public: const_from_binding(const bimap_type& bm,const typename bimap_type::from_type& f): bm(bm),f(f) {} const typename bimap_type::to_type& get()const { typename bimap_type::from_set::const_iterator it=bm.fset.find(&f); if(it==bm.fset.end())throw value_not_found(); return bimap_type::element_by_from(*it)->second; } operator const typename bimap_type::to_type&()const { return get(); } private: const_from_binding& operator=(const const_from_binding&); const bimap_type& bm; const typename bimap_type::from_type f; }; template class to_binding { public: to_binding(bimap_type& bm,const typename bimap_type::to_type& t):bm(bm),t(t){} const typename bimap_type::from_type& get()const { typename bimap_type::to_set::const_iterator it=bm.tset.find(&t); if(it==bm.tset.end())throw value_not_found(); return bimap_type::element_by_to(*it)->first; } operator const typename bimap_type::from_type&()const { return get(); } to_binding& operator=(const typename bimap_type::from_type& f) { /* MSVC++ chokes if a ctor for typename bimap_type::element * is called directly. */ typedef typename bimap_type::element bimap_element; typename bimap_type::tset_iterator tit=bm.tset.find(&t); typename bimap_type::fset_iterator fit=bm.fset.find(&f); if(fit!=bm.fset.end()){ /* v.second shouldn't be already in */ /* small chance the pair (f,t) is already inserted */ if(tit!=bm.tset.end()&& bimap_type::element_by_to(*tit)==bimap_type::element_by_from(*fit)){ return *this; } else throw duplicate_value(); } bimap_element * pne=0; typename bimap_type::fset_iterator fnit=bm.fset.end(); try{ pne=bm.new_element(bimap_element(f,t)); fnit=bm.fset.insert(&pne->first).first; if(tit==bm.tset.end()){ bm.tset.insert(&pne->second); return *this; } else{ // rebound tit bimap_element * pe=bimap_type::element_by_to(*tit); bm.fset.erase(bm.fset.find(&pe->first)); bm.delete_element(pe); const_cast(*tit)= &const_cast(pne->second); return *this; } }catch(...){ if(fnit!=bm.fset.end())bm.fset.erase(fnit); if(pne)bm.delete_element(pne); throw; } } private: to_binding& operator=(const to_binding&); bimap_type& bm; const typename bimap_type::to_type t; }; template class const_to_binding { public: const_to_binding(const bimap_type& bm,const typename bimap_type::to_type& t): bm(bm),t(t) {} const typename bimap_type::from_type& get()const { typename bimap_type::to_set::const_iterator it=bm.tset.find(&t); if(it==bm.tset.end())throw value_not_found(); return bimap_type::element_by_to(*it)->first; } operator const typename bimap_type::from_type&()const { return get(); } private: const_to_binding& operator=(const const_to_binding&); const bimap_type& bm; const typename bimap_type::to_type t; }; }; /* prebimap holds the entire code for bimap except for the * global memberspace, which is constructed via simulated PTS * in bimap (derived from prebimap). */ template< typename from_type_,typename to_type_, typename from_compare,typename to_compare, typename allocator_type_> class prebimap:public bimap_base { private: /* Data structure. The bidirectional map is implemented with two sets * fset and tset indexing the corresponding members of elements of type * direct_pair. */ typedef from_type_ from_type; typedef to_type_ to_type; template struct p_compare /* pointer compare based on value compare */ { p_compare(const compare& c=compare()):c(c){} bool operator()(const type* p1,const type* p2)const{return c(*p1,*p2);} compare get_compare()const{return c;} private: compare c; }; typedef std::set< const from_type*, p_compare< from_type, from_compare>, BIMAP_REBIND_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761(allocator_type_,const from_type*)> from_set; typedef std::set< const to_type*, p_compare< to_type, to_compare>, BIMAP_REBIND_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761(allocator_type_,const to_type*)> to_set; typedef typename from_set::allocator_type fset_allocator_type; typedef typename to_set::allocator_type tset_allocator_type; typedef typename from_set::iterator fset_iterator; typedef typename from_set::const_iterator const_fset_iterator; typedef typename to_set::iterator tset_iterator; typedef typename to_set::const_iterator const_tset_iterator; typedef direct_pair< const from_type, const to_type> element; allocator_type_ allocator; from_set fset; to_set tset; /* Basic data management */ /* new_element and delete_element deal only with allocation/ * deallocation of elements, i.e. they do not update fset and tset. */ element * new_element(const element& e) { element * pe=allocator.allocate(1,0); try{ allocator.construct(pe,e); }catch(...){ allocator.destroy(pe); throw; } return pe; } void delete_element(element *pe) { allocator.destroy(pe); allocator.deallocate(pe,1); } static element * element_by_from(const from_type* pf) { return reinterpret_cast( reinterpret_cast( const_cast(pf))- BIMAP_OFFSETOF_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761(element,first)); } static element * element_by_to(const to_type* pt) { return reinterpret_cast( reinterpret_cast( const_cast(pt))- BIMAP_OFFSETOF_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761(element,second)); } public: /* memberspace from */ class from_impl { public: /* assigning a from_impl object is the same as assigning its owner */ from_impl& operator=(const from_impl& r) { prebimap tmp(r.owner()); swap(tmp.from); return *this; } /* Comparison */ bool operator==(const from_impl& r)const { return size()==r.size()&&std::equal(begin(),end(),r.begin()); } bool operator!=(const from_impl& r)const { return !(*this==r); } bool operator<(const from_impl& r)const { return std::lexicographical_compare( begin(),end(),r.begin(),r.end()); } bool operator>(const from_impl& r)const { return r<*this; } bool operator<=(const from_impl& r)const { return !(r<*this); } bool operator>=(const from_impl& r)const { return !(*this value_type; /* value_compare lexicographically orders value_type's. This is * compatible with the weaker value_compare implemented by maps. */ class value_compare:public std::binary_function { public: bool operator()(const value_type& x,const value_type& y) { if(kcomp(x.first,y.first))return true; if(kcomp(y.first,x.first))return false; return tcomp(x.second,y.second); } protected: value_compare(key_compare kcomp,to_compare tcomp):kcomp(kcomp),tcomp(tcomp){} key_compare kcomp; to_compare tcomp; }; typedef typename allocator_type_::size_type size_type; typedef typename allocator_type_::difference_type difference_type; typedef value_type * pointer; typedef const value_type * const_pointer; typedef value_type& reference; typedef const value_type& const_reference; /* Iterators */ class const_iterator; class iterator:public std::iterator { friend class from_impl; friend class const_iterator; friend class prebimap; #if defined(_MSC_VER)&&_MSC_VER==1200 /* MSVC++ 6.0 */ /* MSVC++ 6.0 fails to define reference in std::iterator */ typedef const value_type& reference; #endif public: iterator(){} #ifdef __MWERKS__ /* strange bug */ typename reference operator*()const{return *element_by_from(*fit);} typename value_type * operator->()const{return &operator*();} #else typename iterator::reference operator*()const{return *element_by_from(*fit);} typename iterator::value_type * operator->()const{return &operator*();} #endif iterator& operator++(){++fit;return *this;} const iterator operator++(int){const iterator tmp=*this;++*this;return tmp;} iterator& operator--(){--fit;return *this;} const iterator operator--(int){const iterator tmp=*this;--*this;return tmp;} bool operator==(const iterator& it)const{return fit==it.fit;} bool operator!=(const iterator& it)const{return !(*this==it);} private: iterator(const fset_iterator& fit):fit(fit){} fset_iterator fit; }; class const_iterator:public std::iterator { friend class from_impl; friend class prebimap; #if defined(_MSC_VER)&&_MSC_VER==1200 /* MSVC++ 6.0 */ /* MSVC++ 6.0 fails to define reference in std::iterator */ typedef const value_type& reference; #endif public: const_iterator(){} const_iterator(const iterator& it):fit(it.fit){} #ifdef __MWERKS__ /* strange bug */ typename reference operator*()const{return *element_by_from(*fit);} const typename value_type * operator->()const{return &operator*();} #else typename const_iterator::reference operator*()const{return *element_by_from(*fit);} const typename const_iterator::value_type * operator->()const{return &operator*();} #endif const_iterator& operator++(){++fit;return *this;} const const_iterator operator++(int){const const_iterator tmp=*this;++*this;return tmp;} const_iterator& operator--(){--fit;return *this;} const const_iterator operator--(int){const const_iterator tmp=*this;--*this;return tmp;} bool operator==(const const_iterator& it)const{return fit==it.fit;} bool operator!=(const const_iterator& it)const{return !(*this==it);} private: const_iterator(const const_fset_iterator& fit):fit(fit){} const_fset_iterator fit; }; #if defined(_MSC_VER)&&_MSC_VER==1200 /* MSVC++ 6.0 */ typedef std::reverse_bidirectional_iterator< const_iterator, const value_type, const_reference, const value_type *, difference_type> reverse_iterator; #else typedef std::reverse_iterator reverse_iterator; #endif typedef reverse_iterator const_reverse_iterator; /* Iterator retrieval methods */ iterator begin(){return iterator(owner().fset.begin());} const_iterator begin()const{return const_iterator(owner().fset.begin());} iterator end(){return iterator(owner().fset.end());} const_iterator end()const{return const_iterator(owner().fset.end());} reverse_iterator rbegin(){return reverse_iterator(end());} const_reverse_iterator rbegin()const{return const_reverse_iterator(end());} reverse_iterator rend(){return reverse_iterator(begin());} const_reverse_iterator rend()const{return const_reverse_iterator(begin());} /* Utility standard methods */ size_type size()const{return owner().fset.size();} size_type max_size()const{return owner().fset.max_size();} bool empty()const{return owner().fset.empty();} allocator_type get_allocator()const{return owner().allocator;} /* operator []. Uses wrapper classes from_binding and const_from_binding. */ from_binding > operator[](const from_type_& f) { return from_binding > (owner(),f); } const_from_binding > operator[](const from_type_& f)const { return const_from_binding > (owner(),f); } /* Insertion and erasing */ std::pair insert(const value_type& x) { fset_iterator fit=owner().fset.find(&x.first); if(fit!=owner().fset.end()){ return std::make_pair(iterator(fit),false); } tset_iterator tit=owner().tset.find(&x.second); if(tit!=owner().tset.end())throw duplicate_value(); element * pe=0; tset_iterator tnit=owner().tset.end(); fset_iterator fnit=owner().fset.end(); try{ pe=owner().new_element(x); tnit=owner().tset.insert(&pe->second).first; fnit=owner().fset.insert(&pe->first).first; }catch(...){ if(tnit!=owner().tset.end())owner().tset.erase(tnit); if(pe)owner().delete_element(pe); throw; } return std::make_pair(iterator(fnit),true); } iterator insert(iterator it,const value_type& x) { if(!adjacent(it.fit,x.first))return insert(x).first; tset_iterator tit=owner().tset.find(&x.second); if(tit!=owner().tset.end())throw duplicate_value(); element * pe=0; tset_iterator tnit=owner().tset.end(); fset_iterator fnit=owner().fset.end(); try{ pe=owner().new_element(x); tnit=owner().tset.insert(&pe->second).first; fnit=owner().fset.insert(it.fit,&pe->first); }catch(...){ if(tnit!=owner().tset.end())owner().tset.erase(tnit); if(pe)owner().delete_element(pe); throw; } return iterator(fnit); } template void insert(it_type first,it_type last) { while(first!=last){ insert(*first); ++first; } } #ifdef _MSC_VER /* The standard says the return type for iterator-based erases * in associative containers is void. Strangely enough, VC++ * implementation returns an iterator. We keep the iterator return * for the first version of erase. */ iterator erase(iterator it) { fset_iterator& fit=it.fit; element * pe=element_by_from(*fit); tset_iterator tit=owner().tset.find(&pe->second); owner().delete_element(pe); owner().tset.erase(tit); return(iterator(owner().fset.erase(fit))); } #else void erase(iterator it) { fset_iterator& fit=it.fit; element * pe=element_by_from(*fit); tset_iterator tit=owner().tset.find(&pe->second); owner().delete_element(pe); owner().tset.erase(tit); owner().fset.erase(fit); } #endif void erase(iterator first,iterator last) { while(first!=last)erase(first++); } size_type erase(const key_type& key) { fset_iterator fit=owner().fset.find(&key); if(fit==owner().fset.end())return 0; element * pe=element_by_from(*fit); owner().tset.erase(owner().tset.find(&pe->second)); owner().fset.erase(fit); owner().delete_element(pe); return 1; } void clear() { erase(begin(),end()); } void swap(from_impl& x) { /* assumes allocator equivalence */ owner().fset.swap(x.owner().fset); owner().tset.swap(x.owner().tset); } /* Search methods */ key_compare key_comp()const { return owner().fset.key_comp().get_compare(); } value_compare value_comp()const { return value_compare( owner().fset.key_comp().get_compare(), owner().tset.key_comp().get_compare()); } iterator find(const key_type& key) { return iterator(owner().fset.find(&key)); } const_iterator find(const key_type& key)const { return const_iterator(owner().fset.find(&key)); } size_type count(const key_type& key)const { return owner().fset.count(&key); } iterator lower_bound(const key_type& key) { return iterator(owner().fset.lower_bound(&key)); } const_iterator lower_bound(const key_type& key)const { return const_iterator(owner().fset.lower_bound(&key)); } iterator upper_bound(const key_type& key) { return iterator(owner().fset.upper_bound(&key)); } const_iterator upper_bound(const key_type& key)const { return const_iterator(owner().fset.upper_bound(&key)); } std::pair equal_range(const key_type& key) { return std::make_pair(lower_bound(key),upper_bound(key)); } std::pair equal_range(const key_type& key)const { return std::make_pair(lower_bound(key),upper_bound(key)); } protected: from_impl(){} from_impl(const from_impl&); prebimap& owner() { return *reinterpret_cast( reinterpret_cast(this)- BIMAP_OFFSETOF_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761(prebimap,from)); }; const prebimap& owner()const { return *reinterpret_cast( reinterpret_cast(this)- BIMAP_OFFSETOF_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761(prebimap,from)); }; bool adjacent(const_fset_iterator fit,const from_type_& f)const { if(fit==owner().fset.end()){ if(owner().fset.size()==0)return true; const_fset_iterator fit2=fit; --fit2; return owner().fset.key_comp()(*fit2,&f); } else if(owner().fset.key_comp()(&f,*fit)){ if(fit==owner().fset.begin())return true; const_fset_iterator fit2=fit; --fit2; return owner().fset.key_comp()(*fit2,&f); } else if(owner().fset.key_comp()(*fit,&f)){ const_fset_iterator fit2=fit; ++fit2; if(fit2==owner().fset.end())return true; return owner().fset.key_comp()(&f,*fit2); } else return false; } }; friend class from_impl; class from:public from_impl { friend class prebimap; public: friend void swap(from& x,from& y) { x.swap(y); } }from; /* from memberspace */ #ifdef __MWERKS__ /* strange bug */ friend class from_impl::iterator; friend class from_impl::const_iterator; #elif defined(_MSC_VER) friend typename from::iterator; friend typename from::const_iterator; #endif friend class from_binding; friend class const_from_binding; /* memberspace to, symetrical to from */ class to_impl { public: to_impl& operator=(const to_impl& r) { prebimap tmp(r.owner()); swap(tmp.to); return *this; } /* Comparison */ bool operator==(const to_impl& r)const { return size()==r.size()&&std::equal(begin(),end(),r.begin()); } bool operator!=(const to_impl& r)const { return !(*this==r); } bool operator<(const to_impl& r)const { return std::lexicographical_compare( begin(),end(),r.begin(),r.end()); } bool operator>(const to_impl& r)const { return r<*this; } bool operator<=(const to_impl& r)const { return !(r<*this); } bool operator>=(const to_impl& r)const { return !(*this value_type; class value_compare:public std::binary_function { public: bool operator()(const value_type& x,const value_type& y) { if(kcomp(x.first,y.first))return true; if(kcomp(y.first,x.first))return false; return fcomp(x.second,y.second); } protected: value_compare(key_compare kcomp,from_compare fcomp):kcomp(kcomp),fcomp(fcomp){} key_compare kcomp; from_compare fcomp; }; typedef typename allocator_type_::size_type size_type; typedef typename allocator_type_::difference_type difference_type; typedef value_type * pointer; typedef const value_type * const_pointer; typedef value_type& reference; typedef const value_type& const_reference; /* Iterators */ class const_iterator; class iterator:public std::iterator { friend class to_impl; friend class const_iterator; friend class prebimap; #if defined(_MSC_VER)&&_MSC_VER==1200 /* MSVC++ 6.0 */ /* MSVC++ 6.0 fails to define reference in std::iterator */ typedef const value_type& reference; #endif public: iterator(){} #ifdef __MWERKS__ /* strange bug */ typename reference operator*()const{return *element_by_to(*tit);} typename value_type * operator->()const{return &operator*();} #else typename iterator::reference operator*()const{return *element_by_to(*tit);} typename iterator::value_type * operator->()const{return &operator*();} #endif iterator& operator++(){++tit;return *this;} const iterator operator++(int){const iterator tmp=*this;++*this;return tmp;} iterator& operator--(){--tit;return *this;} const iterator operator--(int){const iterator tmp=*this;--*this;return tmp;} bool operator==(const iterator& it)const{return tit==it.tit;} bool operator!=(const iterator& it)const{return !(*this==it);} private: iterator(const tset_iterator& tit):tit(tit){} tset_iterator tit; }; class const_iterator:public std::iterator { friend class to_impl; friend class prebimap; #if defined(_MSC_VER)&&_MSC_VER==1200 /* MSVC++ 6.0 */ /* MSVC++ 6.0 fails to define reference in std::iterator */ typedef const value_type& reference; #endif public: const_iterator(){} const_iterator(const iterator& it):tit(it.tit){} #ifdef __MWERKS__ /* strange bug */ typename reference operator*()const{return *element_by_to(*tit);} const typename value_type * operator->()const{return &operator*();} #else typename const_iterator::reference operator*()const{return *element_by_to(*tit);} const typename const_iterator::value_type * operator->()const{return &operator*();} #endif const_iterator& operator++(){++tit;return *this;} const const_iterator operator++(int){const const_iterator tmp=*this;++*this;return tmp;} const_iterator& operator--(){--tit;return *this;} const const_iterator operator--(int){const const_iterator tmp=*this;--*this;return tmp;} bool operator==(const const_iterator& it)const{return tit==it.tit;} bool operator!=(const const_iterator& it)const{return !(*this==it);} private: const_iterator(const const_tset_iterator& tit):tit(tit){} const_tset_iterator tit; }; #if defined(_MSC_VER)&&_MSC_VER==1200 /* MSVC++ 6.0 */ typedef std::reverse_bidirectional_iterator< const_iterator, const value_type, const_reference, const value_type *, difference_type> reverse_iterator; #else typedef std::reverse_iterator reverse_iterator; #endif typedef reverse_iterator const_reverse_iterator; /* Iterator retrieval methods */ iterator begin(){return iterator(owner().tset.begin());} const_iterator begin()const{return const_iterator(owner().tset.begin());} iterator end(){return iterator(owner().tset.end());} const_iterator end()const{return const_iterator(owner().tset.end());} reverse_iterator rbegin(){return reverse_iterator(end());} const_reverse_iterator rbegin()const{return const_reverse_iterator(end());} reverse_iterator rend(){return reverse_iterator(begin());} const_reverse_iterator rend()const{return const_reverse_iterator(begin());} /* Utility standard methods */ size_type size()const{return owner().tset.size();} size_type max_size()const{return owner().tset.max_size();} bool empty()const{return owner().tset.empty();} allocator_type get_allocator()const{return owner().allocator;} /* operator []. Uses wrapper classes to_binding and const_to_binding. */ to_binding > operator[](const to_type_& t) { return to_binding > (owner(),t); } const_to_binding > operator[](const to_type_& t)const { return const_to_binding > (owner(),t); } /* Insertion and erasing */ std::pair insert(const value_type& x) { tset_iterator tit=owner().tset.find(&x.first); if(tit!=owner().tset.end()){ return std::make_pair(iterator(tit),false); } fset_iterator fit=owner().fset.find(&x.second); if(fit!=owner().fset.end())throw duplicate_value(); element * pe=0; fset_iterator fnit=owner().fset.end(); tset_iterator tnit=owner().tset.end(); try{ pe=owner().new_element(x); fnit=owner().fset.insert(&pe->first).first; tnit=owner().tset.insert(&pe->second).first; }catch(...){ if(fnit!=owner().fset.end())owner().fset.erase(fnit); if(pe)owner().delete_element(pe); throw; } return std::make_pair(iterator(tnit),true); } iterator insert(iterator it,const value_type& x) { if(!adjacent(it.tit,x.first))return insert(x).first; fset_iterator fit=owner().fset.find(&x.second); if(fit!=owner().fset.end())throw duplicate_value(); element * pe=0; fset_iterator fnit=owner().fset.end(); tset_iterator tnit=owner().tset.end(); try{ pe=owner().new_element(x); fnit=owner().fset.insert(&pe->first).first; tnit=owner().tset.insert(it.tit,&pe->second); }catch(...){ if(fnit!=owner().fset.end())owner().fset.erase(fnit); if(pe)owner().delete_element(pe); throw; } return iterator(tnit); } template void insert(it_type first,it_type last) { while(first!=last){ insert(*first); ++first; } } #ifdef _MSC_VER /* see note in from::erase */ iterator erase(iterator it) { tset_iterator& tit=it.tit; element * pe=element_by_to(*tit); fset_iterator fit=owner().fset.find(&pe->first); owner().delete_element(pe); owner().fset.erase(fit); return(iterator(owner().tset.erase(tit))); } #else void erase(iterator it) { tset_iterator& tit=it.tit; element * pe=element_by_to(*tit); fset_iterator fit=owner().fset.find(&pe->first); owner().delete_element(pe); owner().fset.erase(fit); owner().tset.erase(tit); } #endif void erase(iterator first,iterator last) { while(first!=last)erase(first++); } size_type erase(const key_type& key) { tset_iterator tit=owner().tset.find(&key); if(tit==owner().tset.end())return 0; element * pe=element_by_to(*tit); owner().fset.erase(owner().fset.find(&pe->first)); owner().tset.erase(tit); owner().delete_element(pe); return 1; } void clear() { erase(begin(),end()); } void swap(to_impl& x) { /* assumes allocator equivalence */ owner().tset.swap(x.owner().tset); owner().fset.swap(x.owner().fset); } /* Search methods */ key_compare key_comp()const { return owner().tset.key_comp().get_compare(); } value_compare value_comp()const { return value_compare( owner().tset.key_comp().get_compare(), owner().fset.key_comp().get_compare()); } iterator find(const key_type& key) { return iterator(owner().tset.find(&key)); } const_iterator find(const key_type& key)const { return const_iterator(owner().tset.find(&key)); } size_type count(const key_type& key)const { return owner().tset.count(&key); } iterator lower_bound(const key_type& key) { return iterator(owner().tset.lower_bound(&key)); } const_iterator lower_bound(const key_type& key)const { return const_iterator(owner().tset.lower_bound(&key)); } iterator upper_bound(const key_type& key) { return iterator(owner().tset.upper_bound(&key)); } const_iterator upper_bound(const key_type& key)const { return const_iterator(owner().tset.upper_bound(&key)); } std::pair equal_range(const key_type& key) { return std::make_pair(lower_bound(key),upper_bound(key)); } std::pair equal_range(const key_type& key)const { return std::make_pair(lower_bound(key),upper_bound(key)); } protected: to_impl(){} to_impl(const to_impl&); prebimap& owner() { return *reinterpret_cast( reinterpret_cast(this)- BIMAP_OFFSETOF_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761(prebimap,to)); }; const prebimap& owner()const { return *reinterpret_cast( reinterpret_cast(this)- BIMAP_OFFSETOF_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761(prebimap,to)); }; bool adjacent(const_tset_iterator tit,const to_type_& t)const { if(tit==owner().tset.end()){ if(owner().tset.size()==0)return true; const_tset_iterator tit2=tit; --tit2; return owner().tset.key_comp()(*tit2,&t); } else if(owner().tset.key_comp()(&t,*tit)){ if(tit==owner().tset.begin())return true; const_tset_iterator tit2=tit; --tit2; return owner().tset.key_comp()(*tit2,&t); } else if(owner().tset.key_comp()(*tit,&t)){ const_tset_iterator tit2=tit; ++tit2; if(tit2==owner().tset.end())return true; return owner().tset.key_comp()(&t,*tit2); } else return false; } }; friend class to_impl; class to:public to_impl { friend class prebimap; public: friend void swap(to& x,to& y) { x.swap(y); } }to; /* to memberspace */ #ifdef __MWERKS__ /* strange bug */ friend class to_impl::iterator; friend class to_impl::const_iterator; #elif defined(_MSC_VER) friend typename to::iterator; friend typename to::const_iterator; #endif friend class to_binding; friend class const_to_binding; /* Double-hint insertion. This does not naturally belong into any * memberspace. */ std::pair insert( typename from_impl::iterator fit,typename to_impl::iterator tit, const typename from_impl::value_type& x) { typedef typename from_impl::iterator from_iterator; typedef typename to_impl::iterator to_iterator; if(!from.adjacent(fit.fit,x.first)){ fit=fset.find(&x.first); if(fit!=fset.end()){ /* small chance x is already inserted */ tset_iterator tnit=tset.find(&x.second); if(tnit!=tset.end()&&element_by_from(*(fit.fit))==element_by_to(*tnit)){ return std::make_pair(fit,to_iterator(tnit)); } else throw duplicate_value(); } } if(!to.adjacent(tit.tit,x.second)){ tit=tset.find(&x.second); if(tit!=tset.end()) throw duplicate_value(); /* no need to check for x being inserted (already done above) */ } element * pe=0; tset_iterator tnit=tset.begin(); fset_iterator fnit=fset.begin(); try{ pe=new_element(x); tnit=tset.insert(tit.tit,&pe->second); fnit=fset.insert(fit.fit,&pe->first); }catch(...){ if(tnit!=tset.end())tset.erase(tnit); if(pe)delete_element(pe); throw; } return std::make_pair(from_iterator(fnit),to_iterator(tnit)); } protected: prebimap( const from_compare& from_comp, const to_compare& to_comp, const allocator_type_& al): allocator(al), fset(p_compare(from_comp),fset_allocator_type(allocator)), tset(p_compare(to_comp),tset_allocator_type(allocator)) {} prebimap(const prebimap& r): allocator(r.allocator), fset(r.fset.key_comp(),fset_allocator_type(allocator)), tset(r.tset.key_comp(),tset_allocator_type(allocator)) { try{ #if defined(_MSC_VER)&&_MSC_VER==1200 /* MSVC++ 6.0 */ /* Amortized constant insertion in VC++ 6.0 happens if hint iterator is * right *after* the insertion point, in disagreement with the standard. */ typename from::iterator fhint=from.end(); typename to::iterator thint=to.end(); for(typename from::const_iterator it=r.from.begin();it!=r.from.end();++it){ insert(fhint,thint,*it); } #else typename from_impl::iterator fhint=from.end(); typename to_impl::iterator thint=to.end(); for(typename from_impl::const_iterator it=r.from.begin();it!=r.from.end();++it){ std::pair p=insert(fhint,thint,*it); fhint=p.first; thint=p.second; } #endif }catch(...){ from.clear(); throw; } } ~prebimap() { for(fset_iterator it=fset.begin();it!=fset.end();++it){ delete_element(element_by_from(*it)); } } }; #ifdef __GNUC__ /* GCC chokes when trying to derive from a template class with memberspaces. * See http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9159 * for details. prebimap_identity is nothing but compiler sugar to workaround * the problem. */ template< typename from_type,typename to_type, typename from_compare,typename to_compare, typename allocator_type> struct prebimap_identity { typedef prebimap type; }; #endif /* When from_type and to_type are equal, we promote only the from memberspace * to the global memberspace ans members of the to space posing no ambiguity. */ template< typename from_type_,typename to_type_, typename from_compare,typename to_compare, typename allocator_type_> class bimap_equal_types: #ifdef __GNUC__ public prebimap_identity::type #else public prebimap #endif { typedef prebimap super; typedef typename super::template from_binding from_binding_t; typedef typename super::template const_from_binding const_from_binding_t; typedef typename super::to::value_type to_value_type; typedef typename super::to::iterator to_iterator; public: typedef typename super::from::key_type key_type; typedef typename super::from::mapped_type mapped_type; typedef typename super::from::referent_type referent_type; typedef typename super::from::data_type data_type; typedef typename super::from::key_compare key_compare; typedef typename super::from::allocator_type allocator_type; typedef typename super::from::value_type value_type; typedef typename super::from::value_compare value_compare; typedef typename super::from::size_type size_type; typedef typename super::from::difference_type difference_type; typedef typename super::from::pointer pointer; typedef typename super::from::const_pointer const_pointer; typedef typename super::from::reference reference; typedef typename super::from::const_reference const_reference; typedef typename super::from::iterator iterator; typedef typename super::from::const_iterator const_iterator; typedef typename super::from::reverse_iterator reverse_iterator; typedef typename super::from::const_reverse_iterator const_reverse_iterator; iterator begin(){return this->from.begin();} const_iterator begin()const{return this->from.begin();} iterator end(){return this->from.end();} const_iterator end()const{return this->from.end();} reverse_iterator rbegin(){return this->from.rbegin();} const_reverse_iterator rbegin()const{return this->from.rbegin();} reverse_iterator rend(){return this->from.rend();} const_reverse_iterator rend()const{return this->from.rend();} size_type size()const{return this->from.size();} size_type max_size()const{return this->from.max_size();} bool empty()const{return this->from.empty();} allocator_type get_allocator()const{return this->from.get_allocator();} from_binding_t operator[](const key_type& key){return this->from[key];} const_from_binding_t operator[](const key_type& key)const{return this->from[key];} using super::insert; std::pair insert(const value_type& x){return this->from.insert(x);} iterator insert(iterator it,const value_type& x){return this->from.insert(it,x);} template< typename it_type> void insert(it_type first,it_type last){this->from.insert(first,last);} #ifdef _MSC_VER /* see note in from::erase */ iterator erase(iterator it){return this->from.erase(it);} #else void erase(iterator it){this->from.erase(it);} #endif void erase(iterator first,iterator last){this->from.erase(first,last);} size_type erase(const key_type& key){return this->from.erase(key);} void clear(){this->from.clear();} void swap(bimap_equal_types& x){this->from.swap(x.from);} friend void swap(bimap_equal_types& x,bimap_equal_types& y){x.swap(y);} key_compare key_comp()const{return this->from.key_comp();} value_compare value_comp()const{return this->from.value_comp();} iterator find(const key_type& key){return this->from.find(key);} const_iterator find(const key_type& key)const{return this->from.find(key);} size_type count(const key_type& key)const{return this->from.count(key);} iterator lower_bound(const key_type& key){return this->from.lower_bound(key);} const_iterator lower_bound(const key_type& key)const{return this->from.lower_bound(key);} iterator upper_bound(const key_type& key){return this->from.upper_bound(key);} const_iterator upper_bound(const key_type& key)const{return this->from.upper_bound(key);} std::pair< iterator, iterator> equal_range(const key_type& key){return this->from.equal_range(key);} std::pair< const_iterator, const_iterator> equal_range(const key_type& key)const{return this->from.equal_range(key);} /* Promotion of unambiguous parts of the to memberspace */ std::pair< to_iterator, bool> insert(const to_value_type& x){return this->to.insert(x);} to_iterator insert(to_iterator it,const to_value_type& x){return this->to.insert(it,x);} void insert(const to_value_type *first,const to_value_type *last) {this->to.insert(first,last);} #ifdef _MSC_VER /* see note in from::erase */ to_iterator erase(to_iterator it){return this->to.erase(it);} #else void erase(to_iterator it){this->to.erase(it);} #endif void erase(to_iterator first,to_iterator last){this->to.erase(first,last);} protected: bimap_equal_types( const from_compare& from_comp, const to_compare& to_comp, const allocator_type_& al): super(from_comp,to_comp,al) { } /* default copy ctor serves well */ }; /* If from_type and to_type are distinct, some more members of the to * memberspace can be promoted to the global memberspace without * ambiguity (notably operator[]). */ template< typename from_type_,typename to_type_, typename from_compare,typename to_compare, typename allocator_type_> class bimap_different_types: #ifdef __GNUC__ public prebimap_identity::type #else public prebimap #endif { typedef prebimap super; typedef typename super::template from_binding from_binding_t; typedef typename super::template const_from_binding const_from_binding_t; typedef typename super::template to_binding to_binding_t; typedef typename super::template const_to_binding const_to_binding_t; typedef typename super::to::key_type to_key_type; typedef typename super::to::value_type to_value_type; typedef typename super::to::iterator to_iterator; typedef typename super::to::const_iterator const_to_iterator; public: typedef typename super::from::key_type key_type; typedef typename super::from::mapped_type mapped_type; typedef typename super::from::referent_type referent_type; typedef typename super::from::data_type data_type; typedef typename super::from::key_compare key_compare; typedef typename super::from::allocator_type allocator_type; typedef typename super::from::value_type value_type; typedef typename super::from::value_compare value_compare; typedef typename super::from::size_type size_type; typedef typename super::from::difference_type difference_type; typedef typename super::from::pointer pointer; typedef typename super::from::const_pointer const_pointer; typedef typename super::from::reference reference; typedef typename super::from::const_reference const_reference; typedef typename super::from::iterator iterator; typedef typename super::from::const_iterator const_iterator; typedef typename super::from::reverse_iterator reverse_iterator; typedef typename super::from::const_reverse_iterator const_reverse_iterator; iterator begin(){return this->from.begin();} const_iterator begin()const{return this->from.begin();} iterator end(){return this->from.end();} const_iterator end()const{return this->from.end();} reverse_iterator rbegin(){return this->from.rbegin();} const_reverse_iterator rbegin()const{return this->from.rbegin();} reverse_iterator rend(){return this->from.rend();} const_reverse_iterator rend()const{return this->from.rend();} size_type size()const{return this->from.size();} size_type max_size()const{return this->from.max_size();} bool empty()const{return this->from.empty();} allocator_type get_allocator()const{return this->from.get_allocator();} from_binding_t operator[](const key_type& key){return this->from[key];} const_from_binding_t operator[](const key_type& key)const{return this->from[key];} using super::insert; std::pair insert(const value_type& x){return this->from.insert(x);} iterator insert(iterator it,const value_type& x){return this->from.insert(it,x);} template< typename it_type> void insert(it_type first,it_type last){this->from.insert(first,last);} #ifdef _MSC_VER /* see note in from::erase */ iterator erase(iterator it){return this->from.erase(it);} #else void erase(iterator it){this->from.erase(it);} #endif void erase(iterator first,iterator last){this->from.erase(first,last);} size_type erase(const key_type& key){return this->from.erase(key);} void clear(){this->from.clear();} void swap(bimap_different_types& x){this->from.swap(x.from);} friend void swap(bimap_different_types& x,bimap_different_types& y) {x.swap(y);} key_compare key_comp()const{return this->from.key_comp();} value_compare value_comp()const{return this->from.value_comp();} iterator find(const key_type& key){return this->from.find(key);} const_iterator find(const key_type& key)const{return this->from.find(key);} size_type count(const key_type& key)const{return this->from.count(key);} iterator lower_bound(const key_type& key){return this->from.lower_bound(key);} const_iterator lower_bound(const key_type& key)const{return this->from.lower_bound(key);} iterator upper_bound(const key_type& key){return this->from.upper_bound(key);} const_iterator upper_bound(const key_type& key)const{return this->from.upper_bound(key);} std::pair< iterator, iterator> equal_range(const key_type& key){return this->from.equal_range(key);} std::pair< const_iterator, const_iterator> equal_range(const key_type& key)const{return this->from.equal_range(key);} /* Promotion of unambiguous parts of the to memberspace */ to_binding_t operator[](const to_key_type& key){return this->to[key];} const_to_binding_t operator[](const to_key_type& key)const{return this->to[key];} std::pair< to_iterator, bool> insert(const to_value_type& x){return this->to.insert(x);} to_iterator insert(to_iterator it,const to_value_type& x){return this->to.insert(it,x);} void insert(const to_value_type *first,const to_value_type *last) {this->to.insert(first,last);} #ifdef _MSC_VER /* see note in this->from.erase */ to_iterator erase(to_iterator it){return this->to.erase(it);} #else void erase(to_iterator it){this->to.erase(it);} #endif void erase(to_iterator first,to_iterator last){this->to.erase(first,last);} size_type erase(const to_key_type& key){return this->to.erase(key);} to_iterator find(const to_key_type& key){return this->to.find(key);} const_to_iterator find(const to_key_type& key)const{return this->to.find(key);} size_type count(const to_key_type& key)const{return this->to.count(key);} to_iterator lower_bound(const to_key_type& key){return this->to.lower_bound(key);} const_to_iterator lower_bound(const to_key_type& key)const{return this->to.lower_bound(key);} to_iterator upper_bound(const to_key_type& key){return this->to.upper_bound(key);} const_to_iterator upper_bound(const to_key_type& key)const{return this->to.upper_bound(key);} std::pair< to_iterator, to_iterator> equal_range(const to_key_type& key){return this->to.equal_range(key);} std::pair< const_to_iterator, const_to_iterator> equal_range(const to_key_type& key)const{return this->to.equal_range(key);} protected: bimap_different_types( const from_compare& from_comp, const to_compare& to_comp, const allocator_type_& al): super(from_comp,to_comp,al) { } /* default copy ctor serves well */ }; /* bimap finally inherits from bimap_equal_types or bimap_different_types * depending on the equality of from_type and to_type, as a way to * simulate PTS. */ template< typename from_type_,typename to_type_, typename from_compare=std::less, typename to_compare=std::less, typename allocator_type=std::allocator > > class bimap: public bimap_detail::select< bimap_detail::equal_types::value, bimap_equal_types< from_type_,to_type_, from_compare,to_compare,allocator_type>, bimap_different_types< from_type_,to_type_, from_compare,to_compare,allocator_type> >::result { protected: typedef typename bimap_detail::select< bimap_detail::equal_types::value, bimap_equal_types< from_type_,to_type_, from_compare,to_compare,allocator_type>, bimap_different_types< from_type_,to_type_, from_compare,to_compare,allocator_type> >::result super; public: explicit bimap( const from_compare& from_comp=from_compare(), const to_compare& to_comp=to_compare(), const allocator_type& al=allocator_type()): super(from_comp,to_comp,al) { } /* default copy ctor serves well */ bimap& operator=(const bimap& r) { bimap tmp(r); this->swap(tmp); return *this; } /* inverse copy ctor (from a bimap) */ #if defined(_MSC_VER)&&_MSC_VER==1200 /* MSVC++ 6.0 */ /* no allocator::rebind, assume allocator_type==std::allocator */ typedef bimap< to_type_,from_type_, to_compare,from_compare, std::allocator > > inv_bimap; explicit bimap(const inv_bimap& r): super(r.to.key_comp(),r.from.key_comp(),allocator_type()) #else typedef bimap< to_type_,from_type_, to_compare,from_compare, typename allocator_type::template rebind< direct_pair >::other> inv_bimap; explicit bimap(const inv_bimap& r): super(r.to.key_comp(),r.from.key_comp(),r.get_allocator()) #endif /* body of bimap(const inv_bimap& r) follows */ { try{ #if defined(_MSC_VER)&&_MSC_VER==1200 /* MSVC++ 6.0 */ /* Amortized constant insertion in VC++ 6.0 happens if hint iterator is * right *after* the insertion point, in disagreement with the standard. */ typename super::from::iterator fhint=from.end(); typename super::to::iterator thint=to.end(); for(typename inv_bimap::to::const_iterator it=r.to.begin();it!=r.to.end();++it){ insert(fhint,thint,*it); } #else typename super::from::iterator fhint=this->from.end(); typename super::to::iterator thint=this->to.end(); for(typename inv_bimap::to::const_iterator it=r.to.begin();it!=r.to.end();++it){ std::pair p=this->insert(fhint,thint,*it); fhint=p.first; thint=p.second; } #endif }catch(...){ this->clear(); throw; } } template bimap( it_type first,it_type last, const from_compare& from_comp=from_compare(), const to_compare& to_comp=to_compare(), const allocator_type& al=allocator_type()): super(from_comp,to_comp,al) { try{ #if defined(_MSC_VER)&&_MSC_VER==1200 /* MSVC++ 6.0 */ /* Amortized constant insertion in VC++ 6.0 happens if hint iterator is * right *after* the insertion point, in disagreement with the standard. */ typename super::from::iterator fhint=from.end(); typename super::to::iterator thint=to.end(); while(first!=last){ insert(fhint,thint,first++); } #else typename super::from::iterator fhint=this->from.end(); typename super::to::iterator thint=this->to.end(); while(first!=last){ std::pair p=this->insert(fhint,thint,first++); fhint=p.first; thint=p.second; } #endif }catch(...){ this->clear(); throw; } } /* Comparison: we simply forward to from */ bool operator==(const bimap& r)const{return this->from==r.from;} bool operator!=(const bimap& r)const{return this->from!=r.from;} bool operator< (const bimap& r)const{return this->from (const bimap& r)const{return this->from>r.from;} bool operator<=(const bimap& r)const{return this->from<=r.from;} bool operator>=(const bimap& r)const{return this->from>=r.from;} }; } /* namespace codeproject */ #elif VERSION_BIMAP_9B698EF9_C6E9_4BC4_A7D2_5B4D71155761!=0x00010003 #error You have included two BIMAP.H with different version numbers #endif /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/channel/CMakeLists.txt0000600000176000000410000000023012105760300022351 0ustar buildbotwww-data00000000000000add_sources(springlobbySrc channelchooser.cpp channelchooserdialog.cpp autojoinchanneldialog.cpp channel.cpp channellist.cpp channellistctrl.cpp )springlobby-0.169/src/channel/autojoinchanneldialog.cpp0000600000176000000410000000514312105760300024666 0ustar buildbotwww-data00000000000000#include "autojoinchanneldialog.h" #include #include #include #include #include #include #include #include #include #include #include "../settings.h" BEGIN_EVENT_TABLE( AutojoinChannelDialog, wxDialog ) EVT_BUTTON( wxID_OK, AutojoinChannelDialog::OnOk ) EVT_BUTTON( wxID_CANCEL, AutojoinChannelDialog::OnCancel ) END_EVENT_TABLE() AutojoinChannelDialog::AutojoinChannelDialog( wxWindow* parent ) : wxDialog( parent, -1, _( "Edit auto-joined channels" ), wxDefaultPosition, wxSize( 400, 500 ), wxDEFAULT_DIALOG_STYLE | wxCLIP_CHILDREN ) { wxBoxSizer* mainSizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* textSizer = new wxBoxSizer( wxVERTICAL ); m_channel_list = new wxTextCtrl( this, wxID_ANY, _T( "" ), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_DONTWRAP ); wxSizer *buttonSizer= CreateButtonSizer( wxOK|wxCANCEL|wxALIGN_CENTRE ); wxStaticLine* seperator = new wxStaticLine( this ); wxStaticText* hint = new wxStaticText( this, -1, _( "Add one channel per line like this:\n" "channelname password\n(passwords for existing channels are not displayed)" ) ); textSizer->Add( hint, 0, wxEXPAND|wxALL|wxALIGN_CENTRE, 10 ); textSizer->Add( seperator ); textSizer->Add( m_channel_list, 1, wxEXPAND|wxALL|wxALIGN_CENTRE, 10 ); mainSizer->Add( textSizer,1, wxEXPAND|wxALL|wxALIGN_CENTRE, 10 ); mainSizer->Add( seperator ); mainSizer->Add( buttonSizer, 0, wxALL|wxALIGN_CENTRE, 10 ); SetSizer( mainSizer ); wxString channels; std::vector chanlist = sett().GetChannelsJoin(); for ( int i = 0; i < long(chanlist.size()); i++ ) { ChannelJoinInfo info = chanlist[i]; channels << info.name + _T(" ") + info.password + _T("\n"); } m_channel_list->SetValue( channels ); } AutojoinChannelDialog::~AutojoinChannelDialog() { //dtor } void AutojoinChannelDialog::OnOk( wxCommandEvent& /*unused*/ ) { wxString newChannels = m_channel_list->GetValue(); sett().RemoveAllChannelsJoin(); //add new channels wxStringTokenizer tokenList( newChannels, _T( "\n" ) ); while ( tokenList.HasMoreTokens() ) { wxString line = tokenList.GetNextToken(); wxString chan; if ( line.Find( _T(" ") ) != wxNOT_FOUND ) chan = line.BeforeFirst( _T(' ') ); else chan = line; wxString key = line.AfterFirst( _T(' ') ); sett().AddChannelJoin( chan, key ); } sett().SaveSettings(); this->Show( false ); } void AutojoinChannelDialog::OnCancel( wxCommandEvent& /*unused*/ ) { this->Show( false ); } springlobby-0.169/src/channel/autojoinchanneldialog.h0000600000176000000410000000275312105760300024337 0ustar buildbotwww-data00000000000000#ifndef AUTOJOINCHANNELDIALOG_H #define AUTOJOINCHANNELDIALOG_H #include #include class wxCommandEvent; class wxTextCtrl; class wxWindow; /** \brief A dialog that lets the user manullay edit his list of channels to join on startup (possibly with passwords) * Passwords for existing channels aren't displayed. The dialog expects a [chanName|password] pair per line. * \todo See that parsing input doesn't crap out when user enters rubbish */ class AutojoinChannelDialog : public wxDialog { public: /** Default constructor */ AutojoinChannelDialog( wxWindow* parent ); /** Default destructor */ virtual ~AutojoinChannelDialog(); protected: wxTextCtrl* m_channel_list; void OnOk( wxCommandEvent& event ); void OnCancel( wxCommandEvent& event ); DECLARE_EVENT_TABLE() }; #endif // AUTOJOINCHANNELDIALOG_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/channel/channel.cpp0000600000176000000410000001232312105760300021733 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: Channel // #include "channel.h" #include "../ui.h" #include "../server.h" #include "../user.h" #include "../utils/tasutil.h" #include "../utils/debug.h" #include "../updater/updatehelper.h" #include #include #include "../chatpanel.h" Channel::Channel( Server& serv ) : m_serv(serv), m_do_ban_regex(false), m_do_unban_regex(false), m_userdata(NULL) {} Channel::~Channel() { if(uidata.panel)uidata.panel->SetChannel(NULL); } void Channel::SetName( const wxString& name ) { m_name = name; } wxString Channel::GetName() { return m_name; } User& Channel::GetMe() { return m_serv.GetMe(); } void Channel::Said( User& who, const wxString& message ) { ui().OnChannelSaid( *this , who, message ); } void Channel::Say( const wxString& message ) { wxLogDebugFunc( _T("") ); m_serv.SayChannel( m_name, message ); } void Channel::DidAction( User& who, const wxString& action ) { ui().OnChannelDidAction( *this, who, action ); } void Channel::DoAction( const wxString& action ) { wxLogDebugFunc( _T("") ); m_serv.DoActionChannel( m_name, action ); } void Channel::Left( User& who, const wxString& reason ) { RemoveUser( who.GetNick() ); ui().OnUserLeftChannel( *this, who, reason ); } void Channel::Leave() { m_serv.PartChannel( m_name ); } void Channel::Rejoin() { m_serv.JoinChannel( m_name, m_password ); } void Channel::Joined( User& who ) { AddUser( who ); ui().OnUserJoinedChannel( *this, who ); } void Channel::OnChannelJoin( User& who ) { AddUser( who ); ui().OnChannelJoin( *this, who ); } void Channel::SetTopic( const wxString& topic, const wxString& who ) { m_topic = topic; m_topic_nick = who; ui().OnChannelTopic( *this, who, topic ); } wxString Channel::GetTopicSetBy() { return m_topic_nick; } wxString Channel::GetTopic() { return m_topic; } void Channel::AddUser( User& user ) { UserList::AddUser( user ); CheckBanned(user.GetNick()); } void Channel::CheckBanned(const wxString& name){ if(name==_T("ChanServ"))return; if(m_banned_users.count(name)>0){ m_serv.SayPrivate(_T("ChanServ"),_T("!kick #")+GetName()+_T(" ")+name); } if(m_do_ban_regex&&m_ban_regex.IsValid()){ if(m_ban_regex.Matches(name)&&!(m_do_unban_regex&&m_unban_regex.IsValid()&&m_unban_regex.Matches(name))){ m_serv.SayPrivate(_T("ChanServ"),_T("!kick #")+GetName()+_T(" ")+name); if(!m_ban_regex_msg.empty())m_serv.SayPrivate(name,m_ban_regex_msg); } } } bool Channel::IsBanned(const wxString& name){ if(name==_T("ChanServ"))return false; if(m_banned_users.count(name)>0)return true; if(m_do_ban_regex&&m_ban_regex.IsValid()){ if(m_ban_regex.Matches(name)&&!(m_do_unban_regex&&m_unban_regex.IsValid()&&m_unban_regex.Matches(name)))return true; } return false; } void Channel::RemoveUser( const wxString& nick ) { UserList::RemoveUser( nick ); } bool Channel::ExecuteSayCommand( const wxString& in ) { if ( in.length() == 0 ) return true; if ( in[0] != '/' ) return false; wxString subcmd = in.BeforeFirst(' ').Lower(); wxString params = in.AfterFirst( ' ' ); wxString cmdline = in; wxString param = GetWordParam( cmdline ); if ( param == _T("/me") ) { DoAction( cmdline ); return true; } else if ( in == _T("/part") || in == _T("/p") ) { Leave(); uidata.panel = 0; return true; } else if ( param == _T("/sayver") ) { //!this instance is not replaced with GetAppname for sake of help/debug online DoAction( _T("is using SpringLobby v") + GetSpringLobbyVersion() ); return true; } else if(subcmd==_T("/userban")){ m_banned_users.insert(params); m_serv.SayPrivate(_T("ChanServ"),_T("!kick #")+GetName()+_T(" ")+params); return true; } else if(subcmd==_T("/userunban")){ m_banned_users.erase(params); return true; } else if(subcmd==_T("/banregex")){ ui().OnChannelMessage(m_name,_T("/banregex ")+params); m_do_ban_regex=!params.empty(); if(m_do_ban_regex){ #ifdef wxHAS_REGEX_ADVANCED m_ban_regex.Compile(params, wxRE_ADVANCED); #else m_ban_regex.Compile(params, wxRE_EXTENDED); #endif if(!m_ban_regex.IsValid())ui().OnChannelMessage(m_name,_T("Invalid regular expression")); } return true; } else if(subcmd==_T("/unbanregex")){ ui().OnChannelMessage(m_name,_T("/unbanregex ")+params); m_do_unban_regex=!params.empty(); if(m_do_unban_regex){ #ifdef wxHAS_REGEX_ADVANCED m_unban_regex.Compile(params, wxRE_ADVANCED); #else m_unban_regex.Compile(params, wxRE_EXTENDED); #endif if(!m_unban_regex.IsValid())ui().OnChannelMessage(m_name,_T("Invalid regular expression")); } return true; } else if (subcmd==_T("/checkban")) { if(IsBanned(params)){ ui().OnChannelMessage(m_name,params+_T(" is banned")); }else{ ui().OnChannelMessage(m_name,params+_T(" is not banned")); } return true; } else if(subcmd==_T("/banregexmsg")){ ui().OnChannelMessage(m_name,_T("/banregexmsg ")+params); m_ban_regex_msg=params; return true; } return false; } wxString Channel::GetPassword() { return m_password; } void Channel::SetPassword( const wxString& pw ) { m_password = pw; } springlobby-0.169/src/channel/channel.h0000600000176000000410000000467312105760300021411 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_CHANNEL_H #define SPRINGLOBBY_HEADERGUARD_CHANNEL_H #include "../userlist.h" #include #include #include "../utils/mixins.hh" class Channel; class Server; class Ui; class ChatPanel; struct UiChannelData { UiChannelData(): panel(0) {} ChatPanel* panel; }; class Channel : public UserList, public SL::NonCopyable { public: UiChannelData uidata; //Channel(): m_serv(0),m_userdata(0) {} Channel( Server& serv ); virtual ~Channel(); Server& GetServer() { return m_serv; } void SetName( const wxString& name ); wxString GetName(); User& GetMe(); // filtering functions void CheckBanned(const wxString& name); bool IsBanned(const wxString& name); // Channel Functions void Say( const wxString& message ); void DoAction( const wxString& action ); void Leave(); void Rejoin(); void Said( User& who, const wxString& message ); void DidAction( User& who, const wxString& action ); void Left( User& who, const wxString& reason ); void Joined( User& who ); void OnChannelJoin( User& who ); void SetTopic( const wxString& topic, const wxString& who ); wxString GetTopic(); wxString GetTopicSetBy(); bool ExecuteSayCommand( const wxString& in ); wxString GetPassword(); void SetPassword( const wxString& pw ); protected: Server& m_serv; std::set m_banned_users; bool m_do_ban_regex; wxRegEx m_ban_regex; bool m_do_unban_regex; wxRegEx m_unban_regex; wxString m_ban_regex_msg; wxString m_topic; wxString m_topic_nick; wxString m_name; void* m_userdata; wxString m_password; void AddUser( User& user ); void RemoveUser( const wxString& nick ); }; #endif // SPRINGLOBBY_HEADERGUARD_CHANNEL_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/channel/channelchooser.cpp0000600000176000000410000000423312105760300023317 0ustar buildbotwww-data00000000000000#include "channelchooser.h" #include #include #include #include #include #include "channellistctrl.h" #include "../server.h" #include "../ui.h" #include "channel.h" BEGIN_EVENT_TABLE( ChannelChooserPanel, wxScrolledWindow ) EVT_TEXT( ID_SEARCH_TEXT , ChannelChooserPanel::OnSearch ) END_EVENT_TABLE() ChannelChooserPanel::ChannelChooserPanel(wxWindow* parent, wxWindowID id, const wxString& /*unused*/, const wxPoint& pos , const wxSize& size , long style , const wxString& name) : wxScrolledWindow (parent, id, pos, size, style, name) { m_main_sizer = new wxBoxSizer ( wxVERTICAL ); wxStaticText* join_label = new wxStaticText( this, -1, _("Double click to join") ); m_main_sizer->Add( join_label, 0, wxALL | wxEXPAND, 5 ); m_channellist = new ChannelListctrl ( this, -1, _T("channellistctrl") ); m_main_sizer->Add ( m_channellist, 1, wxALL|wxEXPAND, 5 ); wxBoxSizer* search_sizer = new wxBoxSizer( wxHORIZONTAL ); wxStaticText* search_label = new wxStaticText( this, -1, _("Find channel:") ); m_search_text = new wxTextCtrl ( this, ID_SEARCH_TEXT ); search_sizer->Add( search_label, 0, wxALIGN_CENTER_VERTICAL | wxALL , 0 ); search_sizer->Add( m_search_text, 1, wxLEFT | wxEXPAND, 5 ); m_main_sizer->Add( search_sizer, 0, wxALL | wxEXPAND, 5 ); m_info_label = new wxStaticText( this, -1, m_channellist->GetInfo() ); m_main_sizer->Add( m_info_label, 0, wxALL , 5 ); SetSizer( m_main_sizer ); } ChannelChooserPanel::~ChannelChooserPanel() { //dtor } void ChannelChooserPanel::AddChannel( const wxString& name, int usercount, const wxString& topic ) { m_channellist->AddChannel( name, usercount, topic ); m_info_label->SetLabel( m_channellist->GetInfo() ); Layout(); } void ChannelChooserPanel::ClearChannels() { m_channellist->ClearChannels(); m_info_label->SetLabel( m_channellist->GetInfo() ); m_search_text->SetValue( _T("") ); } void ChannelChooserPanel::OnSearch( wxCommandEvent& /*unused*/ ) { m_channellist->FilterChannel( m_search_text->GetValue() ); m_info_label->SetLabel( m_channellist->GetInfo() ); } springlobby-0.169/src/channel/channelchooser.h0000600000176000000410000000341712105760300022767 0ustar buildbotwww-data00000000000000#ifndef CHANNELCHOOSERPANEL_H #define CHANNELCHOOSERPANEL_H #include #include "../utils/mixins.hh" class ChannelListctrl; class wxBoxSizer; class wxButton; class wxTextCtrl; class wxStaticText; class ChannelChooserPanel : public wxScrolledWindow, public SL::NonCopyable { public: ChannelChooserPanel(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxHSCROLL | wxVSCROLL , const wxString& name = _T("dialogBox") ); virtual ~ChannelChooserPanel(); void AddChannel( const wxString& name, int usercount, const wxString& topic = wxEmptyString ); void ClearChannels(); void OnSearch( wxCommandEvent& event ); protected: wxButton* m_join_channels; wxButton* m_mark_autojoin; wxBoxSizer* m_main_sizer; ChannelListctrl* m_channellist; wxTextCtrl* m_search_text; wxStaticText* m_info_label; enum { ID_SEARCH_TEXT }; DECLARE_EVENT_TABLE() }; #endif // CHANNELCHOOSER_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/channel/channelchooserdialog.cpp0000600000176000000410000000173612105760300024504 0ustar buildbotwww-data00000000000000#include "channelchooserdialog.h" #include #include "channelchooser.h" #include "../settings.h" ChannelChooserDialog::ChannelChooserDialog(wxWindow* parent, wxWindowID id, const wxString& title, long style ) : wxDialog ( parent, id, title, wxDefaultPosition, wxDefaultSize, style ), WindowAttributesPickle( _T("CHANNELCHOOSER"), this, wxSize( 470, 400 ) ) { m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_chooser_panel = new ChannelChooserPanel( this, -1, _("Choose channels to join") ); m_main_sizer->Add( m_chooser_panel, 1, wxALL | wxEXPAND, 5 ); SetSizer( m_main_sizer ); Layout(); } ChannelChooserDialog::~ChannelChooserDialog() {} void ChannelChooserDialog::AddChannel( const wxString& name, int usercount, const wxString& topic ) { m_chooser_panel->AddChannel( name, usercount, topic ); m_main_sizer->FitInside( this ); Layout(); } void ChannelChooserDialog::ClearChannels() { m_chooser_panel->ClearChannels(); } springlobby-0.169/src/channel/channelchooserdialog.h0000600000176000000410000000275012105760300024146 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_CHANNELCHOOSERDIALOG_H_INCLUDED #define SPRINGLOBBY_CHANNELCHOOSERDIALOG_H_INCLUDED #include #include "../gui/windowattributespickle.h" class ChannelChooserPanel; class wxBoxSizer; class ChannelChooserDialog : public wxDialog, public WindowAttributesPickle { public: ChannelChooserDialog(wxWindow* parent, wxWindowID id, const wxString& title, long style = wxCAPTION | wxRESIZE_BORDER | wxCLOSE_BOX | wxMAXIMIZE_BOX | wxMINIMIZE_BOX | wxDEFAULT_DIALOG_STYLE ); virtual ~ChannelChooserDialog(); void AddChannel( const wxString& name, int usercount, const wxString& topic = wxEmptyString ); void ClearChannels(); protected: ChannelChooserPanel* m_chooser_panel; wxBoxSizer* m_main_sizer; }; #endif // SPRINGLOBBY_CHANNELCHOOSERDIALOG_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/channel/channellist.cpp0000600000176000000410000000253412105760300022632 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include #include #include #include "channellist.h" #include "channel.h" #include "../utils/debug.h" #include "../utils/conversion.h" const UserList::user_map_t::size_type SEEKPOS_INVALID = UserList::user_map_t::size_type(-1); ChannelList::ChannelList() : m_seek(m_chans.end()), m_seekpos(SEEKPOS_INVALID) { } void ChannelList::AddChannel( Channel& channel ) { m_chans[channel.GetName()] = &channel; m_seekpos = SEEKPOS_INVALID; } void ChannelList::RemoveChannel( const wxString& name ) { m_chans.erase( name ); m_seekpos = SEEKPOS_INVALID; } Channel& ChannelList::GetChannel( const wxString& name ) { channel_iter_t u = m_chans.find(name); ASSERT_LOGIC( u != m_chans.end(), _T("ChannelList::GetChannel(\"") + name + _T("\"): no such channel")); return *u->second; } Channel& ChannelList::GetChannel( channel_map_t::size_type index ) { if (m_seekpos == SEEKPOS_INVALID || m_seekpos > index) { m_seek = m_chans.begin(); m_seekpos = 0; } std::advance( m_seek, index - m_seekpos ); m_seekpos = index; return *m_seek->second; } bool ChannelList::ChannelExists( const wxString& name ) const { return m_chans.find( name ) != m_chans.end(); } channel_map_t::size_type ChannelList::GetNumChannels() const { return m_chans.size(); } springlobby-0.169/src/channel/channellist.h0000600000176000000410000000314612105760300022277 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_CHANNELLIST_H #define SPRINGLOBBY_HEADERGUARD_CHANNELLIST_H #include #include class Channel; //! @brief mapping from channel name to channel object typedef std::map channel_map_t; //! @brief iterator for channel map typedef channel_map_t::iterator channel_iter_t; //! @brief List of Channel objects class ChannelList { public: ChannelList(); void AddChannel( Channel& channel ); void RemoveChannel( const wxString& name ); Channel& GetChannel( const wxString& name ); Channel& GetChannel( channel_map_t::size_type index ); bool ChannelExists( const wxString& name ) const; channel_map_t::size_type GetNumChannels() const; private: channel_map_t m_chans; // The following are used as internal cache to speed up random access: mutable channel_iter_t m_seek; mutable channel_map_t::size_type m_seekpos; }; #endif // SPRINGLOBBY_HEADERGUARD_CHANNELLIST_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/channel/channellistctrl.cpp0000600000176000000410000001211512105760300023513 0ustar buildbotwww-data00000000000000#include "channellistctrl.h" #include "../iconimagelist.h" #include "../utils/conversion.h" #include "../ui.h" #include #include "../Helper/sortutil.h" template<> SortOrder CustomVirtListCtrl::m_sortorder = SortOrder(); BEGIN_EVENT_TABLE( ChannelListctrl, ChannelListctrl::BaseType ) EVT_LIST_ITEM_ACTIVATED( CHANNELLIST, ChannelListctrl::OnActivateItem ) END_EVENT_TABLE() ChannelListctrl::ChannelListctrl(wxWindow* parent, wxWindowID /*unused*/, const wxString& /*unused*/, long /*unused*/, const wxPoint& /*unused*/, const wxSize& /*unused*/) :CustomVirtListCtrl( parent, CHANNELLIST, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER | wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_ALIGN_LEFT, _T("ChannelListCtrl"), 3, &ChannelListctrl::CompareOneCrit) { #if defined(__WXMSW__) const int widths [3] = { wxLIST_AUTOSIZE, wxLIST_AUTOSIZE, wxLIST_AUTOSIZE }; #elif defined(__WXMAC__) const int widths [3] = { wxLIST_AUTOSIZE, wxLIST_AUTOSIZE, wxLIST_AUTOSIZE }; #else const int widths [3] = { wxLIST_AUTOSIZE, wxLIST_AUTOSIZE, wxLIST_AUTOSIZE }; #endif AddColumn( 0, widths[0], _("Channel"), _T("Channelname") ); AddColumn( 1, widths[1], _("# users"), _T("Users") ); AddColumn( 2, widths[2], _T("Topic"), _T("Topic") ); if ( m_sortorder.size() == 0 ) { m_sortorder[2].col = 2; m_sortorder[2].direction = 1; m_sortorder[0].col = 0; m_sortorder[0].direction = 1; m_sortorder[1].col = 1; m_sortorder[1].direction = 1; } } ChannelListctrl::~ChannelListctrl() { //dtor } void ChannelListctrl::HighlightItem( long ){} /** @brief AddChannel * * @todo: document this function */ void ChannelListctrl::AddChannel(const wxString& channel, unsigned int num_users, const wxString& topic ) { ChannelInfo data ( channel, num_users, topic ); m_data.push_back( data ); m_visible_idxs[m_data.size() -1] = ( m_data.size() -1 ); SetItemCount( m_visible_idxs.size() ); RefreshItem( m_visible_idxs.size() - 1); // SetColumnWidth( 0, wxLIST_AUTOSIZE ); // SetColumnWidth( 1, wxLIST_AUTOSIZE ); // SetColumnWidth( 2, wxLIST_AUTOSIZE ); } int ChannelListctrl::CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const { switch ( col ) { case 0: return dir * u1.name.CmpNoCase( u2.name ); case 1: return dir * compareSimple( u1.usercount, u2.usercount ); case 2: return dir * u1.topic.CmpNoCase( u2.topic ); default: return 0; } } int ChannelListctrl::GetIndexFromData( const DataType& data ) const { DataCIter it = m_data.begin(); for ( int i = 0; it != m_data.end(); ++it , ++i) { if ( it->name == data.name ) return i; } return -1; } void ChannelListctrl::Sort() { SaveSelection(); SLInsertionSort( m_data, m_comparator ); FilterChannel( m_last_filter_value ); RestoreSelection(); } /** @brief OnActivateItem * * @todo: document this function */ void ChannelListctrl::OnActivateItem(wxListEvent& event) { int index = event.GetIndex(); if ( index == -1 ) return; wxString chan_name = m_data[ m_visible_idxs[index] ].name; ui().JoinChannel( chan_name, _T("") ); } void ChannelListctrl::ClearChannels() { m_visible_idxs.clear(); Clear(); } wxString ChannelListctrl::GetInfo() { int displayed = GetItemCount(); int total = m_data.size(); return wxFormat( _("Displaying %d out of %d channels") ) % displayed % total; } void ChannelListctrl::FilterChannel( const wxString& partial ) { m_visible_idxs.clear(); unsigned int idx = 0; for ( unsigned int i = 0; i < m_data.size() ; ++i ) { const ChannelInfo& data = m_data[i]; if ( data.name.Find( partial ) != wxNOT_FOUND ) { m_visible_idxs[idx] = i; idx++; } } SelectNone(); m_last_filter_value = partial; SetItemCount( m_visible_idxs.size() ); RefreshVisibleItems( ); } int ChannelListctrl::GetItemColumnImage(long /*unused*/, long ) const { return -1; } int ChannelListctrl::GetItemImage(long /*unused*/) const { return -1; } wxString ChannelListctrl::GetItemText(long item, long column) const { int idx = m_visible_idxs.find(item)->second; const DataType& chan = m_data[ idx ]; switch ( column ) { case 0: return chan.name; case 1: return TowxString( chan.usercount ); case 2: return chan.topic; default: return wxEmptyString; } } void ChannelListctrl::SetTipWindowText(const long item_hit, const wxPoint& position) { int column = getColumnFromPosition(position); if (column > (int)m_colinfovec.size() || column < 0 || item_hit < 0 || item_hit > (long)m_data.size() ) { m_tiptext = _T(""); } else { const DataType& channel = m_data[item_hit]; { switch (column) { case 2: // status m_tiptext = channel.topic; break; default: m_tiptext = _T(""); break; } } } } springlobby-0.169/src/channel/channellistctrl.h0000600000176000000410000000514112105760300023161 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_CHANNELLISTCTRL_H #define SPRINGLOBBY_HEADERGUARD_CHANNELLISTCTRL_H #include "../customvirtlistctrl.h" struct ChannelInfo { ChannelInfo() : name(_T("")), usercount(0),topic(_T("")) {} ChannelInfo( const wxString& name_, int usercount_, const wxString& topic_ = wxEmptyString ) : name(name_), usercount(usercount_),topic(topic_) {} wxString name; int usercount; wxString topic; }; class ChannelListctrl : public CustomVirtListCtrl< ChannelInfo, ChannelListctrl > { public: ChannelListctrl(wxWindow* parent, wxWindowID id, const wxString& name = _T("ChannelListCtrl"), long style = wxSUNKEN_BORDER | wxLC_REPORT | wxLC_ALIGN_LEFT, const wxPoint& pt = wxDefaultPosition, const wxSize& sz = wxDefaultSize); virtual ~ChannelListctrl(); void AddChannel( const wxString& channel, unsigned int num_users, const wxString& topic); void ClearChannels(); wxString GetInfo(); void FilterChannel( const wxString& partial ); //these are overloaded to use list in virtual style wxString GetItemText(long item, long column) const; int GetItemImage(long item) const; int GetItemColumnImage(long item, long column) const; wxListItemAttr* GetItemAttr(long /*unused*/) const {return 0;} protected: void Sort(); void SetTipWindowText( const long item_hit, const wxPoint& position); void OnActivateItem( wxListEvent& event ); void HighlightItem( long item ); enum { CHANNELLIST = wxID_HIGHEST }; int GetIndexFromData( const DataType& data ) const; //! passed as callback to generic ItemComparator, returns -1,0,1 as per defined ordering int CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const; wxString m_last_filter_value; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_CHANNELLISTCTRL_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/chatlog.cpp0000600000176000000410000002177712105760300020351 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2010 The SpringLobby Team. All rights reserved. */ // // Class: ChatLog // #include #include #include #include #include #include #include #include #include #include "chatlog.h" #include "settings.h" #include "utils/conversion.h" #include "ui.h" #include "defines.h" #include "utils/customdialogs.h" #include "utils/platform.h" #include "utils/misc.h" ChatLog::ChatLog( const wxString& server, const wxString& room ): m_server( server ), m_room( room ), m_active ( LogEnabled() ), m_logfile ( ) { #ifdef __WXMSW__ m_server.Replace( wxT( ":" ), wxT( "_" ) ) ; #endif wxLogMessage( _T( "ChatLog::ChatLog( %s, %s )" ), m_server.c_str(), m_room.c_str() ) ; m_active = OpenLogFile(); } ChatLog::~ChatLog() { wxLogMessage( _T( "%s -- ChatLog::~ChatLog()" ), m_room.c_str() ); if ( m_logfile.IsOpened() ) { CloseSession(); } } void ChatLog::CloseSession() { wxDateTime now = wxDateTime::Now(); wxString newline ( wxTextBuffer::GetEOL() ); WriteLine( _( "### Session Closed at [" ) + now.Format( _T( "%Y-%m-%d %H:%M" ) ) + _( "]" ) ); WriteLine(_T(" ") + newline + _T(" ") + newline + _T(" ") + newline); m_logfile.Flush(); m_logfile.Close(); } bool ChatLog::AddMessage( const wxString& text ) { if ( !LogEnabled() || ! m_active ) { return true; } else if ( !m_logfile.IsOpened() ) { m_active = OpenLogFile(); } if ( m_active ) { return WriteLine( LogTime() + _T( " " ) + text + wxTextBuffer::GetEOL() ); } else return false; } bool ChatLog::CreateCurrentLogFolder() { wxString path ( wxFileName(GetCurrentLogfilePath()).GetPath() ); if ( !tryCreateDirectory( path ) ) { wxLogWarning( _T( "can't create logging folder: %s" ), path.c_str() ); customMessageBox( SL_MAIN_ICON, _( "Couldn't create folder. \nBe sure that there isn't a write protection.\n" ) + path + _( "Log function is disabled until restart SpringLobby." ), _( "Log Warning" ) ); m_active = false; return false; } return true; } bool ChatLog::WriteLine( const wxString& text ) { if ( !m_logfile.Write( text, wxConvUTF8 ) ) { m_active = false; wxLogWarning( _T( "can't write message to log (%s)" ), wxString( m_server + _T( "::" ) + m_room ).c_str() ); customMessageBox( SL_MAIN_ICON, _( "Couldn't write message to log.\nLogging will be disabled for room " ) + m_server + _T( "::" ) + m_room + _( ".\n\nRejoin room to reactivate logging." ), _( "Log Warning" ) ); return false; } return true; } bool ChatLog::OpenLogFile() { wxLogMessage( _T( "OpenLogFile( ) server = %s, room = %s" ), m_server.c_str(), m_room.c_str() ) ; wxString logFilePath ( GetCurrentLogfilePath() ); if ( LogEnabled() && CreateCurrentLogFolder() ) { m_logfile.Open( logFilePath, wxFile::write_append ); if ( !m_logfile.IsOpened() ) { wxLogWarning( _T( "Can't open log file %s" ), logFilePath.c_str() ) ; customMessageBox( SL_MAIN_ICON, _( "Can't open log file \"" ) + logFilePath + _("\".\nBe sure that there isn't a write protection.\n" ), _( "Log Warning" ) ) ; m_active = false; } else { FillLastLineArray(); wxDateTime now = wxDateTime::Now(); wxString text = _T( "### Session Start at [" ) + now.Format( _T( "%Y-%m-%d %H:%M" ) ) + _T( "]" ) + wxTextBuffer::GetEOL(); return WriteLine( text ); } } return false; } wxString ChatLog::LogTime() { wxDateTime now = wxDateTime::Now(); return _T( "[" ) + now.Format( _T( "%H:%M" ) ) + _T( "]" ); } void ChatLog::OpenInEditor() { ui().OpenFileInEditor( GetCurrentLogfilePath()); } const wxArrayString& ChatLog::GetLastLines( ) const { return m_last_lines; } wxString ChatLog::GetCurrentLogfilePath() const { return sett().GetChatLogLoc() + wxFileName::GetPathSeparator() + m_server + wxFileName::GetPathSeparator() + m_room + _T( ".txt" ); } bool ChatLog::LogEnabled() { return sett().GetChatLogEnable(); } #ifdef WIN32 /* MSVC apparently doesn't support POSIX. * * ...well, I guess we all saw that coming. Quoth the GNU C Library * Reference Manual: * * "The function is an extension defined in the Unix Single * Specification version 2." * * So it can -- and must be -- #ifdef'd out on UNIX systems. */ static inline ssize_t pread(int fd, void* buffer, size_t size, off_t offset) { errno = 0; if ( offset < 0 ) { errno = EINVAL; return -1; } else if ( lseek(fd, offset, SEEK_SET) != offset ) { return -1; } else { return read(fd, buffer, size); } } #endif /* WIN32 */ /** Calculate the next read position for find_tail_sequences (below) */ static inline off_t next_read_position(off_t last_read_position, size_t read_size, size_t read_overlap) { return std::max(static_cast(last_read_position - read_size - read_overlap), (long signed int) 0); } /** Find an arbitrary number of delimited strings at the end of a file. This * function provides the core of our last-lines-loader implementation. * * @param fd File descriptor to operate on. This must be opened for reading. * * @param bytes Delimiter sequence. * * @param bytes_length Number of significant bytes in @p bytes. * * @param count Number of tail sequences to find. * * @param out Destination string array. */ static inline size_t find_tail_sequences(int fd, const char* bytes, size_t bytes_length, size_t count, wxArrayString& out) { size_t count_added ( 0 ); /* We overlap the file reads a little to avoid splitting (and thus missing) the delimiter sequence. */ const size_t read_overlap ( bytes_length - 1 ); const size_t read_size ( BUFSIZ ); const off_t log_length ( lseek(fd, 0, SEEK_END) ); bool have_last_pos ( false ); char buf[read_size]; off_t last_found_pos ( 0 ); off_t last_read_position ( log_length + read_overlap ); /* We read `read_size'-byte blocks of the file, starting at the end and working backwards. */ while ( count_added < count && last_read_position > 0 ) { off_t read_position ( next_read_position(last_read_position, read_size, read_overlap) ); size_t bytes_read ( pread(fd, buf, std::min(static_cast(read_size), last_read_position - read_position), read_position) ); /* In each block, we search for `bytes', starting at the end. */ for ( ssize_t i = bytes_read - read_overlap - 1; i >= 0; i-- ) { if ( !strncmp((buf + i), bytes, bytes_length) ) { off_t this_found_pos ( read_position + i ); if ( have_last_pos && count_added < count ) { size_t line_length ( last_found_pos - this_found_pos - bytes_length ); if ( line_length > 0 ) { char* source ( NULL ); if ( last_found_pos >= read_position + (off_t) bytes_read ) { source = new char[ line_length + 1]; memset(source, 0, line_length + 1); if ( pread(fd, source, line_length, this_found_pos + bytes_length) < (ssize_t) line_length ) { wxLogWarning(_T("ChatLog::find_tail_sequences: Read-byte count less than expected")); } } else { source = buf + i + bytes_length; } if ( strncmp(source, "##", 2) != 0 ) { out.Insert(wxString(L'\0', 0), 0); wxLogMessage(_T("ChatLog::find_tail_sequences: fetching write buffer for %lu bytes"), sizeof(wxChar) * (line_length + 1)); #if !defined(HAVE_WX28) || defined(SL_QT_MODE) || wxUSE_STL wxStringBufferLength outzero_buf(out[0], sizeof(wxChar) * (line_length + 1)); wxConvUTF8.ToWChar(outzero_buf, line_length, source); outzero_buf.SetLength(line_length); #else wxConvUTF8.MB2WC(out[0].GetWriteBuf(sizeof(wxChar) * (line_length + 1)), source, line_length); out[0].UngetWriteBuf(line_length); #endif ++count_added; } if ( last_found_pos >= read_position + (off_t) bytes_read ) delete[] source; if ( count_added >= count ) i = -1; /* short-circuit the `for' loop. */ } } last_found_pos = this_found_pos; have_last_pos = true; i -= bytes_length - 1; } } last_read_position = read_position; } return count_added; } void ChatLog::FillLastLineArray() { int fd ( open(GetCurrentLogfilePath().mb_str(), O_RDONLY) ); if ( fd < 0 ) { wxLogError(_T("%s: failed to open log file."), __PRETTY_FUNCTION__); return; } size_t num_lines ( sett().GetAutoloadedChatlogLinesCount() ); m_last_lines.Clear(); m_last_lines.Alloc(num_lines); const wxChar* wc_EOL ( wxTextBuffer::GetEOL() ); size_t eol_num_chars ( wxStrlen(wc_EOL) ); #ifndef WIN32 char* eol ( static_cast( alloca(eol_num_chars) ) ); #else char* eol ( new char[eol_num_chars] ); #endif wxConvUTF8.WC2MB(eol, wc_EOL, eol_num_chars); size_t lines_added ( find_tail_sequences(fd, eol, eol_num_chars, num_lines, m_last_lines) ); wxLogMessage(_T("ChatLog::FillLastLineArray: Loaded %lu lines from %s."), lines_added, GetCurrentLogfilePath().c_str()); close(fd); #ifdef WIN32 delete[] eol; #endif } springlobby-0.169/src/chatlog.h0000600000176000000410000000666012105760300020010 0ustar buildbotwww-data00000000000000#ifndef CHATLOG_H_INCLUDED #define CHATLOG_H_INCLUDED #include #include #include /** Handles chat-log operations for a single chat room on a server. */ class ChatLog { public: /** Constructor. Prepares the %ChatLog to accept log messages for * the given chat room or channel on the given server. * * @param server Alias or hostname for the server on which the * chat room or channel is located. * * @param room Name of the chat room or channel this object will * accept messages for. */ ChatLog(const wxString& server,const wxString& room); /** Destructor. Calls CloseSession if the log file is currently * opened. */ ~ChatLog(); /** Append a time-stamped message to the log file. Retrieves a * time-stamp string from LogTime. * * @note This does nothing, successfully, if chat logging is * disabled. * * @param text Message text to log. * * @return @c false if an error was encountered while writing to * the log file, and @c true otherwise. * * @see LogEnabled LogTime */ bool AddMessage(const wxString& text); /** Check if chat logging is enabled. * * @return @c true if chat logging is enabled, and @c false if it * is not. */ bool LogEnabled(); /** Get a string, representing the current time-of-day, suitable * for prepending to messages. This is used by AddMessage. * * @return a string including hours and minutes. * * @see AddMessage */ wxString LogTime(); void OpenInEditor(); const wxArrayString& GetLastLines( ) const; protected: /** Closes the current "session" in the log file by appending a * session-closed notice to end before closing the file. * * @post The file is closed, and any further calls to AddMessage * will reopen the log file, starting a new session. */ void CloseSession(); /** Get the path (filename) to the current log file. * * @return A platform-specific logfile path string. */ wxString GetCurrentLogfilePath() const; /** Write a line of text to the output file, without any further * formatting. * * @param text The line to write. * * @return @c true if the line was successfully written, and @c * false otherwise. */ bool WriteLine(const wxString& text); /** Create the directory in which the current logfile is saved. * * @return @c true on success, @c false on failure. */ bool CreateCurrentLogFolder(); bool OpenLogFile(); wxString m_server; wxString m_room; bool m_active; wxFile m_logfile; wxArrayString m_last_lines; void FillLastLineArray(); }; #endif // CHATLOG_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/chatpanel.cpp0000600000176000000410000011360612105760300020660 0ustar buildbotwww-data00000000000000// Copyright (C) 2007, 2008 The SpringLobby Team. All rights reserved. */ // // Class: ChatPanel // #include "chatpanel.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "aui/auimanager.h" #include "aui/slbook.h" #include "channel/channel.h" #include "utils/debug.h" #include "utils/conversion.h" #include "utils/uievents.h" #include "updater/updatehelper.h" #include "utils/misc.h" #include "ui.h" #include "server.h" #include "user.h" #include "battle.h" #include "nicklistctrl.h" #include "mainwindow.h" #include "chatlog.h" #include "chatpanelmenu.h" #include "utils/customdialogs.h" #include "gui/pastedialog.h" #include "settings.h" #include "uiutils.h" #include "Helper/wxtextctrlhist.h" #include "useractions.h" #include "usermenu.h" BEGIN_EVENT_TABLE( ChatPanel, wxPanel ) EVT_TEXT_ENTER( CHAT_TEXT, ChatPanel::OnSay ) EVT_TEXT_PASTE( CHAT_TEXT, ChatPanel::OnPaste ) EVT_BUTTON( CHAT_CHAN_OPTS, ChatPanel::OnChanOpts ) EVT_BUTTON( CHAT_SEND, ChatPanel::OnSay ) EVT_TEXT_URL( CHAT_LOG, ChatPanel::OnLinkEvent ) EVT_MENU ( wxID_ANY, ChatPanel::OnMenuItem ) END_EVENT_TABLE() #ifdef __WXMSW__ wxString chan_prefix = _("channel_"); #else wxString chan_prefix = _("#"); #endif /// table for irc colors static wxColor m_irc_colors[16] = { wxColor(204,204,204), wxColor(0,0,0), wxColor(54,54,178), wxColor(42,140,42), wxColor(195,59,59), wxColor(199,50,50), wxColor(128,38,127), wxColor(102,54,31), wxColor(217,166,65), wxColor(61,204,61), wxColor(26,85,85), wxColor(47,140,116), wxColor(69,69,230), wxColor(176,55,176), wxColor(76,76,76), wxColor(149,149,149) }; ChatPanel::ChatPanel( wxWindow* parent, Channel& chan, wxImageList* imaglist ): wxPanel( parent, -1 ), m_show_nick_list( true ), m_nicklist(0), m_chat_tabs(( SLNotebook* )parent ), m_channel( &chan ), m_server( 0 ), m_user( 0 ), m_battle( 0 ), m_type( CPT_Channel ), m_popup_menu( 0 ), m_chat_log(sett().GetDefaultServer(), chan_prefix + chan.GetName()), m_icon_index( 2 ), m_imagelist( imaglist ), m_disable_append( false ), m_topic_set( false ) { GetAui().manager->AddPane( this, wxLEFT, _T("chatpanel-channel-") + chan.GetName() ); wxLogDebugFunc( _T( "wxWindow* parent, Channel& chan" ) ); CreateControls( ); LoadLastLines(); _SetChannel( &chan ); m_chatlog_text->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( ChatPanel::OnMouseDown ), 0, this ); } ChatPanel::ChatPanel( wxWindow* parent, const User& user, wxImageList* imaglist ): wxPanel( parent, -1 ), m_show_nick_list( false ), m_nicklist(0), m_chat_tabs(( SLNotebook* )parent ), m_channel( 0 ), m_server( 0 ), m_user( &user ), m_battle( 0 ), m_type( CPT_User ), m_popup_menu( 0 ), m_chat_log(sett().GetDefaultServer(), user.GetNick()), m_icon_index( 3 ), m_imagelist( imaglist ), m_disable_append( false ), m_topic_set( false ) { GetAui().manager->AddPane( this, wxLEFT, _T("chatpanel-pm-") + user.GetNick() ); CreateControls( ); LoadLastLines(); m_chatlog_text->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( ChatPanel::OnMouseDown ), 0, this ); user.uidata.panel = this; } ChatPanel::ChatPanel( wxWindow* parent, Server& serv, wxImageList* imaglist ): wxPanel( parent, -1 ), m_show_nick_list( true ), m_nicklist(0), m_chat_tabs(( SLNotebook* )parent ), m_channel( 0 ), m_server( &serv ), m_user( 0 ), m_battle( 0 ), m_type( CPT_Server ), m_popup_menu( 0 ), m_chat_log(sett().GetDefaultServer(), _T( "_SERVER" )), m_icon_index( 1 ), m_imagelist( imaglist ), m_disable_append( false ), m_topic_set( false ) { GetAui().manager->AddPane( this, wxLEFT, _T("chatpanel-server") ); wxLogDebugFunc( _T( "wxWindow* parent, Server& serv" ) ); CreateControls( ); m_chatlog_text->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( ChatPanel::OnMouseDown ), 0, this ); serv.uidata.panel = this; m_chatlog_text->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( ChatPanel::OnMouseDown ), 0, this ); } ChatPanel::ChatPanel( wxWindow* parent, Battle* battle ): wxPanel( parent, -1 ), m_show_nick_list( false ), m_nicklist( 0 ), m_chat_tabs( 0 ), m_channel( 0 ), m_server( 0 ), m_user( 0 ), m_battle( battle ), m_type( CPT_Battle ), m_popup_menu( 0 ), m_chat_log(sett().GetDefaultServer(), _T( "_BATTLE_" ) + wxDateTime::Now().Format( _T( "%Y_%m_%d__%H_%M_%S" ) )), m_disable_append( false ), m_topic_set( false ) { wxLogDebugFunc( _T( "wxWindow* parent, Battle& battle" ) ); if ( m_battle ) { for (unsigned int i = 0; i < m_battle->GetNumUsers();++i) { textcompletiondatabase.Insert_Mapping( m_battle->GetUser(i).GetNick(), m_battle->GetUser(i).GetNick() ); } } CreateControls( ); m_chatlog_text->Connect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( ChatPanel::OnMouseDown ), 0, this ); } //! @brief ChatPanel destructor. ChatPanel::~ChatPanel() { if ( m_server != 0 ) { if ( m_server->uidata.panel == this ) m_server->uidata.panel = 0; } if ( m_user != 0 ) { if ( m_user->uidata.panel == this ) m_user->uidata.panel = 0; } if ( m_channel != 0 ) { if ( m_channel->uidata.panel == this ) m_channel->uidata.panel = 0; } if ( m_type == CPT_Channel ) { m_chatlog_text->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( ChatPanel::OnMouseDown ), 0, 0 ); if(GetAui().manager)GetAui().manager->DetachPane( this ); } else if ( m_type == CPT_Server ) { m_chatlog_text->Disconnect( wxEVT_RIGHT_DOWN, wxMouseEventHandler( ChatPanel::OnMouseDown ), 0, 0 ); if(GetAui().manager)GetAui().manager->DetachPane( this ); } else if ( m_type == CPT_User ) { if(GetAui().manager)GetAui().manager->DetachPane( this ); } } void ChatPanel::CreateControls( ) { wxLogDebugFunc( _T( "" ) ); // Creating sizers m_main_sizer = new wxBoxSizer( wxHORIZONTAL ); m_chat_sizer = new wxBoxSizer( wxVERTICAL ); m_say_sizer = new wxBoxSizer( wxHORIZONTAL ); if ( m_show_nick_list ) { m_splitter = new wxSplitterWindow( this, -1, wxDefaultPosition, wxDefaultSize, wxSP_3D ); m_splitter->SetSashGravity( 0.9 ); m_nick_panel = new wxPanel( m_splitter, -1 ); m_chat_panel = new wxPanel( m_splitter, -1 ); m_nick_sizer = new wxBoxSizer( wxVERTICAL ); unsigned int numusers = 0; if ( m_type == CPT_Channel ) numusers = GetChannel()->GetNumUsers(); else if ( m_type == CPT_Server && m_server ) numusers = m_server->GetNumUsers(); m_usercount_label = new wxStaticText( m_nick_panel, wxID_ANY, wxFormat( _("%d users") ) % numusers ); CreatePopup();//ensures m_popup_menu is constructed //SL_GENERIC::UserMenu* usermenu = m_popup_menu->GetUserMenu(); assert ( m_popup_menu->GetUserMenu() ); m_nicklist = new NickListCtrl( m_nick_panel, true, m_popup_menu->GetUserMenu() ); // m_nick_filter = new wxComboBox( m_nick_panel, -1, _("Show all"), wxDefaultPosition, wxSize(80,CONTROL_HEIGHT), 0, 0, wxCB_READONLY ); // m_nick_filter->Disable(); m_nick_sizer->Add( m_usercount_label, 0 ); m_nick_sizer->Add( m_nicklist, 1, wxEXPAND ); // m_nick_sizer->Add( m_nick_filter, 0, wxEXPAND | wxTOP, 2 ); m_nick_panel->SetSizer( m_nick_sizer ); } else { m_chat_panel = this; m_nick_sizer = 0; m_nicklist = 0; m_nick_filter = 0; m_splitter = 0; } // Creating ui elements m_chatlog_text = new wxTextCtrl( m_chat_panel, CHAT_LOG, _T( "" ), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH | wxTE_AUTO_URL ); if ( m_type == CPT_Channel ) { m_chatlog_text->SetToolTip( TE(_("right click for options (like autojoin)" ) ) ); //m_chan_opts_button = new wxBitmapButton(m_chat_panel, CHAT_CHAN_OPTS, icons().GetBitmap(icons().ICON_CHANNEL_OPTIONS), wxDefaultPosition , wxSize( CONTROL_HEIGHT, CONTROL_HEIGHT ) ); } else if ( m_type == CPT_User ) { if ( m_user ) { //m_chan_opts_button = new wxBitmapButton(m_chat_panel, CHAT_CHAN_OPTS, icons().GetBitmap(icons().GetUserBattleStateIcon(m_user->GetStatus()) ), wxDefaultPosition , wxSize( CONTROL_HEIGHT, CONTROL_HEIGHT ) ); } } else { } m_chan_opts_button = 0; m_say_text = new wxTextCtrlHist( textcompletiondatabase, m_chat_panel, CHAT_TEXT, _T( "" ), wxDefaultPosition, wxSize( 100, CONTROL_HEIGHT ), wxTE_PROCESS_ENTER | wxTE_PROCESS_TAB ); m_say_button = new wxButton( m_chat_panel, CHAT_SEND, _( "Send" ), wxDefaultPosition, wxSize( 80, CONTROL_HEIGHT ) ); // Adding elements to sizers //if ( m_type == CPT_Channel ) m_say_sizer->Add( m_chan_opts_button ); //if ( m_type == CPT_User ) m_say_sizer->Add( m_chan_opts_button ); m_say_sizer->Add( m_say_text, 1, wxEXPAND ); m_say_sizer->Add( m_say_button ); m_chat_sizer->Add( m_chatlog_text, 1, wxEXPAND ); m_chat_sizer->Add( m_say_sizer, 0, wxEXPAND | wxTOP, 2 ); if ( m_show_nick_list ) { m_chat_panel->SetSizer( m_chat_sizer ); m_splitter->SplitVertically( m_chat_panel, m_nick_panel, 100 ); m_splitter->SetMinimumPaneSize( 30 ); m_main_sizer->Add( m_splitter, 1, wxEXPAND | wxALL, 2 ); } else { m_main_sizer->Add( m_chat_sizer, 4, wxEXPAND | wxALL, 2 ); } // Assign sizer to panel SetSizer( m_main_sizer ); if ( m_show_nick_list ) { wxSize s = m_splitter->GetSize(); m_splitter->SetSashPosition( s.GetWidth() - 238, true ); } m_chatlog_text->SetBackgroundColour( sett().GetChatColorBackground() ); m_chatlog_text->SetFont( sett().GetChatFont() ); m_say_text->SetBackgroundColour( sett().GetChatColorBackground() ); m_say_text->SetFont( sett().GetChatFont() ); m_say_text->SetForegroundColour(sett().GetChatColorNormal()); // Fill up TextCompletionDatabase textcompletiondatabase.Insert_Mapping( _T("DLDK"), _T("Der Lockruf des Kaos") ); textcompletiondatabase.Insert_Mapping( _T("lol"), _T("Laughing out loud") ); textcompletiondatabase.Insert_Mapping( _T("wb"), _T("Welcome back") ); textcompletiondatabase.Insert_Mapping( _T("hf"), _T("Have Fun!") ); textcompletiondatabase.Insert_Mapping( _T("glhf"), _T("Good luck, have Fun!") ); textcompletiondatabase.Insert_Mapping( _T("kaot"), _T("Have Fun!") ); textcompletiondatabase.Insert_Mapping( _T("kaot_H"), _T("Der Kaot aus der HĂślle.") ); } void ChatPanel::CreatePopup() { if ( m_popup_menu != 0 ) return; wxLogDebugFunc( _T( "" ) ); m_popup_menu = new ChatPanelMenu( this ); } const User* ChatPanel::GetSelectedUser() const { if ( m_type == CPT_User ) { return m_user; } if ( !m_show_nick_list || ( m_nicklist == 0 ) ) return 0; return m_nicklist->GetSelectedData(); } const User& ChatPanel::GetMe() const { return serverSelector().GetServer().GetMe(); } void ChatPanel::OutputLine( const wxString& message, const wxColour& col, const wxFont& fon ) { if ( ! m_chatlog_text ) return; wxDateTime now = wxDateTime::Now(); wxTextAttr timestyle( sett().GetChatColorTime(), sett().GetChatColorBackground(), sett().GetChatFont() ); wxTextAttr chatstyle( col, sett().GetChatColorBackground(), fon ); ChatLine newline; #ifdef __WXMSW__ newline.chat = wxString( message.c_str() ); #else newline.chat = message; #endif newline.time = _T( "[" ) + now.Format( _T( "%H:%M:%S" ) ) + _T( "]" ); newline.chatstyle = chatstyle; newline.timestyle = timestyle; if ( m_disable_append ) { m_buffer.push_back( newline ); } else { OutputLine( newline ); } m_chat_log.AddMessage( message ); } void ChatPanel::OutputLine( const ChatLine& line ) { int pos = m_chatlog_text->GetScrollPos(wxVERTICAL); int end = m_chatlog_text->GetScrollRange(wxVERTICAL); #ifndef __WXMSW__ int thumb = m_chatlog_text->GetScrollThumb(wxVERTICAL); float original_pos = (float)(pos+thumb) / (float)end; #else int size = m_chatlog_text->GetSize().GetHeight(); float original_pos = (float)(pos+size) / (float)end; // wxmsw is retarded and reports thumb size as 0 always #endif if ( original_pos < 0.0f ) original_pos = 0.0f; if ( original_pos > 1.0f ) original_pos = 1.0f; // this is necessary because the code in windows isn't 100% right because thumb always returns 0 #ifndef __WXMSW__ long original_line = 0; if (original_pos < 1.0f ) { original_line = (long)(original_pos *(float)m_chatlog_text->GetNumberOfLines()); // GetNumberOfLines is expensive, only call when necessary m_chatlog_text->Freeze(); } #else wxWindowUpdateLocker noUpdates(m_chatlog_text); // use the automatic one in windows #endif m_chatlog_text->SetDefaultStyle( line.timestyle ); m_chatlog_text->AppendText( line.time ); m_chatlog_text->SetDefaultStyle( line.chatstyle ); #ifndef __WXOSX_COCOA__ if ( sett().GetUseIrcColors() ) { wxString m1; wxString m2; wxString m3; wxTextAttr at; int oldweight; char c; int color; m1 = line.chat; bool bold = false; wxFont font; wxColor curcolor(0,0,0); wxColor oldcolor(0,0,0); curcolor = line.chatstyle.GetTextColour(); at = m_chatlog_text->GetDefaultStyle(); font = at.GetFont(); oldweight = font.GetWeight(); oldcolor = line.chatstyle.GetTextColour(); while ( m1.Len() > 0 ) { c = m1.GetChar(0); if (c == 3 && m1.Len() > 1 && (m1.GetChar(1) >= 48 && m1.GetChar(1) <= 58)) // Color { if (m1.Len() > 2 && (m1.GetChar(2) >= 48 && m1.GetChar(2) <= 58)) { color = (int(m1.GetChar(1)) - 48)*10+(int(m1.GetChar(2)) - 48); m1 = m1.Mid(3); } else { color = int(m1.GetChar(1)) -48; m1 = m1.Mid(2); } wxColor dummy(0,0,0); if ( ( color > -1 ) && ( color < long(( sizeof( m_irc_colors ) / sizeof( dummy ) )) ) ) { curcolor = m_irc_colors[color]; } }else if(c == 2)//Bold { bold = !bold; m1 = m1.Mid(1); }else if(c == 0x0F) //Reset formatting { bold = false; curcolor = oldcolor; m1 = m1.Mid(1); }else{ at = m_chatlog_text->GetDefaultStyle(); at.SetFlags(wxTEXT_ATTR_TEXT_COLOUR | wxTEXT_ATTR_FONT_WEIGHT); font = at.GetFont(); if (bold) font.SetWeight(wxFONTWEIGHT_BOLD); else font.SetWeight(oldweight); at.SetFont(font); at.SetTextColour(curcolor); m_chatlog_text->SetDefaultStyle(at); m_chatlog_text->AppendText( m1.Mid(0,1) ); m1 = m1.Mid(1); } } if (bold) { font = at.GetFont(); font.SetWeight(oldweight); at.SetFont(font); m_chatlog_text->SetDefaultStyle(at); } } else #endif { m_chatlog_text->AppendText( line.chat ); } m_chatlog_text->AppendText( _T( "\n" ) ); // crop lines from history that exceeds limit int maxlenght = sett().GetChatHistoryLenght(); if ( ( maxlenght > 0 ) && ( m_chatlog_text->GetNumberOfLines() > sett().GetChatHistoryLenght() ) ) { int end_line = 0; for ( int i = 0; i < 20; i++ ) end_line += m_chatlog_text->GetLineLength( i ) + 1; m_chatlog_text->Remove( 0, end_line ); } if (original_pos < 1.0f) { #ifndef __WXMSW__ wxString linetext = m_chatlog_text->GetLineText(original_line); long zoomto = m_chatlog_text->GetValue().Find(linetext); m_chatlog_text->ShowPosition( zoomto ); // wxgtk is retarded and always autoscrolls #endif } else { m_chatlog_text->ScrollLines(10); // wx is retarded, necessary to show the latest line #ifdef __WXMSW__ m_chatlog_text->ShowPosition( m_chatlog_text->GetLastPosition() ); #endif } this->Refresh(); #ifndef __WXMSW__ if (original_pos < 1.0f) { m_chatlog_text->Thaw(); } #endif } void ChatPanel::OnLinkEvent( wxTextUrlEvent& event ) { if ( !event.GetMouseEvent().LeftDown() ) return; wxString url = m_chatlog_text->GetRange( event.GetURLStart(), event.GetURLEnd()); OpenWebBrowser( url ); } void ChatPanel::OnChanOpts( wxCommandEvent& /*unused*/ ) { CreatePopup(); if ( (m_chan_opts_button == 0) || (m_popup_menu == 0) ) return; m_chan_opts_button->PopupMenu(m_popup_menu->GetMenu()); } void ChatPanel::OnSay( wxCommandEvent& /*unused*/ ) { if ( Say( m_say_text->GetValue() ) ) m_say_text->SetValue( _T( "" ) ); } void ChatPanel::OnPaste( wxClipboardTextEvent& event ) { // Read some text if (wxTheClipboard->Open()) { wxTextDataObject data; if ( wxTheClipboard->GetData( data ) ) { wxString converted = data.GetText(); converted.Replace( _T("\r\n"), _T("\n") ); converted.Replace( _T("\r"), _T("\n") ); m_say_text->WriteText( converted ); } else event.Skip(); } else event.Skip(); wxTheClipboard->Close(); } //! @brief Output a message said in the channel. //! //! @param who nick of the person who said something. //! @param message the message to be outputted. void ChatPanel::Said( const wxString& who, const wxString& message ) { wxString me = GetMe().GetNick(); wxColour col; bool req_user = false; if ( who.Upper() == me.Upper() ) { col = sett().GetChatColorMine(); } else { // change the image of the tab to show new events SetIconHighlight( highlight_say ); if ( m_type == CPT_User ) req_user = true; //process logic for custom word highlights if ( ContainsWordToHighlight( message ) ) { req_user = sett().GetRequestAttOnHighlight(); col = sett().GetChatColorHighlight(); } else col = sett().GetChatColorNormal(); } if ( ( who == _T( "MelBot" ) || who == _T( "[BOT]tizbacbridgebot" ) ) && message.StartsWith( _T( "<" ) ) && message.Find( _T( ">" ) ) != wxNOT_FOUND ) { wxString who2; wxString message2; who2 = message.BeforeFirst( '>' ).AfterFirst( '<' ); if ( who != _T( "[BOT]tizbacbridgebot" ) ) who2 += _T( "@IRC" ); //don't highlight if i'm talking from irc to channel if ( who2.Upper().BeforeLast(_T('@')) == me.Upper() ) { req_user = false; col = sett().GetChatColorNormal(); } message2 = message.AfterFirst( '>' ); OutputLine( _T( " <" ) + who2 + _T( "> " ) + message2, col, sett().GetChatFont() ); } else { OutputLine( _T( " <" ) + who + _T( "> " ) + message, col, sett().GetChatFont() ); } if ( req_user ) { bool inactive = ui().GetActiveChatPanel() != this || !wxTheApp->IsActive() ; ui().mw().RequestUserAttention(); if ( inactive ) UiEvents::GetNotificationEventSender().SendEvent( UiEvents::NotficationData( UiEvents::PrivateMessage, wxFormat( _T("%s:\n%s") ) % who % message.Left(50) ) ); } } bool ChatPanel::ContainsWordToHighlight( const wxString& message ) const { //get list of words to highlight wxArrayString words = sett().GetHighlightedWords(); for ( unsigned int i = 0; i < words.GetCount(); i++ ) { if ( message.Find( words[i] ) != wxNOT_FOUND ) return true; } return false; } void ChatPanel::DidAction( const wxString& who, const wxString& action ) { // change the image of the tab to show new events SetIconHighlight( highlight_say ); OutputLine( _T( " * " ) + who + _T( " " ) + action, sett().GetChatColorAction(), sett().GetChatFont() ); if ( m_type == CPT_User && ( ui().GetActiveChatPanel() != this || !wxTheApp->IsActive() ) ) { UiEvents::GetNotificationEventSender().SendEvent( UiEvents::NotficationData( UiEvents::PrivateMessage, wxFormat( _T("%s \n%s") ) % who % action.Left(50) ) ); } } //! @brief Output motd sent by server //! //! @param message The MOTD message to output void ChatPanel::Motd( const wxString& message ) { wxFont f = m_chatlog_text->GetFont(); f.SetFamily( wxFONTFAMILY_MODERN ); // change the image of the tab to show new events SetIconHighlight( highlight_say ); OutputLine( _T( " ** motd ** " ) + message, sett().GetChatColorServer(), f ); } void ChatPanel::StatusMessage( const wxString& message ) { if ( m_chatlog_text == 0 ) { wxLogMessage( _T( "m_chatlog_text is NULL" ) ); } else { wxFont f = m_chatlog_text->GetFont(); f.SetFamily( wxFONTFAMILY_MODERN ); if( CPT_Server == m_type ) SetIconHighlight( highlight_important ); OutputLine( _T( " ** Server ** " ) + message, sett().GetChatColorServer(), f ); } } void ChatPanel::ClientMessage( const wxString& message ) { wxFont f = m_chatlog_text->GetFont(); f.SetFamily( wxFONTFAMILY_MODERN ); OutputLine( _T( " ** " ) + message, sett().GetChatColorClient(), f ); } void ChatPanel::UnknownCommand( const wxString& command, const wxString& params ) { wxFont f = m_chatlog_text->GetFont(); f.SetFamily( wxFONTFAMILY_MODERN ); // change the image of the tab to show new events SetIconHighlight( highlight_important ); OutputLine( _( " !! Command: \"" ) + command + _( "\" params: \"" ) + params + _T( "\"." ), sett().GetChatColorError(), f ); } wxString ChatPanel::GetChatTypeStr() const { if ( m_type == CPT_Channel ) return _( "channel" ); else if ( m_type == CPT_Battle ) return _( "battle" ); else if ( m_type == CPT_Server ) return _( "server" ); return _T( "ROOMTYPE FIXME" ); } void ChatPanel::Joined( User& who ) { if ( m_type == CPT_Channel ) { if ( sett().GetDisplayJoinLeave( m_channel->GetName() ) ) { // change the image of the tab to show new events SetIconHighlight( highlight_join_leave ); OutputLine( _T( " ** " ) + who.GetNick() + _( " joined the " ) + GetChatTypeStr() + _T( "." ), sett().GetChatColorJoinPart(), sett().GetChatFont() ); } } else if ( m_type == CPT_Battle ) { if ( sett().GetDisplayJoinLeave( _T( "game/battle" ) ) ) { OutputLine( _T( " ** " ) + who.GetNick() + _( " joined the " ) + GetChatTypeStr() + _T( "." ), sett().GetChatColorJoinPart(), sett().GetChatFont() ); } } if ( m_show_nick_list && ( m_nicklist != 0 ) ) { unsigned int numusers = 0; if ( m_type == CPT_Channel ) numusers = GetChannel()->GetNumUsers(); else if ( m_type == CPT_Server && m_server ) numusers = m_server->GetNumUsers(); m_usercount_label->SetLabel( wxFormat( _("%d users") ) % numusers ); m_nicklist->AddUser( who ); } // Also add the User to the TextCompletionDatabase textcompletiondatabase.Insert_Mapping( who.GetNick(), who.GetNick() ); } void ChatPanel::OnChannelJoin( User& who ) { // assert( m_type == CPT_Channel || m_type == CPT_Server || m_type == CPT_Battle || m_type == CPT_User ); if ( m_show_nick_list && (m_nicklist != 0) ) { unsigned int numusers = 0; if ( m_type == CPT_Channel ) numusers = GetChannel()->GetNumUsers(); else if ( m_type == CPT_Server && m_server ) numusers = m_server->GetNumUsers(); m_usercount_label->SetLabel( wxFormat( _("%d users") ) % numusers ); m_nicklist->AddUser( who ); } // Also add the User to the TextCompletionDatabase textcompletiondatabase.Insert_Mapping( who.GetNick(), who.GetNick() ); } void ChatPanel::Parted( User& who, const wxString& message ) { // assert( m_type == CPT_Channel || m_type == CPT_Server || m_type == CPT_Battle || m_type == CPT_User ); bool me_parted = m_channel && &who == &m_channel->GetMe(); if ( m_type == CPT_Channel ) { if ( m_channel == 0 ) return; if ( me_parted ) { m_channel->uidata.panel = 0; SetChannel( 0 ); return; } if ( sett().GetDisplayJoinLeave( m_channel->GetName() ) ) { // change the image of the tab to show new events SetIconHighlight( highlight_join_leave ); OutputLine( _T( " ** " ) + who.GetNick() + _( " left the " ) + GetChatTypeStr() + _T( "( " ) + message + _T( " )." ), sett().GetChatColorJoinPart(), sett().GetChatFont() ); } } else if ( m_type == CPT_Battle ) { if ( sett().GetDisplayJoinLeave( _T( "game/battle" ) ) ) { OutputLine( _T( " ** " ) + who.GetNick() + _( " left the " ) + GetChatTypeStr() + _T( "( " ) + message + _T( " )." ), sett().GetChatColorJoinPart(), sett().GetChatFont() ); } } else if ( m_type == CPT_Server && me_parted ) return; if ( m_show_nick_list && ( m_nicklist != 0 ) ) { unsigned int numusers = 0; if ( m_type == CPT_Channel ) numusers = GetChannel()->GetNumUsers(); else if ( m_type == CPT_Server && m_server ) numusers = m_server->GetNumUsers(); m_usercount_label->SetLabel( wxFormat( _("%d users") ) % numusers ); m_nicklist->RemoveUser( who ); } // Also remove the User from the TextCompletionDatabase textcompletiondatabase.Delete_Mapping( who.GetNick() ); } void ChatPanel::SetTopic( const wxString& who, const wxString& message ) { /* int pos = refined.Find( _T("\\n") ); // serch for the \n string while ( pos != -1 ) { if ( refined.Mid( pos - 1, 3 ) == _T("\\\n") ) continue; // the string \\n means escaped \n refined = refined.Left ( pos -1 ) + _T("\n") + refined.Right( pos +1 ); // replace the /n string with the carriage return char pos = refined.Find( _T("\\n") ); } */ wxFont f = m_chatlog_text->GetFont(); f.SetFamily( wxFONTFAMILY_MODERN ); // change the image of the tab to show new events if ( m_topic_set ) SetIconHighlight( highlight_say ); OutputLine( _( " ** Channel topic:" ), sett().GetChatColorServer(), f ); wxStringTokenizer tkz( message, _T("\n") ); while ( tkz.HasMoreTokens() ) { wxString msg = tkz.GetNextToken(); OutputLine( _T(" ") + msg, sett().GetChatColorServer(), f ); } OutputLine( _( " ** Set by " ) + who, sett().GetChatColorServer(), f ); m_topic_set = true; } void ChatPanel::UserStatusUpdated( User& who ) { if ( ( m_type == CPT_User ) && ( m_user == &who ) && ( m_chan_opts_button != 0 ) ) { m_chan_opts_button->SetBitmapLabel( icons().GetBitmap(icons().GetUserListStateIcon(who.GetStatus(),false, who.GetBattle() != 0 ) ) ); } if ( !m_show_nick_list || ( m_nicklist == 0 ) ) return; try { m_nicklist->UserUpdated( who ); } catch (...) { return; } } const Channel* ChatPanel::GetChannel() const { return m_channel; } void ChatPanel::SetChannel( Channel* chan ) { ASSERT_LOGIC( this, _T( "this==null" ) ); ASSERT_LOGIC( m_type == CPT_Channel, _T( "Not of type channel" ) ); if (( chan == 0 ) && ( m_channel != 0 ) ) { // causes weird crash. StatusMessage( _( "Chat closed." ) ); m_channel->uidata.panel = 0; } if ( m_show_nick_list && (m_nicklist != 0) ) { m_nicklist->ClearUsers(); } if ( chan != 0 ) { chan->uidata.panel = this; // m_chat_log.SetTarget( sett().GetDefaultServer(), chan->GetName() ); } m_channel = chan; //set back to false so when we rejoin this channel SetTopic doesn;t update the chan icon if ( !m_channel ) m_topic_set = false; } const Server* ChatPanel::GetServer() const { return m_server; } void ChatPanel::SetServer( Server* serv ) { ASSERT_LOGIC( m_type == CPT_Server, _T( "Not of type server" ) ); if (( serv == 0 ) && ( m_server != 0 ) ){ StatusMessage( _( "Chat closed." ) ); m_server->uidata.panel = 0; if ( m_nicklist ) { m_nicklist->StopTimer(); m_nicklist->Clear(); } } else if ( serv != 0 ){ serv->uidata.panel = this; if ( m_nicklist ) m_nicklist->StartTimer(); } m_server = serv; // if ( m_server ){ // m_chat_log.SetTarget( sett().GetDefaultServer(), _( "_SERVER" ) ); // } } const User* ChatPanel::GetUser() const { return m_user; } void ChatPanel::SetUser( const User* usr ) { ASSERT_LOGIC( m_type == CPT_User, _T( "Not of type user" ) ); if (( usr == 0 ) && ( m_user != 0 ) ) { StatusMessage( _( "Chat closed." ) ); m_user->uidata.panel = 0; if (m_chan_opts_button != 0) m_chan_opts_button->SetBitmapLabel( icons().GetBitmap(icons().ICON_EMPTY) ); } else if ( usr != 0 ) usr->uidata.panel = this; m_user = usr; if ( m_user ) { if (m_chan_opts_button != 0) m_chan_opts_button->SetBitmapLabel( icons().GetBitmap(icons().GetUserListStateIcon(m_user->GetStatus(),false, m_user->GetBattle() != 0 ) ) ); } // if ( m_user ) // m_chat_log.SetTarget( sett().GetDefaultServer(), usr->GetNick() ); } bool ChatPanel::IsServerPanel() const { return ( m_type == CPT_Server ); } ChatPanelType ChatPanel::GetPanelType() const { return m_type; } //! @brief Set the Channel object //! //! @param channel the Channel object. void ChatPanel::_SetChannel( Channel* channel ) { if ( m_channel != 0 ) { m_channel->uidata.panel = 0; } m_channel = channel; if ( m_channel != 0 ) { m_channel->uidata.panel = this; } } bool ChatPanel::Say( const wxString& message ) { static const unsigned int flood_threshold = 5; wxLogDebugFunc( message ); wxStringTokenizer lines( message, _T( '\n' ) ); if ( lines.CountTokens() > flood_threshold ) { PasteDialog dl ( this, wxFormat( _( "Are you sure you want to paste %d lines?" ) ) % lines.CountTokens() ); switch ( dl.ShowModal() ) { case wxID_NO : return true; case PasteDialog::pasteButtonReturnCode : { wxString url = Paste2Pastebin( message ); if ( url != wxEmptyString && wxStringTokenizer( url, _T( '\n' )).CountTokens() <= flood_threshold ) { Say( url ); return true; } else { customMessageBoxNoModal( SL_MAIN_ICON, _("Failed to post to pastebin.com.") ); return false; } } default: break; } } while ( lines.HasMoreTokens() ) { wxString line = lines.GetNextToken(); wxLogMessage( _T( "line: %s" ), line.c_str() ); if ( line.Find( '/' ) == 0 ) { if ( ui().ExecuteSayCommand( line ) ) return true; } if ( line == _T( "/ver" ) ) { //!this instance is not replaced with GetAppname for sake of help/debug online OutputLine( _( " You have SpringLobby v" ) + GetSpringLobbyVersion(), sett().GetChatColorNormal() , sett().GetChatFont() ); return true; } if ( line == _T( "/clear" ) ) { m_chatlog_text->SetValue( _T("") ); return true; } if ( m_type == CPT_Channel ) { if ( m_channel == 0 ) { OutputLine( _( " You are not in channel or channel does not exist." ), sett().GetChatColorError(), sett().GetChatFont() ); return true; } if ( line.StartsWith( _T( "/" ) ) ) { if ( m_channel->ExecuteSayCommand( line ) ) return true; if ( m_channel->GetServer().ExecuteSayCommand( line ) ) return true; OutputLine( wxFormat( _( " Error: Command (%s) does not exist, use /help for a list of available commands." ) ) % line, sett().GetChatColorError(), sett().GetChatFont() ); return true; } m_channel->Say( line ); } else if ( m_type == CPT_Battle ) { if ( m_battle == 0 ) { OutputLine( _( " You are not in battle or battle does not exist, use /help for a list of available commands." ), sett().GetChatColorError(), sett().GetChatFont() ); return true; } if ( line.StartsWith( _T( "/" ) ) ) { if ( m_battle->ExecuteSayCommand( line ) ) return true; if ( m_battle->GetServer().ExecuteSayCommand( line ) ) return true; OutputLine( wxFormat( _( " Error: Command (%s) does not exist, use /help for a list of available commands." ) ) % line, sett().GetChatColorError(), sett().GetChatFont() ); return true; } m_battle->Say( line ); } else if ( m_type == CPT_User ) { if ( m_user == 0 ) { OutputLine( _( " User is offline." ), sett().GetChatColorError(), sett().GetChatFont() ); return true; } if ( line.StartsWith( _T( "/" ) ) ) { if ( m_user->ExecuteSayCommand( line ) ) return true; if ( m_user->GetServer().ExecuteSayCommand( line ) ) return true; OutputLine( wxFormat( _( " Error: Command (%s) does not exist, use /help for a list of available commands." ) ) % line, sett().GetChatColorError(), sett().GetChatFont() ); return true; } m_user->Say( line ); } else if ( m_type == CPT_Server ) { if ( m_server == 0 ) return true; if ( line.StartsWith( _T( "/" ) ) ) { if ( m_server->ExecuteSayCommand( line ) ) return true; OutputLine( wxFormat( _( " Error: Command (%s) does not exist, use /help for a list of available commands." ) ) % line, sett().GetChatColorError(), sett().GetChatFont() ); return true; } //we need to disable the channel tab if leaving manually if (line.Upper().StartsWith( _T( "LEAVE" ) ) ) { wxString channame = line.AfterFirst(' ').BeforeFirst(' '); try { Channel& chan = m_server->GetChannel( channame ); chan.Leave(); chan.uidata.panel = 0; } catch( assert_exception ) {} } m_server->SendRaw( line ); OutputLine( _( " Sent: \"" ) + line + _( "\"" ), sett().GetChatColorNormal(), sett().GetChatFont() ); } } return true; } void ChatPanel::Part() { wxLogDebugFunc( _T( "" ) ); if ( m_type == CPT_Channel ) { if ( m_channel == 0 ) return; m_channel->Leave(); m_channel->uidata.panel = 0; } } bool ChatPanel::IsOk() const { if ( m_type == CPT_Channel ) return ( m_channel != 0 ); if ( m_type == CPT_Server ) return ( m_server != 0 ); if ( m_type == CPT_User ) return ( m_user != 0 ); if ( m_type == CPT_Battle ) return ( m_battle != 0 ); return false; } void ChatPanel::OnUserDisconnected() { // change the image of the tab to show new events SetIconHighlight( highlight_join_leave ); OutputLine( _( " ** User is now offline." ), sett().GetChatColorJoinPart(), sett().GetChatFont() ); } void ChatPanel::OnUserConnected() { // change the image of the tab to show new events SetIconHighlight( highlight_join_leave ); OutputLine( _( " ** User just got online." ), sett().GetChatColorJoinPart(), sett().GetChatFont() ); } ////////////////////////////////////////////////////////////////////////////////////// // Menu Events ////////////////////////////////////////////////////////////////////////////////////// void ChatPanel::FocusInputBox() { m_say_text->SetFocus(); } wxString ChatPanel::FindUrl( const long pos ) const { long last = m_chatlog_text->GetLastPosition(); long start = pos; while ( start > 0 && m_chatlog_text->GetRange( start-1, start ) != _T(" ") ) start--; long end = pos; //the last bit prevents topic links from being copied with next line's timestamp appended //checking for newline isn't possible, cause links may well span multiple lines while ( end < last && m_chatlog_text->GetRange( end, end+1 ) != _T(" ") && m_chatlog_text->GetRange( end, end+1 ) != _T("[") ) end++; wxString ret = m_chatlog_text->GetRange( start, end ); //! \todo there's prolly some smarter way to capture a more flexible range of url types if ( ret.StartsWith( _T("http://") ) || ret.StartsWith( _T("https://") ) || ret.StartsWith( _T("ftp://") )) return ret; else return _T(""); } void ChatPanel::OnMouseDown( wxMouseEvent& event ) { wxLogDebugFunc( _T( "" ) ); wxTextCoord row; wxTextCoord col; wxTextCtrlHitTestResult ht = m_chatlog_text->HitTest( event.GetPosition(), &col, &row); if ( ht != wxTE_HT_UNKNOWN ) { long pos = m_chatlog_text->XYToPosition( col, row ); m_url_at_pos = FindUrl( pos ); } CreatePopup(); if ( m_popup_menu != 0 ) PopupMenu( m_popup_menu->GetMenu() ); else event.Skip(); } void ChatPanel::UpdateNicklistHighlights() { if ( m_show_nick_list && (m_nicklist != 0) ) { m_nicklist->RefreshVisibleItems(); } } void ChatPanel::SortNickList() { if ( m_show_nick_list && (m_nicklist != 0 ) ) m_nicklist->SortList(); } void ChatPanel::SetIconHighlight( HighlightType highlight ) { if ( ui().GetActiveChatPanel() != this && m_chat_tabs && !IsShownOnScreen() ) { for ( unsigned int i = 0; i < m_chat_tabs->GetPageCount( ); ++i ) { if ( m_chat_tabs->GetPage( i ) == this )//!TODO: return afterwards? { switch ( highlight ) { case highlight_say : { if ( m_type == CPT_Channel && m_icon_index < 6 ) { m_icon_index = 6; m_chat_tabs->SetPageBitmap( i, m_imagelist->GetBitmap(m_icon_index)); } else if ( m_type == CPT_User && m_icon_index < 7 ) { m_icon_index = 7; m_chat_tabs->SetPageBitmap( i, m_imagelist->GetBitmap(m_icon_index)); } break; } case highlight_join_leave : { if ( m_type == CPT_Channel && m_icon_index < 4 ) { m_icon_index = 4; m_chat_tabs->SetPageBitmap( i, m_imagelist->GetBitmap(m_icon_index)); } else if ( m_type == CPT_User && m_icon_index < 5 ) { m_icon_index = 5; m_chat_tabs->SetPageBitmap( i, m_imagelist->GetBitmap(m_icon_index)); } break; } case highlight_important : { if ( m_type == CPT_Channel && m_icon_index < 8 ) { m_icon_index = 8; m_chat_tabs->SetPageBitmap( i, m_imagelist->GetBitmap(m_icon_index)); } else if ( m_type == CPT_User && m_icon_index < 9 ) { m_icon_index = 9; m_chat_tabs->SetPageBitmap( i, m_imagelist->GetBitmap(m_icon_index)); } else if ( m_type == CPT_Server && m_icon_index < 10 ) { m_icon_index = 10; m_chat_tabs->SetPageBitmap( i, m_imagelist->GetBitmap(m_icon_index)); } break; } default: break; } } } } } void ChatPanel::OnMenuItem( wxCommandEvent& event ) { m_popup_menu->OnMenuItem( event ); } void ChatPanel::SetBattle( Battle* battle ) { if ( m_battle != battle ) { if ( m_battle ) OutputLine( _( " ** Left Battle." ), sett().GetChatColorNotification(), sett().GetChatFont() ); if ( battle ) OutputLine( _( " ** Joined Battle." ), sett().GetChatColorNotification(), sett().GetChatFont() ); } m_battle = battle; if ( m_battle ) { for (unsigned int i = 0; i < m_battle->GetNumUsers();++i) { textcompletiondatabase.Insert_Mapping( m_battle->GetUser(i).GetNick(), m_battle->GetUser(i).GetNick() ); } } } void ChatPanel::LoadLastLines() { #ifdef __WXMSW__ wxWindowUpdateLocker noUpdates(m_chatlog_text); #endif wxArrayString lines = m_chat_log.GetLastLines( ); wxFont f = m_chatlog_text->GetFont(); f.SetFamily( wxFONTFAMILY_DECORATIVE ); f.SetStyle( wxFONTSTYLE_ITALIC ); wxTextAttr chatstyle( sett().GetChatColorTime(), sett().GetChatColorBackground(), f ); m_chatlog_text->SetDefaultStyle( chatstyle ); for ( size_t i = 0; i < lines.Count(); ++i ) { m_chatlog_text->AppendText( lines[i] ); m_chatlog_text->AppendText( _T( "\n" ) ); } } void ChatPanel::OnLogin( OnLoginSink::EventDataType /*data*/ ) { if ( m_type == CPT_Channel && m_channel ) { m_channel->Rejoin(); } } springlobby-0.169/src/chatpanel.h0000600000176000000410000001502412105760300020320 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_CHATPANEL_H #define SPRINGLOBBY_HEADERGUARD_CHATPANEL_H #include #include #include #include "chatlog.h" #include "Helper/TextCompletionDatabase.hpp" #include "utils/mixins.hh" #include "utils/isink.h" class wxCommandEvent; class wxSizeEvent; class wxBoxSizer; class wxSplitterWindow; class wxTextCtrl; class wxTextCtrlHist; class wxTextUrlEvent; class wxComboBox; class wxButton; class wxBitmapButton; class NickListCtrl; class Channel; class User; class ChatLog; class Server; class Battle; class Ui; class wxStaticText; class wxMouseEvent; class SLNotebook; class wxNotebook; class wxImageList; class ChatPanelMenu; enum ChatPanelType { CPT_Channel, CPT_Server, CPT_User, CPT_Battle }; enum HighlightType { highlight_say, highlight_join_leave, highlight_important }; struct ChatLine { wxString chat; wxString time; wxTextAttr timestyle; wxTextAttr chatstyle; }; /*! @brief wxPanel that contains a chat. * * This panel contains a chat with a multiline TextCtrl for the messages, a * signle line TextCtrl for messages to send, a send button and a nick list. * * The nick list is optional and can be removed by setting show_nick_list in the * constructor to false. */ class ChatPanel : public wxPanel, public OnLoginSink, public SL::NonCopyable { public: ChatPanel( wxWindow* parent, Channel& chan, wxImageList* imaglist ); ChatPanel( wxWindow* parent, const User& user, wxImageList* imaglist ); ChatPanel( wxWindow* parent, Server& serv, wxImageList* imaglist ); ChatPanel( wxWindow* parent, Battle* battle ); ~ChatPanel(); void Said( const wxString& who, const wxString& message ); void DidAction( const wxString& who, const wxString& action ); void Motd( const wxString& message ); void StatusMessage( const wxString& message ); void ClientMessage( const wxString& message ); void UnknownCommand( const wxString& command, const wxString& params ); void Joined( User& who ); void Parted( User& who, const wxString& message ); void SetTopic( const wxString& who, const wxString& message ); void UserStatusUpdated( User& who ); void OnChannelJoin( User& who ); const Channel* GetChannel() const; void SetChannel( Channel* chan ); const Server* GetServer() const; void SetServer( Server* serv ); const User* GetUser() const ; void SetUser( const User* usr ); bool IsServerPanel() const; ChatPanelType GetPanelType() const; void SetBattle( Battle* battle ); //! @returns true on success ( blank line ), false otherwise bool Say( const wxString& message ); void Part(); void FocusInputBox(); wxString GetChatTypeStr() const; size_t GetIconIndex() const { return m_icon_index; } void SetIconIndex( size_t index ) { m_icon_index = index; } const User& GetMe() const; const User* GetSelectedUser() const; bool IsOk() const; void OnUserDisconnected(); void OnUserConnected(); void OnChanOpts( wxCommandEvent& event ); void OnSay( wxCommandEvent& event ); void OnPaste( wxClipboardTextEvent& event ); void OnLinkEvent( wxTextUrlEvent& event ); void OnMouseDown( wxMouseEvent& event ); void OnKeyPressed( wxKeyEvent& keyevent ); void OnKeyReleased( wxKeyEvent& keyevent ); void UpdateNicklistHighlights(); void SortNickList(); void OnMenuItem( wxCommandEvent& event ); void OnLogin( OnLoginSink::EventDataType data ); protected: void _SetChannel( Channel* channel ); void OutputLine( const wxString& message, const wxColour& col, const wxFont& fon ); void OutputLine( const ChatLine& line ); void SetIconHighlight( HighlightType highlight ); wxString FindUrl( const long pos ) const ; bool ContainsWordToHighlight( const wxString& message ) const; bool m_show_nick_list; //!< If the nicklist should be shown or not. wxBoxSizer* m_main_sizer; //!< Main sizer containing all other sizers. wxBoxSizer* m_chat_sizer; //!< Sizer containing the chat messages, and send input and button. wxBoxSizer* m_say_sizer; //!< Sizer containing send input and button. wxBoxSizer* m_nick_sizer; //!< Sizer containing the nicklist. wxSplitterWindow* m_splitter; //!< The splitter. wxPanel* m_chat_panel; //!< Panel containing the chat. Only used when nicklist is visible. wxPanel* m_nick_panel; //!< Panel containing the nicklist. wxTextCtrl* m_chatlog_text; //!< The chat log textcontrol. wxTextCtrlHist* m_say_text; //!< The say textcontrol. wxBitmapButton* m_chan_opts_button; //!< The channel options button. NickListCtrl* m_nicklist; //!< The nicklist. wxComboBox* m_nick_filter; //!< The filter combo. wxButton* m_say_button; //!< The say button. SLNotebook* m_chat_tabs; Channel* m_channel; //!< Channel object. Server* m_server; //!< Server object. const User* m_user; //!< User object. Battle* m_battle; //!< User object. wxStaticText* m_usercount_label; const ChatPanelType m_type; //!< Channel object. wxString m_chan_pass; ChatPanelMenu* m_popup_menu; ChatLog m_chat_log; void LogTime(); void CreateControls( ); void CreatePopup(); void LoadLastLines(); size_t m_icon_index; wxImageList* m_imagelist; static const int m_groupMenu_baseID = 6798; TextCompletionDatabase textcompletiondatabase; std::vector m_buffer; bool m_disable_append; wxString m_url_at_pos; //! the mouse event sink sets this friend class ChatPanelMenu; //menu needs access to members //used to avoid marking channel as changed when it's just been created. bool m_topic_set; DECLARE_EVENT_TABLE() }; enum { CHAT_SEND = wxID_HIGHEST, CHAT_TEXT, CHAT_LOG, CHAT_CHAN_OPTS }; #endif // SPRINGLOBBY_HEADERGUARD_CHATPANEL_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/chatpanelmenu.cpp0000600000176000000410000010161712105760300021544 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include "chatpanelmenu.h" #include #include "chatpanel.h" #include "channel/channel.h" #include "utils/debug.h" #include "ui.h" #include "server.h" #include "user.h" #include "battle.h" #include "nicklistctrl.h" #include "mainwindow.h" #include "settings.h" #include "battlelist/battlelisttab.h" ChatPanelMenu::ChatPanelMenu(ChatPanel* parent, bool addChanServ, const wxString& /*title */, long /*style*/ ) : m_chatpanel(parent), m_user_menu( 0 ), m_menu_all( 0 ), displayjoinitem( 0 ), m_autorejoin( 0 ), m_append_menu( 0 ), m_withChanserv( addChanServ ) {} //!ATTENTION: _all_ event ids must be handled in ChatPanelMenu::OnMenuItem wxMenu* ChatPanelMenu::GetMenu() { m_menu_all = new wxMenu(); CreateNickListMenu(); m_append_menu = new wxMenuItem( m_menu_all, CHAT_MENU_DISABLE_APPEND, _( "Disable text appending" ), wxEmptyString, wxITEM_CHECK ); m_menu_all->Append( m_append_menu ); m_append_menu->Check( m_chatpanel->m_disable_append ); wxMenuItem* copy = new wxMenuItem( m_menu_all, wxID_COPY, _( "Copy" ), wxEmptyString, wxITEM_NORMAL ); m_menu_all->Append( copy ); if ( m_chatpanel->m_url_at_pos != _T("") ) { wxMenuItem* copylink = new wxMenuItem( m_menu_all, CHAT_MENU_COPYLINK, _( "Copy link location" ), wxEmptyString, wxITEM_NORMAL ); m_menu_all->Append( copylink ); } wxMenuItem* clear = new wxMenuItem( m_menu_all, CHAT_MENU_CH_CLEAR, _( "Clear" ), wxEmptyString, wxITEM_NORMAL ); m_menu_all->Append( clear ); if ( m_chatpanel->m_type == CPT_Channel ) { wxLogMessage( _T( "channel" ) ); m_autorejoin = new wxMenuItem( m_menu_all, CHAT_MENU_CH_AUTOJOIN, _( "Auto join this channel" ), wxEmptyString, wxITEM_CHECK ); m_menu_all->Append( m_autorejoin ); if ( m_chatpanel->m_channel ) { bool isautojoin = sett().GetChannelJoinIndex( m_chatpanel->m_channel->GetName() ) >= 0; m_autorejoin->Check( isautojoin ); } wxMenuItem* leaveitem = new wxMenuItem( m_menu_all, CHAT_MENU_CH_LEAVE, _( "Leave" ), wxEmptyString, wxITEM_NORMAL ); m_menu_all->Append( leaveitem ); displayjoinitem = new wxMenuItem( m_menu_all, CHAT_MENU_CH_DISPLAYJOIN, _( "Display Join/Leave Messages" ), wxEmptyString, wxITEM_CHECK ); if ( m_chatpanel->m_channel && m_chatpanel->m_type == CPT_Channel ) { m_menu_all->Append( displayjoinitem ); displayjoinitem->Check( sett().GetDisplayJoinLeave( m_chatpanel->m_channel->GetName() ) ); } wxMenuItem* mutelistitem = new wxMenuItem( m_menu_all, CHAT_MENU_SHOW_MUTELIST, _( "Show mute list" ), wxEmptyString, wxITEM_NORMAL ); m_menu_all->Append( mutelistitem ); if ( m_withChanserv ) { m_menu_all->AppendSeparator(); wxMenu* m_chanserv; m_chanserv = new wxMenu(); wxMenuItem* infoitem = new wxMenuItem( m_chanserv, CHAT_MENU_CH_INFO, _( "Channel info" ), wxEmptyString, wxITEM_NORMAL ); m_chanserv->Append( infoitem ); m_chanserv->AppendSeparator(); wxMenuItem* chtopicitem = new wxMenuItem( m_chanserv, CHAT_MENU_CH_TOPIC, _( "Set topic..." ), wxEmptyString, wxITEM_NORMAL ); m_chanserv->Append( chtopicitem ); wxMenuItem* chmessageitem = new wxMenuItem( m_chanserv, CHAT_MENU_CH_MSG, _( "Channel message..." ), wxEmptyString, wxITEM_NORMAL ); m_chanserv->Append( chmessageitem ); m_chanserv->AppendSeparator(); wxMenuItem* chlockitem = new wxMenuItem( m_chanserv, CHAT_MENU_CH_LOCK, _( "Lock..." ), wxEmptyString, wxITEM_NORMAL ); m_chanserv->Append( chlockitem ); wxMenuItem* chunlockitem = new wxMenuItem( m_chanserv, CHAT_MENU_CH_UNLOCK, _( "Unlock" ), wxEmptyString, wxITEM_NORMAL ); m_chanserv->Append( chunlockitem ); m_chanserv->AppendSeparator(); wxMenuItem* chregisteritem = new wxMenuItem( m_chanserv, CHAT_MENU_CH_REG, _( "Register..." ), wxEmptyString, wxITEM_NORMAL ); m_chanserv->Append( chregisteritem ); wxMenuItem* chunregisteritem = new wxMenuItem( m_chanserv, CHAT_MENU_CH_UNREG, _( "Unregister" ), wxEmptyString, wxITEM_NORMAL ); m_chanserv->Append( chunregisteritem ); m_chanserv->AppendSeparator(); wxMenu* m_spam; m_spam = new wxMenu(); wxMenuItem* spamprotonitem = new wxMenuItem( m_spam, CHAT_MENU_CH_SPAM_ON, _( "On" ), wxEmptyString, wxITEM_NORMAL ); m_spam->Append( spamprotonitem ); wxMenuItem* spamprotoffitem = new wxMenuItem( m_spam, CHAT_MENU_CH_SPAM_OFF, _( "Off" ), wxEmptyString, wxITEM_NORMAL ); m_spam->Append( spamprotoffitem ); m_spam->AppendSeparator(); wxMenuItem* spamprotisonitem = new wxMenuItem( m_spam, CHAT_MENU_CH_SPAM_ISON, _( "Is on?" ), wxEmptyString, wxITEM_NORMAL ); m_spam->Append( spamprotisonitem ); m_chanserv->Append( -1, _( "Spam protection" ), m_spam ); m_menu_all->AppendSubMenu( m_chanserv , _( "ChanServ" )); } } else if ( m_chatpanel->m_type == CPT_Server ) { wxLogMessage( _T( "server" ) ); wxMenuItem* disconnectitem = new wxMenuItem( m_menu_all, CHAT_MENU_SV_DISCON, _( "Disconnect" ), wxEmptyString, wxITEM_NORMAL ); m_menu_all->Append( disconnectitem ); wxMenuItem* reconnectitem = new wxMenuItem( m_menu_all, CHAT_MENU_SV_RECON, _( "Reconnect" ), wxEmptyString, wxITEM_NORMAL ); m_menu_all->Append( reconnectitem ); m_menu_all->AppendSeparator(); wxMenu* submenu_user; submenu_user = new wxMenu(); wxMenu* m_accounts; m_accounts = new wxMenu(); wxMenuItem* removeitem = new wxMenuItem( m_accounts, CHAT_MENU_SV_REMOVE, _( "Remove..." ), wxEmptyString, wxITEM_NORMAL ); m_accounts->Append( removeitem ); wxMenuItem* chpwditem = new wxMenuItem( m_accounts, CHAT_MENU_SV_CHPWD, _( "Change password..." ), wxEmptyString, wxITEM_NORMAL ); m_accounts->Append( chpwditem ); wxMenuItem* setaccessitem = new wxMenuItem( m_accounts, CHAT_MENU_SV_ACCESS, _( "Set access..." ), wxEmptyString, wxITEM_NORMAL ); m_accounts->Append( setaccessitem ); submenu_user->Append( -1, _( "Accounts" ), m_accounts ); submenu_user->AppendSeparator(); wxMenuItem* broadcastitem = new wxMenuItem( submenu_user, CHAT_MENU_SV_BROADCAST, _( "Broadcast..." ), wxEmptyString, wxITEM_NORMAL ); submenu_user->Append( broadcastitem ); m_menu_all->Append( -1, _( "Admin" ), m_user_menu ); } else if ( m_chatpanel->m_type == CPT_User ) { if ( m_chatpanel->m_user ) m_user_menu->EnableItems( true, m_chatpanel->m_user->GetNick() ); m_menu_all->AppendSubMenu( m_user_menu, _("User") ); } if ( m_chatpanel->m_chat_log.LogEnabled() ) { wxMenuItem* open_extern = new wxMenuItem( m_menu_all, CHAT_MENU_LOG_OPEN, _( "Open log in editor" ), wxEmptyString, wxITEM_NORMAL ); m_menu_all->Append( open_extern ); } // ConnectEvents(); // m_user_menu->Connect( GROUP_ID_NEW, wxEVT_COMMAND_MENU_SELECTED, // wxCommandEventHandler( ChatPanelMenu::OnUserMenuCreateGroup ), 0, this ); return m_menu_all; } void ChatPanelMenu::CreateNickListMenu() { m_user_menu = new ChatPanelMenu::UserMenu( this, this ); if ( m_chatpanel->m_type != CPT_User ) { wxMenuItem* chatitem = new wxMenuItem( m_user_menu, CHAT_MENU_US_CHAT, _( "Open Chat" ) , wxEmptyString, wxITEM_NORMAL ); m_user_menu->Append( chatitem ); } wxMenuItem* joinbattleitem = new wxMenuItem( m_user_menu, CHAT_MENU_US_JOIN, _( "Join same battle" ) , wxEmptyString, wxITEM_NORMAL ); m_user_menu->Append( joinbattleitem ); m_user_menu->AppendSeparator(); bool moderator = false; try { moderator = serverSelector().GetServer().GetMe().GetStatus().moderator; }catch(...){} if ( moderator ) { wxMenuItem* modingameitem = new wxMenuItem( m_user_menu, CHAT_MENU_US_MODERATOR_INGAME, _( "Ingame time" ), wxEmptyString, wxITEM_NORMAL ); m_user_menu->Append( modingameitem ); wxMenuItem* modipitem = new wxMenuItem( m_user_menu, CHAT_MENU_US_MODERATOR_CURIP, _( "Retrieve IP and Smurfs" ), wxEmptyString, wxITEM_NORMAL ); m_user_menu->Append( modipitem ); m_user_menu->AppendSeparator(); wxMenu* m_user_menu_mute; m_user_menu_mute = new wxMenu(); wxMenuItem* modmuteitem = new wxMenuItem( m_user_menu_mute, CHAT_MENU_US_MODERATOR_MUTE, _( "Mute..." ) , wxEmptyString, wxITEM_NORMAL ); m_user_menu_mute->Append( modmuteitem ); wxMenuItem* modmute5item = new wxMenuItem( m_user_menu_mute, CHAT_MENU_US_MODERATOR_MUTE_5, _( "Mute for 5 minutes" ) , wxEmptyString, wxITEM_NORMAL ); m_user_menu_mute->Append( modmute5item ); wxMenuItem* modmute10item = new wxMenuItem( m_user_menu_mute, CHAT_MENU_US_MODERATOR_MUTE_10, _( "Mute for 10 minutes" ), wxEmptyString, wxITEM_NORMAL ); m_user_menu_mute->Append( modmute10item ); wxMenuItem* modmute30item = new wxMenuItem( m_user_menu_mute, CHAT_MENU_US_MODERATOR_MUTE_30, _( "Mute for 30 minutes" ), wxEmptyString, wxITEM_NORMAL ); m_user_menu_mute->Append( modmute30item ); wxMenuItem* modmute120item = new wxMenuItem( m_user_menu_mute, CHAT_MENU_US_MODERATOR_MUTE_120, _( "Mute for 2 hours" ) , wxEmptyString, wxITEM_NORMAL ); m_user_menu_mute->Append( modmute120item ); wxMenuItem* modmute1440item = new wxMenuItem( m_user_menu_mute, CHAT_MENU_US_MODERATOR_MUTE_1440, _( "Mute for 1 day" ), wxEmptyString, wxITEM_NORMAL ); m_user_menu_mute->Append( modmute1440item ); m_user_menu_mute->AppendSeparator(); wxMenuItem* modunmuteitem = new wxMenuItem( m_user_menu_mute, CHAT_MENU_US_MODERATOR_UNMUTE, _( "Unmute" ), wxEmptyString, wxITEM_NORMAL ); m_user_menu_mute->Append( modunmuteitem ); m_user_menu->Append( -1, _( "Mute" ), m_user_menu_mute ); wxMenuItem* modkickitem = new wxMenuItem( m_user_menu, CHAT_MENU_US_MODERATOR_KICK, _( "Kick..." ), wxEmptyString, wxITEM_NORMAL ); m_user_menu->Append( modkickitem ); m_user_menu->AppendSeparator(); wxMenuItem* modbanitem = new wxMenuItem( m_user_menu, CHAT_MENU_US_MODERATOR_BAN, _( "Ban..." ), wxEmptyString, wxITEM_NORMAL ); m_user_menu->Append( modbanitem ); wxMenuItem* modunbanitem = new wxMenuItem( m_user_menu, CHAT_MENU_US_MODERATOR_UNBAN, _( "Unban" ), wxEmptyString, wxITEM_NORMAL ); m_user_menu->Append( modunbanitem ); m_user_menu->AppendSeparator(); wxMenuItem* modringitem = new wxMenuItem( m_user_menu, CHAT_MENU_US_MODERATOR_RING, _( "Ring" ), wxEmptyString, wxITEM_NORMAL ); m_user_menu->Append( modringitem ); //m_user_menu->Append( -1, _("Moderator"), m_user_menu ); } else { wxMenuItem* slapitem = new wxMenuItem( m_user_menu, CHAT_MENU_US_SLAP, _( "Slap!" ), wxEmptyString, wxITEM_NORMAL ); m_user_menu->Append( slapitem ); } if ( m_chatpanel->m_type != CPT_User ) { m_user_menu->AppendSeparator(); wxMenu* m_chanserv; m_chanserv = new wxMenu(); wxMenuItem* chmuteitem = new wxMenuItem( m_chanserv, CHAT_MENU_US_MUTE, _( "Mute..." ), wxEmptyString, wxITEM_NORMAL ); m_chanserv->Append( chmuteitem ); wxMenuItem* chunmuteitem = new wxMenuItem( m_chanserv, CHAT_MENU_US_UNMUTE, _( "Unmute" ), wxEmptyString, wxITEM_NORMAL ); m_chanserv->Append( chunmuteitem ); m_chanserv->AppendSeparator(); wxMenuItem* chkickitem = new wxMenuItem( m_chanserv, CHAT_MENU_US_KICK, _( "Kick..." ), wxEmptyString, wxITEM_NORMAL ); m_chanserv->Append( chkickitem ); m_chanserv->AppendSeparator(); wxMenuItem* chopitem = new wxMenuItem( m_chanserv, CHAT_MENU_US_OP, _( "Op" ), wxEmptyString, wxITEM_NORMAL ); m_chanserv->Append( chopitem ); wxMenuItem* chdeopitem = new wxMenuItem( m_chanserv, CHAT_MENU_US_DEOP, _( "DeOp" ), wxEmptyString, wxITEM_NORMAL ); m_chanserv->Append( chdeopitem ); m_user_menu->Append( -1, _( "ChanServ" ), m_chanserv ); } } ChatPanelMenu::UserMenu* ChatPanelMenu::GetUserMenu() { CreateNickListMenu(); return m_user_menu; } ChatPanelMenu::UserMenu* ChatPanelMenu::GetUserMenuNoCreate() { return m_user_menu; } void ChatPanelMenu::OnUserMenuCopyLink( wxCommandEvent& /*unused*/ ) { CopyToClipboard( m_chatpanel->m_url_at_pos ); m_chatpanel->m_url_at_pos = _T(""); } ////////////////////////////////////////////////////////////////////////////////////// // Menu Events ////////////////////////////////////////////////////////////////////////////////////// void ChatPanelMenu::OnChannelMenuLeave( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; m_chatpanel->Part(); m_chatpanel->SetChannel( 0 ); } void ChatPanelMenu::OnChannelMenuDisplayJoinLeave( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !displayjoinitem->IsChecked() ) { sett().SetDisplayJoinLeave( false, m_chatpanel->m_channel->GetName() ); displayjoinitem->Check( false ); } else { sett().SetDisplayJoinLeave( true, m_chatpanel->m_channel->GetName() ); displayjoinitem->Check( true ); } } void ChatPanelMenu::OnChannelAutoJoin( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( m_autorejoin == 0 ) return; if ( m_autorejoin->IsChecked() ) { sett().AddChannelJoin( m_chatpanel->m_channel->GetName(), m_chatpanel->m_channel->GetPassword() ); m_autorejoin->Check( true ); } else { sett().RemoveChannelJoin( m_chatpanel->m_channel->GetName() ); m_autorejoin->Check( false ); } } void ChatPanelMenu::OnChannelMenuInfo( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not in this channel." ) ); return; } User& cs = m_chatpanel->m_channel->GetUser( _T( "ChanServ" ) ); cs.Say( _T( "!INFO #" ) + m_chatpanel->m_channel->GetName() ); //INFO // } void ChatPanelMenu::OnChannelMenuTopic( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not in this channel." ) ); return; } User& cs = m_chatpanel->m_channel->GetUser( _T( "ChanServ" ) ); wxString topic = m_chatpanel->m_channel->GetTopic(); if ( !ui().AskText( _( "Set topic..." ), _( "What should be the new topic?" ), topic, wxOK | wxCANCEL | wxCENTRE | wxTE_MULTILINE ) ) return; topic.Replace( _T("\n"), _T("\\n") ); cs.Say( _T( "!TOPIC #" ) + m_chatpanel->m_channel->GetName() + _T( " " ) + topic ); //TOPIC // {topic} } void ChatPanelMenu::OnChannelMenuMessage( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not in this channel." ) ); return; } User& cs = m_chatpanel->m_channel->GetUser( _T( "ChanServ" ) ); wxString text; if ( !ui().AskText( _( "Channel message..." ), _( "Message:" ), text ) ) return; cs.Say( _T( "!CHANMSG #" ) + m_chatpanel->m_channel->GetName() + _T( " " ) + text ); //CHANMSG // {message} } void ChatPanelMenu::OnChannelMenuLock( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not in this channel." ) ); return; } User& cs = m_chatpanel->m_channel->GetUser( _T( "ChanServ" ) ); wxString text; if ( !ui().AskText( _( "Lock channel..." ), _( "What should the new password be?" ), text ) ) return; cs.Say( _T( "!LOCK #" ) + m_chatpanel->m_channel->GetName() + _T( " " ) + text ); //LOCK // } void ChatPanelMenu::OnChannelMenuUnlock( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not in this channel." ) ); return; } User& cs = m_chatpanel->m_channel->GetUser( _T( "ChanServ" ) ); if ( !ui().Ask( _( "Unlock Channel" ), _( "Are you sure you want to unlock this channel?" ) ) ) return; cs.Say( _T( "!UNLOCK #" ) + m_chatpanel->m_channel->GetName() ); //UNLOCK // } void ChatPanelMenu::OnChannelMenuRegister( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->GetServer().UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not on this server." ) ); return; } User& cs = m_chatpanel->m_channel->GetServer().GetUser( _T( "ChanServ" ) ); wxString text = m_chatpanel->m_channel->GetMe().GetNick(); if ( !ui().AskText( _( "Register Channel" ), _( "Who should be appointed founder of this channel?" ), text ) ) return; cs.Say( _T( "!REGISTER #" ) + m_chatpanel->m_channel->GetName() + _T( " " ) + text ); //REGISTER } void ChatPanelMenu::OnChannelMenuUnregister( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->GetServer().UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not on this server." ) ); return; } User& cs = m_chatpanel->m_channel->GetServer().GetUser( _T( "ChanServ" ) ); if ( !ui().Ask( _( "Unregister Channel" ), _( "Are you sure you want to unregister this channel?" ) ) ) return; cs.Say( _T( "!UNREGISTER #" ) + m_chatpanel->m_channel->GetName() ); //UNREGISTER } void ChatPanelMenu::OnChannelMenuSpamOn( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not in this channel." ) ); return; } User& cs = m_chatpanel->m_channel->GetUser( _T( "ChanServ" ) ); cs.Say( _T( "!SPAMPROTECTION #" ) + m_chatpanel->m_channel->GetName() + _T( " on" ) ); //SPAMPROTECTION // } void ChatPanelMenu::OnChannelMenuSpanOff( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not in this channel." ) ); return; } User& cs = m_chatpanel->m_channel->GetUser( _T( "ChanServ" ) ); cs.Say( _T( "!SPAMPROTECTION #" ) + m_chatpanel->m_channel->GetName() + _T( " off" ) ); //SPAMPROTECTION // } void ChatPanelMenu::OnChannelMenuSpamIsOn( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not in this channel." ) ); return; } User& cs = m_chatpanel->m_channel->GetUser( _T( "ChanServ" ) ); cs.Say( _T( "!SPAMPROTECTION #" ) + m_chatpanel->m_channel->GetName() ); //SPAMPROTECTION // } void ChatPanelMenu::OnServerMenuDisconnect( wxCommandEvent& /*unused*/ ) { ui().Disconnect(); } void ChatPanelMenu::OnServerMenuReconnect( wxCommandEvent& /*unused*/ ) { ui().Reconnect(); } void ChatPanelMenu::OnServerMenuRemove( wxCommandEvent& /*unused*/ ) { wxString user; if ( !ui().AskText( _( "Remove User Acount" ), _( "What user account do you want to remove today?" ), user ) ) return; if ( !ui().Ask( _( "Remove Account" ), _( "Are you sure you want to remove the account " ) + user + _T( "?" ) ) ) return; m_chatpanel->Say( _T( "removeaccount " ) + user ); } void ChatPanelMenu::OnServerMenuChangePassword( wxCommandEvent& /*unused*/ ) { wxString user, password; if ( !ui().AskText( _( "Change User Acount Password" ), _( "What user account do you want to change the password for?" ), user ) ) return; if ( !ui().AskPassword( _( "Change User Acount Password" ), _( "What would be the new password?" ), password ) ) return; m_chatpanel->Say( _T( "changeaccountpass " ) + user + _T( " " ) + password ); } void ChatPanelMenu::OnServerMenuSetAccess( wxCommandEvent& /*unused*/ ) { ui().ShowMessage( _( "Error" ), _( "Not Implemented" ) ); } void ChatPanelMenu::OnServerMenuBroadcast( wxCommandEvent& /*unused*/ ) { wxString msg; if ( !ui().AskText( _( "Broadcast Message" ), _( "Message to be broadcasted:" ), msg ) ) return; m_chatpanel->Say( _T( "broadcast " ) + msg ); } void ChatPanelMenu::OnUserMenuOpenChat( wxCommandEvent& /*unused*/ ) { const User* user = m_chatpanel->GetSelectedUser(); if ( user == 0 ) return; ui().mw().OpenPrivateChat( *user ); } void ChatPanelMenu::OnUserMenuJoinSame( wxCommandEvent& /*unused*/ ) { const User* user = m_chatpanel->GetSelectedUser(); if ( user == 0 ) return; Battle* battle = user->GetBattle(); if ( battle == 0 ) return; ui().mw().GetBattleListTab().DoJoin(*battle); } void ChatPanelMenu::OnUserMenuSlap( wxCommandEvent& /*unused*/ ) { const User* user = m_chatpanel->GetSelectedUser(); if ( user == 0 ) return; if ( m_chatpanel->m_type == CPT_Channel ) { if ( m_chatpanel->m_channel == 0 ) return; m_chatpanel->m_channel->DoAction( _T( "Slaps " ) + user->GetNick() + _T( " around with a large PeeWee!" ) ); } else if ( m_chatpanel->m_type == CPT_User ) { if ( m_chatpanel->m_user == 0 ) return; m_chatpanel->m_user->DoAction( _T( "slaps " ) + user->GetNick() + _T( " around with a large PeeWee!" ) ); } } void ChatPanelMenu::OnUserMenuMute( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not in this channel." ) ); return; } wxString mutetime = _T( "5" ); if ( !ui().AskText( _( "Mute User" ), _( "For how many minutes should the user be muted?" ), mutetime ) ) return; User& cs = m_chatpanel->m_channel->GetUser( _T( "ChanServ" ) ); const User* user = m_chatpanel->GetSelectedUser(); if ( user == 0 ) return; cs.Say( _T( "!MUTE #" ) + m_chatpanel->m_channel->GetName() + _T( " " ) + user->GetNick() + _T( " " ) + mutetime ); //MUTE // [] } void ChatPanelMenu::OnUserMenuUnmute( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not in this channel." ) ); return; } User& cs = m_chatpanel->m_channel->GetUser( _T( "ChanServ" ) ); const User* user = m_chatpanel->GetSelectedUser(); if ( user == 0 ) return; cs.Say( _T( "!UNMUTE #" ) + m_chatpanel->m_channel->GetName() + _T( " " ) + user->GetNick() ); //UNMUTE // } void ChatPanelMenu::OnUserMenuKick( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not in this channel." ) ); return; } const User* user = m_chatpanel->GetSelectedUser(); if ( user == 0 ) return; wxString msg; if ( !ui().AskText( _( "Kick User" ), _( "Reason:" ), msg ) ) return; User& cs = m_chatpanel->m_channel->GetUser( _T( "ChanServ" ) ); if ( msg != wxEmptyString ) msg = _T( " " ) + msg; cs.Say( _T( "!KICK #" ) + m_chatpanel->m_channel->GetName() + _T( " " ) + user->GetNick() + msg ); //KICK // [{reason}] } void ChatPanelMenu::OnUserMenuOp( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not in this channel." ) ); return; } const User* user = m_chatpanel->GetSelectedUser(); if ( user == 0 ) return; User& cs = m_chatpanel->m_channel->GetUser( _T( "ChanServ" ) ); cs.Say( _T( "!OP #" ) + m_chatpanel->m_channel->GetName() + _T( " " ) + user->GetNick() ); //OP // } void ChatPanelMenu::OnUserMenuDeop( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel == 0 ) return; if ( !m_chatpanel->m_channel->UserExists( _T( "ChanServ" ) ) ) { ui().ShowMessage( _( "ChanServ error" ), _( "ChanServ is not in this channel." ) ); return; } const User* user = m_chatpanel->GetSelectedUser(); if ( user == 0 ) return; User& cs = m_chatpanel->m_channel->GetUser( _T( "ChanServ" ) ); cs.Say( _T( "!DEOP #" ) + m_chatpanel->m_channel->GetName() + _T( " " ) + user->GetNick() ); //DEOP // } void ChatPanelMenu::OnUserMenuModeratorIngame( wxCommandEvent& /*unused*/ ) { serverSelector().GetServer().RequestInGameTime( m_chatpanel->GetSelectedUser()->GetNick() ); } void ChatPanelMenu::OnUserMenuModeratorCurrentIP( wxCommandEvent& /*unused*/ ) { serverSelector().GetServer().ModeratorGetIP( m_chatpanel->GetSelectedUser()->GetNick() ); } void ChatPanelMenu::OnUserMenuModeratorKick( wxCommandEvent& /*unused*/ ) { wxString reason; if ( !ui().AskText( _( "Kick user" ), _( "Reason:" ), reason ) ) return; serverSelector().GetServer().ModeratorKick( m_chatpanel->GetSelectedUser()->GetNick(), reason ); } void ChatPanelMenu::OnUserMenuModeratorBan( wxCommandEvent& /*unused*/ ) { ui().ShowMessage( _( "Error" ), _( "Not Implemented" ) ); } void ChatPanelMenu::OnUserMenuModeratorUnban( wxCommandEvent& /*unused*/ ) { ui().ShowMessage( _( "Error" ), _( "Not Implemented" ) ); } void ChatPanelMenu::OnUserMenuModeratorMute( wxCommandEvent& /*unused*/ ) { wxString duration; if ( !ui().AskText( _( "Mute user" ), _( "Duration:" ), duration ) ) return; long int dur = 0; duration.ToLong( &dur, dur ); serverSelector().GetServer().ModeratorMute( m_chatpanel->m_channel->GetName(), m_chatpanel->GetSelectedUser()->GetNick(), ( int ) dur, true ); } void ChatPanelMenu::OnUserMenuModeratorMute5( wxCommandEvent& /*unused*/ ) { serverSelector().GetServer().ModeratorMute( m_chatpanel->m_channel->GetName(), m_chatpanel->GetSelectedUser()->GetNick(), 5, true ); } void ChatPanelMenu::OnUserMenuModeratorMute10( wxCommandEvent& /*unused*/ ) { serverSelector().GetServer().ModeratorMute( m_chatpanel->m_channel->GetName(), m_chatpanel->GetSelectedUser()->GetNick(), 10, true ); } void ChatPanelMenu::OnUserMenuModeratorMute30( wxCommandEvent& /*unused*/ ) { serverSelector().GetServer().ModeratorMute( m_chatpanel->m_channel->GetName(), m_chatpanel->GetSelectedUser()->GetNick(), 30, true ); } void ChatPanelMenu::OnUserMenuModeratorMute120( wxCommandEvent& /*unused*/ ) { serverSelector().GetServer().ModeratorMute( m_chatpanel->m_channel->GetName(), m_chatpanel->GetSelectedUser()->GetNick(), 120, true ); } void ChatPanelMenu::OnUserMenuModeratorMute1440( wxCommandEvent& /*unused*/ ) { serverSelector().GetServer().ModeratorMute( m_chatpanel->m_channel->GetName(), m_chatpanel->GetSelectedUser()->GetNick(), 1440, true ); } void ChatPanelMenu::OnUserMenuModeratorUnmute( wxCommandEvent& /*unused*/ ) { serverSelector().GetServer().ModeratorUnmute( m_chatpanel->m_channel->GetName(), m_chatpanel->GetSelectedUser()->GetNick() ); } void ChatPanelMenu::OnUserMenuModeratorRing( wxCommandEvent& /*unused*/ ) { serverSelector().GetServer().Ring( m_chatpanel->GetSelectedUser()->GetNick() ); } void ChatPanelMenu::OnMenuToggleAppend( wxCommandEvent& /*unused*/ ) { m_chatpanel->m_disable_append = m_append_menu->IsChecked(); if ( !m_chatpanel->m_disable_append ) { for ( std::vector::const_iterator iter = m_chatpanel->m_buffer.begin(); iter < m_chatpanel->m_buffer.end() ; ++iter ) m_chatpanel->OutputLine( *iter ); m_chatpanel->m_buffer.clear(); } } void ChatPanelMenu::OnChannelMenuShowMutelist( wxCommandEvent& /*unused*/ ) { if ( m_chatpanel->m_channel && ( m_chatpanel->m_type == CPT_Channel ) ) { m_chatpanel->m_channel->GetServer().SendRaw( _T("MUTELIST ") + m_chatpanel->m_channel->GetName() ); } } void ChatPanelMenu::OnChatMenuOpenLog( wxCommandEvent& ) { m_chatpanel->m_chat_log.OpenInEditor(); } void ChatPanelMenu::OnChannelClearContents( wxCommandEvent& /*unused*/ ) { m_chatpanel->m_chatlog_text->SetValue( _T("") ); } void ChatPanelMenu::OnUserMenuAddToGroup( wxCommandEvent& event ) { int id = event.GetId(); if ( m_user_menu ) { wxString groupname = m_user_menu->GetGroupByEvtID(id); const User* user = m_chatpanel->GetSelectedUser(); if ( user ) useractions().AddUserToGroup( groupname, user->GetNick() ); } } void ChatPanelMenu::OnUserMenuDeleteFromGroup( wxCommandEvent& /*unused*/ ) { const User* user = m_chatpanel->GetSelectedUser(); if ( user ) useractions().RemoveUser( user->GetNick() ); } void ChatPanelMenu::OnUserMenuCreateGroup( wxCommandEvent& /*unused*/ ) { wxString name; if ( ui().AskText( _("Enter name"), _("Please enter the name for the new group.\nAfter clicking ok you will be taken to adjust its settings."), name ) ) { const User* user = m_chatpanel->GetSelectedUser(); if ( user ) { useractions().AddGroup( name ); useractions().AddUserToGroup( name, user->GetNick() ); ui().mw().ShowConfigure( MainWindow::OPT_PAGE_GROUPS ); } else customMessageBoxNoModal( SL_MAIN_ICON, _("couldn't add user"), _("Error") ); } } void ChatPanelMenu::OnMenuItem( wxCommandEvent& event ) { if ( event.GetId() == CHAT_MENU_SHOW_MUTELIST ) OnChannelMenuShowMutelist( event ); else if ( event.GetId() == CHAT_MENU_DISABLE_APPEND ) OnMenuToggleAppend( event ); else if ( event.GetId() == CHAT_MENU_CH_LEAVE ) OnChannelMenuLeave( event ); else if ( event.GetId() == CHAT_MENU_CH_DISPLAYJOIN ) OnChannelMenuDisplayJoinLeave( event ); else if ( event.GetId() == CHAT_MENU_CH_AUTOJOIN ) OnChannelAutoJoin( event ); else if ( event.GetId() == CHAT_MENU_CH_CLEAR ) OnChannelClearContents( event ); else if ( event.GetId() == CHAT_MENU_SV_DISCON ) OnServerMenuDisconnect( event ); else if ( event.GetId() == CHAT_MENU_SV_RECON ) OnServerMenuReconnect( event ); else if ( event.GetId() == CHAT_MENU_SV_REMOVE ) OnServerMenuRemove( event ); else if ( event.GetId() == CHAT_MENU_SV_CHPWD ) OnServerMenuChangePassword( event ); else if ( event.GetId() == CHAT_MENU_SV_ACCESS ) OnServerMenuSetAccess( event ); else if ( event.GetId() == CHAT_MENU_SV_BROADCAST ) OnServerMenuBroadcast( event ); else if ( event.GetId() == CHAT_MENU_US_CHAT ) OnUserMenuOpenChat( event ); else if ( event.GetId() == CHAT_MENU_US_JOIN ) OnUserMenuJoinSame( event ); else if ( event.GetId() == CHAT_MENU_US_SLAP ) OnUserMenuSlap( event ); else if ( event.GetId() == CHAT_MENU_US_MUTE ) OnUserMenuMute( event ); else if ( event.GetId() == CHAT_MENU_US_UNMUTE ) OnUserMenuUnmute( event ); else if ( event.GetId() == CHAT_MENU_US_KICK ) OnUserMenuKick( event ); else if ( event.GetId() == CHAT_MENU_US_OP ) OnUserMenuOp( event ); else if ( event.GetId() == CHAT_MENU_US_DEOP ) OnUserMenuDeop( event ); else if ( event.GetId() == CHAT_MENU_US_MODERATOR_INGAME ) OnUserMenuModeratorIngame( event ); else if ( event.GetId() == CHAT_MENU_US_MODERATOR_CURIP ) OnUserMenuModeratorCurrentIP( event ); else if ( event.GetId() == CHAT_MENU_US_MODERATOR_KICK ) OnUserMenuModeratorKick( event ); else if ( event.GetId() == CHAT_MENU_US_MODERATOR_BAN ) OnUserMenuModeratorBan( event ); else if ( event.GetId() == CHAT_MENU_US_MODERATOR_UNBAN ) OnUserMenuModeratorUnban( event ); else if ( event.GetId() == CHAT_MENU_US_MODERATOR_MUTE ) OnUserMenuModeratorMute( event ); else if ( event.GetId() == CHAT_MENU_US_MODERATOR_MUTE_5 ) OnUserMenuModeratorMute5( event ); else if ( event.GetId() == CHAT_MENU_US_MODERATOR_MUTE_10 ) OnUserMenuModeratorMute10( event ); else if ( event.GetId() == CHAT_MENU_US_MODERATOR_MUTE_30 ) OnUserMenuModeratorMute30( event ); else if ( event.GetId() == CHAT_MENU_US_MODERATOR_MUTE_120 ) OnUserMenuModeratorMute120( event ); else if ( event.GetId() == CHAT_MENU_US_MODERATOR_MUTE_1440 ) OnUserMenuModeratorMute1440( event ); else if ( event.GetId() == CHAT_MENU_US_MODERATOR_UNMUTE ) OnUserMenuModeratorUnmute( event ); else if ( event.GetId() == CHAT_MENU_US_MODERATOR_RING ) OnUserMenuModeratorRing( event ); else if ( event.GetId() == CHAT_MENU_COPYLINK ) OnUserMenuCopyLink( event ); else if ( event.GetId() == CHAT_MENU_LOG_OPEN ) OnChatMenuOpenLog( event ); else if ( event.GetId() == CHAT_MENU_CH_INFO ) OnChannelMenuInfo( event ); else if ( event.GetId() == CHAT_MENU_CH_LOCK ) OnChannelMenuLock( event ); else if ( event.GetId() == CHAT_MENU_CH_UNLOCK ) OnChannelMenuUnlock( event ); else if ( event.GetId() == CHAT_MENU_CH_REG ) OnChannelMenuRegister( event ); else if ( event.GetId() == CHAT_MENU_CH_UNREG ) OnChannelMenuUnregister( event ); else if ( event.GetId() == CHAT_MENU_CH_SPAM_ON ) OnChannelMenuSpamOn( event ); else if ( event.GetId() == CHAT_MENU_CH_SPAM_OFF ) OnChannelMenuSpanOff( event ); else if ( event.GetId() == CHAT_MENU_CH_SPAM_ISON ) OnChannelMenuSpamIsOn( event ); else if ( event.GetId() == CHAT_MENU_CH_TOPIC ) OnChannelMenuTopic( event ); else if ( event.GetId() == CHAT_MENU_CH_MSG ) OnChannelMenuMessage( event ); else if ( event.GetId() == GROUP_ID_NEW ) OnUserMenuCreateGroup( event ); else if ( event.GetId() == GROUP_ID_REMOVE ) OnUserMenuDeleteFromGroup( event ); else if ( event.GetId() == wxID_COPY ) { m_chatpanel->m_chatlog_text->OnCopy(event); } else OnUserMenuAddToGroup( event ); } springlobby-0.169/src/chatpanelmenu.h0000600000176000000410000001670712105760300021216 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_CHATPANELMENU_H #define SPRINGLOBBY_HEADERGUARD_CHATPANELMENU_H #include #include "usermenu.h" #include "utils/mixins.hh" //! seperating this into a friend class enables us to re-use it in the tab header right click evt class ChatPanelMenu : public wxEvtHandler , public SL::NonCopyable { public: typedef SL_GENERIC::UserMenu UserMenu; ChatPanelMenu(ChatPanel* parent, bool addChanServ = true, const wxString& title = wxEmptyString, long style = 0); UserMenu* GetUserMenu(); void OnMenuToggleAppend( wxCommandEvent& event ); void OnChannelMenuLeave( wxCommandEvent& event ); void OnChannelMenuDisplayJoinLeave( wxCommandEvent& event ); void OnChannelAutoJoin( wxCommandEvent& event ); void OnChannelMenuInfo( wxCommandEvent& event ); void OnChannelMenuTopic( wxCommandEvent& event ); void OnChannelMenuMessage( wxCommandEvent& event ); void OnChannelMenuLock( wxCommandEvent& event ); void OnChannelMenuUnlock( wxCommandEvent& event ); void OnChannelMenuRegister( wxCommandEvent& event ); void OnChannelMenuUnregister( wxCommandEvent& event ); void OnChannelMenuSpamOn( wxCommandEvent& event ); void OnChannelMenuSpanOff( wxCommandEvent& event ); void OnChannelMenuSpamIsOn( wxCommandEvent& event ); void OnChannelMenuShowMutelist( wxCommandEvent& event ); void OnServerMenuDisconnect( wxCommandEvent& event ); void OnServerMenuReconnect( wxCommandEvent& event ); void OnServerMenuRemove( wxCommandEvent& event ); void OnServerMenuChangePassword( wxCommandEvent& event ); void OnServerMenuSetAccess( wxCommandEvent& event ); void OnServerMenuBroadcast( wxCommandEvent& event ); void OnUserMenuOpenChat( wxCommandEvent& event ); void OnUserMenuJoinSame( wxCommandEvent& event ); void OnUserMenuSlap( wxCommandEvent& event ); void OnUserMenuMute( wxCommandEvent& event ); void OnUserMenuUnmute( wxCommandEvent& event ); void OnUserMenuKick( wxCommandEvent& event ); void OnUserMenuOp( wxCommandEvent& event ); void OnUserMenuDeop( wxCommandEvent& event ); void OnUserMenuModeratorIngame( wxCommandEvent& event ); void OnUserMenuModeratorCurrentIP( wxCommandEvent& event ); void OnUserMenuModeratorKick( wxCommandEvent& event ); void OnUserMenuModeratorBan( wxCommandEvent& event ); void OnUserMenuModeratorUnban( wxCommandEvent& event ); void OnUserMenuModeratorMute( wxCommandEvent& event ); void OnUserMenuModeratorMute5( wxCommandEvent& event ); void OnUserMenuModeratorMute10( wxCommandEvent& event ); void OnUserMenuModeratorMute30( wxCommandEvent& event ); void OnUserMenuModeratorMute120( wxCommandEvent& event ); void OnUserMenuModeratorMute1440( wxCommandEvent& event ); void OnUserMenuModeratorUnmute( wxCommandEvent& event ); void OnUserMenuModeratorRing( wxCommandEvent& event ); void OnUserMenuCopyLink( wxCommandEvent& event ); void OnChatMenuOpenLog( wxCommandEvent& event ); void OnChannelClearContents( wxCommandEvent& event ); void OnUserMenuAddToGroup( wxCommandEvent& event ); void OnUserMenuDeleteFromGroup( wxCommandEvent& event ); void OnUserMenuCreateGroup( wxCommandEvent& event ); void OnMenuItem( wxCommandEvent& event ); wxMenu* GetMenu(); ChatPanelMenu::UserMenu* GetUserMenuNoCreate(); protected: void CreateNickListMenu(); ChatPanel* m_chatpanel; UserMenu* m_user_menu; wxMenu* m_menu_all; wxMenuItem* displayjoinitem; wxMenuItem* m_autorejoin; wxMenuItem* m_append_menu; bool m_withChanserv; }; static const long CHAT_MENU_SHOW_MUTELIST = wxNewId(); static const long CHAT_MENU_DISABLE_APPEND = wxNewId(); static const long CHAT_MENU_CH_LEAVE = wxNewId(); static const long CHAT_MENU_CH_DISPLAYJOIN = wxNewId(); static const long CHAT_MENU_CH_AUTOJOIN = wxNewId(); static const long CHAT_MENU_CH_TOPIC = wxNewId(); static const long CHAT_MENU_CH_INFO = wxNewId(); static const long CHAT_MENU_CH_MSG = wxNewId(); static const long CHAT_MENU_CH_LOCK = wxNewId(); static const long CHAT_MENU_CH_UNLOCK = wxNewId(); static const long CHAT_MENU_CH_REG = wxNewId(); static const long CHAT_MENU_CH_UNREG = wxNewId(); static const long CHAT_MENU_CH_SPAM_ON = wxNewId(); static const long CHAT_MENU_CH_SPAM_OFF = wxNewId(); static const long CHAT_MENU_CH_SPAM_ISON = wxNewId(); static const long CHAT_MENU_CH_CLEAR = wxNewId(); static const long CHAT_MENU_SV_DISCON = wxNewId(); static const long CHAT_MENU_SV_RECON = wxNewId(); static const long CHAT_MENU_SV_REMOVE = wxNewId(); static const long CHAT_MENU_SV_CHPWD = wxNewId(); static const long CHAT_MENU_SV_ACCESS = wxNewId(); static const long CHAT_MENU_SV_BROADCAST = wxNewId(); static const long CHAT_MENU_US_CHAT = wxNewId(); static const long CHAT_MENU_US_JOIN = wxNewId(); static const long CHAT_MENU_US_SLAP = wxNewId(); //static const long CHAT_MENU_US_ADD_TO_GROUP = wxNewId(); static const long CHAT_MENU_US_MUTE = wxNewId(); static const long CHAT_MENU_US_UNMUTE = wxNewId(); static const long CHAT_MENU_US_KICK = wxNewId(); static const long CHAT_MENU_US_OP = wxNewId(); static const long CHAT_MENU_US_DEOP = wxNewId(); static const long CHAT_MENU_US_MODERATOR_INGAME = wxNewId(); static const long CHAT_MENU_US_MODERATOR_CURIP = wxNewId(); static const long CHAT_MENU_US_MODERATOR_KICK = wxNewId(); static const long CHAT_MENU_US_MODERATOR_BAN = wxNewId(); static const long CHAT_MENU_US_MODERATOR_UNBAN = wxNewId(); static const long CHAT_MENU_US_MODERATOR_MUTE = wxNewId(); static const long CHAT_MENU_US_MODERATOR_MUTE_5 = wxNewId(); static const long CHAT_MENU_US_MODERATOR_MUTE_10 = wxNewId(); static const long CHAT_MENU_US_MODERATOR_MUTE_30 = wxNewId(); static const long CHAT_MENU_US_MODERATOR_MUTE_120 = wxNewId(); static const long CHAT_MENU_US_MODERATOR_MUTE_1440 = wxNewId(); static const long CHAT_MENU_US_MODERATOR_UNMUTE = wxNewId(); static const long CHAT_MENU_US_MODERATOR_RING = wxNewId(); static const long CHAT_MENU_COPYLINK = wxNewId(); static const long CHAT_MENU_LOG_OPEN = wxNewId(); #endif // SPRINGLOBBY_HEADERGUARD_CHATPANELMENU_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/connectwindow.cpp0000600000176000000410000002727512105760300021610 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: ConnectWindow // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "connectwindow.h" #include "settings.h" #include "ui.h" #include "images/connect.xpm" #include "utils/controls.h" #include "utils/tasutil.h" #include "utils/customdialogs.h" // Define events. BEGIN_EVENT_TABLE(ConnectWindow, wxDialog) EVT_BUTTON ( wxID_OK, ConnectWindow::OnOk ) EVT_BUTTON ( wxID_CANCEL, ConnectWindow::OnCancel ) EVT_COMBOBOX ( CON_SERV_SEL , ConnectWindow::OnServerChange ) END_EVENT_TABLE() //! @brief Constructor //! //! @param parent Parent window ConnectWindow::ConnectWindow( wxWindow* parent, Ui& ui ) : wxDialog( parent, -1, _("Connect to lobby server"), wxDefaultPosition, wxSize(300, 300), wxDEFAULT_DIALOG_STYLE | wxCLIP_CHILDREN ), m_ui(ui) { wxString server; wxString username; wxString password; bool savepass; bool autoconnect; SetIcon( wxIcon(connect_xpm) ); server = sett().GetDefaultServer(); username = sett().GetServerAccountNick( sett().GetDefaultServer() ); password = sett().GetServerAccountPass( sett().GetDefaultServer() ); savepass = sett().GetServerAccountSavePass( sett().GetDefaultServer() ); autoconnect = sett().GetAutoConnect(); // Create all UI elements. m_tabs = new wxNotebook( this , -1 ); m_login_tab = new wxPanel ( m_tabs, -1 ); m_register_tab = new wxPanel ( m_tabs, -1 ); m_server_lbl = new wxStaticText( m_login_tab, -1, _("Server") ); m_server_combo = new wxComboBox ( m_login_tab, CON_SERV_SEL, server ); m_server_combo->SetToolTip( TE(_("Server to connect to. You can connect to any server you like by typing in hostaddress:port format.")) ); m_ser_acc_line = new wxStaticLine( m_login_tab ); m_nick_lbl = new wxStaticText( m_login_tab, -1, _("Nickname") ); m_nick_text = new wxTextCtrl ( m_login_tab, -1, username ); m_pass_lbl = new wxStaticText( m_login_tab, -1, _("Password") ); m_pass_text = new wxTextCtrl ( m_login_tab, -1, password, wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD ); m_rpass_check = new wxCheckBox ( m_login_tab, -1, _("Remember password") ); m_autoconnect_check = new wxCheckBox ( m_login_tab, -1, _("Autoconnect next time") ); m_autoconnect_check->SetToolTip( TE(_("remember connection details and automatically connect to server on next lobby startup")) ); wxToolTip::Enable( false ); m_rpass_check->SetValue( savepass ); m_autoconnect_check->SetValue( autoconnect ); m_acc_note_line = new wxStaticLine( m_login_tab ); m_note_lbl = new wxStaticText( m_login_tab, -1, _("Note: If you do not have an account, you\n can register one for free on the\n\"Register\" tab.") ); m_ok_btn = new wxButton( this, wxID_OK, _("Ok") ); m_cancel_btn = new wxButton( this, wxID_CANCEL, _("Cancel") ); // Add tabs to tab control. m_tabs->AddPage( m_login_tab, _("Login"), true ); m_tabs->AddPage( m_register_tab, _("Register"), false ); // Create sizers. m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_login_main_sizer = new wxBoxSizer( wxVERTICAL ); m_server_sizer = new wxBoxSizer( wxHORIZONTAL ); m_nick_sizer = new wxBoxSizer( wxHORIZONTAL ); m_pass_sizer = new wxBoxSizer( wxHORIZONTAL ); m_rpass_sizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* m_check_sizer = new wxBoxSizer( wxHORIZONTAL ); m_buttons_sizer = new wxStdDialogButtonSizer(); // Add UI elements to sizers. m_buttons_sizer->Add( m_ok_btn ); m_buttons_sizer->AddStretchSpacer(); m_buttons_sizer->Add( m_cancel_btn ); m_rpass_sizer->Add( m_rpass_check, 2, wxEXPAND | wxALL | wxALIGN_RIGHT, 4 ); m_rpass_sizer->Add( m_autoconnect_check, 2, wxEXPAND | wxALL | wxALIGN_RIGHT, 4 ); m_pass_sizer->Add( m_pass_lbl, 1, wxALL | wxALIGN_CENTER_VERTICAL, 4 ); m_pass_sizer->Add( m_pass_text, 2, wxEXPAND | wxALL, 4 ); //FIXME was lazy, absoulte positioning isn't that nice //probably causing http://springlobby.info/issues/1094 int pos1 = (m_pass_lbl->GetSize()).GetWidth() + 40; m_check_sizer->Add(pos1,0,0); m_check_sizer->Add( m_rpass_sizer, 0, wxEXPAND | wxALIGN_RIGHT); m_nick_sizer->Add( m_nick_lbl, 1, wxALL | wxALIGN_CENTER_VERTICAL, 4 ); m_nick_sizer->Add( m_nick_text, 2, wxEXPAND | wxALL, 4 ); m_server_sizer->Add( m_server_lbl, 1, wxALL | wxALIGN_CENTER_VERTICAL, 4 ); m_server_sizer->Add( m_server_combo, 2, wxEXPAND | wxALL, 4 ); m_login_main_sizer->Add( m_server_sizer, 0, wxEXPAND | wxALL, 0 ); m_login_main_sizer->Add( m_ser_acc_line, 0, wxEXPAND | wxALL, 4 ); m_login_main_sizer->Add( m_nick_sizer, 0, wxEXPAND ); m_login_main_sizer->Add( m_pass_sizer, 0, wxEXPAND ); m_login_main_sizer->Add( m_check_sizer, 0, wxEXPAND ); m_login_main_sizer->Add( m_acc_note_line, 0, wxEXPAND | wxALL, 4 ); m_login_main_sizer->Add( m_note_lbl, 0, wxEXPAND | wxALL, 4 ); m_login_main_sizer->AddStretchSpacer(); m_login_tab->SetSizer( m_login_main_sizer ); m_main_sizer->Add( m_tabs, 1, wxEXPAND ); m_main_sizer->Add( m_buttons_sizer, 0, wxEXPAND ); // Register page wxBoxSizer* m_register_sizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* m_regnick_sizer = new wxBoxSizer( wxHORIZONTAL ); m_regnick_lbl = new wxStaticText( m_register_tab, wxID_ANY, _("Nick"), wxDefaultPosition, wxDefaultSize, 0 ); m_regnick_sizer->Add( m_regnick_lbl, 1, wxALL | wxALIGN_CENTER_VERTICAL, 4 ); m_regnick_text = new wxTextCtrl( m_register_tab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_regnick_sizer->Add( m_regnick_text, 1, wxALL, 4 ); m_register_sizer->Add( m_regnick_sizer, 0, wxEXPAND, 4 ); m_regpass_sep = new wxStaticLine( m_register_tab, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); m_register_sizer->Add( m_regpass_sep, 0, wxALL|wxEXPAND, 4 ); wxBoxSizer* m_regpass1_sizer = new wxBoxSizer( wxHORIZONTAL ); m_regpass1_lbl = new wxStaticText( m_register_tab, wxID_ANY, _("Password"), wxDefaultPosition, wxDefaultSize, 0 ); m_regpass1_sizer->Add( m_regpass1_lbl, 1, wxALL | wxALIGN_CENTER_VERTICAL, 4 ); m_regpass1_text = new wxTextCtrl( m_register_tab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD ); m_regpass1_sizer->Add( m_regpass1_text, 1, wxALL, 4 ); m_register_sizer->Add( m_regpass1_sizer, 0, wxEXPAND, 4 ); wxBoxSizer* m_regpass1_sizer1 = new wxBoxSizer( wxHORIZONTAL ); m_regpass2_lbl = new wxStaticText( m_register_tab, wxID_ANY, wxT("Retype password"), wxDefaultPosition, wxDefaultSize, 0 ); m_regpass1_sizer1->Add( m_regpass2_lbl, 1, wxALL | wxALIGN_CENTER_VERTICAL, 4 ); m_regpass2_text = new wxTextCtrl( m_register_tab, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD ); m_regpass1_sizer1->Add( m_regpass2_text, 1, wxALL, 4 ); m_register_sizer->Add( m_regpass1_sizer1, 0, wxEXPAND, 4 ); m_register_tab->SetSizer( m_register_sizer ); m_register_tab->Layout(); m_register_sizer->Fit( m_register_tab ); // Set sizer. SetSizer( m_main_sizer ); if ( !username.empty() ) { m_ok_btn->SetFocus(); } else { m_nick_text->SetFocus(); } m_ok_btn->SetDefault(); Layout(); m_main_sizer->SetSizeHints( this ); #ifdef __WXMSW__ SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); #endif ReloadServerList(); } //! @brief Destructor ConnectWindow::~ConnectWindow() { } void ConnectWindow::ReloadServerList() { m_server_combo->Clear(); m_server_combo->Append( sett().GetServers() ); m_server_combo->SetValue( sett().GetDefaultServer() ); } void ConnectWindow::OnServerChange( wxCommandEvent& ) { wxString HostAddress = m_server_combo->GetValue(); if ( HostAddress.Find( _T(":") ) == wxNOT_FOUND ) { if ( !sett().ServerExists( HostAddress ) ) { HostAddress+= wxFormat(_T(":%d") ) % DEFSETT_DEFAULT_SERVER_PORT; } } m_nick_text->SetValue( sett().GetServerAccountNick( HostAddress ) ); if ( sett().GetServerAccountSavePass( HostAddress ) ) m_pass_text->SetValue( sett().GetServerAccountPass( HostAddress ) ); } void ConnectWindow::OnOk(wxCommandEvent& ) { Hide(); wxString HostAddress = m_server_combo->GetValue(); if ( HostAddress.Find( _T(":") ) == wxNOT_FOUND ) { if ( !sett().ServerExists( HostAddress ) ) { HostAddress += wxFormat(_T(":%d") ) % DEFSETT_DEFAULT_SERVER_PORT; } } if ( m_tabs->GetSelection() <= 0 ) { sett().SetServerAccountNick( HostAddress,m_nick_text->GetValue() ); sett().SetServerAccountSavePass( HostAddress, m_rpass_check->GetValue() ); // We assume that the server is given as : "host:port" so we split based on ":" wxArrayString serverString = wxStringTokenize( HostAddress ,_T(":") ); if ( serverString.GetCount() == 2 ) { long port; if ( !serverString[1].ToLong( &port ) ) { wxLogWarning( _T("Invalid port.") ); customMessageBox(SL_MAIN_ICON, _("Invalid port."), _("Invalid port"), wxOK ); return; } if ( port < 1 || port > 65535) { wxLogWarning( _T("port number out of range") ); customMessageBox(SL_MAIN_ICON, _("Port number out of range.\n\nIt must be an integer between 1 and 65535"), _("Invalid port"), wxOK ); return; } sett().SetServer( HostAddress, serverString[0], port ); } if ( serverString.GetCount() > 2 ) { wxLogWarning( _T("invalid host/port.") ); customMessageBox(SL_MAIN_ICON, _("Invalid host/port."), _("Invalid host"), wxOK ); return; } sett().SetAutoConnect( m_autoconnect_check->IsChecked() ); //if autoconnect enabled force saving of pw, actual saving is done in Ui::DoConnect if ( m_autoconnect_check->IsChecked() ) sett().SetServerAccountSavePass( HostAddress, true ); sett().SaveSettings(); ReloadServerList(); m_ui.DoConnect( HostAddress, m_nick_text->GetValue(), m_pass_text->GetValue() ); } else { wxString reason; if ( !IsValidNickname( m_regnick_text->GetValue() ) ) { customMessageBox(SL_MAIN_ICON,_("The entered nickname contains invalid characters like )? &%.\n Please try again") , _("Invalid nickname"), wxOK ); Show(); } else if ( m_regpass2_text->GetValue()!= m_regpass1_text->GetValue() || m_regpass1_text->GetValue().IsEmpty() ) { Show(); wxLogWarning( _T("registration failed, reason: password/confirmation mismatch") ); customMessageBox(SL_MAIN_ICON,_("Registration failed, the reason was:\nPassword / confirmation mismatch (or empty passwort)") , _("Registration failed."), wxOK ); } else if ( m_ui.DoRegister( HostAddress, m_regnick_text->GetValue(), m_regpass1_text->GetValue(),reason ) ) { m_tabs->SetSelection( 0 ); m_nick_text->SetValue(m_regnick_text->GetValue()); m_pass_text->SetValue(m_regpass1_text->GetValue()); Show(); } else { Show(); } } } void ConnectWindow::OnCancel(wxCommandEvent& ) { Hide(); } void ConnectWindow::OnQuit(GlobalEvents::GlobalEventData /*data*/) { EndModal(wxCANCEL); } springlobby-0.169/src/connectwindow.h0000600000176000000410000000730712105760300021247 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_CONNECTWINDOW_H #define SPRINGLOBBY_HEADERGUARD_CONNECTWINDOW_H #include #include "utils/isink.h" class wxPanel; class wxComboBox; class wxBoxSizer; class wxStdDialogButtonSizer; class wxButton; class wxTextCtrl; class wxStaticText; class wxNotebook; class wxCheckBox; class wxStaticLine; class Ui; //! @brief wxFrame with a connection dialog used to specify username, password, and server. It can also register a new acount. class ConnectWindow : public wxDialog, public OnQuitSink { public: ConnectWindow( wxWindow* parent, Ui& ui ); ~ConnectWindow(); // ConnectWindow interface void ReloadServerList(); void OnServerChange( wxCommandEvent& event ); void OnOk(wxCommandEvent& event); void OnCancel(wxCommandEvent& event); void OnQuit( GlobalEvents::GlobalEventData data ); protected: // ConnectWindow variables wxNotebook* m_tabs; //!< Notebook containing the login and register tabs wxPanel* m_login_tab; //!< The login tab wxPanel* m_register_tab; //!< The register tab wxStaticText* m_server_lbl; //!< Label saying "Server" wxComboBox* m_server_combo; //!< Combobox where user can select server wxStaticLine* m_ser_acc_line; //!< Line that separates the server setting and the acount settings wxStaticText* m_nick_lbl; //!< Label saying "Nickname" wxTextCtrl* m_nick_text; //!< Textbox where user can input nickname wxStaticText* m_pass_lbl; //!< Label saying "Password" wxTextCtrl* m_pass_text; //!< Textbox where user can input password wxCheckBox* m_rpass_check; //!< Checkbox where user can chose if he wants his password to be saved. wxCheckBox* m_autoconnect_check; //!< Checkbox where user can chose if he wants to autoconnect. wxStaticLine* m_acc_note_line; //!< Line that separates the account settings from the note wxStaticText* m_note_lbl; //!< Label saying something about register wxButton* m_ok_btn; //!< The ok button wxButton* m_cancel_btn; //!< The cancel button wxBoxSizer* m_main_sizer; //!< The main sizer connecting it all together wxBoxSizer* m_login_main_sizer; //!< Login tab main sizer wxBoxSizer* m_server_sizer; //!< Sizer connecting server label and combo wxBoxSizer* m_nick_sizer; //!< Sizer connecting nick label and input wxBoxSizer* m_pass_sizer; //!< Sizer connecting password label and input wxBoxSizer* m_rpass_sizer; //!< Sizer spacing the remember password setting wxStdDialogButtonSizer* m_buttons_sizer; //!< Sizer connecting the ok and cancel buttons wxStaticText* m_regnick_lbl; wxTextCtrl* m_regnick_text; wxStaticLine* m_regpass_sep; wxStaticText* m_regpass1_lbl; wxTextCtrl* m_regpass1_text; wxStaticText* m_regpass2_lbl; wxTextCtrl* m_regpass2_text; Ui& m_ui; enum { CON_SERV_SEL = wxID_HIGHEST }; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_CONNECTWINDOW_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/countrycodes.cpp0000600000176000000410000002377212105760300021446 0ustar buildbotwww-data00000000000000#include "countrycodes.h" #include #include static std::map m_cc_table; void InitTable() { if (!m_cc_table.empty()) return; m_cc_table[_T("AD")] = _(" Andorra"); m_cc_table[_T("AE")] = _("United Arab Emirates"); m_cc_table[_T("AF")] = _("Afghanistan"); m_cc_table[_T("AG")] = _("Antigua and Barbuda"); m_cc_table[_T("AI")] = _("Anguilla"); m_cc_table[_T("AL")] = _("Albania"); m_cc_table[_T("AM")] = _("Armenia"); m_cc_table[_T("AN")] = _("Netherlands Antilles"); m_cc_table[_T("AO")] = _("Angola"); m_cc_table[_T("AQ")] = _("Antarctica"); m_cc_table[_T("AR")] = _("Argentina"); m_cc_table[_T("AS")] = _("American Samoa"); m_cc_table[_T("AT")] = _("Austria"); m_cc_table[_T("AU")] = _("Australia"); m_cc_table[_T("AX")] = _("Åland Islands"); m_cc_table[_T("AW")] = _("Aruba"); m_cc_table[_T("AZ")] = _("Azerbaijan"); m_cc_table[_T("BA")] = _("Bosnia and Herzegovina"); m_cc_table[_T("BB")] = _("Barbados"); m_cc_table[_T("BD")] = _("Bangladesh"); m_cc_table[_T("BE")] = _("Belgium"); m_cc_table[_T("BF")] = _("Burkina Faso"); m_cc_table[_T("BG")] = _("Bulgaria"); m_cc_table[_T("BH")] = _("Bahrain"); m_cc_table[_T("BI")] = _("Burundi"); m_cc_table[_T("BJ")] = _("Benin"); m_cc_table[_T("BM")] = _("Bermuda"); m_cc_table[_T("BN")] = _("Brunei Darussalam"); m_cc_table[_T("BO")] = _("Bolivia"); m_cc_table[_T("BR")] = _("Brazil"); m_cc_table[_T("BS")] = _("Bahamas"); m_cc_table[_T("BT")] = _("Bhutan"); m_cc_table[_T("BV")] = _("Bouvet Island"); m_cc_table[_T("BW")] = _("Botswana"); m_cc_table[_T("BY")] = _("Belarus"); m_cc_table[_T("BZ")] = _("Belize"); m_cc_table[_T("CA")] = _("Canada"); m_cc_table[_T("CC")] = _("Cocos (Keeling Islands)"); m_cc_table[_T("CF")] = _("Central African Republic"); m_cc_table[_T("CG")] = _("Congo"); m_cc_table[_T("CH")] = _("Switzerland"); m_cc_table[_T("CI")] = _("Cote D'Ivoire (Ivory Coast)"); m_cc_table[_T("CK")] = _("Cook Islands"); m_cc_table[_T("CL")] = _("Chile"); m_cc_table[_T("CM")] = _("Cameroon"); m_cc_table[_T("CN")] = _("China"); m_cc_table[_T("CO")] = _("Colombia"); m_cc_table[_T("CR")] = _("Costa Rica"); m_cc_table[_T("CU")] = _("Cuba"); m_cc_table[_T("CV")] = _("Cape Verde"); m_cc_table[_T("CX")] = _("Christmas Island"); m_cc_table[_T("CY")] = _("Cyprus"); m_cc_table[_T("CZ")] = _("Czech Republic"); m_cc_table[_T("DE")] = _("Germany"); m_cc_table[_T("DJ")] = _("Djibouti"); m_cc_table[_T("DK")] = _("Denmark"); m_cc_table[_T("DM")] = _("Dominica"); m_cc_table[_T("DO")] = _("Dominican Republic"); m_cc_table[_T("DZ")] = _("Algeria"); m_cc_table[_T("EC")] = _("Ecuador"); m_cc_table[_T("EE")] = _("Estonia"); m_cc_table[_T("EG")] = _("Egypt"); m_cc_table[_T("EH")] = _("Western Sahara"); m_cc_table[_T("ER")] = _("Eritrea"); m_cc_table[_T("ES")] = _("Spain"); m_cc_table[_T("ET")] = _("Ethiopia"); m_cc_table[_T("FI")] = _("Finland"); m_cc_table[_T("FJ")] = _("Fiji"); m_cc_table[_T("FK")] = _("Falkland Islands (Malvinas)"); m_cc_table[_T("FM")] = _("Micronesia"); m_cc_table[_T("FO")] = _("Faroe Islands"); m_cc_table[_T("FR")] = _("France"); m_cc_table[_T("FX")] = _("France, Metropolitan"); m_cc_table[_T("GA")] = _("Gabon"); m_cc_table[_T("GD")] = _("Grenada"); m_cc_table[_T("GE")] = _("Georgia"); m_cc_table[_T("GF")] = _("French Guiana"); m_cc_table[_T("GH")] = _("Ghana"); m_cc_table[_T("GI")] = _("Gibraltar"); m_cc_table[_T("GL")] = _("Greenland"); m_cc_table[_T("GM")] = _("Gambia"); m_cc_table[_T("GN")] = _("Guinea"); m_cc_table[_T("GP")] = _("Guadeloupe"); m_cc_table[_T("GQ")] = _("Equatorial Guinea"); m_cc_table[_T("GR")] = _("Greece"); m_cc_table[_T("GS")] = _("S. Georgia and S. Sandwich Isls."); m_cc_table[_T("GT")] = _("Guatemala"); m_cc_table[_T("GU")] = _("Guam"); m_cc_table[_T("GW")] = _("Guinea-Bissau"); m_cc_table[_T("GY")] = _("Guyana"); m_cc_table[_T("HK")] = _("Hong Kong"); m_cc_table[_T("HM")] = _("Heard and McDonald Islands"); m_cc_table[_T("HN")] = _("Honduras"); m_cc_table[_T("HR")] = _("Croatia (Hrvatska)"); m_cc_table[_T("HT")] = _("Haiti"); m_cc_table[_T("HU")] = _("Hungary"); m_cc_table[_T("ID")] = _("Indonesia"); m_cc_table[_T("IE")] = _("Ireland"); m_cc_table[_T("IL")] = _("Israel"); m_cc_table[_T("IN")] = _("India"); m_cc_table[_T("IO")] = _("British Indian Ocean Territory"); m_cc_table[_T("IQ")] = _("Iraq"); m_cc_table[_T("IR")] = _("Iran"); m_cc_table[_T("IS")] = _("Iceland"); m_cc_table[_T("IT")] = _("Italy"); m_cc_table[_T("JM")] = _("Jamaica"); m_cc_table[_T("JO")] = _("Jordan"); m_cc_table[_T("JP")] = _("Japan"); m_cc_table[_T("KE")] = _("Kenya"); m_cc_table[_T("KG")] = _("Kyrgyzstan (Kyrgyz Republic)"); m_cc_table[_T("KH")] = _("Cambodia"); m_cc_table[_T("KI")] = _("Kiribati"); m_cc_table[_T("KM")] = _("Comoros"); m_cc_table[_T("KN")] = _("Saint Kitts and Nevis"); m_cc_table[_T("KP")] = _("Korea (North) (People's Republic)"); m_cc_table[_T("KR")] = _("Korea (South) (Republic)"); m_cc_table[_T("KW")] = _("Kuwait"); m_cc_table[_T("KY")] = _("Cayman Islands"); m_cc_table[_T("KZ")] = _("Kazakhstan"); m_cc_table[_T("LA")] = _("Laos"); m_cc_table[_T("LB")] = _("Lebanon"); m_cc_table[_T("LC")] = _("Saint Lucia"); m_cc_table[_T("LI")] = _("Liechtenstein"); m_cc_table[_T("LK")] = _("Sri Lanka"); m_cc_table[_T("LR")] = _("Liberia"); m_cc_table[_T("LS")] = _("Lesotho"); m_cc_table[_T("LT")] = _("Lithuania"); m_cc_table[_T("LU")] = _("Luxembourg"); m_cc_table[_T("LV")] = _("Latvia"); m_cc_table[_T("LY")] = _("Libya"); m_cc_table[_T("MA")] = _("Morocco"); m_cc_table[_T("MC")] = _("Monaco"); m_cc_table[_T("MD")] = _("Moldova"); m_cc_table[_T("ME")] = _("Montenegro"); m_cc_table[_T("MG")] = _("Madagascar"); m_cc_table[_T("MH")] = _("Marshall Islands"); m_cc_table[_T("MK")] = _("Macedonia"); m_cc_table[_T("ML")] = _("Mali"); m_cc_table[_T("MM")] = _("Myanmar"); m_cc_table[_T("MN")] = _("Mongolia"); m_cc_table[_T("MO")] = _("Macau"); m_cc_table[_T("MP")] = _("Northern Mariana Islands"); m_cc_table[_T("MQ")] = _("Martinique"); m_cc_table[_T("MR")] = _("Mauritania"); m_cc_table[_T("MS")] = _("Montserrat"); m_cc_table[_T("MT")] = _("Malta"); m_cc_table[_T("MU")] = _("Mauritius"); m_cc_table[_T("MV")] = _("Maldives"); m_cc_table[_T("MW")] = _("Malawi"); m_cc_table[_T("MX")] = _("Mexico"); m_cc_table[_T("MY")] = _("Malaysia"); m_cc_table[_T("MZ")] = _("Mozambique"); m_cc_table[_T("NA")] = _("Namibia"); m_cc_table[_T("NC")] = _("New Caledonia"); m_cc_table[_T("NE")] = _("Niger"); m_cc_table[_T("NF")] = _("Norfolk Island"); m_cc_table[_T("NG")] = _("Nigeria"); m_cc_table[_T("NI")] = _("Nicaragua"); m_cc_table[_T("NL")] = _("Netherlands"); m_cc_table[_T("NO")] = _("Norway"); m_cc_table[_T("NP")] = _("Nepal"); m_cc_table[_T("NR")] = _("Nauru"); m_cc_table[_T("NT")] = _("Neutral Zone (Saudia Arabia/Iraq)"); m_cc_table[_T("NU")] = _("Niue"); m_cc_table[_T("NZ")] = _("New Zealand"); m_cc_table[_T("OM")] = _("Oman"); m_cc_table[_T("PA")] = _("Panama"); m_cc_table[_T("PE")] = _("Peru"); m_cc_table[_T("PF")] = _("French Polynesia"); m_cc_table[_T("PG")] = _("Papua New Guinea"); m_cc_table[_T("PH")] = _("Philippines"); m_cc_table[_T("PK")] = _("Pakistan"); m_cc_table[_T("PL")] = _("Poland"); m_cc_table[_T("PM")] = _("St. Pierre and Miquelon"); m_cc_table[_T("PN")] = _("Pitcairn"); m_cc_table[_T("PR")] = _("Puerto Rico"); m_cc_table[_T("PT")] = _("Portugal"); m_cc_table[_T("PW")] = _("Palau"); m_cc_table[_T("PY")] = _("Paraguay"); m_cc_table[_T("QA")] = _("Qatar"); m_cc_table[_T("RE")] = _("Reunion"); m_cc_table[_T("RO")] = _("Romania"); m_cc_table[_T("RS")] = _("Serbia"); m_cc_table[_T("RU")] = _("Russian Federation"); m_cc_table[_T("RW")] = _("Rwanda"); m_cc_table[_T("SA")] = _("Saudi Arabia"); m_cc_table[_T("SB")] = _("Solomon Islands"); m_cc_table[_T("SC")] = _("Seychelles"); m_cc_table[_T("SD")] = _("Sudan"); m_cc_table[_T("SE")] = _("Sweden"); m_cc_table[_T("SG")] = _("Singapore"); m_cc_table[_T("SH")] = _("St. Helena"); m_cc_table[_T("SI")] = _("Slovenia"); m_cc_table[_T("SJ")] = _("Svalbard and Jan Mayen Islands"); m_cc_table[_T("SK")] = _("Slovakia (Slovak Republic)"); m_cc_table[_T("SL")] = _("Sierra Leone"); m_cc_table[_T("SM")] = _("San Marino"); m_cc_table[_T("SN")] = _("Senegal"); m_cc_table[_T("SO")] = _("Somalia"); m_cc_table[_T("SR")] = _("Suriname"); m_cc_table[_T("ST")] = _("Sao Tome and Principe"); m_cc_table[_T("SU")] = _("Soviet Union (former)"); m_cc_table[_T("SV")] = _("El Salvador"); m_cc_table[_T("SY")] = _("Syria"); m_cc_table[_T("SZ")] = _("Swaziland"); m_cc_table[_T("TC")] = _("Turks and Caicos Islands"); m_cc_table[_T("TD")] = _("Chad"); m_cc_table[_T("TF")] = _("French Southern Territories"); m_cc_table[_T("TG")] = _("Togo"); m_cc_table[_T("TH")] = _("Thailand"); m_cc_table[_T("TJ")] = _("Tajikistan"); m_cc_table[_T("TK")] = _("Tokelau"); m_cc_table[_T("TM")] = _("Turkmenistan"); m_cc_table[_T("TN")] = _("Tunisia"); m_cc_table[_T("TO")] = _("Tonga"); m_cc_table[_T("TP")] = _("East Timor"); m_cc_table[_T("TR")] = _("Turkey"); m_cc_table[_T("TT")] = _("Trinidad and Tobago"); m_cc_table[_T("TV")] = _("Tuvalu"); m_cc_table[_T("TW")] = _("Taiwan"); m_cc_table[_T("TZ")] = _("Tanzania"); m_cc_table[_T("UA")] = _("Ukraine"); m_cc_table[_T("UG")] = _("Uganda"); m_cc_table[_T("GB")] = _("United Kingdom"); m_cc_table[_T("UM")] = _("US Minor Outlying Islands"); m_cc_table[_T("US")] = _("United States"); m_cc_table[_T("UY")] = _("Uruguay"); m_cc_table[_T("UZ")] = _("Uzbekistan"); m_cc_table[_T("VA")] = _("Vatican City State (Holy See)"); m_cc_table[_T("VC")] = _("Saint Vincent and The Grenadines"); m_cc_table[_T("VE")] = _("Venezuela"); m_cc_table[_T("VG")] = _("Virgin Islands (British)"); m_cc_table[_T("VI")] = _("Virgin Islands (US)"); m_cc_table[_T("VN")] = _("Viet Nam"); m_cc_table[_T("VU")] = _("Vanuatu"); m_cc_table[_T("WF")] = _("Wallis and Futuna Islands"); m_cc_table[_T("WS")] = _("Samoa"); m_cc_table[_T("YE")] = _("Yemen"); m_cc_table[_T("YT")] = _("Mayotte"); m_cc_table[_T("YU")] = _("Yugoslavia"); m_cc_table[_T("ZA")] = _("South Africa"); m_cc_table[_T("ZM")] = _("Zambia"); m_cc_table[_T("ZR")] = _("Zaire"); m_cc_table[_T("ZW")] = _("Zimbabwe"); } wxString GetFlagNameFromCountryCode( const wxString& cc ) { InitTable(); wxString ret = m_cc_table[ cc ]; if ( ret.IsEmpty() ) return cc + _T(" ") + _("(Full country name not found)"); else return ret; } springlobby-0.169/src/countrycodes.h0000600000176000000410000000156112105760300021103 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_COUNTRYCODES_H #define SPRINGLOBBY_HEADERGUARD_COUNTRYCODES_H class wxString; wxString GetFlagNameFromCountryCode( const wxString& cc ); #endif // SPRINGLOBBY_HEADERGUARD_COUNTRYCODES_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/crashreport.cpp0000600000176000000410000001667112105760300021261 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Classes: NetDebugReport CrashReport // #include "crashreport.h" #if wxUSE_DEBUGREPORT && defined(ENABLE_DEBUG_REPORT) #include #include #include #include #include #include #include #include #include #include "utils/curlhelper.h" #include "utils/platform.h" #include "updater/updatehelper.h" #include "utils/conversion.h" #include "settings.h" #include "stacktrace.h" #include "springunitsync.h" NetDebugReport::NetDebugReport( const char* url ) : m_url( url ) { } bool NetDebugReport::Process() { wxDebugReportCompress::Process(); //compress files into zip wxString filename = GetCompressedFileName(); CwdGuard setCwd( wxPathOnly( filename ) ); wxLogMessage( filename ); wxStringOutputStream response; wxStringOutputStream rheader; CURL *curl_handle; curl_handle = curl_easy_init(); struct curl_slist* m_pHeaders = NULL; struct curl_httppost* m_pPostHead = NULL; struct curl_httppost* m_pPostTail = NULL; struct curl_forms testform[2]; // these header lines will overwrite/add to cURL defaults m_pHeaders = curl_slist_append(m_pHeaders, "Expect:") ; testform[0].option = CURLFORM_FILE; //we need to keep these buffers around for curl op duration wxCharBuffer filename_buffer = filename.mb_str(); testform[0].value = (const char*)filename_buffer; testform[1].option = CURLFORM_END; curl_formadd(&m_pPostHead, &m_pPostTail, CURLFORM_COPYNAME, "file", CURLFORM_ARRAY, testform, CURLFORM_END); curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, m_pHeaders); curl_easy_setopt(curl_handle, CURLOPT_URL, m_url ); // curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L); curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "SpringLobby"); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, wxcurl_stream_write); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&response); curl_easy_setopt(curl_handle, CURLOPT_WRITEHEADER, (void *)&rheader); curl_easy_setopt(curl_handle, CURLOPT_POST, TRUE); curl_easy_setopt(curl_handle, CURLOPT_HTTPPOST, m_pPostHead); CURLcode ret = curl_easy_perform(curl_handle); wxLogError( rheader.GetString() ); /* cleanup curl stuff */ curl_easy_cleanup(curl_handle); curl_formfree(m_pPostHead); wxString szResponse; if(ret == CURLE_OK) szResponse = wxT("SUCCESS!\n\n"); else szResponse = wxT("FAILURE!\n\n"); szResponse += wxFormat(wxT("\nResponse Code: %d\n\n") ) % ret; szResponse += rheader.GetString(); szResponse += wxT("\n\n"); szResponse += response.GetString(); szResponse += wxT("\n\n"); wxLogMessage( szResponse ); return ret == CURLE_OK; } bool NetDebugReport::OnServerReply( const wxArrayString& reply ) { if ( reply.IsEmpty() ) { wxLogError( _T( "Didn't receive the expected server reply." ) ); return false; } wxString s( _T( "Server replied:\n" ) ); const size_t count = reply.GetCount(); for ( size_t n = 0; n < count; n++ ) { s << _T( '\t' ) << reply[n] << _T( '\n' ); } wxLogMessage( _T( "%s" ), s.c_str() ); return true; } void SpringDebugReport::AddVFSFile( const wxString& fn, const wxString& id ) { wxString dir = sett().GetCurrentUsedDataDir() + wxFileName::GetPathSeparator(); AddFile( dir + fn, id ); return;//TODO: wtf is there a return here? wxArrayString res = usync().FindFilesVFS( fn ); if ( res.Count() > 0 ) { AddFile( res[0], id ); wxLogError( _T("SpringDebugReport: file found: "), res[0].c_str() ); } else wxLogError( _T("SpringDebugReport: file not found: "), fn.c_str() ); } SpringDebugReport::SpringDebugReport() : NetDebugReport( "http://infologs.springrts.com/upload" ) { wxString tmp_filename = wxPathOnly( wxFileName::CreateTempFileName(_T("dummy")) ) + wxFileName::GetPathSeparator() + _T("settings.txt"); wxCopyFile( sett().GetCurrentUsedSpringConfigFilePath(), tmp_filename ); AddFile( tmp_filename, _T("Settings") ); AddVFSFile( _T("infolog.txt"), _T("Infolog") ); AddVFSFile( _T("script.txt"), _T("Script") ); AddVFSFile( _T("ext.txt"), _T("Extensions") ); AddVFSFile( _T("unitsync.log"), _T("unitsync") ); wxString info; info << wxGetOsDescription() << ( wxIsPlatform64Bit() ? _T(" 64bit\n") : _T(" 32bit\n") ); AddText( _T("platform.txt"), info, _T("Platform") ); AddText( _T("client.txt"), _T( "SpringLobby " ) + GetSpringLobbyVersion(), _T("Client") ); AddText( _T("appname.txt"), GetAppName(), _T("Application Name")); } #if wxUSE_STACKWALKER void CrashReport::GenerateReport() #else void CrashReport::GenerateReport(EXCEPTION_POINTERS* p) #endif { wxLogMessage( _T( "Report generated in " ) ); CwdGuard cwgGuard( wxFileName::GetTempDir() ); #if defined(__WXMSW__) bool online = false; // TODO (BrainDamage#1#): check if being online #else bool online = true; // TODO (BrainDamage#1#): check if being online #endif NetDebugReport* report = new NetDebugReport( "http://debug.springlobby.info/upload" ) ; // NetDebugReport* report = new NetDebugReport( "http://localhost/upload" ) ; // add all standard files: currently this means just a minidump and an // XML file with system info and stack trace report->AddAll( ); wxString dir = report->GetDirectory(); wxString SystemInfos; SystemInfos += _T( "SpringLobby version " ) + GetSpringLobbyVersion() + _T( "\n" ) ; SystemInfos += _T( "Built from " ) + wxString( wxVERSION_STRING ) + _T(" on ") + wxPlatformInfo::Get().GetOperatingSystemIdName() + _T( "\n" ) ; report->AddText( _T( "SystemInfos.txt" ), SystemInfos, _( "System informations" ) ); #if wxUSE_STD_IOSTREAM report->AddText( _T( "AppLog.txt" ), TowxString( crashlog.str() ), _( "Application verbose log" ) ); #endif wxString script_file = sett().GetCurrentUsedDataDir() + wxFileName::GetPathSeparator() + _T("script.txt"); if ( wxFile::Exists( script_file ) ) report->AddFile( script_file, _( "Last generated spring launching script" ) ); #if wxUSE_STACKWALKER StackTrace stacktrace; stacktrace.Walk( 3, 20 ); report->AddText( _T( "stacktrace.txt" ), _T("Call stack:\n") + stacktrace.GetStackTrace(), _( "StackTrace" ) ); #else wxString report_fn = ( wxGetCwd() + wxFileName::GetPathSeparator() + _T("stacktrace.txt") ); if ( wxFile::Exists( report_fn ) ) wxRemoveFile( report_fn ); wxCharBuffer report_fn_char = report_fn.mb_str(); DrMingwGenerateStacktrace( p, (const char*)report_fn_char ); report->AddFile( report_fn, _( "StackTrace" ) ); #endif wxString SlBuildFlags; #ifdef DISABLE_SOUND SlBuildFlags += _T("sound=0"); #else SlBuildFlags += _T("sound=1"); #endif report->AddText( _T("buildflags.txt"), SlBuildFlags, _T("BuildFlags") ); report->AddText( _T("nick.txt"), sett().GetServerAccountNick( sett().GetDefaultServer() ), _T("Nick") ); wxDebugReportPreviewStd* bkl = new wxDebugReportPreviewStd(); // calling Show() is not mandatory, but is more polite if ( bkl->Show( *report ) ) { if ( report->Process() ) { if ( online ) { wxLogMessage( _T( "Report successfully uploaded." ) ); } else { wxLogMessage( _T( "Report generated in \"%s\"." ), report->GetCompressedFileName().c_str() ); report->Reset(); } } else { wxLogMessage( _T( "Report generated in \"%s\", but failed to upload" ), report->GetCompressedFileName().c_str() ); report->Reset(); wxLogMessage( _T("report reset") ); } } //else: user cancelled the report delete report; wxLogMessage( _T("deleted report") ); } #endif // wxUSE_DEBUGREPORT springlobby-0.169/src/crashreport.h0000600000176000000410000000407512105760300020721 0ustar buildbotwww-data00000000000000#ifndef CRASHREPORT_H_INCLUDED #define CRASHREPORT_H_INCLUDED #include #if wxUSE_DEBUGREPORT && defined(ENABLE_DEBUG_REPORT) #include #include "utils/platform.h" #include #include #if ! wxUSE_STACKWALKER #include #endif //! @brief uploads zipped stacktraces using curl class NetDebugReport : public wxDebugReportCompress { public: NetDebugReport( const char* url ); //! the real workhorse bool Process(); protected: //! @brief gets called after server answered to the upload attempt bool OnServerReply(const wxArrayString& reply); const char* m_url; }; class SpringDebugReport : public NetDebugReport { public: SpringDebugReport(); protected: void AddVFSFile( const wxString& fn, const wxString& id ); }; //! @brief dumps various infos to the zipped debug info package and calls NetDebugReport if network is present class CrashReport { public: static CrashReport& instance() { static CrashReport c; return c; } #if wxUSE_STACKWALKER void GenerateReport(); #else void GenerateReport(EXCEPTION_POINTERS* p); #endif //! @brief is the container for the stream logging target std::ostringstream crashlog; protected: CrashReport(){} }; #endif //wxUSE_DEBUGREPORT && defined(ENABLE_DEBUG_REPORT) #endif // SPRINGLOBBY_HEADERGUARD_CRASHREPORT_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/crc.cpp0000600000176000000410000000303712105760300017464 0ustar buildbotwww-data00000000000000#include "crc.h" #include unsigned int CRC::crcTable[256]; /** @brief Generate the lookup table used for CRC calculation. Code taken from http://paul.rutgers.edu/~rhoads/Code/crc-32b.c */ void CRC::GenerateCRCTable() { unsigned int crc, poly; int i, j; poly = 0xEDB88320L; for (i = 0; i < 256; i++) { crc = i; for (j = 8; j > 0; j--) { if (crc & 1) crc = (crc >> 1) ^ poly; else crc >>= 1; } crcTable[i] = crc; } } /** @brief Construct a new CRC object. This generates the CRC table if it is the first CRC object being constructed. */ CRC::CRC() : crc(0xFFFFFFFF) { if (crcTable[1] == 0) GenerateCRCTable(); } /** @brief Update CRC over the data in buf. */ void CRC::UpdateData(const unsigned char* buf, unsigned bytes) { for (size_t i = 0; i < bytes; ++i) crc = (crc>>8) ^ crcTable[ (crc^(buf[i])) & 0xFF ]; } /** @brief Resets CRC data to original state. */ void CRC::ResetCRC() { crc = 0xFFFFFFFF; // reset crc } /** @brief Update CRC over the data in buf. */ void CRC::UpdateData(const std::string& buf) { UpdateData((const unsigned char*) buf.c_str(), buf.size()); } /** @brief Update CRC over the data in the specified file. @return true on success, false if file could not be opened. */ bool CRC::UpdateFile(const std::string& filename) { FILE* fp = fopen(filename.c_str(), "rb"); if (!fp) return false; unsigned char buf[100000]; size_t bytes; do { bytes = fread((void*)buf, 1, 100000, fp); UpdateData(buf, bytes); } while (bytes == 100000); fclose(fp); return true; } springlobby-0.169/src/crc.h0000600000176000000410000000217512105760300017133 0ustar buildbotwww-data00000000000000#ifndef CRC_H #define CRC_H #include /** @brief Object representing an updateable CRC-32 checksum. */ class CRC { public: CRC(); void UpdateData(const unsigned char* buf, unsigned bytes); void UpdateData(const std::string& buf); bool UpdateFile(const std::string& filename); void ResetCRC(); unsigned int GetCRC() const { return crc ^ 0xFFFFFFFF; } private: static unsigned int crcTable[256]; static void GenerateCRCTable(); unsigned int crc; }; #endif // !CRC_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/customizations.cpp0000600000176000000410000001233212105760300022006 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include "customizations.h" #include "springunitsynclib.h" #include "images/springlobby.xpm" #include "images/springlobby_64.png.h" #include "uiutils.h" #include #include #include #ifdef SL_QT_MODE #include #include #endif const wxString Customizations::IntroKey = wxString ( _T("intro_file") ); const OptionsWrapper& Customizations::GetCustomizations() const { return m_customs; } /** @brief GetAppIcon * * @todo: document this function */ const wxIconBundle& Customizations::GetAppIconBundle() const { return m_app_icons; } /** @brief GetHelpUrl * * @todo: document this function */ const wxString& Customizations::GetHelpUrl() const { return m_help_url; } /** @brief GetModname * * @todo: document this function */ const wxString& Customizations::GetModname() const { return m_modname; } const wxString& Customizations::Archive() const { return m_archive; } /** @brief Init * * @todo: document this function */ bool Customizations::Init( const wxString& archive_name ) { m_archive = archive_name; susynclib().AddArchive( m_archive ); //!TODO require blocking usync init if it's not loaded bool ret = m_customs.loadOptions( OptionsWrapper::ModCustomizations, m_archive ); if ( ret ) { wxBitmap icon_bmp( wxNullBitmap ); if ( GetBitmap( _T("icon"), icon_bmp ) ) { wxIcon tmp; tmp.CopyFromBitmap( icon_bmp ); m_app_icons = wxIconBundle( tmp );//replacing current int i = 1; while( GetBitmap( wxString::Format(_T("icon%d"), i ), icon_bmp ) ) { tmp.CopyFromBitmap( icon_bmp ); m_app_icons.AddIcon( tmp ); } } m_help_url = m_customs.getSingleValue( _T("help_url") ); } m_active = ret; return ret; } /** @brief Customizations * * @todo: document this function */ Customizations::Customizations() : m_app_icons(wxIcon(springlobby_xpm)), m_active( false ) { m_app_icons.AddIcon( charArr2wxIcon( springlobby_64_png, sizeof(springlobby_64_png) ) ); } bool Customizations::GetBitmap( const wxString& key, wxBitmap& bitmap ) { if ( Provides( key ) ) { const wxString path = m_customs.getSingleValue( key ); #ifdef SL_QT_MODE wxBitmap icon_bmp ( wxQtConvertImage( usync().GetQImage( m_archive, path, false ) ) ); #else wxBitmap icon_bmp (usync().GetImage( m_archive, path, false ) ); #endif if( icon_bmp.IsOk() ) { bitmap = icon_bmp; return true; } } return false;//either loaded bmp was kaput or key not found } bool Customizations::Active() const { return m_active; } bool Customizations::KeyExists( const wxString& key ) const { OptionType dummy; return m_customs.keyExists( key, OptionsWrapper::ModCustomizations, false, dummy ); } bool Customizations::Provides( const wxString& key ) const { return m_active && KeyExists( key ); } wxString Customizations::GetIntroText() const { if ( !m_active ) return wxEmptyString; return usync().GetTextfileAsString( m_archive, m_customs.getSingleValue( IntroKey ) ); } /** @brief SLcustomizations * * @todo: document this function */ Customizations& SLcustomizations() { static LineInfo m( AT ); static GlobalObjectHolder > s_customizations( m ); return s_customizations; } #ifdef SL_QT_MODE #include #include #include #include "qt/qerrorwindow.h" #include bool Customizations::Init( const QString& shortname, const QString& version ) { m_shortname = shortname; QString archive( m_shortname + "_Gui.sdd" ); bool init_success = Init( TowxString(archive) ); m_modname = usync().GetNameForShortname( TowxString(shortname), TowxString(version) ); return init_success; } QString Customizations::DataBasePath() { static bool cached = false; if ( cached ) return dataBasePath_; QList checked_paths; QString sub_path = "games/" + ToQString( m_archive ); for ( int i = 0; i < susynclib().GetSpringDataDirCount(); ++i ) { QDir data ( ToQString( susynclib().GetSpringDataDirByIndex(i) ) ); checked_paths.append( data.absolutePath().append("/").append( sub_path ) ); if ( data.cd( sub_path ) ) { dataBasePath_ = data.absolutePath(); break; } } if( dataBasePath_ != QString() ) return dataBasePath_ ; checked_paths.prepend( QString("Couldn't find customization data in any of these directories:\n ") ); throw DataException( checked_paths ); return QString(); } QString Customizations::QmlDir() { return QDir( DataBasePath() + "/" + "qml" ).absolutePath(); } QString Customizations::GraphicsDir() { return QDir( DataBasePath() + "/" + "graphics" ).absolutePath(); } QString Customizations::SoundsDir() { return QDir( DataBasePath() + "/" + "sounds" ).absolutePath(); } QString Customizations::MusicDir() { return QDir( DataBasePath() + "/" + "music" ).absolutePath(); } const QString& Customizations::GetModshortname() const { return m_shortname; } const char* Customizations::DataException::what() const throw() { std::stringstream out; QString s; foreach ( s, errors_ ) { out << s.toStdString() << std::endl; qDebug() << s; } return out.str().c_str(); } #endif springlobby-0.169/src/customizations.h0000600000176000000410000000523112105760300021453 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_CUSTOMIZATIONS_H #define SPRINGLOBBY_HEADERGUARD_CUSTOMIZATIONS_H #include "globalsmanager.h" #include "mmoptionswrapper.h" #include #include #include #include #include #ifdef SL_QT_MODE #include #include #endif //! single global instance to get all customizsations from class Customizations { protected: Customizations(); wxString m_modname; OptionsWrapper m_customs; wxIconBundle m_app_icons; wxString m_help_url; wxString m_archive; bool m_active; bool KeyExists( const wxString& key ) const; bool Provides( const wxString& key ) const; public: ~Customizations() {} bool Init( const wxString& ); bool Active() const; const wxString& GetModname() const; const wxString& GetHelpUrl() const; const wxString& Archive() const; const wxIconBundle& GetAppIconBundle() const; const OptionsWrapper& GetCustomizations() const; wxString GetIntroText() const; //! if key is found bitmap is changed and true returned bool GetBitmap( const wxString& key, wxBitmap& bitmap ); static const wxString IntroKey;// ( _T("intro_file") ); friend class GlobalObjectHolder >; #ifdef SL_QT_MODE bool Init(const QString& shortname, const QString& version ); struct DataException : public std::exception { const QList errors_; DataException( const QList& errors ) :errors_(errors) {} const char* what() const throw() ; virtual ~DataException() throw() {} }; QString DataBasePath(); private: QString dataBasePath_; QString m_shortname; public: QString QmlDir(); QString GraphicsDir(); QString SoundsDir(); QString MusicDir(); const QString& GetModshortname() const; #endif }; Customizations& SLcustomizations(); #endif // SPRINGLOBBY_HEADERGUARD_CUSTOMIZATIONS_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/customlistctrl.cpp0000600000176000000410000002116212105760300022007 0ustar buildbotwww-data00000000000000 #include #include #include #include "customlistctrl.h" #include "utils/sltipwin.h" #include "utils/controls.h" #include "settings.h" #include "iconimagelist.h" #include "utils/customdialogs.h" #include "uiutils.h" BEGIN_EVENT_TABLE(CustomListCtrl, ListBaseType) #if wxUSE_TIPWINDOW EVT_MOTION(CustomListCtrl::OnMouseMotion) EVT_TIMER(IDD_TIP_TIMER, CustomListCtrl::OnTimer) #endif EVT_LIST_COL_BEGIN_DRAG(wxID_ANY, CustomListCtrl::OnStartResizeCol) EVT_LIST_COL_END_DRAG(wxID_ANY, CustomListCtrl::OnEndResizeCol) EVT_LEAVE_WINDOW(CustomListCtrl::noOp) EVT_LIST_ITEM_SELECTED ( wxID_ANY, CustomListCtrl::OnSelected ) EVT_LIST_ITEM_DESELECTED ( wxID_ANY, CustomListCtrl::OnDeselected ) EVT_LIST_DELETE_ITEM ( wxID_ANY, CustomListCtrl::OnDeselected ) END_EVENT_TABLE() //wxTipWindow* CustomListCtrl::m_tipwindow = 0; CustomListCtrl::CustomListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pt, const wxSize& sz,long style,wxString name, unsigned int column_count, bool highlight, UserActions::ActionType hlaction ): ListBaseType(parent, id, pt, sz, style), m_tiptimer(this, IDD_TIP_TIMER), m_tiptext(_T("")), #if wxUSE_TIPWINDOW m_tipwindow( 0 ), m_controlPointer( 0 ), #endif m_columnCount( column_count ), m_selected(-1), m_selected_index(-1), m_prev_selected(-1), m_prev_selected_index(-1), m_last_mouse_pos( wxPoint(-1,-1) ), m_name(name), m_highlight(highlight), m_highlightAction(hlaction), m_bg_color( GetBackgroundColour() ), m_dirty_sort(false) { //dummy init , will later be replaced with loading from settings for ( unsigned int i = 0; i < m_columnCount; ++i) { m_column_map[i] = i; } SetImageList( &icons(), wxIMAGE_LIST_NORMAL ); SetImageList( &icons(), wxIMAGE_LIST_SMALL ); SetImageList( &icons(), wxIMAGE_LIST_STATE ); } void CustomListCtrl::InsertColumn(long i, wxListItem item, wxString tip, bool modifiable) { //#ifdef __WXMSW__ //this fixes header text misalignement // item.m_mask = wxLIST_MASK_FORMAT | wxLIST_MASK_TEXT; // if ( item.m_image != icons().ICON_EMPTY || item.m_image != -1 ) // item.m_mask = item.m_mask | wxLIST_MASK_IMAGE; // // item.m_format = wxLIST_FORMAT_LEFT; //#endif ListBaseType::InsertColumn(i,item); colInfo temp(tip,modifiable); m_colinfovec.push_back(temp); } void CustomListCtrl::AddColumn(long i, int width, const wxString& label, const wxString& tip, bool modifiable) { ListBaseType::InsertColumn( i, label, wxLIST_FORMAT_LEFT, width); colInfo temp(tip,modifiable); m_colinfovec.push_back(temp); } void CustomListCtrl::SetSelectionRestorePoint() { m_prev_selected = m_selected; m_prev_selected_index = m_selected_index; } void CustomListCtrl::RestoreSelection() { if ( m_prev_selected_index> -1) { SetItemState( GetIndexFromData( m_prev_selected ), wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED ); } } void CustomListCtrl::ResetSelection() { m_selected = m_prev_selected = m_prev_selected_index = m_selected_index = -1; } void CustomListCtrl::OnSelected( wxListEvent& event ) { m_selected = GetItemData( event.GetIndex() ); m_selected_index = event.GetIndex(); event.Skip(); } void CustomListCtrl::OnDeselected( wxListEvent& event ) { if ( m_selected == (int)GetItemData( event.GetIndex() ) ) m_selected = m_selected_index = -1; } long CustomListCtrl::GetIndexFromData( const unsigned long data ) { for (int i = 0; i < GetItemCount() ; i++ ) { if ( data == GetItemData( i ) ) return i; } return -1; } long CustomListCtrl::GetSelectedIndex() { return m_selected_index ; } void CustomListCtrl::SelectAll() { for (long i = 0; i < GetItemCount() ; i++ ) { SetItemState( i, wxLIST_STATE_SELECTED, -1 ); } } void CustomListCtrl::SelectNone() { for (long i = 0; i < GetItemCount() ; i++ ) { SetItemState( i, wxLIST_STATE_DONTCARE, -1 ); } } void CustomListCtrl::SelectInverse() { for (long i = 0; i < GetItemCount() ; i++ ) { int state = GetItemState( i, -1 ); state = ( state == wxLIST_STATE_DONTCARE ? wxLIST_STATE_SELECTED : wxLIST_STATE_DONTCARE ); SetItemState( i, state, -1 ); } } void CustomListCtrl::SetSelectedIndex(const long newindex) { m_selected_index = newindex; } long CustomListCtrl::GetSelectedData() { return m_selected ; } void CustomListCtrl::OnTimer(wxTimerEvent& /*unused*/) { #if wxUSE_TIPWINDOW if (!m_tiptext.empty()) { m_tipwindow = new SLTipWindow(this, m_tiptext); m_controlPointer = &m_tipwindow; m_tipwindow->SetTipWindowPtr((wxTipWindow**)m_controlPointer); #ifndef __WXMSW__ m_tipwindow->SetBoundingRect(wxRect(1,1,50,50)); #endif m_tiptext = wxEmptyString; m_tiptimer.Start(m_tooltip_duration, wxTIMER_ONE_SHOT); } else { m_tiptext = wxEmptyString; m_tiptimer.Stop(); if (m_controlPointer!= 0 && *m_controlPointer!= 0) { m_tipwindow->Close(); m_tipwindow = 0; } } #endif } void CustomListCtrl::OnMouseMotion(wxMouseEvent& event) { #if wxUSE_TIPWINDOW //we don't want to display the tooltip again until mouse has moved if ( m_last_mouse_pos == event.GetPosition() ) return; m_last_mouse_pos = event.GetPosition(); if (event.Leaving()) { m_tiptext = _T(""); if (m_tipwindow) { m_tipwindow->Close(); m_tipwindow = 0; } m_tiptimer.Stop(); } else { if ( m_tiptimer.IsRunning() ) { m_tiptimer.Stop(); } wxPoint position = event.GetPosition(); int flag = wxLIST_HITTEST_ONITEM; long subItem; long item_hit = HitTest(position, flag, &subItem); if (item_hit != wxNOT_FOUND && item_hit>=0 && item_hit= int(m_colinfovec.size()) || column < 0) { m_tiptext = _T(""); } else { m_tiptimer.Start(m_tooltip_delay, wxTIMER_ONE_SHOT); m_tiptext = TE(m_colinfovec[column].first); } } int CustomListCtrl::getColumnFromPosition(wxPoint pos) { int x_pos = 0; for (int i = 0; i < int(m_colinfovec.size());++i) { x_pos += GetColumnWidth(i); if (pos.x < x_pos) return i; } return -1; } void CustomListCtrl::OnStartResizeCol(wxListEvent& event) { if (!m_colinfovec[event.GetColumn()].second) event.Veto(); } void CustomListCtrl::OnEndResizeCol(wxListEvent& event) { int column = event.GetColumn(); int new_size = GetColumnWidth( column ); sett().SetColumnWidth( m_name, column, new_size ); //let the event go further event.Skip(); } bool CustomListCtrl::SetColumnWidth(int col, int width) { if ( sett().GetColumnWidth( m_name, col) != Settings::columnWidthUnset) { return ListBaseType::SetColumnWidth( col, sett().GetColumnWidth( m_name, col) ); } else { sett().SetColumnWidth( m_name, col, width ); return ListBaseType::SetColumnWidth( col, width ); } } void CustomListCtrl::noOp(wxMouseEvent& event) { m_tiptext = wxEmptyString; // m_tiptimer.Stop(); // if (m_controlPointer!= 0 && *m_controlPointer!= 0) // { // m_tipwindow->Close(); // m_tipwindow = 0; // } event.Skip(); } void CustomListCtrl::UpdateHighlights() { wxWindowUpdateLocker noUpdates(this); try { long item = -1; while ( true ) { item = GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_DONTCARE); if ( item == -1 ) break; HighlightItem( item ); } } catch(...) {} } void CustomListCtrl::HighlightItemUser( long item, const wxString& name ) { if ( m_highlight && useractions().DoActionOnUser( m_highlightAction, name ) ) { wxColour c = sett().GetGroupHLColor( useractions().GetGroupOfUser( name ) ); SetItemBackgroundColour( item, c ); } else SetItemBackgroundColour( item, m_bg_color ); } void CustomListCtrl::SetHighLightAction( UserActions::ActionType action ) { m_highlightAction = action; } void CustomListCtrl::MarkDirtySort() { m_dirty_sort = true; } void CustomListCtrl::CancelTooltipTimer() { m_tiptimer.Stop(); } bool CustomListCtrl::PopupMenu(wxMenu* menu, const wxPoint& pos ) { CancelTooltipTimer(); return ListBaseType::PopupMenu( menu, pos ); } springlobby-0.169/src/customlistctrl.h0000600000176000000410000001464212105760300021461 0ustar buildbotwww-data00000000000000#ifndef CUSTOMLISTITEM_H_ #define CUSTOMLISTITEM_H_ #ifndef __WXMSW__ #include typedef wxListCtrl ListBaseType; #else //disabled until further fixes #include // #include "Helper/listctrl.h" // typedef SL_Extern::wxGenericListCtrl ListBaseType; #include typedef wxListCtrl ListBaseType; #endif #include #define IDD_TIP_TIMER 696 #include #include #include #include "useractions.h" #include "utils/mixins.hh" class SLTipWindow; /** \brief Used as base class for all ListCtrls throughout SL * Provides generic functionality, such as column tooltips, possiblity to prohibit column resizing and selection modifiers. \n * Some of the provided functionality only makes sense for single-select lists (see grouping) \n * Note: Tooltips are a bitch and anyone shoudl feel to revise them (koshi) */ class CustomListCtrl : public ListBaseType, public SL::NonCopyable { protected: typedef UserActions::ActionType ActionType; //! used to display tooltips for a certain amount of time wxTimer m_tiptimer; //! always set to the currrently displayed tooltip text wxString m_tiptext; #if wxUSE_TIPWINDOW //! some wx implementations do not support this yet SLTipWindow* m_tipwindow; SLTipWindow** m_controlPointer; #endif unsigned int m_columnCount; typedef std::pair colInfo; typedef std::vector colInfoVec; //! maps outward column index to internal typedef std::map ColumnMap; /** global Tooltip thingies (ms) */ static const unsigned int m_tooltip_delay = 1000; static const unsigned int m_tooltip_duration = 2000; /*** these are only meaningful in single selection lists ***/ //! curently selected data long m_selected; //! index of curently selected data long m_selected_index; //! previously selected data long m_prev_selected; //! index of previously selected data long m_prev_selected_index; /***********************************************************/ //! stores info about the columns (wxString name,bool isResizable) - pairs colInfoVec m_colinfovec; //! primarily used to get coulumn index in mousevents (from cur. mouse pos) int getColumnFromPosition(wxPoint pos); wxPoint m_last_mouse_pos; //! used as label for saving column widths wxString m_name; //!controls if highlighting should be considered bool m_highlight; //! which action should be considered? ActionType m_highlightAction; const wxColour m_bg_color; //! list should be sorted bool m_dirty_sort; virtual void SetTipWindowText( const long item_hit, const wxPoint& position); ColumnMap m_column_map; struct SortOrderItem { int col; int direction; }; typedef std::map SortOrder; SortOrder m_sortorder; public: CustomListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pt, const wxSize& sz,long style, wxString name, unsigned int column_count, bool highlight = true, UserActions::ActionType hlaction = UserActions::ActHighlight); virtual ~CustomListCtrl(){} void OnSelected( wxListEvent& event ); void OnDeselected( wxListEvent& event ); /** @name Single Selection methods * using these funcs in a multi selection list is meaingless at best, harmful in the worst case * \todo insert debug asserts to catch that * @{ */ long GetSelectedIndex(); void SetSelectedIndex(const long newindex); long GetSelectedData(); long GetIndexFromData( const unsigned long data ); //! call this before example before sorting, inserting, etc void SetSelectionRestorePoint(); void ResetSelection(); //! and this afterwards void RestoreSelection(); /** @} */ //! intermediate function to add info to m_colinfovec after calling base class function void InsertColumn(long i, wxListItem item, wxString tip, bool = true); void AddColumn(long i, int width, const wxString& label, const wxString& tip, bool = true); //! this event is triggered when delay timer (set in mousemotion) ended virtual void OnTimer(wxTimerEvent& event); //! prohibits resizin if so set in columnInfo void OnStartResizeCol(wxListEvent& event); //! we use this to automatically save column width after resizin virtual void OnEndResizeCol(wxListEvent& event); //! starts timer, sets tooltiptext virtual void OnMouseMotion(wxMouseEvent& event); //! stop timer (before displaying popup f.e.) void CancelTooltipTimer(); //!Override to have tooltip timer cancelled automatically bool PopupMenu(wxMenu* menu, const wxPoint& pos = wxDefaultPosition); //! does nothing void noOp(wxMouseEvent& event); //! automatically get saved column width if already saved, otherwise use parameter and save new width virtual bool SetColumnWidth(int col, int width); // funcs that should make things easier for group highlighting ///all that needs to be implemented in child class for UpdateHighlights to work virtual void HighlightItem( long item ) = 0; void HighlightItemUser( long item, const wxString& name ); void UpdateHighlights(); void SetHighLightAction( UserActions::ActionType action ); /** @name Multi Selection methods * using these funcs in a single selection list is meaingless at best, harmful in the worst case * \todo insert debug asserts to catch that * @{ */ void SelectAll(); void SelectInverse(); /** @} */ //! sets selected index to -1 void SelectNone(); //! marks the items in the control to be sorted void MarkDirtySort(); DECLARE_EVENT_TABLE() }; #endif /*CUSTOMLISTITEM_H_*/ /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/customvirtlistctrl.cpp0000600000176000000410000003771312105760300022725 0ustar buildbotwww-data00000000000000 #include #include #include #include "nonportable.h" //pulls in the SL_DUMMY_COL define if applicable #include "settings.h" #include "defines.h" #include "iconimagelist.h" #include "utils/customdialogs.h" #include "uiutils.h" #include "utils/sltipwin.h" #include #include "utils/controls.h" #include #ifdef HAVE_WX29 wxBEGIN_EVENT_TABLE_TEMPLATE2(CustomVirtListCtrl, ListBaseType, T,L) #else BEGIN_EVENT_TABLE_TEMPLATE2(CustomVirtListCtrl, ListBaseType, T,L) #endif #if wxUSE_TIPWINDOW EVT_MOTION(CustomVirtListCtrl::OnMouseMotion) EVT_TIMER(IDD_TIP_TIMER, CustomVirtListCtrl::OnTimer) #endif EVT_LIST_COL_BEGIN_DRAG(wxID_ANY, CustomVirtListCtrl::OnStartResizeCol) EVT_LIST_COL_END_DRAG(wxID_ANY, CustomVirtListCtrl::OnEndResizeCol) EVT_LEAVE_WINDOW(CustomVirtListCtrl::noOp) EVT_LIST_ITEM_SELECTED ( wxID_ANY, CustomVirtListCtrl::OnSelected ) EVT_LIST_ITEM_DESELECTED ( wxID_ANY, CustomVirtListCtrl::OnDeselected ) EVT_LIST_DELETE_ITEM ( wxID_ANY, CustomVirtListCtrl::OnDeselected ) EVT_LIST_COL_CLICK ( wxID_ANY, CustomVirtListCtrl::OnColClick ) END_EVENT_TABLE() template < class T, class L > CustomVirtListCtrl::CustomVirtListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pt, const wxSize& sz, long style, const wxString& name, unsigned int sort_criteria_count, CompareFunction func, bool highlight, UserActions::ActionType hlaction, bool periodic_sort, unsigned int periodic_sort_interval ) : ListBaseType(parent, id, pt, sz, style | wxLC_VIRTUAL), m_tiptimer(this, IDD_TIP_TIMER), m_sort_timer(this, IDD_SORT_TIMER), m_tiptext(_T("")), #if wxUSE_TIPWINDOW m_tipwindow( 0 ), m_controlPointer( 0 ), #endif m_columnCount( 0 ), m_selected_index(-1), m_prev_selected_index(-1), m_last_mouse_pos( wxPoint(-1,-1) ), m_name(name), m_highlight(highlight), m_highlightAction(hlaction), m_bg_color( GetBackgroundColour() ), m_dirty_sort(false), m_sort_criteria_count( sort_criteria_count ), m_comparator( this,m_sortorder, func ), m_periodic_sort_timer_id( wxNewId() ), m_periodic_sort_timer( this, m_periodic_sort_timer_id ), m_periodic_sort( periodic_sort ), m_periodic_sort_interval( periodic_sort_interval ) { //dummy init , will later be replaced with loading from settings for ( unsigned int i = 0; i < m_columnCount; ++i) { m_column_map[i] = i; } SetImageList( &icons(), wxIMAGE_LIST_NORMAL ); SetImageList( &icons(), wxIMAGE_LIST_SMALL ); SetImageList( &icons(), wxIMAGE_LIST_STATE ); m_sortorder = sett().GetSortOrder( name ); StartTimer(); Connect( ListctrlDoSortEventType, wxCommandEventHandler( ThisType::OnSortEvent ), NULL, this ); } template < class T, class L > void CustomVirtListCtrl::OnQuit( GlobalEvents::GlobalEventData /*data*/ ) { m_periodic_sort_timer.Stop(); m_dirty_sort = false; Clear(); } template < class T, class L > void CustomVirtListCtrl::StartTimer() { if ( m_periodic_sort ) { Connect( m_periodic_sort_timer_id, wxTimerEvent().GetEventType(), wxTimerEventHandler( ThisType::OnPeriodicSort ) ); #ifndef NDEBUG bool started = #endif m_periodic_sort_timer.Start( m_periodic_sort_interval ); assert( started ); } } template < class T, class L > void CustomVirtListCtrl::StopTimer() { m_periodic_sort_timer.Stop(); Disconnect( m_periodic_sort_timer_id, wxTimerEvent().GetEventType(), wxTimerEventHandler( ThisType::OnPeriodicSort ) ); } template < class T, class L > CustomVirtListCtrl::~CustomVirtListCtrl() { StopTimer(); sett().SetSortOrder( m_name, m_sortorder ); } template < class T, class L > void CustomVirtListCtrl::AddColumn(long i, int width, const wxString& label, const wxString& tip, bool modifiable) { m_columnCount++; ListBaseType::InsertColumn( i, label, wxLIST_FORMAT_LEFT, width); SetColumnWidth( i, width ); colInfo temp( i, label, tip, modifiable, width ); m_colinfovec.push_back( temp ); } template < class T, class L > void CustomVirtListCtrl::SaveSelection() { ResetSelection(); long item = -1; while ( true ) { item = GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); if ( item == -1 ) break; m_selected_data.push_back( m_data[item] ); } } template < class T, class L > void CustomVirtListCtrl::RestoreSelection() { while ( !m_selected_data.empty() ) { SelectedDataType data = m_selected_data.back(); m_selected_data.pop_back(); int idx = GetIndexFromData( data ); SetItemState( idx, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED ); } } template < class T, class L > void CustomVirtListCtrl::ResetSelection() { m_selected_data.clear(); } template < class T, class L > void CustomVirtListCtrl::OnSelected( wxListEvent& event ) { m_selected_index = event.GetIndex(); event.Skip(); } template < class T, class L > void CustomVirtListCtrl::OnDeselected( wxListEvent& event ) { if ( m_selected_index == event.GetIndex() ) m_selected_index = -1; } template < class T, class L > long CustomVirtListCtrl::GetSelectedIndex() const { return m_selected_index ; } template < class T, class L > void CustomVirtListCtrl::SelectAll() { for (long i = 0; i < GetItemCount() ; i++ ) { SetItemState( i, wxLIST_STATE_SELECTED, -1 ); } } template < class T, class L > void CustomVirtListCtrl::SelectNone() { for (long i = 0; i < GetItemCount() ; i++ ) { SetItemState( i, wxLIST_STATE_DONTCARE, -1 ); } } template < class T, class L > void CustomVirtListCtrl::SelectInverse() { for (long i = 0; i < GetItemCount() ; i++ ) { int state = GetItemState( i, -1 ); state = ( state == wxLIST_STATE_DONTCARE ? wxLIST_STATE_SELECTED : wxLIST_STATE_DONTCARE ); SetItemState( i, state, -1 ); } } template < class T, class L > void CustomVirtListCtrl::SetSelectedIndex(const long newindex) { m_selected_index = newindex; } template < class T, class L > void CustomVirtListCtrl::RefreshVisibleItems() { if ( m_data.empty() ) return; #ifndef __WXMSW__ const long topItemIndex = GetTopItem(); const long range = topItemIndex + GetCountPerPage(); RefreshItems( topItemIndex, LSL::Util::Clamp( range, topItemIndex, (long) m_data.size() -1 ) ); //RefreshItems( topItemIndex, range ); #else RefreshItems( 0, m_data.size() -1 ); #endif } template < class T, class L > void CustomVirtListCtrl::OnTimer(wxTimerEvent& /*unused*/ ) { #if wxUSE_TIPWINDOW if (!m_tiptext.empty()) { m_tipwindow = new SLTipWindow(this, m_tiptext); m_controlPointer = &m_tipwindow; m_tipwindow->SetTipWindowPtr((wxTipWindow**)m_controlPointer); #ifndef __WXMSW__ m_tipwindow->SetBoundingRect(wxRect(1,1,50,50)); #endif m_tiptext = wxEmptyString; m_tiptimer.Start(m_tooltip_duration, wxTIMER_ONE_SHOT); } else { m_tiptext = wxEmptyString; m_tiptimer.Stop(); if (m_controlPointer!= 0 && *m_controlPointer!= 0) { m_tipwindow->Close(); m_tipwindow = 0; } } #endif } template < class T, class L > void CustomVirtListCtrl::OnMouseMotion(wxMouseEvent& event) { m_sort_timer.Stop(); m_sort_timer.Start( m_sort_block_time , wxTIMER_ONE_SHOT ); #if wxUSE_TIPWINDOW //we don't want to display the tooltip again until mouse has moved if ( m_last_mouse_pos == event.GetPosition() ) return; m_last_mouse_pos = event.GetPosition(); if (event.Leaving()) { m_tiptext = _T(""); if (m_tipwindow) { m_tipwindow->Close(); m_tipwindow = 0; } m_tiptimer.Stop(); } else { if ( m_tiptimer.IsRunning() ) { m_tiptimer.Stop(); } wxPoint position = event.GetPosition(); int flag = wxLIST_HITTEST_ONITEM; #ifdef HAVE_WX28 long subItem; long item_hit = HitTest(position, flag, &subItem); #else long item_hit = HitTest(position, flag); #endif if (item_hit != wxNOT_FOUND && item_hit>=0 && item_hit void CustomVirtListCtrl::SetTipWindowText( const long /*unused*/ , const wxPoint& position) { int column = getColumnFromPosition(position); if (column >= int(m_colinfovec.size()) || column < 0) { m_tiptext = _T(""); } else { m_tiptimer.Start(m_tooltip_delay, wxTIMER_ONE_SHOT); m_tiptext = TE(m_colinfovec[column].tip); } } template < class T, class L > int CustomVirtListCtrl::getColumnFromPosition(wxPoint pos) { int x_pos = 0; for (int i = 0; i < int(m_colinfovec.size());++i) { x_pos += GetColumnWidth(i); if (pos.x < x_pos) return i; } return -1; } template < class T, class L > void CustomVirtListCtrl::OnStartResizeCol(wxListEvent& event) { if (!m_colinfovec[event.GetColumn()].can_resize) event.Veto(); } template < class T, class L > void CustomVirtListCtrl::OnEndResizeCol(wxListEvent& event) { int column = event.GetColumn(); int new_size = GetColumnWidth( column ); sett().SetColumnWidth( m_name, column, new_size ); sett().SaveSettings(); //let the event go further event.Skip(); } template < class T, class L > bool CustomVirtListCtrl::SetColumnWidth(int col, int& width) { assert( col < (long)m_columnCount ); assert( col >= 0 ); if ( sett().GetColumnWidth( m_name, col) != Settings::columnWidthUnset) { width = sett().GetColumnWidth( m_name, col); return ListBaseType::SetColumnWidth( col, width ); } else { sett().SetColumnWidth( m_name, col, width ); return ListBaseType::SetColumnWidth( col, width ); } } template < class T, class L > void CustomVirtListCtrl::noOp(wxMouseEvent& event) { m_tiptext = wxEmptyString; // m_tiptimer.Stop(); // if (m_controlPointer!= 0 && *m_controlPointer!= 0) // { // m_tipwindow->Close(); // m_tipwindow = 0; // } event.Skip(); } template < class T, class L > wxListItemAttr* CustomVirtListCtrl::HighlightItemUser( const wxString& name ) const { static wxListItemAttr att; if ( m_highlight && useractions().DoActionOnUser( m_highlightAction, name ) ) { att.SetBackgroundColour( sett().GetGroupHLColor( useractions().GetGroupOfUser( name ) ) ); return &att; } else return NULL; } template < class T, class L > void CustomVirtListCtrl::SetHighLightAction( UserActions::ActionType action ) { m_highlightAction = action; } template < class T, class L > void CustomVirtListCtrl::MarkDirtySort() { m_dirty_sort = true; } template < class T, class L > void CustomVirtListCtrl::CancelTooltipTimer() { m_tiptimer.Stop(); } template < class T, class L > bool CustomVirtListCtrl::PopupMenu(wxMenu* menu, const wxPoint& pos ) { CancelTooltipTimer(); return ListBaseType::PopupMenu( menu, pos ); } template < class T, class L > void CustomVirtListCtrl::SortList( bool force ) { if ( ( m_sort_timer.IsRunning() || !m_dirty_sort ) && !force ) { return; } { wxWindowUpdateLocker upd( this ); SelectionSaver(*this); Sort(); m_dirty_sort = false; } RefreshVisibleItems();//needs to be out of locker scope } template < class T, class L > void CustomVirtListCtrl::Clear() { m_data.clear(); SetItemCount( 0 ); ResetSelection(); RefreshVisibleItems(); } template < class T, class L > typename CustomVirtListCtrl::DataType CustomVirtListCtrl::GetDataFromIndex ( const long index ) { return m_data[index]; } template < class T, class L > const typename CustomVirtListCtrl::DataType CustomVirtListCtrl::GetDataFromIndex ( const long index ) const { return m_data[index]; } template < class T, class L > typename CustomVirtListCtrl::DataType CustomVirtListCtrl::GetSelectedData() { return GetDataFromIndex( m_selected_index ); } template < class T, class L > void CustomVirtListCtrl::ResetColumnSizes() { typename colInfoVec::const_iterator it = m_colinfovec.begin(); for ( ; it != m_colinfovec.end(); ++it ) { int width = it->size; SetColumnWidth( it->col_num, width ); } } template < class T, class L > void CustomVirtListCtrl::OnColClick( wxListEvent& event ) { if ( event.GetColumn() == -1 ) return; const int evt_col = event.GetColumn(); m_sort_timer.Stop();//otherwise sorting will be way delayed int old_sort_col = m_sortorder[0].col; wxListItem col; GetColumn( m_sortorder[0].col, col ); col.SetImage( icons().ICON_NONE ); SetColumn( m_sortorder[0].col, col ); unsigned int i = 0; SortOrder::const_iterator it = m_sortorder.begin(); for ( ; it != m_sortorder.begin(); ++i, ++it ) { if ( m_sortorder[i].col == evt_col ) break; } // for ( ; m_sortorder[i].col != event.GetColumn() && i < 4; ++i ) {} i = LSL::Util::Clamp( i, (unsigned int)0, m_sort_criteria_count ); for ( ; i > 0; i--) { m_sortorder[i] = m_sortorder[i-1]; } m_sortorder[0].col = evt_col; m_sortorder[0].direction *= -1; GetColumn( m_sortorder[0].col, col ); //col.SetImage( ( m_sortorder[0].direction )?ICON_UP:ICON_DOWN ); col.SetImage( ( m_sortorder[0].direction > 0 )?icons().ICON_UP:icons().ICON_DOWN ); SetColumn( m_sortorder[0].col, col ); if ( old_sort_col != m_sortorder[0].col ){ SortList( true ); } else { // O(n) instead of guaranteed worst case O(n*n) ReverseOrder(); } } template < class T, class L > void CustomVirtListCtrl::OnSortEvent( wxCommandEvent& evt ) { bool force = evt.GetInt() != 0; SortList( force ); } template < class T, class L > bool CustomVirtListCtrl::GetColumn(int col, wxListItem& item) const { return ListBaseType::GetColumn( col, item ); } template < class T, class L > bool CustomVirtListCtrl::SetColumn(int col, wxListItem& item) { return ListBaseType::SetColumn( col, item ); } template < class T, class L > void CustomVirtListCtrl::ReverseOrder() { SaveSelection(); std::reverse( m_data.begin(), m_data.end() ); RefreshVisibleItems(); RestoreSelection(); } template < class T, class L > bool CustomVirtListCtrl::AddItem( const T& item ) { if ( GetIndexFromData( item ) != -1 ) return false; m_data.push_back( item ); SetItemCount( m_data.size() ); RefreshItem( m_data.size() - 1 ); //SetColumnWidth( 5, wxLIST_AUTOSIZE ); //! TODO does this really work? MarkDirtySort(); return true; } template < class T, class L > bool CustomVirtListCtrl::RemoveItem( const T& item ) { int index = GetIndexFromData( item ); if ( index != -1 ) { SelectionSaver(*this); m_data.erase( m_data.begin() + index ); SetItemCount( m_data.size() ); RefreshItems( index, m_data.size() -1 ); return true; } return false; } template < class T, class L > wxString CustomVirtListCtrl::OnGetItemText(long item, long column) const { assert( item < (long)m_data.size() ); //assert( column < m_columnCount ); column = LSL::Util::Clamp( column, long(0), long(m_columnCount) ); return asImp().GetItemText(item, column); } template < class T, class L > int CustomVirtListCtrl::OnGetItemColumnImage(long item, long column) const { return asImp().GetItemColumnImage(item, column); } template < class T, class L > wxListItemAttr* CustomVirtListCtrl::OnGetItemAttr(long item) const { return asImp().GetItemAttr(item); } template < class T, class L > void CustomVirtListCtrl::OnPeriodicSort( wxTimerEvent& /*unused*/ ) { SortList(); } springlobby-0.169/src/customvirtlistctrl.h0000600000176000000410000003170412105760300022364 0ustar buildbotwww-data00000000000000#ifndef CUSTOMVIRTLISTITEM_H_ #define CUSTOMVIRTLISTITEM_H_ #if defined(SL_QT_MODE) || !defined(__WXMSW__) #include typedef wxListCtrl ListBaseType; #else #include "Helper/listctrl.h" typedef SL_Extern::wxGenericListCtrl ListBaseType; #endif #include #define IDD_TIP_TIMER 696 #define IDD_SORT_TIMER 697 #include #include #include #include "useractions.h" #include "Helper/sortutil.h" #include "utils/isink.h" #include "utils/mixins.hh" const wxEventType ListctrlDoSortEventType = wxNewEventType(); class ListctrlSortEvent : public wxCommandEvent { public: ListctrlSortEvent( int event_id = wxNewId() ) : wxCommandEvent( ListctrlDoSortEventType, event_id ) {} }; class SLTipWindow; /** \brief Used as base class for some ListCtrls throughout SL * Provides generic functionality, such as column tooltips, possiblity to prohibit column resizing and selection modifiers. \n * Some of the provided functionality only makes sense for single-select lists (see grouping) \n * Note: the second template param is actually just a dummy to ensure the compiler generates distinct code in case we have different listctrls with same datatype * Note: Tooltips are a bitch and anyone should feel free to revise them (koshi) * \tparam the type of stored data */ template < class DataImp, class ListCtrlImp > class CustomVirtListCtrl : public ListBaseType, public OnQuitSink >, public SL::NonCopyable { public: typedef DataImp DataType; protected: typedef CustomVirtListCtrl< DataImp, ListCtrlImp > BaseType; typedef UserActions::ActionType ActionType; //! used to display tooltips for a certain amount of time wxTimer m_tiptimer; //! used to block sorting while mouse is moving wxTimer m_sort_timer; //! always set to the currrently displayed tooltip text wxString m_tiptext; #if wxUSE_TIPWINDOW //! some wx implementations do not support this yet SLTipWindow* m_tipwindow; SLTipWindow** m_controlPointer; #endif unsigned int m_columnCount; struct colInfo { colInfo(int n, wxString l, wxString t, bool c, int s): col_num(n), label(l), tip(t), can_resize(c), size(s) {} colInfo(): col_num(0), can_resize(false), size(0) {} int col_num; wxString label; wxString tip; bool can_resize; int size; }; typedef std::vector colInfoVec; //! maps outward column index to internal typedef std::map ColumnMap; /** global Tooltip thingies (ms) */ static const unsigned int m_tooltip_delay = 1000; static const unsigned int m_tooltip_duration = 2000; static const unsigned int m_sort_block_time = 1500; /*** these are only meaningful in single selection lists ***/ //! index of curently selected data long m_selected_index; //! index of previously selected data long m_prev_selected_index; /***********************************************************/ //! stores info about the columns (wxString name,bool isResizable) - pairs colInfoVec m_colinfovec; //! primarily used to get coulumn index in mousevents (from cur. mouse pos) int getColumnFromPosition(wxPoint pos); //! map: index in visible list <--> index in data vector typedef std::map VisibilityMap; typedef VisibilityMap::iterator VisibilityMapIter; /** \brief list indexes of not-filtered items * use like this: when adding items set identity mapping \n m_visible_idxs[m_data.size() -1] = ( m_data.size() -1 ); \n when filtering clear the map, iterate thru data and only set mapping for matching items in data \n when acessing data (getColoumText etc.) always access data's index thru this map **/ VisibilityMap m_visible_idxs; wxPoint m_last_mouse_pos; //! used as label for saving column widths wxString m_name; //!controls if highlighting should be considered bool m_highlight; //! which action should be considered? ActionType m_highlightAction; const wxColour m_bg_color; //! list should be sorted bool m_dirty_sort; virtual void SetTipWindowText( const long item_hit, const wxPoint& position); ColumnMap m_column_map; /** @name Sort functionality * * @{ */ static SortOrder m_sortorder; unsigned int m_sort_criteria_count; /** generic comparator that gets it's real functionality * in derived classes via comapre callbakc func that * performs the actual comparison of two items **/ template < class ObjImp > struct ItemComparator { typedef ObjImp ObjType; SortOrder& m_order; typedef int (ListCtrlImp::*CmpFunc) ( ObjType u1, ObjType u2, int, int ) const; CmpFunc m_cmp_func; const unsigned int m_num_criteria; const BaseType* m_listctrl; /** \param order SortOrder map that defines which columns should be sorted in what directions * \param func the comparison callback func. Should return -1,0,1 for less,equal,greater * \param num_criteria set to 1,2 to limit sub-ordering * \todo make order const reference to eliminate assumption about existence of entries */ ItemComparator( const BaseType* listctrl, SortOrder& order,CmpFunc func, const unsigned int num_criteria = 3 ) :m_order(order), m_cmp_func(func), m_num_criteria(num_criteria), m_listctrl( listctrl ) {} bool operator () ( ObjType u1, ObjType u2 ) const { int res = (m_listctrl->asImp().*m_cmp_func)( u1, u2, m_order[0].col, m_order[0].direction ); if ( res != 0 ) return res < 0; if ( m_num_criteria > 1 ) { res = (m_listctrl->asImp().*m_cmp_func)( u1, u2, m_order[1].col, m_order[1].direction ); if ( res != 0 ) return res < 0; if ( m_num_criteria > 2 ) { res = (m_listctrl->asImp().*m_cmp_func)( u1, u2, m_order[2].col, m_order[2].direction ); if ( res != 0 ) return res < 0; } } return false; } }; typedef typename ItemComparator::CmpFunc CompareFunction; //! compare func usable for types with well-defined ordering (and implemented ops <,>) template < typename Type > static inline int compareSimple( Type o1, Type o2 ) { if ( o1 < o2 ) return -1; else if ( o1 > o2 ) return 1; return 0; } //! must be implemented in derived classes, should call the actual sorting on data and refreshitems virtual void Sort( ) = 0; public: /** only sorts if data is marked dirty, or force is true * calls Freeze(), Sort(), Thaw() */ void SortList( bool force = false ); /** @} */ public: CustomVirtListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pt, const wxSize& sz,long style, const wxString& name, unsigned int sort_criteria_count, CompareFunction func, bool highlight = true, UserActions::ActionType hlaction = UserActions::ActHighlight, bool periodic_sort = false, unsigned int periodic_sort_interval = 5000 /*miliseconds*/); virtual ~CustomVirtListCtrl(); void OnSelected( wxListEvent& event ); void OnDeselected( wxListEvent& event ); /** @name Single Selection methods * using these funcs in a multi selection list is meaningless at best, harmful in the worst case * \todo insert debug asserts to catch that * @{ */ long GetSelectedIndex() const; void SetSelectedIndex(const long newindex); DataType GetDataFromIndex ( const long index ); const DataType GetDataFromIndex ( const long index ) const; DataType GetSelectedData(); /** @} */ /** @name Multi Selection methods * call this before example before sorting, inserting, etc */ void SaveSelection(); void ResetSelection(); //! and this afterwards void RestoreSelection(); /** @} */ //! intermediate function to add info to m_colinfovec after calling base class function void AddColumn(long i, int width, const wxString& label, const wxString& tip, bool = true); //! this event is triggered when delay timer (set in mousemotion) ended virtual void OnTimer(wxTimerEvent& event); //! prohibits resizin if so set in columnInfo void OnStartResizeCol(wxListEvent& event); //! we use this to automatically save column width after resizin virtual void OnEndResizeCol(wxListEvent& event); //! starts timer, sets tooltiptext virtual void OnMouseMotion(wxMouseEvent& event); //! stop timer (before displaying popup f.e.) void CancelTooltipTimer(); //!Override to have tooltip timer cancelled automatically bool PopupMenu(wxMenu* menu, const wxPoint& pos = wxDefaultPosition); //! does nothing void noOp(wxMouseEvent& event); //! automatically get saved column width if already saved, otherwise use parameter and save new width virtual bool SetColumnWidth(int col, int& width); //! reset columns with current set size (only effects columns with auto-size) void ResetColumnSizes(); // funcs that should make things easier for group highlighting ///all that needs to be implemented in child class for UpdateHighlights to work wxListItemAttr* HighlightItemUser( const wxString& name ) const; void SetHighLightAction( UserActions::ActionType action ); void RefreshVisibleItems(); /** @name Multi Selection methods * using these funcs in a single selection list is meaingless at best, harmful in the worst case * \todo insert debug asserts to catch that * @{ */ void SelectAll(); void SelectInverse(); /** @} */ //! sets selected index to -1 void SelectNone(); //! marks the items in the control to be sorted void MarkDirtySort(); /** @name overloaded wxFunctions * these are used to display items in virtual lists * @{ */ wxString OnGetItemText(long item, long column) const; int OnGetItemColumnImage(long item, long column) const; wxListItemAttr* OnGetItemAttr(long item) const; //! when using the dummy column, we provide diff impl that adjust for that bool GetColumn(int col, wxListItem& item) const; bool SetColumn(int col, wxListItem& item); /** @} */ //! delete all data, selections, and whatnot virtual void Clear(); //! handle sort order updates void OnColClick( wxListEvent& event ); virtual int GetIndexFromData( const DataType& data ) const = 0; void ReverseOrder(); void OnQuit( GlobalEvents::GlobalEventData data ); void StartTimer(); void StopTimer(); protected: typedef std::vector< DataImp > DataVector; typedef typename DataVector::iterator DataIter; typedef typename DataVector::const_iterator DataCIter; typedef typename DataVector::reverse_iterator DataRevIter; typedef typename DataVector::const_reverse_iterator DataRevCIter; DataVector m_data; typedef DataType SelectedDataType; typedef std::vector< SelectedDataType > SelectedDataVector; SelectedDataVector m_selected_data; //! the Comparator object passed to the SLInsertionSort function ItemComparator m_comparator; bool RemoveItem( const DataImp& item ); bool AddItem( const DataImp& item ); long m_periodic_sort_timer_id; wxTimer m_periodic_sort_timer; bool m_periodic_sort; unsigned int m_periodic_sort_interval; void OnPeriodicSort( wxTimerEvent& evt ); //! this is the sink for a custom event that can be used for async sort void OnSortEvent( wxCommandEvent& evt ); public: DECLARE_EVENT_TABLE() private: typedef BaseType ThisType; ListCtrlImp& asImp() { return static_cast(*this); } const ListCtrlImp& asImp() const { return static_cast(*this); } }; template < class ListCtrlType > class SelectionSaver { ListCtrlType& m_list; public: SelectionSaver( ListCtrlType& list ) : m_list( list ) { m_list.SaveSelection(); } ~SelectionSaver() { m_list.RestoreSelection(); } }; #include "customvirtlistctrl.cpp" #endif /*CUSTOMLISTITEM_H_*/ /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/defines.h0000600000176000000410000000175012105760300017777 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_DEFINES_H #define SPRINGLOBBY_HEADERGUARD_DEFINES_H #if ( !defined(HAVE_WX29) && !defined(HAVE_WX28) ) #if( wxMAJOR_VERSION==2 && wxMINOR_VERSION == 9 ) #define HAVE_WX29 #elif( wxMAJOR_VERSION==2 && wxMINOR_VERSION == 8 ) #define HAVE_WX28 #endif #endif #endif // SPRINGLOBBY_HEADERGUARD_DEFINES_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/downloader/CMakeLists.txt0000600000176000000410000000155412105760300023111 0ustar buildbotwww-data00000000000000add_sources(springlobbySrc prdownloader.cpp downloadlistctrl.cpp ) #currently unused clear(filelistSrc) add_sources( filelistSrc filelister/filelistctrl.cpp filelister/filelistdialog.cpp filelister/filelistfilter.cpp ) set(CONSOLETOOL OFF CACHE BOOL "disable console tool compile" FORCE) set(SHAREDLIB OFF CACHE BOOL "disable shared lib compile" FORCE) set(DEVELOP_FILES OFF CACHE BOOL "disable develop files" FORCE) set(DO_INSTALL OFF CACHE BOOL "don't install any pr-downloader file" FORCE) set(ARCHIVE_SUPPORT OFF CACHE BOOL "disable archive support as it interferes with unitsync!" FORCE) mark_as_advanced(FORCE CONSOLETOOL SHAREDLIB DEVELOP_FILES DO_INSTALL) if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/lib/CMakeLists.txt") MESSAGE(FATAL_ERROR "lib/CMakeLists.txt doesn't exist, please run \ngit submodule update --init") else() Add_Subdirectory(lib) endif() springlobby-0.169/src/downloader/downloadlistctrl.cpp0000600000176000000410000001541312105760300024444 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include #include #include #include #include "downloadlistctrl.h" #include "prdownloader.h" #include "../iconimagelist.h" #include "../utils/conversion.h" static const wxString na_str = wxString(_("N/A")); template<> SortOrder DownloadListCtrl::BaseType::m_sortorder = SortOrder(); BEGIN_EVENT_TABLE( DownloadListCtrl, DownloadListCtrl::BaseType ) EVT_LIST_ITEM_RIGHT_CLICK ( TLIST_CLICK, DownloadListCtrl::OnListRightClick ) //EVT_LIST_COL_CLICK ( TLIST_CLICK, DownloadListCtrl::OnColClick ) EVT_MENU ( TLIST_CANCEL, DownloadListCtrl::OnCancel ) EVT_MENU ( TLIST_RETRY, DownloadListCtrl::OnRetry ) #if wxUSE_TIPWINDOW #ifndef __WXMSW__ //disables tooltips on win EVT_MOTION( DownloadListCtrl::OnMouseMotion ) #endif #endif END_EVENT_TABLE() DownloadListCtrl::DownloadListCtrl( wxWindow* parent ) : DownloadListCtrl::BaseType( parent, TLIST_CLICK, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER | wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_ALIGN_LEFT, _T("DownloadListCtrl"), 3, &DownloadListCtrl::CompareOneCrit ) , m_popup(0) { #if defined(__WXMAC__) /// on mac, autosize does not work at all const int widths[9] = { 200, 100, 80, 80, 80, 80, 80, 80, 80 }; #else const int widths[9] = { 200, wxLIST_AUTOSIZE_USEHEADER, wxLIST_AUTOSIZE_USEHEADER, 80, wxLIST_AUTOSIZE_USEHEADER, 80, 80, 80, wxLIST_AUTOSIZE_USEHEADER }; #endif AddColumn(0, widths[0], _T("Name"), _T("Name")); AddColumn(1, widths[1], _T("Status"), _T("Status")); AddColumn(2, widths[2], _T("% complete"), _T("% complete")); AddColumn(3, widths[3], _T("KB/s down"), _T("KB/s download")); AddColumn(4, widths[4], _T("ETA"), _T("Estimated time remaining")); AddColumn(5, widths[5], _T("Filesize (MB)"), _T("Filesize")); // sortorder: name --> percent completed --> mb donwloaded if ( m_sortorder.size() == 0 ) { m_sortorder[0].col = 0; m_sortorder[0].direction = 1; m_sortorder[1].col = 5; m_sortorder[1].direction = 1; m_sortorder[2].col = 2; m_sortorder[2].direction = 1; } Sort( ); } DownloadListCtrl::~DownloadListCtrl() { delete m_popup; m_popup = 0; } bool DownloadListCtrl::AddTorrentInfo(const DataType& info) { if(AddItem(info)) return true; return false; } bool DownloadListCtrl::RemoveTorrentInfo(const DataType& info) { if(RemoveItem(info)) { if(m_data.size() == 0) Refresh(); return true; } return false; } void DownloadListCtrl::UpdateTorrentInfo(const DataType& info) { int index = GetIndexFromData(info); if( index < 0) { if(IsTorrentActive(info)) AddTorrentInfo(info); return; } m_data[index] = info; RefreshItem( index ); MarkDirtySort(); } void DownloadListCtrl::OnListRightClick( wxListEvent& /*event*/ ) { // int idx = event.GetIndex(); // if ( idx < (long)m_data.size() && idx > -1 ) { // DataType dt = m_data[idx]; // delete m_popup; // m_popup = new wxMenu( _T("") ); // if(dt.downloadstatus == P2P::not_stored) // { // m_popup->Append( TLIST_CANCEL, _("Cancel download") ); // m_popup->Append( TLIST_RETRY, _("Retry download") ); // } // else if(dt.downloadstatus == P2P::queued || dt.downloadstatus == P2P::leeching) // m_popup->Append( TLIST_CANCEL, _("Cancel download") ); // else if(dt.downloadstatus == P2P::complete) // m_popup->Append( TLIST_CANCEL, _("Remove download (keeping downloaded file)") ); // PopupMenu( m_popup ); // } } void DownloadListCtrl::OnCancel(wxCommandEvent &/*event*/) { prDownloader().RemoveTorrentByName(GetSelectedData().name); RemoveTorrentInfo(GetSelectedData()); } void DownloadListCtrl::OnRetry(wxCommandEvent &/*event*/) { DataType info( GetSelectedData() ); prDownloader().RemoveTorrentByName( info.name ); RemoveTorrentInfo( info ); assert(false); // prDownloader().RequestFileByName( info.name ); } void DownloadListCtrl::Sort() { if ( m_data.size() > 0 ) { SaveSelection(); SLInsertionSort( m_data, m_comparator ); RestoreSelection(); } } void DownloadListCtrl::SetTipWindowText( const long /*item_hit*/, const wxPoint& /*position*/) { m_tiptext = _T(""); } void DownloadListCtrl::HighlightItem( long /*item*/ ) { } int DownloadListCtrl::CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const { switch ( col ) { case 0: return dir * compareSimple(boost::to_lower_copy(u1.name), boost::to_lower_copy(u2.name)); case 1: return dir * compareSimple( u1.numcopies, u2.numcopies ); case 2: return dir * compareSimple( u1.downloadstatus, u2.downloadstatus ); case 3: return dir * compareSimple( u1.progress, u2.progress ); case 4: return dir * compareSimple( u1.inspeed, u2.inspeed ); case 5: return dir * compareSimple( u1.eta, u2.eta ); case 6: return dir * compareSimple( u1.filesize, u2.filesize ); default: return 0; } } int DownloadListCtrl::GetItemColumnImage(long /*item*/, long /*column*/) const { return -1; } int DownloadListCtrl::GetItemImage(long /*item*/) const { return -1; } wxString DownloadListCtrl::GetItemText(long item, long column) const { if ( item > (long)m_data.size() || item < 0 ) return wxEmptyString; float kfactor = 1/float(1024); float mfactor = 1/float(1024*1024); const DataType& infos = m_data[item]; switch ( column ) { default: return wxEmptyString; case 0: return TowxString(infos.name); case 1: return infos.numcopies > 0 ? (wxFormat(_T("%.2f") ) % infos.numcopies).str() : na_str; case 2: if(infos.downloadstatus == P2P::not_stored) return _("not found"); else if(infos.downloadstatus == P2P::queued) return _("queued"); else if(infos.downloadstatus == P2P::leeching) return _("downloading"); else if(infos.downloadstatus == P2P::complete) return _("complete"); else return wxEmptyString; case 3: return infos.progress > -0.01 ? (wxFormat(_T("%.2f") ) % ( infos.progress * 100 )).str() : na_str; case 4: return infos.inspeed > -0.01 ? (wxFormat(_T("%.2f") ) % ( infos.inspeed*kfactor )).str() : na_str; case 5: return infos.eta > -1 ? wxTimeSpan::Seconds(infos.eta).Format( _T("%H:%M:%S") ) : _T("inf.") ; case 6: return infos.filesize > 0 ? (wxFormat(_T("%.2f") ) % ( infos.filesize*mfactor)).str() : na_str; } } int DownloadListCtrl::GetIndexFromData( const DataType& data ) const { DataCIter it = m_data.begin(); for ( int i = 0; it != m_data.end(); ++it , ++i) { if ( it->name == data.name ) return i; } return -1; } bool DownloadListCtrl::IsTorrentActive(const DataType& info) const { return (info.downloadstatus == P2P::leeching || info.downloadstatus == P2P::queued); } springlobby-0.169/src/downloader/downloadlistctrl.h0000600000176000000410000000440512105760300024110 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_TORRENTLISTCTRL_H #define SPRINGLOBBY_HEADERGUARD_TORRENTLISTCTRL_H #include "../customvirtlistctrl.h" #include "prdownloader.h" #include //struct TorrentInfos; class wxMenu; class Battle; class wxListEvent; class wxCommandEvent; class Ui; /** \brief list all currently active (queued,lecching,seeding) torrents with their infos * the list is newly populated every n-seconds from Ui::OnUpdate() */ class DownloadListCtrl : public CustomVirtListCtrl { public: DownloadListCtrl( wxWindow* parent ); ~DownloadListCtrl(); void Sort(); void OnListRightClick( wxListEvent& event ); virtual void SetTipWindowText( const long item_hit, const wxPoint& position); bool AddTorrentInfo(const DataType& info); bool RemoveTorrentInfo(const DataType& info); void UpdateTorrentInfo(const DataType& info); virtual void HighlightItem( long item ); void OnCancel( wxCommandEvent& event ); void OnRetry( wxCommandEvent& event ); //these are overloaded to use list in virtual style wxString GetItemText(long item, long column) const; int GetItemImage(long item) const; int GetItemColumnImage(long item, long column) const; wxListItemAttr* GetItemAttr(long ) const {return 0;} protected: int CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const; int GetIndexFromData( const DataType& data ) const; bool IsTorrentActive(const DataType& info) const; wxMenu* m_popup; enum { TLIST_CLICK, TLIST_CANCEL, TLIST_RETRY }; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_TORRENTLISTCTRL_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/downloader/filelister/filelistctrl.cpp0000600000176000000410000001143612105760300025717 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #ifndef NO_TORRENT_SYSTEM #include "filelistctrl.h" #include #include #include "filelistdialog.h" #include "../utils/conversion.h" #include "../iconimagelist.h" #include "../uiutils.h" #include "../utils/downloader.h" template<> SortOrder FileListCtrl::BaseType::m_sortorder = SortOrder( ) ; BEGIN_EVENT_TABLE( FileListCtrl, FileListCtrl::BaseType ) EVT_LIST_ITEM_RIGHT_CLICK( FILELIST_COL_CLICK, FileListCtrl::OnListRightClick ) END_EVENT_TABLE() const int fileListDialogID = wxNewId(); FileListCtrl::FileListCtrl( FileListDialog* parent ) : FileListCtrl::BaseType( parent, fileListDialogID, wxDefaultPosition, wxDefaultSize, wxLC_VIRTUAL | wxSUNKEN_BORDER | wxLC_REPORT , _T("FileListCtrl"), 2, &FileListCtrl::CompareOneCrit, false/*no highlights*/, UserActions::ActHighlight, false /*periodic sort*/ ), m_popup(NULL), m_parent_dialog( parent ) { #if defined(__WXMAC__) const int widths [4] = { 250, 150, 50, 50 }; #else const int widths [4] = { wxLIST_AUTOSIZE, wxLIST_AUTOSIZE, wxLIST_AUTOSIZE, wxLIST_AUTOSIZE }; #endif AddColumn( 0, widths[0], _( "Name" ), _( "Name" ) ); AddColumn( 1, widths[1], _( "Size" ), _( "Size" ) ); AddColumn( 2, widths[2], _( "Type" ), _( "Type" ) ); AddColumn( 3, widths[3], _( "Depends" ), _( "has dependencies?" ) ); if ( m_sortorder.size() == 0 ) { m_sortorder[0].col = 0; m_sortorder[0].direction = -1; m_sortorder[1].col = 1; m_sortorder[1].direction = 1; } // m_popup = new wxMenu( _T("") ); // // &m enables shortcout "alt + m" and underlines m // m_popup->Append( BLIST_DLMAP, _("Download &map") ); // m_popup->Append( BLIST_DLMOD, _("Download m&od") ); } FileListCtrl::~FileListCtrl() { //delete m_popup; } void FileListCtrl::OnListRightClick( wxListEvent& /*unused*/ ) { // PopupMenu( m_popup ); } void FileListCtrl::Sort() { if ( m_data.size() > 0 ) { SaveSelection(); SlQuickSort::Sort ( m_data, m_comparator ); RestoreSelection(); } } bool FileListCtrl::AddFile( DataType info ) { return AddItem( info ); } /** @brief GetIndexFromData * * we use a static seekpos here cause a lot of sequential index gettings expected */ int FileListCtrl::GetIndexFromData(const DataType& data) const { static long seekpos; seekpos = clamp( seekpos, 0l , ( long )m_data.size() ); int index = seekpos; for ( DataCIter f_idx = m_data.begin() + seekpos; f_idx != m_data.end() ; ++f_idx ) { if ( data == *f_idx ) { seekpos = index; return seekpos; } index++; } //it's ok to init with seekpos, if it had changed this would not be reached int r_index = seekpos - 1; for ( DataRevCIter r_idx = m_data.rbegin() + ( m_data.size() - seekpos ); r_idx != m_data.rend() ; ++r_idx ) { if ( data == *r_idx ) { seekpos = r_index; return seekpos; } r_index--; } return -1; } /** @brief CompareOneCrit * * @todo: document this function */ int FileListCtrl::CompareOneCrit(DataType u1, DataType u2, int col, int dir) const { if ( ! ( u1 && u2 ) ) return 0; switch ( col ) { case 0: return dir * u2->m_name.CmpNoCase( u2->m_name ) ; case 1: return dir * compareSimple( u2->m_size_KB, u1->m_size_KB ); case 2: return dir * compareSimple( u2->m_type, u1->m_type ); case 3: return dir * compareSimple( u2->m_dependencies.Count(), u1->m_dependencies.Count() ); default: return 0; } } /** @brief GetItemAttr * * @todo: document this function */ wxListItemAttr * FileListCtrl::GetItemAttr(long ) const { //currently no highlighting return 0; } /** @brief GetItemColumnImage * * @todo: document this function */ int FileListCtrl::GetItemColumnImage(long , long ) const { //no images for any item return -1; } /** @brief GetItemText * * @todo: document this function */ wxString FileListCtrl::GetItemText(long item, long column) const { const DataType info = m_data[item]; if ( !info ) return wxEmptyString; switch ( column ) { case 0: return info->m_name; case 1: return TowxString( info->m_size_KB ); case 2: switch ( info->m_type ) { case PlasmaResourceInfo::map: return _("map"); case PlasmaResourceInfo::mod: return _("game"); default: return _("unknown"); } case 3: return TowxString( info->m_dependencies.Count() ); default: return wxEmptyString; } return wxEmptyString; } /** @brief GetSelectedHashes * * @todo: document this function */ void FileListCtrl::GetSelectedHashes(InternalNameVector& names) { long item = -1; for ( long i = 0; i < GetSelectedItemCount(); ++i ) { item = GetNextItem( item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED ); if ( item == -1 ) // means nothing was found return; names.push_back( m_data[item]->m_name ); } } #endif springlobby-0.169/src/downloader/filelister/filelistctrl.h0000600000176000000410000000446412105760300025367 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_FILELISTCTRL_H #define SPRINGLOBBY_HEADERGUARD_FILELISTCTRL_H #ifndef NO_TORRENT_SYSTEM #include class wxMenu; class wxListEvent; class wxCommandEvent; class FileListDialog; class PlasmaResourceInfo; /** \brief list currently available torrents on tracker */ class FileListCtrl : public CustomVirtListCtrl< const PlasmaResourceInfo* ,FileListCtrl> { public: FileListCtrl( FileListDialog* fld ); ~FileListCtrl(); typedef std::vector InternalNameVector; void OnListRightClick( wxListEvent& event ); // virtual void SetTipWindowText( const long item_hit, const wxPoint& position); // void OnColClick( wxListEvent& event ); void GetSelectedHashes(InternalNameVector&); bool AddFile( DataType info ); //these are overloaded to use list in virtual style wxString GetItemText(long item, long column) const; int GetItemColumnImage(long item, long column) const; wxListItemAttr * GetItemAttr(long item) const; protected: //! passed as callback to generic ItemComparator, returns -1,0,1 as per defined ordering int CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const; //! utils func for comparing user status, so the CompareOneCrit doesn't get too crowded static int CompareUserStatus( DataType u1, DataType u2 ); //! required per base clase virtual void Sort( ); int GetIndexFromData( const DataType& data ) const; protected: wxMenu* m_popup; FileListDialog* m_parent_dialog; enum { FILELIST_COL_CLICK = wxID_HIGHEST }; DECLARE_EVENT_TABLE() }; #endif #endif // SPRINGLOBBY_HEADERGUARD_BATTLELISTCTRL_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/downloader/filelister/filelistdialog.cpp0000600000176000000410000000767512105760300026224 0ustar buildbotwww-data00000000000000#ifndef NO_TORRENT_SYSTEM #include "filelistdialog.h" #include "filelistctrl.h" #include "filelistfilter.h" #include "../springunitsync.h" #include "../utils/conversion.h" #include "../utils/downloader.h" #include #include #include BEGIN_EVENT_TABLE(FileListDialog, wxDialog) EVT_BUTTON ( BUTTON_DOWNLOAD , FileListDialog::OnDownload ) EVT_BUTTON ( BUTTON_REFRESH , FileListDialog::OnRefreshList ) EVT_BUTTON ( BUTTON_SELECT_ALL , FileListDialog::OnSelectAll ) EVT_BUTTON ( BUTTON_SELECT_NONE, FileListDialog::OnSelectNone ) EVT_BUTTON ( BUTTON_SELECT_INV , FileListDialog::OnSelectInv ) END_EVENT_TABLE() FileListDialog::FileListDialog(wxWindow* parent) : wxDialog(parent, -1, _("Search and download files"), wxDefaultPosition, wxSize(800, 600), wxDEFAULT_DIALOG_STYLE | wxCLIP_CHILDREN | wxRESIZE_BORDER), m_onResourceListParsed( this, &GetGlobalEventSender( GlobalEvents::PlasmaResourceListParsed ) ) { m_filecount = new wxStaticText( this, wxID_ANY, _("Files displayed") ); m_main_sizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* m_list_sizer; m_list_sizer = new wxBoxSizer( wxVERTICAL ); m_filelistctrl = new FileListCtrl( this ); m_list_sizer->Add( m_filelistctrl, 1, wxALL|wxEXPAND, 5 ); wxBoxSizer* m_select_sizer = new wxBoxSizer( wxHORIZONTAL ); /* m_selectAll_button = new wxButton( this, BUTTON_SELECT_ALL, _T("Select all") ); m_selectNone_button = new wxButton( this, BUTTON_SELECT_NONE, _T("Select none") ); m_selectInv_button = new wxButton( this, BUTTON_SELECT_INV, _T("Invert selection") ); m_select_sizer->Add( m_selectAll_button ); m_select_sizer->Add( m_selectNone_button ); m_select_sizer->Add( m_selectInv_button ); */ wxBoxSizer* m_filter_sizer; m_filter_sizer = new wxBoxSizer( wxVERTICAL ); m_filter = new FileListFilter ( this, wxID_ANY, this ); m_filter_sizer->Add( m_filter,0, wxALL|wxEXPAND, 5 ); wxBoxSizer* m_button_sizer; m_button_sizer = new wxBoxSizer( wxHORIZONTAL ); m_download_button = new wxButton( this, BUTTON_DOWNLOAD, _("Download selected"), wxDefaultPosition, wxSize( -1,28 ), 0 ); m_button_sizer->Add( m_download_button ); //needs dummy event data UpdateList( GlobalEvents::GlobalEventData() ); m_main_sizer->Add( m_list_sizer,1, wxALL|wxEXPAND, 5 ); m_main_sizer->Add( m_select_sizer,0, wxALL|wxEXPAND, 5 ); m_main_sizer->Add( m_filter_sizer,0, wxALL|wxEXPAND, 5 ); m_main_sizer->Add( m_button_sizer,0, wxALL|wxEXPAND, 5 ); m_main_sizer->Add( m_filecount,0, wxALL|wxEXPAND, 5 ); SetSizer( m_main_sizer ); Refresh(); } FileListDialog::~FileListDialog() { } void FileListDialog::UpdateList( GlobalEvents::GlobalEventData ) { const PlasmaInterface::ResourceList& rl = plasmaInterface().GetResourceList(); for ( PlasmaInterface::ResourceList::const_iterator i = rl.begin(); i != rl.end(); ++i ){ // if ( !m_filter->DoFilterResource( *i ) ) m_filelistctrl->AddFile( &(*i) ); } m_filecount->SetLabel( wxFormat( _("%u files displayed") ) % m_filelistctrl->GetItemCount() ); m_filelistctrl->SortList(); } void FileListDialog::OnDownload( wxCommandEvent& /*unused*/ ) { //!TODO check that usync is loaded before typedef FileListCtrl::InternalNameVector InternalNameVector; InternalNameVector names; m_filelistctrl->GetSelectedHashes(names); for ( InternalNameVector::const_iterator it = names.begin(); it != names.end(); ++it) { wxString name = *it; torrent().RequestFileByName(name); } } void FileListDialog::OnRefreshList( wxCommandEvent& /*unused*/ ) { } void FileListDialog::OnSelectAll( wxCommandEvent& /*unused*/ ) { m_filelistctrl->SelectAll(); } void FileListDialog::OnSelectNone( wxCommandEvent& /*unused*/ ) { m_filelistctrl->SelectNone(); } void FileListDialog::OnSelectInv( wxCommandEvent& /*unused*/ ) { m_filelistctrl->SelectInverse(); } #endif springlobby-0.169/src/downloader/filelister/filelistdialog.h0000600000176000000410000000430412105760300025653 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_FILELISTDIALOG_H #define SPRINGLOBBY_HEADERGUARD_FILELISTDIALOG_H #ifndef NO_TORRENT_SYSTEM #include #include class wxBoxSizer; class wxButton; class FileListCtrl; class FileListFilter; class wxStaticText; class wxCommandEvent; class FileListDialog : public wxDialog { public: FileListDialog(wxWindow* parent); ~FileListDialog(); void UpdateList( GlobalEvents::GlobalEventData ); // FileListCtrl* GetListCtrl(); protected: wxBoxSizer* m_main_sizer; FileListCtrl* m_filelistctrl; FileListFilter* m_filter; wxStaticText* m_filecount; wxButton* m_download_button; wxButton* m_selectAll_button; wxButton* m_selectNone_button; wxButton* m_selectInv_button; typedef EventReceiverFunc EventReceiverFunction; EventReceiverFunction m_onResourceListParsed; void OnDownload( wxCommandEvent& event ); void OnRefreshList( wxCommandEvent& event ); void OnSelectAll( wxCommandEvent& event ); void OnSelectNone( wxCommandEvent& event ); void OnSelectInv( wxCommandEvent& event ); enum { BUTTON_DOWNLOAD = wxID_HIGHEST, BUTTON_REFRESH, BUTTON_SELECT_ALL, BUTTON_SELECT_NONE, BUTTON_SELECT_INV }; private: DECLARE_EVENT_TABLE() }; #endif #endif // SPRINGLOBBY_HEADERGUARD_FILELISTDIALOG_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/downloader/filelister/filelistfilter.cpp0000600000176000000410000001207112105760300026234 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // #ifndef NO_TORRENT_SYSTEM #ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include #include #include #include #include #include #include #include #include #include "filelistfilter.h" #include "filelistctrl.h" #include "filelistdialog.h" #include "../uiutils.h" #include "../utils/downloader.h" #include "../torrentwrapper.h" /////////////////////////////////////////////////////////////////////////// BEGIN_EVENT_TABLE( FileListFilter, wxPanel ) EVT_CHOICE( FILE_FILTER_TYPE_CHOICE, FileListFilter::OnChangeType ) EVT_TEXT( FILE_FILTER_NAME_EDIT , FileListFilter::OnChangeName ) EVT_CHECKBOX( FILE_FILTER_ONDISK , FileListFilter::OnChangeOndisk ) END_EVENT_TABLE() FileListFilter::FileListFilter( wxWindow* parent, wxWindowID id, FileListDialog* parentBattleListTab, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ), m_parent_filelistdialog( parentBattleListTab ) { wxBoxSizer* m_filter_sizer; m_filter_sizer = new wxBoxSizer( wxVERTICAL ); wxStaticBoxSizer* m_filter_body_sizer; m_filter_body_sizer = new wxStaticBoxSizer( new wxStaticBox( this, -1, wxEmptyString ), wxVERTICAL ); wxBoxSizer* m_filter_body_row1_sizer; m_filter_body_row1_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_name_text = new wxStaticText( this, wxID_ANY, _( "Filename:" ), wxDefaultPosition, wxSize( -1,-1 ), 0 ); m_filter_name_text->Wrap( -1 ); m_filter_name_text->SetMinSize( wxSize( 90,-1 ) ); m_filter_body_row1_sizer->Add( m_filter_name_text, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_filter_name_edit = new wxTextCtrl( this, FILE_FILTER_NAME_EDIT, _T( "" ), wxDefaultPosition, wxSize( -1,-1 ), 0|wxSIMPLE_BORDER ); m_filter_name_edit->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxEmptyString ) ); m_filter_name_edit->SetMinSize( wxSize( 220,-1 ) ); m_filter_name_expression = new wxRegEx( m_filter_name_edit->GetValue(),wxRE_ICASE ); m_filter_body_row1_sizer->Add( m_filter_name_edit, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); wxBoxSizer* m_filter_type_sizer; m_filter_type_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_type_text = new wxStaticText( this, wxID_ANY, _( "Filetype:" ), wxDefaultPosition, wxDefaultSize, 0 ); m_filter_type_text->Wrap( -1 ); m_filter_type_sizer->Add( m_filter_type_text, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 5 ); wxBoxSizer* m_filter_ondisk_sizer; m_filter_ondisk_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_ondisk = new wxCheckBox( this, FILE_FILTER_ONDISK, _T( "Filter files already on disk" ) ); m_filter_ondisk_sizer->Add( m_filter_ondisk, 0, wxALIGN_CENTER_VERTICAL ); wxString firstChoice = _T( "Any" ); wxArrayString m_filter_type_choiceChoices; m_filter_type_choiceChoices.Add( firstChoice ); m_filter_type_choiceChoices.Add( _( "Map" ) ); m_filter_type_choiceChoices.Add( _( "Game" ) ); m_filter_type_choice = new wxChoice( this, FILE_FILTER_TYPE_CHOICE, wxDefaultPosition, wxDefaultSize, m_filter_type_choiceChoices, wxSIMPLE_BORDER ); m_filter_type_sizer->Add( m_filter_type_choice, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row1_sizer->Add( m_filter_type_sizer, 0, wxEXPAND, 5 ); m_filter_body_row1_sizer->Add( m_filter_ondisk_sizer, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_sizer->Add( m_filter_body_row1_sizer, 1, wxEXPAND, 5 ); m_filter_sizer->Add( m_filter_body_sizer, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); this->SetSizer( m_filter_sizer ); this->Layout(); m_filter_sizer->Fit( this ); delete m_filter_name_expression; m_filter_name_expression = new wxRegEx( m_filter_name_edit->GetValue(),wxRE_ICASE ); m_filter_type_choice_value = -1; wxCommandEvent dummy; OnChange( dummy ); } bool FileListFilter::DoFilterResource( const PlasmaResourceInfo& /*info*/ ) { // if(!data.ok())return false; // if ( data->name.Upper().Find( m_filter_name_edit->GetValue().Upper() ) == wxNOT_FOUND // && !m_filter_name_expression->Matches( data->name ) ) // return false; // if ( m_filter_type_choice_value == 0 && data->type != SpringUnitSync::map ) return false; // // if ( m_filter_type_choice_value == 1 && data->type != SpringUnitSync::mod ) return false; // // if ( m_filter_ondisk->IsChecked() && data->HasFullFileLocal() ) // return false; return false; } void FileListFilter::OnChange( wxCommandEvent& ) { //needs dummy event data m_parent_filelistdialog->UpdateList( GlobalEvents::GlobalEventData() ); } void FileListFilter::OnChangeName( wxCommandEvent& event ) { delete m_filter_name_expression; m_filter_name_expression = new wxRegEx( m_filter_name_edit->GetValue(),wxRE_ICASE ); OnChange( event ); } void FileListFilter::OnChangeType( wxCommandEvent& event ) { m_filter_type_choice_value = m_filter_type_choice->GetSelection()-1; OnChange( event ); } void FileListFilter::OnChangeOndisk( wxCommandEvent& event ) { OnChange( event ); } #endif springlobby-0.169/src/downloader/filelister/filelistfilter.h0000600000176000000410000000503512105760300025703 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_FILELISTFILTER_H #define SPRINGLOBBY_HEADERGUARD_FILELISTFILTER_H #ifndef NO_TORRENT_SYSTEM #include #include "filelistdialog.h" /////////////////////////////////////////////////////////////////////////// class FileListDialog; class wxToggleButton; class wxCheckBox; class wxStaticText; class wxTextCtrl; class wxChoice; class wxButton; class wxRegEx; class wxStaticText; class Battle; class PlasmaResourceInfo; /////////////////////////////////////////////////////////////////////////////// /// Class FileListFilter /////////////////////////////////////////////////////////////////////////////// class FileListFilter : public wxPanel { public: FileListFilter( wxWindow* parent, wxWindowID id, FileListDialog* parentBattleListTab, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxEXPAND ); void OnActivate ( wxCommandEvent& event ); void SetActiv ( bool state ); void OnChange ( wxCommandEvent& event ); void OnChangeName ( wxCommandEvent& event ); void OnChangeType ( wxCommandEvent& event ); void OnChangeOndisk ( wxCommandEvent& event ); //! return false if info is to be displayed, false otherwise bool DoFilterResource( const PlasmaResourceInfo& ); bool GetActiv() const; protected: FileListDialog* m_parent_filelistdialog; wxStaticText* m_filter_text; //filename wxStaticText* m_filter_name_text; wxTextCtrl* m_filter_name_edit; wxRegEx* m_filter_name_expression; //filetype wxStaticText* m_filter_type_text; wxChoice* m_filter_type_choice; int m_filter_type_choice_value; wxCheckBox* m_filter_ondisk; DECLARE_EVENT_TABLE() }; enum { FILE_FILTER_NAME_EDIT, FILE_FILTER_TYPE_CHOICE, FILE_FILTER_ONDISK }; #endif #endif //SPRINGLOBBY_HEADERGUARD_BATTLELISTFILTER_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/downloader/httpdownloader.cpp0000600000176000000410000001050712105760300024111 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: HttpDownloader // #include #include #include #include #include #include #include #include #include #include #include "utils/conversion.h" #include "utils/debug.h" template HttpDownloaderThread::HttpDownloaderThread( const wxString& FileUrl, const wxString& DestPath, ParentClass& parent, int code, const bool notify, const bool unzip, const wxString& noticeErr, const wxString& noticeOk ) : m_destroy( false ), m_destpath( DestPath ), m_fileurl( FileUrl ), m_do_unzip( unzip ), m_notifyOnDownloadEvent( notify ), m_noticeErr( noticeErr ), m_noticeOk( noticeOk ), m_id_code( code ), m_parent( parent ) { Init(); } template HttpDownloaderThread::~HttpDownloaderThread() { } template void HttpDownloaderThread::Init() { Create(); Run(); } template void* HttpDownloaderThread::Entry() { wxHTTP FileDownloading; // normal timeout is 10 minutes.. set to 10 secs. FileDownloading.SetTimeout( 60 ); FileDownloading.Connect( m_fileurl.BeforeFirst( _T( '/' ) ), 80 ); wxInputStream* m_httpstream = FileDownloading.GetInputStream( _T( "/" ) + m_fileurl.AfterFirst( _T( '/' ) ) ); if ( m_httpstream ) { try { wxFileOutputStream outs( m_destpath ); m_httpstream->Read( outs ); outs.Close(); delete m_httpstream; m_httpstream = 0; //download success if ( m_notifyOnDownloadEvent ) { wxCommandEvent notice( httpDownloadEvtComplete, m_id_code ); notice.SetString( m_fileurl + _( "\nsuccessfully saved to:\n" ) + m_destpath ); if ( m_do_unzip ) { bool unzipOk = Unzip(); if ( m_noticeOk == wxEmptyString ) { if ( unzipOk ) notice.SetString( m_fileurl + _( "\nsuccessfully unzipped in:\n" ) + m_destpath ); else notice.SetString( notice.GetString() + _( "\n unzipping failed, please correct manually" ) ); } } if ( m_noticeOk != wxEmptyString ) notice.SetString( m_noticeOk ); notice.SetInt( FileDownloading.GetError() ); wxLogMessage( notice.GetString() ); wxPostEvent( &m_parent, notice ); } return NULL; } catch ( ... ) { wxLogMessage( _T( "exception on download of" ) + m_fileurl ); } } //download failed if ( m_notifyOnDownloadEvent ) { wxCommandEvent notice( httpDownloadEvtFailed, m_id_code ); if ( m_noticeErr == wxEmptyString ) notice.SetString( _( "Could not save\n" ) + m_fileurl + _( "\nto:\n" ) + m_destpath ); else notice.SetString( m_noticeErr ); notice.SetString( notice.GetString() + _( "\nError number: " ) + TowxString( FileDownloading.GetError() ) ); notice.SetInt( FileDownloading.GetError() ); wxLogError( notice.GetString() ); wxPostEvent( &m_parent, notice ); } return NULL; } template bool HttpDownloaderThread::Unzip() { try { std::auto_ptr entry; wxString base = wxPathOnly( m_destpath ) + wxFileName::GetPathSeparator(); wxFFileInputStream in( m_destpath ); wxZipInputStream zip( in ); while ( entry.reset( zip.GetNextEntry() ), entry.get() != NULL ) { // access meta-data wxString name = entry->GetInternalName(); // name.Replace( wxT("/") , wxT("\\") ); // read 'zip' to access the entry's data using namespace std; wxString file = base + name; wxString path = wxPathOnly( file ); if ( ( entry->IsDir() ) ) { if ( !wxDirExists( file ) ) wxFileName::Mkdir( file, 0775, wxPATH_MKDIR_FULL ); wxLogWarning( path ); } else { wxLogMessage( _T("unzipping: ")+ file ); wxFFileOutputStream out( file ); if( !out.IsOk() ) wxLogError( _T("unzipping failed on: ")+ file ); else { out.Write( zip ); out.Close(); } } } } catch ( std::exception& e ) { wxLogError( TowxString( e.what() ) ); return false; } return true; } template bool HttpDownloaderThread::TestDestroy() { return m_destroy; } template void HttpDownloaderThread::CloseThread() { m_destroy = true; } springlobby-0.169/src/downloader/httpdownloader.h0000600000176000000410000000321412105760300023553 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_HTTPDOWNLOADER #define SPRINGLOBBY_HEADERGUARD_HTTPDOWNLOADER #include "thread.h" #include const wxEventType httpDownloadEvtComplete = wxNewEventType(); const wxEventType httpDownloadEvtFailed = wxNewEventType(); template < class ParentClass > class HttpDownloaderThread : public Thread { public: HttpDownloaderThread( const wxString& FileUrl, const wxString& DestPath, ParentClass& parent, int code = 0, const bool notify = true, const bool unzip = true, const wxString& noticeErr = wxEmptyString, const wxString& noticeOk = wxEmptyString ); ~HttpDownloaderThread(); void Init(); void* Entry(); void CloseThread(); bool TestDestroy(); private: bool m_destroy; wxString m_destpath; wxString m_fileurl; bool Unzip(); bool m_do_unzip; bool m_notifyOnDownloadEvent; wxString m_noticeErr; wxString m_noticeOk; int m_id_code; ParentClass& m_parent; }; #include "httpdownloader.cpp" #endif // SPRINGLOBBY_HEADERGUARD_HTTPDOWNLOADER /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/downloader/prdownloader.cpp0000600000176000000410000000770612105760300023562 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include "prdownloader.h" #include "../globalsmanager.h" #include "lib/src/Downloader/IDownloader.h" #include "lib/src/FileSystem/FileSystem.h" #include "../springunitsync.h" #include "../utils/uievents.h" #include "../utils/conversion.h" #include "../ui.h" #include "../mainwindow.h" #include class DownloadItem : public LSL::WorkItem { public: DownloadItem( std::list item, IDownloader* loader) : m_item(item) , m_loader(loader) {} void Run() { if (!m_item.empty()) { UiEvents::ScopedStatusMessage msg("Downloading: " + m_item.front()->name, 0); //we create this in avance cause m_item gets freed wxString d(_("Download complete: ")); d += TowxString(m_item.front()->name); m_loader->download( m_item ); m_loader->freeResult( m_item ); usync().AddReloadEvent(); ui().mw().AddMessageEvent(d); } } private: std::list m_item; IDownloader* m_loader; }; SearchItem::SearchItem(std::list loaders, const std::string& name, IDownload::category cat) : m_loaders(loaders) , m_name(name) , m_cat(cat) , m_result_size(0) {} void SearchItem::Run() { std::list results; std::list::const_iterator it = m_loaders.begin(); for( ; it != m_loaders.end(); ++it ) { (*it)->search(results, m_name, m_cat); if (!results.empty()) { DownloadItem* dl_item = new DownloadItem(results, *it); prDownloader().m_dl_thread->DoWork(dl_item); m_result_size = results.size(); return; } } return; } PrDownloader::PrDownloader() : m_dl_thread(new LSL::WorkerThread()) { IDownloader::Initialize(); UpdateSettings(); m_game_loaders.push_back(rapidDownload); m_game_loaders.push_back(httpDownload); m_game_loaders.push_back(plasmaDownload); m_map_loaders.push_back(httpDownload); m_map_loaders.push_back(plasmaDownload); } PrDownloader::~PrDownloader() { if ( m_dl_thread ) m_dl_thread->Wait(); delete m_dl_thread; IDownloader::Shutdown(); } void PrDownloader::ClearFinished() { } void PrDownloader::UpdateSettings() { if (usync().IsLoaded()) { wxString path; if (usync().GetSpringDataPath(path)) { const std::string spath = std::string(path.mb_str()); fileSystem->setWritePath(spath); } } } void PrDownloader::RemoveTorrentByName(const std::string &/*name*/) { } int PrDownloader::GetWidget(const std::string &/*name*/) { return 0;//Get(m_map_loaders, name, IDownload::CAT_LUAWIDGETS); } int PrDownloader::GetMap(const std::string &name) { return Get(m_map_loaders, name, IDownload::CAT_MAPS); } int PrDownloader::GetGame(const std::string &name) { return Get(m_game_loaders, name, IDownload::CAT_GAMES); } void PrDownloader::SetIngameStatus(bool /*ingame*/) { } int PrDownloader::Get(std::list loaders, const std::string &name, IDownload::category cat) { SearchItem* searchItem = new SearchItem(loaders, name, cat); m_dl_thread->DoWork(searchItem); return 1; } PrDownloader& prDownloader() { static LineInfo m( AT ); static GlobalObjectHolder > s_PrDownloader( m ); return s_PrDownloader; } springlobby-0.169/src/downloader/prdownloader.h0000600000176000000410000000523012105760300023215 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #ifndef SPRINGLOBBY_HEADERGUARD_PRDOWNLOADER_H #define SPRINGLOBBY_HEADERGUARD_PRDOWNLOADER_H #include #include #include #include #include "lib/src/Downloader/Download.h" class IDownloader; namespace LSL { class WorkerThread; } namespace P2P { enum FileStatus { not_stored = 0, /// file is not on disk and not downloading queued = 1, /// file is not on disk and queued for download leeching = 2, /// file is being downloaded paused = 3, /// file currently not downloading but has valid handle complete = 4 /// file is on disk / dl completed }; } struct DownloadInfo{ P2P::FileStatus downloadstatus; std::string name; int numcopies;//TODO remove double progress; double inspeed; double eta; double filesize; }; class SearchItem : public LSL::WorkItem { public: SearchItem(std::list loaders, const std::string& name, IDownload::category cat); void Run(); private: const std::list m_loaders; const std::string m_name; const IDownload::category m_cat; int m_result_size; }; class PrDownloader { public: PrDownloader(); ~PrDownloader(); void ClearFinished(); void UpdateSettings(); void RemoveTorrentByName( const std::string& name ); //! returns true if name found and added to dl list int GetGame( const std::string& name ); //! returns true if name found and added to dl list int GetMap( const std::string& name ); //! returns true if name found and added to dl list int GetWidget( const std::string& name ); void SetIngameStatus( bool ingame ); private: //! searches given loaders for filename and pushes fitting workitems into dl_thread int Get(std::list loaders, const std::string& name, IDownload::category cat ); std::list m_game_loaders; std::list m_map_loaders; LSL::WorkerThread* m_dl_thread; friend class SearchItem; }; PrDownloader& prDownloader(); #endif // PRDOWNLOADER_H springlobby-0.169/src/flagimagedata.h0000600000176000000410000002665012105760300021136 0ustar buildbotwww-data00000000000000// this header file is automatically generated with a script #include "images/flags/AD.xpm" #include "images/flags/AE.xpm" #include "images/flags/AF.xpm" #include "images/flags/AG.xpm" #include "images/flags/AI.xpm" #include "images/flags/AL.xpm" #include "images/flags/AM.xpm" #include "images/flags/AN.xpm" #include "images/flags/AO.xpm" #include "images/flags/AR.xpm" #include "images/flags/AS.xpm" #include "images/flags/AT.xpm" #include "images/flags/AU.xpm" #include "images/flags/AW.xpm" #include "images/flags/AX.xpm" #include "images/flags/AZ.xpm" #include "images/flags/BA.xpm" #include "images/flags/BB.xpm" #include "images/flags/BD.xpm" #include "images/flags/BE.xpm" #include "images/flags/BF.xpm" #include "images/flags/BG.xpm" #include "images/flags/BH.xpm" #include "images/flags/BI.xpm" #include "images/flags/BJ.xpm" #include "images/flags/BM.xpm" #include "images/flags/BN.xpm" #include "images/flags/BO.xpm" #include "images/flags/BR.xpm" #include "images/flags/BS.xpm" #include "images/flags/BT.xpm" #include "images/flags/BV.xpm" #include "images/flags/BW.xpm" #include "images/flags/BY.xpm" #include "images/flags/BZ.xpm" #include "images/flags/CA.xpm" #include "images/flags/CC.xpm" #include "images/flags/CD.xpm" #include "images/flags/CF.xpm" #include "images/flags/CG.xpm" #include "images/flags/CH.xpm" #include "images/flags/CI.xpm" #include "images/flags/CK.xpm" #include "images/flags/CL.xpm" #include "images/flags/CM.xpm" #include "images/flags/CN.xpm" #include "images/flags/CO.xpm" #include "images/flags/CR.xpm" #include "images/flags/CS.xpm" #include "images/flags/CU.xpm" #include "images/flags/CV.xpm" #include "images/flags/CX.xpm" #include "images/flags/CY.xpm" #include "images/flags/CZ.xpm" #include "images/flags/DE.xpm" #include "images/flags/DJ.xpm" #include "images/flags/DK.xpm" #include "images/flags/DM.xpm" #include "images/flags/DO.xpm" #include "images/flags/DZ.xpm" #include "images/flags/EC.xpm" #include "images/flags/EE.xpm" #include "images/flags/EG.xpm" #include "images/flags/EH.xpm" #include "images/flags/ER.xpm" #include "images/flags/ES.xpm" #include "images/flags/ET.xpm" #include "images/flags/FAM.xpm" #include "images/flags/FI.xpm" #include "images/flags/FJ.xpm" #include "images/flags/FK.xpm" #include "images/flags/FM.xpm" #include "images/flags/FO.xpm" #include "images/flags/FR.xpm" #include "images/flags/GA.xpm" #include "images/flags/GB.xpm" #include "images/flags/GD.xpm" #include "images/flags/GE.xpm" #include "images/flags/GF.xpm" #include "images/flags/GH.xpm" #include "images/flags/GI.xpm" #include "images/flags/GL.xpm" #include "images/flags/GM.xpm" #include "images/flags/GN.xpm" #include "images/flags/GP.xpm" #include "images/flags/GQ.xpm" #include "images/flags/GR.xpm" #include "images/flags/GS.xpm" #include "images/flags/GT.xpm" #include "images/flags/GU.xpm" #include "images/flags/GW.xpm" #include "images/flags/GY.xpm" #include "images/flags/HK.xpm" #include "images/flags/HM.xpm" #include "images/flags/HN.xpm" #include "images/flags/HR.xpm" #include "images/flags/HT.xpm" #include "images/flags/HU.xpm" #include "images/flags/ID.xpm" #include "images/flags/IE.xpm" #include "images/flags/IL.xpm" #include "images/flags/IN.xpm" #include "images/flags/IO.xpm" #include "images/flags/IQ.xpm" #include "images/flags/IR.xpm" #include "images/flags/IS.xpm" #include "images/flags/IT.xpm" #include "images/flags/JM.xpm" #include "images/flags/JO.xpm" #include "images/flags/JP.xpm" #include "images/flags/KE.xpm" #include "images/flags/KG.xpm" #include "images/flags/KH.xpm" #include "images/flags/KI.xpm" #include "images/flags/KM.xpm" #include "images/flags/KN.xpm" #include "images/flags/KP.xpm" #include "images/flags/KR.xpm" #include "images/flags/KW.xpm" #include "images/flags/KY.xpm" #include "images/flags/KZ.xpm" #include "images/flags/LA.xpm" #include "images/flags/LB.xpm" #include "images/flags/LC.xpm" #include "images/flags/LI.xpm" #include "images/flags/LK.xpm" #include "images/flags/LR.xpm" #include "images/flags/LS.xpm" #include "images/flags/LT.xpm" #include "images/flags/LU.xpm" #include "images/flags/LV.xpm" #include "images/flags/LY.xpm" #include "images/flags/MA.xpm" #include "images/flags/MC.xpm" #include "images/flags/MD.xpm" #include "images/flags/ME.xpm" #include "images/flags/MG.xpm" #include "images/flags/MH.xpm" #include "images/flags/MK.xpm" #include "images/flags/ML.xpm" #include "images/flags/MM.xpm" #include "images/flags/MN.xpm" #include "images/flags/MO.xpm" #include "images/flags/MP.xpm" #include "images/flags/MQ.xpm" #include "images/flags/MR.xpm" #include "images/flags/MS.xpm" #include "images/flags/MT.xpm" #include "images/flags/MU.xpm" #include "images/flags/MV.xpm" #include "images/flags/MW.xpm" #include "images/flags/MX.xpm" #include "images/flags/MY.xpm" #include "images/flags/MZ.xpm" #include "images/flags/NA.xpm" #include "images/flags/NC.xpm" #include "images/flags/NE.xpm" #include "images/flags/NF.xpm" #include "images/flags/NG.xpm" #include "images/flags/NI.xpm" #include "images/flags/NL.xpm" #include "images/flags/NO.xpm" #include "images/flags/NP.xpm" #include "images/flags/NR.xpm" #include "images/flags/NU.xpm" #include "images/flags/NZ.xpm" #include "images/flags/OM.xpm" #include "images/flags/PA.xpm" #include "images/flags/PE.xpm" #include "images/flags/PF.xpm" #include "images/flags/PG.xpm" #include "images/flags/PH.xpm" #include "images/flags/PK.xpm" #include "images/flags/PL.xpm" #include "images/flags/PM.xpm" #include "images/flags/PN.xpm" #include "images/flags/PR.xpm" #include "images/flags/PS.xpm" #include "images/flags/PT.xpm" #include "images/flags/PW.xpm" #include "images/flags/PY.xpm" #include "images/flags/QA.xpm" #include "images/flags/RE.xpm" #include "images/flags/RO.xpm" #include "images/flags/RS.xpm" #include "images/flags/RU.xpm" #include "images/flags/RW.xpm" #include "images/flags/SA.xpm" #include "images/flags/SB.xpm" #include "images/flags/SC.xpm" #include "images/flags/SD.xpm" #include "images/flags/SE.xpm" #include "images/flags/SG.xpm" #include "images/flags/SH.xpm" #include "images/flags/SI.xpm" #include "images/flags/SJ.xpm" #include "images/flags/SK.xpm" #include "images/flags/SL.xpm" #include "images/flags/SM.xpm" #include "images/flags/SN.xpm" #include "images/flags/SO.xpm" #include "images/flags/SR.xpm" #include "images/flags/ST.xpm" #include "images/flags/SV.xpm" #include "images/flags/SY.xpm" #include "images/flags/SZ.xpm" #include "images/flags/TC.xpm" #include "images/flags/TD.xpm" #include "images/flags/TF.xpm" #include "images/flags/TG.xpm" #include "images/flags/TH.xpm" #include "images/flags/TJ.xpm" #include "images/flags/TK.xpm" #include "images/flags/TL.xpm" #include "images/flags/TM.xpm" #include "images/flags/TN.xpm" #include "images/flags/TO.xpm" #include "images/flags/TR.xpm" #include "images/flags/TT.xpm" #include "images/flags/TV.xpm" #include "images/flags/TW.xpm" #include "images/flags/TZ.xpm" #include "images/flags/UA.xpm" #include "images/flags/UG.xpm" #include "images/flags/UM.xpm" #include "images/flags/US.xpm" #include "images/flags/UY.xpm" #include "images/flags/UZ.xpm" #include "images/flags/VA.xpm" #include "images/flags/VC.xpm" #include "images/flags/VE.xpm" #include "images/flags/VG.xpm" #include "images/flags/VI.xpm" #include "images/flags/VN.xpm" #include "images/flags/VU.xpm" #include "images/flags/WF.xpm" #include "images/flags/WS.xpm" #include "images/flags/YE.xpm" #include "images/flags/YT.xpm" #include "images/flags/ZA.xpm" #include "images/flags/ZM.xpm" #include "images/flags/ZW.xpm" const char* flag_str[] = { "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AR", "AS", "AT", "AU", "AW", "AX", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH", "BI", "BJ", "BM", "BN", "BO", "BR", "BS", "BT", "BV", "BW", "BY", "BZ", "CA", "CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CS", "CU", "CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG", "EH", "ER", "ES", "ET", "FAM", "FI", "FJ", "FK", "FM", "FO", "FR", "GA", "GB", "GD", "GE", "GF", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT", "GU", "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IN", "IO", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM", "KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS", "LT", "LU", "LV", "LY", "MA", "MC", "MD", "ME", "MG", "MH", "MK", "ML", "MM", "MN", "MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA", "NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA", "PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", "PW", "PY", "QA", "RE", "RO", "RS", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI", "SJ", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD", "TF", "TG", "TH", "TJ", "TK", "TL", "TM", "TN", "TO", "TR", "TT", "TV", "TW", "TZ", "UA", "UG", "UM", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN", "VU", "WF", "WS", "YE", "YT", "ZA", "ZM", "ZW", 0 }; const char* const* flag_xpm[] = { AD_xpm, AE_xpm, AF_xpm, AG_xpm, AI_xpm, AL_xpm, AM_xpm, AN_xpm, AO_xpm, AR_xpm, AS_xpm, AT_xpm, AU_xpm, AW_xpm, AX_xpm, AZ_xpm, BA_xpm, BB_xpm, BD_xpm, BE_xpm, BF_xpm, BG_xpm, BH_xpm, BI_xpm, BJ_xpm, BM_xpm, BN_xpm, BO_xpm, BR_xpm, BS_xpm, BT_xpm, BV_xpm, BW_xpm, BY_xpm, BZ_xpm, CA_xpm, CC_xpm, CD_xpm, CF_xpm, CG_xpm, CH_xpm, CI_xpm, CK_xpm, CL_xpm, CM_xpm, CN_xpm, CO_xpm, CR_xpm, CS_xpm, CU_xpm, CV_xpm, CX_xpm, CY_xpm, CZ_xpm, DE_xpm, DJ_xpm, DK_xpm, DM_xpm, DO_xpm, DZ_xpm, EC_xpm, EE_xpm, EG_xpm, EH_xpm, ER_xpm, ES_xpm, ET_xpm, FAM_xpm, FI_xpm, FJ_xpm, FK_xpm, FM_xpm, FO_xpm, FR_xpm, GA_xpm, GB_xpm, GD_xpm, GE_xpm, GF_xpm, GH_xpm, GI_xpm, GL_xpm, GM_xpm, GN_xpm, GP_xpm, GQ_xpm, GR_xpm, GS_xpm, GT_xpm, GU_xpm, GW_xpm, GY_xpm, HK_xpm, HM_xpm, HN_xpm, HR_xpm, HT_xpm, HU_xpm, ID_xpm, IE_xpm, IL_xpm, IN_xpm, IO_xpm, IQ_xpm, IR_xpm, IS_xpm, IT_xpm, JM_xpm, JO_xpm, JP_xpm, KE_xpm, KG_xpm, KH_xpm, KI_xpm, KM_xpm, KN_xpm, KP_xpm, KR_xpm, KW_xpm, KY_xpm, KZ_xpm, LA_xpm, LB_xpm, LC_xpm, LI_xpm, LK_xpm, LR_xpm, LS_xpm, LT_xpm, LU_xpm, LV_xpm, LY_xpm, MA_xpm, MC_xpm, MD_xpm, ME_xpm, MG_xpm, MH_xpm, MK_xpm, ML_xpm, MM_xpm, MN_xpm, MO_xpm, MP_xpm, MQ_xpm, MR_xpm, MS_xpm, MT_xpm, MU_xpm, MV_xpm, MW_xpm, MX_xpm, MY_xpm, MZ_xpm, NA_xpm, NC_xpm, NE_xpm, NF_xpm, NG_xpm, NI_xpm, NL_xpm, NO_xpm, NP_xpm, NR_xpm, NU_xpm, NZ_xpm, OM_xpm, PA_xpm, PE_xpm, PF_xpm, PG_xpm, PH_xpm, PK_xpm, PL_xpm, PM_xpm, PN_xpm, PR_xpm, PS_xpm, PT_xpm, PW_xpm, PY_xpm, QA_xpm, RE_xpm, RO_xpm, RS_xpm, RU_xpm, RW_xpm, SA_xpm, SB_xpm, SC_xpm, SD_xpm, SE_xpm, SG_xpm, SH_xpm, SI_xpm, SJ_xpm, SK_xpm, SL_xpm, SM_xpm, SN_xpm, SO_xpm, SR_xpm, ST_xpm, SV_xpm, SY_xpm, SZ_xpm, TC_xpm, TD_xpm, TF_xpm, TG_xpm, TH_xpm, TJ_xpm, TK_xpm, TL_xpm, TM_xpm, TN_xpm, TO_xpm, TR_xpm, TT_xpm, TV_xpm, TW_xpm, TZ_xpm, UA_xpm, UG_xpm, UM_xpm, US_xpm, UY_xpm, UZ_xpm, VA_xpm, VC_xpm, VE_xpm, VG_xpm, VI_xpm, VN_xpm, VU_xpm, WF_xpm, WS_xpm, YE_xpm, YT_xpm, ZA_xpm, ZM_xpm, ZW_xpm, 0 }; /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/flagimages.cpp0000600000176000000410000000162012105760300021010 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include "flagimages.h" #include "flagimagedata.h" #include #include #include #include #include "utils/conversion.h" typedef std::map NameToPosMap; static NameToPosMap m_name_to_pos; int GetFlagIndex( const wxString& flag ) { if ( flag.IsEmpty() ) return FLAG_NONE; NameToPosMap::const_iterator itor = m_name_to_pos.find( flag ); if ( itor != m_name_to_pos.end() ) return itor->second; wxLogMessage( _T( "%s flag not found!" ), flag.c_str() ); return FLAG_NONE; } int AddFlagImages( wxImageList& imgs ) { int index, poszero; index = poszero = 0; for ( int i = 0; flag_xpm[i]; ++i ) { index = imgs.Add( wxBitmap( const_cast( flag_xpm[i] ) ) ); if ( i == 0 ) poszero = index; m_name_to_pos[TowxString( flag_str[i] )] = i; } return poszero; } springlobby-0.169/src/flagimages.h0000600000176000000410000000166112105760300020462 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_FLAGIMAGES_H #define SPRINGLOBBY_HEADERGUARD_FLAGIMAGES_H class wxImageList; class wxString; int GetFlagIndex( const wxString& flag ); int AddFlagImages( wxImageList& imgs ); enum { FLAG_NONE = -1 }; #endif // SPRINGLOBBY_HEADERGUARD_FLAGIMAGES_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/globalsmanager.cpp0000600000176000000410000000373312105760300021676 0ustar buildbotwww-data00000000000000#include "globalsmanager.h" #include #include #include #include "utils/conversion.h" #include "utils/debug.h" class GlobalsManager { std::vector globals; bool de_initialized; public: GlobalsManager(); bool RegisterGlobal(IGlobalObjectHolder *obj); void DestroyAll(); virtual ~GlobalsManager(); protected: private: }; GlobalsManager *mgr=NULL; bool destroyed=false; GlobalsManager *globals() { if ( destroyed ) return NULL; if ( !mgr ) { mgr = new GlobalsManager; } return mgr; } void DestroyGlobals() { if ( mgr ) { mgr->DestroyAll(); delete mgr; } destroyed = true; } bool IGlobalObjectHolder::RegisterSelf() { if ( !globals() ) return false; return globals()->RegisterGlobal( this ); } GlobalsManager::GlobalsManager(): de_initialized( false ) { wxLogMessage( _T("GlobalsManager::GlobalsManager()") ); //ctor } bool GlobalsManager::RegisterGlobal( IGlobalObjectHolder *obj ) { wxLogDebugFunc( _T("") ); if ( de_initialized ) { return false; } globals.push_back( obj ); return true; } void GlobalsManager::DestroyAll() { wxLogMessage( _T("GlobalsManager::DestroyAll()") ); for ( std::vector::iterator i = globals.begin(); i != globals.end(); ++i ) { (*i)->Nullify(); } for ( std::vector::iterator i = globals.begin(); i != globals.end(); ++i ) { try { (*i)->Destroy(); } catch ( std::runtime_error e ) { wxLogMessage( _T("GlobalsManager::DestroyAll(), runtume_error '%s' when destroying"), TowxString( e.what() ).c_str() ); } } globals.clear(); de_initialized = true; // wxLogMessage( _T("GlobalsManager::DestroyAll() done") );//this segfaults for me on clos esometimes... } GlobalsManager::~GlobalsManager() { assert(globals.empty()); } springlobby-0.169/src/globalsmanager.h0000600000176000000410000000570312105760300021342 0ustar buildbotwww-data00000000000000#ifndef GLOBALSMANAGER_H #define GLOBALSMANAGER_H #include #include #include #include "utils/conversion.h" #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) #define AT __FILE__ ":" TOSTRING(__LINE__) template < class T > struct LineInfo { LineInfo(const char* at ) : m(TowxString( at )) {} wxString m; }; class GlobalDestroyedError: public std::runtime_error { public: GlobalDestroyedError(): std::runtime_error( "trying to access global during or after DestroyAll" ) { } }; class GlobalRecursiveError: public std::runtime_error { public: GlobalRecursiveError(): std::runtime_error( "trying to access global during its construction" ) { } }; class IGlobalObjectHolder { public: virtual ~IGlobalObjectHolder(){} bool RegisterSelf(); virtual void Nullify() = 0; virtual void Destroy() = 0; }; void DestroyGlobals(); template class GlobalObjectHolder: public IGlobalObjectHolder { T *private_ptr; T *public_ptr; bool constructing; static int count; public: #if wxUSE_LOG_DEBUG GlobalObjectHolder(I i): #else GlobalObjectHolder(I ): #endif private_ptr( NULL ), public_ptr( NULL ), constructing( true ) { GlobalObjectHolder::count += 1; assert( (GlobalObjectHolder::count) == 1 ); #if wxUSE_LOG_DEBUG wxLogDebug( _T("GOBAL_LINE: ") + i.m ) ; #endif if ( RegisterSelf() ) { private_ptr = new T; public_ptr = private_ptr; } constructing = false; } virtual void Nullify() { public_ptr = NULL; } virtual void Destroy() { public_ptr = NULL; delete private_ptr; private_ptr = NULL; } T &GetInstance() { if ( constructing ) throw GlobalRecursiveError(); if ( !public_ptr ) throw GlobalDestroyedError(); return *public_ptr; } operator T&() { return GetInstance(); } const T &GetInstance() const { if ( constructing ) throw GlobalRecursiveError(); if ( !public_ptr ) throw GlobalDestroyedError(); return *public_ptr; } operator const T&() const { return GetInstance(); } }; template int GlobalObjectHolder::count = 0; #endif // GLOBALSMANAGER_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/gui/CMakeLists.txt0000600000176000000410000000030712105760300021532 0ustar buildbotwww-data00000000000000add_sources(springlobbySrc toasternotification.cpp wxbackgroundimage.cpp statusbar.cpp pastedialog.cpp notificationmanager.cpp ) add_sources(SLSharedWithSettings spinctl/generic/spinctlg.cpp) springlobby-0.169/src/gui/globalauimanager.h0000600000176000000410000000156612105760300022445 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_GLOBALAUIMANAGER_H #define SPRINGLOBBY_HEADERGUARD_GLOBALAUIMANAGER_H #include static wxAuiManager* m_global_aui_mngr = 0; #endif // SPRINGLOBBY_HEADERGUARD_GLOBALAUIMANAGER_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/gui/inotification.h0000600000176000000410000000174512105760300022011 0ustar buildbotwww-data00000000000000#ifndef INOTIFICATION_H #define INOTIFICATION_H #include #include "../utils/uievents.h" class wxWindow; class ScreenPosition; class wxBitmap; class INotification { public: INotification(){} virtual ~INotification(){} virtual void Show(const wxBitmap& icon, const size_t pos, const UiEvents::NotficationData& data ) = 0; }; #endif // INOTIFICATION_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/gui/libnotify.h0000600000176000000410000000360012105760300021141 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_LIBNOTIFY_H #define SPRINGLOBBY_LIBNOTIFY_H #ifdef HAVE_LIBNOTIFY #include "inotification.h" class LibnotifyNotification : public INotification { public: LibnotifyNotification(wxWindow* parent); virtual ~LibnotifyNotification(); virtual void Show(const wxBitmap& icon, const size_t pos, const UiEvents::NotficationData& data ); }; #include LibnotifyNotification::LibnotifyNotification(wxWindow* ){} LibnotifyNotification::~LibnotifyNotification(){} void LibnotifyNotification::Show(const wxBitmap& icon, const size_t /*pos*/, const UiEvents::NotficationData& data ) { NotifyNotification *n; notify_init("Test"); #if !defined(NOTIFY_VERSION_MINOR) || (NOTIFY_VERSION_MAJOR == 0 && NOTIFY_VERSION_MINOR < 7) n = notify_notification_new ( GetAppName().mb_str(),data.second.mb_str(), NULL, NULL ); #else n = notify_notification_new ( GetAppName().mb_str(),data.second.mb_str(), NULL ); #endif notify_notification_set_timeout (n, sett().GetNotificationPopupDisplayTime()*1000); notify_notification_set_icon_from_pixbuf(n,icon.GetPixbuf() ); if (!notify_notification_show (n, NULL)) { // g_error("Failed to send notification.\n"); } g_object_unref(G_OBJECT(n)); } #endif // HAVE_LIBNOTIFY #endif // SPRINGLOBBY_LIBNOTIFY_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/gui/notificationmanager.cpp0000600000176000000410000000557112105760300023527 0ustar buildbotwww-data00000000000000#include "notificationmanager.h" #include "../globalsmanager.h" #include "../uiutils.h" #include "../ui.h" #include "../settings.h" #include "../spring.h" #include "../mainwindow.h" #include "../utils/platform.h" #include "../images/springlobby_64.png.h" #include "inotification.h" #include "sound/alsound.h" #ifdef HAVE_LIBNOTIFY #include "libnotify.h" typedef LibnotifyNotification NotificationWrapperType; //#elif defined(__WXMSW__) //this is currently completely screwed // #include "snarlnotification.h" // typedef SnarlNotification NotificationWrapperType; #else #include "toasternotification.h" typedef ToasterNotification NotificationWrapperType; #endif const int this_timer_id = wxNewId(); BEGIN_EVENT_TABLE(NotificationManager, wxEvtHandler) EVT_TIMER(this_timer_id, NotificationManager::OnTimer) END_EVENT_TABLE() NotificationManager& notificationManager() { static LineInfo m( AT ); static GlobalObjectHolder > m_manager( m ); return m_manager; } NotificationManager::NotificationManager() : m_notification_wrapper( new NotificationWrapperType( &ui().mw() ) ), m_rate_limit_timer( this, this_timer_id ), m_rate_limit_ms( 2000 ), m_showNotificationSink( this, &UiEvents::GetNotificationEventSender( ) ) { } NotificationManager::~NotificationManager() { m_rate_limit_timer.Stop(); // delete m_notification_wrapper;//this segfaults on app exit.. please do tell me why m_notification_wrapper = 0; } void NotificationManager::OnShowNotification( UiEvents::NotficationData data ) { if ( m_rate_limit_timer.IsRunning() ) { m_eventDataBuffer.push_back( data ); return; } ShowNotification( data ); m_rate_limit_timer.Start( m_rate_limit_ms, wxTIMER_ONE_SHOT ); } void NotificationManager::ShowNotification( const UiEvents::NotficationData& data ) { if ( sett().GetUseNotificationPopups() ) { const bool spring_running = spring().IsRunning(); const bool disable_if_ingame = sett().Get( _T("/GUI/NotificationPopupDisableIngame"), true ); if ( m_notification_wrapper && ! ( disable_if_ingame && spring_running ) ) { //! \todo use image from customizations wxBitmap nmp ( charArr2wxBitmap( springlobby_64_png, sizeof(springlobby_64_png) ) ); m_notification_wrapper->Show( nmp, sett().GetNotificationPopupPosition(), data ); } } #ifndef DISABLE_SOUND if ( sett().GetChatPMSoundNotificationEnabled() ) sound().pm(); #endif } void NotificationManager::OnTimer( wxTimerEvent& /*event*/ ) { UiEvents::NotficationData data; if ( !m_eventDataBuffer.empty() ) { if ( m_eventDataBuffer.size() == 1 ) data = m_eventDataBuffer.front(); else data.second = wxFormat( _("%d more events") ) % m_eventDataBuffer.size(); m_eventDataBuffer.clear(); ShowNotification( data ); } } void NotificationManager::OnQuit( GlobalEvents::GlobalEventData /*data*/ ) { delete m_notification_wrapper; } springlobby-0.169/src/gui/notificationmanager.h0000600000176000000410000000354712105760300023175 0ustar buildbotwww-data00000000000000#ifndef NOTIFICATIONMANAGER_H #define NOTIFICATIONMANAGER_H #include "../utils/uievents.h" #include "../utils/isink.h" #include "../utils/mixins.hh" #include #include #include class INotification; class NotificationManager : public OnQuitSink < NotificationManager > , public SL::NonCopyable, public wxEvtHandler { public: virtual ~NotificationManager(); void OnShowNotification( UiEvents::NotficationData data ); void OnQuit( GlobalEvents::GlobalEventData data ); protected: NotificationManager(); INotification* m_notification_wrapper; wxTimer m_rate_limit_timer; const unsigned int m_rate_limit_ms; typedef std::vector EventDataBuffer; EventDataBuffer m_eventDataBuffer; void OnTimer( wxTimerEvent& /*event*/ ); void ShowNotification( const UiEvents::NotficationData& data ); //make globals holder have access to ctor template friend class GlobalObjectHolder; EventReceiverFunc< NotificationManager, UiEvents::NotficationData, &NotificationManager::OnShowNotification> m_showNotificationSink; DECLARE_EVENT_TABLE() }; NotificationManager& notificationManager(); #endif // NOTIFICATIONMANAGER_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/gui/pastedialog.cpp0000600000176000000410000000557512105760300022006 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include "pastedialog.h" #include #include #include #include #include #include #include #include #include #include #include "../utils/conversion.h" #include "../customizations.h" #ifdef HAVE_WX29 //in < 29 this is defined in wxDialogBase, which seems to have disappeared enum { ButtonSizerFlags = wxOK|wxCANCEL|wxYES|wxNO|wxHELP|wxNO_DEFAULT }; #endif BEGIN_EVENT_TABLE(PasteDialog,wxDialog) EVT_BUTTON(ID_PASTE_BUTTON, PasteDialog::OnPasteButton) EVT_BUTTON(wxID_NO, PasteDialog::OnOptionsNo) END_EVENT_TABLE() PasteDialog::PasteDialog( wxWindow *parent, const wxString& message ) : wxDialog(parent,-1,_( "Flood warning" ),wxDefaultPosition,wxDefaultSize,wxFRAME_FLOAT_ON_PARENT|wxDEFAULT_DIALOG_STYLE) { SetIcons( SLcustomizations().GetAppIconBundle() ); //******** copied from wxsource/generic/msgdlgg.cpp with small modifications*********************************************************** wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer *icon_text = new wxBoxSizer( wxHORIZONTAL ); wxBitmap bitmap = wxArtProvider::GetIcon(wxART_QUESTION, wxART_MESSAGE_BOX); wxStaticBitmap *info_icon = new wxStaticBitmap(this, wxID_ANY, bitmap); icon_text->Add( info_icon, 0, wxCENTER ); // 2) text icon_text->Add( CreateTextSizer( message ), 0, wxALIGN_TOP| wxLEFT, 10 ); topsizer->Add( icon_text, 1, wxCENTER | wxLEFT|wxRIGHT|wxTOP, 10 ); topsizer->Add(0,10); // 3) buttons wxSizer *sizerBtn = CreateButtonSizer(wxYES_NO); if ( sizerBtn ) { wxButton* but = new wxButton( this, ID_PASTE_BUTTON, _("Use pastebin") ); sizerBtn->Add( but, 0, wxALL, 10 ); topsizer->Add(sizerBtn, 0, wxALIGN_CENTRE| wxALL, 10 ); but->SetFocus(); } SetAutoLayout( true ); SetSizer( topsizer ); topsizer->SetSizeHints( this ); topsizer->Fit( this ); Centre( wxBOTH | wxCENTER_FRAME); /***************************************************************************************************/ } PasteDialog::~PasteDialog() {} void PasteDialog::OnPasteButton( wxCommandEvent& /*evt*/ ) { EndModal( pasteButtonReturnCode ); } void PasteDialog::OnOptionsNo(wxCommandEvent& /*unused*/) { EndModal(wxID_NO); } springlobby-0.169/src/gui/pastedialog.h0000600000176000000410000000222412105760300021437 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef PASTEDIALOG_H #define PASTEDIALOG_H #include /** \brief let the user decide to pastebin a message */ class PasteDialog : public wxDialog { public: PasteDialog( wxWindow *parent, const wxString& message ); virtual ~PasteDialog(); static const int pasteButtonReturnCode = wxID_HIGHEST + 1; protected: enum { ID_PASTE_BUTTON = wxID_HIGHEST }; void OnPasteButton( wxCommandEvent& evt ); void OnOptionsNo(wxCommandEvent& event); DECLARE_EVENT_TABLE() }; #endif // PASTEDIALOG_H springlobby-0.169/src/gui/snarl/SnarlInterface.cpp0000600000176000000410000006322012105760300023520 0ustar buildbotwww-data00000000000000//----------------------------------------------------------------------------- // NOTICE: // This version of Snarl Interface is depricated! // Use V41 interface files instead. The files can be found in Snarl SVN: // \trunk\hdr\C++ //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // About: // Snarl C++ interface implementation // To understand what the different functions do and what they return, please // have a look at the API on http://www.fullphat.net/dev/api.htm. // Also have a look at mSnarl_i.bas found in the CVS/SVN repository for Snarl. // // The functions in SnarlInterface both have ANSI(UTF8) and UNICODE versions. // If the LPCWSTR (unicode) version of the functions are called, the strings // are converted to UTF8 by SnarlInterface before sent to Snarl. So using the // ANSI/UTF8/LPCSTR versions of the functions are faster! // // // Difference to VB implementation: // Please note that string functions return NULL when they fail and not an // empty string. So check for NULL... // Function names doesn't have the pre "sn". // // // Authors: // Written and maintained by Toke Noer Nøttrup // Original C++ version by "Whitman" // // License etc. : // Feel free to use this code and class as you see fit. // If you improve the code, it would be nice of you to take contact to the // authors, so all can get the benifit. // // There is no guarantee that the code is correct or functional. // USE AT YOUR OWN RISK //----------------------------------------------------------------------------- // History // 2010/08/13 : Moved to depricated status - Use the V41 API instead ! // 2010/08/02 : Removed some dependencies on safe string functions // : Added uckly casts of HWND to please MinGW64 (since Snarl is 32bit anyway, shouldn't matter.) // 2008/12/31 : Implemented V39 API // : Moved SnarlInterface into new Snarl namespace and moved enums etc. out of class // : Added WCHAR overloads for all functions // 2008/08/27 : Fixed return value of IsMessageVisible and HideMessage (returns false on failure now) // : Fixed critical error in the new overloaded UpdateMessage() function // 2008/08/27 : x64 compiler fix // 2008/08/24 : Renamed all functions to not have prepended "sn". // : Memory allocation functions added. (Use FreeString to free strings returned by Snarl) // : Added m_nLastMessageId to the class. (Use GetLastMessageId() to get it) // : Overloaded a few functions, so one don't have include the message id. (UpdateMessage f.i.) // 2008/06/20 : Fixed snShowMessageEx so it actually sends the extended version - oops // : Fixed compiler warning C4800: forcing value to bool 'true' or 'false' (performance warning) // 2008/05/19 : uSend and uSendEx would always set return value to M_OK on successfull call // 2008/04/14 : Updated to follow (what should be) the final Snarl 2.0 API // 2008/03/28 : Few fixes for Snarl 2.0 // 2007/05/23 : snGetGlobalMsg & snGetSnarlWindow made static // 2007/03/25 : 1.6 RC1 fixup // 2007/03/04 : Added - snGetAppPath, snGetIconsPath, snGetVersionEx, // snSetTimeout, uSendEx #define _CRT_SECURE_NO_WARNINGS #include "SnarlInterface.h" namespace Snarl { namespace V39 { //----------------------------------------------------------------------------- // Constructor/Destructor //----------------------------------------------------------------------------- SnarlInterface::SnarlInterface() : m_hwndFrom(NULL), m_nLastMessageId(0) { } SnarlInterface::~SnarlInterface() { } //----------------------------------------------------------------------------- // snShowMessage() /// Displays a message with Title and Text. Timeout controls how long the /// message is displayed for (in seconds) (omitting this value means the message /// is displayed indefinately). IconPath specifies the location of a PNG image /// which will be displayed alongside the message text. /// Message Id on success or M_RESULT on failure LONG32 SnarlInterface::ShowMessage(LPCSTR szTitle, LPCSTR szText, LONG32 timeout, LPCSTR szIconPath, HWND hWndReply, WPARAM uReplyMsg) { SNARLSTRUCT ss; ZeroMemory((void*)&ss, sizeof(ss)); ss.Cmd = SNARL_SHOW; strncpy((LPSTR)&ss.Title, szTitle, SNARL_STRING_LENGTH); strncpy((LPSTR)&ss.Text, szText, SNARL_STRING_LENGTH); strncpy((LPSTR)&ss.Icon, szIconPath, SNARL_STRING_LENGTH); ss.Timeout = timeout; ss.LngData2 = static_cast(reinterpret_cast(hWndReply)); ss.Id = static_cast(uReplyMsg); m_nLastMessageId = Send(ss); return m_nLastMessageId; } LONG32 SnarlInterface::ShowMessage(LPCWSTR szTitle, LPCWSTR szText, LONG32 timeout, LPCWSTR szIconPath, HWND hWndReply, WPARAM uReplyMsg) { LPSTR szUTF8Title = WideToUTF8(szTitle); LPSTR szUTF8Text = WideToUTF8(szText); LPSTR szUFT8IconPath = WideToUTF8(szIconPath); LONG32 result = ShowMessage(szUTF8Title, szUTF8Text, timeout, szUFT8IconPath, hWndReply, uReplyMsg); delete [] szUTF8Title; delete [] szUTF8Text; delete [] szUFT8IconPath; return result; } //----------------------------------------------------------------------------- // snShowMessageEx() /// Displays a notification. This function is identical to snShowMessage() /// except that Class specifies an alert previously registered with /// snRegisterAlert() and SoundFile can optionally specify a WAV sound to play /// when the notification is displayed on screen. /// Message Id on success or M_RESULT on failure LONG32 SnarlInterface::ShowMessageEx(LPCSTR szClass, LPCSTR szTitle, LPCSTR szText, LONG32 timeout, LPCSTR szIconPath, HWND hWndReply, WPARAM uReplyMsg, LPCSTR szSoundFile) { SNARLSTRUCTEX ssex; ZeroMemory((void*)&ssex, sizeof(ssex)); ssex.Cmd = SNARL_EX_SHOW; ssex.Timeout = timeout; ssex.LngData2 = static_cast(reinterpret_cast(hWndReply)); ssex.Id = static_cast(uReplyMsg); strncpy((LPSTR)&ssex.Class, szClass, SNARL_STRING_LENGTH); strncpy((LPSTR)&ssex.Title, szTitle, SNARL_STRING_LENGTH); strncpy((LPSTR)&ssex.Text, szText, SNARL_STRING_LENGTH); strncpy((LPSTR)&ssex.Icon, szIconPath, SNARL_STRING_LENGTH); strncpy((LPSTR)&ssex.Extra, szSoundFile, SNARL_STRING_LENGTH); m_nLastMessageId = Send(ssex); return m_nLastMessageId; } LONG32 SnarlInterface::ShowMessageEx(LPCWSTR szClass, LPCWSTR szTitle, LPCWSTR szText, LONG32 timeout, LPCWSTR szIconPath, HWND hWndReply, WPARAM uReplyMsg, LPCWSTR szSoundFile) { LPSTR szUTF8Class = WideToUTF8(szClass); LPSTR szUTF8Title = WideToUTF8(szTitle); LPSTR szUTF8Text = WideToUTF8(szText); LPSTR szUFT8IconPath = WideToUTF8(szIconPath); LPSTR szUFT8SoundFile = WideToUTF8(szSoundFile); LONG32 result = ShowMessageEx(szUTF8Class, szUTF8Title, szUTF8Text, timeout, szUFT8IconPath, hWndReply, uReplyMsg, szUFT8SoundFile); delete [] szUTF8Class; delete [] szUTF8Title; delete [] szUTF8Text; delete [] szUFT8IconPath; delete [] szUFT8SoundFile; return result; } //----------------------------------------------------------------------------- // snHideMessage() /// Hides the notification specified by Id. Id is the value returned by /// snShowMessage() or snShowMessageEx() when the notification was initially /// created. This function returns True if the notification was successfully /// hidden or False otherwise (for example, the notification may no longer exist). BOOL SnarlInterface::HideMessage(LONG32 Id) { SNARLSTRUCT ss; ss.Cmd = SNARL_HIDE; ss.Id = Id; LONG32 n = Send(ss); return (n == -1 || n == 1) ? TRUE : FALSE; } BOOL SnarlInterface::HideMessage() { return HideMessage(m_nLastMessageId); } //----------------------------------------------------------------------------- // snIsMessageVisible() /// Returns True if the notification specified by Id is still visible, or /// False if not. Id is the value returned by snShowMessage() or /// snShowMessageEx() when the notification was initially created. BOOL SnarlInterface::IsMessageVisible(LONG32 Id) { SNARLSTRUCT ss; ss.Cmd = SNARL_IS_VISIBLE; ss.Id = Id; // We are getting -1 when true, checking for 1 just in case. We don't want to return true for the other M_RESULT returns LONG32 n = Send(ss); return (n == -1 || n == 1) ? TRUE : FALSE; } BOOL SnarlInterface::IsMessageVisible() { if (m_nLastMessageId == 0) return FALSE; return IsMessageVisible(m_nLastMessageId); } //----------------------------------------------------------------------------- // snUpdateMessage() /// Changes the title and text in the message specified by Id to the values /// specified by Title and Text respectively. Id is the value returned by /// snShowMessage() or snShowMessageEx() when the notification was originally /// created. To change the timeout parameter of a notification, use snSetTimeout() M_RESULT SnarlInterface::UpdateMessage(LONG32 id, LPCSTR szTitle, LPCSTR szText, LPCSTR szIconPath) { SNARLSTRUCT ss; ZeroMemory((void*)&ss, sizeof(ss)); ss.Cmd = SNARL_UPDATE; ss.Id = id; strncpy((LPSTR)&ss.Title, szTitle, SNARL_STRING_LENGTH); strncpy((LPSTR)&ss.Text, szText, SNARL_STRING_LENGTH); strncpy((LPSTR)&ss.Icon, szIconPath, SNARL_STRING_LENGTH); return static_cast(Send(ss)); } M_RESULT SnarlInterface::UpdateMessage(LONG32 id, LPCWSTR szTitle, LPCWSTR szText, LPCWSTR szIconPath) { LPSTR szParam1 = WideToUTF8(szTitle); LPSTR szParam2 = WideToUTF8(szText); LPSTR szParam3 = WideToUTF8(szIconPath); M_RESULT result = UpdateMessage(id, szParam1, szParam2, szParam3); delete [] szParam1; delete [] szParam2; delete [] szParam3; return result; } M_RESULT SnarlInterface::UpdateMessage(LPCSTR szTitle, LPCSTR szText, LPCSTR szIconPath) { return UpdateMessage(m_nLastMessageId, szTitle, szText, szIconPath); } M_RESULT SnarlInterface::UpdateMessage(LPCWSTR szTitle, LPCWSTR szText, LPCWSTR szIconPath) { return UpdateMessage(m_nLastMessageId, szTitle, szText, szIconPath); } //----------------------------------------------------------------------------- // snRegisterConfig /// Registers an application's configuration interface with Snarl. /// AppName is the text that's displayed in the Applications list so it should /// be people friendly ("My cool app" rather than "my_cool_app"). M_RESULT SnarlInterface::RegisterConfig(HWND hWnd, LPCSTR szAppName, LONG32 replyMsg) { return RegisterConfig2(hWnd, szAppName, replyMsg, ""); } M_RESULT SnarlInterface::RegisterConfig(HWND hWnd, LPCWSTR szAppName, LONG32 replyMsg) { return RegisterConfig2(hWnd, szAppName, replyMsg, L""); } //----------------------------------------------------------------------------- // snRegisterConfig2 /// Registers an application's configuration interface with Snarl. /// This function is identical to snRegisterConfig() except that Icon can be /// used to specify a PNG image which will be displayed against the /// application's entry in Snarl's Preferences panel. M_RESULT SnarlInterface::RegisterConfig2(HWND hWnd, LPCSTR szAppName, LONG32 replyMsg, LPCSTR szIcon) { if (!szAppName || !szIcon) return M_BAD_POINTER; SNARLSTRUCT ss; m_hwndFrom = hWnd; ss.Cmd = SNARL_REGISTER_CONFIG_WINDOW_2; ss.LngData2 = static_cast(reinterpret_cast(hWnd)); ss.Id = replyMsg; strncpy((LPSTR)&ss.Title, szAppName, SNARL_STRING_LENGTH); strncpy((LPSTR)&ss.Icon, szIcon, SNARL_STRING_LENGTH); return static_cast(Send(ss)); } M_RESULT SnarlInterface::RegisterConfig2(HWND hWnd, LPCWSTR szAppName, LONG32 replyMsg, LPCWSTR szIcon) { LPSTR szParam1 = WideToUTF8(szAppName); LPSTR szParam2 = WideToUTF8(szIcon); M_RESULT result = RegisterConfig2(hWnd, szParam1, replyMsg, szParam2); delete [] szParam1; delete [] szParam2; return result; } //----------------------------------------------------------------------------- // snRevokeConfig /// Removes the application previously registered using snRegisterConfig() or /// snRegisterConfig2(). hWnd should be the same as that used during registration. M_RESULT SnarlInterface::RevokeConfig(HWND hWnd) { SNARLSTRUCT ss; m_hwndFrom = NULL; ss.Cmd = SNARL_REVOKE_CONFIG_WINDOW; ss.LngData2 = static_cast(reinterpret_cast(hWnd)); return static_cast(Send(ss)); } //----------------------------------------------------------------------------- // snGetVersion() /// Checks if Snarl is currently running and, if it is, retrieves the major and /// minor release version numbers in Major and Minor respectively. /// Returns True if Snarl is running, False otherwise. BOOL SnarlInterface::GetVersion(WORD* Major, WORD* Minor) { SNARLSTRUCT ss; ss.Cmd = SNARL_GET_VERSION; LONG32 versionInfo = Send(ss); if (versionInfo > 0 && versionInfo != M_FAILED && versionInfo != M_TIMED_OUT) { *Major = HIWORD(versionInfo); *Minor = LOWORD(versionInfo); return TRUE; } return FALSE; } //----------------------------------------------------------------------------- // snGetVersionEx /// Returns the Snarl system version number. This is an integer value which /// represents the system build number and can be used to identify the specific /// version of Snarl running LONG32 SnarlInterface::GetVersionEx() { SNARLSTRUCT ss; ss.Cmd = SNARL_GET_VERSION_EX; return Send(ss); } //----------------------------------------------------------------------------- // snSetTimeout() /// Sets the timeout of existing notification Id to Timeout seconds. Id is the /// value returned by snShowMessage() or snShowMessageEx() when the notification /// was first created. M_RESULT SnarlInterface::SetTimeout(LONG32 Id, LONG32 Timeout) { SNARLSTRUCT ss; ss.Cmd = SNARL_SET_TIMEOUT; ss.Id = Id; ss.LngData2 = Timeout; return static_cast(Send(ss)); } M_RESULT SnarlInterface::SetTimeout(LONG32 Timeout) { return SetTimeout(m_nLastMessageId, Timeout); } //----------------------------------------------------------------------------- // snRegisterAlert() /// Registers an alert of Class for application AppName which must have previously /// been registered with either snRegisterConfig() or snRegisterConfig2(). M_RESULT SnarlInterface::RegisterAlert(LPCSTR szAppName, LPCSTR szClass) { SNARLSTRUCT ss; ss.Cmd = SNARL_REGISTER_ALERT; strncpy((LPSTR)&ss.Title, szAppName, SNARL_STRING_LENGTH); strncpy((LPSTR)&ss.Text, szClass, SNARL_STRING_LENGTH); return static_cast(Send(ss)); } M_RESULT SnarlInterface::RegisterAlert(LPCWSTR szAppName, LPCWSTR szClass) { LPSTR szParam1 = WideToUTF8(szAppName); LPSTR szParam2 = WideToUTF8(szClass); M_RESULT result = RegisterAlert(szParam1, szParam2); delete [] szParam1; delete [] szParam2; return result; } //----------------------------------------------------------------------------- // snGetGlobalMsg() /// Returns the atom that corresponds to the "SnarlGlobalEvent" registered /// Windows message. This message is sent by Snarl when it is first starts and /// when it shuts down. LONG32 SnarlInterface::GetGlobalMsg() { return RegisterWindowMessage(SNARL_GLOBAL_MSG); } //----------------------------------------------------------------------------- // snGetSnarlWindow HWND SnarlInterface::GetSnarlWindow() { HWND hWnd = FindWindow(SNARL_WINDOW_CLASS, SNARL_WINDOW_TITLE); if (hWnd == NULL) hWnd = FindWindow(NULL, SNARL_WINDOW_TITLE); return hWnd; } //----------------------------------------------------------------------------- // snGetAppPath() /// Returns a pointer to the path. /// ** Remember to call FreeString LPCTSTR SnarlInterface::GetAppPath() { HWND hWnd = GetSnarlWindow(); if (hWnd) { HWND hWndPath = FindWindowEx(hWnd, NULL, _T("static"), NULL); if (hWndPath) { TCHAR strTmp[MAX_PATH] = {0}; int nReturn = GetWindowText(hWndPath, strTmp, MAX_PATH-1); if (nReturn > 0) { TCHAR* strReturn = AllocateString(nReturn + 1); _tcsncpy(strReturn, strTmp, nReturn + 1); strReturn[nReturn] = 0; return strReturn; } } } return NULL; } //----------------------------------------------------------------------------- // snGetIconsPath() /// Returns a pointer to the iconpath. /// ** Remember to call FreeString when done with the string LPCTSTR SnarlInterface::GetIconsPath() { TCHAR* szIconPath = NULL; LPCTSTR szPath = GetAppPath(); if (!szPath) return NULL; size_t nLen = 0; // TODO: _tcsnlen MAX_PATH if (nLen = _tcslen(szPath)) { nLen += 10 + 1; // etc\\icons\\ + NULL szIconPath = AllocateString(nLen); _tcsncpy(szIconPath, szPath, nLen); _tcsncat(szIconPath, _T("etc\\icons\\"), nLen); } FreeString(szPath); return szIconPath; } //----------------------------------------------------------------------------- // snSetAsSnarlApp() /// Identifies an application as a Snarl App. (V39) void SnarlInterface::SetAsSnarlApp(HWND hWndOwner, SNARL_APP_FLAGS Flags) { if (IsWindow(hWndOwner)) { SetProp(hWndOwner, _T("snarl_app"), reinterpret_cast(1)); SetProp(hWndOwner, _T("snarl_app_flags"), reinterpret_cast(Flags)); } } //----------------------------------------------------------------------------- // snGetAppMsg() /// Returns the global Snarl Application message (V39) LONG32 SnarlInterface::GetAppMsg() { return RegisterWindowMessage(SNARL_APP_MSG); } //----------------------------------------------------------------------------- // snRegisterApp() /// Registers an application with Snarl (V39) M_RESULT SnarlInterface::RegisterApp(LPCSTR Application, LPCSTR SmallIcon, LPCSTR LargeIcon, HWND hWnd, LONG32 ReplyMsg) { m_hwndFrom = hWnd; SNARLSTRUCT ss; ss.Cmd = SNARL_REGISTER_APP; strncpy((LPSTR)&ss.Title, Application, SNARL_STRING_LENGTH); strncpy((LPSTR)&ss.Icon, SmallIcon, SNARL_STRING_LENGTH); strncpy((LPSTR)&ss.Text, LargeIcon, SNARL_STRING_LENGTH); ss.LngData2 = static_cast(reinterpret_cast(hWnd)); ss.Id = ReplyMsg; ss.Timeout = GetCurrentProcessId(); return static_cast(Send(ss)); } M_RESULT SnarlInterface::RegisterApp(LPCWSTR Application, LPCWSTR SmallIcon, LPCWSTR LargeIcon, HWND hWnd, LONG32 ReplyMsg) { LPSTR szParam1 = WideToUTF8(Application); LPSTR szParam2 = WideToUTF8(SmallIcon); LPSTR szParam3 = WideToUTF8(LargeIcon); M_RESULT result = RegisterApp(szParam1, szParam2, szParam3, hWnd, ReplyMsg); delete [] szParam1; delete [] szParam2; delete [] szParam3; return result; } //----------------------------------------------------------------------------- // snUnregisterApp() /// Unregisters an application with Snarl (V39) M_RESULT SnarlInterface::UnregisterApp() { SNARLSTRUCT ss; ss.Cmd = SNARL_UNREGISTER_APP; ss.LngData2 = GetCurrentProcessId(); m_hwndFrom = NULL; return static_cast(Send(ss)); } //----------------------------------------------------------------------------- // snShowNotification() /// Displays a Snarl notification using registered class (V39) /// Message Id on success or M_RESULT on failure /// LPCSTR Icon = NULL, HWND hWndReply = NULL, LONG32 uReplyMsg = 0, LPCSTR Sound = NULL); LONG32 SnarlInterface::ShowNotification(LPCSTR Class, LPCSTR Title, LPCSTR Text, LONG32 Timeout, LPCSTR Icon /* = NULL */, HWND hWndReply /* = NULL */, LONG32 uReplyMsg /* = 0 */, LPCSTR Sound /* = NULL */) { SNARLSTRUCTEX ssex; ZeroMemory(&ssex, sizeof(SNARLSTRUCTEX)); ssex.Cmd = SNARL_SHOW_NOTIFICATION; strncpy((LPSTR)&ssex.Title, Title, SNARL_STRING_LENGTH); strncpy((LPSTR)&ssex.Text, Text, SNARL_STRING_LENGTH); if (Icon != NULL) strncpy((LPSTR)&ssex.Icon, Icon, SNARL_STRING_LENGTH); if (Sound != NULL) strncpy((LPSTR)&ssex.Extra, Sound, SNARL_STRING_LENGTH); if (Class != NULL) strncpy((LPSTR)&ssex.Class, Class, SNARL_STRING_LENGTH); ssex.Timeout = Timeout; ssex.LngData2 = static_cast(reinterpret_cast(hWndReply)); ssex.Id = uReplyMsg; ssex.Reserved1 = GetCurrentProcessId(); m_nLastMessageId = Send(ssex); return m_nLastMessageId; } LONG32 SnarlInterface::ShowNotification(LPCWSTR Class, LPCWSTR Title, LPCWSTR Text, LONG32 Timeout, LPCWSTR Icon, HWND hWndReply, LONG32 uReplyMsg, LPCWSTR Sound) { LPSTR szParam1 = WideToUTF8(Class); LPSTR szParam2 = WideToUTF8(Title); LPSTR szParam3 = WideToUTF8(Text); LPSTR szParam4 = WideToUTF8(Icon); LPSTR szParam5 = WideToUTF8(Sound); LONG32 result = ShowNotification(szParam1, szParam2, szParam3, Timeout, szParam4, hWndReply, uReplyMsg, szParam5); delete [] szParam1; delete [] szParam2; delete [] szParam3; delete [] szParam4; delete [] szParam5; return result; } //----------------------------------------------------------------------------- // snChangeAttribute() /// (V39) M_RESULT SnarlInterface::ChangeAttribute(LONG32 Id, SNARL_ATTRIBUTES Attr, LPCSTR Value) { SNARLSTRUCT ss; ss.Cmd = SNARL_CHANGE_ATTR; ss.Id = Id; ss.LngData2 = Attr; strncpy((LPSTR)&ss.Text, Value, SNARL_STRING_LENGTH); return static_cast(Send(ss)); } M_RESULT SnarlInterface::ChangeAttribute(LONG32 Id, SNARL_ATTRIBUTES Attr, LPCWSTR Value) { LPSTR szParam1 = WideToUTF8(Value); M_RESULT result = ChangeAttribute(Id, Attr, szParam1); delete [] szParam1; return result; } M_RESULT SnarlInterface::ChangeAttribute(SNARL_ATTRIBUTES Attr, LPCSTR Value) { return ChangeAttribute(m_nLastMessageId, Attr, Value); } M_RESULT SnarlInterface::ChangeAttribute(SNARL_ATTRIBUTES Attr, LPCWSTR Value) { return ChangeAttribute(m_nLastMessageId, Attr, Value); } //----------------------------------------------------------------------------- // snSetClassDefault() /// Sets the default value for an alert class (V39) M_RESULT SnarlInterface::SetClassDefault(LPCSTR Class, SNARL_ATTRIBUTES Attr, LPCSTR Value) { SNARLSTRUCT ss; ss.Cmd = SNARL_SET_CLASS_DEFAULT; ss.LngData2 = Attr; ss.Timeout = GetCurrentProcessId(); strncpy((LPSTR)&ss.Text, Class, SNARL_STRING_LENGTH); strncpy((LPSTR)&ss.Icon, Value, SNARL_STRING_LENGTH); return static_cast(Send(ss)); } M_RESULT SnarlInterface::SetClassDefault(LPCWSTR Class, SNARL_ATTRIBUTES Attr, LPCWSTR Value) { LPSTR szParam1 = WideToUTF8(Class); LPSTR szParam2 = WideToUTF8(Value); M_RESULT result = SetClassDefault(szParam1, Attr, szParam2); delete [] szParam1; delete [] szParam2; return result; } //----------------------------------------------------------------------------- // snGetRevision() /// Gets the current Snarl revision (build) number (V39) /// Returns the build version number, or M_RESULT on failure. LONG32 SnarlInterface::GetRevision() { SNARLSTRUCT ss; ss.Cmd = SNARL_GET_REVISION; ss.LngData2 = 0xFFFE; return Send(ss); } //----------------------------------------------------------------------------- // snAddClass() /// (V39) M_RESULT SnarlInterface::AddClass(LPCSTR Class, LPCSTR Description, SNARL_CLASS_FLAGS Flags, LPCSTR DefaultTitle, LPCSTR DefaultIcon, LONG32 DefaultTimeout) { SNARLSTRUCT ss; ss.Cmd = SNARL_ADD_CLASS; ss.LngData2 = Flags; ss.Timeout = GetCurrentProcessId(); strncpy((LPSTR)&ss.Text, Class, SNARL_STRING_LENGTH); strncpy((LPSTR)&ss.Title, Description, SNARL_STRING_LENGTH); LONG32 result = Send(ss); if (static_cast(result) == M_OK) { SetClassDefault(Class, SNARL_ATTRIBUTE_TITLE, DefaultTitle); SetClassDefault(Class, SNARL_ATTRIBUTE_ICON, DefaultIcon); if (DefaultTimeout > 0) { char str[64] = {0}; _snprintf((LPSTR)&str, sizeof(str), "%d", DefaultTimeout); SetClassDefault(Class, SNARL_ATTRIBUTE_TIMEOUT, str); } return M_OK; } else return M_FAILED; } M_RESULT SnarlInterface::AddClass(LPCWSTR Class, LPCWSTR Description, SNARL_CLASS_FLAGS Flags, LPCWSTR DefaultTitle, LPCWSTR DefaultIcon, LONG32 DefaultTimeout) { LPCSTR szClass = WideToUTF8(Class); LPCSTR szDescription = WideToUTF8(Description); LPCSTR szDefaultTitle = WideToUTF8(DefaultTitle); LPCSTR szDefaultIcon = WideToUTF8(DefaultIcon); M_RESULT result = AddClass(szClass, szDescription, Flags, szDefaultTitle, szDefaultIcon, DefaultTimeout); delete [] szClass; delete [] szDescription; delete [] szDefaultTitle; delete [] szDefaultIcon; return result; } //----------------------------------------------------------------------------- // Private functions //----------------------------------------------------------------------------- template LONG32 SnarlInterface::Send(T ss) { DWORD_PTR nReturn = M_FAILED; HWND hWnd = GetSnarlWindow(); if (IsWindow(hWnd)) { COPYDATASTRUCT cds; cds.dwData = 2; cds.cbData = sizeof(ss); cds.lpData = &ss; if (SendMessageTimeout(hWnd, WM_COPYDATA, (WPARAM)m_hwndFrom, (LPARAM)&cds, SMTO_ABORTIFHUNG | SMTO_NOTIMEOUTIFNOTHUNG, 1000, &nReturn) == 0) { if (GetLastError() == ERROR_TIMEOUT) nReturn = M_TIMED_OUT; } } return static_cast(nReturn); } //----------------------------------------------------------------------------- // Remember to : delete [] returned string LPSTR SnarlInterface::WideToUTF8(LPCWSTR szWideStr) { if (szWideStr == NULL) return NULL; int nSize = WideCharToMultiByte(CP_UTF8, 0, szWideStr, -1, NULL, 0, NULL, NULL); LPSTR szUTF8 = new char[nSize]; WideCharToMultiByte(CP_UTF8, 0, szWideStr, -1, szUTF8, nSize, NULL, NULL); return szUTF8; } } } // namespace Snarl::V39 springlobby-0.169/src/gui/snarl/SnarlInterface.h0000600000176000000410000002173012105760300023165 0ustar buildbotwww-data00000000000000#ifndef SNARL_INTERFACE_V39 #define SNARL_INTERFACE_V39 #ifdef __WXMSW__ #include #include #include #ifndef SMTO_NOTIMEOUTIFNOTHUNG #define SMTO_NOTIMEOUTIFNOTHUNG 8 #endif namespace Snarl { namespace V39 { static const LPCTSTR SNARL_GLOBAL_MSG = _T("SnarlGlobalEvent"); static const LPCTSTR SNARL_APP_MSG = _T("SnarlAppMessage"); static const LPCTSTR SNARL_WINDOW_CLASS = _T("w>Snarl"); static const LPCTSTR SNARL_WINDOW_TITLE = _T("Snarl"); static const int SNARL_STRING_LENGTH = 1024; static const int SNARL_UNICODE_LENGTH = SNARL_STRING_LENGTH / 2; static const LONG32 SNARL_LAUNCHED = 1; // Snarl has just started running static const LONG32 SNARL_QUIT = 2; // Snarl is about to stop running static const LONG32 SNARL_ASK_APPLET_VER = 3; // (R1.5) Reserved for future use static const LONG32 SNARL_SHOW_APP_UI = 4; // (R1.6) Application should show its UI static const LONG32 SNARL_NOTIFICATION_CLICKED = 32; // notification was right-clicked by user static const LONG32 SNARL_NOTIFICATION_TIMED_OUT = 33; static const LONG32 SNARL_NOTIFICATION_ACK = 34; // notification was left-clicked by user static const LONG32 SNARL_NOTIFICATION_MENU = 35; // V39 - menu item selected static const LONG32 SNARL_NOTIFICATION_MIDDLE_BUTTON = 36; // V39 - notification middle-clicked by user static const LONG32 SNARL_NOTIFICATION_CLOSED = 37; // V39 - user clicked the close gadget static const LONG32 SNARL_NOTIFICATION_CANCELLED = SNARL_NOTIFICATION_CLICKED; // Added in R1.6 static const DWORD WM_SNARLTEST = WM_USER + 237; // note hardcoded WM_USER value! // -------------------------------------------------------------------- enum M_RESULT { M_ABORTED = 0x80000007, M_ACCESS_DENIED = 0x80000009, M_ALREADY_EXISTS = 0x8000000C, M_BAD_HANDLE = 0x80000006, M_BAD_POINTER = 0x80000005, M_FAILED = 0x80000008, M_INVALID_ARGS = 0x80000003, M_NO_INTERFACE = 0x80000004, M_NOT_FOUND = 0x8000000B, M_NOT_IMPLEMENTED = 0x80000001, M_OK = 0x00000000, M_OUT_OF_MEMORY = 0x80000002, M_TIMED_OUT = 0x8000000A }; enum SNARL_COMMANDS { SNARL_SHOW = 1, SNARL_HIDE, SNARL_UPDATE, SNARL_IS_VISIBLE, SNARL_GET_VERSION, SNARL_REGISTER_CONFIG_WINDOW, SNARL_REVOKE_CONFIG_WINDOW, /* R1.6 onwards */ SNARL_REGISTER_ALERT, SNARL_REVOKE_ALERT, // for future use SNARL_REGISTER_CONFIG_WINDOW_2, SNARL_GET_VERSION_EX, SNARL_SET_TIMEOUT, /* following introduced in Snarl V39 (R2.1) */ SNARL_SET_CLASS_DEFAULT, SNARL_CHANGE_ATTR, SNARL_REGISTER_APP, SNARL_UNREGISTER_APP, SNARL_ADD_CLASS, /* extended commands (all use SNARLSTRUCTEX) */ SNARL_EX_SHOW = 0x20, SNARL_SHOW_NOTIFICATION // V39 }; static const SNARL_COMMANDS SNARL_GET_REVISION = SNARL_REVOKE_ALERT; enum SNARL_APP_FLAGS { SNARL_APP_HAS_PREFS = 1, SNARL_APP_HAS_ABOUT = 2 }; static const LONG32 SNARL_APP_PREFS = 1; static const LONG32 SNARL_APP_ABOUT = 2; /* --------------- V39 additions --------------- */ /* snAddClass() flags */ enum SNARL_CLASS_FLAGS { SNARL_CLASS_ENABLED = 0, SNARL_CLASS_DISABLED = 1, SNARL_CLASS_NO_DUPLICATES = 2, // means Snarl will suppress duplicate notifications SNARL_CLASS_DELAY_DUPLICATES = 4 // means Snarl will suppress duplicate notifications within a pre-set time period }; /* Class attributes */ enum SNARL_ATTRIBUTES { SNARL_ATTRIBUTE_TITLE = 1, SNARL_ATTRIBUTE_TEXT, SNARL_ATTRIBUTE_ICON, SNARL_ATTRIBUTE_TIMEOUT, SNARL_ATTRIBUTE_SOUND, SNARL_ATTRIBUTE_ACK, // file to run on ACK SNARL_ATTRIBUTE_MENU }; /* ------------------- end of V39 additions ------------------ */ struct SNARLSTRUCT { SNARL_COMMANDS Cmd; LONG32 Id; LONG32 Timeout; LONG32 LngData2; char Title[SNARL_STRING_LENGTH]; char Text[SNARL_STRING_LENGTH]; char Icon[SNARL_STRING_LENGTH]; }; struct SNARLSTRUCTEX { SNARL_COMMANDS Cmd; LONG32 Id; LONG32 Timeout; LONG32 LngData2; char Title[SNARL_STRING_LENGTH]; char Text[SNARL_STRING_LENGTH]; char Icon[SNARL_STRING_LENGTH]; char Class[SNARL_STRING_LENGTH]; char Extra[SNARL_STRING_LENGTH]; char Extra2[SNARL_STRING_LENGTH]; LONG32 Reserved1; LONG32 Reserved2; }; // ------------------------------------------------------------------------ // SnarlInterface class definition // ------------------------------------------------------------------------ class SnarlInterface { public: SnarlInterface(); ~SnarlInterface(); static HWND GetSnarlWindow(); static LONG32 GetGlobalMsg(); LPTSTR AllocateString(size_t n) { return new TCHAR[n]; } void FreeString(LPCTSTR str) { delete [] str; str = NULL; } LONG32 ShowMessage(LPCSTR szTitle, LPCSTR szText, LONG32 timeout = 0, LPCSTR szIconPath = "", HWND hWndReply = NULL, WPARAM uReplyMsg = 0); LONG32 ShowMessage(LPCWSTR szTitle, LPCWSTR szText, LONG32 timeout = 0, LPCWSTR szIconPath = L"", HWND hWndReply = NULL, WPARAM uReplyMsg = 0); LONG32 ShowMessageEx(LPCSTR szClass, LPCSTR szTitle, LPCSTR szText, LONG32 timeout = 0, LPCSTR szIconPath = "", HWND hWndReply = NULL, WPARAM uReplyMsg = 0, LPCSTR szSoundFile = ""); LONG32 ShowMessageEx(LPCWSTR szClass, LPCWSTR szTitle, LPCWSTR szText, LONG32 timeout = 0, LPCWSTR szIconPath = L"", HWND hWndReply = NULL, WPARAM uReplyMsg = 0, LPCWSTR szSoundFile = L""); LPCTSTR GetAppPath(); // ** Remember to FreeString when finished with the string ! LPCTSTR GetIconsPath(); // ** Remember to FreeString when finished with the string ! BOOL GetVersion(WORD* Major, WORD* Minor); LONG32 GetVersionEx(); BOOL HideMessage(); BOOL HideMessage(LONG32 Id); BOOL IsMessageVisible(); BOOL IsMessageVisible(LONG32 Id); M_RESULT RegisterAlert(LPCSTR szAppName, LPCSTR szClass); M_RESULT RegisterAlert(LPCWSTR szAppName, LPCWSTR szClass); M_RESULT RegisterConfig(HWND hWnd, LPCSTR szAppName, LONG32 replyMsg); M_RESULT RegisterConfig(HWND hWnd, LPCWSTR szAppName, LONG32 replyMsg); M_RESULT RegisterConfig2(HWND hWnd, LPCSTR szAppName, LONG32 replyMsg, LPCSTR szIcon); M_RESULT RegisterConfig2(HWND hWnd, LPCWSTR szAppName, LONG32 replyMsg, LPCWSTR szIcon); M_RESULT RevokeConfig(HWND hWnd); M_RESULT SetTimeout(LONG32 Timeout); M_RESULT SetTimeout(LONG32 Id, LONG32 Timeout); M_RESULT UpdateMessage(LPCSTR szTitle, LPCSTR szText, LPCSTR szIconPath = ""); M_RESULT UpdateMessage(LPCWSTR szTitle, LPCWSTR szText, LPCWSTR szIconPath = L""); M_RESULT UpdateMessage(LONG32 Id, LPCSTR szTitle, LPCSTR szText, LPCSTR szIconPath = ""); M_RESULT UpdateMessage(LONG32 Id, LPCWSTR szTitle, LPCWSTR szText, LPCWSTR szIconPath = L""); /* V39 */ M_RESULT AddClass(LPCSTR Class, LPCSTR Description = NULL, SNARL_CLASS_FLAGS Flags = SNARL_CLASS_ENABLED, LPCSTR DefaultTitle = NULL, LPCSTR DefaultIcon = NULL, LONG32 DefaultTimeout = 0); M_RESULT AddClass(LPCWSTR Class, LPCWSTR Description = NULL, SNARL_CLASS_FLAGS Flags = SNARL_CLASS_ENABLED, LPCWSTR DefaultTitle = NULL, LPCWSTR DefaultIcon = NULL, LONG32 DefaultTimeout = 0); M_RESULT ChangeAttribute(SNARL_ATTRIBUTES Attr, LPCSTR Value); M_RESULT ChangeAttribute(SNARL_ATTRIBUTES Attr, LPCWSTR Value); M_RESULT ChangeAttribute(LONG32 Id, SNARL_ATTRIBUTES Attr, LPCSTR Value); M_RESULT ChangeAttribute(LONG32 Id, SNARL_ATTRIBUTES Attr, LPCWSTR Value); LONG32 GetAppMsg(); LONG32 GetRevision(); M_RESULT RegisterApp(LPCSTR Application, LPCSTR SmallIcon, LPCSTR LargeIcon, HWND hWnd = 0, LONG32 ReplyMsg = 0); M_RESULT RegisterApp(LPCWSTR Application, LPCWSTR SmallIcon, LPCWSTR LargeIcon, HWND hWnd = 0, LONG32 ReplyMsg = 0); void SetAsSnarlApp(HWND hWndOwner, SNARL_APP_FLAGS Flags = (SNARL_APP_FLAGS)(SNARL_APP_HAS_ABOUT | SNARL_APP_HAS_PREFS)); M_RESULT SetClassDefault(LPCSTR Class, SNARL_ATTRIBUTES Attr, LPCSTR Value); M_RESULT SetClassDefault(LPCWSTR Class, SNARL_ATTRIBUTES Attr, LPCWSTR Value); LONG32 ShowNotification(LPCSTR Class, LPCSTR Title, LPCSTR Text, LONG32 Timeout = 0, LPCSTR Icon = NULL, HWND hWndReply = NULL, LONG32 uReplyMsg = 0, LPCSTR Sound = NULL); LONG32 ShowNotification(LPCWSTR Class, LPCWSTR Title, LPCWSTR Text, LONG32 Timeout = 0, LPCWSTR Icon = NULL, HWND hWndReply = NULL, LONG32 uReplyMsg = 0, LPCWSTR Sound = NULL); M_RESULT UnregisterApp(); LONG32 GetLastMessageId() { return m_nLastMessageId; } private: template LONG32 Send(T ss); LPSTR WideToUTF8(LPCWSTR szWideStr); HWND m_hwndFrom; // set during snRegisterConfig() or snRegisterConfig2() LONG32 m_nLastMessageId; }; } // namespace V39 } // namespace Snarl #endif // __WXMSW__ #endif // SNARL_INTERFACE_V39 springlobby-0.169/src/gui/snarl/_License.txt0000600000176000000410000000070112105760300022371 0ustar buildbotwww-data00000000000000This software in source and compiled form is provided AS IS, with no warranty. We make no guarantees about the quality of the product and take no responsibility for any damage or malfunction of hardware or software which uses this product. This software is FREE and you can use it in any way you see fit, as long as you do not hold the authors responsible for any malfunction or failure. Please leave this license with the source files. springlobby-0.169/src/gui/snarl/_Readme.txt0000600000176000000410000000324712105760300022214 0ustar buildbotwww-data00000000000000============================================================== | Snarl C++ interface ============================================================== Written by Toke Noer (toke 'at' noer.it) For bugfixes etc. fell free to contact me. The C++ interface for Snarl is implemented in: SnarlInterface.cpp SnarlInterface.h Include these two files in your project, and you should be ready to use Snarl. Quick example: #include "SnarlInterface.h" Snarl::V41::SnarlInterface *snarl = new Snarl::V41::SnarlInterface(); snarl->RegisterApp(_T("AppId"), _T("CSharp Test App"), NULL, NULL, 0, 0); snarl->EZNotify(_T("id"), _T("title"), _T("message body"), 10, _T(""), 0, _T("ack"), _T("value"))); snarl->UnregisterApp(); delete snarl; Take a look at the test applications if you need help getting it to work. (See SVN links below) ============================================================== | Snarl C++ interface test application ============================================================== The application is made to test the functionality of the Snarl C++ interface. I take no responsibility for any data corruption, data deletion or any other harm done by this program. Take a look at the source and compile for your self so you know nothing is wrong with the program. ================================================================================ = Home of this file: https://snarlwin.svn.sourceforge.net/svnroot/snarlwin/trunk/hdr/C++/ = API reference: http://www.fullphat.net/dev/api.htm = VB reference: https://snarlwin.svn.sourceforge.net/svnroot/snarlwin/trunk/hdr/VB/ ================================================================================ springlobby-0.169/src/gui/snarlnotification.cpp0000600000176000000410000000244512105760300023231 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include "snarlnotification.h" SnarlNotification::SnarlNotification(wxWindow* parent): m_fallback_wrapper(NULL) { if ( Snarl::V39::SnarlInterface::IsRunning() ) m_snarl_interface.RegisterApp(_T("CppTest"), _T("C++ test app"), NULL); } void SnarlNotification::Show(const wxBitmap& icon, const size_t pos, const UiEvents::NotficationData& data ) { if ( Snarl::V39::SnarlInterface::IsRunning() ) { m_snarl_interface.AddClass(_T("Class1"), _T("Class 1")); // m_snarl_interface.ShowNotification(_T("SpringLobby"), data.second, _T("Some more text"), 10); m_snarl_interface.ShowNotification("SpringLobby", "dummy text", "Some more text", 10); } } springlobby-0.169/src/gui/snarlnotification.h0000600000176000000410000000217412105760300022675 0ustar buildbotwww-data00000000000000#ifndef SNARLNOTIFICATION_H #define SNARLNOTIFICATION_H #ifdef __WXMSW__ #include "inotification.h" #include "snarl/SnarlInterface.h" class ToasterNotification; class SnarlNotification : public INotification { public: SnarlNotification(wxWindow* parent); virtual void Show(const wxBitmap& icon, const size_t pos, const UiEvents::NotficationData& data ); protected: ToasterNotification* m_fallback_wrapper; Snarl::V39::SnarlInterface m_snarl_interface; }; #endif // __WXMSW__ #endif // SNARLNOTIFICATION_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/gui/spinctl/generic/spinctlg.cpp0000700000176000000410000003402312105760300024414 0ustar buildbotwww-data00000000000000/////////////////////////////////////////////////////////////////////////////// // Name: src/generic/spinctlg.cpp // Purpose: implements SlSpinCtrl as a composite control // Author: Vadim Zeitlin // Modified by: // Created: 29.01.01 // RCS-ID: $Id: spinctlg.cpp 62129 2009-09-25 15:25:25Z JS $ // Copyright: (c) 2001 Vadim Zeitlin // License: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ // declarations // ============================================================================ // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- #include "../spinctrl.h" #if wxUSE_SPINCTRL #include "wx/spinbutt.h" #include #include "../../../utils/conversion.h" #if wxUSE_SPINBTN //DEFINE_EVENT_TYPE( SLEVT_COMMAND_SPINCTRL_UPDATED ) // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- // the margin between the text control and the spin static const wxCoord MARGIN = 2; #define SPINCTRLBUT_MAX 32000 // large to avoid wrap around trouble // ---------------------------------------------------------------------------- // SlSpinCtrlTextGeneric: text control used by spin control // ---------------------------------------------------------------------------- SlSpinCtrlTextGeneric::SlSpinCtrlTextGeneric(SlSpinCtrlGenericBase *spin, const wxString& value, long style) : wxTextCtrl(spin->GetParent(), wxID_ANY, value, wxDefaultPosition, wxDefaultSize, ( style & wxALIGN_MASK ) | wxTE_NOHIDESEL | wxTE_PROCESS_ENTER) { m_spin = spin; // remove the default minsize, the spinctrl will have one instead SetSizeHints(wxDefaultCoord, wxDefaultCoord); } SlSpinCtrlTextGeneric::~SlSpinCtrlTextGeneric() { // MSW sends extra kill focus event on destroy if (m_spin) m_spin->m_textCtrl = NULL; m_spin = NULL; } void SlSpinCtrlTextGeneric::OnTextEnter(wxCommandEvent& event) { if (m_spin) m_spin->OnTextEnter(event); } void SlSpinCtrlTextGeneric::OnChar( wxKeyEvent &event ) { if (m_spin) m_spin->OnTextChar(event); } void SlSpinCtrlTextGeneric::OnKillFocus(wxFocusEvent& event) { if (m_spin) { m_spin->SyncSpinToText(); m_spin->DoSendEvent(); } event.Skip(); } BEGIN_EVENT_TABLE(SlSpinCtrlTextGeneric, wxTextCtrl) EVT_TEXT_ENTER(wxID_ANY, SlSpinCtrlTextGeneric::OnTextEnter) EVT_CHAR(SlSpinCtrlTextGeneric::OnChar) EVT_KILL_FOCUS(SlSpinCtrlTextGeneric::OnKillFocus) END_EVENT_TABLE() // ---------------------------------------------------------------------------- // SlSpinCtrlButtonGeneric: spin button used by spin control // ---------------------------------------------------------------------------- class SlSpinCtrlButtonGeneric : public wxSpinButton { public: SlSpinCtrlButtonGeneric(SlSpinCtrlGenericBase *spin, int style) : wxSpinButton(spin->GetParent(), wxID_ANY, wxDefaultPosition, wxDefaultSize, style | wxSP_VERTICAL) { m_spin = spin; SetRange(-SPINCTRLBUT_MAX, SPINCTRLBUT_MAX); // remove the default minsize, the spinctrl will have one instead SetSizeHints(wxDefaultCoord, wxDefaultCoord); } void OnSpinButton(wxSpinEvent& event) { if (m_spin) m_spin->OnSpinButton(event); } SlSpinCtrlGenericBase *m_spin; private: DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(SlSpinCtrlButtonGeneric, wxSpinButton) EVT_SPIN_UP( wxID_ANY, SlSpinCtrlButtonGeneric::OnSpinButton) EVT_SPIN_DOWN(wxID_ANY, SlSpinCtrlButtonGeneric::OnSpinButton) END_EVENT_TABLE() // ============================================================================ // SlSpinCtrlGenericBase // ============================================================================ // ---------------------------------------------------------------------------- // SlSpinCtrlGenericBase creation // ---------------------------------------------------------------------------- IMPLEMENT_DYNAMIC_CLASS(SlSpinDoubleEvent, wxNotifyEvent) void SlSpinCtrlGenericBase::Init() { m_value = 0; m_min = 0; m_max = 100; m_increment = 1; m_snap_to_ticks = false; m_format = _T("%g"); m_spin_value = 0; m_textCtrl = NULL; m_spinButton = NULL; } bool SlSpinCtrlGenericBase::Create(wxWindow *parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, long style, double min, double max, double initial, double increment, const wxString& name) { // don't use borders for this control itself, it wouldn't look good with // the text control borders (but we might want to use style border bits to // select the text control style) if ( !wxControl::Create(parent, id, wxDefaultPosition, wxDefaultSize, (style & ~wxBORDER_MASK) | wxBORDER_NONE, wxDefaultValidator, name) ) { return false; } m_value = initial; m_min = min; m_max = max; m_increment = increment; m_textCtrl = new SlSpinCtrlTextGeneric(this, value, style); m_spinButton = new SlSpinCtrlButtonGeneric(this, style); m_spin_value = m_spinButton->GetValue(); // the string value overrides the numeric one (for backwards compatibility // reasons and also because it is simpler to satisfy the string value which // comes much sooner in the list of arguments and leave the initial // parameter unspecified) m_textCtrl->SetValue(wxFormat(m_format ) % m_value); if ( !value.empty() ) { double d; if ( value.ToDouble(&d) ) { m_value = d; m_textCtrl->SetValue(wxFormat(m_format ) % m_value); } } SetInitialSize(size); Move(pos); // have to disable this window to avoid interfering it with message // processing to the text and the button... but pretend it is enabled to // make IsEnabled() return true wxControl::Enable(false); // don't use non virtual Disable() here! m_isEnabled = true; // we don't even need to show this window itself - and not doing it avoids // that it overwrites the text control wxControl::Show(false); m_isShown = true; return true; } SlSpinCtrlGenericBase::~SlSpinCtrlGenericBase() { // delete the controls now, don't leave them alive even though they would // still be eventually deleted by our parent - but it will be too late, the // user code expects them to be gone now if (m_textCtrl) { // null this since MSW sends KILL_FOCUS on deletion, see ~SlSpinCtrlTextGeneric wxDynamicCast(m_textCtrl, SlSpinCtrlTextGeneric)->m_spin = NULL; SlSpinCtrlTextGeneric *text = (SlSpinCtrlTextGeneric*)m_textCtrl; m_textCtrl = NULL; delete text; } delete m_spinButton; m_spinButton = NULL; } // ---------------------------------------------------------------------------- // geometry // ---------------------------------------------------------------------------- wxSize SlSpinCtrlGenericBase::DoGetBestSize() const { wxSize sizeBtn = m_spinButton->GetBestSize(), sizeText = m_textCtrl->GetBestSize(); return wxSize(sizeBtn.x + sizeText.x + MARGIN, sizeText.y); } void SlSpinCtrlGenericBase::DoMoveWindow(int x, int y, int width, int height) { wxControl::DoMoveWindow(x, y, width, height); // position the subcontrols inside the client area wxSize sizeBtn = m_spinButton->GetSize(); wxCoord wText = width - sizeBtn.x; m_textCtrl->SetSize(x, y, wText, height); m_spinButton->SetSize(x + wText + MARGIN, y, wxDefaultCoord, height); } // ---------------------------------------------------------------------------- // operations forwarded to the subcontrols // ---------------------------------------------------------------------------- bool SlSpinCtrlGenericBase::Enable(bool enable) { if ( !wxControl::Enable(enable) ) return false; m_spinButton->Enable(enable); m_textCtrl->Enable(enable); return true; } bool SlSpinCtrlGenericBase::Show(bool show) { if ( !wxControl::Show(show) ) return false; // under GTK Show() is called the first time before we are fully // constructed if ( m_spinButton ) { m_spinButton->Show(show); m_textCtrl->Show(show); } return true; } bool SlSpinCtrlGenericBase::Reparent(wxWindowBase *newParent) { if ( m_spinButton ) { m_spinButton->Reparent(newParent); m_textCtrl->Reparent(newParent); } return true; } // ---------------------------------------------------------------------------- // Handle sub controls events // ---------------------------------------------------------------------------- void SlSpinCtrlGenericBase::OnSpinButton(wxSpinEvent& event) { event.Skip(); // Sync the textctrl since the user expects that the button will modify // what they see in the textctrl. if ( m_textCtrl && m_textCtrl->IsModified() ) SyncSpinToText(); int spin_value = event.GetPosition(); double step = (event.GetEventType() == wxEVT_SCROLL_LINEUP) ? 1 : -1; // Use the spinbutton's acceleration, if any, but not if wrapping around if (((spin_value >= 0) && (m_spin_value >= 0)) || ((spin_value <= 0) && (m_spin_value <= 0))) step *= abs(spin_value - m_spin_value); double value = AdjustToFitInRange(m_value + step*m_increment); // Ignore the edges when it wraps since the up/down event may be opposite // They are in GTK and Mac if (abs(spin_value - m_spin_value) > SPINCTRLBUT_MAX) { m_spin_value = spin_value; return; } m_spin_value = spin_value; if ( DoSetValue(value) ) DoSendEvent(); } void SlSpinCtrlGenericBase::OnTextEnter(wxCommandEvent& event) { SyncSpinToText(); DoSendEvent(); event.Skip(); } void SlSpinCtrlGenericBase::OnTextChar(wxKeyEvent& event) { if ( !HasFlag(wxSP_ARROW_KEYS) ) { event.Skip(); return; } double value = m_value; switch ( event.GetKeyCode() ) { case WXK_UP : value += m_increment; break; case WXK_DOWN : value -= m_increment; break; case WXK_PAGEUP : value += m_increment * 10.0; break; case WXK_PAGEDOWN : value -= m_increment * 10.0; break; default: event.Skip(); return; } value = AdjustToFitInRange(value); if ( m_textCtrl && m_textCtrl->IsModified() ) SyncSpinToText(); if ( DoSetValue(value) ) DoSendEvent(); } // ---------------------------------------------------------------------------- // Textctrl functions // ---------------------------------------------------------------------------- void SlSpinCtrlGenericBase::SyncSpinToText() { if (!m_textCtrl) return; double textValue; if ( m_textCtrl->GetValue().ToDouble(&textValue) ) { if (textValue > m_max) textValue = m_max; else if (textValue < m_min) textValue = m_min; if (m_value != textValue) { DoSetValue(textValue); } } else { // textctrl is out of sync, discard and reset DoSetValue(m_value); } } // ---------------------------------------------------------------------------- // changing value and range // ---------------------------------------------------------------------------- void SlSpinCtrlGenericBase::SetValue(const wxString& text) { wxCHECK_RET( m_textCtrl, wxT("invalid call to SlSpinCtrl::SetValue") ); double val; if ( text.ToDouble(&val) && InRange(val) ) { DoSetValue(val); } else // not a number at all or out of range { m_textCtrl->SetValue(text); m_textCtrl->SetSelection(0, -1); m_textCtrl->SetInsertionPointEnd(); } } bool SlSpinCtrlGenericBase::DoSetValue(double val) { wxCHECK_MSG( m_textCtrl, false, wxT("invalid call to SlSpinCtrl::SetValue") ); if (!InRange(val)) return false; if ( m_snap_to_ticks && (m_increment != 0) ) { double snap_value = val / m_increment; if (wxFinite(snap_value)) // FIXME what to do about a failure? { if ((snap_value - floor(snap_value)) < (ceil(snap_value) - snap_value)) val = floor(snap_value) * m_increment; else val = ceil(snap_value) * m_increment; } } wxString str(wxFormat(m_format) % val); if ((val != m_value) || (str != m_textCtrl->GetValue())) { m_value = val; str.ToDouble( &m_value ); // wysiwyg for textctrl m_textCtrl->SetValue( str ); m_textCtrl->SetInsertionPointEnd(); m_textCtrl->DiscardEdits(); return true; } return false; } double SlSpinCtrlGenericBase::AdjustToFitInRange(double value) const { if (value < m_min) value = HasFlag(wxSP_WRAP) ? m_max : m_min; if (value > m_max) value = HasFlag(wxSP_WRAP) ? m_min : m_max; return value; } void SlSpinCtrlGenericBase::DoSetRange(double min, double max) { m_min = min; m_max = max; } void SlSpinCtrlGenericBase::DoSetIncrement(double inc) { m_increment = inc; } void SlSpinCtrlGenericBase::SetSnapToTicks(bool snap_to_ticks) { m_snap_to_ticks = snap_to_ticks; DoSetValue(m_value); } void SlSpinCtrlGenericBase::SetSelection(long from, long to) { wxCHECK_RET( m_textCtrl, wxT("invalid call to SlSpinCtrl::SetSelection") ); m_textCtrl->SetSelection(from, to); } #endif // wxUSE_SPINBTN #endif // wxUSE_SPINCTRL springlobby-0.169/src/gui/spinctl/generic/spinctlg.h0000700000176000000410000001722612105760300024067 0ustar buildbotwww-data00000000000000///////////////////////////////////////////////////////////////////////////// // Name: wx/generic/spinctlg.h // Purpose: generic SlSpinCtrl class // Author: Vadim Zeitlin // Modified by: // Created: 28.10.99 // RCS-ID: $Id: spinctlg.h 62586 2009-11-10 17:36:53Z PC $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef SL_WX_GENERIC_SPINCTRL_H_ #define SL_WX_GENERIC_SPINCTRL_H_ // ---------------------------------------------------------------------------- // SlSpinCtrl is a combination of SlSpinButton and wxTextCtrl, so if // SlSpinButton is available, this is what we do - but if it isn't, we still // define SlSpinCtrl class which then has the same appearance as wxTextCtrl but // the different interface. This allows to write programs using SlSpinCtrl // without tons of #ifdefs. // ---------------------------------------------------------------------------- #if wxUSE_SPINBTN class SlSpinCtrlGenericBase; #include class SlSpinCtrlTextGeneric : public wxTextCtrl { public: SlSpinCtrlTextGeneric(SlSpinCtrlGenericBase *spin, const wxString& value, long style=0); virtual ~SlSpinCtrlTextGeneric(); void OnTextEnter(wxCommandEvent& event); void OnChar( wxKeyEvent &event ); void OnKillFocus(wxFocusEvent& event); SlSpinCtrlGenericBase *m_spin; private: DECLARE_EVENT_TABLE() }; // The !wxUSE_SPINBTN version's GetValue() function conflicts with the // wxTextCtrl's GetValue() and so you have to input a dummy int value. #define wxSPINCTRL_GETVALUE_FIX // ---------------------------------------------------------------------------- // SlSpinCtrlGeneric is a combination of wxTextCtrl and SlSpinButton // // This class manages a double valued generic spinctrl through the DoGet/SetXXX // functions that are made public as Get/SetXXX functions for int or double // for the SlSpinCtrl and SlSpinCtrlDouble classes respectively to avoid // function ambiguity. // ---------------------------------------------------------------------------- class SlSpinCtrlGenericBase : public SlSpinCtrlBase { public: SlSpinCtrlGenericBase() { Init(); } bool Create(wxWindow *parent, wxWindowID id = wxID_ANY, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxSP_ARROW_KEYS | wxALIGN_RIGHT, double min = 0, double max = 100, double initial = 0, double inc = 1, const wxString& name = wxT("SlSpinCtrl")); virtual ~SlSpinCtrlGenericBase(); // accessors // T GetValue() const // T GetMin() const // T GetMax() const // T GetIncrement() const virtual bool GetSnapToTicks() const { return m_snap_to_ticks; } // unsigned GetDigits() const - SlSpinCtrlDouble only // operations virtual void SetValue(const wxString& text); // void SetValue(T val) // void SetRange(T minVal, T maxVal) // void SetIncrement(T inc) virtual void SetSnapToTicks(bool snap_to_ticks); // void SetDigits(unsigned digits) - SlSpinCtrlDouble only // Select text in the textctrl void SetSelection(long from, long to); // implementation from now on // forward these functions to all subcontrols virtual bool Enable(bool enable = true); virtual bool Show(bool show = true); virtual bool Reparent(wxWindowBase *newParent); // get the subcontrols wxTextCtrl *GetText() const { return m_textCtrl; } wxSpinButton *GetSpinButton() const { return m_spinButton; } // forwarded events from children windows void OnSpinButton(wxSpinEvent& event); void OnTextEnter(wxCommandEvent& event); void OnTextChar(wxKeyEvent& event); friend class SlSpinCtrlTextGeneric; protected: // override the base class virtuals involved into geometry calculations virtual wxSize DoGetBestSize() const; virtual void DoMoveWindow(int x, int y, int width, int height); // generic double valued functions double DoGetValue() const { return m_value; } bool DoSetValue(double val); void DoSetRange(double min_val, double max_val); void DoSetIncrement(double inc); // Ensure that the textctrl shows correct value void SyncSpinToText(); // Send the correct event type virtual void DoSendEvent() = 0; // check if the value is in range bool InRange(double n) const { return (n >= m_min) && (n <= m_max); } // ensure that the value is in range wrapping it round if necessary double AdjustToFitInRange(double value) const; double m_value; double m_min; double m_max; double m_increment; bool m_snap_to_ticks; wxString m_format; int m_spin_value; // the subcontrols wxTextCtrl *m_textCtrl; wxSpinButton *m_spinButton; private: // common part of all ctors void Init(); }; #else // !wxUSE_SPINBTN #define wxSPINCTRL_GETVALUE_FIX int = 1 // ---------------------------------------------------------------------------- // SlSpinCtrl is just a text control // ---------------------------------------------------------------------------- #include "wx/textctrl.h" class SlSpinCtrlGenericBase : public wxTextCtrl { public: SlSpinCtrlGenericBase() : m_value(0), m_min(0), m_max(100), m_increment(1), m_snap_to_ticks(false), m_format(wxT("%g")) { } bool Create(wxWindow *parent, wxWindowID id = wxID_ANY, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxSP_ARROW_KEYS | wxALIGN_RIGHT, double min = 0, double max = 100, double initial = 0, double inc = 1, const wxString& name = wxT("SlSpinCtrl")) { m_min = min; m_max = max; m_value = initial; m_increment = inc; bool ok = wxTextCtrl::Create(parent, id, value, pos, size, style, wxDefaultValidator, name); DoSetValue(initial); return ok; } // accessors // T GetValue() const // T GetMin() const // T GetMax() const // T GetIncrement() const virtual bool GetSnapToTicks() const { return m_snap_to_ticks; } // unsigned GetDigits() const - SlSpinCtrlDouble only // operations virtual void SetValue(const wxString& text) { wxTextCtrl::SetValue(text); } // void SetValue(T val) // void SetRange(T minVal, T maxVal) // void SetIncrement(T inc) virtual void SetSnapToTicks(bool snap_to_ticks) { m_snap_to_ticks = snap_to_ticks; } // void SetDigits(unsigned digits) - SlSpinCtrlDouble only // Select text in the textctrl //void SetSelection(long from, long to); protected: // generic double valued double DoGetValue() const { double n; if ( (wxSscanf(wxTextCtrl::GetValue(), wxT("%lf"), &n) != 1) ) n = INT_MIN; return n; } bool DoSetValue(double val) { wxTextCtrl::SetValue(wxFormat(m_format.c_str(), val)); return true; } void DoSetRange(double min_val, double max_val) { m_min = min_val; m_max = max_val; } void DoSetIncrement(double inc) { m_increment = inc; } // Note: unused double m_value; double m_min; double m_max; double m_increment; bool m_snap_to_ticks; wxString m_format; }; #endif // wxUSE_SPINBTN/!wxUSE_SPINBTN #endif // _WX_GENERIC_SPINCTRL_H_ springlobby-0.169/src/gui/spinctl/generic/spinctrldouble.hh0000600000176000000410000000676512105760300025452 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SPINCTRLDOUBLE_H #define SPRINGLOBBY_HEADERGUARD_SPINCTRLDOUBLE_H //----------------------------------------------------------------------------- // SlSpinCtrlDouble //----------------------------------------------------------------------------- template class SlSpinCtrlDouble : public SlSpinCtrlGenericBase { public: SlSpinCtrlDouble() : m_parent_instance(0), m_digits(0) { } SlSpinCtrlDouble(ParentType *parent, wxWindowID id = wxID_ANY, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxSP_ARROW_KEYS | wxALIGN_RIGHT, double min = 0, double max = 100, double initial = 0, double inc = 1, const wxString& name = wxT("SlSpinCtrlDouble")) { m_digits = 0; Create((wxWindow*)parent, id, value, pos, size, style, min, max, initial, inc, name); } bool Create(ParentType *parent, wxWindowID id = wxID_ANY, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxSP_ARROW_KEYS | wxALIGN_RIGHT, double min = 0, double max = 100, double initial = 0, double inc = 1, const wxString& name = wxT("SlSpinCtrlDouble")) { m_parent_instance = parent; return SlSpinCtrlGenericBase::Create((wxWindow*)parent, id, value, pos, size, style, min, max, initial, inc, name); } // accessors double GetValue(wxSPINCTRL_GETVALUE_FIX) const { return DoGetValue(); } double GetMin() const { return m_min; } double GetMax() const { return m_max; } double GetIncrement() const { return m_increment; } unsigned GetDigits() const { return m_digits; } // operations void SetValue(const wxString& value) { SlSpinCtrlGenericBase::SetValue(value); } void SetValue(double value) { DoSetValue(value); } void SetRange(double minVal, double maxVal) { DoSetRange(minVal, maxVal); } void SetIncrement(double inc) { DoSetIncrement(inc); } void SetDigits(unsigned digits); protected: virtual void DoSendEvent(); ParentType* m_parent_instance; unsigned m_digits; // DECLARE_DYNAMIC_CLASS(SlSpinCtrlDouble) }; //----------------------------------------------------------------------------- // SlSpinCtrlDouble //----------------------------------------------------------------------------- //IMPLEMENT_DYNAMIC_CLASS(SlSpinCtrlDouble, SlSpinCtrlGenericBase) #include "../../../utils/debug.h" #include template void SlSpinCtrlDouble

::DoSendEvent() { SlSpinDoubleEvent event( SLEVT_COMMAND_SPINCTRLDOUBLE_UPDATED, GetId()); event.SetEventObject( this ); event.SetValue(m_value); event.SetString(m_textCtrl->GetValue()); m_parent_instance->OnSpinCtrlDoubleChange( event ); // if ( !GetEventHandler()->ProcessEvent( event ) ) // wxLogError( _T("BULLSHIT") ); } template void SlSpinCtrlDouble

::SetDigits(unsigned digits) { wxCHECK_RET( digits <= 20, "too many digits for SlSpinCtrlDouble" ); m_format.Printf(wxT("%%0.%ulf"), digits); DoSetValue(m_value); } #endif springlobby-0.169/src/gui/spinctl/spinctrl.h0000700000176000000410000000773212105760300022467 0ustar buildbotwww-data00000000000000///////////////////////////////////////////////////////////////////////////// // Name: spinctrl.h // Purpose: wxSpinCtrlBase class // Author: Vadim Zeitlin // Modified by: // Created: 22.07.99 // RCS-ID: $Id: spinctrl.h 58757 2009-02-08 11:45:59Z VZ $ // Copyright: (c) Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef SL_WX_SPINCTRL_H_ #define SL_WX_SPINCTRL_H_ #include "wx/defs.h" #include #if 0 //HAVE_WX29 #else #if wxUSE_SPINCTRL #include "wx/spinbutt.h" // should make wxSpinEvent visible to the app // Events class SlSpinDoubleEvent; static const wxEventType SLEVT_COMMAND_SPINCTRLDOUBLE_UPDATED = wxNewEventType(); //const wxEventType SLEVT_COMMAND_SPINCTRL_UPDATED = wxNewEventType(); // ---------------------------------------------------------------------------- // A spin ctrl is a text control with a spin button which is usually used to // prompt the user for a numeric input. // There are two kinds for number types T=integer or T=double. // ---------------------------------------------------------------------------- class SlSpinCtrlBase : public wxControl { public: SlSpinCtrlBase() {} // accessor functions that derived classes are expected to have // T GetValue() const // T GetMin() const // T GetMax() const // T GetIncrement() const virtual bool GetSnapToTicks() const = 0; // unsigned GetDigits() const - SlSpinCtrlDouble only // operation functions that derived classes are expected to have virtual void SetValue(const wxString& value) = 0; // void SetValue(T val) // void SetRange(T minVal, T maxVal) // void SetIncrement(T inc) virtual void SetSnapToTicks(bool snap_to_ticks) = 0; // void SetDigits(unsigned digits) - SlSpinCtrlDouble only // Select text in the textctrl virtual void SetSelection(long from, long to) = 0; private: DECLARE_NO_COPY_CLASS(SlSpinCtrlBase) }; // ---------------------------------------------------------------------------- // wxSpinDoubleEvent - a wxSpinEvent for double valued controls // ---------------------------------------------------------------------------- class SlSpinDoubleEvent : public wxNotifyEvent { public: SlSpinDoubleEvent(wxEventType commandType = wxEVT_NULL, int winid = 0, double value = 0) : wxNotifyEvent(commandType, winid), m_value(value) { } SlSpinDoubleEvent(const SlSpinDoubleEvent& event) : wxNotifyEvent(event), m_value(event.GetValue()) { } double GetValue() const { return m_value; } void SetValue(double value) { m_value = value; } virtual wxEvent *Clone() const { return new SlSpinDoubleEvent(*this); } protected: double m_value; private: DECLARE_DYNAMIC_CLASS_NO_ASSIGN(SlSpinDoubleEvent) }; // ---------------------------------------------------------------------------- // wxSpinDoubleEvent event type, see also wxSpinEvent in wx/spinbutt.h // ---------------------------------------------------------------------------- typedef void (wxEvtHandler::*SlSpinDoubleEventFunction)(SlSpinDoubleEvent&); #define SlSpinDoubleEventHandler(func) \ (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(SlSpinDoubleEventFunction, &func) //#define wxCommandEventHandler(func) // (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxCommandEventFunction, &func) // macros for handling spinctrl events //#define EVT_SLSPINCTRL(id, fn) // wx__DECLARE_EVT1(SLEVT_COMMAND_SPINCTRL_UPDATED, id, SlSpinEventHandler(fn)) #define EVT_SLSPINCTRLDOUBLE(id, fn) \ wx__DECLARE_EVT1(SLEVT_COMMAND_SPINCTRLDOUBLE_UPDATED, id, SlSpinDoubleEventHandler(fn)) //the common stuff #include "generic/spinctlg.h" //the actual tempalte class, seperated to avoid multiple definition conflicts #include "generic/spinctrldouble.hh" #endif // wxUSE_SPINCTRL #endif // _WX_SPINCTRL_H_ #endif //#ifdef HAVE_WX29 springlobby-0.169/src/gui/statusbar.cpp0000600000176000000410000000142412105760300021507 0ustar buildbotwww-data00000000000000#include "statusbar.h" #include "../updater/updatehelper.h" #include "../utils/platform.h" #include "../utils/conversion.h" Statusbar::Statusbar( wxWindow* parent ) :wxStatusBar( parent, wxNewId() ), m_addMessageSink( this, &GetStatusEventSender(UiEvents::addStatusMessage) ), m_removeMessageSink( this, &GetStatusEventSender(UiEvents::removeStatusMessage) ) { int w[3] = {-1,-1,120}; SetFieldsCount( 3, w ); PushStatusText( wxFormat( _T("%s %s") ) % GetAppName() % GetSpringLobbyVersion(), 1 ); } void Statusbar::OnAddMessage( UiEvents::StatusData data ) { #ifndef __WXMSW__ PushStatusText( data.first, data.second ); #endif } void Statusbar::OnRemoveMessage( UiEvents::StatusData data ) { #ifndef __WXMSW__ PopStatusText( data.second ); #endif } springlobby-0.169/src/gui/statusbar.h0000600000176000000410000000107312105760300021154 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_STATUSBAR_H #define SPRINGLOBBY_HEADERGUARD_STATUSBAR_H #include #include "../utils/uievents.h" class Statusbar : public wxStatusBar { public: Statusbar( wxWindow* parent ); void OnAddMessage ( UiEvents::StatusData data ); void OnRemoveMessage( UiEvents::StatusData data ); protected: EventReceiverFunc< Statusbar, UiEvents::StatusData, &Statusbar::OnAddMessage > m_addMessageSink; EventReceiverFunc< Statusbar, UiEvents::StatusData, &Statusbar::OnRemoveMessage > m_removeMessageSink; }; #endif // STATUSBAR_H springlobby-0.169/src/gui/toasternotification.cpp0000600000176000000410000000371312105760300023572 0ustar buildbotwww-data00000000000000#include "toasternotification.h" #include "../toasterbox/ToasterBox.h" #include "../settings.h" ToasterNotification::ToasterNotification( wxWindow* parent ) :m_toasterbox( new ToasterBox( parent ) ), m_width(330), m_height(80), m_x_offset(30), m_y_offset(30) { m_toasterbox->SetPopupSize(m_width, m_height ); m_toasterbox->SetPopupBackgroundColor(0,0,0); m_toasterbox->SetPopupTextColor(255,255,255); // m_toasterbox->SetPopupScrollSpeed(pScrollSpeed); } void ToasterNotification::Show(const wxBitmap& /*icon*/, const size_t pos, const UiEvents::NotficationData& data ) { m_toasterbox->SetPopupPauseTime(sett().GetNotificationPopupDisplayTime()*1000); // m_toasterbox->SetPopupBitmap( icon ); //call this before showing everytime to accout for desktop resolution changes SetPopupPosition( pos ); m_toasterbox->SetPopupText( data.second, false); m_toasterbox->Play(); } ToasterNotification::~ToasterNotification() { if ( m_toasterbox ) { m_toasterbox->CleanList(); } delete m_toasterbox; m_toasterbox = 0; } void ToasterNotification::SetPopupPosition( const size_t pos ) { int dim_x = wxSystemSettings::GetMetric( wxSYS_SCREEN_X ); int dim_y = wxSystemSettings::GetMetric( wxSYS_SCREEN_Y ); switch ( size_t(pos) ) { case ScreenPosition::bottom_left : m_toasterbox->SetPopupPosition( 0 + m_x_offset, dim_y - m_height - m_y_offset ); m_toasterbox->SetStackDirection( ToasterBox::StackUp ); break; case ScreenPosition::top_left : m_toasterbox->SetPopupPosition( 0 + m_x_offset, 0 + m_y_offset ); m_toasterbox->SetStackDirection( ToasterBox::StackDown ); break; case ScreenPosition::top_right : m_toasterbox->SetPopupPosition( dim_x - m_width - m_x_offset, 0 + m_y_offset ); m_toasterbox->SetStackDirection( ToasterBox::StackDown ); break; default://bottom_right m_toasterbox->SetPopupPosition( dim_x - m_width - m_x_offset, dim_y - m_height - m_y_offset ); m_toasterbox->SetStackDirection( ToasterBox::StackUp ); break; } } springlobby-0.169/src/gui/toasternotification.h0000600000176000000410000000216012105760300023232 0ustar buildbotwww-data00000000000000#ifndef TOASTERNOTIFICATION_H #define TOASTERNOTIFICATION_H #include "inotification.h" class ToasterBox; class ToasterNotification : public INotification { public: ToasterNotification(wxWindow* parent); virtual ~ToasterNotification(); virtual void Show(const wxBitmap& icon, const size_t pos, const UiEvents::NotficationData& data ); protected: void SetPopupPosition( const size_t pos ); ToasterBox* m_toasterbox; int m_width,m_height,m_x_offset,m_y_offset; }; #endif // TOASTERNOTIFICATION_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/gui/windowattributespickle.cpp0000600000176000000410000000347012105760300024310 0ustar buildbotwww-data00000000000000#include "windowattributespickle.h" #include "../settings.h" WindowAttributesPickle::WindowAttributesPickle( const wxString& name, wxTopLevelWindow* window, const wxSize& default_size ) : m_name( name ), m_window( window ), m_default_size( default_size ) { LoadAttributes(); } void WindowAttributesPickle::LoadAttributes() { wxPoint pos = sett().GetWindowPos( m_name, wxDefaultPosition ); wxSize size = sett().GetWindowSize( m_name, m_default_size ); m_window->SetSize( pos.x , pos.y, size.GetWidth(), size.GetHeight() ); #ifndef __WXMAC__ m_window->Maximize( sett().GetWindowMaximized( m_name ) ); #endif } WindowAttributesPickle::~WindowAttributesPickle() { SaveAttributes(); } void WindowAttributesPickle::SaveAttributes() { sett().SetWindowSize( m_name, m_window->GetSize() ); sett().SetWindowPos( m_name, m_window->GetPosition() ); #ifndef __WXMAC__ sett().GetWindowMaximized( m_name, m_window->IsMaximized() ); #endif sett().SaveSettings(); } WindowHintsPickle::WindowHintsPickle( const wxString& name, wxTopLevelWindow* window, const wxSize& default_size ) : m_name( name ), m_window( window ), m_default_size( default_size ) { LoadAttributes(); } void WindowHintsPickle::LoadAttributes() { wxPoint pos = sett().GetWindowPos( m_name, wxDefaultPosition ); wxSize size = sett().GetWindowSize( m_name, m_default_size ); m_window->SetPosition( pos ); m_window->SetSizeHints( size ); #ifndef __WXMAC__ m_window->Maximize( sett().GetWindowMaximized( m_name ) ); #endif } WindowHintsPickle::~WindowHintsPickle() { SaveAttributes(); } void WindowHintsPickle::SaveAttributes() { sett().SetWindowSize( m_name, m_window->GetSize() ); sett().SetWindowPos( m_name, m_window->GetPosition() ); #ifndef __WXMAC__ sett().GetWindowMaximized( m_name, m_window->IsMaximized() ); #endif sett().SaveSettings(); } springlobby-0.169/src/gui/windowattributespickle.h0000600000176000000410000000171612105760300023756 0ustar buildbotwww-data00000000000000#ifndef WINDOWATTRIBUTESPICKLE_H #define WINDOWATTRIBUTESPICKLE_H #include #include #include "../utils/mixins.hh" class wxSize; //! automagically load/save window size and position in ctor/dtor class WindowAttributesPickle : public SL::NonCopyable { public: WindowAttributesPickle( const wxString& name, wxTopLevelWindow* window, const wxSize& default_size ); virtual ~WindowAttributesPickle(); protected: void SaveAttributes(); void LoadAttributes(); private: const wxString m_name; wxTopLevelWindow* m_window; const wxSize m_default_size; }; class WindowHintsPickle : public SL::NonCopyable { public: WindowHintsPickle ( const wxString& name, wxTopLevelWindow* window, const wxSize& default_size ); virtual ~WindowHintsPickle (); protected: void SaveAttributes(); void LoadAttributes(); private: const wxString m_name; wxTopLevelWindow* m_window; const wxSize m_default_size; }; #endif // WINDOWATTRIBUTESPICKLE_H springlobby-0.169/src/gui/wxbackgroundimage.cpp0000600000176000000410000000350112105760300023176 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include "wxbackgroundimage.h" #include #include #include #include #if 1 bool wxBackgroundBitmap::ProcessEvent(wxEvent &Event) { if(Event.GetEventType() == wxEVT_ERASE_BACKGROUND) { if(Bitmap.IsOk()) { } else Event.Skip(); } else if(Event.GetEventType() == wxEVT_PAINT) { bool TransactionIsOk = false; if(Bitmap.IsOk()) { wxWindow * TempWindow = wxDynamicCast(Event.GetEventObject(),wxWindow); if(TempWindow) { wxAutoBufferedPaintDC DC(TempWindow); int w, h; TempWindow->GetClientSize(&w, &h); wxSize current( w,h); if ( current != m_lastSize ) { wxImage TempImage = Bitmap.ConvertToImage(); TempImage.Rescale(w,h); Bitmap = wxBitmap( TempImage ); } DC.DrawBitmap(Bitmap, 0, 0, false); m_lastSize = current; TransactionIsOk = true; } } if(TransactionIsOk == false) Event.Skip(); } else if(Event.GetEventType() == wxEVT_SIZE) { wxWindow * TempWindow = wxDynamicCast(Event.GetEventObject(),wxWindow); if(TempWindow) { TempWindow->Refresh(); } Event.Skip(); } else return Inherited::ProcessEvent(Event); return true; } #else bool wxBackgroundBitmap::ProcessEvent(wxEvent &Event) { if (Event.GetEventType() == wxEVT_ERASE_BACKGROUND) { wxEraseEvent &EraseEvent = dynamic_cast(Event); wxDC *DC = EraseEvent.GetDC(); DC->DrawBitmap(Bitmap, 0, 0, false); return true; } else return Inherited::ProcessEvent(Event); } #endif springlobby-0.169/src/gui/wxbackgroundimage.h0000600000176000000410000000130312105760300022641 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_WXBACKGROUNDIMAGE_H #define SPRINGLOBBY_HEADERGUARD_WXBACKGROUNDIMAGE_H #include #include /** Usage: ToolBarBackground = new wxBackgroundBitmap(wxBITMAP("test")); ToolBar->PushEventHandler(ToolBarBackground); **/ class wxBackgroundBitmap : public wxEvtHandler { typedef wxEvtHandler Inherited; public: wxBackgroundBitmap(const wxBitmap &B) : wxEvtHandler(), Bitmap(B), m_lastSize(wxDefaultSize) { } virtual bool ProcessEvent(wxEvent &Event); protected: wxBitmap Bitmap; wxSize m_lastSize; }; //copied from http://forum.wxwidgets.org/viewtopic.php?t=10019 #endif // SPRINGLOBBY_HEADERGUARD_WXBACKGROUNDIMAGE_H springlobby-0.169/src/hosting/CMakeLists.txt0000600000176000000410000000040212105760300022415 0ustar buildbotwww-data00000000000000add_sources(springlobbySrc addbotdialog.cpp autobalancedialog.cpp autohost.cpp battlemaptab.cpp battleoptionstab.cpp battleroomlistctrl.cpp battleroomtab.cpp hostbattledialog.cpp mainjoinbattletab.cpp mainsingleplayertab.cpp mmoptionwindows.cpp )springlobby-0.169/src/hosting/addbotdialog.cpp0000600000176000000410000002357412105760300023015 0ustar buildbotwww-data00000000000000#include "addbotdialog.h" #include #include #include #include #include #include #include #include #include #include "settings.h" #include "utils/controls.h" #include "uiutils.h" #include "battle.h" #include "springunitsync.h" #include "mmoptionwindows.h" #include "utils/conversion.h" #include "utils/customdialogs.h" BEGIN_EVENT_TABLE( AddBotDialog, wxDialog ) EVT_BUTTON( ADDBOT_CANCEL, AddBotDialog::OnClose ) EVT_BUTTON( ADDBOT_ADD, AddBotDialog::OnAddBot ) EVT_CHOICE( ADDBOT_AI, AddBotDialog::OnSelectBot ) EVT_LIST_ITEM_ACTIVATED ( ADDBOT_OPTIONLIST, AddBotDialog::OnOptionActivate ) END_EVENT_TABLE() AddBotDialog::AddBotDialog( wxWindow* parent, IBattle& battle , bool singleplayer) : wxDialog( parent, wxID_ANY, _("Add bot"), wxDefaultPosition, wxDefaultSize, wxRESIZE_BORDER | wxDEFAULT_DIALOG_STYLE ), WindowAttributesPickle( _T("ADDBOTDIALOG"), this, wxSize(-1, 255) ), m_battle( battle ), m_sp(singleplayer) { //this->SetSizeHints( wxDefaultSize, wxDefaultSize ); m_main_sizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* m_nick_sizer; m_nick_sizer = new wxBoxSizer( wxHORIZONTAL ); m_nick_lbl = new wxStaticText( this, wxID_ANY, _("Nickname:"), wxDefaultPosition, wxDefaultSize, 0 ); m_nick_sizer->Add( m_nick_lbl, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); int bot = 1; wxString botname = wxString::Format( _T("Bot%d"), bot ); while ( m_battle.UserExists( botname ) ) { bot++; botname = wxString::Format( _T("Bot%d"), bot ); } m_nick = new wxTextCtrl( this, wxID_ANY, botname, wxDefaultPosition, wxDefaultSize, 0 ); m_nick_sizer->Add( m_nick, 2, wxALL, 5 ); m_main_sizer->Add( m_nick_sizer, 0, wxEXPAND, 5 ); wxBoxSizer* m_ai_sizer; m_ai_sizer = new wxBoxSizer( wxHORIZONTAL ); m_ai_lbl = new wxStaticText( this, wxID_ANY, _("AI:"), wxDefaultPosition, wxDefaultSize, 0 ); m_ai_sizer->Add( m_ai_lbl, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); m_ai = new wxChoice( this, ADDBOT_AI ); m_ai->SetToolTip( TE(_("Choose the AI library to use with this bot.") ) ); m_ai_sizer->Add( m_ai, 2, wxALL, 5 ); m_main_sizer->Add( m_ai_sizer, 0, wxEXPAND, 5 ); if ( usync().VersionSupports( SpringUnitSync::USYNC_GetSkirmishAI ) ) { m_ai_infos_lst = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER | wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_NO_HEADER ); wxListItem col; col.SetText( _("property") ); col.SetImage( -1 ); m_ai_infos_lst->InsertColumn( 0, col ); wxListItem col2; col2.SetText( _("value") ); col2.SetImage( -1 ); m_ai_infos_lst->InsertColumn( 1, col2 ); m_opts_list = new wxListCtrl( this, ADDBOT_OPTIONLIST, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER | wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_NO_HEADER ); wxListItem col3; col3.SetText( _("property") ); col3.SetImage( -1 ); m_opts_list->InsertColumn( 0, col3 ); wxListItem col4; col4.SetText( _("value") ); col4.SetImage( -1 ); m_opts_list->InsertColumn( 1, col4 ); m_info_sizer = new wxBoxSizer(wxVERTICAL); m_info_sizer->Add( m_ai_infos_lst, 1, wxALL|wxEXPAND ); m_info_sizer->Add( m_opts_list, 1, wxALL|wxEXPAND ); m_main_sizer->Add( m_info_sizer, 1, wxALL|wxEXPAND ); } else { m_main_sizer->AddStretchSpacer(); } m_buttons_sep = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); m_main_sizer->Add( m_buttons_sep, 0, wxALL|wxEXPAND ); wxBoxSizer* m_buttons_sizer; m_buttons_sizer = new wxBoxSizer( wxHORIZONTAL ); m_cancel_btn = new wxButton( this, ADDBOT_CANCEL, _("Cancel"), wxDefaultPosition, wxSize(-1,CONTROL_HEIGHT), 0 ); m_buttons_sizer->Add( m_cancel_btn, 0, wxALL ); m_buttons_sizer->Add( 0, 0, 1, wxEXPAND ); m_add_btn = new wxButton( this, ADDBOT_ADD, _("Add Bot"), wxDefaultPosition, wxSize(-1,CONTROL_HEIGHT), 0 ); m_buttons_sizer->Add( m_add_btn, 0, wxALL ); m_main_sizer->Add( m_buttons_sizer, 0, wxEXPAND ); this->SetSizer( m_main_sizer ); this->Layout(); ReloadAIList(); m_add_btn->SetFocus(); } AddBotDialog::~AddBotDialog() {} wxString AddBotDialog::GetNick() { wxString s = m_nick->GetValue(); s.Replace( _T(" "), _T("_") ); return s; } wxString AddBotDialog::GetAIShortName() { wxArrayString infos = usync().GetAIInfos( m_ai->GetSelection() ); int namepos = infos.Index( _T("shortName") ); if ( namepos == wxNOT_FOUND ) return m_ais[ m_ai->GetSelection() ]; return infos[namepos +1]; } wxString AddBotDialog::GetAIVersion() { wxArrayString infos = usync().GetAIInfos( m_ai->GetSelection() ); int namepos = infos.Index( _T("version") ); if ( namepos == wxNOT_FOUND ) return _T(""); return infos[namepos +1]; } int AddBotDialog::GetAIType() { return m_ai->GetSelection(); } wxString AddBotDialog::RefineAIName( const wxString& name ) { wxString ret = name; if ( !usync().VersionSupports( SpringUnitSync::USYNC_GetSkirmishAI ) ) { if ( ret.Find(_T('.')) != wxNOT_FOUND ) ret = ret.BeforeLast(_T('.')); if ( ret.Find(_T('/')) != wxNOT_FOUND ) ret = ret.AfterLast(_T('/')); if ( ret.Find(_T('\\')) != wxNOT_FOUND ) ret = ret.AfterLast(_T('\\')); if ( ret.Find(_T("LuaAI:")) != wxNOT_FOUND ) ret = ret.AfterFirst(_T(':')); } if ( m_ai->FindString( ret ) == wxNOT_FOUND ) return ret; wxString ret2; int i = 2; do { ret2 = ret + wxFormat( _T(" (%d)") ) % i; i++; } while ( m_ai->FindString( ret2 ) != wxNOT_FOUND ); return ret2; } wxString AddBotDialog::GetAiRawName() { // if ( m_ais.GetCount() < m_ai->GetSelection() ) // return wxEmptyString; return m_ais[m_ai->GetSelection()]; } void AddBotDialog::ReloadAIList() { try { m_ais = usync().GetAIList( m_battle.GetHostModName() ); } catch (...) {} m_ai->Clear(); for ( unsigned int i = 0; i < m_ais.GetCount(); i++ ) m_ai->Append( RefineAIName(m_ais[i]) ); if ( m_ais.GetCount() > 0 ) { m_ai->SetStringSelection( sett().GetLastAI() ); if ( m_ai->GetStringSelection() == wxEmptyString ) m_ai->SetSelection( 0 ); } else { customMessageBox(SL_MAIN_ICON, _("No AI bots found in your Spring installation."), _("No bot-libs found"), wxOK ); } m_add_btn->Enable( m_ai->GetStringSelection() != wxEmptyString ); ShowAIInfo(); ShowAIOptions(); } void AddBotDialog::OnClose( wxCommandEvent& /*event*/ ) { EndModal( wxID_CANCEL ); } void AddBotDialog::OnAddBot( wxCommandEvent& /*event*/ ) { sett().SetLastAI( m_ai->GetStringSelection() ); EndModal( wxID_OK ); } void AddBotDialog::OnSelectBot( wxCommandEvent& /*unused*/ ) { ShowAIInfo(); ShowAIOptions(); } void AddBotDialog::ShowAIInfo() { m_add_btn->Enable( m_ai->GetStringSelection() != wxEmptyString ); if ( !usync().VersionSupports( SpringUnitSync::USYNC_GetSkirmishAI ) ) return; m_ai_infos_lst->DeleteAllItems(); wxArrayString info = usync().GetAIInfos( GetAIType() ); int count = info.GetCount(); for ( int i = 0; i < count; i = i + 3 ) { long index = m_ai_infos_lst->InsertItem( i, info[i] ); m_ai_infos_lst->SetItem( index, 0, info[i] ); m_ai_infos_lst->SetItem( index, 1, info[i+1] ); } m_ai_infos_lst->SetColumnWidth( 0, wxLIST_AUTOSIZE ); m_ai_infos_lst->SetColumnWidth( 1, wxLIST_AUTOSIZE ); Layout(); SetSize( wxDefaultSize ); } void AddBotDialog::ShowAIOptions() { if ( !usync().VersionSupports( SpringUnitSync::USYNC_GetSkirmishAI ) ) return; m_opts_list->DeleteAllItems(); m_opt_list_map.clear(); m_battle.CustomBattleOptions().loadAIOptions( m_battle.GetHostModName(), GetAIType(), GetNick() ); AddMMOptionsToList( 0, m_battle.CustomBattleOptions().GetAIOptionIndex( GetNick() ) ); m_opts_list->SetColumnWidth( 0, wxLIST_AUTOSIZE ); m_opts_list->SetColumnWidth( 1, wxLIST_AUTOSIZE ); Layout(); SetSize( wxDefaultSize ); } long AddBotDialog::AddMMOptionsToList( long pos, int optFlag ) { OptionsWrapper::wxStringTripleVec optlist = m_battle.CustomBattleOptions().getOptions( (OptionsWrapper::GameOption)optFlag ); for ( OptionsWrapper::wxStringTripleVec::const_iterator it = optlist.begin(); it != optlist.end(); ++it ) { m_opts_list->InsertItem( pos, it->second.first ); wxString tag = wxFormat( _T( "%d_%s" ) ) % optFlag % it->first; m_opt_list_map[ tag ] = pos; UpdateOption( tag ); pos++; } return pos; } void AddBotDialog::UpdateOption( const wxString& Tag ) { long index = m_opt_list_map[ Tag ]; OptionsWrapper::GameOption type = ( OptionsWrapper::GameOption )s2l( Tag.BeforeFirst( '_' ) ); wxString key = Tag.AfterFirst( '_' ); wxString value; OptionType DataType = m_battle.CustomBattleOptions().GetSingleOptionType( key ); value = m_battle.CustomBattleOptions().getSingleValue( key, ( OptionsWrapper::GameOption )type ); if ( m_battle.CustomBattleOptions().getDefaultValue( key, type ) == value ) m_opts_list->SetItemFont( index, wxFont( 8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT ) ); else m_opts_list->SetItemFont( index, wxFont( 8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD ) ); if ( DataType == opt_bool ) { value = bool2yn( s2l( value ) ); // convert from 0/1 to literal Yes/No } else if ( DataType == opt_list ) { value = m_battle.CustomBattleOptions().GetNameListOptValue( key, type ); // get the key full name not short key } m_opts_list->SetItem( index, 1, value ); m_opts_list->SetColumnWidth( 1, wxLIST_AUTOSIZE ); } void AddBotDialog::OnOptionActivate( wxListEvent& event ) { long index = event.GetIndex(); wxString tag; for ( OptionListMap::const_iterator itor = m_opt_list_map.begin(); itor != m_opt_list_map.end(); ++itor ) { if ( itor->second == index ) { tag = itor->first; break; } } OptionsWrapper& optWrap = m_battle.CustomBattleOptions(); OptionsWrapper::GameOption optFlag = ( OptionsWrapper::GameOption )s2l( tag.BeforeFirst( '_' ) ); wxString key = tag.AfterFirst( '_' ); OptionType type = optWrap.GetSingleOptionType( key ); if ( !optWrap.keyExists( key, optFlag, false, type ) ) return; SingleOptionDialog dlg( m_battle, tag ); dlg.ShowModal(); UpdateOption( tag ); } springlobby-0.169/src/hosting/addbotdialog.h0000600000176000000410000000477212105760300022461 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_ADDBOTDIALOG_H #define SPRINGLOBBY_HEADERGUARD_ADDBOTDIALOG_H #include #include "gui/windowattributespickle.h" #include class wxTextCtrl; class wxStaticText; class wxChoice; class wxStaticLine; class wxButton; class wxCommandEvent; class IBattle; class wxListCtrl; class wxBoxSizer; class wxListEvent; /** \brief used in SP/MP BattletAB to present choice of AIs to add * \todo DOCMEMORE */ class AddBotDialog : public wxDialog, public WindowAttributesPickle { public: AddBotDialog( wxWindow* parent, IBattle& battle, bool singleplayer = false ); ~AddBotDialog( ); wxString GetNick(); wxString GetAIShortName(); wxString GetAiRawName(); wxString GetAIVersion(); int GetAIType(); void ReloadAIList(); void ShowAIInfo(); void OnClose( wxCommandEvent& event ); void OnAddBot( wxCommandEvent& event ); void OnSelectBot( wxCommandEvent& event ); void OnOptionActivate( wxListEvent& event ); void UpdateOption( const wxString& Tag ); long AddMMOptionsToList( long pos, int optFlag ); void ShowAIOptions(); protected: AddBotDialog( const AddBotDialog& ); wxStaticText* m_nick_lbl; wxTextCtrl* m_nick; wxStaticText* m_ai_lbl; wxChoice* m_ai; wxStaticLine* m_buttons_sep; wxButton* m_cancel_btn; wxButton* m_add_btn; wxListCtrl* m_ai_infos_lst; wxListCtrl* m_opts_list; typedef std::map OptionListMap; OptionListMap m_opt_list_map; wxBoxSizer* m_main_sizer; wxBoxSizer* m_info_sizer; IBattle& m_battle; wxArrayString m_ais; bool m_sp; wxString RefineAIName( const wxString& name ); enum { ADDBOT_ADD = wxID_HIGHEST, ADDBOT_CANCEL, ADDBOT_AI, ADDBOT_OPTIONLIST }; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_ADDBOTDIALOG_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/hosting/autobalancedialog.cpp0000600000176000000410000001324412105760300024027 0ustar buildbotwww-data00000000000000#include "autobalancedialog.h" #include "settings.h" #include "utils/controls.h" #include "utils/conversion.h" //(*InternalHeaders(AutoBalanceDialog) #include #include #include #include #include #include //*) const long AutoBalanceDialog::ID_STATICTEXT1 = wxNewId(); const long AutoBalanceDialog::ID_METHOD = wxNewId(); const long AutoBalanceDialog::ID_STATICTEXT2 = wxNewId(); const long AutoBalanceDialog::ID_STATICTEXT3 = wxNewId(); const long AutoBalanceDialog::ID_CHOICE1 = wxNewId(); const long AutoBalanceDialog::ID_CHOICE2 = wxNewId(); const long AutoBalanceDialog::ID_STATICLINE1 = wxNewId(); const long AutoBalanceDialog::ID_CANCEL = wxNewId(); const long AutoBalanceDialog::ID_OK = wxNewId(); BEGIN_EVENT_TABLE(AutoBalanceDialog,wxDialog) END_EVENT_TABLE() AutoBalanceDialog::AutoBalanceDialog( wxWindow* parent, const BalanceOptions& defaultval, unsigned int maxnum ) { wxFlexGridSizer* m_choices_sizer; wxBoxSizer* m_buttons_sizer; wxBoxSizer* m_main_sizer; Create(parent, wxID_ANY, _("Autobalance players into teams"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, _T("wxID_ANY")); m_main_sizer = new wxBoxSizer(wxVERTICAL); m_choices_sizer = new wxFlexGridSizer(0, 2, wxDLG_UNIT(this,wxSize(4,0)).GetWidth(), wxDLG_UNIT(this,wxSize(10,0)).GetWidth()); m_method_label = new wxStaticText(this, ID_STATICTEXT1, _("Method"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1")); m_choices_sizer->Add(m_method_label, 0, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 0); m_method_choice = new wxChoice(this, ID_METHOD, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_METHOD")); m_method_choice->SetSelection( m_method_choice->Append(_("Divide ranks evenly")) ); m_method_choice->Append(_("Random")); m_choices_sizer->Add(m_method_choice, 0, wxALL|wxEXPAND|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 0); StaticText1 = new wxStaticText(this, ID_STATICTEXT2, _("Clans"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT2")); m_choices_sizer->Add(StaticText1, 0, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 0); m_clans_choice = new wxChoice(this, ID_CHOICE1, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_CHOICE1")); m_clans_choice->SetSelection( m_clans_choice->Append(_("None")) ); m_clans_choice->Append(_("Fair")); m_clans_choice->Append(_("Always")); m_clans_choice->SetToolTip(TE(_("Put members of same clan ( users having same clantag, like \'[smurfzor]Alice\' and \'[smurfzor]Bob\' ) together into same alliance. \nNone: nothing special for clans.\nFair: put clanmembers into alliance, unless this makes alliances unfair.\nAlways: always put clanmembers into alliance, even if that alliance is unfair."))); m_choices_sizer->Add(m_clans_choice, 0, wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 0); StaticText2 = new wxStaticText(this, ID_STATICTEXT3, _("Number of allies"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT3")); m_choices_sizer->Add(StaticText2, 0, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 0); m_group_choice = new wxChoice(this, ID_CHOICE2, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_CHOICE2")); m_group_choice->Append( _("Auto select") ); for ( unsigned int i = 1; i < (maxnum + 1); i++ ) m_group_choice->Append( TowxString( i ) ); m_choices_sizer->Add(m_group_choice, 0, wxALL|wxEXPAND|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 0); m_main_sizer->Add(m_choices_sizer, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); wxSize __SpacerSize_1 = wxDLG_UNIT(this,wxSize(0,0)); m_main_sizer->Add(__SpacerSize_1.GetWidth(),__SpacerSize_1.GetHeight(),0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); m_separator1 = new wxStaticLine(this, ID_STATICLINE1, wxDefaultPosition, wxSize(10,-1), wxLI_HORIZONTAL, _T("ID_STATICLINE1")); m_main_sizer->Add(m_separator1, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); m_buttons_sizer = new wxBoxSizer(wxHORIZONTAL); m_cancel_button = new wxButton(this, ID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CANCEL")); m_buttons_sizer->Add(m_cancel_button, 0, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); m_buttons_sizer->Add(0,0,1, wxALL|wxEXPAND|wxSHAPED|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); m_ok_button = new wxButton(this, ID_OK, _("Ok"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_OK")); m_buttons_sizer->Add(m_ok_button, 0, wxALL|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5); m_main_sizer->Add(m_buttons_sizer, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); SetSizer(m_main_sizer); m_main_sizer->Fit(this); m_main_sizer->SetSizeHints(this); Connect(ID_CANCEL,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&AutoBalanceDialog::OnCancel); Connect(ID_OK,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&AutoBalanceDialog::OnOk); m_method_choice->SetSelection( defaultval.type ); m_clans_choice->SetSelection( defaultval.respectclans + ( defaultval.respectclans && defaultval.strongclans ) ); m_group_choice->SetSelection( defaultval.groupingsize ); } AutoBalanceDialog::~AutoBalanceDialog() { } void AutoBalanceDialog::OnCancel(wxCommandEvent& /*unused*/) { EndModal( wxID_CANCEL ); } void AutoBalanceDialog::OnOk(wxCommandEvent& /*unused*/) { EndModal( wxID_OK ); } AutoBalanceDialog::BalanceOptions AutoBalanceDialog::GetResult() { BalanceOptions ret; ret.type = (IBattle::BalanceType)m_method_choice->GetSelection(); ret.respectclans = ( m_clans_choice->GetSelection() > 0 ); ret.strongclans = ( m_clans_choice->GetSelection() > 1 ); ret.groupingsize = m_group_choice->GetSelection(); return ret; } springlobby-0.169/src/hosting/autobalancedialog.h0000600000176000000410000000440612105760300023474 0ustar buildbotwww-data00000000000000#ifndef AUTOBALANCEDIALOG_H #define AUTOBALANCEDIALOG_H //(*Headers(AutoBalanceDialog) #include #include "ibattle.h" //*) class wxButton; class wxChoice; class wxStaticLine; class wxStaticText; /** \brief lets host automatically assign players to teams, optionally taking clan/rank into account * dialog sets balancing options in Settings handler for the calling class to use after modal display ends * \todo use this in a non-modal way? */ class AutoBalanceDialog: public wxDialog { public: struct BalanceOptions { IBattle::BalanceType type; bool respectclans; bool strongclans; int groupingsize; }; AutoBalanceDialog(wxWindow* parent, const BalanceOptions& defaultval, unsigned int maxnum = 16 ); virtual ~AutoBalanceDialog(); BalanceOptions GetResult(); //(*Declarations(AutoBalanceDialog) wxButton* m_ok_button; wxChoice* m_method_choice; wxStaticLine* m_separator1; wxStaticText* StaticText1; wxChoice* m_clans_choice; wxStaticText* m_method_label; wxButton* m_cancel_button; wxStaticText* StaticText2; wxChoice* m_group_choice; //*) protected: //(*Identifiers(AutoBalanceDialog) static const long ID_STATICTEXT1; static const long ID_METHOD; static const long ID_STATICTEXT2; static const long ID_STATICTEXT3; static const long ID_CHOICE1; static const long ID_CHOICE2; static const long ID_STATICLINE1; static const long ID_CANCEL; static const long ID_OK; //*) private: //(*Handlers(AutoBalanceDialog) void OnCancel(wxCommandEvent& event); void OnOk(wxCommandEvent& event); //*) DECLARE_EVENT_TABLE() }; #endif /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/hosting/autohost.cpp0000600000176000000410000002501112105760300022232 0ustar buildbotwww-data00000000000000/* Author: Tobi Vollebregt */ #include "autohost.h" #include "battle.h" #include "server.h" #include "settings.h" #include "user.h" #include "utils/conversion.h" #include "utils/misc.h" #include "utils/platform.h" #include AutoHost::AutoHost( Battle& battle ) : m_battle( battle ), m_enabled( false ), m_lastActionTime( 0 ) { } void AutoHost::SetEnabled( const bool enabled ) { m_enabled = enabled; } bool AutoHost::GetEnabled() const { return m_enabled; } void AutoHost::OnSaidBattle( const wxString& /*unused*/, const wxString& msg ) { // do nothing if autohost functionality is disabled if ( !m_enabled ) return; // protect against command spam time_t currentTime = time( NULL ); if ( ( currentTime - m_lastActionTime ) < 5 ) return; // check for autohost commands wxString command = msg.BeforeFirst( _T( ' ' ) ); wxString params = msg.AfterFirst( _T( ' ' ) ); if ( command == _T( "!start" ) ) { StartBattle(); } else if ( command == _T( "!balance" ) ) { unsigned int num = s2l( params ); m_battle.Autobalance( IBattle::balance_random, false, false, num ); m_battle.DoAction( _T( "is auto-balancing alliances ..." ) ); } else if ( command == _T( "!cbalance" ) ) { unsigned int num = s2l( params ); m_battle.Autobalance( IBattle::balance_random, true, false, num ); m_battle.DoAction( _T( "is auto-balancing alliances ..." ) ); } else if ( command == _T( "!help" ) ) { m_battle.DoAction( _T( "The following commands are available ( <> = mandatory value, {} = optional value ):" ) ); m_battle.DoAction( _T( "!addbox {allynumber}: adds a start restriction to the given coordinates, coordinates range from 0 to 200." ) ); m_battle.DoAction( _T( "!balance {number}: tries to put players into allyteams by how many start boxes there are, uses {number} allyteams if present." ) ); m_battle.DoAction( _T( "!cbalance {number}: see !balance but tries to put clanmates together first." ) ); m_battle.DoAction( _T( "!fixcolors: changes players duplicate colours so they are unique." ) ); m_battle.DoAction( _T( "!fixids {number}: tries to put players into control teams by number, if number is omitted it assignes as different controlteam per player." ) ); m_battle.DoAction( _T( "!cfixids {number}: see !fixids but tries to put clanmates together first." ) ); m_battle.DoAction( _T( "!help: this guide." ) ); m_battle.DoAction( _T( "!listprofiles: lists the available battle profiles." ) ); m_battle.DoAction( _T( "!loadprofile profilename: loads an available battle profile." ) ); m_battle.DoAction( _T( "!lock: prevents more people to join." ) ); m_battle.DoAction( _T( "!map : switches to ." ) ); m_battle.DoAction( _T( "!removebox : deletes start restriction's box." ) ); m_battle.DoAction( _T( "!ring {name}: rings players that are not ready or {name} if specified." ) ); m_battle.DoAction( _T( "!set : sets battle option to " ) ); m_battle.DoAction( _T( "!spectunsynced: sets all players with unsynced status to be spectators." ) ); m_battle.DoAction( _T( "!start: starts the battle." ) ); m_battle.DoAction( _T( "!unlock: opens the battle again." ) ); } else if ( command == _T( "!ring" ) ) { if ( !params.IsEmpty() ) { wxString user = GetBestMatch( m_userlist, params ); try { User& u = m_battle.GetUser( user ); m_battle.RingPlayer( u ); m_battle.DoAction( _T( "is ringing " ) + user ); } catch ( ... ) { m_battle.DoAction( _T( "cannot ring " ) + user ); } } else { m_battle.RingNotReadyPlayers(); m_battle.DoAction( _T( "is ringing players not ready ..." ) ); } } else if ( command == _T( "!listprofiles" ) ) { wxArrayString profilelist = m_battle.GetPresetList(); unsigned int count = profilelist.GetCount(); if ( count == 0 ) { m_battle.DoAction( _T( "There are no presets available." ) ); } else { m_battle.DoAction( _T( "The following presets are available:" ) ); for ( unsigned int i = 0; i < count; i++ ) { m_battle.DoAction( profilelist[i] ); } } } else if ( command == _T( "!loadprofile" ) ) { wxString profilename = GetBestMatch( m_battle.GetPresetList(), params ); if ( !m_battle.LoadOptionsPreset( profilename ) ) m_battle.DoAction( _T( "Profile not found, use !listprofiles for a list of available profiles." ) ); else m_battle.DoAction( _T( "has loaded profile: " ) + profilename ); } else if ( command == _T( "!fixcolors" ) ) { m_battle.FixColours(); m_battle.DoAction( _T( "is fixing colors." ) ); } else if ( command == _T( "!lock" ) ) { m_battle.SetIsLocked( true ); m_battle.DoAction( _T( "has locked the battle." ) ); m_battle.SendHostInfo( IBattle::HI_Locked ); } else if ( command == _T( "!unlock" ) ) { m_battle.SetIsLocked( false ); m_battle.DoAction( _T( "has unlocked the battle." ) ); m_battle.SendHostInfo( IBattle::HI_Locked ); } else if ( command == _T( "!fixids" ) ) { unsigned int num = s2l( params ); m_battle.FixTeamIDs( IBattle::balance_divide, false, false, num ); m_battle.DoAction( _T( "is auto-balancing control teams ..." ) ); } else if ( command == _T( "!cfixids" ) ) { unsigned int num = s2l( params ); m_battle.FixTeamIDs( IBattle::balance_divide, true, true, num ); m_battle.DoAction( _T( "is auto-balancing control teams ..." ) ); } else if ( command == _T( "!spectunsynced" ) ) { m_battle.ForceUnsyncedToSpectate(); m_battle.DoAction( _T( "is forcing unsynced players to be spectators." ) ); } else if ( command == _T( "!map" ) ) { if ( params.IsEmpty() ) m_battle.DoAction( _T( "cannot switch to void mapname" ) ); else { wxString mapname = GetBestMatch( usync().GetMapList(), params ); try { UnitSyncMap map = usync().GetMap( mapname ); m_battle.SetLocalMap( map ); m_battle.DoAction( _T( "is switching to map " ) + mapname ); m_battle.SendHostInfo( IBattle::HI_Map ); } catch ( ... ) { m_battle.DoAction( _T( "cannot switch to map " ) + mapname ); } } } else if ( command == _T( "!set" ) ) { wxString key = params.BeforeFirst( _T( ' ' ) ); wxString value = params.AfterFirst( _T( ' ' ) ); bool exists = m_battle.CustomBattleOptions().keyExists( key ); if ( exists ) { bool result = m_battle.CustomBattleOptions().setSingleOption( key, value ); if ( result ) { OptionsWrapper::GameOption section = m_battle.CustomBattleOptions().GetSection( key ); m_battle.SendHostInfo( wxFormat( _T( "%d_%s" ) ) % section % key ); m_battle.DoAction( _T( "has set option " ) + key + _T( " to value " ) + value ); } else m_battle.DoAction( _T( "cannot set option " ) + key + _T( " to value " ) + value + _T( ", reason: invalid value." ) ); } else { m_battle.DoAction( _T( "cannot find option entry " ) + key ); } } else if ( command == _T( "!addbox" ) ) { long allynumber; long topleftx; long toplefty; long bottomrightx; long bottomrighty; wxArrayString values = wxStringTokenize( params, _T( " " ) ); int numvalues = values.GetCount(); if ( numvalues > 4 || numvalues < 3 ) m_battle.DoAction( _T( "has recieved an invalid number of params for !addbox" ) ); else { bool valueok = values[0].ToLong( &topleftx ); valueok = valueok && values[1].ToLong( &toplefty ); valueok = valueok && values[2].ToLong( &bottomrightx ); valueok = valueok && values[3].ToLong( &bottomrighty ); if ( numvalues == 5 ) { valueok = valueok && values[4].ToLong( &allynumber ); valueok = valueok && ( allynumber > 0 ); } else { allynumber = m_battle.GetNextFreeRectIdx(); } valueok = valueok && ( topleftx >= 0 ) && ( topleftx <= 200 ); valueok = valueok && ( toplefty >= 0 ) && ( toplefty <= 200 ); valueok = valueok && ( bottomrightx >= 0 ) && ( bottomrightx <= 200 ); valueok = valueok && ( bottomrighty >= 0 ) && ( bottomrighty <= 200 ); if ( valueok ) { allynumber = allynumber - 1; BattleStartRect rect = m_battle.GetStartRect( allynumber ); if ( rect.IsOk() ) { m_battle.DoAction( _T( "cannot add a startbox for allyteam " ) + TowxString( allynumber ) + _T( " because one is already present." ) ); } else { m_battle.AddStartRect( allynumber, topleftx, toplefty, bottomrightx, bottomrighty ); m_battle.SendHostInfo( IBattle::HI_StartRects ); m_battle.DoAction( _T( "has added start box for allyteam " ) + TowxString( allynumber ) ); } } else { m_battle.DoAction( _T( "has recieved an invalid param for !addbox" ) ); } } } else if ( command == _T( "!removebox" ) ) { long boxnumber; bool numberok = params.ToLong( &boxnumber ); if ( numberok ) { boxnumber = boxnumber - 1; BattleStartRect rect = m_battle.GetStartRect( boxnumber ); if ( rect.IsOk() ) { m_battle.RemoveStartRect( boxnumber ); m_battle.SendHostInfo( IBattle::HI_StartRects ); m_battle.DoAction( _T( "has removed the start box for allyteam " ) + TowxString( boxnumber ) ); } else { m_battle.DoAction( _T( "cannot find start box " ) + params ); } } else { m_battle.DoAction( _T( "has recieved an invalid param to !removebox command" ) ); } } else return; m_lastActionTime = currentTime; } /// Should only be called if user isn't immediately kicked (ban / rank limit) void AutoHost::OnUserAdded( User& user ) { m_userlist.Add( user.GetNick() ); // do nothing if autohost functionality is disabled if ( !m_enabled ) return; m_battle.DoAction( wxFormat( _T( "Hi %s, this battle is in %s autohost mode. For help say !help" ) ) % user.GetNick() % GetAppName() ); } void AutoHost::OnUserRemoved( User& user ) { if ( m_userlist.Index( user.GetNick() ) != wxNOT_FOUND )//triggers assertion in arraystring otherwise m_userlist.Remove( user.GetNick() ); // do nothing if autohost functionality is disabled if ( !m_enabled ) return; if ( m_battle.GetNumUsers() == 1 && m_battle.IsLocked() ) { m_battle.SetIsLocked( false ); m_battle.DoAction( _T( "has auto-unlocked the battle." ) ); m_battle.SendHostInfo( IBattle::HI_Locked ); } } void AutoHost::StartBattle() { // todo: the logic here is copied from BattleRoomTab::OnStart, may wish to refactor this sometime. // note: the strings here must remain untranslated because they're visible to everyone in the battle! m_battle.GetMe().BattleStatus().ready = true; if ( !m_battle.IsEveryoneReady() ) { m_battle.DoAction( _T( "Some players are not ready yet." ) ); return; } m_battle.DoAction( _T( "is starting game ..." ) ); m_battle.StartHostedBattle(); m_battle.SaveMapDefaults(); // save map preset } springlobby-0.169/src/hosting/autohost.h0000600000176000000410000000261212105760300021701 0ustar buildbotwww-data00000000000000/* Author: Tobi Vollebregt */ #ifndef SPRINGLOBBY_HEADERGUARD_AUTOHOST_H #define SPRINGLOBBY_HEADERGUARD_AUTOHOST_H //including this header is only really needed for time_t .. #include #include class Battle; class User; class wxString; //! @brief Autohost logic class AutoHost { public: AutoHost( Battle& battle ); void SetEnabled( const bool enabled ); bool GetEnabled() const; void OnSaidBattle( const wxString& nick, const wxString& msg ); void OnUserAdded( User& user ); void OnUserRemoved( User& user ); private: void StartBattle(); Battle& m_battle; bool m_enabled; time_t m_lastActionTime; wxArrayString m_userlist; }; #endif // SPRINGLOBBY_HEADERGUARD_AUTOHOST_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/hosting/battlemaptab.cpp0000600000176000000410000002035712105760300023034 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: BattleMapTab // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "battlemaptab.h" #include "springunitsync.h" #include "ui.h" #include "user.h" #include "battle.h" #include "utils/debug.h" #include "utils/controls.h" #include "chatpanel.h" #include "mapctrl.h" #include "mapselectdialog.h" #include "uiutils.h" #include "server.h" #include "settings.h" #include "aui/auimanager.h" BEGIN_EVENT_TABLE( BattleMapTab, wxPanel ) EVT_CHOICE ( BMAP_MAP_SEL, BattleMapTab::OnMapSelect ) EVT_BUTTON ( BMAP_MAP_BROWSE, BattleMapTab::OnMapBrowse ) EVT_RADIOBOX ( BMAP_START_TYPE, BattleMapTab::OnStartTypeSelect ) EVT_MOUSEWHEEL ( BattleMapTab::OnMouseWheel ) END_EVENT_TABLE() BattleMapTab::BattleMapTab( wxWindow* parent, Battle* battle ) : wxScrolledWindow( parent, -1 ), m_battle( battle ) { GetAui().manager->AddPane( this, wxLEFT, _T( "battlemaptab" ) ); wxBoxSizer* m_main_sizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* m_map_sizer = new wxBoxSizer( wxVERTICAL ); m_map_sizer->SetMinSize( wxSize( 352, -1 ) ); m_minimap = new MapCtrl( this, 352, m_battle, true, false, true, false ); m_minimap->SetMinSize( wxSize( 352, 352 ) ); m_map_sizer->Add( m_minimap, 1, wxALL | wxEXPAND, 2 ); wxBoxSizer* m_selmap_sizer = new wxBoxSizer( wxHORIZONTAL ); m_map_combo = new wxChoice( this, BMAP_MAP_SEL, wxDefaultPosition, wxDefaultSize ); m_selmap_sizer->Add( m_map_combo, 1, wxALL, 2 ); m_browse_btn = new wxButton( this, BMAP_MAP_BROWSE, _( "Select" ), wxDefaultPosition, wxDefaultSize, 0 ); m_selmap_sizer->Add( m_browse_btn, 0, wxALL, 2 ); m_map_sizer->Add( m_selmap_sizer, 0, wxEXPAND, 5 ); m_main_sizer->Add( m_map_sizer, 1, wxEXPAND, 5 ); wxBoxSizer* m_opts_sizer = new wxBoxSizer( wxVERTICAL ); //m_opts_sizer->SetMinSize(wxSize( 200,-1 )); m_map_opts_list = new wxListCtrl( this, wxID_ANY, wxDefaultPosition, wxSize( 150, 160 ), wxLC_NO_HEADER | wxLC_REPORT ); m_map_opts_list->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); m_map_opts_list->SetFont( wxFont( 8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT ) ); wxListItem col; col.SetText( _( "Option" ) ); m_map_opts_list->InsertColumn( 0, col ); col.SetText( _( "Value" ) ); m_map_opts_list->InsertColumn( 1, col ); m_map_opts_list->SetColumnWidth( 0, 90 ); m_map_opts_list->SetColumnWidth( 1, 50 ); m_map_opts_list->InsertItem( 0, _( "Size" ) ); m_map_opts_list->InsertItem( 1, _( "Windspeed" ) ); m_map_opts_list->InsertItem( 2, _( "Tidal strength" ) ); m_map_opts_list->InsertItem( 3, _( "Gravity" ) ); m_map_opts_list->InsertItem( 4, _( "Extractor radius" ) ); m_map_opts_list->InsertItem( 5, _( "Max metal" ) ); m_opts_sizer->Add( m_map_opts_list, 0, wxALL, 2 ); wxString m_start_radiosChoices[] = { _( "Fixed" ), _( "Random" ), _( "Choose in game" ), _( "Chose before game" ) }; int m_start_radiosNChoices = sizeof( m_start_radiosChoices ) / sizeof( wxString ); //TODO these need to be tooltipped, no idea how yet m_start_radios = new wxRadioBox( this, BMAP_START_TYPE, _( "Startpositions" ), wxDefaultPosition, wxSize( 150, -1 ), m_start_radiosNChoices, m_start_radiosChoices, 1, wxRA_SPECIFY_COLS ); m_opts_sizer->Add( m_start_radios, 0, wxALL, 2 ); m_main_sizer->Add( m_opts_sizer, 0, wxEXPAND, 5 ); //m_main_sizer->AddStretchSpacer(); SetSizer( m_main_sizer ); Layout(); SetBattle( battle ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); Layout(); } BattleMapTab::~BattleMapTab() { if ( GetAui().manager ) GetAui().manager->DetachPane( this ); } void BattleMapTab::OnMouseWheel( wxMouseEvent& event ) { if ( m_minimap ) { wxRect map_rect = m_minimap->GetRect(); if ( map_rect.Contains( event.GetPosition() ) ) { m_minimap->OnMouseWheel( event ); return; } } event.Skip(); } void BattleMapTab::Update() { if ( !m_battle ) return; wxString value = m_battle->CustomBattleOptions().getSingleValue( _T( "startpostype" ), OptionsWrapper::EngineOption ); long longval; value.ToLong( &longval ); m_start_radios->SetSelection( longval ); m_minimap->UpdateMinimap(); if ( !m_battle->MapExists() ) return; UnitSyncMap map = m_battle->LoadMap(); m_map_opts_list->SetItem( 0, 1, wxFormat( _T( "%dx%d" ) ) % (map.info.width / 512) % (map.info.height / 512) ); m_map_opts_list->SetItem( 1, 1, wxFormat( _T( "%d-%d" ) ) % map.info.minWind % map.info.maxWind ); m_map_opts_list->SetItem( 2, 1, wxFormat( _T( "%d" ) ) % map.info.tidalStrength ); m_map_opts_list->SetItem( 3, 1, wxFormat( _T( "%d" ) ) % map.info.gravity ); m_map_opts_list->SetItem( 4, 1, wxFormat( _T( "%d" ) ) % map.info.extractorRadius ); m_map_opts_list->SetItem( 5, 1, wxFormat( _T( "%.3f" ) ) % map.info.maxMetal ); int index = m_map_combo->FindString( map.name ); if ( index == wxNOT_FOUND ) return; m_map_combo->SetSelection( index ); } void BattleMapTab::Update( const wxString& Tag ) { if ( !m_battle ) return; long type; Tag.BeforeFirst( '_' ).ToLong( &type ); wxString key = Tag.AfterFirst( '_' ); wxString value = m_battle->CustomBattleOptions().getSingleValue( key, ( OptionsWrapper::GameOption )type ); long longval; value.ToLong( &longval ); if ( type == OptionsWrapper::EngineOption ) { if ( key == _T( "startpostype" ) ) { m_start_radios->SetSelection( longval ); m_minimap->UpdateMinimap(); } } else if ( type == OptionsWrapper::PrivateOptions ) { if ( key == _T( "mapname" ) ) { Update(); } } } void BattleMapTab::ReloadMaplist() { if ( !m_battle ) return; m_map_combo->Clear(); wxArrayString maplist = usync().GetMapList(); // maplist.Sort(CompareStringIgnoreCase); size_t nummaps = maplist.Count(); for ( size_t i = 0; i < nummaps; i++ ) m_map_combo->Insert( maplist[i], i ); } void BattleMapTab::UpdateUser( User& user ) { if ( !m_battle ) return; if ( &m_battle->GetMe() == &user ) { try { m_minimap->UpdateMinimap(); } catch ( ... ) { } } } void BattleMapTab::SetMap( int index ) { if ( !m_battle ) return; try { UnitSyncMap map = usync().GetMapEx( index ); m_battle->SetLocalMap( map ); m_battle->SendHostInfo( IBattle::HI_Map ); } catch ( ... ) {} } void BattleMapTab::OnMapSelect( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; if ( !m_battle->IsFounderMe() ) { try { m_battle->DoAction( _T( "suggests " ) + usync().GetMap( m_map_combo->GetCurrentSelection() ).name ); } catch ( ... ) { } return; } SetMap( m_map_combo->GetCurrentSelection() ); } void BattleMapTab::OnMapBrowse( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxLogDebugFunc( _T( "" ) ); if ( mapSelectDialog().ShowModal() == wxID_OK && mapSelectDialog().GetSelectedMap() != NULL ) { wxString mapname = mapSelectDialog().GetSelectedMap()->name; wxLogDebugFunc( mapname ); if ( !m_battle->IsFounderMe() ) { m_battle->DoAction( _T( "suggests " ) + mapname ); return; } const int idx = m_map_combo->FindString( mapname, true /*case sensitive*/ ); if ( idx != wxNOT_FOUND ) SetMap( idx ); } } void BattleMapTab::OnStartTypeSelect( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxString pos = wxFormat( _T( "%d" ) ) % m_start_radios->GetSelection(); m_battle->CustomBattleOptions().setSingleOption( _T( "startpostype" ), pos, OptionsWrapper::EngineOption ); m_battle->SendHostInfo( wxFormat( _T( "%d_startpostype" ) ) % OptionsWrapper::EngineOption ); } void BattleMapTab::OnUnitsyncReloaded( GlobalEvents::GlobalEventData /*data*/ ) { if ( !m_battle ) return; ReloadMaplist(); } void BattleMapTab::SetBattle( Battle* battle ) { m_battle = battle; m_start_radios->Enable( m_battle ); m_minimap->Enable( m_battle ); m_map_combo->Enable( m_battle ); m_browse_btn->Enable( m_battle ); m_map_opts_list->Enable( m_battle ); m_minimap->SetBattle( m_battle ); if ( m_battle ) { m_minimap->SetReadOnly( !m_battle->IsFounderMe() ); m_start_radios->Enable( m_battle->IsFounderMe() ); ReloadMaplist(); Update(); } } springlobby-0.169/src/hosting/battlemaptab.h0000600000176000000410000000432612105760300022477 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_BATTLEMAPTAB_H #define SPRINGLOBBY_HEADERGUARD_BATTLEMAPTAB_H #include #include "utils/isink.h" class Ui; class Battle; class User; class ChatPanel; class wxCommandEvent; class wxBoxSizer; class wxComboBox; class wxStaticText; class wxSplitterWindow; class wxStaticLine; class wxButton; class wxCheckBox; class MapCtrl; class wxListCtrl; class wxChoice; class wxRadioBox; class wxMouseEvent; /** \brief select map, draw startboxes (in sp define startpos) * \todo DOCMEMORE */ class BattleMapTab : public wxScrolledWindow, public UnitsyncReloadedSink< BattleMapTab > { public: BattleMapTab( wxWindow* parent, Battle* battle ); ~BattleMapTab(); void UpdateUser( User& user ); void Update(); void Update( const wxString& Tag ); void ReloadMaplist(); void OnMapSelect( wxCommandEvent& event ); void OnMapBrowse( wxCommandEvent& event ); void OnStartTypeSelect( wxCommandEvent& event ); void OnMouseWheel( wxMouseEvent& event ); void OnUnitsyncReloaded( GlobalEvents::GlobalEventData /*data*/ ); void SetMap( int index ); void SetBattle( Battle* battle ); Battle* GetBattle() { return m_battle; } protected: Battle* m_battle; //UnitSyncMap m_map; MapCtrl* m_minimap; wxChoice* m_map_combo; wxButton* m_browse_btn; wxRadioBox* m_start_radios; wxListCtrl* m_map_opts_list; enum { BMAP_MAP_SEL = wxID_HIGHEST, BMAP_MAP_BROWSE, BMAP_START_TYPE }; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_BATTLEMAPTAB_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/hosting/battleoptionstab.cpp0000600000176000000410000002044412105760300023747 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007, 2008 The SpringLobby Team. All rights reserved. */ // // Class: BattleOptionsTab // #include "battleoptionstab.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "battleoptionstab.h" #include "springunitsync.h" #include "ibattle.h" #include "utils/controls.h" #include "server.h" #include "mmoptionswrapper.h" #include "aui/auimanager.h" BEGIN_EVENT_TABLE( BattleOptionsTab, wxPanel ) EVT_BUTTON( BOPTS_RESTRICT, BattleOptionsTab::OnRestrict ) EVT_BUTTON( BOPTS_ALLOW, BattleOptionsTab::OnAllow ) EVT_BUTTON( BOPTS_CLEARRES, BattleOptionsTab::OnClearRestrictions ) END_EVENT_TABLE() BattleOptionsTab::BattleOptionsTab( wxWindow* parent,IBattle* battle ) : wxScrolledWindow( parent, -1 ), m_battle( battle ) { GetAui().manager->AddPane( this, wxLEFT, _T( "battleoptionstab" ) ); wxBoxSizer* m_main_sizer; m_main_sizer = new wxBoxSizer( wxHORIZONTAL ); // wxBoxSizer* m_main_options_sizer; // m_main_options_sizer = new wxBoxSizer( wxVERTICAL ); wxStaticBoxSizer* m_restr_box; m_restr_box = new wxStaticBoxSizer( new wxStaticBox( this, -1, _( "Unit restrictions" ) ), wxVERTICAL ); wxBoxSizer* m_top_restr_sizer; m_top_restr_sizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* m_allowed_sizer; m_allowed_sizer = new wxBoxSizer( wxVERTICAL ); m_aloowed_lbl = new wxStaticText( this, wxID_ANY, _( "Allowed units" ), wxDefaultPosition, wxDefaultSize, 0 ); m_allowed_sizer->Add( m_aloowed_lbl, 0, wxALL, 5 ); m_allowed_list = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_MULTIPLE | wxLB_NEEDED_SB | wxLB_SORT ); m_allowed_list->SetToolTip( TE( _( "Units in this list will be available in the game." ) ) ); m_allowed_sizer->Add( m_allowed_list, 1, wxALL | wxEXPAND, 5 ); m_top_restr_sizer->Add( m_allowed_sizer, 1, wxEXPAND, 5 ); wxBoxSizer* m_mid_btn_sizer; m_mid_btn_sizer = new wxBoxSizer( wxVERTICAL ); m_mid_btn_sizer->Add( 0, 50, 0, wxEXPAND, 0 ); m_restrict_btn = new wxButton( this, BOPTS_RESTRICT, _T( ">" ), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); m_restrict_btn->SetToolTip( TE( _( "Disable selected units." ) ) ); m_mid_btn_sizer->Add( m_restrict_btn, 0, wxALL, 5 ); m_allow_btn = new wxButton( this, BOPTS_ALLOW, _T( "<" ), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); m_allow_btn->SetToolTip( TE( _( "Re-enable selected units." ) ) ); m_mid_btn_sizer->Add( m_allow_btn, 0, wxALL, 5 ); m_clear_btn = new wxButton( this, BOPTS_CLEARRES, _( "<<" ), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); m_clear_btn->SetToolTip( TE( _( "Enable all units." ) ) ); m_mid_btn_sizer->Add( m_clear_btn, 0, wxALL, 5 ); m_top_restr_sizer->Add( m_mid_btn_sizer, 0, wxEXPAND, 5 ); wxBoxSizer* m_restricted_sizer; m_restricted_sizer = new wxBoxSizer( wxVERTICAL ); m_restricted_lbl = new wxStaticText( this, wxID_ANY, _( "Restricted units" ), wxDefaultPosition, wxDefaultSize, 0 ); m_restricted_sizer->Add( m_restricted_lbl, 0, wxALL, 5 ); m_restrict_list = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_MULTIPLE | wxLB_NEEDED_SB | wxLB_SORT ); m_restrict_list->SetToolTip( TE( _( "Units in this list will not be available in the game." ) ) ); m_restricted_sizer->Add( m_restrict_list, 1, wxALL | wxEXPAND, 5 ); m_top_restr_sizer->Add( m_restricted_sizer, 1, wxEXPAND, 5 ); m_restr_box->Add( m_top_restr_sizer, 1, wxEXPAND, 5 ); m_main_sizer->Add( m_restr_box, 1, wxALL | wxEXPAND, 5 ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); this->SetSizer( m_main_sizer ); this->Layout(); } BattleOptionsTab::~BattleOptionsTab() { if ( GetAui().manager ) GetAui().manager->DetachPane( this ); } void BattleOptionsTab::UpdateBattle( const wxString& Tag ) { if ( !m_battle ) return; long type; Tag.BeforeFirst( '_' ).ToLong( &type ); wxString key = Tag.AfterFirst( '_' ); if ( type == OptionsWrapper::PrivateOptions ) { if ( key == _T( "restrictions" ) ) ReloadRestrictions(); } } void BattleOptionsTab::ReloadRestrictions() { if ( !m_battle ) return; m_allowed_list->Clear(); m_restrict_list->Clear(); if ( m_battle->GetHostModName() == wxEmptyString ) return; try { m_allowed_list->InsertItems( usync().GetUnitsList( m_battle->GetHostModName() ), 0 ); } catch ( ... ) {} std::map units = m_battle->RestrictedUnits(); for ( std::map::const_iterator itor = units.begin(); itor != units.end(); ++itor ) Restrict( itor->first, itor->second ); } int BattleOptionsTab::GetAllowedUnitIndex( const wxString& name ) { if ( !m_battle ) return -1; for ( unsigned int i = 0; i < m_allowed_list->GetCount(); i++ ) { wxString tmp = m_allowed_list->GetString( i ); tmp = tmp.AfterLast( '(' ); tmp = tmp.BeforeLast( ')' ); if ( name == tmp ) return i; } return -1; } int BattleOptionsTab::GetRestrictedUnitIndex( const wxString& name ) { if ( !m_battle ) return -1; for ( unsigned int i = 0; i < m_restrict_list->GetCount(); i++ ) { wxString tmp = m_restrict_list->GetString( i ); tmp = tmp.AfterLast( '(' ); tmp = tmp.BeforeLast( ')' ); if ( name == tmp ) return i; } return -1; } bool BattleOptionsTab::IsRestricted( const wxString& name ) { return ( GetRestrictedUnitIndex( name ) >= 0 ); } void BattleOptionsTab::Restrict( const wxString& name, int count ) { if ( !m_battle ) return; int i = GetAllowedUnitIndex( name ); Restrict( i, count ); } void BattleOptionsTab::Allow( const wxString& name ) { if ( !m_battle ) return; int i = GetRestrictedUnitIndex( name ); Allow( i ); } void BattleOptionsTab::Restrict( int index, int count ) { if ( !m_battle ) return; if ( index >= 0 ) { wxString unit = m_allowed_list->GetString( index ); m_restrict_list->Append( unit << _T( " [" ) << count << _T( "]" ) ); m_allowed_list->Delete( index ); } } void BattleOptionsTab::Allow( int index ) { if ( !m_battle ) return; if ( index >= 0 ) { wxString unit = m_restrict_list->GetString( index ); m_allowed_list->Append( unit ); m_restrict_list->Delete( index ); } } ////////////////////////////////////////////////////////////////////////// // EVENTS ////////////////////////////////////////////////////////////////////////// void BattleOptionsTab::OnRestrict( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxArrayInt sel; wxArrayString names; m_allowed_list->GetSelections( sel ); for ( unsigned int i = 0; i < sel.Count(); i++ ) { wxString name = m_allowed_list->GetString( sel.Item( i ) ); name = name.AfterLast( '(' ); name = name.BeforeLast( ')' ); names.Add( name ); } for ( unsigned int i = 0; i < names.Count(); i++ ) { wxString unit = names.Item( i ); int count = wxGetNumberFromUser( _( "How many units of this type do you wish to allow?" ), _T( "" ), _( "Unit restriction" ), 0, 0, 500000 ); if ( count >= 0 ) m_battle->RestrictUnit( unit, count ); } if ( names.Count() > 0 ) m_battle->SendHostInfo( IBattle::HI_Restrictions ); } void BattleOptionsTab::OnAllow( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxArrayInt sel; wxArrayString names; m_restrict_list->GetSelections( sel ); for ( unsigned int i = 0; i < sel.Count(); i++ ) { wxString name = m_restrict_list->GetString( sel.Item( i ) ); name = name.AfterLast( '(' ); name = name.BeforeLast( ')' ); names.Add( name ); } for ( unsigned int i = 0; i < names.Count(); i++ ) { wxString unit = names.Item( i ); m_battle->UnrestrictUnit( unit ); } if ( names.Count() > 0 ) m_battle->SendHostInfo( IBattle::HI_Restrictions ); } void BattleOptionsTab::OnClearRestrictions( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->UnrestrictAllUnits(); ReloadRestrictions(); } void BattleOptionsTab::SetBattle( IBattle* battle ) { m_battle = battle; m_restrict_btn->Enable(m_battle); m_allow_btn->Enable(m_battle); m_clear_btn->Enable(m_battle); m_allowed_list->Enable(m_battle); m_restrict_list->Enable(m_battle); if ( battle ) { ReloadRestrictions(); if ( !m_battle->IsFounderMe() ) { m_restrict_btn->Disable(); m_allow_btn->Disable(); m_clear_btn->Disable(); } } } IBattle* BattleOptionsTab::GetBattle() { return m_battle; } springlobby-0.169/src/hosting/battleoptionstab.h0000600000176000000410000000477312105760300023423 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_BATTLEOPTIONSTAB_H #define SPRINGLOBBY_HEADERGUARD_BATTLEOPTIONSTAB_H #include class Ui; class IBattle; class wxCommandEvent; class wxBoxSizer; class wxStaticText; class wxSplitterWindow; class wxButton; class wxCheckBox; class wxListBox; class wxRadioBox; class wxCheckListBox; /** \brief manipulate "standard" engine options, unit restriction list * \todo DOCMEMORE */ class BattleOptionsTab : public wxScrolledWindow { public: BattleOptionsTab( wxWindow* parent, IBattle* battle ); ~BattleOptionsTab(); void UpdateBattle( const wxString& Tag ); void ReloadRestrictions(); int GetAllowedUnitIndex( const wxString& name ); int GetRestrictedUnitIndex( const wxString& name ); bool IsRestricted( const wxString& name ); void Restrict( const wxString& name, int count ); void Allow( const wxString& name ); void Restrict( int index, int count ); void Allow( int index ); void OnRestrict( wxCommandEvent& event ); void OnAllow( wxCommandEvent& event ); void OnClearRestrictions( wxCommandEvent& event ); void SetBattle( IBattle* battle ); IBattle* GetBattle(); protected: void UpdateBattle(); IBattle* m_battle; wxStaticText* m_aloowed_lbl; wxListBox* m_allowed_list; wxButton* m_restrict_btn; wxButton* m_allow_btn; wxStaticText* m_restricted_lbl; wxListBox* m_restrict_list; wxButton* m_clear_btn; enum { BOPTS_END = wxID_HIGHEST, BOPTS_OPTS, BOPTS_SLIDE, BOPTS_RESTRICT, BOPTS_ALLOW, BOPTS_CLEARRES, BOPTS_LOADPRES, BOPTS_SAVEPRES, BOPTS_DELETEPRES, BOPTS_SETDEFAULTPRES, BOPTS_CHOSEPRES }; DECLARE_EVENT_TABLE() }; enum { BOPTS_RESTRICT = wxID_HIGHEST, BOPTS_ALLOW, BOPTS_CLEARRES }; #endif // SPRINGLOBBY_HEADERGUARD_BATTLEOPTIONSTAB_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/hosting/battleroomlistctrl.cpp0000600000176000000410000006466512105760300024337 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: BattleroomListCtrl // #include #include #include #include #include #include #include #include #include "battleroomlistctrl.h" #include "iconimagelist.h" #include "springunitsync.h" #include "battle.h" #include "ibattle.h" #include "uiutils.h" #include "ui.h" #include "user.h" #include "server.h" #include "utils/debug.h" #include "utils/conversion.h" #include "uiutils.h" #include "countrycodes.h" #include "mainwindow.h" #include "aui/auimanager.h" #include "utils/customdialogs.h" #include "settings.h" template<> SortOrder CustomVirtListCtrl::m_sortorder = SortOrder(); BEGIN_EVENT_TABLE( BattleroomListCtrl, BattleroomListCtrl::BaseType ) EVT_LIST_ITEM_RIGHT_CLICK( BRLIST_LIST, BattleroomListCtrl::OnListRightClick ) EVT_MENU ( BRLIST_SPEC, BattleroomListCtrl::OnSpecSelect ) EVT_MENU ( BRLIST_KICK, BattleroomListCtrl::OnKickPlayer ) EVT_LIST_ITEM_ACTIVATED( BRLIST_LIST, BattleroomListCtrl::OnActivateItem ) // EVT_MENU ( BRLIST_ADDCREATEGROUP, BattleroomListCtrl::OnPlayerAddToGroup ) // EVT_MENU ( BRLIST_ADDTOGROUP, BattleroomListCtrl::OnPlayerAddToGroup ) EVT_MENU ( BRLIST_RING, BattleroomListCtrl::OnRingPlayer ) EVT_MENU ( BRLIST_COLOUR, BattleroomListCtrl::OnColourSelect ) EVT_MENU ( BRLIST_HANDICAP, BattleroomListCtrl::OnHandicapSelect ) #if wxUSE_TIPWINDOW #ifndef __WXMSW__ //disables tooltips on win EVT_MOTION(BattleroomListCtrl::OnMouseMotion) #endif #endif END_EVENT_TABLE() BattleroomListCtrl::BattleroomListCtrl( wxWindow* parent, IBattle* battle, bool readonly, bool showingame ) : CustomVirtListCtrl< User *,BattleroomListCtrl>(parent, BRLIST_LIST, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER | wxLC_REPORT | wxLC_SINGLE_SEL, _T("BattleroomListCtrl"), 3, &BattleroomListCtrl::CompareOneCrit, true /*highlight*/, UserActions::ActHighlight, !readonly /*periodic sort*/ ), m_battle(battle), m_popup(0), m_sel_user(0), m_sides(0), m_spec_item(0), m_handicap_item(0), m_ro(readonly), m_showingame(showingame), m_status_column_index(-1), m_ingame_column_index(-1), m_faction_column_index(-1), m_colour_column_index(-1), m_country_column_index(-1), m_rank_column_index(-1), m_nick_column_index(-1), m_team_column_index(-1), m_ally_column_index(-1), m_resourcebonus_column_index(-1) { GetAui().manager->AddPane( this, wxLEFT, _T("battleroomlistctrl") ); wxListItem col; const int hd = wxLIST_AUTOSIZE_USEHEADER; #if defined(__WXMAC__) /// on mac, autosize does not work at all const int widths[11] = {20,20,20,20,170,140,130,110,28,28,28}; //!TODO revise plox #else const int widths[11] = {hd,hd,hd,hd,hd,hd,170,hd,hd,80,130}; #endif int count = 0; AddColumn( count, widths[count], _T("Status"), _T("Player/Bot") ); m_status_column_index = count; count++; if ( m_showingame ) { AddColumn( count, widths[count], _T("Ingame"), _T("Battleroom status") ); m_ingame_column_index = count; count++; } AddColumn( count, widths[count], _T("Faction"), _T("Faction icon") ); m_faction_column_index = count; count++; AddColumn( count, widths[count], _T("Colour"), _T("Teamcolour") ); m_colour_column_index = count; count++; AddColumn( count, widths[count], _T("Country"), _T("Country") ); m_country_column_index = count; count++; AddColumn( count, widths[count], _T("Rank"), _T("Rank") ); m_rank_column_index = count; count++; AddColumn( count, widths[count], _("Nickname"), _T("Ingame name")); m_nick_column_index = count; count++; AddColumn( count, widths[count], _("Team"), _T("Team number") ); m_team_column_index = count; count++; AddColumn( count, widths[count], _("Ally"), _T("Ally number") ); m_ally_column_index = count; count++; AddColumn( count, widths[count], _("Resource Bonus"), _T("Resource Bonus") ); m_resourcebonus_column_index = count; if ( m_sortorder.size() == 0 ) { m_sortorder[0].col = m_team_column_index; m_sortorder[0].direction = true; m_sortorder[1].col = m_ally_column_index; m_sortorder[1].direction = true; m_sortorder[2].col = m_nick_column_index; m_sortorder[2].direction = true; } if ( !m_ro ) { m_popup = new UserMenu(this, this); wxMenu* m_teams; m_teams = new wxMenu(); for ( unsigned int i = 0; i < SPRING_MAX_TEAMS; i++ ) { wxMenuItem* team = new wxMenuItem( m_teams, BRLIST_TEAM + i, wxFormat( _T("%d") ) % (i+1), wxEmptyString, wxITEM_NORMAL ); m_teams->Append( team ); Connect( BRLIST_TEAM + i, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( BattleroomListCtrl::OnTeamSelect ) ); } m_popup->Append( -1, _("Team"), m_teams ); wxMenu* m_allies = new wxMenu(); for ( unsigned int i = 0; i < SPRING_MAX_ALLIES; i++ ) { wxMenuItem* ally = new wxMenuItem( m_allies, BRLIST_ALLY + i, wxFormat( _T("%d") ) % (i+1), wxEmptyString, wxITEM_NORMAL ); m_allies->Append( ally ); Connect( BRLIST_ALLY + i, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( BattleroomListCtrl::OnAllySelect ) ); } m_popup->Append( -1, _("Ally"), m_allies ); m_sides = new wxMenu(); SetBattle( battle ); m_popup->Append( -1, _("Side"), m_sides ); m_popup->AppendSeparator(); wxMenuItem* m_colours = new wxMenuItem( m_popup, BRLIST_COLOUR, _("Set color"), wxEmptyString, wxITEM_NORMAL ); m_popup->Append( m_colours ); m_popup->AppendSeparator(); m_handicap_item = new wxMenuItem( m_popup, BRLIST_HANDICAP, _("Set Resource Bonus"), wxEmptyString, wxITEM_NORMAL ); m_popup->Append( m_handicap_item ); m_popup->AppendSeparator(); m_spec_item = new wxMenuItem( m_popup, BRLIST_SPEC, wxString( _("Spectator") ) , wxEmptyString, wxITEM_CHECK ); m_popup->Append( m_spec_item ); m_popup->AppendSeparator(); wxMenuItem* kick = new wxMenuItem( m_popup, BRLIST_KICK, wxString( _("Kick") ) , wxEmptyString, wxITEM_NORMAL ); m_popup->Append( kick ); wxMenuItem* ring = new wxMenuItem( m_popup, BRLIST_RING, wxString( _("Ring") ) , wxEmptyString, wxITEM_NORMAL ); m_popup->Append( ring ); } } BattleroomListCtrl::~BattleroomListCtrl() { } void BattleroomListCtrl::SetBattle( IBattle* battle ) { m_battle = battle; for ( unsigned int i = 0; i < side_vector.size(); i++ ) { wxMenuItem* side = side_vector[i]; m_popup->Remove( side ); m_sides->Destroy( side ); // delete side; Disconnect( BRLIST_SIDE + i, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( BattleroomListCtrl::OnSideSelect ) ); } m_data.clear(); side_vector.clear(); if ( m_battle && m_sides ) { try { wxArrayString sides = usync().GetSides( m_battle->GetHostModName() ); for ( unsigned int i = 0; i < sides.GetCount(); i++ ) { wxMenuItem* side = new wxMenuItem( m_sides, BRLIST_SIDE + i, sides[i], wxEmptyString, wxITEM_NORMAL ); m_sides->Append( side ); side_vector.push_back( side ); Connect( BRLIST_SIDE + i, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( BattleroomListCtrl::OnSideSelect ) ); } } catch (...) {} } } IBattle& BattleroomListCtrl::GetBattle() { ASSERT_EXCEPTION( m_battle, _T("m_battle == 0") ); return *m_battle; } void BattleroomListCtrl::AddUser( User& user ) { //first time setting is necessary to have color in replay/savegame used controls if ( !user.BattleStatus().spectator ) icons().SetColourIcon( user.BattleStatus().colour ); if ( AddItem( &user ) ) return; wxLogWarning( _T("user already in battleroom list.") ); } void BattleroomListCtrl::RemoveUser( User& user ) { if ( RemoveItem( &user ) ) return; wxLogError( _T("Didn't find the user to remove in battleroomlistctrl.") ); } void BattleroomListCtrl::UpdateUser( User& user ) { if ( !user.BattleStatus().spectator ) icons().SetColourIcon( user.BattleStatus().colour ); wxArrayString sides = usync().GetSides( m_battle->GetHostModName() ); ASSERT_EXCEPTION( user.BattleStatus().side < (long)sides.GetCount(), _T("Side index too high") ); user.SetSideiconIndex( icons().GetSideIcon( m_battle->GetHostModName(), user.BattleStatus().side ) ); int index = GetIndexFromData( &user ); UpdateUser( index ); } wxListItemAttr * BattleroomListCtrl::GetItemAttr(long item) const { if ( item == -1 || item >= (long)m_data.size()) return NULL; const User& user = *GetDataFromIndex( item ); bool is_bot = user.BattleStatus().IsBot(); if ( !is_bot ) { return HighlightItemUser( user.GetNick() ); } return NULL; } int BattleroomListCtrl::GetItemColumnImage(long item, long column) const { if ( item == -1 || item >= (long)m_data.size()) return -1; const User& user = *GetDataFromIndex( item ); bool is_bot = user.BattleStatus().IsBot(); bool is_spec = user.BattleStatus().spectator; if ( column == m_status_column_index ) { if ( !is_bot ) { if ( m_battle->IsFounder( user ) ) { return icons().GetHostIcon( is_spec ); } else { return icons().GetReadyIcon( is_spec, user.BattleStatus().ready, user.BattleStatus().sync, is_bot ); } } else return icons().ICON_BOT; } if ( column == m_ingame_column_index ) return user.GetStatusIconIndex(); if ( column == m_colour_column_index ) return is_spec ? -1 : icons().GetColourIcon( user.BattleStatus().colour ); if ( column == m_country_column_index ) return is_bot ? -1 : icons().GetFlagIcon( user.GetCountry() ); if ( column == m_rank_column_index ) return is_bot ? -1 : icons().GetRankIcon( user.GetStatus().rank ); if ( column == m_faction_column_index ) return is_spec ? -1 : user.GetSideiconIndex(); if ( column == m_nick_column_index ) return -1; else { wxLogWarning( _T("column oob in BattleroomListCtrl::OnGetItemColumnImage") ); return -1; } } wxString BattleroomListCtrl::GetItemText(long item, long column) const { if ( item == -1 || item >= (long)m_data.size()) return _T(""); const User& user = *GetDataFromIndex( item ); bool is_bot = user.BattleStatus().IsBot(); bool is_spec = user.BattleStatus().spectator; if ( column == m_faction_column_index ) { try { wxArrayString sides = usync().GetSides( m_battle->GetHostModName() ); ASSERT_EXCEPTION( user.BattleStatus().side < (long)sides.GetCount(), _T("Side index too high") ); } catch ( ... ) { return wxFormat( _T("s%d") ) % (user.BattleStatus().side + 1); } return _T(""); } if ( column == m_nick_column_index ) { if ( is_bot ) { wxString botname = user.BattleStatus().aishortname; if ( !user.BattleStatus().aiversion.IsEmpty() ) botname += _T(" ") + user.BattleStatus().aiversion; if ( !usync().VersionSupports( SpringUnitSync::USYNC_GetSkirmishAI ) ) { if ( botname.Find(_T('.')) != wxNOT_FOUND ) botname = botname.BeforeLast(_T('.')); if ( botname.Find(_T('/')) != wxNOT_FOUND ) botname = botname.AfterLast(_T('/')); if ( botname.Find(_T('\\')) != wxNOT_FOUND ) botname = botname.AfterLast(_T('\\')); if ( botname.Find(_T("LuaAI:")) != wxNOT_FOUND ) botname = botname.AfterFirst(_T(':')); } return (wxFormat(_T("%s - %s (%s)")) % user.GetNick() % botname % user.BattleStatus().owner); } else return user.GetNick(); } if ( column == m_team_column_index ) return is_spec ? _T("") : (wxFormat( _T("%d") ) % ( user.BattleStatus().team + 1 ) ).c_str(); if ( column == m_ally_column_index ) return is_spec ? _T("") : (wxFormat( _T("%d") ) % ( user.BattleStatus().ally + 1 ) ).c_str(); if ( column == m_resourcebonus_column_index ) return is_spec ? _T("") : (wxFormat( _T("%d%%") ) % user.BattleStatus().handicap ).c_str(); if ( column == m_country_column_index ) return _T(""); return _T(""); } void BattleroomListCtrl::UpdateUser( const int& index ) { wxWindowUpdateLocker lock( this ); RefreshItem( index ); MarkDirtySort(); } void BattleroomListCtrl::OnListRightClick( wxListEvent& event ) { wxLogDebugFunc( _T("") ); if ( m_ro ) return; int index = event.GetIndex(); if ( index == -1 || index >= (long)m_data.size()) return; User& user = *GetDataFromIndex( event.GetIndex() ); m_sel_user = &user; //this is set for event handlers if ( user.BattleStatus().IsBot() ) { wxLogMessage(_T("Bot")); int item = m_popup->FindItem( _("Spectator") ); m_popup->Enable( item, false ); m_popup->Check( item, false ); m_popup->Enable( m_popup->FindItem( _("Ring") ), false ); m_popup->Enable( m_popup->FindItem( _("Kick") ),true); } else { wxLogMessage(_T("User")); assert( m_popup ); int item = m_popup->FindItem( _("Spectator") ); m_popup->Check( item, m_sel_user->BattleStatus().spectator ); m_popup->Enable( item, true ); m_popup->Enable( m_popup->FindItem( _("Ring") ), true ); bool isSelUserMe = ( ui().IsThisMe(user) ); m_popup->Enable( m_popup->FindItem( _("Kick") ),!isSelUserMe); } wxLogMessage(_T("Popup")); m_popup->EnableItems( !user.BattleStatus().IsBot(), GetSelectedUserNick() );//this updates groups, therefore we need to update the connection to evt handlers too std::vector groups_ids = m_popup->GetGroupIds(); for (std::vector::const_iterator it = groups_ids.begin(); it != groups_ids.end(); ++it) { Connect( *it, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( BattleroomListCtrl::OnUserMenuAddToGroup ), 0, this ); } Connect( GROUP_ID_NEW, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( BattleroomListCtrl::OnUserMenuCreateGroup), 0, this ); PopupMenu( m_popup ); wxLogMessage(_T("Done")); } void BattleroomListCtrl::OnTeamSelect( wxCommandEvent& event ) { wxLogDebugFunc( _T("") ); int team = event.GetId() - BRLIST_TEAM; if( m_sel_user ) ((Battle*)m_battle)->ForceTeam( *m_sel_user, team ); } void BattleroomListCtrl::OnAllySelect( wxCommandEvent& event ) { wxLogDebugFunc( _T("") ); int ally = event.GetId() - BRLIST_ALLY; if( m_sel_user ) ((Battle*)m_battle)->ForceAlly( *m_sel_user, ally ); } void BattleroomListCtrl::OnColourSelect( wxCommandEvent& /*unused*/ ) { wxLogDebugFunc( _T("") ); wxColour CurrentColour = m_sel_user->BattleStatus().colour; CurrentColour = GetColourFromUser(this, CurrentColour); if ( !CurrentColour.IsOk() ) return; if( m_sel_user ) ((Battle*)m_battle)->ForceColour( *m_sel_user, CurrentColour ); } void BattleroomListCtrl::OnSideSelect( wxCommandEvent& event ) { wxLogDebugFunc( _T("") ); int side = event.GetId() - BRLIST_SIDE; if( m_sel_user ) ((Battle*)m_battle)->ForceSide( *m_sel_user, side ); } void BattleroomListCtrl::OnHandicapSelect( wxCommandEvent& /*unused*/ ) { wxLogDebugFunc( _T("") ); if( !m_sel_user ) return; long handicap = wxGetNumberFromUser( _("Please enter a value between 0 and 100"), _("Set Resource Bonus"), _T(""), m_sel_user->BattleStatus().handicap, 0, 100, (wxWindow*)&ui().mw(), wxDefaultPosition ); if ( handicap != -1 ) { ((Battle*)m_battle)->SetHandicap( *m_sel_user, handicap ); } } void BattleroomListCtrl::OnSpecSelect( wxCommandEvent& /*unused*/ ) { wxLogDebugFunc( _T("") ); if ( m_sel_user ) ((Battle*)m_battle)->ForceSpectator( *m_sel_user, m_spec_item->IsChecked() ); } void BattleroomListCtrl::OnKickPlayer( wxCommandEvent& /*unused*/ ) { wxLogDebugFunc( _T("") ); if ( m_sel_user ) ((Battle*)m_battle)->KickPlayer( *m_sel_user ); } void BattleroomListCtrl::OnRingPlayer( wxCommandEvent& /*unused*/ ) { wxLogDebugFunc( _T("") ); if ( m_sel_user ) ((Battle*)m_battle)->GetServer().Ring( m_sel_user->GetNick() ); } void BattleroomListCtrl::Sort() { if ( m_data.size() > 0 ) { SaveSelection(); SLInsertionSort( m_data, m_comparator ); RestoreSelection(); } } int BattleroomListCtrl::CompareOneCrit(DataType u1, DataType u2, int col, int dir) const { if ( col == m_status_column_index ) return dir * CompareStatus( u1, u2, m_battle ); if ( col == m_ingame_column_index ) return dir * CompareLobbyStatus( u1, u2 ); if ( col == m_faction_column_index ) return dir * CompareSide( u1, u2 ); if ( col == m_colour_column_index ) return dir * CompareColor( u1, u2 ); if ( col == m_country_column_index ) return dir * compareSimple( u1, u2 ); if ( col == m_rank_column_index ) return dir * CompareRank( u1, u2 ); if ( col == m_nick_column_index ) return dir * u1->GetNick().CmpNoCase( u2->GetNick() ); if ( col == m_team_column_index ) return dir * CompareTeam( u1, u2 ); if ( col == m_ally_column_index ) return dir * CompareAlly( u1, u2 ); if ( col == m_resourcebonus_column_index ) return dir * CompareHandicap( u1, u2 ); return 0; } int BattleroomListCtrl::CompareLobbyStatus( const DataType user1, const DataType user2 ) { int u1 = 0, u2 = 0; if ( user1->GetStatus().bot ) u1 += 1000; if ( user2->GetStatus().bot ) u2 += 1000; if ( user1->GetStatus().moderator ) u1 += 100; if ( user2->GetStatus().moderator ) u2 += 100; if ( user1->GetStatus().in_game ) u1 += -10; if ( user2->GetStatus().in_game ) u2 += -10; if ( user1->GetStatus().away ) u1 += -5; if ( user2->GetStatus().away ) u2 += -5; // inverse the order if ( u1 < u2 ) return -1; if ( u1 > u2 ) return 1; return 0; } int BattleroomListCtrl::CompareStatus(const DataType user1, const DataType user2, const IBattle* battle ) { int status1 = 0; if ( user1->BattleStatus().IsBot() ) { status1 = 9; } else { try { if ( &battle->GetFounder() != user1 ) status1 = 1; }catch(...){} if ( user1->BattleStatus().ready ) status1 += 5; if ( user1->BattleStatus().sync ) status1 += 7; if ( user1->BattleStatus().spectator ) status1 += 10; } int status2 = 0; if ( user1->BattleStatus().IsBot() ) { status2 = 9; } else { try { if ( &battle->GetFounder() != user2 ) status2 = 1; }catch(...){} if ( user2->BattleStatus().ready ) status2 += 5; if ( user2->BattleStatus().sync ) status2 += 7; if ( user2->BattleStatus().spectator ) status2 += 10; } if ( status1 < status2 ) return -1; if ( status1 > status2 ) return 1; return 0; } int BattleroomListCtrl::CompareSide(const DataType user1, const DataType user2) { if ( !user1 && !user2 ) return 0; else if ( !user1 ) return 1; else if ( !user2 ) return -1; int side1; if ( user1->BattleStatus().spectator ) side1 = 1000; else side1 = user1->BattleStatus().side; int side2; if ( user2->BattleStatus().spectator ) side2 = 1000; else side2 = user2->BattleStatus().side; if ( side1 < side2 ) return -1; if ( side1 > side2 ) return 1; return 0; } int BattleroomListCtrl::CompareColor(const DataType user1, const DataType user2) { if ( !user1 && !user2 ) return 0; else if ( !user1 ) return 1; else if ( !user2 ) return -1; int color1_r, color1_g, color1_b; if ( user1->BattleStatus().spectator ) return -1; color1_r = user1->BattleStatus().colour.Red(); color1_g = user1->BattleStatus().colour.Green(); color1_b = user1->BattleStatus().colour.Blue(); int color2_r, color2_g, color2_b; if ( user2->BattleStatus().spectator ) return 1; color2_r = user2->BattleStatus().colour.Red(); color2_g = user2->BattleStatus().colour.Green(); color2_b = user2->BattleStatus().colour.Blue(); if ( (color1_r + color1_g + color1_b)/3 < (color2_r + color2_g + color2_b)/3 ) return -1; if ( (color1_r + color1_g + color1_b)/3 > (color2_r + color2_g + color2_b)/3 ) return 1; return 0; } int BattleroomListCtrl::CompareRank(const DataType user1, const DataType user2) { if ( !user1 && !user2 ) return 0; else if ( !user1 ) return 1; else if ( !user2 ) return -1; int rank1; if ( user1->BattleStatus().IsBot() ) rank1 = 1000; else rank1 = user1->GetStatus().rank; int rank2; if ( user2->BattleStatus().IsBot() ) rank2 = 1000; else rank2 = user2->GetStatus().rank; if ( rank1 < rank2 ) return -1; if ( rank1 > rank2 ) return 1; return 0; } int BattleroomListCtrl::CompareTeam(const DataType user1, const DataType user2) { if ( !user1 && !user2 ) return 0; else if ( !user1 ) return 1; else if ( !user2 ) return -1; int team1; if ( user1->BattleStatus().spectator ) team1 = 1000; else team1 = user1->BattleStatus().team; int team2; if ( user2->BattleStatus().spectator ) team2 = 1000; else team2 = user2->BattleStatus().team; if ( team1 < team2 ) return -1; if ( team1 > team2 ) return 1; return 0; } int BattleroomListCtrl::CompareAlly(const DataType user1, const DataType user2) { if ( !user1 && !user2 ) return 0; else if ( !user1 ) return 1; else if ( !user2 ) return -1; int ally1; if ( user1->BattleStatus().spectator ) ally1 = 1000; else ally1 = user1->BattleStatus().ally; int ally2; if ( user2->BattleStatus().spectator ) ally2 = 1000; else ally2 = user2->BattleStatus().ally; if ( ally1 < ally2 ) return -1; if ( ally1 > ally2 ) return 1; return 0; } int BattleroomListCtrl::CompareHandicap(const DataType user1, const DataType user2) { int handicap1; if ( user1->BattleStatus().spectator ) handicap1 = 1000; else handicap1 = user1->BattleStatus().handicap; int handicap2; if ( user2->BattleStatus().spectator ) handicap2 = 1000; else handicap2 = user2->BattleStatus().handicap; if ( handicap1 < handicap2 ) return -1; if ( handicap1 > handicap2 ) return 1; return 0; } void BattleroomListCtrl::SetTipWindowText( const long item_hit, const wxPoint& position) { if ( item_hit < 0 || item_hit >= (long)m_data.size() ) return; if ( !m_battle ) return; const User& user = *GetDataFromIndex( item_hit ); int column = getColumnFromPosition( position ); if (column > (int)m_colinfovec.size() || column < 0) { m_tiptext = _T(""); } else { if ( column == m_status_column_index ) // is bot? { m_tiptext = _T(""); if ( user.BattleStatus().IsBot() ) { m_tiptext += _("AI (bot)\n"); } else { m_tiptext += _("Human\n"); } if ( user.BattleStatus().spectator ) { m_tiptext += _("Spectator\n"); } else { m_tiptext += _("Player\n"); } if ( m_battle->IsFounder( user ) ) { m_tiptext += _("Host\n"); } else { m_tiptext += _("Client\n"); } if ( user.BattleStatus().ready ) { m_tiptext += _("Ready\n"); } else { m_tiptext += _("Not ready\n"); } if ( user.BattleStatus().sync == SYNC_SYNCED ) { m_tiptext += _("In sync"); } else { m_tiptext += _("Not in sync"); } } else if ( column == m_faction_column_index ) // icon { m_tiptext = _T(""); if ( user.BattleStatus().spectator ) { m_tiptext = _T("Spectators have no side"); } else { try { wxArrayString sides = usync().GetSides( m_battle->GetHostModName() ); int side = user.BattleStatus().side; if ( side < (int)sides.GetCount() ) m_tiptext = sides[side]; } catch (...){} } } else if ( column == m_ingame_column_index ) // lobby status { m_tiptext = _T( "This " ); if ( user.GetStatus().bot ) { m_tiptext << _T( "bot " ); } else if ( user.GetStatus().moderator ) { m_tiptext << _T( "moderator " ); } else { m_tiptext << _T( "player " ); } if ( user.GetStatus().in_game ) { m_tiptext << _T( "is ingame" ); } else if ( user.GetStatus().away ) { m_tiptext << _T( "is away" ); } else { m_tiptext << _T( "is available" ); } } else if ( column == m_country_column_index ) // country { m_tiptext = user.BattleStatus().IsBot() ? _T("This bot is from nowhere particular") : GetFlagNameFromCountryCode(user.GetCountry()); } else if ( column == m_rank_column_index ) // rank { m_tiptext = user.BattleStatus().IsBot() ? _T("This bot has no rank") : user.GetRankName(user.GetStatus().rank); } else if ( column == m_nick_column_index ) //name { m_tiptext = user.BattleStatus().IsBot() ?user.GetNick() : user.GetNick(); } else m_tiptext = m_colinfovec[column].tip; } } void BattleroomListCtrl::OnUserMenuAddToGroup( wxCommandEvent& event ) { int id = event.GetId(); wxString groupname = m_popup->GetGroupByEvtID(id); wxString nick = GetSelectedUserNick(); useractions().AddUserToGroup( groupname, nick ); Disconnect( GROUP_ID_NEW, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( BattleroomListCtrl::OnUserMenuCreateGroup), 0, this ); } void BattleroomListCtrl::OnUserMenuDeleteFromGroup( wxCommandEvent& /*unused*/ ) { wxString nick = GetSelectedUserNick(); useractions().RemoveUser( nick ); } void BattleroomListCtrl::OnUserMenuCreateGroup( wxCommandEvent& /*unused*/ ) { wxString name; if ( ui().AskText( _("Enter name"), _("Please enter the name for the new group.\nAfter clicking ok you will be taken to adjust its settings."), name ) ) { wxString nick = GetSelectedUserNick(); useractions().AddGroup( name ); useractions().AddUserToGroup( name, nick ); ui().mw().ShowConfigure( MainWindow::OPT_PAGE_GROUPS ); } } wxString BattleroomListCtrl::GetSelectedUserNick() { if ( m_selected_index < 0 || m_selected_index >= (long)m_data.size() ) return wxEmptyString; else return m_data[m_selected_index]->GetNick(); } void BattleroomListCtrl::OnActivateItem( wxListEvent& /*unused*/ ) { if ( m_ro ) return; if ( m_selected_index < 0 || m_selected_index >= (long)m_data.size() ) return; const User* usr = m_data[m_selected_index]; if ( usr != NULL && !usr->BattleStatus().IsBot() ) ui().mw().OpenPrivateChat( *usr ); } int BattleroomListCtrl::GetIndexFromData(const DataType& data) const { const User* user = data; static long seekpos; seekpos = LSL::Util::Clamp( seekpos, 0l , (long)m_data.size() ); int index = seekpos; for ( DataCIter f_idx = m_data.begin() + seekpos; f_idx != m_data.end() ; ++f_idx ) { if ( user == *f_idx ) { seekpos = index; return seekpos; } index++; } //it's ok to init with seekpos, if it had changed this would not be reached int r_index = seekpos - 1; for ( DataRevCIter r_idx = m_data.rbegin() + ( m_data.size() - seekpos ); r_idx != m_data.rend() ; ++r_idx ) { if ( user == *r_idx ) { seekpos = r_index; return seekpos; } r_index--; } return -1; } springlobby-0.169/src/hosting/battleroomlistctrl.h0000600000176000000410000001031712105760300023765 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_BATTLEROOMLISTCTRL_H #define SPRINGLOBBY_HEADERGUARD_BATTLEROOMLISTCTRL_H #include "customvirtlistctrl.h" #include "usermenu.h" class User; class IBattle; class Ui; struct BattleBot; class wxIcon; /** \brief display participants of battle and their info (ally,team,color,...) * \todo DOCMEMORE */ class BattleroomListCtrl : public CustomVirtListCtrl< User *, BattleroomListCtrl > { public: BattleroomListCtrl( wxWindow* parent, IBattle* battle, bool readonly, bool showingame ); ~BattleroomListCtrl(); void SetBattle( IBattle* battle ); IBattle& GetBattle(); void AddUser( User& user ); void RemoveUser( User& user ); void UpdateUser( const int& index ); void UpdateUser( User& user ); void UpdateList(); int GetIndexFromData( const DataType& data ) const; void OnListRightClick( wxListEvent& event ); void OnColClick( wxListEvent& event ); void OnTeamSelect( wxCommandEvent& event ); void OnAllySelect( wxCommandEvent& event ); void OnColourSelect( wxCommandEvent& event ); void OnSideSelect( wxCommandEvent& event ); void OnHandicapSelect( wxCommandEvent& event ); void OnSpecSelect( wxCommandEvent& event ); void OnActivateItem( wxListEvent& event ); void OnKickPlayer( wxCommandEvent& event ); void OnRingPlayer( wxCommandEvent& event ); void OnUserMenuCreateGroup( wxCommandEvent& event ); void OnUserMenuDeleteFromGroup( wxCommandEvent& event ); void OnUserMenuAddToGroup( wxCommandEvent& event ); virtual void SetTipWindowText( const long item_hit, const wxPoint& position); wxString GetItemText(long item, long column) const; int GetItemColumnImage(long item, long column) const; wxListItemAttr * GetItemAttr(long item) const; protected: static int CompareLobbyStatus( const DataType user1, const DataType user2 ); static int CompareStatus(const DataType user1, const DataType user2, const IBattle* m_battle ); static int CompareSide(const DataType user1, const DataType user2); static int CompareColor(const DataType user1, const DataType user2); static int CompareRank(const DataType user1, const DataType user2); static int CompareTeam(const DataType user1, const DataType user2); static int CompareAlly(const DataType user1, const DataType user2); static int CompareHandicap(const DataType user1, const DataType user2); // wxString GetCellContentsString( long row_number, int column ); wxString GetSelectedUserNick(); IBattle* m_battle; typedef SL_GENERIC::UserMenu UserMenu; UserMenu* m_popup; User* m_sel_user; wxMenu* m_sides; std::vector side_vector; wxMenuItem* m_spec_item; wxMenuItem* m_handicap_item; int CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const; virtual void Sort(); bool m_ro; bool m_showingame; // if -1 then it's not set int m_status_column_index; int m_ingame_column_index; int m_faction_column_index; int m_colour_column_index; int m_country_column_index; int m_rank_column_index; int m_nick_column_index; int m_team_column_index; int m_ally_column_index; int m_resourcebonus_column_index; enum { BRLIST_LIST = wxID_HIGHEST, BRLIST_TEAM, BRLIST_ALLY = BRLIST_TEAM + 1000, BRLIST_COLOUR = BRLIST_ALLY + 1000, BRLIST_SIDE = BRLIST_COLOUR +1000, BRLIST_HANDICAP = BRLIST_SIDE +1000, BRLIST_SPEC, BRLIST_KICK, BRLIST_RING, BRLIST_ADDTOGROUP }; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_BATTLEROOMLISTCTRL_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/hosting/battleroommmoptionstab.cxx0000600000176000000410000005654712105760300025233 0ustar buildbotwww-data00000000000000 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "utils/controls.h" #include #include "mmoptionswrapper.h" #include "battle.h" #include "gui/spinctl/spinctrl.h" #include "utils/customdialogs.h" #include "server.h" #include "settings.h" #include "ui.h" #include "aui/auimanager.h" const char sep = *("_"); const wxString wxsep = _T("_"); // note that the SpinCtrlDouble change is hadnled explicitly via the control calling the right handler BEGIN_EVENT_TABLE_TEMPLATE1( BattleroomMMOptionsTab, wxPanel, BattleType) EVT_COMBOBOX (wxID_ANY, BattleroomMMOptionsTab::OnComBoxChange) EVT_CHECKBOX (wxID_ANY, BattleroomMMOptionsTab::OnChkBoxChange) EVT_TEXT_ENTER (wxID_ANY, BattleroomMMOptionsTab::OnTextCtrlChange) // EVT_BUTTON( BOPTS_LOADPRES, BattleroomMMOptionsTab::OnLoadPreset ) // EVT_BUTTON( BOPTS_SAVEPRES, BattleroomMMOptionsTab::OnSavePreset ) // EVT_BUTTON( BOPTS_DELETEPRES, BattleroomMMOptionsTab::OnDeletePreset ) // EVT_BUTTON( BOPTS_SETDEFAULTPRES, BattleroomMMOptionsTab::OnSetModDefaultPreset ) EVT_BUTTON( wxID_ANY, BattleroomMMOptionsTab::OnButton ) END_EVENT_TABLE() template < class BattleType > BattleroomMMOptionsTab::BattleroomMMOptionsTab( BattleType* battle, wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxScrolledWindow( parent, id, pos, size, style | wxHSCROLL ),m_battle(battle) { GetAui().manager->AddPane( this, wxLEFT, _T("battleroommmoptionstab") ); m_main_sizer = new wxBoxSizer( wxVERTICAL ); wxStaticBoxSizer* m_preset_sizer; m_preset_sizer = new wxStaticBoxSizer( new wxStaticBox( this, -1, _("Manage Presets") ), wxHORIZONTAL ); m_options_preset_sel = new wxComboBox( this, BOPTS_CHOSEPRES, _T(""), wxDefaultPosition, wxDefaultSize, sett().GetPresetList(), wxCB_READONLY ); m_options_preset_sel->SetToolTip(TE(_("Set name."))); m_preset_sizer->Add( m_options_preset_sel, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); m_load_btn = new wxButton( this, BOPTS_LOADPRES, _("Load..."), wxDefaultPosition, wxDefaultSize, 0 ); m_load_btn->SetToolTip( TE(_("Load a saved set of options.")) ); m_preset_sizer->Add( m_load_btn, 0, wxALL, 5 ); m_save_btn = new wxButton( this, BOPTS_SAVEPRES, _("Save..."), wxDefaultPosition, wxDefaultSize, 0 ); m_save_btn->SetToolTip( TE(_("Save a set of options.")) ); m_preset_sizer->Add( m_save_btn, 0, wxALL, 5 ); m_delete_btn = new wxButton( this, BOPTS_DELETEPRES, _("Delete..."), wxDefaultPosition, wxDefaultSize, 0 ); m_delete_btn->SetToolTip( TE(_("Delete a set of options.")) ); m_preset_sizer->Add( m_delete_btn, 0, wxALL, 5 ); m_default_btn = new wxButton( this, BOPTS_SETDEFAULTPRES, _("Set default..."), wxDefaultPosition, wxDefaultSize, 0 ); m_default_btn->SetToolTip( TE(_("Use the current set of options as game's default.")) ); m_preset_sizer->Add( m_default_btn, 0, wxALL, 5 ); m_preset_sizer->Add( 0, 0, 1, wxEXPAND, 0 ); m_map_mod_container = new wxBoxSizer( wxVERTICAL ); m_mod_options_sizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Game Options") ), wxVERTICAL ); m_mod_layout = new wxBoxSizer( wxVERTICAL); setupOptionsSizer(m_mod_layout,OptionsWrapper::ModOption); m_mod_options_sizer->Add( m_mod_layout, 1, wxEXPAND, 5 ); m_map_options_sizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Map Options") ), wxVERTICAL ); m_map_layout = new wxBoxSizer( wxVERTICAL); setupOptionsSizer(m_map_layout,OptionsWrapper::MapOption); m_map_options_sizer->Add( m_map_layout, 1, wxEXPAND, 5 ); m_main_sizer->Add( m_preset_sizer, 0, wxALL|wxEXPAND, 5 ); m_map_mod_container->Add( m_mod_options_sizer, 0, wxALL|wxEXPAND, 5 ); m_map_mod_container->Add( m_map_options_sizer, 0, wxALL|wxEXPAND, 5 ); m_main_sizer->Add( m_map_mod_container, 1, wxALL|wxEXPAND, 5 ); //m_main_sizer->FitInside(this); SetBattle( battle ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); SetSizer( m_main_sizer ); Layout(); } template < class BattleType > BattleroomMMOptionsTab::~BattleroomMMOptionsTab() { if(GetAui().manager)GetAui().manager->DetachPane( this ); } template < class BattleType > void BattleroomMMOptionsTab::setupOptionsSizer( wxBoxSizer* parent_sizer, OptionsWrapper::GameOption optFlag ) { if ( !m_battle ) return; const SpringUnitSync::OptionMapSection& sections = m_battle->CustomBattleOptions().m_opts[optFlag].section_map; unsigned int num_options = 0; SpringUnitSync::OptionMapSectionConstIter it = sections.begin(); for ( ; it != sections.end(); ++it ) { wxStaticBoxSizer* section_sizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, it->second.name ), wxVERTICAL ); //only add non-empty sizer if ( setupOptionsSectionSizer( it->second, section_sizer, optFlag ) ) { parent_sizer->Add( section_sizer, 0 , wxALL, section_sizer->GetChildren().size() > 0 ? 5 : 0 ); num_options++; } else delete section_sizer; } //adds options with no asociated section mmOptionSection dummy; wxBoxSizer* section_sizer = new wxBoxSizer( wxVERTICAL ); if ( setupOptionsSectionSizer( dummy, section_sizer, optFlag ) == 0 ) { if ( num_options == 0 ) { wxString name = wxFormat( _T("%d%sno_opts") ) %optFlag % wxsep; wxStaticText* none_found = new wxStaticText( this, wxID_ANY, _("no options available"), wxDefaultPosition, wxDefaultSize, 0, name ); m_statictext_map[name] = none_found; parent_sizer->Add( none_found, 0, wxALL, 3 ); } } else { wxStaticBoxSizer* other_section = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("other") ), wxVERTICAL ); other_section->Add( section_sizer, 0 , wxALL, section_sizer->GetChildren().size() > 0 ? 5 : 0 ); parent_sizer->Add( other_section, 0 , wxALL, 0 ); } } template < class BattleType > wxButton* BattleroomMMOptionsTab::getButton( const wxWindowID id, const wxString& name ) { if ( !m_battle ) return 0; m_button_map[name] = new wxButton(this, id + BUTTON_ID_OFFSET, _T("?"), wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxBU_EXACTFIT, wxDefaultValidator, name ); return m_button_map[name]; } template < class BattleType > int BattleroomMMOptionsTab::setupOptionsSectionSizer(const mmOptionSection& section, wxBoxSizer* parent_sizer, OptionsWrapper::GameOption optFlag) { if ( !m_battle ) return -1; const int col_gap = 35; wxString pref = wxFormat( _T("%d%s") ) % optFlag % wxsep; OptionsWrapper optWrap = m_battle->CustomBattleOptions(); bool enable = m_battle->IsFounderMe(); wxFlexGridSizer* cbxSizer = new wxFlexGridSizer( 4, 2, 10, 10 ); wxFlexGridSizer* spinSizer = new wxFlexGridSizer( 4, 10, 10 ); wxFlexGridSizer* textSizer = new wxFlexGridSizer( 4, 10, 10 ); wxFlexGridSizer* chkSizer = new wxFlexGridSizer( 4, 10, 10 ); const int b_gap = 1; int total_count = 0; int ctrl_count = 0; for (SpringUnitSync::OptionMapBoolIter i = optWrap.m_opts[optFlag].bool_map.begin(); i != optWrap.m_opts[optFlag].bool_map.end();++i) { if ( i->second.section == section.key ) { mmOptionBool current = i->second; wxCheckBox* temp = new wxCheckBox(this,BOOL_START_ID+ctrl_count,current.name); temp->SetToolTip(TE(current.description)); m_name_info_map[pref+current.key] = current.description; temp->SetName(pref+current.key); m_chkbox_map[pref+current.key] = temp; temp->SetValue(current.value); temp->Enable(enable); wxBoxSizer* ct_sizer = new wxBoxSizer( wxHORIZONTAL ); ct_sizer->Add(temp, 0, wxRIGHT| wxALIGN_CENTER_VERTICAL, b_gap); ct_sizer->Add(getButton(BOOL_START_ID+ctrl_count,pref+current.key), 0, wxRIGHT| wxALIGN_CENTER_VERTICAL, col_gap); chkSizer->Add( ct_sizer ); ctrl_count++; } } total_count += ctrl_count; ctrl_count = 0; for ( SpringUnitSync::OptionMapFloatIter it = optWrap.m_opts[optFlag].float_map.begin(); it != optWrap.m_opts[optFlag].float_map.end(); ++it) { wxString seckey = it->second.section; wxString kkey = section.key ; if ( it->second.section == section.key ) { mmOptionFloat current = it->second; SlSpinCtrlDouble* tempspin = new SlSpinCtrlDouble(); tempspin->Create(this, FLOAT_START_ID+ctrl_count, _T(""), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, double(current.min), double(current.max), double(current.value),double(current.stepping), current.key); tempspin->SetSnapToTicks( true ); tempspin->SetToolTip(TE(current.description)); m_name_info_map[pref+current.key] = current.description; tempspin->Enable(enable); tempspin->SetName(pref+current.key); m_spinctrl_map[pref+current.key] = tempspin; wxStaticText* tempst = new wxStaticText(this,-1,current.name); m_statictext_map[pref+current.key] = tempst; spinSizer->Add(tempst,0, wxALIGN_CENTER_VERTICAL); wxBoxSizer* ct_sizer = new wxBoxSizer( wxHORIZONTAL ); ct_sizer->Add(tempspin, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, b_gap); ct_sizer->Add(getButton(FLOAT_START_ID+ctrl_count,pref+current.key), 0, wxRIGHT , col_gap); spinSizer->Add( ct_sizer ); ctrl_count++; } } total_count += ctrl_count; ctrl_count = 0; for ( SpringUnitSync::OptionMapListIter it = optWrap.m_opts[optFlag].list_map.begin(); it != optWrap.m_opts[optFlag].list_map.end(); ++it) { if ( it->second.section == section.key ) { mmOptionList current = it->second; int temp = int(current.cbx_choices.GetCount()-1); int index = LSL::Util::Clamp(current.cur_choice_index,0,temp); wxComboBox* tempchoice = new wxComboBox(this, LIST_START_ID+ctrl_count, current.cbx_choices[index], wxDefaultPosition, wxDefaultSize, current.cbx_choices, wxCB_READONLY, wxDefaultValidator); wxString tooltip = current.description + _T("\n"); for ( ListItemVec::const_iterator itor = current.listitems.begin(); itor != current.listitems.end(); ++itor ) { tooltip+= _T("\n") + itor->name + _T(": ") + itor->desc; } tempchoice->SetToolTip(TE(tooltip)); m_name_info_map[pref+current.key] = tooltip; tempchoice->SetName(pref+current.key); tempchoice->Enable(enable); m_combox_map[pref+current.key] = tempchoice; wxStaticText* tempst = new wxStaticText(this,-1,current.name); m_statictext_map[pref+current.key] = tempst; cbxSizer->Add(tempst,0, wxALIGN_CENTER_VERTICAL); wxBoxSizer* ct_sizer = new wxBoxSizer( wxHORIZONTAL ); ct_sizer->Add(tempchoice, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, b_gap); ct_sizer->Add(getButton(LIST_START_ID+ctrl_count,pref+current.key), 0, wxRIGHT, col_gap); cbxSizer->Add( ct_sizer ); ctrl_count++; } } total_count += ctrl_count; ctrl_count = 0; for ( SpringUnitSync::OptionMapStringIter it = optWrap.m_opts[optFlag].string_map.begin(); it != optWrap.m_opts[optFlag].string_map.end(); ++it) { if ( it->second.section == section.key ) { mmOptionString current = it->second; wxTextCtrl* temptext = new wxTextCtrl(this, STRING_START_ID+ctrl_count, current.value, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, current.key); temptext->SetToolTip(TE(current.description)); m_name_info_map[pref+current.key] = current.description; temptext->SetName(pref+current.key); temptext->Enable(enable); m_textctrl_map[pref+current.key] = temptext; wxStaticText* tempst = new wxStaticText(this,-1,current.name); m_statictext_map[pref+current.key] = tempst; textSizer->Add(tempst,0, wxALIGN_CENTER_VERTICAL); wxBoxSizer* ct_sizer = new wxBoxSizer( wxHORIZONTAL ); ct_sizer->Add(temptext,0, wxALIGN_CENTER_VERTICAL | wxRIGHT, b_gap); ct_sizer->Add(getButton(STRING_START_ID+ctrl_count,pref+current.key),0, wxRIGHT, col_gap); textSizer->Add( ct_sizer ); ctrl_count++; } } total_count += ctrl_count; parent_sizer->Add( chkSizer, 0, wxALL, chkSizer->GetChildren().size() > 0 ? 5 : 0 ); parent_sizer->Add( spinSizer, 0, wxALL, spinSizer->GetChildren().size() > 0 ? 5 : 0 ); parent_sizer->Add( cbxSizer, 0, wxALL, cbxSizer->GetChildren().size() > 0 ? 5 : 0 ); parent_sizer->Add( textSizer, 0, wxALL, textSizer->GetChildren().size() > 0 ? 5 : 0 ); return total_count; } template < class BattleType > void BattleroomMMOptionsTab::OnChkBoxChange(wxCommandEvent& event) { if ( !m_battle ) return; wxCheckBox* box = (wxCheckBox*) event.GetEventObject(); wxString key = (box->GetName()).AfterFirst(sep); long gameoption ; box->GetName().BeforeFirst(sep).ToLong(&gameoption); if( m_battle->CustomBattleOptions().setSingleOption( key , (box->GetValue() ? _T("1") : _T("0")) , (OptionsWrapper::GameOption)gameoption ) ) { if (m_battle->IsFounderMe()) { m_battle->SendHostInfo( (wxString()< void BattleroomMMOptionsTab::OnComBoxChange(wxCommandEvent& event) { if ( !m_battle ) return; wxComboBox* box = (wxComboBox*) event.GetEventObject(); wxString key = (box->GetName()).AfterFirst(sep); long gameoption; box->GetName().BeforeFirst(sep).ToLong(&gameoption); wxString itemKey = m_battle->CustomBattleOptions().GetNameListOptItemKey(key, box->GetValue(), (OptionsWrapper::GameOption)gameoption ); if(m_battle->CustomBattleOptions().setSingleOption( key, itemKey, (OptionsWrapper::GameOption)gameoption ) ) { if (m_battle->IsFounderMe()) { m_battle->SendHostInfo( (wxString()<< gameoption) + wxsep + key ); } } } template < class BattleType > void BattleroomMMOptionsTab::OnTextCtrlChange(wxCommandEvent& event) { if ( !m_battle ) return; wxTextCtrl* box = (wxTextCtrl*) event.GetEventObject(); wxString key = (box->GetName()).AfterFirst(sep); long gameoption; box->GetName().BeforeFirst(sep).ToLong(&gameoption); if(m_battle->CustomBattleOptions().setSingleOption( key, box->GetValue(), (OptionsWrapper::GameOption)gameoption ) ) { if (m_battle->IsFounderMe()) { m_battle->SendHostInfo( (wxString()<< gameoption) + wxsep + key ); } } } template < class BattleType > void BattleroomMMOptionsTab::OnSpinCtrlDoubleChange(SlSpinDoubleEvent& event) { if ( !m_battle ) return; SlSpinCtrlDouble* box = (SlSpinCtrlDouble*) event.GetEventObject(); wxString key = (box->GetName()).AfterFirst(sep); long gameoption; box->GetName().BeforeFirst(sep).ToLong(&gameoption); if(m_battle->CustomBattleOptions().setSingleOption( key,wxFormat( _T("%f") ) % box->GetValue(), (OptionsWrapper::GameOption)gameoption ) ) { if (m_battle->IsFounderMe()) { m_battle->SendHostInfo( (wxString()<< gameoption) + wxsep + key ); } } } template < class BattleType > void BattleroomMMOptionsTab::UpdateOptControls(wxString controlName) { if ( !m_battle ) return; long gameoption; controlName.BeforeFirst(sep).ToLong(&gameoption); wxString optKey = controlName.AfterFirst(sep); if ( gameoption == OptionsWrapper::PrivateOptions ) { if ( optKey == _T("mapname") ) OnReloadControls( OptionsWrapper::MapOption ); if ( optKey == _T("modname") ) OnReloadControls( OptionsWrapper::ModOption ); return; } if ( m_chkbox_map.find(controlName) != m_chkbox_map.end() ) { wxString value = m_battle->CustomBattleOptions().getSingleValue( optKey, (OptionsWrapper::GameOption)gameoption ); wxCheckBox* cur = m_chkbox_map[controlName] ; long l_val; value.ToLong(&l_val); cur->SetValue(l_val); } if ( m_combox_map.find(controlName) != m_combox_map.end() ) { wxString value = m_battle->CustomBattleOptions().getSingleValue( optKey, (OptionsWrapper::GameOption)gameoption ); wxComboBox* cur = m_combox_map[controlName]; cur->SetValue(m_battle->CustomBattleOptions().GetNameListOptValue( optKey, (OptionsWrapper::GameOption)gameoption)); } if ( m_textctrl_map.find(controlName) != m_textctrl_map.end() ) { wxString value = m_battle->CustomBattleOptions().getSingleValue( optKey, (OptionsWrapper::GameOption)gameoption ); wxTextCtrl* cur = m_textctrl_map[controlName]; cur->SetValue(value); } if ( m_spinctrl_map.find(controlName) != m_spinctrl_map.end() ) { wxString value = m_battle->CustomBattleOptions().getSingleValue( optKey, (OptionsWrapper::GameOption)gameoption ); SlSpinCtrlDouble* cur = m_spinctrl_map[controlName] ; double l_val; value.ToDouble(&l_val); cur->SetValue(l_val); } } template void RemovePrefixed(T &v, wxString pref){ typename T::iterator it = v.begin(); while(it != v.end()) { typename T::iterator next = it; ++next; wxString key = it->first; if (key.StartsWith(pref)) { delete it->second; v.erase(it); } it=next; } } template < class BattleType > void BattleroomMMOptionsTab::OnReloadControls(OptionsWrapper::GameOption flag) { if ( !m_battle ) return; wxString pref = wxFormat( _T("%d%s") ) % flag % wxsep; //purgin existing keys from map RemovePrefixed(m_chkbox_map,pref); RemovePrefixed(m_spinctrl_map,pref); RemovePrefixed(m_textctrl_map,pref); RemovePrefixed(m_combox_map,pref); RemovePrefixed(m_statictext_map,pref); RemovePrefixed(m_button_map,pref); //reloading the controls switch (flag) { case OptionsWrapper::ModOption: m_mod_options_sizer->Remove(m_mod_layout); m_mod_layout = new wxBoxSizer( wxVERTICAL); setupOptionsSizer(m_mod_layout,OptionsWrapper::ModOption); //m_mod_options_sizer->Add( m_mod_options_sizer, 1, wxEXPAND, 5 ); m_mod_options_sizer->Add( m_mod_layout, 1, wxALL|wxEXPAND, 5 ); break; case OptionsWrapper::MapOption: m_map_options_sizer->Remove(m_map_layout); m_map_layout = new wxBoxSizer( wxVERTICAL); setupOptionsSizer(m_map_layout,OptionsWrapper::MapOption); m_map_options_sizer->Add( m_map_layout, 1, wxALL|wxEXPAND, 5 ); break; default: break; } //this->SetSizer( m_main_sizer, true ); m_main_sizer->FitInside(this); this->Layout(); SetScrollbars( 10, 10, 62, 62 ); } template < class BattleType > void BattleroomMMOptionsTab::OnReloadControls() { if ( !m_battle ) return; for ( unsigned int i = 0; i < OptionsWrapper::LastOption; i++) OnReloadControls( (OptionsWrapper::GameOption) i ); } template < class BattleType > void BattleroomMMOptionsTab::OnLoadPreset( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxString presetname = m_options_preset_sel->GetValue(); if ( presetname.IsEmpty() ) { customMessageBoxNoModal( SL_MAIN_ICON , _("Cannot load an options set without a name\nPlease select one from the list and try again."), _("error"), wxICON_EXCLAMATION|wxOK ); return; } m_battle->LoadOptionsPreset( presetname ); m_battle->SendHostInfo( IBattle::HI_Send_All_opts ); OnReloadControls( ); } template < class BattleType > void BattleroomMMOptionsTab::OnSavePreset( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxString presetname; if ( !ui().AskText( _("Enter preset name"), _("Enter a name to save the current set of options\nIf a preset with the same name already exist, it will be overwritten"), presetname ) ) return; if ( presetname.IsEmpty() ) { customMessageBoxNoModal( SL_MAIN_ICON , _("Cannot save an options set without a name."), _("error"), wxICON_EXCLAMATION|wxOK ); return; } m_battle->SaveOptionsPreset( presetname ); } template < class BattleType > void BattleroomMMOptionsTab::OnDeletePreset( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxArrayString choices = m_battle->GetPresetList(); int result = wxGetSingleChoiceIndex(_("Pick an existing option set from the list"),_("Delete preset"), choices ); if ( result < 0 ) return; m_battle->DeletePreset( choices[result] ); } template < class BattleType > void BattleroomMMOptionsTab::OnSetModDefaultPreset( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxArrayString choices = m_battle->GetPresetList(); int result = wxGetSingleChoiceIndex(_("Pick an existing option set from the list"),_("Set game default preset"), choices ); if ( result < 0 ) return; sett().SetModDefaultPresetName( m_battle->GetHostModName(), choices[result] ); } template < class BattleType > void BattleroomMMOptionsTab::UpdatePresetList() { if ( !m_battle ) return; m_options_preset_sel->Clear(); m_options_preset_sel->Append(sett().GetPresetList()); m_options_preset_sel->SetStringSelection( m_battle->GetCurrentPreset() ); } template < class BattleType > void BattleroomMMOptionsTab::OnButton( wxCommandEvent& event ) { switch ( event.GetId() ) { case BOPTS_LOADPRES: OnLoadPreset ( event ); break; case BOPTS_SAVEPRES: OnSavePreset ( event ); break; case BOPTS_DELETEPRES: OnDeletePreset ( event ); break; case BOPTS_SETDEFAULTPRES: OnSetModDefaultPreset ( event ); break; default: OnInfoButton( event ); break; } } template < class BattleType > void BattleroomMMOptionsTab::OnInfoButton( wxCommandEvent& event ) { if ( !m_battle ) return; #ifdef wxUSE_TIPWINDOW wxWindow* button = (wxWindow*) event.GetEventObject(); if ( button ) { nameInfoMap::const_iterator iter = m_name_info_map.find( button->GetName() ); if ( iter != m_name_info_map.end() ) { //needs to be moved a little away from cursor pos wxPoint pos = wxGetMousePosition(); wxTipWindow* tip = new wxTipWindow ( this, iter->second , 1000 ); tip->Move( pos.x, pos.y - tip->GetSize().GetHeight() ); } } #endif } template < class BattleType > void BattleroomMMOptionsTab::SetBattle( BattleType* battle ) { m_battle = battle; m_options_preset_sel->Enable(m_battle); m_load_btn->Enable(m_battle); m_save_btn->Enable(m_battle); m_delete_btn->Enable(m_battle); m_default_btn->Enable(m_battle); for ( chkBoxMap::iterator itor = m_chkbox_map.begin(); itor != m_chkbox_map.end(); ++itor ) itor->second->Enable(m_battle); for ( comboBoxMap::iterator itor = m_combox_map.begin(); itor != m_combox_map.end(); ++itor ) itor->second->Enable(m_battle); for ( typename spinCtrlMap::iterator itor = m_spinctrl_map.begin(); itor != m_spinctrl_map.end(); ++itor ) itor->second->Enable(m_battle); for ( textCtrlMap::iterator itor = m_textctrl_map.begin(); itor != m_textctrl_map.end(); ++itor ) itor->second->Enable(m_battle); for ( buttonMap::iterator itor = m_button_map.begin(); itor != m_button_map.end(); ++itor ) itor->second->Enable(m_battle); if ( m_battle ) { m_options_preset_sel->SetStringSelection( sett().GetModDefaultPresetName( m_battle->GetHostModName() ) ); if ( !m_battle->IsFounderMe() ) { m_options_preset_sel->Disable(); m_load_btn->Disable(); m_save_btn->Disable(); m_delete_btn->Disable(); m_default_btn->Disable(); } OnReloadControls(); } } template < class BattleType > BattleType* BattleroomMMOptionsTab::GetBattle() { return m_battle; } springlobby-0.169/src/hosting/battleroommmoptionstab.h0000600000176000000410000001272312105760300024644 0ustar buildbotwww-data00000000000000#ifndef BATTLEROOMMMOPTIONSTAB_H_ #define BATTLEROOMMMOPTIONSTAB_H_ #include #include #include "mmoptionswrapper.h" const int BOOL_START_ID = 3000; const int FLOAT_START_ID = 4000; const int LIST_START_ID = 5000; const int STRING_START_ID = 6000; const int BUTTON_ID_OFFSET = 7000; class wxBoxSizer; class wxStaticBoxSizer; class OptionsWrapper; class wxCheckBox; class wxComboBox; class wxCommandEvent; class Battle; template class SlSpinCtrlDouble; class wxTextCtrl; class SlSpinDoubleEvent; class wxStaticText; class wxButton; /** \brief a panel displaying programmatically generated gui elements to manipulate mmOptions * Since storing of data is mixed in with gui elements, this is a very delicate place to apply changes to. * If there's ever any need / desire to refactor this, EXTENSIVE testing should be applied afterwards! \n * There's one map per control type, storing the mapping between name and pointer, where name has the format * optionFlag (decimal) + seperator + mmOptionKey \n * That way we can use the inverse mapping in the event handlers to go from the name of event-generating gui element * to the mmOptionKey that needs to be changed. */ template < class BattleType > class BattleroomMMOptionsTab : public wxScrolledWindow { public: BattleroomMMOptionsTab( BattleType* battle, wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,300 ), long style = wxTAB_TRAVERSAL ); ~BattleroomMMOptionsTab(); void UpdateOptControls(wxString controlName); //!relaod single category void OnReloadControls(OptionsWrapper::GameOption flag); //!reload all categories void OnReloadControls(); void UpdatePresetList(); void OnButton( wxCommandEvent& event ); void OnLoadPreset( wxCommandEvent& event ); void OnSavePreset( wxCommandEvent& event ); void OnDeletePreset( wxCommandEvent& event ); void OnSetModDefaultPreset( wxCommandEvent& event ); void OnInfoButton( wxCommandEvent& event ); BattleType* GetBattle(); void SetBattle( BattleType* battle ); protected: BattleType* m_battle; wxBoxSizer* m_main_sizer; wxStaticBoxSizer* m_mod_options_sizer; wxBoxSizer* m_mod_layout; wxStaticBoxSizer* m_map_options_sizer; wxBoxSizer* m_map_layout; wxBoxSizer* m_map_mod_container; wxButton* m_load_btn; wxButton* m_save_btn; wxButton* m_delete_btn; wxButton* m_default_btn; wxComboBox* m_options_preset_sel; OptionsWrapper* m_mapmodoptions; typedef BattleroomMMOptionsTab ThisType; friend class SlSpinCtrlDouble; //so we don't have to make the event handler public for everyone //totally ok to store pointers here, since wx takes care of gui element destruction for us typedef std::map chkBoxMap; typedef std::map comboBoxMap; typedef std::map * > spinCtrlMap; typedef std::map textCtrlMap; typedef std::map staticTextMap; typedef std::map buttonMap; typedef std::map nameInfoMap; //! map control name <-> info (description) chkBoxMap m_chkbox_map; comboBoxMap m_combox_map; spinCtrlMap m_spinctrl_map; textCtrlMap m_textctrl_map; staticTextMap m_statictext_map; buttonMap m_button_map; nameInfoMap m_name_info_map; /** \brief setup toplevel sizer per GameOption with all child sizers ( sections ) */ void setupOptionsSizer( wxBoxSizer* parent_sizer, OptionsWrapper::GameOption optFlag ); /** \brief generate Gui elements from loaded MMoptions * for all values in all option maps create a control (pointer), * set the controls name to the option key and add it to the appropiate map and sizer. * \return the total num of controls in the sizer */ int setupOptionsSectionSizer(const mmOptionSection& section, wxBoxSizer* parent_sizer, OptionsWrapper::GameOption optFlag); /** \name Event handlers * @{ * one event handler per gui element type \n * these trigger a SendHostInfo(key) for the changed option */ void OnComBoxChange(wxCommandEvent&); void OnChkBoxChange(wxCommandEvent&); void OnTextCtrlChange(wxCommandEvent& event); void OnSpinCtrlDoubleChange(SlSpinDoubleEvent& event); /** @} */ wxButton* getButton( const wxWindowID id, const wxString& name ); DECLARE_EVENT_TABLE() }; enum { BOPTS_LOADPRES = wxID_HIGHEST, BOPTS_SAVEPRES, BOPTS_DELETEPRES, BOPTS_SETDEFAULTPRES, BOPTS_CHOSEPRES }; #include "battleroommmoptionstab.cxx" #endif /*BATTLEROOMMMOPTIONSTAB_H_*/ /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/hosting/battleroomtab.cpp0000600000176000000410000013002412105760300023224 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007, 2008 The SpringLobby Team. All rights reserved. */ // // Class: BattleRoomTab // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "battleroomtab.h" #include "ui.h" #include "springunitsync.h" #include "user.h" #include "battle.h" #include "defines.h" #include "utils/conversion.h" #include "utils/debug.h" #include "utils/uievents.h" #include "defines.h" #include "battleroomlistctrl.h" #include "chatpanel.h" #include "mapctrl.h" #include "uiutils.h" #include "addbotdialog.h" #include "server.h" #include "iconimagelist.h" #include "utils/customdialogs.h" #include "autobalancedialog.h" #include "settings.h" #include "Helper/colorbutton.h" #include "mapselectdialog.h" #include "mmoptionwindows.h" #include "aui/auimanager.h" #include "hostbattledialog_public.h" BEGIN_EVENT_TABLE( BattleRoomTab, wxPanel ) EVT_BUTTON ( BROOM_START, BattleRoomTab::OnStart ) EVT_BUTTON ( BROOM_LEAVE, BattleRoomTab::OnLeave ) EVT_BUTTON ( BROOM_ADDBOT, BattleRoomTab::OnAddBot ) EVT_BUTTON ( BROOM_HOST_NEW, BattleRoomTab::OnHostNew ) EVT_CHECKBOX ( BROOM_IMREADY, BattleRoomTab::OnImReady ) EVT_CHECKBOX ( BROOM_SPEC, BattleRoomTab::OnImSpec ) EVT_CHECKBOX ( BROOM_UNSPEC, BattleRoomTab::OnAutounSpec ) EVT_COMBOBOX ( BROOM_TEAMSEL, BattleRoomTab::OnTeamSel ) EVT_COMBOBOX ( BROOM_ALLYSEL, BattleRoomTab::OnAllySel ) EVT_BUTTON ( BROOM_COLOURSEL, BattleRoomTab::OnColourSel ) EVT_COMBOBOX ( BROOM_SIDESEL, BattleRoomTab::OnSideSel ) EVT_COMBOBOX ( BROOM_PRESETSEL, BattleRoomTab::OnPresetSel ) EVT_BUTTON ( BROOM_SAVEPRES, BattleRoomTab::OnSavePreset ) EVT_BUTTON ( BROOM_DELETEPRES, BattleRoomTab::OnDeletePreset ) EVT_BUTTON ( BROOM_SETDEFAULTPRES, BattleRoomTab::OnSetModDefaultPreset ) EVT_BUTTON ( BROOM_MAP_BROWSE, BattleRoomTab::OnMapBrowse ) EVT_COMBOBOX ( BROOM_MAP_SEL, BattleRoomTab::OnMapSelect ) EVT_CHECKBOX ( BROOM_LOCK, BattleRoomTab::OnLock ) EVT_CHECKBOX ( BROOM_AUTOLOCK, BattleRoomTab::OnAutoLock ) EVT_BUTTON ( BROOM_MANAGE_MENU, BattleRoomTab::OnShowManagePlayersMenu ) EVT_MENU ( BROOM_AUTOHOST, BattleRoomTab::OnAutoHost ) EVT_MENU ( BROOM_AUTOSPECT, BattleRoomTab::OnAutoSpec ) EVT_MENU ( BROOM_AUTOSTART, BattleRoomTab::OnAutoStart ) EVT_MENU ( BROOM_AUTOCONTROL, BattleRoomTab::OnAutoControl ) EVT_MENU ( BROOM_RING_UNREADY, BattleRoomTab::OnRingUnready ) EVT_MENU ( BROOM_RING_UNSYNC, BattleRoomTab::OnRingUnsynced ) EVT_MENU ( BROOM_RING_UNREADY_UNSYNC, BattleRoomTab::OnRingUnreadyUnsynced ) EVT_MENU ( BROOM_SPECT_UNREADY, BattleRoomTab::OnSpectUnready ) EVT_MENU ( BROOM_SPECT_UNSYNC, BattleRoomTab::OnSpectUnsynced ) EVT_MENU ( BROOM_SPECT_UNREADY_UNSYNC, BattleRoomTab::OnSpectUnreadyUnsynced ) EVT_MENU ( BROOM_LOCK_BALANCE, BattleRoomTab::OnLockBalance ) EVT_MENU ( BROOM_BALANCE, BattleRoomTab::OnBalance ) EVT_MENU ( BROOM_FIXID, BattleRoomTab::OnFixTeams ) EVT_MENU ( BROOM_FIXCOLOURS, BattleRoomTab::OnFixColours ) EVT_MENU ( BROOM_AUTOPASTE, BattleRoomTab::OnAutoPaste ) EVT_LIST_ITEM_ACTIVATED ( BROOM_OPTIONLIST, BattleRoomTab::OnOptionActivate ) END_EVENT_TABLE() template < int N, int S = 1 > class MyStrings : public wxArrayString { public: MyStrings() { for ( int i = S; i <= N; ++i ) Add( TowxString( i ) ); } }; const MyStrings team_choices; const MyStrings ally_choices; BattleRoomTab::BattleRoomTab( wxWindow* parent, Battle* battle ) : wxScrolledWindow( parent, -1 ), m_battle( battle ), m_BattleActionSink( this, &UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent )) { GetAui().manager->AddPane( this, wxLEFT, _T( "battleroomtab" ) ); // Create all widgets m_splitter = new wxSplitterWindow( this, -1, wxDefaultPosition, wxSize( 100, 60 ) ); m_player_panel = new wxScrolledWindow( m_splitter , -1 ); m_player_panel->SetScrollRate( SCROLL_RATE, SCROLL_RATE ); m_team_sel = new wxComboBox( m_player_panel, BROOM_TEAMSEL, _T( "1" ), wxDefaultPosition, wxSize( 50, CONTROL_HEIGHT ), team_choices ); m_team_sel->SetToolTip( TE( _( "Players with the same team number share control of their units." ) ) ); m_ally_sel = new wxComboBox( m_player_panel, BROOM_ALLYSEL, _T( "1" ), wxDefaultPosition, wxSize( 50, CONTROL_HEIGHT ), ally_choices ); m_ally_sel->SetToolTip( TE( _( "Players with the same ally number work together to achieve victory." ) ) ); m_color_sel = new ColorButton( m_player_panel, BROOM_COLOURSEL, wxColour (0,0,0), wxDefaultPosition, wxSize( -1, CONTROL_HEIGHT ) ); m_color_sel->SetToolTip( TE( _( "Select a color to identify your units in-game" ) ) ); m_side_sel = new wxBitmapComboBox( m_player_panel, BROOM_SIDESEL, _T( "" ), wxDefaultPosition, wxSize( -1, CONTROL_HEIGHT ) ); m_side_sel->SetToolTip( TE( _( "Select your faction" ) ) ); m_spec_chk = new wxCheckBox( m_player_panel, BROOM_SPEC, _( "Spectator" ), wxDefaultPosition, wxSize( -1, CONTROL_HEIGHT ) ); m_spec_chk->SetToolTip( TE( _( "Spectate (watch) the battle instead of playing" ) ) ); m_auto_unspec_chk = new wxCheckBox( m_player_panel, BROOM_UNSPEC, _( "Auto un-spectate" ), wxDefaultPosition, wxSize( -1, CONTROL_HEIGHT ) ); m_auto_unspec_chk->SetToolTip( TE( _( "automatically unspec when there's a free slot" ) ) ); m_ready_chk = new wxCheckBox( m_player_panel, BROOM_IMREADY, _( "I'm ready" ), wxDefaultPosition, wxSize( -1, CONTROL_HEIGHT ) ); m_ready_chk->SetToolTip( TE( _( "Click this if you are content with the battle settings." ) ) ); m_team_lbl = new wxStaticText( m_player_panel, -1, _( "Team" ) ); m_ally_lbl = new wxStaticText( m_player_panel, -1, _( "Ally" ) ); m_color_lbl = new wxStaticText( m_player_panel, -1, _( "Color" ) ); m_side_lbl = new wxStaticText( m_player_panel, -1, _( "Side" ) ); m_ally_setup_lbl = new wxStaticText( m_player_panel, -1, _( "Setup: " ) ); m_ok_count_lbl = new wxStaticText( m_player_panel, -1, _( "Unready: 0" ) ); //XXX not needed ? // m_size_lbl = new wxStaticText( this, -1, _T( "" ) ); // m_wind_lbl = new wxStaticText( this, -1, _T( "" ) ); // m_tidal_lbl = new wxStaticText( this, -1, _T( "" ) ); m_map_combo = new wxComboBox( this, BROOM_MAP_SEL, _T( "" ), wxDefaultPosition, wxDefaultSize ); m_minimap = new MapCtrl( this, 162, m_battle, true, true, true, false ); m_minimap->SetToolTip( TE( _( "A preview of the selected map. You can see the starting positions, or (if set) starting boxes." ) ) ); m_browse_map_btn = new wxButton( this, BROOM_MAP_BROWSE, _( "Map" ), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); m_browse_map_btn->SetSize( m_browse_map_btn->GetSize().GetWidth() * 2 , m_browse_map_btn->GetSize().GetHeight() ) ; // has 0 effect m_players = new BattleroomListCtrl( m_player_panel, m_battle, false, true ); m_chat = new ChatPanel( m_splitter, m_battle ); m_command_line = new wxStaticLine( this, -1, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); m_host_new_btn = new wxButton( this, BROOM_HOST_NEW, _( "Host new" ), wxDefaultPosition, wxDefaultSize ); m_host_new_btn->SetToolTip( TE( _( "Host a new battle" ) ) ); m_leave_btn = new wxButton( this, BROOM_LEAVE, _( "Leave" ), wxDefaultPosition, wxSize( -1, CONTROL_HEIGHT ) ); m_leave_btn->SetToolTip( TE( _( "Leave the battle and return to the battle list" ) ) ); m_start_btn = new wxButton( this, BROOM_START, _( "Start" ), wxDefaultPosition, wxSize( -1, CONTROL_HEIGHT ) ); m_start_btn->SetToolTip( TE( _( "Start the battle" ) ) ); m_manage_players_btn = new wxButton( this, BROOM_MANAGE_MENU, _( "Player Management" ), wxDefaultPosition, wxSize( -1, CONTROL_HEIGHT ) ); m_manage_players_btn->SetToolTip( TE( _( "Various functions to make team games simplers to setup" ) ) ); m_addbot_btn = new wxButton( this, BROOM_ADDBOT, _( "Add Bot..." ), wxDefaultPosition, wxSize( -1, CONTROL_HEIGHT ) ); m_addbot_btn->SetToolTip( TE( _( "Add a computer-controlled player to the game" ) ) ); m_autolock_chk = new wxCheckBox( this, BROOM_AUTOLOCK, _( "Autolock on start" ), wxDefaultPosition, wxSize( -1, CONTROL_HEIGHT ) ); m_autolock_chk->SetToolTip( TE( _( "Automatically locks the battle when the game starts and unlock when it's finished." ) ) ); m_autolock_chk->SetValue( sett().GetLastAutolockStatus() ); m_lock_chk = new wxCheckBox( this, BROOM_LOCK, _( "Locked" ), wxDefaultPosition, wxSize( -1, CONTROL_HEIGHT ) ); m_lock_chk->SetToolTip( TE( _( "Prevent additional players from joining the battle" ) ) ); m_manage_users_mnu = new wxMenu(); m_autohost_mnu = new wxMenuItem( m_manage_users_mnu, BROOM_AUTOHOST, _( "Autohost" ), _( "Toggle autohost mode. This allows players to control your battle using commands like '!balance' and '!start'." ), wxITEM_CHECK ); m_manage_users_mnu->Append( m_autohost_mnu ); m_autohost_mnu->Check( false ); m_autopaste_mnu = new wxMenuItem( m_manage_users_mnu, BROOM_AUTOPASTE, _( "AutoPaste Description" ), _( "Automatically paste battle's descriptoin when a new user joins" ), wxITEM_CHECK ); m_manage_users_mnu->Append( m_autopaste_mnu ); m_autopaste_mnu->Check( sett().GetBattleLastAutoAnnounceDescription() ); m_autospec_mnu = new wxMenuItem( m_manage_users_mnu, BROOM_AUTOSPECT, _( "AutoSpect" ), _( "Automatically spectate players that don't ready up or become synced within x seconds." ), wxITEM_CHECK ); m_manage_users_mnu->Append( m_autospec_mnu ); m_autospec_mnu->Check( sett().GetBattleLastAutoSpectTime() > 0 ); m_autocontrol_mnu = new wxMenuItem( m_manage_users_mnu, BROOM_AUTOCONTROL, _( "AutoControlBalance" ), _( "Automatically balance teams and allies and fix colors when all players are ready and synced" ), wxITEM_CHECK ); m_manage_users_mnu->Append( m_autocontrol_mnu ); m_autocontrol_mnu->Check( sett().GetBattleLastAutoControlState() ); m_autostart_mnu = new wxMenuItem( m_manage_users_mnu, BROOM_AUTOSTART, _( "AutoStart" ), _( "Automatically start the battle when all players are ready and synced" ), wxITEM_CHECK ); m_manage_users_mnu->Append( m_autostart_mnu ); m_autostart_mnu->Check( sett().GetBattleLastAutoStartState() ); m_lock_balance_mnu = new wxMenuItem( m_manage_users_mnu, BROOM_LOCK_BALANCE, _( "Lock Balance" ), _( "When activated, prevents anyone but the host to change team and ally" ), wxITEM_CHECK ); m_manage_users_mnu->Append( m_lock_balance_mnu ); m_lock_balance_mnu->Check( false ); wxMenu* ring_menu = new wxMenu; wxMenuItem* ring_unready = new wxMenuItem( ring_menu, BROOM_RING_UNREADY, _( "Ring unready" ), _( "Rings all players that don't have ready status and aren't spectators" ) ); ring_menu->Append( ring_unready ); wxMenuItem* ring_unsynced = new wxMenuItem( ring_menu, BROOM_RING_UNSYNC, _( "Ring unsynced" ), _( "Rings all players that don't have sync status and aren't spectators" ) ); ring_menu->Append( ring_unsynced ); wxMenuItem* ring_unready_unsynced = new wxMenuItem( ring_menu, BROOM_RING_UNREADY_UNSYNC, _( "Ring unready and unsynced" ), _( "Rings all players that don't have sync status or don't have ready status and aren't spectators" ) ); ring_menu->Append( ring_unready_unsynced ); m_manage_users_mnu->Append( wxID_ANY, _( "Ring ..." ), ring_menu ); wxMenu* spect_menu = new wxMenu; wxMenuItem* spect_unready = new wxMenuItem( spect_menu, BROOM_SPECT_UNREADY, _( "Spect unready" ), _( "Force to spectate all players that don't have ready status" ) ); spect_menu->Append( spect_unready ); wxMenuItem* spect_unsynced = new wxMenuItem( spect_menu, BROOM_SPECT_UNSYNC, _( "Spect unsynced" ), _( "Force to spectate all players that don't have sync status" ) ); spect_menu->Append( spect_unsynced ); wxMenuItem* spect_unready_unsynced = new wxMenuItem( spect_menu, BROOM_SPECT_UNREADY_UNSYNC, _( "Force to spectate unready and unsynced" ), _( "Rings all players that don't have sync status or don't have ready status" ) ); spect_menu->Append( spect_unready_unsynced ); m_manage_users_mnu->Append( wxID_ANY, _( "Force spectate ..." ), spect_menu ); wxMenuItem* m_balance_mnu = new wxMenuItem( m_manage_users_mnu, BROOM_BALANCE, _( "Balance alliances" ), _( "Automatically balance players into two or more alliances" ) ); m_manage_users_mnu->Append( m_balance_mnu ); wxMenuItem* m_fix_colours_mnu = new wxMenuItem( m_manage_users_mnu, BROOM_FIXCOLOURS, _( "Fix colours" ), _( "Make player colors unique" ) ); m_manage_users_mnu->Append( m_fix_colours_mnu ); wxMenuItem* m_fix_team_mnu = new wxMenuItem( m_manage_users_mnu, BROOM_FIXID, _( "Balance teams" ), _( "Automatically balance players into control teams, by default none shares control" ) ); m_manage_users_mnu->Append( m_fix_team_mnu ); wxStaticBoxSizer* m_preset_sizer; m_preset_sizer = new wxStaticBoxSizer( new wxStaticBox( this, 0, _( "Manage Presets" ) ), wxVERTICAL ); wxBoxSizer* m_preset_btns_sizer; m_preset_btns_sizer = new wxBoxSizer( wxHORIZONTAL ); m_options_preset_sel = new wxComboBox( this, BROOM_PRESETSEL, _T(""), wxDefaultPosition, wxDefaultSize, sett().GetPresetList(), wxCB_READONLY ); m_options_preset_sel->SetToolTip( TE( _( "Load battle preset" ) ) ); m_preset_sizer->Add( m_options_preset_sel, 0, wxEXPAND | wxALL ); m_save_btn = new wxButton( this, BROOM_SAVEPRES, _( "Save" ), wxDefaultPosition, wxDefaultSize ); m_save_btn->SetToolTip( TE( _( "Save a set of options." ) ) ); m_preset_btns_sizer->Add( m_save_btn, 0, wxEXPAND ); m_delete_btn = new wxButton( this, BROOM_DELETEPRES, _( "Delete" ), wxDefaultPosition, wxDefaultSize ); m_delete_btn->SetToolTip( TE( _( "Delete a set of options." ) ) ); m_preset_btns_sizer->Add( m_delete_btn, 0, wxEXPAND ); m_default_btn = new wxButton( this, BROOM_SETDEFAULTPRES, _( "Set default" ), wxDefaultPosition, wxDefaultSize ); m_default_btn->SetToolTip( TE( _( "Use the current set of options as game's default." ) ) ); m_preset_btns_sizer->Add( m_default_btn, 0, wxEXPAND ); m_preset_sizer->Add( m_preset_btns_sizer, 0, wxEXPAND ); m_opts_list = new wxListCtrl( this, BROOM_OPTIONLIST, wxDefaultPosition, wxDefaultSize, wxLC_NO_HEADER | wxLC_REPORT ); //m_opts_list->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); m_opts_list->SetFont( wxFont( 8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT ) ); m_opts_list->SetToolTip( TE( _( "Activate an element to quickly change it" ) ) ); wxListItem col; col.SetText( _( "Option" ) ); m_opts_list->InsertColumn( 0, col ); col.SetText( _( "Value" ) ); m_opts_list->InsertColumn( 1, col ); // Create Sizers m_players_sizer = new wxBoxSizer( wxVERTICAL ); m_player_sett_sizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* m_map_select_sizer = new wxBoxSizer( wxHORIZONTAL ); m_info_sizer = new wxBoxSizer( wxVERTICAL ); m_top_sizer = new wxBoxSizer( wxHORIZONTAL ); m_buttons_sizer = new wxBoxSizer( wxHORIZONTAL ); //m_info1_sizer = new wxBoxSizer( wxHORIZONTAL ); m_main_sizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* m_side_sel_sizer = new wxBoxSizer( wxHORIZONTAL ); #ifndef HAVE_WX29 int side_sel_width = m_side_sel->GetWidestItemWidth(); m_side_sel_sizer->SetMinSize( side_sel_width, CONTROL_HEIGHT ); #endif m_side_sel_sizer->Add( m_side_sel, 1, wxEXPAND ); // Put widgets in place m_player_sett_sizer->Add( m_team_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 2 ); m_player_sett_sizer->Add( m_team_sel, 0, wxEXPAND | wxALL, 2 ); m_player_sett_sizer->Add( m_ally_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 2 ); m_player_sett_sizer->Add( m_ally_sel, 0, wxEXPAND | wxALL, 2 ); m_player_sett_sizer->Add( m_color_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 2 ); m_player_sett_sizer->Add( m_color_sel, 0, wxEXPAND | wxALL, 2 ); m_player_sett_sizer->Add( m_side_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 2 ); m_player_sett_sizer->Add( m_side_sel_sizer, 0, wxEXPAND | wxALL, 2 ); m_player_sett_sizer->Add( m_spec_chk, 0, wxEXPAND | wxALL, 2 ); m_player_sett_sizer->Add( m_auto_unspec_chk, 0, wxEXPAND | wxALL, 2 ); m_player_sett_sizer->Add( m_ready_chk, 0, wxEXPAND | wxALL, 2 ); m_player_sett_sizer->AddStretchSpacer(); m_player_sett_sizer->Add( m_ally_setup_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 2 ); m_player_sett_sizer->Add( m_ok_count_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 2 ); m_players_sizer->Add( m_players, 1, wxEXPAND ); m_players_sizer->Add( m_player_sett_sizer, 0, wxEXPAND ); m_player_panel->SetSizer( m_players_sizer ); SplitSizerHorizontally( sett().GetSplitBRoomHorizontally() ); //m_info1_sizer->Add( m_wind_lbl, 1, wxEXPAND ); //m_info1_sizer->Add( m_size_lbl, 1, wxEXPAND ); m_info_sizer->Add( m_minimap, 0, wxEXPAND ); m_map_select_sizer->Add( m_map_combo, 0, wxALL | wxEXPAND | wxALIGN_CENTER_VERTICAL ); m_map_select_sizer->Add( m_browse_map_btn, 0, wxALIGN_RIGHT ); m_info_sizer->Add( m_map_select_sizer, 0, wxALL ); //m_info_sizer->Add( m_info1_sizer, 0, wxEXPAND ); //m_info_sizer->Add( m_tidal_lbl, 0, wxEXPAND ); m_info_sizer->Add( m_opts_list, 1, wxEXPAND | wxTOP, 4 ); m_info_sizer->Add( m_preset_sizer, 0, wxEXPAND, 4 ); m_top_sizer->Add( m_splitter, 1, wxEXPAND | wxALL, 2 ); m_top_sizer->Add( m_info_sizer, 0, wxEXPAND | wxALL, 2 ); m_buttons_sizer->AddStretchSpacer(); m_buttons_sizer->Add( m_host_new_btn, 0, wxEXPAND | wxALL, 2 ); m_buttons_sizer->AddStretchSpacer(); m_buttons_sizer->Add( m_leave_btn, 0, wxEXPAND | wxALL, 2 ); m_buttons_sizer->Add( m_addbot_btn, 0, wxEXPAND | wxALL, 2 ); m_buttons_sizer->Add( m_autolock_chk, 0, wxEXPAND | wxALL, 2 ); m_buttons_sizer->Add( m_lock_chk, 0, wxEXPAND | wxALL, 2 ); m_buttons_sizer->Add( m_manage_players_btn, 0, wxEXPAND | wxALL, 2 ); m_buttons_sizer->Add( m_start_btn, 0, wxEXPAND | wxALL, 2 ); m_main_sizer->Add( m_top_sizer, 1, wxEXPAND ); m_main_sizer->Add( m_command_line, 0, wxEXPAND ); m_main_sizer->Add( m_buttons_sizer, 0, wxEXPAND ); m_splitter->SetMinimumPaneSize( 240 ); SetBattle( battle ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); SetSizer( m_main_sizer ); Layout(); unsigned int widthfraction = m_opts_list->GetClientSize().GetWidth() / 3; m_opts_list->SetColumnWidth( 0, widthfraction * 1.95 ); m_opts_list->SetColumnWidth( 1, widthfraction * 0.95 ); } BattleRoomTab::~BattleRoomTab() { if ( GetAui().manager ) GetAui().manager->DetachPane( this ); } void BattleRoomTab::SplitSizerHorizontally( const bool horizontal ) { if ( m_splitter->IsSplit() ) m_splitter->Unsplit(); if ( horizontal ) m_splitter->SplitHorizontally( m_player_panel, m_chat ); else m_splitter->SplitVertically( m_player_panel, m_chat ); } wxString _GetStartPosStr( IBattle::StartType t ) { switch ( t ) { case IBattle::ST_Fixed: return _( "Fixed" ); case IBattle::ST_Random: return _( "Random" ); case IBattle::ST_Choose: return _( "Boxes" ); case IBattle::ST_Pick: return _( "Pick" ); default: return _T( "?" ); }; } wxString _GetGameTypeStr( IBattle::GameType t ) { switch ( t ) { case IBattle::GT_ComContinue: return _( "Continue" ); case IBattle::GT_ComEnds: return _( "End" ); case IBattle::GT_Lineage: return _( "Lineage" ); default: return _T( "?" ); }; } void BattleRoomTab::UpdateBattleInfo() { if ( !m_battle ) return; m_lock_chk->SetValue( m_battle->IsLocked() ); m_minimap->UpdateMinimap(); UpdateMapInfoSummary(); } void BattleRoomTab::PrintAllySetup() { wxString setupstring; if ( m_battle ) { setupstring += _T("<") + TowxString( m_battle->GetSpectators() ) + _T("> "); setupstring += _T(" [") + TowxString( m_battle->GetNumActivePlayers() ) + _T("]: "); wxString alliancesstring; int previousalliancesize = 0; bool ffamode = true; std::map allysizes = m_battle->GetAllySizes(); if ( allysizes.size() < 3 ) ffamode = false; for ( std::map::const_iterator itor = allysizes.begin(); itor != allysizes.end(); ++itor ) { if ( itor != allysizes.begin() ) { alliancesstring += _T("v"); if (previousalliancesize != itor->second) ffamode = false; } else previousalliancesize = itor->second; alliancesstring += TowxString( itor->second ); //this takes space needlessy //alliancesstring += wxFormat( _T("(%d)") , itor->first ); } if ( !ffamode ) setupstring += alliancesstring; else setupstring += wxFormat(_("%d way FFA") ) % previousalliancesize; } m_ally_setup_lbl->SetLabel( wxFormat( _( "Setup: %s" ) ) % setupstring ); Layout(); } void BattleRoomTab::UpdateBattleInfo( const wxString& Tag ) { if ( !m_battle ) return; long index = m_opt_list_map[ Tag ]; OptionsWrapper::GameOption type = ( OptionsWrapper::GameOption )s2l( Tag.BeforeFirst( '_' ) ); wxString key = Tag.AfterFirst( '_' ); wxString value; if ( ( type == OptionsWrapper::MapOption ) || ( type == OptionsWrapper::ModOption ) || ( type == OptionsWrapper::EngineOption ) ) { OptionType DataType = m_battle->CustomBattleOptions().GetSingleOptionType( key ); value = m_battle->CustomBattleOptions().getSingleValue( key, ( OptionsWrapper::GameOption )type ); if ( m_battle->CustomBattleOptions().getDefaultValue( key, type ) == value ) m_opts_list->SetItemFont( index, wxFont( 8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT ) ); else m_opts_list->SetItemFont( index, wxFont( 8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD ) ); if ( DataType == opt_bool ) { value = bool2yn( s2l( value ) ); // convert from 0/1 to literal Yes/No } else if ( DataType == opt_list ) { value = m_battle->CustomBattleOptions().GetNameListOptValue( key, type ); // get the key full name not short key } m_opts_list->SetItem( index, 1, value ); } else// if ( type == OptionsWrapper::PrivateOptions ) { if ( key == _T( "mapname" ) ) // the map has been changed { UpdateMapInfoSummary(); wxString mapname =m_battle->GetHostMapName(); int index_ = m_map_combo->FindString( mapname ); if ( index_ != wxNOT_FOUND ) m_map_combo->SetSelection( index_ ); else m_map_combo->SetValue( mapname ); //delete any eventual map option from the list and add options of the new map for ( int i = m_map_opts_index; i < m_opts_list->GetItemCount(); ) { m_opts_list->DeleteItem( i ); } AddMMOptionsToList( m_map_opts_index, OptionsWrapper::MapOption ); m_minimap->UpdateMinimap(); } else if ( key == _T( "restrictions" ) ) { m_opts_list->SetItem( index, 1, bool2yn( m_battle->RestrictedUnits().size() > 0 ) ); } } } BattleroomListCtrl& BattleRoomTab::GetPlayersListCtrl() { ASSERT_LOGIC( m_players != 0, _T( "m_players = 0" ) ); return *m_players; } void BattleRoomTab::UpdateMapInfoSummary() { try // updates map info summary { ASSERT_EXCEPTION( m_battle->MapExists(), _( "Map does not exist." ) ); UnitSyncMap map = m_battle->LoadMap(); m_opts_list->SetItem( m_opt_list_map[ _( "Size" ) ] , 1, wxFormat( _T( "%.0fx%.0f" ) ) % (map.info.width / 512.0) % (map.info.height / 512.0 ) ); m_opts_list->SetItem( m_opt_list_map[ _( "Windspeed" ) ], 1, wxFormat( _T( "%d-%d" ) ) % map.info.minWind % map.info.maxWind ); m_opts_list->SetItem( m_opt_list_map[ _( "Tidal strength" ) ], 1, wxFormat( _T( "%d" ) ) % map.info.tidalStrength ); // m_opts_list->SetItem( 0, 1, ); } catch ( ... ) { m_opts_list->SetItem( m_opt_list_map[ _( "Size" ) ], 1, _T( "?x?" ) ); m_opts_list->SetItem( m_opt_list_map[ _( "Windspeed" ) ], 1, _T( "?-?" ) ); m_opts_list->SetItem( m_opt_list_map[ _( "Tidal strength" ) ], 1, _T( "?" ) ); } } void BattleRoomTab::UpdateStatsLabels() { m_ok_count_lbl->SetLabel( wxFormat( _( "Unready: %d" ) ) % ( m_battle->GetNumActivePlayers() - m_battle->GetNumOkPlayers() ) ); PrintAllySetup(); } void BattleRoomTab::UpdateMyInfo() { if ( !m_battle ) return; m_players->UpdateUser(m_battle->GetMe()); m_players->RefreshVisibleItems(); } void BattleRoomTab::UpdateUser( User& user ) { if ( !m_battle ) return; m_players->UpdateUser( user ); m_minimap->UpdateMinimap(); UpdateStatsLabels(); if ( &user != &m_battle->GetMe() ) return; UserBattleStatus& bs = user.BattleStatus(); m_team_sel->SetSelection( bs.team ); m_ally_sel->SetSelection( bs.ally ); m_side_sel->SetSelection( bs.side ); m_spec_chk->SetValue( bs.spectator ); m_auto_unspec_chk->SetValue( m_battle->GetAutoUnspec() ); m_ready_chk->SetValue( bs.ready ); // Enable or disable widgets' sensitivity as appropriate. if ( bs.spectator ) { m_side_sel->Disable(); m_ally_sel->Disable(); m_team_sel->Disable(); if ( m_battle->GetBattleType() != BT_Replay ) { m_auto_unspec_chk->Enable(); m_ready_chk->Disable(); } else { m_ready_chk->Enable(); m_auto_unspec_chk->Disable(); } } else { m_side_sel->Enable(); m_ally_sel->Enable(); m_team_sel->Enable(); m_ready_chk->Enable(); m_auto_unspec_chk->Disable(); } icons().SetColourIcon( user.BattleStatus().colour ); m_color_sel->SetColor( user.BattleStatus().colour ); } Battle* BattleRoomTab::GetBattle() { return m_battle; } ChatPanel& BattleRoomTab::GetChatPanel() { wxLogDebugFunc( _T( "" ) ); ASSERT_LOGIC( m_chat != 0, _T( "m_chat = 0" ) ); return *m_chat; } void BattleRoomTab::OnStart( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; if ( m_battle->IsFounderMe() ) { m_battle->GetMe().BattleStatus().ready = true; if ( !m_battle->IsEveryoneReady() ) { int answer = customMessageBox( SL_MAIN_ICON, _( "Some Players are not ready yet\nDo you want to force start?" ), _( "Not ready" ), wxYES_NO ); if ( answer == wxNO ) return; } m_battle->SaveMapDefaults(); // save map presets m_battle->StartHostedBattle(); } else { if ( m_battle->GetFounder().Status().in_game ) { if ( !ui().IsSpringRunning() ) m_battle->StartSpring(); else customMessageBoxNoModal( SL_MAIN_ICON, _("Spring is already running."), _("Error") ); } else customMessageBoxNoModal( SL_MAIN_ICON, _("Host is not ingame."), _("Error") ); } } void BattleRoomTab::OnLeave( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->Leave(); } void BattleRoomTab::OnBalance( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; AutoBalanceDialog::BalanceOptions defaultval; defaultval.type = ( IBattle::BalanceType )sett().GetBalanceMethod(); defaultval.respectclans = sett().GetBalanceClans(); defaultval.strongclans = sett().GetBalanceStrongClans(); defaultval.groupingsize = sett().GetBalanceGrouping(); AutoBalanceDialog dlg( this, defaultval, m_battle->GetMaxPlayers() ); if ( dlg.ShowModal() == wxID_OK ) { AutoBalanceDialog::BalanceOptions balance = dlg.GetResult(); sett().SetBalanceMethod( balance.type ); sett().SetBalanceClans( balance.respectclans ); sett().SetBalanceStrongClans( balance.strongclans ); sett().SetBalanceGrouping( balance.groupingsize ); m_battle->Autobalance( balance.type, balance.respectclans, balance.strongclans, balance.groupingsize ); } } void BattleRoomTab::OnFixTeams( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; AutoBalanceDialog::BalanceOptions defaultval; defaultval.type = ( IBattle::BalanceType )sett().GetFixIDMethod(); defaultval.respectclans = sett().GetFixIDClans(); defaultval.strongclans = sett().GetFixIDStrongClans(); defaultval.groupingsize = sett().GetFixIDGrouping(); AutoBalanceDialog dlg( this, defaultval, m_battle->GetMaxPlayers() ); if ( dlg.ShowModal() == wxID_OK ) { AutoBalanceDialog::BalanceOptions balance = dlg.GetResult(); sett().SetFixIDMethod( balance.type ); sett().SetFixIDClans( balance.respectclans ); sett().SetFixIDStrongClans( balance.strongclans ); sett().SetFixIDGrouping( balance.groupingsize ); m_battle->FixTeamIDs( balance.type, balance.respectclans, balance.strongclans, balance.groupingsize ); } } void BattleRoomTab::OnFixColours( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxLogMessage( _T( "" ) ); if ( !m_battle->IsFounderMe() ) // Works with autohosts, and human hosts knows what it mean. { m_battle->Say( _T( "!fixcolors" ) ); return; } //m_battle->Say(_T("fixing colours")); m_battle->FixColours(); } void BattleRoomTab::OnAddBot( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; //customMessageBox(SL_MAIN_ICON,_T("Max players reached"),_T("Cannot add bot, maximum number of players already reached.") ); AddBotDialog dlg( this, *m_battle ); if ( dlg.ShowModal() == wxID_OK ) { UserBattleStatus bs; bs.team = m_battle->GetFreeTeam( false ); bs.ally = m_battle->GetFreeAlly( false ); bs.sync = SYNC_SYNCED; bs.spectator = false; bs.side = 0; bs.ready = true; bs.handicap = 0; bs.colour = m_battle->GetNewColour(); bs.aishortname = dlg.GetAIShortName(); bs.aiversion = dlg.GetAIVersion(); bs.aitype = dlg.GetAIType(); bs.owner = m_battle->GetMe().GetNick(); serverSelector().GetServer().AddBot( m_battle->GetBattleId(), dlg.GetNick(), bs ); } } void BattleRoomTab::OnImReady( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->SetImReady( m_ready_chk->GetValue() ); } void BattleRoomTab::OnLock( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->SetIsLocked( m_lock_chk->GetValue() ); m_battle->SendHostInfo( IBattle::HI_Locked ); } void BattleRoomTab::OnAutoHost( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->GetAutoHost().SetEnabled( m_autohost_mnu->IsChecked() ); } void BattleRoomTab::OnAutoPaste( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxString description = wxGetTextFromUser( _( "Enter a battle description" ), _( "Set description" ), m_battle->GetDescription(), ( wxWindow* ) & ui().mw() ); m_autopaste_mnu->Check( !description.IsEmpty() ); if ( !description.IsEmpty() ) m_battle->SetDescription( description ); sett().SetBattleLastAutoAnnounceDescription( m_autopaste_mnu->IsChecked() ); } void BattleRoomTab::OnAutoControl( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; sett().SetBattleLastAutoControlState( m_autocontrol_mnu->IsChecked() ); } void BattleRoomTab::OnAutoStart( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; sett().SetBattleLastAutoStartState( m_autostart_mnu->IsChecked() ); } void BattleRoomTab::OnAutoSpec( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; int trigger = wxGetNumberFromUser( _( "Enter timeout before autospeccing a player in minutes" ), _( "Set Timeout" ), _T( "" ), sett().GetBattleLastAutoSpectTime() / 60, 1, 60, ( wxWindow* ) & ui().mw(), wxDefaultPosition ); if ( trigger < 0 ) trigger = 0; trigger = trigger * 60; m_autospec_mnu->Check( trigger > 0 ); sett().SetBattleLastAutoSpectTime( trigger ); } void BattleRoomTab::OnAutounSpec( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->SetAutoUnspec( m_auto_unspec_chk->GetValue() ); } void BattleRoomTab::OnImSpec( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->ForceSpectator( m_battle->GetMe(), m_spec_chk->GetValue() ); } void BattleRoomTab::OnTeamSel( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; unsigned long team; m_team_sel->GetValue().ToULong( &team ); m_battle->ForceTeam( m_battle->GetMe(), team - 1 ); } void BattleRoomTab::OnAllySel( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; unsigned long ally; m_ally_sel->GetValue().ToULong( &ally ); m_battle->ForceAlly( m_battle->GetMe(), ally - 1 ); } void BattleRoomTab::OnColourSel( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; User& u = m_battle->GetMe(); wxColour CurrentColour = u.BattleStatus().colour; CurrentColour = GetColourFromUser(this, CurrentColour); if ( !CurrentColour.IsOk() ) return; sett().SetBattleLastColour( CurrentColour ); m_battle->ForceColour( u, CurrentColour ); } void BattleRoomTab::OnSideSel( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->ForceSide( m_battle->GetMe(), m_side_sel->GetSelection() ); sett().SetBattleLastSideSel( m_battle->GetHostModName(), m_side_sel->GetSelection() ); } void BattleRoomTab::OnPresetSel( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxString presetname = m_options_preset_sel->GetValue(); if ( presetname.IsEmpty() ) return; m_battle->LoadOptionsPreset( presetname ); m_battle->SendHostInfo( IBattle::HI_Send_All_opts ); } void BattleRoomTab::OnAutoLock( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->SetAutoLockOnStart( m_autolock_chk->GetValue() ); sett().SetLastAutolockStatus( m_autolock_chk->GetValue() ); } void BattleRoomTab::OnLockBalance( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; bool locked = m_lock_balance_mnu->IsChecked(); m_battle->SetLockExternalBalanceChanges( locked ); } void BattleRoomTab::OnSpectUnsynced( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->ForceUnsyncedToSpectate(); } void BattleRoomTab::OnSpectUnready( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->ForceUnReadyToSpectate(); } void BattleRoomTab::OnSpectUnreadyUnsynced( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->ForceUnsyncedAndUnreadyToSpectate(); } void BattleRoomTab::OnRingUnready( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->RingNotReadyPlayers(); } void BattleRoomTab::OnRingUnsynced( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->RingNotSyncedPlayers(); } void BattleRoomTab::OnRingUnreadyUnsynced( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; m_battle->RingNotSyncedAndNotReadyPlayers(); } void BattleRoomTab::OnShowManagePlayersMenu( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; PopupMenu( m_manage_users_mnu ); } void BattleRoomTab::OnUserJoined( User& user ) { if ( !m_battle ) return; if ( !user.BattleStatus().IsBot() ) m_chat->Joined( user ); m_players->AddUser( user ); UpdateUser(user); if ( &user == &m_battle->GetMe() ) { m_players->SetSelectedIndex ( m_players->GetIndexFromData( &user ) ); } UpdateStatsLabels(); UiEvents::GetStatusEventSender( UiEvents::addStatusMessage ).SendEvent( UiEvents::StatusData( wxFormat(_("%s joined your active battle") ) % user.GetNick(), 1 ) ); } void BattleRoomTab::OnUserLeft( User& user ) { if ( !m_battle ) return; if ( !user.BattleStatus().IsBot() ) m_chat->Parted( user, wxEmptyString ); m_players->RemoveUser( user ); UpdateStatsLabels(); } void BattleRoomTab::OnUnitsyncReloaded( GlobalEvents::GlobalEventData /*data*/ ) { if ( !m_battle ) return; //m_minimap->UpdateMinimap();//should happen automagically now ReloadMaplist(); UpdateBattleInfo(); RegenerateOptionsList(); m_battle->SendMyBattleStatus(); // This should reset sync status. } long BattleRoomTab::AddMMOptionsToList( long pos, OptionsWrapper::GameOption optFlag ) { if ( !m_battle ) return -1; OptionsWrapper::wxStringTripleVec optlist = m_battle->CustomBattleOptions().getOptions( optFlag ); for ( OptionsWrapper::wxStringTripleVec::const_iterator it = optlist.begin(); it != optlist.end(); ++it ) { m_opts_list->InsertItem( pos, it->second.first ); wxString tag = wxFormat( _T( "%d_%s" ) ) % optFlag % it->first; m_opt_list_map[ tag ] = pos; UpdateBattleInfo( tag ); pos++; } return pos; } void BattleRoomTab::UpdateHighlights() { if ( !m_battle ) return; m_players->RefreshVisibleItems(); } void BattleRoomTab::UpdatePresetList() { if ( !m_battle ) return; m_options_preset_sel->Clear(); m_options_preset_sel->Append( sett().GetPresetList() ); m_options_preset_sel->SetStringSelection( m_battle->GetCurrentPreset() ); } void BattleRoomTab::OnSavePreset( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxString presetname; if ( !ui().AskText( _( "Enter preset name" ), _( "Enter a name to save the current set of options\nIf a preset with the same name already exist, it will be overwritten" ), presetname ) ) return; if ( presetname.IsEmpty() ) { customMessageBoxNoModal( SL_MAIN_ICON , _( "Cannot save an options set without a name." ), _( "error" ), wxICON_EXCLAMATION | wxOK ); return; } m_battle->SaveOptionsPreset( presetname ); } void BattleRoomTab::OnDeletePreset( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxArrayString choices = m_battle->GetPresetList(); int result = wxGetSingleChoiceIndex( _( "Pick an existing option set from the list" ), _( "Delete preset" ), choices ); if ( result < 0 ) return; m_battle->DeletePreset( choices[result] ); } void BattleRoomTab::OnSetModDefaultPreset( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxArrayString choices = m_battle->GetPresetList(); int result = wxGetSingleChoiceIndex( _( "Pick an existing option set from the list" ), _( "Set game default preset" ), choices ); if ( result < 0 ) return; sett().SetModDefaultPresetName( m_battle->GetHostModName(), choices[result] ); } void BattleRoomTab::OnMapBrowse( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; wxLogDebugFunc( _T( "" ) ); if ( mapSelectDialog().ShowModal() == wxID_OK && mapSelectDialog().GetSelectedMap() != NULL ) { wxString mapname = mapSelectDialog().GetSelectedMap()->name; wxLogDebugFunc( mapname ); if ( !m_battle->IsFounderMe() ) { m_battle->DoAction( _T( "suggests " ) + mapname ); return; } const int idx = m_map_combo->FindString( mapname, true /*case sensitive*/ ); if ( idx != wxNOT_FOUND ) SetMap( idx ); } } void BattleRoomTab::ReloadMaplist() { if ( !m_battle ) return; m_map_combo->Clear(); wxArrayString maplist = usync().GetMapList(); // maplist.Sort(CompareStringIgnoreCase); size_t nummaps = maplist.Count(); for ( size_t i = 0; i < nummaps; i++ ) m_map_combo->Insert( maplist[i], i ); m_map_combo->SetValue( m_battle->GetHostMapName() ); } void BattleRoomTab::SetMap( int index ) { if ( !m_battle ) return; try { UnitSyncMap map = usync().GetMapEx( index ); m_battle->SetLocalMap( map ); m_battle->SendHostInfo( IBattle::HI_Map ); } catch ( ... ) {} } void BattleRoomTab::OnMapSelect( wxCommandEvent& /*unused*/ ) { if ( !m_battle ) return; if ( !m_battle->IsFounderMe() ) { try { m_battle->DoAction( _T( "suggests " ) + usync().GetMap( m_map_combo->GetCurrentSelection() ).name ); } catch ( ... ) { } return; } SetMap( m_map_combo->GetCurrentSelection() ); } void BattleRoomTab::OnOptionActivate( wxListEvent& event ) { if ( !m_battle ) return; if ( !m_battle->IsFounderMe() ) return; long index = event.GetIndex(); if ( index == 0 ) return; wxString tag; for ( OptionListMap::const_iterator itor = m_opt_list_map.begin(); itor != m_opt_list_map.end(); ++itor ) { if ( itor->second == index ) { tag = itor->first; break; } } OptionsWrapper& optWrap = m_battle->CustomBattleOptions(); OptionsWrapper::GameOption optFlag = ( OptionsWrapper::GameOption )s2l( tag.BeforeFirst( '_' ) ); wxString key = tag.AfterFirst( '_' ); OptionType type = optWrap.GetSingleOptionType( key ); if ( !optWrap.keyExists( key, optFlag, false, type ) ) return; SingleOptionDialog dlg( *m_battle, tag ); dlg.ShowModal(); } void BattleRoomTab::SortPlayerList() { if ( !m_battle ) return; m_players->SortList(); } void BattleRoomTab::SetBattle( Battle* battle ) { m_battle = battle; m_team_sel->Enable(m_battle); m_ally_sel->Enable(m_battle); m_color_sel->Enable(m_battle); m_side_sel->Enable(m_battle); m_options_preset_sel->Enable(m_battle); m_minimap->Enable(m_battle); m_player_panel->Enable(m_battle); m_map_combo->Enable(m_battle); m_players->Enable(m_battle); m_leave_btn->Enable(m_battle); m_start_btn->Enable(m_battle); m_addbot_btn->Enable(m_battle); m_manage_players_btn->Enable(m_battle); m_save_btn->Enable(m_battle); m_delete_btn->Enable(m_battle); m_default_btn->Enable(m_battle); m_browse_map_btn->Enable(m_battle); m_ready_chk->Enable(m_battle); m_spec_chk->Enable(m_battle); m_lock_chk->Enable(m_battle); m_autolock_chk->Enable(m_battle); m_opts_list->Enable(m_battle); m_minimap->SetBattle( m_battle ); m_players->SetBattle( m_battle ); m_chat->SetBattle( m_battle ); m_players->Clear(); m_side_sel->Clear(); if ( m_battle ) { m_options_preset_sel->SetStringSelection( sett().GetModDefaultPresetName( m_battle->GetHostModName() ) ); m_color_sel->SetColor( m_battle->GetMe().BattleStatus().colour ); try { wxArrayString sides = usync().GetSides( m_battle->GetHostModName() ); for ( unsigned int i = 0; i < sides.GetCount(); i++ ) { m_side_sel->Append( sides[i], icons().GetBitmap( icons().GetSideIcon( m_battle->GetHostModName(), i ) ) ); } } catch ( ... ) {} for ( UserList::user_map_t::size_type i = 0; i < m_battle->GetNumUsers(); i++ ) { m_players->AddUser( m_battle->GetUser( i ) ); #ifdef __WXMAC__ UpdateUser( m_battle->GetUser( i ) ); #endif } if ( !m_battle->IsFounderMe() ) { m_options_preset_sel->Disable(); m_save_btn->Disable(); m_delete_btn->Disable(); m_default_btn->Disable(); m_manage_players_btn->Disable(); m_lock_chk->Disable(); m_autolock_chk->Disable(); } m_host_new_btn->Show( false ); RegenerateOptionsList(); ReloadMaplist(); UpdateBattleInfo( wxFormat( _T( "%d_mapname" ) ) % OptionsWrapper::PrivateOptions ); UpdateBattleInfo(); UpdateStatsLabels(); } else { m_host_new_btn->Show( true ); } } void BattleRoomTab::RegenerateOptionsList() { long pos = 0; m_opts_list->DeleteAllItems(); m_opts_list->InsertItem( pos, _( "Size" ) ); m_opt_list_map[ _( "Size" ) ] = pos; pos++; m_opts_list->InsertItem( pos , _( "Windspeed" ) ); m_opt_list_map[ _( "Windspeed" ) ] = pos; pos++; m_opts_list->InsertItem( pos, _( "Tidal strength" ) ); m_opt_list_map[ _( "Tidal strength" ) ] = pos; pos++; m_opts_list->InsertItem( pos, wxEmptyString ); pos++; pos = AddMMOptionsToList( pos, OptionsWrapper::EngineOption ); // AddMMOptionsToList already increments pos by itself m_opts_list->InsertItem( pos, wxEmptyString ); pos++; m_mod_opts_index = pos; pos = AddMMOptionsToList( m_mod_opts_index, OptionsWrapper::ModOption ); // AddMMOptionsToList already increments pos by itself m_opts_list->InsertItem( pos, wxEmptyString ); pos++; m_map_opts_index = pos; pos = AddMMOptionsToList( m_map_opts_index, OptionsWrapper::MapOption ); } void BattleRoomTab::OnBattleActionEvent( UiEvents::UiEventData data ) { wxString nick = data.Count() > 0 ? data[0] : wxString(wxEmptyString); wxString msg = data.Count() > 1 ? data[1] : wxString(wxEmptyString); GetChatPanel().DidAction( nick, msg ); } void BattleRoomTab::OnHostNew( wxCommandEvent& /*event*/ ) { if ( !ui().IsConnected() ) { wxLogWarning( _T( "Trying to host while offline" ) ); customMessageBoxNoModal( SL_MAIN_ICON, _( "You cannot host a game while being offline. Please connect to a lobby server." ), _( "Not Online." ), wxOK ); ui().ShowConnectWindow(); return; } if ( !ui().IsSpringCompatible() ) { wxLogWarning( _T( "Hosting is disabled due to the incompatible version " ) ); customMessageBoxNoModal( SL_MAIN_ICON, _( "Hosting is disabled due to the incompatible version you're using" ), _( "Spring error" ), wxICON_EXCLAMATION | wxOK ); return; } SL::RunHostBattleDialog( this ); } //void BattleRoomTab::MaximizeSizer() //{ // wxSize s = GetClientSize(); // m_main_sizer->RecalcSizes(); // //m_main_sizer->SetDimension( ) // m_main_sizer->Layout(); // Layout(); // Refresh(); //} springlobby-0.169/src/hosting/battleroomtab.h0000600000176000000410000001517012105760300022675 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_BATTLEROOMTAB_H #define SPRINGLOBBY_HEADERGUARD_BATTLEROOMTAB_H #include #include "mmoptionswrapper.h" #include "utils/isink.h" #include "utils/uievents.h" #include class Ui; class Battle; struct BattleBot; class BattleroomListCtrl; class User; class ChatPanel; class wxCommandEvent; class wxBoxSizer; class wxComboBox; class wxStaticText; class wxSplitterWindow; class wxStaticLine; class wxButton; class wxCheckBox; class wxListCtrl; class MapCtrl; class ColorButton; class wxBitmapComboBox; struct UnitSyncMap; class wxToggleButton; class wxChoice; class wxListEvent; typedef std::map OptionListMap; /** \brief container for BattleroomListCtrl, battle specific ChatPanel. Also displaying battle info summary * \todo DOCMEMORE */ class BattleRoomTab : public wxScrolledWindow, public UnitsyncReloadedSink { public: BattleRoomTab( wxWindow* parent, Battle* battle ); ~BattleRoomTab(); BattleroomListCtrl& GetPlayersListCtrl(); void UpdateUser( User& user ); Battle* GetBattle(); ChatPanel& GetChatPanel(); void UpdateBattleInfo(); void UpdateBattleInfo( const wxString& Tag ); void OnStart( wxCommandEvent& event ); void OnHostNew( wxCommandEvent& event ); void OnLeave( wxCommandEvent& event ); void OnBalance( wxCommandEvent& event ); void OnFixTeams( wxCommandEvent& event ); void OnFixColours( wxCommandEvent& event ); void OnAddBot( wxCommandEvent& event ); void OnImReady( wxCommandEvent& event ); void OnLock( wxCommandEvent& event ); void OnAutoHost( wxCommandEvent& event ); void OnImSpec( wxCommandEvent& event ); void OnAutounSpec( wxCommandEvent& event ); void OnTeamSel( wxCommandEvent& event ); void OnAllySel( wxCommandEvent& event ); void OnColourSel( wxCommandEvent& event ); void OnSideSel( wxCommandEvent& event ); void OnPresetSel( wxCommandEvent& event ); void OnAutoLock( wxCommandEvent& event ); void OnLockBalance( wxCommandEvent& event ); void OnShowManagePlayersMenu( wxCommandEvent& event ); void OnLoadPreset( wxCommandEvent& event ); void OnSavePreset( wxCommandEvent& event ); void OnDeletePreset( wxCommandEvent& event ); void OnSetModDefaultPreset( wxCommandEvent& event ); void OnMapBrowse( wxCommandEvent& event ); void OnMapSelect( wxCommandEvent& event ); void OnOptionActivate( wxListEvent& event ); void OnSpectUnsynced( wxCommandEvent& event ); void OnSpectUnready( wxCommandEvent& event ); void OnSpectUnreadyUnsynced( wxCommandEvent& event ); void OnRingUnready( wxCommandEvent& event ); void OnRingUnsynced( wxCommandEvent& event ); void OnRingUnreadyUnsynced( wxCommandEvent& event ); void OnAutoPaste( wxCommandEvent& event ); void OnAutoControl( wxCommandEvent& event ); void OnAutoStart( wxCommandEvent& event ); void OnAutoSpec( wxCommandEvent& event ); void OnBattleActionEvent( UiEvents::UiEventData data ); void OnUserJoined( User& user ); void OnUserLeft( User& user ); void ReloadMaplist(); void SetMap( int index ); void UpdateHighlights(); void UpdatePresetList(); void SortPlayerList(); void OnUnitsyncReloaded( GlobalEvents::GlobalEventData /*data*/ ); void SetBattle( Battle* battle ); void PrintAllySetup(); void RegenerateOptionsList(); void UpdateStatsLabels(); void UpdateMapInfoSummary(); void UpdateMyInfo(); protected: long AddMMOptionsToList( long pos, OptionsWrapper::GameOption optFlag ); void SplitSizerHorizontally( const bool horizontal ); Battle* m_battle; // UnitSyncMap m_map; //not needed long m_mod_opts_index; long m_map_opts_index; OptionListMap m_opt_list_map; wxBoxSizer* m_players_sizer; wxBoxSizer* m_player_sett_sizer; wxBoxSizer* m_info_sizer; wxBoxSizer* m_top_sizer; wxBoxSizer* m_buttons_sizer; wxBoxSizer* m_info1_sizer; wxBoxSizer* m_main_sizer; wxComboBox* m_team_sel; wxComboBox* m_ally_sel; ColorButton* m_color_sel; wxBitmapComboBox* m_side_sel; wxComboBox* m_options_preset_sel; wxStaticText* m_team_lbl; wxStaticText* m_ally_lbl; wxStaticText* m_side_lbl; wxStaticText* m_color_lbl; // wxStaticText* m_wind_lbl; // wxStaticText* m_tidal_lbl; // wxStaticText* m_size_lbl; wxStaticText* m_ally_setup_lbl; wxStaticText* m_ok_count_lbl; MapCtrl * m_minimap; wxScrolledWindow* m_player_panel; wxComboBox* m_map_combo; BattleroomListCtrl* m_players; ChatPanel* m_chat; wxSplitterWindow* m_splitter; wxStaticLine* m_command_line; wxButton* m_leave_btn; wxButton* m_start_btn; wxButton* m_addbot_btn; wxButton* m_manage_players_btn; wxButton* m_save_btn; wxButton* m_delete_btn; wxButton* m_default_btn; wxButton* m_browse_map_btn; wxButton* m_host_new_btn; wxMenu* m_manage_users_mnu; wxMenuItem* m_lock_balance_mnu; wxMenuItem* m_autohost_mnu; wxMenuItem* m_autostart_mnu; wxMenuItem* m_autospec_mnu; wxMenuItem* m_autocontrol_mnu; wxMenuItem* m_autopaste_mnu; wxCheckBox* m_ready_chk; wxCheckBox* m_spec_chk; wxCheckBox* m_auto_unspec_chk; wxCheckBox* m_lock_chk; wxCheckBox* m_autolock_chk; wxListCtrl* m_opts_list; EventReceiverFunc m_BattleActionSink; enum { BROOM_LEAVE = wxID_HIGHEST, BROOM_IMREADY, BROOM_LOCK, BROOM_LOCK_BALANCE, BROOM_MANAGE_MENU, BROOM_SPEC, BROOM_UNSPEC, BROOM_TEAMSEL, BROOM_ALLYSEL, BROOM_COLOURSEL, BROOM_SIDESEL, BROOM_START, BROOM_ADDBOT, BROOM_BALANCE, BROOM_FIXID, BROOM_FIXCOLOURS, BROOM_PRESETSEL, BROOM_AUTOHOST, BROOM_AUTOLOCK, BROOM_SAVEPRES, BROOM_DELETEPRES, BROOM_SETDEFAULTPRES, BROOM_MAP_BROWSE, BROOM_MAP_SEL, BROOM_OPTIONLIST, BROOM_RING_UNREADY, BROOM_RING_UNSYNC, BROOM_RING_UNREADY_UNSYNC, BROOM_SPECT_UNREADY, BROOM_SPECT_UNSYNC, BROOM_SPECT_UNREADY_UNSYNC, BROOM_AUTOSPECT, BROOM_AUTOSTART, BROOM_AUTOCONTROL, BROOM_AUTOPASTE, BROOM_HOST_NEW }; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_BATTLEROOMTAB_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/hosting/hostbattledialog.cpp0000600000176000000410000005077012105760300023727 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: HostBattleDialog // #include "hostbattledialog.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "settings.h" #include "springunitsync.h" #include "user.h" #include "uiutils.h" #include "utils/controls.h" #include "utils/customdialogs.h" #include "ui.h" #include "server.h" #include "images/rank0.xpm" #include "images/rank1.xpm" #include "images/rank2.xpm" #include "images/rank3.xpm" #include "images/rank4.xpm" #include "images/rank5.xpm" #include "images/rank6.xpm" #include "images/rank7.xpm" #include "images/arrow_refresh.png.h" BEGIN_EVENT_TABLE( HostBattleDialog, wxDialog ) EVT_BUTTON ( HOST_CANCEL, HostBattleDialog::OnCancel ) EVT_BUTTON ( HOST_OK, HostBattleDialog::OnOk ) EVT_BUTTON ( BTN_REFRESH, HostBattleDialog::OnReloadMods ) EVT_BUTTON ( PICK_RELAYHOST, HostBattleDialog::OnPickRelayHost ) EVT_MENU ( wxID_ANY, HostBattleDialog::OnRelayChoice ) EVT_RADIOBOX ( CHOSE_NAT, HostBattleDialog::OnNatChange ) EVT_CHECKBOX ( CHK_USE_RELAY, HostBattleDialog::OnUseRelay ) END_EVENT_TABLE() HostBattleDialog::HostBattleDialog( wxWindow* parent ) : wxDialog( parent, -1, _( "Host new battle" ), wxDefaultPosition, wxSize( 410, 441 ), wxRESIZE_BORDER | wxDEFAULT_DIALOG_STYLE ), WindowHintsPickle ( _T("hostbattledialog"), this, wxSize( 410, 441 ) ), m_last_relayhost( sett().GetLastRelayedHost() ) { // this->SetSizeHints( GetSize(), wxDefaultSize ); m_panel = new wxScrolledWindow( this ); // m_panel ->SetSizeHints( GetSize(), wxDefaultSize ); wxBoxSizer* all_sizer = new wxBoxSizer( wxVERTICAL ); wxFlexGridSizer* topsizer = new wxFlexGridSizer( 2, 0, 10); // topsizer->AddGrowableCol( 1, 1 ); // SetSizeHints( wxDefaultSize, wxDefaultSize ); wxBoxSizer* m_main_sizer; m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_desc_lbl = new wxStaticText( m_panel, wxID_ANY, _( "Description" ), wxDefaultPosition, wxDefaultSize, 0 ); m_desc_lbl->Wrap( -1 ); topsizer->Add( m_desc_lbl, 1, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); // wxBoxSizer* desc_sizer = new wxBoxSizer( wxVERTICAL ); m_desc_text = new wxTextCtrl( m_panel, wxID_ANY, sett().GetLastHostDescription(), wxDefaultPosition, wxDefaultSize, 0 ); m_desc_text->SetToolTip( TE( _( "A short description of the game, this will show up in the battle list." ) ) ); topsizer ->Add( m_desc_text, 1, wxALL | wxEXPAND, 5 ); m_desc_check = new wxCheckBox( m_panel, wxID_ANY, _( "Autopaste description" ) ); m_desc_check->SetValue( sett().GetBattleLastAutoAnnounceDescription() ); m_desc_check->SetToolTip( TE( _( "Automatically write the battle description when a user joins." ) ) ); topsizer->AddStretchSpacer(); topsizer->Add( m_desc_check, 0, wxLEFT, 5 ); // topsizer->Add( desc_sizer , 0, wxEXPAND | wxALL, 0 ); m_mod_lbl = new wxStaticText( m_panel, wxID_ANY, _( "Game" ), wxDefaultPosition, wxDefaultSize, 0 ); m_mod_lbl->Wrap( -1 ); topsizer->Add( m_mod_lbl, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); wxArrayString m_mod_picChoices; wxBoxSizer* mod_choice_button_sizer = new wxBoxSizer( wxHORIZONTAL ); m_mod_pic = new wxChoice( m_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_mod_picChoices, 0 ); m_mod_pic->SetToolTip( TE( _( "Select the game to play." ) ) ); mod_choice_button_sizer->Add( m_mod_pic, 0, wxALL , 5 ); wxBitmap mp = charArr2wxBitmap( arrow_refresh_png, sizeof( arrow_refresh_png ) ); m_refresh_btn = new wxBitmapButton( m_panel, BTN_REFRESH, mp ); mod_choice_button_sizer->Add( m_refresh_btn, 0, wxEXPAND|wxTOP|wxBOTTOM, 5 ); topsizer->Add( mod_choice_button_sizer, 0, wxEXPAND|wxALL ,1 ); m_pwd_lbl = new wxStaticText( m_panel, wxID_ANY, _( "Password\n(no spaces)" ), wxDefaultPosition, wxDefaultSize, 0 ); m_pwd_lbl->Wrap( -1 ); topsizer->Add( m_pwd_lbl, 1, wxALL| wxALIGN_CENTER_VERTICAL, 5 ); m_pwd_text = new wxTextCtrl( m_panel, wxID_ANY, sett().GetLastHostPassword(), wxDefaultPosition, wxDefaultSize, wxTE_PASSWORD ); m_pwd_text->SetToolTip( TE( _( "Password needed to join game. Keep empty for no password" ) ) ); topsizer->Add( m_pwd_text, 1, wxALL| wxEXPAND, 5 ); m_port_lbl = new wxStaticText( m_panel, wxID_ANY, _( "Port" ), wxDefaultPosition, wxDefaultSize, 0 ); m_port_lbl->Wrap( -1 ); topsizer->Add( m_port_lbl, 1, wxALL| wxALIGN_CENTER_VERTICAL, 5 ); m_port_text = new wxTextCtrl( m_panel, wxID_ANY, wxFormat( _T( "%d" ) ) % sett().GetLastHostPort(), wxDefaultPosition, wxDefaultSize, 0 ); m_port_text->SetToolTip( TE( _( "UDP port to host game on. Default is 8452." ) ) ); topsizer->Add( m_port_text, 1, wxALL| wxEXPAND, 5 ); // m_port_test_check = new wxCheckBox( m_panel, wxID_ANY, _("Test firewall"), wxDefaultPosition, wxDefaultSize, 0 ); // m_port_test_check->SetValue( sett().GetTestHostPort() ); // m_port_sizer->Add( m_port_test_check, 1, wxALL|wxEXPAND, 5 ); m_relayed_host_check = new wxCheckBox( m_panel, CHK_USE_RELAY, _( "Use relayhost" ), wxDefaultPosition, wxDefaultSize, 0 ); m_relayed_host_check->SetToolTip( TE( _( "host and control game on remote server, helps if you have trouble hosting" ) ) ); m_relayed_host_pick = new wxButton( m_panel, PICK_RELAYHOST, _T(""), wxDefaultPosition, wxDefaultSize, 0 ); m_relayed_host_pick->SetLabel( m_last_relayhost.IsEmpty() ? _T("automatic") : m_last_relayhost ); m_relayhost_list = new wxMenu(); wxMenuItem* automatic_pick = new wxMenuItem( m_relayhost_list, AUTO_PICK_HOST, _("Chose automatically"), _("Randomly picks an available one"), wxITEM_RADIO ); m_relayhost_list->Append( automatic_pick ); automatic_pick->Check( m_last_relayhost.IsEmpty() ); m_relayhost_list->AppendSeparator(); wxMenuItem* manual_pick_relay = new wxMenuItem( m_relayhost_list, MANUAL_PICK_HOST, _("Manually enter the manager name"), _("You'll get prompted for the exact manager name"), wxITEM_RADIO ); m_relayhost_list->Append( manual_pick_relay ); m_relayhost_list->AppendSeparator(); m_relayhost_array_list = serverSelector().GetServer().GetRelayHostList(); for ( unsigned int i = 0; i < m_relayhost_array_list.GetCount(); i++ ) { wxMenuItem* newitem = new wxMenuItem( m_relayhost_list, MANUAL_PICK_HOST + 1 + i, m_relayhost_array_list[i], _T("") , wxITEM_RADIO ); m_relayhost_list->Append( newitem ); newitem->Check( m_last_relayhost == m_relayhost_array_list[i] ); } m_relayed_host_check->SetValue( sett().GetLastHostRelayedMode() ); m_relayed_host_pick->Show( m_relayed_host_check->IsChecked() ); topsizer->Add( m_relayed_host_check, 1, wxALL | wxEXPAND, 5 ); topsizer->Add( m_relayed_host_pick, 0, wxALL | wxEXPAND, 5); m_main_sizer->Add( topsizer, 0, wxEXPAND, 0 ); wxStaticBoxSizer* m_players_box; m_players_box = new wxStaticBoxSizer( new wxStaticBox( m_panel, -1, _( "Number of players" ) ), wxVERTICAL ); m_players_box->SetMinSize( wxSize( -1, 60 ) ); m_players_slide = new wxSlider( m_panel, wxID_ANY, sett().GetLastHostPlayerNum(), 2, SPRING_MAX_USERS, wxDefaultPosition, wxDefaultSize, wxSL_AUTOTICKS | wxSL_BOTH | wxSL_HORIZONTAL | wxSL_LABELS ); m_players_slide->SetToolTip( TE( _( "The maximum number of players to allow in the battle." ) ) ); m_players_box->Add( m_players_slide, 0, wxALL | wxEXPAND, 5 ); m_main_sizer->Add( m_players_box, 0, wxALL | wxEXPAND, 5 ); wxBoxSizer* m_pl_nat_sizer; m_pl_nat_sizer = new wxBoxSizer( wxHORIZONTAL ); wxString m_nat_radiosChoices[] = { _( "None" ), _( "Hole punching" )/*, _("Fixed source ports")*/ }; int m_nat_radiosNChoices = sizeof( m_nat_radiosChoices ) / sizeof( wxString ); m_nat_radios = new wxRadioBox( m_panel, CHOSE_NAT, _( "NAT traversal" ), wxDefaultPosition, wxDefaultSize, m_nat_radiosNChoices, m_nat_radiosChoices, 1, wxRA_SPECIFY_COLS ); m_nat_radios->SetSelection( sett().GetLastHostNATSetting() ); //m_nat_radios->Enable( false ); m_nat_radios->Enable( true ); m_nat_radios->SetToolTip( TE( _( "NAT traversal to use." ) ) ); m_pl_nat_sizer->Add( m_nat_radios, 1, wxALL | wxEXPAND, 5 ); wxStaticBoxSizer* m_rank_box; m_rank_box = new wxStaticBoxSizer( new wxStaticBox( m_panel, -1, _( "Rank requirement" ) ), wxVERTICAL ); wxArrayString rankFilterChoices; rankFilterChoices.Add(_("At least")); rankFilterChoices.Add(_("No greater than")); m_rank_direction = new wxChoice( m_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, rankFilterChoices, 0 ); m_rank_direction->SetToolTip( TE( _( "Select the type of rank enforcement." ) ) ); m_rank_box->Add(m_rank_direction); wxFlexGridSizer* m_rank_sizer; m_rank_sizer = new wxFlexGridSizer( 2, 6, 0, 0 ); m_rank_sizer->SetFlexibleDirection( wxBOTH ); m_rank0_radio = new wxRadioButton( m_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); m_rank_sizer->Add( m_rank0_radio, 0, wxALL, 5 ); m_rank0_img = new wxStaticBitmap( m_panel, wxID_ANY, wxBitmap( rank0_xpm ), wxDefaultPosition, wxSize( 16, 16 ), 0 ); m_rank_sizer->Add( m_rank0_img, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL, 5 ); m_rank1_radio = new wxRadioButton( m_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_rank_sizer->Add( m_rank1_radio, 0, wxALL, 5 ); m_rank1_img = new wxStaticBitmap( m_panel, wxID_ANY, wxBitmap( rank1_xpm ), wxDefaultPosition, wxSize( 16, 16 ), 0 ); m_rank_sizer->Add( m_rank1_img, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_CENTER_HORIZONTAL | wxALL, 2 ); m_rank2_radio = new wxRadioButton( m_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_rank_sizer->Add( m_rank2_radio, 0, wxALL, 5 ); m_rank2_img = new wxStaticBitmap( m_panel, wxID_ANY, wxBitmap( rank2_xpm ), wxDefaultPosition, wxSize( 16, 16 ), 0 ); m_rank_sizer->Add( m_rank2_img, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL, 2 ); m_rank3_radio = new wxRadioButton( m_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_rank_sizer->Add( m_rank3_radio, 0, wxALL, 5 ); m_rank3_img = new wxStaticBitmap( m_panel, wxID_ANY, wxBitmap( rank3_xpm ), wxDefaultPosition, wxSize( 16, 16 ), 0 ); m_rank_sizer->Add( m_rank3_img, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL, 2 ); m_rank4_radio = new wxRadioButton( m_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_rank_sizer->Add( m_rank4_radio, 0, wxALL, 5 ); m_rank4_img = new wxStaticBitmap( m_panel, wxID_ANY, wxBitmap( rank4_xpm ), wxDefaultPosition, wxSize( 16, 16 ), 0 ); m_rank_sizer->Add( m_rank4_img, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxALL, 2 ); m_rank5_radio = new wxRadioButton( m_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_rank_sizer->Add( m_rank5_radio, 0, wxALL, 5 ); m_rank5_img = new wxStaticBitmap( m_panel, wxID_ANY, wxBitmap( rank5_xpm ), wxDefaultPosition, wxSize( 16, 16 ), 0 ); m_rank_sizer->Add( m_rank5_img, 0, wxALL | wxALIGN_CENTER_VERTICAL | wxALIGN_CENTER_HORIZONTAL, 5 ); m_rank6_radio = new wxRadioButton( m_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_rank_sizer->Add( m_rank6_radio, 0, wxALL, 5 ); m_rank6_img = new wxStaticBitmap( m_panel, wxID_ANY, wxBitmap( rank6_xpm ), wxDefaultPosition, wxSize( 16, 16 ), 0 ); m_rank_sizer->Add( m_rank6_img, 0, wxALL, 5 ); m_rank7_radio = new wxRadioButton( m_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_rank_sizer->Add( m_rank7_radio, 0, wxALL, 5 ); m_rank7_img = new wxStaticBitmap( m_panel, wxID_ANY, wxBitmap( rank7_xpm ), wxDefaultPosition, wxSize( 16, 16 ), 0 ); m_rank_sizer->Add( m_rank7_img, 0, wxALL, 5 ); m_rank_box->Add( m_rank_sizer, 1, wxEXPAND, 5 ); m_pl_nat_sizer->Add( m_rank_box, 1, wxALL | wxEXPAND, 5 ); m_main_sizer->Add( m_pl_nat_sizer, 0, wxEXPAND, 5 ); m_main_sizer->Add( 0, 0, 1, wxEXPAND, 0 ); m_buttons_sep = new wxStaticLine( m_panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); m_main_sizer->Add( m_buttons_sep, 0, wxALL | wxEXPAND, 2 ); wxBoxSizer* m_buttons_sizer; m_buttons_sizer = new wxBoxSizer( wxHORIZONTAL ); m_cancel_btn = new wxButton( m_panel, HOST_CANCEL, _( "Cancel" ), wxDefaultPosition, wxDefaultSize, 0 ); m_buttons_sizer->Add( 0, 0, 1, wxEXPAND, 0 ); m_buttons_sizer->Add( m_cancel_btn, 0, wxALL, 5 ); m_host_btn = new wxButton( m_panel, HOST_OK, _( "Host" ), wxDefaultPosition, wxDefaultSize, 0 ); m_host_btn->SetToolTip( TE( _( "Start hosting the battle." ) ) ); m_buttons_sizer->Add( m_host_btn, 0, wxALL, 5 ); m_main_sizer->Add( m_buttons_sizer, 0, wxEXPAND, 5 ); m_panel->SetSizer( m_main_sizer ); all_sizer->Add( m_panel, 1, wxEXPAND, 0 ); this->SetSizer( all_sizer ); m_panel->SetScrollRate( SCROLL_RATE, SCROLL_RATE ); this->Layout(); m_host_btn->SetFocus(); ReloadModList(); } void HostBattleDialog::ReloadModList() { m_mod_pic->Clear(); wxArrayString modlist = usync().GetModList(); size_t nummods = modlist.Count(); for ( size_t i = 0; i < nummods; i++ ) m_mod_pic->Insert( modlist[i], i ); wxString last = sett().GetLastHostMod(); if ( last != wxEmptyString ) m_mod_pic->SetSelection( m_mod_pic->FindString( last ) ); if ( m_mod_pic->GetSelection() == wxNOT_FOUND ) m_mod_pic->SetSelection( 0 ); } void HostBattleDialog::OnOk( wxCommandEvent& /*unused*/ ) { if ( m_mod_pic->GetSelection() == wxNOT_FOUND ) { wxLogWarning( _T( "no mod selected" ) ); customMessageBox( SL_MAIN_ICON, _( "You have to select a game first." ), _( "No game selected." ), wxOK ); return; } if ( m_desc_text->GetValue().IsEmpty() ) m_desc_text->SetValue( _T( "(none)" ) ); sett().SetLastHostDescription( m_desc_text->GetValue() ); sett().SetLastHostMod( m_mod_pic->GetString( m_mod_pic->GetSelection() ) ); wxString password = m_pwd_text->GetValue(); password.Replace(_T(" "), _T("")); sett().SetLastHostPassword( password ); long tmp = DEFSETT_SPRING_PORT; m_port_text->GetValue().ToLong( &tmp ); sett().SetLastHostPort( tmp ); // sett().SetTestHostPort( m_port_test_check->GetValue() ); sett().SetTestHostPort( false ); sett().SetLastHostPlayerNum( m_players_slide->GetValue() ); sett().SetLastHostNATSetting( m_nat_radios->GetSelection() ); sett().SetLastRankLimit( GetSelectedRank() ); sett().SetLastHostRelayedMode( m_relayed_host_check->GetValue() ); sett().SetBattleLastAutoAnnounceDescription( m_desc_check->GetValue() ); sett().SetLastRelayedHost( m_last_relayhost ); sett().SaveSettings(); EndModal( wxID_OK ); } void HostBattleDialog::OnCancel( wxCommandEvent& /*unused*/ ) { EndModal( wxID_CANCEL ); } int HostBattleDialog::GetSelectedRank() { int ret = 0; if ( m_rank0_radio->GetValue() ) ret = 0; if ( m_rank1_radio->GetValue() ) ret = 1; if ( m_rank2_radio->GetValue() ) ret = 2; if ( m_rank3_radio->GetValue() ) ret = 3; if ( m_rank4_radio->GetValue() ) ret = 4; if ( m_rank5_radio->GetValue() ) ret = 5; if ( m_rank6_radio->GetValue() ) ret = 6; if ( m_rank7_radio->GetValue() ) ret = 7; if ( m_rank_direction->GetSelection() > 0 ) ret = -ret -1; return ret; } void HostBattleDialog::OnNatChange( wxCommandEvent& /*unused*/ ) { // m_port_test_check->Enable( m_nat_radios->GetSelection() == 0 ); m_port_text->Enable( m_nat_radios->GetSelection() == 0 ); } void HostBattleDialog::OnReloadMods( wxCommandEvent& ) { usync().ReloadUnitSyncLib(); ReloadModList(); } void HostBattleDialog::OnPickRelayHost( wxCommandEvent& ) { PopupMenu( m_relayhost_list ); } void HostBattleDialog::OnRelayChoice( wxCommandEvent& event ) { int index = event.GetId(); if ( index == AUTO_PICK_HOST ) m_last_relayhost = _T(""); else if ( index == MANUAL_PICK_HOST ) { ui().AskText( _("Manually chose a manager"), _("Please type the nick of the manager you want to use ( case sensitive )"), m_last_relayhost ); } else if ( !(index - MANUAL_PICK_HOST - 1 > int(m_relayhost_array_list.GetCount()) ) ){ index = index - MANUAL_PICK_HOST - 1; m_last_relayhost = m_relayhost_array_list[index]; } m_relayed_host_pick->SetLabel( m_last_relayhost.IsEmpty() ? _T("automatic") : m_last_relayhost ); } void HostBattleDialog::OnUseRelay( wxCommandEvent& ) { m_relayed_host_pick->Show( m_relayed_host_check->IsChecked() ); m_port_text->Enable( !m_relayed_host_check->IsChecked() && m_nat_radios->GetSelection() == 0 ); m_nat_radios->Enable( !m_relayed_host_check->IsChecked() ); Layout(); } namespace SL{ void RunHostBattleDialog( wxWindow* parent ) { HostBattleDialog dlg( parent ); if ( dlg.ShowModal() == wxID_OK ) { BattleOptions bo; bo.description = sett().GetLastHostDescription(); bo.port = sett().GetLastHostPort(); bo.nattype = NatType( sett().GetLastHostNATSetting() ); if ( bo.nattype == NAT_None && sett().GetTestHostPort() ) { switch ( ui().TestHostPort( bo.port ) ) { case Server::porttest_pass : break; // success case Server::porttest_pass_WX26 : wxLogWarning( _T( "hosting port %d: test aborted (wx26)" ), bo.port ); customMessageBoxNoModal( SL_MAIN_ICON, wxFormat( _( "Your using wxWidgets prior to version 2.8,\n " "port testing is not supported.\n Hosting may or may not work." ) ) % bo.port ); sett().SetTestHostPort( false ); // no need to have it checked anymore break; case Server::porttest_unreachable : wxLogWarning( _T( "hosting port %d: test undetermined" ), bo.port ); customMessageBoxNoModal( SL_MAIN_ICON, wxFormat( _( "The server used for testing your port %d " "is unreachable. \nHosting may or may not work with this setting." ) ) % bo.port ); break; //inconclusive test shouldn't hinder hosting imo (koshi) case Server::porttest_timeout : case Server::porttest_socketNotOk : case Server::porttest_socketError : wxLogWarning( _T( "hosting port %d: test unsuccessful, closing battle" ), bo.port ); customMessageBoxNoModal( SL_MAIN_ICON, wxFormat( _( "Battle not started because the port you selected (%d) " "is unable to-f /home/kosh/.springlobby/testing.conf recieve incoming packets\n checks your router & firewall configuration again or change port " "in the dialog.\n\nIf everything else fails, enable the Hole Punching NAT Traversal\n " "option in the hosting settings." ) ) % bo.port ); return; default: wxLogWarning( _T( "unknonw port forward test result" ) ); break; } if ( !ui().TestHostPort( bo.port ) ) { wxLogWarning( _T( "hosting port %d: test unsuccessful, closing battle" ), bo.port ); customMessageBoxNoModal( SL_MAIN_ICON, wxFormat( _( "Battle not started because the port you selected (%d) " "is unable to recieve incoming packets\n checks your router & firewall configuration " "again or change port in the dialog.\n\nIf everything else fails, enable the Hole " "Punching NAT Traversal\n option in the hosting settings." ) ) % bo.port ); return; } } // Get selected mod from unitsync. UnitSyncMod mod; try { mod = usync().GetMod( sett().GetLastHostMod() ); bo.modhash = mod.hash; bo.modname = mod.name; } catch ( ... ) { wxLogWarning( _T( "can't host: game not found" ) ); customMessageBoxNoModal( SL_MAIN_ICON, _( "Battle not started beacuse the game you selected could not be found. " ), _( "Error starting battle." ), wxOK ); return; } UnitSyncMap map; wxString mname = sett().GetLastHostMap(); try { if ( usync().MapExists( mname ) ) map = usync().GetMap( mname ); else if ( usync().GetNumMaps() <= 0 ) { wxLogWarning( _T( "no maps found" ) ); customMessageBoxNoModal( SL_MAIN_ICON, _( "Couldn't find any maps in your spring installation. This could happen when you set the Spring settings incorrectly." ), _( "No maps found" ), wxOK ); return; } else { map = usync().GetMap( 0 ); } } catch ( ... ) { wxLogWarning( _T( "no maps found" ) ); customMessageBoxNoModal( SL_MAIN_ICON, _( "Couldn't find any maps in your spring installation. This could happen when you set the Spring settings incorrectly." ), _( "No maps found" ), wxOK ); return; } bo.maphash = map.hash; bo.mapname = map.name; bo.rankneeded = sett().GetLastRankLimit(); bo.maxplayers = sett().GetLastHostPlayerNum(); bo.userelayhost = sett().GetLastHostRelayedMode(); if ( bo.userelayhost ) bo.nattype = NAT_None; bo.relayhost = sett().GetLastRelayedHost(); serverSelector().GetServer().HostBattle( bo, sett().GetLastHostPassword() ); } } } //end namespace SL springlobby-0.169/src/hosting/hostbattledialog.h0000600000176000000410000000606012105760300023365 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_HOSTBATTLEDIALOG_H #define SPRINGLOBBY_HEADERGUARD_HOSTBATTLEDIALOG_H #include #include "gui/windowattributespickle.h" class wxStaticText; class wxTextCtrl; class wxChoice; class wxSlider; class wxRadioBox; class wxRadioButton; class wxStaticBitmap; class wxStaticLine; class wxButton; class wxBitmapButton; class wxCheckBox; class wxMenu; class wxScrolledWindow; class HostBattleDialog : public wxDialog, public WindowHintsPickle { public: HostBattleDialog( wxWindow* parent ); void ReloadModList(); protected: int GetSelectedRank(); void OnOk ( wxCommandEvent& event ); void OnCancel ( wxCommandEvent& event ); void OnNatChange ( wxCommandEvent& event ); void OnReloadMods ( wxCommandEvent& event ); void OnRelayChoice ( wxCommandEvent& event ); void OnUseRelay ( wxCommandEvent& event ); void OnPickRelayHost( wxCommandEvent& event ); wxScrolledWindow* m_panel; wxStaticText* m_desc_lbl; wxTextCtrl* m_desc_text; wxStaticText* m_mod_lbl; wxChoice* m_mod_pic; wxStaticText* m_pwd_lbl; wxTextCtrl* m_pwd_text; wxChoice* m_rank_direction; wxStaticText* m_port_lbl; wxTextCtrl* m_port_text; wxTextCtrl* m_relayhost_name; // entirely disabled until functionality is in server // wxCheckBox* m_port_test_check; wxCheckBox* m_relayed_host_check; wxCheckBox* m_desc_check; wxSlider* m_players_slide; wxRadioBox* m_nat_radios; wxRadioButton* m_rank0_radio; wxStaticBitmap* m_rank0_img; wxRadioButton* m_rank1_radio; wxStaticBitmap* m_rank1_img; wxRadioButton* m_rank2_radio; wxStaticBitmap* m_rank2_img; wxRadioButton* m_rank3_radio; wxStaticBitmap* m_rank3_img; wxRadioButton* m_rank4_radio; wxStaticBitmap* m_rank4_img; wxRadioButton* m_rank5_radio; wxStaticBitmap* m_rank5_img; wxRadioButton* m_rank6_radio; wxStaticBitmap* m_rank6_img; wxRadioButton* m_rank7_radio; wxStaticBitmap* m_rank7_img; wxStaticLine* m_buttons_sep; wxButton* m_cancel_btn; wxButton* m_host_btn; wxMenu* m_relayhost_list; wxButton* m_relayed_host_pick; wxBitmapButton* m_refresh_btn; enum { HOST_CANCEL = wxID_HIGHEST, HOST_OK, CHOSE_NAT, PICK_RELAYHOST, AUTO_PICK_HOST, MANUAL_PICK_HOST, BTN_REFRESH, CHK_USE_RELAY }; wxString m_last_relayhost; wxArrayString m_relayhost_array_list; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_HOSTBATTLEDIALOG_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/hosting/hostbattledialog_public.h0000600000176000000410000000175512105760300024731 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef SPRINGLOBBY_HEADERGUARD_HOSTBATTLEDIALOG_PUBLIC_H #define SPRINGLOBBY_HEADERGUARD_HOSTBATTLEDIALOG_PUBLIC_H class wxWindow; namespace SL { //! this shows an instance and handles everything wrt data feeding and input handling void RunHostBattleDialog( wxWindow* parent ); } #endif // SPRINGLOBBY_HEADERGUARD_HOSTBATTLEDIALOG_PUBLIC_H springlobby-0.169/src/hosting/mainjoinbattletab.cpp0000600000176000000410000001223612105760300024060 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: MainJoinBattleTab // #include #include #include #include #include #include #include #include "ui.h" #include "mainwindow.h" //used only for global pers load/save, remove when signals are merged #include "settings.h" #include "battle.h" #include "mainjoinbattletab.h" #include "battleroomtab.h" #include "battlemaptab.h" #include "battleoptionstab.h" #include "utils/debug.h" #include "utils/conversion.h" #include "battleroommmoptionstab.h" #include "aui/auimanager.h" #include "aui/artprovider.h" #include "aui/slbook.h" #include "images/battle_list.xpm" #include "images/battle.xpm" #include "images/battle_map.xpm" #include "images/battle_settings.xpm" #include MainJoinBattleTab::MainJoinBattleTab( wxWindow* parent ) : wxScrolledWindow( parent, -1 ), m_battle_tab( 0 ), m_map_tab( 0 ), m_opts_tab( 0 ), m_mm_opts_tab( 0 ) { GetAui().manager->AddPane( this, wxLEFT, _T( "mainjoinbattletab" ) ); m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_tabs = new SLNotebook( this, _T( "mainjoinbattletab" ), BATTLE_TABS ,wxDefaultPosition, wxDefaultSize, wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_MOVE | wxAUI_NB_SCROLL_BUTTONS | wxAUI_NB_TOP | wxAUI_NB_TAB_EXTERNAL_MOVE ); m_tabs->SetArtProvider( new SLArtProvider ); m_imagelist = new wxImageList( 12, 12 ); m_imagelist->Add( wxIcon( battle_list_xpm ) ); m_imagelist->Add( wxIcon( battle_xpm ) ); m_imagelist->Add( wxIcon( battle_map_xpm ) ); m_imagelist->Add( wxIcon( battle_settings_xpm ) ); m_battle_tab = new BattleRoomTab( m_tabs, 0 ); m_tabs->InsertPage( 0, m_battle_tab, _( "Battleroom" ), true, wxIcon( battle_xpm ) ); m_map_tab = new BattleMapTab( m_tabs, 0 ); m_tabs->InsertPage( 1, m_map_tab, _( "Map" ), false, wxIcon( battle_map_xpm ) ); m_mm_opts_tab = new BattleroomMMOptionsTab( 0, m_tabs ); m_tabs->InsertPage( 2, m_mm_opts_tab, _( "Options" ), false, wxIcon( battle_settings_xpm ) ); m_opts_tab = new BattleOptionsTab( m_tabs, 0 ); m_tabs->InsertPage( 3, m_opts_tab, _( "Unit Restrictions" ), false, wxIcon( battle_settings_xpm ) ); m_main_sizer->Add( m_tabs, 1, wxEXPAND ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); SetSizer( m_main_sizer ); Layout(); } MainJoinBattleTab::~MainJoinBattleTab() { } Battle* MainJoinBattleTab::GetCurrentBattle() { return m_battle_tab->GetBattle(); } ChatPanel* MainJoinBattleTab::GetActiveChatPanel() { if ( m_tabs->GetSelection() == 1 ) { return &GetBattleRoomTab().GetChatPanel(); } return 0; } //void MainJoinBattleTab::UpdateCurrentBattle() void MainJoinBattleTab::UpdateCurrentBattle() { GetBattleRoomTab().UpdateBattleInfo(); GetBattleMapTab().Update(); } void MainJoinBattleTab::UpdateCurrentBattle( const wxString& Tag ) { GetBattleRoomTab().UpdateBattleInfo( Tag ); GetBattleMapTab().Update( Tag ); GetOptionsTab().UpdateBattle( Tag ); GetMMOptionsTab().UpdateOptControls( Tag ); } void MainJoinBattleTab::JoinBattle( Battle& battle ) { PreSwitchBattlePerspective(); m_mm_opts_tab->SetBattle( &battle ); m_opts_tab->SetBattle( &battle ); m_map_tab->SetBattle( &battle ); m_battle_tab->SetBattle( &battle ); PostSwitchBattlePerspective(); } void MainJoinBattleTab::HostBattle( Battle& battle ) { JoinBattle( battle ); } void MainJoinBattleTab::LeaveCurrentBattle( bool /*called_from_join*/ ) { PreSwitchBattlePerspective(); m_mm_opts_tab->SetBattle( 0 ); m_opts_tab->SetBattle( 0 ); m_map_tab->SetBattle( 0 ); m_battle_tab->SetBattle( 0 ); PostSwitchBattlePerspective(); } void MainJoinBattleTab::BattleUserUpdated( User& user ) { try { GetBattleRoomTab().UpdateUser( user ); } catch ( ... ) {} try { GetBattleMapTab().UpdateUser( user ); } catch ( ... ) {} } void MainJoinBattleTab::ReloadPresetList() { try { GetBattleRoomTab().UpdatePresetList(); } catch ( ... ) {} try { GetMMOptionsTab().UpdatePresetList(); } catch ( ... ) {} } BattleRoomTab& MainJoinBattleTab::GetBattleRoomTab() { ASSERT_EXCEPTION( m_battle_tab, _T( "m_battle_tab == 0" ) ); return *m_battle_tab; } BattleMapTab& MainJoinBattleTab::GetBattleMapTab() { ASSERT_EXCEPTION( m_map_tab, _T( "m_map_tab == 0" ) ); return *m_map_tab; } BattleOptionsTab& MainJoinBattleTab::GetOptionsTab() { ASSERT_EXCEPTION( m_opts_tab, _T( "m_opts_tab == 0" ) ); return *m_opts_tab; } BattleroomMMOptionsTab& MainJoinBattleTab::GetMMOptionsTab() { ASSERT_EXCEPTION( m_mm_opts_tab, _T( "m_mm_opts_tab == 0" ) ); return *m_mm_opts_tab; } void MainJoinBattleTab::LoadPerspective( const wxString& perspective_name ) { LoadNotebookPerspective( m_tabs, perspective_name ); } void MainJoinBattleTab::SavePerspective( const wxString& perspective_name ) { SaveNotebookPerspective( m_tabs, perspective_name ); } void MainJoinBattleTab::PostSwitchBattlePerspective( ) { ui().mw().LoadPerspectives( ); } void MainJoinBattleTab::PreSwitchBattlePerspective( ) { ui().mw().SavePerspectives( ); } bool MainJoinBattleTab::UseBattlePerspective() { return GetBattleRoomTab().GetBattle() != 0; } void MainJoinBattleTab::FocusBattleRoomTab() { m_tabs->SetSelection( 0 ); } springlobby-0.169/src/hosting/mainjoinbattletab.h0000600000176000000410000000453312105760300023526 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_MAINJOINBATTLETAB_H #define SPRINGLOBBY_HEADERGUARD_MAINJOINBATTLETAB_H #include #include "battleroommmoptionstab.h" class Ui; class BattleListTab; class Battle; class User; class BattleRoomTab; class BattleMapTab; class BattleOptionsTab; class wxBoxSizer; class wxImageList; class SLNotebook; class wxNotebook; class MainJoinBattleTab : public wxScrolledWindow { public: MainJoinBattleTab( wxWindow* parent ); ~MainJoinBattleTab(); void HostBattle( Battle& battle ); void JoinBattle( Battle& battle ); //void UpdateCurrentBattle(); void UpdateCurrentBattle(); void UpdateCurrentBattle( const wxString& Tag ); void LeaveCurrentBattle( bool called_from_join = false ); Battle* GetCurrentBattle(); ChatPanel* GetActiveChatPanel(); void BattleUserUpdated( User& user ); BattleRoomTab& GetBattleRoomTab(); BattleMapTab& GetBattleMapTab(); BattleOptionsTab& GetOptionsTab(); BattleroomMMOptionsTab& GetMMOptionsTab(); void ReloadPresetList(); void LoadPerspective( const wxString& perspective_name = wxEmptyString ); void SavePerspective( const wxString& perspective_name = wxEmptyString ); bool UseBattlePerspective(); void FocusBattleRoomTab(); protected: wxBoxSizer* m_main_sizer; wxImageList* m_imagelist; SLNotebook* m_tabs; BattleRoomTab* m_battle_tab; BattleMapTab* m_map_tab; BattleOptionsTab* m_opts_tab; BattleroomMMOptionsTab* m_mm_opts_tab; void PreSwitchBattlePerspective ( ); void PostSwitchBattlePerspective( ); enum { BATTLE_TABS = wxID_HIGHEST }; }; #endif // SPRINGLOBBY_HEADERGUARD_MAINJOINBATTLETAB_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/hosting/mainsingleplayertab.cpp0000600000176000000410000000761112105760300024424 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include #include #include #include #include #include #include #include "aui/auimanager.h" #include "aui/artprovider.h" #include "aui/slbook.h" #include "singleplayertab.h" #include "battleoptionstab.h" #include "mainsingleplayertab.h" #include "battleroommmoptionstab.h" #include "utils/debug.h" #include "utils/conversion.h" #include "images/battle.xpm" #include "images/battle_settings.xpm" MainSinglePlayerTab::MainSinglePlayerTab( wxWindow* parent ) : wxScrolledWindow( parent, -1 ) { m_main_sizer = new wxBoxSizer( wxVERTICAL ); GetAui().manager->AddPane( this, wxLEFT, _T( "mainsingleplayertab" ) ); m_tabs = new SLNotebook( this, _T( "mainsingleplayertab" ), -1, wxDefaultPosition, wxDefaultSize, wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_MOVE | wxAUI_NB_SCROLL_BUTTONS | wxAUI_NB_TOP | wxAUI_NB_TAB_EXTERNAL_MOVE ); m_tabs->SetArtProvider( new SLArtProvider ); m_imagelist = new wxImageList( 12, 12 ); m_imagelist->Add( wxIcon( battle_xpm ) ); m_imagelist->Add( wxIcon( battle_settings_xpm ) ); m_sp_tab = new SinglePlayerTab( m_tabs, *this ); m_tabs->AddPage( m_sp_tab, _( "Game" ), true, wxNullBitmap ); m_mm_opts_tab = new BattleroomMMOptionsTab( &m_sp_tab->GetBattle(), m_tabs ); m_tabs->InsertPage( 1, m_mm_opts_tab, _( "Options" ), false, wxIcon( battle_settings_xpm ) ); m_opts_tab = new BattleOptionsTab( m_tabs, &m_sp_tab->GetBattle() ); m_tabs->InsertPage( 2, m_opts_tab, _( "Unit Restrictions" ), false, wxIcon( battle_settings_xpm ) ); m_main_sizer->Add( m_tabs, 1, wxEXPAND ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); SetSizer( m_main_sizer ); Layout(); } MainSinglePlayerTab::~MainSinglePlayerTab() { // if ( sett().GetAutosavePerspective() ) // SavePerspective(); } void MainSinglePlayerTab::LoadPerspective( const wxString& perspective_name ) { LoadNotebookPerspective( m_tabs, perspective_name ); } void MainSinglePlayerTab::SavePerspective( const wxString& perspective_name ) { SaveNotebookPerspective( m_tabs, perspective_name ); } void MainSinglePlayerTab::UpdateMinimap() { try { GetSinglePlayerTab().UpdateMinimap(); } catch ( ... ) {} } void MainSinglePlayerTab::OnUnitSyncReloaded() { wxLogDebugFunc( _T( "" ) ); try { GetSinglePlayerTab().ResetUsername(); wxLogMessage( _T( "Reloading map list" ) ); GetSinglePlayerTab().ReloadMaplist(); wxLogMessage( _T( "Reloading game list" ) ); GetSinglePlayerTab().ReloadModlist(); wxLogMessage( _T( "Reloading minimap" ) ); GetSinglePlayerTab().UpdateMinimap(); } catch ( ... ) {} } void MainSinglePlayerTab::ReloadRestrictions() { try { GetOptionsTab().ReloadRestrictions(); } catch ( ... ) {} } void MainSinglePlayerTab::ReloadMapOptContrls() { try { GetMMOptionsTab().OnReloadControls( OptionsWrapper::MapOption ); } catch ( ... ) {} } void MainSinglePlayerTab::ReloadModOptContrls() { try { GetMMOptionsTab().OnReloadControls( OptionsWrapper::ModOption ); } catch ( ... ) {} } SinglePlayerTab& MainSinglePlayerTab::GetSinglePlayerTab() { ASSERT_EXCEPTION( m_sp_tab, _T( "m_sp_tab == 0" ) ); return *m_sp_tab; } BattleOptionsTab& MainSinglePlayerTab::GetOptionsTab() { ASSERT_EXCEPTION( m_opts_tab, _T( "m_opts_tab == 0" ) ); return *m_opts_tab; } BattleroomMMOptionsTab& MainSinglePlayerTab::GetMMOptionsTab() { ASSERT_EXCEPTION( m_mm_opts_tab, _T( "m_mm_opts_tab == 0" ) ); return *m_mm_opts_tab; } void MainSinglePlayerTab::ReloadPresetList() { try { GetSinglePlayerTab().UpdatePresetList(); } catch ( ... ) {} try { GetMMOptionsTab().UpdatePresetList(); } catch ( ... ) {} } void MainSinglePlayerTab::UpdateTag( const wxString& Tag ) { try { GetSinglePlayerTab().UpdateTag( Tag ); } catch ( ... ) {} try { GetOptionsTab().UpdateBattle( Tag ); } catch ( ... ) {} } springlobby-0.169/src/hosting/mainsingleplayertab.h0000600000176000000410000000355512105760300024074 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_MAINSINGLEPLAYERTAB_H #define SPRINGLOBBY_HEADERGUARD_MAINSINGLEPLAYERTAB_H #include #include "battleroommmoptionstab.h" class Ui; class SLNotebook; class wxImageList; class wxBoxSizer; class SinglePlayerTab; class BattleOptionsTab; class MainSinglePlayerTab : public wxScrolledWindow { public: MainSinglePlayerTab( wxWindow* parent ); ~MainSinglePlayerTab(); void UpdateMinimap(); void OnUnitSyncReloaded(); void UpdateTag( const wxString& Tag ); void ReloadRestrictions(); void ReloadMapOptContrls(); void ReloadModOptContrls(); void ReloadPresetList(); SinglePlayerTab& GetSinglePlayerTab(); BattleOptionsTab& GetOptionsTab(); BattleroomMMOptionsTab& GetMMOptionsTab(); void LoadPerspective( const wxString& perspective_name = wxEmptyString ); void SavePerspective( const wxString& perspective_name = wxEmptyString ); protected: wxBoxSizer* m_main_sizer; wxImageList* m_imagelist; SLNotebook* m_tabs; SinglePlayerTab* m_sp_tab; BattleOptionsTab* m_opts_tab; BattleroomMMOptionsTab* m_mm_opts_tab; }; #endif // SPRINGLOBBY_HEADERGUARD_MAINSINGLEPLAYERTAB_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/hosting/mmoptionwindows.cpp0000600000176000000410000001303112105760300023640 0ustar buildbotwww-data00000000000000#include "mmoptionwindows.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "ui.h" #include "mmoptionswrapper.h" #include "battle.h" #include "utils/controls.h" #include #include "utils/conversion.h" #include "gui/spinctl/spinctrl.h" SingleOptionDialog::SingleOptionDialog( IBattle& battle, const wxString& optiontag ) : m_battle( battle ), m_tag( optiontag ), m_checkbox( 0 ), m_combobox( 0 ), m_spinctrl( 0 ), m_textctrl( 0 ) { OptionsWrapper& optWrap = m_battle.CustomBattleOptions(); OptionsWrapper::GameOption optFlag = ( OptionsWrapper::GameOption )s2l( optiontag.BeforeFirst( '_' ) ); wxString key = optiontag.AfterFirst( '_' ); OptionType type = optWrap.GetSingleOptionType( key ); Create( (wxWindow*)&ui().mw(), wxID_ANY, _( "Change option" ), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, _T( "OptionDialog" ) ); if ( !optWrap.keyExists( key, optFlag, false, type ) ) { EndModal( wxID_CANCEL ); return; } wxBoxSizer* m_main_sizer = new wxBoxSizer( wxVERTICAL ); // wxStaticText* m_labelctrl = wxStaticText(); switch ( type ) { case opt_bool: { mmOptionBool opt = optWrap.m_opts[optFlag].bool_map[key]; m_checkbox = new wxCheckBox( this, wxID_ANY, opt.name ); m_checkbox->SetToolTip( TE( opt.description ) ); m_checkbox->SetValue( opt.value ); m_main_sizer->Add( m_checkbox, 0, wxEXPAND ); break; } case opt_float: { mmOptionFloat opt = optWrap.m_opts[optFlag].float_map[key]; m_spinctrl = new SlSpinCtrlDouble(); m_spinctrl->Create( this, wxID_ANY, _T( "" ), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, double( opt.min ), double( opt.max ), double( opt.value ), double( opt.stepping ), opt.key ); m_spinctrl->SetToolTip( TE( opt.description ) ); m_main_sizer->Add( m_spinctrl, 0, wxEXPAND ); break; } case opt_string: { mmOptionString opt = optWrap.m_opts[optFlag].string_map[key]; m_textctrl = new wxTextCtrl( this, wxID_ANY, opt.value, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, opt.key ); m_textctrl->SetToolTip( TE( opt.description ) ); m_main_sizer->Add( m_textctrl, 0, wxEXPAND ); break; } case opt_list: { mmOptionList opt = optWrap.m_opts[optFlag].list_map[key]; int temp = int( opt.cbx_choices.GetCount() - 1 ); int index = LSL::Util::Clamp( opt.cur_choice_index, 0, temp ); m_combobox = new wxComboBox( this, wxID_ANY, opt.cbx_choices[index], wxDefaultPosition, wxDefaultSize, opt.cbx_choices, wxCB_READONLY, wxDefaultValidator ); wxString tooltip = opt.description + _T( "\n" ); for ( ListItemVec::const_iterator itor = opt.listitems.begin(); itor != opt.listitems.end(); ++itor ) { tooltip += _T( "\n" ) + itor->name + _T( ": " ) + itor->desc; } m_combobox->SetToolTip( TE( tooltip ) ); m_main_sizer->Add( m_combobox, 0, wxEXPAND ); break; } default: { EndModal( wxID_CANCEL ); return; break; } } wxSize __SpacerSize_1 = wxDLG_UNIT( this, wxSize( 0, 0 ) ); m_main_sizer->Add( __SpacerSize_1.GetWidth(), __SpacerSize_1.GetHeight(), 0, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5 ); wxStaticLine* m_separator1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxSize( 10, -1 ), wxLI_HORIZONTAL, _T( "ID_STATICLINE1" ) ); m_main_sizer->Add( m_separator1, 0, wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 5 ); wxBoxSizer* m_buttons_sizer = new wxBoxSizer( wxHORIZONTAL ); m_cancel_button = new wxButton( this, ID_CANCEL, _( "Cancel" ), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T( "ID_CANCEL" ) ); m_buttons_sizer->Add( m_cancel_button, 0, wxALL | wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 5 ); m_buttons_sizer->Add( 0, 0, 1, wxALL | wxEXPAND | wxSHAPED | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 0 ); m_ok_button = new wxButton( this, ID_OK, _( "Ok" ), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T( "ID_OK" ) ); m_buttons_sizer->Add( m_ok_button, 0, wxALL | wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL, 5 ); m_main_sizer->Add( m_buttons_sizer, 0, wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 0 ); m_main_sizer->Fit( this ); m_main_sizer->SetSizeHints( this ); SetSizer( m_main_sizer ); Layout(); Connect( ID_CANCEL, wxEVT_COMMAND_BUTTON_CLICKED, ( wxObjectEventFunction )&SingleOptionDialog::OnCancel ); Connect( ID_OK, wxEVT_COMMAND_BUTTON_CLICKED, ( wxObjectEventFunction )&SingleOptionDialog::OnOk ); } void SingleOptionDialog::OnCancel( wxCommandEvent& /*unused*/ ) { EndModal( wxID_CANCEL ); } void SingleOptionDialog::OnOk( wxCommandEvent& /*unused*/ ) { OptionsWrapper::GameOption optFlag = ( OptionsWrapper::GameOption )s2l( m_tag.BeforeFirst( '_' ) ); wxString key = m_tag.AfterFirst( '_' ); wxString value; if ( m_textctrl ) value = m_textctrl->GetValue(); else if ( m_combobox ) value = m_battle.CustomBattleOptions().GetNameListOptItemKey( key, m_combobox->GetValue(), optFlag ); else if ( m_spinctrl ) { double d = m_spinctrl->GetValue() ; value = wxFormat( _T("%f") ) % d; wxLogMessage( _T("Got VALUE: %s -- %f"), value.c_str(), d ); } else if ( m_checkbox ) value = TowxString( m_checkbox->GetValue() ); m_battle.CustomBattleOptions().setSingleOption( key, value, optFlag ); m_battle.SendHostInfo( m_tag ); EndModal( wxID_OK ); } springlobby-0.169/src/hosting/mmoptionwindows.h0000600000176000000410000000312012105760300023303 0ustar buildbotwww-data00000000000000#ifndef MMOPTIONWINDOWS_H_INCLUDED #define MMOPTIONWINDOWS_H_INCLUDED #include class wxCheckBox; class wxComboBox; class wxCommandEvent; class IBattle; template class SlSpinCtrlDouble; class SlSpinDoubleEvent; class wxTextCtrl; class wxStaticText; class wxButton; class SingleOptionDialog: public wxDialog { public: SingleOptionDialog( IBattle& battle, const wxString& optiontag ); void OnOk(wxCommandEvent& event); void OnCancel(wxCommandEvent& event); //! dummy event receiver, mandated by the control implementation void OnSpinCtrlDoubleChange(SlSpinDoubleEvent& /*event*/){} protected: IBattle& m_battle; wxString m_tag; wxCheckBox* m_checkbox; wxComboBox* m_combobox; SlSpinCtrlDouble* m_spinctrl; wxTextCtrl* m_textctrl; wxButton* m_cancel_button; wxButton* m_ok_button; }; enum { ID_CANCEL = wxID_HIGHEST, ID_OK }; #endif // MMOPTIONWINDOWS_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/ibattle.cpp0000600000176000000410000010660712105760300020350 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include #include #include #include #include "ibattle.h" #include "utils/debug.h" #include "utils/conversion.h" #include #include "uiutils.h" #include "settings.h" #include "ui.h" //only required for preset stuff #include "spring.h" #include "springunitsynclib.h" #include "springlobbyapp.h" #include #include #include #include const unsigned int TIMER_ID = 102; IBattle::IBattle(): m_map_loaded(false), m_mod_loaded(false), m_map_exists(false), m_mod_exists(false), m_previous_local_mod_name( wxEmptyString ), m_ingame(false), m_auto_unspec(false), m_generating_script(false), m_players_ready(0), m_players_sync(0), m_players_ok(0), m_is_self_in(false), m_timer ( 0 ), m_start_time(0) { } IBattle::~IBattle() { if ( m_is_self_in ) usync().UnSetCurrentMod(); if ( m_timer ) m_timer->Stop(); delete m_timer; } bool IBattle::IsSynced() { LoadMod(); LoadMap(); bool synced = true; if ( !m_host_map.hash.IsEmpty() && m_host_map.hash != '0' && m_host_map.hash != m_local_map.hash ) synced = false; else if ( !m_host_map.name.IsEmpty() && m_local_map.name != m_host_map.name) synced = false; else if ( !m_host_mod.hash.IsEmpty() && m_host_mod.hash != '0' && m_host_mod.hash != m_local_mod.hash ) synced = false; else if ( !m_host_mod.name.IsEmpty() && m_local_mod.name != m_host_mod.name) synced = false; return synced; } std::vector &IBattle::GetFixColoursPalette( int numteams ) const { return GetBigFixColoursPalette( numteams ); } wxColour IBattle::GetFixColour(int i) const { int size = m_teams_sizes.size(); std::vector palette = GetFixColoursPalette( size ); return palette[i]; } int IBattle::GetPlayerNum( const User& user ) const { for (user_map_t::size_type i = 0; i < GetNumUsers(); i++) { if ( &GetUser(i) == &user ) return i; } ASSERT_EXCEPTION(false, _T("The player is not in this game.") ); return -1; } #include class DismissColor { protected: typedef std::vector ColorVec; const ColorVec& m_other; public: DismissColor( const ColorVec& other ) : m_other( other ) {} bool operator() ( wxColor to_check ) { return std::find ( m_other.begin(), m_other.end(), to_check ) != m_other.end(); } }; class AreColoursSimilarProxy { int m_mindiff; public: AreColoursSimilarProxy( int mindiff ) : m_mindiff ( mindiff ) {} bool operator() ( wxColor a, wxColor b ) { return AreColoursSimilar( a, b, m_mindiff ); } }; wxColour IBattle::GetFreeColour( User * ) const { typedef std::vector ColorVec; ColorVec current_used_colors; for ( user_map_t::size_type i = 0; i < GetNumUsers(); ++i ) { UserBattleStatus& bs = GetUser( i ).BattleStatus(); current_used_colors.push_back( bs.colour ); } int inc = 1; while ( true ) { ColorVec fixcolourspalette = GetFixColoursPalette( m_teams_sizes.size() + inc++ ); ColorVec::iterator fixcolourspalette_new_end = std::unique( fixcolourspalette.begin(), fixcolourspalette.end(), AreColoursSimilarProxy( 20 ) ); fixcolourspalette_new_end = std::remove_if( fixcolourspalette.begin(), fixcolourspalette.end(), DismissColor( current_used_colors ) ); if ( fixcolourspalette_new_end != fixcolourspalette.begin() ) return (*fixcolourspalette.begin()); } } wxColour IBattle::GetFreeColour( User &for_whom ) const { return GetFreeColour( &for_whom ); } wxColour IBattle::GetNewColour() const { return GetFreeColour(); } int IBattle::ColourDifference(const wxColour &a, const wxColour &b) const// returns max difference of r,g,b. { return std::max(abs(a.Red()-b.Red()),std::max(abs(a.Green()-b.Green()),abs(a.Blue()-b.Blue()))); } int IBattle::GetFreeTeam( bool excludeme ) const { int lowest = 0; bool changed = true; while ( changed ) { changed = false; for ( user_map_t::size_type i = 0; i < GetNumUsers(); i++ ) { User& user = GetUser( i ); if ( ( &user == &GetMe() ) && excludeme ) continue; if ( user.BattleStatus().spectator ) continue; if ( user.BattleStatus().team == lowest ) { lowest++; changed = true; } } } return lowest; } int IBattle::GetClosestFixColour(const wxColour &col, const std::vector &excludes, int difference) const { std::vector palette = GetFixColoursPalette( m_teams_sizes.size() + 1 ); int result=0; int t1=palette.size(); int t2=excludes.size(); wxLogMessage(_T("GetClosestFixColour %d %d"),t1,t2); for (size_t i=0;i=excludes.size()) || (!excludes[i])) { if (AreColoursSimilar( palette[i],col, difference )) { return i; } } } return result; } void IBattle::SendHostInfo( HostInfo /*unused*/ ) { } void IBattle::SendHostInfo( const wxString& /*unused*/ ) { } void IBattle::Update ( const wxString& /*unused*/) { } User& IBattle::OnUserAdded( User& user ) { UserList::AddUser( user ); UserBattleStatus& bs = user.BattleStatus(); bs.spectator = false; bs.ready = false; bs.sync = SYNC_UNKNOWN; if ( !bs.IsBot() && IsFounderMe() && GetBattleType() == BT_Played ) { bs.team = GetFreeTeam( &user == &GetMe() ); bs.ally = GetFreeAlly( &user == &GetMe() ); bs.colour = GetFreeColour( user ); } if ( IsFounderMe() && ( ( bs.pos.x < 0 ) || ( bs.pos.y < 0 ) ) ) { UserPosition& pos = bs.pos; pos = GetFreePosition(); UserPositionChanged( user ); } if ( !bs.spectator ) { PlayerJoinedAlly( bs.ally ); PlayerJoinedTeam( bs.team ); } if ( bs.spectator && IsFounderMe() ) m_opts.spectators++; if ( !bs.spectator && !bs.IsBot() ) { if ( bs.ready ) m_players_ready++; if ( bs.sync) m_players_sync++; if ( !bs.ready || !bs.sync ) m_ready_up_map[user.GetNick()] = time(0); if ( bs.ready && bs.sync ) m_players_ok++; } return user; } User& IBattle::OnBotAdded( const wxString& nick, const UserBattleStatus& bs ) { m_internal_bot_list[nick] = User( nick ); User& user = m_internal_bot_list[nick]; user.UpdateBattleStatus( bs ); User& usr = OnUserAdded( user ); return usr; } unsigned int IBattle::GetNumBots() const { return m_internal_bot_list.size(); } unsigned int IBattle::GetNumPlayers() const { return GetNumUsers() - GetNumBots(); } unsigned int IBattle::GetNumActivePlayers() const { return GetNumPlayers() - m_opts.spectators; } void IBattle::OnUserBattleStatusUpdated( User &user, UserBattleStatus status ) { UserBattleStatus previousstatus = user.BattleStatus(); user.UpdateBattleStatus( status ); unsigned int oldspeccount = m_opts.spectators; m_opts.spectators = 0; m_players_sync = 0; m_players_ready = 0; m_players_ok = 0; m_teams_sizes.clear(); m_ally_sizes.clear(); for ( unsigned int i = 0; i < GetNumUsers(); i++ ) { User& loopuser = GetUser( i ); UserBattleStatus& loopstatus = loopuser.BattleStatus(); if ( loopstatus.spectator ) m_opts.spectators++; if ( !loopstatus.IsBot() ) { if ( !loopstatus.spectator ) { if ( loopstatus.ready && loopstatus.spectator ) m_players_ready++; if ( loopstatus.sync ) m_players_sync++; if ( loopstatus.ready && loopstatus.sync ) m_players_ok++; PlayerJoinedTeam( loopstatus.team ); PlayerJoinedAlly( loopstatus.ally ); } } } if ( oldspeccount != m_opts.spectators ) { if ( IsFounderMe() ) SendHostInfo( HI_Spectators ); } if ( !status.IsBot() ) { if ( ( status.ready && status.sync ) || status.spectator ) { std::map::iterator itor = m_ready_up_map.find( user.GetNick() ); if ( itor != m_ready_up_map.end() ) { m_ready_up_map.erase( itor ); } } if ( ( !status.ready || !status.sync ) && !status.spectator ) { std::map::iterator itor = m_ready_up_map.find( user.GetNick() ); if ( itor == m_ready_up_map.end() ) { m_ready_up_map[user.GetNick()] = time(0); } } } } bool IBattle::ShouldAutoStart() const { if ( GetInGame() ) return false; if ( !IsLocked() && ( GetNumActivePlayers() < m_opts.maxplayers ) ) return false; // proceed checking for ready & symc players only if the battle is full or locked if ( !IsEveryoneReady() ) return false; return true; } void IBattle::OnUserRemoved( User& user ) { UserBattleStatus& bs = user.BattleStatus(); if ( !bs.spectator ) { PlayerLeftTeam( bs.team ); PlayerLeftAlly( bs.ally ); } if ( !bs.spectator && !bs.IsBot() ) { if ( bs.ready ) m_players_ready--; if ( bs.sync ) m_players_sync--; if ( bs.ready && bs.sync ) m_players_ok--; } if ( IsFounderMe() && bs.spectator ) { m_opts.spectators--; SendHostInfo( HI_Spectators ); } if ( &user == &GetMe() ) { OnSelfLeftBattle(); } UserList::RemoveUser( user.GetNick() ); if ( !bs.IsBot() ) user.SetBattle( 0 ); else { UserVecIter itor = m_internal_bot_list.find( user.GetNick() ); if ( itor != m_internal_bot_list.end() ) { m_internal_bot_list.erase( itor ); } } } bool IBattle::IsEveryoneReady() const { for ( unsigned int i = 0; i < GetNumPlayers(); i++ ) { User& usr = GetUser( i ); UserBattleStatus& status = usr.BattleStatus(); if ( status.IsBot() ) continue; if ( status.spectator ) continue; if ( &usr == &GetMe() ) continue; if ( !status.ready ) return false; if ( !status.sync ) return false; } return true; } void IBattle::AddStartRect( unsigned int allyno, unsigned int left, unsigned int top, unsigned int right, unsigned int bottom ) { BattleStartRect sr; sr.ally = allyno; sr.left = left; sr.top = top; sr.right = right; sr.bottom = bottom; sr.toadd = true; sr.todelete = false; sr.toresize = false; sr.exist = true; m_rects[allyno] = sr; } void IBattle::RemoveStartRect( unsigned int allyno ) { std::map::iterator rect_it = m_rects.find(allyno); if( rect_it == m_rects.end() ) return; rect_it->second.todelete = true; //BattleStartRect sr = m_rects[allyno]; //sr.todelete = true; //m_rects[allyno] = sr; } void IBattle::ResizeStartRect( unsigned int allyno ) { std::map::iterator rect_it = m_rects.find(allyno); if( rect_it == m_rects.end() ) return; rect_it->second.toresize = true; //BattleStartRect sr = m_rects[allyno]; //&&sr.toresize = true; //m_rects[allyno] = sr; } void IBattle::StartRectRemoved( unsigned int allyno ) { std::map::const_iterator rect_it = m_rects.find(allyno); if( rect_it == m_rects.end() ) return; if ( rect_it->second.todelete ) m_rects.erase(allyno); } void IBattle::StartRectResized( unsigned int allyno ) { std::map::iterator rect_it = m_rects.find(allyno); if( rect_it == m_rects.end() ) return; rect_it->second.toresize = false; //BattleStartRect sr = m_rects[allyno]; //sr.toresize = false; //m_rects[allyno] = sr; } void IBattle::StartRectAdded( unsigned int allyno ) { std::map::iterator rect_it = m_rects.find(allyno); if( rect_it == m_rects.end() ) return; rect_it->second.toadd = false; //BattleStartRect sr = m_rects[allyno]; //sr.toadd = false; //m_rects[allyno] = sr; } BattleStartRect IBattle::GetStartRect( unsigned int allyno ) const { std::map::const_iterator rect_it = m_rects.find(allyno); if( rect_it != m_rects.end() ) return (*rect_it).second; return BattleStartRect(); } //total number of start rects unsigned int IBattle::GetNumRects() const { return m_rects.size(); } //key of last start rect in the map unsigned int IBattle::GetLastRectIdx() const { if(GetNumRects() > 0) return m_rects.rbegin()->first; return 0; } //return the lowest currently unused key in the map of rects. unsigned int IBattle::GetNextFreeRectIdx() const { //check for unused allyno keys for(unsigned int i = 0; i <= GetLastRectIdx(); i++) { if(!GetStartRect(i).IsOk()) return i; } return GetNumRects(); //if all rects are in use, or no elements exist, return first possible available allyno. } void IBattle::ClearStartRects() { m_rects.clear(); } void IBattle::ForceSide( User& user, int side ) { if ( IsFounderMe() || user.BattleStatus().IsBot() ) { user.BattleStatus().side = side; } } void IBattle::ForceTeam( User& user, int team ) { if ( IsFounderMe() || user.BattleStatus().IsBot() ) { if ( !user.BattleStatus().spectator ) { PlayerLeftTeam( user.BattleStatus().team ); PlayerJoinedTeam( team ); } user.BattleStatus().team = team; } } void IBattle::ForceAlly( User& user, int ally ) { if ( IsFounderMe() || user.BattleStatus().IsBot() ) { if ( !user.BattleStatus().spectator ) { PlayerLeftAlly( user.BattleStatus().ally ); PlayerJoinedAlly( ally ); } user.BattleStatus().ally = ally; } } void IBattle::ForceColour( User& user, const wxColour& col ) { if ( IsFounderMe() || user.BattleStatus().IsBot() ) { user.BattleStatus().colour = col; } } void IBattle::PlayerJoinedTeam( int team ) { std::map::const_iterator itor = m_teams_sizes.find( team ); if ( itor == m_teams_sizes.end() ) m_teams_sizes[team] = 1; else m_teams_sizes[team] = m_teams_sizes[team] + 1; } void IBattle::PlayerJoinedAlly( int ally ) { std::map::const_iterator iter = m_ally_sizes.find( ally ); if ( iter == m_ally_sizes.end() ) m_ally_sizes[ally] = 1; else m_ally_sizes[ally] = m_ally_sizes[ally] + 1; } void IBattle::PlayerLeftTeam( int team ) { std::map::iterator itor = m_teams_sizes.find( team ); if ( itor != m_teams_sizes.end() ) { itor->second = itor->second -1; if ( itor->second == 0 ) { m_teams_sizes.erase( itor ); } } } void IBattle::PlayerLeftAlly( int ally ) { std::map::iterator iter = m_ally_sizes.find( ally ); if ( iter != m_ally_sizes.end() ) { iter->second = iter->second - 1; if ( iter->second == 0 ) { m_ally_sizes.erase( iter ); } } } void IBattle::ForceSpectator( User& user, bool spectator ) { if ( IsFounderMe() || user.BattleStatus().IsBot() ) { UserBattleStatus& status = user.BattleStatus(); if ( !status.spectator ) // leaving spectator status { PlayerJoinedTeam( status.team ); PlayerJoinedAlly( status.ally ); if ( status.ready && !status.IsBot() ) m_players_ready++; } if (spectator) // entering spectator status { PlayerLeftTeam( status.team ); PlayerLeftAlly( status.ally ); if ( status.ready && !status.IsBot() ) m_players_ready--; } if ( IsFounderMe() ) { if ( status.spectator != spectator ) { if ( spectator ) { m_opts.spectators++; } else { m_opts.spectators--; } SendHostInfo( HI_Spectators ); } } user.BattleStatus().spectator = spectator; } } void IBattle::SetHandicap( User& user, int handicap) { if ( IsFounderMe() || user.BattleStatus().IsBot() ) { user.BattleStatus().handicap = handicap; } } void IBattle::KickPlayer( User& user ) { if ( IsFounderMe() || user.BattleStatus().IsBot() ) { OnUserRemoved( user ); } } int IBattle::GetFreeAlly( bool excludeme ) const { int lowest = 0; bool changed = true; while ( changed ) { changed = false; for ( unsigned int i = 0; i < GetNumUsers(); i++ ) { User& user = GetUser( i ); if ( ( &user == &GetMe() ) && excludeme ) continue; if ( user.BattleStatus().spectator ) continue; if ( user.BattleStatus().ally == lowest ) { lowest++; changed = true; } } } return lowest; } UserPosition IBattle::GetFreePosition() { UserPosition ret; UnitSyncMap map = LoadMap(); for ( int i = 0; i < int(map.info.positions.size()); i++ ) { bool taken = false; for ( unsigned int bi = 0; bi < GetNumUsers(); bi++ ) { User& user = GetUser( bi ); UserBattleStatus& status = user.BattleStatus(); if ( status.spectator ) continue; if ( ( map.info.positions[i].x == status.pos.x ) && ( map.info.positions[i].y == status.pos.y ) ) { taken = true; break; } } if ( !taken ) { ret.x = LSL::Util::Clamp(map.info.positions[i].x, 0, map.info.width); ret.y = LSL::Util::Clamp(map.info.positions[i].y, 0, map.info.height); return ret; } } ret.x = map.info.width / 2; ret.y = map.info.height / 2; return ret; } void IBattle::SetHostMap(const wxString& mapname, const wxString& hash) { if ( mapname != m_host_map.name || hash != m_host_map.hash ) { m_map_loaded = false; m_host_map.name = mapname; m_host_map.hash = hash; if ( !m_host_map.hash.IsEmpty() && m_host_map.hash != '0' ) m_map_exists = usync().MapExists( m_host_map.name, m_host_map.hash ); else m_map_exists = usync().MapExists( m_host_map.name ); #ifndef __WXMSW__ //!TODO why not on win? if ( m_map_exists && !spring().IsRunning() ) usync().PrefetchMap( m_host_map.name ); #endif } } void IBattle::SetLocalMap(const UnitSyncMap& map) { if ( map.name != m_local_map.name || map.hash != m_local_map.hash ) { m_local_map = map; m_map_loaded = true; if ( !m_host_map.hash.IsEmpty() && m_host_map.hash != '0' ) m_map_exists = usync().MapExists( m_host_map.name, m_host_map.hash ); else m_map_exists = usync().MapExists( m_host_map.name ); #ifndef __WXMSW__ if ( m_map_exists && !spring().IsRunning() ) usync().PrefetchMap( m_host_map.name ); #endif if ( IsFounderMe() ) // save all rects infos { } } } const UnitSyncMap& IBattle::LoadMap() { if ( !m_map_loaded ) { try { ASSERT_EXCEPTION( m_map_exists, _T("Map does not exist.") ); m_local_map = usync().GetMapEx( m_host_map.name ); bool options_loaded = CustomBattleOptions().loadOptions( OptionsWrapper::MapOption, m_host_map.name ); ASSERT_EXCEPTION( options_loaded, _T("couldn't load the map options") ); m_map_loaded = true; } catch (...) {} } return m_local_map; } wxString IBattle::GetHostMapName() const { return m_host_map.name; } wxString IBattle::GetHostMapHash() const { return m_host_map.hash; } void IBattle::SetHostMod( const wxString& modname, const wxString& hash ) { if ( m_host_mod.name != modname || m_host_mod.hash != hash ) { m_mod_loaded = false; m_host_mod.name = modname; m_host_mod.hash = hash; if ( !m_host_mod.hash.IsEmpty() && m_host_mod.hash != '0' ) m_mod_exists = usync().ModExists( m_host_mod.name, m_host_mod.hash ); else m_mod_exists = usync().ModExists( m_host_mod.name ); } } void IBattle::SetLocalMod( const UnitSyncMod& mod ) { if ( mod.name != m_local_mod.name || mod.hash != m_local_mod.hash ) { m_previous_local_mod_name = m_local_mod.name; m_local_mod = mod; m_mod_loaded = true; if ( !m_host_mod.hash.IsEmpty() && m_host_mod.hash != '0' ) m_mod_exists = usync().ModExists( m_host_mod.name, m_host_mod.hash ); else m_mod_exists = usync().ModExists( m_host_mod.name ); } } const UnitSyncMod& IBattle::LoadMod() { if ( !m_mod_loaded ) { try { ASSERT_EXCEPTION( m_mod_exists, _T("Mod does not exist.") ); m_local_mod = usync().GetMod( m_host_mod.name ); bool options_loaded = CustomBattleOptions().loadOptions( OptionsWrapper::ModOption, m_host_mod.name ); ASSERT_EXCEPTION( options_loaded, _T("couldn't load the mod options") ); m_mod_loaded = true; } catch (...) {} } return m_local_mod; } wxString IBattle::GetHostModName() const { return m_host_mod.name; } wxString IBattle::GetHostModHash() const { return m_host_mod.hash; } bool IBattle::MapExists() const { return m_map_exists; // return usync().MapExists( m_map.name, m_map.hash ); } bool IBattle::ModExists() const { return m_mod_exists; // return usync().ModExists( m_host_mod.name, m_host_mod.hash ); } void IBattle::RestrictUnit( const wxString& unitname, int count ) { m_restricted_units[ unitname ] = count; } void IBattle::UnrestrictUnit( const wxString& unitname ) { std::map::iterator pos = m_restricted_units.find( unitname ); if ( pos == m_restricted_units.end() ) return; m_restricted_units.erase( pos ); } void IBattle::UnrestrictAllUnits() { m_restricted_units.clear(); } std::map IBattle::RestrictedUnits() const { return m_restricted_units; } void IBattle::OnSelfLeftBattle() { GetMe().BattleStatus().spectator = false; // always reset back yourself to player when rejoining if ( m_timer ) m_timer->Stop(); delete m_timer; m_timer = 0; m_is_self_in = false; for( size_t j = 0; j < GetNumUsers(); ++j ) { User& u = GetUser( j ); if ( u.GetBattleStatus().IsBot() ) { OnUserRemoved( u ); ui().OnUserLeftBattle( *this, u, true ); j--; } } ClearStartRects(); m_teams_sizes.clear(); m_ally_sizes.clear(); m_players_ready = 0; m_players_sync = 0; m_players_ok = 0; usync().UnSetCurrentMod(); //left battle } void IBattle::OnUnitsyncReloaded( GlobalEvents::GlobalEventData /*data*/ ) { if ( !m_host_mod.hash.IsEmpty() && m_host_mod.hash != '0' ) m_mod_exists = usync().ModExists( m_host_mod.name, m_host_mod.hash); else m_mod_exists = usync().ModExists( m_host_mod.name ); if ( !m_host_map.hash.IsEmpty() && m_host_map.hash != '0' ) m_map_exists = usync().MapExists( m_host_map.name, m_host_map.hash ); else m_map_exists = usync().MapExists( m_host_map.name ); } static wxString FixPresetName( const wxString& name ) { // look name up case-insensitively const wxArrayString& presetList = sett().GetPresetList(); int index = presetList.Index( name, false /*case insensitive*/ ); if ( index == -1 ) return _T(""); // set preset to the actual name, with correct case return presetList[index]; } bool IBattle::LoadOptionsPreset( const wxString& name ) { wxString preset = FixPresetName(name); if (preset == _T("")) return false; //preset not found m_preset = preset; for ( unsigned int i = 0; i < OptionsWrapper::LastOption; i++) { std::map options = sett().GetHostingPreset( m_preset, i ); if ( (OptionsWrapper::GameOption)i != OptionsWrapper::PrivateOptions ) { for ( std::map::const_iterator itor = options.begin(); itor != options.end(); ++itor ) { wxLogWarning( itor->first + _T(" ::: ") + itor->second ); CustomBattleOptions().setSingleOption( itor->first, itor->second, (OptionsWrapper::GameOption)i ); } } else { if ( !options[_T("mapname")].IsEmpty() ) { if ( usync().MapExists( options[_T("mapname")] ) ) { UnitSyncMap map = usync().GetMapEx( options[_T("mapname")] ); SetLocalMap( map ); SendHostInfo( HI_Map ); } else if ( !ui().OnPresetRequiringMap( options[_T("mapname")] ) ) { //user didn't want to download the missing map, so set to empty to not have it tried to be loaded again options[_T("mapname")] = _T(""); sett().SetHostingPreset( m_preset, i, options ); } } for( unsigned int j = 0; j <= GetLastRectIdx(); ++j ) { if ( GetStartRect( j ).IsOk() ) RemoveStartRect(j); // remove all rects that might come from map presets } SendHostInfo( IBattle::HI_StartRects ); unsigned int rectcount = s2l( options[_T("numrects")] ); for ( unsigned int loadrect = 0; loadrect < rectcount; loadrect++) { int ally = s2l(options[_T("rect_") + TowxString(loadrect) + _T("_ally")]); if ( ally == 0 ) continue; AddStartRect( ally - 1, s2l(options[_T("rect_") + TowxString(loadrect) + _T("_left")]), s2l(options[_T("rect_") + TowxString(loadrect) + _T("_top")]), s2l(options[_T("rect_") + TowxString(loadrect) + _T("_right")]), s2l(options[_T("rect_") + TowxString(loadrect) + _T("_bottom")]) ); } SendHostInfo( HI_StartRects ); wxStringTokenizer tkr( options[_T("restrictions")], _T('\t') ); m_restricted_units.clear(); while( tkr.HasMoreTokens() ) { wxString unitinfo = tkr.GetNextToken(); RestrictUnit( unitinfo.BeforeLast(_T('=')), s2l( unitinfo.AfterLast(_T('=')) ) ); } SendHostInfo( HI_Restrictions ); Update( wxFormat( _T("%d_restrictions") ) % OptionsWrapper::PrivateOptions ); } } SendHostInfo( HI_Send_All_opts ); ui().ReloadPresetList(); return true; } void IBattle::SaveOptionsPreset( const wxString& name ) { m_preset = FixPresetName(name); if (m_preset == _T("")) m_preset = name; //new preset for ( int i = 0; i < (int)OptionsWrapper::LastOption; i++) { if ( (OptionsWrapper::GameOption)i != OptionsWrapper::PrivateOptions ) { sett().SetHostingPreset( m_preset, (OptionsWrapper::GameOption)i, CustomBattleOptions().getOptionsMap( (OptionsWrapper::GameOption)i ) ); } else { std::map opts; opts[_T("mapname")] = GetHostMapName(); unsigned int validrectcount = 0; if ( s2l (CustomBattleOptions().getSingleValue( _T("startpostype"), OptionsWrapper::EngineOption ) ) == ST_Choose ) { unsigned int boxcount = GetLastRectIdx(); for ( unsigned int boxnum = 0; boxnum <= boxcount; boxnum++ ) { BattleStartRect rect = GetStartRect( boxnum ); if ( rect.IsOk() ) { opts[_T("rect_") + TowxString(validrectcount) + _T("_ally")] = TowxString( rect.ally + 1 ); opts[_T("rect_") + TowxString(validrectcount) + _T("_left")] = TowxString( rect.left ); opts[_T("rect_") + TowxString(validrectcount) + _T("_top")] = TowxString( rect.top ); opts[_T("rect_") + TowxString(validrectcount) + _T("_bottom")] = TowxString( rect.bottom ); opts[_T("rect_") + TowxString(validrectcount) + _T("_right")] = TowxString( rect.right ); validrectcount++; } } } opts[_T("numrects")] = TowxString( validrectcount ); wxString restrictionsstring; for ( std::map::const_iterator itor = m_restricted_units.begin(); itor != m_restricted_units.end(); ++itor ) { restrictionsstring << itor->first << _T('=') << TowxString(itor->second) << _T('\t'); } opts[_T("restrictions")] = restrictionsstring; sett().SetHostingPreset( m_preset, (OptionsWrapper::GameOption)i, opts ); } } sett().SaveSettings(); ui().ReloadPresetList(); } wxString IBattle::GetCurrentPreset() { return m_preset; } void IBattle::DeletePreset( const wxString& name ) { wxString preset = FixPresetName(name); if ( m_preset == preset ) m_preset = _T(""); sett().DeletePreset( preset ); ui().ReloadPresetList(); } wxArrayString IBattle::GetPresetList() { return sett().GetPresetList(); } void IBattle::UserPositionChanged( const User& /*unused*/ ) { } void IBattle::AddUserFromDemo( User& user ) { user.BattleStatus().isfromdemo = true; m_internal_user_list[user.GetNick()] = user; UserList::AddUser( m_internal_user_list[user.GetNick()] ); } void IBattle::SetProxy( const wxString& value ) { m_opts.proxyhost = value; } bool IBattle::IsProxy() const { return !m_opts.proxyhost.IsEmpty(); } wxString IBattle::GetProxy() const { return m_opts.proxyhost; } bool IBattle::IsFounderMe() const { return ( ( m_opts.founder == GetMe().GetNick() ) || ( IsProxy() && !m_generating_script ) ); } bool IBattle::IsFounder( const User& user ) const { if ( UserExists( m_opts.founder ) ) { try { return &GetFounder() == &user; }catch(...){return false;} } else return false; } int IBattle::GetMyPlayerNum() const { return GetPlayerNum( GetMe() ); } void IBattle::LoadScriptMMOpts( const wxString& sectionname, const SL::PDataList& node ) { if ( !node.ok() ) return; SL::PDataList section ( node->Find(sectionname) ); if ( !section.ok() ) return; OptionsWrapper& opts = CustomBattleOptions(); for ( SL::PNode n = section->First(); n != section->Last(); n = section->Next( n ) ) { if ( !n.ok() ) continue; opts.setSingleOption( n->Name(), section->GetString( n->Name() ) ); } } void IBattle::LoadScriptMMOpts( const SL::PDataList& node ) { if ( !node.ok() ) return; OptionsWrapper& opts = CustomBattleOptions(); typedef std::map optMap; optMap options = opts.getOptionsMap(OptionsWrapper::EngineOption); for ( optMap::const_iterator i = options.begin(); i != options.end(); ++i) { opts.setSingleOption( i->first, node->GetString( i->first, i->second ) ); } } //! (koshi) don't delete commented things please, they might be need in the future and i'm lazy void IBattle::GetBattleFromScript( bool loadmapmod ) { BattleOptions opts; std::stringstream ss ( (const char *)GetScript().mb_str(wxConvUTF8) );// no need to convert wxstring-->std::string-->std::stringstream, convert directly. SL::PDataList script( ParseTDF(ss) ); SL::PDataList replayNode ( script->Find(_T("GAME") ) ); if ( replayNode.ok() ) { wxString modname = replayNode->GetString( _T("GameType") ); wxString modhash = replayNode->GetString( _T("ModHash") ); if ( !modhash.IsEmpty() ) modhash = MakeHashUnsigned( modhash ); SetHostMod( modname, modhash ); //don't have the maphash, what to do? //ui download function works with mapname if hash is empty, so works for now wxString mapname = replayNode->GetString( _T("MapName") ); wxString maphash = replayNode->GetString( _T("MapHash") ); if ( !maphash.IsEmpty() ) maphash = MakeHashUnsigned( maphash ); SetHostMap( mapname, maphash ); // opts.ip = replayNode->GetString( _T("HostIP") ); // opts.port = replayNode->GetInt ( _T("HostPort"), DEFAULT_EXTERNAL_UDP_SOURCE_PORT ); opts.spectators = 0; int playernum = replayNode->GetInt ( _T("NumPlayers"), 0); int usersnum = replayNode->GetInt ( _T("NumUsers"), 0); if ( usersnum > 0 ) playernum = usersnum; // int allynum = replayNode->GetInt ( _T("NumAllyTeams"), 1); // int teamnum = replayNode->GetInt ( _T("NumTeams"), 1); wxArrayString sides; if ( loadmapmod ) { sides = usync().GetSides( modname ); } IBattle::TeamVec parsed_teams = GetParsedTeamsVec(); IBattle::AllyVec parsed_allies = GetParsedAlliesVec(); //[PLAYERX] sections for ( int i = 0; i < playernum ; ++i ) { SL::PDataList player ( replayNode->Find( _T("PLAYER") + TowxString(i) ) ); SL::PDataList bot ( replayNode->Find( _T("AI") + TowxString(i) ) ); if ( player.ok() || bot.ok() ) { if ( bot.ok() ) player = bot; User user ( player->GetString( _T("Name") ), (player->GetString( _T("CountryCode")).Upper() ), 0); UserBattleStatus& status = user.BattleStatus(); status.isfromdemo = true; status.spectator = player->GetInt( _T("Spectator"), 0 ); opts.spectators += user.BattleStatus().spectator; status.team = player->GetInt( _T("Team") ); if ( !status.spectator ) { PlayerJoinedTeam( status.team ); } status.sync = true; status.ready = true; if ( status.spectator ) m_opts.spectators++; else { if ( !bot.ok() ) { if ( status.ready) m_players_ready++; if ( status.sync ) m_players_sync++; if ( status.sync && status.ready ) m_players_ok++; } } //! (koshi) changed this from ServerRankContainer to RankContainer user.Status().rank = (UserStatus::RankContainer)player->GetInt( _T("Rank"), -1 ); if ( bot.ok() ) { status.aishortname = bot->GetString( _T("ShortName" ) ); status.aiversion = bot->GetString( _T("Version" ) ); int ownerindex = bot->GetInt( _T("Host" ) ); SL::PDataList aiowner ( replayNode->Find( _T("PLAYER") + TowxString(ownerindex) ) ); if ( aiowner.ok() ) { status.owner = aiowner->GetString( _T("Name") ); } } IBattle::TeamInfoContainer teaminfos = parsed_teams[user.BattleStatus().team]; if ( !teaminfos.exist ) { SL::PDataList team( replayNode->Find( _T("TEAM") + TowxString( user.BattleStatus().team ) ) ); if ( team.ok() ) { teaminfos.exist = true; teaminfos.TeamLeader = team->GetInt( _T("TeamLeader"), 0 ); teaminfos.StartPosX = team->GetInt( _T("StartPosX"), -1 ); teaminfos.StartPosY = team->GetInt( _T("StartPosY"), -1 ); teaminfos.AllyTeam = team->GetInt( _T("AllyTeam"), 0 ); teaminfos.RGBColor = GetColorFromFloatStrng( team->GetString( _T("RGBColor") ) ); teaminfos.SideName = team->GetString( _T("Side"), _T("") ); teaminfos.Handicap = team->GetInt( _T("Handicap"), 0 ); int sidepos = sides.Index( teaminfos.SideName ); teaminfos.SideNum = sidepos; parsed_teams[ user.BattleStatus().team ] = teaminfos; } } if ( teaminfos.exist ) { status.ally = teaminfos.AllyTeam; status.pos.x = teaminfos.StartPosX; status.pos.y = teaminfos.StartPosY; status.colour = teaminfos.RGBColor; status.handicap = teaminfos.Handicap; if ( !status.spectator ) { PlayerJoinedAlly( status.ally ); } if ( teaminfos.SideNum >= 0 ) status.side = teaminfos.SideNum; IBattle::AllyInfoContainer allyinfos = parsed_allies[user.BattleStatus().ally]; if ( !allyinfos.exist ) { SL::PDataList ally( replayNode->Find( _T("ALLYTEAM") + TowxString( user.BattleStatus().ally ) ) ); if ( ally.ok() ) { allyinfos.exist = true; allyinfos.NumAllies = ally->GetInt( _T("NumAllies"), 0 ); allyinfos.StartRectLeft = ally->GetInt( _T("StartRectLeft"), 0 ); allyinfos.StartRectTop = ally->GetInt( _T("StartRectTop"), 0 ); allyinfos.StartRectRight = ally->GetInt( _T("StartRectRight"), 0 ); allyinfos.StartRectBottom = ally->GetInt( _T("StartRectBottom"), 0 ); parsed_allies[ user.BattleStatus().ally ] = allyinfos; AddStartRect( user.BattleStatus().ally, allyinfos.StartRectTop, allyinfos.StartRectTop, allyinfos.StartRectRight, allyinfos.StartRectBottom ); } } } AddUserFromDemo( user ); } } SetParsedTeamsVec( parsed_teams ); SetParsedAlliesVec( parsed_allies ); //MMoptions, this'll fail unless loading map/mod into wrapper first if ( loadmapmod ) { LoadScriptMMOpts( _T("mapoptions"), replayNode ); LoadScriptMMOpts( _T("modoptions"), replayNode ); } opts.maxplayers = playernum ; } SetBattleOptions( opts ); } void IBattle::SetInGame(bool ingame) { m_ingame = ingame; if (m_ingame) m_start_time = wxGetUTCTime(); else m_start_time = 0; } long IBattle::GetBattleRunningTime() const { if (!GetInGame()) return 0; if (m_start_time == 0 ) return 0; return wxGetUTCTime() - m_start_time; } springlobby-0.169/src/ibattle.h0000600000176000000410000003443212105760300020011 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_IBATTLE_H #define SPRINGLOBBY_HEADERGUARD_IBATTLE_H #include #include #include "springunitsync.h" #include "user.h" #include "mmoptionswrapper.h" #include "userlist.h" #include "tdfcontainer.h" #include "utils/isink.h" #include "utils/mixins.hh" const unsigned int DEFAULT_SERVER_PORT = 8452; const unsigned int DEFAULT_EXTERNAL_UDP_SOURCE_PORT = 16941; class IBattle; class wxTimer; struct BattleStartRect { BattleStartRect() : toadd(false), todelete(false), toresize(false), exist(false), ally(-1), top(-1), left(-1), right(-1), bottom(-1) { } bool toadd; bool todelete; bool toresize; bool exist; int ally; int top; int left; int right; int bottom; bool IsOk() const { return exist && !todelete; } }; enum NatType { NAT_None = 0, NAT_Hole_punching, NAT_Fixed_source_ports }; enum BattleType { BT_Played, BT_Replay, BT_Savegame }; struct BattleOptions { BattleOptions() : battleid(-1),islocked(false),battletype(BT_Played),ispassworded(false),rankneeded(0),proxyhost(_T("")),userelayhost(false),lockexternalbalancechanges(false), nattype(NAT_None),port(DEFAULT_SERVER_PORT),externaludpsourceport(DEFAULT_EXTERNAL_UDP_SOURCE_PORT),internaludpsourceport(DEFAULT_EXTERNAL_UDP_SOURCE_PORT),maxplayers(0),spectators(0), guilistactiv(false) {} int battleid; bool islocked; BattleType battletype; bool ispassworded; int rankneeded; wxString proxyhost; bool userelayhost; bool lockexternalbalancechanges; wxString founder; NatType nattype; unsigned int port; wxString ip; unsigned int externaludpsourceport; unsigned int internaludpsourceport; unsigned int maxplayers; unsigned int spectators; wxString relayhost; wxString maphash; wxString modhash; wxString description; wxString mapname; wxString modname; bool guilistactiv; }; class IBattle: public UserList, public wxEvtHandler, public UnitsyncReloadedSink< IBattle > , public SL::NonCopyable { public: IBattle(); virtual ~IBattle(); /** @name Constants * @{ */ enum HostInfo { HI_None = 0, HI_Map = 1, HI_Locked = 2, HI_Spectators = 4, HI_StartResources = 8, HI_MaxUnits = 16, HI_StartType = 32, HI_GameType = 64, HI_Options = 128, HI_StartRects = 256, HI_Restrictions = 512, HI_Map_Changed = 1024, HI_Mod_Changed = 2048, HI_User_Positions = 4096, HI_Send_All_opts = 8192 }; /**@}*/ /** @name Enums * @{ */ enum BalanceType { balance_divide, balance_random }; enum StartType { ST_Fixed = 0, ST_Random = 1, ST_Choose = 2, ST_Pick = 3 }; enum GameType { GT_ComContinue = 0, GT_ComEnds = 1, GT_Lineage = 2 }; struct TeamInfoContainer { bool exist; int TeamLeader; int StartPosX; int StartPosY; int AllyTeam; wxColor RGBColor; wxString SideName; int Handicap; int SideNum; }; struct AllyInfoContainer { bool exist; int NumAllies; int StartRectLeft; int StartRectTop; int StartRectRight; int StartRectBottom; }; /**@}*/ virtual void SetHostMap( const wxString& mapname, const wxString& hash ); virtual void SetLocalMap( const UnitSyncMap& map ); virtual const UnitSyncMap& LoadMap(); virtual wxString GetHostMapName() const; virtual wxString GetHostMapHash() const; virtual void SetProxy( const wxString& proxyhost ); virtual wxString GetProxy() const; virtual bool IsProxy() const; virtual bool IsSynced(); //cannot be const virtual bool IsFounderMe() const; virtual bool IsFounder( const User& user ) const; virtual int GetMyPlayerNum() const; virtual int GetPlayerNum( const User& user ) const; virtual void SetHostMod( const wxString& modname, const wxString& hash ); virtual void SetLocalMod( const UnitSyncMod& mod ); virtual const UnitSyncMod& LoadMod(); virtual wxString GetHostModName() const; virtual wxString GetHostModHash() const; virtual bool MapExists() const; virtual bool ModExists() const; virtual BattleStartRect GetStartRect( unsigned int allyno ) const; User& OnUserAdded( User& user ); void OnUserBattleStatusUpdated( User &user, UserBattleStatus status ); void OnUserRemoved( User& user ); bool IsEveryoneReady() const; void ForceSide( User& user, int side ); void ForceAlly( User& user, int ally ); void ForceTeam( User& user, int team ); void ForceColour( User& user, const wxColour& col ); void ForceSpectator( User& user, bool spectator ); void SetHandicap( User& user, int handicap); void KickPlayer( User& user ); virtual void AddStartRect( unsigned int allyno, unsigned int left, unsigned int top, unsigned int right, unsigned int bottom ); virtual void RemoveStartRect( unsigned int allyno ); virtual void ResizeStartRect( unsigned int allyno ); virtual void StartRectRemoved( unsigned int allyno ); virtual void StartRectResized( unsigned int allyno ); virtual void StartRectAdded( unsigned int allyno ); virtual void ClearStartRects(); virtual unsigned int GetNumRects() const; virtual unsigned int GetLastRectIdx() const; virtual unsigned int GetNextFreeRectIdx() const; virtual int GetFreeTeam( bool excludeme = false ) const; virtual User& GetMe() = 0; virtual const User& GetMe() const = 0; virtual void SendHostInfo( HostInfo update ); virtual void SendHostInfo( const wxString& Tag ); virtual void Update ( const wxString& Tag ); virtual unsigned int GetNumBots() const; virtual User& OnBotAdded( const wxString& nick, const UserBattleStatus& bs ); virtual UserPosition GetFreePosition() ; virtual int GetFreeAlly( bool excludeme = false ) const; virtual void RestrictUnit( const wxString& unitname, int count = 0 ); virtual void UnrestrictUnit( const wxString& unitname ); virtual void UnrestrictAllUnits(); virtual std::map RestrictedUnits() const; virtual void OnUnitsyncReloaded( GlobalEvents::GlobalEventData /*data*/ ); virtual OptionsWrapper& CustomBattleOptions() { return m_opt_wrap; } virtual const OptionsWrapper& CustomBattleOptions() const { return m_opt_wrap; } virtual bool LoadOptionsPreset( const wxString& name ); virtual void SaveOptionsPreset( const wxString& name ); virtual wxString GetCurrentPreset(); virtual void DeletePreset( const wxString& name ); virtual wxArrayString GetPresetList(); virtual std::vector &GetFixColoursPalette( int numteams ) const; virtual int GetClosestFixColour(const wxColour &col, const std::vector &excludes, int difference) const; virtual wxColour GetFixColour(int i) const; virtual wxColour GetFreeColour( User &for_whom ) const; wxColour GetFreeColour( User *for_whom = NULL ) const; wxColour GetNewColour() const; int ColourDifference(const wxColour &a, const wxColour &b) const; User& GetFounder() const { return GetUser( m_opts.founder ); } bool IsFull() const { return GetMaxPlayers() == GetNumActivePlayers(); } virtual unsigned int GetNumPlayers() const; virtual unsigned int GetNumActivePlayers() const; virtual unsigned int GetNumReadyPlayers() const { return m_players_ready; } virtual unsigned int GetNumSyncedPlayers() const { return m_players_sync; } virtual unsigned int GetNumOkPlayers() const { return m_players_ok; } virtual int GetBattleId() const { return m_opts.battleid; } virtual bool GetGUIListActiv() const { return m_opts.guilistactiv; } virtual void SetGUIListActiv(bool Activ) { m_opts.guilistactiv = Activ; } virtual void SetInGame( bool ingame ); virtual bool GetInGame() const { return m_ingame; } virtual void SetBattleType( BattleType type ) { m_opts.battletype = type; } virtual BattleType GetBattleType() { return m_opts.battletype; } virtual void SetIsLocked( const bool islocked ) { m_opts.islocked = islocked; } virtual bool IsLocked() const { return m_opts.islocked; } virtual void SetIsPassworded( const bool ispassworded ) { m_opts.ispassworded = ispassworded; } virtual bool IsPassworded() const { return m_opts.ispassworded; } virtual void SetNatType( const NatType nattype ) { m_opts.nattype = nattype; } virtual NatType GetNatType() const { return m_opts.nattype; } virtual void SetHostPort( unsigned int port) { m_opts.port = port; } virtual void SetMyExternalUdpSourcePort(unsigned int port){m_opts.externaludpsourceport=port;} virtual unsigned int GetMyExternalUdpSourcePort(){return m_opts.externaludpsourceport;} virtual void SetMyInternalUdpSourcePort(unsigned int port){m_opts.internaludpsourceport=port;} virtual unsigned int GetMyInternalUdpSourcePort(){return m_opts.internaludpsourceport;} virtual int GetHostPort() const { return m_opts.port; } virtual void SetFounder( const wxString& nick ) { m_opts.founder = nick; } virtual void SetHostIp( const wxString& ip ) { m_opts.ip = ip; } virtual wxString GetHostIp() const { return m_opts.ip; } virtual void SetMaxPlayers( const int& maxplayers ) { m_opts.maxplayers = maxplayers; } virtual unsigned int GetMaxPlayers() const { return m_opts.maxplayers; } virtual void SetSpectators( const int& spectators ) { m_opts.spectators = spectators; } virtual int GetSpectators() const { return m_opts.spectators; } virtual void SetRankNeeded( const int& rankneeded ) { m_opts.rankneeded = rankneeded; } virtual int GetRankNeeded() const { return m_opts.rankneeded; } // virtual void SetMapHash( const wxString& maphash ) { m_opts.maphash = maphash; } // virtual void SetMapname( const wxString& map ) { m_opts.mapname = map; } virtual void SetDescription( const wxString& desc ) { m_opts.description = desc; } virtual wxString GetDescription() const { return m_opts.description; } // virtual void SetModname( const wxString& mod ) { m_opts.modname = mod; } typedef std::map UserVec; typedef UserVec::const_iterator UserVecCIter; typedef UserVec::iterator UserVecIter; void SetBattleOptions( const BattleOptions& options ) { m_opts = options; } virtual void OnSelfLeftBattle(); /// replay&savegame parsing stuff typedef std::map TeamVec; typedef TeamVec::const_iterator TeamVecCIter; typedef TeamVec::iterator TeamVecIter; typedef std::map AllyVec; typedef AllyVec::const_iterator AllyVecCIter; typedef AllyVec::iterator AllyVecIter; TeamVec GetParsedTeamsVec() { return m_parsed_teams; } AllyVec GetParsedAlliesVec() { return m_parsed_allies; } void SetParsedTeamsVec( const TeamVec& t ) { m_parsed_teams = t; } void SetParsedAlliesVec( const AllyVec& a ) { m_parsed_allies = a; } const BattleOptions& GetBattleOptions() const { return m_opts; } bool Equals( const IBattle& other ) const { return m_opts.battleid == other.GetBattleOptions().battleid; } virtual void DisableHostStatusInProxyMode( bool value ) { m_generating_script = value; } virtual void UserPositionChanged( const User& usr ); virtual void SetScript( const wxString& script ) { m_script = script; } virtual void AppendScriptLine( const wxString& line ) { m_script << line; } virtual void ClearScript() { m_script.Clear(); } virtual wxString GetScript() const { return m_script; } virtual void SetPlayBackFilePath( const wxString& path ) { m_playback_file_path = path; } virtual wxString GetPlayBackFilePath() const { return m_playback_file_path; } virtual void AddUserFromDemo( User& user ); virtual void GetBattleFromScript( bool loadmapmod ); virtual bool ShouldAutoStart() const; virtual void StartSpring() = 0; virtual std::map GetAllySizes() { return m_ally_sizes; } virtual std::map GetTeamSizes() { return m_teams_sizes; } std::map m_script_tags; // extra script tags to reload in the case of map/mod reload virtual long GetBattleRunningTime() const; // returns 0 if not started protected: void LoadScriptMMOpts( const wxString& sectionname, const SL::PDataList& node ); void LoadScriptMMOpts( const SL::PDataList& node ); void PlayerLeftTeam( int team ); void PlayerLeftAlly( int ally ); void PlayerJoinedTeam( int team ); void PlayerJoinedAlly( int ally ); bool m_map_loaded; bool m_mod_loaded; bool m_map_exists; bool m_mod_exists; UnitSyncMap m_local_map; UnitSyncMod m_local_mod; UnitSyncMap m_host_map; UnitSyncMod m_host_mod; wxString m_previous_local_mod_name; std::map m_restricted_units; OptionsWrapper m_opt_wrap; BattleOptions m_opts; bool m_ingame; bool m_auto_unspec; // unspec as soon as there's a free slot bool m_generating_script; std::map m_rects; std::map m_ready_up_map; // player name -> time counting from join/unspect unsigned int m_players_ready; unsigned int m_players_sync; unsigned int m_players_ok; // players which are ready and in sync std::map m_teams_sizes; // controlteam -> number of people in std::map m_ally_sizes; // allyteam -> number of people in wxString m_preset; bool m_is_self_in; UserVec m_internal_bot_list; /// replay&savegame stuff wxString m_script; wxString m_playback_file_path; TeamVec m_parsed_teams; AllyVec m_parsed_allies; UserVec m_internal_user_list; /// to store users from savegame/replay wxTimer* m_timer; long m_start_time; }; #endif // SPRINGLOBBY_HEADERGUARD_IBATTLE_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/iconimagelist.cpp0000600000176000000410000003556712121446441021566 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: IconImageList // #include #include #include #include #include #include "iconimagelist.h" #include "user.h" #include "battle.h" //#include "utils.h" #include "springunitsync.h" #include "images/bot.xpm" #include "images/bot_broom.png.h" #include "images/bot_ingame.png.h" #include "images/bot_away.xpm" #include "images/admin.png.h" #include "images/admin_away.png.h" #include "images/admin_broom.png.h" #include "images/admin_ingame.png.h" #include "images/chanop.xpm" #include "images/chanop_away.xpm" #include "images/chanop_broom.xpm" #include "images/chanop_ingame.xpm" #include "images/away.png.h" #include "images/broom.png.h" #include "images/ingame.png.h" #include "images/up.xpm" #include "images/down.xpm" #include "images/rank0.xpm" #include "images/rank1.xpm" #include "images/rank2.xpm" #include "images/rank3.xpm" #include "images/rank4.xpm" #include "images/rank5.xpm" #include "images/rank6.xpm" #include "images/rank7.xpm" #include "images/rank_unknown.xpm" #include "images/major.xpm" #include "images/minor.xpm" #include "images/open_game.png.h" #include "images/open_pw_game.png.h" #include "images/open_full_pw_game.png.h" #include "images/open_full_game.png.h" #include "images/closed_game.png.h" #include "images/closed_pw_game.png.h" #include "images/closed_full_pw_game.png.h" #include "images/closed_full_game.png.h" #include "images/nexists.xpm" #include "images/exists.xpm" #include "images/ready_unsync.xpm" #include "images/ready_q.xpm" #include "images/nready_unsync.xpm" #include "images/nready_q.xpm" #include "images/spectator.png.h" #include "images/host.xpm" #include "images/host_spectator.xpm" #include "images/no1_icon.png.h" #include "images/no2_icon.png.h" #include "images/warning_small.png.h" #include "images/unknown_flag.xpm" #include "images/channel_options.xpm" #include "flagimages.h" #include "images/empty.xpm" #include "uiutils.h" IconImageList::IconImageList() : wxImageList(16,16,true) { ICON_ADMIN = Add( charArr2wxBitmap( admin_png, sizeof(admin_png) ) ); ICON_ADMIN_AWAY = Add( charArr2wxBitmap( admin_away_png, sizeof(admin_away_png) ) ); ICON_ADMIN_BROOM = Add( charArr2wxBitmap( admin_broom_png, sizeof(admin_broom_png) ) ); ICON_ADMIN_INGAME = Add( charArr2wxBitmap( admin_ingame_png, sizeof(admin_ingame_png) ) ); ICON_BOT = Add( wxBitmap(bot_xpm) ); ICON_BOT_BROOM = Add( charArr2wxBitmap( bot_broom_png, sizeof( bot_broom_png ) ) ); ICON_BOT_INGAME = Add( charArr2wxBitmap( bot_ingame_png, sizeof( bot_ingame_png ) ) ); ICON_BOT_AWAY = Add( wxBitmap(bot_away_xpm) ); ICON_AWAY = Add( charArr2wxBitmap( away_png, sizeof( away_png ) ) ); ICON_BROOM = Add( charArr2wxBitmap(broom_png, sizeof(broom_png) ) ); ICON_INGAME = Add( charArr2wxBitmap(ingame_png, sizeof(ingame_png) ) ); ICON_OP = Add( wxBitmap(chanop_xpm) ); ICON_OP_AWAY = Add( wxBitmap(chanop_away_xpm) ); ICON_OP_BROOM = Add( wxBitmap(chanop_broom_xpm) ); ICON_OP_INGAME = Add( wxBitmap(chanop_ingame_xpm) ); ICON_UP = Add( wxBitmap(up_xpm) ); ICON_DOWN = Add( wxBitmap(down_xpm) ); ICON_RANK_UNKNOWN = Add( wxBitmap(rank_unknown_xpm) ); ICON_RANK1 = Add( wxBitmap(rank0_xpm) ); ICON_RANK2 = Add( wxBitmap(rank1_xpm) ); ICON_RANK3 = Add( wxBitmap(rank2_xpm) ); ICON_RANK4 = Add( wxBitmap(rank3_xpm) ); ICON_RANK5 = Add( wxBitmap(rank4_xpm) ); ICON_RANK6 = Add( wxBitmap(rank5_xpm) ); ICON_RANK7 = Add( wxBitmap(rank6_xpm) ); ICON_RANK8 = Add( wxBitmap(rank7_xpm) ); m_rank_requirements.push_back(ICON_RANK1); m_rank_requirements.push_back(ICON_RANK2); m_rank_requirements.push_back(ICON_RANK3); m_rank_requirements.push_back(ICON_RANK4); m_rank_requirements.push_back(ICON_RANK5); m_rank_requirements.push_back(ICON_RANK6); m_rank_requirements.push_back(ICON_RANK7); m_rank_requirements.push_back(ICON_RANK8); wxBitmap major_bitmap(major_xpm); wxBitmap minor_bitmap(minor_xpm); m_minimum_rank_requirement_border = m_rank_requirements.size(); for ( int i = 0; i < m_minimum_rank_requirement_border; i++) { wxBitmap to_blend= GetBitmap(m_rank_requirements[i]); m_rank_requirements[i] = Add( BlendBitmaps( to_blend, major_bitmap ) ); // replace old with blended with major m_rank_requirements.push_back( Add( BlendBitmaps( to_blend, minor_bitmap ) ) ); // add new blended with minor } ICON_READY = ICON_OPEN_GAME = Add( charArr2wxBitmap(open_game_png, sizeof(open_game_png) ) ); ICON_OPEN_PW_GAME = Add( charArr2wxBitmap(open_pw_game_png, sizeof(open_pw_game_png) ) ); ICON_OPEN_FULL_PW_GAME = Add( charArr2wxBitmap(open_full_pw_game_png, sizeof(open_full_pw_game_png) ) ); ICON_OPEN_FULL_GAME = Add( charArr2wxBitmap(open_full_game_png, sizeof(open_full_game_png) ) ); ICON_NREADY = ICON_CLOSED_GAME = Add( charArr2wxBitmap(closed_game_png, sizeof(closed_game_png) ) ); ICON_CLOSED_PW_GAME = Add( charArr2wxBitmap(closed_pw_game_png, sizeof(closed_pw_game_png) ) ); ICON_CLOSED_FULL_PW_GAME = Add( charArr2wxBitmap(closed_full_pw_game_png, sizeof(closed_full_pw_game_png) ) ); ICON_CLOSED_FULL_GAME = Add( charArr2wxBitmap(closed_full_game_png, sizeof(closed_full_game_png) ) ); ICON_STARTED_GAME = Add( charArr2wxBitmap(ingame_png, sizeof(ingame_png) ) ); ICON_STARTED_GAME_LOCKED = Add( charArr2wxBitmapWithBlending( closed_game_png, sizeof(closed_game_png), ingame_png, sizeof(ingame_png) ) ); ICON_READY_UNSYNC = Add( wxBitmap(ready_unsync_xpm) ); ICON_NREADY_UNSYNC = Add( wxBitmap(nready_unsync_xpm) ); ICON_READY_QSYNC = Add( wxBitmap(ready_q_xpm) ); ICON_NREADY_QSYNC = Add( wxBitmap(nready_q_xpm) ); ICON_NEXISTS = Add( wxBitmap(nexists_xpm) ); ICON_EXISTS = Add( wxBitmap(exists_xpm) ); ICON_SPECTATOR = Add( charArr2wxBitmap(spectator_png, sizeof(spectator_png) ) ); ICON_HOST = Add( wxBitmap(host_xpm) ); ICON_HOST_SPECTATOR = Add( wxBitmap(host_spectator_xpm) ); ICON_SIDEPIC_0 = Add( charArr2wxBitmap(no1_icon_png, sizeof(no1_icon_png) ) ); ICON_SIDEPIC_1 = Add( charArr2wxBitmap(no2_icon_png, sizeof(no2_icon_png) ) ); ICON_CHANNEL_OPTIONS = Add( wxBitmap(channel_options_xpm) ); // SetColourIcon( wxColour( 255, 0, 0 ) ); // SetColourIcon( wxColour( 0, 255, 0 ) ); // SetColourIcon( wxColour( 0, 0, 255 ) ); //ICON_FIXCOLOURS_PALETTE = Add( wxBitmap(fixcolours_palette_xpm) ); ICON_UNK_FLAG = Add( wxBitmap(unknown_flag_xpm) ); ICON_FLAGS_BASE = AddFlagImages( *this ); ICON_EMPTY = Add( wxBitmap(empty_xpm) ); #ifdef __WXMSW__ ICON_NONE = ICON_NOSTATE = ICON_RANK_NONE = ICON_GAME_UNKNOWN = ICON_EMPTY; #else ICON_NONE = ICON_NOSTATE = ICON_RANK_NONE = ICON_GAME_UNKNOWN = -1; #endif ICON_WARNING_OVERLAY = Add(charArr2wxBitmap(warning_small_png, sizeof(warning_small_png) )); } IconImageList& icons() { static IconImageList m_icons; return m_icons; } int IconImageList::GetUserListStateIcon( const UserStatus& us, bool chanop, bool inbroom ) const { if ( us.bot ) { if ( us.in_game ) return ICON_BOT_INGAME; if ( inbroom ) return ICON_BOT_BROOM; if ( us.away ) return ICON_BOT_AWAY; return ICON_BOT; } if (us.moderator ) { if ( us.in_game ) return ICON_ADMIN_INGAME; if ( us.away ) return ICON_ADMIN_AWAY; if ( inbroom ) return ICON_ADMIN_BROOM; return ICON_ADMIN; } if ( chanop ) { if ( us.in_game ) return ICON_OP_INGAME; if ( us.away ) return ICON_OP_AWAY; if ( inbroom ) return ICON_OP_BROOM; return ICON_OP; } if ( us.in_game ) return ICON_INGAME; if ( us.away ) return ICON_AWAY; if ( inbroom ) return ICON_BROOM; return ICON_NOSTATE; } int IconImageList::GetUserBattleStateIcon( const UserStatus& us )const { if ( us.bot ) return ICON_BOT; if (us.moderator ) { if ( us.in_game ) return ICON_ADMIN_INGAME; if ( us.away ) return ICON_ADMIN_AWAY; return ICON_ADMIN; } if ( us.in_game ) return ICON_INGAME; if ( us.away ) return ICON_AWAY; return ICON_NOSTATE; } int IconImageList::GetRankIcon( const unsigned int& rank, const bool& showlowest )const { if ( !showlowest && rank == UserStatus::RANK_1 ) return ICON_RANK_NONE; switch (rank) { case UserStatus::RANK_1: return ICON_RANK1; case UserStatus::RANK_2: return ICON_RANK2; case UserStatus::RANK_3: return ICON_RANK3; case UserStatus::RANK_4: return ICON_RANK4; case UserStatus::RANK_5: return ICON_RANK5; case UserStatus::RANK_6: return ICON_RANK6; case UserStatus::RANK_7: return ICON_RANK7; case UserStatus::RANK_8: return ICON_RANK8; default: return ICON_RANK_UNKNOWN; } } int IconImageList::GetRankLimitIcon( int rank, bool showlowest )const { if ( !showlowest && rank == UserStatus::RANK_1 ) return ICON_RANK_NONE; if ( rank < UserStatus::RANK_1 ) { rank = -rank -1 + m_minimum_rank_requirement_border; } if ( rank > int(m_rank_requirements.size()) ) return ICON_RANK_UNKNOWN; return m_rank_requirements[rank]; } int IconImageList::GetFlagIcon( const wxString& flagname )const { return ICON_FLAGS_BASE + GetFlagIndex( flagname ); } int IconImageList::GetBattleStatusIcon( const IBattle& battle ) const { unsigned idx = battle.GetInGame() << 3 | battle.IsLocked() << 2 | battle.IsFull() << 1 | battle.IsPassworded() << 0; static const int icons[16] = { /* - */ ICON_OPEN_GAME, /* passworded */ ICON_OPEN_PW_GAME, /* full */ ICON_OPEN_FULL_GAME, /* full, passworded */ ICON_OPEN_FULL_PW_GAME, /* locked */ ICON_CLOSED_GAME, /* locked, passworded */ ICON_CLOSED_PW_GAME, /* locked, full */ ICON_CLOSED_FULL_GAME, /* locked, full, passworded */ ICON_CLOSED_FULL_PW_GAME, /* in game */ ICON_STARTED_GAME, /* in game, passworded */ ICON_STARTED_GAME, /* in game, full */ ICON_STARTED_GAME, /* in game, full, passworded */ ICON_STARTED_GAME, /* in game, locked */ ICON_STARTED_GAME_LOCKED, /* in game, locked, passworded */ ICON_STARTED_GAME_LOCKED, /* in game, locked, full */ ICON_STARTED_GAME_LOCKED, /* in game, locked, full, passworded */ ICON_STARTED_GAME_LOCKED, }; return icons[idx]; // return ICON_GAME_UNKNOWN; } wxString IconImageList::GetBattleStatus( const IBattle& battle ) const { unsigned idx = battle.GetInGame() << 3 | battle.IsLocked() << 2 | battle.IsFull() << 1 | battle.IsPassworded() << 0; static const wxString states[16] = { /* - */ _("Game is open."), /* passworded */ _("Game is password-protected."), /* full */ _("Game is full."), /* full, passworded */ _("Game is full and password-protected."), /* locked */ _("Game is closed."), /* locked, passworded */ _("Game is closed and password-protected."), /* locked, full */ _("Game is closed and full."), /* locked, full, passworded */ _("Game is closed, full and password-protected."), /* in game */ _("Game is in progress."), /* in game, passworded */ _("Game is in progress and password-protected."), /* in game, full */ _("Game is in progress and full."), /* in game, full, passworded */ _("Game is in progress, full and password-protected."), /* in game, locked */ _("Game is in progress and closed."), /* in game, locked, passworded */ _("Game is in progress, closed and password-protected."), /* in game, locked, full */ _("Game is in progress, closed and full."), /* in game, locked, full, passworded */ _("Game is in progress, closed, full and password-protected."), }; return states[idx]; // return _T("Game has unknown status"); } wxString getColourIconKey( const wxColour& colour ) { return colour.GetAsString(wxC2S_HTML_SYNTAX).AfterFirst('#'); } int IconImageList::GetColourIcon( const wxColour& colour ) const { const wxString key = getColourIconKey(colour); PlayerColourMap::const_iterator it = m_player_colour_icons.find( key ); if ( it != m_player_colour_icons.end() && it->second != 0 ) return it->second; else return -1; } int IconImageList::GetHostIcon( const bool& spectator ) const { return spectator?ICON_HOST_SPECTATOR:ICON_HOST; } void IconImageList::SetColourIcon( const wxColour& colour ) { const wxString key = getColourIconKey(colour); if ( m_player_colour_icons.find( key ) == m_player_colour_icons.end() ) m_player_colour_icons[key] = Add( getColourIcon(colour) ); } int IconImageList::GetSideIcon( const wxString& modname, int side ) { wxArrayString sides = usync().GetSides( modname ); wxString sidename; if( side < (int)sides.GetCount() ) sidename = sides[side]; wxString cachestring = modname + _T("_") + sidename; if (m_cached_side_icons.find(cachestring) == m_cached_side_icons.end()){ try { int IconPosition = Add(wxBitmap( usync().GetSidePicture( modname , sidename ) ), wxNullBitmap); m_cached_side_icons[cachestring] = IconPosition; return IconPosition; } catch (...) { if ( side == 0 ) m_cached_side_icons[cachestring] = ICON_SIDEPIC_0; else m_cached_side_icons[cachestring] = ICON_SIDEPIC_1; } } return m_cached_side_icons[cachestring]; } int IconImageList::GetReadyIcon( const bool& spectator,const bool& ready, const unsigned int& sync, const bool& bot ) { int index; if ( bot ) index = ICON_BOT; else if ( spectator ) index = ICON_SPECTATOR; else if ( ready ) index = ICON_READY; else index = ICON_NREADY; if ( sync == SYNC_SYNCED ) //could this cause #674 ?? return index; else { if ( m_state_index_map.find(index) == m_state_index_map.end() ) { wxBitmap bg; if ( index == ICON_NREADY ) bg = charArr2wxBitmap(closed_game_png, sizeof(closed_game_png) ); // ICON_NREADY else if ( index == ICON_READY ) bg = charArr2wxBitmap(open_game_png, sizeof(open_game_png) ); // ICON_READY else if ( index == ICON_SPECTATOR ) bg = charArr2wxBitmap( spectator_png, sizeof(spectator_png) ); // ICON_SPECTATOR else bg = wxBitmap(bot_xpm); // ICON_BOT m_state_index_map[index] = Add( BlendBitmaps( bg, charArr2wxBitmap(warning_small_png, sizeof(warning_small_png) ) ) ); } return m_state_index_map[index]; } } springlobby-0.169/src/iconimagelist.h0000600000176000000410000000712712105760300021215 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_ICONIMAGELIST_H #define SPRINGLOBBY_HEADERGUARD_ICONIMAGELIST_H #include #include #include class IBattle; class wxColour; struct UserStatus; class IconImageList : public wxImageList { public: IconImageList(); int GetUserListStateIcon( const UserStatus& us, bool chanop, bool inbroom ) const; int GetUserBattleStateIcon( const UserStatus& us ) const; int GetRankLimitIcon( int rank, bool showlowest = true ) const; int GetRankIcon( const unsigned int& rank, const bool& showlowest = true ) const; int GetFlagIcon( const wxString& flagname ) const; int GetBattleStatusIcon( const IBattle& battle ) const; wxString GetBattleStatus(const IBattle& battle) const; int GetHostIcon( const bool& spectator = false ) const; int GetColourIcon( const wxColour& colour ) const; void SetColourIcon( const wxColour& colour ); int GetSideIcon( const wxString& modname, int side ); int GetReadyIcon( const bool& spectator, const bool& ready, const unsigned int& sync, const bool& bot ); int ICON_NONE; int ICON_ADMIN; int ICON_ADMIN_AWAY; int ICON_ADMIN_BROOM; int ICON_ADMIN_INGAME; int ICON_BOT; int ICON_BOT_BROOM; int ICON_BOT_INGAME; int ICON_BOT_AWAY; int ICON_NOSTATE; int ICON_AWAY; int ICON_BROOM; int ICON_INGAME; int ICON_OP; int ICON_OP_AWAY; int ICON_OP_BROOM; int ICON_OP_INGAME; int ICON_UP; int ICON_DOWN; int ICON_RANK_NONE; int ICON_RANK_UNKNOWN; int ICON_RANK1; int ICON_RANK2; int ICON_RANK3; int ICON_RANK4; int ICON_RANK5; int ICON_RANK6; int ICON_RANK7; int ICON_RANK8; int ICON_GAME_UNKNOWN; int ICON_OPEN_GAME; int ICON_OPEN_PW_GAME; int ICON_OPEN_FULL_PW_GAME; int ICON_OPEN_FULL_GAME; int ICON_CLOSED_GAME; int ICON_CLOSED_PW_GAME; int ICON_CLOSED_FULL_PW_GAME; int ICON_CLOSED_FULL_GAME; int ICON_STARTED_GAME; int ICON_STARTED_GAME_LOCKED; int ICON_READY_UNSYNC; int ICON_NREADY_UNSYNC; int ICON_READY_QSYNC; int ICON_NREADY_QSYNC; int ICON_NREADY; int ICON_READY; int ICON_NEXISTS; int ICON_EXISTS; int ICON_SPECTATOR; int ICON_HOST; int ICON_HOST_SPECTATOR; int ICON_SIDEPIC_0; int ICON_SIDEPIC_1; //int ICON_FIXCOLOURS_PALETTE; int ICON_UNK_FLAG; int ICON_FLAGS_BASE; int ICON_WARNING_OVERLAY; int ICON_CHANNEL_OPTIONS; int ICON_EMPTY; protected: std::map m_cached_side_icons; // why map? because i already included and didn't want to include more stuff, it's not time-critical code anyway typedef std::map PlayerColourMap; PlayerColourMap m_player_colour_icons; std::vector m_rank_requirements; int m_minimum_rank_requirement_border; typedef std::map IndexMap; IndexMap m_state_index_map; }; IconImageList& icons(); #endif // SPRINGLOBBY_HEADERGUARD_ICONIMAGELIST_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/images/SpringLobby.ico0000600000176000000410000005205612105760300022411 0ustar buildbotwww-data00000000000000(6  ^@@ (B( =E323Cd 0 0 0 0ppppwwpp?3( @ KVDKT`LT}uITo#>DdsKW.27=. HQes7>b4'')&OWvL7<. R]IxTM6&, gusg}]V@7/, BKbl`VO7*14@b[ww|o`VQN[ DM /w 2|Sq&2/zpoY */ #'5. kur{PVDVf s Ns/67&+ lysOe # 25vcYLF&, Jf (2?:?SYjxYwZJkUL4:+ $$Zj}d&9R bed":<6gkrhVL4&,%/DT`o]VMF/ Xjjok}~ %5^&9P[lfms???? ??(@ >\ Q rZ(-p}n{28 =).{7>s-3 {,).U+0CL@39Q[tKT@H]hy4; V(,FO#' p~ .t'+(  %*.4PY .1' Ze%)htD}.(!6<ly&+  ZR@6/)"BJ4;ihFKbYC<6/)"coqPk\ID<6/)"@Gvs_QJD=70*"@G"{dWQJD=70*#er,1< i^WQJD=70*#  ?GZ "$me_XRKE>71*# Q[uV`9!23rle_XRKE>71*$ iv!"|sle_XRKE>71*$ Xc  zslf_YRKE?3}p|  BKu  kzslf_YRLE"~@F@Fhs% /5=Qw^  l~ zslf_YRKLS@F@FBI)% !oD[I l~~'9ztmg`YPGMAF@F@F.+% ~eqp~|~8Km7 i~~~Oi6BCpPig`Z)t}AFAF_g93,% >F>F>F>E>ES^'8~~~-;W( o~~x#%%MRmg`M"_gV]8@93,& zdqq~=ENi~~~|"-Bu~~) mnh`YQMF@93,&  w~~~~y!00oF].455[_Lunha[TMG@:3,& y .~~~~~~u! iw l tunha[TMG@:3-&   c~~~~~~~[yK#Z025%+5m}~zre>15 Tp~~~~~~~Vs vx}p PcewaBz*- D[}~~~~~~~~yPBIW4=M !Nh{~~~~~~~~~~#/DVFKSM07DQ`~5@V")8"  "1'4L7Jl`"1 ;Nrn~~~~~~~~LeBBBIKPJ6~~~To%r$0FZy~~~~~~r<⇇KLLG(-5{GE\u~~~~ /HHHD*K` /?\e~~AWa CCC@ #( y]!0Pjd(=HVo 3 w:^s?FUD|03:s -uvy !#d{|~G ??0? ??springlobby-0.169/src/images/admin.png.h0000600000176000000410000001035412105760300021502 0ustar buildbotwww-data00000000000000/* admin.png - 665 bytes */ static const unsigned char admin_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1e, 0x13, 0x13, 0x28, 0x3d, 0xc5, 0x46, 0xcf, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0x0e, 0x17, 0x00, 0x00, 0x01, 0xf4, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x8d, 0x53, 0x4b, 0x68, 0x13, 0x51, 0x14, 0x3d, 0x23, 0x5d, 0xcc, 0x0b, 0x3a, 0x3c, 0x41, 0x27, 0x66, 0x0c, 0x7e, 0xa0, 0xd8, 0x14, 0x82, 0xf5, 0x83, 0xd8, 0xce, 0xc2, 0xa4, 0x76, 0xa7, 0x6d, 0x15, 0x75, 0x61, 0xa1, 0xb8, 0x14, 0x09, 0x34, 0x15, 0x1b, 0xba, 0x90, 0x42, 0x45, 0xba, 0x9c, 0x42, 0x75, 0x11, 0xd3, 0x2e, 0x94, 0x8a, 0xa0, 0x58, 0x15, 0xcd, 0x60, 0xc0, 0x8d, 0x89, 0x56, 0x6a, 0x15, 0x42, 0xc6, 0xd0, 0x36, 0x8d, 0x86, 0xa0, 0xa0, 0x1d, 0x1b, 0x04, 0x9f, 0x29, 0xe4, 0x4d, 0x11, 0x89, 0x1b, 0x33, 0xa8, 0xd0, 0x74, 0xde, 0xf6, 0xde, 0x73, 0xee, 0x3d, 0xe7, 0xdc, 0x27, 0xc0, 0xe1, 0xd3, 0xa3, 0xda, 0x52, 0xe2, 0xee, 0x6d, 0x0f, 0xb7, 0x38, 0x88, 0x48, 0x70, 0x63, 0x3a, 0x2b, 0x00, 0xc0, 0x06, 0x27, 0xe0, 0x97, 0xf7, 0x27, 0x63, 0x0f, 0x6f, 0x8d, 0xe3, 0x50, 0xe0, 0x28, 0x88, 0x48, 0xb0, 0x7d, 0xe7, 0x2e, 0xbb, 0x26, 0x38, 0x21, 0x18, 0xe9, 0xed, 0xae, 0x02, 0x40, 0x21, 0x9f, 0x43, 0x63, 0x53, 0x73, 0x6a, 0xe8, 0x4e, 0xbc, 0x7d, 0xa4, 0xb7, 0xbb, 0x5a, 0x66, 0x0c, 0x0d, 0x4e, 0x08, 0x44, 0x97, 0x0b, 0x56, 0xa5, 0x02, 0x00, 0xd8, 0xb3, 0x77, 0x3f, 0x06, 0x3b, 0x59, 0xb2, 0x90, 0xcf, 0x39, 0xdb, 0xe0, 0xf3, 0xe2, 0xdc, 0x95, 0xeb, 0x91, 0xd0, 0xb0, 0x44, 0x29, 0x6a, 0x5b, 0x00, 0x00, 0x11, 0x09, 0xd6, 0xf5, 0x60, 0x56, 0x9f, 0x4a, 0xf6, 0x9f, 0x39, 0x36, 0x2c, 0x51, 0x0a, 0xd1, 0xe5, 0x42, 0x99, 0x31, 0xbb, 0xc6, 0x2d, 0x6e, 0xf6, 0xf4, 0x0d, 0x8c, 0x0b, 0x75, 0x5c, 0x4f, 0x4e, 0x27, 0xe2, 0x41, 0x59, 0x51, 0x00, 0x00, 0x73, 0x99, 0x34, 0x56, 0xf8, 0x2a, 0x8e, 0x9f, 0x3c, 0x95, 0xd9, 0xaa, 0x78, 0xdf, 0x77, 0x85, 0x22, 0x67, 0xd7, 0x94, 0x70, 0x73, 0xe8, 0x62, 0xf2, 0xe9, 0xe3, 0x47, 0xc1, 0x36, 0x55, 0xb5, 0xc1, 0xb2, 0xdb, 0x93, 0x0a, 0x6b, 0xd1, 0xf3, 0x5e, 0x9f, 0xff, 0xc3, 0xdf, 0xbd, 0xc2, 0x1f, 0x9d, 0x07, 0x8a, 0xd9, 0xf4, 0x28, 0x00, 0x63, 0xe1, 0xed, 0xeb, 0x7d, 0xef, 0xde, 0xcc, 0x04, 0x5b, 0x0e, 0xab, 0xf8, 0xf6, 0x75, 0x09, 0x85, 0x7c, 0x0e, 0xb2, 0xdb, 0x63, 0x86, 0xb5, 0xe8, 0x6e, 0xaf, 0xcf, 0xbf, 0xfa, 0xff, 0x30, 0x61, 0x56, 0x9f, 0x3a, 0x17, 0xbb, 0x7a, 0x79, 0x92, 0x88, 0x04, 0xa5, 0xef, 0x0c, 0xf2, 0x66, 0x8a, 0x1a, 0x38, 0x63, 0x18, 0x68, 0x53, 0x55, 0x33, 0x32, 0x71, 0x4f, 0x59, 0x4b, 0xaa, 0x30, 0xd8, 0x79, 0xa4, 0x5a, 0xd3, 0x69, 0x55, 0x2a, 0xd8, 0xb2, 0x4d, 0x41, 0x71, 0x71, 0x01, 0xa5, 0x65, 0x13, 0xad, 0x81, 0x8e, 0xd4, 0x05, 0x2d, 0xd6, 0x5e, 0xcf, 0xe8, 0x86, 0x95, 0x1f, 0x0c, 0x12, 0xa5, 0x28, 0x33, 0x86, 0xd2, 0xb2, 0x89, 0x2f, 0x9f, 0x3e, 0x82, 0x5b, 0x1c, 0x8d, 0x4d, 0xcd, 0xeb, 0x82, 0xed, 0x18, 0x33, 0x86, 0x81, 0xb0, 0x16, 0x1d, 0x6b, 0x0d, 0x74, 0x8c, 0x71, 0x8b, 0x03, 0xc0, 0x3f, 0x91, 0xd5, 0x25, 0xe8, 0xe9, 0x1b, 0xc0, 0xb5, 0x07, 0x89, 0x83, 0xc5, 0x6c, 0x1a, 0x71, 0x5d, 0x87, 0xec, 0xf6, 0x00, 0x00, 0x24, 0x4a, 0x25, 0x27, 0x04, 0x76, 0x8c, 0xa7, 0xfd, 0x3b, 0xaa, 0xf6, 0x91, 0xfc, 0xfc, 0x85, 0x89, 0x27, 0xcf, 0x4e, 0x78, 0x7d, 0xfe, 0xb8, 0x63, 0x82, 0xf9, 0x57, 0xcf, 0x2f, 0xcd, 0xcf, 0xbc, 0x18, 0x25, 0x1b, 0x37, 0xa1, 0x2b, 0x14, 0x11, 0x9c, 0x7e, 0xf3, 0xdf, 0x58, 0xac, 0xbe, 0x71, 0x01, 0xfa, 0xb1, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/admin_away.png.h0000600000176000000410000001460012105760300022521 0ustar buildbotwww-data00000000000000/* admin_away.png - 1008 bytes */ static const unsigned char admin_away_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1e, 0x13, 0x13, 0x38, 0x20, 0x72, 0x56, 0xab, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0x0e, 0x17, 0x00, 0x00, 0x03, 0x4b, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x8d, 0x93, 0xdd, 0x6f, 0x53, 0x75, 0x1c, 0xc6, 0x9f, 0xf3, 0xb2, 0x9d, 0x97, 0x76, 0xed, 0x69, 0xbb, 0x32, 0xd6, 0x53, 0x28, 0x43, 0x99, 0x50, 0xa6, 0x23, 0xce, 0xa0, 0x10, 0x0a, 0x13, 0x30, 0x18, 0x0c, 0xa6, 0x89, 0xa8, 0xb0, 0x88, 0xbb, 0xc2, 0x18, 0x09, 0x51, 0xc4, 0x3f, 0x41, 0x50, 0x89, 0xde, 0x68, 0x82, 0x77, 0x9a, 0x60, 0x36, 0xeb, 0x8c, 0x62, 0x32, 0x20, 0xdb, 0x90, 0x22, 0x9b, 0x9b, 0x65, 0xac, 0x59, 0xe9, 0xc6, 0x9b, 0x65, 0xac, 0xed, 0x68, 0x9d, 0xb4, 0x5b, 0x5f, 0xd6, 0x9e, 0xd3, 0xb7, 0x73, 0x7e, 0x5e, 0x18, 0x07, 0xf1, 0x8a, 0xe7, 0xfa, 0xfb, 0x7c, 0x92, 0xef, 0xf7, 0xfb, 0x3c, 0x14, 0x1e, 0x53, 0xfd, 0xa7, 0x3f, 0x4f, 0x5e, 0xf8, 0xfe, 0x4c, 0xb3, 0x5a, 0x52, 0x21, 0xf0, 0x02, 0xbe, 0x1e, 0x09, 0x53, 0x00, 0xc0, 0xfe, 0x7f, 0xf0, 0xb2, 0xef, 0x54, 0x2b, 0xc7, 0x14, 0x5e, 0xe6, 0xf8, 0x8a, 0x93, 0xa9, 0x63, 0x38, 0xad, 0x46, 0xa0, 0x14, 0xb9, 0xed, 0xc3, 0x03, 0x83, 0xe2, 0xf3, 0x3b, 0x77, 0xe1, 0xaa, 0xff, 0x12, 0x64, 0xd7, 0x1a, 0x60, 0x24, 0x0c, 0x00, 0xa0, 0x1e, 0x35, 0x0f, 0xf7, 0x9d, 0x7c, 0x53, 0x92, 0xf2, 0x5b, 0x2d, 0x2e, 0x2f, 0xc3, 0x99, 0xec, 0xe0, 0x44, 0x0b, 0x08, 0xd1, 0x71, 0x6d, 0xe0, 0xe7, 0x23, 0x4a, 0x76, 0x1e, 0xd1, 0x9b, 0x7f, 0x80, 0x10, 0x73, 0xf8, 0x83, 0xaf, 0x7c, 0xed, 0x1f, 0xbf, 0xf5, 0x2a, 0xc9, 0x67, 0xb3, 0x0f, 0x01, 0xbf, 0xf9, 0x4e, 0xec, 0x77, 0x3e, 0x69, 0xed, 0xb4, 0xba, 0xf6, 0x22, 0xa5, 0x34, 0x60, 0x6a, 0x26, 0x87, 0x07, 0x19, 0x05, 0x35, 0x8d, 0x80, 0x4b, 0x85, 0x8e, 0xd8, 0x25, 0x06, 0xd5, 0x4c, 0x04, 0x3c, 0xb5, 0x98, 0x08, 0x5f, 0xfd, 0x33, 0x3d, 0x73, 0x2b, 0xd2, 0xbe, 0xbc, 0xc2, 0xe0, 0x77, 0x9f, 0x3e, 0x61, 0x34, 0xa4, 0x3d, 0xd2, 0xaa, 0x2e, 0x4c, 0xdf, 0xaf, 0x43, 0x3a, 0x9b, 0xc3, 0xa6, 0x75, 0x56, 0x48, 0xa6, 0x46, 0x68, 0xe5, 0xd2, 0xe6, 0xb1, 0x41, 0x0a, 0xc9, 0x85, 0x32, 0x38, 0xd6, 0x85, 0x5a, 0x49, 0x95, 0x69, 0x5a, 0x95, 0x4d, 0x92, 0x19, 0xd5, 0x52, 0xe5, 0x5f, 0x00, 0xa3, 0x67, 0xf6, 0x98, 0x9d, 0xbb, 0x98, 0x94, 0x6a, 0xc2, 0xfc, 0x62, 0x0e, 0xaf, 0xef, 0x6c, 0x41, 0x26, 0x97, 0x43, 0x22, 0x7e, 0xcf, 0x3b, 0x3b, 0x35, 0x29, 0x37, 0x35, 0x35, 0x62, 0xa5, 0xcc, 0x62, 0x78, 0x3c, 0x06, 0x0b, 0xd7, 0x0c, 0xb3, 0xdd, 0x82, 0x5c, 0xae, 0x94, 0xdd, 0x7f, 0xf8, 0xe8, 0x0f, 0x34, 0x00, 0xd0, 0x94, 0xe2, 0x34, 0x58, 0x9d, 0x08, 0xde, 0x59, 0x44, 0x5b, 0xab, 0x0d, 0x4a, 0x8d, 0x60, 0x71, 0x2e, 0xea, 0x3d, 0xe7, 0xeb, 0x91, 0xcd, 0x92, 0x04, 0x0a, 0xc0, 0xe8, 0xc8, 0x28, 0x44, 0x5e, 0x87, 0xca, 0xcb, 0xa9, 0xe7, 0x76, 0xef, 0x8b, 0xac, 0x73, 0x3b, 0xbe, 0xdc, 0xfe, 0x46, 0xf7, 0xbb, 0x34, 0x00, 0x10, 0x42, 0x04, 0xde, 0x60, 0x41, 0x32, 0xad, 0xc0, 0x66, 0x13, 0x70, 0xf7, 0x7a, 0xd0, 0x7b, 0x6b, 0x2a, 0x24, 0x97, 0x2b, 0x65, 0xdc, 0xbe, 0x13, 0x41, 0x6f, 0x4f, 0x2f, 0x56, 0x38, 0xe4, 0xc4, 0x8b, 0x87, 0xba, 0x7b, 0x62, 0xba, 0xb3, 0xcf, 0xd1, 0xea, 0x1e, 0x62, 0x40, 0x99, 0x1e, 0xbe, 0x91, 0x12, 0x56, 0x64, 0xfe, 0x9a, 0xdb, 0x21, 0x68, 0x95, 0xf4, 0x6c, 0x68, 0xa2, 0x31, 0x15, 0x8f, 0xca, 0x92, 0x7d, 0x25, 0x58, 0x9a, 0xc1, 0x74, 0x68, 0x12, 0x9b, 0xb7, 0x79, 0x94, 0x3d, 0xdd, 0xef, 0xf4, 0xc7, 0xf3, 0x35, 0xad, 0x5a, 0xd5, 0x41, 0xf4, 0x0a, 0x88, 0x4e, 0x00, 0x00, 0x6c, 0xa0, 0xff, 0xc7, 0xb7, 0xfd, 0x67, 0x4f, 0x77, 0x65, 0xf2, 0x3c, 0xe6, 0x62, 0xbc, 0x2c, 0x28, 0xcd, 0xd8, 0xb0, 0xbe, 0x05, 0xca, 0x52, 0x1e, 0xbc, 0x68, 0x84, 0xf7, 0x40, 0x97, 0xb2, 0xf1, 0xa5, 0x57, 0xbe, 0x2d, 0x96, 0x81, 0xb9, 0xf9, 0x22, 0x4c, 0x06, 0x1a, 0x99, 0xc4, 0x75, 0x94, 0x6a, 0x5a, 0x01, 0x00, 0x18, 0xeb, 0xd2, 0xdf, 0x21, 0xbb, 0x43, 0x86, 0x41, 0x24, 0x70, 0xb8, 0xd6, 0x23, 0x55, 0x32, 0x40, 0x12, 0x2b, 0x28, 0x15, 0x0a, 0xe8, 0x78, 0x61, 0x6b, 0x62, 0xa3, 0xa7, 0xd3, 0x47, 0x13, 0x80, 0xad, 0x03, 0x7e, 0xba, 0x18, 0xc7, 0x8e, 0xa7, 0x2a, 0x58, 0x08, 0xf5, 0x61, 0x21, 0x8b, 0xdb, 0x03, 0x63, 0x37, 0x27, 0xd9, 0xa5, 0x5c, 0x16, 0x4b, 0x19, 0x1b, 0xaa, 0xe5, 0x3c, 0x9a, 0xc0, 0x40, 0x53, 0x57, 0xc1, 0x3f, 0x4a, 0xc3, 0xb3, 0xc5, 0x9d, 0x68, 0x71, 0x6f, 0xfa, 0x05, 0x6a, 0x15, 0xf1, 0x07, 0x45, 0x9c, 0x0b, 0xcc, 0x63, 0xb5, 0x90, 0x86, 0x5d, 0xbd, 0x8c, 0xb1, 0x99, 0x62, 0x95, 0x12, 0xed, 0xbf, 0x2e, 0xdf, 0x20, 0x38, 0x11, 0xc4, 0xf1, 0xcf, 0x3e, 0x39, 0x1b, 0x09, 0x9e, 0x5f, 0xdb, 0xcc, 0x97, 0xdb, 0x8d, 0xbc, 0x0b, 0x13, 0xa1, 0x18, 0x86, 0x63, 0xd7, 0xa0, 0xe9, 0x04, 0x0d, 0x22, 0xb0, 0xc5, 0x4d, 0xd0, 0x58, 0x1e, 0xc2, 0xf8, 0xd0, 0x38, 0xaa, 0xf5, 0xb6, 0x8b, 0xc7, 0x4e, 0x7c, 0x13, 0x03, 0x00, 0xf6, 0xe0, 0xd1, 0xe3, 0x58, 0xfb, 0x4c, 0x47, 0xc7, 0xbd, 0x70, 0xf0, 0x50, 0x20, 0x70, 0x97, 0x5a, 0xe3, 0xb0, 0xb4, 0xd7, 0x0b, 0x33, 0x78, 0xb6, 0xed, 0xe9, 0xfa, 0x36, 0x4f, 0x03, 0x40, 0x6a, 0x58, 0xb8, 0x1f, 0x41, 0x34, 0x30, 0x8d, 0x48, 0x52, 0xaf, 0x54, 0x59, 0xeb, 0xa5, 0x63, 0xa7, 0x7a, 0x2f, 0xfc, 0x97, 0xe0, 0xe5, 0x28, 0xbf, 0xd6, 0xb6, 0x9a, 0x00, 0x00, 0x2f, 0xf0, 0x10, 0xcd, 0x22, 0x3a, 0x77, 0x6f, 0xeb, 0xcb, 0xa7, 0x63, 0x49, 0x00, 0xa8, 0xe9, 0x54, 0x41, 0xa3, 0xd9, 0x59, 0xaa, 0xde, 0xe8, 0x7f, 0xff, 0xe4, 0x99, 0xe8, 0xa3, 0xfd, 0x59, 0x06, 0xdc, 0xf8, 0xdd, 0xff, 0xe1, 0x8d, 0xb1, 0x2b, 0x5f, 0x08, 0xc6, 0x06, 0xec, 0x7b, 0xef, 0x23, 0xea, 0x71, 0x6b, 0xfe, 0x0f, 0x0d, 0x4d, 0x69, 0x00, 0x68, 0x29, 0x4a, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; /* End Of File */ springlobby-0.169/src/images/admin_broom.png.h0000600000176000000410000001470312105760300022702 0ustar buildbotwww-data00000000000000/* admin_broom.png - 1018 bytes */ static const unsigned char admin_broom_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1e, 0x13, 0x14, 0x24, 0x7b, 0x32, 0x9c, 0x23, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0x0e, 0x17, 0x00, 0x00, 0x03, 0x55, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x75, 0x92, 0x7b, 0x50, 0x13, 0x04, 0x1c, 0xc7, 0x3f, 0x7b, 0xc5, 0xc6, 0x81, 0x4d, 0xdd, 0x06, 0xcc, 0x01, 0x43, 0x60, 0x24, 0x78, 0xc5, 0x6b, 0x48, 0xb6, 0xf3, 0x91, 0x5c, 0x70, 0x05, 0x64, 0x12, 0x9d, 0x85, 0x8f, 0xbb, 0x8e, 0x3f, 0xcc, 0xea, 0x0f, 0x09, 0xbc, 0xe5, 0x51, 0x47, 0x57, 0xd7, 0x5b, 0xcf, 0xbc, 0x53, 0xb3, 0xb3, 0x33, 0x3c, 0x4f, 0x4d, 0xa4, 0x12, 0x3a, 0x4e, 0x3b, 0xdd, 0x94, 0x60, 0x0a, 0x44, 0x3c, 0x8a, 0x0d, 0x26, 0x20, 0x95, 0x30, 0x36, 0x09, 0xb7, 0x60, 0x0f, 0x71, 0xb0, 0xfe, 0x28, 0x88, 0xeb, 0xea, 0xfb, 0xd7, 0xef, 0xee, 0xf7, 0xfa, 0xfc, 0x1e, 0x82, 0x6d, 0x2f, 0x96, 0x9b, 0x94, 0x31, 0x2b, 0x08, 0x93, 0x86, 0x01, 0x54, 0xbc, 0xff, 0xc6, 0xbe, 0x6e, 0xfe, 0x43, 0x8d, 0x47, 0x3e, 0x1e, 0x6b, 0x3a, 0x73, 0x32, 0xc6, 0x1f, 0xf0, 0x23, 0x93, 0xca, 0x38, 0xfa, 0x7d, 0xaf, 0x00, 0x40, 0xe8, 0xf6, 0x78, 0xa8, 0xac, 0xaa, 0xa2, 0xb8, 0xb8, 0x08, 0xe0, 0x80, 0xf1, 0xed, 0x77, 0xd3, 0xff, 0x9d, 0xdc, 0x7c, 0xae, 0xf6, 0xd3, 0xfa, 0x13, 0xc7, 0xd0, 0xaf, 0x7f, 0x1c, 0x99, 0x54, 0xc6, 0x8a, 0x78, 0xed, 0x82, 0x4f, 0xa4, 0x4b, 0x4d, 0xdb, 0x99, 0x9d, 0x93, 0x8b, 0x46, 0x13, 0x8b, 0x4a, 0xa5, 0x60, 0x60, 0xc0, 0x9e, 0x6f, 0xd8, 0xb8, 0x69, 0xb2, 0xd5, 0x6c, 0xb2, 0xcf, 0x07, 0x25, 0x86, 0xcd, 0x35, 0x2e, 0x53, 0x28, 0x23, 0xbb, 0xda, 0x2c, 0x68, 0x13, 0x93, 0xaf, 0x56, 0x9f, 0x6a, 0x48, 0x78, 0x67, 0x5b, 0x71, 0x28, 0x3b, 0x2e, 0xaa, 0x46, 0x08, 0x54, 0xd4, 0x54, 0xbf, 0xce, 0xed, 0xd1, 0x51, 0x12, 0x12, 0x12, 0xd9, 0xfe, 0x42, 0x19, 0x02, 0x81, 0x60, 0xcf, 0x62, 0x12, 0x69, 0x78, 0xf8, 0x42, 0x47, 0xdd, 0xc3, 0x19, 0xec, 0x2d, 0x5c, 0x67, 0x1e, 0x1c, 0xb0, 0xe1, 0x72, 0x3a, 0x10, 0xd9, 0x6d, 0xd6, 0x71, 0x5d, 0x6a, 0xda, 0x64, 0xb3, 0xd9, 0xf4, 0xa8, 0x36, 0x29, 0x99, 0x78, 0xad, 0x96, 0x80, 0xcf, 0xcb, 0xb8, 0xd3, 0x99, 0x6f, 0xd8, 0xb8, 0xa9, 0xe7, 0xcb, 0xa3, 0x87, 0x76, 0x99, 0xea, 0xcf, 0x6e, 0x08, 0x93, 0x4a, 0x59, 0xa6, 0x50, 0xd2, 0xd6, 0x6c, 0xd6, 0x7a, 0xbd, 0xd3, 0x5a, 0x99, 0x54, 0x86, 0x44, 0x2c, 0x41, 0x04, 0x60, 0xb7, 0x59, 0xed, 0xba, 0xd4, 0xb4, 0x9e, 0xf6, 0xeb, 0x96, 0x7c, 0x6d, 0x52, 0x32, 0x39, 0x39, 0x6b, 0xf0, 0xfb, 0x7d, 0xdc, 0x9b, 0xf2, 0x18, 0x4f, 0x7d, 0xf8, 0x56, 0x41, 0x6c, 0x74, 0x14, 0xd2, 0xf0, 0x70, 0x26, 0xef, 0xdc, 0xc1, 0xeb, 0x9d, 0x06, 0x20, 0x18, 0x0c, 0x3a, 0x76, 0xec, 0x31, 0x9e, 0x16, 0x2c, 0x5e, 0x56, 0x61, 0x49, 0x69, 0x3a, 0x70, 0xe0, 0x95, 0x8a, 0x4a, 0x56, 0x46, 0x2b, 0x33, 0xae, 0x5c, 0xfc, 0x56, 0x3e, 0x3a, 0xea, 0x20, 0xc2, 0xe3, 0xa0, 0xbf, 0xbd, 0x95, 0x29, 0xff, 0x3d, 0x9e, 0xda, 0xbc, 0xa5, 0x4b, 0xa9, 0xd6, 0xd8, 0x8b, 0x76, 0x57, 0x6e, 0x05, 0xfe, 0x22, 0x98, 0xd7, 0xdf, 0xe3, 0xf4, 0xd8, 0xbb, 0x3a, 0x8c, 0x22, 0xa1, 0x40, 0x9e, 0x9d, 0xa5, 0xc7, 0xef, 0xf7, 0x71, 0xeb, 0x77, 0x0f, 0x11, 0x72, 0x85, 0xdd, 0x1b, 0xfc, 0xe1, 0xa6, 0x6d, 0xa8, 0x65, 0xba, 0xc3, 0xf5, 0xe0, 0x17, 0x76, 0x9b, 0xd5, 0x06, 0x20, 0x06, 0xb8, 0xdd, 0xff, 0x73, 0xe6, 0x70, 0x6f, 0xe7, 0x7e, 0xa0, 0xdb, 0xda, 0x7e, 0x3d, 0xbd, 0xa3, 0xb3, 0x53, 0x7e, 0xed, 0x4a, 0x08, 0x42, 0x21, 0x52, 0x74, 0x29, 0x48, 0x44, 0x0f, 0xcc, 0xfc, 0x38, 0x38, 0xec, 0x38, 0x56, 0xe5, 0x9f, 0x73, 0x3a, 0xc0, 0xf8, 0x66, 0xdd, 0xcb, 0x40, 0x3d, 0x80, 0xf8, 0x46, 0x63, 0xdd, 0x8e, 0xea, 0xed, 0xcf, 0xd4, 0xca, 0xa4, 0x32, 0x5c, 0x77, 0xdd, 0x1b, 0x54, 0x4b, 0xe5, 0xe8, 0xd7, 0xac, 0xa5, 0xf7, 0x37, 0x27, 0x5f, 0x9f, 0x3f, 0xc7, 0xb3, 0x5b, 0xcb, 0x66, 0x92, 0x1f, 0xc9, 0x6c, 0x8d, 0x54, 0xc7, 0xde, 0xdf, 0xf5, 0xd1, 0xb8, 0xa4, 0xa6, 0xec, 0x38, 0xc1, 0xd9, 0x7f, 0xa8, 0x05, 0x7b, 0x0b, 0xd7, 0x85, 0x54, 0x6a, 0x35, 0x00, 0x01, 0x9f, 0x0f, 0x45, 0xb4, 0x9a, 0xe1, 0x7e, 0x2b, 0x2e, 0xa7, 0x03, 0x4d, 0xa6, 0xe1, 0xa7, 0xee, 0x89, 0xe9, 0x09, 0x75, 0x5c, 0x02, 0x05, 0xf9, 0x4f, 0xf0, 0x98, 0xe6, 0x49, 0xca, 0xcb, 0x67, 0x90, 0x88, 0xf9, 0xe6, 0xab, 0x16, 0x0e, 0x01, 0x08, 0xa7, 0x3c, 0x6e, 0x02, 0x3e, 0x1f, 0xae, 0xb1, 0x31, 0x06, 0x07, 0x6c, 0xf4, 0xb4, 0x59, 0x70, 0x39, 0x1d, 0x24, 0xa5, 0xac, 0xba, 0x7a, 0xd1, 0x7c, 0x62, 0x62, 0xe7, 0xda, 0x3a, 0xc6, 0x7e, 0xbd, 0x85, 0xea, 0x8f, 0x3c, 0x02, 0xde, 0x19, 0x4e, 0x7e, 0x0e, 0xc1, 0x59, 0x36, 0x6f, 0x31, 0x50, 0x02, 0x20, 0xd2, 0xc7, 0x47, 0xd5, 0x0c, 0x8d, 0x8c, 0x50, 0x73, 0xfc, 0xf4, 0x41, 0xdf, 0xe4, 0xc4, 0x8d, 0x91, 0x21, 0x7b, 0x2e, 0x80, 0x58, 0x2c, 0x19, 0xb9, 0xe9, 0xfa, 0x85, 0xd8, 0xe5, 0x90, 0xb4, 0xdc, 0xca, 0x07, 0x87, 0xc1, 0x33, 0x06, 0x7a, 0x83, 0x94, 0xf5, 0xb9, 0x41, 0x2e, 0x9b, 0xc9, 0x59, 0x15, 0x87, 0x4c, 0xf8, 0xfc, 0xab, 0xaf, 0xf1, 0xc9, 0xf9, 0xa6, 0xac, 0xe1, 0xde, 0x4e, 0x1a, 0x1a, 0x1b, 0x51, 0x45, 0xc5, 0x00, 0xb0, 0x44, 0x2e, 0x5f, 0xa2, 0x5e, 0xca, 0xe5, 0xb3, 0x97, 0xa0, 0xf6, 0x02, 0x28, 0xe4, 0x7c, 0xd7, 0x64, 0x81, 0x83, 0xef, 0x05, 0x98, 0x13, 0x42, 0x7a, 0x32, 0x00, 0xcf, 0x2d, 0xfc, 0x41, 0xc9, 0xea, 0xb8, 0xd0, 0xbc, 0xed, 0xbf, 0x3f, 0xcb, 0x67, 0x17, 0x2e, 0x3d, 0xad, 0x79, 0x68, 0x75, 0xc3, 0xe2, 0x33, 0xe7, 0x65, 0xf2, 0xd2, 0x84, 0x9b, 0xd2, 0x22, 0x03, 0xf4, 0x0d, 0x83, 0x7b, 0x0a, 0x16, 0x0a, 0xf4, 0xb5, 0x98, 0x2a, 0xfa, 0x2c, 0xd7, 0xf6, 0xcb, 0x22, 0x22, 0x29, 0xda, 0x5d, 0x29, 0xe0, 0x7f, 0x54, 0x90, 0xc5, 0xbe, 0xf1, 0xbb, 0xe4, 0x01, 0xc4, 0x66, 0x94, 0x1e, 0xfe, 0x13, 0xb7, 0xec, 0x55, 0x5c, 0x9e, 0xfc, 0x29, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/admin_ingame.png.h0000600000176000000410000001537512105760300023032 0ustar buildbotwww-data00000000000000/* admin_ingame.png - 1067 bytes */ static const unsigned char admin_ingame_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1e, 0x13, 0x23, 0x35, 0x81, 0x85, 0x1c, 0xe5, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0x0e, 0x17, 0x00, 0x00, 0x03, 0x86, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x7d, 0x93, 0x5b, 0x4c, 0x5b, 0x75, 0x00, 0x87, 0x7f, 0xe7, 0x52, 0x4e, 0x69, 0x8b, 0xf4, 0x7e, 0x61, 0xc5, 0x13, 0xca, 0x45, 0x58, 0xcb, 0x06, 0x38, 0x2d, 0x8e, 0xb9, 0xe9, 0xc4, 0x39, 0x33, 0x20, 0x6a, 0x24, 0x46, 0xeb, 0x25, 0x59, 0x4c, 0x96, 0xc5, 0x64, 0xf1, 0x01, 0x32, 0x43, 0x24, 0x66, 0x17, 0xd4, 0x19, 0x12, 0x35, 0x4e, 0xcd, 0x5e, 0x8c, 0x2f, 0xfa, 0x64, 0x7c, 0x21, 0x0a, 0xc1, 0x35, 0xf3, 0x32, 0x5a, 0x46, 0x64, 0x61, 0xb2, 0x96, 0x41, 0xd3, 0x8d, 0x4b, 0x4b, 0xdb, 0xb5, 0xa4, 0x3d, 0x1c, 0x4a, 0x2f, 0xe7, 0xf4, 0xfc, 0x7d, 0xf1, 0x69, 0x89, 0xfb, 0x9e, 0xbf, 0xef, 0xf1, 0xa3, 0xde, 0x3c, 0xf9, 0xee, 0x88, 0xc5, 0xb1, 0x07, 0x9c, 0x9a, 0x03, 0x80, 0x1f, 0x3e, 0x1d, 0x1d, 0x59, 0xc3, 0x43, 0xf8, 0xe0, 0xc2, 0xc7, 0x3c, 0x00, 0x5f, 0xa9, 0x58, 0x42, 0x3a, 0x11, 0x07, 0x9d, 0x13, 0x04, 0x0c, 0x0d, 0x0f, 0x63, 0x60, 0xa0, 0x1f, 0x00, 0x7c, 0xff, 0x09, 0x0f, 0x8d, 0x07, 0x06, 0xfa, 0x31, 0x34, 0x3c, 0x8c, 0x9c, 0x20, 0x80, 0x06, 0x80, 0x44, 0x22, 0x09, 0x9e, 0x6f, 0x40, 0x5f, 0xdf, 0x09, 0x10, 0x42, 0x7c, 0x67, 0xcf, 0x8f, 0x75, 0x3e, 0x18, 0x9f, 0x3d, 0x3f, 0xd6, 0x49, 0x08, 0xf1, 0xf5, 0xf5, 0x9d, 0x00, 0xcf, 0x37, 0x20, 0x91, 0x48, 0x02, 0x00, 0xc5, 0xb4, 0xec, 0x75, 0xaf, 0x87, 0x6e, 0xcc, 0xbc, 0xc6, 0xd7, 0x3b, 0x1d, 0xae, 0xa6, 0x16, 0x3c, 0xe6, 0x72, 0x71, 0xff, 0x84, 0xc3, 0xce, 0x43, 0x47, 0x9f, 0x5b, 0xbf, 0x7e, 0xcd, 0x2f, 0x4c, 0x7c, 0x33, 0x4e, 0xf1, 0xdd, 0xcf, 0xf0, 0x14, 0x45, 0xbd, 0xf2, 0xd6, 0x1b, 0x3e, 0x38, 0xf6, 0x38, 0x11, 0x8b, 0xc7, 0x71, 0xf1, 0xa3, 0x51, 0xfa, 0x68, 0xa7, 0x27, 0xc8, 0x3c, 0x6f, 0xab, 0x1a, 0xd2, 0xd0, 0x78, 0x75, 0x36, 0x30, 0xd3, 0x5e, 0xc8, 0x66, 0xda, 0xcc, 0x26, 0xa3, 0x9e, 0xe3, 0x38, 0x31, 0x71, 0x3f, 0xdd, 0x78, 0xec, 0xf0, 0xe1, 0x54, 0xba, 0x04, 0xab, 0x04, 0xe2, 0xdb, 0xe7, 0x69, 0xa7, 0x5a, 0xdd, 0x6e, 0xb2, 0x18, 0x0a, 0xe1, 0xc7, 0x2f, 0x3e, 0xe9, 0x6f, 0xd4, 0x55, 0xd5, 0x6b, 0x0a, 0xc2, 0x0b, 0xac, 0xa2, 0x90, 0xf7, 0xb4, 0x34, 0xa9, 0xd5, 0x72, 0x0c, 0x7d, 0xfd, 0x9a, 0x5f, 0x5b, 0x96, 0x25, 0xa6, 0x7d, 0x7f, 0x17, 0x23, 0x9a, 0x6a, 0xb2, 0xeb, 0xb1, 0xd8, 0xb3, 0x34, 0x64, 0xec, 0x6b, 0x6e, 0x46, 0x2b, 0xef, 0x2c, 0x25, 0x36, 0xd6, 0x76, 0x7e, 0xbe, 0x3c, 0xde, 0x6e, 0xa3, 0xcb, 0x2d, 0x72, 0x3a, 0x9d, 0xcf, 0x69, 0x34, 0x2a, 0x56, 0x67, 0xb2, 0xac, 0xe8, 0x8c, 0x66, 0xfd, 0x76, 0x26, 0xe5, 0xb4, 0x56, 0xb1, 0xda, 0xf9, 0xe0, 0x8c, 0x41, 0xc5, 0x30, 0xda, 0x6a, 0x8e, 0x53, 0x8a, 0xd9, 0x0c, 0x65, 0xac, 0x73, 0x50, 0x3a, 0x06, 0x64, 0xd6, 0x3f, 0x55, 0x99, 0x9f, 0x9b, 0x53, 0xcc, 0x54, 0x59, 0x47, 0x24, 0x19, 0xdb, 0xdb, 0x39, 0x95, 0x56, 0x96, 0x72, 0xcc, 0xe9, 0x93, 0x6f, 0xf3, 0x0e, 0xde, 0x95, 0xbc, 0x13, 0x89, 0x9a, 0xb7, 0x85, 0x25, 0x23, 0x47, 0x89, 0x94, 0x50, 0x50, 0x31, 0x3b, 0xf9, 0x3c, 0x63, 0xb3, 0x5a, 0xd9, 0xd6, 0xd6, 0x36, 0x26, 0x9b, 0xcd, 0xb2, 0x73, 0x81, 0x19, 0x96, 0x2d, 0xad, 0x71, 0x52, 0x39, 0x0d, 0x99, 0xaa, 0x55, 0x6a, 0x34, 0xea, 0x94, 0x5e, 0x6f, 0x98, 0x62, 0x0c, 0xc5, 0xec, 0xe5, 0xd5, 0x95, 0xe5, 0xca, 0x4e, 0x7e, 0xb9, 0xad, 0xa7, 0xbb, 0xac, 0x71, 0xef, 0x95, 0x4b, 0xab, 0x29, 0xbe, 0x68, 0xb7, 0x39, 0x88, 0xdd, 0x6e, 0x27, 0xd1, 0x68, 0x54, 0x0a, 0xfc, 0xf9, 0x07, 0xe1, 0xd4, 0xd5, 0x52, 0x6f, 0xf7, 0x1d, 0xc5, 0x66, 0xa9, 0xd0, 0xe1, 0xa5, 0x14, 0x4d, 0x4b, 0x2a, 0xa9, 0x54, 0x2c, 0x49, 0x6c, 0xad, 0xde, 0xe0, 0x4a, 0xc6, 0x63, 0xf5, 0xe0, 0x48, 0x0d, 0xcb, 0xd0, 0xc5, 0xc9, 0xbf, 0x9f, 0x5a, 0x3f, 0x78, 0xa4, 0x27, 0x62, 0x36, 0x99, 0xa9, 0x64, 0x26, 0xcd, 0x2d, 0xdc, 0x0e, 0x2b, 0xf5, 0xae, 0x26, 0xc6, 0xd5, 0xd8, 0x2c, 0x4d, 0x04, 0xf0, 0xc8, 0xf1, 0xce, 0xb9, 0x06, 0x85, 0x10, 0xbd, 0x90, 0x13, 0x0c, 0x2a, 0xd5, 0xae, 0x97, 0xf5, 0x74, 0x74, 0xcd, 0x8a, 0xf9, 0xbc, 0x79, 0xb7, 0x58, 0x36, 0xfc, 0x1e, 0xac, 0x88, 0x67, 0xde, 0xff, 0x6b, 0x7e, 0x95, 0x39, 0xb5, 0xfc, 0xeb, 0x55, 0x3f, 0xb5, 0xb9, 0x71, 0x0f, 0x84, 0x56, 0xcb, 0x5a, 0x5a, 0xa3, 0x7a, 0xa2, 0xa9, 0x8d, 0x1e, 0x3b, 0x72, 0x8e, 0xfe, 0x70, 0xa4, 0xc6, 0xe5, 0xa8, 0xe3, 0x4d, 0xb9, 0x98, 0xc8, 0x55, 0x57, 0x6b, 0x5a, 0x58, 0xbb, 0xb5, 0xee, 0x54, 0x99, 0xde, 0x7c, 0x9c, 0xd2, 0x55, 0x8e, 0x5d, 0x3c, 0xa7, 0xe4, 0x65, 0xb2, 0x95, 0x2a, 0xc6, 0x8e, 0x57, 0xe2, 0x1b, 0x83, 0x78, 0xe7, 0xe0, 0x4f, 0xb8, 0x74, 0x05, 0x00, 0x06, 0x25, 0xdb, 0xee, 0x8b, 0x90, 0xcb, 0xc0, 0xf8, 0x67, 0xe2, 0xd2, 0xe9, 0x33, 0x59, 0x8d, 0x56, 0x5d, 0x1b, 0xf2, 0x76, 0xf7, 0x6a, 0x99, 0xa2, 0x38, 0xdd, 0x51, 0x96, 0x45, 0xcf, 0x85, 0xd1, 0x42, 0x4e, 0x67, 0x54, 0xc4, 0x6f, 0x3f, 0x97, 0x94, 0xaf, 0xbe, 0x07, 0x5e, 0xf2, 0x86, 0xb1, 0x95, 0x01, 0x6e, 0x45, 0x80, 0x97, 0xbd, 0x61, 0x5c, 0xfa, 0x1a, 0x10, 0x36, 0x81, 0x27, 0x9f, 0xe6, 0x48, 0xcf, 0x81, 0x42, 0xf9, 0x97, 0xdf, 0x44, 0x7d, 0x2c, 0x19, 0x5e, 0x61, 0xda, 0x1e, 0xc5, 0xeb, 0x1d, 0xcd, 0x80, 0xbb, 0x93, 0x90, 0x2b, 0x5f, 0x4a, 0x98, 0x0c, 0x02, 0x16, 0x03, 0x16, 0x03, 0xb7, 0x60, 0x0b, 0x45, 0x01, 0xbd, 0x16, 0x98, 0x5d, 0x04, 0x2c, 0x7a, 0x2c, 0x2e, 0x44, 0x60, 0xdb, 0x5a, 0x95, 0xb1, 0xff, 0x00, 0xb0, 0xb5, 0x01, 0xc4, 0xee, 0x97, 0xec, 0x6c, 0x4e, 0x04, 0x16, 0x22, 0x80, 0xf4, 0x1d, 0x30, 0x19, 0x04, 0xcc, 0x7a, 0xdc, 0x98, 0x9e, 0x87, 0x1f, 0xc0, 0xc4, 0x83, 0x3f, 0xf4, 0x76, 0x61, 0x77, 0x32, 0x08, 0x2f, 0xcb, 0x00, 0xa1, 0xbb, 0x40, 0x4e, 0x04, 0x18, 0xcf, 0xa1, 0xc1, 0xd2, 0x5a, 0x24, 0xec, 0x5a, 0x59, 0x07, 0xec, 0x06, 0xdc, 0x9e, 0xbe, 0x89, 0xa9, 0xff, 0xbb, 0xf1, 0x6e, 0x02, 0xf7, 0x3a, 0x5c, 0x30, 0xdc, 0x5c, 0x81, 0x35, 0x2b, 0x02, 0x66, 0xf7, 0xe0, 0xd5, 0x7f, 0x01, 0x9a, 0xad, 0x8c, 0xd2, 0x70, 0x90, 0xfe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/arrow_refresh.png.h0000600000176000000410000001057212105760300023264 0ustar buildbotwww-data00000000000000/* arrow_refresh.png - 685 bytes */ static const unsigned char arrow_refresh_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xaf, 0xc8, 0x37, 0x05, 0x8a, 0xe9, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9, 0x65, 0x3c, 0x00, 0x00, 0x02, 0x3f, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x8d, 0x93, 0xdb, 0x4b, 0xd3, 0x61, 0x1c, 0xc6, 0x07, 0xfb, 0x33, 0x62, 0x76, 0xd0, 0x92, 0x42, 0xba, 0xb0, 0x42, 0xd6, 0x39, 0xcb, 0x64, 0x2d, 0x4f, 0x64, 0x06, 0xad, 0x36, 0x5f, 0xd7, 0x74, 0xe4, 0xa1, 0x81, 0x65, 0xce, 0xc5, 0x9a, 0xfe, 0xdc, 0xdc, 0xa1, 0x1d, 0xdc, 0x49, 0xcd, 0xb1, 0x61, 0x49, 0x46, 0x25, 0xfc, 0xc0, 0x68, 0x84, 0x65, 0xb5, 0x8d, 0x0d, 0xd7, 0x61, 0xf9, 0x23, 0xe8, 0xda, 0x3b, 0x11, 0xbc, 0x0d, 0xef, 0x9e, 0xbe, 0x1b, 0x5d, 0x38, 0xfd, 0x61, 0xbb, 0x78, 0x6f, 0xde, 0xc3, 0xf3, 0x3c, 0xef, 0xf3, 0xe1, 0x2b, 0x01, 0x20, 0xf9, 0xdf, 0xba, 0xf1, 0xbc, 0x71, 0xb0, 0x65, 0x5a, 0x21, 0x15, 0x3b, 0x93, 0x94, 0x22, 0xd0, 0x34, 0x55, 0x2f, 0x28, 0xc6, 0x2f, 0x44, 0x76, 0x15, 0xe8, 0xfb, 0xac, 0x95, 0xdd, 0x5d, 0xd4, 0x18, 0x74, 0x6f, 0x55, 0x71, 0xcd, 0x7c, 0xdb, 0xfa, 0xcd, 0x17, 0xcd, 0xb8, 0x16, 0x55, 0xa2, 0x21, 0x5c, 0x07, 0xfd, 0xcb, 0x76, 0x74, 0x3c, 0x53, 0xe1, 0xa4, 0xf9, 0xb8, 0x4f, 0x54, 0xa0, 0x77, 0xa9, 0x43, 0xae, 0x7f, 0xaf, 0xe6, 0xb9, 0xa4, 0x11, 0xfe, 0xac, 0x03, 0x91, 0x9f, 0x41, 0x44, 0x57, 0x42, 0x98, 0xca, 0xf9, 0x10, 0xfc, 0xfa, 0x04, 0xde, 0xe5, 0x31, 0x8c, 0xa5, 0x2c, 0x68, 0x0d, 0x35, 0xa2, 0xaa, 0xb7, 0x72, 0xb4, 0x48, 0xa0, 0xe7, 0x43, 0xbb, 0xac, 0xeb, 0xdd, 0x2d, 0xde, 0xb3, 0x6c, 0xc5, 0xec, 0xaf, 0x69, 0x4c, 0xfe, 0xf0, 0xe2, 0x69, 0xce, 0x8f, 0xd0, 0x37, 0x37, 0x7c, 0x59, 0x3b, 0x5c, 0x69, 0x0e, 0xd6, 0x94, 0x19, 0x8f, 0xbf, 0x18, 0x71, 0xd5, 0x5d, 0x8f, 0x83, 0xba, 0x03, 0xce, 0x22, 0x01, 0x8a, 0x6c, 0x30, 0x7f, 0x7a, 0x80, 0x19, 0x61, 0x12, 0x91, 0x5c, 0x10, 0xee, 0x8c, 0x0d, 0xba, 0x39, 0x35, 0xce, 0xdb, 0xe4, 0xf9, 0xc8, 0x38, 0x36, 0x70, 0x14, 0x4d, 0x3e, 0x05, 0xae, 0xb8, 0xea, 0x50, 0xa1, 0xdd, 0x17, 0xd8, 0xf1, 0x05, 0xf5, 0xeb, 0xd6, 0xb8, 0x23, 0x69, 0x29, 0x38, 0x3a, 0x53, 0x1c, 0x2e, 0xb9, 0xce, 0xac, 0x9e, 0xe5, 0x6a, 0xdc, 0x5b, 0x2f, 0x55, 0x76, 0x96, 0x0b, 0xe5, 0x6c, 0x6f, 0x4c, 0xb4, 0xc4, 0xeb, 0x33, 0x0d, 0x6b, 0xd4, 0xf2, 0x26, 0xb5, 0xfc, 0xa7, 0xd6, 0x7e, 0x6a, 0xe3, 0xb4, 0xe5, 0x04, 0xb7, 0xfd, 0xd2, 0x7e, 0x4d, 0x99, 0xa9, 0x4c, 0xb5, 0x47, 0x4a, 0x66, 0x8c, 0x90, 0x32, 0x42, 0xca, 0x94, 0x81, 0x8b, 0x8c, 0xcc, 0x98, 0x84, 0x5a, 0x66, 0x97, 0x3d, 0xe7, 0x18, 0x45, 0x66, 0x14, 0x99, 0x51, 0x64, 0xd6, 0x9f, 0xee, 0x92, 0x1a, 0x12, 0x77, 0x4c, 0xdb, 0x85, 0xc8, 0x8c, 0x23, 0xb3, 0x8d, 0x7f, 0x66, 0x9b, 0x64, 0xb6, 0x26, 0xca, 0x9d, 0x90, 0xc6, 0x08, 0xa9, 0xb0, 0x75, 0x8f, 0x90, 0xba, 0xc9, 0x6c, 0xd5, 0x93, 0xb6, 0x11, 0x15, 0x3b, 0x06, 0x16, 0xee, 0xe5, 0xfb, 0x89, 0xef, 0x78, 0x4c, 0x48, 0x03, 0xd6, 0x8c, 0x09, 0xc3, 0x89, 0x87, 0xa0, 0xc8, 0xa0, 0xc8, 0xa0, 0xc8, 0xe8, 0x7e, 0xa3, 0x85, 0x2b, 0xc9, 0x15, 0x90, 0x3a, 0xd2, 0x23, 0x68, 0x9b, 0x68, 0xce, 0x23, 0x35, 0x14, 0x3d, 0x26, 0xa4, 0x4e, 0x2e, 0x65, 0xc4, 0xdc, 0xef, 0x68, 0x01, 0x69, 0x4c, 0x98, 0x28, 0x42, 0x3a, 0x92, 0x18, 0x2a, 0x20, 0xd5, 0xce, 0xde, 0xc6, 0x91, 0xee, 0x43, 0x3c, 0x21, 0x95, 0x15, 0x09, 0x10, 0xd2, 0xd1, 0x47, 0x1f, 0xfb, 0x11, 0x5b, 0x09, 0x17, 0x90, 0x86, 0xbf, 0x7b, 0x31, 0x9e, 0x75, 0xc2, 0x95, 0xb1, 0x62, 0x78, 0x69, 0x08, 0x3d, 0xf3, 0x3a, 0xb4, 0xf8, 0x95, 0x38, 0xac, 0xaf, 0xe0, 0x09, 0xa9, 0x5c, 0x74, 0x16, 0x28, 0xb2, 0xaf, 0x8f, 0xef, 0x84, 0xfe, 0x15, 0xcb, 0x23, 0x05, 0x21, 0x45, 0x8d, 0xa9, 0x1a, 0xd5, 0xf7, 0xab, 0xd6, 0x29, 0x72, 0x9c, 0x90, 0x1a, 0x08, 0xa9, 0x6c, 0xd7, 0x61, 0xca, 0x0f, 0x0e, 0xb5, 0x2c, 0x94, 0x32, 0x68, 0xa2, 0x9b, 0x84, 0x54, 0x4a, 0x48, 0x07, 0x4b, 0x11, 0xf8, 0x0b, 0x84, 0xac, 0x88, 0x99, 0xe8, 0xea, 0x8c, 0x28, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/away.png.h0000600000176000000410000001264312105760300021356 0ustar buildbotwww-data00000000000000/* away.png - 855 bytes */ static const unsigned char away_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1b, 0x11, 0x3a, 0x20, 0x43, 0x02, 0x75, 0x4a, 0x00, 0x00, 0x02, 0xd7, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0xa5, 0x93, 0x4d, 0x6c, 0x14, 0x75, 0x1c, 0x86, 0x9f, 0x99, 0xdd, 0xe9, 0x6c, 0x77, 0x67, 0x66, 0xbf, 0x5a, 0xea, 0x47, 0x4b, 0x4b, 0xc0, 0xaa, 0x2d, 0x1a, 0x20, 0xba, 0x51, 0x52, 0x0c, 0x0a, 0x27, 0x38, 0x50, 0x2e, 0x1c, 0x09, 0x01, 0xe3, 0xc5, 0x84, 0x54, 0x0f, 0x44, 0x31, 0x10, 0x3f, 0x52, 0xeb, 0xa6, 0x09, 0x09, 0x31, 0xf6, 0x20, 0x89, 0x09, 0x46, 0x4d, 0x50, 0x8f, 0x24, 0x6a, 0x9b, 0x80, 0x95, 0x84, 0x96, 0x0f, 0x53, 0xa1, 0x5a, 0x5a, 0x08, 0x22, 0x6d, 0x59, 0xba, 0xdb, 0x75, 0xbb, 0xdb, 0x9d, 0xdd, 0xd9, 0xe9, 0x7c, 0xfc, 0xbd, 0xad, 0x28, 0x7a, 0x81, 0xf7, 0xf8, 0xcb, 0x2f, 0x4f, 0xde, 0xc3, 0xf3, 0x4a, 0x42, 0x08, 0x1e, 0x26, 0xc1, 0x7f, 0x1f, 0x7e, 0x3c, 0x35, 0xf8, 0x8a, 0x1a, 0x30, 0xdf, 0x51, 0x43, 0x2b, 0x1b, 0x02, 0x4a, 0x40, 0xf7, 0x5c, 0x81, 0x55, 0xb1, 0x0a, 0x15, 0x93, 0x71, 0xcb, 0x6d, 0x4c, 0xef, 0x7a, 0xad, 0x7f, 0xec, 0xde, 0x7f, 0xe9, 0xde, 0x06, 0xe7, 0xbe, 0x19, 0x18, 0x8a, 0xc5, 0x96, 0x0f, 0xc4, 0xdb, 0x7b, 0x1b, 0x54, 0xa3, 0x19, 0x35, 0x1c, 0x47, 0x08, 0x1f, 0xb3, 0x98, 0xa1, 0x30, 0x3f, 0x45, 0x66, 0xfa, 0x6c, 0xa5, 0x54, 0x56, 0xd2, 0x7b, 0xfa, 0x3e, 0xfe, 0xe0, 0x3e, 0xc0, 0xe8, 0xa9, 0x0f, 0x8f, 0xb7, 0xae, 0x4b, 0x1c, 0x4c, 0xb4, 0xef, 0x60, 0xb1, 0xaa, 0x33, 0x79, 0xb3, 0x44, 0x6e, 0xa9, 0x8a, 0xeb, 0x09, 0xe2, 0x7a, 0x88, 0xee, 0xb5, 0x1a, 0x71, 0xf1, 0x3b, 0xd7, 0x7e, 0xfa, 0x9c, 0x6c, 0xce, 0x3d, 0xb4, 0xef, 0xf0, 0x89, 0xc1, 0x3a, 0x60, 0xf8, 0x8b, 0x74, 0x4f, 0x32, 0x96, 0x3f, 0xd3, 0x91, 0x7a, 0x5d, 0x99, 0xca, 0xa8, 0xe4, 0x8b, 0x36, 0xcf, 0xae, 0x4b, 0x10, 0x33, 0x64, 0x04, 0x12, 0x85, 0x92, 0xc7, 0xc5, 0xe9, 0x45, 0x34, 0x55, 0xe6, 0x69, 0x63, 0x86, 0xcb, 0xa7, 0x4f, 0x56, 0xad, 0x40, 0xa2, 0xe7, 0xd5, 0xb7, 0x3f, 0x99, 0x90, 0x01, 0x02, 0xfe, 0xd2, 0xe1, 0x68, 0xeb, 0x36, 0x65, 0xd1, 0x32, 0x58, 0x28, 0xd4, 0xd8, 0xbd, 0xb5, 0x83, 0x84, 0x2e, 0x28, 0x98, 0x26, 0x9a, 0x11, 0x61, 0x75, 0x9b, 0x41, 0xef, 0xf6, 0xb5, 0x64, 0xcb, 0x3e, 0x79, 0xb9, 0x8b, 0x96, 0x35, 0x8f, 0x87, 0xbd, 0xea, 0xd2, 0x9b, 0x00, 0x32, 0x80, 0x2c, 0x55, 0x37, 0x46, 0x12, 0xad, 0xfc, 0x3c, 0x53, 0x60, 0x7d, 0x67, 0x92, 0xaa, 0x2b, 0x50, 0x14, 0x85, 0x91, 0x1f, 0xbe, 0x67, 0xb9, 0x54, 0xc2, 0xb1, 0x6d, 0x86, 0x47, 0xce, 0xd2, 0xd5, 0xd9, 0xc4, 0xd8, 0x54, 0x91, 0x47, 0x3a, 0x53, 0x04, 0xc4, 0x4a, 0x4f, 0x1d, 0x20, 0x84, 0x88, 0x85, 0x22, 0x71, 0x32, 0xf9, 0x2a, 0xc9, 0x64, 0x23, 0xb6, 0x27, 0x68, 0x08, 0x87, 0x99, 0x9f, 0x9d, 0x65, 0xe4, 0xcc, 0x28, 0xfd, 0x03, 0x69, 0x74, 0x3d, 0x42, 0x7c, 0x55, 0x98, 0xbb, 0x85, 0x1a, 0xd1, 0xe6, 0x0e, 0x02, 0x48, 0x2d, 0x75, 0x80, 0x63, 0x3b, 0xf8, 0xbe, 0x8d, 0xb5, 0xe2, 0x63, 0x7b, 0xe0, 0xf8, 0x90, 0x2b, 0x95, 0x89, 0x68, 0x1a, 0x93, 0x57, 0x7e, 0x61, 0x67, 0xef, 0x6e, 0x36, 0x3e, 0x9f, 0xc2, 0x76, 0xc1, 0x71, 0x7c, 0x84, 0x5f, 0x43, 0xf8, 0xe2, 0x6f, 0x0f, 0x2a, 0xa6, 0x75, 0xb7, 0x94, 0xbd, 0xbe, 0x26, 0x1a, 0x79, 0x8c, 0x5b, 0x0b, 0x55, 0x9e, 0x68, 0x8d, 0x82, 0x1c, 0x62, 0xd3, 0x73, 0x2f, 0xf0, 0xd4, 0x33, 0xeb, 0x09, 0x47, 0x0d, 0x4c, 0x1b, 0xe6, 0x16, 0x2a, 0x18, 0x11, 0x99, 0xa5, 0x3b, 0x57, 0xa8, 0xb9, 0x5e, 0xbe, 0xde, 0xa0, 0x6c, 0x31, 0x3a, 0x37, 0x35, 0x4a, 0xea, 0xc9, 0x46, 0xc6, 0x26, 0xb2, 0x28, 0x2a, 0x44, 0x42, 0x0a, 0x3d, 0x5b, 0x36, 0xd3, 0x14, 0x37, 0x50, 0x01, 0x2d, 0x04, 0x97, 0x26, 0x72, 0xbc, 0xd4, 0x2d, 0x73, 0xfb, 0xea, 0x79, 0x1c, 0x11, 0x1c, 0xaf, 0x03, 0x3c, 0x59, 0x3f, 0x3e, 0x3b, 0x73, 0xcb, 0x4a, 0x38, 0xe3, 0xb4, 0xe9, 0x26, 0x9f, 0x7d, 0x3b, 0xc3, 0xed, 0x3b, 0x45, 0x24, 0xdb, 0x41, 0xb2, 0x1c, 0x66, 0xe7, 0x8a, 0x7c, 0xfa, 0xf5, 0x34, 0xab, 0x1b, 0x73, 0x34, 0x5b, 0xdf, 0x31, 0x77, 0xb3, 0x52, 0x93, 0x54, 0x63, 0xf0, 0x1f, 0x22, 0x9d, 0x78, 0x7f, 0xff, 0x5b, 0x9a, 0x6a, 0x0e, 0x6c, 0xd8, 0xfa, 0x32, 0x59, 0x39, 0xc5, 0xd8, 0x6f, 0x2e, 0xc5, 0xb2, 0x87, 0xe7, 0x0b, 0xf4, 0x30, 0xbc, 0xd8, 0x25, 0x68, 0xb2, 0x87, 0xb9, 0x34, 0x7c, 0x11, 0x8b, 0xe4, 0x7b, 0x7d, 0x1f, 0x7d, 0xf9, 0xee, 0x7d, 0x2a, 0x0f, 0x1d, 0xd9, 0x7b, 0x44, 0x71, 0xcb, 0x87, 0x5a, 0xda, 0xc3, 0x5a, 0x5b, 0x67, 0x37, 0xb1, 0x47, 0xdb, 0x41, 0xb8, 0xfc, 0x39, 0x7f, 0x83, 0x3f, 0x26, 0x7f, 0x25, 0x9b, 0xf1, 0x2b, 0x4e, 0x50, 0x3b, 0xd6, 0x97, 0xfe, 0xea, 0xe8, 0x7f, 0x6e, 0x01, 0x60, 0xe8, 0xe8, 0xfe, 0x94, 0x5b, 0x5b, 0x7e, 0x43, 0xf6, 0x9c, 0xcd, 0x41, 0x59, 0x34, 0x03, 0xb8, 0xbe, 0xb4, 0xe8, 0xc9, 0xc1, 0x71, 0xa9, 0x41, 0x3b, 0x76, 0xb0, 0xff, 0xe4, 0x85, 0xff, 0x1d, 0xd3, 0x83, 0xe4, 0x2f, 0x44, 0x57, 0x4d, 0x98, 0x66, 0xab, 0x75, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/away.xpm0000600000176000000410000000072212105760300021143 0ustar buildbotwww-data00000000000000/* XPM */ static const char * away_xpm[] = { "16 16 6 1", " c None", ". c #353535", "+ c #000000", "@ c #767676", "# c #7B7B7B", "$ c #EDE7E7", " ", " ", " ", " ", " .+.@ ", " .#$+$#. ", " #$$+$$#@ ", " $$$+$$$. ", " +$$$+++$+ ", " .$$$$$$$. ", " @#$$$$$# ", " .#$$$#. ", " @.+. ", " ", " ", " "}; springlobby-0.169/src/images/battle.xpm0000600000176000000410000000060112105760300021451 0ustar buildbotwww-data00000000000000/* XPM */ static const char * battle_xpm[] = { "12 12 9 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #BCBCBC", "# c #7E7E7E", "$ c #FFEAAC", "% c #BC8E00", "& c #705400", "* c #FFD75F", ".... ....", ".+++. .+++.", ".@#@+..+@#@.", ".#@#@+.@#@#.", " .#@#@+.@#. ", " ..#@#@+... ", ".$..#@#@+.$.", ".%$@.#@#@$%.", " .%@@.#@@%. ", ".&&%*..*%&&.", "&&&.%**%.&&&", "*&. .... .&*"}; springlobby-0.169/src/images/battle_list.xpm0000600000176000000410000000060612105760300022511 0ustar buildbotwww-data00000000000000/* XPM */ static const char * battle_list_xpm[] = { "12 12 9 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #BCBCBC", "# c #7E7E7E", "$ c #FFEAAC", "% c #BC8E00", "& c #FFD75F", "* c #705400", " .+@#@#. ...", ".+@#@#. +++.", "+@#@#. +@#@.", "@#@#. +@#@#.", "#@#. +@#@#..", "@#. +@#@#..+", "#$ +@#@#..+@", ".%$@#@#$.+@#", "&.%@@#.%$@#@", ".**%&. .%@@#", "***.%&.**%&.", "&*. ..***.%&"}; springlobby-0.169/src/images/battle_map.xpm0000600000176000000410000000045312105760300022313 0ustar buildbotwww-data00000000000000/* XPM */ static const char * battle_map_xpm[] = { "12 12 3 1", " c None", ". c #000000", "+ c #FF0000", " ", " .. ", " .. ", " .. ", ".. .. ", ".. .. .. ", " .++..++.", " .++++. ", ".. .++. ", ".. .++++. ", " .++..++.", " .. .. "}; springlobby-0.169/src/images/battle_settings.xpm0000600000176000000410000000055412105760300023400 0ustar buildbotwww-data00000000000000/* XPM */ static const char * battle_settings_xpm[] = { "12 12 7 1", " c None", ". c #161616", "+ c #C8C6C6", "@ c #949493", "# c #464646", "$ c #000000", "% c #7C7A7A", " ...... ", " .+@@@@@. ", " .+@@@@@@@..", ".+@@@@......", "+@@@@@. ", "@...@@. ", ".#++$@. ", ".#..$@. ", ".#++$@......", ".#..$@.@@@%.", ".#++.@.@%%. ", "@...@@.%.. "}; springlobby-0.169/src/images/bot.xpm0000600000176000000410000000641112105760300020767 0ustar buildbotwww-data00000000000000/* XPM */ static const char * bot_xpm[] = { "16 16 169 2", " c None", ". c #41423C", "+ c #52544B", "@ c #6C6D61", "# c #6E6B5C", "$ c #66685C", "% c #EAEED2", "& c #C4C8AE", "* c #363733", "= c #C1C5B4", "- c #DEE3CD", "; c #44433A", "> c #6B6451", ", c #B8AF90", "' c #615D4C", ") c #191712", "! c #807654", "~ c #B0A170", "{ c #ABA074", "] c #7A7866", "^ c #717277", "/ c #7A7B81", "( c #484843", "_ c #514027", ": c #40321E", "< c #A49E90", "[ c #675E50", "} c #2E2723", "| c #AA9C6C", "1 c #F6E29D", "2 c #8E8462", "3 c #B4B5BE", "4 c #B7B9C2", "5 c #919399", "6 c #534128", "7 c #302619", "8 c #65655C", "9 c #B0B39F", "0 c #65675C", "a c #44423E", "b c #554E36", "c c #D7C589", "d c #7F7556", "e c #5B554A", "f c #555656", "g c #8A8C92", "h c #8F9097", "i c #211C12", "j c #4B4639", "k c #8A866F", "l c #A7A995", "m c #AAAC98", "n c #232321", "o c #3C3A38", "p c #B8B4B3", "q c #7C7B78", "r c #A6AFAA", "s c #959D9A", "t c #6F7573", "u c #373936", "v c #948A65", "w c #D3C387", "x c #2E2112", "y c #1B1812", "z c #5E5C5E", "A c #B7B4B8", "B c #545556", "C c #AFB9B4", "D c #ADB7B3", "E c #B6C0BC", "F c #515653", "G c #AAA17C", "H c #F6E29E", "I c #F4E09E", "J c #2B2217", "K c #0B0906", "L c #9F9CA0", "M c #636163", "N c #404241", "O c #A4ACA8", "P c #AEB7B3", "Q c #B5BEBA", "R c #525755", "S c #393935", "T c #574A3C", "U c #787368", "V c #333232", "W c #A4A0A4", "X c #474546", "Y c #7D7D71", "Z c #5D5F56", "` c #5F6461", " . c #929996", ".. c #303331", "+. c #272322", "@. c #332E2F", "#. c #CAC5C6", "$. c #817E80", "%. c #A8A4A8", "&. c #454444", "*. c #6C6D60", "=. c #494940", "-. c #262521", ";. c #505049", ">. c #53544B", ",. c #262722", "'. c #9B9B99", "). c #BBB9BA", "!. c #6D6A6D", "~. c #A5A1A5", "{. c #494747", "]. c #606155", "^. c #3C3D34", "/. c #0B0A09", "(. c #66675C", "_. c #7C7C6E", ":. c #31312E", "<. c #BAB9B9", "[. c #807C7F", "}. c #545254", "|. c #6A696A", "1. c #242322", "2. c #777869", "3. c #6E6E61", "4. c #0B0B09", "5. c #262621", "6. c #4C4D43", "7. c #555551", "8. c #A1A0A1", "9. c #7F7B7F", "0. c #565356", "a. c #C8C8C8", "b. c #2E2D2A", "c. c #595A50", "d. c #535449", "e. c #080806", "f. c #3A3A33", "g. c #6F7062", "h. c #6E6E67", "i. c #A09EA0", "j. c #7E7B7E", "k. c #514F51", "l. c #717170", "m. c #DCDCDA", "n. c #A3A3A0", "o. c #030302", "p. c #282823", "q. c #59594E", "r. c #595851", "s. c #959394", "t. c #605D5F", "u. c #121212", "v. c #CCCCCB", "w. c #E0E0DF", "x. c #4B4B4B", "y. c #010101", "z. c #6E6E6D", "A. c #CACAC9", "B. c #2A2828", "C. c #807D7E", "D. c #201E1F", "E. c #666666", "F. c #6F6F6F", "G. c #282828", "H. c #131313", "I. c #8D8D8C", "J. c #787878", "K. c #0B0B0B", "L. c #0C0C0C", " . + @ # ", " $ % & * = - ; > , ' ) ", " ! ~ { ] ^ / ( _ : < [ } ", " | 1 1 2 3 4 5 6 7 8 9 0 a ", " b c d e f g h i j k l m n ", " o p q r s t u v 1 w x y ", " z A B C D E F G H I J K ", " L M N O P Q R S T U V ", " W X Y Z ` ...+.@.#.$. ", " %.&.*.=.-.;.>.,.'.).!. ", " ~.{.].^./.(._.:.<.[.}. ", " |.1.2.3.4.5.6.7.8.9.0.a. ", " b.c.d.e.f.g.h.i.j.k.a.a. ", " l.m.n.o.p.q.r.s.t.u.a.a. ", " v.w.x.y.z.A.B.C.D.a.a. ", " E.F.G.H.I.J.K.L.a.a. "}; springlobby-0.169/src/images/bot_away.xpm0000600000176000000410000000543612105760300022016 0ustar buildbotwww-data00000000000000/* XPM */ static const char * bot_away_xpm[] = { "16 16 138 2", " c None", ". c #41423C", "+ c #52544B", "@ c #6C6D61", "# c #6E6B5C", "$ c #66685C", "% c #EAEED2", "& c #C4C8AE", "* c #363733", "= c #C1C5B4", "- c #DEE3CD", "; c #44433A", "> c #6B6451", ", c #B8AF90", "' c #615D4C", ") c #191712", "! c #807654", "~ c #B0A170", "{ c #ABA074", "] c #7A7866", "^ c #717277", "/ c #7A7B81", "( c #484843", "_ c #514027", ": c #40321E", "< c #A49E90", "[ c #675E50", "} c #2E2723", "| c #AA9C6C", "1 c #F6E29D", "2 c #8E8462", "3 c #B4B5BE", "4 c #B7B9C2", "5 c #919399", "6 c #534128", "7 c #302619", "8 c #65655C", "9 c #B0B39F", "0 c #65675C", "a c #44423E", "b c #554E36", "c c #D7C589", "d c #7F7556", "e c #5B554A", "f c #555656", "g c #8A8C92", "h c #8F9097", "i c #211C12", "j c #4B4639", "k c #8A866F", "l c #A7A995", "m c #AAAC98", "n c #232321", "o c #3C3A38", "p c #B8B4B3", "q c #7C7B78", "r c #A6AFAA", "s c #959D9A", "t c #6F7573", "u c #373936", "v c #948A65", "w c #D3C387", "x c #2E2112", "y c #1B1812", "z c #5E5C5E", "A c #B7B4B8", "B c #545556", "C c #AFB9B4", "D c #ADB7B3", "E c #B6C0BC", "F c #475A49", "G c #A7A17A", "H c #F6E29E", "I c #F4E09E", "J c #282A15", "K c #0B0906", "L c #9F9CA0", "M c #636163", "N c #404241", "O c #A4ACA8", "P c #AEB7B3", "Q c #B5BEBA", "R c #525755", "S c #20201E", "T c #453F38", "U c #121210", "V c #353535", "W c #767676", "X c #A4A0A4", "Y c #474546", "Z c #7D7D71", "` c #5D5F56", " . c #5F6461", ".. c #B0B5B3", "+. c #343434", "@. c #5F5E5E", "#. c #CAC4C5", "$. c #000000", "%. c #EDE7E7", "&. c #7B7B7B", "*. c #A8A4A8", "=. c #454444", "-. c #6C6D60", ";. c #494940", ">. c #262521", ",. c #30302C", "'. c #A5A1A5", "). c #494747", "!. c #606155", "~. c #3C3D34", "{. c #0B0A09", "]. c #353630", "^. c #6A696A", "/. c #242322", "(. c #777869", "_. c #6E6E61", ":. c #0B0B09", "<. c #2E2D2A", "[. c #595A50", "}. c #535449", "|. c #080806", "1. c #363634", "2. c #717170", "3. c #DCDCDA", "4. c #A3A3A0", "5. c #030302", "6. c #747474", "7. c #CCCCCB", "8. c #E0E0DF", "9. c #4B4B4B", "0. c #010101", "a. c #6E6E6D", "b. c #666666", "c. c #6F6F6F", "d. c #282828", "e. c #131313", "f. c #8D8D8C", "g. c #787878", " . + @ # ", " $ % & * = - ; > , ' ) ", " ! ~ { ] ^ / ( _ : < [ } ", " | 1 1 2 3 4 5 6 7 8 9 0 a ", " b c d e f g h i j k l m n ", " o p q r s t u v 1 w x y ", " z A B C D E F G H I J K ", " L M N O P Q R S T U V W ", " X Y Z ` ...+.@.#.$.%.&.V ", " *.=.-.;.>.,.&.%.%.$.%.%.&.W ", " '.).!.~.{.].%.%.%.$.%.%.%.V ", " ^./.(._.:.:.%.%.%.$.$.$.%.$.", " <.[.}.|.1.%.%.%.%.%.%.%.V ", " 2.3.4.5.6.&.%.%.%.%.%.&. ", " 7.8.9.0.a.V &.%.%.%.&.V ", " b.c.d.e.f.g.W V $.V "}; springlobby-0.169/src/images/bot_broom.png.h0000600000176000000410000001436212105760300022377 0ustar buildbotwww-data00000000000000/* bot_broom.png - 986 bytes */ static const unsigned char bot_broom_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1e, 0x12, 0x21, 0x0c, 0xed, 0x74, 0x9c, 0x58, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0x0e, 0x17, 0x00, 0x00, 0x03, 0x35, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x6d, 0x92, 0x5b, 0x4c, 0x93, 0x07, 0x18, 0x86, 0x9f, 0xf6, 0xff, 0x4b, 0x0b, 0x43, 0x69, 0x6b, 0x1d, 0xad, 0x58, 0xa1, 0x21, 0x25, 0xb3, 0xac, 0xc6, 0x41, 0x86, 0x88, 0x24, 0x86, 0x0d, 0xe6, 0x24, 0x10, 0x0f, 0x3b, 0x25, 0x63, 0x5e, 0x6c, 0x59, 0xe2, 0xb2, 0x25, 0xc4, 0x2d, 0x92, 0x38, 0x93, 0x2d, 0x45, 0x6e, 0x8c, 0x31, 0x71, 0x5b, 0x82, 0x9b, 0x71, 0x4b, 0xe6, 0x32, 0x89, 0x59, 0x63, 0xf4, 0x02, 0x88, 0x93, 0x4d, 0xf0, 0x80, 0x6b, 0xc0, 0x76, 0x05, 0x23, 0x20, 0xb0, 0xb1, 0x02, 0xb3, 0xb3, 0x0d, 0xb6, 0xd8, 0xd2, 0xc3, 0xdf, 0xc3, 0xbf, 0x8b, 0x45, 0x06, 0xd9, 0xde, 0xab, 0xef, 0xea, 0xc9, 0x9b, 0xf7, 0x7b, 0x14, 0x6f, 0xbd, 0xf3, 0xee, 0xb5, 0xf5, 0xa6, 0x22, 0xd4, 0x1a, 0x35, 0xc0, 0x47, 0xc7, 0x3f, 0x39, 0xea, 0x05, 0xa8, 0x7b, 0xa1, 0x56, 0xd6, 0xe9, 0x0b, 0xd8, 0x60, 0x7a, 0x1a, 0x65, 0x36, 0xc5, 0x17, 0x9d, 0xdf, 0x2b, 0xf8, 0x9f, 0x28, 0xc3, 0x8b, 0x8b, 0x1c, 0x6e, 0x6b, 0xe3, 0xf9, 0xca, 0x2d, 0x75, 0xe6, 0xa2, 0x75, 0xbf, 0xf6, 0xf4, 0x75, 0xc9, 0x55, 0xdb, 0x2a, 0x65, 0x47, 0xc7, 0x11, 0x4e, 0x9e, 0x3a, 0xc6, 0xc4, 0xd8, 0x7d, 0x32, 0xc9, 0x25, 0xae, 0x5c, 0xfa, 0x4c, 0x7e, 0xfb, 0x40, 0x93, 0x6c, 0x2a, 0xd4, 0xcb, 0x2b, 0x01, 0x22, 0xc0, 0x5d, 0xcf, 0x60, 0x9d, 0xcd, 0xba, 0x09, 0xed, 0x1a, 0x15, 0x57, 0x7f, 0xba, 0x45, 0xed, 0xce, 0x97, 0xf9, 0xb1, 0xd7, 0x8d, 0xc7, 0x7d, 0x83, 0x35, 0x99, 0x05, 0xee, 0x79, 0xe6, 0xd9, 0x5e, 0xb3, 0x93, 0x1c, 0x85, 0xc8, 0x7a, 0xad, 0x0e, 0xff, 0xc3, 0x47, 0xcb, 0x00, 0xa1, 0xcc, 0x56, 0x3e, 0xe2, 0xfb, 0xed, 0xee, 0x7b, 0xdb, 0xaa, 0x2b, 0xb1, 0x14, 0x6f, 0x44, 0xaf, 0xd5, 0xb3, 0xf0, 0x38, 0x4e, 0xf9, 0xe6, 0x67, 0x31, 0x1a, 0xcd, 0xcc, 0x4e, 0xb8, 0xf0, 0x2f, 0xc4, 0x48, 0x09, 0x1a, 0x1a, 0xf7, 0xef, 0x26, 0x26, 0xa5, 0xd0, 0x17, 0x68, 0x1d, 0xbf, 0xcf, 0xf8, 0xda, 0x01, 0x94, 0xdd, 0x17, 0x9d, 0xde, 0x50, 0xe0, 0x4f, 0xce, 0x7e, 0x75, 0x86, 0x81, 0x5b, 0x1e, 0x64, 0x21, 0x97, 0xbc, 0xdc, 0x1c, 0xbc, 0x63, 0xa3, 0x24, 0x25, 0x09, 0xcf, 0x54, 0x80, 0xa2, 0x92, 0x12, 0xac, 0x96, 0x75, 0xc4, 0x63, 0x31, 0x1a, 0x1a, 0x6a, 0x99, 0xf1, 0xcd, 0xfd, 0xdb, 0x00, 0x60, 0xfc, 0xbe, 0xaf, 0x5d, 0x93, 0x93, 0xef, 0x88, 0x44, 0x13, 0x18, 0x4c, 0x1b, 0xa8, 0xae, 0xa9, 0x21, 0x29, 0xc5, 0x99, 0x99, 0xf5, 0x91, 0x4c, 0xa6, 0x69, 0xae, 0x2f, 0xe3, 0xe0, 0x9b, 0x95, 0xa8, 0xb2, 0x8f, 0x38, 0xf4, 0x7e, 0x07, 0x91, 0x58, 0x92, 0x48, 0x34, 0xde, 0xbe, 0xbc, 0x01, 0x40, 0xf1, 0x26, 0x0b, 0x3b, 0xaa, 0xb6, 0xd3, 0x75, 0xee, 0x1c, 0x07, 0x5b, 0x5b, 0xa9, 0xaa, 0xaa, 0x46, 0xad, 0xd6, 0x90, 0x4c, 0x24, 0xc8, 0xd7, 0xa9, 0x00, 0x05, 0x16, 0x73, 0x21, 0x19, 0x85, 0x8a, 0xf0, 0x62, 0x68, 0x75, 0x03, 0x80, 0x43, 0xad, 0x1f, 0x3a, 0x6e, 0xde, 0xbc, 0x4e, 0x20, 0xf8, 0x17, 0xfe, 0x07, 0x7e, 0x4c, 0x1b, 0xcd, 0xd8, 0x6c, 0x36, 0x82, 0xc1, 0x00, 0x23, 0xe3, 0x7e, 0xba, 0x7b, 0xbc, 0x5c, 0x76, 0x7e, 0x8b, 0x5a, 0x88, 0x52, 0x5a, 0xd1, 0xf4, 0xea, 0xe4, 0xf8, 0xd8, 0x38, 0x80, 0xf2, 0x09, 0x40, 0x25, 0x8a, 0xcc, 0xcf, 0xcf, 0xb1, 0xa3, 0xda, 0x4e, 0x3c, 0x12, 0xe4, 0xec, 0xe9, 0x4e, 0x86, 0x86, 0x86, 0xd8, 0xfc, 0x8c, 0x0d, 0xab, 0xa5, 0x94, 0xb4, 0x5a, 0xc7, 0xc9, 0xe3, 0x46, 0x3e, 0x3e, 0x6c, 0x40, 0xf5, 0xd0, 0xf9, 0xc1, 0xb2, 0x07, 0xcb, 0xff, 0x14, 0x45, 0xb2, 0x72, 0x96, 0x50, 0x38, 0x44, 0x78, 0x21, 0xc8, 0x83, 0xd9, 0x3f, 0x70, 0x9e, 0xff, 0x8e, 0xe9, 0xe9, 0x49, 0x74, 0xda, 0x02, 0x1a, 0x1b, 0x77, 0x73, 0xa2, 0x6b, 0x17, 0x92, 0x94, 0x22, 0x9d, 0x59, 0x21, 0xd2, 0x93, 0x23, 0x93, 0xc9, 0x20, 0x0a, 0x02, 0xd1, 0xe8, 0x12, 0x91, 0x68, 0x94, 0x7b, 0x23, 0x23, 0xe8, 0xd6, 0x6a, 0xb8, 0x7d, 0xa3, 0x9f, 0xbe, 0xfe, 0x01, 0x72, 0x73, 0xf3, 0x38, 0xd0, 0xe0, 0xe4, 0xf3, 0x2f, 0x25, 0x44, 0x81, 0xcb, 0xff, 0x01, 0x0c, 0xba, 0x06, 0x99, 0x9a, 0x9e, 0xa2, 0xb0, 0xd0, 0x40, 0xc5, 0x73, 0x76, 0x50, 0xc0, 0xe8, 0xed, 0x4b, 0xd4, 0x14, 0xf7, 0x12, 0x8b, 0x84, 0xc9, 0x0b, 0xb5, 0x22, 0x25, 0xd2, 0x1c, 0x6d, 0x83, 0x74, 0x86, 0xbd, 0xfb, 0x6b, 0x79, 0x05, 0x60, 0x95, 0xdf, 0x5b, 0xec, 0x36, 0xb9, 0xdc, 0x5e, 0x86, 0x24, 0x25, 0xe9, 0xe9, 0xfe, 0x19, 0x5b, 0x89, 0x9a, 0x7d, 0xf5, 0x4f, 0x21, 0x88, 0x4a, 0x5c, 0xa3, 0x6b, 0xb1, 0x5b, 0x12, 0xec, 0xda, 0x23, 0x61, 0xcc, 0xf7, 0x0f, 0x1c, 0xf9, 0x54, 0x96, 0x81, 0x1f, 0x94, 0x2b, 0x01, 0x2f, 0xd6, 0xbf, 0x44, 0xc7, 0xb1, 0x13, 0xec, 0xdd, 0xf3, 0x06, 0xa9, 0x54, 0x9a, 0x1c, 0x95, 0x8a, 0x2b, 0x83, 0x29, 0xba, 0x07, 0x24, 0x2c, 0xa5, 0x65, 0x5c, 0xf7, 0x24, 0xf8, 0xfa, 0x74, 0x80, 0xac, 0x20, 0x0a, 0x5b, 0xad, 0x00, 0xbc, 0xbe, 0x0a, 0xd0, 0xd2, 0xd2, 0x82, 0x28, 0xaa, 0xb8, 0x70, 0xc1, 0x49, 0x36, 0x2b, 0x53, 0x55, 0xd7, 0xc2, 0xa9, 0x33, 0xbd, 0x84, 0x13, 0x06, 0x74, 0xc6, 0xad, 0x3c, 0x5e, 0x92, 0x18, 0x9d, 0x4c, 0xf7, 0x9f, 0xff, 0x26, 0x95, 0xf6, 0x4e, 0x41, 0x38, 0xb2, 0xc2, 0x83, 0x7f, 0xa2, 0x70, 0xdc, 0xb9, 0xe3, 0x66, 0x78, 0x78, 0x18, 0x59, 0x96, 0x69, 0x6e, 0x6e, 0xc2, 0xed, 0xf6, 0x70, 0xb5, 0xaf, 0x8f, 0x5f, 0x5c, 0x2e, 0xe6, 0xfc, 0x8b, 0x8a, 0x0a, 0xab, 0x68, 0x76, 0x4f, 0x64, 0x2d, 0xa1, 0x08, 0x18, 0xca, 0x5f, 0xeb, 0xfc, 0x1b, 0xeb, 0xa3, 0x4e, 0x7f, 0x82, 0x92, 0xfe, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/bot_ingame.png.h0000600000176000000410000001523112105760300022515 0ustar buildbotwww-data00000000000000/* bot_ingame.png - 1052 bytes */ static const unsigned char bot_ingame_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1e, 0x12, 0x22, 0x2d, 0x8a, 0x30, 0xdf, 0xc5, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0x0e, 0x17, 0x00, 0x00, 0x03, 0x77, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x55, 0x90, 0x5b, 0x4c, 0x9b, 0x05, 0x00, 0x85, 0xbf, 0x5e, 0xa0, 0x14, 0xcb, 0x1c, 0xb4, 0x20, 0x65, 0x40, 0xf7, 0xcb, 0x9d, 0x22, 0xe2, 0x90, 0x8b, 0xac, 0x93, 0x30, 0x2f, 0xb8, 0x65, 0x4c, 0x45, 0x47, 0x96, 0x45, 0x4d, 0x34, 0x5b, 0x9c, 0xd9, 0x83, 0xc9, 0x02, 0xc9, 0x34, 0xd1, 0xa0, 0x64, 0x53, 0xe7, 0x65, 0x6c, 0xba, 0xe9, 0x83, 0x33, 0xd9, 0x02, 0xbc, 0x34, 0x88, 0x4e, 0x18, 0x0c, 0xc6, 0x18, 0xc8, 0xa4, 0x81, 0xd0, 0x81, 0x28, 0xf7, 0x8e, 0xb6, 0x0e, 0x5b, 0x70, 0xcd, 0x0a, 0x94, 0xb5, 0xb4, 0xb4, 0xbf, 0x0f, 0xca, 0x8c, 0xe7, 0xfd, 0xfb, 0x72, 0xce, 0x91, 0xbc, 0xf2, 0xc6, 0xc1, 0x6b, 0xb1, 0xda, 0x2d, 0x28, 0x22, 0x14, 0x00, 0x47, 0x3f, 0x7e, 0xef, 0xdd, 0x11, 0x80, 0xb2, 0x9d, 0x06, 0x31, 0x3a, 0xe6, 0x41, 0x12, 0xb4, 0x71, 0x48, 0x43, 0x01, 0xce, 0x9c, 0x6d, 0x90, 0x00, 0x1c, 0xab, 0x3b, 0x91, 0x07, 0x7c, 0xb1, 0xe6, 0x5b, 0xe3, 0x2f, 0xc7, 0x3c, 0x52, 0xf7, 0xd2, 0x12, 0xd5, 0x35, 0x35, 0x14, 0xe4, 0xe7, 0x96, 0x25, 0x6d, 0x51, 0xdf, 0x6c, 0xeb, 0x6a, 0x12, 0x0b, 0x8b, 0xf2, 0xc5, 0xda, 0xba, 0x63, 0x7c, 0x76, 0xea, 0x43, 0x26, 0xc7, 0xa7, 0x08, 0xae, 0xad, 0xd2, 0xd1, 0x52, 0x2f, 0x1e, 0x3a, 0x58, 0x25, 0x3a, 0x6e, 0xdb, 0x6f, 0xee, 0xdd, 0x5b, 0x41, 0x75, 0x4d, 0x0d, 0xee, 0xa5, 0x25, 0xe4, 0x00, 0x63, 0xe6, 0x1b, 0x65, 0xd9, 0x69, 0xc9, 0x6c, 0x8e, 0x0a, 0xa3, 0xf3, 0x6a, 0x3f, 0x86, 0xd2, 0xe7, 0xb8, 0x72, 0x79, 0x18, 0xf3, 0x70, 0x1f, 0x51, 0x41, 0x17, 0xbf, 0x9b, 0x6f, 0xa3, 0x7f, 0x6c, 0x3b, 0x51, 0x1a, 0x01, 0x7d, 0xce, 0x23, 0xe8, 0x74, 0x02, 0x0e, 0x87, 0x13, 0x00, 0x59, 0x7a, 0xb6, 0x7e, 0xd4, 0x66, 0x19, 0x3b, 0x5c, 0x54, 0x9c, 0x8f, 0xa0, 0x4b, 0x24, 0x66, 0x73, 0x0c, 0xae, 0x65, 0x2f, 0xfa, 0xac, 0x1c, 0xe2, 0xe3, 0x93, 0xb0, 0x4f, 0x9a, 0xf0, 0x84, 0x22, 0x89, 0x8c, 0xd5, 0xb1, 0x7f, 0x7f, 0x15, 0xd1, 0x6a, 0x0d, 0x63, 0xa3, 0xa3, 0xc2, 0x97, 0xf5, 0xa7, 0xac, 0xc0, 0x51, 0xd9, 0xf4, 0xc4, 0xb8, 0x53, 0x48, 0x8a, 0xa9, 0x9d, 0xb5, 0xdc, 0x22, 0x28, 0x55, 0xa1, 0xda, 0xa4, 0xc6, 0xe5, 0xba, 0x83, 0xc5, 0x66, 0x45, 0x2e, 0x95, 0xf1, 0xb3, 0x69, 0x90, 0xc7, 0x4b, 0xcb, 0x79, 0x34, 0x37, 0x1b, 0x21, 0x25, 0x15, 0xe7, 0x82, 0x93, 0xaf, 0xea, 0x4f, 0x13, 0xae, 0x50, 0xbc, 0xdd, 0xda, 0x6c, 0xec, 0x93, 0x01, 0x4c, 0x4c, 0xd9, 0x3e, 0x88, 0x08, 0x57, 0xd5, 0xae, 0x78, 0x7c, 0x68, 0xb4, 0x09, 0x14, 0x97, 0x94, 0xb0, 0xe6, 0xf7, 0x32, 0x67, 0xb7, 0xa1, 0xd1, 0x26, 0x51, 0x5c, 0x98, 0xcb, 0xee, 0xf2, 0x27, 0x99, 0xb3, 0xce, 0xf2, 0xe9, 0xf1, 0x4f, 0xb0, 0x5b, 0xa6, 0x30, 0xdd, 0x18, 0x38, 0x00, 0x20, 0xe5, 0xdf, 0xe8, 0x92, 0x05, 0xb6, 0x17, 0x3e, 0x41, 0xd3, 0x85, 0x0b, 0xd8, 0xec, 0x76, 0x04, 0x21, 0x05, 0xb5, 0x5a, 0x4d, 0x66, 0x66, 0x26, 0x05, 0x05, 0x45, 0xdc, 0xb2, 0xda, 0xe8, 0xb8, 0xd4, 0x82, 0x6b, 0x7e, 0x0e, 0xc7, 0x9f, 0xce, 0x0d, 0xec, 0x9f, 0x13, 0x01, 0xd2, 0x33, 0xb3, 0x68, 0x6d, 0xa8, 0x46, 0xf4, 0x79, 0xe9, 0xbe, 0x92, 0x8e, 0x3a, 0x2e, 0x0e, 0x41, 0xd8, 0x8a, 0x36, 0x3e, 0x81, 0xbe, 0x5f, 0xcc, 0xb4, 0xb7, 0x18, 0x51, 0x05, 0x67, 0xd1, 0x6e, 0x5a, 0x24, 0x71, 0xf7, 0xf3, 0x2f, 0xff, 0xd4, 0x6c, 0xe4, 0x7f, 0x0d, 0xec, 0xa3, 0x17, 0x79, 0xed, 0x80, 0x8f, 0x13, 0x75, 0x2a, 0xbc, 0x5e, 0x2f, 0xb1, 0xd1, 0x6a, 0xb2, 0x32, 0xf5, 0x0c, 0x0e, 0x0e, 0x62, 0x6c, 0x6c, 0x24, 0x32, 0x2a, 0x86, 0xcf, 0x8f, 0x47, 0xf0, 0x4e, 0xb5, 0x86, 0xb0, 0x05, 0xe3, 0x91, 0x0d, 0xee, 0xbe, 0x20, 0x24, 0x4a, 0x10, 0x45, 0x38, 0xd9, 0xf0, 0x2c, 0x59, 0x19, 0x19, 0xc8, 0x10, 0xe9, 0xeb, 0xed, 0xa1, 0xff, 0x7a, 0x37, 0xa9, 0x69, 0xa9, 0xbc, 0x50, 0xf9, 0x22, 0x27, 0x9b, 0xca, 0xf1, 0xfb, 0x03, 0xac, 0x07, 0xef, 0x2f, 0xf8, 0x4f, 0x90, 0x24, 0xe4, 0xf3, 0xcd, 0x79, 0x09, 0x6f, 0x55, 0x76, 0x10, 0x02, 0x7e, 0x6c, 0x6b, 0xa7, 0xf7, 0x5a, 0x17, 0x0f, 0x44, 0x2a, 0x59, 0x5e, 0xf5, 0xa2, 0x54, 0x46, 0xf2, 0xea, 0x33, 0x46, 0x4e, 0x7f, 0xed, 0x47, 0x2e, 0xe3, 0x87, 0x0d, 0x4e, 0x06, 0x50, 0x69, 0xe0, 0xa5, 0x3b, 0x2e, 0x57, 0xd5, 0x91, 0x37, 0x97, 0x09, 0x0b, 0x57, 0x22, 0xf7, 0xf4, 0xd0, 0x6d, 0x8a, 0xe0, 0xa9, 0xf4, 0x6e, 0x06, 0x4d, 0x56, 0xc2, 0x54, 0x5a, 0x0c, 0x0f, 0x5f, 0x44, 0x2e, 0xf3, 0xb3, 0xa3, 0x24, 0x40, 0x6f, 0xdf, 0xbd, 0x08, 0xfd, 0x56, 0x3c, 0x13, 0x76, 0x26, 0x64, 0x95, 0x06, 0x0e, 0x03, 0xaf, 0x7f, 0xf4, 0xfe, 0x8a, 0xf5, 0xae, 0x57, 0x25, 0x5c, 0x6a, 0x16, 0x31, 0xb6, 0xad, 0xb3, 0x4d, 0x37, 0x49, 0xc0, 0xaf, 0x64, 0xc1, 0xad, 0xa4, 0x34, 0x67, 0x9e, 0xef, 0xdb, 0x15, 0xb8, 0x9d, 0xeb, 0x08, 0x19, 0x50, 0xb9, 0xcb, 0x63, 0xbb, 0xda, 0x43, 0x41, 0x56, 0x32, 0x4a, 0x29, 0x50, 0x95, 0x97, 0x06, 0x21, 0x29, 0x74, 0xb7, 0xab, 0x58, 0xbc, 0x97, 0xc2, 0x8e, 0xd2, 0x9d, 0x74, 0xf4, 0x8b, 0x74, 0x0e, 0x04, 0x50, 0x48, 0x03, 0xb4, 0x5e, 0xf7, 0x23, 0xa4, 0xa4, 0xd3, 0x6b, 0xf6, 0xf1, 0xed, 0xb9, 0x45, 0x42, 0x32, 0xb9, 0x2c, 0x2f, 0x0d, 0x80, 0x2a, 0xa9, 0x7b, 0x05, 0x46, 0x66, 0xa0, 0xf1, 0x3b, 0xb0, 0xb9, 0x1e, 0xe2, 0xe9, 0xf2, 0x3d, 0xfc, 0x66, 0xf1, 0x62, 0x71, 0x48, 0x28, 0xdd, 0x75, 0x88, 0xba, 0x33, 0x97, 0x71, 0xfb, 0x34, 0x44, 0xc7, 0xe7, 0xb1, 0xbc, 0xea, 0xe7, 0xd7, 0xe9, 0xf5, 0x9e, 0xc6, 0xf3, 0x81, 0xf5, 0x91, 0x19, 0x70, 0xaf, 0x80, 0x2c, 0xc7, 0xb0, 0xcf, 0x63, 0x9b, 0x19, 0x2f, 0x9c, 0xb6, 0x83, 0x26, 0x2e, 0x51, 0xf0, 0x04, 0xd5, 0x0c, 0x0d, 0x0d, 0x21, 0x8a, 0x22, 0x15, 0x15, 0x7b, 0x18, 0x1e, 0x36, 0xd3, 0xd9, 0xd5, 0xc5, 0x80, 0xc9, 0xc4, 0x1f, 0x8e, 0x25, 0xc9, 0xb6, 0x34, 0x79, 0xd2, 0xf0, 0x64, 0x48, 0xb8, 0xbb, 0x02, 0x1a, 0xfd, 0xbe, 0xb3, 0x7f, 0x03, 0x88, 0x4d, 0x68, 0xa3, 0x57, 0x39, 0x38, 0x90, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/broom.png.h0000600000176000000410000001037612105760300021534 0ustar buildbotwww-data00000000000000/* broom.png - 668 bytes */ static const unsigned char broom_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xa6, 0x00, 0xb0, 0x00, 0xb5, 0x78, 0x71, 0x68, 0x5a, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1e, 0x12, 0x1a, 0x1c, 0xcc, 0x71, 0x63, 0x04, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0x0e, 0x17, 0x00, 0x00, 0x01, 0xf7, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x95, 0x93, 0x4f, 0x48, 0xd3, 0x71, 0x18, 0x87, 0x9f, 0xa5, 0x31, 0x0f, 0x11, 0x83, 0x39, 0x43, 0xcd, 0xfd, 0xc1, 0x6d, 0xa0, 0x52, 0x92, 0x7f, 0xb6, 0x65, 0x8b, 0xb6, 0x92, 0x1a, 0xf5, 0x73, 0x07, 0xc7, 0x2e, 0x59, 0x30, 0x62, 0xe0, 0x25, 0xa2, 0x22, 0xc9, 0xc2, 0x60, 0x15, 0x45, 0x05, 0x1e, 0x05, 0xa1, 0x5b, 0x74, 0x88, 0x82, 0xba, 0x04, 0x25, 0xe8, 0x7e, 0x2d, 0x56, 0x59, 0x50, 0x8d, 0x60, 0x5b, 0x2d, 0x88, 0x45, 0x2e, 0xb7, 0x31, 0x73, 0xc3, 0x4d, 0x2b, 0x84, 0x6f, 0x97, 0x02, 0x11, 0x9d, 0xed, 0x73, 0x7b, 0x2f, 0x0f, 0xcf, 0xe7, 0x7d, 0x79, 0x15, 0xc7, 0x4e, 0xf8, 0x85, 0xa6, 0xbe, 0x11, 0x65, 0x8d, 0x12, 0xc0, 0x79, 0xe3, 0xd2, 0xc5, 0x67, 0x54, 0x90, 0x4d, 0xf9, 0x42, 0x81, 0x73, 0x43, 0x43, 0xb8, 0xdd, 0x7d, 0x00, 0xf2, 0xf0, 0xd5, 0xeb, 0x8e, 0x8a, 0x00, 0x00, 0xb3, 0xb3, 0x69, 0x74, 0x3a, 0x03, 0x92, 0x74, 0x04, 0x21, 0x84, 0x7c, 0xfe, 0xca, 0xb5, 0xc1, 0x4a, 0x00, 0xce, 0xc0, 0xc8, 0x05, 0x66, 0x52, 0x29, 0x0c, 0x86, 0x66, 0x8e, 0x1f, 0x1d, 0x40, 0xa1, 0x50, 0x8c, 0xff, 0xaf, 0x49, 0x55, 0x22, 0x1e, 0x4b, 0x9a, 0x5b, 0xdb, 0xd2, 0xcf, 0xe5, 0xa0, 0xa4, 0x37, 0x9a, 0xd0, 0xe9, 0xf5, 0xfc, 0x5c, 0x2c, 0x91, 0xce, 0x64, 0x7c, 0x76, 0xe7, 0x81, 0xd0, 0x0b, 0x39, 0x98, 0x2c, 0x0b, 0x00, 0x48, 0xc4, 0x63, 0x6f, 0xcd, 0xad, 0x6d, 0xa1, 0x37, 0xaf, 0x5e, 0xfa, 0xf4, 0x46, 0x13, 0x16, 0x8b, 0x95, 0xa5, 0xa5, 0x45, 0x32, 0x99, 0xac, 0x6f, 0xef, 0xfe, 0xde, 0x50, 0x58, 0x9e, 0x4a, 0x96, 0x05, 0xfc, 0x85, 0x24, 0x57, 0x42, 0xac, 0x16, 0x2b, 0xa5, 0x52, 0x91, 0x6c, 0x36, 0x5b, 0xd6, 0xa4, 0x6a, 0xe5, 0xb0, 0x1a, 0x62, 0xb3, 0xda, 0x28, 0x16, 0x17, 0xc8, 0xe5, 0x72, 0x3e, 0x4b, 0x8f, 0x7d, 0x6b, 0xbd, 0x08, 0x4d, 0xb4, 0x68, 0x09, 0x18, 0xbb, 0xbd, 0x85, 0x44, 0x3c, 0x36, 0xbd, 0x6e, 0x2f, 0xc9, 0xe3, 0x75, 0x48, 0x1e, 0xaf, 0xb8, 0xf7, 0xf8, 0xa9, 0x48, 0xe5, 0x8b, 0xe2, 0xd1, 0x93, 0x49, 0x71, 0x6a, 0x78, 0x44, 0x14, 0xe2, 0x88, 0x44, 0x10, 0xd1, 0x6f, 0x47, 0xac, 0x69, 0xb0, 0xca, 0xa4, 0xe1, 0x43, 0xe4, 0x7d, 0xa7, 0x4a, 0x5d, 0x4b, 0xe3, 0xb6, 0x3a, 0x6a, 0x35, 0x9a, 0x5f, 0xb7, 0x6e, 0x2b, 0xab, 0x1d, 0x3b, 0xde, 0x31, 0x31, 0x05, 0x9f, 0x66, 0xb8, 0x0c, 0xa0, 0x28, 0xb7, 0x61, 0xc9, 0xe3, 0x1d, 0x04, 0xc6, 0x1b, 0xb4, 0x06, 0x5c, 0x87, 0x0e, 0xb2, 0x67, 0xfb, 0x61, 0xfc, 0xfe, 0xdf, 0x6c, 0xae, 0x66, 0xec, 0x61, 0x98, 0x93, 0x1b, 0xde, 0xb8, 0xcb, 0x8c, 0x78, 0x30, 0x8a, 0x90, 0x3c, 0x5e, 0x11, 0xbe, 0x8f, 0xf8, 0xfa, 0x1a, 0x31, 0x1f, 0x45, 0xb8, 0x77, 0x23, 0xfa, 0xed, 0x9c, 0x5e, 0xb7, 0xc2, 0xbf, 0xd4, 0xa9, 0x08, 0x34, 0xa9, 0xc1, 0xa8, 0x8e, 0x71, 0x73, 0x0c, 0x0a, 0xdf, 0xa1, 0xdb, 0x5e, 0xc3, 0x3e, 0xdb, 0x32, 0x93, 0x32, 0xae, 0x16, 0x2d, 0x5b, 0xca, 0x02, 0x3a, 0x9a, 0x31, 0x4d, 0x47, 0xd9, 0x19, 0xf9, 0x08, 0x1a, 0x15, 0x77, 0x22, 0x9f, 0x69, 0x9f, 0x4b, 0x2e, 0xd3, 0xde, 0x05, 0x73, 0xdf, 0x20, 0xfd, 0x83, 0x1e, 0x45, 0x25, 0x8f, 0xd3, 0xdb, 0xc1, 0x68, 0x2e, 0xcf, 0xd9, 0x3e, 0x3b, 0x44, 0xbf, 0x40, 0x7e, 0x61, 0x83, 0x25, 0xae, 0x15, 0x57, 0x27, 0x77, 0xd3, 0xf3, 0x0c, 0x00, 0x34, 0xed, 0xf2, 0x9e, 0xf9, 0x03, 0x16, 0x81, 0xcd, 0xba, 0x2e, 0xbb, 0x34, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/broom.xpm0000600000176000000410000000121012105760300021311 0ustar buildbotwww-data00000000000000/* XPM */ static const char * broom_xpm[] = { "16 16 18 1", " c None", ". c #000000", "+ c #E5F0F4", "@ c #B8C5C9", "# c #CCD7DC", "$ c #C9D5D9", "% c #8E9B9F", "& c #A8B4B8", "* c #9FAAAF", "= c #E7CD00", "- c #CFB300", "; c #525D61", "> c #545F63", ", c #FFE700", "' c #F6DE00", ") c #EED500", "! c #705400", "~ c #412F00", "... ", ".+@. ", ".#+@. ", " .$+$. ", " .@+%. ", " .@+%. ", " .@+%. ", " .@+%.... ", " .&+*.=-. ", " ..&;..-. ", " .>.,.. ", " .'.,.=. ", " .),.!,-..", " .....!=!.", " ..!~.", " ... "}; springlobby-0.169/src/images/broom_tab_icon.png.h0000600000176000000410000002770512105760300023376 0ustar buildbotwww-data00000000000000/* broom_tab_icon.png - 1901 bytes */ static const unsigned char broom_tab_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a, 0xf4, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64, 0x88, 0x00, 0x00, 0x07, 0x24, 0x49, 0x44, 0x41, 0x54, 0x58, 0x85, 0xed, 0x97, 0x49, 0x8c, 0x1d, 0x47, 0x19, 0xc7, 0x7f, 0x55, 0xfd, 0xba, 0xdf, 0xbe, 0xcc, 0xe2, 0x99, 0x79, 0x9e, 0xc5, 0x0b, 0x99, 0xd8, 0x43, 0x48, 0xc0, 0x36, 0x82, 0x83, 0x71, 0x42, 0x82, 0x51, 0x90, 0x92, 0x20, 0x45, 0x22, 0x11, 0xca, 0x09, 0x10, 0xe2, 0x80, 0x08, 0x02, 0x2e, 0x1c, 0x12, 0x60, 0x80, 0x1b, 0x12, 0x0a, 0xca, 0x21, 0x12, 0x12, 0x37, 0x0e, 0x20, 0x2c, 0x38, 0x00, 0x8a, 0xe0, 0x40, 0x36, 0x47, 0x82, 0x24, 0x0a, 0x4e, 0x2c, 0x93, 0xc4, 0x19, 0xc6, 0x63, 0x7b, 0x36, 0xcf, 0xf2, 0xe6, 0xad, 0xfd, 0xfa, 0xf5, 0x52, 0xf5, 0x71, 0x78, 0x8f, 0x24, 0xb6, 0xc6, 0x24, 0x0e, 0x70, 0x82, 0x4f, 0xfa, 0x5a, 0xea, 0xae, 0xaf, 0xeb, 0xff, 0xeb, 0xaa, 0xaf, 0xbe, 0xaa, 0x86, 0xff, 0x75, 0x53, 0xef, 0x16, 0x30, 0xff, 0x00, 0x5e, 0xa3, 0x95, 0xfd, 0xaa, 0xd2, 0xea, 0xcb, 0x4a, 0xe9, 0x59, 0x00, 0x11, 0xbb, 0x20, 0x56, 0x7e, 0x56, 0x29, 0x05, 0x4f, 0xcc, 0x9f, 0x22, 0xfa, 0xaf, 0x01, 0x7c, 0xe3, 0xee, 0x5c, 0x55, 0x21, 0xcf, 0x0e, 0x8d, 0x0c, 0x4d, 0xee, 0x9b, 0xae, 0xe6, 0x0a, 0xe9, 0x34, 0x46, 0x2c, 0xcd, 0x4e, 0xc0, 0xea, 0xda, 0x66, 0xb7, 0xd9, 0x68, 0xac, 0x0a, 0xea, 0x8e, 0x9f, 0xfc, 0xb1, 0xbb, 0xfe, 0x1f, 0x07, 0x98, 0x9f, 0x47, 0xb7, 0x5e, 0xc8, 0xbd, 0xba, 0x7f, 0x7a, 0x6a, 0xee, 0xe0, 0xcc, 0x98, 0xa3, 0x6d, 0x0f, 0xc4, 0x90, 0x24, 0x86, 0x30, 0x36, 0xc4, 0xe2, 0xb2, 0xbe, 0xdd, 0x34, 0xab, 0x6b, 0x1b, 0xaf, 0x97, 0x3e, 0xde, 0xfd, 0xf0, 0xfc, 0x3c, 0xf6, 0xfd, 0x00, 0x38, 0xd7, 0x6b, 0xb8, 0xd5, 0xcb, 0x7c, 0x71, 0xb4, 0x52, 0xfe, 0xfc, 0xdc, 0xcd, 0xd3, 0x19, 0x8f, 0x90, 0x62, 0x3e, 0x47, 0x3e, 0x9f, 0xc3, 0x75, 0x5d, 0x10, 0x21, 0xec, 0x75, 0x48, 0x67, 0xb2, 0xba, 0xd7, 0x8b, 0xb3, 0xb5, 0x05, 0x73, 0xe5, 0xc5, 0xc5, 0xe4, 0xcc, 0xfb, 0x01, 0x48, 0x5d, 0xaf, 0xc1, 0x75, 0xf4, 0x37, 0xa7, 0xa6, 0x26, 0x8a, 0xca, 0x84, 0xe4, 0x0a, 0x19, 0xca, 0xa5, 0x22, 0x69, 0xcf, 0xc3, 0x0f, 0x02, 0x8c, 0xb5, 0xf4, 0xc2, 0x1e, 0xbd, 0x4e, 0x97, 0xf1, 0xb1, 0xe1, 0x62, 0x5a, 0xf9, 0x8f, 0x3e, 0xff, 0xdd, 0x91, 0xcf, 0x8a, 0xc8, 0xed, 0x06, 0x29, 0x69, 0xa5, 0xda, 0x1a, 0x75, 0xda, 0x8a, 0xf9, 0xf1, 0xed, 0x3f, 0x6c, 0x3c, 0xfb, 0xbe, 0x00, 0x8c, 0x95, 0xd9, 0x62, 0x3e, 0x0b, 0xd2, 0xc3, 0x71, 0x34, 0xa9, 0x54, 0x8a, 0x6c, 0x36, 0x43, 0x18, 0x45, 0x68, 0xad, 0x50, 0x4a, 0x23, 0x26, 0x66, 0xa6, 0x92, 0x30, 0x37, 0x5a, 0x3a, 0xb0, 0x67, 0xdf, 0xa1, 0xfd, 0xf9, 0xf2, 0x5e, 0xe5, 0xa4, 0x5c, 0x92, 0xb0, 0x53, 0xe9, 0xd6, 0x57, 0xef, 0xad, 0x6d, 0x5c, 0xbe, 0xeb, 0xf4, 0xf7, 0xd4, 0xaf, 0xd7, 0x5f, 0xab, 0x7f, 0xe9, 0xc1, 0x53, 0x98, 0x1b, 0x02, 0xe8, 0x43, 0x58, 0x12, 0x6b, 0x08, 0xa3, 0x18, 0xbf, 0xdb, 0x25, 0x8a, 0x63, 0xc2, 0x5e, 0x48, 0x1c, 0xc5, 0x24, 0x49, 0xc2, 0x9e, 0x5c, 0xc8, 0x68, 0xb9, 0xc2, 0xd4, 0xdc, 0xa7, 0xd1, 0x88, 0x12, 0x13, 0x21, 0x49, 0x0f, 0x8d, 0xa1, 0x50, 0x19, 0x57, 0xb9, 0xf2, 0x9e, 0xfc, 0xc6, 0xe5, 0xd7, 0x3e, 0x57, 0x9d, 0x53, 0x21, 0xec, 0x7c, 0x65, 0x37, 0x0d, 0x7d, 0x3d, 0x71, 0x47, 0xab, 0x85, 0x9d, 0x7a, 0x83, 0x30, 0x36, 0x74, 0x3a, 0x3e, 0xcd, 0x66, 0x8b, 0x9d, 0x7a, 0x83, 0x66, 0xab, 0x4d, 0xa7, 0xdb, 0xc5, 0xc6, 0x3e, 0x95, 0x82, 0xc3, 0xf4, 0x07, 0x4f, 0xa0, 0xc4, 0xa0, 0x52, 0x19, 0x9c, 0xfc, 0x38, 0xa9, 0xc2, 0x5e, 0x9c, 0xec, 0x48, 0x3f, 0xbd, 0xe3, 0x36, 0x13, 0x33, 0x87, 0x73, 0x8e, 0xeb, 0x3d, 0x78, 0xfa, 0x3b, 0xe5, 0x63, 0x37, 0x04, 0x10, 0x1b, 0xfb, 0xd8, 0xfa, 0x66, 0xcd, 0x8f, 0xc5, 0xa5, 0xdd, 0xf1, 0xa9, 0x37, 0x9a, 0xd4, 0xeb, 0x0d, 0xea, 0xcd, 0x26, 0xad, 0x76, 0x87, 0x82, 0x1b, 0x30, 0x3e, 0x7d, 0x08, 0x4c, 0x8c, 0x4e, 0x65, 0x71, 0x72, 0x63, 0xb8, 0xc5, 0x29, 0x52, 0x85, 0x2a, 0x4e, 0x76, 0x04, 0xed, 0x95, 0x41, 0xa5, 0xb0, 0x61, 0x83, 0x91, 0xf1, 0x7d, 0x65, 0xe5, 0x38, 0xdf, 0xbf, 0x21, 0x80, 0x05, 0xdd, 0x7b, 0x6a, 0xab, 0xe5, 0x3b, 0xab, 0x1b, 0x35, 0x62, 0x9d, 0xa3, 0xd5, 0x8d, 0xa8, 0x37, 0x5a, 0x34, 0x9a, 0x6d, 0x7a, 0x91, 0xa5, 0x90, 0x86, 0x5c, 0x79, 0x02, 0x6c, 0x84, 0x4a, 0xa5, 0xd1, 0x5e, 0x01, 0x27, 0x3f, 0x81, 0xce, 0x0c, 0xa1, 0x52, 0x39, 0x94, 0xe3, 0xa1, 0x74, 0x0a, 0x89, 0xba, 0x64, 0x8b, 0x23, 0x88, 0xc8, 0x89, 0xdd, 0x74, 0x76, 0xcd, 0x81, 0xbb, 0xee, 0x76, 0x8f, 0x26, 0x4a, 0x3f, 0x1d, 0x4e, 0x4e, 0xb8, 0x6b, 0x9b, 0x35, 0x3a, 0x41, 0x48, 0x75, 0x6c, 0x88, 0x7c, 0xbe, 0x44, 0x0a, 0xf0, 0x7b, 0x01, 0x22, 0x1d, 0x74, 0xca, 0xc5, 0x46, 0x3e, 0xda, 0x26, 0x48, 0xd2, 0xc3, 0x86, 0x75, 0xc4, 0x44, 0x88, 0x89, 0xc0, 0x26, 0x88, 0x18, 0xac, 0x89, 0xf0, 0x52, 0x1e, 0xd6, 0x52, 0x7c, 0x4f, 0x00, 0x27, 0x4f, 0x66, 0x0e, 0x6a, 0x57, 0x3f, 0xfd, 0x91, 0xa3, 0x87, 0x4b, 0x42, 0x9b, 0x4b, 0x71, 0x84, 0x1f, 0x41, 0xe3, 0xf2, 0x2a, 0x2a, 0xb2, 0x20, 0x60, 0x5c, 0xcd, 0x6c, 0xd9, 0xc3, 0x84, 0x6d, 0xb4, 0x8d, 0xb1, 0x61, 0x13, 0xa3, 0x53, 0x48, 0x12, 0x20, 0xd6, 0x60, 0xc3, 0x26, 0x36, 0xee, 0x20, 0x71, 0x80, 0x42, 0x30, 0x49, 0x88, 0x52, 0xb4, 0xde, 0x0b, 0x80, 0x12, 0xcf, 0xfc, 0xee, 0xd6, 0xdb, 0x0e, 0x15, 0x8c, 0xad, 0xd1, 0xf1, 0x37, 0x28, 0x94, 0x85, 0x30, 0x36, 0x64, 0x0e, 0x54, 0x58, 0x3c, 0xbf, 0x85, 0x49, 0x84, 0x62, 0x25, 0xc3, 0x26, 0x9a, 0xe9, 0xfa, 0x3a, 0x85, 0x52, 0x05, 0x13, 0x6c, 0x23, 0x36, 0x46, 0x39, 0x69, 0x10, 0x8b, 0x8d, 0x7d, 0x6c, 0xaf, 0x81, 0x0d, 0x9b, 0xe8, 0x74, 0x89, 0xa0, 0x53, 0x13, 0xb1, 0x7a, 0xd7, 0x7a, 0x70, 0x15, 0xc0, 0xed, 0x27, 0x9d, 0xfb, 0xc7, 0xc7, 0xaa, 0x53, 0xae, 0x17, 0xe9, 0xed, 0x9d, 0x2b, 0x38, 0x8e, 0x22, 0x9d, 0x56, 0x78, 0x69, 0x83, 0x89, 0x9b, 0x0c, 0x8d, 0x28, 0xc4, 0x82, 0x97, 0x4d, 0x38, 0x97, 0x58, 0xaa, 0xeb, 0x97, 0xb8, 0xb9, 0x3c, 0x8a, 0x0d, 0xeb, 0xd8, 0xc8, 0x47, 0x39, 0xfd, 0x2a, 0x29, 0x49, 0x80, 0x8d, 0xda, 0xa0, 0x34, 0x3a, 0x3b, 0xc2, 0xc6, 0xc5, 0x97, 0x83, 0x95, 0x56, 0xf2, 0x83, 0x77, 0x05, 0x48, 0xb9, 0xea, 0x5b, 0x53, 0x53, 0xe3, 0xa5, 0x5a, 0xfd, 0x3c, 0xd6, 0x82, 0xd2, 0x02, 0x56, 0xa1, 0x35, 0x68, 0x9d, 0x30, 0x34, 0xac, 0x00, 0x85, 0x08, 0xbc, 0xb8, 0xfe, 0x49, 0x74, 0x2e, 0x22, 0x9d, 0x5e, 0x60, 0xe6, 0xc0, 0x2c, 0x12, 0xd6, 0x31, 0xfe, 0x0e, 0x62, 0x62, 0x94, 0x76, 0xd0, 0x99, 0x0a, 0x2a, 0x33, 0xc4, 0xc5, 0xc5, 0x37, 0x79, 0x72, 0xe9, 0x80, 0xf7, 0x8b, 0x8d, 0x7b, 0x66, 0xe0, 0xd1, 0x97, 0xaf, 0x05, 0xb8, 0x6a, 0x2f, 0x98, 0x3d, 0x9c, 0x7d, 0x7c, 0x6a, 0x6a, 0x8f, 0x57, 0x6f, 0xae, 0x11, 0x47, 0xe0, 0xbc, 0xd5, 0xda, 0x17, 0xb5, 0x02, 0xd6, 0x2a, 0xce, 0xae, 0xde, 0x8f, 0xaf, 0x4e, 0xe0, 0xee, 0xbf, 0x07, 0xeb, 0xaf, 0x90, 0x6d, 0xfe, 0x15, 0x37, 0x5d, 0xc0, 0x2d, 0x8e, 0xe3, 0xe6, 0xc7, 0xb1, 0x6e, 0x01, 0xbf, 0xeb, 0xb3, 0xbc, 0xb4, 0xc0, 0x99, 0xf6, 0xcd, 0x9c, 0xb6, 0x0f, 0xe8, 0x56, 0x20, 0xf7, 0x96, 0x3f, 0x70, 0xe7, 0x72, 0x63, 0xe1, 0x4f, 0x67, 0xaf, 0x9a, 0xf3, 0x77, 0xde, 0xdc, 0x7d, 0x5f, 0x31, 0x39, 0x7a, 0xec, 0x90, 0xb3, 0xf0, 0xf7, 0xb3, 0x64, 0xb2, 0x0a, 0xd7, 0x05, 0xa5, 0x41, 0xa9, 0xbe, 0xa3, 0xe0, 0x52, 0xe3, 0x38, 0xf5, 0xe4, 0x3e, 0x0e, 0xcd, 0xcd, 0xb1, 0xb2, 0x1d, 0x12, 0x86, 0x5d, 0x3e, 0x36, 0xb6, 0xcc, 0x2d, 0xd1, 0x1f, 0x98, 0xcd, 0x5c, 0x40, 0x99, 0x00, 0xab, 0x33, 0x2c, 0xf5, 0x26, 0xf9, 0x73, 0x70, 0x9c, 0x2b, 0xfa, 0x30, 0xd6, 0x29, 0x51, 0xf0, 0x34, 0xaf, 0x9c, 0x5b, 0x6c, 0x27, 0x56, 0x4e, 0x2e, 0xfd, 0xfe, 0xdb, 0x2f, 0xee, 0x36, 0x05, 0xa9, 0x24, 0x0e, 0xb7, 0x44, 0xbc, 0x89, 0x24, 0x71, 0x81, 0x04, 0x63, 0x40, 0xd9, 0xb7, 0xc5, 0x23, 0x5b, 0x64, 0xb9, 0x79, 0x27, 0x47, 0x8e, 0x1c, 0x62, 0x79, 0x2b, 0xa0, 0x97, 0x08, 0x3a, 0x95, 0xe7, 0x8a, 0x7b, 0x84, 0x97, 0xae, 0x8c, 0xf2, 0xc8, 0xfd, 0xfb, 0x71, 0x55, 0x0c, 0xc0, 0xcf, 0x7f, 0xf9, 0x37, 0x8a, 0xa3, 0x13, 0x74, 0xe2, 0x34, 0x9d, 0x46, 0x17, 0x55, 0xc9, 0x30, 0x7b, 0xd3, 0x64, 0xf1, 0xf5, 0xf3, 0xcb, 0xa7, 0x78, 0xe0, 0x57, 0x07, 0x39, 0xf5, 0xa0, 0x81, 0xab, 0x0b, 0x51, 0x2a, 0x08, 0xcc, 0x6f, 0x2e, 0x2c, 0xae, 0x44, 0x7b, 0xab, 0xfb, 0x50, 0xca, 0xc1, 0x18, 0x48, 0x0c, 0x24, 0x09, 0x98, 0x04, 0x96, 0x76, 0xee, 0xa0, 0x3a, 0x39, 0x49, 0xb3, 0x1b, 0x11, 0x84, 0x31, 0x08, 0x88, 0x08, 0x2b, 0xdb, 0x21, 0x2a, 0x53, 0x65, 0xdb, 0x8e, 0x71, 0xe4, 0xc8, 0x11, 0xc6, 0x67, 0xe6, 0xe8, 0xa6, 0xa7, 0xd9, 0xf2, 0x5d, 0xfc, 0x6e, 0xff, 0xc0, 0xb4, 0x51, 0xef, 0x90, 0xcb, 0x64, 0x28, 0x16, 0x73, 0xc3, 0x07, 0x7a, 0x4b, 0x0f, 0xfd, 0x53, 0xf4, 0x9d, 0x00, 0xc9, 0xb9, 0x33, 0xe6, 0xb1, 0xf5, 0xb5, 0xb5, 0x46, 0x18, 0xc4, 0x76, 0x66, 0xea, 0x56, 0xf6, 0x8c, 0xee, 0x67, 0xb8, 0x32, 0x49, 0xa5, 0x5c, 0xa5, 0x5c, 0xaa, 0x52, 0x0f, 0x6f, 0x61, 0x74, 0x68, 0x88, 0x46, 0xbb, 0x87, 0x88, 0xc5, 0x26, 0x21, 0x62, 0x13, 0x4c, 0x9c, 0x60, 0x4c, 0xc4, 0x53, 0x67, 0x37, 0x51, 0x4a, 0xf1, 0xd2, 0xc2, 0x0e, 0x28, 0x30, 0xc6, 0x20, 0x62, 0xfb, 0xb1, 0x56, 0xd8, 0x6e, 0xf9, 0xec, 0x1d, 0xab, 0x14, 0xb0, 0xf2, 0xb5, 0xdd, 0xa6, 0x20, 0x69, 0xb5, 0xd8, 0x5c, 0x5d, 0xe1, 0x21, 0xad, 0x2e, 0xfc, 0x74, 0x6d, 0x7d, 0xbd, 0x3a, 0x32, 0x52, 0x4e, 0x7b, 0x9e, 0xeb, 0x38, 0x4e, 0x9f, 0x33, 0x4c, 0xd2, 0xa4, 0x5d, 0x87, 0x28, 0x8a, 0x30, 0xd6, 0xa0, 0x18, 0x6c, 0xcb, 0xca, 0x80, 0x52, 0xbc, 0x71, 0xb9, 0xc6, 0xda, 0xc6, 0x0e, 0x67, 0xde, 0xdc, 0x40, 0x4c, 0xbf, 0x12, 0x8a, 0xed, 0x7b, 0xd2, 0x6b, 0xd3, 0x55, 0x39, 0x46, 0xc7, 0x8a, 0x08, 0xf6, 0x43, 0xbb, 0x01, 0x00, 0xb4, 0x2e, 0xbc, 0x99, 0xfc, 0x65, 0xf5, 0x12, 0x9f, 0x99, 0x3a, 0x10, 0x1c, 0x2f, 0x95, 0x82, 0x13, 0x8e, 0xc3, 0x24, 0x8a, 0x92, 0x08, 0x29, 0x86, 0xed, 0xb1, 0x28, 0x8e, 0x1d, 0x47, 0x0b, 0x41, 0x73, 0x8b, 0x4c, 0x71, 0x1c, 0x6b, 0x62, 0x50, 0x0a, 0x85, 0x42, 0x80, 0x33, 0x0b, 0x9b, 0x2c, 0xae, 0x36, 0x10, 0x13, 0xbf, 0xf5, 0xf5, 0x62, 0x0d, 0x22, 0x42, 0xd2, 0x6b, 0x03, 0x39, 0x10, 0xe5, 0x5c, 0x0f, 0x00, 0xc0, 0x0f, 0x43, 0x16, 0x17, 0xdf, 0x30, 0x1b, 0xc0, 0x73, 0x40, 0x11, 0xc8, 0x03, 0xe9, 0xe9, 0x93, 0xe1, 0x8f, 0xb6, 0x6b, 0xcd, 0x8f, 0x56, 0x32, 0x5a, 0xb5, 0xad, 0xc5, 0xda, 0x04, 0xc4, 0xa0, 0x94, 0x42, 0x06, 0x0b, 0xea, 0x95, 0xc5, 0x1a, 0x9b, 0x0d, 0xbf, 0x5f, 0x90, 0xc4, 0xc2, 0x00, 0x42, 0x3b, 0x0e, 0x5e, 0x54, 0xa3, 0xde, 0xc8, 0xa3, 0x14, 0x4b, 0xff, 0x0a, 0x00, 0x40, 0x80, 0xf6, 0xc0, 0xd5, 0x20, 0x2e, 0x25, 0xbd, 0xf6, 0xc3, 0x97, 0x96, 0x37, 0x9f, 0x3e, 0xbc, 0xaf, 0x98, 0xad, 0x8e, 0x0d, 0xd3, 0x0e, 0x2d, 0x89, 0x11, 0xac, 0xbc, 0xfd, 0xe2, 0x0b, 0x6f, 0xd4, 0x06, 0xc3, 0x2f, 0x20, 0x16, 0xa5, 0x84, 0x4c, 0x4a, 0x33, 0x54, 0xcc, 0x13, 0xb7, 0x32, 0x5c, 0xbc, 0xbc, 0xd9, 0x8d, 0xfd, 0xd6, 0x13, 0x83, 0xfc, 0xb3, 0xef, 0xfa, 0x5f, 0x70, 0x8d, 0x95, 0x26, 0x3f, 0xf1, 0xf0, 0xd7, 0xd3, 0xc5, 0x3d, 0x8f, 0xec, 0x9b, 0x99, 0x48, 0x0f, 0x97, 0x73, 0xca, 0x73, 0x5d, 0x94, 0x73, 0x4d, 0x37, 0x32, 0xb8, 0x0c, 0x20, 0xba, 0x61, 0x4c, 0xbd, 0xd9, 0x93, 0x95, 0xb5, 0xed, 0x28, 0x68, 0x6f, 0x3c, 0xb9, 0xf6, 0xdc, 0xe3, 0xf3, 0xc0, 0x32, 0x50, 0xbf, 0x51, 0x00, 0x0f, 0xd8, 0x3b, 0x74, 0xd3, 0xa7, 0x8e, 0xe7, 0x26, 0x6f, 0xfb, 0x42, 0x2a, 0x53, 0x39, 0xaa, 0xb4, 0x93, 0x97, 0x7e, 0x45, 0x55, 0x20, 0xd7, 0xf4, 0xa7, 0x04, 0x41, 0x90, 0x24, 0x48, 0xba, 0xf5, 0x05, 0x7f, 0xf5, 0xd5, 0xdf, 0x36, 0x2e, 0x3c, 0xf3, 0x0c, 0xb0, 0x02, 0x5c, 0x04, 0xcc, 0x8d, 0x02, 0xd0, 0x17, 0xa2, 0x04, 0x8c, 0x0f, 0x7c, 0x18, 0x28, 0xd3, 0xcf, 0x95, 0x2c, 0xe0, 0x0e, 0x62, 0x12, 0xa0, 0x07, 0x74, 0x80, 0x16, 0xb0, 0x05, 0xac, 0x02, 0x57, 0x06, 0xcf, 0xde, 0xea, 0xec, 0xdf, 0x35, 0x17, 0x48, 0xd3, 0x1f, 0x1d, 0x8f, 0x7e, 0xbe, 0x08, 0x10, 0x0f, 0x3c, 0x1a, 0x80, 0xec, 0x7a, 0x2a, 0xfe, 0xbf, 0xfd, 0x03, 0x09, 0x15, 0xa5, 0xeb, 0xa3, 0xf8, 0x6f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/channel.xpm0000600000176000000410000000050612105760300021612 0ustar buildbotwww-data00000000000000/* XPM */ static const char * channel_xpm[] = { "12 12 5 1", " c None", ". c #000000", "+ c #FFFDEA", "@ c #A49300", "# c #FFE400", " .. .. ", " .++..++. ", " ..+@..#@.. ", ".++##++###@.", ".+##@@@#@@@.", " ..+@..+@.. ", " ..+@..+@.. ", ".+###++####.", ".+##@@@#@@@.", " ..+@..+@.. ", " .+@..+@. ", " .. .. "}; springlobby-0.169/src/images/channel_options.xpm0000600000176000000410000000116312105760300023365 0ustar buildbotwww-data00000000000000/* XPM */ static const char* channel_options_xpm[] = { "16 16 16 1", " c None", ". c #000000", "+ c #FFFDEA", "@ c #A49300", "# c #FFE400", "$ c #BABABA", "% c #514800", "& c #949494", "* c #A9A9A9", "= c #7E7000", "- c #767676", "; c #878787", "> c #BBBBBB", ", c #7E7D73", "' c #5E5E5E", ") c #696969", " .. .. ", " .++..++. ", " ..+@..#@.. ", ".++##++###@. ", ".+##@@@#..... ", " ..+@..+.$$$... ", " ..+@..+%.&*$$..", ".+###++##=.&&*&.", ".+##..%#@@%.-&;.", " ..+.>.,@...-&'.", " .+.$$.%...-&'.", " ..&*$...*-&'.", " ..&*$$$*&&&.", " .-&&&&&&&&)", " ..'''''&&&&", " .......)&&"}; springlobby-0.169/src/images/chanop.xpm0000600000176000000410000000076212105760300021456 0ustar buildbotwww-data00000000000000/* XPM */ static const char * chanop_xpm[] = { "16 16 8 1", " c None", ". c #C5FFC5", "+ c #A8FFA8", "@ c #3CFF3C", "# c #00DB00", "$ c #00AB00", "% c #005C00", "& c #008000", " ", " ", " .+@####### ", " .$%%%%%%%%#& ", " +% #& ", " @% .@###& #& ", " #% @&&&$& #& ", " #% #& $& #& ", " #% #$$$$& #& ", " #% &&&&&###& ", " #% &&& ", " #$#### ", " &&&&& ", " ", " ", " "}; springlobby-0.169/src/images/chanop_away.xpm0000600000176000000410000000110312105760300022465 0ustar buildbotwww-data00000000000000/* XPM */ static const char * chanop_away_xpm[] = { "16 16 13 1", " c None", ". c #C5FFC5", "+ c #A8FFA8", "@ c #3CFF3C", "# c #00DB00", "$ c #00AB00", "% c #005C00", "& c #008000", "* c #767676", "= c #353535", "- c #000000", "; c #7B7B7B", "> c #EDE7E7", " ", " ", " .+@####### ", " .$%%%%%%%%#& ", " +% #& ", " @% .@###& #& ", " #% @&&&$& #& ", " #% #& *=-=* ", " #% #$$=;>->;= ", " #% &&*;>>->>;*", " #% =>>>->>>=", " #$###->>>--->-", " &&&&=>>>>>>>=", " *;>>>>>; ", " =;>>>;= ", " *=-= "}; springlobby-0.169/src/images/chanop_broom.xpm0000600000176000000410000000110412105760300022643 0ustar buildbotwww-data00000000000000/* XPM */ static const char * chanop_broom_xpm[] = { "16 16 13 1", " c None", ". c #7E7E7E", "+ c #000000", "@ c #FFFFFF", "# c #00DB00", "$ c #BCBCBC", "% c #005C00", "& c #008000", "* c #FFEAAC", "= c #BC8E00", "- c #00AB00", "; c #FFD75F", "> c #705400", " ", " .+++ ", " +.@@+####### ", " +$.$@+%%%%%#& ", " +.$.$@+ #& ", " +.$.$@+#& #& ", " #+.$.$@+& #& ", " #%+.$.$@+ +& ", " #% +.$.$@+*+ ", " #% &+.$.$*=+ ", " #% +.$$=+ ", " #-####+;=>>+ ", " &&&&+;=+>>>+ ", " ++ +>>> ", " +>; ", " "}; springlobby-0.169/src/images/chanop_ingame.xpm0000600000176000000410000000116212105760300022771 0ustar buildbotwww-data00000000000000/* XPM */ static const char * chanop_ingame_xpm[] = { "16 16 16 1", " c None", ". c #C5FFC5", "+ c #A8FFA8", "@ c #3CFF3C", "# c #00DB00", "$ c #00AB00", "% c #005C00", "& c #008000", "* c #7E7E7E", "= c #000000", "- c #FFFFFF", "; c #BCBCBC", "> c #FFEAAC", ", c #BC8E00", "' c #705400", ") c #FFD75F", " .+@####### ", " .$%%%%%%%%#&", "*===+% ===*#&", "=*--=% .@=--*=#&", "=;*;-= @=-;*;=#&", "=*;*;-==-;*;*=#&", " =*;*;-=;*;*= #&", " =*;*;-=;*=###&", " ==*;*;-===&&& ", " =>==*;*;-=>= ", " =,>;=*;*;>,= ", " =,;;=*;;,= ", " ='',)==),''= ", "='''=,)),='''= ", "'''= ==== =''' ", ")'= =') "}; springlobby-0.169/src/images/chat_icon.png.h0000600000176000000410000006524712105760300022354 0ustar buildbotwww-data00000000000000/* chat_icon.png - 4267 bytes */ static const unsigned char chat_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a, 0xf4, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0d, 0xd7, 0x00, 0x00, 0x0d, 0xd7, 0x01, 0x42, 0x28, 0x9b, 0x78, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x0a, 0x07, 0x15, 0x29, 0x2e, 0x67, 0xa3, 0xe7, 0x45, 0x00, 0x00, 0x10, 0x2b, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0x01, 0x20, 0x10, 0xdf, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x78, 0x78, 0x29, 0x31, 0x31, 0x31, 0x06, 0x1f, 0x1f, 0x1f, 0xfb, 0xd6, 0xd6, 0xd6, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x73, 0x73, 0x4e, 0x5b, 0x5b, 0x5b, 0xa7, 0xf9, 0xf9, 0xf9, 0x05, 0xe5, 0xe5, 0xe5, 0xd1, 0xe7, 0xe7, 0xe7, 0xd3, 0xde, 0xde, 0xde, 0xc0, 0xf8, 0xf8, 0xf8, 0xbf, 0xf3, 0xf3, 0xf3, 0xe9, 0xa4, 0xa4, 0xa4, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x19, 0x19, 0x4a, 0x25, 0x25, 0x25, 0x0a, 0x03, 0x03, 0x03, 0x00, 0x33, 0x33, 0x33, 0x34, 0xfb, 0xfb, 0xfb, 0x34, 0xf6, 0xf6, 0xf6, 0x60, 0xe0, 0xe0, 0xe0, 0xff, 0xe4, 0xe4, 0xe4, 0xd9, 0x35, 0x35, 0x35, 0xc9, 0xeb, 0xeb, 0xeb, 0xbf, 0xe2, 0xe2, 0xe2, 0xd2, 0xeb, 0xeb, 0xeb, 0xd1, 0xb7, 0xb7, 0xb7, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x69, 0x69, 0x0e, 0x0a, 0x0a, 0x0a, 0xf8, 0xf2, 0xf2, 0xf2, 0xfc, 0x9b, 0x9b, 0x9b, 0xfe, 0x52, 0x52, 0x52, 0x06, 0x53, 0x53, 0x53, 0xc0, 0x54, 0x54, 0x54, 0x39, 0xfc, 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xf0, 0xf0, 0xf0, 0x00, 0xeb, 0xeb, 0xeb, 0xf7, 0xe0, 0xe0, 0xe0, 0xef, 0xe1, 0xe1, 0xe1, 0xbc, 0xeb, 0xeb, 0xeb, 0x8b, 0x83, 0x83, 0x83, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0x7a, 0x7a, 0x24, 0x3c, 0x3c, 0x3c, 0xc0, 0x03, 0x03, 0x03, 0x08, 0xe4, 0xe4, 0xe4, 0xc2, 0x26, 0x26, 0x26, 0xc6, 0xe2, 0xe2, 0xe2, 0xda, 0x1c, 0x1c, 0x1c, 0x34, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xfa, 0xfa, 0x00, 0xff, 0xff, 0xff, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0x0c, 0x0c, 0x0c, 0x09, 0x22, 0x22, 0x22, 0x09, 0x06, 0x06, 0x06, 0x5d, 0xa9, 0xa9, 0xa9, 0xfe, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x3e, 0x3e, 0x3e, 0x1b, 0x04, 0x04, 0x04, 0x00, 0x02, 0x02, 0x02, 0x51, 0xf2, 0xf2, 0xf2, 0x51, 0xf0, 0xf0, 0xf0, 0xfd, 0xe2, 0xe2, 0xe2, 0x03, 0xbe, 0xbe, 0xbe, 0x00, 0x0a, 0x0a, 0x0a, 0x00, 0x19, 0x19, 0x19, 0x00, 0x10, 0x10, 0x10, 0x00, 0x0c, 0x0c, 0x0c, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x01, 0xec, 0xec, 0xec, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x22, 0x41, 0x04, 0x04, 0x04, 0x00, 0xfd, 0xfd, 0xfd, 0x00, 0xfd, 0xfd, 0xfd, 0x00, 0x08, 0x08, 0x08, 0x00, 0x1a, 0x1a, 0x1a, 0x03, 0x1b, 0x1b, 0x1b, 0x00, 0x02, 0x02, 0x02, 0x00, 0xf8, 0xf8, 0xf8, 0x00, 0xe5, 0xe5, 0xe5, 0x00, 0xdb, 0xdb, 0xdb, 0x00, 0xf4, 0xf4, 0xf4, 0x00, 0x03, 0x03, 0x03, 0x00, 0x2f, 0x2f, 0x2f, 0x00, 0x06, 0x06, 0x06, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xea, 0xea, 0x00, 0xf3, 0xf3, 0xf3, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x55, 0x0b, 0x1b, 0x1b, 0x1b, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0x01, 0x01, 0x01, 0x00, 0x1c, 0x1c, 0x1c, 0x00, 0x20, 0x20, 0x20, 0x00, 0xff, 0xff, 0xff, 0x00, 0xef, 0xef, 0xef, 0x00, 0xe2, 0xe2, 0xe2, 0x00, 0x25, 0x25, 0x25, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x03, 0x03, 0x03, 0x00, 0xeb, 0xeb, 0xeb, 0xef, 0xe1, 0xe1, 0xe1, 0xda, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x12, 0x2a, 0x1e, 0x1e, 0x1e, 0x17, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfb, 0xfb, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xf8, 0xf8, 0x00, 0x06, 0x06, 0x06, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0xe5, 0xe5, 0xe5, 0xe0, 0xd8, 0xd8, 0xd8, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x70, 0x00, 0x07, 0x07, 0x06, 0x00, 0x0e, 0xf9, 0xfa, 0x00, 0xf7, 0x7f, 0x90, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x1a, 0x1a, 0x35, 0x15, 0x15, 0x15, 0x05, 0xfd, 0xfd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x02, 0x02, 0x02, 0x00, 0xe8, 0xe8, 0xe8, 0x00, 0x22, 0x22, 0x22, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0xe3, 0xe3, 0xc3, 0xc6, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x8d, 0x80, 0x09, 0x01, 0x19, 0x16, 0x13, 0x52, 0x26, 0x2b, 0x4d, 0x6d, 0x10, 0x11, 0x1a, 0x29, 0x0a, 0x09, 0x08, 0x06, 0xf9, 0xf9, 0xf6, 0xfb, 0x4e, 0x52, 0xe9, 0xe6, 0xdd, 0xd8, 0xbc, 0x9d, 0xe8, 0xf9, 0x12, 0x39, 0x0f, 0x0f, 0x0f, 0x00, 0xf9, 0xf9, 0xf9, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x00, 0xf4, 0xf4, 0xf4, 0x00, 0x05, 0x05, 0x05, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf3, 0xf3, 0xf3, 0xff, 0xed, 0xeb, 0xda, 0xd1, 0xa4, 0x94, 0x24, 0x12, 0xd3, 0xcd, 0xdc, 0xf3, 0x89, 0x9f, 0x00, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcb, 0xc0, 0x68, 0xbd, 0x25, 0x28, 0x36, 0x42, 0x0a, 0x08, 0xfc, 0x00, 0xfe, 0xfd, 0xf4, 0x00, 0x00, 0xff, 0xfa, 0x00, 0xff, 0xfe, 0xf2, 0x00, 0x00, 0xfd, 0xf7, 0x00, 0xfb, 0xf7, 0x11, 0x00, 0xc4, 0xd6, 0x2b, 0xfd, 0x3d, 0x3f, 0x46, 0x03, 0xfd, 0xfd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x00, 0xc5, 0xc5, 0xc5, 0x00, 0x3b, 0x3b, 0x3b, 0x00, 0xff, 0xff, 0xff, 0x00, 0x03, 0x03, 0x03, 0x00, 0xfd, 0xfd, 0xfd, 0x00, 0xdb, 0xdb, 0xd9, 0xff, 0x14, 0x0b, 0xbd, 0xec, 0x0c, 0x09, 0xfa, 0xf9, 0xf4, 0xf1, 0xf7, 0xdb, 0xde, 0xdd, 0xd1, 0x9f, 0xca, 0xcb, 0xba, 0xa6, 0x04, 0x2e, 0x2e, 0x33, 0x42, 0x00, 0x02, 0x00, 0x00, 0x01, 0x02, 0x0e, 0x00, 0x03, 0x02, 0x0e, 0x00, 0xff, 0xfe, 0xf6, 0x00, 0xff, 0xfd, 0x06, 0x00, 0xfc, 0xfe, 0xeb, 0x00, 0xe7, 0xeb, 0xe0, 0x00, 0x19, 0x19, 0x45, 0x03, 0x04, 0x04, 0x04, 0x00, 0xfd, 0xfd, 0xfd, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf0, 0xf0, 0xf0, 0xff, 0xc0, 0xc0, 0xc0, 0xa2, 0x2e, 0x2e, 0x2e, 0x59, 0x01, 0x01, 0x01, 0x05, 0xcb, 0xca, 0xc3, 0xfe, 0x1c, 0x1d, 0x22, 0x03, 0xe5, 0xe2, 0xcc, 0x01, 0x2a, 0x3f, 0x10, 0x15, 0xe6, 0xe5, 0xe0, 0x00, 0xfe, 0xfa, 0xec, 0x1c, 0x37, 0x2c, 0x2a, 0x38, 0x14, 0x0e, 0x11, 0x33, 0x04, 0x00, 0x01, 0xfe, 0x00, 0xf6, 0xf8, 0x0c, 0x00, 0xcc, 0xd0, 0xec, 0x00, 0x02, 0x02, 0x02, 0x00, 0x3d, 0x38, 0x19, 0x00, 0xd0, 0xd3, 0xe8, 0x00, 0xee, 0xee, 0xf7, 0x00, 0x12, 0x0c, 0xfe, 0x00, 0xe9, 0xe7, 0xab, 0x00, 0xe2, 0xdc, 0xd1, 0x00, 0x2e, 0x36, 0x46, 0x00, 0x12, 0x12, 0x13, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0xfd, 0xfd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0xe6, 0xe6, 0xe6, 0xe9, 0xcc, 0xcc, 0xcc, 0x8b, 0xb3, 0xb2, 0xa9, 0x09, 0x27, 0x28, 0x2d, 0x54, 0x1c, 0x16, 0xde, 0x03, 0xb2, 0xaf, 0xb2, 0x00, 0xc1, 0xc3, 0xd6, 0x00, 0x40, 0x40, 0x7b, 0x00, 0x82, 0x8a, 0xa7, 0x00, 0x01, 0xfd, 0xf0, 0x00, 0x9e, 0x88, 0x35, 0x09, 0x26, 0x12, 0x08, 0x69, 0x04, 0x01, 0x01, 0x06, 0x00, 0xfc, 0xfc, 0x06, 0x00, 0x3e, 0x3d, 0x38, 0x00, 0xf2, 0xf3, 0xf8, 0x00, 0xfb, 0xfd, 0xf0, 0x00, 0x1e, 0x1c, 0x11, 0x00, 0x2e, 0x28, 0x02, 0x00, 0xe4, 0xe4, 0xf9, 0x00, 0x23, 0x12, 0xe5, 0x00, 0xd9, 0xd4, 0xe2, 0x00, 0x01, 0x00, 0x45, 0x00, 0xed, 0xed, 0xed, 0xff, 0xc0, 0xc0, 0xc0, 0xd2, 0x05, 0x05, 0x05, 0x0c, 0x22, 0x22, 0x22, 0x1a, 0x19, 0x19, 0x19, 0x09, 0x15, 0x15, 0x15, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0xfd, 0xfd, 0xfd, 0x00, 0x02, 0x02, 0x02, 0x00, 0xe5, 0xe5, 0xe5, 0xe3, 0xc0, 0xc0, 0xc0, 0xe9, 0x73, 0x69, 0x1f, 0xe6, 0xf4, 0xef, 0xf5, 0x01, 0x08, 0x13, 0x0c, 0x00, 0x09, 0x08, 0x0a, 0x00, 0xfc, 0xfd, 0x02, 0x00, 0x00, 0x02, 0x0c, 0x00, 0xfd, 0xfe, 0x03, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x06, 0xfd, 0xe7, 0x06, 0x04, 0x00, 0x00, 0xfc, 0x00, 0x10, 0x10, 0x04, 0x00, 0x01, 0x01, 0xf8, 0x00, 0x11, 0x0f, 0x00, 0x00, 0xff, 0xfd, 0xfe, 0x00, 0x13, 0x11, 0x06, 0x00, 0xfe, 0xfc, 0xfd, 0x00, 0x1b, 0x18, 0x05, 0x00, 0xed, 0xe1, 0x07, 0x00, 0xd9, 0xee, 0x16, 0x00, 0xf9, 0xca, 0xa4, 0x00, 0xe4, 0xed, 0xdf, 0xc2, 0x64, 0x6c, 0xa2, 0x53, 0x02, 0x02, 0x02, 0x08, 0x38, 0x38, 0x38, 0x1f, 0x1f, 0x1f, 0x1f, 0x2c, 0x1c, 0x1c, 0x1c, 0x3b, 0x2a, 0x2a, 0x2a, 0x3d, 0x22, 0x22, 0x22, 0x15, 0x18, 0x18, 0x18, 0x08, 0xd1, 0xd1, 0xd1, 0xba, 0x14, 0x10, 0x00, 0xff, 0x1c, 0x19, 0x09, 0x32, 0x1f, 0x1e, 0xf4, 0x01, 0x00, 0x04, 0x0f, 0x00, 0x1b, 0x1a, 0x3b, 0x00, 0x4e, 0x4d, 0x3c, 0x00, 0x0e, 0x07, 0xfb, 0x00, 0x85, 0x7d, 0x4c, 0x00, 0xfe, 0xfb, 0xe5, 0x00, 0xfe, 0xfa, 0xef, 0x00, 0x04, 0xfd, 0xfc, 0x00, 0x04, 0xd6, 0xa9, 0xc9, 0x00, 0x17, 0x2a, 0x22, 0x00, 0x09, 0x13, 0x14, 0x00, 0x00, 0xfe, 0xfd, 0x00, 0x00, 0x00, 0xf8, 0x00, 0xff, 0xff, 0xf3, 0x00, 0x00, 0x00, 0xf2, 0x00, 0xf7, 0xec, 0xf0, 0x00, 0xf1, 0xd1, 0xe6, 0x00, 0x36, 0xf3, 0xd7, 0x00, 0x28, 0x26, 0x07, 0x00, 0xd8, 0x0e, 0x1d, 0x1f, 0xfe, 0xfe, 0xfe, 0xf0, 0xfe, 0xfe, 0xfe, 0x03, 0xc4, 0xc4, 0xc4, 0xf1, 0xc4, 0xc4, 0xc4, 0xd6, 0x01, 0x01, 0x01, 0xb0, 0xff, 0xff, 0xff, 0x01, 0x35, 0x35, 0x35, 0x1e, 0x21, 0x21, 0x21, 0x1b, 0xd6, 0xd6, 0xd6, 0xc9, 0x59, 0x52, 0x05, 0xf7, 0x13, 0x0a, 0x00, 0x0c, 0x05, 0x01, 0xf5, 0x00, 0x01, 0x04, 0xf1, 0x00, 0x18, 0x14, 0x04, 0x00, 0x03, 0x06, 0x0a, 0x00, 0xfb, 0xf8, 0xe4, 0x00, 0x1a, 0x17, 0xf9, 0x00, 0x01, 0xfa, 0xfd, 0x00, 0x01, 0xee, 0xf7, 0x00, 0x01, 0xf9, 0xf9, 0x00, 0x04, 0xc3, 0xb8, 0xea, 0x00, 0x1d, 0xc7, 0xfd, 0x00, 0x16, 0x06, 0xe2, 0x00, 0x10, 0x0c, 0x0a, 0x00, 0x02, 0x04, 0x02, 0x00, 0x01, 0x02, 0x06, 0x00, 0x01, 0x06, 0x0c, 0x00, 0xe6, 0xf1, 0xfd, 0x00, 0xd7, 0xe2, 0xf4, 0x00, 0x3e, 0x28, 0xe8, 0x00, 0x03, 0x01, 0x04, 0x00, 0x02, 0x01, 0x02, 0x0d, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x03, 0xcb, 0xcb, 0xcb, 0xf3, 0xcb, 0xcb, 0xcb, 0xd4, 0x00, 0x00, 0x00, 0xf9, 0x53, 0x44, 0x00, 0x01, 0x01, 0xfb, 0xfd, 0xf4, 0x05, 0xf6, 0xf6, 0x00, 0xff, 0x03, 0x01, 0x00, 0xe3, 0xe6, 0xed, 0x00, 0xac, 0xb3, 0xe3, 0x00, 0xdd, 0xdf, 0xef, 0x00, 0x0d, 0x0a, 0x00, 0x00, 0x47, 0x38, 0x0b, 0x00, 0x40, 0x21, 0xfd, 0x00, 0x02, 0xfb, 0xfb, 0x00, 0x04, 0x4f, 0x5c, 0x00, 0x00, 0xe2, 0x7c, 0xb2, 0x00, 0x02, 0xd7, 0xed, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x04, 0x17, 0x08, 0x00, 0x45, 0x60, 0x20, 0x00, 0x23, 0x3f, 0x11, 0x00, 0x00, 0x03, 0x09, 0x00, 0xfc, 0xfc, 0xfd, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x90, 0x00, 0x00, 0x58, 0x4e, 0x02, 0xcd, 0x17, 0x01, 0xf7, 0x3d, 0xf1, 0xef, 0xf5, 0x01, 0x77, 0x86, 0xe1, 0x00, 0xd8, 0xdd, 0xf9, 0x00, 0x06, 0x06, 0x05, 0x00, 0xff, 0xff, 0x00, 0x00, 0xc1, 0xc5, 0xec, 0x00, 0x82, 0x59, 0x0a, 0x00, 0x4c, 0x30, 0x05, 0x00, 0x04, 0x17, 0x2a, 0x0b, 0x00, 0x13, 0xb0, 0x4b, 0x00, 0xf1, 0xda, 0xf1, 0x00, 0xf3, 0xc6, 0xe6, 0x00, 0xfd, 0xf0, 0xf7, 0x00, 0x05, 0x05, 0x01, 0x00, 0x15, 0x2e, 0x0f, 0x00, 0x13, 0x1e, 0x05, 0x00, 0x06, 0xff, 0xf9, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0xff, 0x07, 0x15, 0x00, 0xeb, 0xee, 0xe8, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0xd3, 0xb6, 0x9e, 0x13, 0x30, 0x42, 0x55, 0xf9, 0xed, 0xe2, 0x1c, 0xf6, 0xf5, 0x04, 0x00, 0x13, 0x13, 0x0b, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0xf9, 0xf9, 0x00, 0xe8, 0xf2, 0x01, 0x00, 0xfa, 0x07, 0x0f, 0xfc, 0x01, 0xfc, 0xc6, 0x48, 0xff, 0xfe, 0x06, 0x06, 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xfd, 0xfd, 0x00, 0x01, 0xfa, 0xfa, 0x00, 0x02, 0xf8, 0xf7, 0x00, 0x02, 0xf9, 0xf9, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0xea, 0x0c, 0x30, 0xf5, 0xb8, 0xce, 0xaa, 0x2b, 0x5f, 0x70, 0xef, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xa4, 0x91, 0x37, 0x5d, 0x46, 0x2d, 0x28, 0x8b, 0xd1, 0xd9, 0xf4, 0x12, 0xac, 0xc9, 0xff, 0x00, 0xf9, 0xfd, 0x06, 0x00, 0x04, 0x03, 0x00, 0x00, 0x2b, 0x1c, 0x00, 0x00, 0x59, 0x3c, 0xff, 0xfc, 0xdf, 0xf3, 0xfb, 0xb5, 0x01, 0xff, 0xb8, 0x3a, 0xff, 0xff, 0x02, 0x02, 0x00, 0x00, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x01, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x12, 0x33, 0x00, 0xbd, 0xdb, 0xca, 0x89, 0x47, 0x5c, 0xcb, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x16, 0x72, 0x66, 0x25, 0x42, 0x55, 0x45, 0x2e, 0x63, 0x1b, 0x12, 0x13, 0x2d, 0xfe, 0xfe, 0x0a, 0x06, 0x02, 0x02, 0xfd, 0xfe, 0xf6, 0xfa, 0xef, 0xeb, 0xc3, 0xd3, 0xe7, 0xb2, 0x87, 0x94, 0xbf, 0xa4, 0x01, 0xee, 0xc5, 0x6c, 0xfd, 0x11, 0xf6, 0xd6, 0x02, 0x00, 0xfc, 0xf5, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0xf7, 0x0f, 0x2f, 0x00, 0xba, 0xd5, 0xd5, 0xb3, 0x50, 0x64, 0xc1, 0x65, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x0d, 0x0b, 0x00, 0x0f, 0x33, 0x30, 0x0e, 0x18, 0x2b, 0x25, 0x0d, 0x18, 0xee, 0xf0, 0xfb, 0xf6, 0xc7, 0xcc, 0xec, 0xe5, 0xe0, 0xe4, 0xfe, 0xf0, 0x00, 0x00, 0x00, 0xf2, 0x03, 0xf5, 0xff, 0xdb, 0xf3, 0x14, 0x24, 0x31, 0x2e, 0x13, 0x16, 0x2a, 0x0c, 0x03, 0x02, 0x03, 0x01, 0x00, 0x02, 0x04, 0x00, 0x00, 0x07, 0x12, 0x00, 0xfc, 0x0d, 0x29, 0xff, 0xda, 0xfb, 0x10, 0xf4, 0x99, 0xb1, 0xb7, 0x95, 0x6e, 0x7d, 0xd2, 0x95, 0xfe, 0xfe, 0x00, 0xfd, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xf6, 0xfa, 0xfb, 0x00, 0xef, 0xe0, 0xe3, 0xf9, 0xe4, 0xcb, 0xd0, 0xf3, 0xd8, 0xd4, 0xd8, 0xf5, 0xdd, 0xf0, 0xf2, 0xff, 0xe9, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x26, 0x09, 0x08, 0x00, 0x0e, 0x5a, 0x4f, 0x03, 0x39, 0x33, 0x30, 0x38, 0x29, 0x14, 0x12, 0x12, 0x14, 0xf3, 0xf4, 0xf5, 0xf2, 0xcd, 0xd1, 0xcb, 0xdb, 0xb2, 0xba, 0xf3, 0xc8, 0xe4, 0xe8, 0x00, 0xee, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0xf1, 0x00, 0x00, 0x00, 0xf3, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x0c, 0xa5, 0x36, 0x6f, 0x37, 0xa6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/chat_icon_text.png.h0000600000176000000410000006526112105760300023414 0ustar buildbotwww-data00000000000000/* chat_icon_text.png - 4267 bytes */ static const unsigned char chat_icon_text_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a, 0xf4, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0d, 0xd7, 0x00, 0x00, 0x0d, 0xd7, 0x01, 0x42, 0x28, 0x9b, 0x78, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x0a, 0x07, 0x15, 0x13, 0x11, 0xf4, 0x6c, 0x14, 0x01, 0x00, 0x00, 0x10, 0x2b, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0x01, 0x20, 0x10, 0xdf, 0xef, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0xc1, 0x5a, 0x21, 0xa5, 0x2f, 0x49, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/close.xpm0000600000176000000410000000050412105760300021305 0ustar buildbotwww-data00000000000000/* XPM */ static const char * close_xpm[] = { "12 12 5 1", " c None", ". c #000000", "+ c #FFB6AA", "@ c #FF2400", "# c #B00000", " ", " . . ", " .+. .+.", " .++. .+@.", " .@+.+@. ", " .@@@. ", " .@@@. ", " .+@.#@. ", " .+@. .#@.", " .@. .#.", " . . ", " "}; springlobby-0.169/src/images/close_hi.xpm0000600000176000000410000000050712105760300021770 0ustar buildbotwww-data00000000000000/* XPM */ static const char * close_hi_xpm[] = { "12 12 5 1", " c None", ". c #FFFFFF", "+ c #FFB6AA", "@ c #FF2400", "# c #B00000", " ", " . . ", " .+. .+.", " .++. .+@.", " .@+.+@. ", " .@@@. ", " .@@@. ", " .+@.#@. ", " .+@. .#@.", " .@. .#.", " . . ", " "}; springlobby-0.169/src/images/closed_full_game.png.h0000600000176000000410000001271212105760300023676 0ustar buildbotwww-data00000000000000/* closed_full_game.png - 857 bytes */ static const unsigned char closed_full_game_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1b, 0x15, 0x3b, 0x23, 0xc4, 0x19, 0xbd, 0x6d, 0x00, 0x00, 0x02, 0xd9, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x8d, 0x93, 0x4d, 0x68, 0x5c, 0x65, 0x14, 0x86, 0x9f, 0xef, 0xbb, 0xf7, 0xce, 0x5f, 0x32, 0x9d, 0xa4, 0x49, 0xcb, 0xf4, 0x66, 0x9a, 0x50, 0x63, 0x85, 0x49, 0x63, 0xb5, 0x0b, 0x6d, 0x88, 0xb4, 0xd8, 0xa8, 0x1b, 0x77, 0xe2, 0xa2, 0x14, 0xed, 0xa6, 0x2b, 0x37, 0x52, 0x28, 0xf4, 0x67, 0x21, 0x28, 0x08, 0x0a, 0x2e, 0x0a, 0xa2, 0xb8, 0x72, 0xd3, 0x8d, 0x20, 0xdd, 0x08, 0xa5, 0x88, 0x9b, 0x41, 0x8a, 0xa0, 0x48, 0x14, 0x44, 0x1a, 0xd1, 0xa9, 0x58, 0x4a, 0x32, 0x93, 0x74, 0x26, 0xce, 0xdc, 0xe9, 0xcc, 0xdc, 0xb9, 0xdf, 0xfd, 0x7e, 0x5c, 0xc4, 0x14, 0x14, 0x15, 0x5f, 0x38, 0xab, 0x73, 0x9e, 0x97, 0x03, 0xe7, 0x3d, 0x82, 0x7f, 0xd1, 0x6f, 0xf5, 0x5f, 0x4e, 0x7a, 0x7a, 0xf0, 0xa6, 0x97, 0x6c, 0xaf, 0x08, 0xab, 0xc1, 0x68, 0x84, 0x23, 0x61, 0x6c, 0x6a, 0xd5, 0x4e, 0xcc, 0x5e, 0x99, 0x99, 0x99, 0xf9, 0x0a, 0xc0, 0xff, 0x3b, 0x58, 0x5b, 0x08, 0x8f, 0xcf, 0x7d, 0x78, 0xed, 0xd3, 0x8c, 0x89, 0xe6, 0x3c, 0xdd, 0x41, 0x38, 0x4d, 0xb7, 0xdb, 0x41, 0x2b, 0x45, 0x65, 0x62, 0x2c, 0x6b, 0x7e, 0xef, 0x3c, 0xa3, 0xdb, 0xf5, 0x5b, 0x80, 0x04, 0x10, 0x0f, 0xc1, 0x6a, 0x28, 0x0a, 0x73, 0x87, 0xde, 0xa9, 0xbc, 0x7c, 0xe6, 0x92, 0x5c, 0x5a, 0x94, 0x19, 0x52, 0xd6, 0x1b, 0x0d, 0xea, 0x9b, 0x8a, 0x34, 0x5b, 0x26, 0x35, 0x82, 0x60, 0xd4, 0x24, 0xa4, 0xc1, 0xe2, 0xc1, 0x29, 0x28, 0x1f, 0xf9, 0x71, 0xfa, 0xe8, 0xa9, 0xa3, 0x0f, 0x0d, 0xbe, 0x7e, 0x61, 0xe9, 0xdd, 0xf9, 0x73, 0xaf, 0x5d, 0x49, 0x8f, 0x3d, 0x49, 0xd4, 0xdb, 0xe6, 0xf0, 0xb1, 0x93, 0x7c, 0xfe, 0xfd, 0x90, 0xad, 0xc8, 0x70, 0xf1, 0x95, 0x27, 0x70, 0xce, 0xf2, 0xfa, 0xfb, 0xdf, 0x91, 0x0b, 0x04, 0x97, 0x5f, 0xda, 0xcb, 0xfd, 0xeb, 0x6f, 0xd1, 0xee, 0x6b, 0x2d, 0x77, 0xd7, 0x2e, 0x3f, 0xfb, 0xfc, 0xa5, 0xbc, 0x27, 0x51, 0xd1, 0x5d, 0x0e, 0x3d, 0xbe, 0x0c, 0x40, 0x92, 0x3a, 0x86, 0xca, 0xe2, 0xec, 0x4e, 0xc5, 0x23, 0x43, 0xa2, 0x2c, 0x00, 0xd9, 0xa7, 0x4f, 0x93, 0x0e, 0x22, 0xdf, 0x07, 0x28, 0xce, 0x3f, 0x76, 0xb1, 0x38, 0x35, 0x2d, 0x83, 0xa8, 0x4b, 0xb0, 0x7f, 0x19, 0x63, 0x0c, 0x52, 0x4a, 0xa6, 0x8a, 0x50, 0x6f, 0xa6, 0x9c, 0xff, 0xe0, 0x5b, 0x12, 0xe5, 0x88, 0x86, 0x9a, 0x23, 0xb3, 0x05, 0xac, 0xb5, 0xc8, 0xbd, 0x15, 0x26, 0x1f, 0x59, 0x74, 0x5e, 0xad, 0x1a, 0x7a, 0xa5, 0xf9, 0xc3, 0x1f, 0x4f, 0x14, 0x8b, 0x99, 0x7c, 0x3a, 0xc2, 0xe4, 0xb3, 0x28, 0xd5, 0x46, 0xe3, 0x13, 0x4e, 0x67, 0x69, 0xb6, 0x87, 0x6c, 0x6e, 0xc7, 0x28, 0xa5, 0x38, 0x7b, 0x62, 0x8c, 0x13, 0xd5, 0x2c, 0x6a, 0xd0, 0xa3, 0x7f, 0xfd, 0x0d, 0x9a, 0x23, 0xff, 0x1b, 0x51, 0x5b, 0x08, 0xc3, 0xf2, 0x53, 0x4b, 0x1b, 0xe1, 0x81, 0x90, 0xa2, 0xef, 0x21, 0xf3, 0x79, 0xd6, 0x8f, 0x3f, 0x4a, 0xde, 0x17, 0x30, 0x5e, 0x41, 0x94, 0x66, 0xc1, 0x0b, 0x00, 0x70, 0xd6, 0x61, 0xbb, 0x1b, 0x98, 0xe6, 0x0f, 0xdc, 0x5e, 0xfb, 0x15, 0xf1, 0xc9, 0x67, 0xe3, 0x3e, 0xe0, 0xe2, 0xfa, 0xcf, 0x68, 0xad, 0x60, 0x72, 0x12, 0x54, 0x81, 0xb8, 0x93, 0xe1, 0x9e, 0x89, 0x28, 0xcb, 0x55, 0xc6, 0x27, 0xef, 0x61, 0x83, 0x02, 0xce, 0x81, 0xe9, 0xb5, 0x60, 0xeb, 0x0e, 0x77, 0x5b, 0x0f, 0x28, 0xdd, 0x5c, 0xa5, 0xaf, 0xb4, 0x15, 0xb5, 0x6a, 0x28, 0x73, 0x52, 0x74, 0x2a, 0x19, 0x6f, 0x4f, 0x39, 0x9f, 0x23, 0xd8, 0xb7, 0x1f, 0xf6, 0x94, 0x20, 0x93, 0x03, 0xe9, 0xed, 0x9c, 0xc8, 0x1a, 0x50, 0x23, 0xe8, 0x75, 0x49, 0xee, 0xb7, 0xd8, 0x8a, 0x47, 0x6c, 0xa4, 0x66, 0x7d, 0xf9, 0xf6, 0xc6, 0x41, 0x7f, 0xe5, 0xa7, 0x86, 0xbd, 0xb5, 0x10, 0xde, 0x1c, 0x1a, 0x77, 0x26, 0x56, 0x0a, 0x7f, 0xbb, 0x8d, 0x18, 0xc5, 0xe0, 0x07, 0x20, 0xe5, 0x9f, 0x06, 0x16, 0x52, 0x85, 0x1b, 0x0c, 0x88, 0x95, 0x62, 0x60, 0x1d, 0xa9, 0x73, 0x37, 0xd8, 0x4d, 0x93, 0x86, 0xf7, 0x22, 0x63, 0x4d, 0x57, 0x5b, 0xe2, 0x24, 0xc1, 0x0d, 0xfa, 0x30, 0x1a, 0x42, 0x12, 0xc3, 0x28, 0x86, 0x78, 0x88, 0x1b, 0x0c, 0x18, 0x2a, 0x45, 0x64, 0x2c, 0x3d, 0x63, 0x13, 0x03, 0x57, 0x01, 0x3c, 0x80, 0x6b, 0xad, 0x07, 0x9b, 0xaf, 0xee, 0x2b, 0xa6, 0xda, 0xf1, 0x9c, 0x00, 0x84, 0xb1, 0xc8, 0x34, 0x05, 0x95, 0xe2, 0x94, 0x22, 0x4d, 0x12, 0xfa, 0xa9, 0xa6, 0xa3, 0x2d, 0x2d, 0x6d, 0x18, 0x3a, 0x77, 0x7e, 0x65, 0xad, 0xf1, 0xc5, 0x5f, 0xa2, 0x0c, 0xf0, 0xe5, 0x42, 0x78, 0x39, 0x27, 0xc4, 0xdb, 0x25, 0x4f, 0x06, 0x05, 0x29, 0x08, 0xc4, 0x4e, 0x3b, 0x75, 0x8e, 0x81, 0x75, 0xf4, 0x8c, 0x4d, 0x62, 0xe7, 0x2e, 0x9c, 0x5a, 0x6b, 0x7c, 0xb4, 0xcb, 0x88, 0x7f, 0x78, 0xa6, 0x05, 0x0f, 0x2e, 0x04, 0x42, 0xbc, 0xe8, 0xc1, 0x01, 0x07, 0x58, 0x58, 0x4f, 0x9d, 0xbb, 0x61, 0xe0, 0xea, 0xca, 0x5a, 0xe3, 0x0e, 0xff, 0x57, 0xb5, 0x6a, 0x58, 0xa8, 0x55, 0xc3, 0xfc, 0x7f, 0xcd, 0xfc, 0x01, 0xcb, 0xd2, 0x67, 0x2c, 0xb2, 0x82, 0x6b, 0x22, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/closed_full_pw_game.png.h0000600000176000000410000001325612105760300024410 0ustar buildbotwww-data00000000000000/* closed_full_pw_game.png - 892 bytes */ static const unsigned char closed_full_pw_game_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1b, 0x11, 0x29, 0x0f, 0x89, 0x3c, 0x09, 0x81, 0x00, 0x00, 0x02, 0xfc, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x75, 0x93, 0x4f, 0x68, 0x5c, 0x55, 0x14, 0xc6, 0x7f, 0xf7, 0xcd, 0x7b, 0xf3, 0x32, 0xff, 0xf2, 0x77, 0x2c, 0xe3, 0x64, 0x92, 0x10, 0xd3, 0x0a, 0x69, 0x62, 0x6a, 0x85, 0x98, 0x10, 0x49, 0x69, 0x8b, 0x45, 0x77, 0x22, 0x2e, 0x44, 0xc4, 0x8d, 0x2b, 0x37, 0xa5, 0x50, 0x68, 0xed, 0xa2, 0xa0, 0x2b, 0x5d, 0x59, 0x10, 0xc5, 0x95, 0x9b, 0xba, 0x10, 0xa4, 0x20, 0xc5, 0x2a, 0x2e, 0x84, 0x2c, 0x44, 0x54, 0x24, 0x6a, 0x8b, 0x34, 0xa0, 0xd3, 0x62, 0x89, 0x99, 0x99, 0x24, 0x33, 0xd3, 0xcc, 0x4c, 0xe6, 0xbd, 0x37, 0xef, 0xbe, 0x77, 0xef, 0x75, 0x51, 0x33, 0xa2, 0xd0, 0x03, 0x67, 0xf9, 0xfd, 0xce, 0x77, 0x0e, 0xdf, 0x11, 0x3c, 0xa4, 0xfe, 0x2c, 0xff, 0x71, 0x22, 0x11, 0x7b, 0x6f, 0x25, 0xc2, 0xe6, 0x69, 0xa1, 0x63, 0x50, 0x31, 0xc2, 0x10, 0x92, 0x19, 0x5b, 0xd7, 0xc3, 0x93, 0x97, 0xc6, 0xc7, 0xc7, 0xbf, 0x03, 0xb0, 0xff, 0x2f, 0x5c, 0x3b, 0x5a, 0x5c, 0x9a, 0xfa, 0xf0, 0xea, 0x67, 0x49, 0xd5, 0x9e, 0x4a, 0xc4, 0x7b, 0x08, 0x13, 0xd3, 0x6a, 0xed, 0x11, 0x4b, 0x49, 0x69, 0x38, 0xe3, 0xaa, 0xfb, 0x7b, 0xcf, 0xc4, 0x8d, 0xf2, 0xb7, 0x80, 0x05, 0x20, 0xfa, 0xc2, 0xd9, 0xa2, 0x48, 0x4f, 0x4d, 0xbf, 0x53, 0x7a, 0xe9, 0x95, 0x8b, 0xd6, 0xf2, 0xbc, 0x95, 0x24, 0x62, 0xab, 0x5a, 0xa5, 0xbc, 0x2d, 0x89, 0xdc, 0x02, 0x91, 0x12, 0x38, 0xbd, 0x1a, 0x45, 0xaa, 0xcc, 0x4f, 0x8c, 0x41, 0x61, 0xee, 0xb7, 0xfc, 0xc2, 0xa9, 0x85, 0x3e, 0xe0, 0x87, 0x33, 0xcb, 0xef, 0xce, 0xbc, 0xfe, 0xc6, 0xa5, 0xe8, 0xf8, 0x93, 0xb4, 0x3b, 0x4d, 0x8e, 0x1c, 0x3f, 0xc1, 0xd7, 0xbf, 0xf8, 0xec, 0xb4, 0x15, 0x17, 0x5e, 0x3d, 0x86, 0x31, 0x9a, 0xb3, 0xef, 0xff, 0xcc, 0x80, 0x23, 0x78, 0xf3, 0xc5, 0x51, 0x76, 0xaf, 0xbd, 0x4d, 0xa3, 0x1b, 0xc7, 0xd6, 0x81, 0xed, 0xc2, 0xc9, 0x67, 0x2f, 0xa6, 0x12, 0x16, 0xb2, 0x7d, 0x8f, 0xe9, 0x27, 0x56, 0x00, 0x08, 0x23, 0x83, 0x2f, 0x35, 0x46, 0x3f, 0xe8, 0xa0, 0xa7, 0x08, 0xa5, 0x06, 0xc0, 0x7d, 0xfa, 0x65, 0x22, 0xaf, 0x6d, 0xdb, 0x00, 0xb9, 0x99, 0xc7, 0x2f, 0xe4, 0xc6, 0xf2, 0x96, 0xd3, 0x6e, 0xe1, 0x1c, 0x5a, 0x41, 0x29, 0x85, 0x65, 0x59, 0x8c, 0xe5, 0xa0, 0x5c, 0x8b, 0x38, 0xf7, 0xc1, 0x4f, 0x84, 0xd2, 0xd0, 0xf6, 0x63, 0xe6, 0x26, 0xd3, 0x68, 0xad, 0xb1, 0x46, 0x4b, 0x8c, 0x3c, 0x36, 0x6f, 0x12, 0x6b, 0xb3, 0xc5, 0xc4, 0xd0, 0xcc, 0x91, 0x8f, 0x87, 0x73, 0xb9, 0x64, 0x2a, 0xea, 0xa1, 0x52, 0x2e, 0x52, 0x36, 0x88, 0xb1, 0x29, 0xe6, 0x5d, 0x6a, 0x0d, 0x9f, 0xed, 0x66, 0x80, 0x94, 0x92, 0xd7, 0x56, 0x33, 0xac, 0xce, 0xba, 0x48, 0xaf, 0x43, 0xf7, 0xda, 0x65, 0x6a, 0x3d, 0xfb, 0x47, 0xb1, 0x76, 0xb4, 0x58, 0x2c, 0x2c, 0x2e, 0x57, 0x8a, 0x8f, 0x16, 0xc9, 0xd9, 0x09, 0xac, 0x54, 0x8a, 0xad, 0xa5, 0xc3, 0xa4, 0x6c, 0x01, 0xd9, 0x12, 0x62, 0x68, 0x12, 0x12, 0x0e, 0x00, 0x46, 0x1b, 0x74, 0xab, 0x82, 0xaa, 0xdd, 0xe2, 0xf6, 0xc6, 0x5d, 0xc4, 0xa7, 0xd7, 0xb3, 0xf6, 0xe0, 0x92, 0x57, 0x8a, 0xfd, 0x5f, 0xf1, 0xd4, 0x26, 0x32, 0xeb, 0x20, 0x93, 0x9a, 0xa6, 0x57, 0xc0, 0x0b, 0x2c, 0x0a, 0xd6, 0x3a, 0xd9, 0x91, 0x4d, 0xb4, 0x93, 0xc6, 0x18, 0x50, 0x9d, 0x3a, 0xec, 0xdc, 0xe1, 0x5e, 0x7d, 0x9f, 0xa1, 0xaf, 0xd6, 0xe9, 0xca, 0x58, 0x8b, 0xf0, 0xfa, 0xa2, 0x0c, 0xb4, 0xed, 0x7c, 0xf2, 0xcd, 0x2e, 0xcf, 0x2d, 0x8e, 0x30, 0x9a, 0x75, 0x88, 0x94, 0x66, 0xdf, 0x57, 0x6c, 0xfe, 0xb5, 0xcf, 0xea, 0xd6, 0x2c, 0xae, 0x49, 0x80, 0xec, 0x41, 0xa7, 0x45, 0xb8, 0x5b, 0x67, 0x27, 0xe8, 0x51, 0x89, 0xd4, 0xd6, 0xca, 0xed, 0xca, 0x84, 0x9d, 0x4c, 0xa5, 0x9c, 0x9b, 0xbf, 0x77, 0xb8, 0xf2, 0x79, 0x85, 0x46, 0x27, 0xe2, 0xec, 0x0b, 0xe3, 0x00, 0x08, 0x01, 0x18, 0x0d, 0xbb, 0x55, 0x50, 0x16, 0x44, 0x12, 0xe3, 0x79, 0x04, 0x52, 0xe2, 0x69, 0x43, 0x64, 0xcc, 0x8d, 0x7e, 0x12, 0x27, 0x1e, 0x71, 0x19, 0xc9, 0xd9, 0x9c, 0x3c, 0x36, 0xfc, 0x9f, 0x54, 0x0a, 0x01, 0xf4, 0x02, 0x88, 0x05, 0x26, 0x0c, 0xf1, 0xa5, 0xa4, 0xad, 0x34, 0x1d, 0xa5, 0x43, 0x05, 0x57, 0xfa, 0x80, 0xfc, 0xa0, 0xc3, 0xdc, 0x54, 0x9a, 0xa7, 0x0e, 0x67, 0x89, 0x62, 0xf3, 0x8f, 0x58, 0x80, 0x31, 0xe8, 0x6e, 0x97, 0x30, 0x16, 0x04, 0x4a, 0xd3, 0x56, 0x9a, 0x7a, 0xac, 0x08, 0x8c, 0x39, 0x7f, 0x7a, 0xa3, 0x7a, 0xa7, 0x0f, 0xf0, 0x43, 0x4d, 0xb9, 0x12, 0x50, 0x6b, 0x4a, 0xf2, 0x43, 0x0f, 0x2e, 0x2e, 0x00, 0x23, 0xa0, 0x1e, 0xc6, 0xa0, 0x04, 0x9e, 0x36, 0x74, 0x94, 0x0e, 0x03, 0x63, 0xce, 0x9f, 0xda, 0xa8, 0x7e, 0x74, 0xe0, 0xd2, 0x56, 0x71, 0xa4, 0x95, 0xc6, 0x5a, 0x98, 0xce, 0x50, 0xbd, 0x1f, 0xfe, 0x0b, 0x10, 0xa0, 0x8d, 0xe1, 0xa6, 0x1f, 0x32, 0x60, 0x12, 0x55, 0x5b, 0xf0, 0x85, 0x10, 0xe2, 0xbd, 0x83, 0xc9, 0xfd, 0x35, 0xbf, 0xbf, 0x9c, 0x79, 0x3e, 0x9d, 0x1b, 0x3c, 0xe3, 0x0e, 0xb8, 0xf3, 0xc6, 0xb2, 0x0f, 0x69, 0x23, 0x72, 0x06, 0x72, 0x7e, 0xa0, 0xf6, 0x36, 0x6b, 0xde, 0xad, 0x2f, 0x6f, 0xb4, 0xcf, 0x5d, 0xbd, 0xdb, 0xdb, 0x7e, 0xd8, 0xdb, 0xff, 0x0d, 0xbb, 0x2b, 0x7b, 0x4e, 0x0d, 0xe0, 0x70, 0x92, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/closed_game.png.h0000600000176000000410000001155012105760300022653 0ustar buildbotwww-data00000000000000/* closed_game.png - 763 bytes */ static const unsigned char closed_game_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x14, 0x10, 0x05, 0x03, 0xe0, 0x1a, 0x54, 0x65, 0x00, 0x00, 0x02, 0x7b, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x8d, 0x93, 0x3b, 0x68, 0x54, 0x51, 0x10, 0x86, 0xbf, 0x73, 0x1f, 0x9b, 0x64, 0x71, 0x37, 0x6e, 0x8c, 0x8f, 0xbd, 0x28, 0x22, 0xa2, 0x71, 0x57, 0x41, 0xac, 0x52, 0x58, 0x88, 0x6b, 0x21, 0x58, 0x68, 0x61, 0x25, 0xd8, 0x08, 0x82, 0x76, 0x42, 0x40, 0xb1, 0xb1, 0x12, 0x0c, 0x58, 0x58, 0x5a, 0x89, 0x60, 0x2d, 0x82, 0x20, 0x16, 0x36, 0x2b, 0x08, 0x62, 0xab, 0x82, 0x1b, 0xc4, 0x48, 0x50, 0xf4, 0x6a, 0x5c, 0x35, 0x9b, 0x4d, 0xee, 0xeb, 0x3c, 0x2d, 0xb2, 0x51, 0xd0, 0x28, 0x0e, 0x4c, 0x75, 0xe6, 0xff, 0xcf, 0xcc, 0xfc, 0xff, 0x08, 0xfe, 0x12, 0xed, 0x46, 0xe4, 0x23, 0xd8, 0x0c, 0x38, 0x1c, 0xf3, 0xad, 0x99, 0xd8, 0xae, 0x55, 0x27, 0xfe, 0x00, 0x36, 0xa3, 0xc9, 0xb1, 0xc9, 0x83, 0x17, 0x2b, 0x7b, 0xf6, 0x1d, 0x1d, 0xde, 0x52, 0x5f, 0x07, 0x50, 0xcc, 0x7f, 0xee, 0x2f, 0xbd, 0xee, 0x3c, 0xfc, 0xf6, 0xec, 0xc9, 0xf5, 0x56, 0x27, 0x7e, 0xbe, 0x26, 0x41, 0xbb, 0x11, 0x89, 0xf2, 0xf6, 0x1d, 0xd7, 0xb6, 0x9e, 0x3c, 0x75, 0xa9, 0xb6, 0x6f, 0xbf, 0xe7, 0x8b, 0x5f, 0x8f, 0x16, 0xb0, 0x0e, 0x16, 0x5e, 0xbd, 0x30, 0x1f, 0xef, 0xdf, 0xbd, 0x92, 0xbc, 0x7d, 0x33, 0xdd, 0x9a, 0x89, 0x01, 0xf0, 0x57, 0x09, 0xce, 0x1f, 0xd8, 0x3b, 0xbd, 0xf3, 0xcc, 0xb9, 0xcb, 0xa3, 0xf5, 0xba, 0x28, 0xa9, 0x82, 0x40, 0x49, 0x7c, 0xb9, 0x9a, 0x05, 0x42, 0xe6, 0x94, 0xaa, 0xa3, 0x5e, 0x79, 0xd7, 0xc4, 0x91, 0xe4, 0xdd, 0x5c, 0x7e, 0x6b, 0xf6, 0xfd, 0xd3, 0x9f, 0x04, 0xed, 0x66, 0x34, 0xb9, 0xed, 0xf8, 0xc9, 0xdb, 0xa3, 0xe3, 0xe3, 0x62, 0x48, 0x4a, 0x02, 0xad, 0x10, 0x46, 0x21, 0xb4, 0x46, 0x68, 0x85, 0x50, 0x05, 0x7e, 0x91, 0x23, 0xf2, 0x1c, 0x21, 0x40, 0x54, 0xaa, 0x87, 0x4e, 0x7c, 0x9a, 0xbd, 0x77, 0xa7, 0xbb, 0xd4, 0x0d, 0x00, 0x2a, 0x3b, 0x77, 0x5f, 0xac, 0x6c, 0x18, 0xf7, 0xc2, 0xc5, 0x1e, 0x41, 0xe0, 0x43, 0xa9, 0x04, 0xc2, 0x03, 0x31, 0x18, 0xc2, 0x39, 0xb0, 0x86, 0x40, 0x29, 0x42, 0xad, 0xa9, 0x8c, 0x6d, 0x08, 0xab, 0x13, 0xcd, 0x29, 0x3a, 0xf1, 0xd9, 0xa0, 0xdd, 0x88, 0xfc, 0xe1, 0xda, 0xd8, 0x51, 0xbf, 0xf7, 0x9d, 0x20, 0xf0, 0x60, 0x68, 0x08, 0xc2, 0xd2, 0x00, 0xbc, 0xba, 0x05, 0x07, 0xd6, 0x82, 0x56, 0xf8, 0x45, 0x81, 0xaf, 0x2d, 0x43, 0xeb, 0x6b, 0xc7, 0x00, 0x02, 0x04, 0x9b, 0x7d, 0xc1, 0x3a, 0xd1, 0xfb, 0x8e, 0x08, 0x7c, 0x18, 0x19, 0x81, 0x30, 0x5c, 0x43, 0x20, 0x07, 0x4a, 0xe2, 0x65, 0x39, 0x42, 0x69, 0x3c, 0x63, 0xea, 0x8f, 0x1b, 0x51, 0x39, 0x00, 0x5c, 0xf6, 0xe6, 0x35, 0x5a, 0x4b, 0xa8, 0xd5, 0x40, 0x96, 0x07, 0x1d, 0x78, 0xbf, 0xe1, 0x2d, 0x28, 0x09, 0x69, 0x8a, 0x5e, 0x58, 0x20, 0x9b, 0x9b, 0x03, 0x70, 0x01, 0x8e, 0xf9, 0x62, 0xb1, 0xd7, 0x4f, 0x3b, 0x2f, 0xab, 0xd5, 0x91, 0x61, 0xbc, 0x8d, 0x9b, 0xa0, 0x3a, 0x0a, 0xa5, 0x61, 0xf0, 0x06, 0x22, 0x59, 0x03, 0x32, 0x87, 0x7e, 0x0f, 0xf5, 0xa5, 0x4b, 0x9a, 0xe5, 0x48, 0x65, 0x3e, 0x1c, 0x9e, 0x89, 0xb3, 0xa0, 0x35, 0x13, 0xdb, 0x27, 0xcd, 0xe8, 0x61, 0x6a, 0xdc, 0xa9, 0x4c, 0x4a, 0x82, 0x6f, 0x5f, 0x11, 0x79, 0x06, 0x41, 0x08, 0xde, 0xa0, 0x0b, 0xbb, 0xf2, 0xbb, 0x4b, 0x12, 0x32, 0x29, 0x49, 0xac, 0x43, 0x39, 0xf7, 0x00, 0xc0, 0x03, 0xd0, 0x70, 0x7d, 0xd1, 0x58, 0xd3, 0xd3, 0x96, 0xac, 0x28, 0x70, 0xc9, 0x32, 0xe4, 0x29, 0x14, 0x19, 0xe4, 0x19, 0x64, 0x29, 0x2e, 0x49, 0x48, 0xa5, 0x64, 0xd1, 0x58, 0xfa, 0xc6, 0x16, 0x06, 0x6e, 0xfc, 0xf4, 0xc1, 0x9d, 0xee, 0xd2, 0xe7, 0xd3, 0x1b, 0x2b, 0x4a, 0x3b, 0x8e, 0x08, 0x40, 0x18, 0x8b, 0xa7, 0x14, 0x48, 0x85, 0x93, 0x12, 0x55, 0x14, 0x2c, 0x2b, 0xcd, 0x82, 0xb6, 0x74, 0xb5, 0x21, 0x75, 0xee, 0x42, 0xab, 0x13, 0x3f, 0x5a, 0x51, 0x61, 0xd5, 0xae, 0x8e, 0xe9, 0x65, 0x6b, 0xad, 0x56, 0xee, 0x6a, 0x6a, 0x5d, 0x58, 0x36, 0x96, 0x70, 0xe0, 0x03, 0xe5, 0x1c, 0x89, 0x75, 0xf4, 0x8d, 0x2d, 0x32, 0xe7, 0xa6, 0x0e, 0x77, 0xe2, 0x9b, 0xff, 0x3a, 0xa6, 0xa6, 0x0f, 0x53, 0xa1, 0x10, 0xc7, 0x7c, 0xa8, 0xbb, 0x95, 0x5b, 0xf8, 0xa0, 0x9c, 0x7b, 0x60, 0xe0, 0x46, 0xab, 0x13, 0xcf, 0xf2, 0xbf, 0xd1, 0x6e, 0x44, 0xe5, 0x76, 0x23, 0x1a, 0xf9, 0x57, 0xcd, 0x0f, 0x2e, 0xd8, 0x41, 0xd3, 0xab, 0xee, 0x1b, 0x77, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/closed_pw_game.png.h0000600000176000000410000001237212105760300023364 0ustar buildbotwww-data00000000000000/* closed_pw_game.png - 825 bytes */ static const unsigned char closed_pw_game_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1b, 0x11, 0x28, 0x1c, 0x14, 0x99, 0x79, 0x1e, 0x00, 0x00, 0x02, 0xb9, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x75, 0x93, 0x4d, 0x68, 0x5c, 0x55, 0x14, 0xc7, 0x7f, 0xe7, 0xbd, 0xfb, 0x66, 0x92, 0xe9, 0xbc, 0x49, 0x27, 0x1d, 0xad, 0x19, 0x5b, 0x4a, 0xa9, 0xb6, 0x4e, 0x1a, 0x2d, 0x0a, 0x32, 0xa0, 0x0b, 0x6d, 0x44, 0x22, 0x2e, 0xcc, 0xa2, 0xdd, 0xb8, 0x14, 0x0a, 0x75, 0x23, 0x42, 0xa0, 0xe2, 0xa2, 0xdd, 0x5a, 0x10, 0xec, 0xd2, 0x95, 0x08, 0x75, 0x2b, 0x8a, 0xd8, 0xba, 0x12, 0x22, 0x8a, 0x1f, 0x4b, 0xd3, 0x85, 0x53, 0x8a, 0x91, 0x42, 0x68, 0x5e, 0xda, 0x4c, 0x9b, 0x4c, 0x26, 0x9d, 0xf7, 0x75, 0xdf, 0xbd, 0xd7, 0x45, 0x32, 0x53, 0xc4, 0xf4, 0xc2, 0x81, 0x0b, 0xf7, 0xfc, 0x7f, 0xe7, 0x9e, 0x73, 0xff, 0x57, 0x78, 0xcc, 0x5a, 0x6c, 0x35, 0x7d, 0x84, 0x83, 0x80, 0xc3, 0x71, 0x6f, 0xf6, 0x66, 0x64, 0xf7, 0xca, 0x93, 0xff, 0x09, 0xa7, 0x9b, 0xed, 0xc9, 0xf6, 0xab, 0x17, 0xc2, 0xe7, 0x66, 0xe6, 0xc6, 0x9e, 0x9a, 0xaa, 0x02, 0x64, 0xf7, 0xee, 0xf6, 0xb7, 0x6f, 0x75, 0x7e, 0x78, 0xf0, 0xc7, 0x2f, 0x9f, 0xce, 0x76, 0xa2, 0xa5, 0x3d, 0x01, 0x8b, 0xad, 0xa6, 0x54, 0x8e, 0x1c, 0xfd, 0xe4, 0xd0, 0x99, 0x77, 0x3f, 0xaa, 0xcf, 0x9c, 0xf2, 0x7c, 0x79, 0x74, 0x68, 0x01, 0xeb, 0x60, 0xf3, 0xaf, 0x1b, 0x66, 0xf5, 0xbb, 0xaf, 0x2f, 0xb5, 0xaf, 0xff, 0x7c, 0x79, 0xa8, 0xf3, 0x87, 0x9b, 0xf7, 0x5f, 0x3c, 0x79, 0xf9, 0xd8, 0x7b, 0xe7, 0x3f, 0x9e, 0x98, 0x9a, 0x92, 0x92, 0xce, 0x50, 0x3a, 0xc7, 0xcf, 0x87, 0x91, 0x21, 0x79, 0x4a, 0xa9, 0x36, 0xe1, 0x55, 0x9e, 0x3d, 0xf1, 0xc6, 0xd9, 0xf8, 0x7e, 0xfa, 0xc5, 0xf2, 0xca, 0x6f, 0x23, 0xc0, 0xe2, 0x74, 0xb3, 0x7d, 0xf8, 0x9d, 0x33, 0x5f, 0x4e, 0x34, 0x1a, 0x52, 0xce, 0x73, 0x54, 0xa1, 0x11, 0xa3, 0x91, 0xa2, 0x40, 0x0a, 0x8d, 0xe8, 0x0c, 0x3f, 0x4b, 0x91, 0x34, 0x45, 0x04, 0x24, 0xac, 0xbd, 0x36, 0xbf, 0xb6, 0xfc, 0xcd, 0xd5, 0xee, 0x76, 0x57, 0x01, 0x84, 0xc7, 0x8e, 0x5f, 0x08, 0x0f, 0x34, 0xbc, 0x60, 0xab, 0x87, 0x52, 0x3e, 0x94, 0x4a, 0x20, 0x1e, 0xc8, 0x6e, 0x13, 0xce, 0x81, 0x35, 0x28, 0xad, 0x09, 0x8a, 0x82, 0x70, 0xf2, 0x40, 0x50, 0x3b, 0x31, 0xbd, 0x40, 0x27, 0x3a, 0xa7, 0x16, 0x5b, 0x4d, 0x7f, 0xac, 0x3e, 0x39, 0xe7, 0xf7, 0x36, 0x50, 0xca, 0x83, 0x72, 0x19, 0x82, 0xd2, 0xae, 0x78, 0x38, 0x05, 0x07, 0xd6, 0x42, 0xa1, 0xf1, 0xb3, 0x0c, 0xbf, 0xb0, 0x94, 0xf7, 0xd7, 0xdf, 0x06, 0x50, 0x08, 0x07, 0x7d, 0xa1, 0x2a, 0xbd, 0x0d, 0x44, 0xf9, 0x30, 0x3e, 0x0e, 0x41, 0xb0, 0xc7, 0x03, 0x39, 0xd0, 0x39, 0x5e, 0x92, 0x22, 0xba, 0xc0, 0x33, 0x66, 0xea, 0xa7, 0x56, 0xb3, 0xa2, 0x6a, 0xed, 0xc1, 0xa1, 0x22, 0xfe, 0x93, 0x81, 0x59, 0x21, 0xaf, 0x06, 0xe4, 0x25, 0x4b, 0xa6, 0x34, 0x71, 0x6a, 0xd9, 0xee, 0x09, 0x2f, 0xab, 0x57, 0x50, 0xa2, 0xc0, 0x59, 0xd0, 0x39, 0xc4, 0x31, 0xc5, 0xe6, 0x26, 0xc9, 0xed, 0xdb, 0x00, 0x4e, 0x3d, 0x3f, 0x7f, 0xfc, 0xd7, 0xc4, 0x2a, 0xbe, 0xfa, 0x71, 0x9d, 0xb9, 0x56, 0x9d, 0xc9, 0x6a, 0x80, 0x67, 0x02, 0x8a, 0xd8, 0x30, 0xc8, 0xb6, 0x31, 0x77, 0x56, 0x51, 0xce, 0x87, 0x3c, 0x85, 0x7e, 0x0f, 0xbd, 0xde, 0x25, 0x4e, 0x52, 0x72, 0x6d, 0xee, 0x9c, 0xbe, 0x19, 0x25, 0xaa, 0x34, 0x3e, 0x1e, 0x2c, 0xdd, 0xea, 0x73, 0xe5, 0xdb, 0x55, 0xee, 0xf7, 0x35, 0x1f, 0xcc, 0x3f, 0xbd, 0x63, 0x10, 0x61, 0xa7, 0xea, 0x7a, 0x04, 0xc6, 0x03, 0x9d, 0xe3, 0x06, 0x03, 0x92, 0x3c, 0x67, 0x60, 0x1d, 0xda, 0xb9, 0x6b, 0x3b, 0x33, 0x00, 0x0e, 0x3f, 0x51, 0xa6, 0x1e, 0x2a, 0x5e, 0x3f, 0xb5, 0xff, 0xbf, 0x36, 0x15, 0x20, 0x4d, 0xa0, 0x10, 0x5c, 0x96, 0x11, 0xe7, 0x39, 0x5b, 0xc6, 0xd2, 0x37, 0x36, 0x33, 0x70, 0x65, 0x04, 0x68, 0xd4, 0x02, 0x4e, 0x1e, 0xa9, 0xf0, 0xd2, 0x33, 0x55, 0x74, 0xe1, 0x76, 0xc5, 0x02, 0xce, 0x61, 0x1f, 0x3e, 0x24, 0x2b, 0x84, 0xc4, 0x58, 0xb6, 0x8c, 0xa5, 0x5b, 0x18, 0x12, 0xe7, 0x16, 0x66, 0x3b, 0xd1, 0xf2, 0x08, 0x10, 0x67, 0x96, 0xbf, 0x57, 0x13, 0xd6, 0x1e, 0xe4, 0x34, 0x26, 0x82, 0x91, 0xc7, 0x9d, 0x40, 0x37, 0x2b, 0xc0, 0x08, 0x03, 0xeb, 0xe8, 0x1b, 0x9b, 0x25, 0xce, 0x2d, 0x9c, 0xee, 0x44, 0x9f, 0x0f, 0x6f, 0xa9, 0x4c, 0xa1, 0xad, 0xb1, 0x78, 0x2f, 0x1c, 0xdd, 0x47, 0xb4, 0x91, 0x3d, 0x02, 0x08, 0x58, 0xe7, 0x58, 0x8a, 0x33, 0xc6, 0x9c, 0x1f, 0x29, 0xe1, 0x7b, 0x11, 0xf9, 0x6c, 0x58, 0x79, 0xd4, 0xe6, 0xef, 0x17, 0xf7, 0xbd, 0x55, 0x09, 0x6b, 0x6f, 0x96, 0xc7, 0xca, 0x33, 0xce, 0x53, 0x4f, 0x5a, 0x27, 0xa1, 0x83, 0x30, 0x4e, 0xcc, 0xe6, 0xca, 0xda, 0xe0, 0xc6, 0xf5, 0x6b, 0x5b, 0x1f, 0x5e, 0xfd, 0x27, 0xbd, 0xfb, 0xb8, 0x6f, 0xff, 0x2f, 0x52, 0x03, 0x45, 0xd6, 0x27, 0x20, 0x8c, 0x02, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/colourbox.xpm0000600000176000000410000000067112105760300022221 0ustar buildbotwww-data00000000000000/* XPM */ static const char * colourbox_xpm[] = { "16 16 4 1", " c None", ". c #000000", "+ c #020202", "@ c #010101", " ", " ", " .......... ", " .++++++++++. ", " .+@@@@@@@@+. ", " .+@@@@@@@@+. ", " .+@@@@@@@@+. ", " .+@@@@@@@@+. ", " .+@@@@@@@@+. ", " .+@@@@@@@@+. ", " .+@@@@@@@@+. ", " .+@@@@@@@@+. ", " .++++++++++. ", " .......... ", " ", " "}; springlobby-0.169/src/images/connect.xpm0000600000176000000410000000074412105760300021637 0ustar buildbotwww-data00000000000000/* XPM */ static const char * connect_xpm[] = { "16 16 7 1", " c None", ". c #000000", "+ c #FFFAB4", "@ c #FFFAB7", "# c #FFF435", "$ c #5E5A13", "% c #9F9821", " ", " ", " ", " . .. ", " .+. ..@@.", " .+#. .@@#$.", " .+##..@##$. ", " .+###@@##$. ", " .+##$$###$. ", " .+#%$..##$. ", ".+#$$. .#$. ", ".#$.. .$. ", " .. . ", " ", " ", " "}; springlobby-0.169/src/images/down.xpm0000600000176000000410000000062612105760300021154 0ustar buildbotwww-data00000000000000/* XPM */ static const char * down_xpm[] = { "16 16 2 1", " c None", ". c #000000", " ", " ", " ", " ", " ", " ", "....... ", " ..... ", " ... ", " . ", " ", " ", " ", " ", " ", " "}; springlobby-0.169/src/images/download_man_icon.png.h0000600000176000000410000011120312105760300024057 0ustar buildbotwww-data00000000000000/* download_man_icon.png - 5865 bytes */ static const unsigned char download_man_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71, 0xde, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0d, 0xd7, 0x00, 0x00, 0x0d, 0xd7, 0x01, 0x42, 0x28, 0x9b, 0x78, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x13, 0x0e, 0x02, 0x0a, 0x5d, 0xe8, 0xcc, 0xc5, 0x00, 0x00, 0x16, 0x69, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x9a, 0x79, 0x90, 0x5d, 0xd5, 0x7d, 0xe7, 0x3f, 0xe7, 0xdc, 0xed, 0xbd, 0x7e, 0xbd, 0x6f, 0xda, 0x5a, 0xad, 0xd6, 0x02, 0x02, 0x49, 0xc8, 0x02, 0x21, 0x24, 0x24, 0x84, 0x14, 0x1b, 0x6c, 0x88, 0xcd, 0xc4, 0xc1, 0x28, 0xae, 0x72, 0x62, 0x82, 0x3d, 0x53, 0x8c, 0x8d, 0x8d, 0xed, 0x29, 0x4f, 0x95, 0xed, 0x82, 0xb8, 0x54, 0x4c, 0x5c, 0x33, 0x49, 0x55, 0xca, 0x54, 0xc0, 0x86, 0xd8, 0x29, 0xdb, 0x95, 0x99, 0x0a, 0xe3, 0xe0, 0x49, 0x2a, 0x38, 0x40, 0x62, 0x23, 0x2c, 0x8c, 0x76, 0xd0, 0x8a, 0x76, 0xa1, 0xa5, 0xa5, 0x6e, 0xa9, 0x5b, 0xbd, 0xbe, 0xee, 0x7e, 0xef, 0xdd, 0xf5, 0xfc, 0xe6, 0x8f, 0xb7, 0xe8, 0xb5, 0x90, 0xb0, 0x04, 0xb2, 0x67, 0x6a, 0x86, 0x53, 0xf5, 0xab, 0xf3, 0x96, 0x7b, 0xee, 0x3d, 0xbf, 0xef, 0xf9, 0xfe, 0x96, 0x73, 0xee, 0x0f, 0x3e, 0x68, 0x1f, 0xb4, 0x0f, 0xda, 0x07, 0xed, 0x83, 0xf6, 0xff, 0x6f, 0x53, 0xd7, 0xf2, 0x66, 0xf3, 0xee, 0x7d, 0xd4, 0xcb, 0x8e, 0x07, 0xcb, 0x4c, 0x6c, 0x0f, 0x0d, 0x6d, 0xfb, 0xfe, 0xa1, 0xff, 0xe7, 0x01, 0x98, 0xbe, 0xf4, 0xe1, 0x9a, 0xc0, 0xd3, 0x2b, 0x94, 0xe6, 0x4e, 0x44, 0xee, 0x04, 0xa5, 0x44, 0x59, 0xdf, 0x1c, 0xda, 0xf4, 0xbd, 0xed, 0x97, 0xba, 0xfe, 0xf6, 0xdb, 0x1f, 0x99, 0x27, 0xa2, 0xd6, 0x6a, 0xad, 0x16, 0x8b, 0x30, 0x5f, 0x29, 0x5a, 0x44, 0x68, 0x04, 0xc6, 0x81, 0x51, 0xe0, 0x28, 0xc8, 0x21, 0xd0, 0xaf, 0x6d, 0xdd, 0xda, 0xb2, 0x17, 0xd6, 0x9b, 0xff, 0xab, 0x00, 0x68, 0x5d, 0xf5, 0xf9, 0x3a, 0x85, 0x77, 0x07, 0xb0, 0x5a, 0x90, 0x3b, 0x81, 0xdb, 0x00, 0x07, 0x45, 0xa2, 0x84, 0xbf, 0x18, 0x98, 0x3e, 0xf4, 0x6d, 0x9e, 0x7f, 0x3e, 0xa9, 0x1e, 0xb3, 0x7c, 0xf9, 0xa3, 0xf5, 0x5a, 0xf3, 0x1f, 0x41, 0x1e, 0x04, 0x16, 0x01, 0xd8, 0xb6, 0x45, 0x5b, 0x5b, 0x03, 0x0d, 0x0d, 0xb5, 0xd8, 0xb6, 0x45, 0x1c, 0xc7, 0x8c, 0x8d, 0x15, 0x18, 0x1c, 0xcc, 0x12, 0x86, 0x51, 0x79, 0x68, 0xaf, 0x88, 0xfa, 0x1f, 0x22, 0x3c, 0xbd, 0x7d, 0xfb, 0x53, 0x3d, 0x97, 0x9a, 0x8f, 0x80, 0x52, 0x20, 0xbf, 0x35, 0x00, 0xea, 0x6f, 0xff, 0xf7, 0xcd, 0xae, 0x76, 0xef, 0x40, 0xb1, 0x06, 0x91, 0xd5, 0xc0, 0x2d, 0x80, 0x75, 0xe1, 0xf9, 0x24, 0xc0, 0x98, 0x52, 0xf2, 0xc7, 0x03, 0x9b, 0xfe, 0xe6, 0x5f, 0xab, 0xc7, 0x2e, 0x5c, 0xb8, 0xde, 0x6d, 0x68, 0x18, 0xf8, 0x4f, 0x22, 0xea, 0x9b, 0x40, 0xe3, 0xbc, 0x79, 0xd3, 0xf9, 0xdc, 0xe7, 0x3e, 0x8a, 0x31, 0x30, 0x6f, 0x5e, 0x07, 0xe9, 0xb4, 0x8b, 0x65, 0x6b, 0x14, 0x90, 0xcd, 0xe6, 0xc9, 0x8e, 0x15, 0x08, 0x83, 0x90, 0x9e, 0x9e, 0x01, 0x8e, 0x1c, 0x39, 0xc3, 0xfe, 0xfd, 0x27, 0x39, 0x75, 0xaa, 0x1f, 0x11, 0x09, 0x41, 0xfd, 0xd0, 0xf3, 0xac, 0xc7, 0x37, 0x6e, 0x7c, 0x72, 0xb4, 0x7c, 0xff, 0x7f, 0x00, 0xeb, 0x8e, 0xa5, 0x4b, 0x3d, 0x1d, 0x45, 0x6a, 0x4a, 0x73, 0x73, 0xa0, 0x36, 0x6e, 0x8c, 0xdf, 0x37, 0x00, 0xed, 0xcb, 0xff, 0xc3, 0x14, 0xb1, 0xac, 0xd5, 0x46, 0xe9, 0x3b, 0x51, 0xb2, 0x56, 0x09, 0x0b, 0x01, 0x7d, 0xd1, 0x98, 0x04, 0x30, 0xc5, 0x5e, 0x8d, 0x6b, 0x2d, 0x7f, 0x78, 0xfe, 0xf5, 0x67, 0x37, 0x57, 0x5f, 0xb0, 0x72, 0xe5, 0x57, 0x16, 0x89, 0x98, 0xbf, 0x07, 0x6e, 0x5a, 0xb2, 0x64, 0x1e, 0x5f, 0xf9, 0xca, 0x1f, 0x30, 0x63, 0x46, 0x1b, 0xfd, 0xe7, 0x87, 0x69, 0x6d, 0x6d, 0xa4, 0xa1, 0xbe, 0x76, 0xd2, 0x0d, 0x27, 0x72, 0x39, 0xfe, 0x65, 0xf3, 0x31, 0xd2, 0xb5, 0xcd, 0x04, 0x13, 0x63, 0xd4, 0xd9, 0x42, 0x9d, 0xa7, 0xe9, 0xed, 0x19, 0xe0, 0xd7, 0xbf, 0xde, 0xc7, 0xde, 0xbd, 0xc7, 0x11, 0x91, 0xf3, 0x22, 0x3c, 0xb4, 0x6d, 0xdb, 0xd3, 0x2f, 0x57, 0x18, 0xb0, 0x6e, 0x9d, 0xd5, 0x73, 0xf0, 0x60, 0x43, 0x0c, 0x6e, 0x43, 0x2a, 0x55, 0x68, 0xda, 0xb9, 0x73, 0xec, 0x6a, 0x19, 0xa1, 0xe6, 0xdd, 0xfb, 0xa8, 0x37, 0x92, 0x0d, 0x1f, 0x57, 0x4a, 0x3d, 0x00, 0xdc, 0x70, 0x99, 0xeb, 0xcc, 0x05, 0xa5, 0x2b, 0x52, 0x50, 0x4a, 0x7f, 0x6a, 0x60, 0xd3, 0xf7, 0x37, 0x4d, 0xb6, 0xf3, 0x47, 0x1f, 0x04, 0x79, 0xa6, 0xb3, 0xb3, 0xbd, 0xe6, 0xa1, 0x87, 0x3e, 0xc6, 0x9a, 0x35, 0x1f, 0x62, 0x60, 0x28, 0x4b, 0x4f, 0x36, 0xc1, 0x38, 0x19, 0x0a, 0xc3, 0xa7, 0x59, 0x3a, 0x7f, 0x06, 0x4d, 0x8d, 0x8d, 0x95, 0x31, 0x2f, 0xff, 0xe2, 0x55, 0xbc, 0xe9, 0x8b, 0x09, 0xa3, 0x98, 0x30, 0x36, 0x8c, 0x4c, 0x04, 0x64, 0x27, 0x0a, 0x34, 0x89, 0x4f, 0x57, 0x8b, 0xc7, 0xdb, 0x47, 0xcf, 0xf0, 0xf3, 0x9f, 0x6f, 0xa5, 0xbf, 0x7f, 0x44, 0x80, 0xbf, 0xd8, 0xba, 0xb5, 0xf5, 0xb1, 0xb2, 0x7f, 0x90, 0x75, 0xeb, 0xac, 0xa3, 0x7b, 0xf7, 0x4e, 0x4d, 0xbb, 0x6e, 0x2a, 0x4e, 0x92, 0x78, 0xf6, 0x94, 0x29, 0xbd, 0x57, 0xc3, 0x06, 0x55, 0xe5, 0xcc, 0xfe, 0x54, 0x29, 0xfe, 0x33, 0x30, 0xa7, 0x8a, 0xe2, 0x17, 0x2b, 0x5d, 0xf9, 0xae, 0x14, 0xdf, 0x18, 0xd8, 0xf4, 0xec, 0x8f, 0x26, 0x2b, 0xff, 0xe5, 0x3f, 0x03, 0x9e, 0xf8, 0xf0, 0x87, 0x97, 0xf0, 0xd8, 0x63, 0x7f, 0x82, 0xef, 0x07, 0x1c, 0x3d, 0x71, 0x92, 0x9e, 0x81, 0x31, 0x96, 0x5c, 0xdf, 0x41, 0xdf, 0x58, 0x4c, 0xfb, 0xb4, 0x0e, 0xa6, 0xa4, 0x63, 0x6a, 0x6a, 0xd2, 0xec, 0x78, 0x73, 0x17, 0x27, 0x7b, 0x06, 0x68, 0x98, 0x3a, 0x87, 0xa6, 0xb6, 0x76, 0xf2, 0x41, 0x42, 0x10, 0xc5, 0x84, 0x61, 0x82, 0xa3, 0x23, 0x96, 0xcf, 0x6d, 0x24, 0xed, 0x39, 0xe4, 0xf3, 0x3e, 0xdd, 0xdd, 0x67, 0x79, 0xee, 0xb9, 0x4d, 0x6c, 0xdf, 0x7e, 0x18, 0xa5, 0xf8, 0x69, 0x36, 0xdb, 0xfa, 0xe0, 0x81, 0x03, 0xeb, 0x43, 0x00, 0x59, 0xbb, 0xd6, 0xee, 0x19, 0x18, 0xe8, 0x42, 0xeb, 0xb4, 0x49, 0x12, 0x63, 0xf2, 0xf9, 0xe3, 0xb3, 0x4f, 0x9d, 0xf2, 0xaf, 0x04, 0x00, 0x0d, 0x70, 0x76, 0xe7, 0x0f, 0xf2, 0x43, 0x5b, 0x9e, 0x7d, 0x66, 0x70, 0xfa, 0xd0, 0xf5, 0x0a, 0x3e, 0x8d, 0x62, 0x07, 0x10, 0x80, 0xf2, 0x8b, 0xbd, 0x04, 0x0a, 0x02, 0xa0, 0xfc, 0xfd, 0x9f, 0x07, 0x36, 0x3d, 0xfb, 0xe3, 0x8b, 0x94, 0xff, 0x26, 0xf0, 0xc4, 0xba, 0x75, 0x6b, 0x78, 0xe2, 0x89, 0xcf, 0x33, 0x9a, 0x1d, 0xe5, 0xd5, 0x6d, 0x7b, 0xc8, 0x9a, 0x3a, 0xe6, 0xce, 0xee, 0xe2, 0x58, 0x77, 0x1f, 0x28, 0x0b, 0x44, 0xb0, 0x6d, 0x9b, 0xbf, 0x7f, 0xfe, 0x05, 0x32, 0xd3, 0x6e, 0x60, 0xe1, 0x6d, 0x6b, 0x68, 0x6d, 0xf0, 0xe8, 0x3e, 0xbc, 0x1b, 0x4b, 0x2b, 0x6c, 0xad, 0x69, 0x48, 0x6b, 0x96, 0x76, 0xd5, 0x71, 0xea, 0x54, 0x37, 0x9b, 0x77, 0x1d, 0x26, 0x95, 0x72, 0x99, 0x88, 0x0c, 0xdf, 0xfe, 0xf6, 0x1f, 0xf3, 0xa9, 0x4f, 0xdd, 0x8a, 0x08, 0x9f, 0x6e, 0x68, 0x18, 0xf8, 0x51, 0x79, 0x01, 0xd5, 0xc6, 0x8d, 0x31, 0xd9, 0x6c, 0x6f, 0xa2, 0x94, 0x63, 0x44, 0xea, 0xa8, 0xa9, 0xf9, 0xd0, 0x99, 0xdb, 0x6f, 0x4f, 0xbf, 0x2f, 0x27, 0xd8, 0x7a, 0xc7, 0x17, 0xd6, 0x2a, 0xe1, 0xc7, 0x02, 0x99, 0xea, 0x95, 0x17, 0xc8, 0x86, 0x91, 0xb5, 0x76, 0x7c, 0xc7, 0xf7, 0x86, 0x2e, 0x28, 0xff, 0xa5, 0x4f, 0x80, 0x7a, 0xe1, 0xae, 0xbb, 0x96, 0xaa, 0xf5, 0xeb, 0x1f, 0xe4, 0x8d, 0x5d, 0xfb, 0x19, 0x75, 0xa7, 0xd2, 0xd4, 0xd0, 0xc0, 0x0d, 0xcd, 0x11, 0x27, 0xbb, 0x7b, 0xb0, 0xeb, 0xda, 0xa8, 0x6f, 0x6c, 0x46, 0x44, 0x38, 0x7d, 0xe2, 0x18, 0x4d, 0xed, 0xd3, 0xb0, 0x1d, 0x8f, 0x30, 0x32, 0x44, 0x49, 0x42, 0x18, 0xc5, 0x24, 0x89, 0x61, 0x6c, 0x64, 0x18, 0xdb, 0xe4, 0x99, 0x52, 0x6f, 0xf3, 0xf6, 0xa9, 0x5e, 0xbc, 0xfa, 0x76, 0xd6, 0xdc, 0x32, 0x97, 0x30, 0x0c, 0x89, 0xe3, 0x18, 0xdb, 0xb6, 0xf9, 0xee, 0x77, 0xff, 0x27, 0x1b, 0x36, 0x1c, 0x42, 0x29, 0xf5, 0x67, 0x5b, 0xb6, 0x3c, 0xf5, 0xe7, 0xe5, 0x79, 0xf4, 0x2f, 0x5a, 0x34, 0x25, 0xaf, 0xd4, 0x0d, 0xca, 0x18, 0x2b, 0x81, 0x70, 0x4e, 0x5b, 0xdb, 0xb6, 0xdf, 0x64, 0x0e, 0xfa, 0x72, 0x7f, 0x58, 0x86, 0x83, 0x52, 0x0c, 0x71, 0xa5, 0x95, 0x57, 0x01, 0x10, 0xa0, 0xe4, 0x99, 0x6a, 0xe5, 0x57, 0xae, 0xfc, 0x42, 0x3b, 0xa8, 0x9f, 0xcc, 0x98, 0xd1, 0xaa, 0x1e, 0x7b, 0xec, 0x33, 0x68, 0xad, 0x69, 0x6e, 0x6e, 0xc0, 0x89, 0x27, 0x68, 0x54, 0x59, 0xea, 0x6a, 0x33, 0x2c, 0x5e, 0x38, 0x9f, 0x6c, 0xdf, 0x29, 0x94, 0x52, 0x68, 0xad, 0xe9, 0x9a, 0x77, 0x3d, 0x99, 0x4c, 0x2d, 0x5a, 0x6b, 0x2c, 0x4b, 0xa1, 0x4b, 0xbf, 0x8b, 0x3f, 0x4e, 0x8d, 0x64, 0x89, 0xbd, 0x16, 0x86, 0x0a, 0x0a, 0xbb, 0xb6, 0x95, 0x55, 0x1f, 0x9a, 0x83, 0xeb, 0xba, 0x58, 0x96, 0x85, 0x31, 0x86, 0x42, 0xa1, 0xc0, 0x17, 0xbf, 0xf8, 0x49, 0xae, 0xbb, 0xae, 0x15, 0x11, 0x59, 0xbf, 0x6a, 0xd5, 0xa3, 0x2b, 0xca, 0x73, 0x99, 0xb2, 0x7f, 0x7f, 0xbf, 0x86, 0x09, 0x44, 0x3c, 0x1b, 0x9a, 0xba, 0x87, 0x86, 0x96, 0x5d, 0x91, 0x09, 0x5c, 0xaa, 0x25, 0xf0, 0x61, 0x81, 0x08, 0x21, 0x00, 0x15, 0xa0, 0xc4, 0x57, 0x70, 0x2e, 0x9d, 0xd4, 0x4c, 0xa2, 0xbe, 0x88, 0xfd, 0x97, 0x40, 0xcb, 0x5f, 0xfd, 0xd5, 0xc3, 0x78, 0x9e, 0x8b, 0x88, 0x30, 0x6f, 0x76, 0x27, 0x8b, 0x67, 0x35, 0x72, 0xdd, 0xcc, 0x36, 0x92, 0x24, 0xa1, 0xf7, 0xec, 0x59, 0xe2, 0x28, 0x60, 0xe0, 0x7c, 0x5f, 0x85, 0x78, 0x5a, 0x4f, 0x16, 0x85, 0x62, 0x70, 0x68, 0x88, 0xb4, 0xeb, 0x70, 0xeb, 0xac, 0x34, 0x6b, 0x6f, 0xbd, 0x81, 0xfb, 0xd6, 0x2c, 0xa1, 0xa1, 0xbe, 0x16, 0xdb, 0xb6, 0xb1, 0x2c, 0x0b, 0xad, 0x35, 0x71, 0x1c, 0x93, 0x24, 0x09, 0x5f, 0xfd, 0xea, 0x27, 0xb1, 0x6d, 0x6d, 0x19, 0x23, 0xcf, 0xac, 0x5b, 0xb7, 0xce, 0xaa, 0x44, 0x14, 0x63, 0x8e, 0x08, 0xb8, 0x80, 0x27, 0xc6, 0xcc, 0xea, 0xbe, 0xe9, 0xa6, 0x39, 0xef, 0x09, 0x00, 0x34, 0x77, 0xaa, 0x92, 0xcd, 0x8b, 0x92, 0x00, 0x91, 0x40, 0xe0, 0x9f, 0x7a, 0xb6, 0x7e, 0xb7, 0x50, 0xbe, 0x64, 0xc5, 0x8a, 0x47, 0x6e, 0x04, 0x3e, 0xfb, 0x99, 0xcf, 0xfc, 0x1e, 0x9d, 0x9d, 0xd3, 0x10, 0xb9, 0x10, 0x81, 0x5a, 0x9a, 0x9b, 0x00, 0x38, 0x7d, 0xa6, 0x87, 0xee, 0x73, 0xc3, 0xcc, 0x59, 0xbc, 0x92, 0xdc, 0xd8, 0x28, 0x52, 0xf2, 0xae, 0x4a, 0x29, 0xb4, 0xd2, 0x28, 0x34, 0x0a, 0x05, 0x4a, 0xd1, 0x3e, 0x73, 0x0e, 0x33, 0x66, 0x4c, 0xa5, 0xb5, 0xa5, 0x69, 0xb2, 0x9d, 0x96, 0x18, 0xa2, 0xb5, 0x46, 0x29, 0x45, 0x3e, 0x9f, 0xa7, 0xbd, 0xbd, 0x85, 0xfb, 0xef, 0xff, 0x10, 0xc0, 0x92, 0x9e, 0x9e, 0xa9, 0x7f, 0x54, 0xc9, 0x3f, 0x0e, 0x1c, 0x98, 0xc0, 0xb6, 0xfb, 0x45, 0xc4, 0xd3, 0xe0, 0x0a, 0xdc, 0x7e, 0xa6, 0xa3, 0x23, 0x7d, 0xf5, 0x00, 0x08, 0xf3, 0x8b, 0x0e, 0x8f, 0x40, 0x09, 0x01, 0xe8, 0x40, 0x8b, 0x79, 0x61, 0xf2, 0xc4, 0xf4, 0xd7, 0xb5, 0x56, 0xfa, 0xc1, 0x07, 0x3f, 0x3a, 0x49, 0xf9, 0x72, 0x1b, 0x1c, 0x1c, 0x62, 0xcf, 0x81, 0xa3, 0x18, 0xa7, 0x06, 0x23, 0xd0, 0x39, 0xf7, 0x06, 0x44, 0xa8, 0x08, 0x4a, 0x55, 0x3c, 0x91, 0x56, 0x50, 0x27, 0x63, 0x64, 0xd2, 0x29, 0x36, 0x6f, 0x7f, 0x83, 0x5f, 0xbe, 0xb6, 0x95, 0x43, 0x47, 0x8e, 0x91, 0x2f, 0x14, 0x2e, 0x09, 0xc2, 0xc4, 0xc4, 0x04, 0xf7, 0xdc, 0xb3, 0x8a, 0x9a, 0x1a, 0x1b, 0xa5, 0xe4, 0xeb, 0x93, 0xb5, 0xd2, 0x87, 0x2b, 0x2c, 0x10, 0xa9, 0x4f, 0x1a, 0x1b, 0x6f, 0xbe, 0x2a, 0x00, 0x9a, 0xee, 0x7a, 0xb8, 0x01, 0x68, 0x40, 0x11, 0x94, 0x59, 0x80, 0x92, 0xa3, 0xe7, 0xb7, 0xfc, 0xe0, 0x78, 0xf9, 0x9a, 0xa5, 0x4b, 0x1f, 0xae, 0x01, 0xd6, 0xdd, 0x7f, 0xff, 0x1d, 0xd4, 0x5f, 0x94, 0xd8, 0x00, 0xec, 0xde, 0xb7, 0x9f, 0xcd, 0x7b, 0x8e, 0x72, 0xcb, 0x1d, 0x1f, 0xa5, 0x73, 0xd6, 0xdc, 0xca, 0xca, 0x57, 0x4b, 0x25, 0xd6, 0x0a, 0x58, 0x96, 0x62, 0xd1, 0x75, 0x33, 0xd9, 0xfb, 0xd6, 0x01, 0x4e, 0xe7, 0x6a, 0x19, 0xf3, 0x3a, 0xd9, 0x7d, 0xa8, 0x9b, 0x9d, 0x6f, 0x1d, 0xe3, 0xbf, 0xff, 0xec, 0x25, 0x94, 0x52, 0x15, 0x01, 0x08, 0x82, 0x00, 0xd7, 0x75, 0xf8, 0xc8, 0x47, 0xae, 0x47, 0x84, 0xa5, 0xcb, 0x97, 0x7f, 0x71, 0x71, 0xf9, 0xd9, 0xb3, 0xf7, 0xec, 0x19, 0x55, 0x4a, 0x8d, 0x09, 0x78, 0x88, 0x78, 0x02, 0xcb, 0x2e, 0xc7, 0x82, 0x4b, 0x02, 0x60, 0x05, 0xcc, 0x15, 0x45, 0x80, 0x10, 0x08, 0x04, 0x08, 0x3e, 0x46, 0xf6, 0x54, 0x5f, 0xe3, 0x79, 0xee, 0xbd, 0x40, 0xfd, 0x7d, 0xf7, 0xad, 0x78, 0xc7, 0x78, 0x3f, 0x08, 0x38, 0x70, 0xa2, 0x9f, 0x45, 0x4b, 0x57, 0x56, 0x94, 0x94, 0x4b, 0x20, 0x60, 0x8c, 0xc1, 0x88, 0x60, 0x04, 0xfc, 0xd0, 0xf0, 0x6f, 0x9b, 0x76, 0x63, 0xac, 0x14, 0xf3, 0xa7, 0x38, 0xb4, 0xa8, 0x11, 0xa2, 0xba, 0x4e, 0x0e, 0x0f, 0xb9, 0x9c, 0x57, 0xd3, 0xf8, 0xf3, 0xbf, 0x7d, 0x91, 0x5f, 0x6e, 0xda, 0x35, 0x89, 0x69, 0xb9, 0x5c, 0x8e, 0x15, 0x2b, 0x16, 0xa1, 0x94, 0xc2, 0xb2, 0xac, 0x3f, 0x9a, 0xc4, 0x4e, 0xad, 0x4f, 0x51, 0x34, 0x03, 0x4f, 0x41, 0x26, 0xae, 0xaf, 0x5f, 0x7c, 0x29, 0x5d, 0xed, 0x4b, 0xf2, 0x22, 0xb6, 0xea, 0x94, 0x16, 0x1f, 0x30, 0xa2, 0x48, 0x14, 0x24, 0x06, 0xde, 0x9a, 0xec, 0xfc, 0xe4, 0xee, 0x54, 0xca, 0xa3, 0xab, 0x6b, 0xfa, 0xa4, 0x49, 0x85, 0x61, 0xc8, 0x8f, 0x7f, 0xf6, 0x6f, 0xdc, 0x7a, 0xe7, 0xbd, 0x84, 0x89, 0x60, 0x69, 0x55, 0x89, 0xb5, 0x32, 0x79, 0x3c, 0x71, 0x22, 0x24, 0x89, 0x90, 0x24, 0x06, 0x85, 0x70, 0xdb, 0x4d, 0x73, 0x69, 0x6a, 0xa8, 0xaf, 0x5c, 0xb3, 0xeb, 0xad, 0x43, 0x24, 0x38, 0x14, 0x7c, 0x87, 0x53, 0xde, 0x0c, 0x16, 0x5c, 0xd7, 0x3a, 0x69, 0x7c, 0x3e, 0x9f, 0xa7, 0xa3, 0x63, 0x2a, 0x4d, 0x4d, 0x2e, 0xc3, 0xc3, 0xc1, 0xc7, 0x80, 0xc7, 0x2b, 0x4e, 0x5c, 0xa4, 0x47, 0x6b, 0xed, 0x89, 0x88, 0x25, 0x22, 0xb6, 0x86, 0x25, 0xc0, 0xf6, 0x2b, 0x02, 0x40, 0x2b, 0xe5, 0x19, 0x24, 0x40, 0x48, 0x14, 0x18, 0x05, 0x89, 0x65, 0xac, 0x93, 0x17, 0xa5, 0x10, 0x77, 0xae, 0x5e, 0x7d, 0x13, 0x8e, 0x63, 0x33, 0x30, 0x38, 0xc4, 0xab, 0x9b, 0x77, 0x72, 0x3e, 0xa7, 0x98, 0xdd, 0xe6, 0x31, 0xe7, 0xa6, 0x95, 0xc4, 0x89, 0xa1, 0x10, 0x24, 0x38, 0xda, 0xc2, 0xd6, 0x6a, 0x52, 0xc6, 0x21, 0x46, 0x88, 0x92, 0x84, 0x28, 0x31, 0xc4, 0x49, 0x82, 0x88, 0x61, 0x7a, 0x8d, 0x4f, 0x53, 0x43, 0xdb, 0xa4, 0x27, 0xdc, 0x72, 0xd3, 0x8d, 0x95, 0xcf, 0xcb, 0x0a, 0x05, 0xf6, 0xbc, 0x75, 0x90, 0xba, 0x74, 0x1b, 0x22, 0xc2, 0x8e, 0xbd, 0x87, 0xb0, 0x10, 0x56, 0x2c, 0xab, 0x63, 0xee, 0xdc, 0x66, 0x86, 0x87, 0xcf, 0xdd, 0xbc, 0x76, 0xed, 0x23, 0xb5, 0x1b, 0x37, 0x7e, 0x7f, 0x02, 0x60, 0xf6, 0xfe, 0xfd, 0xe7, 0xbb, 0x17, 0x2d, 0x52, 0x80, 0x07, 0xd8, 0x4a, 0xeb, 0x79, 0xc7, 0xe7, 0xcc, 0x69, 0x98, 0x7b, 0xe2, 0x44, 0xf6, 0x37, 0x9a, 0x80, 0x28, 0xb1, 0x10, 0x09, 0xa4, 0x94, 0x03, 0x88, 0x22, 0x50, 0x26, 0x1c, 0xaf, 0xb2, 0x7f, 0x07, 0x98, 0x77, 0xe3, 0x8d, 0x1d, 0x00, 0xfc, 0xe8, 0x7f, 0x6d, 0x20, 0x6c, 0x5e, 0xc8, 0xd4, 0xb9, 0x8b, 0x09, 0xea, 0xaf, 0x43, 0x59, 0x2e, 0x61, 0x54, 0x4c, 0x6b, 0xb3, 0x85, 0x98, 0x20, 0x36, 0xc4, 0x49, 0x51, 0xa2, 0xd2, 0xef, 0x61, 0x54, 0xfc, 0x1c, 0xc6, 0x06, 0x3b, 0xce, 0xd1, 0x31, 0xb5, 0xed, 0xb2, 0xfe, 0xd8, 0x18, 0x43, 0x92, 0x24, 0x1c, 0x3f, 0xd3, 0xcf, 0x2f, 0xb6, 0xec, 0xc7, 0x18, 0xc3, 0x9c, 0x99, 0xd3, 0xd8, 0x7d, 0x26, 0xe4, 0xf5, 0xed, 0x07, 0x71, 0x1c, 0xb7, 0x68, 0xb9, 0x81, 0x75, 0x5d, 0x55, 0x86, 0x27, 0x0a, 0xc6, 0xcb, 0x66, 0x60, 0x44, 0x52, 0x3a, 0x9d, 0x9e, 0x7d, 0x45, 0x3e, 0x40, 0x94, 0x14, 0x50, 0xba, 0x98, 0xfe, 0x0a, 0x81, 0x08, 0xbe, 0x6a, 0x68, 0x9c, 0xb8, 0xe0, 0x64, 0xed, 0xa9, 0x80, 0xd3, 0xd6, 0x56, 0xa4, 0xab, 0x95, 0xaa, 0xa7, 0xd1, 0x8d, 0x98, 0x18, 0x19, 0x40, 0x94, 0x45, 0x18, 0x27, 0x04, 0x61, 0x8c, 0x1f, 0xc6, 0x14, 0xfc, 0x88, 0xd1, 0x5c, 0x48, 0xc1, 0x8f, 0x09, 0x82, 0x04, 0x3f, 0x4c, 0x08, 0xc2, 0x62, 0xe6, 0x17, 0xc4, 0x09, 0x61, 0x9c, 0xe0, 0x51, 0x78, 0xd7, 0x64, 0xa5, 0x1c, 0xfb, 0x3f, 0xb2, 0xf2, 0x66, 0x4e, 0x9e, 0x1f, 0x27, 0x8c, 0x22, 0x1a, 0xea, 0x32, 0xac, 0x5b, 0x3d, 0x9b, 0xf3, 0x03, 0x43, 0x78, 0x5e, 0x53, 0x29, 0x52, 0x98, 0xce, 0x49, 0xc0, 0x89, 0x8c, 0xa1, 0xb5, 0x27, 0xe0, 0x09, 0xb8, 0x0a, 0xe6, 0x5e, 0x59, 0x18, 0x54, 0x66, 0x4c, 0x21, 0xbe, 0x28, 0x09, 0x4a, 0x91, 0x20, 0xe8, 0x1f, 0x1a, 0x0b, 0xcb, 0x7f, 0xbb, 0xae, 0xaa, 0x07, 0x38, 0x72, 0xe4, 0x2c, 0x83, 0x43, 0x23, 0x3c, 0xfc, 0x87, 0xab, 0xb8, 0x77, 0x69, 0x07, 0xb9, 0xf1, 0x91, 0xe2, 0xca, 0x87, 0x31, 0x41, 0x14, 0xe3, 0x07, 0x11, 0x85, 0x20, 0x26, 0x57, 0x88, 0x18, 0x1a, 0x0f, 0xc8, 0xe6, 0x03, 0xfc, 0x30, 0x2a, 0xfe, 0x17, 0x95, 0x80, 0x88, 0x13, 0xda, 0x9a, 0x1b, 0xdf, 0x15, 0x80, 0x24, 0x49, 0x2a, 0x32, 0xaf, 0xd5, 0xe1, 0x17, 0xdb, 0x0e, 0x93, 0x24, 0x09, 0x1b, 0x36, 0xbd, 0x41, 0xcf, 0x48, 0x31, 0x49, 0x2a, 0xfa, 0x05, 0x95, 0xb9, 0xc8, 0x94, 0x13, 0x11, 0xf1, 0x00, 0x57, 0x17, 0x41, 0xe8, 0xbc, 0x22, 0x1f, 0x10, 0x27, 0xce, 0x90, 0x4d, 0x1c, 0x28, 0xa5, 0x12, 0x85, 0x18, 0xa3, 0x54, 0x32, 0xa5, 0xa5, 0xde, 0xed, 0x87, 0xa8, 0x38, 0x21, 0x31, 0x4a, 0x29, 0x7c, 0x3f, 0x62, 0xeb, 0xae, 0xd3, 0x9c, 0x1b, 0xee, 0x63, 0xc1, 0xac, 0x56, 0x7e, 0x6f, 0xd1, 0x14, 0x76, 0xf4, 0xc7, 0x68, 0x05, 0x19, 0x5d, 0xa0, 0x90, 0xd4, 0x60, 0x5b, 0x06, 0xad, 0x8a, 0x3e, 0x20, 0x17, 0x94, 0xa2, 0x8c, 0x02, 0x25, 0x60, 0x24, 0x21, 0x31, 0x86, 0x89, 0x89, 0x88, 0xd6, 0xcb, 0x80, 0x10, 0x45, 0x11, 0x51, 0x14, 0x55, 0x58, 0x70, 0xeb, 0xe2, 0xeb, 0xf9, 0xc7, 0x5f, 0xbd, 0xc5, 0x0b, 0xaf, 0x6c, 0x67, 0x73, 0x4f, 0x2d, 0x0b, 0xda, 0x52, 0x88, 0x84, 0x97, 0xb3, 0x1d, 0xd1, 0x4a, 0xb9, 0x22, 0x62, 0x8b, 0x52, 0xb6, 0x82, 0xe6, 0x2b, 0x02, 0x60, 0x34, 0x88, 0xce, 0xb6, 0x78, 0xba, 0xa0, 0x44, 0x44, 0x94, 0x36, 0x4a, 0x4c, 0xa2, 0x0a, 0x41, 0x0d, 0x90, 0x03, 0xb0, 0x2c, 0x9d, 0x35, 0x06, 0x0a, 0x85, 0x00, 0x05, 0x0c, 0xe8, 0x19, 0x6c, 0xeb, 0xb7, 0xb9, 0x7e, 0x62, 0x90, 0x16, 0xed, 0x71, 0xe3, 0xf4, 0x69, 0xcc, 0x9b, 0xd5, 0xc9, 0x91, 0xe3, 0xdd, 0x8c, 0x8e, 0xe5, 0x38, 0x1d, 0xb4, 0x14, 0x73, 0x7d, 0x04, 0x11, 0x30, 0xa6, 0xe8, 0xf9, 0xe3, 0xa4, 0xb8, 0x11, 0x1a, 0xe9, 0x1f, 0x60, 0x66, 0xc7, 0x34, 0x2c, 0xad, 0xdf, 0x61, 0xfb, 0x65, 0x00, 0xc2, 0x30, 0x24, 0x8a, 0x22, 0x14, 0x70, 0xef, 0xf2, 0xb9, 0x8c, 0x8e, 0xb6, 0xb2, 0xf1, 0xd0, 0x0e, 0x9c, 0xa9, 0xb5, 0x84, 0x85, 0xa8, 0x64, 0x9a, 0x32, 0x3a, 0xd9, 0x94, 0x55, 0x03, 0xe0, 0xa1, 0xb5, 0x8d, 0x88, 0xcd, 0x25, 0x00, 0xb8, 0xb4, 0x09, 0xec, 0xfc, 0x41, 0xa4, 0x94, 0x3a, 0xa5, 0x84, 0x40, 0x44, 0x7c, 0x11, 0x82, 0xd8, 0xc4, 0x95, 0xc1, 0x9b, 0x37, 0xb7, 0xf6, 0x01, 0xfe, 0xe0, 0xe0, 0x18, 0x69, 0xcf, 0xaa, 0xd0, 0xfe, 0xc8, 0x44, 0x33, 0x07, 0x7b, 0x27, 0x98, 0x39, 0xad, 0x05, 0x80, 0xf9, 0x73, 0x67, 0xb1, 0xfc, 0xe6, 0x05, 0x38, 0x13, 0x67, 0xf0, 0x0b, 0x3e, 0x05, 0x3f, 0x2a, 0x99, 0x45, 0x44, 0x21, 0x8c, 0x8a, 0xe6, 0x10, 0xc6, 0x0c, 0x27, 0xf5, 0x3c, 0xf7, 0xe2, 0x16, 0x8e, 0x1d, 0x3f, 0xc9, 0x86, 0xd7, 0xb6, 0xf2, 0xd3, 0x17, 0x7e, 0xc9, 0x91, 0x63, 0x27, 0x08, 0xc3, 0xb0, 0xa2, 0xf8, 0xc5, 0x40, 0xbc, 0xbe, 0x63, 0x2f, 0x56, 0x4d, 0x33, 0x29, 0x4b, 0x31, 0x3e, 0x5e, 0x28, 0x99, 0x80, 0x75, 0xfa, 0x22, 0x04, 0x1b, 0x4b, 0xd9, 0xa0, 0x87, 0x52, 0x1e, 0x4a, 0xa5, 0xae, 0x38, 0x15, 0x56, 0x70, 0x44, 0x94, 0x0e, 0x14, 0x12, 0x68, 0x94, 0x6f, 0x4c, 0xdc, 0x72, 0xe1, 0xdf, 0xf5, 0x06, 0x38, 0x74, 0xee, 0xdc, 0x10, 0x5a, 0x0c, 0x96, 0xa2, 0x02, 0xc2, 0x9c, 0xce, 0xe9, 0x78, 0xae, 0x3b, 0xe9, 0x5e, 0x9f, 0xfc, 0xc8, 0xad, 0xd4, 0x87, 0x67, 0xf0, 0x83, 0x98, 0x7c, 0x09, 0x84, 0xa2, 0xc4, 0x45, 0x09, 0x63, 0x4e, 0xf9, 0x8d, 0xfc, 0x70, 0x43, 0x37, 0xaf, 0x9c, 0x74, 0xd9, 0x7e, 0xbe, 0x81, 0x17, 0x76, 0x0d, 0x12, 0x04, 0xc1, 0x24, 0x10, 0xca, 0xfd, 0xe0, 0xf0, 0x08, 0xaf, 0x1f, 0x1c, 0x41, 0x92, 0x98, 0xfa, 0x94, 0x43, 0x36, 0x9b, 0x03, 0x08, 0x1a, 0x1a, 0xe4, 0xd8, 0x24, 0x1d, 0x2c, 0xab, 0x1d, 0xf0, 0x74, 0x31, 0x14, 0xba, 0x22, 0x12, 0x5f, 0x31, 0x00, 0x82, 0xb5, 0x57, 0x41, 0x20, 0x4a, 0x07, 0xa2, 0x24, 0xb0, 0xb5, 0x33, 0xf5, 0x22, 0x88, 0x5e, 0xeb, 0xed, 0x1d, 0x64, 0x62, 0x2c, 0x47, 0xad, 0x6d, 0xf0, 0xc3, 0x18, 0x3f, 0x8c, 0x98, 0xdb, 0x72, 0xe9, 0x5b, 0xde, 0x77, 0xd7, 0x4a, 0xee, 0xec, 0x82, 0x54, 0x32, 0x4a, 0xbe, 0xe4, 0x1c, 0xcb, 0x2c, 0xf0, 0x83, 0x98, 0x20, 0x8c, 0x51, 0x6e, 0x1d, 0x41, 0x9c, 0x10, 0x44, 0x09, 0xc3, 0x63, 0x13, 0x8c, 0x8d, 0x8f, 0xe3, 0xfb, 0x7e, 0x05, 0x88, 0x32, 0x08, 0x3f, 0xfb, 0xd7, 0xed, 0x98, 0x4c, 0x07, 0x75, 0x29, 0x0b, 0x5b, 0x0c, 0x83, 0x83, 0x59, 0x80, 0xed, 0x2f, 0xbf, 0xfc, 0x54, 0x50, 0x7e, 0xde, 0xc9, 0xae, 0xae, 0x94, 0xc0, 0x3c, 0x94, 0xf2, 0xa4, 0xa8, 0xbc, 0xa7, 0x4a, 0x3e, 0xec, 0x8a, 0x00, 0x18, 0xdc, 0xfc, 0xf4, 0x59, 0x8c, 0xf4, 0x29, 0x29, 0x6e, 0x86, 0x8c, 0x4a, 0x5a, 0x29, 0xc6, 0xff, 0x52, 0xc8, 0xe1, 0xe5, 0x24, 0x31, 0x1c, 0x3e, 0x7c, 0x9a, 0x26, 0x1d, 0x10, 0x94, 0xe8, 0x3c, 0xb5, 0xa5, 0xee, 0xb2, 0xde, 0x7c, 0xfe, 0xbc, 0x59, 0xfc, 0xe9, 0x3d, 0x4b, 0x58, 0xdc, 0x98, 0xad, 0xb0, 0xa0, 0x10, 0x54, 0x81, 0x10, 0x15, 0xd9, 0x10, 0x86, 0x31, 0x67, 0xc7, 0x34, 0xbd, 0x7d, 0x45, 0x16, 0x54, 0x4b, 0x14, 0x45, 0x9c, 0x18, 0xb5, 0x91, 0x24, 0x62, 0x5a, 0xc6, 0x65, 0x6c, 0x34, 0xc7, 0xf8, 0x78, 0x1e, 0xa5, 0xe4, 0xa5, 0x49, 0x0f, 0xcb, 0x64, 0x6e, 0x40, 0x24, 0xad, 0x4a, 0x9b, 0x22, 0x0d, 0x9e, 0x28, 0x35, 0x78, 0xe5, 0xbb, 0x41, 0x20, 0x56, 0xec, 0x00, 0xe3, 0x8b, 0xd6, 0x81, 0x12, 0x92, 0x76, 0xef, 0x42, 0x18, 0x71, 0xdd, 0x96, 0x57, 0x81, 0xf3, 0xbb, 0x76, 0x1d, 0xa3, 0x25, 0xa5, 0x40, 0x04, 0x3f, 0x8c, 0x79, 0x75, 0xc7, 0x21, 0x7c, 0xdf, 0x27, 0x49, 0x92, 0xcb, 0xde, 0x77, 0x78, 0x68, 0xb0, 0xe8, 0x07, 0xca, 0x26, 0x50, 0x32, 0x83, 0x32, 0x13, 0x82, 0xa8, 0xd8, 0xbf, 0xdd, 0xdd, 0x57, 0x51, 0xbc, 0xcc, 0x84, 0x20, 0x08, 0x90, 0x24, 0x81, 0x24, 0xa4, 0xa3, 0x3e, 0xcd, 0xe9, 0xd3, 0xfd, 0xc5, 0xe4, 0xd2, 0x38, 0x3f, 0x9d, 0xb4, 0x9f, 0x51, 0xea, 0x96, 0x12, 0xed, 0x3d, 0x8a, 0x21, 0xd0, 0x43, 0xe4, 0xe4, 0x55, 0x01, 0x30, 0x32, 0x63, 0xe8, 0x90, 0xc2, 0x1e, 0x16, 0x8c, 0x6f, 0x44, 0x07, 0x89, 0xb6, 0x2a, 0x99, 0xd4, 0xc6, 0x8d, 0xeb, 0x63, 0xe0, 0xef, 0xba, 0xbb, 0xfb, 0xe9, 0xe9, 0xee, 0xa3, 0xc3, 0x0d, 0xf1, 0x83, 0x88, 0x37, 0xce, 0x5a, 0xf4, 0x9c, 0x3d, 0x47, 0x2e, 0x97, 0x23, 0x9f, 0xcf, 0x57, 0x26, 0x5e, 0x76, 0x62, 0xd9, 0xb1, 0x71, 0x5e, 0x39, 0x90, 0x2d, 0x01, 0x50, 0x5a, 0xfd, 0x2a, 0x87, 0xe8, 0x97, 0x24, 0x88, 0x62, 0x0a, 0x91, 0xc1, 0xf7, 0xfd, 0x49, 0xca, 0x07, 0x41, 0x80, 0x43, 0xc4, 0xf4, 0xfa, 0x14, 0x96, 0x49, 0x38, 0x7d, 0xfa, 0x3c, 0x22, 0xb2, 0x71, 0xdb, 0xb6, 0x27, 0x4f, 0x55, 0xbf, 0x30, 0x31, 0xf0, 0xf1, 0x52, 0x1a, 0x5c, 0x74, 0x80, 0x45, 0x16, 0xbc, 0x7d, 0x55, 0x00, 0xf0, 0xfc, 0xf3, 0x89, 0xe5, 0x24, 0x3b, 0xb4, 0x10, 0x68, 0x8c, 0x8f, 0x98, 0xfa, 0xe9, 0x6b, 0x1f, 0x6e, 0xad, 0xe2, 0xc8, 0x93, 0x40, 0xf8, 0xab, 0x5f, 0xed, 0xa1, 0xb3, 0x5e, 0xe3, 0x2a, 0xc3, 0x58, 0x21, 0xe6, 0xaf, 0xff, 0xf9, 0x10, 0xc7, 0x4f, 0x9e, 0xae, 0x80, 0x50, 0x28, 0x14, 0xc8, 0xe7, 0xf3, 0xe4, 0xf3, 0x79, 0xa2, 0x30, 0x20, 0x54, 0xe9, 0xa2, 0xf2, 0x65, 0x10, 0x82, 0xb8, 0x12, 0x19, 0x82, 0x30, 0xae, 0x48, 0x8d, 0x6d, 0xde, 0xa1, 0xfc, 0x9b, 0x7b, 0x0e, 0x80, 0xb2, 0xb8, 0xa1, 0xbd, 0x81, 0x23, 0x47, 0x7a, 0x88, 0xe3, 0x04, 0x11, 0xfe, 0x6b, 0xf5, 0xb4, 0x8f, 0xdf, 0x74, 0xd3, 0x2d, 0x88, 0xcc, 0x96, 0x12, 0x00, 0x25, 0x16, 0xe0, 0x59, 0xd6, 0x9e, 0xab, 0x03, 0x00, 0xe8, 0xdb, 0xf8, 0xec, 0xa9, 0x04, 0xdd, 0x2d, 0x9a, 0x40, 0x83, 0x9f, 0x44, 0xd6, 0xbc, 0xf2, 0x61, 0xea, 0xd6, 0xad, 0xcf, 0xf6, 0x2a, 0xc5, 0x93, 0xbd, 0xbd, 0x83, 0x1c, 0xd8, 0x77, 0x9c, 0x25, 0xcd, 0x42, 0x14, 0x27, 0x0c, 0xc7, 0x29, 0x9e, 0xdb, 0xd4, 0x43, 0xa1, 0x50, 0x20, 0x97, 0xcb, 0x4d, 0x92, 0xfd, 0x07, 0x8f, 0x10, 0x63, 0x57, 0x18, 0x50, 0x28, 0x29, 0x5f, 0x36, 0x81, 0x22, 0x1b, 0x8a, 0x2c, 0x18, 0x1b, 0x9f, 0xa8, 0x30, 0xc0, 0xf7, 0x7d, 0xf6, 0xec, 0x3f, 0xc2, 0x2b, 0x07, 0x63, 0x16, 0x77, 0x75, 0x51, 0x18, 0x2f, 0xd0, 0xdd, 0xdd, 0x0f, 0xf0, 0xca, 0xf6, 0xed, 0xdf, 0xfb, 0xe5, 0xa4, 0xe4, 0xc6, 0x98, 0xcf, 0x51, 0xdc, 0x06, 0x7b, 0xa5, 0xde, 0x15, 0x91, 0x5d, 0x53, 0xf7, 0xed, 0xcb, 0x5d, 0x35, 0x00, 0x00, 0xcd, 0xf5, 0xf6, 0xee, 0x38, 0xd1, 0x63, 0x46, 0x13, 0x24, 0xa8, 0x74, 0xeb, 0xea, 0x87, 0xa7, 0x5e, 0xf0, 0x05, 0xe6, 0xbf, 0x00, 0xc7, 0x5f, 0x7b, 0x6d, 0x1f, 0xf1, 0xf8, 0x38, 0xb7, 0xb4, 0x50, 0x0c, 0x77, 0xc6, 0xab, 0x30, 0x20, 0x9f, 0xcf, 0x93, 0xcb, 0xe5, 0x78, 0xfe, 0xe7, 0xaf, 0xf0, 0xec, 0x8b, 0x07, 0x88, 0xb5, 0x77, 0x41, 0xf1, 0x0a, 0x0b, 0x2e, 0x38, 0xc3, 0x30, 0x0c, 0x31, 0xa1, 0xcf, 0x9e, 0x93, 0xa3, 0x14, 0x0a, 0x05, 0x0a, 0x85, 0x02, 0xbe, 0xef, 0x93, 0x9b, 0x98, 0x60, 0xe1, 0xcc, 0x56, 0xda, 0xd2, 0x2e, 0x7b, 0xf6, 0xbc, 0x8d, 0x88, 0xe4, 0x8c, 0xd1, 0x8f, 0x54, 0xcf, 0xf5, 0xf4, 0xc2, 0x85, 0xcb, 0x80, 0xbb, 0x2a, 0xf4, 0x2f, 0x39, 0x41, 0xe0, 0x95, 0xab, 0x3b, 0x12, 0xab, 0x6a, 0x6f, 0xbf, 0xfc, 0x54, 0xa0, 0x8d, 0xbd, 0xdb, 0x8a, 0x4d, 0xc1, 0x48, 0xe2, 0x63, 0xd4, 0x8c, 0xae, 0xb5, 0x0f, 0xa5, 0x8a, 0xbe, 0xe0, 0xfb, 0x13, 0xc6, 0xe8, 0x4f, 0x87, 0x61, 0x14, 0xbe, 0xf8, 0xe2, 0x36, 0xea, 0x4d, 0xc0, 0xd2, 0x29, 0x36, 0x03, 0x63, 0x01, 0x43, 0xc3, 0x23, 0x95, 0x95, 0xcf, 0xe7, 0xf3, 0x6c, 0x3b, 0x3e, 0x8e, 0x5f, 0xd3, 0x59, 0x52, 0x3a, 0xac, 0x5a, 0xfd, 0x52, 0x14, 0x08, 0x42, 0x92, 0xd0, 0x47, 0x42, 0x1f, 0x89, 0x7c, 0x4e, 0x0c, 0x59, 0x15, 0x3f, 0x92, 0xcf, 0xe7, 0x19, 0x2b, 0xb8, 0x74, 0x35, 0x35, 0xb0, 0x7b, 0xf7, 0xdb, 0xe4, 0x72, 0x3e, 0xa0, 0x1e, 0xd9, 0xbe, 0xfd, 0xaf, 0x8f, 0x55, 0xbf, 0x2f, 0x34, 0xf0, 0xad, 0x4b, 0x28, 0xef, 0x69, 0xa5, 0xbe, 0x70, 0x62, 0xc1, 0x82, 0x3f, 0x39, 0xb0, 0x70, 0xa1, 0xfb, 0x9e, 0xdf, 0x0e, 0x37, 0xae, 0x7d, 0xa8, 0xd1, 0xc1, 0xe9, 0x52, 0xb1, 0x16, 0x89, 0xc8, 0x0f, 0xdc, 0x3b, 0xed, 0x38, 0xeb, 0x8b, 0xaf, 0xa8, 0x56, 0xac, 0x78, 0xf4, 0x7e, 0xa5, 0xe4, 0x1f, 0x5a, 0x5b, 0x1b, 0xac, 0x7b, 0xef, 0x5d, 0x4e, 0xde, 0xa9, 0x61, 0xc9, 0x1c, 0x0b, 0xcf, 0x2d, 0x66, 0xdb, 0x03, 0x43, 0x23, 0x3c, 0xb5, 0x61, 0x08, 0x3b, 0xd3, 0x0c, 0x08, 0xc6, 0x48, 0xf1, 0x34, 0xc8, 0x18, 0x30, 0x06, 0x31, 0x31, 0x24, 0x49, 0xb1, 0x8f, 0x23, 0x24, 0x29, 0xca, 0x03, 0x37, 0xdb, 0xe4, 0x73, 0x13, 0x8c, 0xe5, 0x12, 0xd2, 0xce, 0x0c, 0xf6, 0xed, 0x3b, 0xc1, 0xb9, 0x73, 0xc3, 0x00, 0xff, 0x6d, 0xeb, 0xd6, 0xa7, 0xbf, 0x55, 0x3d, 0xbf, 0x53, 0x0b, 0x16, 0x7c, 0x5d, 0x29, 0xf5, 0x55, 0x29, 0xa6, 0xf8, 0x56, 0x29, 0xd5, 0xaf, 0x16, 0x4b, 0xc1, 0x59, 0x81, 0x27, 0xfd, 0x38, 0xfe, 0xe1, 0x0d, 0x47, 0x8e, 0x8c, 0x5f, 0x75, 0x7d, 0xc0, 0x94, 0xc5, 0x9f, 0xcd, 0x98, 0x74, 0xcd, 0x74, 0x3c, 0x90, 0x24, 0xca, 0x0d, 0x6e, 0xfe, 0xd1, 0xb9, 0xf2, 0x61, 0xcf, 0x8a, 0x15, 0x5f, 0xfe, 0xb4, 0x52, 0xfc, 0x5d, 0x43, 0x43, 0xc6, 0xfd, 0xfd, 0xdf, 0xbf, 0x8d, 0xbb, 0xef, 0x5e, 0xc0, 0xc8, 0xc8, 0x08, 0x6f, 0x1d, 0x3c, 0xc2, 0x4f, 0xb7, 0x9c, 0x23, 0x69, 0x98, 0x57, 0x3e, 0xce, 0x01, 0x31, 0xc5, 0x93, 0x24, 0x49, 0xc0, 0x24, 0x88, 0x49, 0x8a, 0xe1, 0xcd, 0xc4, 0x48, 0x12, 0x41, 0x12, 0x23, 0x71, 0x44, 0x47, 0x6d, 0xc0, 0xec, 0x69, 0x1d, 0x58, 0x91, 0xb0, 0x77, 0xef, 0x71, 0x86, 0x87, 0xc7, 0x51, 0x8a, 0xef, 0x6c, 0xd9, 0xf2, 0xf4, 0xe3, 0xd5, 0xf3, 0xea, 0x5e, 0xb8, 0xf0, 0x0e, 0x51, 0xea, 0x39, 0x44, 0xdc, 0xcb, 0x29, 0x7f, 0x71, 0x90, 0x43, 0xe4, 0x99, 0xf7, 0x54, 0x20, 0xb1, 0x70, 0xe1, 0x3a, 0xb7, 0xbf, 0xb9, 0xa9, 0x45, 0x62, 0xad, 0x53, 0x35, 0x96, 0xdf, 0xbb, 0xe1, 0xe9, 0xe1, 0xe2, 0xfe, 0x0e, 0x56, 0xad, 0x7a, 0x74, 0xb5, 0x31, 0xf2, 0x9c, 0x6d, 0x5b, 0x33, 0x56, 0xae, 0xec, 0xe2, 0x63, 0x1f, 0xbb, 0x85, 0xbd, 0x07, 0xcf, 0xf0, 0xd6, 0x60, 0x8a, 0xee, 0x11, 0x9f, 0x30, 0x8e, 0x2f, 0x1c, 0x0b, 0x8b, 0x41, 0x8c, 0x29, 0x82, 0x90, 0x14, 0x41, 0xc0, 0xc4, 0x28, 0x93, 0xd0, 0x5e, 0x9f, 0x62, 0x76, 0x73, 0x2d, 0x8d, 0x29, 0x87, 0xde, 0x9e, 0x41, 0x0e, 0x1d, 0x3a, 0x4d, 0x18, 0x46, 0x79, 0x11, 0xf5, 0xa5, 0x6d, 0xdb, 0x9e, 0xfa, 0x49, 0xf5, 0x7c, 0x4e, 0x2c, 0x5a, 0xb4, 0xd8, 0x12, 0xf9, 0x99, 0x14, 0x37, 0x3b, 0x97, 0x52, 0xfe, 0xa2, 0xb2, 0x02, 0x0e, 0x02, 0x1b, 0x45, 0xa9, 0xd7, 0xdf, 0x4f, 0x85, 0x88, 0x6a, 0x5b, 0xfb, 0x48, 0x26, 0x8c, 0xc5, 0x71, 0x47, 0x54, 0x34, 0xb0, 0xae, 0x3d, 0x5f, 0x36, 0x87, 0xd5, 0xab, 0x1f, 0x6d, 0x4b, 0x12, 0xf9, 0x5b, 0x11, 0xfe, 0x5d, 0x6d, 0x6d, 0x9a, 0x05, 0x0b, 0x3a, 0x99, 0x35, 0x6b, 0x2a, 0xca, 0x75, 0xe9, 0x1f, 0xf3, 0x19, 0xca, 0x47, 0x8c, 0x87, 0x31, 0x85, 0x30, 0x21, 0x31, 0x09, 0x4a, 0x0c, 0xae, 0x82, 0x8c, 0x0d, 0x0d, 0x29, 0x9b, 0x96, 0x4c, 0x0a, 0xcb, 0x08, 0x7d, 0x7d, 0xc3, 0x9c, 0x38, 0x71, 0x8e, 0xd1, 0xd1, 0x09, 0x80, 0xdd, 0x5a, 0xcb, 0x67, 0x37, 0x6f, 0xfe, 0xde, 0x81, 0x49, 0x4e, 0xef, 0xc6, 0x1b, 0x17, 0x19, 0xad, 0xff, 0x09, 0x68, 0xe5, 0x9d, 0xd4, 0x57, 0xa5, 0x57, 0x7a, 0xfb, 0x14, 0xbc, 0x66, 0x8c, 0x79, 0xcd, 0x4b, 0x92, 0x4d, 0xd3, 0x8f, 0x1e, 0x1d, 0xbc, 0x86, 0x35, 0x42, 0xeb, 0xf5, 0xd2, 0xa5, 0x67, 0xad, 0x9d, 0xc5, 0x5d, 0x64, 0x5c, 0x7d, 0xf6, 0xb9, 0x72, 0xe5, 0x97, 0xfe, 0x40, 0x44, 0x7d, 0x07, 0x58, 0xe8, 0x38, 0x16, 0xd3, 0xa6, 0xb5, 0xd0, 0xde, 0xde, 0x44, 0x53, 0x53, 0x0d, 0x99, 0x4c, 0xba, 0x62, 0x0d, 0xc6, 0x14, 0xcd, 0x21, 0x97, 0x0b, 0xc8, 0x66, 0x73, 0x0c, 0x0e, 0x66, 0xe9, 0xef, 0x1f, 0x21, 0x08, 0x22, 0x80, 0x73, 0x20, 0xdf, 0xf1, 0xbc, 0xb6, 0xbf, 0x29, 0x25, 0x5f, 0xd5, 0xb4, 0xbf, 0x4f, 0xe0, 0x69, 0xa0, 0xe9, 0x22, 0x9a, 0xef, 0x14, 0x78, 0x5d, 0x29, 0xf5, 0xeb, 0xc4, 0xf3, 0x36, 0xcd, 0xdd, 0xb9, 0x33, 0xfb, 0x3b, 0x29, 0x92, 0xba, 0x1c, 0x40, 0x2b, 0x56, 0x0c, 0x7d, 0x1c, 0xe4, 0x21, 0xa5, 0xf8, 0x44, 0x92, 0x84, 0xee, 0xb9, 0x73, 0x7b, 0xb0, 0x2c, 0x87, 0xda, 0xda, 0x7a, 0x6a, 0x6a, 0x9a, 0xb1, 0xed, 0x1a, 0x92, 0x44, 0xa3, 0xb5, 0x53, 0x55, 0x8f, 0x20, 0x9b, 0x8c, 0x51, 0x3f, 0x49, 0xa7, 0x27, 0x9e, 0xdb, 0xb8, 0xf1, 0x27, 0x93, 0x5e, 0x75, 0x9f, 0xec, 0xea, 0x4a, 0xa9, 0x4c, 0xe6, 0x71, 0x94, 0xfa, 0x32, 0x22, 0x89, 0x82, 0xdd, 0x88, 0x6c, 0x42, 0xeb, 0xcd, 0x9e, 0xd6, 0x5b, 0x2e, 0x15, 0xef, 0x7f, 0xd7, 0x00, 0xa8, 0x52, 0x08, 0x4a, 0x95, 0x7a, 0x07, 0x70, 0x96, 0x2f, 0x5f, 0xf5, 0xf9, 0x9a, 0x9a, 0x96, 0x6f, 0x35, 0x37, 0xb7, 0x3a, 0xe9, 0x74, 0x1b, 0xbe, 0x6f, 0x08, 0x82, 0x08, 0xad, 0x15, 0x8e, 0xa3, 0x48, 0xa7, 0x35, 0xc3, 0xc3, 0xbd, 0x49, 0x36, 0xdb, 0xf7, 0x8f, 0x9b, 0x36, 0xfd, 0xea, 0x9b, 0x14, 0x77, 0x6f, 0x31, 0x10, 0x02, 0xe1, 0x42, 0x08, 0xfe, 0x65, 0xe1, 0xc2, 0x0f, 0x2b, 0x91, 0x8f, 0x8b, 0x52, 0xbd, 0x1a, 0x36, 0x99, 0x5c, 0xee, 0xcd, 0x2b, 0xad, 0x05, 0xb8, 0xf2, 0xf7, 0x02, 0xef, 0x5d, 0x69, 0x0f, 0xa8, 0x29, 0xf5, 0xa9, 0x8b, 0xe2, 0xb1, 0x13, 0x45, 0x85, 0x3a, 0xc7, 0xf1, 0xb9, 0xfb, 0xee, 0xdb, 0xf0, 0x3c, 0x8f, 0xfe, 0xfe, 0x7e, 0xc6, 0xc6, 0xc6, 0x26, 0xdd, 0x24, 0x97, 0x0b, 0x88, 0xe3, 0x82, 0x07, 0xcc, 0x28, 0x01, 0x10, 0x95, 0x00, 0x08, 0xd2, 0x75, 0x75, 0xea, 0xee, 0x13, 0x27, 0xf6, 0xbf, 0x5d, 0x28, 0x6c, 0x05, 0x0a, 0xa5, 0xdf, 0xdf, 0x57, 0xb3, 0xaf, 0x91, 0xe2, 0xe9, 0x92, 0xe2, 0x35, 0xa5, 0xcf, 0x69, 0xdb, 0xb6, 0x6b, 0xe6, 0xcc, 0x99, 0xb3, 0x3c, 0x9d, 0x4e, 0x77, 0x89, 0x88, 0x2d, 0x22, 0x56, 0x26, 0x93, 0xb9, 0x27, 0x49, 0x12, 0xbb, 0xfc, 0x7a, 0xeb, 0x92, 0xe7, 0x10, 0x22, 0x2a, 0x93, 0xc9, 0x7c, 0x62, 0xd1, 0xa2, 0x45, 0xe7, 0x95, 0x52, 0x89, 0x31, 0x26, 0x37, 0x3c, 0x3c, 0xbc, 0xe7, 0xdc, 0xb9, 0x73, 0xdd, 0x6f, 0x8e, 0x8f, 0xfb, 0x55, 0xcc, 0x2a, 0x94, 0x24, 0x57, 0x7a, 0x87, 0xf9, 0x7f, 0x04, 0x00, 0x07, 0xa8, 0xa5, 0x58, 0x44, 0x51, 0x53, 0x2d, 0xcb, 0x97, 0x2f, 0x7f, 0x22, 0x95, 0x4a, 0xdd, 0x6e, 0x59, 0x56, 0x52, 0x75, 0xba, 0x6b, 0x39, 0x8e, 0x23, 0x7d, 0x7d, 0x7d, 0x38, 0x8e, 0x83, 0xef, 0xbf, 0x93, 0xb9, 0x96, 0x65, 0x29, 0x40, 0x4d, 0x9f, 0x3e, 0xfd, 0x73, 0xa5, 0x73, 0x41, 0x35, 0x75, 0xea, 0x54, 0x49, 0xa7, 0xd3, 0x4f, 0x9c, 0x38, 0x71, 0x62, 0x27, 0x90, 0xbf, 0x48, 0xdc, 0x52, 0x3f, 0x51, 0x2a, 0xe4, 0xb8, 0xb6, 0x75, 0x82, 0xab, 0x56, 0xad, 0xaa, 0xcb, 0x64, 0x32, 0x2b, 0xb4, 0xd6, 0xb7, 0x1a, 0x63, 0x96, 0x29, 0xa5, 0x6e, 0x05, 0x66, 0xbe, 0xdb, 0x18, 0x11, 0x21, 0x49, 0x12, 0xee, 0xb9, 0xe7, 0x1e, 0x96, 0x2d, 0x5b, 0xc6, 0xf8, 0xf8, 0x38, 0xbd, 0xbd, 0xbd, 0xef, 0x09, 0x61, 0x11, 0xe1, 0x8d, 0x37, 0xde, 0xa0, 0xa7, 0xa7, 0x87, 0x77, 0x63, 0x4e, 0x55, 0xeb, 0x07, 0xde, 0x10, 0x91, 0x37, 0xb5, 0xd6, 0x6f, 0x44, 0x51, 0xb4, 0x7d, 0xc3, 0x86, 0x0d, 0x43, 0xef, 0x99, 0x01, 0xdf, 0xf8, 0xc6, 0x37, 0x5a, 0x83, 0x20, 0x68, 0xb1, 0x6d, 0xdb, 0xd5, 0x5a, 0x8f, 0x7b, 0x9e, 0x77, 0x44, 0x44, 0xfa, 0x92, 0x24, 0x71, 0xe3, 0x38, 0xf6, 0xe2, 0x38, 0x76, 0x4b, 0x9f, 0x9d, 0x24, 0x49, 0x6c, 0x63, 0x8c, 0x3a, 0x7c, 0xf8, 0x70, 0x6a, 0xdf, 0xbe, 0x7d, 0x35, 0x0f, 0x3c, 0xf0, 0x00, 0x9d, 0x9d, 0x9d, 0x88, 0x08, 0xfb, 0xf6, 0xed, 0x63, 0xe6, 0xcc, 0x99, 0x68, 0xad, 0xaf, 0x58, 0xf9, 0x38, 0x8e, 0x39, 0x7a, 0xf4, 0x28, 0x85, 0x42, 0x81, 0xb3, 0x67, 0xcf, 0xca, 0xba, 0x75, 0xeb, 0xc6, 0x2c, 0xcb, 0x32, 0x4a, 0x29, 0xd1, 0x5a, 0x1b, 0xcb, 0xb2, 0x62, 0xcb, 0xb2, 0x22, 0xdb, 0xb6, 0x43, 0xdb, 0xb6, 0x03, 0xdb, 0xb6, 0x03, 0xd7, 0x75, 0xf3, 0xe9, 0x74, 0xda, 0x0a, 0xc3, 0xb0, 0x3d, 0x08, 0x82, 0x2e, 0xcb, 0xb2, 0xce, 0xbe, 0x2f, 0x00, 0x66, 0xcc, 0x98, 0x91, 0xb2, 0x2c, 0x2b, 0xed, 0x38, 0x4e, 0xc6, 0xf3, 0xbc, 0x5a, 0xcf, 0xf3, 0x1a, 0x80, 0xa6, 0x20, 0x08, 0x52, 0x71, 0x1c, 0x7b, 0x51, 0x14, 0xb9, 0x71, 0x1c, 0x57, 0x00, 0x10, 0x11, 0x46, 0x47, 0x47, 0xd9, 0xbb, 0x77, 0x2f, 0x83, 0x83, 0x83, 0x74, 0x74, 0x74, 0x14, 0xeb, 0x82, 0x4e, 0x9f, 0xc6, 0x71, 0x1c, 0x6c, 0xfb, 0xca, 0xad, 0x2e, 0x08, 0x02, 0x4e, 0x9e, 0x3c, 0xc9, 0xd0, 0xd0, 0x10, 0x5a, 0x6b, 0x35, 0x7f, 0xfe, 0xfc, 0x86, 0x72, 0x7d, 0x40, 0xa9, 0x56, 0x20, 0x76, 0x1c, 0x27, 0xb4, 0x6d, 0x3b, 0x74, 0x1c, 0xc7, 0x77, 0x5d, 0x37, 0x70, 0x5d, 0xb7, 0xc6, 0x71, 0x9c, 0xda, 0x42, 0xa1, 0x90, 0x8b, 0xa2, 0xe8, 0x6c, 0x10, 0x04, 0xb5, 0xd7, 0xd4, 0x07, 0x88, 0x88, 0xba, 0x98, 0xa2, 0x97, 0x2a, 0x8e, 0x10, 0x11, 0x5e, 0x7a, 0xe9, 0x25, 0x8e, 0x1f, 0x3f, 0xce, 0xe8, 0xe8, 0x28, 0x7d, 0x7d, 0x7d, 0xec, 0xd9, 0xb3, 0xe7, 0x3d, 0x99, 0xc1, 0xe0, 0xe0, 0x60, 0xe5, 0x19, 0x22, 0x82, 0x52, 0x6a, 0xd2, 0xf7, 0xf7, 0x13, 0xd2, 0x7f, 0xe3, 0xa0, 0xaf, 0x7d, 0xed, 0x6b, 0x8d, 0x85, 0x42, 0x61, 0xba, 0xd6, 0xba, 0x0d, 0x68, 0x37, 0xc6, 0xb4, 0xf9, 0xbe, 0xdf, 0x11, 0x04, 0xc1, 0xb4, 0x38, 0x8e, 0xa7, 0x46, 0x51, 0xd4, 0x16, 0xc7, 0x71, 0x6b, 0x92, 0x24, 0x4d, 0x49, 0x92, 0xd4, 0x47, 0x51, 0x84, 0x88, 0xe0, 0x38, 0x0e, 0x9d, 0x9d, 0x9d, 0xd7, 0x24, 0xbe, 0x4e, 0x4c, 0x4c, 0x30, 0x34, 0x34, 0xc4, 0xc4, 0xc4, 0x04, 0x8e, 0xe3, 0x54, 0xc4, 0xb2, 0xac, 0xac, 0x65, 0x59, 0x43, 0xb6, 0x6d, 0x0f, 0xd8, 0xb6, 0xdd, 0xe7, 0xba, 0xee, 0x59, 0xd7, 0x75, 0x7b, 0x3c, 0xcf, 0xeb, 0x51, 0x4a, 0xf5, 0x6b, 0xad, 0xfb, 0x2d, 0xcb, 0xea, 0x7d, 0xea, 0xa9, 0xa7, 0x06, 0xde, 0x33, 0x03, 0x46, 0x47, 0x47, 0x53, 0xf9, 0x7c, 0xfe, 0x7a, 0x63, 0xcc, 0xa2, 0x38, 0x8e, 0xaf, 0x17, 0x91, 0xae, 0x24, 0x49, 0x5a, 0x81, 0x94, 0x31, 0x26, 0x5d, 0x3a, 0x72, 0x72, 0x45, 0xc4, 0xd5, 0x5a, 0xe3, 0x38, 0x4e, 0x65, 0x95, 0xea, 0xea, 0xea, 0xae, 0x09, 0x00, 0x51, 0x14, 0xa1, 0x94, 0x22, 0x93, 0xc9, 0x4c, 0x2a, 0x93, 0x11, 0x91, 0x9a, 0x24, 0x49, 0x2c, 0x11, 0x69, 0x88, 0xa2, 0xa8, 0xc3, 0xf7, 0xfd, 0x82, 0x52, 0x6a, 0xc4, 0xb2, 0xac, 0x93, 0x4a, 0xa9, 0x63, 0xae, 0xeb, 0xee, 0xaf, 0xab, 0xab, 0xcb, 0x02, 0xef, 0x1d, 0x80, 0x6c, 0x36, 0x1b, 0x89, 0xc8, 0xa8, 0x88, 0x0c, 0x00, 0xf5, 0x22, 0xe2, 0x69, 0xad, 0x03, 0x11, 0x49, 0x29, 0xa5, 0xd2, 0xe5, 0x53, 0xd7, 0x12, 0x10, 0x8e, 0x88, 0x68, 0x11, 0x49, 0x89, 0x48, 0x43, 0x2a, 0x95, 0xba, 0x2a, 0x9b, 0x7f, 0x97, 0x45, 0x40, 0x29, 0x65, 0x44, 0x64, 0x48, 0x44, 0xc4, 0x18, 0x63, 0xb4, 0xd6, 0xa2, 0x94, 0x0a, 0xa1, 0xf8, 0xf6, 0x4a, 0x29, 0xe5, 0x2b, 0xa5, 0x7c, 0xad, 0xf5, 0x30, 0x70, 0x4e, 0x44, 0xfa, 0x81, 0x61, 0xff, 0x52, 0xb1, 0xf6, 0x1a, 0xa6, 0xc2, 0x99, 0x8b, 0xa4, 0x06, 0xc8, 0x58, 0x96, 0x55, 0xb7, 0x66, 0xcd, 0x9a, 0x67, 0x3c, 0xcf, 0x9b, 0xd2, 0xd8, 0xd8, 0x68, 0x5d, 0x61, 0xf8, 0xba, 0xdc, 0xea, 0x9b, 0xe1, 0xe1, 0x61, 0xd5, 0xdf, 0xdf, 0xff, 0xe3, 0xfd, 0xfb, 0xf7, 0xbf, 0x58, 0x15, 0xff, 0x73, 0x55, 0x7d, 0xae, 0x94, 0x07, 0x04, 0xd7, 0xdc, 0x07, 0x5c, 0x41, 0x73, 0x2f, 0x4a, 0x84, 0xd2, 0x40, 0xba, 0xa5, 0xa5, 0x65, 0xfa, 0x9c, 0x39, 0x73, 0x1e, 0x70, 0x1c, 0xa7, 0x13, 0xb0, 0x45, 0x44, 0x03, 0xba, 0xd4, 0xab, 0x92, 0x33, 0x55, 0xef, 0x28, 0x4d, 0x50, 0x4a, 0x00, 0x53, 0xee, 0x8d, 0x31, 0xb9, 0x89, 0x89, 0x89, 0x37, 0x0f, 0x1c, 0x38, 0xf0, 0x4a, 0x29, 0xf3, 0xf3, 0x4b, 0x8a, 0x17, 0x2e, 0x02, 0x23, 0xf9, 0xad, 0x38, 0xc1, 0xab, 0x68, 0x5e, 0x15, 0x00, 0xa9, 0x4b, 0xec, 0x05, 0xca, 0x9b, 0xa2, 0xf2, 0xb6, 0xd5, 0x2a, 0x3d, 0xbf, 0xba, 0x84, 0xa8, 0xba, 0x38, 0xbb, 0x7a, 0x1f, 0x10, 0x72, 0xa1, 0x56, 0xb9, 0x2c, 0x65, 0x00, 0xe2, 0xf7, 0x33, 0xe9, 0xdf, 0xc6, 0x6e, 0x50, 0x57, 0x01, 0xe0, 0x5e, 0x42, 0xf9, 0x32, 0x00, 0xfa, 0x32, 0x00, 0x94, 0x41, 0x88, 0xab, 0x40, 0x88, 0x4a, 0x00, 0x84, 0x55, 0x9b, 0x20, 0xb9, 0x16, 0x93, 0xfd, 0x1d, 0x9c, 0x07, 0x54, 0x4e, 0x68, 0x9c, 0x92, 0x58, 0x57, 0x08, 0x40, 0x72, 0x11, 0x00, 0xc2, 0x07, 0xed, 0x83, 0xf6, 0x41, 0xfb, 0xa0, 0x5d, 0xe3, 0xf6, 0xbf, 0x01, 0xfe, 0x96, 0xd6, 0x23, 0x76, 0xf5, 0xec, 0x78, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/download_map.xpm0000600000176000000410000001114212105760300022644 0ustar buildbotwww-data00000000000000/* XPM */ static const char * download_map_xpm[] = { "22 22 224 2", " c None", ". c #91DE53", "+ c #6CCE1E", "@ c #61C312", "# c #6CCD1E", "$ c #90DD53", "% c #72D025", "& c #50A908", "* c #459207", "= c #469307", "- c #489707", "; c #50A808", "> c #71CE25", ", c #A4DF75", "' c #56B609", ") c #479508", "! c #50A508", "~ c #59A618", "{ c #8CB967", "] c #8EBA6A", "^ c #8FBA6A", "/ c #8CB966", "( c #59A617", "_ c #55B409", ": c #A3DD75", "< c #A7DE7B", "[ c #53AE09", "} c #4D9D08", "| c #59B00A", "1 c #59B10A", "2 c #62AA24", "3 c #E6E9E3", "4 c #EEEEEE", "5 c #E5E8E2", "6 c #62AA22", "7 c #5AB10A", "8 c #52AD09", "9 c #A6DC7B", "0 c #58B80B", "a c #4FA009", "b c #5DB30B", "c c #64AB24", "d c #64AB23", "e c #5DB40B", "f c #4F9F09", "g c #57B50A", "h c #79CD35", "i c #4DA008", "j c #60B50C", "k c #60B60C", "l c #66AD25", "m c #66AD24", "n c #61B60C", "o c #4D9F08", "p c #76C935", "q c #55B309", "r c #5AAD0B", "s c #64B80D", "t c #69AE25", "u c #68AE24", "v c #65B80D", "w c #5BAD0B", "x c #54B009", "y c #9DD670", "z c #51A909", "A c #66B90D", "B c #67BA0D", "C c #68BA0E", "D c #69BB0F", "E c #6CB028", "F c #69BB10", "G c #68BB0E", "H c #51A809", "I c #9CD370", "J c #7ECB41", "K c #55AA0A", "L c #6BBC0E", "M c #65B50E", "N c #67B01A", "O c #69B11D", "P c #6BB221", "Q c #71AE36", "R c #71AE35", "S c #6CB322", "T c #6AB11E", "U c #66B50E", "V c #6CBD0F", "W c #7CC641", "X c #71C32E", "Y c #59AF0B", "Z c #6EBF0F", "` c #6DBC10", " . c #85B557", ".. c #DBE3D5", "+. c #DDE4D8", "@. c #DEE4D9", "#. c #EDEDEC", "$. c #DEE4D8", "%. c #DAE2D4", "&. c #84B554", "*. c #6FBD11", "=. c #6FBF10", "-. c #6FBF2D", ";. c #73C233", ">. c #5BB20B", ",. c #73C111", "'. c #77C319", "). c #75BC22", "!. c #B2CC9B", "~. c #AECA95", "{. c #78BE24", "]. c #79C41B", "^. c #74C212", "/. c #71BD32", "(. c #84C74E", "_. c #5AB40B", ":. c #79C517", "<. c #80C823", "[. c #86CA2D", "}. c #7EBA39", "|. c #D3DECA", "1. c #CFDCC4", "2. c #7FBB39", "3. c #88CB30", "4. c #82C825", "5. c #7BC61A", "6. c #82C24E", "7. c #ABD489", "8. c #56B409", "9. c #7BC61C", "0. c #88CC2C", "a. c #8ECF37", "b. c #92D040", "c. c #8CBB5A", "d. c #E8EAE5", "e. c #89BB55", "f. c #95D143", "g. c #90CF3A", "h. c #8ACD2E", "i. c #7CC71E", "j. c #56B209", "k. c #AAD189", "l. c #56B20B", "m. c #6EC217", "n. c #8FD034", "o. c #96D240", "p. c #9CD54C", "q. c #99D04F", "r. c #A5C587", "s. c #EEEEED", "t. c #9FC37D", "u. c #9CD252", "v. c #9ED64E", "w. c #98D343", "x. c #91D137", "y. c #6FC218", "z. c #54AE0B", "A. c #8DC560", "B. c #5BBA0B", "C. c #8CD033", "D. c #9DD649", "E. c #A3D955", "F. c #A9DB5F", "G. c #98CA58", "H. c #C5D6B7", "I. c #BDD2AA", "J. c #9CCD5C", "K. c #ABDC62", "L. c #A5D957", "M. c #9FD74C", "N. c #8ED036", "O. c #5AB80B", "P. c #8BC15F", "Q. c #60B21E", "R. c #66C313", "S. c #9ED74A", "T. c #AADC5D", "U. c #B0DF69", "V. c #B5E073", "W. c #96C364", "X. c #DFE5DA", "Y. c #D8E1D1", "Z. c #98C563", "`. c #B7E175", " + c #B2DF6B", ".+ c #ACDD60", "++ c #9FD84D", "@+ c #5EAD1D", "#+ c #59AE13", "$+ c #67C615", "%+ c #9FDA52", "&+ c #B6E271", "*+ c #BDE47D", "=+ c #BCE281", "-+ c #A0C37C", ";+ c #9CC274", ">+ c #BFE485", ",+ c #BEE57F", "'+ c #B8E274", ")+ c #A0DB54", "!+ c #57AB13", "~+ c #61AE22", "{+ c #5CBD0C", "]+ c #82D432", "^+ c #A9E065", "/+ c #C4E88C", "(+ c #B8DC85", "_+ c #BEE08B", ":+ c #C5E88D", "<+ c #AAE067", "[+ c #82D433", "}+ c #5BBC0C", "|+ c #60AB22", "1+ c #97C373", "2+ c #56A912", "3+ c #57B60A", "4+ c #63C411", "5+ c #6DCC1B", "6+ c #55A712", "7+ c #96C173", "8+ c #A9C295", "9+ c #83AF61", "0+ c #74A84B", "a+ c #A8C194", " ", " . + @ @ # $ ", " % & * = - - = * ; > ", " , ' ) ! ~ { ] ^ / ( ! ) _ : ", " < [ } | 1 2 3 4 4 5 6 7 | } 8 9 ", " 0 a b b b c 3 4 4 5 d e e e f g ", " h i j k k k l 3 4 4 5 m n n n j o p ", " q r s s s s t 3 4 4 5 u s s s v w x ", " y z A B B C D E 3 4 4 5 E F G C C A H I ", " J K L M N O P Q 3 4 4 5 R S T N U V K W ", " X Y Z ` ...+.@.#.4 4 #.$.+.%.&.*.=.Y -. ", " ;.>.,.'.).!.4 4 4 4 4 4 4 4 ~.{.].^.>./. ", " (._.:.<.[.}.|.4 4 4 4 4 4 1.2.3.4.5._.6. ", " 7.8.9.0.a.b.c.d.4 4 4 4 5 e.f.g.h.i.j.k. ", " l.m.n.o.p.q.r.s.4 4 #.t.u.v.w.x.y.z. ", " A.B.C.D.E.F.G.H.4 4 I.J.K.L.M.N.O.P. ", " Q.R.S.T.U.V.W.X.Y.Z.`. +.+++R.@+ ", " #+$+%+&+*+=+-+;+>+,+'+)+$+!+ ", " ~+{+]+^+/+(+_+:+<+[+}+|+ ", " 1+2+3+4+5+5+4+g 6+7+ ", " 8+9+0+0+9+a+ ", " "}; springlobby-0.169/src/images/downloads_icon.png.h0000600000176000000410000003530612105760300023420 0ustar buildbotwww-data00000000000000/* downloads_icon.png - 2343 bytes */ static const unsigned char downloads_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a, 0xf4, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0d, 0xd7, 0x00, 0x00, 0x0d, 0xd7, 0x01, 0x42, 0x28, 0x9b, 0x78, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x0a, 0x06, 0x16, 0x03, 0x2d, 0x2b, 0x3b, 0xa3, 0xeb, 0x00, 0x00, 0x08, 0xa7, 0x49, 0x44, 0x41, 0x54, 0x58, 0x47, 0xed, 0x57, 0x6d, 0x4c, 0x5b, 0xd7, 0x19, 0x7e, 0xee, 0xbd, 0xf6, 0xbd, 0x36, 0x60, 0x63, 0x9b, 0x0f, 0x87, 0x94, 0xe0, 0x40, 0xd2, 0xa5, 0x01, 0x92, 0xb5, 0xa3, 0x24, 0x40, 0xb6, 0xa6, 0xea, 0xa2, 0x08, 0x65, 0xe9, 0x94, 0x49, 0x5d, 0x93, 0xa9, 0xf9, 0xd8, 0x47, 0x14, 0x58, 0xbb, 0xa6, 0xaa, 0x96, 0x55, 0x99, 0xb4, 0xfe, 0x59, 0xa4, 0x75, 0xd3, 0xd4, 0x2e, 0x6a, 0xd3, 0x86, 0xee, 0x4f, 0xb4, 0xfd, 0x98, 0xd6, 0x25, 0x8d, 0xa6, 0x69, 0x91, 0xd6, 0x68, 0x5a, 0x51, 0x43, 0x80, 0x42, 0x21, 0x84, 0x04, 0x02, 0x18, 0x82, 0xc1, 0x80, 0xc1, 0x18, 0x7f, 0x81, 0xed, 0x6b, 0xfb, 0xfa, 0xde, 0xbd, 0xe7, 0x06, 0xbc, 0x92, 0x90, 0xf6, 0xe7, 0xfe, 0xf4, 0x95, 0x5e, 0x9f, 0x8f, 0x7b, 0xce, 0xfb, 0x3e, 0xe7, 0x39, 0xef, 0x79, 0xcf, 0x31, 0xf0, 0x95, 0xfc, 0x9f, 0x19, 0xe0, 0xbe, 0xc8, 0xff, 0xfa, 0x9a, 0x13, 0x7c, 0xca, 0xc4, 0x6f, 0xa7, 0x31, 0x4f, 0x00, 0x5c, 0x7b, 0xe0, 0xfa, 0xf9, 0x61, 0x36, 0xbe, 0xbe, 0xfe, 0x45, 0x33, 0xc0, 0xd7, 0x72, 0x1c, 0x36, 0x69, 0x1a, 0x72, 0xa8, 0x6b, 0x9e, 0xb4, 0xbf, 0xa3, 0xe3, 0xdc, 0xd0, 0x17, 0xd9, 0x5b, 0xeb, 0xdb, 0x2a, 0x00, 0xd6, 0xfa, 0x9f, 0x18, 0x44, 0x41, 0xac, 0x81, 0xa6, 0x3d, 0x45, 0x83, 0x99, 0xee, 0x22, 0xbd, 0x4b, 0x8e, 0x9e, 0x9f, 0x6f, 0x6b, 0xb9, 0x5b, 0x5f, 0xff, 0x33, 0x17, 0xb5, 0x5f, 0xaf, 0xae, 0xde, 0x78, 0xc8, 0xe5, 0x5a, 0x97, 0x5b, 0x56, 0x56, 0x0c, 0x9e, 0xe7, 0x30, 0xe3, 0x0b, 0x62, 0xfc, 0xae, 0x0f, 0x23, 0x23, 0x5e, 0x77, 0x3c, 0x9e, 0x3c, 0x2b, 0x49, 0x86, 0x3f, 0xb6, 0xb6, 0x9e, 0x55, 0xdc, 0x6f, 0x3c, 0x6a, 0x28, 0x70, 0x58, 0xe1, 0x68, 0xea, 0x51, 0xd6, 0x72, 0xce, 0xfa, 0xb8, 0xc2, 0x5d, 0x4d, 0x15, 0x54, 0xfc, 0x60, 0xd9, 0x61, 0x03, 0x95, 0xb9, 0xa4, 0x2a, 0x69, 0x9a, 0xb4, 0x9b, 0xe7, 0xf1, 0xac, 0xff, 0x5a, 0x4b, 0x84, 0x9c, 0xff, 0x70, 0xeb, 0xd6, 0xb2, 0x73, 0xc7, 0x8f, 0xef, 0xcb, 0xcd, 0x2f, 0x71, 0xc2, 0x96, 0xc3, 0xa1, 0xa4, 0xc8, 0x81, 0xf9, 0xc0, 0x02, 0x3e, 0x1d, 0x8b, 0x21, 0x99, 0x48, 0x22, 0x1d, 0x5b, 0xc4, 0x48, 0xef, 0x20, 0x5a, 0x3f, 0xbe, 0xd1, 0x23, 0xcb, 0xe9, 0xe7, 0x3b, 0x7e, 0x39, 0x37, 0xee, 0x71, 0xdf, 0xb1, 0x1b, 0x04, 0xf0, 0xa5, 0x25, 0x45, 0x0b, 0xdc, 0xa1, 0x8f, 0xb5, 0xfb, 0x81, 0x70, 0x8c, 0xe6, 0xa4, 0x89, 0x3f, 0x40, 0x54, 0xfc, 0x82, 0x3e, 0x7e, 0x63, 0xd9, 0x71, 0x8a, 0xca, 0x39, 0x0e, 0xda, 0x33, 0xf3, 0xd7, 0xdf, 0xf7, 0x91, 0xf3, 0xd7, 0x0f, 0x1e, 0x7c, 0xfa, 0xd7, 0xdf, 0x3d, 0x50, 0x87, 0x89, 0xb9, 0x30, 0x4c, 0x46, 0x01, 0x2e, 0x57, 0x19, 0x66, 0xa6, 0xbd, 0x08, 0xc5, 0x55, 0x64, 0x04, 0x13, 0x32, 0x9c, 0x88, 0x0d, 0x56, 0x05, 0x56, 0x93, 0x88, 0xe1, 0xe1, 0x49, 0x9c, 0x7f, 0xf7, 0x1f, 0xfe, 0xb9, 0xb9, 0xc8, 0x33, 0xed, 0x27, 0x07, 0x07, 0xbd, 0xbe, 0xf9, 0x0a, 0x55, 0x55, 0x8d, 0x82, 0x39, 0x7f, 0x64, 0xc3, 0x4b, 0x1d, 0x6c, 0x71, 0x59, 0x59, 0xb5, 0x05, 0x45, 0xbb, 0x9a, 0x7f, 0x43, 0x10, 0x8f, 0x31, 0x10, 0x54, 0x9e, 0x5a, 0xb8, 0xde, 0x72, 0x89, 0x9c, 0x3f, 0xd7, 0xd8, 0x58, 0x7b, 0xb1, 0xa9, 0x79, 0x1f, 0xee, 0x86, 0x34, 0x6c, 0x5d, 0x67, 0xc2, 0x5c, 0x34, 0x0d, 0x5e, 0x94, 0xa0, 0x71, 0x06, 0xc8, 0xc9, 0x0c, 0x62, 0xf1, 0x38, 0x96, 0xc2, 0x01, 0x70, 0x4a, 0x1c, 0x5b, 0x37, 0xb9, 0x20, 0x19, 0x34, 0x4c, 0x4c, 0xcc, 0xe2, 0xf4, 0xe9, 0x0b, 0xe3, 0x89, 0x44, 0xfa, 0xf1, 0xcb, 0x87, 0x5a, 0xe5, 0x78, 0x4a, 0xab, 0x27, 0x67, 0x8b, 0x1b, 0x7f, 0x7e, 0xbb, 0xf7, 0xf3, 0x00, 0xf8, 0xcf, 0x37, 0xc8, 0xe9, 0x26, 0x6a, 0x47, 0x49, 0x07, 0xcd, 0xaa, 0xf9, 0x72, 0x5d, 0xdd, 0x8b, 0x39, 0x25, 0x25, 0x8e, 0x77, 0x5e, 0x7b, 0xed, 0x20, 0x8a, 0x8b, 0x0a, 0x50, 0x53, 0x61, 0x43, 0x24, 0x1a, 0x45, 0x8c, 0xa8, 0x36, 0x99, 0x73, 0x21, 0x1a, 0x8d, 0x10, 0x0c, 0x3c, 0x14, 0x25, 0x83, 0x2a, 0x97, 0x03, 0xdf, 0x6e, 0x78, 0x02, 0xeb, 0x9d, 0x0e, 0x18, 0x0c, 0x06, 0x14, 0x14, 0xe4, 0xe1, 0x85, 0x17, 0x9e, 0x2a, 0x57, 0x55, 0xed, 0x57, 0xce, 0x97, 0x6f, 0xa5, 0x34, 0x8d, 0x9b, 0xa1, 0xd8, 0xda, 0xe2, 0x79, 0x6b, 0x1b, 0x6d, 0xf9, 0xff, 0x24, 0x0b, 0xc0, 0xbe, 0xe7, 0x84, 0x81, 0xba, 0x59, 0x90, 0x31, 0x00, 0x1f, 0x4e, 0x75, 0xfc, 0x41, 0xe5, 0x38, 0xfe, 0xf0, 0xe1, 0xc3, 0x7b, 0xd6, 0x49, 0x92, 0xa8, 0xcf, 0xf0, 0x4c, 0xce, 0x20, 0x10, 0xe7, 0x50, 0x50, 0xe2, 0x82, 0xca, 0x76, 0x93, 0xa2, 0x93, 0x7e, 0x50, 0xe2, 0xc8, 0xc1, 0x84, 0x2f, 0x80, 0x8f, 0xda, 0x6e, 0xe2, 0x8e, 0xdb, 0x03, 0x41, 0x10, 0xc8, 0x97, 0x86, 0xba, 0xba, 0x2d, 0x70, 0x3a, 0xf3, 0x9a, 0x77, 0xee, 0xfc, 0x69, 0x1e, 0x27, 0x18, 0xc6, 0x69, 0xa8, 0x89, 0xba, 0x9f, 0xf2, 0xfe, 0x76, 0x43, 0xd6, 0x6f, 0xb6, 0x22, 0x24, 0xf8, 0x75, 0x64, 0x4d, 0x26, 0x8d, 0xd0, 0xe4, 0x6e, 0xe6, 0x50, 0x10, 0xf8, 0xe7, 0xf6, 0xee, 0x7d, 0x92, 0x55, 0x31, 0x39, 0x33, 0x87, 0xa0, 0x9a, 0x87, 0x02, 0xe7, 0x7a, 0x32, 0x4e, 0x1d, 0xa4, 0x99, 0x8c, 0x06, 0x85, 0x34, 0xba, 0x14, 0x47, 0xa9, 0xb3, 0x10, 0x05, 0x0e, 0x1b, 0x06, 0xa7, 0xe3, 0xf8, 0xe7, 0x27, 0x7d, 0xfa, 0x9c, 0x44, 0x22, 0x81, 0x9d, 0x3b, 0xb7, 0x58, 0x78, 0x5e, 0x68, 0x2c, 0x7f, 0xf5, 0x86, 0xa2, 0x81, 0x5b, 0xa0, 0xb8, 0x2a, 0xcd, 0x18, 0xad, 0x5f, 0xd3, 0x07, 0x90, 0xb0, 0x55, 0xeb, 0xc2, 0x81, 0x23, 0x74, 0x5a, 0x84, 0x2a, 0x69, 0x5e, 0xe5, 0x26, 0x6a, 0x6a, 0x4e, 0x70, 0x74, 0xdc, 0x1a, 0x66, 0x03, 0x21, 0xb4, 0x0f, 0xcd, 0xc3, 0x61, 0xb7, 0xc1, 0x5e, 0x64, 0x43, 0x22, 0xad, 0x42, 0x34, 0x70, 0x20, 0x6a, 0x91, 0x4c, 0x29, 0x50, 0xd2, 0x49, 0x54, 0x95, 0xd9, 0x21, 0x89, 0x46, 0x94, 0x96, 0x00, 0x4f, 0x56, 0xd2, 0xfe, 0x0d, 0x8d, 0x22, 0x10, 0x8a, 0xa2, 0xe7, 0xd6, 0x28, 0xf2, 0xac, 0x46, 0x66, 0x9e, 0x9d, 0xae, 0x4b, 0xb4, 0xda, 0x00, 0xf9, 0xb0, 0x12, 0x73, 0x5f, 0xa7, 0xb6, 0x9e, 0x33, 0xb2, 0x0c, 0x68, 0x9c, 0x2a, 0x93, 0x73, 0x46, 0x7f, 0x24, 0x6d, 0x32, 0xc5, 0x44, 0xd1, 0x68, 0x37, 0x9b, 0xc5, 0x5c, 0x55, 0xe3, 0x50, 0x6c, 0xcf, 0x43, 0x02, 0x66, 0x5a, 0xa9, 0x0c, 0x7f, 0x28, 0x81, 0x60, 0x44, 0xa6, 0x7a, 0x12, 0x8b, 0xf1, 0x24, 0x04, 0x2d, 0xa5, 0x3b, 0x5f, 0x11, 0x45, 0x51, 0x50, 0x48, 0x67, 0xbf, 0xdf, 0xed, 0xc5, 0x86, 0x22, 0x0b, 0xa6, 0xe6, 0x18, 0xa9, 0x28, 0x65, 0x3f, 0x14, 0xfe, 0x31, 0x8d, 0xe3, 0x2c, 0xc4, 0xe0, 0x63, 0x2b, 0xe3, 0xb3, 0x0c, 0xa4, 0x32, 0xc2, 0x82, 0xc8, 0x67, 0x88, 0x01, 0x2e, 0x6d, 0x82, 0xc6, 0xfa, 0xb5, 0x70, 0x38, 0x86, 0xf6, 0x5b, 0xd3, 0x28, 0xb2, 0x19, 0x61, 0x16, 0x79, 0x38, 0xe9, 0xec, 0xfb, 0xc2, 0x71, 0x84, 0x20, 0xd2, 0x0e, 0x68, 0x50, 0x15, 0x15, 0x12, 0xe2, 0xd8, 0x5e, 0x5e, 0x48, 0xd8, 0xef, 0x89, 0x2c, 0xcb, 0x48, 0x26, 0x93, 0x28, 0x73, 0xda, 0xf1, 0xf7, 0xd6, 0x01, 0x98, 0x32, 0xd2, 0xb2, 0x6f, 0xc6, 0x32, 0x04, 0x6a, 0x58, 0xa8, 0x92, 0xf5, 0x9b, 0x65, 0x20, 0xda, 0xf1, 0x5e, 0x82, 0x86, 0x8c, 0xd2, 0x06, 0x47, 0xd2, 0x29, 0xd9, 0xd6, 0xd1, 0xf1, 0x6e, 0x28, 0x14, 0x5a, 0x8a, 0xaa, 0x74, 0xbe, 0x6f, 0xcc, 0x0a, 0x28, 0xb2, 0x8a, 0x78, 0xbc, 0xa2, 0x10, 0xb5, 0xe5, 0x79, 0x88, 0x45, 0x42, 0x58, 0x20, 0x20, 0x7e, 0x02, 0xe8, 0xf6, 0xa7, 0x70, 0xe1, 0x4a, 0x2f, 0xce, 0x5d, 0x6a, 0xc7, 0x2d, 0xf7, 0x14, 0x9d, 0x90, 0x98, 0xae, 0x92, 0xa0, 0x62, 0x72, 0x2e, 0x82, 0x4c, 0x52, 0x67, 0x60, 0x92, 0xfd, 0x10, 0x00, 0x3b, 0x15, 0x56, 0xd2, 0x7c, 0xd6, 0x66, 0x92, 0x05, 0xc0, 0x1a, 0x9c, 0xc6, 0xd1, 0x19, 0xe5, 0xa2, 0x1c, 0xc7, 0x39, 0x59, 0xdb, 0xef, 0x0f, 0xb7, 0x29, 0x91, 0x30, 0x22, 0x44, 0x7d, 0x85, 0x33, 0x4f, 0x9f, 0x50, 0x68, 0xb7, 0xe0, 0x40, 0x5d, 0x29, 0xca, 0xac, 0x69, 0x04, 0xa3, 0x09, 0x84, 0x16, 0x65, 0x0c, 0xcd, 0xab, 0xb8, 0xe3, 0x07, 0x7a, 0xdd, 0xb3, 0x88, 0xd2, 0x31, 0x5d, 0x5a, 0x5a, 0xc2, 0xb5, 0xde, 0x51, 0x28, 0x94, 0x54, 0x23, 0x81, 0x08, 0x9b, 0xd6, 0xc6, 0x7e, 0x28, 0x6e, 0x19, 0xf5, 0x0c, 0x40, 0x36, 0x19, 0xad, 0x02, 0x40, 0xd1, 0xd7, 0x4b, 0x30, 0x83, 0x34, 0xe0, 0x11, 0x7d, 0x82, 0xa6, 0x7d, 0x30, 0xda, 0x3f, 0xac, 0xaf, 0xa2, 0x67, 0x78, 0x46, 0xa7, 0x96, 0xed, 0xb1, 0x89, 0x8e, 0xa5, 0x51, 0x25, 0xe7, 0xd1, 0x38, 0xc2, 0x8b, 0x71, 0x44, 0x08, 0x44, 0x24, 0x26, 0x63, 0x78, 0x32, 0x80, 0x48, 0x24, 0xa2, 0x83, 0x60, 0xf1, 0xf2, 0x48, 0x8e, 0x00, 0xaf, 0xd7, 0x1f, 0xd2, 0x34, 0xc3, 0x55, 0x66, 0x8f, 0xe4, 0x5b, 0xa4, 0x0c, 0xc0, 0xec, 0x72, 0x7b, 0x35, 0x03, 0xe1, 0xb6, 0xf7, 0x97, 0x88, 0xa6, 0xcf, 0xc8, 0xb5, 0xd1, 0xf9, 0xcd, 0xa6, 0x02, 0x40, 0xf9, 0xa0, 0xbb, 0x7b, 0x68, 0xa2, 0x84, 0x8b, 0xe1, 0xaf, 0xd7, 0xa7, 0xd1, 0x7d, 0x7b, 0x0c, 0xc1, 0x60, 0x50, 0xd7, 0x91, 0xa9, 0xa8, 0x0e, 0x20, 0xa4, 0xb3, 0x90, 0xd0, 0x1d, 0xca, 0x09, 0x02, 0x42, 0x00, 0x66, 0x67, 0xfd, 0xf0, 0x4c, 0x85, 0xa1, 0x86, 0xa3, 0xa0, 0xcb, 0xe9, 0xed, 0xce, 0xce, 0xb3, 0xf2, 0xf8, 0x9b, 0xdb, 0x58, 0x9a, 0xaf, 0x26, 0xb5, 0x90, 0xf6, 0xaf, 0x09, 0x80, 0x75, 0xe6, 0x5b, 0x8c, 0x83, 0x14, 0xa5, 0x5e, 0x45, 0xe3, 0x5c, 0x3e, 0x49, 0x4e, 0xcb, 0x72, 0xaa, 0xa9, 0xfb, 0x3f, 0x5d, 0x9a, 0xcb, 0xac, 0xe2, 0xb6, 0x27, 0x44, 0xdb, 0xe2, 0xc7, 0xd5, 0x6b, 0x3d, 0xb8, 0xda, 0x3f, 0x4f, 0x5b, 0x70, 0x0f, 0x40, 0x98, 0x00, 0x2c, 0x2d, 0xc6, 0x88, 0x81, 0x10, 0x28, 0x70, 0x30, 0x39, 0x3d, 0x87, 0x62, 0x93, 0x15, 0xee, 0x91, 0xe9, 0x01, 0x55, 0xe5, 0x7f, 0xf7, 0xb7, 0xc3, 0x2c, 0x65, 0x69, 0xa7, 0x96, 0x9d, 0x5b, 0x58, 0x22, 0x19, 0x78, 0xa3, 0x4a, 0x67, 0x9f, 0x45, 0xe5, 0x2a, 0x09, 0x8e, 0x76, 0x69, 0xd2, 0xa6, 0x6d, 0xf3, 0x06, 0x95, 0x37, 0xa7, 0x34, 0x41, 0x1a, 0x69, 0x3f, 0xdf, 0x67, 0xb5, 0x56, 0xf9, 0x33, 0x8b, 0xd1, 0x7d, 0xb5, 0xdb, 0x37, 0x70, 0xa9, 0x64, 0x14, 0x97, 0x3f, 0xf5, 0x61, 0x3e, 0x21, 0x22, 0x21, 0x27, 0x91, 0x94, 0x13, 0x50, 0x12, 0x31, 0xa8, 0xf2, 0x12, 0x92, 0xb1, 0x25, 0x88, 0xe9, 0x28, 0xe8, 0x5a, 0xc0, 0xad, 0x3e, 0xcf, 0x44, 0x3a, 0xad, 0x34, 0x76, 0x76, 0xbe, 0x33, 0xff, 0xfb, 0x63, 0xd5, 0xc7, 0xc9, 0xc9, 0x8f, 0x49, 0xd9, 0xdb, 0x21, 0x97, 0xe0, 0x7c, 0x4f, 0x14, 0xb8, 0xef, 0xbf, 0xb2, 0xb7, 0x38, 0xfe, 0x00, 0x00, 0x86, 0x46, 0xf6, 0xf4, 0xa9, 0xe5, 0xd6, 0x8a, 0xf0, 0x92, 0xc9, 0xcc, 0xe7, 0x95, 0x36, 0x18, 0x86, 0x3b, 0xce, 0xb5, 0x5b, 0xad, 0x95, 0x37, 0x86, 0x06, 0x3d, 0x7b, 0x55, 0x08, 0x39, 0xbc, 0xd1, 0x8a, 0x4c, 0x2a, 0x41, 0x4a, 0xa9, 0x43, 0x49, 0x20, 0x47, 0x4d, 0xd2, 0x8a, 0xe9, 0x22, 0xc9, 0x97, 0x30, 0x37, 0xb9, 0x88, 0xc1, 0x81, 0xa9, 0x7f, 0xa7, 0xd3, 0xea, 0x77, 0x3a, 0x3b, 0xcf, 0x79, 0x3d, 0x6f, 0x56, 0x3f, 0x4b, 0x26, 0xdf, 0x26, 0x65, 0x51, 0xcc, 0xae, 0xfa, 0x24, 0x6d, 0x71, 0x2b, 0x05, 0xfb, 0x15, 0xa2, 0xa5, 0x77, 0xd5, 0x6d, 0xc8, 0x9c, 0xdf, 0x2f, 0x9b, 0x37, 0xbf, 0xcc, 0x8f, 0x8a, 0x14, 0x33, 0x83, 0x17, 0xd5, 0x86, 0x86, 0x97, 0x0a, 0xe9, 0x52, 0x39, 0x65, 0x36, 0x4b, 0x3f, 0xb2, 0x5a, 0xc9, 0xa7, 0x89, 0x92, 0x3b, 0x51, 0xad, 0x28, 0x3c, 0xed, 0x7d, 0x42, 0x0b, 0x06, 0xa3, 0x5d, 0x74, 0xed, 0xbe, 0x25, 0x49, 0x45, 0x17, 0x2f, 0x34, 0xfe, 0x89, 0xe3, 0x8c, 0xb9, 0x27, 0xc9, 0xde, 0x2b, 0xa4, 0xec, 0x06, 0xbc, 0x4e, 0xcc, 0x5f, 0xa3, 0xab, 0xfb, 0xc6, 0xe6, 0x57, 0x3f, 0xcb, 0x3e, 0x50, 0xbe, 0x14, 0xc0, 0x32, 0x20, 0xb6, 0x5f, 0xf4, 0x0c, 0xd3, 0x03, 0xc8, 0xb2, 0x65, 0xcb, 0xd6, 0xda, 0x1d, 0x3b, 0x76, 0xfd, 0xb9, 0xa4, 0xa4, 0x5c, 0x08, 0x06, 0xc3, 0x30, 0x1a, 0x39, 0x8c, 0x8d, 0x0d, 0x0c, 0x5e, 0xbd, 0x7a, 0xe5, 0x10, 0x7d, 0x8f, 0xaf, 0x33, 0x1b, 0x63, 0x7f, 0x39, 0xb9, 0xb1, 0x72, 0xbd, 0xdd, 0x18, 0x90, 0x90, 0xb8, 0x5d, 0x7e, 0x7a, 0x7c, 0xd5, 0x1b, 0x60, 0xd9, 0xa6, 0x5e, 0x7c, 0x19, 0x00, 0xf6, 0x9d, 0x39, 0x2d, 0x24, 0x2d, 0xa8, 0xad, 0xad, 0x6d, 0x32, 0x99, 0x4c, 0xd5, 0x3c, 0xcf, 0x17, 0x55, 0x56, 0x56, 0x96, 0x57, 0x54, 0x54, 0x70, 0x2c, 0xe8, 0x98, 0xdc, 0xbc, 0x79, 0x53, 0xa3, 0x13, 0xd0, 0x93, 0xc9, 0x64, 0x82, 0x03, 0x03, 0x03, 0xef, 0xd1, 0x51, 0xf4, 0x52, 0xf7, 0x02, 0x29, 0x45, 0x04, 0x62, 0xfa, 0xa0, 0x35, 0xe4, 0x01, 0x00, 0x67, 0xce, 0x9c, 0xa9, 0xa1, 0x74, 0x7a, 0x8c, 0xa8, 0x6c, 0x24, 0xcd, 0xa7, 0x5c, 0x20, 0x91, 0x51, 0x03, 0x65, 0x37, 0x43, 0x71, 0x71, 0xb1, 0x74, 0xe4, 0xc8, 0x11, 0x8c, 0x8f, 0x8f, 0x13, 0xf5, 0xb4, 0xe9, 0x6b, 0x48, 0x5f, 0x5f, 0x1f, 0xba, 0xba, 0xba, 0x14, 0x1a, 0x9b, 0x26, 0xa0, 0x2a, 0x29, 0x2b, 0x93, 0x66, 0xb3, 0x79, 0x4c, 0x92, 0xa4, 0x0f, 0x6d, 0x36, 0xdb, 0x85, 0xe6, 0xe6, 0xe6, 0x7b, 0xa8, 0x69, 0x7e, 0x36, 0x27, 0xaf, 0xd8, 0xda, 0xbf, 0x7f, 0xbf, 0x23, 0x87, 0x84, 0x26, 0x24, 0x09, 0x48, 0x26, 0x1e, 0x8f, 0x0b, 0x94, 0x80, 0xcc, 0x5e, 0xaf, 0x97, 0xef, 0xee, 0xee, 0xd6, 0x93, 0x8c, 0xcf, 0xe7, 0x43, 0x6e, 0x2e, 0x8b, 0xa7, 0xd5, 0x42, 0x80, 0xf5, 0x63, 0x58, 0x55, 0x55, 0x65, 0xd8, 0xbd, 0x7b, 0x37, 0xbd, 0x4b, 0x0c, 0x2a, 0x01, 0x55, 0xc9, 0x9c, 0x42, 0xe3, 0xf3, 0xc9, 0x5e, 0x39, 0xd9, 0x63, 0x8c, 0x66, 0x01, 0x3c, 0xc0, 0xc0, 0xd1, 0xa3, 0x47, 0x1f, 0xa3, 0x6c, 0xb7, 0x27, 0x9d, 0x4e, 0xef, 0x20, 0x7d, 0x94, 0x74, 0x03, 0xb5, 0x8b, 0xa9, 0x34, 0x16, 0x16, 0x16, 0xc2, 0xe1, 0x70, 0xdc, 0xef, 0x77, 0x55, 0x9b, 0x65, 0x4b, 0xc6, 0x10, 0xad, 0x9a, 0x62, 0xc3, 0x98, 0x26, 0xf5, 0x11, 0x10, 0x8f, 0x28, 0x8a, 0xfd, 0x54, 0xff, 0xc4, 0x62, 0xb1, 0x7c, 0xd4, 0xd2, 0xd2, 0xc2, 0x6e, 0x5d, 0x5d, 0x1e, 0x60, 0x80, 0x56, 0xb8, 0x40, 0xb4, 0xf7, 0x91, 0x2e, 0x90, 0xe3, 0x36, 0x7a, 0x54, 0x14, 0x90, 0x51, 0x7b, 0x2a, 0x95, 0x22, 0xf6, 0x6c, 0x47, 0xc9, 0xb0, 0x7e, 0xbd, 0x3d, 0x4c, 0x68, 0x8e, 0x46, 0x73, 0xfe, 0x45, 0xdb, 0xe6, 0x21, 0xca, 0xa3, 0xa4, 0x21, 0x62, 0x93, 0xd9, 0x0c, 0x50, 0xdf, 0x18, 0xdd, 0x33, 0xfa, 0xed, 0xb4, 0x22, 0x0f, 0x30, 0xb0, 0x86, 0x61, 0xf6, 0x1e, 0xb3, 0x91, 0x3a, 0x5c, 0x2e, 0x57, 0xb5, 0xd5, 0x6a, 0xad, 0x26, 0x43, 0xec, 0xf1, 0x22, 0x12, 0xe5, 0x2b, 0x0b, 0xd0, 0x08, 0x98, 0x42, 0x4a, 0x38, 0x53, 0x3e, 0xb7, 0xdb, 0xdd, 0x49, 0xe3, 0xc3, 0xa4, 0x2c, 0x08, 0xd9, 0x6d, 0xf4, 0xf0, 0xff, 0x05, 0x6b, 0x38, 0x7c, 0x58, 0x17, 0x4b, 0x5a, 0x6c, 0xf5, 0xec, 0x38, 0xb2, 0x8c, 0xc6, 0xea, 0x0c, 0x00, 0x3b, 0xa2, 0x2b, 0xff, 0x23, 0x28, 0xc9, 0xd0, 0x03, 0xe1, 0xde, 0xd3, 0x8e, 0xad, 0xf4, 0xa1, 0xc7, 0x8f, 0xbe, 0x7d, 0x25, 0x3a, 0x03, 0xff, 0x05, 0xe5, 0x67, 0x0d, 0x81, 0x5d, 0x6d, 0x34, 0x35, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/downloads_icon_text.png.h0000600000176000000410000002151612105760300024462 0ustar buildbotwww-data00000000000000/* downloads_icon_text.png - 1399 bytes */ static const unsigned char downloads_icon_text_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71, 0xde, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xe0, 0x00, 0x8d, 0x00, 0x2c, 0x0a, 0xa2, 0x98, 0x90, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0d, 0xd7, 0x00, 0x00, 0x0d, 0xd7, 0x01, 0x42, 0x28, 0x9b, 0x78, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x13, 0x0e, 0x26, 0x14, 0x56, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x98, 0x4d, 0x68, 0x54, 0x57, 0x14, 0xc7, 0xff, 0x6f, 0x48, 0xca, 0xcc, 0x48, 0xd2, 0x36, 0x21, 0xba, 0xb4, 0xd0, 0x88, 0xb3, 0x10, 0xb2, 0x50, 0x57, 0x8d, 0xa2, 0x22, 0x2e, 0x22, 0x9a, 0x8d, 0xc6, 0x0f, 0x0a, 0x82, 0xc1, 0xb6, 0xd0, 0x55, 0x28, 0xb3, 0x12, 0x44, 0x0c, 0x0d, 0x74, 0x53, 0x10, 0x84, 0x28, 0x65, 0x16, 0x06, 0x0c, 0xf4, 0x85, 0x2e, 0xdc, 0xcc, 0x6c, 0xa4, 0x42, 0x4c, 0x70, 0x11, 0x30, 0x44, 0x69, 0x86, 0x96, 0x2c, 0x42, 0x03, 0x31, 0xc9, 0x18, 0x62, 0xe7, 0x23, 0x99, 0xc1, 0x4c, 0x7e, 0x5d, 0x38, 0x2f, 0x3c, 0xe7, 0x23, 0x37, 0x51, 0x62, 0x2d, 0xde, 0x1f, 0x9c, 0xc5, 0xbc, 0x3b, 0xe7, 0x9e, 0xfb, 0xce, 0xbd, 0xef, 0x9e, 0xfb, 0xbf, 0x92, 0xc5, 0x62, 0xb1, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0x62, 0xb1, 0x58, 0x2c, 0x16, 0x8b, 0xe5, 0xe3, 0xc2, 0xf9, 0x00, 0xc7, 0xc4, 0x36, 0x8f, 0xf1, 0x8d, 0xfe, 0x03, 0xa5, 0x07, 0x7e, 0x7b, 0x25, 0x69, 0x4a, 0xd2, 0x4f, 0x92, 0x3e, 0xfb, 0x4f, 0x32, 0x00, 0x02, 0xde, 0x5b, 0xff, 0x78, 0x14, 0x8b, 0x45, 0x16, 0x17, 0x17, 0x79, 0xf0, 0xe0, 0x41, 0xf1, 0xe8, 0xd1, 0xa3, 0xaf, 0x24, 0x15, 0x24, 0x7d, 0xfe, 0xfe, 0xdf, 0xff, 0x35, 0x55, 0x56, 0xc3, 0xb6, 0xf4, 0xbf, 0xfe, 0xc0, 0x71, 0x1c, 0x22, 0x91, 0xc8, 0xea, 0x93, 0x27, 0x4f, 0x58, 0x5d, 0x5d, 0xe5, 0xd8, 0xb1, 0x63, 0x48, 0xba, 0x55, 0x5a, 0x86, 0x3d, 0x92, 0xe6, 0xca, 0xac, 0xa7, 0xd4, 0xf6, 0x4c, 0x52, 0xd2, 0x67, 0xfe, 0x15, 0xe5, 0x7f, 0x3e, 0x51, 0x65, 0xc5, 0x79, 0xf6, 0x97, 0xa4, 0x2f, 0xab, 0x0c, 0xd0, 0x14, 0x5b, 0x55, 0xfa, 0xfa, 0x47, 0xd2, 0x80, 0xa4, 0x46, 0x49, 0xf5, 0x92, 0x86, 0xfc, 0xed, 0x35, 0x13, 0x50, 0x7a, 0x30, 0xd8, 0xde, 0xde, 0x0e, 0xc0, 0xf0, 0xf0, 0x30, 0x92, 0x16, 0x25, 0xf5, 0x34, 0x35, 0x35, 0xe1, 0xba, 0x2e, 0x99, 0x4c, 0x86, 0x4c, 0x26, 0x83, 0xeb, 0xba, 0x34, 0x35, 0x35, 0x51, 0x1a, 0xc8, 0xb3, 0xb9, 0xb9, 0x39, 0x16, 0x16, 0x16, 0x90, 0x44, 0x34, 0x1a, 0x05, 0x20, 0x1a, 0x8d, 0x22, 0x89, 0x85, 0x85, 0x05, 0x9e, 0x3f, 0x7f, 0x8e, 0x97, 0x80, 0x72, 0x5e, 0xbc, 0x78, 0xc1, 0xa5, 0x4b, 0x97, 0x90, 0xf4, 0x67, 0x95, 0xf1, 0x98, 0x62, 0xbf, 0xf1, 0x0e, 0xf9, 0x7c, 0x9e, 0xb1, 0xb1, 0x31, 0xda, 0xdb, 0xdb, 0x91, 0xf4, 0xbb, 0xa4, 0xde, 0xd6, 0xd6, 0x56, 0x26, 0x26, 0x26, 0x2a, 0xe2, 0xd6, 0x4a, 0x40, 0x63, 0x30, 0x18, 0x04, 0x60, 0x79, 0x79, 0xd9, 0x4b, 0xc0, 0xbc, 0xeb, 0xba, 0x00, 0x9c, 0x39, 0x73, 0x86, 0x73, 0xe7, 0xce, 0x01, 0xe0, 0xba, 0x2e, 0xa5, 0xd9, 0x78, 0x96, 0x48, 0x24, 0x00, 0xd8, 0xb9, 0x73, 0x27, 0x93, 0x93, 0x93, 0x00, 0x24, 0x93, 0x49, 0x76, 0xed, 0xda, 0x05, 0x40, 0x3c, 0x1e, 0xaf, 0x48, 0x40, 0x77, 0x77, 0x37, 0x6d, 0x6d, 0x6d, 0x00, 0xa4, 0x52, 0xa9, 0x5a, 0x33, 0x64, 0x8a, 0xdd, 0xe2, 0x9f, 0xdd, 0xbd, 0x7b, 0xf7, 0x02, 0x30, 0x35, 0x35, 0x85, 0xa4, 0xa2, 0xa4, 0x94, 0x37, 0x36, 0xbf, 0xff, 0x46, 0x09, 0xf8, 0x34, 0x14, 0x0a, 0x01, 0x90, 0xcb, 0xe5, 0xd6, 0x13, 0x90, 0xcd, 0x66, 0x01, 0x08, 0x85, 0x42, 0x84, 0xc3, 0x61, 0x00, 0x32, 0x99, 0x8c, 0x37, 0x88, 0xde, 0xbe, 0xbe, 0x3e, 0x00, 0xae, 0x5e, 0xbd, 0x0a, 0xc0, 0xe0, 0xe0, 0x20, 0x00, 0xd7, 0xae, 0x5d, 0x03, 0xa0, 0xaf, 0xaf, 0x0f, 0x49, 0x37, 0xfc, 0xf1, 0x42, 0xa1, 0x10, 0x81, 0x40, 0xa0, 0x3c, 0x7e, 0x45, 0x02, 0x0c, 0xb1, 0xff, 0xe8, 0xe8, 0xe8, 0x60, 0x62, 0x62, 0x82, 0x42, 0xa1, 0xb0, 0xee, 0xbb, 0xb6, 0xb6, 0xe6, 0xf9, 0xa7, 0x72, 0xb9, 0x5c, 0x85, 0xff, 0x86, 0x9f, 0xc0, 0xa1, 0x43, 0x87, 0xfc, 0x9f, 0x40, 0x6a, 0x13, 0x83, 0x38, 0xd1, 0xd5, 0xd5, 0x05, 0x40, 0x3a, 0x9d, 0x66, 0x66, 0x66, 0x86, 0x60, 0x30, 0xc8, 0xcc, 0xcc, 0x0c, 0x9e, 0xdf, 0xd9, 0xb3, 0x67, 0x91, 0x74, 0xa2, 0x4a, 0xbc, 0x77, 0x4d, 0xc0, 0xd4, 0xfc, 0xfc, 0x3c, 0x00, 0x07, 0x0f, 0x1e, 0xc4, 0x5b, 0xbd, 0x3e, 0xff, 0x0d, 0x13, 0x10, 0x78, 0xa3, 0xe0, 0x3a, 0x8e, 0x22, 0x91, 0x48, 0xd7, 0xcd, 0x9b, 0x37, 0x55, 0x2c, 0x16, 0x75, 0xfd, 0xfa, 0x75, 0x49, 0xfa, 0x55, 0x92, 0xe2, 0xf1, 0xb8, 0x24, 0xe9, 0xe4, 0xc9, 0x93, 0x3a, 0x75, 0xea, 0x94, 0x24, 0x29, 0x91, 0x48, 0x78, 0xae, 0xc9, 0xf1, 0xf1, 0x71, 0x49, 0x52, 0x43, 0x43, 0x83, 0xfa, 0xfb, 0xfb, 0x95, 0xcf, 0xe7, 0xc7, 0x6e, 0xdf, 0xbe, 0xad, 0x1d, 0x3b, 0x76, 0x48, 0x92, 0x4a, 0xed, 0x93, 0x6f, 0xb3, 0x6d, 0x1b, 0x62, 0xab, 0xae, 0xae, 0x4e, 0x92, 0x94, 0xcb, 0xe5, 0x74, 0xf9, 0xf2, 0xe5, 0x0a, 0xff, 0x47, 0x8f, 0x1e, 0x55, 0xf8, 0x57, 0x2d, 0x0b, 0xc5, 0x62, 0x91, 0xa5, 0xa5, 0x25, 0x1e, 0x3e, 0x7c, 0x58, 0x5e, 0x06, 0x7b, 0x9a, 0x9b, 0x9b, 0x71, 0x5d, 0x97, 0x6c, 0x36, 0x4b, 0x36, 0x9b, 0x65, 0x68, 0x68, 0x88, 0xe6, 0xe6, 0x66, 0x6f, 0x23, 0xaa, 0x77, 0x1c, 0x87, 0x74, 0x3a, 0x4d, 0x3e, 0x9f, 0xa7, 0xa5, 0xa5, 0x05, 0x49, 0x5f, 0xb5, 0xb4, 0xb4, 0x90, 0xcf, 0xe7, 0x49, 0xa7, 0xd3, 0x38, 0x8e, 0x43, 0x69, 0x47, 0xde, 0xea, 0x0a, 0x30, 0xc5, 0x9e, 0xba, 0x78, 0xf1, 0x22, 0xa9, 0x54, 0xaa, 0xd6, 0x26, 0xf7, 0xe3, 0x9e, 0x3d, 0x7b, 0x78, 0xfa, 0xf4, 0x69, 0xed, 0x4d, 0xb0, 0xca, 0x41, 0x68, 0x5a, 0xd2, 0xcf, 0xbe, 0x83, 0x90, 0x57, 0x8a, 0xe6, 0xcb, 0xec, 0x07, 0x5f, 0x29, 0x9a, 0x2d, 0x95, 0x1f, 0xcf, 0x02, 0x65, 0xbf, 0x67, 0x6b, 0x94, 0x2c, 0x93, 0x99, 0x62, 0x7f, 0xe1, 0x55, 0x8f, 0x1a, 0x56, 0x2f, 0xe9, 0xb7, 0x0d, 0xda, 0x2d, 0x16, 0x8b, 0xa5, 0x42, 0x2e, 0xfa, 0xed, 0x56, 0xe9, 0x79, 0xff, 0xc7, 0xb2, 0x81, 0xac, 0x97, 0x89, 0xd2, 0x41, 0x08, 0x49, 0x61, 0x49, 0x8c, 0x8c, 0x8c, 0x6c, 0xb7, 0x52, 0xfb, 0xb0, 0x12, 0x00, 0xd0, 0xd6, 0xd6, 0x86, 0xa4, 0x6f, 0xf7, 0xef, 0xdf, 0x5f, 0xb5, 0x86, 0x1a, 0x94, 0x98, 0x49, 0xf9, 0x6d, 0x59, 0xc9, 0x55, 0x29, 0x91, 0xdf, 0x48, 0xfa, 0x5b, 0xd2, 0x92, 0xcf, 0x7a, 0x25, 0xd5, 0xbd, 0x6d, 0xe9, 0x5b, 0x7f, 0xc9, 0xd1, 0xd1, 0x51, 0x62, 0xb1, 0x18, 0x92, 0x32, 0x03, 0x03, 0x03, 0x8c, 0x8e, 0x8e, 0x56, 0x4d, 0xc0, 0x06, 0x4a, 0xcc, 0xa4, 0xfc, 0x4c, 0xfe, 0x37, 0x0c, 0x4a, 0xee, 0xfb, 0xc6, 0xc6, 0x46, 0xee, 0xde, 0xbd, 0xcb, 0xcb, 0x97, 0x2f, 0x59, 0x59, 0x59, 0x21, 0x91, 0x48, 0xb0, 0x7b, 0xf7, 0x6e, 0xbc, 0x4f, 0xb6, 0xd6, 0xe1, 0x67, 0x53, 0x09, 0xe8, 0xec, 0xec, 0x64, 0x65, 0x65, 0x65, 0x6d, 0xdf, 0xbe, 0x7d, 0xb9, 0x42, 0xa1, 0x40, 0x67, 0x67, 0x67, 0x79, 0x47, 0x26, 0x25, 0x66, 0x52, 0x7e, 0x46, 0x25, 0x17, 0x8f, 0xc7, 0x01, 0x38, 0x7f, 0xfe, 0x3c, 0x17, 0x2e, 0x5c, 0x28, 0x8f, 0x3f, 0x77, 0xef, 0xde, 0x3d, 0x00, 0x8e, 0x1f, 0x3f, 0xce, 0x81, 0x03, 0x07, 0x00, 0x18, 0x19, 0x19, 0xa1, 0x74, 0x8a, 0x5d, 0xff, 0xff, 0x95, 0x2b, 0x57, 0xbc, 0xd3, 0xe8, 0xe6, 0x13, 0xe0, 0x38, 0x0e, 0xc9, 0x64, 0x92, 0xe9, 0xe9, 0x69, 0x92, 0xc9, 0x24, 0x8e, 0xe3, 0x94, 0x0f, 0xc0, 0xa4, 0xc4, 0x4c, 0xca, 0x6f, 0xd3, 0x4a, 0x2e, 0x1c, 0x0e, 0x57, 0x53, 0x72, 0x73, 0x99, 0x4c, 0xa6, 0x62, 0x96, 0x57, 0x57, 0x57, 0x2b, 0x12, 0x10, 0x0c, 0x06, 0x91, 0x14, 0xd9, 0xf2, 0x95, 0x51, 0x77, 0x77, 0xf7, 0xfa, 0x0c, 0x56, 0x39, 0xa7, 0x9b, 0x94, 0x98, 0xe9, 0xf7, 0x3b, 0x29, 0x39, 0x49, 0x73, 0xe9, 0x74, 0x1a, 0xc0, 0xbb, 0x20, 0xf1, 0x5b, 0x61, 0x33, 0xd7, 0x6b, 0x01, 0x53, 0x36, 0x62, 0xb1, 0x98, 0x1c, 0xc7, 0x51, 0x2c, 0x16, 0xab, 0xda, 0x6e, 0x52, 0x62, 0x26, 0x4c, 0xfe, 0xc3, 0xc3, 0xc3, 0x92, 0xa4, 0x8e, 0x8e, 0x0e, 0x9d, 0x3e, 0x7d, 0xba, 0xbc, 0x79, 0xed, 0xfe, 0xfd, 0xfb, 0x92, 0xa4, 0x68, 0x34, 0xaa, 0xfa, 0xfa, 0x7a, 0x7f, 0xdb, 0x27, 0xdb, 0x71, 0x29, 0x59, 0x31, 0x83, 0x06, 0x25, 0x66, 0x5c, 0x01, 0x06, 0xff, 0xde, 0xd6, 0xd6, 0xd6, 0x8d, 0x94, 0xdc, 0x77, 0x0d, 0x0d, 0x0d, 0xdc, 0xb9, 0x73, 0xa7, 0xa2, 0x8f, 0x5a, 0xf7, 0x7f, 0x6f, 0x73, 0x10, 0xda, 0xa8, 0xcd, 0xa4, 0xc4, 0x4c, 0xb6, 0x19, 0x25, 0xf7, 0xfa, 0xe2, 0x22, 0x10, 0xe0, 0xc8, 0x91, 0x23, 0x00, 0xcc, 0xce, 0xce, 0xfa, 0xcb, 0xe0, 0xd7, 0x5b, 0x18, 0xc3, 0xff, 0xfb, 0x5c, 0xb2, 0xbc, 0xbc, 0xcc, 0xe3, 0xc7, 0x8f, 0x39, 0x7c, 0xf8, 0x30, 0x92, 0xc6, 0x3f, 0xd6, 0xa3, 0xf9, 0xa2, 0xa4, 0x5f, 0x24, 0x7d, 0x6a, 0x55, 0x8b, 0xc5, 0x62, 0xb1, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0x62, 0xb1, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0xb2, 0x65, 0xfe, 0x05, 0x82, 0xca, 0x7e, 0xe3, 0x95, 0x73, 0x66, 0x40, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/empty.xpm0000600000176000000410000000061012121446441021341 0ustar buildbotwww-data00000000000000/* XPM */ static const char * empty_xpm[] = { "16 16 1 1", " c None", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; springlobby-0.169/src/images/exists.xpm0000600000176000000410000000064712105760300021527 0ustar buildbotwww-data00000000000000/* XPM */ static const char * exists_xpm[] = { "16 16 3 1", " c None", ". c #00D705", "+ c #C6C6C6", " ", " ", " ", " ", " . ", " ..+ ", " ..++ ", " . ..+ ", " .. .++ ", " ...+ ", " ..+ ", " ++ ", " ", " ", " ", " "}; springlobby-0.169/src/images/fixcolours_palette.xpm0000600000176000000410000000134012105760300024112 0ustar buildbotwww-data00000000000000/* XPM */ static const char * fixcolours_palette_xpm[] = { "16 16 23 1", " c None", ". c #FF0000", "+ c #FF00EC", "@ c #AB59E1", "# c #0000FF", "$ c #7AB4FF", "% c #00FFFF", "& c #00FF00", "* c #FFFF00", "= c #FFB300", "- c #000000", "; c #A20000", "> c #A20096", ", c #6D398F", "' c #0000A2", ") c #005F85", "! c #008C8C", "~ c #00A200", "{ c #A2A200", "] c #A27200", "^ c #808080", "/ c #B8B8B8", "( c #FFBEBE", ".+@#$%&*=-------", ";>,')!~{]^/(----", "----------------", "----------------", "----------------", "----------------", "----------------", "----------------", "----------------", "----------------", "----------------", "----------------", "----------------", "----------------", "----------------", "----------------"}; springlobby-0.169/src/images/flags/AD.xpm0000600000176000000410000001021512105760300021560 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AD_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 162 2", " c black", ". c #00001111ADAD", "X c #03031F1FADAD", "o c #0D0D2B2BB1B1", "O c #19193333B7B7", "+ c #2B2B4747BDBD", "@ c #2F2F4949BFBF", "# c #39395151C5C5", "$ c #41415B5BC7C7", "% c #49496161CBCB", "& c #51516767CFCF", "* c #55556B6BD7D7", "= c #59596D6DD1D1", "- c #5B5B7171D3D3", "; c #5D5D7171D3D3", ": c #5D5D7171D5D5", "> c #5F5F7373D5D5", ", c #67677B7BD7D7", "< c #7D7D8D8DDADA", "1 c #C5C500000000", "2 c #C7C700000000", "3 c #CBCB00000000", "4 c #CDCD00000000", "5 c #D3D300000000", "6 c #D5D500000000", "7 c #DBDB00000000", "8 c #DDDD00000000", "9 c #E1E100000000", "0 c #E5E500000000", "q c #E7E700000000", "w c #EBEB00000000", "e c #EFEF00000000", "r c #E6E610101010", "t c #E8E815151414", "y c #E8E815151515", "u c #E9E91B1B1B1B", "i c #EAEA1D1D1D1D", "p c #EAEA1E1E1E1E", "a c #F1F100000000", "s c #EBEB25252323", "d c #EBEB24242424", "f c #ECEC24242525", "g c #E8E82D2D2D2D", "h c #EEEE2C2C2C2C", "j c #EEEE2D2D2D2D", "k c #EEEE30302B2B", "l c #E9E931313131", "z c #EAEA36363636", "x c #EFEF37373333", "c c #ECEC3A3A3A3A", "v c #ECEC3B3B3B3B", "b c #F0F033333535", "n c #F0F036363535", "m c #F1F13C3C3C3C", "M c #F2F23D3D3D3D", "N c #F1F140403C3C", "B c #EDED42424242", "V c #EFEF49494949", "C c #F3F345454545", "Z c #F3F346464444", "A c #F5F54D4D4D4D", "S c #F1F150504F4F", "D c #F4F45C5C4B4B", "F c #F2F256565656", "G c #F4F45D5D5D5D", "H c #F1F162624C4C", "J c #F5F564646464", "K c #F7F76A6A6A6A", "L c #F8F86F6F7070", "P c #F3F37D7D6D6D", "I c #ACAC94946565", "U c #B0B099996B6B", "Y c #B1B199996B6B", "T c #B5B59D9D7171", "R c #B8B8A2A27676", "E c #BCBCA7A77D7D", "W c #C7C7B7B74F4F", "Q c #CBCBBCBC5757", "! c #CACAA2A26262", "~ c #C2C2AEAE7C7C", "^ c #D1D1A4A46A6A", "/ c #D0D0AFAF7D7D", "( c #D8D8AEAE7474", ") c #E0E0A9A97A7A", "_ c #CFCFCFCF0000", "` c #D3D3D3D30000", "' c #D7D7D7D70000", "] c #DBDBDBDB0000", "[ c #DFDFDFDF0000", "{ c #E1E1E1E10000", "} c #F5F5F5F50000", "| c #F9F9F9F90000", " . c #FBFBFBFB0505", ".. c #FDFDFDFD0000", "X. c #EBEBEBEB2323", "o. c #EDEDEDED2A2A", "O. c #EEEEEEEE2B2B", "+. c #F1F1F1F13C3C", "@. c #CCCCC0C04D4D", "#. c #DADACFCF6F6F", "$. c #E5E5D0D05252", "%. c #E9E9D3D36161", "&. c #EDEDEDED4040", "*. c #EEEEEEEE4646", "=. c #F2F2F2F24040", "-. c #F3F3F3F34444", ";. c #F0F0F0F04B4B", ":. c #F4F4F4F44848", ">. c #F5F5F5F54B4B", ",. c #F2F2F2F25252", "<. c #F5F5F5F55050", "1. c #F6F6F6F65454", "2. c #F2F2F2F25858", "3. c #F4F4F4F45F5F", "4. c #F7F7F7F75C5C", "5. c #F1F1EEEE6969", "6. c #F3F3F1F16F6F", "7. c #F9F9F9F96060", "8. c #FAFAFAFA6868", "9. c #FBFBFBFB6F6F", "0. c #F9F9F9F97676", "q. c #FCFCFCFC7575", "w. c #FBFBFBFB7C7C", "e. c #86869595DADA", "r. c #84849494DDDD", "t. c #8B8B9A9ADCDC", "y. c #8C8C9A9ADBDB", "u. c #8C8C9A9ADDDD", "i. c #8C8C9B9BDEDE", "p. c #91919F9FDEDE", "a. c #91919F9FDFDF", "s. c #9494A1A1DDDD", "d. c #9999A6A6DFDF", "f. c #9191A0A0E0E0", "g. c #9696A4A4E0E0", "h. c #9696A4A4E1E1", "j. c #9797A5A5E2E2", "k. c #9999A7A7E5E5", "l. c #9B9BA8A8E2E2", "z. c #9B9BA8A8E3E3", "x. c #9E9EAAAAE1E1", "c. c #9F9FACACE4E4", "v. c #9F9FACACE5E5", "b. c #9E9EAAAAE8E8", "n. c #A3A3AEAEE2E2", "m. c #A3A3AFAFE6E6", "M. c #A7A7B2B2E5E5", "N. c #A6A6B3B3E7E7", "B. c #ABABB6B6E7E7", "V. c #AEAEB9B9E8E8", "C. c #B0B0BBBBEDED", "Z. c #B2B2BCBCE9E9", "A. c #B4B4BEBEEBEB", "S. c #B4B4BFBFEBEB", "D. c #B7B7C0C0ECEC", "F. c #CCCCB9B98B8B", "G. c #D3D3B2B28585", "H. c #FBFBFBFB8181", "J. c #FCFCFCFC8686", "K. c #FCFCFCFC8C8C", "L. c #FDFDFDFD8F8F", "P. c None", /* pixels */ "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", ", , : : * .. .| | } } a a w q q ", "- S.A.A.C.L.K.J.H.w.0.L K J G 9 ", ", S.N.m.b.q.q.5.5.4.1.A C M F 8 ", "= A.m.v.z.0.F.G./ ~ >.C m x S 8 ", "= Z.v.z.z.8.( P %.^ -.M x j V 6 ", "& V.l.g.f.7.( %.D ! +.x j d B 5 ", "$ B.g.p.i.#.E H $.Y @.j s p v 4 ", "$ B.p.t.r.<.R T Y I o.d p y z 3 ", "# n.i.e.< :.=.Q W o.X.i t r l 2 ", "+ d.d.p.i.7.2.,.;.*.+.v z l g 2 ", "# O o X . { ] ] ` ` _ 4 3 2 1 2 ", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P." }; springlobby-0.169/src/images/flags/AE.xpm0000600000176000000410000000451012105760300021562 0ustar buildbotwww-data00000000000000/* XPM */ static const char * AE_xpm[] = { "16 16 109 2", " c None", ". c #FF0000", "+ c #FD0000", "@ c #007D00", "# c #007900", "$ c #007500", "% c #007300", "& c #006D00", "* c #006900", "= c #006300", "- c #005D00", "; c #005900", "> c #005300", ", c #004D00", "' c #FF7B7B", ") c #FE7979", "! c #FE7777", "~ c #74C774", "{ c #70C571", "] c #6DC36D", "^ c #69C269", "/ c #65C065", "( c #61BE60", "_ c #5CBB5C", ": c #58B957", "< c #53B753", "[ c #4EB44E", "} c #004700", "| c #FF7B7A", "1 c #FE5F5F", "2 c #FE5C5C", "3 c #FE5959", "4 c #54BA54", "5 c #51B751", "6 c #4CB64C", "7 c #47B347", "8 c #42B142", "9 c #3DAE3D", "0 c #37AB37", "a c #31A931", "b c #2CA62C", "c c #49B249", "d c #004100", "e c #FD5454", "f c #FDFDFD", "g c #FCFCFC", "h c #FBFBFB", "i c #FAFAFA", "j c #F9F9F9", "k c #F8F8F8", "l c #F7F7F7", "m c #F6F6F6", "n c #F5F5F5", "o c #D7D7D7", "p c #FE7676", "q c #FE5858", "r c #FD4F50", "s c #F4F4F4", "t c #D5D5D5", "u c #FE7273", "v c #FD5353", "w c #FC4F4F", "x c #FC4A4B", "y c #F3F3F3", "z c #F4F5F5", "A c #D1D1D1", "B c #FD6F6F", "C c #FB4A49", "D c #FB4545", "E c #F2F2F2", "F c #FB0000", "G c #FC6A6A", "H c #FB4949", "I c #FA3F3F", "J c #CFCFCF", "K c #F90000", "L c #FC6666", "M c #FA4444", "N c #F93A3A", "O c #343434", "P c #2E2E2E", "Q c #292929", "R c #232323", "S c #1E1E1E", "T c #181919", "U c #131313", "V c #0F0F0E", "W c #0B0B0B", "X c #2F2F2F", "Y c #000000", "Z c #F70000", "` c #FB6162", " . c #FA5D5D", ".. c #F95858", "+. c #F95455", "@. c #505050", "#. c #4B4B4B", "$. c #464646", "%. c #424242", "&. c #3D3D3D", "*. c #393939", "=. c #353535", "-. c #323232", ";. c #2C2C2C", ">. c #F50000", ",. c #F30000", "'. c #F10000", "). c #EF0000", "!. c #ED0000", " ", " ", ". . . . + @ # $ % & * = - ; > , ", ". ' ' ) ! ~ { ] ^ / ( _ : < [ } ", ". | 1 2 3 4 5 6 7 8 9 0 a b c d ", ". ) 2 3 e f g h i j k l m n m o ", "+ p q e r g h i j k l m n s n t ", "+ u v w x h i j k l m n s y z A ", "+ B w C D i j k l m n s y E s A ", "F G H D I j k l m n s y E E y J ", "K L M I N O P Q R S T U V W X Y ", "Z ` ...+.@.#.$.%.&.*.=.-.X ;.Y ", ">.,.'.).!.Y Y Y Y Y Y Y Y Y Y Y ", " ", " ", " "}; springlobby-0.169/src/images/flags/AF.xpm0000600000176000000410000000754312105760300021574 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AF_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 152 2", " c black", ". c #000001010101", "X c #0B0B09090909", "o c #000017170000", "O c #00001B1B0000", "+ c #00001F1F0000", "@ c #171700000000", "# c #131313131313", "$ c #151515151515", "% c gray9", "& c #191919191919", "* c #1B1B1B1B1B1B", "= c #000021210000", "- c #000025250000", "; c #000027270000", ": c #00002D2D0000", "> c #000033330000", ", c #00003B3B0000", "< c gray16", "1 c #000045450000", "2 c #00004D4D0000", "3 c #000053530000", "4 c #000067670000", "5 c #00006D6D0000", "6 c #000075750000", "7 c #6F6F15150000", "8 c #505050505050", "9 c gray34", "0 c #585858585858", "q c #5F5F5F5F5F5F", "w c #656565656565", "e c gray40", "r c gray42", "t c #6D6D6D6D6D6D", "y c #6D6D6D6D6E6E", "u c gray43", "i c #717172727272", "p c gray45", "a c #747474747474", "s c #777777777777", "d c #787879797979", "f c #79797A7A7A7A", "g c gray48", "h c #7E7E7E7E7E7E", "j c #0F0F91911010", "k c #151594941515", "l c #151595951414", "z c #1D1D98981D1D", "x c #1E1E98981E1E", "c c #24249C9C2525", "v c #24249D9D2424", "b c #2D2D9E9E2D2D", "n c #31319E9E3131", "m c #2C2CA1A12C2C", "M c #2D2DA1A12D2D", "N c #3131A0A03131", "B c #3636A2A23636", "V c #3636A3A33636", "C c #3535A5A53535", "Z c #3636A5A53535", "A c #3B3BA5A53B3B", "S c #3C3CAAAA3C3C", "D c #3E3EAAAA3D3D", "F c #4242A9A94242", "G c #4545AFAF4545", "H c #4949ADAD4949", "J c #5050B0B04F4F", "K c #5656B4B45656", "L c #5D5DB8B85D5D", "P c #6464BBBB6464", "I c #6A6ABEBE6A6A", "U c #929257572323", "Y c #97975E5E2A2A", "T c #9B9B64643232", "R c #A0A069693A3A", "E c #A0A06E6E4040", "W c #A4A471714343", "Q c #A9A978784A4A", "! c #AEAE7D7D5353", "~ c #CFCF00000000", "^ c #D3D300000000", "/ c #D7D700000000", "( c #DBDB00000000", ") c #DFDF00000000", "_ c #E1E100000000", "` c #F5F500000000", "' c #F9F900000000", "] c #FBFB05050505", "[ c #FDFD00000000", "{ c #EBEB23232323", "} c #EDED2A2A2A2A", "| c #EEEE2B2B2B2B", " . c #EFEF32323232", ".. c #F1F139393939", "X. c #F1F13C3C3C3C", "o. c #EDED40404040", "O. c #EEEE46464646", "+. c #EDED4F4F5151", "@. c #F2F240404040", "#. c #F3F344444444", "$. c #F0F04B4B4B4B", "%. c #F4F448484848", "&. c #F5F54C4C4B4B", "*. c #F2F252525252", "=. c #F5F550505050", "-. c #F6F654545454", ";. c #F2F258585858", ":. c #F7F759595959", ">. c #F4F45E5E5F5F", ",. c #F8F85B5B5B5B", "<. c #E7E77B7B7A7A", "1. c #F3F36A6A6969", "2. c #F9F960606060", "3. c #F9F962626262", "4. c #FAFA68686868", "5. c #FAFA68686969", "6. c #FAFA6F6F6F6F", "7. c #FBFB6F6F6F6F", "8. c #F1F177777676", "9. c #F9F976767676", "0. c #FCFC75757575", "q. c #FBFB7C7C7C7C", "w. c #BFBF97977575", "e. c #E8E880807E7E", "r. c #828283838383", "t. c #848484848484", "y. c #898989898989", "u. c #8E8E8E8E8E8E", "i. c #929292929292", "p. c gray58", "a. c gray59", "s. c #969697979696", "d. c gray60", "f. c #F2F287878585", "g. c #F6F683838585", "h. c #FBFB81818181", "j. c #FCFC86868686", "k. c #FCFC8B8B8C8C", "l. c #FDFD8F8F8F8F", "z. c #EEEEA0A0A1A1", "x. c #EEEEB4B4B3B3", "c. c #EEEEBDBDBBBB", "v. c #F4F4B2B2AFAF", "b. c #EEEEC8C8C7C7", "n. c #F4F4C1C1C3C3", "m. c #F7F7C6C6C5C5", "M. c #F0F0C9C9C8C8", "N. c #F2F2C9C9C9C9", "B. c #F8F8C9C9C9C9", "V. c #F9F9CACACACA", "C. c #F7F7D3D3D2D2", "Z. c None", /* pixels */ "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "< * * * % [ ] ' ' ` ` 7 6 5 4 4 ", "% d.d.s.p.l.k.j.h.q.9.w.I P L 3 ", "* d.r.h d 0.7.5.3.:.-.! G D K 2 ", "* p.h d a 7.7.V.m.g.&.Q D Z J 1 ", "# i.d p u 5.V.f.8.n.#.W Z M H , ", "X u.p u w 3.C.c.x.N.X.T M v F > ", " y.u w q :.v.N.b.z. .T m z A : ", " t.w q 9 =.1.e.<.+.| Y x k Z ; ", " h q 9 8 %.@... .} { U k j N = ", " a p t w >.;.*.$.O.o.E V n b o ", " _ ) ( / ^ ~ @ ; + O ; ", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z." }; springlobby-0.169/src/images/flags/AG.xpm0000600000176000000410000000745612105760300021600 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AG_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 147 2", " c black", ". c #393900000000", "X c #2B2B2C2C2D2D", "o c #30302C2C2C2C", "O c #313131313131", "+ c #393937373131", "@ c #3A3A39393737", "# c #7A7A26262626", "$ c #7F7F6F6F3636", "% c #535353535353", "& c #585857575757", "* c #5A5A58585454", "= c #585859595A5A", "- c #5B5B5A5A5959", "; c gray36", ": c #61614E4E4E4E", "> c #64645F5F5F5F", ", c #656565656060", "< c #7C7C77776565", "1 c #777777777777", "2 c #787877777474", "3 c #797979797979", "4 c #7B7B7B7B7B7B", "5 c #46468484CCCC", "6 c #42428A8AD9D9", "7 c #47478888D9D9", "8 c #4D4D8C8CDADA", "9 c #51518F8FDCDC", "0 c #5E5E9191CBCB", "q c #56569292DDDD", "w c #5D5D9898D2D2", "e c #5E5E9D9DDCDC", "r c #5B5B9A9AE1E1", "t c #63639E9ED9D9", "y c #68689C9CD7D7", "u c #6767A1A1DADA", "i c #6D6DA3A3D5D5", "p c #6B6BA4A4DCDC", "a c #7171A6A6D6D6", "s c #7070A8A8DEDE", "d c #7575A9A9D8D8", "f c #7979ACACDADA", "g c #7474AAAAE1E1", "h c #7C7CAEAEE0E0", "j c #818100000000", "k c #ABAB00000000", "l c #ADAD00000000", "z c #B1B100000000", "x c #B3B300000000", "c c #B5B500000000", "v c #B7B700000000", "b c #B9B900000000", "n c #BBBB00000000", "m c #BDBD00000000", "M c #B7B72D2D3B3B", "N c #94943F3F5A5A", "B c #8C8C7F7F5151", "V c #8E8E7B7B7B7B", "C c #A3A35C5C5C5C", "Z c #B1B149494949", "A c #ADAD5D5D7272", "S c #C3C300000000", "D c #C5C500000000", "F c #C9C900000000", "G c #CBCB00000000", "H c #CFCF00000000", "J c #D3D300000000", "K c #D5D500000000", "L c #D7D700000000", "P c #D9D900000000", "I c #DBDB00000000", "U c #DDDD00000000", "Y c #DFDF00000000", "T c #CACA24242424", "R c #D7D72B2B2424", "E c #D8D82F2F2828", "W c #D8D82F2F2929", "Q c #DADA33332C2C", "! c #DADA34342C2C", "~ c #DADA34342E2E", "^ c #DDDD38383131", "/ c #DFDF39393232", "( c #DEDE3E3E3737", ") c #E5E500000000", "_ c #E0E039393131", "` c #DBDB47474141", "' c #DBDB44444444", "] c #DDDD4B4B4444", "[ c #DDDD4D4D4747", "{ c #DEDE4D4D4747", "} c #DEDE50504B4B", "| c #DFDF54544D4D", " . c #CDCD59596464", ".. c #CECE7B7B7A7A", "X. c #D8D860606060", "o. c #DBDB66666666", "O. c #E4E454544D4D", "+. c #E4E454544F4F", "@. c #E0E055555050", "#. c #E2E259595454", "$. c #E5E559595454", "%. c #E7E75A5A5454", "&. c #E7E75E5E5858", "*. c #E7E75E5E5959", "=. c #E8E862625E5E", "-. c #ECEC63635E5E", ";. c #E6E667676262", ":. c #E7E76B6B6666", ">. c #E9E967676161", ",. c #EDED6C6C6666", "<. c #E8E86F6F6A6A", "1. c #E9E974746F6F", "2. c #EEEE70706A6A", "3. c #EAEA77777373", "4. c #ECEC7B7B7676", "5. c #EAEA79797979", "6. c #EDED7F7F7A7A", "7. c #848480807171", "8. c #AEAE98984242", "9. c #B1B19D9D5151", "0. c #B5B5B3B36B6B", "q. c #DFDFBFBF3D3D", "w. c #CCCCB9B96969", "e. c #CDCDBBBB6D6D", "r. c #EDED83837E7E", "t. c #EAEAC8C83C3C", "y. c #DBDBC1C15454", "u. c #E4E4C5C54747", "i. c #E6E6C8C84C4C", "p. c #EAEACACA4B4B", "a. c #FAFADEDE4242", "s. c #FBFBDFDF4747", "d. c #8383AFAFDDDD", "f. c #C1C1BFBF8080", "g. c #EEEE85858282", "h. c #E3E399999999", "j. c #F0F089898484", "k. c #E9E9A0A09F9F", "l. c #EDEDCBCBCACA", "z. c #F0F0C9C9C9C9", "x. c #F5F5ECECECEC", "c. c #F4F4EEEEEEEE", "v. c gray96", "b. c #F6F6F6F6F6F6", "n. c gray97", "m. c #F8F8F8F8F8F8", "M. c None", /* pixels */ "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", ". ", "v V 4 4 1 2 7.e.w.< , ; & % : j ", ") ..> ; * y.9.i.u.8.q.@ O o Z k ", "Y 5.C = * B p.s.a.t.$ + X # ' n ", "Y j.2.d.h f.f d i i 0.w 0 ( #.n ", "Y g.,. .y r q 9 8 7 6 5 M / @.v ", "I r.>.-.A g s u u t e N / Q } z ", "I 6.=.*.%.k.m.n.m.b.h.^ ! W [ z ", "K 4.*.%.O.O.l.b.b.l.T Q W R ] l ", "J 3.3.<.:.;.o.x.c.X.| } [ ] ` l ", "K H H D D S m n v v v z z l l z ", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M." }; springlobby-0.169/src/images/flags/AI.xpm0000600000176000000410000001021512105760300021565 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AI_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 162 2", " c black", ". c #000000003636", "X c #000000003939", "o c #000000003E3E", "O c #000000004141", "+ c #000000004444", "@ c #000000004949", "# c #000000004F4F", "$ c #000000005252", "% c #000000005757", "& c #000000005A5A", "* c #000000005F5F", "= c #000000006868", "- c #000000006D6D", "; c #000000007070", ": c #000000007676", "> c #000001017E7E", ", c #00000B0B8484", "< c #000012128989", "1 c #000016169191", "2 c #00001B1B9191", "3 c #00001E1E9797", "4 c #000022229797", "5 c #000025259999", "6 c #000027279C9C", "7 c #00002E2EA2A2", "8 c #00004B4BB4B4", "9 c #00005B5BBABA", "0 c #00005E5EBBBB", "q c #11115B5BB9B9", "w c #2B2B6060B7B7", "e c #2C2C7676B7B7", "r c #29297575BEBE", "t c #34347F7FC3C3", "y c #5F5F5A5AA6A6", "u c #4E4E6464B4B4", "i c #5D5D6868B6B6", "p c #2D2D8080C4C4", "a c #30308181C5C5", "s c #33338585C6C6", "d c #3A3A8484C2C2", "f c #3A3A8686C5C5", "g c #3F3F8888C6C6", "h c #3F3F8989C7C7", "j c #39398B8BC8C8", "k c #5A5A8686B8B8", "l c #41418989C7C7", "z c #44448D8DC8C8", "x c #45458E8EC8C8", "c c #4A4A8686C4C4", "v c #47479191C7C7", "b c #46469191C9C9", "n c #46469292CACA", "m c #48489292CACA", "M c #4A4A9191C9C9", "N c #4B4B9191C9C9", "B c #4C4C9292C8C8", "V c #4C4C9595CBCB", "C c #4D4D9595CBCB", "Z c #4E4E9494C9C9", "A c #4F4F9595CACA", "S c #4C4C9696CCCC", "D c #56569595C7C7", "F c #50509696CBCB", "G c #52529595CBCB", "H c #50509898CCCC", "J c #51519999CCCC", "K c #52529999CDCD", "L c #53539898CCCC", "P c #52529898CECE", "I c #54549999CECE", "U c #54549A9ACCCC", "Y c #55559B9BCECE", "T c #56569B9BCCCC", "R c #57579B9BCECE", "E c #55559C9CCECE", "W c #56569C9CCECE", "Q c #58589D9DCFCF", "! c #59599E9ECFCF", "~ c #5A5A9D9DCECE", "^ c #5B5B9D9DCECE", "/ c #5C5C9D9DCECE", "( c #5A5A9E9ED0D0", ") c #5D5DA0A0CFCF", "_ c #5F5FA0A0CFCF", "` c #5C5CA0A0D1D1", "' c #5D5DA0A0D1D1", "] c #4A4AB4B4E6E6", "[ c #4D4DB6B6E5E5", "{ c #5555B5B5E3E3", "} c #6666A0A0CFCF", "| c #6262A1A1D0D0", " . c #6262A2A2D0D0", ".. c #6262A3A3D3D3", "X. c #6565A4A4D2D2", "o. c #6666A4A4D2D2", "O. c #6868A5A5D3D3", "+. c #6A6AA6A6D3D3", "@. c #6A6AA7A7D4D4", "#. c #6B6BA6A6D4D4", "$. c #6E6EA9A9D4D4", "%. c #7171A8A8D4D4", "&. c #7171ABABD6D6", "*. c #7474ACACD6D6", "=. c #7575ACACD7D7", "-. c #7777ADADD7D7", ";. c #7979AEAED8D8", ":. c #7B7BB0B0D9D9", ">. c #7C7CB1B1D9D9", ",. c #7D7DB2B2D9D9", "<. c #7F7FB0B0D9D9", "1. c #6161BBBBE6E6", "2. c #6464BDBDE6E6", "3. c #6868BFBFE7E7", "4. c #D2D254546D6D", "5. c #A9A956568181", "6. c #B0B059598181", "7. c #C9C96C6C8989", "8. c #F8F8D8D86B6B", "9. c #F9F9DFDF7E7E", "0. c #91919B9BBDBD", "q. c #ADAD83839E9E", "w. c #B0B080809A9A", "e. c #B0B09090AAAA", "r. c #8888A8A8CECE", "t. c #8181B3B3DBDB", "y. c #9E9EB1B1D2D2", "u. c #9797CDCDEFEF", "i. c #9E9EC7C7EAEA", "p. c #A7A7CACAEAEA", "a. c #AEAED4D4F2F2", "s. c #DFDF9494A1A1", "d. c #EFEF81818888", "f. c #E5E593939D9D", "g. c #FEFE81818686", "h. c #FFFF87878B8B", "j. c #FFFF8A8A8E8E", "k. c #F8F888889090", "l. c #FBFB91919595", "z. c #FCFC90909595", "x. c #FFFF94949898", "c. c #EAEAA0A0AAAA", "v. c #FFFFAAAAAEAE", "b. c #FFFFADADB0B0", "n. c #F7F7B1B1BABA", "m. c #F4F4B4B4BDBD", "M. c #FFFFBEBEBFBF", "N. c #F5F5BABAC2C2", "B. c #F7F7E2E29696", "V. c #F5F5E5E5A7A7", "C. c #F6F6E6E6A7A7", "Z. c #D4D4CACADCDC", "A. c #FFFFC5C5CACA", "S. c #F9F9DCDCE5E5", "D. c #EDEDF3F3F8F8", "F. c #FFFFE5E5EFEF", "G. c #F9F9EEEEEDED", "H. c #F9F9EFEFEFEF", "J. c #F0F0F5F5FAFA", "K. c #FDFDF6F6F5F5", "L. c #FEFEFAFAF9F9", "P. c None", /* pixels */ "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "i q 0 5.6.9 c 7.5 3 1 < , > : ; ", "w S.a.N.n.p.A.i.<.;.-.%.#.O.X.= ", "4.v.x.h.g.j.k.d.} W O.>.-.) .* ", "y Z.M.z.l.b.c.e./ K J.H.H.D.^ % ", "8 F.y.s.f.u.m.k R S C.9.L.B.R $ ", "u r.f q.q.e D 0.G b C.K.8.C.K @ ", "7 t...` ^ E K V m h 1.3.2.{ G + ", "6 ,.( ( R Z S b x g j [ ] t Z o ", "4 >.( W K Z b z h f t s t r m X ", "2 -.$.$.O.X. .} ^ T K G n m v . ", "< , > : - = * & $ # @ O o X . . ", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P." }; springlobby-0.169/src/images/flags/AL.xpm0000600000176000000410000000771012105760300021576 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AL_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 154 2", " c black", ". c #2F2F2F2F2F2F", "X c #3D3D27272525", "o c #373736363636", "O c #3F3F37373636", "+ c gray24", "@ c #3E3E3D3D3E3E", "# c #40403F3F3E3E", "$ c #47473E3E3D3D", "% c #54543C3C3A3A", "& c #656531312D2D", "* c #64643A3A3434", "= c #6E6E3A3A3636", "- c #71713A3A3434", "; c #727239393535", ": c #434343434343", "> c #444444444444", ", c gray27", "< c gray29", "1 c #5B5B46464444", "2 c #5F5F4D4D4C4C", "3 c #505051515151", "4 c #555551515050", "5 c #565656565656", "6 c #5B5B52525252", "7 c #5F5F58585858", "8 c #5E5E5D5D5D5D", "9 c #707047474343", "0 c #797956565454", "q c #79795B5B5959", "w c #959500000000", "e c #9D9D00000000", "r c #9F9F00000000", "t c #959539393131", "y c #A3A300000000", "u c #A7A700000000", "i c #A9A900000000", "p c #ADAD00000000", "a c #AFAF00000000", "s c #B1B100000000", "d c #B7B700000000", "f c #B9B900000000", "g c #BBBB00000000", "h c #BDBD00000000", "j c #80804B4B4848", "k c #8F8F63635F5F", "l c #808070706F6F", "z c #8D8D7E7E7C7C", "x c #90906C6C6969", "c c #ABAB48484141", "v c #B7B74A4A4040", "b c #B3B35B5B5353", "n c #B3B363635C5C", "m c #BABA6A6A6363", "M c #C1C100000000", "N c #C3C300000000", "B c #C5C500000000", "V c #C7C700000000", "C c #C9C900000000", "Z c #CDCD00000000", "A c #CFCF00000000", "S c #D1D100000000", "D c #D3D300000000", "F c #D5D500000000", "G c #D7D700000000", "H c #D7D701010000", "J c #D5D507070000", "K c #D7D707070000", "L c #D3D309090000", "P c #D7D709090000", "I c #DBDB00000000", "U c #DBDB05050000", "Y c #D4D42B2B1B1B", "T c #D5D52E2E1F1F", "R c #CFCF3D3D3030", "E c #D6D633332424", "W c #D5D534342525", "Q c #D7D734342525", "! c #D6D639392B2B", "~ c #D8D839392A2A", "^ c #D8D839392B2B", "/ c #D9D939392A2A", "( c #DADA3F3F3131", ") c #DBDB3E3E3030", "_ c #C8C841413535", "` c #CFCF42423535", "' c #D9D940403232", "] c #D8D846463838", "[ c #DADA46463838", "{ c #DCDC45453838", "} c #D9D949493B3B", "| c #D9D949493C3C", " . c #DCDC4C4C3F3F", ".. c #DEDE4C4C3E3E", "X. c #C4C45C5C5252", "o. c #DBDB4B4B4040", "O. c #DBDB4D4D4040", "+. c #D3D352524747", "@. c #DBDB50504343", "#. c #DDDD50504444", "$. c #DDDD54544747", "%. c #DDDD55554949", "&. c #DFDF58584B4B", "*. c #DEDE5A5A4E4E", "=. c #D3D35D5D5353", "-. c #DDDD64645959", ";. c #C3C36F6F6868", ":. c #E0E052524545", ">. c #E1E154544747", ",. c #E4E450504242", "<. c #E3E359594D4D", "1. c #E1E15B5B5050", "2. c #E3E35C5C5151", "3. c #E3E35F5F5353", "4. c #E0E060605353", "5. c #E2E260605555", "6. c #E6E660605353", "7. c #E2E264645858", "8. c #E2E265655B5B", "9. c #E5E565655959", "0. c #E3E369695E5E", "q. c #E3E36A6A5F5F", "w. c #E7E76A6A5F5F", "e. c #E5E56E6E6363", "r. c #E5E56F6F6565", "t. c #E9E96C6C6060", "y. c #E8E86F6F6565", "u. c #E7E773736868", "i. c #E5E575756B6B", "p. c #E7E774746A6A", "a. c #E6E677776E6E", "s. c #ECEC70706666", "d. c #E8E874746969", "f. c #EDED75756A6A", "g. c #E8E879796F6F", "h. c #EAEA78786E6E", "j. c #EEEE79796F6F", "k. c #E9E97B7B7272", "l. c #EBEB7D7D7373", "z. c #E9E97D7D7474", "x. c #EFEF7E7E7373", "c. c #E3E384847B7B", "v. c #E1E187877E7E", "b. c #ECEC80807676", "n. c #EAEA82827878", "m. c #ECEC85857D7D", "M. c #ECEC8A8A8181", "N. c #EDED8E8E8585", "B. c #EDED92928A8A", "V. c #EEEE91918989", "C. c #EFEF94948C8C", "Z. c #F1F18F8F8787", "A. c #F0F097978F8F", "S. c None", /* pixels */ "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "L K P P U H I D D D Z C V M M f ", "P A.C.C.C.N.z v.c.l k.a.u.e.0.d ", "P A.b.x.x a.m 7 6 b 2.9 :. .7.s ", "K C.l.j.;.8 5 4 2 , # c .[ 4.p ", "H V.h.f.k q 3 < , @ % - { ' *.p ", "I N.p.y.n 0 X.> @ v * t ' ! %.s ", "H M.y.t.-.=.j $ O - _ R ^ Q #.i ", "Z m.t.9.6.1 +.o . ` X ^ Q T O.r ", "Z n.9.3.<.>.,.- & ^ ^ Q T Y | r ", "Z z.k.u.r.0.7.5.1.&.$.@.O.} ] r ", "V V V M h h d s p u u u y r e w ", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S." }; springlobby-0.169/src/images/flags/AM.xpm0000600000176000000410000001003712105760300021573 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 157 2", " c black", ". c #000000005B5B", "X c #000000006363", "o c #030303039B9B", "O c #090909099B9B", "+ c #0F0F0F0F9F9F", "@ c #42424242ADAD", "# c #46464646AFAF", "$ c #47474747AEAE", "% c #4B4B4B4BB0B0", "& c #4B4B4B4BB1B1", "* c #50505050B3B3", "= c #50505050B4B4", "- c #53535353B6B6", "; c #54545555B5B5", ": c #55555555B6B6", "> c #58585858B7B7", ", c #58585858B8B8", "< c #59595959B8B8", "1 c #5D5D5D5DB9B9", "2 c #5C5C5C5CBBBB", "3 c #5D5D5D5DBABA", "4 c #5E5E5E5EBABA", "5 c #60606060B9B9", "6 c #61616161BCBC", "7 c #61616161BDBD", "8 c #62626262BDBD", "9 c #65656565BCBC", "0 c #66666666BEBE", "q c #66666666BFBF", "w c #66666666C0C0", "e c #6A6A6A6AC1C1", "r c #6B6B6B6BC1C1", "t c #6A6A6A6AC2C2", "y c #6F6F6E6EC3C3", "u c #6E6E6E6EC4C4", "i c #6F6F6F6FC4C4", "p c #72727272C5C5", "a c #72727272C6C6", "s c #73737373C6C6", "d c #76767676C7C7", "f c #77777777C7C7", "g c #79797A7AC9C9", "h c #E3E300000000", "j c #E5E500000000", "k c #E9E900000000", "l c #EBEB00000000", "z c #EDED00000000", "x c #EFEF00000000", "c c #F1F100000000", "v c #F3F300000000", "b c #F5F500000000", "n c #F7F700000000", "m c #F7F703030303", "M c #F7F709090909", "N c #FBFB05050505", "B c #F9F90D0D0D0D", "V c #FBFB13131313", "C c #FBFB15151515", "Z c #FBFB25252525", "A c #D7D749490000", "S c #D7D74B4B0000", "D c #D9D94F4F0000", "F c #D7D755550000", "G c #D9D951510000", "H c #D9D955550000", "J c #DDDD55550000", "K c #D9D959590000", "L c #DFDF59590000", "P c #DFDF5D5D0000", "I c #E1E161610000", "U c #E3E365650000", "Y c #E7E76B6B0000", "T c #E9E96F6F0000", "R c #EBEB73730000", "E c #EDED79790000", "W c #EFEF7D7D0000", "Q c #F4F453535252", "! c #F4F457575757", "~ c #F5F557575757", "^ c #F5F55C5C5B5B", "/ c #F5F55C5C5C5C", "( c #F6F660605F5F", ") c #F6F661616161", "_ c #F7F764646464", "` c #F7F765656565", "' c #F4F46A6A6A6A", "] c #F6F66F6F6F6F", "[ c #F8F868686868", "{ c #F9F96D6D6D6D", "} c #F7F773737373", "| c #F7F776767676", " . c #FAFA71717171", ".. c #FBFB75757575", "X. c #F8F87A7A7A7A", "o. c #FBFB78787878", "O. c #FBFB79797979", "+. c #FBFB7B7B7B7B", "@. c #FBFB7B7B7C7C", "#. c #F8F87E7E7E7E", "$. c #FCFC7E7E7E7E", "%. c #F1F183830000", "&. c #F3F389890000", "*. c #F1F18D8D0000", "=. c #F5F597970000", "-. c #F7F795950000", ";. c #EEEEACAC3B3B", ":. c #EFEFAEAE3F3F", ">. c #EFEFB0B04343", ",. c #EFEFB1B15555", "<. c #EFEFB3B35757", "1. c #EFEFB8B85959", "2. c #F0F0B0B04343", "3. c #F0F0B2B24747", "4. c #F0F0B2B24848", "5. c #F1F1B4B44B4B", "6. c #F3F3B7B74F4F", "7. c #F3F3B7B75050", "8. c #F1F1B3B35B5B", "9. c #F2F2B5B55E5E", "0. c #F4F4B9B95454", "q. c #F4F4B9B95555", "w. c #F1F1B9B95B5B", "e. c #F5F5BBBB5959", "r. c #F6F6BEBE5E5E", "t. c #F2F2B8B86161", "y. c #F2F2B9B96464", "u. c #F3F3BBBB6767", "i. c #F5F5BDBD6B6B", "p. c #F6F6BFBF6F6F", "a. c #F7F7C0C06262", "s. c #F8F8C3C36666", "d. c #F8F8C3C36767", "f. c #F9F9C5C56B6B", "g. c #FAFAC6C66F6F", "h. c #F7F7C1C17373", "j. c #F7F7C3C37777", "k. c #F8F8C5C57B7B", "l. c #F9F9C8C87F7F", "z. c #8C8C8C8CD0D0", "x. c #8F8F8F8FD1D1", "c. c #91919191D3D3", "v. c #F9F981818181", "b. c #FAFA84848484", "n. c #FCFC81818181", "m. c #FBFB88888888", "M. c #FCFC8B8B8B8B", "N. c #FCFC8F8F8F8F", "B. c #FCFC91919191", "V. c #FCFC94949494", "C. c #FCFC95959595", "Z. c #FDFD97979696", "A. c #FDFD97979797", "S. c #FAFAC9C98383", "D. c #FBFBCFCF8686", "F. c #FBFBD1D18A8A", "G. c None", /* pixels */ "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "Z C C C V B M m m m v v v z z l ", "V A.Z.A.V.B.N.M.M.n.v.#.O.| } l ", "C A.n.$.O.O... .{ ' ` ) / ! ] h ", "N A.$.O.O... .{ [ ) ( ^ ! Q ' h ", "+ c.g d s i r q 8 4 < ; * % q X ", "O x.d s i r q 8 4 < , - % # 4 . ", "o z.s y r w 4 2 , - & % # @ 4 . ", "-.F.g.f.d.u.r.e.q.7.5.5.>.:.w.H ", "-.D.f.s.a.r.e.q.6.5.>.>.:.;.1.K ", "&.S.l.k.j.p.p.p.y.y.t.9.8.<.<.A ", "*.%.W E R R Y U I P L J G D A F ", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G." }; springlobby-0.169/src/images/flags/AN.xpm0000600000176000000410000000603212105760300021574 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AN_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 114 2", " c black", ". c #000000002525", "X c #000000002D2D", "o c #000000003131", "O c #000000007373", "+ c #000000007777", "@ c #000000007979", "# c #141414149797", "$ c #191919199999", "% c #1A1A1A1A9C9C", "& c #1F1F1F1F9C9C", "* c #1F1F1F1F9E9E", "= c #202020209E9E", "- c #242424249D9D", "; c #25252525A0A0", ": c #25252525A1A1", "> c #2B2B2B2BA4A4", ", c #36363636A6A6", "< c #31313333ABAB", "1 c #36363636ABAB", "2 c #37373737ABAB", "3 c #36363737ACAC", "4 c #3B3B3B3BA9A9", "5 c #3B3B3B3BADAD", "6 c #3F3F3F3FABAB", "7 c #40404040ABAB", "8 c #43434444B2B2", "9 c #45454545B0B0", "0 c #46464848B4B4", "q c #49494A4AB2B2", "w c #4B4B4A4AB4B4", "e c #4F4F4F4FB5B5", "r c #4F4F4F4FB6B6", "t c #50504F4FB6B6", "y c #50505050B7B7", "u c #53535353B9B9", "i c #54545454B8B8", "p c #58585858BABA", "a c #6F6F6F6FC3C3", "s c #72727272C6C6", "d c #76767676C7C7", "f c #D3D300000000", "g c #D7D700000000", "h c #D9D900000000", "j c #EBEB00000000", "k c #EDED00000000", "l c #EFEF00000000", "z c #F4F41E1E1E1E", "x c #F5F523232323", "c c #F5F524242424", "v c #F6F629292929", "b c #F6F62A2A2A2A", "n c #F7F72E2E2E2E", "m c #F7F72F2F2F2F", "M c #F5F53D3D3D3D", "N c #F8F834343434", "B c #F9F93C3C3C3C", "V c #F6F642424242", "C c #F7F746464646", "Z c #F7F74B4B4B4B", "A c #FAFA41414242", "S c #FAFA42424242", "D c #FBFB47474747", "F c #FCFC4B4B4B4B", "G c #FCFC4C4C4C4C", "H c #FDFD51515151", "J c #FCFC65656565", "K c #FCFC69696969", "L c #FDFD6D6D6D6D", "P c #FDFD70707171", "I c #83838585CBCB", "U c #8C8C8E8ED0D0", "Y c #B6B6B6B6DDDD", "T c #B9B9BABAE1E1", "R c #BBBBBCBCE2E2", "E c #CBCBCBCBCBCB", "W c #CFCFCDCDCDCD", "Q c gray81", "! c #D1D1CDCDCDCD", "~ c #D7D7D7D7D7D7", "^ c gray85", "/ c #DDDDDDDDDDDD", "( c #DFDFDFDFDFDF", ") c #CDCDCDCDE7E7", "_ c #CFCFD0D0E9E9", "` c #D7D7D7D7EDED", "' c #E1E1E1E1E1E1", "] c gray89", "[ c gray90", "{ c #E7E7E7E7E7E7", "} c #E9E9E7E7E7E7", "| c #E9E9E9E9E9E9", " . c gray92", ".. c gray93", "X. c #EFEFEFEFF1F1", "o. c #F1F1F1F1F1F1", "O. c gray95", "+. c #F2F2F2F2F3F3", "@. c #F3F3F3F3F3F3", "#. c #F4F4F2F2F2F2", "$. c #F4F4F4F4F4F4", "%. c gray96", "&. c #F6F6F6F6F6F6", "*. c gray97", "=. c #F8F8F8F8F8F8", "-. c #F9F9F9F9F9F9", ";. c gray98", ":. c #FBFBFAFAFAFA", ">. c #FBFBFBFBFBFB", ",. c gray99", "<. c #FDFDFDFDFDFD", "1. c #FEFEFEFEFEFE", "2. c gray100", "3. c None", /* pixels */ "3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.", "3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.", "3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.", "o.o.o.o.o.o.k k k j } { } ] ' ` ", "o.2.2.2.2.2.P L K J :.:.:.*.*./ ", "o.2.2.2.2.:.H G D V =.:.*.&.*.^ ", "o.2.2.2.>.2.F D V B :.&.&.&.*.~ ", "@ d i i e r 9 R T 2 2 > - = 7 X ", "O s u e w ` 8 4 2 < Y : & % 4 X ", "O a e q 9 7 U _ ) I - & $ # , . ", "..2.>.>.>.>.N m b c $.$.o.@.$.Q ", "| >.>.>.>.&.m b x z #.o.o.o.o.E ", "| >.>.:.:.:.D C V M #.@.@.@.o.E ", "{ [ ] ( ` / h g g f ! Q W E E E ", "3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.", "3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3." }; springlobby-0.169/src/images/flags/AO.xpm0000600000176000000410000000607612105760300021605 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AO_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 116 2", " c black", ". c gray11", "X c #1D1D1D1D1D1D", "o c #1E1E1E1E1E1E", "O c gray12", "+ c #202020202020", "@ c gray13", "# c #222222222222", "$ c #232323232323", "% c gray15", "& c #282828282828", "* c #2A2A2A2A2A2A", "= c gray17", "- c #2C2C2C2C2C2C", "; c #2D2D2D2D2D2D", ": c gray18", "> c #2F2F2F2F2F2F", ", c gray19", "< c #313131313131", "1 c #323232323232", "2 c gray20", "3 c #343434343434", "4 c #353535353535", "5 c gray21", "6 c #373737373737", "7 c gray22", "8 c #393939393939", "9 c #3A3A3A3A3A3A", "0 c gray23", "q c #3C3C3C3C3C3C", "w c gray24", "e c #3F3F3F3F3F3F", "r c #6D6D6D6D2F2F", "t c #7F7F7F7F3131", "y c gray25", "u c #434343434343", "i c #888826262626", "p c #A3A327272727", "a c #A5A527272727", "s c #A8A827272727", "d c #ABAB27272727", "f c #B1B127272727", "g c #B5B528282828", "h c #B8B828282828", "j c #BABA28282828", "k c #BEBE28282828", "l c #BFBF29292929", "z c #80807F7F2B2B", "x c #C3C328282828", "c c #C4C428282828", "v c #C6C628282828", "b c #C7C728282828", "n c #CCCC29292929", "m c #CECE29292929", "M c #EBEB27272727", "N c #EBEB2B2B2B2B", "B c #ECEC31313131", "V c #ECEC32323232", "C c #ECEC34343434", "Z c #EDED38383838", "A c #EDED3A3A3A3A", "S c #EDED3C3C3C3C", "D c #EDED3F3F3F3F", "F c #EDED41414141", "G c #EEEE45454545", "H c #EEEE47474747", "J c #EEEE4F4F4747", "K c #EEEE48484848", "L c #EEEE4C4C4C4C", "P c #EFEF5A5A4040", "I c #EFEF50505050", "U c #EFEF53535353", "Y c #EFEF55555555", "T c #F0F059595959", "R c #F0F05B5B5B5B", "E c #F0F05E5E5E5E", "W c #F0F064645F5F", "Q c #F0F068685959", "! c #F0F060606060", "~ c #F0F061616060", "^ c #F0F062626262", "/ c #F1F164646464", "( c #F1F166666666", ") c #F1F169696969", "_ c #F1F16D6D6D6D", "` c #F2F26F6F6F6F", "' c #F2F273737373", "] c #F2F276767676", "[ c #F3F37C7C7C7C", "{ c #F3F37F7F7F7F", "} c #838381812D2D", "| c #858585853030", " . c #ADADADAD2F2F", ".. c #B9B9B7B72E2E", "X. c #F3F3B0B03939", "o. c #F1F184844646", "O. c #F1F181815151", "+. c #C8C8C8C82C2C", "@. c #CCCCCCCC2C2C", "#. c #D8D8D5D52B2B", "$. c #F4F4C1C13131", "%. c #F4F4C8C83535", "&. c #F4F4D0D02E2E", "*. c #F5F5D7D73030", "=. c #F5F5D8D83131", "-. c #E6E6E3E32C2C", ";. c #F5F5E6E62E2E", ":. c #F6F6F1F12B2B", ">. c #F6F6F2F22B2B", ",. c #F3F381818181", "<. c #F3F383838383", "1. c #F4F485858585", "2. c #F4F487878787", "3. c #F4F489898989", "4. c #F4F48A8A8A8A", "5. c None", /* pixels */ "5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.", "5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.", "5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.", "m m m m n c c x x l l j h g f f ", "m 4.4.2.2.<.{ [ ' ' ' ) ( ^ T d ", "n 4._ _ ( ( W O.;.o.K K F S Y d ", "n 2._ ) ( ! Q :.%.>.H S A C I p ", "v <.( ^ E T =.I J $.A A B N K p ", "l { ( E R U X.&.P *.Z B N M H i ", "% u 9 9 7 .| ..-.r < ; ; ; 3 + ", "+ y 7 4 4 | @.+.z #.; * * & , . ", "+ y 4 4 2 < < , > ; t * & & , . ", "$ e w 9 9 9 4 6 4 3 < < , ; , . ", "+ + + @ + + O . . O . . . . . . ", "5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.", "5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5." }; springlobby-0.169/src/images/flags/AR.xpm0000600000176000000410000000755512105760300021613 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 151 2", " c black", ". c #00008181DDDD", "X c #00008181DFDF", "o c #00008383DDDD", "O c #00008787DDDD", "+ c #00008787DFDF", "@ c #00008989DDDD", "# c #00008B8BE1E1", "$ c #00008F8FE3E3", "% c #00009191E5E5", "& c #00009393E7E7", "* c #00009797E9E9", "= c #00009999E9E9", "- c #00009D9DEBEB", "; c #03039F9FEDED", ": c #0B0BA3A3EDED", "> c #1313A7A7EFEF", ", c #1919A9A9EFEF", "< c #1919ABABF1F1", "1 c #2121AFAFF3F3", "2 c #2727B1B1F5F5", "3 c #2B2BB3B3F7F7", "4 c #2D2DB3B3F7F7", "5 c #2929B5B5F9F9", "6 c #3333B5B5F5F5", "7 c #3535B7B7F9F9", "8 c #3939B9B9FBFB", "9 c #3F3FBDBDFDFD", "0 c #4343BDBDFDFD", "q c #4343BFBFFFFF", "w c #5F5FBFBFF1F1", "e c #4545C1C1FDFD", "r c #4B4BC3C3FDFD", "t c #4B4BC3C3FFFF", "y c #4D4DC3C3FFFF", "u c #5959C7C7FFFF", "i c #6262C1C1F1F1", "p c #6666C3C3F2F2", "a c #6969C5C5F3F3", "s c #6D6DC7C7F4F4", "d c #7171C9C9F5F5", "f c #7777C8C8F2F2", "g c #7575CBCBF6F6", "h c #7777CCCCF6F6", "j c #7B7BCACAF2F2", "k c #7878CCCCF7F7", "l c #7B7BCECEF7F7", "z c #7C7CCACAF2F2", "x c #7F7FCCCCF3F3", "c c #7C7CCECEF8F8", "v c #7F7FD0D0F8F8", "b c #F5F5E2E24646", "n c #F6F6E4E44B4B", "m c #F5F5E2E25B5B", "M c #F6F6E3E36161", "N c #F6F6E5E56868", "B c #F7F7E6E66868", "V c #F8F8E6E66C6C", "C c #FAFAEBEB7575", "Z c #9696BDBDCECE", "A c #9F9FC2C2D5D5", "S c #8282CDCDF3F3", "D c #8484CFCFF4F4", "F c #8686D0D0F5F5", "G c #8080D0D0F9F9", "H c #8282D2D2F9F9", "J c #8383D2D2FAFA", "K c #8686D3D3FAFA", "L c #8787D4D4FAFA", "P c #8A8AD2D2F6F6", "I c #8A8AD3D3F7F7", "U c #8D8DD3D3F7F7", "Y c #8A8AD5D5FBFB", "T c #8E8ED7D7FCFC", "R c #9090D5D5F7F7", "E c #9393D7D7F7F7", "W c #9393D7D7F8F8", "Q c #9090D8D8FDFD", "! c #9393DADAFDFD", "~ c #9696D8D8F8F8", "^ c #9696D8D8F9F9", "/ c #9696DBDBFEFE", "( c #9999D9D9F9F9", ") c #9999DADAF9F9", "_ c #9B9BDBDBFAFA", "` c #9898DCDCFEFE", "' c #9A9ADDDDFEFE", "] c #9C9CDBDBFAFA", "[ c #9E9EDDDDFBFB", "{ c #9F9FDDDDFBFB", "} c #9E9EDDDDFCFC", "| c #A1A1DDDDFCFC", " . c #A4A4DFDFFCFC", ".. c #BFBFDADAE7E7", "X. c #A7A7E0E0FDFD", "o. c #A9A9E2E2FEFE", "O. c #ABABE2E2FEFE", "+. c #ABABE2E2FFFF", "@. c #ADADE3E3FEFE", "#. c #AEAEE4E4FEFE", "$. c #B0B0E4E4FFFF", "%. c #F6F6EEEEABAB", "&. c #F8F8F0F0B1B1", "*. c #F9F9F1F1B3B3", "=. c #FBFBF3F3B9B9", "-. c gray82", ";. c LightGray", ":. c #D5D5D5D5D5D5", ">. c #C2C2DCDCEBEB", ",. c #D2D2E6E6F2F2", "<. c #D4D4E8E8F2F2", "1. c #D5D5E9E9F3F3", "2. c #D6D6EAEAF4F4", "3. c #D8D8EAEAF3F3", "4. c #D8D8ECECF5F5", "5. c #DADAECECF6F6", "6. c #DADAEDEDF6F6", "7. c #DBDBEEEEF7F7", "8. c #DCDCEDEDF7F7", "9. c #DDDDEDEDF6F6", "0. c #DDDDEFEFF8F8", "q. c #DEDEF1F1F9F9", "w. c #DFDFF0F0F9F9", "e. c #DFDFF1F1FAFA", "r. c #E9E9E9E9E9E9", "t. c #E0E0F1F1FAFA", "y. c #E0E0F2F2FBFB", "u. c #E2E2F2F2FBFB", "i. c #E3E3F3F3FBFB", "p. c #E2E2F4F4FCFC", "a. c #E3E3F4F4FDFD", "s. c #E5E5F5F5FDFD", "d. c #E5E5F6F6FEFE", "f. c #E6E6F6F6FEFE", "g. c #E9E9F6F6FCFC", "h. c #EBEBF8F8FEFE", "j. c gray95", "k. c #F3F3F3F3F3F3", "l. c #F4F4F4F4F4F4", "z. c #F4F4F5F5F5F5", "x. c gray96", "c. c #F6F6F6F6F6F6", "v. c gray97", "b. c gray98", "n. c #FBFBFBFBFBFB", "m. c #FBFBFCFCFBFB", "M. c gray99", "N. c #FDFDFCFCFDFD", "B. c #FDFDFDFDFDFD", "V. c #FEFEFEFEFEFE", "C. c None", /* pixels */ "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "u y y y t e q 9 8 7 4 2 1 < > , ", "t $.$.#.@.+.+. . .| { ' ( ~ E - ", "q +.' / / ! ! T Y L H v l h I * ", ">.h.f.f.f.i.i.e.9.e.9.9.2.2.9.A ", "r.V.V.V.V.b.=.V B *.v.v.v.x.x.:.", "r.V.V.M.M.n.C n b B c.x.z.k.z.;.", "r.V.n.n.n.b.*.M m %.x.x.k.k.k.-.", "..g.a.a.0.0.0.0.2.2.2.2.2.,.2.Z ", "5 [ K J J c h g d s s p i w f o ", "3 [ [ ( ~ W W U I F D S x x f o ", "6 1 < > : ; - = % % $ # O O o O ", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C." }; springlobby-0.169/src/images/flags/AS.xpm0000600000176000000410000001022512105760300021600 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AS_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 163 2", " c black", ". c #030300000000", "X c #777700000303", "o c #7B7B62624F4F", "O c #000000009D9D", "+ c #00000000A1A1", "@ c #00000000DFDF", "# c #00000000E1E1", "$ c #00000000E3E3", "% c #00000000E7E7", "& c #00000000E9E9", "* c #00000000EBEB", "= c #00000000EDED", "- c #00000000EFEF", "; c #00000000F3F3", ": c #00000000F5F5", "> c #00000000F7F7", ", c #04040000F2F2", "< c #00000000F9F9", "1 c #00000000FBFB", "2 c #00000000FCFC", "3 c #00000000FDFD", "4 c #03030303FDFD", "5 c #0B0B0B0BFDFD", "6 c #0D0D0B0BFDFD", "7 c #0D0D0D0DFFFF", "8 c #11111111FFFF", "9 c #21212121FFFF", "0 c #65650000B6B6", "q c #73733939AFAF", "w c #40403D3DEDED", "e c #45454545F8F8", "r c #4C4C4C4CF9F9", "t c #56565050ECEC", "y c #57575757F7F7", "u c #53535353FAFA", "i c #5A5A5A5AF5F5", "p c #5A5A5A5AFBFB", "a c #5F5F5F5FF8F8", "s c #77775555CCCC", "d c #61616161FCFC", "f c #65656565F9F9", "g c #6F6F6A6AF6F6", "h c #6C6C6C6CF9F9", "j c #6F6F6F6FFDFD", "k c #74747474FAFA", "l c #74747474FEFE", "z c #75757474FEFE", "x c #79797979FEFE", "c c #7C7C7C7CFBFB", "v c #7D7D7D7DFEFE", "b c #818100000000", "n c #9B9B00000000", "m c #BBBB00000000", "M c #8E8E4D4D3232", "N c #989850502A2A", "B c #B9B940406565", "V c #A0A064644040", "C c #B1B17B7B5050", "Z c #C1C100000000", "A c #D7D745453C3C", "S c #DBDB4E4E4242", "D c #DFDF5D5D5151", "F c #D0D05A5A7373", "G c #DEDE60605F5F", "H c #D4D46C6C7D7D", "J c #E0E05C5C5151", "K c #E4E46C6C6666", "L c #E7E772726868", "P c #E5E578786D6D", "I c #E6E677777070", "U c #E9E97F7F7979", "Y c #EAEA7E7E7B7B", "T c #BBBB57578686", "R c #A0A05353B0B0", "E c #A1A16A6AB6B6", "W c #BABA7373AEAE", "Q c #95957272CFCF", "! c #CDCD75759292", "~ c #C4C47D7DAAAA", "^ c #E0E07B7B8181", "/ c #B5B583835A5A", "( c #B5B58D8D6F6F", ") c #BCBC9B9B7878", "_ c #BFBFA6A67272", "` c #C4C4A0A07979", "' c #C5C5A2A27E7E", "] c #E5E58B8B7777", "[ c #EAEA81817B7B", "{ c #ECEC84847A7A", "} c #E9E9CBCB4B4B", "| c #EAEACECE5151", " . c #E9E9D3D36666", ".. c #EDEDDCDC7F7F", "X. c #88888A8A8C8C", "o. c #9E9E9A9A9898", "O. c #9D9D9D9D9D9D", "+. c #A2A28C8C8181", "@. c #A0A0A0A09999", "#. c #A0A0A0A09E9E", "$. c #BDBDA0A08686", "%. c #A2A2A2A2A2A2", "&. c #A5A5A5A5A5A5", "*. c #83838484FCFC", "=. c #8A8A8A8AFDFD", "-. c #9A9A8686E9E9", ";. c #91919191FDFD", ":. c #95959595FDFD", ">. c #97979797FDFD", ",. c #9B9B9191F0F0", "<. c #9A9A9A9AFDFD", "1. c #9E9E9E9EFDFD", "2. c #A1A1A1A1FEFE", "3. c #A4A4A4A4FEFE", "4. c #A7A7A6A6FEFE", "5. c #A7A7A7A7FEFE", "6. c #A8A8A8A8FFFF", "7. c #A8A8A9A9FFFF", "8. c #A9A9A9A9FFFF", "9. c #B1B1A4A4F0F0", "0. c #C6C69191BCBC", "q. c #C3C3A7A78E8E", "w. c #CECEB0B09595", "e. c #D2D2B5B59E9E", "r. c #E5E580808080", "t. c #E8E88C8C8080", "y. c #EBEB8C8C8181", "u. c #E7E793939797", "i. c #E9E993939191", "p. c #EEEE96969494", "a. c #F2F2A1A19A9A", "s. c #F1F1ABAB9F9F", "d. c #ECECB8B8B0B0", "f. c #F3F3AFAFA7A7", "g. c #F3F3AAAAA8A8", "h. c #F4F4BBBBB2B2", "j. c #EEEED9D98080", "k. c #F0F0DEDE9393", "l. c #F0F0E4E4AFAF", "z. c #EDEDD6D6C5C5", "x. c #E3E3DADAD3D3", "c. c #F3F3C9C9C2C2", "v. c #F8F8CFCFC7C7", "b. c #F0F0D6D6CECE", "n. c #E4E4E4E4C5C5", "m. c #EAEAE0E0C2C2", "M. c #E9E9E8E8C9C9", "N. c #E8E8E9E9CFCF", "B. c #F0F0E8E8C2C2", "V. c #F9F9E4E4DCDC", "C. c #E4E4E0E0E2E2", "Z. c #F8F8F1F1E9E9", "A. c #F4F4F4F4F0F0", "S. c #F4F4F4F4F4F4", "D. c #F6F6F6F6F6F6", "F. c gray97", "G. c #FAFAF1F1F0F0", "H. c #F8F8F6F6F6F6", "J. c #F8F8F8F8F8F8", "K. c #F9F9F9F9F9F9", "L. c gray98", "P. c #FBFBFBFBFBFB", "I. c None", /* pixels */ "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.", "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.", "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.", "9 8 8 8 7 1 1 1 1 1 1 : O X m Z ", "7 8.8.8.4.2.1.<.:.,.0.u.i.g.v.+.", "8 8.v x l j g E H K U h.z.q.) o ", "8 4.x z Q ! P U f.Z.L.w.C M $.o.", "6 9.~ ^ [ a.V.L.L.J.e./ ( N ` X.", "0 p.{ f.Z.P.P.P.J...A.N.C.V ' O.", "- -.W ^ L ] c.Z.D.D.l.j.M._ x.&.", "1 <.d i s T K J t.b.S. .| } k.O.", "1 ;.p u r r 9 q B A S ] m.n.B.%.", "1 =.*.c z h f a p t R F J P d.@.", ": : : * * * & $ $ @ @ @ + . b n ", "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.", "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I." }; springlobby-0.169/src/images/flags/AT.xpm0000600000176000000410000000655512105760300021614 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AT_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 128 2", " c black", ". c #DDDD00000000", "X c #DFDF00000000", "o c #E1E100000000", "O c #E3E300000000", "+ c #E5E500000000", "@ c #E7E700000000", "# c #E9E900000000", "$ c #EBEB00000000", "% c #EDED00000000", "& c #EFEF00000000", "* c #F1F100000000", "= c #F3F300000000", "- c #F5F500000000", "; c #F7F700000000", ": c #F1F10B0B0B0B", "> c #F1F10F0F0E0E", ", c #F9F900000000", "< c #FBFB00000000", "1 c #FDFD00000000", "2 c red", "3 c #F2F213131313", "4 c #F3F319191919", "5 c #F4F41E1E1E1E", "6 c #F5F523232323", "7 c #F2F22C2C2C2C", "8 c #F2F22F2F2F2F", "9 c #F6F629292929", "0 c #F6F62C2C2C2C", "q c #F7F72E2E2E2E", "w c #FBFB2F2F2F2F", "e c #F2F232323232", "r c #F3F335353535", "t c #F7F731313131", "y c #F4F439393939", "u c #F5F53D3D3D3D", "i c #F8F834343434", "p c #F8F837373737", "a c #FFFF35353535", "s c #F9F93A3A3A3A", "d c #F9F93C3C3D3D", "f c #FAFA3F3F3F3F", "g c #F6F642424242", "h c #F7F746464646", "j c #F7F749494949", "k c #F7F74B4B4B4B", "l c #F7F74E4E4E4E", "z c #FAFA42424242", "x c #FAFA44444444", "c c #FBFB47474747", "v c #FCFC4C4C4C4C", "b c #F8F850505050", "n c #F8F853535353", "m c #F9F954545555", "M c #F9F957575757", "N c #FDFD51515151", "B c #FDFD54545454", "V c #F9F958585858", "C c #FAFA5C5C5C5C", "Z c #FAFA5D5D5D5D", "A c #FEFE59595959", "S c #FEFE5C5C5C5C", "D c #FEFE5F5F5F5F", "F c #F2F263636363", "G c #F2F266666666", "H c #F0F068686868", "J c #F3F36A6A6A6A", "K c #F4F46E6E6E6E", "L c #F6F66E6E6E6E", "P c #FBFB60606060", "I c #FBFB61616262", "U c #FCFC65656565", "Y c #FCFC66666666", "T c #FCFC69696969", "R c #FDFD6D6D6D6D", "E c #F5F571717171", "W c #F7F772727272", "Q c #F6F675757575", "! c #F3F37A7A7A7A", "~ c #F7F778787979", "^ c #F6F67F7F7F7F", "/ c #F8F876767676", "( c #FDFD70707171", ") c #FEFE74747474", "_ c #FEFE77777777", "` c #F9F97A7A7A7A", "' c #F8F87C7C7C7C", "] c #FAFA7D7D7D7D", "[ c #FEFE79797979", "{ c #FFFF7B7B7A7A", "} c #FFFF7B7B7B7B", "| c #F9F980808080", " . c #FBFB81818181", ".. c #FAFA84848484", "X. c #FCFC85858585", "o. c #FBFB88888888", "O. c #FBFB8B8B8B8B", "+. c #FDFD88888888", "@. c #FDFD8B8B8B8B", "#. c #FEFE8F8F8F8F", "$. c #FEFE90909191", "%. c #FCFCA0A0A0A0", "&. c #FEFEA4A4A4A4", "*. c #DFDFDFDFDFDF", "=. c #E1E1E1E1E1E1", "-. c #E2E2E2E2E2E2", ";. c gray91", ":. c #E9E9E9E9E9E9", ">. c #EAEAEAEAEAEA", ",. c #EEEEEEEEEEEE", "<. c #EFEFEFEFEFEF", "1. c gray94", "2. c #F1F1F1F1F1F1", "3. c #F4F4F4F4F4F4", "4. c #F4F4F5F5F5F5", "5. c gray96", "6. c #F6F6F6F6F6F6", "7. c gray97", "8. c #F8F8F8F8F8F8", "9. c #F9F9F9F9F9F9", "0. c gray98", "q. c #FBFBFBFBFBFB", "w. c #FBFBFCFCFBFB", "e. c gray99", "r. c #FDFDFCFCFDFD", "t. c #FDFDFDFDFDFD", "y. c #FEFEFEFEFEFE", "u. c None", /* pixels */ "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "2 2 2 2 < 2 2 2 < < ; ; = = % % ", "2 } } } ) ) ( R T U D C M n l $ ", "2 } D S S B N v c z u s t 0 j $ ", "a &.$.#.o.o.X. .] ` / W L H ^ + ", ":.y.y.y.y.q.q.q.8.8.5.2.2.:.5.-.", ";.y.y.y.y.8.8.8.8.8.5.2.<.:.5.-.", ":.y.q.y.q.y.8.8.6.6.5.2.<.;.2.*.", "w $.o.o...| ^ ~ / E L H G F ! X ", "< R c u s i 0 9 6 5 4 3 > : 8 X ", "; U Z V M l k h g u y r e 8 8 X ", "= = = % % % % $ $ + o o X X . . ", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u." }; springlobby-0.169/src/images/flags/AU.xpm0000600000176000000410000001042112105760300021600 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AU_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 168 2", " c black", ". c #000000000303", "X c #000000000505", "o c #000000000D0D", "O c #000000000F0F", "+ c #000000001313", "@ c #000000001717", "# c #000000001919", "$ c #000000001B1B", "% c #000000001F1F", "& c #000000002525", "* c #000000002929", "= c #000000002D2D", "- c #000000002F2F", "; c #000000003535", ": c #000000003737", "> c #000000003939", ", c #000000003B3B", "< c #000000003F3F", "1 c #000000004141", "2 c #000000004949", "3 c #000000004D4D", "4 c #000000005151", "5 c #000000005353", "6 c #000000005959", "7 c #000000005B5B", "8 c #000000005F5F", "9 c #000000006363", "0 c #00000B0B7373", "q c #75753D3D6969", "w c #6B6B45457575", "e c #000023238787", "r c #000037379595", "t c #1B1B3B3B8787", "y c #20203F3F8B8B", "u c #252541418383", "i c #222240408A8A", "p c #282847478F8F", "a c #292946468F8F", "s c #30304D4D9393", "d c #30304D4D9494", "f c #31314D4D9494", "g c #31314E4E9494", "h c #323250509595", "j c #353551519696", "k c #353551519797", "l c #353552529797", "z c #363652529797", "x c #383854549999", "c c #3A3A56569999", "v c #3B3B56569A9A", "b c #3C3C57579898", "n c #3D3D59599B9B", "m c #3E3E5A5A9C9C", "M c #4B4B4D4D8D8D", "N c #404059599A9A", "B c #40405B5B9D9D", "V c #43435C5C9B9B", "C c #40405C5C9E9E", "Z c #43435D5D9D9D", "A c #44445E5E9D9D", "S c #45455F5F9E9E", "D c #47475E5E9E9E", "F c #40405D5DA0A0", "G c #44445F5FA0A0", "H c #484861619F9F", "J c #494963639F9F", "K c #48486262A2A2", "L c #49496262A2A2", "P c #4A4A6363A1A1", "I c #4A4A6363A2A2", "U c #4C4C6565A3A3", "Y c #4F4F6A6AA8A8", "T c #4C4C6C6CABAB", "R c #4C4C6C6CACAC", "E c #50506868A5A5", "W c #50506969A4A4", "Q c #53536A6AA6A6", "! c #57576A6AA6A6", "~ c #55556E6EA8A8", "^ c #57576F6FAAAA", "/ c #5F5F6E6EA7A7", "( c #52527171AEAE", ") c #58587070ABAB", "_ c #5A5A7171A9A9", "` c #5A5A7272A9A9", "' c #5B5B7272AAAA", "] c #5D5D7474ACAC", "[ c #5D5D7474ADAD", "{ c #5A5A7A7AB6B6", "} c #66667B7BB1B1", "| c #69697E7EB3B3", " . c #69697F7FB3B3", ".. c #6D6D8181B3B3", "X. c #6F6F8484B6B6", "o. c #70708686B8B8", "O. c #71718686B8B8", "+. c #72728585B8B8", "@. c #75758989BABA", "#. c #77778A8ABBBB", "$. c #77778E8EBDBD", "%. c #7F7F8989B7B7", "&. c #8D8D27274343", "*. c #8F8F35355555", "=. c #919125254141", "-. c #CDCD09090909", ";. c #D6D666666A6A", ":. c #E2E265656464", ">. c #E4E46C6C6B6B", ",. c #E0E06F6F7070", "<. c #E7E771716F6F", "1. c #E9E97A7A7979", "2. c #8A8A74749B9B", "3. c #8C8C78789E9E", "4. c #87877F7FA7A7", "5. c #B7B771718787", "6. c #C7C777778383", "7. c #E1E17F7F8080", "8. c #9A9A8989A9A9", "9. c #94949595BBBB", "0. c #B3B382829898", "q. c #A4A49090ACAC", "w. c #8D8D9B9BC1C1", "e. c #8F8F9E9EC2C2", "r. c #90909E9EC2C2", "t. c #9494A3A3C5C5", "y. c #9797A4A4C5C5", "u. c #9494A4A4C8C8", "i. c #9A9AA8A8CBCB", "p. c #9A9AA9A9CACA", "a. c #9D9DABABCCCC", "s. c #9F9FB9B9DBDB", "d. c #A1A1A2A2C2C2", "f. c #A5A5B2B2CFCF", "g. c #A4A4B0B0D0D0", "h. c #A6A6B3B3D0D0", "j. c #A9A9B5B5D4D4", "k. c #ACACB6B6D2D2", "l. c #AEAEB8B8D3D3", "z. c #B2B2BBBBD4D4", "x. c #B3B3BCBCD4D4", "c. c #B6B6BFBFD4D4", "v. c #BABAC2C2D9D9", "b. c #BABAC4C4DADA", "n. c #CACA87879494", "m. c #C8C88B8B9797", "M. c #DBDB8C8C9191", "N. c #DCDCA4A4AAAA", "B. c #DDDDACACB3B3", "V. c #DEDEB8B8BEBE", "C. c #E2E282828484", "Z. c #E6E68E8E8F8F", "A. c #E8E8B9B9BEBE", "S. c #F1F1A4A4A2A2", "D. c #F1F1A7A7A5A5", "F. c #C3C3CACADDDD", "G. c #DDDDC3C3CCCC", "H. c #C4C4CCCCE0E0", "J. c #C8C8D0D0E1E1", "K. c #C9C9D0D0E2E2", "L. c #DBDBE0E0EBEB", "P. c #EAEAC6C6C9C9", "I. c #E8E8CCCCD1D1", "U. c #EDEDD8D8DCDC", "Y. c #E5E5DDDDE6E6", "T. c #E0E0E2E2EAEA", "R. c #E7E7E9E9F0F0", "E. c None", /* pixels */ "E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.", "E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.", "E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.", "6.4.r &.=.e q 5.0 9 8 7 J 4 < > ", "M P.Y.B.N.G.U.j.@.+. .H.J.h.] > ", "-.Z.1.>.:.<.,.;./ Y L } k.k ~ > ", "*.A.S.7.C.D.M.0.! a.L m k l...= ", "%.I.d.m.n.s.V.q.i.v.b.k w.x.z.& ", "w 9.{ 3.2.R +.8.D f.` g L r.J & ", "9 $.[ ( Y Y K F C x h s t.s D % ", "9 @.) h.H.U G B x k g p y i V $ ", "7 +.) L.R.i.m b k g p D y.t m @ ", "4 X. .t.F.` ` W W U D c.T.r.b + ", "3 2 < < : = * & % $ + O u ", "E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.", "E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E." }; springlobby-0.169/src/images/flags/AW.xpm0000600000176000000410000001052312105760300021605 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AW_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 171 2", " c black", ". c #00001F1F8585", "X c #000023239191", "o c #000025259393", "O c #000029299595", "+ c #00002D2D9595", "@ c #00002D2D9797", "# c #000033338F8F", "$ c #000031319999", "% c #000037379D9D", "& c #000039399191", "* c #00003F3F9393", "= c #00003B3BA1A1", "- c #00003F3FA3A3", "; c #000045459797", ": c #00004B4B9B9B", "> c #00004D4D9D9D", ", c #00004545A7A7", "< c #00004B4BABAB", "1 c #00005151ADAD", "2 c #00005D5DA7A7", "3 c #00005555B1B1", "4 c #00005B5BB5B5", "5 c #00006161A9A9", "6 c #00006363ABAB", "7 c #00006767AFAF", "8 c #00006161B7B7", "9 c #00006D6DB1B1", "0 c #00006D6DB5B5", "q c #00006F6FBFBF", "w c #00007171B3B3", "e c #00007575B7B7", "r c #00007979B9B9", "t c #00007D7DBDBD", "y c #00007D7DBFBF", "u c #05058181BDBD", "i c #07078181C1C1", "p c #0B0B8383C1C1", "a c #0D0D8787C1C1", "s c #0F0F8787C3C3", "d c #0F0F8989C3C3", "f c #0F0F8B8BC5C5", "g c #11118989C5C5", "h c #15158B8BC5C5", "j c #19199191C9C9", "k c #1D1D9191C9C9", "l c #21219191C7C7", "z c #36369494C4C4", "x c #3A3A9696C6C6", "c c #3E3E9898C7C7", "v c #3F3F9999C8C8", "b c #43439B9BC9C9", "n c #44449B9BC9C9", "m c #45459B9BC9C9", "M c #47479E9ECBCB", "N c #48489E9ECBCB", "B c #49499E9ECBCB", "V c #4B4B9F9FCACA", "C c #4C4CA1A1CDCD", "Z c #4D4DA1A1CDCD", "A c #4E4EA1A1CCCC", "S c #4F4FA2A2CCCC", "D c #5050A2A2CCCC", "F c #5151A3A3CFCF", "G c #5151A4A4CFCF", "H c #5353A4A4CECE", "J c #5555A3A3CCCC", "K c #5454A5A5CECE", "L c #5555A6A6CECE", "P c #5B5BA7A7CFCF", "I c #5858A8A8CFCF", "U c #5454A6A6D1D1", "Y c #5656A7A7D1D1", "T c #5757A7A7D0D0", "R c #5959A8A8D0D0", "E c #5959A9A9D0D0", "W c #5959A9A9D3D3", "Q c #5B5BAAAAD3D3", "! c #5C5CAAAAD2D2", "~ c #5F5FA9A9D0D0", "^ c #5E5EABABD1D1", "/ c #5E5EABABD2D2", "( c #5E5EABABD4D4", ") c #6262AEAED3D3", "_ c #6060ACACD4D4", "` c #6161ADADD4D4", "' c #6363AEAED4D4", "] c #6262AEAED6D6", "[ c #6363AFAFD6D6", "{ c #6464ADADD2D2", "} c #6464AFAFD6D6", "| c #6868AFAFD3D3", " . c #6666B0B0D5D5", ".. c #6767B0B0D5D5", "X. c #6767B1B1D5D5", "o. c #6767B1B1D8D8", "O. c #6969B2B2D7D7", "+. c #6A6AB3B3D7D7", "@. c #6B6BB3B3D7D7", "#. c #6C6CB2B2D5D5", "$. c #6868B1B1D8D8", "%. c #6D6DB4B4D9D9", "&. c #6C6CB4B4DADA", "*. c #6E6EB5B5D8D8", "=. c #6E6EB6B6D8D8", "-. c #6F6FB6B6D8D8", ";. c #7070B4B4D7D7", ":. c #7070B6B6DBDB", ">. c #7171B6B6DBDB", ",. c #7272B7B7DADA", "<. c #7373B7B7DADA", "1. c #7575B7B7D8D8", "2. c #7676BABADBDB", "3. c #7474B9B9DCDC", "4. c #7575BABADCDC", "5. c #7676BABADCDC", "6. c #7979B9B9D9D9", "7. c #7C7CBBBBDBDB", "8. c #7E7EBBBBDADA", "9. c #7D7DBFBFDFDF", "0. c #7B7BBFBFE0E0", "q. c #E2E26D6D6D6D", "w. c #E3E371717171", "e. c #DDDDAFAF0000", "r. c #DFDFB3B30000", "t. c #F7F7D5D50000", "y. c #FBFBDBDB0000", "u. c #F2F2DBDB2727", "i. c #F2F2DCDC2C2C", "p. c #F3F3DEDE2F2F", "a. c #F4F4DFDF3434", "s. c #F5F5E1E13939", "d. c #F6F6E2E23E3E", "f. c #F2F2DDDD4040", "g. c #F2F2DFDF4242", "h. c #F2F2DFDF4646", "j. c #F3F3DFDF4646", "k. c #F7F7E3E34343", "l. c #F3F3E1E14949", "z. c #F4F4E2E24B4B", "x. c #F8F8E5E54848", "c. c #F9F9E6E64D4D", "v. c #F5F5E3E35050", "b. c #F6F6E3E35454", "n. c #F7F7E5E55858", "m. c #F7F7E6E65C5C", "M. c #FAFAE8E85252", "N. c #FBFBE9E95757", "B. c #FBFBEAEA5C5C", "V. c #F8F8E8E86161", "C. c #F9F9E9E96565", "Z. c #F9F9EAEA6969", "A. c #FAFAEBEB6E6E", "S. c #FBFBEDED7272", "D. c #FCFCEEEE7A7A", "F. c #8080BEBEDDDD", "G. c #8383BFBFDFDF", "H. c #8484C0C0DDDD", "J. c #8787C2C2DFDF", "K. c #9D9DC4C4DDDD", "L. c #9F9FC4C4DCDC", "P. c #8A8AC3C3E0E0", "I. c #8A8AC3C3E2E2", "U. c #8D8DC5C5E2E2", "Y. c #8E8EC6C6E2E2", "T. c #8F8FC7C7E2E2", "R. c #9191C8C8E3E3", "E. c #9191C8C8E4E4", "W. c #9999C8C8E1E1", "Q. c #E8E889898989", "!. c None", /* pixels */ "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "l h j g d p u t r e w 9 9 5 2 5 ", "d L.Q.W.E.T.U.P.J.H.F.7.6.1.;.> ", "k Q.w.q.0.3.<.-.@. .' ^ R K #.: ", "f L.q.8.3.<.-.+. .' ^ T K D | ; ", "a R.9.3.<.-.+. .) ^ P K S V { * ", "i E.3.&.-.+.' ' ^ Y F S M m ^ & ", "y U.&.&.o.[ ( ^ Y F S M b c P # ", "y.D.B.N.M.c.z.k.d.s.a.p.i.u.j.r.", "0 G.o.' ( W U U S M b c x z J . ", "t.S.S.Z.C.V.m.n.b.v.l.l.j.g.g.e.", "q 4 4 3 1 < , - = % $ @ O o X O ", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!." }; springlobby-0.169/src/images/flags/AX.xpm0000600000176000000410000001062512105760300021611 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AX_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 174 2", " c black", ". c #000000004747", "X c #000000004B4B", "o c #000000004D4D", "O c #000000004F4F", "+ c #000000005555", "@ c #000000005B5B", "# c #000000006161", "$ c #000000006565", "% c #000000006767", "& c #000000006969", "* c #000000007575", "= c #000000007B7B", "- c #000007078989", "; c #000009098787", ": c #00000B0B8989", "> c #000011118F8F", ", c #000017178F8F", "< c #000021219595", "1 c #00002B2B9B9B", "2 c #000033339F9F", "3 c #00003333A1A1", "4 c #00003535A1A1", "5 c #00003D3DA5A5", "6 c #00004343ABAB", "7 c #00004545AFAF", "8 c #01014B4BA5A5", "9 c #0B0B5353A9A9", "0 c #1A1A5959ABAB", "q c #1F1F6363BBBB", "w c #1D1D6161BDBD", "e c #1F1F6161BDBD", "r c #1F1F6363BDBD", "t c #21215D5DAEAE", "y c #25256060ABAB", "u c #2C2C6565AEAE", "i c #23236565B7B7", "p c #27276262B1B1", "a c #25256969BBBB", "s c #27276969BDBD", "d c #2D2D6767B4B4", "f c #32326A6AB1B1", "g c #37376F6FB0B0", "h c #35356D6DB7B7", "j c #39396F6FB5B5", "k c #3B3B6D6DBFBF", "l c #3B3B7272B3B3", "z c #3B3B7070B7B7", "x c #3F3F7575B4B4", "c c #44447575B6B6", "v c #41417575B9B9", "b c #46467979B7B7", "n c #45457A7AB8B8", "m c #47477A7ABCBC", "M c #48487A7ABDBD", "N c #4A4A7E7EBABA", "B c #4C4C7F7FBBBB", "V c #48487B7BC0C0", "C c #4C4C7E7EC1C1", "Z c #4F4F8181BDBD", "A c #53538484BFBF", "S c #4F4F8181C3C3", "D c #55558383C3C3", "F c #56568686C7C7", "G c #5B5B8A8AC2C2", "H c #5E5E8A8AC0C0", "J c #5F5F8A8AC3C3", "K c #5E5E8B8BCACA", "L c #5E5E8C8CC8C8", "P c #5F5F8F8FCBCB", "I c #62628F8FC5C5", "U c #65659393C8C8", "Y c #64649191CDCD", "T c #67679292CFCF", "R c #68689292C9C9", "E c #6C6C9898CBCB", "W c #6F6F9898C9C9", "Q c #6A6A9292D3D3", "! c #75759B9BC7C7", "~ c #72729C9CCDCD", "^ c #74749C9CCCCC", "/ c #74749D9DCFCF", "( c #78789F9FCDCD", ") c #7878A0A0D0D0", "_ c #7979A1A1D3D3", "` c #7E7EA5A5D3D3", "' c #7F7FA5A5D3D3", "] c #D3D300000000", "[ c #E1E100000000", "{ c #FDFD13130909", "} c #FDFD1D1D0F0F", "| c #ECEC2C2C2525", " . c #EEEE34342C2C", ".. c #EFEF3B3B3333", "X. c #CBCB59590000", "o. c #CFCF6B6B0000", "O. c #DDDD6F6F0000", "+. c #F1F143433C3C", "@. c #EDED4A4A4242", "#. c #F3F349494343", "$. c #F4F451514A4A", "%. c #F4F453534848", "&. c #F5F55A5A5050", "*. c #F6F658585252", "=. c #F7F75C5C5959", "-. c #F7F75D5D5959", ";. c #F4F468685F5F", ":. c #F9F960606060", ">. c #FAFA6A6A6666", ",. c #FAFA6C6C6868", "<. c #FBFB73736E6E", "1. c #FBFB77776F6F", "2. c #FCFC78787373", "3. c #FCFC7D7D7575", "4. c #CFCF8D8D0000", "5. c #FBFBAFAF1515", "6. c #F7F7B1B11111", "7. c #E8E8AFAF3131", "8. c #EAEAB2B23737", "9. c #ECECB6B63F3F", "0. c #F9F9BBBB2323", "q. c #EAEAB9B94040", "w. c #EDEDBABA4545", "e. c #EBEBBABA4D4D", "r. c #EDEDBCBC4848", "t. c #F0F0BDBD4C4C", "y. c #F2F2BCBC5151", "u. c #F6F6BABA6060", "i. c #EFEFC1C12D2D", "p. c #EFEFC0C04E4E", "a. c #EDEDC1C15A5A", "s. c #F0F0C3C35555", "d. c #F2F2C0C05454", "f. c #F3F3C6C65A5A", "g. c #F2F2C6C65C5C", "h. c #F4F4C2C25959", "j. c #EBEBCBCB6666", "k. c #EDEDD1D17979", "l. c #F2F2C3C36767", "z. c #F3F3C9C96363", "x. c #F6F6CFCF6A6A", "c. c #F9F9C4C46F6F", "v. c #F9F9CBCB6E6E", "b. c #FAFACECE7676", "n. c #F0F0D2D26B6B", "m. c #F8F8D0D07474", "M. c #FAFAD2D27B7B", "N. c #FBFBD3D37B7B", "B. c #FBFBD0D07C7C", "V. c #8383A9A9D5D5", "C. c #8686AAAAD5D5", "Z. c #8484A9A9D8D8", "A. c #8686ABABDADA", "S. c #8888AAAADADA", "D. c #8989ACACD8D8", "F. c #8989ACACDDDD", "G. c #8F8FB0B0D8D8", "H. c #9393B3B3D7D7", "J. c #9F9FBCBCDFDF", "K. c #9C9CBABAE2E2", "L. c #9E9EBCBCE2E2", "P. c #9E9EBCBCE3E3", "I. c #9E9EBDBDE2E2", "U. c #FCFC92928E8E", "Y. c #FDFD96968F8F", "T. c #F5F5DCDC8585", "R. c #F5F5DBDB8B8B", "E. c #FBFBD8D88181", "W. c #FBFBD9D98787", "Q. c #FCFCDBDB9494", "!. c #FCFCDADA9696", "~. c #FCFCE1E19D9D", "^. c #F7F7E2E2A2A2", "/. c None", /* pixels */ "/./././././././././././././././.", "/./././././././././././././././.", "/./././././././././././././././.", "s i w w i.} 5.9 6 5 3 1 < , : ; ", "s P.P.K.^.Y.!.H.A.V.` ) ~ E U = ", "w P.F.A.R.3.N./ Q Y L F D V L * ", "i J.D.C.T.1.b.! U I H D N b H $ ", "0.~.W.E.N.,.c.x.z.g.s.p.r.q.a.o.", "{ U.2.1.>.:.=.*.$.#.+... .| @.] ", "6.!.M.m.v.=.u.f.y.t.w.q.8.7.e.X.", "8 G.^ W n.*.h.C M v z f u y c O ", "7 V.T P j.%.y.m k h d p t 0 j O ", "4 ` _ ~ k.;.l.J D Z N n c l g . ", "2 < > : 4.[ O.$ & # @ + O X . O ", "/./././././././././././././././.", "/./././././././././././././././." }; springlobby-0.169/src/images/flags/AZ.xpm0000600000176000000410000001047512105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char *AZ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 170 2", " c black", ". c #000027270000", "X c #000029290000", "o c #00002D2D0000", "O c #00002F2F0000", "+ c #000033330000", "@ c #000035350000", "# c #000039390000", "$ c #00003D3D0000", "% c #000041410000", "& c #000047470000", "* c #00004D4D0000", "= c #000051510000", "- c #000057570000", "; c #00005D5D0000", ": c #000063630000", "> c #000067670000", ", c #00006F6F0000", "< c #000075750000", "1 c #00007D7D0000", "2 c #00004D4D9D9D", "3 c #00005353A9A9", "4 c #00005D5DA7A7", "5 c #00006161A9A9", "6 c #00006363ABAB", "7 c #00006767AFAF", "8 c #00006D6DB1B1", "9 c #00007171B3B3", "0 c #00007575B7B7", "q c #00007979B9B9", "w c #00007D7DBDBD", "e c #0B0B9A9A3939", "r c #0F0F9C9C3C3C", "t c #13139F9F4040", "y c #1818A1A14545", "u c #1E1EA3A34949", "i c #2323A5A54D4D", "p c #2929A5A55050", "a c #2C2CA2A25353", "s c #2F2FA4A45555", "d c #2F2FA9A95656", "f c #2E2EABAB5555", "g c #3232A5A55858", "h c #3535A8A85B5B", "j c #3434AEAE5B5B", "k c #3939A9A95F5F", "l c #3D3DACAC6262", "z c #3A3AB1B16060", "x c #3F3FB3B36464", "c c #4242AEAE6565", "v c #4646B0B06969", "b c #4444B6B66969", "n c #4B4BB2B26D6D", "m c #5050B4B47171", "M c #5454B7B77575", "N c #5858B9B97979", "B c #5D5DBCBC7D7D", "V c #00008181BDBD", "C c #00008383C1C1", "Z c #00008585C3C3", "A c #00008787C3C3", "S c #00008989C3C3", "D c #00008F8FCDCD", "F c #00009191C7C7", "G c #2C2CAAAAD4D4", "H c #3131ADADD6D6", "J c #3737AFAFD8D8", "K c #3D3DB2B2DADA", "L c #6161BEBE8080", "P c #4242B4B4DBDB", "I c #4747B6B6DCDC", "U c #4E4EB4B4D7D7", "Y c #4949B5B5DADA", "T c #4C4CB7B7DCDC", "R c #5353B7B7D8D8", "E c #5151BABADFDF", "W c #5858B9B9D9D9", "Q c #5C5CBBBBDBDB", "! c #5454BDBDE0E0", "~ c #5959BFBFE2E2", "^ c #6161BEBEDDDD", "/ c #6666C3C38484", "( c #5C5CC0C0E3E3", ") c #5F5FC2C2E3E3", "_ c #6565C0C0DDDD", "` c #6969C2C2DFDF", "' c #6D6DC3C3E0E0", "] c #7070C5C5E2E2", "[ c #7474C7C7E2E2", "{ c #7777C8C8E3E3", "} c #7979C9C9E4E4", "| c #7B7BCACAE4E4", " . c #7B7BCDCDE8E8", ".. c #878700000000", "X. c #939300000000", "o. c #959500000000", "O. c #979700000000", "+. c #999900000000", "@. c #BBBB00000000", "#. c #C1C100000000", "$. c #C3C301010101", "%. c #C3C303030303", "&. c #C7C73C3C3C3C", "*. c #CBCB3E3E4141", "=. c #C9C940404040", "-. c #CACA44444444", ";. c #CACA45454545", ":. c #CDCD43434545", ">. c #CFCF47474A4A", ",. c #CCCC49494949", "<. c #CDCD49494848", "1. c #CFCF4D4D4D4D", "2. c #CECE4E4E4E4E", "3. c #CFCF4F4F4F4F", "4. c #CECE58585858", "5. c #D1D152525151", "6. c #D0D052525252", "7. c #D0D053535353", "8. c #D2D255555656", "9. c #D2D258585858", "0. c #D3D35B5B5B5B", "q. c #D2D25A5A5C5C", "w. c #D4D45D5D5D5D", "e. c #D5D55F5F5F5F", "r. c #D9D95D5D6060", "t. c #D2D260606060", "y. c #D4D462626161", "u. c #D6D661616161", "i. c #D7D763636363", "p. c #D5D567676767", "a. c #D7D766666666", "s. c #D7D768686868", "d. c #DBDB67676969", "f. c #D9D968686767", "g. c #D9D968686868", "h. c #D9D96A6A6A6A", "j. c #DADA6C6C6C6C", "k. c #DBDB6E6E6E6E", "l. c #DCDC6B6B6D6D", "z. c #DDDD6F6F7171", "x. c #D9D972727474", "c. c #DCDC71717171", "v. c #DDDD70707070", "b. c #DCDC72727272", "n. c #DDDD75757474", "m. c #DDDD75757575", "M. c #DEDE76767676", "N. c #DFDF78787777", "B. c #DBDB7D7D7C7C", "V. c #DEDE79797979", "C. c #DEDE79797A7A", "Z. c #DFDF7B7B7C7C", "A. c #E1E187878787", "S. c #E0E089898A8A", "D. c #E3E38E8E8F8F", "F. c #E4E48A8A8B8B", "G. c #E5E58F8F8F8F", "H. c #E5E593939393", "J. c #E5E59B9B9C9C", "K. c #E4E4AAAAAAAA", "L. c #E9E9B5B5B6B6", "P. c #EAEABABAB9B9", "I. c #EDEDBFBFC1C1", "U. c #EFEFC2C2C1C1", "Y. c #EFEFCDCDCDCD", "T. c #F0F0CECECECE", "R. c #F1F1D8D8D9D9", "E. c #F4F4DCDCDCDC", "W. c #F4F4E2E2E2E2", "Q. c None", /* pixels */ "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", "F S S S S Z V w q 0 9 8 8 5 4 5 ", "Z | | | { [ ' ` ' ^ ^ Q W R U 2 ", "D .( ( ( E E T I P K J H G U 3 ", "$.H.C.C.M.b.v.h.a.y.w.9.7.3.p.+.", "$.H.N.n.v.f.U.E.J.P.B.5.1.,.y.+.", "$.D.n.c.j.S.W.s.T.R.K.2.,.;.r.X.", "$.F.z.l.d.r.I.T.C.L.x.>.:.*.4.X.", "@.A.j.h.y.r.0.8.5.2.,.-.-.&.4...", "1 / b x z j f p i u y t r e d # ", ", B B N M m n v c l k h g s a . ", "< > > ; - = * & % $ # + O O X + ", "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q." }; springlobby-0.169/src/images/flags/BA.xpm0000600000176000000410000001003712105760300021560 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BA_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 157 2", " c black", ". c #555553535353", "X c #797978787878", "o c #000000008F8F", "O c #000000009191", "+ c #000000009393", "@ c #000000009797", "# c #000000009999", "$ c #000000009B9B", "% c #000000009D9D", "& c #000000009F9F", "* c #00000000A1A1", "= c #00000000A3A3", "- c #00000000A5A5", "; c #00000000A9A9", ": c #00000000ADAD", "> c #00000000AFAF", ", c #00000000B3B3", "< c #00000000B7B7", "1 c #00000000B9B9", "2 c #00000000BDBD", "3 c #00000000BFBF", "4 c #00000000C3C3", "5 c #00000000C5C5", "6 c #00000000C7C7", "7 c #00000000C9C9", "8 c #00000000CBCB", "9 c #0B0B2F2FCBCB", "0 c #10103333CCCC", "q c #14143838CECE", "w c #1A1A3C3CCFCF", "e c #20204242D2D2", "r c #23234444D3D3", "t c #26264747D3D3", "y c #25254747DBDB", "u c #29294949D5D5", "i c #2C2C4B4BD1D1", "p c #2F2F4D4DD2D2", "a c #2C2C4C4CD5D5", "s c #2E2E4E4ED6D6", "d c #2F2F4E4ED7D7", "f c #33335050D3D3", "g c #34345353D7D7", "h c #36365454D4D4", "j c #34345353D8D8", "k c #3A3A5757D9D9", "l c #3B3B5858D6D6", "z c #3D3D5A5AD7D7", "x c #3F3F5C5CD7D7", "c c #3A3A5858D9D9", "v c #3B3B5858DADA", "b c #3F3F5C5CDBDB", "n c #40405D5DDBDB", "m c #42425E5ED8D8", "M c #40405D5DDCDC", "N c #44446060D9D9", "B c #46466262DADA", "V c #44446161DCDC", "C c #45456161DDDD", "Z c #45456262DDDD", "A c #46466262DDDD", "S c #49496565DBDB", "D c #4B4B6666DBDB", "F c #49496666DEDE", "G c #4B4B6666DEDE", "H c #4E4E6969DCDC", "J c #50506A6ADDDD", "K c #53536D6DDDDD", "L c #54546E6EDDDD", "P c #58587272DFDF", "I c #5F5F7676DCDC", "U c #4F4F6A6AE0E0", "Y c #4F4F6B6BE0E0", "T c #50506B6BE0E0", "R c #53536F6FE1E1", "E c #54546F6FE1E1", "W c #58587272E2E2", "Q c #5D5D7676E1E1", "! c #5C5C7575E4E4", "~ c #5F5F7979E4E4", "^ c #68687E7EDFDF", "/ c #61617A7AE2E2", "( c #66667E7EE3E3", ") c #79798989CFCF", "_ c #72728686DFDF", "` c #6A6A8282E5E5", "' c #6F6F8585E6E6", "] c #70708686E2E2", "[ c #72728888E7E7", "{ c #76768B8BE8E8", "} c #79798D8DE5E5", "| c #79798E8EE8E8", " . c #7B7B8F8FE8E8", ".. c #7B7B9090E9E9", "X. c #80807E7E7E7E", "o. c #EBEBAFAF0000", "O. c #F3F3AFAF0000", "+. c #F5F5B3B30000", "@. c #F7F7B3B30000", "#. c #F7F7B9B90000", "$. c #F9F9B7B70000", "%. c #FBFBB9B90000", "&. c #FDFDBDBD0000", "*. c #F1F1C5C50E0E", "=. c #F2F2C7C71414", "-. c #F3F3C8C81919", ";. c #F3F3C9C91919", ":. c #F4F4CBCB1F1F", ">. c #F4F4CCCC1F1F", ",. c #F3F3CACA2525", "<. c #F5F5CCCC2525", "1. c #F5F5CDCD2525", "2. c #F6F6CFCF2B2B", "3. c #F1F1CBCB3333", "4. c #F6F6D0D02B2B", "5. c #F7F7D0D03030", "6. c #F7F7D1D13131", "7. c #F6F6D1D13E3E", "8. c #F8F8D2D23636", "9. c #F8F8D3D33737", "0. c #F9F9D4D43D3D", "q. c #F9F9D6D63C3C", "w. c #F7F7D4D44A4A", "e. c #FAFAD5D54242", "r. c #FBFBD9D94747", "t. c #FBFBD8D84D4D", "y. c #F8F8D7D75454", "u. c #F9F9DADA5757", "i. c #FAFADCDC5C5C", "p. c #FBFBDDDD6060", "a. c #FCFCDDDD6565", "s. c #FCFCDFDF6969", "d. c #FDFDE1E16D6D", "f. c #FAFAE0E07777", "g. c #FCFCE0E07171", "h. c #888886868686", "j. c #8A8A89898989", "k. c #8F8F8D8D8D8D", "l. c #969694949494", "z. c #9D9D9B9B9B9B", "x. c #A2A2A1A1A1A1", "c. c #B5B5B3B3B3B3", "v. c #81819494E8E8", "b. c #87879A9AEAEA", "n. c #8D8D9F9FECEC", "m. c #B8B8C3C3F3F3", "M. c #CDCDD5D5F7F7", "N. c #D0D0D5D5EEEE", "B. c #D4D4D8D8EFEF", "V. c #D8D8DCDCF1F1", "C. c #DBDBDFDFF4F4", "Z. c #DDDDE2E2F0F0", "A. c #DEDEE2E2F6F6", "S. c #E1E1E5E5F8F8", "D. c #E3E3E7E7F9F9", "F. c #E9E9EDEDFCFC", "G. c None", /* pixels */ "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "8 y M.. #.o.&.&.%.$.@.@.O., : : ", "8 ..m.F.c.f.g.d.s.a.p.i.u.K H ; ", "8 .~ n.D.x.u.t.r.e.0.8.6.a S - ", "8 } ! W b.S.z.w.e.0.8.6.2.t N = ", "8 { W E J v.A.l.7.8.6.2.<.e x % ", "8 [ Y U S Z } C.k.3.4.<.>.w l # ", "5 ' Y U A m c ' V.h.,.>.;.q h @ ", "4 ` S A M c j j ^ B.X.;.=.0 f + ", "3 ( Z b k j a u r I N.X *.9 p + ", "3 / ! W L J D N m z _ Z.j.p i o ", "< , , : : ; - = = # @ : ) ; o o ", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G." }; springlobby-0.169/src/images/flags/BB.xpm0000600000176000000410000001021512105760300021557 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BB_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 162 2", " c black", ". c #000000001F1F", "X c #000000002121", "o c #000000002525", "O c #000000002B2B", "+ c #000000002F2F", "@ c #000000003131", "# c #000000003535", "$ c #000000003939", "% c #000000003B3B", "& c #000000004141", "* c #000000004747", "= c #000000004D4D", "- c #000000005353", "; c #000000005959", ": c #000000005D5D", "> c #000000005F5F", ", c #000000006363", "< c #000000006767", "1 c #000000006969", "2 c #000000006F6F", "3 c #000000007373", "4 c #000000007777", "5 c #000000007B7B", "6 c #000000007D7D", "7 c #000000007F7F", "8 c #000003037F7F", "9 c #727265652F2F", "0 c #747466662A2A", "q c #7C7C6E6E3535", "w c #7D7D6F6F3636", "e c #7F7F71713636", "r c #000003038181", "t c #0B0B39399595", "y c #0F0F3C3C9797", "u c #10103D3D9797", "i c #13133D3D9C9C", "p c #141441419999", "a c #141441419A9A", "s c #191942429F9F", "d c #191945459C9C", "f c #1A1A46469D9D", "g c #1F1F4A4A9F9F", "h c #1F1F4747A2A2", "j c #20204B4B9F9F", "k c #25254F4FA2A2", "l c #25254C4CA5A5", "z c #26265050A2A2", "x c #2B2B5454A5A5", "c c #2C2C5353A2A2", "v c #2C2C5454A6A6", "b c #2F2F5555A4A4", "n c #2F2F5656A4A4", "m c #2B2B5252A8A8", "M c #31315757ABAB", "N c #32325858A6A6", "B c #33335959A6A6", "V c #31315959A9A9", "C c #35355959A9A9", "Z c #36365C5CA8A8", "A c #37375C5CAEAE", "S c #3A3A5C5CB0B0", "D c #3B3B6060AAAA", "F c #3F3F6464ADAD", "G c #3F3F6363B0B0", "H c #44446868AFAF", "J c #40406161B3B3", "K c #45456666B6B6", "L c #44446969B1B1", "P c #45456868B2B2", "I c #49496C6CB1B1", "U c #49496D6DB4B4", "Y c #49496D6DB5B5", "T c #4B4B6A6AB8B8", "R c #4E4E7070B4B4", "E c #4F4F7171B7B7", "W c #4F4F7171B8B8", "Q c #50506F6FBBBB", "! c #53537575B7B7", "~ c #53537676B9B9", "^ c #54547171BABA", "/ c #54547373BDBD", "( c #54547575BABA", ") c #59597676BFBF", "_ c #58587878B9B9", "` c #58587878BABA", "' c #58587979BCBC", "] c #5C5C7A7ABEBE", "[ c #5D5D7D7DBCBC", "{ c #5C5C7C7CBEBE", "} c #5F5F7F7FBFBF", "| c #61618080BEBE", " . c #66668484C0C0", ".. c #6A6A8888C3C3", "X. c #6F6F8B8BC4C4", "o. c #72728E8EC6C6", "O. c #77778F8FCBCB", "+. c #76769191C8C8", "@. c #79799393C9C9", "#. c #79799494C9C9", "$. c #7B7B9595C9C9", "%. c #7B7B9595CACA", "&. c #8C8C7A7A2F2F", "*. c #828274743B3B", "=. c #818174743C3C", "-. c #868678783C3C", ";. c #89897B7B4141", ":. c #88887B7B4646", ">. c #AEAE94943030", ",. c #8C8C80804B4B", "<. c #B9B99F9F4040", "1. c #E7E793930000", "2. c #E5E59F9F0000", "3. c #E9E999990000", "4. c #E3E3A3A30000", "5. c #EBEBA9A90000", "6. c #EDEDB3B30000", "7. c #FBFBB9B90000", "8. c #FDFDBDBD0000", "9. c #DADABCBC4242", "0. c #DBDBBEBE4747", "q. c #F7F7C5C50000", "w. c #F9F9C3C30000", "e. c #FDFDCFCF0000", "r. c #F3F3D4D41919", "t. c #F4F4D0D01E1E", "y. c #F4F4D6D61F1F", "u. c #F5F5CCCC2323", "i. c #F6F6CECE2929", "p. c #F5F5D6D62424", "a. c #F6F6D1D12A2A", "s. c #F7F7D6D62E2E", "d. c #F5F5D8D82424", "f. c #F6F6D9D92B2B", "g. c #F5F5D6D63D3D", "h. c #F7F7DBDB3030", "j. c #F4F4DADA3939", "k. c #F8F8DBDB3434", "l. c #F8F8DCDC3434", "z. c #F8F8DEDE3636", "x. c #F9F9D8D83A3A", "c. c #F9F9DEDE3A3A", "v. c #F9F9DFDF3D3D", "b. c #F6F6D2D24242", "n. c #F7F7D3D34646", "m. c #F7F7DBDB4B4B", "M. c #FBFBDBDB4747", "N. c #FCFCDCDC4C4C", "B. c #FCFCDFDF6969", "V. c #FAFAE0E04040", "C. c #FAFAE0E04242", "Z. c #FBFBE1E14646", "A. c #FCFCE3E34B4B", "S. c #F8F8E1E15050", "D. c #FDFDE4E45151", "F. c #FDFDE5E55454", "G. c #FBFBE6E66060", "H. c #FCFCE2E26565", "J. c #FDFDE0E06D6D", "K. c #FDFDE6E67171", "L. c #FEFEEBEB7474", "P. c None", /* pixels */ "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "r r r r 8 e.e.8.7.w.q.2 : ; - = ", "r %.%.@.O.L.K.J.H.H.G.' ` ! R * ", "r %.} { ) F.D.N.M.M.v.A V v I & ", "8 %.{ ' / D.,.0.9.=.l.M x k H % ", "8 o.` ( Q A.:.;.-.w h.x k g H # ", "5 o.~ W U M.<.*.*.>.f.l g d D + ", "4 X.W U P M.x.w 9 i.d.h d p Z O ", "3 ..U P J c.k.&.0 p.y.s p u B o ", "2 .L L S l.s.i.u.t.r.i u t v X ", "1 } { ` ^ S.m.n.b.g.j.Z B v c . ", ", < , : : 6.5.3.1.2.4.% @ X . . ", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P." }; springlobby-0.169/src/images/flags/BD.xpm0000600000176000000410000000661312105760300021570 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BD_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 127 2", " c black", ". c #000005050000", "X c #00000D0D0000", "o c #000013130000", "O c #000019190000", "+ c #000021210000", "@ c #000027270000", "# c #00002D2D0000", "$ c #00002F2F0000", "% c #000033330000", "& c #000035350000", "* c #000037370000", "= c #00003B3B0000", "- c #00003D3D0000", "; c #000041410000", ": c #000043430000", "> c #0B0B67670B0B", ", c #0F0F6A6A0E0E", "< c #10106A6A1010", "1 c #13136C6C1313", "2 c #14146E6E1414", "3 c #191970701919", "4 c #1A1A70701A1A", "5 c #1F1F74741F1F", "6 c #202075752020", "7 c #252578782525", "8 c #26267A7A2626", "9 c #2B2B7C7C2B2B", "0 c #2C2C7B7B2C2C", "q c #2C2C7C7C2C2C", "w c #2F2F7C7C2F2F", "e c #2F2F7D7D2F2F", "r c #32327F7F3232", "t c #33337F7F3232", "y c #6B6B50501919", "u c #7C7C63633131", "i c #7E7E65653434", "p c #313181813131", "a c #353582823535", "s c #363682823636", "d c #373784843737", "f c #393984843939", "g c #3B3B85853B3B", "h c #3A3A86863A3A", "j c #3D3D86863D3D", "k c #3F3F89893F3F", "l c #3F3F8A8A3F3F", "z c #42428A8A4242", "x c #44448C8C4444", "c c #44448E8E4444", "v c #45458E8E4545", "b c #46468D8D4646", "n c #49498F8F4949", "m c #494991914949", "M c #4B4B90904B4B", "N c #4E4E93934E4E", "B c #4F4F95954F4F", "V c #505093935050", "C c #535396965353", "Z c #535397975353", "A c #545496965555", "S c #545497975454", "D c #585898985757", "F c #585899995858", "G c #58589A9A5858", "H c #58589B9B5959", "J c #59599B9B5959", "K c #5C5C9B9B5C5C", "L c #5C5C9D9D5C5C", "P c #5D5D9D9D5D5D", "I c #5F5F9F9F5F5F", "U c #61619E9E6060", "Y c #61619F9F6262", "T c #6565A1A16565", "R c #6666A3A36666", "E c #6969A4A46969", "W c #6A6AA5A56A6A", "Q c #6D6DA7A76D6D", "! c #6F6FA8A86F6F", "~ c #7070A9A97171", "^ c #7272AAAA7373", "/ c #7474ABAB7474", "( c #7676ADAD7676", ") c #7777ADAD7777", "_ c #7979AEAE7979", "` c #7B7BB0B07A7A", "' c #7B7BB0B07B7B", "] c #B9B936361F1F", "[ c #84846C6C3D3D", "{ c #85856E6E3F3F", "} c #BEBE41412B2B", "| c #94947F7F5454", " . c #CFCF2D2D1E1E", ".. c #D5D53C3C2E2E", "X. c #F1F120201F1F", "o. c #EDED28282525", "O. c #F3F324242323", "+. c #F5F524242424", "@. c #F4F42A2A2929", "#. c #F6F62A2A2A2A", "$. c #F6F62B2B2B2B", "%. c #F7F72F2F2F2F", "&. c #F7F730303030", "*. c #F5F538383636", "=. c #F6F63C3C3A3A", "-. c #F8F834343434", ";. c #F8F835353535", ":. c #F8F836363636", ">. c #F9F93B3B3A3A", ",. c #F9F93B3B3B3B", "<. c #F9F93B3B3C3C", "1. c #F9F93C3C3C3C", "2. c #C8C859594545", "3. c #DBDB4F4F4242", "4. c #DFDF5C5C5151", "5. c #CCCC63635050", "6. c #F4F44D4D4B4B", "7. c #FAFA40404040", "8. c #FAFA41414141", "9. c #FAFA41414242", "0. c #FBFB46464646", "q. c #FBFB47474747", "w. c #F9F948484747", "e. c #FAFA4C4C4C4C", "r. c #FCFC4B4B4B4B", "t. c #FAFA51515151", "y. c None", /* pixels */ "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", ": : : : : = * % # @ + O o X . ", ": ' ' _ ( ( ~ ! E T U L D C N ", ": ' I L D | 4.r.q.3.[ s p q n ", ": _ L H | t.r.w.8.1.*.u 9 8 x ", "= ( D S 5.r.q.8.<.*.%.} 8 6 k ", "= ~ Z B 6.0.1.>.:.&.#.o.5 4 g ", "* ! B M 2.8.1.:.&.#.+.] 4 2 s ", "% E M c { =.:.%.#.+.X.y 2 1 t ", "@ T c k g i ..#.O. .y 1 , > q ", "+ T L F A V M x z j g s t q w ", "O o X . ", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y." }; springlobby-0.169/src/images/flags/BE.xpm0000600000176000000410000000677312105760300021600 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BE_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 134 2", " c black", ". c #3A3A3A3A3A3A", "X c #3F3F3F3F3F3F", "o c #40403F3F3F3F", "O c #444444444444", "+ c gray27", "@ c #494949494949", "# c #49494A4A4949", "$ c #4B4B4A4A4B4B", "% c gray31", "& c #50504F4F5050", "* c #535353535353", "= c gray33", "- c #545454545555", "; c #585858585858", ": c #585859595959", "> c gray35", ", c gray36", "< c #5D5D5D5D5D5D", "1 c #5F5F5F5F5F5F", "2 c #616161616262", "3 c gray40", "4 c #6A6A6A6A6A6A", "5 c #6F6F6F6F6F6F", "6 c #727272727373", "7 c #767676767676", "8 c #777777777777", "9 c #797979797979", "0 c #7B7B7B7B7A7A", "q c #7B7B7B7B7B7B", "w c #A5A500000000", "e c #C1C100000000", "r c #C3C300000000", "t c #C7C700000000", "y c #C9C900000000", "u c #E3E300000000", "i c #E5E500000000", "p c #E7E700000000", "a c #E9E900000000", "s c #EBEB00000000", "d c #EDED00000000", "f c #EFEF00000000", "g c #F1F100000000", "h c #F3F300000000", "j c #F5F500000000", "k c #F1F10B0B0B0B", "l c #F1F10F0F0E0E", "z c #F2F210101010", "x c #F2F213131313", "c c #F2F214141414", "v c #F3F319191919", "b c #F3F31A1A1A1A", "n c #F4F41F1F1F1F", "m c #F4F420202020", "M c #F5F525252525", "N c #F5F526262626", "B c #F2F22C2C2C2C", "V c #F2F22F2F2F2F", "C c #F6F62B2B2B2B", "Z c #F6F62C2C2C2C", "A c #F2F232323232", "S c #F3F332323232", "D c #F3F335353535", "F c #F7F731313131", "G c #F4F436363636", "H c #F4F43B3B3B3B", "J c #F5F53F3F3F3F", "K c #F8F837373737", "L c #F6F644444444", "P c #F7F749494949", "I c #F7F74E4E4E4E", "U c #F8F853535353", "Y c #F9F957575757", "T c #FAFA5C5C5C5C", "R c #CFCFDBDB0000", "E c #D1D1DFDF0000", "W c #DFDFD1D10000", "Q c #DBDBDDDD0000", "! c #D5D5E1E10000", "~ c #E1E1E3E30000", "^ c #F1F1EFEF0000", "/ c #F7F7E9E90000", "( c #FBFBE7E70000", ") c #FDFDE9E90000", "_ c #F4F4EDED1F1F", "` c #F9F9F7F70000", "' c #F3F3F2F21919", "] c #F4F4F4F41E1E", "[ c #F5F5EEEE2424", "{ c #F6F6EFEF2B2B", "} c #F4F4EDED3939", "| c #F5F5F5F52323", " . c #F5F5F5F52424", ".. c #F6F6F6F62929", "X. c #F6F6F6F62A2A", "o. c #F7F7F7F72E2E", "O. c #F7F7F7F72F2F", "+. c #F1F1F1F13434", "@. c #F7F7F1F13030", "#. c #F7F7F7F73030", "$. c #F2F2F2F23A3A", "%. c #F5F5F5F53D3D", "&. c #F8F8F2F23636", "*. c #F9F9F3F33D3D", "=. c #F8F8F8F83434", "-. c #F8F8F8F83535", ";. c #F8F8F8F83636", ":. c #F9F9F9F93A3A", ">. c #F9F9F9F93B3B", ",. c #F9F9F9F93C3C", "<. c #F3F3F3F34040", "1. c #F6F6F6F64242", "2. c #F4F4F4F44646", "3. c #F7F7F7F74646", "4. c #F5F5F5F54B4B", "5. c #F7F7F7F74B4B", "6. c #FAFAFAFA4040", "7. c #FAFAFAFA4141", "8. c #FAFAFAFA4242", "9. c #FBFBFBFB4646", "0. c #FBFBFBFB4747", "q. c #FCFCFCFC4B4B", "w. c #FCFCFCFC4C4C", "e. c #F2F2F2F25050", "r. c #F6F6F6F65151", "t. c #F7F7F7F75454", "y. c #FDFDFDFD5151", "u. c #FBFBF6F66060", "i. c #FCFCFCFC6565", "p. c #FCFCFCFC6969", "a. c #FDFDFDFD6D6D", "s. c #F9F9F9F97474", "d. c #FDFDFDFD7171", "f. c None", /* pixels */ "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", " ^ ( ( ( ` / j g g f f ", " q 0 q 7 s.d.a.p.i.t.T Y U I f ", " q < , , t.y.w.0.9.1.K F Z P p ", " q , , * t.0.9.8.*.&.F Z N L p ", " 7 - - % 4.9.6.*.;.O.C N m J p ", " 6 * % $ 2.6.,.;.#.{ M n v H p ", " 5 % $ + <.>.=.O.X.[ n v c G p ", " 4 $ O X $.=.o.X. ._ v c l S t ", " 3 O X . +.o...| ] ' x l k S r ", " 2 < , - e.4.3.1.%.} D S V V r ", " Q ! ! R ~ W t t r t w ", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f." }; springlobby-0.169/src/images/flags/BF.xpm0000600000176000000410000000757312105760300021600 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BF_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 150 2", " c black", ". c #000021210000", "X c #000023230000", "o c #000025250000", "O c #000029290000", "+ c #00002B2B0000", "@ c #00002D2D0000", "# c #000031310000", "$ c #000037370000", "% c #00003B3B0000", "& c #00003F3F0000", "* c #000045450000", "= c #00004B4B0000", "- c #000051510000", "; c #000055550000", ": c #00005B5B0000", "> c #000061610000", ", c #000067670000", "< c #00006B6B0000", "1 c #000071710000", "2 c #000075750000", "3 c #00007D7D0000", "4 c #0B0B95950B0B", "5 c #0F0F97970E0E", "6 c #101097971010", "7 c #131399991313", "8 c #141499991414", "9 c #14149B9B1414", "0 c #18189C9C1919", "q c #19199C9C1919", "w c #19199D9D1919", "e c #1E1E9F9F1E1E", "r c #1F1F9F9F1F1F", "t c #1F1FA2A21F1F", "y c #2323A1A12323", "u c #2626A3A32424", "i c #2424A4A42424", "p c #2A2AA3A32A2A", "a c #2929A4A42929", "s c #2A2AA7A72A2A", "d c #2C2CA2A22C2C", "f c #2F2FA4A42F2F", "g c #2E2EA6A62E2E", "h c #2F2FA6A62F2F", "j c #3232A5A53232", "k c #3333A6A63232", "l c #3434A9A93434", "z c #3535A8A83535", "x c #3535AAAA3434", "c c #3636A9A93636", "v c #3939A9A93939", "b c #3A3AACAC3A3A", "n c #3D3DACAC3D3D", "m c #3F3FAFAF3F3F", "M c #3B3BB4B43A3A", "N c #4040AFAF3F3F", "B c #4242AEAE4242", "V c #4040B2B24040", "C c #4444B1B14444", "Z c #4545B2B24545", "A c #4646B0B04646", "S c #4545B4B44545", "D c #4B4BB2B24B4B", "F c #4949B4B44949", "G c #4949B7B74949", "H c #4F4FB9B94F4F", "J c #5050B4B45050", "K c #5454B7B75555", "L c #5858B9B95858", "P c #5D5DBCBC5D5D", "I c #6161BEBE6262", "U c #6666C0C06666", "Y c #6A6AC3C36A6A", "T c #6F6FC6C66F6F", "R c #AFAF00000000", "E c #CBCB00000000", "W c #D8D82A2A1A1A", "Q c #D9D930301F1F", "! c #DBDB34342525", "~ c #DDDD3A3A2B2B", "^ c #E7E700000000", "/ c #E9E900000000", "( c #EBEB00000000", ") c #EDED00000000", "_ c #EFEF00000000", "` c #F1F100000000", "' c #F3F300000000", "] c #F5F500000000", "[ c #F7F700000000", "{ c #F9F900000000", "} c #FBFB00000000", "| c #FDFD00000000", " . c red", ".. c #F4F420202020", "X. c #F5F525252525", "o. c #F5F526262626", "O. c #F6F62B2B2B2B", "+. c #F6F62C2C2C2C", "@. c #F7F730303030", "#. c #F7F731313131", "$. c #F5F53F3F3F3F", "%. c #F8F837373636", "&. c #F8F837373737", "*. c #F8F83B3B3636", "=. c #F9F93C3C3C3C", "-. c #F9F93C3C3D3D", ";. c #DDDD49493B3B", ":. c #DEDE56564646", ">. c #E0E05B5B4B4B", ",. c #F6F644444444", "<. c #F7F749494949", "1. c #F7F74E4E4E4E", "2. c #FAFA42424242", "3. c #FBFB47474747", "4. c #FBFB49494646", "5. c #FCFC4B4B4B4B", "6. c #FCFC4C4C4C4C", "7. c #FDFD4F4F5050", "8. c #F8F853535353", "9. c #F9F957575757", "0. c #FDFD51515151", "q. c #FDFD54545454", "w. c #FAFA5C5C5C5C", "e. c #FEFE58585858", "r. c #FEFE59595959", "t. c #FEFE5C5C5C5C", "y. c #FEFE5F5F5F5F", "u. c #E1E160604F4F", "i. c #E2E264645353", "p. c #E8E87F7F7373", "a. c #FBFB60606060", "s. c #FCFC65656565", "d. c #FCFC69696969", "f. c #FDFD6D6D6D6D", "g. c #FDFD70707171", "h. c #FEFE74747474", "j. c #FEFE76767676", "k. c #FEFE77777777", "l. c #FEFE79797979", "z. c #FFFF7B7B7A7A", "x. c #FFFF7B7B7B7B", "c. c #F1F1B4B43C3C", "v. c #F2F2B6B64141", "b. c #D8D8DBDB3030", "n. c #D7D7E8E82F2F", "m. c #D8D8E9E93535", "M. c #EAEAF0F03636", "N. c #EAEAF0F03B3B", "B. c #DDDDDDDD4040", "V. c None", /* pixels */ "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", " . . . .} . . .} } [ [ ' ' ) ) ", " .x.x.x.j.h.f.f.d.s.a.w.9.8.1.( ", " .x.t.t.t.q.q.5.3.2.-.%.#.+.<.( ", " .x.t.t.q.q.5.3.2.-.%.#.O.o.,.^ ", " .j.9.q.6.5.3.c.c.*.@.O.o...$.^ ", "E p.i.u.:.:.b.N.M.b.~ ! W W ;.R ", "3 T H G G S V m.n.s i t w 0 c @ ", "2 Y G C V b l f p u e 0 8 5 l + ", "1 U C m b l f s y e 0 7 5 4 f o ", "< I P L K J D A B n v c j f d . ", ", > : ; - = * & % $ # @ + o . o ", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V." }; springlobby-0.169/src/images/flags/BG.xpm0000600000176000000410000000731212105760300021570 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BG_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 144 2", " c black", ". c #00003B3B0000", "X c #00003D3D0000", "o c #00003F3F0000", "O c #000049490000", "+ c #454576761010", "@ c #49497A7A1414", "# c #4D4D7C7C1919", "$ c #52527F7F1F1F", "% c #000083830000", "& c #000085850000", "* c #14149E9E1414", "= c #1A1A9C9C1A1A", "- c #1F1F9F9F1F1F", "; c #1919A1A11919", ": c #1F1FA4A41F1F", "> c #20209E9E2020", ", c #2525A0A02525", "< c #2525A2A22525", "1 c #2424A5A52424", "2 c #2A2AA5A52B2B", "3 c #2B2BA4A42B2B", "4 c #2A2AA8A82A2A", "5 c #2F2FABAB2F2F", "6 c #3030A6A63030", "7 c #3030A8A83030", "8 c #3636A9A93636", "9 c #3636ABAB3636", "0 c #3535AEAE3535", "q c #3636ACAC3636", "w c #3B3BAAAA3B3B", "e c #3B3BADAD3B3B", "r c #3B3BACAC3C3C", "t c #3F3FABAB3F3F", "y c #3B3BB0B03A3A", "u c #565683832424", "i c #5B5B87872A2A", "p c #5F5F8A8A2F2F", "a c #61618A8A3232", "s c #63638E8E3434", "d c #686891913A3A", "f c #6C6C94943F3F", "g c #4141AFAF4141", "h c #4040B0B04040", "j c #4040B3B34040", "k c #4646B2B24646", "l c #4545B6B64545", "z c #4B4BB4B44B4B", "x c #4B4BB5B54B4B", "c c #4F4FB7B74F4F", "v c #4949B8B84949", "b c #4F4FBBBB4F4F", "n c #5050B6B65050", "m c #5353B9B95353", "M c #5454B8B85454", "N c #5858BABA5858", "B c #707098984545", "V c #74749B9B4949", "C c #6F6FC8C86F6F", "Z c #7272C6C67373", "A c #7676C7C77676", "S c #DDDD00000000", "D c #DFDF00000000", "F c #E1E100000000", "G c #E3E300000000", "H c #E5E500000000", "J c #E7E700000000", "K c #E9E900000000", "L c #EBEB00000000", "P c #EDED00000000", "I c #EFEF00000000", "U c #F1F100000000", "Y c #F3F300000000", "T c #F5F500000000", "R c #F7F700000000", "E c #F1F10B0B0B0B", "W c #F1F10F0F0E0E", "Q c #F9F900000000", "! c #F2F213131313", "~ c #F3F319191919", "^ c #F4F41E1E1E1E", "/ c #F5F523232323", "( c #F2F22C2C2C2C", ") c #F2F22F2F2F2F", "_ c #F6F629292929", "` c #F7F72E2E2E2E", "' c #F2F232323232", "] c #F3F335353535", "[ c #F4F439393939", "{ c #F5F53D3D3D3D", "} c #F8F834343434", "| c #F9F93A3A3A3A", " . c #FAFA3F3F3F3F", ".. c #F6F642424242", "X. c #F7F746464646", "o. c #F7F74B4B4B4B", "O. c #FAFA44444444", "+. c #F8F850505050", "@. c #F9F954545555", "#. c #F9F958585858", "$. c #FAFA5D5D5D5D", "%. c #FBFB61616262", "&. c #FCFC66666666", "*. c #8E8EAEAE6A6A", "=. c #B7B7D3D3B7B7", "-. c #DDDDDDDDDDDD", ";. c #DFDFDFDFDFDF", ":. c #D1D1E7E7D1D1", ">. c #DBDBEBEBDBDB", ",. c #DDDDECECDDDD", "<. c #DFDFEDEDDFDF", "1. c #E0E0EDEDDFDF", "2. c #E1E1E3E3E3E3", "3. c gray90", "4. c #E7E7E7E7E7E7", "5. c #E0E0EFEFE0E0", "6. c #E9E9E9E9E9E9", "7. c gray92", "8. c gray93", "9. c #EFEFEFEFEFEF", "0. c #E2E2F0F0E2E2", "q. c #E3E3F1F1E3E3", "w. c #E4E4F2F2E4E4", "e. c #E6E6F3F3E6E6", "r. c #E7E7F3F3E7E7", "t. c #E8E8F4F4E8E8", "y. c #E9E9F5F5E9E9", "u. c #EAEAF6F6EAEA", "i. c #EDEDF7F7EDED", "p. c #F1F1F1F1F1F1", "a. c #F3F3F3F3F3F3", "s. c gray96", "d. c #F6F6F6F6F6F6", "f. c gray97", "g. c #F8F8F8F8F8F8", "h. c #F9F9F9F9F9F9", "j. c gray98", "k. c #FBFBFBFBFBFB", "l. c gray99", "z. c #FDFDFDFDFDFD", "x. c #FDFDFDFDFEFE", "c. c #FEFEFEFEFEFE", "v. c gray100", "b. c None", /* pixels */ "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "s.s.s.s.s.a.a.9.9.9.8.7.6.4.3.2.", "s.v.v.v.v.v.x.x.v.k.j.j.j.j.s.;.", "s.v.v.v.v.j.v.x.j.j.j.j.f.s.f.-.", ":.i.u.u.e.e.e.e.5.5.5.1.,.>.1.=.", "% A N M c z g g r 8 6 3 , > t X ", "% Z m c x k h e 8 7 2 < - = w . ", "% C b v l h y 0 7 4 1 : ; * 0 X ", "O *.V B f d s p i u u # @ + a ", "Q &.X. .| } ` _ / ^ ~ ! W E ) D ", "Q %.$.#.@.+.o.X...{ [ ] ' ) ) S ", "T T U P P P P J J H H D D S S S ", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b." }; springlobby-0.169/src/images/flags/BH.xpm0000600000176000000410000000262112105760300021567 0ustar buildbotwww-data00000000000000/* XPM */ static const char * BH_xpm[] = { "16 16 70 1", " c None", ". c #FED0D0", "+ c #FFA9A9", "@ c #FD0000", "# c #FD0303", "$ c #F30000", "% c #ED0000", "& c #FFFFFF", "* c #FBFBFB", "= c #FEE8E7", "- c #FE8686", "; c #FD6E6E", "> c #FD6D6D", ", c #FB6665", "' c #FC6565", ") c #FA5C5C", "! c #F95757", "~ c #F85353", "{ c #F74E4E", "] c #EB0000", "^ c #FD5757", "/ c #FD5151", "( c #FC4C4C", "_ c #FC4B4B", ": c #FA4242", "< c #F83535", "[ c #F73131", "} c #F62C2C", "| c #F74949", "1 c #FDEBEB", "2 c #FB4747", "3 c #F93C3C", "4 c #F62B2B", "5 c #F52626", "6 c #F64444", "7 c #E50000", "8 c #FDD0D0", "9 c #FD5B5C", "0 c #FB4646", "a c #F93B3C", "b c #F42020", "c c #F53F3F", "d c #FCFCFC", "e c #FA4040", "f c #F72F2F", "g c #F41E1E", "h c #F31919", "i c #F43B3B", "j c #FBC8C7", "k c #F21414", "l c #F43636", "m c #FBFAFA", "n c #FAE2E2", "o c #F83434", "p c #F21010", "q c #DD0000", "r c #FAC4C4", "s c #F95151", "t c #F21313", "u c #F10F0E", "v c #F10B0B", "w c #F22F2F", "x c #F9F7F7", "y c #F9D8D8", "z c #F85858", "A c #F64242", "B c #F33232", "C c #F22C2C", "D c #EF8787", "E c #E30000", " ", " ", " ", "....+@@@@##$$$%%", ".&&&*=-;>,')!~{]", ".&&&.,^/(_:<[}|]", ".&&&&1>_2:3[4567", ".&&*89_0:a<45bc7", ".&ddd1,ea c #25259B9B0F0F", ", c #29299D9D1111", "< c #2B2BA7A72121", "1 c #2828A5A52727", "2 c #3939AEAE3838", "3 c #3A3AADAD3A3A", "4 c #3737B1B13434", "5 c #4141AFAF4141", "6 c #4444AFAF4444", "7 c #4949B6B64747", "8 c #4A4AB4B44A4A", "9 c #5050B9B95050", "0 c #5454BBBB5555", "q c #5757BEBE5656", "w c #5959BEBE5959", "e c #5959BFBF5959", "r c #5D5DBFBF5D5D", "t c #5E5EBFBF5E5E", "y c #6464BEBE6363", "u c #6060C0C05F5F", "i c #6666C4C46565", "p c #6969C2C26969", "a c #6B6BC1C16A6A", "s c #6C6CC6C66B6B", "d c #6C6CC4C46C6C", "f c #6D6DC5C56D6D", "g c #7171C5C57171", "h c #7070C6C67070", "j c #7373C8C87373", "k c #7676C9C97575", "l c #7D7DD0D07D7D", "z c #7D7DD0D07E7E", "x c #838300000000", "c c #8B8B00000000", "v c #8F8F00000000", "b c #919100000000", "n c #939300000000", "m c #999900000000", "M c #9D9D00000000", "N c #9F9F00000000", "B c #A3A300000000", "V c #ABAB00000000", "C c #C3C300000000", "Z c #CBCB00000000", "A c #CDCD00000000", "S c #CFCF00000000", "D c #D3D301010101", "F c #D5D500000000", "G c #D7D707070303", "H c #D5D509090909", "J c #D5D50F0F0F0F", "K c #D7D713131313", "L c #D9D917171717", "P c #D3D344444343", "I c #D5D54B4B4A4A", "U c #D9D955555555", "Y c #DEDE5B5B5B5B", "T c #DDDD5E5E5E5E", "R c #DDDD5F5F5F5F", "E c #DBDB63636363", "W c #DFDF67676666", "Q c #DCDC69696969", "! c #DDDD68686868", "~ c #DDDD6D6D6D6D", "^ c #E2E26A6A6A6A", "/ c #E2E26C6C6C6C", "( c #E2E277777777", ") c #E4E471717171", "_ c #E5E574747474", "` c #E2E27A7A7A7A", "' c #8787CFCF8686", "] c #8181D1D18181", "[ c #8383D2D28484", "{ c #8888D2D28888", "} c #8C8CD4D48A8A", "| c #9797C1C19797", " . c #9090D5D59090", ".. c #9595D8D89494", "X. c #9797D9D99797", "o. c #9A9ADADA9A9A", "O. c #9D9DDCDC9E9E", "+. c #B2B2E0E0B7B7", "@. c #D4D48C8C8282", "#. c #DADA9A9A9191", "$. c #C1C1A7A7ADAD", "%. c #E7E78A8A8A8A", "&. c #E8E885858585", "*. c #E9E984848484", "=. c #E8E889898989", "-. c #E8E88D8D8D8D", ";. c #ECEC96969696", ":. c #ECEC99999999", ">. c #E7E7AAAAACAC", ",. c #EDEDB3B3B4B4", "<. c #EDEDB9B9B9B9", "1. c #EFEFB5B5C7C7", "2. c #C1C1DFDFC1C1", "3. c #DDDDCFCFD7D7", "4. c #C3C3EBEBC7C7", "5. c #C9C9EAEACCCC", "6. c #C8C8EDEDCBCB", "7. c #CCCCEFEFD1D1", "8. c #D7D7F5F5DCDC", "9. c #EEEECFCFD0D0", "0. c #E3E3D1D1C7C7", "q. c #E6E6D5D5CDCD", "w. c #E7E7D8D8CFCF", "e. c #EFEFD0D0CFCF", "r. c #E7E7DEDED7D7", "t. c #F0F0C1C1C2C2", "y. c #F5F5C8C8C8C8", "u. c #FFFFCFCFDFDF", "i. c #FFFFD5D5D5D5", "p. c #F9F9DADADDDD", "a. c #F8F8DBDBDEDE", "s. c #E2E2E5E5DADA", "d. c #E8E8EAEADEDE", "f. c #EAEAF5F5F5F5", "g. c #ECECF7F7F2F2", "h. c #EDEDFCFCF4F4", "j. c #EBEBFAFAFAFA", "k. c #F7F7EAEAEFEF", "l. c #F2F2ECECF2F2", "z. c #F8F8EAEAF1F1", "x. c #FAFAEEEEF5F5", "c. c #F1F1F1F1F1F1", "v. c gray95", "b. c #F3F3F3F3F3F3", "n. c #F4F4F4F4F4F4", "m. c gray96", "M. c #F6F6F6F6F6F6", "N. c gray97", "B. c #FEFEF4F4FAFA", "V. c #F8F8F8F8F8F8", "C. c #F9F9F8F8F9F9", "Z. c #F9F9F9F9F9F9", "A. c gray98", "S. c #FBFBFBFBFBFB", "D. c gray99", "F. c #FDFDFDFDFDFD", "G. c #FEFEFEFEFEFE", "H. c gray100", "J. c None", /* pixels */ "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "i.u.G F L K J H D S S Z C C 1.<.", "< H.H.y.*.:.;.=.=.-.%./ ,.Z.N.$ ", "- } 8.H.B._ _ p.p.^ Y k.N.7.r X ", ", o.s O.H.H.Z.d.s.N.Z.N.' 2 g @ ", "> o.[ j i h.Z.q.0.N.g.7 8 w g O ", "; ..] z u 6.x.Z.Z.k.5.3 w 0 s o ", ": ..z f q j.#.q.r.@.f.4 6 9 p @ ", ": .t { S.Z.Z.N.N.N.v.v.p 1 y @ ", "& k 4.Z.Z.T T e.9.U P l.v.+.5 . ", "* Z.S.t.W ` ( Q E ~ Q I >.v.v.+ ", "2.3.V M B B M m n v v c % x $.| ", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J." }; springlobby-0.169/src/images/flags/BJ.xpm0000600000176000000410000000727712105760300021605 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BJ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 141 2", " c black", ". c #000049490000", "X c #000053530000", "o c #000057570000", "O c #00005D5D0000", "+ c #000063630000", "@ c #000067670000", "# c #00006F6F0000", "$ c #000075750000", "% c #000077770000", "& c #00007B7B0000", "* c #00007F7F0000", "= c #000083830000", "- c #000085850000", "; c #000087870000", ": c #000089890000", "> c #000091910000", ", c #3A3AACAC3A3A", "< c #3C3CAAAA3A3A", "1 c #3E3EAEAE3E3E", "2 c #3F3FAFAF3F3F", "3 c #4040AFAF3F3F", "4 c #4343ADAD4040", "5 c #4444B1B14444", "6 c #4545B2B24545", "7 c #4848B0B04646", "8 c #4949B4B44949", "9 c #4949B5B54949", "0 c #4B4BB5B54B4B", "q c #4E4EB2B24B4B", "w c #4F4FB6B64F4F", "e c #4F4FB7B74F4F", "r c #5050B7B75050", "t c #5353B7B75151", "y c #5454B7B75555", "u c #5656B5B55555", "i c #5353B9B95353", "p c #5454B9B95454", "a c #5454BABA5454", "s c #5858BABA5656", "d c #5858B9B95858", "f c #5959BBBB5959", "g c #5858BCBC5858", "h c #5858BCBC5959", "j c #5959BCBC5959", "k c #5C5CBDBD5B5B", "l c #5C5CBDBD5C5C", "z c #5D5DBCBC5D5D", "x c #5C5CBEBE5C5C", "c c #5E5EBDBD5E5E", "v c #5F5FBFBF5F5F", "b c #6161BEBE6262", "n c #6666C0C06666", "m c #6A6AC3C36A6A", "M c #6F6FC4C46F6F", "N c #7272C6C67373", "B c #7676C8C87676", "V c #7777C8C87777", "C c #7979C8C87979", "Z c #7979C9C97979", "A c #7A7AC9C97A7A", "S c #7B7BCACA7A7A", "D c #7B7BCACA7B7B", "F c #DDDD00000000", "G c #DFDF00000000", "H c #E1E100000000", "J c #E3E300000000", "K c #E5E500000000", "L c #E7E700000000", "P c #E9E900000000", "I c #F1F10B0B0B0B", "U c #F1F10F0F0E0E", "Y c #F2F210101010", "T c #F2F213131313", "R c #F2F214141414", "E c #F3F319191919", "W c #F4F41E1E1E1E", "Q c #F4F41F1F1F1F", "! c #F3F326261A1A", "~ c #F4F42B2B1F1F", "^ c #F5F523232323", "/ c #F5F524242424", "( c #F2F22C2C2C2C", ") c #F2F22F2F2F2F", "_ c #F6F629292929", "` c #F6F62A2A2A2A", "' c #F7F72F2F2F2F", "] c #F5F530302525", "[ c #F6F636362B2B", "{ c #F2F232323232", "} c #F3F332323232", "| c #F3F335353535", " . c #F4F436363636", ".. c #F7F73B3B3030", "X. c #F4F439393939", "o. c #F5F53D3D3D3D", "O. c #F8F835353535", "+. c #F4F446463B3B", "@. c #F8F840403636", "#. c #F9F946463B3B", "$. c #F6F642424242", "%. c #F7F746464646", "&. c #E7E7E7E70000", "*. c #E9E9E9E90000", "=. c #EBEBEBEB0000", "-. c #EDEDEFEF0000", ";. c #EFEFEFEF0000", ":. c #F1F1F1F10000", ">. c #F3F3F3F30000", ",. c #F5F5F5F50000", "<. c #F7F7F7F70000", "1. c #F9F9F9F90000", "2. c #FBFBFBFB0000", "3. c #FDFDFDFD0000", "4. c #F4F4F4F42020", "5. c #F5F5F5F52525", "6. c #F5F5F5F52626", "7. c #F6F6F6F62B2B", "8. c #F6F6F6F62C2C", "9. c #F7F7F7F73030", "0. c #F7F7F7F73131", "q. c #F5F5F5F53F3F", "w. c #F8F8F8F83636", "e. c #F8F8F8F83737", "r. c #F9F9F9F93C3C", "t. c #F9F9F9F93D3D", "y. c #F6F6F6F64444", "u. c #F7F7F7F74949", "i. c #F7F7F7F74E4E", "p. c #FAFAFAFA4141", "a. c #FAFAFAFA4242", "s. c #FBFBFBFB4747", "d. c #FCFCFCFC4C4C", "f. c #F8F8F8F85353", "g. c #F9F9F9F95757", "h. c #FAFAFAFA5C5C", "j. c #FBFBFBFB6060", "k. c #FCFCFCFC6565", "l. c #FCFCFCFC6969", "z. c #FDFDFDFD6D6D", "x. c None", /* pixels */ "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "> : : : - = = 3.2.1.<.,.,.:.-.-.", "- D D D B D D z.l.k.j.h.g.f.i.=.", ": D v l p v k d.s.p.t.e.0.8.u.=.", "- D k k a f p s.p.t.e.0.7.6.y.&.", ": B a a r a u p.t.e.8.7.6.4.q.&.", "- N i w 0 w q #.o...[ ] ~ ! +.L ", "* M e 9 6 8 7 O.' _ ^ W E R X.J ", "& m 9 6 4 5 4 ' _ ^ W E R Y } G ", "& b 5 1 , 1 < _ ^ W E R U I [ G ", "# b c d y f y %.$.o.X.| { ) ( F ", "$ @ + O o X . P L L J J G F F F ", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x." }; springlobby-0.169/src/images/flags/BM.xpm0000600000176000000410000001014112105760300021570 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 160 2", " c black", ". c #343430302F2F", "X c #000000005959", "o c #000000006B6B", "O c #33331B1B6B6B", "+ c #7F7F15153D3D", "@ c #6B6B1D1D4D4D", "# c #7F7F25254D4D", "$ c #65656767A3A3", "% c #7676B5B55E5E", "& c #7979B8B86262", "* c #7C7CBDBD6666", "= c #7E7EBDBD6666", "- c #6B6BC3C3E4E4", "; c #6F6FC5C5E5E5", ": c #818100000000", "> c #838300000000", ", c #878700000000", "< c #898900000000", "1 c #8B8B00000000", "2 c #8F8F00000000", "3 c #919100000000", "4 c #939300000000", "5 c #979700000000", "6 c #999900000000", "7 c #9B9B00000000", "8 c #9D9D00000000", "9 c #9F9F00000000", "0 c #838317173D3D", "q c #A3A300000000", "w c #A7A700000000", "e c #ABAB00000000", "r c #AFAF00000000", "t c #B1B100000000", "y c #B3B300000000", "u c #B5B500000000", "i c #B7B700000000", "p c #B9B900000000", "a c #BBBB00000000", "s c #878746466A6A", "d c #929253537979", "f c #AFAF67677F7F", "g c #C2C20B0B0B0B", "h c #CACA0F0F0E0E", "j c #C5C510101010", "k c #C7C719191919", "l c #CBCB13131313", "z c #C9C91E1E1E1E", "x c #CBCB1F1F1F1F", "c c #CFCF19191919", "v c #D9D91B1B1515", "b c #CBCB23232323", "n c #CBCB24242424", "m c #CACA2C2C2C2C", "M c #CACA2F2F2F2F", "N c #CBCB2F2F2F2F", "B c #CDCD29292929", "V c #CDCD2A2A2A2A", "C c #CECE2A2A2A2A", "Z c #CFCF2C2C2C2C", "A c #CFCF2E2E2E2E", "S c #CFCF2F2F2F2F", "D c #CCCC32323232", "F c #CDCD32323232", "G c #CFCF30303030", "H c #CFCF31313131", "J c #CDCD35353535", "K c #CECE36363636", "L c #CFCF39393939", "P c #CFCF3B3B3B3B", "I c #D1D134343434", "U c #D1D135353535", "Y c #D1D136363636", "T c #D1D137373737", "R c #D3D336363636", "E c #D3D33A3A3A3A", "W c #D2D23B3B3D3D", "Q c #D0D03D3D3D3D", "! c #D2D23F3F3F3F", "~ c #D4D43B3B3A3A", "^ c #D4D43C3C3C3C", "/ c #D4D43C3C3D3D", "( c #D4D43F3F3F3F", ") c #D5D53F3F3F3F", "_ c #D2D242424242", "` c #D3D344444444", "' c #D3D346464646", "] c #D5D541414242", "[ c #D5D542424242", "{ c #D6D640404040", "} c #D6D644444444", "| c #D6D645454545", " . c #D7D747474747", ".. c #D5D549494949", "X. c #D5D54B4B4B4B", "o. c #D7D74E4E4E4E", "O. c #D8D849494949", "+. c #D8D84A4A4949", "@. c #DBDB4F4F4F4F", "#. c #D7D750505050", "$. c #D8D853535353", "%. c #D8D854545555", "&. c #D9D957575757", "*. c #DADA58585858", "=. c #DBDB5C5C5C5C", "-. c #DBDB5D5D5D5D", ";. c #C5C55B5B6767", ":. c #C6C65E5E6969", ">. c #C7C762626E6E", ",. c #C9C967677575", "<. c #DDDD60606060", "1. c #DDDD61616262", "2. c #DFDF65656565", "3. c #DEDE66666666", "4. c #DDDD69696A6A", "5. c #DEDE6E6E6E6E", "6. c #DFDF78787A7A", "7. c #E0E06A6A6A6A", "8. c #E1E16F6F6F6F", "9. c #E4E46B6B6969", "0. c #E4E472726F6F", "q. c #E5E574747272", "w. c #E8E87C7C7979", "e. c #858569699595", "r. c #9C9C78789B9B", "t. c #AFAF75758C8C", "y. c #C3C37C7C8E8E", "u. c #8080BFBF6A6A", "i. c #8888C3C37272", "p. c #99998B8B8B8B", "a. c #91918686B1B1", "s. c #B8B883839A9A", "d. c #BABA83839999", "f. c #8F8FA0A0CDCD", "g. c #A3A3A0A0C3C3", "h. c #D5D588889090", "j. c #D9D9A1A1AAAA", "k. c #D1D1AFAFBBBB", "l. c #DADAADADB6B6", "z. c #E2E282828484", "x. c #E3E389898B8B", "c. c #EBEB84848181", "v. c #E7E794949595", "b. c #E5E5B9B9BFBF", "n. c #F1F1A5A5A2A2", "m. c #F1F1AAAAA7A7", "M. c #DADAB7B7C1C1", "N. c #E7E7BDBDC3C3", "B. c #DFDFC1C1CBCB", "V. c #E8E8CFCFD6D6", "C. c #E2E2D5D5DFDF", "Z. c #EFEFD8D8D8D8", "A. c #F1F1DADAD9D9", "S. c #F2F2DCDCDBDB", "D. c #F3F3DFDFDEDE", "F. c #F2F2E0E0E0E0", "G. c #F3F3E7E7E7E7", "H. c #F4F4E5E5E5E5", "J. c #F4F4E8E8E8E8", "K. c None", /* pixels */ "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", ",.e.o + 0 X @ ;.u u u t r e w w ", "O N.C.l.j.M.V.g.4.2.<.=.&.$.o.8 ", "c v.c.q.9.w.w.5. .[ / T H Z ..7 ", "# b.n.z.x.m.h.t.[ ^ H.J.G.F.` 5 ", "$ B.a.s.s.f.k.r.W T D.; - A.! 4 ", "v y.d >.:.s f 0.T S S.. p.A.L 2 ", "p 8.@. . .[ E T S C i.& % = K 1 ", "p 7.+. ./ E T Z C b x u.* j H , ", "p 2. ./ E I Z m b z k l h g M , ", "t <.=.*.%.#...` _ ! L K D M m + ", "u t e w w 8 8 7 4 2 2 2 , , + 1 ", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K." }; springlobby-0.169/src/images/flags/BN.xpm0000600000176000000410000000772212105760300021604 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BN_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 157 2", " c black", ". c #0B0B0B0B0B0B", "X c #0F0F0F0F0E0E", "o c #131313131313", "O c gray8", "+ c #181819191919", "@ c #191919191919", "# c gray12", "$ c #2C2C2C2C2C2C", "% c #2F2F2F2F2F2F", "& c #4A4A2F2F3030", "* c #404035353535", "= c #525229293636", "- c gray27", "; c #474745454545", ": c #404040404949", "> c #49494A4A4949", ", c #4B4B4A4A4B4B", "< c gray31", "1 c #535353535353", "2 c gray38", "3 c #727272727373", "4 c #767676767676", "5 c #D3D376765F5F", "6 c #DDDD76765E5E", "7 c #D5D57F7F6C6C", "8 c #DDDD7E7E6A6A", "9 c #B3B387870000", "0 c #B2B2A4A43737", "q c #D7D7A7A70000", "w c #D9D9A9A90000", "e c #D9D9ABAB0000", "r c #DDDDAFAF0000", "t c #D5D5B5B50000", "y c #D7D7B9B90000", "u c #D7D7BBBB0000", "i c #DBDBB3B30000", "p c #DBDBB5B50000", "a c #DFDFB3B30000", "s c #DFDFB5B50000", "d c #CDCDACAC3333", "f c #CECEBDBD3B3B", "g c #E1E1B7B70000", "h c #E1E1B9B90000", "j c #E3E3BBBB0000", "k c #E3E3BDBD0000", "l c #E5E5BFBF0000", "z c #D4D484847373", "x c #D7D787877777", "c c #DDDD83837070", "v c #DDDD82827272", "b c #DFDF89897777", "n c #C9C9AEAE4747", "m c #E1E188887878", "M c #E9E9C1C10000", "N c #E9E9C5C50000", "B c #EBEBC5C50000", "V c #EBEBC7C70000", "C c #EDEDC7C70000", "Z c #EDEDCBCB0000", "A c #EFEFC9C90000", "S c #EFEFCBCB0000", "D c #EFEFCDCD0000", "F c #F1F1CFCF0000", "G c #F1F1D1D10000", "H c #F1F1D3D30000", "J c #F3F3D1D10000", "K c #F3F3D3D30000", "L c #F3F3D7D70000", "P c #F5F5D3D30000", "I c #F5F5D5D50000", "U c #F5F5D9D90000", "Y c #E7E7CDCD3333", "T c #E8E8CECE3737", "R c #EEEED8D82F2F", "E c #EAEAD7D73F3F", "W c #EDEDD7D73B3B", "Q c #F0F0D9D93535", "! c #F1F1DCDC3535", "~ c #F2F2DDDD3A3A", "^ c #F2F2DEDE3B3B", "/ c #F5F5E6E63D3D", "( c #D8D8C2C24747", ") c #D0D0C2C25757", "_ c #EFEFDBDB4B4B", "` c #EDEDD2D25050", "' c #EFEFDDDD5050", "] c #F4F4DFDF4040", "[ c #F4F4DEDE4545", "{ c #F1F1DEDE4E4E", "} c #F2F2DEDE4D4D", "| c #F0F0DDDD5050", " . c #F1F1E5E54141", ".. c #F2F2E6E64646", "X. c #F6F6E6E64343", "o. c #F1F1E0E04848", "O. c #F4F4E0E04848", "+. c #F6F6E3E34848", "@. c #F6F6E3E34A4A", "#. c #F5F5E1E14D4D", "$. c #F8F8EDED4D4D", "%. c #F2F2E1E15151", "&. c #F3F3E2E25757", "*. c #F5F5E6E65353", "=. c #F6F6E5E55050", "-. c #F3F3E2E25858", ";. c #F3F3E0E05E5E", ":. c #F4F4E3E35B5B", ">. c #F4F4E2E25C5C", ",. c #F6F6E4E45F5F", "<. c #F7F7E8E85555", "1. c #F5F5E4E46060", "2. c #F7F7E5E56464", "3. c #F7F7E7E76868", "4. c #F7F7E7E76C6C", "5. c #F7F7E8E86868", "6. c #F7F7E9E96C6C", "7. c #F4F4E7E77878", "8. c #F8F8EAEA7070", "9. c #F9F9EBEB7070", "0. c #F9F9EAEA7474", "q. c #F9F9EDED7575", "w. c #F9F9E9E97878", "e. c #FAFAEAEA7A7A", "r. c #FAFAECEC7979", "t. c #FAFAECEC7D7D", "y. c #898987878787", "u. c #AAAAAAAAAAAA", "i. c #DCDC9A9A9191", "p. c #FCFCEEEE8E8E", "a. c #FCFCF2F2A3A3", "s. c #C2C2C8C8C8C8", "d. c #C3C3C9C9C9C9", "f. c #C7C7D3D3D3D3", "g. c #C9C9D1D1D1D1", "h. c #D5D5DBDBDFDF", "j. c #DADADFDFDFDF", "k. c #DFDFDFDFDFDF", "l. c #E4E4DEDEF8F8", "z. c #F5F5F2F2D7D7", "x. c gray89", "c. c gray90", "v. c #EDEDE4E4E2E2", "b. c #FCFCFBFBE8E8", "n. c gray95", "m. c #F3F3F3F3F3F3", "M. c #F2F2F7F7F7F7", "N. c #F4F4F4F4F4F4", "B. c #F4F4F5F5F5F5", "V. c gray96", "C. c #F6F6F6F6F6F6", "Z. c #F9F9F3F3F3F3", "A. c gray99", "S. c #FDFDFDFDFDFD", "D. c #FEFEFEFEFEFE", "F. c gray100", "G. c None", /* pixels */ "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "U P I I I F P F F S A C B M l k ", "F.F.a.p.t.e.e.w.9.4.3.2.,.:.&.g ", "F.F.F.F.F.b.t.| ` @.[ ] ^ ! %.a ", "y.F.F.F.F.F.A.h.i.#.O.^ Q R } r ", " 4 1 g.j.A.Z.b v l.M.C.z.| } q ", " 3 1 < , z x g.v.b v C.N.n.C.x.", "U 7.) > ; : 7 * & 5 s.f.N.n.N.x.", "H q.<.$.o.( n 8 6 = # + O ; u.k.", "F 8.#.+.X./ W T Y d + o X . % ", "D 6.5.1.>.-.*.%.} .. .E f 0 $ ", "Z V V l k g i g p e q i u y t 9 ", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G." }; springlobby-0.169/src/images/flags/BO.xpm0000600000176000000410000001003712105760300021576 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BO_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 157 2", " c black", ". c #000083830000", "X c #000087870000", "o c #00008B8B0000", "O c #00008F8F0000", "+ c #000091910000", "@ c #000093930000", "# c #000099990000", "$ c #00009D9D0000", "% c #00009F9F0000", "& c #0000A3A30000", "* c #0000A7A70000", "= c #0000ABAB0000", "- c #0000AFAF0000", "; c #0000B1B10000", ": c #0000B3B30000", "> c #0000B7B70000", ", c #1919C5C51A1A", "< c #1D1DC7C71D1D", "1 c #2222C8C82222", "2 c #2626CACA2626", "3 c #2B2BCCCC2B2B", "4 c #3131CECE3131", "5 c #3838CDCD3838", "6 c #3B3BCDCD3B3B", "7 c #3E3ECECE3E3E", "8 c #3636D0D03636", "9 c #3B3BD1D13B3B", "0 c #515195950000", "q c #4141D0D04141", "w c #4141D3D34141", "e c #4646D1D14545", "r c #4646D5D54646", "t c #4949D2D24949", "y c #4A4AD7D74A4A", "u c #4D4DD4D44D4D", "i c #4F4FD9D94F4F", "p c #5151D6D65151", "a c #5555D8D85555", "s c #5B5BD8D85B5B", "d c #5E5EDADA5F5F", "f c #6363DCDC6363", "g c #6767DDDD6767", "h c #6B6BDEDE6B6B", "j c #6F6FE0E06F6F", "k c #DBDB1F1F0000", "l c #E9E900000000", "z c #EBEB00000000", "x c #EDED00000000", "c c #EFEF00000000", "v c #F1F100000000", "b c #F3F300000000", "n c #F5F500000000", "m c #F7F700000000", "M c #F9F900000000", "N c #FBFB00000000", "B c #FDFD01010000", "V c #FDFD09090000", "C c #FDFD0B0B0000", "Z c #FDFD11110000", "A c #FFFF15150303", "S c #F5F56D6D0000", "D c #F6F660605454", "F c #F7F764645959", "G c #F8F869695E5E", "H c #F9F96D6D6363", "J c #F7F776766C6C", "K c #FAFA71716767", "L c #FBFB75756C6C", "P c #FCFC78786F6F", "I c #F7F77A7A7070", "U c #F8F87D7D7575", "Y c #FDFD7C7C7272", "T c #FDFD7F7F7676", "R c #9393C5C50000", "E c #ACACCDCD2828", "W c #AFAFCECE2C2C", "Q c #B0B0D0D03030", "! c #B3B3D2D23535", "~ c #B5B5D4D43A3A", "^ c #B8B8D6D63F3F", "/ c #B8B8D4D44646", "( c #BABAD7D74444", ") c #BCBCD8D84949", "_ c #BFBFDADA4E4E", "` c #C5C59D9D0000", "' c #C9C9A1A10000", "] c #CBCBA3A30000", "[ c #EFEF96964848", "{ c #F0F099994D4D", "} c #F2F29C9C5252", "| c #F3F39F9F5656", " . c #F9F981817878", ".. c #FAFA84847C7C", "X. c #FEFE83837A7A", "o. c #FEFE85857C7C", "O. c #FBFB88887F7F", "+. c #FEFE88887F7F", "@. c #F4F4A2A25B5B", "#. c #F1F1A4A46262", "$. c #F5F5A5A56060", "%. c #F5F5A8A86464", "&. c #F6F6AAAA6868", "*. c #F7F7ACAC6D6D", "=. c #F8F8AFAF7070", "-. c #F9F9B1B17373", ";. c #F9F9B3B37777", ":. c #E7E7C9C90000", ">. c #E9E9CDCD0000", ",. c #E9E9CFCF0000", "<. c #E4E4D1D13030", "1. c #E5E5D3D33434", "2. c #E5E5D3D33535", "3. c #E7E7D5D53939", "4. c #E8E8D7D73E3E", "5. c #E8E8D7D73F3F", "6. c #C1C1DCDC5353", "7. c #C3C3DDDD5858", "8. c #C5C5DFDF5D5D", "9. c #D0D0E5E57A7A", "0. c #E9E9D8D84343", "q. c #E9E9D9D94343", "w. c #E9E9D9D94444", "e. c #EBEBD9D94848", "r. c #EBEBD9D94949", "t. c #EBEBDADA4949", "y. c #E8E8D8D84E4E", "u. c #ECECDBDB4D4D", "i. c #ECECDCDC4E4E", "p. c #E9E9D8D85151", "a. c #E9E9DADA5555", "s. c #EDEDDDDD5252", "d. c #EDEDDDDD5353", "f. c #EEEEDEDE5757", "g. c #EFEFDEDE5757", "h. c #F0F0E0E05B5B", "j. c #F0F0E0E05C5C", "k. c #F1F1E1E15F5F", "l. c #F1F1E1E16161", "z. c #F1F1E3E36464", "x. c #F2F2E3E36565", "c. c #F2F2E4E46868", "v. c #F3F3E5E56C6C", "b. c #F4F4E8E87F7F", "n. c #FCFC8C8C8484", "m. c #FCFC8F8F8787", "M. c #FDFD91918A8A", "N. c #FDFD94948D8D", "B. c #FEFE97978F8F", "V. c #FEFE99999191", "C. c #FEFE9B9B9494", "Z. c #FFFF9C9C9595", "A. c #FFFF9D9D9595", "S. c #FBFBC1C18F8F", "D. c #F5F5E8E88484", "F. c #F6F6EAEA8787", "G. c None", /* pixels */ "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "A A A A Z V V B N N m m b b x x ", "A A.A.A.V.B.N.M.m.n.O... .U I z ", "A A.o.o.X.T Y Y L K H G F D J z ", "S S.;.-.=.*.&.%.$.@.| } { [ #.k ", ",.F.v.c.x.l.j.f.d.i.t.w.5.3.a.] ", ",.D.c.c.j.h.g.d.i.t.0.4.3.1.p.' ", ":.b.c.j.j.g.d.u.w.0.0.3.1.<.y.` ", "R 9.8.7.6._ ) ( ( ~ ! Q W E / 0 ", "> h i y r w 9 5 3 3 2 1 < , 6 X ", ": h h f d s a p u t e q 7 6 5 . ", "; ; = * & & $ # + + O o X X . . ", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G." }; springlobby-0.169/src/images/flags/BR.xpm0000600000176000000410000000753112105760300021606 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 148 2", " c black", ". c #000003030000", "X c #000007070000", "o c #00000B0B0000", "O c #00000D0D0000", "+ c #00000F0F0000", "@ c #000013130000", "# c #000019190000", "$ c #00001B1B0000", "% c #000021210000", "& c #000027270000", "* c #00002D2D0000", "= c #00002F2F0000", "- c #000035350000", "; c #00003B3B0000", ": c #000041410000", "> c #000047470000", ", c #00004B4B0000", "< c #00004D4D0000", "1 c #000051510000", "2 c #000053530000", "3 c #000057570000", "4 c #00005B5B0000", "5 c #00005D5D0000", "6 c #000061610000", "7 c #000063630000", "8 c #15157F7F1515", "9 c #2A2A5E5EF6F6", "0 c #2F2F6161F7F7", "q c #2F2F6B6BF7F7", "w c #36367070F8F8", "e c #3B3B7474F9F9", "r c #6D6D7373AAAA", "t c #42427171FAFA", "y c #47477575FBFB", "u c #40407878FAFA", "i c #44447878F8F8", "p c #60606767EEEE", "a c #65656969E2E2", "s c #6A6A6F6FEAEA", "d c #77777777E3E3", "f c #191982821919", "g c #1D1D85851D1D", "h c #1E1E85851E1E", "j c #373797971414", "k c #222287872222", "l c #2A2A8C8C2A2A", "z c #36368A8A3636", "x c #35358F8F3535", "c c #303090902F2F", "v c #343493933434", "b c #353593933535", "n c #363691913636", "m c #373792923737", "M c #3A3A93933B3B", "N c #3B3B94943B3B", "B c #3B3B96963B3B", "V c #3E3E96963E3E", "C c #3939A4A43434", "Z c #3F3F99994040", "A c #7676B7B73B3B", "S c #414198984141", "D c #42429B9B4242", "F c #454599994545", "G c #45459D9D4545", "H c #47479C9C4747", "J c #47479E9E4747", "K c #4C4C9E9E4C4C", "L c #4C4CA1A14C4C", "P c #4D4DA1A14D4D", "I c #5151A2A25151", "U c #5252A2A25252", "Y c #5151A4A45151", "T c #5656A4A45656", "R c #5757A4A45757", "E c #5B5BA7A75B5B", "W c #5B5BA8A85B5B", "Q c #5C5CAAAA5C5C", "! c #5F5FACAC5F5F", "~ c #6060A9A95F5F", "^ c #6363B2B24F4F", "/ c #6060B0B05858", "( c #6060AAAA6060", ") c #6060ACAC6060", "_ c #6363AEAE6363", "` c #6464ADAD6464", "' c #6464ADAD6565", "] c #6767AFAF6767", "[ c #6868AFAF6969", "{ c #6666B0B06767", "} c #6B6BB1B16B6B", "| c #6D6DB3B36D6D", " . c #7171B4B47171", ".. c #7575B8B87575", "X. c #7777B8B87777", "o. c #7A7ABABA7A7A", "O. c #7B7BBBBB7B7B", "+. c #7D7DBBBB7D7D", "@. c #7F7FBDBD7F7F", "#. c #5C5C8383E9E9", "$. c #7E7E9F9FD9D9", "%. c #73739A9AF9F9", "&. c #9E9ED2D23131", "*. c #A4A4D4D41919", "=. c #AFAFDCDC3F3F", "-. c #9595CACA7373", ";. c #ADADDDDD4646", ":. c #A8A8D9D95454", ">. c #B0B0E1E14242", ",. c #B3B3E2E26D6D", "<. c #B7B7E2E26969", "1. c #F4F4E9E91F1F", "2. c #F3F3F3F31919", "3. c #F3F3F3F31A1A", "4. c #F4F4F4F41E1E", "5. c #F4F4F4F41F1F", "6. c #F8F8EFEF3636", "7. c #F5F5F5F52525", "8. c #F6F6F6F62B2B", "9. c #F7F7F7F72E2E", "0. c #F9F9F0F03A3A", "q. c #F5F5EDED4444", "w. c #F6F6F2F24949", "e. c #FAFAFAFA4242", "r. c #FBFBFBFB4545", "t. c #FBFBFCFC4949", "y. c #FCFCFCFC4B4B", "u. c #FCFCFCFC4F4F", "i. c #FDFDF3F35151", "p. c #FBFBFBFB5555", "a. c #FAFAFDFD5454", "s. c #FDFDFCFC5050", "d. c #FDFDFDFD5151", "f. c #FDFDFDFD5353", "g. c #FCFCFCFC5A5A", "h. c #8F8F9494B3B3", "j. c #8080BEBE8080", "k. c #8080BEBE8181", "l. c #8181BEBE8181", "z. c #ADADACACA1A1", "x. c #ACACC6C6EBEB", "c. c #A8A8C0C0F3F3", "v. c #A9A9C0C0F6F6", "b. c #B9B9D5D5F7F7", "n. c #CDCDCACAA6A6", "m. c #D0D0E1E1FBFB", "M. c #DFDFE9E9F4F4", "N. c None", /* pixels */ "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "7 7 7 7 7 5 4 4 1 , > : ; - = & ", "7 l.@.@.O.o.X.,.<.} { ' ~ E T % ", "7 l.{ { ~ Q d.g.a.e.H V B b I # ", "7 @._ ! :.i.d y t a 6.&.b c K @ ", "7 O.Q d.d.n.m.M.x.w r 8.7.l H o ", "5 -.f.y.y.#.u %.c.b.$.7.4.3.A ", "3 X.^ y.r.h.e i q v.z.4.3.j z + ", "1 .I L >.0.p 0 9 s 1.*.g f B ", "< | L H D C 9.w.q.4.k g f 8 b ", ", [ ' ( W T I ;.>.F S S N b x ", ": ; - = & % # @ + X ", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N." }; springlobby-0.169/src/images/flags/BS.xpm0000600000176000000410000000757712105760300021621 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BS_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 151 2", " c black", ". c #00001B1B1B1B", "X c #00004B4B4B4B", "o c #4B4B48484646", "O c #494949494949", "+ c #49494A4A4949", "@ c #4B4B4A4A4B4B", "# c gray31", "$ c #454556565656", "% c #44445F5F5F5F", "& c #55554C4C4545", "* c #535353535353", "= c gray33", "- c #585858585858", "; c gray36", ": c #58586C6C6C6C", "> c #5F5F7B7B7B7B", ", c #626259595050", "< c gray40", "1 c #6A6A6A6A6A6A", "2 c #6F6F6F6F6F6F", "3 c #727272727373", "4 c #767676767676", "5 c #797979797979", "6 c #7B7B7B7B7A7A", "7 c #000081818181", "8 c #000083838383", "9 c #000087878787", "0 c #000089898989", "q c #00008B8B8B8B", "w c #00008F8F8F8F", "e c #000087879999", "r c #000091919191", "t c #000093939393", "y c #000099999999", "u c #00009D9D9D9D", "i c #00009F9F9F9F", "p c #00009B9BA9A9", "a c #0000A3A3A3A3", "s c #0000A7A7A7A7", "d c #0000A9A9A9A9", "f c #0000ABABABAB", "g c #0000AFAFAFAF", "h c #0000B1B1B1B1", "j c #0000B3B3B3B3", "k c #0000B5B5B5B5", "l c #0000B7B7B7B7", "z c #0000B9B9B9B9", "x c #0000BDBDBDBD", "c c #3F3FBFBFBFBF", "v c #0000C1C1C1C1", "b c #0000C3C3C3C3", "n c #0000C5C5C5C5", "m c #0000CBCBCBCB", "M c #0B0BC2C2CCCC", "N c #0F0FC4C4CDCD", "B c #1313C6C6CFCF", "V c #1818C7C7D1D1", "C c #1E1EC9C9D3D3", "Z c #2C2CCACACACA", "A c #2F2FCACACACA", "S c #2323CBCBD4D4", "D c #2929CDCDD6D6", "F c #2F2FCBCBD3D3", "G c #2C2CCECED6D6", "H c #2E2ECFCFD7D7", "J c #3232CCCCCCCC", "K c #3535CDCDCDCD", "L c #3939CFCFCFCF", "P c #3131D0D0D8D8", "I c #3434D1D1D9D9", "U c #3737D2D2DADA", "Y c #3D3DD0D0D0D0", "T c #3D3DD4D4DBDB", "R c #3A3ADCDCDFDF", "E c #616184848585", "W c #7B7B9E9E9E9E", "Q c #4242D2D2D2D2", "! c #4646D3D3D3D3", "~ c #4242D5D5DDDD", "^ c #4747D7D7DEDE", "/ c #4B4BD5D5D5D5", "( c #4E4ED7D7D7D7", ") c #4949D5D5DBDB", "_ c #5C5CCFCFCFCF", "` c #5050D7D7D7D7", "' c #5353D8D8D8D8", "] c #5454D8D8D8D8", "[ c #5D5DD2D2D2D2", "{ c #5858D9D9D9D9", "} c #5858DFDFDFDF", "| c #5C5CDBDBDBDB", " . c #4C4CD8D8E0E0", ".. c #5151DADAE1E1", "X. c #5454DBDBE2E2", "o. c #5959E4E4E7E7", "O. c #6161DDDDDDDD", "+. c #6565DDDDDDDD", "@. c #6969DFDFDFDF", "#. c #7B7BDFDFDFDF", "$. c #6D6DE0E0E0E0", "%. c #7070E2E2E2E2", "&. c #7474E2E2E2E2", "*. c #7777E3E3E3E3", "=. c #7979E8E8E8E8", "-. c #BABA9E9E3F3F", ";. c #BABA9E9E4040", ":. c #DFDF83830000", ">. c #E3E38B8B0000", ",. c #E5E58F8F0000", "<. c #E7E793930000", "1. c #C4C4AAAA4B4B", "2. c #C3C3AAAA5454", "3. c #DCDCBCBC4040", "4. c #F2F2C4C41010", "5. c #F2F2C6C61414", "6. c #F3F3C8C81919", "7. c #F3F3C8C81A1A", "8. c #F4F4C9C91F1F", "9. c #F4F4CACA1F1F", "0. c #F4F4CACA2020", "q. c #F5F5CBCB2424", "w. c #F5F5CBCB2525", "e. c #F5F5CCCC2525", "r. c #F5F5CDCD2626", "t. c #F6F6CDCD2A2A", "y. c #F6F6CDCD2B2B", "u. c #F6F6CECE2B2B", "i. c #F7F7CFCF2F2F", "p. c #F3F3CCCC3232", "a. c #F7F7CFCF3030", "s. c #F4F4CDCD3636", "d. c #F4F4CFCF3B3B", "f. c #F7F7D0D03131", "g. c #F5F5D2D23F3F", "h. c #F8F8D1D13434", "j. c #F8F8D1D13636", "k. c #F8F8D2D23535", "l. c #F8F8D2D23636", "z. c #F9F9D3D33A3A", "x. c #F9F9D3D33C3C", "c. c #F9F9D5D53A3A", "v. c #F9F9D8D83B3B", "b. c #F6F6D3D34444", "n. c #FAFAD5D54242", "m. c #FAFAD6D64141", "M. c #FBFBD7D74747", "N. c #FBFBD8D84646", "B. c #FCFCD8D84B4B", "V. c #FDFDDADA5151", "C. c None", /* pixels */ "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "X n m b n b x x z l j j j d s d ", " W #.=.*.*.$.$.@.+.O.| { ` ( u ", " 6 > [ o.X.X. .^ ~ T U P G ) p ", " 6 ; : 2.V.B.M.n.x.j.f.u.r.b.<.", " 4 = = , 1.M.x.x.j.a.u.r.8.g.<.", " 3 * # @ o 3.v.j.a.u.w.8.7.d.,.", " 2 # @ & -.v.k.i.u.e.8.7.5.s.>.", " 1 o $ -.c.f.i.u.8.8.7.5.4.p.>.", " < % c R I H D S C V B N M F e ", " E [ } ] ` / ! Q Y L K J A A 7 ", ". f l s a p u y t r r q 8 9 8 9 ", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C." }; springlobby-0.169/src/images/flags/BT.xpm0000600000176000000410000000770712105760300021615 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BT_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 153 2", " c black", ". c #DDDD00000000", "X c #DFDF00000000", "o c #E1E100000000", "O c #E3E300000000", "+ c #E5E500000000", "@ c #E7E700000000", "# c #E9E900000000", "$ c #EBEB00000000", "% c #E9E905050000", "& c #EDED0B0B0000", "* c #EDED0F0F0000", "= c #EFEF15150000", "- c #F1F100000000", "; c #F3F307070000", ": c #CECE6D6D3E3E", "> c #EDED53530000", ", c #F2F257571414", "< c #F1F167670B0B", "1 c #F1F16B6B0E0E", "2 c #F2F264641313", "3 c #F3F363631919", "4 c #F3F364641919", "5 c #F2F26B6B1010", "6 c #F2F26F6F1414", "7 c #F3F370701A1A", "8 c #F4F474741E1E", "9 c #F4F474741F1F", "0 c #F4F467672020", "q c #F4F463632C2C", "w c #F5F56D6D2323", "e c #F6F66D6D2A2A", "r c #F8F869693434", "t c #F5F573732626", "y c #F2F27B7B2C2C", "u c #F2F27C7C2F2F", "i c #F2F27D7D2F2F", "p c #F2F27F7F3232", "a c #F3F37F7F3232", "s c #BABA97977C7C", "d c #F3F39F9F0000", "f c #F3F380803535", "g c #F4F482823636", "h c #F4F482823939", "j c #F4F485853B3B", "k c #F5F587873D3D", "l c #F5F58A8A3F3F", "z c #EFEFBBBB0000", "x c #F3F3B1B10000", "c c #F3F3B3B30000", "v c #F1F1B7B70000", "b c #F5F5B1B10000", "n c #F7F7B7B70000", "m c #F5F5B9B90000", "M c #F7F7BBBB0000", "N c #F5F5BFBF0000", "B c #F9F9BDBD0000", "V c #F9F9BFBF0000", "C c #FBFBBDBD0000", "Z c #FBFBBFBF0000", "A c #D7D78B8B5757", "S c #DFDFBBBB5656", "D c #E6E688884444", "F c #F6F685854242", "G c #F7F786864949", "H c #F6F68D8D4444", "J c #F7F78E8E4E4E", "K c #F8F88A8A5050", "L c #F9F98F8F5555", "P c #F9F988885858", "I c #F1F191915151", "U c #F9F9ABAB5F5F", "Y c #F7F7C3C30000", "T c #F9F9C1C10000", "R c #F9F9C3C30000", "E c #ECECD7D75F5F", "W c #F2F2D2D24D4D", "Q c #FBFBD3D34646", "! c #FBFBD6D64747", "~ c #FBFBDEDE4545", "^ c #FBFBDADA4949", "/ c #FBFBDCDC4949", "( c #FCFCDBDB4B4B", ") c #FCFCD9D94F4F", "_ c #FCFCDADA4F4F", "` c #FCFCDFDF4B4B", "' c #F7F7DDDD5757", "] c #F8F8D7D75353", "[ c #FDFDD9D95151", "{ c #FDFDDADA5050", "} c #FDFDDBDB5151", "| c #FDFDDBDB5353", " . c #FDFDDBDB5454", ".. c #FAFADDDD5C5C", "X. c #FEFEDCDC5858", "o. c #FEFEDCDC5959", "O. c #FEFEDEDE5C5C", "+. c #FEFEDFDF5F5F", "@. c #E5E5CDCD6161", "#. c #FBFBDCDC6060", "$. c #FCFCDFDF6A6A", "%. c #FBFBE4E46262", "&. c #FCFCE2E26666", "*. c #FDFDE1E16F6F", "=. c #FDFDE2E26D6D", "-. c #FAFAE4E47272", ";. c #FDFDE2E27171", ":. c #FEFEE2E27373", ">. c #FEFEE2E27474", ",. c #FEFEE3E37676", "<. c #FEFEE4E47777", "1. c #FCFCE4E47979", "2. c #FEFEE5E57979", "3. c #FFFFE5E57A7A", "4. c #FFFFE5E57B7B", "5. c #ECECBABA9595", "6. c #F5F5A4A48787", "7. c #E6E6CACAB9B9", "8. c #E8E8DBDBA7A7", "9. c #F8F8E2E28B8B", "0. c #FCFCE8E88F8F", "q. c #F2F2E6E69B9B", "w. c #E8E8E4E4BBBB", "e. c #CFCFD7D7DDDD", "r. c #D4D4CECECCCC", "t. c #D6D6D0D0CFCF", "y. c #D6D6D7D7D9D9", "u. c #DDDDD8D8D8D8", "i. c #DFDFDFDFDFDF", "p. c #D6D6D7D7E5E5", "a. c #D4D4DBDBE6E6", "s. c #D6D6DDDDEEEE", "d. c #D8D8E2E2CECE", "f. c #D9D9E0E0E4E4", "g. c #DEDEE0E0E1E1", "h. c #DBDBE2E2EDED", "j. c #DDDDE5E5ECEC", "k. c #E0E0C0C0C0C0", "l. c #E3E3CFCFC1C1", "z. c #E0E0D7D7C9C9", "x. c #EAEAD2D2C3C3", "c. c #E8E8D8D8D0D0", "v. c #EBEBDDDDD5D5", "b. c #E7E7E4E4E2E2", "n. c #E7E7E4E4E4E4", "m. c #EFEFE8E8E5E5", "M. c #EAEAEAEAEAEA", "N. c #EAEAEAEAEBEB", "B. c #EDEDEBEBEEEE", "V. c #EAEAEDEDF3F3", "C. c #F0F0F2F2F6F6", "Z. c #FAFAFAFAF7F7", "A. c None", /* pixels */ "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "R V V V V V M n V V n b c v v > ", "V 4.4.4.,.:.:.=.0.9.#...' ] J $ ", "R 4.+.O.o.| _ 4.Z.C.N.E S q G % ", "R 4.O.O. .| / ! N.V.m.B.: t H @ ", "R ,. . .| ^ W @.8.h.s e.l.0 l @ ", "V :.| _ _ Q s.a.f.j.b.b.8 7 j @ ", "M =._ ^ ~ w.a.v.c.y.x.D 4 6 g o ", "M $.^ q.d.t.c.7.e 6.i.r., 1 a X ", "c $.:.l.r.r a.A w 8 4 2 1 < p X ", "N %.U P L K 5.I F j h f p u y X ", "d ; - = = & $ $ $ @ o o o X . . ", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A." }; springlobby-0.169/src/images/flags/BV.xpm0000600000176000000410000000652412105760300021613 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BV_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 127 2", " c black", ". c #00000000A5A5", "X c #00001D1DB7B7", "o c #03035353CFCF", "O c #09095959D1D1", "+ c #4B4B8383D5D5", "@ c #50508686D7D7", "# c #54548A8AD8D8", "$ c #59598D8DD9D9", "% c #5D5D9090DBDB", "& c #62629494DDDD", "* c #65659494DADA", "= c #65659696DEDE", "- c #66669797DEDE", "; c #6A6A9999E0E0", ": c #6B6B9A9AE0E0", "> c #6F6F9C9CE1E1", ", c #6F6F9D9DE1E1", "< c #73739F9FE3E3", "1 c #7777A3A3E4E4", "2 c #7A7AA4A4E2E2", "3 c #7A7AA5A5E5E5", "4 c #7B7BA6A6E5E5", "5 c #7E7EA8A8E7E7", "6 c #B1B100000000", "7 c #B5B500000000", "8 c #B9B900000000", "9 c #BBBB00000000", "0 c #BDBD00000000", "q c #BFBF00000000", "w c #C3C300000000", "e c #C5C500000000", "r c #C9C900000000", "t c #CBCB00000000", "y c #CFCF00000000", "u c #D1D100000000", "i c #D5D500000000", "p c #D7D700000000", "a c #D9D900000000", "s c #DBDB00000000", "d c #DDDD00000000", "f c #DADA0E0E0B0B", "g c #DCDC11110E0E", "h c #DCDC12121010", "j c #DDDD16161313", "k c #DDDD17171414", "l c #DFDF1B1B1919", "z c #DFDF1C1C1919", "x c #DEDE2E2E2C2C", "c c #E1E100000000", "v c #E0E021211E1E", "b c #E0E021211F1F", "n c #E1E126262323", "m c #E2E227272424", "M c #E2E229292626", "N c #E2E22B2B2929", "B c #E2E22C2C2A2A", "V c #E4E42E2E2B2B", "C c #E4E42E2E2C2C", "Z c #E0E031312F2F", "A c #E4E430302E2E", "S c #E4E431312F2F", "D c #E0E034343232", "F c #E0E035353232", "G c #E2E237373535", "H c #E5E534343131", "J c #E6E637373434", "K c #E7E739393636", "L c #E7E73A3A3737", "P c #E2E23B3B3939", "I c #E8E83E3E3C3C", "U c #E8E83F3F3D3D", "Y c #E4E440403D3D", "T c #E4E444444242", "R c #E6E646464444", "E c #E6E649494646", "W c #E7E74B4B4949", "Q c #E7E74C4C4B4B", "! c #E9E943434242", "~ c #E9E944444242", "^ c #EAEA46464444", "/ c #EAEA49494747", "( c #EBEB49494747", ") c #EBEB4B4B4949", "_ c #EBEB4E4E4B4B", "` c #EBEB4E4E4C4C", "' c #E8E850504E4E", "] c #E9E955555353", "[ c #ECEC52525151", "{ c #EBEB5A5A5757", "} c #ECEC5E5E5C5C", "| c #ECEC5F5F5D5D", " . c #EFEF5D5D5C5C", ".. c #F0F061615F5F", "X. c #EDED63636060", "o. c #EDED64646262", "O. c #EEEE67676565", "+. c #EEEE68686666", "@. c #EFEF6B6B6969", "#. c #EFEF6D6D6A6A", "$. c #EFEF6F6F6D6D", "%. c #F0F072727171", "&. c #F2F27A7A7979", "*. c #F2F27D7D7A7A", "=. c #F2F27D7D7B7B", "-. c #9292B6B6EAEA", ";. c #9595B9B9EBEB", ":. c gray89", ">. c #E7E7E7E7E7E7", ",. c gray93", "<. c #EFEFEFEFEFEF", "1. c gray95", "2. c #F3F3F3F3F3F3", "3. c #F4F4F4F4F4F4", "4. c gray96", "5. c #F6F6F6F6F6F6", "6. c gray97", "7. c #F8F8F8F8F8F8", "8. c #F9F9F9F9F9F9", "9. c gray98", "0. c #FBFBFBFBFBFB", "q. c #FBFBFCFCFBFB", "w. c gray99", "e. c #FDFDFDFDFDFD", "r. c #FEFEFEFEFEFE", "t. c gray100", "y. c None", /* pixels */ "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "c c c t.O t.d s s s p p u u r r ", "c =.=.t.;.t.%.$.@.+.X.| { ] ' e ", "c =.| t.5 0.[ _ ( ~ Y J H C W w ", "c &. .t.2 t.) R ! I J H B M R q ", "t.t.t.0.1 t.0.0.0.0.0.4.4.4.4.>.", "o -.2 1 < : : = & $ $ # @ + * . ", "q.t.t.0.: 0.0.6.5.5.4.4.2.1.3.:.", "s #.( 0.: 0.J H N m v l k g F 7 ", "s O.~ 0.& 0.C N m v l j g f Z 6 ", "p X.| 0.2 0.W E T Y P G F Z x 6 ", "u u y <.X ,.w q q 9 9 7 7 6 6 6 ", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y." }; springlobby-0.169/src/images/flags/BW.xpm0000600000176000000410000000675012105760300021615 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BW_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 137 2", " c black", ". c gray8", "X c #191919191919", "o c gray10", "O c gray12", "+ c #202020202020", "@ c gray14", "# c #252525252525", "$ c #2A2A2A2A2A2A", "% c #2A2A2B2B2B2B", "& c gray17", "* c #2F2F2F2F2F2F", "= c gray19", "- c #353535353535", "; c gray21", ": c #3B3B3B3B3A3A", "> c gray23", ", c #3B3B3B3B3C3C", "< c #3F3F3F3F3F3F", "1 c gray25", "2 c #414141414141", "3 c gray27", "4 c #464646464646", "5 c #49494A4A4949", "6 c #4B4B4A4A4B4B", "7 c #4B4B4B4B4B4B", "8 c gray31", "9 c #50504F4F5050", "0 c #535353535353", "q c gray33", "w c #585858585858", "e c #6F6F6F6F6F6F", "r c #727272727373", "t c #767676767676", "y c #00008383DDDD", "u c #00008585DDDD", "i c #00008787DFDF", "p c #00008989DDDD", "a c #00008989DFDF", "s c #00008B8BDDDD", "d c #00008D8DE1E1", "f c #00008F8FE3E3", "g c #00009191E5E5", "h c #00009595E7E7", "j c #00009B9BE9E9", "k c #00009D9DEBEB", "l c #00009F9FEBEB", "z c #0000A1A1EDED", "x c #0000A5A5EDED", "c c #0000A9A9EFEF", "v c #0000ADADF1F1", "b c #0000AFAFF3F3", "n c #0000B1B1F5F5", "m c #0000B3B3F7F7", "M c #0000B5B5F7F7", "N c #0000B7B7F5F5", "B c #0000B7B7F9F9", "V c #0000B9B9F9F9", "C c #0000BBBBFBFB", "Z c #0101BDBDFDFD", "A c #0707BFBFFDFD", "S c #0B0BC1C1FDFD", "D c #1111C3C3FDFD", "F c #1111C3C3FFFF", "G c #1313C3C3FFFF", "H c #1515C5C5FFFF", "J c #2525C9C9FFFF", "K c #3737C2C2F1F1", "L c #3B3BC4C4F1F1", "P c #3F3FC6C6F2F2", "I c #4444C7C7F3F3", "U c #4848C9C9F4F4", "Y c #4C4CCBCBF5F5", "T c #5151CDCDF6F6", "R c #5555CBCBF2F2", "E c #5757CBCBF2F2", "W c #5555CECEF6F6", "Q c #5555CFCFF7F7", "! c #5A5ACDCDF3F3", "~ c #5D5DCECEF3F3", "^ c #5959D0D0F7F7", "/ c #5A5AD1D1F8F8", "( c #5E5ED2D2F8F8", ") c #5F5FD3D3F9F9", "_ c #6060CFCFF4F4", "` c #6363D1D1F5F5", "' c #6767D3D3F6F6", "] c #6363D4D4F9F9", "[ c #6363D4D4FAFA", "{ c #6767D5D5FAFA", "} c #6A6AD4D4F7F7", "| c #6C6CD5D5F7F7", " . c #6F6FD6D6F7F7", ".. c #6868D6D6FAFA", "X. c #6B6BD7D7FBFB", "o. c #6F6FD8D8FCFC", "O. c #7272D7D7F7F7", "+. c #7373D8D8F8F8", "@. c #7373DADAFDFD", "#. c #7575D8D8F8F8", "$. c #7676D9D9F9F9", "%. c #7676DBDBFDFD", "&. c #7A7ADADAF9F9", "*. c #7A7ADCDCFEFE", "=. c #7E7EDCDCFAFA", "-. c #7C7CDEDEFEFE", ";. c #7F7FDFDFFEFE", ":. c #8181DDDDFBFB", ">. c #8282DDDDFBFB", ",. c #8484DEDEFCFC", "<. c #8888DFDFFCFC", "1. c #8A8AE1E1FDFD", "2. c #8E8EE2E2FEFE", "3. c #9090E2E2FEFE", "4. c #9393E4E4FEFE", "5. c #9494E5E5FEFE", "6. c #9595E4E4FFFF", "7. c #9696E5E5FFFF", "8. c #9797E5E5FFFF", "9. c #CDCDCDCDCDCD", "0. c #D5D5D5D5D5D5", "q. c gray93", "w. c #F1F1F1F1F1F1", "e. c gray95", "r. c #F3F3F3F3F3F3", "t. c #F4F4F4F4F4F4", "y. c gray96", "u. c #F6F6F6F6F6F6", "i. c gray97", "p. c #F8F8F8F8F8F8", "a. c #F9F9F9F9F9F9", "s. c gray98", "d. c #FBFBFBFBFBFB", "f. c gray99", "g. c #FDFDFDFDFDFD", "h. c #FEFEFEFEFEFE", "j. c None", /* pixels */ "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "J H H H F S A Z C C M n v v c c ", "F 8.8.8.4.2.2.1.<.,.:.=.&.#.O.l ", "F 8.-.-.*.%.@.o.X.{ ] ) / Q | j ", "w.h.h.h.h.h.d.d.p.p.p.u.u.u.u.0.", " t w q 8 7 4 2 < ; = & @ + < ", " r 0 8 6 4 1 > ; = & @ O X , ", " e 8 7 4 < > - * & @ O X . ; ", "q.h.d.d.p.p.p.i.u.u.u.w.r.w.t.9.", "B :.{ [ ) ) Q T Y I I P L K R i ", "n >.=.&.#.+. .} ' ` ` ~ ! R R y ", "N b v c x z l l h g d d a a u a ", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j." }; springlobby-0.169/src/images/flags/BY.xpm0000600000176000000410000000751712105760300021621 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BY_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 148 2", " c black", ". c #00002B2B0000", "X c #00002D2D0000", "o c #00002F2F0000", "O c #000033330000", "+ c #000037370000", "@ c #00003D3D0000", "# c #000041410000", "$ c #000047470000", "% c #00004D4D0000", "& c #000051510000", "* c #000057570000", "= c #00005D5D0000", "- c #0B0B9C9C0B0B", "; c #0F0F9E9E0E0E", ": c #181898981010", "> c #1D1D9A9A1414", ", c #1313A0A01313", "< c #1818A2A21919", "1 c #1E1EA5A51E1E", "2 c #21219D9D1919", "3 c #2727A0A01F1F", "4 c #2323A8A82323", "5 c #2C2CA3A32424", "6 c #2929AAAA2929", "7 c #2C2CA8A82C2C", "8 c #2F2FA9A92F2F", "9 c #2E2EADAD2E2E", "0 c #3131A5A52A2A", "q c #3737A7A72F2F", "w c #3232AAAA3232", "e c #3535ADAD3535", "r c #3A3AA7A73232", "t c #3C3CAAAA3434", "y c #3939AEAE3939", "u c #3434B0B03434", "i c #3A3AB3B33A3A", "p c #3D3DB0B03D3D", "a c #3F3FB5B53F3F", "s c #4141ADAD3A3A", "d c #4747B0B03F3F", "f c #4242B3B34242", "g c #4646B5B54646", "h c #4C4CB2B24545", "j c #4B4BB7B74B4B", "k c #5050B9B95050", "l c #5454BCBC5555", "z c #5858BEBE5858", "x c #E3E300000000", "c c #E5E500000000", "v c #E7E700000000", "b c #E9E900000000", "n c #EBEB00000000", "m c #EDED00000000", "M c #EFEF00000000", "N c #F1F100000000", "B c #F3F300000000", "V c #F5F500000000", "C c #F7F700000000", "Z c #F9F900000000", "A c #FBFB00000000", "S c #FDFD00000000", "D c red", "F c #F2F214141414", "G c #F3F319191919", "H c #F3F31A1A1A1A", "J c #F4F41F1F1F1F", "K c #F4F420202020", "L c #F5F524242424", "P c #F5F525252525", "I c #F5F526262626", "U c #F6F62A2A2A2A", "Y c #F6F62B2B2B2B", "T c #F6F62C2C2C2C", "R c #F7F72F2F2F2F", "E c #F7F730303030", "W c #F7F731313131", "Q c #F4F436363636", "! c #F4F43B3B3B3B", "~ c #F5F53F3F3F3F", "^ c #F8F835353535", "/ c #F8F836363636", "( c #F8F837373636", ") c #F8F837373737", "_ c #FBFB35353B3B", "` c #F9F93B3B3A3A", "' c #F9F93B3B3B3B", "] c #F9F93B3B3C3C", "[ c #F9F93C3C3C3C", "{ c #F9F93C3C3D3D", "} c #EFEF5B5B5353", "| c #F6F644444444", " . c #F7F749494949", ".. c #F7F74E4E4E4E", "X. c #FAFA40404040", "o. c #FAFA41414141", "O. c #FAFA41414242", "+. c #FAFA42424242", "@. c #FBFB45454545", "#. c #FBFB46464646", "$. c #FBFB47474747", "%. c #FBFB4A4A4949", "&. c #FCFC4A4A4B4B", "*. c #FCFC4B4B4B4B", "=. c #FCFC4C4C4C4C", "-. c #FCFC4F4F4F4F", ";. c #FDFD4F4F5050", ":. c #F8F853535353", ">. c #F9F957575757", ",. c #FDFD51515151", "<. c #FDFD54545454", "1. c #FDFD57575757", "2. c #FAFA5C5C5C5C", "3. c #FEFE59595959", "4. c #FEFE5C5C5C5C", "5. c #FFFF5F5F5F5F", "6. c #E9E970706666", "7. c #FBFB60606060", "8. c #FEFE61616161", "9. c #FCFC65656565", "0. c #FCFC69696969", "q. c #FDFD6D6D6D6D", "w. c #F8F877777575", "e. c #FDFD70707171", "r. c #FEFE74747474", "t. c #FEFE77777777", "y. c #FEFE79797979", "u. c #FFFF7E7E7E7E", "i. c #FDFDA3A3A3A3", "p. c #FEFEA5A5A5A5", "a. c #FFFFB3B3B3B3", "s. c #CBCBE3E3CBCB", "d. c #FFFFDFDFDFDF", "f. c #E7E7F3F3E7E7", "g. c #F5F5E7E7E9E9", "h. c #F9F9E9E9EBEB", "j. c #FCFCE9E9EAEA", "k. c #FDFDEBEBEBEB", "l. c #FEFEECECECEC", "z. c #FEFEEDEDEDED", "x. c #F7F7F4F4F2F2", "c. c #FAFAF3F3F2F2", "v. c #FFFFF1F1F1F1", "b. c #FEFEF4F4F4F4", "n. c #FEFEF5F5F5F5", "m. c #FFFFF5F5F5F5", "M. c #FFFFF9F9F9F9", "N. c None", /* pixels */ "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "m.5.d.D A D D D A A C C B B m m ", "D M.u.y.t.r.q.q.0.9.2.5.>.:...n ", "v.a.k.5.3.<.<.-.@.O.~ ( W T .n ", "D m.8.3.<.<.&.@.O.~ ( W Y I | c ", "k.p.k.<.-.&.@.X.] ^ R Y I K ~ c ", "D m.<.-.&.@.X.` ^ W T I J G ! c ", "h.p.k.&.@.X.` ( R Y I K G F Q c ", "_ c.} h s s t q 0 5 3 > > : r o ", "h.w.f.a a u 9 6 4 3 < , ; - 8 O ", "C x.6.l l k j g f p y e w 8 7 . ", "g.n s.= * & % $ # @ @ + o o . o ", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N." }; springlobby-0.169/src/images/flags/BZ.xpm0000600000176000000410000001006212105760300021607 0ustar buildbotwww-data00000000000000/* XPM */ static const char *BZ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 158 2", " c black", ". c #00000000A7A7", "X c #00000000B1B1", "o c #00000000C9C9", "O c #00000000CBCB", "+ c MediumBlue", "@ c #00000000CFCF", "# c #00000000D1D1", "$ c #00000000D7D7", "% c #00000101DBDB", "& c #00001F1FDDDD", "* c #00001717F1F1", "= c #00001F1FF1F1", "- c #00002525F1F1", "; c #00002B2BF3F3", ": c #00002F2FF5F5", "> c #00003333F5F5", ", c #13135151E7E7", "< c #17175353E5E5", "1 c #17175353E7E7", "2 c #1D1D5757E7E7", "3 c #1C1C5757E9E9", "4 c #3C3C5E5ED9D9", "5 c #23235B5BEAEA", "6 c #22225C5CE8E8", "7 c #28286060E9E9", "8 c #28286161EBEB", "9 c #2E2E6565EBEB", "0 c #2D2D6464EDED", "q c #37376A6AE4E4", "w c #33336969ECEC", "e c #36366A6AEAEA", "r c #34346969EEEE", "t c #39396D6DE9E9", "y c #39396D6DEFEF", "u c #3D3D6F6FE9E9", "i c #36367777E9E9", "p c #3E3E7171F0F0", "a c #40406060DADA", "s c #42426363DBDB", "d c #45456565DCDC", "f c #5B5B7979DFDF", "g c #41417373EBEB", "h c #44447676E9E9", "j c #46467676E8E8", "k c #46467676ECEC", "l c #4B4B7A7AEDED", "z c #41417B7BF4F4", "x c #46467F7FF5F5", "c c #50507E7EF0F0", "v c #61617575DEDE", "b c #65657979E0E0", "n c #6A6A7D7DE1E1", "m c #7676ACACBBBB", "M c #4A4A8787F2F2", "N c #4C4C8383F5F5", "B c #4C4C8383F6F6", "V c #4D4D8686F1F1", "C c #53538585F2F2", "Z c #51518686F6F6", "A c #51518787F6F6", "S c #56568A8AF7F7", "D c #57578A8AF8F8", "F c #5A5A8A8AF0F0", "G c #5B5B8D8DF8F8", "H c #5E5E9090F9F9", "J c #5E5E9191F9F9", "K c #5F5F9191F9F9", "L c #72728D8DD9D9", "P c #75759090D9D9", "I c #66668181E5E5", "U c #60608484ECEC", "Y c #65658888EDED", "T c #6E6E8080E1E1", "R c #69698C8CEDED", "E c #6D6D8F8FEEEE", "W c #61619292F6F6", "Q c #62629393F9F9", "! c #63639393F9F9", "~ c #61619797F9F9", "^ c #66669696FAFA", "/ c #6D6D9292F0F0", "( c #6C6C9999F8F8", ") c #79798F8FE7E7", "_ c #70709C9CF8F8", "` c #75759F9FF9F9", "' c #7070A4A4C7C7", "] c #7D7DA2A2F6F6", "[ c #7878A2A2F9F9", "{ c #7B7BA4A4FAFA", "} c #7F7FA6A6FBFB", "| c #C3C300000000", " . c #C7C700000000", ".. c #CBCB00000000", "X. c #CFCF00000000", "o. c #D1D100000000", "O. c #D3D300000000", "+. c #DDDD00000000", "@. c #E1E100000000", "#. c #E5E500000000", "$. c #E7E700000000", "%. c #E9E900000000", "&. c #EBEB00000000", "*. c #EDED00000000", "=. c #EFEF00000000", "-. c #F1F100000000", ";. c #F5F500000000", ":. c #F9F900000000", ">. c #9393A0A0B3B3", ",. c #B2B2A0A08E8E", "<. c #B4B4ADADABAB", "1. c #B3B3BDBDA6A6", "2. c #84849797ECEC", "3. c #84849B9BEEEE", "4. c #86869E9EEEEE", "5. c #8A8A9D9DE2E2", "6. c #8F8F9F9FE6E6", "7. c #88889E9EEFEF", "8. c #8383ABABDEDE", "9. c #8787B0B0D6D6", "0. c #8080A8A8FBFB", "q. c #A6A6B4B4C0C0", "w. c #8888C7C7AEAE", "e. c #8E8ED5D5BFBF", "r. c #BCBCC9C9AFAF", "t. c #BEBED5D5BEBE", "y. c #B1B1F4F4A9A9", "u. c #B1B1F4F4B2B2", "i. c #B9B9F5F5BDBD", "p. c #BABAF9F9B6B6", "a. c #9F9FCCCCC6C6", "s. c #9292D6D6C6C6", "d. c #9494DBDBC0C0", "f. c #9E9EDEDEC1C1", "g. c #A1A1D5D5D7D7", "h. c #A2A2E2E2C1C1", "j. c #AFAFEEEECCCC", "k. c #B7B7F1F1CFCF", "l. c #C9C9F5F5BEBE", "z. c #DDDDD5D5D3D3", "x. c #D4D4E9E9D2D2", "c. c #D2D2F5F5C8C8", "v. c #D5D5FCFCCDCD", "b. c #D8D8FAFACECE", "n. c #D9D9F5F5D3D3", "m. c #DEDEF3F3DADA", "M. c #DDDDE2E2E1E1", "N. c #E5E5FBFBDEDE", "B. c #E1E1E6E6E2E2", "V. c #E3E3E5E5E3E3", "C. c #E5E5ECECE4E4", "Z. c #E7E7FCFCE4E4", "A. c #EAEAF3F3ECEC", "S. c #F3F3EDEDE5E5", "D. c #F0F0F1F1F0F0", "F. c #F5F5F4F4F5F5", "G. c #F9F9F9F9F9F9", "H. c None", /* pixels */ "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", ":.:.:.:.:.;.-.%.%.=.=.=.=.%.%.%.", "& 7.7.4.4.] 2.6.5.) / T n b v X ", "> 0.^ ! H ! g.k.j.s.V p y r C $ ", "> } Q H K i.Z.A.C.m.u.j r 9 l @ ", ": { H G 8.v.S.r.1.z.l.' 9 5 k @ ", "; [ G D a.N.G.<.,.F.n.w.8 5 g @ ", "- [ S A 9.b.D.q.>.B.c.m 5 2 u o ", "= ( B N C p.x.B.M.t.y.q 2 < t o ", "* ( B B z M d.h.f.e.i 3 < , e o ", "% E R Y U F I P L f j d s a 4 . ", "=.%.#.#.@.+.o...| X.O.o.o.X.X.X.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H." }; springlobby-0.169/src/images/flags/CA.xpm0000600000176000000410000000736612105760300021574 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CA_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 147 2", " c black", ". c #A1A100000000", "X c #A5A500000000", "o c #A7A700000000", "O c #ADAD00000000", "+ c #B1B100000000", "@ c #B5B500000000", "# c #BBBB00000000", "$ c #BFBF00000000", "% c #C3C300000000", "& c #C7C700000000", "* c #C9C900000000", "= c #CFCF00000000", "- c #D3D300000000", "; c #D5D500000000", ": c #D9D900000000", "> c #DBDB00000000", ", c #DFDF00000000", "< c #D4D415151414", "1 c #D6D61D1D1D1D", "2 c #D7D724242424", "3 c #D8D823232B2B", "4 c #DCDC2C2C2C2C", "5 c #DADA29293232", "6 c #D9D936363636", "7 c #DDDD30303838", "8 c #DEDE37373E3E", "9 c #E3E300000000", "0 c #E7E713131B1B", "q c #E9E91F1F2727", "w c #EDED27272F2F", "e c #E9E929292929", "r c #EDED2F2F3737", "t c #EFEF2D2D3737", "y c #E0E033333535", "u c #E2E23C3C3C3C", "i c #EFEF35353D3D", "p c #EFEF39393F3F", "a c #E0E03D3D4444", "s c #EFEF3B3B4343", "d c #F1F13F3F4545", "f c #DBDB44444444", "g c #DADA41414848", "h c #DCDC46464C4C", "j c #DDDD4A4A5050", "k c #DFDF4F4F5555", "l c #DBDB55555959", "z c #DEDE6A6A6B6B", "x c #E2E245454545", "c c #E7E743434343", "v c #E3E346464D4D", "b c #E5E54D4D5151", "n c #E6E64E4E5555", "m c #E6E64F4F5656", "M c #E2E255555B5B", "N c #E8E857575757", "B c #EAEA52525D5D", "V c #EAEA5D5D5E5E", "C c #EAEA5F5F5F5F", "Z c #ECEC59595959", "A c #F1F14B4B5353", "S c #E4E45B5B6060", "D c #ECEC5E5E6565", "F c #E5E561616464", "G c #E5E561616767", "H c #E2E26C6C6D6D", "J c #EDED63636666", "K c #ECEC66666666", "L c #E8E86A6A6A6A", "P c #EAEA6B6B6B6B", "I c #E8E868686D6D", "U c #E9E968686C6C", "Y c #E9E968686E6E", "T c #EEEE6D6D6E6E", "R c #EAEA6E6E7373", "E c #EEEE6E6E7474", "W c #EEEE6E6E7575", "Q c #ECEC71717676", "! c #EDED74747676", "~ c #EFEF75757A7A", "^ c #F0F073737373", "/ c #F1F17A7A7A7A", "( c #F1F17E7E7E7E", ") c #E8E87B7B8181", "_ c #F1F17C7C8181", "` c gray75", "' c #EAEA83838484", "] c #EFEF80808484", "[ c #E9E98B8B8B8B", "{ c #F2F281818686", "} c #F0F084848A8A", "| c #F4F486868B8B", " . c #F2F28B8B8F8F", ".. c #F5F58B8B9090", "X. c #F3F390909494", "o. c #F6F690909494", "O. c #F4F497979696", "+. c #F4F495959999", "@. c #F5F599999E9E", "#. c #F7F79E9EA2A2", "$. c #E8E8A8A8A7A7", "%. c #E9E9AFAFAFAF", "&. c #ECECBDBDBEBE", "*. c #F7F7A1A1A5A5", "=. c #F8F8A4A4A7A7", "-. c #F8F8A4A4A8A8", ";. c gray77", ":. c #C5C5C5C5C5C5", ">. c #CBCBCBCBCBCB", ",. c gray80", "<. c gray83", "1. c #E8E8C0C0C1C1", "2. c #EEEECECECDCD", "3. c #E8E8DDDDDBDB", "4. c #F5F5D0D0D3D3", "5. c #EBEBE3E3E3E3", "6. c #EDEDE1E1E2E2", "7. c #EDEDE6E6E6E6", "8. c #E9E9E9E9E9E9", "9. c gray92", "0. c #ECECECECECEC", "q. c gray93", "w. c #EEEEEEEEEEEE", "e. c #EFEFEFEFEFEF", "r. c #F1F1ECECEDED", "t. c #F0F0EEEEEEEE", "y. c #F7F7EBEBEDED", "u. c #F5F5EDEDEDED", "i. c #F6F6EDEDEDED", "p. c #F1F1F1F1F1F1", "a. c gray95", "s. c #F3F3F3F3F3F3", "d. c #F3F3F5F5F5F5", "f. c #F4F4F4F4F4F4", "g. c gray96", "h. c #F6F6F6F6F6F6", "j. c gray97", "k. c #F8F8F7F7F8F8", "l. c #F9F9F9F9F9F9", "z. c #F8F8FAFAFBFB", "x. c gray98", "c. c #FAFAFBFBFBFB", "v. c #FBFBFBFBFBFB", "b. c gray99", "n. c #FDFDFDFDFDFD", "m. c #FEFEFEFEFEFE", "M. c None", /* pixels */ "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "A s d e f.f.f.s.f.s.s.q.- : - = ", "t -.=.O.m.m.m.u.y.v.z.k.U Q R * ", "p =.o.( m.v.z.' ) f.h.f.x n I % ", "i *.../ v.4.2.J V 1.&.s.u h G $ ", "t #.| ! v.U ! E I G f a.y a V # ", "w @.{ T x.[ Z D B c H e.4 a M @ ", "q +.( K z.u.H n b l 5.q.2 5 n + ", "0 ..~ C h.h.e.$.%.7.q.8.1 5 j O ", "9 ..E N h.s.a.3.5.q.q.8.< 3 h X ", ", } ] P h.f.a.t.e.q.q.q.6 h g X ", ": : - * <.,.>.>.;.;.;.` . X X X ", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M." }; springlobby-0.169/src/images/flags/CC.xpm0000600000176000000410000000766112105760300021574 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CC_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 152 2", " c black", ". c #000005050000", "X c #000009090000", "o c #00000B0B0000", "O c #00000F0F0000", "+ c #000011110000", "@ c #000017170000", "# c #000019190000", "$ c #00001D1D0000", "% c #000023230000", "& c #000025250000", "* c #00002B2B0000", "= c #000031310000", "- c #000037370000", "; c #00003D3D0000", ": c #00003F3F0000", "> c #000043430000", ", c #000045450000", "< c #000049490000", "1 c #00004B4B0000", "2 c #00004D4D0000", "3 c #00004F4F1919", "4 c #000051510000", "5 c #000053530000", "6 c #000055550000", "7 c #000057570000", "8 c #000059590000", "9 c #00005D5D0303", "0 c #00005D5D1717", "q c #0B0B7A7A3838", "w c #10107D7D3B3B", "e c #13137F7F3E3E", "r c #14147F7F3F3F", "t c #181882824343", "y c #191982824343", "u c #191982824444", "i c #1A1A84844444", "p c #1E1E85854747", "a c #1F1F86864848", "s c #1F1F87874848", "d c #242489894D4D", "f c #252589894D4D", "g c #25258B8B4E4E", "h c #26268B8B4E4E", "j c #2E2E8C8C4B4B", "k c #2A2A8A8A5252", "l c #2B2B8E8E5353", "z c #2C2C8A8A5151", "x c #2C2C8E8E5353", "c c #2F2F8D8D5555", "v c #31318F8F5757", "b c #33338F8F5858", "n c #38388E8E5050", "m c #343493935959", "M c #363691915B5B", "N c #373795955D5D", "B c #3C3C93935454", "V c #3E3E92925656", "C c #393994945D5D", "Z c #3A3A96965E5E", "A c #3D3D97976060", "S c #3B3B98986060", "D c #3C3C98986161", "F c #3D3D99996161", "G c #3F3F99996262", "H c #4E4E92923232", "J c #434396965A5A", "K c #464698985B5B", "L c #444498985E5E", "P c #4C4C9B9B5252", "I c #4C4C9D9D5E5E", "U c #5C5C9A9A4242", "Y c #424297976565", "T c #404099996363", "R c #42429B9B6666", "E c #44449C9C6767", "W c #45459D9D6767", "Q c #46469C9C6868", "! c #47479D9D6A6A", "~ c #4D4D9C9C6363", "^ c #4B4B9A9A6F6F", "/ c #49499E9E6A6A", "( c #49499F9F6C6C", ") c #4B4B9E9E6C6C", "_ c #52529F9F6868", "` c #55559F9F6F6F", "' c #54549D9D7979", "] c #4F4FA0A06666", "[ c #4949A0A06C6C", "{ c #4E4EA1A16F6F", "} c #4F4FA2A27070", "| c #5050A0A06F6F", " . c #5757A1A16D6D", ".. c #5757A2A26C6C", "X. c #5A5AA7A76F6F", "o. c #5454A4A47474", "O. c #5959A0A07373", "+. c #5959A5A57171", "@. c #5858A6A67777", "#. c #5D5DA9A97B7B", "$. c #65659E9E4D4D", "%. c #6060A2A25151", "&. c #6A6AA4A45353", "*. c #6F6FA6A65858", "=. c #7C7CADAD5F5F", "-. c #6464AEAE7070", ";. c #6161ACAC7F7F", ":. c #6C6CADAD7171", ">. c #5F5FA2A28383", ",. c #6565AEAE8282", "<. c #6666AEAE8383", "1. c #6969B0B08585", "2. c #6A6AB1B18787", "3. c #6D6DB3B38989", "4. c #6F6FB3B38A8A", "5. c #7070B5B58C8C", "6. c #7272B4B48F8F", "7. c #7474B3B38F8F", "8. c #7777B5B59191", "9. c #8C8CAAAA4747", "0. c #9393B0B05151", "q. c #8181B3B36D6D", "w. c #8181B5B57676", "e. c #8787B9B97676", "r. c #A8A8BABA4D4D", "t. c #ADADC4C47272", "y. c #B9B9C0C06B6B", "u. c #D1D1BEBE2727", "i. c #C2C2C0C03E3E", "p. c #CFCFC3C33C3C", "a. c #E6E6CCCC3E3E", "s. c #CACAC4C44848", "d. c #CFCFC9C95252", "f. c #D4D4C4C44141", "g. c #DADAC9C94141", "h. c #DADACACA4F4F", "j. c #E1E1CDCD4A4A", "k. c #E2E2CFCF5151", "l. c #ECECD2D24F4F", "z. c #E3E3D1D15454", "x. c #EAEAD4D45555", "c. c #FEFEDDDD5858", "v. c #E2E2D3D36565", "b. c #FDFDEDED5454", "n. c #FEFEEEEE5959", "m. c #FEFEF1F17D7D", "M. c #FFFFF6F67E7E", "N. c #ACACCCCC8A8A", "B. c #B3B3CDCD8D8D", "V. c #F3F3E2E28484", "C. c #FFFFE9E98282", "Z. c None", /* pixels */ "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "9 9 9 9 8 7 5 2 < > ; - 7 * & $ ", "9 B.M.V.8.7.5.3.1.,.;.w.v.q.) @ ", "9 C.>.e.n.' +.` ! R F N %.x ) O ", "0 m.t.y.b.O.^ x.k.F 0.v l h =.X ", "3 N.c.b.-. .z.d.S r.g.9.h U h.* ", "7 6.:.X..._ l.I K P i.d a i *. ", "5 4.| [ ] ~ j.s.V k d a u u.M ", "< 2.[ W T L J a.p.d a t r w b ", ", <.W F C m B n j p t e H q c ", "; ;.#.@.o.| ) ! Y F C &.f.$.z ", "- = * % $ @ + X . # ", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z." }; springlobby-0.169/src/images/flags/CD.xpm0000600000176000000410000000625012105760300021566 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CD_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 117 2", " c black", ". c #00008484B2B2", "X c #00008686B2B2", "o c #00008686B4B4", "O c #00008888B4B4", "+ c #00008989B6B6", "@ c #00008989B9B9", "# c #00008D8DBFBF", "$ c #00009292C1C1", "% c #00009494C4C4", "& c #00009898CBCB", "* c #0000B2B2E8E8", "= c #0000B4B4EDED", "- c #0000B9B9F4F4", "; c #0000BDBDF8F8", ": c #0000BFBFFBFB", "> c #3D3DFFFFA0A0", ", c #0000C1C1FDFD", "< c #0202C4C4FFFF", "1 c #0404C8C8FFFF", "2 c #0505CACAFFFF", "3 c #0505CBCBFFFF", "4 c #0505CFCFFFFF", "5 c #0707FFFFF6F6", "6 c #4848B1B1D1D1", "7 c #4949B2B2D3D3", "8 c #4949B3B3D4D4", "9 c #4A4AB4B4D6D6", "0 c #4A4AB5B5D6D6", "q c #4A4AB6B6D7D7", "w c #4B4BB7B7D9D9", "e c #4B4BB8B8DADA", "r c #6161BABAD4D4", "t c #6161BBBBD4D4", "y c #6262BBBBD5D5", "u c #6262BCBCD5D5", "i c #6262BDBDD7D7", "p c #6363BEBED9D9", "a c #6363BFBFDADA", "s c #4E4EC8C88484", "d c #5454CECEF4F4", "f c #5555D0D0F7F7", "g c #5555D1D1F8F8", "h c #5656D3D3FAFA", "j c #5757D4D4FBFB", "k c #5757D5D5FDFD", "l c #5858D7D7FFFF", "z c #6464C0C0DBDB", "x c #6565C2C2DDDD", "c c #6666C4C4E0E0", "v c #6C6CD4D4F3F3", "b c #6D6DD7D7F8F8", "n c #6E6ED9D9FAFA", "m c #6F6FDBDBFDFD", "M c #6F6FDCDCFEFE", "N c #7070DEDEFFFF", "B c #7070E0E0FFFF", "V c #7171E0E0FFFF", "C c #B2B200000000", "Z c #B8B800000000", "A c #C1C100000000", "S c #C4C400000000", "D c #C8C800000000", "F c #CACA00000000", "G c #F2F200000E0E", "H c #F4F400000E0E", "J c #F5F500000F0F", "K c #F6F600000F0F", "L c #F7F700000F0F", "P c #F8F800000F0F", "I c #F9F900000F0F", "U c #FCFC00000F0F", "Y c #FEFE00000F0F", "T c #FFFF00000F0F", "R c #FFFF00001010", "E c #FFFF00001111", "W c #FFFF37370D0D", "Q c #FFFF38380D0D", "! c #F5F525252828", "~ c #FEFE25252929", "^ c #FFFF25252A2A", "/ c #C8C862620000", "( c #FFFF53532626", ") c #FFFF56562727", "_ c #FFFF63631919", "` c #FFFF64641919", "' c #FFFF65651919", "] c #FFFF78783131", "[ c #B8B8B6B60000", "{ c #C1C1DADA0707", "} c yellow", "| c #FFFFFFFF0A0A", " . c #FFFFFDFD1010", ".. c #FFFFFFFF1010", "X. c #FFFFFFFF1111", "o. c #FFFFFFFF1212", "O. c #FFFFFFFF2323", "+. c #FFFFFBFB2A2A", "@. c #FFFFFFFF2B2B", "#. c #EFEFFFFF6F6F", "$. c #BCBCEEEE8484", "%. c #BDBDEFEF8585", "&. c #BFBFF1F18686", "*. c #B2B2EEEEACAC", "=. c #B4B4EFEFABAB", "-. c #B3B3F8F8A1A1", ";. c #BBBBF6F6AAAA", ":. c #B9B9FBFBB6B6", ">. c #BCBCFCFCB7B7", ",. c #C5C5EFEF9191", "<. c #C5C5F1F19090", "1. c #C6C6F3F39191", "2. c #CCCCF1F19B9B", "3. c #C3C3F6F6B2B2", "4. c #C9C9FDFDB7B7", "5. c #F6F6FFFF8181", "6. c None", /* pixels */ "6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.", "6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.", "6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.", "4 4 > 4 4 2 2 2 , ; - = * { D A ", "4 >.O.:.B B N m b b v 2.@.( ! C ", "5 @.o.o.-.l j g d <.o.W J G ^ Z ", "4 5.o.#.k g g 1.o.W L J T T ] [ ", "2 4.l ;.g *.o.W I J T T _ o.,.# ", "< m g =.o.Q T I T T _ o.$.9 z + ", ", 3.| Q T L T T ' o.&.q 9 9 i O ", "} ) I I T T ' o.&.e q 9 7 6 y . ", "D T E E ' o.&.e e e q 9 7 6 y . ", "D ^ ' | &.c c c x x z y y y y . ", "S / s & & & % $ $ + O O . . . . ", "6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.", "6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6." }; springlobby-0.169/src/images/flags/CF.xpm0000600000176000000410000001010512105760300021562 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CF_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 160 2", " c black", ". c #00001D1D0000", "X c #000023230000", "o c #00005A5A0000", "O c #00005E5E0000", "+ c #0C0C6D6D0C0C", "@ c #00000000CECE", "# c #00000C0CCECE", "$ c #00001010D3D3", "% c #00001616D7D7", "& c #00001C1CD9D9", "* c #00001F1FDCDC", "= c #00002525DEDE", "- c #09092F2FD8D8", "; c #00002424E3E3", ": c #00002929E1E1", "> c #02023030E7E7", ", c #05053C3CE7E7", "< c #0A0A3B3BE8E8", "1 c #0A0A3C3CE9E9", "2 c #0A0A3E3EE9E9", "3 c #0C0C3E3EE8E8", "4 c #0C0C3E3EE9E9", "5 c #101096961010", "6 c #141493931414", "7 c #141499991414", "8 c #191995951919", "9 c #191996961919", "0 c #1F1F98981F1F", "q c #3F3F8F8F0000", "w c #24249B9B2424", "e c #2A2A9E9E2A2A", "r c #3333A5A53232", "t c #3636A2A23636", "y c #3434AFAF3434", "u c #3A3AB2B23A3A", "i c #3B3BB2B23A3A", "p c #4040B4B43F3F", "a c #7474BCBC0000", "s c #4A4AA7A74A4A", "d c #4040B5B54040", "f c #4545B7B74545", "g c #4949B9B94949", "h c #4949BABA4949", "j c #4F4FBCBC4F4F", "k c #6A6AC7C76A6A", "l c #6F6FC8C86F6F", "z c #5D5D8282F1F1", "x c #62628686F2F2", "c c #66668989F4F4", "v c #6B6B8D8DF5F5", "b c #6F6F9090F6F6", "n c #74749393F2F2", "m c #77779E9EF2F2", "M c #7A7A9F9FF4F4", "N c #7B7B9999F8F8", "B c #7D7D9C9CF9F9", "V c #7F7FA3A3F5F5", "C c #7F7FA1A1F9F9", "Z c #D8D800000000", "A c #DADA00000000", "S c #F0F000000000", "D c #F3F300000000", "F c #F5F523232323", "G c #F6F629292929", "H c #F6F62A2A2A2A", "J c #F7F72F2F2F2F", "K c #F8F835353535", "L c #F8F836363636", "P c #F9F93B3B3B3B", "I c #F9F93B3B3C3C", "U c #F6F642424242", "Y c #F7F746464646", "T c #FAFA41414141", "R c #FAFA41414242", "E c #FBFB47474747", "W c #FCFC4C4C4C4C", "Q c #FCFC69696969", "! c #FDFD6D6D6D6D", "~ c #BBBBBBBB0202", "^ c #AAAAD5D50B0B", "/ c #ACACD6D60E0E", "( c #AEAED7D71313", ") c #B0B0DADA1919", "_ c #B3B3DCDC1E1E", "` c #B6B6DADA2F2F", "' c #BABAE1E12E2E", "] c #BCBCE2E23434", "[ c #BFBFE2E23A3A", "{ c #C2C2C2C20000", "} c #C4C4C4C40000", "| c #CCCCCCCC0000", " . c #CDCDCDCD0000", ".. c #CECECECE0000", "X. c #D1D1D1D10000", "o. c #D3D3D3D30000", "O. c #D4D4D4D40000", "+. c #D6D6D6D60000", "@. c #DDDDDDDD0000", "#. c #DFDFDFDF0000", "$. c #DFDFE2E20000", "%. c #C1C1E4E43F3F", "&. c #F2F2F2F22C2C", "*. c #F2F2F2F22F2F", "=. c #F2F2F2F23232", "-. c #F3F3F3F33535", ";. c #F4F4F4F43939", ":. c #F5F5F5F53D3D", ">. c #C3C3E5E54444", ",. c #CECEEAEA6666", "<. c #F7F7F7F74B4B", "1. c #F8F8F8F85050", "2. c #F9F9F9F95555", "3. c #F9F9F9F95858", "4. c #FAFAFAFA5D5D", "5. c #EDEDEDED7E7E", "6. c #FBFBFBFB6262", "7. c #FFFFFFFF7F7F", "8. c #B7B7B7B7B7B7", "9. c #8282A5A5F6F6", "0. c #8181A0A0F9F9", "q. c #8585A8A8F7F7", "w. c #8A8AA5A5F8F8", "e. c #9393ACACFAFA", "r. c #9494B3B3FAFA", "t. c #9797B5B5FAFA", "y. c #9C9CB3B3FBFB", "u. c #8787C8C88787", "i. c #8B8BCACA8B8B", "p. c #8E8ECBCB8E8E", "a. c #9898CFCF9898", "s. c #9090D1D19191", "d. c #9494D3D39494", "f. c #9D9DD8D89D9D", "g. c #A0A0DADAA1A1", "h. c #A3A3D8D8A3A3", "j. c #A6A6DADAA6A6", "k. c #A9A9DBDBA9A9", "l. c #B9B9E2E2B9B9", "z. c #EDEDEDED8F8F", "x. c #E4E4E4E49999", "c. c gray77", "v. c #E4E4E4E4E4E4", "b. c #E4E4E4E4E9E9", "n. c #F4F4F4F4F4F4", "m. c #F4F4F4F4F5F5", "M. c gray96", "N. c #F5F5F5F5F6F6", "B. c #F6F6F6F6F6F6", "V. c gray97", "C. c #F8F8F8F8F8F8", "Z. c #F9F9F9F9F9F9", "A. c #FBFBFBFBFBFB", "S. c #FBFBFBFBFEFE", "D. c gray99", "F. c #FCFCFCFCFDFD", "G. c #FDFDFCFCFDFD", "H. c #FDFDFDFDFDFD", "J. c #FEFEFEFEFEFE", "K. c None", /* pixels */ "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "- 4 ~ 1 2 2 : D S ; : = * * % $ ", "4 x.7.z.t.r.e.! Q w.q.9.V M m # ", "< y.5.0.V B N W E b v c x z n @ ", "b.J.S.S.S.S.A.E T Z.C.V.N.N.N.c.", "v.J.J.J.S.J.A.T P C.V.N.N.N.N.8.", "s l.k.j.g.g.f.P L d.s.p.i.u.a.+ ", "O l j g f p i L J e w 0 9 6 t . ", "o k g f d i y J H w 0 9 7 5 r X ", "a ,.>.%.[ ] ' H F _ ) ( / ^ ` q ", "} 6.4.3.2.1.<.Y T :.;.-.=.*.*.| ", "{ } ..O.$.$.@.A Z +.X.X.....| | ", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K." }; springlobby-0.169/src/images/flags/CG.xpm0000600000176000000410000000661312105760300021574 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CG_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 127 2", " c black", ". c #0000B1B10000", "X c #0000B7B70000", "o c #0000B9B90000", "O c #0000BBBB0000", "+ c #0000BDBD0000", "@ c #0000BFBF0000", "# c #0000C1C10000", "$ c #0000C3C30000", "% c #0000C7C70000", "& c #4D4DD5D50000", "* c #4949D6D64949", "= c #4949D7D74949", "- c #4B4BD7D74B4B", "; c #4D4DD7D74B4B", ": c #4D4DD8D84B4B", "> c #4F4FD9D94F4F", ", c #5050D8D84C4C", "< c #5050D9D95050", "1 c #5151D9D95151", "2 c #5353DBDB5353", "3 c #5454DBDB5454", "4 c #5858DCDC5858", "5 c #5858DCDC5959", "6 c #5959DCDC5959", "7 c #5C5CDEDE5C5C", "8 c #5F5FDFDF5F5F", "9 c #6666DDDD6666", "0 c #6E6EDFDF6969", "q c #6D6DDFDF6D6D", "w c #6A6AE0E06A6A", "e c #6F6FE1E16F6F", "r c #7070E2E27171", "t c #7272E2E27373", "y c #7474E2E27474", "u c #7676E3E37676", "i c #7777E3E37777", "p c #7979E4E47979", "a c #7B7BE4E47A7A", "s c #7B7BE4E47B7B", "d c #DDDD00000000", "f c #DFDF00000000", "g c #E1E100000000", "h c #E3E300000000", "j c #E5E500000000", "k c #E7E700000000", "l c #E9E900000000", "z c #EBEB00000000", "x c #F1F10B0B0B0B", "c c #F1F10F0F0E0E", "v c #F2F210101010", "b c #F2F213131313", "n c #F2F214141414", "m c #F3F319191919", "M c #F3F31A1A1A1A", "N c #F4F41E1E1E1E", "B c #F4F41F1F1F1F", "V c #F4F420202020", "C c #F5F527272525", "Z c #F5F52B2B2323", "A c #F5F528282626", "S c #F5F52A2A2525", "D c #F5F52B2B2424", "F c #F2F22C2C2C2C", "G c #F2F22F2F2F2F", "H c #F2F232323232", "J c #F3F332323232", "K c #F3F335353535", "L c #F4F436363636", "P c #F4F439393939", "I c #F4F43B3B3B3B", "U c #F5F53D3D3D3D", "Y c #F5F53F3F3F3F", "T c #EDED49490000", "R c #F6F642424242", "E c #F6F644444444", "W c #F7F749494949", "Q c #F7F753534646", "! c #9E9EE8E84444", "~ c #A5A5EAEA4545", "^ c #ABABEBEB4545", "/ c #B1B1ECEC4646", "( c #B3B3EDED4646", ") c #B4B4EDED4747", "_ c #BFBFF0F04747", "` c #ACACEBEB6262", "' c #EDEDBFBF0000", "] c #F6F6A0A02C2C", "[ c #F6F6A5A52B2B", "{ c #F6F6AAAA2B2B", "} c #F6F6AFAF2B2B", "| c #F6F6B3B32A2A", " . c #F6F6BDBD2929", ".. c #F7F7AEAE4E4E", "X. c #EDEDC3C30000", "o. c #EFEFC5C50000", "O. c #F1F1C9C90101", "+. c #F3F3CBCB0909", "@. c #F5F5CDCD1111", "#. c #F7F7D1D11717", "$. c #F7F7F7F72E2E", "%. c #F7F7F7F72F2F", "&. c #F7F7F7F73030", "*. c #F7F7F7F73131", "=. c #F8F8F8F83434", "-. c #F8F8F8F83535", ";. c #F8F8F8F83636", ":. c #F8F8F8F83737", ">. c #F9F9F9F93A3A", ",. c #F9F9F9F93B3B", "<. c #F9F9F9F93C3C", "1. c #F9F9F9F93D3D", "2. c #FAFAFAFA3F3F", "3. c #CACAF2F26565", "4. c #F7F7CBCB4B4B", "5. c #FAFAFAFA4040", "6. c #FAFAFAFA4141", "7. c #FAFAFAFA4242", "8. c #F8F8F8F85050", "9. c #F8F8F8F85353", "0. c #F9F9F9F95555", "q. c #F9F9F9F95757", "w. c #F9F9F9F95858", "e. c #FAFAFAFA5C5C", "r. c #FAFAFAFA5D5D", "t. c #FBFBFBFB6060", "y. c None", /* pixels */ "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "% $ $ $ $ $ + + o X #.@.+.O.o.T ", "$ s s s i u t q 0 3.t.r.q.9...z ", "$ s 7 7 4 3 < , _ 7.1.:.*.] W l ", "$ p 7 4 3 < ; ( 7.1.;.&.[ A E l ", "$ u 4 3 < ; ( 7.1.;.&.{ C V Y k ", "$ t 3 , : ( 7.:.;.%.| A N m I k ", "+ e < = ^ 7.:.;.%.| Z B m n L g ", "o w = ~ 7.:.=.$.| A B m n v H f ", "X 9 ! 7.:.;.$. .Z N m b c x G f ", ". ` r.w.q.8.4.Q R Y P L H G F f ", "& +.O.o.X.' l l k k g g f f d d ", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y." }; springlobby-0.169/src/images/flags/CH.xpm0000600000176000000410000000335312105760300021573 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CH_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 66 1", " c black", ". c #E3E300000000", "X c #E5E500000000", "o c #E7E700000000", "O c #E9E900000000", "+ c #EBEB00000000", "@ c #EDED00000000", "# c #EFEF00000000", "$ c #F1F100000000", "% c #F3F300000000", "& c #F5F500000000", "* c #F7F700000000", "= c #F9F900000000", "- c #FBFB00000000", "; c #FDFD00000000", ": c red", "> c #F5F523232323", ", c #F6F629292929", "< c #F6F62A2A2A2A", "1 c #F7F72F2F2F2F", "2 c #F5F53D3D3D3D", "3 c #FAFA3F3F3F3F", "4 c #F6F642424242", "5 c #F7F746464646", "6 c #F7F747474747", "7 c #FAFA41414242", "8 c #FAFA44444444", "9 c #FBFB45454545", "0 c #FBFB47474747", "q c #FBFB49494949", "w c #FCFC4C4C4C4C", "e c #F7F750505050", "r c #F8F857575858", "t c #F9F958585858", "y c #F9F958585959", "u c #F8F85B5B5B5B", "i c #F9F95B5B5B5B", "p c #FAFA5B5B5B5B", "a c #FAFA5D5D5D5D", "s c #FEFE59595959", "d c #FEFE5C5C5C5C", "f c #FEFE5F5F5F5F", "g c #FBFB60606060", "h c #FBFB61616262", "j c #FCFC65656565", "k c #FCFC66666666", "l c #FCFC69696969", "z c #FCFC6A6A6A6A", "x c #FDFD6D6D6D6D", "c c #FDFD72727272", "v c #FDFD75757575", "b c #FEFE79797979", "n c #FEFE7A7A7A7A", "m c #FFFF7B7B7A7A", "M c #FFFF7B7B7B7B", "N c gray97", "B c #F8F8F8F8F8F8", "V c #F9F9F9F9F9F9", "C c gray98", "Z c #FBFBFBFBFBFB", "A c #FBFBFCFCFBFB", "S c gray99", "D c #FDFDFCFCFDFD", "F c #FDFDFDFDFDFD", "G c #FEFEFEFEFEFE", "H c None", /* pixels */ "HHHHHHHHHHHHHHHH", "HHHHHHHHHHHHHHHH", "HHHHHHHHHHHHHHHH", "HHH::::::::==*HH", "HHH:MMMMMvxzj*HH", "HHH:MfsGGGw0g%HH", "HHH:MfsGGV07i%HH", "HHH:vGGSGVVVi#HH", "HHH:MGGGVVVVu#HH", "HHH:xGVVGVNNeOHH", "HHH=zq8VVV1,6OHH", "HHH*j03VNN,>4oHH", "HHH*gaiuuw642oHH", "HHH*%%###OOoo.HH", "HHHHHHHHHHHHHHHH", "HHHHHHHHHHHHHHHH" }; springlobby-0.169/src/images/flags/CI.xpm0000600000176000000410000000634112105760300021574 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CI_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 122 2", " c black", ". c #000081810000", "X c #000083830000", "o c #000087870000", "O c #000089890000", "+ c #00008B8B0000", "@ c #00008F8F0000", "# c #000093930000", "$ c #000097970000", "% c #00009B9B0000", "& c #00009D9D0000", "* c #0000A7A70000", "= c #0000A9A90000", "- c #0000ABAB0000", "; c #0000AFAF0000", ": c #0000B1B10000", "> c #0B0BC2C20B0B", ", c #0F0FC4C40E0E", "< c #1010C4C41010", "1 c #1313C5C51313", "2 c #1414C6C61414", "3 c #1919C7C71919", "4 c #1919C8C81919", "5 c #1A1AC8C81A1A", "6 c #1F1FC9C91F1F", "7 c #1F1FCACA1F1F", "8 c #2020CACA2020", "9 c #2525CBCB2525", "0 c #2525CCCC2525", "q c #2626CDCD2626", "w c #2B2BCDCD2B2B", "e c #2B2BCECE2B2B", "r c #2C2CCACA2C2C", "t c #2F2FCACA2F2F", "y c #2F2FCBCB2F2F", "u c #2C2CCECE2C2C", "i c #3131CFCF3131", "p c #3232CCCC3232", "a c #3333CCCC3232", "s c #3535CDCD3535", "d c #3636CDCD3636", "f c #3B3BCFCF3B3B", "g c #3131D0D03131", "h c #3737D1D13737", "j c #3F3FD2D23F3F", "k c #4444D3D34444", "l c #4949D5D54949", "z c #4E4ED7D74E4E", "x c #5353D8D85353", "c c #5858D9D95757", "v c #5C5CDADA5C5C", "b c #EDED53530000", "n c #EFEF5B5B0000", "m c #F1F163630000", "M c #F3F367670000", "N c #F7F76F6F0000", "B c #F5F575750000", "V c #F9F977770000", "C c #FBFB7B7B0000", "Z c #FDFD7F7F0000", "A c #FDFD83830000", "S c #FDFD87870000", "D c #FFFF85850000", "F c #FFFF87870000", "G c #FFFF89890000", "H c #FFFF91910000", "J c #F9F9AAAA3A3A", "K c #FAFAADAD3F3F", "L c #FAFAAEAE3F3F", "P c #FAFAB1B14444", "I c #FBFBB0B04545", "U c #FBFBB1B14545", "Y c #FBFBB4B44949", "T c #FCFCB3B34B4B", "R c #FCFCB6B64F4F", "E c #FCFCB7B74F4F", "W c #F9F9B5B55555", "Q c #FDFDB5B55050", "! c #FDFDB7B75454", "~ c #FDFDB9B95353", "^ c #FDFDB9B95454", "/ c #F9F9B9B95858", "( c #FAFABCBC5D5D", ") c #FEFEBABA5959", "_ c #FEFEBBBB5959", "` c #FEFEBCBC5858", "' c #FEFEBDBD5C5C", "] c #FEFEBFBF5F5F", "[ c #FBFBBEBE6262", "{ c #FCFCC0C06666", "} c #FCFCC3C36A6A", "| c #FDFDC4C46F6F", " . c #FEFEC6C67373", ".. c #FEFEC7C77777", "X. c #FEFEC8C87676", "o. c #FEFEC8C87979", "O. c #FFFFCACA7A7A", "+. c #FFFFCACA7B7B", "@. c gray82", "#. c LightGray", "$. c #D7D7D7D7D7D7", "%. c gray85", "&. c #DDDDDDDDDDDD", "*. c #E9E9E9E9E9E9", "=. c gray92", "-. c gray93", ";. c #EFEFEFEFEFEF", ":. c #EFEFEFEFF1F1", ">. c #F3F3F3F3F3F3", ",. c #F4F4F4F4F4F4", "<. c gray96", "1. c #F6F6F6F6F6F6", "2. c gray97", "3. c #F8F8F8F8F8F8", "4. c #F9F9F9F9F9F9", "5. c gray98", "6. c #FBFBFBFBFBFB", "7. c gray99", "8. c #FDFDFDFDFDFD", "9. c #FDFDFDFDFEFE", "0. c #FEFEFEFEFEFE", "q. c None", /* pixels */ "q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.", "q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.", "q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.", "H G G F F :.;.=.=.=.=.: : = * = ", "F +.+.+...9.9.9.6.9.6.v c x z & ", "G +.' ' _ 9.9.9.5.5.5.h g u l % ", "F +._ _ ! 9.7.6.5.5.5.y e q k $ ", "F .._ ~ R 7.5.5.5.2.1.e q 8 j # ", "F .~ R T 5.5.5.2.2.1.9 7 3 j @ ", "Z | R Y I 5.5.2.2.1.1.7 3 1 d + ", "C } Y I K 5.5.1.1.1.>.3 2 < y o ", "V [ P K J 2.2.1.1.>.>.1 , > p o ", "N [ ( / W 5.1.2.1.1.>.d y p r . ", "B M m n b &.%.$.$.@.@.+ o o . + ", "q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.", "q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q." }; springlobby-0.169/src/images/flags/CK.xpm0000600000176000000410000000755012105760300021601 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CK_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 149 2", " c black", ". c #000000000303", "X c #000000000909", "o c #000000000B0B", "O c #000000001111", "+ c #000000001919", "@ c #000000001F1F", "# c #000000002323", "$ c #000000002525", "% c #000000002B2B", "& c #000000003131", "* c #000000003737", "= c #000000003939", "- c #000000003F3F", "; c #000000004545", ": c #000000004B4B", "> c #000019196B6B", ", c #000029297777", "< c #20203A3A7676", "1 c #25253D3D7979", "2 c #292941417B7B", "3 c #2A2A42427C7C", "4 c #2D2D46467E7E", "5 c #2E2E46467F7F", "6 c #2F2F47477F7F", "7 c #3E3E51517F7F", "8 c #57571D1D5959", "9 c #59591F1F5D5D", "0 c #373737378181", "q c #323249498282", "w c #32324B4B8282", "e c #34344B4B8383", "r c #37374E4E8585", "t c #37374E4E8686", "y c #383850508686", "u c #393950508686", "i c #3A3A51518787", "p c #3C3C52528989", "a c #3C3C53538989", "s c #3D3D53538989", "d c #3D3D55558A8A", "f c #3E3E54548888", "g c #3E3E55558A8A", "h c #3F3F55558A8A", "j c #444456568383", "k c #404056568A8A", "l c #414157578A8A", "z c #414157578C8C", "x c #424257578C8C", "c c #424258588D8D", "v c #434359598D8D", "b c #444459598C8C", "n c #44445A5A8D8D", "m c #47475C5C8E8E", "M c #4A4A5C5C8888", "N c #48485D5D8F8F", "B c #46465C5C9090", "V c #47475C5C9090", "C c #48485E5E9191", "Z c #4A4A5F5F9292", "A c #4F4F61618B8B", "S c #4B4B60609090", "D c #4B4B60609393", "F c #4C4C60609292", "G c #4C4C61619393", "H c #4E4E62629393", "J c #4D4D61619494", "K c #4E4E63639494", "L c #4F4F63639595", "P c #505065659494", "I c #515165659696", "U c #515165659797", "Y c #515166669797", "T c #525266669595", "R c #535368689898", "E c #55556A6A9A9A", "W c #55556A6A9B9B", "Q c #57576A6A9999", "! c #56566A6A9A9A", "~ c #5A5A6D6D9A9A", "^ c #5A5A6E6E9C9C", "/ c #5B5B6E6E9C9C", "( c #5B5B6E6E9D9D", ") c #5F5F71719E9E", "_ c #5F5F7272A0A0", "` c #6F6F57578F8F", "' c #6B6B61619797", "] c #606071719E9E", "[ c #63637575A0A0", "{ c #63637777A5A5", "} c #64647575A1A1", "| c #67677979A4A4", " . c #68687A7AA4A4", ".. c #6B6B7D7DA6A6", "X. c #6B6B7D7DA7A7", "o. c #6C6C7E7EA7A7", "O. c #70707F7FA1A1", "+. c #6F6F8080A9A9", "@. c #70708181A9A9", "#. c #73738484ABAB", "$. c #75758585ACAC", "%. c #79798989AEAE", "&. c #7C7C8C8CB1B1", "*. c #89891D1D4343", "=. c #8D8D1D1D4141", "-. c #8B8B31315555", ";. c #A5A553536D6D", ":. c #BBBB67677B7B", ">. c #D3D31B1B1919", ",. c #D8D86F6F7373", "<. c #E3E36C6C6B6B", "1. c #E5E573737272", "2. c #E2E278787979", "3. c #EAEA7D7D7A7A", "4. c #828269699595", "5. c #84846D6D9999", "6. c #8F8F76769B9B", "7. c #94947D7DA3A3", "8. c #AFAF7B7B9595", "9. c #86868B8BB3B3", "0. c #90908E8EB7B7", "q. c #9393A0A0C7C7", "w. c #A4A4ACACCACA", "e. c #C7C786869696", "r. c #C5C589899999", "t. c #D9D990909797", "y. c #D8D8A4A4AEAE", "u. c #D4D4ABABB7B7", "i. c #DADAABABB4B4", "p. c #E0E085858787", "a. c #E1E186868989", "s. c #ECEC85858383", "d. c #E8E895959696", "f. c #E6E6B9B9BFBF", "g. c #F0F0AAAAA8A8", "h. c #F0F0ACACABAB", "j. c #D4D4BABAC8C8", "k. c #DFDFBFBFC8C8", "l. c #C3C3C3C3C3C3", "z. c #DDDDD3D3DEDE", "x. c #E6E6C3C3CACA", "c. c #E8E8CECED4D4", "v. c #F1F1F1F1F1F1", "b. c #F3F3F3F3F3F3", "n. c #F4F4F4F4F4F4", "m. c #F6F6F6F6F6F6", "M. c gray97", "N. c #F8F8F8F8F8F8", "B. c None", /* pixels */ "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", ":.` , *.=.> 8 ;.# - * & % $ @ + ", "0 x.z.i.y.j.c.w.o.#.+...| [ ) O ", ">.d.s.1.<.3.2.,.A R L Z M.h ~ X ", "-.f.g.p.a.h.t.8.M H N.v h i M. ", "' k.0.r.e.q.u.7.j N v h i e L ", "9 9.{ 5.4.W X.6.7 N.h y w 6 D l.", ": &._ ( ! Y J V b f y q 4 3 N ", "; %.( ! Y J V x h e M.4 2 1 b. ", "- $.W L Z V x p r q 4 2 v.< b ", "= @.o. .} ] ) ! T D Z m b h h ", "& % $ @ + O X ", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B." }; springlobby-0.169/src/images/flags/CL.xpm0000600000176000000410000000642012105760300021575 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CL_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 123 2", " c black", ". c #00003F3FAFAF", "X c #00005353C1C1", "o c #00005959C3C3", "O c #00005B5BC3C3", "+ c #00005D5DC3C3", "@ c #00006767C7C7", "# c #00006161D3D3", "$ c #52529393D1D1", "% c #56569595D3D3", "& c #54549A9ADADA", "* c #5B5B9898D4D4", "= c #59599E9EDBDB", "- c #5C5CA1A1DADA", "; c #5050A1A1E2E2", ": c #5454A6A6E5E5", "> c #5858A7A7E5E5", ", c #6262A4A4DCDC", "< c #6666A7A7DEDE", "1 c #6A6AAAAADEDE", "2 c #7878ABABDCDC", "3 c #7777B1B1E2E2", "4 c #7676B9B9EBEB", "5 c #7B7BB5B5E4E4", "6 c #7A7AB6B6E5E5", "7 c #DDDD00000000", "8 c #DFDF00000000", "9 c #E1E100000000", "0 c #E3E300000000", "q c #E5E500000000", "w c #E7E700000000", "e c #E9E900000000", "r c #EBEB00000000", "t c #EDED00000000", "y c #EFEF00000000", "u c #F1F100000000", "i c #F3F300000000", "p c #F5F500000000", "a c #F7F700000000", "s c #F1F10B0B0B0B", "d c #F1F10F0F0E0E", "f c #F9F900000000", "g c #FBFB00000000", "h c #FDFD00000000", "j c #F2F210101010", "k c #F2F213131313", "l c #F2F214141414", "z c #F3F319191919", "x c #F4F41E1E1E1E", "c c #F4F41F1F1F1F", "v c #F5F523232323", "b c #F5F524242424", "n c #F2F22C2C2C2C", "m c #F2F22F2F2F2F", "M c #F6F629292929", "N c #F6F62A2A2A2A", "B c #F7F72E2E2E2E", "V c #F7F72F2F2F2F", "C c #F2F232323232", "Z c #F3F332323232", "A c #F3F335353535", "S c #F4F436363636", "D c #F4F439393939", "F c #F5F53D3D3D3D", "G c #F8F834343434", "H c #F8F835353535", "J c #F9F93A3A3A3A", "K c #F9F93B3B3A3A", "L c #FAFA3F3F3F3F", "P c #F6F642424242", "I c #F7F746464646", "U c #F7F74B4B4B4B", "Y c #FAFA40404040", "T c #FAFA44444444", "R c #FBFB45454545", "E c #FBFB49494949", "W c #FBFB4A4A4949", "Q c #FCFC4F4F4F4F", "! c #F8F850505050", "~ c #F9F954545555", "^ c #F9F958585858", "/ c #FAFA5D5D5D5D", "( c #FBFB61616262", ") c #FCFC66666666", "_ c #FCFC6A6A6A6A", "` c #FDFD6F6F6F6F", "' c #8585BABAE5E5", "] c #8585BDBDE6E6", "[ c #9191C3C3E7E7", "{ c #D7D7E9E9F6F6", "} c #D8D8EAEAF7F7", "| c #DADAEAEAF7F7", " . c #DADAEBEBF7F7", ".. c #DFDFEDEDF8F8", "X. c #E5E5D3D3D3D3", "o. c #E7E7E7E7E7E7", "O. c #E9E9E9E9E9E9", "+. c gray92", "@. c #EDEDEFEFEFEF", "#. c #EFEFEFEFEFEF", "$. c #F3F3EBEBEBEB", "%. c #F4F4ECECECEC", "&. c #F4F4EDEDEDED", "*. c #F5F5EDEDEDED", "=. c #F6F6EFEFEFEF", "-. c #F1F1F1F1F1F1", ";. c #F3F3F3F3F3F3", ":. c #F7F7F0F0F0F0", ">. c #F4F4F4F4F4F4", ",. c gray96", "<. c #F6F6F6F6F6F6", "1. c gray97", "2. c #F8F8F1F1F1F1", "3. c #F9F9F2F2F2F2", "4. c #FAFAF2F2F2F2", "5. c #F8F8F8F8F8F8", "6. c #F9F9F9F9F9F9", "7. c gray98", "8. c #FBFBFBFBFBFB", "9. c gray99", "0. c #FDFDFDFDFDFD", "q. c #FDFDFDFDFEFE", "w. c None", /* pixels */ "w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.", "w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.", "w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.", "@ O O O X O 0.0.8.7.1.,.;.-.@.@.", "O 5 } 5 3 ' 0.0.0.8.7.7.7.7.,.+.", "O ..} } = 1 0.0.7.7.7.7.1.,.1.O.", "O ' { [ & < 0.8.7.7.7.,.,.,.1.o.", "# 4 > : ; , 9.7.7.1.1.,.,.,.,.o.", ". 2 * $ $ - 4.:.:.:.:.*.*.$.*.X.", "h ` Q E R Y K S V N b x z l S 9 ", "h _ E R L K G B N v x z k k Z 8 ", "g ) R L K G B N v x z k d s m 8 ", "g ( / ^ ~ ! U I P F D A Z m n 8 ", "i i i t t t r r w w 9 9 8 8 7 7 ", "w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.", "w.w.w.w.w.w.w.w.w.w.w.w.w.w.w.w." }; springlobby-0.169/src/images/flags/CM.xpm0000600000176000000410000001001112105760300021565 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 156 2", " c black", ". c #00005F5F0000", "X c #000063630000", "o c #000067670000", "O c #00006F6F0000", "+ c #000075750000", "@ c #000077770000", "# c #00007B7B0000", "$ c #00007F7F0000", "% c #000083830000", "& c #000085850000", "* c #000087870000", "= c #000089890000", "- c #00008D8D0000", "; c #000091910000", ": c #3A3AB0B03A3A", "> c #3F3FB0B03F3F", ", c #4040B3B33F3F", "< c #4444B1B14444", "1 c #4545B2B24545", "2 c #4545B6B64545", "3 c #4949B4B44949", "4 c #4949B5B54949", "5 c #4F4FB7B74F4F", "6 c #4B4BB8B84B4B", "7 c #4F4FB8B84F4F", "8 c #5050BBBB5050", "9 c #5353B9B95353", "0 c #5454BABA5454", "q c #5454BABA5555", "w c #5454BDBD5454", "e c #5858BABA5858", "r c #5858BCBC5858", "t c #5858BCBC5959", "y c #5959BFBF5959", "u c #5C5CBDBD5C5C", "i c #5D5DBCBC5D5D", "p c #5C5CBEBE5C5C", "a c #5F5FBFBF5F5F", "s c #6161BEBE6262", "d c #6666C0C06666", "f c #6A6AC3C36A6A", "g c #6F6FC4C46F6F", "h c #7272C6C67373", "j c #7676C8C87676", "k c #7777CBCB7777", "l c #7979C8C87979", "z c #7979C9C97979", "x c #7B7BCACA7A7A", "c c #7B7BCACA7B7B", "v c #C9C900000000", "b c #E1E100000000", "n c #E3E300000000", "m c #E5E500000000", "M c #E7E700000000", "N c #E9E900000000", "B c #EBEB00000000", "V c #F7F700000000", "C c #F9F900000000", "Z c #FBFB00000000", "A c #FDFD00000000", "S c #F4F41E1E1E1E", "D c #F3F32B2B1919", "F c #F4F430301F1F", "G c #E6E63F3F3434", "H c #F5F523232323", "J c #F5F524242424", "K c #F6F629292929", "L c #F6F62A2A2A2A", "P c #F7F72E2E2E2E", "I c #F7F72F2F2F2F", "U c #F5F535352424", "Y c #F6F63A3A2B2B", "T c #F5F53D3D3D3D", "R c #F8F834343434", "E c #F8F83C3C3636", "W c #F9F93B3B3A3A", "Q c #F9F93C3C3C3C", "! c #E7E745453A3A", "~ c #F7F740403030", "^ c #F4F449493939", "/ c #F8F847473636", "( c #F9F94C4C3D3D", ") c #E8E84A4A4040", "_ c #EAEA4F4F4646", "` c #EBEB55554B4B", "' c #E8E859595050", "] c #ECEC5A5A5151", "[ c #EDED5E5E5454", "{ c #F6F642424242", "} c #F7F746464646", "| c #F7F74B4B4B4B", " . c #FAFA41414242", ".. c #FAFA42424242", "X. c #FBFB47474747", "o. c #FBFB4C4C4646", "O. c #FCFC4B4B4B4B", "+. c #FCFC4C4C4C4C", "@. c #FDFD51515151", "#. c #FCFC65656565", "$. c #FBFB6E6E6060", "%. c #FCFC69696969", "&. c #FDFD6D6D6D6D", "*. c #F1F17B7B7474", "=. c #FDFD70707171", "-. c #F7F7B6B63030", ";. c #FAFABCBC4040", ":. c #DDDDDDDD0000", ">. c #DFDFDFDF0000", ",. c #F7F7C3C32F2F", "<. c #F8F8C4C43535", "1. c #F9F9C5C53C3C", "2. c #F8F8DEDE3636", "3. c #F9F9DDDD3B3B", "4. c #E1E1E1E10000", "5. c #E3E3E3E30000", "6. c #E5E5E5E50000", "7. c #E7E7E7E70000", "8. c #E9E9E9E90000", "9. c #EBEBEBEB0000", "0. c #EDEDEFEF0000", "q. c #EFEFEFEF0000", "w. c #F1F1F1F10000", "e. c #F3F3F3F30000", "r. c #F5F5F5F50000", "t. c #F1F1F1F10B0B", "y. c #F1F1F1F10E0E", "u. c #F2F2F2F21010", "i. c #F2F2F2F21313", "p. c #F2F2F2F21414", "a. c #F3F3F3F31919", "s. c #F3F3F3F31A1A", "d. c #F4F4F4F41F1F", "f. c #F4F4F4F42020", "g. c #F5F5F5F52525", "h. c #F5F5F5F52626", "j. c #F2F2F2F22C2C", "k. c #F2F2F2F22F2F", "l. c #F6F6F6F62B2B", "z. c #F6F6F6F62C2C", "x. c #F2F2F2F23232", "c. c #F3F3F3F33232", "v. c #F3F3F3F33535", "b. c #F7F7F7F73131", "n. c #F4F4F4F43636", "m. c #F4F4F5F53B3B", "M. c #F5F5F5F53F3F", "N. c #F8F8F8F83737", "B. c #FAFAC7C74141", "V. c #F6F6F6F64444", "C. c #F7F7F7F74949", "Z. c #F7F7F7F74E4E", "A. c #F8F8F8F85353", "S. c #F9F9F9F95757", "D. c #FAFAFAFA5C5C", "F. c None", /* pixels */ "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "; = = = - b A A A C V r.r.w.0.0.", "& c c k j *.=.&.%.#.$.D.S.A.Z.9.", "= c a u y [ @.+.X...( N.b.z.C.9.", "& c u u w ] O.X...Q / b.l.h.V.6.", "= j q q 8 ` o.B.1.E ~ l.h.f.M.6.", "% h 9 7 4 ` ;.3.2.-.Y h.d.s.m.7.", "$ g 7 3 2 ! Q <.,.L U f.s.p.n.6.", "# f 3 < < ! R P L J D s.p.u.c.>.", "# s < : : ! P K H S D p.y.t.k.>.", "O s i e q ' | } { T ^ v.x.k.k.:.", "+ o X . . v B B M M b 4.>.:.:.:.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F." }; springlobby-0.169/src/images/flags/CN.xpm0000600000176000000410000000712112105760300021576 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CN_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 136 2", " c black", ". c #9D9D00000000", "X c #9F9F00000000", "o c #A1A100000000", "O c #A3A300000000", "+ c #A5A500000000", "@ c #A7A700000000", "# c #A9A900000000", "$ c #ABAB00000000", "% c #AFAF00000000", "& c #B3B300000000", "* c #B7B700000000", "= c #B9B900000000", "- c #BDBD00000000", "; c #C1C100000000", ": c #C3C300000000", "> c #C7C700000000", ", c #CBCB00000000", "< c #CDCD00000000", "1 c #CFCF00000000", "2 c #D1D100000000", "3 c #D3D300000000", "4 c #D5D500000000", "5 c #D7D700000000", "6 c #D0D00B0B0B0B", "7 c #D1D10F0F0E0E", "8 c #D1D110101010", "9 c #D3D313131313", "0 c #D3D314141414", "q c #D4D419191919", "w c #D5D519191919", "e c #D5D51A1A1A1A", "r c #D5D51E1E1E1E", "t c #D6D61F1F1F1F", "y c #D7D71F1F1F1F", "u c #D7D720202020", "i c #D7D723232323", "p c #D6D62C2C2C2C", "a c #D6D62F2F2F2F", "s c #D7D72F2F2F2F", "d c #D8D824242424", "f c #D9D925252525", "g c #D9D926262626", "h c #D9D929292929", "j c #D9D92A2A2A2A", "k c #D9D92B2B2B2B", "l c #DADA2B2B2B2B", "z c #DBDB2C2C2C2C", "x c #DBDB2E2E2E2E", "c c #DBDB2F2F2F2F", "v c #D8D832323232", "b c #DBDB30303030", "n c #D8D835353535", "m c #D8D836363636", "M c #DCDC31313131", "N c #DCDC34343434", "B c #DDDD34343434", "V c #DDDD35353535", "C c #DDDD36363636", "Z c #DEDE37373636", "A c #DEDE37373737", "S c #DADA39393939", "D c #DADA3B3B3B3B", "F c #DBDB3D3D3D3D", "G c #DEDE3A3A3A3A", "H c #DEDE3B3B3A3A", "J c #DEDE3B3B3B3B", "K c #DEDE3B3B3C3C", "L c #DCDC3F3F3F3F", "P c #DEDE3C3C3C3C", "I c #DFDF3C3C3D3D", "U c #E0E03F3F3F3F", "Y c #E5E545450000", "T c #DCDC42424242", "R c #DFDF40404040", "E c #DDDD44444444", "W c #DDDD46464646", "Q c #DFDF49494949", "! c #DFDF4B4B4B4B", "~ c #E0E041414242", "^ c #E1E142424141", "/ c #E0E042424242", "( c #E1E144444444", ") c #E1E145454545", "_ c #E1E147474747", "` c #E3E349494949", "' c #E3E34A4A4949", "] c #E1E14E4E4E4E", "[ c #E3E34F4F4F4F", "{ c #E4E44F4F4F4F", "} c #E4E452524B4B", "| c #E1E150505050", " . c #E2E253535353", ".. c #E2E254545555", "X. c #E3E357575757", "o. c #E5E553535353", "O. c #E4E454545454", "+. c #E6E657575454", "@. c #E3E358585858", "#. c #E6E658585858", "$. c #E7E75C5C5959", "%. c #E4E45C5C5C5C", "&. c #E4E45D5D5D5D", "*. c #EAEA7F7F4747", "=. c #E6E660606060", "-. c #E6E661616262", ";. c #E7E765656565", ":. c #E8E866666666", ">. c #E8E869696969", ",. c #E8E86A6A6A6A", "<. c #E8E86F6F6D6D", "1. c #E9E96F6F6F6F", "2. c #EAEA72727373", "3. c #ECEC79797676", "4. c #EDED7F7F7B7B", "5. c #EDED89895050", "6. c #ECEC90904646", "7. c #EDED92924646", "8. c #EDED96964C4C", "9. c #EFEF98985959", "0. c #F0F09B9B5454", "q. c #EDED84847979", "w. c #EEEE89897979", "e. c #F1F1A8A85151", "r. c #F2F2A5A57777", "t. c #F5F5BFBF7171", "y. c #F5F5CBCB4B4B", "u. c #F5F5CCCC4B4B", "i. c #F6F6CFCF5151", "p. c #F9F9DADA7474", "a. c #FAFADCDC7B7B", "s. c #FAFADDDD7A7A", "d. c #FAFAE2E25C5C", "f. c #FBFBE6E65C5C", "g. c #FDFDF3F35F5F", "h. c None", /* pixels */ "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "4 4 3 4 4 Y 1 1 1 , > > ; ; - - ", "4 4.a.q.r.p.t.<.,.:.=.%.+. .] * ", "4 s.g.d.$.0.i.8._ R K A M x Q & ", "3 w.f.9.+.e.y.*.R I A M k g E % ", "3 3.#.+.5.y.6.R K A b l g u L $ ", "3 2.o.{ } 7.I G A b l g r q D $ ", "1 <.{ ` _ R P A x l g r q 0 m O ", "1 ,.' _ I G A x l d t q 0 8 v o ", ", ;.( U G m x l u r q 0 7 6 a o ", "> -.&.#...| Q E T F D m v a a X ", "> ; ; - = * & % $ $ $ o o X X o ", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h." }; springlobby-0.169/src/images/flags/CO.xpm0000600000176000000410000001011312105760300021572 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CO_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 159 2", " c black", ". c #000000009D9D", "X c #000000009F9F", "o c #00000101C7C7", "O c #00000909C7C7", "+ c #00001111C7C7", "@ c #10104A4ACFCF", "# c #14144E4ED0D0", "$ c #18185151CECE", "% c #1D1D5656CFCF", "& c #19195252D2D2", "* c #1D1D5555D0D0", "= c #1F1F5656D4D4", "- c #22225959D2D2", "; c #23235A5AD2D2", ": c #24245A5AD6D6", "> c #28285E5ED3D3", ", c #28285C5CD4D4", "< c #2A2A5E5ED7D7", "1 c #2E2E6161D6D6", "2 c #2E2E6262D5D5", "3 c #2F2F6262D8D8", "4 c #33336464D5D5", "5 c #33336666D7D7", "6 c #33336565D8D8", "7 c #34346767DADA", "8 c #39396A6AD5D5", "9 c #3E3E6E6ED6D6", "0 c #38386969D9D9", "q c #39396B6BD9D9", "w c #3A3A6B6BDCDC", "e c #3E3E6E6EDADA", "r c #3E3E6F6FDADA", "t c #40406F6FDDDD", "y c #42427272DCDC", "u c #43437373DCDC", "i c #45457373DFDF", "p c #48487676DDDD", "a c #48487777DDDD", "s c #4C4C7A7ADFDF", "d c #4D4D7B7BDEDE", "f c #49497878E0E0", "g c #52527E7EE0E0", "h c #52527F7FE0E0", "j c #56568282E1E1", "k c #6A6A9090E7E7", "l c #71719595E7E7", "z c #75759999E7E7", "x c #ADAD00000000", "c c #B9B900000000", "v c #BBBB00000000", "b c #BDBD00000000", "n c #BFBF00000000", "m c #C1C100000000", "M c #C3C300000000", "N c #C5C500000000", "B c #C9C900000000", "V c #CBCB00000000", "C c #CFCF00000000", "Z c #D1D100000000", "A c #D3D300000000", "S c #D7D700000000", "D c #D9D900000000", "F c #DDDD00000000", "G c #D8D80E0E1313", "H c #DADA11111717", "J c #DBDB16161C1C", "K c #DDDD1B1B2020", "L c #DEDE21212525", "P c #DEDE31313636", "I c #E0E026262A2A", "U c #E2E22E2E2E2E", "Y c #E2E22B2B3030", "T c #E3E331313131", "R c #E2E230303535", "E c #E4E434343535", "W c #E6E637373737", "Q c #E4E436363B3B", "! c #E6E63B3B3B3B", "~ c #E5E53B3B4040", "^ c #CFCF7F7F0000", "/ c #E7E740404040", "( c #E7E741414545", ") c #E8E844444444", "_ c #E8E846464B4B", "` c #E9E949494949", "' c #EBEB4C4C4C4C", "] c #ECEC51515151", "[ c #EDED55555555", "{ c #EEEE5B5B5B5B", "} c #EFEF5F5F5F5F", "| c #EDED68686C6C", " . c #F0F064646464", ".. c #CFCF81810000", "X. c #D3D387870000", "o. c #D5D58B8B0000", "O. c #D9D993930000", "+. c #DBDB93930000", "@. c #DDDD97970000", "#. c #DFDF9B9B0000", "$. c #E1E19F9F0000", "%. c #E3E3A3A30000", "&. c #E5E5A7A70000", "*. c #E7E7ABAB0000", "=. c #E9E9ADAD0000", "-. c #E9E9AFAF0000", ";. c #EBEBB1B10000", ":. c #EDEDB1B10000", ">. c #EDEDB3B30000", ",. c #EDEDB5B50000", "<. c #EFEFB7B70000", "1. c #F4F4CCCC2020", "2. c #F5F5CDCD2626", "3. c #F5F5CECE2525", "4. c #F6F6CECE2B2B", "5. c #F6F6CECE2C2C", "6. c #F6F6D0D02B2B", "7. c #F7F7D0D03131", "8. c #F7F7D2D23030", "9. c #F5F5D3D33F3F", "0. c #F8F8D2D23636", "q. c #F8F8D2D23737", "w. c #F8F8D4D43636", "e. c #F9F9D3D33C3C", "r. c #F9F9D4D43D3D", "t. c #F9F9D5D53C3C", "y. c #F6F6D3D34444", "u. c #F7F7D5D54949", "i. c #F7F7D7D74E4E", "p. c #FAFAD5D54242", "a. c #FAFAD7D74141", "s. c #FBFBD7D74747", "d. c #FBFBD9D94646", "f. c #FCFCD8D84B4B", "g. c #FCFCDBDB4B4B", "h. c #FCFCD8D84C4C", "j. c #F8F8D8D85353", "k. c #F9F9D9D95757", "l. c #FDFDDADA5151", "z. c #FDFDDBDB5454", "x. c #FDFDDCDC5050", "c. c #FDFDDDDD5454", "v. c #FAFADBDB5C5C", "b. c #FEFEDCDC5959", "n. c #FEFEDEDE5858", "m. c #FEFEDEDE5C5C", "M. c #FEFEDFDF5F5F", "N. c #FBFBDDDD6060", "B. c #FCFCDDDD6565", "V. c #FCFCDFDF6969", "C. c #FDFDE0E06D6D", "Z. c #FDFDE2E27171", "A. c #FEFEE2E27474", "S. c #FEFEE3E37777", "D. c #FEFEE4E47676", "F. c #FEFEE4E47979", "G. c #FFFFE4E47A7A", "H. c #FFFFE4E47B7B", "J. c None", /* pixels */ "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", ",.,.,.,.>.>.=.=.*.&.%.$.$.@.O.O.", ",.H.H.H.A.A.A.V.C.B.N.v.k.j.i.o.", ",.H.M.m.m.z.l.g.d.p.r.q.7.5.u.X.", ",.H.m.m.l.l.g.s.p.e.q.7.4.2.y.^ ", ">.D.c.c.g.g.s.p.r.w.6.4.2.1.y.^ ", "+ z j g d a u r q 5 2 , ; % 9 X ", "O k g f a y r q 5 2 , : * $ 8 . ", "o k f f r w 7 3 < : = & @ @ 5 . ", "D | _ ( ~ Q R Y L L K J H G P x ", "F .} { [ ] ' ` ) / ! W W T U c ", "F D D A Z C V V N M M b b b c c ", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J." }; springlobby-0.169/src/images/flags/CR.xpm0000600000176000000410000001017712105760300021607 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 162 2", " c black", ". c #000000002323", "X c #000000002525", "o c #000000002929", "O c #000000002B2B", "+ c #000000003131", "@ c #000000003737", "# c #000000003B3B", "$ c #000000003F3F", "% c #000000004545", "& c #000000004B4B", "* c #000000005151", "= c #000000005555", "- c #000000005757", "; c #000000005B5B", ": c #000000005D5D", "> c #000000006161", ", c #000000006363", "< c #000000006767", "1 c #000000006D6D", "2 c #000000007171", "3 c #000000007373", "4 c #000000007575", "5 c #000000007979", "6 c #000000007D7D", "7 c #000001017F7F", "8 c #000007078383", "9 c #000009098585", "0 c #00000F0F8585", "q c #000019198D8D", "w c #5B5B7979B5B5", "e c #5C5C7A7AB6B6", "r c #60607D7DB8B8", "t c #62627F7FB9B9", "y c #65658282BBBB", "u c #69698484BDBD", "i c #6C6C8888BEBE", "p c #6F6F8A8AC1C1", "a c #6F6F8A8AC2C2", "s c #73738E8EC3C3", "d c #74748E8EC3C3", "f c #77779191C5C5", "g c #77779090C6C6", "h c #7B7B9494C7C7", "j c #7A7A9494C8C8", "k c #7F7F9797C9C9", "l c #7F7F9797CACA", "z c #B7B700000000", "x c #B9B900000000", "c c #BBBB00000000", "v c #DDDD00000000", "b c #DFDF00000000", "n c #DCDC14141414", "m c #DDDD19191919", "M c #DEDE1A1A1A1A", "N c #DFDF1F1F1F1F", "B c #E1E100000000", "V c #E0E01F1F1F1F", "C c #E0E020202020", "Z c #E0E024242424", "A c #E1E125252525", "S c #E2E22A2A2A2A", "D c #E3E32B2B2B2B", "F c #E3E32F2F2F2F", "G c #E0E036363636", "H c #E4E430303030", "J c #E5E535353535", "K c #E6E636363636", "L c #E2E23B3B3B3B", "P c #E3E33F3F3F3F", "I c #E6E63B3B3A3A", "U c #E7E73B3B3B3B", "Y c #E7E73B3B3C3C", "T c #D3D341413F3F", "R c #DFDF69696767", "E c #E7E740404040", "W c #E8E840404040", "Q c #E9E941414141", "! c #E8E845454545", "~ c #E9E946464646", "^ c #E9E94A4A4949", "/ c #EAEA4A4A4B4B", "( c #EAEA4B4B4B4B", ") c #EBEB4F4F4F4F", "_ c #EBEB4F4F5050", "` c #EDED53535353", "' c #EDED54545454", "] c #EEEE58585858", "[ c #EFEF6F6F6F6F", "{ c #F1F172727373", "} c #F1F176767676", "| c #82829A9ACBCB", " . c #82829A9ACCCC", ".. c #85859D9DCDCD", "X. c #85859E9ECDCD", "o. c #8989A0A0CECE", "O. c #8B8BA2A2D0D0", "+. c #8F8FA4A4D2D2", "@. c #9191A7A7D3D3", "#. c #9393A8A8D4D4", "$. c #9494A9A9D4D4", "%. c #9595A9A9D4D4", "&. c #F1F187878585", "*. c #EBEBA0A09F9F", "=. c #ECECA2A2A2A2", "-. c #EEEEA4A4A3A3", ";. c #EEEEA7A7A6A6", ":. c #EFEFAAAAA9A9", ">. c #EDEDAEAEADAD", ",. c #F0F0ACACABAB", "<. c #F1F1AFAFAEAE", "1. c #F9F9A1A1A1A1", "2. c #F3F3B2B2B1B1", "3. c #F2F2B4B4B3B3", "4. c #F3F3B6B6B5B5", "5. c #F4F4B4B4B3B3", "6. c #F5F5B7B7B6B6", "7. c #F3F3BEBEBEBE", "8. c #F4F4B9B9B8B8", "9. c #F6F6B9B9B8B8", "0. c #F4F4BCBCBBBB", "q. c #F7F7BCBCBBBB", "w. c #F5F5BDBDBDBD", "e. c #F6F6BFBFBFBF", "r. c #DDDDDFDFDFDF", "t. c #F7F7C2C2C1C1", "y. c #F8F8C4C4C3C3", "u. c #F9F9C6C6C5C5", "i. c #FAFAC8C8C7C7", "p. c #F9F9C8C8C8C8", "a. c #FAFAC9C9C9C9", "s. c #FBFBCBCBCACA", "d. c #FCFCD4D4D4D4", "f. c #E5E5E9E9E9E9", "g. c #F0F0F1F1F1F1", "h. c #F1F1F1F1F1F1", "j. c #F1F1F2F2F2F2", "k. c #F2F2F3F3F3F3", "l. c #F3F3F4F4F4F4", "z. c #F4F4F5F5F5F5", "x. c #F4F4F6F6F6F6", "c. c #F5F5F6F6F6F6", "v. c #F5F5F7F7F7F7", "b. c gray97", "n. c #F5F5F8F8F8F8", "m. c #F6F6F9F9F9F9", "M. c #F7F7F9F9F9F9", "N. c #F7F7FAFAFAFA", "B. c #F8F8F8F8F8F8", "V. c #F9F9F9F9F9F9", "C. c #F8F8FBFBFBFB", "Z. c #F9F9FAFAFAFA", "A. c gray98", "S. c #F9F9FCFCFCFC", "D. c #F9F9FFFFFFFF", "F. c #FAFAFDFDFDFD", "G. c #FBFBFCFCFCFC", "H. c #FBFBFDFDFDFD", "J. c #FBFBFEFEFEFE", "K. c #FCFCFEFEFEFE", "L. c #FCFCFFFFFFFF", "P. c None", /* pixels */ "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "0 9 9 9 8 7 6 5 4 2 1 < < : = = ", "q %.@.@.@.@.o.X.X. .l j f d s = ", "D.L.L.L.L.G.G.D.D.N.n.n.B.c.c.f.", "1.d.s.s.u.u.y.t.w.w.w.8.3.3.7.R ", "B } ] ' _ / ~ Q Y K H D A C P c ", "B { ` ) / ~ Q L K H D A N m L c ", "b [ ) / ~ P I K F S Z N m n G c ", "&.s.q.9.6.5.2.<.,.:.;.=.=.*.>.T ", "n.A.V.V.V.V.b.c.c.k.k.k.g.g.k.r.", "2 X.| | h f d p i u y t e e e O ", "< , ; = * & % $ # @ + O O X . X ", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P." }; springlobby-0.169/src/images/flags/CS.xpm0000600000176000000410000000720612105760300021607 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CS_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 140 2", " c black", ". c #000000004343", "X c #000000004D4D", "o c #000000005D5D", "O c #000000006161", "+ c #000000006363", "@ c #000000006767", "# c #000000006D6D", "$ c #000000007171", "% c #000000007575", "& c #000000007979", "* c #000000007B7B", "= c #000000007D7D", "- c #000000008181", "; c #000000008383", ": c #000000008585", "> c #000000008787", ", c #000000008989", "< c #000000009191", "1 c #2C2C2C2CA1A1", "2 c #31313131A4A4", "3 c #37373737A7A7", "4 c #35353535AFAF", "5 c #3D3D3C3CAAAA", "6 c #42424242ADAD", "7 c #49494949AEAE", "8 c #47474747B0B0", "9 c #4C4C4C4CB2B2", "0 c #4E4E4E4EB4B4", "q c #51515151B4B4", "w c #53535353B7B7", "e c #54545454B7B7", "r c #58585757B9B9", "t c #59595959B8B8", "y c #5C5C5C5CBABA", "u c #5C5C5C5CBBBB", "i c #5F5F5F5FBBBB", "p c #61616060BEBE", "a c #6A6A6A6ABEBE", "s c #65656565C0C0", "d c #69696969C2C2", "f c #6D6D6D6DC3C3", "g c #6E6E6E6EC0C0", "h c #72727272C2C2", "j c #70707070C5C5", "k c #74747474C7C7", "l c #76767676C4C4", "z c #77777777C8C8", "x c #7A7A7A7AC6C6", "c c #7F7F7F7FC6C6", "v c #79797979C9C9", "b c #7B7B7B7BC8C8", "n c #7B7B7B7BCACA", "m c #7D7D7D7DC9C9", "M c #DDDD00000000", "N c #DFDF00000000", "B c #E1E100000000", "V c #E3E300000000", "C c #E5E500000000", "Z c #E7E700000000", "A c #E9E900000000", "S c #EBEB00000000", "D c #EDED00000000", "F c #EFEF00000000", "G c #F1F100000000", "H c #F3F300000000", "J c #F5F500000000", "K c #F7F700000000", "L c #F1F10B0B0B0B", "P c #F1F10F0F0E0E", "I c #F9F900000000", "U c #F2F213131313", "Y c #F3F319191919", "T c #F4F41E1E1E1E", "R c #F5F523232323", "E c #F2F22C2C2C2C", "W c #F2F22F2F2F2F", "Q c #F6F629292929", "! c #F7F72E2E2E2E", "~ c #FBFB29292929", "^ c #F2F232323232", "/ c #F3F335353535", "( c #F4F439393939", ") c #F5F53D3D3D3D", "_ c #F8F834343434", "` c #F9F93A3A3A3A", "' c #FAFA3F3F3F3F", "] c #F6F642424242", "[ c #F7F746464646", "{ c #F7F74B4B4B4B", "} c #FAFA44444444", "| c #F8F850505050", " . c #F9F954545555", ".. c #F9F958585858", "X. c #FAFA5D5D5D5D", "o. c #F2F263636363", "O. c #F2F266666666", "+. c #F3F36A6A6A6A", "@. c #F4F46E6E6E6E", "#. c #FBFB61616262", "$. c #FCFC66666666", "%. c #F3F377777777", "&. c #F5F571717171", "*. c #F6F675757575", "=. c #F7F778787979", "-. c #F8F87C7C7C7C", ";. c #81818181CACA", ":. c #85858585CCCC", ">. c #88888888CECE", ",. c #8B8B8B8BCFCF", "<. c #8E8E8F8FD1D1", "1. c #90909090D2D2", "2. c #A4A4A4A4DADA", "3. c #F9F980808080", "4. c #FAFA84848484", "5. c #FBFB88888888", "6. c #FBFB8B8B8B8B", "7. c #FCFCA0A0A0A0", "8. c #E3E3C7C7C7C7", "9. c #E5E5C9C9C9C9", "0. c #E7E7CDCDCDCD", "q. c #FDFDE7E7E7E7", "w. c #FDFDE9E9E9E9", "e. c gray95", "r. c #F3F3F3F3F3F3", "t. c #F4F4F4F4F4F4", "y. c #F4F4F5F5F5F5", "u. c gray96", "i. c #F6F6F6F6F6F6", "p. c gray97", "a. c #F8F8F8F8F8F8", "s. c #F9F9F9F9F9F9", "d. c gray98", "f. c #FBFBFBFBFBFB", "g. c #FBFBFCFCFBFB", "h. c gray99", "j. c #FDFDFCFCFDFD", "k. c #FDFDFDFDFDFD", "l. c #FEFEFEFEFEFE", "z. c None", /* pixels */ "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.", "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.", "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.", "< , , , , - - = & % $ # @ O o O ", ": n n n k k j f d p p i r w 0 X ", "- n i y y e q 9 7 6 5 3 2 1 7 . ", "4 2.1.<.>.>.:.;.m x l h f a c = ", "w.l.l.l.l.f.d.d.d.d.p.i.t.u.u.0.", "w.l.l.l.f.d.d.d.u.d.u.u.u.r.u.9.", "q.l.f.f.d.d.d.a.u.u.u.u.r.r.r.8.", "~ 7.6.5.4.3.-.=.*.&.@.+.O.o.%.N ", "K $.} ' ` _ ! Q R T Y U P L W N ", "K #.X... .| { [ ] ) ( / ^ W W N ", "K G G D D D S S Z Z B B N N M M ", "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.", "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z." }; springlobby-0.169/src/images/flags/CU.xpm0000600000176000000410000001014012105760300021600 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CU_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 162 2", " c black", ". c #000000005F5F", "X c #000000006B6B", "o c #000000006D6D", "O c #000000006F6F", "+ c #000000007373", "@ c #000000007575", "# c #000000007979", "$ c #000000007B7B", "% c #000000007F7F", "& c #000000008181", "* c #000000008383", "= c #000001018585", "- c #000000008787", "; c #000000008B8B", ": c #000001018F8F", "> c #000007078B8B", ", c #000009098B8B", "< c #000009099393", "1 c #00000F0F9797", "2 c #000011118F8F", "3 c #000017179393", "4 c #000015159999", "5 c #00001D1D9797", "6 c #000023239B9B", "7 c #000029299D9D", "8 c #00002F2FA1A1", "9 c #00003535A3A3", "0 c #00003939A5A5", "q c #00003D3DA9A9", "w c #00003F3FA9A9", "e c #00004141A7A7", "r c #00004747B3B3", "t c #1A1A5858B0B0", "y c #1F1F5C5CB2B2", "u c #25256060B4B4", "i c #2A2A6565B6B6", "p c #30306969B9B9", "a c #36366E6EBCBC", "s c #3B3B7070BABA", "d c #37377575C0C0", "f c #3B3B7474C1C1", "g c #3B3B7878C2C2", "h c #3F3F7C7CC4C4", "j c #42427D7DC3C3", "k c #42427E7EC4C4", "l c #45457E7EC3C3", "z c #44448080C6C6", "x c #47478181C6C6", "c c #48488080C4C4", "v c #4B4B8383C5C5", "b c #4E4E8585C7C7", "n c #49498383C8C8", "m c #4B4B8585C8C8", "M c #4E4E8686CACA", "N c #50508888CACA", "B c #52528888C9C9", "V c #53538989C8C8", "C c #52528A8ACCCC", "Z c #56568B8BCBCB", "A c #54548C8CCCCC", "S c #59598E8ECECE", "D c #5A5A8C8CCCCC", "F c #5B5B8F8FCDCD", "G c #5C5C8F8FCCCC", "H c #5F5F9191CECE", "J c #5E5E9292D0D0", "K c #61619494CFCF", "L c #63639494D0D0", "P c #64649494D0D0", "I c #65659797D1D1", "U c #67679898D2D2", "Y c #6A6A9999D3D3", "T c #6B6B9A9AD3D3", "R c #6F6F9D9DD4D4", "E c #71719D9DD3D3", "W c #72729F9FD6D6", "Q c #7676A3A3D8D8", "! c #7A7AA5A5D9D9", "~ c #7E7EA8A8DBDB", "^ c #9F9F4E4E6F6F", "/ c #A8A852527171", "( c #ADAD5D5D7A7A", ") c #CBCB00000000", "_ c #DBDB00000000", "` c #EBEB00000000", "' c #EDED00000000", "] c #EFEF00000000", "[ c #F1F100000000", "{ c #F3F300000000", "} c #F7F700000000", "| c red", " . c #EBEB45454545", ".. c #EBEB46464646", "X. c #EDED45454545", "o. c #EFEF4F4F5050", "O. c #F4F44A4A4B4B", "+. c #F6F649494949", "@. c #F4F44D4D4C4C", "#. c #F1F15A5A5959", "$. c #F6F658585858", "%. c #F9F95C5C5C5C", "&. c #ECEC63636565", "*. c #F0F061616161", "=. c #F7F76A6A6A6A", "-. c #FBFB66666666", ";. c #F2F27D7D7E7E", ":. c #F9F979797979", ">. c #FEFE7B7B7A7A", ",. c #8080AAAADCDC", "<. c #8484ACACDDDD", "1. c #8686AEAEDEDE", "2. c #8787B0B0DFDF", "3. c #9797A5A5CDCD", "4. c #F8F884848484", "5. c #F8F887878787", "6. c #F5F5ADADACAC", "7. c #FAFAA5A5A3A3", "8. c #FDFDB8B8B6B6", "9. c #F9F9B8B8B9B9", "0. c #FBFBBDBDBDBD", "q. c #FAFABEBEBEBE", "w. c #D5D5D7D7DBDB", "e. c #DFDFDFDFDFDF", "r. c #FEFEC3C3C1C1", "t. c #FCFCCCCCCCCC", "y. c #E1E1E5E5E7E7", "u. c #E7E7E7E7E7E7", "i. c #ECECEDEDEFEF", "p. c #EDEDEEEEF0F0", "a. c #EEEEEEEEF0F0", "s. c #EEEEEFEFF1F1", "d. c #F0F0F1F1F2F2", "f. c #F1F1F2F2F3F3", "g. c gray95", "h. c #F3F3F3F3F3F3", "j. c #F1F1F3F3F5F5", "k. c #F2F2F3F3F5F5", "l. c #F2F2F4F4F6F6", "z. c #F3F3F4F4F6F6", "x. c #F4F4F4F4F4F4", "c. c gray96", "v. c #F4F4F5F5F7F7", "b. c #F6F6F6F6F6F6", "n. c gray97", "m. c #F4F4F5F5F8F8", "M. c #F5F5F5F5F8F8", "N. c #F5F5F7F7F9F9", "B. c #F6F6F6F6F9F9", "V. c #F6F6F7F7FAFA", "C. c #F7F7F8F8FBFB", "Z. c #F8F8F8F8F8F8", "A. c #F9F9F9F9F9F9", "S. c #F8F8F9F9FBFB", "D. c gray98", "F. c #FBFBFBFBFBFB", "G. c #F9F9FBFBFCFC", "H. c #F9F9FBFBFDFD", "J. c #FCFCF9F9F9F9", "K. c gray99", "L. c #FDFDFDFDFDFD", "P. c None", /* pixels */ "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "_ e r w w 0 9 8 7 6 5 3 3 , = > ", "| ;.3.1.1.<.,.~ ! Q W R Y P K ; ", "{ >.&.r.G.D.V.D.G.z.z.b.k.k.l.y.", "{ :.%.#.8.L.L.K.G.D.D.b.b.b.b.u.", "{ 5.q.$.o.( K H D C M m x k G & ", "{ t.J.9.O...^ f a p i u y t s X ", "` 4.q.@.X./ D C M n x k f d V @ ", "` =.O.X.7.D.B.n.b.b.h.d.h.h.h.e.", "` -...6.z.b.b.l.k.d.a.a.i.i.i.w.", "} &.E T U L H D Z B b v c l k . ", ") 4 1 < : ; = = % # @ + o o X o ", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P." }; springlobby-0.169/src/images/flags/CV.xpm0000600000176000000410000000722512105760300021613 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CV_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 141 2", " c black", ". c #00000000DDDD", "X c #00000000DFDF", "o c #00000000E1E1", "O c #00000000E3E3", "+ c #00000505E5E5", "@ c #00000909E7E7", "# c #00000F0FE7E7", "$ c #00001111E9E9", "% c #00001515E9E9", "& c #00001717EBEB", "* c #00001D1DEBEB", "= c #00001D1DEDED", "- c #00002525EDED", "; c #00002525EFEF", ": c #00002B2BEFEF", "> c #00003131F1F1", ", c #00003939F3F3", "< c #00003F3FF5F5", "1 c #00004545F7F7", "2 c #00004949F9F9", "3 c #00004B4BF9F9", "4 c #00004F4FFBFB", "5 c #00005353FDFD", "6 c #00005959FDFD", "7 c #00005B5BFDFD", "8 c #00005D5DFDFD", "9 c #00005F5FFDFD", "0 c #00006161FFFF", "q c #20207D7DF1F1", "w c #24248080F1F1", "e c #29298383F2F2", "r c #2D2D8686F3F3", "t c #34348A8AF4F4", "y c #39398D8DF5F5", "u c #3A3A8E8EF5F5", "i c #3E3E8E8EF2F2", "p c #3E3E9191F6F6", "a c #3F3F9191F6F6", "s c #7E7EAFAFB5B5", "d c #40409090F2F2", "f c #41419090F2F2", "g c #41419292F7F7", "h c #43439494F7F7", "j c #44449191F3F3", "k c #47479494F3F3", "l c #44449494F7F7", "z c #45459494F7F7", "x c #4B4B9797F4F4", "c c #49499797F8F8", "v c #4E4E9999F5F5", "b c #4A4A9898F8F8", "n c #4E4E9B9BF9F9", "m c #4F4F9B9BF9F9", "M c #50509A9AF5F5", "N c #55559D9DF6F6", "B c #53539E9EFAFA", "V c #55559F9FFAFA", "C c #5757A0A0FBFB", "Z c #5A5AA0A0F7F7", "A c #5F5FA3A3F7F7", "S c #5D5DA3A3FCFC", "D c #6666A4A4D5D5", "F c #6E6EA9A9D7D7", "G c #7878B0B0DCDC", "H c #7F7FB5B5DEDE", "J c #6363A6A6F8F8", "K c #6161A6A6FDFD", "L c #6767A9A9F9F9", "P c #6565A9A9FDFD", "I c #6767ABABFEFE", "U c #6868A9A9F9F9", "Y c #6B6BABABFAFA", "T c #6969ABABFEFE", "R c #6B6BADADFEFE", "E c #6C6CACACFAFA", "W c #6F6FAEAEFBFB", "Q c #6E6EAFAFFEFE", "! c #7070AEAEFBFB", "~ c #7373B0B0FCFC", "^ c #7575B1B1FCFC", "/ c #7777B2B2FCFC", "( c #7A7AB4B4FDFD", ") c #7E7EB7B7FEFE", "_ c #CFCF00000000", "` c #EDED00000000", "' c #E9E928282828", "] c #EAEA2D2D2D2D", "[ c #EBEB32323131", "{ c #EBEB46464646", "} c #F0F045454545", "| c #F1F14B4B4B4B", " . c #F2F250505050", ".. c #F3F354545454", "X. c #EFEF7E7E4444", "o. c #F7F77B7B7B7B", "O. c #F1F185854E4E", "+. c #F8F899996A6A", "@. c #F6F6E6E65D5D", "#. c #F0F0EAEA5D5D", "$. c #F4F4EFEF6E6E", "%. c #F5F5EFEF7070", "&. c #FBFBEEEE7676", "*. c #F7F7F0F07777", "=. c #F8F8F2F27F7F", "-. c #FCFCF4F47878", ";. c #8E8EBABABFBF", ":. c #8F8FBABAC3C3", ">. c #9393BEBEC3C3", ",. c #9292BEBEC6C6", "<. c #9696BEBEC3C3", "1. c #8181B9B9FEFE", "2. c #8383B9B9FEFE", "3. c #8484BABAFEFE", "4. c #8585BBBBFEFE", "5. c #8585BCBCFEFE", "6. c #8888BDBDFFFF", "7. c #9898C1C1C6C6", "8. c #9C9CC2C2C7C7", "9. c #9C9CC3C3CACA", "0. c #9E9EC5C5CACA", "q. c #9E9EC5C5CDCD", "w. c #A1A1C7C7CBCB", "e. c #DFDFDFDFDFDF", "r. c gray90", "t. c #FCFCFBFBE0E0", "y. c gray95", "u. c #F3F3F3F3F3F3", "i. c #F4F4F4F4F4F4", "p. c #F4F4F5F5F5F5", "a. c gray96", "s. c #F6F6F6F6F6F6", "d. c gray97", "f. c #F8F8F8F8F8F8", "g. c #F9F9F9F9F9F9", "h. c gray98", "j. c #FBFBFBFBFBFB", "k. c gray99", "l. c #FDFDFDFDFDFD", "z. c #FEFEFEFEFEFE", "x. c None", /* pixels */ "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "0 0 0 0 0 6 6 5 4 2 1 < , > : ; ", "0 6.6.5.4.2.) ( / ~ W Y L J A * ", "0 6.Q R I P K S V B m c z a Z % ", "0 4.R I q.0.-.7.,.m c h a u N # ", "8 2.I w.=.H V G %.;.h a u t M @ ", "l.l.l.t.j.j.g.g.g.d.d.s.u.u.s.r.", "` o.+.&... .| } O.@.X.[ ] ' { _ ", "j.l.j.j.j.g.f.f.s.s.s.u.u.u.u.e.", "2 / V >.$.F g D #.s r w q q f X ", "1 ! W L 0.8.&.,.:.v x k j f i . ", "< , > : ; = & $ @ + o o X . . . ", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x." }; springlobby-0.169/src/images/flags/CX.xpm0000600000176000000410000001044712105760300021615 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CX_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 169 2", " c black", ". c #000001010000", "X c #000000004141", "o c #000017175F5F", "O c #000000006969", "+ c #000000006D6D", "@ c #000000007777", "# c #000000007B7B", "$ c #000065650000", "% c #000069690000", "& c #00006B6B0000", "* c #00006F6F0000", "= c #000073730000", "- c #000077770000", "; c #0F0F7D7D4A4A", ": c #000000008181", "> c #000000008585", ", c #000000008989", "< c #000000008D8D", "1 c #000000008F8F", "2 c #000000009393", "3 c #000000009797", "4 c #000000009B9B", "5 c #00000000A1A1", "6 c #00000000A5A5", "7 c #00000000A7A7", "8 c #00000000ABAB", "9 c #00000000AFAF", "0 c #00000000B1B1", "q c #00000000B3B3", "w c #00000000B5B5", "e c #13131D1DB1B1", "r c #18181919BCBC", "t c #1E1E1E1EBEBE", "y c #24242424C1C1", "u c #23232323C8C8", "i c #2E2E2E2EC6C6", "p c #29292929CACA", "a c #32323232C3C3", "s c #35353535C3C3", "d c #34343434C7C7", "f c #35353535C9C9", "g c #39393939C5C5", "h c #3D3D3D3DC7C7", "j c #3A3A3A3AC9C9", "k c #3A3A3A3ACACA", "l c #1F1F4A4A9393", "z c #2F2F5D5D9292", "x c #42424242C8C8", "c c #42424242CCCC", "v c #46464646CACA", "b c #49494949CECE", "n c #49494949CFCF", "m c #4B4B4B4BCCCC", "M c #4B4B4D4DCECE", "N c #40404040D1D1", "B c #46464646D8D8", "V c #50504F4FD1D1", "C c #50505050CECE", "Z c #54545454CFCF", "A c #50505050D1D1", "S c #51515151D0D0", "D c #53535353D2D2", "F c #55555555D4D4", "G c #59595959D2D2", "H c #58585959D4D4", "J c #5C5C5C5CD5D5", "K c #5F5F5F5FD7D7", "L c #54546767C0C0", "P c #61616161D4D4", "I c #63636363D7D7", "U c #66666666D7D7", "Y c #6A6A6A6AD8D8", "T c #76767676DBDB", "R c #76767777DADA", "E c #79797979DDDD", "W c #7B7B7B7BDDDD", "Q c #000081810000", "! c #000085850000", "~ c #00008B8B0000", "^ c #00008F8F0000", "/ c #000093930000", "( c #000097970000", ") c #00009B9B0000", "_ c #00009D9D0000", "` c #0000A1A10000", "' c #0000A3A30000", "] c #0000A5A50000", "[ c #0000A7A70000", "{ c #0000ABAB0000", "} c #0000ADAD0000", "| c #0000AFAF0000", " . c #0B0BB7B70B0B", ".. c #1010B9B91010", "X. c #1414BBBB1414", "o. c #1919ACAC2A2A", "O. c #2C2CB6B63636", "+. c #2424C1C12424", "@. c #2525C1C12525", "#. c #2A2AC3C32B2B", "$. c #2B2BC3C32B2B", "%. c #2F2FC1C12F2F", "&. c #3333C3C33232", "*. c #3030C5C53030", "=. c #3131C6C63131", "-. c #3636C4C43636", ";. c #3737C8C83636", ":. c #3737C8C83737", ">. c #3B3BC6C63B3B", ",. c #3E3ECACA3636", "<. c #3C3CCACA3C3C", "1. c #3D3DCACA3D3D", "2. c #5151B7B76B6B", "3. c #7D7DD3D30000", "4. c #7E7EE1E13B3B", "5. c #4242CBCB4242", "6. c #4242CCCC4242", "7. c #4747CECE4747", "8. c #4949CCCC4949", "9. c #4E4ECDCD4E4E", "0. c #4B4BD0D04B4B", "q. c #4C4CD0D04C4C", "w. c #5151D1D15151", "e. c #5454D3D35454", "r. c #5858D2D25757", "t. c #5959D0D05D5D", "y. c #5C5CD3D35C5C", "u. c #6161D4D46060", "i. c #6565D6D66565", "p. c #6969D8D86969", "a. c #6D6DD9D96D6D", "s. c #7070DADA7171", "d. c #7474DBDB7474", "f. c #7777DDDD7777", "g. c #7979DDDD7979", "h. c #5C5C9191A1A1", "j. c #7B7B8585D3D3", "k. c #7B7BC3C39797", "l. c #878787877D7D", "z. c #8B8BDBDB1919", "x. c #8B8BDBDB1A1A", "c. c #8E8EDDDD1F1F", "v. c #9595E0E02C2C", "b. c #9E9EE1E13F3F", "n. c #9F9FE5E53C3C", "m. c #A3A3E6E64141", "M. c #A9A9E7E75353", "N. c #C0C0EAEA2020", "B. c #C2C2ECEC2626", "V. c #C3C3EDED2B2B", "C. c #CBCBEAEA2E2E", "Z. c #C5C5EEEE3030", "A. c #C5C5EEEE3131", "S. c #C7C7EFEF3636", "D. c #D6D6F3F32F2F", "F. c #EAEAF8F83535", "G. c #D3D3DEDE4E4E", "H. c #CACAEDED4444", "J. c #D3D3EEEE4C4C", "K. c #ECECF9F94242", "L. c #828282828787", "P. c #84848484DFDF", "I. c #A9A9A9A9E5E5", "U. c #B0B0B0B0E8E8", "Y. c #DFDFDFDFF3F3", "T. c #E1E1E1E1F7F7", "R. c #E2E2E2E2F5F5", "E. c #E8E8E8E8F7F7", "W. c None", /* pixels */ "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.", "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.", "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.", "o ' | | | | | [ ] ' _ ) ( / ^ ~ ", "9 j.k.g.g.d.s.a.p.i.u.y.r.M.9.! ", "w W K h.t.e.w.0.7.6.1.-.=.v.8.Q ", "w W J J L 2.0.7.6.1.-.A.V.B.H.3.", "q T Y.I V n J.m.n.S.=.$.@.N.b.- ", "q P.D F Y.B K.4.,.A.#.@.c.z.<.- ", "9 E.D G D N G.F.D.C.+.c.z.X.-.* ", "8 Y n U.I.j f L.l.y l o.X...&.% ", "6 U n c j d i p u t r e ; .%.% ", "5 P T Y.D C m v x h g s a z O.$ ", "6 4 3 2 < < , > : # @ + O O X ", "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.", "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W." }; springlobby-0.169/src/images/flags/CY.xpm0000600000176000000410000000366612105760300021623 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CY_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 79 1", " c black", ". c #7A7AC1C18282", "X c #F9F9D3D33F3F", "o c #F9F9CDCD4242", "O c #FAFACDCD4141", "+ c #FAFAD3D34040", "@ c #F8F8D5D54747", "# c #FBFBD4D45656", "$ c #F8F8D9D95A5A", "% c #FBFBDDDD6464", "& c #FCFCDADA6A6A", "* c #F7F7D6D67878", "= c #F8F8D9D97B7B", "- c #8787C9C99191", "; c #8D8DCCCC9696", ": c #9A9AD0D09F9F", "> c #9E9ED5D5A5A5", ", c #A6A6D7D7AEAE", "< c #A5A5D8D8ADAD", "1 c #BBBBDFDFB1B1", "2 c #FBFBDFDF8C8C", "3 c #F7F7E3E39797", "4 c #F7F7E5E59494", "5 c #EAEAE6E6A7A7", "6 c gray81", "7 c gray82", "8 c LightGray", "9 c #D5D5D5D5D5D5", "0 c #D7D7D7D7D7D7", "q c gray85", "w c gray86", "e c #DDDDDDDDDDDD", "r c #DFDFDFDFDFDF", "t c #CECEE4E4C0C0", "y c #DFDFEDEDDFDF", "u c #FDFDF1F1C5C5", "i c #F8F8F1F1D5D5", "p c #F9F9F2F2D6D6", "a c #FDFDF3F3D3D3", "s c #E1E1E1E1E1E1", "d c #E1E1E3E3E1E1", "f c gray89", "g c gray90", "h c #E7E7E7E7E7E7", "j c #E1E1ECECE1E1", "k c #E9E9E9E9E9E9", "l c gray92", "z c gray93", "x c #EFEFEFEFEFEF", "c c #EFEFEFEFF1F1", "v c #FCFCF7F7E4E4", "b c #FAFAF8F8EFEF", "n c #F1F1F1F1F1F1", "m c gray95", "M c #F2F2F2F2F3F3", "N c #F3F3F3F3F3F3", "B c #F6F6F5F5F0F0", "V c #F6F6F6F6F3F3", "C c #F4F4F4F4F4F4", "Z c #F4F4F5F5F5F5", "A c gray96", "S c #F6F6F6F6F6F6", "D c gray97", "F c #F7F7F9F9F7F7", "G c #F8F8F8F8F7F7", "H c #FCFCFAFAF2F2", "J c #F8F8F8F8F8F8", "K c #F9F9F9F9F9F9", "L c #F8F8FAFAF9F9", "P c gray98", "I c #FBFBFBFBFBFB", "U c #FBFBFCFCFBFB", "Y c gray99", "T c #FDFDFDFDFCFC", "R c #FDFDFDFDFDFD", "E c #FDFDFDFDFEFE", "W c #FEFEFEFEFEFE", "Q c gray100", "! c None", /* pixels */ "!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!", "nnnnncczzzkhgfsr", "AQQQIQIQIIIIIIAr", "AQQQQIIIIIDIAADe", "AQQQIav2bp**VAAe", "AQQIu&#XX@3BAAA0", "nQQIH%XX$3DANNA0", "xQIII15pt,ANNNN7", "nUIID>-,.;NNNnN8", "zQFIIDy:yNNMnnM6", "zIIIIDDDAAANMnN6", "lkgffeewq0087666", "!!!!!!!!!!!!!!!!", "!!!!!!!!!!!!!!!!" }; springlobby-0.169/src/images/flags/CZ.xpm0000600000176000000410000000647512105760300021625 0ustar buildbotwww-data00000000000000/* XPM */ static const char *CZ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 126 2", " c black", ". c #5D5D00001111", "X c #00003939AFAF", "o c #00004141B3B3", "O c #00004747B5B5", "+ c #00004D4DB9B9", "@ c #03035151BBBB", "# c #07075555BFBF", "$ c #00005F5FCDCD", "% c #0D0D5959C1C1", "& c #11115D5DC1C1", "* c #11115D5DC3C3", "= c #13135F5FC3C3", "- c #63639D9DDEDE", "; c #71719D9DD8D8", ": c #7575A0A0D9D9", "> c #7676A0A0DADA", ", c #7A7AA3A3DBDB", "< c #7D7DA6A6DCDC", "1 c #7E7EA6A6DDDD", "2 c #6D6DA4A4E1E1", "3 c #7373A9A9E4E4", "4 c #7979ADADE6E6", "5 c #C3C300000000", "6 c #C5C500000000", "7 c #C7C700000000", "8 c #C9C900000000", "9 c #CDCD00000000", "0 c #CFCF00000000", "q c #D1D100000000", "w c #D5D500000000", "e c #D7D700000000", "r c #D7D707070707", "t c #D9D900000000", "y c #DBDB00000000", "u c #E3E30B0B0B0B", "i c #E3E30F0F0E0E", "p c #E4E410101010", "a c #E5E513131313", "s c #E4E414141414", "d c #E5E514141414", "f c #E5E519191919", "g c #E6E619191919", "h c #E7E71F1F1F1F", "j c #E8E81E1E1E1E", "k c #E8E81F1F1F1F", "l c #E6E62C2C2C2C", "z c #E7E72F2F2F2F", "x c #E9E923232323", "c c #E8E824242424", "v c #E9E924242424", "b c #E9E92A2A2A2A", "n c #EAEA29292929", "m c #EAEA2A2A2A2A", "M c #EBEB2E2E2E2E", "N c #ECEC2F2F2F2F", "B c #E8E832323232", "V c #E8E835353535", "C c #E8E836363636", "Z c #EDED34343434", "A c #EDED35353535", "S c #E9E939393939", "D c #EAEA3D3D3D3D", "F c #EEEE3A3A3A3A", "G c #EEEE3B3B3A3A", "H c #EBEB42424242", "J c #EDED46464646", "K c #EDED4B4B4B4B", "L c #EEEE50505050", "P c #F0F054545555", "I c #F0F058585858", "U c #AFAF6B6B8989", "Y c #AFAF6C6C8989", "T c #B0B06D6D8A8A", "R c #BBBB83839C9C", "E c #8181A9A9DDDD", "W c #8383AAAADEDE", "Q c #8787ACACDEDE", "! c #8B8BAFAFDFDF", "~ c #8B8BAFAFE1E1", "^ c #8F8FB2B2E1E1", "/ c #9292B4B4E2E2", "( c #9595B6B6E2E2", ") c #9797B8B8E4E4", "_ c #9191BCBCEAEA", "` c #9999B9B9E5E5", "' c #9C9CBBBBE6E6", "] c #BBBBD0D0EBEB", "[ c #BFBFD3D3EDED", "{ c #D2D287879696", "} c #EEEE89898989", "| c #EFEF8C8C8C8C", " . c #EFEF99999999", ".. c #F0F08F8F8F8F", "X. c #F0F092929292", "o. c #F1F195959595", "O. c #F3F399999999", "+. c #F4F49C9C9C9C", "@. c #D7D7D7D7D7D7", "#. c gray86", "$. c #DDDDDDDDDDDD", "%. c #DFDFDFDFDFDF", "&. c #C2C2D5D5EFEF", "*. c #CECEDDDDF2F2", "=. c #E1E1E3E3E3E3", "-. c gray90", ";. c #E7E7E7E7E7E7", ":. c #E9E9E9E9E9E9", ">. c gray92", ",. c gray93", "<. c #EFEFEFEFEFEF", "1. c #F1F1F1F1F1F1", "2. c #F3F3F3F3F3F3", "3. c #F4F4F4F4F4F4", "4. c gray96", "5. c #F6F6F6F6F6F6", "6. c gray97", "7. c #F8F8F8F8F8F8", "8. c #F9F9F9F9F9F9", "9. c gray98", "0. c #FBFBFBFBFBFB", "q. c gray99", "w. c #FDFDFDFDFDFD", "e. c #FDFDFDFDFEFE", "r. c #FEFEFEFEFEFE", "t. c None", /* pixels */ "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "$ ~ 4.4.4.2.2.1.<.<.,.>.:.;.-.=.", "& _ *.e.e.e.e.e.0.e.0.8.8.8.6.%.", "& ' 4 &.e.e.e.0.0.8.8.8.6.4.6.$.", "= ` W 3 &.e.0.0.0.8.8.6.4.4.4.$.", "% ) W 1 2 ] 0.0.8.7.6.4.4.4.4.@.", "# ( 1 , ; - { +.O.o.X...| } .r ", "+ / , , ; T G Z N b v h g s C 6 ", "+ / ; ; T G Z N b v j g d p B 6 ", "O ! ; T G Z N b x j g a i u z 6 ", "o Q R P P L K J H D S C B z l 5 ", "X . y y e e e 0 9 9 8 8 6 6 5 6 ", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t." }; springlobby-0.169/src/images/flags/DE.xpm0000600000176000000410000001012412105760300021563 0ustar buildbotwww-data00000000000000/* XPM */ static const char *DE_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 161 2", " c black", ". c #3F3F3F3F2F2F", "X c #3F3F3F3F3131", "o c #3E3E3D3D3D3D", "O c #656536363535", "+ c #6C6C3C3C3C3C", "@ c #404041413636", "# c #464646463A3A", "$ c #474747473A3A", "% c #4C4C47473838", "& c #494949493C3C", "* c #4C4C49493A3A", "= c #4C4C4A4A3C3C", "- c #666649493C3C", "; c gray27", ": c #4C4C4C4C4343", "> c gray30", ", c gray33", "< c #5B5B5B5B5B5B", "1 c #717145454444", "2 c #78784C4C4B4B", "3 c #7E7E53535353", "4 c #626262626262", "5 c #696968686969", "6 c #6F6F6F6F6F6F", "7 c gray46", "8 c gray48", "9 c #7E7E7E7E7E7E", "0 c #9D9D3F3F2F2F", "q c #A5A53F3F2F2F", "w c #A8A83F3F2F2F", "e c #A9A93F3F2F2F", "r c #BCBC3F3F2F2F", "t c #BDBD3F3F2F2F", "y c #939373732F2F", "u c #9D9D79792F2F", "i c #9E9E7C7C2F2F", "p c #BEBE44443535", "a c #A1A176762F2F", "s c #A1A179792F2F", "d c #A0A07F7F2F2F", "f c #A3A37E7E2F2F", "g c #AAAA7F7F2F2F", "h c #ACAC7F7F2F2F", "j c #B7B779792F2F", "k c #83835B5B5B5B", "l c #898961616161", "z c #8E8E68686868", "x c #93936F6F6F6F", "c c #979774747474", "v c #9B9B7A7A7A7A", "b c #9F9F7E7E7E7E", "n c #EAEA1E1E1E1E", "m c #EBEB24242424", "M c #ECEC24242525", "N c #EEEE2C2C2B2B", "B c #EEEE2C2C2C2C", "V c #EEEE2D2D2D2D", "C c #EFEF32323232", "Z c #EFEF33333333", "A c #F0F033333535", "S c #F1F13B3B3B3B", "D c #F1F13C3C3C3C", "F c #F2F242424242", "G c #F3F343434343", "H c #F3F344444444", "J c #F4F449494949", "K c #F4F44A4A4A4A", "L c #F4F44B4B4B4B", "P c #F6F651515151", "I c #F6F652525252", "U c #F6F652525353", "Y c #F7F759595959", "T c #F8F85A5A5A5A", "R c #F9F95F5F5F5F", "E c #F9F960606060", "W c #F9F961616161", "Q c #FAFA66666666", "! c #FAFA68686868", "~ c #FBFB6D6D6D6D", "^ c #FBFB6D6D6E6E", "/ c #FBFB6E6E6E6E", "( c #F1F17C7C6B6B", ") c #F2F27F7F7070", "_ c #FCFC73737373", "` c #FDFD79797979", "' c #9B9B84842F2F", "] c #A3A385852F2F", "[ c #A9A982822F2F", "{ c #ABAB85852F2F", "} c #A9A98D8D2F2F", "| c #AEAE8E8E2F2F", " . c #B4B485852F2F", ".. c #B3B388882F2F", "X. c #B6B68B8B2F2F", "o. c #B6B6A1A12F2F", "O. c #B6B6A7A72F2F", "+. c #8D8D8D8D7F7F", "@. c #A5A589897A7A", "#. c #E8E882821D1D", "$. c #EAEA87872424", "%. c #EBEB8B8B2A2A", "&. c #EEEE90903232", "*. c #EFEF94943939", "=. c #F1F199994141", "-. c #F2F29D9D4747", ";. c #F3F384847676", ":. c #F4F4A2A24F4F", ">. c #F5F5A5A55656", ",. c #F7F7AAAA5D5D", "<. c #F9F9AFAF6464", "1. c #F0F0B6B66C6C", "2. c #FAFAB2B26B6B", "3. c #E6E6CDCD1D1D", "4. c #E8E8CFCF2222", "5. c #E9E9D1D12929", "6. c #EBEBD4D42F2F", "7. c #EDEDD7D73737", "8. c #EFEFD9D93D3D", "9. c #F1F1DBDB4545", "0. c #F2F2DDDD4B4B", "q. c #EFEFDADA6969", "w. c #EFEFDBDB6B6B", "e. c #F0F0DCDC6F6F", "r. c #F1F1DDDD7373", "t. c #F2F2DEDE7676", "y. c #F4F4E0E05353", "u. c #F5F5E2E25A5A", "i. c #EFEFE0E06D6D", "p. c #F7F7E4E46161", "a. c #F9F9E6E66868", "s. c #F3F3E0E07A7A", "d. c #F4F4E2E27F7F", "f. c #828283838383", "g. c #919191918484", "h. c #969696968989", "j. c #9A9A9A9A8E8E", "k. c #9E9E9D9D9292", "l. c #A2A2A2A29797", "z. c #A6A6A6A69B9B", "x. c #AAAAAAAA9F9F", "c. c #ADADADADA3A3", "v. c #B0B0B0B0A7A7", "b. c #B3B3B3B3A9A9", "n. c #B6B6B6B6ADAD", "m. c #B8B8B8B8AFAF", "M. c #BABABABAB1B1", "N. c #CACAB8B8AFAF", "B. c #FCFCAFAFA5A5", "V. c #FCFCB2B2A9A9", "C. c #FDFDB5B5ACAC", "Z. c #FCFCD5D5A4A4", "A. c #F5F5E4E48282", "S. c #F5F5E5E58787", "D. c #F7F7E7E78B8B", "F. c #F8F8E9E99191", "G. c #F9F9EBEB9494", "H. c #F9F9EBEB9A9A", "J. c #FAFAEDED9D9D", "K. c #FBFBF1F1A2A2", "L. c None", /* pixels */ "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", ": * % = $ @ X . . . . . . . . . ", "$ M.M.m.n.b.v.c.x.z.l.k.j.h.g.. ", "& M.f.9 8 7 6 5 4 < , > ; o +.. ", "- N.b v c x z l k 3 2 1 + O @.. ", "p C.` _ / ! W T U L H D A V ;.e ", "t V._ ^ Q R Y U L G D C N m ;.e ", "t B.^ ! R Y P L G S C N m n ( q ", "j Z.2.<.,.>.:.-.*.*.&.%.$.#.1.0 ", "O.K.a.u.u.y.0.9.9.7.6.5.4.3.w.' ", "o.J.H.G.F.D.S.A.d.s.s.r.w.w.w.u ", "| X. .X.h [ } { [ ] f i f a a y ", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L." }; springlobby-0.169/src/images/flags/DJ.xpm0000600000176000000410000000773012105760300021601 0ustar buildbotwww-data00000000000000/* XPM */ static const char *DJ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 155 2", " c black", ". c #00003939E7E7", "X c #000049498181", "o c #00004545E7E7", "O c #00004B4BE9E9", "+ c #00004D4DEBEB", "@ c #13135D5DEFEF", "# c #19196161EFEF", "$ c #19196363F1F1", "% c #21216767F3F3", "& c #27276D6DF5F5", "* c #2D2D7171F7F7", "= c #35357575F9F9", "- c #39397979FBFB", "; c #3F3F7D7DFDFD", ": c #000081810000", "> c #000083830000", ", c #000087870000", "< c #000089890000", "1 c #00008B8B0000", "2 c #00008F8F0000", "3 c #000091910000", "4 c #000093930000", "5 c #000099990000", "6 c #00009D9D0000", "7 c #00009F9F0000", "8 c #0000A3A30000", "9 c #0000A5A50000", "0 c #0000A7A70000", "q c #0000B5B50000", "w c #0B0BC2C20B0B", "e c #0F0FC4C40E0E", "r c #1010C4C41010", "t c #1313C6C61313", "y c #1414C6C61414", "u c #1414CACA1414", "i c #1818C7C71919", "p c #1919C8C81919", "a c #1919CBCB1919", "s c #1E1EC9C91E1E", "d c #1F1FC9C91F1F", "f c #1F1FCDCD1F1F", "g c #2323CBCB2323", "h c #2424CBCB2424", "j c #2424CFCF2424", "k c #2929CDCD2929", "l c #2A2ACDCD2A2A", "z c #2C2CCACA2C2C", "x c #2F2FCACA2F2F", "c c #2F2FCBCB2F2F", "v c #2E2ECFCF2E2E", "b c #2F2FCECE2F2F", "n c #2A2AD1D12A2A", "m c #2F2FD2D22F2F", "M c #3232CCCC3232", "N c #3333CCCC3232", "B c #3535CDCD3535", "V c #3434CECE3434", "C c #3434CFCF3434", "Z c #3939CFCF3939", "A c #3636D1D13636", "S c #3D3DD0D03D3D", "D c #4242D2D24242", "F c #4646D3D34646", "G c #4848D6D64444", "H c #4B4BD5D54B4B", "J c #4B4BD6D64B4B", "K c #5050D7D75050", "L c #5454D8D85555", "P c #5858D8D85858", "I c #7474DEDE7474", "U c #43438181FDFD", "Y c #43438181FFFF", "T c #45458383FDFD", "R c #4B4B8787FDFD", "E c #4B4B8787FFFF", "W c #5B5B9393FFFF", "Q c #5D5DA6A6C0C0", "! c #7B7B9C9CF4F4", "~ c #7F7F9F9FF5F5", "^ c #6161A9A9C2C2", "/ c #6565ACACC4C4", "( c #6969AEAEC6C6", ") c #6D6DB1B1C9C9", "_ c #7171B3B3CBCB", "` c #7474B3B3C9C9", "' c #7A7AA2A2F5F5", "] c #7C7CA5A5F6F6", "[ c #7E7EA6A6F6F6", "{ c #FDFD6E6E6E6E", "} c #8282A2A2F6F6", "| c #8686A5A5F7F7", " . c #8080A8A8F7F7", ".. c #8181A9A9F7F7", "X. c #8484ABABF8F8", "o. c #8D8DA9A9F5F5", "O. c #8C8CAFAFF6F6", "+. c #8A8AA8A8F8F8", "@. c #8B8BAAAAF9F9", "#. c #8888AEAEF9F9", "$. c #8F8FB2B2F7F7", "%. c #8B8BB0B0FAFA", "&. c #8B8BB1B1FAFA", "*. c #8C8CB2B2FBFB", "=. c #8F8FB3B3FBFB", "-. c #8C8CB2B2FCFC", ";. c #9393B4B4F7F7", ":. c #9292B6B6FCFC", ">. c #9393B7B7FDFD", ",. c #9595B3B3FAFA", "<. c #9696B7B7F8F8", "1. c #9595B7B7FDFD", "2. c #9999B9B9F9F9", "3. c #9B9BBBBBFAFA", "4. c #9E9EBEBEFBFB", "5. c #A0A0BFBFFEFE", "6. c #8D8DDFDF8D8D", "7. c #9595E7E79696", "8. c #ABABEAEAABAB", "9. c #B7B7ECECB7B7", "0. c #A1A1C0C0FCFC", "q. c #A4A4C2C2FCFC", "w. c #A7A7C3C3FDFD", "e. c #A9A9C5C5FEFE", "r. c #ABABC7C7FEFE", "t. c #AFAFC9C9FDFD", "y. c #BFBFE3E3D6D6", "u. c #FCFCA9A9A9A9", "i. c #FCFCB2B2B2B2", "p. c #FEFEB7B7B7B7", "a. c #C3C3D7D7FFFF", "s. c #C9C9DADAFBFB", "d. c #C8C8DADAFFFF", "f. c #DDDDF4F4DDDD", "g. c #D6D6E4E4FEFE", "h. c #FEFECACACACA", "j. c #E9E9F7F7E9E9", "k. c #EAEAF1F1FDFD", "l. c gray97", "z. c #F3F3F7F7FFFF", "x. c #FBFBF1F1F1F1", "c. c #FDFDF3F3F3F3", "v. c #F9F9F9F9F9F9", "b. c #F9F9FAFAF9F9", "n. c gray98", "m. c #FBFBFBFBFBFB", "M. c #FAFAFAFAFCFC", "N. c gray99", "B. c #FDFDFCFCFCFC", "V. c #FDFDFCFCFDFD", "C. c #FDFDFDFDFDFD", "Z. c #FEFEFDFDFDFD", "A. c #FEFEFEFEFEFE", "S. c gray100", "D. c None", /* pixels */ "D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.", "D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.", "D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.", "a.W Y E E T Y ; - = * & % $ @ # ", "S.z.a.r.r.r.r.w.w.5.4.3.2.<.;.+ ", "S.S.S.g.5.:.1.:.=.&.#.X...[ $.O ", "S.S.S.S.k.t.*.*.&.X.X.[ [ ' O.o ", "S.S.i.c.S.v.s.,.@.@.| } ~ ! o.. ", "N.h.{ u.m.l.k.f._ ) ( / ^ Q ` X ", "S.N.i.x.m.l.8.G m n j f a u A 4 ", "m.m.m.m.f.I N b l h s i y r N < ", "l.N.m.9.J N v l g s i t e w c , ", "l.j.7.P L K H F D S Z B N c z : ", "6.q 0 0 8 8 6 5 4 2 2 1 , , : < ", "D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.", "D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D." }; springlobby-0.169/src/images/flags/DK.xpm0000600000176000000410000000642112105760300021576 0ustar buildbotwww-data00000000000000/* XPM */ static const char *DK_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 124 2", " c black", ". c #C5C500000000", "X c #C7C700000000", "o c #C9C900000000", "O c #CBCB00000000", "+ c #CDCD00000000", "@ c #CFCF00000000", "# c #D1D100000000", "$ c #D5D500000000", "% c #D7D700000000", "& c #DBDB00000000", "* c #DFDF00000000", "= c #E1E100000000", "- c #E3E300000000", "; c #E5E500000000", ": c #E7E700000000", "> c #E4E40B0B0B0B", ", c #E4E40F0F0E0E", "< c #E9E900000000", "1 c #EBEB00000000", "2 c #EDED00000000", "3 c #EFEF00000000", "4 c #E4E410101010", "5 c #E6E613131313", "6 c #E5E514141414", "7 c #E6E619191919", "8 c #E7E719191919", "9 c #E8E81E1E1E1E", "0 c #E8E81F1F1F1F", "q c #F1F100000000", "w c #E6E62C2C2C2C", "e c #E9E920202020", "r c #EAEA23232323", "t c #E9E924242424", "y c #E9E926262626", "u c #EAEA25252525", "i c #EAEA2A2A2A2A", "p c #EAEA2B2B2B2B", "a c #EBEB2B2B2B2B", "s c #E8E82F2F2F2F", "d c #EBEB2C2C2C2C", "f c #E8E832323232", "g c #E8E835353535", "h c #ECEC30303030", "j c #ECEC31313131", "k c #EDED31313131", "l c #EDED37373636", "z c #EEEE36363636", "x c #EEEE37373737", "c c #ECEC37373838", "v c #EAEA39393939", "b c #EBEB3D3D3D3D", "n c #EBEB3F3F3F3F", "m c #EFEF3A3A3A3A", "M c #EFEF3B3B3C3C", "N c #EEEE3C3C3C3C", "B c #EFEF3C3C3D3D", "V c #EFEF3F3F3F3F", "C c #ECEC42424242", "Z c #EFEF41414242", "A c #ECEC44444444", "S c #EDED49494949", "D c #EEEE4E4E4E4E", "F c #F0F041414141", "G c #F0F042424242", "H c #F0F044444444", "J c #F0F045454545", "K c #F1F147474747", "L c #F1F149494949", "P c #F1F14E4E4E4E", "I c #F3F34F4F5050", "U c #F0F053535353", "Y c #F3F353535454", "T c #F0F054545555", "R c #F1F157575757", "E c #F3F354545454", "W c #F1F158585858", "Q c #F2F25C5C5C5C", "! c #F2F25D5D5D5D", "~ c #F4F458585858", "^ c #F4F459595959", "/ c #F5F55C5C5C5C", "( c #F5F55F5F5F5F", ") c #F2F260606060", "_ c #F2F261616262", "` c #F3F365656565", "' c #F3F366666666", "] c #F4F469696969", "[ c #F4F46A6A6A6A", "{ c #F6F674747373", "} c #F7F776767676", "| c #F7F777777777", " . c #F7F779797979", ".. c #F7F77B7B7A7A", "X. c #F7F77B7B7B7B", "o. c #E9E9CFCFCFCF", "O. c gray89", "+. c gray90", "@. c gray93", "#. c #F7F7E9E9E9E9", "$. c #F7F7ECECECEC", "%. c #FBFBE7E7E7E7", "&. c #F8F8EAEAEAEA", "*. c gray95", "=. c #F3F3F3F3F3F3", "-. c #F4F4F4F4F4F4", ";. c #F4F4F5F5F5F5", ":. c gray96", ">. c #F6F6F6F6F6F6", ",. c gray97", "<. c #FBFBF0F0F0F0", "1. c #FAFAF2F2F2F2", "2. c #FCFCF1F1F1F1", "3. c #FDFDF4F4F4F4", "4. c #F8F8F8F8F8F8", "5. c #F9F9F9F9F9F9", "6. c #FAFAF9F9F9F9", "7. c gray98", "8. c #FBFBFBFBFBFB", "9. c #FBFBFCFCFBFB", "0. c gray99", "q. c #FDFDFDFDFDFD", "w. c #FEFEFEFEFEFE", "e. c None", /* pixels */ "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "q 3 3 3 3 q.%.3 < : : = = * & & ", "3 X.X.X.} q.3.{ ] ' ( Q R Y D $ ", "3 X./ / / q.2.E A Z N l k d S $ ", "3 X./ / Y q.$.P H N l k p y A @ ", "< } ~ Y P 8.3.F M l k p y 0 n @ ", "q.q.q.q.8.8.6.6.6.,.>.>.=.=.>.+.", "q.q.q.q.8.6.6.6.,.>.>.-.*.*.=.O.", "< [ L A Z 6.#.c p u 0 8 6 5 f X ", "< ' A N m ,.#.k 0 e 8 5 , > w X ", ": _ ! W R ,.$.D C n v g f w w X ", ": * * & $ @.o.$ @ @ @ X X X X X ", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e." }; springlobby-0.169/src/images/flags/DM.xpm0000600000176000000410000000746612105760300021612 0ustar buildbotwww-data00000000000000/* XPM */ static const char *DM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 148 2", " c black", ". c #000029290000", "X c #00002D2D0000", "o c #00002F2F0000", "O c #000031310000", "+ c #000033330000", "@ c #000039390000", "# c #282827272020", "$ c #2E2E2D2D2626", "% c #000045450000", "& c #00004B4B0000", "* c #00004D4D0000", "= c #000051510000", "- c #000057570000", "; c #00005D5D0000", ": c #000063630000", "> c #000067670000", ", c #00006D6D0000", "< c #000071710000", "1 c #000077770000", "2 c #00007B7B0000", "3 c #474746464040", "4 c #4E4E4D4D4646", "5 c #565655554F4F", "6 c #5A5A5A5A5454", "7 c #5F5F5E5E5858", "8 c #737373736D6D", "9 c #7C7C7B7B7676", "0 c #000081810000", "q c #000083830000", "w c #000087870000", "e c #000089890000", "r c #18189A9A1919", "t c #1C1C9C9C1C1C", "y c #1D1D9C9C1D1D", "u c #21219F9F2121", "i c #3232A8A83232", "p c #3737AAAA3737", "a c #3838A7A73838", "s c #3838AAAA3838", "d c #3A3AA8A83A3A", "f c #3B3BA9A93B3B", "g c #3D3DA9A93D3D", "h c #3E3EAAAA3E3E", "j c #3D3DAEAE3D3D", "k c #3C3CD5D55353", "l c #7272B4B42727", "z c #7474B3B32727", "x c #7676B8B83C3C", "c c #4040ACAC4040", "v c #4040AEAE4040", "b c #4545AEAE4444", "n c #4242B0B04242", "m c #4545B1B14545", "M c #4A4AB3B34A4A", "N c #4B4BB4B44A4A", "B c #4F4FB3B34F4F", "V c #4E4EB6B64E4E", "C c #4F4FB6B64F4F", "Z c #5353B6B65353", "A c #5555B6B65555", "S c #5454B9B95454", "D c #5858B9B95858", "F c #5A5AB9B95A5A", "G c #5C5CBBBB5C5C", "H c #5E5EBBBB5E5E", "J c #5E5EBEBE5E5E", "K c #6060BDBD5B5B", "L c #6161BDBD6060", "P c #6262BEBE6262", "I c #6262BFBF6262", "U c #6565BFBF6565", "Y c #6666BFBF6666", "T c #5757C0C02A2A", "R c #5151CFCF3939", "E c #7F7FCDCD5050", "W c #6565C1C16666", "Q c #6666C1C16666", "! c #6868C3C36969", "~ c #6A6AC1C16A6A", "^ c #6A6AC2C26A6A", "/ c #6F6FC3C36F6F", "( c #7373C6C67373", ") c #7979C8C87A7A", "_ c #7B7BCACA7B7B", "` c #7F7FCBCB7F7F", "' c #3636A3A3E4E4", "] c #58589E9EDDDD", "[ c #4242A8A8E9E9", "{ c #9F9F6D6D2222", "} c #A9A97B7B3737", "| c #ABAB7E7E3939", " . c #DDDD62621F1F", ".. c #E0E056563232", "X. c #E0E056563434", "o. c #EFEF66662B2B", "O. c #EAEA6B6B3030", "+. c #E4E471713535", "@. c #E7E773733737", "#. c #F1F16D6D2A2A", "$. c #F3F36F6F3131", "%. c #F3F371713636", "&. c #F3F377773535", "*. c #E8E86E6E5555", "=. c #E8E870705353", "-. c #F1F16B6B4242", ";. c #F1F16C6C4444", ":. c #F4F473734040", ">. c #9191B4B42F2F", ",. c #9999BABA3D3D", "<. c #AFAF83834242", "1. c #B0B085854545", "2. c #BABA92925858", "3. c #9797CBCB4646", "4. c #E7E7BBBB0000", "5. c #E9E9BFBF0000", "6. c #EAEA82824C4C", "7. c #F9F989895353", "8. c #F8F888885454", "9. c #F6F683836262", "0. c #F7F784846262", "q. c #FDFDDBDB0000", "w. c #FDFDE1E10000", "e. c #F7F7E1E13434", "r. c #F4F4E1E13B3B", "t. c #E0E0FAFA4C4C", "y. c #F5F5E2E24141", "u. c #F5F5E4E45757", "i. c #F7F7E6E65E5E", "p. c #FDFDECEC6666", "a. c #FDFDEDED6A6A", "s. c #FEFEEEEE6D6D", "d. c #FDFDEFEF7F7F", "f. c #8080CDCD8080", "g. c #8383CDCD8383", "h. c #FEFEF2F28787", "j. c gray89", "k. c gray90", "l. c gray95", "z. c #F3F3F3F3F3F3", "x. c #F4F4F4F4F4F4", "c. c gray96", "v. c #F9F9F9F9F9F9", "b. c #FBFBFBFBFBFB", "n. c #FBFBFCFCFBFB", "m. c gray99", "M. c #FDFDFDFDFDFD", "N. c None", /* pixels */ "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "e e e e e 0 0 q. v.< , > : ; - ", "e g.g.f.` _ _ d.8 m.~ U L G D = ", "e g.! W I J 2.8.*.9.1.n j s Z & ", "w g.W I J 2.6.E [ K @.| p i B % ", "w.h.a.a.p.7.3.t.k ' x %.y.r.u.4.", " 9 7 6 5 *.:.] R O.o.X.$ # 3 ", "m.m.m.m.b.9.,.&.e.T z ;.z.z.z.j.", "2 ( S V N <.@.>.#.l .{ u y h O ", "2 / V N m v } $...-.{ u y r s X ", "< ~ U L L F A i.4 z.b v h s a . ", ", > : ; - = * 5. k.@ O X X . . ", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N." }; springlobby-0.169/src/images/flags/DO.xpm0000600000176000000410000000553012105760300021602 0ustar buildbotwww-data00000000000000/* XPM */ static const char * DO_xpm[] = { "16 16 142 2", " c None", ". c #0329A3", "+ c #0025A1", "@ c #001F9F", "# c #001D9D", "$ c #EDF3FD", "% c #FBEFED", "& c #D90000", "* c #D70000", "= c #D50000", "- c #D10000", "; c #CF0000", "> c #CB0000", ", c #C90000", "' c #95A5D8", ") c #94A5D8", "! c #93A4D8", "~ c #91A1D7", "{ c #8F9FD6", "] c #8B9DD4", "^ c #F7F9FD", "/ c #FCF7F7", "( c #EE6565", "_ c #ED6060", ": c #EC5C5C", "< c #EB5757", "[ c #E95353", "} c #E84E4E", "| c #C50000", "1 c #94A4D8", "2 c #7E92D0", "3 c #7B8FCF", "4 c #798DCE", "5 c #758ACC", "6 c #7287CB", "7 c #F4F8FC", "8 c #FBF5F4", "9 c #E94242", "0 c #E83C3D", "a c #E73737", "b c #E53131", "c c #E42C2C", "d c #E74949", "e c #C30000", "f c #0027A3", "g c #93A3D8", "h c #788DCE", "i c #7187CB", "j c #6D83C9", "k c #F2F7FB", "l c #FAF4F2", "m c #E83C3C", "n c #E73736", "o c #E42B2B", "p c #E22626", "q c #E64444", "r c #BF0000", "s c #0023A1", "t c #8FA1D7", "u c #7186CA", "v c #697FC7", "w c #F6F8FA", "x c #F9F6F5", "y c #E73636", "z c #E53030", "A c #E32B2B", "B c #E22525", "C c #E12020", "D c #E43F3F", "E c #BB0000", "F c #FDFDFD", "G c #FEFEFE", "H c #FCFCFC", "I c #FBFBFB", "J c #FAFAFA", "K c #F9F9F9", "L c #F8F8F8", "M c #F7F7F7", "N c #F6F6F6", "O c #F5F5F5", "P c #F4F4F4", "Q c #F3F3F3", "R c #F4F5F5", "S c #E5E5E5", "T c #DD0000", "U c #F06F6F", "V c #EC4F4F", "W c #EB4A49", "X c #EA4545", "Y c #E84040", "Z c #E73B3A", "` c #F8F4F3", " . c #F5F6F7", ".. c #516BBB", "+. c #4D67B9", "@. c #4863B6", "#. c #445FB4", "$. c #3F5BB2", "%. c #5B72BD", "&. c #00005D", "*. c #DB0000", "=. c #EF6A6A", "-. c #EB4949", ";. c #E83F3F", ">. c #E73A3A", ",. c #E63434", "'. c #F7EDEB", "). c #EFF3F6", "!. c #435FB4", "~. c #3B57AF", "{. c #586FBB", "]. c #000059", "^. c #EE6666", "/. c #EA4444", "(. c #E42E2E", "_. c #F6ECEA", ":. c #EDF2F5", "<. c #4762B6", "[. c #435EB4", "}. c #3E5AB2", "|. c #3A57AF", "1. c #3654AE", "2. c #556DB9", "3. c #000055", "4. c #ED6162", "5. c #EC5D5D", "6. c #EB5858", "7. c #EA5455", "8. c #E85050", "9. c #E74B4B", "0. c #F7EEED", "a. c #6078C0", "b. c #5D75BE", "c. c #5A72BC", "d. c #566FBB", "e. c #546DB9", "f. c #516AB8", "g. c #000053", "h. c #E9D5D1", "i. c #D9DFE7", "j. c #000063", "k. c #00005F", " ", " ", ". . . . + @ # $ % & * = - ; > , ", ". ' ) ! ~ { ] ^ / ( _ : < [ } | ", ". 1 2 3 4 5 6 7 8 9 0 a b c d e ", "f g 3 h 5 i j k l m n b o p q r ", "s t h 5 u j v w x y z A B C D E ", "F G F H H I J K L M N O P Q R S ", "T U V W X Y Z ` ...+.@.#.$.%.&.", "*.=.-.X ;.>.,.'.).+.@.!.$.~.{.].", "& ^./.;.>.,.(._.:.<.[.}.|.1.2.3.", "* 4.5.6.7.8.9.0.).a.b.c.d.e.f.g.", "= - ; > , | e h.i.j.k.&.].3.g.g.", " ", " ", " "}; springlobby-0.169/src/images/flags/DZ.xpm0000600000176000000410000000703312105760300021615 0ustar buildbotwww-data00000000000000/* XPM */ static const char *DZ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 138 2", " c black", ". c #000005050000", "X c #00000B0B0000", "o c #000011110000", "O c #00001B1B0000", "+ c #000023230000", "@ c #00002D2D0000", "# c #000035350000", "$ c #000047470909", "% c #00004B4B1111", "& c #00004F4F1717", "* c #000057572121", "= c #00005F5F2B2B", "- c #010165653333", "; c #030365653535", ": c #030367673737", "> c #09096B6B3939", ", c #0B0B6D6D3D3D", "< c #0D0D6F6F3D3D", "1 c #11116F6F3F3F", "2 c #111171714141", "3 c #212179794D4D", "4 c #727270705656", "5 c #3E3E85856060", "6 c #45458E8E6969", "7 c #4C4C91916E6E", "8 c #535395957474", "9 c #545491917070", "0 c #555595957474", "q c #545497977575", "w c #54549C9C7A7A", "e c #5A5A9A9A7A7A", "r c #5B5B9A9A7B7B", "t c #5B5B9E9E7D7D", "y c #66669A9A7C7C", "u c #757585856969", "i c #4E4EA2A28080", "p c #61619E9E8080", "a c #61619F9F8080", "s c #62629E9E8080", "d c #6262A1A18282", "f c #6767A3A38585", "g c #6868A3A38585", "h c #6868A4A48686", "j c #6A6AA4A48686", "k c #6969A7A78888", "l c #6E6EA6A68A8A", "z c #6E6EA7A78A8A", "x c #6F6FA7A78B8B", "c c #6F6FA8A88C8C", "v c #6F6FA9A98C8C", "b c #7474AAAA8F8F", "n c #7373ABAB9090", "m c #7474ABAB9090", "M c #7575ABAB9090", "N c #7979AEAE9494", "B c #7A7AAEAE9494", "V c #7D7DB1B19797", "C c #7F7FB2B29999", "Z c #B9B96D6D6060", "A c #DBDB51514444", "S c #DDDD55554A4A", "D c #D6D65A5A5050", "F c #DFDF55555050", "G c #CECE6E6E6161", "H c #D1D17B7B6F6F", "J c #DDDD77776D6D", "K c #E0E058584D4D", "L c #E1E15E5E5252", "P c #E5E570706666", "I c #E6E671716666", "U c #E7E771716666", "Y c #E3E374746C6C", "T c #E6E67B7B7474", "R c #8D8D95958080", "E c #8C8C9B9B8282", "W c #8585B5B59D9D", "Q c #8787B5B59E9E", "! c #8585B9B9A1A1", "~ c #8A8AB8B8A1A1", "^ c #8B8BB9B9A2A2", "/ c #8E8EBBBBA4A4", "( c #8F8FBCBCA5A5", ") c #9292BEBEA8A8", "_ c #9494BFBFA9A9", "` c #9494BFBFAAAA", "' c #9595BFBFAAAA", "] c #BEBEC7C7C3C3", "[ c #E7E78C8C8484", "{ c #E7E790908A8A", "} c #EDEDB9B9B8B8", "| c gray79", " . c #CBCBCBCBCBCB", ".. c #CECECECECECE", "X. c #D0D0D0D0D0D0", "o. c #D2D2D2D2D2D2", "O. c gray84", "+. c #D8D8D8D8D8D8", "@. c gray85", "#. c gray86", "$. c #DDDDDDDDDDDD", "%. c #E8E8CFCFCCCC", "&. c #EAEAD9D9D7D7", "*. c #F5F5CBCBCBCB", "=. c #F1F1D3D3D3D3", "-. c #F3F3D7D7D7D7", ";. c #E1E1E1E1E1E1", ":. c #E0E0E3E3E1E1", ">. c gray89", ",. c gray90", "<. c #E6E6E6E6E6E6", "1. c gray92", "2. c #ECECECECECEC", "3. c gray93", "4. c #EEEEEEEEEEEE", "5. c #EFEFEFEFEFEF", "6. c #EBEBF4F4F2F2", "7. c #F1F1ECECECEC", "8. c #F3F3ECECECEC", "9. c #F2F2EEEEEEEE", "0. c #F4F4E8E8E8E8", "q. c #F4F4EAEAEAEA", "w. c gray94", "e. c #F1F1F1F1F1F1", "r. c gray95", "t. c #F3F3F3F3F3F3", "y. c #F5F5F0F0F0F0", "u. c #F4F4F4F4F4F4", "i. c gray96", "p. c #F6F6F6F6F6F6", "a. c gray97", "s. c #F5F5FCFCFAFA", "d. c #F8F8F8F8F8F8", "f. c #F9F9F9F9F9F9", "g. c gray98", "h. c #FCFCFBFBFBFB", "j. c gray99", "k. c None", /* pixels */ "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "3 2 2 2 , ; = ; :.<.<.<.>.;.$.#.", "< ' ` ) ( ^ Q ! s.j.g.g.g.a.a.@.", "2 ' V N M v j R =.8.e.4.4.4.p.@.", "1 ) N n v E J U { -.9.4.4.1.p.O.", "> / b z k H U y &.[ 9.4.4.1.p.o.", "- ^ l g d U Z i L K A e.e.4.e.o.", "= Q f s t G F 9 %.T 9.p.e.4.e...", "* V t r q u D S Y *.0.t.e.e.e. .", "& N r q 7 6 5 4 } 0.t.e.e.4.e. .", "$ b l g s r 0 w 6.e.p.e.e.e.5. .", "% # @ + O o . X ] o..... . .| .", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k." }; springlobby-0.169/src/images/flags/EC.xpm0000600000176000000410000001001112105760300021555 0ustar buildbotwww-data00000000000000/* XPM */ static const char *EC_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 156 2", " c black", ". c #000000004545", "X c #000000006565", "o c #000000006767", "O c #00002525A1A1", "+ c #00002D2DA3A3", "@ c #111153538989", "# c #24246363B5B5", "$ c #29296767B7B7", "% c #2D2D6A6AB9B9", "& c #2E2E6B6BBABA", "* c #31316E6EBCBC", "= c #32326F6FBCBC", "- c #37377272BDBD", "; c #37377272BEBE", ": c #3C3C7676BFBF", "> c #44447A7ABFBF", ", c #41417979C1C1", "< c #41417A7AC2C2", "1 c #47477D7DC1C1", "2 c #46467D7DC4C4", "3 c #54548080A4A4", "4 c #59598383A6A6", "5 c #5D5D8787A8A8", "6 c #60608B8BABAB", "7 c #65658E8EAEAE", "8 c #69699191B0B0", "9 c #6C6C9393B0B0", "0 c #6E6E9595B3B3", "q c #72729898B6B6", "w c #76769B9BB8B8", "e c #7A7A9E9EBABA", "r c #7D7DA0A0BDBD", "t c #4B4B8181C6C6", "y c #4C4C8181C6C6", "u c #50508484C8C8", "i c #51518585C8C8", "p c #55558888CACA", "a c #55558989CACA", "s c #5A5A8C8CCCCC", "d c #5F5F8F8FCECE", "f c #7878A1A1D6D6", "g c #7C7CA4A4D8D8", "h c #A5A500000000", "j c #C1C100000000", "k c #C3C300000000", "l c #C5C500000000", "z c #C7C700000000", "x c #CBCB00000000", "c c #CDCD00000000", "v c #CFCF00000000", "b c #D1D100000000", "n c #D3D300000000", "m c #D5D500000000", "M c #D7D700000000", "N c #D9D900000000", "B c #DBDB00000000", "V c #DDDD00000000", "C c #D3D31D1D1D1D", "Z c #D4D421212020", "A c #D5D525252525", "S c #D6D62A2A2A2A", "D c #D8D82F2F2F2F", "F c #DADA33333333", "G c #D8D83F3F3F3F", "H c #DCDC38383838", "J c #DDDD3E3E3E3E", "K c #E1E100000000", "L c #EFEF00000000", "P c #ECEC33332C2C", "I c #EDED35352F2F", "U c #EDED38383232", "Y c #EEEE3C3C3535", "T c #EFEF40403939", "R c #F0F043433D3D", "E c #DFDF43434343", "W c #E0E048484848", "Q c #E2E24D4D4D4D", "! c #E3E352525252", "~ c #F1F147474242", "^ c #F2F24C4C4646", "/ c #F2F250504B4B", "( c #F3F355555050", ") c #F5F55A5A5555", "_ c #F6F65F5F5858", "` c #F7F763635D5D", "' c #E9E972727272", "] c #F7F767676262", "[ c #DFDFB1B10000", "{ c #E3E3B3B30000", "} c #E5E5B9B90000", "| c #E7E7BBBB0000", " . c #E9E9BFBF0000", ".. c #EBEBC1C10000", "X. c #EDEDC5C50000", "o. c #EFEFC7C70000", "O. c #EFEFC9C90000", "+. c #F1F1CBCB0000", "@. c #F3F3CFCF0101", "#. c #F5F5D1D10707", "$. c #F7F7D1D10D0D", "%. c #FDFDDFDF0B0B", "&. c #F7F7D3D31111", "*. c #F9F9D5D51717", "=. c #F9F9D7D71515", "-. c #F9F9D5D51919", ";. c #F9F9D7D71919", ":. c #F9F9D9D92727", ">. c #F4F4DEDE4949", ",. c #F5F5DFDF4E4E", "<. c #F2F2DADA5454", "1. c #F3F3DBDB5959", "2. c #F4F4DDDD5D5D", "3. c #F4F4DEDE6262", "4. c #F5F5DFDF6262", "5. c #F5F5DFDF6666", "6. c #F6F6DFDF6767", "7. c #F3F3DEDE6C6C", "8. c #F6F6E1E15252", "9. c #F7F7E3E35757", "0. c #F8F8E4E45C5C", "q. c #F5F5E2E26262", "w. c #F6F6E1E16B6B", "e. c #F7F7E2E26F6F", "r. c #F9F9E6E66060", "t. c #FAFAE7E76565", "y. c #FBFBE8E86969", "u. c #FCFCE9E96D6D", "i. c #F4F4E0E07070", "p. c #F5F5E1E17575", "a. c #F6F6E2E27979", "s. c #F7F7E4E47B7B", "d. c #F7F7E5E57F7F", "f. c #F8F8E4E47373", "g. c #F9F9E5E57777", "h. c #FAFAE6E67B7B", "j. c #FAFAE7E77D7D", "k. c #FDFDEAEA7171", "l. c #FDFDEBEB7575", "z. c #FEFEECEC7878", "x. c #8181A3A3BEBE", "c. c #9797B4B4CACA", "v. c #F8F8E6E68383", "b. c #F8F8E7E78787", "n. c #FBFBE8E88080", "m. c #FCFCE9E98383", "M. c #F9F9E8E88A8A", "N. c #FAFAE9E98D8D", "B. c #FBFBEAEA9090", "V. c #FBFBEBEB9292", "C. c #FCFCECEC9595", "Z. c #FCFCEDED9696", "A. c #FCFCEDED9898", "S. c #FCFCEDED9999", "D. c #FEFEF0F08F8F", "F. c None", /* pixels */ "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", ":.;.;.;.=.&.$.#.@.+.+.o.X... . .", "=.S.S.Z.Z.V.V.N.b.b.v.d.s.a.p.} ", ";.S.m.j.j.h.g.f.f.w.6.3.2.1.i.{ ", ";.Z.m.h.h.g.f.e.6.6.3.2.1.<.7.[ ", "%.N.z.z.k.u.y.t.r.0.9.8.,.>.q.| ", "@ c.c.r e w q 0 8 7 5 5 4 3 0 . ", "+ f a s a i y 2 < : - * & $ 1 o ", "O f s a i t 2 , : - * % $ # > o ", "x ' ! Q E E J H F F S A Z C G h ", "L ] ` _ ) ( / ^ ~ R T Y U I P b ", "K V V M M M M x x x l x l j j j ", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F." }; springlobby-0.169/src/images/flags/EE.xpm0000600000176000000410000000571712105760300021600 0ustar buildbotwww-data00000000000000/* XPM */ static const char *EE_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 115 2", " c black", ". c gray8", "X c #191919191919", "o c gray10", "O c gray12", "+ c #202020202020", "@ c gray14", "# c #252525252525", "$ c #2A2A2A2A2A2A", "% c #2A2A2B2B2B2B", "& c gray17", "* c #2F2F2F2F2F2F", "= c gray19", "- c #353535353535", "; c gray21", ": c #3B3B3B3B3A3A", "> c gray23", ", c #3B3B3B3B3C3C", "< c #3F3F3F3F3F3F", "1 c gray25", "2 c #414141414141", "3 c gray27", "4 c #464646464646", "5 c #49494A4A4949", "6 c #4B4B4A4A4B4B", "7 c #4B4B4B4B4B4B", "8 c gray31", "9 c #50504F4F5050", "0 c #535353535353", "q c gray33", "w c #585858585858", "e c #6F6F6F6F6F6F", "r c #727272727373", "t c #767676767676", "y c #000000009393", "u c #000000009797", "i c #000000009B9B", "p c #000000009F9F", "a c #00000505A3A3", "s c #00000D0DA5A5", "d c #00001313A9A9", "f c #00001919ADAD", "g c #00002121B1B1", "h c #00002727B3B3", "j c #00002D2DB5B5", "k c #00003333B9B9", "l c #00003737BBBB", "z c #00003B3BBDBD", "x c #00004141BFBF", "c c #00004343BFBF", "v c #26267A7ACCCC", "b c #2B2B7C7CCECE", "n c #2C2C7C7CCECE", "m c #31318080D0D0", "M c #31318181D0D0", "N c #37378484D1D1", "B c #37378484D2D2", "V c #3C3C8888D3D3", "C c #3D3D8888D4D4", "Z c #42428B8BD5D5", "A c #44448C8CD3D3", "S c #47478F8FD7D7", "D c #49498F8FD5D5", "F c #4E4E9393D7D7", "G c #4B4B9292D8D8", "H c #4C4C9292D8D8", "J c #51519595DADA", "K c #53539696D8D8", "L c #54549898DBDB", "P c #58589898D9D9", "I c #58589B9BDCDC", "U c #59599B9BDDDD", "Y c #5C5C9B9BDBDB", "T c #5C5C9D9DDEDE", "R c #5F5F9F9FDFDF", "E c #61619E9EDDDD", "W c #6565A1A1DDDD", "Q c #6969A4A4DFDF", "! c #6D6DA7A7E0E0", "~ c #7070A9A9E2E2", "^ c #7474ABABE2E2", "/ c #7777ADADE3E3", "( c #7979AEAEE4E4", ") c #7B7BB0B0E4E4", "_ c gray75", "` c #C1C1C1C1C1C1", "' c #C3C3C3C3C3C3", "] c #C5C5C5C5C5C5", "[ c gray79", "{ c #CBCBCBCBCBCB", "} c gray81", "| c gray82", " . c LightGray", ".. c #D7D7D7D7D7D7", "X. c #D9D9D7D7D9D9", "o. c gray85", "O. c gray86", "+. c #DFDFDFDFDFDF", "@. c #E1E1E1E1E1E1", "#. c gray89", "$. c gray90", "%. c #F1F1F1F1F1F1", "&. c gray95", "*. c #F2F2F2F2F3F3", "=. c #F3F3F3F3F3F3", "-. c #F4F4F4F4F4F4", ";. c gray96", ":. c #F6F6F6F6F6F6", ">. c gray97", ",. c #F8F8F8F8F8F8", "<. c #F9F9F9F9F9F9", "1. c gray98", "2. c #FBFBFBFBFBFB", "3. c gray99", "4. c None", /* pixels */ "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "c c c c x z l k j h g f d s a p ", "c ) ) ( ( ^ ~ ! Q W E Y P J F i ", "c ) T T I L J H S Z C N M n D u ", "c ( T I L J H S Z V N M n v A y ", " t w q 9 7 4 2 > ; = & # + 1 ", " r 0 8 6 4 < > ; = & # O X > ", " e 8 6 4 1 > ; * & @ O X . ; ", "$.3.2.2.<.<.<.:.:.:.=.=.*.*.=.' ", "#.3.<.<.<.<.:.:.:.=.*.*.%.*.*.` ", "@.2.<.<.<.<.:.:.:.:.:.=.*.=.*._ ", "+.O.o.o... . .} [ [ ] ] ` ` _ _ ", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4." }; springlobby-0.169/src/images/flags/EG.xpm0000600000176000000410000000645112105760300021576 0ustar buildbotwww-data00000000000000/* XPM */ static const char *EG_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 127 2", " c black", ". c #0B0B0B0B0B0B", "X c #0F0F0F0F0E0E", "o c #131313131313", "O c #181819191919", "+ c #1E1E1E1E1E1E", "@ c #232323232323", "# c gray16", "$ c #2C2C2C2C2C2C", "% c gray18", "& c #2F2F2F2F2F2F", "* c #323232323232", "= c #343434343434", "- c #353535353535", "; c #393939393939", ": c #3A3A3A3A3A3A", "> c gray24", ", c #3F3F3F3F3F3F", "< c gray26", "1 c #444444444444", "2 c #464646464646", "3 c #4B4B4B4B4B4B", "4 c #505050505050", "5 c #545454545555", "6 c #585858585858", "7 c #5D5D5D5D5D5D", "8 c #616161616262", "9 c gray39", "0 c gray40", "q c #6A6A6A6A6A6A", "w c #6C6C6C6C6D6D", "e c #707070707171", "r c gray48", "t c #7B7B7B7B7C7C", "y c #CFCF00000000", "u c #D3D300000000", "i c #D5D500000000", "p c #D7D700000000", "a c #D9D900000000", "s c #DBDB00000000", "d c #DFDF00000000", "f c #E1E100000000", "g c #E3E300000000", "h c #E5E500000000", "j c #E7E700000000", "k c #E9E900000000", "l c #EBEB00000000", "z c #EDED00000000", "x c #E9E92C2C2C2C", "c c #E9E931313131", "v c #EBEB37373737", "b c #ECEC3C3C3D3D", "n c #F1F135353535", "m c #EDED42424242", "M c #EFEF47474747", "N c #EBEB49494949", "B c #EDED4E4E4E4E", "V c #EDED53535353", "C c #EEEE57575757", "Z c #F0F04C4C4C4C", "A c #F1F151515151", "S c #F2F254545454", "D c #F2F259595959", "F c #F0F05C5C5C5C", "G c #F3F35C5C5C5C", "H c #F3F35F5F5F5F", "J c #ECEC69696969", "K c #EDED6D6D6D6D", "L c #EEEE71717171", "P c #EFEF75757575", "I c #EDED7E7E7E7E", "U c #F1F160606060", "Y c #F2F265656565", "T c #F2F269696969", "R c #F3F36D6D6D6D", "E c #F4F470707171", "W c #F5F574747474", "Q c #F6F677777777", "! c #F1F17A7A7B7B", "~ c #F6F679797979", "^ c #F6F67B7B7A7A", "/ c #F7F77B7B7B7B", "( c #EFEF7E7E8080", ") c #F2F2BBBB7676", "_ c #DEDECBCB6262", "` c #DFDFCCCC6666", "' c #EFEFDDDD7272", "] c #F0F0DDDD7474", "[ c #F1F1DEDE7777", "{ c #F2F2E0E07B7B", "} c #F3F3E2E27F7F", "| c #808080808080", " . c #848484848484", ".. c #888888888888", "X. c #8B8B8B8B8B8B", "o. c #A0A0A0A0A0A0", "O. c #F4F485858585", "+. c #F4F488888888", "@. c #F5F58B8B8B8B", "#. c #F6F68E8E8E8E", "$. c #F6F690909090", "%. c #F8F8A4A4A4A4", "&. c #E8E8D8D88383", "*. c #E9E9DADA8888", "=. c #EEEEDEDE8989", "-. c #F4F4E3E38383", ";. c #F2F2E5E59797", ":. c gray89", ">. c gray90", ",. c #E7E7E7E7E7E7", "<. c gray95", "1. c #F3F3F3F3F3F3", "2. c #F4F4F4F4F4F4", "3. c #F4F4F5F5F5F5", "4. c gray96", "5. c #F6F6F6F6F6F6", "6. c gray97", "7. c #F7F7F8F8F3F3", "8. c #FAFAFAFAF9F9", "9. c gray98", "0. c #FBFBFBFBFBFB", "q. c #FBFBFCFCFBFB", "w. c gray99", "e. c #FDFDFCFCFDFD", "r. c #FDFDFDFDFDFD", "t. c #FEFEFEFEFEFE", "y. c None", /* pixels */ "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "z l l l l l j j j f f d a a a p ", "l / / / Q Q E R T Y U F C V B p ", "l / H G D A A Z M m b v c x N y ", "n %.$.#.@.+.+.! ) ! P L K J I p ", "r.r.r.r.r.r.6.;.{ 7.6.3.3.3.3.,.", "r.r.r.w.w.w.-.=.] [ 3.3.3.<.3.>.", "r.r.w.w.8.8.-.*.&.' 3.3.3.<.3.:.", "& o.X... .| t ` _ e w q 0 9 r ", " 0 1 , : - $ # @ + O o X . & ", " 8 7 6 5 4 3 2 < > : - * & $ ", " ", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y." }; springlobby-0.169/src/images/flags/EH.xpm0000600000176000000410000000727512105760300021604 0ustar buildbotwww-data00000000000000/* XPM */ static const char *EH_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 146 2", " c black", ". c #000025250000", "X c #000027270000", "o c #00002B2B0000", "O c #00002D2D0000", "+ c #00002F2F0000", "@ c #000035350000", "# c #00003B3B0000", "$ c #00003F3F0000", "% c #3B3B37373737", "& c gray24", "* c #000045450000", "= c #00004B4B0000", "- c #000051510000", "; c #000055550000", ": c #00005B5B0000", "> c #000061610000", ", c #00006B6B0000", "< c #00006D6D0000", "1 c #00006F6F0000", "2 c gray26", "3 c gray28", "4 c #4B4B4B4B4D4D", "5 c #515150505151", "6 c #555555555555", "7 c gray35", "8 c #5A5A58585858", "9 c gray36", "0 c #5D5D5D5D5D5D", "q c #616160606161", "w c gray38", "e c #646464646464", "r c #656565656565", "t c #6A6A6A6A6A6A", "y c #6D6D6D6D6D6D", "u c #717171717070", "i c gray46", "p c #777777777777", "a c gray48", "s c gray49", "d c #7F7F7F7F7E7E", "f c gray50", "g c #121296960E0E", "h c #13139A9A1313", "j c #18189B9B1919", "k c #1E1E9C9C1E1E", "l c #23239F9F2323", "z c #2929A2A22929", "x c #2E2EA6A62E2E", "c c #3131A3A32F2F", "v c #3232A6A63232", "b c #3434A9A93434", "n c #3535A8A83535", "m c #3939A9A93939", "M c #3A3AABAB3A3A", "N c #3D3DACAC3D3D", "B c #3F3FADAD3F3F", "V c #4242AEAE4242", "C c #4444B0B04444", "Z c #4646B0B04646", "A c #4B4BB2B24B4B", "S c #5050B4B45050", "D c #5454B7B75555", "F c #5858B9B95858", "G c #5D5DBCBC5D5D", "H c #6161BEBE6262", "J c #6666BFBF6666", "K c #B1B100000000", "L c #B9B900000000", "P c #DDDD00000000", "I c #DFDF00000000", "U c #DFDF0B0B0B0B", "Y c #D8D82C2C2C2C", "T c #D8D82D2D2D2D", "R c #E3E300000000", "E c #E5E500000000", "W c #E7E700000000", "Q c #E9E900000000", "! c #EBEB00000000", "~ c #E2E214141414", "^ c #E4E41F1F1F1F", "/ c #F2F210101010", "( c #F2F214141414", ") c #F3F319191919", "_ c #F3F31A1A1A1A", "` c #F4F41F1F1F1F", "' c #E2E22C2C2C2C", "] c #F4F420202020", "[ c #F5F525252525", "{ c #F5F526262626", "} c #F2F22F2F2F2F", "| c #F3F332323232", " . c #F4F436363636", ".. c #F4F43B3B3B3B", "X. c #F5F53F3F3F3F", "o. c #DEDE4F4F4F4F", "O. c #F6F644444444", "+. c #F7F749494949", "@. c #FAFA62626262", "#. c #F7F779797A7A", "$. c #F8F878787878", "%. c #F9F981818181", "&. c #F8F884848686", "*. c #FAFA91919191", "=. c #DFDFDFDFDFDF", "-. c #DFDFE8E8DBDB", ";. c #DDDDEFEFDDDD", ":. c #F9F9C4C4C4C4", ">. c #FBFBC8C8C8C8", ",. c #FBFBD0D0D0D0", "<. c #F9F9D7D7D7D7", "1. c #E4E4E1E1E1E1", "2. c #E5E5E6E6E6E6", "3. c #E6E6E6E6E6E6", "4. c #E0E0EDEDE1E1", "5. c #E2E2EDEDE2E2", "6. c #E2E2EFEFE2E2", "7. c #E4E4EFEFE4E4", "8. c gray91", "9. c #E9E9E9E9E9E9", "0. c #EAEAEAEAEAEA", "q. c gray92", "w. c #ECECECECECEC", "e. c gray93", "r. c #E6E6F1F1E6E6", "t. c #E7E7F1F1E7E7", "y. c #E8E8F2F2E8E8", "u. c #EAEAF3F3EAEA", "i. c #EBEBF4F4EBEB", "p. c #EFEFF7F7EFEF", "a. c #F5F5E7E7E9E9", "s. c #F1F1F1F1F1F1", "d. c #F7F7F3F3F3F3", "f. c #F6F6F6F6F6F6", "g. c gray97", "h. c #F1F1F9F9F1F1", "j. c #F3F3F9F9F3F3", "k. c #F8F8F8F8F8F8", "l. c gray98", "z. c #FBFBFBFBFBFB", "x. c #FBFBFCFCFBFB", "c. c gray99", "v. c #FDFDFCFCFDFD", "b. c #FDFDFDFDFDFD", "n. c #FEFEFEFEFEFE", "m. c None", /* pixels */ "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", " K ", " f f f a i i u y t r q 0 7 o.! ", " f e q 0 7 6 5 4 3 2 & % Y +.! ", "=.s.e.e.e.0.0.0.0.3.3.1.Y { O.E ", "j.n.n.n.n.l.>.*.%.g.d.Y { ` X.E ", "j.n.n.z.n.,.@.<.$.g.Y [ ` ) ..E ", "p.n.z.n.l.z.:.&.#.g.a.^ ) ( .R ", ";.p.i.y.y.7.7.7.5.5.5.-.~ / | P ", "1 J C V M n v z l k j h g U } P ", "1 H G F D S A V V N m n v c ' P ", ", : : ; - = * * # @ O o X X O L ", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m." }; springlobby-0.169/src/images/flags/ER.xpm0000600000176000000410000001037012105760300021604 0ustar buildbotwww-data00000000000000/* XPM */ static const char *ER_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 167 2", " c black", ". c #00003F3F0000", "X c #000049490000", "o c #00004D4D0000", "O c #000051510000", "+ c #00005F5F0000", "@ c #000063630000", "# c #000069690000", "$ c #00006D6D0000", "% c #0B0B6B6B0000", "& c #000071710000", "* c #000077770000", "= c #00007B7B0000", "- c #00007F7F0000", "; c #5F5F35350000", ": c #555500004141", "> c #6E6E70702121", ", c #010100009D9D", "< c #00000000B9B9", "1 c #00000000BBBB", "2 c #00000000BDBD", "3 c #00000000BFBF", "4 c #00000000C1C1", "5 c #00000000C3C3", "6 c #00000000C5C5", "7 c #00000000C9C9", "8 c MediumBlue", "9 c #00000000D5D5", "0 c #00000505DDDD", "q c #00000D0DD5D5", "w c #39396464DFDF", "e c #34346D6DECEC", "r c #3C3C6868E1E1", "t c #3C3C6B6BE7E7", "y c #3D3D6E6EE7E7", "u c #3B3B7373EEEE", "i c #58586464CCCC", "p c #46467373E8E8", "a c #54547979E2E2", "s c #56567A7AE3E3", "d c #57577B7BE3E3", "f c #59597D7DE4E4", "g c #59597E7EE7E7", "h c #5C5C7F7FE6E6", "j c #61616B6BCECE", "k c #6F6F7676D3D3", "l c #000085850000", "z c #000089890000", "x c #00008B8B0000", "c c #000091910000", "v c #2626AAAA2626", "b c #2B2BA9A92B2B", "n c #2C2CA9A92C2C", "m c #3131ACAC3131", "M c #3737B0B03737", "N c #3D3DB4B43D3D", "B c #49499B9B3232", "V c #5555A0A03F3F", "C c #4242B4B44242", "Z c #4444B3B34444", "A c #4949B4B44949", "S c #4E4EB7B74E4E", "D c #5454AFAF4848", "F c #5353B9B95353", "G c #5858BCBC5757", "H c #5C5CBEBE5C5C", "J c #6161C0C06060", "K c #6565C2C26565", "L c #6969C5C56969", "P c #6D6DC8C86D6D", "I c #7070C5C57171", "U c #7E7E8A8ADDDD", "Y c #60608282E6E6", "T c #62628585E8E8", "R c #65658888EAEA", "E c #68688C8CEDED", "W c #6D6D8E8EECEC", "Q c #B1B100000000", "! c #B1B137375C5C", "~ c #B9B93E3E6161", "^ c #81817E7E3838", "/ c #AAAA4F4F2828", "( c #B8B861613E3E", ") c #C3C309090000", "_ c #DFDF00000000", "` c #DBDB27272E2E", "' c #DFDF2F2F3737", "] c #DCDC35352E2E", "[ c #E1E100000000", "{ c #E5E500000000", "} c #E7E700000000", "| c #EFEF00000000", " . c #F1F11A1A1A1A", ".. c #F4F41F1F1F1F", "X. c #E7E72D2D2D2D", "o. c #EBEB25252525", "O. c #ECEC24242424", "+. c #E9E92F2F2F2F", "@. c #EEEE2A2A2A2A", "#. c #EFEF2F2F2F2F", "$. c #E7E733333333", "%. c #E6E63F3F3C3C", "&. c #E8E836363939", "*. c #ECEC3B3B3F3F", "=. c #F1F130303434", "-. c #F3F336363939", ";. c #C5C53C3C5E5E", ":. c #ECEC5D5D3737", ">. c #EFEF77773D3D", ",. c #F4F476763434", "<. c #F7F775753A3A", "1. c #F5F575753F3F", "2. c #D3D34A4A4A4A", "3. c #CACA68685252", "4. c #D3D364647E7E", "5. c #E4E448484444", "6. c #ECEC46464848", "7. c #EFEF4D4D4545", "8. c #EFEF5F5F4444", "9. c #EFEF59594D4D", "0. c #F5F547474A4A", "q. c #EDED5F5F6363", "w. c #EFEF78785757", "e. c #F1F16B6B5656", "r. c #FBFB73735B5B", "t. c #FAFA7F7F5E5E", "y. c #F5F561616262", "u. c #F4F467676262", "i. c #F1F166666969", "p. c #F2F27E7E7E7E", "a. c #F5F57B7B7C7C", "s. c #FBFB7B7B7E7E", "d. c #80804A4A9595", "f. c #878752529797", "g. c #969656569494", "h. c #ACAC7272A9A9", "j. c #979787874E4E", "k. c #8A8AB6B67575", "l. c #B1B1A0A07878", "z. c #F4F4B9B93A3A", "x. c #D8D889897A7A", "c. c #F2F29D9D4242", "v. c #F5F590905959", "b. c #F5F59C9C5050", "n. c #F3F38F8F6D6D", "m. c #F6F690907A7A", "M. c #F4F4AFAF4646", "N. c #F6F6A1A15555", "B. c #F7F7BDBD4B4B", "V. c #FAFAB5B54D4D", "C. c #F6F6D6D63B3B", "Z. c #F6F6C1C14242", "A. c #F6F6C0C04646", "S. c #F7F7C6C64C4C", "D. c #F6F6C9C94040", "F. c #F7F7CDCD4747", "G. c #F8F8CBCB4A4A", "H. c #F8F8C2C25151", "J. c #F9F9C1C15656", "K. c #F8F8C8C85151", "L. c #FAFACCCC5151", "P. c #FAFACBCB5E5E", "I. c #F9F9D0D05959", "U. c #FAFAD8D86F6F", "Y. c #FBFBD7D77676", "T. c #FBFBDDDD7373", "R. c None", /* pixels */ "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.", "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.", "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.", ") ; % z c z l - - * & $ # @ + + ", "| s.p.x.l.k.I P L K J H G F S O ", "} a.u.t.r.w.3.j.D C N M m n A o ", "} m.P.I.J.L.V.0.5.( ^ B b v Z X ", "} Y.v.N.K.9.F.8.*.-.=.] / > V . ", "} T.e.H.S.6.Z.>.&.$.X.o... .2. ", "} U.b.B.A.c.C.:.+.@.O.` ! d.k 7 ", "_ n.G.M.D.z.,.#.' ~ f.i y e g 4 ", "_ i.7.1.<.%.;.g.j p u t r w d 2 ", "} y.q.4.h.U W E R T Y h g d a < ", "Q : , q 0 9 8 7 6 6 4 2 2 < < < ", "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.", "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R." }; springlobby-0.169/src/images/flags/ES.xpm0000600000176000000410000000716312105760300021613 0ustar buildbotwww-data00000000000000/* XPM */ static const char *ES_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 138 2", " c black", ". c #DDDD00000000", "X c #DFDF00000000", "o c #E1E100000000", "O c #E3E300000000", "+ c #E5E500000000", "@ c #E7E700000000", "# c #E9E900000000", "$ c #EBEB00000000", "% c #EDED00000000", "& c #EFEF00000000", "* c #F1F100000000", "= c #F3F300000000", "- c #F5F500000000", "; c #F7F700000000", ": c #F1F10B0B0B0B", "> c #F1F10F0F0E0E", ", c #F9F900000000", "< c #FBFB00000000", "1 c #FDFD00000000", "2 c red", "3 c #F2F213131313", "4 c #F3F319191919", "5 c #F4F41E1E1E1E", "6 c #F5F523232323", "7 c #F2F22C2C2C2C", "8 c #F2F22F2F2F2F", "9 c #F6F629292929", "0 c #F6F62C2C2C2C", "q c #F7F72E2E2E2E", "w c #F2F232323232", "e c #F3F335353535", "r c #F7F731313131", "t c #F4F439393939", "y c #F5F53D3D3D3D", "u c #F8F834343434", "i c #F8F837373737", "p c #F9F93A3A3A3A", "a c #F9F93C3C3D3D", "s c #FAFA3F3F3F3F", "d c #ECEC53535151", "f c #F6F642424242", "g c #F7F746464646", "h c #F7F749494949", "j c #F7F74B4B4B4B", "k c #F7F74E4E4E4E", "l c #FAFA42424242", "z c #FAFA44444444", "x c #FBFB47474747", "c c #FCFC4C4C4C4C", "v c #F8F850505050", "b c #F8F853535353", "n c #F9F954545555", "m c #F9F957575757", "M c #FDFD51515151", "N c #FDFD54545454", "B c #F9F958585858", "V c #FAFA5C5C5C5C", "C c #FAFA5D5D5D5D", "Z c #FEFE59595959", "A c #FEFE5C5C5C5C", "S c #FEFE5F5F5F5F", "D c #EDED67675353", "F c #EBEB69695757", "G c #F1F17E7E5757", "H c #FBFB60606060", "J c #FBFB61616262", "K c #FCFC65656565", "L c #FCFC66666666", "P c #FCFC69696969", "I c #FDFD6D6D6D6D", "U c #FDFD70707171", "Y c #FEFE74747474", "T c #FEFE77777777", "R c #FEFE79797979", "E c #FFFF7B7B7A7A", "W c #FFFF7B7B7B7B", "Q c #E0E08C8C5151", "! c #E4E4A7A74A4A", "~ c #DFDFDFDF0000", "^ c #E3E3E3E30000", "/ c #E5E5E5E50000", "( c #E7E7E7E70000", ") c #FBFBFBFB0000", "_ c #FDFDFDFD0000", "` c #FFFFFDFD0000", "' c #F2F2F2F21010", "] c #F2F2F2F21414", "[ c #F3F3F3F31919", "{ c #F3F3F3F31A1A", "} c #F4F4F4F41F1F", "| c #E8E8EEEE3D3D", " . c #F4F4F4F42020", ".. c #F5F5F5F52424", "X. c #F5F5F5F52525", "o. c #F5F5F4F42626", "O. c #F6F6F6F62A2A", "+. c #F6F6F6F62B2B", "@. c #F7F7F7F72F2F", "#. c #F3F3F3F33232", "$. c #F7F7F7F73030", "%. c #F7F7F7F73131", "&. c #F4F4F4F43636", "*. c #F4F4F5F53B3B", "=. c #F5F5F5F53F3F", "-. c #F8F8F8F83636", ";. c #F9F9F9F93C3C", ":. c #EBEBC9C94B4B", ">. c #EBEBDEDE5353", ",. c #ECECE1E14242", "<. c #F0F0E0E04848", "1. c #F4F4EEEE5757", "2. c #F3F3F4F44141", "3. c #F6F6F5F54444", "4. c #F8F8F4F44B4B", "5. c #FAFAFAFA4242", "6. c #FBFBFBFB4747", "7. c #FBFBFBFB4949", "8. c #FCFCFCFC4F4F", "9. c #F2F2F3F35555", "0. c #FDFDFDFD5353", "q. c #FEFEFEFE5858", "w. c #FEFEFEFE5959", "e. c #FEFEFEFE5C5C", "r. c #FCFCFCFC6A6A", "t. c #FDFDFDFD6F6F", "y. c #FEFEFEFE7373", "u. c #FEFEFEFE7676", "i. c #FEFEFEFE7979", "p. c #B6B6BBBB9D9D", "a. c #F2F2BDBDB0B0", "s. c #C0C0CECEA8A8", "d. c #F5F5C3C3B1B1", "f. c #EDEDE0E08D8D", "g. c #ECECD3D3D4D4", "h. c #F9F9F1F1D6D6", "j. c #F5F5EAEAE2E2", "k. c None", /* pixels */ "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "2 2 2 2 < 2 2 2 < < ; ; = = % % ", "2 W W W T Y U I P K H C m b k $ ", "2 W A A Z N M c x l y i r 0 h $ ", "` i.e.q.1.>.4.6.5.;.-.$.+.o.3.( ", "` u.q.9.G F f.2.;.-.$.+.o. .=.( ", "` y.0.d.D g.a.,.-.$.O.o.} [ *.( ", "` t.8.h.Q d j.<.@.O...} [ ] &.^ ", ") r.6.s.:.! p.| O.o.} [ ] ] #.~ ", "< K x y y u 0 9 6 5 4 3 > : 8 X ", "; H C B n v k g f y i e w 8 7 X ", "; = = % % = $ $ O O o o X X . . ", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k." }; springlobby-0.169/src/images/flags/ET.xpm0000600000176000000410000001011312105760300021601 0ustar buildbotwww-data00000000000000/* XPM */ static const char *ET_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 159 2", " c black", ". c #000013130000", "X c #000015150000", "o c #000019190000", "O c #00001B1B0000", "+ c #000021210000", "@ c #000027270000", "# c #00002D2D0000", "$ c #000035350000", "% c #000039390000", "& c #00003D3D0000", "* c #000043430505", "= c #000045450B0B", "- c #00004B4B0F0F", "; c #000043431515", ": c #00004D4D1313", "> c #000059592121", ", c #000065650000", "< c #2C2C76765757", "1 c #31317B7B5C5C", "2 c #37377F7F6161", "3 c #3D3D83836161", "4 c #48488E8E4949", "5 c #4C4C91914D4D", "6 c #515194945252", "7 c #525295955A5A", "8 c #42428B8B6666", "9 c #49498A8A6F6F", "0 c #4E4E93937070", "q c #515195957272", "w c #535396967575", "e c #545494947676", "r c #595996967C7C", "t c #585898987878", "y c #5C5C98987E7E", "u c #5C5C9B9B7C7C", "i c #61619D9D6262", "p c #61619E9E7F7F", "a c #6969A4A47070", "s c #7070A9A97070", "d c #7272ABAB7474", "f c #7676ADAD7777", "g c #4D4D96968A8A", "h c #525299998C8C", "j c #5F5F9A9A8181", "k c #6565A1A18282", "l c #6969A3A38383", "z c #6D6DA5A58686", "x c #7070A9A98C8C", "c c #7474ABAB8F8F", "v c #7777ADAD9191", "b c #7B7BABAB9696", "n c #7979AEAE9494", "m c #7B7BB0B09595", "M c #6B6BA3A3D1D1", "N c #6A6AB3B3DBDB", "B c #6B6BB3B3DEDE", "V c #7777ABABD7D7", "C c #7373B8B8CACA", "Z c #7E7EBCBCCBCB", "A c #6363B0B0E2E2", "S c #6464B0B0E2E2", "D c #6868B2B2E3E3", "F c #6E6EB6B6E4E4", "G c #7171B9B9E6E6", "H c #7777BABAE2E2", "J c #7777BBBBE6E6", "K c #7C7CBEBEE7E7", "L c #7A7ABDBDE8E8", "P c #DDDD00000000", "I c #DFDF00000000", "U c #E1E100000000", "Y c #E3E300000000", "T c #E5E500000000", "R c #E7E700000000", "E c #E9E900000000", "W c #EBEB00000000", "Q c #EDED00000000", "! c #EFEF00000000", "~ c #F1F100000000", "^ c #F3F300000000", "/ c #F5F500000000", "( c #F7F700000000", ") c #F1F10B0B0B0B", "_ c #F1F10F0F0E0E", "` c #F9F900000000", "' c #FBFB00000000", "] c #F2F213131313", "[ c #F3F319191919", "{ c #F1F11E1E2323", "} c #F2F238381010", "| c #F2F23C3C1414", " . c #F2F22C2C2C2C", ".. c #F2F22F2F2F2F", "X. c #F5F52E2E3131", "o. c #F2F232323232", "O. c #F3F335353535", "+. c #F4F439393939", "@. c #F5F53D3D3D3D", "#. c #F8F834343434", "$. c #F9F93A3A3A3A", "%. c #FAFA3F3F3F3F", "&. c #F3F341411919", "*. c #EFEF42422525", "=. c #F3F355553232", "-. c #F4F45A5A3F3F", ";. c #FAFA61613F3F", ":. c #C9C942425959", ">. c #CCCC46465C5C", ",. c #F6F642424242", "<. c #F7F746464646", "1. c #F7F74B4B4B4B", "2. c #FAFA44444444", "3. c #F8F850505050", "4. c #F9F954545555", "5. c #F9F958585858", "6. c #FAFA5D5D5D5D", "7. c #FBFB65654545", "8. c #FBFB69694949", "9. c #FBFB61616262", "0. c #FCFC66666666", "q. c #FCFC84846A6A", "w. c #E3E3E3E30000", "e. c #E5E5E5E50000", "r. c #E7E7E7E70000", "t. c #FDFDFDFD0000", "y. c #F2F2F2F21414", "u. c #F3F3F3F31919", "i. c #F3F3F3F31A1A", "p. c #F4F4F4F41F1F", "a. c #F4F4F4F42020", "s. c #F5F5F5F52525", "d. c #F6F6F6F62B2B", "f. c #F4F4F4F43636", "g. c #F4F4F5F53B3B", "h. c #F5F5F5F53F3F", "j. c #FBFBFBFB4545", "k. c #FBFBFCFC4949", "l. c #FCFCFCFC4B4B", "z. c #FCFCFCFC4F4F", "x. c #FDFDFCFC5050", "c. c #FDFDFDFD5353", "v. c #FDFDFDFD5454", "b. c #FEFEFEFE5858", "n. c #FDFDFDFD6F6F", "m. c #FEFEFEFE7373", "M. c #FEFEFEFE7676", "N. c #8F8FBBBB8F8F", "B. c #9898CACAADAD", "V. c #9696C9C9B0B0", "C. c #9A9ACBCBB2B2", "Z. c #9A9ACBCBB3B3", "A. c #B0B0D5D58888", "S. c #B0B0D5D58989", "D. c #BABADBDB9292", "F. c #8686C4C4D2D2", "G. c #8585C2C2DADA", "H. c #9090C8C8D4D4", "J. c None", /* pixels */ "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "> : : : - = * & % $ # @ + O . O ", "- m m n v c x z l k p y t w 0 ", "; b j y r e q h g 8 3 2 1 < 9 ", ", N.f d s a H L J B 7 6 5 4 i X ", "t.M.b.v.x.H.K D.C.F Z d.s.a.h.r.", "t.m.x.z.l.G.D.Z.V.A.N s.p.u.g.r.", "t.n.z.l.j.F.G B.A.S C p.u.y.f.w.", "' q.5.7.;.-.V S A M *.&.| } =.P ", "' 0.2.=.$.#.X.>.:.{ [ ] _ ) ..P ", "' 9.6.5.4.3.1.<.,.@.+.O.o.....P ", "^ ^ ^ Q Q Q W W R R U U U P P P ", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J." }; springlobby-0.169/src/images/flags/FAM.xpm0000600000176000000410000001017012105760300021677 0ustar buildbotwww-data00000000000000/* XPM */ static const char *FAM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 161 2", " c black", ". c #5353C9C90000", "X c #6363D1D10000", "o c #6767D3D30000", "O c #6969D3D30000", "+ c #6969D5D50000", "@ c #6969D7D70000", "# c #6D6DD7D70000", "$ c #7171D9D90000", "% c #7575DBDB0000", "& c #7F7FE1E10000", "* c #0000A7A7EFEF", "= c #0000ABABE9E9", "- c #0000A9A9F1F1", "; c #0000ADADF3F3", ": c #0000B1B1F5F5", "> c #0000B3B3F7F7", ", c #0000B5B5F9F9", "< c #0000B9B9FBFB", "1 c #0000BBBBFDFD", "2 c #0000BFBFFDFD", "3 c #0000C5C5F3F3", "4 c #0000C1C1FDFD", "5 c #0000C3C3FFFF", "6 c #3B3BD8D8F9F9", "7 c #4646D7D7FAFA", "8 c #4141DADAFAFA", "9 c #4747DCDCFBFB", "0 c #4C4CD8D8FAFA", "q c #4C4CD9D9FBFB", "w c #4C4CDDDDFCFC", "e c #5151D9D9FBFB", "r c #5151DADAFBFB", "t c #5252DFDFFDFD", "y c #5656DBDBFCFC", "u c #5555DDDDF9F9", "i c #5656DCDCFCFC", "p c #5B5BDCDCFDFD", "a c #5B5BDDDDFDFD", "s c #5F5FDCDCF9F9", "d c #5F5FDDDDFEFE", "f c #5E5EDEDEFEFE", "g c #5656E0E0FDFD", "h c #5B5BE2E2FEFE", "j c #6363DFDFFEFE", "k c #6464DDDDFAFA", "l c #6868DEDEFBFB", "z c #6D6DDFDFFCFC", "x c #6363E0E0FEFE", "c c #6666E0E0FEFE", "v c #7171E1E1FCFC", "b c #7575E2E2FDFD", "n c #7878E2E2FEFE", "m c #7B7BE4E4FEFE", "M c #7F7FE5E5FEFE", "N c #7F7FE6E6FEFE", "B c #7979E8E8FEFE", "V c #E3E300000000", "C c #E5E500000000", "Z c #E7E700000000", "A c #E9E900000000", "S c #EBEB00000000", "D c #EDED00000000", "F c #F7F700001111", "G c #F9F900001717", "H c #FBFB00001F1F", "J c #FDFD00002525", "K c #FDFD00002929", "L c #FDFD00002F2F", "P c #F3F322226767", "I c #F4F427276B6B", "U c #F4F428286B6B", "Y c #F5F52C2C6E6E", "T c #F5F52D2D6F6F", "R c #F7F72E2E6F6F", "E c #F6F631317272", "W c #F6F632327373", "Q c #F6F633337373", "! c #F7F737377777", "~ c #F7F738387777", "^ c #F7F739397878", "/ c #F8F834347373", "( c #F9F93B3B7777", ") c #F8F83C3C7A7A", "_ c #F8F83D3D7B7B", "` c #F8F83E3E7B7B", "' c #F8F83F3F7C7C", "] c #F4F441417C7C", "[ c #F5F545457F7F", "{ c #F9F942427E7E", "} c #F9F943437F7F", "| c #FAFA40407C7C", " . c #F6F649498282", ".. c #F7F74B4B8282", "X. c #F7F74E4E8585", "o. c #F9F944448080", "O. c #FBFB46468080", "+. c #FAFA48488383", "@. c #FAFA49498383", "#. c #FAFA49498484", "$. c #FBFB4D4D8787", "%. c #FBFB4E4E8787", "&. c #FCFC4B4B8484", "*. c #FBFB4F4F8888", "=. c #F8F856568C8C", "-. c #FDFD51518888", ";. c #FCFC53538A8A", ":. c #FCFC53538B8B", ">. c #FDFD58588E8E", ",. c #FDFD5C5C9191", "<. c #FBFB67679898", "1. c #FCFC6B6B9B9B", "2. c #FCFC6F6F9E9E", "3. c #FDFD7474A0A0", "4. c #FDFD7777A3A3", "5. c #FEFE7A7AA5A5", "6. c #8F8FE5E50000", "7. c #9595EBEB0000", "8. c #9999EFEF0000", "9. c #9D9DEFEF0000", "0. c #A1A1EDED0000", "q. c #A1A1F1F10000", "w. c #A3A3F3F30000", "e. c #BFBFF1F14B4B", "r. c #C1C1F1F14E4E", "t. c #C1C1F2F24F4F", "y. c #C2C2F2F25151", "u. c #C3C3F2F25252", "i. c #C3C3F2F25353", "p. c #C5C5F3F35656", "a. c #C6C6F3F35656", "s. c #C6C6F3F35757", "d. c #C7C7F4F45A5A", "f. c #C8C8F4F45A5A", "g. c #C8C8F4F45C5C", "h. c #C9C9F5F55E5E", "j. c #CACAF5F55F5F", "k. c #C8C8F2F26363", "l. c #C8C8F2F26565", "z. c #CACAF5F56060", "x. c #CBCBF6F66363", "c. c #CCCCF6F66464", "v. c #CCCCF6F66565", "b. c #C9C9F2F26868", "n. c #C9C9F3F36868", "m. c #CACAF3F36A6A", "M. c #CBCBF4F46B6B", "N. c #CDCDF7F76868", "B. c #CECEF7F76969", "V. c #CDCDF5F56F6F", "C. c #CFCFF8F86E6E", "Z. c #CFCFF5F57373", "A. c #D1D1F6F67676", "S. c #D3D3F7F77A7A", "D. c #D4D4F7F77E7E", "F. c #8080E6E6FFFF", "G. c #8181E6E6FFFF", "H. c #D6D6F8F88181", "J. c #D8D8F9F98585", "K. c #D8D8FAFA8989", "L. c None", /* pixels */ "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "5 5 5 5 3 L K J H G F w.0.q.9.8.", "5 G.M M B 5.4.3.2.1.<.K.J.H.D.7.", "5 G.c j h ,.;.;.-.#.} C.B.v.S.6.", "5 M j d g >.&.*.#.o.| B.v.z.A.& ", "5 m d p g ;.} @.[ ` ^ v.g.g.Z.% ", "2 m p i w %.| | _ ! Q g.g.p.V.$ ", "1 b y r 9 #.^ _ ! Q Y d.p.p.M.# ", "1 v r q 8 | / ( Q Y U p.u.t.n.@ ", "> z q 7 6 _ Y Q Y I P y.t.e.l.o ", "> l k s u =.@.X. .[ [ m.l.l.l.@ ", "; ; - - = D A A C C V @ O O X . ", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L." }; springlobby-0.169/src/images/flags/FI.xpm0000600000176000000410000000657012105760300021603 0ustar buildbotwww-data00000000000000/* XPM */ static const char *FI_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 128 2", " c black", ". c #000000008585", "X c #000000008787", "o c #000000008F8F", "O c #000000009999", "+ c #000000009B9B", "@ c #000000009F9F", "# c #00002929B9B9", "$ c #00002929BBBB", "% c #00002B2BBDBD", "& c #00002F2FBDBD", "* c #00003535BDBD", "= c #00003333C1C1", "- c #30306363C9C9", "; c #32326565CBCB", ": c #35356767CACA", "> c #37376A6ACCCC", ", c #3A3A6B6BCCCC", "< c #3A3A6C6CCDCD", "1 c #3D3D6D6DCECE", "2 c #3F3F6F6FCECE", "3 c #40406F6FCFCF", "4 c #41417272D0D0", "5 c #44447373D0D0", "6 c #44447373D1D1", "7 c #45457474D1D1", "8 c #47477676D2D2", "9 c #49497777D2D2", "0 c #4A4A7878D3D3", "q c #4D4D7A7AD3D3", "w c #4E4E7A7AD0D0", "e c #4C4C7A7AD4D4", "r c #4F4F7B7BD5D5", "t c #4F4F7C7CD5D5", "y c #50507C7CD2D2", "u c #51517D7DD5D5", "i c #53537F7FD6D6", "p c #54548080D7D7", "a c #55558080D7D7", "s c #55558181D7D7", "d c #56568080D4D4", "f c #59598383D7D7", "g c #59598484D9D9", "h c #5A5A8585D9D9", "j c #5E5E8686D8D8", "k c #5E5E8888DADA", "l c #5F5F8888DBDB", "z c #60608989DADA", "x c #62628A8AD8D8", "c c #62628B8BDCDC", "v c #63638B8BDCDC", "b c #63638C8CDCDC", "n c #66668D8DDADA", "m c #64648C8CDCDC", "M c #65658E8EDDDD", "N c #66668E8EDEDE", "B c #67678F8FDEDE", "V c #69699090DDDD", "C c #6B6B9191DEDE", "Z c #6C6C9393DFDF", "A c #8080A1A1E3E3", "S c #8080A2A2E2E2", "D c #8181A3A3E3E3", "F c #8383A4A4E3E3", "G c #8585A5A5E5E5", "H c #8787A7A7E5E5", "J c #A7A7B1B1C1C1", "K c #B5B5BDBDCDCD", "L c #B7B7BFBFCDCD", "P c #B7B7BFBFD7D7", "I c #B9B9C1C1CFCF", "U c #B9B9C1C1D3D3", "Y c #BBBBC3C3D1D1", "T c #BFBFC3C3D3D3", "R c #BFBFC7C7D5D5", "E c #C1C1C9C9D7D7", "W c #C3C3C9C9D7D7", "Q c #C1C1CBCBD9D9", "! c #C7C7CFCFDBDB", "~ c #CDCDD3D3DDDD", "^ c #D1D1D7D7E3E3", "/ c #D3D3D9D9E5E5", "( c #D7D7DBDBE7E7", ") c #D5D5DBDBEDED", "_ c #D9D9DDDDE9E9", "` c #DBDBDFDFEBEB", "' c #DBDBDFDFEFEF", "] c #DBDBE1E1EDED", "[ c #DDDDE1E1EBEB", "{ c #DDDDE3E3EDED", "} c #DFDFE3E3EDED", "| c #E3E3E9E9F3F3", " . c #E5E5EBEBF3F3", ".. c #E7E7EBEBF3F3", "X. c #E5E5EBEBF5F5", "o. c #F1F1F1F1F1F1", "O. c #F1F1F1F1F2F2", "+. c gray95", "@. c #F2F2F2F2F3F3", "#. c #F3F3F3F3F3F3", "$. c #F3F3F3F3F4F4", "%. c #F4F4F4F4F4F4", "&. c #F4F4F4F4F5F5", "*. c #F4F4F5F5F5F5", "=. c gray96", "-. c #F4F4F5F5F6F6", ";. c #F5F5F5F5F6F6", ":. c #F5F5F6F6F7F7", ">. c #F6F6F6F6F6F6", ",. c gray97", "<. c #F6F6F7F7F8F8", "1. c #F7F7F8F8F9F9", "2. c #F6F6F8F8FAFA", "3. c #F7F7F9F9FAFA", "4. c #F8F8F8F8F8F8", "5. c #F9F9F9F9F9F9", "6. c #F8F8F9F9FAFA", "7. c #F9F9FAFAFAFA", "8. c gray98", "9. c #FBFBFBFBFBFB", "0. c #F9F9FBFBFCFC", "q. c #FBFBFCFCFDFD", "w. c gray99", "e. c #FDFDFDFDFDFD", "r. c #FCFCFDFDFEFE", "t. c #FEFEFEFEFEFE", "y. c gray100", "u. c None", /* pixels */ "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", " . . .X.& $ * ` } { ` _ ( / ^ Q ", " .y.y.q.H S Z y.w.w.7.7.7.7.>.~ ", " .y.y.y.C N c y.9.7.7.7.,.>.,.! ", " .y.q.q.N b l 7.7.,.,.>.>.%.>.Q ", "= H C C v j h h i r 9 5 3 , i o ", "$ D N b j g s u e 8 4 2 > ; q X ", "$ S b j h s u q 8 5 2 , : - w X ", "' q.7.<.i t 9 ,.>.%.%.+.+.+.@.U ", "{ q.7.q.t 0 7 >.>.%.@.+.o.+.@.L ", "[ 9.7.7.n c j ,.>.>.>.@.+.+.+.L ", "_ ( / ^ @ O O P W E Y Y L L K J ", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u." }; springlobby-0.169/src/images/flags/FJ.xpm0000600000176000000410000001034512105760300021577 0ustar buildbotwww-data00000000000000/* XPM */ static const char *FJ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 166 2", " c black", ". c #000000005959", "X c #000000006B6B", "o c #31311D1D6F6F", "O c #7F7F13133B3B", "+ c #676719194B4B", "@ c #00002727DDDD", "# c #00002929DDDD", "$ c #00002929DFDF", "% c #00002D2DDFDF", "& c #00002F2FDFDF", "* c #00002F2FE1E1", "= c #00003131E3E3", "- c #00003535E3E3", "; c #00003737E5E5", ": c #00003B3BE5E5", "> c #00003D3DE7E7", ", c #00004141E7E7", "< c #00004343E9E9", "1 c #00004747E9E9", "2 c #00004949EBEB", "3 c #00004D4DEBEB", "4 c #00004D4DEDED", "5 c #00005555EDED", "6 c #00005555EFEF", "7 c #00005959EFEF", "8 c #00005F5FF1F1", "9 c #00005B5BFBFB", "0 c #00006363F1F1", "q c #00006565F3F3", "w c #00006969F5F5", "e c #00006F6FF7F7", "r c #00007171F7F7", "t c #00007575F9F9", "y c #00007777F9F9", "u c #00007B7BFBFB", "i c #696955558F8F", "p c #7D7D7F7FB7B7", "a c #51517878C5C5", "s c #00008181FDFD", "d c #5E5E8585CECE", "f c #54549E9EF8F8", "g c #4242A0A0F3F3", "h c #4646A1A1F4F4", "j c #4D4DA1A1F5F5", "k c #4C4CA4A4F5F5", "l c #4D4DA7A7F6F6", "z c #5050A5A5F2F2", "x c #5353A7A7F2F2", "c c #5252A4A4F6F6", "v c #5454A7A7F2F2", "b c #5656A6A6F7F7", "n c #5757A7A7F7F7", "m c #5252A9A9F6F6", "M c #5252AAAAF7F7", "N c #5555A8A8F3F3", "B c #5757A8A8F7F7", "V c #5757ACACF7F7", "C c #5959A1A1F9F9", "Z c #5E5EA4A4FAFA", "A c #5959AAAAF3F3", "S c #5C5CADADF4F4", "D c #5B5BA9A9F8F8", "F c #5B5BAAAAF8F8", "G c #5A5AADADF8F8", "H c #5C5CAAAAF8F8", "J c #5C5CAFAFF8F8", "K c #5B5BB1B1F9F9", "L c #78789D9DD9D9", "P c #6363A7A7FBFB", "I c #6060AEAEF5F5", "U c #6060ACACF9F9", "Y c #6060ADADF9F9", "T c #6464AFAFFAFA", "R c #6565AFAFFAFA", "E c #6464B0B0F6F6", "W c #6060B1B1F9F9", "Q c #6363B4B4FAFA", "! c #6565B0B0FAFA", "~ c #6868B3B3F7F7", "^ c #6A6AB4B4F7F7", "/ c #6B6BB5B5F7F7", "( c #6E6EB7B7F7F7", ") c #6969B1B1FAFA", "_ c #6969B2B2FBFB", "` c #6D6DB4B4FBFB", "' c #6D6DB5B5FBFB", "] c #6F6FB8B8F8F8", "[ c #7171B7B7FCFC", "{ c #7272B9B9F8F8", "} c #7373B9B9F9F9", "| c #7676BCBCF9F9", " . c #7777BCBCF9F9", ".. c #7A7ABEBEFAFA", "X. c #7E7EC0C0FBFB", "o. c #7F7FC0C0FBFB", "O. c #898919193D3D", "+. c #838323234949", "@. c #B7B769697F7F", "#. c #B8B860607070", "$. c #BCBC6D6D7A7A", "%. c #CFCF19191919", "&. c #CFCF3A3A3737", "*. c #D2D23B3B3939", "=. c #D1D13F3F3C3C", "-. c #CFCF53535454", ";. c #D5D548484545", ":. c #D5D548484646", ">. c #D3D35C5C5D5D", ",. c #CCCC60606666", "<. c #CECE65656A6A", "1. c #C5C56D6D7B7B", "2. c #CDCD6A6A7070", "3. c #CFCF6F6F7474", "4. c #D8D874747979", "5. c #E3E36B6B6969", "6. c #E5E574747272", "7. c #E0E078787A7A", "8. c #E9E97C7C7A7A", "9. c #818167679595", "0. c #9A9A7A7A9C9C", "q. c #ACAC7B7B9595", "w. c #C0C07C7C8D8D", "e. c #C3C37C7C8C8C", "r. c #E5E5B0B05050", "t. c #E6E6B0B05353", "y. c #E7E7B4B45959", "u. c #E8E8B5B55959", "i. c #9A9A8383A8A8", "p. c #93939393C0C0", "a. c #92929595C3C3", "s. c #97979A9AC2C2", "d. c #9F9FA4A4CBCB", "f. c #9999A7A7D3D3", "g. c #8787BEBEF1F1", "h. c #8080B8B8FCFC", "j. c #A6A6AFAFD5D5", "k. c #8484C0C0FCFC", "l. c #8C8CC2C2F2F2", "z. c #8888C3C3FCFC", "x. c #8B8BC4C4FDFD", "c. c #D7D788888E8E", "v. c #D9D9A1A1AAAA", "b. c #D9D9A7A7AFAF", "n. c #DADAABABB4B4", "m. c #E2E281818282", "M. c #E3E386868787", "N. c #EBEB85858383", "B. c #E7E794949595", "V. c #E4E4B7B7BEBE", "C. c #F1F1A6A6A4A4", "Z. c #F1F1A9A9A7A7", "A. c #DADAB9B9C4C4", "S. c #E5E5BFBFC6C6", "D. c #E6E6BFBFC6C6", "F. c #C7C7DFDFF4F4", "G. c #C9C9DFDFF3F3", "H. c #CDCDE2E2F5F5", "J. c #CCCCE3E3F6F6", "K. c #E9E9CFCFD4D4", "L. c #E2E2D6D6E0E0", "P. c #E7E7EDEDF2F2", "I. c #EAEAEEEEF3F3", "U. c #EAEAEFEFF3F3", "Y. c #EDEDF1F1F5F5", "T. c None", /* pixels */ "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.", "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.", "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.", "1.9.X O O.. + e.9 t r w q 0 7 6 ", "o D.D.Z.Z.A.D.j...z.X...g.} { 2 ", "%.B.e.e.5.e.e.e.P Q J J U D _ 1 ", "+.V.C.y.e.Z.e.q.P G <.>.u.-.3., ", "i D.i.q.e.b.n.q.C D ,.u.t.r.2.> ", "p f.d p.p.a L j.f M H.U.:.U.H.; ", "s x.[ ` _ ! Y H n l #.;.*.=.$.= ", "u k.` _ ! Y D n c l F.I.=.I.G.* ", "y z._ T Y D b c j h g l.&.g.v $ ", "e o... .} ] / ~ E I S A v x x @ ", "w q 8 8 5 4 2 < > : - * * @ @ @ ", "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.", "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T." }; springlobby-0.169/src/images/flags/FK.xpm0000600000176000000410000001047512105760300021604 0ustar buildbotwww-data00000000000000/* XPM */ static const char *FK_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 170 2", " c black", ". c #000000000303", "X c #000000000707", "o c #000000000909", "O c #000000000F0F", "+ c #000000001313", "@ c #000000001717", "# c #000000001919", "$ c #000000001D1D", "% c #000000001F1F", "& c #000000002121", "* c #000000002525", "= c #000000002B2B", "- c #000000002D2D", "; c #000000002F2F", ": c #000000003333", "> c #000000003939", ", c #000000003F3F", "< c #000000004545", "1 c #000000004949", "2 c #000000004B4B", "3 c #000000004F4F", "4 c #000000005353", "5 c #000000005757", "6 c #000000005959", "7 c #000000005B5B", "8 c #000000005D5D", "9 c #000000006161", "0 c #000000006565", "q c #000000006969", "w c #000003037D7D", "e c #797931316565", "r c #727269696767", "t c #74746C6C6E6E", "y c #7D7D72726D6D", "u c #00001D1D9393", "i c #21213B3B8F8F", "p c #23233B3B9191", "a c #2A2A3C3C9191", "s c #3B3B33338383", "d c #292942429494", "f c #2A2A42429494", "g c #2C2C43439393", "h c #2E2E47479797", "j c #2F2F46469696", "k c #2F2F47479797", "l c #2F2F49499898", "z c #313144449797", "x c #363647479696", "c c #32324A4A9595", "v c #36364B4B9191", "b c #36364B4B9A9A", "n c #353549499C9C", "m c #34344C4C9A9A", "M c #34344C4C9B9B", "N c #3C3C4C4C9696", "B c #3B3B4C4C9898", "V c #3B3B4D4D9C9C", "C c #3C3C4F4F9D9D", "Z c #3C3C50509494", "A c #3A3A51519D9D", "S c #3A3A51519E9E", "D c #3D3D53539A9A", "F c #3D3D54549D9D", "G c #3F3F5353A0A0", "H c #3F3F5555A1A1", "J c #3A3A7878B8B8", "K c #3D3D7A7AB9B9", "L c #404052529C9C", "P c #424257579F9F", "I c #444456569E9E", "U c #40405656A0A0", "Y c #40405656A1A1", "T c #42425757A2A2", "R c #44445A5AA4A4", "E c #45455A5AA4A4", "W c #45455A5AA6A6", "Q c #46465959A7A7", "! c #46465C5CA2A2", "~ c #49495959A0A0", "^ c #49495D5DA2A2", "/ c #49495F5FA7A7", "( c #49495F5FA8A8", ") c #52525E5EA1A1", "_ c #4B4B6060A5A5", "` c #4E4E6363A8A8", "' c #4F4F6363A9A9", "] c #46467575A9A9", "[ c #50506363A8A8", "{ c #54546767A9A9", "} c #54546868AAAA", "| c #5A5A6B6BABAB", " . c #58586C6CADAD", ".. c #5C5C6E6EAEAE", "X. c #53536A6AB2B2", "o. c #5D5D7070B0B0", "O. c #7A7A79798585", "+. c #61617373B0B0", "@. c #61617474B3B3", "#. c #65657777B3B3", "$. c #66667878B4B4", "%. c #6B6B7A7AB6B6", "&. c #68687C7CB6B6", "*. c #6A6A7C7CB7B7", "=. c #6F6F7F7FB9B9", "-. c #73737777AFAF", ";. c #4F4F8080B0B0", ":. c #53538484B3B3", ">. c #7A7AA8A8B6B6", ",. c #45458787D1D1", "<. c #45458F8FDCDC", "1. c #4C4C9090D8D8", "2. c #58589393D7D7", "3. c #5E5E9595D1D1", "4. c #58589797DBDB", "5. c #4D4D9595E0E0", "6. c #54549999E2E2", "7. c #55559A9AE3E3", "8. c #9D9D1F1F4545", "9. c #818129295B5B", "0. c #A3A31F1F4343", "q. c #A5A52D2D5151", "w. c #828278787373", "e. c #808078787575", "r. c #80807A7A7878", "t. c #FDFD13131515", "y. c #CDCD63637575", "u. c #DFDF71717B7B", "i. c #FEFE68686767", "p. c #F0F06C6C7070", "a. c #FEFE72727070", "s. c #F9F976767878", "d. c #FDFD78787575", "f. c #FBFB7B7B7D7D", "g. c #8D8D6B6B9898", "h. c #929271719C9C", "j. c #87877979A7A7", "k. c #BCBC7C7C9696", "l. c #FEFE80807D7D", "z. c #92928E8E9191", "x. c #969691919090", "c. c #989891919191", "v. c #9F9F9E9E9D9D", "b. c #90908B8BB7B7", "n. c #8585ABABB1B1", "m. c #A3A38181A4A4", "M. c #A4A48383A6A6", "N. c #A4A49696B9B9", "B. c #9B9BAEAED5D5", "V. c #9F9FADADD3D3", "C. c #B4B4CACAD5D5", "Z. c #BCBCD7D7E8E8", "A. c #D4D487879797", "S. c #D7D789899898", "D. c #EBEB87878D8D", "F. c #FAFA85858686", "G. c #FCFC93939494", "H. c #FEFE9F9F9C9C", "J. c #FDFDA1A19E9E", "K. c #E7E7A1A1A9A9", "L. c #E9E9AEAEB6B6", "P. c #E8E8B2B2B7B7", "I. c #F2F2B8B8BEBE", "U. c #E2E2B9B9C2C2", "Y. c #F0F0BFBFC4C4", "T. c #C0C0D9D9E8E8", "R. c #EEEEC6C6CBCB", "E. c #EFEFD3D3D8D8", "W. c #E6E6D8D8E2E2", "Q. c None", /* pixels */ "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", "u.j.u 0.8.w 9.y.q 7 5 3 1 < , < ", "s Y.W.L.K.U.E.V.%.#.+...| { ` ; ", "t.G.l.a.i.d.s.p.) T 2.4.1.,.^ = ", "q.I.H.f.F.J.D.k.~ C 7.T.Z.<.I * ", "-.R.N.S.A.B.P.M.G b 5.>.n.J L % ", "e b.X.h.g.W &.m.N z 7.C.v.K C $ ", "0 =.` / W T V M l a 3.x.y ] x + ", "9 &./ W H A m k f c.z.:.;.t O.O ", "8 $.R H A b k f p i e.w.y r k o ", "4 @.o. .} [ _ ! T F D Z v c g ", "7 1 < , > : ; * & % + + O o o + ", "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q." }; springlobby-0.169/src/images/flags/FM.xpm0000600000176000000410000000726112105760300021605 0ustar buildbotwww-data00000000000000/* XPM */ static const char *FM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 141 2", " c black", ". c #00001F1F7D7D", "X c #000021218181", "o c #000025258181", "O c #000027278383", "+ c #000029298585", "@ c #00002B2B8585", "# c #00002D2D8989", "$ c #00002F2F8989", "% c #000033338B8B", "& c #000035358D8D", "* c #000039398F8F", "= c #00003B3B9393", "- c #00003D3D9393", "; c #000041419797", ": c #000047479B9B", "> c #00004D4D9F9F", ", c #03035353A3A3", "< c #0B0B5959A5A5", "1 c #11115D5DA9A9", "2 c #19196363ADAD", "3 c #1F1F6969B1B1", "4 c #25256D6DB3B3", "5 c #27276F6FB5B5", "6 c #2B2B7373B5B5", "7 c #2D2D7373B5B5", "8 c #31317575B9B9", "9 c #33337777B9B9", "0 c #35357979BBBB", "q c #39397B7BBDBD", "w c #3B3B7D7DBDBD", "e c #3D3D7D7DBFBF", "r c #3F3F7F7FBFBF", "t c #41417F7FBFBF", "y c #41418181BFBF", "u c #67679595C2C2", "i c #6A6A9797C4C4", "p c #6C6C9999C6C6", "a c #6E6E9999C6C6", "s c #6E6E9A9AC6C6", "d c #6F6F9B9BC7C7", "f c #6F6F9B9BC8C8", "g c #70709C9CC7C7", "h c #70709C9CC8C8", "j c #72729D9DC9C9", "k c #75759F9FCACA", "l c #7777A1A1CBCB", "z c #7B7BA2A2CACA", "x c #7878A1A1CCCC", "c c #7A7AA2A2CCCC", "v c #7A7AA4A4CDCD", "b c #7C7CA4A4CACA", "n c #7D7DA4A4CBCB", "m c #7C7CA5A5CECE", "M c #7F7FA5A5CCCC", "N c #7F7FA6A6CCCC", "B c #7E7EA6A6CECE", "V c #7E7EA7A7CFCF", "C c #8282A8A8CDCD", "Z c #8484A9A9CFCF", "A c #8585AAAACFCF", "S c #8585ABABCFCF", "D c #8080A8A8D0D0", "F c #8181A9A9D0D0", "G c #8181AAAAD1D1", "H c #8282A9A9D0D0", "J c #8282A9A9D1D1", "K c #8383A9A9D1D1", "L c #8383ABABD2D2", "P c #8484ABABD2D2", "I c #8585ACACD2D2", "U c #8686ACACD3D3", "Y c #8686ADADD2D2", "T c #8787ADADD3D3", "R c #8989ADADD2D2", "E c #8888ADADD4D4", "W c #8888AEAED4D4", "Q c #8989AFAFD5D5", "! c #8A8AAEAED4D4", "~ c #8A8AAFAFD4D4", "^ c #8C8CAFAFD3D3", "/ c #8F8FB1B1D4D4", "( c #8E8EB1B1D6D6", ") c #8F8FB2B2D5D5", "_ c #8E8EB2B2D6D6", "` c #9191B4B4D7D7", "' c #9393B4B4D7D7", "] c #9595B6B6D7D7", "[ c #9090B5B5D8D8", "{ c #9191B4B4D8D8", "} c #9191B5B5D8D8", "| c #9292B6B6D9D9", " . c #9292B7B7D9D9", ".. c #9595B7B7DADA", "X. c #9696B7B7D8D8", "o. c #9797B9B9DBDB", "O. c #9797BABADBDB", "+. c #9898B8B8D8D8", "@. c #9999B9B9D9D9", "#. c #9999B9B9DADA", "$. c #9898BABADBDB", "%. c #9B9BBBBBDBDB", "&. c #9A9ABCBCDCDC", "*. c #9B9BBCBCDDDD", "=. c #9C9CBCBCDBDB", "-. c #9D9DBDBDDEDE", ";. c #9D9DBEBEDEDE", ":. c #9E9EBEBEDDDD", ">. c #9F9FBEBEDDDD", ",. c #9F9FBFBFDFDF", "<. c #A0A0BFBFDDDD", "1. c #A3A3C0C0DEDE", "2. c #A5A5C0C0DBDB", "3. c #A5A5C2C2DFDF", "4. c #A6A6C1C1DCDC", "5. c #A8A8C2C2DBDB", "6. c #ADADC6C6DDDD", "7. c #AEAEC7C7DFDF", "8. c #A5A5C3C3E0E0", "9. c #A8A8C4C4E0E0", "0. c #A8A8C4C4E1E1", "q. c #AAAAC6C6E2E2", "w. c #ABABC7C7E2E2", "e. c #ADADC8C8E3E3", "r. c #AEAEC8C8E4E4", "t. c #AEAEC9C9E4E4", "y. c #B1B1C9C9E0E0", "u. c #B0B0CACAE4E4", "i. c #B5B5CCCCE4E4", "p. c #B9B9CFCFE4E4", "a. c #B8B8CECEE6E6", "s. c #B9B9D0D0E6E6", "d. c #BABAD0D0E6E6", "f. c #BDBDD3D3E7E7", "g. c #BFBFD2D2E5E5", "h. c #BFBFD4D4E9E9", "j. c gray96", "k. c #F6F6F6F6F6F6", "l. c #FBFBFBFBFBFB", "z. c gray99", "x. c None", /* pixels */ "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "y y y y e w 0 8 6 4 3 2 1 < , > ", "y u.u.r.e.w.9.s.a.-.<.O.$.o.` : ", "y u.,.-.&.$.| z.l.! ! P Z B / ; ", "t r.-.&.O. .| 3.3.T J V B z ^ = ", "e e.&.o.h.f.` Q T T y.7.l k R & ", "w 9.o.| l.l.i.T Z d.k.j.j d S $ ", "8 9..._ s.a.R Z B B 6.4.j s Z @ ", "7 9.| _ Q T J $.] l d d s i n O ", "5 1._ R T J v j.j.d d s i u B . ", "3 -.-.$.$.] / 3.<.S Z Z B n z . ", "2 1 < , > : - - & % $ @ . o . . ", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x." }; springlobby-0.169/src/images/flags/FO.xpm0000600000176000000410000000553712105760300021613 0ustar buildbotwww-data00000000000000/* XPM */ static const char *FO_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 106 2", " c black", ". c #00000000B1B1", "X c #00000000B5B5", "o c #00000000BDBD", "O c #00000000C3C3", "+ c #00000303D7D7", "@ c #00000707D9D9", "# c #00000F0FDBDB", "$ c #00001111DBDB", "% c #14144C4CDADA", "& c #19195050DBDB", "* c #1F1F5555DDDD", "= c #20205555DDDD", "- c #24245959DEDE", "; c #25255959DEDE", ": c #2A2A5E5EE0E0", "> c #2B2B5E5EE0E0", ", c #36366565DEDE", "< c #2E2E6060E2E2", "1 c #2F2F6262E2E2", "2 c #30306363E2E2", "3 c #34346565E3E3", "4 c #35356666E3E3", "5 c #36366767E3E3", "6 c #3A3A6969E4E4", "7 c #3B3B6B6BE5E5", "8 c #3F3F6D6DE1E1", "9 c #40406E6EE5E5", "0 c #41417070E6E6", "q c #45457272E7E7", "w c #46467474E8E8", "e c #4B4B7676E5E5", "r c #49497777E8E8", "t c #4B4B7777E9E9", "y c #4F4F7A7AE9E9", "u c #54547D7DE7E7", "i c #50507B7BE9E9", "p c #51517B7BE9E9", "a c #54547E7EEAEA", "s c #54547F7FEAEA", "d c #58588282ECEC", "f c #59598282ECEC", "g c #6F6F9393EDED", "h c #70709494EEEE", "j c #76769898EFEF", "k c #77779999F0F0", "l c #B3B300000000", "z c #BFBF00000000", "x c #D9D900000000", "c c #DBDB00000000", "v c #DBDB31311A1A", "b c #DDDD36361F1F", "n c #DEDE3B3B2525", "m c #E0E040402B2B", "M c #E2E245453030", "N c #E3E349493434", "B c #E3E34A4A3636", "V c #E0E04F4F3B3B", "C c #E5E54E4E3A3A", "Z c #E5E54F4F3B3B", "A c #E6E654544040", "S c #E7E759594646", "D c #E8E85D5D4B4B", "F c #E9E95E5E4B4B", "G c #E9E962624F4F", "H c #E6E661615050", "J c #E9E963635151", "K c #EAEA65655353", "L c #EBEB67675454", "P c #EEEE81817373", "I c #EFEF82827474", "U c #CDCDCDCDCDCD", "Y c #D1D1CFCFCFCF", "T c gray82", "R c LightGray", "E c #D5D5D5D5D5D5", "W c #D7D7D7D7D7D7", "Q c gray85", "! c gray86", "~ c #DDDDDDDDDDDD", "^ c #E1E1E1E1E1E1", "/ c gray89", "( c gray90", ") c #E7E7E7E7E7E7", "_ c #E9E9E9E9E9E9", "` c gray92", "' c gray93", "] c #EFEFEFEFEFEF", "[ c #F1F1F1F1F1F1", "{ c gray95", "} c #F2F2F2F2F3F3", "| c #F3F3F3F3F3F3", " . c #F4F4F4F4F4F4", ".. c gray96", "X. c #F6F6F6F6F6F6", "o. c gray97", "O. c #F8F8F8F8F8F8", "+. c #F9F9F9F9F9F9", "@. c gray98", "#. c #FBFBFBFBFBFB", "$. c #F9F9FEFEFEFE", "%. c gray99", "&. c #FDFDFDFDFDFD", "*. c #FEFEFEFEFEFE", "=. c gray100", "-. c None", /* pixels */ "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "| | | | $ c @ ] ' ' ` _ ) ( / ^ ", "| =.=.=.j L h =.#.#.#.@.@.@.X.~ ", "| =.=.=.f L y =.#.@.@.O.o.X.X.! ", "| =.=.$.d K w $.@.@.@.X.X.X.X.! ", "# j d a d K w 7 7 5 3 ; - * 8 X ", "c L K G D S A Z B m m n b v V l ", "$ g y r q A 7 3 1 < - * & % , . ", "X.$.@.@.9 Z 5 X.o.X.| | ] | | T ", "] $.@.@.7 N < X.X.| | | | | | U ", "` @.@.@.u H e X.X.X.X.| | | | U ", "` ) ( / O z o ! E E T T U U U U ", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.", "-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-." }; springlobby-0.169/src/images/flags/FR.xpm0000600000176000000410000000662712105760300021617 0ustar buildbotwww-data00000000000000/* XPM */ static const char *FR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 131 2", " c black", ". c #17174747A5A5", "X c #23234F4FABAB", "o c #2D2D5757AFAF", "O c #35355F5FB5B5", "+ c #3F3F6767B9B9", "@ c #49497171BDBD", "# c #53537777C3C3", "$ c #5B5B7F7FC7C7", "% c #63638585CBCB", "& c #69698989CDCD", "* c #6F6F8F8FD1D1", "= c #71719191D1D1", "- c #73739393D3D3", "; c #73739595D3D3", ": c #C5C500000000", "> c #C7C700000000", ", c #CBCB00000000", "< c #CDCD00000000", "1 c #D3D300000000", "2 c #D5D500000000", "3 c #DBDB00000000", "4 c #DDDD00000000", "5 c #E1E100000000", "6 c #E5E500000000", "7 c #E7E700000000", "8 c #EBEB00000000", "9 c #EFEF07070000", "0 c #F1F113130000", "q c #E6E64D4D3E3E", "w c #E8E852524343", "e c #E9E956564848", "r c #EAEA57574848", "t c #EAEA57574A4A", "y c #EBEB5D5D4F4F", "u c #ECEC5E5E5050", "i c #E8E863635555", "p c #EEEE63635555", "a c #EEEE64645656", "s c #EEEE64645757", "d c #E9E966665959", "f c #E9E966665A5A", "g c #EAEA69695D5D", "h c #EAEA6A6A5D5D", "j c #EFEF69695C5C", "k c #F0F06A6A5C5C", "l c #F0F06C6C5D5D", "z c #ECEC6D6D6161", "x c #ECEC6E6E6262", "c c #EDED74746868", "v c #EFEF78786C6C", "b c #F1F170706363", "n c #F1F170706464", "m c #F2F271716464", "M c #F3F377776A6A", "N c #F3F377776B6B", "B c #F1F17E7E7272", "V c #F5F57D7D7272", "C c #F2F284847878", "Z c #F4F488887E7E", "A c #9F9F9F9F9F9F", "S c #A7A7A7A7A7A7", "D c gray68", "F c #B3B3B0B0B0B0", "G c gray72", "H c gray", "J c #9797ACACD8D8", "K c #9C9CB0B0DADA", "L c #A0A0B4B4DDDD", "P c #A0A0B5B5DDDD", "I c #A1A1B5B5DDDD", "U c #A3A3B5B5DCDC", "Y c #A5A5B8B8DFDF", "T c #A5A5B9B9DFDF", "R c #A7A7B9B9DDDD", "E c #A6A6B9B9E0E0", "W c #A9A9BCBCE1E1", "Q c #A9A9BDBDE1E1", "! c #AAAABDBDE0E0", "~ c #AAAABDBDE1E1", "^ c #AEAEBFBFE3E3", "/ c #AFAFBFBFE2E2", "( c #AEAEBFBFE4E4", ") c #AEAEC0C0E4E4", "_ c #B1B1C2C2E5E5", "` c #B1B1C3C3E5E5", "' c #B2B2C3C3E5E5", "] c #B3B3C3C3E4E4", "[ c #B4B4C5C5E7E7", "{ c #B7B7C7C7E6E6", "} c #B7B7C8C8E8E8", "| c #BABAC9C9E8E8", " . c #BEBECCCCE9E9", ".. c #F5F58D8D8383", "X. c #F7F793938989", "o. c #F8F897978E8E", "O. c #CECECECECECE", "+. c gray81", "@. c #D2D2D2D2D2D2", "#. c #D5D5D5D5D5D5", "$. c gainsboro", "%. c #DFDFDFDFDFDF", "&. c #C0C0CECEEAEA", "*. c #C1C1CFCFEBEB", "=. c #C3C3D0D0ECEC", "-. c #C3C3D1D1ECEC", ";. c #C4C4D2D2EDED", ":. c #C4C4D3D3EDED", ">. c #E2E2E2E2E2E2", ",. c #E4E4E4E4E4E4", "<. c gray90", "1. c #E6E6E6E6E6E6", "2. c #E7E7E7E7E7E7", "3. c gray91", "4. c #E9E9E9E9E9E9", "5. c #E9E9E9E9EAEA", "6. c #EAEAEAEAEAEA", "7. c gray92", "8. c #ECECEBEBEBEB", "9. c #ECECECECECEC", "0. c gray93", "q. c #EEEEEEEEEEEE", "w. c #EFEFEFEFEFEF", "e. c gray94", "r. c #F1F1F1F1F1F1", "t. c #F3F3F3F3F3F3", "y. c #F4F4F4F4F4F4", "u. c #F6F6F6F6F6F6", "i. c gray97", "p. c #F8F8F8F8F8F8", "a. c None", /* pixels */ "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "; ; ; ; - $.$.#.@.O.@.0 9 8 6 6 ", "; :.:.*.*.p.i.i.i.i.t.o.X...Z 5 ", "; :.} [ ' q.7.6.6.6.<.V N m C 4 ", "- *.[ ' ) w.7.q.6.6.<.M m l B 4 ", "* &.' ( ~ q.q.8.6.<.<.b j s v 2 ", "& .) Q Y t.q.q.q.6.6.j s u c 2 ", "% } Q E U q.q.q.6.6.<.p y e x < ", "$ { E U K q.q.6.2.<.<.y e w h , ", "# ' K K J 7.6.<.<.<.>.e w q f > ", "@ / ~ Y U q.q.6.6.<.<.x h f i > ", "+ O o X . H G F D S A < , > : > ", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a." }; springlobby-0.169/src/images/flags/GA.xpm0000600000176000000410000001006512105760300021566 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GA_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 158 2", " c black", ". c #000000006D6D", "X c #000000007D7D", "o c #000000007F7F", "O c #000041410000", "+ c #000047470000", "@ c #000049490000", "# c #000051510000", "$ c #000055550000", "% c #000059590000", "& c #00005F5F0000", "* c #000065650000", "= c #00006B6B0000", "- c #00006F6F0000", "; c #000073730000", ": c #000077770000", "> c #00007B7B0000", ", c #00007D7D0000", "< c #000000008383", "1 c #000000008787", "2 c #000000008B8B", "3 c #000000008D8D", "4 c #000000009191", "5 c #000000009595", "6 c #000000009999", "7 c #000000009D9D", "8 c #00000101A1A1", "9 c #00000707A3A3", "0 c #00000D0DA7A7", "q c #00001313A9A9", "w c #00001D1DAFAF", "e c #00002323B3B3", "r c #00002929B7B7", "t c #00003F3FA7A7", "y c #36366666C4C4", "u c #3A3A6969C6C6", "i c #3E3E6B6BC7C7", "p c #49497373B8B8", "a c #4D4D7676BABA", "s c #51517979BBBB", "d c #55557D7DBDBD", "f c #43436F6FC9C9", "g c #47477373CBCB", "h c #4C4C7676CDCD", "j c #53537B7BCACA", "k c #51517A7ACFCF", "l c #55557C7CCACA", "z c #55557C7CCCCC", "x c #58587F7FCCCC", "c c #54547E7ED1D1", "v c #000081810000", "b c #000083830000", "n c #000089890000", "m c #2C2CA5A52C2C", "M c #3232A8A82626", "N c #3737AAAA2B2B", "B c #3131A8A83131", "V c #3737AAAA3737", "C c #3D3DADAD3131", "Z c #3D3DADAD3D3D", "A c #4242B0B03636", "S c #4747B2B23C3C", "D c #4242B0B04242", "F c #4747B3B34747", "G c #4F4FB3B34444", "H c #4C4CB4B44242", "J c #4949B1B14949", "K c #4C4CB5B54C4C", "L c #4E4EB4B44E4E", "P c #5151B7B74747", "I c #5656B9B94B4B", "U c #5151B7B75151", "Y c #5353B7B75353", "T c #5454B9B95454", "R c #5858B9B95757", "E c #5B5BBCBC5151", "W c #5E5EBEBE5454", "Q c #5959BBBB5959", "! c #5C5CBBBB5C5C", "~ c #5C5CBDBD5C5C", "^ c #5F5FBEBE5F5F", "/ c #6262BFBF5959", "( c #6161BEBE6060", ") c #6565C1C15C5C", "_ c #6565C0C06565", "` c #6969C2C26969", "' c #6D6DC3C36D6D", "] c #7070C5C57171", "[ c #7474C7C77474", "{ c #7777C8C87777", "} c #7979C9C97979", "| c #7B7BC9C97A7A", " . c #7B7BCACA7B7B", ".. c #5A5A8080C0C0", "X. c #5E5E8383C2C2", "o. c #5B5B8282CDCD", "O. c #5F5F8484CFCF", "+. c #59598282D3D3", "@. c #5E5E8585D4D4", "#. c #62628686C4C4", "$. c #64648787C2C2", "%. c #66668A8AC6C6", "&. c #6A6A8E8EC8C8", "*. c #62628686D0D0", "=. c #62628989D6D6", "-. c #65658A8AD2D2", ";. c #67678D8DD8D8", ":. c #69698D8DD3D3", ">. c #6F6F9191CACA", ",. c #6D6D9090D5D5", "<. c #73739494CDCD", "1. c #77779898CECE", "2. c #71719393D7D7", "3. c #75759696D8D8", "4. c #79799999DADA", "5. c #7D7D9D9DDBDB", "6. c #8080CDCD7979", "7. c #E3E3E3E30000", "8. c #E5E5E5E50000", "9. c #E7E7E7E70000", "0. c #FDFDFDFD0000", "q. c #F2F2F2F21414", "w. c #F3F3F3F31919", "e. c #F3F3F3F31A1A", "r. c #F4F4F4F41F1F", "t. c #F4F4F4F42020", "y. c #F5F5F5F52424", "u. c #F5F5F5F52525", "i. c #F6F6F6F62A2A", "p. c #F6F6F6F62B2B", "a. c #F7F7F7F72F2F", "s. c #F7F7F7F73030", "d. c #F4F4F4F43636", "f. c #F4F4F5F53B3B", "g. c #F5F5F5F53F3F", "h. c #F8F8F8F83535", "j. c #F8F8F8F83636", "k. c #F9F9F9F93A3A", "l. c #F9F9F9F93B3B", "z. c #F9F9F9F93C3C", "x. c #FAFAFAFA4040", "c. c #FAFAFAFA4141", "v. c #FBFBFBFB4545", "b. c #FBFBFBFB4646", "n. c #FBFBFCFC4949", "m. c #FCFCFCFC4B4B", "M. c #FCFCFCFC4F4F", "N. c #FDFDFCFC5050", "B. c #FDFDFDFD5353", "V. c #FDFDFDFD5454", "C. c #FEFEFEFE5858", "Z. c #FDFDFDFD6F6F", "A. c #FEFEFEFE7373", "S. c #FEFEFEFE7676", "D. c #80809F9FDDDD", "F. c #8383A2A2DFDF", "G. c #9090ABABD8D8", "H. c None", /* pixels */ "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "b b b b b , > : ; - = * & % $ # ", "b . . .[ [ ] ' ' ( ( ! R U L @ ", "b .( ~ Q T U L J D Z V B m J O ", "n 6./ / W E I P H S A C N M P + ", "0.S.C.V.N.m.b.c.l.j.s.p.u.r.g.8.", "0.A.V.m.m.b.x.k.j.s.p.u.r.w.f.8.", "0.Z.N.n.b.x.k.j.a.p.u.r.w.q.d.7.", "t G.1.<.>.&.%.#.X...d s a p $.. ", "r F.;.=.@.+.c k h g f i u y l 1 ", "e 5.5.4.3.2.,.:.-.*.*.x x l j X ", "w q 0 9 8 7 6 5 4 2 2 2 1 < X X ", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H." }; springlobby-0.169/src/images/flags/GB.xpm0000600000176000000410000000724312105760300021573 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GB_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 140 2", " c black", ". c #000011116767", "X c #000013136B6B", "o c #000013136D6D", "O c #000015157070", "+ c #000017177373", "@ c #141431317E7E", "# c #454535356E6E", "$ c #18181B1B9A9A", "% c #080825259090", "& c #0C0C28289393", "* c #11112D2D9191", "= c #11112C2C9C9C", "- c #191934349898", "; c #3A3A3F3FA4A4", ": c #37375656AEAE", "> c #3D3D5C5CB0B0", ", c #3F3F5E5EB2B2", "< c #41414949A7A7", "1 c #55555E5EABAB", "2 c #43436969A2A2", "3 c #48486666B8B8", "4 c #49496B6BB6B6", "5 c #54546060AFAF", "6 c #57576666B6B6", "7 c #5A5A6666B8B8", "8 c #6B6B7272A4A4", "9 c #5C5C7474C6C6", "0 c #5A5A8181B9B9", "q c #61618181C0C0", "w c #62628484C1C1", "e c #64648383C3C3", "r c #64648383C6C6", "t c #6E6E8080C3C3", "y c #71718080C1C1", "u c #72728282C4C4", "i c #74748E8ED2D2", "p c #7B7B9797C6C6", "a c #7A7A9E9EC0C0", "s c #7B7B9D9DC5C5", "d c #7E7E9191D5D5", "f c #848417173434", "g c #85851B1B3838", "h c #85851F1F3A3A", "j c #949444446363", "k c #9C9C51516F6F", "l c #ACAC61617D7D", "z c #ACAC60607E7E", "x c #F5F52B2B2B2B", "c c #F5F52E2E2E2E", "v c #FAFA29292B2B", "b c #FCFC2B2B2D2D", "n c #FBFB2F2F3131", "m c #F7F734343434", "M c #FEFE32323434", "N c #FCFC36363838", "B c #F9F939393939", "V c #FAFA3F3F3F3F", "C c #FFFF3D3D3D3D", "Z c #E5E542424141", "A c #FEFE45454545", "S c #FFFF4C4C4C4C", "D c #FFFF4E4E4E4E", "F c #FBFB52524343", "G c #F9F953534646", "H c #FDFD54544848", "J c #FFFF54545454", "K c #FFFF55555555", "L c #FFFF57575858", "P c #FFFF59595959", "I c #FFFF5C5C5C5C", "U c #FFFF5F5F5F5F", "Y c #EBEB60604D4D", "T c #E8E860605C5C", "R c #F9F963635F5F", "E c #FFFF60606161", "W c #FFFF64646464", "Q c #FFFF65656969", "! c #FFFF6D6D6969", "~ c #ADAD63638181", "^ c #F3F381817E7E", "/ c #F7F787877878", "( c #FCFC82827F7F", ") c #FEFE8A8A7C7C", "_ c #92929999BEBE", "` c #BFBF9999B5B5", "' c #82829595CECE", "] c #8C8C9C9CCFCF", "[ c #86869696D5D5", "{ c #8D8D9D9DD0D0", "} c #8D8DBCBCD7D7", "| c #9292A1A1D3D3", " . c #9E9EAAAAD2D2", ".. c #9F9FAFAFDCDC", "X. c #9090B2B2D0D0", "o. c #9393B3B3D3D3", "O. c #A4A4A8A8CACA", "+. c #A3A3AFAFD5D5", "@. c #A2A2B0B0DBDB", "#. c #A1A1B0B0DDDD", "$. c #B7B7C3C3DADA", "%. c #BCBCC9C9EEEE", "&. c #B8B8D5D5ECEC", "*. c #F0F08A8A8A8A", "=. c #F7F78B8B8B8B", "-. c #FFFF8E8E8585", ";. c #FFFF93938888", ":. c #FFFF94948C8C", ">. c #F4F49A9A9D9D", ",. c #F4F4A2A2ACAC", "<. c #FFFFA5A5A7A7", "1. c #FFFFB1B1AAAA", "2. c #E1E1BEBEDFDF", "3. c #FFFFC1C1BDBD", "4. c #C5C5C0C0DBDB", "5. c #C9C9C8C8E3E3", "6. c #C9C9D5D5E8E8", "7. c #CBCBD4D4E9E9", "8. c #CCCCD6D6E9E9", "9. c #CFCFD6D6E8E8", "0. c #D4D4D5D5EFEF", "q. c #D0D0DCDCEDED", "w. c #D9D9DDDDEDED", "e. c #DBDBE1E1F4F4", "r. c #FFFFE8E8E8E8", "t. c #FFFFEDEDECEC", "y. c #F9F9FFFFFFFF", "u. c #FBFBFCFCFCFC", "i. c #FDFDFCFCF8F8", "p. c #FEFEFDFDF9F9", "a. c #FCFCFDFDFCFC", "s. c #FDFDFDFDFDFD", "d. c #FEFEFDFDFDFD", "f. c #FEFEFEFEFDFD", "g. c #FFFFFFFFFDFD", "h. c #FEFEFEFEFFFF", "j. c #FFFFFEFEFEFE", "k. c #FFFFFFFFFEFE", "l. c gray100", "z. c None", /* pixels */ "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.", "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.", "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.", "_ &.p r e q w.~ l w.4 3 > 0 k s ", "O.1.h.e.@...h.:.-.h.| { 5.) p.X.", "w %.<.3.h.[ h.Q E h.i ,.=.h. .- ", "w #.d 2.( h.h.I L h.! r.q.< u * ", "w.h.h.h.h.h.h.K D h.h.h.h.h.h.8.", "l ;.E R L J D D A V B m c c G g ", "w.h.h.h.h.h.h.C N h.u.y.u.u.u.6.", "> { 7 0.t.R h.M M h.p.B ` $ 5 o ", ": +.h.^ *.9 h.b v h.: u.>.T ' . ", "o.h./ 4.y t h.H F h.6 1 $.i.Y 8 ", "a j 2 = & % 8.g f 7.O O o @ } # ", "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.", "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z." }; springlobby-0.169/src/images/flags/GD.xpm0000600000176000000410000001005312105760300021566 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GD_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 158 2", " c black", ". c #10109C9C1010", "X c #171799991414", "o c #19199B9B1919", "O c #1F1F9C9C1F1F", "+ c #1F1F9F9F1F1F", "@ c #1414A0A01414", "# c #1A1AA3A31A1A", "$ c #3636B0B00B0B", "% c #2020A6A62020", "& c #2525A1A12525", "* c #2525A2A22525", "= c #2626A6A62626", "- c #2B2BA3A32B2B", "; c #2A2AA4A42B2B", ": c #3131A6A62B2B", "> c #3838A5A52424", ", c #41419C9C2F2F", "< c #47479B9B3232", "1 c #4B4B9E9E3636", "2 c #4F4FA1A13B3B", "3 c #4949ACAC3030", "4 c #5353A4A43F3F", "5 c #5A5ABFBF2C2C", "6 c #60608C8C2C2C", "7 c #7070AEAE1919", "8 c #4545B1B14545", "9 c #4545B2B24545", "0 c #4646B2B24646", "q c #4B4BB4B44B4B", "w c #4949B9B94949", "e c #5858A6A64444", "r c #5A5AACAC4949", "t c #5050B2B24040", "y c #5F5FB9B94B4B", "u c #5050B5B55050", "i c #5454BABA5454", "p c #5B5BBCBC5959", "a c #6767B2B24949", "s c #7D7DA0A04E4E", "d c #7676B9B96666", "f c #7B7BB9B96A6A", "g c #7F7FBDBD6F6F", "h c #5C5CC0C05C5C", "j c #6464C8C84444", "k c #D7D700000000", "l c #DDDD00000000", "z c #DFDF00000000", "x c #E3E300000000", "c c #E5E500000000", "v c #E7E700000000", "b c #E9E900000000", "n c #EBEB00000000", "m c #EDED00000000", "M c #EFEF00000000", "N c #F1F100000000", "B c #F3F300000000", "V c #F5F500000000", "C c #F7F700000000", "Z c #F9F900000000", "A c #FBFB00000000", "S c #FDFD00000000", "D c red", "F c #E3E323230000", "G c #E1E13B3B0000", "H c #E7E73D3D0000", "J c #EDED3F3F0000", "K c #C3C370703636", "L c #E9E941410000", "P c #EDED5F5F0000", "I c #F7F75D5D0000", "U c #F5F55E5E3737", "Y c #F5F56F6F0000", "T c #FBFB73730000", "R c #FDFD73730000", "E c #FDFD77770000", "W c #F6F664643C3C", "Q c #CACA7B7B4646", "! c #F8F86B6B4343", "~ c #F8F870704848", "^ c #8787BDBD3F3F", "/ c #8989BABA3131", "( c #9B9BBDBD2A2A", ") c #8B8BBBBB4F4F", "_ c #8A8AACAC6262", "` c #8484BFBF7373", "' c #8686BFBF7676", "] c #9F9FBABA7B7B", "[ c #B3B3C4C40E0E", "{ c #A0A0C4C43A3A", "} c #A9A9C3C33636", "| c #8080D3D35F5F", " . c #9C9CC8C85454", ".. c #8888C2C27979", "X. c #8989C4C47A7A", "o. c #AFAFCACA4646", "O. c #FDFD89890000", "+. c #DFDF89895555", "@. c #D7D7C5C51F1F", "#. c #C3C3D4D43F3F", "$. c #C9C9D2D23131", "%. c #DDDDCECE3A3A", "&. c #F2F2D1D11313", "*. c #F3F3D4D41919", "=. c #F4F4D4D41E1E", "-. c #E5E5CECE3636", ";. c #F5F5CECE2424", ":. c #F0F0CCCC2F2F", ">. c #F4F4C7C73636", ",. c #F2F2CDCD3232", "<. c #F5F5C9C93B3B", "1. c #F4F4CFCF3939", "2. c #F5F5D4D42323", "3. c #F6F6D4D42A2A", "4. c #F6F6D7D72929", "5. c #F7F7D6D62F2F", "6. c #F7F7D9D92E2E", "7. c #F3F3D0D03535", "8. c #F5F5D1D13D3D", "9. c #F8F8D3D33434", "0. c #F9F9D6D63C3C", "q. c #F8F8DCDC3434", "w. c #F8F8DCDC3737", "e. c #F9F9DCDC3A3A", "r. c #F9F9DFDF3D3D", "t. c #D5D5DFDF5C5C", "y. c #D8D8DDDD5858", "u. c #E9E9D7D75151", "i. c #F7F7C8C85353", "p. c #F7F7CDCD5D5D", "a. c #F6F6D3D34242", "s. c #F7F7D5D54646", "d. c #F7F7D6D64B4B", "f. c #FAFADBDB4242", "g. c #FBFBDCDC4747", "h. c #FCFCDBDB4B4B", "j. c #F3F3DDDD5353", "k. c #F8F8D8D85050", "l. c #F9F9DBDB5555", "z. c #F9F9DADA5757", "x. c #F9F9DADA5858", "c. c #FAFADDDD5C5C", "v. c #FBFBDDDD6060", "b. c #FCFCDDDD6565", "n. c #FAFAE0E04242", "m. c #FBFBE0E04747", "M. c #FCFCE1E14C4C", "N. c #FDFDE3E35151", "B. c #FDFDE5E55454", "V. c #FEFEE5E55959", "C. c #FCFCE0E06969", "Z. c #FDFDE2E26D6D", "A. c #FDFDE2E27171", "S. c #FEFEE2E27474", "D. c #FEFEE5E57777", "F. c #FEFEE4E47979", "G. c #FEFEE4E47B7B", "H. c None", /* pixels */ "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "D D D D O.T D E T A I Y B B m m ", "D ] G.G.G.G.A.Z.C.b.v.c.x.i.s b ", "D X.j t.V.V.B.M.m.n.r.w.$.5 r v ", "D ..h p .u.h.g.f.0.-./ : = e v ", "A ' y.i i y o.~ ! } 3 ; * % 4 v ", "D ` j.+.q 0 Q <.>.K ; * + # 2 v ", "D g ) a 0 t { W U ( > O o @ 1 x ", "A f w 9 ^ %.9.5.3.;.@.7 X . < z ", "V d j #.e.w.6.4.2.=.*.&.[ $ , z ", "V _ p.z.l.k.d.s.a.8.1.7.,.:.6 k ", "V B B m P J b L H v F G z z l l ", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H." }; springlobby-0.169/src/images/flags/GE.xpm0000600000176000000410000000647412105760300021603 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GE_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 128 2", " c black", ". c #CDCD00000000", "X c #D3D303030000", "o c #D5D500000000", "O c #D7D700000000", "+ c #D9D91D1D1717", "@ c #EDED00000000", "# c #EDED03030000", "$ c #E8E82E2E2828", "% c #E9E933332D2D", "& c #EBEB38383232", "* c #ECEC3D3D3636", "= c #EDED45453F3F", "- c #D3D351514646", "; c #DFDF67675E5E", ": c #EBEB4C4C4646", "> c #ECEC4D4D4848", ", c #EDED52524D4D", "< c #EDED54544F4F", "1 c #EEEE56565050", "2 c #EEEE59595454", "3 c #EFEF5A5A5454", "4 c #EFEF5B5B5656", "5 c #F1F153534E4E", "6 c #F2F255555151", "7 c #F1F15B5B5555", "8 c #F2F25A5A5656", "9 c #F0F05D5D5858", "0 c #F3F35F5F5A5A", "q c #F1F160605B5B", "w c #F4F463635E5E", "e c #EDED65656060", "r c #EEEE6B6B6767", "t c #E2E275756D6D", "y c #E4E47D7D7474", "u c #F2F265656060", "i c #F2F266666161", "p c #F3F36B6B6666", "a c #F5F56D6D6767", "s c #F3F36D6D6868", "d c #F4F471716D6D", "f c #F7F77F7F7B7B", "g c #EAEA80807A7A", "h c #EBEB80807D7D", "j c gray75", "k c #E6E689898383", "l c #EFEF83838080", "z c #EEEE87878282", "x c #E9E98A8A8282", "c c #EEEE88888484", "v c #EFEF89898686", "b c #EFEF8E8E8D8D", "n c #E7E793938B8B", "m c #EDED91918F8F", "M c #F6F687878383", "N c #F7F78B8B8888", "B c #F3F391918D8D", "V c #F3F392928E8E", "C c #F1F195959292", "Z c #F1F198989494", "A c #F1F199999494", "S c #F2F298989595", "D c #F4F49A9A9797", "F c #F1F19E9E9B9B", "G c #F5F59D9D9A9A", "H c #F6F69E9E9B9B", "J c #F0F0A5A5A0A0", "K c #F0F0A7A7A2A2", "L c #F7F7A3A3A0A0", "P c #F7F7A4A4A1A1", "I c #F7F7A7A7A4A4", "U c #F6F6A9A9A7A7", "Y c #F3F3ADADA8A8", "T c #F8F8AAAAA7A7", "R c #F9F9AEAEACAC", "E c #F9F9B0B0ADAD", "W c #F3F3B8B8B5B5", "Q c #F3F3BBBBB7B7", "! c #F1F1BFBFBBBB", "~ c #F9F9B3B3B1B1", "^ c #F8F8BEBEBABA", "/ c #FAFABDBDBABA", "( c #FBFBBEBEBCBC", ") c #F9F9C1C1BEBE", "_ c #C1C1C1C1C1C1", "` c #C3C3C3C3C3C3", "' c #C5C5C5C5C5C5", "] c gray79", "[ c #CDCDCDCDCDCD", "{ c #CFCFCFCFD1D1", "} c gray82", "| c LightGray", " . c #D7D7D7D7D7D7", ".. c #D9D9D7D7D9D9", "X. c gray85", "o. c gray86", "O. c #DFDFDFDFDFDF", "+. c #EFEFC9C9C8C8", "@. c #F9F9CECECACA", "#. c #F2F2D8D8D8D8", "$. c #F7F7DEDEDDDD", "%. c #F8F8DDDDDCDC", "&. c #FAFADFDFDEDE", "*. c #E1E1E1E1E1E1", "=. c gray89", "-. c gray90", ";. c #E7E7E7E7E7E7", ":. c #E9E9E9E9E9E9", ">. c gray92", ",. c #FAFAEAEAEAEA", "<. c #FDFDEDEDECEC", "1. c #FEFEEEEEEDED", "2. c gray95", "3. c #F3F3F3F3F3F3", "4. c #F4F4F4F4F4F4", "5. c gray96", "6. c #F6F6F6F6F6F6", "7. c gray97", "8. c #F8F8F8F8F8F8", "9. c #F9F9F9F9F9F9", "0. c gray98", "q. c #FBFBFBFBFBFB", "w. c gray99", "e. c #FDFDFDFDFDFD", "r. c #FDFDFDFDFEFE", "t. c #FEFEFEFEFEFE", "y. c gray100", "u. c None", /* pixels */ "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", ">.>.>.>.>.>.;.# @ =.=.O.X.X.X. .", ">.y.1.( <.y.y.N M q.0.,.T $.8.| ", ">.y.) k ^ y.y.d p 0.0.W ; J 7.{ ", ">.y.y.@.q.y.0.s i 0.0.6.! 6.6.[ ", "a / R R T I G w 0 B Z C Z b F + ", "@ f q 0 8 6 < 0 2 : * & % $ : . ", "8 ~ L I G D B 2 1 f v c c h m X ", ";.q.y.W q.0.0.1 , 3.3.3.n 2.3.` ", "=.q.Y t J 7.7.< : 3.3.k - y 2._ ", "=.q.&.Z %.6.6.r e 6.6.#.h +.2._ ", "O.X.X.X. . .} o o ' ' ' ` _ j j ", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u." }; springlobby-0.169/src/images/flags/GF.xpm0000600000176000000410000000662712105760300021604 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GF_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 131 2", " c black", ". c #17174747A5A5", "X c #23234F4FABAB", "o c #2D2D5757AFAF", "O c #35355F5FB5B5", "+ c #3F3F6767B9B9", "@ c #49497171BDBD", "# c #53537777C3C3", "$ c #5B5B7F7FC7C7", "% c #63638585CBCB", "& c #69698989CDCD", "* c #6F6F8F8FD1D1", "= c #71719191D1D1", "- c #73739393D3D3", "; c #73739595D3D3", ": c #C5C500000000", "> c #C7C700000000", ", c #CBCB00000000", "< c #CDCD00000000", "1 c #D3D300000000", "2 c #D5D500000000", "3 c #DBDB00000000", "4 c #DDDD00000000", "5 c #E1E100000000", "6 c #E5E500000000", "7 c #E7E700000000", "8 c #EBEB00000000", "9 c #EFEF07070000", "0 c #F1F113130000", "q c #E6E64D4D3E3E", "w c #E8E852524343", "e c #E9E956564848", "r c #EAEA57574848", "t c #EAEA57574A4A", "y c #EBEB5D5D4F4F", "u c #ECEC5E5E5050", "i c #E8E863635555", "p c #EEEE63635555", "a c #EEEE64645656", "s c #EEEE64645757", "d c #E9E966665959", "f c #E9E966665A5A", "g c #EAEA69695D5D", "h c #EAEA6A6A5D5D", "j c #EFEF69695C5C", "k c #F0F06A6A5C5C", "l c #F0F06C6C5D5D", "z c #ECEC6D6D6161", "x c #ECEC6E6E6262", "c c #EDED74746868", "v c #EFEF78786C6C", "b c #F1F170706363", "n c #F1F170706464", "m c #F2F271716464", "M c #F3F377776A6A", "N c #F3F377776B6B", "B c #F1F17E7E7272", "V c #F5F57D7D7272", "C c #F2F284847878", "Z c #F4F488887E7E", "A c #9F9F9F9F9F9F", "S c #A7A7A7A7A7A7", "D c gray68", "F c #B3B3B0B0B0B0", "G c gray72", "H c gray", "J c #9797ACACD8D8", "K c #9C9CB0B0DADA", "L c #A0A0B4B4DDDD", "P c #A0A0B5B5DDDD", "I c #A1A1B5B5DDDD", "U c #A3A3B5B5DCDC", "Y c #A5A5B8B8DFDF", "T c #A5A5B9B9DFDF", "R c #A7A7B9B9DDDD", "E c #A6A6B9B9E0E0", "W c #A9A9BCBCE1E1", "Q c #A9A9BDBDE1E1", "! c #AAAABDBDE0E0", "~ c #AAAABDBDE1E1", "^ c #AEAEBFBFE3E3", "/ c #AFAFBFBFE2E2", "( c #AEAEBFBFE4E4", ") c #AEAEC0C0E4E4", "_ c #B1B1C2C2E5E5", "` c #B1B1C3C3E5E5", "' c #B2B2C3C3E5E5", "] c #B3B3C3C3E4E4", "[ c #B4B4C5C5E7E7", "{ c #B7B7C7C7E6E6", "} c #B7B7C8C8E8E8", "| c #BABAC9C9E8E8", " . c #BEBECCCCE9E9", ".. c #F5F58D8D8383", "X. c #F7F793938989", "o. c #F8F897978E8E", "O. c #CECECECECECE", "+. c gray81", "@. c #D2D2D2D2D2D2", "#. c #D5D5D5D5D5D5", "$. c gainsboro", "%. c #DFDFDFDFDFDF", "&. c #C0C0CECEEAEA", "*. c #C1C1CFCFEBEB", "=. c #C3C3D0D0ECEC", "-. c #C3C3D1D1ECEC", ";. c #C4C4D2D2EDED", ":. c #C4C4D3D3EDED", ">. c #E2E2E2E2E2E2", ",. c #E4E4E4E4E4E4", "<. c gray90", "1. c #E6E6E6E6E6E6", "2. c #E7E7E7E7E7E7", "3. c gray91", "4. c #E9E9E9E9E9E9", "5. c #E9E9E9E9EAEA", "6. c #EAEAEAEAEAEA", "7. c gray92", "8. c #ECECEBEBEBEB", "9. c #ECECECECECEC", "0. c gray93", "q. c #EEEEEEEEEEEE", "w. c #EFEFEFEFEFEF", "e. c gray94", "r. c #F1F1F1F1F1F1", "t. c #F3F3F3F3F3F3", "y. c #F4F4F4F4F4F4", "u. c #F6F6F6F6F6F6", "i. c gray97", "p. c #F8F8F8F8F8F8", "a. c None", /* pixels */ "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "; ; ; ; - $.$.#.@.O.@.0 9 8 6 6 ", "; :.:.*.*.p.i.i.i.i.t.o.X...Z 5 ", "; :.} [ ' q.7.6.6.6.<.V N m C 4 ", "- *.[ ' ) w.7.q.6.6.<.M m l B 4 ", "* &.' ( ~ q.q.8.6.<.<.b j s v 2 ", "& .) Q Y t.q.q.q.6.6.j s u c 2 ", "% } Q E U q.q.q.6.6.<.p y e x < ", "$ { E U K q.q.6.2.<.<.y e w h , ", "# ' K K J 7.6.<.<.<.>.e w q f > ", "@ / ~ Y U q.q.6.6.<.<.x h f i > ", "+ O o X . H G F D S A < , > : > ", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a." }; springlobby-0.169/src/images/flags/GH.xpm0000600000176000000410000000754512105760300021606 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GH_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 149 2", " c black", ". c #00001F1F0000", "X c #000021210000", "o c #000025250000", "O c #000027270000", "+ c #000029290000", "@ c #00002D2D0000", "# c #000033330000", "$ c #000039390000", "% c #00003D3D0000", "& c #000041410000", "* c #000047470000", "= c #00004D4D0000", "- c #000053530000", "; c #000059590000", ": c #00005D5D0000", "> c #000063630000", ", c #000069690000", "< c #00006F6F0000", "1 c #000073730000", "2 c #434343433636", "3 c #4A4A4B4B3B3B", "4 c #60605E5E2F2F", "5 c #686866663535", "6 c #0B0B95950B0B", "7 c #0F0F97970E0E", "8 c #101097971010", "9 c #131399991313", "0 c #141499991414", "q c #18189C9C1919", "w c #19199C9C1919", "e c #1E1E9F9F1E1E", "r c #1F1F9F9F1F1F", "t c #2323A1A12323", "y c #2424A2A22424", "u c #2929A4A42929", "i c #2A2AA4A42A2A", "p c #2C2CA2A22C2C", "a c #2F2FA4A42F2F", "s c #2E2EA6A62E2E", "d c #2F2FA7A72F2F", "f c #3232A5A53232", "g c #3333A6A63232", "h c #3434A9A93434", "j c #3535A8A83535", "k c #3434AAAA3434", "l c #3939A9A93939", "z c #3A3AACAC3A3A", "x c #3D3DACAC3D3D", "c c #3F3FAFAF3F3F", "v c #4040AFAF3F3F", "b c #4242AEAE4242", "n c #4444B1B14444", "m c #4545B2B24545", "M c #4646B0B04646", "N c #4B4BB2B24B4B", "B c #4949B4B44949", "V c #5050B4B45050", "C c #5454B7B75555", "Z c #5858B9B95858", "A c #5D5DBCBC5D5D", "S c #6161BEBE6262", "D c #6666C0C06666", "F c #6A6AC3C36A6A", "G c #E7E700000000", "H c #E9E900000000", "J c #EBEB00000000", "K c #EDED00000000", "L c #EFEF00000000", "P c #F1F100000000", "I c #F3F300000000", "U c #F5F500000000", "Y c #F7F700000000", "T c #F9F900000000", "R c #FBFB00000000", "E c #FDFD00000000", "W c red", "Q c #F5F526262626", "! c #F6F62B2B2B2B", "~ c #F6F62C2C2C2C", "^ c #F7F731313131", "/ c #F8F837373636", "( c #F8F837373737", ") c #F9F93C3C3C3C", "_ c #F9F93C3C3D3D", "` c #F6F644444444", "' c #F7F749494949", "] c #F7F74E4E4E4E", "[ c #FAFA41414242", "{ c #FAFA42424242", "} c #FBFB47474747", "| c #FCFC4B4B4B4B", " . c #FCFC4C4C4C4C", ".. c #F8F853535353", "X. c #F9F957575757", "o. c #FDFD51515151", "O. c #FDFD54545454", "+. c #FAFA5C5C5C5C", "@. c #FEFE59595959", "#. c #FEFE5C5C5C5C", "$. c #FEFE5F5F5F5F", "%. c #FBFB60606060", "&. c #FCFC65656565", "*. c #FCFC69696969", "=. c #FDFD6D6D6D6D", "-. c #FDFD70707171", ";. c #FEFE74747474", ":. c #FEFE77777777", ">. c #FEFE79797979", ",. c #FFFF7B7B7A7A", "<. c #FFFF7B7B7B7B", "1. c #939394943030", "2. c #929295953C3C", "3. c #98989A9A4141", "4. c #A1A1A1A14040", "5. c #E3E3E3E30000", "6. c #E5E5E5E50000", "7. c #E7E7E7E70000", "8. c #FDFDFDFD0000", "9. c #F2F2F2F21414", "0. c #F3F3F3F31919", "q. c #F3F3F3F31A1A", "w. c #F4F4F4F41F1F", "e. c #ECECEFEF3636", "r. c #F2F2EFEF2A2A", "t. c #F4F4F4F42020", "y. c #F5F5F5F52424", "u. c #F5F5F5F52525", "i. c #F6F6F6F62B2B", "p. c #F7F7F7F73030", "a. c #F4F4F4F43636", "s. c #F4F4F5F53B3B", "d. c #F5F5F5F53F3F", "f. c #F9F9F4F43A3A", "g. c #F0F0F3F34646", "h. c #FAFAFAFA4040", "j. c #FBFBFBFB4545", "k. c #FBFBFBFB4646", "l. c #FBFBFCFC4949", "z. c #FCFCFCFC4B4B", "x. c #FCFCFCFC4F4F", "c. c #FDFDFCFC5050", "v. c #FDFDFDFD5353", "b. c #FDFDFDFD5454", "n. c #FEFEFEFE5858", "m. c #FDFDFDFD6F6F", "M. c #FEFEFEFE7373", "N. c #FEFEFEFE7676", "B. c None", /* pixels */ "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "W W W W R W W W R R Y Y I I K K ", "W <.<.:.:.;.-.=.*.&.%.+.X...] J ", "W <.$.#.#.O.o. .} { _ / ^ ~ ' J ", "W <.#.#.o.o.| } { _ / ^ ! Q ` G ", "8.N.b.b.c.z.g.3.2.e.p.i.u.t.d.7.", "8.N.v.z.z.l.4.3 2 1.i.u.w.0.d.7.", "8.m.z.l.l.d.f.5 4 r.u.w.0.9.a.5.", "1 F B m v z k d i y e q 0 7 f o ", "1 D n v z k a i t e q 9 7 6 a X ", ", S A Z C V N M b x l j f a p . ", "> : ; - = * & % $ # @ + o X . . ", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B." }; springlobby-0.169/src/images/flags/GI.xpm0000600000176000000410000000604212105760300021576 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GI_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 115 2", " c black", ". c #B9B93D3D3535", "X c #ADAD69696565", "o c #D5D500000000", "O c #DDDD00000000", "+ c #DFDF00000000", "@ c #DEDE3D3D3131", "# c #E1E100000000", "$ c #E3E300000000", "% c #E5E500000000", "& c #E7E700000000", "* c #E9E900000000", "= c #EDED00000000", "- c #EFEF00000000", "; c #F1F100000000", ": c #F3F300000000", "> c #F5F500000000", ", c #F7F700000000", "< c #F9F915150505", "1 c #F2F238382C2C", "2 c #F2F23B3B2F2F", "3 c #F2F23F3F3232", "4 c #E1E148483C3C", "5 c #F0F043433737", "6 c #F3F341413535", "7 c #F4F446463939", "8 c #F2F248483B3B", "9 c #F5F54A4A3D3D", "0 c #E8E855554A4A", "q c #ECEC5E5E5454", "w c #F1F14E4E4343", "e c #F2F24D4D4141", "r c #F1F152524545", "t c #F4F450504242", "y c #F1F154544848", "u c #F3F35A5A4141", "i c #F2F258584C4C", "p c #F4F458584D4D", "a c #F0F05B5B5151", "s c #F3F35C5C5151", "d c #F5F55E5E5353", "f c #F8F85B5B5050", "g c #F9F95F5F5555", "h c #F7F760605555", "j c #F9F963635858", "k c #FAFA68685D5D", "l c #F2F26A6A6060", "z c #F8F86B6B6161", "x c #FBFB6B6B6262", "c c #F8F86D6D6363", "v c #F7F777776E6E", "b c #F9F974746A6A", "n c #FAFA78786E6E", "m c #FAFA7C7C7272", "M c #E1E1A1A13F3F", "N c #E8E8A7A73C3C", "B c #FBFB84847C7C", "V c #EEEEABAB5858", "C c #EBEBB0B05555", "Z c #FCFC94948D8D", "A c #C9C9C7C7C7C7", "S c #CBCBCBCBCBCB", "D c #CDCDCDCDCDCD", "F c gray81", "G c gray82", "H c #D5D5D5D5D5D5", "J c #D7D7D7D7D7D7", "K c gray85", "L c gray86", "P c #DFDFDFDFDFDF", "I c #E3E3CACAC8C8", "U c #EDEDCCCCCACA", "Y c #EBEBD3D3D0D0", "T c #EDEDD4D4D3D3", "R c #F1F1DEDEDDDD", "E c #F7F7E0E0DEDE", "W c #E1E1E1E1E1E1", "Q c gray89", "! c gray90", "~ c #E7E7E7E7E7E7", "^ c #E9E9E7E7E7E7", "/ c #EFEFE2E2E1E1", "( c #EEEEE5E5E4E4", ") c #E9E9E9E9E9E9", "_ c gray92", "` c gray93", "' c #EFEFEFEFEFEF", "] c #F7F7E5E5E4E4", "[ c #F9F9E3E3E2E2", "{ c #F2F2F1F1F1F1", "} c gray95", "| c #F3F3F2F2F2F2", " . c #F3F3F3F3F3F3", ".. c #F7F7F2F2F1F1", "X. c #F6F6F3F3F3F3", "o. c #F4F4F4F4F4F4", "O. c #F4F4F5F5F5F5", "+. c gray96", "@. c #F6F6F6F6F6F6", "#. c gray97", "$. c #FAFAF3F3F3F3", "%. c #F8F8F8F8F8F8", "&. c #F9F9F9F9F9F9", "*. c gray98", "=. c #FBFBFAFAFAFA", "-. c #FBFBFBFBFBFB", ";. c #FBFBFCFCFBFB", ":. c gray99", ">. c #FDFDFCFCFCFC", ",. c #FDFDFCFCFDFD", "<. c #FDFDFDFDFDFD", "1. c #FDFDFDFDFEFE", "2. c #FEFEFEFEFEFE", "3. c gray100", "4. c None", /* pixels */ "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "' ' ' ' ' ' _ ^ ) ~ ~ W W W K K ", "' 3.3.*.3.3.>.3.*.3.*.*.*.*.@.J ", "' 3.3.3.3.*.$.B ] *.*.@.@.@.@.J ", "' 3.3.3.3.[ z q d R *.@.@.@.@.F ", "' 3.3.*.*.T q X 0 Y @.@. .@.@.F ", ") 3.-.3.3.v e 8 5 w @.@. . . .F ", ") 3.-.-.*.U 4 . @ I @. . . . .S ", "^ 3.*.*.*.../ M R ] . .' ' .A ", "< Z m n b z h N u p s i 0 r k O ", "> z k j h f V C t 9 7 6 6 2 1 O ", "> : : : - - * o % % % # # O O O ", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4." }; springlobby-0.169/src/images/flags/GL.xpm0000600000176000000410000000646012105760300021605 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GL_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 126 2", " c black", ". c #DDDD00000000", "X c #DFDF00000000", "o c #E1E100000000", "O c #E3E300000000", "+ c #E5E500000000", "@ c #E7E700000000", "# c #E9E900000000", "$ c #EBEB00000000", "% c #EDED00000000", "& c #EFEF00000000", "* c #E5E511111111", "= c #F1F100000000", "- c #F3F300000000", "; c #F5F500000000", ": c #F7F700000000", "> c #F1F10B0B0B0B", ", c #F1F10F0F0E0E", "< c #F9F900000000", "1 c #FBFB00000000", "2 c #FDFD00000000", "3 c #F2F210101010", "4 c #F2F213131313", "5 c #F2F214141414", "6 c #F3F319191919", "7 c #F4F41E1E1E1E", "8 c #F4F41F1F1F1F", "9 c #F5F524242424", "0 c #F2F22C2C2C2C", "q c #F2F22F2F2F2F", "w c #F2F232323232", "e c #F3F332323232", "r c #F3F335353535", "t c #F4F436363636", "y c #F4F439393939", "u c #F5F53D3D3D3D", "i c #F9F93B3B3C3C", "p c #F6F642424242", "a c #FAFA41414141", "s c #FAFA44444444", "d c #FAFA46464747", "f c #FBFB46464646", "g c #FBFB47474747", "h c #FBFB4B4B4B4B", "j c #FCFC4B4B4B4B", "k c #FDFD4F4F5050", "l c #F7F752525252", "z c #F5F558585858", "x c #FAFA51515151", "c c #F9F954545555", "v c #FDFD51515151", "b c #FDFD54545454", "n c #FDFD55555555", "m c #F9F958585858", "M c #FAFA5D5D5D5D", "N c #FDFD5E5E5E5E", "B c #F5F56E6E6E6E", "V c #FBFB61616262", "C c #FDFD65656565", "Z c #FCFC66666666", "A c #FCFC67676767", "S c #F8F86A6A6A6A", "D c #FCFC6A6A6A6A", "F c #FCFC6D6D6D6D", "G c #FDFD6F6F6F6F", "H c #F7F770707070", "J c #F8F875757575", "K c #F3F387878787", "L c #F4F48B8B8B8B", "P c #F5F58E8E8E8E", "I c #F6F691919191", "U c #F7F794949494", "Y c #F4F498989898", "T c #F8F897979797", "R c #FEFE92929292", "E c #FEFE93939393", "W c #F9F99A9A9A9A", "Q c #FAFA9D9D9D9D", "! c #FBFBA0A0A1A1", "~ c #FCFCA3A3A3A3", "^ c #FCFCA5A5A5A5", "/ c #FDFDA9A9A9A9", "( c #F6F6B6B6B6B6", ") c #F9F9BEBEBEBE", "_ c #FEFEB9B9B9B9", "` c #D5D5D5D5D5D5", "' c #D7D7D7D7D7D7", "] c gray85", "[ c #DDDDDDDDDDDD", "{ c #DFDFDFDFDFDF", "} c #FBFBC0C0C0C0", "| c #FBFBC2C2C2C2", " . c #F9F9CFCFCFCF", ".. c #F6F6DCDCDCDC", "X. c #E1E1E1E1E1E1", "o. c gray89", "O. c gray90", "+. c #E7E7E7E7E7E7", "@. c #E9E9E9E9E9E9", "#. c gray92", "$. c gray93", "%. c #EFEFEFEFEFEF", "&. c #EFEFEFEFF1F1", "*. c #FEFEE3E3E3E3", "=. c #FDFDE5E5E5E5", "-. c #FEFEEDEDEDED", ";. c #F1F1F1F1F1F1", ":. c #F6F6F2F2F2F2", ">. c #F4F4F4F4F4F4", ",. c gray96", "<. c #F7F7F4F4F4F4", "1. c #F6F6F6F6F6F6", "2. c gray97", "3. c #F8F8F1F1F1F1", "4. c #FEFEF2F2F2F2", "5. c #FDFDF7F7F7F7", "6. c #F8F8F8F8F8F8", "7. c #F9F9F9F9F9F9", "8. c gray98", "9. c #FBFBFBFBFBFB", "0. c #FBFBFCFCFBFB", "q. c gray99", "w. c #FEFEFDFDFDFD", "e. c #FEFEFEFEFEFE", "r. c gray100", "t. c None", /* pixels */ "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", ";.;.;.;.;.;.$.$.$.$.@.+.O.o.X.{ ", ";.r.r.r.r.-.=.5.9.r.9.7.7.7.1.[ ", ";.r.r.4.R M n A } 7.7.7.2.2.2.] ", ";.r.r.R x x j g d .7.1.2.1.1.' ", ";.r.*.x k j g a i J 1.1.1.;.1.` ", "A _ / ^ ! ! Q W T U I P P K U * ", "2 F F q.r.7.7.7.1.( 9 8 6 4 t o ", "2 D j ) 7.7.2.1.;.m 8 6 4 4 e X ", "< A s x ) :.1...B 8 6 4 , > e X ", "< V M m c S H l p u y r e q 0 . ", "; - - % % % $ $ @ @ o o X X . . ", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.", "t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t." }; springlobby-0.169/src/images/flags/GM.xpm0000600000176000000410000001037312105760300021604 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 167 2", " c black", ". c #000021210000", "X c #000023230000", "o c #000027270000", "O c #00002B2B0000", "+ c #00002F2F0000", "@ c #000035350000", "# c #000039390000", "$ c #00003D3D0000", "% c #000043430000", "& c #000049490000", "* c #00004F4F0000", "= c #000055550000", "- c #000059590000", "; c #00005F5F0000", ": c #000067670000", "> c #00006B6B0000", ", c #00006F6F0000", "< c #00000303E3E3", "1 c #00000000E5E5", "2 c #00001515E7E7", "3 c #00004141FDFD", "4 c #09095B5BFDFD", "5 c #17176767FDFD", "6 c #3C3C7171F3F3", "7 c #41417575F4F4", "8 c #45457979F5F5", "9 c #4A4A7D7DF6F6", "0 c #0B0B92920B0B", "q c #0F0F94940E0E", "w c #131396961313", "e c #181899991919", "r c #1E1E9C9C1E1E", "t c #23239F9F2323", "y c #2929A2A22929", "u c #2C2CA2A22C2C", "i c #2F2FA2A22F2F", "p c #2E2EA5A52E2E", "a c #2F2FA4A42F2F", "s c #3232A5A53232", "d c #3434A8A83434", "f c #3535A8A83535", "g c #3939A9A93939", "h c #3A3AABAB3A3A", "j c #3D3DACAC3D3D", "k c #3F3FAEAE3F3F", "l c #4242AEAE4242", "z c #4444B1B14444", "x c #4646B0B04646", "c c #4B4BB2B24B4B", "v c #5050B4B45050", "b c #5454B7B75555", "n c #5858B9B95858", "m c #5D5DBCBC5D5D", "M c #6161BEBE6262", "N c #6666BFBF6666", "B c #4E4E8383F2F2", "V c #4F4F8080F7F7", "C c #52528686F3F3", "Z c #54548484F8F8", "A c #56568A8AF4F4", "S c #58588686F5F5", "D c #58588D8DF4F4", "F c #5B5B8D8DF5F5", "G c #5F5F8F8FF6F6", "H c #59598888F9F9", "J c #5E5E8B8BFAFA", "K c #5C5C9090F5F5", "L c #62628F8FFBFB", "P c #61619393F6F6", "I c #63639393F7F7", "U c #65659696F7F7", "Y c #67679494F4F4", "T c #66669292FCFC", "R c #67679696F8F8", "E c #6B6B9595FCFC", "W c #6F6F9D9DF5F5", "Q c #6A6A9A9AF8F8", "! c #6C6C9999F9F9", "~ c #6F6F9898FDFD", "^ c #6D6D9D9DF9F9", "/ c #70709D9DFAFA", "( c #74749F9FFBFB", ") c #7171A0A0FAFA", "_ c #7575A3A3FBFB", "` c #7878A2A2FBFB", "' c #7979A6A6FCFC", "] c #7C7CA5A5FCFC", "[ c #7D7DA8A8FDFD", "{ c #999900000000", "} c #9D9D00000000", "| c #A7A700000000", " . c #ABAB00000000", ".. c #AFAF00000000", "X. c #B1B100000000", "o. c #B3B300000000", "O. c #B7B700000000", "+. c #B9B900000000", "@. c #BDBD00000000", "#. c #C1C100000000", "$. c #C3C300000000", "%. c #C7C700000000", "&. c #CECE2C2C2C2C", "*. c #D0D031313131", "=. c #D1D137373737", "-. c #D3D33C3C3D3D", ";. c #D5D542424242", ":. c #D6D647474747", ">. c #D4D449494949", ",. c #D7D74E4E4E4E", "<. c #D8D84C4C4C4C", "1. c #D9D951515151", "2. c #D8D853535353", "3. c #D9D957575757", "4. c #DBDB54545454", "5. c #DBDB5C5C5C5C", "6. c #DDDD59595959", "7. c #DDDD5C5C5C5C", "8. c #DEDE5F5F5F5F", "9. c #DDDD60606060", "0. c #DDDD65656565", "q. c #DFDF69696969", "w. c #E0E06D6D6D6D", "e. c #E2E270707171", "r. c #E2E274747474", "t. c #E3E377777777", "y. c #E4E479797979", "u. c #E4E47B7B7A7A", "i. c #E4E47B7B7B7B", "p. c #8080ABABFDFD", "a. c #8383ADADFEFE", "s. c #8888AAAAFEFE", "d. c #9494B6B6FDFD", "f. c #9999BCBCFEFE", "g. c #BBBBC1C1BBBB", "h. c #CDCDC7C7C7C7", "j. c #DFDFE5E5DFDF", "k. c #EBEBE7E7E7E7", "l. c #EDEDF0F0EDED", "z. c #EEEEF0F0EEEE", "x. c #EEEEF1F1EEEE", "c. c #EFEFF2F2EFEF", "v. c #F0F0F2F2F0F0", "b. c #F1F1F4F4F1F1", "n. c #F2F2F5F5F2F2", "m. c #F3F3F6F6F3F3", "M. c #F4F4F2F2F1F1", "N. c #F5F5F3F3F2F2", "B. c #F6F6F3F3F2F2", "V. c #F7F7F4F4F3F3", "C. c #F4F4F7F7F4F4", "Z. c #F5F5F8F8F5F5", "A. c #F6F6F9F9F6F6", "S. c #F7F7FAFAF7F7", "D. c #F8F8F4F4F3F3", "F. c #F9F9F5F5F5F5", "G. c #FAFAF6F6F6F6", "H. c #FAFAF7F7F7F7", "J. c #FBFBF8F8F7F7", "K. c #F8F8FAFAF8F8", "L. c #FAFAFCFCFAFA", "P. c #FCFCF9F9F8F8", "I. c #FCFCFAFAF9F9", "U. c #FDFDFAFAF9F9", "Y. c #FEFEFBFBFAFA", "T. c #FEFEFCFCFCFC", "R. c None", /* pixels */ "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.", "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.", "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.", "%.$.$.$.$.$.@.@.+.O.o.o... .| | ", "$.i.i.i.r.r.e.q.q.0.8.8.3.4.,.} ", "$.i.8.7.7.4.1.<.:.;.-.=.*.&.>.{ ", "k.T.Y.Y.Y.J.J.G.G.G.B.B.m.M.m.h.", "5 f.a.p.] ' _ ) ^ Q U P G D W 2 ", "3 s.~ E T T J H Z 9 9 8 7 6 S 1 ", "4 d.' ' / / Q R P P G A C B Y < ", "j.L.K.S.C.C.C.m.m.v.v.z.x.x.x.g.", ", N z k j f i y t r e w q 0 i o ", "> M m n b v c x l j h f s i i . ", ": ; - = * & % $ # @ + O o . . . ", "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.", "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R." }; springlobby-0.169/src/images/flags/GN.xpm0000600000176000000410000000744312105760300021611 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GN_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 146 2", " c black", ". c #000021210000", "X c #000023230000", "o c #000027270000", "O c #000029290000", "+ c #00002B2B0000", "@ c #00002D2D0000", "# c #000031310000", "$ c #000037370000", "% c #00003D3D0000", "& c #000043430000", "* c #000049490000", "= c #000051510000", "- c #000055550000", "; c #000059590000", ": c #00005F5F0000", "> c #000065650000", ", c #0B0B95950B0B", "< c #0F0F97970E0E", "1 c #101097971010", "2 c #131399991313", "3 c #141499991414", "4 c #14149A9A1414", "5 c #19199C9C1919", "6 c #1A1A9C9C1A1A", "7 c #1F1F9F9F1F1F", "8 c #20209F9F2020", "9 c #2525A2A22525", "0 c #2626A2A22626", "q c #2B2BA5A52B2B", "w c #2C2CA2A22C2C", "e c #2C2CA6A62C2C", "r c #2F2FA4A42F2F", "t c #3232A5A53232", "y c #3333A6A63232", "u c #3131A8A83131", "i c #3131A9A93131", "p c #3535A8A83535", "a c #3636A8A83636", "s c #3737ABAB3737", "d c #3B3BAAAA3B3B", "f c #3F3FADAD3F3F", "g c #4444AFAF4444", "h c #4949B2B24949", "j c #4E4EB4B44E4E", "k c #5353B7B75353", "l c #5858B9B95757", "z c #5C5CBBBB5C5C", "x c #EDED00000000", "c c #EFEF00000000", "v c #F1F100000000", "b c #F3F300000000", "n c #F5F500000000", "m c #F7F700000000", "M c #F9F900000000", "N c #FBFB00000000", "B c #FDFD00000000", "V c red", "C c #F9F93A3A3A3A", "Z c #FAFA3F3F3F3F", "A c #FAFA44444444", "S c #FBFB45454545", "D c #FBFB49494949", "F c #FBFB4A4A4949", "G c #FCFC4A4A4B4B", "H c #FCFC4F4F4F4F", "J c #FDFD4F4F5050", "K c #F9F954545555", "L c #FDFD53535353", "P c #FDFD54545454", "I c #F9F958585858", "U c #FAFA5D5D5D5D", "Y c #FEFE58585858", "T c #FEFE59595959", "R c #FEFE5C5C5C5C", "E c #FEFE5F5F5F5F", "W c #FBFB61616262", "Q c #FCFC66666666", "! c #FCFC6A6A6A6A", "~ c #FDFD6F6F6F6F", "^ c #FEFE72727373", "/ c #FEFE76767676", "( c #FEFE77777777", ") c #FEFE79797979", "_ c #FFFF7B7B7A7A", "` c #FFFF7B7B7B7B", "' c #CBCBDBDB0000", "] c #EDEDD5D50000", "[ c #E5E5E5E50000", "{ c #E7E7E7E70000", "} c #E5E5EFEF0000", "| c #E9E9E9E90000", " . c #EBEBEBEB0000", ".. c #E7E7EEEE1919", "X. c #E8E8EFEF1F1F", "o. c #FDFDEBEB0000", "O. c #F9F9F9F90000", "+. c #FBFBFBFB0000", "@. c #FDFDFDFD0000", "#. c #F4F4F4F41E1E", "$. c #EAEAF0F02424", "%. c #EBEBF1F12B2B", "&. c #ECECF2F23030", "*. c #EEEEF4F43636", "=. c #EAEAF0F03939", "-. c #EFEFF5F53D3D", ";. c #F8F8ECEC3434", ":. c #F9F9EDED3A3A", ">. c #F5F5F5F52323", ",. c #F5F5F5F52424", "<. c #F6F6F6F62929", "1. c #F6F6F6F62A2A", "2. c #F7F7F7F72E2E", "3. c #F7F7F7F72F2F", "4. c #F7F7F7F73030", "5. c #F5F5F5F53D3D", "6. c #F8F8F8F83434", "7. c #F8F8F8F83535", "8. c #F8F8F8F83636", "9. c #F9F9F9F93A3A", "0. c #F9F9F9F93B3B", "q. c #F9F9F9F93C3C", "w. c #FAFAEEEE4040", "e. c #F8F8EEEE5050", "r. c #F6F6F6F64242", "t. c #F7F7F7F74646", "y. c #F7F7F7F74B4B", "u. c #FBFBF0F04646", "i. c #FCFCF1F14B4B", "p. c #FAFAFAFA4040", "a. c #FAFAFAFA4141", "s. c #FAFAFAFA4242", "d. c #FBFBFBFB4646", "f. c #FBFBFBFB4747", "g. c #FCFCFCFC4B4B", "h. c #FCFCFCFC4C4C", "j. c #FDFDF2F25151", "k. c #FDFDF2F25454", "l. c #FDFDFDFD5151", "z. c #F2F2F7F76060", "x. c #FCFCFCFC6565", "c. c #FCFCFCFC6969", "v. c #FDFDFDFD6D6D", "b. c #FEFEF5F57474", "n. c #FDFDFDFD7171", "m. c None", /* pixels */ "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "V V V V V o.+.+.+.O.} > : ; - = ", "V ` ` ` / b.n.v.c.x.z.z l k j * ", "V ` E R R k.l.h.f.a.-.s i e h & ", "V ` R R L j.f.d.a.q.*.i q 0 g % ", "V / P P H i.d.a.q.8.&.q 0 8 f $ ", "V ^ L H G i.a.0.8.4.%.0 7 5 d # ", "V ~ H D S :.0.8.4.1.$.7 5 3 a @ ", "M ! D S Z :.4.4.1.>.X.5 4 1 y O ", "M Q S Z C ;.2.1.>.#...3 < , r X ", "n W U I K e.f.y.r.5.=.a y r e . ", "n b b x x ] | | [ [ ' @ X X . . ", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m." }; springlobby-0.169/src/images/flags/GP.xpm0000600000176000000410000000753412105760300021614 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GP_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 150 2", " c black", ". c #0000C1C10000", "X c #0000C3C30000", "o c #0000C5C50000", "O c #0000C7C70000", "+ c #0000CBCB0000", "@ c #0000CDCD0000", "# c #0000CFCF0000", "$ c #0000D3D30000", "% c #0000D5D50000", "& c #0000D7D70000", "* c #0000D9D90000", "= c #0000DBDB0000", "- c #0000DDDD0000", "; c #0000DFDF0000", ": c #0000E1E10000", "> c #0000E3E30000", ", c #0000E5E50000", "< c #0000E7E70000", "1 c #0000E9E90000", "2 c #0303EBEB0000", "3 c #0909EBEB0000", "4 c #0D0DEDED0000", "5 c #0000F1F10000", "6 c #1D1DEDED0000", "7 c #1717F9F90303", "8 c #5757EDED4747", "9 c #5959EDED4B4B", "0 c #5C5CEFEF4D4D", "q c #6060F0F05050", "w c #6262F0F05454", "e c #6565F1F15757", "r c #6969F2F25B5B", "t c #6D6DF3F35F5F", "y c #7171F4F46363", "u c #7575F5F56767", "i c #7575F6F66A6A", "p c #7878F6F66B6B", "a c #7979F7F76E6E", "s c #7C7CF7F76F6F", "d c #7D7DF7F77272", "f c #7F7FF7F77474", "g c #DBDB00000000", "h c #DFDF00000000", "j c #E1E100000000", "k c #E3E300000000", "l c #E5E500000000", "z c #FBFB00000000", "x c #F9F90B0B0000", "c c #FBFB09090000", "v c #FFFF0F0F0000", "b c #FBFB15150000", "n c #F0F041411F1F", "m c #F1F146462424", "M c #F2F243432828", "N c #F3F347472C2C", "B c #F1F149492929", "V c #F1F14A4A2A2A", "C c #F2F24E4E2E2E", "Z c #F2F24E4E2F2F", "A c #F2F24F4F2F2F", "S c #F4F44A4A3131", "D c #F5F54F4F3636", "F c #F4F452523333", "G c #F4F453533434", "H c #F4F453533535", "J c #F4F454543535", "K c #F5F557573838", "L c #F5F557573A3A", "P c #F6F654543939", "I c #F6F654543B3B", "U c #F5F558583B3B", "Y c #F7F759593E3E", "T c #F6F65B5B3E3E", "R c #F2F25C5C4040", "E c #F7F758584040", "W c #F6F65C5C4040", "Q c #F8F85D5D4343", "! c #F8F85D5D4545", "~ c #F2F260604343", "^ c #F7F760604343", "/ c #F7F761614545", "( c #F3F364644848", ") c #F4F468684C4C", "_ c #F9F961614949", "` c #F9F961614A4A", "' c #F8F864644848", "] c #F8F865654A4A", "[ c #FAFA66664E4E", "{ c #FAFA66664F4F", "} c #F9F969694D4D", "| c #F9F969694F4F", " . c #F9F96A6A4F4F", ".. c #F5F56C6C5050", "X. c #FBFB69695353", "o. c #FAFA6A6A5151", "O. c #FBFB6A6A5353", "+. c #FAFA6E6E5353", "@. c #FAFA6E6E5454", "#. c #FCFC6E6E5757", "$. c #FBFB6A6A5858", "%. c #FAFA6D6D5858", "&. c #FAFA72725858", "*. c #FBFB75755C5C", "=. c #FDFD72725B5B", "-. c #FDFD76766060", ";. c #FEFE75756464", ":. c #8181F7F77676", ">. c #8484F8F87878", ",. c #8484F8F87A7A", "<. c #8888F9F97D7D", "1. c #FEFE83836868", "2. c #FBFB88886262", "3. c #FCFC86867777", "4. c #FBFBB5B55F5F", "5. c #FCFCCACA7F7F", "6. c #FCFCD6D66868", "7. c #FCFCE3E36969", "8. c #FEFEE9E97070", "9. c #FDFDFAFA6F6F", "0. c #8B8BFAFA8080", "q. c #8F8FFBFB8484", "w. c #9191FCFC8888", "e. c #9494FCFC8A8A", "r. c #9696FCFC8D8D", "t. c #9898FCFC8F8F", "y. c #9999FCFC9090", "u. c #C9C9B1B19797", "i. c #DDDDBFBFA9A9", "p. c #FEFE93938282", "a. c #FDFDB5B58484", "s. c #FEFEEDED8888", "d. c #EBEBD9D9C5C5", "f. c #F5F5DFDFCFCF", "g. c #F1F1F1F1F1F1", "h. c gray95", "j. c #F3F3F3F3F3F3", "k. c #F4F4F4F4F4F4", "l. c gray96", "z. c #F6F6F6F6F6F6", "x. c gray97", "c. c #F8F8F8F8F8F8", "v. c #F9F9F9F9F9F9", "b. c gray98", "n. c #FBFBFBFBFBFB", "m. c gray99", "M. c #FDFDFDFDFDFD", "N. c #FEFEFEFEFEFE", "B. c gray100", "V. c None", /* pixels */ "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "6 4 4 4 3 2 < < < < > ; ; * * & ", "7 y.t.t.r.e.q.q.0.<.,.:.d a i < ", "f.B.B.B.B.B.B.B.B.v.v.v.x.x.x.i.", "v p.1.;.*.=.#.O.[ ! W W P J ) l ", "b a.8.2.*.%.#.) ] / R P F F ) l ", "b s.9.6.%.@.o.[ / R P J C V ( j ", "b a.7.4.+. .! W T U F C V m ~ h ", "z 3.$.O.[ ! W W I D N N N n R g ", "d.b.b.b.b.v.x.x.x.k.x.g.g.g.g.u.", "5 ,.f s p u y t r e w q 0 9 8 $ ", "> ; * * & & $ @ @ @ X + X . . . ", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V." }; springlobby-0.169/src/images/flags/GQ.xpm0000600000176000000410000001002312105760300021600 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GQ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 159 2", " c black", ". c #000043430000", "X c #00004D4D0000", "o c #00005D5D0000", "O c #000061610000", "+ c #000063630000", "@ c #000067670000", "# c #00006D6D0000", "$ c #000071710000", "% c #000075750000", "& c #000079790000", "* c #00007D7D0000", "= c #00005F5FDDDD", "- c #00007171F5F5", "; c #00007B7BFBFB", ": c #00007D7DF9F9", "> c #03037F7FFDFD", ", c #000081810000", "< c #000083830000", "1 c #000087870000", "2 c #000089890000", "3 c #2C2CA1A12C2C", "4 c #3131A4A43131", "5 c #3737A7A73737", "6 c #3D3DAAAA3D3D", "7 c #4242ADAD4242", "8 c #4949AEAE4949", "9 c #4747B0B04747", "0 c #4C4CB3B34C4C", "q c #4E4EB4B44E4E", "w c #5151B4B45151", "e c #5353B7B75353", "r c #5454B7B75454", "t c #5858B9B95757", "y c #5959B8B85959", "u c #5C5CBABA5C5C", "i c #5C5CBBBB5C5C", "p c #5F5FBDBD5F5F", "a c #6161BEBE6060", "s c #6565C0C06565", "d c #6969C2C26969", "f c #6D6DC3C36D6D", "g c #7070C5C57171", "h c #7474C7C77474", "j c #7777C8C87777", "k c #7979C9C97979", "l c #7B7BCACA7B7B", "z c #13138989DFDF", "x c #07078383FDFD", "c c #0D0D8787FDFD", "v c #11118787FFFF", "b c #15158989FBFB", "n c #15158989FFFF", "m c #7C7CBBBBFCFC", "M c #999900000000", "N c #9B9B00000000", "B c #9D9D00000000", "V c #A1A100000000", "C c #A3A300000000", "Z c #A5A500000000", "A c #A9A900000000", "S c #ABAB00000000", "D c #AFAF00000000", "F c #B3B300000000", "G c #B7B700000000", "H c #B9B900000000", "J c #BDBD00000000", "K c #CDCD00000000", "L c #CCCC1D1D1D1D", "P c #CECE20201F1F", "I c #CFCF24242424", "U c #D1D129292929", "Y c #D3D32E2E2E2E", "T c #D7D735353535", "R c #D3D33E3E3E3E", "E c #D7D739393939", "W c #D7D73D3D3D3D", "Q c #D4D443434343", "! c #D5D546464646", "~ c #D6D64A4A4A4A", "^ c #D7D74C4C4C4C", "/ c #D9D942424242", "( c #DBDB48484848", ") c #DEDE4C4C4B4B", "_ c #D8D850505050", "` c #D9D954545454", "' c #DBDB57575757", "] c #DDDD5C5C5C5C", "[ c #DDDD60606060", "{ c #DFDF63636464", "} c #E0E059595959", "| c #E1E168686969", " . c #E2E26C6C6C6C", ".. c #E4E46F6F6F6F", "X. c #8A8ABFBF8585", "o. c #B9B9BFBFB9B9", "O. c #9E9EA5A5D0D0", "+. c #8080BEBEFDFD", "@. c #8383BFBFFEFE", "#. c #9191BEBEF3F3", "$. c #9090C3C38B8B", "%. c #BDBDC4C4BEBE", "&. c #8F8FCACAE9E9", "*. c #8888C1C1FCFC", "=. c #8888C3C3FDFD", "-. c #8F8FC5C5FCFC", ";. c #9191C8C8FEFE", ":. c #9A9ACDCDF7F7", ">. c #9898C9C9FAFA", ",. c #9999CBCBFEFE", "<. c #9B9BCDCDFEFE", "1. c #BFBFC1C1C2C2", "2. c #A1A1D0D0FDFD", "3. c #F8F8EFEFB6B6", "4. c #F9F9F0F0B8B8", "5. c #C5C5C8C8C9C9", "6. c #DDDDD7D7D5D5", "7. c #D8D8DCDCDDDD", "8. c gray87", "9. c #DFDFE5E5DFDF", "0. c #DEDEE2E2E2E2", "q. c #E1E1E0E0E0E0", "w. c gray89", "e. c gray90", "r. c #E7E7E7E7E7E7", "t. c #E9E9F7F7FBFB", "y. c #F1F1EDEDEDED", "u. c #F1F1EEEEEEEE", "i. c #F2F2EEEEEEEE", "p. c #F2F2EFEFEFEF", "a. c #F3F3F0F0F0F0", "s. c gray95", "d. c #F3F3F3F3F3F3", "f. c #F1F1F4F4F1F1", "g. c #F2F2F5F5F2F2", "h. c #F3F3F6F6F3F3", "j. c #F4F4F1F1F1F1", "k. c #F4F4F7F7F3F3", "l. c #F4F4F4F4F4F4", "z. c #F4F4F5F5F5F5", "x. c gray96", "c. c #F6F6F6F6F6F6", "v. c gray97", "b. c #F1F1F6F6FDFD", "n. c #F5F5F8F8F5F5", "m. c #F7F7FAFAF7F7", "M. c #F8F8F4F4F4F4", "N. c #F9F9F5F5F5F5", "B. c #F9F9F6F6F6F6", "V. c #FAFAF7F7F7F7", "C. c #F8F8F8F8F8F8", "Z. c #F8F8FBFBF8F8", "A. c #F9F9FBFBF9F9", "S. c gray98", "D. c #FBFBFBFBFBFB", "F. c #F9F9FCFCF9F9", "G. c gray99", "H. c #FDFDFCFCFDFD", "J. c None", /* pixels */ "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "z 2 2 2 2 , , * & % $ # @ O o O ", "b &.l l h h g f d s a u t r q X ", "n :.p u y r w 0 9 7 6 5 4 3 8 . ", "v <.2.F.A.A.m.4.3.m.h.g.g.g.g.9.", "c ,.@.b.H.H.A.$.X.v.m.x.x.x.x.r.", "x ;.@.@.D.D.A.%.o.x.M.x.x.d.x.e.", "> *.m t.D.A.0.5.5.7.M.h.d.s.x.w.", "; -.,.V.V.M.M.q.7.p.p.i.u.u.u.6.", ": #.} ) ( / W E T Y U I L L R M ", "- O... .| { [ ] ' ` _ ^ ~ ! ! M ", "= K J J G F D S S Z V V B B M B ", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J." }; springlobby-0.169/src/images/flags/GR.xpm0000600000176000000410000000767212105760300021621 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 153 2", " c black", ". c #000000008787", "X c #000000008B8B", "o c #000000008F8F", "O c #000000009191", "+ c #000000009393", "@ c #000000009797", "# c #000000009B9B", "$ c #000000009F9F", "% c #00000000A3A3", "& c #00000000A7A7", "* c #00000000ABAB", "= c #00000101ABAB", "- c #00000707ADAD", "; c #00000F0FAFAF", ": c #00001818A1A1", "> c #00001717B3B3", ", c #00001D1DB7B7", "< c #07072121A9A9", "1 c #00002323B9B9", "2 c #00002929BDBD", "3 c #00002F2FBFBF", "4 c #0A0A3434A1A1", "5 c #00003535C1C1", "6 c #03033535C3C3", "7 c #07073B3BC3C3", "8 c #09093B3BC4C4", "9 c #09093D3DC3C3", "0 c #0D0D3F3FC5C5", "q c #2B2B5656C8C8", "w c #2D2D5757C9C9", "e c #2F2F5858CACA", "r c #31315A5ACBCB", "t c #33335C5CCCCC", "y c #35355E5ECDCD", "u c #37375F5FCCCC", "i c #37376060CDCD", "p c #39396161CECE", "a c #3C3C6363CFCF", "s c #3D3D6565D0D0", "d c #3F3F6767D1D1", "f c #4C4C7171D4D4", "g c #4D4D7171D4D4", "h c #4D4D7272D5D5", "j c #4F4F7373D5D5", "k c #58587676C8C8", "l c #7A7A9292D9D9", "z c #7C7C9595DADA", "x c #81818282C8C8", "c c #81818484CDCD", "v c #80809898DCDC", "b c #84849C9CDDDD", "n c #89899F9FD8D8", "m c #88889F9FDEDE", "M c #8C8CA1A1D9D9", "N c #8F8FA3A3DADA", "B c #8C8CA2A2DDDD", "V c #9292A5A5DCDC", "C c #9595A8A8DEDE", "Z c #9797AAAADFDF", "A c #9B9BACACDDDD", "S c #8B8BA2A2E0E0", "D c #8F8FA5A5E1E1", "F c #9292A7A7E3E3", "G c #9797AAAAE0E0", "H c #9A9AADADE1E1", "J c #9D9DAFAFE2E2", "K c #AAAAB0B0C7C7", "L c #A0A0B2B2E3E3", "P c #A3A3B5B5E5E5", "I c #A6A6B7B7E6E6", "U c #A9A9BABAE7E7", "Y c #B3B3C0C0E4E4", "T c #B5B5C1C1E5E5", "R c #B5B5C2C2E7E7", "E c #B6B6C3C3E6E6", "W c #B7B7C4C4E8E8", "Q c #B8B8C4C4E6E6", "! c #BABAC5C5E7E7", "~ c #B9B9C5C5E9E9", "^ c #BBBBC7C7E8E8", "/ c #BBBBC7C7E9E9", "( c #B9B9C6C6EDED", ") c #BDBDC8C8E7E7", "_ c #BDBDC8C8E9E9", "` c #BCBCC8C8EAEA", "' c #BEBECACAE9E9", "] c #BEBECACAEBEB", "[ c #BFBFCACAEAEA", "{ c #C8C8CACAD6D6", "} c #D0D0D0D0D4D4", "| c #D5D5D5D5D5D5", " . c #D2D2D6D6DDDD", ".. c #C0C0CBCBECEC", "X. c #C0C0CCCCEAEA", "o. c #C2C2CDCDEBEB", "O. c #C2C2CCCCECEC", "+. c #C4C4CECEECEC", "@. c #C5C5D0D0EDED", "#. c #CFCFD7D7EFEF", "$. c #D9D9DFDFF1F1", "%. c #E2E2E2E2E2E2", "&. c #E0E0E3E3EDED", "*. c #E2E2E4E4EDED", "=. c #E2E2E5E5EFEF", "-. c #E8E8E8E8ECEC", ";. c #E3E3E6E6F0F0", ":. c #E4E4E7E7F0F0", ">. c #E5E5E8E8F1F1", ",. c #E6E6E9E9F2F2", "<. c #E8E8EAEAF3F3", "1. c #E8E8ECECF4F4", "2. c #E9E9EDEDF5F5", "3. c #EBEBEDEDF6F6", "4. c #ECECEEEEF2F2", "5. c #EDEDEFEFF4F4", "6. c #EDEDEEEEF7F7", "7. c #EDEDF0F0F7F7", "8. c #EEEEF0F0F4F4", "9. c #EFEFF0F0F5F5", "0. c #EEEEF1F1F8F8", "q. c #F0F0F0F0F1F1", "w. c #F0F0F0F0F2F2", "e. c #F1F1F2F2F3F3", "r. c #F2F2F2F2F3F3", "t. c #F0F0F2F2F6F6", "y. c #F1F1F3F3F7F7", "u. c #F3F3F3F3F4F4", "i. c #F2F2F4F4F7F7", "p. c #F4F4F4F4F5F5", "a. c #F4F4F5F5F7F7", "s. c #F5F5F5F5F7F7", "d. c #F2F2F3F3F8F8", "f. c #F3F3F4F4F9F9", "g. c #F3F3F5F5FAFA", "h. c #F5F5F6F6F8F8", "j. c #F6F6F6F6F8F8", "k. c #F6F6F7F7F9F9", "l. c #F7F7F7F7F9F9", "z. c #F7F7F7F7FAFA", "x. c #F7F7F8F8FBFB", "c. c #F7F7F9F9FCFC", "v. c #F8F8F8F8F9F9", "b. c #F9F9F9F9FAFA", "n. c #FAFAFAFAFBFB", "m. c #FBFBFBFBFBFB", "M. c #F8F8F9F9FCFC", "N. c #F9F9FAFAFCFC", "B. c gray99", "V. c #FDFDFDFDFDFD", "C. c #FEFEFEFEFEFE", "Z. c gray100", "A. c None", /* pixels */ "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "0 0 | | 9 8 5 5 2 1 , > ; - * * ", "0 j Z.m.f j m.m.z.z.z.z.s.s.g. .", "%.Z.Z.Z.Z.m......./ / ! W R X.l ", "%.Z.Z.Z.Z.Z.F B S m b v v l n : ", "7 j Z.m.a a g.g.d.d.9.9.4.-.q.{ ", "5 g Z.B.a a p p y t r e w w y : ", "-.B.l.m.m.l.l.s.s.p.e.e.w.w.p.| ", "H #.@.@.o.o.[ _ / ! Q T T T _ x ", "k ( U I P J J H Z C V V M n A 4 ", "$.7.7.6.6.2.2.,.,.:.:.=.=.*.&.K ", "> ; - * & % $ # # + O o X X . . ", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A." }; springlobby-0.169/src/images/flags/GS.xpm0000600000176000000410000000760512105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GS_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 150 2", " c black", ". c #000000000505", "X c #000000000707", "o c #000000000D0D", "O c #000000001515", "+ c #000000001B1B", "@ c #000000002323", "# c #000000002727", "$ c #000000002929", "% c #000000002B2B", "& c #000000002F2F", "* c #000000003131", "= c #000000003737", "- c #000000003939", "; c #000000004343", ": c #000000005959", "> c #000000005D5D", ", c #0B0B0B0B6464", "< c #000000007D7D", "1 c #151515156F6F", "2 c #181819196D6D", "3 c #1A1A1A1A7373", "4 c #1E1E1E1E7474", "5 c #232323237777", "6 c #242424247474", "7 c #292929297B7B", "8 c #2A2A2A2A7979", "9 c #2A2A2A2A7B7B", "0 c #2C2C2C2C7A7A", "q c #2C2C2C2C7B7B", "w c #2F2F2F2F7C7C", "e c #2F2F2F2F7D7D", "r c #2E2E2E2E7F7F", "t c #2F2F2F2F7F7F", "y c #323232327F7F", "u c #363636367F7F", "i c #3A3A37377F7F", "p c #5F5F0D0D3F3F", "a c #6F6F03032D2D", "s c #464646467C7C", "d c #313131318282", "f c #333333338282", "g c #353535358181", "h c #343434348383", "j c #3B3B3B3B8383", "k c #393939398484", "l c #383839398686", "z c #3A3A3A3A8686", "x c #3C3C3C3C8585", "c c #3D3D3C3C8686", "v c #3D3D3D3D8686", "b c #3F3F3F3F8787", "n c #3F3F3F3F8A8A", "m c #40403F3F8A8A", "M c #404040408A8A", "N c #424242428A8A", "B c #424242428C8C", "V c #444444448E8E", "C c #454545458E8E", "Z c #454545458F8F", "A c #464646468D8D", "S c #484844448B8B", "D c #494949498F8F", "F c #494949499191", "G c #49494A4A9292", "H c #4B4B4B4B9090", "J c #4E4E4E4E9393", "K c #4F4F4F4F9494", "L c #505049498D8D", "P c #505050509393", "I c #535353539696", "U c #545454549696", "Y c #535353539B9B", "T c #585857579898", "R c #585858589999", "E c #5C5C5C5C9B9B", "W c #5D5D5D5D9D9D", "Q c #4F4F6767AFAF", "! c #616160609E9E", "~ c #616161619F9F", "^ c #68686A6A9999", "/ c #757572729F9F", "( c #65656565A1A1", ") c #66666666A3A3", "_ c #6A6A6A6AA5A5", "` c #6B6B6B6BA4A4", "' c #6F6F6F6FA8A8", "] c #70707070A2A2", "[ c #77777777A8A8", "{ c #7E7E7E7EABAB", "} c #7A7A7F7FB4B4", "| c #59598E8E5E5E", " . c #65658787C7C7", ".. c #7777A3A3DBDB", "X. c #7A7AB6B6F0F0", "o. c #979711112D2D", "O. c #A5A521213737", "+. c #97972F2F4F4F", "@. c #FFFF1B1B0000", "#. c #E7E759595959", "$. c #EAEA65655F5F", "%. c #FCFC69695050", "&. c #E3E362626161", "*. c #E5E57A7A7979", "=. c #E4E47D7D7E7E", "-. c #F0F06A6A6262", ";. c #F1F16F6F6767", ":. c #F9F979797171", ">. c #8A8A60608888", ",. c #8B8B64648D8D", "<. c #A4A47B7B9B9B", "1. c #AAAA7E7E9898", "2. c #959596969A9A", "3. c #86868686B4B4", "4. c #8B8B8585B3B3", "5. c #9B9BB8B8B8B8", "6. c #B5B5B5B58383", "7. c #D8D880808585", "8. c #D8D884848C8C", "9. c #D3D38C8C9696", "0. c #C8C89191A0A0", "q. c #DADAA3A3ACAC", "w. c #DADAB3B3BDBD", "e. c #E7E78D8D8C8C", "r. c #FDFD99998181", "t. c #FEFEBCBCACAC", "y. c #CACAC3C39F9F", "u. c #D3D3CECEA2A2", "i. c #FDFDC9C9B8B8", "p. c #C1C1C1C1D4D4", "a. c #C5C5C5C5D7D7", "s. c #C8C8C8C8D9D9", "d. c #CACACACADADA", "f. c #DEDEDFDFE6E6", "g. c #E8E8CACAD0D0", "h. c #EBEBCECED3D3", "j. c #FFFFCACAC4C4", "k. c #FBFBDADAC6C6", "l. c #FEFEDFDFD1D1", "z. c #E3E3E2E2E3E3", "x. c #E1E1E1E1E8E8", "c. c #E4E4E4E4ECEC", "v. c #E8E8E8E8ECEC", "b. c #E9E9E9E9EEEE", "n. c #EBEBECECEBEB", "m. c #EEEEEEEEEEEE", "M. c #F3F3F3F3F4F4", "N. c #FDFDFDFDF7F7", "B. c #F9F9FFFFFFFF", "V. c None", /* pixels */ "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", ":.4.: o.O.> a r.; & $ @ + O o X ", "< j.B.w.q.h.N...` ( ! E T I J ", "@.=.;.$.#.-.&.%.L N v l f 0 D ", "p g.t.*.e.i.7.1.S v 3.b.M.s.{ ", " .l.} 9.8.X.k.<.v u c.n.^ x.s. ", "+./ Y ,.>.s Q 0.i f M.5.| 2.b. ", "- ' K F Z N x g t 8 f.u.6.y.a. ", "= ` F Z n l h t 9 6 [ z.n.p.] ", "* ) Z m l g t 9 5 4 2 3 1 , e ", "$ ~ W R U P D S N v l g f e 0 ", "$ + O o X ", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V." }; springlobby-0.169/src/images/flags/GT.xpm0000600000176000000410000000713612105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GT_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 139 2", " c black", ". c #00000000DDDD", "X c #00000000DFDF", "o c #00000000E1E1", "O c #00000000E3E3", "+ c #00000000E5E5", "@ c #00000303E7E7", "# c #00000909E7E7", "$ c #00001111E9E9", "% c #00001515EBEB", "& c #00001919EDED", "* c #00002323EFEF", "= c #00002525EFEF", "- c #00002D2DEFEF", "; c #00002D2DF1F1", ": c #00003131F3F3", "> c #00003333F3F3", ", c #00003535F5F5", "< c #00003D3DF7F7", "1 c #00004545F5F5", "2 c #00004747F9F9", "3 c #00004D4DFBFB", "4 c #00005151FDFD", "5 c #00005353FDFD", "6 c #00005555FDFD", "7 c #00005959FDFD", "8 c #00005B5BFFFF", "9 c #00005D5DFFFF", "0 c #00005F5FFFFF", "q c #03036767FFFF", "w c #1F1F7373F1F1", "e c #23237575F1F1", "r c #23237676F2F2", "t c #24247676F2F2", "y c #28287979F2F2", "u c #29297A7AF2F2", "i c #29297A7AF3F3", "p c #2D2D7C7CF3F3", "a c #2E2E7D7DF3F3", "s c #2E2E7E7EF4F4", "d c #32328080F4F4", "f c #34348181F4F4", "g c #34348282F5F5", "h c #38388383F5F5", "j c #39398585F5F5", "k c #39398686F6F6", "l c #3D3D8686F2F2", "z c #3D3D8787F6F6", "x c #3E3E8888F6F6", "c c #3F3F8989F7F7", "v c #40408787F2F2", "b c #42428989F3F3", "n c #42428A8AF3F3", "m c #43438B8BF7F7", "M c #44448A8AF3F3", "N c #47478D8DF4F4", "B c #45458D8DF8F8", "V c #45458D8DF9F9", "C c #4B4B8F8FF5F5", "Z c #4B4B9090FAFA", "A c #4F4F9393FAFA", "S c #50509393F5F5", "D c #55559696F6F6", "F c #50509494FBFB", "G c #54549797FBFB", "H c #55559797FAFA", "J c #55559797FCFC", "K c #59599999F7F7", "L c #5E5E9C9CF7F7", "P c #59599B9BFBFB", "I c #5A5A9B9BFBFB", "U c #5A5A9B9BFDFD", "Y c #5E5E9C9CF9F9", "T c #5E5E9E9EFCFC", "R c #5E5E9E9EFDFD", "E c #5F5F9E9EFCFC", "W c #62629E9EF8F8", "Q c #6363A0A0FDFD", "! c #6363A1A1FDFD", "~ c #6262A1A1FEFE", "^ c #6666A1A1F9F9", "/ c #6666A2A2F9F9", "( c #6666A3A3FEFE", ") c #6767A3A3FEFE", "_ c #6868A3A3FAFA", "` c #6B6BA5A5FAFA", "' c #6A6AA5A5FEFE", "] c #6A6AA6A6FEFE", "[ c #6F6FA8A8FBFB", "{ c #6E6EA8A8FEFE", "} c #7474AAAAFCFC", "| c #7878AEAEFCFC", " . c #7C7CAFAFFDFD", ".. c #7F7FB1B1FEFE", "X. c #7F7FB2B2FEFE", "o. c #8282B3B3FEFE", "O. c #8484B5B5FEFE", "+. c #8585B5B5FEFE", "@. c #8787B7B7FFFF", "#. c #BBBBC1C1CBCB", "$. c gray81", "%. c #CBCBCFCFD7D7", "&. c gray82", "*. c LightGray", "=. c #D7D7D7D7D7D7", "-. c #D9D9DDDDE5E5", ";. c #E7E7E7E7E7E7", ":. c #E3E3E7E7EDED", ">. c #E9E9E9E9E9E9", ",. c gray92", "<. c #EAEAEEEEF3F3", "1. c #EBEBEEEEF4F4", "2. c #ECECEFEFF5F5", "3. c #EDEDEFEFF4F4", "4. c #EEEEF1F1F6F6", "5. c #EFEFF2F2F7F7", "6. c #F4F4F4F4F4F4", "7. c gray96", "8. c #F6F6F6F6F6F6", "9. c gray97", "0. c #F0F0F4F4F8F8", "q. c #F1F1F5F5F9F9", "w. c #F2F2F4F4F8F8", "e. c #F3F3F5F5F8F8", "r. c #F3F3F5F5F9F9", "t. c #F4F4F6F6FAFA", "y. c #F5F5F7F7FBFB", "u. c #F6F6F8F8FCFC", "i. c #F7F7F9F9FDFD", "p. c #F8F8F8F8F8F8", "a. c #F9F9F9F9F9F9", "s. c gray98", "d. c #FBFBFBFBFBFB", "f. c #F8F8FAFAFDFD", "g. c #FAFAFBFBFEFE", "h. c gray99", "j. c #FDFDFDFDFDFD", "k. c #FDFDFDFDFEFE", "l. c None", /* pixels */ "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "q q 9 9 5 :.,.,.,.;.-., : ; = - ", "8 @.@.@. .g.h.h.h.h.y._ ^ W L % ", "9 @.{ { ! g.h.h.d.d.0.V m x K $ ", "9 @.' ! T i.h.d.a.a.0.c z j D # ", "8 o.! ! U y.g.a.a.a.5.j h f S @ ", "5 o.! T J t.a.a.a.9.4.g g p C @ ", "5 .T I F t.a.p.9.9.1.a p y N o ", "3 | I H Z t.p.9.9.6.<.y p t b X ", "2 } H F V 0.9.9.9.6.<.e w w v X ", "< [ _ ^ Y 0.p.9.9.9.4.b b v l X ", "1 : ; = & %.=.*.$.$.#.o X X . . ", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l." }; springlobby-0.169/src/images/flags/GU.xpm0000600000176000000410000000714712105760300021621 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GU_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 137 2", " c black", ". c #35355858F1F1", "X c #38385C5CF1F1", "o c #39395C5CF2F2", "O c #3C3C5E5EF2F2", "+ c #3D3D6060F2F2", "@ c #7F7F7575A9A9", "# c #49496464EDED", "$ c #41416262F3F3", "% c #42426262F3F3", "& c #42426464F3F3", "* c #46466666F4F4", "= c #46466767F4F4", "- c #47476767F4F4", "; c #47476868F4F4", ": c #4C4C6B6BF3F3", "> c #4C4C6B6BF5F5", ", c #4C4C6D6DF5F5", "< c #50506F6FF2F2", "1 c #51516F6FF3F3", "2 c #51516F6FF6F6", "3 c #52527070F2F2", "4 c #53537070F2F2", "5 c #51517070F6F6", "6 c #51517171F6F6", "7 c #55557373F3F3", "8 c #56567373F3F3", "9 c #55557272F5F5", "0 c #55557373F6F6", "q c #56567474F7F7", "w c #56567575F7F7", "e c #58587575F3F3", "r c #59597676F4F4", "t c #59597676F8F8", "y c #5B5B7878F4F4", "u c #5C5C7A7AF5F5", "i c #5B5B7878F8F8", "p c #5C5C7A7AF9F9", "a c #5D5D7A7AF9F9", "s c #65656464E9E9", "d c #60607B7BF5F5", "f c #61617D7DF5F5", "g c #63637F7FF5F5", "h c #60607C7CF9F9", "j c #61617E7EFAFA", "k c #62627F7FF9F9", "l c #62627E7EFAFA", "z c #66667F7FF8F8", "x c #65658181F6F6", "c c #66668282FAFA", "v c #66668282FBFB", "b c #67678383FAFA", "n c #68688383F6F6", "m c #69698484F7F7", "M c #6B6B8585F7F7", "N c #6A6A8686FBFB", "B c #6B6B8686FCFC", "V c #6C6C8787FCFC", "C c #6E6E8888F7F7", "Z c #6E6E8989F8F8", "A c #6E6E8989FCFC", "S c #6F6F8A8AFCFC", "D c #71718B8BFBFB", "F c #72728B8BF8F8", "G c #70708A8AFDFD", "H c #70708B8BFDFD", "J c #72728C8CF9F9", "K c #73738C8CFDFD", "L c #73738D8DFDFD", "P c #73738E8EFDFD", "I c #75758F8FF9F9", "U c #76768F8FF9F9", "Y c #74748E8EFDFD", "T c #76769090FEFE", "R c #77779090FEFE", "E c #7A7A9191FAFA", "W c #7A7A9393FAFA", "Q c #7A7A9393FEFE", "! c #7E7E9494FBFB", "~ c #7E7E9696FBFB", "^ c #7D7D9595FEFE", "/ c #A0A04A4A7B7B", "( c #D9D900000000", ") c #DBDB00000000", "_ c #DFDF00000000", "` c #E1E100000000", "' c #E3E300000000", "] c #E5E500000000", "[ c #E7E700000000", "{ c #EBEB00000000", "} c #EDED00000000", "| c #EFEF00000000", " . c #F1F100000000", ".. c #F3F300000000", "X. c #F5F500000000", "o. c #F7F700000000", "O. c #F9F900000000", "+. c #FBFB00000000", "@. c #FBFB01010000", "#. c #FBFB03030000", "$. c #FDFD07070000", "%. c #FDFD09090000", "&. c #C8C855555F5F", "*. c #D5D558585F5F", "=. c #CECE56566565", "-. c #DDDD66664343", ";. c #D9D961616C6C", ":. c #E5E564646060", ">. c #E3E366666868", ",. c #E5E56E6E6D6D", "<. c #E2E26D6D7171", "1. c #C7C760608585", "2. c #C7C77B7B9F9F", "3. c #C2C27979A0A0", "4. c #ACAC81817F7F", "5. c #DADABCBC4242", "6. c #8D8D8383A9A9", "7. c #9F9FB8B88989", "8. c #A0A0BABA8F8F", "9. c #81819898FCFC", "0. c #82829999FCFC", "q. c #84849A9AFCFC", "w. c #85859C9CFCFC", "e. c #88889E9EFDFD", "r. c #8A8A9E9EFDFD", "t. c #8A8AA0A0FEFE", "y. c #8C8CA1A1FEFE", "u. c #8D8DA2A2FEFE", "i. c #8F8FA4A4FEFE", "p. c #9292A5A5FEFE", "a. c #9292A6A6FEFE", "s. c #9494A8A8FFFF", "d. c #B4B4C1C1A6A6", "f. c #DCDCCFCFD5D5", "g. c #D3D3D2D2D8D8", "h. c #DDDDD1D1D6D6", "j. c None", /* pixels */ "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "%.%.%.%.#.#.#.#.o.o.o. . . .} } ", "%.s.s.p.p.y.t.w.q.0.^ E U D C } ", "%.s.^ Q T L L 3.2.z h t w 6 m [ ", "%.p.Q T L S 4.7.g.1.i w 5 , x [ ", "#.i.T L L B <.7.d.>.0 2 > ; f ` ", "#.y.L A B v ,.h.f.:.1 > * & u ` ", "#.w.A B v x ;.s 6.*.: * % + r ` ", "o.q.b v a p =.@ 5./ * % + o 7 ) ", "o.0.v v p i 0 &.-.# % O o . 4 ) ", "o.^ W E J C m n x u y r 7 4 , ) ", " . . .} } { { [ [ ` _ _ ) ) ) ) ", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j." }; springlobby-0.169/src/images/flags/GW.xpm0000600000176000000410000000767512105760300021631 0ustar buildbotwww-data00000000000000/* XPM */ static const char *GW_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 153 2", " c black", ". c #000023230000", "X c #000025250000", "o c #000027270000", "O c #00002D2D0000", "+ c #00002F2F0000", "@ c #000031310000", "# c #000033330000", "$ c #000035350000", "% c #000039390000", "& c #00003B3B0000", "* c #00003D3D0000", "= c #000041410000", "- c #000047470000", "; c #5B5B53535353", ": c #65654F4F4F4F", "> c #66664F4F4F4F", ", c #6F6F58585858", "< c #0B0B95950B0B", "1 c #0F0F97970E0E", "2 c #11118F8F0000", "3 c #101097971010", "4 c #131399991313", "5 c #141499991414", "6 c #14149A9A1414", "7 c #18189D9D1919", "8 c #19199C9C1919", "9 c #19199D9D1919", "0 c #1F1F9F9F1F1F", "q c #1E1EA0A01E1E", "w c #1F1FA0A01F1F", "e c #2323A2A22323", "r c #2424A2A22424", "t c #2424A3A32424", "y c #2929A4A42929", "u c #2A2AA5A52A2A", "i c #2C2CA3A32C2C", "p c #2F2FA4A42F2F", "a c #2F2FA7A72F2F", "s c #2E2EA8A82E2E", "d c #2F2FA8A82F2F", "f c #3232A5A53232", "g c #3333A6A63232", "h c #3535A8A83535", "j c #3434ABAB3434", "k c #3535AAAA3535", "l c #3636A8A83636", "z c #3939A9A93939", "x c #3B3BAEAE3A3A", "c c #3D3DACAC3D3D", "v c #4141A3A33434", "b c #4747A6A63A3A", "n c #4242AEAE4242", "m c #4B4BA8A84040", "M c #4646B0B04646", "N c #4B4BB3B34B4B", "B c #5B5BAEAE5050", "V c #8D8D72727373", "C c #EDED00000000", "Z c #EFEF00000000", "A c #F1F100000000", "S c #F3F300000000", "D c #F5F500000000", "F c #F7F700000000", "G c #F9F900000000", "H c #FBFB00000000", "J c #FDFD00000000", "K c red", "L c #F9F93A3A3A3A", "P c #FAFA3F3F3F3F", "I c #D4D44A4A4949", "U c #DCDC54545454", "Y c #FAFA44444444", "T c #FBFB45454545", "R c #FBFB49494949", "E c #FBFB4A4A4B4B", "W c #FCFC4F4F5050", "Q c #F9F954545555", "! c #FDFD54545454", "~ c #F9F958585858", "^ c #FAFA5D5D5D5D", "/ c #FEFE59595959", "( c #FDFD5C5C5C5C", ") c #FEFE5C5C5C5C", "_ c #FEFE5F5F5F5F", "` c #F6F66F6F6F6F", "' c #FBFB61616262", "] c #FCFC66666666", "[ c #FCFC6A6A6A6A", "{ c #F5F576767676", "} c #FEFE77777777", "| c #FEFE79797979", " . c #FFFF7B7B7A7A", ".. c #FFFF7B7B7B7B", "X. c #8787C8C81A1A", "o. c #8B8BCACA1F1F", "O. c #8E8ECBCB2525", "+. c #9090CDCD2B2B", "@. c #9494CFCF3030", "#. c #9898CFCF3B3B", "$. c #9797D1D13636", "%. c #9A9AD3D33B3B", "&. c #9D9DD8D84040", "*. c #A7A7D0D04646", "=. c #D7D7A1A10000", "-. c #DBDBA5A50000", ";. c #DDDDA9A90000", ":. c #DFDFADAD0000", ">. c #E1E1B1B10000", ",. c #E5E5B5B50000", "<. c #E7E7B7B70000", "1. c #E9E9BBBB0000", "2. c #EBEBBFBF0000", "3. c #EDEDC1C10000", "4. c #EFEFC5C50000", "5. c #F1F1C7C70000", "6. c #F3F3C9C90000", "7. c #F3F3CBCB0000", "8. c #F4F4F4F42020", "9. c #F5F5F5F52525", "0. c #F5F5F5F52626", "q. c #F6F6F6F62B2B", "w. c #F6F6F6F62C2C", "e. c #F7F7F7F73030", "r. c #F7F7F7F73131", "t. c #F5F5F5F53F3F", "y. c #F8F8F8F83636", "u. c #F8F8F8F83737", "i. c #F9F9F9F93C3C", "p. c #F9F9F9F93D3D", "a. c #F6F6F6F64444", "s. c #F7F7F7F74949", "d. c #F7F7F7F74E4E", "f. c #FCFCF1F14B4B", "g. c #FAFAFAFA4141", "h. c #FAFAFAFA4242", "j. c #FBFBFBFB4646", "k. c #FBFBFBFB4747", "l. c #FCFCFCFC4B4B", "z. c #FCFCFCFC4C4C", "x. c #FDFDF1F15151", "c. c #FDFDF2F25454", "v. c #F8F8F8F85353", "b. c #F9F9F9F95757", "n. c #FDFDFDFD5151", "m. c #FAFAFAFA5C5C", "M. c #FBFBFBFB6060", "N. c #FCFCFCFC6565", "B. c #FCFCFCFC6969", "V. c #FDFDFDFD6D6D", "C. c #FEFEF5F57474", "Z. c #FDFDFDFD7171", "A. c None", /* pixels */ "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "K K K K K 6.6.6.4.4.3.3.1.,.,.>.", "K ......} C.Z.V.B.N.m.m.b.v.d.:.", "K ..( ( / x.n.z.j.j.p.y.r.w.s.;.", "K ..( ( ! x.z.k.h.p.y.r.q.0.a.-.", "K { , U E f.k.h.p.y.r.q.0.8.t.=.", "K V ; > E *.%.%.$.@.+.O.o.X.#.2 ", "K ` > I R m x j d u r q 9 5 l O ", "G [ R T P b j p u t q 9 5 3 g @ ", "G ] T P L v a u t q 9 4 1 < p X ", "D ' ^ ~ Q B N M n c z l g p p X ", "D S S C C & - - = * & @ O O X $ ", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A." }; springlobby-0.169/src/images/flags/GY.xpm0000600000176000000410000000631012105760300021614 0ustar buildbotwww-data00000000000000/* XPM */ static const char * GY_xpm[] = { "16 16 165 2", " c None", ". c #39391D", "+ c #39A747", "@ c #15AB1B", "# c #008900", "$ c #007F00", "% c #007D00", "& c #007900", "* c #007500", "= c #007100", "- c #006D00", "; c #006700", "> c #006300", ", c #005D00", "' c #005700", ") c #D30000", "! c #C19192", "~ c #CDD5B3", "{ c #EDF9DD", "] c #DAF1D8", "^ c #8ACF91", "/ c #70C475", "( c #6DC06D", "_ c #69C069", ": c #65BF65", "< c #61BE60", "[ c #5CBB5C", "} c #58B957", "| c #53B753", "1 c #4EB44E", "2 c #004B00", "3 c #FF0000", "4 c #FC7B7A", "5 c #C1605F", "6 c #B0A163", "7 c #F1F67D", "8 c #FCFDCD", "9 c #E6F3D4", "0 c #CAE8CA", "a c #5DBB68", "b c #42AE46", "c c #3DA93D", "d c #37AA37", "e c #31A831", "f c #2CA62C", "g c #49B249", "h c #004500", "i c #FE7979", "j c #FE5C5C", "k c #DB5959", "l c #A27554", "m c #CAD051", "n c #FCFC56", "o c #FBFB75", "p c #F5F8C9", "q c #DCEDCA", "r c #82C881", "s c #47B152", "t c #2BA32F", "u c #269E26", "v c #44AE44", "w c #004100", "x c #FD0000", "y c #FE7676", "z c #FE5858", "A c #FD5454", "B c #F44F50", "C c #B24F4B", "D c #777046", "E c #E9EA41", "F c #F9F93C", "G c #F8F845", "H c #F7F7AF", "I c #F0F3C0", "J c #D3E7C1", "K c #71C069", "L c #55B455", "M c #004300", "N c #FE7273", "O c #FD5353", "P c #FC4F4F", "Q c #FC4A4B", "R c #FB4646", "S c #744040", "T c #83833B", "U c #F4F636", "V c #F7F730", "W c #F6F62B", "X c #F5F525", "Y c #F4F43C", "Z c #F3F3D9", "` c #E8EFE4", " . c #007700", ".. c #FD6F6F", "+. c #FB4A49", "@. c #F64545", "#. c #794040", "$. c #9E8B3A", "%. c #E2E335", "&. c #F7F72F", "*. c #F6F635", "=. c #F5F5A5", "-. c #EFF2B8", ";. c #D5E7BC", ">. c #73BF68", ",. c #53B352", "'. c #003B00", "). c #FB0000", "!. c #FC6A6A", "~. c #FB4949", "{. c #D94545", "]. c #6B4E3F", "^. c #BAC03A", "/. c #F8F83C", "(. c #F7F75D", "_. c #F2F5BE", ":. c #D8EAC1", "<. c #7AC377", "[. c #39A845", "}. c #14981C", "|. c #109210", "1. c #33A432", "2. c #002F00", "3. c #F90000", "4. c #FB6666", "5. c #BA4444", "6. c #6D6241", "7. c #E6EC5D", "8. c #F8F8BE", "9. c #E2EEC8", "0. c #C1E1BE", "a. c #44AE50", "b. c #1E9D25", "c. c #189619", "d. c #139613", "e. c #0F960E", "f. c #0B950B", "g. c #2FA42F", "h. c #002D00", "i. c #CD0000", "j. c #B57779", "k. c #8D907D", "l. c #E8F4D2", "m. c #D1EACC", "n. c #71C178", "o. c #4CB255", "p. c #46AC46", "q. c #42AC42", "r. c #3DAB3D", "s. c #39A939", "t. c #35A835", "u. c #32A532", "v. c #2CA22C", "w. c #002700", "x. c #150900", "y. c #000100", "z. c #009300", "A. c #006100", "B. c #004D00", "C. c #004700", "D. c #003D00", "E. c #003900", "F. c #003300", "G. c #002900", "H. c #003500", " ", " ", ". + @ # $ % % & * = - ; > , ' ' ", ") ! ~ { ] ^ / ( _ : < [ } | 1 2 ", "3 4 5 6 7 8 9 0 a b c d e f g h ", "3 i j k l m n o p q r s t u v w ", "x y z A B C D E F G H I J K L M ", "x N O P Q R S T U V W X Y Z ` .", "x ..P +.@.#.$.%.&.*.=.-.;.>.,.'.", ").!.~.{.].^./.(._.:.<.[.}.|.1.2.", "3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.", "i.j.k.l.m.n.o.p.q.r.s.t.u.g.v.w.", "x.y.z.A.B.2 2 C.w D.E.F.2.h.G.H.", " ", " ", " "}; springlobby-0.169/src/images/flags/HK.xpm0000600000176000000410000000714712105760300021610 0ustar buildbotwww-data00000000000000/* XPM */ static const char *HK_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 137 2", " c black", ". c #BBBB00000000", "X c #BDBD00000000", "o c #BFBF00000000", "O c #C1C100000000", "+ c #C3C300000000", "@ c #C7C700000000", "# c #C9C900000000", "$ c #CBCB00000000", "% c #CDCD00000000", "& c #CFCF00000000", "* c #D1D100000000", "= c #D5D500000000", "- c #D7D700000000", "; c #D9D900000000", ": c #DBDB00000000", "> c #DFDF00000000", ", c #DFDF0B0B0B0B", "< c #E1E100000000", "1 c #E3E300000000", "2 c #E5E500000000", "3 c #E7E700000000", "4 c #E1E10F0F0E0E", "5 c #E9E900000000", "6 c #EBEB00000000", "7 c #EDED00000000", "8 c #E1E110101010", "9 c #E1E113131313", "0 c #E2E214141414", "q c #E3E319191919", "w c #E2E21B1B1B1B", "e c #E4E41A1A1A1A", "r c #E4E41F1F1F1F", "t c #E5E520202020", "y c #E5E524242424", "u c #E6E625252525", "i c #E6E626262626", "p c #E2E22C2C2C2C", "a c #E3E32F2F2F2F", "s c #E7E72B2B2B2B", "d c #E8E82C2C2C2C", "f c #E9E92C2C2C2C", "g c #EAEA2E2E2E2E", "h c #E4E432323232", "j c #E6E635353535", "k c #E6E636363636", "l c #E6E639393939", "z c #E7E73B3B3B3B", "x c #E7E73D3D3D3D", "c c #E8E831313131", "v c #E9E931313131", "b c #EBEB31313131", "n c #EAEA37373737", "m c #EBEB38383838", "M c #EBEB3A3A3A3A", "N c #E8E83F3F3F3F", "B c #EBEB3C3C3D3D", "V c #ECEC38383838", "C c #EEEE38383838", "Z c #ECEC3E3E3D3D", "A c #ECEC3F3F3F3F", "S c #E8E842424242", "D c #E9E944444444", "F c #E9E946464646", "G c #ECEC40404040", "H c #EDED42424242", "J c #EEEE44444444", "K c #EEEE45454545", "L c #EAEA49494949", "P c #EBEB4B4B4B4B", "I c #EFEF49494949", "U c #EFEF4A4A4949", "Y c #EFEF4A4A4C4C", "T c #ECEC4E4E4E4E", "R c #ECEC50505050", "E c #EDED53535353", "W c #EDED54545555", "Q c #EEEE57575757", "! c #EEEE58585858", "~ c #EFEF5C5C5C5C", "^ c #EFEF5D5D5D5D", "/ c #F0F04F4F4F4F", "( c #F2F24F4F4F4F", ") c #F0F051515151", "_ c #F0F053535353", "` c #F3F350505050", "' c #F3F353535353", "] c #F1F154545454", "[ c #F1F156565656", "{ c #F2F254545454", "} c #F2F255555555", "| c #F3F356565656", " . c #F5F555555555", ".. c #F1F158585858", "X. c #F1F159595959", "o. c #F2F25C5C5C5C", "O. c #F3F35F5F5F5F", "+. c #F0F060606060", "@. c #F0F061616262", "#. c #F1F165656565", "$. c #F2F266666666", "%. c #F2F26A6A6A6A", "&. c #F2F26D6D6D6D", "*. c #F2F26F6F6F6F", "=. c #F3F370707171", "-. c #F3F372727373", ";. c #F3F374747474", ":. c #F4F476767676", ">. c #F4F477777777", ",. c #F5F579797979", "<. c #F5F57B7B7A7A", "1. c #F5F57B7B7B7B", "2. c #F6F67E7E7E7E", "3. c #F6F68F8F8F8F", "4. c #FCFC8B8B8C8C", "5. c #FBFB96969696", "6. c #F9F99E9E9F9F", "7. c #F8F8A7A7A8A8", "8. c #F9F9AAAAAAAA", "9. c #FBFBAAAAAAAA", "0. c #FAFABDBDBDBD", "q. c #F7F7C3C3C3C3", "w. c #F7F7CACACBCB", "e. c #F7F7CECECECE", "r. c #F7F7CECECFCF", "t. c #FBFBC0C0C0C0", "y. c #F9F9C5C5C6C6", "u. c #FAFACDCDCECE", "i. c #F6F6D8D8D8D8", "p. c #F8F8D0D0D1D1", "a. c #FCFCD1D1D1D1", "s. c #F8F8D8D8D8D8", "d. c #F5F5E1E1E1E1", "f. c #F8F8E7E7E7E7", "g. c #FAFAECECECEC", "h. c #FBFBEEEEEEEE", "j. c None", /* pixels */ "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "7 6 6 6 6 7 1 1 1 1 > : : - - - ", "6 1.1.1.:.:.=.&.%.#.+.~ Q E T & ", "6 1.O.~ ..' ' 4.5.H B n v d L & ", "6 ,.~ ..] ] ] h.0. .Z v s i D $ ", "6 :...] ] a.t.a.y.f.r.m i t x $ ", "6 -.' ( / 7.g.6.7.q.2.g r e M @ ", "1 =.T I J H 7.p.r.i.s r q 0 k + ", "1 %.I K Z ( i.w.3.d.V w 9 9 h + ", "1 $.K G m V ' v i ' w 9 4 , a X ", "1 @.~ ! Q T L F S x l k h a p . ", "1 : : - - * & & $ @ + + + X X + ", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j." }; springlobby-0.169/src/images/flags/HM.xpm0000600000176000000410000000635012105760300021605 0ustar buildbotwww-data00000000000000/* XPM */ static const char * HM_xpm[] = { "16 16 167 2", " c None", ". c #C77783", "+ c #877FA7", "@ c #003795", "# c #8D2743", "$ c #912541", "% c #002387", "& c #753D69", "* c #B77187", "= c #000B73", "- c #000063", "; c #00005F", "> c #00005B", ", c #49639F", "' c #000051", ") c #00003F", "! c #000039", "~ c #4B4D8D", "{ c #EAC6C9", "] c #E5DDE6", "^ c #DDACB3", "/ c #DCA4AA", "( c #DDC3CC", "_ c #EDD8DC", ": c #A9B5D4", "< c #7589BA", "[ c #7285B8", "} c #697FB3", "| c #C4CCE0", "1 c #C8D0E1", "2 c #A6B3D0", "3 c #5D74AC", "4 c #00003B", "5 c #CD0909", "6 c #E68E8F", "7 c #E97A79", "8 c #E46C6B", "9 c #E26564", "0 c #E7716F", "a c #E06F70", "b c #D6666A", "c c #5F6EA7", "d c #4F6AA8", "e c #4962A2", "f c #667BB1", "g c #ACB6D2", "h c #355197", "i c #556EA8", "j c #000037", "k c #8F3555", "l c #E8B9BE", "m c #F1A4A2", "n c #E17F80", "o c #E28284", "p c #F1A7A5", "q c #DB8C91", "r c #B38298", "s c #576AA6", "t c #9DABCC", "u c #3E5A9C", "v c #AEB8D3", "w c #6D81B3", "x c #00002D", "y c #7F89B7", "z c #E8CCD1", "A c #A1A2C2", "B c #C88B97", "C c #CA8794", "D c #9FB9DB", "E c #DEB8BE", "F c #A490AC", "G c #9AA8CB", "H c #BAC2D9", "I c #BAC4DA", "J c #355297", "K c #8D9BC1", "L c #B3BCD4", "M c #B2BBD4", "N c #000025", "O c #6B4575", "P c #9495BB", "Q c #5A7AB6", "R c #8C789E", "S c #8A749B", "T c #4C6CAC", "U c #7086B8", "V c #9A89A9", "W c #475E9E", "X c #A5B2CF", "Y c #5A72A9", "Z c #304D94", "` c #4A63A1", " . c #8F9EC2", ".. c #48619F", "+. c #778EBD", "@. c #5D74AD", "#. c #5271AE", "$. c #4C6CAB", "%. c #5068A5", "&. c #4862A2", "*. c #405DA0", "=. c #405C9E", "-. c #385499", ";. c #325095", ">. c #304D93", ",. c #94A3C5", "'. c #314E94", "). c #455F9E", "!. c #00001F", "~. c #778ABB", "{. c #5870AB", "]. c #A4B0D0", "^. c #C9D0E2", "/. c #4A63A2", "(. c #445FA0", "_. c #405B9D", ":. c #3B569A", "<. c #365297", "[. c #314D94", "}. c #29468F", "|. c #203F8B", "1. c #22408A", "2. c #435C9B", "3. c #00001B", "4. c #000059", "5. c #7186B8", "6. c #576FAA", "7. c #DBE0EB", "8. c #E7E9F0", "9. c #9AA9CA", "0. c #3D599B", "a. c #3A5699", "b. c #355196", "c. c #28478F", "d. c #445E9D", "e. c #97A4C5", "f. c #1B3B87", "g. c #40599A", "h. c #000017", "i. c #000053", "j. c #6F84B6", "k. c #697EB3", "l. c #94A4C8", "m. c #C3CADD", "n. c #5B72AA", "o. c #5A71A9", "p. c #536AA6", "q. c #5069A4", "r. c #4C65A3", "s. c #435D9D", "t. c #B6BFD4", "u. c #E0E2EA", "v. c #909EC2", "w. c #3C5798", "x. c #00000F", "y. c #00004D", "z. c #000049", "A. c #000041", "B. c #000035", "C. c #00002F", "D. c #000029", "E. c #000019", "F. c #000013", "G. c #00000D", "H. c #254183", "I. c #000005", "J. c #000003", " ", " ", ". + @ # $ % & * = - ; > , ' ) ! ", "~ { ] ^ / ( _ : < [ } | 1 2 3 4 ", "5 6 7 8 9 0 a b c d e f g h i j ", "k l m n o p q r s t e u h v w x ", "y z A B C D E F G H I J K L M N ", "O P Q R S T U V W X Y Z ` ...N ", "- +.@.#.$.%.&.*.=.-.;.>.,.'.).!.", "; ~.{.].^./.(._.:.<.[.}.|.1.2.3.", "4.5.6.7.8.9.0.a.b.Z c.d.e.f.g.h.", "i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.", "y.z.A.4 B.C.D.N !.E.F.G.H.I.J.J.", " ", " ", " "}; springlobby-0.169/src/images/flags/HN.xpm0000600000176000000410000000765412105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char *HN_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 154 2", " c black", ". c #000000004B4B", "X c #000000004D4D", "o c #000000005151", "O c #000000005353", "+ c #000000005555", "@ c #000000005757", "# c #000000005959", "$ c #000000005F5F", "% c #000000006363", "& c #000000006767", "* c #000000006D6D", "= c #000000006F6F", "- c #000000007171", "; c #000000007575", ": c #000000007B7B", "> c #000000007F7F", ", c #000000008383", "< c #000000008787", "1 c #000000008989", "2 c #000000008B8B", "3 c #000000008D8D", "4 c #000000008F8F", "5 c #000000009393", "6 c #000000009797", "7 c #000003039999", "8 c #000007079B9B", "9 c #000007079D9D", "0 c #00000D0D9F9F", "q c #00001111A1A1", "w c #00001F1FA5A5", "e c #0B0B3232B1B1", "r c #0F0F3636B2B2", "t c #13133939B4B4", "y c #18183E3EB8B8", "u c #1E1E4242B9B9", "i c #3B3B51519B9B", "p c #23234747BBBB", "a c #29294B4BBCBC", "s c #2C2C4E4EBFBF", "d c #2F2F5050BCBC", "f c #2E2E5050BFBF", "g c #36365555BEBE", "h c #37375757BFBF", "j c #31315454C1C1", "k c #34345656C2C2", "l c #37375858C4C4", "z c #3B3B5B5BC0C0", "x c #3A3A5A5AC3C3", "c c #3F3F5E5EC2C2", "v c #3D3D5E5EC6C6", "b c #3F3F5E5EC6C6", "n c #45455B5BA5A5", "m c #42426161C3C3", "M c #46466464C4C4", "N c #42426262C8C8", "B c #44446363C8C8", "V c #47476666CACA", "C c #4A4A6767C6C6", "Z c #49496767C8C8", "A c #4F4F6B6BC8C8", "S c #4C4C6A6ACCCC", "D c #53536F6FCACA", "F c #51516E6ECDCD", "G c #55557272CFCF", "H c #57577373CCCC", "J c #58587373CCCC", "K c #5B5B7676CDCD", "L c #5C5C7777CDCD", "P c #59597575D1D1", "I c #5C5C7878D1D1", "U c #5F5F7B7BD3D3", "Y c #60607A7ACFCF", "T c #60607B7BCFCF", "R c #64647E7ED1D1", "E c #65657F7FD1D1", "W c #66667F7FD3D3", "Q c #68688181D3D3", "! c #69698383D3D3", "~ c #6C6C8484D5D5", "^ c #70708888D6D6", "/ c #74748B8BD7D7", "( c #77778F8FD8D8", ") c #7A7A9191DADA", "_ c #7B7B9292DADA", "` c #7D7D9494DADA", "' c #7F7F9595DCDC", "] c #83839393C9C9", "[ c #87879797CDCD", "{ c #81819595D6D6", "} c #81819797DCDC", "| c #84849898D9D9", " . c #87879B9BD9D9", ".. c #9797A8A8DFDF", "X. c #A9A9B5B5DDDD", "o. c #ABABB7B7DEDE", "O. c #A2A2B0B0E1E1", "+. c #A6A6B5B5E2E2", "@. c #ADADB9B9E0E0", "#. c #AEAEBABAE0E0", "$. c #AEAEBBBBE2E2", "%. c #B2B2BDBDE2E2", "&. c #B0B0BDBDE4E4", "*. c #B2B2BFBFE5E5", "=. c #B4B4BFBFE1E1", "-. c #B5B5BFBFE7E7", ";. c #B4B4C0C0E3E3", ":. c #B6B6C2C2E5E5", ">. c #B9B9C4C4E6E6", ",. c #B9B9C4C4E7E7", "<. c #B8B8C4C4E8E8", "1. c #BBBBC6C6E9E9", "2. c #BDBDC8C8E9E9", "3. c #BEBEC8C8EAEA", "4. c #BFBFCACAEBEB", "5. c #C1C1C1C1C1C1", "6. c #C5C5C5C5C5C5", "7. c gray78", "8. c #C0C0CACAEAEA", "9. c #C1C1CACAECEC", "0. c #C2C2CCCCECEC", "q. c #C2C2CDCDEDED", "w. c #C5C5CFCFEEEE", "e. c #C6C6D0D0EFEF", "r. c #CDCDD6D6F0F0", "t. c #D0D0D8D8F2F2", "y. c gray90", "u. c #E7E7E7E7E7E7", "i. c #E3E3E5E5F1F1", "p. c #E8E8EBEBF6F6", "a. c #EBEBECECF1F1", "s. c #EAEAEDEDF3F3", "d. c gray95", "f. c #F3F3F3F3F3F3", "g. c #F3F3F3F3F4F4", "h. c #F4F4F4F4F4F4", "j. c #F4F4F5F5F5F5", "k. c gray96", "l. c #F6F6F6F6F6F6", "z. c gray97", "x. c #F3F3F4F4F9F9", "c. c #F3F3F4F4FBFB", "v. c #F8F8F8F8F8F8", "b. c #F8F8F9F9F9F9", "n. c #F9F9F9F9F9F9", "m. c #F9F9F9F9FAFA", "M. c gray98", "N. c #FAFAFAFAFBFB", "B. c #FBFBFBFBFBFB", "V. c #FBFBFCFCFBFB", "C. c gray99", "Z. c #FDFDFDFDFDFD", "A. c #FEFEFEFEFEFE", "S. c None", /* pixels */ "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "w q q q 0 8 7 6 5 4 2 < , > : : ", "0 } ' ' ` _ _ / / ~ Q E Y K H = ", "9 _ R P P G S S V N v l j s Z & ", "[ t.e.w.q.4.4.3.<.<.-.*.$.$.>.n ", "u.A.A.A.c...B.B.v.v. .s.k.k.k.7.", "u.A.A.A.C.p.v.+.O.z.i.k.f.f.k.7.", "u.A.B.B.c.| v.v.z.z.{ a.f.d.d.5.", "] r.q.8.2.>.>.:.*.%.$.o.X.X.=.i ", "2 E B v x k d a p u y t r e d . ", "2 ! E Y L K D A C M m b z h g . ", ": , > : ; - = & % $ # O O O X O ", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S." }; springlobby-0.169/src/images/flags/HR.xpm0000600000176000000410000000665712105760300021624 0ustar buildbotwww-data00000000000000/* XPM */ static const char *HR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 131 2", " c black", ". c #000000008F8F", "X c #000000009191", "o c #000000009393", "O c #000003039595", "+ c #000009099797", "@ c #00000D0D9B9B", "# c #000013139F9F", "$ c #00001919A3A3", "% c #00001F1FA5A5", "& c #00002727A9A9", "* c #00002D2DADAD", "= c #00003333AFAF", "- c #00003939B3B3", "; c #00004141B7B7", ": c #00004545B9B9", "> c #00004B4BBDBD", ", c #00005151BFBF", "< c #00005757C3C3", "1 c #42427474A9A9", "2 c #36368282CBCB", "3 c #3A3A8585CCCC", "4 c #3B3B8585CCCC", "5 c #3E3E8686CDCD", "6 c #3F3F8888CDCD", "7 c #51518080B1B1", "8 c #43438A8ACFCF", "9 c #47478D8DD1D1", "0 c #48488D8DD1D1", "q c #4C4C9090D3D3", "w c #51519292D1D1", "e c #51519393D5D5", "r c #54549494D2D2", "t c #55559494D2D2", "y c #56569595D3D3", "u c #54549696D6D6", "i c #58589696D3D3", "p c #59599A9AD7D7", "a c #5A5A9898D4D4", "s c #5D5D9999D5D5", "d c #5E5E9D9DD9D9", "f c #60609C9CD7D7", "g c #65659E9ED8D8", "h c #6262A0A0DBDB", "j c #6363A0A0DBDB", "k c #6767A3A3DCDC", "l c #6767A3A3DDDD", "z c #6868A1A1DADA", "x c #6A6AA4A4DEDE", "c c #6C6CA4A4DBDB", "v c #6C6CA6A6DEDE", "b c #6F6FA7A7DDDD", "n c #7474A9A9DDDD", "m c #7777ACACDFDF", "M c #7272A9A9E0E0", "N c #7B7BAFAFE1E1", "B c #7F7FB2B2E2E2", "V c #6666C4C4DCDC", "C c #6E6EC8C8DFDF", "Z c #E7E700000000", "A c #E9E900000000", "S c #EBEB00000000", "D c #EDED00000000", "F c #EFEF00000000", "G c #F1F100000000", "H c #F3F300000000", "J c #F5F500000000", "K c #F7F700000000", "L c #F9F900000000", "P c #FBFB00000000", "I c #FDFD00000000", "U c red", "Y c #F5F526262626", "T c #F6F62A2A2A2A", "R c #F6F62B2B2B2B", "E c #F6F62C2C2C2C", "W c #F7F72F2F2F2F", "Q c #F7F731313131", "! c #F4F437373636", "~ c #F8F835353535", "^ c #F8F836363636", "/ c #F8F837373737", "( c #F9F93C3C3D3D", ") c #F6F644444444", "_ c #F7F749494949", "` c #FAFA40404040", "' c #FAFA41414141", "] c #FAFA41414242", "[ c #FCFC4B4B4B4B", "{ c #F7F757575757", "} c #F8F851515151", "| c #FDFD54545454", " . c #F8F85C5C5C5C", ".. c #FEFE59595959", "X. c #FEFE5C5C5C5C", "o. c #FEFE5F5F5F5F", "O. c #F9F960606060", "+. c #FAFA65656565", "@. c #FBFB69696969", "#. c #FBFB6E6E6E6E", "$. c #FAFA73737474", "%. c #FBFB76767676", "&. c #FDFD79797A7A", "*. c #FEFE79797979", "=. c #FEFE7B7B7B7B", "-. c #FFFF7B7B7A7A", ";. c #FFFF7B7B7B7B", ":. c #8383B4B4E3E3", ">. c #8787B6B6E5E5", ",. c #F7F7C8C8C8C8", "<. c #F9F9CCCCCCCC", "1. c #FBFBD0D0D0D0", "2. c gray89", "3. c gray90", "4. c #E7E7E7E7E7E7", "5. c #EFEFEFEFEFEF", "6. c #F0F0F1F1F1F1", "7. c gray95", "8. c #F3F3F3F3F3F3", "9. c #F4F4F4F4F4F4", "0. c #F4F4F5F5F5F5", "q. c gray96", "w. c #F6F6F6F6F6F6", "e. c gray97", "r. c #FBFBFBFBFBFB", "t. c #FBFBFCFCFBFB", "y. c gray99", "u. c #FDFDFCFCFDFD", "i. c #FDFDFDFDFDFD", "p. c #FEFEFEFEFEFE", "a. c None", /* pixels */ "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "U U U U P U U U P P K K H H D D ", "U ;.;.;.;.;.;.%.$.#.@.+.O. .{ S ", "U ;.X.X.| | M C x V ( / Q E _ S ", "U ;.X.X.| } [ 1.' <.! Q T Y ) Z ", "i.i.i.i.i.e.1.' <./ 8.0.0.0.0.4.", "i.i.i.i.i.w.' <./ ,.8.8.8.8.0.4.", "i.i.t.i.r.0.<./ ,.T 5.8.8.8.8.2.", "< >.x l g d 7 E T 1 0 8 6 3 y o ", ", :.l h d p u e 0 0 8 8 3 2 y o ", "> B B m n b c z g f s a y y w . ", ": ; - = * & % $ # @ + O o . . . ", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a." }; springlobby-0.169/src/images/flags/HT.xpm0000600000176000000410000000463012105760300021613 0ustar buildbotwww-data00000000000000/* XPM */ static const char * HT_xpm[] = { "16 16 114 2", " c None", ". c #0527C7", "+ c #0327C7", "@ c #001FC5", "# c #0019C3", "$ c #0013C1", "% c #0007BB", "& c #0001B9", "* c #0000B5", "= c #0000B1", "- c #0000AF", "; c #0000AB", "> c #95A4E8", ", c #94A3E8", "' c #93A1E7", ") c #919FE7", "! c #8F9EE6", "~ c #8C9BE5", "{ c #8A99E3", "] c #8696E2", "^ c #8393E1", "/ c #7B8CDE", "( c #7889DD", "_ c #7687DF", ": c #6F82DA", "< c #0000A3", "[ c #7E8FE2", "} c #7B8DE2", "| c #798AE0", "1 c #7286DF", "2 c #6F83DE", "3 c #6B7DDB", "4 c #667ADA", "5 c #677AD7", "6 c #5D71D6", "7 c #586DD5", "8 c #5469D3", "9 c #6B7ED8", "0 c #00009F", "a c #7689E0", "b c #6075D5", "c c #586DD4", "d c #4F65D1", "e c #000099", "f c #6276D8", "g c #5E74D8", "h c #546CD4", "i c #5068D3", "j c #4B63D1", "k c #465FCF", "l c #0B15AF", "m c #969ADC", "n c #7B81D3", "o c #787DD1", "p c #7379CF", "q c #6F76CD", "r c #6A70C8", "s c #676DC9", "t c #6369C7", "u c #565CC0", "v c #5258BE", "w c #000079", "x c #FD0000", "y c #FD7B6F", "z c #FB5A49", "A c #FB5445", "B c #FA5040", "C c #F94B3A", "D c #F84535", "E c #F63B2A", "F c #F53724", "G c #F32D19", "H c #F22814", "I c #F44636", "J c #E70000", "K c #E90000", "L c #F5796A", "M c #F25A49", "N c #F15645", "O c #F15544", "P c #F04C3A", "Q c #EE4734", "R c #ED412F", "S c #EC3C29", "T c #EB3723", "U c #E9321E", "V c #E82E19", "W c #E72A14", "X c #E52510", "Y c #E94432", "Z c #CB0000", "` c #F47566", " . c #EE4634", ".. c #EC3C2A", "+. c #E82D19", "@. c #E5240E", "#. c #E5200B", "$. c #E8412F", "%. c #C50000", "&. c #F37062", "*. c #F26C5D", "=. c #F16455", "-. c #EF6050", ";. c #EF5B4B", ">. c #ED5242", ",. c #EC4E3D", "'. c #EB4B39", "). c #E94735", "!. c #E8402F", "~. c #E73E2C", "{. c #E10000", "]. c #D90000", "^. c #D70000", "/. c #CF0000", " ", " ", " ", ". + . . @ @ # $ $ % & * = - ; ; ", "+ > , ' ) ! ~ { ] ^ / / ( _ : < ", "+ , [ } | _ 1 2 3 4 5 6 7 8 9 0 ", "+ ' } a _ 1 2 3 4 b 6 c 8 d 5 e ", "@ ! a a 2 3 4 f g 7 h i j k g e ", "l m ^ n o p q r s t t u v v r w ", "x y z z A B C D D E F F G H I J ", "K L M N O P Q R S T U V W X Y Z ", "J ` N P P .R ..T U +.X @.#.$.%.", "J &.*.=.=.-.;.N >.,.'.).Y !.~.%.", "{.{.{.].].^.^./././.Z Z Z %.%.%.", " ", " "}; springlobby-0.169/src/images/flags/HU.xpm0000600000176000000410000000630012105760300021610 0ustar buildbotwww-data00000000000000/* XPM */ static const char *HU_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 120 2", " c black", ". c #000001010000", "X c #000007070000", "o c #00000D0D0000", "O c #000013130000", "+ c #00001B1B0000", "@ c #000021210000", "# c #000027270000", "$ c #00002F2F0000", "% c #000035350000", "& c #00003B3B0000", "* c #000041410000", "= c #000047470000", "- c #00004F4F0000", "; c #0B0B7B7B0B0B", ": c #0F0F7E7E0E0E", "> c #10107E7E1010", ", c #131381811313", "< c #141481811414", "1 c #181884841919", "2 c #191984841919", "3 c #1E1E87871E1E", "4 c #1F1F87871F1F", "5 c #23238A8A2323", "6 c #24248B8B2424", "7 c #29298D8D2929", "8 c #2A2A8E8E2A2A", "9 c #2C2C8C8C2C2C", "0 c #2F2F8F8F2F2F", "q c #2E2E90902E2E", "w c #2F2F91912F2F", "e c #32328F8F3232", "r c #333390903232", "t c #353593933535", "y c #343494943434", "u c #393995953939", "i c #3A3A97973A3A", "p c #3D3D98983D3D", "a c #3F3F9A9A3F3F", "s c #40409B9B3F3F", "d c #424299994242", "f c #44449E9E4444", "g c #45459E9E4545", "h c #46469D9D4646", "j c #4B4B9F9F4B4B", "k c #4949A1A14949", "l c #5050A2A25050", "z c #5454A4A45555", "x c #5858A8A85858", "c c #5D5DAAAA5D5D", "v c #6161ADAD6262", "b c #6666AFAF6666", "n c #6A6AB3B36A6A", "m c #A3A300000000", "M c #A9A900000000", "N c #ABAB00000000", "B c #AFAF00000000", "V c #B3B300000000", "C c #B7B700000000", "Z c #B9B900000000", "A c #BDBD00000000", "S c #BFBF00000000", "D c #C3C300000000", "F c #C7C700000000", "G c #C9C900000000", "H c #CDCD00000000", "J c #D5D526262626", "K c #D7D72B2B2B2B", "L c #D7D72C2C2C2C", "P c #D9D931313131", "I c #DADA37373636", "U c #DADA37373737", "Y c #DCDC3C3C3C3C", "T c #DCDC3C3C3D3D", "R c #DBDB44444444", "E c #DEDE41414242", "W c #DEDE42424242", "Q c #DFDF47474747", "! c #DCDC49494949", "~ c #DDDD4E4E4E4E", "^ c #DFDF53535353", "/ c #E0E04B4B4B4B", "( c #E1E14C4C4C4C", ") c #E1E151515151", "_ c #E1E157575757", "` c #E3E354545454", "' c #E2E25C5C5C5C", "] c #E4E459595959", "[ c #E4E45C5C5C5C", "{ c #E5E55F5F5F5F", "} c #E3E360606060", "| c #E4E465656565", " . c #E6E669696969", ".. c #E6E66D6D6D6D", "X. c #E8E870707171", "o. c #E8E874747474", "O. c #E8E877777777", "+. c #E9E979797979", "@. c #EAEA7B7B7A7A", "#. c #EAEA7B7B7B7B", "$. c gray89", "%. c gray90", "&. c #E7E7E7E7E7E7", "*. c gray95", "=. c #F3F3F3F3F3F3", "-. c #F4F4F4F4F4F4", ";. c #F4F4F5F5F5F5", ":. c gray96", ">. c #F6F6F6F6F6F6", ",. c gray97", "<. c #F8F8F8F8F8F8", "1. c #F9F9F9F9F9F9", "2. c gray98", "3. c #FBFBFBFBFBFB", "4. c #FBFBFCFCFBFB", "5. c gray99", "6. c #FDFDFCFCFDFD", "7. c #FDFDFDFDFDFD", "8. c #FEFEFEFEFEFE", "9. c None", /* pixels */ "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "H H H H H G G G D D S S Z C V B ", "H #.#.O.O.o.o... .| } ' _ ^ ~ N ", "H #.{ [ [ ` ) / Q W T I P L ! N ", "H #.[ [ ` ( / Q W T I P K J R m ", "7.7.7.7.5.5.7.2.2.2.,.;.;.;.;.&.", "7.7.7.7.2.2.2.2.,.;.,.;.=.=.;.&.", "7.7.4.4.2.2.2.2.,.,.;.;.=.=.=.$.", "- n j g s i y q 8 5 4 2 < > e ", "= b g p i y q 8 5 3 2 < > ; 0 ", "* v c x z l j h d p u t e 0 9 ", "& % % # @ + O o X ", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9." }; springlobby-0.169/src/images/flags/ID.xpm0000600000176000000410000000600212105760300021567 0ustar buildbotwww-data00000000000000/* XPM */ static const char *ID_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 112 2", " c black", ". c #B5B500000000", "X c #BBBB00000000", "o c #BFBF00000000", "O c #C1C100000000", "+ c #C7C700000000", "@ c #C9C900000000", "# c #CBCB00000000", "$ c #CFCF00000000", "% c #CBCB1F1F1313", "& c #D1D100000000", "* c #D3D300000000", "= c #D5D500000000", "- c #D9D900000000", "; c #DBDB00000000", ": c #DDDD00000000", "> c #DFDF00000000", ", c #DFDF03030000", "< c #DFDF11110303", "1 c #DBDB33332727", "2 c #DDDD37372C2C", "3 c #DFDF3D3D3232", "4 c #DFDF44443939", "5 c #E0E042423737", "6 c #E2E247473C3C", "7 c #E0E048483E3E", "8 c #E1E148483E3E", "9 c #E3E34B4B4141", "0 c #E2E24E4E4343", "q c #E2E24E4E4444", "w c #E0E050504646", "e c #E5E550504646", "r c #E3E352524848", "t c #E3E353534949", "y c #E5E557574E4E", "u c #E6E655554C4C", "i c #E2E25E5E5555", "p c #E7E75A5A5050", "a c #E6E65C5C5252", "s c #E6E65C5C5353", "d c #E9E95E5E5555", "f c #E4E462625959", "g c #E6E666665E5E", "h c #E8E860605656", "j c #E8E861615757", "k c #E9E963635A5A", "l c #E9E964645B5B", "z c #E9E964645C5C", "x c #EAEA67675D5D", "c c #E7E76A6A6262", "v c #E9E968686060", "b c #EAEA68686060", "n c #E8E86F6F6666", "m c #EAEA6C6C6464", "M c #EBEB6C6C6464", "N c #EBEB6D6D6565", "B c #E9E973736B6B", "V c #EAEA77776F6F", "C c #ECEC70706868", "Z c #EDED73736B6B", "A c #EDED76766E6E", "S c #ECEC7A7A7373", "D c #EDED7F7F7676", "F c #EDED81817A7A", "G c #EEEE81817A7A", "H c #EEEE84847E7E", "J c #E6E68E8E8888", "K c #EFEF87878080", "L c #E8E891918B8B", "P c #E9E994948E8E", "I c #EAEA97979191", "U c #ECEC9A9A9595", "Y c #E9E99E9E9999", "T c #EDED9E9E9898", "R c #F0F08A8A8383", "E c #F0F08B8B8585", "W c #F0F08C8C8585", "Q c #F1F18E8E8787", "! c #EEEEA0A09B9B", "~ c #EFEFA4A49E9E", "^ c #F0F0A7A7A1A1", "/ c #F1F1A9A9A4A4", "( c #F2F2ABABA7A7", ") c #F3F3AEAEAAAA", "_ c #F6F6BDBDB9B9", "` c #DDDDDDDDDDDD", "' c #DFDFDFDFDFDF", "] c #E1E1E1E1E1E1", "[ c gray89", "{ c gray90", "} c #E7E7E7E7E7E7", "| c #E9E9E9E9E9E9", " . c gray92", ".. c gray93", "X. c #EDEDEFEFEDED", "o. c #EFEFEFEFEFEF", "O. c #F1F1F1F1F1F1", "+. c gray95", "@. c #F2F2F2F2F3F3", "#. c #F3F3F3F3F3F3", "$. c #F4F4F4F4F4F4", "%. c gray96", "&. c #F6F6F6F6F6F6", "*. c gray97", "=. c #F8F8F8F8F8F8", "-. c #F9F9F9F9F9F9", ";. c gray98", ":. c #FBFBFBFBFBFB", ">. c #FBFBFCFCFBFB", ",. c gray99", "<. c #FDFDFDFDFDFD", "1. c None", /* pixels */ "1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.", "1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.", "1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.", "< , , , , , ; ; ; * * * * @ @ + ", ", Q Q E E H H D D S V B n c v o ", ", Q A Z C N v x f s u t q 7 f o ", ", E Z C M b l h s y t q 4 4 i X ", "; D x z d p u e 9 6 4 3 2 1 w . ", "N _ ) ( / ^ ~ ! T U P P L J Y % ", ">.>.>.>.;.;.=.=.=.*.&.&.+.+.&.[ ", ">.>.>.>.;.=.=.*.&.&.+.+.+.+.+.' ", ",.>.;.;.;.=.*.&.&.&.+.+.+.+.+.' ", "*.,.=.=.=.=.*.*.&.&.&.+.+.+.+.` ", "*.#.+.O.o.o. .| { { ] ] ' ' ` ` ", "1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.", "1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1." }; springlobby-0.169/src/images/flags/IE.xpm0000600000176000000410000000702212105760300021573 0ustar buildbotwww-data00000000000000/* XPM */ static const char *IE_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 136 2", " c black", ". c #000053530000", "X c #00005B5B0000", "o c #000063630000", "O c #000067670000", "+ c #00006F6F0000", "@ c #000075750000", "# c #000077770000", "$ c #00007B7B0000", "% c #00007F7F0000", "& c #000083830000", "* c #000085850000", "= c #000087870000", "- c #000089890000", "; c #000091910000", ": c #3A3AAAAA3A3A", "> c #3F3FAEAE3F3F", ", c #4040ADAD3F3F", "< c #4444B1B14444", "1 c #4545B0B04545", "2 c #4545B1B14545", "3 c #4B4BB3B34B4B", "4 c #4949B4B44949", "5 c #4F4FB6B64F4F", "6 c #4F4FB7B74F4F", "7 c #5050B5B55050", "8 c #5454B5B55555", "9 c #5454B7B75454", "0 c #5353B9B95353", "q c #5454B9B95454", "w c #5858B9B95858", "e c #5858BBBB5959", "r c #5959BABA5959", "t c #5858BCBC5858", "y c #5C5CBDBD5C5C", "u c #5D5DBCBC5D5D", "i c #5F5FBFBF5F5F", "p c #6161BEBE6262", "a c #6666C0C06666", "s c #6A6AC3C36A6A", "d c #6F6FC4C46F6F", "f c #7272C6C67373", "g c #7777C7C77777", "h c #7676C8C87676", "j c #7979C8C87979", "k c #7B7BCACA7A7A", "l c #7B7BCACA7B7B", "z c #DDDD00000000", "x c #DFDF00000000", "c c #E1E100000000", "v c #E3E300000000", "b c #E5E500000000", "n c #E7E700000000", "m c #E9E900000000", "M c #EBEB00000000", "N c #EFEF13130000", "B c #EDED1B1B0000", "V c #F1F119190000", "C c #F3F31F1F0000", "Z c #F5F521210000", "A c #F1F167670B0B", "S c #F1F169690E0E", "D c #F2F269691313", "F c #F2F26A6A1010", "G c #F2F26D6D1414", "H c #F2F26E6E1414", "J c #F3F36D6D1919", "K c #F3F36F6F1919", "L c #F3F370701A1A", "P c #F4F472721F1F", "I c #F4F474741F1F", "U c #F4F475752020", "Y c #F5F575752525", "T c #F5F577772525", "R c #F5F57A7A2626", "E c #F2F27B7B2C2C", "W c #F2F27C7C2F2F", "Q c #F2F27D7D2F2F", "! c #F6F679792B2B", "~ c #F6F67B7B2B2B", "^ c #F6F67C7C2C2C", "/ c #F2F27F7F3232", "( c #F3F37F7F3232", ") c #F3F37F7F3535", "_ c #F7F77E7E3131", "` c #F7F781813131", "' c #F4F482823636", "] c #F4F485853B3B", "[ c #F5F589893F3F", "{ c #F8F882823737", "} c #F6F68C8C4444", "| c #F7F78F8F4949", " . c #F7F793934E4E", ".. c #F8F896965353", "X. c #F9F998985757", "o. c #FAFA99995C5C", "O. c #B7B7C7C7B7B7", "+. c #C5C5B5B5A9A9", "@. c gray79", "#. c #CBCBCBCBCBCB", "$. c gray81", "%. c gray82", "&. c #E1E1DFDFDBDB", "*. c gray89", "=. c gray90", "-. c #E5E5E7E7E5E5", ";. c #E7E7E7E7E7E7", ":. c #E9E9F2F2E9E9", ">. c #EAEAF3F3EAEA", ",. c #EBEBF3F3EBEB", "<. c #ECECF4F4ECEC", "1. c #EDEDF5F5EDED", "2. c #EEEEF6F6EEEE", "3. c #EFEFF7F7EFEF", "4. c #F3F3EAEAE2E2", "5. c #F4F4EBEBE4E4", "6. c #F5F5ECECE5E5", "7. c #F4F4ECECE6E6", "8. c #F6F6EEEEE7E7", "9. c #F7F7EFEFE8E8", "0. c #F8F8F0F0EAEA", "q. c #F9F9F1F1EBEB", "w. c #F4F4F4F4F4F4", "e. c gray96", "r. c #F6F6F6F6F6F6", "t. c gray97", "y. c #F0F0F8F8F0F0", "u. c #F8F8F8F8F8F8", "i. c #F9F9F9F9F9F9", "p. c #FBFBFAFAF8F8", "a. c gray98", "s. c #FBFBFBFBFBFB", "d. c gray99", "f. c #FDFDFDFDFDFD", "g. c #FDFDFDFDFEFE", "h. c None", /* pixels */ "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "; - - = & ;.;.;.;.*.&.Z C V N B ", "= l l l g s.d.d.d.d.p.o.X... .M ", "- l i y e y.d.d.p.d.q.{ ` ^ | M ", "= l r r 0 3.d.d.a.i.9._ ~ R } b ", "= g r 0 5 2.d.i.i.u.9.~ T U [ b ", "& f 0 5 3 2.i.i.u.u.9.Y P K ] b ", "% d 5 4 1 2.i.i.r.r.5.P K G ' v ", "$ s 3 < > :.i.e.r.e.5.J G S ( x ", "$ p < > : :.u.e.e.w.5.D S A / x ", "+ p u e 8 <.r.u.e.e.7.) / W E z ", "@ O o X . O.%.$.#.@.+.v v x z z ", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h." }; springlobby-0.169/src/images/flags/IL.xpm0000600000176000000410000000512612105760300021605 0ustar buildbotwww-data00000000000000/* XPM */ static const char *IL_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 94 2", " c black", ". c #00000000BBBB", "X c #00000000CFCF", "o c #00002525DFDF", "O c #07074747E9E9", "+ c #58588484F2F2", "@ c #5A5A8585F2F2", "# c #5D5D8282F6F6", "$ c #5D5D8787F3F3", "% c #62628585F7F7", "& c #60608A8AF3F3", "* c #63638C8CF4F4", "= c #66668F8FF5F5", "- c #67678A8AF8F8", "; c #6B6B8B8BF9F9", ": c #6A6A9191F6F6", "> c #6E6E9494F7F7", ", c #76768E8EF7F7", "< c #70708F8FFAFA", "1 c #71719797F7F7", "2 c #74749494FBFB", "3 c #75759999F7F7", "4 c #75759A9AF8F8", "5 c #79799D9DF8F8", "6 c #79799E9EF9F9", "7 c #7C7C9F9FF9F9", "8 c #7D7DA0A0F9F9", "9 c #7F7FA3A3FAFA", "0 c #BBBBBBBBBBBB", "q c gray74", "w c gray75", "e c #80809393F6F6", "r c #81819494F7F7", "t c #86869F9FF5F5", "y c #83839999FAFA", "u c #88889F9FFAFA", "i c #9B9B9B9BF9F9", "p c #9F9F9F9FF8F8", "a c #8080A4A4FAFA", "s c #8383A5A5FBFB", "d c #8484A6A6FBFB", "f c #8787A8A8FCFC", "g c #8D8DA6A6F7F7", "h c #8A8AA0A0FBFB", "j c #8A8AAAAAFCFC", "k c #8D8DADADFDFD", "l c #9090AFAFFEFE", "z c #9595ABABFAFA", "x c #9292B1B1FEFE", "c c #9595B3B3FEFE", "v c #9696B4B4FEFE", "b c #9999B5B5FFFF", "n c #9C9CB1B1FCFC", "m c #C1C1C1C1C1C1", "M c #C3C3C3C3C3C3", "N c #C5C5C5C5C5C5", "B c gray78", "V c #CBCBCBCBCBCB", "C c #CDCDCDCDCDCD", "Z c gray81", "A c LightGray", "S c #D5D5D5D5D5D5", "D c #D7D7D7D7D7D7", "F c gray86", "G c #DFDFDFDFDFDF", "H c #E1E1E1E1E1E1", "J c gray89", "K c gray90", "L c #E7E7E7E7E7E7", "P c #E9E9E9E9E9E9", "I c #E9E9E9E9F6F6", "U c #E9E9E9E9F8F8", "Y c #ECECECECFBFB", "T c #EFEFEFEFF9F9", "R c #F1F1F1F1F1F1", "E c gray95", "W c #F3F3F3F3F3F3", "Q c #F2F2F2F2F4F4", "! c #F4F4F4F4F4F4", "~ c #F4F4F5F5F5F5", "^ c gray96", "/ c #F6F6F6F6F6F6", "( c gray97", ") c #F8F8F8F8F8F8", "_ c #F9F9F9F9F9F9", "` c gray98", "' c #FBFBFBFBFBFB", "] c #FBFBFCFCFBFB", "[ c gray99", "{ c #FDFDFCFCFDFD", "} c #FDFDFDFDFDFD", "| c #FEFEFEFEFEFE", " . c gray100", ".. c None", /* pixels */ "................................", "................................", "................................", "P P P P P L L K J H G F F D S A ", "O b c c c l l k j d s 8 7 5 3 X ", "P . . . .} } } ' ' ' ' ( / ( C ", "P . . .} } ' u t ' ( / / / / V ", "L . .' } n 2 y i - g / W / / B ", "L . .' .Y < Q U % I ^ ! W ! N ", "J .' ' ' z ; p , # t W W W W m ", "H [ ' ' ' ) ' , , ^ W W W R W w ", "H [ ) ' ' ) / / ( ^ W W R R W w ", "o d a 7 5 4 1 > > * * & $ $ + . ", "F F D S A Z C C B N M m w 0 0 0 ", "................................", "................................" }; springlobby-0.169/src/images/flags/IN.xpm0000600000176000000410000000773712105760300021621 0ustar buildbotwww-data00000000000000/* XPM */ static const char *IN_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 156 2", " c black", ". c #00001F1F0000", "X c #000021210000", "o c #000025250000", "O c #000027270000", "+ c #000029290000", "@ c #00002D2D0000", "# c #000033330000", "$ c #000039390000", "% c #00003D3D0000", "& c #000041410000", "* c #000047470000", "= c #00004D4D0000", "- c #000053530000", "; c #000059590000", ": c #00005D5D0000", "> c #000063630000", ", c #000069690000", "< c #00006F6F0000", "1 c #000073730000", "2 c #383895953939", "3 c #3C3C97973C3C", "4 c #3D3D97973D3D", "5 c #404099994040", "6 c #414199994141", "7 c #45459C9C4545", "8 c #49499F9F4949", "9 c #4D4DA1A14D4D", "0 c #4E4EA2A24E4E", "q c #5353A2A25353", "w c #5252A4A45252", "e c #5555A4A45555", "r c #5656A4A45656", "t c #5656A6A65656", "y c #5757A7A75757", "u c #5858A5A55858", "i c #5959A6A65959", "p c #5B5BA8A85B5B", "a c #5B5BA9A95B5B", "s c #5B5BAAAA5B5B", "d c #5F5FA9A95F5F", "f c #6060ACAC6060", "g c #6262ACAC6262", "h c #6464AFAF6464", "j c #6565AEAE6565", "k c #6565AFAF6464", "l c #6969B0B06969", "z c #6969B1B16969", "x c #6969B2B26969", "c c #6D6DB2B26D6D", "v c #6D6DB4B46D6D", "b c #7171B4B47171", "n c #7575B7B77575", "m c #7979B9B97979", "M c #7D7DBCBC7D7D", "N c #7F7F9292C7C7", "B c #E9E997970000", "V c #EBEB9B9B0000", "C c #EDED9F9F0000", "Z c #EFEFA3A30000", "A c #E7E7B1B10000", "S c #F1F1A5A50000", "D c #F3F3A9A90000", "F c #F5F5ADAD0000", "G c #F7F7B1B10000", "H c #F9F9B3B30000", "J c #FBFBB5B50000", "K c #FDFDB9B90000", "L c #FDFDBBBB0000", "P c #FDFDBDBD0000", "I c #FDFDBFBF0000", "U c #FFFFBFBF0000", "Y c #F6F6CECE2C2C", "T c #F7F7D0D03131", "R c #F8F8D2D23737", "E c #FDFDD5D53535", "W c #F9F9D4D43D3D", "Q c #F7F7D5D54949", "! c #F7F7D7D74E4E", "~ c #FAFAD5D54242", "^ c #FBFBD7D74747", "/ c #FCFCD8D84C4C", "( c #F8F8D8D85353", ") c #F9F9D9D95757", "_ c #FDFDDADA5151", "` c #FDFDDBDB5454", "' c #FAFADBDB5C5C", "] c #FEFEDCDC5959", "[ c #FEFEDEDE5C5C", "{ c #FEFEDFDF5F5F", "} c #F4F4DADA6969", "| c #F6F6DBDB6D6D", " . c #FBFBDDDD6060", ".. c #FCFCDDDD6565", "X. c #FCFCDFDF6969", "o. c #F7F7DDDD7171", "O. c #F5F5DEDE7E7E", "+. c #F8F8DEDE7575", "@. c #FDFDE0E06D6D", "#. c #FDFDE2E27171", "$. c #FEFEE2E27474", "%. c #FEFEE3E37777", "&. c #FEFEE4E47979", "*. c #FFFFE4E47A7A", "=. c #FFFFE4E47B7B", "-. c #83838C8CBDBD", ";. c #8080BEBE8080", ":. c #A1A1AAAAB5B5", ">. c #A4A4ACACB8B8", ",. c #84849595CACA", "<. c #8A8A9E9ECECE", "1. c #9A9AA5A5CFCF", "2. c #9696A8A8D3D3", "3. c #9797A9A9D5D5", "4. c #A1A1B3B3DADA", "5. c #8484C0C08484", "6. c #8888C3C38888", "7. c #BBBBC2C2DEDE", "8. c #BDBDC0C0D9D9", "9. c #D3D3CACA9090", "0. c #D8D8D0D09A9A", "q. c #FCFCE5E58888", "w. c #FCFCE6E68B8B", "e. c #FDFDE7E78E8E", "r. c #FEFEE8E89090", "t. c #FEFEEDEDA4A4", "y. c #C4C4CBCBE4E4", "u. c #C9C9CDCDE2E2", "i. c gray89", "p. c #E3E3E3E3E5E5", "a. c #E3E3E5E5E7E7", "s. c gray95", "d. c #F2F2F2F2F3F3", "f. c #F3F3F3F3F3F3", "g. c #F2F2F3F3F4F4", "h. c #F3F3F3F3F4F4", "j. c #F4F4F4F4F4F4", "k. c #F4F4F4F4F5F5", "l. c gray96", "z. c #F5F5F6F6F6F6", "x. c #F6F6F6F6F6F6", "c. c gray97", "v. c gray98", "b. c #FBFBFBFBFBFB", "n. c #FBFBFBFBFCFC", "m. c #FBFBFCFCFBFB", "M. c #FBFBFCFCFCFC", "N. c #FBFBFCFCFDFD", "B. c #FBFBFDFDFDFD", "V. c gray99", "C. c #FCFCFCFCFDFD", "Z. c #FDFDFDFDFDFD", "A. c #FCFCFDFDFEFE", "S. c #FDFDFDFDFEFE", "D. c #FDFDFEFEFEFE", "F. c None", /* pixels */ "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "U U U U U U K K J H G F D S Z C ", "U =.=.=.%.%.#.X.X... .' ) ( ! V ", "U =.[ [ ` ` ` / ^ ~ W R T Y Q B ", "E t.r.e.e.q.0.:.:.9.+.+.| } O.A ", "B.D.D.B.n.B.4.1.u.3.z.z.k.g.k.a.", "D.D.D.B.D.v.3.8.-.<.c.k.k.f.g.i.", "D.D.m.v.v.v.y.,.N 7.k.k.f.f.k.i.", "1 6.v x k f p y w 9 8 7 6 4 i O ", "< ;.l k f p r w 9 8 7 6 4 2 r X ", ", ;.M m n b c l j g d p r e q . ", "> : ; - = * & % $ # @ + O X . . ", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F." }; springlobby-0.169/src/images/flags/IO.xpm0000600000176000000410000001052312105760300021605 0ustar buildbotwww-data00000000000000/* XPM */ static const char *IO_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 171 2", " c black", ". c #000000003737", "X c #000000003939", "o c #000000003D3D", "O c #000029290F0F", "+ c #000000004141", "@ c #000000004343", "# c #000000004949", "$ c #000000004B4B", "% c #000000004F4F", "& c #000000005353", "* c #000000005757", "= c #000000005959", "- c #000000005B5B", "; c #000000006161", ": c #000000006767", "> c #000000006B6B", ", c #000000006D6D", "< c #000000007171", "1 c #000000007373", "2 c #000000007575", "3 c #000000007F7F", "4 c #000000008181", "5 c #000000008383", "6 c #000000008989", "7 c #000009099191", "8 c #3F3F27278B8B", "9 c #5B5B47479999", "0 c #40404949A7A7", "q c #45454D4DAAAA", "w c #49495151ACAC", "e c #4A4A5252ACAC", "r c #4E4E5656AFAF", "t c #4F4F5757AFAF", "y c #52525959AEAE", "u c #53535A5AB1B1", "i c #53535B5BB2B2", "p c #56565F5FB1B1", "a c #58585F5FB4B4", "s c #59596060B2B2", "d c #58586060B4B4", "f c #59596161B5B5", "g c #5D5D6565B3B3", "h c #5C5C6464B7B7", "j c #5D5D6464B7B7", "k c #5E5E6565B7B7", "l c #5F5F6767B7B7", "z c #63636D6DB1B1", "x c #60606868B8B8", "c c #62626969B9B9", "v c #63636A6ABABA", "b c #65656D6DBBBB", "n c #67676F6FBBBB", "m c #66666D6DBCBC", "M c #67676E6EBCBC", "N c #6A6A7171BDBD", "B c #6E6E7575BFBF", "V c #6C6C9B9B4B4B", "C c #6F6F9C9C5C5C", "Z c #71719A9A6060", "A c #7676A3A35656", "S c #7575A5A55151", "D c #7575A1A15858", "F c #7575A1A15F5F", "G c #7979A8A85555", "H c #7E7EA9A95F5F", "J c #7A7AA5A56363", "K c #838337377171", "L c #A1A129295555", "P c #A7A72B2B5353", "I c #A9A94D4D7373", "U c #AAAA66664646", "Y c #ABAB6D6D4C4C", "T c #B0B073735656", "R c #C7C744444646", "E c #CECE45454242", "W c #CECE5A5A4E4E", "Q c #F5F55F5F5F5F", "! c #8F8F7575ABAB", "~ c #83837E7EBBBB", "^ c #B5B57F7F9F9F", "/ c #D7D77D7D8D8D", "( c #8181AAAA6565", ") c #8585ACAC7070", "_ c #9999BBBB7F7F", "` c #B2B2A5A56464", "' c #EEEECCCC3939", "] c #DDDDC9C94545", "[ c #DDDDCDCD7A7A", "{ c #EFEFCFCF4343", "} c #EBEBD5D54E4E", "| c #8F8F9393BBBB", " . c #8F8F9B9BB4B4", ".. c #92928787BEBE", "X. c #93939797BFBF", "o. c #9494B3B38383", "O. c #9B9BB5B59797", "+. c #A3A38282B1B1", "@. c #81818888C8C8", "#. c #8D8D8A8AC2C2", "$. c #89898E8ECCCC", "%. c #99998F8FC3C3", "&. c #99999D9DC5C5", "*. c #9D9DA2A2CDCD", "=. c #9D9DA2A2D0D0", "-. c #9D9DA2A2D3D3", ";. c #9E9EA2A2D0D0", ":. c #A1A1A3A3CBCB", ">. c #A9A9ABABCFCF", ",. c #A3A3A8A8D4D4", "<. c #A7A7ABABD6D6", "1. c #A7A7ACACD4D4", "2. c #A9A9AEAED3D3", "3. c #AAAAAEAED7D7", "4. c #A6A6B1B1C3C3", "5. c #AFAFB3B3D9D9", "6. c #B8B8ABABCECE", "7. c #B3B3B6B6D8D8", "8. c #B1B1B6B6DDDD", "9. c #B4B4B8B8D8D8", "0. c #B7B7BBBBDADA", "q. c #B4B4B8B8DDDD", "w. c #BBBBBFBFDFDF", "e. c #AAAAC5C59C9C", "r. c #B9B9C1C1D0D0", "t. c #BBBBC0C0DFDF", "y. c #BDBDC0C0DDDD", "u. c #BCBCC0C0E0E0", "i. c #BCBCC0C0E1E1", "p. c #C1C1A0A0BEBE", "a. c #DEDEA7A7B6B6", "s. c #DADAA7A7B8B8", "d. c #FBFB98989696", "f. c #FBFB9F9F9C9C", "g. c #F4F49F9FA1A1", "h. c #E9E9B6B6BEBE", "j. c #F5F5A1A1A0A0", "k. c #FCFCA4A4A1A1", "l. c #FEFEAAAAA7A7", "z. c #F8F8B4B4B4B4", "x. c #F9F9BFBFBFBF", "c. c #C1C1C5C5DADA", "v. c #C2C2C4C4E1E1", "b. c #C3C3C6C6E0E0", "n. c #C2C2C6C6E2E2", "m. c #C3C3C6C6E2E2", "M. c #C4C4C5C5E2E2", "N. c #C7C7C9C9E4E4", "B. c #D3D3D4D4EAEA", "V. c #D4D4D5D5EBEB", "C. c #D7D7D7D7E9E9", "Z. c #D6D6D8D8ECEC", "A. c #DBDBD3D3E5E5", "S. c #DADADBDBEAEA", "D. c #DCDCDDDDEEEE", "F. c #DEDEDFDFEDED", "G. c #DEDEE0E0EEEE", "H. c #E2E2C3C3CCCC", "J. c #E0E0CECEDCDC", "K. c #EDEDD4D4DBDB", "L. c #F1F1CCCCD1D1", "P. c #F2F2D6D6DCDC", "I. c #F5F5D9D9DDDD", "U. c #FDFDD3D3D0D0", "Y. c #EEEEDBDBE2E2", "T. c #F5F5DEDEE2E2", "R. c #E0E0E0E0F1F1", "E. c #F5F5EBEBEDED", "W. c #FEFEE3E3E1E1", "Q. c #F7F7F2F2F7F7", "!. c None", /* pixels */ "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "/ ! 7 L P 4 K 8 4 4 1 , O > : ; ", "9 T.Q.P.h.Y.E.-.i.V.r._ e.O.c.>.", "Q z.l.f.d.k.j.+.M v l J F Z ) * ", "I I.W.x.g.U.L...3.N.H G S D o.:.", "%.K.6.s.a.8.H.~ l f p C Y V z $ ", "^ A.R.J.p.v.G.#.,.v.A 4.U .( &.", "6 $.B N m v l s i r w W { R s + ", "n S.8.w.D.<.w.V.-.w.*.[ E } 0.X.", "3 @.m x h a i r w q 0 ` ' ] y X ", "g B.w.b.G.5.b.S.1.b.2.7.T *.9.X.", "2 1 > : ; - - & % $ + + o X . . ", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!." }; springlobby-0.169/src/images/flags/IQ.xpm0000600000176000000410000000716712105760300021621 0ustar buildbotwww-data00000000000000/* XPM */ static const char *IQ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 142 2", " c black", ". c #0B0B0B0B0B0B", "X c #0F0F0F0F0E0E", "o c #131313131313", "O c #181819191919", "+ c #1E1E1E1E1E1E", "@ c #232323232323", "# c gray16", "$ c #2C2C2C2C2C2C", "% c gray18", "& c #2F2F2F2F2F2F", "* c #323232323232", "= c #343434343434", "- c #353535353535", "; c #393939393939", ": c #3A3A3A3A3A3A", "> c gray24", ", c #3F3F3F3F3F3F", "< c gray26", "1 c #444444444444", "2 c #464646464646", "3 c #4B4B4B4B4B4B", "4 c #505050505050", "5 c #545454545555", "6 c #585858585858", "7 c #5D5D5D5D5D5D", "8 c #616161616262", "9 c gray39", "0 c gray40", "q c #6B6B6A6A6B6B", "w c #6C6C68686C6C", "e c #70706E6E7070", "r c #737372727373", "t c #787876767878", "y c gray48", "u c #7D7D7A7A7D7D", "i c #7F7F7D7D7F7F", "p c #6B6BBFBF6D6D", "a c #E7E700000000", "s c #E9E900000000", "d c #EBEB00000000", "f c #EDED00000000", "g c #EFEF00000000", "h c #F1F100000000", "j c #F3F300000000", "k c #F5F500000000", "l c #F7F700000000", "z c #F9F900000000", "x c #FBFB00000000", "c c #FDFD00000000", "v c red", "b c #F6F62C2C2C2C", "n c #F7F731313131", "m c #F8F837373737", "M c #FFFF35353535", "N c #F9F93C3C3D3D", "B c #F7F749494949", "V c #F7F74E4E4E4E", "C c #FAFA42424242", "Z c #FBFB47474747", "A c #FCFC4C4C4C4C", "S c #F8F853535353", "D c #F9F957575757", "F c #FDFD51515151", "G c #FDFD54545454", "H c #FAFA5C5C5C5C", "J c #FEFE59595959", "K c #FEFE5C5C5C5C", "L c #FEFE5F5F5F5F", "P c #F5F56A6A6A6A", "I c #FBFB60606060", "U c #FCFC65656565", "Y c #FCFC69696969", "T c #FDFD6D6D6D6D", "R c #F6F670707171", "E c #F7F772727373", "W c #F6F67F7F7F7F", "Q c #F8F877777777", "! c #FDFD70707171", "~ c #FEFE74747474", "^ c #FEFE77777777", "/ c #F9F97A7A7A7A", "( c #FAFA7E7E7F7F", ") c #FEFE79797979", "_ c #FFFF7B7B7A7A", "` c #FFFF7B7B7B7B", "' c #848482828484", "] c #888885858888", "[ c #8C8C8B8B8C8C", "{ c #8D8D8A8A8D8D", "} c #A0A0A0A0A0A0", "| c #8989CDCD8B8B", " . c #8D8DCFCF8E8E", ".. c #8F8FCDCD9292", "X. c #8B8BD0D08D8D", "o. c #9595CFCF9696", "O. c #9B9BD1D19D9D", "+. c #9C9CD3D39E9E", "@. c #A8A8DADAA9A9", "#. c #ADADDDDDAEAE", "$. c #B3B3E0E0B4B4", "%. c #B4B4E1E1B7B7", "&. c #BCBCE2E2BDBD", "*. c #BDBDE3E3BDBD", "=. c #BDBDE0E0C0C0", "-. c #BEBEE4E4C4C4", ";. c #FBFB82828484", ":. c #FCFC85858585", ">. c #FDFD88888989", ",. c #FDFD8B8B8B8B", "<. c #FEFE8F8F9191", "1. c #FEFE90909191", "2. c #FEFEA4A4A4A4", "3. c #C1C1E5E5C4C4", "4. c #C3C3E6E6C5C5", "5. c #CACAE7E7CDCD", "6. c #D4D4ECECD6D6", "7. c gray89", "8. c gray90", "9. c #E7E7E7E7E7E7", "0. c #E4E4F3F3E4E4", "q. c #E7E7F6F6E7E7", "w. c #E9E9F4F4E9E9", "e. c #EAEAF5F5EAEA", "r. c #EFEFF4F4EFEF", "t. c #EDEDF7F7F2F2", "y. c #EEEEF6F6F1F1", "u. c gray95", "i. c #F2F2F4F4F4F4", "p. c #F4F4F4F4F4F4", "a. c #F4F4F5F5F5F5", "s. c gray96", "d. c #F1F1F9F9F0F0", "f. c #F5F5F8F8F8F8", "g. c #F6F6FBFBFAFA", "h. c #F8F8FCFCFCFC", "j. c #F9F9FEFEFCFC", "k. c gray99", "l. c #FCFCFCFCFDFD", "z. c #FDFDFDFDFDFD", "x. c #FEFEFEFEFEFE", "c. c None", /* pixels */ "c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.", "c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.", "c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.", "v v v v x v v v x x l l j j f f ", "v ` ` ` ^ ~ ! T Y U I H D S V d ", "v ` K K J G F A Z C N m n b B d ", "M 2.1.1.,.>.;.;.( / Q E R P W a ", "z.z.j.%.z.j.g.3.3.f.t.t.+.i.a.9.", "z.z.$. .@.-.6.| .5.=.o.p O.i.7.", "z.z.z.#.q.0.d.*.*.e.w.y.o.u.a.7.", "& } [ { ] ' i u t r e q w 9 y ", " 0 < < ; * & # @ + O o X . & ", " 9 7 6 5 4 3 2 < > ; - * & & ", " ", "c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.", "c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c." }; springlobby-0.169/src/images/flags/IR.xpm0000600000176000000410000000747612105760300021625 0ustar buildbotwww-data00000000000000/* XPM */ static const char *IR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 149 2", " c black", ". c #00004B4B0000", "X c #00004D4D0000", "o c #00005D5D0000", "O c #000061610000", "+ c #000063630000", "@ c #000067670000", "# c #00006D6D0000", "$ c #000071710000", "% c #000075750000", "& c #000079790000", "* c #00007D7D0000", "= c #000081810000", "- c #000083830000", "; c #000085850000", ": c #000087870000", "> c #000089890000", ", c #000091910000", "< c #2E2EA6A62D2D", "1 c #3333A9A93333", "2 c #3F3FA3A33F3F", "3 c #3939ACAC3939", "4 c #3E3EAFAF3E3E", "5 c #4444B1B14444", "6 c #4B4BB3B34B4B", "7 c #4848B4B44949", "8 c #4E4EB3B34E4E", "9 c #4E4EB7B74E4E", "0 c #5353B6B65353", "q c #5252B8B85151", "w c #5656BABA5656", "e c #5858B9B95757", "r c #5A5ABCBC5A5A", "t c #5C5CBABA5C5C", "y c #5E5EBEBE5E5E", "u c #6161BDBD6060", "i c #6060BFBF6161", "p c #6565BFBF6565", "a c #6969C1C16969", "s c #6D6DC3C36D6D", "d c #7070C4C47171", "f c #7474C6C67474", "g c #7777C8C87777", "h c #7979C8C87979", "j c #7B7BCACA7B7B", "k c #7C7CCACA7C7C", "l c #DDDD00000000", "z c #DFDF00000000", "x c #E1E100000000", "c c #E3E300000000", "v c #E5E500000000", "b c #E7E700000000", "n c #E9E900000000", "m c #EBEB00000000", "M c #EDED00000000", "N c #EFEF00000000", "B c #F1F100000000", "V c #F3F300000000", "C c #F5F500000000", "Z c #F7F700000000", "A c #F1F10F0F0F0F", "S c #F9F900000000", "D c #F1F112121212", "F c #F2F217171717", "G c #F3F31C1C1C1C", "H c #F4F422222222", "J c #F5F527272727", "K c #F2F22C2C2C2C", "L c #F2F22F2F2F2F", "P c #F6F62C2C2C2C", "I c #F2F232323232", "U c #F3F335353535", "Y c #F7F731313131", "T c #F4F439393939", "R c #F5F53D3D3D3D", "E c #F8F837373737", "W c #F9F93C3C3C3C", "Q c #F6F642424242", "! c #F7F746464646", "~ c #F7F74B4B4B4B", "^ c #FAFA41414141", "/ c #FAFA47474747", "( c #F8F850505050", ") c #F9F954545555", "_ c #F9F958585858", "` c #FAFA5D5D5D5D", "' c #FBFB61616262", "] c #FCFC69696969", "[ c #A3A3D5D5A3A3", "{ c #AAAAD9D9AAAA", "} c #AFAFDEDEB1B1", "| c #B3B3DFDFB4B4", " . c #B7B7E3E3B7B7", ".. c #B8B8E1E1B8B8", "X. c #BDBDE4E4BDBD", "o. c #DFDF83838181", "O. c #F7F782828282", "+. c #F8F887878787", "@. c #FBFB85858585", "#. c #F7F791919191", "$. c #FAFA9B9B9B9B", "%. c #F2F2A5A5A5A5", "&. c #F3F3AFAFAFAF", "*. c #F4F4A8A8A8A8", "=. c #F6F6ABABABAB", "-. c #F9F9A2A2A2A2", ";. c #F8F8B5B5B5B5", ":. c #F9F9B4B4B6B6", ">. c #FAFAB6B6B7B7", ",. c #F8F8BABABABA", "<. c #FAFAB9B9B9B9", "1. c #FBFBBCBCBCBC", "2. c #C8C8E4E4C8C8", "3. c #CCCCE7E7CCCC", "4. c #CDCDE6E6CDCD", "5. c #C9C9E9E9C9C9", "6. c #CFCFE9E9CFCF", "7. c #D4D4ECECD5D5", "8. c #D7D7EEEED7D7", "9. c #D9D9EFEFD9D9", "0. c #F2F2C2C2C2C2", "q. c #F3F3C7C7C7C7", "w. c #F5F5CCCCCCCC", "e. c #F7F7CCCCCDCD", "r. c #F9F9D2D2D2D2", "t. c #FBFBD5D5D5D5", "y. c gray89", "u. c gray90", "i. c #E7E7E7E7E7E7", "p. c #FCFCE5E5E5E5", "a. c #F8F8EFEFF1F1", "s. c gray95", "d. c #F3F3F3F3F3F3", "f. c #F6F6F2F2F2F2", "g. c #F4F4F4F4F4F4", "h. c #F4F4F5F5F5F5", "j. c gray96", "k. c #F6F6F6F6F6F6", "l. c gray97", "z. c #FBFBF3F3F5F5", "x. c #F9F9F7F7F7F7", "c. c gray98", "v. c #FBFBFBFBFBFB", "b. c #FBFBFCFCFBFB", "n. c gray99", "m. c #FDFDFCFCFDFD", "M. c #FDFDFDFDFDFD", "N. c #FEFEFEFEFEFE", "B. c None", /* pixels */ "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", ", > > > ; ; = * & % $ # @ O o O ", "; j g g g f s s a p u t e 0 9 . ", "> k a y r w 0 9 7 5 4 3 1 < 6 X ", " .5.9.X.8. .7.| 6.} 4.{ 2.[ 4.2 ", "M.M.M.M.M.M.z.>.>.a.l.j.j.j.j.i.", "M.M.M.v.v.c.$.-.,.#.j.j.j.d.j.u.", "M.M.M.v.v.c.x.@.O.f.j.d.d.s.j.y.", "@.p.1.t.,.r.>.e.=.w.*.q.%.0.&.o.", "S ] / ^ W E Y L J H G F D A I l ", "S ' ` _ ) ( ~ ! Q R T U I L L l ", "C C B N N N n n v v c c l l l l ", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B." }; springlobby-0.169/src/images/flags/IS.xpm0000600000176000000410000000666212105760300021622 0ustar buildbotwww-data00000000000000/* XPM */ static const char *IS_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 131 2", " c black", ". c #000000004343", "X c #000000004545", "o c #000000004949", "O c #000000004B4B", "+ c #000000004F4F", "@ c #000000005555", "# c #000000005757", "$ c #000000005B5B", "% c #000000005D5D", "& c #000000006161", "* c #000000006565", "= c #000000006B6B", "- c #000000007171", "; c #000000007575", ": c #000000007B7B", "> c #000003037F7F", ", c #000009098383", "< c #00000B0B8383", "1 c #000011118787", "2 c #000011118989", "3 c #000017178B8B", "4 c #000019198D8D", "5 c #00001D1D8F8F", "6 c #00002D2D9797", "7 c #00002F2F9999", "8 c #23235858A5A5", "9 c #27275C5CA7A7", "0 c #28285C5CA8A8", "q c #2B2B5E5EAAAA", "w c #2C2C6060AAAA", "e c #2F2F6262ADAD", "r c #30306262ADAD", "t c #34346666AEAE", "y c #35356666AFAF", "u c #39396A6AB0B0", "i c #3A3A6A6AB1B1", "p c #3D3D6D6DB2B2", "a c #3F3F6E6EB3B3", "s c #40406F6FB1B1", "d c #43437070B3B3", "f c #40407070B5B5", "g c #42427171B5B5", "h c #46467373B3B3", "j c #47477373B3B3", "k c #44447272B6B6", "l c #46467474B7B7", "z c #46467575B7B7", "x c #4A4A7575B5B5", "c c #4B4B7878BABA", "v c #4D4D7878B8B8", "b c #50507B7BB9B9", "n c #50507C7CBCBC", "m c #51517C7CBCBC", "M c #53537E7EBDBD", "N c #55557F7FBBBB", "B c #55557F7FBFBF", "V c #55558080BFBF", "C c #58588181BDBD", "Z c #59598282BDBD", "A c #58588282BFBF", "S c #5C5C8484BEBE", "D c #59598383C0C0", "F c #5A5A8383C1C1", "G c #5D5D8686C2C2", "H c #5F5F8787C2C2", "J c #60608888C1C1", "K c #65658B8BC3C3", "L c #6A6A8F8FC5C5", "P c #6A6A9090C8C8", "I c #6D6D9191C8C8", "U c #6D6D9393C9C9", "Y c #6E6E9393C8C8", "T c #71719494C9C9", "R c #70709595CBCB", "E c #72729696C9C9", "W c #75759898CBCB", "Q c #76769999CBCB", "! c #79799A9ACCCC", "~ c #7A7A9C9CCDCD", "^ c #7C7C9E9ECDCD", "/ c #B3B300000000", "( c #C1C100000000", ") c #DBDB00000000", "_ c #DCDC24242222", "` c #DEDE28282828", "' c #DFDF2D2D2C2C", "] c #E1E133333232", "[ c #E3E338383737", "{ c #E3E33C3C3B3B", "} c #E4E43E3E3C3C", "| c #E1E143434242", " . c #E5E542424141", ".. c #E6E643434242", "X. c #E7E748484646", "o. c #E7E748484747", "O. c #E7E74D4D4C4C", "+. c #E7E756565555", "@. c #E9E952525151", "#. c #E9E953535151", "$. c #EAEA57575656", "%. c #EAEA58585656", "&. c #EBEB5B5B5A5A", "*. c #EBEB5C5C5B5B", "=. c #EFEF78787777", "-. c #EFEF7A7A7979", ";. c #8787A5A5D3D3", ":. c #8787A6A6D3D3", ">. c #8989A8A8D3D3", ",. c #8989A8A8D4D4", "<. c gray89", "1. c #E7E7E7E7E7E7", "2. c gray92", "3. c #EDEDEFEFEDED", "4. c gray95", "5. c #F3F3F3F3F3F3", "6. c #F4F4F4F4F4F4", "7. c gray96", "8. c #F6F6F6F6F6F6", "9. c gray97", "0. c #F8F8F8F8F8F8", "q. c #F9F9F9F9F9F9", "w. c gray98", "e. c #FBFBFBFBFBFB", "r. c #FBFBFCFCFBFB", "t. c gray99", "y. c #FDFDFCFCFDFD", "u. c #FDFDFDFDFDFD", "i. c #FDFDFDFDFEFE", "p. c #FEFEFEFEFEFE", "a. c None", /* pixels */ "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "7 7 7 7 u.) u.5 3 1 , > : ; - = ", "7 ,.,.:.u.-.u.^ ! W T U L K J * ", "7 >.R U u.*.u.H D B m c z g S & ", "6 :.U P u.%.u.D B m c z a p C $ ", "u.u.u.u.u.#.u.w.w.0.9.9.7.7.7.1.", ") =.&.$.@.O.o. .{ [ ] ' ` _ | / ", "u.u.u.e.w.o.w.0.0.7.7.7.5.4.7.<.", "4 ! H C w. .w.g a u y r q q h o ", "1 Q V M w.{ w.s u t e q 9 8 s X ", ", E U L w.$.7.C N b v x h s s X ", ", : ; - 3.( 2.$ @ @ @ o o X . . ", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a." }; springlobby-0.169/src/images/flags/IT.xpm0000600000176000000410000000605612105760300021620 0ustar buildbotwww-data00000000000000/* XPM */ static const char *IT_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 114 2", " c black", ". c #000053530000", "X c #00005B5B0000", "o c #000063630000", "O c #000067670000", "+ c #00006F6F0000", "@ c #000075750000", "# c #000077770000", "$ c #00007B7B0000", "% c #00007F7F0000", "& c #000083830000", "* c #000085850000", "= c #000087870000", "- c #000089890000", "; c #000091910000", ": c #3A3AAAAA3A3A", "> c #3F3FAEAE3F3F", ", c #4040ADAD3F3F", "< c #4444B1B14444", "1 c #4545B0B04545", "2 c #4545B1B14545", "3 c #4B4BB3B34B4B", "4 c #4949B4B44949", "5 c #4F4FB6B64F4F", "6 c #4F4FB7B74F4F", "7 c #5050B5B55050", "8 c #5454B5B55555", "9 c #5454B7B75454", "0 c #5353B9B95353", "q c #5454B9B95454", "w c #5858B9B95858", "e c #5858BBBB5959", "r c #5959BABA5959", "t c #5858BCBC5858", "y c #5C5CBDBD5C5C", "u c #5D5DBCBC5D5D", "i c #5F5FBFBF5F5F", "p c #6161BEBE6262", "a c #6666C0C06666", "s c #6A6AC3C36A6A", "d c #6F6FC4C46F6F", "f c #7272C6C67373", "g c #7777C7C77777", "h c #7676C8C87676", "j c #7979C8C87979", "k c #7B7BCACA7A7A", "l c #7B7BCACA7B7B", "z c #DDDD00000000", "x c #DFDF00000000", "c c #E1E100000000", "v c #E3E300000000", "b c #E5E500000000", "n c #E7E700000000", "m c #E9E900000000", "M c #EBEB00000000", "N c #EDED00000000", "B c #EFEF00000000", "V c #F1F100000000", "C c #F3F300000000", "Z c #F5F500000000", "A c #F1F10B0B0B0B", "S c #F1F10F0F0E0E", "D c #F2F210101010", "F c #F2F213131313", "G c #F2F214141414", "H c #F3F319191919", "J c #F3F31A1A1A1A", "K c #F4F41F1F1F1F", "L c #F4F420202020", "P c #F5F525252525", "I c #F5F526262626", "U c #F2F22C2C2C2C", "Y c #F2F22F2F2F2F", "T c #F6F62B2B2B2B", "R c #F6F62C2C2C2C", "E c #F2F232323232", "W c #F3F332323232", "Q c #F3F335353535", "! c #F7F731313131", "~ c #F4F436363636", "^ c #F4F43B3B3B3B", "/ c #F5F53F3F3F3F", "( c #F8F837373737", ") c #F6F644444444", "_ c #F7F749494949", "` c #F7F74E4E4E4E", "' c #F8F853535353", "] c #F9F957575757", "[ c #FAFA5C5C5C5C", "{ c #C1C1C1C1C1C1", "} c #C3C3C3C3C3C3", "| c gray78", " . c gray79", ".. c #CDCDCDCDCDCD", "X. c gray86", "o. c #DDDDDDDDDDDD", "O. c #DFDFDFDFDFDF", "+. c #E1E1E1E1E1E1", "@. c gray89", "#. c gray90", "$. c #F3F3F3F3F3F3", "%. c #F4F4F4F4F4F4", "&. c gray96", "*. c #F6F6F6F6F6F6", "=. c gray97", "-. c #F8F8F8F8F8F8", ";. c #F9F9F9F9F9F9", ":. c gray98", ">. c #FBFBFBFBFBFB", ",. c gray99", "<. c #FDFDFDFDFDFD", "1. c #FDFDFDFDFEFE", "2. c #FEFEFEFEFEFE", "3. c None", /* pixels */ "3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.", "3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.", "3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.", "; - - = & #.@.+.O.o.X.Z C C N N ", "= l l l g <.<.<.,.<.>.[ ] ' ` M ", "- l i y e <.<.,.>.;.;.( ! R _ M ", "= l r r 0 <.,.,.;.;.;.! T I ) b ", "= g r 0 5 ,.,.;.;.;.=.T I L / b ", "= f q 5 3 <.;.;.-.=.*.P K H / b ", "% d 6 2 1 ;.;.;.=.*.*.K G G ~ v ", "$ s 3 < > ;.;.*.*.*.$.H F F W x ", "# p < > : ;.=.*.*.$.$.F S A Y x ", "+ p p w 8 ;.*.=.*.*.%.Q W Y U x ", "# O o X . .. .| { { { v x x z z ", "3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.", "3.3.3.3.3.3.3.3.3.3.3.3.3.3.3.3." }; springlobby-0.169/src/images/flags/JM.xpm0000600000176000000410000000772712105760300021620 0ustar buildbotwww-data00000000000000/* XPM */ static const char *JM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 156 2", " c black", ". c #131300000000", "X c #121212121010", "o c gray8", "O c #191919191919", "+ c gray10", "@ c gray12", "# c #00002D2D0000", "$ c #000031310000", "% c #000039390000", "& c #00003D3D0000", "* c #29290F0F0000", "= c #202020202020", "- c #252525252525", "; c #2D2D2B2B2626", ": c #393935352B2B", "> c #333332323232", ", c gray21", "< c gray23", "1 c #3F3F3F3F3F3F", "2 c #000041410000", "3 c #000047470000", "4 c #00004D4D0000", "5 c #000051510000", "6 c #000055550000", "7 c #000059590000", "8 c #000063630000", "9 c #00006B6B0000", "0 c #000071710000", "q c #000075750000", "w c #000079790000", "e c #00007D7D0000", "r c #0D0D7D7D0000", "t c #55553B3B0000", "y c #494940401F1F", "u c #4C4C46462F2F", "i c #5A5A51512B2B", "p c #7A7A65651414", "a c #444444444444", "s c #49494A4A4949", "d c #4B4B4B4B4949", "f c #4B4B4A4A4B4B", "g c gray31", "h c #50504E4E4646", "j c #535353535353", "k c gray33", "l c #585858585858", "z c #60605F5F5C5C", "x c #666660604545", "c c #696963634949", "v c #76766E6E5050", "b c #6A6A6A6A6A6A", "n c #6F6F6F6F6F6F", "m c #7B7B77776666", "M c #727272727373", "N c #767676767676", "B c #797979797979", "V c #000081810000", "C c #000083830000", "Z c #000085850000", "A c #1E1E9C9C1E1E", "S c #37379B9B0000", "D c #2323A1A12323", "F c #2929A3A32929", "G c #2E2EA5A52E2E", "H c #3636A6A62A2A", "J c #3C3CA8A82F2F", "K c #3939A7A73939", "L c #3D3DACAC3D3D", "P c #5D5DA9A91919", "I c #4A4AAAAA3535", "U c #7373B6B63434", "Y c #7070B8B83D3D", "T c #4242AEAE4242", "R c #4646B0B04646", "E c #4747B3B34747", "W c #4848B1B14242", "Q c #4E4EB4B44747", "! c #4B4BB2B24B4B", "~ c #4C4CB5B54C4C", "^ c #5050B3B35050", "/ c #5151B6B65151", "( c #6767B9B95555", ") c #6A6ABDBD5C5C", "_ c #6161BBBB6060", "` c #6565C0C06565", "' c #6969C2C26969", "] c #6D6DC3C36D6D", "[ c #7070C5C57171", "{ c #7474C5C57474", "} c #91917C7C2B2B", "| c #9B9BBABA2424", " . c #AFAF8F8F0B0B", ".. c #B7B785850000", "X. c #ABABBEBE3232", "o. c #BEBEA1A12424", "O. c #959585854545", "+. c #92928D8D7A7A", "@. c #A9A999995959", "#. c #A6A6C1C13434", "$. c #A0A0C2C23C3C", "%. c #8585C3C35454", "&. c #8282C9C97777", "*. c #AAAAC9C94B4B", "=. c #B7B7CCCC5757", "-. c #DDDD93930000", ";. c #D1D1A7A70000", ":. c #DBDBAFAF0000", ">. c #C5C5A7A72C2C", ",. c #CCCCAEAE3030", "<. c #D7D7B6B63030", "1. c #EDEDB1B10000", "2. c #F5F5BDBD0000", "3. c #E1E1BEBE2C2C", "4. c #C5C5ACAC4444", "5. c #C8C8AEAE4040", "6. c #D3D3B9B94B4B", "7. c #DADABCBC4040", "8. c #D6D6BFBF5F5F", "9. c #D7D7C5C51313", "0. c #D2D2C8C82F2F", "q. c #D5D5CBCB3535", "w. c #D0D0CBCB3C3C", "e. c #DBDBCFCF3737", "r. c #E5E5C3C30000", "t. c #ECECC3C31919", "y. c #F1F1CFCF0E0E", "u. c #FFFFCFCF0000", "i. c #F4F4D3D31F1F", "p. c #E4E4D2D23A3A", "a. c #F6F6CFCF3131", "s. c #F2F2CFCF3F3F", "d. c #F2F2D4D42F2F", "f. c #F6F6D0D02A2A", "g. c #F7F7DCDC3131", "h. c #F8F8D5D53636", "j. c #F9F9D5D53A3A", "k. c #F8F8D9D93636", "l. c #F9F9DBDB3B3B", "z. c #F9F9DCDC3A3A", "x. c #FAFADFDF3F3F", "c. c #C0C0CFCF5858", "v. c #D3D3CECE4141", "b. c #C8C8D9D97979", "n. c #EEEECFCF4E4E", "m. c #E6E6DBDB5959", "M. c #FBFBDADA4646", "N. c #FBFBDADA5454", "B. c #F8F8DFDF5353", "V. c #EEEED3D36262", "C. c #F7F7DFDF7B7B", "Z. c #FDFDE1E15151", "A. c #FAFAE3E35D5D", "S. c #FEFEE6E65C5C", "D. c #FFFFEAEA7B7B", "F. c None", /* pixels */ "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "u.r.S Z Z V V e w q 0 9 8 w ;.1.", "t C.D.b.&.{ [ ] ' ` _ ) =.Z.n.. ", " +.8.S.m.%./ ~ E T Y e.g.>.c ", " B z @.N.Z.*.Q W $.k.a.} ; a ", " N l k v 6.M.v.w.h.,.i - = 1 ", " M j g f h 7.z.k.<., - = O < ", " n g s x 5.j.q.q.f.o.t O o , ", " b f O.s.z.X.K H | i.t.p o , ", " m 4.x.p.U G F D A P 9.y. .u ", "* V.A.=.( ^ ! E T L K I X.d.3. ", "2.:.r 7 6 5 4 3 2 & % $ # 4 ..-.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F." }; springlobby-0.169/src/images/flags/JO.xpm0000600000176000000410000000625212105760300021612 0ustar buildbotwww-data00000000000000/* XPM */ static const char *JO_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 121 2", " c black", ". c #000029290000", "X c #00002D2D0000", "o c #00002F2F0000", "O c #000033330000", "+ c #000039390000", "@ c #00003D3D0000", "# c #2C2C2C2C2C2C", "$ c #313131313131", "% c #373737373737", "& c #3D3D3C3C3D3D", "* c #000041410000", "= c #000047470000", "- c #00004D4D0000", "; c #000051510000", ": c #000057570000", "> c #00005D5D0000", ", c #000063630000", "< c gray26", "1 c gray28", "2 c #494949494949", "3 c #4C4C4C4C4C4C", "4 c #4E4E4E4E4E4E", "5 c #515151515151", "6 c #535353535353", "7 c gray33", "8 c #585857575757", "9 c gray36", "0 c #636359595959", "q c #616160606060", "w c #656565656565", "e c DimGray", "r c #6D6D6D6D6D6D", "t c #707070707171", "y c #747474747474", "u c #777777777777", "i c #797979797979", "p c #18189A9A1919", "a c #1C1C9C9C1C1C", "s c #21219F9F2121", "d c #2525A1A12626", "f c #2A2AA3A32A2A", "g c #3030A6A63030", "h c #3535A9A93535", "j c #3838A7A73838", "k c #3A3AA8A83A3A", "l c #3B3BA9A93B3B", "z c #3A3AACAC3A3A", "x c #3D3DA9A93D3D", "c c #4040ACAC4040", "v c #4040AEAE4040", "b c #4545AEAE4444", "n c #4848AFAF4848", "m c #4545B1B14545", "M c #4C4CB2B24C4C", "N c #5050B4B45050", "B c #5555B6B65555", "V c #5A5AB9B95A5A", "C c #5E5EBBBB5E5E", "Z c #6262BEBE6262", "A c #898900000000", "S c #9B9B00000000", "D c #B5B569693F3F", "F c #BCBC5C5C5C5C", "G c #A4A47B7B7B7B", "H c #F7F700000000", "J c #F9F900000000", "K c #FBFB00000000", "L c #FDFD00000000", "P c red", "I c #DCDC51513F3F", "U c #DDDD54545454", "Y c #FAFA40404040", "T c #FAFA44444444", "R c #FBFB45454545", "E c #FBFB46464646", "W c #FAFA44444949", "Q c #FBFB49494949", "! c #FBFB4E4E4E4E", "~ c #FCFC4A4A4B4B", "^ c #FDFD4F4F5050", "/ c #FCFC55555555", "( c #FDFD57575757", ") c #FEFE59595959", "_ c #FEFE5C5C5C5C", "` c #FEFE5F5F5F5F", "' c #E8E86C6C6262", "] c #EBEB7B7B7B7B", "[ c #FCFC66666666", "{ c #FCFC6A6A6A6A", "} c #FDFD6F6F6F6F", "| c #FEFE76767676", " . c #FEFE79797979", ".. c #FFFF7B7B7A7A", "X. c #94949B9B5D5D", "o. c #F9F988888989", "O. c #FCFC8D8D8D8D", "+. c #FEFE8E8E8E8E", "@. c #F9F98E8E9191", "#. c #FCFC90909090", "$. c #FBFB9E9E9E9E", "%. c #FEFE9A9A9A9A", "&. c #FDFD9C9C9F9F", "*. c gray81", "=. c gray82", "-. c #D5D5D5D5D5D5", ";. c #D7D7D7D7D7D7", ":. c gray95", ">. c #F3F3F3F3F3F3", ",. c #F4F4F4F4F4F4", "<. c #F4F4F5F5F5F5", "1. c gray96", "2. c #F6F6F6F6F6F6", "3. c gray97", "4. c #F8F8F8F8F8F8", "5. c #F9F9F9F9F9F9", "6. c gray98", "7. c #FBFBFBFBFBFB", "8. c gray99", "9. c #FDFDFDFDFDFD", "0. c None", /* pixels */ "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.", "S ", "P ] G i u y t r e w q 9 8 6 4 ", "P .._ F 0 7 4 3 1 < & % $ # 3 ", "P .._ _ U &.7.7.7.7.1.3.1.1.1.;.", "P | O.( ^ ( $.7.7.1.7.1.1.>.>.;.", "P %.9.#.~ T Y o.3.1.1.1.1.>.1.=.", "P | O.! T W @.7.3.3.1.1.>.>.>.=.", "J { Q T I @.7.1.1.1.1.>.>.>.>.*.", "J [ T D m c z h g f d s a p l X ", "H ' X.Z C V B N M n b c j l j . ", "A ; , > : ; - = * @ + O X X . . ", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.", "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0." }; springlobby-0.169/src/images/flags/JP.xpm0000600000176000000410000000377412105760300021621 0ustar buildbotwww-data00000000000000/* XPM */ static const char *JP_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 82 1", " c black", ". c #F5F524242424", "X c #F5F52A2A2A2A", "o c #F6F62A2A2A2A", "O c #F6F62B2B2B2B", "+ c #F7F72F2F2F2F", "@ c #F7F730303030", "# c #F7F737373737", "$ c #F8F834343434", "% c #F8F835353535", "& c #F8F836363636", "* c #F9F93B3B3A3A", "= c #F9F93B3B3B3B", "- c #F9F93B3B3C3C", "; c #F9F93C3C3C3C", ": c #FAFA40404040", "> c #FAFA41414141", ", c #FAFA41414242", "< c #FBFB46464646", "1 c #FBFB47474747", "2 c #FAFA48484848", "3 c #FCFC4B4B4B4B", "4 c #F5F555555555", "5 c #F6F65B5B5B5B", "6 c #FCFC55555555", "7 c #F4F47D7D7D7D", "8 c #FBFB79797979", "9 c #FCFC7E7E7F7F", "0 c #F4F493939393", "q c #F8F894949393", "w c #F9F997979797", "e c #F7F7A1A1A1A1", "r c #FAFAAFAFAFAF", "t c #FDFDAAAAAAAA", "y c #F5F5BBBBBBBB", "u c #FDFDBBBBBBBB", "i c gray81", "p c gray82", "a c LightGray", "s c #D5D5D5D5D5D5", "d c #D7D7D7D7D7D7", "f c gray85", "g c gray86", "h c #DDDDDDDDDDDD", "j c #DFDFDFDFDFDF", "k c #F4F4D5D5D5D5", "l c #F6F6DADADADA", "z c #FCFCD2D2D2D2", "x c #E1E1E3E3E1E1", "c c #E1E1E3E3E3E3", "v c gray90", "b c #E7E7E7E7E7E7", "n c #E9E9E9E9E9E9", "m c gray92", "M c gray93", "N c #EFEFEFEFEFEF", "B c #F3F3EFEFEFEF", "V c #FBFBE7E7E7E7", "C c #FDFDEAEAEAEA", "Z c #F1F1F1F1F1F1", "A c gray95", "S c #F2F2F2F2F3F3", "D c #F3F3F3F3F3F3", "F c #F4F4F4F4F4F4", "G c #F4F4F5F5F5F5", "H c gray96", "J c #F6F6F4F4F4F4", "K c #F7F7F5F5F5F5", "L c #F6F6F6F6F6F6", "P c gray97", "I c #F8F8F7F7F7F7", "U c #F8F8F8F8F8F8", "Y c #F9F9F9F9F9F9", "T c gray98", "R c #FBFBFBFBFBFB", "E c #FBFBFCFCFBFB", "W c gray99", "Q c #FDFDFDFDFDFD", "! c #FDFDFDFDFEFE", "~ c #FEFEFEFEFEFE", "^ c gray100", "/ c None", /* pixels */ "////////////////", "////////////////", "////////////////", "HHHHHDDNNNNnnvvc", "H^^^R^^^RRRRRHHc", "H^^^^Ru98rRHHRHh", "H^^^^t21>-qRHHLg", "H^^RV61>-&&lHHHd", "D^RRz1;*&@XyHDHa", "N^RRV2;&+XXkDDHa", "DRRRRq$+X.7DDDDa", "NRRRRRe540BDNDDi", "NRRIIIILHHHDDDDi", "nnvvcchgddaaiiii", "////////////////", "////////////////" }; springlobby-0.169/src/images/flags/KE.xpm0000600000176000000410000000770212105760300021602 0ustar buildbotwww-data00000000000000/* XPM */ static const char *KE_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 154 2", " c black", ". c #000029290000", "X c #00002D2D0000", "o c #00002F2F0000", "O c #000031310000", "+ c #000033330000", "@ c #000035350000", "# c #000039390000", "$ c #00003D3D0000", "% c #2C2C2C2C2C2C", "& c #313131313131", "* c #373737373737", "= c #000041410000", "- c #000047470000", "; c #00004D4D0000", ": c #000051510000", "> c #000057570000", ", c #00005D5D0000", "< c #000063630000", "1 c #000067670000", "2 c #00006F6F0000", "3 c #000071710000", "4 c #000079790000", "5 c #4C4C32323333", "6 c #4D4D3F3F3E3E", "7 c #58582F2F3131", "8 c #62623C3C3C3C", "9 c #414146464646", "0 c #494949494949", "q c #4E4E4E4E4E4E", "w c #5D5D43434343", "e c #535353535353", "r c #57575C5C5C5C", "t c #585857575757", "y c gray35", "u c gray36", "i c #5F5F5F5F5F5F", "p c #70704D4D4D4D", "a c #646463636363", "s c #656566666666", "d c DimGray", "f c #6D6D6D6D6D6D", "g c #727272727272", "h c gray46", "j c #777777777777", "k c #797979797979", "l c #7B7B7B7B7A7A", "z c #7B7B7B7B7B7B", "x c #0B0B9A9A0E0E", "c c #0F0F9C9C1111", "v c #13139F9F1616", "b c #1919A1A12020", "n c #2C2CA4A43434", "m c #3636A6A63636", "M c #3636A9A93737", "N c #3434AFAF3A3A", "B c #3838A8A83838", "V c #3B3BA9A93C3C", "C c #3A3AB1B13B3B", "Z c #3B3BADAD4343", "A c #3F3FB3B34141", "S c #6F6F82823939", "D c #6E6E88883E3E", "F c #4040ABAB4040", "G c #4141ACAC4040", "H c #4444AEAE4444", "J c #4444B6B64646", "K c #4848B1B14848", "L c #4D4DB3B34D4D", "P c #5151B5B55151", "I c #5656B7B75656", "U c #5B5BB9B95B5B", "Y c #5F5FBBBB5F5F", "T c #6464BEBE6464", "R c #6868BFBF6868", "E c #6C6CC3C36D6D", "W c #BBBB00000000", "Q c #808057575858", "! c #83835E5E5E5E", "~ c #C1C100000000", "^ c #DFDF00000000", "/ c #E5E500000000", "( c #E9E900000000", ") c #E0E017171F1F", "_ c #E0E01B1B2121", "` c #E1E11A1A2222", "' c #E1E11F1F2727", "] c #E2E220202626", "[ c #E3E324242A2A", "{ c #E3E325252C2C", "} c #E4E427272D2D", "| c #E5E527272D2D", " . c #E4E42C2C3232", ".. c #E5E52D2D3333", "X. c #E7E735353A3A", "o. c #E4E438383F3F", "O. c #E3E33B3B4141", "+. c #E0E03F3F4343", "@. c #DCDC42424646", "#. c #DEDE43434848", "$. c #DCDC48484B4B", "%. c #DFDF4E4E5151", "&. c #E7E743434848", "*. c #E4E44B4B4E4E", "=. c #EFEF47474D4D", "-. c #EEEE48484C4C", ";. c #ECEC4A4A5050", ":. c #EEEE4B4B5151", ">. c #EDED50505555", ",. c #EFEF51515555", "<. c #EEEE54545959", "1. c #F1F155555858", "2. c #F1F155555A5A", "3. c #F1F159595C5C", "4. c #F2F25D5D6161", "5. c #E2E268686969", "6. c #E0E06C6C6C6C", "7. c #E7E77B7B7B7B", "8. c #E7E77F7F7F7F", "9. c #F3F361616565", "0. c #F1F173737777", "q. c #F3F375757878", "w. c #F6F67D7D7F7F", "e. c #B1B19D9D9D9D", "r. c #ABABAFAF8F8F", "t. c #D5D5D7D7BFBF", "y. c #C6C6C8C8C8C8", "u. c #CCCCCDCDCDCD", "i. c #D5D5C9C9C9C9", "p. c #DBDBD3D3C8C8", "a. c #E0E0D9D9CECE", "s. c #E5E5D5D5D5D5", "d. c #E9E9DBDBDBDB", "f. c #E7E7E8E8E2E2", "g. c #EBEBE7E7E7E7", "h. c #E9E9EAEAE3E3", "j. c #EAEAEBEBE4E4", "k. c #EBEBEBEBE6E6", "l. c #EBEBECECE6E6", "z. c #ECECE9E9E9E9", "x. c #EDEDEAEAEAEA", "c. c #EDEDEBEBEAEA", "v. c #EFEFEBEBEBEB", "b. c #F0F0F1F1ECEC", "n. c #F2F2F2F2EEEE", "m. c #F3F3F3F3EFEF", "M. c #F3F3F1F1F1F1", "N. c #F4F4F2F2F2F2", "B. c #F5F5F3F3F3F3", "V. c #F4F4F4F4F0F0", "C. c #F7F7F7F7F3F3", "Z. c #F6F6F4F4F4F4", "A. c #F7F7F6F6F6F6", "S. c None", /* pixels */ "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", " ", " z z z h h g f d s a u t e q ", " z i u u r u.! Q y.9 * & % 0 ", "i.A.A.A.M.M.d.8.7.s.v.z.z.k.c.e.", "( w.4.4.<.1.p %.*.8 X...} [ &.~ ", "/ 0.<.>.;.-.w $.#.5 ..[ ' ` O.W ", "/ q.1.,.;.=.6 @.+.7 } ' ` ) o.W ", "p.V.V.V.m.m.a.6.5.p.k.k.h.f.l.r.", "4 E J C C N Z D S n b v c x M O ", "3 E T U U I P L K H G G V B m . ", "3 1 < , > : ; - = $ # O o o . @ ", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S." }; springlobby-0.169/src/images/flags/KG.xpm0000600000176000000410000000701712105760300021603 0ustar buildbotwww-data00000000000000/* XPM */ static const char *KG_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 133 2", " c black", ". c #C7C700000000", "X c #C9C900000000", "o c #CBCB00000000", "O c #CDCD00000000", "+ c #D1D100000000", "@ c #D3D300000000", "# c #D5D500000000", "$ c #D7D700000000", "% c #D9D900000000", "& c #DBDB00000000", "* c #DDDD00000000", "= c #E1E100000000", "- c #E3E300000000", "; c #E5E500000000", ": c #E7E700000000", "> c #E5E50B0B0B0B", ", c #E5E50F0F0E0E", "< c #E9E900000000", "1 c #EBEB00000000", "2 c #EDED00000000", "3 c #EFEF00000000", "4 c #E5E510101010", "5 c #E7E713131313", "6 c #E7E714141414", "7 c #E8E819191919", "8 c #E8E81A1A1A1A", "9 c #E9E91F1F1F1F", "0 c #F1F100000000", "q c #E9E920201F1F", "w c #EAEA28281F1F", "e c #EAEA2C2C1E1E", "r c #E7E72C2C2C2C", "t c #E9E920202020", "y c #EBEB25252525", "u c #EBEB26262525", "i c #EBEB26262626", "p c #E8E82F2F2F2F", "a c #ECEC2B2B2B2B", "s c #ECEC2C2C2C2C", "d c #EDED38382E2E", "f c #E9E932323232", "g c #E9E935353535", "h c #E9E936363636", "j c #EDED31313131", "k c #EEEE34343434", "l c #EFEF37373737", "z c #EBEB39393939", "x c #EBEB3B3B3B3B", "c c #EFEF3A3A3A3A", "v c #ECEC3D3D3D3D", "b c #ECEC3F3F3F3F", "n c #F0F03C3C3D3D", "m c #F0F03F3F3F3F", "M c #F1F13F3F3F3F", "N c #EFEF40403636", "B c #EEEE5F5F2323", "V c #F0F041413A3A", "C c #EFEF67672929", "Z c #EFEF69692424", "A c #F2F269693030", "S c #EDED42424242", "D c #EDED44444444", "F c #EEEE46464646", "G c #EEEE49494949", "H c #EFEF4B4B4B4B", "J c #EFEF4E4E4E4E", "K c #EFEF50505050", "L c #F1F144444444", "P c #F1F145454545", "I c #F2F248484242", "U c #F2F249494949", "Y c #F2F24A4A4949", "T c #F2F24A4A4B4B", "R c #F3F34F4F4F4F", "E c #F0F053535353", "W c #F3F350505050", "Q c #F1F154545555", "! c #F2F257575757", "~ c #F4F453535353", "^ c #F4F455555151", "/ c #F4F454545454", "( c #F4F459595151", ") c #F2F258585858", "_ c #F2F25C5C5C5C", "` c #F2F25D5D5D5D", "' c #F5F558585858", "] c #F5F559595959", "[ c #F6F65C5C5C5C", "{ c #F6F65F5F5F5F", "} c #F4F473734040", "| c #F5F577774747", " . c #F5F576764C4C", ".. c #F6F67D7D4B4B", "X. c #F3F360606060", "o. c #F3F361616262", "O. c #F4F465656565", "+. c #F4F466666666", "@. c #F5F569696969", "#. c #F5F56A6A6A6A", "$. c #F6F66D6D6D6D", "%. c #F6F66F6F6F6F", "&. c #F6F670707171", "*. c #F7F772727373", "=. c #F7F774747474", "-. c #F7F776767676", ";. c #F7F777777777", ":. c #F7F779797979", ">. c #F8F87B7B7A7A", ",. c #F8F87B7B7B7B", "<. c #F1F185852B2B", "1. c #F3F382823636", "2. c #F5F588883B3B", "3. c #F3F394942F2F", "4. c #F2F299992424", "5. c #F4F497973535", "6. c #F5F59E9E3434", "7. c #F6F69B9B3C3C", "8. c #F6F6A0A03C3C", "9. c #F4F4B7B72A2A", "0. c #F7F792924646", "q. c #F6F6A0A04141", "w. c #F8F8A5A54B4B", "e. c #F5F5C4C42A2A", "r. c #F6F6C7C72F2F", "t. c #F5F5C3C33030", "y. c #F7F7C2C23636", "u. c #F8F8C0C03A3A", "i. c #F8F8CBCB4040", "p. c #F9F9C8C84646", "a. c #FAFAD4D44242", "s. c #FAFAD7D74747", "d. c None", /* pixels */ "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.", "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.", "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.", "0 0 0 0 3 3 3 1 1 1 : : = = * * ", "0 ,.,.:.:.-.&.$.@.O.X._ ! W K % ", "0 ,.[ [ ' / ( .| I n l j s G # ", "3 :.[ ' / ^ w.s.a.8.n j r i D @ ", "3 -.' / W ..p.q.7.y.A r i t V @ ", "3 *.~ R T 0.i.2.1.r.<.y 9 8 x O ", "3 %.R U P } u.5.3.9.Z 9 7 5 h O ", "1 #.H L L n 6.r.e.4.w 7 6 4 f O ", "1 +.L V c k d C B e 7 5 4 > r . ", ": o.` ) ! J H D S v z h f p r . ", ": = = * % % % # @ @ O o o . . o ", "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.", "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d." }; springlobby-0.169/src/images/flags/KH.xpm0000600000176000000410000001016012105760300021575 0ustar buildbotwww-data00000000000000/* XPM */ static const char *KH_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 161 2", " c black", ". c #000000006969", "X c #000000007B7B", "o c #000000007D7D", "O c #000000007F7F", "+ c #000000008181", "@ c #000000008585", "# c #000000008989", "$ c #000000008B8B", "% c #000000008F8F", "& c #000000009393", "* c #000000009797", "= c #000000009999", "- c #000000009B9B", "; c #000000009F9F", ": c #00000000A1A1", "> c #00000000A3A3", ", c #00000000A7A7", "< c #00000000A9A9", "1 c #00000000ADAD", "2 c #00000000AFAF", "3 c #00000000B1B1", "4 c #00000000B3B3", "5 c #00000000B7B7", "6 c #00000707B3B3", "7 c #00000000B9B9", "8 c #00000000BBBB", "9 c #00000303BDBD", "0 c #00000707BDBD", "q c #00000707BFBF", "w c #00000D0DBFBF", "e c #22223838B4B4", "r c #26263B3BB7B7", "t c #2B2B4444BCBC", "y c #2F2F4747BDBD", "u c #34344B4BBFBF", "i c #39394F4FC1C1", "p c #34345252C8C8", "a c #36365555C9C9", "s c #3F3F5454C3C3", "d c #39395757CACA", "f c #3D3D5B5BCBCB", "g c #42425555BFBF", "h c #44445959C6C6", "j c #45455858C6C6", "k c #41415E5ECDCD", "l c #49495E5EC8C8", "z c #4A4A5D5DC8C8", "x c #44446161CECE", "c c #48486565CFCF", "v c #4E4E6363CBCB", "b c #4F4F6262CACA", "n c #4D4D6868D1D1", "m c #52526363C9C9", "M c #53536666CBCB", "N c #57576868CBCB", "B c #57576B6BCDCD", "V c #5A5A6B6BCBCB", "C c #5D5D6E6ECFCF", "Z c #51516C6CD3D3", "A c #55556F6FD5D5", "S c #56567070D4D4", "D c #5A5A7474D7D7", "F c #5B5B7575D6D6", "G c #5F5F7777D8D8", "H c #5F5F7878D8D8", "J c #61617272D1D1", "K c #65657676D2D2", "L c #63637B7BDADA", "P c #64647C7CDADA", "I c #67677F7FDBDB", "U c #69697979D3D3", "Y c #6B6B7C7CD5D5", "T c #6E6E7E7ED6D6", "R c #68687F7FDCDC", "E c #6A6A8383DDDD", "W c #6F6F8686DDDD", "Q c #76768484D5D5", "! c #73738A8ADFDF", "~ c #76768C8CE0E0", "^ c #79798F8FE2E2", "/ c #7C7C9191E2E2", "( c #7F7F9393E3E3", ") c #8B8B00000000", "_ c #8F8F00000000", "` c #979700000000", "' c #BDBD00000000", "] c #BFBF00000000", "[ c #C3C300000000", "{ c #C6C610101010", "} c #C8C814141414", "| c #C9C918181616", " . c #C8C819191919", ".. c #C8C81A1A1A1A", "X. c #C9C91F1F1F1F", "o. c #CCCC20202020", "O. c #CDCD25252525", "+. c #CDCD26262626", "@. c #CECE2B2B2B2B", "#. c #CFCF2E2E2D2D", "$. c #CDCD32323232", "%. c #CFCF31313131", "&. c #CECE32323232", "*. c #CFCF36363636", "=. c #CFCF3B3B3B3B", "-. c #D0D038383737", ";. c #D2D238383939", ":. c #D2D23C3C3C3C", ">. c #D3D33F3F3F3F", ",. c #D3D344444444", "<. c #D7D749494747", "1. c #D7D74B4B4B4B", "2. c #D8D847474646", "3. c #D9D949494949", "4. c #D8D84A4A4949", "5. c #D9D94F4F4F4F", "6. c #DBDB4F4F4F4F", "7. c #DBDB51515050", "8. c #DADA51515252", "9. c #DADA52525252", "0. c #DBDB53535353", "q. c #DBDB54545454", "w. c #DDDD54545454", "e. c #DCDC58585757", "r. c #DCDC59595959", "t. c #DDDD58585858", "y. c #DDDD5B5B5A5A", "u. c #DEDE5C5C5C5C", "i. c #DBDB60606161", "p. c #DDDD63636363", "a. c #DEDE6F6F6E6E", "s. c #E1E16A6A6A6A", "d. c #E2E26F6F6F6F", "f. c #E2E272727373", "g. c #E4E476767676", "h. c #E4E479797979", "j. c #88889494DDDD", "k. c #80809595E3E3", "l. c #E5E581818080", "z. c #E5E59B9B9B9B", "x. c #E8E8A3A3A3A3", "c. c #EEEEDCDCDBDB", "v. c #F5F5DEDEDDDD", "b. c #F4F4DEDEDEDE", "n. c #F2F2E2E2E2E2", "m. c #F3F3E4E4E4E4", "M. c #F4F4E6E6E6E6", "N. c #F5F5E6E6E6E6", "B. c #F6F6E5E5E5E5", "V. c #F6F6E8E8E7E7", "C. c #F4F4EBEBEBEB", "Z. c #F7F7E8E8E8E8", "A. c #F7F7EDEDECEC", "S. c #F7F7F2F2F2F2", "D. c #F4F4F4F4F4F4", "F. c #F5F5F4F4F4F4", "G. c #F6F6F6F6F6F6", "H. c gray97", "J. c #F9F9F6F6F6F6", "K. c #F8F8F8F8F8F8", "L. c None", /* pixels */ "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "w 0 0 0 8 8 5 5 5 3 1 < < > ; ; ", "0 k.( ( / / ~ ~ W E I L H F A = ", "6 j.T Y U K J C B M b z h s V @ ", "[ h.u.t.q.9.1.p.i.:.;.%.@.+.,.` ", "[ g.t.w.9.l.t.b.b.<.a.#.+.o.>.` ", "[ f.9.5.7.V.x.M.M.z.n.%.X. .=._ ", "' d.5.3.e.K.V.K.S.n.D.*. .} *._ ", "' s.3.2.B.J.A.H.H.C.H.c.| { %.) ", "; Q N M v z h s i u y t r e g . ", "3 E L G F S Z n c x k f d a p o ", "1 > > ; = * * % $ $ @ O O o o o ", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L." }; springlobby-0.169/src/images/flags/KI.xpm0000600000176000000410000001031712105760300021602 0ustar buildbotwww-data00000000000000/* XPM */ static const char *KI_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 165 2", " c black", ". c #000000004F4F", "X c #000000005151", "o c #000000005B5B", "O c #000000005F5F", "+ c #000000006D6D", "@ c #000000007373", "# c #000007077777", "$ c #000000007F7F", "% c #01011F1F7373", "& c #090923237777", "* c #33332F2F6969", "= c #000023239191", "- c #131333338F8F", "; c #33334B4B9595", ": c #35354D4D9595", "> c #474757578585", ", c #45455B5B9F9F", "< c #53535F5F8D8D", "1 c #535361618B8B", "2 c #5B5B69699393", "3 c #53536969A9A9", "4 c #636371719999", "5 c #7F7F7B7BA5A5", "6 c #4E4E6F6FC9C9", "7 c #53537171C6C6", "8 c #52527171C9C9", "9 c #5B5B7878CACA", "0 c #5F5F7B7BCCCC", "q c #5F5F7C7CD0D0", "w c #63637C7CCACA", "e c #61617D7DCFCF", "r c #62627D7DCCCC", "t c #6A6A8484CDCD", "y c #63638080D1D1", "u c #6B6B8484D1D1", "i c #6E6E8888D1D1", "p c #70708989D1D1", "a c #70708989D3D3", "s c #70708B8BD6D6", "d c #7A7A9191D5D5", "f c #7E7E9494D7D7", "g c #7B7B9393D9D9", "h c #7D7D9797DBDB", "j c #B9B900000000", "k c #BBBB00000000", "l c #BFBF00000000", "z c #ADAD49494545", "x c #C1C100000000", "c c #C3C300000000", "v c #C7C700000000", "b c #CBCB00000000", "n c #CDCD00000000", "m c #CFCF00000000", "M c #D7D700000000", "N c #DBDB00000000", "B c #DDDD00000000", "V c #DFDF00000000", "C c #DDDD34342020", "Z c #DEDE39392525", "A c #DFDF3C3C2626", "S c #E3E300000000", "D c #E5E53E3E2B2B", "F c #E1E141412D2D", "G c #E1E141412E2E", "H c #E1E142422F2F", "J c #E3E343433131", "K c #E3E348483434", "L c #E3E348483535", "P c #E4E44C4C3A3A", "I c #E4E44D4D3B3B", "U c #E4E452523F3F", "Y c #E2E253534141", "T c #E2E257574545", "R c #E6E652524040", "E c #E7E755554545", "W c #E4E45B5B4A4A", "Q c #E8E85B5B4747", "! c #E9E95C5C4C4C", "~ c #E6E660604F4F", "^ c #E8E860604E4E", "/ c #EEEE60604F4F", "( c #E7E765655454", ") c #E5E56F6F5151", "_ c #EAEA63635252", "` c #EAEA63635353", "' c #EBEB63635353", "] c #EAEA65655454", "[ c #EBEB67675757", "{ c #ECEC67675858", "} c #E9E96F6F5555", "| c #E8E86A6A5B5B", " . c #EAEA6E6E5F5F", ".. c #ECEC6B6B5B5B", "X. c #EDED6E6E5E5E", "o. c #EDED6F6F5E5E", "O. c #EBEB71716363", "+. c #EDED70706060", "@. c #E8E87C7C6969", "#. c #EFEF83837575", "$. c #ECEC85857474", "%. c #F0F085857979", "&. c #F0F086867A7A", "*. c #F2F287877A7A", "=. c #F1F188887B7B", "-. c #F1F189897B7B", ";. c #F1F189897C7C", ":. c #F4F48A8A7B7B", ">. c #E7E7BBBB4848", ",. c #E9E9C2C25757", "<. c #EAEAC1C15656", "1. c #EBEBC3C35B5B", "2. c #E8E8DCDC5252", "3. c #EAEADEDE5757", "4. c #F1F1DDDD7A7A", "5. c #F2F2DDDD7E7E", "6. c #F2F2E3E35050", "7. c #F5F5E6E65555", "8. c #8D8D9999BBBB", "9. c #87879D9DDBDB", "0. c #8E8E9D9DD8D8", "q. c #8B8BA0A0DDDD", "w. c #9393A6A6DFDF", "e. c #9B9BACACDDDD", "r. c #9C9CACACDADA", "t. c #8B8BA4A4E1E1", "y. c #9191A5A5E0E0", "u. c #A9A9B7B7DFDF", "i. c #AAAAB9B9DFDF", "p. c #AFAFBCBCE2E2", "a. c #B2B2C0C0E6E6", "s. c #B3B3C1C1E7E7", "d. c #B7B7C3C3E6E6", "f. c #B9B9C5C5E8E8", "g. c #D7D78D8D8B8B", "h. c #EFEFDCDCBEBE", "j. c #F9F9C3C3BBBB", "k. c #C1C1CACAE4E4", "l. c #C3C3CDCDE6E6", "z. c #C6C6CDCDE6E6", "x. c #C0C0CCCCEBEB", "c. c #C8C8D0D0E9E9", "v. c #CBCBD3D3E8E8", "b. c #CBCBD3D3EAEA", "n. c #CDCDD5D5EBEB", "m. c #CECED7D7EDED", "M. c #D0D0D7D7EBEB", "N. c #D0D0D8D8EFEF", "B. c #D4D4DBDBEFEF", "V. c #D6D6DDDDF1F1", "C. c #D8D8DDDDF0F0", "Z. c #DEDEE3E3F3F3", "A. c #E4E4CECED2D2", "S. c #E2E2D4D4DADA", "D. c #EEEEDBDBDDDD", "F. c #F2F2CDCDC9C9", "G. c #F4F4CECECBCB", "H. c #FBFBCFCFC8C8", "J. c #F1F1D4D4CFCF", "K. c #F8F8D7D7D3D3", "L. c #E4E4E4E4DEDE", "P. c #F6F6EEEEDDDD", "I. c #E7E7E7E7E1E1", "U. c #F0F0E5E5E9E9", "Y. c None", /* pixels */ "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.", "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.", "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.", "B N N B N N M M M m m m b v c c ", "B ;.;.;.*.#.$.5.4.@.O. ...( ~ l ", "S -.+.X...] ] } ) E R I L G W l ", "B *.X...[ ` ! 1.<.U P K H A T j ", "S *.[ ] ` ! ,.3.2.>.J H Z C Y j ", "g.:.H.j./ K.P.7.6.h.G.D F.J.Q z ", "5 U.t.V.D.0.h I.L.q w A.w 6 S.* ", "8.y.V.a.s N.m.y e b.e.8 l.k.i < ", "= Z.g V.a.p u n.b.0 9 l.r.7 b.& ", "3 w.x.9.9.f.d.f d M.p.p i.u.t . ", "# , = : ; @ + 4 2 O o < % . > - ", "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.", "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y." }; springlobby-0.169/src/images/flags/KM.xpm0000600000176000000410000000762512105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char *KM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 152 2", " c black", ". c #000053530000", "X c #000059590000", "o c #000055551717", "O c #000067670000", "+ c #00006F6F0000", "@ c #00000000DDDD", "# c #00000000DFDF", "$ c #00000000E1E1", "% c #00000000E3E3", "& c #00000000E5E5", "* c #00000101E7E7", "= c #00000707E9E9", "- c #00000F0FEBEB", "; c #00001313EDED", ": c #00001B1BEDED", "> c #00003939C3C3", ", c #00002121EFEF", "< c #00002F2FF1F1", "1 c #6D6D6D6DA7A7", "2 c #595996963F3F", "3 c #4F4FA7A70000", "4 c #4040A0A04040", "5 c #4141A1A14040", "6 c #4646A3A34646", "7 c #4F4FA7A75151", "8 c #5050A9A95050", "9 c #5353A9A95353", "0 c #5C5CB0B05D5D", "q c #7D7D9B9B7474", "w c #6060B1B15F5F", "e c #6363AFAF7171", "r c #6868B5B56666", "t c #6C6CB6B66B6B", "y c #7474B9B97373", "u c #7B7BBCBC7A7A", "i c #6E6EA7A7BDBD", "p c #4D4D8A8AF2F2", "a c #4F4F8C8CF2F2", "s c #52528F8FF3F3", "d c #55559090F3F3", "f c #59599393F4F4", "g c #5C5C9595F5F5", "h c #60609898F6F6", "j c #64649B9BF7F7", "k c #68689E9EF7F7", "l c #6B6B9F9FF8F8", "z c #7373A2A2F9F9", "x c #7979A3A3F9F9", "c c #B3B300000000", "v c #B5B500000000", "b c #B3B36E6E3A3A", "n c #DADA2E2E1414", "m c #DBDB35351010", "M c #DBDB31311919", "N c #DDDD36361F1F", "B c #DCDC39391414", "V c #DEDE3D3D1919", "C c #DEDE3B3B2424", "Z c #E1E13F3F2A2A", "A c #DFDF41411F1F", "S c #DEDE4B4B3636", "D c #D3D356563535", "F c #E1E146462424", "G c #E4E445452F2F", "H c #E2E24B4B2A2A", "J c #E8E84E4E2F2F", "K c #E0E052523232", "L c #EDED51513434", "P c #828281813A3A", "I c #8080A5A56262", "U c #9D9DCFCF5C5C", "Y c #8E8EC8C87B7B", "T c #E7E7D6D60000", "R c #EAEAD3D30000", "E c #EBEBD4D40000", "W c #ECECD5D50000", "Q c #EDEDD6D60000", "! c #EEEED7D70000", "~ c #EFEFD8D80000", "^ c #F0F0D9D90000", "/ c #F1F1DADA0000", "( c #F2F2DBDB0000", ") c #D4D4EAEA7B7B", "_ c #F7F7F7F74E4E", "` c #F8F8F8F85353", "' c #F9F9F9F95757", "] c #FAFAFAFA5C5C", "[ c #F6F6F6F66060", "{ c #F7F7F7F76464", "} c #FBFBFBFB6060", "| c #FCFCFCFC6565", " . c #F8F8F8F86969", ".. c #F9F9F9F96D6D", "X. c #FCFCFCFC6969", "o. c #FDFDFDFD6D6D", "O. c #F7F7F7F77575", "+. c #F3F3F9F97979", "@. c #FAFAFAFA7171", "#. c #FBFBFBFB7575", "$. c #FDFDFDFD7171", "%. c #FEFEFEFE7474", "&. c #FEFEFEFE7777", "*. c #FCFCFCFC7979", "=. c #FEFEFEFE7979", "-. c #FDFDFDFD7D7D", ";. c #88888282BEBE", ":. c #88888484BEBE", ">. c #97978787B5B5", ",. c #89898585C0C0", "<. c #89898686C1C1", "1. c #8A8A8787C2C2", "2. c #8B8B8989C4C4", "3. c #8B8B8A8AC5C5", "4. c #8B8B8B8BC7C7", "5. c #8D8D8C8CC7C7", "6. c #8E8E8D8DC9C9", "7. c #9B9BCDCD9E9E", "8. c #B9B9DDDDB9B9", "9. c #DBDBA5A59797", "0. c #FDFDFDFD8686", "q. c #CACAE4E4CACA", "w. c #CECEE7E7CECE", "e. c #CFCFE7E7CFCF", "r. c #D3D3E8E8D3D3", "t. c #DCDCEDEDDCDC", "y. c #EFEFD3D3CCCC", "u. c #F1F1D5D5CECE", "i. c #F1F1D7D7D0D0", "p. c #F1F1D8D8D3D3", "a. c #F2F2D9D9D2D2", "s. c #F3F3D9D9D3D3", "d. c #F4F4DBDBD4D4", "f. c #E7E7E7E7E7E7", "g. c #E8E8F3F3E8E8", "h. c #EAEAF3F3EAEA", "j. c #E8E8F4F4E8E8", "k. c #EBEBF4F4EBEB", "l. c #EEEEF7F7EEEE", "z. c #ECECF8F8F2F2", "x. c #F4F4F4F4F4F4", "c. c #F5F5F5F5F4F4", "v. c gray96", "b. c #F6F6F6F6F5F5", "n. c #F6F6F6F6F6F6", "m. c gray97", "M. c #F8F8F8F8F8F8", "N. c #F9F9F9F9F9F9", "B. c gray98", "V. c #FBFBFBFBFBFB", "C. c gray99", "Z. c None", /* pixels */ "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "3 T ( ( ( ( ( ( ( ( ! ( ! W W W ", "O Y ) &.&.%.%.o.o.| } ] ' ` _ W ", "+ u t U +.0.-.*.@.@.....{ [ O.R ", "X u k.t.y w.C.V.V.V.n.n.b.b.b.f.", "X k.l.0 w.7 7.z.V.b.n.b.x.b.b.f.", "X k.8.9 k.6 4 I s.p.i.i.u.y.i.9.", "X k.k.8 q.4 P D G Z C C M n S c ", "X r g.e.2 b L J H F A B B m K v ", "X r r q >.5.5.2.2.1.1.1.;.;.4.1 ", ". e i x z l k j h g f d s a p @ ", "o > < , : ; - = * * $ $ $ @ @ @ ", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z." }; springlobby-0.169/src/images/flags/KN.xpm0000600000176000000410000000743712105760300021620 0ustar buildbotwww-data00000000000000/* XPM */ static const char *KN_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 146 2", " c black", ". c #353535353535", "X c gray21", "o c #3B3B3B3B3A3A", "O c gray23", "+ c #3B3B3B3B3C3C", "@ c #00006F6F0000", "# c #000073730000", "$ c #000079790000", "% c #00007D7D0000", "& c #00007F7F0000", "* c #4D4D2F2F0000", "= c #44443F3F2C2C", "- c #4D4D49492F2F", "; c #494943433030", ": c #4A4A45453030", "> c #4E4E48483434", ", c #51514C4C3636", "< c #55554E4E3C3C", "1 c #565650502F2F", "2 c #404040404848", "3 c #4E4E4E4E4E4E", "4 c #565650504040", "5 c #5A5A54544040", "6 c #595954544444", "7 c #535353535353", "8 c #545452525151", "9 c #61615A5A4040", "0 c #64645F5F4141", "q c #656561614949", "w c #656563635D5D", "e c #6A6A66665757", "r c #6D6D69695858", "t c #74746F6F4242", "y c #71716B6B5555", "u c #696967676262", "i c #000081810000", "p c #000083830000", "a c #000085850000", "s c #000087870000", "d c #000089890000", "f c #000091910000", "g c #01019B9B0000", "h c #4C4CB4B44C4C", "j c #5353BBBB4B4B", "k c #5353BBBB4F4F", "l c #5050B5B55050", "z c #5151B5B55151", "x c #5151B7B75151", "c c #5353B6B65353", "v c #5454B9B95454", "b c #5454BABA5454", "n c #5858BCBC5858", "m c #5858BCBC5959", "M c #5959BCBC5959", "N c #5C5CBDBD5C5C", "B c #5C5CBEBE5C5C", "V c #5F5FBFBF5F5F", "C c #6969BFBF6969", "Z c #6D6DC8C84F4F", "A c #7676CCCC4747", "S c #7373CACA4B4B", "D c #6D6DC3C36D6D", "F c #6F6FC2C26F6F", "G c #7171C7C76565", "H c #7070C5C57171", "J c #7272C6C67373", "K c #7474C7C77474", "L c #7676C8C87676", "P c #7777C8C87777", "I c #7979C8C87979", "U c #7979C9C97979", "Y c #7B7BCACA7A7A", "T c #7B7BCACA7B7B", "R c #DDDD00000000", "E c #DFDF00000000", "W c #E1E100000000", "Q c #E3E300000000", "! c #E5E500000000", "~ c #E7E700000000", "^ c #E9E900000000", "/ c #EBEB00000000", "( c #EDED00000000", ") c #F1F10B0B0B0B", "_ c #F1F10F0F0E0E", "` c #F2F210101010", "' c #F2F213131313", "] c #F2F214141414", "[ c #F3F319191919", "{ c #F3F31A1A1A1A", "} c #F4F41E1E1E1E", "| c #F4F41F1F1F1F", " . c #EDED3B3B0000", ".. c #F4F429291F1F", "X. c #F5F523232323", "o. c #F2F22C2C2C2C", "O. c #F2F22F2F2F2F", "+. c #F5F536362424", "@. c #F2F232323232", "#. c #F3F332323232", "$. c #F3F335353535", "%. c #F4F436363636", "&. c #F4F439393939", "*. c #F4F43B3B3B3B", "=. c #F5F53D3D3D3D", "-. c #F5F53F3F3F3F", ";. c #C7C76D6D0000", ":. c #F4F451512020", ">. c #F6F642424242", ",. c #F7F746464646", "<. c #9F9FA7A70000", "1. c #9D9DBFBF0000", "2. c #BABAB1B12B2B", "3. c #868681815C5C", "4. c #868682826666", "5. c #8C8C88887979", "6. c #8C8C88887B7B", "7. c #BABADBDB4747", "8. c #BABADDDD4B4B", "9. c #CFCFBEBE2626", "0. c #D3D3BABA2E2E", "q. c #F5F58B8B2424", "w. c #F6F693932929", "e. c #F4F4B9B92525", "r. c #F4F4BEBE2A2A", "t. c #F7F78E8E4B4B", "y. c #E6E6C3C32525", "u. c #E3E3C5C52A2A", "i. c #C6C6C4C44646", "p. c #C7C7C8C84949", "a. c #CACAD3D34242", "s. c #C9C9D7D74646", "d. c #C9C9DADA4949", "f. c #C3C3E2E26A6A", "g. c #C8C8E0E06060", "h. c #F6F6C1C14444", "j. c #F2F2CACA5050", "k. c #878787878D8D", "l. c #8B8B8A8A8A8A", "z. c #9D9D9A9A8E8E", "x. c #A0A09C9C8A8A", "c. c #DADADADADADA", "v. c #DFDFDFDFE0E0", "b. c #E9E9E8E8E8E8", "n. c #EAEAEAEAECEC", "m. c None", /* pixels */ "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "f d d d a p p & $ # # g <. ", "a T T T K J F D C G g.3.e 7 3 ", "d T V N N b c h A a.0 c.2 = q ;.", "a T N N v c j 7.t < k.n.6.9.h.~ ", "d L b b h S s.0 + X ; 6.y.:.-.~ ", "p J v k 8.i.< O X : 2.e...[ &.~ ", "& F Z d.x.4 + X > u.q...[ ' %.Q ", "& f.p.z.n.l.> 1 r.+.} [ ' ' @.E ", "1.4.6 8 c., 0.w.X.} [ ' _ ) O.E ", " u w r y j.t.,.>.=.&.$.@.O.o.E ", " * .( / / ~ ~ Q Q E E R R ", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m." }; springlobby-0.169/src/images/flags/KP.xpm0000600000176000000410000001014112105760300021604 0ustar buildbotwww-data00000000000000/* XPM */ static const char *KP_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 160 2", " c black", ". c #00000B0BDDDD", "X c #00000F0FDDDD", "o c #00001111DFDF", "O c #00001919DDDD", "+ c #00001717E1E1", "@ c #00001D1DE3E3", "# c #00002121E5E5", "$ c #00002525E7E7", "% c #00002B2BE9E9", "& c #00003131EBEB", "* c #00003737EDED", "= c #00003F3FEDED", "- c #00004343EFEF", "; c #00004949EFEF", ": c #00004949F1F1", "> c #00004F4FF3F3", ", c #00005555F5F5", "< c #00005B5BF7F7", "1 c #03035F5FF5F5", "2 c #05055F5FF9F9", "3 c #0B0B6363FBFB", "4 c #11116767FDFD", "5 c #17176D6DFDFD", "6 c #1B1B6F6FFDFD", "7 c #21217373FDFD", "8 c #25257575FFFF", "9 c #31317D7DFFFF", "0 c #7F7FA3A3DDDD", "q c #C7C700000000", "w c #CDCD00000000", "e c #CFCF00000000", "r c #D1D100000000", "t c #D5D500000000", "y c #D7D700000000", "u c #E9E900000000", "i c #EDED00000000", "p c #EFEF00000000", "a c #E7E710101010", "s c #E7E714141414", "d c #E9E914141414", "f c #E8E819191919", "g c #E8E81A1A1A1A", "h c #EAEA19191919", "j c #E9E91F1F1F1F", "k c #EBEB1F1F1F1F", "l c #F1F100000000", "z c #F1F100000101", "x c #E6E623232323", "c c #E6E627272727", "v c #E9E920202020", "b c #EBEB24242424", "n c #EBEB25252525", "m c #ECEC24242424", "M c #EDED26262626", "N c #E8E82B2B2B2B", "B c #ECEC2A2A2A2A", "V c #ECEC2B2B2B2B", "C c #EEEE2A2A2A2A", "Z c #EEEE2B2B2B2B", "A c #EDED2F2F2F2F", "S c #E9E930303030", "D c #EBEB32323232", "F c #E9E936363636", "G c #EAEA34343434", "H c #EDED30303030", "J c #EFEF31313131", "K c #EFEF34343434", "L c #EFEF36363636", "P c #EBEB3B3B3B3B", "I c #ECEC39393939", "U c #ECEC3F3F3F3F", "Y c #EDED3E3E3E3E", "T c #F0F037373636", "R c #F0F03B3B3C3C", "E c #F1F13C3C3C3C", "W c #E9E943434343", "Q c #EDED41414242", "! c #EEEE44444444", "~ c #ECEC4A4A4C4C", "^ c #EEEE4D4D4D4D", "/ c #EDED50505151", "( c #EFEF54545656", ") c #F2F241414242", "_ c #F3F347474747", "` c #F0F048484848", "' c #F0F04E4E4E4E", "] c #F2F24D4D4D4D", "[ c #F0F051515252", "{ c #F0F059595B5B", "} c #F2F258585858", "| c #F1F15E5E5F5F", " . c #EEEE64646565", ".. c #F2F261616161", "X. c #F2F261616363", "o. c #F2F265656565", "O. c #F3F366666767", "+. c #F4F469696969", "@. c #F7F76A6A6A6A", "#. c #F6F66F6F6F6F", "$. c #F4F46E6E7171", "%. c #F4F472727272", "&. c #F4F472727373", "*. c #F7F772727373", "=. c #F5F576767676", "-. c #F6F674747575", ";. c #F7F776767676", ":. c #F6F677777979", ">. c #F8F879797979", ",. c #F9F979797979", "<. c #9D9DBBBBEBEB", "1. c #B3B3CDCDF7F7", "2. c #F6F685858484", "3. c #F5F58A8A8A8A", "4. c #F7F78C8C8C8C", "5. c #F8F88F8F8F8F", "6. c #F7F799999999", "7. c #F9F9A3A3A3A3", "8. c #C1C1D9D9FFFF", "9. c #CBCBD9D9F2F2", "0. c #CBCBDADAF2F2", "q. c #CDCDDBDBF3F3", "w. c #CECEDCDCF3F3", "e. c #D0D0DDDDF4F4", "r. c #D1D1DEDEF5F5", "t. c #D3D3E0E0F6F6", "y. c #D4D4E1E1F7F7", "u. c #D6D6E2E2F7F7", "i. c #D7D7E3E3F7F7", "p. c #D8D8E4E4F8F8", "a. c #D8D8E5E5F8F8", "s. c #D9D9E6E6F9F9", "d. c #DADAE6E6F9F9", "f. c #DADAE7E7F9F9", "g. c #DCDCE8E8FAFA", "h. c #DDDDE8E8FBFB", "j. c #DEDEE9E9FCFC", "k. c #DFDFEBEBFCFC", "l. c #F8F8C2C2C2C2", "z. c #FAFAC5C5C5C5", "x. c #FBFBC8C8C7C7", "c. c #FBFBC8C8C8C8", "v. c #FBFBC9C9C9C9", "b. c #FAFACACACACA", "n. c #F9F9D3D3D3D3", "m. c #FBFBD2D2D2D2", "M. c #FBFBDDDDDCDC", "N. c #FAFADEDEDEDE", "B. c #E1E1ECECFDFD", "V. c #E2E2EDEDFEFE", "C. c #E4E4EEEEFEFE", "Z. c #E5E5EEEEFEFE", "A. c #E5E5EFEFFFFF", "S. c #F9F9E1E1E1E1", "D. c #F9F9E3E3E2E2", "F. c #FDFDE1E1E1E1", "G. c #F9F9E8E8E8E8", "H. c #F9F9EAEAEAEA", "J. c #FCFCE8E8E8E8", "K. c None", /* pixels */ "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "9 8 8 8 7 6 5 4 3 2 < , > : - ; ", "8.A.A.A.V.V.V.V.k.j.g.g.d.d.u.<.", "z 5.:.;.$.&.O.O.X.| { ( / ~ .t ", "z ,.,.x.J.F.5._ ) E L J Z M ! t ", "p ;.x.7.z.6.N.] Y L A Z M v U r ", "p *.M.m.%.n.G.X.T A Z n k f P w ", "p #.z.2.l.3.S._ A Z b k f s F w ", "p +.+.b.S.G.O.T Z m k h s a D w ", "u =.{ [ ^ ^ Q U F G S N c x W q ", "1.g.g.a.d.d.t.t.t.e.e.w.q.0.0.0 ", "3 > : - = * & % $ # @ + o X . O ", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K." }; springlobby-0.169/src/images/flags/KR.xpm0000600000176000000410000000633312105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char *KR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 124 2", " c black", ". c #565656565656", "X c #585858585858", "o c gray39", "O c #676766666666", "+ c DimGray", "@ c gray42", "# c #777777777777", "$ c #7C7C7B7B7C7C", "% c #7E7E7E7E7E7E", "& c gray50", "* c #2A2A6666D6D6", "= c #3A3A6D6DD5D5", "- c #3A3A7676DDDD", "; c #3C3C7272D9D9", ": c #65656E6EBEBE", "> c #4B4B6767C5C5", ", c #55556969C2C2", "< c #58586F6FC7C7", "1 c #6D6D9292DCDC", "2 c #7A7AA1A1E6E6", "3 c #E7E736363D3D", "4 c #EEEE3D3D4343", "5 c #E3E343434F4F", "6 c #E8E842424949", "7 c #FAFA41414141", "8 c #FAFA44444242", "9 c #FBFB46464646", "0 c #FBFB4A4A4A4A", "q c #F9F978787575", "w c #C6C679799393", "e c gray53", "r c gray55", "t c gray62", "y c #ABABAAAAA7A7", "u c #AAAAA9A9A8A8", "i c #ADADAFAFAFAF", "p c #AEAEAEAEAEAE", "a c #ADADB0B0B0B0", "s c #B1B1B1B1B1B1", "d c #BABAB9B9BABA", "f c #BBBBBBBBBBBB", "g c #B5B59D9DC3C3", "h c #A3A3ACACD9D9", "j c #AAAAC4C4F0F0", "k c #FCFC8A8A8A8A", "l c #F7F796969595", "z c #F3F3B1B1B5B5", "x c gray76", "c c #C5C5C5C5C5C5", "v c #C6C6C6C6C6C6", "b c #C8C8C8C8C8C8", "n c #CBCBCBCBCBCB", "m c #CBCBD1D1CFCF", "M c #CBCBD1D1D1D1", "N c #CBCBD3D3D1D1", "B c #CFCFD3D3D1D1", "V c #CFCFD5D5D3D3", "C c #CFCFD7D7D5D5", "Z c #D0D0D0D0CDCD", "A c #D3D3D3D3D1D1", "S c #D1D1D7D7D5D5", "D c #D5D5D5D5D5D5", "F c #D7D7D7D7D7D7", "G c #D1D1D9D9D7D7", "H c #D3D3D9D9D9D9", "J c #D5D5DBDBD9D9", "K c #D7D7DBDBDBDB", "L c #D7D7DFDFDDDD", "P c gray85", "I c #D8D8DADADBDB", "U c #DADAD9D9DADA", "Y c #DADADADADADA", "T c #DBDBDADADADA", "R c #DADADCDCDCDC", "E c #DFDFDFDFDFDF", "W c #C5C5D2D2ECEC", "Q c #C9C9D5D5EDED", "! c #D9D9E1E1DFDF", "~ c #DDDDE3E3E1E1", "^ c #DFDFE5E5E3E3", "/ c #FBFBD6D6D6D6", "( c #FCFCDADADADA", ") c #E1E1E7E7E5E5", "_ c #E7E7E7E7E7E7", "` c #E3E3E9E9E9E9", "' c #E5E5EBEBEBEB", "] c #E7E7EDEDEDED", "[ c gray91", "{ c #E9E9E9E9E9E9", "} c #E9E9E9E9EAEA", "| c #EAEAEAEAEAEA", " . c #E9E9EEEEEEEE", ".. c #E9E9EFEFEFEF", "X. c #EDEDECECE8E8", "o. c #E8E8EEEEF4F4", "O. c #EBEBF1F1EFEF", "+. c #EBEBF1F1F1F1", "@. c #EDEDF1F1F1F1", "#. c #EDEDF3F3F3F3", "$. c #EFEFF5F5F3F3", "%. c gray95", "&. c #F2F2F2F2F3F3", "*. c #F3F3F3F3F3F3", "=. c #F1F1F7F7F5F5", "-. c #F2F2F5F5F5F5", ";. c #F5F5F4F4F3F3", ":. c #F4F4F4F4F4F4", ">. c #F4F4F5F5F5F5", ",. c gray96", "<. c #F6F6F6F6F6F6", "1. c gray97", "2. c #F2F2F4F4F9F9", "3. c #F8F8F0F0F0F0", "4. c #FDFDF6F6F5F5", "5. c #F8F8F8F8F8F8", "6. c gray98", "7. c #FBFBFBFBFBFB", "8. c gray99", "9. c #FDFDFDFDFDFD", "0. c #FDFDFDFDFEFE", "q. c #FEFEFEFEFEFE", "w. c gray100", "e. c None", /* pixels */ "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "=.=.=.=.=.=.=.@.@.O...] ' ` ) ^ ", "=.w.w.F v :.w.8.5.w.*.d b 5.5.~ ", "=.w.{ r $ R w.( / 7.P O # P 1.! ", "=.w.P e i 4.k 0 8 q 3.a o x :.! ", "=.w.w._ =.z 9 4 4 3 l ..P :.:.J ", "@.w.w.7.w.g 6 5 : > w :.:.:.:.G ", "@.w.7.{ *.j , < - * h X.P *.:.S ", "@.8.F % u 2.2 ; = 1 o.u X f :.V ", "+.8.E % @ A <.Q W &.Z . @ b %.N ", "+.8.5.v i { 1.:.<.:.' t s %.%.N ", "] ` ` ^ ^ ~ ~ L I J S C B V N n ", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e." }; springlobby-0.169/src/images/flags/KW.xpm0000600000176000000410000000715312105760300021624 0ustar buildbotwww-data00000000000000/* XPM */ static const char *KW_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 141 2", " c black", ". c #000041410000", "X c #000049490000", "o c #000051510000", "O c #000055550000", "+ c #000059590000", "@ c #00005F5F0000", "# c #000065650000", "$ c #00006B6B0000", "% c #00006F6F0000", "& c #000073730000", "* c #000075750000", "= c #000079790000", "- c #00007D7D0000", "; c #484849494545", ": c #4D4D49494444", "> c #494949494949", ", c #49494A4A4949", "< c gray31", "1 c #535353535353", "2 c gray33", "3 c #585858585858", "4 c #58585F5F5959", "5 c gray36", "6 c #5F5F69695F5F", "7 c #646467676262", "8 c gray40", "9 c #6A6A6A6A6A6A", "0 c #6F6F6F6F6F6F", "q c #727272727373", "w c #767676767676", "e c #797979797979", "r c #7B7B7B7B7A7A", "t c #000081810000", "y c #000089890000", "u c #000091910000", "i c #2C2CA5A52C2C", "p c #3131A8A83131", "a c #3737AAAA3737", "s c #3D3DADAD3D3D", "d c #4F4FA9A94F4F", "f c #4242B0B04242", "g c #4747B3B34747", "h c #4949B1B14949", "j c #4C4CB5B54C4C", "k c #4E4EB4B44E4E", "l c #5C5CA9A95C5C", "z c #5151B7B75151", "x c #5353B7B75353", "c c #5454B9B95454", "v c #5858B9B95757", "b c #5959BCBC5959", "n c #5C5CBBBB5C5C", "m c #7B7B87877B7B", "M c #6161BEBE6060", "N c #6565C0C06565", "B c #6969C2C26969", "V c #6D6DC3C36D6D", "C c #7070C5C57171", "Z c #7474C7C77474", "A c #7777C8C87777", "S c #7B7BC3C37B7B", "D c #7979CDCD7979", "F c #C7C700000000", "G c #C9C900000000", "H c #CDCD00000000", "J c #CFCF00000000", "K c #D1D100000000", "L c #D5D500000000", "P c #D7D700000000", "I c #DBDB00000000", "U c #DDDD00000000", "Y c #DFDF00000000", "T c #C5C53F3F3F3F", "R c #E5E50B0B0B0B", "E c #E5E50F0F0E0E", "W c #E7E713131313", "Q c #E8E819191919", "! c #E9E91E1E1E1E", "~ c #F1F100000000", "^ c #EBEB23232323", "/ c #E8E82C2C2C2C", "( c #E8E82F2F2F2F", ") c #E9E92F2F2F2F", "_ c #ECEC29292929", "` c #EDED2E2E2E2E", "' c #E9E932323232", "] c #EAEA35353535", "[ c #EEEE34343434", "{ c #ECEC39393939", "} c #EDED3D3D3D3D", "| c #F8F83A3A3A3A", " . c #D7D745454545", ".. c #EDED42424242", "X. c #EEEE46464646", "o. c #EFEF4B4B4B4B", "O. c #E1E15D5D5D5D", "+. c #F0F050505050", "@. c #F1F154545555", "#. c #F9F958585858", "$. c #AEAECECEAEAE", "%. c #A8A8D6D6A8A8", "&. c #AAAAD8D8AAAA", "*. c #ADADDADAADAD", "=. c #B0B0DBDBAFAF", "-. c #B3B3DBDBB3B3", ";. c #B2B2DDDDB2B2", ":. c #B4B4DEDEB4B4", ">. c #B7B7DFDFB7B7", ",. c #B9B9E1E1B9B9", "<. c #BCBCE3E3BCBC", "1. c #D9D9A4A4A4A4", "2. c #EEEEA2A2A2A2", "3. c #EFEFA4A4A4A4", "4. c #EFEFA6A6A6A6", "5. c #F1F1A9A9A9A9", "6. c #F2F2ABABABAB", "7. c #F0F0AEAEAEAE", "8. c #F3F3AEAEAEAE", "9. c #F4F4B0B0B1B1", "0. c #F5F5B3B3B3B3", "q. c #F8F8B6B6B6B6", "w. c #DDDDDFDFDFDF", "e. c gray88", "r. c #E2E2E0E0E2E2", "t. c gray89", "y. c gray90", "u. c #E7E7E7E7E7E7", "i. c gray95", "p. c #F3F3F3F3F3F3", "a. c #F4F4F4F4F4F4", "s. c #F4F4F5F5F5F5", "d. c gray96", "f. c #F6F6F6F6F6F6", "g. c gray97", "h. c #F8F8F8F8F8F8", "j. c #F9F9F9F9F9F9", "k. c gray98", "l. c #FBFBFBFBFBFB", "z. c gray99", "x. c None", /* pixels */ "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", " y u y t - = * & % $ # @ + O o ", " m M %.B V C V V M M n v z k X ", " r 6 l b x z j g f s a p i h . ", " r 5 6 $.<.,.>.:.;.=.*.%.%.-.d ", " w 2 2 e.z.l.k.k.k.g.f.f.f.f.u.", " q 1 < w.k.k.k.g.f.f.f.p.p.f.t.", " 0 < > w.k.k.h.g.f.f.a.i.i.f.t.", " 9 > ; 1.q.0.9.8.6.5.4.3.2.7. .", " 8 : T | [ ` _ ^ ! Q W E R ( F ", " 7 O.#.@.+.o.X...} { ] ' ( ( F ", " I ~ U U I L I L K K K H F F F ", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x." }; springlobby-0.169/src/images/flags/KY.xpm0000600000176000000410000000770712105760300021633 0ustar buildbotwww-data00000000000000/* XPM */ static const char *KY_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 153 2", " c black", ". c #000000000303", "X c #000000000B0B", "o c #000000001111", "O c #000000001919", "+ c #000000001F1F", "@ c #000000002525", "# c #000000002727", "$ c #000000002D2D", "% c #000000002F2F", "& c #000000003131", "* c #000000003333", "= c #000000003939", "- c #000000003B3B", "; c #000000003F3F", ": c #000000004949", "> c #000009096363", ", c #00001D1D7575", "< c #272733337373", "1 c #303043437F7F", "2 c #3B3B4E4E7F7F", "3 c #575739396565", "4 c #77772D2D4F4F", "5 c #7F7F2F2F4F4F", "6 c #71713D3D6161", "7 c #75753D3D6161", "8 c #5D5D66666F6F", "9 c #606070704949", "0 c #636374744D4D", "q c #646473735050", "w c #6F6F7E7E5D5D", "e c #6A6A72727777", "r c #23233D3D8282", "t c #2A2A41418787", "y c #292944448585", "u c #2C2C43438585", "i c #2D2D44448686", "p c #2F2F40408888", "a c #2E2E48488989", "s c #2F2F49498989", "d c #2E2E4B4B8E8E", "f c #303042428888", "g c #36364E4E8787", "h c #353548488B8B", "j c #34344D4D8D8D", "k c #34344E4E8D8D", "l c #37374E4E8C8C", "z c #3B3B4E4E8686", "x c #39394B4B8F8F", "c c #3A3A4E4E8B8B", "v c #3B3B4D4D8D8D", "b c #3B3B4F4F8D8D", "n c #36364C4C9090", "m c #3B3B52528989", "M c #3D3D54548F8F", "N c #3A3A52529090", "B c #3C3C52529191", "V c #3F3F55559292", "C c #3F3F57579393", "Z c #3F3F55559494", "A c #414154548383", "S c #474759598787", "D c #4C4C5E5E8B8B", "F c #404057579393", "G c #404058589393", "H c #424259599393", "J c #424258589595", "K c #44445A5A9595", "L c #464659599797", "P c #44445C5C9797", "I c #45455C5C9797", "U c #46465E5E9696", "Y c #41415C5C9999", "T c #45455B5B9898", "R c #48485C5C9595", "E c #49495F5F9898", "W c #494960609A9A", "Q c #494960609B9B", "! c #4B4B60609999", "~ c #4E4E64649B9B", "^ c #4F4F64649D9D", "/ c #525261619696", "( c #505065659C9C", ") c #545469699E9E", "_ c #53536868A3A3", "` c #54546969A0A0", "' c #58586D6DA2A2", "] c #5D5D7272A4A4", "[ c #67676F6F9B9B", "{ c #7E7E70709797", "} c #7F7F74749B9B", "| c #61617575A7A7", " . c #61617474A9A9", ".. c #65657777A8A8", "X. c #64647A7AA9A9", "o. c #66667A7AAAAA", "O. c #6D6D7B7BA0A0", "+. c #6D6D7A7AA2A2", "@. c #6B6B7C7CACAC", "#. c #6A6A7E7EADAD", "$. c #6F6F7F7FAEAE", "%. c #737381815959", "&. c #777784845E5E", "*. c #7C7C9292BABA", "=. c #7F7F9595BCBC", "-. c #B5B571717F7F", ";. c #CBCB32322E2E", ":. c #C3C333333939", ">. c #D1D142423D3D", ",. c #C0C065656B6B", "<. c #C2C269696F6F", "1. c #E0E077777B7B", "2. c #8D8D7F7FA1A1", "3. c #ACAC9C9C6E6E", "4. c #B0B099997878", "5. c #B2B29D9D7F7F", "6. c #B7B7A1A16E6E", "7. c #CECE96966D6D", "8. c #C0C0A0A06565", "9. c #CCCCA3A37373", "0. c #CACAACAC7272", "q. c #8B8B8E8EB2B2", "w. c #9C9C9797B4B4", "e. c #9797AAAACBCB", "r. c #BFBFCACADADA", "t. c #C3C38E8E9E9E", "y. c #DEDE86868B8B", "u. c #C0C09090A1A1", "i. c #D3D39797A0A0", "p. c #D7D7BFBF9595", "a. c #CBCBACACB5B5", "s. c #D8D8A9A9B3B3", "d. c #D0D0B4B4BCBC", "f. c #D9D9B5B5BEBE", "g. c #DADAB5B5BEBE", "h. c #E4E480808484", "j. c #E8E88A8A8C8C", "k. c #E0E08E8E9393", "l. c #E0E093939898", "z. c #EAEA92929393", "x. c #E6E69F9FA4A4", "c. c #F1F1B3B3B4B4", "v. c #F1F1B6B6B6B6", "b. c #DADABFBFCACA", "n. c #C1C1CBCBDBDB", "m. c #C3C3CDCDDDDD", "M. c #C5C5CFCFDEDE", "N. c #DFDFC2C2CACA", "B. c #E2E2C1C1C8C8", "V. c #E4E4C9C9D1D1", "C. c #E4E4D3D3DCDC", "Z. c #E2E2D9D9E2E2", "A. c None", /* pixels */ "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "-.2., 4 5 > 6 @ ; = & % @ + O o ", "< N.Z.g.s.b.C.O.@.o.| O.p.` ^ X ", ":.x.z.h.1.j.y.D / J T &.%.d E ", "7 B.c.k.l.v.i.S U M >.7.9.;.K ", "[ V.w.u.t.e.g.A M n s.,.-.a.Z ", "3 q._ } { T X.2 v f w q.*.q N ", ": *.^ W T C m h h i M.M.r.r.l ", "= o.W T C N k a r 4.0.0 9 6.t. ", "= o.T Z N l a y r i e 6.3.8 m ", "& | ] ' ) ( ! W H V v m 2 i i ", "% @ @ O o X ", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A." }; springlobby-0.169/src/images/flags/KZ.xpm0000600000176000000410000001024312105760300021621 0ustar buildbotwww-data00000000000000/* XPM */ static const char *KZ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 163 2", " c black", ". c #00007F7FDDDD", "X c #00008181DDDD", "o c #00008383DFDF", "O c #00008585DFDF", "+ c #00008787DDDD", "@ c #00008787DFDF", "# c #00008585E1E1", "$ c #00008787E3E3", "% c #00008989E3E3", "& c #00008B8BE5E5", "* c #00008F8FE7E7", "= c #00009595E7E7", "- c #00009393E9E9", "; c #00009797E9E9", ": c #00009797EBEB", "> c #00009D9DEBEB", ", c #00009D9DEDED", "< c #0000A1A1EFEF", "1 c #0000A3A3EDED", "2 c #0000A7A7EFEF", "3 c #0000ABABF1F1", "4 c #0000AFAFF3F3", "5 c #0000ADADF5F5", "6 c #0000B1B1F7F7", "7 c #0000B3B3F9F9", "8 c #0000B5B5F9F9", "9 c #0000B5B5FBFB", "0 c #0000B9B9FDFD", "q c #0000BBBBFDFD", "w c #0000BDBDFDFD", "e c #0000BFBFFDFD", "r c #0303BFBFFFFF", "t c #0909C3C3FFFF", "y c #0F0FC3C3FDFD", "u c #1313C3C3FFFF", "i c #3838C2C2F1F1", "p c #3B3BC6C6F2F2", "a c #3C3CC4C4F1F1", "s c #3D3DC4C4F2F2", "d c #7878C7C7B2B2", "f c #4141C6C6F2F2", "g c #4545C8C8F3F3", "h c #4646C8C8F3F3", "j c #4A4ACACAF4F4", "k c #4B4BCACAF4F4", "l c #4F4FCCCCF5F5", "z c #5E5ECECEE7E7", "x c #5353CACAF2F2", "c c #5050CDCDF5F5", "v c #5555CACAF2F2", "b c #5656CBCBF2F2", "n c #5454CECEF6F6", "m c #5555CECEF6F6", "M c #5555CFCFF7F7", "N c #5858CCCCF3F3", "B c #5959CCCCF3F3", "V c #5B5BCDCDF3F3", "C c #5C5CCDCDF4F4", "Z c #5E5ECFCFF4F4", "A c #5353D0D0F7F7", "S c #5959D0D0F7F7", "D c #5B5BD1D1F8F8", "F c #5C5CD2D2F8F8", "G c #5F5FD3D3F9F9", "H c #7272CBCBC9C9", "J c #7C7CD1D1D0D0", "K c #7E7ED3D3D4D4", "L c #6161CDCDE1E1", "P c #6060CFCFF5F5", "I c #6F6FD0D0E5E5", "U c #6464D2D2F5F5", "Y c #6262D5D5F9F9", "T c #6464D4D4FAFA", "R c #6464D6D6FAFA", "E c #6868D3D3F6F6", "W c #6868D3D3F7F7", "Q c #6868D4D4F1F1", "! c #6C6CD5D5F7F7", "~ c #6969D6D6FBFB", "^ c #6B6BD8D8FBFB", "/ c #6D6DDADAFCFC", "( c #6F6FDADAFCFC", ") c #7171D2D2E7E7", "_ c #7575D6D6ECEC", "` c #7F7FD6D6E0E0", "' c #7C7CD7D7E4E4", "] c #7070D7D7F7F7", "[ c #7171D7D7F8F8", "{ c #7171D8D8F7F7", "} c #7575D8D8F3F3", "| c #7373DADAFBFB", " . c #7272DADAFCFC", ".. c #7373DBDBFDFD", "X. c #7575D8D8F8F8", "o. c #7575D8D8F9F9", "O. c #7474DADAF8F8", "+. c #7575DBDBFDFD", "@. c #7676DBDBFDFD", "#. c #7575DCDCFEFE", "$. c #7979D9D9F9F9", "%. c #7979DADAF9F9", "&. c #7979DCDCFEFE", "*. c #7A7ADCDCFEFE", "=. c #7A7ADFDFFEFE", "-. c #7C7CDBDBFAFA", ";. c #7F7FDDDDFBFB", ":. c #7C7CDEDEFEFE", ">. c #8787A9A90303", ",. c #A2A2C8C87F7F", "<. c #B5B5CACA6D6D", "1. c #B2B2CACA7171", "2. c #DFDFBFBF0000", "3. c #DFDFCACA3838", "4. c #F8F8D1D13636", "5. c #F8F8D3D33636", "6. c #F9F9D5D53C3C", "7. c #D3D3CECE5656", "8. c #D2D2D1D15F5F", "9. c #C5C5D0D06D6D", "0. c #D0D0D4D46E6E", "q. c #E7E7CFCF4646", "w. c #EAEAD3D35252", "e. c #ECECD6D65353", "r. c #FAFAD5D54343", "t. c #EBEBDDDD7575", "y. c #EDEDDEDE7A7A", "u. c #8B8BCBCBACAC", "i. c #8282CDCDBBBB", "p. c #9797CFCFA9A9", "a. c #9F9FD2D2A7A7", "s. c #A2A2CCCC8D8D", "d. c #AAAACCCC8181", "f. c #A8A8CDCD8B8B", "g. c #AFAFD1D19191", "h. c #BCBCD3D38888", "j. c #BEBED7D79494", "k. c #A3A3D5D5AEAE", "l. c #ABABD5D5A5A5", "z. c #8D8DD5D5C9C9", "x. c #8E8ED8D8D5D5", "c. c #8383D8D8E1E1", "v. c #8787DDDDF7F7", "b. c #8E8EDFDFF4F4", "n. c #8A8AE0E0FCFC", "m. c #8C8CE2E2FEFE", "M. c #8F8FE2E2FEFE", "N. c #9191E3E3FEFE", "B. c #9494E4E4FEFE", "V. c #C2C2D7D78F8F", "C. c #C6C6D8D88A8A", "Z. c #CACADBDB9191", "A. c #CCCCDBDB9696", "S. c #CECEDEDE9797", "D. c #D3D3E0E09F9F", "F. c #D4D4E1E1A2A2", "G. c #D8D8E4E4A9A9", "H. c #D8D8E4E4AAAA", "J. c #D8D8E4E4ABAB", "K. c #EFEFE2E28484", "L. c #F0F0E3E38787", "P. c #F2F2E4E48D8D", "I. c None", /* pixels */ "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.", "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.", "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.", "r 2.t u t t 0 0 9 7 6 5 4 3 2 < ", "r P.H.B.N.M.m.n.b.v.:.-.$.O.] > ", "r H.=.:.@.#. .x.V.l.Q G S m ! ; ", "r H.S.@.#.O.o.V.r.w.a.c m c E = ", "r K.#.#.O.} ' e.6.5.8.z l k U * ", "r K.Z.( c.c.k.h.5.q.f.u.h h P % ", "0 F.( ^ _ z.0.J p.i.H 1.h s C $ ", "9 D.C.~ Y K g.9.7.s.3.d.f s B O ", "9 y.Y T G D M L d.1.d p s i b o ", "6 t.A.$.O.] ! W ) ) Z B B b x . ", "5 >.3 2 < , ; - * % % $ O + . o ", "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.", "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I." }; springlobby-0.169/src/images/flags/LA.xpm0000600000176000000410000000764312105760300021603 0ustar buildbotwww-data00000000000000/* XPM */ static const char *LA_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 152 2", " c black", ". c #232300000000", "X c #4D4D00003F3F", "o c #6D6D03034F4F", "O c #7D7D32326F6F", "+ c #000000008181", "@ c #000000008383", "# c #000000008787", "$ c #000000008B8B", "% c #000000009191", "& c #00001111B5B5", "* c #00001717B9B9", "= c #00001B1BBBBB", "- c #00002121BDBD", "; c #00002525BFBF", ": c #2A2A5555C3C3", "> c #2D2D5959C5C5", ", c #2F2F5959C5C5", "< c #33335D5DC7C7", "1 c #35355D5DC6C6", "2 c #31315C5CC8C8", "3 c #33335D5DC8C8", "4 c #35355F5FC8C8", "5 c #39395F5FC8C8", "6 c #39396262CACA", "7 c #3A3A6161C8C8", "8 c #3E3E6666CCCC", "9 c #3F3F6868CDCD", "0 c #40406666C9C9", "q c #45456A6ACBCB", "w c #49496F6FCBCB", "e c #48486C6CCCCC", "r c #4A4A6E6ECECE", "t c #4B4B6E6ECECE", "y c #4C4C7070CDCD", "u c #4B4B7272D1D1", "i c #50507575CECE", "p c #50507474D0D0", "a c #54547878D1D1", "s c #56567979D5D5", "d c #5B5B7A7AD0D0", "f c #58587B7BD5D5", "g c #5A5A7D7DD6D6", "h c #5C5C7E7ED3D3", "j c #5C5C7D7DD5D5", "k c #5D5D7D7DD5D5", "l c #5E5E8080D7D7", "z c #5F5F8181D7D7", "x c #63638282D7D7", "c c #67678484D3D3", "v c #65658585D7D7", "b c #62628484D8D8", "n c #63638585D9D9", "m c #64648484D8D8", "M c #65658484D8D8", "N c #69698787D9D9", "B c #6D6D8888D6D6", "V c #68688888DBDB", "C c #6A6A8888DADA", "Z c #6B6B8B8BDCDC", "A c #6D6D8B8BDADA", "S c #71718D8DDBDB", "D c #74749090DADA", "F c #76769191DBDB", "G c #7B7B9898DFDF", "H c #7F7F9B9BE0E0", "J c #808036367171", "K c #838339397575", "L c #84843E3E7B7B", "P c #86863D3D7878", "I c #878743437D7D", "U c #95954D4D7E7E", "Y c #D9D900000000", "T c #DBDB00000000", "R c #DFDF00000000", "E c #E1E100000000", "W c #E3E300000000", "Q c #E5E500000000", "! c #E7E700000000", "~ c #EBEB00000000", "^ c #EDED00000000", "/ c #EFEF00000000", "( c #F1F100000000", ") c #F3F300000000", "_ c #F5F500000000", "` c #F7F700000000", "' c #F9F900000000", "] c #FBFB00000000", "[ c #FDFD00000000", "{ c #F0F02C2C2C2C", "} c #F0F02F2F2F2F", "| c #F2F232323232", " . c #F2F235353535", ".. c #F2F239393939", "X. c #F3F33D3D3D3D", "o. c #F4F442424242", "O. c #F5F546464646", "+. c #F7F74B4B4B4B", "@. c #F7F74E4E4E4E", "#. c #F7F750505050", "$. c #F7F753535353", "%. c #F8F854545555", "&. c #F8F857575757", "*. c #F9F958585858", "=. c #F9F95C5C5C5C", "-. c #FAFA5D5D5D5D", ";. c #FAFA60606060", ":. c #FAFA61616262", ">. c #FBFB65656565", ",. c #FCFC69696969", "<. c #FCFC6D6D6D6D", "1. c #FCFC70707171", "2. c #FCFC74747474", "3. c #FDFD77777777", "4. c #FDFD79797979", "5. c #FEFE7B7B7B7B", "6. c #8B8B48488080", "7. c #8F8F4D4D8484", "8. c #909050508484", "9. c #959555558989", "0. c #999952528282", "q. c #9C9C56568686", "w. c #99995A5A8D8D", "e. c #9F9F5A5A8A8A", "r. c #9F9F5D5D8C8C", "t. c #9C9C5E5E9090", "y. c #9F9F63639393", "u. c #A0A060609090", "i. c #A3A364649393", "p. c #A4A465659090", "a. c #A7A769699696", "s. c #ADAD70709999", "d. c #AFAF73739C9C", "f. c #B1B176769E9E", "g. c #B2B27979A0A0", "h. c #B1B17F7FA8A8", "j. c #82829E9EE2E2", "k. c #85859F9FE2E2", "l. c #8A8AA2A2E2E2", "z. c #C0C09090B1B1", "x. c #C9C9D3D3EDED", "c. c #CECED6D6EFEF", "v. c #CFCFD7D7F0F0", "b. c #E3E3E8E8F2F2", "n. c #E6E6E9E9F4F4", "m. c #ECECEFEFF6F6", "M. c #EDEDF0F0F7F7", "N. c gray97", "B. c #F8F8F8F8F8F8", "V. c #F9F9F9F9F9F9", "C. c gray98", "Z. c None", /* pixels */ "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "[ [ [ [ [ ' ' ' ' ` ` ( ( ( ^ ^ ", "[ 5.5.5.3.2.2.<.,.>.;.=.&.$.@.^ ", "o z.g.f.d.s.a.i.u.r.e.q.0.U p.. ", "; l.S A N x F c.c.B r r q 0 d % ", "- k.Z V x m M.C.C.n.p 9 8 6 a $ ", "= j.V m h S C.C.C.N.c 1 6 1 i # ", "= H m l f j m.C.N.b.r 4 1 , t @ ", "& G l j s y v x.x.h , 3 , : w @ ", "X h.i.t.w.9.7.6.I L P K O O 8. ", "` ;.=.*.&.@.+.O.o.X... . .} { T ", "( ( ( ( ^ ~ Q Q Q E E T T T T T ", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z." }; springlobby-0.169/src/images/flags/LB.xpm0000600000176000000410000000714212105760300021576 0ustar buildbotwww-data00000000000000/* XPM */ static const char *LB_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 139 2", " c black", ". c #3B3B92923B3B", "X c #3E3E93933E3E", "o c #3E3E94943E3E", "O c #434396964343", "+ c #434396964444", "@ c #444497974545", "# c #454599994545", "$ c #494999994949", "% c #49499B9B4A4A", "& c #52529D9D5353", "* c #5757A2A25757", "= c #5757A3A35757", "- c #5A5AA4A45A5A", "; c #6262A8A86262", ": c #7D7DB3B37B7B", "> c #ADAD00000000", ", c #B1B100000000", "< c #B5B500000000", "1 c #B7B700000000", "2 c #BBBB00000000", "3 c #BDBD00000000", "4 c #BFBF00000000", "5 c #C1C100000000", "6 c #C3C300000000", "7 c #C5C500000000", "8 c #C9C900000000", "9 c #CBCB00000000", "0 c #CFCF00000000", "q c #D1D100000000", "w c #D3D300000000", "e c #D5D500000000", "r c #D7D700000000", "t c #D9D900000000", "y c #DBDB00000000", "u c #DDDD00000000", "i c #DFDF00000000", "p c #E1E12A2A1414", "a c #E2E22D2D1818", "s c #E3E331311D1D", "d c #E4E436362121", "f c #E5E53A3A2525", "g c #E4E43E3E2929", "h c #E4E43E3E2C2C", "j c #E5E540402F2F", "k c #E6E644443232", "l c #E7E747473535", "z c #E5E549493636", "x c #E8E844443030", "c c #E9E945453333", "v c #E9E948483535", "b c #E8E84B4B3939", "n c #EAEA4B4B3838", "m c #E8E84E4E3D3D", "M c #EBEB4E4E3C3C", "N c #EBEB4F4F3E3E", "B c #EAEA52524242", "V c #EBEB57574646", "C c #ECEC53534141", "Z c #EDED54544343", "A c #EEEE58584646", "S c #EBEB5F5F4F4F", "D c #ECEC5B5B4B4B", "F c #EEEE5A5A4848", "G c #EDED5F5F4E4E", "H c #EFEF5C5C4C4C", "J c #EFEF5E5E4D4D", "K c #EDED60605050", "L c #EDED63635353", "P c #EEEE64645555", "I c #EEEE67675757", "U c #EFEF68685858", "Y c #F0F062625151", "T c #F1F166665656", "R c #F2F26A6A5A5A", "E c #F0F06B6B5C5C", "W c #F0F06C6C5D5D", "Q c #F3F36D6D5E5E", "! c #F1F16F6F6060", "~ c #F1F170706262", "^ c #F2F273736565", "/ c #F4F471716161", "( c #F4F473736565", ") c #F2F277776969", "_ c #F2F27A7A6C6C", "` c #F3F37A7A6D6D", "' c #F4F47E7E7171", "] c #F5F581817474", "[ c #F6F684847777", "{ c #F6F686867979", "} c #F7F788887B7B", "| c #F7F78C8C7F7F", " . c #8585BABA8484", ".. c #BBBBBBBBBBBB", "X. c gray75", "o. c #9696C6C69797", "O. c #A3A3CACAA4A4", "+. c #A0A0CDCDA2A2", "@. c #C1C1C1C1C1C1", "#. c #C5C5C3C3C3C3", "$. c #CBCBDFDFCBCB", "%. c #DFDFDFDFDFDF", "&. c #CECEE4E4CFCF", "*. c #D8D8E8E8DADA", "=. c #D8D8E9E9DADA", "-. c #DEDEEAEADEDE", ";. c #E1E1E1E1E1E1", ":. c gray89", ">. c #E5E5E3E3E3E3", ",. c gray90", "<. c #E7E7F0F0E6E6", "1. c #EEEEF2F2EFEF", "2. c gray95", "3. c #F3F3F3F3F3F3", "4. c #F3F3F6F6F3F3", "5. c #F1F1F4F4F4F4", "6. c #F3F3F7F7F6F6", "7. c #F4F4F4F4F4F4", "8. c #F4F4F5F5F5F5", "9. c #F5F5F4F4F4F4", "0. c gray96", "q. c #F6F6F5F5F4F4", "w. c #F6F6F5F5F5F5", "e. c #F6F6F6F6F6F6", "r. c #F7F7F6F6F6F6", "t. c #F8F8F8F8F8F8", "y. c gray98", "u. c #FAFAFBFBFBFB", "i. c #FBFBFBFBFBFB", "p. c #FBFBFCFCFBFB", "a. c #FDFDFBFBFBFB", "s. c #FDFDFBFBFCFC", "d. c gray99", "f. c #FDFDFCFCFDFD", "g. c #FDFDFDFDFDFD", "h. c #FEFEFCFCFCFC", "j. c #FEFEFDFDFDFD", "k. c #FEFEFEFEFEFE", "l. c None", /* pixels */ "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "i i i i t i i t t e w w w 8 8 7 ", "i } } { [ ] ' ` ) ( ! E I K K 5 ", "i | ( Q Q R T K J A Z N n k K 5 ", ">.k.k.a.k.a.<. .: -.t.r.8.8.8.#.", ",.k.k.k.k.a.+.* % o.8.r.8.8.8.@.", ";.k.k.k.k.&.- # @ % $.8.8.3.8.X.", ";.k.i.i.t.; = @ o O & 5.2.2.8...", "%.a.a.i.a.4.*.o . O.*.1.2.2.3...", "e ) H A C m v k g f d s a p z > ", "w ~ U U I K D V B m n v k h h > ", "w 0 8 8 7 5 5 3 2 < < , , > > > ", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l." }; springlobby-0.169/src/images/flags/LC.xpm0000600000176000000410000000771712105760300021607 0ustar buildbotwww-data00000000000000/* XPM */ static const char *LC_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 154 2", " c black", ". c gray21", "X c gray23", "o c #3F3F3B3B3C3C", "O c #4A4A41414141", "+ c #2A2A5D5DDDDD", "@ c #2A2A5E5EDDDD", "# c #2A2A5F5FDCDC", "$ c #2A2A5F5FDDDD", "% c #2A2A5E5EDEDE", "& c #2A2A5F5FDEDE", "* c #2A2A5F5FE0E0", "= c #2A2A5F5FE1E1", "- c #2A2A5F5FE2E2", "; c #2A2A6060DBDB", ": c #2A2A6161E2E2", "> c #2A2A6262E2E2", ", c #2A2A6262E3E3", "< c #2A2A6262E4E4", "1 c #2A2A6262EDED", "2 c #2A2A6363F2F2", "3 c #2C2C6464F2F2", "4 c #31316868F3F3", "5 c #33336969F5F5", "6 c #34346868F1F1", "7 c #35356A6AF4F4", "8 c #38386B6BF5F5", "9 c #38386B6BF7F7", "0 c #3F3F6F6FF7F7", "q c #3B3B6F6FF9F9", "w c #555554548B8B", "e c #6C6C6B6B9F9F", "r c #43437474F7F7", "t c #46467474F5F5", "y c #41417272FAFA", "u c #48487676F8F8", "i c #4B4B7A7AF9F9", "p c #4D4D7C7CF9F9", "a c #4F4F7C7CF9F9", "s c #4F4F7D7DFAFA", "d c #56567F7FECEC", "f c #51517E7EFAFA", "g c #45458080EEEE", "h c #53538484EEEE", "j c #59598282EDED", "k c #59598383ECEC", "l c #5E5E8787EDED", "z c #5F5F8888EFEF", "x c #52528080F9F9", "c c #54548181FAFA", "v c #55558181FAFA", "b c #5F5F8A8AF9F9", "n c #60608989EEEE", "m c #63638E8EEFEF", "M c #65658F8FEFEF", "N c #61618B8BF2F2", "B c #66668D8DF0F0", "V c #6B6B9494EDED", "C c #6C6C9292ECEC", "Z c #6E6E9393ECEC", "A c #6E6E9595ECEC", "S c #69699999EEEE", "D c #61619797F4F4", "F c #68689191F0F0", "G c #6B6B9494F0F0", "H c #6F6F9393F1F1", "J c #6D6D9595F1F1", "K c #6E6E9595F0F0", "L c #6F6F9696F0F0", "P c #6C6C9E9EF4F4", "I c #70709797EDED", "U c #73739999EEEE", "Y c #77779D9DEFEF", "T c #71719999F1F1", "R c #71719E9EF3F3", "E c #74749D9DF1F1", "W c #75759C9CF5F5", "Q c #7A7A9C9CF4F4", "! c #6868AAAAF2F2", "~ c #7B7BA2A2EFEF", "^ c #7878A9A9EFEF", "/ c #7676A7A7F7F7", "( c #7979A1A1F3F3", ") c #7C7CA2A2F4F4", "_ c #7E7EA4A4F0F0", "` c #7D7DBABAF6F6", "' c #8F8F6B6B2424", "] c #949474743737", "[ c #88887F7F7D7D", "{ c #CACA9F9F3535", "} c #D0D0A2A22F2F", "| c #F4F4C7C71E1E", " . c #F7F7CCCC2E2E", ".. c #F5F5D1D12323", "X. c #F6F6D4D42929", "o. c #F5F5D2D23D3D", "O. c #F4F4D9D93939", "+. c #F6F6EDED2A2A", "@. c #F7F7EDED2F2F", "#. c #F6F6D1D14242", "$. c #F7F7D3D34646", "%. c #F7F7D8D84B4B", "&. c #F8F8E2E25050", "*. c #94948C8C8A8A", "=. c #8080A7A7F3F3", "-. c #8080A5A5F4F4", ";. c #8181A5A5F7F7", ":. c #8181A6A6F5F5", ">. c #8181A9A9F1F1", ",. c #8282A9A9F4F4", "<. c #8383AAAAF4F4", "1. c #8181AFAFF3F3", "2. c #8686AEAEF1F1", "3. c #8888AEAEF5F5", "4. c #8989AEAEF5F5", "5. c #8989AEAEF6F6", "6. c #8A8AAFAFF6F6", "7. c #8787B9B9F3F3", "8. c #8888B0B0F3F3", "9. c #8989B0B0F2F2", "0. c #8B8BB0B0F6F6", "q. c #8C8CB2B2F2F2", "w. c #8C8CB0B0F6F6", "e. c #8D8DB1B1F7F7", "r. c #8E8EB1B1F7F7", "t. c #8F8FB5B5F3F3", "y. c #9191B5B5F3F3", "u. c #9090B5B5F7F7", "i. c #9191B4B4F7F7", "p. c #9393B9B9F4F4", "a. c #9292B9B9F7F7", "s. c #9797BBBBF5F5", "d. c #ADADBEBEE1E1", "f. c #9A9AC0C0F6F6", "g. c #9D9DC2C2F7F7", "h. c #9F9FC3C3F7F7", "j. c #8B8BE6E6F3F3", "k. c #9797EDEDF7F7", "l. c #9D9DEDEDF8F8", "z. c #9F9FEDEDF9F9", "x. c #A0A0C3C3F7F7", "c. c #A2A2C6C6F8F8", "v. c #A3A3C7C7F8F8", "b. c #A5A5C7C7F9F9", "n. c #B2B2C3C3EDED", "m. c #B0B0C5C5EFEF", "M. c #B4B4CBCBF4F4", "N. c #BBBBE1E1F8F8", "B. c #BBBBE2E2F9F9", "V. c #CBCBDCDCE9E9", "C. c #D1D1DCDCE8E8", "Z. c #C0C0F2F2F6F6", "A. c #C5C5F5F5F9F9", "S. c None", /* pixels */ "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "b f c c f a s y q r 0 8 7 4 2 6 ", "s b.b.c.c.c.i.B.N.5.a.t.q.9.2.< ", "c b.a.u.e.6./ V.C.P ( E T L >., ", "c b.t.e.e.;.z.*.[ k.H T L G _ , ", "x c.e.6.5.W A.O o Z.z L F M ~ = ", "s g.5.5.:.` M.X . m.! B m n Y = ", "i g.5.<.Q l.e { } w j.z n l U = ", "u s.>.:.R 7.] @.+.' ^ h l j I @ ", "t s.=.) D n. .X...| d.g j d A @ ", "9 a.y.9.1.&.%.$.#.o.O.S V A C @ ", "t 5 4 3 1 , < , = , @ @ @ $ @ # ", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S." }; springlobby-0.169/src/images/flags/LI.xpm0000600000176000000410000001021512105760300021600 0ustar buildbotwww-data00000000000000/* XPM */ static const char *LI_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 162 2", " c black", ". c #000000000B0B", "X c #000000006F6F", "o c #000000007171", "O c #000000007575", "+ c #000000007979", "@ c #000000007F7F", "# c #29290B0B6161", "$ c #000000008383", "% c #000000008787", "& c #000000008B8B", "* c #000000009191", "= c #000000009595", "- c #000000009999", "; c #000003039B9B", ": c #000009099D9D", "> c #00000F0FA1A1", ", c #00001515A5A5", "< c #00001919A7A7", "1 c #00001B1BA7A7", "2 c #00001D1DA7A7", "3 c #00001919A9A9", "4 c #00001D1DA9A9", "5 c #27275A5ABBBB", "6 c #2C2C5E5EBDBD", "7 c #30305E5EBBBB", "8 c #35356262BDBD", "9 c #36366262BDBD", "0 c #3A3A6666BFBF", "q c #32326363C0C0", "w c #37376666C2C2", "e c #3B3B6767C0C0", "r c #3F3F6B6BC2C2", "t c #3D3D6A6AC4C4", "y c #61614A4A8686", "u c #65654E4E8989", "i c #696952528C8C", "p c #6C6C57579090", "a c #70705B5B9393", "s c #757560609696", "d c #777764649797", "f c #797965659999", "g c #7D7D69699B9B", "h c #40406B6BC2C2", "j c #41416F6FC6C6", "k c #45456F6FC4C4", "l c #46467171C4C4", "z c #46467373C8C8", "x c #4A4A7272C6C6", "c c #4A4A7373C7C7", "v c #4D4D7474C4C4", "b c #4C4C7777CBCB", "n c #4F4F7676C9C9", "m c #51517878C6C6", "M c #51517B7BCBCB", "N c #54547B7BCBCB", "B c #57577C7CC8C8", "V c #58587E7EC6C6", "C c #5B5B7F7FCACA", "Z c #5C5C8181C8C8", "A c #5D5D8484CFCF", "S c #60608383CCCC", "D c #64648787CECE", "F c #68688A8AD0D0", "G c #6C6C8E8ED2D2", "H c #70709090D3D3", "J c #74749494D4D4", "K c #7A7A9B9BDADA", "L c #7F7F9D9DD9D9", "P c #B9B900000000", "I c #BBBB00000000", "U c #BDBD00000000", "Y c #BFBF00000000", "T c #C1C100000000", "R c #C3C300000000", "E c #C5C500000000", "W c #C9C900000000", "Q c #CBCB00000000", "! c #CFCF00000000", "~ c #D1D100000000", "^ c #D5D500000000", "/ c #D7D700000000", "( c #DBDB00000000", ") c #DDDD00000000", "_ c #DFDF00000000", "` c #DEDE26260B0B", "' c #E9E900000000", "] c #E0E029290E0E", "[ c #E0E02A2A1010", "{ c #E1E12D2D1313", "} c #E1E12E2E1414", "| c #EAEA2E2E1414", " . c #E2E232321919", ".. c #E2E233331919", "X. c #E3E337371E1E", "o. c #E3E337371F1F", "O. c #ECEC32321919", "+. c #EDED37371F1F", "@. c #E4E43C3C2323", "#. c #E4E43D3D2424", "$. c #EEEE3C3C2424", "%. c #E2E243432C2C", "&. c #E2E246462F2F", "*. c #E6E641412929", "=. c #E6E642422A2A", "-. c #E7E746462E2E", ";. c #E7E747472F2F", ":. c #EFEF41412A2A", ">. c #E3E349493232", ",. c #E5E54B4B3535", "<. c #E6E64F4F3939", "1. c #E9E94B4B3434", "2. c #E9E94C4C3434", "3. c #EDED4C4C3636", "4. c #E6E653533D3D", "5. c #EAEA50503A3A", "6. c #EBEB55553F3F", "7. c #ECEC56563F3F", "8. c #F0F046462F2F", "9. c #F1F14B4B3535", "0. c #F2F250503A3A", "q. c #E8E857574242", "w. c #E8E85B5B4646", "e. c #EDED5A5A4444", "r. c #EDED5A5A4545", "t. c #EEEE5F5F4949", "y. c #F3F355554040", "u. c #F4F45A5A4545", "i. c #F5F55F5F4949", "p. c #EAEA60604B4B", "a. c #EBEB63635050", "s. c #EDED68685555", "d. c #EDED6C6C5858", "f. c #EEEE70705D5D", "g. c #F6F662624F4F", "h. c #F0F074746262", "j. c #F1F178786666", "k. c #F2F27C7C6A6A", "l. c #F6F67F7F6F6F", "z. c #80806D6D9F9F", "x. c #83837171A4A4", "c. c #86867575A7A7", "v. c #8A8A7979A8A8", "b. c #F5F5DBDB5D5D", "n. c #FBFBDFDF5F5F", "m. c #E0E0CFCF6E6E", "M. c #E9E9D6D67575", "N. c #F4F4DCDC6767", "B. c #F0F0DADA6D6D", "V. c #F9F9DEDE6161", "C. c #FBFBE0E06363", "Z. c #8F8F9E9EA1A1", "A. c #9F9F9191B7B7", "S. c #A1A1ABABA2A2", "D. c #81819E9ED9D9", "F. c #81819E9EDADA", "G. c #9494A8A8C2C2", "H. c #9F9FB0B0C4C4", "J. c #BEBEC1C1A7A7", "K. c #C2C2C3C3AAAA", "L. c #F2F2E0E08686", "P. c None", /* pixels */ "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "2 1 2 4 3 , > : ; - = * & % $ $ ", "1 F.H.K.L.J.G.J G G F D S Z B + ", "1 F.M.B.N.n.m.N n c l r 0 9 M O ", "1 L S.C.n.b.Z.n c k t 0 9 7 v X ", "3 K A C V M b l j t w 8 6 5 l X ", "# A.v.c.x.z.g f s a p i u y f . ", "' l.g.i.u.y.0.3.8.8.$.+.O.| 3.~ ", "_ k.t.e.7.5.2.-.#.#.X. . .` >.U ", "_ j.e.7.5.1.-.*.#.X. .{ ] ` &.U ", ") h.d.d.s.a.p.w.q.4.<.,.>.&.%.I ", ") / / ~ ! ! Q Q E R R U U I P I ", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P." }; springlobby-0.169/src/images/flags/LK.xpm0000600000176000000410000001016712105760300021610 0ustar buildbotwww-data00000000000000/* XPM */ static const char *LK_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 161 2", " c black", ". c #44448C8C4444", "X c #4E4E90904646", "o c #4A4A90904949", "O c #4F4F94944F4F", "+ c #525293934C4C", "@ c #515194945151", "# c #545496965353", "$ c #555597975555", "% c #58589A9A5858", "& c #5A5A99995A5A", "* c #5D5D9C9C5C5C", "= c #5E5E9D9D5F5F", "- c #5F5F9D9D5F5F", "; c #63639F9F6363", ": c #6666A2A26666", "> c #6868A2A26767", ", c #6F6FA7A76868", "< c #7070A7A76868", "1 c #9B9B2D2D3F3F", "2 c #9C9C31313A3A", "3 c #9D9D32323838", "4 c #A0A038383D3D", "5 c #98982B2B4040", "6 c #98982B2B4141", "7 c #9A9A2F2F4444", "8 c #9A9A30304545", "9 c #9F9F34344343", "0 c #9C9C32324848", "q c #9C9C31314F4F", "w c #9D9D35354949", "e c #9F9F37374C4C", "r c #A0A038384747", "t c #A0A03A3A4E4E", "y c #A1A13C3C5050", "u c #A3A33F3F5353", "i c #A1A13B3B5A5A", "p c #A3A340403B3B", "a c #A3A341413C3C", "s c #B2B25A5A2B2B", "d c #B8B866662F2F", "f c #BBBB67673535", "g c #BFBF6D6D3A3A", "h c #ADAD4E4E4F4F", "j c #A5A541415F5F", "k c #A8A846465959", "l c #A9A948485B5B", "z c #AEAE50504A4A", "x c #AFAF52525D5D", "c c #B0B057575353", "v c #B1B15B5B5555", "b c #B2B259595454", "n c #A9A94A4A6262", "m c #ACAC4E4E6060", "M c #ACAC4E4E6464", "N c #AAAA4B4B6868", "B c #ACAC4D4D6E6E", "V c #AFAF53536565", "C c #ADAD50506868", "Z c #B0B057576969", "A c #B2B258586A6A", "S c #B3B35C5C6D6D", "D c #B4B45A5A6C6C", "F c #B5B55D5D6E6E", "G c #BBBB67674747", "H c #B8B866664D4D", "J c #B9B967674F4F", "K c #B7B764645E5E", "L c #B6B660607272", "P c #B8B865657676", "I c #C4C46F6F1717", "U c #C3C36E6E1B1B", "Y c #C5C571711E1E", "T c #C6C675752121", "R c #C9C978782424", "E c #CBCB7B7B2828", "W c #C7C77B7B3B3B", "Q c #C1C175757171", "! c #C5C57C7C7777", "~ c #CFCF82821010", "^ c #CCCC84842E2E", "/ c #D0D084842C2C", "( c #D6D696962E2E", ") c #DCDC99992A2A", "_ c #D6D698983636", "` c #DDDDA2A21F1F", "' c #F9F982823A3A", "] c #F8F887873D3D", "[ c #FAFA87873F3F", "{ c #E1E1B1B11515", "} c #E1E1B3B31616", "| c #E2E2B3B31818", " . c #E3E3B6B61B1B", ".. c #E5E5B9B91E1E", "X. c #E6E6BABA2121", "o. c #E7E7BBBB2525", "O. c #E8E8BFBF2828", "+. c #EDEDBDBD2929", "@. c #EDEDBEBE3030", "#. c #EDEDBFBF3535", "$. c #CBCB82824040", "%. c #CFCF8A8A4343", "&. c #CACA82825454", "*. c #D5D593934040", "=. c #D1D191914E4E", "-. c #D8D898984242", ";. c #DBDB9E9E4545", ":. c #C8C882826B6B", ">. c #DEDEA7A74040", ",. c #F8F888884040", "<. c #FBFB8B8B4545", "1. c #FBFB8E8E4949", "2. c #FCFC8E8E4B4B", "3. c #FCFC92924F4F", "4. c #FDFD92925050", "5. c #FDFD95955454", "6. c #FEFE97975959", "7. c #FEFE98985959", "8. c #FEFE9A9A5C5C", "9. c #E5E5B1B14C4C", "0. c #ECECBDBD4242", "q. c #FEFEA1A16666", "w. c #FEFEA2A26464", "e. c #EFEFC6C61B1B", "r. c #F4F4D4D41F1F", "t. c #EAEAC1C12C2C", "y. c #EBEBC3C32F2F", "u. c #ECECC5C53232", "i. c #ECECC5C53333", "p. c #EFEFC8C83737", "a. c #F1F1C6C62121", "s. c #F4F4CACA2525", "d. c #F4F4CACA2B2B", "f. c #F0F0CACA3B3B", "g. c #F1F1CDCD3E3E", "h. c #F6F6D5D53737", "j. c #F6F6D5D53838", "k. c #F2F2CECE4141", "l. c #F4F4CFCF4545", "z. c #F2F2D3D34B4B", "x. c #F2F2D3D34E4E", "c. c #F5F5D2D24949", "v. c #F5F5D3D34C4C", "b. c #F6F6D4D44C4C", "n. c #F6F6D5D54F4F", "m. c #F3F3D5D55050", "M. c #F7F7D5D55151", "N. c #F7F7D7D75252", "B. c #F4F4D7D75656", "V. c #F7F7D8D85353", "C. c #F5F5D9D95B5B", "Z. c #F9F9D8D85454", "A. c #F9F9D9D95454", "S. c #F9F9D9D95656", "D. c #F9F9D9D95757", "F. c #EBEBC0C06767", "G. c #F6F6DBDB6060", "H. c #F7F7DCDC6565", "J. c #F8F8DEDE6868", "K. c #F9F9DFDF7272", "L. c None", /* pixels */ "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "D.D.D.D.D.V.M.n.n.c.l.k.g.f.p.i.", "D., < q.q.K.F.! P L S Z V K =.) ", "D.> - 7.7.J.Q :.D C M x k J v / ", "D.: * 7.5.H.F B 9.&.;.-.$.z u E ", "Z.; % 5.4.G.A N 0.j.#.h _ g t R ", "M.= # 4.3.C.V n h.%.@.+.r.^ w T ", "M.& O 1.<.D.l j *.d.s.a.e.4 8 Y ", "n.# o <.] n.l i G W ( f ` 2 6 U ", "c.# . ] ' z.b J q r 9 1 2 d a I ", "k.+ X ,.] x.>.c t t 0 8 1 4 s ~ ", "k.g.f.p.i.y.t.O.o.X... .} } } } ", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.", "L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L." }; springlobby-0.169/src/images/flags/LR.xpm0000600000176000000410000000601012105760300021607 0ustar buildbotwww-data00000000000000/* XPM */ static const char *LR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 111 2", " c black", ". c #000000005757", "X c #000000005959", "o c #000000005B5B", "O c #63636464A2A2", "+ c #66666868A5A5", "@ c #66666969A5A5", "# c #6A6A6C6CA7A7", "$ c #6B6B6D6DA8A8", "% c #999900000000", "& c #9B9B00000000", "* c #9D9D00000000", "= c #A1A100000000", "- c #A3A300000000", "; c #A5A500000000", ": c #A7A700000000", "> c #A9A900000000", ", c #ABAB00000000", "< c #AFAF00000000", "1 c #B3B300000000", "2 c #B7B700000000", "3 c #B9B900000000", "4 c #BDBD00000000", "5 c #BFBF00000000", "6 c #C3C300000000", "7 c #C5C500000000", "8 c #C7C700000000", "9 c #C9C900000000", "0 c #CDCD00000000", "q c #CFCF00000000", "w c #D0D03B3B3131", "e c #D1D13F3F3434", "r c #D3D343433838", "t c #D3D344443939", "y c #D4D447473D3D", "u c #D5D548483D3D", "i c #D5D54B4B4141", "p c #D6D64D4D4242", "a c #D7D74D4D4242", "s c #D7D74F4F4646", "d c #D7D759594F4F", "f c #D8D850504747", "g c #D9D952524848", "h c #D9D954544B4B", "j c #D9D955554B4B", "k c #DADA57574C4C", "l c #DBDB57574D4D", "z c #DBDB59594F4F", "x c #DBDB59595050", "c c #DBDB5A5A5151", "v c #D8D85F5F5555", "b c #DCDC5C5C5252", "n c #DCDC5E5E5555", "m c #DDDD5E5E5555", "M c #DDDD5F5F5656", "N c #DEDE61615757", "B c #DEDE62625959", "V c #DEDE63635A5A", "C c #DEDE63635B5B", "Z c #DCDC66665E5E", "A c #DFDF65655C5C", "S c #DFDF6F6F6666", "D c #E0E066665E5E", "F c #E0E067675F5F", "G c #E0E068685F5F", "H c #E0E068686060", "J c #E1E16B6B6363", "K c #E1E16C6C6363", "L c #E1E16C6C6464", "P c #E1E16D6D6565", "I c #E3E370706767", "U c #E3E370706868", "Y c #E3E371716969", "T c #E4E474746C6C", "R c #E4E475756D6D", "E c #E5E579797171", "W c #E8E886867F7F", "Q c #84848787B7B7", "! c #85858787B8B8", "~ c #A0A0A1A1C7C7", "^ c #B3B3B3B3D3D3", "/ c #B3B3B4B4D3D3", "( c #B3B3B5B5D3D3", ") c #E9E98E8E8686", "_ c #D9D9C7C7C5C5", "` c #DBDBCBCBC9C9", "' c #E1E1CDCDCDCD", "] c #E5E5D3D3D1D1", "[ c #EBEBD9D9D7D7", "{ c #EFEFEFEFF5F5", "} c #F5F5E7E7E5E5", "| c #F7F7EBEBE9E9", " . c #FBFBEDEDEBEB", ".. c gray95", "X. c #F2F2F2F2F3F3", "o. c #F3F3F3F3F3F3", "O. c #F4F4F4F4F4F4", "+. c #F4F4F5F5F5F5", "@. c gray96", "#. c #F6F6F6F6F6F6", "$. c gray97", "%. c #F7F7F7F7FAFA", "&. c #F8F8F8F8F8F8", "*. c #F9F9F9F9F9F9", "=. c gray98", "-. c #FBFBFBFBFBFB", ";. c gray99", ":. c #FDFDFDFDFDFD", ">. c #FDFDFDFDFEFE", ",. c #FEFEFEFEFEFE", "<. c None", /* pixels */ "<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.", "<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.", "<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.", "o o o o o q 0 0 9 9 7 6 4 4 3 2 ", "o ( %.( ! ,.,.,.-.,.=.=.=.=.#.[ ", "o %.,.{ $ E R U L F Z N b l S < ", "o ^ { ~ + ,.,.=.=.=.=.#.#.#.#.] ", ". Q # + O U S A V m c k f a Z : ", " .,.,.:.,.-.=.=.=.#.#.#.o.o.o.' ", "0 ) U P S A V m z j f a u t N = ", "| ,.=.=.=.$.=.#.#.#.#.X.....o.` ", "9 W S A V m z j s i t r e w d % ", "} :.=.=.=.=.#.#.#.#...#.X....._ ", "7 4 4 3 2 1 < > > : = = & % % % ", "<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.", "<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<." }; springlobby-0.169/src/images/flags/LS.xpm0000600000176000000410000000727212105760300021623 0ustar buildbotwww-data00000000000000/* XPM */ static const char *LS_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 143 2", " c black", ". c #000027270000", "X c #000029290000", "o c #00002D2D0000", "O c #00002F2F0000", "+ c #000031310000", "@ c #000033330000", "# c #000035350000", "$ c #000039390000", "% c #00003B3B0000", "& c #00003D3D0000", "* c #000001016565", "= c #000003036969", "- c #000013136B6B", "; c #000019197575", ": c #000041410000", "> c #000043430000", ", c #000047470000", "< c #00004B4B0000", "1 c #000031318383", "2 c #000041418D8D", "3 c #24247B7B9898", "4 c #29297D7D9E9E", "5 c #25257E7EB3B3", "6 c #25257E7EB5B5", "7 c #0B0B95950B0B", "8 c #0F0F97970E0E", "9 c #101097971010", "0 c #131399991313", "q c #141499991414", "w c #14149B9B1414", "e c #18189E9E1919", "r c #19199E9E1919", "t c #19199F9F1919", "y c #1A1A9B9B2121", "u c #1F1F9D9D2525", "i c #1F1F9B9B2D2D", "p c #1F1F99993535", "a c #1E1EA0A01E1E", "s c #23239C9C3232", "d c #2C2CA2A22C2C", "f c #2F2FA4A42F2F", "g c #3232A5A53232", "h c #3333A6A63232", "j c #3535A8A83535", "k c #3636A8A83636", "l c #3939A9A93939", "z c #3B3BADAD3B3B", "x c #3D3DACAC3D3D", "c c #20208D8D5A5A", "v c #242494945151", "b c #3F3FA9A94949", "n c #4242AFAF4242", "m c #4646AEAE4C4C", "M c #4B4BA6A67373", "N c #26268383B9B9", "B c #2A2A8181B5B5", "V c #2B2B8585B9B9", "C c #2A2A8585BABA", "Z c #2B2B8686BABA", "A c #2A2A8585BCBC", "S c #2D2D8787BABA", "D c #2F2F8787BCBC", "F c #2E2E8888BEBE", "G c #30308787BBBB", "H c #34348A8ABEBE", "J c #34348B8BBEBE", "K c #2F2F8A8AC0C0", "L c #31318B8BC0C0", "P c #38388E8EC0C0", "I c #3C3C9191C1C1", "U c #3D3D9292C2C2", "Y c #44449191BDBD", "T c #6F6F9D9DB3B3", "R c #40409494C3C3", "E c #47479898C6C6", "W c #49499797C3C3", "Q c #54549B9BC3C3", "! c #50509A9AC8C8", "~ c #54549F9FCBCB", "^ c #56569E9EC8C8", "/ c #5858A2A2CDCD", "( c #6767A7A7CBCB", ") c #7171ADADD0D0", "_ c #7878B1B1D1D1", "` c #BDBD9D9D6464", "' c #BEBEA0A06868", "] c #C0C0A1A16B6B", "[ c #C1C1A3A36D6D", "{ c #C6C6AAAA7979", "} c #8E8EBEBEDADA", "| c #BDBDC9C9CDCD", " . c #B2B2CFCFDFDF", ".. c #CBCBB3B38585", "X. c #CCCCB3B38383", "o. c #D1D1BABA8D8D", "O. c #D2D2BCBC9494", "+. c #D2D2BDBD9595", "@. c #D2D2BDBD9696", "#. c #D3D3BDBD9696", "$. c #D4D4BDBD9595", "%. c #D5D5C0C09B9B", "&. c #DFDFCFCFB1B1", "*. c #DFDFD0D0B2B2", "=. c #E1E1D2D2B7B7", "-. c #E1E1D3D3B7B7", ";. c gray86", ":. c #DDDDDDDDDDDD", ">. c #DFDFDFDFDFDF", ",. c #CACADDDDE7E7", "<. c #D1D1E1E1EAEA", "1. c #E3E3DDDDD5D5", "2. c #EDEDE6E6D7D7", "3. c gray89", "4. c gray90", "5. c #E7E7E7E7E7E7", "6. c #E9E9E9E9E9E9", "7. c gray92", "8. c #E8E8EDEDEEEE", "9. c #EDEDEBEBEBEB", "0. c gray93", "q. c #E7E7F0F0F2F2", "w. c #EDEDF2F2F4F4", "e. c #F5F5EFEFE5E5", "r. c #F7F7F2F2EAEA", "t. c #F1F1F4F4F5F5", "y. c #F7F7F9F9F9F9", "u. c #F8F8F6F6F1F1", "i. c #F9F9F7F7F1F1", "p. c #F8F8F6F6F3F3", "a. c #FBFBF9F9F5F5", "s. c #FBFBF9F9F7F7", "d. c #FAFAFAFAF7F7", "f. c #F9F9F9F9F9F9", "g. c gray98", "h. c #FBFBFAFAFAFA", "j. c #FBFBFBFBFBFB", "k. c #FCFCFBFBFBFB", "l. c #FCFCFCFCFBFB", "z. c gray99", "x. c #FDFDFDFDFDFD", "c. c #FDFDFDFDFEFE", "v. c None", /* pixels */ "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "0.0.0.0.0.6.6.6.5.5.3.>.>.;.| 2 ", "0.-.r.e.&.l.x.x.j.j.j.g.h.} ^ * ", "0.i.o...&.x.x.x.j.h.h.w.E V W * ", "9.O.] ' [ x.x.h.j.h.,.U V N Y . ", "1.O.%...{ p.h.h.w.( L V 6 c b > ", "6.i.[ ` 2.g.g.<.U G N 5 p e z % ", "6.-.O.$.$.y.) P G A 3 i e w k # ", "5.h.h.p.8.Q L L B v u a q 9 h + ", "5.x.g. .U H D 4 s a a 0 8 7 f o ", "3.q._ ~ ~ ! M m n x l k h f d . ", "T 1 ; ; - % , < > & % + o o X # ", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v." }; springlobby-0.169/src/images/flags/LT.xpm0000600000176000000410000001021512105760300021613 0ustar buildbotwww-data00000000000000/* XPM */ static const char *LT_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 162 2", " c black", ". c #00002F2F0000", "X c #00003B3B0000", "o c #00007B7B0000", "O c #777700000000", "+ c #000083830000", "@ c #14149B9B1414", "# c #19199D9D1919", "$ c #1A1A9C9C1A1A", "% c #1F1F9F9F1F1F", "& c #1F1FA0A01F1F", "* c #20209F9F2020", "= c #2424A3A32424", "- c #2525A2A22525", "; c #2A2AA5A52A2A", ": c #2A2AA5A52B2B", "> c #2B2BA5A52B2B", ", c #2F2FA9A92F2F", "< c #3030A8A83030", "1 c #3535ABAB3535", "2 c #3636A9A93636", "3 c #3636ABAB3636", "4 c #3B3BAAAA3B3B", "5 c #3B3BADAD3B3B", "6 c #3B3BAEAE3A3A", "7 c #3B3BAEAE3C3C", "8 c #3F3FADAD3F3F", "9 c #4040B0B04040", "0 c #4141B0B04141", "q c #4545B2B24545", "w c #4646B2B24646", "e c #4646B3B34646", "r c #4949B5B54949", "t c #4B4BB5B54B4B", "y c #4F4FB7B74F4F", "u c #4F4FB8B84F4F", "i c #5050B7B75050", "p c #5353B9B95353", "a c #5454B9B95454", "s c #5858BCBC5858", "d c #6F6FC5C56F6F", "f c #7272C6C67373", "g c #7676C8C87676", "h c #ADAD00000000", "j c #B7B700000000", "k c #B9B900000000", "l c #BBBB00000000", "z c #BDBD00000000", "x c #BFBF00000000", "c c #BCBC26261010", "v c #BDBD2B2B1414", "b c #BFBF2E2E1919", "n c #C1C100000000", "m c #C3C300000000", "M c #C7C700000000", "N c #C9C900000000", "B c #CDCD00000000", "V c #CFCF00000000", "C c #D1D100000000", "Z c #D5D500000000", "A c #D7D700000000", "S c #DBDB00000000", "D c #DDDD00000000", "F c #C1C133331F1F", "G c #C3C338382424", "H c #C5C53D3D2A2A", "J c #E3E300000000", "K c #E1E10B0B0B0B", "L c #E2E20F0F0E0E", "P c #E3E313131313", "I c #E4E419191919", "U c #E6E61E1E1E1E", "Y c #E7E723232323", "T c #E1E12C2C2C2C", "R c #E2E22F2F2F2F", "E c #E5E52F2F2F2F", "W c #E8E829292929", "Q c #EAEA2E2E2E2E", "! c #E2E232323232", "~ c #E4E435353535", "^ c #E5E539393939", "/ c #E6E63D3D3D3D", "( c #EBEB34343434", ") c #ECEC3A3A3A3A", "_ c #EEEE3F3F3F3F", "` c #C7C742422F2F", "' c #C5C545453232", "] c #C9C948483434", "[ c #CBCB4C4C3A3A", "{ c #CECE52523F3F", "} c #CFCF56564545", "| c #D1D15B5B4949", " . c #DADA7A7A6A6A", ".. c #E7E742424242", "X. c #E8E846464646", "o. c #EFEF44444444", "O. c #E9E94B4B4B4B", "+. c #EAEA50505050", "@. c #ECEC54545555", "#. c #EDED58585858", "$. c #EEEE5D5D5D5D", "%. c #EFEF61616262", "&. c #F2F266666666", "*. c #ABAB9B9B0000", "=. c #E9E9B1B10000", "-. c #EDEDB7B70000", ";. c #EBEBB9B90000", ":. c #EFEFBBBB0000", ">. c #F1F1BFBF0000", ",. c #D1D1C7C70000", "<. c #D7D7CFCF3030", "1. c #D9D9D1D13636", "2. c #DADAD3D33B3B", "3. c #F1F1C1C10000", "4. c #F3F3C5C50000", "5. c #F5F5C5C50000", "6. c #F7F7C9C90000", "7. c #F7F7CBCB0000", "8. c #F7F7CDCD0000", "9. c #F9F9CDCD0000", "0. c #FBFBD1D10000", "q. c #FBFBD5D50000", "w. c #FFFFD3D30000", "e. c #F6F6DADA3838", "r. c #F7F7DCDC3D3D", "t. c #DCDCD5D54040", "y. c #DEDED6D64646", "u. c #DCDCD6D64D4D", "i. c #DFDFD8D84B4B", "p. c #E0E0DADA5050", "a. c #E1E1DBDB5454", "s. c #E3E3DDDD5959", "d. c #E4E4DEDE5D5D", "f. c #F8F8DEDE4242", "g. c #F9F9DFDF4848", "h. c #F7F7DFDF5353", "j. c #F7F7DEDE5757", "k. c #E5E5DFDF6161", "l. c #FAFAE0E04D4D", "z. c #F7F7E0E05C5C", "x. c #FBFBE1E15252", "c. c #FCFCE3E35757", "v. c #FDFDE4E45B5B", "b. c #FDFDE5E55E5E", "n. c #E6E6E0E06464", "m. c #EBEBE6E67F7F", "M. c #F8F8E1E16060", "N. c #F8F8E2E26565", "B. c #FEFEE6E66262", "V. c #FEFEE7E76666", "C. c #F9F9E4E46969", "Z. c #FAFAE5E56D6D", "A. c #FEFEE8E86969", "S. c #FBFBE6E67171", "D. c #FCFCE7E77575", "F. c #FCFCE8E87979", "G. c #FCFCE9E97B7B", "H. c #FCFCE9E97E7E", "J. c #FCFCEAEA8080", "K. c #FDFDEBEB8383", "L. c #FFFFECEC8383", "P. c None", /* pixels */ "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "q.0.0.0.0.9.8.7.7.5.4.3.>.:.-.;.", "0.K.K.K.G.G.G.D.S.Z.C.N.M.z.j.=.", "w.L.A.V.B.b.v.c.x.l.g.f.r.e.h.=.", ",.m.n.k.d.s.a.p.i.y.t.2.1.<.u.*.", "+ g s a i t w 0 7 3 < > - * 8 X ", "o f p y t w 0 5 3 < > - % # 4 . ", "o d y r q 0 5 3 , > = & # @ 3 . ", "h .| } { [ ] ` H G F b v c ' O ", "J &.o._ ) ( Q W Y U I P L K E x ", "D %.$.#.@.+.O.X.../ ^ ~ ! R R j ", "D A A C V V N m m x x x l l j l ", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P." }; springlobby-0.169/src/images/flags/LU.xpm0000600000176000000410000000740712105760300021625 0ustar buildbotwww-data00000000000000/* XPM */ static const char *LU_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 147 2", " c black", ". c #00003B3BDFDF", "X c #00003F3FDDDD", "o c #00004141DDDD", "O c #00004343DDDD", "+ c #00004747DFDF", "@ c #00004949DDDD", "# c #00004949E1E1", "$ c #00004D4DE3E3", "% c #00005353E5E5", "& c #00005555E7E7", "* c #00005B5BE9E9", "= c #00005F5FEBEB", "- c #00006565EDED", "; c #00006969EDED", ": c #00006F6FEFEF", "> c #00007575F1F1", ", c #00007979F3F3", "< c #0F0F8181DFDF", "1 c #00008181F7F7", "2 c #01018585F5F5", "3 c #00008181F9F9", "4 c #37379C9CF1F1", "5 c #3B3B9E9EF1F1", "6 c #3F3FA0A0F2F2", "7 c #4444A2A2F3F3", "8 c #4848A5A5F4F4", "9 c #4C4CA8A8F5F5", "0 c #5151AAAAF6F6", "q c #5555A9A9F2F2", "w c #5555ADADF7F7", "e c #5B5BACACF2F2", "r c #5D5DAEAEF2F2", "t c #5A5AB0B0F8F8", "y c #5F5FB3B3F9F9", "u c #6060AFAFF3F3", "i c #6363B1B1F3F3", "p c #6666B3B3F4F4", "a c #6161B5B5FBFB", "s c #6363B5B5FAFA", "d c #6A6AB5B5F5F5", "f c #6D6DB7B7F6F6", "g c #6868B8B8FAFA", "h c #7070B9B9F7F7", "j c #7575BBBBF7F7", "k c #7878BDBDF8F8", "l c #7B7BBFBFF9F9", "z c #7F7FC2C2F9F9", "x c #E9E900000000", "c c #EBEB00000000", "v c #EDED00000000", "b c #EFEF00000000", "n c #E7E71F1F1717", "m c #F1F100000000", "M c #F3F300000000", "N c #F5F500000000", "B c #F7F705050000", "V c #F9F90B0B0000", "C c #FBFB11110505", "Z c #FDFD17170B0B", "A c #FDFD1D1D0F0F", "S c #FFFF1F1F1313", "D c #FDFD21211717", "F c #FDFD27271B1B", "G c #FFFF27271919", "H c #FFFF29291D1D", "J c #FFFF37372D2D", "K c #F6F65D5D5454", "L c #F7F762625959", "P c #F8F866665E5E", "I c #F9F96A6A6363", "U c #FAFA6F6F6767", "Y c #FFFF6D6D6767", "T c #F7F774746C6C", "R c #FBFB73736C6C", "E c #FCFC77776F6F", "W c #F7F77E7E7777", "Q c #FDFD7A7A7272", "! c #FDFD7D7D7676", "~ c #F8F881817A7A", "^ c #F9F985857F7F", "/ c #FEFE81817A7A", "( c #FEFE84847C7C", ") c #FEFE86867F7F", "_ c #8686BFBFF2F2", "` c #8383C3C3FAFA", "' c #8686C5C5FBFB", "] c #8484C5C5FCFC", "[ c #8888C1C1F2F2", "{ c #8B8BC4C4F3F3", "} c #8E8EC6C6F4F4", "| c #9191C8C8F5F5", " . c #9797C8C8F3F3", ".. c #9494CACAF6F6", "X. c #9797CBCBF7F7", "o. c #9B9BCDCDF8F8", "O. c #9E9ECFCFF9F9", "+. c #A1A1D1D1FAFA", "@. c #A4A4D2D2FBFB", "#. c #A7A7D4D4FBFB", "$. c #B7B7DDDDFCFC", "%. c #FAFA88888282", "&. c #FBFB8B8B8585", "*. c #FCFC8F8F8A8A", "=. c #F5F590908B8B", "-. c #F6F693938E8E", ";. c #FCFC92928D8D", ":. c #FDFD95958F8F", ">. c #F7F797979292", ",. c #F6F69F9F9A9A", "<. c #F8F899999595", "1. c #FDFD98989292", "2. c #FEFE99999494", "3. c #FFFF9B9B9595", "4. c #FEFE9D9D9797", "5. c #F9F99C9C9898", "6. c #FAFA9F9F9C9C", "7. c #FEFE9E9E9999", "8. c #FBFBA2A29F9F", "9. c #FFFFA0A09B9B", "0. c #FCFCA5A5A1A1", "q. c #FDFDA8A8A4A4", "w. c #FDFDABABA6A6", "e. c #FEFEACACA9A9", "r. c #FEFEAFAFABAB", "t. c #FEFEBDBDBABA", "y. c gainsboro", "u. c gray87", "i. c gray88", "p. c gray93", "a. c gray95", "s. c #F3F3F3F3F3F3", "d. c #F4F4F4F4F4F4", "f. c #F4F4F5F5F5F5", "g. c gray96", "h. c #F6F6F6F6F6F6", "j. c gray97", "k. c #F8F8F8F8F8F8", "l. c #F9F9F9F9F9F9", "z. c gray98", "x. c #FBFBFBFBFBFB", "c. c #FBFBFCFCFBFB", "v. c gray99", "b. c #FDFDFCFCFDFD", "n. c #FDFDFDFDFDFD", "m. c #FEFEFEFEFEFE", "M. c None", /* pixels */ "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "J H H H G D A Z C V B N M M v v ", "G 9.9.7.4.3.1.:.;.*.%.%.%.W W c ", "S 3.) / ! ! Q E R R I P L K T c ", "Y t.r.r.w.q.0.8.6.5.<.>.=.=.,.n ", "p.m.m.m.m.v.x.z.z.k.k.h.h.f.f.i.", "p.m.m.x.x.z.z.z.h.h.f.f.f.s.f.u.", "p.m.x.x.z.z.z.z.k.h.f.f.d.a.d.y.", "a $.#.@.+.o.o.X...| } { [ _ .> ", "3 ' g s a t w 0 9 8 7 6 5 5 e o ", "1 ' ` z l k j h f d p i i r r X ", "2 , > : ; - = * & % $ # O O O @ ", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M." }; springlobby-0.169/src/images/flags/LV.xpm0000600000176000000410000001002212105760300021611 0ustar buildbotwww-data00000000000000/* XPM */ static const char *LV_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 158 2", " c black", ". c #272700000000", "X c #292900000000", "o c #2B2B00000000", "O c #2D2D00000000", "+ c #2F2F00000000", "@ c #333300000000", "# c #353500000000", "$ c #393900000000", "% c #3D3D00000000", "& c #414100000000", "* c #474700000000", "= c #4B4B00000000", "- c #4D4D00000000", "; c #515100000000", ": c #575700000000", "> c #5D5D00000000", ", c #5F5F00000000", "< c #636300000000", "1 c #676700000000", "2 c #6D6D00000000", "3 c #6F6F00000000", "4 c #717100000000", "5 c #757500000000", "6 c #777700000000", "7 c #797900000000", "8 c #7D7D00000000", "9 c #818100000000", "0 c #838300000000", "q c #858500000000", "w c #878700000000", "e c #898900000000", "r c #919100000000", "t c #94940B0B0B0B", "y c #96960F0F0E0E", "u c #959510101010", "i c #979714141414", "p c #989813131313", "a c #999919191919", "s c #9B9B19191919", "d c #9C9C1F1F1F1F", "f c #9E9E1E1E1E1E", "g c #9F9F24242424", "h c #9E9E26262626", "j c #A1A123232323", "k c #A1A12B2B2B2B", "l c #A3A329292929", "z c #A2A22A2A2A2A", "x c #A2A22C2C2C2C", "c c #A3A32F2F2F2F", "v c #A4A42F2F2F2F", "b c #A5A52F2F2F2F", "n c #A6A62C2C2C2C", "m c #A6A62E2E2E2E", "M c #A4A431313131", "N c #A4A432323232", "B c #A5A532323232", "V c #A7A737373636", "C c #A9A931313131", "Z c #A8A834343434", "A c #A8A835353535", "S c #A9A934343434", "D c #ABAB37373737", "F c #A9A939393939", "G c #ABAB3A3A3A3A", "H c #AAAA3C3C3C3C", "J c #ACAC3D3D3D3D", "K c #ADAD3F3F3F3F", "L c #AEAE3C3C3D3D", "P c #AEAE3F3F3F3F", "I c #ADAD41414242", "U c #AEAE42424242", "Y c #ACAC44444444", "T c #AFAF47474747", "R c #B1B142424242", "E c #B0B045454545", "W c #B1B144444444", "Q c #B0B046464646", "! c #B3B347474747", "~ c #B1B149494949", "^ c #B2B249494949", "/ c #B2B24B4B4B4B", "( c #B4B44E4E4E4E", ") c #B6B64C4C4C4C", "_ c #B4B450505050", "` c #B4B451515151", "' c #B7B753535353", "] c #B6B654545454", "[ c #B7B754545555", "{ c #B8B851515151", "} c #B9B957575757", "| c #BABA54545454", " . c #B8B859595959", ".. c #B9B958585858", "X. c #BABA5C5C5C5C", "o. c #BBBB5C5C5C5C", "O. c #BBBB5D5D5D5D", "+. c #BCBC59595959", "@. c #BEBE5C5C5C5C", "#. c #BFBF5F5F5F5F", "$. c #BEBE60606060", "%. c #BEBE61616262", "&. c #BFBF66666666", "*. c #C0C065656565", "=. c #C1C16A6A6A6A", "-. c #C2C269696969", ";. c #C3C36D6D6D6D", ":. c #C5C570707171", ">. c #C7C774747474", ",. c #C6C679797979", "<. c #C8C877777777", "1. c #C9C979797979", "2. c #CACA7B7B7A7A", "3. c #CACA7B7B7B7B", "4. c #C7C79F9F9F9F", "5. c #C9C99D9D9D9D", "6. c #E4E4CFCFCFCF", "7. c #E9E9C9C9C9C9", "8. c #E9E9CBCBCBCB", "9. c #E5E5D0D0D0D0", "0. c #E5E5D1D1D1D1", "q. c #E6E6D2D2D2D2", "w. c #E7E7D3D3D3D3", "e. c #E8E8D3D3D3D3", "r. c #E8E8D5D5D5D5", "t. c #E9E9D5D5D5D5", "y. c #E8E8D6D6D6D6", "u. c #E9E9D6D6D6D6", "i. c #E9E9D7D7D7D7", "p. c #EAEAD7D7D7D7", "a. c #EBEBD8D8D8D8", "s. c #ECECD9D9D9D9", "d. c #EDEDDADADADA", "f. c #EDEDDBDBDBDB", "g. c #EEEEDCDCDCDC", "h. c #EEEEDDDDDDDD", "j. c #F0F0DEDEDEDE", "k. c #F1F1DEDEDEDE", "l. c gray90", "z. c #F1F1E0E0E0E0", "x. c #F1F1E1E1E1E1", "c. c #F2F2E1E1E1E1", "v. c #F4F4E7E7E7E7", "b. c #F5F5E7E7E7E7", "n. c #F3F3F3F3F3F3", "m. c #F4F4F4F4F4F4", "M. c #F4F4F5F5F5F5", "N. c gray96", "B. c #F6F6F6F6F6F6", "V. c gray97", "C. c #F8F8F8F8F8F8", "Z. c #F9F9F9F9F9F9", "A. c gray98", "S. c #FBFBFBFBFBFB", "D. c gray99", "F. c #FDFDFDFDFDFD", "G. c #FEFEFEFEFEFE", "H. c None", /* pixels */ "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "r e e e e 9 9 8 7 5 4 2 1 < , , ", "q 3.3.3.>.>.:.;.-.*.$.X.| ` ) - ", "e 3.#.@.@.| { ) ! R L D Z n / = ", "9 ,.X. .` ` / T I H D M k h T % ", "7.b.c.c.j.j.g.d.d.p.r.r.6.6.r.4.", "S.S.S.S.S.S.S.V.V.V.V.B.B.n.n.l.", "8.b.c.c.k.g.g.d.a.p.r.6.6.6.a.4.", "7 ;.^ ! I G B b k g f s i i N X ", "5 *.W P G B n k j f s i y t c X ", "4 %.X. .[ ` / ! I L F D M c k . ", "5 1 < , : ; - * & % # @ + + X # ", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H." }; springlobby-0.169/src/images/flags/LY.xpm0000600000176000000410000000704512105760300021627 0ustar buildbotwww-data00000000000000/* XPM */ static const char *LY_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 134 2", " c black", ". c #000043430000", "X c #000045450000", "o c #000047470000", "O c #000049490000", "+ c #00004B4B0000", "@ c #00004D4D0000", "# c #000051510000", "$ c #000053530000", "% c #000057570000", "& c #000059590000", "* c #00005D5D0000", "= c #00005F5F0000", "- c #000063630000", "; c #000067670000", ": c #00006D6D0000", "> c #000071710000", ", c #000077770000", "< c #00007B7B0000", "1 c #000081810000", "2 c #000085850000", "3 c #000087870000", "4 c #000089890000", "5 c #00008B8B0000", "6 c #00008D8D0000", "7 c #00008F8F0000", "8 c #000091910000", "9 c #000093930000", "0 c #000095950000", "q c #000097970000", "w c #000099990000", "e c #1717A6A61818", "r c #1C1CA8A81B1B", "t c #1C1CA9A91C1C", "y c #2020ABAB2020", "u c #2121ABAB2121", "i c #2424ADAD2525", "p c #2525AEAE2525", "a c #2626AEAE2626", "s c #2A2AAFAF2A2A", "d c #2B2BB0B02B2B", "f c #2F2FB1B12F2F", "g c #2F2FB2B22F2F", "h c #3030B2B23030", "j c #3030B3B33030", "k c #3131B3B33131", "l c #3737B2B23737", "z c #3434B4B43434", "x c #3535B4B43535", "c c #3535B5B53636", "v c #3636B5B53636", "b c #3737B5B53737", "n c #3737B6B63737", "m c #3939B3B33939", "M c #3A3AB3B33A3A", "N c #3A3AB6B63A3A", "B c #3A3AB7B73A3A", "V c #3B3BB7B73B3B", "C c #3C3CB4B43C3C", "Z c #3D3DB4B43D3D", "A c #3B3BB8B83B3B", "S c #3C3CB8B83C3C", "D c #3F3FB9B93F3F", "F c #4040B6B64040", "G c #4141B7B74141", "H c #4040B9B94040", "J c #4040BABA4040", "K c #4141BABA4040", "L c #4141BBBB4141", "P c #4141BBBB4242", "I c #4444B9B94343", "U c #4444BBBB4444", "Y c #4646B9B94646", "T c #4747B9B94747", "R c #4545BCBC4545", "E c #4646BCBC4646", "W c #4646BDBD4646", "Q c #4747BDBD4747", "! c #4949BBBB4949", "~ c #4949BEBE4949", "^ c #4B4BBCBC4B4B", "/ c #4A4ABEBE4A4A", "( c #4B4BBEBE4B4B", ") c #4C4CBFBF4C4C", "_ c #4E4EBEBE4E4E", "` c #5050BEBE5050", "' c #5252BFBF5252", "] c #4E4EC0C04E4E", "[ c #4F4FC0C04F4F", "{ c #5050C0C05050", "} c #5050C1C15050", "| c #5151C1C15151", " . c #5353C2C25353", ".. c #5555C0C05555", "X. c #5454C3C35454", "o. c #5555C3C35555", "O. c #5656C3C35656", "+. c #5757C2C25757", "@. c #5959C2C25959", "#. c #5858C5C55858", "$. c #5858C5C55959", "%. c #5A5AC5C55A5A", "&. c #5C5CC3C35C5C", "*. c #5D5DC4C45E5E", "=. c #5D5DC7C75D5D", "-. c #5E5EC7C75E5E", ";. c #6060C6C66060", ":. c #6262C6C66262", ">. c #6161C8C86161", ",. c #6161C9C96161", "<. c #6262C9C96262", "1. c #6565C8C86565", "2. c #6565C8C86666", "3. c #6565CACA6565", "4. c #6969CACA6969", "5. c #6A6ACACA6A6A", "6. c #6868CCCC6868", "7. c #6D6DCCCC6D6D", "8. c #6F6FCCCC6F6F", "9. c #7171CDCD7171", "0. c #7373CDCD7373", "q. c #7575CECE7575", "w. c #7777D0D07676", "e. c #7979D0D07979", "r. c #7A7AD1D17A7A", "t. c #7B7BD2D27B7B", "y. c #7D7DD3D37D7D", "u. c #7E7ED3D37E7E", "i. c #8080D3D38080", "p. c #8080D4D48080", "a. c #8282D4D48282", "s. c #8282D4D48383", "d. c #8383D4D48383", "f. c None", /* pixels */ "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "w w w w w q 9 7 5 3 3 < < < > : ", "w d.d.d.u.t.t.q.9.7.5.3.;.&.+.; ", "w d.3.3.<.-.$.o.| _ Q L S n ' - ", "w u.3.<.-.$.o.| ( Q L S n k _ * ", "q y.<.=.$.o.| ( Q D V v k d ! & ", "q t.-.$. .' ! Q S V v j d i T $ ", "9 w.o. ._ ( Q L B v j d i u L @ ", "7 9.| ] ( Q S B v f s i u r Z O ", "3 9._ ( Q S B v f s i y r e M o ", "3 5.3.;.=.@.' ' ( Q I F C B l . ", "< < , > : ; - * & $ # @ O o . . ", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f." }; springlobby-0.169/src/images/flags/MA.xpm0000600000176000000410000000647712105760300021610 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MA_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 124 2", " c black", ". c #BDBD5F5F2F2F", "X c #B2B279793636", "o c #B5B57D7D3B3B", "O c #BEBE71713C3C", "+ c #DDDD00000000", "@ c #DFDF00000000", "# c #E1E100000000", "$ c #E3E300000000", "% c #E5E500000000", "& c #E7E700000000", "* c #E9E900000000", "= c #EBEB00000000", "- c #EDED00000000", "; c #EFEF00000000", ": c #F1F100000000", "> c #F3F300000000", ", c #F5F500000000", "< c #F7F700000000", "1 c #F1F10B0B0B0B", "2 c #F1F10F0F0E0E", "3 c #F9F900000000", "4 c #FBFB00000000", "5 c #FDFD00000000", "6 c red", "7 c #F2F210101010", "8 c #F2F213131313", "9 c #F2F214141414", "0 c #F3F319191919", "q c #F3F31A1A1A1A", "w c #F4F41E1E1E1E", "e c #F4F41F1F1F1F", "r c #F4F420202020", "t c #F5F523232323", "y c #F4F425252424", "u c #F5F524242424", "i c #F5F525252525", "p c #F5F526262626", "a c #F2F22D2D2A2A", "s c #F2F22C2C2C2C", "d c #F2F22F2F2F2F", "f c #F6F629292929", "g c #F6F62A2A2A2A", "h c #F6F62B2B2B2B", "j c #F6F62C2C2C2C", "k c #F7F72E2E2E2E", "l c #F7F72F2F2F2F", "z c #F2F232323232", "x c #F3F332323232", "c c #F3F335353535", "v c #F7F730303030", "b c #F7F731313131", "n c #F4F436363636", "m c #F1F13B3B3636", "M c #F4F439393939", "N c #F4F43B3B3B3B", "B c #F6F63D3D3A3A", "V c #F5F53D3D3D3D", "C c #F5F53F3F3F3F", "Z c #F8F834343434", "A c #F8F835353434", "S c #F8F837373636", "D c #F8F837373737", "F c #F9F93A3A3A3A", "G c #F9F93C3C3C3C", "H c #F9F93C3C3D3D", "J c #FAFA3F3F3F3F", "K c #C9C958583030", "L c #C0C063633535", "P c #C0C075754141", "I c #D0D064644040", "U c #F6F642424242", "Y c #F6F644444444", "T c #F7F746464646", "R c #F3F34A4A4646", "E c #F7F749494949", "W c #F7F74B4B4B4B", "Q c #F7F74E4E4E4E", "! c #F9F942424242", "~ c #FAFA40404040", "^ c #FAFA42424242", "/ c #FAFA44444444", "( c #FBFB45454545", ") c #FAFA47474747", "_ c #FBFB46464646", "` c #FBFB47474747", "' c #FBFB49494949", "] c #FBFB4A4A4949", "[ c #FCFC4A4A4B4B", "{ c #FCFC4B4B4B4B", "} c #FCFC4C4C4C4C", "| c #FCFC4F4F4F4F", " . c #FDFD4F4F5050", ".. c #F8F850505050", "X. c #F8F853535353", "o. c #F9F954545555", "O. c #F9F957575757", "+. c #FDFD51515151", "@. c #FDFD53535353", "#. c #FDFD54545454", "$. c #F9F958585858", "%. c #FAFA5C5C5C5C", "&. c #FAFA5D5D5D5D", "*. c #FEFE58585858", "=. c #FEFE59595959", "-. c #FEFE5C5C5C5C", ";. c #FEFE5F5F5F5F", ":. c #FBFB60606060", ">. c #FBFB61616262", ",. c #FCFC65656565", "<. c #FCFC66666666", "1. c #FCFC69696969", "2. c #FCFC6A6A6A6A", "3. c #FDFD6D6D6D6D", "4. c #FDFD6F6F6F6F", "5. c #FDFD70707171", "6. c #FEFE72727373", "7. c #FEFE74747474", "8. c #FEFE76767676", "9. c #FEFE77777777", "0. c #FEFE79797979", "q. c #FFFF7B7B7A7A", "w. c #FFFF7B7B7B7B", "e. c None", /* pixels */ "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "6 6 6 6 4 6 6 6 4 4 < < > > - - ", "6 w.w.w.8.7.7.3.1.,.&.-.$.X.Q = ", "6 w.-.-.-.@.@.| ) ! J S b j E = ", "6 w.-.-.@.@.[ } ! J S b h p Y % ", "6 8.O.@.| [ R L O m v h p r C % ", "6 7.@.| [ ) I o X K j p e 0 C % ", "6 4.| ` ( ! J . . a r e 0 9 c $ ", "4 2.[ ) J F S b f p e 0 8 8 x @ ", "4 <.( J F b j f r e 0 8 2 1 d @ ", "< &.&.%.o.X.E Y U C M c x d a @ ", "> > > - - - = = % % $ $ @ @ + + ", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.", "e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e." }; springlobby-0.169/src/images/flags/MC.xpm0000600000176000000410000000557112105760300021604 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MC_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 108 2", " c black", ". c #E5E500000000", "X c #E7E700000000", "o c #E9E900000000", "O c #EBEB00000000", "+ c #EDED00000000", "@ c #EFEF00000000", "# c #F1F100000000", "$ c #F3F300000000", "% c #F5F500000000", "& c #F7F700000000", "* c #F9F900000000", "= c #FBFB00000000", "- c #FDFD00000000", "; c red", ": c #FDFD05050505", "> c #F4F420202020", ", c #F5F525252525", "< c #F5F526262626", "1 c #F6F62B2B2B2B", "2 c #F6F62C2C2C2C", "3 c #F7F730303030", "4 c #F7F731313131", "5 c #F5F53F3F3F3F", "6 c #F8F836363636", "7 c #F8F837373636", "8 c #F8F837373737", "9 c #F9F93B3B3C3C", "0 c #F9F93C3C3C3C", "q c #F9F93C3C3D3D", "w c #F6F644444444", "e c #F3F34C4C4C4C", "r c #F7F749494949", "t c #F7F74E4E4E4E", "y c #FAFA41414141", "u c #FAFA41414242", "i c #FAFA42424242", "p c #FBFB46464646", "a c #FBFB47474747", "s c #FCFC4B4B4B4B", "d c #FCFC4C4C4C4C", "f c #FDFD4F4F5050", "g c #F4F451515151", "h c #F5F555555555", "j c #F6F65A5A5A5A", "k c #F7F75E5E5E5E", "l c #F8F853535353", "z c #F9F957575757", "x c #FDFD51515151", "c c #FDFD54545454", "v c #FAFA5C5C5C5C", "b c #FEFE58585858", "n c #FEFE59595959", "m c #FEFE5C5C5C5C", "M c #FEFE5F5F5F5F", "N c #F4F466666666", "B c #F8F863636363", "V c #FBFB60606060", "C c #F9F967676767", "Z c #FCFC65656565", "A c #FAFA6B6B6B6B", "S c #FCFC69696969", "D c #FDFD6D6D6D6D", "F c #FBFB70707070", "G c #FDFD70707171", "H c #FCFC74747474", "J c #FEFE74747474", "K c #FEFE76767676", "L c #FEFE77777777", "P c #FCFC77777878", "I c #FDFD7A7A7A7A", "U c #FEFE79797979", "Y c #FFFF7B7B7A7A", "T c #FFFF7B7B7B7B", "R c #FEFE93939393", "E c #C5C5C5C5C5C5", "W c gray78", "Q c gray79", "! c #C9C9CBCBC9C9", "~ c #CBCBCBCBCBCB", "^ c gray81", "/ c gray82", "( c LightGray", ") c #D7D7D7D7D7D7", "_ c gray85", "` c gray86", "' c #DFDFDFDFDFDF", "] c gray89", "[ c gray90", "{ c #E7E7E7E7E7E7", "} c #E9E9E9E9E9E9", "| c gray92", " . c #F1F1F1F1F1F1", ".. c gray95", "X. c #F2F2F2F2F3F3", "o. c #F3F3F3F3F3F3", "O. c #F4F4F4F4F4F4", "+. c gray96", "@. c #F6F6F6F6F6F6", "#. c gray97", "$. c #F8F8F8F8F8F8", "%. c #F9F9F9F9F9F9", "&. c gray98", "*. c #FBFBFBFBFBFB", "=. c #FBFBFCFCFBFB", "-. c gray99", ";. c #FDFDFDFDFDFD", ":. c None", /* pixels */ ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", "; ; ; ; = ; ; ; = = & & $ $ + + ", "; T T T K J D D S Z V m z l t O ", "; T m m m c c s a u 5 6 4 2 r O ", "; T m m c c s a u 9 6 4 1 < w . ", "; K z c d s i y 9 6 3 1 < > 5 . ", ": R T P K F A C V k j h g e N . ", "| -.-.-.%.%.%.%.#.#.O.O.O...O.! ", "} -.*.*.*.%.%.+.@.+.O.O.....X.! ", "{ -.%.%.%.%.%.+.+.O.O.........E ", "[ *.%.%.*.%.#.#.+.+.+.X.......E ", "] ] ' ` ) ) ) ( / ^ ~ ! ! E E E ", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:." }; springlobby-0.169/src/images/flags/MD.xpm0000600000176000000410000001003712105760300021576 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MD_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 157 2", " c black", ". c #000000009999", "X c #000000009D9D", "o c #00000000A1A1", "O c #00000000A5A5", "+ c #00000000A9A9", "@ c #00000000ABAB", "# c #00000000AFAF", "$ c #00000000B3B3", "% c #00000000B5B5", "& c #00000000B9B9", "* c #00000303BBBB", "= c #00000505BBBB", "- c #00000707BBBB", "; c #00000909BBBB", ": c #3C3C5A5ACDCD", "> c #41415F5FCFCF", ", c #46466363D0D0", "< c #4A4A6767D2D2", "1 c #4C4C6767D2D2", "2 c #4F4F6C6CD4D4", "3 c #51516C6CD4D4", "4 c #54547070D6D6", "5 c #55557171D6D6", "6 c #56567171D6D6", "7 c #59597474D7D7", "8 c #5A5A7575D8D8", "9 c #5E5E7878D6D6", "0 c #5E5E7979D9D9", "q c #5F5F7979D9D9", "w c #5F5F7979DADA", "e c #63637B7BD8D8", "r c #62627C7CDBDB", "t c #63637C7CDBDB", "y c #67677F7FD9D9", "u c #66667F7FDCDC", "i c #6B6B8383DBDB", "p c #69698282DDDD", "a c #6F6F8787DDDD", "s c #74748A8ADDDD", "d c #78788E8EDFDF", "f c #7B7B9090E1E1", "g c #7F7F9494E2E2", "h c #9F9F00000000", "j c #A1A100000000", "k c #A3A300000000", "l c #A5A500000000", "z c #A7A700000000", "x c #A9A900000000", "c c #ADAD00000000", "v c #B1B100000000", "b c #B3B300000000", "n c #B9B900000000", "m c #BBBB00000000", "M c #BFBF00000000", "N c #C1C100000000", "B c #C5C500000000", "V c #C7C700000000", "C c #D3D329291A1A", "Z c #D4D42C2C1D1D", "A c #D5D530302222", "S c #D6D631312222", "D c #D7D735352727", "F c #D7D736362727", "G c #D7D736362828", "H c #D8D83B3B2C2C", "J c #D8D83B3B2D2D", "K c #DADA40403232", "L c #DBDB41413333", "P c #D8D845453838", "I c #DCDC45453838", "U c #DCDC46463838", "Y c #DDDD46463939", "T c #D8D848483B3B", "R c #DADA4B4B3E3E", "E c #DADA4B4B3F3F", "W c #DEDE4B4B3D3D", "Q c #DEDE4B4B3E3E", "! c #DBDB4E4E4141", "~ c #DBDB4F4F4242", "^ c #DFDF50504343", "/ c #DDDD53534646", "( c #DEDE57574B4B", ") c #DFDF5B5B5050", "_ c #E1E154544848", "` c #E2E259594C4C", "' c #E1E160605454", "] c #E2E264645959", "[ c #E4E469695D5D", "{ c #E5E56C6C6161", "} c #E6E670706666", "| c #979782823C3C", " . c #979783833D3D", ".. c #9A9A86864242", "X. c #9A9A87874343", "o. c #9E9E8B8B4848", "O. c #A0A08D8D4C4C", "+. c #A4A491915252", "@. c #A7A794945757", "#. c #A9A996965252", "$. c #AFAF9E9E5757", "%. c #B1B1A1A15C5C", "&. c #E3E3BBBB0000", "*. c #E5E5BDBD0000", "=. c #E7E7BFBF0000", "-. c #D1D1BEBE5252", ";. c #EDED9E9E4141", ":. c #EEEEA0A04646", ">. c #E9E9C1C10000", ",. c #EDEDC7C70000", "<. c #EBEBC9C90000", "1. c #F7F7D9D90000", "2. c #FBFBD1D10000", "3. c #FDFDD3D30000", "4. c #F9F9DBDB0000", "5. c #FDFDDFDF0000", "6. c #F2F2D7D72323", "7. c #F4F4D9D92929", "8. c #FDFDE3E30000", "9. c #F4F4E3E31E1E", "0. c #F3F3E0E02626", "q. c #F4F4E1E12B2B", "w. c #F7F7EAEA2E2E", "e. c #F5F5E2E23030", "r. c #F5F5E3E33131", "t. c #F6F6E4E43636", "y. c #F5F5E4E43D3D", "u. c #F7F7E6E63C3C", "i. c #DEDED0D04242", "p. c #E7E7D8D84E4E", "a. c #F4F4E3E34444", "s. c #F6F6E5E54C4C", "d. c #F8F8E6E64040", "f. c #F8F8E8E84242", "g. c #F9F9E8E84545", "h. c #F9F9E9E94848", "j. c #FAFAE9E94B4B", "k. c #FAFAEAEA4D4D", "l. c #F7F7E7E75050", "z. c #F7F7E8E85555", "x. c #FBFBEBEB5151", "c. c #FCFCECEC5656", "v. c #F8F8E9E95A5A", "b. c #FDFDEDED5B5B", "n. c #FDFDEEEE5E5E", "m. c #FDFDF3F35151", "M. c #FCFCEEEE6565", "N. c #FBFBEDED6A6A", "B. c #FCFCEFEF7272", "V. c #FDFDF0F07575", "C. c #FDFDF1F17A7A", "Z. c #FEFEF2F27B7B", "A. c #81819595E2E2", "S. c #81819696E2E2", "D. c #84849797E2E2", "F. c #84849898E2E2", "G. c None", /* pixels */ "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "; ; ; ; = 5.8.3.2.4.1.V V N M m ", "; F.F.A.A.Z.Z.B.B.M.N.} { [ ] m ", "; D.p u r n.m.%.$.k.h.^ Q Y ' v ", "- A.u r q b.p.-.#.i.f.Q U L ) v ", "* g r q 8 c.@.` _ o.y.U K J ( c ", "* f q 8 6 x.+.:.;.X.t.K H G / x ", "% d 7 6 3 h.O.> : .e.H G A ^ x ", "% s 6 2 1 g.d... .e.q.D A Z E j ", "# a 2 < , d.w.7.6.9.0.A Z C T j ", "@ i y e 9 v.z.l.s.y.a.! R T U h ", "@ O X X . ,.<.>.=.*.&.l j j h h ", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G." }; springlobby-0.169/src/images/flags/ME.xpm0000600000176000000410000000742712105760300021610 0ustar buildbotwww-data00000000000000/* XPM */ static const char *ME_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 145 2", " c black", ". c #5D5D3B3B6868", "X c #0F0F6565B1B1", "o c #0E0E6666B1B1", "O c #21219C9C7C7C", "+ c #4242A6A66868", "@ c #C8C803030808", "# c #CACA03030808", "$ c #CBCB03030808", "% c #CCCC03030808", "& c #CDCD03030808", "* c #CFCF03030808", "= c #D0D003030909", "- c #D1D103030909", "; c #D2D203030909", ": c #D4D403030909", "> c #D5D503030909", ", c #D6D603030909", "< c #D7D703030909", "1 c #D8D803030909", "2 c #D9D903030909", "3 c #DBDB03030909", "4 c #DCDC03030909", "5 c #DDDD03030909", "6 c #DFDF03030909", "7 c #E4E400000606", "8 c #E0E003030909", "9 c #E1E103030909", "0 c #E3E303030909", "q c #E4E403030909", "w c #E5E504040909", "e c #E7E704040909", "r c #E8E804040909", "t c #EAEA04040A0A", "y c #EBEB04040A0A", "u c #ECEC04040A0A", "i c #EEEE04040A0A", "p c #EFEF04040A0A", "a c #F0F004040A0A", "s c #F1F104040A0A", "d c #F3F304040A0A", "f c #F4F404040A0A", "g c #F5F504040A0A", "h c #F6F604040A0A", "j c #F7F704040A0A", "k c #FAFA04040A0A", "l c #E3E324241212", "z c #ECEC21211212", "x c #D4D441413535", "c c #D5D541413535", "v c #D7D741413535", "b c #D8D841413535", "n c #D9D941413535", "m c #DBDB41413535", "M c #DCDC41413636", "N c #DDDD41413636", "B c #D8D864642626", "V c #DCDC68682626", "C c #DEDE77772B2B", "Z c #E0E041413636", "A c #E1E141413636", "S c #E2E241413636", "D c #E3E341413636", "F c #E5E541413636", "G c #E7E741413636", "H c #E8E841413636", "J c #EAEA41413636", "K c #ECEC42423636", "L c #EDED42423636", "P c #EEEE42423636", "I c #F0F042423737", "U c #F2F242423737", "Y c #F3F342423737", "T c #F4F442423737", "R c #F6F642423737", "E c #F8F842423737", "W c #FBFB42423737", "Q c #FCFC42423737", "! c #E9E96F6F2929", "~ c #DEDE9C9C3232", "^ c #D8D8A7A72A2A", "/ c #DADAA9A92A2A", "( c #DBDBAAAA2A2A", ") c #DEDEADAD2A2A", "_ c #D5D5B2B23535", "` c #D6D6B3B33535", "' c #D8D8B3B33535", "] c #D8D8B5B53535", "[ c #D9D9B5B53535", "{ c #DBDBB7B73737", "} c #DDDDB8B83737", "| c #DFDFB9B93838", " . c #E2E294943333", ".. c #E6E696963434", "X. c #E8E89C9C3333", "o. c #F0F088883131", "O. c #F3F38A8A3131", "+. c #E1E1AEAE2B2B", "@. c #E3E3A0A03434", "#. c #E8E8A4A43737", "$. c #EBEBAEAE3A3A", "%. c #E3E3B0B02C2C", "&. c #E7E7B3B32C2C", "*. c #EBEBB5B52E2E", "=. c #EFEFB9B92F2F", "-. c #E3E3B4B43D3D", ";. c #E7E7B5B53D3D", ":. c #E1E1BCBC3838", ">. c #E3E3BDBD3939", ",. c #E6E6B8B83F3F", "<. c #EDEDB6B63E3E", "1. c #EBEBBABA3F3F", "2. c #E8E8BCBC3B3B", "3. c #F2F2BCBC3030", "4. c #D3D3ACAC4444", "5. c #E3E3BCBC4040", "6. c #E9E9BCBC4040", "7. c #E6E6C0C03A3A", "8. c #E7E7C1C13A3A", "9. c #EBEBC3C33C3C", "0. c #EDEDC6C63C3C", "q. c #EFEFC7C73D3D", "w. c #F2F2CBCB3E3E", "e. c #F6F6CECE3F3F", "r. c #FEFED4D43838", "t. c #FFFFD8D83939", "y. c #FFFFDBDB3A3A", "u. c #FFFFDFDF3C3C", "i. c #FFFFE2E23D3D", "p. c #FFFFE6E63E3E", "a. c #FFFFE7E73E3E", "s. c #FFFFE9E93F3F", "d. c #FFFFEBEB3F3F", "f. c #FFFFEDED3F3F", "g. c #FAFAD0D04141", "h. c #FBFBD1D14141", "j. c #FEFED4D44141", "k. c #FFFFD6D64242", "l. c #FFFFD8D84343", "z. c #FFFFDADA4343", "x. c #FFFFDDDD4545", "c. c #FFFFDEDE4545", "v. c #FFFFDFDF4646", "b. c #FFFFE1E14646", "n. c None", /* pixels */ "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "b.b.b.b.b.c.c.c.z.z.k.k.h.h.e.w.", "f.Q Q W W R W R R I I P P H H 3.", "d.Q k g g g s s y p e 0 8 5 G =.", "d.W g d d d p X.#.7 8 8 5 3 S *.", "p.W d d p o.z $.@.l ..5 3 : S &.", "p.R p p t o.<.X o ;. .3 : : N +.", "i.I p y y ! 1.O + -.V : = = m +.", "u.P e e 8 8 5 6.,.4.. = = * m ) ", "y.P 0 8 8 5 2.C 5.B ~ * # # c ( ", "y.H 5 3 3 3 : = = * * # # @ c ( ", "r.G F F S S N m m m m c c c c ^ ", "q.0.9.7.7.>.>.| | ] ] ] ' ` ` ` ", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n." }; springlobby-0.169/src/images/flags/MG.xpm0000600000176000000410000000674712105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MG_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 134 2", " c black", ". c #000027270000", "X c #000029290000", "o c #00002D2D0000", "O c #00002F2F0000", "+ c #000031310000", "@ c #000033330000", "# c #000035350000", "$ c #000039390000", "% c #00003D3D0000", "& c #00003F3F0000", "* c #000041410000", "= c #000047470000", "- c #00005D5D0000", "; c #0B0B95950B0B", ": c #0F0F97970E0E", "> c #101097971010", ", c #131399991313", "< c #141499991414", "1 c #18189C9C1919", "2 c #19199C9C1919", "3 c #1E1E9F9F1E1E", "4 c #1F1F9F9F1F1F", "5 c #1414A3A31414", "6 c #1919A5A51919", "7 c #1F1FA8A81F1F", "8 c #2323A1A12323", "9 c #2424A2A22424", "0 c #2424ABAB2424", "q c #2929A4A42929", "w c #2A2AA4A42A2A", "e c #2C2CA2A22C2C", "r c #2F2FA4A42F2F", "t c #2E2EA6A62E2E", "y c #2F2FA7A72F2F", "u c #2A2AADAD2A2A", "i c #2F2FB0B02F2F", "p c #3232A5A53232", "a c #3333A6A63232", "s c #3434A9A93434", "d c #3535A8A83535", "f c #3535ADAD3535", "g c #3939A9A93939", "h c #3B3BAEAE3A3A", "j c #3D3DACAC3D3D", "k c #3636B0B03636", "l c #4242AEAE4242", "z c #4646B0B04646", "x c #4B4BB1B14B4B", "c c #4D4DB4B44D4D", "v c #5252B7B75252", "b c #5555BBBB5858", "n c #6464BDBD6464", "m c #9B9B00000000", "M c #CECE31311A1A", "N c #D1D135351F1F", "B c #D2D23A3A2525", "V c #D4D43F3F2B2B", "C c #E7E700000000", "Z c #E9E900000000", "A c #EBEB00000000", "S c #EDED00000000", "D c #EFEF00000000", "F c #F1F100000000", "G c #F3F300000000", "H c #F5F500000000", "J c #F7F700000000", "K c #F9F900000000", "L c #FBFB00000000", "P c #FDFD00000000", "I c #F4F420202020", "U c #F5F525252525", "Y c #F5F526262626", "T c #F6F62B2B2B2B", "R c #F6F62C2C2C2C", "E c #F7F730303030", "W c #F7F731313131", "Q c #F5F53F3F3F3F", "! c #F8F836363636", "~ c #F8F837373636", "^ c #F8F837373737", "/ c #F9F93B3B3C3C", "( c #F9F93C3C3C3C", ") c #F9F93C3C3D3D", "_ c #D6D644443030", "` c #D5D54E4E3B3B", "' c #D8D849493636", "] c #D9D94E4E3B3B", "[ c #DBDB52524040", "{ c #F6F644444444", "} c #F7F749494949", "| c #F7F74E4E4E4E", " . c #FAFA41414141", ".. c #FAFA41414242", "X. c #FAFA42424242", "o. c #FBFB46464646", "O. c #FBFB47474747", "+. c #FCFC4B4B4B4B", "@. c #FCFC4C4C4C4C", "#. c #F8F853535353", "$. c #F9F957575757", "%. c #FDFD51515151", "&. c #FAFA5C5C5C5C", "*. c #E7E767675D5D", "=. c #FBFB60606060", "-. c #FCFC60606262", ";. c #FCFC65656565", ":. c #FDFD66666666", ">. c #FCFC69696969", ",. c #FDFD6A6A6A6A", "<. c #FDFD6D6D6D6D", "1. c #FDFD70707171", "2. c #FEFE85858585", "3. c gray85", "4. c gray86", "5. c #DFDFDFDFDFDF", "6. c #E1E1E1E1E1E1", "7. c gray89", "8. c gray90", "9. c #E7E7E7E7E7E7", "0. c #E9E9E9E9E9E9", "q. c gray92", "w. c gray93", "e. c #EFEFEFEFEFEF", "r. c #F9F9F9F9F9F9", "t. c gray98", "y. c #FBFBFBFBFBFB", "u. c #FBFBFCFCFBFB", "i. c gray99", "p. c #FDFDFCFCFDFD", "a. c #FDFDFDFDFDFD", "s. c #FEFEFEFEFEFE", "d. c gray100", "f. c None", /* pixels */ "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "e.e.e.e.e.P P P L L J J G G S S ", "e.d.d.t.d.2.1.<.>.;.=.&.$.#.| A ", "e.d.d.d.d.>.%.@.O...) ^ W R } A ", "e.d.d.d.d.;.+.o...) ^ W T Y { C ", "e.d.d.t.t.=.o...) ^ R T Y I Q C ", "0.d.d.u.d.*.] ] ' _ _ B M M ` m ", "0.d.u.u.u.b h f i u 0 8 6 5 k = ", "0.d.t.u.t.v s y q 8 4 1 < > a @ ", "9.y.t.t.t.c r q 8 7 1 > : ; r o ", "9.t.t.t.t.n x z l j g d a r e . ", "6.6.5.3.3.- * % * % $ @ o o X # ", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f." }; springlobby-0.169/src/images/flags/MH.xpm0000600000176000000410000001010412105760300021575 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MH_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 159 2", " c black", ". c #000000001313", "X c #000000001717", "o c #000000001919", "O c #000000001B1B", "+ c #000000001F1F", "@ c #000000002525", "# c #000000002727", "$ c #000000002D2D", "% c #000000003333", "& c #000000003939", "* c #000000003F3F", "= c #3B3B00000000", "- c #000000004545", "; c #000000004B4B", ": c #000000004F4F", "> c #000000005151", ", c #000000005555", "< c #000000005B5B", "1 c #000000005F5F", "2 c #000000006565", "3 c #000000006969", "4 c #000000006B6B", "5 c #000000006D6D", "6 c #000000006F6F", "7 c #000000007171", "8 c #000000007373", "9 c #000001017575", "0 c #000003037575", "q c #000007077777", "w c #000009097979", "e c #000009097B7B", "r c #0F0F29297373", "t c #474743436B6B", "y c #12123D3D8F8F", "u c #14143B3B8F8F", "i c #161641419292", "p c #171741419292", "a c #191940409292", "s c #181843439393", "d c #1B1B44449494", "f c #1E1E48489696", "g c #1E1E48489797", "h c #202049499797", "j c #232349499797", "k c #2C2C50509B9B", "l c #323257579E9E", "z c #353559599E9E", "x c #363659599F9F", "c c #34345A5AA2A2", "v c #36365B5BA1A1", "b c #37375C5CA1A1", "n c #38385C5CA1A1", "m c #3B3B6060A4A4", "M c #3C3C6464ADAD", "N c #3D3D6565B0B0", "B c #545467679C9C", "V c #5E5E67679595", "C c #40406262A4A4", "Z c #42426565A7A7", "A c #46466262A2A2", "S c #42426767AEAE", "D c #47476969A9A9", "F c #47476A6AADAD", "G c #4D4D6969A7A7", "H c #4A4A6A6AABAB", "J c #4B4B6A6AABAB", "K c #49496D6DAFAF", "L c #4C4C6E6EAFAF", "P c #41416868B2B2", "I c #42426969B0B0", "U c #45456868B2B2", "Y c #46466A6AB1B1", "T c #49496F6FB4B4", "R c #4E4E7171B0B0", "E c #4F4F7171B0B0", "W c #50507171B1B1", "Q c #51517272B1B1", "! c #53537474B2B2", "~ c #53537575B3B3", "^ c #54547575B3B3", "/ c #55557575B3B3", "( c #58587979B4B4", ") c #58587979B5B5", "_ c #5C5C7A7AB2B2", "` c #58587A7AB9B9", "' c #5E5E7F7FB9B9", "] c #6F6F71719696", "[ c #727269698484", "{ c #7E7E7E7E9D9D", "} c #65658181B9B9", "| c #65658282B9B9", " . c #66668383BDBD", ".. c #6B6B8383B1B1", "X. c #6A6A8686BCBC", "o. c #6C6C8686B9B9", "O. c #6E6E8A8ABEBE", "+. c #6F6F8B8BBEBE", "@. c #71718D8DC0C0", "#. c #72728E8EC0C0", "$. c #71718F8FC4C4", "%. c #75758F8FC2C2", "&. c #71719090C5C5", "*. c #75759090C2C2", "=. c #78789292C3C3", "-. c #7F7F9898C7C7", ";. c #84846B6B7777", ":. c #959575757777", ">. c #AFAF6F6F5959", ",. c #BBBB78785D5D", "<. c #A2A26E6E6262", "1. c #EBEB00000000", "2. c #D3D374743C3C", "3. c #E9E95D5D0000", "4. c #F2F276762C2C", "5. c #E2E27E7E4141", "6. c #F6F681812D2D", "7. c #F7F781813535", "8. c #D2D28A8A6262", "9. c #F7F792924B4B", "0. c #F5F5A5A56F6F", "q. c #F7F7A9A96B6B", "w. c #F6F6A8A86E6E", "e. c #F8F8A8A86A6A", "r. c #F1F1A6A67474", "t. c #B2B2A4A4ACAC", "y. c #84849B9BC8C8", "u. c #85859B9BC8C8", "i. c #8A8A9E9EC6C6", "p. c #9797A7A7CECE", "a. c #9090A7A7D1D1", "s. c #9D9DADADD1D1", "d. c #9C9CADADD2D2", "f. c #AEAEB8B8CFCF", "g. c #A3A3B3B3D5D5", "h. c #A9A9B6B6D6D6", "j. c #B6B6C2C2DDDD", "k. c #B9B9C3C3DCDC", "l. c #BFBFC7C7D9D9", "z. c #B5B5C5C5E1E1", "x. c #CFCF9D9D8282", "c. c #D8D8C1C1B9B9", "v. c #F5F5CDCDAEAE", "b. c #F7F7DEDEBFBF", "n. c #F8F8D8D8B8B8", "m. c #C3C3CBCBE2E2", "M. c #D6D6DADAE6E6", "N. c #D7D7E0E0EEEE", "B. c #F5F5DEDECCCC", "V. c #F6F6E3E3CCCC", "C. c #F6F6E2E2D3D3", "Z. c #E7E7E7E7E7E7", "A. c #EEEEEFEFF3F3", "S. c #EEEEF3F3F5F5", "D. c #F4F4F4F4F4F4", "F. c gray96", "G. c #FDFDFDFDFEFE", "H. c #FEFEFEFEFEFE", "J. c None", /* pixels */ "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "e e e e q 0 7 5 3 2 1 < , > : = ", "e y.j.m.y.=.%.+.+.X.} ' ` { 8.1.", "e d.H.H.p.( / Q L F N A <.4.9.3.", "e g.H.H.d./ E L I M [ 2.6.0.C.Z.", "0 -.h.k.} E K P B >.7.w.B.D.S...", "7 *.) ~ R F S ;.5.q.V.D.N.i._ @ ", "5 $.Q R U V ,.q.b.A.z.o.k u v + ", "5 +.T G :.r.n.M.a.J j p s p n O ", "2 .] x.v.l.$.v j g g d p y x X ", "1 t.c.f.$.E J J D Z C m b x l . ", "t r 3 ; - - & % $ @ @ + O X . . ", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J." }; springlobby-0.169/src/images/flags/MK.xpm0000600000176000000410000001027612105760300021612 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MK_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 165 2", " c black", ". c #DDDD00000000", "X c #DDDD03030000", "o c #DFDF00000000", "O c #E1E100000000", "+ c #E3E300000000", "@ c #E5E500000000", "# c #E7E700000000", "$ c #E9E900000000", "% c #EBEB00000000", "& c #EDED00000000", "* c #EFEF00000000", "= c #F1F100000000", "- c #F3F300000000", "; c #F5F500000000", ": c #F7F700000000", "> c #F9F900000000", ", c #FBFB00000000", "< c #FDFD00000000", "1 c red", "2 c #F2F210101010", "3 c #F3F319191919", "4 c #F4F41E1E1E1E", "5 c #EFEF31310000", "6 c #EBEB3D3D0000", "7 c #F3F32C2C1919", "8 c #F4F42D2D1F1F", "9 c #FDFD35350000", "0 c #FDFD39390000", "q c #F5F526262626", "w c #F5F52D2D2424", "e c #F5F52E2E2525", "r c #F7F72E2E2E2E", "t c #F6F638382B2B", "y c #F3F332323232", "u c #F3F335353535", "i c #F4F439393939", "p c #F5F53E3E3D3D", "a c #F8F834343434", "s c #F8F83E3E3434", "d c #F9F93C3C3D3D", "f c #F3F34D4D0000", "g c #F7F74D4D0000", "h c #F2F240401414", "j c #F2F241411414", "k c #F2F25A5A1313", "l c #F4F440402020", "z c #F2F247472F2F", "x c #F2F24B4B3232", "c c #F9F942423C3C", "v c #F6F65D5D2B2B", "b c #FFFF67670000", "n c #FFFF77770000", "m c #F4F479791F1F", "M c #F5F565652424", "N c #F6F66F6F2A2A", "B c #F4F46E6E3636", "V c #F5F56C6C3F3F", "C c #F8F86C6C3737", "Z c #F6F676762A2A", "A c #F7F777772F2F", "S c #F7F772723030", "D c #F8F876763636", "F c #F9F979793A3A", "G c #F9F97C7C3A3A", "H c #F6F644444444", "J c #F7F74B4B4B4B", "K c #FAFA42424242", "L c #FBFB49494949", "P c #FBFB51514545", "I c #FCFC51514B4B", "U c #FBFB5A5A4949", "Y c #F8F850505050", "T c #F9F954545555", "R c #FDFD51515151", "E c #FDFD54545454", "W c #FDFD59595050", "Q c #FDFD5C5C5454", "! c #FAFA5C5C5C5C", "~ c #FEFE5C5C5C5C", "^ c #F7F765654949", "/ c #FBFB66664545", "( c #F9F968685757", ") c #F9F96F6F5858", "_ c #FCFC71714F4F", "` c #FAFA79794040", "' c #FEFE71715858", "] c #FEFE7F7F5959", "[ c #FBFB60606060", "{ c #FCFC66666565", "} c #FCFC6A6A6A6A", "| c #FCFC78786666", " . c #FDFD70707171", ".. c #FEFE74747474", "X. c #FEFE77777777", "o. c #FEFE79797979", "O. c #F1F194940B0B", "+. c #F3F39D9D1919", "@. c #F6F684842B2B", "#. c #F7F78F8F3030", "$. c #F8F884843636", "%. c #F9F98D8D3A3A", "&. c #F6F6A7A72929", "*. c #F5F5ACAC2323", "=. c #F6F6AEAE2C2C", "-. c #F7F7AEAE3131", ";. c #FAFAAFAF3F3F", ":. c #F5F5B6B62525", ">. c #F2F2BEBE2F2F", ",. c #F7F7BFBF2F2F", "<. c #F9F9BCBC3C3C", "1. c #FBFB83834646", "2. c #FCFC84844B4B", "3. c #FAFA89894242", "4. c #FBFB89894747", "5. c #FEFE88885959", "6. c #FAFA96964040", "7. c #FBFB96964646", "8. c #FDFD97975151", "9. c #FEFE88887979", "0. c #FFFF8F8F7A7A", "q. c #FDFD99996F6F", "w. c #FEFE97977676", "e. c #FAFAAFAF4444", "r. c #FAFABEBE4141", "t. c #FBFBBEBE4747", "y. c #FCFCBABA4C4C", "u. c #FDFDBFBF5454", "i. c #DDDDDDDD0000", "p. c #E7E7C5C50000", "a. c #E9E9C7C70000", "s. c #F1F1CACA0E0E", "d. c #F4F4D8D81F1F", "f. c #F8F8C0C03535", "g. c #F7F7D4D43131", "h. c #FAFADBDB3F3F", "j. c #E5E5E5E50000", "k. c #EDEDEFEF0000", "l. c #FBFBE3E30000", "z. c #FDFDE3E30000", "x. c #F3F3E6E61A1A", "c. c #F5F5F5F50000", "v. c #FDFDFDFD0000", "b. c yellow", "n. c #F2F2E3E32C2C", "m. c #F4F4F4F43B3B", "M. c #F8F8F8F83636", "N. c #F9F9F9F93B3B", "B. c #F6F6CFCF4242", "V. c #F7F7CDCD4646", "C. c #FCFCC8C84B4B", "Z. c #F8F8C7C75353", "A. c #FEFEC4C45F5F", "S. c #FAFAD3D35D5D", "D. c #FCFCDEDE6969", "F. c #FDFDDDDD6D6D", "G. c #FFFFD9D97B7B", "H. c #F7F7EFEF4E4E", "J. c #FCFCE7E74F4F", "K. c #FEFEE2E25C5C", "L. c #FDFDF3F35353", "P. c #FBFBF0F06262", "I. c #FFFFF7F77B7B", "U. c #FEFEFDFD7373", "Y. c None", /* pixels */ "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.", "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.", "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.", "b.b 1 1 , 1 1 z.l., : : = = 5 k.", "n I.G.9.X.X. .F.D.{ [ ! ( Z.H.6 ", "1 0.A.K.5.R R y.t.K d C g.=.^ % ", "1 o.~ ] u.8.I 4.3.c $.-.v q H # ", "9 w.' Q W 2.1.r.<.D S t e l V # ", "b.U.L.J.C.7.6.N.M.#.@.:.d.x.m.j.", "0 q._ U P ` G f.,.N M 8 7 h B + ", ", } L / ;.%.s A Z e m +.h 2 y o ", ", | e.h.F a r &.*.4 3 k s.O.z o ", "f P.S.) T Y J V.B.p i u x >.n.o ", "c.f = & & & % a.p.# + + o o X i.", "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.", "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y." }; springlobby-0.169/src/images/flags/ML.xpm0000600000176000000410000000755712105760300021623 0ustar buildbotwww-data00000000000000/* XPM */ static const char *ML_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 149 2", " c black", ". c #000053530000", "X c #00005B5B0000", "o c #000063630000", "O c #000067670000", "+ c #00006F6F0000", "@ c #000075750000", "# c #000077770000", "$ c #00007B7B0000", "% c #00007F7F0000", "& c #000083830000", "* c #000085850000", "= c #000087870000", "- c #000089890000", "; c #000091910000", ": c #3A3AAAAA3A3A", "> c #3F3FAEAE3F3F", ", c #4040ADAD3F3F", "< c #4444B1B14444", "1 c #4545B0B04545", "2 c #4545B1B14545", "3 c #4B4BB3B34B4B", "4 c #4949B4B44949", "5 c #4F4FB6B64F4F", "6 c #4F4FB7B74F4F", "7 c #5050B5B55050", "8 c #5454B5B55555", "9 c #5454B7B75454", "0 c #5353B9B95353", "q c #5454B9B95454", "w c #5858B9B95858", "e c #5858BBBB5959", "r c #5959BABA5959", "t c #5858BCBC5858", "y c #5C5CBDBD5C5C", "u c #5D5DBCBC5D5D", "i c #5F5FBFBF5F5F", "p c #6161BEBE6262", "a c #6666C0C06666", "s c #6A6AC3C36A6A", "d c #6F6FC4C46F6F", "f c #7272C6C67373", "g c #7777C7C77777", "h c #7676C8C87676", "j c #7979C8C87979", "k c #7B7BCACA7A7A", "l c #7B7BCACA7B7B", "z c #DDDD00000000", "x c #DFDF00000000", "c c #E1E100000000", "v c #E3E300000000", "b c #E5E500000000", "n c #E7E700000000", "m c #E9E900000000", "M c #EBEB00000000", "N c #EDED00000000", "B c #EFEF00000000", "V c #F1F100000000", "C c #F3F300000000", "Z c #F5F500000000", "A c #F1F10B0B0B0B", "S c #F1F10F0F0E0E", "D c #F2F210101010", "F c #F2F213131313", "G c #F2F214141414", "H c #F3F319191919", "J c #F3F31A1A1A1A", "K c #F4F41F1F1F1F", "L c #F4F420202020", "P c #F5F525252525", "I c #F5F526262626", "U c #F2F22C2C2C2C", "Y c #F2F22F2F2F2F", "T c #F6F62B2B2B2B", "R c #F6F62C2C2C2C", "E c #F2F232323232", "W c #F3F332323232", "Q c #F3F335353535", "! c #F7F731313131", "~ c #F4F436363636", "^ c #F4F43B3B3B3B", "/ c #F5F53F3F3F3F", "( c #F8F837373737", ") c #F6F644444444", "_ c #F7F749494949", "` c #F7F74E4E4E4E", "' c #F8F853535353", "] c #F9F957575757", "[ c #FAFA5C5C5C5C", "{ c #E3E3A3A30000", "} c #CBCBDFDF0000", "| c #F7F7C5C50000", " . c #F3F3D3D31919", ".. c #F4F4D5D51F1F", "X. c #F5F5D7D72424", "o. c #F6F6D9D92B2B", "O. c #F7F7DADA3030", "+. c #F4F4D8D83939", "@. c #F8F8DCDC3636", "#. c #F9F9DEDE3D3D", "$. c #E5E5E5E50000", "%. c #E7E7E7E70000", "&. c #E9E9E9E90000", "*. c #EBEBEBEB0000", "=. c #E3E3F3F30000", "-. c #F9F9F9F90000", ";. c #FBFBFBFB0000", ":. c #FDFDFDFD0000", ">. c #F4F4F4F41E1E", ",. c #E8E8F2F23434", "<. c #E9E9F3F33A3A", "1. c #F5F5F5F52323", "2. c #F5F5F5F52424", "3. c #F6F6F6F62929", "4. c #F6F6F6F62A2A", "5. c #F7F7F7F72E2E", "6. c #F7F7F7F72F2F", "7. c #F7F7F7F73030", "8. c #F5F5F5F53D3D", "9. c #F8F8F8F83434", "0. c #F8F8F8F83535", "q. c #F8F8F8F83636", "w. c #F9F9F9F93A3A", "e. c #F9F9F9F93B3B", "r. c #F9F9F9F93C3C", "t. c #EBEBF4F44040", "y. c #ECECF5F54646", "u. c #EDEDF6F64B4B", "i. c #EAEAF3F35050", "p. c #EEEEF7F75151", "a. c #F6F6F6F64242", "s. c #F7F7F7F74646", "d. c #F7F7F7F74B4B", "f. c #FAFAFAFA4040", "g. c #FAFAFAFA4141", "h. c #FAFAFAFA4242", "j. c #FBFBFBFB4646", "k. c #FBFBFBFB4747", "l. c #FCFCFCFC4B4B", "z. c #FCFCFCFC4C4C", "x. c #F0F0F8F85454", "c. c #FDFDFDFD5151", "v. c #FBFBE4E46060", "b. c #FCFCFCFC6565", "n. c #FCFCFCFC6969", "m. c #FDFDFDFD6D6D", "M. c #F3F3FAFA7474", "N. c #FDFDFDFD7171", "B. c None", /* pixels */ "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "; - - = & =.:.:.;.-.| Z V V B B ", "= l l l g M.N.m.n.b.v.[ ] ' ` B ", "- l i y q x.c.z.j.j.#.( ! R _ n ", "= l r r q p.z.k.h.r.@.! T I ) n ", "= g r 0 7 u.k.g.r.q.o.T I L / n ", "& f 0 6 3 u.h.w.q.7.o.I K H ^ n ", "% d 6 4 1 <.w.q.7.4.X.K H F ~ c ", "$ s 4 1 , <.9.5.4.2...H F F W x ", "# a < > : ,.5.4.1.>. .F S A Y x ", "+ p u w 8 i.d.s.a.8.+.Q W Y U x ", "# O o X . } *.*.$.$.{ c x x z z ", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B." }; springlobby-0.169/src/images/flags/MM.xpm0000600000176000000410000000677112105760300021621 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 132 2", " c black", ". c #00000000B7B7", "X c #00000000C1C1", "o c #00000000C3C3", "O c #00000000C5C5", "+ c #00000000C7C7", "@ c #00000000C9C9", "# c #45453B3BCECE", "$ c #46464141D3D3", "% c #47474040D3D3", "& c #46464646DDDD", "* c #4B4B4646D3D3", "= c #4C4C4747D5D5", "- c #4B4B4B4BDBDB", "; c #51514C4CD7D7", ": c #51515151DDDD", "> c #55555858DEDE", ", c #5E5E5757D6D6", "< c #5D5D5858D7D7", "1 c #6C6C6565DADA", "2 c #71716D6DDFDF", "3 c #76767272DEDE", "4 c #70707070E4E4", "5 c #77777979E5E5", "6 c #79797979E3E3", "7 c #7D7D7D7DE4E4", "8 c #DDDD00000000", "9 c #DFDF00000000", "0 c #E1E100000000", "q c #E3E300000000", "w c #E5E500000000", "e c #E7E700000000", "r c #E9E900000000", "t c #EBEB00000000", "y c #EDED00000000", "u c #EFEF00000000", "i c #F1F100000000", "p c #F3F300000000", "a c #F5F500000000", "s c #F7F700000000", "d c #F1F10B0B0B0B", "f c #F1F10F0F0E0E", "g c #F9F900000000", "h c #FBFB00000000", "j c #F2F210101010", "k c #F2F213131313", "l c #F2F214141414", "z c #F3F319191919", "x c #F3F31A1A1A1A", "c c #F4F41E1E1E1E", "v c #F4F41F1F1F1F", "b c #F4F420202020", "n c #F5F523232323", "m c #F5F524242424", "M c #F5F525252525", "N c #F5F526262626", "B c #F2F22C2C2C2C", "V c #F2F22F2F2F2F", "C c #F6F629292929", "Z c #F6F62A2A2A2A", "A c #F6F62B2B2B2B", "S c #F6F62C2C2C2C", "D c #F7F72E2E2E2E", "F c #F7F72F2F2F2F", "G c #F2F232323232", "H c #F3F332323232", "J c #F3F335353535", "K c #F7F730303030", "L c #F7F731313131", "P c #F4F436363636", "I c #F2F235353939", "U c #F4F439393939", "Y c #F4F43B3B3B3B", "T c #F5F53D3D3D3D", "R c #F5F53F3F3F3F", "E c #F8F834343434", "W c #F8F836363636", "Q c #F8F837373636", "! c #F8F837373737", "~ c #F9F93A3A3A3A", "^ c #F9F93B3B3C3C", "/ c #F9F93C3C3C3C", "( c #F9F93C3C3D3D", ") c #FAFA3F3F3F3F", "_ c #F0F03B3B4242", "` c #F1F140404747", "' c #F6F642424242", "] c #F6F644444444", "[ c #F7F746464646", "{ c #F1F145454C4C", "} c #F7F749494949", "| c #F7F74B4B4B4B", " . c #F7F74E4E4E4E", ".. c #FAFA41414242", "X. c #FAFA42424242", "o. c #FAFA44444444", "O. c #FBFB45454545", "+. c #FBFB47474747", "@. c #FBFB49494949", "#. c #F1F14A4A5151", "$. c #F3F34F4F5656", "%. c #F8F850505050", "&. c #F8F853535353", "*. c #F9F954545555", "=. c #F9F957575757", "-. c #F9F958585858", ";. c #FAFA5C5C5C5C", ":. c #FAFA5D5D5D5D", ">. c #FBFB60606060", ",. c #FBFB61616262", "<. c #FCFC65656565", "1. c #FCFC66666666", "2. c #FCFC69696969", "3. c #FCFC6A6A6A6A", "4. c #F6F66F6F7474", "5. c #80808080E5E5", "6. c #81818383E7E7", "7. c #82828282E6E6", "8. c #94949595EAEA", "9. c #A9A9ABABEDED", "0. c #AEAEAFAFEDED", "q. c #B0B0B0B0EEEE", "w. c #B4B4B5B5F0F0", "e. c #B9B9B9B9F1F1", "r. c #BABABABAF0F0", "t. c #BABABABAF1F1", "y. c #C1C1C1C1F2F2", "u. c #DBDBDBDBF7F7", "i. c #DCDCDCDCF8F8", "p. c #DDDDDDDDF9F9", "a. c #DEDEDEDEF8F8", "s. c None", /* pixels */ "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "+ o o @ o o + . h h s s p p y y ", "o 7 8.y.t.6 4 2 2.<.>.;.=.&. .t ", "o 7.t.a.a.q.: ; +.X.( Q L S } t ", "o 7.r.a.u.0.- = X.^ Q L A N ] w ", "+ 5 7.q.9.> & $ ^ Q F A N b R w ", ". 3 , 1 , = $ # Q K A N c z T w ", "y 4.$. .{ ` _ I F A m v z k P w ", "h 2.@.+._ ~ Q S A m v z l j H 9 ", "h <.O.) ~ E S Z b c z k f d V 9 ", "s ,.:.-.=. .| ] ' R U J H V B 9 ", "s p p y y y y t t w 0 0 9 9 8 8 ", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s." }; springlobby-0.169/src/images/flags/MN.xpm0000600000176000000410000000734112105760300021614 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MN_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 143 2", " c black", ". c #00000000D3D3", "X c #00000000D9D9", "o c #00000000E5E5", "O c #00000000E7E7", "+ c #00000000E9E9", "@ c #00000000EBEB", "# c #00000000EFEF", "$ c #00000000F9F9", "% c #00000000FBFB", "& c #00000000FDFD", "* c #1E1E1919EEEE", "= c #1E1E1E1EF4F4", "- c #24241F1FEFEF", "; c #23232323F5F5", ": c #24242424F5F5", "> c #2A2A2424F0F0", ", c #29292929F6F6", "< c #2A2A2A2AF6F6", "1 c #2E2E2E2EF7F7", "2 c #2F2F2F2FF7F7", "3 c #30302B2BF1F1", "4 c #30303030F7F7", "5 c #35353030F2F2", "6 c #34343434F8F8", "7 c #35353535F8F8", "8 c #36363636F8F8", "9 c #3C3C3737F3F3", "0 c #3E3E3939F0F0", "q c #3D3D3D3DF5F5", "w c #3B3B3B3BF9F9", "e c #3C3C3C3CF9F9", "r c #41413535ECEC", "t c #47473B3BEDED", "y c #41413C3CF5F5", "u c #4D4D4141EEEE", "i c #42424242F6F6", "p c #46464646F7F7", "a c #40404040FAFA", "s c #41414141FAFA", "d c #42424141FAFA", "f c #42424242FAFA", "g c #46464646FBFB", "h c #47474747FBFB", "j c #4B4B4B4BF7F7", "k c #4B4B4B4BFCFC", "l c #4C4C4C4CFCFC", "z c #52524646F0F0", "x c #57574C4CF1F1", "c c #5B5B5050EEEE", "v c #51515151FDFD", "b c #5B5B5151F2F2", "n c #60605555F2F2", "m c #65656060F7F7", "M c #65656565FCFC", "N c #69696969FCFC", "B c #6D6D6D6DFDFD", "V c #70707070FEFE", "C c #7D7D7575F5F5", "Z c #DDDD00000000", "A c #DFDF00000000", "S c #E1E100000000", "D c #E3E300000000", "F c #E5E500000000", "G c #E7E700000000", "H c #E9E900000000", "J c #EBEB00000000", "K c #EDED00000000", "L c #EFEF00000000", "P c #F1F100000000", "I c #F3F300000000", "U c #F5F500000000", "Y c #F7F700000000", "T c #F1F10B0B0B0B", "R c #F1F10F0F0E0E", "E c #F9F900000000", "W c #FBFB00000000", "Q c #FDFD00000000", "! c red", "~ c #F2F210101010", "^ c #F2F213131313", "/ c #F2F214141414", "( c #F3F319191919", ") c #F3F31A1A1A1A", "_ c #F4F41F1F1F1F", "` c #F4F420202020", "' c #F5F525252525", "] c #F5F526262626", "[ c #F2F22C2C2C2C", "{ c #F2F22F2F2F2F", "} c #F6F62B2B2B2B", "| c #F6F62C2C2C2C", " . c #F2F232323232", ".. c #F3F332323232", "X. c #F3F335353535", "o. c #F7F731313131", "O. c #F4F436363636", "+. c #F4F43B3B3B3B", "@. c #F5F53F3F3F3F", "#. c #F8F837373737", "$. c #F9F95B5B3A3A", "%. c #FAFA5F5F3F3F", "&. c #F6F644444444", "*. c #F7F749494949", "=. c #F7F74E4E4E4E", "-. c #F8F853535353", ";. c #F9F957575757", ":. c #FDFD56565050", ">. c #FDFD54545454", ",. c #F9F95B5B5555", "<. c #FAFA5C5C5C5C", "1. c #FEFE59595959", "2. c #FBFB65654545", "3. c #FCFC6A6A4B4B", "4. c #FAFA65655D5D", "5. c #F9F969695858", "6. c #FEFE6B6B5C5C", "7. c #FBFB71716262", "8. c #FEFE77777777", "9. c #FFFF7B7B7A7A", "0. c #FFFF7B7B7B7B", "q. c #FEFE7F7F7979", "w. c #FDFD83835454", "e. c #FEFE87877676", "r. c #FDFDACAC5353", "t. c #FEFEACAC5858", "y. c #FAFAB2B24444", "u. c #FFFFB5B57B7B", "i. c #FAFAD3D33F3F", "p. c #FBFBCCCC4949", "a. c #FEFEC3C35959", "s. c #FEFECECE5F5F", "d. c #FCFCD0D04F4F", "f. c #FCFCD6D64F4F", "g. c #FBFBDADA4545", "h. c #FBFBDADA4949", "j. c #FEFEDEDE5C5C", "k. c #FEFEC8C87979", "l. c #FCFCD8D86666", "z. c #FCFCDBDB6A6A", "x. c #FDFDDDDD6F6F", "c. c #FEFEDCDC7373", "v. c None", /* pixels */ "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "! ! ! ! ! + & & % % # U I I K K ", "! 0.u.q.8.C V B N M m <.;.-.=.J ", "! 0.s.6.1.b v l h f y #.o.| *.J ", "! k.j.a.>.b l h f e 9 o.} ] &.F ", "! e.t.w.:.x h f e 8 5 } ] ` @.F ", "! c.r.f.3.z a q 8 3 > ] _ ( +.J ", "! c.p.g.2.u w 6 4 < > _ ( / O.D ", "E z.p.g.2.t 6 1 < : - ( ^ ^ .A ", "E l.y.i.$.r 1 , : = = ^ R T { A ", "U 7.4.5.,.c j p i q 0 X. .{ [ A ", "U I I K K . # + o o X D A A Z Z ", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.", "v.v.v.v.v.v.v.v.v.v.v.v.v.v.v.v." }; springlobby-0.169/src/images/flags/MO.xpm0000600000176000000410000001003712105760300021611 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MO_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 157 2", " c black", ". c #000027270000", "X c #000029290000", "o c #00002D2D0000", "O c #00002F2F0000", "+ c #000031310000", "@ c #000033330000", "# c #000035350000", "$ c #000039390000", "% c #00003B3B0000", "& c #00003D3D0000", "* c #00003F3F0000", "= c #000045450000", "- c #00004B4B0000", "; c #00004D4D0000", ": c #000051510000", "> c #000057570000", ", c #00005D5D0000", "< c #000061610000", "1 c #000063630000", "2 c #000067670000", "3 c #00006D6D0000", "4 c #00006F6F0000", "5 c #000071710000", "6 c #000075750000", "7 c #000077770000", "8 c #00007B7B0000", "9 c #00007D7D0000", "0 c #00007F7F0000", "q c #000081810000", "w c #000083830000", "e c #000085850000", "r c #000087870000", "t c #000089890000", "y c #000091910000", "u c #0B0B95950B0B", "i c #0F0F97970E0E", "p c #101097971010", "a c #131398981313", "s c #141499991414", "d c #14149A9A1414", "f c #19199B9B1919", "g c #1A1A9C9C1A1A", "h c #1B1B9C9C1B1B", "j c #20209F9F2020", "k c #2525A1A12525", "l c #2626A2A22626", "z c #2828A2A22B2B", "x c #2B2BA5A52B2B", "c c #2C2CA2A22C2C", "v c #2C2CA6A62C2C", "b c #2F2FA4A42F2F", "n c #3939AAAA2B2B", "m c #3030A5A53030", "M c #3232A5A53232", "N c #3333A6A63232", "B c #3131A9A93131", "V c #3535A8A83535", "C c #3636A8A83636", "Z c #3737A9A93737", "A c #3737AAAA3737", "S c #3939A9A93939", "D c #3A3AABAB3A3A", "F c #3B3BAAAA3B3B", "G c #3D3DABAB3D3D", "H c #3E3EACAC3E3E", "J c #3F3FADAD3F3F", "K c #3F3FAFAF3F3F", "L c #4141AEAE3030", "P c #4040AEAE3F3F", "I c #4545B0B03636", "U c #4545B1B13D3D", "Y c #4B4BB3B33E3E", "T c #4242ADAD4242", "R c #4444AFAF4444", "E c #4545AEAE4545", "W c #4444B1B14444", "Q c #4545B0B04545", "! c #4545B2B24545", "~ c #4646B1B14646", "^ c #4747B0B04747", "/ c #4646B2B24747", "( c #4545B0B04949", ") c #4949B0B04949", "_ c #4949B2B24949", "` c #4B4BB2B24B4B", "' c #4949B4B44949", "] c #4949B5B54949", "[ c #4E4EB4B44E4E", "{ c #4F4FB7B74F4F", "} c #5151B5B54242", "| c #5757B9B94B4B", " . c #5C5CBBBB4B4B", ".. c #5F5FBDBD4C4C", "X. c #5050B3B35050", "o. c #5353B7B75353", "O. c #5454B7B75555", "+. c #5353B9B95353", "@. c #5656B9B95050", "#. c #5454B9B95454", "$. c #5757BABA5454", "%. c #5858B9B95757", "&. c #5858B9B95858", "*. c #5959BBBB5959", "=. c #5858BCBC5858", "-. c #5858BCBC5959", ";. c #5C5CBBBB5C5C", ":. c #5C5CBDBD5C5C", ">. c #5D5DBCBC5D5D", ",. c #5C5CBEBE5C5C", "<. c #5F5FBFBF5F5F", "1. c #6262BEBE5151", "2. c #6161BDBD6060", "3. c #6161BEBE6262", "4. c #6666BABA6767", "5. c #6565BEBE6565", "6. c #6666C0C06666", "7. c #6A6AC1C16A6A", "8. c #6A6AC3C36A6A", "9. c #6F6FC4C46F6F", "0. c #7171C5C56969", "q. c #7171C5C56D6D", "w. c #7070C3C37171", "e. c #7272C6C67373", "r. c #7474C7C77474", "t. c #7676C8C87676", "y. c #7777C8C87777", "u. c #7979C8C87979", "i. c #7979C9C97979", "p. c #7B7BCACA7A7A", "a. c #7B7BCACA7B7B", "s. c #7F7FC9C97E7E", "d. c #9C9CC0C02727", "f. c #A7A7C7C73737", "g. c #BEBED4D44D4D", "h. c #B2B2D0D05050", "j. c #B9B9D4D45656", "k. c #8686CBCB8888", "l. c #9393CDCD9393", "z. c #9797CFCF9797", "x. c #9A9AD1D19A9A", "c. c #A8A8D7D7AAAA", "v. c #ABABDADAABAB", "b. c #AEAEDCDCAFAF", "n. c #B4B4DCDCB4B4", "m. c #B8B8DEDEB7B7", "M. c #D1D1EAEAD1D1", "N. c #D6D6EAEAD6D6", "B. c #D8D8ECECD8D8", "V. c #DCDCECECDCDC", "C. c #E1E1EDEDE1E1", "Z. c #EEEEF4F4EEEE", "A. c #F3F3F6F6F3F3", "S. c #F3F3F7F7F4F4", "D. c #F6F6F6F6F6F6", "F. c #F9F9F9F9F9F9", "G. c None", /* pixels */ "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "y t t t t q q 9 7 7 5 3 2 < , < ", "e a.a.a.t.e.w.q.0.5.3.;.*.o.[ ; ", "t a.<.,.*.$.1...g.} U D B v _ - ", "e a.;.=.$.j.| 8.s.Y L f.x l R = ", "t t.=.+.| .( b.S.( L n l j J * ", "e e.+.{ h.k.v.B.S.n.c.z d.h D $ ", "9 9.{ ' E M.F.Z.B.D.V.l.f s C # ", "9 8.' W P E [ ) H T m h s p N + ", "8 5.W U D A x.n.C.z.4.a i u b o ", "3 3.;.*.O.X._ _ R H D C m m c . ", "7 2 < , > : ; = * * $ + o o X # ", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G." }; springlobby-0.169/src/images/flags/MP.xpm0000600000176000000410000000773512105760300021625 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MP_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 154 2", " c black", ". c #000000001D1D", "X c #000000001F1F", "o c #000000002323", "O c #000000002727", "+ c #000000002929", "@ c #000000002B2B", "# c #000000002F2F", "$ c #000000003131", "% c #000000003333", "& c #000000003737", "* c #000000003939", "= c #000000003B3B", "- c #000000003F3F", "; c #000000004141", ": c #000000004545", "> c #000000004B4B", ", c #000000005151", "< c #000000005757", "1 c #000000005D5D", "2 c #000003036161", "3 c #000007076767", "4 c #00000B0B6767", "5 c #00000F0F6B6B", "6 c #000011116D6D", "7 c #000017177171", "8 c #00001D1D7373", "9 c #00001F1F7777", "0 c #000023237777", "q c #000023237979", "w c #000025257B7B", "e c #000029297D7D", "r c #00002B2B7D7D", "t c #00002D2D7F7F", "y c #00002D2D8181", "u c #303057579494", "i c #34345B5B9696", "p c #37375E5E9898", "a c #38385F5F9999", "s c #39395F5F9999", "d c #36365858A3A3", "f c #3C3C62629B9B", "g c #3D3D63639C9C", "h c #414167679E9E", "j c #424267679E9E", "k c #47476A6AA1A1", "l c #48486C6CA1A1", "z c #4B4B6E6EA1A1", "x c #4E4E6F6FA3A3", "c c #47476B6BB2B2", "v c #46466A6AB9B9", "b c #4C4C7070A5A5", "n c #4D4D7070A5A5", "m c #4D4D7878ACAC", "M c #50507272A5A5", "N c #51517272A5A5", "B c #54547575A7A7", "V c #55557575A7A7", "C c #52527474A8A8", "Z c #57577777A9A9", "A c #59597979A9A9", "S c #58587979ABAB", "D c #5D5D7C7CACAC", "F c #5D5D7D7DAEAE", "G c #51517B7BC4C4", "H c #6B6B9F9F9D9D", "J c #61618080AEAE", "K c #62628181B1B1", "L c #65658484B1B1", "P c #66668484B2B2", "I c #66668585B4B4", "U c #67678585B4B4", "Y c #60608A8AB3B3", "T c #6A6A8787B3B3", "R c #6A6A8888B3B3", "E c #6B6B8989B6B6", "W c #6E6E8A8AB6B6", "Q c #6F6F8B8BB6B6", "! c #6F6F8C8CB9B9", "~ c #77778E8EA6A6", "^ c #72728484B5B5", "/ c #70708D8DB9B9", "( c #72728E8EB9B9", ") c #73738F8FB9B9", "_ c #72728F8FBBBB", "` c #76769191BABA", "' c #76769292BBBB", "] c #76769292BDBD", "[ c #79799595BEBE", "{ c #7A7A9595BDBD", "} c #7E7E9797BABA", "| c #7F7F9999BFBF", " . c #7D7DA1A1A3A3", ".. c #7A7A9595C6C6", "X. c #7F7F9797C1C1", "o. c #F4F4DBDB7F7F", "O. c #828294948888", "+. c #80809A9ABBBB", "@. c #86869C9CB9B9", "#. c #8989A4A48888", "$. c #8F8FA2A2B7B7", "%. c #9494A6A6B9B9", "&. c #9E9EB5B5A6A6", "*. c #A6A6B8B8BDBD", "=. c #ADADBCBCB5B5", "-. c #A9A9BBBBBFBF", ";. c #83839B9BC2C2", ":. c #84849A9AC1C1", ">. c #85859E9EC3C3", ",. c #8989A1A1C6C6", "<. c #8B8BA4A4C7C7", "1. c #8D8DA4A4C8C8", "2. c #8F8FA5A5C8C8", "3. c #8F8FA6A6C8C8", "4. c #9191A6A6C7C7", "5. c #9090A7A7C9C9", "6. c #9090A7A7CACA", "7. c #A1A1B2B2C3C3", "8. c #ACACBDBDC1C1", "9. c #B2B2C2C2C5C5", "0. c #B4B4C3C3C8C8", "q. c #B4B4C5C5CACA", "w. c #B8B8C5C5E2E2", "e. c #C9C9B9B98080", "r. c #C0C0B8B89797", "t. c #E6E6BFBF9999", "y. c #F4F4BFBFAAAA", "u. c #D7D7CACA8A8A", "i. c #D0D0D0D09595", "p. c #C3C3C1C1A6A6", "a. c #C0C0CCCCBEBE", "s. c #CDCDD4D4AAAA", "d. c #CFCFD4D4BABA", "f. c #D3D3CFCFB1B1", "g. c #DDDDDCDCBBBB", "h. c #E5E5C8C88181", "j. c #E9E9CECE9090", "k. c #EFEFD5D58D8D", "l. c #EFEFDFDF8787", "z. c #E0E0DDDD9F9F", "x. c #EEEED1D19090", "c. c #F4F4D6D68D8D", "v. c #E3E3D4D4A2A2", "b. c #E6E6DFDFA5A5", "n. c #F4F4E4E48686", "m. c #F7F7E5E59B9B", "M. c #FAFAE2E29595", "N. c #FDFDEDEDA4A4", "B. c #F3F3E8E8B8B8", "V. c #FCFCE8E8B4B4", "C. c #FAFAF0F0A6A6", "Z. c #CCCCD5D5D8D8", "A. c #F8F8F8F8F8F8", "S. c None", /* pixels */ "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "y y y y e w 0 8 7 5 3 2 1 < , > ", "y 6.5.6.1.7.a.B.V.g.%.` _ W T : ", "y 6.] ] $.s.e.t.y.M.u.~ C n J - ", "t 2.] _ =.N.&.+.q.^ h.b.n z J * ", "e <._ _ v.i.v | w.d .l.k j F % ", "w ,.! E z.d...4.A.:.c n.h f A # ", "9 >.E U f.N.m +.Z.G #.k.f s V + ", "7 ;.U K @.x.x.-.-.p.o.O.s i N o ", "6 | K F S H m.-.*.c.r.p i u n X ", "4 ] ' ` Q R J q.9.Y A A N n j . ", "2 1 < , > : : = & % + O o X . . ", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S." }; springlobby-0.169/src/images/flags/MQ.xpm0000600000176000000410000000757012105760300021623 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MQ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 151 2", " c black", ". c #000000001515", "X c #000000001717", "o c #000000001919", "O c #000000001D1D", "+ c #000000002727", "@ c #000000003131", "# c #000000003535", "$ c #000000003737", "% c #000000004141", "& c #000000004545", "* c #000000004D4D", "= c #000000005151", "- c #000000005353", "; c #000000005D5D", ": c #000000006363", "> c #000000006565", ", c #000000006969", "< c #000000006B6B", "1 c #000000007171", "2 c #000001017373", "3 c #000005057575", "4 c #00000F0F7B7B", "5 c #000011117D7D", "6 c #000017177F7F", "7 c #00001B1B8383", "8 c #00001D1D8383", "9 c #000025258787", "0 c #2F2F50509A9A", "q c #333352529C9C", "w c #353555559D9D", "e c #373755559D9D", "r c #383858589F9F", "t c #37375555A3A3", "y c #41415E5EA2A2", "u c #43435F5FA1A1", "i c #42425E5EA2A2", "p c #48486464A7A7", "a c #48486565A6A6", "s c #49496565A8A8", "d c #49496666A8A8", "f c #4E4E6868A8A8", "g c #4E4E6969ABAB", "h c #4F4F6A6AA8A8", "j c #50506B6BAAAA", "k c #50506B6BACAC", "l c #59596F6FAFAF", "z c #56567171AFAF", "x c #5B5B7171A5A5", "c c #5B5B7373A5A5", "v c #58587272B0B0", "b c #58587373B1B1", "n c #5D5D7676B1B1", "m c #5C5C7676B2B2", "M c #5E5E7777B1B1", "N c #5F5F7777B1B1", "B c #5F5F7878B1B1", "V c #60607979B2B2", "C c #61617A7AB6B6", "Z c #66667C7CB1B1", "A c #69698181B9B9", "S c #71718787BDBD", "D c #71718888BCBC", "F c #74748A8ABEBE", "G c #76768C8CBEBE", "H c #77778C8CBEBE", "J c #77778C8CBFBF", "K c #78788E8EC1C1", "L c #7A7A8F8FC1C1", "P c #80809494C3C3", "I c #81819595C5C5", "U c #82829696C5C5", "Y c #85859898C3C3", "T c #85859898C7C7", "R c #8B8B9D9DC5C5", "E c #8C8C9C9CC2C2", "W c #8A8A9C9CC9C9", "Q c #8A8A9D9DC9C9", "! c #9393A4A4CDCD", "~ c #9696A6A6CCCC", "^ c #9B9BA9A9CFCF", "/ c #9B9BABABCFCF", "( c #9F9FAEAECECE", ") c #A1A1AFAFCECE", "_ c #A5A5B2B2D0D0", "` c #A7A7B5B5D7D7", "' c #B2B2BCBCD4D4", "] c #B3B3BDBDD6D6", "[ c #B3B3BEBED7D7", "{ c #B6B6C0C0D9D9", "} c #B6B6C1C1DADA", "| c #B6B6C1C1DCDC", " . c #B9B9C2C2D8D8", ".. c #B8B8C2C2DBDB", "X. c #B9B9C5C5DEDE", "o. c #BABAC4C4DEDE", "O. c #BBBBC5C5DEDE", "+. c #BCBCC5C5DBDB", "@. c #BDBDC6C6DDDD", "#. c #BEBEC7C7DDDD", "$. c #BEBEC8C8DEDE", "%. c #BFBFC8C8DFDF", "&. c #C3C3CBCBDCDC", "*. c #C3C3CBCBDDDD", "=. c #C2C2CACAE0E0", "-. c #C7C7CFCFE3E3", ";. c #C9C9D1D1E1E1", ":. c #C8C8D0D0E2E2", ">. c #C8C8D1D1E4E4", ",. c #CACAD2D2E5E5", "<. c #CBCBD3D3E6E6", "1. c #CDCDD4D4E5E5", "2. c #CFCFD5D5E4E4", "3. c #D0D0D6D6E2E2", "4. c #D0D0D7D7E7E7", "5. c #D5D5D9D9E6E6", "6. c #D6D6DBDBE7E7", "7. c #D0D0D8D8E9E9", "8. c #D1D1D8D8EAEA", "9. c #D6D6DBDBE8E8", "0. c #D5D5DDDDECEC", "q. c #D9D9DEDEE7E7", "w. c #DBDBDEDEE8E8", "e. c #DDDDE2E2EFEF", "r. c gray90", "t. c #E7E7E7E7E7E7", "y. c #E1E1E6E6EDED", "u. c #E9E9E9E9E9E9", "i. c #E0E0E5E5F0F0", "p. c #E7E7E9E9F0F0", "a. c #E6E6E9E9F3F3", "s. c #E6E6EAEAF1F1", "d. c #E6E6EAEAF3F3", "f. c #EAEAEDEDF3F3", "g. c #ECECEDEDF1F1", "h. c #EFEFF0F0F1F1", "j. c #F4F4F4F4F4F4", "k. c #F4F4F5F5F5F5", "l. c gray96", "z. c #F6F6F6F6F6F6", "x. c gray97", "c. c #F6F6F7F7FAFA", "v. c #F7F7F7F7FAFA", "b. c #F8F8F8F8F8F8", "n. c #F9F9F9F9F9F9", "m. c gray98", "M. c #FBFBFBFBFBFB", "N. c gray99", "B. c #FDFDFDFDFDFD", "V. c #FEFEFEFEFEFE", "C. c None", /* pixels */ "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "9 8 I ` t 5 5 N.N.1 > l R < = = ", "7 Q ! e.0.I L N.N.H S H w.#.B & ", "8 Q K O.a.S C N.M.b g z } 2.M % ", "6 T <.a.f.S b M.m.g p ;.6.;.M $ ", "/ 8.| O.O.-.%.M.m...} ( _ ) #.c ", "N.N.N.c.m.m.m.m.m.z.z.j.u.h.z.r.", "/ 8.i.a.<.%.+.m.z.} ] 6.w.[ ..x ", "3 L A 7.*.p p x.z.w q h &.Z i O ", "2 L m ~ 2.b p z.z.w q w E ] i o ", "< H <.a.y.Y B x.z.j g *.q.3.u . ", "< ; ; : ; * % u.r.@ + @ $ $ . . ", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C." }; springlobby-0.169/src/images/flags/MR.xpm0000600000176000000410000001003712105760300021614 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 157 2", " c black", ". c #000025250000", "X c #000029290000", "o c #000031310000", "O c #000033330000", "+ c #000037370000", "@ c #000039390000", "# c #00003B3B0000", "$ c #00003D3D0000", "% c #00003F3F0000", "& c #000043430000", "* c #000045450000", "= c #000049490000", "- c #00004B4B0000", "; c #00004F4F0000", ": c #000055550000", "> c #00005B5B0000", ", c #00005D5D0000", "< c #00005F5F0000", "1 c #000065650000", "2 c #000067670000", "3 c #00006B6B0000", "4 c #00006D6D0000", "5 c #00006F6F0000", "6 c #000073730000", "7 c #000077770000", "8 c #000079790000", "9 c #00007D7D0000", "0 c #000081810000", "q c #000085850000", "w c #000087870000", "e c #000089890000", "r c #00008B8B0000", "t c #000095950000", "y c #0B0B95950B0B", "u c #0F0F97970E0E", "i c #1F1F89891F1F", "p c #1F1F8B8B1F1F", "a c #1E1E8E8E1E1E", "s c #101097971010", "d c #13139A9A1313", "f c #14149A9A1414", "g c #1F1F94941F1F", "h c #191999991919", "j c #19199B9B1919", "k c #18189C9C1919", "l c #1A1A9D9D1A1A", "z c #232390902323", "x c #252596962525", "c c #292993932929", "v c #2E2E99992E2E", "b c #30308D8D3030", "n c #363694943636", "m c #3B3B97973B3B", "M c #3A3A9A9A3A3A", "N c #2020A0A02020", "B c #2626A2A22626", "V c #2B2BA3A32B2B", "C c #2C2CA2A22C2C", "Z c #2C2CA6A62C2C", "A c #2F2FA4A42F2F", "S c #3030A6A63030", "D c #3232A5A53232", "F c #3333A6A63232", "G c #3636A4A43636", "H c #3131A9A93131", "J c #3434A9A93434", "K c #3535A8A83535", "L c #3636A8A83636", "P c #3737A8A83737", "I c #3737A9A93636", "U c #3C3CA0A03C3C", "Y c #3939A9A93939", "T c #3B3BAAAA3B3B", "R c #3A3AADAD3A3A", "E c #3B3BAEAE3C3C", "W c #3D3DACAC3D3D", "Q c #3D3DAEAE3D3D", "! c #3F3FADAD3F3F", "~ c #3F3FAFAF3F3F", "^ c #4040AEAE3F3F", "/ c #4343B0B03131", "( c #40409A9A4040", ") c #4545A1A14545", "_ c #4242ADAD4242", "` c #4444AFAF4444", "' c #4646ACAC4646", "] c #4646AFAF4646", "[ c #4B4BA8A84B4B", "{ c #4F4FAEAE4F4F", "} c #4141B2B24141", "| c #4444B1B14444", " . c #4545B2B24545", ".. c #4949B2B24949", "X. c #4B4BB3B34B4B", "o. c #4949B4B44949", "O. c #4949B5B54949", "+. c #4B4BB5B54B4B", "@. c #4E4EB4B44E4E", "#. c #4F4FB7B74F4F", "$. c #5454AFAF5454", "%. c #5050B4B45050", "&. c #5151B4B45151", "*. c #5151B7B75151", "=. c #5353B7B75353", "-. c #5454B7B75555", ";. c #5353BABA5353", ":. c #5454B8B85454", ">. c #5858B9B95757", ",. c #5858B9B95858", "<. c #5959B9B95959", "1. c #5858BABA5959", "2. c #5858BCBC5858", "3. c #5C5CBBBB5C5C", "4. c #5C5CBDBD5C5C", "5. c #5D5DBCBC5D5D", "6. c #5C5CBEBE5C5C", "7. c #5F5FBFBF5F5F", "8. c #6161BEBE6060", "9. c #6161BEBE6262", "0. c #6565BEBE6565", "q. c #6969BABA6969", "w. c #6D6DBCBC6D6D", "e. c #6B6BC0C02525", "r. c #6363C0C05454", "t. c #7A7AC8C84B4B", "y. c #6666C0C06666", "u. c #6A6AC3C36A6A", "i. c #6F6FC4C46F6F", "p. c #7070C3C37171", "a. c #7272C6C67373", "s. c #7474C7C77474", "d. c #7676C8C87676", "f. c #7777C8C87777", "g. c #7979C8C87979", "h. c #7979C9C97979", "j. c #7B7BCACA7A7A", "k. c #7B7BCACA7B7B", "l. c #8080C8C82424", "z. c #8C8CCDCD2F2F", "x. c #8282C9C93434", "c. c #9090CFCF3535", "v. c #9D9DD3D32B2B", "b. c #A2A2D8D84747", "n. c #A3A3D9D94C4C", "m. c #ADADDDDD5050", "M. c #D9D9ECEC2424", "N. c #DDDDEDED2B2B", "B. c #EFEFF5F52A2A", "V. c #EFEFF6F62F2F", "C. c #F6F6F6F62A2A", "Z. c #F9F9F9F93A3A", "A. c #D2D2EBEB4040", "S. c #EFEFF7F74646", "D. c #FAFAFAFA4242", "F. c #FAFAFBFB4747", "G. c None", /* pixels */ "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "t r r r r q q 0 9 7 6 5 3 1 , 1 ", "q k.k.k.d.d.p.w.q.0.8.5.>.=.@.- ", "r k.5.5.<.=.*.n.b._ ! P H Z ..; ", "r k.4.<.r.=.[ F.D.M Y / V B ' - ", "q d.:.-.m.+.' ~ E G Z v.x N ! & ", "q a.=.{ t.S.( m n b N.e.g l / $ ", "0 i.#.+.) A.Z.c.z.C.M.p h f P + ", "9 u.+.| ~ M x.V.B.e.z h f s F O ", "9 y.| ~ E K v c z g l f s y A O ", "5 8.5.<.:.*...' _ Q Y K F S C . ", "9 1 1 , , : ; - & $ $ + O X X $ ", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G." }; springlobby-0.169/src/images/flags/MS.xpm0000600000176000000410000001021512105760300021613 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MS_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 162 2", " c black", ". c #000000001111", "X c #000000001515", "o c #000000001717", "O c #000000001919", "+ c #000000001D1D", "@ c #000000002323", "# c #000000002525", "$ c #000000002929", "% c #000000002B2B", "& c #000000002F2F", "* c #000000003131", "= c #000000003535", "- c #000000003737", "; c #000000003D3D", ": c #000000004343", "> c #000000004949", ", c #000000004F4F", "< c #000000005555", "1 c #000000005959", "2 c #000000005B5B", "3 c #000000005D5D", "4 c #000000005F5F", "5 c #000000006363", "6 c #000000006767", "7 c #000000006969", "8 c #000000006D6D", "9 c #7F7F19194747", "0 c #676723235D5D", "q c #6B6B33337171", "w c #000003038383", "e c #000017179595", "r c #1E1E2A2A8E8E", "t c #2F2F25258383", "y c #23232E2E9191", "u c #272732329393", "i c #2C2C37379696", "p c #28283A3A9898", "a c #2D2D3F3F9B9B", "s c #2E2E3F3F9B9B", "d c #31313C3C9999", "f c #333344449E9E", "g c #333344449F9F", "h c #363645459D9D", "j c #3B3B45459F9F", "k c #383848489E9E", "l c #38384848A1A1", "z c #38384949A2A2", "x c #39394A4AA2A2", "c c #3D3D4D4DA4A4", "v c #3E3E4E4EA5A5", "b c #42424B4B9D9D", "n c #43434C4C9D9D", "m c #4E4E50509E9E", "M c #40404B4BA0A0", "N c #40404B4BA1A1", "B c #42424C4CA3A3", "V c #46464F4FA3A3", "C c #42425151A4A4", "Z c #43435252A7A7", "A c #44445353A7A7", "S c #46465555A6A6", "D c #49495050A0A0", "F c #4E4E5555A1A1", "G c #4D4D5656A6A6", "H c #4E4E5656A4A4", "J c #48485757AAAA", "K c #49495858AAAA", "L c #4A4A5959A9A9", "P c #4D4D5B5BAAAA", "I c #4F4F5E5EABAB", "U c #4D4D5C5CADAD", "Y c #4E4E5C5CADAD", "T c #4E4E5C5CAEAE", "R c #52525959A4A4", "E c #53535C5CAAAA", "W c #5A5A5C5CA7A7", "Q c #51516060ADAD", "! c #53536060AEAE", "~ c #52526060B0B0", "^ c #52526161B0B0", "/ c #57576464B0B0", "( c #57576565B2B2", ") c #58586565B0B0", "_ c #5B5B6C6CB7B7", "` c #5C5C6969B3B3", "' c #63636161A7A7", "] c #60606767ADAD", "[ c #64646969AEAE", "{ c #6D6D6969ABAB", "} c #60606D6DB5B5", "| c #64647070B7B7", " . c #65657272B8B8", ".. c #68687575B9B9", "X. c #69697575BABA", "o. c #6E6E7A7ABDBD", "O. c #71717A7AB9B9", "+. c #71717E7EBEBE", "@. c #74747A7ABABA", "#. c #77777F7FBCBC", "$. c #5E5E7F7FD7D7", "%. c #64648282D9D9", "&. c #68688686DBDB", "*. c #6C6C8989DDDD", "=. c #6D6D8989DDDD", "-. c #75758181C0C0", ";. c #70708C8CDFDF", ":. c #71718D8DDFDF", ">. c #7F7F9A9AC2C2", ",. c #74749090E0E0", "<. c #75759191E0E0", "1. c #79799494E2E2", "2. c #8D8D1D1D4343", "3. c #818121214F4F", "4. c #B1B15D5D7575", "5. c #CDCD15151717", "6. c #C3C36B6B7D7D", "7. c #D6D66C6C7171", "8. c #E2E268686767", "9. c #E4E472727171", "0. c #E0E075757878", "q. c #E0E07B7B7E7E", "w. c #E8E87A7A7676", "e. c #8B8B6C6C9D9D", "r. c #83836D6DA3A3", "t. c #8B8B7070A1A1", "y. c #9A9A7F7FA6A6", "u. c #9B9B7E7EA7A7", "i. c #ABAB75759494", "p. c #9B9B8A8A5555", "a. c #9E9E8C8C5757", "s. c #9E9E8D8D5858", "d. c #9D9D96964A4A", "f. c #9191A5A57171", "g. c #9494A7A77575", "h. c #A4A493936060", "j. c #C5C59E9E4444", "k. c #EAEA81817E7E", "l. c #94948A8AB9B9", "z. c #9F9F9090B9B9", "x. c #86869E9ED2D2", "c. c #8E8EA3A3CCCC", "v. c #9191A1A1C5C5", "b. c #9D9DA4A4D0D0", "n. c #9C9CAAAAD5D5", "m. c #C6C684849696", "M. c #C1C184849999", "N. c #D3D380808B8B", "B. c #D8D89E9EA9A9", "V. c #D7D7ACACB7B7", "C. c #D8D8AAAAB6B6", "Z. c #E0E083838484", "A. c #E6E693939494", "S. c #EEEE9E9E9C9C", "D. c #EEEEA1A19F9F", "F. c #E1E1B2B2BABA", "G. c #D7D7B6B6C4C4", "H. c #DFDFB9B9C3C3", "J. c #DFDFD3D3DEDE", "K. c #E3E3C2C2CACA", "L. c #E2E2CBCBD4D4", "P. c None", /* pixels */ "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "6.r.e 9 2.w 0 4.6 5 3 2 < , > : ", "t H.J.C.B.G.L.b.#.@...| [ ] / ; ", "5.A.k.9.8.w.0.7.' E 1.,.:.=.Q = ", "3.F.S.q.Z.D.N.i.W H ,.c.v.&.P & ", "{ K.z.M.m.n.V.u.H D :.x.g.%.R $ ", "q l._ t.e.T o.y.m n =.>.f.$.F @ ", "8 -./ ~ T L C c x l h.j.a.p.V + ", "7 +.~ U J Z c z g s d a.d.y N O ", "6 o.T J Z v l l s p i u y r j X ", "3 ..| } ` ) Q E L S C B c b h . ", "2 < , > : ; - * $ # @ + X X . . ", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P." }; springlobby-0.169/src/images/flags/MT.xpm0000600000176000000410000000603012105760300021614 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MT_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 113 2", " c black", ". c #DDDD00000000", "X c #DFDF00000000", "o c #E1E100000000", "O c #E3E300000000", "+ c #E5E500000000", "@ c #E7E700000000", "# c #E9E900000000", "$ c #EBEB00000000", "% c #EDED00000000", "& c #EFEF00000000", "* c #F1F100000000", "= c #F3F300000000", "- c #F5F500000000", "; c #F7F700000000", ": c #F1F10B0B0B0B", "> c #F1F10F0F0E0E", ", c #F9F900000000", "< c #FBFB00000000", "1 c #F2F210101010", "2 c #F2F213131313", "3 c #F2F214141414", "4 c #F3F319191919", "5 c #F3F31A1A1A1A", "6 c #F4F41E1E1E1E", "7 c #F4F41F1F1F1F", "8 c #F4F420202020", "9 c #F5F524242424", "0 c #F5F525252525", "q c #F5F526262626", "w c #F2F22C2C2C2C", "e c #F2F22F2F2F2F", "r c #F6F62A2A2A2A", "t c #F6F62B2B2B2B", "y c #F6F62C2C2C2C", "u c #F2F232323232", "i c #F3F332323232", "p c #F3F335353535", "a c #F5F530303030", "s c #F7F730303030", "d c #F7F731313131", "f c #F4F436363636", "g c #F6F636363636", "h c #F4F439393939", "j c #F4F43B3B3B3B", "k c #F7F73B3B3B3B", "l c #F5F53D3D3D3D", "z c #F5F53F3F3F3F", "x c #F8F836363636", "c c #F8F837373636", "v c #F8F837373737", "b c #F9F93C3C3C3C", "n c #F9F93C3C3D3D", "m c #F6F644444444", "M c #F7F749494949", "N c #F6F64C4C4C4C", "B c #F7F74E4E4E4E", "V c #F8F841414141", "C c #FAFA42424242", "Z c #F9F947474747", "A c #FAFA4C4C4C4C", "S c #F8F853535353", "D c #FBFB52525252", "F c #F9F957575757", "G c #FAFA5C5C5C5C", "H c #FBFB60606060", "J c #FCFC65656565", "K c #FCFC72727272", "L c #BDBDB8B8B8B8", "P c #C9C9C8C8C8C8", "I c #CFCFCDCDCDCD", "U c #D9D9C5C5C5C5", "Y c #D3D3D2D2D2D2", "T c #D6D6D4D4D3D3", "R c gray86", "E c #DDDDDDDDDDDD", "W c #EFEFDDDDDDDD", "Q c #E1E1E1E1E1E1", "! c gray89", "~ c gray90", "^ c #E7E7E7E7E7E7", "/ c gray92", "( c gray93", ") c #EFEFEFEFEFEF", "_ c #F1F1EFEFEFEF", "` c #F6F6EAEAEAEA", "' c #F7F7EBEBECEC", "] c #F7F7EDEDEDED", "[ c #F8F8EDEDEDED", "{ c #F9F9EEEEEEEE", "} c #FAFAEFEFEFEF", "| c #F1F1F1F1F1F1", " . c #F3F3F1F1F1F1", ".. c #F3F3F3F3F3F3", "X. c gray96", "o. c gray97", "O. c #FBFBF0F0F0F0", "+. c #FCFCF2F2F2F2", "@. c #FDFDF5F5F5F5", "#. c #F8F8F8F8F8F8", "$. c #F9F9F9F9F9F9", "%. c #FAFAF9F9F9F9", "&. c gray98", "*. c #FBFBFBFBFBFB", "=. c #FBFBFCFCFBFB", "-. c gray99", ";. c #FDFDFCFCFDFD", ":. c #FDFDFDFDFDFD", ">. c #FDFDFDFDFEFE", ",. c #FEFEFCFCFCFC", "<. c #FEFEFDFDFCFC", "1. c #FEFEFEFEFEFE", "2. c None", /* pixels */ "2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.", "2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.", "2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.", "| _ | | | | | W < , , - = = % % ", "X.%.Y ,.1.1.1.@.K J H G F S B $ ", "| T L I 1.1.1.} D C n x d y M $ ", "X.1.P 1.,.1.*.} A n x d y q m + ", "..1.1.1.-.*.*.} Z x s t q 8 z + ", "| 1.1.=.=.=.%.} V d t q 7 4 j + ", ") 1.=.=.*.%.%.] k t 9 7 4 2 f O ", ") *.*.*.*.o.%.' x q 7 4 2 2 u X ", "( =.%.*.*.o.o.` y 7 4 2 > : e X ", "( *.*.%.%.%.X.] B l h p u e w X ", "/ ^ ~ ! Q E R U + + O O X X . . ", "2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.", "2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2." }; springlobby-0.169/src/images/flags/MU.xpm0000600000176000000410000001021512105760300021615 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MU_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 162 2", " c black", ". c #000017170000", "X c #000019190000", "o c #00001B1B0000", "O c #00001F1F0000", "+ c #000000003F3F", "@ c #000025250000", "# c #000029290000", "$ c #00002D2D0000", "% c #000033330000", "& c #000039390000", "* c #00003D3D0000", "= c #000000004949", "- c #000019194B4B", "; c #000043430000", ": c #000049490000", "> c #00004D4D0000", ", c #000053530000", "< c #000059590000", "1 c #00005F5F0000", "2 c #000063630000", "3 c #494900000000", "4 c #49495C5C7B7B", "5 c #4E4E60607E7E", "6 c #000000008383", "7 c #000000008B8B", "8 c #20204242A7A7", "9 c #26264242A2A2", "0 c #25254646AAAA", "q c #2B2B4646A5A5", "w c #2B2B4B4BADAD", "e c #31314C4CA8A8", "r c #37375151ABAB", "t c #3C3C5555AEAE", "y c #30305050B0B0", "u c #36365555B2B2", "i c #3B3B5A5AB5B5", "p c #3F3F5D5DB4B4", "a c #44445C5CAFAF", "s c #42425A5AB0B0", "d c #41415F5FB7B7", "f c #47475F5FB3B3", "g c #525264648282", "h c #565668688585", "j c #5A5A6C6C8888", "k c #5F5F70708C8C", "l c #46466363BABA", "z c #4B4B6363B6B6", "x c #4B4B6767BCBC", "c c #51516767B7B7", "v c #50506C6CBFBF", "b c #54546B6BBABA", "n c #58586E6EBCBC", "m c #5C5C7171BEBE", "M c #636373738D8D", "N c #646475758F8F", "B c #686879799292", "V c #6D6D7C7C9696", "C c #71717F7F9999", "Z c #54547070C0C0", "A c #58587272C2C2", "S c #0F0F8B8B0000", "D c #2C2C9E9E2C2C", "F c #2F2F9F9F2F2F", "G c #3232A2A23232", "H c #3535A4A43535", "J c #3939A5A53939", "K c #3D3DA8A83D3D", "L c #6161B9B90000", "P c #4242AAAA4242", "I c #4646ADAD4646", "U c #4B4BAFAF4B4B", "Y c #5050B2B25050", "T c #5454B4B45555", "R c #5858B7B75858", "E c #5D5DB9B95D5D", "W c #6161BBBB6262", "Q c #757583839C9C", "! c #797987879F9F", "~ c #76768B8BCDCD", "^ c #79798A8AC9C9", "/ c #878700000000", "( c #A7A700000000", ") c #ABAB00000000", "_ c #AFAF00000000", "` c #B1B100000000", "' c #B3B300000000", "] c #B7B700000000", "[ c #B9B900000000", "{ c #BDBD00000000", "} c #A5A52C2C4141", "| c #A8A831314646", " . c #AAAA37374B4B", ".. c #ADAD3C3C5050", "X. c #B0B042425454", "o. c #B3B347475959", "O. c #B1B149495B5B", "+. c #B5B54C4C5E5E", "@. c #B8B851516262", "#. c #B9B954546666", "$. c #BBBB59596969", "%. c #BDBD5C5C6D6D", "&. c #BEBE5F5F7070", "*. c #C1C100000000", "=. c #C3C300000000", "-. c #C7C700000000", ";. c #CDCD00000000", ":. c #DCDC4E4E4E4E", ">. c #DDDD53535353", ",. c #DEDE57575757", "<. c #E0E05C5C5C5C", "1. c #E1E160606060", "2. c #E2E265656565", "3. c #E3E369696969", "4. c #E5E56D6D6D6D", "5. c #E6E670707171", "6. c #E7E774747474", "7. c #E8E877777777", "8. c #E8E879797979", "9. c #E8E87B7B7B7B", "0. c #E9E97B7B7B7B", "q. c #C9C97B7B8888", "w. c #8888C5C50B0B", "e. c #8B8BC7C70E0E", "r. c #8E8EC8C81313", "t. c #9191CACA1919", "y. c #9494CCCC1E1E", "u. c #9696CECE2323", "i. c #9A9ACDCD2F2F", "p. c #9999D0D02929", "a. c #9C9CD1D12E2E", "s. c #9F9FD3D33434", "d. c #A2A2D5D53A3A", "f. c #A6A6D7D73F3F", "g. c #A8A8D9D94444", "h. c #B9B9E0E06666", "j. c #DFDFDFDF0000", "k. c #E3E3E3E30000", "l. c #FBFBFBFB0000", "z. c #FDFDFDFD0000", "x. c #F2F2F2F21010", "c. c #F2F2F2F21414", "v. c #F3F3F3F31919", "b. c #F4F4F4F41F1F", "n. c #F5F5F5F52424", "m. c #F6F6F6F62A2A", "M. c #F7F7F7F72F2F", "N. c #F3F3F3F33232", "B. c #F4F4F4F43636", "V. c #F8F8F8F83434", "C. c #F8F8F8F83535", "Z. c #F9F9F9F93A3A", "A. c #FAFAFAFA3F3F", "S. c #FAFAFAFA4040", "D. c #FBFBFBFB4545", "F. c #FBFBFBFB4949", "G. c #FBFBFCFC4949", "H. c #FCFCFCFC4F4F", "J. c #FCFCFCFC6A6A", "K. c #FDFDFDFD6F6F", "L. c #90909D9DB0B0", "P. c None", /* pixels */ "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "-.=.=.=.=.=.{ { [ ] ' ' _ ) ( ( ", ";.0.0.0.6.6.5.4.3.2.1.<.,.>.:.) ", "/ q.&.%.$.#.@.+.o.X... .| } O.3 ", "6 ^ m n b c z f s t r e q 9 a + ", "7 ~ A Z v x l d i u y w 0 8 p = ", "- L.! Q C V B N k j h g 5 4 M ", "z.K.H.G.D.S.Z.C.M.m.n.b.v.c.B.k.", "l.J.F.D.A.Z.C.M.m.n.b.v.c.x.N.j.", "L h.g.f.d.s.a.p.u.y.t.r.e.w.i.S ", "2 W E R T Y U I P K J H G F D . ", "1 < , > : ; * & % $ # @ O o o o ", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P." }; springlobby-0.169/src/images/flags/MV.xpm0000600000176000000410000000755712105760300021635 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MV_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 149 2", " c black", ". c #4F4FD4D44C4C", "X c #4F4FDADA5151", "o c #5252D7D75151", "O c #5656D8D85454", "+ c #5858D7D75555", "@ c #5B5BDADA5A5A", "# c #5858DDDD5B5B", "$ c #5858DFDF5B5B", "% c #5D5DDFDF5D5D", "& c #5F5FDEDE5F5F", "* c #5151E0E05757", "= c #5C5CE3E36060", "- c #5F5FE6E66565", "; c #6060DDDD5F5F", ": c #6262DFDF6262", "> c #6363DEDE6262", ", c #6363E1E16363", "< c #6565E4E46868", "1 c #6A6AE5E56C6C", "2 c #6C6CE1E16A6A", "3 c #6C6CE4E46C6C", "4 c #6D6DE5E56F6F", "5 c #6C6CE6E66F6F", "6 c #7373E7E77575", "7 c #7474E2E27272", "8 c #7070E9E97575", "9 c #7272E9E97575", "0 c #7575E9E97878", "q c #7878E5E57777", "w c #7D7DE6E67B7B", "e c #7979EBEB7C7C", "r c #7A7AEAEA7D7D", "t c #7B7BEEEE8181", "y c #B9B900000000", "u c #BBBB00000000", "i c #BDBD00000000", "p c #BFBF00000000", "a c #C1C100000000", "s c #C3C300000000", "d c #C5C500000000", "f c #C9C900000000", "g c #CBCB00000000", "h c #CFCF00000000", "j c #D1D100000000", "k c #D3D300000000", "l c #D7D700000000", "z c #D9D900000000", "x c #DBDB00000000", "c c #DDDD00000000", "v c #DFDF00000000", "b c #DDDD15151111", "n c #DADA19191111", "m c #DBDB1D1D1616", "M c #DEDE1A1A1616", "N c #DDDD22221B1B", "B c #DEDE27272222", "V c #DFDF2C2C2626", "C c #E1E100000000", "Z c #E3E300000000", "A c #E5E500000000", "S c #E7E700000000", "D c #E1E10B0B0B0B", "F c #E9E900000000", "G c #EBEB00000000", "H c #E0E01F1F1C1C", "J c #E1E125252222", "K c #E3E32B2B2727", "L c #E2E22C2C2C2C", "P c #E2E22F2F2F2F", "I c #E5E52F2F2F2F", "U c #E9E92C2C2C2C", "Y c #E0E031312A2A", "T c #E2E237373030", "R c #E6E632323232", "E c #E2E23C3C3535", "W c #E4E43C3C3636", "Q c #E8E832323232", "! c #E9E935353535", "~ c #E8E836363636", "^ c #E8E83B3B3B3B", "/ c #EBEB39393939", "( c #E9E93F3F3F3F", ") c #EBEB3D3D3D3D", "_ c #E3E343433B3B", "` c #E5E542423B3B", "' c #E7E747474141", "] c #E4E448484141", "[ c #E5E54D4D4646", "{ c #EBEB44444444", "} c #ECEC42424242", "| c #EFEF44444444", " . c #EEEE46464646", ".. c #EBEB49494949", "X. c #EFEF4B4B4B4B", "o. c #ECEC4D4D4A4A", "O. c #EDED4E4E4E4E", "+. c #E6E652524A4A", "@. c #E7E756564E4E", "#. c #EEEE52524F4F", "$. c #EDED53535353", "%. c #EFEF50505050", "&. c #EFEF57575454", "*. c #E9E95B5B5454", "=. c #EAEA5E5E5858", "-. c #EFEF5B5B5959", ";. c #F1F154545555", ":. c #F0F057575757", ">. c #F1F158585858", ",. c #F0F05D5D5D5D", "<. c #F0F05F5F5D5D", "1. c #F2F25C5C5C5C", "2. c #F4F45F5F5F5F", "3. c #EBEB63635C5C", "4. c #EDED65655E5E", "5. c #F1F161616262", "6. c #F2F260606060", "7. c #F2F265656565", "8. c #F2F266666666", "9. c #F3F36A6A6A6A", "0. c #F4F469696969", "q. c #F5F56D6D6D6D", "w. c #F4F46F6F6F6F", "e. c #F5F570707171", "r. c #F5F572727373", "t. c #F6F674747474", "y. c #F6F676767676", "u. c #F7F777777777", "i. c #F6F679797979", "p. c #F7F779797979", "a. c #F7F77B7B7A7A", "s. c #F7F77B7B7B7B", "d. c #8080E7E77E7E", "f. c #8383E9E98383", "g. c #8989E3E38787", "h. c #8888E9E98A8A", "j. c #8D8DEBEB8F8F", "k. c #9393EDED9595", "l. c #9B9BE9E99C9C", "z. c #A2A2ECECA3A3", "x. c #B2B2EEEEB2B2", "c. c #B5B5ECECB5B5", "v. c #BFBFF3F3C1C1", "b. c #CBCBF1F1CDCD", "n. c #D0D0F4F4D1D1", "m. c #D6D6F4F4D7D7", "M. c #D6D6F5F5D7D7", "N. c #DADAF6F6DADA", "B. c None", /* pixels */ "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "F F S S S S Z S Z c c x x l k k ", "G s.i.s.u.y.w.q.0.7.6.<.&.$.O.h ", "G s.2.4.3.=.=.@.+.[ ' _ E U ..g ", "F i.<.f.r r 9 k.v.5 < - ; K { g ", "F y.-.d.e 6 j.N.n.z., = @ J ( s ", "S r.&.w 0 1 x.m.% : # # O H ^ s ", "S w.%.q 8 1 h.m.b.l.$ $ o M ~ p ", "Z 0.o.7 4 2 : g.c.@ O X . b R p ", "Z 8.| ' ` W T Y V B N m n D P p ", "c 5.-.1.&.%.X. .} ) / ~ R P L u ", "x x l k k k g g s s s p p u u u ", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B." }; springlobby-0.169/src/images/flags/MW.xpm0000600000176000000410000000755012105760300021627 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MW_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 149 2", " c black", ". c #000007070000", "X c #070700000000", "o c #000023230000", "O c #000029290000", "+ c #00002B2B0000", "@ c #00002D2D0000", "# c #00002F2F0000", "$ c #000033330000", "% c #000039390000", "& c #00003D3D0000", "* c #2C2C2C2C2C2C", "= c #313131313131", "- c #000041410000", "; c #000047470000", ": c #00004D4D0000", "> c #000051510000", ", c #000057570000", "< c #00005B5B0000", "1 c #00005D5D0000", "2 c #000063630000", "3 c #000067670000", "4 c #00006D6D0000", "5 c #000075750000", "6 c #404026262626", "7 c #45452B2B2B2B", "8 c #6D6D00000000", "9 c #6F6F00000000", "0 c #616137373737", "q c #494949494949", "w c #4E4E4E4E4E4E", "e c #5B5B44444444", "r c #535353535353", "t c #585857575757", "y c gray36", "u c #5E5E5C5C5C5C", "i c #5F5F5F5F5F5F", "p c #737342424242", "a c #707051515151", "s c #717151515151", "d c #71715C5C5C5C", "f c #787877777777", "g c #797979797979", "h c #7B7B7B7B7A7A", "j c #7B7B7B7B7B7B", "k c #0B0B97970B0B", "l c #0F0F9A9A0E0E", "z c #13139C9C1313", "x c #18189F9F1919", "c c #1E1EA1A11E1E", "v c #2F2F85851010", "b c #343488881414", "n c #38388A8A1919", "m c #3D3D8D8D1F1F", "M c #2323A3A32323", "N c #2929A6A62929", "B c #2C2CA2A22C2C", "V c #2F2FA4A42F2F", "C c #2F2FA6A62F2F", "Z c #2E2EA9A92E2E", "A c #3232A5A53232", "S c #3535A8A83535", "D c #3434ACAC3434", "F c #3939A9A93939", "G c #3A3AAEAE3A3A", "H c #3D3DACAC3D3D", "J c #3F3FB1B13F3F", "K c #424290902424", "L c #464693932A2A", "P c #4B4B96962F2F", "I c #4D4D96963232", "U c #50509A9A3434", "Y c #55559D9D3A3A", "T c #5858A1A13F3F", "R c #4242AEAE4242", "E c #4646B0B04646", "W c #4444B4B44444", "Q c #4B4BB2B24B4B", "! c #5D5DA4A44545", "~ c #5050B4B45050", "^ c #5454B7B75555", "/ c #5858B9B95858", "( c #5D5DBCBC5D5D", ") c #6161A7A74949", "_ c #6161BEBE6262", "` c #7F7FB7B76A6A", "' c #6666C2C26666", "] c #888837373636", "[ c #9A9A59595959", "{ c #8A8A79797979", "} c #999960606060", "| c #989869696969", " . c #99996D6D6D6D", ".. c #A1A159595959", "X. c #A4A474747474", "o. c #C7C731313131", "O. c #C6C63C3C3C3C", "+. c #C6C63C3C3D3D", "@. c #E3E300000000", "#. c #E5E500000000", "$. c #E7E700000000", "%. c #FDFD00000000", "&. c #F2F214141414", "*. c #F3F319191919", "=. c #F3F31A1A1A1A", "-. c #F4F41F1F1F1F", ";. c #F4F420202020", ":. c #F5F524242424", ">. c #F5F525252525", ",. c #F6F62A2A2A2A", "<. c #F6F62B2B2B2B", "1. c #F7F72F2F2F2F", "2. c #F2F236363636", "3. c #F6F630303030", "4. c #F7F730303030", "5. c #F4F436363636", "6. c #F1F13B3B3C3C", "7. c #F4F43B3B3B3B", "8. c #F5F53F3F3F3F", "9. c #F8F835353535", "0. c #F8F836363636", "q. c #F9F93B3B3A3A", "w. c #F9F93B3B3B3B", "e. c #CDCD41414242", "r. c #CFCF47474747", "t. c #CACA4B4B4B4B", "y. c #D0D054545454", "u. c #D4D454545454", "i. c #C4C465656565", "p. c #D9D970707171", "a. c #EEEE47474747", "s. c #EEEE4C4C4C4C", "d. c #F2F241414141", "f. c #F4F446464646", "g. c #FAFA40404040", "h. c #FBFB45454545", "j. c #FBFB46464646", "k. c #FBFB4A4A4949", "l. c #FAFA4B4B4B4B", "z. c #FCFC4A4A4B4B", "x. c #FCFC4F4F4F4F", "c. c #FCFC4F4F5050", "v. c #FDFD53535353", "b. c #FDFD54545454", "n. c #FEFE58585858", "m. c #FDFD6F6F6F6F", "M. c #FEFE72727373", "N. c #FEFE76767676", "B. c None", /* pixels */ "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", " X 9 9 ", " j j j f X.p. .| i.} y t r w ", " j y y ..y.s s.a.p +.0 = * q ", " { d [ u.s t.r.e.+.] o.7 6 e ", "%.N.n.b.c.l.f.d.6.5.3.<.>.;.8.$.", "%.M.b.c.z.j.g.q.0.3.<.>.-.*.7.$.", "%.m.x.z.j.g.q.0.1.<.:.-.*.&.5.@.", "< ` ! ! Y Y U P L K m n b v I . ", "5 ' W W G D Z N M c x z l k C + ", "4 _ ( / ^ ~ Q E R H F S A C B o ", "5 3 2 1 , > : ; - & % $ # # O $ ", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.", "B.B.B.B.B.B.B.B.B.B.B.B.B.B.B.B." }; springlobby-0.169/src/images/flags/MX.xpm0000600000176000000410000000767612105760300021641 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MX_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 155 2", " c black", ". c #00001F1F0000", "X c #00002F2F0000", "o c #000031310000", "O c #000039390000", "+ c #00003D3D0000", "@ c #000043430000", "# c #000049490000", "$ c #00004F4F0000", "% c #000053530000", "& c #000057570101", "* c #00005D5D0707", "= c #00005D5D0B0B", "- c #00005F5F0B0B", "; c #00005F5F0D0D", ": c #000061610F0F", "> c #3C3C94946060", ", c #424297976464", "< c #48489A9A6969", "1 c #48489C9C6A6A", "2 c #4D4D9D9D6E6E", "3 c #4E4E9E9E6E6E", "4 c #4E4E9E9E6F6F", "5 c #5252A0A07272", "6 c #5252A1A17272", "7 c #5353A1A17272", "8 c #5656A2A27575", "9 c #5757A3A37676", "0 c #5757A4A47676", "q c #5B5BA6A67A7A", "w c #5C5CA6A67A7A", "e c #5C5CA7A77A7A", "r c #6060A7A77C7C", "t c #6060A9A97D7D", "y c #6060AAAA7E7E", "u c #6464ABAB8080", "i c #6464ABAB8181", "p c #6565AAAA8181", "a c #6767ADAD8383", "s c #6969ADAD8484", "d c #6E6EAFAF8888", "f c #7171B3B38B8B", "g c #7575B5B58F8F", "h c #7979B7B79191", "j c #7979B7B79292", "k c #7C7CB9B99494", "l c #7F7FBABA9696", "z c #A9A900000000", "x c #ABAB00000000", "c c #ADAD00000000", "v c #AFAF00000000", "b c #B1B100000000", "n c #B3B300000000", "m c #B7B700000000", "M c #B9B900000000", "N c #BDBD00000000", "B c #BFBF00000000", "V c #83835F5F3F3F", "C c #8D8D7D7D6A6A", "Z c #C5C500000000", "A c #C7C700000000", "S c #C9C900000000", "D c #CDCD00000000", "F c #D6D627272C2C", "G c #D7D729292F2F", "H c #D8D82A2A2F2F", "J c #D7D72A2A3030", "K c #D9D92E2E3434", "L c #D9D92F2F3535", "P c #D9D930303535", "I c #DADA33333939", "U c #DADA34343A3A", "Y c #DCDC35353A3A", "T c #DCDC38383E3E", "R c #DCDC39393F3F", "E c #DEDE3B3B4040", "W c #DEDE3E3E4343", "Q c #DEDE3F3F4444", "! c #DFDF3F3F4444", "~ c #DADA42424646", "^ c #DCDC46464B4B", "/ c #DDDD48484C4C", "( c #DDDD49494D4D", ") c #DEDE4D4D5050", "_ c #DFDF51515555", "` c #E0E043434848", "' c #E0E044444949", "] c #E0E045454A4A", "[ c #E1E149494E4E", "{ c #E2E24A4A5050", "} c #E0E055555959", "| c #E2E25A5A5D5D", " . c #E3E35E5E6262", ".. c #E5E562626666", "X. c #E6E667676B6B", "o. c #E8E86A6A6F6F", "O. c #E8E86C6C7070", "+. c #8181BBBB9898", "@. c #8181BCBC9898", "#. c #8181BCBC9999", "$. c #9A9AAAAA9696", "%. c #9B9BAAAA9696", "&. c #9D9DADAD9999", "*. c #9E9EADAD9999", "=. c #9F9FB9B9ACAC", "-. c #A3A3B2B29F9F", ";. c #BABAB1B19A9A", ":. c #C6C6AFAF8C8C", ">. c #D1D1C5C5AEAE", ",. c #D8D8CECEBABA", "<. c #DADAD0D0BCBC", "1. c #C9C9C3C3C3C3", "2. c gray81", "3. c #DFDFD5D5C4C4", "4. c gray82", "5. c LightGray", "6. c #D1D1D5D5D1D1", "7. c #D7D7D7D7D7D7", "8. c #DEDEE4E4DEDE", "9. c #E3E3DFDFDFDF", "0. c #E1E1E0E0D5D5", "q. c #E5E5E5E5DADA", "w. c #E5E5E7E7E2E2", "e. c #E7E7E7E7E7E7", "r. c #E9E9E9E9E9E9", "t. c #E9E9EBEBE9E9", "y. c gray92", "u. c #F2F2EEEEEEEE", "i. c #F3F3F0F0F0F0", "p. c #F4F4F1F1F1F1", "a. c #F6F6F2F2F2F2", "s. c #F4F4F4F4F4F4", "d. c gray96", "f. c #F4F4F6F6F5F5", "g. c #F5F5F6F6F5F5", "h. c #F5F5F7F7F6F6", "j. c #F7F7F4F4F4F4", "k. c #F6F6F6F6F6F6", "l. c gray97", "z. c #F5F5F8F8F6F6", "x. c #F6F6F8F8F7F7", "c. c #F7F7F9F9F8F8", "v. c #F8F8F4F4F4F4", "b. c #F9F9F5F5F6F6", "n. c #FBFBF7F7F7F7", "m. c #F8F8FAFAF9F9", "M. c #F9F9FBFBFAFA", "N. c gray98", "B. c #FAFAFBFBFBFB", "V. c #FBFBFBFBFBFB", "C. c #FBFBFCFCFCFC", "Z. c gray99", "A. c #FDFDFDFDFDFD", "S. c #FDFDFDFDFEFE", "D. c None", /* pixels */ "D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.", "D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.", "D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.", "- : : : - y.y.y.r.e.9.D D A A Z ", "; @.@.@.j C.C.C.C.C.n.O.o.X...Z ", "; +.p p q C.C.V.Z.m.b.{ [ ' .N ", "- k p y 0 C.C.<.,.b.v.' ` ~ | m ", "* k y e 6 m.3.:.V >.v.! ! E _ m ", "& j q 9 4 c.q.;.C 9.a.R T I _ m ", "% g 0 6 1 k.-.=.%.$.i.Y Y P ( b ", "$ f 6 2 , k.e.&.%.8.u.P K G ( b ", "# d 2 1 > f.k.k.g.g.u.H G G ( x ", "@ s p r 8 a.b.k.s.s.a.( / ^ ~ x ", "+ O o X X 6.7.5.4.2.1.b b x x x ", "D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.", "D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D." }; springlobby-0.169/src/images/flags/MY.xpm0000600000176000000410000001011312105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MY_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 159 2", " c black", ". c #0B0B03039797", "X c #0D0D07079797", "o c #111109099999", "O c #00000000C1C1", "+ c #00000000C3C3", "@ c #00000000C5C5", "# c #00000000C9C9", "$ c #3B3B3B3BD9D9", "% c #72726F6FBDBD", "& c #41414141D7D7", "* c #40404040DADA", "= c #47474747DBDB", "- c #46464646DCDC", "; c #4B4B4A4ADDDD", ": c #4C4C4C4CDBDB", "> c #7C7C7A7AC6C6", ", c #6D6D6D6DE1E1", "< c #B1B100000000", "1 c #B7B700000000", "2 c #BBBB00000000", "3 c #878777774B4B", "4 c #C3C300000000", "5 c #C9C900000000", "6 c #CBCB00000000", "7 c #CFCF00000000", "8 c #D1D100000000", "9 c #D5D500000000", "0 c #D7D700000000", "q c #D9D900000000", "w c #DADA1A1A1A1A", "e c #DCDC1D1D1D1D", "r c #DDDD22222222", "t c #DDDD25252525", "y c #DFDF26262626", "u c #DFDF2A2A2A2A", "i c #E0E02B2B2B2B", "p c #E0E02F2F2F2F", "a c #E1E131313131", "s c #E2E231313232", "d c #E1E134343434", "f c #E2E234343434", "g c #E2E236363636", "h c #E0E03B3B3B3B", "j c #E2E238383939", "k c #E3E339393939", "l c #E3E33E3E3E3E", "z c #E4E43B3B3B3B", "x c #E4E43C3C3C3C", "c c #DADA36364040", "v c #DCDC3C3C4545", "b c #DDDD42424A4A", "n c #DEDE46464F4F", "m c #DEDE47474E4E", "M c #E2E244444444", "N c #E5E542424242", "B c #E5E543434343", "V c #E6E641414141", "C c #E7E746464646", "Z c #E7E747474747", "A c #E8E84A4A4A4A", "S c #E8E84C4C4D4D", "D c #EAEA4F4F4F4F", "F c #E0E04A4A5454", "G c #E0E04F4F5959", "H c #E4E450505050", "J c #E1E151515858", "K c #E7E758585757", "L c #E9E951515151", "P c #EEEE6F6F6F6F", "I c #E7E76F6F7777", "U c #C3C3ADAD2525", "Y c #E8E8DADA7E7E", "T c #F2F2E3E37B7B", "R c #F2F2E3E37C7C", "E c #F2F2E5E57F7F", "W c #F4F4E7E77C7C", "Q c #A0A09A9AB6B6", "! c #B8B8B1B1AAAA", "~ c #92928F8FCFCF", "^ c #94949191D0D0", "/ c #B1B1ADADC3C3", "( c #D5D59D9D9D9D", ") c #D7D79D9D9D9D", "_ c #D7D79F9F9F9F", "` c #D7D7A1A1A1A1", "' c #DBDBA5A5A3A3", "] c #DDDDA7A7A7A7", "[ c #DDDDA9A9A9A9", "{ c #DFDFABABABAB", "} c #DDDDBBBBBBBB", "| c #E3E3AFAFAFAF", " . c #E5E5B3B3B3B3", ".. c #E7E7B7B7B7B7", "X. c #E9E9B9B9B9B9", "o. c #EBEBBDBDBDBD", "O. c #DBDBCFCF8282", "+. c #DCDCCFCF8181", "@. c #DCDCD0D08484", "#. c #DCDCD0D08585", "$. c #DDDDD1D18787", "%. c #DEDED3D38B8B", "&. c #DDDDD4D4A5A5", "*. c #E6E6DBDB8989", "=. c #E3E3DADA9E9E", "-. c #F5F5EAEA9595", ";. c #F2F2E8E89999", ":. c #F2F2E8E89B9B", ">. c #F2F2E8E89C9C", ",. c #DFDFC3C3C3C3", "<. c #E5E5C5C5C5C5", "1. c #E7E7C7C7C7C7", "2. c #EDEDC1C1C1C1", "3. c #EFEFC3C3C3C3", "4. c #EBEBD3D3D3D3", "5. c #F1F1C7C7C5C5", "6. c #F7F7DFDFDFDF", "7. c #EEEEE5E5EEEE", "8. c #F2F2E2E2E2E2", "9. c #F2F2E3E3E3E3", "0. c #F3F3E4E4E4E4", "q. c #F3F3E5E5E5E5", "w. c #F3F3E6E6E6E6", "e. c #F4F4E4E4E4E4", "r. c #F4F4E5E5E5E5", "t. c #F5F5E5E5E5E5", "y. c #F4F4E6E6E6E6", "u. c #F4F4E7E7E7E7", "i. c #F5F5E6E6E6E6", "p. c #F5F5E7E7E7E7", "a. c #F6F6E6E6E6E6", "s. c #F6F6E7E7E7E7", "d. c #F1F1E7E7EEEE", "f. c #F7F7E8E8E7E7", "g. c #F6F6E8E8E8E8", "h. c #F6F6E9E9E9E9", "j. c #F7F7E8E8E8E8", "k. c #F7F7EAEAEAEA", "l. c #F7F7EBEBEBEB", "z. c #F7F7EDEDEDED", "x. c #FBFBE7E7E5E5", "c. c #F8F8E9E9E8E8", "v. c #F8F8EBEBEBEB", "b. c #F9F9EAEAEAEA", "n. c #F8F8EDEDECEC", "m. c #F9F9EDEDEDED", "M. c #F9F9EEEEEDED", "N. c #F8F8EEEEEEEE", "B. c #F9F9EFEFEFEF", "V. c #FAFAEEEEEEEE", "C. c #FAFAEFEFEEEE", "Z. c #F5F5EFEFF5F5", "A. c #FAFAF0F0F0F0", "S. c #FBFBF0F0F0F0", "D. c #FBFBF1F1F0F0", "F. c #FBFBF2F2F2F2", "G. c #FCFCF2F2F2F2", "H. c #FCFCF4F4F3F3", "J. c None", /* pixels */ "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "# o U U X @ O O 5 q 0 0 8 8 5 5 ", "o >.:./ &.=.~ , Z.G.F.D.B.N.z.4.", "3 :.! *.E T #.: J L S Z B x K 4 ", "3 :.Q %.T Y O.= d.b.f.f.f.a.g.1.", ". -.W > #.+.% & m Z N l k f F 2 ", "@ ^ #.+.; - * $ 7.a.a.a.q.w.w.<.", "5 I G F n b v c s k f p u r M 1 ", "x.H.D.D.D.N.N.b.k.a.a.q.q.q.w.,.", "q P D A C V k f s u y r w w h < ", "6.S.N.N.N.N.b.b.g.r.r.q.q.8.8.} ", "5.3.2.o..... .| { [ ] ' ` ` ( ( ", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J." }; springlobby-0.169/src/images/flags/MZ.xpm0000600000176000000410000001044612105760300021630 0ustar buildbotwww-data00000000000000/* XPM */ static const char *MZ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 171 2", " c black", ". c gray10", "X c gray12", "o c #141416162222", "O c #19191B1B2626", "+ c #1F1F21212B2B", "@ c #252525252525", "# c #2A2A2B2B2B2B", "$ c #242426263131", "% c #2A2A2C2C3636", "& c #2F2F31313B3B", "* c #313128283131", "= c #36362D2D3636", "- c gray19", "; c gray21", ": c #3B3B33333B3B", "> c gray23", ", c #353536364040", "< c #363637374141", "1 c #00004D4D0000", "2 c #000051510000", "3 c #00005D5D0000", "4 c #000061610000", "5 c #000063630000", "6 c #000067670000", "7 c #00006D6D0000", "8 c #000071710000", "9 c #000075750000", "0 c #000079790000", "q c #00007D7D0000", "w c #404037374040", "e c #46463C3C4545", "r c #55553C3C4646", "t c #4B4B42424B4B", "y c #4E4E46464E4E", "u c #505047475050", "i c #6A6A4C4C5454", "p c #6C6C72726E6E", "a c #000081810000", "s c #000083830000", "d c #000085850000", "f c #000087870000", "g c #000089890000", "h c #000091910000", "j c #2C2CA8A82C2C", "k c #3131ABAB3131", "l c #3737AEAE3737", "z c #3D3DB0B03D3D", "x c #4242B3B34242", "c c #4747B5B54747", "v c #4949B3B34949", "b c #4C4CB7B74C4C", "n c #4E4EB4B44E4E", "m c #5353B7B75353", "M c #5151BABA5151", "N c #5454BCBC5454", "B c #5858B9B95757", "V c #5C5CBBBB5C5C", "C c #6161BEBE6060", "Z c #5959C1C15959", "A c #6565C0C06565", "S c #6969C2C26969", "D c #6D6DC3C36D6D", "F c #7070C5C57171", "G c #7474C7C77474", "H c #7777C8C87777", "J c #7979CECE7979", "K c #8D8D2F2F0000", "L c #91917E7E7474", "P c #BCBC40404040", "I c #E7E700000000", "U c #EFEF00000000", "Y c #F5F500000000", "T c #F7F700000000", "R c #F9F900000000", "E c red", "W c #F5F515150000", "Q c #C2C242424B4B", "! c #CFCF51515959", "~ c #FBFB46464646", "^ c #FAFA45454848", "/ c #FAFA4D4D4444", "( c #FBFB4A4A4949", ") c #FBFB55554545", "_ c #FCFC57574B4B", "` c #FDFD56565555", "' c #F9F959595959", "] c #E5E56A6A5454", "[ c #F0F067675F5F", "{ c #FEFE68685C5C", "} c #FCFC66666666", "| c #FBFB7B7B6262", " . c #FCFC7A7A6A6A", ".. c #FEFE79797979", "X. c #FFFF7B7B7A7A", "o. c #8F8FA0A05C5C", "O. c #9191BEBE7B7B", "+. c #BBBBAFAF7F7F", "@. c #DDDD81810000", "#. c #DDDD83830000", "$. c #DDDD87870000", "%. c #DFDF87870000", "&. c #DDDD89890000", "*. c #DFDF95950000", "=. c #E1E18B8B0000", "-. c #E3E38F8F0000", ";. c #E5E591910000", ":. c #E7E793930000", ">. c #E9E999990000", ",. c #EBEB9D9D0000", "<. c #EDED9F9F0000", "1. c #FAFA9E9E3F3F", "2. c #EDEDA3A30000", "3. c #EFEFA7A70000", "4. c #F3F3A1A10000", "5. c #F1F1B7B70000", "6. c #CDCD83837676", "7. c #DFDF8F8F7B7B", "8. c #E2E287876666", "9. c #F1F1CACA0B0B", "0. c #F1F1CBCB0E0E", "q. c #F2F2CCCC1313", "w. c #F3F3CECE1919", "e. c #F4F4D0D01E1E", "r. c #F2F2CACA2C2C", "t. c #F2F2CACA2F2F", "y. c #F2F2CCCC3232", "u. c #F3F3CDCD3535", "i. c #F4F4CFCF3939", "p. c #F5F5D2D22323", "a. c #F2F2D1D12F2F", "s. c #F6F6D4D42929", "d. c #F7F7D6D62E2E", "f. c #F5F5D0D03D3D", "g. c #F8F8D8D83434", "h. c #F9F9DBDB3A3A", "j. c #EEEEC5C55858", "k. c #F2F2C9C95E5E", "l. c #FAFAC4C45D5D", "z. c #F6F6D2D24242", "x. c #F7F7D3D34646", "c. c #F7F7D5D54B4B", "v. c #F8F8D7D75050", "b. c #F9F9D9D95555", "n. c #E6E6C9C97777", "m. c #F4F4CFCF6464", "M. c #F9F9E1E15858", "N. c #B9B9CDCDB9B9", "B. c #DFDFD8D8BFBF", "V. c #DEDEE7E7DEDE", "C. c #E0E0DADAC1C1", "Z. c #E2E2DBDBC4C4", "A. c #E2E2DDDDC6C6", "S. c #E2E2DDDDC8C8", "D. c #E4E4D8D8CACA", "F. c #E4E4DEDEC8C8", "G. c #F9F9D5D5C2C2", "H. c #E5E5E0E0CACA", "J. c #E6E6E2E2CCCC", "K. c #E6E6E3E3CDCD", "L. c #EAEAE5E5CFCF", "P. c #E0E0E9E9E0E0", "I. c #E1E1EAEAE1E1", "U. c #E2E2EBEBE2E2", "Y. c #E3E3EBEBE3E3", "T. c #E4E4EDEDE4E4", "R. c #E5E5EEEEE5E5", "E. c #E7E7EFEFE7E7", "W. c #E8E8F0F0E8E8", "Q. c #E9E9F1F1E9E9", "!. c None", /* pixels */ "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "K d h g g a a q 0 9 8 7 6 4 3 4 ", "E 7.O.J G G F D D C C V B M b 1 ", "E X.[ o.Z N M b c x z l k j n 1 ", "E X.{ ' D.Q.Q.E.T.T.T.U.U.V.U.N.", "Y 6.j.] ` ! i u t e : : = * y ", "U n.p k._ ~ P > ; - # @ X . > ", "I L m.8.~ Q r < & % $ $ o o < ", "T .( ) G.L.K.J.J.F.S.A.C.B.S.+.", "T } / 1.h.g.d.s.p.w.w.q.0.9.a.;.", "T | l.M.b.v.c.x.z.f.i.u.y.t.t.@.", "W 4.5.4.2.<.,.>.:.;.-.=.&.&.@.&.", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!." }; springlobby-0.169/src/images/flags/NA.xpm0000600000176000000410000001014112105760300021570 0ustar buildbotwww-data00000000000000/* XPM */ static const char *NA_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 160 2", " c black", ". c #000027270000", "X c #000029290000", "o c #00002D2D0000", "O c #00002F2F0000", "+ c #000031310000", "@ c #000033330000", "# c #000035350000", "$ c #000039390000", "% c #00003B3B0000", "& c #00003D3D0000", "* c #00003F3F0000", "= c #000000007373", "- c #000000007979", "; c #000000007D7D", ": c #000041410000", "> c #000047470000", ", c #000049490000", "< c #00005B5B0000", "1 c #000065650000", "2 c #000000008181", "3 c #000000008383", "4 c #000000008787", "5 c #000000008989", "6 c #000000008D8D", "7 c #000000009191", "8 c #51515151B7B7", "9 c #53535353BBBB", "0 c #56565555BCBC", "q c #58585757B5B5", "w c #5A5A5A5ABABA", "e c #6F6F6A6AAEAE", "r c #79797070A3A3", "t c #7D7D7575A1A1", "y c #7C7C7575A6A6", "u c #67676767C6C6", "i c #69696969C0C0", "p c #6D6D6D6DC3C3", "a c #6F6F6F6FC3C3", "s c #70707070C5C5", "d c #72727272C6C6", "f c #74747474C7C7", "g c #75757777CACA", "h c #77777676C8C8", "j c #7D7D7B7BC5C5", "k c #7E7E7D7DCACA", "l c #0B0B95950B0B", "z c #0F0F97970E0E", "x c #101097971010", "c c #131399991313", "v c #141499991414", "b c #14149A9A1414", "n c #19199B9B1919", "m c #1A1A9A9A1A1A", "M c #18189C9C1919", "N c #19199C9C1919", "B c #1F1F9C9C1F1F", "V c #1E1E9E9E1E1E", "C c #2525A1A12525", "Z c #2C2CA2A22C2C", "A c #2F2FA4A42F2F", "S c #3232A5A53232", "D c #3232A6A63232", "F c #3333A6A63232", "G c #3535A8A83535", "H c #3636A8A83636", "J c #3939A9A93939", "K c #3B3BAAAA3B3B", "L c #3F3FABAB3F3F", "P c #3D3DACAC3D3D", "I c #3F3FB1B14242", "U c #4242AEAE4242", "Y c #4646AEAE4646", "T c #5555BCBC5C5C", "R c #7C7CCBCB8383", "E c #EBEB00000000", "W c #EDED00000000", "Q c #EFEF00000000", "! c #F1F100000000", "~ c #F3F300000000", "^ c #F5F500000000", "/ c #F7F70D0D0707", "( c #F6F62C2C2D2D", ") c #F7F730303030", "_ c #F7F731313131", "` c #F8F835353535", "' c #F8F836363636", "] c #F8F837373636", "[ c #F8F837373737", "{ c #F9F93A3A3A3A", "} c #F9F93B3B3A3A", "| c #F9F93B3B3B3B", " . c #F9F93B3B3C3C", ".. c #FAFA3F3F3F3F", "X. c #F8F83D3D4343", "o. c #F7F741414848", "O. c #F7F74E4E4E4E", "+. c #FAFA42424040", "@. c #FAFA4B4B4545", "#. c #F6F64C4C5353", "$. c #F9F950504A4A", "%. c #F8F853535353", "&. c #FAFA5D5D5656", "*. c #F9F95B5B5F5F", "=. c #FAFA5D5D5D5D", "-. c #F9F961615F5F", ";. c #FBFB61616262", ":. c #F8F866666D6D", ">. c #FBFB70706B6B", ",. c #F7F777777A7A", "<. c #F9F978787474", "1. c #F7F7DADA5D5D", "2. c #EDEDD2D26666", "3. c #ECECD2D26B6B", "4. c #F4F4D9D96262", "5. c #94948F8FB9B9", "6. c #85858282C3C3", "7. c #84848282C5C5", "8. c #8C8C8888C1C1", "9. c #8F8F9595D6D6", "0. c #91919595D3D3", "q. c #9B9B9F9FD8D8", "w. c #A3A3A8A8DEDE", "e. c #B5B5BABAE3E3", "r. c #8181C9C98989", "t. c #8888D0D08D8D", "y. c #9696D5D59C9C", "u. c #ABABDDDDAFAF", "i. c #B9B9C7C7ADAD", "p. c #CBCBA9A99393", "a. c #F6F686868888", "s. c #FAFA8C8C8A8A", "d. c #F9F99F9F9F9F", "f. c #EDEDB2B2ADAD", "g. c #F7F7A9A9ABAB", "h. c #F3F3B2B2AEAE", "j. c #D7D7BBBBCDCD", "k. c #ECECC0C0BBBB", "l. c #DDDDD7D7E7E7", "z. c #C5C5E2E2C5C5", "x. c #C7C7E3E3C7C7", "c. c #D1D1E5E5D0D0", "v. c #DEDEE2E2D5D5", "b. c #DDDDEAEADCDC", "n. c #E9E9CBCBC4C4", "m. c #E2E2D8D8CCCC", "M. c #E2E2DFDFD3D3", "N. c #F9F9C1C1C2C2", "B. c #F3F3D0D0D3D3", "V. c #F1F1D3D3D7D7", "C. c #F2F2DDDDE1E1", "Z. c #EBEBE1E1EBEB", "A. c #ECECE7E7EFEF", "S. c #E0E0E1E1F2F2", "D. c #E1E1E2E2F2F2", "F. c #E4E4E4E4F2F2", "G. c #EAEAEAEAF4F4", "H. c #EDEDE9E9F1F1", "J. c #F2F2E4E4E9E9", "K. c None", /* pixels */ "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "7 5 6 7 5 3 3 ; - = 4 0.j.~ W W ", "4 k 8.5.j f s p i q.G.B.-.%.O.E ", "6 7.3.4.y 0 8 w e.Z.<.] _ ( g.i.", "6 6.2.1.t 8 h F.V.$.] _ #.n.z.< ", "4 h e r q w.A.s. .] _ a.v.R L * ", "4 d 9 u D.C.&.{ ] X.k.x.I m K * ", "- p 9.H.d.+.{ ] ,.M.y.C m v H @ ", "5 D.J.>...{ X.f.c.T V M v x D + ", "l.N.@...{ :.m.u.D V M v x l A o ", "/ ;.=.*.h.b.t.Y U P J H S A Z X ", "^ ^ ~ p.r.1 , > * * % @ o o X @ ", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K." }; springlobby-0.169/src/images/flags/NC.xpm0000600000176000000410000001003712105760300021576 0ustar buildbotwww-data00000000000000/* XPM */ static const char *NC_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 157 2", " c black", ". c #000005050000", "X c #00000D0D0000", "o c #000015150000", "O c #00001B1B0000", "+ c #000023230000", "@ c #000029290000", "# c #000031310000", "$ c #000037370000", "% c #252500003535", "& c #0B0B6D6D3939", "* c #0F0F6F6F3C3C", "= c #10106F6F3D3D", "- c #131372724040", "; c #141472724141", ": c #181875754545", "> c #191975754545", ", c #1E1E79794949", "< c #1F1F79794949", "1 c #23237C7C4E4E", "2 c #24247D7D4E4E", "3 c #2C2C7F7F5353", "4 c #71711D1D7D7D", "5 c #474747473434", "6 c #484848483A3A", "7 c #4D4D4D4D3A3A", "8 c #545455552F2F", "9 c #535352523F3F", "0 c #5C5C5E5E4040", "q c #50507F7F6A6A", "w c #6D6D6D6D4646", "e c #727271714B4B", "r c #767676765050", "t c #767676765151", "y c #00000000A5A5", "u c #00000000A9A9", "i c #00000505ADAD", "p c #00000D0DAFAF", "a c #00001515B3B3", "s c #00001B1BB7B7", "d c #00002323B9B9", "f c #00002929BDBD", "g c #00002F2FBFBF", "h c #00003535C3C3", "j c #00003939C3C3", "k c #00003F3FC7C7", "l c #00004343C9C9", "z c #00004747C9C9", "x c #00004B4BCBCB", "c c #0F0F4B4BC3C3", "v c #2F2F81815555", "b c #2F2F81815656", "n c #323283835858", "m c #333384845959", "M c #353585855B5B", "N c #393989895F5F", "B c #3D3D8B8B6262", "V c #42428E8E6565", "C c #4B4B8A8A6C6C", "Z c #464691916969", "A c #545484846E6E", "S c #585891917878", "D c #5D5DA0A07D7D", "F c #7676ACAC4343", "G c #7979A8A84040", "H c #6161A3A38080", "J c #6666A6A68484", "K c #4B4B8282D5D5", "L c #50508686D7D7", "P c #55558989D9D9", "I c #5A5A8D8DDBDB", "U c #5E5E9090DCDC", "Y c #62629494DEDE", "T c #64649393DBDB", "R c #69699696DCDC", "E c #6D6D9999DDDD", "W c #71719C9CDFDF", "Q c #75759F9FE1E1", "! c #7979A2A2E2E2", "~ c #7C7CA5A5E3E3", "^ c #7F7FA8A8E4E4", "/ c #E3E300000000", "( c #E5E500000000", ") c #E7E700000000", "_ c #FDFD00000505", "` c #FDFD00000707", "' c #FDFD00000B0B", "] c #F2F214144141", "[ c #F3F319194545", "{ c #F3F31A1A4545", "} c #F4F41F1F4949", "| c #F4F41F1F4A4A", " . c #F4F420204545", ".. c #F5F525254A4A", "X. c #F5F524244F4F", "o. c #F5F525254E4E", "O. c #F6F62B2B4F4F", "+. c #F6F62B2B5353", "@. c #F6F62A2A5454", "#. c #F7F730305353", "$. c #F7F730305959", "%. c #F4F436365C5C", "&. c #F8F836365959", "*. c #F4F43B3B6060", "=. c #F5F53F3F6060", "-. c #98986161A0A0", ";. c #9B9B6565A3A3", ":. c #9E9E6969A6A6", ">. c #A1A16D6DA9A9", ",. c #A4A47171ABAB", "<. c #A6A67777ADAD", "1. c #919191913434", "2. c #989898984040", "3. c #9B9B9B9B4545", "4. c #9E9E9E9E4B4B", "5. c #A0A0A0A04F4F", "6. c #A4A4A4A45454", "7. c #A8A8C7C75353", "8. c #B7B7D4D47979", "9. c #FCFCB9B97B7B", "0. c #F5F5C1C13A3A", "q. c #F5F5F5F52F2F", "w. c #F8F8F1F13737", "e. c #F8F8F8F83535", "r. c #F9F9F9F93A3A", "t. c #F9F9F9F93B3B", "y. c #D3D3D7D75050", "u. c #DEDEE2E27070", "i. c #F7F7C6C64444", "p. c #ECECEEEE5B5B", "a. c #FAFAFAFA4141", "s. c #FBFBFBFB4646", "d. c #F9F9F9F94848", "f. c #FBFBF9F94F4F", "g. c #FBFBFCFC4949", "h. c #FCFCFCFC4B4B", "j. c #F1F1F1F15A5A", "k. c #FDFDFDFD5353", "l. c #FCFCFCFC5454", "z. c #FDFDFDFD5454", "x. c #FBFBF9F95858", "c. c #FEFEFEFE5959", "v. c #FCFCEEEE7575", "b. c #F5F5F5F56161", "n. c #9F9FBCBCA8A8", "m. c #9898ADADCACA", "M. c #9999AEAEC9C9", "N. c #8383AAAAE5E5", "B. c #8989A4A4E1E1", "V. c #8F8FAAAAE2E2", "C. c #8F8FB3B3E8E8", "Z. c #8F8FB3B3E9E9", "A. c #C6C6A8A88686", "S. c #FDFDBEBE8383", "D. c #C2C2CFCF9595", "F. c #E2E2D0D09E9E", "G. c None", /* pixels */ "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "x x x x z l k j h g f d s a p i ", "c Z.Z.V.M.M.B.N.^ ~ ! Q W E R u ", "x Z.D.u.j.l.p.n.Y U I P L K T y ", "4 F.b.c.6.t h.d.A.,.>.:.;.-.<.% ", "` S.x.k.t 4.s.a.i.&.#.O... .=.) ", "' v.l.5.e w 1.t.w.$.+.X.| { %.) ", "` 9.l.d.3.3.t.e.0.@.X.| { ] %./ ", "$ 8.y.3.0 6 1.q.F 2 , > ; = m ", "# J 7.0 6 5 8 G 1 , > - = & b ", "@ D D S A A C Z V B N M m v v ", "+ O o X . ", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G." }; springlobby-0.169/src/images/flags/NE.xpm0000600000176000000410000000774212105760300021611 0ustar buildbotwww-data00000000000000/* XPM */ static const char *NE_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 156 2", " c black", ". c #000021210000", "X c #000027270000", "o c #000029290000", "O c #00002D2D0000", "+ c #00002F2F0000", "@ c #000033330000", "# c #000035350000", "$ c #000039390000", "% c #00003D3D0000", "& c #000041410000", "* c #000047470000", "= c #00004D4D0000", "- c #000051510000", "; c #000057570000", ": c #00005D5D0000", "> c #000063630000", ", c #000065650000", "< c #00006F6F0000", "1 c #000071710000", "2 c #000075750000", "3 c #0B0B8F8F0B0B", "4 c #0F0F92920E0E", "5 c #131394941313", "6 c #181896961919", "7 c #1E1E99991E1E", "8 c #23239D9D2323", "9 c #2F2F9F9F2F2F", "0 c #2929A0A02929", "q c #2C2CA2A22C2C", "w c #2E2EA2A22E2E", "e c #2F2FA4A42F2F", "r c #3232A5A53232", "t c #3434A5A53434", "y c #3535A8A83535", "u c #3939A9A93939", "i c #3A3AA8A83A3A", "p c #3F3FABAB3F3F", "a c #3D3DACAC3D3D", "s c #4242AEAE4242", "d c #4444AEAE4444", "f c #4646B0B04646", "g c #4B4BB2B24B4B", "h c #5050B4B45050", "j c #5454B7B75555", "k c #5858B9B95858", "l c #5D5DBCBC5D5D", "z c #6161BEBE6262", "x c #6666BDBD6666", "c c #E9E900000000", "v c #EBEB03030000", "b c #EFEF0F0F0000", "n c #EDED1B1B0000", "m c #F1F119190000", "M c #F3F321210000", "N c #F5F527270000", "B c #F7F72D2D0000", "V c #F9F935350000", "C c #FBFB39390000", "Z c #FDFD3D3D0000", "A c #FDFD43430000", "S c #FFFF43430000", "D c #FDFD45450000", "F c #FDFD4B4B0000", "G c #FFFF4B4B0000", "H c #FFFF4D4D0000", "J c #FFFF59590000", "K c #F6F676762C2C", "L c #F7F77B7B3131", "P c #F8F875753636", "I c #F8F87F7F3737", "U c #F9F97C7C3B3B", "Y c #F9F982823D3D", "T c #F7F78A8A4949", "R c #FAFA86864242", "E c #FBFB8A8A4747", "W c #FCFC8D8D4C4C", "Q c #FDFD8F8F5151", "! c #F7F793934E4E", "~ c #F8F896965353", "^ c #FDFD93935454", "/ c #FEFE96965959", "( c #F9F998985757", ") c #FAFA9B9B5C5C", "_ c #FEFE98985C5C", "` c #FEFE9A9A5F5F", "' c #FBFB9E9E6060", "] c #FCFCA1A16565", "[ c #FCFCA4A46969", "{ c #FDFDA7A76D6D", "} c #F7F7A4A47171", "| c #FDFDA9A97171", " . c #FEFEABAB7474", ".. c #FEFEADAD7777", "X. c #F8F8A9A97878", "o. c #F9F9AEAE7F7F", "O. c #FFFFABAB7A7A", "+. c #FEFEAEAE7979", "@. c #FFFFB0B07B7B", "#. c #A1A1C7C7A1A1", "$. c #DBDBB5B59D9D", "%. c #F7F7B1B18686", "&. c #FAFAB2B28686", "*. c #FAFABDBD9898", "=. c #F6F6C8C8ACAC", "-. c #F8F8CDCDB3B3", ";. c #F9F9CFCFB7B7", ":. c #FBFBD4D4BDBD", ">. c #C5C5DFDFC5C5", ",. c LightGray", "<. c #D5D5D5D5D5D5", "1. c #D7D7D7D7D7D7", "2. c #D0D0E4E4D0D0", "3. c #D2D2E6E6D2D2", "4. c #D4D4E7E7D4D4", "5. c #D5D5E8E8D5D5", "6. c #D7D7E8E8D7D7", "7. c #D7D7EAEAD8D8", "8. c #D8D8ECECDCDC", "9. c #DADAEDEDDDDD", "0. c #DCDCEEEEDDDD", "q. c #DDDDEFEFDDDD", "w. c #DFDFF0F0DFDF", "e. c #F5F5D9D9C9C9", "r. c #F5F5E3E3D6D6", "t. c #F6F6E4E4D8D8", "y. c #F6F6E6E6DBDB", "u. c #F7F7E6E6DADA", "i. c #F8F8E8E8DBDB", "p. c #F9F9E9E9DEDE", "a. c #E0E0F0F0E0E0", "s. c #E2E2F1F1E2E2", "d. c #E8E8F4F4E8E8", "f. c #FAFAEAEAE0E0", "g. c #FBFBEBEBE1E1", "h. c #FCFCECECE1E1", "j. c #FDFDEDEDE2E2", "k. c #FDFDEEEEE3E3", "l. c #FEFEEFEFE5E5", "z. c #FEFEF2F2EAEA", "x. c #F1F1F1F1F1F1", "c. c gray95", "v. c #F3F3F3F3F3F3", "b. c #F4F4F4F4F4F4", "n. c #F4F4F5F5F5F5", "m. c gray96", "M. c #F6F6F6F6F6F6", "N. c gray97", "B. c gray98", "V. c #FBFBFBFBFBFB", "C. c #FBFBFCFCFBFB", "Z. c gray99", "A. c #FDFDFCFCFDFD", "S. c #FDFDFDFDFDFD", "D. c #FEFEFEFEFEFE", "F. c None", /* pixels */ "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "J G H H G D S Z C V B N M m b n ", "H @.+.+.+. .| { [ ] ' ) ( ~ ! v ", "S O.' / / ^ Q W E R Y I L K T v ", "e.z.l.l.l.h.h.h.f.i.i.y.t.r.y.$.", "m.D.D.D.A.A.:.&.&.-.N.m.m.v.m.1.", "v.D.D.D.D.B.*.U P %.M.m.b.v.m.1.", "x.D.B.B.B.B.;.X.} =.M.m.v.v.v.,.", ">.d.s.a.a.q.q.q.8.4.4.4.3.2.4.#.", "< x d p i t q 0 8 7 6 5 4 3 9 . ", "< z l k j h g f s a u y t w q o ", "2 , > : ; - = * & % $ @ O O X # ", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F." }; springlobby-0.169/src/images/flags/NF.xpm0000600000176000000410000000744712105760300021614 0ustar buildbotwww-data00000000000000/* XPM */ static const char *NF_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 147 2", " c black", ". c #000005050000", "X c #00000D0D0000", "o c #000013130000", "O c #000019190000", "+ c #000021210000", "@ c #000027270000", "# c #00002F2F0000", "$ c #000035350000", "% c #00003B3B0000", "& c #00003D3D0000", "* c #000041410000", "= c #000043430000", "- c #0B0B67670B0B", "; c #0F0F6A6A0E0E", ": c #10106A6A1010", "> c #14146E6E1414", ", c #191970701919", "< c #1A1A70701A1A", "1 c #1F1F74741F1F", "2 c #202075752020", "3 c #252578782525", "4 c #26267A7A2626", "5 c #2A2A73732A2A", "6 c #2F2F77772F2F", "7 c #2B2B7C7C2B2B", "8 c #2C2C7B7B2C2C", "9 c #2C2C7C7C2C2C", "0 c #2F2F7C7C2F2F", "q c #2F2F7D7D2F2F", "w c #32327F7F3232", "e c #33337F7F3232", "r c #35357C7C3535", "t c #35357E7E3535", "y c #3A3A7F7F3A3A", "u c #313181813131", "i c #363682823636", "p c #3B3B85853B3B", "a c #3D3D83833D3D", "s c #3F3F89893F3F", "d c #3F3F8A8A3F3F", "f c #414185854141", "g c #434386864343", "h c #44448C8C4444", "j c #44448E8E4444", "k c #45458E8E4545", "l c #4A4A8A8A4A4A", "z c #49498F8F4949", "x c #494991914949", "c c #4E4E93934E4E", "v c #4F4F95954F4F", "b c #50508E8E5050", "n c #535396965353", "m c #535397975353", "M c #545497975454", "N c #5A5A92925A5A", "B c #595994945959", "V c #5D5D91915D5D", "C c #5C5C93935C5C", "Z c #585898985757", "A c #585899995858", "S c #58589A9A5858", "D c #58589B9B5959", "F c #5D5D98985D5D", "G c #5C5C9D9D5C5C", "H c #5D5D9D9D5D5D", "J c #5F5F9F9F5F5F", "K c #61619F9F6262", "L c #63639C9C6363", "P c #6A6A9F9F6A6A", "I c #6666A3A36666", "U c #6A6AA5A56A6A", "Y c #6D6DA0A06D6D", "T c #6F6FA8A86F6F", "R c #7575A6A67575", "E c #7272AAAA7373", "W c #7676ADAD7676", "Q c #7B7BA7A77B7B", "! c #7979A9A97979", "~ c #7A7AA8A87A7A", "^ c #7979AEAE7979", "/ c #7E7EACAC7E7E", "( c #7B7BB0B07A7A", ") c #7B7BB0B07B7B", "_ c #8080AAAA8080", "` c #8585AFAF8585", "' c #8686AEAE8686", "] c #8B8BB5B58B8B", "[ c #9090B3B39090", "{ c #9B9BBCBC9B9B", "} c #9B9BBDBD9B9B", "| c #A1A1C1C1A1A1", " . c #B2B2CBCBB2B2", ".. c #B4B4CCCCB4B4", "X. c #B6B6CFCFB6B6", "o. c #B9B9D1D1B9B9", "O. c #BBBBD3D3BBBB", "+. c #BCBCD2D2BCBC", "@. c #BEBED5D5BEBE", "#. c #BFBFD5D5BFBF", "$. c #C3C3CBCBC3C3", "%. c #CBCBCFCFCBCB", "&. c #C0C0D6D6C0C0", "*. c #C4C4D6D6C4C4", "=. c #C2C2D8D8C2C2", "-. c #C4C4D9D9C4C4", ";. c #C6C6DBDBC6C6", ":. c #CBCBD1D1CBCB", ">. c #C8C8DDDDC9C9", ",. c #C9C9DDDDC9C9", "<. c #CACADDDDCACA", "1. c #CCCCDFDFCCCC", "2. c #CDCDDEDECDCD", "3. c #CECEDFDFCECE", "4. c #D7D7D7D7D7D7", "5. c #D7D7D9D9D5D5", "6. c #DDDDDDDDDDDD", "7. c #CECEE0E0CECE", "8. c #D7D7E7E7D7D7", "9. c #D9D9E3E3D9D9", "0. c #E2E2EDEDE2E2", "q. c #E5E5E9E9E5E5", "w. c #E9E9EEEEE9E9", "e. c #EBEBEDEDEBEB", "r. c #EBEBEFEFEBEB", "t. c #EFEFEFEFEFEF", "y. c #F1F1F1F1F1F1", "u. c #F0F0F2F2F0F0", "i. c #F3F3F3F3F3F3", "p. c #F1F1F6F6F1F1", "a. c gray96", "s. c #F5F5F6F6F5F5", "d. c #F5F5F7F7F5F5", "f. c #F6F6F6F6F6F6", "g. c #F6F6F7F7F6F6", "h. c gray97", "j. c #F7F7F8F8F7F7", "k. c #F8F8F9F9F7F7", "l. c #F9F9FAFAF9F9", "z. c gray98", "x. c #FAFAFBFBFAFA", "c. c #FBFBFBFBFBFB", "v. c #FBFBFCFCFBFB", "b. c gray99", "n. c #FDFDFDFDFDFD", "m. c #FDFDFDFDFEFE", "M. c None", /* pixels */ "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "= = = = } r.i.y.r.t.q.] o X . ", "= ) ) ^ 8.v.n.p.0.x.x.2.Z n c ", "= ) J G 7.v.n./ R x.f.&.u 9 z ", "= ^ G D 7.x.x.L F f.h.@.7 4 h ", "% W Z M >.v.@.l g ` f.O.4 2 s ", "% E m v >.b.Q g y P f.O.1 < p ", "$ T v x ;.| P a r B [ X.> > i ", "$ U x h *.} b 8 5 r ` ..> : t ", "@ I j s *.r.7.C N *.9. .; ; 9 ", "O L G Z >.f.f._ Q f.y.+.w 9 8 ", "O O X . ! 5.6.%.$.4.%.V ", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M." }; springlobby-0.169/src/images/flags/NG.xpm0000600000176000000410000000676012105760300021612 0ustar buildbotwww-data00000000000000/* XPM */ static const char *NG_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 134 2", " c black", ". c #000027270000", "X c #000029290000", "o c #00002D2D0000", "O c #00002F2F0000", "+ c #000031310000", "@ c #000035350000", "# c #00003B3B0000", "$ c #00003F3F0000", "% c #000045450000", "& c #00004B4B0000", "* c #00004D4D0000", "= c #000053530000", "- c #00005B5B0000", "; c #00005D5D0000", ": c #000061610000", "> c #000063630000", ", c #000065650000", "< c #000067670000", "1 c #000069690000", "2 c #00006F6F0000", "3 c #000075750000", "4 c #000077770000", "5 c #00007B7B0000", "6 c #00007F7F0000", "7 c #000083830000", "8 c #000085850000", "9 c #000087870000", "0 c #000089890000", "q c #000091910000", "w c #0B0B95950B0B", "e c #0F0F96960E0E", "r c #101097971010", "t c #131397971313", "y c #141499991414", "u c #14149A9A1414", "i c #19199A9A1919", "p c #19199B9B1919", "a c #1A1A9C9C1A1A", "s c #1F1F9D9D1F1F", "d c #1F1F9E9E1F1F", "f c #20209F9F2020", "g c #2525A0A02525", "h c #2525A1A12525", "j c #2626A2A22626", "k c #2B2BA4A42B2B", "l c #2B2BA5A52B2B", "z c #2C2CA2A22C2C", "x c #2C2CA6A62C2C", "c c #2F2FA4A42F2F", "v c #3131A7A73131", "b c #3232A5A53232", "n c #3333A6A63232", "m c #3535A6A63535", "M c #3131A8A83131", "N c #3636A8A83636", "B c #3737AAAA3737", "V c #3A3AAAAA3A3A", "C c #3B3BAAAA3B3B", "Z c #3F3FADAD3F3F", "A c #3F3FAEAE3F3F", "S c #4040ADAD3F3F", "D c #4444AFAF4444", "F c #4444B1B14444", "G c #4545B0B04545", "H c #4545B1B14545", "J c #4949B2B24949", "K c #4B4BB3B34B4B", "L c #4949B4B44949", "P c #4E4EB4B44E4E", "I c #4F4FB6B64F4F", "U c #4F4FB7B74F4F", "Y c #5050B5B55050", "T c #5353B7B75353", "R c #5454B5B55555", "E c #5454B7B75454", "W c #5353B9B95353", "Q c #5454B9B95454", "! c #5858B9B95757", "~ c #5858B9B95858", "^ c #5858BBBB5959", "/ c #5959BABA5959", "( c #5858BCBC5858", ") c #5C5CB9B95C5C", "_ c #5C5CBDBD5C5C", "` c #5D5DBCBC5D5D", "' c #5F5FBFBF5F5F", "] c #6161BEBE6262", "[ c #6666C0C06666", "{ c #6A6AC3C36A6A", "} c #6F6FC4C46F6F", "| c #7272C6C67373", " . c #7777C7C77777", ".. c #7676C8C87676", "X. c #7979C8C87979", "o. c #7B7BCACA7A7A", "O. c #7B7BCACA7B7B", "+. c #BDBDC7C7BDBD", "@. c #C7C7D3D3C7C7", "#. c LightGray", "$. c #D7D7D7D7D7D7", "%. c gray85", "&. c #D9D9E3E3D9D9", "*. c #DFDFE9E9DFDF", "=. c #E7E7EEEEE7E7", "-. c gray92", ";. c #E8E8EFEFE8E8", ":. c gray93", ">. c #EFEFEFEFEFEF", ",. c #EAEAF0F0EAEA", "<. c #EBEBF1F1EBEB", "1. c #ECECF2F2ECEC", "2. c #EEEEF3F3EEEE", "3. c #EEEEF4F4EEEE", "4. c #EFEFF4F4EFEF", "5. c #EFEFF5F5EFEF", "6. c #F0F0F6F6F0F0", "7. c #F1F1F7F7F1F1", "8. c #F2F2F7F7F2F2", "9. c #F4F4F4F4F4F4", "0. c gray96", "q. c #F6F6F6F6F6F6", "w. c gray97", "e. c #F3F3F8F8F3F3", "r. c #F4F4F9F9F4F4", "t. c #F6F6FBFBF6F6", "y. c #F8F8F8F8F8F8", "u. c #F9F9F9F9F9F9", "i. c gray98", "p. c #FBFBFBFBFBFB", "a. c gray99", "s. c #FDFDFDFDFDFD", "d. c #FDFDFDFDFEFE", "f. c None", /* pixels */ "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "q 0 0 9 7 *.>.>.>.-.&.1 < : ; : ", "9 O.O.O. .t.a.a.a.a.8.) ! Y I * ", "0 O.' _ ^ e.a.p.p.p.3.B M x J & ", "9 O./ / W e.a.p.p.p.3.v l h D % ", "9 ./ W Y 8.p.p.p.q.<.l h d D $ ", "9 | W I J 8.p.p.q.q.<.h d d V # ", "6 } I L D 8.w.w.q.q.:.f y u B @ ", "5 { L F Z 3.p.q.q.q.=.y t t v O ", "4 ] F D C <.w.q.q.q.=.t e w c O ", "2 ] ) ^ R 3.w.w.q.q.<.m v c c . ", "4 < : - = @.%.$.$.#.+.O X O X + ", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f." }; springlobby-0.169/src/images/flags/NI.xpm0000600000176000000410000000745012105760300021611 0ustar buildbotwww-data00000000000000/* XPM */ static const char *NI_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 148 2", " c black", ". c #00000000DDDD", "X c #00000000DFDF", "o c #00000505DDDD", "O c #00000505DFDF", "+ c #00000909E1E1", "@ c #00000D0DE3E3", "# c #00001313E5E5", "$ c #00001919E7E7", "% c #00001F1FE9E9", "& c #00002525EBEB", "* c #00002929EBEB", "= c #00002B2BEDED", "- c #00003333EDED", "; c #00003737EFEF", ": c #00003D3DF1F1", "> c #00005757DFDF", ", c #00004343F3F3", "< c #00004949F5F5", "1 c #00004D4DF7F7", "2 c #00004F4FF5F5", "3 c #00004F4FF7F7", "4 c #00005F5FE7E7", "5 c #00005151F9F9", "6 c #00005555F9F9", "7 c #00005959FBFB", "8 c #00005D5DFDFD", "9 c #00006161FDFD", "0 c #00006565FDFD", "q c #00006767FFFF", "w c #00006969FDFD", "e c #00006B6BFFFF", "r c #00007171FFFF", "t c #12127E7EF1F1", "y c #16168181F1F1", "u c #1B1B8484F2F2", "i c #1F1F8787F3F3", "p c #25258989F4F4", "a c #2A2A8D8DF5F5", "s c #2F2F9191F6F6", "d c #2F2F9797FBFB", "f c #32329292F2F2", "g c #33339393F6F6", "h c #36369191F2F2", "j c #34349393F7F7", "k c #35359494F2F2", "l c #37379595F3F3", "z c #35359B9BFFFF", "x c #38389696F7F7", "c c #3A3A9696F8F8", "v c #3B3B9898F3F3", "b c #3E3E9999F8F8", "n c #3F3F9A9AF9F9", "m c #40409999F4F4", "M c #42429C9CF5F5", "N c #47479E9EF6F6", "B c #43439D9DF9F9", "V c #45459D9DFAFA", "C c #48489F9FFAFA", "Z c #4B4BA1A1F7F7", "A c #4F4FA2A2F7F7", "S c #4A4AA0A0FAFA", "D c #4C4CA2A2FBFB", "F c #5050A4A4F7F7", "G c #5454A7A7F7F7", "H c #5151A5A5FCFC", "J c #5555A7A7F8F8", "K c #5656A7A7FDFD", "L c #5858A9A9F8F8", "P c #5959A9A9F9F9", "I c #5A5AAAAAFDFD", "U c #5D5DABABF9F9", "Y c #5E5EACACF9F9", "T c #5E5EACACFEFE", "R c #6363AAAAF2F2", "E c #6666ADADF2F2", "W c #6161AEAEFAFA", "Q c #6262AFAFFAFA", "! c #6161AEAEFEFE", "~ c #6A6AAEAEF3F3", "^ c #6565B0B0FBFB", "/ c #6666B2B2FBFB", "( c #6464B0B0FEFE", ") c #6A6AB0B0F5F5", "_ c #6E6EB1B1F4F4", "` c #6E6EB2B2F6F6", "' c #6A6AB3B3FCFC", "] c #6B6BB2B2FCFC", "[ c #6E6EB5B5FCFC", "{ c #7A7AB5B5E5E5", "} c #7D7DB6B6E7E7", "| c #7F7FBCBCEFEF", " . c #7171B3B3F4F4", ".. c #7272B5B5F7F7", "X. c #7676B7B7F8F8", "o. c #7171B8B8FDFD", "O. c #7575BABAFEFE", "+. c #7A7AB6B6F3F3", "@. c #7C7CBBBBF7F7", "#. c #7F7FBABAF6F6", "$. c #7A7ABABAF9F9", "%. c #7878BBBBFEFE", "&. c #7B7BBDBDFEFE", "*. c #7D7DBEBEFEFE", "=. c #7F7FBEBEFFFF", "-. c #7F7FBFBFFFFF", ";. c #CECE91917777", ":. c #EBEBE0E07F7F", ">. c #8282BEBEF3F3", ",. c #8080BDBDF9F9", "<. c #ADADC3C3B1B1", "1. c #8484C0C0FAFA", "2. c #8585C0C0FCFC", "3. c #8888C2C2FBFB", "4. c #8888C2C2FDFD", "5. c #8B8BC4C4FBFB", "6. c #8B8BC4C4FDFD", "7. c #8E8EC6C6FEFE", "8. c #9090C7C7FEFE", "9. c #A0A0CFCFFCFC", "0. c #A4A4D2D2FEFE", "q. c #EEEEE2E28181", "w. c #F4F4E2E28686", "e. c #F6F6E4E48B8B", "r. c #F6F6E9E98989", "t. c #F7F7E9E98A8A", "y. c #F8F8ECEC8F8F", "u. c #FAFAEDED9393", "i. c #F9F9ECEC9494", "p. c #FBFBF0F09999", "a. c gray89", "s. c gray90", "d. c #E7E7E7E7E7E7", "f. c gray95", "g. c #F3F3F3F3F3F3", "h. c #F4F4F4F4F4F4", "j. c #F4F4F5F5F5F5", "k. c gray96", "l. c #F6F6F6F6F6F6", "z. c gray97", "x. c gray98", "c. c #FBFBFBFBFBFB", "v. c #FBFBFCFCFBFB", "b. c gray99", "n. c #FDFDFCFCFDFD", "m. c #FDFDFDFDFDFD", "M. c #FEFEFEFEFEFE", "N. c None", /* pixels */ "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "r e e e e q 9 8 7 6 3 < , : ; ; ", "e -.-.*.*.O.O.o.[ ' ^ W U L G * ", "q -.( ( T I J H D V B n x g A % ", "z 0.8.8.6.2.2.1.>.$.X...` ~ #.4 ", "n.n.n.n.n.b.p.e.w.y.z.k.k.k.k.d.", "n.n.n.n.n.c.u.<.;.r.k.k.k.g.k.d.", "n.n.v.v.c.c.i.:.:.r.k.h.g.f.g.a.", "z 8.5.2.1.#.#.} { ._ ~ E R +.> ", "6 ..D V n c g s a p i u y t h . ", "3 ' W Y L J H Z N M m v l l f . ", "3 , : ; - = & % $ # @ + O . . O ", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N." }; springlobby-0.169/src/images/flags/NL.xpm0000600000176000000410000000711112105760300021606 0ustar buildbotwww-data00000000000000/* XPM */ static const char *NL_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 138 2", " c black", ". c #000000003B3B", "X c #000000003D3D", "o c #000000004141", "O c #000000004343", "+ c #000000004747", "@ c #000000004D4D", "# c #000000005151", "$ c #000000005757", "% c #000000005B5B", "& c #000000005F5F", "* c #000000006565", "= c #000000006B6B", "- c #000000006F6F", "; c #000000007575", ": c #000000007B7B", "> c #000001017F7F", ", c #000007078181", "< c #000021218F8F", "1 c #0B0B5050A1A1", "2 c #0F0F5252A3A3", "3 c #13135656A5A5", "4 c #18185A5AA8A8", "5 c #1E1E5E5EAAAA", "6 c #23236060A9A9", "7 c #23236262ADAD", "8 c #28286363ACAC", "9 c #29296666AFAF", "0 c #2C2C6767ADAD", "q c #2C2C6767AEAE", "w c #2F2F6969AEAE", "e c #2F2F6A6AAEAE", "r c #2E2E6A6AB2B2", "t c #31316B6BB0B0", "y c #32326C6CB0B0", "u c #35356F6FB2B2", "i c #36366F6FB2B2", "p c #34346F6FB5B5", "a c #39397171B3B3", "s c #3B3B7373B5B5", "d c #3A3A7373B7B7", "f c #3D3D7575B6B6", "g c #3F3F7676B9B9", "h c #40407777B7B7", "j c #43437777B5B5", "k c #42427878B8B8", "l c #44447A7ABBBB", "z c #45457B7BBABA", "x c #46467C7CBABA", "c c #4A4A7E7EBCBC", "v c #4B4B7F7FBCBC", "b c #50508282BEBE", "n c #50508282BFBF", "m c #54548585C0C0", "M c #54548585C1C1", "N c #58588989C2C2", "B c #59598989C3C3", "V c #5D5D8D8DC4C4", "C c #61619090C6C6", "Z c #66669393C8C8", "A c #77779E9ECECE", "S c #E7E700000000", "D c #E9E900000000", "F c #EBEB00000000", "G c #EDED00000000", "H c #EFEF00000000", "J c #F1F100000000", "K c #F3F300000000", "L c #F5F500000000", "P c #F7F700000000", "I c #F9F900000000", "U c #FBFB00000000", "Y c #FDFD00000000", "T c red", "R c #FFFF15153131", "E c #F6F62C2C3C3C", "W c #F7F731314242", "Q c #F8F837374747", "! c #F9F93C3C4D4D", "~ c #F7F749495757", "^ c #FAFA42425151", "/ c #FBFB47475656", "( c #FCFC4C4C5A5A", ") c #FDFD51515E5E", "_ c #F7F74E4E6060", "` c #F5F556566A6A", "' c #F6F65A5A6E6E", "] c #F8F853536565", "[ c #FDFD54546363", "{ c #F9F957576868", "} c #FEFE59596767", "| c #FAFA5C5C6D6D", " . c #FEFE5C5C6969", ".. c #FEFE5F5F6C6C", "X. c #F7F75F5F7272", "o. c #F6F66D6D7F7F", "O. c #FBFB60607070", "+. c #F8F864647676", "@. c #FCFC65657474", "#. c #F9F968687A7A", "$. c #FAFA6C6C7D7D", "%. c #FCFC69697878", "&. c #FDFD6D6D7B7B", "*. c #FDFD70707F7F", "=. c #FBFB70708181", "-. c #FEFE74748181", ";. c #FCFC74748585", ":. c #FEFE77778484", ">. c #FEFE79798787", ",. c #FFFF7B7B8585", "<. c #FDFD78788888", "1. c #FDFD7B7B8B8B", "2. c #FFFF7B7B8989", "3. c #FEFE7F7F8F8F", "4. c #FEFE82829191", "5. c #FEFE9797A4A4", "6. c gray82", "7. c #D5D5D5D5D5D5", "8. c #EDEDEFEFEFEF", "9. c #EFEFEFEFEFEF", "0. c #F1F1F1F1F1F1", "q. c gray95", "w. c #F3F3F3F3F3F3", "e. c #F4F4F4F4F4F4", "r. c #F4F4F5F5F5F5", "t. c gray96", "y. c #F6F6F6F6F6F6", "u. c gray97", "i. c #F8F8F8F8F8F8", "p. c #F9F9F9F9F9F9", "a. c gray98", "s. c #FBFBFBFBFBFB", "d. c #FBFBFCFCFBFB", "f. c gray99", "g. c #FDFDFCFCFDFD", "h. c #FDFDFDFDFDFD", "j. c #FEFEFEFEFEFE", "k. c None", /* pixels */ "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "T T T T U T T T U U P P K K G G ", "T 2.2.,.;.-.=.&.%.@.O.| { ] _ F ", "T ,... .} [ ( ( / ^ ! Q W E ~ F ", "R 5.4.3.2.<.;.=.$.%.+.X.' ` =.S ", "0.j.j.j.j.s.s.s.p.u.u.r.r.r.r.7.", "9.j.j.j.j.s.i.i.u.u.r.r.r.e.e.6.", "9.j.i.f.i.j.i.i.u.u.r.r.e.e.e.6.", "< A B m n v z h d u r q 8 6 j @ ", ", Z l g d p r 9 7 5 4 3 2 1 w . ", "> C V N m b v x k f a u y w q . ", ": ; - = * & % $ # @ + O X X . X ", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k." }; springlobby-0.169/src/images/flags/NO.xpm0000600000176000000410000000652412105760300021620 0ustar buildbotwww-data00000000000000/* XPM */ static const char *NO_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 127 2", " c black", ". c #00000000A5A5", "X c #00001D1DB7B7", "o c #03035353CFCF", "O c #09095959D1D1", "+ c #4B4B8383D5D5", "@ c #50508686D7D7", "# c #54548A8AD8D8", "$ c #59598D8DD9D9", "% c #5D5D9090DBDB", "& c #62629494DDDD", "* c #65659494DADA", "= c #65659696DEDE", "- c #66669797DEDE", "; c #6A6A9999E0E0", ": c #6B6B9A9AE0E0", "> c #6F6F9C9CE1E1", ", c #6F6F9D9DE1E1", "< c #73739F9FE3E3", "1 c #7777A3A3E4E4", "2 c #7A7AA4A4E2E2", "3 c #7A7AA5A5E5E5", "4 c #7B7BA6A6E5E5", "5 c #7E7EA8A8E7E7", "6 c #B1B100000000", "7 c #B5B500000000", "8 c #B9B900000000", "9 c #BBBB00000000", "0 c #BDBD00000000", "q c #BFBF00000000", "w c #C3C300000000", "e c #C5C500000000", "r c #C9C900000000", "t c #CBCB00000000", "y c #CFCF00000000", "u c #D1D100000000", "i c #D5D500000000", "p c #D7D700000000", "a c #D9D900000000", "s c #DBDB00000000", "d c #DDDD00000000", "f c #DADA0E0E0B0B", "g c #DCDC11110E0E", "h c #DCDC12121010", "j c #DDDD16161313", "k c #DDDD17171414", "l c #DFDF1B1B1919", "z c #DFDF1C1C1919", "x c #DEDE2E2E2C2C", "c c #E1E100000000", "v c #E0E021211E1E", "b c #E0E021211F1F", "n c #E1E126262323", "m c #E2E227272424", "M c #E2E229292626", "N c #E2E22B2B2929", "B c #E2E22C2C2A2A", "V c #E4E42E2E2B2B", "C c #E4E42E2E2C2C", "Z c #E0E031312F2F", "A c #E4E430302E2E", "S c #E4E431312F2F", "D c #E0E034343232", "F c #E0E035353232", "G c #E2E237373535", "H c #E5E534343131", "J c #E6E637373434", "K c #E7E739393636", "L c #E7E73A3A3737", "P c #E2E23B3B3939", "I c #E8E83E3E3C3C", "U c #E8E83F3F3D3D", "Y c #E4E440403D3D", "T c #E4E444444242", "R c #E6E646464444", "E c #E6E649494646", "W c #E7E74B4B4949", "Q c #E7E74C4C4B4B", "! c #E9E943434242", "~ c #E9E944444242", "^ c #EAEA46464444", "/ c #EAEA49494747", "( c #EBEB49494747", ") c #EBEB4B4B4949", "_ c #EBEB4E4E4B4B", "` c #EBEB4E4E4C4C", "' c #E8E850504E4E", "] c #E9E955555353", "[ c #ECEC52525151", "{ c #EBEB5A5A5757", "} c #ECEC5E5E5C5C", "| c #ECEC5F5F5D5D", " . c #EFEF5D5D5C5C", ".. c #F0F061615F5F", "X. c #EDED63636060", "o. c #EDED64646262", "O. c #EEEE67676565", "+. c #EEEE68686666", "@. c #EFEF6B6B6969", "#. c #EFEF6D6D6A6A", "$. c #EFEF6F6F6D6D", "%. c #F0F072727171", "&. c #F2F27A7A7979", "*. c #F2F27D7D7A7A", "=. c #F2F27D7D7B7B", "-. c #9292B6B6EAEA", ";. c #9595B9B9EBEB", ":. c gray89", ">. c #E7E7E7E7E7E7", ",. c gray93", "<. c #EFEFEFEFEFEF", "1. c gray95", "2. c #F3F3F3F3F3F3", "3. c #F4F4F4F4F4F4", "4. c gray96", "5. c #F6F6F6F6F6F6", "6. c gray97", "7. c #F8F8F8F8F8F8", "8. c #F9F9F9F9F9F9", "9. c gray98", "0. c #FBFBFBFBFBFB", "q. c #FBFBFCFCFBFB", "w. c gray99", "e. c #FDFDFDFDFDFD", "r. c #FEFEFEFEFEFE", "t. c gray100", "y. c None", /* pixels */ "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "c c c t.O t.d s s s p p u u r r ", "c =.=.t.;.t.%.$.@.+.X.| { ] ' e ", "c =.| t.5 0.[ _ ( ~ Y J H C W w ", "c &. .t.2 t.) R ! I J H B M R q ", "t.t.t.0.1 t.0.0.0.0.0.4.4.4.4.>.", "o -.2 1 < : : = & $ $ # @ + * . ", "q.t.t.0.: 0.0.6.5.5.4.4.2.1.3.:.", "s #.( 0.: 0.J H N m v l k g F 7 ", "s O.~ 0.& 0.C N m v l j g f Z 6 ", "p X.| 0.2 0.W E T Y P G F Z x 6 ", "u u y <.X ,.w q q 9 9 7 7 6 6 6 ", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y." }; springlobby-0.169/src/images/flags/NP.xpm0000600000176000000410000000343712105760300021621 0ustar buildbotwww-data00000000000000/* XPM */ static const char *NP_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 67 1", " c black", ". c #060609093636", "X c #07070A0A3737", "o c #07070B0B3838", "O c #08080C0C3838", "+ c #08080D0D3A3A", "@ c #09090E0E3C3C", "# c #0A0A0F0F3E3E", "$ c #161612123636", "% c #1A1A15153E3E", "& c #0A0A10104444", "* c #0B0B10104747", "= c #0B0B11114949", "- c #0E0E16165D5D", "; c #1E1E18185555", ": c #11111A1A7272", "> c #11111B1B7575", ", c #12121C1C7878", "< c #13131D1D7F7F", "1 c #18181E1E7F7F", "2 c #22221C1C6C6C", "3 c #1A1A24249D9D", "4 c #1D1D2D2D9696", "5 c #1C1C2A2AB7B7", "6 c #27271F1F8383", "7 c #2A2A22229999", "8 c #2E2E2525ABAB", "9 c #30302727B9B9", "0 c #1D1D2D2DC9C9", "q c #1F1F3030D6D6", "w c #33332929C6C6", "e c #32322929C9C9", "r c #2C2C4444B4B4", "t c #ABAB00000000", "y c #B3B300000000", "u c #C1C100000000", "i c #C2C200000000", "p c #C7C700000000", "a c #D0D000000000", "s c #D8D800000000", "d c #DCDC00000000", "f c #DDDD00000000", "g c #DEDE00000000", "h c #E7E701010101", "j c #ECEC00000000", "k c #F0F000000000", "l c #DFDF4B4B4B4B", "z c #E3E352525252", "x c #E4E457575757", "c c #E4E45D5D5D5D", "v c #E7E76D6D6D6D", "b c #EAEA7D7D7D7D", "n c #EAEA82828282", "m c #ECEC88888888", "M c #F2F2AEAEAEAE", "N c #F6F6D3D3D3D3", "B c #F9F9DBDBDBDB", "V c #F9F9DCDCDCDC", "C c #F9F9DDDDDDDD", "Z c #F9F9DFDFDFDF", "A c #F9F9E0E0E0E0", "S c #FAFAE4E4E4E4", "D c #FAFAE6E6E6E6", "F c #FBFBEAEAEAEA", "G c #FBFBEBEBEBEB", "H c #FCFCF0F0F0F0", "J c None", /* pixels */ "JJJJJJJJJJJJJJJJ", "JJJJJJJJJJJJJJJJ", "JJJJJJJJJJJJJJJJ", "JJJJeqqJJJJJJJJJ", "JJJJwkh0JJJJJJJJ", "JJJJ9jSN5JJJJJJJ", "JJJJ8HCBS3JJJJJJ", "JJJJ7MGGfa1JJJJJ", "JJJJ6ffr46,:JJJJ", "JJJJ2smn>JJJJJJJ", "JJJJ;bZCl-JJJJJJ", "JJJJ%vCCct*JJJJJ", "JJJJ$pxziit+JJJJ", "JJJJ**#+++o..JJJ", "JJJJJJJJJJJJJJJJ", "JJJJJJJJJJJJJJJJ" }; springlobby-0.169/src/images/flags/NR.xpm0000600000176000000410000001006512105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char *NR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 158 2", " c black", ". c #000000000101", "X c #000000000303", "o c #000000000707", "O c #000000000D0D", "+ c #000000001313", "@ c #000000001919", "# c #000000001B1B", "$ c #000000002121", "% c #000000002323", "& c #000000002727", "* c #000000002D2D", "= c #000000002F2F", "- c #000000003333", "; c #000000003535", ": c #000000003939", "> c #000000003B3B", ", c #000000003F3F", "< c #000000004141", "1 c #000000004747", "2 c #000000004B4B", "3 c #000000004D4D", "4 c #000003035151", "5 c #000005055151", "6 c #000009095555", "7 c #00000D0D5959", "8 c #000013135D5D", "9 c #000013135F5F", "0 c #000015155F5F", "q c #000019195F5F", "w c #00001D1D5B5B", "e c #101045457A7A", "r c #131347477D7D", "t c #141448487C7C", "y c #19194B4B7F7F", "u c #1C1C4D4D7F7F", "i c #18184B4B8080", "p c #1D1D4F4F8383", "a c #1E1E50508282", "s c #212151518282", "d c #222253538686", "f c #242454548585", "g c #262656568585", "h c #282857578585", "j c #282858588989", "k c #282858588A8A", "l c #2A2A5A5A8989", "z c #2A2A5A5A8B8B", "x c #2D2D5B5B8989", "c c #2D2D5C5C8C8C", "v c #2D2D5C5C8D8D", "b c #31315D5D8A8A", "n c #30305E5E8C8C", "m c #30305E5E8E8E", "M c #31315F5F8E8E", "N c #32325F5F8F8F", "B c #333360608C8C", "V c #343460608D8D", "C c #353563638F8F", "Z c #363662628F8F", "A c #323261619191", "S c #353562629292", "D c #363662629090", "F c #363663639191", "G c #373763639292", "H c #373764649090", "J c #3A3A65659191", "K c #3B3B66669292", "L c #3B3B66669393", "P c #3B3B67679595", "I c #3C3C66669090", "U c #3D3D68689393", "Y c #3C3C68689595", "T c #3E3E68689494", "R c #40406B6B9696", "E c #42426B6B9696", "W c #42426D6D9797", "Q c #46466F6F9696", "! c #40406B6B9898", "~ c #41416C6C9898", "^ c #43436E6E9A9A", "/ c #46466F6F9999", "( c #45456F6F9C9C", ") c #464670709999", "_ c #464670709B9B", "` c #474770709A9A", "' c #484870709A9A", "] c #4A4A72729C9C", "[ c #4A4A73739F9F", "{ c #4B4B74749E9E", "} c #4C4C74749D9D", "| c #4D4D75759D9D", " . c #4F4F76769E9E", ".. c #535379799F9F", "X. c #4E4E7777A1A1", "o. c #50507878A1A1", "O. c #52527979A0A0", "+. c #53537979A0A0", "@. c #54547B7BA0A0", "#. c #55557B7BA3A3", "$. c #54547A7AA4A4", "%. c #56567C7CA2A2", "&. c #57577D7DA3A3", "*. c #5A5A7E7EA2A2", "=. c #58587E7EA6A6", "-. c #59597F7FA6A6", ";. c #5E5E8282A3A3", ":. c #5C5C8080A6A6", ">. c #5B5B8181A9A9", ",. c #5D5D8282A8A8", "<. c #5F5F8484ABAB", "1. c #62628484A6A6", "2. c #60608484A9A9", "3. c #61618585A9A9", "4. c #60608585ABAB", "5. c #62628484A9A9", "6. c #63638787ACAC", "7. c #65658787AAAA", "8. c #65658787ACAC", "9. c #65658888ABAB", "0. c #69698B8BAEAE", "q. c #6A6A8B8BAEAE", "w. c #6D6D8F8FB0B0", "e. c #6E6E8F8FB1B1", "r. c #70709191B2B2", "t. c #73739494B3B3", "y. c #76769494B3B3", "u. c #74749494B4B4", "i. c #77779696B6B6", "p. c #7E7E9B9BB6B6", "a. c #7A7A9999B9B9", "s. c #7B7B9999BABA", "d. c #7C7C9A9AB9B9", "f. c #7E7E9C9CBABA", "g. c #7E7E9D9DBBBB", "h. c #BBBB81810000", "j. c #DFDFB5B51D1D", "k. c #DEDEC1C15858", "l. c #E0E0C3C35C5C", "z. c #E1E1C5C56060", "x. c #E3E3C7C76565", "c. c #E4E4C9C96969", "v. c #E6E6CBCB6D6D", "b. c #E2E2C9C97070", "n. c #E7E7CDCD7272", "m. c #E8E8CFCF7676", "M. c #E9E9D1D17A7A", "N. c #E8E8D1D17D7D", "B. c #8F8FA8A8BFBF", "V. c #9393ABABC4C4", "C. c #B8B8C7C7D6D6", "Z. c #E8E8D3D38080", "A. c #ECECD6D68484", "S. c #F1F1DDDD9A9A", "D. c #DBDBE3E3ECEC", "F. c #E4E4E8E8EEEE", "G. c #FBFBFBFBFBFB", "H. c None", /* pixels */ "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "q 0 0 0 9 7 6 4 2 1 < > ; = & % ", "0 g.g.d.s.i.i.e.w.0.7.4.:.#.o.@ ", "0 g.6.4.:.=.#.o.{ ` ~ Y F M | + ", "9 s.<.>.=.$.X.[ ( T P F M z ] O ", "w p.1.;.*...| ` ~ Y H B x h Q ", "j.S.A.N.N.M.m.n.v.c.x.z.l.k.v.h.", "5 t.*.B.+.` E L H B z g s p K ", "3 e.V.G.D.~ G A v k d a t r F ", "1 q.4.F.C.Y M x k f a t t e N ", ", 7.4.y.7.+. .[ ' E Y K K N b ", "> - = & % @ + O o ", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H." }; springlobby-0.169/src/images/flags/NU.xpm0000600000176000000410000000760512105760300021627 0ustar buildbotwww-data00000000000000/* XPM */ static const char *NU_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 150 2", " c black", ". c #36363131B1B1", "X c #6E6E6464B4B4", "o c #56565656CACA", "O c #57577575EBEB", "+ c #5F5F7D7DF1F1", "@ c #67677171D7D7", "# c #65657676D4D4", "$ c #6F6F7777DFDF", "% c #73737373D7D7", "& c #7F7F8585DEDE", "* c #7F7F8B8BE9E9", "= c #71718484F5F5", "- c #DFDF59595757", "; c #E6E657575A5A", ": c #F1F149494D4D", "> c #F9F94D4D4343", ", c #F5F550504C4C", "< c #FDFD53534545", "1 c #E2E25C5C6868", "2 c #EDED5F5F6767", "3 c #FDFD77776F6F", "4 c #83837A7AC9C9", "5 c #FDFD82827E7E", "6 c #DFDFC0C03333", "7 c #DFDFC1C13434", "8 c #DFDFC1C13535", "9 c #DFDFC2C23636", "0 c #DFDFC3C33737", "q c #E1E1C5C53838", "w c #E4E4C8C83B3B", "e c #E4E4C8C83C3C", "r c #E6E6CACA3E3E", "t c #E6E6CACA3F3F", "y c #E6E6DCDC3C3C", "u c #E6E6DCDC3D3D", "i c #E7E7DEDE3F3F", "p c #E9E9DFDF3C3C", "a c #EAEAE0E03E3E", "s c #EAEAE1E13F3F", "d c #E8E8CDCD4141", "f c #E8E8CDCD4242", "g c #E8E8CECE4343", "h c #E8E8CECE4444", "j c #E7E7DFDF4040", "k c #E7E7DFDF4141", "l c #E8E8D0D04646", "z c #EAEAD1D14646", "x c #EAEAD3D34949", "c c #EBEBD3D34949", "v c #ECECD5D54C4C", "b c #EDEDD5D54D4D", "n c #EFEFD6D64F4F", "m c #EFEFD7D75050", "M c #EFEFD6D65454", "N c #EFEFD9D95555", "B c #F0F0D9D95252", "V c #F0F0D9D95656", "C c #F2F2DCDC5555", "Z c #F3F3DBDB5A5A", "A c #F3F3DBDB5B5B", "S c #F4F4DFDF5858", "D c #FDFDCBCB6060", "F c #FEFED3D36969", "G c #FBFBDADA6969", "H c #FCFCDFDF7171", "J c #E7E7E0E04141", "K c #E6E6E2E24949", "L c #E8E8E1E14343", "P c #E9E9E1E14343", "I c #EBEBE2E24141", "U c #E9E9E1E14444", "Y c #EBEBE4E44646", "T c #EBEBE4E44747", "R c #ECECE4E44343", "E c #ECECE4E44444", "W c #EDEDE6E64747", "Q c #EEEEE6E64747", "! c #ECECE5E54848", "~ c #ECECE6E64949", "^ c #ECECE6E64A4A", "/ c #EDEDE7E74A4A", "( c #EEEEE7E74949", ") c #EFEFE7E74949", "_ c #EFEFE6E64E4E", "` c #EEEEE8E84B4B", "' c #EEEEE8E84C4C", "] c #EEEEE9E94C4C", "[ c #EEEEE9E94D4D", "{ c #EFEFEAEA4D4D", "} c #EFEFEAEA4E4E", "| c #EFEFEAEA4F4F", " . c #F0F0EAEA4D4D", ".. c #F2F2EBEB4D4D", "X. c #F2F2ECEC4F4F", "o. c #F6F6E2E25B5B", "O. c #F1F1E9E95353", "+. c #F0F0EBEB5050", "@. c #F1F1ECEC5151", "#. c #F2F2ECEC5050", "$. c #F2F2EDED5252", "%. c #F3F3EEEE5353", "&. c #F2F2EFEF5757", "*. c #F3F3EFEF5656", "=. c #F4F4EFEF5353", "-. c #F4F4EBEB5858", ";. c #F5F5F0F05555", ":. c #F4F4F0F05757", ">. c #F6F6F1F15555", ",. c #F6F6F1F15757", "<. c #F4F4F1F15858", "1. c #F5F5F2F25959", "2. c #F5F5F3F35B5B", "3. c #F6F6F2F25858", "4. c #F6F6F3F35B5B", "5. c #FDFDF3F35252", "6. c #F8F8F4F45A5A", "7. c #F8F8F4F45B5B", "8. c #F9F9F6F65D5D", "9. c #F8F8F6F65E5E", "0. c #FBFBF8F86060", "q. c #FBFBF9F96161", "w. c #FCFCFAFA6363", "e. c #FEFEFAFA7C7C", "r. c #83838383DFDF", "t. c #90908B8BD9D9", "y. c #82829494EBEB", "u. c #9D9DA9A9EEEE", "i. c #BDBDCACAF7F7", "p. c #EFEF95959C9C", "a. c #FDFD95958F8F", "s. c #FEFE96969494", "d. c #F0F0A2A2A8A8", "f. c #FEFEA4A4A0A0", "g. c #FEFEABABA9A9", "h. c #FBFBB4B4B3B3", "j. c #C7C7B5B5DEDE", "k. c #FEFEC0C0BEBE", "l. c #FEFEE8E88080", "z. c #FEFEEAEA8383", "x. c #DEDED1D1E8E8", "c. c #D6D6D3D3F2F2", "v. c #D5D5DFDFFBFB", "b. c #D9D9E2E2FCFC", "n. c #FDFDC6C6C5C5", "m. c #FBFBD3D3D6D6", "M. c #FCFCD0D0D3D3", "N. c #FFFFD8D8D7D7", "B. c #E5E5E1E1F5F5", "V. c None", /* pixels */ "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "% 3 r.* < $ @ < . N o.S C V m b ", "+ b.N.B.e.c.n.i.= *.8.3.3.=.$.x ", "2 m.l.g.F s.G d.1 -.*.$.| | $.l ", ": M.l.s.D 5 G p.; O.$.| | Q .g ", "O v.k.x.5.j.h.u.# K | | ^ T Q g ", "o f.t.y., & 4 - X _ | ^ T U W t ", "A w.9.2.3.3.$.$.| / Q T J J I t ", "A w.2.3.<.$...../ ^ T J i i J q ", "V 9.:.:.*.+.` ` Q J k i i y a 9 ", "V 9.6.=.>.>.....) Q W J a a p 6 ", "M C B B v v l g t r w q 9 9 6 6 ", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V." }; springlobby-0.169/src/images/flags/NZ.xpm0000600000176000000410000001027112105760300021625 0ustar buildbotwww-data00000000000000/* XPM */ static const char *NZ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 164 2", " c black", ". c #000000000101", "X c #000000000303", "o c #000000000707", "O c #000000000909", "+ c #000000000B0B", "@ c #000000000F0F", "# c #000000001111", "$ c #000000001515", "% c #000000001717", "& c #000000001919", "* c #000000001D1D", "= c #000000001F1F", "- c #000000002323", "; c #000000002525", ": c #000000002929", "> c #000000002D2D", ", c #000000003333", "< c #000000003939", "1 c #000000003D3D", "2 c #000000003F3F", "3 c #000000004545", "4 c #000000004747", "5 c #000000004D4D", "6 c #000000004F4F", "7 c #000000005151", "8 c #000000005353", "9 c #000000005555", "0 c #000000005959", "q c #000000005D5D", "w c #000000005F5F", "e c #000000006161", "r c #000000006767", "t c #2D2D17176B6B", "y c #7F7F15153B3B", "u c #5D5D23235D5D", "i c #65651F1F5353", "p c #7F7F23234949", "a c #6E6E36366363", "s c #75753D3D6A6A", "d c #797942426E6E", "f c #101029298686", "g c #14142E2E8989", "h c #181831318A8A", "j c #191931318B8B", "k c #1E1E35358E8E", "l c #1F1F36368E8E", "z c #1F1F37378E8E", "x c #23233A3A9191", "c c #24243B3B9090", "v c #24243B3B9191", "b c #25253C3C9292", "n c #29293F3F9494", "m c #2A2A40409494", "M c #2B2B41419595", "N c #2C2C41419393", "B c #2C2C42429494", "V c #2C2C43439696", "C c #2F2F44449494", "Z c #2E2E45459797", "A c #2F2F45459797", "S c #2F2F45459898", "D c #333347479797", "F c #35354A4A9999", "G c #34344A4A9A9A", "H c #34344A4A9B9B", "J c #36364B4B9999", "K c #37374C4C9999", "L c #37374C4C9B9B", "P c #39394D4D9A9A", "I c #3A3A4F4F9D9D", "U c #3B3B4F4F9C9C", "Y c #3A3A4F4F9E9E", "T c #3B3B50509C9C", "R c #3D3D51519D9D", "E c #3C3C51519F9F", "W c #3F3F5454A1A1", "Q c #464646468E8E", "! c #434352529999", "~ c #424255559F9F", "^ c #4B4B55559B9B", "/ c #535353539A9A", "( c #40405454A1A1", ") c #40405555A0A0", "_ c #42425656A2A2", "` c #44445757A2A2", "' c #46465A5AA2A2", "] c #44445858A4A4", "[ c #45455959A4A4", "{ c #48485A5AA1A1", "} c #4B4B5B5BA3A3", "| c #49495D5DA4A4", " . c #49495E5EA7A7", ".. c #4B4B5E5EA5A5", "X. c #4E4E6161A8A8", "o. c #4F4F6161A9A9", "O. c #50506262A8A8", "+. c #53536565A9A9", "@. c #54546666AAAA", "#. c #58586A6AADAD", "$. c #5D5D6F6FB0B0", "%. c #6B6B61619999", "&. c #7B7B63639595", "*. c #62626464A1A1", "=. c #60606E6EADAD", "-. c #61617171B1B1", ";. c #61617272B3B3", ":. c #65657575B3B3", ">. c #66667676B4B4", ",. c #6A6A7A7AB5B5", "<. c #6A6A7A7AB7B7", "1. c #6F6F7F7FB9B9", "2. c #858517173D3D", "3. c #80804D4D7676", "4. c #898953537878", "5. c #888856567F7F", "6. c #8E8E59597D7D", "7. c #A8A848485B5B", "8. c #B9B946465050", "9. c #AEAE52526565", "0. c #AFAF5F5F7979", "q. c #B1B159596D6D", "w. c #B6B662627575", "e. c #CFCF19191919", "r. c #C3C360606A6A", "t. c #C8C866667070", "y. c #D7D76E6E7272", "u. c #E4E46B6B6A6A", "i. c #E5E574747272", "p. c #E1E177777878", "a. c #E9E97C7C7A7A", "s. c #80805E5E8C8C", "d. c #8F8F5F5F8686", "f. c #94945D5D8080", "g. c #818162629090", "h. c #919161618585", "j. c #929276769C9C", "k. c #989879799E9E", "l. c #88887C7CA9A9", "z. c #A4A47B7B9A9A", "x. c #A8A873739090", "c. c #C3C371718181", "v. c #97978787AFAF", "b. c #93939C9CC6C6", "n. c #9A9A9C9CC3C3", "m. c #C3C382829393", "M. c #C1C183839595", "N. c #D5D589899191", "B. c #D8D8A1A1AAAA", "V. c #D8D8AAAAB4B4", "C. c #D9D9B2B2BABA", "Z. c #E0E082828484", "A. c #E2E287878989", "S. c #EBEB85858282", "D. c #E7E794949595", "F. c #E2E2B8B8BEBE", "G. c #F1F1A8A8A6A6", "H. c #F1F1ACACA9A9", "J. c #D8D8BABAC5C5", "K. c #E3E3C4C4CCCC", "L. c #E4E4C0C0C8C8", "P. c #E6E6CFCFD7D7", "I. c #E0E0D4D4DFDF", "U. c None", /* pixels */ "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "c.&.r y 2.9 i 0.w 9 7 5 4 1 < 1 ", "t L.I.V.B.J.P.n.<.:.$.z.=.+.X.: ", "e.D.S.i.u.a.p.y.| ] f.r.f.B | ; ", "p F.G.Z.A.H.N.x.] Y L d.B 4.{ = ", "%.K.v.M.m.b.C.k.W w.^ M 3.9.h.& ", "u l./ g.&.Q *.j.F r.q.b z d R $ ", "e 1.O. .~ _ U F S n v z h g F @ ", "w <. .[ ~ U F S n v k h s f D O ", "0 >.] W U F S n x k h 7.8.a D ", "5 $.-.#.@.O.| ' _ R P ! 6.C M ", "9 4 3 < , > : - = $ # @ o O ", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U." }; springlobby-0.169/src/images/flags/OM.xpm0000600000176000000410000000702212105760300021611 0ustar buildbotwww-data00000000000000/* XPM */ static const char *OM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 136 2", " c black", ". c #00002D2D0000", "X c #000031310000", "o c #000033330000", "O c #000037370000", "+ c #00003D3D0000", "@ c #00003F3F0000", "# c #000041410000", "$ c #00004B4B0000", "% c #00004F4F0000", "& c #000055550000", "* c #0B0B9C9C0B0B", "= c #0F0F9E9E0E0E", "- c #10109E9E1010", "; c #1313A0A01313", ": c #1414A1A11414", "> c #1818A2A21919", ", c #1919A3A31919", "< c #1E1EA5A51E1E", "1 c #1F1FA5A51F1F", "2 c #2323A8A82323", "3 c #2424A8A82424", "4 c #2929AAAA2929", "5 c #2A2AABAB2A2A", "6 c #2C2CA9A92C2C", "7 c #2F2FA9A92F2F", "8 c #2E2EADAD2E2E", "9 c #2F2FADAD2F2F", "0 c #3232ABAB3232", "q c #3333ACAC3232", "w c #3535AEAE3535", "e c #3939AFAF3939", "r c #3434B0B03434", "t c #3A3AB3B33A3A", "y c #3D3DB1B13D3D", "u c #4242B3B34242", "i c #4646B5B54646", "p c #4B4BB8B84B4B", "a c #5050BABA5050", "s c #919100000000", "d c #939300000000", "f c #9F9F00000000", "g c #A3A300000000", "h c #A5A500000000", "j c #A9A900000000", "k c #ADAD00000000", "l c #B1B100000000", "z c #B5B500000000", "x c #B9B900000000", "c c #BDBD00000000", "v c #BFBF00000000", "b c #CACA14141414", "n c #C9C91A1A1A1A", "m c #CBCB19191919", "M c #CBCB1F1F1F1F", "N c #CDCD1F1F1F1F", "B c #CACA20202020", "V c #CCCC25252525", "C c #CFCF24242424", "Z c #CDCD2B2B2B2B", "A c #CECE2B2B2B2B", "S c #CFCF30303030", "D c #D1D12A2A2A2A", "F c #D3D32F2F2F2F", "G c #D0D030303030", "H c #D1D136363636", "J c #D2D236363636", "K c #D4D435353535", "L c #D0D03B3B3B3B", "P c #D3D33A3A3A3A", "I c #D2D23B3B3C3C", "U c #D1D13F3F3F3F", "Y c #D4D43B3B3B3B", "T c #D6D63B3B3A3A", "R c #D4D43F3F3F3F", "E c #D5D53F3F3F3F", "W c #D4D441414141", "Q c #D6D640404040", "! c #D6D644444444", "~ c #D6D645454545", "^ c #D6D646464646", "/ c #D7D746464646", "( c #D7D74B4B4B4B", ") c #D8D840404040", "_ c #D8D849494949", "` c #D8D84A4A4949", "' c #D8D84A4A4B4B", "] c #DADA4F4F4F4F", "[ c #DADA4F4F5050", "{ c #DBDB53535353", "} c #D8D854545555", "| c #DBDB54545454", " . c #DADA58585858", ".. c #DBDB5D5D5D5D", "X. c #DCDC58585858", "o. c #DDDD59595959", "O. c #DDDD61616262", "+. c #DEDE66666666", "@. c #E0E06A6A6A6A", "#. c #E1E16F6F6F6F", "$. c #E2E272727373", "%. c #E3E376767676", "&. c #E3E377777777", "*. c #EEEEB0B0B0B0", "=. c #F2F2BEBEBEBE", "-. c #D7D7D7D7D7D7", ";. c gray85", ":. c #DDDDDDDDDDDD", ">. c #DFDFDFDFDFDF", ",. c #F7F7D7D7D7D7", "<. c #E1E1E1E1E1E1", "1. c gray89", "2. c gray90", "3. c #E7E7E7E7E7E7", "4. c #E9E9E9E9E9E9", "5. c gray92", "6. c gray93", "7. c #EFEFEFEFEFEF", "8. c #EFEFEFEFF1F1", "9. c #F9F9E1E1E1E1", "0. c gray96", "q. c #F6F6F6F6F6F6", "w. c gray97", "e. c #FCFCF0F0F0F0", "r. c #FCFCF7F7F7F7", "t. c #F8F8F8F8F8F8", "y. c #F9F9F9F9F9F9", "u. c gray98", "i. c #FBFBFBFBFBFB", "p. c #FDFDF9F9F9F9", "a. c #FEFEFAFAFAFA", "s. c gray99", "d. c #FDFDFDFDFDFD", "f. c #FDFDFDFDFEFE", "g. c #FEFEFEFEFEFE", "h. c None", /* pixels */ "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "v v v v v 8.6.6.6.6.4.3.3.<.<.>.", "v e.=.p.%.g.g.s.s.s.s.s.u.u.q.>.", "v 9.p.,.X.g.g.s.u.s.w.w.q.q.q.-.", "v r.*.p.| g.g.u.u.u.u.w.q.q.q.-.", "v %.X.| [ ( ! W U S A Z V B U s ", "v $.{ ] ' / E Y H G D V M m L s ", "z #.] ` / ) T H G D V N m b H s ", "z @.' ! E t r 9 5 3 1 , : - q o ", "z +.! E P w 7 4 3 1 , ; = * 7 o ", "l O... .| a p i u y e w 0 7 7 . ", "k j g g f & & $ # + + O o o . . ", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h." }; springlobby-0.169/src/images/flags/PA.xpm0000600000176000000410000000671512105760300021606 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PA_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 133 2", " c black", ". c #00001717DDDD", "X c #00001D1DDFDF", "o c #00002525E1E1", "O c #00002B2BE3E3", "+ c #00003131E5E5", "@ c #00003737E9E9", "# c #00003F3FEBEB", "$ c #00004545EDED", "% c #00004B4BEFEF", "& c #00004F4FF1F1", "* c #00005555F1F1", "= c #00005B5BF3F3", "- c #1B1B7F7FF5F5", "; c #45459292F0F0", ": c #49499595F1F1", "> c #4A4A9696F1F1", ", c #4C4C9696F3F3", "< c #4F4F9999F3F3", "1 c #53539C9CF4F4", "2 c #54549C9CF4F4", "3 c #54549D9DF4F4", "4 c #58589F9FF5F5", "5 c #59599F9FF5F5", "6 c #5959A0A0F5F5", "7 c #5E5EA1A1F2F2", "8 c #5D5DA2A2F6F6", "9 c #5E5EA3A3F6F6", "0 c #6262A4A4F2F2", "q c #6262A5A5F7F7", "w c #6666A6A6F3F3", "e c #6767A8A8F8F8", "r c #6A6AA9A9F5F5", "t c #6F6FABABF6F6", "y c #7373AEAEF7F7", "u c #7878ADADF2F2", "i c #7777B1B1F7F7", "p c #7878B1B1F6F6", "a c #7C7CB3B3F7F7", "s c #7A7AB3B3F8F8", "d c #7F7FB6B6F9F9", "f c #D1D100000000", "g c #D5D500000000", "h c #D7D700000000", "j c #DBDB00000000", "k c #DDDD00000000", "l c #DFDF00000000", "z c #E1E100000000", "x c #E3E300000000", "c c #E7E700000000", "v c #E9E900000000", "b c #EBEB00000000", "n c #EDED00000000", "m c #E9E920202020", "M c #EBEB25252525", "N c #ECEC26262626", "B c #ECEC2B2B2B2B", "V c #EDED2B2B2B2B", "C c #EDED2C2C2C2C", "Z c #E8E832323131", "A c #EDED30303030", "S c #EEEE31313131", "D c #EFEF36363636", "F c #EFEF37373636", "G c #EFEF37373737", "H c #ECEC3F3F3F3F", "J c #F1F13B3B3C3C", "K c #F1F13C3C3C3C", "L c #F1F13C3C3D3D", "P c #EDED44444444", "I c #E9E949494949", "U c #EFEF49494949", "Y c #F2F242424242", "T c #F2F24A4A4A4A", "R c #F0F04E4E4E4E", "E c #F4F44F4F5050", "W c #F1F153535353", "Q c #F2F257575757", "! c #F3F35C5C5C5C", "~ c #EDED68686868", "^ c #EEEE6D6D6D6D", "/ c #EFEF71717171", "( c #EEEE7E7E7E7E", ") c #F4F460606060", "_ c #F5F565656565", "` c #F0F074747474", "' c #F7F770707070", "] c #F1F178787878", "[ c #F2F27D7D7E7E", "{ c #8080B6B6F7F7", "} c #8383B8B8F9F9", "| c #8484B8B8F8F8", " . c #8585B9B9FAFA", ".. c #8787BBBBF9F9", "X. c #9191C0C0FBFB", "o. c #9D9DC8C8FAFA", "O. c #B2B2D3D3FBFB", "+. c #BEBEDADAFBFB", "@. c #EDED83838383", "#. c #EEEE8C8C8C8C", "$. c #CBCBCBCBCBCB", "%. c #CFCFCDCDCDCD", "&. c gray81", "*. c gray82", "=. c LightGray", "-. c #D7D7D7D7D7D7", ";. c #EFEFC7C7C7C7", ":. c #F1F1CBCBCBCB", ">. c #F2F2D3D3D3D3", ",. c #F2F2D5D5D5D5", "<. c gray93", "1. c #EFEFEFEFEFEF", "2. c #E3E3EFEFFCFC", "3. c #EFEFEFEFF1F1", "4. c #E5E5F1F1FEFE", "5. c #EBEBF3F3FEFE", "6. c #EDEDF5F5FEFE", "7. c #F1F1F1F1F1F1", "8. c gray95", "9. c #F3F3F3F3F3F3", "0. c #F4F4F4F4F4F4", "q. c gray96", "w. c #F6F6F6F6F6F6", "e. c gray97", "r. c gray98", "t. c #FBFBFBFBFBFB", "y. c gray99", "u. c #FDFDFCFCFDFD", "i. c #FDFDFDFDFDFD", "p. c #FDFDFDFDFEFE", "a. c #FEFEFEFEFEFE", "s. c gray100", "d. c None", /* pixels */ "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.", "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.", "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.", "7.7.7.7.7.1.1.<.n b b c x x k k ", "7.s.s.6.6.s.s.t.' _ ) ! Q W R j ", "7.s.5...} 2.t.t.E Y H D S C U h ", "7.s.s.+.O.s.t.t.T J D S C N P h ", "7.s.s.t.s.t.t.t.J D A B N m H f ", "- o...} { a p u [ ] ` ^ ^ ~ ( h ", "= } e q 9 6 3 < w.w.w.0.0.7.w.*.", "* { q 8 6 3 , : w.w.0.#.@.9.7.&.", "& s 8 4 2 < : ; w.0.:.I Z ;.7.$.", "& y y y r w 0 7 w.w.w.,.>.7.9.$.", "$ # @ O O o X . -.*.*.&.%.$.$.$.", "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.", "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d." }; springlobby-0.169/src/images/flags/PE.xpm0000600000176000000410000000545112105760300021606 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PE_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 101 2", " c black", ". c #DDDD00000000", "X c #DFDF00000000", "o c #E1E100000000", "O c #E3E300000000", "+ c #E5E500000000", "@ c #E7E700000000", "# c #E9E900000000", "$ c #EBEB00000000", "% c #EDED00000000", "& c #EFEF00000000", "* c #F1F100000000", "= c #F3F300000000", "- c #F5F500000000", "; c #F7F700000000", ": c #F1F10B0B0B0B", "> c #F1F10F0F0E0E", ", c #F9F900000000", "< c #FBFB00000000", "1 c #FDFD00000000", "2 c red", "3 c #F2F210101010", "4 c #F2F213131313", "5 c #F2F214141414", "6 c #F3F319191919", "7 c #F3F31A1A1A1A", "8 c #F4F41F1F1F1F", "9 c #F4F420202020", "0 c #F5F525252525", "q c #F5F526262626", "w c #F2F22C2C2C2C", "e c #F2F22F2F2F2F", "r c #F6F62B2B2B2B", "t c #F6F62C2C2C2C", "y c #F2F232323232", "u c #F3F332323232", "i c #F3F335353535", "p c #F7F731313131", "a c #F4F436363636", "s c #F4F43B3B3B3B", "d c #F5F53F3F3F3F", "f c #F8F837373737", "g c #F9F93A3A3A3A", "h c #FAFA3F3F3F3F", "j c #F6F644444444", "k c #F7F749494949", "l c #F7F74E4E4E4E", "z c #FAFA44444444", "x c #FBFB45454545", "c c #FBFB49494949", "v c #FBFB4A4A4949", "b c #FCFC4A4A4B4B", "n c #FCFC4F4F4F4F", "m c #FDFD4F4F5050", "M c #F8F853535353", "N c #F9F954545555", "B c #F9F957575757", "V c #FDFD53535353", "C c #FDFD54545454", "Z c #F9F958585858", "A c #FAFA5C5C5C5C", "S c #FAFA5D5D5D5D", "D c #FEFE58585858", "F c #FEFE59595959", "G c #FEFE5C5C5C5C", "H c #FEFE5F5F5F5F", "J c #FBFB61616262", "K c #FCFC66666666", "L c #FCFC6A6A6A6A", "P c #FDFD6F6F6F6F", "I c #FEFE72727373", "U c #FEFE76767676", "Y c #FEFE77777777", "T c #FEFE79797979", "R c #FFFF7B7B7A7A", "E c #FFFF7B7B7B7B", "W c #E3E3C3C3C3C3", "Q c #E5E5C5C5C5C5", "! c #E7E7C7C7C7C7", "~ c #E9E9CBCBCBCB", "^ c #EBEBCDCDCDCD", "/ c #EDEDCFCFCFCF", "( c #F7F7DFDFDFDF", ") c #F9F9E1E1E1E1", "_ c #FBFBE3E3E3E3", "` c #FDFDE5E5E5E5", "' c #FDFDE7E7E7E7", "] c #F3F3F3F3F3F3", "[ c #F4F4F4F4F4F4", "{ c gray96", "} c #F6F6F6F6F6F6", "| c gray97", " . c #F8F8F8F8F8F8", ".. c #F9F9F9F9F9F9", "X. c gray98", "o. c #FBFBFBFBFBFB", "O. c gray99", "+. c #FDFDFDFDFDFD", "@. c #FDFDFDFDFEFE", "#. c #FEFEFEFEFEFE", "$. c None", /* pixels */ "$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.", "$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.", "$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.", "2 2 2 2 2 ` ` ` _ ) ( - = = % % ", "2 E E E U #.#.O.#.#...G B M l $ ", "2 E G G G #.#.O...o...f p t k $ ", "2 E G G V #.o.o.......e r q j + ", "2 U B V n o.o.........r q 9 d + ", "2 I V n b O.......} } 0 8 6 s O ", "2 P n b x ......} } } 8 6 3 a O ", ", L b z h ....} } } ] 6 5 3 i . ", ", K z h s ..| } } } ] 3 > : e . ", "- J S B M .. .| } } [ i u e e . ", "- - = % % / ^ ~ Q Q W O O . . . ", "$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.", "$.$.$.$.$.$.$.$.$.$.$.$.$.$.$.$." }; springlobby-0.169/src/images/flags/PF.xpm0000600000176000000410000000700312105760300021602 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PF_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 135 2", " c black", ". c #999900000000", "X c #9B9B00000000", "o c #9D9D00000000", "O c #9F9F00000000", "+ c #A3A300000000", "@ c #A5A500000000", "# c #A7A700000000", "$ c #A9A900000000", "% c #ADAD00000000", "& c #B1B100000000", "* c #B3B300000000", "= c #B5B500000000", "- c #B7B700000000", "; c #BBBB00000000", ": c #BFBF00000000", "> c #C1C100000000", ", c #C5C500000000", "< c #C7C700000000", "1 c #C9C900000000", "2 c #CBCB00000000", "3 c #CDCD00000000", "4 c #CFCF00000000", "5 c #CFCF0B0B0B0B", "6 c #D1D100000000", "7 c #D3D300000000", "8 c #D7D700000000", "9 c #D0D00F0F0E0E", "0 c #D2D213131313", "q c #D3D319191919", "w c #D5D51E1E1E1E", "e c #D7D723232323", "r c #D3D32C2C2C2C", "t c #D4D42F2F2F2F", "y c #D6D62F2F2F2F", "u c #D8D829292929", "i c #DADA2C2C2C2C", "p c #DADA2E2E2E2E", "a c #D5D532323232", "s c #D6D635353535", "d c #DBDB31313131", "f c #DCDC34343434", "g c #DDDD37373737", "h c #D8D839393939", "j c #D9D93D3D3D3D", "k c #DDDD3A3A3A3A", "l c #DFDF3C3C3D3D", "z c #DFDF3F3F3F3F", "x c #DBDB42424242", "c c #DDDD46464646", "v c #DDDD4B4B4B4B", "b c #DEDE49494949", "n c #DFDF4E4E4E4E", "m c #DEDE50505050", "M c #D0D069696161", "N c #E0E042424242", "B c #E0E044444444", "V c #E1E147474747", "C c #E2E24C4C4C4C", "Z c #E1E153535353", "A c #E0E054545555", "S c #E2E257575757", "D c #E4E451515151", "F c #E5E554545454", "G c #E2E258585858", "H c #E2E25D5D5D5D", "J c #E3E35C5C5C5C", "K c #E6E659595959", "L c #E6E65C5C5C5C", "P c #E7E75F5F5F5F", "I c #E3E368684848", "U c #E4E460606060", "Y c #E4E461616262", "T c #E6E665656565", "R c #E7E766666666", "E c #E6E669696969", "W c #E8E86D6D6D6D", "Q c #E8E870707171", "! c #E9E974747474", "~ c #EAEA77777777", "^ c #EBEB79797979", "/ c #EBEB7B7B7B7B", "( c #ECEC7B7B7A7A", ") c #E8E89B9B5151", "_ c #E8E8DEDE5959", "` c #EBEBDADA6262", "' c #EEEED4D47B7B", "] c #EBEBE9E96464", "[ c #EFEFEDED7070", "{ c #969682829696", "} c #999986869A9A", "| c #9F9FB1B1BFBF", " . c #BDBD91918282", ".. c #9292AFAFC2C2", "X. c #9090B4B4CCCC", "o. c #9393B6B6CECE", "O. c #EFEFE2E28282", "+. c #EFEFEEEE8A8A", "@. c #F3F3F3F39A9A", "#. c #DFDFDFDFDFDF", "$. c #CACADDDDEBEB", "%. c #D1D1E2E2EEEE", "&. c #F9F9F9F9C8C8", "*. c #F7F7F7F7DFDF", "=. c #FCFCFCFCD0D0", "-. c gray89", ";. c gray90", ":. c #E7E7E7E7E7E7", ">. c #E5E5EFEFECEC", ",. c gray91", "<. c #E9E9E9E9E9E9", "1. c #EBEBE9E9E9E9", "2. c #ECECF5F5F2F2", "3. c #FCFCFCFCE7E7", "4. c gray95", "5. c #F3F3F3F3F3F3", "6. c #F4F4F4F4F4F4", "7. c #F4F4F5F5F5F5", "8. c #F5F5F4F4F4F4", "9. c gray96", "0. c #F6F6F5F5F5F5", "q. c #F6F6F6F6F6F6", "w. c gray97", "e. c #F8F8F8F8F8F8", "r. c #F9F9F9F9F9F9", "t. c gray98", "y. c #FBFBFBFBFBFB", "u. c #FBFBFCFCFBFB", "i. c gray99", "p. c #FDFDFCFCFCFC", "a. c #FDFDFCFCFDFD", "s. c #FDFDFDFDFDFD", "d. c #FEFEFDFDFDFD", "f. c #FEFEFEFEFEFE", "g. c None", /* pixels */ "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "8 7 7 7 7 7 7 4 2 2 , , > : ; ; ", "7 / / / ! ! Q W E T U J G Z n * ", "7 ( P L L F F C V N l g d i b % ", "<.f.f.f.y.p.&.' O.&.w.w.q.6.q.:.", "<.f.f.f.p.3.[ I ) ] *.q.q.6.q.:.", ",.d.d.r.d.@.` M ._ +.q.6.5.q.;.", "<.d.d.d.d.5...} { ..>.6.4.4.5.-.", ",.r.d.r.r.r.%.o.X.$.6.5.4.4.5.#.", "2 R c z k f p u e w q 0 5 5 y X ", ", Y H G A m b c x j h s s t t . ", ", > : ; - - * % $ @ @ + O O X O ", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g." }; springlobby-0.169/src/images/flags/PG.xpm0000600000176000000410000000711412105760300021606 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PG_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 141 2", " c black", ". c #181819191919", "X c #1E1E1E1E1E1E", "o c #212113131313", "O c #232323232323", "+ c gray14", "@ c gray16", "# c #2A2A2A2A2A2A", "$ c gray18", "% c #2F2F2F2F2F2F", "& c #39392F2F2F2F", "* c #323232323232", "= c #343434343434", "- c #353535353535", "; c #393939393939", ": c gray24", "> c #4D4D00000000", ", c #54541F1F1F1F", "< c #6F6F00000000", "1 c #6B6B2F2F2F2F", "2 c #60603B3B3B3B", "3 c gray25", "4 c gray26", "5 c #444444444444", "6 c gray27", "7 c #464646464646", "8 c #46464B4B4B4B", "9 c #494949494949", "0 c #4B4B4A4A4B4B", "q c #4B4B4B4B4B4B", "w c #4C4C4C4C4C4C", "e c #505050505050", "r c gray33", "t c #585858585858", "y c gray36", "u c #5D5D5D5D5D5D", "i c #5B5B61616161", "p c #60605F5F5F5F", "a c #79795C5C5C5C", "s c #616161616262", "d c gray39", "f c gray40", "g c #6A6A6A6A6A6A", "h c #747474747474", "j c #767676767676", "k c #797979797979", "l c gray48", "z c #7B7B7B7B7A7A", "x c #97970F0F0E0E", "c c #98982A2A2A2A", "v c #9B9B46464646", "b c #9E9E5C5C5C5C", "n c #8D8D7B7B7B7B", "m c #CDCD19191919", "M c #DDDD00000000", "N c #DFDF00000000", "B c #CFCF36363636", "V c #D8D82C2C2C2C", "C c #E3E300000000", "Z c #E5E500000000", "A c #E7E700000000", "S c #E9E900000000", "D c #EBEB00000000", "F c #EDED00000000", "G c #EFEF00000000", "H c #F1F100000000", "J c #F3F300000000", "K c #F5F500000000", "L c #F7F700000000", "P c #F0F00B0B0B0B", "I c #F9F900000000", "U c #FBFB00000000", "Y c #FDFD00000000", "T c red", "R c #F2F210101010", "E c #F2F214141414", "W c #F2F217171414", "Q c #F4F41F1F1F1F", "! c #F1F124242424", "~ c #F5F52B2B2626", "^ c #F2F22F2F2F2F", "/ c #F6F62B2B2B2B", "( c #F6F62C2C2C2C", ") c #F3F332323232", "_ c #F7F730303030", "` c #F4F436363636", "' c #F4F43B3B3B3B", "] c #F5F53F3F3F3F", "[ c #F3F342421A1A", "{ c #F8F85E5E3636", "} c #F3F37A7A1919", "| c #F7F769693131", " . c #F9F969693C3C", ".. c #F5F576762525", "X. c #D2D251515151", "o. c #D8D87B7B7B7B", "O. c #F2F242424141", "+. c #F6F644444444", "@. c #F7F749494949", "#. c #F7F74E4E4E4E", "$. c #FBFB47474747", "%. c #FBFB4B4B4747", "&. c #FCFC4B4B4B4B", "*. c #FCFC4C4C4C4C", "=. c #F3F359595959", "-. c #F8F853535353", ";. c #F9F957575757", ":. c #FDFD51515151", ">. c #FDFD54545454", ",. c #FAFA63635C5C", "<. c #FCFC69696969", "1. c #FDFD6D6D6D6D", "2. c #FCFC73736565", "3. c #FDFD70707171", "4. c #FEFE74747474", "5. c #FEFE77777777", "6. c #FEFE79797979", "7. c #F5F584842525", "8. c #F4F491912020", "9. c #F7F790903030", "0. c #F4F4B6B61F1F", "q. c #F6F6AAAA2B2B", "w. c #F6F6BCBC2B2B", "e. c #F8F8BCBC3737", "r. c #FAFA86864242", "t. c #FAFA89894242", "y. c #FBFBADAD6060", "u. c #F9F9CACA3C3C", "i. c #F7F7DADA3131", "p. c #F9F9D3D33D3D", "a. c #F8F8DBDB3636", "s. c gray55", "d. c #909090909090", "f. c #9A9A9A9A9A9A", "g. c #9B9B9D9D9D9D", "h. c gray61", "j. c gray69", "k. c #B1B1B1B1B1B1", "l. c #BCBCBDBDBDBD", "z. c #C1C1C1C1C1C1", "x. c None", /* pixels */ "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "> A T T U T T T U U L L J J F F ", " n o.6.5.5.3.1.<.2.y.,.;.-.#.D ", " z s b =.:.:.*.%.r.p.e.| ( @.D ", " z y i a X.&.$.t.u.a.i.q.~ +.A ", " j r l.g.q v O. .{ 9.w...8.] A ", " z z.r q j.8 2 B _ / 7.0.[ ' D ", " h f.w 7 j 4 - & c ! Q } E ` A ", " g q 5 7 f.= $ # + , m W P ) M ", " f 5 j.s.= $ # O X . . x P ^ M ", " s u d.d e w 7 4 : ; - = 1 V M ", " < ", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x." }; springlobby-0.169/src/images/flags/PH.xpm0000600000176000000410000001002312105760300021600 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PH_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 158 2", " c black", ". c #000000003535", "X c #000000003B3B", "o c #000000004141", "O c #000000004747", "+ c #000000004D4D", "@ c #000000005353", "# c #000000005959", "$ c #000000005D5D", "% c #000000006363", "& c #000000006969", "* c #000000006D6D", "= c #000000007373", "- c #000000007575", "; c #000000007979", ": c #000000007D7D", "> c #000000007F7F", ", c #5F5F1A1A7373", "< c #63631F1F7777", "1 c #676725257B7B", "2 c #6C6C2B2B7E7E", "3 c #000000008181", "4 c #000000008D8D", "5 c #202020209F9F", "6 c #25252525A2A2", "7 c #26262626A2A2", "8 c #2B2B2B2BA5A5", "9 c #2C2C2C2CA6A6", "0 c #30303030A8A8", "q c #31313131A8A8", "w c #31313131A9A9", "e c #36363636ABAB", "r c #37373737ABAB", "t c #3B3B3B3BAEAE", "y c #3C3C3C3CAEAE", "u c #3D3D3C3CAEAE", "i c #3F3F3F3FADAD", "p c #707030308282", "a c #747436368585", "s c #75753B3B8888", "d c #44444444AFAF", "f c #41414141B0B0", "g c #42424141B0B0", "h c #42424242B1B1", "j c #47474747B3B3", "k c #47474747B4B4", "l c #49494949B1B1", "z c #4B4B4B4BB6B6", "x c #4C4C4C4CB6B6", "c c #4E4E4E4EB4B4", "v c #51515151B7B7", "b c #53535353B7B7", "n c #54545454B7B7", "m c #58585757B9B9", "M c #5C5C5C5CBBBB", "N c #5E5E5E5EBDBD", "B c #61616060BEBE", "V c #65656565C0C0", "C c #69696969C2C2", "Z c #6D6D6D6DC3C3", "A c #70707070C5C5", "S c #71717171C4C4", "D c #77777777C3C3", "F c #74747474C7C7", "G c #77777777C8C8", "H c #79797979C9C9", "J c #DDDD00000000", "K c #DFDF00000000", "L c #E1E100000000", "P c #E3E300000000", "I c #E5E500000000", "U c #E7E700000000", "Y c #E9E900000000", "T c #EBEB00000000", "R c #EDED00000000", "E c #EFEF00000000", "W c #F1F100000000", "Q c #F3F300000000", "! c #F1F10B0B0B0B", "~ c #F1F10F0F0E0E", "^ c #F2F210101010", "/ c #F2F213131313", "( c #F2F214141414", ") c #F3F319191919", "_ c #F4F41E1E1E1E", "` c #F4F41F1F1F1F", "' c #F5F523232323", "] c #F5F524242424", "[ c #F2F22C2C2C2C", "{ c #F2F22F2F2F2F", "} c #F6F629292929", "| c #F6F62A2A2A2A", " . c #F7F72E2E2E2E", ".. c #F7F72F2F2F2F", "X. c #F2F232323232", "o. c #F3F332323232", "O. c #F3F335353535", "+. c #F4F436363636", "@. c #F4F439393939", "#. c #F5F53D3D3D3D", "$. c #F8F834343434", "%. c #F8F835353535", "&. c #F6F642424242", "*. c #F7F746464646", "=. c #F7F74B4B4B4B", "-. c #F9F944444545", ";. c #F8F850505050", ":. c #F9F954545555", ">. c #F9F958585858", ",. c #F9F965656666", "<. c #F5F59B9B4949", "1. c #EFEFEFEF1A1A", "2. c #FFFFFFFF3737", "3. c #FDFDFDFD5353", "4. c #FCFCFCFC5D5D", "5. c #FAFAFAFA6B6B", "6. c #FEFEFEFE7373", "7. c #FCFCFCFC7777", "8. c #FDFDFDFD7E7E", "9. c #A6A68D8D9696", "0. c #ADADADAD9797", "q. c #9F9F9F9FDADA", "w. c #B2B2B2B2E2E2", "e. c #FAFA8F8F9191", "r. c #F9F995958D8D", "t. c #FAFAAAAAADAD", "y. c #FBFBFCFC8D8D", "u. c #FEFEFEFEB9B9", "i. c #D2D2D2D2E7E7", "p. c #FAFAD1D1CBCB", "a. c #EDEDEDEDD3D3", "s. c #FBFBEAEAC1C1", "d. c #FCFCFCFCC9C9", "f. c #FBFBFBFBD3D3", "g. c #FDFDFDFDD5D5", "h. c #FEFEFEFED8D8", "j. c #FEFEFEFEDCDC", "k. c #F1F1F1F1E8E8", "l. c #F5F5F5F5E8E8", "z. c #F7F7F7F7E9E9", "x. c #FBFBFBFBE3E3", "c. c #FEFEFEFEE7E7", "v. c #FBFBFBFBECEC", "b. c #FDFDFCFCEAEA", "n. c #F3F3F3F3F3F3", "m. c #F5F5F5F5F3F3", "M. c gray96", "N. c gray97", "B. c #F0F0F0F0F8F8", "V. c #FAFAF2F2F2F2", "C. c #FCFCFCFCF1F1", "Z. c #FEFEFEFEF5F5", "A. c #FBFBFBFBF9F9", "S. c gray98", "D. c gray99", "F. c #FCFCFCFCFEFE", "G. c gray100", "H. c None", /* pixels */ "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "0.4 3 3 3 : : - = * & % $ # @ + ", "2.a.q.G G F Z Z Z B B M m b c O ", "z.G.G.w.N b b x k h u r w 9 l o ", "N.Z.j.c.i.Z x k h u r w 8 7 d X ", "N.g.6.8.c.B.D h t r 0 8 7 5 i . ", "z.u.3.4.d.A.5.9.a p 2 1 < , s ", "n.g.7.y.v.V.r.%...} ] _ ) ( +.P ", "n.C.f.x.p.,.+. .} ] _ ) ( ^ o.K ", "k.D.A.t.-.$...} ' _ ) ( ~ ! { K ", "1.s.e.>.:.;.=.*.&.#.@.O.o.{ [ J ", "<.Q E E E E T T P P P P K K J J ", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H." }; springlobby-0.169/src/images/flags/PK.xpm0000600000176000000410000000745712105760300021624 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PK_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 147 2", " c black", ". c #000021210000", "X c #000023230000", "o c #000025250000", "O c #000029290000", "+ c #00002B2B0000", "@ c #00002D2D0000", "# c #00002F2F0000", "$ c #000033330000", "% c #000035350000", "& c #000039390000", "* c #00003B3B0000", "= c #00003F3F0000", "- c #000043430000", "; c #000045450000", ": c #000047470000", "> c #000049490000", ", c #000057570000", "< c #00005B5B0000", "1 c #000061610000", "2 c #000067670000", "3 c #00006B6B0000", "4 c #000071710000", "5 c #000073730000", "6 c #000077770000", "7 c #00007B7B0000", "8 c #00007D7D0000", "9 c #000089890000", "0 c #0B0B90900B0B", "q c #131393931313", "w c #151597971515", "e c #1A1A99991A1A", "r c #1F1F98981F1F", "t c #1E1E9A9A1E1E", "y c #20209A9A2020", "u c #24249A9A2424", "i c #26269E9E2626", "p c #2A2A9B9B2A2A", "a c #2C2C9F9F2C2C", "s c #2F2F9D9D2F2F", "d c #2A2AA1A12B2B", "f c #2B2BA0A02A2A", "g c #2C2CA2A22C2C", "h c #2F2FA0A02F2F", "j c #2E2EA3A32E2E", "k c #3030A2A23030", "l c #3232A2A23232", "z c #3333A3A33232", "x c #3131A4A43131", "c c #3535A2A23535", "v c #3434A4A43434", "b c #3434A5A53434", "n c #3636A5A53636", "m c #3737A6A63737", "M c #3C3CA7A73C3C", "N c #3D3DA7A73D3D", "B c #3E3EA7A73E3E", "V c #3A3AA8A83A3A", "C c #3B3BA8A83B3B", "Z c #3D3DABAB3D3D", "A c #3F3FA9A93F3F", "S c #4242A7A74242", "D c #4040AAAA4040", "F c #4141ACAC4141", "G c #4646ABAB4646", "H c #4444ACAC4444", "J c #4545ADAD4545", "K c #4545AEAE4545", "L c #4646ADAD4646", "P c #4646AEAE4646", "I c #4949AEAE4949", "U c #4A4AADAD4A4A", "Y c #4B4BB0B04A4A", "T c #4B4BB0B04B4B", "R c #4E4EB1B14E4E", "E c #5757AFAF5757", "W c #5050B1B15050", "Q c #5050B3B35050", "! c #5353B3B35353", "~ c #5050B4B45050", "^ c #5151B4B45151", "/ c #5454B6B65454", "( c #5555B6B65555", ") c #5858B6B65757", "_ c #5C5CB4B45C5C", "` c #5D5DB7B75D5D", "' c #5A5AB9B95A5A", "] c #5C5CB9B95C5C", "[ c #5E5EB9B95E5E", "{ c #5E5EBBBB5E5E", "} c #5F5FB9B96060", "| c #6161BBBB6060", " . c #6262BDBD6262", ".. c #6565BEBE6565", "X. c #6969BEBE6969", "o. c #6B6BBFBF6C6C", "O. c #6D6DB9B96D6D", "+. c #6D6DC1C16D6D", "@. c #7070C3C37171", "#. c #7474C3C37474", "$. c #7C7CC4C47B7B", "%. c #7F7FC8C87F7F", "&. c #8787C6C68787", "*. c #8585C9C98585", "=. c #9090CACA9090", "-. c #9292CECE9292", ";. c #9494CCCC9494", ":. c #A3A3D3D3A3A3", ">. c #A7A7D3D3A7A7", ",. c #A6A6D4D4A6A6", "<. c #A7A7D6D6A7A7", "1. c #ACACD6D6ACAC", "2. c #ACACD7D7ACAC", "3. c #BBBBDFDFBBBB", "4. c #D0D0E4E4D0D0", "5. c #D5D5E8E8D5D5", "6. c #DBDBE7E7DBDB", "7. c #DCDCEAEADCDC", "8. c #E3E3EBEBE3E3", "9. c #E1E1EFEFE1E1", "0. c #E5E5EDEDE5E5", "q. c #E7E7EFEFE7E7", "w. c #E5E5F3F3E5E5", "e. c #E9E9F1F1E9E9", "r. c #EAEAF2F2EAEA", "t. c #EBEBF3F3EBEB", "y. c #EDEDF3F3EDED", "u. c #EDEDF5F5EFEF", "i. c #EFEFF4F4EFEF", "p. c #EFEFF5F5EFEF", "a. c #EFEFF7F7EFEF", "s. c #F0F0F5F5F0F0", "d. c #F0F0F6F6F0F0", "f. c #F1F1F7F7F1F1", "g. c #F1F1F9F9F1F1", "h. c #F2F2F8F8F2F2", "j. c #F3F3F9F9F3F3", "k. c #F4F4F9F9F4F4", "l. c #F5F5FAFAF5F5", "z. c #F7F7FCFCF7F7", "x. c gray98", "c. c #FBFBFBFBFBFB", "v. c gray99", "b. c #FDFDFDFDFDFD", "n. c #FEFEFEFEFEFE", "m. c gray100", "M. c None", /* pixels */ "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "g.g.g.w.9 8 7 6 5 5 3 2 1 < , < ", "g.m.m.l.*.@.@.+...+.{ [ ) ! R > ", "g.m.m.l. ./ ^ ^ X.H A m x g I - ", "g.m.m.g.[ ^ Y 3.>.A F 1.I i H = ", "g.m.m.f.' Y *.9.[ m ` 5.>.y A & ", "u.m.m.g.( G -.e.K g d _ B e V $ ", "u.m.x.f.! A $.f.>.p u r r w m # ", "t.c.c.f.Y V m 1.u.;.&.,.E q z + ", "e.m.x.f.H x j f =.4.7.O.s 0 g o ", "e.x.x.i.[ ! I H S A B c z z a . ", "q.q.8.6.< > ; = & $ # # o o . # ", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M." }; springlobby-0.169/src/images/flags/PL.xpm0000600000176000000410000000570712105760300021621 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PL_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 108 2", " c black", ". c #DDDD00000000", "X c #DFDF00000000", "o c #E1E100000000", "O c #E3E300000000", "+ c #E5E500000000", "@ c #E7E700000000", "# c #E9E900000000", "$ c #EBEB00000000", "% c #EDED00000000", "& c #EFEF00000000", "* c #F1F100000000", "= c #F3F300000000", "- c #F5F500000000", "; c #F7F700000000", ": c #F1F10B0B0B0B", "> c #F1F10F0F0E0E", ", c #F9F900000000", "< c #FBFB00000000", "1 c #FDFD00000000", "2 c #F2F210101010", "3 c #F2F213131313", "4 c #F2F214141414", "5 c #F3F319191919", "6 c #F4F41E1E1E1E", "7 c #F4F41F1F1F1F", "8 c #F5F523232323", "9 c #F5F524242424", "0 c #F2F22C2C2C2C", "q c #F2F22F2F2F2F", "w c #F6F629292929", "e c #F6F62A2A2A2A", "r c #F7F72E2E2E2E", "t c #F7F72F2F2F2F", "y c #F2F232323232", "u c #F3F332323232", "i c #F3F335353535", "p c #F4F436363636", "a c #F4F439393939", "s c #F5F53D3D3D3D", "d c #F8F834343434", "f c #F8F835353535", "g c #F9F93A3A3A3A", "h c #F9F93B3B3A3A", "j c #FAFA3F3F3F3F", "k c #F3F344444444", "l c #F6F642424242", "z c #F7F746464646", "x c #F4F448484848", "c c #F7F74B4B4B4B", "v c #F5F54D4D4D4D", "b c #FAFA40404040", "n c #FAFA44444444", "m c #FBFB45454545", "M c #FBFB49494949", "N c #FBFB4A4A4949", "B c #FCFC4F4F4F4F", "V c #F6F652525252", "C c #F7F756565757", "Z c #F4F45F5F5F5F", "A c #F8F850505050", "S c #F9F954545555", "D c #F9F958585858", "F c #F8F85B5B5B5B", "G c #FAFA5D5D5D5D", "H c #F9F960606060", "J c #FBFB61616262", "K c #FAFA64646464", "L c #FCFC66666666", "P c #FBFB68686868", "I c #FCFC6A6A6A6A", "U c #FCFC6C6C6C6C", "Y c #FDFD6F6F6F6F", "T c #FCFC70707070", "R c #FDFD74747474", "E c #FEFE8E8E8E8E", "W c #E7E7D5D5D5D5", "Q c #E7E7D7D7D7D7", "! c #E9E9D9D9D9D9", "~ c #EBEBDDDDDDDD", "^ c #EDEDDFDFDFDF", "/ c #EFEFE1E1E1E1", "( c #F1F1E3E3E3E3", ") c #F3F3E5E5E5E5", "_ c #F5F5E7E7E7E7", "` c #F7F7E9E9E9E9", "' c #F9F9EBEBEBEB", "] c #FBFBEDEDEDED", "[ c #FDFDEDEDEDED", "{ c #FDFDEFEFEFEF", "} c #FDFDEFEFF1F1", "| c #F4F4F4F4F4F4", " . c gray96", ".. c #F6F6F6F6F6F6", "X. c gray97", "o. c #FDFDF1F1F1F1", "O. c #FFFFF1F1F1F1", "+. c #F8F8F8F8F8F8", "@. c #F9F9F9F9F9F9", "#. c gray98", "$. c #FBFBFBFBFBFB", "%. c gray99", "&. c #FDFDFCFCFDFD", "*. c #FDFDFDFDFDFD", "=. c #FDFDFDFDFEFE", "-. c #FEFEFEFEFEFE", ";. c gray100", ":. c None", /* pixels */ ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", "O.O.O.O.O.O.] ] ] ' ` _ ) ( / ^ ", "O.;.;.;.;.;.;.$.$.$.$.$.$.$...~ ", "O.;.$.;.;.$.;.$.$.$.X.$.....X.Q ", "O.;.;.;.$.$.$.$.$.$.X.........Q ", "O.;.;.$.;.$.$.$.$.........| ..W ", "1 E R T U P K G C C V v x k Z O ", "1 U B M m j s d t e 9 6 5 4 p O ", "1 U M m j g d t e 9 6 5 4 2 y X ", ", L m j g d t e 8 6 5 4 > : q X ", "; J G D S V c z l s a p y q 0 X ", "; * * & & & & @ O O O O X X . . ", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:." }; springlobby-0.169/src/images/flags/PM.xpm0000600000176000000410000001052312105760300021612 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 171 2", " c black", ". c #000000001111", "X c #000000001717", "o c #000000001B1B", "O c #000000001D1D", "+ c #000000002727", "@ c #000000002929", "# c #000000002B2B", "$ c #000000003131", "% c #000000003333", "& c #000000003535", "* c #000000003939", "= c #000000003D3D", "- c #000000004141", "; c #000000004545", ": c #000000004747", "> c #000000004949", ", c #000000004D4D", "< c #000000005D5D", "1 c #000000005F5F", "2 c #000000006161", "3 c #000000006363", "4 c #000000006565", "5 c #000000006767", "6 c #000000006F6F", "7 c #000000007777", "8 c #000000007B7B", "9 c #15154F4F0D0D", "0 c #252563630000", "q c #2F2F6D6D0303", "w c #616159596060", "e c #61615C5C7171", "r c #6C6C63635353", "t c #77776D6D5D5D", "y c #6B6B62627070", "u c #696964647676", "i c #6A6A64647474", "p c #79796F6F7171", "a c #000000008383", "s c #000000008585", "d c #000000008D8D", "f c #353537379F9F", "g c #3C3C3F3F9D9D", "h c #33333434A4A4", "j c #33333232AEAE", "k c #36363838ADAD", "l c #3B3B3F3FB2B2", "z c #404041419898", "x c #444445459C9C", "c c #4B4B4C4C9B9B", "v c #4E4E4C4C9E9E", "b c #525252529F9F", "n c #41414343A3A3", "m c #48484A4AA3A3", "M c #4C4C4F4FA9A9", "N c #40404242B4B4", "B c #4A4A4C4CB0B0", "V c #4D4D4D4DB0B0", "C c #4A4A4C4CB8B8", "Z c #4E4E5050A3A3", "A c #4C4C5050B8B8", "S c #4F4F5353B8B8", "D c #50504F4FB7B7", "F c #53535555AFAF", "G c #55555656A8A8", "H c #56565757A9A9", "J c #5A5A5A5AA1A1", "K c #5A5A5A5AA4A4", "L c #51515151BDBD", "P c #54545555BCBC", "I c #57575959B3B3", "U c #57575B5BB3B3", "Y c #54545858BCBC", "T c #59595D5DB6B6", "R c #59595A5ABEBE", "E c #61615C5C8A8A", "W c #696966669090", "Q c #6D6D6C6C9C9C", "! c #7B7B7A7AA8A8", "~ c #78787878AEAE", "^ c #75757575BABA", "/ c #75757777C7C7", "( c #77777878C8C8", ") c #7F7F8080BEBE", "_ c #999900000000", "` c #818173735858", "' c #82827B7B7070", "] c #D7D700000000", "[ c #D9D900000000", "{ c #E3E300000000", "} c #E7E700000000", "| c #E9E900000000", " . c #D1D14D4D5C5C", ".. c #D2D256566464", "X. c #D6D665657171", "o. c #EBEB7D7D6B6B", "O. c #EFEF7F7F6B6B", "+. c #F1F169696161", "@. c #B7B7A0A02A2A", "#. c #BCBCA6A62929", "$. c #B4B4A0A03434", "%. c #B8B8A3A33636", "&. c #BBBBA6A63939", "*. c #BBBBAAAA3D3D", "=. c #9B9B8F8F5A5A", "-. c #92928B8B7F7F", ";. c #9A9A91917676", ":. c #A4A499996767", ">. c #BEBEAEAE4242", ",. c #BFBFAFAF4747", "<. c #BDBDADAD5353", "1. c #BFBFAFAF5050", "2. c #BFBFAEAE5656", "3. c #C2C2A9A91D1D", "4. c #C3C3ACAC2323", "5. c #C0C0AFAF3636", "6. c #C6C6AFAF3737", "7. c #CBCBB7B72828", "8. c #C6C6B3B33838", "9. c #D1D1BDBD3838", "0. c #D8D89E9E6868", "q. c #C1C1AFAF5252", "w. c #C0C0B1B14D4D", "e. c #CCCCB8B84545", "r. c #C5C5B5B55151", "t. c #C2C2B2B25858", "y. c #CFCFBFBF5858", "u. c #C8C8BBBB7272", "i. c #DBDBA3A36666", "p. c #E0E082824444", "a. c #E4E48C8C6060", "s. c #F1F181816D6D", "d. c #F2F288887F7F", "f. c #D8D8C4C43838", "g. c #DEDECACA3A3A", "h. c #E3E3CCCC2727", "j. c #E3E3CCCC3232", "k. c #E3E3CECE3434", "l. c #EEEED8D82B2B", "z. c #E7E7D3D33939", "x. c #E7E7D3D33F3F", "c. c #F1F1DBDB3636", "v. c #D6D6C7C76464", "b. c #DEDED1D17373", "n. c #E4E4D1D14444", "m. c #E6E6D4D44F4F", "M. c #E6E6D5D55454", "N. c #E1E1D0D05959", "B. c #E2E2D5D57A7A", "V. c #898983838181", "C. c #8383A2A28181", "Z. c #F2F2B9B9B3B3", "A. c #F7F7BDBDB3B3", "S. c #C9C9D3D3D7D7", "D. c #D7D7D3D3D3D3", "F. c #DBDBE0E0E6E6", "G. c #DDDDE1E1E7E7", "H. c #DDDDE3E3E8E8", "J. c #F5F5C6C6C1C1", "K. c #FAFACACAC1C1", "L. c #E0E0E0E0E1E1", "P. c #E1E1E0E0E0E0", "I. c #E1E1E3E3E3E3", "U. c #E2E2E1E1E5E5", "Y. c #E7E7E5E5E6E6", "T. c #E7E7E7E7E7E7", "R. c #E7E7E8E8E6E6", "E. c #E8E8E7E7E8E8", "W. c #E8E8E8E8E5E5", "Q. c #EEEEEAEAE7E7", "!. c None", /* pixels */ "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "0 s.o.9 d s a 7 8 5 5 6 2 5 < < ", "s.E.T.J.( / ) B.^ b.~ ! u.U A , ", "O.T.P.Z.R Y v.N.H y.W v 1.z C > ", "q K.A.C.P L M.m.;.n.r.E f.u K : ", "D.T.Q.G.D A Q V.n.z.w.l.>.y q.> ", "I.P.R.G.V -.b :.c.k.w.h.&.` 1.: ", "S.U.R.G.V t.r.e.' =.i e t #.c = ", "| d.+...N b g.j.9.8.5.7.4.w j # ", "} i.p. .l k p 6.&.%.$.@.3.r h # ", "{ 0.a.X.T U F G M Z m n x g f O ", "} ] [ _ : - = $ & + @ + o O . o ", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.", "!.!.!.!.!.!.!.!.!.!.!.!.!.!.!.!." }; springlobby-0.169/src/images/flags/PN.xpm0000600000176000000410000001024312105760300021612 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PN_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 163 2", " c black", ". c #000000002525", "X c #000000002727", "o c #000000002B2B", "O c #000000002D2D", "+ c #000000002F2F", "@ c #000000003333", "# c #000000003535", "$ c #000000003939", "% c #000000003B3B", "& c #000000004141", "* c #000000004545", "= c #000000004747", "- c #000000004B4B", "; c #000000004D4D", ": c #000000005353", "> c #000000005757", ", c #000000005D5D", "< c #000000006363", "1 c #000000006767", "2 c #000000006D6D", "3 c #000000007373", "4 c #000000007777", "5 c #313149497D7D", "6 c #333350507575", "7 c #474772725050", "8 c #4B4B75755353", "9 c #4B4B75755555", "0 c #4F4F78785757", "q c #505079795858", "w c #54547C7C5C5C", "e c #5A5A76767474", "r c #616173734848", "t c #6A6A73735151", "y c #000000008181", "u c #1B1B3939C7C7", "i c #29294646A4A4", "p c #2E2E4A4AA6A6", "a c #31314C4CA3A3", "s c #37375050A5A5", "d c #36365050A6A6", "f c #36365151A6A6", "g c #36365454ACAC", "h c #39395353A0A0", "j c #39395555A1A1", "k c #3B3B5454A9A9", "l c #3A3A5555ABAB", "z c #3C3C5555A9A9", "x c #3C3C5656A9A9", "c c #3B3B5D5DDBDB", "v c #41415A5A9898", "b c #40405757A3A3", "n c #40405959A1A1", "m c #43435B5BA4A4", "M c #40405E5EA3A3", "N c #41415959ACAC", "B c #40405A5AADAD", "V c #41415A5AACAC", "C c #46465D5DABAB", "Z c #46465E5EAEAE", "A c #46465E5EAFAF", "S c #59595353B9B9", "D c #444463638282", "F c #494969698686", "G c #4F4F68689999", "H c #505065659797", "J c #5D5D6E6E9F9F", "K c #4D4D6464A1A1", "L c #48486060AEAE", "P c #4E4E6464A9A9", "I c #4C4C6565AFAF", "U c #4A4A6262B1B1", "Y c #49496666B6B6", "T c #4C4C6363B1B1", "R c #4D4D6666B2B2", "E c #4F4F6767B4B4", "W c #4D4D6A6AB9B9", "Q c #54546767A7A7", "! c #54546E6EAEAE", "~ c #50506868B2B2", "^ c #55556C6CB4B4", "/ c #54546C6CB7B7", "( c #58586E6EB7B7", ") c #5A5A6F6FB7B7", "_ c #59596F6FB8B8", "` c #5C5C7272BBBB", "' c #5E5E7474B9B9", "] c #7F7F5D5DABAB", "[ c #62627676B6B6", "{ c #62627777BBBB", "} c #66667B7BB7B7", "| c #66667B7BBEBE", " . c #7B7B6969BFBF", ".. c #79797676B9B9", "X. c #5F5F7171DFDF", "o. c #4F4F7171E7E7", "O. c #51516F6FE7E7", "+. c #63636161CBCB", "@. c #69697D7DC2C2", "#. c #6A6A7F7FC0C0", "$. c #595980806060", "%. c #666681815A5A", "&. c #757582825F5F", "*. c #7C7C89896464", "=. c #7C7C8C8C7D7D", "-. c #7777ACAC5E5E", ";. c #7A7AA9A97575", ":. c #656594948686", ">. c #6D6DA0A09292", ",. c #6E6E8282C2C2", "<. c #6F6F8383C2C2", "1. c #73738787C4C4", "2. c #77778282CECE", "3. c #73738989C7C7", "4. c #C4C46A6A7979", "5. c #D5D567677F7F", "6. c #EDED65656767", "7. c #EDED67677171", "8. c #FDFD73737373", "9. c #AEAE61618585", "0. c #C3C363638787", "q. c #C1C164648181", "w. c #CCCC6E6E8484", "e. c #ACACB9B92323", "r. c #BCBCBFBF4040", "t. c #ABABB4B46060", "y. c #87878D8D9E9E", "u. c #8E8E93939393", "i. c #9B9B8E8ECACA", "p. c #84849292E1E1", "a. c #88889A9AE6E6", "s. c #9999A4A4E8E8", "d. c #9B9BB0B0EDED", "f. c #A2A29898CFCF", "g. c #AEAEBFBFF5F5", "h. c #B5B5B3B3E3E3", "j. c #DBDB9E9EABAB", "k. c #DDDDA2A2B4B4", "l. c #FEFE89898686", "z. c #F7F799999999", "x. c #F8F895959797", "c. c #FEFE98989797", "v. c #FDFDA2A29F9F", "b. c #FEFEA1A19E9E", "n. c #EAEAB1B1BBBB", "m. c #EAEAB8B8BEBE", "M. c #F0F0A2A2ABAB", "N. c #FDFDA9A9A4A4", "B. c #F5F5B3B3B6B6", "V. c #CACAB5B5D7D7", "C. c #CECED3D3F3F3", "Z. c #CECED7D7F7F7", "A. c #D6D6CFCFE8E8", "S. c #D7D7CECEE8E8", "D. c #FDFDCECECECE", "F. c #FEFED0D0D1D1", "G. c #FCFCD8D8D5D5", "H. c #F0F0E0E0E8E8", "J. c #F7F7E5E5E9E9", "K. c #FAFAE2E2E4E4", "L. c #FEFEE1E1E0E0", "P. c #FFFFEEEEEEEE", "I. c None", /* pixels */ "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.", "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.", "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.", "+.z.X. .6.c ] 0.u 4 2 1 < , > : ", "O.Z.P.S.G.S.H.g.s.<.@.} [ ` ( - ", "7.K.D.b.l.N.B.M.q.R Q G y.j ! * ", "5.J.F.c.8.b.n.k.9.P -.e u.&.;.& ", "o.C.L.V.x.h.j.d.2.x F t r %.J % ", "S m.a.f.w.p.i.4...x h w :.0 K % ", "y 3.( W Y T N g x j e w >.9 H + ", "4 3./ E T A N z f p r.0 8 7 t.o ", "3 <.E U A N z s a i *.6 e.5 =.X ", "2 @.| { ' ) ^ ~ I L C m j m s X ", "1 < , > : ; * & % % @ + o X . X ", "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.", "I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I." }; springlobby-0.169/src/images/flags/PR.xpm0000600000176000000410000001002012105760300021607 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 158 2", " c black", ". c #00000000D5D5", "X c #00000000D9D9", "o c #00000000F7F7", "O c #00000000F9F9", "+ c #00000000FBFB", "@ c #00000000FDFD", "# c blue", "$ c #40404040FAFA", "% c #44444444FAFA", "& c #45454545FBFB", "* c #49494646FBFB", "= c #4A4A4646FBFB", "- c #49494949FBFB", "; c #4B4B4B4BFCFC", ": c #4D4D4E4EFAFA", "> c #54545151FCFC", ", c #58585959FEFE", "< c #5F5F5D5DFDFD", "1 c #5F5F5F5FFEFE", "2 c #5D5D6060FDFD", "3 c #68685151E0E0", "4 c #6D6D6161F0F0", "5 c #68686666FCFC", "6 c #6C6C6868FEFE", "7 c #7F7F6B6BE8E8", "8 c #70706A6AFCFC", "9 c #78787474FBFB", "0 c #79797979FEFE", "q c #7D7D7B7BFFFF", "w c #7E7E7A7AFDFD", "e c #818100000000", "r c #838300000000", "t c #858500000000", "y c #878700000000", "u c #898900000000", "i c #8D8D00000000", "p c #8F8F00000000", "a c #919100000000", "s c #979700000000", "d c #9B9B00000000", "f c #9D9D00000000", "g c #9F9F00000000", "h c #A1A100000000", "j c #A5A500000000", "k c #A7A700000000", "l c #A3A300000909", "z c #A9A900000000", "x c #ABAB00000000", "c c #ADAD00000000", "v c #B1B100000000", "b c #B5B500000000", "n c #B9B900000000", "m c #BBBB00000000", "M c #BDBD00000000", "N c #BFBF00000000", "B c #C1C100000000", "V c #C7C700000000", "C c #CFCF00000000", "Z c #C3C31A1A1A1A", "A c #C5C51F1F1F1F", "S c #C7C725252525", "D c #C9C92B2B2B2B", "F c #CBCB30303030", "G c #CBCB33333333", "H c #CDCD35353636", "J c #CECE36363939", "K c #CBCB3B3B3B3B", "L c #CECE39393939", "P c #D1D130303030", "I c #D0D03D3D3D3D", "U c #D1D13C3C3C3C", "Y c #D1D141414141", "T c #D3D341414141", "R c #D3D345454545", "E c #D4D446464646", "W c #D4D44A4A4A4A", "Q c #D6D64B4B4B4B", "! c #D6D64E4E4E4E", "~ c #D3D353535353", "^ c #D7D752525252", "/ c #D5D556565656", "( c #D7D758585858", ") c #D6D65A5A5A5A", "_ c #D8D850505050", "` c #D8D853535353", "' c #D9D955555757", "] c #D8D856565656", "[ c #DFDF5D5D5757", "{ c #DADA5B5B5B5B", "} c #D8D85E5E5E5E", "| c #CCCC5A5A6D6D", " . c #D9D95D5D6262", ".. c #DADA63636363", "X. c #DCDC60606060", "o. c #DDDD64646464", "O. c #DBDB67676868", "+. c #D8D86B6B6B6B", "@. c #DEDE68686868", "#. c #DFDF6C6C6C6C", "$. c #D8D86B6B7373", "%. c #E1E16F6F6F6F", "&. c #E2E273737474", "*. c #E3E377777676", "=. c #E8E87E7E7979", "-. c #9C9C3D3D8383", ";. c #A4A45F5FA3A3", ":. c #A4A45D5DA7A7", ">. c #AAAA6868AAAA", ",. c #B7B77B7BB8B8", "<. c #85857B7BF5F5", "1. c #E3E37D7D8080", "2. c #8F8F8F8FFEFE", "3. c #91918D8DFDFD", "4. c #D9D9BFBFBFBF", "5. c #D9D9C9C9C9C9", "6. c #C2C2C0C0FCFC", "7. c #C5C5C3C3FEFE", "8. c #D2D2D1D1FEFE", "9. c #D8D8D9D9F9F9", "0. c #DDDDDBDBFCFC", "q. c #DFDFDFDFFDFD", "w. c #E5E5CDCDCDCD", "e. c #E3E3D1D1D1D1", "r. c #E9E9DDDDECEC", "t. c #F0F0ECECECEC", "y. c #F1F1EDEDEDED", "u. c #F1F1EEEEEEEE", "i. c #F2F2EEEEEEEE", "p. c #F0F0E6E6F2F2", "a. c #F3F3F0F0F0F0", "s. c gray95", "d. c #F3F3F3F3F3F3", "f. c #F4F4F1F1F1F1", "g. c #F6F6F3F3F3F3", "h. c #F4F4F4F4F4F4", "j. c gray96", "k. c #F6F6F5F5F5F5", "l. c #F6F6F6F6F6F6", "z. c #F7F7F6F6F6F6", "x. c #F7F7F7F7F6F6", "c. c gray97", "v. c #F5F5F7F7F8F8", "b. c #F8F8F4F4F4F4", "n. c #F9F9F5F5F5F5", "m. c #FAFAF6F6F6F6", "M. c #FAFAF7F7F7F7", "N. c #F8F8F8F8F7F7", "B. c #F8F8F8F8F8F8", "V. c #F9F9F9F9F9F9", "C. c #FBFBF8F8F8F8", "Z. c gray98", "A. c #FBFBFBFBFBFB", "S. c #F9F9FAFAFCFC", "D. c #FBFBFBFBFDFD", "F. c #FCFCF8F8F8F8", "G. c #FDFDFAFAF9F9", "H. c None", /* pixels */ "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "X l C V B M M M m b v v c k k k ", "# <.,.=.=.*.&.%.%.@.o. .{ / _ g ", "# q 1 7 p.S.C.C.n.m.n.b.x.x.g.w.", "# 0 6 , 1 q.S.S.C.V.B.c.x.x.x.e.", "# 2.8.3.1 - >.| / _ Q R Y U ( f ", "# 7.S.q.> & $ -.J P D S A Z K r ", "+ q 6.9 * $ ;.$.O.o.} ( / ~ +.g ", "+ 8 * & : 9.x.x.n.x.s.s.a.a.x.5.", "+ 5 % 3 r.B.x.x.s.s.i.i.y.t.i.4.", "o 4 :. .[ ` _ Q R Y I L H G F r ", ". r m c g f f s a p p u r r r r ", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H." }; springlobby-0.169/src/images/flags/PS.xpm0000600000176000000410000000604612105760300021625 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PS_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 115 2", " c black", ". c #000029290000", "X c #00002D2D0000", "o c #00002F2F0000", "O c #000033330000", "+ c #000039390000", "@ c #00003D3D0000", "# c #2C2C2C2C2C2C", "$ c #313131313131", "% c #373737373737", "& c #3D3D3C3C3D3D", "* c #000041410000", "= c #000047470000", "- c #00004D4D0000", "; c #000051510000", ": c #000057570000", "> c #00005D5D0000", ", c #000063630000", "< c gray26", "1 c gray28", "2 c #494949494949", "3 c #4C4C4C4C4C4C", "4 c #4E4E4E4E4E4E", "5 c #515151515151", "6 c #535353535353", "7 c gray33", "8 c #585857575757", "9 c gray36", "0 c #636359595959", "q c #616160606060", "w c #656565656565", "e c DimGray", "r c #6D6D6D6D6D6D", "t c #707070707171", "y c #747474747474", "u c #777777777777", "i c #797979797979", "p c #18189A9A1919", "a c #1C1C9C9C1C1C", "s c #21219F9F2121", "d c #2525A1A12626", "f c #2A2AA3A32A2A", "g c #3030A6A63030", "h c #3535A9A93535", "j c #3838A7A73838", "k c #3A3AA8A83A3A", "l c #3B3BA9A93B3B", "z c #3A3AACAC3A3A", "x c #3D3DA9A93D3D", "c c #4040ACAC4040", "v c #4040AEAE4040", "b c #4545AEAE4444", "n c #4848AFAF4848", "m c #4545B1B14545", "M c #4C4CB2B24C4C", "N c #5050B4B45050", "B c #5555B6B65555", "V c #5A5AB9B95A5A", "C c #5E5EBBBB5E5E", "Z c #6262BEBE6262", "A c #898900000000", "S c #9B9B00000000", "D c #B5B569693F3F", "F c #BCBC5C5C5C5C", "G c #A4A47B7B7B7B", "H c #F7F700000000", "J c #F9F900000000", "K c #FBFB00000000", "L c #FDFD00000000", "P c red", "I c #DCDC51513F3F", "U c #DDDD54545454", "Y c #FAFA40404040", "T c #FAFA44444444", "R c #FBFB45454545", "E c #FBFB46464646", "W c #FAFA44444949", "Q c #FBFB49494949", "! c #FBFB4E4E4E4E", "~ c #FCFC4A4A4B4B", "^ c #FDFD4F4F5050", "/ c #FCFC55555555", "( c #FDFD57575757", ") c #FEFE59595959", "_ c #FEFE5C5C5C5C", "` c #FEFE5F5F5F5F", "' c #E8E86C6C6262", "] c #EBEB7B7B7B7B", "[ c #FCFC66666666", "{ c #FCFC6A6A6A6A", "} c #FDFD6F6F6F6F", "| c #FEFE79797979", " . c #FFFF7B7B7A7A", ".. c #94949B9B5D5D", "X. c #F9F988888989", "o. c #F9F98E8E9191", "O. c #FBFB9E9E9E9E", "+. c #FDFD9C9C9F9F", "@. c gray81", "#. c gray82", "$. c #D5D5D5D5D5D5", "%. c #D7D7D7D7D7D7", "&. c gray95", "*. c #F3F3F3F3F3F3", "=. c #F4F4F4F4F4F4", "-. c #F4F4F5F5F5F5", ";. c gray96", ":. c #F6F6F6F6F6F6", ">. c gray97", ",. c #F8F8F8F8F8F8", "<. c #F9F9F9F9F9F9", "1. c gray98", "2. c #FBFBFBFBFBFB", "3. c gray99", "4. c None", /* pixels */ "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "S ", "P ] G u u y t r e w q 9 8 5 3 ", "P .` F 0 7 5 3 1 < & % $ # 3 ", "P ._ _ U +.3.1.2.1.>.;.;.;.>.%.", "P } _ / ^ / O.1.1.1.1.;.;.;.;.$.", "P } ` ^ ~ R Y X.;.;.;.;.;.*.;.#.", "P } ! ! R W o.1.>.>.;.;.*.*.*.#.", "J { Q R I o.1.;.;.;.;.*.*.*.*.@.", "J [ R D m c z h g f d s a p l X ", "H ' ..Z C V B N M n b c j l j . ", "A ; , > : ; - = * @ + O X X . . ", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.", "4.4.4.4.4.4.4.4.4.4.4.4.4.4.4.4." }; springlobby-0.169/src/images/flags/PT.xpm0000600000176000000410000000745512105760300021633 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PT_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 146 2", " c black", ". c #00000B0B0000", "X c #00000D0D0000", "o c #000013130000", "O c #000019190000", "+ c #000021210000", "@ c #00002B2B0000", "# c #000033330000", "$ c #000035350000", "% c #00003B3B0000", "& c #00003F3F0000", "* c #000045450000", "= c #00004B4B0000", "- c #00004D4D0000", "; c #00004F4F0000", ": c #000059590000", "> c #3A3A84843A3A", ", c #3F3F8A8A3F3F", "< c #414191913434", "1 c #44448E8E4444", "2 c #494991914949", "3 c #4F4F94944F4F", "4 c #535391914545", "5 c #505095955050", "6 c #535396965353", "7 c #545496965555", "8 c #585899995858", "9 c #5C5C9D9D5C5C", "0 c #5D5D9D9D5D5D", "q c #5F5F9F9F5F5F", "w c #61619F9F6262", "e c #6969A2A25C5C", "r c #6666A3A36666", "t c #6A6AA5A56A6A", "y c #6F6FA8A86F6F", "u c #7272AAAA7373", "i c #7474AEAE7474", "p c #7676ADAD7676", "a c #7777ADAD7777", "s c #7979AEAE7979", "d c #7B7BB0B07A7A", "f c #7B7BB0B07B7B", "g c #DDDD00000000", "h c #DFDF00000000", "j c #E1E100000000", "k c #E3E300000000", "l c #E5E500000000", "z c #E7E700000000", "x c #E9E900000000", "c c #EBEB00000000", "v c #EDED00000000", "b c #EFEF00000000", "n c #F1F100000000", "m c #F3F300000000", "M c #F5F500000000", "N c #F7F700000000", "B c #F1F10B0B0B0B", "V c #F1F10F0F0E0E", "C c #F9F900000000", "Z c #FBFB00000000", "A c #FDFD00000000", "S c #F2F210101010", "D c #F2F213131313", "F c #F2F214141414", "G c #F3F319191919", "H c #F3F31A1A1A1A", "J c #F4F41E1E1E1E", "K c #F4F41F1F1F1F", "L c #F4F420202020", "P c #F5F523232323", "I c #F5F524242424", "U c #F5F525252525", "Y c #F5F526262626", "T c #F3F32F2F2A2A", "R c #F2F22C2C2C2C", "E c #F2F22F2F2F2F", "W c #F6F62B2B2B2B", "Q c #F6F62C2C2C2C", "! c #F7F72E2E2E2E", "~ c #F3F335352929", "^ c #F2F232323232", "/ c #F3F332323232", "( c #F3F335353535", ") c #F7F730303030", "_ c #F7F731313131", "` c #F4F436363636", "' c #F5F53C3C3636", "] c #F4F439393939", "[ c #F4F43B3B3B3B", "{ c #F5F53D3D3D3D", "} c #F5F53F3F3F3F", "| c #F8F837373636", " . c #F8F837373737", ".. c #F9F93C3C3C3C", "X. c #F9F93C3C3D3D", "o. c #F0F041413030", "O. c #EAEA69692A2A", "+. c #F6F642424242", "@. c #F6F644444444", "#. c #F7F746464646", "$. c #F7F749494949", "%. c #F7F74B4B4B4B", "&. c #F7F74E4E4E4E", "*. c #FAFA42424242", "=. c #FBFB53534747", "-. c #F8F853535353", ";. c #F9F957575757", ":. c #FAFA5C5C5C5C", ">. c #E8E876764B4B", ",. c #E7E778785858", "<. c #EFEF70705151", "1. c #EDED76765B5B", "2. c #F4F467674C4C", "3. c #E6E678786060", "4. c #FBFB60606060", "5. c #FCFC65656565", "6. c #FCFC69696969", "7. c #FDFD6D6D6D6D", "8. c #FDFD70707171", "9. c #9A9AB3B34949", "0. c #9B9BB5B55959", "q. c #ADADBBBB4040", "w. c #BFBFB9B94646", "e. c #E7E7A3A33232", "r. c #E9E9AFAF3737", "t. c #EEEEBABA3636", "y. c #F0F0B8B83D3D", "u. c #F1F181815151", "i. c #EAEA83837676", "p. c #EFEFB1B14242", "a. c #F3F3ABAB4747", "s. c #F5F5ACAC4C4C", "d. c #D9D9C2C23C3C", "f. c #E0E0C8C83030", "g. c #E1E1C9C93939", "h. c #CECEC8C84F4F", "j. c #C7C7C8C85454", "k. c #CACAC8C85454", "l. c #DADAD3D35959", "z. c #E9E9CCCC5555", "x. c #F9F9C1C15151", "c. c #D6D6E8E8FAFA", "v. c #E6E6D0D0D4D4", "b. c #EEEEDDDDDDDD", "n. c #F5F5DBDBD4D4", "m. c None", /* pixels */ "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", ": - - - - ; A A Z Z N N m m v v ", "= f f s s p 8.7.6.5.4.:.;.-.&.c ", "- f 9 e 0.j.x.s.=.*.X.| _ Q $.c ", "- s 9 l.z.<.2.a.p.X.| ) W Y @.l ", "= p 8 k.u.n.v.1.y.' ) W Y L } l ", "* u 6 k.>.b.c.3.t.o.W Y K G [ l ", "* y 5 9.w.,.i.g.f.T Y K G D ` l ", "% t 2 4 q.d.r.e.O.Y K G F S _ g ", "# r 1 , > < Q ~ L K G D V B E g ", "@ w 9 8 7 5 %.@.+.} [ ( / E E g ", "# + O o . X v c l l k k g g g g ", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.", "m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m." }; springlobby-0.169/src/images/flags/PW.xpm0000600000176000000410000000766112105760300021635 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PW_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 152 2", " c black", ". c #00002929DDDD", "X c #00002B2BDDDD", "o c #00002F2FDDDD", "O c #00002F2FDFDF", "+ c #00003131DFDF", "@ c #00003333DFDF", "# c #00003939DDDD", "$ c #00003535E1E1", "% c #00003737E3E3", "& c #00003B3BE3E3", "* c #00003D3DE5E5", "= c #00003F3FE5E5", "- c #00004141E7E7", "; c #00004747E7E7", ": c #00004545E9E9", "> c #00004B4BEBEB", ", c #00004D4DE9E9", "< c #00004F4FEBEB", "1 c #00005151EDED", "2 c #00005959EDED", "3 c #00005D5DEFEF", "4 c #00005F5FEFEF", "5 c #00006161EFEF", "6 c #00006363F1F1", "7 c #00006767F3F3", "8 c #00006969F3F3", "9 c #00006D6DF5F5", "0 c #00007171F7F7", "q c #00007777F5F5", "w c #00007575F9F9", "e c #00007979F9F9", "r c #00007979FBFB", "t c #00007B7BFBFB", "y c #00007D7DFDFD", "u c #00008181FDFD", "i c #00008383FDFD", "p c #00008787FDFD", "a c #00008787FFFF", "s c #00008989FDFD", "d c #00008989FFFF", "f c #00009393FFFF", "g c #0B0B9595F1F1", "h c #0F0F9797F1F1", "j c #10109797F2F2", "k c #13139999F2F2", "l c #14149999F2F2", "z c #14149A9AF2F2", "x c #18189B9BF3F3", "c c #19199C9CF3F3", "v c #1A1A9C9CF3F3", "b c #1F1F9B9BF4F4", "n c #1E1E9D9DF4F4", "m c #1F1F9E9EF4F4", "M c #1F1F9F9FF4F4", "N c #20209F9FF4F4", "B c #2B2BA4A4EEEE", "V c #2525A0A0F5F5", "C c #2525A2A2F5F5", "Z c #2626A2A2F5F5", "A c #2B2BA4A4F6F6", "S c #2B2BA5A5F6F6", "D c #2C2CA2A2F2F2", "F c #2F2FA4A4F2F2", "G c #2C2CA6A6F6F6", "H c #3C3CACACE5E5", "J c #3232A5A5F3F3", "K c #3333A6A6F3F3", "L c #3131A8A8F7F7", "P c #3131A9A9F7F7", "I c #3535A8A8F3F3", "U c #3737ABABF2F2", "Y c #3636A8A8F4F4", "T c #3737A8A8F8F8", "R c #3737ABABF8F8", "E c #3939A9A9F4F4", "W c #3B3BAAAAF5F5", "Q c #3D3DABABF5F5", "! c #3F3FADADF5F5", "~ c #3A3AAAAAF9F9", "^ c #3D3DADADF9F9", "/ c #3F3FAEAEFAFA", "( c #4242ABABF6F6", ") c #4444AFAFF6F6", "_ c #4242AEAEFAFA", "` c #4747B0B0F6F6", "' c #4444B1B1FAFA", "] c #4545B0B0FBFB", "[ c #4949B2B2F7F7", "{ c #4B4BB2B2F7F7", "} c #4E4EB4B4F7F7", "| c #4E4EB6B6F7F7", " . c #4949B4B4FBFB", ".. c #4F4FB6B6FCFC", "X. c #5050B3B3F8F8", "o. c #5353B7B7F8F8", "O. c #5454B7B7F9F9", "+. c #5353B8B8FDFD", "@. c #5959BBBBF2F2", "#. c #5858B9B9F9F9", "$. c #5858BBBBF9F9", "%. c #5858B9B9FEFE", "&. c #5858BBBBFEFE", "*. c #5959BABAFEFE", "=. c #5C5CBBBBFAFA", "-. c #5D5DBCBCFAFA", ";. c #5C5CBDBDFEFE", ":. c #5C5CBEBEFEFE", ">. c #5F5FBFBFFEFE", ",. c #6161BEBEFBFB", "<. c #6969BFBFFCFC", "1. c #7575C1C1A3A3", "2. c #7878C3C3A1A1", "3. c #7B7BC6C6B2B2", "4. c #6565C0C0FCFC", "5. c #6666C0C0FCFC", "6. c #6A6AC3C3FCFC", "7. c #6D6DC3C3FDFD", "8. c #6F6FC4C4FDFD", "9. c #7070C4C4FEFE", "0. c #7272C6C6FEFE", "q. c #7474C4C4FEFE", "w. c #7676C8C8FEFE", "e. c #7777C8C8FEFE", "r. c #7979C8C8FEFE", "t. c #7979C9C9FEFE", "y. c #7B7BCACAFFFF", "u. c #FFFFFCFC0000", "i. c #FFFFFCFC0303", "p. c #FEFEFCFC0505", "a. c #FFFFFCFC0404", "s. c #FCFCFAFA1212", "d. c #FDFDFBFB1616", "f. c #FEFEFCFC1A1A", "g. c #FEFEFCFC1E1E", "h. c #F2F2F7F72626", "j. c #F2F2F8F82A2A", "k. c #F8F8F7F72121", "l. c #F1F1F5F53636", "z. c #FBFBFAFA3434", "x. c #C4C4E1E15B5B", "c. c #DBDBEBEB4545", "v. c #DDDDEDED5353", "b. c #C4C4E2E26161", "n. c #CACAE8E87F7F", "m. c #9E9ED5D58E8E", "M. c #8484CACAB2B2", "N. c #8585CCCCBDBD", "B. c #A7A7DADA9999", "V. c #8B8BCFCFC7C7", "C. c #C9C9E9E98383", "Z. c None", /* pixels */ "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "f d d d d u u y t w 0 9 7 6 3 5 ", "a y.y.y.w.q.8.7.<.4.,.=.#.o.} < ", "d y.>.;.%.V.C.C.N._ ^ T P G [ < ", "d y.;.%.B.g.u.f.z.M.T P S Z ) ; ", "a w.%.$.j.u.u.u.d.v.U S Z N ! = ", "a q.+.@.a.u.u.u.u.l.H Z n x Q * ", "u 8...| h.u.u.u.s.c.B N x z Y % ", "t <. .] m.d.a.s.k.1.N x z h K @ ", "t 4._ / ~ 3.b.x.1.n x k h g J O ", "0 ,.-.#.$.} [ ) ( ! E Y J F D . ", "q 8 7 3 2 1 > : = = & $ @ X . # ", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z." }; springlobby-0.169/src/images/flags/PY.xpm0000600000176000000410000000745412105760300021637 0ustar buildbotwww-data00000000000000/* XPM */ static const char *PY_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 148 2", " c black", ". c #00000000A7A7", "X c #00000000ABAB", "o c #00000000ADAD", "O c #00000000AFAF", "+ c #00000000B1B1", "@ c #00000000B5B5", "# c #00000000B9B9", "$ c #00000000BBBB", "% c #00000000BDBD", "& c #00000000C1C1", "* c #00000000C3C3", "= c #00000000C7C7", "- c #00000000C9C9", "; c #00000303CDCD", ": c #00000B0BCFCF", "> c #00001111D1D1", ", c #36365858D6D6", "< c #39395C5CD7D7", "1 c #3D3D5E5ED9D9", "2 c #42426262DADA", "3 c #46466666DCDC", "4 c #4B4B6A6ADDDD", "5 c #50506F6FDADA", "6 c #50506E6EDFDF", "7 c #53537070DCDC", "8 c #54547070DCDC", "9 c #55557373DDDD", "0 c #59597575DDDD", "q c #5C5C7878DFDF", "w c #54547272E1E1", "e c #59597676E2E2", "r c #5D5D7A7AE4E4", "t c #60607B7BE0E0", "y c #62627E7EE4E4", "u c #64647F7FE2E2", "i c #70708181CACA", "p c #66668282E6E6", "a c #68688282E2E2", "s c #6B6B8585E4E4", "d c #6F6F8989E6E6", "f c #73738C8CE7E7", "g c #77778F8FE8E8", "h c #7A7A9393E8E8", "j c #7F7F9696EAEA", "k c #E9E900000000", "l c #EBEB00000000", "z c #EDED00000000", "x c #EFEF00000000", "c c #F1F100000000", "v c #F3F300000000", "b c #F5F500000000", "n c #F7F700000000", "m c #F9F900000000", "M c #FBFB00000000", "N c #FDFD00000000", "B c red", "V c #F6F62C2C2C2C", "C c #F7F731313131", "Z c #F8F837373737", "A c #F9F93C3C3D3D", "S c #F7F749494949", "D c #F7F74E4E4E4E", "F c #FAFA42424242", "G c #FBFB47474747", "H c #FCFC4C4C4C4C", "J c #F8F853535353", "K c #F9F957575757", "L c #FDFD51515151", "P c #FDFD54545454", "I c #FAFA5C5C5C5C", "U c #FEFE59595959", "Y c #FEFE5C5C5C5C", "T c #FEFE5F5F5F5F", "R c #EAEA79797373", "E c #FBFB60606060", "W c #FCFC65656565", "Q c #FCFC69696969", "! c #FDFD6D6D6D6D", "~ c #FDFD70707171", "^ c #FEFE74747474", "/ c #FEFE77777777", "( c #FEFE79797979", ") c #FFFF7B7B7A7A", "_ c #FFFF7B7B7B7B", "` c #9A9ABDBD7A7A", "' c #EAEA80807979", "] c #83839999EBEB", "[ c #F1F18D8D8787", "{ c #F3F392928C8C", "} c #CFCFD3D3DBDB", "| c #CFCFD1D1DFDF", " . c #CFCFD3D3E1E1", ".. c #D3D3D7D7E3E3", "X. c #E7E7DDDDDDDD", "o. c #F6F6CCCCC8C8", "O. c #F6F6D4D4D1D1", "+. c #F7F7D9D9D9D9", "@. c #F9F9D2D2D0D0", "#. c #F9F9DBDBD8D8", "$. c #FAFADEDEDEDE", "%. c #E7E7E9E9F0F0", "&. c #E9E9EAEAF0F0", "*. c #EAEAECECF1F1", "=. c #EBEBECECF2F2", "-. c #EBEBEDEDF2F2", ";. c #ECECEEEEF4F4", ":. c #EFEFEFEFF5F5", ">. c #EDEDEFEFF9F9", ",. c #EDEDF1F1F7F7", "<. c #EFEFF0F0F7F7", "1. c #EFEFF1F1F7F7", "2. c #EFEFF1F1FBFB", "3. c #EFEFF3F3FBFB", "4. c #F5F5EFEFEFEF", "5. c gray95", "6. c #F3F3F3F3F3F3", "7. c #F6F6F0F0F0F0", "8. c #F6F6F1F1F1F1", "9. c #F7F7F2F2F2F2", "0. c #F4F4F4F4F4F4", "q. c #F4F4F5F5F5F5", "w. c gray96", "e. c #F6F6F6F6F6F6", "r. c gray97", "t. c #F0F0F2F2F8F8", "y. c #F2F2F3F3F9F9", "u. c #F3F3F4F4FAFA", "i. c #F4F4F5F5FAFA", "p. c #F7F7F7F7FCFC", "a. c #F8F8F3F3F3F3", "s. c #F9F9F4F4F4F4", "d. c #FAFAF4F4F5F5", "f. c #FBFBF5F5F5F5", "g. c #FCFCF6F6F6F6", "h. c #FDFDF7F7F7F7", "j. c #FFFFF5F5F5F5", "k. c gray98", "l. c #FBFBFBFBFBFB", "z. c #FBFBFCFCFBFB", "x. c #FDFDF8F8F8F8", "c. c #FEFEF9F9F9F9", "v. c #FEFEFBFBFBFB", "b. c gray99", "n. c #FDFDFCFCFDFD", "m. c #FDFDFDFDFDFD", "M. c #FEFEFEFEFEFE", "N. c None", /* pixels */ "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "B B B B M B B M M M n n v v z z ", "B _ _ _ ^ ^ ~ ! Q W E I K L D k ", "B _ T U U P L H G F A Z C V S k ", "j.v.v.v.v.j.g.g.g.a.a.9.6.4.6.X.", "3.M.M.M.v.k.$.{ [ +.r.w.9.w.w...", "3.M.M.z.z.k.@.` i o.e.w.w.6.6. .", ";.M.z.l.z.v.#.' R O.w.w.6.5.w. .", "3.i.i.i.y.t.t.t.:.:.&.&.&.%.&.} ", "> ] p y r e w 4 4 3 2 1 < , 8 . ", ": j h g f f s a u r r 0 9 7 7 . ", "; - - * & % $ $ @ + X X X . . . ", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.", "N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N." }; springlobby-0.169/src/images/flags/QA.xpm0000600000176000000410000000572512105760300021607 0ustar buildbotwww-data00000000000000/* XPM */ static const char *QA_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 108 2", " c black", ". c #050500000000", "X c #0D0D00000000", "o c #131300000000", "O c #171700000000", "+ c #1B1B00000000", "@ c #212100000000", "# c #252500000000", "$ c #57570D0D0505", "% c #5A5A1A1A1111", "& c #5E5E1D1D1515", "* c #5E5E1D1D1616", "= c #606022221A1A", "- c #606022221B1B", "; c #626222221B1B", ": c #646426261F1F", "> c #646427271F1F", ", c #646427272020", "< c #68682B2B2424", "1 c #68682C2C2525", "2 c #68682D2D2525", "3 c #69692D2D2626", "4 c #6C6C31312929", "5 c #6C6C32322A2A", "6 c #6D6D32322B2B", "7 c #6D6D33332C2C", "8 c #707036362E2E", "9 c #707036362F2F", "0 c #707037372F2F", "q c #707037373131", "w c #707038383131", "e c #717138383131", "r c #727239393232", "t c #72723B3B3434", "y c #72723B3B3535", "u c #74743B3B3434", "i c #74743C3C3434", "p c #74743C3C3535", "a c #75753C3C3636", "s c #75753D3D3636", "d c #75753E3E3737", "f c #75753F3F3737", "g c #76763E3E3737", "h c #777741413B3B", "j c #787841413939", "k c #787841413A3A", "l c #787842423B3B", "z c #797942423A3A", "x c #797942423C3C", "c c #797943433C3C", "v c #7A7A43433D3D", "b c #7A7A45453F3F", "n c #7C7C47473F3F", "m c #7B7B46464040", "M c #7D7D47474040", "N c #7D7D47474141", "B c #7C7C49494242", "V c #7D7D48484242", "C c #7E7E48484242", "Z c #7F7F4B4B4545", "A c #7F7F4D4D4646", "S c #81814C4C4545", "D c #81814D4D4747", "F c #828250504949", "G c #838351514B4B", "H c #858552524B4B", "J c #858552524D4D", "K c #848454544E4E", "L c #868655555050", "P c #888857575050", "I c #898957575151", "U c #8A8A59595353", "Y c #8C8C5B5B5555", "T c #8C8C5D5D5858", "R c #8F8F61615C5C", "E c #929266666161", "W c #939366666161", "Q c #96966A6A6565", "! c #99996E6E6A6A", "~ c #99996F6F6A6A", "^ c #9C9C73736D6D", "/ c #9E9E76767070", "( c #A0A077777373", ") c #A1A179797575", "_ c #A6A680807C7C", "` c #E3E3E3E3E1E1", "' c #E7E7E5E5E5E5", "] c #E9E9E7E7E7E7", "[ c #EBEBE9E9E9E9", "{ c #EFEFEDEDEBEB", "} c #F1F1EFEFEDED", "| c #F1F1EFEFEFEF", " . c #F1F1F1F1F1F1", ".. c #F3F3F1F1F1F1", "X. c #F5F5F3F3F3F3", "o. c #F5F5F5F5F3F3", "O. c #F7F7F5F5F5F5", "+. c #F9F9F5F5F5F5", "@. c #F8F8F8F8F8F8", "#. c #F9F9F9F9F9F9", "$. c gray98", "%. c #FBFBFBFBFBFB", "&. c #FBFBFCFCFBFB", "*. c gray99", "=. c #FDFDFDFDFDFD", "-. c #FEFEFEFEFEFE", ";. c gray100", ":. c None", /* pixels */ ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", "+.O.O.O.O.$ # @ + o X . ", "+.;.;.;.%.;.) / ^ ~ Q W R T U ", "O.;.;.;.;.) Y I J S C v g r K ", "O.;.;.;.;.;.L H D C l g r 7 F ", "O.;.;.%.%./ H S N v g q 5 3 Z ", "..;.;.$.*.$.S n l g 7 7 3 , C ", "| ;.$.%.$.! n l g 7 5 3 , ; l ", "..$.%.%.%.+.h i 9 5 < : = * g ", "{ ;.%.%.%.E g 9 5 < : = * % y ", "| $.$.%.%.@.K F A C b h g y r ", "{ [ ' ' ` O ", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:." }; springlobby-0.169/src/images/flags/RE.xpm0000600000176000000410000000662712105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char *RE_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 131 2", " c black", ". c #17174747A5A5", "X c #23234F4FABAB", "o c #2D2D5757AFAF", "O c #35355F5FB5B5", "+ c #3F3F6767B9B9", "@ c #49497171BDBD", "# c #53537777C3C3", "$ c #5B5B7F7FC7C7", "% c #63638585CBCB", "& c #69698989CDCD", "* c #6F6F8F8FD1D1", "= c #71719191D1D1", "- c #73739393D3D3", "; c #73739595D3D3", ": c #C5C500000000", "> c #C7C700000000", ", c #CBCB00000000", "< c #CDCD00000000", "1 c #D3D300000000", "2 c #D5D500000000", "3 c #DBDB00000000", "4 c #DDDD00000000", "5 c #E1E100000000", "6 c #E5E500000000", "7 c #E7E700000000", "8 c #EBEB00000000", "9 c #EFEF07070000", "0 c #F1F113130000", "q c #E6E64D4D3E3E", "w c #E8E852524343", "e c #E9E956564848", "r c #EAEA57574848", "t c #EAEA57574A4A", "y c #EBEB5D5D4F4F", "u c #ECEC5E5E5050", "i c #E8E863635555", "p c #EEEE63635555", "a c #EEEE64645656", "s c #EEEE64645757", "d c #E9E966665959", "f c #E9E966665A5A", "g c #EAEA69695D5D", "h c #EAEA6A6A5D5D", "j c #EFEF69695C5C", "k c #F0F06A6A5C5C", "l c #F0F06C6C5D5D", "z c #ECEC6D6D6161", "x c #ECEC6E6E6262", "c c #EDED74746868", "v c #EFEF78786C6C", "b c #F1F170706363", "n c #F1F170706464", "m c #F2F271716464", "M c #F3F377776A6A", "N c #F3F377776B6B", "B c #F1F17E7E7272", "V c #F5F57D7D7272", "C c #F2F284847878", "Z c #F4F488887E7E", "A c #9F9F9F9F9F9F", "S c #A7A7A7A7A7A7", "D c gray68", "F c #B3B3B0B0B0B0", "G c gray72", "H c gray", "J c #9797ACACD8D8", "K c #9C9CB0B0DADA", "L c #A0A0B4B4DDDD", "P c #A0A0B5B5DDDD", "I c #A1A1B5B5DDDD", "U c #A3A3B5B5DCDC", "Y c #A5A5B8B8DFDF", "T c #A5A5B9B9DFDF", "R c #A7A7B9B9DDDD", "E c #A6A6B9B9E0E0", "W c #A9A9BCBCE1E1", "Q c #A9A9BDBDE1E1", "! c #AAAABDBDE0E0", "~ c #AAAABDBDE1E1", "^ c #AEAEBFBFE3E3", "/ c #AFAFBFBFE2E2", "( c #AEAEBFBFE4E4", ") c #AEAEC0C0E4E4", "_ c #B1B1C2C2E5E5", "` c #B1B1C3C3E5E5", "' c #B2B2C3C3E5E5", "] c #B3B3C3C3E4E4", "[ c #B4B4C5C5E7E7", "{ c #B7B7C7C7E6E6", "} c #B7B7C8C8E8E8", "| c #BABAC9C9E8E8", " . c #BEBECCCCE9E9", ".. c #F5F58D8D8383", "X. c #F7F793938989", "o. c #F8F897978E8E", "O. c #CECECECECECE", "+. c gray81", "@. c #D2D2D2D2D2D2", "#. c #D5D5D5D5D5D5", "$. c gainsboro", "%. c #DFDFDFDFDFDF", "&. c #C0C0CECEEAEA", "*. c #C1C1CFCFEBEB", "=. c #C3C3D0D0ECEC", "-. c #C3C3D1D1ECEC", ";. c #C4C4D2D2EDED", ":. c #C4C4D3D3EDED", ">. c #E2E2E2E2E2E2", ",. c #E4E4E4E4E4E4", "<. c gray90", "1. c #E6E6E6E6E6E6", "2. c #E7E7E7E7E7E7", "3. c gray91", "4. c #E9E9E9E9E9E9", "5. c #E9E9E9E9EAEA", "6. c #EAEAEAEAEAEA", "7. c gray92", "8. c #ECECEBEBEBEB", "9. c #ECECECECECEC", "0. c gray93", "q. c #EEEEEEEEEEEE", "w. c #EFEFEFEFEFEF", "e. c gray94", "r. c #F1F1F1F1F1F1", "t. c #F3F3F3F3F3F3", "y. c #F4F4F4F4F4F4", "u. c #F6F6F6F6F6F6", "i. c gray97", "p. c #F8F8F8F8F8F8", "a. c None", /* pixels */ "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "; ; ; ; - $.$.#.@.O.@.0 9 8 6 6 ", "; :.:.*.*.p.i.i.i.i.t.o.X...Z 5 ", "; :.} [ ' q.7.6.6.6.<.V N m C 4 ", "- *.[ ' ) w.7.q.6.6.<.M m l B 4 ", "* &.' ( ~ q.q.8.6.<.<.b j s v 2 ", "& .) Q Y t.q.q.q.6.6.j s u c 2 ", "% } Q E U q.q.q.6.6.<.p y e x < ", "$ { E U K q.q.6.2.<.<.y e w h , ", "# ' K K J 7.6.<.<.<.>.e w q f > ", "@ / ~ Y U q.q.6.6.<.<.x h f i > ", "+ O o X . H G F D S A < , > : > ", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.", "a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a." }; springlobby-0.169/src/images/flags/RO.xpm0000600000176000000410000000770712105760300021630 0ustar buildbotwww-data00000000000000/* XPM */ static const char *RO_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 153 2", " c black", ". c #00000000A9A9", "X c #00000000ABAB", "o c #00000000ADAD", "O c #00000000AFAF", "+ c #00000000B3B3", "@ c #00000000B5B5", "# c #00000000B7B7", "$ c #00000707BBBB", "% c #00000D0DBDBD", "& c #00001313BFBF", "* c #00001919C1C1", "= c #00001919C3C3", "- c #00001D1DC3C3", "; c #00001D1DC5C5", ": c #00001D1DC9C9", "> c #00002B2BC7C7", ", c #3F3F6B6BD5D5", "< c #3A3A6868D8D8", "1 c #44446F6FD6D6", "2 c #40406C6CD9D9", "3 c #45457070D7D7", "4 c #45457171DBDB", "5 c #49497474D8D8", "6 c #49497474D9D9", "7 c #4B4B7575DDDD", "8 c #4F4F7878DADA", "9 c #4F4F7878DBDB", "0 c #50507979DEDE", "q c #53537C7CDBDB", "w c #54547C7CDCDC", "e c #54547C7CDDDD", "r c #54547D7DDFDF", "t c #58587F7FDADA", "y c #58588080DCDC", "u c #58588080DDDD", "i c #5D5D8383DBDB", "p c #5C5C8383DEDE", "a c #5F5F8585DFDF", "s c #59598181E0E0", "d c #61618686DDDD", "f c #66668A8ADEDE", "g c #6A6A8E8EE0E0", "h c #6F6F9191E0E0", "j c #72729494E2E2", "k c #76769797E3E3", "l c #77779898E7E7", "z c #79799999E4E4", "x c #79799999E5E5", "c c #7B7B9A9AE4E4", "v c #7B7B9B9BE4E4", "b c #DDDD00000000", "n c #DFDF00000000", "m c #E1E100000000", "M c #E3E300000000", "N c #E5E500000000", "B c #E7E700000000", "V c #E9E900000000", "C c #EBEB00000000", "Z c #EDED00000000", "A c #EFEF00000000", "S c #F1F100000000", "D c #F3F300000000", "F c #F5F500000000", "G c #F1F10B0B0B0B", "H c #F1F10F0F0E0E", "J c #F2F210101010", "K c #F2F213131313", "L c #F2F214141414", "P c #F3F319191919", "I c #F3F31A1A1A1A", "U c #F4F41F1F1F1F", "Y c #F4F420202020", "T c #F5F525252525", "R c #F5F526262626", "E c #F2F22C2C2C2C", "W c #F2F22F2F2F2F", "Q c #F6F62B2B2B2B", "! c #F6F62C2C2C2C", "~ c #F2F232323232", "^ c #F3F332323232", "/ c #F3F335353535", "( c #F7F731313131", ") c #F4F436363636", "_ c #F4F43B3B3B3B", "` c #F5F53F3F3F3F", "' c #F8F837373737", "] c #F6F644444444", "[ c #F7F749494949", "{ c #F7F74E4E4E4E", "} c #F8F853535353", "| c #F9F957575757", " . c #FAFA5C5C5C5C", ".. c #E3E3A9A90000", "X. c #E5E5B9B90000", "o. c #E7E7BDBD0000", "O. c #E9E9BDBD0000", "+. c #EBEBC1C10000", "@. c #EFEFDDDD0000", "#. c #F7F7D5D50000", "$. c #F3F3DDDD0000", "%. c #F5F5DFDF0000", "&. c #F7F7E1E10000", "*. c #F7F7E3E30000", "=. c #F3F3E3E31919", "-. c #F4F4E5E51F1F", ";. c #F4F4F4F41E1E", ":. c #F5F5E6E62424", ">. c #F6F6E8E82B2B", ",. c #F4F4E7E73939", "<. c #F7F7E9E93030", "1. c #F8F8EAEA3636", "2. c #F9F9ECEC3D3D", "3. c #F5F5F5F52323", "4. c #F5F5F5F52424", "5. c #F6F6F6F62929", "6. c #F6F6F6F62A2A", "7. c #F7F7F7F72E2E", "8. c #F7F7F7F72F2F", "9. c #F7F7F7F73030", "0. c #F0F0F0F03A3A", "q. c #F5F5F5F53D3D", "w. c #F8F8F8F83434", "e. c #F8F8F8F83535", "r. c #F8F8F8F83636", "t. c #F9F9F9F93A3A", "y. c #F9F9F9F93B3B", "u. c #F9F9F9F93C3C", "i. c #F1F1F1F14040", "p. c #F2F2F2F24646", "a. c #F6F6F6F64242", "s. c #F7F7F7F74646", "d. c #F3F3F3F34B4B", "f. c #F7F7F7F74B4B", "g. c #FAFAFAFA4040", "h. c #FAFAFAFA4141", "j. c #FAFAFAFA4242", "k. c #FBFBFBFB4646", "l. c #FBFBFBFB4747", "z. c #FCFCFCFC4B4B", "x. c #FCFCFCFC4C4C", "c. c #F2F2F2F25555", "v. c #F4F4F4F45050", "b. c #F5F5F5F55656", "n. c #F6F6F6F65A5A", "m. c #FDFDFDFD5151", "M. c #FBFBF0F06060", "N. c #FCFCFCFC6565", "B. c #FCFCFCFC6969", "V. c #FDFDFDFD6D6D", "C. c #FDFDFDFD7171", "Z. c #F8F8F8F87878", "A. c None", /* pixels */ "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "> - - ; : $.*.*.%.$.#.F D D Z Z ", "= v v v l Z.C.V.B.N.M. .| } { C ", "- v a p r n.m.x.l.h.2.' ( ! [ C ", "- z p u r b.x.l.h.u.1.( Q R ] N ", "= k t w 0 v.l.h.u.r.<.Q R Y ` N ", "& j q 8 7 d.u.t.r.9.>.R U P _ N ", "% h 8 6 4 p.t.r.9.6.:.U P K ) N ", "$ f 6 4 2 i.r.7.6.4.-.P K K ^ n ", "# f 1 , < 0.7.6.3.;.=.K H G W n ", "+ d i i w c.f.s.a.q.,./ ^ W E n ", "+ + . . o o.+.O.o.X...m n n b b ", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.", "A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A." }; springlobby-0.169/src/images/flags/RS.xpm0000600000176000000410000000630712105760300021627 0ustar buildbotwww-data00000000000000/* XPM */ static const char *RS_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 120 2", " c black", ". c #00001A1A6C6C", "X c #00001D1D7676", "o c #00001D1D7878", "O c #00001E1E7A7A", "+ c #000054549696", "@ c #000054549797", "# c #000055559797", "$ c #000055559898", "% c #000056569999", "& c #000056569A9A", "* c #000056569B9B", "= c #000056569C9C", "- c #000057579C9C", "; c #000057579E9E", ": c #000059599F9F", "> c #00005A5AA1A1", ", c #00005A5AA2A2", "< c #00005B5BA4A4", "1 c #00005C5CA4A4", "2 c #00005D5DA7A7", "3 c #30307373A4A4", "4 c #30307373A5A5", "5 c #34347E7EB3B3", "6 c #35357F7FB6B6", "7 c #36368282B8B8", "8 c #BFBF00000000", "9 c #C1C100000000", "0 c #C3C300000000", "q c #C5C500000000", "w c #C7C700000000", "e c #C9C900000000", "r c #CBCB00000000", "t c #CDCD00000000", "y c #D0D000000000", "u c #D2D200000000", "i c #D5D500000000", "p c #D7D700000000", "a c #D9D900000000", "s c #DADA00000000", "d c #DBDB00000000", "f c #DDDD00000000", "g c #C4C43C3C3F3F", "h c #D0D031313131", "j c #D2D231313131", "k c #D3D332323232", "l c #D4D432323232", "z c #D5D532323232", "x c #D6D632323232", "c c #D7D732323232", "v c #D7D733333333", "b c #D2D235353B3B", "n c #D8D833333333", "m c #D9D933333333", "M c #DBDB34343434", "N c #DDDD34343434", "B c #E0E000000000", "V c #E1E100000000", "C c #E2E200000000", "Z c #E4E400000000", "A c #E5E536363636", "S c #E7E736363636", "D c #E9E937373737", "F c #EBEB37373737", "G c #C8C83D3D4141", "H c #CDCD3E3E4242", "J c #CECE3E3E4343", "K c #D0D03F3F4343", "L c #D0D03F3F4545", "P c #D5D541414545", "I c #D8D857574E4E", "U c #D9D958584F4F", "Y c #DCDC59595050", "T c #DEDE5A5A5151", "R c #D1D15D5D6060", "E c #D2D25E5E6161", "W c #CECE6E6E7272", "Q c #D0D071717474", "! c #D7D777777979", "~ c #DDDD7A7A7C7C", "^ c #E0E05B5B5151", "/ c #E3E35C5C5252", "( c #E5E55D5D5353", ") c #E7E75E5E5454", "_ c #E9E95F5F5555", "` c #EBEB60605656", "' c #EDED61615656", "] c #E5E57E7E5454", "[ c #F0F062625757", "{ c #F3F363635757", "} c #F5F564645858", "| c #F5F564645959", " . c #F5F565655959", ".. c #F5F566665A5A", "X. c #E8E880805555", "o. c #F5F5F5F57676", "O. c #F5F5F5F57777", "+. c #EDEDA3A3A4A4", "@. c #EEEEB8B8B8B8", "#. c #F1F1BABABABA", "$. c #EBEBC2C2C3C3", "%. c #EDEDC3C3C4C4", "&. c #E9E9CCCCCECE", "*. c #EDEDD0D0D1D1", "=. c #F0F0C7C7C7C7", "-. c gray90", ";. c #E6E6E6E6E6E6", ":. c #E7E7E7E7E7E7", ">. c #E9E9E9E9E9E9", ",. c gray92", "<. c gray93", "1. c #EFEFEFEFEFEF", "2. c gray94", "3. c #F1F1F1F1F1F1", "4. c gray95", "5. c #F3F3F3F3F3F3", "6. c #F5F5F1F1F1F1", "7. c #F4F4F4F4F4F4", "8. c gray96", "9. c None", /* pixels */ "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "Z B B f f p p i u u u r r r q q ", "B .. .} } { ' ' ) ) / / ^ T T 9 ", "f ..S S b ] ] L M M M z z k I 9 ", "f { S S P o.o.H M n z z k k I 9 ", "O 7 2 2 +.K H @.* * * $ $ $ 4 . ", "X 6 < , #.8.6.=.* * $ $ $ @ 3 . ", "X 5 , : ~ E E ! * $ $ $ @ @ 3 . ", "8.8.8.8.G %.$.g 8.5.3.3.3.1.8.-.", "8.8.8.8.*.Q W &.5.3.3.3.1.3.3.-.", "3.8.8.8.8.8.8.3.3.3.3.3.3.3.3.-.", "1.:.:.:.:.:.-.-.-.-.-.-.-.-.-.-.", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9." }; springlobby-0.169/src/images/flags/RU.xpm0000600000176000000410000000711412105760300021626 0ustar buildbotwww-data00000000000000/* XPM */ static const char *RU_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 137 2", " c black", ". c #7B7B00000000", "X c #00000000E3E3", "o c #00000000E5E5", "O c #00000000E7E7", "+ c #00000000FDFD", "@ c #14141414F2F2", "# c #19191919F3F3", "$ c #1A1A1A1AF3F3", "% c #1F1F1F1FF4F4", "& c #20202020F4F4", "* c #24242424F5F5", "= c #25252525F5F5", "- c #2A2A2A2AF6F6", "; c #2A2A2B2BF6F6", ": c #2B2B2B2BF6F6", "> c #2F2F2F2FF7F7", ", c #30303030F7F7", "< c #36363636F4F4", "1 c #35353535F8F8", "2 c #36363636F8F8", "3 c #3B3B3B3BF5F5", "4 c #3F3F3F3FF5F5", "5 c #3B3B3B3BF9F9", "6 c #40404040FAFA", "7 c #41414141FAFA", "8 c #45454545FBFB", "9 c #46464646FBFB", "0 c #49494A4AFBFB", "q c #49494949FFFF", "w c #4B4B4A4AFCFC", "e c #4B4B4B4BFCFC", "r c #4F4F4F4FFCFC", "t c #50504F4FFDFD", "y c #53535353FDFD", "u c #54545454FDFD", "i c #58585858FEFE", "p c #6F6F6F6FFDFD", "a c #72727272FEFE", "s c #76767676FEFE", "d c #7D7D7D7DF5F5", "f c #B3B300000000", "g c #BDBD10104343", "h c #BFBF14144646", "j c #DDDD00000000", "k c #DFDF00000000", "l c #E1E100000000", "z c #E3E300000000", "x c #E5E500000000", "c c #E7E700000000", "v c #E9E900000000", "b c #EBEB00000000", "n c #EDED00000000", "m c #EFEF00000000", "M c #F1F100000000", "N c #F3F300000000", "B c #F5F500000000", "V c #F7F700000000", "C c #F1F10B0B0B0B", "Z c #F1F10F0F0E0E", "A c #F9F900000000", "S c #F2F213131313", "D c #F3F319191919", "F c #F4F41E1E1E1E", "G c #F5F523232323", "H c #F2F22C2C2C2C", "J c #F2F22F2F2F2F", "K c #F6F629292929", "L c #F7F72E2E2E2E", "P c #F2F232323232", "I c #F3F335353535", "U c #F4F439393939", "Y c #F5F53D3D3D3D", "T c #F8F834343434", "R c #F9F93A3A3A3A", "E c #FAFA3F3F3F3F", "W c #C2C219194B4B", "Q c #C4C41F1F4F4F", "! c #C6C624245353", "~ c #C8C82A2A5858", "^ c #CACA2F2F5D5D", "/ c #C8C832325E5E", "( c #CCCC34346161", ") c #CECE3A3A6666", "_ c #D0D03F3F6A6A", "` c #D1D145456E6E", "' c #D3D349497272", "] c #F6F642424242", "[ c #F7F746464646", "{ c #F7F74B4B4B4B", "} c #FAFA44444444", "| c #F8F850505050", " . c #F9F954545555", ".. c #F9F958585858", "X. c #FAFA5D5D5D5D", "o. c #FBFB61616262", "O. c #FCFC66666666", "+. c #DCDC6A6A8C8C", "@. c #81818181F6F6", "#. c #85858585F7F7", "$. c #8F8F8F8FF6F6", "%. c #88888888F8F8", "&. c #8C8C8C8CF9F9", "*. c #8F8F8F8FFAFA", "=. c #93939393FBFB", "-. c #96969696FCFC", ";. c #98989898FDFD", ":. c #9B9B9B9BFDFD", ">. c #9E9E9E9EFEFE", ",. c #A0A0A0A0FEFE", "<. c #B1B1B1B1FEFE", "1. c #DDDDDDDDE9E9", "2. c #DFDFDFDFEBEB", "3. c #E1E1E3E3EFEF", "4. c #E5E5E5E5EFEF", "5. c #E7E7E7E7F1F1", "6. c #E9E9E9E9F3F3", "7. c #EBEBEBEBF5F5", "8. c #EDEDEDEDF7F7", "9. c #EFEFEFEFF9F9", "0. c #EFEFEFEFFBFB", "q. c #F6F6F6F6F6F6", "w. c gray97", "e. c #F1F1F1F1FDFD", "r. c #F3F3F3F3FDFD", "t. c #F5F5F5F5FDFD", "y. c #F5F5F5F5FFFF", "u. c #F8F8F8F8F8F8", "i. c #F9F9F9F9F9F9", "p. c gray98", "a. c #FBFBFBFBFBFB", "s. c gray99", "d. c #FDFDFDFDFDFD", "f. c #FDFDFDFDFEFE", "g. c #FEFEFEFEFEFE", "h. c gray100", "j. c None", /* pixels */ "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "y.y.y.y.y.y.e.e.0.0.8.7.6.5.4.3.", "y.h.h.h.h.h.h.a.p.h.p.p.p.p.q.2.", "y.h.h.h.h.p.h.a.p.p.p.p.q.q.q.2.", "q <.,.>.;.;.-.=.*.%.%.#.@.d $.o ", "+ s i u t e 9 7 5 2 , : = % 4 o ", "+ a y t q 9 4 5 2 , : = % # 3 o ", "+ p r e 9 6 5 2 > : = % # @ < o ", "f +.' ` _ ) ( ^ ~ ! Q W h g / . ", "A O.[ E R T L K G F D S Z C J k ", "A o.X. . .| { [ ] Y U I P J J j ", "B N N n n n n c c x x k k j j j ", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j." }; springlobby-0.169/src/images/flags/RW.xpm0000600000176000000410000001014112105760300021622 0ustar buildbotwww-data00000000000000/* XPM */ static const char *RW_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 160 2", " c black", ". c #000017170000", "X c #00001B1B0000", "o c #00001D1D0000", "O c #00001F1F0000", "+ c #000021210000", "@ c #000027270000", "# c #000029290000", "$ c #00002F2F0000", "% c #000035350000", "& c #000039390000", "* c #00003F3F0000", "= c #000043430000", "- c #000049490000", "; c #00004F4F0000", ": c #000055550000", "> c #00005B5B0000", ", c #000063630000", "< c #000079790000", "1 c #00003535E7E7", "2 c #00004343E7E7", "3 c #00004949E9E9", "4 c #00004949EBEB", "5 c #00005555EFEF", "6 c #00005757EFEF", "7 c #00005B5BF1F1", "8 c #00006161F3F3", "9 c #00006767F5F5", "0 c #00006B6BF7F7", "q c #00007171F9F9", "w c #00007373FBFB", "e c #00007777FDFD", "r c #00007B7BFDFD", "t c #00007D7DFDFD", "y c #1E1E99990B0B", "u c #23239B9B0E0E", "i c #27279E9E1313", "p c #2C2C9E9E2C2C", "a c #2F2F9F9F2F2F", "s c #2C2CA1A11919", "d c #3030A2A21E1E", "f c #3535A5A52323", "g c #3A3AA8A82929", "h c #3F3FABAB2E2E", "j c #3232A2A23232", "k c #3535A4A43535", "l c #3939A5A53939", "z c #3D3DA8A83D3D", "x c #4040A8A82F2F", "c c #4545ADAD3434", "v c #4A4AB0B03A3A", "b c #4F4FB3B33F3F", "n c #4242AAAA4242", "m c #4646ADAD4646", "M c #4B4BAFAF4B4B", "N c #5454B5B54444", "B c #5050B2B25050", "V c #5454B4B45555", "C c #5858B7B75858", "Z c #5D5DB9B95D5D", "A c #6161BBBB6262", "S c #7474C3C36666", "D c #03038181FDFD", "F c #05058383FFFF", "G c #07078383FFFF", "H c #0D0D8585FFFF", "J c #4D4D9F9FF2F2", "K c #5151A1A1F3F3", "L c #5050A4A4F6F6", "P c #5555A6A6F7F7", "I c #5A5AA9A9F8F8", "U c #5B5BAAAAF8F8", "Y c #5E5EACACF9F9", "T c #5F5FACACF9F9", "R c #6B6BADADE1E1", "E c #6161ABABF5F5", "W c #6262AEAEF9F9", "Q c #6666AFAFFAFA", "! c #6767B0B0FAFA", "~ c #6767B1B1FAFA", "^ c #6969B2B2FBFB", "/ c #6A6AB3B3FBFB", "( c #6B6BB3B3FBFB", ") c #6C6CB4B4FCFC", "_ c #6E6EB6B6FCFC", "` c #6F6FB6B6FCFC", "' c #7A7AB6B6EDED", "] c #7070B6B6FDFD", "[ c #7272B7B7FDFD", "{ c #7373B7B7FDFD", "} c #7373B8B8FDFD", "| c #7676BABAFDFD", " . c #7676BABAFEFE", ".. c #7E7EBCBCF7F7", "X. c #7979BCBCFEFE", "o. c #7A7ABCBCFEFE", "O. c #7F7FBEBEFBFB", "+. c #7C7CBDBDFEFE", "@. c #7C7CBEBEFEFE", "#. c #7F7FBFBFFEFE", "$. c #D5D5DDDD0000", "%. c #DFDFDFDF0000", "&. c #E3E3E3E30000", "*. c #F3F3F9F90000", "=. c #FBFBFBFB0000", "-. c #FDFDFDFD0000", ";. c #F2F2F2F21010", ":. c #F2F2F2F21414", ">. c #F3F3F3F31919", ",. c #F4F4F4F41F1F", "<. c #ECECF0F02424", "1. c #EDEDF1F12828", "2. c #EEEEF2F22D2D", "3. c #EFEFF3F33333", "4. c #F5F5F5F52424", "5. c #F6F6F6F62A2A", "6. c #F7F7F7F72F2F", "7. c #F3F3F3F33232", "8. c #F4F4F4F43636", "9. c #F1F1F4F43939", "0. c #F2F2F5F53E3E", "q. c #F8F8F8F83434", "w. c #F8F8F8F83535", "e. c #F9F9F9F93A3A", "r. c #FAFAFAFA3F3F", "t. c #CACAC2C25D5D", "y. c #D6D6C6C65454", "u. c #DFDFCACA5252", "i. c #C4C4C5C57979", "p. c #CFCFCACA7B7B", "a. c #E1E1C8C84848", "s. c #EDEDF2F24343", "d. c #F2F2F6F64343", "f. c #F3F3F7F74848", "g. c #F4F4F8F84E4E", "h. c #FAFAFAFA4040", "j. c #FBFBFBFB4545", "k. c #FBFBFBFB4949", "l. c #FBFBFCFC4949", "z. c #FCFCFCFC4F4F", "x. c #F5F5F9F95252", "c. c #F6F6FAFA5757", "v. c #F7F7FAFA5B5B", "b. c #FCFCFCFC6A6A", "n. c #FDFDFDFD6F6F", "m. c #F8F8FCFC7979", "M. c #8A8AB7B7CCCC", "N. c #8484C0C0FCFC", "B. c #8787C2C2FCFC", "V. c #8A8AC3C3FDFD", "C. c #8D8DC5C5FEFE", "Z. c #8F8FC7C7FEFE", "A. c #9090C7C7FEFE", "S. c #9191C8C8FEFE", "D. c #9494C8C8FEFE", "F. c #9494C9C9FEFE", "G. c #9595CACAFFFF", "H. c #D4D4CFCF8181", "J. c #D3D3D0D08787", "K. c None", /* pixels */ "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "H G G G D t r e w q 0 9 8 7 5 5 ", "G G.G.G.Z.Z.Z.V.B.N.O...J.J.' 3 ", "G G.@.+.+.| { ` ( ~ T i.u.a.p.3 ", "G G.+.+.| { ` / ~ W U R y.t.M.2 ", "t Z.| { ` ) ~ Q T U P L K J E 1 ", "*.m.v.c.x.g.f.d.0.9.7.2.1.1.s.$.", "-.n.z.l.j.h.e.q.6.5.4.,.:.:.9.&.", "=.b.k.j.r.e.q.6.5.4.4.>.:.;.7.%.", "< S N b v c h g f s s i u y x $ ", ", A Z C V B M m n z l k j a a . ", ", > : ; - = * & % $ # @ + o X o ", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.", "K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K." }; springlobby-0.169/src/images/flags/SA.xpm0000600000176000000410000000722312105760300021604 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SA_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 139 2", " c black", ". c #000007070000", "X c #00000F0F0000", "o c #000017170000", "O c #00001D1D0000", "+ c #000023230000", "@ c #00002B2B0000", "# c #000031310000", "$ c #000033330000", "% c #000037370000", "& c #000039390000", "* c #00003B3B0000", "= c #00003F3F0000", "- c #000041410000", "; c #000045450000", ": c #000047470000", "> c #000049490000", ", c #00004B4B0000", "< c #14146E6E1313", "1 c #181870701717", "2 c #1C1C72721B1B", "3 c #1F1F73731E1E", "4 c #202075751F1F", "5 c #212175752020", "6 c #222276762121", "7 c #232378782323", "8 c #26267A7A2626", "9 c #29297B7B2727", "0 c #29297B7B2929", "q c #2F2F7E7E2F2F", "w c #353582823333", "e c #353580803434", "r c #343482823434", "t c #363682823636", "y c #373782823636", "u c #383884843838", "i c #3A3A84843A3A", "p c #3A3A85853A3A", "a c #3B3B85853A3A", "s c #3E3E86863D3D", "d c #3F3F87873E3E", "f c #3C3C88883C3C", "g c #404088883F3F", "h c #40408A8A3F3F", "j c #41418A8A4040", "k c #43438A8A4242", "l c #44448A8A4545", "z c #44448C8C4343", "x c #45458C8C4444", "c c #47478D8D4646", "v c #47478F8F4646", "b c #49498F8F4848", "n c #4A4A91914949", "m c #4B4B91914A4A", "M c #4C4C90904B4B", "N c #4C4C91914C4C", "B c #4D4D91914D4D", "V c #4C4C92924C4C", "C c #4E4E91914D4D", "Z c #505094944F4F", "A c #515194945050", "S c #515196965151", "D c #525294945151", "F c #535397975252", "G c #545496965353", "H c #565697975555", "J c #575797975656", "K c #565699995656", "L c #57579A9A5656", "P c #5C5C97975C5C", "I c #5B5B9A9A5A5A", "U c #5B5B9A9A5B5B", "Y c #5B5B9B9B5B5B", "T c #5B5B9D9D5B5B", "R c #5C5C9B9B5B5B", "E c #5E5E9C9C5D5D", "W c #5F5FA0A05E5E", "Q c #60609E9E5F5F", "! c #60609A9A6262", "~ c #61619E9E6060", "^ c #6464A0A06464", "/ c #6464A2A26464", "( c #6666A2A26565", ") c #6666A2A26666", "_ c #6666A4A46666", "` c #6868A0A06969", "' c #6868A4A46868", "] c #6A6AA4A46A6A", "[ c #6D6DA6A66C6C", "{ c #6E6EA7A76D6D", "} c #7070A3A37373", "| c #7171A9A97070", " . c #7272AAAA7171", ".. c #7575ACAC7474", "X. c #7676ACAC7575", "o. c #7878AEAE7777", "O. c #7878A9A97979", "+. c #7A7AABAB7D7D", "@. c #7878AEAE7878", "#. c #7B7BB0B07A7A", "$. c #7B7BB0B07B7B", "%. c #7F7FB2B27F7F", "&. c #7F7FB3B37E7E", "*. c #8080ADAD8181", "=. c #8080B3B38080", "-. c #8181B3B38080", ";. c #8A8AB3B38C8C", ":. c #8989B4B48A8A", ">. c #8989B4B48B8B", ",. c #8A8AB5B58C8C", "<. c #8C8CB4B48D8D", "1. c #9191B7B79393", "2. c #9494BDBD9595", "3. c #9696BBBB9898", "4. c #9999BDBD9999", "5. c #9999BDBD9A9A", "6. c #9999C1C19A9A", "7. c #A3A3C2C2A4A4", "8. c #A1A1C4C4A4A4", "9. c #A8A8C8C8A9A9", "0. c #AAAAC9C9ACAC", "q. c #ADADC9C9ADAD", "w. c #AEAECBCBAFAF", "e. c #ADADCCCCACAC", "r. c #AFAFCCCCB1B1", "t. c #B1B1CBCBB1B1", "y. c #B0B0CBCBB2B2", "u. c #B3B3CDCDB3B3", "i. c #B3B3CCCCB4B4", "p. c #B3B3CCCCB5B5", "a. c #B6B6CDCDB6B6", "s. c #B6B6CFCFB6B6", "d. c #B6B6CECEB8B8", "f. c #B7B7D0D0B7B7", "g. c #B6B6D0D0B8B8", "h. c #BBBBD0D0BBBB", "j. c #BCBCD4D4BFBF", "k. c #CECEDFDFCFCF", "l. c None", /* pixels */ "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", ", , , , , ; - * % # @ + O o X . ", ", -.-.%.$.X.X. .{ ] / ~ E U H ", ", -._ / / _ R H R J N N j w A ", ", %.W 6.j.w.+.0.y.p.O.d.:.9 M ", "; $.T 2.w.g.5.p.1.;.` 7.<.7 c ", "- X.L 9.k.8.<.:.5.! } *.x 4 k ", "- ..L F G Z n x g u u 8 6 4 g ", "* .F n e.f.g.p.y.q.h.a.4 1 a ", "# { V v g f d q q 0 5.P 2 < y ", "@ ] ^ E R J A N b c j k u y q ", "+ O o o . ", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l." }; springlobby-0.169/src/images/flags/SB.xpm0000600000176000000410000000742712105760300021613 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SB_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 145 2", " c black", ". c #000009090000", "X c #0B0B67670B0B", "o c #0F0F6A6A0E0E", "O c #10106A6A1010", "+ c #13136C6C1313", "@ c #14146E6E1414", "# c #181870701919", "$ c #191970701919", "% c #1A1A70701A1A", "& c #1E1E74741E1E", "* c #1F1F74741F1F", "= c #202075752020", "- c #232377772323", "; c #252576762525", ": c #252577772525", "> c #262676762626", ", c #242478782424", "< c #29297B7B2929", "1 c #2A2A79792B2B", "2 c #2A2A7A7A2A2A", "3 c #2A2A7B7B2A2A", "4 c #2C2C7A7A2B2B", "5 c #2C2C7B7B2C2C", "6 c #2E2E7C7C2E2E", "7 c #2F2F7C7C2F2F", "8 c #2F2F7D7D2F2F", "9 c #32327F7F3232", "0 c #33337F7F3232", "q c #595935353F3F", "w c #434367670000", "e c #67676B6B0000", "r c #000000009F9F", "t c #00000000B1B1", "y c #00000000B3B3", "u c #00000000B7B7", "i c #00000000B9B9", "p c #00000000BBBB", "a c #00000000BDBD", "s c #00000000BFBF", "d c #00000000C3C3", "f c #00000000C7C7", "g c #03030303CDCD", "h c #3B3B3B3BD7D7", "j c #78786F6FBABA", "k c #45454242D3D3", "l c #46464444D5D5", "z c #47474747D7D7", "x c #42424141DEDE", "c c #42424242DCDC", "v c #47474747D9D9", "b c #46464646DDDD", "n c #4B4B4B4BD7D7", "m c #4B4B4B4BD8D8", "M c #49494A4ADDDD", "N c #4C4C4C4CD8D8", "B c #4F4F4F4FDADA", "V c #51515151D9D9", "C c #51515151DADA", "Z c #53535353DBDB", "A c #52525252DCDC", "S c #54545454DBDB", "D c #58585959DBDB", "F c #5C5C5C5CDDDD", "G c #46464646E0E0", "H c #49494949E0E0", "J c #5C5C5C5CE2E2", "K c #61616060DEDE", "L c #65656565DDDD", "P c #69696969DFDF", "I c #6B6B6B6BDFDF", "U c #6A6A6A6AE0E0", "Y c #6D6D6D6DE0E0", "T c #6F6F6F6FE0E0", "R c #70707171E1E1", "E c #70707070E2E2", "W c #74747474E3E3", "Q c #75757575E2E2", "! c #7B7B7B7BE5E5", "~ c #353582823535", "^ c #363682823636", "/ c #393984843939", "( c #3B3B85853B3B", ") c #3D3D86863D3D", "_ c #3F3F89893F3F", "` c #55558F8F3636", "' c #42428A8A4242", "] c #44448B8B4444", "[ c #46468D8D4646", "{ c #49498C8C4949", "} c #4B4B90904B4B", "| c #505092925050", " . c #545493935555", ".. c #70709C9C4040", "X. c #919157570000", "o. c #8E8E7E7EA6A6", "O. c #90907F7FA0A0", "+. c #9F9FADAD3F3F", "@. c #AFAF99990000", "#. c #A2A2B0B04343", "$. c #AAAAB5B54747", "%. c #BFBFBEBE4343", "&. c #BCBCA1A17878", "*. c #BEBEC5C56868", "=. c #C7C793930000", "-. c #C3C39B9B0000", ";. c #D5D5B8B86C6C", ":. c #D3D3C8C83A3A", ">. c #E8E8CCCC3F3F", ",. c #C8C8C0C04444", "<. c #C8C8C2C24747", "1. c #CFCFC7C74B4B", "2. c #D8D8CACA4040", "3. c #E4E4C7C74F4F", "4. c #E4E4CECE4949", "5. c #E8E8CCCC4747", "6. c #E9E9CCCC4E4E", "7. c #E4E4C4C45D5D", "8. c #E1E1D4D45D5D", "9. c #E3E3C4C46161", "0. c #E4E4C9C96F6F", "q. c #E3E3D2D26363", "w. c #AAAA98989999", "e. c #B7B79D9D8282", "r. c #A6A69797A8A8", "t. c #BFBFA8A88888", "y. c #AEAEA2A2B5B5", "u. c #87878787E7E7", "i. c #8C8C8C8CE7E7", "p. c #8F8F8F8FE8E8", "a. c #9E9E9E9EEAEA", "s. c #A1A1A1A1EAEA", "d. c #A1A1A1A1EBEB", "f. c #A3A3A3A3EBEB", "g. c #A9A9A9A9EDED", "h. c #B5B5B5B5F0F0", "j. c #C4C4ABAB8181", "k. c #C7C7B2B29292", "l. c #D2D2D2D2F5F5", "z. c #E3E3E3E3F8F8", "x. c #F7F7F7F7FBFB", "c. c #F7F7F7F7FCFC", "v. c #F7F7F7F7FDFD", "b. c #FAFAFAFAFDFD", "n. c None", /* pixels */ "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "g u.s ! g s s s i u y y i r X.-.", "d.v.i.b.g.Q R I P L F J r.0.8.e ", "d a.l.Q F S V N z x k t.5.,.{ ", "f i.z.R I V m v x O.9.2.+.; ] ", "h v.D x.f.N b l e.5.%.1 ; & ` ", "d h.A d.A b o.9.2.#.2 > * $ ( ", "s T B M j j.6.<.` 2 - * $ @ ^ ", "i U H w.;.:.$.7 2 - = $ + + 0 ", "s y.t.3.1...7 < - * $ + o X 8 ", "q k.8.*. .| } [ ' ) / ^ 9 7 4 ", "=.@.w . ", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n." }; springlobby-0.169/src/images/flags/SC.xpm0000600000176000000410000001003112105760300021575 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SC_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 158 2", " c black", ". c #050501012F2F", "X c #000021210000", "o c #000027270000", "O c #000029290000", "+ c #00002D2D0000", "@ c #00002F2F0000", "# c #000033330000", "$ c #000035350000", "% c #000039390000", "& c #00003B3B0000", "* c #00003D3D0000", "= c #000000007979", "- c #000041410000", "; c #000051510000", ": c #000067670000", "> c #000000008181", ", c #000000008383", "< c #000000008585", "1 c #000000008787", "2 c #000000008989", "3 c #000000008B8B", "4 c #000000009191", "5 c #5C5C5C5CBBBB", "6 c #61616161BCBC", "7 c #5C5C5C5CC2C2", "8 c #5F5F5F5FC0C0", "9 c #70707070C4C4", "0 c #72727272CACA", "q c #76767676C8C8", "w c #79797979C9C9", "e c #7B7B7B7BC9C9", "r c #7B7B7B7BCACA", "t c #79797979CDCD", "y c #000083830000", "u c #000095950000", "i c #151597971515", "p c #2B2B95952525", "a c #2C2CA1A12C2C", "s c #2F2FA3A32F2F", "d c #3232A4A43232", "f c #3535A4A43535", "g c #3939A6A63939", "h c #3C3CA8A83C3C", "j c #4242AEAE4242", "k c #5B5BB8B85B5B", "l c #7171BDBD7171", "z c #85854D4D0F0F", "x c #838357570B0B", "c c #E7E700000000", "v c #E9E900000000", "b c #EBEB00000000", "n c #EDED00000000", "m c #EFEF00000000", "M c #F1F100000000", "N c #F3F300000000", "B c #F5F500000000", "V c #F7F707070000", "C c #F5F525252525", "Z c #F5F526262626", "A c #F6F62B2B2B2B", "S c #F6F62C2C2C2C", "D c #F6F62D2D2D2D", "F c #F7F730303030", "G c #F7F731313131", "H c #F7F73A3A3A3A", "J c #F8F835353535", "K c #F8F836363636", "L c #F8F837373636", "P c #F8F837373737", "I c #F9F93A3A3A3A", "U c #F9F93B3B3A3A", "Y c #F9F93B3B3B3B", "T c #F9F93B3B3C3C", "R c #F9F93C3C3C3C", "E c #F9F93C3C3D3D", "W c #FAFA3F3F3F3F", "Q c #F6F644444444", "! c #F7F749494949", "~ c #F7F74E4E4E4E", "^ c #FAFA40404040", "/ c #FAFA41414141", "( c #FAFA41414242", ") c #FAFA42424242", "_ c #F8F848484848", "` c #F4F452525252", "' c #F8F853535353", "] c #F9F953535757", "[ c #F9F957575757", "{ c #FAFA5C5C5C5C", "} c #F5F564646464", "| c #FBFB60606060", " . c #F6F675757575", ".. c #FAFA7D7D8585", "X. c #FBFB85854747", "o. c #FBFB8B8B4747", "O. c #FBFB8C8C4646", "+. c #FBFB8F8F4646", "@. c #FBFB95954545", "#. c #FBFB97974545", "$. c #FAFA9F9F4444", "%. c #FCFC96966565", "&. c #FBFBB2B26767", "*. c #C9C9C9C90000", "=. c #F9F9EDED0000", "-. c #FBFBFBFB0000", ";. c #FDFDFDFD0000", ":. c #D4D4D7D76767", ">. c #DBDBDBDB6868", ",. c #D6D6DBDB7C7C", "<. c #FBFBFBFB4949", "1. c #FBFBFCFC4949", "2. c #FCFCF9F94B4B", "3. c #FCFCFAFA4B4B", "4. c #FCFCFBFB4B4B", "5. c #FCFCF8F84C4C", "6. c #FCFCFCFC4F4F", "7. c #FDFDFCFC5050", "8. c #FDFDFDFD5151", "9. c #FDFDFDFD5454", "0. c #E0E0E0E06A6A", "q. c #FCFCF7F76969", "w. c #FDFDFDFD6D6D", "e. c #FDFDFDFD7171", "r. c #FEFEFEFE7474", "t. c #8C8C8B8B9797", "y. c #919191919999", "u. c #97979999A8A8", "i. c #A9A9A9A9A9A9", "p. c #8383C8C88383", "a. c #A1A1D2D2A1A1", "s. c #A8A8DBDBACAC", "d. c #B3B3D9D9B3B3", "f. c #F7F78B8B8C8C", "g. c #F8F89B9B9F9F", "h. c #F5F5B2B2B2B2", "j. c #F4F4B7B7B7B7", "k. c #F9F9B7B7B7B7", "l. c #CFCFE6E6CFCF", "z. c #CBCBEEEED3D3", "x. c #D3D3E4E4D3D3", "c. c #E7E7CFCFCFCF", "v. c #F5F5C2C2C2C2", "b. c #F6F6D6D6D7D7", "n. c #EBEBE7E7DFDF", "m. c gray89", "M. c gray90", "N. c #EEEEF0F0EEEE", "B. c #ECECF5F5F3F3", "V. c #F7F7E6E6EDED", "C. c #F3F3F0F0F1F1", "Z. c gray95", "A. c #F3F3F3F3F3F3", "S. c #F4F4F4F4F4F4", "D. c #F4F4F5F5F5F5", "F. c gray96", "G. c #F6F6F6F6F6F6", "H. c None", /* pixels */ "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "4 3 3 3 > *.;.;.-.=.V B B m m m ", "< r r t i.r.e.w.q.%.| { [ ' ~ m ", "3 r 8 5 0.9.8.5.X.) E K G S ! c ", "< r 7 y.9.8.4.O.) E K G A Z Q c ", "< q 5 >.8.4.O.^ T K F A Z ` h.c.", "> 0 t.6.5.@.) U K G S } j.A.S.M.", "> 9 :.4.@.E U K H .v.D.A.Z.A.m.", "< u.4.#.E U _ f.b.D.D.Z.N.x.d.y ", "= ,.$.^ ] g.V.G.B.l.a.l h i s X ", ". &...k.n.z.s.p.k j g f d s s o ", "z x p u : ; - * % * % # + + O # ", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H." }; springlobby-0.169/src/images/flags/SD.xpm0000600000176000000410000000700212105760300021602 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SD_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 137 2", " c black", ". c #0B0B0B0B0B0B", "X c #0F0F0F0F0E0E", "o c #131313131313", "O c #181819191919", "+ c #1E1E1E1E1E1E", "@ c #00003D3D0000", "# c #232323232323", "$ c gray16", "% c #2C2C2C2C2C2C", "& c gray18", "* c #2F2F2F2F2F2F", "= c #323232323232", "- c #343434343434", "; c #353535353535", ": c #393939393939", "> c #3A3A3A3A3A3A", ", c gray24", "< c #19195F5F0000", "1 c #00006D6D0000", "2 c #000079790000", "3 c #00007B7B0000", "4 c #00007F7F0000", "5 c #3F3F46463F3F", "6 c gray26", "7 c #464646464646", "8 c #4B4B4B4B4B4B", "9 c #505050505050", "0 c #545454545555", "q c #585858585858", "w c #5D5D61615D5D", "e c #000083830000", "r c #000087870000", "t c #00008B8B0000", "y c #00008F8F0000", "u c #53539F9F5353", "i c #4949B5B54949", "p c #4949B6B64949", "a c #4B4BB4B44B4B", "s c #4F4FB7B74F4F", "d c #5454A1A15454", "f c #5C5CA9A95C5C", "g c #5353B9B95353", "h c #5454BCBC5454", "j c #5858BCBC5858", "k c #6E6EACAC6F6F", "l c #6262B1B16262", "z c #6868B0B06868", "x c #7070AFAF6B6B", "c c #7878B2B27171", "v c #5C5CC2C25C5C", "b c #6666C2C26666", "n c #6A6AC3C36A6A", "m c #6F6FC4C46F6F", "M c #7272C6C67373", "N c #7676C8C87676", "B c #7979C9C97979", "V c #7B7BCFCF7A7A", "C c #E9E900000000", "Z c #EBEB00000000", "A c #EDED00000000", "S c #EFEF00000000", "D c #F1F100000000", "F c #F3F300000000", "G c #F5F500000000", "H c #F7F700000000", "J c #F9F900000000", "K c #FBFB00000000", "L c #FDFD00000000", "P c red", "I c #F6F62C2C2C2C", "U c #F7F731313131", "Y c #F8F837373737", "T c #F9F93C3C3D3D", "R c #F7F749494949", "E c #F7F74E4E4E4E", "W c #FAFA42424242", "Q c #FBFB47474747", "! c #FCFC4C4C4C4C", "~ c #F8F853535353", "^ c #F9F957575757", "/ c #FDFD51515151", "( c #FDFD54545454", ") c #FAFA5C5C5C5C", "_ c #FEFE59595959", "` c #FCFC5E5E5C5C", "' c #FBFB60606060", "] c #FCFC65656565", "[ c #FCFC69696969", "{ c #FDFD6D6D6D6D", "} c #FDFD70707171", "| c #FEFE74747474", " . c #FEFE77777777", ".. c #FEFE79797979", "X. c #FCFC7D7D7B7B", "o. c #9090BFBF8A8A", "O. c gray74", "+. c #CBCBCBCBCBCB", "@. c #CDCDCDCDCDCD", "#. c gray81", "$. c #DEDEF2F2DEDE", "%. c #E7E7C7C7C7C7", "&. c gray88", "*. c #E1E1E1E1E1E1", "=. c #E2E2E2E2E2E2", "-. c gray89", ";. c #E4E4E4E4E4E4", ":. c #E6E6E6E6E6E6", ">. c #E7E7E7E7E7E7", ",. c #E9E9E9E9E9E9", "<. c #E9E9EBEBE9E9", "1. c gray92", "2. c #E0E0F4F4E4E4", "3. c #F5F5E5E5E5E5", "4. c #F6F6E6E6E6E6", "5. c #F7F7E8E8E7E7", "6. c #F6F6E8E8E8E8", "7. c #F8F8E9E9E8E8", "8. c #F9F9EAEAEAEA", "9. c #FAFAEBEBEBEB", "0. c #FBFBECECECEC", "q. c #FBFBEFEFEEEE", "w. c #FCFCEDEDEDED", "e. c #FDFDEEEEEFEF", "r. c gray95", "t. c #F3F3F3F3F3F3", "y. c #F4F4F4F4F4F4", "u. c #F4F4F5F5F5F5", "i. c gray96", "p. c #F6F6F6F6F6F6", "a. c gray97", "s. c #F8F8F8F8F8F8", "d. c #F9F9F9F9F9F9", "f. c #F8F8FAFAF9F9", "g. c gray98", "h. c #FBFBFBFBFBFB", "j. c None", /* pixels */ "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "< P P P K P P P K K H H F F A A ", "y o.X... . .} { [ ] ' ` ^ ~ E Z ", "t V c ` _ / ! ! Q W T Y U I R Z ", "r B v x q.e.e.q.6.e.6.6.3.3.6.%.", "r N j h z 2.g.g.g.s.a.a.u.u.u.#.", "e M g s i f g.g.a.a.a.u.y.y.y.+.", "4 m s i l $.g.g.a.u.u.y.y.r.y.+.", "3 n i d ,.,.1.:.:.;.-.-.&.&.-.O.", "3 b u 5 > ; % $ # + O o X . * ", "1 k w q 0 9 8 7 6 , > ; = * % ", "@ ", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j." }; springlobby-0.169/src/images/flags/SE.xpm0000600000176000000410000000742712105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SE_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 145 2", " c black", ". c #000000001F1F", "X c #000000002121", "o c #000000002525", "O c #000000002727", "+ c #000000002D2D", "@ c #000000003333", "# c #000000003939", "$ c #000000003B3B", "% c #000000003D3D", "& c #000000004141", "* c #000000004747", "= c #000000004D4D", "- c #000005055353", "; c #00000D0D5959", ": c #000013135D5D", "> c #000019196363", ", c #000021216969", "< c #000027276D6D", "1 c #000027276F6F", "2 c #00002D2D7373", "3 c #00002F2F7373", "4 c #000033337575", "5 c #000041417F7F", "6 c #000043438181", "7 c #0B0B67679595", "8 c #0F0F6A6A9797", "9 c #101065659D9D", "0 c #13136C6C9999", "q c #181870709C9C", "w c #1E1E74749F9F", "e c #14146969A0A0", "r c #19196C6CA2A2", "t c #1F1F7070A4A4", "y c #23237777A1A1", "u c #24247878A2A2", "i c #26267A7AA2A2", "p c #29297B7BA4A4", "a c #2A2A7B7BA4A4", "s c #2B2B7C7CA5A5", "d c #2C2C7B7BA2A2", "f c #2C2C7C7CA6A6", "g c #2F2F7C7CA4A4", "h c #2F2F7D7DA4A4", "j c #2F2F7F7FA8A8", "k c #32327F7FA6A6", "l c #33337B7BABAB", "z c #31318080A8A8", "x c #31318181A9A9", "c c #35358282A8A8", "v c #37378484ABAB", "b c #39398484A9A9", "n c #3D3D8686ACAC", "m c #3C3C8888AEAE", "M c #3D3D8888AEAE", "N c #3F3F8A8AAFAF", "B c #42428A8AAEAE", "V c #44448C8CAFAF", "C c #42428B8BB0B0", "Z c #42428B8BB1B1", "A c #44448E8EB1B1", "S c #45458E8EB2B2", "D c #46468D8DB0B0", "F c #47478F8FB4B4", "G c #49498F8FB1B1", "H c #49499191B4B4", "J c #4C4C9292B6B6", "K c #4E4E9393B4B4", "L c #50509393AEAE", "P c #53539696B7B7", "I c #58589898B9B9", "U c #58589999B9B9", "Y c #5C5C9B9BBBBB", "T c #5D5D9D9DBCBC", "R c #5C5C9D9DBEBE", "E c #5F5F9F9FBFBF", "W c #61619E9EBEBE", "Q c #61619F9FBEBE", "! c #58589696C3C3", "~ c #6565A1A1C0C0", "^ c #6666A3A3C0C0", "/ c #6969A4A4C2C2", "( c #6A6AA5A5C3C3", ") c #6D6DA7A7C3C3", "_ c #7979AEAEC9C9", "` c #7B7BB0B0C9C9", "' c #7B7BB0B0CACA", "] c #E3E387870000", "[ c #E5E58B8B0000", "{ c #E7E78F8F0000", "} c #EBEB99990000", "| c #EDED9D9D0000", " . c #EDEDA1A10000", ".. c #FDFDBBBB0000", "X. c #FDFDBDBD0000", "o. c #FDFDBFBF0000", "O. c #FDFDC1C10000", "+. c #F2F2C7C71414", "@. c #F3F3C9C91919", "#. c #F3F3C9C91A1A", "$. c #F4F4CACA1F1F", "%. c #F4F4CBCB1F1F", "&. c #F4F4CBCB2020", "*. c #F5F5CCCC2424", "=. c #F5F5CCCC2525", "-. c #F6F6CECE2A2A", ";. c #F6F6CECE2B2B", ":. c #F4F4CECE3636", ">. c #F7F7D0D02E2E", ",. c #F7F7D0D02F2F", "<. c #F7F7D0D03030", "1. c #F4F4D0D03B3B", "2. c #F5F5D2D23F3F", "3. c #F8F8D2D23434", "4. c #F8F8D2D23535", "5. c #F8F8D2D23636", "6. c #F9F9D3D33A3A", "7. c #F9F9D4D43A3A", "8. c #F9F9D4D43B3B", "9. c #F9F9D4D43C3C", "0. c #FAFAD5D53F3F", "q. c #F7F7D6D64B4B", "w. c #FAFAD5D54040", "e. c #FAFAD6D64040", "r. c #FAFAD6D64141", "t. c #FBFBD7D74545", "y. c #FBFBD7D74646", "u. c #FBFBD9D94949", "i. c #FCFCD9D94B4B", "p. c #FCFCDADA4F4F", "a. c #F8F8D8D85050", "s. c #F9F9D9D95555", "d. c #FDFDDBDB5050", "f. c #FDFDDBDB5151", "g. c #FDFDDCDC5353", "h. c #FDFDDCDC5454", "j. c #FEFEDDDD5858", "k. c #FEFEDDDD5959", "l. c #FDFDE1E16F6F", "z. c #FDFDE2E27171", "x. c #FEFEE2E27373", "c. c #FEFEE2E27474", "v. c #FEFEE3E37676", "b. c #FEFEE4E47777", "n. c None", /* pixels */ "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "6 6 6 6 O.O.O.4 2 < , > : ; - = ", "6 ' ' ` b.v.x.) ( ~ W Y U P K * ", "6 ' ! R j.g.p.K F Z n v x f G & ", "5 _ R ! h.g.i.L Z n v x s i V $ ", "O.v.h.h.p.i.t.r.9.5.<.;.=.&.2.{ ", "o.x.p.p.i.t.r.9.5.<.;.=.%.@.1.[ ", "o.x.p.i.t.r.7.5.,.;.=.%.@.+.:.] ", "2 ( H S 9.7.5.h s u t r e 9 l $ ", "1 ~ V N 7.5.,.s y w q 0 8 7 f X ", ", Q R U s.a.q.V B n v v k k d . ", "> : ; - .| } $ # @ + o o X . . ", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n." }; springlobby-0.169/src/images/flags/SG.xpm0000600000176000000410000000637212105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SG_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 122 2", " c black", ". c #C3C300000000", "X c #C7C700000000", "o c #C9C900000000", "O c #CBCB00000000", "+ c #CFCF00000000", "@ c #D3D300000000", "# c #D7D700000000", "$ c #D9D900000000", "% c #DBDB00000000", "& c #DDDD00000000", "* c #DFDF00000000", "= c #E1E100000000", "- c #E3E300000000", "; c #E5E500000000", ": c #E7E700000000", "> c #E9E900000000", ", c #EBEB03030303", "< c #EBEB09090909", "1 c #E3E320202020", "2 c #E5E525252525", "3 c #E6E626262626", "4 c #E6E62B2B2B2B", "5 c #E7E72B2B2B2B", "6 c #E7E72C2C2C2C", "7 c #E7E730303030", "8 c #E4E43C3C3D3D", "9 c #E7E73F3F3F3F", "0 c #E8E831313131", "q c #E8E836363636", "w c #E9E937373636", "e c #EAEA37373737", "r c #EAEA3B3B3C3C", "t c #EAEA3C3C3C3C", "y c #EBEB3C3C3D3D", "u c #E6E641414141", "i c #E7E745454545", "p c #EBEB41414141", "a c #E8E844444444", "s c #ECEC41414242", "d c #ECEC42424242", "f c #ECEC46464646", "g c #EDED47474747", "h c #E9E94A4A4A4A", "j c #EAEA49494949", "k c #EAEA4F4F4F4F", "l c #EBEB4E4E4E4E", "z c #EBEB54545454", "x c #ECEC53535353", "c c #EFEF53535353", "v c #EDED57575757", "b c #E8E858585858", "n c #ECEC59595959", "m c #EEEE5C5C5C5C", "M c #EEEE5D5D5D5D", "N c #F1F159595959", "B c #F0F059595A5A", "V c #F0F05A5A5A5A", "C c #EFEF61616161", "Z c #F0F060606060", "A c #F0F065656565", "S c #F0F065656666", "D c #F1F169696969", "F c #F2F26D6D6D6D", "G c #F1F172727373", "H c #F2F272727272", "J c #F4F472727272", "K c #F2F278787878", "L c #F5F587878787", "P c #F3F388888989", "I c #F6F689898989", "U c #F6F6A2A2A2A2", "Y c #F6F6A5A5A5A5", "T c #F8F8B3B3B3B3", "R c #F8F8B4B4B4B4", "E c #F8F8B6B6B6B6", "W c #F8F8BABABABA", "Q c #F9F9BDBDBDBD", "! c #DBDBCFCFCFCF", "~ c #DDDDCFCFCFCF", "^ c #DDDDD1D1D1D1", "/ c #DDDDD3D3D3D3", "( c #E1E1D3D3D3D3", ") c #E1E1D5D5D5D5", "_ c #E3E3D7D7D7D7", "` c #E5E5D9D9D9D9", "' c #E7E7DBDBDBDB", "] c #E9E9DDDDDDDD", "[ c #EBEBDFDFDFDF", "{ c #F7F7C9C9C9C9", "} c #FBFBCACACACA", "| c #F8F8CDCDCDCD", " . c #FCFCDCDCDCDC", ".. c #EDEDE3E3E1E1", "X. c #EFEFE5E5E5E5", "o. c #F1F1E7E7E7E7", "O. c #F3F3E9E9E9E9", "+. c #F5F5EBEBEBEB", "@. c #F5F5EDEDEDED", "#. c #F7F7EFEFEFEF", "$. c #FCFCEEEEEEEE", "%. c #F1F1F1F1F1F1", "&. c gray95", "*. c #F2F2F2F2F3F3", "=. c #F3F3F3F3F3F3", "-. c #F4F4F4F4F4F4", ";. c gray96", ":. c #F6F6F6F6F6F6", ">. c gray97", ",. c #F9F9F1F1F1F1", "<. c #FBFBF1F1F1F1", "1. c #FDFDF2F2F2F2", "2. c #FEFEF5F5F5F5", "3. c #FEFEF6F6F6F6", "4. c #F8F8F8F8F8F8", "5. c #F9F9F9F9F9F9", "6. c gray98", "7. c #FBFBFBFBFBFB", "8. c #FBFBFCFCFBFB", "9. c gray99", "0. c #FDFDFDFDFDFD", "q. c None", /* pixels */ "q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.", "q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.", "q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.", ", : < , : : - : - & & % % # @ @ ", ": } 2.E I E Y F D S C M v z l + ", ": 2.Q J W n K P g s y e 7 6 j O ", ": <. .n J | } g s t w 7 4 3 i O ", ": T $.U n c g s t w 6 4 3 1 9 . ", ", L G G S C M n z l j i u 8 b . ", "<.9.9.7.7.5.5.5.>.:.:.-.=.*.:.( ", "<.7.7.7.5.5.5.:.:.:.-.=.*.*.*./ ", "#.7.7.5.5.5.>.:.:.-.*.*.%.%.*.~ ", "@.7.5.5.5.5.:.>.:.:.:.=.*.*.*.! ", "+.O.o.o...[ ] ' ` _ / ( ~ ~ ! ! ", "q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.", "q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q." }; springlobby-0.169/src/images/flags/SH.xpm0000600000176000000410000001031712105760300021611 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SH_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 165 2", " c black", ". c #000000002B2B", "X c #000000002F2F", "o c #000000003333", "O c #000000003535", "+ c #000000003939", "@ c #000000003B3B", "# c #000000003F3F", "$ c #000000004141", "% c #000000004545", "& c #000000004747", "* c #000000004B4B", "= c #000000004D4D", "- c #000000005151", "; c #000000005353", ": c #000000005757", "> c #000000005B5B", ", c #000000006161", "< c #000000006565", "1 c #000000006767", "2 c #000000006D6D", "3 c #000000006F6F", "4 c #000000007373", "5 c #000000007575", "6 c #000000007979", "7 c #000000007B7B", "8 c #000000007F7F", "9 c #000000008383", "0 c #000000008585", "q c #13132E2E9797", "w c #171732329E9E", "e c #1B1B3636A1A1", "r c #20203A3A9F9F", "t c #25253E3EA1A1", "y c #2A2A4343A3A3", "u c #2B2B4444A4A4", "i c #30304848A6A6", "p c #30304949A6A6", "a c #33334A4AA4A4", "s c #35354C4CA6A6", "d c #36364D4DA6A6", "f c #31314949A9A9", "g c #32324A4AA9A9", "h c #31314B4BAFAF", "j c #35354B4BADAD", "k c #35354D4DA9A9", "l c #36364D4DA9A9", "z c #36364E4EA9A9", "x c #35354F4FADAD", "c c #35354E4EAFAF", "v c #38384F4FA8A8", "b c #37374E4EB1B1", "n c #39395050A8A8", "m c #3B3B5252ACAC", "M c #3D3D5151AAAA", "N c #3C3C5252A9A9", "B c #3D3D5353A9A9", "V c #3C3C5353ADAD", "C c #3D3D5353ACAC", "Z c #3F3F5656ADAD", "A c #3F3F5656B1B1", "S c #3D3D5555B4B4", "D c #42425757ABAB", "F c #40405656ACAC", "G c #40405757AEAE", "H c #41415757AFAF", "J c #43435959AEAE", "K c #47475D5DAFAF", "L c #4B4B5757AFAF", "P c #42425858B1B1", "I c #42425959B1B1", "U c #45455C5CB1B1", "Y c #46465C5CB1B1", "T c #45455F5FB6B6", "R c #46465E5EB4B4", "E c #47475E5EB4B4", "W c #48485D5DB2B2", "Q c #4B4B6060B4B4", "! c #4B4B6262B4B4", "~ c #4C4C6161B2B2", "^ c #4F4F6262B5B5", "/ c #49496363B9B9", "( c #51516161B3B3", ") c #50506565B3B3", "_ c #50506565B4B4", "` c #50506565B7B7", "' c #55556969B6B6", "] c #55556969B7B7", "[ c #55556969B8B8", "{ c #59596D6DB9B9", "} c #5A5A6D6DB9B9", "| c #5C5C6F6FBCBC", " . c #5F5F7171BBBB", ".. c #60607373BEBE", "X. c #63637575BEBE", "o. c #65657979BFBF", "O. c #7D7D7777B5B5", "+. c #67677A7AC0C0", "@. c #6A6A7C7CC2C2", "#. c #6A6A7D7DC5C5", "$. c #6C6C7D7DC2C2", "%. c #6D6D7F7FC3C3", "&. c #5C5C93933A3A", "*. c #60608F8F3A3A", "=. c #5C5C91914343", "-. c #656591916565", ";. c #70708181C4C4", ":. c #71718484C7C7", ">. c #7B7B8585C3C3", ",. c #A1A105052F2F", "<. c #8E8E78786868", "1. c #93937C7C6F6F", "2. c #C1C100001515", "3. c #C9C905051F1F", "4. c #C1C117173333", "5. c #E1E107071515", "6. c #FFFF07070303", "7. c #E5E52D2D3939", "8. c #E8E861616A6A", "9. c #ECEC75757B7B", "0. c #FCFC66666666", "q. c #FEFE67676565", "w. c #FEFE69696868", "e. c #FCFC6D6D6D6D", "r. c #FBFB70706F6F", "t. c #FDFD71716F6F", "y. c #F0F07B7B7F7F", "u. c #FEFE79797575", "i. c #FEFE7D7D7C7C", "p. c #B8B864648282", "a. c #BABA64648282", "s. c #C2C26B6B8585", "d. c #C8C86A6A8080", "f. c #E0E075758282", "g. c #9E9E83836161", "h. c #BABAA2A24A4A", "j. c #BFBFAAAA5252", "k. c #CCCCADAD3737", "l. c #D1D1B1B13A3A", "z. c #D3D3B4B43E3E", "x. c #C2C2ACAC5757", "c. c #CFCFB1B14040", "v. c #D2D2B4B44444", "b. c #8F8F8A8ABDBD", "n. c #84849797C6C6", "m. c #8C8C9D9DC8C8", "M. c #8B8B9D9DD3D3", "N. c #9A9AA6A6D4D4", "B. c #A0A0ADADD9D9", "V. c #ADADB9B9DEDE", "C. c #B2B2BCBCDFDF", "Z. c #B9B9C1C1E2E2", "A. c #EBEB86868C8C", "S. c #FDFD86868484", "D. c #FEFE8B8B8B8B", "F. c #F1F194949999", "G. c #F7F799999B9B", "H. c #F0F0A4A4AAAA", "J. c #F8F8A0A0A3A3", "K. c #F9F9A9A9ABAB", "L. c #F2F2AEAEB3B3", "P. c #CDCDC9C9E2E2", "I. c #CCCCD4D4E4E4", "U. c #CDCDD2D2E9E9", "Y. c None", /* pixels */ "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.", "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.", "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.", "7.>.h 5.2.b O.4.0 6 5 3 3 < , < ", "L K.U.G.F.P.L.N.%.@.+. . .{ ] ; ", "6.D.u.w.q.t.q.8.^ T I D B g ^ ; ", "3.J.i.e.r.S.9.d.W S x.v.c.h.Q * ", "( H.C.y.f.V.A.b.A b j.z.l.k.I $ ", ",.Z.M.s.p.#.N.p.B b g.m.I.n.D # ", "0 :.{ / T R C x k g 1.1.&.-.C + ", "9 ;.` W R G m k i y ! *.=.Z n O ", "6 $.E U G B k a y t w e w q d o ", "4 o.X...{ ] _ ~ W J C B n d a . ", "6 3 1 > > : ; * % $ # + O o X + ", "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.", "Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y.Y." }; springlobby-0.169/src/images/flags/SI.xpm0000600000176000000410000000754412105760300021622 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SI_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 151 2", " c black", ". c #3F3F00000000", "X c #000000008181", "o c #000000008383", "O c #000000008585", "+ c #000000009797", "@ c #00000000B5B5", "# c #00000000B7B7", "$ c #00000000B9B9", "% c #03031111C3C3", "& c #14142626C3C3", "* c #1A1A2828C1C1", "= c #19192B2BC6C6", "- c #1F1F2E2EC3C3", "; c #1F1F3030C7C7", ": c #20202C2CC1C1", "> c #25253131C4C4", ", c #25253333C5C5", "< c #24243535CACA", "1 c #2B2B3737C6C6", "2 c #2A2A3838C7C7", "3 c #2A2A3A3ACBCB", "4 c #30303C3CC8C8", "5 c #30303D3DC9C9", "6 c #2F2F4040CDCD", "7 c #36364141CACA", "8 c #36364343CBCB", "9 c #36364545CBCB", "0 c #35354444CFCF", "q c #3B3B4747C9C9", "w c #3B3B4747CCCC", "e c #3B3B4848CDCD", "r c #3F3F4A4AC9C9", "t c #3B3B4949D0D0", "y c #41414C4CCECE", "u c #40404E4ECFCF", "i c #40404E4ED2D2", "p c #45454F4FD3D3", "a c #46464F4FD0D0", "s c #4B4B5050CDCD", "d c #4F4F5858CECE", "f c #46465050D0D0", "g c #49495454D5D5", "h c #4F4F5C5CD7D7", "j c #53535C5CD0D0", "k c #58586161D2D2", "l c #5D5D6565D4D4", "z c #61616969D6D6", "x c #66666D6DD7D7", "c c #67676F6FD5D5", "v c #6A6A7272D9D9", "b c #6E6E7676DBDB", "n c #6F6F7A7ADFDF", "m c #78787A7ACECE", "M c #70707777DBDB", "N c #75757C7CD1D1", "B c #72727C7CDDDD", "V c #76767D7DDDDD", "C c #7C7C8383DEDE", "Z c #858500001515", "A c #9E9E16165050", "S c #A1A11B1B5353", "D c #A3A31F1F5757", "F c #A5A525255B5B", "G c #A8A829295F5F", "H c #ABAB2F2F6363", "J c #ACAC37376969", "K c #AEAE34346868", "L c #B0B039396C6C", "P c #B3B33F3F7070", "I c #B5B544447474", "U c #B8B84A4A7878", "Y c #BABA4E4E7C7C", "T c #DDDD00000000", "R c #DFDF00000000", "E c #E1E100000000", "W c #E3E300000000", "Q c #E5E500000000", "! c #E7E700000000", "~ c #E9E900000000", "^ c #EBEB00000000", "/ c #EDED00000000", "( c #EFEF00000000", ") c #F1F100000000", "_ c #F3F300000000", "` c #F5F500000000", "' c #F7F700000000", "] c #F1F10B0B0B0B", "[ c #F1F10F0F0E0E", "{ c #F9F900000000", "} c #F2F213131313", "| c #F3F319191919", " . c #F4F41E1E1E1E", ".. c #F5F523232323", "X. c #F2F22C2C2C2C", "o. c #F2F22F2F2F2F", "O. c #F6F629292929", "+. c #F7F72E2E2E2E", "@. c #F2F232323232", "#. c #F3F335353535", "$. c #F4F439393939", "%. c #F5F53D3D3D3D", "&. c #F8F834343434", "*. c #F9F93A3A3A3A", "=. c #FAFA3F3F3F3F", "-. c #F6F642424242", ";. c #F7F746464646", ":. c #F7F74B4B4B4B", ">. c #FAFA44444444", ",. c #F8F850505050", "<. c #F9F954545555", "1. c #F9F958585858", "2. c #FAFA5D5D5D5D", "3. c #FBFB61616262", "4. c #FCFC66666666", "5. c #96965959A3A3", "6. c #A6A65F5F9A9A", "7. c #AAAA64649D9D", "8. c #C8C86F6F9494", "9. c #86868C8CE1E1", "0. c #8D8D9292E2E2", "q. c #93939999E5E5", "w. c #F3F3AFAFB5B5", "e. c #F4F4B2B2B9B9", "r. c #E1E1E3E3E3E3", "t. c gray90", "y. c #E7E7E7E7E7E7", "u. c #E9E9E9E9E9E9", "i. c gray92", "p. c gray93", "a. c #EFEFEFEFEFEF", "s. c #E0E0E0E0F4F4", "d. c #F1F1EEEEF6F6", "f. c #F1F1F1F1F1F1", "g. c #F3F3F3F3F3F3", "h. c gray96", "j. c #F6F6F6F6F6F6", "k. c gray97", "l. c #F6F6F7F7FBFB", "z. c #F6F6F6F6FCFC", "x. c #F8F8F8F8F8F8", "c. c #F9F9F9F9F9F9", "v. c gray98", "b. c #FBFBFBFBFBFB", "n. c #FDFDFBFBFBFB", "m. c gray99", "M. c #FDFDFDFDFDFD", "N. c #FDFDFDFDFEFE", "B. c #FEFEFEFEFFFF", "V. c gray100", "C. c None", /* pixels */ "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "h.h.h.h.h.g.g.d.a.a.p.i.u.y.t.r.", "h.V.V.z.l.V.V.b.b.V.b.c.c.c.k.i.", "h.V.0.N m v.b.V.c.c.c.c.k.h.k.u.", "% q.9.s.C M b v x z l k j d c + ", "# V e.d.w.s a y w 8 4 1 > : r o ", "# B 5.7.7.f u e 8 4 2 > - * q o ", "$ n j g i i t 0 6 3 < ; = & 9 O ", "Z 8.Y U I L L K H G F D S A J . ", "{ 4.>.>.*.&.+.O... .| } [ ] o.R ", "{ 3.2.1.<.,.:.;.-.%.$.#.@.o.X.T ", "` _ _ / / / / ! ! Q Q R R T T T ", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.", "C.C.C.C.C.C.C.C.C.C.C.C.C.C.C.C." }; springlobby-0.169/src/images/flags/SJ.xpm0000600000176000000410000000652412105760300021620 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SJ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 127 2", " c black", ". c #00000000A5A5", "X c #00001D1DB7B7", "o c #03035353CFCF", "O c #09095959D1D1", "+ c #4B4B8383D5D5", "@ c #50508686D7D7", "# c #54548A8AD8D8", "$ c #59598D8DD9D9", "% c #5D5D9090DBDB", "& c #62629494DDDD", "* c #65659494DADA", "= c #65659696DEDE", "- c #66669797DEDE", "; c #6A6A9999E0E0", ": c #6B6B9A9AE0E0", "> c #6F6F9C9CE1E1", ", c #6F6F9D9DE1E1", "< c #73739F9FE3E3", "1 c #7777A3A3E4E4", "2 c #7A7AA4A4E2E2", "3 c #7A7AA5A5E5E5", "4 c #7B7BA6A6E5E5", "5 c #7E7EA8A8E7E7", "6 c #B1B100000000", "7 c #B5B500000000", "8 c #B9B900000000", "9 c #BBBB00000000", "0 c #BDBD00000000", "q c #BFBF00000000", "w c #C3C300000000", "e c #C5C500000000", "r c #C9C900000000", "t c #CBCB00000000", "y c #CFCF00000000", "u c #D1D100000000", "i c #D5D500000000", "p c #D7D700000000", "a c #D9D900000000", "s c #DBDB00000000", "d c #DDDD00000000", "f c #DADA0E0E0B0B", "g c #DCDC11110E0E", "h c #DCDC12121010", "j c #DDDD16161313", "k c #DDDD17171414", "l c #DFDF1B1B1919", "z c #DFDF1C1C1919", "x c #DEDE2E2E2C2C", "c c #E1E100000000", "v c #E0E021211E1E", "b c #E0E021211F1F", "n c #E1E126262323", "m c #E2E227272424", "M c #E2E229292626", "N c #E2E22B2B2929", "B c #E2E22C2C2A2A", "V c #E4E42E2E2B2B", "C c #E4E42E2E2C2C", "Z c #E0E031312F2F", "A c #E4E430302E2E", "S c #E4E431312F2F", "D c #E0E034343232", "F c #E0E035353232", "G c #E2E237373535", "H c #E5E534343131", "J c #E6E637373434", "K c #E7E739393636", "L c #E7E73A3A3737", "P c #E2E23B3B3939", "I c #E8E83E3E3C3C", "U c #E8E83F3F3D3D", "Y c #E4E440403D3D", "T c #E4E444444242", "R c #E6E646464444", "E c #E6E649494646", "W c #E7E74B4B4949", "Q c #E7E74C4C4B4B", "! c #E9E943434242", "~ c #E9E944444242", "^ c #EAEA46464444", "/ c #EAEA49494747", "( c #EBEB49494747", ") c #EBEB4B4B4949", "_ c #EBEB4E4E4B4B", "` c #EBEB4E4E4C4C", "' c #E8E850504E4E", "] c #E9E955555353", "[ c #ECEC52525151", "{ c #EBEB5A5A5757", "} c #ECEC5E5E5C5C", "| c #ECEC5F5F5D5D", " . c #EFEF5D5D5C5C", ".. c #F0F061615F5F", "X. c #EDED63636060", "o. c #EDED64646262", "O. c #EEEE67676565", "+. c #EEEE68686666", "@. c #EFEF6B6B6969", "#. c #EFEF6D6D6A6A", "$. c #EFEF6F6F6D6D", "%. c #F0F072727171", "&. c #F2F27A7A7979", "*. c #F2F27D7D7A7A", "=. c #F2F27D7D7B7B", "-. c #9292B6B6EAEA", ";. c #9595B9B9EBEB", ":. c gray89", ">. c #E7E7E7E7E7E7", ",. c gray93", "<. c #EFEFEFEFEFEF", "1. c gray95", "2. c #F3F3F3F3F3F3", "3. c #F4F4F4F4F4F4", "4. c gray96", "5. c #F6F6F6F6F6F6", "6. c gray97", "7. c #F8F8F8F8F8F8", "8. c #F9F9F9F9F9F9", "9. c gray98", "0. c #FBFBFBFBFBFB", "q. c #FBFBFCFCFBFB", "w. c gray99", "e. c #FDFDFDFDFDFD", "r. c #FEFEFEFEFEFE", "t. c gray100", "y. c None", /* pixels */ "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "c c c t.O t.d s s s p p u u r r ", "c =.=.t.;.t.%.$.@.+.X.| { ] ' e ", "c =.| t.5 0.[ _ ( ~ Y J H C W w ", "c &. .t.2 t.) R ! I J H B M R q ", "t.t.t.0.1 t.0.0.0.0.0.4.4.4.4.>.", "o -.2 1 < : : = & $ $ # @ + * . ", "q.t.t.0.: 0.0.6.5.5.4.4.2.1.3.:.", "s #.( 0.: 0.J H N m v l k g F 7 ", "s O.~ 0.& 0.C N m v l j g f Z 6 ", "p X.| 0.2 0.W E T Y P G F Z x 6 ", "u u y <.X ,.w q q 9 9 7 7 6 6 6 ", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.", "y.y.y.y.y.y.y.y.y.y.y.y.y.y.y.y." }; springlobby-0.169/src/images/flags/SK.xpm0000600000176000000410000000770212105760300021620 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SK_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 154 2", " c black", ". c #000000009D9D", "X c #00000000A3A3", "o c #00000303B5B5", "O c #00001F1FC9C9", "+ c #00001F1FCFCF", "@ c #03032323C9C9", "# c #3E3E5757CFCF", "$ c #38385555D2D2", "% c #3C3C5959D4D4", "& c #3F3F5959D9D9", "* c #42425A5ACFCF", "= c #43435A5AD1D1", "- c #40405D5DD6D6", "; c #48485E5ED1D1", ": c #48485E5ED2D2", "> c #45456161D7D7", ", c #4C4C6363D3D3", "< c #4D4D6363D4D4", "1 c #4A4A6565D8D8", "2 c #4D4D6969DBDB", "3 c #51516666D4D4", "4 c #51516767D6D6", "5 c #56566A6AD6D6", "6 c #52526C6CD9D9", "7 c #54546E6ED8D8", "8 c #56566E6EDADA", "9 c #5B5B6F6FD5D5", "0 c #5E5E7171D5D5", "q c #59597373DDDD", "w c #6B6B6E6ECECE", "e c #60607676DDDD", "r c #6B6B7575D5D5", "t c #70707878D4D4", "y c #7D7D7E7ED2D2", "u c #76768787DBDB", "i c #7A7A8A8ADDDD", "p c #7E7E8E8EDFDF", "a c #8D8D00000000", "s c #BFBF00000000", "d c #DDDD00000000", "f c #DFDF00000000", "g c #C7C723233F3F", "h c #E1E100000000", "j c #E3E300000000", "k c #E5E500000000", "l c #E7E700000000", "z c #E9E900000000", "x c #EBEB00000000", "c c #EDED00000000", "v c #EFEF00000000", "b c #F1F100000000", "n c #F3F300000000", "m c #F5F500000000", "M c #F7F700000000", "N c #F1F10B0B0B0B", "B c #F1F10F0F0E0E", "V c #F9F900000000", "C c #F2F213131313", "Z c #F3F319191919", "A c #F4F41E1E1E1E", "S c #F5F523232323", "D c #F2F22C2C2C2C", "F c #F2F22F2F2F2F", "G c #F6F629292929", "H c #F7F72E2E2E2E", "J c #F2F232323232", "K c #F3F335353535", "L c #F4F439393939", "P c #F5F53D3D3D3D", "I c #C9C928284343", "U c #CACA2C2C4848", "Y c #CCCC31314B4B", "T c #CECE36365050", "R c #D0D03B3B5555", "E c #CECE43435B5B", "W c #D2D240405959", "Q c #F6F642424242", "! c #F7F746464646", "~ c #F7F74B4B4B4B", "^ c #FAFA44444444", "/ c #F7F758585B5B", "( c #F8F850505050", ") c #F9F954545555", "_ c #F9F958585858", "` c #F9F95A5A5A5A", "' c #FAFA5A5A5B5B", "] c #FAFA5D5D5D5D", "[ c #EFEF69697272", "{ c #FBFB61616262", "} c #FEFE63636161", "| c #FCFC65656060", " . c #FCFC66666666", ".. c #F1F16C6C7474", "X. c #F3F374747C7C", "o. c #F1F17B7B7F7F", "O. c #FAFA74747272", "+. c #86867575C3C3", "@. c #E1E177778A8A", "#. c #E1E17F7F8E8E", "$. c #89899797DFDF", "%. c #82829191E0E0", "&. c #85859494E2E2", "*. c #82829898E9E9", "=. c #83839999EBEB", "-. c #84849B9BECEC", ";. c #88889898E4E4", ":. c #90909A9AE1E1", ">. c #ACACB7B7EEEE", ",. c #E6E686869494", "<. c #F4F48B8B8F8F", "1. c #FDFD85858484", "2. c #FBFB89898686", "3. c #F4F48B8B9191", "4. c #F5F58F8F9494", "5. c #F6F690909696", "6. c #F6F69E9EA2A2", "7. c #F0F0ADADB3B3", "8. c #E0E0B3B3C3C3", "9. c #D2D2C1C1DDDD", "0. c #D7D7C2C2D9D9", "q. c #DDDDC5C5D8D8", "w. c #E7E7DDDDDFDF", "e. c #FDFDCDCDCCCC", "r. c #FCFCDEDEDEDE", "t. c #FDFDDEDEDEDE", "y. c #EBEBE1E1E3E3", "u. c #EDEDE3E3E5E5", "i. c #EFEFE5E5E5E5", "p. c #F1F1E7E7E9E9", "a. c #F3F3E9E9EBEB", "s. c #F5F5EBEBEDED", "d. c #F5F5EDEDEFEF", "f. c #F7F7EFEFEFEF", "g. c #FCFCE2E2E1E1", "h. c #FDFDEDEDECEC", "j. c #F9F9EFEFF1F1", "k. c #F6F6F6F6F6F6", "l. c gray97", "z. c #FBFBF1F1F3F3", "x. c #FBFBF3F3F3F3", "c. c #FDFDF3F3F3F3", "v. c #FDFDF5F5F5F5", "b. c #FDFDF5F5F7F7", "n. c #F8F8F8F8F8F8", "m. c #F9F9F9F9F9F9", "M. c gray98", "N. c #FBFBFBFBFBFB", "B. c gray99", "V. c #FDFDFDFDFDFD", "C. c #FDFDFDFDFEFE", "Z. c #FEFEFEFEFEFE", "A. c gray100", "S. c None", /* pixels */ "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "v.v.v.v.v.c.x.h.j.f.f.s.a.p.i.u.", "b.A.A.A.A.A.A.A.N.A.N.m.m.m.l.y.", "v.A.6.5.4.<.<.B.m.m.m.m.l.k.l.w.", "& >.X.} r.1.` ;.;.&.%.p i u $.o ", "@ -...e.h.g./ y 8 5 3 , ; * 0 . ", "O -.[ | r.1.` t 6 3 < : = % 9 . ", "+ *.9.+.r w 8.q 2 1 > - % $ 7 X ", "s @.,.q.q q.#.E R T Y U I g E a ", "V .^ O.7.o.H G S A Z C B N F h ", "M { ] ` ) ( ~ ! Q P L K J F F d ", "M b b c c c x x l l h h h d d d ", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S." }; springlobby-0.169/src/images/flags/SL.xpm0000600000176000000410000000716012105760300021617 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SL_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 139 2", " c black", ". c #000000007979", "X c #000000007B7B", "o c #000000007D7D", "O c #000000007F7F", "+ c #000000008383", "@ c #000000008787", "# c #000000008989", "$ c #000000008D8D", "% c #000000009191", "& c #000000009595", "* c #000000009999", "= c #000000009D9D", "- c #00000000A1A1", "; c #00000000A5A5", ": c #00000000A7A7", "> c #00000000A9A9", ", c #00000000ABAB", "< c #00000000AFAF", "1 c #0B0B0B0BBFBF", "2 c #0F0F0F0FC1C1", "3 c #13131313C3C3", "4 c #18181919C5C5", "5 c #1E1E1E1EC7C7", "6 c #23232323C8C8", "7 c #29292929CACA", "8 c #2C2C2C2CC8C8", "9 c #2F2F2F2FC8C8", "0 c #2E2E2E2ECCCC", "q c #2D2D2D2DD1D1", "w c #32323232C9C9", "e c #35353535CBCB", "r c #34343434CECE", "t c #39393939CDCD", "y c #3D3D3D3DCECE", "u c #3A3A3A3AD0D0", "i c #3F3F3F3FD2D2", "p c #42424242CFCF", "a c #46464646D1D1", "s c #44444444D4D4", "d c #4B4B4B4BD3D3", "f c #50505050D4D4", "g c #54545454D6D6", "h c #58585858D8D8", "j c #5D5D5D5DD9D9", "k c #63636363D5D5", "l c #66666666D6D6", "z c #61616161DBDB", "x c #66666666DDDD", "c c #6A6A6A6AD7D7", "v c #6E6E6E6ED9D9", "b c #71717171DBDB", "n c #75757575DDDD", "m c #7A7A7A7ADBDB", "M c #79797878DEDE", "N c #7C7C7C7CE0E0", "B c #00009B9B0000", "V c #00009F9F0000", "C c #0000A3A30000", "Z c #0000A7A70000", "A c #0000ABAB0000", "S c #0000AFAF0000", "D c #0000B1B10000", "F c #0000B3B30000", "G c #0000B5B50000", "H c #0000B7B70000", "J c #0000B9B90000", "K c #0000BDBD0000", "L c #0000C1C10000", "P c #0000C3C30000", "I c #3838D0D03838", "U c #3D3DD2D23D3D", "Y c #3D3DD9D93D3D", "T c #4242D4D44242", "R c #4848D6D64848", "E c #4D4DD7D74D4D", "W c #5353D7D75353", "Q c #5252D9D95252", "! c #5757DBDB5757", "~ c #5858D8D85858", "^ c #5B5BDCDC5B5B", "/ c #5C5CDADA5C5C", "( c #5E5EDEDE5E5E", ") c #6161DBDB6060", "_ c #6262DEDE6262", "` c #6565DDDD6565", "' c #6A6ADDDD6A6A", "] c #6D6DDBDB6D6D", "[ c #6E6EDFDF6E6E", "{ c #7171DCDC7171", "} c #7676DEDE7575", "| c #7979DFDF7979", " . c #6666E0E06666", ".. c #6868E1E16969", "X. c #7272E1E17272", "o. c #7575E2E27575", "O. c #7979E3E37A7A", "+. c #7B7BE3E37B7B", "@. c #7D7DE1E17D7D", "#. c #7F7FE5E57F7F", "$. c #80808080E1E1", "%. c #84848484E3E3", "&. c #88888888E4E4", "*. c #8B8B8B8BE6E6", "=. c #A0A0A0A0EAEA", "-. c #8282DFDF8181", ";. c #8181E2E28181", ":. c #8080E6E68080", ">. c #8383E6E68383", ",. c #8585E4E48585", "<. c #8888E5E58888", "1. c #8C8CE6E68C8C", "2. c #8E8EE8E88E8E", "3. c #9191E8E89191", "4. c #9494E9E99494", "5. c #A7A7EDEDA7A7", "6. c #D3D3D3D3DFDF", "7. c #D5D5D5D5E1E1", "8. c #D7D7D7D7E3E3", "9. c gray95", "0. c #F3F3F3F3F3F3", "q. c #F4F4F4F4F4F4", "w. c #F4F4F5F5F5F5", "e. c gray96", "r. c #F6F6F6F6F6F6", "t. c gray97", "y. c #F1F1F1F1F9F9", "u. c #F3F3F3F3FBFB", "i. c #F5F5F5F5FBFB", "p. c #F8F8F8F8F8F8", "a. c #F9F9F9F9F9F9", "s. c gray98", "d. c #FBFBFBFBFBFB", "f. c #FBFBFCFCFBFB", "g. c gray99", "h. c #FDFDFCFCFDFD", "j. c #FDFDFDFDFDFD", "k. c #FEFEFEFEFEFE", "l. c None", /* pixels */ "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "P P P P P P K K J H F F S A Z C ", "P >.>.>.#.O.O.o.X.[ ' ` ) / ~ V ", "P >...` _ ( ^ ! Q E R T U I W B ", "Y 5.4.3.2.1.,.,.;.@.| } { ] -.H ", "i.k.k.k.k.f.k.a.a.a.t.e.e.q.e.8.", "u.k.k.d.a.k.a.a.t.t.e.e.e.9.e.8.", "u.k.d.k.k.a.a.a.t.e.e.e.q.9.0.6.", "0 =.*.&.%.N N M n b v c l k m : ", "< x s i u e 0 7 6 5 4 3 2 1 9 X ", ", z j g g f d a p y t e w 9 9 X ", ", : - = * & % $ # # + o o X . X ", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l." }; springlobby-0.169/src/images/flags/SM.xpm0000600000176000000410000000705712105760300021625 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 136 2", " c black", ". c #00001F1FDDDD", "X c #00002121DDDD", "o c #00002121DFDF", "O c #00002525DFDF", "+ c #00002727DFDF", "@ c #00002929E1E1", "# c #00002B2BE3E3", "$ c #00002D2DE3E3", "% c #00002F2FE5E5", "& c #00003333E5E5", "* c #00003939E7E7", "= c #00003D3DE9E9", "- c #00004141EBEB", "; c #00004747EDED", ": c #00004D4DEDED", "> c #00005353EFEF", ", c #00005959F1F1", "< c #00005D5DF3F3", "1 c #00006363F5F5", "2 c #00006969F7F7", "3 c #00006F6FF9F9", "4 c #00007373FBFB", "5 c #00007777FDFD", "6 c #00007B7BFDFD", "7 c #40406D6D9E9E", "8 c #474773739F9F", "9 c #55558D8D4848", "0 c #7575A2A26565", "q c #7575A4A46666", "w c #38389595F1F1", "e c #3C3C9797F1F1", "r c #3D3D9797F2F2", "t c #48489393D5D5", "y c #40409999F2F2", "u c #41419999F2F2", "i c #41419A9AF2F2", "p c #45459C9CF3F3", "a c #45459D9DF3F3", "s c #45459E9EF3F3", "d c #46469C9CF3F3", "f c #4A4A9F9FF4F4", "g c #4F4FA2A2F5F5", "h c #5353A2A2F2F2", "j c #5555A4A4F2F2", "k c #5656A4A4F2F2", "l c #5858A5A5F3F3", "z c #5959A6A6F3F3", "x c #5B5BA8A8F3F3", "c c #5C5CA8A8F4F4", "v c #5F5FA9A9F4F4", "b c #5959A9A9F8F8", "n c #65659D9DD3D3", "m c #6A6AACACD2D2", "M c #6060AAAAF5F5", "N c #6161ACACF5F5", "B c #6565AEAEF6F6", "V c #6060ACACF9F9", "C c #6464AFAFFAFA", "Z c #6565AFAFFAFA", "A c #6868B0B0F7F7", "S c #6C6CB2B2F7F7", "D c #6969B1B1FAFA", "F c #6969B2B2FBFB", "G c #6D6DB4B4FBFB", "H c #6D6DB5B5FBFB", "J c #6E6EB5B5FCFC", "K c #7E7EB3B3E1E1", "L c #7171B4B4F8F8", "P c #7171B7B7FCFC", "I c #7272B7B7FCFC", "U c #7575B7B7F9F9", "Y c #7676B9B9FDFD", "T c #7979B9B9F9F9", "R c #7D7DBCBCFAFA", "E c #9B9B92926969", "W c #9292B0B07171", "Q c #9C9CB9B97474", "! c #AFAF9D9D6464", "~ c #BFBFACAC5858", "^ c #BDBDABAB6868", "/ c #DADAB2B25F5F", "( c #DFDFB6B65B5B", ") c #C2C2B1B16060", "_ c #C1C1B9B96A6A", "` c #E9E9CDCD6E6E", "' c #E9E9CECE7070", "] c #8E8EB8B88181", "[ c #8686BCBCB3B3", "{ c #9090A9A9ADAD", "} c #8080BEBEFBFB", "| c #9191C1C1B4B4", " . c #8484C0C0FCFC", ".. c #8A8AC0C0F4F4", "X. c #8888C3C3FCFC", "o. c #8B8BC4C4FDFD", "O. c #8E8EC6C6FEFE", "+. c #9494C6C6F7F7", "@. c #A3A3CCCCD2D2", "#. c #DDDDC8C89595", "$. c #E2E2D0D09E9E", "%. c #D5D5DBDBE7E7", "&. c #D7D7DFDFE7E7", "*. c #D9D9E1E1E9E9", "=. c #DDDDE3E3EBEB", "-. c #DDDDE7E7EFEF", ";. c #DFDFE7E7EFEF", ":. c #E3E3E9E9F1F1", ">. c #E5E5EBEBF3F3", ",. c #E7E7EDEDF5F5", "<. c #E9E9EFEFF7F7", "1. c #EBEBF1F1F9F9", "2. c #EDEDF1F1FBFB", "3. c #EDEDF3F3FDFD", "4. c #EFEFF5F5FDFD", "5. c #F4F4F4F4F4F4", "6. c gray96", "7. c #F6F6F6F6F6F6", "8. c gray97", "9. c #F1F1F7F7FDFD", "0. c #F1F1F7F7FFFF", "q. c #F1F1F9F9FFFF", "w. c #F8F8F8F8F8F8", "e. c #F9F9F9F9F9F9", "r. c #FAFAFAFAF8F8", "t. c #FAFAFAFAF9F9", "y. c #FBFBFBFBF8F8", "u. c gray98", "i. c #FBFBFBFBFBFB", "p. c gray99", "a. c #FDFDFCFCFDFD", "s. c #FDFDFDFDFDFD", "d. c #FDFDFDFDFEFE", "f. c #FEFEFEFEFEFE", "g. c gray100", "h. c None", /* pixels */ "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "q.0.0.0.q.4.4.3.2.1.<.,.>.:.-.-.", "0.g.g.g.g.g.d.d.i.i.i.i.i.8.8.=.", "0.g.i.g.g.i.d.u.i.i.8.8.8.8.8.*.", "0.g.g.g.i.d.u.' ` i.8.8.8.5.8.&.", "0.g.g.i.g.W $.( / #.0 8.5.5.8.%.", "6 O.Y I J @.^ | [ ! { h f s M $ ", "5 o.I G F q _ Q W E 9 f s u x $ ", "4 X.G F Z m K ) ~ n t d u r z + ", "3 .F Z V b +.8 7 } d u e w k X ", "2 R R T U L S A B N v x z k h . ", "1 < , > : ; - = * & $ @ + . . . ", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.", "h.h.h.h.h.h.h.h.h.h.h.h.h.h.h.h." }; springlobby-0.169/src/images/flags/SN.xpm0000600000176000000410000000773512105760300021631 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SN_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 154 2", " c black", ". c #00004D4D0000", "X c #000053530000", "o c #000059590000", "O c #00005D5D0000", "+ c #000063630000", "@ c #000069690000", "# c #00006F6F0000", "$ c #000073730000", "% c #000077770000", "& c #00007B7B0000", "* c #00007D7D0000", "= c #00007F7F0000", "- c #000081810000", "; c #3A3AACAC3A3A", ": c #3F3FAFAF3F3F", "> c #4040AFAF3F3F", ", c #4848B1B13636", "< c #5555B6B63B3B", "1 c #4444B1B14444", "2 c #4545B2B24545", "3 c #4949B4B44949", "4 c #4949B5B54949", "5 c #4B4BB5B54B4B", "6 c #4F4FB7B74F4F", "7 c #5050B7B75050", "8 c #5454B7B75555", "9 c #5353B9B95353", "0 c #5454B9B95454", "q c #5454BABA5454", "w c #5858B9B95858", "e c #5858BCBC5858", "r c #5858BCBC5959", "t c #5959BCBC5959", "y c #5C5CBDBD5C5C", "u c #5D5DBCBC5D5D", "i c #5C5CBEBE5C5C", "p c #5F5FBFBF5F5F", "a c #6161BEBE6262", "s c #6666C0C06666", "d c #6A6AC3C36A6A", "f c #6F6FC4C46F6F", "g c #7272C6C67373", "h c #7676C8C87676", "j c #7777C8C87777", "k c #7979C8C87979", "l c #7979C9C97979", "z c #7B7BCACA7A7A", "x c #7B7BCACA7B7B", "c c #DDDD00000000", "v c #DFDF00000000", "b c #E1E100000000", "n c #E3E300000000", "m c #E5E500000000", "M c #E7E700000000", "N c #E9E900000000", "B c #EBEB00000000", "V c #EDED00000000", "C c #EFEF00000000", "Z c #F1F100000000", "A c #F3F300000000", "S c #F5F500000000", "D c #F1F10B0B0B0B", "F c #F1F10F0F0E0E", "G c #F2F210101010", "H c #F2F213131313", "J c #F2F214141414", "K c #F3F319191919", "L c #F3F31A1A1A1A", "P c #F4F41F1F1F1F", "I c #F4F420202020", "U c #F5F525252525", "Y c #F5F526262626", "T c #F2F22C2C2C2C", "R c #F2F22F2F2F2F", "E c #F6F62B2B2B2B", "W c #F6F62C2C2C2C", "Q c #F2F232323232", "! c #F3F332323232", "~ c #F3F335353535", "^ c #F7F731313131", "/ c #F4F436363636", "( c #F4F43B3B3B3B", ") c #F5F53F3F3F3F", "_ c #F8F837373737", "` c #F6F644444444", "' c #F7F749494949", "] c #F7F74E4E4E4E", "[ c #F8F853535353", "{ c #F9F957575757", "} c #FAFA5C5C5C5C", "| c #8282C8C82F2F", " . c #8C8CCECE3535", ".. c #9797D1D13C3C", "X. c #B1B1DEDE3030", "o. c #9E9ED4D44141", "O. c #E3E3D1D10000", "+. c #E5E5D7D70000", "@. c #E7E7D9D90000", "#. c #E9E9DBDB0000", "$. c #EBEBDDDD0000", "%. c #F7F7D7D70000", "&. c #F9F9DBDB0000", "*. c #FBFBDDDD0000", "=. c #FBFBDFDF0000", "-. c #FDFDDFDF0000", ";. c #FDFDE1E10000", ":. c #F3F3F1F11919", ">. c #F4F4F2F21F1F", ",. c #F4F4F4F41E1E", "<. c #EFEFF6F62A2A", "1. c #E7E7F3F33636", "2. c #F3F3F5F52424", "3. c #F5F5F5F52323", "4. c #F5F5F4F42424", "5. c #F6F6F5F52B2B", "6. c #F6F6F6F62929", "7. c #F6F6F6F62A2A", "8. c #F7F7F7F72E2E", "9. c #F7F7F7F72F2F", "0. c #F7F7F6F63030", "q. c #F4F4F2F23939", "w. c #F5F5F5F53D3D", "e. c #F7F7F8F83434", "r. c #F8F8F7F73636", "t. c #F8F8F8F83434", "y. c #F8F8F9F93A3A", "u. c #F9F9F9F93A3A", "i. c #F9F9F8F83D3D", "p. c #F9F9F9F93C3C", "a. c #C3C3E4E44040", "s. c #EFEFF6F64646", "d. c #F6F6F6F64242", "f. c #F7F7F7F74646", "g. c #F7F7F7F74B4B", "h. c #F9F9F9F94040", "j. c #F8F8FAFA4242", "k. c #FAFAFAFA4242", "l. c #FAFAFAFA4646", "z. c #FBFBFBFB4747", "x. c #FAFAFBFB4B4B", "c. c #FCFCFCFC4B4B", "v. c #FCFCFCFC4C4C", "b. c #F7F7F7F75050", "n. c #FBFBFCFC5151", "m. c #FDFDFDFD5151", "M. c #FCFCFCFC5454", "N. c #FCFCF2F26565", "B. c #FCFCF4F46969", "V. c #FBFBFAFA6060", "C. c #FDFDFDFD6D6D", "Z. c #FDFDFDFD7171", "A. c #FCFCFDFD7474", "S. c None", /* pixels */ "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "- - - - = -.;.;.-.&.%.S A A V V ", "- x x x j A.Z.C.B.N.V.} { [ ] B ", "- x y y t M.n.c.z.k.i._ ^ W ' B ", "= k y e 0 n.c.z.k.i.r.^ W Y ` m ", "= h e 0 7 x.s.o...1.0.E Y I ) m ", "= g 7 6 5 l.a.< , X.7.Y P K ( m ", "% f 6 5 1 k.u. .| <.4.P K H / n ", "$ d 5 1 > u.t.8.7.2.>.K H H ! v ", "# a 1 : ; e.8.7.3.,.:.H F D R v ", "@ a y e 8 b.g.f.d.w.q.~ ! R T v ", "+ O o X . $.$.#.@.+.O.n v v c c ", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.", "S.S.S.S.S.S.S.S.S.S.S.S.S.S.S.S." }; springlobby-0.169/src/images/flags/SO.xpm0000600000176000000410000000433012105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char * SO_xpm[] = { "16 16 102 2", " c None", ". c #2191FF", "+ c #1389FF", "@ c #0F85FF", "# c #0B83FD", "$ c #0581FD", "% c #007DFD", "& c #007BFB", "* c #0075F9", "= c #0071F7", "- c #006DF5", "; c #0067F3", "> c #0063F1", ", c #005DEF", "' c #0061EF", ") c #95CAFF", "! c #91C8FE", "~ c #8FC7FE", "{ c #8EC6FE", "] c #8AC3FD", "^ c #84C0FC", "/ c #80BEFB", "( c #79B9F9", "_ c #75B7F8", ": c #70B4F7", "< c #004DEB", "[ c #7FBFFE", "} c #7ABCFE", "| c #76BAFD", "1 c #71B7FC", "2 c #70B6FC", "3 c #6DB4FB", "4 c #67B1FA", "5 c #64AFFA", "6 c #5EABF8", "7 c #59A9F7", "8 c #55A6F6", "9 c #6DB2F7", "0 c #004BE9", "a c #1187FF", "b c #7CBEFE", "c c #63B0FC", "d c #AED4FB", "e c #55A7F9", "f c #5BA9F8", "g c #50A2F5", "h c #68AFF6", "i c #0045E7", "j c #A6D1FC", "k c #B8DAFB", "l c #D7E9FA", "m c #D8E9F9", "n c #B2D5F8", "o c #98C8F7", "p c #51A4F6", "q c #4FA2F5", "r c #4B9FF4", "s c #64ADF5", "t c #003FE7", "u c #6CB4FC", "v c #6DB3FB", "w c #C1DDFA", "x c #F1F5F9", "y c #F0F3F8", "z c #BEDAF7", "A c #57A7F6", "B c #469CF3", "C c #60AAF5", "D c #69B2FB", "E c #5FADFA", "F c #90C4F9", "G c #E2EDF8", "H c #E1ECF7", "I c #8CC0F6", "J c #49A0F5", "K c #3D97F2", "L c #5CA8F4", "M c #0035E3", "N c #AED3F8", "O c #81BBF7", "P c #7AB8F6", "Q c #419AF2", "R c #59A6F3", "S c #0031DF", "T c #60ACF9", "U c #3895F1", "V c #56A4F2", "W c #002DDD", "X c #7DBCFA", "Y c #75B7F9", "Z c #71B4F8", "` c #62ACF5", " . c #53A2F2", ".. c #0027DD", "+. c #0075F5", "@. c #0057ED", "#. c #0051ED", "$. c #0041E7", "%. c #003DE5", "&. c #0033E1", "*. c #0029DD", "=. c #0035DD", " ", " ", " ", ". + + + @ # $ % & * = - ; > , ' ", "@ ) ) ) ! ~ { ] ^ ^ / ( ( _ : < ", "+ ) [ } } | 1 2 3 4 5 6 7 8 9 0 ", "a ! b } | 1 c d d e f 7 8 g h i ", "@ ! } | 2 j k l m n o p q r s t ", "$ { | 2 u v w x y z A q r B C t ", "$ { 2 3 D E F G H I B J B K L M ", "& ] v D 5 6 N O P o B B Q K R S ", "* / D 5 T f e q J B B Q K U V W ", "= / X ( Y Z 9 h s ` C 7 R V ...", "+.; > , @.#.< 0 $.%.M &.W W *.=.", " ", " "}; springlobby-0.169/src/images/flags/SR.xpm0000600000176000000410000001020312105760300021615 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 162 2", " c black", ". c #000027270000", "X c #00002B2B0000", "o c #00002D2D0000", "O c #000031310000", "+ c #000033330000", "@ c #000037370000", "# c #00003D3D0000", "$ c #00003F3F0000", "% c #000045450000", "& c #00004B4B0000", "* c #00004F4F0000", "= c #000051510000", "- c #000055550000", "; c #00005B5B0000", ": c #00005F5F0000", "> c #000061610000", ", c #000065650000", "< c #00006B6B0000", "1 c #00006F6F0000", "2 c #000073730000", "3 c #000075750000", "4 c #000077770000", "5 c #00007D7D0000", "6 c #000081810000", "7 c #000083830000", "8 c #000085850000", "9 c #000087870000", "0 c #000089890000", "q c #00008F8F0000", "w c #3030A5A53131", "e c #3333A7A73434", "r c #3535A8A83737", "t c #3939AAAA3B3B", "y c #3D3DADAD3F3F", "u c #4141AEAE4242", "i c #4545B0B04646", "p c #4A4AB3B34B4B", "a c #4E4EB5B55050", "s c #5050B6B65050", "d c #5353B8B85454", "f c #5454B8B85555", "g c #5757B9B95959", "h c #5959BABA5A5A", "j c #5B5BBCBC5D5D", "k c #5E5EBDBD5E5E", "l c #6060BEBE6262", "z c #6262BEBE6363", "x c #6565C0C06666", "c c #6666C1C16767", "v c #6A6AC3C36B6B", "b c #6F6FC4C46E6E", "n c #7171C6C67272", "m c #7575C8C87575", "M c #7878C8C87979", "N c #7A7ACACA7A7A", "B c #7C7CCBCB7D7D", "V c #DFDF00000000", "C c #E3E300000000", "Z c #E5E500000000", "A c #E7E700000000", "S c #FBFB00000000", "D c #FDFD00000000", "F c red", "G c #F2F214141414", "H c #F3F319191919", "J c #F3F31A1A1A1A", "K c #F4F41F1F1F1F", "L c #F4F420202020", "P c #F5F524242424", "I c #F5F525252525", "U c #F2F22A2A2B2B", "Y c #F6F62B2B2B2B", "T c #F6F62D2D2B2B", "R c #F2F22E2E3030", "E c #F3F333333535", "W c #F7F730303030", "Q c #F4F436363636", "! c #F4F437373939", "~ c #F4F43B3B3B3B", "^ c #F5F53F3F3F3F", "/ c #F5F543433E3E", "( c #F7F77C7C3030", ") c #F5F542424343", "_ c #F6F646464848", "` c #F6F648484343", "' c #F3F349494B4B", "] c #F7F74D4D4949", "[ c #F7F74C4C4D4D", "{ c #FAFA40404040", "} c #FBFB45454545", "| c #FBFB47474646", " . c #FBFB4A4A4949", ".. c #FCFC4A4A4B4B", "X. c #FCFC4B4B4B4B", "o. c #FCFC4F4F4F4F", "O. c #FDFD4F4F5050", "+. c #F8F851514D4D", "@. c #F6F65C5C5D5D", "#. c #F8F851515252", "$. c #F9F950505252", "%. c #F9F955555757", "&. c #FAFA56565656", "*. c #FDFD53535353", "=. c #FDFD54545454", "-. c #FBFB5A5A5B5B", ";. c #FBFB5E5E5F5F", ":. c #FEFE58585858", ">. c #FCFC63636464", ",. c #FDFD67676868", "<. c #FDFD6B6B6C6C", "1. c #FDFD6F6F6F6F", "2. c #FEFE6E6E7070", "3. c #FEFE71717373", "4. c #FEFE72727373", "5. c #FEFE76767676", "6. c #FCFC7C7C7D7D", "7. c #F7F7B5B52F2F", "8. c #F8F8B7B73535", "9. c #FAFA82824040", "0. c #FAFAAAAA4F4F", "q. c #FBFBADAD5454", "w. c #F6F6C2C22A2A", "e. c #F8F8C7C73636", "r. c #F9F9C8C83A3A", "t. c #F9F9D7D73C3C", "y. c #F8F8F3F33636", "u. c #F9F9F2F23B3B", "i. c #FBFBCDCD4646", "p. c #FAFAD8D84141", "a. c #FEFE8A8A8C8C", "s. c #C9C9D9D9CBCB", "d. c #D3D3E5E5D5D5", "f. c #E6E6EEEEE7E7", "g. c #E6E6EFEFE7E7", "h. c #E8E8EFEFE9E9", "j. c #E9E9EFEFEAEA", "k. c #E9E9F0F0EAEA", "l. c #EAEAF1F1EBEB", "z. c #EBEBF5F5EBEB", "x. c #ECECF1F1ECEC", "c. c #EDEDF2F2EDED", "v. c #EDEDF9F9F1F1", "b. c #F1F1F5F5F2F2", "n. c #F2F2F6F6F3F3", "m. c #F2F2F7F7F3F3", "M. c #F4F4F7F7F4F4", "N. c #F3F3F8F8F4F4", "B. c #F4F4F9F9F5F5", "V. c #F5F5F8F8F5F5", "C. c #F5F5F9F9F6F6", "Z. c #F6F6F9F9F6F6", "A. c #F6F6FAFAF7F7", "S. c #F7F7FBFBF8F8", "D. c #F8F8FBFBF8F8", "F. c #F8F8FBFBF9F9", "G. c #F9F9FCFCF9F9", "H. c #F9F9FCFCFAFA", "J. c #F9F9FDFDFAFA", "K. c #FAFAFDFDFBFB", "L. c #FBFBFEFEFCFC", "P. c None", /* pixels */ "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "q 9 9 9 9 6 6 5 4 2 1 < , > ; : ", "0 B B N M m n b v c z k h d s = ", "v.L.J.J.J.J.S.S.S.V.V.M.n.n.n.d.", "F a.3.2.<.,.>.q.0.%.#.[ _ ) @.A ", "F 5.:.=.O...i.p.t.e.W Y I L ^ A ", "F 3.#.o...| 9.u.y.( T I L J ~ A ", "F 1.o. .| { r.8.7.w.L K J G Q C ", "S 6.;.-.%.O.+.] ` / ! E R U ' V ", "z.S.S.S.N.N.M.x.x.l.l.h.f.f.l.s.", "4 z z j h f a p u u y t r e w o ", "2 , > ; - = & % # # @ + o X . + ", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P." }; springlobby-0.169/src/images/flags/ST.xpm0000600000176000000410000001043512105760300021626 0ustar buildbotwww-data00000000000000/* XPM */ static const char *ST_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 169 2", " c black", ". c #000027270000", "X c #000029290000", "o c #00002D2D0000", "O c #00002F2F0000", "+ c #000033330000", "@ c #000035350000", "# c #000039390000", "$ c #00003D3D0000", "% c #2E2E2E2E1F1F", "& c #000041410000", "* c #000047470000", "= c #00004D4D0000", "- c #00004F4F0000", "; c #000051510000", ": c #000057570000", "> c #00005D5D0000", ", c #000061610000", "< c #000063630000", "1 c #000067670000", "2 c #00006D6D0000", "3 c #000071710000", "4 c #000073730000", "5 c #000075750000", "6 c #000079790000", "7 c #00007D7D0000", "8 c #424242423636", "9 c #000081810000", "0 c #000083830000", "q c #000087870000", "w c #000089890000", "e c #000093930000", "r c #131398980B0B", "t c #17179A9A0E0E", "y c #1C1C9D9D1313", "u c #2020A0A01919", "i c #2525A1A11E1E", "p c #2A2AA4A42323", "a c #3030A7A72929", "s c #3131A4A42C2C", "d c #3030A7A72C2C", "f c #3434A5A52F2F", "g c #3636A7A72F2F", "h c #3535AAAA2E2E", "j c #3636A7A73232", "k c #3636ABAB3131", "l c #3A3AA9A93535", "z c #3B3BADAD3434", "x c #3C3CAEAE3737", "c c #3E3EABAB3939", "v c #4040AFAF3A3A", "b c #4242AEAE3D3D", "n c #4141B0B03D3D", "m c #4545B4B43F3F", "M c #4646AEAE4242", "N c #4646B2B24242", "B c #4A4AB1B14646", "V c #4B4BB5B54747", "C c #4C4CB3B34949", "Z c #4F4FB3B34B4B", "A c #5050B7B74C4C", "S c #5252B6B64E4E", "D c #5353B6B65050", "F c #5454B9B95151", "G c #5757B8B85353", "H c #5858B9B95555", "J c #5858BBBB5454", "K c #5C5CBABA5757", "L c #5C5CBABA5858", "P c #5C5CBDBD5959", "I c #6060BDBD5C5C", "U c #6565BEBE6060", "Y c #5D5DC0C05D5D", "T c #5F5FC0C05C5C", "R c #6969C1C16565", "E c #6D6DC3C36969", "W c #7070C4C46D6D", "Q c #7474C6C67171", "! c #7777C8C87474", "~ c #7A7AC8C87777", "^ c #7B7BCDCD7B7B", "/ c #7C7CCACA7979", "( c #ADAD00000000", ") c #BBBB00000000", "_ c #BABA6F6F4444", "` c #E5E500000000", "' c #F5F500000000", "] c #F9F900000000", "[ c #FBFB00000000", "{ c #FDFD00000000", "} c red", "| c #CCCC7F7F6262", " . c #FCFC50504F4F", ".. c #FDFD53535353", "X. c #FEFE59595858", "o. c #E8E86E6E5F5F", "O. c #F4F463634949", "+. c #FCFC65654B4B", "@. c #FCFC6D6D4F4F", "#. c #FBFB77774949", "$. c #F5F575755C5C", "%. c #E0E077776666", "&. c #FCFC6A6A6A6A", "*. c #FDFD6F6F6F6F", "=. c #FEFE72727373", "-. c #FEFE76767676", ";. c #FEFE79797979", ":. c #959593931919", ">. c #9E9E9B9B1A1A", ",. c #8C8C8A8A2525", "<. c #999998983B3B", "1. c #9595BFBF0000", "2. c #A0A09E9E2F2F", "3. c #A4A4A1A12525", "4. c #AAAAA7A73030", "5. c #AEAEABAB3C3C", "6. c #9D9DC7C70000", "7. c #B5B5D1D10000", "8. c #B7B7D1D10000", "9. c #BBBBD5D50000", "0. c #F0F088884545", "q. c #FBFB8C8C4545", "w. c #FDFD80805454", "e. c #F1F196965959", "r. c #FDFD93935050", "t. c #EEEE85857B7B", "y. c #F4F482827A7A", "u. c #E6E6E5E51F1F", "i. c #E2E2EAEA1010", "p. c #E6E6EDED1414", "a. c #E6E6EEEE1919", "s. c #E6E6EEEE1F1F", "d. c #F2F2F2F21414", "f. c #E5E5EDED2626", "g. c #E7E7EEEE2424", "h. c #EBEBEAEA2B2B", "j. c #E6E6EDED3232", "k. c #EBEBEAEA3535", "l. c #E7E7F0F02B2B", "z. c #EBEBF1F12A2A", "x. c #ECECF2F22F2F", "c. c #E8E8F1F13131", "v. c #E9E9F1F13636", "b. c #EBEBF2F23434", "n. c #EAEAF2F23C3C", "m. c #ECECF3F33A3A", "M. c #EEEEF4F43F3F", "N. c #F4F4F4F42020", "B. c #F5F5F5F52424", "V. c #F4F4F4F42B2B", "C. c #F6F6F6F62A2A", "Z. c #F7F7F7F73030", "A. c #F4F4F4F43636", "S. c #F4F4F5F53B3B", "D. c #F5F5F5F53F3F", "F. c #F8F8F8F83636", "G. c #F9F9F9F93A3A", "H. c #E8E8EFEF4444", "J. c #ECECF4F44242", "K. c #EDEDF4F44747", "L. c #EDEDF4F44B4B", "P. c #EEEEF5F55151", "I. c #F0F0EFEF4141", "U. c #F7F7F7F74040", "Y. c #FAFAFAFA4040", "T. c #FBFBFBFB4646", "R. c #FCFCFCFC4B4B", "E. c #F0F0F6F65454", "W. c None", /* pixels */ "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.", "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.", "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.", ") e w w w 0 9 7 6 5 3 2 1 , > , ", "' t.^ / ~ ! Q W E R U P K F S = ", "} y.o.T P J F A V N N x k d Z = ", "} ;.$.e.P.P.L.L.J.n.v.l.l.f.J.6.", "} -.X.w.r.R.T.I.5.A.C.h.2.N.U.9.", "} =...@.+.T.U.<.8 4.C.,.% >.S.8.", "} *. .#.q.Y.G.k.2.C.B.u.:.d.A.7.", "] &.O.0.M.m.b.x.z.g.s.a.p.i.j.1.", "] %._ m v z h a p i u y t r j + ", "` t.A F H D Z B M b c l j f s . ", "( 3 < , : ; = * & $ # + O O X @ ", "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.", "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W." }; springlobby-0.169/src/images/flags/SV.xpm0000600000176000000410000000732012105760300021627 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SV_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 144 2", " c black", ". c #000000009F9F", "X c #00000000A1A1", "o c #00000000A3A3", "O c #00000000A5A5", "+ c #00000000A9A9", "@ c #00000000ABAB", "# c #00000000ADAD", "$ c #00000000B1B1", "% c #00000000B3B3", "& c #00000000B5B5", "* c #00000000B9B9", "= c #00000000BBBB", "- c #00000000BFBF", "; c #00000000C1C1", ": c #00000000C5C5", "> c #00000000C7C7", ", c #00000303C5C5", "< c #00000505C9C9", "1 c #00000707CBCB", "2 c #00000B0BCBCB", "3 c #00001111CFCF", "4 c #00001717D1D1", "5 c #00001D1DD1D1", "6 c #00002121D3D3", "7 c #00002727D5D5", "8 c #00002929D7D7", "9 c #00002F2FD7D7", "0 c #29294E4ED1D1", "q c #2D2D5151D2D2", "w c #31315454D4D4", "e c #36365858D5D5", "r c #3B3B5C5CD6D6", "t c #40406161D9D9", "y c #45456666DBDB", "u c #47476767DBDB", "i c #49496767D7D7", "p c #49496868D8D8", "a c #48486969DCDC", "s c #4C4C6A6AD8D8", "d c #4E4E6C6CD9D9", "f c #4C4C6C6CDDDD", "g c #4E4E6D6DDDDD", "h c #52526F6FDADA", "j c #51517070DFDF", "k c #53537171DFDF", "l c #55557272DBDB", "z c #58587575DCDC", "x c #5C5C7979DDDD", "c c #56567474E0E0", "v c #58587575E0E0", "b c #5B5B7878E1E1", "n c #5C5C7979E2E2", "m c #5F5F7C7CE3E3", "M c #60607C7CDFDF", "N c #60607C7CE0E0", "B c #65657F7FE1E1", "V c #64648080E4E4", "C c #67678383E5E5", "Z c #68688282E2E2", "A c #69698383E2E2", "S c #6B6B8686E6E6", "D c #6C6C8585E3E3", "F c #6D6D8686E3E3", "G c #6F6F8989E7E7", "H c #70708989E4E4", "J c #70708A8AE5E5", "K c #74748D8DE6E6", "L c #75758E8EE6E6", "P c #72728C8CE8E8", "I c #74748E8EE9E9", "U c #78789090E7E7", "Y c #79799090E8E8", "T c #7A7A9191E8E8", "R c #7C7C9494E8E8", "E c #7F7F9797E8E8", "W c #8D8DADAD5F5F", "Q c #9191AFAF6464", "! c #E9E9D6D67979", "~ c #87879999D3D3", "^ c #82829999EAEA", "/ c #85859B9BEBEB", "( c #89899E9EEBEB", ") c #9393A1A1DBDB", "_ c #8B8BA0A0EDED", "` c #8C8CA2A2EDED", "' c #8D8DA2A2EDED", "] c #8F8FA4A4EDED", "[ c #B7B7CBCB9E9E", "{ c #BABACDCDA1A1", "} c #BBBBC7C7F1F1", "| c #BFBFCBCBF5F5", " . c #DEDED4D48080", ".. c #C1C1CBCBECEC", "X. c #C4C4CDCDEAEA", "o. c #C6C6CECEEBEB", "O. c #C8C8D0D0EDED", "+. c #C9C9D2D2EEEE", "@. c #CACAD2D2EFEF", "#. c #CBCBD4D4EFEF", "$. c #CBCBD5D5EFEF", "%. c #CCCCD4D4EDED", "&. c #CDCDD7D7EFEF", "*. c #C8C8D2D2F2F2", "=. c #CCCCD4D4F0F0", "-. c #CECED5D5F2F2", ";. c #D0D0D7D7F3F3", ":. c #D1D1D8D8F1F1", ">. c #D1D1D8D8F2F2", ",. c #D3D3DADAF3F3", "<. c #D2D2D9D9F4F4", "1. c #D3D3DADAF4F4", "2. c #D4D4DCDCF4F4", "3. c #D5D5DCDCF4F4", "4. c #D6D6DDDDF5F5", "5. c #D6D6DEDEF6F6", "6. c #D8D8DFDFF6F6", "7. c #D8D8DFDFF7F7", "8. c #DADAE0E0F8F8", "9. c #DBDBE1E1F9F9", "0. c #DCDCE2E2F9F9", "q. c gray89", "w. c gray90", "e. c #E7E7E7E7E7E7", "r. c #E0E0E5E5F8F8", "t. c #E2E2E8E8FBFB", "y. c gray95", "u. c #F3F3F3F3F3F3", "i. c #F4F4F4F4F4F4", "p. c #F4F4F5F5F5F5", "a. c gray96", "s. c #F6F6F6F6F5F5", "d. c #F6F6F6F6F6F6", "f. c gray97", "g. c #F8F8F8F8F8F8", "h. c #F9F9F9F9F8F8", "j. c gray98", "k. c #FBFBFBFBFBFB", "l. c #FBFBFCFCFBFB", "z. c gray99", "x. c #FDFDFCFCFDFD", "c. c #FDFDFDFDFDFD", "v. c #FEFEFEFEFEFE", "b. c None", /* pixels */ "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "9 8 8 8 7 6 5 4 4 1 < > : ; ; = ", "8 ] ] ` ` ( / ^ ^ R I K H D Z * ", "7 ` I P G S C B m b c c f u N % ", "| t.0.0.7.7.5.3.;.3.;.#.#.+.>.) ", "c.c.c.c.c.c.k.! ! g.g.a.a.a.a.e.", "c.c.c.k.c.c.*.Q W } d.a.p.u.p.e.", "c.c.c.c.h.h.h.{ [ a.a.p.u.y.u.q.", "} r.7.3.3.3.>.&.=.=.O.+.X.X.%.~ ", "< T b c c f a u t r e q q 0 i X ", "< T L G D A V N x z l h d s p X ", ": : ; = = * % $ # + + O X X . . ", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b." }; springlobby-0.169/src/images/flags/SY.xpm0000600000176000000410000000560412105760300021635 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SY_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 108 2", " c black", ". c #0B0B0B0B0B0B", "X c #0F0F0F0F0E0E", "o c #131313131313", "O c #181819191919", "+ c #1E1E1E1E1E1E", "@ c #232323232323", "# c gray16", "$ c #2C2C2C2C2C2C", "% c gray18", "& c #2F2F2F2F2F2F", "* c #323232323232", "= c #343434343434", "- c #353535353535", "; c #393939393939", ": c #3A3A3A3A3A3A", "> c gray24", ", c #3F3F3F3F3F3F", "< c gray26", "1 c #444444444444", "2 c #464646464646", "3 c #4B4B4B4B4B4B", "4 c #505050505050", "5 c #545454545555", "6 c #585858585858", "7 c #5D5D5D5D5D5D", "8 c #616161616262", "9 c gray40", "0 c #5252B5B55454", "q c #6666BFBF6767", "w c #E9E900000000", "e c #EBEB00000000", "r c #EDED00000000", "t c #EFEF00000000", "y c #F1F100000000", "u c #F3F300000000", "i c #F5F500000000", "p c #F7F700000000", "a c #F9F900000000", "s c #FBFB00000000", "d c #FDFD00000000", "f c red", "g c #F6F62C2C2C2C", "h c #F7F731313131", "j c #F8F837373737", "k c #F9F93C3C3D3D", "l c #F7F749494949", "z c #F7F74E4E4E4E", "x c #FAFA42424242", "c c #FBFB47474747", "v c #FCFC4C4C4C4C", "b c #F8F853535353", "n c #F9F957575757", "m c #FDFD51515151", "M c #FDFD54545454", "N c #FAFA5C5C5C5C", "B c #FEFE59595959", "V c #FEFE5C5C5C5C", "C c #FEFE5F5F5F5F", "Z c #FBFB60606060", "A c #FCFC65656565", "S c #FCFC69696969", "D c #FDFD6D6D6D6D", "F c #FDFD70707171", "G c #FEFE74747474", "H c #FEFE77777777", "J c #FEFE79797979", "K c #FFFF7B7B7A7A", "L c #FFFF7B7B7B7B", "P c #8080C8C88282", "I c #8585CACA8686", "U c #9595D3D39696", "Y c #9797D3D39A9A", "T c #9D9DD4D49F9F", "R c #9D9DD6D69F9F", "E c #A3A3DADAA5A5", "W c #A7A7DBDBA9A9", "Q c gray81", "! c gray82", "~ c #D5D5D5D5D5D5", "^ c #D7D7D7D7D7D7", "/ c gray93", "( c #EDEDEFEFEFEF", ") c #EFEFEFEFEFEF", "_ c #E1E1F0F0E1E1", "` c #E9E9F3F3EBEB", "' c #F1F1F1F1F1F1", "] c gray95", "[ c #F3F3F3F3F3F3", "{ c #F4F4F4F4F4F4", "} c #F4F4F5F5F5F5", "| c gray96", " . c #F6F6F6F6F6F6", ".. c gray97", "X. c #F1F1F9F9F0F0", "o. c #F3F3F8F8F6F6", "O. c #F3F3FBFBF7F7", "+. c #F5F5FBFBF5F5", "@. c #F4F4FBFBF6F6", "#. c #F8F8F8F8F8F8", "$. c #F9F9F9F9F9F9", "%. c gray98", "&. c #FBFBFBFBFBFB", "*. c #FBFBFCFCFBFB", "=. c gray99", "-. c #FDFDFDFDFDFD", ";. c #FEFEFEFEFEFE", ":. c None", /* pixels */ ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", "f f f f s f f f s s p p u u r r ", "f L L L G G F D S A Z N n b z e ", "f L C V V M m v c x k j h g l e ", "' ;.;.;.;.*.*.&.%.%... . . . .^ ", "' ;.;.;.o.W O.%.%.o.Y ` .[ [ ^ ", "/ ;.;.;.E q T %...T 0 P .[ .! ", "/ ;.&.*.O.U X.%. . .I _ ' ' [ ! ", "/ ;.*.*.%.#.%... . .[ [ [ ' [ Q ", " 9 1 > : = $ # @ + O o X . & ", " 8 7 6 5 4 3 2 < > : - * & $ ", " ", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:.", ":.:.:.:.:.:.:.:.:.:.:.:.:.:.:.:." }; springlobby-0.169/src/images/flags/SZ.xpm0000600000176000000410000001047512105760300021640 0ustar buildbotwww-data00000000000000/* XPM */ static const char *SZ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 170 2", " c black", ". c #353500000000", "X c #393900000000", "o c #3F3F00000000", "O c #37372F2F2F2F", "+ c #3F3F38383838", "@ c #00003D3D7777", "# c #4F4F00000000", "$ c #4E4E34343434", "% c #7D7D00000000", "& c #7F7F00000000", "* c #7A7A20202020", "= c #474740404040", "- c #4B4B43434343", "; c #4C4C45454545", ": c #53534C4C4B4B", "> c #56564B4B4B4B", ", c #56564F4F4F4F", "< c #545451515353", "1 c #585850505151", "2 c #666661616262", "3 c #000027278989", "4 c #00002B2B8B8B", "5 c #00002D2D8D8D", "6 c #000033338D8D", "7 c #000031319191", "8 c #000037379393", "9 c #00003D3D9595", "0 c #00003F3F9999", "q c #000045459D9D", "w c #0B0B5D5D9797", "e c #00004B4BA1A1", "r c #01014F4FA5A5", "t c #07075555A7A7", "y c #0F0F5B5BABAB", "u c #17175F5FADAD", "i c #17176161AFAF", "p c #1D1D6565B1B1", "a c #23236B6BB5B5", "s c #2B2B6F6FB9B9", "d c #37377F7FABAB", "f c #31317373B9B9", "g c #31317373BBBB", "h c #37377777BFBF", "j c #3B3B7D7DC1C1", "k c #3F3F8181C3C3", "l c #53539393BDBD", "z c #79798D8DB5B5", "x c #45458383C5C5", "c c #49498585C5C5", "v c #4B4B8787C7C7", "b c #55558F8FCBCB", "n c #818100000000", "m c #858500000000", "M c #878700000000", "N c #969617171717", "B c #9A9A15151414", "V c #9A9A19191919", "C c #93933A3A3A3A", "Z c #A2A226262626", "A c #AAAA2D2D2B2B", "S c #A7A73A3A3A3A", "D c #A8A832323232", "F c #ADAD32323131", "G c #ACAC35353333", "H c #ADAD38383535", "J c #AEAE3F3F3F3F", "K c #B7B73F3F3F3F", "L c #B2B24A4A3D3D", "P c #9A9A45454646", "I c #A2A251515151", "U c #B3B344444444", "Y c #B0B04B4B4C4C", "T c #B4B44C4C4C4C", "R c #BCBC53534C4C", "E c #BEBE59595959", "W c #BFBF5D5D5858", "Q c #BFBF5C5C5C5C", "! c #D1D145450000", "~ c #DDDD61610000", "^ c #C2C258585454", "/ c #C5C572727272", "( c #C7C776767676", ") c #C8C876767373", "_ c #C8C876767575", "` c #CCCC79797979", "' c #838372729090", "] c #BABA80804242", "[ c #F1F189890000", "{ c #F5F599990303", "} c #E9E9A3A33636", "| c #EAEAA6A63838", " . c #EBEBA9A93C3C", ".. c #C1C189895252", "X. c #D4D48C8C4B4B", "o. c #D4D498985F5F", "O. c #DDDDA5A57171", "+. c #DADAABAB7878", "@. c #E3E39B9B6363", "#. c #EDEDABAB4040", "$. c #EDEDADAD4646", "%. c #EEEEB0B04C4C", "&. c #EEEEB2B24F4F", "*. c #EDEDB2B25353", "=. c #F0F0B5B55454", "-. c #F1F1B5B55454", ";. c #F2F2B7B75858", ":. c #F3F3B7B75959", ">. c #F3F3BABA5C5C", ",. c #F3F3BABA5D5D", "<. c #F4F4BBBB6161", "1. c #F4F4BCBC6262", "2. c #F5F5BEBE6666", "3. c #F5F5BFBF6666", "4. c #F2F2BEBE6B6B", "5. c #F5F5C1C16B6B", "6. c #F6F6C2C26F6F", "7. c #F7F7C4C47272", "8. c #F8F8C6C67676", "9. c #F9F9C8C87979", "0. c #F9F9C9C97C7C", "q. c #FAFACBCB7E7E", "w. c #8F8F8B8B8989", "e. c #A2A29A9A9797", "r. c #A3A39C9C9999", "t. c #A1A19D9DB6B6", "y. c #8383ACACC4C4", "u. c #8484ADADC5C5", "i. c #8686AEAEC7C7", "p. c #8989B0B0C8C8", "a. c #8C8CB2B2C9C9", "s. c #8E8EB3B3CACA", "d. c #9B9BA8A8C7C7", "f. c #9090B3B3CACA", "g. c #9696B9B9CFCF", "h. c #9898BBBBD1D1", "j. c #9898BBBBD3D3", "k. c #9999BDBDD2D2", "l. c #9B9BBDBDD5D5", "z. c #9D9DBFBFD3D3", "x. c #9E9EBFBFD7D7", "c. c #9F9FC1C1D5D5", "v. c #A3A3C3C3D7D7", "b. c #A1A1C1C1D8D8", "n. c #A4A4C3C3DADA", "m. c #A5A5C5C5D8D8", "M. c #A6A6C4C4DADA", "N. c #A8A8C4C4DADA", "B. c #ABABC8C8DDDD", "V. c #AEAECBCBDFDF", "C. c #AFAFCCCCE0E0", "Z. c #B1B1CDCDE1E1", "A. c #B3B3CECEE2E2", "S. c #B3B3CFCFE2E2", "D. c #C7C7AEAEAFAF", "F. c #C1C1BDBDBABA", "G. c #CACABEBEBCBC", "H. c #E4E4B6B6B2B2", "J. c #C5C5C1C1BEBE", "K. c #DFDFC1C1B6B6", "L. c #F7F7CBCB8282", "P. c #FBFBD4D49494", "I. c #EAEAC2C2BCBC", "U. c #CCCCC8C8C5C5", "Y. c #DFDFCECEC8C8", "T. c #DFDFCFCFCBCB", "R. c #E3E3E0E0DEDE", "E. c #F2F2E9E9E5E5", "W. c #F6F6EDEDE9E9", "Q. c None", /* pixels */ "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", "b v v v v x k j h g s a p i y u ", "l S.S.S.S.C.V.B.N.n.n.b.x.l.j.w ", "{ P.0.0.9.8.7.6.6.3.1.,.;.=.4.~ ", "M ` Q E ^ I 1 : W.I.R F A Z U # ", "M ( W @.o., < ; U.E.Y.X.Y.* J o ", "M _ O.+.> r.r.= F.2 w.I.W ] L X ", "% _ t.d.P - = + J.R.D.H z z L . ", "% / T Y L C $ O G.H.H V N N A . ", "[ L.2.<.:.:.=.&.%.$. . .| } *.! ", "d m.v.c.z.k.j.h.f.a.a.p.u.u.y.@ ", "g p i y t r q q q 9 8 7 5 4 3 6 ", "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.", "Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q." }; springlobby-0.169/src/images/flags/TC.xpm0000600000176000000410000001027112105760300021604 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TC_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 164 2", " c black", ". c #000000000B0B", "X c #000000000D0D", "o c #000000000F0F", "O c #000000001111", "+ c #000000001515", "@ c #000000001717", "# c #000000001D1D", "$ c #000000001F1F", "% c #000000002121", "& c #000000002525", "* c #000000002B2B", "= c #000000003131", "- c #000000003737", "; c #000000003D3D", ": c #000000003F3F", "> c #000000004343", ", c #000000004949", "< c #000000004F4F", "1 c #000000005555", "2 c #000000005B5B", "3 c #000000005F5F", "4 c #000000006161", "5 c #000000006363", "6 c #000000006565", "7 c #000000006969", "8 c #27274E4E7D7D", "9 c #2E2E52527E7E", "0 c #5D5D2D2D5D5D", "q c #5B5B3F3F7171", "w c #737321214747", "e c #7F7F35355B5B", "r c #4C4C62627474", "t c #57576D6D7D7D", "y c #00001D1D8787", "u c #00002F2F9595", "i c #1D1D37378383", "p c #1E1E4E4E9696", "a c #232352529999", "s c #242451519999", "d c #292957579C9C", "f c #2A2A57579C9C", "g c #2C2C58589A9A", "h c #2F2F5A5A9D9D", "j c #2E2E5B5B9F9F", "k c #2F2F5B5B9F9F", "l c #303055558181", "z c #333358588686", "x c #33335B5B9E9E", "c c #32325D5D9E9E", "v c #3A3A5F5F9F9F", "b c #2A2A5151A2A2", "n c #2F2F5C5CA0A0", "m c #30305757A9A9", "M c #36365B5BA6A6", "N c #35356060A0A0", "B c #34346060A2A2", "V c #35356161A2A2", "C c #39396363A3A3", "Z c #3A3A6464A5A5", "A c #3A3A6565A5A5", "S c #3B3B6565A5A5", "D c #3D3D6666A4A4", "F c #3E3E6565A6A6", "G c #3B3B6060AAAA", "H c #3C3C6363A8A8", "J c #3F3F6666ABAB", "K c #3F3F6969A8A8", "L c #525270709494", "P c #5F5F7B7B9E9E", "I c #41416666AEAE", "U c #42426A6AA6A6", "Y c #40406969A8A8", "T c #40406A6AA8A8", "R c #42426969ACAC", "E c #47476B6BA8A8", "W c #44446A6AAEAE", "Q c #44446D6DABAB", "! c #45456E6EABAB", "~ c #46466E6EA9A9", "^ c #45456D6DAEAE", "/ c #46466C6CAEAE", "( c #49496F6FACAC", ") c #49497272AEAE", "_ c #4B4B7171ACAC", "` c #4E4E7575AEAE", "' c #4F4F7575AFAF", "] c #49497171B0B0", "[ c #50506F6FA8A8", "{ c #50507575AEAE", "} c #5F5F7373A9A9", "| c #53537979B0B0", " . c #53537A7AB7B7", ".. c #54547979B1B1", "X. c #58587B7BB3B3", "o. c #58587D7DB3B3", "O. c #5C5C7F7FB5B5", "+. c #77777777A3A3", "@. c #7F7F7878A1A1", "#. c #5D5D8181B5B5", "$. c #727284848C8C", "%. c #747486868E8E", "&. c #61618383B8B8", "*. c #61618484B9B9", "=. c #62628585B9B9", "-. c #65658787BABA", ";. c #66668888BABA", ":. c #69698A8ABCBC", ">. c #6A6A8B8BBDBD", ",. c #6F6F8F8FBFBF", "<. c #838325254343", "1. c #ADAD5F5F7373", "2. c #BFBF6F6F7D7D", "3. c #CDCD19191919", "4. c #D5D56F6F7474", "5. c #E2E268686969", "6. c #E5E573737272", "7. c #E0E079797A7A", "8. c #E9E97C7C7979", "9. c #808074749C9C", "0. c #E0E07F7F8181", "q. c #B1B19B9B3E3E", "w. c #BCBCA3A33F3F", "e. c #8383BFBF4D4D", "r. c #B7B79F9F4747", "t. c #B8B8A2A24F4F", "y. c #9090C3C34444", "u. c #C8C8ACAC2E2E", "i. c #C8C8AEAE3535", "p. c #C7C7B3B33737", "a. c #CBCBBFBF3B3B", "s. c #E3E3AEAE3030", "d. c #E7E7BBBB3434", "f. c #C3C3A5A54343", "g. c #D2D2B2B24141", "h. c #DDDDBABA5050", "j. c #F0F0CBCB5E5E", "k. c #8A8A9494B9B9", "l. c #91918686A7A7", "z. c #94948686A7A7", "x. c #97979797B9B9", "c. c #A9A982829B9B", "v. c #BCBC85859797", "b. c #9696ACACD0D0", "n. c #9393B0B0D5D5", "m. c #C3C384849393", "M. c #D3D38A8A9292", "N. c #D6D69F9FA9A9", "B. c #D5D5AEAEB7B7", "V. c #D6D6ACACB6B6", "C. c #E1E185858787", "Z. c #ECEC83838181", "A. c #E6E694949595", "S. c #F1F1A6A6A4A4", "D. c #F0F0A8A8A7A7", "F. c #D4D4B9B9C4C4", "G. c #DDDDBABAC3C3", "H. c #E0E0B9B9C0C0", "J. c #E4E4D2D2A1A1", "K. c #DDDDD4D4DEDE", "L. c #E2E2C3C3CACA", "P. c #E2E2CCCCD3D3", "I. c #F6F6E9E9CDCD", "U. c None", /* pixels */ "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "2.+.u w <.y 0 1.5 3 2 1 < , > : ", "i G.K.V.N.F.P.b.:.-.&.O.o.| ` - ", "3.A.Z.6.5.8.7.4.[ R P %.$.L ( = ", "e H.S.0.C.D.M.c.E H h.j.d.t.W * ", "} L.x.v.m.n.V.z.F I J.I.s.r.J & ", "q k. .@.9.^ =.l.v m g.a.p.w.G $ ", "7 ,.] ] ^ T A N n b f.e.y.q.M @ ", "6 ,._ Q T A B n f s t i.u.r x @ ", "5 ;.^ K A N h f a p z l 9 8 h o ", "2 =.#.o.| { _ ~ U F C N c h g o ", "1 < , > : - = * & $ $ @ O o . . ", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U." }; springlobby-0.169/src/images/flags/TD.xpm0000600000176000000410000001027112105760300021605 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TD_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 164 2", " c black", ". c #000000009393", "X c #000000009595", "o c #000003039999", "O c #00000F0FA1A1", "+ c #00001919A3A3", "@ c #00001B1BA5A5", "# c #00002121A9A9", "$ c #00002929ADAD", "% c #00002D2DAFAF", "& c #00002D2DB7B7", "* c #00003131B1B1", "= c #01013333B3B3", "- c #03033535B3B3", "; c #03033535B5B5", ": c #05053737B3B3", "> c #15154343B9B9", ", c #51517373CBCB", "< c #57577777CDCD", "1 c #5B5B7A7ACBCB", "2 c #5B5B7B7BCFCF", "3 c #60607E7ECDCD", "4 c #60607F7FCDCD", "5 c #61617F7FD2D2", "6 c #64648282CFCF", "7 c #65658383CECE", "8 c #65658484D4D4", "9 c #69698585D2D2", "0 c #69698686D1D1", "q c #6A6A8787D0D0", "w c #69698787D5D5", "e c #6D6D8A8AD3D3", "r c #6E6E8A8AD2D2", "t c #6E6E8A8AD6D6", "y c #70708C8CD2D2", "u c #71718E8ED3D3", "i c #70708D8DD4D4", "p c #74748F8FD5D5", "a c #75759090D3D3", "s c #75759090D5D5", "d c #78789393D6D6", "f c #7A7A9393D4D4", "g c #7D7D9696D6D6", "h c #BFBF00000000", "j c #C1C100000000", "k c #C3C300000000", "l c #C5C500000000", "z c #C9C900000000", "x c #CBCB00000000", "c c #CDCD00000000", "v c #CFCF00000000", "b c #D3D300000000", "n c #D7D700000000", "m c #D9D900000000", "M c #DBDB00000000", "N c #DFDF00000000", "B c #E1E125252525", "V c #E2E228282828", "C c #E2E22A2A2A2A", "Z c #E3E32A2A2C2C", "A c #E3E32C2C2D2D", "S c #E4E42E2E2E2E", "D c #E4E42E2E3131", "F c #E4E431313232", "G c #E4E432323333", "H c #E6E634343636", "J c #E6E637373737", "K c #E6E638383838", "L c #E7E739393C3C", "P c #E7E73C3C3D3D", "I c #E7E73E3E3D3D", "U c #E9E93E3E4141", "Y c #E4E442424242", "T c #E5E545454545", "R c #E6E647474848", "E c #E6E648484848", "W c #E7E748484B4B", "Q c #E9E941414242", "! c #E9E942424242", "~ c #EAEA45454747", "^ c #EAEA47474848", "/ c #EBEB4A4A4C4C", "( c #E8E84C4C4C4C", ") c #E8E850505050", "_ c #E9E954545454", "` c #EBEB59595858", "' c #EBEB5D5D5D5D", "] c #EDED61616161", "[ c #EDED65656565", "{ c #EEEE69696A6A", "} c #F0F06C6C6E6E", "| c #CDCD97970000", " . c #C1C1ABAB0000", ".. c #D1D1B7B70000", "X. c #D5D5B5B50000", "o. c #D7D7B9B90000", "O. c #DBDBBDBD0000", "+. c #E7E7BBBB0000", "@. c #DBDBC9C92121", "#. c #EBEBD5D50000", "$. c #EDEDD3D30101", "%. c #EDEDD5D50707", "&. c #F1F1D9D90B0B", "*. c #E9E9CDCD5050", "=. c #EAEAD0D05454", "-. c #ECECD1D15959", ";. c #EDEDD3D35E5E", ":. c #EBEBDEDE5757", ">. c #ECECDDDD5A5A", ",. c #EEEEDFDF5F5F", "<. c #EEEED5D56363", "1. c #EFEFD7D76767", "2. c #ECECD3D36868", "3. c #E3E3D8D87070", "4. c #E5E5DADA7474", "5. c #E6E6DCDC7979", "6. c #E7E7DDDD7D7D", "7. c #F1F1D9D96C6C", "8. c #ECECE0E05B5B", "9. c #EFEFE1E16363", "0. c #EEEEE2E26060", "q. c #EFEFE1E16464", "w. c #EFEFE3E36565", "e. c #EDEDE2E26E6E", "r. c #EEEEE2E27070", "t. c #EEEEE2E27575", "y. c #F0F0E2E26161", "u. c #F1F1E4E46666", "i. c #F0F0E2E26868", "p. c #F0F0E5E56969", "a. c #F2F2E5E56B6B", "s. c #F1F1E4E46D6D", "d. c #F1F1E4E46E6E", "f. c #F1F1E6E66F6F", "g. c #F3F3E7E76F6F", "h. c #F2F2E5E57171", "j. c #F2F2E5E57272", "k. c #F1F1E5E57777", "l. c #F3F3E7E77575", "z. c #F4F4E7E77777", "x. c #F2F2E8E87373", "c. c #F4F4E8E87474", "v. c #F5F5E8E87A7A", "b. c #F5F5EAEA7878", "n. c #F6F6EAEA7C7C", "m. c #81819A9AD8D8", "M. c #85859D9DD8D8", "N. c #87879E9EDADA", "B. c #88889F9FDEDE", "V. c #8A8AA2A2DCDC", "C. c #8D8DA4A4DDDD", "Z. c #8E8EA4A4DDDD", "A. c #8F8FA5A5DDDD", "S. c #E6E6DDDD8383", "D. c #E9E9DFDF8181", "F. c #E9E9E1E18585", "G. c #EBEBE2E28888", "H. c #EFEFE8E89E9E", "J. c #F4F4E1E18888", "K. c #F6F6EDED8E8E", "L. c #F7F7ECEC8F8F", "P. c #F7F7EDED9393", "I. c #F8F8EEEE9494", "U. c None", /* pixels */ "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "> : : ; & @.&.%.$.#.+.N N n n n ", "= A.A.A.B.H.I.I.K.K.J.{ { [ ] b ", ": A.d p t G.n.v.v.l.7./ ^ ! ' v ", "- C.p y 8 F.c.c.j.f.1.~ ! I ` c ", "= V.u r 8 F.c.j.f.p.<.U P K _ c ", "% N.r 9 5 6.g.f.i.w.;.L H G ) z ", "$ M.9 6 2 5.p.i.i.8.-.H G S ( l ", "# m.7 3 < 4.u.y.,.8.=.D A C E l ", "@ g 3 1 , 3.i.8.>.:.*.Z C B T j ", "O f a u 9 S.k.t.r.e.2.W T T Y j ", "+ o X . X .O.o.X...| l j j h j ", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.", "U.U.U.U.U.U.U.U.U.U.U.U.U.U.U.U." }; springlobby-0.169/src/images/flags/TF.xpm0000600000176000000410000000741212105760300021612 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TF_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 145 2", " c black", ". c #000000000B0B", "X c #000000000D0D", "o c #000000000F0F", "O c #000000001111", "+ c #000000001515", "@ c #000000001717", "# c #000000001919", "$ c #000000001B1B", "% c #000000001D1D", "& c #000000002121", "* c #000000002525", "= c #000000002727", "- c #000000002B2B", "; c #000000002D2D", ": c #000000003333", "> c #000000003939", ", c #000000003F3F", "< c #000000004343", "1 c #000000004545", "2 c #000000004949", "3 c #000000004B4B", "4 c #000000005151", "5 c #000000005757", "6 c #000000005D5D", "7 c #000000006161", "8 c #000000006363", "9 c #000000006565", "0 c #000000006B6B", "q c #000000006F6F", "w c #000003037373", "e c #000009097575", "r c #000009097777", "t c #2D2D41419090", "y c #303043439191", "u c #313144449292", "i c #353548489494", "p c #363649499494", "a c #37374A4A9696", "s c #3A3A4D4D9595", "d c #3B3B4D4D9797", "f c #3A3A4D4D9898", "g c #3B3B4E4E9999", "h c #3C3C4E4E9999", "j c #3C3C4F4F9999", "k c #3E3E50509898", "l c #3F3F52529B9B", "z c #404051519999", "x c #404052529A9A", "c c #404053539B9B", "v c #424253539999", "b c #414153539C9C", "n c #424255559B9B", "m c #414154549C9C", "M c #454556569D9D", "N c #454557579D9D", "B c #444458589F9F", "V c #464658589F9F", "C c #4A4A5B5B9E9E", "Z c #48485A5AA0A0", "A c #4A4A5B5BA0A0", "S c #4A4A5D5DA3A3", "D c #4C4C5D5DA2A2", "F c #4E4E5F5FA1A1", "G c #4E4E5F5FA3A3", "H c #4E4E6060A3A3", "J c #4F4F6060A3A3", "K c #4F4F6262A6A6", "L c #50506060A2A2", "P c #52526363A4A4", "I c #53536464A2A2", "U c #53536464A6A6", "Y c #54546464A6A6", "T c #56566565A4A4", "R c #57576767A7A7", "E c #5A5A6969A7A7", "W c #58586868A8A8", "Q c #58586868A9A9", "! c #58586969A9A9", "~ c #5C5C6B6BA9A9", "^ c #5E5E6D6DA9A9", "/ c #5C5C6D6DACAC", "( c #5D5D6D6DACAC", ") c #60606F6FACAC", "_ c #61617171ADAD", "` c #61617171AEAE", "' c #65657474AEAE", "] c #65657575AFAF", "[ c #66667575B1B1", "{ c #69697777B2B2", "} c #6A6A7878B2B2", "| c #6A6A7979B4B4", " . c #6D6D7B7BB3B3", ".. c #6E6E7C7CB3B3", "X. c #6E6E7C7CB5B5", "o. c #6F6F7F7FB7B7", "O. c #71717F7FB7B7", "+. c #72728080B6B6", "@. c #75758181B3B3", "#. c #77778484B4B4", "$. c #74748383BABA", "%. c #76768484B9B9", "&. c #7B7B8888B7B7", "*. c #7A7A8888BBBB", "=. c #7D7D8989B8B8", "-. c #7D7D8989B9B9", ";. c #7F7F8B8BBEBE", ":. c #FBFB00000000", ">. c #FDFD00000000", ",. c #F8F836363636", "<. c #F9F93B3B3B3B", "1. c #F9F93B3B3C3C", "2. c #FAFA40404040", "3. c #FAFA41414141", "4. c #FAFA41414242", "5. c #FBFB46464646", "6. c #FBFB47474747", "7. c #FCFC4B4B4B4B", "8. c #FCFC4C4C4C4C", "9. c #FDFD51515151", "0. c #FCFC69696969", "q. c #FDFD6D6D6D6D", "w. c #FDFD70707171", "e. c #82828E8EBFBF", "r. c #85859191C1C1", "t. c #88889494C3C3", "y. c #8A8A9595C5C5", "u. c #8C8C9898C5C5", "i. c #8C8C9898C6C6", "p. c #8D8D9898C6C6", "a. c #91919B9BC2C2", "s. c #BBBBC1C1D5D5", "d. c #BCBCC2C2D7D7", "f. c #DCDCDEDEE7E7", "g. c #DFDFE1E1E7E7", "h. c #E2E2E4E4EAEA", "j. c #E6E6E8E8EDED", "k. c #E8E8E9E9EEEE", "l. c #FBFBFBFBFBFB", "z. c gray99", "x. c #FDFDFCFCFDFD", "c. c #FDFDFDFDFDFD", "v. c #FEFEFEFEFEFE", "b. c gray100", "n. c None", /* pixels */ "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "r r r b.b.b.:.:.:.7 6 5 4 2 < 2 ", "r p.p.b.b.b.w.q.0.o. .{ ] ) ~ > ", "r p.+.b.b.l.9.8.6.K F N b h R : ", "r t.O.b.b.b.6.5.3.S N b g a P - ", "w t.X.b.l.l.5.3.1.Z l g a u F * ", "q r.{ b.l.l.2.1.,.j h a y t C % ", "0 r.[ / / ~ P P Z Z =.k.j.f.&.$ ", "9 ;.[ / R U F Z M l n =.d.l l + ", "7 *./ Q U G Z N h g I h.d.g.@.O ", "6 $.O...} ] _ ^ ~ Y I a.h.#.s o ", "5 4 2 1 < > : - * % % $ O o . $ ", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n." }; springlobby-0.169/src/images/flags/TG.xpm0000600000176000000410000001002512105760300021605 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TG_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 157 2", " c black", ". c #000027270000", "X c #000029290000", "o c #00002B2B0000", "O c #00002D2D0000", "+ c #00002F2F0000", "@ c #000031310000", "# c #000033330000", "$ c #000037370000", "% c #00003D3D0000", "& c #00003F3F0000", "* c #000045450000", "= c #00004B4B0000", "- c #00004D4D0000", "; c #00004F4F0000", ": c #000051510000", "> c #000055550000", ", c #00005B5B0000", "< c #00005F5F0000", "1 c #000061610000", "2 c #000065650000", "3 c #00006B6B0000", "4 c #00006F6F0000", "5 c #000071710000", "6 c #000073730000", "7 c #000077770000", "8 c #000087870000", "9 c #1A1A97971A1A", "0 c #1F1F9A9A1F1F", "q c #25259D9D2525", "w c #2A2AA0A02B2B", "e c #3030A3A32C2C", "r c #3333A4A42F2F", "t c #3030A3A33030", "y c #3535A6A63232", "u c #3636A6A63636", "i c #3B3BA6A63B3B", "p c #3939A8A83535", "a c #3D3DAAAA3939", "s c #3B3BB1B13B3B", "d c #4B4BA3A31414", "f c #4F4FA5A51919", "g c #5454A8A81F1F", "h c #4141ADAD3D3D", "j c #5B5BA9A92020", "k c #5858ABAB2424", "l c #5F5FACAC2525", "z c #5D5DADAD2A2A", "x c #5555B0B03535", "c c #6363AEAE2B2B", "v c #6161B0B02F2F", "b c #6767B1B13030", "n c #6565B0B03636", "m c #6B6BB4B43636", "M c #6F6FB6B63C3C", "N c #7272B5B53F3F", "B c #4545AEAE4242", "V c #4A4AB0B04646", "C c #4E4EB3B34B4B", "Z c #5050B4B44E4E", "A c #5353B5B55050", "S c #5454B7B75353", "D c #5757B8B85555", "F c #5959B9B95757", "G c #5B5BBABA5858", "H c #5E5EBBBB5C5C", "J c #6060BCBC5D5D", "K c #7474BEBE4141", "L c #6262BEBE6060", "P c #6565BEBE6262", "I c #6666C0C06565", "U c #6A6AC2C26969", "Y c #6F6FC9C96D6D", "T c #ABAB7D7D0000", "R c #FDFD00000000", "E c red", "W c #F9F946464646", "Q c #FBFB46464646", "! c #FAFA4B4B4B4B", "~ c #FCFC4B4B4B4B", "^ c #FBFB50505050", "/ c #FBFB51515151", "( c #FBFB55555454", ") c #FCFC55555555", "_ c #FCFC56565656", "` c #FCFC59595959", "' c #FDFD5B5B5B5B", "] c #FDFD5E5E5E5E", "[ c #FEFE71717272", "{ c #FDFD77777777", "} c #FEFE76767676", "| c #FEFE77777777", " . c #FDFD79797A7A", ".. c #FEFE7B7B7B7B", "X. c #FFFF7B7B7B7B", "o. c #FEFE7D7D7D7D", "O. c #FEFE7E7E7E7E", "+. c #DFDF8D8D0000", "@. c #D5D597970000", "#. c #D3D3B1B10000", "$. c #D6D6BEBE0B0B", "%. c #E7E79D9D0000", "&. c #D7D7C0C00E0E", "*. c #D9D9C2C21313", "=. c #DADAC4C41919", "-. c #DCDCC6C61E1E", ";. c #DDDDC7C72323", ":. c #DFDFCACA2929", ">. c #DCDCC8C82F2F", ",. c #FBFBC5C50000", "<. c #F2F2C7C71010", "1. c #F2F2C9C91414", "2. c #F3F3CACA1919", "3. c #F4F4CCCC1F1F", "4. c #E1E1CCCC2E2E", "5. c #EBEBCECE2C2C", "6. c #E2E2CECE3434", "7. c #E4E4CFCF3A3A", "8. c #E4E4D1D13F3F", "9. c #EDEDD0D03131", "0. c #EEEED2D23737", "q. c #EFEFD4D43D3D", "w. c #F5F5CECE2424", "e. c #F5F5CFCF2626", "r. c #F3F3CECE3232", "t. c #F6F6D0D02A2A", "y. c #F6F6D1D12B2B", "u. c #F7F7D2D22F2F", "i. c #F7F7D3D33131", "p. c #F8F8D5D53434", "a. c #F8F8D5D53636", "s. c #F9F9D6D63C3C", "d. c #F9F9D9D93A3A", "f. c #FAFADADA3F3F", "g. c #E6E6D3D34444", "h. c #EDEDD5D54949", "j. c #EDEDDADA4C4C", "k. c #F0F0D5D54242", "l. c #F1F1D7D74747", "z. c #F6F6D6D64444", "x. c #FAFAD8D84242", "c. c #FBFBDCDC4545", "v. c #FBFBDDDD4949", "b. c #EBEBDCDC6666", "n. c #FBFBE3E34747", "m. c #FCFCE4E46A6A", "M. c #FFFF83838383", "N. c #FEFE87878787", "B. c #FEFE9B9B9B9B", "V. c #FDFDB3B3B4B4", "C. c #FEFEB7B7B7B7", "Z. c #FEFED0D0D0D0", "A. c #FEFEDADADADA", "S. c #FDFDDEDEDEDE", "D. c #FDFDE4E4E4E4", "F. c #FEFEFEFEFEFE", "G. c None", /* pixels */ "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "E E E E R E E 8 7 6 4 3 2 1 , < ", "E X.X.o.} o.X.Y U I L H F S Z - ", "E M.B.Z.[ ] ' j.l.k.q.0.9.5.h.@.", "E o.A.F.S.' _ n.x.s.a.i.y.e.z.%.", "E } C.D.V.! / K M m b c l j N : ", "E N.] ' _ Q ! s u t w q 0 9 i + ", "E { ` ( ~ ! W x v z j g f d n * ", ",.m.c.c.x.d.a.u.y.w.3.2.1.<.r.+.", "#.b.g.8.8.6.4.:.;.-.=.*.&.$.>.T ", "6 P H G F A C V B h a p y t e o ", "6 2 1 , > : = * % % $ @ + o . @ ", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G." }; springlobby-0.169/src/images/flags/TH.xpm0000600000176000000410000000731612105760300021617 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TH_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 144 2", " c black", ". c #000000002525", "X c #000000003131", "o c #000000003333", "O c #000000005B5B", "+ c #000000007373", "@ c #000000007B7B", "# c #000000007D7D", "$ c #000000007F7F", "% c #0B0B0D0D9999", "& c #141414149494", "* c #191919199696", "= c #1A1A1A1A9A9A", "- c #1F1F1F1F9999", "; c #1F1F1F1F9D9D", ": c #202020209B9B", "> c #242424249C9C", ", c #252525259E9E", "< c #252525259F9F", "1 c #2A2A2A2A9F9F", "2 c #2B2B2B2BA1A1", "3 c #2A2A2B2BA3A3", "4 c #2F2F2F2FA2A2", "5 c #30303030A4A4", "6 c #30303030A5A5", "7 c #36363636A3A3", "8 c #35353535A5A5", "9 c #36363636A7A7", "0 c #36363636A8A8", "q c #3B3B3B3BA7A7", "w c #3B3B3B3BA9A9", "e c #3B3B3B3BAAAA", "r c #3B3B3B3BABAB", "t c #3F3F3F3FA9A9", "y c #40404040AAAA", "u c #41414141ACAC", "i c #40404040AEAE", "p c #45454545ADAD", "a c #46464646AFAF", "s c #41414545B1B1", "d c #46464646B1B1", "f c #49494A4AB0B0", "g c #4B4B4A4AB3B3", "h c #4B4B4B4BB2B2", "j c #4F4F4F4FB2B2", "k c #4F4F4F4FB5B5", "l c #4E4E5050AFAF", "z c #50504F4FB4B4", "x c #51515353B1B1", "c c #53535353B7B7", "v c #55555757B3B3", "b c #54545454B6B6", "n c #59595B5BB5B5", "m c #58585858B8B8", "M c #5D5D5F5FB8B8", "N c #62626363BABA", "B c #66666767BCBC", "V c #67676969BABA", "C c #6A6A6C6CBFBF", "Z c #6F6F6F6FC0C0", "A c #6E6E7070C1C1", "S c #72727272C4C4", "D c #73737474C3C3", "F c #76767676C5C5", "G c #77777979C2C2", "H c #77777878C6C6", "J c #7B7B7B7BC4C4", "K c #7B7B7C7CC7C7", "L c #7F7F8080C6C6", "P c #DDDD00000000", "I c #DFDF00000000", "U c #E1E100000000", "Y c #E3E300000000", "T c #E5E500000000", "R c #E7E700000000", "E c #E9E900000000", "W c #EBEB00000000", "Q c #EDED00000000", "! c #EFEF00000000", "~ c #F1F100000000", "^ c #F3F300000000", "/ c #F5F500000000", "( c #F7F700000000", ") c #F9F900000000", "_ c #FBFB00000000", "` c #FDFD00000000", "' c red", "] c #F2F243434343", "[ c #F2F246464646", "{ c #F2F249494949", "} c #F3F34B4B4B4B", "| c #F4F44F4F4F4F", " . c #F5F553535353", ".. c #F6F657575757", "X. c #F7F758585858", "o. c #F7F75B5B5B5B", "O. c #F8F85C5C5C5C", "+. c #F7F760606060", "@. c #F9F960606060", "#. c #F8F863636464", "$. c #FAFA65656565", "%. c #F9F968686868", "&. c #F9F96B6B6B6B", "*. c #FBFB6A6A6A6A", "=. c #FAFA6F6F6F6F", "-. c #FCFC6E6E6E6E", ";. c #FBFB74747474", ":. c #FCFC72727272", ">. c #FDFD75757575", ",. c #FDFD79797A7A", "<. c #FEFE7B7B7B7B", "1. c #FEFE7F7F7F7F", "2. c #82828383C8C8", "3. c #85858787CACA", "4. c #8A8A8B8BCBCB", "5. c #89898A8ACCCC", "6. c #8C8C8E8ECFCF", "7. c #90909191D0D0", "8. c #93939494D2D2", "9. c #93939595D2D2", "0. c #96969797D4D4", "q. c #98989A9AD5D5", "w. c #9B9B9C9CD6D6", "e. c #ADADAEAEDDDD", "r. c #FEFE81818080", "t. c #FFFF83838383", "y. c #DFDFDFDFDFDF", "u. c #E9E9E9E9E9E9", "i. c #F1F1F1F1F1F1", "p. c gray95", "a. c #F3F3F3F3F3F3", "s. c #F4F4F4F4F4F4", "d. c gray96", "f. c #F6F6F6F6F6F6", "g. c gray97", "h. c #F8F8F8F8F8F8", "j. c #F9F9F9F9F9F9", "k. c gray98", "l. c #FBFBFBFBFBFB", "z. c gray99", "x. c #FDFDFDFDFDFD", "c. c #FEFEFEFEFEFE", "v. c gray100", "b. c None", /* pixels */ "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "' ' ' ' _ ' ' ' _ _ ( ( ^ ^ Q Q ", "' t.t.1.1.<.<.;.:.-.*.$.@.o.X.W ", "v.v.v.v.v.v.l.v.v.h.h.h.g.g.g.u.", "s e.w.q.9.9.7.6.5.3.2.L J G 4.# ", "# F m b j h a u w 9 6 2 < : t o ", "@ S c k g d i r 0 4 3 < : = w X ", "+ A j f p y w 8 4 2 > - * & 7 . ", "% 9.K H D A Z N N M n b x l V O ", "h.v.l.l.h.g.g.f.g.a.p.p.p.p.p.y.", "( ;.=.&.*.+.+.o... . .{ { [ ] P ", "( ^ ^ Q Q Q W W R R U U P P P P ", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b." }; springlobby-0.169/src/images/flags/TJ.xpm0000600000176000000410000000615312105760300021617 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TJ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 116 2", " c black", ". c #000007070000", "X c #00000F0F0000", "o c #000017170000", "O c #00001D1D0000", "+ c #000025250000", "@ c #0B0B64640B0B", "# c #0F0F67670E0E", "$ c #13136A6A1313", "% c #18186D6D1919", "& c #1E1E71711E1E", "* c #232375752323", "= c #292978782929", "- c #2C2C79792C2C", "; c #2F2F7A7A2F2F", ": c #2F2F7B7B2F2F", "> c #2E2E7C7C2E2E", ", c #32327D7D3232", "< c #35357F7F3535", "1 c #343480803434", "2 c #393982823939", "3 c #3A3A84843A3A", "4 c #3D3D84843D3D", "5 c #3F3F87873F3F", "6 c #424288884242", "7 c #44448B8B4444", "8 c #46468A8A4646", "9 c #4B4B8E8E4B4B", "0 c #505091915050", "q c #545494945555", "w c #585897975858", "e c #5D5D9A9A5D5D", "r c #61619E9E6262", "t c #6666A1A16666", "y c #959500000000", "u c #999900000000", "i c #9D9D00000000", "p c #A1A100000000", "a c #A5A500000000", "s c #A7A700000000", "d c #ABAB00000000", "f c #AFAF00000000", "g c #B1B100000000", "h c #B3B300000000", "j c #B7B700000000", "k c #BBBB00000000", "l c #BDBD00000000", "z c #BFBF00000000", "x c #CECE2C2C2C2C", "c c #D0D031313131", "v c #D1D137373737", "b c #D3D33C3C3D3D", "n c #D5D542424242", "m c #D6D647474747", "M c #D4D449494949", "N c #D6D64E4E4E4E", "B c #D8D84C4C4C4C", "V c #D9D951515151", "C c #D8D853535353", "Z c #D9D957575757", "A c #DBDB54545454", "S c #DADA5C5C5C5C", "D c #DDDD59595959", "F c #DDDD5C5C5C5C", "G c #DEDE5F5F5F5F", "H c #DCDC60606060", "J c #DDDD65656565", "K c #DEDE69696969", "L c #DFDF6D6D6D6D", "P c #E1E170707171", "I c #E2E274747474", "U c #E2E277777777", "Y c #E3E379797979", "T c #E4E47B7B7A7A", "R c #E4E47B7B7B7B", "E c #F5F5CFCF5D5D", "W c #F6F6D1D16161", "Q c #F3F3D4D47575", "! c #F5F5D6D67373", "~ c #F4F4D6D67878", "^ c #F5F5D8D87E7E", "/ c #F7F7D9D97D7D", "( c #F7F7DBDB8383", ") c #F8F8DDDD8C8C", "_ c #F8F8DEDE8D8D", "` c #F6F6DFDF9797", "' c #F7F7E1E19A9A", "] c #F7F7E1E19B9B", "[ c #F8F8E2E29E9E", "{ c #F9F9E5E5A8A8", "} c #F8F8E5E5ABAB", "| c #F9F9E9E9B6B6", " . c LightGray", ".. c #D5D5D5D5D5D5", "X. c #D7D7D7D7D7D7", "o. c gray86", "O. c #F8F8F2F2DDDD", "+. c #F8F8F6F6EEEE", "@. c #F1F1F1F1F1F1", "#. c gray95", "$. c #F3F3F3F3F3F3", "%. c #F4F4F4F4F4F4", "&. c #F4F4F5F5F5F5", "*. c gray96", "=. c #F6F6F6F6F6F6", "-. c gray97", ";. c #F8F8F8F8F8F8", ":. c #F9F9F9F9F9F9", ">. c gray98", ",. c #FBFBFBFBFBFB", "<. c #FBFBFCFCFBFB", "1. c gray99", "2. c #FDFDFCFCFDFD", "3. c #FDFDFDFDFDFD", "4. c #FEFEFEFEFEFE", "5. c None", /* pixels */ "5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.", "5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.", "5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.", "z z z z z j z j h h f d a a p i ", "z R R Y U I P L K J H S Z A N u ", "z R G F F A A B M n b v c x M y ", "*.4.4.4.,.4.~ { } ! +.:.*.*.*.o.", "*.4.4.4.2.) | [ [ O.~ *.*.*.*.X.", "#.4.4.,.) ;.;.] ` -.*.! $.$.*...", "#.4.,.4.4.4.( W E ~ *.*.$.$.$. .", "#.;.4.;.;.;.;.-.*.*.*.$.$.$.$. .", "+ t 7 5 3 1 > = * & % $ # @ ; ", "O r e w q 0 9 8 6 4 2 < , ; - ", "o o . ", "5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.", "5.5.5.5.5.5.5.5.5.5.5.5.5.5.5.5." }; springlobby-0.169/src/images/flags/TK.xpm0000600000176000000410000001003712105760300021614 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TK_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 157 2", " c black", ". c #000000007171", "X c #000000007373", "o c #000000007777", "O c #000000007979", "+ c #000000007B7B", "@ c #000000007D7D", "# c #000000007F7F", "$ c #40407C7C6868", "% c #000000008181", "& c #000000008383", "* c #000000008585", "= c #000000008787", "- c #000000008D8D", "; c #000000009191", ": c #000000009393", "> c #000000009999", ", c #000000009D9D", "< c #00000000A1A1", "1 c #00000000A5A5", "2 c #00000000A7A7", "3 c #00000000A9A9", "4 c #00000000ABAB", "5 c #00000000ADAD", "6 c #00000000AFAF", "7 c #00000000B3B3", "8 c #00000000B5B5", "9 c #00000000B9B9", "0 c #00000000BBBB", "q c #0B0B2C2CBEBE", "w c #10103030BFBF", "e c #13133434BBBB", "r c #00000000C3C3", "t c #00000101C3C3", "y c #00000303C5C5", "u c #00000505C5C5", "i c #00000B0BC5C5", "p c #14143535C1C1", "a c #1A1A3A3AC4C4", "s c #20203F3FC6C6", "d c #2A2A5656B9B9", "f c #2D2D5A5AB1B1", "g c #26264545C8C8", "h c #2C2C4848C6C6", "j c #2F2F4B4BC7C7", "k c #2C2C4949CACA", "l c #2F2F4B4BC8C8", "z c #2F2F4C4CCFCF", "x c #32324D4DC8C8", "c c #33334E4EC8C8", "v c #36365151C9C9", "b c #36365151CFCF", "n c #3B3B5656CCCC", "m c #3F3F5A5ACDCD", "M c #35355151D0D0", "N c #3B3B5656D1D1", "B c #3B3B5656D2D2", "V c #46465D5DBCBC", "C c #44446161BEBE", "Z c #44445E5ECFCF", "A c #41415B5BD2D2", "S c #44445F5FD2D2", "D c #49496363D1D1", "F c #49496363D4D4", "G c #4E4E6767D3D3", "H c #4F4F6868D6D6", "J c #52526868C3C3", "K c #51516C6CC5C5", "L c #53536B6BD4D4", "P c #55556E6ED3D3", "I c #53536C6CD8D8", "U c #58586F6FD6D6", "Y c #5D5D7777D2D2", "T c #5F5F7676D4D4", "R c #58587171D9D9", "E c #58587070DADA", "W c #5D5D7575D8D8", "Q c #5C5C7A7ADFDF", "! c #5F5F7D7DE0E0", "~ c #65657878C8C8", "^ c #6D6D7F7FCCCC", "/ c #61617878D9D9", "( c #60607C7CDCDC", ") c #66667C7CDBDB", "_ c #5252A0A03B3B", "` c #5757A3A33F3F", "' c #434380806B6B", "] c #49498A8A6565", "[ c #5A5A8E8E7E7E", "{ c #5B5BA4A45050", "} c #6060A4A44848", "| c #7A7A83838D8D", " . c #7B7B8B8BBEBE", ".. c #6A6A8080DDDD", "X. c #6F6F8484DEDE", "o. c #72728686DFDF", "O. c #7F7F9191DADA", "+. c #76768A8AE0E0", "@. c #79799191E5E5", "#. c #79799292E5E5", "$. c #7B7B9494E6E6", "%. c #969696966262", "&. c #A3A3A6A65E5E", "*. c #AFAFB0B05D5D", "=. c #A7A7A4A46464", "-. c #A4A4A5A56B6B", ";. c #A6A6A6A67979", ":. c #A7A7A8A87A7A", ">. c #B0B0B1B16161", ",. c #B0B0B1B16464", "<. c #B4B4B5B56868", "1. c #B7B7B9B96B6B", "2. c #B0B0B2B27D7D", "3. c #B4B4B4B47F7F", "4. c #B7B7B8B87272", "5. c #B8B8B6B67F7F", "6. c #BABAB8B87171", "7. c #BABABCBC7A7A", "8. c #C5C5BABA4545", "9. c #C1C1BBBB5A5A", "0. c #CACAC2C25555", "q. c #CCCCC4C45959", "w. c #CECEC8C85D5D", "e. c #D9D9CECE4D4D", "r. c #D3D3CBCB5858", "t. c #DDDDD2D25858", "y. c #CFCFC8C86060", "u. c #C9C9C6C67979", "i. c #D6D6CDCD6E6E", "p. c #D8D8D0D06565", "a. c #DFDFD9D97C7C", "s. c #EAEADBDB4B4B", "d. c #EBEBDDDD5050", "f. c #F3F3E6E67070", "g. c #F4F4E8E87474", "h. c #82828E8E8282", "j. c #81818E8E8888", "k. c #898990908E8E", "l. c #8B8B97978E8E", "z. c #8B8B93939C9C", "x. c #8C8C99999191", "c. c #91919E9E8181", "v. c #91919C9C9999", "b. c #8C8C9696A7A7", "n. c #9D9DA9A98E8E", "m. c #9797A2A29B9B", "M. c #A0A0A5A59595", "N. c #A1A1A7A79B9B", "B. c #A0A0ABAB9292", "V. c #A4A4B0B09393", "C. c #AAAAAFAFA1A1", "Z. c #B3B3B8B8AEAE", "A. c #E3E3DCDC8686", "S. c #E2E2E7E7F6F6", "D. c #E7E7EAEAF8F8", "F. c #E9E9EBEBF7F7", "G. c None", /* pixels */ "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "i u u u r 0 8 2 < 5 5 4 2 < , , ", "y $.$.$.O.Z.A.g.f.a.V...R L G : ", "u $.Q ( D. .u.V.B.n.r.:.V h D : ", "y @.Q E T F.Y 3.2.6.1.0.| g Z - ", "r +.E N.b.P S.A N l.<.| =.g m * ", "0 +.I i.m.7.K m b C ,.| 8.s n # ", "8 X.L 5.v.t.x.v x d { } %.e v # ", "7 ) G z.6.w.e.*.-.f ] ` $ w v + ", "7 ) D C :.q.n.>.*.=.' _ e q j + ", "4 / T R ..n.t.d.s.t.| | c j h o ", "4 2 < , > > - X . # # + + + + + ", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.", "G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G." }; springlobby-0.169/src/images/flags/TL.xpm0000600000176000000410000000703412105760300021620 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TL_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 135 2", " c black", ". c #454500000000", "X c #717119190000", "o c #494949494949", "O c #4B4B4A4A4B4B", "+ c #4C4C4C4C5252", "@ c #545454545858", "# c gray36", "$ c #717171714545", "% c gray40", "& c #6D6D6D6D6D6D", "* c #797979797979", "= c #7B7B7B7B7A7A", "- c #7A7A80804545", "; c #7F7F81815050", ": c #DDDD00000000", "> c #DFDF00000000", ", c #E1E100000000", "< c #E3E300000000", "1 c #E5E500000000", "2 c #E7E700000000", "3 c #E9E900000000", "4 c #EBEB00000000", "5 c #EDED00000000", "6 c #EFEF00000000", "7 c #F1F100000000", "8 c #F3F300000000", "9 c #F5F500000000", "0 c #F7F700000000", "q c #F1F10B0B0B0B", "w c #F1F10F0F0E0E", "e c #F9F900000000", "r c #FBFB00000000", "t c #FDFD00000000", "y c red", "u c #FFFF09090000", "i c #F2F210101010", "p c #F2F213131313", "a c #F2F214141414", "s c #F3F319191919", "d c #F3F31A1A1A1A", "f c #F4F41E1E1E1E", "g c #F4F41F1F1F1F", "h c #F4F420202020", "j c #F5F523232323", "k c #F5F524242424", "l c #F5F525252525", "z c #F5F526262626", "x c #F2F22C2C2C2C", "c c #F2F22F2F2F2F", "v c #F6F629292929", "b c #F6F62A2A2A2A", "n c #F6F62B2B2B2B", "m c #F6F62C2C2C2C", "M c #F7F72E2E2E2E", "N c #F7F72F2F2F2F", "B c #F2F232323232", "V c #F3F332323232", "C c #F3F335353535", "Z c #F7F730303030", "A c #F7F731313131", "S c #F4F436363636", "D c #F7F73A3A3030", "F c #F4F439393939", "G c #F4F43B3B3B3B", "H c #F5F53D3D3D3D", "J c #F5F53F3F3F3F", "K c #F8F834343434", "L c #F8F836363636", "P c #F8F837373636", "I c #F8F837373737", "U c #F9F93C3C3C3C", "Y c #F9F93C3C3D3D", "T c #F9F943433D3D", "R c #F8F84C4C3535", "E c #F9F976763B3B", "W c #F6F642424242", "Q c #F6F644444444", "! c #F7F746464646", "~ c #F7F749494949", "^ c #F7F74B4B4B4B", "/ c #F7F74E4E4E4E", "( c #FAFA41414242", ") c #FAFA42424242", "_ c #FBFB47474747", "` c #FCFC4C4C4C4C", "' c #FCFC5C5C4C4C", "] c #F8F850505050", "[ c #F8F853535353", "{ c #F9F954545555", "} c #F9F957575757", "| c #FDFD51515151", " . c #FDFD54545454", ".. c #FAFA5C5C5C5C", "X. c #F9F966665959", "o. c #FBFB60606060", "O. c #FCFC65656565", "+. c #FCFC69696969", "@. c #FDFD6D6D6D6D", "#. c #FDFD70707171", "$. c #FEFE74747474", "%. c #FEFE77777777", "&. c #81818A8A4444", "*. c #8E8E8D8D4747", "=. c #8F8F96965959", "-. c #9D9D96966262", ";. c #9A9AA2A25F5F", ":. c #B3B3ABAB7C7C", ">. c #F8F887873636", ",. c #F8F88B8B3838", "<. c #F9F9B3B33C3C", "1. c #FAFA86864242", "2. c #FEFE85855A5A", "3. c #FEFE81817A7A", "4. c #F7F7ADAD5E5E", "5. c #FDFDB6B65151", "6. c #FDFDBABA7C7C", "7. c #F2F2D7D73F3F", "8. c #F9F9E5E53B3B", "9. c #F9F9F9F93C3C", "0. c #F9F9DDDD5D5D", "q. c #E1E1E8E84141", "w. c #E8E8EFEF4C4C", "e. c #EEEEF0F04040", "r. c #FBFBE1E14747", "t. c #F9F9FAFA4040", "y. c #F6F6F3F35555", "u. c #A3A3A3A3A2A2", "i. c #A4A4A4A4A4A4", "p. c #D5D5D5D5D5D5", "a. c #D7D7D7D7D7D7", "s. c #D7D7D7D7D8D8", "d. c #EEEEEDEDEDED", "f. c gray96", "g. c None", /* pixels */ "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "X u y y r y y y r r 0 0 8 8 5 5 ", " :.6.%.%.%.#.@.+.O.o...} [ / 4 ", " = ;.0.2. .| ` _ ( Y I A M ~ 4 ", " = # =.y.5.' _ ( U S A n z Q 1 ", " i.a.@ ; w.r.1.T I Z n z h T 1 ", " d.f.a.O *.t.9.,.N n z f s G 1 ", " i.a.+ $ q.8.>.D n z f s p S 1 ", " & o $ e.<.R A n j f s p p B > ", " % &.7.E I M n j f s p w q c > ", " -.4.X.{ ] ~ Q ( H F C B c c > ", ". 8 7 7 5 5 4 4 1 1 , , > > : : ", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g." }; springlobby-0.169/src/images/flags/TM.xpm0000600000176000000410000000740112105760300021617 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 144 2", " c black", ". c #000007070000", "X c #00000F0F0000", "o c #000015150000", "O c #000017170000", "+ c #00001D1D0000", "@ c #000023230000", "# c #000025250000", "$ c #00002B2B0000", "% c #00002D2D0000", "& c #00002F2F0000", "* c #000031310000", "= c #000035350000", "- c #000037370000", "; c #000039390000", ": c #0B0B63632D2D", "> c #0D0D60602D2D", ", c #101062623131", "< c #111163633131", "1 c #151566663535", "2 c #161666663535", "3 c #161666663636", "4 c #1A1A69693A3A", "5 c #1B1B6A6A3A3A", "6 c #1B1B6A6A3B3B", "7 c #20206D6D3D3D", "8 c #20206E6E3E3E", "9 c #21216E6E3F3F", "0 c #22226E6E4040", "q c #252571714242", "w c #262671714343", "e c #262672724343", "r c #272772724444", "t c #272772724545", "y c #282873734545", "u c #2B2B74744747", "i c #2C2C75754747", "p c #2B2B75754848", "a c #2C2C75754848", "s c #2C2C76764949", "d c #2D2D76764A4A", "f c #2E2E76764A4A", "g c #303076764B4B", "h c #303077774B4B", "j c #303078784C4C", "k c #313178784C4C", "l c #31317A7A4D4D", "z c #333379794E4E", "x c #33337B7B4F4F", "c c #34347A7A4E4E", "v c #33337B7B5050", "b c #36367B7B5151", "n c #36367C7C5151", "m c #37377C7C5151", "M c #36367D7D5252", "N c #39397F7F5454", "B c #3A3A7E7E5555", "V c #3B3B7F7F5656", "C c #3C3C80805656", "Z c #3C3C81815656", "A c #3D3D81815757", "S c #3E3E81815757", "D c #404082825A5A", "F c #424284845B5B", "G c #424284845C5C", "H c #424285855C5C", "J c #434386865D5D", "K c #454586865E5E", "L c #474787876060", "P c #474788886161", "I c #484889896161", "U c #48488A8A6262", "Y c #4A4A8A8A6363", "T c #4C4C8A8A6565", "R c #4D4D8C8C6565", "E c #4F4F8D8D6767", "W c #50508E8E6969", "Q c #51518F8F6A6A", "! c #52528F8F6A6A", "~ c #545490906C6C", "^ c #595994946F6F", "/ c #5B5B95957272", "( c #5E5E96967474", ") c #626299997878", "_ c #63639A9A7979", "` c #646499997979", "' c #64649A9A7979", "] c #67679E9E7D7D", "[ c #6C6CA0A08181", "{ c #6F6FA1A18282", "} c #6F6FA2A28282", "| c #7070A4A48484", " . c #7474A6A68787", ".. c #7575A7A78989", "X. c #7676A8A88A8A", "o. c #7A7AAAAA8D8D", "O. c #7C7CABAB8F8F", "+. c #7C7CACAC8F8F", "@. c #7E7EACAC8F8F", "#. c #898900000000", "$. c #919100000000", "%. c #9F9F00000000", "&. c #ABAB00000000", "*. c #ADAD00000000", "=. c #BBBB27271919", "-. c #959568685959", ";. c #9D9D63635454", ":. c #B7B760605E5E", ">. c #C5C55B5B5454", ",. c #CDCD65655353", "<. c #C8C864645E5E", "1. c #C9C964645F5F", "2. c #CECE69695B5B", "3. c #CECE6A6A5C5C", "4. c #D1D169695454", "5. c #C1C163636060", "6. c #CCCC6C6C6767", "7. c #CCCC6D6D6767", "8. c #CFCF71716767", "9. c #CFCF75756565", "0. c #CFCF73736D6D", "q. c #CFCF77776C6C", "w. c #D1D171716464", "e. c #D2D272726565", "r. c #D4D479796C6C", "t. c #D3D37F7F7575", "y. c #D5D585857E7E", "u. c #DEDE8A8A7070", "i. c #8080AEAE9292", "p. c #8585B0B09595", "a. c #8E8EB5B59E9E", "s. c #8F8FB6B69E9E", "d. c #B5B5CECEBEBE", "f. c #BFBFD4D4C8C8", "g. c #DDDD93938888", "h. c #DCDC91918F8F", "j. c #DCDC9A9A9292", "k. c #E2E2A1A19999", "l. c #C1C1D6D6C9C9", "z. c #D3D3E2E2DADA", "x. c #D8D8E5E5DDDD", "c. c #E2E2EBEBE5E5", "v. c #E4E4ECECE7E7", "b. c None", /* pixels */ "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "; ; =.&.&.* % < @ + o X . ", "; +.g.h.k...i.] f.a._ ( ^ ~ E ", "; O.0.u.7.i.! i.Y c./ N v f Y ", "- o.r.8.e.! d.T f.v._ x f y K ", "- ..6.5.6.T ] x.z.a.J f t 0 D ", "% .8.:.3.L J Z _ F s r 8 6 Z ", "% | <.-.>.J Z m x f q 9 6 2 m ", "# [ 2.;.,.Z b h y y 8 5 2 < c ", "+ ] j.4.y.b x y q 6 5 2 < > h ", "o _ q.t.e.W R L J Z N b x h i ", "o . $.*.#. ", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.", "b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b." }; springlobby-0.169/src/images/flags/TN.xpm0000600000176000000410000000716312105760300021625 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TN_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 138 2", " c black", ". c #DDDD00000000", "X c #DFDF00000000", "o c #E1E100000000", "O c #E3E300000000", "+ c #E5E500000000", "@ c #E7E700000000", "# c #E9E900000000", "$ c #EBEB00000000", "% c #EDED00000000", "& c #EFEF00000000", "* c #F1F100000000", "= c #F3F300000000", "- c #F5F500000000", "; c #F7F700000000", ": c #F1F10B0B0B0B", "> c #F1F10F0F0E0E", ", c #F9F900000000", "< c #FBFB00000000", "1 c #FDFD00000000", "2 c red", "3 c #F2F210101010", "4 c #F2F213131313", "5 c #F2F214141414", "6 c #F3F319191919", "7 c #F3F31A1A1A1A", "8 c #F4F41F1F1F1F", "9 c #F4F420202020", "0 c #F5F525252525", "q c #F5F526262626", "w c #F2F22C2C2C2C", "e c #F2F22F2F2F2F", "r c #F6F62B2B2B2B", "t c #F6F62C2C2C2C", "y c #F2F232323232", "u c #F3F332323232", "i c #F3F335353535", "p c #F7F731313131", "a c #F4F436363636", "s c #F4F439393939", "d c #F4F43B3B3B3B", "f c #F5F53D3D3D3D", "g c #F5F53F3F3F3F", "h c #F7F73C3C3C3C", "j c #F8F837373737", "k c #F9F93A3A3A3A", "l c #FAFA3F3F3F3F", "z c #F6F642424242", "x c #F6F644444444", "c c #F7F746464646", "v c #F7F749494949", "b c #F7F74B4B4B4B", "n c #F7F74E4E4E4E", "m c #F8F842424242", "M c #FAFA44444444", "N c #FBFB45454545", "B c #FBFB49494949", "V c #FBFB4A4A4949", "C c #FCFC4F4F4F4F", "Z c #F3F355555555", "A c #F3F35D5D5D5D", "S c #F4F459595959", "D c #F5F55E5E5E5E", "F c #F6F65C5C5C5C", "G c #F8F850505050", "H c #F8F853535353", "J c #FBFB51515151", "K c #FBFB52525252", "L c #F9F954545555", "P c #F9F957575757", "I c #FDFD53535353", "U c #FDFD54545454", "Y c #F9F958585858", "T c #FAFA5C5C5C5C", "R c #FAFA5D5D5D5D", "E c #FEFE58585858", "W c #FEFE59595959", "Q c #FEFE5C5C5C5C", "! c #FEFE5F5F5F5F", "~ c #F6F663636363", "^ c #F7F768686767", "/ c #FBFB60606060", "( c #FBFB61616262", ") c #F8F865656565", "_ c #FCFC65656565", "` c #FCFC66666666", "' c #FAFA6D6D6D6D", "] c #FAFA6F6F6F6F", "[ c #FCFC69696969", "{ c #FCFC6A6A6A6A", "} c #FDFD6D6D6D6D", "| c #FDFD6F6F6F6F", " . c #F6F67C7C7C7C", ".. c #F9F977777777", "X. c #FDFD70707171", "o. c #FEFE72727373", "O. c #FCFC76767676", "+. c #FCFC77777777", "@. c #FEFE74747474", "#. c #FEFE76767676", "$. c #FEFE77777777", "%. c #F9F978787878", "&. c #FEFE79797979", "*. c #FFFF7B7B7A7A", "=. c #FFFF7B7B7B7B", "-. c #F9F982828282", ";. c #F8F884848484", ":. c #F7F79D9D9D9D", ">. c #F8F894949393", ",. c #F9F999999898", "<. c #FBFB9F9F9F9F", "1. c #F4F4A1A1A1A1", "2. c #F4F4ABABABAB", "3. c #F9F9A9A9A9A9", "4. c #FAFAACACACAC", "5. c #F5F5B2B2B2B2", "6. c #F7F7B5B5B5B5", "7. c #F8F8B2B2B2B2", "8. c #FAFAB1B1B1B1", "9. c #FBFBB0B0B0B0", "0. c #FCFCB2B2B2B2", "q. c #FDFDB4B4B4B4", "w. c #FDFDB5B5B5B5", "e. c #FDFDB7B7B7B7", "r. c #F9F9BDBDBDBD", "t. c #FDFDC1C1C1C1", "y. c #F7F7D6D6D6D6", "u. c #F5F5D9D9D9D9", "i. c #F7F7DCDCDCDC", "p. c #FDFDDFDFDFDF", "a. c #F5F5EBEBEBEB", "s. c #F6F6E9E9E9E9", "d. c #F6F6ECECECEC", "f. c #F8F8E7E7E7E7", "g. c #FAFAE9E9E9E9", "h. c #FBFBEEEEEEEE", "j. c #FCFCEFEFEFEF", "k. c None", /* pixels */ "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "2 2 2 2 < 2 2 2 < < ; ; = = % % ", "2 =.=.=.O.o.o.} [ _ / R P H n $ ", "2 =.! Q Q t.p.h.h.8.%.j p t v $ ", "2 =.Q Q w.0.O.I ] r.>.) r q x + ", "2 O.U U w.O.<.g.-.;.i.~ q 9 g + ", "2 o.I C 0.J g...m 6.s.F 9 7 d + ", "2 | C V 4.] ,.f.:. .u.S 7 5 a o ", "< { V N 4.3.) h F 5.2.Z 5 3 y X ", "< ) N l k 7.u.d.a.1.F 5 > : e X ", "; ~ R Y P n V x m g s i y e e X ", "; = = = % % $ $ + + o o X X . . ", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.", "k.k.k.k.k.k.k.k.k.k.k.k.k.k.k.k." }; springlobby-0.169/src/images/flags/TO.xpm0000600000176000000410000000631612105760300021625 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TO_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 119 2", " c black", ". c #DDDD00000000", "X c #DFDF00000000", "o c #E1E100000000", "O c #E3E300000000", "+ c #E5E500000000", "@ c #E7E700000000", "# c #E9E900000000", "$ c #EBEB00000000", "% c #EDED00000000", "& c #EFEF00000000", "* c #F1F100000000", "= c #F3F300000000", "- c #F5F500000000", "; c #F7F700000000", ": c #F1F10B0B0B0B", "> c #F1F10F0F0E0E", ", c #F9F900000000", "< c #FBFB00000000", "1 c #FDFD00000000", "2 c #F2F210101010", "3 c #F2F213131313", "4 c #F2F214141414", "5 c #F3F319191919", "6 c #F3F31A1A1A1A", "7 c #F4F41E1E1E1E", "8 c #F4F41F1F1F1F", "9 c #F4F420202020", "0 c #F5F523232323", "q c #F5F524242424", "w c #F5F525252525", "e c #F5F526262626", "r c #F2F22C2C2C2C", "t c #F2F22F2F2F2F", "y c #F6F629292929", "u c #F6F62A2A2A2A", "i c #F6F62B2B2B2B", "p c #F6F62C2C2C2C", "a c #F7F72E2E2E2E", "s c #F7F72F2F2F2F", "d c #F2F232323232", "f c #F3F332323232", "g c #F3F335353535", "h c #F7F730303030", "j c #F7F731313131", "k c #F4F436363636", "l c #F4F439393939", "z c #F4F43B3B3B3B", "x c #F5F53D3D3D3D", "c c #F5F53F3F3F3F", "v c #F8F834343434", "b c #F8F835353535", "n c #F8F836363636", "m c #F8F837373636", "M c #F8F837373737", "N c #F9F93A3A3A3A", "B c #F9F93B3B3A3A", "V c #F9F93B3B3B3B", "C c #F9F93B3B3C3C", "Z c #F9F93C3C3C3C", "A c #F9F93C3C3D3D", "S c #FAFA3F3F3F3F", "D c #F6F642424242", "F c #F6F644444444", "G c #F7F746464646", "H c #F7F749494949", "J c #F7F74B4B4B4B", "K c #F7F74E4E4E4E", "L c #FAFA40404040", "P c #FAFA41414141", "I c #FAFA41414242", "U c #FAFA42424242", "Y c #FAFA44444444", "T c #FBFB45454545", "R c #FBFB46464646", "E c #FBFB47474747", "W c #FBFB49494949", "Q c #FBFB4A4A4949", "! c #FCFC4A4A4B4B", "~ c #FCFC4C4C4C4C", "^ c #FCFC4F4F4F4F", "/ c #F8F850505050", "( c #F8F853535353", ") c #F9F954545555", "_ c #F9F957575757", "` c #FDFD53535353", "' c #F9F958585858", "] c #FAFA5C5C5C5C", "[ c #FAFA5D5D5D5D", "{ c #FEFE5C5C5C5C", "} c #FEFE5E5E5F5F", "| c #FEFE5F5F5F5F", " . c #FBFB60606060", ".. c #FBFB61616262", "X. c #FEFE60606060", "o. c #FCFC65656565", "O. c #FCFC66666666", "+. c #FCFC69696969", "@. c #FCFC6A6A6A6A", "#. c #FDFD6D6D6D6D", "$. c #FDFD6F6F6F6F", "%. c #FEFE72727373", "&. c #FEFE85858585", "*. c #FDFDCFCFCFCF", "=. c #FEFED2D2D2D2", "-. c #FEFED9D9D9D9", ";. c #FFFFDBDBDBDB", ":. c #EFEFEFEFEFEF", ">. c #EFEFEFEFF1F1", ",. c #F1F1F1F1F1F1", "<. c #FBFBFBFBFBFB", "1. c gray99", "2. c #FDFDFCFCFCFC", "3. c #FDFDFCFCFDFD", "4. c #FDFDFDFDFDFD", "5. c #FDFDFDFDFEFE", "6. c #FEFEFEFEFEFE", "7. c gray100", "8. c None", /* pixels */ "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", ",.,.,.,.,.:.:.1 < < ; ; = = % % ", ",.7.;.&.;.7.7.@.+.o. .[ ' ( K $ ", ",.7.[ { [ <.7.~ R U A n j p H $ ", ",.7.=.[ *.2.2.R U A n j p e F + ", ",.7.7.7.7.<.<.L C n h u e 9 c + ", "1 %.` ^ ! R S N n j u e 8 5 z + ", "1 $.^ ! R L N n s u q 8 5 4 k + ", "1 +.! U S N k s u e 8 5 4 2 j . ", "< o.R L N j s u 9 8 5 3 > : t . ", "; ..[ ' ) / J F D x z k f t r . ", "; = = % % % % $ + + O O . . . . ", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.", "8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8." }; springlobby-0.169/src/images/flags/TR.xpm0000600000176000000410000000706112105760300021626 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TR_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 135 2", " c black", ". c #DDDD00000000", "X c #DFDF00000000", "o c #E1E100000000", "O c #E3E300000000", "+ c #E5E500000000", "@ c #E7E700000000", "# c #E9E900000000", "$ c #EBEB00000000", "% c #EDED00000000", "& c #EFEF00000000", "* c #F1F100000000", "= c #F3F300000000", "- c #F5F500000000", "; c #F7F700000000", ": c #F1F10B0B0B0B", "> c #F1F10F0F0E0E", ", c #F9F900000000", "< c #FBFB00000000", "1 c #FDFD00000000", "2 c red", "3 c #F2F210101010", "4 c #F2F213131313", "5 c #F2F214141414", "6 c #F3F319191919", "7 c #F3F31A1A1A1A", "8 c #F4F41E1E1E1E", "9 c #F4F41F1F1F1F", "0 c #F4F420202020", "q c #F5F523232323", "w c #F5F524242424", "e c #F5F525252525", "r c #F5F526262626", "t c #F2F22C2C2C2C", "y c #F2F22F2F2F2F", "u c #F6F62B2B2B2B", "i c #F6F62C2C2C2C", "p c #F2F232323232", "a c #F3F332323232", "s c #F3F335353535", "d c #F6F630303030", "f c #F7F731313131", "g c #F6F633333333", "h c #F4F436363636", "j c #F4F439393939", "k c #F4F43B3B3B3B", "l c #F5F53D3D3D3D", "z c #F5F53F3F3F3F", "x c #F8F837373636", "c c #F8F837373737", "v c #F9F93A3A3A3A", "b c #F9F93B3B3A3A", "n c #F9F93B3B3B3B", "m c #F9F93C3C3C3C", "M c #F9F93C3C3D3D", "N c #F9F93D3D3D3D", "B c #FAFA3F3F3F3F", "V c #F6F642424242", "C c #F7F743434343", "Z c #F6F644444444", "A c #F7F746464646", "S c #F7F749494949", "D c #F7F74B4B4B4B", "F c #F7F74E4E4E4E", "G c #FAFA40404040", "H c #FAFA42424242", "J c #FAFA44444444", "K c #FBFB45454545", "L c #FBFB46464646", "P c #FBFB47474747", "I c #FAFA48484848", "U c #FBFB49494949", "Y c #FCFC4F4F4F4F", "T c #F8F850505050", "R c #F8F853535353", "E c #F9F954545555", "W c #F9F957575757", "Q c #FDFD53535353", "! c #FCFC55555555", "~ c #F9F958585858", "^ c #FAFA5C5C5C5C", "/ c #FAFA5D5D5D5D", "( c #FEFE58585858", ") c #FEFE59595959", "_ c #FEFE5C5C5C5C", "` c #FEFE5F5F5F5F", "' c #F5F562626262", "] c #F8F861616161", "[ c #FBFB60606060", "{ c #FBFB65656565", "} c #FCFC65656565", "| c #FCFC66666666", " . c #FCFC69696969", ".. c #FCFC6A6A6A6A", "X. c #FDFD6D6D6D6D", "o. c #FDFD6F6F6F6F", "O. c #F6F67D7D7D7D", "+. c #FAFA70707070", "@. c #FAFA71717171", "#. c #FDFD70707171", "$. c #FEFE72727373", "%. c #FEFE74747474", "&. c #FEFE77777777", "*. c #FDFD7A7A7A7A", "=. c #FEFE79797979", "-. c #FEFE7A7A7A7A", ";. c #FFFF7B7B7B7B", ":. c #FEFE7D7D7D7D", ">. c #FFFF7E7E7E7E", ",. c #FFFF7F7F7F7F", "<. c #F7F78C8C8C8C", "1. c #F8F887878787", "2. c #FCFC80808080", "3. c #FDFD9D9D9D9D", "4. c #FDFD9F9F9F9F", "5. c #FBFBA2A2A2A2", "6. c #F7F7B7B7B7B7", "7. c #FAFAB0B0B0B0", "8. c #FDFDB4B4B4B4", "9. c #FCFCBEBEBFBF", "0. c #FBFBC0C0C0C0", "q. c #F5F5D1D1D1D1", "w. c #F7F7D7D7D7D7", "e. c #F8F8D8D8D8D8", "r. c #F6F6EFEFEFEF", "t. c #F8F8E3E3E3E3", "y. c #F9F9E3E3E3E3", "u. c #F8F8E5E5E5E5", "i. c #FCFCE4E4E4E4", "p. c #FDFDE9E9E9E9", "a. c #F7F7F5F5F5F5", "s. c #FBFBF3F3F3F3", "d. c #FCFCF3F3F3F3", "f. c #FDFDF6F6F6F6", "g. c None", /* pixels */ "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "2 2 2 2 < 2 2 2 < < ; ; = = % % ", "2 >.>.*.&.&.#.X...{ [ _ W R F $ ", "2 >._ _ ( 3.3.! L H N c f i S $ ", "2 >._ ( 8.p.i.0.I N h f u r Z + ", "2 *.( *.f.2.L +.N t.H u r 0 z + ", "2 #.Q 9.f.P N z u.a.r.' 9 6 k + ", "2 X.Y 5.s.+.n [ 6.O.q.9 6 5 h O ", "< ..U P 7.t.e.w.f r 9 6 4 4 a X ", "< { H N n 1.<.h 0 9 6 4 > : y X ", "; | / ~ W F I Z V z j s a y y X ", "; = = % % % $ $ + + O O X X . . ", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g." }; springlobby-0.169/src/images/flags/TT.xpm0000600000176000000410000000732012105760300021626 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TT_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 147 2", " c black", ". c #131313131313", "X c gray9", "o c #181819191919", "O c #191919191919", "+ c gray12", "@ c gray14", "# c #2A2A2A2A2A2A", "$ c #2F2F2F2F2F2F", "% c #323232323232", "& c #353535353535", "* c gray21", "= c gray23", "- c #414141414141", "; c #464646464646", ": c #4B4B4B4B4B4B", "> c #4C4C4C4C4C4C", ", c #515151515151", "< c gray33", "1 c #555555555555", "2 c #585858585858", "3 c gray35", "4 c gray36", "5 c gray38", "6 c gray39", "7 c #656565656666", "8 c DimGray", "9 c #6C6C6C6C6C6C", "0 c #6F6F6F6F6F6F", "q c #727272727272", "w c #777777777777", "e c #797979797979", "r c #7B7B7B7B7B7B", "t c gray50", "y c #DDDD00000000", "u c #DFDF00000000", "i c #E3E300000000", "p c #E5E500000000", "a c #E7E700000000", "s c #E5E505050505", "d c #E9E900000000", "f c #EBEB00000000", "g c #EDED00000000", "h c #EFEF00000000", "j c #F1F100000000", "k c #F3F300000000", "l c #F5F500000000", "z c #F7F700000000", "x c #F9F900000000", "c c #FBFB00000000", "v c #FDFD00000000", "b c red", "n c #F2F214141414", "m c #F3F31A1A1A1A", "M c #F4F41F1F1F1F", "N c #F4F420202020", "B c #F5F525252525", "V c #F5F526262626", "C c #F6F62B2B2B2B", "Z c #F6F62C2C2C2C", "A c #F7F72E2E2E2E", "S c #FFFF25252525", "D c #F3F332323232", "F c #F7F731313131", "G c #F4F436363636", "H c #F4F43B3B3B3B", "J c #F5F53F3F3F3F", "K c #F8F834343434", "L c #F8F837373636", "P c #F8F837373737", "I c #F9F93A3A3A3A", "U c #F9F93C3C3D3D", "Y c #FAFA3F3F3F3F", "T c #F6F644444444", "R c #F7F746464646", "E c #F7F749494949", "W c #F7F74B4B4B4B", "Q c #F7F74E4E4E4E", "! c #FAFA42424242", "~ c #FAFA44444444", "^ c #FBFB45454545", "/ c #FBFB49494949", "( c #FBFB4A4A4949", ") c #FCFC4F4F4F4F", "_ c #F8F850505050", "` c #F8F853535353", "' c #F9F954545555", "] c #F9F957575757", "[ c #FDFD53535353", "{ c #F9F958585858", "} c #FAFA5C5C5C5C", "| c #FAFA5D5D5D5D", " . c #FDFD59595959", ".. c #FEFE58585858", "X. c #FBFB60606060", "o. c #FBFB61616262", "O. c #FCFC65656565", "+. c #FCFC66666666", "@. c #FCFC69696969", "#. c #FCFC6A6A6A6A", "$. c #FDFD6F6F6F6F", "%. c #F2F27A7A7A7A", "&. c #F3F37F7F7F7F", "*. c #FEFE72727373", "=. c #FEFE76767676", "-. c #FEFE79797979", ";. c gray51", ":. c #888888888888", ">. c gray60", ",. c gray62", "<. c #DBDBBBBBBBBB", "1. c #F5F586868686", "2. c #F2F28A8A8A8A", "3. c #F6F68A8A8A8A", "4. c #F7F78D8D8D8D", "5. c #F6F696969696", "6. c #F8F891919191", "7. c #F9F994949494", "8. c #FAFA98989898", "9. c #FBFB9B9B9B9B", "0. c #FCFC9E9E9E9E", "q. c #FDFDA3A3A3A3", "w. c #FEFEA8A8A9A9", "e. c #FDFDB0B0B0B0", "r. c #FFFFB9B9B9B9", "t. c #E3E3C1C1C1C1", "y. c #F1F1DEDEDEDE", "u. c #F1F1E2E2E2E2", "i. c #F2F2E1E1E1E1", "p. c #F4F4E3E3E2E2", "a. c #F5F5E4E4E4E4", "s. c #F4F4E6E6E6E6", "d. c #F6F6E6E6E6E6", "f. c #F7F7E6E6E6E6", "g. c #FDFDE5E5E5E5", "h. c #F8F8E8E8E8E8", "j. c #F9F9EAEAEAEA", "k. c #FAFAEBEBEBEB", "l. c #FAFAEDEDEDED", "z. c #FDFDEBEBEBEB", "x. c #FCFCEDEDEDED", "c. c #FCFCEFEFEFEF", "v. c #FDFDF1F1F1F1", "b. c #FDFDF2F2F2F2", "n. c #FEFEF3F3F3F3", "m. c #FEFEF5F5F5F5", "M. c None", /* pixels */ "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "z.O o g...b c c z z k k g g ", "S m.,.e w >.v.e.@.O.X.} ] ` Q f ", "b r.v.:.3 1 t l.9.! U L F Z E f ", "b -.w.v.;., : w k.7.L F C V T p ", "b =...q.c.r ; - 0 h.4.C V N J p ", "b *.[ ) 0.l.q = * 7 a.1.N m H p ", "b $.) ( ^ 8.l.8 $ # 4 p.&.n G p ", "c #.( ^ U I 7.a.5 @ + 1 i.%.D u ", "c +.^ U I L Z 3.a.3 O . > y.2.u ", "z o.| { ] ` E T 5.a.9 * % 5 u.u ", "k k k g g g f f p s t. <.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.", "M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M." }; springlobby-0.169/src/images/flags/TV.xpm0000600000176000000410000000720012105760300021625 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TV_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 140 2", " c black", ". c #010100000000", "X c #050500000000", "o c #1B1B00000000", "O c #212100000000", "+ c #272700000000", "@ c #292900000000", "# c #2F2F00000000", "$ c #353500000000", "% c #3B3B00000000", "& c #00000D0D7B7B", "* c #000013137F7F", "= c #414100000000", "- c #474700000000", "; c #4B4B00000000", ": c #515100000000", "> c #575700000000", ", c #595900000000", "< c #5D5D00000000", "1 c #5F5F00000000", "2 c #636300000000", "3 c #676700000000", "4 c #696900000000", "5 c #000017178181", "6 c #00001D1D8787", "7 c #000023238B8B", "8 c #28288D8DC2C2", "9 c #2C2C9090C5C5", "0 c #2D2D9090C5C5", "q c #31319393C7C7", "w c #32329494C7C7", "e c #36369696C9C9", "r c #37379696C9C9", "t c #38389797C9C9", "y c #3B3B9A9ACBCB", "u c #3C3C9A9ACBCB", "i c #3D3D9A9ACBCB", "p c #6D6DA2A28181", "a c #7878A9A98B8B", "s c #43439B9BC8C8", "d c #40409C9CCCCC", "f c #40409D9DCCCC", "g c #41419D9DCDCD", "h c #42429D9DCDCD", "j c #43439D9DCDCD", "k c #46469E9ECACA", "l c #45459F9FCECE", "z c #4646A0A0CDCD", "x c #4646A0A0CFCF", "c c #4747A0A0CECE", "v c #4848A0A0CFCF", "b c #4B4BA3A3CFCF", "n c #4C4CA3A3CFCF", "m c #4C4CA4A4CFCF", "M c #4D4DA4A4CFCF", "N c #4A4AA2A2D0D0", "B c #4D4DA3A3D1D1", "V c #5050A3A3CECE", "C c #5050A5A5D1D1", "Z c #5151A6A6D1D1", "A c #5353A7A7D1D1", "S c #5252A6A6D3D3", "D c #5555A9A9D3D3", "F c #5656A9A9D4D4", "G c #5A5AABABD5D5", "H c #5B5BACACD4D4", "J c #5F5FAEAED7D7", "K c #5D5DB1B1DBDB", "L c #6363B0B0D9D9", "P c #7171BDBDE2E2", "I c #919121210000", "U c #939346463131", "Y c #94944A4A3434", "T c #96964C4C3737", "R c #A3A35D5D0000", "E c #9F9F5A5A4646", "W c #A2A25E5E4B4B", "Q c #A5A562625050", "! c #A8A866665454", "~ c #A9A96A6A5858", "^ c #AAAA6A6A5959", "/ c #ADAD6F6F5D5D", "( c #AFAF73736262", ") c #B1B176766565", "_ c #B2B277776666", "` c #B3B37A7A6A6A", "' c #B6B67E7E6D6D", "] c #C1C163630000", "[ c #BDBD84844040", "{ c #BEBE8E8E5757", "} c #B9B980807070", "| c #BABA84847575", " . c #BCBC86867777", ".. c #BEBE89897A7A", "X. c #BEBE8B8B7D7D", "o. c #A7A7B9B96868", "O. c #C3C38E8E3838", "+. c #DDDDB2B23B3B", "@. c #C0C08D8D7F7F", "#. c #D3D3AFAF6565", "$. c #DEDEC7C72C2C", "%. c #E4E4C7C71F1F", "&. c #E7E7CACA2A2A", "*. c #E8E8CDCD3030", "=. c #E4E4CDCD6565", "-. c #FEFEE0E05858", ";. c #FEFEE6E67676", ":. c #FCFCE6E67C7C", ">. c #8888B3B39898", ",. c #8F8FB7B79E9E", "<. c #A1A1C3C3A2A2", "1. c #B3B3CECEB3B3", "2. c #FDFDE7E78585", "3. c #FDFDEBEB9494", "4. c #E7E7E6E6B7B7", "5. c #FBFBF1F1BCBC", "6. c #DFDFDFDFDFDF", "7. c #C4C4E0E0EEEE", "8. c #CDCDE4E4F0F0", "9. c #FCFCF3F3C8C8", "0. c #E9E9E9E9E9E9", "q. c #E4E4F0F0F5F5", "w. c #E9E9F5F5F9F9", "e. c #F1F1F1F1F1F1", "r. c gray95", "t. c #F3F3F3F3F3F3", "y. c #F4F4F4F4F4F4", "u. c gray96", "i. c #F6F6F6F6F6F6", "p. c gray97", "a. c #F8F8F8F8F8F8", "s. c #F9F9F9F9F9F9", "d. c gray98", "f. c #FBFBFBFBFBFB", "g. c gray99", "h. c #FCFCFDFDFDFD", "j. c #FDFDFDFDFDFD", "k. c #FEFEFEFEFEFE", "l. c gray100", "z. c None", /* pixels */ "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.", "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.", "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.", "4 4 4 4 4 2 < < > : ; - = % R # ", "4 @.X.X... .| ' ' ` ) #.=.~ { + ", "l.l.l.l.l.l.l.l.d.d.s.s.p.p.p.0.", "l.l.q.P J J G F S B l j i *.,.7 ", "l.;.-.l.7.H D V M l j i t a M 6 ", "l.1.<.g.l.q.M M l j i e w $.>.5 ", "2.3.:.5.8.D l z j i o.&.9 8 k * ", "d.9.4.K M l j j y e q 9 %.p s & ", "s.g.d.d.d.d.p.p.p.t.r.r.r.r.r.6.", "; ) ( / ^ ! Q W E [ +.O.Y Y U ", "; = % $ # @ O o I ] , X ", "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.", "z.z.z.z.z.z.z.z.z.z.z.z.z.z.z.z." }; springlobby-0.169/src/images/flags/TW.xpm0000600000176000000410000000701712105760300021634 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TW_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 133 2", " c black", ". c #00001111A9A9", "X c #00001B1BABAB", "o c #00001919ADAD", "O c #00001F1FAFAF", "+ c #00002121AFAF", "@ c #00002323B1B1", "# c #00002525B3B3", "$ c #00002727B3B3", "% c #4A4A7575C9C9", "& c #4F4F7979CBCB", "* c #4E4E7B7BCDCD", "= c #52527C7CCECE", "- c #53537D7DCFCF", "; c #53537E7ECFCF", ": c #58587F7FCFCF", "> c #57578181D1D1", ", c #57578282D1D1", "< c #58588181D1D1", "1 c #5C5C8383D1D1", "2 c #5C5C8585D3D3", "3 c #60608787D2D2", "4 c #63638B8BD5D5", "5 c #71719393D8D8", "6 c #75759595DADA", "7 c #77779999D9D9", "8 c #7A7A9C9CDCDC", "9 c #7D7D9D9DDBDB", "0 c #7D7D9E9EDCDC", "q c #7F7F9F9FDDDD", "w c #DDDD00000000", "e c #DFDF00000000", "r c #E1E100000000", "t c #E3E300000000", "y c #E5E500000000", "u c #E7E700000000", "i c #E9E900000000", "p c #EBEB00000000", "a c #EDED00000000", "s c #EFEF00000000", "d c #F1F100000000", "f c #F3F300000000", "g c #F5F500000000", "h c #F7F700000000", "j c #F1F10B0B0B0B", "k c #F1F10F0F0E0E", "l c #F9F900000000", "z c #FBFB00000000", "x c #FDFD00000000", "c c #F2F210101010", "v c #F2F213131313", "b c #F2F214141414", "n c #F3F319191919", "m c #F3F31A1A1A1A", "M c #F4F41E1E1E1E", "N c #F4F41F1F1F1F", "B c #F4F420202020", "V c #F5F523232323", "C c #F5F524242424", "Z c #F5F525252525", "A c #F5F526262626", "S c #F2F22C2C2C2C", "D c #F2F22F2F2F2F", "F c #F6F629292929", "G c #F6F62A2A2A2A", "H c #F6F62B2B2B2B", "J c #F6F62C2C2C2C", "K c #F7F72E2E2E2E", "L c #F7F72F2F2F2F", "P c #F2F232323232", "I c #F3F332323232", "U c #F3F335353535", "Y c #F7F730303030", "T c #F7F731313131", "R c #F4F436363636", "E c #F1F136363A3A", "W c #F4F439393939", "Q c #F4F43B3B3B3B", "! c #F5F53D3D3D3D", "~ c #F5F53F3F3F3F", "^ c #F8F834343434", "/ c #F8F835353535", "( c #F8F836363636", ") c #F8F837373636", "_ c #F8F837373737", "` c #F9F93A3A3A3A", "' c #F9F93B3B3A3A", "] c #F9F93C3C3C3C", "[ c #F9F93C3C3D3D", "{ c #FAFA3F3F3F3F", "} c #EAEA3B3B4646", "| c #ECEC41414B4B", " . c #EDED47475050", ".. c #F6F642424242", "X. c #F6F644444444", "o. c #F7F746464646", "O. c #F7F749494949", "+. c #F7F74B4B4B4B", "@. c #F7F74E4E4E4E", "#. c #FAFA40404040", "$. c #FAFA42424242", "%. c #FAFA44444444", "&. c #FBFB45454545", "*. c #FBFB49494949", "=. c #FBFB4A4A4949", "-. c #FCFC4F4F4F4F", ";. c #F8F850505050", ":. c #F8F853535353", ">. c #F9F954545555", ",. c #F9F957575757", "<. c #F9F958585858", "1. c #FAFA5C5C5C5C", "2. c #FAFA5D5D5D5D", "3. c #FBFB60606060", "4. c #FBFB61616262", "5. c #FCFC65656565", "6. c #FCFC66666666", "7. c #FCFC6A6A6A6A", "8. c #FDFD6F6F6F6F", "9. c #F1F169697070", "0. c #90909090D8D8", "q. c #93939393DADA", "w. c #98989999DDDD", "e. c #99999999DCDC", "r. c #8282A2A2DDDD", "t. c #8484A4A4DFDF", "y. c #B6B6B7B7E6E6", "u. c #B9B9B9B9E8E8", "i. c #F9F9F9F9FBFB", "p. c #F9F9F9F9FCFC", "a. c #F9F9F9F9FDFD", "s. c #FEFEFEFEFEFE", "d. c None", /* pixels */ "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.", "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.", "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.", "$ $ $ $ @ O o . r l h h f f a a ", "$ t.t.y.u.q 8 7 9.5.3.1.,.:.@.p ", "$ t.w.p.s.w.2 > .$.[ ) T J O.p ", "$ r.q.p.i.q.> = | [ ) T H A X.y ", "O q 4 6 5 > = * } ) L H A B ~ y ", "X q 3 3 : : & % E Y H A M n Q y ", "x 8.-.&.&.} ` ) L H A M n v R y ", "x 7.&.&.{ ` R Y H A M n b c T w ", "l 5.&.{ ` ^ J H B M n v k j D w ", "h 4.2.<.,.@.=.X...~ Q R I D S w ", "h f f a a a p p y y y r w w w w ", "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.", "d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d." }; springlobby-0.169/src/images/flags/TZ.xpm0000600000176000000410000001004712105760300021634 0ustar buildbotwww-data00000000000000/* XPM */ static const char *TZ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 158 2", " c black", ". c #2C2C2C2C2C2C", "X c #373733332B2B", "o c gray19", "O c #313131313131", "+ c #343431313030", "@ c #353535353535", "# c #363634343434", "$ c gray21", "% c #383838383636", "& c #3A3A3A3A3A3A", "* c #3B3B3B3B3A3A", "= c #3E3E3E3E3B3B", "- c #3F3F3F3F3F3F", "; c #00006F6F0000", ": c #000079790000", "> c #00007B7B0000", ", c #00007D7D0000", "< c #40403F3F3F3F", "1 c #444444443737", "2 c #4A4A4A4A3C3C", "3 c #51514D4D3434", "4 c #575751512F2F", "5 c #5C5C57572B2B", "6 c #7D7D7B7B3C3C", "7 c #4E4E4E4E4E4E", "8 c #535352524040", "9 c #555555554444", "0 c #535353535353", "q c #585858585858", "w c #5D5D5D5D5D5D", "e c #797974744949", "r c #656564646262", "t c #00002727DDDD", "y c #00002929DDDD", "u c #00002D2DDDDD", "i c #00002D2DDFDF", "p c #00002F2FDFDF", "a c #00003131DFDF", "s c #00003535DDDD", "d c #00003333E1E1", "f c #00003535E3E3", "g c #00003939E3E3", "h c #00003B3BE5E5", "j c #00003D3DE5E5", "k c #00004747C1C1", "l c #00004B4BD7D7", "z c #00004141E7E7", "x c #00004747E9E9", "c c #000081810000", "v c #000083830000", "b c #000085850000", "n c #000087870000", "m c #000089890000", "M c #000091910000", "N c #000093930000", "B c #5353ADAD0000", "V c #5151B8B84C4C", "C c #5151B4B45151", "Z c #5151B5B55151", "A c #5353B5B55353", "S c #5454B7B75454", "D c #5252B9B95050", "F c #5454B9B95454", "G c #5454BABA5454", "H c #5858BCBC5858", "J c #5858BCBC5959", "K c #5959BCBC5959", "L c #5C5CBDBD5C5C", "P c #5C5CBEBE5C5C", "I c #5F5FBFBF5F5F", "U c #6969BFBF6969", "Y c #5F5FC1C10000", "T c #6D6DC6C64F4F", "R c #6F6FC8C84B4B", "E c #6D6DC3C36D6D", "W c #6F6FC4C46F6F", "Q c #7070C5C57171", "! c #7272C6C67373", "~ c #7474C7C77474", "^ c #7676C8C87676", "/ c #7777C8C87777", "( c #7979C8C87979", ") c #7979C9C97979", "_ c #7B7BCACA7A7A", "` c #7B7BCACA7B7B", "' c #0B0B9595F1F1", "] c #0F0F9797F1F1", "[ c #10109797F2F2", "{ c #13139999F2F2", "} c #14149999F2F2", "| c #14149A9AF2F2", " . c #1A1A9999F2F2", ".. c #18189C9CF3F3", "X. c #1C1C9B9BF0F0", "o. c #3333A2A2DFDF", "O. c #2C2CA2A2F2F2", "+. c #2F2FA4A4F2F2", "@. c #3232A5A5F3F3", "#. c #3333A6A6F3F3", "$. c #3535A8A8F3F3", "%. c #3636A8A8F4F4", "&. c #3939A9A9F4F4", "*. c #3B3BA9A9F5F5", "=. c #3D3DACACF5F5", "-. c #5353B0B0BBBB", ";. c #5555B1B1BDBD", ":. c #4242ADADF6F6", ">. c #7474C0C0C9C9", ",. c #818181810000", "<. c #89899D9D0000", "1. c #91918B8B2F2F", "2. c #92928C8C2B2B", "3. c #989893932626", "4. c #BFBFBDBD0000", "5. c #BBBBB7B73D3D", "6. c #898987874040", "7. c #8B8B88884545", "8. c #8F8F8E8E5757", "9. c #969690905555", "0. c #9D9DC9C90000", "q. c #9D9DDBDB4F4F", "w. c #8B8BD3D36565", "e. c #9A9AD0D07C7C", "r. c #A4A4DEDE4B4B", "t. c #AEAEE0E04747", "y. c #CBCBDFDF0000", "u. c #D1D1DBDB0000", "i. c #C0C0C0C03232", "p. c #C2C2C5C53232", "a. c #C4C4CBCB3535", "s. c #D9D9E5E53F3F", "d. c #E5E5EDED3737", "f. c #CFCFCBCB4141", "g. c #D5D5D1D14545", "h. c #D5D5D2D26666", "j. c #CFCFE6E64A4A", "k. c #C1C1E1E15B5B", "l. c #D2D2E5E54444", "z. c #D7D7E4E44242", "x. c #D4D4E8E84747", "c. c #D4D4EAEA4B4B", "v. c #D7D7EAEA4A4A", "b. c #DADAE8E86060", "n. c #DBDBE9E96060", "m. c #D8D8EDED6A6A", "M. c #E1E1DEDE4242", "N. c #E1E1DEDE4646", "B. c #E3E3E3E34242", "V. c #E7E7E8E84646", "C. c #E6E6E9E94949", "Z. c #EFEFEDED5C5C", "A. c #E6E6F0F05D5D", "S. c #F5F5F3F34949", "D. c #E0E0E8E86060", "F. c #9898D0D08383", "G. c #A2A2D3D39494", "H. c None", /* pixels */ "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "M m m m b v v , > ; > Y 4. ", "b ` ` ` ^ ! Q E U w.n.Z.8.0 7 ", "m ` I L L G Z V t.B.5.1 O . e <.", "b ` L L G C R l.M.6 $ O X 3.b.0.", "m ^ G S V r.V.f.2 $ O 5 a.j.G.k ", "b ^ Z T v.g.1.= $ + 2.z.l.-.*.h ", "> E q.C.g.7 & $ 4 p.d.e.X.| %.f ", "M m.S.7.7 $ $ 1.z.k.;.X.| [ #.a ", "u.h.9 = % 3 i.v.F.o...{ ] ' +.i ", " r w q 9.D.A.>.:.=.*.%.#.+.O.t ", " ,.y.B l x z j h a i u y s ", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.", "H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H." }; springlobby-0.169/src/images/flags/UA.xpm0000600000176000000410000000760512105760300021612 0ustar buildbotwww-data00000000000000/* XPM */ static const char *UA_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 150 2", " c black", ". c #00003535E7E7", "X c #00004F4F9999", "o c #00004545E7E7", "O c #00004545E9E9", "+ c #00004D4DEBEB", "@ c #00005757EFEF", "# c #00005D5DF1F1", "$ c #00006363F3F3", "% c #00006767F5F5", "& c #00006D6DF7F7", "* c #00007171F9F9", "= c #00007575FBFB", "- c #00007979FDFD", "; c #00007D7DFDFD", ": c #00007F7FFDFD", "> c #00009191C7C7", ", c #00008383FDFD", "< c #00008383FFFF", "1 c #00008585FFFF", "2 c #20209F9FF4F4", "3 c #3E3EABABCFCF", "4 c #2525A1A1F5F5", "5 c #2626A2A2F5F5", "6 c #2B2BA4A4F6F6", "7 c #2B2BA5A5F6F6", "8 c #2C2CA6A6F6F6", "9 c #3030A7A7F7F7", "0 c #3131A8A8F7F7", "q c #3131A9A9F7F7", "w c #3636AAAAF8F8", "e c #3737ABABF8F8", "r c #3F3FADADF5F5", "t c #3B3BADADF9F9", "y c #3C3CAEAEF9F9", "u c #3D3DAEAEF9F9", "i c #4343AEAED1D1", "p c #4848B0B0D2D2", "a c #4D4DB3B3D4D4", "s c #5151B5B5D6D6", "d c #5656B8B8D8D8", "f c #5B5BB7B7D5D5", "g c #5B5BBABAD9D9", "h c #4444AFAFF6F6", "j c #4141AFAFFAFA", "k c #4242B0B0FAFA", "l c #4242B1B1FAFA", "z c #4646B2B2FBFB", "x c #4747B3B3FBFB", "c c #4949B2B2F7F7", "v c #4E4EB4B4F7F7", "b c #4B4BB5B5FCFC", "n c #4B4BB6B6FCFC", "m c #4C4CB6B6FCFC", "M c #5353B7B7F8F8", "N c #5050B6B6FDFD", "B c #5151B7B7FDFD", "V c #5454B9B9FDFD", "C c #5454BABAFDFD", "Z c #5858B9B9F9F9", "A c #5858BBBBFEFE", "S c #5858BCBCFEFE", "D c #5959BCBCFEFE", "F c #5C5CBBBBFAFA", "G c #5C5CBDBDFEFE", "H c #5C5CBEBEFEFE", "J c #5F5FBFBFFEFE", "K c #6060BCBCDBDB", "L c #6464BEBEDDDD", "P c #6161BEBEFBFB", "I c #6969C0C0DDDD", "U c #6D6DC2C2DFDF", "Y c #6565C0C0FCFC", "T c #6969C2C2FCFC", "R c #6D6DC3C3FDFD", "E c #7070C4C4E0E0", "W c #7070C5C5FEFE", "Q c #7474C7C7FEFE", "! c #7676C7C7FEFE", "~ c #7777C8C8FEFE", "^ c #7979C8C8FEFE", "/ c #7979C9C9FEFE", "( c #7B7BCACAFFFF", ") c #DDDDB5B50000", "_ c #DDDDB7B70000", "` c #DFDFB7B70000", "' c #DFDFB9B90000", "] c #DFDFBBBB0000", "[ c #E1E1BBBB0000", "{ c #E3E3BBBB0000", "} c #E3E3BFBF0000", "| c #E5E5BFBF0000", " . c #E7E7C3C30000", ".. c #E9E9C5C50000", "X. c #EBEBC7C70000", "o. c #EDEDCBCB0000", "O. c #EDEDCDCD0000", "+. c #EFEFD1D10000", "@. c #F1F1D3D30000", "#. c #F3F3D7D70000", "$. c #F5F5D9D90000", "%. c #F7F7DBDB0000", "&. c #F9F9DDDD0000", "*. c #FBFBDFDF0000", "=. c #FDFDE1E10000", "-. c #F1F1F1F10B0B", ";. c #F1F1F1F10E0E", ":. c #F2F2F2F21010", ">. c #F2F2F2F21313", ",. c #F2F2F2F21414", "<. c #F3F3F3F31919", "1. c #F4F4F4F41E1E", "2. c #F4F4F4F41F1F", "3. c #F5F5F5F52323", "4. c #F5F5F5F52424", "5. c #F2F2F2F22C2C", "6. c #F2F2F2F22F2F", "7. c #F6F6F6F62929", "8. c #F6F6F6F62A2A", "9. c #F7F7F7F72E2E", "0. c #F7F7F7F72F2F", "q. c #F2F2F2F23232", "w. c #F3F3F3F33232", "e. c #F3F3F3F33535", "r. c #F4F4F4F43636", "t. c #F4F4F4F43939", "y. c #F5F5F5F53D3D", "u. c #F8F8F8F83434", "i. c #F8F8F8F83535", "p. c #F9F9F9F93A3A", "a. c #FAFAFAFA3F3F", "s. c #F6F6F6F64242", "d. c #F7F7F7F74646", "f. c #F7F7F7F74B4B", "g. c #FAFAFAFA4040", "h. c #FAFAFAFA4444", "j. c #FBFBFBFB4545", "k. c #FBFBFBFB4949", "l. c #FBFBFCFC4949", "z. c #FCFCFCFC4F4F", "x. c #F8F8F8F85050", "c. c #F9F9F9F95555", "v. c #F9F9F9F95858", "b. c #FAFAFAFA5D5D", "n. c #FBFBFBFB6262", "m. c #FCFCFCFC6666", "M. c #FCFCFCFC6A6A", "N. c #FDFDFDFD6F6F", "B. c #8A8AD0D0E7E7", "V. c None", /* pixels */ "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "1 1 1 1 1 ; ; - = * & % $ # @ @ ", "< ( ( ( ~ Q R R T Y P F Z M v + ", "1 ( P G G C C m c l u e q 8 c O ", "< ( G A C N b x l u e 9 7 5 h O ", "; ! C C m b z j t w 8 7 5 2 r . ", "> B.E U I L K g d s a p i 3 f X ", "=.N.z.k.j.a.p.r.u.8.4.1.<.,.r.{ ", "=.M.k.j.a.p.u.9.8.3.1.<.>.>.w.] ", "&.m.j.a.p.u.9.8.3.1.<.>.;.-.6.` ", "%.n.b.v.c.x.f.d.s.y.t.e.w.6.6.) ", "%.#.#.O.O.o.X.X. .} } { ] ` ) ) ", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.", "V.V.V.V.V.V.V.V.V.V.V.V.V.V.V.V." }; springlobby-0.169/src/images/flags/UG.xpm0000600000176000000410000000755212105760300021621 0ustar buildbotwww-data00000000000000/* XPM */ static const char *UG_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 152 2", " c black", ". c #151500000000", "X c gray8", "o c #191919191919", "O c gray12", "+ c gray14", "@ c gray21", "# c #717100000000", "$ c #73737D7D0000", "% c gray25", "& c gray27", "* c #49494A4A4949", "= c gray31", "- c #606060605555", "; c #646464645959", ": c #686868685E5E", "> c #6C6C6C6C6262", ", c gray42", "< c #6F6F6F6F6F6F", "1 c #70706F6F6666", "2 c #747474746A6A", "3 c #787878786E6E", "4 c #7B7B7B7B7272", "5 c #7F7F7F7F7575", "6 c #90901A1A1A1A", "7 c #93931F1F1F1F", "8 c #969625252525", "9 c #99992B2B2B2B", "0 c #9F9F3B3B3B3B", "q c #A7A746464646", "w c #AAAA4A4A4B4B", "e c #ADAD4F4F4F4F", "r c #AFAF53535353", "t c #BEBE72727373", "y c #DDDD00000000", "u c #DFDF00000000", "i c #E1E100000000", "p c #E3E300000000", "a c #E5E500000000", "s c #E7E700000000", "d c #E9E900000000", "f c #EBEB00000000", "g c #EDED00000000", "h c #EFEF00000000", "j c #F1F100000000", "k c #F3F300000000", "l c #F5F500000000", "z c #F7F700000000", "x c #FDFD00000000", "c c #F4F420202020", "v c #F5F525252525", "b c #F6F62B2B2B2B", "n c #F7F730303030", "m c #F5F53F3F3F3F", "M c #F2F25B5B2C2C", "N c #F2F25C5C2F2F", "B c #F2F260603232", "V c #F3F362623535", "C c #F4F465653939", "Z c #F5F569693D3D", "A c #D6D645454545", "S c #FCFC4B4B4B4B", "D c #FDFD4F4F5050", "F c #FDFD54545454", "G c #FEFE58585858", "H c #F6F66C6C4242", "J c #F7F76F6F4646", "K c #F7F774744B4B", "L c #F8F877775050", "P c #F9F97B7B5555", "I c #F9F97F7F5858", "U c #FEFE76767676", "Y c #ABABB3B30000", "T c #BABABDBD1010", "R c #BCBCBFBF1414", "E c #818181817979", "W c #848484847B7B", "Q c #868686867E7E", "! c #888888887F7F", "~ c #BDBDC2C21919", "^ c #BFBFC4C41F1F", "/ c #E3E39F9F0000", "( c #FAFA82825D5D", ") c #FBFB85856262", "_ c #DFDFDFDF0000", "` c #C1C1C6C62424", "' c #C4C4C8C82A2A", "] c #C6C6CACA2F2F", "[ c #C3C3C7C73232", "{ c #C8C8CCCC3434", "} c #CACACECE3A3A", "| c #CCCCCFCF3F3F", " . c #DDDDE9E90000", ".. c #FBFBCDCD0000", "X. c #F4F4D3D32626", "o. c #F4F4D4D42B2B", "O. c #F5F5D6D63131", "+. c #F6F6D8D83636", "@. c #F7F7DADA3C3C", "#. c #F1F1F1F10B0B", "$. c #F1F1F1F10E0E", "%. c #F5F5FFFF0000", "&. c #F9F9F9F90000", "*. c #F2F2F2F21313", "=. c #F3F3F3F31919", "-. c #F4F4F4F41E1E", ";. c #F5F5F5F52323", ":. c #F2F2F2F22F2F", ">. c #F0F0F6F62C2C", ",. c #F6F6F6F62929", "<. c #F7F7F7F72E2E", "1. c #F1F1F7F73131", "2. c #F2F2F8F83737", "3. c #F3F3F9F93D3D", "4. c #F8F8F8F83434", "5. c #F9F9F9F93A3A", "6. c #FAFAFAFA3F3F", "7. c #CECED1D14545", "8. c #D0D0D3D34949", "9. c #D8D8DCDC6A6A", "0. c #F4F4D8D84444", "q. c #F8F8DBDB4242", "w. c #F9F9DDDD4747", "e. c #FAFADEDE4B4B", "r. c #FBFBDFDF5151", "t. c #FBFBE0E05454", "y. c #FBFBE2E25959", "u. c #FCFCE3E35C5C", "i. c #F1F1F7F74949", "p. c #F4F4FAFA4242", "a. c #F5F5FAFA4747", "s. c #F6F6FBFB4C4C", "d. c #FAFAFAFA4444", "f. c #F6F6FDFD5151", "g. c #F7F7FDFD5454", "h. c #F8F8FEFE5959", "j. c #F8F8FEFE5C5C", "k. c #F9F9FEFE5F5F", "l. c #FCFCE8E87979", "z. c #FCFCFCFC6666", "x. c #FAFAFFFF7A7A", "c. c gray61", "v. c #9F9F9E9E9E9E", "b. c #B6B6B6B6B6B6", "n. c gray74", "m. c #F8F8BBBBBBBB", "M. c #FBFBC2C2C2C2", "N. c #F6F6F4F4F4F4", "B. c #F9F9F7F7F7F7", "V. c #F8F8F8F8F8F8", "C. c #F9F9F9F9F9F9", "Z. c None", /* pixels */ "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", " ", " ! c.4 5 5 5 4 3 2 1 > : ; - ", "%.x.j.j.h.f.f.s.a.p.3.2.1.>.i. .", "..l.u.y.r.r.e.e.q.@.+.O.o.X.0./ ", "x U G F D S M.v.C.m.n b v c m s ", "# t r e w q N.c., N.9 8 7 6 0 . ", " < = * & % n.V.A b.+ O o X @ ", "Y 9.7.7.7.} { ] ' ` ^ ~ R T [ $ ", "&.z.d.6.5.4.<.,.;.-.=.*.$.#.:._ ", "z ) ( ( P L K J H Z C V B N M u ", "l l j g g g f f s s i i u u y y ", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.", "Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z.Z." }; springlobby-0.169/src/images/flags/UM.xpm0000600000176000000410000000662312105760300021625 0ustar buildbotwww-data00000000000000/* XPM */ static const char *UM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 132 2", " c black", ". c #717100000000", "X c #7B7B00000000", "o c #7E7E00000000", "O c #4C4C4C4C4C4C", "+ c #5C5C59595959", "@ c gray47", "# c #4F4F7777C9C9", "$ c #53537B7BCDCD", "% c #55557D7DCFCF", "& c #57577D7DCFCF", "* c #57577F7FD1D1", "= c #59598181D3D3", "- c #59598383D3D3", "; c #5B5B8383D5D5", ": c #60609595D9D9", "> c #6B6BA4A4DADA", ", c #6E6EA7A7DADA", "< c #7B7BB4B4DCDC", "1 c #7C7CB4B4DDDD", "2 c #8B8B00000000", "3 c #959500000000", "4 c #9F9F00000000", "5 c #A6A600000000", "6 c #B2B200000000", "7 c #BABA00000000", "8 c #C0C000000000", "9 c #CCCC00000000", "0 c #CDCD00000000", "q c #CFCF00000000", "w c #CDCD1C1C1C1C", "e c #D2D200000000", "r c #D3D300000000", "t c #D6D600000000", "y c #D9D900000000", "u c #DCDC00000000", "i c #DDDD02020101", "p c #DDDD02020202", "a c #D4D41F1F1F1F", "s c #D9D922222222", "d c #DBDB24242424", "f c #D3D337373737", "g c #DBDB3C3C3C3C", "h c #E0E026262626", "j c #E0E028282828", "k c #E3E328282828", "l c #E6E62A2A2A2A", "z c #E6E62C2C2C2C", "x c #E6E62D2D2D2D", "c c #E7E72F2F2F2F", "v c #E3E333333333", "b c #E7E731313131", "n c #E8E832323232", "m c #E8E836363636", "M c #E8E838383838", "N c #E9E939393939", "B c #E9E93A3A3A3A", "V c #E9E93D3D3D3D", "C c #E9E942424242", "Z c #EAEA41414141", "A c #EBEB42424242", "S c #EBEB46464646", "D c #EBEB49494949", "F c #EBEB4D4D4C4C", "G c #ECEC4B4B4C4C", "H c #ECEC4F4F4F4F", "J c #EEEE56565757", "K c #EEEE5C5C5C5C", "L c #EEEE64646464", "P c #EFEF6F6F6F6F", "I c gray52", "U c #A7A7A7A7A7A7", "Y c #8D8DB5B5DEDE", "T c #8E8EB5B5DEDE", "R c #9292B6B6DEDE", "E c #9393B6B6DFDF", "W c #A3A3B7B7E0E0", "Q c #A3A3B8B8E0E0", "! c #A4A4B9B9E1E1", "~ c #A5A5B9B9E2E2", "^ c #A6A6BABAE2E2", "/ c #A6A6BABAE3E3", "( c #A7A7BBBBE3E3", ") c #A8A8BCBCE5E5", "_ c #A9A9BDBDE6E6", "` c #A9A9BEBEE7E7", "' c #AAAABEBEE7E7", "] c #ABABBFBFE8E8", "[ c #ACACC0C0E9E9", "{ c #B4B4C5C5E7E7", "} c #B6B6C7C7E9E9", "| c #B6B6C8C8EAEA", " . c #B9B9C9C9EBEB", ".. c #B9B9C9C9ECEC", "X. c #B9B9CACAEDED", "o. c #BABACBCBEDED", "O. c #F2F29F9F9F9F", "+. c gray76", "@. c gray81", "#. c #D0D0D0D0D0D0", "$. c gray83", "%. c #D9D9D9D9DADA", "&. c #DCDCDADADADA", "*. c gainsboro", "=. c #E1E1E1E1E1E1", "-. c gray90", ";. c #E7E7E7E7E7E7", ":. c gray91", ">. c #E9E9E9E9E9E9", ",. c #E9E9EAEAEAEA", "<. c #EAEAEAEAEAEA", "1. c #EBEBEBEBEAEA", "2. c #ECECECECECEC", "3. c gray93", "4. c #EEEEEEEEEEEE", "5. c #EFEFEFEFEFEF", "6. c gray94", "7. c #F1F1F1F1F1F1", "8. c gray95", "9. c #F3F3F3F3F3F3", "0. c #F4F4F4F4F4F4", "q. c #F4F4F5F5F5F5", "w. c gray96", "e. c #F6F6F6F6F6F6", "r. c gray97", "t. c #F8F8F8F8F8F8", "y. c #F9F9F9F9F9F9", "u. c gray98", "i. c gray99", "p. c #FDFDFEFEFDFD", "a. c #FEFEFEFEFEFE", "s. c None", /* pixels */ "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "; ; ; ; - - $ $ # v j p p p r r ", "; a.o.a.o.i.| u.{ r.r.w.7.7.7.@ ", "; o.] ` ` ) ~ ~ W L J G A N F 0 ", "- o.i.` u.^ r.~ E 7.5.3.3.1.3.U ", "- .) ) ) ~ W E 1 D C N n x C 7 ", "$ a.) t.~ w.T 7., 3.3.<.<.;.<.I ", "$ | / ~ Q Y 1 > : N n l h d g 4 ", "@.t.w.w.9.7.3.3.3.<.:.;.-.&.&.O ", "v O.P K H S V m c l h s a w f o ", "+.w.w.9.9.7.3.3.2.<.<.=.%.$.#.+ ", "p p u r r r e 0 7 6 5 3 2 X . . ", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.", "s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s." }; springlobby-0.169/src/images/flags/US.xpm0000600000176000000410000000706212105760300021631 0ustar buildbotwww-data00000000000000/* XPM */ static const char *US_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 137 2", " c black", ". c #00002B2BB3B3", "X c #00004949B6B6", "o c #00004F4FB5B5", "O c #00006868B9B9", "+ c #00006969BCBC", "@ c #03036F6FE1E1", "# c #03037171E5E5", "$ c #04047373F1F1", "% c #04047474F8F8", "& c #2F2F7373F8F8", "* c #30307070F8F8", "= c #32327575F8F8", "- c #36367474F9F9", "; c #37377777F9F9", ": c #39397676F9F9", "> c #3A3A7979F9F9", ", c #3D3D7A7AF9F9", "< c #3F3F7E7EFAFA", "1 c #63636363B1B1", "2 c #63636363B7B7", "3 c #63636363B8B8", "4 c #63636363BEBE", "5 c #63636767BFBF", "6 c #40407C7CFAFA", "7 c #43437E7EFAFA", "8 c #63636565C2C2", "9 c #63636767C4C4", "0 c #46468080FAFA", "q c #49498282FAFA", "w c #9A9A63634A4A", "e c #9E9E63634A4A", "r c #A0A063634A4A", "t c #A6A663634A4A", "y c #ABAB63634A4A", "u c #AFAF63634A4A", "i c #B5B563634A4A", "p c #BFBF63634A4A", "a c #F8F80B0B0B0B", "s c #F9F910101010", "d c #F9F916161616", "f c #FAFA1B1B1B1B", "g c #FAFA20202020", "h c #FBFB23232323", "j c #FBFB28282828", "k c #FBFB2A2A2A2A", "l c #FBFB2C2C2C2C", "z c #FBFB2E2E2E2E", "x c #FBFB31313131", "c c #FBFB32323232", "v c #FCFC38383838", "b c #FCFC39393939", "n c #FCFC3A3A3A3A", "m c #FCFC3D3D3D3D", "M c #C5C563634A4A", "N c #CCCC63634A4A", "B c #D4D463634A4A", "V c #D5D563634A4A", "C c #D8D863634A4A", "Z c #DADA63634A4A", "A c #DEDE63634A4A", "S c #FCFC40404040", "D c #FCFC46464646", "F c #FCFC47474747", "G c #FCFC4C4C4C4C", "H c #FCFC50505050", "J c #FCFC53535454", "K c #FCFC58585858", "L c #E0E063634A4A", "P c #E2E263634A4A", "I c #E5E564644A4A", "U c #E8E863634A4A", "Y c #F4F474745E5E", "T c #FCFC61616363", "R c #FCFC68686868", "E c #FCFC78786262", "W c #FBFB7F7F6B6B", "Q c #FCFC73737373", "! c #FDFD7F7F7F7F", "~ c #FDFD82826D6D", "^ c #FCFC86867272", "/ c #FDFD8E8E7C7C", "( c #FDFDFDFD5B5B", ") c #919191918080", "_ c #ACACACAC9F9F", "` c #B4B4B4B4A8A8", "' c #9898B9B9FCFC", "] c #9B9BBBBBFCFC", "[ c #9C9CBDBDFCFC", "{ c #A1A1BEBEFCFC", "} c #A2A2C0C0FCFC", "| c #FDFD97978686", " . c #C9C9C9C9C1C1", ".. c #DADADADAD3D3", "X. c gainsboro", "o. c #D7D7FEFEFDFD", "O. c #FEFECACAC1C1", "+. c #E2E2E2E2DDDD", "@. c #E2E2E2E2DEDE", "#. c #FDFDE1E1DCDC", "$. c gray89", "%. c #E5E5E5E5E0E0", "&. c gray90", "*. c #E7E7E7E7E7E7", "=. c gray91", "-. c #E9E9E9E9E9E9", ";. c #EAEAEAEAEAEA", ":. c gray92", ">. c #EDEDEDEDEAEA", ",. c #ECECECECECEC", "<. c #EEEEEEEEEEEE", "1. c #EFEFEFEFEFEF", "2. c #E5E5E5E5FCFC", "3. c #ECECFEFEFEFE", "4. c #F1F1F1F1EFEF", "5. c gray94", "6. c #F1F1F1F1F1F1", "7. c #F2F2F2F2F0F0", "8. c #F3F3F3F3F1F1", "9. c gray95", "0. c #F3F3F3F3F3F3", "q. c #F4F4F4F4F2F2", "w. c #F5F5F5F5F3F3", "e. c #F4F4F4F4F4F4", "r. c gray96", "t. c #F6F6F6F6F4F4", "y. c #F6F6F6F6F6F6", "u. c #F7F7F7F7F6F6", "i. c #F8F8F8F8F6F6", "p. c #F8F8F8F8F7F7", "a. c #F9F9F9F9F8F8", "s. c #F9F9F9F9F9F9", "d. c #FAFAFAFAF9F9", "f. c #FBFBFBFBFBFB", "g. c #FBFBFFFFFAFA", "h. c #FEFEFEFEFDFD", "j. c None", /* pixels */ "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "9 9 9 9 8 4 2 2 1 ~ E U L L A Z ", "9 h.} g.{ s.[ g.' f.s.s.i.i.y._ ", "9 } q 0 7 , > - & Q T J F m | V ", "5 { s.< y.> 1.& % 8.1.,.,.( 8. .", "8 { 6 , > - & $ + H F n c k / M ", "3 f., 1.- :.# &.o ,.,.=.:.=.o.` ", "3 [ : & & @ O X . n c j h f ^ u ", "@.f.u.y.8.1.1.,.,.:.=.*.&.X.#.) ", "~ O.! R K G S v z j g d s a W r ", "..s.3.i.p.p.q.q.7.7.1.>.2.%.@.Y ", "U L L A Z Z V V N M i y t e w w ", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.", "j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j." }; springlobby-0.169/src/images/flags/UY.xpm0000600000176000000410000001016112105760300021631 0ustar buildbotwww-data00000000000000/* XPM */ static const char *UY_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 162 2", " c black", ". c #000000007F7F", "X c #000000008F8F", "o c #00003333A3A3", "O c #00003F3FB5B5", "+ c #00004343B3B3", "@ c #07075757A9A9", "# c #19196767B3B3", "$ c #29297979CACA", "% c #2C2C7C7CCBCB", "& c #31317F7FCCCC", "* c #36368282CFCF", "= c #37378383CFCF", "- c #3B3B8686D0D0", "; c #3C3C8686D1D1", ": c #40408989D2D2", "> c #41418A8AD3D3", ", c #45458C8CD4D4", "< c #46468D8DD4D4", "1 c #48488C8CD1D1", "2 c #4B4B8E8ED0D0", "3 c #4A4A9090D6D6", "4 c #4B4B9191D6D6", "5 c #4E4E9090D1D1", "6 c #4F4F9393D8D8", "7 c #50509191D3D3", "8 c #54549494D3D3", "9 c #54549494D5D5", "0 c #57579797D4D4", "q c #50509494D8D8", "w c #54549797D9D9", "e c #55559696D9D9", "r c #5D5D9797D3D3", "t c #5B5B9999D6D6", "y c #59599A9ADBDB", "u c #5F5F9B9BD8D8", "i c #5E5E9C9CDCDC", "p c #63639E9ED9D9", "a c #62629E9EDDDD", "s c #6666A1A1DBDB", "d c #6A6AA4A4DCDC", "f c #6F6FA6A6DDDD", "g c #7373A9A9DEDE", "h c #7A7AACACDFDF", "j c #7676ACACE0E0", "k c #7A7AAEAEE2E2", "l c #7D7DAEAEE1E1", "z c #F4F4F4F45959", "x c #F5F5F5F55C5C", "c c #F5F5F5F55F5F", "v c #EDEDEDED7777", "b c #EEEEEFEF7B7B", "n c #F3F3F3F36868", "m c #8D8DB6B6DEDE", "M c #8181B1B1E2E2", "N c #8484B3B3E3E3", "B c #8989B6B6E4E4", "V c #8F8FB8B8E0E0", "C c #8C8CB9B9E6E6", "Z c #8F8FBBBBE6E6", "A c #9292BABAE1E1", "S c #9191BBBBE7E7", "D c #9595BCBCE3E3", "F c #9797BDBDE3E3", "G c #9999BFBFE3E3", "H c #9999BFBFE4E4", "J c #9D9DBFBFE2E2", "K c #ADADB9B9C5C5", "L c #9C9CC1C1E5E5", "P c #9D9DC1C1E6E6", "I c #9F9FC2C2E7E7", "U c #9999C2C2EAEA", "Y c #B7B7C1C1CBCB", "T c #BDBDC3C3C9C9", "R c #BFBFC3C3C9C9", "E c #BFBFC9C9D5D5", "W c #A0A0C3C3E7E7", "Q c #A4A4C5C5E6E6", "! c #A2A2C4C4E8E8", "~ c #A3A3C6C6E9E9", "^ c #A5A5C7C7E9E9", "/ c #A6A6C8C8EAEA", "( c #A7A7C9C9EAEA", ") c #A9A9CACAEBEB", "_ c #AAAACBCBECEC", "` c #ABABCBCBECEC", "' c #ADADCDCDEDED", "] c #BCBCD7D7F1F1", "[ c #F1F1F1F19696", "{ c #F3F3F3F39494", "} c #F2F2F2F29D9D", "| c #F3F3F3F39F9F", " . c #F4F4F4F49F9F", ".. c #C1C1C7C7CDCD", "X. c #C3C3C9C9CDCD", "o. c #C3C3C9C9CFCF", "O. c #C7C7CDCDD1D1", "+. c #C9C9CFCFD5D5", "@. c #CDCDD1D1D5D5", "#. c #CFCFD5D5D7D7", "$. c #D1D1D5D5DBDB", "%. c #D5D5D7D7DDDD", "&. c #D7D7DBDBDFDF", "*. c #DFDFDFDFDFDF", "=. c #D7D7DFDFE7E7", "-. c #D9D9DDDDE1E1", ";. c #DBDBDFDFE3E3", ":. c #DFDFE1E1E7E7", ">. c #E1E1E1E1E1E1", ",. c gray89", "<. c gray90", "1. c #E7E7E7E7E7E7", "2. c #E1E1E7E7EEEE", "3. c #E2E2E8E8EFEF", "4. c #E3E3E9E9EFEF", "5. c #E5E5EBEBEFEF", "6. c #E9E9E9E9E9E9", "7. c #EBEBEBEBE9E9", "8. c gray92", "9. c #EBEBEDEDEFEF", "0. c gray93", "q. c #EFEFEFEFEFEF", "w. c #E4E4EBEBF0F0", "e. c #E6E6ECECF1F1", "r. c #E7E7ECECF3F3", "t. c #E7E7EDEDF2F2", "y. c #E8E8EDEDF2F2", "u. c #E9E9EFEFF3F3", "i. c #E8E8EEEEF4F4", "p. c #E9E9EFEFF4F4", "a. c #EAEAEFEFF5F5", "s. c #EFEFEFEFF1F1", "d. c #EAEAF0F0F4F4", "f. c #EAEAF0F0F5F5", "g. c #EBEBF1F1F5F5", "h. c #EBEBF0F0F6F6", "j. c #EBEBF1F1F6F6", "k. c #ECECF1F1F7F7", "l. c #ECECF2F2F6F6", "z. c #EDEDF2F2F7F7", "x. c #EEEEF2F2F8F8", "c. c #EEEEF3F3F8F8", "v. c #EFEFF3F3F9F9", "b. c #EFEFF4F4F9F9", "n. c #EFEFF4F4FBFB", "m. c #F5F5F3F3E0E0", "M. c #F5F5F4F4E6E6", "N. c #F7F7F7F7EDED", "B. c #F8F8F7F7EDED", "V. c #F1F1F1F1F1F1", "C. c #F3F3F5F5F6F6", "Z. c #F0F0F5F5FAFA", "A. c #F1F1F5F5FBFB", "S. c #F2F2F6F6FAFA", "D. c #F2F2F6F6FBFB", "F. c #F5F5F5F5F8F8", "G. c #F6F6F6F6F9F9", "H. c #F4F4F8F8FDFD", "J. c #F8F8F9F9FAFA", "K. c #FAFAFBFBFCFC", "L. c #FCFCFCFCFEFE", "P. c None", /* pixels */ "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "V.V.V.s.V.s.s.0.0.7.7.1.<.,.>.;.", "V.N. .| N.H.U Z Z C B N M l h o ", "0.| x x [ D.D.D.v.D.j.j.g.a.a.O.", "7.[ x z n C._ _ ^ W I P H F W # ", "V.M.b v m.D.a 9 6 6 < > ; = 9 X ", "s.K.G.G.K.J.v.j.l.l.t.e.e.e.t.Y ", "r ] ' _ _ ^ W P L F F A m m L @ ", "O k i y 9 6 < < ; ; * & % $ 1 . ", "=.A.v.n.j.j.l.a.u.e.e.3.3.3.5.K ", "+ k j g f d s p u t 0 8 7 5 2 . ", ":.;.-.-.%.$.#.@.+.O.X.X...R T R ", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.", "P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P." }; springlobby-0.169/src/images/flags/UZ.xpm0000600000176000000410000000723412105760300021641 0ustar buildbotwww-data00000000000000/* XPM */ static const char *UZ_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 141 2", " c black", ". c #000001010000", "X c #000007070000", "o c #00000B0B0000", "O c #000000001515", "+ c #000000001D1D", "@ c #000011110000", "# c #000019190000", "$ c #00001F1F0000", "% c #151500000000", "& c #000000002525", "* c #000000002B2B", "= c #000000003131", "- c #000000003939", "; c #000000003F3F", ": c #000027270000", "> c #00002D2D0000", ", c #000033330000", "< c #000039390000", "1 c #00003F3F0000", "2 c #000000004545", "3 c #000000004949", "4 c #000000005B5B", "5 c #000000005F5F", "6 c #000000006161", "7 c #000047470000", "8 c #00004F4F0000", "9 c #0B0B7D7D0B0B", "0 c #535300000000", "q c #656500000000", "w c #2C2C2C2C9191", "e c #313131319494", "r c #373737379898", "t c #3D3D3C3C9B9B", "y c #424242429E9E", "u c #49494949A0A0", "i c #4E4E4E4EA3A3", "p c #53535353A6A6", "a c #58585757A9A9", "s c #5C5C5C5CABAB", "d c #5F5F5F5FAFAF", "f c #61616060AEAE", "g c #65656565B0B0", "h c #77777777BABA", "j c #79797979BCBC", "k c #0F0F80800E0E", "l c #131383831313", "z c #181886861919", "x c #1E1E88881E1E", "c c #23238C8C2323", "v c #29298F8F2929", "b c #2C2C8E8E2C2C", "n c #2F2F90902F2F", "m c #2E2E92922E2E", "M c #323291913232", "N c #343495953434", "B c #353594943535", "V c #393997973939", "C c #3A3A99993A3A", "Z c #3D3D99993D3D", "A c #3F3F9C9C3F3F", "S c #42429B9B4242", "D c #44449F9F4444", "F c #46469E9E4646", "G c #4B4BA1A14B4B", "H c #5050A4A45050", "J c #5454A6A65555", "K c #5858A9A95858", "L c #5D5DACAC5D5D", "P c #6161AEAE6262", "I c #6666B1B16666", "U c #838310103030", "Y c #868614143535", "T c #888819193939", "R c #8B8B1F1F3E3E", "E c #8F8F24244242", "W c #909026264444", "Q c #92922A2A4747", "! c #93932B2B4949", "~ c #95952F2F4C4C", "^ c #949432324E4E", "/ c #979731314E4E", "( c #989834345151", ") c #999937375353", "_ c #9C9C3A3A5555", "` c #9C9C3C3C5858", "' c #9F9F3F3F5A5A", "] c #9F9F44445E5E", "[ c #A0A041415D5D", "{ c #A2A245455F5F", "} c #A2A247476060", "| c #A4A449496363", " . c #A5A54B4B6565", ".. c #A8A851516969", "X. c #ABAB54546D6D", "o. c #ACAC59597171", "O. c #AFAF5C5C7474", "+. c #B5B56A6A8080", "@. c #BEBE79798C8C", "#. c #8F8F8D8DC3C3", "$. c #97979797CACA", "%. c #ABABABABD4D4", "&. c #ADADADADD7D7", "*. c #B3B3B3B3D7D7", "=. c #BDBDBDBDD1D1", "-. c #B9B9B9B9D9D9", ";. c #C1C1C1C1D1D1", ":. c #C3C3C3C3D5D5", ">. c #C2C2C2C2DFDF", ",. c #C6C6C6C6E1E1", "<. c #CCCCCCCCE4E4", "1. c #D5D5D5D5E8E8", "2. c #D5D5D5D5EBEB", "3. c #D9D9D8D8EAEA", "4. c #D9D9D9D9ECEC", "5. c #DCDCDCDCECEC", "6. c #DDDDDDDDEDED", "7. c #DFDFDFDFEDED", "8. c #E2E2E2E2EFEF", "9. c #EAEAEAEAF4F4", "0. c #EDEDEFEFF5F5", "q. c #EFEFEFEFF7F7", "w. c gray95", "e. c #F3F3F3F3F3F3", "r. c #F2F2F2F2F7F7", "t. c #F4F4F4F4F4F4", "y. c #F4F4F5F5F5F5", "u. c gray96", "i. c #F6F6F6F6F6F6", "p. c gray97", "a. c #F1F1F1F1F9F9", "s. c #F8F8F8F8F8F8", "d. c #F9F9F9F9F9F9", "f. c gray98", "g. c #FBFBFBFBFBFB", "h. c #FBFBFCFCFBFB", "j. c gray99", "k. c #FDFDFCFCFDFD", "l. c #FDFDFDFDFDFD", "z. c #FEFEFEFEFEFE", "x. c None", /* pixels */ "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "6 &.2.d 5 4 -.#.*.3 2 ; - = * & ", "6 r.%.j h 8.4.7.<.g f s a p i + ", "6 6.9.$.6.,.3.>.2.y t r e w u O ", "q @.O.o.X. . .} ] _ ) / ! E ] % ", "a.z.z.z.g.z.z.d.d.d.p.p.u.u.u.:.", "0.z.z.h.z.h.d.d.p.u.u.u.u.e.u.;.", "0.z.h.h.d.d.d.p.p.p.u.u.e.e.e.=.", "0 O.{ { ' _ ) ~ Q E R T Y U / ", "8 I G A V B n v c x z l k 9 n ", "8 I L K J H G F S Z V B M n b ", "7 < , > : $ # @ o o ", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.", "x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x." }; springlobby-0.169/src/images/flags/VA.xpm0000600000176000000410000000730612105760300021611 0ustar buildbotwww-data00000000000000/* XPM */ static const char *VA_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 145 2", " c black", ". c #BBBBB7B73232", "X c #A9A988886E6E", "o c #A8A8ACAC6E6E", "O c #BEBEA3A36161", "+ c #CDCDA7A70000", "@ c #CFCFA7A70000", "# c #D1D1ABAB0000", "$ c #D5D5AFAF0000", "% c #D7D7B3B30000", "& c #D9D9B7B70000", "* c #DBDBB7B70000", "= c #DDDDBFBF0000", "- c #DFDFBFBF0000", "; c #CCCCBCBC5F5F", ": c #C9C9BFBF7D7D", "> c #E3E3C3C30000", ", c #E5E5C5C50000", "< c #E7E7C7C70000", "1 c #E5E5C9C90101", "2 c #E7E7C9C90000", "3 c #E9E9C9C90000", "4 c #E9E9CBCB0101", "5 c #E9E9CDCD0303", "6 c #EBEBCDCD0303", "7 c #EBEBCDCD0505", "8 c #EBEBCDCD0707", "9 c #EBEBCFCF1515", "0 c #C4C4C2C27C7C", "q c #DDDDD0D06363", "w c #F4F4DFDF4E4E", "e c #F3F3E0E05757", "r c #F5F5E1E15353", "t c #F5F5E1E15656", "y c #F6F6E2E25858", "u c #F6F6E3E35B5B", "i c #F4F4E2E25C5C", "p c #F7F7E4E45E5E", "a c #F7F7E4E45F5F", "s c #F5F5E3E36161", "d c #F5F5E2E26666", "f c #F7F7E4E46060", "g c #F6F6E5E56565", "h c #F4F4E3E36E6E", "j c #F7F7E6E66A6A", "k c #F6F6E5E56D6D", "l c #F8F8E5E56262", "z c #F8F8E5E56464", "x c #F8F8E6E66464", "c c #F8F8E6E66565", "v c #F9F9E7E76767", "b c #F9F9E6E66868", "n c #F9F9E7E76969", "m c #F9F9E7E76A6A", "M c #FAFAE8E86B6B", "N c #F8F8E8E86F6F", "B c #FAFAE8E86D6D", "V c #FAFAE8E86E6E", "C c #FAFAE9E96E6E", "Z c #F7F7E6E67171", "A c #F7F7E7E77575", "S c #F9F9E9E97373", "D c #FAFAE9E97171", "F c #FBFBE9E97171", "G c #FBFBEAEA7575", "H c #F8F8E8E87979", "J c #F9F9E9E97C7C", "K c #FCFCEBEB7878", "L c #FCFCECEC7B7B", "P c #BDBDBCBC8181", "I c #BBBBB6B6AFAF", "U c #D9D9A4A4B6B6", "Y c #DFDFADADB9B9", "T c #E0E0B1B19D9D", "R c #E0E0A7A7A6A6", "E c #FAFAEAEA8080", "W c #FBFBECEC8484", "Q c #FBFBEDED8787", "! c #FCFCEDED8787", "~ c #FBFBEDED8D8D", "^ c #FCFCEDED8A8A", "/ c #FCFCEDED8B8B", "( c #FCFCEEEE8E8E", ") c #FCFCEFEF8F8F", "_ c #FCFCF0F09292", "` c #EAEAE6E6AEAE", "' c #ECECE7E7A9A9", "] c gray81", "[ c #CDCDD0D0CCCC", "{ c #D9D9D7D7C3C3", "} c gray82", "| c #D3D3D3D3D1D1", " . c LightGray", ".. c #D5D5D5D5D5D5", "X. c #D7D7D7D7D7D7", "o. c gray86", "O. c #DDDDDDDDDDDD", "+. c #DFDFDFDFDFDF", "@. c #DBDBDCDCEAEA", "#. c #E5E5E2E2C3C3", "$. c #E5E5E3E3CCCC", "%. c #EFEFEDEDDFDF", "&. c #F3F3F0F0DDDD", "*. c #E1E1E3E3E3E3", "=. c gray90", "-. c #E7E7E7E7E7E7", ";. c #EAEAE1E1E1E1", ":. c #EBEBE3E3E2E2", ">. c #E9E9E9E9E9E9", ",. c #EAEAEBEBEAEA", "<. c gray92", "1. c gray93", "2. c #EFEFEDEDEDED", "3. c #EFEFEFEFEFEF", "4. c #F1F1EFEFE1E1", "5. c #F1F1F1F1E2E2", "6. c #F0F0F0F0EBEB", "7. c #F5F5F3F3E9E9", "8. c #F6F6F4F4EBEB", "9. c #F5F5F5F5EFEF", "0. c #F6F6F5F5EFEF", "q. c #F8F8F6F6EDED", "w. c #F1F1F1F1F1F1", "e. c gray95", "r. c #F2F2F2F2F3F3", "t. c #F3F3F3F3F3F3", "y. c #F1F1F1F1F6F6", "u. c #F4F4F4F4F4F4", "i. c #F4F4F5F5F4F4", "p. c gray96", "a. c #F7F7F7F7F4F4", "s. c #F7F7F7F7F5F5", "d. c #F6F6F6F6F6F6", "f. c gray97", "g. c #FBFBF9F9F0F0", "h. c #FAFAFAFAF2F2", "j. c #F8F8F8F8F6F6", "k. c #F9F9F9F9F6F6", "l. c #FCFCFCFCF4F4", "z. c #F8F8F8F8F8F8", "x. c #F9F9F9F9F9F9", "c. c gray98", "v. c #FBFBFBFBFBFB", "b. c gray99", "n. c None", /* pixels */ "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "9 6 8 8 6 4 < 1 %.3.3.,.,.=.=.*.", "8 _ _ ) ( ^ Q ~ l.b.b.x.x.x.d.+.", "8 _ L K G F C F g.x.x.j.s.d.f.O.", "8 ( K G F C v C g.y.$.0 P #.&.o.", "4 ( G F C m l j x.@.o : ; . ` X.", "4 ^ F B v v p g q.x.i.O X 6.i...", "< Q B m v l y s d.' q T U I ] | ", "< W v l i y r i 0.5.4.U R 2.,.| ", "> J v p p e w e 7.i.e.%.%.e.e.] ", "- J H A Z k d h 8.d.u.u.3.y.3.] ", "- & & % $ # @ + { X.....] ] ] ] ", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n." }; springlobby-0.169/src/images/flags/VC.xpm0000600000176000000410000001034512105760300021610 0ustar buildbotwww-data00000000000000/* XPM */ static const char *VC_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 166 2", " c black", ". c #00001B1B0000", "X c #00001D1D0000", "o c #00001F1F0000", "O c #000021210000", "+ c #000023230000", "@ c #000027270000", "# c #00002D2D0000", "$ c #000031310000", "% c #000037370000", "& c #00003D3D0000", "* c #000043430000", "= c #000049490000", "- c #00004F4F0000", "; c #000055550000", ": c #00005B5B0000", "> c #000000008F8F", ", c #000000009393", "< c #00000000AFAF", "1 c #00000000B1B1", "2 c #00000000B3B3", "3 c #00000000B5B5", "4 c #00000000B7B7", "5 c #00000000BBBB", "6 c #00000000BDBD", "7 c #00000000BFBF", "8 c #00000000C1C1", "9 c #00000000C3C3", "0 c #00000000C7C7", "q c #4A4A4A4ACCCC", "w c #4E4E4E4ECECE", "e c #4F4F4F4FCECE", "r c #54545454D0D0", "t c #54545555D0D0", "y c #59595959D2D2", "u c #5E5E5E5ED3D3", "i c #62626262D3D3", "p c #62626262D5D5", "a c #65656565D6D6", "s c #66666666D4D4", "d c #66666666D6D6", "f c #61616161DDDD", "g c #66666666DEDE", "h c #68686969D8D8", "j c #6A6A6A6AE0E0", "k c #6F6F6F6FE0E0", "l c #72727272E2E2", "z c #76767676E3E3", "x c #79797979E4E4", "c c #7B7B7B7BE4E4", "v c #0B0B93930B0B", "b c #0F0F95950E0E", "n c #101095951010", "m c #141498981414", "M c #19199A9A1919", "N c #1A1A9B9B1A1A", "B c #1F1F9D9D1F1F", "V c #20209E9E2020", "C c #2525A0A02525", "Z c #2626A1A12626", "A c #2B2BA4A42B2B", "S c #2C2CA0A02C2C", "D c #2F2FA2A22F2F", "F c #2F2FA3A32F2F", "G c #2C2CA4A42C2C", "H c #3030A7A73030", "J c #3131A7A73131", "K c #3232A4A43232", "L c #3333A4A43232", "P c #3636A7A73636", "I c #3B3BA9A93B3B", "U c #3F3FABAB3F3F", "Y c #4343AFAF2A2A", "T c #5353B5B52F2F", "R c #6262BCBC2F2F", "E c #6565BDBD3535", "W c #6A6ABFBF3636", "Q c #4444AEAE4444", "! c #4343B1B14040", "~ c #4949B0B04949", "^ c #4E4EB3B34E4E", "/ c #5353B5B55353", "( c #5858B8B85757", ") c #7B7BC8C84646", "_ c #8686CBCB2B2B", "` c #9595CFCF2323", "' c #9494CFCF2A2A", "] c #9E9ED3D32929", "[ c #A3A3D7D73A3A", "{ c #B7B7DDDD2424", "} c #B2B2DDDD3C3C", "| c #B9B9DFDF3030", " . c #9999D5D54646", ".. c #ADADDCDC4141", "X. c #E1E1AFAF0000", "o. c #E3E3B3B30000", "O. c #E5E5B5B50000", "+. c #E7E7B9B90000", "@. c #E9E9BBBB0000", "#. c #EBEBBDBD0000", "$. c #DFDFEFEF3636", "%. c #DFDFEFEF3B3B", "&. c #EDEDC1C10000", "*. c #EDEDC5C50000", "=. c #F5F5CFCF0000", "-. c #F7F7D1D10000", ";. c #F9F9D5D50000", ":. c #FBFBD7D70000", ">. c #FDFDD7D70000", ",. c #FDFDD9D90000", "<. c #FDFDDBDB0000", "1. c #FDFDDDDD0000", "2. c #E5E5EDED1313", "3. c #E6E6EEEE1919", "4. c #E8E8F0F01F1F", "5. c #F3F3F3F31919", "6. c #F4F4F4F41E1E", "7. c #F4F4F4F41F1F", "8. c #E8E8EFEF3535", "9. c #EEEEF2F22525", "0. c #EDEDF2F22B2B", "q. c #ECECF3F33131", "w. c #EDEDF4F43737", "e. c #E8E8F2F23C3C", "r. c #F1F1F4F42424", "t. c #F7F7F7F72E2E", "y. c #F4F4F4F43939", "u. c #F5F5F5F53D3D", "i. c #F7F7F8F83434", "p. c #F8F8F8F83434", "a. c #F8F8F8F83636", "s. c #F9F9F9F93A3A", "d. c #F9F9F9F93D3D", "f. c #C3C3E4E44040", "g. c #C5C5E7E74B4B", "h. c #EEEEEEEE4343", "j. c #EFEFEFEF4848", "k. c #ECECF5F54B4B", "l. c #F3F3F5F54242", "z. c #F5F5F6F64646", "x. c #F0F0F0F04E4E", "c. c #F7F7F7F74B4B", "v. c #F6F6F9F94242", "b. c #F6F6F9F94747", "n. c #FAFAFAFA4242", "m. c #FBFBFBFB4747", "M. c #FCFCFCFC4C4C", "N. c #F4F4F1F15353", "B. c #F3F3F2F25858", "V. c #F0F0F0F05C5C", "C. c #F3F3F3F35D5D", "Z. c #F1F1F7F75C5C", "A. c #F8F8F8F85050", "S. c #FDFDFDFD5151", "D. c #FDFDFDFD5454", "F. c #F4F4F4F46060", "G. c #FBFBFBFB6060", "H. c #FCFCFCFC6565", "J. c #FCFCFCFC6969", "K. c #FDFDFDFD6D6D", "L. c #F7F7F7F77D7D", "P. c #FDFDFDFD7171", "I. c #FEFEFEFE7474", "U. c #80808181DDDD", "Y. c #83838383DEDE", "T. c None", /* pixels */ "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.", "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.", "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.", "0 9 1 1 1.1.>.>.>.;.-.-.: ; - = ", "9 c Y.U.L.I.P.K.J.H.G.Z.( / ^ * ", "9 c h a F.D.S.M.m.n.d.w.J G ~ & ", "9 x a i C.S.k.b.v.e.a.q.G Z Q % ", "9 z i u B.g.) ..} W | 0.Z V U $ ", "7 l u y B. .Y %.$.H _ 9.B N I # ", "7 k y r N.....W R ' { 4.M m P @ ", "5 g r e j.d.p.T Y 9.6.3.m n J O ", "4 g e q h.p.t.] ` 6.5.2.n v F o ", "2 g s i C.A.c.z.l.l.u.w.J F V . ", "4 < , > *.&.#.@.@.O.X.o.o o . . ", "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.", "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T." }; springlobby-0.169/src/images/flags/VE.xpm0000600000176000000410000001011312105760300021603 0ustar buildbotwww-data00000000000000/* XPM */ static const char *VE_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 159 2", " c black", ". c #434300003B3B", "X c #777710107272", "o c #7B7B14147575", "O c #7D7D19197878", "+ c #000000008989", "@ c #000000008D8D", "# c #000000009191", "$ c #00000000BBBB", "% c #00000000BFBF", "& c #00000000C1C1", "* c #14141414C8C8", "= c #19191919C9C9", "- c #1A1A1A1ACACA", "; c #1F1F1F1FCBCB", ": c #20202020CCCC", "> c #25252525CDCD", ", c #2A2A2A2ACFCF", "< c #2B2B2B2BCFCF", "1 c #2F2F2F2FD1D1", "2 c #36363636CFCF", "3 c #30303030D1D1", "4 c #35353535D3D3", "5 c #36363636D3D3", "6 c #3B3B3B3BD1D1", "7 c #3B3B3B3BD4D4", "8 c #3B3B3B3BD5D5", "9 c #3F3F3F3FD3D3", "0 c #49494A4ADADA", "q c #4B4B4A4ADADA", "w c #4B4B4B4BDADA", "e c #4F4F4F4FDBDB", "r c #50504F4FDBDB", "t c #53535353DCDC", "y c #54545454DDDD", "u c #58585858DDDD", "i c #67676969D8D8", "p c #6F6F6F6FE2E2", "a c #72727272E2E2", "s c #76767676E4E4", "d c #414197970000", "f c #434395950000", "g c #80801F1F7C7C", "h c #DDDD00000000", "j c #DFDF00000000", "k c #E1E100000000", "l c #E3E300000000", "z c #E5E500000000", "x c #E7E700000000", "c c #E9E900000000", "v c #EBEB00000000", "b c #EDED00000000", "n c #EFEF00000000", "m c #F1F100000000", "M c #F3F300000000", "N c #F5F500000000", "B c #F7F700000000", "V c #F1F10B0B0B0B", "C c #F1F10F0F0E0E", "Z c #F9F900000000", "A c #F2F213131313", "S c #F3F319191919", "D c #F4F41E1E1E1E", "F c #F5F523232323", "G c #F2F22C2C2C2C", "H c #F2F22F2F2F2F", "J c #F6F629292929", "K c #F7F72E2E2E2E", "L c #F2F232323232", "P c #F3F335353535", "I c #F4F439393939", "U c #F5F53D3D3D3D", "Y c #F8F834343434", "T c #F9F93A3A3A3A", "R c #FAFA3F3F3F3F", "E c #F6F642424242", "W c #F7F746464646", "Q c #F7F74B4B4B4B", "! c #FAFA44444444", "~ c #F8F850505050", "^ c #F9F954545555", "/ c #F9F958585858", "( c #FAFA5D5D5D5D", ") c #FBFB61616262", "_ c #FCFC66666666", "` c #848424248080", "' c #87872A2A8282", "] c #8B8B2F2F8686", "[ c #8B8B32328686", "{ c #8E8E34348989", "} c #92923A3A8D8D", "| c #95953F3F9090", " . c #989845459494", ".. c #9B9B49499797", "X. c #AEAE6A6AAAAA", "o. c #B7B7D3D30000", "O. c #B7B7D5D50000", "+. c #B9B9DADA6969", "@. c #E7E7B9B90000", "#. c #E9E9BDBD0000", "$. c #F3F38A8A7F7F", "%. c #EBEBC1C10000", "&. c #EDEDCDCD0000", "*. c #EFEFD1D10000", "=. c #F1F1D5D50000", "-. c #F3F3D7D70000", ";. c #F5F5DBDB0000", ":. c #F7F7DBDB0000", ">. c #F9F9DDDD0000", ",. c #FBFBDFDF0000", "<. c #FFFFDDDD0000", "1. c #FDFDE1E10000", "2. c #FDFDE3E30000", "3. c #FDFDE5E50000", "4. c #FFFFE7E70000", "5. c #FDFDEBEB0000", "6. c #F5F5F5F52626", "7. c #F6F6F6F62B2B", "8. c #F6F6F6F62C2C", "9. c #F7F7F7F73131", "0. c #F8F8F8F83636", "q. c #F8F8F8F83737", "w. c #F9F9F9F93C3C", "e. c #F9F9F9F93D3D", "r. c #F6F6F6F64444", "t. c #F7F7F7F74949", "y. c #F7F7F7F74E4E", "u. c #FAFAFAFA4242", "i. c #FBFBFBFB4747", "p. c #FCFCFCFC4B4B", "a. c #FCFCFCFC4C4C", "s. c #F8F8F8F85353", "d. c #F9F9F9F95757", "f. c #FDFDFDFD5151", "g. c #FDFDFDFD5454", "h. c #FAFAFAFA5C5C", "j. c #FEFEFEFE5959", "k. c #FEFEFEFE5C5C", "l. c #FBFBFBFB6060", "z. c #FCFCFCFC6565", "x. c #FCFCFCFC6969", "c. c #FDFDFDFD6D6D", "v. c #FDFDFDFD7171", "b. c #FEFEFEFE7474", "n. c #FEFEFEFE7777", "m. c #FEFEFEFE7979", "M. c #FCFCFCFC7C7C", "N. c #83838484DEDE", "B. c #95959595E3E3", "V. c #9C9C9C9CE6E6", "C. c #A5A5A5A5EAEA", "Z. c #ACACD2D28989", "A. c #DFDFE0E0F0F0", "S. c #E3E3E3E3F2F2", "D. c #E6E6E6E6F4F4", "F. c #E9E9E9E9F7F7", "G. c #F1F1F1F1F8F8", "H. c #F2F2F2F2F9F9", "J. c None", /* pixels */ "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "5.o.O.4.4.4.1.1.,.,.:.:.=.=.*.&.", "d $.M.Z.n.n.v.c.x.z.l.k.d.s.y.%.", "d N.i +.j.f.f.a.i.u.e.q.9.8.t.#.", "<.m.k.j.g.f.p.i.u.e.0.8.7.6.r.@.", "& s u y r w F.H.H.D.< , > - 0 # ", "% a t r w F.C.8 5 V.S.> ; - 6 @ ", "$ p e w F.C.8 5 1 , B.A.- * 2 + ", ". X... .} } { ] ' ` g O o X [ ", "Z _ ! E T Y K J F D S A C V H j ", "Z ) ( ^ ^ ~ Q W E U I P L H H j ", "N M M b b b v v x x k k j j h h ", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.", "J.J.J.J.J.J.J.J.J.J.J.J.J.J.J.J." }; springlobby-0.169/src/images/flags/VG.xpm0000600000176000000410000001034512105760300021614 0ustar buildbotwww-data00000000000000/* XPM */ static const char *VG_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 166 2", " c black", ". c #000000001D1D", "X c #000000001F1F", "o c #000000002121", "O c #000000002323", "+ c #000000002525", "@ c #000000002727", "# c #000000002B2B", "$ c #000000002F2F", "% c #000000003131", "& c #000000003535", "* c #000000003737", "= c #000000003B3B", "- c #000000004141", "; c #000000004545", ": c #000000004747", "> c #000000004B4B", ", c #000000004D4D", "< c #000000005151", "1 c #000000005353", "2 c #000000005757", "3 c #000000005959", "4 c #000000005D5D", "5 c #000000006363", "6 c #000000006565", "7 c #000000006969", "8 c #000000006D6D", "9 c #000000006F6F", "0 c #000000007373", "q c #000000007777", "w c #5D5D0F0F6161", "e c #5B5B1F1F7575", "r c #737309094B4B", "t c #7D7D17175151", "y c #474779794141", "u c #48487A7A4747", "i c #4F4F7F7F4B4B", "p c #000000008F8F", "a c #000000009D9D", "s c #1D1D07078989", "d c #1E1E1E1E9E9E", "f c #23232323A0A0", "g c #24242424A3A3", "h c #29292929A2A2", "j c #2A2A2A2AA3A3", "k c #2A2A2A2AA7A7", "l c #2C2C2C2CA0A0", "z c #2F2F2F2FA3A3", "x c #2D2D2D2DA4A4", "c c #2F2F2F2FA4A4", "v c #2E2E2E2EA6A6", "b c #2F2F2F2FA6A6", "n c #2F2F2F2FA7A7", "m c #31313535A5A5", "M c #35353434A7A7", "N c #30303030ABAB", "B c #32323232AAAA", "V c #34343434A9A9", "C c #35353535A8A8", "Z c #35353535A9A9", "A c #36363636ABAB", "S c #36363636AEAE", "D c #37373A3AA8A8", "F c #3B3B3737A3A3", "G c #39393939A9A9", "H c #3A3A3A3AABAB", "J c #3B3B3B3BAAAA", "K c #3B3B3B3BAEAE", "L c #3D3D3D3DAAAA", "P c #3D3D3E3EACAC", "I c #3F3F3F3FADAD", "U c #3F3F3F3FAFAF", "Y c #3C3C3C3CB0B0", "T c #40403F3FAEAE", "R c #40404040AEAE", "E c #42424242ADAD", "W c #46464646AEAE", "Q c #48484343ACAC", "! c #42424242B1B1", "~ c #44444444B0B0", "^ c #45454545B0B0", "/ c #45454545B3B3", "( c #46464646B3B3", ") c #49494949B0B0", "_ c #49494949B3B3", "` c #4B4B4B4BB1B1", "' c #49494A4AB5B5", "] c #4E4E4E4EB3B3", "[ c #4F4F4F4FB5B5", "{ c #52524949ACAC", "} c #50505050B3B3", "| c #53535353B5B5", " . c #54545454B6B6", ".. c #53535353BEBE", "X. c #58585757B9B9", "o. c #58585858B8B8", "O. c #5C5C5C5CBABA", "+. c #5D5D5D5DBABA", "@. c #61615555AFAF", "#. c #77775D5DA7A7", "$. c #7E7E5F5FA5A5", "%. c #61616060BCBC", "&. c #61616161BDBD", "*. c #62626363BDBD", "=. c #65656565BEBE", "-. c #66666666BFBF", ";. c #6A6A6A6AC1C1", ":. c #6A6A6B6BC1C1", ">. c #6F6F6F6FC4C4", ",. c #535381815050", "<. c #545482825353", "1. c #545484845555", "2. c #5C5C89895A5A", "3. c #5C5C91914949", "4. c #565683836565", "5. c #555585856868", "6. c #61618C8C6161", "7. c #7E7EA6A66F6F", "8. c #838311114545", "9. c #ADAD57577777", "0. c #BFBF67677D7D", "q. c #CDCD15151717", "w. c #D5D56A6A7171", "e. c #DFDF75757878", "r. c #DEDE7B7B7D7D", "t. c #E2E268686767", "y. c #E5E573737171", "u. c #E8E87B7B7676", "i. c #80805C5C9F9F", "p. c #8A8A7A7ABDBD", "a. c #91917272A9A9", "s. c #93937373A9A9", "d. c #A7A76D6D9595", "f. c #BBBB7C7C9999", "g. c #C3C37E7E9595", "h. c #D1D17E7E8B8B", "j. c #81819E9E4F4F", "k. c #81819D9D5050", "l. c #9C9C96966666", "z. c #A2A29D9D6F6F", "x. c #ABABABAB5858", "c. c #ADADADAD5C5C", "v. c #C6C6BFBF5D5D", "b. c #EAEA83837E7E", "n. c #C8C8C2C26767", "m. c #97978383BDBD", "M. c #9F9FBEBE9E9E", "N. c #95959898D4D4", "B. c #93939B9BDADA", "V. c #ACACC2C29C9C", "C. c #A7A7C3C3A2A2", "Z. c #ABABC3C3A3A3", "A. c #D7D79A9AA9A9", "S. c #D6D6A7A7B7B7", "D. c #D4D4AAAAB7B7", "F. c #DFDFAFAFBBBB", "G. c #E0E081818484", "H. c #E5E591919494", "J. c #EFEFA0A09C9C", "K. c #EEEEA2A29E9E", "L. c #D4D4B3B3C5C5", "P. c #DDDDB6B6C3C3", "I. c #DDDDCECEDFDF", "U. c #E2E2C0C0CBCB", "Y. c #E1E1C8C8D4D4", "T. c None", /* pixels */ "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.", "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.", "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.", "0.#.a r 8.p w 9.0 9 7 5 4 3 1 , ", "s P.I.S.A.L.Y.N.:.=.&.O.o.| ] : ", "q.H.b.y.t.u.e.w.{ ! P D m x ) - ", "t F.J.r.G.J.h.d.Q U 6.5.4.<.~ = ", "@.U.m.f.g.B.D.s.P S 2.7.V.i U & ", "e p...$.$./ &.a.F N 1.M.Z.u K $ ", "q >.[ _ ~ E L A n k ,.3.C.y S # ", "0 :._ ~ T G A x j g n.k.k.v.M O ", "9 ;.~ T G Z x j f d z.c.x.l.z o ", "7 &.O.o. .} ) W E L G A B x z . ", "6 4 2 1 > : - = & $ $ O o o . . ", "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.", "T.T.T.T.T.T.T.T.T.T.T.T.T.T.T.T." }; springlobby-0.169/src/images/flags/VI.xpm0000600000176000000410000000730612105760300021621 0ustar buildbotwww-data00000000000000/* XPM */ static const char *VI_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 145 2", " c black", ". c #5A5A4343D5D5", "X c #5E5E4949DDDD", "o c #64645050DDDD", "O c #79796868CBCB", "+ c #78786C6CDEDE", "@ c #75757575CFCF", "# c #77777575CFCF", "$ c #494992925050", "% c #D6D66B6B5353", "& c #D8D860605E5E", "* c #D9D971716C6C", "= c #DCDC71717373", "- c #8B8B7F7FE0E0", "; c #9292B3B34D4D", ": c #BBBB9A9A4242", "> c #BFBFBFBF6D6D", ", c #C9C9BFBF5252", "< c #CECECECE2B2B", "1 c #EBEBD5D51E1E", "2 c #E1E1D7D72525", "3 c #E4E4DEDE2B2B", "4 c #E3E3D7D73A3A", "5 c #E9E9D9D93E3E", "6 c #EEEEE8E83131", "7 c #DDDDDDDD5A5A", "8 c #D0D0CDCD6262", "9 c #DCDCD5D56D6D", "0 c #DFDFD9D96262", "q c #E3E3D4D44242", "w c #E0E0D9D94242", "e c #E7E7DBDB4242", "r c #EBEBDDDD4343", "t c #E6E6DDDD5A5A", "y c #EBEBDFDF5555", "u c #EBEBDFDF5858", "i c #ECECE0E04848", "p c #ECECE5E55454", "a c #E8E8E1E15F5F", "s c #F3F3E7E74C4C", "d c #F5F5EFEF4949", "f c #F5F5EBEB5656", "g c #EDEDE8E86767", "h c #E6E6E3E37E7E", "j c #EDEDE7E77979", "k c #F1F1E7E76C6C", "l c #F2F2E9E96E6E", "z c #F2F2ECEC7373", "x c #88888383ADAD", "c c #91918C8CBFBF", "v c #BCBCBCBCBABA", "b c #89898989CDCD", "n c #95959595D7D7", "m c #9B9B9B9BD9D9", "M c #9C9C9C9CE1E1", "N c #A9A9A8A8DEDE", "B c #BBBBBBBBCBCB", "V c #BDBDBDBDCDCD", "C c #BFBFBFBFCFCF", "Z c #AAAAA9A9E0E0", "A c #AEAEAEAEE2E2", "S c #B8B8B7B7EAEA", "D c #B9B9B9B9E5E5", "F c #BEBEBEBEE6E6", "G c #B5B5B6B6F1F1", "H c #BCBCCECEA6A6", "J c #DDDDD5D58181", "K c #DDDDDFDF8282", "L c #D9D9D1D19595", "P c #D4D4CECEBDBD", "I c #D3D3D5D5A3A3", "U c #E4E4E5E59696", "Y c #F3F3E9E98585", "T c #F2F2E8E88D8D", "R c #F4F4EEEE8F8F", "E c #FBFBEFEF8E8E", "W c #F7F7EFEF9898", "Q c #F7F7EEEE9E9E", "! c #ECECE5E5A3A3", "~ c #F4F4F0F0A3A3", "^ c #F6F6F1F1A2A2", "/ c #F8F8F0F0A4A4", "( c #F9F9F2F2A9A9", ") c #FCFCF6F6BEBE", "_ c #CBCBCBCBCBCB", "` c #CFCFCDCDCDCD", "' c #CFCFCFCFCDCD", "] c gray81", "[ c gray82", "{ c LightGray", "} c #D3D3D3D3D7D7", "| c #D7D7D7D7D7D7", " . c gray85", ".. c #DDDDDDDDDDDD", "X. c #DFDFDFDFDFDF", "o. c #C2C2C2C2E8E8", "O. c #C2C2C1C1EDED", "+. c #C9C9C8C8EFEF", "@. c #D8D8D8D8E7E7", "#. c #DCDCDCDCEAEA", "$. c #D6D6D5D5F2F2", "%. c #EDEDCFCFCFCF", "&. c #EBEBCBCBD0D0", "*. c #E7E7E7E7CDCD", "=. c #EEEEEEEED6D6", "-. c #F8F8F2F2C0C0", ";. c #F7F7F3F3D0D0", ":. c #F9F9F6F6D5D5", ">. c #FCFCF9F9DCDC", ",. c #E1E1E1E1E1E1", "<. c gray89", "1. c gray90", "2. c #E7E7E7E7E7E7", "3. c #E1E1E1E1EAEA", "4. c #E6E6EAEAE3E3", "5. c #E9E9E9E9E9E9", "6. c gray92", "7. c gray93", "8. c #EDEDEDEDEFEF", "9. c #EFEFEFEFEFEF", "0. c #EFEFEFEFF1F1", "q. c #F7F7F7F7E4E4", "w. c #F0F0F1F1E9E9", "e. c #F1F1F1F1EFEF", "r. c #FDFDFBFBE1E1", "t. c #F1F1F1F1F0F0", "y. c #F1F1F1F1F1F1", "u. c gray95", "i. c #F2F2F2F2F3F3", "p. c #F5F5F5F5F0F0", "a. c gray97", "s. c #F7F7F7F7F8F8", "d. c #F7F7F7F7FCFC", "f. c #F9F9F7F7F0F0", "g. c #F8F8F6F6F2F2", "h. c #FAFAFAFAF2F2", "j. c #FDFDFDFDF5F5", "k. c #F9F9F9F9F9F9", "l. c gray98", "z. c #FBFBFBFBFBFB", "x. c #FBFBFBFBFCFC", "c. c #FBFBFCFCFBFB", "v. c gray99", "b. c #FDFDFDFDFEFE", "n. c None", /* pixels */ "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "y.y.y.y.y.0.e.8.8.6.6.1.1.,.,.X.", "e.( >.r.) E b.Q W v./ -.:.;.T L ", "y.~ g j R ~ j.z d h.q.k p q 7 > ", "8.x.Y a p f - c x + J 6 < 4 *.} ", "@ d.P h t s O o X . q 3 0 ! A C ", "@ $.S b.b.k p.= &.& 5 I m #.Z C ", "n O.+.z.$ u h.* &.% i G b 3.N B ", "8.c.k.b.r ; U , : 8 K 1 @.u.u.' ", "6.c.x.k.w.H 4.e 2 9 M v y.y.u._ ", "6.z.z.h.k.a.a.p.=.o.D F u.y.y._ ", "1.1.<.,.X.X. .| | { [ ] ' _ _ _ ", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n." }; springlobby-0.169/src/images/flags/VN.xpm0000600000176000000410000000662712105760300021633 0ustar buildbotwww-data00000000000000/* XPM */ static const char *VN_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 128 2", " c black", ". c #DDDD00000000", "X c #DFDF00000000", "o c #E1E100000000", "O c #E3E300000000", "+ c #E5E500000000", "@ c #E7E700000000", "# c #E9E900000000", "$ c #EBEB00000000", "% c #EDED00000000", "& c #EFEF00000000", "* c #F1F100000000", "= c #F3F300000000", "- c #F5F500000000", "; c #F7F700000000", ": c #F1F10B0B0B0B", "> c #F1F10F0F0E0E", ", c #F9F900000000", "< c #FBFB00000000", "1 c #FDFD00000000", "2 c red", "3 c #F2F210101010", "4 c #F2F213131313", "5 c #F2F214141414", "6 c #F3F319191919", "7 c #F3F31A1A1A1A", "8 c #F4F41F1F1F1F", "9 c #F3F327271919", "0 c #F4F430301E1E", "q c #F4F420202020", "w c #F5F523232323", "e c #F5F524242424", "r c #F5F525252525", "t c #F5F526262626", "y c #F2F22C2C2C2C", "u c #F2F22F2F2F2F", "i c #F6F629292929", "p c #F6F62B2B2B2B", "a c #F6F62C2C2C2C", "s c #F6F633332B2B", "d c #F2F232323232", "f c #F3F332323232", "g c #F3F335353535", "h c #F7F731313131", "j c #F4F436363636", "k c #F4F439393939", "l c #F4F43B3B3B3B", "z c #F5F53D3D3D3D", "x c #F5F53F3F3F3F", "c c #F8F837373636", "v c #F8F837373737", "b c #F8F83E3E3434", "n c #F9F93A3A3A3A", "m c #F9F93C3C3C3C", "M c #F9F93C3C3D3D", "N c #FAFA3F3F3F3F", "B c #F6F642422B2B", "V c #F7F743432E2E", "C c #F6F64E4E2A2A", "Z c #F7F760602F2F", "A c #F6F677772A2A", "S c #F9F973733A3A", "D c #F6F642424242", "F c #F6F644444444", "G c #F7F746464646", "H c #F7F749494949", "J c #F7F74B4B4B4B", "K c #F7F74E4E4E4E", "L c #FAFA40404040", "P c #FAFA42424242", "I c #FAFA44444444", "U c #FBFB45454545", "Y c #FBFB49494949", "T c #FBFB4A4A4949", "R c #FCFC4A4A4B4B", "E c #FCFC4B4B4B4B", "W c #FCFC4F4F4F4F", "Q c #FBFB54544646", "! c #F8F850505050", "~ c #F8F853535353", "^ c #F9F954545555", "/ c #F9F957575757", "( c #FDFD51515050", ") c #FDFD51515151", "_ c #FDFD53535353", "` c #FDFD54545454", "' c #F9F958585858", "] c #FAFA5C5C5C5C", "[ c #FAFA5D5D5D5D", "{ c #FEFE58585858", "} c #FEFE59595959", "| c #FEFE5C5C5C5C", " . c #FEFE5F5F5F5F", ".. c #FBFB76764747", "X. c #FCFC78784C4C", "o. c #FBFB60606060", "O. c #FBFB61616262", "+. c #FCFC65656565", "@. c #FCFC66666666", "#. c #FCFC69696969", "$. c #FCFC6A6A6A6A", "%. c #FDFD6D6D6D6D", "&. c #FDFD6F6F6F6F", "*. c #FDFD70707171", "=. c #FEFE72727373", "-. c #FEFE74747474", ";. c #FEFE76767676", ":. c #FEFE77777777", ">. c #FEFE79797979", ",. c #FFFF7B7B7A7A", "<. c #FFFF7B7B7B7B", "1. c #FBFBBFBF4747", "2. c #F8F8C1C13636", "3. c #F7F7D2D23030", "4. c #F5F5F5F52424", "5. c #F7F7F7F72F2F", "6. c #F7F7F7F73030", "7. c #F8F8F8F83434", "8. c #F8F8F8F83535", "9. c #F8F8F8F83636", "0. c #F9F9F9F93B3B", "q. c #F9F9F9F93C3C", "w. c #FBFBCBCB4646", "e. c #FAFACCCC4242", "r. c #FCFCD5D54B4B", "t. c #FAFAFAFA4040", "y. c #FAFAFAFA4141", "u. c None", /* pixels */ "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "2 2 2 2 < 2 2 2 < < ; ; = = % % ", "2 <.<.<.;.-.&.%.#.+.o.] / ~ K $ ", "2 <.| | | _ _ X...P M c h a H $ ", "2 <.| | _ _ T 1.e.M c h p t F + ", "2 ;./ _ W r.w.t.0.2.3.s t q x + ", "2 =._ W T Q t.0.9.6.B t 8 6 l + ", "2 &.W T U L S 8.5.A t 8 6 4 j + ", "< $.T I L n 8.Z C 4.q 6 5 3 h . ", "; @.I L n b V p q 0 9 5 > : u . ", "; O.[ ' / K T F D x l g f u u . ", "; = = % % % $ $ + + O O . . . . ", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.", "u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u." }; springlobby-0.169/src/images/flags/VU.xpm0000600000176000000410000001001112105760300021620 0ustar buildbotwww-data00000000000000/* XPM */ static const char *VU_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 156 2", " c black", ". c #010100000000", "X c #090900000000", "o c #191917171414", "O c #1E1E1C1C1919", "+ c #00003D3D0000", "@ c #2D2D1B1B0000", "# c #232322221F1F", "$ c #242423232020", "% c #292927272424", "& c #2A2A28282525", "* c #2E2E2D2D2A2A", "= c #2F2F2E2E2B2B", "- c #343432322F2F", "; c #353533333030", ": c #383837373535", "> c #3A3A38383636", ", c #3B3B39393636", "< c #3E3E3D3D3A3A", "1 c #3F3F3E3E3C3C", "2 c #3C3C5A5A3A3A", "3 c #3D3D5A5A3A3A", "4 c #434341413F3F", "5 c #454543434141", "6 c #494949494646", "7 c #4D4D4B4B4949", "8 c #4E4E4C4C4B4B", "9 c #5F5F5D5D5C5C", "0 c #5B5B74745858", "q c #757552525151", "w c #7C7C5A5A5959", "e c #74746F6F5353", "r c #6A6A68686666", "t c #6E6E6D6D6A6A", "y c #7B7B7A7A7979", "u c #7D7D7D7D7A7A", "i c #000081810000", "p c #000083830000", "a c #000087870000", "s c #000089890000", "d c #00008B8B0000", "f c #00008F8F0000", "g c #000091910000", "h c #000093930000", "j c #000099990000", "k c #00009D9D0000", "l c #00009F9F0000", "z c #0000A3A30000", "x c #363691913434", "c c #36369A9A3434", "v c #0B0BC2C20B0B", "b c #0F0FC4C40E0E", "n c #1313C6C61313", "m c #1010CACA1010", "M c #1414CBCB1414", "N c #1818C7C71919", "B c #1919CCCC1919", "V c #1E1EC9C91E1E", "C c #1F1FCFCF1F1F", "Z c #2323CBCB2323", "A c #2929CDCD2929", "S c #2C2CCACA2C2C", "D c #2F2FCACA2F2F", "F c #2F2FCBCB2F2F", "G c #2424D0D02424", "H c #2A2AD2D22A2A", "J c #2E2ED3D32E2E", "K c #2F2FD5D52F2F", "L c #3232CCCC3232", "P c #3535CDCD3535", "I c #3939CFCF3939", "U c #3333D1D13232", "Y c #3D3DD0D03D3D", "T c #5555ADAD5555", "R c #4242D2D24242", "E c #4646D3D34646", "W c #4B4BD5D54B4B", "Q c #5050D8D85050", "! c #959500000000", "~ c #B3B375750000", "^ c #808076764444", "/ c #818177774545", "( c #818177774646", ") c #89897F7F5050", "_ c #96967A7A7979", "` c #B3B34C4C4B4B", "' c #E7E700000000", "] c #E9E900000000", "[ c #EBEB00000000", "{ c #EDED00000000", "} c #EFEF00000000", "| c #F1F100000000", " . c #F3F300000000", ".. c #F5F500000000", "X. c #F7F700000000", "o. c #F9F900000000", "O. c #FBFB00000000", "+. c #FDFD00000000", "@. c #F5F526262626", "#. c #F6F62B2B2B2B", "$. c #F6F62C2C2C2C", "%. c #F7F731313131", "&. c #F8F837373636", "*. c #F8F837373737", "=. c #F9F93C3C3C3C", "-. c #F9F93C3C3D3D", ";. c #C2C255555454", ":. c #D0D077777777", ">. c #F6F644444444", ",. c #F7F749494949", "<. c #F7F74E4E4E4E", "1. c #FAFA41414242", "2. c #FAFA42424242", "3. c #FBFB47474747", "4. c #FCFC4C4C4C4C", "5. c #F8F853535353", "6. c #F9F957575757", "7. c #FDFD51515151", "8. c #FAFA5C5C5C5C", "9. c #FBFB60606060", "0. c #FCFC65656565", "q. c #FCFC69696969", "w. c #FDFD6D6D6D6D", "e. c #FDFD70707171", "r. c #FEFE74747474", "t. c #8E8E85855959", "y. c #94948B8B5F5F", "u. c #94948C8C6262", "i. c #A7A79F9F7B7B", "p. c #BFBFAFAF4F4F", "a. c #B0B0A6A66F6F", "s. c #C7C795950000", "d. c #D5D5ABAB0000", "f. c #DBDBBDBD2222", "g. c #CDCDBFBF7373", "h. c #DDDDC0C02828", "j. c #DEDEC2C22C2C", "k. c #E0E0C4C43232", "l. c #E2E2C6C63737", "z. c #E3E3C8C83C3C", "x. c #D7D7C2C24949", "c. c #DADAC6C65454", "v. c #D5D5C7C77676", "b. c #E0E0C7C74242", "n. c #E1E1C8C84545", "m. c #E1E1C8C84646", "M. c #E5E5CACA4242", "N. c #E8E8CFCF4242", "B. c #E4E4CDCD5050", "V. c #E9E9D3D34F4F", "C. c #E7E7D0D05A5A", "Z. c #ECECD6D65858", "A. c #E6E6D1D16262", "S. c #E9E9D3D36161", "D. c #EDEDDCDC7F7F", "F. c None", /* pixels */ "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "@ d.X ! +.+.+.+.O.O.X.X. . .{ { ", " i.D._ :.r.e.w.q.0.9.8.6.5.<.[ ", " u y.S.w ;.7.4.3.2.-.&.%.$.,.[ ", " y 9 t.C.q ` 3.2.-.&.%.#.@.>.' ", " v.Z.c.) B.6 5 1 > ; = & $ 4 ", " v.e V.8 ( N.M.z.l.k.j.f.f.n.~ ", " a.p.x.( n.< > - = % # O o > ", " t 8 ^ n.2 x J H Z C B M M U h ", " r ^ n.2 c J A Z V N M b v F a ", " u.A.0 T Q W E R Y Y P L D S i ", " s. + z l k j h g g a a a a a ", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.", "F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F." }; springlobby-0.169/src/images/flags/WF.xpm0000600000176000000410000000720612105760300021616 0ustar buildbotwww-data00000000000000/* XPM */ static const char *WF_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 139 2", " c black", ". c #676700000000", "X c #6D6D00000000", "o c #6F6F00000000", "O c #737300000000", "+ c #757500000000", "@ c #777700000000", "# c #7B7B00000000", "$ c #7F7F00000000", "% c #000000009393", "& c #000000009595", "* c #76767676D1D1", "= c #79797979D3D3", "- c #7B7B7B7BD3D3", "; c #818100000000", ": c #858500000000", "> c #898900000000", ", c #8D8D00000000", "< c #8F8F00000000", "1 c #939300000000", "2 c #959500000000", "3 c #979700000000", "4 c #9B9B00000000", "5 c #9F9F00000000", "6 c #A1A100000000", "7 c #A3A300000000", "8 c #A5A500000000", "9 c #A7A700000000", "0 c #ABAB00000000", "q c #ADAD00000000", "w c #AFAF00000000", "e c #B7B70B0B0B0B", "r c #B7B70F0F0E0E", "t c #B8B813131313", "y c #BABA19191919", "u c #BEBE1E1E1E1E", "i c #BDBD25252525", "p c #C0C023232323", "a c #C2C227272727", "s c #C3C329292929", "d c #C3C32A2A2A2A", "f c #C0C02C2C2C2C", "g c #C1C12F2F2F2F", "h c #C2C22E2E2E2E", "j c #C3C32F2F2F2F", "k c #C4C42C2C2C2C", "l c #C5C52E2E2E2E", "z c #C5C52F2F2F2F", "x c #C2C232323232", "c c #C3C332323232", "v c #C3C335353535", "b c #C3C336363636", "n c #C5C531313131", "m c #C5C536363636", "M c #C5C537373737", "N c #C7C734343434", "B c #C7C735353535", "V c #C3C33B3B3B3B", "C c #C5C539393939", "Z c #C7C73A3A3A3A", "A c #C7C73B3B3B3B", "S c #C7C73D3D3C3C", "D c #C7C73D3D3D3D", "F c #C7C73F3F3F3F", "G c #C9C93A3A3A3A", "H c #C9C93B3B3A3A", "J c #C9C93B3B3B3B", "K c #C8C83B3B3C3C", "L c #C9C93C3C3D3D", "P c #CBCB3F3F3F3F", "I c #C8C842424242", "U c #CBCB40404040", "Y c #CACA43434343", "T c #CACA44444444", "R c #CACA46464646", "E c #CCCC41414141", "W c #CCCC41414242", "Q c #CCCC42424242", "! c #CDCD44444444", "~ c #CDCD45454545", "^ c #CECE47474747", "/ c #CCCC49494949", "( c #CCCC4B4B4B4B", ") c #CFCF49494949", "_ c #CFCF4A4A4949", "` c #CDCD4E4E4E4E", "' c #CECE4E4E4E4E", "] c #CECE50505050", "[ c #CECE51515151", "{ c #CFCF53535353", "} c #D1D143434141", "| c #D1D14E4E4E4E", " . c #D1D14F4F4F4F", ".. c #D1D14F4F5050", "X. c #D0D053535353", "o. c #D0D054545454", "O. c #D0D054545555", "+. c #D3D354545454", "@. c #D2D257575757", "#. c #D2D258585858", "$. c #D3D35C5C5C5C", "%. c #D3D35D5D5D5D", "&. c #D4D459595959", "*. c #D4D460606060", "=. c #D5D561616262", "-. c #D6D665656565", ";. c #D7D766666666", ":. c #D8D869696969", ">. c #D8D86A6A6A6A", ",. c #D9D96F6F6E6E", "<. c #DADA6F6F6F6F", "1. c #D9D974747474", "2. c #DDDD77777777", "3. c #DADA8C8C8C8C", "4. c #DADA8E8E8E8E", "5. c #DDDD89898989", "6. c #DFDF8D8D8E8E", "7. c #E0E090909090", "8. c #E2E292929393", "9. c #E1E194949494", "0. c #E2E295959595", "q. c #E3E396969696", "w. c #E4E498989898", "e. c #E2E2AEAEAEAE", "r. c #E3E3AFAFAFAF", "t. c #E4E4AEAEAEAE", "y. c #E9E9A9A9A9A9", "u. c #E9E9ABABABAB", "i. c #E5E5B1B1B1B1", "p. c #E5E5BEBEBEBE", "a. c #EDEDCBCBCBCB", "s. c #EEEECDCDCDCD", "d. c #EFEFD8D8D8D8", "f. c #F3F3F3F3F3F3", "g. c gray97", "h. c #FDFDFDFDFDFD", "j. c #FEFEFEFEFEFE", "k. c gray100", "l. c None", /* pixels */ "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "& & k.k.w q ) w q 9 7 5 5 2 1 2 ", "& - k.k.1.1.u.,.>.;.%.$.@.{ ` : ", "& - h.k.&.{ w.| ^ Q L m n k / : ", "& - k.k.+.{ 9.) Q ` s.g.d.F T $ ", "% * k.h...{ 9.U K a.Y i.Z r.F $ ", "} y.q.8.6.6.5.J m g.t.a 3.f.V # ", "w <. .) ~ Q J N j d.Z 3.k p.b + ", "q >.) ~ P J N j d Z r.f.p.i c O ", "0 ;.! P J N j d p u y t r e c o ", "7 =.%.#.@.` ( T Y F Z V c k i . ", "9 4 2 1 , , > : $ # + + O o X O ", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.", "l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l." }; springlobby-0.169/src/images/flags/WS.xpm0000600000176000000410000000704512105760300021634 0ustar buildbotwww-data00000000000000/* XPM */ static const char *WS_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 134 2", " c black", ". c #000000002323", "X c #000000002B2B", "o c #000000003131", "O c #000000003333", "+ c #000000003737", "@ c #000000003939", "# c #000000003B3B", "$ c #414136367F7F", "% c #46463B3B8282", "& c #47473B3B8383", "* c #4B4B40408686", "= c #4C4C41418686", "- c #4C4C41418888", "; c #464646469494", ": c #4B4B4B4B9393", "> c #4B4B4B4B9494", ", c #505046468A8A", "< c #515147478A8A", "1 c #525247478B8B", "2 c #55554A4A8D8D", "3 c #57574C4C8E8E", "4 c #515151519595", "5 c #5E5E53539393", "6 c #585858589B9B", "7 c #5A5A5A5A9C9C", "8 c #63636363A1A1", "9 c #69696969A4A4", "0 c #72726969A1A1", "q c #75756D6DA3A3", "w c #78786F6FA5A5", "e c #71717171A9A9", "r c #7A7A7272A8A8", "t c #79797979AEAE", "y c #7A7A7A7AAFAF", "u c #7B7B7B7BAEAE", "i c #7B7B7B7BAFAF", "p c #76767676B0B0", "a c #DDDD00000000", "s c #DFDF00000000", "d c #E1E100000000", "f c #E3E300000000", "g c #E5E500000000", "h c #E7E700000000", "j c #E9E900000000", "k c #EBEB00000000", "l c #EDED00000000", "z c #EFEF00000000", "x c #F1F100000000", "c c #F3F300000000", "v c #F5F500000000", "b c #F7F700000000", "n c #F1F10B0B0B0B", "m c #F1F10F0F0E0E", "M c #F9F900000000", "N c #FBFB00000000", "B c #FDFD00000000", "V c #F2F210101010", "C c #F2F213131313", "Z c #F2F214141414", "A c #F3F319191919", "S c #F3F31A1A1A1A", "D c #F4F41E1E1E1E", "F c #F4F41F1F1F1F", "G c #F4F420202020", "H c #F5F523232323", "J c #F5F524242424", "K c #F5F525252525", "L c #F5F526262626", "P c #F2F22C2C2C2C", "I c #F2F22F2F2F2F", "U c #F6F629292929", "Y c #F6F62A2A2A2A", "T c #F6F62B2B2B2B", "R c #F6F62C2C2C2C", "E c #F7F72E2E2E2E", "W c #F7F72F2F2F2F", "Q c #F2F232323232", "! c #F3F332323232", "~ c #F3F335353535", "^ c #F7F730303030", "/ c #F7F731313131", "( c #F4F436363636", ") c #F4F439393939", "_ c #F4F43B3B3B3B", "` c #F5F53D3D3D3D", "' c #F5F53F3F3F3F", "] c #F8F834343434", "[ c #F8F835353535", "{ c #F8F836363636", "} c #F8F837373636", "| c #F8F837373737", " . c #F9F93A3A3A3A", ".. c #F9F93B3B3A3A", "X. c #F9F93C3C3C3C", "o. c #F9F93C3C3D3D", "O. c #FAFA3F3F3F3F", "+. c #F6F642424242", "@. c #F6F644444444", "#. c #F7F746464646", "$. c #F7F749494949", "%. c #F7F74B4B4B4B", "&. c #F7F74E4E4E4E", "*. c #FAFA40404040", "=. c #FAFA42424242", "-. c #FAFA44444444", ";. c #FBFB45454545", ":. c #FBFB49494949", ">. c #FBFB4A4A4949", ",. c #FCFC4F4F4F4F", "<. c #F8F850505050", "1. c #F8F853535353", "2. c #F9F954545555", "3. c #F9F957575757", "4. c #F9F958585858", "5. c #FAFA5C5C5C5C", "6. c #FAFA5D5D5D5D", "7. c #FBFB60606060", "8. c #FBFB61616262", "9. c #FCFC65656565", "0. c #FCFC66666666", "q. c #FCFC6A6A6A6A", "w. c #FDFD6F6F6F6F", "e. c #8B8B8B8BB9B9", "r. c #8C8C8C8CB9B9", "t. c #9C9C9C9CC3C3", "y. c #9C9C9D9DC3C3", "u. c #9B9BA3A3CACA", "i. c #ABABABABCBCB", "p. c #AEAEB5B5D4D4", "a. c #BBBBBBBBD6D6", "s. c #BEBEBEBED6D6", "d. c #D0D0D1D1E2E2", "f. c None", /* pixels */ "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "# # # # # o o X . M b b c c l l ", "# i t.d.e.s.e.q 0 9.7.5.3.1.&.k ", "# i a.9 8 t.4 3 < =.o.} / R $.k ", "# t i 6 i.e > < - o.} / T L @.g ", "+ t 6 p.u.: ; * & } ^ T L G ' g ", "o r 5 w 2 < & % $ ^ T J G A ` g ", "B w.,.:.;.=.o.} E T J F A Z ( g ", "B q.:.;.O. .} W T J F A Z V / a ", "M 9.;.*. ./ R T G F A C m n I a ", "b 8.6.4.3.&.>.@.+.' ) ~ ! I I a ", "b c c l l l k k g g f f a a a a ", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.", "f.f.f.f.f.f.f.f.f.f.f.f.f.f.f.f." }; springlobby-0.169/src/images/flags/YE.xpm0000600000176000000410000000610512105760300021614 0ustar buildbotwww-data00000000000000/* XPM */ static const char *YE_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 120 2", " c black", ". c #161616161616", "X c gray10", "o c #1E1E1E1E1E1E", "O c #222223232323", "+ c #282828282828", "@ c #2D2D2D2D2D2D", "# c #333332323232", "$ c gray21", "% c #373737373737", "& c gray22", "* c gray23", "= c gray24", "- c #3F3F3F3F3F3F", "; c #424241414141", ": c #434343434343", "> c #464646464646", ", c #484848484848", "< c gray29", "1 c gray30", "2 c gray31", "3 c #535353535353", "4 c #585857575858", "5 c gray36", "6 c #606060606060", "7 c #656565656565", "8 c #696969696A6A", "9 c gray43", "0 c #D5D500000000", "q c #D7D700000000", "w c #D9D900000000", "e c #DBDB00000000", "r c #DFDF00000000", "t c #E1E100000000", "y c #E3E300000000", "u c #E5E500000000", "i c #E7E700000000", "p c #E9E900000000", "a c #EBEB00000000", "s c #EDED00000000", "d c #EFEF00000000", "f c #ECEC3C3C2C2C", "g c #EDED41413131", "h c #EFEF46463737", "j c #F0F04C4C3D3D", "k c #E7E74D4D4D4D", "l c #EEEE57574949", "z c #EFEF5C5C4E4E", "x c #F1F150504242", "c c #F2F255554747", "v c #F3F359594C4C", "b c #F4F45D5D5151", "n c #F0F060605353", "m c #F2F265655757", "M c #F4F462625454", "N c #F5F566665959", "B c #F2F269695C5C", "V c #F6F669695C5C", "C c #F6F66C6C5F5F", "Z c #F3F36D6D6060", "A c #F4F471716565", "S c #F5F575756969", "D c #F6F678786D6D", "F c #F6F67B7B7171", "G c #F7F77F7F7474", "H c #818181817F7F", "J c #F7F781817777", "K c #F7F784847979", "L c #F8F885857A7A", "P c #F8F885857B7B", "I c gray61", "U c gray62", "Y c gray63", "T c #A2A2A2A2A2A2", "R c #A5A5A5A5A5A5", "E c gray66", "W c #A9A9A9A9A9A9", "Q c gray67", "! c #AEAEAEAEAEAE", "~ c gray69", "^ c gray70", "/ c gray71", "( c gray72", ") c #FFFF8D8D8D8D", "_ c #F5F5A7A7A7A7", "` c #F6F6A9A9A9A9", "' c #F7F7ADADACAC", "] c #F8F8AFAFAFAF", "[ c #F6F6B3B3B3B3", "{ c #F9F9B2B2B2B2", "} c #FAFAB3B3B4B4", "| c #FBFBB6B6B6B6", " . c #FCFCB9B9B9B9", ".. c #FDFDBBBBBBBB", "X. c #FDFDBDBDBDBD", "o. c #FEFEBFBFBFBF", "O. c #C5C5C5C5C5C5", "+. c LightGray", "@. c #D5D5D5D5D5D5", "#. c #D7D7D7D7D7D7", "$. c #FEFEC0C0C0C0", "%. c #FEFECCCCCCCC", "&. c #F1F1F1F1F1F1", "*. c gray95", "=. c #F3F3F3F3F3F3", "-. c #F4F4F4F4F4F4", ";. c #F4F4F5F5F5F5", ":. c gray96", ">. c #F6F6F6F6F6F6", ",. c gray97", "<. c #F8F8F8F8F8F8", "1. c #F9F9F9F9F9F9", "2. c gray98", "3. c #FBFBFBFBFBFB", "4. c #FBFBFCFCFBFB", "5. c gray99", "6. c #FDFDFCFCFDFD", "7. c #FDFDFDFDFDFD", "8. c #FEFEFEFEFEFE", "9. c None", /* pixels */ "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "d d d d p d d p p i i t t t w w ", "d P P K J G F D S A Z B m n z q ", "d P C V N M b v c x j h g f l q ", ") %.$.o.o.....| | ' ' ' ` _ [ k ", ":.8.8.8.3.3.2.2.2.2.,.:.:.-.:.#.", "*.8.8.3.2.2.2.2.,.,.;.;.:.*.;.#.", "*.8.3.8.2.2.2.2.,.,.;.-.-.*.-.+.", "H O./ / ^ ~ ! Q W R T Y U I W % ", " 9 1 < : = & # @ + O o X . % ", " 8 7 6 5 4 3 2 < > ; - * % % ", " ", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.", "9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9." }; springlobby-0.169/src/images/flags/YT.xpm0000600000176000000410000000672212105760300021640 0ustar buildbotwww-data00000000000000/* XPM */ static const char *YT_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 135 2", " c black", ". c #4C4C4242A9A9", "X c #47474747B1B1", "o c #4B4B4D4DB6B6", "O c #4B4B4F4FB5B5", "+ c #62625A5AB3B3", "@ c #62626464BEBE", "# c #D8D83B3B2929", "$ c #D9D93E3E2A2A", "% c #D5D53E3E3434", "& c #DADA42422F2F", "* c #D5D541413737", "= c #D6D642423939", "- c #DEDE4D4D3D3D", "; c #DBDB53534747", ": c #AEAEACACADAD", "> c #B5B5B2B2B2B2", ", c #B5B5B4B4B5B5", "< c #B6B6B5B5B6B6", "1 c #BBBBB8B8B8B8", "2 c #BBBBBABABBBB", "3 c #B5B5B7B7D6D6", "4 c #B2B2B5B5DADA", "5 c #B4B4B6B6DBDB", "6 c #C0C0BDBDBABA", "7 c #E2E292929595", "8 c #E0E098989999", "9 c #E5E598989A9A", "0 c #E6E6ADADAEAE", "q c #FAFAB1B1B1B1", "w c #FEFEB3B3B3B3", "e c #FDFDBFBFBFBF", "r c #FEFEBEBEBEBE", "t c #C6C6C5C5C5C5", "y c #C7C7C5C5C4C4", "u c #C7C7C7C7C6C6", "i c #C9C9C7C7C8C8", "p c #CBCBC9C9C9C9", "a c #CDCDCACAC9C9", "s c #CCCCCACACACA", "d c #CECECDCDCDCD", "f c #CFCFCDCDCDCD", "g c gray81", "h c gray82", "j c #D2D2D1D1D1D1", "k c #D3D3D1D1D1D1", "l c LightGray", "z c #D5D5D5D5D5D5", "x c #D7D7D5D5D5D5", "c c #D7D7D7D7D7D7", "v c #D9D9D7D7D7D7", "b c gray86", "n c gainsboro", "m c #DDDDDDDDDDDD", "M c #DFDFDFDFDFDF", "N c #C4C4C7C7E1E1", "B c #DBDBD8D8EAEA", "V c #DBDBD9D9EAEA", "C c #FBFBC1C1C1C1", "Z c #FCFCC3C3C3C3", "A c #FDFDC6C6C6C6", "S c #E1E1E1E1DFDF", "D c #E1E1E2E2E2E2", "F c #E1E1E3E3E3E3", "G c #E6E6E0E0E1E1", "H c #E6E6E3E3E2E2", "J c #E4E4E4E4E4E4", "K c gray90", "L c #E7E7E6E6E7E7", "P c #E7E7E7E7E7E7", "I c #E6E6EAEAEAEA", "U c #E8E8E7E7E7E7", "Y c #EBEBE7E7E7E7", "T c #EDEDE3E3E3E3", "R c #EFEFE5E5E5E5", "E c #E9E9E8E8E6E6", "W c gray91", "Q c #E9E9E9E9E9E9", "! c #E9E9E9E9EBEB", "~ c #E9E9EBEBE9E9", "^ c #EAEAE9E9E9E9", "/ c gray92", "( c #EBEBEBEBEDED", ") c #ECECE8E8E9E9", "_ c #EDEDEBEBEBEB", "` c #EEEEEAEAEAEA", "' c #EFEFEBEBEBEB", "] c gray93", "[ c #EEEEEEEEEEEE", "{ c #EFEFEFEFEFEF", "} c #EFEFEFEFF0F0", "| c #EBEBF0F0F0F0", " . c #EEEEF0F0F0F0", ".. c #EFEFF0F0F0F0", "X. c #EFEFF1F1F1F1", "o. c #F1F1E9E9E9E9", "O. c #F1F1EFEFEFEF", "+. c #F3F3EFEFEFEF", "@. c #F9F9EEEEEEEE", "#. c #FEFEE8E8E8E8", "$. c #F3F3EFEFF1F1", "%. c gray94", "&. c #F1F1F1F1F1F1", "*. c #F2F2F1F1F2F2", "=. c gray95", "-. c #F2F2F3F3F3F3", ";. c #F3F3F3F3F3F3", ":. c #F5F5F1F1F1F1", ">. c #F5F5F3F3F3F3", ",. c #F4F4F4F4F4F4", "<. c #F4F4F4F4F5F5", "1. c gray96", "2. c #F6F6F6F6F6F6", "3. c #F7F7F6F6F6F6", "4. c #F7F7F7F7F6F6", "5. c gray97", "6. c #F8F8F0F0F0F0", "7. c #F9F9F6F6F6F6", "8. c #FBFBF6F6F6F6", "9. c #FDFDF7F7F7F7", "0. c #FEFEF7F7F7F7", "q. c #FDFDF8F8F7F7", "w. c #F8F8F8F8F8F8", "e. c #F8F8FBFBFBFB", "r. c #FAFAF9F9F8F8", "t. c gray98", "y. c #FBFBFBFBFBFB", "u. c #FCFCF9F9F8F8", "i. c gray99", "p. c #FDFDFDFDFDFD", "a. c #FEFEFCFCFCFC", "s. c #FEFEFDFDFDFD", "d. c #FEFEFEFEFEFE", "f. c gray100", "g. c None", /* pixels */ "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "1.1.1.>.>.$.+.` ` R T Y U U K F ", "1.f.f.#.q r r A A e e q @.e.7.m ", "1.f.f.f.0.0.q.u.0.e.7.+.e.1.7.m ", "1.f.f.{ ] e.N 5 4 3 >.I J 1.1.m ", "1.f.b p s &.@ o o X { 2 1 u 1.c ", "&.f.g O.7.} + V V . ] E E 2 <.c ", "} f.f u 1.&.; * % * Y U > < &.h ", "&.a.u.u &.{ - & $ # S J : ..<.l ", "{ a.1.i e.Y 0 9 7 8 H U < U &.g ", "{ i.t.U P 7.<.......&.m m &.&.g ", "U U I K S m c c h h s f h g g g ", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.", "g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g." }; springlobby-0.169/src/images/flags/ZA.xpm0000600000176000000410000001044712105760300021615 0ustar buildbotwww-data00000000000000/* XPM */ static const char *ZA_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 169 2", " c black", ". c #00002D2D0000", "X c #000039390000", "o c #000045450000", "O c #000065650000", "+ c #000069690000", "@ c #535353535353", "# c #6F6F6F6F6F6F", "$ c #727272727373", "% c #767676767676", "& c #000000008181", "* c #000000008383", "= c #000000008787", "- c #000000008989", "; c #000000008B8B", ": c #000000008F8F", "> c #000000009191", ", c #000000009393", "< c #000000009999", "1 c #000000009B9B", "2 c #000000009D9D", "3 c #00000000B5B5", "4 c #0B0B0B0BC0C0", "5 c #0F0F0F0FC2C2", "6 c #13131313C4C4", "7 c #18181919C6C6", "8 c #1E1E1E1EC7C7", "9 c #23232323C9C9", "0 c #2C2C2C2CCACA", "q c #2F2F2F2FC9C9", "w c #2F2F2F2FCACA", "e c #32323232CCCC", "r c #35353535CDCD", "t c #39393939CFCF", "y c #3B3B3838D2D2", "u c #3D3D3D3DD0D0", "i c #42424242D2D2", "p c #46464646D2D2", "a c #51514F4FD8D8", "s c #63635F5FCBCB", "d c #000085850F0F", "f c #000085851313", "g c #17179D9D3B3B", "h c #1A1A95953434", "j c #1F1F98983838", "k c #25259A9A3D3D", "l c #2A2A9D9D4242", "z c #2929A1A14C4C", "x c #2E2EA3A35050", "c c #3030A0A04848", "v c #3636A3A34D4D", "b c #3232A5A55555", "n c #3434A7A75858", "m c #3737A8A85959", "M c #3737AAAA5A5A", "N c #3B3BA4A45151", "B c #3A3AA8A85959", "V c #3939A8A85C5C", "C c #3B3BABAB5C5C", "Z c #3B3BABAB5D5D", "A c #3C3CABAB5E5E", "S c #3F3FAFAF5F5F", "D c #3E3EABAB6161", "F c #3F3FAAAA6060", "G c #4040AEAE6060", "H c #4040AEAE6464", "J c #4343AEAE6565", "K c #4343AFAF6767", "L c #4747AEAE6565", "P c #4343B0B06565", "I c #4646B1B16565", "U c #4848B1B16969", "Y c #4B4BB3B36D6D", "T c #4B4BBFBF7777", "R c #5252B3B36262", "E c #5353B5B56464", "W c #5050B3B36F6F", "Q c #5151B4B46D6D", "! c #5858B7B76C6C", "~ c #5454B7B77676", "^ c #5D5DB7B77777", "/ c #5C5CB9B97979", "( c #7272BABA5D5D", ") c #6E6EBCBC6060", "_ c #6161BDBD7F7F", "` c #6666BEBE7B7B", "' c #6D6DBFBF7272", "] c #7373BBBB6767", "[ c #5C5CC0C07E7E", "{ c #7777C9C98C8C", "} c #7B7BC6C69090", "| c #7B7BC8C89494", " . c #E9E900000000", ".. c #EBEB00000000", "X. c #EDED00000000", "o. c #EFEF00000000", "O. c #F1F100000000", "+. c #F3F300000000", "@. c #F5F500000000", "#. c #F7F700000000", "$. c #F9F900000000", "%. c #FBFB00000000", "&. c #FDFD00000000", "*. c #F3F327272727", "=. c #F6F62C2C2C2C", "-. c #F7F731313131", ";. c #F8F837373737", ":. c #F9F93C3C3D3D", ">. c #F7F749494949", ",. c #F7F74E4E4E4E", "<. c #FAFA42424242", "1. c #FBFB47474747", "2. c #F8F853535353", "3. c #F9F957575757", "4. c #FAFA5C5C5C5C", "5. c #E7E769696B6B", "6. c #FBFB60606060", "7. c #FCFC65656565", "8. c #FCFC67676B6B", "9. c #FCFC69696969", "0. c #FDFD6D6D6D6D", "q. c #FDFD70707272", "w. c #9F9F83830000", "e. c #B3B39B9B0000", "r. c #8D8D8D8D5656", "t. c #999995955555", "y. c #8484BBBB5A5A", "u. c #A2A29E9E5E5E", "i. c #BEBEB6B67070", "p. c #8181C3C30000", "a. c #9D9DCDCD0000", "s. c #DCDCD4D45454", "d. c #C9C9C1C17E7E", "f. c #E2E2DBDB5E5E", "g. c #E9E9DBDB5555", "h. c #E6E6E3E35656", "j. c #EAEAE8E86868", "k. c #E5E5ECEC7474", "l. c #88888B8BDDDD", "z. c #85858181E4E4", "x. c #9595ADADCBCB", "c. c #B0B0AEAEE6E6", "v. c #B3B3B0B0E8E8", "b. c #B5B5B2B2E9E9", "n. c #B7B7B4B4EAEA", "m. c #BABAB7B7EBEB", "M. c #BCBCB9B9EAEA", "N. c #9292D8D8ABAB", "B. c #ADADDCDCB9B9", "V. c #F8F8A1A1A0A0", "C. c #F9F9ABABACAC", "Z. c #F5F5B5B5B6B6", "A. c #F6F6B7B7B8B8", "S. c #F7F7BABABABA", "D. c #F8F8BCBCBDBD", "F. c #F9F9BEBEBFBF", "G. c #F6F6BEBEC0C0", "H. c #E9E9F2F28787", "J. c #D9D9D1D1CBCB", "K. c #C4C4C3C3EEEE", "L. c #C4C4E5E5D5D5", "P. c #CDCDE3E3DBDB", "I. c #CDCDE4E4D8D8", "U. c #D3D3EBEBDFDF", "Y. c #D8D8E6E6E3E3", "T. c #FAFAC9C9CACA", "R. c #E4E4EEEEE8E8", "E. c #E8E8EBEBE4E4", "W. c None", /* pixels */ "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.", "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.", "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.", "f d T J.*.&.&.&.%.%.#.#.+.+.X.X.", "p.| } N.R.C.q.0.9.7.4.4.3.2.,...", "e.H.` / [ U.V.8.1.<.:.;.-.=.>...", " d.j.' ~ Q L.E.T.G.D.S.A.Z.G.5.", " % u.f.] ! I P Y Y J H V n Y o ", " $ @ r.g.( P Z v c l k j h N . ", " # t.s.y.E V M G A B b z z L X ", " i.h.) H B I.Y.K.m.n.b.b.c.M.s ", "w.k.E H S B.l.y 9 8 7 6 5 4 w * ", "a._ ^ { P.z.a p p t y r e w 0 * ", "+ O g x.3 2 2 < > > : - * - * - ", "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.", "W.W.W.W.W.W.W.W.W.W.W.W.W.W.W.W." }; springlobby-0.169/src/images/flags/ZM.xpm0000600000176000000410000000742712105760300021635 0ustar buildbotwww-data00000000000000/* XPM */ static const char *ZM_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 145 2", " c black", ". c #10100F0F0B0B", "X c #151514141010", "o c #1A1A19191414", "O c #1F1F1D1D1A1A", "+ c #000033330000", "@ c #000039390000", "# c #00003B3B0000", "$ c #00003D3D0000", "% c #111127270000", "& c #24240F0F0E0E", "* c #292914141414", "= c #2E2E19191919", "- c #33331F1F1F1F", "; c #232323232020", ": c #373725252525", "> c #343433332F2F", ", c #3E3E34343232", "< c #000041410000", "1 c #000047470000", "2 c #00004D4D0000", "3 c #000053530000", "4 c #000059590000", "5 c #00005D5D0000", "6 c #000063630000", "7 c #000069690000", "8 c #00006D6D0000", "9 c #00006F6F0000", "0 c #000073730000", "q c #000075750000", "w c #000077770000", "e c #000079790000", "r c #00007B7B0000", "t c #00007D7D0000", "y c #00007F7F0000", "u c #03037F7F0303", "i c #030381810303", "p c #49499F9F4949", "a c #4D4DA1A14D4D", "s c #4E4EA2A24E4E", "d c #5050A2A25050", "f c #5252A4A45252", "g c #5353A5A55353", "h c #5454A5A55454", "j c #5656A6A65656", "k c #5757A7A75757", "l c #5757A8A85757", "z c #5858A8A85858", "x c #5959A8A85959", "c c #5B5BA9A95B5B", "v c #5B5BAAAA5B5B", "b c #5C5CAAAA5C5C", "n c #5D5DABAB5D5D", "m c #5E5EABAB5D5D", "M c #5E5EABAB5E5E", "N c #5E5EAEAE5D5D", "B c #5959B4B46666", "V c #6060ACAC6060", "C c #6060ADAD6060", "Z c #6161ADAD6161", "A c #6262ACAC6262", "S c #6262AEAE6262", "D c #6464AFAF6464", "F c #6565AEAE6565", "G c #6565AFAF6464", "H c #6868AFAF6868", "J c #6565B0B06565", "K c #6666B0B06565", "L c #6767B0B06767", "P c #6767B1B16767", "I c #6969B0B06969", "U c #6969B1B16969", "Y c #6969B2B26969", "T c #6A6AB2B26A6A", "R c #6A6AB3B36A6A", "E c #6B6BB3B36C6C", "W c #6D6DB2B26D6D", "Q c #6D6DB4B46D6D", "! c #6D6DB5B56D6D", "~ c #6E6EB5B56E6E", "^ c #6E6EB6B66E6E", "/ c #6F6FB6B66F6F", "( c #7878AEAE6868", ") c #7171B4B47171", "_ c #7171B7B77171", "` c #7272B7B77272", "' c #7373B7B77272", "] c #7575B7B77575", "[ c #7676B9B97676", "{ c #7676BABA7676", "} c #7979B9B97979", "| c #7979BCBC7979", " . c #7979BCBC7A7A", ".. c #7A7ABCBC7A7A", "X. c #7C7CBDBD7C7C", "o. c #7D7DBCBC7D7D", "O. c #7C7CBEBE7C7C", "+. c #7F7FBFBF7F7F", "@. c #C5C500000000", "#. c #CFCF00000000", "$. c #D7D700000000", "%. c #DDDD00000000", "&. c #DFDF00000000", "*. c #E3E300000000", "=. c #E5E500000000", "-. c #E7E700000000", ";. c #EDED13131313", ":. c #EEEE19191919", ">. c #EFEF1F1F1F1F", ",. c #E4E424241C1C", "<. c #E6E629292222", "1. c #E7E72F2F2828", "2. c #E9E934342E2E", "3. c #EFEF35353535", "4. c #EBEB3A3A3333", "5. c #F1F125252525", "6. c #F5F52B2B2B2B", "7. c #E8E842423C3C", "8. c #EBEB7E7E3535", "9. c #EDED7F7F3737", "0. c #9C9CB0B07575", "q. c #E7E78C8C3F3F", "w. c #EDED83833B3B", "e. c #EDED85853F3F", "r. c #E8E888883939", "t. c #DDDD9F9F5B5B", "y. c #EEEE88884343", "u. c #E8E899995757", "i. c #F1F18A8A4747", "p. c #E3E3A2A25F5F", "a. c #E8E8A4A46565", "s. c #8080BEBE8080", "d. c #8484C0C08484", "f. c #8787C2C28787", "g. c #8888C3C38888", "h. c #8A8AC3C38A8A", "j. c #8B8BC4C48B8B", "k. c #8D8DC5C58D8D", "l. c #8E8EC6C68F8F", "z. c #8F8FC7C78F8F", "x. c #9191C8C89191", "c. c #9494C8C89494", "v. c #9494C9C99494", "b. c #9595CACA9595", "n. c None", /* pixels */ "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "i i i i u u e w 0 8 7 6 5 4 3 2 ", "i b.b.b.x.z.z.g.g.d.0.a.p.t.u.% ", "i b.+.O...] ' / E J B N q.r.( < ", "u b.....] ' / R J S M x h d H # ", "u z.| ] ' / R J S M 4.6.: ; i.-.", "u z.] ) / I J S M x 2.5.- O y.-.", "w g.' / I F N M l g 1.>.= o e.*.", "0 g./ I J S x x g a <.:.* X w.&.", "8 d.I S S x h g a p ,.;.& . 9.&.", "7 +.O.| ] ) W I F S 7.3., > 8.&.", "6 5 4 3 2 1 < $ # + @.$. #.&.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.", "n.n.n.n.n.n.n.n.n.n.n.n.n.n.n.n." }; springlobby-0.169/src/images/flags/ZW.xpm0000600000176000000410000001030312105760300021632 0ustar buildbotwww-data00000000000000/* XPM */ static const char *ZW_xpm[] = { /* columns rows colors chars-per-pixel */ "16 16 167 2", " c black", ". c #000001010000", "X c #00001F1F0000", "o c gray10", "O c gray12", "+ c #000021210000", "@ c #000025250000", "# c #000029290000", "$ c #00002B2B0000", "% c #00002D2D0000", "& c #000033330000", "* c #000037370000", "= c #000039390000", "- c #00003D3D0000", "; c #252525252525", ": c #2A2A2B2B2B2B", "> c gray19", ", c gray21", "< c gray23", "1 c #000041410000", "2 c #000047470000", "3 c #00004D4D0000", "4 c #000053530000", "5 c #000059590000", "6 c #00005D5D0000", "7 c #00005F5F0000", "8 c #000063630000", "9 c #000069690000", "0 c #00006D6D0000", "q c #00006F6F0000", "w c #000073730000", "e c #000075750000", "r c #000079790000", "t c #00007D7D0000", "y c #00007F7F0000", "u c #5F5F00000000", "i c #404042424242", "p c #000081810000", "a c #000085850000", "s c #050593930000", "d c #898900000000", "f c #ADAD00000000", "g c #B9B900000000", "h c #B0B02F2F2020", "j c #B3B334342525", "k c #B5B539392B2B", "l c #B8B83F3F3030", "z c #BBBB44443636", "x c #BBBB4C4C3F3F", "c c #BCBC49493C3C", "v c #9C9C5C5C5656", "b c #969663634E4E", "n c #A1A157574646", "m c #BEBE4E4E4141", "M c #A4A477775D5D", "N c #C5C536361414", "B c #C7C73A3A1919", "V c #C9C93F3F1F1F", "C c #D7D73C3C1010", "Z c #D8D840401414", "A c #D9D944441919", "S c #DBDB49491F1F", "D c #CACA43432424", "F c #CCCC48482A2A", "G c #CECE4D4D2F2F", "H c #CDCD52523636", "J c #DDDD4E4E2424", "K c #DEDE52522A2A", "L c #DEDE58582626", "P c #D0D052523535", "I c #D3D357573A3A", "U c #DDDD58583232", "Y c #DDDD5A5A3A3A", "T c #E0E055552F2F", "R c #E0E05C5C2B2B", "E c #E1E15B5B3434", "W c #E1E161613131", "Q c #E3E365653636", "! c #E4E469693C3C", "~ c #C1C153534646", "^ c #E2E26F6F4444", "/ c #E5E56D6D4242", "( c #E7E772724747", ") c #E8E876764B4B", "_ c #E6E675755151", "` c #8A8AA9A96262", "' c #9595B3B37E7E", "] c #A7A7A5A54B4B", "[ c #B9B9B7B76262", "{ c #8686C3C33131", "} c #8787C4C43434", "| c #8A8AC6C63737", " . c #8C8CC7C73B3B", ".. c #8E8EC8C83F3F", "X. c #9090CBCB4242", "o. c #9494CDCD4646", "O. c #9797CECE4B4B", "+. c #9494D2D24E4E", "@. c #9999D0D05050", "#. c #9898D3D35353", "$. c #9B9BD5D55757", "%. c #9C9CD1D15454", "&. c #9F9FD3D35959", "*. c #9E9ED7D75C5C", "=. c #A2A2D4D45D5D", "-. c #A1A1D8D86060", ";. c #A4A4DADA6565", ":. c #A7A7DCDC6969", ">. c #A9A9DDDD6D6D", ",. c #ABABDEDE7171", "<. c #ADADDFDF7474", "1. c #AFAFE0E07777", "2. c #B2B2E1E17979", "3. c #E7E787876F6F", "4. c #EDED93937979", "5. c #EEEE97977D7D", "6. c #EEEE97977E7E", "7. c #F2F2BDBD5E5E", "8. c #DFDFDDDD0000", "9. c #E9E9E9E90000", "0. c #F1F1F0F00B0B", "q. c #F1F1F1F10E0E", "w. c #F2F2F1F11313", "e. c #F3F3F2F21919", "r. c #F4F4F3F31E1E", "t. c #F5F5F4F42323", "y. c #F2F2F1F12F2F", "u. c #F6F6F5F52929", "i. c #F6F6F6F62C2C", "p. c #F7F7F7F72E2E", "a. c #F7F7F7F73131", "s. c #F9F9F4F43A3A", "d. c #F8F8F8F83434", "f. c #F8F8F8F83737", "g. c #F9F9F9F93D3D", "h. c #F7F7F7F74949", "j. c #FAFAFAFA4242", "k. c #FBFBFBFB4747", "l. c #FCFCFBFB4F4F", "z. c #FCFCFCFC4C4C", "x. c #FDFDFDFD5151", "c. c #FDFDFCFC5353", "v. c #FDFDFDFD5454", "b. c #FEFEFCFC5959", "n. c #FEFEFDFD5858", "m. c #F1F1A2A28C8C", "M. c #F1F1A6A69090", "N. c #F2F2B9B9A9A9", "B. c #F7F7D6D68F8F", "V. c #EDEDC5C5BDBD", "C. c #FEFEFDFD8484", "Z. c #D7D7E1E1D7D7", "A. c #E1E1E7E7E1E1", "S. c #EFEFEFEFEFEF", "D. c #EFEFF2F2F0F0", "F. c #F1F1ECECE8E8", "G. c #F1F1EFEFF1F1", "H. c #F4F4F3F3F4F4", "J. c #F5F5F3F3F5F5", "K. c #F5F5F4F4F0F0", "L. c gray96", "P. c gray97", "I. c #FAFAFAFAF9F9", "U. c #FFFFFAFAFCFC", "Y. c #FCFCFCFCFBFB", "T. c gray99", "R. c None", /* pixels */ "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.", "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.", "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.", "Z.* a p t t r e e 0 9 8 6 5 4 5 ", "J.T.' 2.1.<.,.>.:.;.-.*.$.#.+.s ", "L.U.Y.[ n.v.x.z.k.j.g.f.a.i.h.9.", "L.C.M.Y.M _ ) ( / ! Q W R L ^ g ", "3.B.n.6.4.v ~ m c z l k j h x u ", "V.m.x.l.N.P.i < , > : ; O o < ", "G.6.l.7.L.n I P G F D V B N H d ", "S.Y.I.F.b Y E T K J S A Z C U f ", "S.U.K.] s.d.p.u.t.r.e.w.q.0.y.8.", "L.D.` =.&.%.#.O.o.X... .| } { 0 ", "A. 8 4 3 2 - - = & % # @ + X % ", "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.", "R.R.R.R.R.R.R.R.R.R.R.R.R.R.R.R." }; springlobby-0.169/src/images/flags/mkflaghead.sh0000700000176000000410000000070012105760300023164 0ustar buildbotwww-data00000000000000#!/usr/bin/env bash # This script autogenerates a flagimagedata.cpp file echo '// this header file is automatically generated with a script' for img in *.xpm ; do echo '#include "images/flags/'${img}'"' done echo echo 'const char* flag_str[] = {' for img in *.xpm ; do echo '"'${img%%.xpm}'",' done echo '0' echo '};' echo echo 'const char* const* flag_xpm[] = {' for img in *.xpm ; do echo ${img/./_}',' done echo '0' echo '};' echo springlobby-0.169/src/images/floppy.png.h0000700000176000000410000001321012105760300021716 0ustar buildbotwww-data00000000000000/* floppy.png - 890 bytes */ static const unsigned char floppy_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a, 0xf4, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64, 0x88, 0x00, 0x00, 0x03, 0x31, 0x49, 0x44, 0x41, 0x54, 0x58, 0x85, 0xe5, 0x97, 0x3f, 0x6c, 0x1c, 0x45, 0x14, 0x87, 0xbf, 0xf5, 0x2e, 0xf6, 0x71, 0x71, 0x2e, 0x98, 0x9c, 0xe5, 0x58, 0x8e, 0xa5, 0xb8, 0x40, 0xa4, 0xb0, 0x85, 0x43, 0x99, 0x82, 0x3f, 0x12, 0x25, 0x12, 0x0e, 0x71, 0x88, 0x68, 0x50, 0x0a, 0x0a, 0x28, 0x68, 0x88, 0x84, 0x52, 0x45, 0x14, 0xd0, 0x41, 0x49, 0x81, 0x21, 0x15, 0x16, 0x34, 0x14, 0x6e, 0x40, 0x02, 0x04, 0x42, 0xb2, 0x44, 0x01, 0x34, 0x28, 0x12, 0x15, 0xc8, 0x8a, 0x1d, 0xdb, 0x42, 0x36, 0x45, 0x74, 0x9c, 0x8f, 0xbb, 0x9d, 0x79, 0x8f, 0x62, 0x77, 0xf6, 0x66, 0x7d, 0x77, 0x7b, 0x8e, 0xbc, 0xae, 0x78, 0x92, 0xe5, 0xd9, 0xd9, 0x99, 0x79, 0xbf, 0xf9, 0xe6, 0x37, 0x3b, 0x37, 0xf0, 0x7f, 0x8f, 0xc0, 0x15, 0xe6, 0x9f, 0x7d, 0xe3, 0xa3, 0x76, 0xbb, 0xf5, 0x26, 0xda, 0xad, 0x3b, 0xa9, 0x78, 0x64, 0xb4, 0xf2, 0xe5, 0xef, 0xeb, 0x1f, 0x5f, 0x03, 0x88, 0x5c, 0xa5, 0xe9, 0xc4, 0x37, 0x56, 0x56, 0x3e, 0x08, 0x46, 0xa2, 0x08, 0x51, 0x65, 0x7e, 0xfd, 0x0e, 0xa8, 0xa2, 0x22, 0xa0, 0xea, 0xfd, 0x09, 0xea, 0xca, 0xde, 0x3b, 0x4d, 0xdf, 0x65, 0xcf, 0x7e, 0x3f, 0x60, 0xfd, 0x99, 0xb7, 0x50, 0x14, 0x11, 0xe5, 0xf6, 0xad, 0x77, 0x97, 0x5d, 0xde, 0x4c, 0x80, 0x06, 0x12, 0x88, 0xc2, 0x8d, 0x57, 0x5e, 0xe4, 0xe5, 0x9b, 0x9f, 0x52, 0x7f, 0xff, 0x9d, 0xac, 0xf3, 0xb1, 0x23, 0x08, 0xf8, 0xee, 0xd4, 0x55, 0x54, 0x95, 0xe7, 0x16, 0xa7, 0x72, 0xaf, 0x22, 0xff, 0xc1, 0x8a, 0x70, 0xe5, 0xed, 0x4f, 0x10, 0x11, 0xe6, 0x37, 0xa5, 0x9c, 0xe4, 0x69, 0xc8, 0x87, 0x3f, 0x81, 0x2a, 0x62, 0xf3, 0xe3, 0xe6, 0x04, 0x88, 0x28, 0xe2, 0xd0, 0x95, 0x1c, 0x2a, 0xc9, 0xd2, 0x59, 0xc9, 0x8f, 0xdd, 0x43, 0x40, 0xad, 0xa0, 0x74, 0x1b, 0x6d, 0x6c, 0x6c, 0x1c, 0x2b, 0xf1, 0xdc, 0xdc, 0x1c, 0x40, 0x36, 0x31, 0x5b, 0x48, 0xc0, 0xa6, 0x04, 0x3c, 0x01, 0x6e, 0x80, 0xe3, 0x46, 0x46, 0xc0, 0xda, 0xc1, 0x02, 0xac, 0x48, 0xd2, 0x90, 0xf2, 0x97, 0xe0, 0x48, 0x04, 0xac, 0x95, 0x1e, 0x02, 0x65, 0x2d, 0x41, 0x97, 0xc0, 0x10, 0x13, 0xba, 0x86, 0x87, 0x07, 0x38, 0x6e, 0x88, 0x13, 0x60, 0x06, 0x08, 0x50, 0x3c, 0x02, 0x27, 0xb8, 0x0b, 0x8c, 0x0c, 0x22, 0xa0, 0x9e, 0x07, 0xf4, 0x64, 0x76, 0x81, 0xaa, 0x22, 0x85, 0x26, 0xec, 0x43, 0xa0, 0xec, 0x5d, 0x60, 0x0a, 0x4d, 0xd8, 0xc7, 0x03, 0x65, 0x45, 0xd7, 0x03, 0x85, 0x04, 0xec, 0xc9, 0x7b, 0x60, 0xd8, 0x36, 0x74, 0x0d, 0x5f, 0x7b, 0xef, 0x7b, 0x14, 0xb2, 0x93, 0x2f, 0xfb, 0x0f, 0xd9, 0xb3, 0x23, 0xe5, 0xb7, 0x49, 0xaa, 0xf4, 0x50, 0x3f, 0xd0, 0xb4, 0xae, 0xd0, 0x03, 0xe2, 0x79, 0xc0, 0x0d, 0x2e, 0xfb, 0xbf, 0xd1, 0xd9, 0xfd, 0x19, 0x95, 0x7c, 0xc7, 0x61, 0x31, 0x32, 0x12, 0x12, 0x9c, 0x5d, 0xc4, 0x8c, 0x3f, 0x99, 0x9c, 0xca, 0x24, 0x82, 0x0a, 0x09, 0x18, 0x8f, 0x80, 0x9b, 0x6d, 0x67, 0xf7, 0x17, 0xae, 0x2c, 0xbd, 0x44, 0xb5, 0x5a, 0x25, 0x0c, 0x43, 0xa2, 0x28, 0x22, 0x0c, 0xc3, 0xbe, 0x65, 0x6b, 0x2d, 0x71, 0x1c, 0x63, 0x8c, 0xa1, 0xd1, 0x68, 0xf0, 0xd9, 0xea, 0xe7, 0x48, 0xf5, 0x89, 0x1c, 0x01, 0x33, 0xd8, 0x03, 0x9a, 0xdb, 0x05, 0x19, 0x3a, 0x31, 0xd4, 0x6a, 0x35, 0xa2, 0x28, 0xe2, 0xab, 0xaf, 0xbf, 0x61, 0x77, 0x67, 0x0b, 0x80, 0x99, 0xd9, 0x0b, 0xbc, 0x7a, 0x7d, 0x99, 0x30, 0x0c, 0x31, 0xc6, 0xd0, 0x6a, 0xb5, 0xb2, 0xe4, 0x71, 0x1c, 0x27, 0xa6, 0x13, 0x93, 0x4e, 0xa8, 0x4b, 0x60, 0xc8, 0x59, 0x60, 0xf3, 0x04, 0x52, 0x2f, 0x56, 0x2a, 0x15, 0xc2, 0x30, 0x64, 0x77, 0x67, 0x8b, 0xd6, 0xe4, 0x12, 0x00, 0xdb, 0x5b, 0x6b, 0x58, 0x6b, 0x69, 0xb7, 0xdb, 0xb9, 0xc4, 0x7e, 0x19, 0xdc, 0x19, 0x90, 0xf8, 0x44, 0x29, 0xf8, 0x12, 0x02, 0x3d, 0x04, 0x9c, 0x80, 0xb1, 0xb1, 0x31, 0xa2, 0x28, 0xd7, 0x14, 0x80, 0x83, 0x83, 0x83, 0x81, 0xc9, 0x8d, 0x31, 0x09, 0x57, 0x47, 0x40, 0x15, 0x50, 0xe2, 0xa2, 0x6d, 0x68, 0xcc, 0x60, 0x02, 0x87, 0xd1, 0x01, 0x34, 0x9b, 0xcd, 0x5c, 0xc2, 0x23, 0x11, 0x28, 0xfe, 0x12, 0x6a, 0x0f, 0x81, 0x00, 0xb2, 0xf5, 0x2d, 0x83, 0xc0, 0x10, 0x01, 0x36, 0xf9, 0xdd, 0x96, 0x89, 0x48, 0x04, 0xb8, 0x99, 0x0e, 0x12, 0xf0, 0x70, 0x1e, 0xe8, 0x2f, 0x20, 0x52, 0xd1, 0x47, 0xef, 0x6f, 0x6e, 0x33, 0x3b, 0x55, 0xe7, 0xde, 0xce, 0x83, 0xf4, 0xd3, 0x09, 0x23, 0x5e, 0xa2, 0xb3, 0xf5, 0x73, 0xfc, 0xbd, 0xb7, 0x06, 0xc0, 0x63, 0x13, 0x75, 0x9a, 0xcd, 0x66, 0xcf, 0xac, 0x7d, 0x11, 0x3d, 0x04, 0x34, 0xe7, 0x81, 0xd3, 0x40, 0xc3, 0x09, 0x38, 0xf3, 0xcf, 0xde, 0xc6, 0xd5, 0xf5, 0x1f, 0xbe, 0x5d, 0xbd, 0xfc, 0xfc, 0x0b, 0x95, 0x8b, 0x17, 0xa6, 0x03, 0x15, 0x41, 0x14, 0xfe, 0xd8, 0xec, 0x12, 0x78, 0xfa, 0xd2, 0x02, 0x71, 0x7c, 0x31, 0x4b, 0x34, 0x88, 0x80, 0x78, 0x47, 0xee, 0xf4, 0x64, 0x2d, 0xf3, 0x95, 0x88, 0xf8, 0x24, 0x27, 0x00, 0x09, 0x80, 0x10, 0xa8, 0x03, 0xf5, 0xfa, 0xf9, 0xc5, 0xcb, 0x13, 0x33, 0x4f, 0xad, 0xf8, 0x88, 0x16, 0x66, 0x1a, 0x3d, 0xe8, 0x1f, 0x26, 0xee, 0x6e, 0x9f, 0xee, 0xa9, 0x13, 0xdb, 0xf9, 0xf1, 0xcf, 0x5f, 0xbf, 0x78, 0x1d, 0xf8, 0xcb, 0x5d, 0xc3, 0x6a, 0xc0, 0xe3, 0xc0, 0x19, 0x60, 0x1c, 0x18, 0x25, 0xa1, 0x5f, 0x66, 0x74, 0xd2, 0x31, 0xff, 0x05, 0x1a, 0xc0, 0x3e, 0xb0, 0xe7, 0xdf, 0x03, 0x47, 0x49, 0xd6, 0xa5, 0x9a, 0x96, 0xcb, 0x0e, 0xc7, 0xbe, 0x05, 0x3c, 0x00, 0xda, 0x40, 0xe1, 0x45, 0xb4, 0xec, 0x4b, 0x6a, 0xdf, 0x33, 0xfe, 0x3f, 0xc8, 0xb0, 0x73, 0x9a, 0xcf, 0x8f, 0xe1, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/floppy_icon.png.h0000600000176000000410000001322212105760300022730 0ustar buildbotwww-data00000000000000/* floppy_icon.png - 890 bytes */ static const unsigned char floppy_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a, 0xf4, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64, 0x88, 0x00, 0x00, 0x03, 0x31, 0x49, 0x44, 0x41, 0x54, 0x58, 0x85, 0xe5, 0x97, 0x3f, 0x6c, 0x1c, 0x45, 0x14, 0x87, 0xbf, 0xf5, 0x2e, 0xf6, 0x71, 0x71, 0x2e, 0x98, 0x9c, 0xe5, 0x58, 0x8e, 0xa5, 0xb8, 0x40, 0xa4, 0xb0, 0x85, 0x43, 0x99, 0x82, 0x3f, 0x12, 0x25, 0x12, 0x0e, 0x71, 0x88, 0x68, 0x50, 0x0a, 0x0a, 0x28, 0x68, 0x88, 0x84, 0x52, 0x45, 0x14, 0xd0, 0x41, 0x49, 0x81, 0x21, 0x15, 0x16, 0x34, 0x14, 0x6e, 0x40, 0x02, 0x04, 0x42, 0xb2, 0x44, 0x01, 0x34, 0x28, 0x12, 0x15, 0xc8, 0x8a, 0x1d, 0xdb, 0x42, 0x36, 0x45, 0x74, 0x9c, 0x8f, 0xbb, 0x9d, 0x79, 0x8f, 0x62, 0x77, 0xf6, 0x66, 0x7d, 0x77, 0x7b, 0x8e, 0xbc, 0xae, 0x78, 0x92, 0xe5, 0xd9, 0xd9, 0x99, 0x79, 0xbf, 0xf9, 0xe6, 0x37, 0x3b, 0x37, 0xf0, 0x7f, 0x8f, 0xc0, 0x15, 0xe6, 0x9f, 0x7d, 0xe3, 0xa3, 0x76, 0xbb, 0xf5, 0x26, 0xda, 0xad, 0x3b, 0xa9, 0x78, 0x64, 0xb4, 0xf2, 0xe5, 0xef, 0xeb, 0x1f, 0x5f, 0x03, 0x88, 0x5c, 0xa5, 0xe9, 0xc4, 0x37, 0x56, 0x56, 0x3e, 0x08, 0x46, 0xa2, 0x08, 0x51, 0x65, 0x7e, 0xfd, 0x0e, 0xa8, 0xa2, 0x22, 0xa0, 0xea, 0xfd, 0x09, 0xea, 0xca, 0xde, 0x3b, 0x4d, 0xdf, 0x65, 0xcf, 0x7e, 0x3f, 0x60, 0xfd, 0x99, 0xb7, 0x50, 0x14, 0x11, 0xe5, 0xf6, 0xad, 0x77, 0x97, 0x5d, 0xde, 0x4c, 0x80, 0x06, 0x12, 0x88, 0xc2, 0x8d, 0x57, 0x5e, 0xe4, 0xe5, 0x9b, 0x9f, 0x52, 0x7f, 0xff, 0x9d, 0xac, 0xf3, 0xb1, 0x23, 0x08, 0xf8, 0xee, 0xd4, 0x55, 0x54, 0x95, 0xe7, 0x16, 0xa7, 0x72, 0xaf, 0x22, 0xff, 0xc1, 0x8a, 0x70, 0xe5, 0xed, 0x4f, 0x10, 0x11, 0xe6, 0x37, 0xa5, 0x9c, 0xe4, 0x69, 0xc8, 0x87, 0x3f, 0x81, 0x2a, 0x62, 0xf3, 0xe3, 0xe6, 0x04, 0x88, 0x28, 0xe2, 0xd0, 0x95, 0x1c, 0x2a, 0xc9, 0xd2, 0x59, 0xc9, 0x8f, 0xdd, 0x43, 0x40, 0xad, 0xa0, 0x74, 0x1b, 0x6d, 0x6c, 0x6c, 0x1c, 0x2b, 0xf1, 0xdc, 0xdc, 0x1c, 0x40, 0x36, 0x31, 0x5b, 0x48, 0xc0, 0xa6, 0x04, 0x3c, 0x01, 0x6e, 0x80, 0xe3, 0x46, 0x46, 0xc0, 0xda, 0xc1, 0x02, 0xac, 0x48, 0xd2, 0x90, 0xf2, 0x97, 0xe0, 0x48, 0x04, 0xac, 0x95, 0x1e, 0x02, 0x65, 0x2d, 0x41, 0x97, 0xc0, 0x10, 0x13, 0xba, 0x86, 0x87, 0x07, 0x38, 0x6e, 0x88, 0x13, 0x60, 0x06, 0x08, 0x50, 0x3c, 0x02, 0x27, 0xb8, 0x0b, 0x8c, 0x0c, 0x22, 0xa0, 0x9e, 0x07, 0xf4, 0x64, 0x76, 0x81, 0xaa, 0x22, 0x85, 0x26, 0xec, 0x43, 0xa0, 0xec, 0x5d, 0x60, 0x0a, 0x4d, 0xd8, 0xc7, 0x03, 0x65, 0x45, 0xd7, 0x03, 0x85, 0x04, 0xec, 0xc9, 0x7b, 0x60, 0xd8, 0x36, 0x74, 0x0d, 0x5f, 0x7b, 0xef, 0x7b, 0x14, 0xb2, 0x93, 0x2f, 0xfb, 0x0f, 0xd9, 0xb3, 0x23, 0xe5, 0xb7, 0x49, 0xaa, 0xf4, 0x50, 0x3f, 0xd0, 0xb4, 0xae, 0xd0, 0x03, 0xe2, 0x79, 0xc0, 0x0d, 0x2e, 0xfb, 0xbf, 0xd1, 0xd9, 0xfd, 0x19, 0x95, 0x7c, 0xc7, 0x61, 0x31, 0x32, 0x12, 0x12, 0x9c, 0x5d, 0xc4, 0x8c, 0x3f, 0x99, 0x9c, 0xca, 0x24, 0x82, 0x0a, 0x09, 0x18, 0x8f, 0x80, 0x9b, 0x6d, 0x67, 0xf7, 0x17, 0xae, 0x2c, 0xbd, 0x44, 0xb5, 0x5a, 0x25, 0x0c, 0x43, 0xa2, 0x28, 0x22, 0x0c, 0xc3, 0xbe, 0x65, 0x6b, 0x2d, 0x71, 0x1c, 0x63, 0x8c, 0xa1, 0xd1, 0x68, 0xf0, 0xd9, 0xea, 0xe7, 0x48, 0xf5, 0x89, 0x1c, 0x01, 0x33, 0xd8, 0x03, 0x9a, 0xdb, 0x05, 0x19, 0x3a, 0x31, 0xd4, 0x6a, 0x35, 0xa2, 0x28, 0xe2, 0xab, 0xaf, 0xbf, 0x61, 0x77, 0x67, 0x0b, 0x80, 0x99, 0xd9, 0x0b, 0xbc, 0x7a, 0x7d, 0x99, 0x30, 0x0c, 0x31, 0xc6, 0xd0, 0x6a, 0xb5, 0xb2, 0xe4, 0x71, 0x1c, 0x27, 0xa6, 0x13, 0x93, 0x4e, 0xa8, 0x4b, 0x60, 0xc8, 0x59, 0x60, 0xf3, 0x04, 0x52, 0x2f, 0x56, 0x2a, 0x15, 0xc2, 0x30, 0x64, 0x77, 0x67, 0x8b, 0xd6, 0xe4, 0x12, 0x00, 0xdb, 0x5b, 0x6b, 0x58, 0x6b, 0x69, 0xb7, 0xdb, 0xb9, 0xc4, 0x7e, 0x19, 0xdc, 0x19, 0x90, 0xf8, 0x44, 0x29, 0xf8, 0x12, 0x02, 0x3d, 0x04, 0x9c, 0x80, 0xb1, 0xb1, 0x31, 0xa2, 0x28, 0xd7, 0x14, 0x80, 0x83, 0x83, 0x83, 0x81, 0xc9, 0x8d, 0x31, 0x09, 0x57, 0x47, 0x40, 0x15, 0x50, 0xe2, 0xa2, 0x6d, 0x68, 0xcc, 0x60, 0x02, 0x87, 0xd1, 0x01, 0x34, 0x9b, 0xcd, 0x5c, 0xc2, 0x23, 0x11, 0x28, 0xfe, 0x12, 0x6a, 0x0f, 0x81, 0x00, 0xb2, 0xf5, 0x2d, 0x83, 0xc0, 0x10, 0x01, 0x36, 0xf9, 0xdd, 0x96, 0x89, 0x48, 0x04, 0xb8, 0x99, 0x0e, 0x12, 0xf0, 0x70, 0x1e, 0xe8, 0x2f, 0x20, 0x52, 0xd1, 0x47, 0xef, 0x6f, 0x6e, 0x33, 0x3b, 0x55, 0xe7, 0xde, 0xce, 0x83, 0xf4, 0xd3, 0x09, 0x23, 0x5e, 0xa2, 0xb3, 0xf5, 0x73, 0xfc, 0xbd, 0xb7, 0x06, 0xc0, 0x63, 0x13, 0x75, 0x9a, 0xcd, 0x66, 0xcf, 0xac, 0x7d, 0x11, 0x3d, 0x04, 0x34, 0xe7, 0x81, 0xd3, 0x40, 0xc3, 0x09, 0x38, 0xf3, 0xcf, 0xde, 0xc6, 0xd5, 0xf5, 0x1f, 0xbe, 0x5d, 0xbd, 0xfc, 0xfc, 0x0b, 0x95, 0x8b, 0x17, 0xa6, 0x03, 0x15, 0x41, 0x14, 0xfe, 0xd8, 0xec, 0x12, 0x78, 0xfa, 0xd2, 0x02, 0x71, 0x7c, 0x31, 0x4b, 0x34, 0x88, 0x80, 0x78, 0x47, 0xee, 0xf4, 0x64, 0x2d, 0xf3, 0x95, 0x88, 0xf8, 0x24, 0x27, 0x00, 0x09, 0x80, 0x10, 0xa8, 0x03, 0xf5, 0xfa, 0xf9, 0xc5, 0xcb, 0x13, 0x33, 0x4f, 0xad, 0xf8, 0x88, 0x16, 0x66, 0x1a, 0x3d, 0xe8, 0x1f, 0x26, 0xee, 0x6e, 0x9f, 0xee, 0xa9, 0x13, 0xdb, 0xf9, 0xf1, 0xcf, 0x5f, 0xbf, 0x78, 0x1d, 0xf8, 0xcb, 0x5d, 0xc3, 0x6a, 0xc0, 0xe3, 0xc0, 0x19, 0x60, 0x1c, 0x18, 0x25, 0xa1, 0x5f, 0x66, 0x74, 0xd2, 0x31, 0xff, 0x05, 0x1a, 0xc0, 0x3e, 0xb0, 0xe7, 0xdf, 0x03, 0x47, 0x49, 0xd6, 0xa5, 0x9a, 0x96, 0xcb, 0x0e, 0xc7, 0xbe, 0x05, 0x3c, 0x00, 0xda, 0x40, 0xe1, 0x45, 0xb4, 0xec, 0x4b, 0x6a, 0xdf, 0x33, 0xfe, 0x3f, 0xc8, 0xb0, 0x73, 0x9a, 0xcf, 0x8f, 0xe1, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/host.xpm0000600000176000000410000000177612105760300021171 0ustar buildbotwww-data00000000000000/* XPM */ static const char * host_xpm[] = { "16 16 43 1", " c None", ". c #FF6B00", "+ c #FFE684", "@ c #FFD42A", "# c #FF7D00", "$ c #FFAE00", "% c #FFDB4D", "& c #FFFF98", "* c #FFF46B", "= c #FFE16B", "- c #FFEDA9", "; c #FFFFA9", "> c #FFC64D", ", c #FF8900", "' c #FFEA98", ") c #FF4D00", "! c #FF8B00", "~ c #FFFF6B", "{ c #FF9E00", "] c #D54000", "^ c #FFF24D", "/ c #FF7400", "( c #FFCB00", "_ c #B24A00", ": c #FFED00", "< c #671F00", "[ c #FFF16B", "} c #943E00", "| c #7B2500", "1 c #944900", "2 c #FFF384", "3 c #943A00", "4 c #B24600", "5 c #FFE384", "6 c #FFDE6B", "7 c #FFA42A", "8 c #D55900", "9 c #B70000", "0 c #A30000", "a c #C30000", "b c #D55400", "c c #FFA600", "d c #FFC100", " .. ", " .+@. ", " #. .+$$%. .. ", ".&*..=$%%$=..-=.", ".;>=%$%$$,$%'$%)", ".;$$$$$!!$$$$$%)", ".&$$!!!!!!!!$$%)", ".~${]]]]]]).!$@]", ".^!] ./(]", ".^] _(]", "]:<[ .}(]", "](|12 .$_(]", " ]334555667(((8 ", " 90abccccd]]8 ", " 88]]]] ", " "}; springlobby-0.169/src/images/host_spectator.xpm0000600000176000000410000000261612105760300023247 0ustar buildbotwww-data00000000000000/* XPM */ static const char * host_spectator_xpm[] = { "16 16 69 1", " c None", ". c #FF6B00", "+ c #FFE684", "@ c #FFD42A", "# c #FF7D00", "$ c #FFAE00", "% c #FFDB4D", "& c #FFFF98", "* c #FFF46B", "= c #FFE16B", "- c #FFEDA9", "; c #FFFFA9", "> c #FFC64D", ", c #FF8900", "' c #FFEA98", ") c #FF4D00", "! c #FF8B00", "~ c #FFFF6B", "{ c #FF9E00", "] c #D54000", "^ c #FFF24D", "/ c #B4B4B4", "( c #A6A6A6", "_ c #9E9E9E", ": c #959595", "< c #8B8B8B", "[ c #FF7400", "} c #FFCB00", "| c #ADADAD", "1 c #E6E6E6", "2 c #E7E7E7", "3 c #D5D5D5", "4 c #B24A00", "5 c #FFED00", "6 c #A0A0A0", "7 c #EAEAEA", "8 c #0049B8", "9 c #003D9B", "0 c #002F77", "a c #002764", "b c #797979", "c c #B5B5B5", "d c #FFFFFF", "e c #0043A9", "f c #C7DCF0", "g c #000070", "h c #00007D", "i c #000092", "j c #00245C", "k c #C5C5C5", "l c #848484", "m c #6D6D6D", "n c #002154", "o c #00007C", "p c #000087", "q c #0012A3", "r c #0026AB", "s c #606060", "t c #00183C", "u c #1549B8", "v c #5495D5", "w c #458BD1", "x c #D7D7D7", "y c #313131", "z c #424242", "A c #001A41", "B c #0058BE", "C c #6FA6DB", "D c #1E1E1E", " .. ", " .+@. ", " #. .+$$%. .. ", ".&*..=$%%$=..-=.", ".;>=%$%$$,$%'$%)", ".;$$$$$!!$$$$$%)", ".&$$!!!!!!!!$$%)", ".~${]]]]]]).!$@]", ".^!]///(_(:<.[}]", ".^]|11111223<4}]", "]56377890a777b}]", "]bc7defghijddkl]", "m(7dnoppqread7cm", " sk7tqqruvwj7xy ", " zzxABwCCAxzD ", " yyyyyyyz "}; springlobby-0.169/src/images/ingame.png.h0000600000176000000410000001267412105760300021661 0ustar buildbotwww-data00000000000000/* ingame.png - 858 bytes */ static const unsigned char ingame_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xa6, 0x00, 0xb0, 0x00, 0xb5, 0x78, 0x71, 0x68, 0x5a, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1e, 0x12, 0x1b, 0x28, 0xf4, 0xde, 0xa6, 0xf0, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0x0e, 0x17, 0x00, 0x00, 0x02, 0xb5, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x85, 0x93, 0x5b, 0x48, 0xd3, 0x51, 0x1c, 0x80, 0xbf, 0xbf, 0x5b, 0x4d, 0xa8, 0x07, 0x83, 0x2c, 0x4a, 0x70, 0x4d, 0x2b, 0xd0, 0x39, 0x5d, 0x17, 0x29, 0x64, 0xb0, 0xfd, 0xd3, 0x40, 0x71, 0x4a, 0x6d, 0xec, 0xa5, 0x0b, 0x49, 0x18, 0x0a, 0x46, 0xc8, 0x9a, 0x68, 0x65, 0x20, 0x56, 0x52, 0x19, 0x62, 0x94, 0x60, 0x0f, 0x96, 0x0c, 0xbb, 0xc0, 0x88, 0x5e, 0x84, 0x85, 0x84, 0x9b, 0x14, 0x1a, 0x45, 0x90, 0x0e, 0x37, 0xd0, 0xca, 0x30, 0xe7, 0xd6, 0x45, 0xd9, 0x34, 0x41, 0x6b, 0x72, 0x7a, 0xd0, 0x45, 0x56, 0xd4, 0xef, 0xe9, 0x3c, 0x7c, 0xdf, 0x77, 0x0e, 0xe7, 0x70, 0xa4, 0x23, 0xc7, 0xcb, 0x45, 0xf2, 0xa6, 0x14, 0x54, 0x89, 0x2a, 0x00, 0xf9, 0xf2, 0xf9, 0xb3, 0x5e, 0xfe, 0x31, 0x75, 0x17, 0x9a, 0x4c, 0x80, 0x67, 0x61, 0x7e, 0x81, 0xcf, 0xa1, 0x20, 0x09, 0x91, 0x68, 0x14, 0x47, 0x4d, 0x0d, 0xa5, 0xa5, 0x25, 0x00, 0x9e, 0x65, 0xe0, 0x9f, 0x72, 0x69, 0x69, 0x09, 0x8e, 0x9a, 0x1a, 0x22, 0xd1, 0x28, 0x09, 0x00, 0xa1, 0x50, 0x18, 0xb5, 0x5a, 0x83, 0xd9, 0x5c, 0x8c, 0x10, 0xc2, 0x53, 0xdb, 0x78, 0xa9, 0xe2, 0x77, 0xb9, 0xb6, 0xf1, 0x52, 0x85, 0x10, 0xc2, 0x63, 0x36, 0x17, 0xa3, 0x56, 0x6b, 0x08, 0x85, 0xc2, 0x00, 0x24, 0x00, 0x72, 0x43, 0xfd, 0x19, 0x26, 0x82, 0x41, 0x34, 0x9a, 0x74, 0x8e, 0x1e, 0x3a, 0x8c, 0x24, 0x49, 0xed, 0xbf, 0x9e, 0xa4, 0xee, 0x42, 0x93, 0x49, 0x92, 0xa4, 0xf6, 0xa3, 0x87, 0x0e, 0xa3, 0xd1, 0xa4, 0x33, 0x11, 0x0c, 0xd2, 0x50, 0x7f, 0x06, 0x40, 0x96, 0x00, 0xcc, 0x56, 0x5b, 0x05, 0xd0, 0x7e, 0xd2, 0xee, 0x40, 0xa7, 0xd5, 0xd2, 0xe7, 0xe9, 0x65, 0xd0, 0xe7, 0x03, 0x90, 0x97, 0x1b, 0x9e, 0x1c, 0x9d, 0x0e, 0xa3, 0xbc, 0x0f, 0xdf, 0xf0, 0x30, 0x37, 0x5b, 0xae, 0x01, 0x54, 0x76, 0x3f, 0x74, 0xdd, 0x92, 0xe2, 0xbb, 0x98, 0xad, 0x36, 0x13, 0xe0, 0x89, 0x47, 0xbc, 0xde, 0x5e, 0x86, 0x86, 0x7c, 0x00, 0x64, 0x67, 0xeb, 0x30, 0x99, 0x56, 0xc8, 0x72, 0xf7, 0x43, 0x97, 0x17, 0x40, 0x11, 0x0f, 0x8c, 0x04, 0xfc, 0xef, 0xb7, 0x67, 0x6a, 0xfb, 0x5e, 0x0c, 0xf4, 0x97, 0x6d, 0xd9, 0xba, 0x8d, 0x94, 0xcd, 0x29, 0x04, 0x02, 0x01, 0xb2, 0xb2, 0xb4, 0xc8, 0x72, 0xfe, 0x5f, 0xe5, 0x15, 0x81, 0x12, 0xab, 0xad, 0x7a, 0xf5, 0x47, 0xd7, 0x7d, 0xc5, 0x9c, 0x9f, 0x37, 0x1f, 0x13, 0xf9, 0x10, 0x9c, 0x40, 0xab, 0xcd, 0x24, 0x3f, 0x7f, 0xff, 0x4f, 0x59, 0x39, 0xed, 0x45, 0x39, 0xf3, 0xb2, 0x6c, 0x6b, 0xae, 0x2d, 0x3a, 0x12, 0xf0, 0x3f, 0x5f, 0x71, 0xcb, 0x16, 0x03, 0x62, 0xa4, 0x17, 0x11, 0x0d, 0x20, 0x4e, 0xd5, 0xd5, 0x8b, 0x47, 0xee, 0x27, 0x22, 0x18, 0xf9, 0x2a, 0x1e, 0x74, 0x3f, 0x16, 0x66, 0xab, 0x4d, 0x9c, 0x38, 0x65, 0x17, 0xd1, 0xc0, 0x12, 0x63, 0x31, 0x20, 0xe2, 0x5e, 0x42, 0x7c, 0x11, 0x5b, 0x04, 0x21, 0xa0, 0xb2, 0xb9, 0x1c, 0x93, 0xd1, 0xb8, 0xb0, 0x31, 0x79, 0x3d, 0x4f, 0x9f, 0x3d, 0xa3, 0xeb, 0x4e, 0x07, 0x7a, 0xfd, 0x0e, 0x8a, 0x8a, 0x8a, 0x16, 0x2a, 0x9b, 0xcb, 0x11, 0x62, 0x89, 0xfd, 0x23, 0xa0, 0x54, 0xd0, 0xe6, 0x38, 0x07, 0xad, 0x76, 0x27, 0x48, 0x92, 0xaa, 0xf3, 0xee, 0x3d, 0xba, 0xee, 0x74, 0x00, 0xf0, 0x69, 0x3a, 0x02, 0x92, 0xa4, 0x6a, 0xb5, 0x3b, 0x71, 0x9c, 0x5b, 0x62, 0x57, 0x04, 0x2c, 0x06, 0xaa, 0x63, 0x8b, 0x54, 0x39, 0x3b, 0x60, 0x7e, 0xee, 0x1b, 0x1b, 0x66, 0x0a, 0x98, 0x1c, 0x1f, 0xe3, 0x58, 0x9e, 0x8b, 0xb0, 0xcf, 0xc5, 0xe4, 0xf8, 0x18, 0x1b, 0x66, 0x0a, 0x98, 0x9f, 0xfb, 0x86, 0xb3, 0x03, 0x62, 0x8b, 0x54, 0x59, 0x0c, 0x54, 0x03, 0x28, 0x2c, 0x06, 0x9a, 0x81, 0xc6, 0xab, 0x17, 0x61, 0xd5, 0x9a, 0x44, 0xda, 0x5a, 0x62, 0xdc, 0xe8, 0x84, 0x03, 0x7b, 0xfc, 0x4c, 0x7d, 0x81, 0xc1, 0x51, 0x38, 0xb8, 0xc7, 0xcf, 0x95, 0x36, 0x88, 0x4e, 0x42, 0xae, 0x21, 0x11, 0xe3, 0xde, 0x18, 0x4f, 0x3c, 0x14, 0x66, 0xa4, 0xb2, 0x56, 0x91, 0x91, 0x4a, 0x8f, 0x7e, 0x1b, 0x64, 0xee, 0x80, 0x5b, 0xd7, 0x63, 0xb8, 0x07, 0x20, 0x79, 0x1d, 0xce, 0xfe, 0x41, 0x72, 0x86, 0xdf, 0x42, 0xd2, 0x1a, 0x78, 0xee, 0x83, 0xe4, 0x24, 0x9c, 0xaf, 0x47, 0xc9, 0x99, 0x7a, 0x1f, 0x23, 0x67, 0x37, 0x4c, 0x7d, 0x80, 0xf0, 0x34, 0x79, 0xca, 0xc8, 0x2c, 0xbc, 0x1e, 0x85, 0xef, 0xb7, 0xc1, 0x3d, 0x00, 0xeb, 0x93, 0x68, 0xe9, 0x79, 0xc5, 0x69, 0xe0, 0xd8, 0xef, 0xff, 0xa1, 0x60, 0x27, 0x5f, 0xdc, 0x03, 0xd8, 0x95, 0x0a, 0x18, 0x7e, 0x07, 0x91, 0xd9, 0xe5, 0xf7, 0xd7, 0xa7, 0x21, 0xf4, 0x69, 0x88, 0xc2, 0x5d, 0x74, 0xf1, 0x9f, 0x29, 0xdc, 0x45, 0x57, 0x9c, 0x2f, 0xb1, 0xda, 0xaa, 0x7f, 0x00, 0x0b, 0x50, 0x2a, 0xbb, 0x60, 0x32, 0xa8, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/join_icon.png.h0000600000176000000410000003751312105760300022367 0ustar buildbotwww-data00000000000000/* join_icon.png - 2526 bytes */ static const unsigned char join_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a, 0xf4, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0d, 0xd7, 0x00, 0x00, 0x0d, 0xd7, 0x01, 0x42, 0x28, 0x9b, 0x78, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x0a, 0x06, 0x16, 0x03, 0x1b, 0xe4, 0x81, 0x36, 0x72, 0x00, 0x00, 0x09, 0x5e, 0x49, 0x44, 0x41, 0x54, 0x58, 0x47, 0xe5, 0x56, 0x5b, 0x6c, 0x1b, 0x59, 0x19, 0xfe, 0x66, 0x6c, 0x8f, 0xc7, 0xe3, 0x6b, 0x9c, 0x8b, 0xd3, 0x34, 0x69, 0x2e, 0x6d, 0xda, 0x6d, 0xd3, 0xa6, 0xb7, 0x6c, 0x9b, 0x55, 0x5b, 0x16, 0x44, 0x45, 0x25, 0xb6, 0x12, 0x17, 0xad, 0x10, 0x08, 0xa9, 0xe2, 0x01, 0x10, 0x12, 0x97, 0x95, 0xa0, 0x12, 0x3c, 0xf1, 0xc0, 0x22, 0x1e, 0x60, 0xc5, 0xae, 0x56, 0x74, 0xe1, 0x91, 0x8b, 0x04, 0x5a, 0x60, 0x41, 0x0b, 0xd2, 0xa2, 0x96, 0xb2, 0x4d, 0x68, 0xb7, 0x69, 0x9b, 0xb6, 0x49, 0xda, 0xdc, 0xdd, 0xb4, 0x49, 0xec, 0x38, 0xb6, 0x13, 0xdf, 0xc7, 0x63, 0xcf, 0xd5, 0xfc, 0x67, 0x9a, 0x54, 0x4d, 0x9b, 0x2e, 0xcb, 0x33, 0xc7, 0x3a, 0x1a, 0xcf, 0x9c, 0x99, 0xf3, 0x7d, 0xe7, 0xfb, 0xaf, 0xc0, 0xff, 0xfb, 0xe0, 0xfe, 0x57, 0x01, 0x8e, 0x1d, 0x7b, 0x45, 0xaa, 0xd5, 0xac, 0x63, 0xe0, 0xb8, 0x03, 0x35, 0xcb, 0xda, 0x42, 0xdf, 0x7b, 0x68, 0x96, 0x78, 0x07, 0xbf, 0x48, 0xf7, 0xd7, 0x05, 0xc1, 0xba, 0x3d, 0x30, 0xf0, 0x96, 0xf9, 0x51, 0xf7, 0xfd, 0xc8, 0x04, 0x8e, 0x1d, 0xfb, 0x56, 0xbf, 0x4b, 0x10, 0xbe, 0xb3, 0xed, 0xb9, 0xae, 0xcf, 0xf7, 0xec, 0xeb, 0x76, 0x79, 0xeb, 0xeb, 0xf8, 0x8a, 0x61, 0xc1, 0xb0, 0x6a, 0x08, 0xfa, 0x24, 0x28, 0xa5, 0x32, 0x96, 0xe7, 0x97, 0xac, 0x85, 0xe8, 0x42, 0x26, 0x31, 0xb7, 0xf8, 0xfb, 0x5a, 0xcd, 0xfc, 0xf9, 0xd0, 0xd0, 0xb9, 0xc5, 0xff, 0x46, 0xe4, 0x99, 0x04, 0x6a, 0xb5, 0x1a, 0x4f, 0x1f, 0x4b, 0xaf, 0xbf, 0xfe, 0x4e, 0xf3, 0xc0, 0xc0, 0xd8, 0x4f, 0x0e, 0x9f, 0x38, 0xf4, 0x72, 0xd7, 0xfe, 0xdd, 0x9c, 0x20, 0x49, 0x18, 0xbc, 0x3e, 0x8d, 0x6c, 0xae, 0x00, 0xc9, 0xed, 0x02, 0x68, 0x87, 0xb6, 0xd6, 0x08, 0x1a, 0x1a, 0xeb, 0xa1, 0xa8, 0x3a, 0x78, 0xd4, 0x50, 0x2d, 0x16, 0x31, 0x71, 0xe5, 0xa6, 0xba, 0x30, 0x19, 0x7d, 0x8d, 0x83, 0xfe, 0xa3, 0xab, 0x57, 0x7f, 0xa5, 0x3d, 0x8b, 0x88, 0x63, 0xb3, 0x05, 0x02, 0x67, 0xb2, 0xee, 0x38, 0x7f, 0x7e, 0xf8, 0xa5, 0xe5, 0x95, 0xe2, 0x1f, 0x4e, 0xbd, 0x7c, 0xf2, 0x79, 0xd5, 0x2d, 0x71, 0xd1, 0x78, 0x16, 0x8d, 0x0d, 0x21, 0x1c, 0xe9, 0xed, 0x44, 0xa9, 0x50, 0xc4, 0xd6, 0x46, 0x3f, 0xba, 0x3b, 0x9a, 0xd0, 0xd3, 0xdd, 0x0a, 0xb7, 0xe0, 0x84, 0x46, 0x8a, 0x94, 0x14, 0x1d, 0x86, 0x69, 0xe0, 0x60, 0xdf, 0x4e, 0xe7, 0xde, 0xbd, 0x5d, 0x27, 0x2c, 0xd5, 0x38, 0xe5, 0xf3, 0xf6, 0xfc, 0x6d, 0x61, 0x61, 0xa8, 0xbc, 0x19, 0xd6, 0x53, 0x0a, 0x10, 0xb8, 0x93, 0x5e, 0xdc, 0x7d, 0xfd, 0xfa, 0xd4, 0xe9, 0x85, 0xa5, 0xec, 0x0f, 0x23, 0x9d, 0xad, 0xa2, 0xc5, 0x39, 0xe1, 0xf6, 0x88, 0x58, 0xce, 0x94, 0xe1, 0xf3, 0x4a, 0x08, 0x78, 0x1c, 0x98, 0x5f, 0x48, 0xa0, 0x6f, 0x5f, 0x27, 0x9c, 0x0e, 0x1e, 0xb1, 0x64, 0x0e, 0xa2, 0x28, 0x92, 0x22, 0x3c, 0x0a, 0x45, 0x19, 0xf7, 0x97, 0x72, 0x98, 0x5f, 0xce, 0x23, 0x5f, 0xaa, 0xa0, 0x25, 0xec, 0x85, 0x9e, 0x4a, 0xce, 0x2b, 0xf9, 0xd2, 0x89, 0x57, 0x5f, 0xfd, 0x4a, 0xfc, 0x49, 0x12, 0x1b, 0x08, 0x10, 0x38, 0x5b, 0xef, 0x88, 0x46, 0xe3, 0x1f, 0xbb, 0x33, 0xb9, 0xf8, 0x8b, 0x43, 0xcf, 0xef, 0xf1, 0x37, 0xd5, 0xfb, 0xa1, 0x59, 0x1c, 0x2e, 0x0e, 0xcd, 0x00, 0x0e, 0x17, 0xfa, 0x7a, 0xb7, 0xc3, 0x4d, 0x14, 0x79, 0xcb, 0x40, 0xbd, 0xcf, 0x09, 0xc2, 0x27, 0xe9, 0x2d, 0xc8, 0x55, 0x03, 0xc3, 0x33, 0x69, 0x0c, 0xde, 0x9e, 0x47, 0x2a, 0x2b, 0xa3, 0x20, 0x93, 0x4f, 0x24, 0x33, 0x36, 0x5e, 0x67, 0x73, 0x10, 0xe5, 0xd9, 0xd9, 0x6b, 0xc5, 0x74, 0xf2, 0xc4, 0x95, 0x2b, 0xbf, 0x34, 0x1e, 0x27, 0xc1, 0xec, 0xfc, 0xf8, 0x38, 0x40, 0x24, 0x1a, 0x2e, 0xbe, 0x3f, 0xf6, 0x4a, 0xdb, 0x8e, 0x76, 0x7f, 0x6b, 0x93, 0x1f, 0x5e, 0xb7, 0x03, 0x3e, 0x57, 0x0d, 0x07, 0x77, 0x45, 0xb0, 0xb3, 0xc5, 0x0f, 0x11, 0x1a, 0x02, 0x6e, 0x0e, 0x61, 0x9f, 0x0b, 0x2e, 0x07, 0x07, 0x9e, 0xe3, 0x20, 0x0a, 0x64, 0x79, 0xcb, 0x42, 0x58, 0x72, 0x20, 0x44, 0xb3, 0x48, 0x2a, 0xac, 0xac, 0xe4, 0x98, 0x7b, 0xc0, 0x34, 0x2d, 0xdc, 0x27, 0x35, 0xd0, 0xdc, 0x72, 0xd4, 0xb0, 0x9c, 0x3f, 0x78, 0x02, 0x0f, 0x8f, 0x7c, 0x80, 0x80, 0x25, 0x5a, 0x3c, 0xfa, 0xd3, 0x9f, 0xbd, 0xdd, 0xba, 0x73, 0x5f, 0xf7, 0x37, 0x04, 0xc9, 0xcd, 0x49, 0xa2, 0x0b, 0x5e, 0x8f, 0x80, 0xa5, 0x74, 0x09, 0x93, 0x0b, 0x59, 0x04, 0xc2, 0x61, 0x54, 0x88, 0xbf, 0xcb, 0xe9, 0x02, 0x2d, 0x51, 0x24, 0xda, 0x3e, 0x88, 0xbc, 0x62, 0x22, 0x55, 0xd4, 0x30, 0x36, 0xbb, 0x04, 0xaf, 0x8b, 0xc7, 0x89, 0xfd, 0x6d, 0xe8, 0xdd, 0x11, 0x21, 0x15, 0xaa, 0x58, 0xcd, 0x97, 0x61, 0x90, 0x6f, 0x58, 0xbc, 0x93, 0x73, 0xbb, 0x1c, 0x2f, 0x44, 0xfc, 0x7b, 0x7e, 0xb3, 0xb4, 0x74, 0xa3, 0xb8, 0x4e, 0x84, 0xd9, 0x7b, 0x7d, 0xd4, 0xd3, 0x1f, 0x2b, 0x9e, 0x2c, 0x7c, 0x4f, 0x5c, 0x51, 0x38, 0x3e, 0x53, 0x41, 0x2a, 0x23, 0xc3, 0x27, 0x09, 0xb0, 0x6a, 0x1c, 0xba, 0xda, 0x5b, 0x20, 0x88, 0x1e, 0x38, 0x49, 0x33, 0xbf, 0x1b, 0x28, 0x54, 0x19, 0x78, 0xcd, 0xde, 0x5c, 0x51, 0x0d, 0xdc, 0x99, 0x8e, 0x63, 0x66, 0x61, 0x15, 0x1e, 0x7f, 0x10, 0xff, 0x1c, 0x99, 0x86, 0xae, 0x56, 0x71, 0xbc, 0xb7, 0x0d, 0x5f, 0xf8, 0x64, 0x0f, 0xfe, 0x7c, 0x69, 0x0a, 0xb7, 0xa6, 0x12, 0x68, 0x69, 0x6a, 0xf4, 0xa8, 0xc9, 0xe4, 0x77, 0x09, 0x87, 0x4d, 0x7b, 0x3c, 0x6e, 0x02, 0x79, 0x78, 0x78, 0xe6, 0xe3, 0x9a, 0xc3, 0xbd, 0x67, 0x74, 0x76, 0x19, 0x8b, 0xc9, 0x3c, 0x66, 0x63, 0x59, 0x72, 0xa6, 0x22, 0x9e, 0xdb, 0xd5, 0x09, 0xc1, 0xf3, 0x10, 0x3c, 0x40, 0xe0, 0x49, 0x19, 0xb6, 0x12, 0x8a, 0x56, 0x43, 0xa9, 0x6a, 0xa2, 0x58, 0x31, 0xa1, 0xe8, 0x35, 0xf8, 0xfc, 0x01, 0xe8, 0x86, 0x89, 0x5d, 0xdd, 0x6d, 0xd8, 0xd6, 0xde, 0x8a, 0x5b, 0x0f, 0x0a, 0x78, 0xe3, 0x8f, 0xc3, 0xd8, 0xb7, 0xbd, 0x09, 0xdf, 0x3f, 0x73, 0x1c, 0x16, 0xc1, 0x39, 0xeb, 0xc2, 0x67, 0x0e, 0x1f, 0xfe, 0x3a, 0xe9, 0xf7, 0x70, 0x3c, 0x52, 0x80, 0xe3, 0xb8, 0xdc, 0xad, 0x5b, 0xb3, 0xbb, 0x03, 0x2d, 0x11, 0x7e, 0xec, 0xc1, 0x2a, 0x39, 0x95, 0x8e, 0x52, 0x45, 0xc7, 0xd1, 0xbe, 0x3d, 0x28, 0x13, 0x90, 0xc7, 0xc5, 0x91, 0xed, 0x81, 0x44, 0x89, 0x3e, 0x24, 0xdd, 0x79, 0x93, 0x9d, 0xde, 0x44, 0x85, 0x4e, 0xcf, 0x42, 0xef, 0x6e, 0x34, 0x81, 0x89, 0xe8, 0x92, 0x6d, 0xf3, 0x40, 0xc0, 0x07, 0xa7, 0x93, 0x79, 0x2a, 0x6f, 0x27, 0xaa, 0xdf, 0xbd, 0x37, 0x8a, 0xd6, 0x48, 0x08, 0x67, 0x3e, 0x7d, 0x00, 0x7f, 0xfa, 0x6b, 0x39, 0x6c, 0xac, 0xa6, 0x8f, 0xd2, 0x2e, 0x57, 0x18, 0x85, 0xc7, 0x4d, 0x80, 0xcb, 0x97, 0xc7, 0xcb, 0x1d, 0x6d, 0x5b, 0x61, 0x08, 0x12, 0x79, 0x7b, 0x17, 0x4c, 0xc3, 0x80, 0xc3, 0x29, 0x40, 0xd7, 0x0d, 0x34, 0x93, 0xd3, 0xc5, 0xd7, 0x2c, 0x67, 0x11, 0xb8, 0x46, 0xe0, 0x55, 0x4a, 0x3c, 0x2c, 0xf9, 0x7c, 0x70, 0x73, 0x06, 0x53, 0xf7, 0x96, 0xc1, 0x82, 0x88, 0xc5, 0x51, 0x26, 0x57, 0xb4, 0x89, 0x98, 0xe4, 0x98, 0x6e, 0x0a, 0x4f, 0x8e, 0x88, 0x2c, 0xa6, 0x8b, 0x78, 0xfb, 0xd2, 0x34, 0x5e, 0x3c, 0xb6, 0x87, 0x7b, 0x77, 0x6a, 0xb6, 0x7f, 0x9d, 0xc0, 0x86, 0x28, 0xb8, 0xf8, 0xc1, 0x54, 0x47, 0x4f, 0x57, 0x13, 0xfa, 0x0f, 0x74, 0xc1, 0x4b, 0x9e, 0xbd, 0xbd, 0x35, 0x0c, 0x89, 0xc4, 0x6a, 0x0d, 0x39, 0x30, 0xb7, 0xa2, 0x42, 0xae, 0x68, 0x28, 0x57, 0x35, 0x52, 0x47, 0x83, 0xc2, 0x26, 0x81, 0x57, 0x48, 0xa9, 0xb1, 0xc9, 0x79, 0x02, 0xb7, 0x1e, 0x4e, 0x3a, 0x31, 0x63, 0x62, 0x93, 0xb1, 0x00, 0xb5, 0xaa, 0xc2, 0xeb, 0xf7, 0xc1, 0xa4, 0x43, 0x3c, 0x58, 0x4c, 0x23, 0xb1, 0x5a, 0x44, 0x63, 0x63, 0xb0, 0x7d, 0xcd, 0x02, 0x1b, 0x7c, 0x00, 0x92, 0xc7, 0x1d, 0xba, 0x1d, 0x5d, 0xc1, 0xce, 0x46, 0x72, 0xbc, 0xaa, 0x82, 0x80, 0xc8, 0xa3, 0xa3, 0x41, 0x40, 0xba, 0xa0, 0xda, 0x6a, 0x54, 0x18, 0xb8, 0x42, 0x24, 0x14, 0x15, 0x65, 0x22, 0xc3, 0x48, 0x64, 0xf2, 0x32, 0xaa, 0x74, 0xb5, 0x08, 0x91, 0x0e, 0xfc, 0xf0, 0xca, 0xfe, 0x33, 0x42, 0xf4, 0xd3, 0x08, 0x98, 0x91, 0xe1, 0x78, 0x0e, 0x6e, 0x4a, 0x20, 0xcb, 0x2b, 0x05, 0x54, 0x2a, 0x9a, 0x7f, 0x9d, 0xc0, 0x06, 0x13, 0xd0, 0x3b, 0x4a, 0xfb, 0xb6, 0x08, 0x64, 0x1d, 0xe8, 0xdf, 0xbb, 0x85, 0x8a, 0x8c, 0xc7, 0x96, 0x39, 0x5f, 0x90, 0x6d, 0x3f, 0x30, 0x38, 0x17, 0x2a, 0xba, 0x69, 0x6f, 0x68, 0x90, 0xc4, 0xcc, 0xe1, 0x58, 0x2c, 0x32, 0x7b, 0x57, 0x35, 0xc3, 0x06, 0x5d, 0x27, 0xc2, 0xde, 0xb1, 0x48, 0x0d, 0x96, 0xdc, 0xe4, 0x92, 0x4c, 0x09, 0x8b, 0x83, 0x24, 0x3a, 0xe9, 0xc4, 0x14, 0x35, 0x8a, 0xaa, 0x6e, 0xaa, 0x80, 0x5a, 0x2e, 0xc7, 0x98, 0x4d, 0x98, 0x1d, 0xbd, 0xa2, 0xdb, 0x4e, 0x42, 0x61, 0x8a, 0xb9, 0x1c, 0x15, 0x9e, 0xf1, 0xe9, 0x79, 0x64, 0x0b, 0x25, 0x5b, 0x01, 0x99, 0x29, 0xb0, 0xa6, 0x02, 0x73, 0xc2, 0x03, 0xbd, 0x3b, 0x88, 0x04, 0x25, 0x2c, 0x9f, 0x17, 0x1e, 0xfa, 0xce, 0x26, 0x42, 0x72, 0xac, 0x93, 0xd1, 0x75, 0xaa, 0x0f, 0x34, 0x99, 0x23, 0x8b, 0x9c, 0x49, 0xbe, 0x61, 0x26, 0x36, 0x55, 0x40, 0x55, 0xaa, 0x13, 0x8a, 0x5c, 0xfe, 0x94, 0x44, 0xc0, 0x0a, 0x9d, 0x28, 0xe0, 0x75, 0xd9, 0x27, 0x65, 0xf9, 0xbe, 0x54, 0xae, 0x62, 0xe4, 0xfd, 0x11, 0xec, 0xd9, 0xbb, 0xdd, 0xae, 0x07, 0xec, 0x74, 0x86, 0x69, 0xda, 0x05, 0x88, 0xd5, 0x81, 0x23, 0x7d, 0x3d, 0xa4, 0x88, 0x05, 0x55, 0xd3, 0x31, 0x7e, 0x77, 0x86, 0x84, 0xe1, 0xec, 0x77, 0x98, 0x99, 0x2a, 0x14, 0xaa, 0x1e, 0xb7, 0x40, 0x29, 0x39, 0x80, 0xf4, 0xfd, 0x45, 0x7a, 0xca, 0xdd, 0x59, 0x27, 0xb0, 0xa1, 0x1a, 0xb6, 0xb6, 0x1d, 0x71, 0x86, 0x9b, 0x1b, 0xbf, 0x24, 0x04, 0x02, 0x5c, 0x67, 0xb3, 0x1f, 0x43, 0x77, 0xe3, 0x18, 0x99, 0x49, 0xa0, 0x21, 0x28, 0x91, 0x7c, 0x02, 0xae, 0x8d, 0xc7, 0x30, 0x3e, 0x13, 0x43, 0xbe, 0x58, 0x86, 0x87, 0x8a, 0x93, 0x41, 0xd1, 0xa0, 0x12, 0xd1, 0x2a, 0x81, 0xaa, 0xb6, 0xad, 0x2d, 0x48, 0x82, 0x83, 0x26, 0x8f, 0x3a, 0x9f, 0x80, 0x3a, 0xbf, 0x08, 0x3f, 0x25, 0x32, 0x91, 0x0e, 0xd4, 0xb7, 0x6b, 0x0b, 0xd5, 0x86, 0x34, 0xe4, 0xc4, 0x8a, 0xa9, 0x2b, 0x95, 0x6f, 0xc6, 0xe3, 0xc3, 0x94, 0xca, 0x9e, 0x08, 0xc3, 0xb2, 0xac, 0x5e, 0x18, 0x1f, 0x9e, 0x4c, 0xb7, 0xec, 0x68, 0x8f, 0xa4, 0x72, 0x15, 0x4c, 0x2d, 0x66, 0xb1, 0x9a, 0x29, 0xe0, 0xdf, 0x23, 0x0b, 0x94, 0x7e, 0x1d, 0xf8, 0xf2, 0xa9, 0x5e, 0x0c, 0x8e, 0xcc, 0x63, 0x2c, 0x9a, 0x82, 0x97, 0xe4, 0xae, 0xaf, 0x0f, 0xda, 0x7e, 0x60, 0xfb, 0x02, 0xd9, 0x2d, 0x40, 0x21, 0xe3, 0x17, 0x1d, 0x08, 0x0a, 0x61, 0xd4, 0x0c, 0xdd, 0x26, 0x54, 0x26, 0x93, 0x85, 0x03, 0x5b, 0x90, 0xcd, 0xe6, 0xe0, 0xb0, 0x28, 0x6a, 0xf2, 0xa5, 0xbf, 0x53, 0xa3, 0x92, 0xdb, 0xd4, 0x04, 0x37, 0x6e, 0x9c, 0xd3, 0x1d, 0xce, 0x6f, 0xbf, 0x59, 0xce, 0xe4, 0x7e, 0x7c, 0x8d, 0x4a, 0x60, 0xb2, 0x64, 0x80, 0x1a, 0x1c, 0xdb, 0xd3, 0x59, 0xba, 0xbd, 0x3e, 0x11, 0xc3, 0xf1, 0xfd, 0xdb, 0xf0, 0xd5, 0xcf, 0x1c, 0x46, 0xde, 0x70, 0x52, 0x91, 0x29, 0x42, 0x27, 0x13, 0x31, 0x33, 0x05, 0x3c, 0x2e, 0xfb, 0xe4, 0x21, 0x3a, 0xb9, 0x97, 0x72, 0x87, 0xc0, 0x93, 0xd0, 0xc4, 0x4a, 0xa4, 0x3e, 0x41, 0x56, 0x2a, 0x48, 0x27, 0x93, 0xf0, 0x92, 0x4d, 0xe8, 0x20, 0x6f, 0xac, 0x83, 0xb3, 0xeb, 0x93, 0xd5, 0x90, 0xe2, 0xb6, 0xf0, 0x66, 0x62, 0x6a, 0x36, 0x96, 0xa4, 0x92, 0xba, 0x98, 0x96, 0xe1, 0xa2, 0xdc, 0xae, 0xa8, 0xa6, 0x9d, 0xf3, 0x75, 0xdd, 0xc2, 0xa5, 0x9b, 0xf3, 0xf8, 0xf5, 0x7b, 0x63, 0x14, 0x5e, 0x26, 0xfa, 0xba, 0x1b, 0xb0, 0x6b, 0x6b, 0x90, 0x0a, 0x13, 0x4f, 0x36, 0xaf, 0x41, 0xa0, 0x42, 0xe1, 0xa3, 0x2a, 0xd5, 0xdd, 0x5a, 0x87, 0xcf, 0xbe, 0xb8, 0x1b, 0x9f, 0xfb, 0x44, 0x0f, 0x76, 0xb5, 0x37, 0xd0, 0x9e, 0x55, 0x34, 0x85, 0x3c, 0xf0, 0x3b, 0xf9, 0x81, 0xb7, 0xce, 0x7d, 0xed, 0xd6, 0xe3, 0x04, 0x9e, 0xea, 0x88, 0x96, 0x97, 0xc7, 0xdc, 0x7d, 0x07, 0xfb, 0xf3, 0x4a, 0x15, 0x2f, 0xa9, 0x82, 0xc4, 0x55, 0x35, 0xaa, 0xf5, 0xb2, 0x02, 0x8d, 0xec, 0xcc, 0xbc, 0xda, 0x25, 0xb8, 0x50, 0x4f, 0xed, 0xd7, 0x6a, 0x49, 0xc3, 0x74, 0x2c, 0x87, 0x95, 0xbc, 0x82, 0x48, 0x9d, 0x88, 0x8e, 0x26, 0x1f, 0x1a, 0x83, 0x22, 0x1a, 0xfc, 0x02, 0x7a, 0x29, 0xf7, 0xfb, 0xa8, 0x8a, 0xf2, 0x14, 0x7a, 0x0e, 0x72, 0xe0, 0xf4, 0x6a, 0x0e, 0x85, 0xe5, 0xac, 0xdc, 0xb1, 0xcd, 0xf3, 0xda, 0xe0, 0xe0, 0xc5, 0xf8, 0xe5, 0xcb, 0x97, 0xa9, 0x9a, 0x3c, 0x1c, 0x4f, 0x12, 0x60, 0x79, 0x21, 0x78, 0xef, 0xde, 0x68, 0xc6, 0x6d, 0xfa, 0x3d, 0x0e, 0x97, 0x74, 0x90, 0xf3, 0xf9, 0x51, 0xa0, 0x86, 0x53, 0xad, 0xa8, 0x76, 0x4c, 0xfb, 0x28, 0xcf, 0x0b, 0x1e, 0x89, 0xbc, 0xdf, 0x20, 0xc7, 0x33, 0xa9, 0x0e, 0x68, 0x48, 0xe5, 0xca, 0x94, 0x8c, 0x54, 0x70, 0x35, 0x13, 0x41, 0x8a, 0xf5, 0x1d, 0x94, 0x41, 0x59, 0x8b, 0xc6, 0x46, 0xa1, 0xa4, 0xe0, 0x41, 0x34, 0x6e, 0x8a, 0x2e, 0xfd, 0x1d, 0xc3, 0xc8, 0x4f, 0x0e, 0x0d, 0x0d, 0xa5, 0xa6, 0xa6, 0xa6, 0x18, 0x01, 0xbb, 0x73, 0xde, 0x8c, 0x80, 0x4f, 0x51, 0x14, 0x69, 0x6e, 0x6e, 0x38, 0x0a, 0x99, 0x77, 0xd5, 0x05, 0xea, 0xf6, 0x09, 0x7e, 0x2f, 0x57, 0x28, 0x2a, 0xe0, 0x1c, 0xe4, 0xe1, 0x94, 0x56, 0xed, 0x24, 0x44, 0x5e, 0xaf, 0x6b, 0x1a, 0xa5, 0x58, 0x22, 0xa6, 0xa9, 0xf0, 0xf0, 0x16, 0x7a, 0xda, 0xc3, 0xd4, 0x07, 0x34, 0x61, 0x7a, 0x6e, 0x99, 0x4c, 0x66, 0x50, 0x7b, 0xa6, 0x50, 0x48, 0xde, 0x37, 0x6b, 0x46, 0x71, 0xc0, 0x34, 0x8b, 0xa3, 0x4b, 0x34, 0x06, 0x07, 0x07, 0x93, 0xa9, 0x54, 0x4a, 0x21, 0x6c, 0x4a, 0x77, 0x4f, 0x13, 0x60, 0xfd, 0x05, 0xd5, 0xbc, 0x87, 0x73, 0x65, 0x65, 0xfa, 0xbe, 0xa7, 0x86, 0x4c, 0x73, 0xb0, 0x7e, 0x9f, 0xe8, 0x93, 0x9c, 0x75, 0xf5, 0x41, 0xce, 0xd0, 0x29, 0xed, 0x12, 0x60, 0x8d, 0x80, 0x2d, 0x83, 0x5d, 0xab, 0x68, 0xab, 0x97, 0xf0, 0xc5, 0x93, 0x7b, 0x51, 0x51, 0x14, 0x0c, 0xdf, 0x99, 0xb3, 0xd3, 0x76, 0x26, 0x9d, 0x43, 0xec, 0x7e, 0xbc, 0x68, 0x99, 0xf9, 0x81, 0x6a, 0xb5, 0x30, 0x91, 0x4e, 0xa7, 0xe3, 0x93, 0x93, 0x93, 0xf3, 0xe7, 0xcf, 0x9f, 0x4f, 0xd2, 0xfe, 0xac, 0x41, 0xb5, 0x15, 0xd8, 0x90, 0x8a, 0xe9, 0x9e, 0xf5, 0x6b, 0x4c, 0x1e, 0x81, 0x26, 0xab, 0xd9, 0x8e, 0xd1, 0xd1, 0x7f, 0xfc, 0xeb, 0xf4, 0xe9, 0xa3, 0x56, 0x2a, 0xa5, 0x9d, 0x9c, 0x8f, 0x2e, 0x6d, 0x0f, 0x35, 0x36, 0xb8, 0x39, 0x9f, 0x97, 0xf3, 0x7a, 0x45, 0x72, 0xb0, 0x46, 0x1c, 0xd8, 0xd9, 0x82, 0x4c, 0xb6, 0x80, 0xdf, 0xfe, 0x65, 0x00, 0x92, 0x93, 0x43, 0x48, 0x70, 0xd5, 0xca, 0xf1, 0x65, 0xd9, 0x27, 0x99, 0x77, 0x42, 0x21, 0x6b, 0x82, 0xcc, 0x96, 0x91, 0x65, 0x79, 0x29, 0x16, 0x8b, 0xcd, 0x5d, 0xb8, 0x70, 0x21, 0xb6, 0xb6, 0xff, 0xa3, 0x36, 0xfd, 0xa9, 0xae, 0x98, 0xb1, 0xa2, 0xc1, 0xda, 0xf2, 0xd0, 0xda, 0x0c, 0xb8, 0xdd, 0xee, 0xd0, 0xd9, 0xb3, 0x67, 0x0f, 0xf6, 0xf7, 0xbf, 0x70, 0x88, 0xe3, 0x3c, 0x9d, 0x3c, 0xef, 0x0c, 0x66, 0xb3, 0xb2, 0x38, 0x3c, 0xf2, 0xc0, 0x3f, 0x36, 0xfe, 0xc0, 0x69, 0x68, 0x9a, 0x5a, 0x29, 0x15, 0x57, 0xd4, 0x6a, 0x71, 0xd1, 0xe3, 0xa9, 0x46, 0x9b, 0x9b, 0x9d, 0xf1, 0x48, 0x24, 0xa2, 0x79, 0xbd, 0x5e, 0xc5, 0x34, 0xcd, 0x4c, 0x32, 0x99, 0x5c, 0xba, 0x7a, 0xf5, 0x6a, 0x3c, 0x91, 0x48, 0xb0, 0x2e, 0x95, 0xc9, 0xcf, 0xb2, 0xbd, 0x3d, 0x9e, 0x45, 0x80, 0xad, 0x31, 0xff, 0x60, 0x7d, 0x62, 0x80, 0xa6, 0x8f, 0xa6, 0x77, 0xed, 0x9e, 0x3d, 0x5b, 0x57, 0x88, 0x29, 0xc8, 0xf6, 0x60, 0x1b, 0x32, 0x49, 0x99, 0x5d, 0x55, 0x22, 0xac, 0x36, 0x34, 0x34, 0xa8, 0x82, 0x20, 0x28, 0xd9, 0x6c, 0x36, 0x5f, 0xa0, 0x41, 0xcf, 0x99, 0xec, 0x1b, 0x3a, 0x62, 0xba, 0xff, 0x50, 0x02, 0x6c, 0x7d, 0xfd, 0x1d, 0x06, 0x28, 0xd2, 0x64, 0xca, 0x30, 0x1f, 0x61, 0xf7, 0x0c, 0xfc, 0x71, 0x27, 0xa6, 0x62, 0x6c, 0x03, 0x30, 0x79, 0x59, 0x9a, 0x5d, 0x9f, 0xec, 0x9e, 0xad, 0x6d, 0x3a, 0x3e, 0x4c, 0x81, 0x4d, 0x3f, 0x58, 0x7b, 0xc8, 0x80, 0x59, 0x12, 0x63, 0xdf, 0xaf, 0x2b, 0xc0, 0x96, 0x98, 0x0a, 0x0c, 0xec, 0x91, 0xc4, 0x6b, 0xef, 0x3f, 0xf3, 0xf2, 0x1f, 0xbd, 0x3d, 0xcb, 0x55, 0x1c, 0xe5, 0x74, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/join_icon_text.png.h0000600000176000000410000002310112105760300023417 0ustar buildbotwww-data00000000000000/* join_icon_text.png - 1519 bytes */ static const unsigned char join_icon_text_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71, 0xde, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0d, 0xd7, 0x00, 0x00, 0x0d, 0xd7, 0x01, 0x42, 0x28, 0x9b, 0x78, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x03, 0x16, 0x14, 0x2c, 0x30, 0x04, 0xac, 0x16, 0xdf, 0x00, 0x00, 0x05, 0x6f, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x98, 0x5f, 0x68, 0x53, 0x57, 0x1c, 0xc7, 0xbf, 0xf9, 0x63, 0x6e, 0xda, 0xd2, 0xe6, 0x52, 0xc6, 0xa6, 0x38, 0x8a, 0xb8, 0xe4, 0x25, 0x5a, 0xd6, 0xb2, 0xb5, 0x94, 0x89, 0xd2, 0xb1, 0x87, 0x09, 0xed, 0xcb, 0x10, 0x1f, 0x2a, 0xb4, 0x14, 0xf7, 0xa2, 0xac, 0xd0, 0xf8, 0x8f, 0x46, 0xb7, 0x87, 0x29, 0x32, 0x99, 0x79, 0x98, 0xc8, 0x46, 0x87, 0xf8, 0x07, 0x2a, 0x68, 0x51, 0x1c, 0xad, 0x60, 0xa1, 0x5b, 0x06, 0xc6, 0xb2, 0x87, 0xda, 0xa2, 0xb9, 0xf8, 0xa0, 0x09, 0x63, 0xd6, 0x87, 0xae, 0xcc, 0xda, 0xd6, 0x55, 0x93, 0xdb, 0xe4, 0x26, 0xf7, 0xbb, 0x97, 0x9b, 0x92, 0x86, 0xa4, 0xde, 0xb8, 0x6a, 0xe3, 0x76, 0x3e, 0xf0, 0x7b, 0x39, 0xe7, 0xdc, 0xdf, 0xbd, 0xe7, 0x7b, 0xce, 0xef, 0x77, 0x7e, 0xe7, 0x02, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0xf8, 0xff, 0x60, 0x79, 0x8d, 0xef, 0xe2, 0x2a, 0xbe, 0xbb, 0x20, 0xd6, 0x15, 0x98, 0x54, 0x3e, 0x8b, 0x01, 0x18, 0x06, 0xf0, 0xc1, 0x92, 0xc1, 0x24, 0x48, 0xfe, 0xa7, 0x76, 0x10, 0x73, 0x49, 0x26, 0x93, 0x8c, 0x44, 0x22, 0xdc, 0xbf, 0x7f, 0x3f, 0x2d, 0x16, 0x0b, 0x01, 0x34, 0xe5, 0x8e, 0xcd, 0xb3, 0x1b, 0xde, 0x7c, 0x01, 0x32, 0xab, 0xbf, 0x6e, 0xdd, 0x3a, 0x0e, 0x0d, 0x0d, 0x91, 0x24, 0xfd, 0x7e, 0x3f, 0x01, 0xfc, 0xf6, 0x02, 0x01, 0xea, 0x73, 0x76, 0x8f, 0x06, 0x40, 0x01, 0xd0, 0x6e, 0x84, 0x49, 0x5f, 0x4e, 0xff, 0xbb, 0xc6, 0x73, 0x6f, 0xe5, 0xb4, 0x5f, 0x2d, 0x05, 0x01, 0xac, 0x00, 0x8e, 0xb9, 0xdd, 0x6e, 0x92, 0xe4, 0xc4, 0xc4, 0x44, 0x26, 0x1c, 0x96, 0x13, 0xe0, 0x23, 0x9f, 0xcf, 0x47, 0x92, 0x4c, 0xa7, 0xd3, 0x9c, 0x9a, 0x9a, 0xe2, 0x99, 0x33, 0x67, 0x58, 0x55, 0x55, 0x45, 0x00, 0x9f, 0x03, 0xe8, 0x1b, 0x1b, 0x1b, 0x23, 0x49, 0xee, 0xdc, 0xb9, 0x93, 0x00, 0xbe, 0x34, 0x9e, 0x6b, 0xdb, 0xbe, 0x7d, 0x3b, 0x49, 0x52, 0x51, 0x94, 0x92, 0x11, 0x00, 0x00, 0xd6, 0xd8, 0xed, 0xf6, 0xc5, 0x70, 0x30, 0x23, 0xc0, 0x91, 0x23, 0x47, 0xe8, 0xf5, 0x7a, 0xe9, 0x74, 0x3a, 0xb9, 0x7b, 0xf7, 0x6e, 0x92, 0xe4, 0x85, 0x0b, 0x17, 0x08, 0x20, 0x02, 0xa0, 0xaf, 0xb3, 0xb3, 0x93, 0x24, 0x39, 0x38, 0x38, 0x98, 0xf1, 0x67, 0x01, 0x70, 0xa7, 0xb7, 0xb7, 0x97, 0x24, 0x79, 0xe8, 0xd0, 0xa1, 0xd2, 0xda, 0x01, 0x1e, 0x8f, 0xc7, 0xec, 0x0e, 0x58, 0x03, 0xe0, 0x2b, 0x00, 0x7f, 0x00, 0x48, 0x03, 0xa0, 0xcd, 0x66, 0x23, 0x49, 0x4e, 0x4f, 0x4f, 0xd3, 0x68, 0x73, 0x3b, 0x9d, 0x4e, 0xce, 0xcc, 0xcc, 0x30, 0x99, 0x4c, 0xb2, 0xba, 0xba, 0x9a, 0x00, 0xbc, 0x16, 0x8b, 0x85, 0x93, 0x93, 0x93, 0x4c, 0xa7, 0xd3, 0x5c, 0xbf, 0x7e, 0x3d, 0x01, 0x34, 0x96, 0x44, 0x0e, 0x58, 0xbb, 0x76, 0x6d, 0x31, 0x39, 0xa0, 0xcf, 0xe3, 0xf1, 0xf0, 0xfa, 0xf5, 0xeb, 0x9c, 0x9d, 0x9d, 0xa5, 0xae, 0xeb, 0x8b, 0x63, 0x74, 0x5d, 0xcf, 0x1e, 0xf7, 0x7b, 0x20, 0x10, 0x20, 0x49, 0xee, 0xd9, 0xb3, 0x87, 0x00, 0x7e, 0x68, 0x68, 0x68, 0x20, 0x49, 0x06, 0x83, 0xc1, 0x4c, 0xde, 0xb0, 0x95, 0xc4, 0x29, 0xa0, 0x69, 0x1a, 0xa3, 0xd1, 0x28, 0x0f, 0x1c, 0x38, 0x60, 0xe6, 0x14, 0x88, 0x65, 0xe2, 0xbb, 0xab, 0xab, 0x8b, 0x92, 0x24, 0xd1, 0x6a, 0xb5, 0xe6, 0x1b, 0xd7, 0xba, 0x71, 0xe3, 0x46, 0xea, 0xba, 0xce, 0x91, 0x91, 0x11, 0x02, 0x48, 0x1f, 0x3f, 0x7e, 0x9c, 0x24, 0xd9, 0xd9, 0xd9, 0x49, 0x00, 0x81, 0x92, 0x39, 0x05, 0x0c, 0x53, 0x01, 0xfc, 0x0c, 0xe0, 0xc3, 0x17, 0xe4, 0x8b, 0x58, 0x32, 0x99, 0x24, 0x49, 0x96, 0x95, 0x95, 0x11, 0xc0, 0xd7, 0x5e, 0xaf, 0xb7, 0x50, 0xa8, 0xa4, 0x87, 0x86, 0x86, 0xa8, 0xeb, 0x3a, 0x37, 0x6c, 0xd8, 0xc0, 0x7b, 0xf7, 0xee, 0x31, 0x1e, 0x8f, 0xb3, 0xb2, 0xb2, 0x92, 0x00, 0xdc, 0xa5, 0x22, 0x40, 0xb1, 0x63, 0x63, 0x77, 0xef, 0xde, 0x25, 0x49, 0xee, 0xda, 0xb5, 0x8b, 0xb2, 0x2c, 0x2f, 0xdc, 0xb8, 0x71, 0xa3, 0x90, 0xcf, 0x63, 0xad, 0xad, 0xad, 0x24, 0xc9, 0x73, 0xe7, 0xce, 0x91, 0x24, 0xfb, 0xfb, 0xfb, 0x09, 0x60, 0x66, 0x35, 0xab, 0xca, 0x7f, 0x2b, 0x40, 0x7f, 0x6d, 0x6d, 0x2d, 0xc7, 0xc7, 0xc7, 0xa9, 0x69, 0x1a, 0x1f, 0x3d, 0x7a, 0xa4, 0xef, 0xdd, 0xbb, 0xb7, 0x90, 0xcf, 0x77, 0xac, 0x56, 0x2b, 0x1f, 0x3e, 0x7c, 0xb8, 0xd8, 0xdf, 0xd2, 0xd2, 0x42, 0x00, 0xdd, 0xab, 0x5a, 0x08, 0xe5, 0x58, 0xb1, 0x63, 0x9d, 0x00, 0x2e, 0x1a, 0x21, 0x93, 0xb1, 0xe5, 0x7c, 0x8e, 0x1c, 0x3e, 0x7c, 0x98, 0x24, 0xf9, 0xf8, 0xf1, 0x63, 0xda, 0xed, 0x76, 0x02, 0x78, 0xfb, 0xff, 0x70, 0x69, 0x0b, 0x00, 0x60, 0x79, 0x79, 0x39, 0xaf, 0x5d, 0xbb, 0x46, 0x92, 0x3c, 0x7a, 0xf4, 0x28, 0x01, 0xdc, 0x7f, 0x63, 0x4b, 0xe8, 0x3c, 0xab, 0xbc, 0xdc, 0xca, 0x07, 0x82, 0xc1, 0xe0, 0xe2, 0xca, 0x9f, 0x3a, 0x75, 0x2a, 0xb3, 0xfa, 0x1f, 0xbf, 0xea, 0x0f, 0x6d, 0x02, 0x70, 0xc5, 0x48, 0x34, 0xd9, 0x76, 0x25, 0xeb, 0x78, 0x5b, 0xa9, 0xdc, 0xb1, 0x5c, 0x3e, 0x09, 0xe4, 0x88, 0x73, 0x1f, 0xc0, 0x67, 0xaf, 0x7a, 0xf2, 0xa7, 0x1d, 0x0e, 0x87, 0xea, 0xf7, 0xfb, 0xb5, 0x70, 0x38, 0xac, 0xc7, 0xe3, 0x71, 0x3d, 0x1e, 0x8f, 0xeb, 0xe1, 0x70, 0x58, 0xf7, 0xfb, 0xfd, 0x29, 0x87, 0xc3, 0x91, 0x00, 0x70, 0xfa, 0x35, 0x09, 0xf0, 0xda, 0x69, 0x92, 0x24, 0x89, 0xa1, 0x50, 0x88, 0x9a, 0xa6, 0xd1, 0xe7, 0xf3, 0x25, 0x65, 0x59, 0x9e, 0x95, 0x65, 0x79, 0x76, 0xdf, 0xbe, 0x7d, 0xa9, 0x54, 0x2a, 0xc5, 0x50, 0x28, 0x44, 0x87, 0xc3, 0xb1, 0xa4, 0xd0, 0xc9, 0xb1, 0xb9, 0x2c, 0xfb, 0x0b, 0xc0, 0x37, 0xc6, 0x79, 0x5e, 0x50, 0x00, 0x13, 0x61, 0xb1, 0x9c, 0x4f, 0x00, 0xa8, 0x02, 0xf0, 0x2d, 0x80, 0x3f, 0x01, 0xfc, 0x9d, 0x65, 0x17, 0xb3, 0x6e, 0x91, 0xa6, 0xb8, 0xda, 0xd3, 0xd3, 0x43, 0x92, 0x3c, 0x71, 0xe2, 0x44, 0xa6, 0xb0, 0x79, 0xdf, 0xb8, 0xba, 0x26, 0x4e, 0x9e, 0x3c, 0x49, 0x92, 0xec, 0xe9, 0xe9, 0xa1, 0x11, 0x0e, 0x4b, 0x26, 0xb5, 0x63, 0xc7, 0x0e, 0x8e, 0x8e, 0x8e, 0x6a, 0xaa, 0xaa, 0xea, 0xcf, 0x9f, 0x3f, 0xe7, 0xf0, 0xf0, 0x30, 0x3d, 0x1e, 0x0f, 0x01, 0x9c, 0x2f, 0x72, 0x07, 0x14, 0xe3, 0x53, 0x06, 0xa0, 0x6e, 0xdd, 0xba, 0x35, 0x11, 0x0c, 0x06, 0xd3, 0xf3, 0xf3, 0xf3, 0xfa, 0xc2, 0xc2, 0x02, 0xc7, 0xc7, 0xc7, 0x33, 0xb7, 0x48, 0x02, 0x78, 0xcf, 0xac, 0x00, 0x73, 0x8a, 0xa2, 0x90, 0x24, 0xbd, 0x5e, 0x2f, 0x01, 0x7c, 0x9a, 0xd5, 0xd7, 0xb2, 0x79, 0xf3, 0x66, 0x92, 0x64, 0x38, 0x1c, 0xce, 0x14, 0x22, 0x4b, 0x3e, 0x76, 0x6c, 0x6c, 0x8c, 0x9b, 0x36, 0x6d, 0x9a, 0x97, 0x24, 0x69, 0xee, 0xe0, 0xc1, 0x83, 0x24, 0xc9, 0xd1, 0xd1, 0x51, 0x02, 0x48, 0xbc, 0xac, 0x00, 0x26, 0x7c, 0x9e, 0x6e, 0x6e, 0x6e, 0xa6, 0xa6, 0x69, 0xbc, 0x79, 0xf3, 0x26, 0x6b, 0x6a, 0x6a, 0x9e, 0x55, 0x56, 0x56, 0xce, 0x9f, 0x3d, 0x7b, 0x96, 0x24, 0xd9, 0xd1, 0xd1, 0x41, 0xe3, 0x2f, 0x95, 0x39, 0x01, 0x54, 0x55, 0x25, 0xc9, 0xcc, 0x36, 0x97, 0xb2, 0xfa, 0x9c, 0x92, 0x24, 0x91, 0x24, 0xe3, 0xf1, 0x78, 0x5e, 0x01, 0xea, 0xeb, 0xeb, 0x69, 0xfc, 0xc8, 0x68, 0xa8, 0xa8, 0xa8, 0x20, 0x49, 0xa6, 0x52, 0x29, 0xd3, 0x93, 0xcd, 0xd7, 0x66, 0xc2, 0xe7, 0x74, 0x28, 0x14, 0x22, 0x49, 0xd6, 0xd6, 0xd6, 0x2e, 0x86, 0x4d, 0x75, 0x75, 0x35, 0x49, 0x32, 0x12, 0x89, 0x64, 0x8b, 0xf5, 0x6a, 0x05, 0xb0, 0xd9, 0x6c, 0x04, 0x50, 0xf6, 0xb2, 0x93, 0xcd, 0xd7, 0x66, 0xc2, 0xe7, 0x74, 0x2c, 0x16, 0x63, 0x21, 0x0c, 0xb1, 0x12, 0xa6, 0x7f, 0x8a, 0x46, 0xa3, 0x51, 0x00, 0x80, 0xdb, 0xed, 0x06, 0x80, 0xe6, 0xac, 0xae, 0x4f, 0x3c, 0x1e, 0xcf, 0x92, 0x31, 0xb9, 0xa4, 0xd3, 0x69, 0x18, 0x79, 0x63, 0xc5, 0x28, 0xc6, 0xa7, 0x2c, 0xcb, 0xb0, 0x58, 0x2c, 0x4b, 0xcc, 0x6e, 0xb7, 0x17, 0xf5, 0x57, 0x38, 0x78, 0xe9, 0xd2, 0x25, 0x00, 0x40, 0x7b, 0x7b, 0x3b, 0x00, 0x0c, 0x18, 0x49, 0xb0, 0x0e, 0xc0, 0x4f, 0x1d, 0x1d, 0x1d, 0x00, 0x80, 0xcb, 0x97, 0x2f, 0x03, 0xc0, 0xaf, 0xa5, 0x52, 0x5d, 0xdd, 0xbe, 0x7d, 0x1b, 0x00, 0xb0, 0x6d, 0xdb, 0x36, 0x00, 0xf8, 0x05, 0x40, 0xb9, 0x71, 0x53, 0xfc, 0xd1, 0xb0, 0xf3, 0x45, 0x1d, 0x83, 0xb7, 0x6e, 0xdd, 0xa2, 0xa6, 0x69, 0xec, 0xee, 0xee, 0x4e, 0xba, 0x5c, 0xae, 0xa7, 0x2e, 0x97, 0xeb, 0xa9, 0xcf, 0xe7, 0x2b, 0x78, 0x0c, 0x16, 0x38, 0xc7, 0x57, 0x24, 0x04, 0x4c, 0xf8, 0xfc, 0x6e, 0xcb, 0x96, 0x2d, 0x4c, 0x24, 0x12, 0x8c, 0x46, 0xa3, 0xac, 0xab, 0xab, 0x5b, 0xb0, 0xdb, 0xed, 0x6a, 0x4d, 0x4d, 0xcd, 0x42, 0x57, 0x57, 0xd7, 0xc4, 0x83, 0x07, 0x0f, 0xa6, 0x00, 0xf4, 0x16, 0x23, 0xe8, 0xf7, 0x92, 0x24, 0xa9, 0x7e, 0xbf, 0x5f, 0x53, 0x14, 0x45, 0x57, 0x55, 0x55, 0x57, 0x55, 0x55, 0x57, 0x14, 0xa5, 0x50, 0x21, 0xb4, 0xda, 0x02, 0x54, 0x01, 0x78, 0xd6, 0xd8, 0xd8, 0x18, 0x1b, 0x1c, 0x1c, 0xd4, 0x9e, 0x3c, 0x79, 0xa2, 0x6b, 0x9a, 0xc6, 0xc9, 0xc9, 0x49, 0x7d, 0x60, 0x60, 0x60, 0xb6, 0xad, 0xad, 0x6d, 0xa0, 0x58, 0x01, 0x32, 0xa5, 0xf0, 0xd5, 0x9c, 0x02, 0x64, 0xce, 0x68, 0x6b, 0x32, 0x79, 0x33, 0x34, 0x5b, 0xf7, 0x17, 0x73, 0x3f, 0x28, 0xd4, 0x5e, 0x01, 0xc0, 0x0f, 0x20, 0x9a, 0x73, 0xc3, 0xbc, 0x03, 0xe0, 0x0b, 0x00, 0x2e, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0xf8, 0x07, 0x2a, 0xf1, 0x10, 0xf2, 0x07, 0x08, 0xeb, 0x83, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/major.xpm0000600000176000000410000000062712105760300021316 0ustar buildbotwww-data00000000000000/* XPM */ static const char * major_xpm[] = { "16 16 2 1", " c None", ". c #000000", ". ", " . ", " . ", " . ", " . ", " . ", " . ", " . ", " . ", " . ", " . ", " . ", " . ", " . ", " . ", " . "}; springlobby-0.169/src/images/map_select_1.png.h0000600000176000000410000001046312105760300022747 0ustar buildbotwww-data00000000000000/* map_select_1.png - 674 bytes */ static const unsigned char map_select_1_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x62, 0x08, 0x06, 0x00, 0x00, 0x00, 0xab, 0xa5, 0x06, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64, 0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0e, 0x35, 0x00, 0x00, 0x0e, 0x35, 0x01, 0x46, 0x42, 0x14, 0x5b, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63, 0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x02, 0x1f, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0xed, 0xdd, 0x31, 0x4e, 0x5b, 0x41, 0x14, 0x46, 0xe1, 0x33, 0x0f, 0x5a, 0xb3, 0x04, 0x56, 0x00, 0x48, 0x09, 0x54, 0xd0, 0x21, 0x6f, 0x84, 0x15, 0xa5, 0x76, 0xc1, 0x72, 0xa0, 0xc2, 0x29, 0x40, 0x50, 0x5b, 0x2c, 0x81, 0x1a, 0x73, 0x53, 0x3c, 0x27, 0x0a, 0x60, 0x44, 0x93, 0x78, 0x7e, 0x99, 0xf3, 0x49, 0xb7, 0xb0, 0x35, 0xc5, 0xd5, 0x1c, 0x3d, 0xc9, 0xaf, 0x72, 0xab, 0x2a, 0xd6, 0x69, 0xad, 0x1d, 0x01, 0x67, 0xc0, 0xf1, 0x6a, 0x0e, 0x80, 0xdd, 0xb5, 0x87, 0xf5, 0x91, 0x67, 0xe0, 0x1e, 0xb8, 0x01, 0xe6, 0xc0, 0x55, 0x55, 0xdd, 0xae, 0x3d, 0x59, 0x55, 0xaf, 0x06, 0x98, 0x00, 0x33, 0xa0, 0x9c, 0xff, 0x32, 0x33, 0x60, 0xf2, 0xee, 0xde, 0xdf, 0x44, 0x98, 0x02, 0x8b, 0x80, 0x65, 0xb7, 0x7d, 0x16, 0xc0, 0x74, 0x6d, 0x08, 0xe0, 0x1c, 0x78, 0x09, 0x58, 0xf2, 0xab, 0xcc, 0x0b, 0x70, 0xfe, 0xfb, 0xfe, 0x5b, 0x55, 0xd1, 0x5a, 0xdb, 0x03, 0xee, 0x80, 0x7d, 0xb4, 0x49, 0x8f, 0xc0, 0x61, 0x55, 0x3d, 0x0d, 0xab, 0x2f, 0x7e, 0x60, 0x84, 0x1e, 0xf6, 0x19, 0xef, 0x9e, 0x06, 0x7c, 0x03, 0x7e, 0x76, 0x5d, 0x47, 0xdf, 0x07, 0xe0, 0xb4, 0xf7, 0x16, 0xe2, 0x74, 0x00, 0x4e, 0x7a, 0x6f, 0x21, 0x4e, 0x06, 0xc6, 0x97, 0x35, 0xf5, 0x75, 0xdc, 0x18, 0xdf, 0xfe, 0x76, 0x7a, 0x6f, 0xf2, 0xc5, 0x2d, 0x1b, 0xe3, 0x6f, 0x5a, 0x75, 0x36, 0x7c, 0x7e, 0x44, 0x9b, 0x60, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x61, 0x88, 0x10, 0x86, 0x08, 0x31, 0x00, 0xcb, 0xde, 0x4b, 0x88, 0xe5, 0x00, 0x3c, 0xf4, 0xde, 0x42, 0x3c, 0x0c, 0xc0, 0xbc, 0xf7, 0x16, 0x62, 0x3e, 0x00, 0x37, 0xbd, 0xb7, 0x10, 0x37, 0x03, 0x70, 0xdd, 0x7b, 0x0b, 0x71, 0x4d, 0x55, 0x01, 0x5c, 0x32, 0xfe, 0xc1, 0xb8, 0xb3, 0xf9, 0xb9, 0xac, 0x2a, 0x5a, 0x55, 0xd1, 0x5a, 0xdb, 0x03, 0xee, 0x80, 0xfd, 0x4f, 0xca, 0xe9, 0xdf, 0x7a, 0x04, 0x0e, 0xab, 0xea, 0x69, 0x00, 0xa8, 0xaa, 0x27, 0xe0, 0x82, 0xb1, 0x90, 0x36, 0xa3, 0x80, 0x8b, 0xd5, 0xdd, 0x43, 0x55, 0xfd, 0x19, 0x60, 0x0a, 0x2c, 0xe8, 0xff, 0xb8, 0x6e, 0xfb, 0x2c, 0x80, 0xe9, 0xab, 0xbb, 0xff, 0xfb, 0xc3, 0x2a, 0xc6, 0x04, 0x98, 0x05, 0x2c, 0xbb, 0xad, 0x33, 0x03, 0x26, 0x6f, 0xef, 0xbd, 0xad, 0x2e, 0xff, 0x9d, 0xd6, 0xda, 0x11, 0x70, 0x06, 0x1c, 0xaf, 0xe6, 0x00, 0xd8, 0x5d, 0x7b, 0x58, 0x1f, 0x79, 0x06, 0xee, 0x19, 0x5f, 0x11, 0xe6, 0xc0, 0x55, 0x55, 0xdd, 0xae, 0x3b, 0xf8, 0x0b, 0xa1, 0x12, 0xc6, 0xf6, 0x5f, 0xd5, 0x11, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/map_select_2.png.h0000600000176000000410000001307212105760300022747 0ustar buildbotwww-data00000000000000/* map_select_2.png - 876 bytes */ static const unsigned char map_select_2_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x62, 0x08, 0x06, 0x00, 0x00, 0x00, 0xab, 0xa5, 0x06, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64, 0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0e, 0x21, 0x00, 0x00, 0x0e, 0x21, 0x01, 0xf0, 0xab, 0x83, 0x83, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63, 0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x02, 0xe9, 0x49, 0x44, 0x41, 0x54, 0x78, 0x9c, 0xed, 0xd7, 0xb1, 0x4b, 0x55, 0x71, 0x18, 0xc6, 0xf1, 0xef, 0x7b, 0x13, 0x2a, 0x42, 0xc4, 0x29, 0x70, 0x0a, 0x0a, 0x07, 0x17, 0xe1, 0x7a, 0x11, 0x52, 0x10, 0x5b, 0x6a, 0xed, 0x5f, 0xa8, 0xd6, 0x8b, 0x44, 0xd0, 0x2c, 0x3a, 0x37, 0x84, 0x38, 0xdb, 0xbf, 0xd0, 0x5a, 0x4b, 0xa0, 0x68, 0x20, 0x57, 0xc5, 0xa5, 0x41, 0x0a, 0x9a, 0x84, 0x26, 0x07, 0x8d, 0x1a, 0x8a, 0xb7, 0xe1, 0xfe, 0x6e, 0x98, 0x1a, 0x2d, 0x79, 0xcf, 0xc3, 0x3d, 0xcf, 0x07, 0x0e, 0x67, 0x38, 0x47, 0x79, 0x79, 0xbf, 0xf7, 0x5e, 0xce, 0x89, 0xcc, 0xe4, 0x22, 0x11, 0x31, 0x06, 0xcc, 0x01, 0xad, 0x72, 0x34, 0x81, 0xe1, 0x0b, 0x6f, 0xb6, 0xbf, 0x39, 0x06, 0x76, 0x81, 0x4e, 0x39, 0xd6, 0x33, 0xf3, 0xf0, 0xa2, 0x1b, 0xe3, 0x6c, 0x88, 0x88, 0x08, 0xa0, 0x0d, 0x2c, 0x01, 0xeb, 0xe5, 0x1f, 0xed, 0x94, 0xf3, 0xd1, 0xe5, 0xcd, 0x3c, 0x90, 0x46, 0xe9, 0x7e, 0x80, 0xa7, 0xca, 0x79, 0x0e, 0x58, 0x04, 0x56, 0xf3, 0xcc, 0xe2, 0xff, 0x08, 0x11, 0x11, 0xb7, 0x80, 0x35, 0xe0, 0x06, 0xf0, 0x28, 0x33, 0x3f, 0xf4, 0x67, 0xde, 0x7a, 0x88, 0x88, 0x09, 0xe0, 0x15, 0xf0, 0x15, 0x78, 0x9c, 0x99, 0x9f, 0x7b, 0xd7, 0x1a, 0xa7, 0x6e, 0xba, 0x0d, 0x6c, 0x03, 0x6f, 0x80, 0x19, 0x47, 0xf8, 0xff, 0xca, 0x4e, 0x67, 0x80, 0xb7, 0xc0, 0x76, 0xd9, 0x39, 0x50, 0xbe, 0x11, 0xe5, 0xe7, 0xe8, 0x1d, 0xf0, 0x3a, 0x33, 0x5f, 0x56, 0x34, 0x67, 0xad, 0x44, 0xc4, 0x53, 0xe0, 0x21, 0x70, 0x2f, 0x33, 0xb3, 0xf7, 0x8d, 0x68, 0x03, 0x43, 0xc0, 0x4a, 0x65, 0x93, 0xd5, 0xcf, 0x0a, 0xdd, 0x9d, 0xb7, 0x01, 0x02, 0x18, 0x03, 0xf6, 0x81, 0xd9, 0xcc, 0x3c, 0xa8, 0x70, 0xb0, 0xda, 0x89, 0x88, 0x71, 0x60, 0x13, 0x98, 0x6c, 0x00, 0xf3, 0xc0, 0x86, 0x23, 0xf4, 0x5f, 0xd9, 0xf9, 0x06, 0x30, 0xdf, 0xa0, 0xfb, 0x8e, 0xb0, 0x53, 0xed, 0x48, 0xb5, 0xb6, 0x03, 0xb4, 0x7a, 0x21, 0x76, 0x2b, 0x1e, 0xa6, 0xce, 0x76, 0x81, 0x56, 0xd0, 0x7d, 0xfb, 0xbb, 0x93, 0x99, 0x5f, 0x2a, 0x1e, 0xa8, 0x96, 0x22, 0xe2, 0x26, 0xf0, 0x31, 0x80, 0x04, 0xae, 0x67, 0xe6, 0xf7, 0x8a, 0x67, 0xaa, 0xa5, 0x88, 0xb8, 0x06, 0x7c, 0x6b, 0xfc, 0xf3, 0x4e, 0xeb, 0x0b, 0x87, 0x10, 0xe1, 0x10, 0x22, 0x1c, 0x42, 0x84, 0x43, 0x88, 0x70, 0x08, 0x11, 0x0e, 0x21, 0xc2, 0x21, 0x44, 0x38, 0x84, 0x08, 0x87, 0x10, 0xe1, 0x10, 0x22, 0x1c, 0x42, 0x84, 0x43, 0x88, 0x70, 0x08, 0x11, 0x0e, 0x21, 0xc2, 0x21, 0x44, 0x38, 0x84, 0x08, 0x87, 0x10, 0xe1, 0x10, 0x22, 0x1c, 0x42, 0x84, 0x43, 0x88, 0x70, 0x08, 0x11, 0x0e, 0x21, 0xc2, 0x21, 0x44, 0x38, 0x84, 0x08, 0x87, 0x10, 0xe1, 0x10, 0x22, 0x1c, 0x42, 0x84, 0x43, 0x88, 0x70, 0x08, 0x11, 0x0e, 0x21, 0xc2, 0x21, 0x44, 0x38, 0x84, 0x08, 0x87, 0x10, 0xe1, 0x10, 0x22, 0x1c, 0x42, 0x84, 0x43, 0x88, 0x70, 0x08, 0x11, 0x0e, 0x21, 0xc2, 0x21, 0x44, 0x38, 0x84, 0x08, 0x87, 0x10, 0xe1, 0x10, 0x22, 0x1c, 0x42, 0x84, 0x43, 0x88, 0x70, 0x08, 0x11, 0x0e, 0x21, 0xc2, 0x21, 0x44, 0x38, 0x84, 0x08, 0x87, 0x10, 0xe1, 0x10, 0x22, 0x1c, 0x42, 0x84, 0x43, 0x88, 0x70, 0x08, 0x11, 0x0e, 0x21, 0xc2, 0x21, 0x44, 0x38, 0x84, 0x08, 0x87, 0x10, 0xe1, 0x10, 0x22, 0x1c, 0x42, 0x84, 0x43, 0x88, 0x70, 0x08, 0x11, 0x0e, 0x21, 0xc2, 0x21, 0x44, 0x38, 0x84, 0x08, 0x87, 0x10, 0xe1, 0x10, 0x22, 0x1c, 0x42, 0x84, 0x43, 0x88, 0x70, 0x08, 0x11, 0x0e, 0x21, 0xc2, 0x21, 0x44, 0x38, 0x84, 0x08, 0x87, 0x10, 0xe1, 0x10, 0x22, 0x1a, 0xc0, 0x09, 0x30, 0x52, 0xf5, 0x20, 0x35, 0x36, 0x02, 0x9c, 0x34, 0x80, 0x3d, 0xa0, 0x59, 0xf1, 0x30, 0x75, 0xd6, 0x04, 0xf6, 0x1a, 0x40, 0x07, 0x87, 0xa8, 0x52, 0x13, 0xe8, 0xf4, 0x42, 0x4c, 0x55, 0x3c, 0x4c, 0x9d, 0x4d, 0x01, 0x9d, 0x00, 0xc6, 0x80, 0x7d, 0x60, 0x36, 0x33, 0x0f, 0xaa, 0x9d, 0xa9, 0x5e, 0x22, 0x62, 0x1c, 0xd8, 0x04, 0x26, 0x1b, 0x99, 0x79, 0x08, 0x2c, 0x03, 0x6b, 0x11, 0xe1, 0xa7, 0xa8, 0x3e, 0x29, 0xbb, 0x5e, 0x03, 0x96, 0x33, 0xf3, 0xb0, 0xb7, 0xf8, 0x55, 0xe0, 0x07, 0xb0, 0x50, 0xd9, 0x64, 0xf5, 0xb3, 0x40, 0x77, 0xe7, 0xab, 0x00, 0x43, 0x00, 0x99, 0x99, 0x11, 0xf1, 0x04, 0x78, 0x1f, 0x11, 0x57, 0x81, 0x17, 0x99, 0xf9, 0xb3, 0xba, 0x19, 0x07, 0x57, 0x44, 0x5c, 0x01, 0x9e, 0x03, 0xcf, 0x80, 0xbb, 0x99, 0x99, 0x70, 0xea, 0x85, 0x2e, 0x33, 0x3f, 0x01, 0xd3, 0xc0, 0x03, 0x60, 0x2b, 0x22, 0x26, 0xaa, 0x18, 0x74, 0x90, 0x95, 0x9d, 0x6e, 0x01, 0xf7, 0x81, 0xe9, 0xb2, 0xf3, 0xee, 0xb5, 0x12, 0xe4, 0xf4, 0xcd, 0x01, 0xb4, 0x81, 0x25, 0x60, 0x1d, 0xd8, 0x05, 0x76, 0xca, 0xf9, 0xa8, 0x4f, 0x33, 0x0f, 0x8a, 0x51, 0xba, 0x8f, 0xa7, 0x53, 0xe5, 0x3c, 0x07, 0x2c, 0x02, 0xab, 0x79, 0x66, 0xf1, 0xe7, 0x42, 0xfc, 0xbe, 0x10, 0x31, 0x56, 0xfe, 0xb0, 0x55, 0x8e, 0x26, 0x30, 0x7c, 0x79, 0x33, 0x0f, 0xa4, 0x63, 0xba, 0x1f, 0xe0, 0x4e, 0x39, 0xd6, 0xcb, 0xc3, 0xd1, 0x39, 0xbf, 0x00, 0x08, 0xf8, 0xb2, 0x78, 0x76, 0xa5, 0x72, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/minor.xpm0000600000176000000410000000062712105760300021332 0ustar buildbotwww-data00000000000000/* XPM */ static const char * minor_xpm[] = { "16 16 2 1", " c None", ". c #000000", " . ", " . ", " . ", " . ", " . ", " . ", " . ", ". ", " . ", " . ", " . ", " . ", " . ", " . ", " . ", " "}; springlobby-0.169/src/images/nexists.xpm0000600000176000000410000000065012105760300021677 0ustar buildbotwww-data00000000000000/* XPM */ static const char * nexists_xpm[] = { "16 16 3 1", " c None", ". c #000000", "+ c #C8C8C8", " ", " ", " ", " ", " ", " . . ", " . . ", " +.. + ", " .. + ", " . +. ", " . ++. ", " + + ", " + + ", " ", " ", " "}; springlobby-0.169/src/images/no1_icon.png.h0000600000176000000410000000530512105760300022117 0ustar buildbotwww-data00000000000000/* no1_icon.png - 417 bytes */ static const unsigned char no1_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1e, 0x14, 0x25, 0x1e, 0x7e, 0x2c, 0x54, 0xa6, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0x0e, 0x17, 0x00, 0x00, 0x00, 0xfc, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0xa5, 0x53, 0xcb, 0x6e, 0xc2, 0x30, 0x10, 0x9c, 0x75, 0x12, 0xe1, 0x14, 0x24, 0x1f, 0x7a, 0x28, 0x87, 0xfe, 0x41, 0x3f, 0xa0, 0x3f, 0xda, 0xff, 0xe8, 0x7f, 0x70, 0xe7, 0xce, 0x01, 0x09, 0x22, 0x25, 0x52, 0x23, 0x81, 0x10, 0x50, 0x67, 0x7b, 0x70, 0xe2, 0xc4, 0x76, 0x6c, 0x90, 0x3a, 0x17, 0x3f, 0x66, 0x35, 0x3b, 0xbb, 0x5e, 0xd3, 0x6f, 0xf3, 0xfd, 0x85, 0x10, 0x1d, 0x00, 0x81, 0x38, 0x2c, 0x9f, 0x03, 0x00, 0x15, 0x6f, 0xef, 0x61, 0x0c, 0x11, 0xc0, 0x3c, 0xae, 0x21, 0xf8, 0x5e, 0xed, 0x73, 0x7b, 0xca, 0xd4, 0x1a, 0x00, 0x01, 0xe0, 0x6c, 0xf9, 0xf1, 0xe9, 0x07, 0xeb, 0xf3, 0x76, 0x03, 0x80, 0x87, 0x18, 0xe8, 0xf6, 0x68, 0x1d, 0x98, 0x2c, 0x00, 0x65, 0xab, 0xd7, 0x98, 0xe7, 0x29, 0xc7, 0xfa, 0x54, 0x0f, 0xfb, 0xbe, 0xce, 0x89, 0x45, 0x21, 0x55, 0x77, 0xab, 0x9a, 0xee, 0x56, 0xd5, 0x8e, 0x82, 0x90, 0x0a, 0x42, 0x2a, 0xf6, 0xaa, 0x71, 0x1a, 0x65, 0x49, 0x92, 0x2f, 0x20, 0xb9, 0x74, 0x2d, 0x98, 0x33, 0x19, 0xb3, 0xb3, 0x02, 0xe4, 0x90, 0x62, 0xb1, 0x98, 0x6d, 0x5c, 0xc2, 0xc1, 0xc0, 0x50, 0xe2, 0xf9, 0x02, 0x4e, 0xa4, 0xd4, 0x9f, 0x81, 0xc0, 0x3f, 0x11, 0x17, 0xe8, 0xae, 0xd7, 0xd9, 0x1a, 0xbc, 0x26, 0xe6, 0x33, 0x4d, 0x64, 0x51, 0xa8, 0x32, 0xc8, 0x64, 0xee, 0x4a, 0x7d, 0xd9, 0xfd, 0x24, 0x7b, 0xc0, 0xfa, 0xd2, 0xa6, 0x2c, 0x8f, 0x0e, 0xcc, 0x26, 0x77, 0x6d, 0x9f, 0xeb, 0x7e, 0x6c, 0x6b, 0x3b, 0xb2, 0xde, 0xca, 0xfa, 0x84, 0xe9, 0xf0, 0x8d, 0x02, 0xba, 0x3d, 0xc4, 0x72, 0x8e, 0x9f, 0xca, 0x9b, 0xda, 0x41, 0x80, 0xef, 0xd5, 0xfe, 0xd1, 0xb7, 0x8d, 0xe1, 0x0f, 0xa4, 0x08, 0x5b, 0xac, 0xe6, 0x58, 0x78, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/no2_icon.png.h0000600000176000000410000000540412105760300022120 0ustar buildbotwww-data00000000000000/* no2_icon.png - 427 bytes */ static const unsigned char no2_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1e, 0x14, 0x25, 0x2c, 0xb6, 0xfb, 0x05, 0x26, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0x0e, 0x17, 0x00, 0x00, 0x01, 0x06, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x8d, 0x53, 0xdd, 0x6a, 0xc2, 0x30, 0x18, 0x3d, 0x5f, 0xcc, 0x4c, 0xa5, 0xa0, 0x17, 0xce, 0x9f, 0x0b, 0x11, 0x61, 0xaf, 0xbc, 0xe7, 0x10, 0x06, 0x7b, 0x85, 0x5d, 0xec, 0x21, 0x04, 0x11, 0x51, 0x53, 0x2b, 0xd8, 0x62, 0xb1, 0xb5, 0xcc, 0xec, 0xa2, 0x4b, 0x9a, 0xd9, 0xc6, 0xf6, 0xdc, 0x84, 0x24, 0x27, 0xe7, 0x3b, 0xe7, 0x4b, 0x42, 0x9f, 0xbb, 0xe5, 0x3b, 0x1e, 0xa0, 0x80, 0x3b, 0x01, 0x0c, 0x0e, 0xd8, 0xfb, 0x1c, 0x00, 0x46, 0x62, 0x32, 0xab, 0xd2, 0x88, 0x00, 0xa5, 0xca, 0xb1, 0x8a, 0x63, 0x26, 0xb7, 0x5c, 0x4f, 0xfa, 0x2f, 0x83, 0xa9, 0x9b, 0x4c, 0xf4, 0x57, 0xdb, 0x08, 0xc6, 0x79, 0x74, 0x30, 0x0e, 0x34, 0xc1, 0xef, 0xf8, 0xc3, 0xb9, 0xbf, 0x78, 0x73, 0x59, 0xdf, 0x24, 0xeb, 0x15, 0x00, 0x24, 0x3f, 0x97, 0x50, 0xaf, 0xb1, 0x52, 0xb9, 0x19, 0x75, 0xe2, 0xbc, 0x8e, 0x18, 0xdd, 0xce, 0x57, 0x00, 0x20, 0x14, 0xce, 0xfb, 0xdd, 0x41, 0xcf, 0x25, 0xca, 0x1f, 0x73, 0x06, 0xa9, 0x0c, 0x09, 0xe4, 0x77, 0x99, 0x10, 0x6d, 0x5c, 0x59, 0x02, 0x26, 0x06, 0xe9, 0x15, 0xd1, 0x11, 0xac, 0x49, 0x80, 0xd5, 0xdf, 0xb3, 0xb2, 0x7c, 0x19, 0x3d, 0x04, 0xa9, 0x3c, 0xb5, 0x12, 0xa8, 0x3b, 0xac, 0xfb, 0xd2, 0x4a, 0x80, 0x40, 0xf0, 0xb8, 0xc7, 0xec, 0xc3, 0x54, 0x26, 0x7b, 0xde, 0x44, 0x00, 0xca, 0xee, 0x7a, 0x90, 0xca, 0x30, 0xbb, 0x67, 0x6d, 0x9a, 0x58, 0x60, 0xec, 0x4d, 0x5e, 0x9f, 0xcd, 0x37, 0xc9, 0x3a, 0xb2, 0x0b, 0xfe, 0x8b, 0x60, 0xbf, 0x30, 0x17, 0x4a, 0x4e, 0x71, 0x6b, 0xc6, 0x41, 0x9c, 0x9f, 0xf7, 0x00, 0xf0, 0x7d, 0xfa, 0xfa, 0x70, 0x7f, 0x2a, 0x20, 0xce, 0x23, 0x55, 0x89, 0x70, 0xcc, 0xe4, 0xb6, 0xe9, 0xdb, 0xba, 0xf0, 0x0b, 0x5b, 0xbd, 0x63, 0x14, 0x40, 0x01, 0xdf, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/not_found_icon.xpm0000600000176000000410000003044412105760300023211 0ustar buildbotwww-data00000000000000/* XPM */ static const char * not_found_icon_xpm[] = { "64 64 254 2", " c None", ". c #E8DEDE", "+ c #E1CACA", "@ c #E1C9C9", "# c #E4D1D1", "$ c #CE9898", "% c #CE9595", "& c #CE9696", "* c #E4D2D2", "= c #CF9999", "- c #D6A5A5", "; c #E4C2C2", "> c #E6CACA", ", c #E6C9C9", "' c #E5D3D3", ") c #CF9A9A", "! c #D6A4A4", "~ c #ECD6D6", "{ c #ECD3D3", "] c #EACBCB", "^ c #EACACA", "/ c #E9CACA", "( c #E9C9C9", "_ c #EBD2D2", ": c #ECD5D5", "< c #D7A6A6", "[ c #EACDCD", "} c #E5BABA", "| c #E5B9B9", "1 c #E5B8B8", "2 c #E5B7B7", "3 c #EBD5D5", "4 c #D8A9A9", "5 c #E4B7B7", "6 c #E4B6B6", "7 c #EACCCC", "8 c #EBD3D3", "9 c #D8A8A8", "0 c #E5D6D6", "a c #EAD2D2", "b c #E6D7D7", "c c #D09B9B", "d c #D7A7A7", "e c #EBD4D4", "f c #E4B5B5", "g c #D7A5A5", "h c #D09A9A", "i c #E5D5D5", "j c #CE9999", "k c #E4B4B4", "l c #D8A7A7", "m c #E6D9D9", "n c #E7DADA", "o c #D09C9C", "p c #E4B3B3", "q c #EAD1D1", "r c #E3B2B2", "s c #E9C8C8", "t c #E7DBDB", "u c #E8DCDC", "v c #E7C2C2", "w c #E7C1C1", "x c #E3B1B1", "y c #EAD0D0", "z c #E8DDDD", "A c #D19E9E", "B c #F3EFEF", "C c #EDD6D6", "D c #E3B3B3", "E c #E9C7C7", "F c #F3F0F0", "G c #F5F5F5", "H c #F5F4F4", "I c #ECD4D4", "J c #E3B0B0", "K c #F4F2F2", "L c #EDD7D7", "M c #E8C6C6", "N c #DEC2C2", "O c #D39F9F", "P c #F4F3F3", "Q c #EDD8D8", "R c #E2AFAF", "S c #E8C7C7", "T c #E9CDCD", "U c #D39E9E", "V c #DCBDBD", "W c #F3F1F1", "X c #ECD2D2", "Y c #D8AAAA", "Z c #E2B0B0", "` c #E2AEAE", " . c #F4F4F4", ".. c #EDD5D5", "+. c #E4B2B2", "@. c #E3AEAE", "#. c #E3ADAD", "$. c #E2ADAD", "%. c #ECD1D1", "&. c #F1E5E5", "*. c #E4AFAF", "=. c #E4B1B1", "-. c #E3ACAC", ";. c #E3AFAF", ">. c #E2ACAC", ",. c #E4B0B0", "'. c #E3ABAB", "). c #E4AEAE", "!. c #EDD4D4", "~. c #ECD0D0", "{. c #E4ADAD", "]. c #E2AAAA", "^. c #E2A9A9", "/. c #E2A8A8", "(. c #E2A7A7", "_. c #E2A6A6", ":. c #E2A5A5", "<. c #E2A4A4", "[. c #E1A4A4", "}. c #E1A3A3", "|. c #EBCBCB", "1. c #D8A6A6", "2. c #EDD3D3", "3. c #DF9E9E", "4. c #DF9C9C", "5. c #DF9A9A", "6. c #DE9898", "7. c #DE9696", "8. c #DE9595", "9. c #DF9898", "0. c #EAC5C5", "a. c #D7A4A4", "b. c #EBCCCC", "c. c #DF9999", "d. c #DF9595", "e. c #EAC7C7", "f. c #E09898", "g. c #E1A1A1", "h. c #EBCDCD", "i. c #EBCACA", "j. c #E19898", "k. c #D8A4A4", "l. c #E3AAAA", "m. c #E09999", "n. c #E09595", "o. c #F0E0E0", "p. c #ECCDCD", "q. c #EBC5C5", "r. c #E09F9F", "s. c #EAC9C9", "t. c #E19C9C", "u. c #EBC9C9", "v. c #E19A9A", "w. c #E19595", "x. c #E29898", "y. c #E4ACAC", "z. c #E09C9C", "A. c #E19999", "B. c #E09E9E", "C. c #DF9696", "D. c #EBC7C7", "E. c #ECCBCB", "F. c #E19696", "G. c #E1A2A2", "H. c #E7B8B8", "I. c #F3EEEE", "J. c #EAC6C6", "K. c #EBC6C6", "L. c #E8B8B8", "M. c #E29595", "N. c #E4ABAB", "O. c #E09B9B", "P. c #E29696", "Q. c #E49B9B", "R. c #ECC6C6", "S. c #D8A3A3", "T. c #D39D9D", "U. c #E6B6B6", "V. c #E09696", "W. c #E7B7B7", "X. c #F4F1F1", "Y. c #E8B7B7", "Z. c #E39696", "`. c #E9B5B5", " + c #E9C2C2", ".+ c #D39A9A", "++ c #D6A0A0", "@+ c #E6B4B4", "#+ c #E8B9B9", "$+ c #ECC9C9", "%+ c #F4F0F0", "&+ c #E9B9B9", "*+ c #E39595", "=+ c #E9B4B4", "-+ c #EBC8C8", ";+ c #D7A0A0", ">+ c #D19D9D", ",+ c #D59E9E", "'+ c #EAC8C8", ")+ c #E7B5B5", "!+ c #E09797", "~+ c #E39898", "{+ c #E9B8B8", "]+ c #E49797", "^+ c #D69E9E", "/+ c #E9C6C6", "(+ c #E19797", "_+ c #F3EBEB", ":+ c #E29999", "<+ c #E39999", "[+ c #ECC8C8", "}+ c #E49595", "|+ c #D7A1A1", "1+ c #E9C5C5", "2+ c #E6A9A9", "3+ c #E49898", "4+ c #E7A9A9", "5+ c #E49696", "6+ c #EAB5B5", "7+ c #D8A1A1", "8+ c #E8B5B5", "9+ c #D69F9F", "0+ c #E59696", "a+ c #E29797", "b+ c #E59595", "c+ c #E59797", "d+ c #E39797", "e+ c #E69696", "f+ c #EBB5B5", "g+ c #E69595", "h+ c #ECC7C7", "i+ c #D8A0A0", "j+ c #E79797", "k+ c #EAB6B6", "l+ c #E59898", "m+ c #E79595", "n+ c #E79898", "o+ c #EBB6B6", "p+ c #ECC5C5", "q+ c #D79F9F", "r+ c #EAC4C4", "s+ c #ECB6B6", "t+ c #EBC4C4", "u+ c #E89595", "v+ c #E89696", "w+ c #ECB5B5", "x+ c #EDC8C8", "y+ c #D69D9D", "z+ c #ECBEBE", "A+ c #EBB1B1", "B+ c #EAB1B1", "C+ c #EDBEBE", "D+ c #EDC7C7", "E+ c #E7BCBC", " . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . ", " # $ % & & & & & & & & & & & & & & & & & & & & & & & % $ # ", " * = - ; > > > > > > , , , , , , , , , , , , , , , , , ; - = * ", " ' ) ! ~ { ] ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ / / / / / / ( ( ( ( ( _ : ! ) ' ", " # = < ~ [ } | | | | | | 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 1 ] 3 - = # ", " * $ 4 3 [ | | | | | 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 5 6 6 6 5 7 8 9 $ * ", " 0 = 4 8 [ } | 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 5 5 6 6 6 6 6 6 6 6 2 ] a 9 = 0 ", " b c d e [ } 1 1 1 1 1 1 1 1 2 2 2 2 2 2 5 5 6 6 6 6 6 6 6 6 6 6 f f f 2 ] 8 g c b ", " b h - ~ [ | 1 1 1 1 1 2 2 2 2 2 2 5 6 6 6 6 6 6 6 6 6 6 6 f f f f f f f f 6 ] 3 ! h b ", " i j 9 ~ 7 1 1 1 1 2 2 2 2 2 2 5 6 6 6 6 6 6 6 6 6 6 6 f f f f f f f f f f f k f ^ e l j i ", " m j 4 8 7 1 2 2 2 2 2 5 5 6 6 6 6 6 6 6 6 6 6 6 f f f f f f f f f f f k k k k k k f / a 9 j m ", " n o 9 8 7 | 2 2 5 5 6 6 6 6 6 6 6 6 6 6 6 f f f f f f f f f f k k k k k k k k p p p p f ( q l o n ", " n o - : 7 1 6 6 6 6 6 6 6 6 6 6 6 f f f f f f f f f f f k k k k k k k p p p p p p p p p p f ( e ! o n ", " n o < ~ ] 1 6 6 6 6 6 6 6 6 f f f f f f f f f f f k k k k k k k p p p p p p p p p p p p p r r p s e - o n ", " t = 9 e ] 6 6 6 6 6 6 6 f f f f f f f f f f f k k k k k k k p p p p p p p p p p p p p r r r r r r r s _ 9 = t ", " u h 4 _ ] 2 6 6 f f f f f f f f f 6 v 2 k k k k k k k p p p p p p p p p p f w k r r r r r r r r r r x p s y 9 h u ", " z A d 8 ] 2 f f f f f f f f f f k f 7 B C 6 k p p p p p p p p p p p p p r f C B ] p r r r r r x x x x x x D E q g A z ", " . A - 3 ^ 5 f f f f f f f k k k k k ] F G H : 6 p p p p p p p p p r r r r f I H G F ^ r x x x x x x x J J J J r E 8 ! A . ", " o l 3 / f f f f f k k k k k k k k [ K G G G H L f p p p p p r r r r r r k C H G G G K ] x x x x J J J J J J J J J M 8 < o ", "N O y ^ f f k k k k k k k p p p f ] K G G G G G P Q f r r r r r r r r r k Q P G G G G G K ^ r J J J J J J J J R R R J S T U N ", "V 4 : | k k k k k p p p p p p f 7 W G G G G G G G P Q k r r r r r x x p L P G G G G G G G F ^ x J J J R R R R R R R R p X 9 V ", "V Y : 6 k p p p p p p p p p p ] F G G G G G G G G G H I f x x x x x k I H G G G G G G G G G F ( Z R R R R R R R R R ` x X 4 V ", "V Y : 6 p p p p p p p p p r p Q H G G G G G G G G G G H : p x J J p : H G G G G G G G G G G H C J R R R R ` ` ` ` ` ` x X 4 V ", "V Y : 6 p p p p p p r r r r r f C H G G G G G G G G G G .L p J p L .G G G G G G G G G G H I x R R ` ` ` ` ` ` ` ` ` J X 4 V ", "V Y I f p p r r r r r r r r r r f ..H G G G G G G G G G G P Q f Q P G G G G G G G G G G H I +.` ` ` ` ` ` @.@.#.#.$.$.J %.4 V ", "V Y I f r r r r r r r r x x x x x p Q P G G G G G G G G G G P &.P G G G G G G G G G G P L J ` @.@.@.@.#.$.$.$.$.$.$.#.*.%.4 V ", "V Y I f r r r r x x x x x x x J J J p Q P G G G G G G G G G G G G G G G G G G G G G P L =.@.#.#.$.$.$.#.#.#.#.#.#.-.-.;.%.4 V ", "V Y I k r x x x x x x x J J J J J J J +.C H G G G G G G G G G G G G G G G G G G G H ..J #.#.$.$.#.#.#.#.#.#.-.-.-.>.-.*.%.4 V ", "V Y { p x x x x J J J J J J J J J J J ;.+.{ H G G G G G G G G G G G G G G G G G H { ,.#.#.#.#.#.#.#.-.-.-.-.-.-.-.'.'.).%.4 V ", "V Y { p J J J J J J J J J J J ;.;.;.;.;.;.+...P G G G G G G G G G G G G G G G P !.,.#.#.#.-.-.-.-.-.-.-.'.'.'.'.'.'.'.).~.9 V ", "V Y { p J J J J J J ;.;.;.;.;.;.;.;.;.;.;.@.=.L P G G G G G G G G G G G G G P C *.-.-.-.-.-.-.-.'.'.'.'.'.'.'.'.'.'.'.{.~.9 V ", "V Y { +.J J ;.;.;.;.;.;.;.;.;.;.;.@.@.@.@.@.@.=.C H G G G G G G G G G G G H C *.-.-.-.-.'.'.].^.^./.(.(._.:.:.<.[.}.}.:.|.1.V ", "V 4 { +.;.;.;.;.;.;.;.;.;.;.@.@.@.@.@.@.@.@.@.,.C H G G G G G G G G G G G H 2.[.3.4.5.6.7.8.8.8.8.8.8.8.8.8.8.8.8.8.8.9.0.a.V ", "V 4 X +.;.;.;.;.;.@.@.@.@.@.@.@.@.@.#.#.#.#.,.C P G G G G G G G G G G G G G K b.6.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.8.9.0.a.V ", "V 4 X =.;.@.@.@.@.@.@.@.@.@.#.#.#.#.#.#.#.,...P G G G G G G G G G G G G G G G P ^ c.8.8.8.8.8.8.8.8.8.8.8.8.8.d.d.d.d.9.0.a.V ", "V 4 X =.@.@.@.@.@.@.#.#.#.#.#.#.#.#.#.-.*.X H G G G G G G G G G G G G G G G G G .e.c.8.8.8.8.8.8.d.d.d.d.d.d.d.d.d.d.f.0.a.V ", "V 4 X ,.@.#.#.#.#.#.#.#.#.#.#.#.-.'.[.g.h. .G G G G G G G G G G G G G G G G G G G .i.9.d.d.d.d.d.d.d.d.d.d.d.d.d.d.d.j.0.k.V ", "V 4 X ,.#.#.#.#.#.#.#.#.#.-.l.[.4.7.c.h.P G G G G G G G G G G G G G G G G G G G G G P h.m.d.d.d.d.d.d.d.d.d.d.n.n.n.n.j.0.k.V ", "V 4 X ,.#.#.#.#.#.-.-.-.^.g.c.8.8.9.h.K G G G G G G G G G G P o.P G G G G G G G G G G K p.f.d.d.d.n.n.n.n.n.n.n.n.n.n.j.q.k.V ", "V 4 %.*.-.-.-.-.-.'.(.r.9.8.8.8.5.s.H G G G G G G G G G G K b.t.b.K G G G G G G G G G G H u.v.n.n.n.n.n.n.n.w.w.w.w.w.x.q.k.V ", "V 4 %.*.-.y.-.'.(.z.7.8.8.8.8.c.s.H G G G G G G G G G G P |.f.d.f.|.P G G G G G G G G G G H u.A.w.w.w.w.w.w.w.w.w.w.w.x.q.k.V ", "V 4 %.*.'.'./.B.8.8.8.8.8.8.C.|.H G G G G G G G G G G H e.f.d.d.d.f.D.H G G G G G G G G G G H E.F.w.w.w.w.w.w.w.w.w.w.x.q.k.V ", "V 4 %.).l.G.9.8.8.8.8.d.d.d.d.H.I.G G G G G G G G G H J.A.n.n.n.n.n.A.K.H G G G G G G G G G I.L.w.w.w.w.w.w.M.M.M.M.M.x.q.k.V ", "V l ~.N.O.d.d.d.d.d.d.d.d.d.d.C.H.B G G G G G G G K E.j.n.n.n.n.w.w.w.j.E.K G G G G G G G B L.P.M.M.M.M.M.M.M.M.M.M.M.Q.R.S.V ", "N T.S U.C.d.d.d.d.d.d.d.d.d.d.n.V.W.X.G G G G G K E.j.w.w.w.w.w.w.w.w.w.x.E.K G G G G G X.Y.P.M.M.M.M.M.M.M.M.M.M.M.Z.`. +.+N ", " o ++s @+C.d.d.d.n.n.n.n.n.n.n.n.n.#+F G G G H u.x.w.w.w.w.w.w.w.w.w.w.M.x.$+H G G G %+&+M.M.M.M.M.M.M.*+*+*+*+*+Z.=+-+;+o ", " . >+,+'+)+!+n.n.n.n.n.n.n.n.n.w.w.w.L.I.G H q.x.w.w.w.w.w.w.w.M.M.M.M.M.M.~+q.H G I.{+M.M.M.M.*+*+*+*+*+*+*+*+]+`.-+^+>+. ", " z >+++/+)+(+n.n.w.w.w.w.w.w.w.w.w.F.L._+-+:+w.w.M.M.M.M.M.M.M.M.M.M.M.M.M.<+[+_+{+Z.*+*+*+*+*+*+*+*+*+}+}+]+`.K.;+>+z ", " u h |+1+)+(+w.w.w.w.w.w.w.w.w.w.w.P.2+x.M.M.M.M.M.M.M.M.M.M.M.M.M.*+*+*+*+3+4+5+*+*+*+*+}+}+}+}+}+}+}+]+6+0.7+h u ", " t = |+e.8+w.w.w.w.w.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.*+*+*+*+*+*+*+*+*+*+*+}+}+}+}+}+}+}+}+}+}+}+}+}+6+D.7+= t ", " n o 9+'+8+P.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.M.*+*+*+*+*+*+*+*+*+*+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+0+6+[+9+o n ", " n o ,+e.8+a+M.M.M.M.M.M.M.M.M.*+*+*+*+*+*+*+*+*+*+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+b+b+b+b+c+6+D.^+o n ", " n o |+0.8+d+M.M.*+*+*+*+*+*+*+*+*+*+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+b+b+b+b+b+b+b+b+b+c+6+q.7+o n ", " m j 7+0.`.Z.*+*+*+*+*+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+b+b+b+b+b+b+b+b+b+b+b+b+b+b+e+f+q.7+j m ", " i j ;+D.`.5+}+}+}+}+}+}+}+}+}+}+}+}+}+}+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+g+g+g+e+f+h+i+j i ", " b h ^+-+6+]+}+}+}+}+}+}+}+}+}+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+g+g+g+g+g+g+j+f+[+^+h b ", " b h 9+q.k+l+}+}+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+g+g+g+g+g+g+g+g+g+m+m+n+o+p+q+h b ", " 0 = 7+r+k+c+b+b+b+b+b+b+b+b+b+b+b+g+g+g+g+g+g+g+g+g+m+m+m+m+m+m+m+j+s+t+7+= 0 ", " * $ 7+K.k+b+b+b+b+b+g+g+g+g+g+g+g+g+g+m+m+m+m+m+m+m+m+m+m+m+m+m+s+R.7+$ * ", " # = 9+[+f+e+g+g+g+g+g+g+g+g+m+m+m+m+m+m+m+m+m+m+m+m+m+m+u+v+w+x+q+= # ", " ' h y+h+z+A+B+A+A+A+A+A+A+A+A+A+A+A+A+A+A+A+A+A+A+A+A+A+C+D+y+h ' ", " * = ^+f E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+E+f ^+= * ", " # $ % % % % % % % % % % % % % % % % % % % % % % % % % $ # ", " . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . "}; springlobby-0.169/src/images/notif_bg.png.h0000600000176000000410000044355512105760300022216 0ustar buildbotwww-data00000000000000/* notif_bg.png - 23413 bytes */ static const unsigned char notif_bg_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x01, 0x4a, 0x00, 0x00, 0x00, 0x50, 0x08, 0x06, 0x00, 0x00, 0x00, 0x7f, 0x13, 0x3c, 0x4c, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0d, 0xd7, 0x00, 0x00, 0x0d, 0xd7, 0x01, 0x42, 0x28, 0x9b, 0x78, 0x00, 0x00, 0x0a, 0x4f, 0x69, 0x43, 0x43, 0x50, 0x50, 0x68, 0x6f, 0x74, 0x6f, 0x73, 0x68, 0x6f, 0x70, 0x20, 0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x00, 0x00, 0x78, 0xda, 0x9d, 0x53, 0x67, 0x54, 0x53, 0xe9, 0x16, 0x3d, 0xf7, 0xde, 0xf4, 0x42, 0x4b, 0x88, 0x80, 0x94, 0x4b, 0x6f, 0x52, 0x15, 0x08, 0x20, 0x52, 0x42, 0x8b, 0x80, 0x14, 0x91, 0x26, 0x2a, 0x21, 0x09, 0x10, 0x4a, 0x88, 0x21, 0xa1, 0xd9, 0x15, 0x51, 0xc1, 0x11, 0x45, 0x45, 0x04, 0x1b, 0xc8, 0xa0, 0x88, 0x03, 0x8e, 0x8e, 0x80, 0x8c, 0x15, 0x51, 0x2c, 0x0c, 0x8a, 0x0a, 0xd8, 0x07, 0xe4, 0x21, 0xa2, 0x8e, 0x83, 0xa3, 0x88, 0x8a, 0xca, 0xfb, 0xe1, 0x7b, 0xa3, 0x6b, 0xd6, 0xbc, 0xf7, 0xe6, 0xcd, 0xfe, 0xb5, 0xd7, 0x3e, 0xe7, 0xac, 0xf3, 0x9d, 0xb3, 0xcf, 0x07, 0xc0, 0x08, 0x0c, 0x96, 0x48, 0x33, 0x51, 0x35, 0x80, 0x0c, 0xa9, 0x42, 0x1e, 0x11, 0xe0, 0x83, 0xc7, 0xc4, 0xc6, 0xe1, 0xe4, 0x2e, 0x40, 0x81, 0x0a, 0x24, 0x70, 0x00, 0x10, 0x08, 0xb3, 0x64, 0x21, 0x73, 0xfd, 0x23, 0x01, 0x00, 0xf8, 0x7e, 0x3c, 0x3c, 0x2b, 0x22, 0xc0, 0x07, 0xbe, 0x00, 0x01, 0x78, 0xd3, 0x0b, 0x08, 0x00, 0xc0, 0x4d, 0x9b, 0xc0, 0x30, 0x1c, 0x87, 0xff, 0x0f, 0xea, 0x42, 0x99, 0x5c, 0x01, 0x80, 0x84, 0x01, 0xc0, 0x74, 0x91, 0x38, 0x4b, 0x08, 0x80, 0x14, 0x00, 0x40, 0x7a, 0x8e, 0x42, 0xa6, 0x00, 0x40, 0x46, 0x01, 0x80, 0x9d, 0x98, 0x26, 0x53, 0x00, 0xa0, 0x04, 0x00, 0x60, 0xcb, 0x63, 0x62, 0xe3, 0x00, 0x50, 0x2d, 0x00, 0x60, 0x27, 0x7f, 0xe6, 0xd3, 0x00, 0x80, 0x9d, 0xf8, 0x99, 0x7b, 0x01, 0x00, 0x5b, 0x94, 0x21, 0x15, 0x01, 0xa0, 0x91, 0x00, 0x20, 0x13, 0x65, 0x88, 0x44, 0x00, 0x68, 0x3b, 0x00, 0xac, 0xcf, 0x56, 0x8a, 0x45, 0x00, 0x58, 0x30, 0x00, 0x14, 0x66, 0x4b, 0xc4, 0x39, 0x00, 0xd8, 0x2d, 0x00, 0x30, 0x49, 0x57, 0x66, 0x48, 0x00, 0xb0, 0xb7, 0x00, 0xc0, 0xce, 0x10, 0x0b, 0xb2, 0x00, 0x08, 0x0c, 0x00, 0x30, 0x51, 0x88, 0x85, 0x29, 0x00, 0x04, 0x7b, 0x00, 0x60, 0xc8, 0x23, 0x23, 0x78, 0x00, 0x84, 0x99, 0x00, 0x14, 0x46, 0xf2, 0x57, 0x3c, 0xf1, 0x2b, 0xae, 0x10, 0xe7, 0x2a, 0x00, 0x00, 0x78, 0x99, 0xb2, 0x3c, 0xb9, 0x24, 0x39, 0x45, 0x81, 0x5b, 0x08, 0x2d, 0x71, 0x07, 0x57, 0x57, 0x2e, 0x1e, 0x28, 0xce, 0x49, 0x17, 0x2b, 0x14, 0x36, 0x61, 0x02, 0x61, 0x9a, 0x40, 0x2e, 0xc2, 0x79, 0x99, 0x19, 0x32, 0x81, 0x34, 0x0f, 0xe0, 0xf3, 0xcc, 0x00, 0x00, 0xa0, 0x91, 0x15, 0x11, 0xe0, 0x83, 0xf3, 0xfd, 0x78, 0xce, 0x0e, 0xae, 0xce, 0xce, 0x36, 0x8e, 0xb6, 0x0e, 0x5f, 0x2d, 0xea, 0xbf, 0x06, 0xff, 0x22, 0x62, 0x62, 0xe3, 0xfe, 0xe5, 0xcf, 0xab, 0x70, 0x40, 0x00, 0x00, 0xe1, 0x74, 0x7e, 0xd1, 0xfe, 0x2c, 0x2f, 0xb3, 0x1a, 0x80, 0x3b, 0x06, 0x80, 0x6d, 0xfe, 0xa2, 0x25, 0xee, 0x04, 0x68, 0x5e, 0x0b, 0xa0, 0x75, 0xf7, 0x8b, 0x66, 0xb2, 0x0f, 0x40, 0xb5, 0x00, 0xa0, 0xe9, 0xda, 0x57, 0xf3, 0x70, 0xf8, 0x7e, 0x3c, 0x3c, 0x45, 0xa1, 0x90, 0xb9, 0xd9, 0xd9, 0xe5, 0xe4, 0xe4, 0xd8, 0x4a, 0xc4, 0x42, 0x5b, 0x61, 0xca, 0x57, 0x7d, 0xfe, 0x67, 0xc2, 0x5f, 0xc0, 0x57, 0xfd, 0x6c, 0xf9, 0x7e, 0x3c, 0xfc, 0xf7, 0xf5, 0xe0, 0xbe, 0xe2, 0x24, 0x81, 0x32, 0x5d, 0x81, 0x47, 0x04, 0xf8, 0xe0, 0xc2, 0xcc, 0xf4, 0x4c, 0xa5, 0x1c, 0xcf, 0x92, 0x09, 0x84, 0x62, 0xdc, 0xe6, 0x8f, 0x47, 0xfc, 0xb7, 0x0b, 0xff, 0xfc, 0x1d, 0xd3, 0x22, 0xc4, 0x49, 0x62, 0xb9, 0x58, 0x2a, 0x14, 0xe3, 0x51, 0x12, 0x71, 0x8e, 0x44, 0x9a, 0x8c, 0xf3, 0x32, 0xa5, 0x22, 0x89, 0x42, 0x92, 0x29, 0xc5, 0x25, 0xd2, 0xff, 0x64, 0xe2, 0xdf, 0x2c, 0xfb, 0x03, 0x3e, 0xdf, 0x35, 0x00, 0xb0, 0x6a, 0x3e, 0x01, 0x7b, 0x91, 0x2d, 0xa8, 0x5d, 0x63, 0x03, 0xf6, 0x4b, 0x27, 0x10, 0x58, 0x74, 0xc0, 0xe2, 0xf7, 0x00, 0x00, 0xf2, 0xbb, 0x6f, 0xc1, 0xd4, 0x28, 0x08, 0x03, 0x80, 0x68, 0x83, 0xe1, 0xcf, 0x77, 0xff, 0xef, 0x3f, 0xfd, 0x47, 0xa0, 0x25, 0x00, 0x80, 0x66, 0x49, 0x92, 0x71, 0x00, 0x00, 0x5e, 0x44, 0x24, 0x2e, 0x54, 0xca, 0xb3, 0x3f, 0xc7, 0x08, 0x00, 0x00, 0x44, 0xa0, 0x81, 0x2a, 0xb0, 0x41, 0x1b, 0xf4, 0xc1, 0x18, 0x2c, 0xc0, 0x06, 0x1c, 0xc1, 0x05, 0xdc, 0xc1, 0x0b, 0xfc, 0x60, 0x36, 0x84, 0x42, 0x24, 0xc4, 0xc2, 0x42, 0x10, 0x42, 0x0a, 0x64, 0x80, 0x1c, 0x72, 0x60, 0x29, 0xac, 0x82, 0x42, 0x28, 0x86, 0xcd, 0xb0, 0x1d, 0x2a, 0x60, 0x2f, 0xd4, 0x40, 0x1d, 0x34, 0xc0, 0x51, 0x68, 0x86, 0x93, 0x70, 0x0e, 0x2e, 0xc2, 0x55, 0xb8, 0x0e, 0x3d, 0x70, 0x0f, 0xfa, 0x61, 0x08, 0x9e, 0xc1, 0x28, 0xbc, 0x81, 0x09, 0x04, 0x41, 0xc8, 0x08, 0x13, 0x61, 0x21, 0xda, 0x88, 0x01, 0x62, 0x8a, 0x58, 0x23, 0x8e, 0x08, 0x17, 0x99, 0x85, 0xf8, 0x21, 0xc1, 0x48, 0x04, 0x12, 0x8b, 0x24, 0x20, 0xc9, 0x88, 0x14, 0x51, 0x22, 0x4b, 0x91, 0x35, 0x48, 0x31, 0x52, 0x8a, 0x54, 0x20, 0x55, 0x48, 0x1d, 0xf2, 0x3d, 0x72, 0x02, 0x39, 0x87, 0x5c, 0x46, 0xba, 0x91, 0x3b, 0xc8, 0x00, 0x32, 0x82, 0xfc, 0x86, 0xbc, 0x47, 0x31, 0x94, 0x81, 0xb2, 0x51, 0x3d, 0xd4, 0x0c, 0xb5, 0x43, 0xb9, 0xa8, 0x37, 0x1a, 0x84, 0x46, 0xa2, 0x0b, 0xd0, 0x64, 0x74, 0x31, 0x9a, 0x8f, 0x16, 0xa0, 0x9b, 0xd0, 0x72, 0xb4, 0x1a, 0x3d, 0x8c, 0x36, 0xa1, 0xe7, 0xd0, 0xab, 0x68, 0x0f, 0xda, 0x8f, 0x3e, 0x43, 0xc7, 0x30, 0xc0, 0xe8, 0x18, 0x07, 0x33, 0xc4, 0x6c, 0x30, 0x2e, 0xc6, 0xc3, 0x42, 0xb1, 0x38, 0x2c, 0x09, 0x93, 0x63, 0xcb, 0xb1, 0x22, 0xac, 0x0c, 0xab, 0xc6, 0x1a, 0xb0, 0x56, 0xac, 0x03, 0xbb, 0x89, 0xf5, 0x63, 0xcf, 0xb1, 0x77, 0x04, 0x12, 0x81, 0x45, 0xc0, 0x09, 0x36, 0x04, 0x77, 0x42, 0x20, 0x61, 0x1e, 0x41, 0x48, 0x58, 0x4c, 0x58, 0x4e, 0xd8, 0x48, 0xa8, 0x20, 0x1c, 0x24, 0x34, 0x11, 0xda, 0x09, 0x37, 0x09, 0x03, 0x84, 0x51, 0xc2, 0x27, 0x22, 0x93, 0xa8, 0x4b, 0xb4, 0x26, 0xba, 0x11, 0xf9, 0xc4, 0x18, 0x62, 0x32, 0x31, 0x87, 0x58, 0x48, 0x2c, 0x23, 0xd6, 0x12, 0x8f, 0x13, 0x2f, 0x10, 0x7b, 0x88, 0x43, 0xc4, 0x37, 0x24, 0x12, 0x89, 0x43, 0x32, 0x27, 0xb9, 0x90, 0x02, 0x49, 0xb1, 0xa4, 0x54, 0xd2, 0x12, 0xd2, 0x46, 0xd2, 0x6e, 0x52, 0x23, 0xe9, 0x2c, 0xa9, 0x9b, 0x34, 0x48, 0x1a, 0x23, 0x93, 0xc9, 0xda, 0x64, 0x6b, 0xb2, 0x07, 0x39, 0x94, 0x2c, 0x20, 0x2b, 0xc8, 0x85, 0xe4, 0x9d, 0xe4, 0xc3, 0xe4, 0x33, 0xe4, 0x1b, 0xe4, 0x21, 0xf2, 0x5b, 0x0a, 0x9d, 0x62, 0x40, 0x71, 0xa4, 0xf8, 0x53, 0xe2, 0x28, 0x52, 0xca, 0x6a, 0x4a, 0x19, 0xe5, 0x10, 0xe5, 0x34, 0xe5, 0x06, 0x65, 0x98, 0x32, 0x41, 0x55, 0xa3, 0x9a, 0x52, 0xdd, 0xa8, 0xa1, 0x54, 0x11, 0x35, 0x8f, 0x5a, 0x42, 0xad, 0xa1, 0xb6, 0x52, 0xaf, 0x51, 0x87, 0xa8, 0x13, 0x34, 0x75, 0x9a, 0x39, 0xcd, 0x83, 0x16, 0x49, 0x4b, 0xa5, 0xad, 0xa2, 0x95, 0xd3, 0x1a, 0x68, 0x17, 0x68, 0xf7, 0x69, 0xaf, 0xe8, 0x74, 0xba, 0x11, 0xdd, 0x95, 0x1e, 0x4e, 0x97, 0xd0, 0x57, 0xd2, 0xcb, 0xe9, 0x47, 0xe8, 0x97, 0xe8, 0x03, 0xf4, 0x77, 0x0c, 0x0d, 0x86, 0x15, 0x83, 0xc7, 0x88, 0x67, 0x28, 0x19, 0x9b, 0x18, 0x07, 0x18, 0x67, 0x19, 0x77, 0x18, 0xaf, 0x98, 0x4c, 0xa6, 0x19, 0xd3, 0x8b, 0x19, 0xc7, 0x54, 0x30, 0x37, 0x31, 0xeb, 0x98, 0xe7, 0x99, 0x0f, 0x99, 0x6f, 0x55, 0x58, 0x2a, 0xb6, 0x2a, 0x7c, 0x15, 0x91, 0xca, 0x0a, 0x95, 0x4a, 0x95, 0x26, 0x95, 0x1b, 0x2a, 0x2f, 0x54, 0xa9, 0xaa, 0xa6, 0xaa, 0xde, 0xaa, 0x0b, 0x55, 0xf3, 0x55, 0xcb, 0x54, 0x8f, 0xa9, 0x5e, 0x53, 0x7d, 0xae, 0x46, 0x55, 0x33, 0x53, 0xe3, 0xa9, 0x09, 0xd4, 0x96, 0xab, 0x55, 0xaa, 0x9d, 0x50, 0xeb, 0x53, 0x1b, 0x53, 0x67, 0xa9, 0x3b, 0xa8, 0x87, 0xaa, 0x67, 0xa8, 0x6f, 0x54, 0x3f, 0xa4, 0x7e, 0x59, 0xfd, 0x89, 0x06, 0x59, 0xc3, 0x4c, 0xc3, 0x4f, 0x43, 0xa4, 0x51, 0xa0, 0xb1, 0x5f, 0xe3, 0xbc, 0xc6, 0x20, 0x0b, 0x63, 0x19, 0xb3, 0x78, 0x2c, 0x21, 0x6b, 0x0d, 0xab, 0x86, 0x75, 0x81, 0x35, 0xc4, 0x26, 0xb1, 0xcd, 0xd9, 0x7c, 0x76, 0x2a, 0xbb, 0x98, 0xfd, 0x1d, 0xbb, 0x8b, 0x3d, 0xaa, 0xa9, 0xa1, 0x39, 0x43, 0x33, 0x4a, 0x33, 0x57, 0xb3, 0x52, 0xf3, 0x94, 0x66, 0x3f, 0x07, 0xe3, 0x98, 0x71, 0xf8, 0x9c, 0x74, 0x4e, 0x09, 0xe7, 0x28, 0xa7, 0x97, 0xf3, 0x7e, 0x8a, 0xde, 0x14, 0xef, 0x29, 0xe2, 0x29, 0x1b, 0xa6, 0x34, 0x4c, 0xb9, 0x31, 0x65, 0x5c, 0x6b, 0xaa, 0x96, 0x97, 0x96, 0x58, 0xab, 0x48, 0xab, 0x51, 0xab, 0x47, 0xeb, 0xbd, 0x36, 0xae, 0xed, 0xa7, 0x9d, 0xa6, 0xbd, 0x45, 0xbb, 0x59, 0xfb, 0x81, 0x0e, 0x41, 0xc7, 0x4a, 0x27, 0x5c, 0x27, 0x47, 0x67, 0x8f, 0xce, 0x05, 0x9d, 0xe7, 0x53, 0xd9, 0x53, 0xdd, 0xa7, 0x0a, 0xa7, 0x16, 0x4d, 0x3d, 0x3a, 0xf5, 0xae, 0x2e, 0xaa, 0x6b, 0xa5, 0x1b, 0xa1, 0xbb, 0x44, 0x77, 0xbf, 0x6e, 0xa7, 0xee, 0x98, 0x9e, 0xbe, 0x5e, 0x80, 0x9e, 0x4c, 0x6f, 0xa7, 0xde, 0x79, 0xbd, 0xe7, 0xfa, 0x1c, 0x7d, 0x2f, 0xfd, 0x54, 0xfd, 0x6d, 0xfa, 0xa7, 0xf5, 0x47, 0x0c, 0x58, 0x06, 0xb3, 0x0c, 0x24, 0x06, 0xdb, 0x0c, 0xce, 0x18, 0x3c, 0xc5, 0x35, 0x71, 0x6f, 0x3c, 0x1d, 0x2f, 0xc7, 0xdb, 0xf1, 0x51, 0x43, 0x5d, 0xc3, 0x40, 0x43, 0xa5, 0x61, 0x95, 0x61, 0x97, 0xe1, 0x84, 0x91, 0xb9, 0xd1, 0x3c, 0xa3, 0xd5, 0x46, 0x8d, 0x46, 0x0f, 0x8c, 0x69, 0xc6, 0x5c, 0xe3, 0x24, 0xe3, 0x6d, 0xc6, 0x6d, 0xc6, 0xa3, 0x26, 0x06, 0x26, 0x21, 0x26, 0x4b, 0x4d, 0xea, 0x4d, 0xee, 0x9a, 0x52, 0x4d, 0xb9, 0xa6, 0x29, 0xa6, 0x3b, 0x4c, 0x3b, 0x4c, 0xc7, 0xcd, 0xcc, 0xcd, 0xa2, 0xcd, 0xd6, 0x99, 0x35, 0x9b, 0x3d, 0x31, 0xd7, 0x32, 0xe7, 0x9b, 0xe7, 0x9b, 0xd7, 0x9b, 0xdf, 0xb7, 0x60, 0x5a, 0x78, 0x5a, 0x2c, 0xb6, 0xa8, 0xb6, 0xb8, 0x65, 0x49, 0xb2, 0xe4, 0x5a, 0xa6, 0x59, 0xee, 0xb6, 0xbc, 0x6e, 0x85, 0x5a, 0x39, 0x59, 0xa5, 0x58, 0x55, 0x5a, 0x5d, 0xb3, 0x46, 0xad, 0x9d, 0xad, 0x25, 0xd6, 0xbb, 0xad, 0xbb, 0xa7, 0x11, 0xa7, 0xb9, 0x4e, 0x93, 0x4e, 0xab, 0x9e, 0xd6, 0x67, 0xc3, 0xb0, 0xf1, 0xb6, 0xc9, 0xb6, 0xa9, 0xb7, 0x19, 0xb0, 0xe5, 0xd8, 0x06, 0xdb, 0xae, 0xb6, 0x6d, 0xb6, 0x7d, 0x61, 0x67, 0x62, 0x17, 0x67, 0xb7, 0xc5, 0xae, 0xc3, 0xee, 0x93, 0xbd, 0x93, 0x7d, 0xba, 0x7d, 0x8d, 0xfd, 0x3d, 0x07, 0x0d, 0x87, 0xd9, 0x0e, 0xab, 0x1d, 0x5a, 0x1d, 0x7e, 0x73, 0xb4, 0x72, 0x14, 0x3a, 0x56, 0x3a, 0xde, 0x9a, 0xce, 0x9c, 0xee, 0x3f, 0x7d, 0xc5, 0xf4, 0x96, 0xe9, 0x2f, 0x67, 0x58, 0xcf, 0x10, 0xcf, 0xd8, 0x33, 0xe3, 0xb6, 0x13, 0xcb, 0x29, 0xc4, 0x69, 0x9d, 0x53, 0x9b, 0xd3, 0x47, 0x67, 0x17, 0x67, 0xb9, 0x73, 0x83, 0xf3, 0x88, 0x8b, 0x89, 0x4b, 0x82, 0xcb, 0x2e, 0x97, 0x3e, 0x2e, 0x9b, 0x1b, 0xc6, 0xdd, 0xc8, 0xbd, 0xe4, 0x4a, 0x74, 0xf5, 0x71, 0x5d, 0xe1, 0x7a, 0xd2, 0xf5, 0x9d, 0x9b, 0xb3, 0x9b, 0xc2, 0xed, 0xa8, 0xdb, 0xaf, 0xee, 0x36, 0xee, 0x69, 0xee, 0x87, 0xdc, 0x9f, 0xcc, 0x34, 0x9f, 0x29, 0x9e, 0x59, 0x33, 0x73, 0xd0, 0xc3, 0xc8, 0x43, 0xe0, 0x51, 0xe5, 0xd1, 0x3f, 0x0b, 0x9f, 0x95, 0x30, 0x6b, 0xdf, 0xac, 0x7e, 0x4f, 0x43, 0x4f, 0x81, 0x67, 0xb5, 0xe7, 0x23, 0x2f, 0x63, 0x2f, 0x91, 0x57, 0xad, 0xd7, 0xb0, 0xb7, 0xa5, 0x77, 0xaa, 0xf7, 0x61, 0xef, 0x17, 0x3e, 0xf6, 0x3e, 0x72, 0x9f, 0xe3, 0x3e, 0xe3, 0x3c, 0x37, 0xde, 0x32, 0xde, 0x59, 0x5f, 0xcc, 0x37, 0xc0, 0xb7, 0xc8, 0xb7, 0xcb, 0x4f, 0xc3, 0x6f, 0x9e, 0x5f, 0x85, 0xdf, 0x43, 0x7f, 0x23, 0xff, 0x64, 0xff, 0x7a, 0xff, 0xd1, 0x00, 0xa7, 0x80, 0x25, 0x01, 0x67, 0x03, 0x89, 0x81, 0x41, 0x81, 0x5b, 0x02, 0xfb, 0xf8, 0x7a, 0x7c, 0x21, 0xbf, 0x8e, 0x3f, 0x3a, 0xdb, 0x65, 0xf6, 0xb2, 0xd9, 0xed, 0x41, 0x8c, 0xa0, 0xb9, 0x41, 0x15, 0x41, 0x8f, 0x82, 0xad, 0x82, 0xe5, 0xc1, 0xad, 0x21, 0x68, 0xc8, 0xec, 0x90, 0xad, 0x21, 0xf7, 0xe7, 0x98, 0xce, 0x91, 0xce, 0x69, 0x0e, 0x85, 0x50, 0x7e, 0xe8, 0xd6, 0xd0, 0x07, 0x61, 0xe6, 0x61, 0x8b, 0xc3, 0x7e, 0x0c, 0x27, 0x85, 0x87, 0x85, 0x57, 0x86, 0x3f, 0x8e, 0x70, 0x88, 0x58, 0x1a, 0xd1, 0x31, 0x97, 0x35, 0x77, 0xd1, 0xdc, 0x43, 0x73, 0xdf, 0x44, 0xfa, 0x44, 0x96, 0x44, 0xde, 0x9b, 0x67, 0x31, 0x4f, 0x39, 0xaf, 0x2d, 0x4a, 0x35, 0x2a, 0x3e, 0xaa, 0x2e, 0x6a, 0x3c, 0xda, 0x37, 0xba, 0x34, 0xba, 0x3f, 0xc6, 0x2e, 0x66, 0x59, 0xcc, 0xd5, 0x58, 0x9d, 0x58, 0x49, 0x6c, 0x4b, 0x1c, 0x39, 0x2e, 0x2a, 0xae, 0x36, 0x6e, 0x6c, 0xbe, 0xdf, 0xfc, 0xed, 0xf3, 0x87, 0xe2, 0x9d, 0xe2, 0x0b, 0xe3, 0x7b, 0x17, 0x98, 0x2f, 0xc8, 0x5d, 0x70, 0x79, 0xa1, 0xce, 0xc2, 0xf4, 0x85, 0xa7, 0x16, 0xa9, 0x2e, 0x12, 0x2c, 0x3a, 0x96, 0x40, 0x4c, 0x88, 0x4e, 0x38, 0x94, 0xf0, 0x41, 0x10, 0x2a, 0xa8, 0x16, 0x8c, 0x25, 0xf2, 0x13, 0x77, 0x25, 0x8e, 0x0a, 0x79, 0xc2, 0x1d, 0xc2, 0x67, 0x22, 0x2f, 0xd1, 0x36, 0xd1, 0x88, 0xd8, 0x43, 0x5c, 0x2a, 0x1e, 0x4e, 0xf2, 0x48, 0x2a, 0x4d, 0x7a, 0x92, 0xec, 0x91, 0xbc, 0x35, 0x79, 0x24, 0xc5, 0x33, 0xa5, 0x2c, 0xe5, 0xb9, 0x84, 0x27, 0xa9, 0x90, 0xbc, 0x4c, 0x0d, 0x4c, 0xdd, 0x9b, 0x3a, 0x9e, 0x16, 0x9a, 0x76, 0x20, 0x6d, 0x32, 0x3d, 0x3a, 0xbd, 0x31, 0x83, 0x92, 0x91, 0x90, 0x71, 0x42, 0xaa, 0x21, 0x4d, 0x93, 0xb6, 0x67, 0xea, 0x67, 0xe6, 0x66, 0x76, 0xcb, 0xac, 0x65, 0x85, 0xb2, 0xfe, 0xc5, 0x6e, 0x8b, 0xb7, 0x2f, 0x1e, 0x95, 0x07, 0xc9, 0x6b, 0xb3, 0x90, 0xac, 0x05, 0x59, 0x2d, 0x0a, 0xb6, 0x42, 0xa6, 0xe8, 0x54, 0x5a, 0x28, 0xd7, 0x2a, 0x07, 0xb2, 0x67, 0x65, 0x57, 0x66, 0xbf, 0xcd, 0x89, 0xca, 0x39, 0x96, 0xab, 0x9e, 0x2b, 0xcd, 0xed, 0xcc, 0xb3, 0xca, 0xdb, 0x90, 0x37, 0x9c, 0xef, 0x9f, 0xff, 0xed, 0x12, 0xc2, 0x12, 0xe1, 0x92, 0xb6, 0xa5, 0x86, 0x4b, 0x57, 0x2d, 0x1d, 0x58, 0xe6, 0xbd, 0xac, 0x6a, 0x39, 0xb2, 0x3c, 0x71, 0x79, 0xdb, 0x0a, 0xe3, 0x15, 0x05, 0x2b, 0x86, 0x56, 0x06, 0xac, 0x3c, 0xb8, 0x8a, 0xb6, 0x2a, 0x6d, 0xd5, 0x4f, 0xab, 0xed, 0x57, 0x97, 0xae, 0x7e, 0xbd, 0x26, 0x7a, 0x4d, 0x6b, 0x81, 0x5e, 0xc1, 0xca, 0x82, 0xc1, 0xb5, 0x01, 0x6b, 0xeb, 0x0b, 0x55, 0x0a, 0xe5, 0x85, 0x7d, 0xeb, 0xdc, 0xd7, 0xed, 0x5d, 0x4f, 0x58, 0x2f, 0x59, 0xdf, 0xb5, 0x61, 0xfa, 0x86, 0x9d, 0x1b, 0x3e, 0x15, 0x89, 0x8a, 0xae, 0x14, 0xdb, 0x17, 0x97, 0x15, 0x7f, 0xd8, 0x28, 0xdc, 0x78, 0xe5, 0x1b, 0x87, 0x6f, 0xca, 0xbf, 0x99, 0xdc, 0x94, 0xb4, 0xa9, 0xab, 0xc4, 0xb9, 0x64, 0xcf, 0x66, 0xd2, 0x66, 0xe9, 0xe6, 0xde, 0x2d, 0x9e, 0x5b, 0x0e, 0x96, 0xaa, 0x97, 0xe6, 0x97, 0x0e, 0x6e, 0x0d, 0xd9, 0xda, 0xb4, 0x0d, 0xdf, 0x56, 0xb4, 0xed, 0xf5, 0xf6, 0x45, 0xdb, 0x2f, 0x97, 0xcd, 0x28, 0xdb, 0xbb, 0x83, 0xb6, 0x43, 0xb9, 0xa3, 0xbf, 0x3c, 0xb8, 0xbc, 0x65, 0xa7, 0xc9, 0xce, 0xcd, 0x3b, 0x3f, 0x54, 0xa4, 0x54, 0xf4, 0x54, 0xfa, 0x54, 0x36, 0xee, 0xd2, 0xdd, 0xb5, 0x61, 0xd7, 0xf8, 0x6e, 0xd1, 0xee, 0x1b, 0x7b, 0xbc, 0xf6, 0x34, 0xec, 0xd5, 0xdb, 0x5b, 0xbc, 0xf7, 0xfd, 0x3e, 0xc9, 0xbe, 0xdb, 0x55, 0x01, 0x55, 0x4d, 0xd5, 0x66, 0xd5, 0x65, 0xfb, 0x49, 0xfb, 0xb3, 0xf7, 0x3f, 0xae, 0x89, 0xaa, 0xe9, 0xf8, 0x96, 0xfb, 0x6d, 0x5d, 0xad, 0x4e, 0x6d, 0x71, 0xed, 0xc7, 0x03, 0xd2, 0x03, 0xfd, 0x07, 0x23, 0x0e, 0xb6, 0xd7, 0xb9, 0xd4, 0xd5, 0x1d, 0xd2, 0x3d, 0x54, 0x52, 0x8f, 0xd6, 0x2b, 0xeb, 0x47, 0x0e, 0xc7, 0x1f, 0xbe, 0xfe, 0x9d, 0xef, 0x77, 0x2d, 0x0d, 0x36, 0x0d, 0x55, 0x8d, 0x9c, 0xc6, 0xe2, 0x23, 0x70, 0x44, 0x79, 0xe4, 0xe9, 0xf7, 0x09, 0xdf, 0xf7, 0x1e, 0x0d, 0x3a, 0xda, 0x76, 0x8c, 0x7b, 0xac, 0xe1, 0x07, 0xd3, 0x1f, 0x76, 0x1d, 0x67, 0x1d, 0x2f, 0x6a, 0x42, 0x9a, 0xf2, 0x9a, 0x46, 0x9b, 0x53, 0x9a, 0xfb, 0x5b, 0x62, 0x5b, 0xba, 0x4f, 0xcc, 0x3e, 0xd1, 0xd6, 0xea, 0xde, 0x7a, 0xfc, 0x47, 0xdb, 0x1f, 0x0f, 0x9c, 0x34, 0x3c, 0x59, 0x79, 0x4a, 0xf3, 0x54, 0xc9, 0x69, 0xda, 0xe9, 0x82, 0xd3, 0x93, 0x67, 0xf2, 0xcf, 0x8c, 0x9d, 0x95, 0x9d, 0x7d, 0x7e, 0x2e, 0xf9, 0xdc, 0x60, 0xdb, 0xa2, 0xb6, 0x7b, 0xe7, 0x63, 0xce, 0xdf, 0x6a, 0x0f, 0x6f, 0xef, 0xba, 0x10, 0x74, 0xe1, 0xd2, 0x45, 0xff, 0x8b, 0xe7, 0x3b, 0xbc, 0x3b, 0xce, 0x5c, 0xf2, 0xb8, 0x74, 0xf2, 0xb2, 0xdb, 0xe5, 0x13, 0x57, 0xb8, 0x57, 0x9a, 0xaf, 0x3a, 0x5f, 0x6d, 0xea, 0x74, 0xea, 0x3c, 0xfe, 0x93, 0xd3, 0x4f, 0xc7, 0xbb, 0x9c, 0xbb, 0x9a, 0xae, 0xb9, 0x5c, 0x6b, 0xb9, 0xee, 0x7a, 0xbd, 0xb5, 0x7b, 0x66, 0xf7, 0xe9, 0x1b, 0x9e, 0x37, 0xce, 0xdd, 0xf4, 0xbd, 0x79, 0xf1, 0x16, 0xff, 0xd6, 0xd5, 0x9e, 0x39, 0x3d, 0xdd, 0xbd, 0xf3, 0x7a, 0x6f, 0xf7, 0xc5, 0xf7, 0xf5, 0xdf, 0x16, 0xdd, 0x7e, 0x72, 0x27, 0xfd, 0xce, 0xcb, 0xbb, 0xd9, 0x77, 0x27, 0xee, 0xad, 0xbc, 0x4f, 0xbc, 0x5f, 0xf4, 0x40, 0xed, 0x41, 0xd9, 0x43, 0xdd, 0x87, 0xd5, 0x3f, 0x5b, 0xfe, 0xdc, 0xd8, 0xef, 0xdc, 0x7f, 0x6a, 0xc0, 0x77, 0xa0, 0xf3, 0xd1, 0xdc, 0x47, 0xf7, 0x06, 0x85, 0x83, 0xcf, 0xfe, 0x91, 0xf5, 0x8f, 0x0f, 0x43, 0x05, 0x8f, 0x99, 0x8f, 0xcb, 0x86, 0x0d, 0x86, 0xeb, 0x9e, 0x38, 0x3e, 0x39, 0x39, 0xe2, 0x3f, 0x72, 0xfd, 0xe9, 0xfc, 0xa7, 0x43, 0xcf, 0x64, 0xcf, 0x26, 0x9e, 0x17, 0xfe, 0xa2, 0xfe, 0xcb, 0xae, 0x17, 0x16, 0x2f, 0x7e, 0xf8, 0xd5, 0xeb, 0xd7, 0xce, 0xd1, 0x98, 0xd1, 0xa1, 0x97, 0xf2, 0x97, 0x93, 0xbf, 0x6d, 0x7c, 0xa5, 0xfd, 0xea, 0xc0, 0xeb, 0x19, 0xaf, 0xdb, 0xc6, 0xc2, 0xc6, 0x1e, 0xbe, 0xc9, 0x78, 0x33, 0x31, 0x5e, 0xf4, 0x56, 0xfb, 0xed, 0xc1, 0x77, 0xdc, 0x77, 0x1d, 0xef, 0xa3, 0xdf, 0x0f, 0x4f, 0xe4, 0x7c, 0x20, 0x7f, 0x28, 0xff, 0x68, 0xf9, 0xb1, 0xf5, 0x53, 0xd0, 0xa7, 0xfb, 0x93, 0x19, 0x93, 0x93, 0xff, 0x04, 0x03, 0x98, 0xf3, 0xfc, 0x63, 0x33, 0x2d, 0xdb, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48, 0x52, 0x4d, 0x00, 0x00, 0x7a, 0x25, 0x00, 0x00, 0x80, 0x83, 0x00, 0x00, 0xf9, 0xff, 0x00, 0x00, 0x80, 0xe9, 0x00, 0x00, 0x75, 0x30, 0x00, 0x00, 0xea, 0x60, 0x00, 0x00, 0x3a, 0x98, 0x00, 0x00, 0x17, 0x6f, 0x92, 0x5f, 0xc5, 0x46, 0x00, 0x00, 0x50, 0xa0, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xec, 0xbd, 0x59, 0x90, 0x64, 0xd7, 0x7d, 0xde, 0xf9, 0x9d, 0x73, 0xee, 0xbd, 0xe7, 0xde, 0x5c, 0xaa, 0xb2, 0xf6, 0xaa, 0x6e, 0x34, 0xf6, 0x7d, 0x23, 0x08, 0x82, 0x10, 0x05, 0x2e, 0xa0, 0x44, 0x91, 0x26, 0xa5, 0x11, 0x25, 0x53, 0xe6, 0xc8, 0x52, 0x48, 0x96, 0x64, 0x69, 0x3c, 0x13, 0x8e, 0x71, 0x78, 0x96, 0x37, 0x3f, 0x61, 0xe6, 0xc1, 0x11, 0x96, 0x42, 0x1e, 0x8f, 0x62, 0x34, 0x31, 0xb2, 0xc7, 0x9a, 0x08, 0x85, 0x45, 0x2f, 0x12, 0x25, 0xd1, 0x12, 0x49, 0x59, 0xa0, 0xb8, 0x83, 0x68, 0x80, 0x20, 0x08, 0x80, 0xc4, 0xde, 0x40, 0xa3, 0xd1, 0x40, 0x57, 0x55, 0xee, 0xfb, 0xdd, 0x32, 0xef, 0x99, 0x87, 0xb3, 0xdc, 0x73, 0x33, 0xb3, 0x1a, 0x8d, 0xee, 0xc6, 0x22, 0x39, 0xf1, 0xf4, 0xc5, 0x8d, 0x53, 0x59, 0x59, 0x8d, 0xac, 0x5f, 0x7d, 0xff, 0xf5, 0x90, 0x7f, 0xf6, 0xf9, 0xbf, 0x12, 0xdd, 0xfa, 0x01, 0x6a, 0xdb, 0xbb, 0x00, 0x80, 0x4b, 0xd5, 0xbd, 0xfa, 0x21, 0x9e, 0xf9, 0xf6, 0xd7, 0x10, 0x87, 0x21, 0x3e, 0xf3, 0x53, 0x1f, 0xc7, 0x4f, 0xdd, 0xff, 0xa3, 0x88, 0xc7, 0x23, 0x78, 0xdc, 0x07, 0x90, 0x21, 0x19, 0x8f, 0xe0, 0x71, 0x0e, 0x08, 0x81, 0x78, 0x3c, 0x02, 0xf7, 0x7d, 0x20, 0xcb, 0x10, 0x8f, 0x87, 0xf0, 0x7c, 0x1f, 0x10, 0xfa, 0x8c, 0x0f, 0x21, 0xf2, 0xf3, 0xbf, 0xfd, 0xc7, 0x5f, 0xc1, 0xf3, 0xa7, 0x5f, 0x83, 0x5f, 0x2e, 0xe3, 0x43, 0x9f, 0xfd, 0x25, 0x4c, 0xd2, 0x04, 0xab, 0x5b, 0xdb, 0x10, 0x42, 0xc8, 0xf7, 0xb0, 0xb9, 0x2d, 0xdf, 0xc3, 0xe1, 0x01, 0x56, 0xb7, 0x77, 0x20, 0x84, 0x40, 0xaf, 0x7e, 0x88, 0x95, 0xcd, 0x2d, 0xf3, 0xde, 0x56, 0xb7, 0x76, 0x20, 0x44, 0x86, 0x5e, 0xe3, 0x50, 0x69, 0x81, 0x5e, 0xa3, 0x6e, 0xce, 0x74, 0x0e, 0xf6, 0x11, 0xf6, 0x7b, 0x78, 0xed, 0xf9, 0x67, 0xd0, 0x3c, 0xfb, 0x2a, 0xbc, 0xc0, 0x07, 0x04, 0x90, 0x44, 0x21, 0x36, 0xd7, 0x6b, 0xb8, 0xef, 0xa6, 0x2b, 0xf1, 0xfe, 0x6b, 0xb6, 0xb0, 0xb5, 0xb1, 0x06, 0x00, 0xf8, 0xd2, 0xc9, 0x1f, 0xe2, 0xcb, 0x3f, 0x78, 0x05, 0x00, 0x70, 0xf3, 0x07, 0x3e, 0x84, 0xe3, 0x37, 0xde, 0x02, 0x21, 0x04, 0xfa, 0xcd, 0x3a, 0x56, 0xd4, 0xfb, 0x59, 0xea, 0xa5, 0x7e, 0x27, 0x34, 0x21, 0xe4, 0xbc, 0x67, 0x56, 0xb7, 0x76, 0x66, 0xce, 0x53, 0xf4, 0x1a, 0x75, 0xac, 0x6e, 0xc9, 0x33, 0xbd, 0x56, 0xc3, 0xe8, 0x7e, 0x53, 0x6a, 0x42, 0x88, 0xf9, 0xdd, 0x91, 0xe7, 0x0f, 0xcd, 0xef, 0x7e, 0xbf, 0xd9, 0xc0, 0xea, 0xf6, 0x8e, 0x3c, 0x53, 0x3f, 0x44, 0x6d, 0x47, 0x31, 0xa1, 0x59, 0x47, 0x6d, 0x7b, 0x57, 0x7d, 0x6d, 0xfd, 0xb2, 0x71, 0xe6, 0xed, 0xd6, 0xec, 0xc3, 0x3f, 0xff, 0xcb, 0x0f, 0xf8, 0xe5, 0x0a, 0xba, 0xf5, 0x03, 0xf8, 0xe5, 0x0a, 0x2e, 0x45, 0xbb, 0x1e, 0xc7, 0xc3, 0x5f, 0xf8, 0x4f, 0x20, 0x00, 0xd6, 0xd6, 0x6a, 0xf8, 0xa5, 0x9f, 0xfc, 0x71, 0x70, 0xcf, 0x05, 0x63, 0x0c, 0xc9, 0x78, 0x08, 0x46, 0x19, 0x18, 0xa3, 0x88, 0xc7, 0x23, 0x38, 0x8c, 0xc1, 0xa1, 0x14, 0xf1, 0x68, 0x08, 0xc7, 0x61, 0xea, 0xcc, 0x08, 0x8c, 0x51, 0x30, 0xc6, 0x10, 0x8f, 0x47, 0x60, 0x8c, 0x99, 0xaf, 0x3d, 0xbe, 0xb9, 0x86, 0x47, 0x4f, 0xbd, 0x8e, 0x78, 0x3c, 0x42, 0x12, 0x8e, 0x71, 0xf5, 0x9d, 0xef, 0x45, 0xf7, 0x60, 0x1f, 0x3c, 0x28, 0xc1, 0x2f, 0x95, 0xd1, 0x3d, 0x3c, 0x00, 0x2f, 0x95, 0xe1, 0x05, 0x01, 0xba, 0xf5, 0x03, 0x78, 0x41, 0x09, 0xbc, 0x54, 0x42, 0xb7, 0xbe, 0x0f, 0x5e, 0x2a, 0xc1, 0x0b, 0x4a, 0xe8, 0xd6, 0x0f, 0xd5, 0xf3, 0x32, 0xba, 0x07, 0x07, 0xe0, 0x41, 0x09, 0x3c, 0x28, 0xe1, 0xf0, 0xe5, 0x17, 0xb1, 0x7f, 0xea, 0x79, 0x9c, 0x7a, 0xec, 0x11, 0x9c, 0x7d, 0xf6, 0x07, 0x48, 0x93, 0x18, 0xcc, 0x71, 0x90, 0x84, 0x21, 0x6e, 0xbe, 0x72, 0x07, 0x7f, 0xf7, 0xbe, 0x3b, 0xf0, 0x99, 0x7b, 0xae, 0xc7, 0xad, 0x57, 0xed, 0xa2, 0x1c, 0xf8, 0x48, 0xa2, 0x08, 0xcc, 0x71, 0xf0, 0x85, 0xef, 0xbd, 0x88, 0x46, 0xab, 0x83, 0xa0, 0xba, 0x82, 0x5b, 0xef, 0xbb, 0x1f, 0xbd, 0x46, 0xdd, 0xbc, 0x66, 0x7f, 0xa9, 0x97, 0xfa, 0x1d, 0xd4, 0x5e, 0x10, 0xc0, 0x0b, 0x4a, 0xe8, 0x35, 0x1b, 0xf0, 0x02, 0xf9, 0xf9, 0xef, 0x35, 0xea, 0x46, 0xf7, 0x9b, 0x75, 0xeb, 0xf9, 0x21, 0xbc, 0x20, 0x00, 0x2f, 0x69, 0x5d, 0x82, 0x5f, 0x2a, 0xa1, 0xdf, 0x38, 0x34, 0xbf, 0x5f, 0xbd, 0xba, 0xd4, 0xbc, 0x5c, 0x46, 0xb7, 0x7e, 0x08, 0x5e, 0x2a, 0xa9, 0xf3, 0x07, 0x4a, 0x97, 0xd1, 0xad, 0xcb, 0xdf, 0x41, 0x5e, 0x2a, 0xc9, 0xf3, 0xa5, 0xb2, 0xfc, 0xda, 0xc3, 0x03, 0xf8, 0xa5, 0x32, 0x78, 0xb9, 0x82, 0xce, 0xe1, 0xbe, 0xe2, 0x46, 0x19, 0xbd, 0xc6, 0xe1, 0x25, 0x33, 0xe7, 0xed, 0xd2, 0xe4, 0x63, 0xbf, 0xf2, 0x8f, 0xc4, 0xed, 0xf7, 0xff, 0x04, 0xca, 0xab, 0x35, 0x1c, 0xf7, 0x19, 0x2a, 0x35, 0xe9, 0x96, 0x86, 0xdd, 0xce, 0x05, 0x6b, 0x21, 0x80, 0x51, 0xaf, 0x83, 0x7e, 0xb3, 0x8e, 0xd7, 0x9f, 0x7f, 0x16, 0x69, 0x12, 0xe3, 0xc7, 0xee, 0x7b, 0x3f, 0xee, 0xbc, 0xf1, 0x5a, 0x4c, 0xe2, 0x18, 0x8e, 0xe7, 0x02, 0x42, 0x20, 0x8d, 0x23, 0xb8, 0xae, 0x07, 0x88, 0x4c, 0x69, 0x17, 0x42, 0x08, 0x4c, 0xe2, 0x08, 0x8e, 0xeb, 0x02, 0x00, 0xd2, 0x28, 0x84, 0xe3, 0x7a, 0x00, 0x32, 0xf5, 0xdc, 0x83, 0x10, 0x53, 0x4c, 0xa2, 0x08, 0x0f, 0xfe, 0xe0, 0x65, 0xbc, 0x7c, 0xd0, 0x46, 0x1a, 0x45, 0xb8, 0xed, 0xc3, 0x3f, 0x86, 0xea, 0xfa, 0x26, 0x06, 0x9d, 0x36, 0xca, 0xb5, 0x1a, 0x20, 0x80, 0x61, 0xb7, 0x8d, 0xd2, 0x6a, 0xcd, 0xbc, 0xb7, 0xf2, 0x6a, 0x0d, 0x42, 0x08, 0xf9, 0x3e, 0x57, 0x6a, 0x10, 0x00, 0x46, 0xea, 0x4c, 0x96, 0x65, 0x38, 0x7c, 0xf9, 0x14, 0x06, 0x9d, 0x36, 0x7a, 0xcd, 0x3a, 0xd2, 0x28, 0x82, 0xeb, 0x71, 0x08, 0x08, 0x90, 0xe9, 0x14, 0x77, 0x5c, 0x7b, 0x1c, 0x77, 0x5d, 0xbd, 0x83, 0x15, 0xce, 0xd4, 0xfb, 0x01, 0xd2, 0x24, 0x86, 0xe3, 0x71, 0x00, 0x02, 0xdd, 0xde, 0x00, 0xff, 0xef, 0xd7, 0x9e, 0x44, 0x26, 0x04, 0x2a, 0x6b, 0x1b, 0xb8, 0xf1, 0xde, 0x1f, 0xcd, 0xbf, 0x6f, 0x6d, 0xcd, 0xbc, 0x9f, 0xb2, 0xfa, 0xb7, 0x1a, 0xb4, 0xdb, 0xa8, 0xac, 0xc9, 0x7f, 0xab, 0x61, 0xa7, 0x8d, 0xf2, 0x5a, 0xf1, 0xb9, 0xd6, 0x65, 0xeb, 0x8c, 0x3e, 0x3f, 0x68, 0xb7, 0x50, 0x5d, 0xdf, 0x40, 0x26, 0x04, 0x86, 0xed, 0x16, 0x2a, 0xeb, 0x1b, 0xf2, 0xe7, 0xea, 0xb4, 0x51, 0x59, 0x5b, 0x87, 0x80, 0xc0, 0xa0, 0x25, 0xcf, 0x08, 0x00, 0x83, 0x56, 0x13, 0x95, 0xf5, 0x0d, 0xf5, 0x9a, 0x2d, 0x54, 0xd6, 0xb4, 0x6e, 0xa2, 0xaa, 0x9e, 0xf7, 0x5b, 0x4d, 0x54, 0x37, 0x36, 0xe5, 0xf3, 0x56, 0x13, 0x95, 0xf5, 0x5c, 0x57, 0x37, 0xd4, 0xf9, 0x56, 0x0b, 0xd5, 0x8d, 0x0d, 0xf5, 0x1e, 0x9a, 0xa8, 0x9e, 0xe7, 0x4c, 0xe1, 0xbc, 0x39, 0xb3, 0xa9, 0xdc, 0x46, 0x13, 0x2b, 0x9b, 0x9b, 0x80, 0x90, 0xdf, 0x77, 0x45, 0x3f, 0x9f, 0xd1, 0xf9, 0xeb, 0x14, 0xdf, 0xdb, 0x9b, 0xd3, 0xad, 0x85, 0xaf, 0x3f, 0x68, 0xcb, 0x33, 0x64, 0xd1, 0xfb, 0x5c, 0xdf, 0x54, 0xff, 0x86, 0xf2, 0x8c, 0x10, 0x40, 0xbf, 0xd5, 0x28, 0xbe, 0xff, 0x8d, 0x4d, 0x08, 0xe5, 0x9c, 0xf2, 0xe7, 0x0d, 0x54, 0xd5, 0xcf, 0xd5, 0x6b, 0x36, 0x64, 0x64, 0x22, 0x04, 0xfa, 0x4a, 0xeb, 0xf3, 0x3a, 0x62, 0xb1, 0xf5, 0xc0, 0x7e, 0xde, 0x6a, 0x62, 0x75, 0x73, 0x0b, 0x20, 0xc0, 0xa0, 0xd9, 0x34, 0xcf, 0x87, 0x6d, 0xf9, 0xb3, 0x10, 0x42, 0x30, 0x68, 0xc9, 0x7f, 0x43, 0x02, 0x82, 0x61, 0xbb, 0x25, 0x7f, 0x16, 0x22, 0xff, 0xff, 0xae, 0x6c, 0xa8, 0xe7, 0x1d, 0xf9, 0x19, 0x20, 0x84, 0x60, 0xd4, 0x69, 0xa3, 0xb2, 0xbe, 0x0e, 0x02, 0x82, 0x41, 0xbb, 0x8d, 0xea, 0xfa, 0x7a, 0xfe, 0x79, 0x53, 0x7a, 0xd8, 0x6e, 0xcf, 0xfc, 0xbf, 0x93, 0x3f, 0xa3, 0x7e, 0x4d, 0xf9, 0xbc, 0x81, 0xea, 0xc6, 0xb6, 0x3a, 0xdf, 0x40, 0x75, 0x63, 0xcb, 0xfa, 0xda, 0x4d, 0x80, 0xea, 0xf7, 0xb6, 0x65, 0xfe, 0x9d, 0x57, 0x36, 0xb6, 0x40, 0x09, 0x45, 0xbf, 0xd5, 0x30, 0x2e, 0x76, 0xd8, 0x6e, 0xe5, 0x0e, 0xb5, 0xd5, 0xc4, 0xea, 0xf6, 0x8e, 0x79, 0xfd, 0xda, 0xd6, 0xae, 0x72, 0xb1, 0x75, 0xac, 0x6e, 0x5a, 0x2e, 0x56, 0xeb, 0x56, 0x03, 0x2b, 0x1b, 0x5b, 0x20, 0x64, 0xe6, 0xdf, 0xb0, 0x25, 0xbf, 0x17, 0x88, 0x3e, 0x5f, 0x7c, 0x0f, 0xe6, 0xcc, 0xe6, 0x96, 0xfc, 0xff, 0xae, 0x3e, 0xc3, 0xe6, 0xdf, 0x4d, 0x7d, 0x9e, 0xcd, 0xbf, 0x9b, 0xf9, 0x37, 0x94, 0x9f, 0x93, 0xa7, 0x5f, 0x78, 0xc1, 0x38, 0x4b, 0x56, 0xdb, 0xde, 0x79, 0xe0, 0xc5, 0xef, 0x9d, 0xc4, 0x1d, 0xd7, 0x5c, 0x89, 0xd5, 0xcd, 0x6d, 0x44, 0xe3, 0x11, 0x3c, 0x3f, 0x80, 0xe7, 0x07, 0x18, 0x76, 0x3b, 0x17, 0xac, 0x19, 0x63, 0x78, 0xee, 0xe4, 0x43, 0x20, 0x84, 0x60, 0x6d, 0x75, 0x15, 0x1f, 0x79, 0xef, 0xad, 0x70, 0x1c, 0x06, 0x4a, 0x19, 0x26, 0x71, 0x04, 0xca, 0x28, 0x18, 0xa5, 0x48, 0xa3, 0x10, 0x8c, 0x52, 0x50, 0x46, 0x30, 0x89, 0x63, 0x50, 0x4a, 0x41, 0x29, 0xc5, 0x24, 0x8a, 0x40, 0x28, 0x91, 0x3a, 0x8e, 0x40, 0x29, 0x05, 0xa1, 0x04, 0x93, 0x68, 0xac, 0xce, 0x10, 0xd4, 0x3c, 0x8a, 0x67, 0x5e, 0x6f, 0x01, 0x94, 0xa1, 0x5b, 0x3f, 0xc0, 0xce, 0x55, 0xd7, 0xc2, 0xf3, 0x03, 0x0c, 0x3a, 0x2d, 0x38, 0x9c, 0xc3, 0xe5, 0x3e, 0x86, 0x9d, 0x0e, 0x5c, 0xce, 0xe1, 0xba, 0x1c, 0xc3, 0x4e, 0x07, 0x8e, 0xe7, 0xc1, 0xe5, 0x1c, 0xc3, 0x6e, 0x1b, 0x0e, 0xe7, 0x00, 0x08, 0x5e, 0x7d, 0xfa, 0x29, 0xbc, 0xf6, 0xdc, 0xd3, 0xe8, 0x1c, 0xee, 0x63, 0xd8, 0x69, 0xab, 0xef, 0x45, 0xb1, 0xe2, 0x33, 0xdc, 0x77, 0xcb, 0x55, 0xf8, 0xd4, 0x3d, 0x37, 0xe1, 0xea, 0x8d, 0x32, 0x4a, 0x01, 0x07, 0x65, 0x0c, 0x69, 0x92, 0x80, 0x32, 0x0a, 0x42, 0x19, 0x26, 0x71, 0x0c, 0x42, 0x29, 0x5e, 0x38, 0xe8, 0xe0, 0xd9, 0x57, 0xce, 0x81, 0x52, 0x8a, 0x13, 0x37, 0xdf, 0x86, 0x34, 0x49, 0xe0, 0x7a, 0xbe, 0x7a, 0x0f, 0x2d, 0xb8, 0x9e, 0x7c, 0x3f, 0x03, 0xa5, 0x3d, 0xa5, 0x3d, 0xcf, 0x87, 0xc3, 0x39, 0x06, 0xed, 0x96, 0x3c, 0xef, 0x49, 0xed, 0x78, 0x1c, 0x0e, 0xf7, 0x31, 0x68, 0x37, 0xe1, 0x72, 0xf9, 0x3a, 0xfd, 0x76, 0x0b, 0x2e, 0xf7, 0xe1, 0x29, 0xed, 0x71, 0x1f, 0xae, 0xef, 0xa3, 0xdf, 0x6a, 0xc2, 0xe5, 0x81, 0x3c, 0xd3, 0x6a, 0xc0, 0xe5, 0xf2, 0xff, 0x85, 0xd4, 0xbe, 0xd2, 0x4d, 0xf3, 0xff, 0x68, 0xd0, 0x6a, 0xa8, 0xaf, 0x55, 0xcf, 0x79, 0xfe, 0x5c, 0x9f, 0x1f, 0xb4, 0x9a, 0xf0, 0x7c, 0xdf, 0xbc, 0x8e, 0xfe, 0xda, 0x7e, 0xb3, 0x51, 0x7c, 0x1d, 0xa3, 0x9b, 0x70, 0xfd, 0xa0, 0x78, 0x9e, 0x07, 0xe8, 0x35, 0x1b, 0xe0, 0x3c, 0xff, 0x5a, 0xce, 0x03, 0x70, 0x3f, 0x40, 0xbf, 0x59, 0x07, 0xf7, 0x4b, 0xf0, 0x7c, 0xbf, 0xf8, 0xfa, 0xad, 0xc5, 0xaf, 0x6f, 0x7f, 0xdf, 0x45, 0x9a, 0x2f, 0x3a, 0xaf, 0xbe, 0x6f, 0xb7, 0x51, 0x87, 0xcb, 0x7d, 0x38, 0xdc, 0x47, 0xb7, 0x71, 0x08, 0xc7, 0xf3, 0xc1, 0x3c, 0x8e, 0xce, 0xe1, 0x01, 0xa8, 0xe7, 0x83, 0xba, 0x1e, 0x5a, 0x87, 0x07, 0x60, 0x2e, 0x07, 0x75, 0x39, 0xda, 0x87, 0x07, 0x60, 0xea, 0x4c, 0xfb, 0xf0, 0x00, 0x8e, 0xe7, 0xc3, 0xf1, 0x7c, 0x74, 0xea, 0xf2, 0x6b, 0x1d, 0x2e, 0xb5, 0xfe, 0xff, 0xd2, 0x6d, 0x1c, 0xca, 0x7f, 0x7f, 0x3f, 0x90, 0x2e, 0x4d, 0xbd, 0x07, 0xa9, 0x95, 0x4b, 0x53, 0x3f, 0x2f, 0x57, 0xee, 0x6d, 0x56, 0xeb, 0x33, 0x9e, 0x5f, 0xca, 0xbf, 0x56, 0xbd, 0xa6, 0x7e, 0x7d, 0xfd, 0x7d, 0x1d, 0xeb, 0xbd, 0x31, 0x8f, 0xab, 0xf7, 0xbf, 0x0f, 0xea, 0x72, 0x10, 0xc7, 0x43, 0xf3, 0x60, 0x1f, 0xc4, 0xf1, 0x00, 0xe6, 0xa2, 0xb1, 0x7f, 0x0e, 0x60, 0x2e, 0x32, 0xea, 0xa0, 0x71, 0xee, 0x1c, 0xe0, 0x78, 0x20, 0x8e, 0x8b, 0x56, 0xfd, 0x10, 0xd4, 0xe3, 0xa0, 0x9e, 0x87, 0x4e, 0xbd, 0x0e, 0x47, 0x7d, 0x96, 0x7a, 0xcd, 0x06, 0x5c, 0x5f, 0x7e, 0x36, 0x06, 0x6d, 0xfd, 0x19, 0xf0, 0x31, 0x68, 0xb5, 0xe0, 0xea, 0xcf, 0x83, 0x7a, 0x9e, 0x9f, 0x09, 0xe0, 0x05, 0xf2, 0xff, 0x1d, 0x37, 0xff, 0xfe, 0x4d, 0xa9, 0x4b, 0x25, 0xf4, 0x1a, 0x0d, 0x78, 0x25, 0x7d, 0xa6, 0x6e, 0x22, 0xbd, 0x5e, 0x53, 0xeb, 0x12, 0x06, 0x8d, 0x3a, 0xfc, 0x92, 0xfc, 0x37, 0xe9, 0xaa, 0xe7, 0xf2, 0xdf, 0xa7, 0x21, 0xdd, 0x67, 0xa9, 0x8c, 0x9e, 0xfa, 0x5a, 0xbf, 0x54, 0x36, 0x5f, 0xcb, 0x4b, 0x65, 0xf4, 0x5b, 0xfa, 0x4c, 0x49, 0xbe, 0x07, 0xe5, 0x7a, 0xfb, 0xad, 0x46, 0xfe, 0x3a, 0xea, 0x39, 0x2f, 0x95, 0x31, 0x50, 0xda, 0x33, 0x5a, 0xbd, 0x87, 0x76, 0x13, 0x9e, 0x3a, 0x3f, 0x68, 0x37, 0xa5, 0x33, 0x0e, 0x4a, 0x18, 0x74, 0x5a, 0xe0, 0x41, 0x80, 0xad, 0x8d, 0x4d, 0x9c, 0x7d, 0xf5, 0x0c, 0xfc, 0x72, 0x05, 0x6c, 0xef, 0xba, 0x1b, 0x1e, 0x60, 0x8e, 0x83, 0x9a, 0xef, 0xa2, 0xf5, 0xfa, 0xab, 0xc8, 0xa6, 0x13, 0x4c, 0xb3, 0x29, 0x4a, 0xd5, 0xd5, 0x23, 0xa1, 0xe8, 0xf2, 0x00, 0xa3, 0x5e, 0xc7, 0xfc, 0x82, 0x8e, 0x7a, 0x1d, 0x34, 0xce, 0xbe, 0x82, 0x51, 0xb7, 0x83, 0x34, 0x89, 0xf1, 0xd1, 0x7b, 0xef, 0xc2, 0xce, 0xe6, 0xba, 0x02, 0x9e, 0x84, 0x5f, 0x1a, 0x45, 0x60, 0x54, 0xc1, 0x32, 0x8e, 0x40, 0x29, 0x03, 0xa5, 0x04, 0x93, 0x38, 0x02, 0x61, 0x44, 0x01, 0x35, 0x04, 0x65, 0x04, 0x84, 0x10, 0xa9, 0x29, 0x01, 0x25, 0x04, 0x93, 0x28, 0x04, 0x65, 0x14, 0x25, 0xce, 0x31, 0x18, 0x0c, 0x51, 0x1f, 0x84, 0xc8, 0x26, 0x53, 0x4c, 0xa6, 0x13, 0x54, 0xd6, 0x37, 0x14, 0x08, 0xbb, 0x12, 0x4e, 0x1e, 0xc7, 0xa8, 0xdb, 0xb6, 0x00, 0xd9, 0x81, 0xc3, 0x39, 0xe2, 0xf1, 0x18, 0xa7, 0x9f, 0x7c, 0x1c, 0xaf, 0x3d, 0xff, 0x0c, 0xc6, 0xfd, 0x1e, 0xa2, 0xd1, 0x10, 0x84, 0x52, 0xb8, 0xae, 0x83, 0xab, 0x37, 0xca, 0xf8, 0x89, 0xbb, 0x6e, 0xc0, 0xfd, 0xb7, 0x5f, 0x8b, 0x0d, 0xdf, 0x85, 0xe3, 0x3a, 0x12, 0x8a, 0x89, 0x7e, 0x9f, 0x1a, 0x90, 0x0c, 0x94, 0x51, 0xa4, 0x49, 0x82, 0xef, 0x3c, 0x7f, 0x16, 0x9d, 0x71, 0x82, 0x69, 0x3a, 0xc1, 0x55, 0x77, 0xdc, 0x05, 0xd7, 0x0f, 0x30, 0xec, 0xb4, 0xe1, 0x18, 0x40, 0xb6, 0xe1, 0x70, 0x1f, 0x8e, 0xc7, 0x31, 0xec, 0xb4, 0xc1, 0x3c, 0x1f, 0x2e, 0xe7, 0x18, 0xb4, 0xdb, 0xf2, 0x83, 0xa9, 0xb4, 0xc3, 0xad, 0xe7, 0xdc, 0x87, 0xcb, 0x03, 0x0c, 0x67, 0x9e, 0x3b, 0x1a, 0x9c, 0xad, 0xa6, 0xfa, 0x80, 0x4b, 0x50, 0xe5, 0x5a, 0xfe, 0xa1, 0x70, 0xfc, 0x00, 0xc3, 0x56, 0x0b, 0x8e, 0x05, 0x4b, 0xf3, 0x4b, 0xa0, 0xc0, 0xe6, 0xf2, 0xfc, 0x97, 0xc0, 0xb1, 0x9f, 0x6b, 0xcd, 0x8b, 0x20, 0x74, 0x7d, 0x5f, 0x69, 0xfb, 0x75, 0x14, 0x74, 0x9b, 0x4d, 0x19, 0xe2, 0xd9, 0x3a, 0xd0, 0xdf, 0x77, 0x16, 0xa8, 0xa5, 0x82, 0x5e, 0xf8, 0xb5, 0x33, 0xaf, 0x33, 0x68, 0x5a, 0x30, 0x6e, 0x4a, 0xa8, 0x4b, 0x38, 0x35, 0xc0, 0xb8, 0x0f, 0xc6, 0x7d, 0x74, 0x0d, 0x00, 0x38, 0x3a, 0xf5, 0x43, 0x30, 0xce, 0x15, 0x20, 0x25, 0x0c, 0x1c, 0xee, 0xa3, 0xd7, 0xa8, 0x9b, 0x9f, 0xb1, 0xdf, 0x6c, 0xc0, 0x55, 0x61, 0x69, 0xbf, 0xd9, 0x30, 0x21, 0xea, 0xdf, 0x56, 0xdd, 0x6b, 0x36, 0xe0, 0xf8, 0xf2, 0xf3, 0xd3, 0xa9, 0xe7, 0x7f, 0x10, 0x66, 0x41, 0x4b, 0x1d, 0x0f, 0xc4, 0xf3, 0xd0, 0x3e, 0x3c, 0x04, 0xf3, 0x38, 0x18, 0xe7, 0xf2, 0x8f, 0x8c, 0x86, 0x65, 0x53, 0x42, 0xc8, 0xf3, 0xd5, 0xff, 0x97, 0x20, 0x30, 0x7f, 0x78, 0x5d, 0xfd, 0xff, 0xdd, 0x7c, 0xdf, 0x00, 0xfd, 0x46, 0xc3, 0x40, 0x48, 0x3f, 0xcf, 0xd3, 0x02, 0x3a, 0xe4, 0x6f, 0x80, 0x97, 0xcb, 0x79, 0xea, 0xa0, 0x2c, 0x41, 0xd8, 0x6d, 0xca, 0x90, 0x5c, 0x42, 0xb1, 0x0e, 0x1e, 0x9c, 0x07, 0x9c, 0x81, 0x06, 0x64, 0xc9, 0x02, 0x67, 0xb9, 0x08, 0xc8, 0xa0, 0x84, 0x7e, 0xbb, 0x69, 0x52, 0x13, 0xf3, 0x80, 0xcc, 0xb5, 0x17, 0x94, 0xe0, 0x5b, 0xb0, 0x4c, 0x99, 0x87, 0x6e, 0xfd, 0x00, 0xec, 0x9f, 0xff, 0xe6, 0x6f, 0x3e, 0xd0, 0x1f, 0x0e, 0x51, 0x2d, 0x97, 0x91, 0x26, 0x31, 0x92, 0xf1, 0x18, 0xdd, 0xc3, 0x7d, 0x74, 0xeb, 0x87, 0x28, 0xd7, 0xd6, 0x51, 0x5e, 0xad, 0x1d, 0xe9, 0x26, 0x47, 0x3d, 0xa9, 0x41, 0x80, 0xe7, 0x1f, 0x79, 0x18, 0x94, 0x52, 0x6c, 0x6f, 0xac, 0xe3, 0xbe, 0x3b, 0x6e, 0x94, 0xae, 0x91, 0x52, 0xa4, 0x71, 0xa8, 0x00, 0x49, 0x90, 0xc6, 0x12, 0x78, 0xd2, 0x35, 0x86, 0x20, 0xda, 0x4d, 0xc6, 0x11, 0x28, 0x85, 0x3a, 0x1f, 0x81, 0x12, 0xe9, 0x20, 0xd3, 0x28, 0x3f, 0x9f, 0xc6, 0x31, 0x28, 0x65, 0xd8, 0x5d, 0x5f, 0xc1, 0x13, 0xa7, 0xce, 0x22, 0x53, 0x45, 0x96, 0x52, 0x65, 0xc5, 0x80, 0x67, 0xd4, 0x6d, 0xc3, 0xe5, 0x1c, 0x8e, 0xe7, 0x63, 0xd8, 0xed, 0x80, 0x3a, 0x0e, 0x06, 0xad, 0x06, 0x5e, 0x7c, 0xec, 0x11, 0x34, 0xce, 0x9c, 0x46, 0x1c, 0x86, 0x48, 0xa2, 0x48, 0xba, 0xc7, 0x72, 0x80, 0xbb, 0x4e, 0x6c, 0xe2, 0x27, 0xef, 0xb9, 0x09, 0xb7, 0x5d, 0xb5, 0x87, 0x80, 0x01, 0x84, 0x28, 0x10, 0xc6, 0x31, 0x18, 0xa3, 0xd2, 0x4d, 0xc6, 0xd2, 0x4d, 0x4a, 0x2d, 0x1d, 0xf0, 0x54, 0x00, 0x7f, 0x71, 0xf2, 0x87, 0x10, 0x84, 0xa2, 0xb6, 0xb3, 0x0b, 0x2f, 0x28, 0xe5, 0x60, 0xd6, 0x8e, 0x96, 0xfb, 0x0a, 0x78, 0x1c, 0xae, 0xa7, 0x5c, 0x26, 0x97, 0x6e, 0x72, 0xd8, 0xc9, 0xe1, 0x37, 0x6c, 0x5b, 0xcf, 0xf5, 0x79, 0xeb, 0xb9, 0xcb, 0x7d, 0xe9, 0x38, 0x39, 0x87, 0xeb, 0xfb, 0x18, 0xb6, 0x94, 0xe3, 0xd4, 0x00, 0xe3, 0x01, 0x5c, 0x9f, 0xcb, 0xf3, 0xbe, 0xe5, 0x56, 0x8d, 0x33, 0x68, 0x1a, 0xf7, 0x93, 0xbb, 0x37, 0xf9, 0x5c, 0x3b, 0xb0, 0x61, 0xbb, 0xa9, 0xdc, 0x4c, 0x0e, 0x51, 0xad, 0xb5, 0xcb, 0x1c, 0xd8, 0x0e, 0xb5, 0xb9, 0x08, 0x84, 0x45, 0x3d, 0x6c, 0xd9, 0xee, 0x64, 0x5e, 0xbb, 0x33, 0xae, 0xb7, 0xaf, 0x7e, 0x2e, 0xc7, 0xf7, 0xd1, 0x6b, 0x34, 0xe0, 0x70, 0xf9, 0x0b, 0xdd, 0x6d, 0xd4, 0xe1, 0x98, 0x5f, 0xdc, 0x59, 0xf8, 0xf9, 0x06, 0x7e, 0x39, 0x5c, 0x97, 0x7a, 0x4e, 0xb7, 0x9a, 0x0b, 0x21, 0x3a, 0xf7, 0x5c, 0xfd, 0x21, 0xed, 0xd4, 0x0f, 0xcd, 0xbf, 0x7f, 0xfb, 0xf0, 0x00, 0x94, 0x73, 0x10, 0xd7, 0x43, 0xeb, 0x60, 0x1f, 0x94, 0x73, 0x38, 0xbe, 0xfc, 0x03, 0x25, 0xff, 0x50, 0x5b, 0xaf, 0xe9, 0x97, 0x2c, 0x38, 0xe5, 0x91, 0x8c, 0x84, 0x5c, 0x43, 0xb9, 0x6d, 0xf5, 0xdc, 0x7c, 0xdf, 0x43, 0x09, 0xad, 0x52, 0x09, 0xfd, 0xfa, 0x21, 0x78, 0x10, 0x80, 0x97, 0xcb, 0x2a, 0x87, 0x1a, 0xc0, 0x2f, 0x57, 0x64, 0x94, 0x62, 0xdc, 0xa4, 0x02, 0x67, 0xb9, 0x5c, 0x70, 0x9f, 0x1a, 0x90, 0xc6, 0x59, 0x06, 0x25, 0x03, 0x51, 0xdf, 0xb8, 0xcc, 0x66, 0xee, 0x68, 0x5b, 0x45, 0x40, 0x4a, 0x37, 0x59, 0x36, 0xb0, 0xe4, 0x41, 0x80, 0x7e, 0xbb, 0x85, 0x94, 0x3a, 0xd2, 0x51, 0xfe, 0xb3, 0x07, 0xfe, 0xb7, 0x07, 0xde, 0x7b, 0xdb, 0x2d, 0xb8, 0xe5, 0xa6, 0x1b, 0x10, 0xc6, 0x31, 0x9a, 0xcd, 0x26, 0x18, 0x73, 0x90, 0xc6, 0x11, 0xf6, 0x4f, 0x3d, 0x8f, 0x70, 0x34, 0xc4, 0xca, 0xc6, 0x26, 0x92, 0x28, 0x2c, 0xb8, 0x49, 0x1b, 0x96, 0xf5, 0xd3, 0x2f, 0x21, 0x1a, 0xf4, 0x91, 0x26, 0x31, 0x3e, 0xf6, 0x81, 0xbb, 0xb1, 0x51, 0x5b, 0x51, 0x0e, 0x92, 0xe4, 0x0e, 0x92, 0xb1, 0x1c, 0x8a, 0x8c, 0x82, 0x10, 0xad, 0x09, 0x28, 0x91, 0x40, 0xd5, 0x0e, 0x32, 0x8d, 0x43, 0x30, 0xa6, 0x9c, 0x68, 0x22, 0x01, 0x49, 0x19, 0xc3, 0x24, 0x89, 0xe1, 0xb9, 0xb2, 0x38, 0x74, 0xfa, 0x5c, 0x1d, 0x22, 0xcb, 0xe0, 0x95, 0x4a, 0x20, 0x04, 0x70, 0x5c, 0x0e, 0x87, 0x73, 0x8c, 0x7a, 0x5d, 0x4c, 0xd2, 0x14, 0xad, 0xd7, 0xcf, 0xe2, 0xc5, 0xc7, 0x4e, 0xa2, 0xdf, 0xa8, 0x63, 0x3a, 0x9d, 0x22, 0x89, 0x65, 0x68, 0x7f, 0xcd, 0xde, 0x06, 0x7e, 0xf4, 0xfa, 0x3d, 0x7c, 0xfc, 0x3d, 0x37, 0xe0, 0xc4, 0x76, 0x0d, 0x64, 0x32, 0x91, 0xef, 0x8d, 0x31, 0x59, 0xc4, 0xd1, 0xef, 0x33, 0x91, 0x21, 0x36, 0x65, 0x14, 0x93, 0x38, 0x91, 0xe1, 0x3f, 0x63, 0x98, 0x24, 0x09, 0x4e, 0x37, 0xba, 0x78, 0xe6, 0xf5, 0x16, 0x26, 0x71, 0x84, 0xbd, 0xeb, 0x6f, 0x44, 0x75, 0x73, 0x4b, 0x86, 0xf9, 0x3e, 0x57, 0x20, 0x54, 0x0e, 0x8f, 0x7b, 0x0a, 0x7e, 0x9e, 0x74, 0x96, 0xed, 0x16, 0x5c, 0x9f, 0x1b, 0x97, 0xa9, 0xe1, 0x3a, 0xd0, 0xcf, 0x95, 0x96, 0x5f, 0x2b, 0xcf, 0x6b, 0x3d, 0x68, 0x35, 0x95, 0x33, 0xe0, 0xe8, 0x6b, 0x98, 0x71, 0x6e, 0x5c, 0xa6, 0x09, 0xdb, 0x7d, 0x3b, 0x3c, 0xf7, 0xe1, 0xfa, 0x5c, 0x39, 0x3c, 0x3e, 0xe3, 0x0e, 0x7d, 0xcb, 0x71, 0xfa, 0x32, 0x0c, 0xf7, 0xfd, 0xb9, 0x33, 0xb9, 0x73, 0x9d, 0x7f, 0x9e, 0xbf, 0x4e, 0x43, 0xc1, 0x6f, 0x56, 0x2b, 0x28, 0xf2, 0xfc, 0xbc, 0xa3, 0xc2, 0x3d, 0xfd, 0x6f, 0xd5, 0x6d, 0x48, 0x17, 0xc8, 0x3c, 0x0f, 0x9d, 0xc6, 0xa1, 0xf9, 0x79, 0x73, 0x10, 0xfa, 0x45, 0xa7, 0xb2, 0xd4, 0x47, 0x6b, 0xe5, 0xa8, 0x72, 0x67, 0xdf, 0x30, 0x45, 0x9a, 0x41, 0xcb, 0x06, 0xa7, 0x05, 0x33, 0xfb, 0x6b, 0xb5, 0xf3, 0x2b, 0x95, 0x67, 0x74, 0x9e, 0x3a, 0xe8, 0x35, 0xea, 0x70, 0xfc, 0x00, 0x4c, 0x01, 0x95, 0x71, 0xf9, 0x47, 0xac, 0x7d, 0xb0, 0x0f, 0x27, 0x08, 0xc0, 0x3c, 0x1f, 0xdd, 0x46, 0x43, 0x39, 0xce, 0x1c, 0xc6, 0xbe, 0x02, 0xb6, 0x0e, 0xcf, 0xfb, 0xad, 0x26, 0xbc, 0xc0, 0x37, 0x90, 0xd6, 0x85, 0x22, 0xed, 0x38, 0xfd, 0xa0, 0x84, 0x9e, 0x0a, 0xa5, 0xfd, 0x52, 0x45, 0x01, 0xaf, 0x64, 0xde, 0x9b, 0x71, 0x96, 0xad, 0xba, 0x29, 0x20, 0xe9, 0xe7, 0x3c, 0x50, 0x6e, 0xb2, 0x54, 0x0c, 0xc9, 0x7d, 0xf5, 0x7d, 0x75, 0xd8, 0x3e, 0x68, 0x35, 0xf3, 0xf0, 0x5c, 0xc1, 0xd2, 0x0b, 0xca, 0xd2, 0x38, 0xa8, 0x62, 0xf0, 0x6b, 0x67, 0x5f, 0x85, 0x5f, 0xae, 0x80, 0x3c, 0xf2, 0xf4, 0xd3, 0x42, 0x64, 0x19, 0x2a, 0x9e, 0x0b, 0xc7, 0xf5, 0x70, 0x58, 0xaf, 0xe3, 0xe1, 0x47, 0x1f, 0xc3, 0xeb, 0xf5, 0x06, 0x20, 0x64, 0x01, 0xc3, 0xf5, 0x38, 0x56, 0xb7, 0x77, 0xb0, 0xba, 0xb5, 0x83, 0xad, 0x2b, 0xaf, 0x01, 0x20, 0x8b, 0x37, 0xe5, 0xd5, 0x35, 0x44, 0xe3, 0x21, 0x9e, 0x78, 0xf0, 0x4b, 0x70, 0x5c, 0x0f, 0xbb, 0x9b, 0x6b, 0xf8, 0xe9, 0x0f, 0xbe, 0x0f, 0xae, 0x55, 0xbc, 0x71, 0x5c, 0xa9, 0x93, 0x28, 0x44, 0x98, 0x4e, 0xd0, 0x1d, 0x8e, 0xd1, 0x68, 0xb5, 0x31, 0x15, 0x14, 0x49, 0x3a, 0xc1, 0x70, 0x3c, 0x44, 0x06, 0x8a, 0x74, 0x32, 0x05, 0x9d, 0x4e, 0x50, 0x2e, 0x07, 0xf0, 0x18, 0x03, 0xa6, 0x29, 0x6a, 0x2b, 0x15, 0xac, 0x96, 0x7d, 0x54, 0x1d, 0x82, 0x4a, 0xa5, 0x0c, 0x00, 0x98, 0x24, 0x11, 0xc0, 0x5c, 0xfc, 0xc1, 0xd7, 0xbe, 0x8f, 0x76, 0xb7, 0x0f, 0xbf, 0x5c, 0xc1, 0x2d, 0x1f, 0xbc, 0x1f, 0xf1, 0x70, 0x88, 0x34, 0x89, 0x51, 0x7f, 0xf5, 0x34, 0xba, 0x87, 0xfb, 0x60, 0x8e, 0x8b, 0x69, 0x96, 0x61, 0x92, 0x24, 0xa8, 0x94, 0x03, 0xdc, 0x7a, 0x62, 0x07, 0xb7, 0xee, 0xd5, 0xb0, 0xb5, 0xb6, 0x0a, 0x01, 0x81, 0x49, 0x9c, 0xc0, 0xf1, 0x3c, 0x08, 0x21, 0xcf, 0x38, 0x9e, 0x2c, 0xd8, 0x4c, 0xe2, 0x18, 0xcc, 0xe8, 0x04, 0xcc, 0xfc, 0x2c, 0x31, 0x5c, 0xce, 0x01, 0x00, 0x7f, 0xf6, 0xd0, 0x93, 0x78, 0x66, 0xbf, 0x03, 0x00, 0xb8, 0xee, 0xee, 0x7b, 0xf2, 0x64, 0x77, 0xb7, 0x23, 0x8b, 0x49, 0xaa, 0xb8, 0x55, 0x5a, 0xad, 0x99, 0x42, 0x97, 0x29, 0x32, 0x75, 0xac, 0x02, 0x4f, 0xa7, 0x8d, 0x4a, 0x6d, 0x5d, 0x15, 0x9c, 0xda, 0x28, 0xaf, 0xae, 0x41, 0x00, 0x79, 0x91, 0xc6, 0x2e, 0xd8, 0x08, 0xa1, 0xce, 0x17, 0xbf, 0x56, 0xea, 0x96, 0x2a, 0xea, 0xc8, 0xc4, 0x74, 0x65, 0x6d, 0x03, 0x50, 0x5f, 0x5b, 0x5e, 0x5b, 0x37, 0x09, 0xeb, 0x4a, 0x6d, 0xa3, 0x70, 0x1e, 0xf6, 0xf9, 0x99, 0xc2, 0x8f, 0xfd, 0x3c, 0xd7, 0x02, 0x83, 0x4e, 0x0b, 0xd5, 0xb5, 0xfc, 0x75, 0xaa, 0x47, 0x7c, 0x6d, 0x59, 0x9f, 0x6f, 0x37, 0x51, 0xae, 0xc9, 0xe2, 0x53, 0xbf, 0xdd, 0x40, 0x65, 0xcd, 0x2a, 0xae, 0xac, 0x2f, 0xf5, 0xdb, 0xa9, 0x75, 0x11, 0xa8, 0x50, 0x00, 0x23, 0x33, 0xc5, 0x98, 0x56, 0xb1, 0x10, 0x52, 0xb5, 0x0a, 0x4b, 0x55, 0xab, 0x30, 0x26, 0x8b, 0x2b, 0x44, 0x16, 0x5a, 0x54, 0x91, 0x66, 0xd0, 0x6a, 0x9a, 0x82, 0xcd, 0xa0, 0xd5, 0x92, 0xaf, 0x49, 0x08, 0x46, 0xed, 0x26, 0x56, 0xb7, 0x76, 0xc0, 0x28, 0xc5, 0xa8, 0xdb, 0xc2, 0xea, 0xc6, 0x36, 0x28, 0x65, 0x18, 0x76, 0x5b, 0x79, 0x01, 0xa6, 0xd5, 0xc4, 0xca, 0xd6, 0x0e, 0x28, 0x21, 0x18, 0xcc, 0x14, 0x7e, 0x6a, 0xaa, 0xed, 0x48, 0x16, 0xbd, 0xb6, 0x41, 0x88, 0x2c, 0x9e, 0xc9, 0xaf, 0x95, 0x6d, 0x50, 0x76, 0xe1, 0xa7, 0xa8, 0xe7, 0x8b, 0x3a, 0x79, 0x71, 0x88, 0x60, 0xa0, 0xb4, 0xf9, 0x77, 0xd8, 0x28, 0x16, 0x7b, 0x0e, 0xfb, 0x43, 0x59, 0xf5, 0xfe, 0xe6, 0xa3, 0x8f, 0x08, 0xcf, 0xf7, 0x51, 0xab, 0x54, 0x30, 0x89, 0x23, 0x30, 0xd7, 0x05, 0x20, 0xb0, 0x7f, 0x6e, 0x1f, 0x4f, 0x3e, 0xfb, 0x02, 0x5e, 0x3e, 0xfb, 0xba, 0x84, 0x84, 0xc7, 0x21, 0x84, 0x80, 0x5f, 0xa9, 0xe2, 0xea, 0x3b, 0xee, 0x42, 0x65, 0x6d, 0x03, 0xa3, 0x5e, 0x07, 0x87, 0x2f, 0x9f, 0x42, 0x7b, 0xff, 0x75, 0xa4, 0x49, 0x8c, 0xcf, 0x7e, 0xe2, 0x23, 0x38, 0xb6, 0xb9, 0x86, 0x34, 0x8e, 0x30, 0x4a, 0x52, 0xbc, 0x56, 0x6f, 0xe1, 0xf4, 0xd9, 0x7d, 0x74, 0xc6, 0x31, 0x86, 0xe3, 0x08, 0x71, 0x14, 0xc1, 0xe5, 0x12, 0x42, 0x49, 0x1c, 0xc1, 0x75, 0x65, 0x05, 0x39, 0x8d, 0x62, 0x30, 0xce, 0x21, 0xb2, 0x4c, 0x81, 0x59, 0x9d, 0x89, 0x22, 0x38, 0x1e, 0x87, 0x10, 0x19, 0x30, 0x4d, 0xb1, 0x59, 0x5b, 0xc5, 0xf1, 0x8d, 0x15, 0xec, 0x56, 0x39, 0xa2, 0x0c, 0xf8, 0xea, 0x53, 0x2f, 0x63, 0x92, 0x24, 0x60, 0x8e, 0x03, 0xd7, 0xf7, 0x31, 0xea, 0xf5, 0xe0, 0x7a, 0x1e, 0x32, 0x05, 0xb6, 0x2b, 0xb6, 0xd7, 0x71, 0xe7, 0x95, 0x3b, 0xb8, 0x76, 0xbb, 0x8a, 0xc0, 0x0f, 0x24, 0x20, 0x93, 0x18, 0xcc, 0xf5, 0x00, 0x01, 0x4c, 0x92, 0xd8, 0x00, 0x32, 0x8d, 0x63, 0x59, 0x61, 0x87, 0x50, 0x95, 0x7a, 0xfd, 0x3c, 0x82, 0xcb, 0xe5, 0xcf, 0x2e, 0xdb, 0x86, 0x3c, 0xfc, 0xce, 0x17, 0x1f, 0x46, 0xb7, 0x3f, 0xc0, 0xda, 0xf6, 0x1e, 0xae, 0xbf, 0xe7, 0x03, 0x18, 0xf5, 0xba, 0x28, 0xad, 0xae, 0xca, 0x3f, 0x20, 0xdd, 0x5c, 0x0f, 0xb5, 0x16, 0x50, 0x67, 0x6a, 0x12, 0x60, 0xaa, 0x32, 0x2e, 0x20, 0x30, 0xec, 0x74, 0x66, 0xc0, 0xb9, 0x66, 0x2a, 0xf5, 0x65, 0x03, 0xd7, 0x99, 0x33, 0x33, 0x15, 0x73, 0x03, 0xd7, 0x19, 0x70, 0x42, 0xc8, 0xf3, 0x55, 0x55, 0x19, 0xd7, 0xd0, 0xcd, 0xbf, 0x76, 0xdd, 0xc0, 0xdb, 0x3c, 0x3f, 0x0a, 0x84, 0x36, 0x5c, 0x67, 0x2a, 0xa7, 0xba, 0xf2, 0xde, 0x6f, 0xb5, 0x50, 0x56, 0x50, 0xef, 0xb7, 0xf2, 0x0a, 0xbb, 0xae, 0xda, 0x2f, 0xf5, 0x3b, 0xa8, 0x37, 0x16, 0x80, 0x53, 0x55, 0x78, 0x17, 0x42, 0x74, 0x73, 0xcb, 0x54, 0xdb, 0xab, 0xaa, 0xaa, 0xbe, 0x08, 0x9c, 0x1a, 0x96, 0x06, 0x4e, 0x6d, 0x1b, 0x96, 0x0a, 0x4e, 0x84, 0xca, 0x0e, 0x84, 0xcd, 0x1c, 0x4e, 0xb5, 0xad, 0x1d, 0x10, 0x4a, 0x30, 0x6a, 0xb7, 0x51, 0xdb, 0xd9, 0x05, 0xa3, 0x14, 0x83, 0x76, 0x13, 0xb5, 0x2d, 0xd9, 0xd3, 0x39, 0x98, 0x05, 0xa4, 0xd2, 0xf2, 0x35, 0xb7, 0x41, 0x00, 0xf4, 0x9a, 0x75, 0xd4, 0xac, 0x5e, 0x4f, 0xf3, 0x5c, 0x55, 0xcf, 0x09, 0x48, 0xb1, 0x62, 0xde, 0x6a, 0x60, 0x75, 0x63, 0x5b, 0x76, 0x17, 0xcc, 0xc0, 0xb2, 0xba, 0xa1, 0x2b, 0xe3, 0xad, 0x02, 0x2c, 0x43, 0xc7, 0x07, 0x00, 0x90, 0x93, 0x4f, 0x3c, 0x21, 0x92, 0xf1, 0x10, 0xdb, 0x3b, 0xb2, 0x19, 0x7b, 0x12, 0x15, 0xdb, 0x79, 0xfa, 0xe3, 0x10, 0x8f, 0x3d, 0xf5, 0x34, 0x9e, 0x7b, 0xf1, 0xe5, 0x42, 0x9b, 0xcc, 0xfa, 0xb1, 0x2b, 0x50, 0xdb, 0xde, 0xc5, 0xe9, 0x27, 0x1f, 0x83, 0xe3, 0x72, 0x9c, 0xd8, 0xdd, 0xc2, 0xad, 0x57, 0xee, 0xe0, 0xf4, 0x41, 0x1b, 0xaf, 0x1e, 0x34, 0xd0, 0x1f, 0x0c, 0x73, 0x28, 0x46, 0xf1, 0x79, 0x01, 0x09, 0x21, 0x90, 0x26, 0x91, 0x79, 0xfd, 0x24, 0x8a, 0x24, 0xcc, 0x90, 0x3b, 0x39, 0x21, 0x04, 0x92, 0x28, 0x82, 0xeb, 0x79, 0x10, 0xca, 0xf9, 0x71, 0x9f, 0x63, 0x32, 0xcd, 0x90, 0x28, 0xb0, 0x09, 0x21, 0x20, 0x26, 0x29, 0x6e, 0xbb, 0xfa, 0x18, 0xee, 0xbc, 0x72, 0x07, 0x1b, 0x65, 0x4f, 0xfd, 0x2c, 0x12, 0x8a, 0xcc, 0x2b, 0x02, 0x52, 0x08, 0xed, 0x20, 0x5d, 0xe5, 0x20, 0x23, 0x09, 0x48, 0xa1, 0x5b, 0x81, 0xf2, 0x9f, 0xd7, 0x75, 0x65, 0xeb, 0xd0, 0xe9, 0x73, 0x75, 0x7c, 0xee, 0xa1, 0x67, 0x20, 0x84, 0xc0, 0xc6, 0xf1, 0x2b, 0x71, 0xe2, 0xd6, 0xdb, 0x15, 0x48, 0x2c, 0xb0, 0x75, 0x8b, 0x5a, 0xba, 0xc9, 0x79, 0x28, 0xca, 0x36, 0x22, 0x0b, 0x9c, 0xba, 0x95, 0xa9, 0x96, 0xc3, 0x6f, 0x16, 0xa2, 0x45, 0x37, 0x29, 0x0c, 0xf0, 0x16, 0x83, 0x70, 0x2d, 0x77, 0xb1, 0xe7, 0x81, 0x9c, 0x0d, 0x45, 0x01, 0x31, 0x7f, 0x66, 0xe6, 0x7c, 0x26, 0x04, 0x06, 0xed, 0x25, 0x14, 0xff, 0x26, 0xe8, 0xbc, 0x3d, 0x2a, 0x7f, 0x3e, 0xec, 0xb4, 0xcf, 0x0b, 0x51, 0x42, 0xc8, 0x5c, 0x8b, 0x8d, 0x0d, 0x4e, 0xf3, 0xdc, 0x82, 0xe5, 0x5c, 0x8b, 0xd0, 0x51, 0x2e, 0xd3, 0xe8, 0x86, 0x6a, 0x5c, 0x57, 0x8e, 0x70, 0x6b, 0x17, 0xa0, 0xb2, 0xf5, 0x69, 0x7d, 0x67, 0x07, 0x8c, 0x32, 0x0c, 0xdb, 0x2d, 0xd4, 0xb6, 0xb6, 0x41, 0x19, 0xc3, 0x50, 0xbf, 0x0e, 0x95, 0x6d, 0x47, 0xba, 0xa5, 0x48, 0xbb, 0xc9, 0x39, 0x97, 0x79, 0x44, 0xab, 0xd1, 0xa0, 0x9d, 0xc3, 0xd2, 0x6e, 0x29, 0x1a, 0xb6, 0x9b, 0x0b, 0x61, 0xf9, 0xc2, 0xa9, 0x97, 0x64, 0xc3, 0xfc, 0xc9, 0xef, 0x7f, 0x4f, 0x86, 0xde, 0x2a, 0xa7, 0x86, 0x4c, 0x98, 0x1e, 0x47, 0x09, 0xb0, 0x10, 0xae, 0xeb, 0xa1, 0xdd, 0xeb, 0xe3, 0xe4, 0xf7, 0x9e, 0xc4, 0x2b, 0x07, 0x4d, 0xe3, 0xae, 0x5c, 0x8f, 0x1b, 0x90, 0x94, 0x2b, 0x15, 0xc4, 0x49, 0x82, 0x34, 0x4e, 0x16, 0x02, 0x32, 0x55, 0xa1, 0x2e, 0xd4, 0xd7, 0x4a, 0xf7, 0x06, 0xa4, 0x71, 0x98, 0x03, 0x38, 0x96, 0x6e, 0xcf, 0x84, 0xc3, 0xca, 0xe1, 0x15, 0x00, 0xa9, 0x1c, 0xa4, 0xfe, 0xbe, 0xf2, 0xbc, 0x80, 0x48, 0x53, 0xdc, 0x70, 0x62, 0x07, 0x1f, 0xb9, 0xf5, 0x2a, 0x04, 0x8c, 0x98, 0xbe, 0x4c, 0x3b, 0x94, 0x96, 0x30, 0x96, 0x90, 0xb6, 0x01, 0x99, 0xc6, 0xb1, 0xec, 0xef, 0x04, 0x90, 0x28, 0x47, 0x2b, 0x32, 0xa1, 0x42, 0xf2, 0xfc, 0x8c, 0xe3, 0x79, 0xf8, 0xca, 0x53, 0x2f, 0xe1, 0xdb, 0x4f, 0xbd, 0x04, 0xc7, 0xf3, 0x70, 0xcb, 0x07, 0xef, 0x47, 0x9a, 0x24, 0x06, 0x8a, 0x83, 0x6e, 0x1b, 0x95, 0x55, 0xcb, 0x29, 0xae, 0xea, 0xde, 0x4d, 0x15, 0x86, 0x43, 0x28, 0xc7, 0x39, 0x1f, 0x86, 0x6b, 0x2d, 0x00, 0x8c, 0x3a, 0x6d, 0x94, 0x0a, 0xcf, 0xd7, 0x15, 0x68, 0xe7, 0xb5, 0x80, 0xc0, 0xa8, 0xd3, 0x31, 0x7d, 0x99, 0xf9, 0x19, 0xf9, 0x57, 0xbf, 0xac, 0x20, 0x37, 0x6a, 0xdb, 0x61, 0x78, 0xd1, 0x4d, 0xea, 0xaf, 0x1d, 0xb5, 0xdb, 0x73, 0xe7, 0x75, 0x8f, 0x66, 0x49, 0x87, 0xff, 0x56, 0x8f, 0xa6, 0xee, 0xe9, 0x5c, 0xea, 0x77, 0x8f, 0x26, 0x2a, 0x74, 0x7d, 0x63, 0x67, 0x99, 0xf7, 0x5c, 0x2e, 0x84, 0xa8, 0x82, 0xe5, 0x42, 0x70, 0x5a, 0x80, 0x1c, 0xaa, 0xfe, 0x4b, 0x2c, 0x80, 0xe5, 0x51, 0x2e, 0x73, 0x75, 0x6b, 0x07, 0x20, 0xa4, 0x30, 0xf1, 0x23, 0xc1, 0xb9, 0x6b, 0xa6, 0x82, 0xb4, 0x9b, 0x1c, 0x34, 0x1b, 0x58, 0xdf, 0x3d, 0x06, 0xa6, 0x60, 0xb9, 0xb6, 0xb3, 0x0b, 0xca, 0xa8, 0x74, 0xa5, 0xdb, 0x7b, 0xc5, 0xe9, 0xa2, 0x59, 0x97, 0xd9, 0x9a, 0x85, 0x62, 0x0e, 0x69, 0x19, 0x86, 0x93, 0x62, 0x78, 0x6e, 0xa5, 0x14, 0xb4, 0xe3, 0x6c, 0x0c, 0x46, 0x32, 0xf4, 0xfe, 0xc6, 0xb7, 0xbf, 0x2e, 0x43, 0xef, 0xea, 0xaa, 0x72, 0x54, 0xc5, 0xe6, 0x70, 0x09, 0xad, 0x3c, 0xd7, 0xd8, 0x6c, 0xb6, 0xf0, 0xe4, 0xa9, 0x57, 0xf1, 0xc2, 0x99, 0xd7, 0xa5, 0x3b, 0x54, 0x4d, 0xda, 0x36, 0x20, 0xb5, 0x16, 0x42, 0x3e, 0x2f, 0x55, 0xca, 0x58, 0x5f, 0xab, 0x62, 0xb5, 0xea, 0x63, 0x6b, 0x7b, 0x0d, 0xb5, 0xd5, 0x0a, 0x5c, 0x9a, 0xc1, 0x2f, 0xf9, 0x70, 0x5d, 0x0a, 0x86, 0x09, 0x1c, 0xcf, 0xc1, 0x64, 0x3a, 0x41, 0x38, 0x1c, 0x62, 0x9a, 0x11, 0xc4, 0x49, 0x82, 0x6e, 0xbb, 0x8b, 0xde, 0x68, 0x82, 0x66, 0x73, 0x80, 0x83, 0xfd, 0x0e, 0x06, 0xe3, 0x89, 0xcc, 0x77, 0x5a, 0xa1, 0x71, 0x12, 0x45, 0x06, 0xa8, 0x69, 0x1c, 0xc3, 0xe7, 0x3e, 0xee, 0xba, 0x66, 0x17, 0xef, 0x39, 0xb1, 0x81, 0x95, 0x6a, 0x45, 0xba, 0x52, 0x05, 0x66, 0x03, 0x48, 0xd7, 0x76, 0x8a, 0xda, 0xe9, 0xc6, 0x39, 0x5c, 0xad, 0xc6, 0xf2, 0x54, 0x37, 0xcc, 0x2b, 0xe8, 0xfe, 0xeb, 0xaf, 0x3c, 0x81, 0xe6, 0x70, 0x0c, 0x46, 0x1d, 0xdc, 0xf1, 0xe3, 0x9f, 0x80, 0x10, 0x42, 0xe6, 0x6b, 0x75, 0x43, 0x7b, 0xaf, 0x83, 0xd2, 0x4a, 0xcd, 0xe4, 0x71, 0xb5, 0x1e, 0xda, 0x5a, 0xe5, 0x23, 0x6d, 0x9d, 0x37, 0xc3, 0xaf, 0x1d, 0x79, 0xc6, 0x6e, 0x68, 0x17, 0x42, 0x60, 0xd4, 0xed, 0xcc, 0x80, 0x56, 0x83, 0x53, 0x41, 0x51, 0x35, 0xbd, 0xeb, 0x90, 0xdc, 0x6e, 0x80, 0x1f, 0x75, 0x66, 0xc0, 0x69, 0x85, 0xed, 0xe5, 0x9a, 0x76, 0x8d, 0xcd, 0x1c, 0xba, 0x9d, 0x37, 0xca, 0x5f, 0x2e, 0xf5, 0xbb, 0x5a, 0x5b, 0x21, 0x76, 0x65, 0x91, 0xb3, 0xb4, 0xf4, 0x70, 0x91, 0x3e, 0x0a, 0x9c, 0xc4, 0x6a, 0x80, 0xb7, 0xc2, 0x73, 0xdb, 0x65, 0xda, 0xb9, 0x4c, 0x52, 0x00, 0xa4, 0x0c, 0xc9, 0x57, 0xe7, 0x5c, 0x26, 0x2d, 0xc0, 0xb2, 0xdf, 0x6c, 0x48, 0x57, 0x47, 0x29, 0xfa, 0x8d, 0x3a, 0xd6, 0x77, 0xf7, 0xa4, 0xcb, 0x6c, 0x37, 0xb0, 0xbe, 0x73, 0x0c, 0x74, 0x36, 0xfc, 0xb7, 0x5c, 0xa6, 0x1d, 0x92, 0xdb, 0x67, 0xde, 0x10, 0x96, 0x4a, 0xc7, 0x5e, 0x49, 0x86, 0xde, 0x0f, 0x7f, 0xf7, 0x61, 0x91, 0x8c, 0x47, 0xd8, 0xde, 0xdd, 0x53, 0x6e, 0x32, 0x94, 0x39, 0x42, 0x35, 0x3d, 0xe3, 0xb8, 0xd2, 0x05, 0x6a, 0x88, 0xbe, 0xba, 0x5f, 0xc7, 0x77, 0x1e, 0xff, 0x01, 0xda, 0xc3, 0xe8, 0x48, 0x40, 0x3a, 0x8e, 0x83, 0xad, 0x8d, 0x15, 0x5c, 0x77, 0xfd, 0x55, 0x38, 0x71, 0x7c, 0x1b, 0xab, 0x55, 0xae, 0xf2, 0x8e, 0x13, 0xa4, 0x51, 0x04, 0xc7, 0x73, 0x14, 0x80, 0x43, 0x38, 0xae, 0x03, 0x81, 0x4c, 0x7d, 0x5f, 0x17, 0xc0, 0x54, 0x7d, 0x5f, 0x47, 0x4e, 0xe4, 0x24, 0x11, 0x98, 0xcb, 0x00, 0x64, 0x18, 0x0f, 0x47, 0xd8, 0xaf, 0x8f, 0xf1, 0xea, 0xd9, 0x0e, 0x5e, 0x78, 0xa1, 0x8e, 0xde, 0x70, 0x6a, 0xf2, 0x91, 0xcc, 0x71, 0x0d, 0xd8, 0x98, 0xe7, 0x81, 0x12, 0xe0, 0xb6, 0xbd, 0x35, 0xdc, 0x77, 0xdb, 0x75, 0xa8, 0xf8, 0x6e, 0x9e, 0x9b, 0xb4, 0x00, 0x29, 0x84, 0xc0, 0x24, 0x4d, 0x54, 0xce, 0x52, 0xe5, 0x26, 0xb9, 0x6b, 0x85, 0xe4, 0xf2, 0xfc, 0x34, 0x89, 0xc1, 0x5c, 0x8e, 0x56, 0x7f, 0x84, 0xff, 0xf3, 0x0b, 0xdf, 0x04, 0xf3, 0x38, 0xb6, 0xaf, 0xbe, 0x06, 0xb5, 0xed, 0x1d, 0x94, 0x66, 0x00, 0xa9, 0xc1, 0xa9, 0x9f, 0x8f, 0x2d, 0x3d, 0x0f, 0x42, 0xe5, 0x0e, 0xad, 0xe7, 0x23, 0xf5, 0x5c, 0x40, 0xcc, 0xc3, 0xb2, 0xb6, 0x2e, 0x8b, 0x43, 0xdd, 0xf6, 0x1c, 0x20, 0x01, 0xbb, 0xf0, 0x33, 0x03, 0xc8, 0x4e, 0xcb, 0x40, 0x71, 0x16, 0x90, 0xa5, 0xd5, 0x35, 0x55, 0x28, 0x6a, 0x59, 0xc5, 0xa4, 0x25, 0x60, 0xfe, 0xa6, 0x6b, 0x42, 0xc8, 0x91, 0x67, 0x46, 0x9d, 0xf6, 0x91, 0x10, 0x2d, 0x38, 0xce, 0x8d, 0xcd, 0x02, 0x2c, 0x0b, 0xee, 0x93, 0x58, 0x53, 0x2c, 0x84, 0x2c, 0x0e, 0xcf, 0x67, 0x60, 0x69, 0xe0, 0xaa, 0xa6, 0x79, 0x66, 0x43, 0xf2, 0xdc, 0x59, 0xe6, 0xb0, 0x5c, 0xdd, 0xca, 0xe7, 0xd6, 0x6b, 0xdb, 0x7b, 0x39, 0x38, 0x77, 0x76, 0x41, 0x18, 0x43, 0xaf, 0x71, 0x88, 0x8d, 0xdd, 0xe3, 0xb2, 0x08, 0xd4, 0xaa, 0x63, 0x6d, 0x7b, 0x57, 0xe9, 0xc6, 0x4c, 0x48, 0x3e, 0x0f, 0xcb, 0xd9, 0x62, 0xcf, 0xa2, 0xc9, 0x9e, 0x97, 0x5e, 0x7e, 0x59, 0x42, 0xfa, 0xe1, 0x47, 0xbe, 0x2d, 0x20, 0x32, 0x94, 0x83, 0x92, 0x84, 0x59, 0x96, 0xe5, 0xd5, 0x6a, 0x08, 0x33, 0x46, 0xd8, 0x1f, 0x8e, 0xf0, 0x95, 0xef, 0x3c, 0x86, 0x83, 0xce, 0xc0, 0x38, 0x30, 0x1b, 0x90, 0xdc, 0xf7, 0x71, 0xe5, 0x55, 0xc7, 0x70, 0xfd, 0xb5, 0xc7, 0x71, 0xd3, 0x8d, 0xd7, 0x82, 0x31, 0x82, 0x34, 0x09, 0x95, 0x13, 0x9d, 0xca, 0x10, 0xdb, 0x73, 0x14, 0x80, 0x2d, 0x9d, 0x48, 0x28, 0x42, 0xc1, 0xd2, 0x71, 0x99, 0x02, 0xde, 0x38, 0x07, 0x6a, 0x1c, 0x82, 0xa9, 0xf3, 0x1a, 0xae, 0x10, 0x19, 0x5a, 0xcd, 0x1e, 0x9e, 0x7b, 0xa9, 0x8f, 0xa7, 0x9e, 0x6e, 0xa1, 0x51, 0xef, 0xe7, 0x21, 0x76, 0x1c, 0x81, 0x39, 0x52, 0x67, 0x93, 0x04, 0x1f, 0xbd, 0xe3, 0x7a, 0xdc, 0x73, 0xfd, 0x31, 0x4c, 0x27, 0x29, 0x1c, 0xc7, 0xcd, 0xc7, 0x11, 0x8d, 0xcb, 0xd4, 0xd5, 0x6d, 0x2b, 0x97, 0xa9, 0x1c, 0xa4, 0xe3, 0xa9, 0x02, 0x4f, 0x92, 0xe0, 0x91, 0x97, 0xf6, 0xf1, 0xd7, 0x4f, 0xbe, 0x84, 0x24, 0x89, 0x71, 0xcb, 0x07, 0xef, 0x47, 0x79, 0x75, 0x4d, 0x86, 0xd5, 0x2b, 0xaa, 0x90, 0xd3, 0xeb, 0x1a, 0x6d, 0x46, 0x28, 0x4d, 0xe8, 0xbd, 0x06, 0x40, 0xa8, 0x33, 0x2a, 0x67, 0xd9, 0xcd, 0xab, 0xe1, 0xa3, 0x82, 0xee, 0xa2, 0x64, 0x8d, 0x65, 0x96, 0xf5, 0x98, 0x68, 0xb7, 0x23, 0xc7, 0x35, 0x0b, 0x05, 0x1e, 0x51, 0x18, 0x2b, 0x1d, 0x74, 0x74, 0x8e, 0xb3, 0x18, 0x92, 0x8f, 0xd4, 0xf9, 0x4c, 0x55, 0xc3, 0x4b, 0x6a, 0xbc, 0x73, 0xd0, 0x59, 0x5c, 0xd4, 0x59, 0xea, 0xbf, 0x65, 0x7a, 0x01, 0x38, 0x0b, 0x45, 0x9d, 0xb5, 0xcd, 0xf3, 0x83, 0x73, 0x06, 0x96, 0x26, 0xf7, 0x69, 0xc3, 0xf2, 0x28, 0x97, 0xd9, 0x6e, 0xcd, 0x87, 0xe4, 0x74, 0x36, 0xf4, 0x6e, 0x59, 0x8e, 0xb3, 0x6e, 0xe5, 0x2f, 0x9b, 0x58, 0xdd, 0xd9, 0x39, 0x1a, 0x96, 0x84, 0xa0, 0xd7, 0x6a, 0x60, 0x6d, 0xe7, 0x98, 0x59, 0x62, 0xb1, 0xbe, 0xb3, 0x07, 0x4a, 0x09, 0x86, 0xcd, 0x86, 0x0c, 0xd5, 0x6d, 0x70, 0x2e, 0x28, 0xf6, 0x2c, 0xaa, 0x8c, 0xeb, 0x9f, 0xa5, 0x35, 0x1c, 0xcb, 0xd0, 0xfb, 0xeb, 0x5f, 0xfd, 0x4b, 0xc1, 0x7d, 0x8e, 0x5a, 0x6d, 0x5d, 0xba, 0x3a, 0x1d, 0x6e, 0x2b, 0x40, 0x4e, 0xa7, 0x53, 0x3c, 0xfa, 0xe4, 0x33, 0x78, 0xf2, 0xa5, 0x57, 0x91, 0x65, 0x79, 0x6e, 0x52, 0xbb, 0xc9, 0xda, 0x5a, 0x0d, 0x77, 0xdf, 0x7d, 0x3b, 0xae, 0xbb, 0xfa, 0x18, 0x56, 0x56, 0xab, 0x2a, 0xd4, 0x95, 0xee, 0x50, 0x88, 0x0c, 0x69, 0x3c, 0x86, 0xab, 0x80, 0x27, 0x41, 0x68, 0xb9, 0x46, 0xcf, 0x91, 0x10, 0xb5, 0xe0, 0xa7, 0xb5, 0x10, 0x19, 0xa6, 0x49, 0x08, 0xa6, 0x1c, 0xe7, 0x24, 0xd6, 0x67, 0xa6, 0x48, 0xd3, 0x08, 0x8e, 0xe3, 0x40, 0x60, 0x6a, 0xc0, 0xf9, 0xfa, 0xfe, 0x00, 0xdf, 0x7d, 0xec, 0x00, 0xcf, 0x9c, 0x1a, 0x43, 0x64, 0xb2, 0x68, 0xe4, 0xa8, 0x59, 0xf2, 0x34, 0x8e, 0xb1, 0xb9, 0xb6, 0x82, 0x4f, 0xdd, 0x7d, 0x23, 0xf6, 0x56, 0xfc, 0x7c, 0xae, 0x3c, 0x8e, 0x4d, 0x7e, 0x34, 0x2f, 0xf6, 0x08, 0xa4, 0x49, 0x92, 0x87, 0xe1, 0x69, 0x0c, 0xc7, 0x91, 0x40, 0xfd, 0xbd, 0x2f, 0x9f, 0xc4, 0x7e, 0x6f, 0x0c, 0xe6, 0x7a, 0xb8, 0xf6, 0xae, 0xf7, 0x21, 0x58, 0xc9, 0xab, 0xdb, 0xe5, 0xd5, 0x55, 0xe9, 0x20, 0x55, 0x0e, 0xd2, 0x0e, 0x8d, 0x85, 0x55, 0xb0, 0x99, 0x2d, 0xde, 0x2c, 0x3e, 0xa3, 0xc0, 0x69, 0x60, 0x79, 0x7e, 0x40, 0xe6, 0x10, 0x55, 0x80, 0xb4, 0x42, 0xf2, 0x41, 0xbb, 0x6d, 0x5e, 0xbf, 0xdf, 0x6e, 0x15, 0x9c, 0xe8, 0x12, 0x24, 0x7f, 0x8b, 0x75, 0x77, 0xf1, 0xf3, 0x51, 0xb7, 0x53, 0x7c, 0xbe, 0xbe, 0xd8, 0x89, 0x2e, 0x04, 0x67, 0x21, 0x0c, 0xcf, 0x61, 0x69, 0x3f, 0x2f, 0xb8, 0x4c, 0x0b, 0x90, 0xc3, 0x56, 0x6b, 0x71, 0x48, 0xae, 0xf2, 0x97, 0x79, 0x48, 0xbe, 0xa3, 0x9c, 0x68, 0xe3, 0xc2, 0x61, 0xa9, 0x9c, 0xa5, 0x0d, 0x4b, 0x7b, 0xfb, 0xcf, 0xc6, 0xee, 0x1e, 0x28, 0xa1, 0x18, 0xb6, 0xea, 0x12, 0xa2, 0x24, 0x2f, 0xf6, 0xbc, 0x11, 0x2c, 0x53, 0x5e, 0x56, 0xa1, 0xf7, 0x43, 0x5f, 0x13, 0xf1, 0x78, 0x88, 0x9d, 0xbd, 0x2b, 0x14, 0xa8, 0x54, 0xae, 0x4e, 0x64, 0x38, 0x3c, 0x6c, 0xe2, 0xc1, 0xc7, 0x7e, 0x80, 0xfe, 0x70, 0x5c, 0x28, 0xde, 0x24, 0x71, 0x8c, 0x8d, 0xcd, 0x0d, 0xdc, 0x7b, 0xef, 0x5d, 0xb8, 0xee, 0xea, 0xe3, 0xe0, 0x01, 0x37, 0xee, 0x50, 0x86, 0xcf, 0x19, 0x92, 0x78, 0xac, 0xf2, 0x7f, 0xc5, 0x70, 0x5b, 0x82, 0xd3, 0x85, 0x50, 0x80, 0x74, 0x4d, 0xe8, 0x9d, 0x83, 0x73, 0x12, 0x87, 0x60, 0xae, 0x5b, 0x00, 0x61, 0x0e, 0x51, 0x66, 0xe5, 0x4d, 0x99, 0x05, 0x51, 0x19, 0x9e, 0x37, 0x1b, 0x7d, 0x3c, 0xf6, 0xe4, 0x10, 0x8f, 0xff, 0xa0, 0x8b, 0x68, 0x2c, 0xdb, 0x8b, 0xb2, 0x6c, 0x2a, 0x8b, 0x40, 0xae, 0x87, 0xbb, 0xae, 0xd9, 0xc5, 0x8f, 0xdd, 0x72, 0x02, 0xdc, 0xe7, 0x56, 0x91, 0xc6, 0xcd, 0x2b, 0xdd, 0xda, 0x65, 0x2a, 0x58, 0x0a, 0x75, 0x26, 0x11, 0xc0, 0x6f, 0xfd, 0xe9, 0x43, 0x48, 0x93, 0x18, 0xdb, 0x57, 0x5d, 0x83, 0x2b, 0x6f, 0xbd, 0x13, 0xc3, 0x9e, 0x02, 0xa4, 0x10, 0x12, 0x96, 0x35, 0x0d, 0xc8, 0x5c, 0xeb, 0xe7, 0x1a, 0x90, 0xc6, 0x35, 0x1a, 0x67, 0xa9, 0x7b, 0x52, 0x6b, 0x06, 0x78, 0xa5, 0x02, 0x14, 0x6d, 0xc7, 0x79, 0x3e, 0x40, 0xea, 0xb0, 0x7d, 0xe9, 0x1a, 0x97, 0xba, 0xa8, 0xe5, 0xb2, 0x87, 0x99, 0xe7, 0xeb, 0x33, 0x67, 0x08, 0x99, 0x73, 0x9f, 0x8b, 0x1d, 0x67, 0xbb, 0x58, 0x34, 0xda, 0xd8, 0x5c, 0xe8, 0x32, 0x57, 0x36, 0xac, 0x36, 0x22, 0x05, 0x45, 0xbb, 0xf0, 0x33, 0x54, 0x10, 0xd5, 0xb0, 0x5c, 0xb1, 0x20, 0xfa, 0x56, 0xc0, 0x52, 0xeb, 0x5e, 0xfd, 0x00, 0x1b, 0x7b, 0xc7, 0xc0, 0x28, 0xc5, 0xb0, 0xd5, 0xc0, 0xba, 0x0a, 0xd5, 0x8f, 0x82, 0xe5, 0xcb, 0xa7, 0x4f, 0xcb, 0x35, 0x6b, 0xbf, 0xfe, 0x6b, 0xbf, 0xf4, 0x00, 0x63, 0x14, 0x8e, 0x9a, 0xc3, 0xd6, 0x73, 0xd9, 0x2f, 0x9e, 0x39, 0x87, 0xbf, 0x3c, 0xf9, 0x7d, 0x0c, 0x06, 0x43, 0x30, 0xe6, 0x80, 0x31, 0x07, 0x49, 0x1c, 0xa3, 0x54, 0x29, 0xe3, 0xe3, 0x1f, 0xff, 0x28, 0x3e, 0xf2, 0xa1, 0x7b, 0xb0, 0xbb, 0xbb, 0x05, 0xc7, 0x65, 0x6a, 0x92, 0x86, 0x82, 0x31, 0x8a, 0x34, 0x91, 0x13, 0x36, 0x8c, 0x4a, 0xcd, 0x28, 0x01, 0x65, 0x6a, 0x7c, 0x91, 0x02, 0x8c, 0x09, 0x24, 0xf1, 0x10, 0x8c, 0x66, 0x60, 0x2c, 0x43, 0x1a, 0x0f, 0x40, 0xe9, 0x14, 0x94, 0x4d, 0x31, 0x89, 0x87, 0x20, 0x4c, 0x80, 0x52, 0x81, 0x49, 0x3c, 0x96, 0x53, 0x3b, 0x94, 0x20, 0x4d, 0x22, 0xf5, 0x3a, 0x50, 0x53, 0x3e, 0x00, 0xa5, 0x50, 0x23, 0x91, 0x44, 0xea, 0x24, 0x04, 0x25, 0x40, 0xa9, 0xc4, 0x70, 0xd5, 0x31, 0xe0, 0xee, 0xbb, 0x56, 0x10, 0xa7, 0xc0, 0xd9, 0x57, 0xfb, 0x20, 0x94, 0x01, 0x94, 0x20, 0x8d, 0x23, 0x1c, 0xf6, 0xc7, 0x78, 0xe1, 0x5c, 0x0b, 0x57, 0xae, 0xa9, 0xa5, 0x17, 0x84, 0x22, 0x4d, 0x22, 0x33, 0x79, 0x93, 0x26, 0xf9, 0x14, 0x8e, 0x19, 0x5f, 0xa4, 0x0c, 0xdf, 0x7f, 0xf1, 0x2c, 0x5e, 0xd8, 0x97, 0x0b, 0x34, 0x56, 0xb6, 0x77, 0x51, 0xae, 0xad, 0xc1, 0xf5, 0x3c, 0x0c, 0xbb, 0x1d, 0x35, 0x6a, 0xc8, 0x31, 0xea, 0x74, 0xd4, 0x24, 0x8a, 0x5a, 0xc8, 0xc1, 0xe5, 0xec, 0xf9, 0xb0, 0x23, 0x47, 0x2b, 0xe5, 0x28, 0x63, 0x47, 0x8d, 0x59, 0xca, 0xe7, 0x9e, 0xd6, 0x5d, 0x3d, 0xbe, 0x28, 0x47, 0x19, 0x3d, 0xf3, 0x9a, 0x6d, 0x38, 0xd6, 0xb2, 0x0d, 0x8f, 0x07, 0xd6, 0x6b, 0xea, 0x89, 0x9c, 0x16, 0x5c, 0xcf, 0x03, 0x73, 0x3d, 0x74, 0x9b, 0x0d, 0x30, 0x4f, 0x4e, 0x02, 0xd9, 0xa3, 0x8c, 0xc3, 0x76, 0xcb, 0x8c, 0x11, 0x2e, 0xf5, 0xdf, 0x4e, 0xcd, 0xd5, 0xbc, 0xfc, 0xb0, 0xd3, 0xce, 0x47, 0x8e, 0x3b, 0xed, 0xfc, 0x4c, 0xb7, 0x6d, 0xa6, 0x73, 0x86, 0x9d, 0xb6, 0x5a, 0x52, 0x62, 0x9d, 0x0f, 0xf2, 0xf3, 0x3c, 0x28, 0xc9, 0xd7, 0xd7, 0xaf, 0xd9, 0x6d, 0x99, 0x79, 0xed, 0x61, 0xa7, 0xa5, 0xe6, 0xb5, 0x03, 0xf5, 0x1e, 0xd4, 0x38, 0x62, 0xcb, 0x9a, 0xa7, 0x6e, 0xe5, 0xd3, 0x2d, 0x43, 0x35, 0x9d, 0xc3, 0xcb, 0x65, 0x33, 0x0d, 0xe3, 0xe9, 0xc9, 0x18, 0xbd, 0x88, 0xa2, 0x65, 0x8d, 0x29, 0xda, 0xa3, 0x89, 0x6a, 0xa6, 0xdb, 0x2f, 0x97, 0xd1, 0x57, 0xb3, 0xe1, 0x7e, 0xb9, 0x62, 0xad, 0x68, 0x53, 0xe7, 0xcb, 0x65, 0xf8, 0x95, 0x2a, 0xba, 0xf5, 0x03, 0x04, 0x95, 0xea, 0x79, 0xd7, 0xa6, 0xb5, 0x0f, 0xf7, 0xe1, 0x06, 0x25, 0x30, 0x1e, 0xa0, 0x75, 0xb0, 0x0f, 0x57, 0xbd, 0x87, 0x7e, 0xab, 0x81, 0xa0, 0x5c, 0xc9, 0xa7, 0x76, 0x4a, 0x65, 0xc0, 0xf3, 0xe5, 0xac, 0xf7, 0x2f, 0xff, 0xfd, 0xcf, 0x3c, 0xc0, 0x18, 0x43, 0xb9, 0x52, 0x41, 0x1a, 0xc5, 0x98, 0x8a, 0x0c, 0x7f, 0xfd, 0xd8, 0x53, 0x78, 0xe4, 0xa9, 0x67, 0x41, 0x29, 0x93, 0xe3, 0x8c, 0x49, 0x0c, 0xc7, 0x71, 0x71, 0xf7, 0xdd, 0x77, 0xe2, 0x93, 0x1f, 0xff, 0x08, 0xf6, 0x8e, 0x6d, 0x83, 0x39, 0x72, 0x34, 0x91, 0x31, 0x62, 0x00, 0xc9, 0x34, 0xd8, 0xcc, 0x08, 0xa2, 0x40, 0x1a, 0xf7, 0x41, 0x49, 0x0a, 0xca, 0x62, 0xa4, 0x71, 0x17, 0x94, 0xa5, 0x60, 0x24, 0x43, 0x9a, 0x0c, 0x41, 0x69, 0xa6, 0x20, 0x37, 0x02, 0xa5, 0x02, 0x84, 0x09, 0x0b, 0x96, 0x53, 0xa4, 0x71, 0x1f, 0x8c, 0x4d, 0xa5, 0x4e, 0x2c, 0x70, 0x1a, 0x58, 0x12, 0xf9, 0x9c, 0xce, 0x80, 0x93, 0x11, 0x90, 0x69, 0x84, 0x9b, 0x6f, 0x2c, 0xe1, 0xa6, 0xeb, 0x03, 0x9c, 0x7e, 0xa5, 0x8f, 0x71, 0x28, 0xcc, 0xbc, 0x76, 0x34, 0xc9, 0xf0, 0xfd, 0x57, 0x0e, 0xb1, 0xea, 0x31, 0x6c, 0xaf, 0x55, 0x40, 0xd4, 0x68, 0xa2, 0xdc, 0x52, 0x24, 0x47, 0x19, 0xe5, 0xc8, 0x65, 0xbe, 0x18, 0xe3, 0xeb, 0xcf, 0x9c, 0xc1, 0x7e, 0xb3, 0x0d, 0xe6, 0xb9, 0xb8, 0xe6, 0xce, 0xbb, 0x31, 0xea, 0x75, 0xd5, 0x02, 0x0c, 0xb5, 0x78, 0x43, 0xeb, 0x4e, 0xdb, 0x02, 0x64, 0x07, 0xae, 0x2f, 0x37, 0x07, 0x49, 0xa0, 0xe6, 0x1b, 0x8e, 0x3c, 0x9f, 0xab, 0x0f, 0x6f, 0xc7, 0x40, 0x71, 0xd8, 0x51, 0xda, 0xd7, 0x73, 0xeb, 0x0a, 0x90, 0xdd, 0xf9, 0x0f, 0xbe, 0x1e, 0x7d, 0x74, 0x3c, 0x0f, 0xcc, 0x75, 0xd1, 0x53, 0x23, 0x8b, 0x9e, 0xef, 0x2f, 0xf8, 0x45, 0x59, 0xea, 0xff, 0x2a, 0xb4, 0x0d, 0xce, 0x85, 0x67, 0x7c, 0x8c, 0x0a, 0xcf, 0x5b, 0x05, 0x70, 0xca, 0xad, 0x4c, 0x25, 0xa9, 0x83, 0xfc, 0x35, 0x73, 0x00, 0xb7, 0xe4, 0x2c, 0x7f, 0x50, 0xc2, 0xb0, 0xd3, 0xcc, 0x41, 0xdb, 0x6e, 0x29, 0x40, 0x06, 0x18, 0x28, 0x6d, 0x20, 0xaa, 0x47, 0x25, 0xdb, 0x16, 0x20, 0x2d, 0x2d, 0xc7, 0x0e, 0xad, 0x2d, 0x3f, 0x17, 0x03, 0xcb, 0x4a, 0x15, 0xbd, 0xfa, 0xe1, 0x9b, 0x82, 0xa5, 0xd6, 0xbc, 0x54, 0x46, 0xeb, 0x60, 0x1f, 0xcc, 0x97, 0xe0, 0x6c, 0xab, 0x9d, 0x9a, 0x7e, 0xb9, 0x8c, 0x61, 0xab, 0x09, 0xe1, 0x7a, 0x72, 0xd6, 0xfb, 0x1f, 0xfd, 0xc6, 0xaf, 0x3c, 0x10, 0x8f, 0x87, 0xa8, 0x54, 0x56, 0x30, 0x0a, 0x63, 0xfc, 0x87, 0x2f, 0x7f, 0x0d, 0x8d, 0xee, 0xd0, 0x00, 0x92, 0x31, 0x07, 0x1b, 0x9b, 0x9b, 0xf8, 0xe9, 0x9f, 0xfc, 0x09, 0xdc, 0x76, 0xdb, 0xcd, 0x70, 0x3d, 0x47, 0x15, 0x4b, 0xa8, 0x2a, 0xd8, 0x44, 0x6a, 0xc1, 0x2e, 0x41, 0x12, 0x85, 0x60, 0x4c, 0x80, 0xd1, 0x04, 0x69, 0xd4, 0x06, 0xa5, 0x09, 0x18, 0x9d, 0x22, 0x4d, 0x46, 0xb9, 0xb3, 0x8c, 0x22, 0xb9, 0x70, 0xc2, 0x00, 0x4f, 0xc2, 0x4f, 0x02, 0x89, 0x80, 0x30, 0x6a, 0x36, 0x07, 0x31, 0x46, 0x90, 0xe8, 0x85, 0x19, 0x2c, 0x93, 0x10, 0xa5, 0x13, 0x50, 0x26, 0x14, 0x20, 0xa9, 0x72, 0xab, 0x0a, 0xa2, 0x4c, 0xc3, 0x12, 0x20, 0x8c, 0x60, 0x9a, 0x84, 0x58, 0xa9, 0x32, 0xbc, 0xff, 0xbd, 0x25, 0x78, 0x4e, 0x8a, 0xd3, 0x67, 0x27, 0x10, 0x84, 0x20, 0x8d, 0x63, 0x08, 0x42, 0xf1, 0xec, 0xeb, 0x4d, 0x0c, 0x46, 0x63, 0xdc, 0x78, 0x6c, 0x4b, 0x01, 0x32, 0x32, 0x73, 0xdf, 0x13, 0x33, 0x9f, 0xce, 0x30, 0x1e, 0x87, 0xf8, 0xe2, 0xe3, 0x2f, 0x42, 0x10, 0x0a, 0x1e, 0x94, 0xb1, 0x75, 0xe2, 0x2a, 0xb9, 0xa5, 0xa8, 0xd7, 0xcd, 0x57, 0xab, 0xf5, 0x3a, 0xc6, 0xe1, 0x0d, 0xbb, 0x1d, 0x35, 0x8b, 0x9d, 0x6b, 0x47, 0x9f, 0x31, 0x7f, 0xdd, 0xe5, 0xf6, 0x25, 0xc7, 0xf7, 0xe5, 0xe6, 0x23, 0xb5, 0xf1, 0x67, 0xd8, 0x6d, 0xc3, 0xf5, 0x03, 0x38, 0x3c, 0x98, 0x03, 0xa4, 0xe3, 0xcb, 0x6d, 0x44, 0xbd, 0x56, 0x13, 0xd4, 0xf3, 0xc0, 0x38, 0x97, 0xab, 0xd8, 0xec, 0x0f, 0xfb, 0x52, 0x2f, 0xb5, 0xe5, 0x2c, 0xf9, 0x02, 0x58, 0xce, 0xc2, 0xb5, 0xe0, 0x44, 0xcf, 0xe3, 0x38, 0xa5, 0x9b, 0x6c, 0x2f, 0x76, 0x99, 0xed, 0x5c, 0x1b, 0x37, 0xa9, 0x9e, 0x73, 0xbd, 0x84, 0x43, 0x03, 0xd2, 0x02, 0x2a, 0x0f, 0x2c, 0x67, 0x79, 0x49, 0xb0, 0xac, 0x14, 0x60, 0xd9, 0x6b, 0xd4, 0xdf, 0xf4, 0x72, 0x5e, 0x5e, 0xae, 0xc0, 0x0d, 0x4a, 0x68, 0xec, 0x9f, 0x03, 0xf3, 0x4b, 0x70, 0x7c, 0xe9, 0x38, 0xfd, 0x72, 0x05, 0xec, 0xd7, 0x7f, 0xf9, 0xef, 0x3f, 0xe0, 0x30, 0x86, 0xde, 0x30, 0xc4, 0x9f, 0x7d, 0xf3, 0x31, 0x44, 0xc9, 0xc4, 0x00, 0x92, 0x31, 0x07, 0x37, 0xdd, 0x70, 0x2d, 0x7e, 0xe6, 0xd3, 0x9f, 0xc2, 0xca, 0x4a, 0x45, 0x3a, 0x45, 0x87, 0x2a, 0x37, 0x99, 0x87, 0xdb, 0x12, 0x66, 0x13, 0x30, 0x16, 0x21, 0x8d, 0xba, 0xd2, 0x29, 0x32, 0x7b, 0x5b, 0x90, 0x84, 0x22, 0xa3, 0x2a, 0x3c, 0x8f, 0xc7, 0x6a, 0xe1, 0x84, 0xac, 0x2c, 0x13, 0x13, 0x3e, 0x47, 0xa0, 0x44, 0x01, 0x35, 0x09, 0xd5, 0x7e, 0x4a, 0x39, 0xdf, 0x4d, 0x19, 0x01, 0x51, 0x9a, 0x50, 0x80, 0x52, 0xed, 0x4a, 0x85, 0xfa, 0x5e, 0xd2, 0x65, 0x12, 0x2a, 0x01, 0x29, 0x5d, 0xa6, 0x72, 0x9c, 0x0c, 0x38, 0x71, 0xdc, 0xc5, 0xf5, 0x57, 0x4e, 0x71, 0xea, 0xf4, 0x14, 0x71, 0x4a, 0xd4, 0xb2, 0x0d, 0x8a, 0x73, 0x9d, 0x21, 0x5e, 0x6f, 0xb4, 0x70, 0xeb, 0x95, 0x3b, 0x70, 0x1c, 0xc7, 0x38, 0x4b, 0xa2, 0x96, 0x70, 0x10, 0x4a, 0xf1, 0xe2, 0x41, 0x1b, 0x8f, 0x3d, 0xf7, 0x2a, 0x08, 0xa5, 0xd8, 0xbb, 0xfe, 0x46, 0x4c, 0xb3, 0xcc, 0x6c, 0xff, 0x19, 0xf5, 0x3a, 0x6a, 0x91, 0x83, 0x04, 0xa1, 0xd9, 0xf2, 0xa3, 0x1c, 0xa4, 0xe3, 0xe7, 0x80, 0x74, 0x38, 0xb7, 0x80, 0xca, 0x31, 0xe8, 0xb6, 0xcd, 0x02, 0x09, 0x1d, 0xc2, 0x3b, 0x96, 0xf6, 0xfc, 0x00, 0x83, 0x6e, 0xcb, 0xec, 0x20, 0xec, 0xb6, 0x1a, 0x60, 0x7a, 0x6f, 0xa5, 0x0d, 0xd1, 0xa5, 0x5e, 0xea, 0x23, 0xf4, 0xa0, 0xdb, 0xce, 0xc3, 0x64, 0x0b, 0x72, 0xa3, 0x59, 0x27, 0xba, 0xe8, 0xb9, 0x0a, 0xd5, 0x67, 0x5d, 0xa6, 0x39, 0x33, 0x13, 0x86, 0x8f, 0x66, 0x43, 0xf2, 0x40, 0x82, 0x36, 0x77, 0x99, 0x25, 0x6b, 0x3b, 0x4f, 0x09, 0x83, 0x76, 0x0b, 0x5e, 0xe9, 0xd2, 0x60, 0x19, 0x68, 0x28, 0x96, 0xca, 0x39, 0x2c, 0xab, 0xd5, 0x99, 0xf0, 0xfc, 0xcd, 0x6f, 0x35, 0xef, 0xd4, 0x0f, 0xe0, 0x06, 0x65, 0xf3, 0x9c, 0xfd, 0xd2, 0x67, 0x3f, 0xfd, 0xc0, 0x99, 0x83, 0x06, 0xbe, 0xf6, 0xd4, 0x29, 0x8c, 0x46, 0x23, 0x03, 0xc8, 0xe9, 0x64, 0x82, 0x9f, 0xfa, 0xa9, 0x4f, 0xe0, 0xfd, 0xef, 0x7f, 0x2f, 0xa6, 0x13, 0xb9, 0x76, 0x2c, 0x07, 0xa4, 0x15, 0x6e, 0x93, 0x09, 0x18, 0x0b, 0x91, 0x46, 0x5d, 0x13, 0x7a, 0x4f, 0x92, 0x50, 0xb9, 0x3d, 0x6a, 0x60, 0xa9, 0xdb, 0x85, 0x28, 0x25, 0x72, 0x21, 0xaf, 0xca, 0x0b, 0x12, 0xdb, 0x11, 0x12, 0x95, 0xe3, 0x64, 0xea, 0x8c, 0xde, 0x4f, 0x49, 0x61, 0x36, 0x0d, 0x11, 0x02, 0x2b, 0xcc, 0xa7, 0x48, 0xe3, 0x11, 0x28, 0xcb, 0x14, 0x74, 0xd5, 0x06, 0x22, 0xcb, 0x59, 0x4a, 0xd0, 0xca, 0xe7, 0x95, 0x0a, 0xc1, 0x5d, 0x37, 0x4f, 0xd1, 0xea, 0x00, 0xcd, 0x8e, 0x2c, 0xde, 0x10, 0xc2, 0xd0, 0x1a, 0xc6, 0x38, 0xf5, 0xda, 0x21, 0xee, 0xb8, 0x7a, 0x0f, 0x8e, 0xeb, 0x28, 0x78, 0x33, 0xb3, 0xbd, 0xe8, 0xa1, 0xe7, 0x5f, 0xc7, 0x41, 0x6f, 0x84, 0x69, 0x92, 0xe0, 0xc4, 0x1d, 0xef, 0x01, 0x2f, 0x95, 0x0d, 0x20, 0x5d, 0x8f, 0x63, 0xd8, 0xeb, 0x9a, 0x45, 0xbd, 0xa3, 0x19, 0xed, 0x79, 0x79, 0xe8, 0xed, 0xa9, 0x25, 0xbc, 0xc3, 0x6e, 0x17, 0x1e, 0x57, 0xa1, 0x77, 0xaf, 0x0b, 0x4f, 0x81, 0x73, 0x64, 0x85, 0xe1, 0x83, 0x4e, 0x1b, 0xd4, 0x75, 0x41, 0x1d, 0x17, 0xbd, 0x56, 0x0b, 0x2e, 0xb7, 0x5e, 0xc7, 0xf7, 0xad, 0x95, 0x77, 0x4b, 0xbd, 0xd4, 0x6f, 0xa0, 0x3b, 0x0b, 0x20, 0x6a, 0xbb, 0xc3, 0xc0, 0x06, 0xa4, 0x6f, 0x39, 0x48, 0x2b, 0xc7, 0xb9, 0xc0, 0x65, 0xda, 0x21, 0xb9, 0x7e, 0xcd, 0x91, 0xa5, 0x8b, 0x6e, 0xb2, 0x08, 0xcb, 0x39, 0x37, 0x79, 0x31, 0xb0, 0x6c, 0x35, 0xa5, 0x83, 0x2c, 0x97, 0x0d, 0x2c, 0x83, 0xaa, 0x0a, 0xc3, 0x2b, 0x95, 0x4b, 0x86, 0xa5, 0xad, 0xd9, 0x8f, 0x7d, 0xec, 0xc7, 0x1f, 0xf8, 0xed, 0x3f, 0xf8, 0x3c, 0x4e, 0x5c, 0x71, 0x85, 0x09, 0xb7, 0xb9, 0xef, 0xe3, 0xe7, 0x7e, 0xee, 0xd3, 0x38, 0xb6, 0xbb, 0x95, 0x17, 0x69, 0x66, 0xc3, 0x6d, 0x9a, 0x81, 0xd1, 0x10, 0x49, 0xdc, 0x03, 0x75, 0x14, 0x38, 0xa3, 0xb1, 0x5c, 0xa1, 0xc6, 0x28, 0x26, 0xda, 0x11, 0x6a, 0xb7, 0xa7, 0xb7, 0x97, 0x27, 0xba, 0x00, 0x43, 0x15, 0x2c, 0x85, 0xda, 0x76, 0x1e, 0x4a, 0x67, 0x69, 0xce, 0xc3, 0x2a, 0x02, 0x49, 0x70, 0xa6, 0xc9, 0x58, 0x41, 0x5a, 0x3e, 0x27, 0x0c, 0xea, 0x6b, 0x23, 0xa9, 0x49, 0x86, 0x34, 0x1d, 0xa9, 0xb5, 0x6c, 0x44, 0x16, 0x84, 0x28, 0x00, 0x5d, 0xec, 0xa1, 0x80, 0xeb, 0x12, 0xdc, 0x74, 0x6d, 0x82, 0x28, 0x06, 0x5e, 0x3f, 0x94, 0x3f, 0x17, 0x61, 0x04, 0xbd, 0x30, 0xc1, 0x73, 0x67, 0xf6, 0x71, 0xd7, 0xb5, 0xc7, 0xe0, 0xb8, 0x8e, 0xda, 0x49, 0xc9, 0x40, 0x28, 0xc5, 0x1f, 0x7f, 0xfb, 0x09, 0x4c, 0x32, 0xa0, 0xb2, 0xbe, 0x89, 0xd2, 0xca, 0x2a, 0x3c, 0x05, 0xc2, 0x61, 0xaf, 0x6b, 0x56, 0xa5, 0x8d, 0xba, 0x5d, 0xb3, 0x22, 0x6c, 0xd4, 0x93, 0xa1, 0xb4, 0xeb, 0xf9, 0x18, 0xf7, 0xba, 0x66, 0xc7, 0xa4, 0x3c, 0xa3, 0x8a, 0x34, 0xbd, 0xae, 0x55, 0xa4, 0x51, 0x6e, 0x52, 0x85, 0xd5, 0xc4, 0x71, 0x41, 0x5d, 0xd7, 0x2c, 0xf3, 0xf5, 0x7c, 0x1f, 0xa3, 0x6e, 0x1e, 0xb6, 0x2f, 0xf5, 0x52, 0x5f, 0x8c, 0x2e, 0x40, 0x94, 0x2b, 0xf8, 0x2d, 0x00, 0x27, 0xf7, 0x17, 0x84, 0xf0, 0xc1, 0x11, 0x2e, 0x73, 0x36, 0x24, 0x57, 0x2e, 0x53, 0x6f, 0x71, 0x37, 0x5f, 0x6b, 0xc1, 0x92, 0xdb, 0xb0, 0x2c, 0xbd, 0x79, 0x58, 0x0e, 0x5a, 0x0d, 0x09, 0xb0, 0x52, 0x05, 0xbd, 0x66, 0xdd, 0xc0, 0x52, 0x16, 0x75, 0x14, 0x20, 0xeb, 0x87, 0x08, 0xaa, 0x55, 0x04, 0x2a, 0x67, 0x79, 0xa9, 0xb0, 0x64, 0xe7, 0x52, 0xe7, 0x01, 0x41, 0x28, 0xf6, 0xb6, 0x36, 0xc0, 0x98, 0x83, 0x72, 0xb9, 0x82, 0x9f, 0xfd, 0xf4, 0x27, 0xb1, 0xb7, 0xb7, 0xad, 0x00, 0x39, 0x1b, 0x6e, 0x13, 0x30, 0x1a, 0x21, 0x89, 0xda, 0x60, 0x0e, 0x01, 0x75, 0x64, 0xde, 0x51, 0xe6, 0x08, 0x73, 0x07, 0x49, 0x0c, 0x08, 0x95, 0xcb, 0xd4, 0x20, 0xa4, 0xea, 0x0a, 0x08, 0x46, 0x40, 0xa8, 0x50, 0xe1, 0xb6, 0x76, 0x96, 0x61, 0x9e, 0xb3, 0xd4, 0xf0, 0xa3, 0xb9, 0x13, 0xd5, 0x90, 0x26, 0xaa, 0x78, 0x33, 0xd1, 0xb0, 0xa4, 0xc0, 0x24, 0x1e, 0x99, 0x10, 0x7e, 0xa2, 0x8a, 0x43, 0xa0, 0xd4, 0x00, 0x92, 0x32, 0x05, 0x4b, 0x26, 0xc0, 0x28, 0x70, 0xcd, 0x71, 0xf9, 0x1e, 0x4e, 0xbf, 0x46, 0xcd, 0xf6, 0xf2, 0x61, 0x9c, 0xe2, 0xd5, 0xc3, 0x26, 0xde, 0x73, 0xed, 0x71, 0x38, 0x8e, 0x2c, 0xfc, 0x9c, 0x6d, 0x0d, 0xf0, 0xe8, 0x0b, 0xaf, 0x23, 0x4d, 0x12, 0x6c, 0x5d, 0x75, 0x0d, 0x6a, 0xdb, 0xbb, 0x85, 0x42, 0xce, 0xb8, 0xd7, 0x91, 0xfb, 0x20, 0x7d, 0x8e, 0x71, 0xaf, 0x6b, 0x76, 0x28, 0x8e, 0xbb, 0x5d, 0x38, 0x3e, 0x87, 0xab, 0x9e, 0x3b, 0xba, 0x48, 0xd3, 0xeb, 0x98, 0x1d, 0x8d, 0xe3, 0x5e, 0x17, 0x8c, 0x7b, 0x60, 0x9e, 0x87, 0x7e, 0xab, 0x09, 0xe2, 0xba, 0xca, 0x59, 0xe6, 0x95, 0xca, 0xfc, 0x03, 0xbe, 0xd4, 0x4b, 0x7d, 0x29, 0x3a, 0x58, 0x00, 0xce, 0x45, 0x57, 0xbb, 0xb4, 0xad, 0x50, 0x7a, 0x06, 0xa2, 0xda, 0x65, 0x76, 0x3b, 0x47, 0x87, 0xe4, 0x56, 0xfe, 0xd2, 0xc0, 0xb2, 0xe0, 0x26, 0x5b, 0x39, 0x14, 0xdf, 0x24, 0x2c, 0x07, 0xad, 0x96, 0xd9, 0x82, 0x6e, 0x9c, 0xa5, 0x82, 0x65, 0x30, 0xe3, 0x20, 0x83, 0x4a, 0x15, 0x5d, 0x5b, 0x5f, 0x22, 0x2c, 0xd9, 0xea, 0xee, 0xb1, 0x07, 0x1c, 0xd7, 0xc5, 0xd5, 0x57, 0x5e, 0x09, 0x97, 0x51, 0xfc, 0xe2, 0x2f, 0x7e, 0x16, 0xeb, 0x1b, 0x35, 0x55, 0xa4, 0x99, 0x0d, 0xb7, 0xa7, 0x48, 0xa3, 0x06, 0x18, 0xcb, 0xc0, 0x1c, 0x86, 0x44, 0xe5, 0x29, 0xa9, 0xa3, 0x0a, 0x30, 0x8c, 0x49, 0x70, 0xda, 0xb9, 0xc9, 0x44, 0x2d, 0xea, 0x65, 0x30, 0x77, 0xe1, 0xc8, 0x1c, 0xe4, 0xb8, 0x58, 0xc8, 0x61, 0x00, 0x53, 0xee, 0x90, 0x52, 0x59, 0x8c, 0xc9, 0xb7, 0xa0, 0x13, 0x53, 0xbc, 0x21, 0x26, 0xc4, 0x86, 0x09, 0xcf, 0xb5, 0x13, 0x2d, 0x86, 0xe7, 0x63, 0x50, 0x26, 0x0a, 0xa0, 0xd5, 0xe1, 0xb9, 0xce, 0x7d, 0x5e, 0xb1, 0x13, 0xa2, 0x5a, 0x61, 0x78, 0xe1, 0x15, 0x09, 0x45, 0xc2, 0x08, 0x3a, 0xe3, 0x18, 0x07, 0xcd, 0x0e, 0x6e, 0xbf, 0x6a, 0x0f, 0x8c, 0x31, 0x7c, 0xfb, 0x87, 0xa7, 0x70, 0xb6, 0x2d, 0xaf, 0x8d, 0xd8, 0x38, 0x76, 0x5c, 0x26, 0x7c, 0x79, 0x0e, 0x3f, 0xc7, 0x93, 0x79, 0x4a, 0x4f, 0xe9, 0xb1, 0x2a, 0xcc, 0x38, 0xca, 0x65, 0x6a, 0x3d, 0x56, 0x2e, 0xd3, 0x51, 0x2d, 0x42, 0xcc, 0xe3, 0x20, 0x8e, 0x8b, 0x6e, 0xb3, 0x09, 0xea, 0x7a, 0x70, 0xb8, 0x76, 0x00, 0x72, 0x1b, 0xf9, 0x52, 0x2f, 0xf5, 0xe5, 0xd4, 0x5e, 0x70, 0x21, 0xe0, 0xf4, 0x17, 0x86, 0xe7, 0x7c, 0x06, 0xa8, 0x7c, 0xa6, 0x80, 0x34, 0xea, 0x74, 0x66, 0x60, 0x59, 0x9a, 0x81, 0x65, 0x70, 0x41, 0xb0, 0x1c, 0xb6, 0x5b, 0x06, 0x8a, 0x5a, 0xcb, 0xc5, 0xbb, 0x32, 0xc4, 0xe6, 0xa5, 0x12, 0x06, 0xcd, 0xa6, 0xe5, 0x32, 0xeb, 0xf0, 0xcb, 0x55, 0x99, 0x9b, 0x6c, 0x68, 0x67, 0x59, 0x31, 0xce, 0x32, 0x28, 0x6b, 0x88, 0x56, 0x2f, 0x3d, 0xf4, 0xbe, 0xe2, 0xa6, 0x5b, 0x1f, 0x88, 0xc3, 0x10, 0x37, 0xdd, 0x78, 0x03, 0x7e, 0xfe, 0xe7, 0x3f, 0x83, 0x52, 0xe0, 0x5a, 0xe1, 0xb6, 0xd5, 0x1f, 0x19, 0x77, 0xc0, 0x68, 0x94, 0x17, 0x6f, 0x1c, 0x82, 0xc1, 0x20, 0xc2, 0x17, 0xbf, 0xfc, 0x3d, 0xfc, 0x97, 0xbf, 0x7e, 0x0e, 0xcf, 0xbe, 0x50, 0x47, 0xa7, 0xd5, 0xc3, 0xd5, 0x57, 0xae, 0x1b, 0x70, 0x12, 0x1d, 0x62, 0xc7, 0x63, 0x75, 0x9d, 0x42, 0x9e, 0x83, 0xd4, 0x05, 0x1e, 0xa2, 0x73, 0x8a, 0x51, 0x08, 0xea, 0x50, 0xd3, 0x13, 0x49, 0x48, 0x9e, 0x6b, 0xcc, 0xb7, 0x9d, 0x87, 0x56, 0x2b, 0x90, 0xae, 0x92, 0x13, 0x93, 0x83, 0xd4, 0x2d, 0x42, 0xc6, 0xb9, 0xa6, 0x79, 0x1b, 0xd1, 0x24, 0x8e, 0x40, 0x4c, 0xe1, 0x27, 0x04, 0x63, 0x00, 0xa1, 0x14, 0xbb, 0xeb, 0x09, 0x1c, 0x8f, 0xe0, 0xa5, 0xb3, 0x04, 0x93, 0x24, 0x01, 0x21, 0x0c, 0x8d, 0x41, 0x88, 0x38, 0x0a, 0x71, 0xfd, 0xf1, 0x2d, 0x7c, 0xf1, 0xf1, 0x53, 0xe8, 0xf6, 0xfb, 0x08, 0xaa, 0x55, 0x5c, 0x71, 0xcb, 0x6d, 0x39, 0xfc, 0x34, 0x20, 0x7d, 0x79, 0x41, 0xd8, 0xb8, 0x00, 0xc5, 0x0e, 0x5c, 0x4f, 0xe6, 0x23, 0x47, 0xbd, 0x4e, 0x7e, 0xa5, 0x43, 0xa7, 0x03, 0xea, 0xba, 0x20, 0x8e, 0x83, 0x5e, 0xb3, 0x69, 0xee, 0xd7, 0x59, 0x3a, 0x9e, 0xa5, 0x7e, 0x4b, 0x75, 0xf0, 0x46, 0xe0, 0x0c, 0x72, 0x1d, 0x1c, 0x71, 0x81, 0xe0, 0x82, 0x90, 0xdc, 0x40, 0x51, 0xc3, 0xd2, 0x0f, 0xe6, 0x9d, 0x68, 0xb7, 0xd8, 0x2e, 0x34, 0x07, 0x4b, 0xbd, 0x5d, 0xdc, 0x2a, 0xf0, 0xcc, 0xf6, 0x59, 0x16, 0x2e, 0x0e, 0x53, 0xb0, 0xd4, 0x00, 0xeb, 0x37, 0xeb, 0xf0, 0x4b, 0x15, 0x73, 0x7d, 0x84, 0x5f, 0xae, 0x9a, 0x9c, 0x65, 0x50, 0xa9, 0xbe, 0xe9, 0x76, 0xa1, 0x23, 0x43, 0xef, 0xbd, 0xeb, 0x6e, 0x78, 0x80, 0x07, 0x01, 0xfe, 0xf1, 0x6f, 0xfc, 0x03, 0xec, 0xec, 0x6c, 0xcd, 0xe4, 0x23, 0x75, 0xd3, 0x78, 0x08, 0x46, 0x53, 0x05, 0x48, 0x8a, 0x24, 0x49, 0xf1, 0x57, 0x7f, 0xf5, 0x04, 0xbe, 0xf6, 0xcd, 0x17, 0xd0, 0x1d, 0xc4, 0x48, 0xa3, 0x10, 0xe9, 0x04, 0x38, 0x68, 0x8c, 0x30, 0x1c, 0x8c, 0x70, 0xed, 0x35, 0xeb, 0xea, 0x0a, 0x05, 0xbb, 0xe5, 0x27, 0x32, 0xe1, 0xb3, 0x76, 0x75, 0x84, 0xca, 0x42, 0x8e, 0xbc, 0x9f, 0x26, 0x0f, 0xb7, 0x89, 0x81, 0x9c, 0x6e, 0x11, 0x1a, 0xe7, 0x39, 0xcb, 0xa8, 0xd8, 0xfe, 0x23, 0x9f, 0xe7, 0x57, 0x49, 0x10, 0xa6, 0xab, 0xe4, 0x14, 0x84, 0x0a, 0x09, 0x51, 0x02, 0xd9, 0xa3, 0x99, 0xe6, 0xb9, 0x4f, 0x19, 0x6e, 0xcb, 0x74, 0xc1, 0xf1, 0x9d, 0x18, 0xa3, 0x31, 0xc3, 0xb9, 0x3a, 0x33, 0x57, 0x4f, 0xbc, 0xda, 0xea, 0xa1, 0xec, 0x50, 0x3c, 0x7e, 0x7a, 0x1f, 0x84, 0x32, 0x94, 0x6b, 0xeb, 0x58, 0xdd, 0xde, 0x53, 0x60, 0x93, 0x8d, 0xe2, 0x9e, 0xc9, 0x3b, 0xea, 0xdc, 0x64, 0xc7, 0xb4, 0x0b, 0xc9, 0x62, 0x4f, 0xde, 0xf8, 0x0d, 0xc7, 0x01, 0x1c, 0xa6, 0xae, 0x6e, 0x90, 0x95, 0xf1, 0x51, 0xb7, 0x6d, 0x42, 0xf5, 0xa5, 0x5e, 0xea, 0xcb, 0xa3, 0x73, 0xa7, 0xe8, 0x2e, 0x02, 0xe1, 0x02, 0x70, 0x8e, 0x7b, 0x45, 0xb8, 0xba, 0xbe, 0x9f, 0x87, 0xd8, 0xbe, 0x95, 0xcb, 0xb4, 0x43, 0x72, 0xe5, 0x1a, 0x47, 0x56, 0xb3, 0x7a, 0x01, 0x96, 0xfa, 0xfb, 0xda, 0xb0, 0x2c, 0x2d, 0x08, 0xc3, 0xd5, 0x55, 0x0c, 0xc3, 0x8e, 0x74, 0x90, 0xb3, 0x7d, 0x96, 0xb3, 0xb0, 0xcc, 0x01, 0xd9, 0x28, 0x3a, 0xcb, 0x4a, 0xb1, 0xd2, 0x6d, 0x8a, 0x3a, 0xe5, 0x32, 0x82, 0xea, 0xca, 0x25, 0x17, 0x75, 0xd8, 0xe6, 0x15, 0x57, 0x3c, 0xf0, 0x4f, 0xff, 0xe9, 0x3f, 0xc6, 0x6d, 0xb7, 0xdc, 0x38, 0x13, 0x6e, 0x47, 0x60, 0x0c, 0x60, 0x74, 0x84, 0x34, 0x1a, 0xaa, 0x3c, 0x25, 0xc3, 0x99, 0xd3, 0xfb, 0xf8, 0xd3, 0xbf, 0x78, 0x12, 0x07, 0x8d, 0x01, 0xd2, 0x38, 0x31, 0xf7, 0xca, 0xc8, 0x29, 0x16, 0x86, 0xc1, 0x38, 0xc5, 0x5d, 0xb7, 0xae, 0x1b, 0x08, 0xa5, 0xba, 0x02, 0xae, 0xa0, 0x98, 0x87, 0xc9, 0xa1, 0x02, 0x21, 0xb5, 0xdc, 0x21, 0xf2, 0xbb, 0x73, 0xac, 0x42, 0x4e, 0xde, 0x67, 0x29, 0x94, 0x5b, 0x8d, 0xf2, 0x89, 0x1c, 0xa3, 0xc5, 0x4c, 0x55, 0xdd, 0x72, 0x99, 0xa9, 0x0a, 0xd5, 0x89, 0x6a, 0x2f, 0x32, 0x39, 0xd4, 0x58, 0x35, 0xd5, 0x33, 0x5c, 0x7b, 0x45, 0x8c, 0xc3, 0x36, 0x43, 0xab, 0x23, 0x2b, 0xdd, 0x84, 0x52, 0xbc, 0x7c, 0xd8, 0x45, 0x1c, 0x46, 0x20, 0x8c, 0x21, 0x9b, 0x4c, 0x91, 0x44, 0x63, 0xb8, 0xdc, 0x47, 0x69, 0xa5, 0x8a, 0x61, 0xb7, 0x67, 0xf2, 0x94, 0xa3, 0x5e, 0xde, 0x37, 0x39, 0xea, 0x75, 0xd5, 0xfd, 0x37, 0xf2, 0x8a, 0x59, 0xe2, 0xba, 0x80, 0xe3, 0x62, 0xd0, 0x69, 0x9b, 0x8b, 0xb7, 0xec, 0xfc, 0xd0, 0x52, 0x2f, 0xf5, 0xe5, 0xd5, 0x8b, 0x9c, 0x65, 0xdb, 0xdc, 0xa8, 0x39, 0xee, 0x75, 0x8b, 0x67, 0x02, 0xdb, 0x65, 0x06, 0x16, 0x2c, 0x95, 0xd6, 0xe7, 0x83, 0x12, 0x86, 0xdd, 0xb6, 0x71, 0x87, 0x05, 0x40, 0x76, 0x3b, 0x17, 0x06, 0x4b, 0x5f, 0xc1, 0x72, 0x41, 0x81, 0xa7, 0xd0, 0x67, 0x59, 0xb2, 0x6e, 0x47, 0x54, 0x8e, 0xd3, 0x2f, 0xe5, 0x17, 0x8a, 0x19, 0x70, 0x5a, 0xc5, 0x1b, 0xbb, 0x5d, 0x48, 0xba, 0x4c, 0x55, 0x01, 0x6f, 0xd4, 0xe1, 0x57, 0x2a, 0x08, 0x2a, 0x2b, 0x97, 0x16, 0x7a, 0xff, 0xf7, 0xff, 0xcb, 0xff, 0xfc, 0xc0, 0xfb, 0xdf, 0x77, 0x3b, 0xca, 0x41, 0x30, 0x13, 0x6e, 0x03, 0x69, 0xdc, 0x00, 0xa3, 0x02, 0xcc, 0x91, 0xe1, 0xf6, 0xab, 0xaf, 0xb7, 0xf1, 0x17, 0x7f, 0xf9, 0x14, 0x86, 0xfd, 0x11, 0x98, 0xc3, 0x4c, 0xaf, 0xa1, 0xcc, 0x4d, 0x32, 0xa4, 0x71, 0x84, 0x95, 0x55, 0x1f, 0x77, 0xdf, 0x75, 0xcc, 0x4c, 0xed, 0xe8, 0x9b, 0x18, 0x29, 0x23, 0xa0, 0x0e, 0xc5, 0xd4, 0x5c, 0x4f, 0x4b, 0x94, 0x5b, 0xcd, 0xc3, 0x6d, 0x1b, 0x8a, 0x84, 0x5a, 0x85, 0x1c, 0x0b, 0x8a, 0xa6, 0x60, 0x93, 0xce, 0xe4, 0x1d, 0xed, 0x5e, 0x4c, 0x3d, 0xe2, 0xa8, 0x7a, 0x28, 0xf5, 0xb4, 0x90, 0x84, 0x34, 0xcb, 0xaf, 0xcb, 0x55, 0x17, 0x8a, 0x11, 0xca, 0xc0, 0x18, 0xc5, 0x75, 0x27, 0x62, 0x3c, 0xf9, 0x1c, 0x45, 0x9c, 0x32, 0xa4, 0x51, 0x0c, 0x41, 0xd5, 0x5d, 0xde, 0x69, 0x8c, 0x2c, 0xcb, 0x30, 0xec, 0x75, 0x70, 0xf0, 0xd2, 0x8b, 0x68, 0xbe, 0xfe, 0x1a, 0x92, 0x70, 0x8c, 0x7e, 0xab, 0x01, 0xc7, 0x75, 0x11, 0x54, 0x57, 0x31, 0xea, 0xf5, 0xa4, 0xb3, 0xf4, 0x38, 0x7a, 0xad, 0x36, 0xe0, 0x38, 0x20, 0x8e, 0xa7, 0xae, 0xa7, 0x5d, 0xe6, 0xc9, 0x96, 0xfa, 0x9d, 0xd3, 0x39, 0xb4, 0x72, 0x97, 0xe9, 0x5a, 0xce, 0x72, 0xd6, 0x65, 0x16, 0x20, 0x37, 0x57, 0xf8, 0xb9, 0x08, 0x58, 0xce, 0xe5, 0x2c, 0x15, 0x2c, 0xd5, 0x15, 0xb3, 0x0b, 0x5b, 0x87, 0xd4, 0x64, 0x8c, 0xa7, 0x2f, 0x14, 0x6b, 0x35, 0xe0, 0xab, 0xdb, 0x17, 0x07, 0x2d, 0x19, 0x7a, 0xeb, 0x70, 0x9b, 0x97, 0x54, 0x3f, 0xa5, 0x1e, 0x65, 0x9c, 0xad, 0x80, 0x37, 0xeb, 0x97, 0x5c, 0xd4, 0x21, 0x27, 0x5f, 0x7c, 0x5a, 0x50, 0x22, 0x50, 0x62, 0x0e, 0x5c, 0xee, 0xaa, 0xe5, 0x13, 0x63, 0xb8, 0x6e, 0x0c, 0x88, 0x14, 0x49, 0x1c, 0xc2, 0xe3, 0x1e, 0x5e, 0x7d, 0xad, 0x89, 0x3f, 0xfe, 0xfc, 0x49, 0x10, 0xe6, 0x98, 0xed, 0xe5, 0x0e, 0xe7, 0x40, 0x36, 0x35, 0x9a, 0x12, 0xe0, 0x63, 0x1f, 0x3e, 0x8e, 0xdb, 0x6f, 0xdb, 0x95, 0x4b, 0x2f, 0xd4, 0x3a, 0x35, 0xb3, 0x2a, 0xad, 0xb0, 0x4e, 0xcd, 0x31, 0xcb, 0x2d, 0x98, 0xcb, 0x0a, 0xab, 0xd8, 0x04, 0xa4, 0x76, 0x1d, 0x57, 0x69, 0x7b, 0xe5, 0xda, 0x58, 0xed, 0xb0, 0x9c, 0x9a, 0x8d, 0x42, 0xc2, 0xec, 0xb0, 0x64, 0xea, 0xf5, 0xc7, 0x66, 0x7b, 0x91, 0xfe, 0xbe, 0x02, 0x53, 0xb9, 0xb4, 0xc3, 0x55, 0x57, 0x40, 0x24, 0x31, 0xa8, 0xd9, 0x1c, 0x14, 0x99, 0x4d, 0xe9, 0xaf, 0x9e, 0x8d, 0xf1, 0xff, 0x7c, 0x8e, 0x63, 0x92, 0x0a, 0x4c, 0x52, 0x79, 0x47, 0xce, 0x7a, 0x25, 0x40, 0xab, 0xdb, 0x03, 0x1c, 0xc7, 0xec, 0xaa, 0x74, 0xd4, 0x1d, 0x42, 0xd3, 0x34, 0x81, 0xc3, 0x7d, 0xf0, 0x72, 0x05, 0xa0, 0x0c, 0x2b, 0x3b, 0x72, 0x0e, 0x3c, 0x1e, 0x8d, 0xf2, 0x25, 0xb9, 0xd6, 0x36, 0x9f, 0xa5, 0x5e, 0xea, 0xb7, 0x45, 0x5b, 0xdb, 0x82, 0xec, 0xe7, 0xfa, 0x7a, 0x90, 0xfc, 0x39, 0xc1, 0xb8, 0xd7, 0xcd, 0xcf, 0x58, 0x7a, 0xdc, 0xcb, 0xcf, 0x14, 0xb6, 0x0e, 0xf5, 0x3a, 0xa8, 0xd4, 0xe4, 0x22, 0x8d, 0x91, 0xb5, 0x48, 0xc3, 0x9c, 0x21, 0x04, 0xa3, 0x8e, 0xd6, 0xea, 0xfb, 0xae, 0xcf, 0x6c, 0x26, 0x52, 0x4b, 0x38, 0xcc, 0xa6, 0x74, 0x5b, 0xcf, 0x2c, 0xd2, 0x30, 0xbb, 0x2a, 0xd5, 0x15, 0x13, 0xf6, 0xf2, 0x0c, 0x42, 0x69, 0x61, 0x87, 0x65, 0xbf, 0xad, 0xef, 0xda, 0x51, 0xf7, 0xee, 0x1c, 0xb1, 0x8a, 0x6d, 0xd1, 0xc2, 0x8c, 0xf3, 0x69, 0xf2, 0xad, 0x1f, 0x3e, 0x2a, 0xb8, 0xcf, 0xb1, 0x5a, 0xaa, 0xe4, 0xcb, 0x73, 0x45, 0x0f, 0x69, 0xa4, 0xef, 0xbc, 0xc9, 0xd0, 0xa8, 0xb7, 0xf0, 0xf9, 0x3f, 0x7f, 0x0a, 0x61, 0x18, 0x5b, 0xdb, 0xcb, 0xe5, 0xbd, 0xda, 0xae, 0xba, 0x7b, 0x66, 0xa3, 0xe6, 0xe0, 0xe3, 0x1f, 0xbb, 0x11, 0xbb, 0xdb, 0x25, 0xb5, 0x39, 0xc8, 0x01, 0x20, 0x90, 0x28, 0xb0, 0x15, 0x57, 0xa8, 0xa9, 0xd5, 0x6a, 0x0a, 0x84, 0x13, 0x03, 0x54, 0xfd, 0x5c, 0x82, 0x33, 0xd1, 0x7b, 0x2b, 0x61, 0x81, 0x56, 0xc8, 0xb9, 0x6f, 0xbd, 0xe7, 0xd2, 0x9c, 0x51, 0x4b, 0x7e, 0x1d, 0x97, 0xaa, 0x7d, 0x96, 0xa1, 0xba, 0x32, 0x42, 0x2f, 0xff, 0x9d, 0xb9, 0x3e, 0x02, 0xc0, 0x34, 0x8e, 0xd5, 0x96, 0x22, 0xb9, 0x32, 0x4e, 0xaf, 0x5c, 0xfb, 0xe6, 0xc3, 0x11, 0xfe, 0xe2, 0xab, 0x1c, 0x99, 0xc8, 0x30, 0x4d, 0x12, 0x04, 0x41, 0x80, 0xff, 0xf5, 0x67, 0x3e, 0x88, 0x46, 0xa7, 0x87, 0xb3, 0xed, 0x11, 0x5e, 0x69, 0x74, 0x70, 0xea, 0xb5, 0x43, 0xa4, 0x82, 0x62, 0x32, 0x9d, 0x22, 0x1a, 0x8f, 0x20, 0x08, 0x95, 0x8b, 0x80, 0xd5, 0x76, 0x74, 0xbf, 0x52, 0x81, 0xeb, 0xf9, 0xd8, 0x38, 0x7e, 0x05, 0x2a, 0xeb, 0x1b, 0x98, 0xc4, 0xf1, 0xf2, 0x97, 0x78, 0xa9, 0xdf, 0x35, 0xe0, 0x24, 0x64, 0xf6, 0x4c, 0xb7, 0xb0, 0x8a, 0x4d, 0x9f, 0xbf, 0x64, 0x58, 0xae, 0x5b, 0xeb, 0xdd, 0x14, 0x2c, 0x47, 0x9d, 0x36, 0x2a, 0xd6, 0x2a, 0xb6, 0xa3, 0x60, 0xb9, 0xb2, 0xb5, 0x5d, 0xd8, 0x67, 0xa9, 0x61, 0x99, 0x5f, 0x34, 0x96, 0x43, 0x74, 0xd8, 0x6e, 0x9a, 0x7b, 0x77, 0xf4, 0x35, 0x11, 0x1a, 0xa8, 0xb5, 0x9d, 0x5d, 0x79, 0xd7, 0x8e, 0xda, 0x94, 0x7e, 0x31, 0xb0, 0x24, 0x8f, 0x9e, 0x7a, 0x52, 0xc4, 0xe1, 0x10, 0xdb, 0xeb, 0xdb, 0xca, 0x8d, 0xb5, 0xe0, 0xba, 0x42, 0x41, 0x4e, 0xc2, 0xe6, 0x73, 0xff, 0xe9, 0x24, 0xf6, 0xcf, 0xb5, 0x0a, 0x77, 0xe1, 0xe8, 0xfb, 0x6f, 0xd6, 0x56, 0x1d, 0x7c, 0xe2, 0x27, 0x6e, 0xc2, 0xde, 0x76, 0x09, 0x49, 0x5c, 0x5c, 0x9b, 0xc6, 0x5c, 0x6a, 0x1c, 0xa4, 0xeb, 0xea, 0xd5, 0x6a, 0x63, 0xb5, 0x8d, 0x5c, 0x3a, 0x3f, 0xb9, 0xb4, 0x57, 0x3a, 0x42, 0xe6, 0x39, 0x40, 0x36, 0x29, 0xec, 0xa4, 0x9c, 0x28, 0x70, 0xca, 0x75, 0x6a, 0x63, 0xb5, 0xc0, 0x57, 0xbb, 0x43, 0x86, 0xcc, 0x5e, 0xe6, 0x8b, 0x29, 0xd2, 0x28, 0x54, 0x1b, 0xd1, 0x05, 0x26, 0xc9, 0x38, 0x07, 0x64, 0x1c, 0x99, 0x0d, 0xe7, 0x13, 0x7d, 0x67, 0x8f, 0xc8, 0x90, 0x26, 0x89, 0xb9, 0x95, 0x51, 0xae, 0x7a, 0x93, 0x4e, 0xf1, 0x77, 0x7f, 0x3f, 0xc1, 0x99, 0x03, 0xd7, 0x2c, 0xf6, 0x7d, 0xdf, 0x8d, 0x57, 0xe1, 0x17, 0x3e, 0x7c, 0x87, 0xd9, 0x94, 0x2e, 0xb2, 0x0c, 0x67, 0xf6, 0x0f, 0xf1, 0x4a, 0x63, 0x80, 0x97, 0xeb, 0x6d, 0x3c, 0x7f, 0x66, 0x1f, 0xfd, 0x64, 0x3a, 0x73, 0x95, 0x44, 0xae, 0xe5, 0x42, 0x8c, 0x00, 0x1b, 0xc7, 0x8e, 0xcb, 0x0b, 0xba, 0xb2, 0xac, 0xf8, 0xc1, 0x5c, 0xfe, 0x42, 0x2f, 0xf5, 0x5b, 0xa2, 0x17, 0x7c, 0xc6, 0x16, 0xba, 0x46, 0xa8, 0xf5, 0x80, 0x6b, 0x12, 0x66, 0x17, 0x08, 0xcb, 0xaa, 0xbd, 0x35, 0x5d, 0xed, 0xb6, 0xd4, 0x50, 0xd4, 0x0b, 0xa3, 0x2b, 0xeb, 0x6a, 0x8d, 0x5b, 0xb7, 0x6d, 0x76, 0x5e, 0x16, 0x60, 0xd9, 0x69, 0xab, 0xcb, 0xbc, 0x88, 0x59, 0xd1, 0x66, 0xef, 0xb3, 0x24, 0x84, 0xce, 0xad, 0x65, 0x5b, 0xdd, 0x92, 0x57, 0xde, 0xea, 0xab, 0x24, 0x34, 0x38, 0xed, 0x55, 0x6c, 0x6b, 0x3b, 0xc7, 0xe4, 0xf5, 0x11, 0xcd, 0x06, 0x6a, 0xbb, 0x12, 0x9c, 0xbd, 0x46, 0xfd, 0xa2, 0x60, 0x49, 0x1e, 0x3d, 0xf5, 0x7d, 0x01, 0x91, 0xa1, 0xe4, 0x78, 0x70, 0xdd, 0x0c, 0x10, 0x43, 0x13, 0x6e, 0x0b, 0x64, 0xf8, 0xee, 0xa3, 0x2f, 0xe2, 0xa1, 0x47, 0x4f, 0x17, 0x2e, 0x08, 0x13, 0xea, 0x4e, 0x9d, 0xbb, 0xde, 0x73, 0x02, 0x1f, 0xfb, 0xe8, 0xd5, 0x98, 0x26, 0x71, 0xbe, 0x84, 0x57, 0x2d, 0xe7, 0x15, 0x98, 0xe4, 0x8b, 0x7a, 0xcd, 0x56, 0x73, 0x05, 0xb6, 0x38, 0x77, 0x96, 0x93, 0x38, 0x04, 0xe3, 0x4a, 0x47, 0x96, 0xb3, 0x9c, 0x71, 0xa2, 0xcc, 0x00, 0x55, 0xc1, 0x58, 0x4c, 0xd4, 0x76, 0xf4, 0x99, 0x8d, 0xe8, 0xd9, 0xb4, 0x70, 0xc5, 0xc4, 0xc4, 0xb8, 0x46, 0x60, 0x9a, 0x26, 0xf2, 0x3a, 0x5e, 0x7d, 0xc1, 0x99, 0xe7, 0x41, 0x64, 0x39, 0x20, 0x33, 0xa1, 0xb6, 0x9d, 0xbb, 0x2e, 0x9a, 0x6d, 0x81, 0xdf, 0xfc, 0xdd, 0x04, 0x84, 0xe5, 0xa1, 0xfa, 0x3f, 0xf9, 0xf4, 0x87, 0x70, 0xe5, 0xe6, 0x0a, 0xd2, 0x70, 0x0c, 0xaa, 0x2e, 0x38, 0x93, 0xd7, 0x47, 0x48, 0x28, 0x36, 0x3b, 0x3d, 0x9c, 0x69, 0x8f, 0x70, 0xfa, 0xb0, 0x83, 0xe7, 0x5e, 0xdd, 0x47, 0x63, 0x18, 0xcb, 0xab, 0x2a, 0x66, 0x2e, 0x62, 0x73, 0x3d, 0x0e, 0xca, 0x1c, 0xb8, 0x9c, 0xc3, 0x2f, 0x57, 0x70, 0xe5, 0x6d, 0x77, 0x22, 0x89, 0x42, 0x73, 0xed, 0x83, 0xbe, 0x33, 0x7d, 0xa9, 0x97, 0xfa, 0x42, 0x75, 0x11, 0x78, 0x8b, 0x34, 0x39, 0xaf, 0xcb, 0x2c, 0x86, 0xe4, 0xeb, 0x97, 0x0d, 0x96, 0x66, 0x17, 0xa6, 0x05, 0xcb, 0xea, 0xfa, 0xa6, 0x79, 0x6e, 0x6f, 0x50, 0x9f, 0x83, 0x25, 0x55, 0x80, 0xb4, 0xb6, 0xa6, 0xcb, 0x9b, 0x18, 0xf3, 0xab, 0x24, 0x08, 0x91, 0xd7, 0xdc, 0xda, 0x7b, 0x2b, 0x6b, 0xbb, 0xbb, 0x66, 0x57, 0xe5, 0xda, 0xee, 0x31, 0x2b, 0xf4, 0xde, 0x03, 0x21, 0xf4, 0x22, 0x43, 0xef, 0xa7, 0xbe, 0x25, 0x78, 0xc0, 0xb1, 0x1a, 0x94, 0x90, 0x46, 0x0d, 0x99, 0xa7, 0x44, 0x86, 0x24, 0x0e, 0x91, 0x09, 0x82, 0xdf, 0xff, 0x83, 0x87, 0x30, 0x1c, 0x8c, 0xac, 0x70, 0x5b, 0xde, 0x73, 0x7d, 0xd5, 0x89, 0x55, 0xfc, 0x37, 0x9f, 0xb8, 0x06, 0x9e, 0x27, 0x81, 0x94, 0x44, 0x63, 0xb5, 0x00, 0x37, 0x2b, 0xe4, 0x14, 0xe5, 0x25, 0x65, 0x0e, 0x32, 0xb3, 0x90, 0x37, 0x77, 0x7e, 0x8e, 0xe7, 0xe4, 0x4e, 0xd1, 0x65, 0x80, 0xc8, 0x94, 0x2b, 0x65, 0xf9, 0x46, 0x74, 0x8f, 0x59, 0xdb, 0xce, 0x99, 0xc9, 0xa1, 0x9a, 0xdc, 0x64, 0x14, 0xc1, 0xf1, 0xe4, 0xf3, 0xfc, 0xca, 0x88, 0x89, 0x05, 0xc2, 0x4c, 0xdd, 0x8b, 0x93, 0x5f, 0x1c, 0xc6, 0x9c, 0x7c, 0xc3, 0xb9, 0xbe, 0xc2, 0x36, 0x8d, 0x63, 0x50, 0x6b, 0xf3, 0x39, 0x73, 0x3c, 0xfc, 0x97, 0x6f, 0x02, 0x0f, 0x7e, 0x4d, 0x3a, 0xc8, 0xc9, 0x74, 0x8a, 0x2b, 0x56, 0x38, 0xfe, 0xc9, 0x4f, 0xdf, 0x37, 0x07, 0x48, 0xa3, 0x05, 0x0a, 0x50, 0x1c, 0x8e, 0x46, 0x38, 0xdb, 0x19, 0xe3, 0xe5, 0xc3, 0x36, 0x9e, 0x7b, 0xf5, 0x00, 0xe7, 0x7a, 0x63, 0x24, 0x93, 0xe9, 0x1c, 0x38, 0xab, 0x6b, 0x9b, 0xb8, 0xf5, 0x43, 0x1f, 0x5d, 0xfe, 0xd2, 0x2f, 0xf5, 0x65, 0xd5, 0x95, 0x85, 0xe0, 0xec, 0x5e, 0x5e, 0x58, 0x6a, 0xf8, 0xad, 0x6d, 0x80, 0xcc, 0x2c, 0xf6, 0x1d, 0xaa, 0x33, 0x04, 0x1a, 0x90, 0x33, 0x5b, 0xd0, 0x6d, 0x58, 0xaa, 0xd0, 0x7b, 0xc5, 0x68, 0x0b, 0x96, 0xf6, 0x76, 0x74, 0x75, 0x95, 0x04, 0x61, 0xb4, 0xb0, 0xe4, 0x77, 0x68, 0x60, 0x49, 0x15, 0x14, 0x77, 0x2f, 0x6b, 0x9e, 0x92, 0x3c, 0xfa, 0xe2, 0xa3, 0x22, 0x1e, 0x0f, 0xb1, 0xbd, 0x51, 0x02, 0xc4, 0x24, 0x77, 0x93, 0x22, 0xc3, 0xc9, 0x47, 0x9e, 0xc7, 0xc9, 0xc7, 0x5e, 0x2d, 0x86, 0xdb, 0x00, 0x5c, 0x9a, 0xe1, 0x37, 0xfe, 0xe1, 0xbd, 0xf0, 0x3d, 0xa2, 0x42, 0xdd, 0xfc, 0xba, 0x06, 0x66, 0xee, 0xc5, 0xd1, 0x79, 0x44, 0xe9, 0x2c, 0x8b, 0x57, 0x3a, 0x30, 0x03, 0xe3, 0xdc, 0x59, 0x8e, 0xe5, 0xbd, 0x35, 0xd9, 0x44, 0x5d, 0xf5, 0xc0, 0x4c, 0xf1, 0x86, 0x15, 0xee, 0xda, 0x61, 0x85, 0x3c, 0xa5, 0x76, 0xa5, 0xf9, 0x85, 0x65, 0xf2, 0x79, 0x26, 0x84, 0xba, 0x14, 0x4c, 0xdf, 0x79, 0xa3, 0xc3, 0x6d, 0xd5, 0x67, 0xa9, 0xef, 0xf8, 0x8e, 0xf3, 0x2b, 0x6f, 0x35, 0x38, 0x85, 0x02, 0x67, 0x46, 0x38, 0xfe, 0xc5, 0xef, 0x4e, 0x70, 0x78, 0x38, 0x42, 0x06, 0x02, 0x00, 0xf8, 0x9f, 0x3e, 0x75, 0x0f, 0xae, 0xbb, 0x62, 0xc7, 0xba, 0x53, 0xa7, 0xe8, 0x14, 0xcf, 0xa7, 0xe3, 0x38, 0xc2, 0x7e, 0x3f, 0xc2, 0xe9, 0xc3, 0x0e, 0xfe, 0xe3, 0x37, 0x1f, 0x37, 0xcf, 0xbd, 0x52, 0x09, 0xb7, 0x7f, 0xf8, 0x63, 0xcb, 0x5f, 0xee, 0xa5, 0x7e, 0x1b, 0x1d, 0xe7, 0xfa, 0x25, 0xc0, 0x72, 0xdd, 0x84, 0xf0, 0x95, 0xda, 0x5a, 0x21, 0x37, 0x49, 0xd4, 0x7d, 0x51, 0x66, 0x6b, 0x7a, 0x57, 0x39, 0x4e, 0x52, 0xbc, 0x32, 0x62, 0xd4, 0x6d, 0x5f, 0x70, 0x51, 0x87, 0x12, 0x3a, 0x97, 0xa7, 0xcc, 0x73, 0x93, 0xed, 0x0b, 0xce, 0x53, 0xca, 0x2d, 0xe8, 0x17, 0x17, 0x7a, 0x53, 0x20, 0x03, 0xf7, 0xa7, 0x48, 0xa3, 0x11, 0x80, 0x29, 0x3c, 0xee, 0x21, 0x89, 0x42, 0x08, 0x31, 0xc5, 0xb3, 0x2f, 0x34, 0x90, 0xc6, 0x09, 0x84, 0x00, 0x1c, 0xcf, 0x43, 0x1a, 0xc7, 0x00, 0x80, 0x8f, 0xde, 0x7f, 0x3d, 0x18, 0x12, 0x08, 0x64, 0x60, 0x9e, 0x83, 0x49, 0x12, 0x02, 0xc8, 0xe4, 0x95, 0xb3, 0x71, 0x08, 0x88, 0x0c, 0x8e, 0xe7, 0x22, 0x4d, 0x42, 0x00, 0x02, 0xcc, 0x73, 0x91, 0xc6, 0xf9, 0x99, 0x34, 0x89, 0x90, 0x65, 0x53, 0x38, 0xae, 0x2b, 0xcf, 0x23, 0x53, 0x67, 0x46, 0xf2, 0x8c, 0x23, 0xb7, 0xa6, 0x43, 0x4c, 0xe5, 0xeb, 0x2b, 0xed, 0x78, 0x4c, 0x7d, 0x2f, 0xf9, 0xb5, 0x69, 0x3c, 0x56, 0xcf, 0x1d, 0xf5, 0xfa, 0x13, 0x30, 0xd7, 0x35, 0xef, 0x93, 0xb9, 0x2e, 0xd2, 0x34, 0x06, 0x20, 0xe0, 0xb8, 0x1e, 0x26, 0x49, 0xac, 0xde, 0xb3, 0x87, 0x49, 0x1c, 0x03, 0x42, 0x80, 0xb9, 0x1e, 0xd2, 0x24, 0x86, 0x10, 0x02, 0x4c, 0xfd, 0x8c, 0x42, 0x00, 0xcc, 0x61, 0x10, 0x69, 0x1f, 0x1f, 0xbe, 0x77, 0x8c, 0x0c, 0x04, 0x93, 0x44, 0xbe, 0xce, 0x83, 0x3f, 0x3c, 0x23, 0xbf, 0x16, 0x80, 0xe3, 0x71, 0xa4, 0x89, 0xd4, 0x6e, 0x41, 0x7b, 0x4a, 0x8b, 0x82, 0xe6, 0x9c, 0xe3, 0xf8, 0x6a, 0x80, 0x71, 0x9c, 0xc0, 0x75, 0xb9, 0xbc, 0x4f, 0xdc, 0xe3, 0xb8, 0xf1, 0x9e, 0xfb, 0x30, 0xea, 0x76, 0x00, 0x21, 0x50, 0x5e, 0xa9, 0x2d, 0xf5, 0x52, 0x5f, 0x9a, 0xee, 0x75, 0x00, 0x40, 0x5e, 0x7e, 0xa7, 0x74, 0x49, 0x5d, 0x84, 0x07, 0x00, 0xe5, 0xda, 0x1a, 0x46, 0xdd, 0x76, 0xae, 0x3b, 0xb9, 0x1e, 0x76, 0xec, 0x33, 0x47, 0x69, 0x75, 0x7e, 0xb5, 0x86, 0xa1, 0xf5, 0x7c, 0xa8, 0x5e, 0xa7, 0x62, 0xeb, 0xb5, 0x75, 0x0c, 0x3a, 0x2d, 0x40, 0x48, 0x9d, 0x3f, 0xdf, 0xc0, 0xb0, 0xd3, 0xca, 0xcf, 0xb4, 0x9a, 0x10, 0x42, 0x14, 0x74, 0x75, 0x63, 0x53, 0x6a, 0x08, 0x54, 0xd7, 0x37, 0xd0, 0x6f, 0x36, 0x00, 0x00, 0x2b, 0x1b, 0x5b, 0x46, 0x57, 0x37, 0x36, 0x2c, 0xbd, 0x85, 0x5e, 0xa3, 0x2e, 0xcf, 0x6c, 0x6e, 0xa3, 0xd7, 0x38, 0x94, 0x7a, 0x6b, 0x1b, 0xdd, 0xfa, 0x21, 0x84, 0x10, 0xa8, 0x6d, 0xef, 0xa2, 0x5b, 0x3f, 0x00, 0x80, 0x37, 0xa5, 0x69, 0x1c, 0xf6, 0x00, 0xd1, 0x87, 0xcb, 0x1d, 0x24, 0x71, 0x04, 0x21, 0xa6, 0x70, 0xb9, 0x8b, 0xd7, 0xce, 0xd6, 0xd1, 0xeb, 0x87, 0x70, 0x3c, 0x0f, 0x49, 0x14, 0x49, 0x00, 0x70, 0x8e, 0x6a, 0x99, 0xe0, 0xf6, 0x5b, 0x36, 0xe1, 0x7a, 0x1e, 0x26, 0x91, 0x04, 0xa1, 0xe3, 0xe5, 0xc0, 0x33, 0x80, 0x14, 0x53, 0xb5, 0xe4, 0x57, 0x3e, 0x77, 0xb9, 0x2b, 0xcf, 0x8b, 0x0c, 0x8e, 0x2b, 0x37, 0x87, 0x43, 0xc8, 0xfb, 0xbc, 0xd3, 0x48, 0x02, 0xcf, 0x75, 0x5d, 0x24, 0x71, 0x08, 0xa1, 0xa1, 0xab, 0x5e, 0xc7, 0x71, 0x1d, 0xa4, 0xc9, 0x58, 0x01, 0x52, 0xf6, 0x41, 0x0a, 0xa1, 0x60, 0x99, 0x58, 0x10, 0x8d, 0x23, 0x09, 0x3f, 0x4f, 0x43, 0x51, 0x48, 0x18, 0x2b, 0x80, 0x51, 0x0d, 0xcb, 0x4c, 0x83, 0x33, 0x51, 0x10, 0x75, 0x15, 0x38, 0x01, 0xea, 0x38, 0x48, 0xc2, 0x3e, 0xd2, 0x49, 0x08, 0x50, 0xe0, 0xae, 0x9b, 0x63, 0x54, 0x2b, 0xf2, 0x0f, 0xc5, 0x24, 0x89, 0xf1, 0xcc, 0xd9, 0x3a, 0x5a, 0x61, 0x6a, 0x60, 0xbc, 0x18, 0x90, 0x5a, 0x27, 0x73, 0xfa, 0xe4, 0x4b, 0xfb, 0xf8, 0xf3, 0x93, 0x3f, 0x04, 0x00, 0x04, 0x95, 0x2a, 0xae, 0xb8, 0xf9, 0x36, 0x78, 0xbe, 0x8f, 0xf2, 0x6a, 0x0d, 0xa3, 0x5e, 0xd7, 0x7c, 0x00, 0x97, 0x7a, 0xa9, 0x2f, 0x5a, 0x6b, 0x70, 0x5e, 0x32, 0x2c, 0x6b, 0x06, 0x6c, 0xe5, 0x55, 0xf9, 0x9a, 0x42, 0x14, 0xc1, 0x39, 0x0f, 0xc5, 0x5c, 0x0f, 0x3b, 0x6d, 0x40, 0xc1, 0x6f, 0x58, 0x78, 0xde, 0x82, 0x10, 0x02, 0xe5, 0xb5, 0x75, 0x0c, 0xdb, 0x4d, 0x09, 0xb9, 0xf5, 0x0d, 0x39, 0xc1, 0x66, 0xb4, 0x82, 0xe5, 0xfa, 0x06, 0x06, 0x2d, 0x75, 0x66, 0x63, 0x33, 0x87, 0xe5, 0xe6, 0xd6, 0x8c, 0xd6, 0x80, 0xdc, 0xb4, 0x60, 0xb9, 0x65, 0x60, 0x59, 0xdb, 0xde, 0xb9, 0x28, 0x40, 0x6a, 0x4d, 0x39, 0x9f, 0x20, 0x0e, 0x87, 0xea, 0x17, 0xda, 0x45, 0x1a, 0x47, 0x00, 0x04, 0x4e, 0x9f, 0xed, 0x29, 0x37, 0x29, 0xe0, 0x72, 0x6e, 0xc0, 0x70, 0xcf, 0xfb, 0xae, 0x44, 0x9a, 0x44, 0x12, 0x66, 0xdc, 0x53, 0x80, 0x14, 0x70, 0xb8, 0x05, 0x45, 0xd7, 0xc5, 0x24, 0x89, 0x20, 0x84, 0x90, 0xc0, 0x8b, 0x72, 0xe7, 0x97, 0xc4, 0x63, 0x05, 0x57, 0x86, 0x34, 0x91, 0xce, 0x55, 0x3a, 0xd1, 0x31, 0x04, 0x24, 0x5c, 0xe5, 0x6b, 0x4e, 0x8d, 0x43, 0x15, 0x4a, 0xa7, 0xca, 0xb9, 0x32, 0x37, 0x77, 0x96, 0xae, 0xeb, 0xaa, 0xf7, 0x93, 0xbb, 0x43, 0x40, 0x80, 0xb9, 0x8e, 0x02, 0x21, 0xc0, 0x1c, 0x4f, 0xfe, 0x5c, 0x22, 0x93, 0xf9, 0xc6, 0x24, 0x51, 0xe7, 0x5d, 0x09, 0x30, 0x01, 0x30, 0xcf, 0x45, 0x1c, 0x0e, 0x30, 0x9d, 0x84, 0x00, 0x03, 0x52, 0xf5, 0xc7, 0xc1, 0x0f, 0x38, 0x3e, 0x7a, 0x6f, 0x54, 0x70, 0x90, 0x0f, 0x3f, 0x7f, 0xf6, 0x4d, 0x03, 0xd2, 0xf5, 0x3c, 0x7c, 0xf7, 0xf9, 0x33, 0xf8, 0xa3, 0x87, 0x7e, 0x08, 0xd7, 0xe3, 0x98, 0x4e, 0xa7, 0xb8, 0xee, 0xee, 0x7b, 0xb1, 0xb6, 0x7b, 0x6c, 0xf9, 0xcb, 0xbd, 0xd4, 0x6f, 0x8d, 0xd6, 0x2e, 0xf3, 0x22, 0x60, 0x79, 0xb4, 0x9b, 0xcc, 0x21, 0x5a, 0x80, 0x65, 0xb7, 0x6d, 0x1c, 0xe1, 0xb0, 0x00, 0xdd, 0x22, 0x38, 0x85, 0x10, 0xa8, 0xd4, 0xd6, 0x2d, 0x37, 0xb9, 0x81, 0x61, 0x01, 0x90, 0x5a, 0x6f, 0x62, 0xd0, 0xce, 0x01, 0x69, 0xc3, 0xb2, 0xd7, 0xac, 0x17, 0x61, 0x29, 0x04, 0x56, 0x36, 0xb7, 0x0d, 0x2c, 0x57, 0xb7, 0xb6, 0x0d, 0x2c, 0x57, 0xb7, 0x76, 0xd0, 0xab, 0x1f, 0x1a, 0xe0, 0x75, 0x0e, 0xcf, 0x5d, 0x14, 0x2c, 0x29, 0xc4, 0x18, 0x3c, 0xf0, 0x91, 0x28, 0x77, 0xe8, 0x72, 0x0f, 0x69, 0x1c, 0xe2, 0x95, 0x33, 0xed, 0x42, 0x18, 0xeb, 0x72, 0x8e, 0x6c, 0x92, 0xe0, 0xd6, 0x9b, 0x36, 0xf2, 0x10, 0x1b, 0x19, 0x1c, 0xae, 0x43, 0x60, 0x01, 0x97, 0xbb, 0x48, 0x23, 0x09, 0x36, 0xe6, 0x3a, 0xea, 0xb9, 0x74, 0x87, 0x89, 0x82, 0xab, 0xed, 0x32, 0x6d, 0x27, 0x5a, 0x0c, 0xcf, 0x99, 0x7c, 0x1d, 0x21, 0x9f, 0x4f, 0x12, 0xf9, 0x3a, 0xae, 0x6b, 0x9d, 0x71, 0xe5, 0x95, 0x14, 0x20, 0xd2, 0x71, 0x4e, 0xa2, 0x28, 0x0f, 0x75, 0x4d, 0x68, 0xec, 0x61, 0x12, 0x47, 0x10, 0x80, 0x01, 0xa4, 0x86, 0x62, 0x1a, 0xe7, 0x6e, 0x32, 0x89, 0x47, 0x98, 0x4c, 0x23, 0x50, 0x47, 0xa8, 0xb4, 0x83, 0x82, 0xa2, 0x0a, 0xc3, 0xef, 0xbb, 0x97, 0xc3, 0x21, 0x79, 0xb8, 0xfd, 0xed, 0x1f, 0x9e, 0x42, 0x06, 0xb1, 0x00, 0x96, 0xc9, 0x91, 0xfa, 0x85, 0x73, 0x2d, 0xfc, 0xe1, 0x43, 0xcf, 0x20, 0x89, 0xe5, 0x78, 0xe4, 0xcd, 0x3f, 0xf2, 0x41, 0xe8, 0xff, 0x96, 0xbf, 0xdc, 0x4b, 0xfd, 0x96, 0xea, 0x37, 0x84, 0xe5, 0xf9, 0xb4, 0x40, 0xc9, 0x86, 0xee, 0xcc, 0x99, 0x3c, 0xdc, 0x5e, 0xc7, 0xb0, 0x6b, 0x41, 0xb1, 0xdd, 0x2a, 0x3a, 0x4b, 0x7d, 0x66, 0x51, 0xe8, 0x3d, 0xe7, 0x26, 0x2d, 0x58, 0xb6, 0xe6, 0x61, 0x69, 0x87, 0xde, 0x45, 0x67, 0xa9, 0x60, 0x99, 0x09, 0x05, 0x4b, 0x09, 0xc8, 0xd5, 0xed, 0x1d, 0x74, 0x0f, 0x2f, 0xde, 0x4d, 0xaa, 0xd0, 0x7b, 0x28, 0xc3, 0x5e, 0xae, 0xdd, 0x64, 0x06, 0x50, 0x86, 0xc3, 0x83, 0xb6, 0x01, 0x64, 0xaa, 0xf2, 0x79, 0x57, 0x5c, 0xb1, 0x0e, 0x22, 0x92, 0x3c, 0x07, 0xa9, 0xf2, 0x91, 0xd2, 0x89, 0x8e, 0x21, 0x14, 0x14, 0xf7, 0xcf, 0x75, 0x70, 0x50, 0x97, 0x2b, 0xd2, 0xd2, 0x24, 0x84, 0x80, 0x50, 0x4e, 0x71, 0x9c, 0xe7, 0x29, 0xe3, 0x48, 0xba, 0x4c, 0xae, 0x80, 0x8a, 0x4c, 0x41, 0x4e, 0x42, 0xd7, 0xd1, 0x80, 0xc4, 0xc4, 0x84, 0xd8, 0x42, 0x4c, 0x54, 0x18, 0x6e, 0x01, 0x35, 0x0e, 0x21, 0x00, 0x38, 0x5c, 0xc3, 0x49, 0x02, 0x7b, 0xa2, 0xf3, 0x8e, 0x2e, 0x97, 0x61, 0x3e, 0x14, 0x20, 0x13, 0xf9, 0xb3, 0xb8, 0x9e, 0x8b, 0x24, 0x0a, 0x31, 0x99, 0x46, 0x10, 0x74, 0x8a, 0x24, 0x1a, 0x41, 0x58, 0x3f, 0x6f, 0x0e, 0xcb, 0x08, 0x8e, 0x03, 0x7c, 0xe0, 0x1e, 0x6e, 0x42, 0xf8, 0x38, 0x23, 0x78, 0xe6, 0xf4, 0xb9, 0x0b, 0x02, 0xa4, 0x00, 0x70, 0x38, 0x88, 0xf0, 0x7f, 0x7f, 0xf1, 0x21, 0x4c, 0xa6, 0x53, 0xb8, 0x9c, 0x63, 0xeb, 0xea, 0x6b, 0x50, 0xd9, 0xd8, 0x40, 0x69, 0x75, 0x15, 0xc3, 0x5e, 0x07, 0x02, 0x62, 0xa9, 0x97, 0xfa, 0x92, 0xf4, 0x85, 0x81, 0x33, 0x87, 0xe5, 0x51, 0xee, 0x50, 0x3f, 0x9f, 0x0d, 0xb1, 0x6d, 0x3d, 0x0b, 0xda, 0xa1, 0x71, 0x96, 0xeb, 0x73, 0x0e, 0xf2, 0xfc, 0x3a, 0x87, 0xe5, 0xa2, 0xd0, 0x7b, 0x91, 0x9b, 0x34, 0xb0, 0x5c, 0x2f, 0x86, 0xe1, 0xc5, 0xdc, 0xa4, 0xe5, 0x26, 0x6d, 0x58, 0x5e, 0x52, 0xe8, 0xed, 0x73, 0xc4, 0xe1, 0x48, 0x01, 0xc6, 0x51, 0xa3, 0x83, 0x40, 0xa5, 0x5a, 0xb6, 0xf2, 0x70, 0x1e, 0xe2, 0x38, 0x46, 0xab, 0x33, 0x2e, 0xe6, 0x1d, 0x95, 0x16, 0x2a, 0x4f, 0xd9, 0x6a, 0xf6, 0xf1, 0xe5, 0xaf, 0xbc, 0x8e, 0x6f, 0x9c, 0xec, 0xe0, 0xc1, 0xaf, 0xbe, 0x8a, 0x2f, 0x7c, 0xf9, 0x1c, 0x1a, 0x9d, 0xa9, 0x05, 0x48, 0x99, 0x83, 0x34, 0x79, 0xc7, 0x38, 0x54, 0x70, 0x55, 0xce, 0x52, 0x4c, 0x2c, 0xd7, 0x68, 0x85, 0xde, 0xea, 0xbc, 0x0e, 0xb7, 0xc3, 0x88, 0xe1, 0xe9, 0xe7, 0xc6, 0x78, 0xec, 0xa9, 0x0c, 0x8f, 0xfe, 0x80, 0xe3, 0xab, 0xdf, 0x8a, 0x70, 0xf2, 0x71, 0xe0, 0x07, 0x2f, 0xb8, 0x78, 0xe1, 0xa5, 0x18, 0x51, 0xac, 0x1d, 0xa4, 0x2e, 0xe4, 0x28, 0xe7, 0x27, 0x20, 0xdf, 0x43, 0x12, 0x21, 0x9b, 0x26, 0x20, 0x2c, 0xb3, 0xd2, 0x0e, 0x0a, 0x90, 0x56, 0x88, 0x9d, 0x59, 0xce, 0xf2, 0x7d, 0x77, 0x16, 0x8b, 0x37, 0x8f, 0xbd, 0x52, 0x7f, 0x43, 0x37, 0xe9, 0x78, 0x1e, 0xf6, 0x9b, 0x1d, 0xfc, 0x5f, 0x5f, 0x3e, 0x89, 0x09, 0x28, 0x26, 0x49, 0x82, 0x2b, 0x6e, 0xbe, 0x0d, 0xc7, 0x6f, 0xb8, 0x79, 0xe9, 0x72, 0x96, 0xfa, 0xb2, 0xea, 0x37, 0x86, 0x65, 0x31, 0x67, 0x79, 0x3e, 0x10, 0xbe, 0x59, 0xad, 0x43, 0xef, 0xf3, 0x41, 0xb1, 0xbc, 0xb6, 0x36, 0x97, 0xa7, 0xbc, 0xd8, 0xd0, 0xbb, 0xdf, 0x3a, 0x7f, 0x9e, 0xd2, 0x0e, 0xbd, 0x57, 0x36, 0xb7, 0x0b, 0xa1, 0xf7, 0xc5, 0xc2, 0x92, 0x3c, 0xfa, 0xec, 0xbf, 0x13, 0x40, 0x86, 0xc0, 0x59, 0x93, 0xe3, 0x8b, 0x6a, 0x92, 0xe6, 0xc1, 0x6f, 0x9c, 0xc1, 0x73, 0x2f, 0x34, 0x90, 0xc4, 0x91, 0xbc, 0xfa, 0xc0, 0xa3, 0xf8, 0xf9, 0x9f, 0xb9, 0x16, 0x5b, 0xdb, 0x15, 0xd5, 0xe3, 0xa8, 0xa7, 0x6a, 0x32, 0x24, 0x51, 0x88, 0x0c, 0x04, 0x7f, 0xf9, 0xd7, 0xaf, 0xa3, 0xd7, 0x19, 0xa9, 0x56, 0x20, 0x81, 0x24, 0x0c, 0xc1, 0x7d, 0x0f, 0x9f, 0xf8, 0xb1, 0x35, 0x94, 0x79, 0xaa, 0x46, 0x10, 0xf3, 0x46, 0x71, 0x21, 0x64, 0x73, 0x38, 0x73, 0x1d, 0x39, 0x33, 0x1e, 0x8f, 0xe4, 0x8c, 0xb6, 0x1a, 0x6b, 0x64, 0x0e, 0x83, 0xc0, 0x54, 0xf5, 0x50, 0x3a, 0x38, 0xf5, 0xca, 0x14, 0xdf, 0xfd, 0xde, 0x18, 0x83, 0xd0, 0x51, 0x4d, 0xe6, 0xba, 0x57, 0x52, 0xa8, 0x89, 0x19, 0xd9, 0x07, 0x99, 0x24, 0x31, 0xae, 0x3c, 0xee, 0xe1, 0x9e, 0xbb, 0x04, 0xd6, 0xab, 0x71, 0x3e, 0x79, 0xa3, 0x6e, 0x59, 0xcc, 0xb2, 0x04, 0x49, 0x34, 0x02, 0x53, 0x53, 0x38, 0xa9, 0x9e, 0xdd, 0xce, 0x54, 0x3f, 0xa5, 0xc3, 0x91, 0xa9, 0x16, 0x21, 0x47, 0x8d, 0x3b, 0x26, 0x51, 0x8c, 0xff, 0xe3, 0xf7, 0x39, 0x5a, 0xea, 0xae, 0x9d, 0x52, 0x50, 0xc2, 0x6f, 0xfd, 0xea, 0x27, 0x91, 0xa5, 0x09, 0x5c, 0xd5, 0x36, 0x95, 0x26, 0x45, 0x1d, 0x65, 0xc0, 0xbf, 0xfc, 0xcf, 0x0f, 0x61, 0xbf, 0xd1, 0x81, 0xe3, 0x79, 0xd8, 0xbd, 0xf6, 0x7a, 0xac, 0x6e, 0xef, 0xa2, 0xbc, 0x5a, 0xcb, 0x27, 0x24, 0x96, 0x7a, 0xa9, 0x2f, 0x93, 0xae, 0xac, 0xae, 0x1d, 0x7d, 0x86, 0x90, 0x37, 0xe8, 0xb3, 0x5c, 0x3f, 0xef, 0xac, 0xb7, 0x99, 0x07, 0x37, 0xad, 0x40, 0x97, 0xde, 0x4f, 0x79, 0xa1, 0x2d, 0x42, 0x17, 0x3a, 0xca, 0x48, 0xcd, 0xdc, 0xf7, 0x2e, 0x08, 0xa3, 0xe8, 0x37, 0xeb, 0xa8, 0x6d, 0xef, 0x81, 0x32, 0x86, 0x7e, 0xa3, 0x8e, 0xda, 0xde, 0xb1, 0x8b, 0x9e, 0xce, 0x91, 0xa1, 0x37, 0x54, 0xf8, 0x9c, 0xe4, 0x79, 0xca, 0x1f, 0xff, 0xd0, 0x71, 0xbc, 0xf7, 0xce, 0x5d, 0xec, 0xee, 0xd6, 0x70, 0x7c, 0x97, 0xe3, 0x33, 0x3f, 0x7d, 0x03, 0xb6, 0xb6, 0x2b, 0xd2, 0x11, 0x9a, 0xfc, 0x62, 0x04, 0xa1, 0x42, 0xef, 0xa7, 0x7e, 0x70, 0x88, 0x71, 0x38, 0x91, 0x21, 0x70, 0xac, 0x0a, 0x39, 0xdc, 0x43, 0x18, 0x86, 0x78, 0xfc, 0xa9, 0x3e, 0x1c, 0xee, 0xa8, 0x50, 0x3a, 0x83, 0xeb, 0xe6, 0xe1, 0xb6, 0xe3, 0xaa, 0xaa, 0x37, 0xa6, 0xf9, 0x7b, 0x10, 0x53, 0x55, 0x8c, 0xd1, 0xc5, 0x1b, 0x17, 0xaf, 0xbc, 0x32, 0xc6, 0xd7, 0xbf, 0x33, 0xc1, 0x30, 0x54, 0x61, 0x3b, 0xf2, 0x96, 0x25, 0xa1, 0x5b, 0x90, 0x92, 0x44, 0xb5, 0xf6, 0x78, 0x38, 0x73, 0x36, 0xc2, 0x9f, 0x3f, 0x08, 0x0c, 0xc6, 0xaa, 0x78, 0x23, 0x32, 0x10, 0x26, 0x10, 0x85, 0x1d, 0x64, 0xd9, 0x04, 0xcc, 0xd3, 0x29, 0x05, 0xe5, 0x14, 0xa3, 0x99, 0x96, 0x1f, 0x01, 0xe3, 0x44, 0x75, 0x18, 0x7e, 0xeb, 0x75, 0x79, 0xa5, 0x7b, 0x1c, 0x8e, 0xf1, 0xca, 0x61, 0xe7, 0x48, 0x37, 0x39, 0x01, 0xc5, 0xbf, 0xfa, 0xb3, 0x6f, 0xa2, 0xd1, 0x1b, 0xc1, 0xf1, 0x3c, 0x54, 0x37, 0x36, 0x71, 0xec, 0x86, 0x9b, 0x97, 0xee, 0x67, 0xa9, 0xdf, 0x12, 0x5d, 0x59, 0x5d, 0x7b, 0x53, 0xa1, 0x77, 0xe5, 0x32, 0xb9, 0xc9, 0x0b, 0x0d, 0xbd, 0x47, 0xaa, 0x92, 0x7e, 0xd9, 0x42, 0xef, 0xf3, 0xe4, 0x29, 0xed, 0xd0, 0xdb, 0xb8, 0xcc, 0x4b, 0x0e, 0xbd, 0x03, 0x1f, 0x39, 0x2c, 0x3d, 0x13, 0x56, 0xfb, 0x81, 0x87, 0x0f, 0xde, 0xbb, 0x8d, 0x5f, 0xf9, 0xc5, 0xdb, 0xf1, 0xdf, 0xfe, 0xdc, 0x6d, 0xd8, 0x5a, 0xa3, 0x56, 0xb1, 0x47, 0x57, 0xae, 0x1d, 0x13, 0x26, 0xbf, 0x76, 0x38, 0x91, 0xab, 0xc9, 0xb2, 0x4c, 0x01, 0x4c, 0xb6, 0xea, 0x38, 0xae, 0x87, 0x33, 0x67, 0xba, 0x18, 0x8f, 0x27, 0x26, 0xaf, 0x29, 0x30, 0x81, 0xc3, 0xf3, 0x42, 0x4e, 0x0e, 0xe9, 0x0c, 0xae, 0xcb, 0x16, 0x14, 0x7b, 0xa6, 0x08, 0x2a, 0xaa, 0x92, 0xae, 0xf2, 0x88, 0x49, 0x1c, 0xab, 0xaa, 0xba, 0x55, 0xbc, 0x71, 0x3d, 0xd5, 0x37, 0x29, 0xb5, 0xec, 0x77, 0x94, 0x5b, 0xcd, 0xa3, 0x71, 0x17, 0x59, 0x96, 0x14, 0xc3, 0x70, 0x97, 0x9b, 0xaa, 0xb7, 0x63, 0x85, 0xde, 0x76, 0x18, 0xce, 0x5c, 0x1f, 0x49, 0x24, 0x61, 0x79, 0xd3, 0x0d, 0xc5, 0xbe, 0xc9, 0x67, 0xce, 0x2c, 0xce, 0x53, 0x46, 0x51, 0x84, 0x7f, 0xf3, 0xe0, 0xf7, 0x50, 0x1f, 0xc4, 0x98, 0x24, 0x09, 0x6a, 0xdb, 0xbb, 0xb8, 0xe1, 0x7d, 0x1f, 0xc0, 0xb8, 0xd7, 0x03, 0x01, 0x41, 0x65, 0x75, 0x6d, 0xa9, 0x97, 0xfa, 0xb2, 0xea, 0x37, 0x06, 0x6a, 0xe7, 0x3c, 0x79, 0x4a, 0x32, 0x07, 0xbf, 0x71, 0xef, 0x68, 0x40, 0x12, 0xf2, 0xe6, 0x43, 0xef, 0x45, 0x2d, 0x42, 0x97, 0x14, 0x7a, 0x53, 0x52, 0x00, 0xe4, 0xea, 0xd6, 0x85, 0x55, 0xbd, 0x2f, 0x16, 0x96, 0x14, 0x22, 0x03, 0xf7, 0x7d, 0x53, 0xc8, 0x91, 0x95, 0xeb, 0xa8, 0x50, 0x01, 0x97, 0xcf, 0x3d, 0xd9, 0xda, 0x23, 0xa6, 0xca, 0x35, 0x8e, 0x00, 0x22, 0xf3, 0x94, 0x9d, 0xce, 0x00, 0x51, 0x28, 0xe1, 0x97, 0x68, 0x37, 0xe9, 0xb9, 0xb2, 0xff, 0x52, 0x08, 0x38, 0x9c, 0xe3, 0xe0, 0x60, 0x90, 0xf7, 0x59, 0xc6, 0x11, 0x90, 0x4d, 0x4d, 0x0f, 0xa5, 0x6c, 0xff, 0xc9, 0x1d, 0xad, 0x33, 0xdb, 0x22, 0x14, 0x85, 0xd8, 0x5e, 0xcf, 0xf0, 0xb3, 0x3f, 0xe9, 0x61, 0x67, 0x23, 0x06, 0x25, 0xba, 0x3f, 0x52, 0xb6, 0xf9, 0x18, 0x70, 0x42, 0xc0, 0x71, 0x3c, 0x4c, 0xd3, 0x18, 0xbb, 0xdb, 0xc0, 0xa7, 0x3f, 0xe9, 0xc0, 0x77, 0x07, 0x98, 0x4c, 0xe5, 0xc4, 0x50, 0x1a, 0xc7, 0x00, 0xc9, 0xa1, 0x68, 0x1c, 0x64, 0x9c, 0xe4, 0xb9, 0x49, 0xfd, 0x7c, 0xae, 0xa8, 0x13, 0xe3, 0xc4, 0x31, 0xd9, 0x2e, 0xa4, 0x61, 0xf9, 0xfc, 0x41, 0x77, 0xce, 0x4d, 0x66, 0x02, 0xf8, 0xc3, 0x6f, 0x3f, 0x8d, 0x67, 0x5e, 0x79, 0x1d, 0x00, 0xb0, 0xb6, 0xb3, 0x87, 0xed, 0xab, 0xaf, 0x05, 0x21, 0x64, 0xe9, 0x7e, 0x96, 0xfa, 0x9d, 0xd1, 0x84, 0x5c, 0x82, 0x9b, 0x24, 0xd2, 0x11, 0x76, 0x3b, 0xf2, 0x75, 0x66, 0xcf, 0x68, 0x47, 0x3b, 0x5b, 0xf5, 0xee, 0x2e, 0x70, 0x90, 0xeb, 0x6f, 0x53, 0xd5, 0x9b, 0x92, 0xb9, 0xaa, 0xb7, 0x06, 0xe7, 0xc5, 0xc2, 0x92, 0x7c, 0xeb, 0xf1, 0xdf, 0x11, 0xdc, 0xf7, 0xb1, 0x52, 0xde, 0x53, 0x6b, 0xd6, 0x3c, 0x35, 0x5e, 0x38, 0x96, 0xdb, 0x82, 0xd4, 0xe8, 0xa0, 0xcc, 0x1d, 0xce, 0xe8, 0x70, 0x0c, 0xc7, 0x63, 0x68, 0xb6, 0x63, 0x7c, 0xf1, 0x2f, 0x5f, 0x81, 0xe3, 0x79, 0xc8, 0xb2, 0x4c, 0x8d, 0x35, 0x7a, 0x10, 0x98, 0x22, 0x09, 0x23, 0x38, 0x9e, 0x8b, 0x7b, 0xef, 0x0e, 0x70, 0xf5, 0x31, 0x09, 0x3e, 0x64, 0x99, 0x1a, 0x6b, 0x64, 0x6a, 0xd1, 0xc5, 0x58, 0x3d, 0x2f, 0xae, 0x4d, 0xb3, 0x17, 0x5d, 0xa4, 0x49, 0x08, 0x57, 0xe5, 0x14, 0xc7, 0xe3, 0x18, 0xcd, 0xae, 0x8b, 0xfe, 0x40, 0x60, 0xd0, 0x4f, 0x90, 0xc1, 0x83, 0xeb, 0x08, 0x50, 0x44, 0x58, 0x5f, 0xe7, 0xd8, 0xde, 0x14, 0x40, 0x36, 0x02, 0x65, 0x42, 0x2d, 0xd8, 0x88, 0xc1, 0x5c, 0x6e, 0x6d, 0x11, 0xe2, 0xf9, 0x4c, 0xb7, 0x2b, 0x5f, 0x73, 0x12, 0xc7, 0x2a, 0x67, 0x99, 0xe7, 0x29, 0xa7, 0xd3, 0xe2, 0x99, 0x34, 0x8e, 0xf1, 0xff, 0x7d, 0x9e, 0xe3, 0xcc, 0x6b, 0x32, 0x4f, 0xc9, 0xb9, 0x8f, 0xdf, 0xfa, 0xd5, 0x4f, 0x82, 0x4c, 0x27, 0x6a, 0x1c, 0x51, 0xe0, 0x0f, 0xbf, 0xf6, 0x38, 0x4e, 0x9e, 0xda, 0x37, 0x93, 0x41, 0xb7, 0x7f, 0xe4, 0x63, 0x60, 0x8e, 0xb3, 0xcc, 0xa5, 0x2d, 0xf5, 0xdb, 0xaf, 0x6b, 0x97, 0x63, 0x94, 0xd1, 0x5a, 0xbf, 0xd6, 0xeb, 0x5a, 0x2b, 0xda, 0xf2, 0x4d, 0x43, 0x85, 0x91, 0xc5, 0x4e, 0x1b, 0xd5, 0xf3, 0xac, 0x5c, 0xbb, 0x98, 0x2d, 0x42, 0x72, 0x06, 0xfc, 0x3c, 0x8b, 0x31, 0x28, 0xb3, 0x76, 0x52, 0x12, 0xf4, 0xdb, 0x2d, 0xb5, 0x93, 0x52, 0x8f, 0x2f, 0xee, 0x81, 0x52, 0x8a, 0x6e, 0xb3, 0x8e, 0xf5, 0xdd, 0xe3, 0x17, 0x35, 0xeb, 0x4d, 0xb9, 0xaf, 0x42, 0x6f, 0x21, 0x7b, 0x10, 0x13, 0xdd, 0xaa, 0x63, 0xbb, 0x49, 0x4f, 0x3a, 0x45, 0x1d, 0x9e, 0x27, 0x89, 0x6a, 0x0b, 0xe2, 0xae, 0xba, 0xae, 0x21, 0x83, 0xc3, 0xb9, 0xe9, 0xc5, 0x74, 0x54, 0x08, 0xaf, 0x9d, 0x65, 0x1a, 0x87, 0xa0, 0x64, 0xa6, 0x6f, 0xd2, 0x65, 0xc5, 0x76, 0xa1, 0x68, 0xac, 0xfa, 0x2c, 0x99, 0x19, 0x47, 0xd4, 0x6e, 0x12, 0x44, 0xc0, 0xf5, 0x7c, 0x93, 0x9b, 0x2c, 0x95, 0x3c, 0xec, 0x6d, 0xc4, 0xb8, 0xf5, 0x46, 0xe0, 0x47, 0xde, 0xe7, 0xe1, 0xfd, 0x77, 0xc4, 0xb8, 0xe7, 0x4e, 0xe0, 0xbd, 0x77, 0x72, 0xec, 0x6d, 0x86, 0x70, 0x58, 0x0c, 0x4a, 0xa7, 0x48, 0xe2, 0xb1, 0x74, 0x84, 0xae, 0x6a, 0xed, 0x51, 0xee, 0x50, 0xb7, 0xf9, 0x68, 0xa7, 0x48, 0x40, 0x4c, 0xce, 0xb2, 0xe0, 0x2c, 0x05, 0xf2, 0xe7, 0x42, 0x9e, 0xd9, 0xdb, 0xcc, 0x43, 0xef, 0x38, 0x8e, 0x70, 0xae, 0x3d, 0x30, 0xfd, 0x94, 0x5f, 0xfe, 0xfe, 0x29, 0x9c, 0x7c, 0x69, 0x1f, 0x69, 0x12, 0xc3, 0x0b, 0x02, 0xdc, 0x72, 0xdf, 0xfd, 0x88, 0x46, 0xc3, 0xa5, 0xb3, 0x59, 0xea, 0xb7, 0xdf, 0x41, 0xd6, 0xd6, 0xe6, 0xc2, 0xed, 0xd9, 0x90, 0xb9, 0x5c, 0x5b, 0xcf, 0xf5, 0x5a, 0xae, 0x2b, 0x6b, 0x47, 0xbb, 0xc9, 0x45, 0x21, 0xb9, 0x74, 0x90, 0xd2, 0x29, 0x56, 0x67, 0x43, 0xec, 0xee, 0xe2, 0xdc, 0xe4, 0xa8, 0xdb, 0x96, 0xa9, 0x83, 0xf5, 0xcd, 0x23, 0x43, 0xef, 0x61, 0xbb, 0x05, 0x10, 0x52, 0x74, 0x93, 0x9b, 0x5b, 0x47, 0x54, 0xbd, 0xa5, 0x9b, 0x24, 0x84, 0x9a, 0xd0, 0x5b, 0xea, 0xcb, 0x15, 0x7a, 0x43, 0x87, 0xde, 0x12, 0x5a, 0x1e, 0xf7, 0x24, 0x14, 0x55, 0x91, 0x26, 0x89, 0x54, 0xa3, 0xb8, 0xe9, 0xb3, 0x9c, 0xc2, 0xd3, 0x7d, 0x93, 0x0a, 0xa8, 0xdc, 0x49, 0x40, 0xd4, 0x04, 0x8f, 0x3c, 0xaf, 0xc3, 0xf6, 0x7c, 0xa2, 0x25, 0x70, 0x53, 0xd5, 0x16, 0x24, 0x1b, 0xbc, 0x09, 0x51, 0xcd, 0xea, 0x91, 0x6a, 0x4a, 0xe7, 0xae, 0x02, 0xa7, 0x80, 0xc7, 0x35, 0x2c, 0x85, 0x9a, 0xfe, 0x51, 0x6d, 0x3e, 0xdc, 0x57, 0xd0, 0xca, 0xc7, 0x14, 0x75, 0x3e, 0x32, 0x49, 0x22, 0x64, 0xd9, 0x04, 0xa0, 0x19, 0x92, 0xb0, 0xaf, 0x72, 0x8d, 0x7e, 0x61, 0x2e, 0x3b, 0x89, 0x63, 0x40, 0x10, 0x53, 0xbc, 0x11, 0x42, 0x02, 0x2f, 0xd1, 0x50, 0x74, 0x39, 0x26, 0x2a, 0xdc, 0x76, 0x39, 0x47, 0x62, 0x15, 0x72, 0xa4, 0x26, 0xd8, 0xdd, 0xc9, 0x41, 0xeb, 0x7a, 0x1c, 0xe7, 0x1a, 0x6d, 0x35, 0x9a, 0x78, 0x80, 0x2f, 0x3c, 0xfc, 0x94, 0x1c, 0x4d, 0xac, 0xae, 0xe0, 0xf8, 0x4d, 0xb7, 0xc0, 0x0b, 0x02, 0xf9, 0x81, 0xea, 0x5b, 0x1f, 0xde, 0xa5, 0x5e, 0xea, 0xb7, 0x5a, 0x2f, 0xc8, 0x47, 0xce, 0x87, 0xdb, 0xdd, 0xb9, 0xf0, 0xf9, 0x8d, 0x72, 0x93, 0xb3, 0x5f, 0x6b, 0x83, 0xb0, 0xba, 0xb6, 0x61, 0x85, 0xd8, 0x1b, 0xf3, 0x85, 0x1c, 0x72, 0x9e, 0x42, 0xce, 0xc6, 0x26, 0x06, 0x9d, 0x36, 0x08, 0x21, 0x58, 0xd9, 0xd8, 0xc4, 0xa0, 0xd3, 0x02, 0xb1, 0x00, 0x49, 0x40, 0x50, 0xdd, 0xdc, 0x32, 0x40, 0xb5, 0x43, 0x6f, 0x59, 0xb0, 0x69, 0x58, 0x7d, 0x93, 0x75, 0x33, 0xb2, 0x68, 0xc6, 0x17, 0x77, 0x76, 0xd1, 0xad, 0x1f, 0x82, 0x10, 0x72, 0x09, 0x0d, 0xe7, 0xe3, 0xa1, 0x95, 0x83, 0x0c, 0x73, 0x28, 0x2a, 0xd7, 0xe8, 0xf1, 0x62, 0x63, 0x79, 0xa2, 0x7b, 0x1f, 0xb9, 0xa7, 0xaa, 0xd5, 0x19, 0x4a, 0x65, 0x1f, 0xab, 0x95, 0xa9, 0x1a, 0x77, 0xf4, 0x90, 0x46, 0x91, 0x72, 0x72, 0x72, 0xc1, 0x06, 0xf7, 0x04, 0x76, 0x77, 0x65, 0xf3, 0xb6, 0x1c, 0x53, 0xf4, 0x8a, 0x33, 0xe0, 0x49, 0xa8, 0x72, 0x99, 0xae, 0x71, 0xab, 0x7a, 0xaa, 0x46, 0x02, 0x92, 0x9b, 0xd1, 0x4a, 0xd9, 0x88, 0x9e, 0x00, 0x20, 0xaa, 0x18, 0x23, 0xc1, 0x4c, 0x1d, 0x8a, 0x78, 0xdc, 0x95, 0x4d, 0xe9, 0x33, 0x39, 0xc8, 0x44, 0xb9, 0x49, 0xed, 0xfc, 0x6c, 0xd7, 0x28, 0x0c, 0x44, 0xd5, 0xb8, 0xe3, 0x5c, 0xfe, 0x52, 0xf5, 0x53, 0xba, 0x12, 0xae, 0xeb, 0x35, 0x02, 0xc7, 0xf3, 0x0d, 0x2c, 0xdb, 0x61, 0x8a, 0xef, 0xbd, 0x78, 0x06, 0x7f, 0xfc, 0x1d, 0x35, 0x9a, 0x38, 0x99, 0xe0, 0xba, 0xbb, 0xdf, 0x8f, 0xb5, 0xdd, 0xe3, 0x8b, 0x13, 0xe8, 0x4b, 0xbd, 0xd4, 0x6f, 0x93, 0x26, 0x44, 0x02, 0xb2, 0x08, 0xbf, 0x6e, 0xb1, 0x78, 0x63, 0xe5, 0x1d, 0x8b, 0x8e, 0xf3, 0xd2, 0xdc, 0x64, 0x75, 0x7d, 0x63, 0xce, 0x4d, 0x12, 0x42, 0x14, 0x44, 0x2f, 0xbc, 0x90, 0xb3, 0xb2, 0xb9, 0xb5, 0xb0, 0x87, 0x72, 0x75, 0x6b, 0xbb, 0xe0, 0x32, 0x07, 0xd6, 0xf3, 0x62, 0xd5, 0xbb, 0x71, 0x99, 0x66, 0xbd, 0x4d, 0xd5, 0x5b, 0xc0, 0xb3, 0xc3, 0x6d, 0x57, 0x3a, 0x4b, 0xa1, 0xab, 0xe1, 0xaa, 0x2a, 0x6d, 0xce, 0x88, 0xa9, 0x82, 0xa2, 0x2c, 0xf0, 0xdc, 0x71, 0x7b, 0x0d, 0x69, 0xa4, 0x80, 0x67, 0xce, 0xcb, 0x22, 0xc7, 0xb5, 0x57, 0x08, 0x50, 0x2a, 0xa1, 0x3b, 0x89, 0x43, 0x80, 0x4c, 0xf3, 0x71, 0x47, 0xdd, 0x70, 0xae, 0x5a, 0x87, 0x3c, 0xcf, 0x51, 0x8e, 0x56, 0x85, 0xed, 0x1a, 0x72, 0x3e, 0x97, 0xe0, 0x24, 0xc4, 0x72, 0x93, 0x02, 0xcc, 0x71, 0x10, 0x8f, 0x7b, 0x98, 0x4e, 0x64, 0x5e, 0xd4, 0x54, 0xae, 0x39, 0x47, 0x12, 0xc5, 0x00, 0x21, 0xb9, 0x6b, 0x24, 0x1a, 0x84, 0xc9, 0x5c, 0x75, 0xdb, 0xe5, 0xc5, 0x0a, 0x78, 0x62, 0x36, 0x10, 0xd9, 0x15, 0x70, 0x8e, 0xd5, 0xb2, 0x86, 0xa8, 0x8f, 0x49, 0x92, 0xe0, 0xc5, 0x73, 0x2d, 0xfc, 0xbb, 0x6f, 0x3d, 0x8d, 0x24, 0x8e, 0x40, 0x28, 0xc5, 0x2d, 0x3f, 0xfa, 0x61, 0x10, 0xc0, 0x7c, 0x48, 0x97, 0xbf, 0xb8, 0x4b, 0xfd, 0x76, 0x43, 0xd1, 0x7c, 0xf6, 0xba, 0xe7, 0x01, 0xe4, 0x91, 0xe1, 0xb6, 0x0c, 0xc9, 0xc7, 0xda, 0x65, 0xaa, 0x33, 0x39, 0x44, 0x2f, 0xc2, 0x4d, 0xce, 0x84, 0xde, 0xd5, 0xf5, 0x4d, 0x39, 0x57, 0xae, 0x5d, 0xe3, 0x91, 0xb0, 0x6c, 0xcd, 0x15, 0x72, 0x56, 0x37, 0xb7, 0xd1, 0xb7, 0x20, 0xda, 0x6f, 0x36, 0xa4, 0x13, 0xb5, 0x66, 0xbd, 0x6d, 0x37, 0xb9, 0xba, 0xad, 0x42, 0x6f, 0x4a, 0x2f, 0x43, 0xe8, 0x1d, 0xf8, 0x96, 0x9b, 0xf4, 0x54, 0xd5, 0xdb, 0x72, 0x93, 0x28, 0xba, 0xc9, 0x3c, 0xac, 0xce, 0x73, 0x99, 0x57, 0xec, 0x79, 0xb8, 0xe9, 0xa6, 0x15, 0x35, 0x7f, 0xad, 0x5a, 0x75, 0xe2, 0x10, 0x5b, 0x9b, 0x0c, 0xef, 0x79, 0x4f, 0x45, 0xb5, 0x05, 0xa9, 0x8a, 0x79, 0xa4, 0xdd, 0xa4, 0xbd, 0xa2, 0x2d, 0x07, 0xa7, 0xcb, 0x5d, 0xa4, 0xa9, 0x84, 0xa2, 0xec, 0x6b, 0x8c, 0xf2, 0x16, 0x9e, 0x24, 0xef, 0xa1, 0x4c, 0xa2, 0x31, 0xa6, 0xd3, 0x08, 0xd4, 0x25, 0x12, 0x66, 0x04, 0x70, 0x55, 0x78, 0x8e, 0x42, 0x1b, 0x11, 0xb1, 0x46, 0x31, 0x55, 0xce, 0x72, 0xa6, 0xd2, 0xad, 0x73, 0x99, 0xf9, 0x5a, 0x39, 0x6e, 0xc2, 0x76, 0xa6, 0x43, 0x75, 0x02, 0x54, 0x56, 0x38, 0x48, 0x96, 0x3b, 0xce, 0x17, 0x5f, 0x3b, 0xc0, 0x24, 0x13, 0x70, 0x3c, 0x1f, 0x3b, 0x57, 0x5f, 0x8b, 0xea, 0xc6, 0xe6, 0x5c, 0xeb, 0xc4, 0xf8, 0x88, 0x0f, 0xf2, 0x52, 0x2f, 0xf5, 0xe5, 0xd2, 0xe7, 0x0f, 0x93, 0x17, 0x00, 0x52, 0x57, 0xab, 0xd7, 0x6c, 0xa7, 0xb8, 0x8e, 0x51, 0xb7, 0x2b, 0x3b, 0x34, 0xec, 0x8a, 0xf6, 0xda, 0x4c, 0x1b, 0x51, 0x2f, 0x87, 0xe5, 0xc8, 0xc0, 0xd2, 0x02, 0xe7, 0xac, 0x9b, 0xec, 0xbe, 0x81, 0x9b, 0xdc, 0xd8, 0x34, 0x8e, 0x53, 0xea, 0x62, 0xe8, 0x0d, 0x22, 0x5b, 0x81, 0x06, 0x73, 0x80, 0xa4, 0x58, 0x29, 0xb4, 0x05, 0xed, 0xa2, 0xd7, 0x6a, 0xcc, 0xf5, 0x50, 0xca, 0xd0, 0xfb, 0x72, 0xcc, 0x7a, 0x2b, 0x68, 0xe5, 0x21, 0xb6, 0x93, 0x43, 0xd1, 0x5a, 0x56, 0xa1, 0x73, 0x93, 0x10, 0x53, 0x05, 0x51, 0x55, 0xf8, 0xf1, 0x65, 0xbb, 0xd0, 0x07, 0xde, 0x57, 0xc1, 0x7d, 0x3f, 0xb2, 0x86, 0x95, 0x52, 0x8a, 0xda, 0x0a, 0xc5, 0xdd, 0xef, 0x59, 0xc1, 0x47, 0x3f, 0x40, 0xe1, 0x50, 0x15, 0x62, 0xc7, 0x21, 0x08, 0xa4, 0x9b, 0x4c, 0xa2, 0x71, 0xa1, 0x15, 0x88, 0xe8, 0xbe, 0x49, 0x05, 0x42, 0xcf, 0xe3, 0xf9, 0x7a, 0x37, 0xe3, 0xfc, 0xe4, 0x22, 0x8a, 0x49, 0x2c, 0x47, 0x10, 0xa9, 0x93, 0xcd, 0xcd, 0x68, 0x03, 0x80, 0xa7, 0x73, 0x99, 0xea, 0x6b, 0x27, 0x33, 0xe1, 0x36, 0xc1, 0xd1, 0xce, 0x52, 0xc2, 0x38, 0x81, 0xd0, 0xb9, 0xcc, 0xb9, 0xa2, 0x0e, 0x50, 0xaa, 0xe6, 0x79, 0x4a, 0xa6, 0x0a, 0x45, 0x27, 0x6e, 0xb9, 0x1d, 0xc7, 0x6f, 0xbc, 0xd5, 0xfa, 0x60, 0xae, 0x2f, 0xf5, 0x52, 0xbf, 0x0b, 0xb4, 0x15, 0x62, 0x1f, 0x09, 0xc8, 0x35, 0x03, 0xc8, 0xa3, 0xc3, 0x6d, 0xed, 0x2c, 0x89, 0xec, 0x9b, 0xec, 0x75, 0x2c, 0xd7, 0xd8, 0x9e, 0x03, 0xe7, 0x51, 0xb9, 0xc9, 0x0b, 0x76, 0x93, 0xad, 0xa6, 0xca, 0x59, 0x6e, 0x15, 0xdb, 0x82, 0x5a, 0xd2, 0x41, 0xca, 0xbe, 0xc9, 0xbc, 0x90, 0x63, 0x87, 0xde, 0x79, 0x51, 0x67, 0x07, 0x7d, 0xab, 0x2d, 0xe8, 0x52, 0x5a, 0x84, 0x0a, 0xa1, 0xb7, 0x9d, 0x3b, 0xf4, 0xb8, 0x67, 0x4d, 0xea, 0xc8, 0x05, 0x12, 0xc2, 0xee, 0xa7, 0x9c, 0xe9, 0xad, 0x74, 0x7d, 0x0f, 0x69, 0x34, 0xc2, 0x0d, 0xd7, 0xb9, 0xf8, 0xf4, 0xa7, 0xd6, 0xf1, 0x77, 0xee, 0x77, 0x70, 0xd7, 0xed, 0x2e, 0xfc, 0xc0, 0x2d, 0x34, 0x90, 0x27, 0xd1, 0x38, 0x6f, 0x32, 0x8f, 0xc7, 0x0a, 0x90, 0x6a, 0x52, 0xc7, 0xee, 0x71, 0x24, 0x80, 0xe7, 0xfb, 0x06, 0x90, 0x1a, 0x60, 0x72, 0x85, 0x1a, 0x41, 0x14, 0x76, 0x91, 0x89, 0x4c, 0x3a, 0xc8, 0x28, 0x5e, 0x30, 0xaf, 0xed, 0xcf, 0x4c, 0xde, 0x24, 0x79, 0x91, 0xc6, 0x0a, 0xab, 0x27, 0xda, 0x41, 0xf2, 0xf9, 0xaa, 0xb7, 0x80, 0xcc, 0x47, 0x26, 0x91, 0x9e, 0xf8, 0x91, 0xcf, 0xb9, 0x57, 0xac, 0x9e, 0x5f, 0x71, 0xcb, 0xed, 0x66, 0xbc, 0xab, 0x7c, 0x19, 0x27, 0x1e, 0x96, 0x7a, 0xa9, 0x2f, 0x5a, 0x6b, 0x28, 0x6a, 0x40, 0x5a, 0x21, 0xf6, 0x3c, 0x20, 0x69, 0x11, 0x90, 0x6f, 0x14, 0x6e, 0x13, 0x82, 0x8a, 0x06, 0xa7, 0xf5, 0x5c, 0x83, 0x76, 0xd8, 0xed, 0xc8, 0x8a, 0xf6, 0x4c, 0x6e, 0x72, 0xd4, 0x6d, 0x5f, 0xb8, 0x9b, 0xb4, 0x72, 0x93, 0xda, 0x4d, 0x12, 0x42, 0x94, 0x83, 0x6c, 0x14, 0x72, 0x93, 0x3a, 0xf4, 0x96, 0x95, 0x6e, 0x62, 0x96, 0x61, 0x10, 0x4a, 0xd5, 0x44, 0xce, 0xa5, 0x15, 0x72, 0x54, 0xe8, 0x3d, 0x05, 0x0f, 0x78, 0x1e, 0x0e, 0xdb, 0x21, 0xb6, 0xb5, 0xcd, 0xc7, 0xd3, 0x21, 0xb3, 0xc8, 0xe0, 0x71, 0xae, 0x42, 0x75, 0xbd, 0xab, 0x52, 0xe6, 0x26, 0x25, 0x2c, 0xc7, 0xf9, 0x46, 0x21, 0x03, 0x57, 0xe9, 0x56, 0x09, 0x32, 0x78, 0x7e, 0x5e, 0x04, 0xd2, 0x1b, 0x7c, 0xe4, 0xa2, 0x5e, 0x6e, 0x8a, 0x37, 0xa6, 0x7a, 0xae, 0x5a, 0x96, 0x26, 0x49, 0x22, 0x5b, 0x84, 0x5c, 0x17, 0xd1, 0xa8, 0x87, 0xe9, 0x24, 0x52, 0xed, 0x42, 0x3a, 0xc4, 0xf6, 0x0d, 0xfc, 0xec, 0x42, 0x8e, 0xeb, 0xf9, 0xb2, 0x90, 0x63, 0x1c, 0x67, 0xee, 0x14, 0x93, 0x28, 0x06, 0x51, 0x39, 0xcb, 0x44, 0x3d, 0x77, 0xbd, 0x99, 0x26, 0xf3, 0x24, 0x46, 0x96, 0x69, 0x88, 0x26, 0x66, 0x49, 0x06, 0x15, 0xaa, 0x71, 0x9d, 0x73, 0x4c, 0xd2, 0x04, 0xc7, 0x6f, 0xbc, 0x79, 0xf1, 0x5f, 0xee, 0xa5, 0x5e, 0xea, 0x77, 0x4a, 0xcf, 0x4c, 0xd2, 0x2c, 0x0e, 0xb1, 0x8f, 0x06, 0xa4, 0x0c, 0xb7, 0xbb, 0x47, 0x86, 0xdb, 0x84, 0x90, 0xbc, 0x78, 0x43, 0x88, 0x0c, 0xb7, 0xb5, 0xd6, 0x39, 0x4b, 0xa2, 0xc3, 0x70, 0xab, 0x2d, 0xc8, 0x76, 0x93, 0x1a, 0x90, 0xe7, 0x73, 0x93, 0x76, 0xa5, 0xbb, 0x50, 0xc8, 0x69, 0xa9, 0x90, 0xdc, 0x72, 0x90, 0x3b, 0xc5, 0xc6, 0x72, 0xd3, 0x16, 0xb4, 0xbb, 0x77, 0x39, 0x42, 0xef, 0x91, 0xda, 0x25, 0x99, 0x8f, 0x26, 0x1a, 0x40, 0xea, 0xbe, 0x49, 0xdd, 0x0a, 0xe4, 0xbb, 0x96, 0x9b, 0x74, 0xf3, 0x19, 0x6d, 0x3d, 0xa9, 0xa3, 0xf3, 0x97, 0x3a, 0xef, 0xe8, 0xe7, 0x2d, 0x3f, 0x72, 0x7b, 0xb9, 0x5c, 0xc5, 0xe6, 0xfa, 0x9e, 0xcc, 0x4d, 0x12, 0x09, 0x4e, 0x99, 0x0b, 0x24, 0x06, 0x66, 0x12, 0x96, 0xbe, 0x1c, 0x59, 0x54, 0x2e, 0x33, 0x8e, 0x42, 0x64, 0x99, 0xbc, 0x02, 0x37, 0x1f, 0x23, 0xf4, 0xd5, 0x44, 0x0e, 0x0a, 0xce, 0xd2, 0x2e, 0xc6, 0xb8, 0x3c, 0x1f, 0x41, 0x34, 0x45, 0x1d, 0xf5, 0xbd, 0x92, 0xb8, 0xe8, 0x44, 0x33, 0x90, 0x62, 0x35, 0xdc, 0x9a, 0xf5, 0x96, 0x21, 0x76, 0x82, 0x4c, 0x10, 0x94, 0x2b, 0x3e, 0x26, 0x71, 0xbe, 0x21, 0x68, 0xf6, 0xc3, 0xb8, 0xd4, 0x4b, 0xfd, 0x6e, 0xd2, 0x79, 0x7e, 0x71, 0x5d, 0x8e, 0x3e, 0xce, 0x86, 0xd8, 0x73, 0x80, 0x2c, 0xe6, 0x23, 0x8d, 0x53, 0xec, 0xe5, 0xae, 0x71, 0x64, 0x15, 0x6f, 0x8c, 0x5b, 0x5d, 0xdf, 0xc8, 0x8b, 0x37, 0xeb, 0xb6, 0x8b, 0x9d, 0xe9, 0x9b, 0xb4, 0x2a, 0xe3, 0x83, 0x76, 0xeb, 0x68, 0x37, 0x69, 0xe5, 0x26, 0xb5, 0x9b, 0x2c, 0xf4, 0x53, 0x36, 0x1b, 0x96, 0x83, 0xcc, 0x0b, 0x39, 0xa6, 0xd2, 0xbd, 0x93, 0x87, 0xdb, 0x6b, 0x3b, 0xc7, 0x2e, 0x75, 0xcd, 0x9a, 0x6e, 0x38, 0xd7, 0x50, 0xb4, 0x46, 0x16, 0x6d, 0x10, 0x2a, 0xa7, 0x28, 0xef, 0xd4, 0x19, 0xc9, 0x3c, 0xa5, 0x9f, 0x57, 0xbd, 0xed, 0xca, 0xb8, 0xeb, 0x59, 0x3b, 0x26, 0xb9, 0x27, 0x61, 0x49, 0xa6, 0x4a, 0xab, 0xf6, 0x1f, 0xee, 0xa8, 0xe2, 0x8d, 0x72, 0xa5, 0x89, 0x72, 0x93, 0xbe, 0x86, 0x25, 0x4c, 0x1b, 0x8e, 0x40, 0x0a, 0xe6, 0x64, 0x88, 0xc6, 0xc3, 0x79, 0xd7, 0xc8, 0x7d, 0x73, 0x8d, 0x83, 0xe3, 0xfb, 0xe8, 0x75, 0x63, 0xc4, 0x09, 0xe0, 0xf1, 0x1c, 0x72, 0x12, 0xba, 0xaa, 0xd8, 0xe3, 0xe9, 0x71, 0xc7, 0xdc, 0x59, 0xa2, 0x50, 0xd4, 0x21, 0x60, 0x9e, 0x84, 0xae, 0x69, 0x1d, 0x52, 0xa0, 0x65, 0xd6, 0xf2, 0x0c, 0x97, 0x4b, 0x70, 0x12, 0xa8, 0xf1, 0xb0, 0xb9, 0xfc, 0xd0, 0x32, 0x0c, 0x5c, 0xea, 0x77, 0x42, 0xcf, 0xe7, 0x29, 0x2b, 0x6b, 0x1b, 0x18, 0xf7, 0x66, 0x8a, 0x34, 0xe7, 0x05, 0xe4, 0x7a, 0x0e, 0x48, 0x2b, 0x1f, 0xa9, 0x9d, 0x22, 0xd1, 0xd5, 0xed, 0xa3, 0xc2, 0x6d, 0x5d, 0xbc, 0xb1, 0x74, 0x75, 0x6d, 0x06, 0x90, 0x0b, 0xfa, 0x26, 0xb5, 0x83, 0x3c, 0x2a, 0x37, 0x39, 0xeb, 0x26, 0x0b, 0xf3, 0xdd, 0x3b, 0x3b, 0x0b, 0x7b, 0x2b, 0x0b, 0xfd, 0x94, 0x97, 0xb4, 0x66, 0xed, 0x87, 0xff, 0x5c, 0x40, 0x4c, 0xe1, 0xbb, 0xdb, 0x66, 0xcd, 0x5a, 0x12, 0x85, 0x70, 0x3d, 0xb5, 0x42, 0x2d, 0x0e, 0xe5, 0x28, 0x23, 0xa6, 0x48, 0xa2, 0x31, 0x3c, 0x4f, 0x8e, 0x26, 0x9a, 0x51, 0x46, 0x21, 0x97, 0xde, 0x6a, 0x9d, 0x46, 0x43, 0x38, 0xdc, 0x83, 0x10, 0x13, 0x24, 0xd1, 0x18, 0xae, 0xba, 0x9e, 0x36, 0x89, 0xe4, 0x16, 0x1d, 0x88, 0x89, 0xd2, 0x72, 0x0c, 0x72, 0x62, 0x6e, 0x77, 0x14, 0x88, 0xc3, 0x08, 0x9e, 0xef, 0x22, 0x13, 0xc0, 0x24, 0x0a, 0xc1, 0x3c, 0x8e, 0x2c, 0x4b, 0x10, 0x8d, 0x3b, 0x72, 0xdd, 0x19, 0x01, 0x92, 0x50, 0x5e, 0x97, 0x2b, 0x84, 0x90, 0x57, 0xd5, 0x72, 0x1f, 0x42, 0x00, 0xcf, 0x3e, 0x1f, 0xe1, 0x0b, 0x0f, 0x72, 0xbc, 0xb6, 0x0f, 0x4c, 0xd3, 0x08, 0x3f, 0x7a, 0x2f, 0xc7, 0xdf, 0xfd, 0x24, 0xc0, 0x10, 0xab, 0xd1, 0x47, 0x79, 0xd5, 0x2e, 0xe3, 0x1c, 0xc8, 0x80, 0x24, 0x8e, 0xe1, 0xb8, 0x5c, 0xae, 0x50, 0x8b, 0x23, 0x30, 0x47, 0x5e, 0x37, 0x1b, 0xab, 0x0b, 0xbf, 0x32, 0x01, 0xc4, 0xe3, 0x18, 0x82, 0xca, 0xef, 0x95, 0xa8, 0x51, 0xc6, 0x2c, 0x03, 0xfe, 0xed, 0x1f, 0xc6, 0x68, 0xf5, 0xd5, 0x55, 0xb5, 0x49, 0x82, 0x0f, 0xfc, 0xcc, 0x67, 0xad, 0x91, 0xb0, 0xb5, 0xa5, 0x5e, 0xea, 0x77, 0x97, 0xb6, 0x46, 0x13, 0xe7, 0x57, 0xa8, 0xcd, 0x5c, 0x61, 0xab, 0x6f, 0x56, 0x84, 0xbc, 0xb3, 0xbb, 0x52, 0x9b, 0x19, 0x4d, 0xc4, 0xfc, 0x2d, 0x8b, 0x66, 0x85, 0x9a, 0x7d, 0x7f, 0xb7, 0xb5, 0x66, 0x6d, 0xd4, 0x91, 0x23, 0x8b, 0x47, 0xad, 0x53, 0x03, 0xf0, 0x86, 0xd7, 0xd3, 0xbe, 0xd1, 0x5d, 0xde, 0xab, 0x3b, 0x3b, 0xa0, 0x94, 0xa2, 0xdf, 0x6c, 0xa0, 0xb6, 0xbd, 0x0b, 0xa2, 0xf5, 0xee, 0xde, 0x45, 0xaf, 0x56, 0x3b, 0x72, 0xcd, 0x5a, 0xa2, 0xc6, 0x0e, 0xb5, 0x96, 0xce, 0x49, 0xbb, 0x46, 0x01, 0xcf, 0x8c, 0x38, 0xea, 0x33, 0x23, 0xab, 0x45, 0x48, 0x16, 0x66, 0x5c, 0x9f, 0x9b, 0x82, 0x8d, 0xa7, 0x5d, 0xa6, 0xb9, 0x77, 0x67, 0x64, 0x0a, 0x45, 0x13, 0x35, 0x3a, 0xe8, 0xf8, 0xf9, 0x7d, 0x33, 0x9e, 0xcf, 0x91, 0x44, 0x09, 0x08, 0xa4, 0x3b, 0x8c, 0xa3, 0x3e, 0xa6, 0xd3, 0x50, 0xf5, 0x65, 0xca, 0x16, 0xa1, 0x3c, 0xc4, 0x26, 0x72, 0x52, 0x27, 0x8a, 0xd0, 0x6c, 0x01, 0xff, 0xf6, 0x8f, 0x7c, 0x9c, 0x3e, 0xa3, 0x7a, 0x25, 0x5d, 0x1f, 0xdf, 0x3e, 0x19, 0xe3, 0x73, 0x7f, 0x66, 0x3b, 0x48, 0xc0, 0x51, 0xee, 0x73, 0xae, 0xe1, 0xdc, 0xf5, 0xe5, 0x42, 0x0b, 0x15, 0x86, 0x17, 0x1c, 0xa4, 0x72, 0x9f, 0xcc, 0xf5, 0x4d, 0x41, 0x48, 0x90, 0xbc, 0x90, 0xc3, 0x83, 0xd2, 0x32, 0x1f, 0xb6, 0xd4, 0xef, 0x6e, 0xbd, 0x20, 0x35, 0x34, 0x57, 0x19, 0x9f, 0x75, 0x90, 0x2a, 0xd7, 0xa8, 0x0b, 0x36, 0x55, 0xab, 0x90, 0x53, 0xd5, 0xe1, 0xb6, 0x09, 0xc3, 0x55, 0x75, 0x7b, 0x3d, 0x0f, 0xe7, 0x75, 0xf1, 0x86, 0x28, 0x47, 0x5b, 0x2c, 0xd8, 0xd8, 0xb9, 0xc9, 0x3c, 0x1f, 0x29, 0xdd, 0x6a, 0x3e, 0x85, 0x43, 0x08, 0x31, 0x7d, 0x93, 0xba, 0xd2, 0x7d, 0x54, 0x6e, 0x72, 0xd6, 0x4d, 0xca, 0xe2, 0x8d, 0x2a, 0xea, 0x90, 0x4b, 0xeb, 0xa1, 0x9c, 0xdb, 0x70, 0xee, 0x59, 0xd3, 0x36, 0xb2, 0x60, 0x33, 0x9e, 0x09, 0xc3, 0xb5, 0x56, 0xc0, 0xf3, 0xec, 0x33, 0xdc, 0xe4, 0x32, 0x3d, 0x5f, 0x55, 0xcf, 0xc9, 0x54, 0x01, 0x75, 0x9c, 0x37, 0xa8, 0xeb, 0x46, 0x74, 0xdf, 0x57, 0xd5, 0x70, 0x98, 0xe2, 0x0d, 0x20, 0xe0, 0xf9, 0x72, 0x0a, 0x27, 0xcb, 0x62, 0x50, 0x47, 0xa8, 0x33, 0x12, 0x8a, 0x49, 0x1c, 0x81, 0xa8, 0xaf, 0x4d, 0x14, 0x68, 0x5d, 0xee, 0xe3, 0xa1, 0x47, 0x62, 0x44, 0x91, 0xd5, 0x43, 0x49, 0x64, 0x8b, 0xd0, 0xf7, 0x9e, 0x88, 0xd1, 0xe9, 0x63, 0x26, 0xc4, 0xce, 0x5b, 0x87, 0x1c, 0xce, 0x0b, 0x21, 0xb6, 0x2e, 0xf6, 0x30, 0x6b, 0x73, 0x10, 0xb3, 0xc0, 0x49, 0x55, 0x9f, 0x65, 0x92, 0x12, 0xd3, 0x70, 0x4e, 0x1d, 0x67, 0x99, 0x0f, 0x5b, 0xea, 0xbf, 0x01, 0x79, 0xca, 0xf9, 0xd4, 0x50, 0x65, 0x6d, 0x7d, 0x2e, 0x07, 0x79, 0x3e, 0x40, 0xda, 0x79, 0x4d, 0x9d, 0x8f, 0x94, 0x79, 0xc7, 0xf9, 0xc9, 0x9b, 0x42, 0xb8, 0x3d, 0x53, 0xbc, 0x59, 0xd1, 0x6d, 0x41, 0x1a, 0x90, 0x0b, 0x66, 0xba, 0x17, 0x6d, 0x32, 0xd7, 0x7d, 0x93, 0x83, 0xd6, 0xd1, 0xb9, 0x49, 0x42, 0x48, 0xbe, 0x2d, 0x88, 0x5e, 0x3a, 0x20, 0x67, 0x1a, 0xce, 0xb9, 0xb9, 0x96, 0xc1, 0xb5, 0x9b, 0xcc, 0x4d, 0xc1, 0x46, 0x36, 0x9f, 0x27, 0xf1, 0x38, 0xaf, 0x7a, 0xab, 0x25, 0x16, 0x9e, 0xa7, 0xe0, 0x4a, 0xa6, 0x70, 0x7d, 0x57, 0xdd, 0xb8, 0xa8, 0x9f, 0xab, 0x85, 0x16, 0x0a, 0x9c, 0x44, 0xf5, 0x41, 0x26, 0xea, 0x0e, 0x1e, 0xbb, 0x00, 0xa3, 0x5b, 0x81, 0x32, 0x21, 0x40, 0x5d, 0x82, 0x68, 0x24, 0xff, 0x47, 0xb9, 0x3c, 0x40, 0x1a, 0x47, 0x20, 0x20, 0xf0, 0x14, 0x2c, 0x85, 0xea, 0x95, 0x4c, 0xa2, 0x18, 0x82, 0x10, 0x1c, 0x76, 0xf2, 0x99, 0xee, 0x59, 0x58, 0x9e, 0x3d, 0x6b, 0xb5, 0x05, 0x45, 0xfa, 0x7a, 0x07, 0xdf, 0xe4, 0x23, 0xcd, 0xd2, 0x5e, 0x91, 0x17, 0x75, 0xe4, 0x3c, 0xb8, 0x5f, 0x68, 0x3e, 0x4f, 0xac, 0xe9, 0x9c, 0xd1, 0x48, 0xf6, 0x62, 0xba, 0x1e, 0x47, 0x36, 0x99, 0x2c, 0x7b, 0xf5, 0x96, 0xfa, 0x5d, 0xaf, 0x67, 0xa1, 0xa8, 0x1d, 0xa7, 0x5d, 0xa4, 0x79, 0x23, 0x40, 0xe6, 0x20, 0x6c, 0xe7, 0x80, 0xec, 0xe6, 0xee, 0x30, 0xd7, 0xc5, 0x5e, 0x49, 0x0d, 0xcb, 0x95, 0x0d, 0x2b, 0x4f, 0x39, 0x53, 0xbc, 0x19, 0xb6, 0x5b, 0x6f, 0xe8, 0x26, 0x6d, 0xd7, 0x28, 0x61, 0x59, 0x74, 0x93, 0xb5, 0xed, 0xdd, 0xb7, 0xc4, 0x4d, 0xe6, 0x55, 0x6f, 0x15, 0x4a, 0xeb, 0x45, 0x14, 0x79, 0xaf, 0xa4, 0x6e, 0xd5, 0x09, 0x0b, 0x15, 0x70, 0xb3, 0x3c, 0x43, 0x3b, 0x4b, 0x9f, 0x9b, 0xf0, 0x3c, 0xaf, 0x9e, 0x4f, 0xcd, 0x3c, 0x38, 0xc1, 0x14, 0x6e, 0xc0, 0xd5, 0x06, 0x22, 0x05, 0xb3, 0x24, 0x06, 0x21, 0x44, 0x01, 0x52, 0xce, 0x6b, 0x3b, 0x9c, 0x23, 0x0e, 0x7b, 0x98, 0x4e, 0x43, 0xb8, 0x3c, 0xb0, 0xee, 0x13, 0x0f, 0xd4, 0xb2, 0x0d, 0x15, 0x6e, 0xeb, 0xd7, 0x09, 0x24, 0x68, 0x47, 0x63, 0xe9, 0x32, 0x17, 0xc1, 0xd2, 0x2f, 0xf1, 0x7c, 0x36, 0x9c, 0x73, 0x6b, 0x49, 0x86, 0x05, 0x4b, 0xbe, 0xc0, 0x65, 0x0a, 0x3d, 0xbe, 0xa8, 0x5b, 0x8a, 0x64, 0xe8, 0x1d, 0xc6, 0x00, 0xa8, 0xda, 0x49, 0x49, 0xe4, 0x5f, 0xbb, 0xd9, 0x0f, 0xe0, 0x52, 0x2f, 0xf5, 0xbb, 0x4d, 0x63, 0xd6, 0x35, 0xaa, 0xf0, 0xd9, 0x00, 0x52, 0x15, 0x69, 0x16, 0x85, 0xd8, 0x06, 0x90, 0xaa, 0x60, 0x53, 0x5d, 0xdb, 0x98, 0x03, 0x24, 0x2c, 0x40, 0xce, 0x55, 0xb7, 0x67, 0x7a, 0x25, 0x8f, 0x2c, 0xde, 0x68, 0xad, 0xa7, 0x70, 0x28, 0x31, 0x33, 0xdd, 0xb6, 0x9b, 0x34, 0x9b, 0xcc, 0x5b, 0x39, 0x14, 0xe7, 0x2a, 0xdd, 0x97, 0xd1, 0x4d, 0xe6, 0x0d, 0xe7, 0xe3, 0xe1, 0x0c, 0x2c, 0x33, 0x2b, 0x0c, 0x9f, 0x2a, 0x37, 0x19, 0x16, 0x00, 0x29, 0xc4, 0xd4, 0x0a, 0xcf, 0xa7, 0xaa, 0x5a, 0xad, 0x5a, 0x7e, 0xd4, 0x06, 0x22, 0x9d, 0xb3, 0x34, 0x7d, 0x96, 0x3c, 0x6f, 0x26, 0xd7, 0xe1, 0x33, 0x88, 0x74, 0x8a, 0x93, 0x38, 0x42, 0x26, 0x62, 0x30, 0x17, 0x39, 0x08, 0xfd, 0xc0, 0x8c, 0x44, 0xba, 0x7e, 0x80, 0x89, 0x72, 0x96, 0xda, 0x65, 0xea, 0x9c, 0xe5, 0x68, 0x14, 0x9b, 0x70, 0x7e, 0x16, 0x96, 0xae, 0x47, 0x0a, 0x9b, 0x83, 0x4c, 0xcf, 0xa5, 0x28, 0x5e, 0x16, 0xc6, 0xd4, 0x73, 0x1b, 0x9c, 0x7a, 0x19, 0x46, 0x12, 0xc5, 0x10, 0x99, 0x3c, 0x7f, 0x78, 0x90, 0xa8, 0xf6, 0x22, 0xe9, 0x38, 0x4b, 0xab, 0xb5, 0xc2, 0x07, 0x70, 0xa9, 0x97, 0xfa, 0xdd, 0xa6, 0xe7, 0xa0, 0x68, 0xb9, 0xc6, 0xd1, 0x6c, 0x15, 0x9b, 0xd2, 0x62, 0x0e, 0x72, 0x7d, 0x43, 0xf6, 0x5c, 0xc2, 0x72, 0x8d, 0x74, 0x01, 0x20, 0x67, 0xda, 0x7f, 0xc8, 0xa2, 0x70, 0xdb, 0x02, 0xe4, 0xb0, 0xdd, 0x02, 0xa1, 0x14, 0x2b, 0x9b, 0x5b, 0x18, 0x9a, 0xbc, 0xe3, 0x7c, 0x2b, 0x90, 0x0e, 0xb1, 0xfb, 0x96, 0x36, 0x6e, 0xd2, 0x9a, 0xc2, 0xd1, 0x6e, 0x52, 0xf7, 0x4d, 0x5e, 0x4e, 0x37, 0xa9, 0x36, 0x9c, 0xcb, 0x86, 0x73, 0xbb, 0x3f, 0x52, 0xf6, 0x3b, 0xda, 0xa3, 0x86, 0x59, 0x9e, 0x6b, 0xb4, 0x17, 0x63, 0x28, 0x88, 0xc6, 0x3a, 0xdc, 0xf6, 0x3d, 0xd3, 0x64, 0xee, 0xa9, 0x46, 0x74, 0x02, 0x35, 0x3d, 0xa3, 0x16, 0x5a, 0x48, 0x98, 0x45, 0x06, 0x9c, 0xd2, 0x29, 0x02, 0xd4, 0x93, 0xe1, 0xb6, 0x0c, 0xc3, 0x83, 0x7c, 0xa6, 0x9b, 0x07, 0x48, 0x23, 0x9d, 0x9b, 0xd4, 0x61, 0xb8, 0x7c, 0xae, 0x1d, 0x6a, 0x98, 0x58, 0xcd, 0xe7, 0x7e, 0xbe, 0xd9, 0xc7, 0xe5, 0x3e, 0xca, 0x5e, 0x24, 0xc1, 0xe6, 0x49, 0x17, 0x9b, 0x19, 0x37, 0x99, 0x14, 0xda, 0x7f, 0xa0, 0x42, 0xf2, 0xc4, 0x72, 0x9c, 0x71, 0x68, 0xb5, 0x11, 0xa9, 0x9c, 0xe5, 0x30, 0xe6, 0x16, 0x8c, 0x39, 0x20, 0x04, 0xa8, 0xfd, 0x01, 0x5c, 0xea, 0xa5, 0x7e, 0x17, 0xe9, 0xf1, 0x02, 0x28, 0x9a, 0x59, 0x6c, 0x0d, 0x42, 0xe5, 0x3e, 0xe7, 0x9e, 0xdb, 0x39, 0xc8, 0xa3, 0x1c, 0xa4, 0x02, 0x64, 0x75, 0x7d, 0x6b, 0x21, 0x20, 0x57, 0x37, 0xb7, 0xac, 0xd0, 0x3b, 0x0f, 0xab, 0x57, 0xb6, 0xb6, 0x31, 0x6c, 0xb5, 0x2e, 0xb8, 0x78, 0xb3, 0x5a, 0xc8, 0x4d, 0xee, 0x1a, 0x37, 0xa9, 0x67, 0xba, 0x09, 0xa5, 0x97, 0xb5, 0x6f, 0xf2, 0x3c, 0xb3, 0xde, 0xd6, 0xf8, 0xa2, 0x97, 0x2f, 0xbd, 0xf0, 0xb8, 0xee, 0xad, 0x14, 0xca, 0x4d, 0x8e, 0xcd, 0x62, 0x0c, 0xf3, 0xdc, 0xe7, 0x26, 0x7f, 0xe9, 0x5a, 0x85, 0x1c, 0x5d, 0x98, 0x91, 0xf3, 0xd7, 0x81, 0xda, 0x1c, 0xa4, 0x0a, 0x39, 0x89, 0xcc, 0xf3, 0x79, 0xdc, 0x47, 0x14, 0xf6, 0x30, 0x9d, 0x46, 0xf0, 0x82, 0x20, 0x77, 0x93, 0x2a, 0xdc, 0xd6, 0x80, 0xd4, 0x30, 0x93, 0xcf, 0x63, 0x73, 0x66, 0x38, 0x8c, 0x30, 0x18, 0xe6, 0x39, 0x4e, 0x10, 0x62, 0xfa, 0x26, 0x5d, 0x97, 0x60, 0x63, 0x23, 0xcf, 0x6b, 0x3a, 0x5e, 0x9e, 0x13, 0x65, 0xba, 0xb9, 0x5d, 0x10, 0x33, 0xbe, 0xa8, 0xf3, 0x94, 0x3a, 0x97, 0xc9, 0x3c, 0x1f, 0x71, 0x94, 0x8f, 0x32, 0xc6, 0x71, 0x8c, 0x76, 0x97, 0xe4, 0x30, 0x26, 0xc0, 0xda, 0xde, 0x71, 0xd3, 0x4f, 0x56, 0x5d, 0x2f, 0x86, 0x30, 0x4b, 0xbd, 0xd4, 0xef, 0x98, 0x9e, 0x09, 0x99, 0x17, 0x41, 0x71, 0xa4, 0x1c, 0xa4, 0x7d, 0x46, 0x86, 0xe1, 0xfa, 0x6b, 0x2f, 0x00, 0x90, 0x6b, 0x0b, 0x1c, 0x24, 0xa5, 0x79, 0x3e, 0x72, 0x41, 0x33, 0xb9, 0x5d, 0xdd, 0xbe, 0xd0, 0x70, 0x3b, 0x87, 0xa2, 0x3c, 0x23, 0xc3, 0x6d, 0xe5, 0x26, 0x77, 0xf6, 0xd0, 0x57, 0xe3, 0x8b, 0xda, 0x4d, 0x5e, 0x2e, 0x40, 0xce, 0xcc, 0x7a, 0xe7, 0x53, 0x35, 0xf6, 0xa2, 0x5e, 0x9d, 0x9b, 0xf4, 0xcc, 0x28, 0x63, 0x56, 0x58, 0xc5, 0xa6, 0xc1, 0x09, 0x31, 0x91, 0xad, 0x43, 0x7a, 0x7c, 0xd1, 0x84, 0xe1, 0xf6, 0x82, 0x0a, 0x01, 0x97, 0x07, 0x6a, 0x4c, 0x91, 0x98, 0xe7, 0xd3, 0x2c, 0x02, 0x73, 0x85, 0x02, 0x24, 0x51, 0x50, 0x8c, 0x8c, 0xb3, 0x4c, 0xcc, 0x73, 0x3f, 0x07, 0xa4, 0x9f, 0x3b, 0xc8, 0x7a, 0x27, 0xb0, 0xda, 0x8b, 0x2c, 0xe7, 0xca, 0x7d, 0x6c, 0xac, 0x48, 0xc8, 0xc9, 0x50, 0x5d, 0xdf, 0x85, 0xa3, 0xbf, 0x56, 0xcd, 0x71, 0x27, 0x32, 0x24, 0x67, 0x6e, 0xd1, 0x65, 0xc6, 0xa1, 0xb5, 0xb4, 0x37, 0xd2, 0xda, 0xc7, 0x6b, 0xaf, 0xe7, 0x6e, 0x75, 0x9a, 0x24, 0x28, 0xad, 0xac, 0x16, 0x43, 0x9b, 0x8d, 0x4d, 0xf9, 0x61, 0x9c, 0xf9, 0x00, 0x2e, 0xf5, 0x52, 0xbf, 0xd5, 0xda, 0xfe, 0xec, 0x15, 0x3e, 0x93, 0x47, 0x41, 0x71, 0x7d, 0xd3, 0xb8, 0x46, 0xed, 0x44, 0xed, 0x36, 0x1f, 0xd3, 0xce, 0xd3, 0x6d, 0xab, 0xd7, 0xdc, 0x54, 0x0e, 0xd5, 0x72, 0x90, 0x94, 0x1a, 0x40, 0xda, 0x05, 0x1b, 0x7b, 0xda, 0x86, 0x52, 0x9a, 0xb7, 0xff, 0xcc, 0xe4, 0x23, 0x57, 0xb7, 0xb6, 0xdf, 0x5c, 0xb8, 0xbd, 0x63, 0xb7, 0xff, 0xec, 0x29, 0x58, 0x12, 0xb9, 0x21, 0x48, 0xe9, 0xcb, 0xed, 0x26, 0xe7, 0xaa, 0xde, 0xc5, 0x45, 0xbd, 0xda, 0x41, 0x86, 0x66, 0xd9, 0x6e, 0x62, 0x55, 0xc3, 0x65, 0x0f, 0xa5, 0xac, 0x74, 0x27, 0x26, 0x97, 0x29, 0xcf, 0x98, 0x70, 0xdb, 0x2a, 0xc6, 0x68, 0x07, 0xe6, 0xf0, 0x40, 0x02, 0x98, 0x10, 0x30, 0x8f, 0x22, 0x1a, 0xb7, 0x8d, 0xe3, 0x4c, 0x42, 0x55, 0xdd, 0xd6, 0xb0, 0x24, 0x56, 0x9e, 0x12, 0x04, 0x6e, 0x90, 0xe7, 0x17, 0x35, 0x68, 0x7f, 0xf0, 0x1c, 0x31, 0xc5, 0x21, 0x9d, 0xef, 0x4c, 0xe3, 0x08, 0x84, 0x10, 0xdc, 0x70, 0x9d, 0xd5, 0x37, 0xa9, 0xaa, 0xe4, 0x10, 0x30, 0xfd, 0x97, 0x3a, 0xc4, 0xd6, 0xb9, 0x52, 0x79, 0x9d, 0x45, 0x02, 0x01, 0x02, 0xea, 0x58, 0xcb, 0x30, 0x54, 0xe8, 0x3d, 0x9d, 0x02, 0xad, 0x6e, 0x9e, 0xd7, 0x5c, 0xdd, 0xde, 0x45, 0x34, 0x1c, 0x1e, 0xf9, 0xe1, 0xd5, 0x1f, 0x22, 0xf3, 0xe1, 0x5d, 0xea, 0xa5, 0x7e, 0x0b, 0xf5, 0x91, 0x9f, 0x43, 0x42, 0xcf, 0x0b, 0x45, 0x3b, 0xef, 0x68, 0x03, 0x75, 0xa4, 0xab, 0xe1, 0x0b, 0x8a, 0x34, 0x8b, 0x1c, 0xe4, 0x1c, 0x5c, 0x6d, 0x28, 0x6a, 0x58, 0x2e, 0xc8, 0x47, 0xae, 0x6e, 0xef, 0xbc, 0xa9, 0x70, 0xdb, 0x6e, 0x05, 0xaa, 0xed, 0xec, 0x99, 0x7d, 0x93, 0x6b, 0x3b, 0x7b, 0x97, 0x7c, 0x89, 0xd8, 0x85, 0x85, 0xde, 0x49, 0x7e, 0x2f, 0x4e, 0x9a, 0x8c, 0x17, 0x17, 0x75, 0xec, 0x3e, 0xcb, 0x68, 0x41, 0xbb, 0x90, 0x29, 0xe4, 0xa8, 0x90, 0x39, 0x91, 0xcb, 0x27, 0x5c, 0x3f, 0x40, 0xaa, 0x16, 0x51, 0x78, 0x41, 0x80, 0x68, 0xdc, 0xc3, 0x64, 0x3a, 0x96, 0xf9, 0x48, 0xed, 0x20, 0x03, 0xed, 0x26, 0x35, 0x2c, 0xf3, 0x5e, 0x49, 0xe3, 0x2c, 0xb5, 0x43, 0x25, 0xd2, 0x11, 0x3e, 0xfa, 0x3d, 0x09, 0xc5, 0xbc, 0xf0, 0x43, 0x8c, 0x13, 0xbd, 0xfa, 0x44, 0x3e, 0xeb, 0x9d, 0x17, 0x72, 0x12, 0x88, 0x8c, 0xa8, 0x1c, 0x67, 0xee, 0x14, 0xe5, 0x5d, 0xe4, 0x79, 0xb1, 0x67, 0x9a, 0xe5, 0x9b, 0xcf, 0x75, 0xd5, 0xfb, 0xec, 0xd9, 0x04, 0xd3, 0x4c, 0xc1, 0x38, 0x89, 0xb1, 0xb6, 0xbb, 0x57, 0xfc, 0xeb, 0x6b, 0xe5, 0x75, 0x4c, 0x08, 0xb3, 0xd4, 0x4b, 0xfd, 0x4e, 0x68, 0xeb, 0x33, 0x29, 0x43, 0x66, 0xe5, 0x14, 0x7b, 0x9d, 0x39, 0x28, 0x6a, 0xb0, 0x19, 0x57, 0xda, 0x6d, 0x83, 0x12, 0x8a, 0xea, 0x9a, 0x02, 0x24, 0xa1, 0x12, 0x90, 0xfa, 0x35, 0x37, 0xb7, 0xe6, 0x42, 0xec, 0x45, 0x80, 0xd4, 0x8e, 0xb3, 0x50, 0xb0, 0xd9, 0xda, 0x5e, 0x98, 0x8f, 0xac, 0x6d, 0xef, 0xbc, 0xb9, 0x70, 0xdb, 0x6e, 0x05, 0xda, 0x3b, 0x76, 0xd9, 0x8b, 0x37, 0x0b, 0x42, 0x6f, 0x2e, 0xab, 0xde, 0xd6, 0x55, 0x0f, 0xa6, 0x15, 0x28, 0x0a, 0x0b, 0xd7, 0x44, 0xcc, 0x6a, 0xed, 0x38, 0xf3, 0x06, 0xf5, 0xd0, 0xec, 0x83, 0x4c, 0x74, 0x0e, 0xd2, 0xcf, 0xf3, 0x8e, 0x5e, 0x20, 0xa1, 0x28, 0xb2, 0x14, 0xcc, 0x13, 0x0a, 0xba, 0x2a, 0xdc, 0xb6, 0x2a, 0xdd, 0x89, 0x0d, 0xbc, 0x28, 0x2f, 0x02, 0x25, 0x51, 0x0e, 0xc5, 0x24, 0x8c, 0xf0, 0xc3, 0x17, 0x08, 0x86, 0x51, 0x5e, 0xec, 0x91, 0xdf, 0x2b, 0x36, 0x61, 0xfb, 0xf1, 0xed, 0x18, 0x19, 0x81, 0x01, 0xad, 0xd0, 0xd0, 0x4d, 0xe2, 0x82, 0x9b, 0x24, 0x44, 0xce, 0x77, 0xeb, 0xdc, 0xa4, 0x74, 0x93, 0x71, 0xde, 0x16, 0x14, 0xc7, 0x10, 0x19, 0xc1, 0x61, 0x27, 0x6f, 0x0b, 0xf2, 0x7c, 0x1f, 0xae, 0xef, 0x17, 0x43, 0x1b, 0x42, 0x50, 0xdd, 0xd8, 0xc8, 0x3f, 0x8c, 0x4b, 0xbd, 0xd4, 0xef, 0x94, 0x9e, 0x0d, 0xbd, 0x7b, 0x76, 0xe8, 0x5d, 0x84, 0x22, 0x21, 0x04, 0x2b, 0xeb, 0x5b, 0x73, 0x61, 0xb5, 0x3c, 0x53, 0x0c, 0xb1, 0x35, 0x2c, 0x75, 0x91, 0xc6, 0x06, 0xed, 0x51, 0x80, 0xd4, 0xf0, 0x1b, 0xda, 0xe1, 0x76, 0xa7, 0x35, 0x97, 0x8f, 0x5c, 0xdd, 0xde, 0xcd, 0x5d, 0xe6, 0x1b, 0x85, 0xdb, 0x56, 0xf1, 0xe6, 0xad, 0x0a, 0xb7, 0x67, 0xaa, 0xde, 0x02, 0x3c, 0xf0, 0x8d, 0x83, 0x2c, 0xb6, 0x08, 0xe5, 0x0b, 0x76, 0x3d, 0x6b, 0x3a, 0xc7, 0xe3, 0x2e, 0xc2, 0xe1, 0x08, 0x61, 0x94, 0xa9, 0xcb, 0xc2, 0xf4, 0x73, 0xdf, 0x5c, 0xe3, 0x20, 0xa7, 0x76, 0xd4, 0xa2, 0x8b, 0x42, 0x91, 0xc6, 0x43, 0x38, 0xea, 0x40, 0x88, 0x0c, 0x3c, 0x28, 0x99, 0x30, 0xdc, 0x0b, 0x4a, 0xc6, 0x41, 0x7a, 0x76, 0x9e, 0x32, 0xd0, 0x45, 0x1d, 0x62, 0xe5, 0x2c, 0x65, 0x38, 0xff, 0xa5, 0x07, 0xa3, 0xdc, 0xad, 0xc6, 0x79, 0x9e, 0x72, 0x12, 0xc7, 0x38, 0x71, 0x8c, 0x60, 0x63, 0xcb, 0x47, 0x1a, 0xea, 0x6d, 0x41, 0xca, 0xb9, 0x0a, 0xcb, 0x65, 0xaa, 0xd7, 0x8c, 0x43, 0x7b, 0x24, 0x32, 0xc6, 0x34, 0x23, 0xc5, 0x0a, 0xb8, 0x2b, 0x7f, 0xae, 0x97, 0xce, 0xe4, 0x8e, 0x96, 0x32, 0x86, 0xdd, 0x6b, 0xae, 0x37, 0x1f, 0x40, 0x19, 0xfe, 0xd8, 0x21, 0x4f, 0x7b, 0xa9, 0x97, 0xfa, 0x1d, 0xd3, 0xf6, 0x67, 0x52, 0xe7, 0x17, 0x17, 0x42, 0x71, 0x6d, 0x53, 0x8d, 0x20, 0x92, 0xa2, 0x6b, 0x54, 0x50, 0xd4, 0x61, 0xf2, 0xb0, 0xd3, 0x56, 0xb9, 0x46, 0xab, 0x81, 0x7c, 0x73, 0x6b, 0x3e, 0x07, 0x39, 0x03, 0xc8, 0x42, 0x45, 0x5b, 0xe5, 0x23, 0x35, 0x20, 0xf3, 0xe7, 0xc5, 0x7c, 0xe4, 0xb0, 0xdd, 0x04, 0xa5, 0x0c, 0xab, 0x3b, 0x7b, 0x47, 0x86, 0xdb, 0xfd, 0x46, 0x1d, 0x84, 0x31, 0xac, 0xed, 0x1d, 0x7b, 0xcb, 0xc2, 0xed, 0xf9, 0xd0, 0x5b, 0x64, 0x6a, 0x62, 0x66, 0x6c, 0x2d, 0xea, 0x1d, 0x17, 0xe6, 0xb8, 0xf3, 0xc6, 0xf2, 0x10, 0x5f, 0x7d, 0x28, 0xc5, 0xbf, 0xfa, 0x7d, 0x86, 0xff, 0xfd, 0xb7, 0x47, 0xf8, 0x97, 0xff, 0x26, 0xc3, 0x53, 0xcf, 0xe9, 0x95, 0x65, 0xc2, 0xb8, 0xc9, 0xfc, 0x2a, 0x06, 0xab, 0x30, 0x13, 0x8d, 0x31, 0xcd, 0xc6, 0x70, 0x03, 0xd7, 0x4c, 0xdb, 0xf0, 0xa0, 0xa4, 0x76, 0x61, 0xce, 0x87, 0xde, 0xe9, 0x4c, 0x18, 0x6e, 0x57, 0xc3, 0xbf, 0xf7, 0x43, 0x60, 0xbf, 0x25, 0x01, 0x99, 0x37, 0xae, 0xc7, 0xa6, 0xf0, 0x73, 0xeb, 0xb5, 0x91, 0x0c, 0xb7, 0x83, 0x20, 0x5f, 0xbf, 0xc6, 0x03, 0x73, 0xd1, 0x98, 0x04, 0xa1, 0xbc, 0x04, 0x2d, 0x2f, 0x14, 0xc9, 0x90, 0x3c, 0x1c, 0x59, 0x95, 0xee, 0x50, 0xae, 0x5f, 0xeb, 0x8f, 0x03, 0xd4, 0x0f, 0xf3, 0x42, 0x4e, 0x69, 0xa5, 0x06, 0xca, 0x9c, 0x3c, 0x3c, 0x51, 0x1f, 0xba, 0x71, 0xb7, 0x03, 0x4a, 0xa8, 0xf9, 0x30, 0x2e, 0xf5, 0x52, 0xbf, 0x13, 0xda, 0xfe, 0x4c, 0xea, 0xf0, 0xb9, 0xba, 0xbe, 0x35, 0x0f, 0x45, 0xdb, 0x29, 0xce, 0x68, 0x3b, 0xef, 0xb8, 0xb2, 0xb9, 0x25, 0x5d, 0xa0, 0x05, 0x48, 0xbd, 0x30, 0x57, 0x03, 0x72, 0x75, 0x73, 0x7b, 0xce, 0x41, 0x52, 0x4a, 0x8b, 0x80, 0x34, 0x21, 0xb6, 0x72, 0x8d, 0x6d, 0xf5, 0xb5, 0x47, 0xe4, 0x23, 0xd7, 0x76, 0x76, 0x31, 0x68, 0x49, 0x70, 0xae, 0xed, 0x1e, 0x53, 0x9a, 0xbe, 0x2d, 0xe1, 0xf6, 0xfc, 0x9a, 0xb5, 0x68, 0x68, 0x55, 0xb7, 0x75, 0x21, 0x27, 0x9f, 0xbf, 0xb6, 0xc3, 0xed, 0x87, 0x9f, 0x60, 0xf8, 0xeb, 0x6f, 0x8c, 0x11, 0xa7, 0xd2, 0x1d, 0xb6, 0x9a, 0x11, 0xfe, 0xf3, 0x83, 0xc0, 0xc9, 0x27, 0x73, 0x07, 0x99, 0xbb, 0x49, 0x58, 0x45, 0x1d, 0x01, 0xe6, 0x11, 0x84, 0xe3, 0xbe, 0x0a, 0x93, 0x4b, 0x88, 0xc3, 0x50, 0x81, 0xb0, 0x84, 0x24, 0x54, 0x73, 0xdf, 0x16, 0x2c, 0x5d, 0xe5, 0x38, 0x05, 0x24, 0x08, 0xf5, 0x2e, 0xc9, 0x68, 0x1a, 0xe0, 0x8f, 0xbe, 0xa0, 0xc3, 0x70, 0xbf, 0x90, 0x9b, 0x4c, 0xe3, 0x08, 0x9c, 0x13, 0x7c, 0xe0, 0x5e, 0x05, 0xc8, 0x4c, 0x2e, 0xd8, 0xc8, 0x2f, 0x1a, 0x0b, 0x72, 0xad, 0x5a, 0x8d, 0x84, 0x2a, 0xf0, 0x24, 0x71, 0x84, 0xe9, 0xd4, 0xda, 0x61, 0xa9, 0xc0, 0x99, 0x44, 0x31, 0x9e, 0x7f, 0x59, 0xf7, 0x68, 0x26, 0x20, 0x84, 0xe0, 0xca, 0x5b, 0xef, 0xb4, 0x42, 0x8f, 0x2d, 0xeb, 0x83, 0xb6, 0x65, 0x25, 0xd3, 0xf3, 0xbf, 0xbe, 0x4b, 0xbd, 0xd4, 0x6f, 0x8b, 0x9e, 0xf9, 0x1c, 0x1a, 0xad, 0xf3, 0x88, 0x9b, 0x5b, 0x47, 0x42, 0xb1, 0xe0, 0x1a, 0xbb, 0xf3, 0x61, 0xf5, 0xea, 0xe6, 0xb6, 0x84, 0x2e, 0xa5, 0x06, 0x90, 0x94, 0x28, 0x37, 0xd9, 0x6e, 0xcf, 0xe7, 0x20, 0x8f, 0x00, 0x64, 0x6d, 0x7b, 0x17, 0x03, 0x75, 0x5e, 0x03, 0x92, 0x52, 0xaa, 0xc2, 0xea, 0x37, 0xc8, 0x47, 0xbe, 0xc5, 0xd5, 0xed, 0x37, 0xbc, 0xd7, 0x3b, 0x99, 0x5b, 0xda, 0x3b, 0x85, 0xe7, 0xbb, 0xf9, 0xc6, 0x1f, 0xcf, 0x45, 0x12, 0x8e, 0xf1, 0xdd, 0x27, 0xa7, 0xf0, 0xb8, 0x8f, 0x38, 0x8c, 0x4c, 0x3e, 0x32, 0x0e, 0x23, 0xfc, 0xd5, 0x37, 0x80, 0x6f, 0x3e, 0xea, 0xe7, 0x21, 0x33, 0xcf, 0xb5, 0xeb, 0xfb, 0x08, 0xc7, 0x3d, 0x64, 0x59, 0x08, 0x1e, 0x94, 0x10, 0xab, 0xe7, 0xbc, 0x64, 0x87, 0xde, 0x65, 0x93, 0x83, 0xf4, 0x02, 0x3b, 0xc4, 0x2e, 0x61, 0xa2, 0x9d, 0x25, 0x0f, 0xd0, 0xef, 0x46, 0xf8, 0xd7, 0x7f, 0x48, 0x90, 0x64, 0x25, 0x99, 0x9b, 0x54, 0xe7, 0x53, 0x55, 0x25, 0xf7, 0x82, 0x00, 0x77, 0xdd, 0x1c, 0xa1, 0x1c, 0xa8, 0xbc, 0xa6, 0x6a, 0xff, 0xd1, 0x6d, 0x47, 0x02, 0x79, 0xa8, 0x6e, 0x8a, 0x37, 0xda, 0x4d, 0x7a, 0xd2, 0x4d, 0xea, 0x79, 0xf0, 0x24, 0x54, 0xcd, 0xf0, 0x8e, 0x8f, 0xa7, 0x9f, 0xcd, 0x9d, 0x6b, 0x96, 0x65, 0x58, 0xdb, 0x3b, 0x26, 0xff, 0xb2, 0x5a, 0x1f, 0xba, 0x81, 0xdd, 0x37, 0xa6, 0x9f, 0xdb, 0x67, 0x96, 0x7a, 0xa9, 0xdf, 0x6a, 0x7d, 0xc4, 0xe7, 0xd0, 0x7c, 0x56, 0x55, 0x7e, 0x71, 0xd4, 0xed, 0xcc, 0x41, 0x51, 0xbb, 0x46, 0x5d, 0xa1, 0x1e, 0x19, 0x70, 0x5a, 0x61, 0xf5, 0xd6, 0x36, 0x46, 0x6d, 0x05, 0xc8, 0xcd, 0xed, 0xbc, 0xa2, 0x6d, 0xb9, 0xcc, 0x42, 0x0e, 0x72, 0x7b, 0xc7, 0x80, 0x73, 0x16, 0x90, 0x32, 0xc4, 0xa6, 0xc5, 0x82, 0xcd, 0xee, 0xae, 0x02, 0x27, 0xc3, 0xda, 0xce, 0xb1, 0xf9, 0x66, 0xf2, 0xb7, 0xb8, 0xba, 0x7d, 0x74, 0xe8, 0x1d, 0x0d, 0xad, 0xd6, 0x1e, 0xbd, 0xa8, 0x97, 0x5b, 0xc5, 0x9b, 0x7c, 0x6d, 0x1a, 0x28, 0x47, 0xb7, 0x2d, 0xe7, 0xb2, 0x65, 0x93, 0xb9, 0xb5, 0x1e, 0x2d, 0x8e, 0xf0, 0xf5, 0x93, 0xc0, 0xe7, 0xfe, 0xdc, 0x47, 0xbb, 0x2d, 0x5b, 0x72, 0x3c, 0x5f, 0xba, 0xc9, 0x2c, 0x4b, 0xc0, 0xdc, 0x29, 0xe2, 0x30, 0x04, 0x51, 0xab, 0xc9, 0x4c, 0xc1, 0x26, 0x28, 0x19, 0x40, 0xf2, 0x40, 0x3b, 0xcb, 0x3c, 0x4f, 0x49, 0x28, 0x31, 0x2e, 0xb3, 0x3b, 0x20, 0xf8, 0xbd, 0xff, 0x18, 0xe0, 0xe5, 0xd3, 0x56, 0x71, 0x48, 0xbf, 0x07, 0x95, 0x07, 0xad, 0x94, 0x09, 0x3e, 0xf5, 0x13, 0xf9, 0x6c, 0xb8, 0xeb, 0x05, 0x79, 0x88, 0xad, 0x1d, 0x24, 0xf4, 0xec, 0xb6, 0x3a, 0xa3, 0x42, 0xfb, 0xe9, 0x94, 0x80, 0xa9, 0x3c, 0xa5, 0x10, 0x04, 0x8e, 0x1f, 0x20, 0x09, 0x63, 0x3c, 0xff, 0x12, 0xc1, 0x94, 0xe4, 0xf0, 0x3e, 0x71, 0xf3, 0x6d, 0x26, 0xf7, 0x63, 0xff, 0x25, 0xb6, 0x3f, 0x80, 0x4b, 0xbd, 0xd4, 0xef, 0x06, 0x6d, 0xaa, 0xd2, 0x06, 0x96, 0x36, 0x44, 0xdb, 0x73, 0x50, 0x5c, 0xdd, 0xdc, 0xce, 0xc7, 0x0b, 0xb7, 0x16, 0x87, 0xd5, 0xa6, 0x69, 0xdc, 0x72, 0x8d, 0xfa, 0x6b, 0x07, 0x9d, 0x16, 0x08, 0xa3, 0x73, 0x39, 0xc8, 0xf3, 0x01, 0x92, 0x30, 0x86, 0xda, 0xee, 0xee, 0xc2, 0x82, 0xcd, 0xda, 0xee, 0x31, 0xf9, 0x5c, 0xe5, 0x23, 0xf5, 0x16, 0xa1, 0xb7, 0x0b, 0x90, 0x56, 0xe8, 0x5d, 0x32, 0x0d, 0xe7, 0x1e, 0xb7, 0x27, 0x72, 0xdc, 0x99, 0xf6, 0x9f, 0x10, 0x9e, 0x9b, 0x61, 0x77, 0x8f, 0x5b, 0xae, 0xd1, 0xca, 0x41, 0x2a, 0x07, 0xf9, 0xe2, 0x69, 0xe0, 0xf7, 0xfe, 0x3d, 0xc7, 0xc3, 0xdf, 0xd5, 0x70, 0x72, 0x11, 0x8e, 0xda, 0x00, 0x04, 0xb8, 0x1f, 0xa8, 0x70, 0x1b, 0xf0, 0x02, 0x15, 0x7a, 0x2b, 0x47, 0x68, 0xc2, 0xf0, 0x52, 0xd9, 0xca, 0x53, 0x96, 0x10, 0x47, 0xf2, 0xf9, 0xa9, 0xd7, 0x4b, 0xf8, 0x17, 0xbf, 0x13, 0xe1, 0xdc, 0x81, 0xca, 0x6b, 0xc6, 0x56, 0x2e, 0x53, 0xe5, 0x29, 0x79, 0x50, 0xc2, 0xdf, 0xf9, 0x50, 0x84, 0x20, 0x98, 0x77, 0x90, 0xba, 0x8a, 0xed, 0xa9, 0x8a, 0xb9, 0x40, 0x0e, 0x42, 0x79, 0x5f, 0x8e, 0x8f, 0x70, 0x14, 0xa9, 0x59, 0x6f, 0x99, 0xcb, 0x94, 0xdb, 0xce, 0x03, 0x3c, 0xfa, 0x78, 0x6c, 0x8d, 0x56, 0xc6, 0xd8, 0xbd, 0xf6, 0x7a, 0xf9, 0xc1, 0xe9, 0xb4, 0x0a, 0x1f, 0xc0, 0xa5, 0x5e, 0xea, 0x77, 0xad, 0x56, 0x45, 0x17, 0x1d, 0x3e, 0x2f, 0x72, 0x8a, 0x06, 0x8a, 0x5b, 0x3b, 0x18, 0xb5, 0x65, 0x8e, 0x73, 0x65, 0x73, 0x1b, 0xc3, 0xb6, 0x75, 0x46, 0xe5, 0x1d, 0x0b, 0x0e, 0x52, 0xf7, 0x41, 0x32, 0x6a, 0xda, 0x7c, 0x28, 0x65, 0x73, 0x39, 0xc8, 0x37, 0x02, 0xe4, 0xda, 0xce, 0x9e, 0xfc, 0x5a, 0x26, 0xf3, 0x91, 0xb3, 0xd3, 0x36, 0xef, 0x04, 0x20, 0xb5, 0x66, 0xff, 0xdd, 0xff, 0xf0, 0xbe, 0x07, 0x1c, 0x87, 0x00, 0x22, 0x00, 0x73, 0x18, 0x28, 0x23, 0x48, 0xe2, 0xb1, 0xd2, 0x14, 0x69, 0x3c, 0x06, 0x73, 0x28, 0x18, 0xa3, 0x48, 0xe2, 0x31, 0x56, 0xaa, 0x0c, 0xcf, 0xbd, 0xec, 0x20, 0x89, 0x62, 0x30, 0xc6, 0x40, 0x1d, 0x26, 0xb5, 0xe3, 0x80, 0x39, 0x0e, 0x92, 0x28, 0xc2, 0x34, 0x73, 0xf0, 0xfc, 0x69, 0x86, 0xc7, 0x9f, 0x08, 0x31, 0xc9, 0x12, 0xec, 0x6c, 0x4f, 0x31, 0x4d, 0x43, 0x38, 0x8e, 0x0b, 0xe6, 0xba, 0x88, 0xc3, 0x10, 0xcc, 0x71, 0xe1, 0x38, 0xae, 0xdc, 0x3a, 0xee, 0x78, 0x52, 0x87, 0x21, 0x98, 0xeb, 0x82, 0x39, 0x2e, 0x52, 0xa5, 0xdb, 0x7d, 0x17, 0xff, 0xe1, 0x4f, 0x43, 0x7c, 0xe9, 0x6b, 0x2e, 0x26, 0x42, 0x9d, 0x77, 0x1d, 0x30, 0xd7, 0x45, 0x6a, 0xe9, 0x24, 0x8a, 0xf0, 0x23, 0xef, 0x73, 0xf0, 0xf1, 0xfb, 0x5d, 0x24, 0x61, 0x0c, 0xe6, 0xb8, 0xa0, 0xcc, 0x91, 0x9b, 0xc9, 0x1d, 0x17, 0x94, 0xc9, 0xf3, 0xd4, 0x71, 0xc0, 0x98, 0x8b, 0x38, 0x8a, 0x41, 0x99, 0x0b, 0xaa, 0xde, 0x83, 0x80, 0x0b, 0x41, 0x5c, 0x19, 0x86, 0x33, 0x17, 0x94, 0xca, 0xd7, 0x79, 0xe9, 0x55, 0x07, 0x2f, 0x9f, 0x75, 0x30, 0x89, 0x63, 0x30, 0xd7, 0xc5, 0xc6, 0xf1, 0x2b, 0x51, 0xdb, 0xde, 0x05, 0x2f, 0x97, 0xe1, 0x97, 0x2b, 0x18, 0x76, 0xda, 0xe0, 0xa5, 0x32, 0x78, 0xa9, 0x8c, 0x61, 0xbb, 0x05, 0x5e, 0xb6, 0x74, 0xa9, 0x64, 0xe9, 0xf2, 0x52, 0x2f, 0xf5, 0x5b, 0xab, 0xcb, 0x95, 0x85, 0x9f, 0x43, 0xbf, 0x52, 0x91, 0x9f, 0x55, 0xfd, 0xbc, 0x5c, 0xc6, 0xa8, 0xdd, 0x86, 0x5f, 0xae, 0xc0, 0x5f, 0xf0, 0xb5, 0x7e, 0xb9, 0x02, 0x5e, 0xce, 0xb5, 0x5f, 0x2e, 0x63, 0xd0, 0x6e, 0x22, 0xd0, 0xba, 0xa3, 0x5e, 0xb3, 0x52, 0x91, 0xcf, 0xcd, 0xeb, 0xab, 0xd7, 0xac, 0x54, 0xd1, 0x6f, 0x35, 0xe1, 0x57, 0x2a, 0x08, 0x2a, 0x15, 0x0c, 0x5a, 0x0d, 0x04, 0x95, 0x2a, 0x82, 0xca, 0x0a, 0xfa, 0xcd, 0x06, 0xfc, 0x6a, 0x15, 0x41, 0xb5, 0x8a, 0x7e, 0xb3, 0x81, 0xa0, 0x52, 0x41, 0x50, 0x59, 0x91, 0x67, 0xaa, 0x2b, 0xf2, 0x6b, 0x1b, 0x75, 0x04, 0x95, 0x2a, 0xfc, 0x95, 0x15, 0xf4, 0x9a, 0x75, 0x94, 0xaa, 0xab, 0x08, 0x2a, 0x55, 0x74, 0xeb, 0x07, 0xea, 0xfd, 0x54, 0xde, 0x76, 0x4d, 0xbe, 0xf5, 0xf0, 0x2f, 0x08, 0x1e, 0x70, 0x54, 0xca, 0x57, 0x23, 0x09, 0x47, 0x70, 0xb9, 0xbe, 0x0e, 0x62, 0x2c, 0xb5, 0xc8, 0x90, 0xc4, 0x23, 0x78, 0x9e, 0x0b, 0x01, 0x81, 0x24, 0x0e, 0xf1, 0xfd, 0x67, 0x38, 0xbe, 0xf4, 0x55, 0x81, 0x38, 0x8a, 0xe0, 0x7a, 0x1e, 0x84, 0x50, 0x5a, 0x5d, 0xd1, 0xa0, 0xaf, 0x6b, 0x18, 0x85, 0x63, 0xd4, 0x0f, 0xeb, 0xa8, 0xae, 0x06, 0xb8, 0xe1, 0x1a, 0xe0, 0x9a, 0x63, 0x21, 0xee, 0xbc, 0x3d, 0xc0, 0xf1, 0x5d, 0x48, 0x87, 0xea, 0x07, 0x00, 0x80, 0x38, 0x0c, 0xe1, 0xf1, 0x00, 0x82, 0x00, 0xe1, 0x70, 0x8c, 0xce, 0xc0, 0xc7, 0xb3, 0xa7, 0x80, 0xc7, 0x9f, 0x18, 0xe3, 0xcc, 0x41, 0x09, 0x22, 0x13, 0x88, 0xc3, 0xb1, 0x39, 0x9f, 0x84, 0x63, 0xb8, 0x46, 0x87, 0xf0, 0x7c, 0x1f, 0xc7, 0xf7, 0x80, 0x7f, 0xf8, 0xf7, 0xc6, 0x08, 0x4a, 0x01, 0x32, 0x21, 0x9f, 0x3b, 0xdc, 0x87, 0xc8, 0x80, 0xc8, 0x5c, 0x1f, 0x01, 0xc4, 0x61, 0x04, 0xc7, 0xf3, 0xd5, 0x55, 0x0f, 0xf2, 0x4c, 0x96, 0x01, 0xfd, 0xae, 0xbc, 0x56, 0x22, 0x9b, 0x02, 0x51, 0x18, 0xca, 0x90, 0x3d, 0x15, 0xf8, 0xdc, 0x9f, 0x44, 0x88, 0x27, 0xbe, 0xfc, 0x5e, 0x51, 0x84, 0x7b, 0x7e, 0xf2, 0x67, 0x4d, 0xef, 0x97, 0x5e, 0x63, 0x3f, 0x68, 0x36, 0x72, 0x6d, 0x3f, 0x5f, 0xea, 0xa5, 0x7e, 0x37, 0xe8, 0x76, 0x6b, 0xe1, 0xf3, 0xe1, 0xcc, 0xf3, 0x95, 0xcd, 0x2d, 0x00, 0x40, 0xbf, 0xd5, 0x90, 0xd7, 0x2f, 0x28, 0xbd, 0xb2, 0xb5, 0x5d, 0x38, 0x23, 0xaf, 0x5f, 0x68, 0x28, 0x2d, 0xaf, 0x5c, 0xc8, 0xcf, 0x34, 0xb0, 0xba, 0xb5, 0x63, 0xf4, 0xca, 0xa6, 0xbc, 0xba, 0xa1, 0xd7, 0x6a, 0xa8, 0x6b, 0x1c, 0x08, 0xfa, 0xcd, 0xba, 0xba, 0xc6, 0x81, 0xa2, 0xdf, 0xac, 0xa3, 0xb6, 0xb3, 0x27, 0xbf, 0x57, 0xa3, 0x8e, 0xda, 0xce, 0x2e, 0x40, 0x29, 0x7a, 0x8d, 0x43, 0x79, 0xa5, 0x03, 0xa1, 0x17, 0x75, 0x75, 0xc3, 0xe5, 0xd6, 0xe4, 0xd1, 0x27, 0x7e, 0x4d, 0xc4, 0xe3, 0x21, 0x36, 0x36, 0x6f, 0x05, 0xa0, 0xee, 0xb9, 0xf1, 0x3c, 0x73, 0xcf, 0x8d, 0xb9, 0x47, 0x27, 0x0e, 0xcd, 0xb6, 0x9c, 0x24, 0x09, 0xf1, 0xe4, 0x73, 0x1c, 0x7f, 0xf1, 0x15, 0x81, 0x68, 0x1c, 0xe6, 0x10, 0x8a, 0xf2, 0x33, 0xc3, 0xc1, 0x00, 0xa3, 0x38, 0xc1, 0x64, 0x32, 0x41, 0x1c, 0x86, 0xe0, 0x41, 0x0e, 0xc5, 0x72, 0x35, 0xc0, 0xd6, 0x3a, 0xe0, 0xd2, 0x10, 0xeb, 0x1b, 0x01, 0x08, 0x01, 0xfa, 0xbd, 0x10, 0xc9, 0x34, 0xc0, 0x41, 0x03, 0x18, 0xf6, 0x35, 0x14, 0x05, 0x92, 0x71, 0x08, 0x2f, 0x08, 0xe4, 0xdd, 0x36, 0xe1, 0x18, 0xae, 0xef, 0x1b, 0x58, 0x6a, 0x70, 0x56, 0xfc, 0x10, 0xff, 0xe3, 0xaf, 0x07, 0x58, 0x29, 0x0b, 0x44, 0x91, 0x84, 0x9c, 0x10, 0x02, 0x71, 0x18, 0xc2, 0xf1, 0x02, 0x05, 0xc8, 0x1c, 0x9c, 0x71, 0xa8, 0xa0, 0x98, 0x49, 0xa8, 0x67, 0xd4, 0xc7, 0x64, 0x02, 0x44, 0x16, 0x38, 0xa3, 0x51, 0x84, 0xa7, 0x4f, 0xf9, 0x78, 0xec, 0x07, 0x40, 0x1a, 0x45, 0x70, 0x7d, 0x1f, 0x2b, 0x9b, 0x5b, 0xb8, 0xee, 0xbd, 0xef, 0xc7, 0xca, 0x46, 0xfe, 0x81, 0xaa, 0xae, 0x2f, 0x7f, 0x11, 0x97, 0xfa, 0x6f, 0x02, 0x2c, 0x9b, 0x85, 0xcf, 0xed, 0xca, 0x86, 0x02, 0x9e, 0xd2, 0x00, 0xd0, 0x6f, 0xe7, 0xb0, 0xb4, 0xc1, 0x99, 0x03, 0x92, 0x1a, 0x40, 0x42, 0xc1, 0x72, 0xd5, 0x02, 0xa4, 0x84, 0xa2, 0x06, 0xe1, 0x2e, 0x40, 0xf5, 0x5d, 0x35, 0x12, 0x9c, 0xfd, 0x66, 0x1d, 0xb5, 0xed, 0xbd, 0x5c, 0xef, 0xa8, 0xfb, 0x6c, 0xea, 0x87, 0xef, 0x5a, 0x40, 0x6a, 0x4d, 0x1e, 0xfd, 0xfe, 0x3f, 0x10, 0xc0, 0x14, 0x9e, 0x73, 0x1c, 0x1e, 0x77, 0x20, 0xb2, 0x29, 0x92, 0x58, 0x5f, 0x22, 0x36, 0x51, 0x97, 0x88, 0xc9, 0xcb, 0xbf, 0x92, 0x38, 0x92, 0x17, 0x8d, 0x09, 0x81, 0x38, 0x0e, 0xf1, 0xca, 0x39, 0x8e, 0xcf, 0x7f, 0x51, 0xa0, 0xdb, 0x51, 0x8e, 0x0d, 0x1a, 0x4e, 0x1e, 0xfa, 0xfd, 0x01, 0xda, 0xed, 0x76, 0x01, 0x90, 0x6f, 0x4e, 0x8f, 0xe1, 0x05, 0x25, 0x09, 0xe6, 0x70, 0x0c, 0x2f, 0x08, 0xe4, 0xe5, 0x5f, 0xd6, 0xf3, 0x38, 0x1c, 0x63, 0x6f, 0x2f, 0xc0, 0xaf, 0xfd, 0x3c, 0x50, 0xe5, 0x63, 0x38, 0xbe, 0x05, 0x45, 0x4f, 0x43, 0x31, 0x84, 0xeb, 0x07, 0xc8, 0xa6, 0x02, 0x49, 0x14, 0x82, 0x69, 0x70, 0x2a, 0x28, 0xa6, 0x29, 0x30, 0x1a, 0x44, 0x60, 0xb6, 0xcb, 0xf4, 0x7c, 0xf4, 0x86, 0xc0, 0xe7, 0xfe, 0x58, 0x9e, 0x97, 0x6e, 0x32, 0xc4, 0xfb, 0x7f, 0xea, 0x67, 0x65, 0xb3, 0xab, 0xfe, 0xb0, 0xa8, 0xbf, 0x82, 0xb3, 0x1f, 0xc0, 0xa5, 0x5e, 0xea, 0x77, 0x9d, 0xa6, 0xa4, 0xf8, 0xb9, 0xb5, 0x20, 0x97, 0xbb, 0xc3, 0x05, 0x4e, 0xd1, 0x82, 0x62, 0x7e, 0xa6, 0xbe, 0xd8, 0x35, 0x36, 0xea, 0x58, 0xdd, 0xd9, 0x29, 0xbc, 0x3e, 0x31, 0x40, 0xdd, 0xc9, 0xf5, 0xf6, 0x8e, 0x75, 0xe1, 0xd7, 0xce, 0xbb, 0x1a, 0x90, 0x5a, 0x93, 0x6f, 0x7d, 0xe7, 0x33, 0x82, 0x07, 0x5c, 0x56, 0xbe, 0xd9, 0x15, 0x70, 0x39, 0x03, 0x32, 0x81, 0x24, 0x19, 0xa9, 0x9b, 0x18, 0xe5, 0x2d, 0x85, 0x12, 0x9c, 0xc2, 0x68, 0x40, 0x20, 0x8e, 0x23, 0x44, 0xa9, 0x87, 0x3f, 0xf9, 0xb2, 0xc0, 0x33, 0xcf, 0xe5, 0xa1, 0x77, 0xb7, 0xdd, 0xc1, 0x48, 0x55, 0xa3, 0xdf, 0x3c, 0x20, 0xe7, 0xb5, 0x28, 0x38, 0xc8, 0xdc, 0x65, 0x5e, 0x73, 0x25, 0xf0, 0xd9, 0x4f, 0x8e, 0x51, 0x5b, 0x0b, 0x90, 0x09, 0xf9, 0x9c, 0xf9, 0x12, 0xa8, 0xd1, 0x78, 0x0c, 0x87, 0x6b, 0x1d, 0xc2, 0x55, 0xb7, 0x35, 0xc6, 0xe3, 0x10, 0x8c, 0x07, 0x10, 0x99, 0x40, 0x38, 0x0e, 0x91, 0x21, 0x90, 0x0e, 0x32, 0x0a, 0xe1, 0xb8, 0x01, 0xb2, 0x4c, 0xde, 0x06, 0xf9, 0xd5, 0x47, 0x7c, 0xbc, 0x76, 0x4e, 0x86, 0xdb, 0x9e, 0xef, 0x63, 0xeb, 0xc4, 0xd5, 0x38, 0x71, 0xeb, 0xed, 0x85, 0x0f, 0x9a, 0xd6, 0xbd, 0x46, 0x7d, 0xe1, 0xf3, 0xa5, 0x5e, 0xea, 0x77, 0x83, 0x2e, 0x84, 0xd5, 0x85, 0xe7, 0xad, 0xe2, 0x73, 0x0b, 0x9c, 0x39, 0x44, 0x73, 0x28, 0x16, 0xb5, 0xbc, 0x11, 0x71, 0x91, 0x6b, 0xd4, 0x61, 0xb5, 0x86, 0x9f, 0x7e, 0xcd, 0xda, 0xce, 0xae, 0xf9, 0x7d, 0xa9, 0xed, 0xee, 0x29, 0x7d, 0x88, 0xb5, 0x9d, 0x63, 0xef, 0x2a, 0x28, 0x2e, 0x0e, 0xbd, 0x1f, 0xff, 0x7b, 0x22, 0x8e, 0x62, 0x70, 0x9f, 0x03, 0xc8, 0x10, 0x87, 0x43, 0xf0, 0xc0, 0x03, 0x44, 0x86, 0x38, 0x0a, 0xc1, 0x75, 0x1e, 0xf1, 0x3c, 0xda, 0xf3, 0x03, 0x3c, 0xf1, 0x34, 0xf0, 0xef, 0xff, 0x24, 0x44, 0x6f, 0x14, 0x5c, 0x36, 0x40, 0x1e, 0xe5, 0x32, 0x5d, 0x47, 0xe0, 0xfe, 0xf7, 0x87, 0xf8, 0xd8, 0x47, 0x64, 0x18, 0x1e, 0x8d, 0xa5, 0x6b, 0x94, 0x0e, 0x72, 0xac, 0xc2, 0x6d, 0x2b, 0xf4, 0x86, 0x04, 0xa7, 0xeb, 0x05, 0x05, 0xd7, 0x18, 0xc7, 0x40, 0x38, 0x96, 0x6e, 0x52, 0x28, 0xa0, 0x32, 0xcf, 0xc7, 0x8b, 0xa7, 0x81, 0xaf, 0x7c, 0x5d, 0x5e, 0x47, 0x01, 0x00, 0x93, 0x34, 0xc1, 0xfd, 0xbf, 0xf0, 0xab, 0xe0, 0xa5, 0xd2, 0xd1, 0x50, 0x5c, 0xc2, 0x72, 0xa9, 0xdf, 0x8d, 0x7a, 0xc6, 0x35, 0x2e, 0x02, 0xe1, 0xca, 0x66, 0x31, 0x7c, 0x9e, 0xd5, 0x06, 0x8a, 0x40, 0x21, 0xd7, 0x58, 0x04, 0x64, 0xee, 0x1a, 0x7b, 0x8d, 0xc3, 0x42, 0xde, 0x51, 0x3b, 0xc8, 0x6e, 0xb3, 0xae, 0x5c, 0x23, 0x41, 0xb7, 0x7e, 0xf0, 0x37, 0x02, 0x90, 0x26, 0xf4, 0xfe, 0xd6, 0x77, 0x3e, 0x23, 0xb8, 0x4f, 0x25, 0x20, 0x35, 0x2c, 0xa3, 0xe1, 0x05, 0x01, 0x92, 0xfb, 0xda, 0xed, 0x49, 0x87, 0x37, 0x9d, 0x02, 0xdf, 0xfa, 0x4e, 0x88, 0x6f, 0x7c, 0x37, 0xc0, 0x7e, 0xfd, 0xf2, 0xc3, 0x92, 0x39, 0xc0, 0x5d, 0x37, 0x86, 0xf8, 0xd4, 0xc7, 0x03, 0x54, 0x4a, 0x40, 0x14, 0x8e, 0xe1, 0x72, 0x15, 0x4a, 0x8f, 0xc6, 0x70, 0x03, 0x09, 0xcb, 0x68, 0x14, 0x4a, 0x2d, 0x80, 0x68, 0x24, 0xcf, 0x64, 0x42, 0xa8, 0x70, 0x5b, 0xc2, 0xb2, 0xdf, 0x1d, 0x83, 0xb9, 0x52, 0x47, 0x23, 0xf5, 0x3c, 0x03, 0x0e, 0x0f, 0x42, 0x7c, 0xe9, 0x9b, 0x3e, 0xa6, 0x53, 0x79, 0x87, 0xb8, 0xe7, 0xfb, 0xb8, 0xe1, 0x9e, 0x1f, 0x41, 0x6d, 0x67, 0x17, 0x2b, 0x9b, 0xdb, 0x10, 0x42, 0x14, 0x3e, 0x5c, 0xb3, 0xba, 0xaa, 0x43, 0x9e, 0xf3, 0x9c, 0x59, 0xea, 0xa5, 0x7e, 0xab, 0xb5, 0xed, 0x02, 0x17, 0x9d, 0x29, 0x82, 0x50, 0xe5, 0x14, 0x95, 0xdb, 0xb3, 0x9d, 0xe2, 0x22, 0x28, 0x4a, 0xa7, 0xb8, 0x57, 0x74, 0x90, 0x94, 0xe6, 0xb9, 0x46, 0xed, 0x1a, 0x55, 0x58, 0x2d, 0xa1, 0xb8, 0xf7, 0xae, 0x0d, 0xab, 0x2f, 0x44, 0xff, 0xff, 0x03, 0x00, 0x7b, 0xb0, 0xc7, 0x35, 0x5d, 0x90, 0x37, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/nready_q.xpm0000600000176000000410000000163112105760300022004 0ustar buildbotwww-data00000000000000/* XPM */ static const char * nready_q_xpm[] = { "16 16 36 1", " c None", ". c #595959", "+ c #000000", "@ c #A60111", "# c #FE0018", "$ c #FC0018", "% c #A4000F", "& c #FF1929", "* c #FF0F20", "= c #FFA197", "- c #EC0016", "; c #FF2F39", "> c #FF333D", ", c #E00015", "' c #D40014", ") c #A62127", "! c #FF2D37", "~ c #FFB0A5", "{ c #FF0920", "] c #EA0016", "^ c #E20015", "/ c #8A000D", "( c #FF1526", "_ c #FF9893", ": c #FFA89F", "< c #FF8885", "[ c #FF4956", "} c #FF031B", "| c #FF6367", "1 c #C7EFFF", "2 c #FF293D", "3 c #00B4FF", "4 c #018EC9", "5 c #FA0018", "6 c #E60016", "7 c #E40015", " ", " .++++. ", " +@#$$$%+ ", " +&*====$-+ ", " +;>======,'+ ", " .)!=~=={]^^,/. ", " +(=_:<[+++++++ ", " +}===|+111111+ ", " +#==2+113++334+", " +$==5+13+33+34+", " .%]=6+13333+34+", " +67^+133++334+", " +^^+13333334+", " +/+133++344+", " .++444444+ ", " ++++++ "}; springlobby-0.169/src/images/nready_unsync.xpm0000600000176000000410000000200712105760300023061 0ustar buildbotwww-data00000000000000/* XPM */ static const char * nready_unsync_xpm[] = { "16 16 43 1", " c None", ". c #595959", "+ c #000000", "@ c #A60111", "# c #FE0018", "$ c #FC0018", "% c #A4000F", "& c #FF1929", "* c #FF0F20", "= c #FFA197", "- c #EC0016", "; c #FF2F39", "> c #FF333D", ", c #E00015", "' c #D40014", ") c #A62127", "! c #FF2D37", "~ c #FFB0A5", "{ c #FF0920", "] c #EA0016", "^ c #E20015", "/ c #8A000D", "( c #FF1526", "_ c #FF9893", ": c #FFA89F", "< c #FF8885", "[ c #FF4956", "} c #FF172D", "| c #FFE57C", "1 c #FF031B", "2 c #FF6367", "3 c #FF3F4D", "4 c #FF1329", "5 c #B40011", "6 c #FF293D", "7 c #FF2B3F", "8 c #FF1D32", "9 c #FFCC00", "0 c #B38F00", "a c #FA0018", "b c #F20017", "c c #E60016", "d c #E40015", " ", " .++++. ", " +@#$$$%+ ", " +&*====$-+ ", " +;>======,'+ ", " .)!=~=={]+^,/. ", " +(=_:<[}+|+''+ ", " +1===234+|+'5+ ", " +#==678+|90+5+ ", " +$==aab+|+0+5+ ", " .%]=cc+|9+90+. ", " +cd^^+|9+90+ ", " +^^+|999990+ ", " +/+|99+990+ ", " +|00000000+", " +++++++++++"}; springlobby-0.169/src/images/open_full_game.png.h0000600000176000000410000001254612105760300023373 0ustar buildbotwww-data00000000000000/* open_full_game.png - 842 bytes */ static const unsigned char open_full_game_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1b, 0x15, 0x3b, 0x39, 0x39, 0x7b, 0x44, 0x17, 0x00, 0x00, 0x02, 0xca, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x8d, 0x93, 0xcd, 0x6b, 0x5c, 0x65, 0x14, 0xc6, 0x7f, 0xef, 0x7b, 0xbf, 0x9c, 0xa4, 0x99, 0x7c, 0xcc, 0x34, 0xb1, 0x93, 0xde, 0x86, 0x08, 0xca, 0x58, 0xdb, 0x6a, 0x11, 0x94, 0xb6, 0x54, 0x6d, 0xdd, 0xb9, 0x75, 0xe1, 0x42, 0xfc, 0x13, 0x4a, 0xa1, 0xd0, 0xda, 0x81, 0xfa, 0x81, 0x8b, 0x04, 0x04, 0x0b, 0x22, 0xba, 0x10, 0xff, 0x01, 0x29, 0xae, 0x44, 0xa1, 0x2b, 0x41, 0x82, 0x5f, 0xe8, 0xa2, 0xd9, 0x34, 0x76, 0x6a, 0x40, 0x93, 0x76, 0x92, 0xf1, 0xd6, 0x3b, 0x73, 0x67, 0x72, 0x33, 0x73, 0xef, 0x7d, 0xdf, 0xe3, 0x22, 0x49, 0x41, 0xb1, 0xc5, 0x07, 0x9e, 0xdd, 0x79, 0x7e, 0xe7, 0x1c, 0x38, 0x47, 0xf1, 0x00, 0x35, 0x7f, 0xbb, 0xf5, 0x82, 0x32, 0xe9, 0x3b, 0xa5, 0x34, 0x3a, 0xab, 0x6c, 0x01, 0xa6, 0x40, 0x09, 0x43, 0x46, 0x2b, 0x3f, 0xdb, 0x89, 0x43, 0x97, 0x67, 0x67, 0x67, 0x97, 0x00, 0xdc, 0x7f, 0x07, 0xeb, 0x8d, 0xf0, 0xf9, 0x0f, 0x5e, 0xfd, 0xf8, 0xf3, 0xa0, 0x88, 0xe7, 0xfc, 0xac, 0x8b, 0x92, 0x82, 0x4e, 0x27, 0xa6, 0xc8, 0x32, 0x0e, 0x4e, 0x8c, 0x06, 0xe6, 0xaf, 0xf8, 0x54, 0x11, 0x35, 0xbf, 0x05, 0xf4, 0x3f, 0x00, 0xf5, 0x46, 0xa8, 0x2a, 0x23, 0xd5, 0x85, 0xda, 0xc9, 0xe9, 0x4b, 0xc7, 0x83, 0xb2, 0xf6, 0xb3, 0x84, 0xf5, 0xbb, 0x2d, 0x9a, 0x1b, 0x19, 0x79, 0xf0, 0x28, 0xb9, 0x51, 0xdc, 0xb8, 0xd3, 0xa2, 0xc6, 0x5d, 0x8e, 0x84, 0x15, 0x15, 0x2d, 0x7f, 0xb3, 0x5c, 0x3d, 0x76, 0xe6, 0xd8, 0x7d, 0xc0, 0x64, 0x50, 0x59, 0x98, 0x3b, 0x5b, 0xbb, 0xfc, 0xf6, 0xf4, 0x15, 0x3a, 0x71, 0xca, 0xe3, 0xc7, 0x5f, 0xe2, 0xbb, 0x34, 0xa5, 0xa3, 0x0c, 0x17, 0x5f, 0x7f, 0x1a, 0x11, 0xcb, 0xb9, 0x0f, 0x7f, 0x61, 0xd5, 0x53, 0x9c, 0x3a, 0x33, 0x45, 0xfb, 0xda, 0xbb, 0x47, 0x6f, 0x7c, 0xfa, 0x66, 0xae, 0xf7, 0xc6, 0xae, 0x3c, 0x3b, 0x7e, 0xc9, 0x8e, 0x19, 0xfc, 0x78, 0x93, 0xf9, 0xa3, 0x27, 0x01, 0x18, 0xe6, 0x42, 0x9a, 0x59, 0xc4, 0xee, 0x78, 0x7b, 0x60, 0x18, 0x66, 0x16, 0x80, 0xe0, 0xb9, 0xd7, 0xc8, 0xb7, 0xba, 0xae, 0x0b, 0x50, 0x29, 0x57, 0x2f, 0xea, 0x69, 0xab, 0x93, 0x20, 0xc6, 0x2d, 0x1f, 0xc6, 0x18, 0x83, 0xd6, 0x9a, 0xca, 0x18, 0x34, 0x5b, 0x39, 0xe7, 0x3f, 0xfa, 0x89, 0x61, 0x26, 0x74, 0xd3, 0x82, 0xa7, 0x0e, 0x8d, 0x60, 0xad, 0x45, 0x4f, 0x1d, 0x64, 0xf2, 0xb1, 0x23, 0xe2, 0xd4, 0x1b, 0xa1, 0x33, 0xbe, 0xbf, 0xfc, 0x59, 0x1e, 0x6e, 0xfb, 0xe9, 0x58, 0x9f, 0x09, 0xc6, 0x99, 0x6f, 0x0b, 0x05, 0x2e, 0xb5, 0x6a, 0x40, 0x2b, 0x4a, 0xd9, 0xb8, 0xb7, 0x4d, 0x96, 0x65, 0xbc, 0x71, 0x7a, 0x94, 0xd3, 0x4f, 0x06, 0x64, 0x5b, 0x09, 0xfd, 0x6b, 0x57, 0x68, 0x0d, 0xdc, 0x1f, 0x54, 0xbd, 0x11, 0xd6, 0x66, 0xe6, 0x66, 0xee, 0x98, 0x67, 0x52, 0x06, 0x33, 0x3d, 0xb4, 0xaf, 0xf9, 0xe2, 0xe6, 0x5b, 0x94, 0x5c, 0x45, 0x6f, 0x6a, 0x9a, 0xb4, 0x7a, 0x00, 0x71, 0x3d, 0x04, 0x41, 0x44, 0xf0, 0xa2, 0x4d, 0x26, 0x56, 0x7f, 0xe5, 0xfb, 0xe6, 0x2d, 0x16, 0xda, 0x5f, 0xef, 0x73, 0x01, 0xe9, 0xb7, 0xfb, 0x38, 0x6d, 0x8b, 0xd9, 0x27, 0x18, 0xc9, 0xb9, 0x3e, 0x7e, 0x8f, 0x27, 0x56, 0x4b, 0xcc, 0xb6, 0x97, 0xa9, 0x4e, 0x6e, 0x60, 0xbd, 0x11, 0x44, 0xc0, 0x24, 0x7f, 0xc2, 0xe6, 0x6d, 0x9a, 0x51, 0x8f, 0x85, 0xfc, 0x47, 0xfa, 0xaa, 0xb0, 0xaa, 0xde, 0x08, 0xb5, 0xf2, 0x54, 0xec, 0x4d, 0x3a, 0xe5, 0x62, 0x7e, 0x1b, 0xf6, 0x1b, 0xf4, 0x23, 0x1a, 0xe5, 0x83, 0x52, 0x0a, 0x00, 0x11, 0x41, 0x32, 0xb0, 0x03, 0x0b, 0x9b, 0x0e, 0xee, 0xef, 0x25, 0xf2, 0xd8, 0xac, 0xdf, 0x7c, 0xef, 0x8f, 0x50, 0xaf, 0x2c, 0xae, 0x59, 0xc9, 0xe5, 0x2b, 0x9b, 0x0b, 0xaa, 0xe7, 0x60, 0x3b, 0x60, 0x12, 0x4b, 0xd1, 0xb1, 0x14, 0x5d, 0xb3, 0xe3, 0x8e, 0xc5, 0x24, 0x16, 0xdb, 0x01, 0x9d, 0xb8, 0xd8, 0xa1, 0x20, 0xb9, 0x7c, 0xc9, 0xde, 0x35, 0x01, 0xef, 0x9b, 0xd4, 0x1a, 0x27, 0xf2, 0xd1, 0x89, 0x8b, 0xa4, 0xec, 0x76, 0xdc, 0xb1, 0x64, 0x20, 0x29, 0xe8, 0xae, 0x87, 0x8e, 0x3d, 0xcc, 0xc0, 0x0e, 0x81, 0xab, 0x00, 0x0e, 0x40, 0xb4, 0x94, 0x6c, 0x54, 0x4f, 0x94, 0x73, 0x0c, 0x2f, 0xbb, 0xb9, 0x07, 0x02, 0xca, 0x80, 0x58, 0x20, 0x57, 0xa8, 0x9e, 0x83, 0xdb, 0xf5, 0x71, 0x22, 0x9f, 0xa2, 0x6b, 0x90, 0xa1, 0x9c, 0x5f, 0x59, 0x5c, 0xbb, 0x7e, 0x1f, 0xb0, 0x0b, 0x59, 0xaa, 0x9c, 0x28, 0x0f, 0x6c, 0x21, 0x2f, 0xea, 0x81, 0xeb, 0x38, 0x5b, 0x1e, 0x4e, 0xea, 0xe1, 0x24, 0x1e, 0x4e, 0xec, 0x21, 0x5d, 0x4d, 0xb1, 0x65, 0x87, 0xbb, 0xe1, 0x4f, 0xf6, 0x72, 0xea, 0x3f, 0x9e, 0xe9, 0x30, 0x70, 0x41, 0x79, 0xea, 0x15, 0x34, 0x07, 0x00, 0xb0, 0xac, 0xef, 0xee, 0x7c, 0x75, 0x65, 0x71, 0xed, 0x36, 0xff, 0x57, 0xf5, 0x46, 0x38, 0x52, 0x6f, 0x84, 0xa5, 0x87, 0xd5, 0xfc, 0x0d, 0xf2, 0x83, 0x6a, 0xde, 0xf4, 0x0d, 0x38, 0xb9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/open_full_pw_game.png.h0000600000176000000410000001316112105760300024073 0ustar buildbotwww-data00000000000000/* open_full_pw_game.png - 883 bytes */ static const unsigned char open_full_pw_game_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1b, 0x11, 0x29, 0x01, 0x6e, 0x84, 0x24, 0x86, 0x00, 0x00, 0x02, 0xf3, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x75, 0x93, 0x4b, 0x68, 0x5c, 0x65, 0x18, 0x86, 0x9f, 0xff, 0x9f, 0x73, 0xe6, 0x74, 0x66, 0x32, 0x93, 0x99, 0xcc, 0x74, 0xd2, 0x4e, 0x32, 0x0d, 0x11, 0x85, 0x68, 0xd3, 0xd4, 0x2a, 0x55, 0x68, 0xa9, 0xb4, 0x85, 0x52, 0xf7, 0x2e, 0x5c, 0x88, 0x6b, 0x57, 0x52, 0x10, 0x5a, 0x1b, 0x88, 0x17, 0x14, 0xe3, 0xaa, 0x05, 0x11, 0x5d, 0x88, 0x2b, 0xc1, 0x85, 0x14, 0x45, 0x14, 0xdc, 0x88, 0x08, 0x2a, 0xf5, 0xda, 0x45, 0xd2, 0x45, 0x9b, 0x4c, 0x4d, 0xb1, 0x26, 0x73, 0x73, 0x9a, 0x33, 0x97, 0xe4, 0xcc, 0x9c, 0xcb, 0xff, 0xff, 0x2e, 0xd2, 0x8c, 0x54, 0xe8, 0x07, 0xdf, 0xf2, 0x7d, 0xbe, 0xf7, 0x83, 0xf7, 0x15, 0x3c, 0x60, 0x2a, 0x7f, 0xae, 0x3e, 0x23, 0x94, 0xf7, 0x46, 0xc2, 0x6b, 0x9d, 0x16, 0x3a, 0x02, 0x15, 0x21, 0x0c, 0x3e, 0xa9, 0xfc, 0x1f, 0x3a, 0x7b, 0xe0, 0xe2, 0xc4, 0xc4, 0xc4, 0x4f, 0x00, 0xd6, 0xff, 0x85, 0x33, 0xf3, 0xe5, 0xa7, 0x2f, 0x3d, 0xf7, 0xc1, 0x67, 0x4e, 0xe4, 0x4e, 0xc5, 0x83, 0x0e, 0xc2, 0x44, 0xb4, 0xdb, 0x2e, 0x51, 0x10, 0x30, 0x99, 0x4d, 0x39, 0x6a, 0xd3, 0x3d, 0x1e, 0xb5, 0x2a, 0x3f, 0x00, 0xf2, 0x3e, 0xc0, 0xcc, 0x7c, 0x59, 0xe4, 0x93, 0x85, 0xc5, 0xd2, 0xb1, 0xe2, 0x85, 0x23, 0x4e, 0x46, 0xc6, 0x83, 0x2e, 0xeb, 0xd5, 0x1a, 0x95, 0x7a, 0x40, 0xe8, 0xec, 0x23, 0x54, 0x82, 0xa5, 0x8d, 0x1a, 0x25, 0xaa, 0xcc, 0x96, 0xf3, 0xa2, 0xb5, 0xfc, 0xfd, 0x72, 0x61, 0xee, 0xd4, 0xdc, 0x10, 0x90, 0x73, 0xf2, 0x8b, 0x53, 0xa7, 0x4b, 0x17, 0x5f, 0x2f, 0x2e, 0xd0, 0x76, 0x3d, 0x1e, 0x39, 0x72, 0x92, 0xab, 0x9e, 0x47, 0x5b, 0x28, 0xce, 0xbf, 0x70, 0x18, 0x63, 0x34, 0x2f, 0xbf, 0x77, 0x8d, 0x35, 0x5b, 0x70, 0xfc, 0xd4, 0x18, 0xcd, 0x2b, 0x6f, 0x1e, 0x5a, 0xfa, 0xe8, 0xd5, 0x50, 0xee, 0xda, 0xce, 0x3f, 0x39, 0x7a, 0x41, 0xa7, 0x15, 0x71, 0xb7, 0xc1, 0xf4, 0xa1, 0x63, 0x00, 0xf8, 0xa1, 0xc1, 0x0b, 0x34, 0x46, 0xef, 0x6c, 0x7f, 0xa0, 0xf0, 0x03, 0x0d, 0x80, 0xf3, 0xd4, 0xf3, 0x84, 0xdb, 0x1d, 0xcb, 0x02, 0xc8, 0x67, 0x0a, 0xe7, 0x65, 0x51, 0xcb, 0xae, 0xe3, 0x62, 0x65, 0x1e, 0x43, 0x29, 0x85, 0x94, 0x92, 0x7c, 0x1a, 0x2a, 0xb5, 0x90, 0x73, 0xef, 0xff, 0x86, 0x1f, 0x18, 0x3a, 0x5e, 0xc4, 0xc1, 0x03, 0x49, 0xb4, 0xd6, 0xc8, 0xb1, 0x49, 0x72, 0x0f, 0xcd, 0x9a, 0xd8, 0xcc, 0x7c, 0x39, 0x36, 0xba, 0x37, 0xf3, 0x71, 0x58, 0xee, 0xc7, 0xbd, 0xf4, 0x16, 0x59, 0x46, 0x99, 0x6e, 0x1a, 0x22, 0x2c, 0x4a, 0x05, 0x87, 0x5a, 0xcb, 0xa3, 0x7e, 0xb7, 0x4f, 0x10, 0x04, 0xbc, 0x78, 0x22, 0xc5, 0x89, 0x47, 0x1d, 0x82, 0xed, 0x2e, 0x5b, 0x57, 0x16, 0xa8, 0x0d, 0xac, 0x5f, 0xc4, 0xcc, 0x7c, 0xb9, 0x34, 0x3e, 0x35, 0xbe, 0xa1, 0x1e, 0xf7, 0x18, 0x8c, 0xf7, 0x90, 0x71, 0xc9, 0xe7, 0x37, 0x5e, 0x23, 0x61, 0x09, 0x7a, 0x63, 0x45, 0xbc, 0xc2, 0x7e, 0x8c, 0x65, 0x63, 0x30, 0x18, 0x63, 0xb0, 0x5b, 0x0d, 0xb2, 0x6b, 0x2b, 0xfc, 0x5c, 0x59, 0x65, 0xb1, 0xf9, 0xcd, 0x88, 0xf5, 0xd2, 0x9e, 0xde, 0xe4, 0xed, 0x4d, 0xc9, 0xbe, 0x55, 0x41, 0xb6, 0x26, 0xc8, 0x85, 0x82, 0x3b, 0x69, 0x17, 0xd3, 0x72, 0xd8, 0xdf, 0x5c, 0xa6, 0x90, 0xab, 0xa3, 0xed, 0x24, 0xc6, 0x80, 0xea, 0xfe, 0x03, 0x8d, 0x5b, 0x54, 0x5a, 0x3d, 0x16, 0xc3, 0x5f, 0xd9, 0x12, 0x91, 0x16, 0xfe, 0x97, 0x47, 0x83, 0xbe, 0xb6, 0xec, 0x4f, 0xbe, 0x6d, 0x72, 0xf6, 0x68, 0x8e, 0xb1, 0x11, 0x9b, 0x50, 0x69, 0x7a, 0x9e, 0x62, 0xa5, 0xde, 0xe6, 0xed, 0xb3, 0x5d, 0x06, 0x8e, 0xc0, 0x04, 0xa0, 0x07, 0x1a, 0x1a, 0x31, 0xac, 0xbf, 0x12, 0x84, 0xae, 0x5a, 0xbf, 0xf1, 0xd6, 0x9d, 0xb2, 0x8c, 0x27, 0x12, 0xf6, 0xca, 0x7a, 0x9f, 0xcb, 0x5f, 0x6c, 0xf0, 0xe9, 0x77, 0xcd, 0x61, 0xa0, 0x84, 0x00, 0x63, 0x20, 0xea, 0x2a, 0xa2, 0xb6, 0x46, 0x75, 0x35, 0xba, 0x0d, 0xb2, 0x6b, 0xa1, 0x7d, 0x83, 0x09, 0xcd, 0xd7, 0xc3, 0x20, 0x95, 0xf7, 0x3a, 0xe4, 0xd2, 0x16, 0x27, 0x0f, 0x67, 0xef, 0x4b, 0xa5, 0x10, 0xa0, 0xfd, 0x1d, 0x10, 0x03, 0x90, 0x1d, 0x1b, 0xe9, 0xda, 0x84, 0x03, 0xe5, 0x03, 0x97, 0x87, 0x80, 0x42, 0xc6, 0xe6, 0xe0, 0x54, 0x92, 0x27, 0x1e, 0x1e, 0x21, 0x8c, 0xcc, 0x3d, 0xb1, 0x40, 0x00, 0x6c, 0x0b, 0x44, 0x2f, 0x46, 0xcc, 0xb3, 0x90, 0xae, 0x4d, 0xd4, 0x51, 0x18, 0xdf, 0xbc, 0x72, 0xf3, 0xdd, 0xbf, 0x6f, 0x0d, 0x01, 0x9e, 0xaf, 0xa9, 0x6c, 0xf4, 0xa9, 0xdd, 0x0d, 0x28, 0x8c, 0xda, 0x3b, 0x00, 0x00, 0x03, 0xf1, 0x6a, 0x02, 0xa3, 0x76, 0x6c, 0x87, 0x03, 0xe5, 0xdf, 0x13, 0x7f, 0xb8, 0xeb, 0xd2, 0x52, 0x51, 0xa8, 0x95, 0x46, 0xce, 0x4d, 0xa7, 0xa8, 0x6e, 0xfa, 0xff, 0x01, 0x04, 0xa0, 0x0d, 0xfd, 0xb5, 0x88, 0x20, 0x6e, 0xaa, 0x02, 0xbe, 0x12, 0x31, 0x71, 0x69, 0xf7, 0xf2, 0xf0, 0xcd, 0xab, 0x0b, 0xa9, 0x67, 0x93, 0xe9, 0xcc, 0x19, 0x67, 0x8f, 0x33, 0x6b, 0xa4, 0x55, 0xd4, 0x46, 0xa4, 0x0d, 0xa4, 0xbd, 0xbe, 0x72, 0x6f, 0x37, 0xb6, 0x97, 0xde, 0xf9, 0xbd, 0x7b, 0xee, 0xfa, 0x8f, 0xfd, 0xfa, 0x83, 0x6a, 0xff, 0x2f, 0xbe, 0x25, 0x70, 0x25, 0x0c, 0xa8, 0x3e, 0xac, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/open_game.png.h0000600000176000000410000001113112105760300022336 0ustar buildbotwww-data00000000000000/* open_game.png - 721 bytes */ static const unsigned char open_game_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x14, 0x10, 0x18, 0x2c, 0xb4, 0xa7, 0x05, 0x20, 0x00, 0x00, 0x02, 0x51, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x8d, 0x93, 0xbf, 0x6b, 0x53, 0x51, 0x1c, 0xc5, 0x3f, 0xf7, 0xc7, 0x7b, 0xa9, 0x69, 0x1a, 0x84, 0xb6, 0x29, 0xad, 0x46, 0x44, 0x10, 0x82, 0xff, 0x40, 0xd1, 0xa5, 0x83, 0x82, 0xe0, 0x3f, 0x23, 0x08, 0x15, 0x33, 0x74, 0x35, 0xd0, 0xc1, 0xd1, 0xd1, 0xff, 0xc0, 0x49, 0x1c, 0x9c, 0x5c, 0xa2, 0x9b, 0xe0, 0x98, 0x41, 0x07, 0x49, 0x45, 0x9b, 0x06, 0x9a, 0xbc, 0x24, 0x2f, 0x2f, 0xef, 0xfe, 0xf8, 0x3a, 0x34, 0x2d, 0x0a, 0x55, 0x3c, 0x97, 0x03, 0x77, 0xf8, 0x9e, 0x73, 0x39, 0xf7, 0x9e, 0xab, 0xf8, 0x0b, 0x5a, 0xed, 0xa6, 0x01, 0xb6, 0x00, 0x01, 0x8e, 0x7b, 0x9d, 0x7e, 0xbc, 0x6c, 0x4e, 0x5d, 0x22, 0xdc, 0xdd, 0xd9, 0xd9, 0xd9, 0xaf, 0xdd, 0xa8, 0x3e, 0xac, 0xd5, 0x6a, 0x35, 0x80, 0xc9, 0x6c, 0x92, 0xe5, 0x47, 0xc5, 0xdb, 0xef, 0xfd, 0xef, 0x87, 0xbd, 0x4e, 0xff, 0xf3, 0xa5, 0x06, 0xad, 0x76, 0x53, 0xad, 0x57, 0x37, 0x9e, 0xef, 0xdc, 0x6b, 0x3c, 0xdd, 0x6e, 0x34, 0xb4, 0x4f, 0x23, 0xca, 0x04, 0x00, 0xa2, 0x33, 0x24, 0x5e, 0xf3, 0x63, 0x30, 0x08, 0x3f, 0x3e, 0x0e, 0x0f, 0xba, 0x07, 0x9f, 0x3a, 0xe7, 0x3a, 0x73, 0xbe, 0xb9, 0xfd, 0xe0, 0x56, 0xe7, 0xe6, 0x83, 0x6b, 0xcf, 0xae, 0x6c, 0x56, 0xd4, 0x6c, 0x6d, 0x46, 0x99, 0x16, 0xe4, 0x2b, 0x39, 0x45, 0x5a, 0xe0, 0x6d, 0x49, 0x61, 0xe7, 0x54, 0x2a, 0x2b, 0x7a, 0x6d, 0x6b, 0xf5, 0x7e, 0xfd, 0xd6, 0x6a, 0xd1, 0x7f, 0xff, 0xf3, 0xc3, 0x85, 0x41, 0xab, 0xdd, 0xdc, 0xbd, 0xbe, 0xbb, 0xfd, 0x2a, 0x69, 0x18, 0x95, 0xaf, 0x4d, 0xf0, 0x69, 0x89, 0xd3, 0x67, 0xf4, 0xca, 0xe1, 0x95, 0xc3, 0xd9, 0x92, 0x85, 0x99, 0xa3, 0xd1, 0xd8, 0x15, 0xbb, 0xa7, 0x6f, 0x86, 0xd7, 0xc3, 0x6e, 0x76, 0xa2, 0x01, 0xd6, 0xeb, 0x1b, 0xfb, 0xba, 0x11, 0x75, 0x56, 0x39, 0x65, 0x5a, 0x19, 0x53, 0xc8, 0x9c, 0x42, 0xe6, 0xf8, 0xe0, 0xf0, 0xc1, 0x51, 0xc8, 0x9c, 0xb9, 0x9a, 0x31, 0xad, 0x8c, 0x19, 0x55, 0x87, 0xe8, 0x46, 0x4c, 0x36, 0xaf, 0x36, 0x9e, 0x00, 0xd8, 0x56, 0xbb, 0x69, 0x92, 0xba, 0x7d, 0x38, 0x35, 0x13, 0xca, 0x74, 0x8e, 0x16, 0x70, 0xca, 0xa1, 0xd4, 0x9f, 0xf7, 0x2b, 0x22, 0x04, 0x3c, 0xd1, 0x80, 0x33, 0x01, 0xbb, 0x96, 0x3c, 0x02, 0xb0, 0xc0, 0x96, 0x18, 0xa9, 0x95, 0xbe, 0xa4, 0x20, 0x47, 0x47, 0xcd, 0xf9, 0xfa, 0x1d, 0x91, 0xb8, 0x34, 0x09, 0x28, 0x67, 0x30, 0xda, 0x6c, 0xb7, 0xda, 0xcd, 0xaa, 0x05, 0x64, 0x3a, 0x98, 0x62, 0x06, 0x91, 0x50, 0x13, 0x82, 0x38, 0x94, 0xbd, 0xbc, 0x1b, 0xe2, 0x81, 0x5c, 0xe3, 0x4e, 0x02, 0xf9, 0x60, 0x0a, 0x20, 0x16, 0x38, 0xce, 0x7d, 0x9e, 0x25, 0x5f, 0x4d, 0xdd, 0x47, 0x0f, 0x9b, 0x01, 0xbd, 0xa2, 0x51, 0x29, 0x17, 0x31, 0x44, 0x04, 0x29, 0x21, 0x16, 0x11, 0x8e, 0x0d, 0xe1, 0x5b, 0x89, 0xf3, 0xe1, 0xa8, 0xd7, 0xe9, 0xcf, 0x75, 0xaf, 0xd3, 0x8f, 0xe2, 0xe4, 0x6d, 0x74, 0x82, 0x9a, 0x18, 0xe2, 0x08, 0x42, 0x16, 0xf1, 0xa3, 0x88, 0x1f, 0x87, 0x33, 0x8e, 0x22, 0x21, 0x8b, 0xc4, 0x11, 0xe8, 0xcc, 0x12, 0x17, 0x82, 0x38, 0x79, 0x03, 0x5c, 0x04, 0x3d, 0x0c, 0x79, 0x0c, 0x66, 0x98, 0xa2, 0x33, 0x8b, 0xe4, 0x2c, 0x4f, 0x3c, 0xa3, 0x94, 0x20, 0x39, 0xe8, 0x71, 0x82, 0x3e, 0x4d, 0x08, 0x45, 0x5c, 0x00, 0x2f, 0x2e, 0x7a, 0x30, 0xec, 0x66, 0x3f, 0x37, 0xee, 0xd6, 0x1d, 0x81, 0xfb, 0xd6, 0x25, 0x20, 0xa0, 0x02, 0x48, 0x04, 0x9c, 0x42, 0x4d, 0x0c, 0x76, 0x9c, 0x62, 0x86, 0x29, 0x7e, 0x1c, 0x90, 0x85, 0x3c, 0xee, 0x75, 0xfa, 0xef, 0xfe, 0x68, 0xe2, 0xb0, 0x9b, 0x75, 0xd7, 0xef, 0xd6, 0x8b, 0xe8, 0x65, 0x4f, 0x17, 0xd6, 0x98, 0x59, 0x82, 0xc9, 0x13, 0x4c, 0x96, 0x60, 0x4e, 0x13, 0x64, 0xac, 0xf1, 0xb3, 0xb8, 0x58, 0x8a, 0x5f, 0xfe, 0xeb, 0x33, 0xdd, 0x01, 0x9e, 0xa8, 0x44, 0x3d, 0x42, 0xb3, 0xbd, 0x7c, 0xc3, 0xa3, 0x65, 0xe6, 0x17, 0xbd, 0x4e, 0xff, 0x0b, 0xff, 0x8b, 0x56, 0xbb, 0x59, 0x6d, 0xb5, 0x9b, 0x57, 0xfe, 0x35, 0xf3, 0x0b, 0xf4, 0x62, 0x3e, 0xf6, 0x24, 0xe2, 0x18, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/open_pw_game.png.h0000600000176000000410000001212512105760300023050 0ustar buildbotwww-data00000000000000/* open_pw_game.png - 800 bytes */ static const unsigned char open_pw_game_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1b, 0x11, 0x28, 0x26, 0xd2, 0x95, 0xa0, 0xac, 0x00, 0x00, 0x02, 0xa0, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0x75, 0x93, 0xcd, 0x6b, 0x5c, 0x55, 0x18, 0xc6, 0x7f, 0xe7, 0xe3, 0xce, 0x9d, 0x4c, 0x66, 0xc6, 0xc4, 0x4e, 0x26, 0x26, 0x76, 0xb4, 0x16, 0x0b, 0x03, 0x15, 0x0b, 0x82, 0x04, 0xdc, 0x28, 0xb4, 0xd2, 0xe2, 0x3f, 0x22, 0xb8, 0x11, 0x0a, 0x15, 0x07, 0xec, 0x52, 0x07, 0x04, 0xbb, 0x74, 0xe9, 0x42, 0x70, 0x23, 0xd8, 0x45, 0x8b, 0x2b, 0x11, 0x17, 0xc6, 0x6e, 0x44, 0x50, 0xdc, 0x44, 0x2d, 0x16, 0x99, 0x7c, 0x34, 0xd3, 0xd8, 0x49, 0x66, 0x32, 0xf7, 0xdc, 0xb9, 0xe7, 0xcb, 0xc5, 0x64, 0x12, 0x0b, 0xe9, 0x7b, 0x38, 0x70, 0x16, 0xe7, 0xf9, 0xbd, 0xcf, 0x79, 0x79, 0x8e, 0xe0, 0x29, 0xd5, 0xee, 0xb4, 0x14, 0xb0, 0x0c, 0x44, 0x60, 0x77, 0xa3, 0xdb, 0x0b, 0xa7, 0xdd, 0x13, 0xa7, 0x08, 0xd7, 0x56, 0x57, 0x57, 0x6f, 0x54, 0x5f, 0xa8, 0x5c, 0xad, 0x56, 0xab, 0x55, 0x80, 0xd1, 0x78, 0x34, 0xcc, 0x36, 0xf3, 0x6f, 0xb7, 0x7a, 0x5b, 0x9f, 0x6e, 0x74, 0x7b, 0xbf, 0x9e, 0x0a, 0x68, 0x77, 0x5a, 0xe2, 0x4c, 0xa5, 0xf1, 0xc9, 0xea, 0x1b, 0xcd, 0x0f, 0x56, 0x9a, 0x4d, 0xe9, 0x4a, 0x01, 0xa1, 0x3c, 0x00, 0xc1, 0x2a, 0x12, 0x27, 0xd9, 0xe9, 0xf7, 0xfd, 0xce, 0xbd, 0xbd, 0x9b, 0xeb, 0x37, 0x7f, 0xe9, 0xce, 0x74, 0x6a, 0x76, 0xb8, 0x70, 0xe5, 0x7c, 0xf7, 0xdc, 0x95, 0xe7, 0x3f, 0x9c, 0x5b, 0x4a, 0xc5, 0xb8, 0x36, 0xa6, 0x28, 0xe5, 0x64, 0xe5, 0x8c, 0xbc, 0x94, 0xe3, 0x74, 0x41, 0xae, 0x0d, 0x69, 0x5a, 0x96, 0xb5, 0xe5, 0xf9, 0xcb, 0xf5, 0xf3, 0xf3, 0x79, 0xef, 0x87, 0x87, 0x3f, 0x1d, 0x03, 0xda, 0x9d, 0xd6, 0xda, 0xd9, 0xb5, 0x95, 0x2f, 0x92, 0xa6, 0x12, 0x59, 0x6d, 0x84, 0x2b, 0x15, 0x58, 0x39, 0xdd, 0x4e, 0x58, 0x9c, 0xb0, 0x58, 0x5d, 0x30, 0x51, 0x06, 0x89, 0x44, 0x97, 0xf5, 0x9b, 0xf2, 0x9c, 0xff, 0x66, 0x6f, 0x7d, 0xf8, 0x48, 0x02, 0x9c, 0xa9, 0x37, 0x6e, 0xc8, 0x66, 0x90, 0xc3, 0x74, 0xc0, 0x61, 0x7a, 0x40, 0x1e, 0x0d, 0x79, 0x34, 0x38, 0x6f, 0x71, 0xde, 0x92, 0x47, 0x83, 0x11, 0x63, 0x0e, 0xd3, 0x03, 0xf6, 0x2b, 0x7b, 0xc8, 0x66, 0x48, 0x96, 0x16, 0x9a, 0xd7, 0x01, 0x74, 0xbb, 0xd3, 0x52, 0x49, 0x5d, 0x5f, 0x3d, 0x54, 0x23, 0x8a, 0x92, 0x41, 0x46, 0xb0, 0xc2, 0x22, 0xc4, 0x93, 0xf3, 0x8d, 0x31, 0xe2, 0x71, 0x04, 0x05, 0x56, 0x79, 0x74, 0x2d, 0x79, 0x07, 0x40, 0x03, 0xcb, 0x51, 0xc5, 0x6a, 0xe1, 0x0a, 0x72, 0x32, 0x64, 0x90, 0xcc, 0xd6, 0xff, 0x2b, 0x10, 0x8e, 0x20, 0x1e, 0x61, 0x15, 0x4a, 0xaa, 0x95, 0x76, 0xa7, 0x55, 0xd1, 0xef, 0x96, 0x47, 0x67, 0x1f, 0x3c, 0x96, 0x3c, 0xf7, 0xa7, 0x60, 0x61, 0x47, 0xb0, 0x68, 0x05, 0x8b, 0xb9, 0xc4, 0x98, 0xc0, 0x7d, 0x67, 0xf8, 0xfa, 0x9a, 0xc0, 0x27, 0x53, 0x37, 0xd1, 0x01, 0x99, 0xc4, 0x3e, 0xf2, 0x64, 0xfd, 0x43, 0x80, 0xa8, 0xdf, 0xbb, 0x74, 0x61, 0xdd, 0x04, 0xcd, 0x97, 0xdf, 0xf5, 0xb9, 0xfc, 0x7a, 0x83, 0x67, 0xab, 0x09, 0x36, 0x09, 0x8c, 0xac, 0x47, 0xed, 0xed, 0xc3, 0x60, 0x88, 0x4d, 0x05, 0xb1, 0x80, 0x90, 0x07, 0xd8, 0x55, 0xf8, 0x7f, 0x0a, 0xac, 0xf3, 0x9b, 0x1b, 0xdd, 0x9e, 0x91, 0xa5, 0xb9, 0xb9, 0xe4, 0x8f, 0x4d, 0xc3, 0xad, 0xdb, 0x5b, 0x7c, 0xf5, 0x7d, 0xff, 0x24, 0x20, 0x02, 0x62, 0x04, 0x37, 0xf4, 0xb8, 0xfd, 0x80, 0x1f, 0x06, 0xc2, 0x3e, 0xc8, 0xa1, 0x26, 0x4c, 0x22, 0xd1, 0xc6, 0xbb, 0xb3, 0x19, 0xd0, 0x5a, 0x4a, 0x59, 0xac, 0x69, 0xde, 0xba, 0xb4, 0xf0, 0x64, 0x4c, 0x05, 0x84, 0xc9, 0x14, 0x44, 0x0e, 0xf2, 0x20, 0x41, 0x0e, 0x12, 0x6c, 0xee, 0x27, 0xc0, 0xad, 0x63, 0x40, 0xa3, 0x9e, 0x70, 0xf1, 0xc5, 0x0a, 0xaf, 0xbd, 0x5c, 0xc5, 0xba, 0x78, 0x24, 0x16, 0xd3, 0x98, 0x8e, 0x05, 0x62, 0xa4, 0x50, 0x99, 0x46, 0x0e, 0x12, 0xdc, 0x81, 0x27, 0x4e, 0xe2, 0xf5, 0x8d, 0x6e, 0xef, 0xfe, 0x31, 0x20, 0x9b, 0x04, 0xfe, 0xda, 0x32, 0xec, 0xfc, 0x5b, 0xd0, 0x78, 0x26, 0x39, 0xc9, 0x78, 0x84, 0xd2, 0xf6, 0x1c, 0xd1, 0x4f, 0x6d, 0xdb, 0xdc, 0x4f, 0x8e, 0xc4, 0x9f, 0xcf, 0x5c, 0x6a, 0xef, 0x6c, 0xf0, 0x01, 0xf9, 0xea, 0x4b, 0xf3, 0x6c, 0x3f, 0x9e, 0x9c, 0x00, 0x04, 0x10, 0x22, 0xe6, 0x6f, 0x47, 0x51, 0x8a, 0xdb, 0x02, 0xee, 0x08, 0x25, 0x3e, 0x9b, 0x75, 0x3e, 0x7e, 0xe6, 0xbd, 0x8f, 0xe6, 0xaf, 0x55, 0x6a, 0xf5, 0xb7, 0xd3, 0x72, 0xfa, 0x4a, 0x94, 0xba, 0x19, 0xa2, 0xa8, 0x45, 0xa8, 0x65, 0xc6, 0x0f, 0x1e, 0xec, 0x8e, 0x7f, 0xfb, 0xf8, 0xe7, 0xe1, 0xfb, 0xbf, 0xff, 0x68, 0x1e, 0x3e, 0xed, 0xdb, 0xff, 0x07, 0x11, 0x97, 0x44, 0x34, 0x15, 0x45, 0xa6, 0x90, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 }; /* End Of File */ springlobby-0.169/src/images/options_icon.png.h0000600000176000000410000003226612105760300023123 0ustar buildbotwww-data00000000000000/* options_icon.png - 2100 bytes */ static const unsigned char options_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a, 0xf4, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0d, 0xd7, 0x00, 0x00, 0x0d, 0xd7, 0x01, 0x42, 0x28, 0x9b, 0x78, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x0a, 0x06, 0x16, 0x03, 0x0c, 0x67, 0x52, 0xb3, 0xb5, 0x00, 0x00, 0x07, 0xb4, 0x49, 0x44, 0x41, 0x54, 0x58, 0x47, 0xed, 0x56, 0x69, 0x50, 0x5b, 0xd7, 0x15, 0x3e, 0x4f, 0xef, 0x69, 0x97, 0x10, 0x12, 0x92, 0xd8, 0x24, 0x10, 0x3b, 0x66, 0x17, 0xc8, 0x36, 0x6e, 0xe3, 0x26, 0x80, 0x29, 0x2e, 0x74, 0xa6, 0x0d, 0x75, 0x9c, 0xe2, 0x24, 0x93, 0xd6, 0xf6, 0xbf, 0x76, 0xa6, 0xf6, 0xd4, 0x09, 0x98, 0x4c, 0xff, 0xd9, 0x20, 0xbb, 0x71, 0xa8, 0xa7, 0xd3, 0xce, 0x24, 0x21, 0x4e, 0x3a, 0xe3, 0x4e, 0x67, 0x9a, 0x76, 0x52, 0x7b, 0x8a, 0x6d, 0x90, 0x84, 0x9d, 0x26, 0x76, 0xbd, 0x15, 0x1b, 0x9c, 0x50, 0x17, 0xb3, 0x9a, 0x45, 0x42, 0x68, 0xdf, 0xd1, 0xf2, 0xd4, 0x7b, 0x95, 0x88, 0x11, 0x02, 0x6c, 0x77, 0xfa, 0xb3, 0x7d, 0x33, 0x77, 0x9e, 0xee, 0xd5, 0x39, 0xdf, 0xf7, 0xbd, 0x73, 0xcf, 0x39, 0xf7, 0x02, 0xfc, 0xaf, 0x3f, 0xc4, 0xb3, 0x04, 0xe0, 0xd4, 0x2f, 0x7b, 0xea, 0x01, 0x88, 0xfd, 0x0c, 0x06, 0x41, 0xa3, 0x67, 0x29, 0x1a, 0x85, 0xfe, 0xae, 0x37, 0xbb, 0x5d, 0xcf, 0xe2, 0x1b, 0xb7, 0xe9, 0xe9, 0xeb, 0xe7, 0x74, 0x1f, 0x3d, 0x1c, 0x48, 0xf6, 0x79, 0xaa, 0x80, 0xde, 0x53, 0xbd, 0xac, 0x94, 0x14, 0x81, 0xef, 0x07, 0x2f, 0xbe, 0x44, 0x46, 0x22, 0x11, 0x70, 0xb9, 0x9c, 0x30, 0xfa, 0xe0, 0xbe, 0x6b, 0x6e, 0x6e, 0xf6, 0xe5, 0xce, 0x37, 0xba, 0xaf, 0x24, 0x03, 0x6e, 0x36, 0xef, 0xed, 0xfb, 0xe0, 0xb0, 0x50, 0x98, 0xf2, 0x9e, 0xc7, 0xe3, 0x6e, 0xed, 0x3a, 0x72, 0x70, 0x9d, 0x0f, 0xb9, 0x99, 0x43, 0xe2, 0x9a, 0x41, 0x6f, 0x88, 0x3c, 0xdf, 0xb0, 0xfb, 0x8a, 0xdb, 0xed, 0x7e, 0x51, 0x91, 0xad, 0xe4, 0xe1, 0xff, 0x0a, 0xf2, 0x0b, 0xd9, 0xe1, 0x70, 0xf8, 0x65, 0x75, 0x5d, 0xcd, 0x5f, 0x74, 0x43, 0x7a, 0xf3, 0x56, 0x18, 0xda, 0xb3, 0xef, 0x12, 0xdf, 0x6e, 0xdb, 0x77, 0xa6, 0xb8, 0xb4, 0xb4, 0x27, 0xbf, 0xb8, 0x08, 0x7f, 0xec, 0x2b, 0xdb, 0x77, 0x7c, 0x6b, 0xd6, 0x30, 0x78, 0x71, 0x34, 0xee, 0xc3, 0xd8, 0xca, 0x39, 0x71, 0xbd, 0xf3, 0x58, 0xf7, 0xed, 0x99, 0x99, 0xa9, 0xa6, 0xbf, 0x7d, 0x76, 0x6d, 0x91, 0xcd, 0x66, 0x83, 0xcf, 0xe7, 0x03, 0x75, 0x4d, 0x1d, 0x53, 0x28, 0x10, 0xbe, 0xb5, 0x95, 0xbf, 0xf6, 0x9d, 0x73, 0x2c, 0x36, 0x5b, 0x70, 0xb1, 0xba, 0xb6, 0xe6, 0x67, 0xf2, 0x8c, 0x8c, 0x58, 0xa4, 0x73, 0x54, 0x2a, 0x22, 0x3d, 0x3b, 0xeb, 0x23, 0x6d, 0xdf, 0x07, 0x4d, 0xff, 0x91, 0x00, 0x6c, 0xfc, 0xe6, 0xb1, 0xe3, 0x63, 0x8f, 0xe7, 0xe7, 0xde, 0x0b, 0xac, 0x06, 0x80, 0xc1, 0x60, 0x40, 0x14, 0x25, 0x42, 0x46, 0x46, 0xc6, 0xfe, 0x9e, 0x53, 0x3d, 0x54, 0xb2, 0x88, 0x13, 0x67, 0xce, 0x11, 0x7c, 0x21, 0xef, 0xba, 0x66, 0x7b, 0x5d, 0x1b, 0x8f, 0x2f, 0x88, 0x6d, 0x1d, 0x1e, 0xc1, 0x40, 0x00, 0x1c, 0x36, 0xbb, 0xae, 0xeb, 0xe8, 0x21, 0x43, 0xdc, 0x67, 0x83, 0x33, 0x4a, 0xb8, 0x46, 0x44, 0xf0, 0x3a, 0x1d, 0x0e, 0xfd, 0xb8, 0xb3, 0xf3, 0x17, 0x74, 0x22, 0x38, 0x83, 0x41, 0x5a, 0x10, 0x33, 0x70, 0x79, 0xbc, 0x98, 0x08, 0x3e, 0x4f, 0x40, 0x10, 0x04, 0xcd, 0x45, 0x36, 0xee, 0x44, 0x3b, 0x8a, 0x0a, 0x11, 0x69, 0x69, 0x62, 0x4d, 0x30, 0x14, 0x86, 0x90, 0x1f, 0xe5, 0x1d, 0xf2, 0x41, 0x09, 0x0c, 0x33, 0x53, 0x33, 0xa6, 0xd5, 0x55, 0xff, 0x81, 0x75, 0x98, 0xc9, 0xea, 0xb3, 0xb2, 0xb2, 0x2f, 0xed, 0xdf, 0xd7, 0xf1, 0x9a, 0x48, 0x2c, 0xb9, 0xa0, 0x7d, 0xfb, 0xc4, 0x9a, 0xc0, 0xde, 0xd3, 0x27, 0x79, 0x62, 0x71, 0xea, 0x81, 0xd4, 0x54, 0x31, 0x70, 0x38, 0x9c, 0xd8, 0xc0, 0x5f, 0x45, 0xd0, 0xe0, 0x4f, 0xc6, 0xa0, 0x69, 0x4a, 0x80, 0xaa, 0x05, 0xfc, 0x3e, 0x0f, 0xf8, 0x3c, 0x1e, 0x08, 0xf8, 0x7d, 0xb0, 0xb2, 0xbc, 0x1c, 0xb5, 0xd9, 0xec, 0x3f, 0x3a, 0x7e, 0xe4, 0xb0, 0x65, 0x9d, 0xd8, 0x64, 0x67, 0x0e, 0x9b, 0x63, 0x23, 0x49, 0x32, 0xb3, 0xb1, 0xa1, 0xb9, 0x6d, 0xf8, 0xaa, 0xfe, 0x33, 0xed, 0xe9, 0x93, 0x83, 0x04, 0x10, 0x3e, 0xa9, 0x54, 0xf6, 0xc3, 0xa6, 0xc6, 0x3d, 0x6a, 0x94, 0x8c, 0xb1, 0xf0, 0xb3, 0x58, 0x2c, 0x70, 0x3a, 0xed, 0xce, 0x68, 0x94, 0x8c, 0x24, 0x62, 0xf4, 0xf4, 0xbd, 0xcf, 0x12, 0x0a, 0x78, 0x97, 0xe5, 0x32, 0x09, 0x60, 0x11, 0x21, 0x3a, 0x0c, 0x81, 0xc0, 0x2a, 0x2c, 0x2d, 0x18, 0xcf, 0x1e, 0x3f, 0x72, 0x70, 0x30, 0x99, 0x6f, 0xc3, 0x16, 0x18, 0x4d, 0xc6, 0x3f, 0x53, 0x14, 0xf5, 0x53, 0x1e, 0x97, 0x47, 0xb4, 0x7f, 0x7f, 0x5f, 0x3d, 0xda, 0xf3, 0xfa, 0x80, 0xdf, 0x0f, 0xa8, 0x8c, 0x20, 0x14, 0x0a, 0xc5, 0xc8, 0xf1, 0xc0, 0xe0, 0x6a, 0xb5, 0x26, 0xc5, 0x62, 0xb1, 0xf4, 0x23, 0xd0, 0x43, 0x18, 0xf8, 0xe4, 0xd9, 0x7e, 0x4a, 0xc0, 0xe5, 0x0d, 0x96, 0x16, 0xa9, 0x76, 0x45, 0x22, 0x61, 0x98, 0x9e, 0x59, 0xb8, 0xed, 0x74, 0xfb, 0x7e, 0x8d, 0xac, 0xa7, 0x19, 0x04, 0x71, 0x2b, 0x99, 0x1c, 0xcf, 0x37, 0xf4, 0x81, 0xb7, 0xcf, 0x68, 0x0b, 0x77, 0xec, 0xd8, 0xf5, 0xcf, 0xca, 0x8a, 0x2a, 0x0a, 0x87, 0x38, 0xf9, 0xc1, 0xe4, 0x38, 0x0a, 0x2e, 0x97, 0x0b, 0xe4, 0x72, 0x39, 0xb8, 0x3d, 0x6e, 0xfa, 0xf2, 0x95, 0x81, 0xbe, 0xd5, 0x70, 0x4a, 0x27, 0x97, 0xcf, 0xbd, 0x54, 0x51, 0x56, 0xd8, 0x8c, 0x6c, 0x88, 0x47, 0x53, 0xf3, 0x77, 0x6d, 0x4e, 0x77, 0x43, 0xf7, 0x91, 0x83, 0x9e, 0x64, 0x8c, 0xc4, 0xf9, 0x86, 0x3e, 0x30, 0x34, 0xa4, 0xb7, 0x6d, 0x2b, 0x2f, 0x9e, 0x49, 0x49, 0x11, 0xb5, 0x2b, 0x14, 0xca, 0x58, 0xa8, 0x99, 0x4c, 0x66, 0x6c, 0x30, 0x48, 0x06, 0xe0, 0x32, 0xf4, 0xa0, 0x7d, 0x4d, 0x4b, 0x4b, 0x8b, 0xbd, 0xe5, 0x32, 0x39, 0x21, 0x93, 0xa5, 0xd7, 0xcf, 0xce, 0x1b, 0x5f, 0xab, 0xae, 0x2c, 0xad, 0x63, 0x32, 0x29, 0x4c, 0x7e, 0xcf, 0x6a, 0x77, 0x35, 0x76, 0x1f, 0x3d, 0xb8, 0x2e, 0x39, 0x37, 0x13, 0xb2, 0x41, 0x00, 0x36, 0xd2, 0x0d, 0x19, 0xc6, 0x0a, 0x4b, 0x0a, 0xae, 0x2f, 0x2c, 0x3c, 0x2e, 0x40, 0x9d, 0x4f, 0x69, 0xb5, 0x5a, 0x83, 0x13, 0x8f, 0xfe, 0x45, 0x7f, 0x7a, 0x6d, 0xf8, 0x23, 0xe3, 0xb2, 0x31, 0x53, 0x5d, 0x53, 0x2b, 0x74, 0x38, 0x1c, 0x20, 0x91, 0x48, 0xc0, 0x6e, 0x77, 0xc0, 0xfd, 0x2f, 0xa7, 0x89, 0xfc, 0x3c, 0xa5, 0x98, 0xc5, 0x64, 0x12, 0x8f, 0x26, 0x1f, 0x8f, 0xae, 0x58, 0xec, 0x0d, 0xdd, 0x47, 0x0f, 0x39, 0x37, 0x23, 0x4c, 0x5e, 0xdb, 0xb0, 0x05, 0xc9, 0x06, 0xbd, 0xa7, 0x4f, 0xb0, 0x50, 0x12, 0x52, 0x44, 0x94, 0x0e, 0xe0, 0xb2, 0x3c, 0x7d, 0x46, 0x5b, 0x55, 0x52, 0x54, 0x32, 0xd4, 0xbc, 0xa7, 0x25, 0x7d, 0x79, 0x79, 0x19, 0xee, 0x8c, 0x4e, 0x40, 0x9a, 0x44, 0x84, 0xaa, 0x82, 0x0d, 0xd3, 0xd3, 0xf3, 0xb0, 0xb4, 0x38, 0xf1, 0x93, 0xce, 0x9f, 0x1f, 0xfb, 0x6d, 0x32, 0xce, 0x56, 0xf3, 0x4d, 0x23, 0x90, 0x68, 0x6c, 0xd0, 0x0d, 0x47, 0xf4, 0xba, 0xe1, 0x90, 0x5e, 0x7f, 0x35, 0x8a, 0xd7, 0x27, 0xa9, 0x26, 0xff, 0x92, 0xd9, 0xe6, 0x0f, 0x78, 0xed, 0xbb, 0x5d, 0x2e, 0x1f, 0x33, 0x35, 0x55, 0x08, 0x3c, 0x2e, 0x17, 0x66, 0x66, 0x17, 0xa1, 0xe1, 0x39, 0x0d, 0x88, 0x45, 0xc2, 0xd6, 0xe2, 0x92, 0x82, 0x5b, 0x7a, 0x9d, 0x61, 0x72, 0x2b, 0xd2, 0xc4, 0xf5, 0xa7, 0x0a, 0x48, 0x34, 0xce, 0xff, 0xee, 0xa9, 0x03, 0x35, 0xe5, 0x79, 0x37, 0x2a, 0x2b, 0xca, 0xf7, 0xea, 0x47, 0xcc, 0x14, 0xd0, 0x61, 0xa2, 0xb2, 0x28, 0x1d, 0xa6, 0x11, 0xf9, 0x37, 0xb6, 0x57, 0x02, 0x45, 0x12, 0xa0, 0x54, 0xe6, 0x10, 0x24, 0x49, 0xbd, 0x54, 0x56, 0x5e, 0xfc, 0x29, 0xda, 0xca, 0xc7, 0x4f, 0x13, 0xf1, 0xcc, 0x02, 0x54, 0x6d, 0xbd, 0x0d, 0x3b, 0xd5, 0x25, 0x17, 0xb6, 0x95, 0xa8, 0xc8, 0xf2, 0x3c, 0x29, 0xb1, 0xe2, 0xa1, 0x89, 0x89, 0x79, 0x3b, 0x18, 0x97, 0x4c, 0xd1, 0xfd, 0xad, 0xf5, 0x04, 0xca, 0xcf, 0x58, 0x82, 0xe2, 0x73, 0x42, 0xa9, 0x50, 0x52, 0xa8, 0x4c, 0xdb, 0xab, 0x6a, 0xca, 0x75, 0x48, 0x84, 0xf1, 0x49, 0x22, 0x9e, 0x49, 0x00, 0x22, 0xaf, 0x2d, 0x2b, 0xca, 0xb9, 0xa4, 0xc8, 0x51, 0x70, 0x17, 0xcc, 0x6e, 0x78, 0x30, 0x65, 0x06, 0xa7, 0xc7, 0x8f, 0xc2, 0xcd, 0x87, 0xfb, 0x0f, 0x8d, 0xce, 0xca, 0xec, 0x50, 0x24, 0x37, 0x47, 0xc5, 0xf2, 0x7a, 0xbd, 0x80, 0x7a, 0x08, 0x6a, 0x3c, 0x01, 0x1c, 0x09, 0x0e, 0x7a, 0x7f, 0x4f, 0xad, 0xae, 0xba, 0xa4, 0xd3, 0x19, 0x56, 0xb6, 0x12, 0xf1, 0x54, 0x01, 0xaa, 0x36, 0xed, 0x4e, 0x4c, 0x5e, 0x58, 0x94, 0x97, 0xe6, 0xf2, 0x04, 0x80, 0x4b, 0xd1, 0x30, 0x37, 0x35, 0x0e, 0x61, 0x9a, 0x44, 0x89, 0xc7, 0x84, 0xf9, 0x25, 0xcb, 0x1f, 0xb2, 0x39, 0xc6, 0x37, 0x68, 0x3a, 0x72, 0x20, 0x3b, 0x4b, 0x41, 0xad, 0xae, 0xae, 0xc6, 0xce, 0x89, 0x60, 0x30, 0x08, 0x39, 0xca, 0x5c, 0x81, 0xd7, 0xe7, 0x6d, 0xab, 0xd5, 0xd4, 0x7c, 0x82, 0xf2, 0x68, 0xd3, 0xaa, 0x78, 0xa2, 0x80, 0xbc, 0xb6, 0xde, 0x76, 0x75, 0x79, 0xc1, 0xc5, 0x82, 0x82, 0x5c, 0x11, 0xde, 0x5f, 0x09, 0x9f, 0x01, 0x23, 0x23, 0x23, 0x10, 0x65, 0x0a, 0x50, 0x1f, 0x90, 0x80, 0xd1, 0x64, 0x71, 0x3a, 0x9d, 0xbe, 0xd7, 0x3f, 0xfe, 0x4d, 0xd7, 0x48, 0x55, 0x4d, 0xc5, 0x75, 0x44, 0xdc, 0x21, 0x97, 0xa7, 0x93, 0x98, 0x1c, 0x77, 0x4a, 0xdc, 0xc8, 0x94, 0x8a, 0x9c, 0x54, 0xd4, 0xac, 0x5a, 0x34, 0x9a, 0xba, 0x3f, 0xea, 0xf5, 0x06, 0x5f, 0x72, 0x24, 0x36, 0x15, 0x90, 0xd7, 0xaa, 0x65, 0xcb, 0xca, 0x5a, 0xde, 0xdd, 0x5d, 0x5f, 0xd9, 0x9b, 0x9f, 0x97, 0xcd, 0x54, 0x4a, 0xf9, 0xc0, 0x63, 0x46, 0x41, 0x77, 0xf5, 0x73, 0xa0, 0x49, 0x1e, 0xc8, 0xe4, 0x19, 0x60, 0x36, 0x5b, 0xac, 0x4b, 0x26, 0xcb, 0x77, 0x66, 0x07, 0xba, 0xc6, 0x30, 0x28, 0xda, 0xeb, 0xd9, 0xca, 0xea, 0xf2, 0x5b, 0x14, 0x93, 0xd9, 0x21, 0x11, 0xa7, 0x31, 0xb0, 0x00, 0x74, 0x69, 0x89, 0xb5, 0x6d, 0x74, 0x91, 0x91, 0x39, 0x9c, 0xb6, 0xe6, 0xfa, 0x9d, 0x9a, 0xf3, 0x7a, 0xfd, 0x70, 0xe8, 0x89, 0x55, 0xa0, 0x6a, 0xd5, 0xbe, 0x2a, 0x4e, 0x15, 0x5c, 0x68, 0x7e, 0x41, 0xf3, 0x7c, 0x91, 0x2a, 0x9d, 0xa8, 0xce, 0x13, 0x83, 0xd5, 0xe1, 0x85, 0x4f, 0x2e, 0x5f, 0x83, 0x08, 0xc1, 0x01, 0x59, 0x7a, 0x26, 0x22, 0xb7, 0x5a, 0x8d, 0x26, 0xeb, 0x9e, 0xd9, 0x81, 0xe3, 0xff, 0x48, 0x04, 0x43, 0x22, 0xa6, 0x2b, 0x2a, 0xcb, 0xee, 0x70, 0xb9, 0xbc, 0x0e, 0xd4, 0x49, 0x19, 0x98, 0x1c, 0x47, 0x01, 0x6f, 0x4b, 0x4e, 0x4e, 0x6e, 0xa6, 0xd5, 0x6e, 0x6b, 0xd8, 0xf5, 0xdc, 0x8e, 0xdf, 0xe9, 0x87, 0x86, 0xd7, 0x8e, 0xf9, 0x75, 0x11, 0xc8, 0x6d, 0xd5, 0xb6, 0x17, 0xe6, 0x2b, 0x7e, 0xbf, 0xf7, 0x05, 0x75, 0x6a, 0x75, 0x91, 0x9c, 0x50, 0xe7, 0x4b, 0xe0, 0xc6, 0x17, 0x8b, 0x30, 0xa0, 0xbf, 0x01, 0x11, 0x9a, 0x01, 0x62, 0x59, 0x26, 0xb8, 0x9c, 0x6e, 0xff, 0xc2, 0x92, 0xb9, 0x05, 0x91, 0xdf, 0x4d, 0x0e, 0x27, 0x9e, 0xe3, 0xfa, 0xaf, 0xa8, 0x2a, 0x1b, 0xe1, 0xf3, 0xf9, 0x1d, 0xf8, 0x40, 0xc3, 0xdb, 0x61, 0x32, 0x99, 0x00, 0x1d, 0x5a, 0x50, 0x5a, 0x52, 0xaa, 0x40, 0x77, 0x49, 0xef, 0xd0, 0xa0, 0xee, 0x7a, 0xdc, 0x77, 0xdd, 0x95, 0x0c, 0xb5, 0xf1, 0x6f, 0xee, 0xde, 0x5e, 0x4a, 0xb6, 0x68, 0x94, 0x90, 0x25, 0xe1, 0xc0, 0x87, 0x97, 0xc7, 0x61, 0xf8, 0xef, 0x63, 0x10, 0x44, 0xa1, 0xe4, 0xa5, 0xca, 0x21, 0x12, 0x8e, 0x44, 0xe7, 0xe6, 0x4d, 0xaf, 0x20, 0xf2, 0x9b, 0x9b, 0x91, 0xc7, 0xd7, 0xd0, 0xed, 0xe9, 0xaf, 0x23, 0xf7, 0xee, 0xb6, 0x2f, 0x9b, 0x4d, 0x28, 0x08, 0xb1, 0xfe, 0x05, 0x52, 0xa9, 0x14, 0x45, 0x22, 0x88, 0x2e, 0x2a, 0x52, 0x4d, 0xa2, 0xef, 0x3a, 0x01, 0x88, 0xc0, 0xeb, 0x40, 0x99, 0x7e, 0x5e, 0x3f, 0x01, 0xbf, 0xfa, 0xf8, 0x3e, 0x4c, 0x2f, 0x98, 0xc1, 0xe7, 0x76, 0x01, 0x53, 0x20, 0x87, 0x14, 0x21, 0x1f, 0x26, 0x27, 0xe7, 0xce, 0xcd, 0x0e, 0xbc, 0x75, 0x01, 0x01, 0x3c, 0xa9, 0x85, 0xe3, 0xff, 0x18, 0x48, 0xc4, 0xc5, 0xdb, 0x77, 0x6e, 0xbe, 0x6a, 0x77, 0xd8, 0x40, 0x20, 0x10, 0x00, 0x2e, 0x51, 0x94, 0xa4, 0x51, 0x8b, 0x65, 0xe5, 0x61, 0xa2, 0x80, 0xf8, 0x16, 0x60, 0x27, 0x92, 0x27, 0xdf, 0x36, 0x19, 0x8a, 0xb2, 0x0e, 0x8b, 0x44, 0x42, 0xb6, 0xc3, 0xed, 0x03, 0x8f, 0xc3, 0x02, 0x04, 0x4b, 0x04, 0x62, 0x89, 0x18, 0x16, 0xe6, 0x16, 0x57, 0x4c, 0xe3, 0xc3, 0xfb, 0xfc, 0x2b, 0x0f, 0x83, 0x5f, 0x0b, 0xc0, 0x3e, 0xf1, 0x81, 0x31, 0x63, 0xc4, 0x5f, 0x0f, 0x8c, 0x4b, 0x1a, 0xf4, 0x57, 0xc7, 0xf3, 0x0b, 0x55, 0x88, 0x90, 0xa8, 0x45, 0x57, 0x31, 0xe1, 0x97, 0xe3, 0x0f, 0xce, 0x8f, 0xdc, 0xbb, 0xd7, 0xf9, 0x60, 0xf4, 0x8b, 0xb5, 0x73, 0x3e, 0x11, 0x24, 0xe6, 0xac, 0x6c, 0xea, 0xda, 0x5b, 0x54, 0xb2, 0xed, 0x4f, 0x72, 0x79, 0x1a, 0x13, 0x55, 0x19, 0x90, 0x6c, 0x3e, 0x70, 0x49, 0xa0, 0x47, 0xef, 0xde, 0x3c, 0x36, 0x3f, 0xac, 0x7d, 0x1f, 0xd9, 0x84, 0xd1, 0xc0, 0x49, 0x14, 0x1f, 0xe8, 0x67, 0xec, 0xc1, 0xb1, 0x8e, 0xe3, 0x61, 0xac, 0xe4, 0x28, 0x61, 0x7b, 0x6c, 0x93, 0x38, 0x60, 0x43, 0x19, 0xba, 0x66, 0x3e, 0x9f, 0x8c, 0x88, 0x2a, 0xc6, 0xfc, 0x81, 0x70, 0x23, 0x9f, 0xc7, 0xa5, 0x42, 0x01, 0x3f, 0x31, 0x33, 0x35, 0xdd, 0x3f, 0x7f, 0xed, 0x9d, 0x9e, 0x68, 0x24, 0x18, 0x27, 0xc7, 0x20, 0xc9, 0x80, 0x71, 0x11, 0xf1, 0x77, 0xa2, 0xc8, 0xb8, 0x6d, 0xfc, 0x8d, 0x6d, 0x62, 0x4f, 0xb2, 0xca, 0xb5, 0x35, 0x51, 0x7e, 0x03, 0x25, 0xc8, 0xae, 0x96, 0x46, 0x02, 0x4e, 0xaf, 0xe9, 0xce, 0x87, 0xf1, 0x5b, 0xcd, 0x57, 0x19, 0xf5, 0xd5, 0x57, 0xac, 0x81, 0xfc, 0xff, 0xc7, 0x7f, 0x13, 0x81, 0x7f, 0x03, 0x92, 0xbf, 0x61, 0xe0, 0x63, 0xbd, 0x16, 0xad, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/options_icon_text.png.h0000600000176000000410000001765012105760300024167 0ustar buildbotwww-data00000000000000/* options_icon_text.png - 1253 bytes */ static const unsigned char options_icon_text_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71, 0xde, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0d, 0xd7, 0x00, 0x00, 0x0d, 0xd7, 0x01, 0x42, 0x28, 0x9b, 0x78, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x03, 0x16, 0x14, 0x20, 0x11, 0xe4, 0x70, 0x49, 0x8d, 0x00, 0x00, 0x04, 0x65, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x97, 0x5f, 0x68, 0x53, 0x77, 0x14, 0xc7, 0xbf, 0x5d, 0xd7, 0xdc, 0x8d, 0x82, 0x09, 0x38, 0x35, 0xa9, 0x7d, 0xc8, 0x18, 0x7d, 0xb0, 0xad, 0x76, 0x05, 0x03, 0x7d, 0xe8, 0xf3, 0x2d, 0x32, 0x29, 0x42, 0x5f, 0x0c, 0xa4, 0x11, 0x1f, 0x0a, 0xc2, 0x06, 0xa6, 0x4c, 0x48, 0x5e, 0xc7, 0x60, 0x42, 0x37, 0x36, 0x27, 0x0e, 0x7d, 0x1a, 0x43, 0xda, 0x6a, 0x15, 0xa4, 0x0f, 0x7d, 0x11, 0x96, 0xb4, 0x69, 0x92, 0x87, 0x18, 0x34, 0xc9, 0x46, 0xfd, 0x03, 0x45, 0x1c, 0xdb, 0xa8, 0x8d, 0xd4, 0x88, 0x6b, 0xee, 0x25, 0xb9, 0x37, 0xf7, 0xbb, 0x97, 0x7b, 0xb3, 0x78, 0x9b, 0x2c, 0x76, 0x2b, 0xd4, 0x8d, 0xdf, 0x07, 0x0e, 0x24, 0xbf, 0x73, 0xef, 0xf9, 0xdd, 0xdf, 0xf7, 0x9e, 0xfb, 0x3b, 0xe7, 0x07, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0xf8, 0xbf, 0xd3, 0xb6, 0x4b, 0xf3, 0xf2, 0x0d, 0x79, 0x0e, 0xbc, 0x65, 0xfb, 0x3f, 0x04, 0xe0, 0x06, 0x80, 0x0d, 0x9b, 0xdd, 0x30, 0x7d, 0xff, 0x64, 0xa1, 0xf5, 0xf6, 0x97, 0x83, 0x04, 0xc9, 0x37, 0x2a, 0x1b, 0x2e, 0x3a, 0x1c, 0x0e, 0x35, 0x12, 0x89, 0x68, 0xb9, 0x5c, 0xce, 0x50, 0x14, 0xc5, 0x50, 0x14, 0xc5, 0xc8, 0xe5, 0x72, 0x46, 0x24, 0x12, 0xd1, 0x1d, 0x0e, 0x47, 0x19, 0xc0, 0xc5, 0xed, 0x0a, 0x60, 0x61, 0x13, 0xa0, 0xd9, 0xf8, 0xae, 0x31, 0x24, 0x49, 0x12, 0xe3, 0xf1, 0x38, 0x35, 0x4d, 0x63, 0x28, 0x14, 0xaa, 0xb8, 0x5c, 0xae, 0xe7, 0x2e, 0x97, 0xeb, 0xf9, 0xe4, 0xe4, 0xa4, 0xae, 0xeb, 0x3a, 0xe3, 0xf1, 0x38, 0x1d, 0x0e, 0x07, 0xcd, 0x4c, 0xb0, 0xbf, 0xd9, 0x3f, 0xea, 0x2c, 0x06, 0xe0, 0x7d, 0xcb, 0x67, 0x5b, 0x68, 0x33, 0x03, 0x80, 0xbd, 0x00, 0xbe, 0x03, 0xf0, 0xcc, 0x96, 0x7d, 0x97, 0x4d, 0x5f, 0xa3, 0x8c, 0x2a, 0xd6, 0xd9, 0x3a, 0x80, 0x2f, 0x00, 0x74, 0x00, 0x78, 0x1b, 0x40, 0x08, 0xc0, 0x0a, 0x80, 0x72, 0x9d, 0xfd, 0x0c, 0xe0, 0x13, 0x00, 0x4e, 0xbb, 0x00, 0x37, 0xc3, 0xe1, 0x30, 0x49, 0xf2, 0xfc, 0xf9, 0xf3, 0x04, 0xa0, 0x02, 0x18, 0x00, 0x30, 0x08, 0xa0, 0x3c, 0x35, 0x35, 0x45, 0x92, 0x0c, 0x87, 0xc3, 0x34, 0x3f, 0x87, 0xda, 0xc2, 0x82, 0xc1, 0x20, 0xef, 0xdf, 0xbf, 0x5f, 0x2d, 0x97, 0xcb, 0x5c, 0x5d, 0x5d, 0x65, 0x20, 0x10, 0xa0, 0x7d, 0xf1, 0xf5, 0x34, 0x11, 0x66, 0x2f, 0x00, 0x4d, 0x96, 0x65, 0x3d, 0x91, 0x48, 0x18, 0xa5, 0x52, 0xc9, 0x50, 0x14, 0xc5, 0x48, 0x26, 0x93, 0x86, 0x2c, 0xcb, 0x3a, 0x00, 0xcd, 0xbc, 0xa6, 0x76, 0xdf, 0xd8, 0xd8, 0x18, 0xd3, 0xe9, 0xb4, 0xa6, 0xaa, 0xaa, 0xb1, 0xb9, 0xb9, 0xc9, 0xdb, 0xb7, 0x6f, 0xb3, 0xa7, 0xa7, 0x87, 0x00, 0xbe, 0x07, 0xf0, 0x83, 0xd7, 0xeb, 0xe5, 0xdc, 0xdc, 0x1c, 0xd7, 0xd7, 0xd7, 0xa9, 0xeb, 0x3a, 0x9f, 0x3e, 0x7d, 0x6a, 0xcc, 0xcf, 0xcf, 0xbf, 0xf0, 0xfb, 0xfd, 0xb7, 0x00, 0x5c, 0xb2, 0x0b, 0x50, 0xcc, 0xe7, 0xf3, 0x24, 0xc9, 0xde, 0xde, 0x5e, 0x02, 0x18, 0xa9, 0xf3, 0x7d, 0xd4, 0xdf, 0xdf, 0x4f, 0x92, 0xcc, 0xe5, 0x72, 0x34, 0xdf, 0x4a, 0xed, 0x41, 0x96, 0x96, 0x96, 0xd8, 0xd5, 0xd5, 0xb5, 0xe9, 0x76, 0xbb, 0x37, 0x63, 0xb1, 0x18, 0x49, 0xf2, 0xf8, 0xf1, 0xe3, 0x6c, 0x95, 0x01, 0xb6, 0xf1, 0xcb, 0xb2, 0x2c, 0xb3, 0x5a, 0xad, 0x5a, 0xf1, 0x8a, 0x6e, 0xb7, 0xbb, 0xb8, 0xb8, 0xb8, 0xc8, 0x6a, 0xb5, 0x4a, 0x59, 0x96, 0x69, 0x66, 0x47, 0xed, 0xbe, 0x4c, 0x26, 0xc3, 0xbe, 0xbe, 0xbe, 0x97, 0x92, 0x24, 0x15, 0xcf, 0x9d, 0x3b, 0x47, 0x92, 0x4c, 0xa7, 0xd3, 0x34, 0xdf, 0xb4, 0x7a, 0xe7, 0xce, 0x1d, 0x92, 0xe4, 0x89, 0x13, 0x27, 0x28, 0x49, 0x52, 0xd9, 0xe3, 0xf1, 0x54, 0x26, 0x26, 0x26, 0x7e, 0x7d, 0xf8, 0xf0, 0xe1, 0xef, 0x0d, 0x05, 0x50, 0x55, 0x95, 0x24, 0xad, 0x34, 0x97, 0xea, 0x7c, 0xef, 0x48, 0x92, 0x44, 0x92, 0x54, 0x14, 0x65, 0x8b, 0x00, 0x3e, 0x9f, 0x8f, 0x00, 0xbe, 0x05, 0xf0, 0xf5, 0xd1, 0xa3, 0x47, 0x49, 0x92, 0xc9, 0x64, 0x92, 0x66, 0x2a, 0xbf, 0xee, 0x1e, 0xb0, 0x91, 0x4c, 0x26, 0xed, 0xf1, 0xbe, 0xf1, 0xf9, 0x7c, 0x24, 0xc9, 0x44, 0x22, 0xb1, 0x65, 0xde, 0xc1, 0xc1, 0x41, 0x02, 0xb8, 0x0a, 0xc0, 0xd7, 0xd9, 0xd9, 0x49, 0x92, 0xd4, 0x75, 0xdd, 0x8a, 0xa7, 0x6a, 0x9a, 0x46, 0x92, 0x1c, 0x1e, 0x1e, 0xb6, 0xc6, 0x9e, 0x01, 0xb8, 0x6e, 0x2e, 0x7e, 0xe7, 0x04, 0x90, 0x24, 0x89, 0x00, 0x3a, 0x01, 0x74, 0x5a, 0xd7, 0x95, 0x4a, 0xa5, 0x6d, 0x0b, 0xa0, 0x28, 0x4a, 0xd3, 0x78, 0x8d, 0xe6, 0x6d, 0x6f, 0x6f, 0x27, 0x80, 0x77, 0x9b, 0xc4, 0x53, 0x33, 0x99, 0x4c, 0x6d, 0xac, 0x54, 0x2a, 0x31, 0x9b, 0xcd, 0xf2, 0xc2, 0x85, 0x0b, 0x3c, 0x78, 0xf0, 0xa0, 0x25, 0xdc, 0xce, 0x7c, 0x02, 0xbb, 0x25, 0x40, 0x8b, 0x78, 0x57, 0xbd, 0x5e, 0x2f, 0xa7, 0xa7, 0xa7, 0xb9, 0xb6, 0xb6, 0xf6, 0xca, 0x1e, 0x94, 0xc9, 0x64, 0x08, 0xa0, 0x64, 0xef, 0x03, 0x7e, 0x9c, 0x9d, 0x9d, 0x05, 0x00, 0x8c, 0x8f, 0x8f, 0x03, 0xc0, 0xbc, 0xb9, 0x09, 0x7e, 0x08, 0xe0, 0x56, 0x30, 0x18, 0x04, 0x00, 0x5c, 0xbb, 0x76, 0x0d, 0x00, 0xa2, 0xf5, 0xca, 0x1d, 0x3e, 0x7c, 0x18, 0x00, 0x3e, 0x07, 0xf0, 0x99, 0xf9, 0x1b, 0xd9, 0x6c, 0xb6, 0x59, 0xb5, 0x91, 0x9a, 0x39, 0xee, 0xdd, 0xbb, 0xb7, 0x25, 0xde, 0x91, 0x23, 0x47, 0x00, 0x00, 0x77, 0xef, 0xde, 0xdd, 0x6e, 0x55, 0x5b, 0x7f, 0xf2, 0xe4, 0xc9, 0x57, 0x81, 0x40, 0xe0, 0x27, 0x8f, 0xc7, 0x83, 0x3d, 0x7b, 0xf6, 0xe0, 0xe4, 0xc9, 0x93, 0x00, 0x80, 0x81, 0x81, 0x81, 0xe6, 0x65, 0x70, 0x79, 0x79, 0x99, 0x9a, 0xa6, 0xf1, 0xec, 0xd9, 0xb3, 0x15, 0xa7, 0xd3, 0xf9, 0xc2, 0xe9, 0x74, 0xbe, 0x08, 0x85, 0x42, 0x0d, 0xcb, 0xa0, 0x45, 0x2c, 0x16, 0xa3, 0xdb, 0xed, 0x56, 0xf6, 0xef, 0xdf, 0xaf, 0x44, 0xa3, 0x51, 0x92, 0xe4, 0xe8, 0xe8, 0x28, 0xcd, 0xf2, 0xc5, 0x42, 0xa1, 0x40, 0x92, 0x3c, 0x74, 0xe8, 0xd0, 0x6b, 0x6d, 0x82, 0xb1, 0x58, 0x8c, 0x1e, 0x8f, 0xa7, 0x78, 0xe0, 0xc0, 0x81, 0x62, 0x34, 0x1a, 0x6d, 0xba, 0x09, 0xb6, 0xc8, 0x80, 0x2f, 0x57, 0x56, 0x56, 0x7e, 0xf1, 0xfb, 0xfd, 0xbf, 0xed, 0xdb, 0xb7, 0xaf, 0xdc, 0xd1, 0xd1, 0x51, 0x3e, 0x76, 0xec, 0x18, 0x49, 0x32, 0x95, 0x4a, 0xbd, 0x92, 0x01, 0xf5, 0x5c, 0x92, 0x24, 0x49, 0x8d, 0x44, 0x22, 0x5a, 0x3e, 0x9f, 0x37, 0x54, 0x55, 0x35, 0x54, 0x55, 0x35, 0xf2, 0xf9, 0x7c, 0xa3, 0x46, 0xa8, 0x36, 0xe1, 0xa9, 0x53, 0xa7, 0xf8, 0xe8, 0xd1, 0xa3, 0x6a, 0xa5, 0x52, 0xe1, 0xe3, 0xc7, 0x8f, 0x19, 0x0c, 0x06, 0xad, 0x87, 0x70, 0x03, 0x78, 0x70, 0xe6, 0xcc, 0x19, 0x6e, 0x6c, 0x6c, 0x6c, 0xab, 0x0c, 0x5a, 0x4d, 0x58, 0x2a, 0x95, 0x32, 0x46, 0x46, 0x46, 0x1a, 0x96, 0xc1, 0x56, 0x02, 0x9c, 0x3e, 0x7d, 0xfa, 0xfa, 0xc2, 0xc2, 0xc2, 0xcb, 0x42, 0xa1, 0x60, 0x95, 0x41, 0xce, 0xcc, 0xcc, 0xb0, 0xbb, 0xbb, 0x9b, 0x00, 0xae, 0x34, 0x6d, 0x88, 0x00, 0xdc, 0xb4, 0x35, 0x18, 0x45, 0x73, 0x6c, 0xe8, 0x6f, 0x26, 0x2c, 0xd5, 0x59, 0x1c, 0xc0, 0x07, 0xe6, 0x75, 0xbd, 0x00, 0x56, 0x5b, 0x34, 0x41, 0xf6, 0x46, 0xc8, 0xde, 0x86, 0x5f, 0x01, 0xf0, 0x5e, 0x8b, 0xd6, 0xda, 0x3e, 0xee, 0x02, 0xf0, 0x29, 0x80, 0x07, 0x0d, 0x1a, 0xa1, 0x8f, 0x01, 0xb4, 0xff, 0xdb, 0x43, 0x08, 0xad, 0x3e, 0xbe, 0xad, 0xad, 0x6d, 0x57, 0x0f, 0x33, 0x3b, 0x7d, 0x18, 0x12, 0xc7, 0xe1, 0xff, 0xda, 0x71, 0x56, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x60, 0xbb, 0xfc, 0x09, 0x0a, 0x27, 0x5e, 0xd5, 0x75, 0xbd, 0x87, 0xd3, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/player.xpm0000600000176000000410000000247312105760300021503 0ustar buildbotwww-data00000000000000/* XPM */ static const char * player_xpm[] = { "16 16 64 1", " c None", ". c #3C2D00", "+ c #FDB19C", "@ c #FDB19B", "# c #FDB4A2", "$ c #FDAC91", "% c #FDA691", "& c #FDAD93", "* c #FDB49A", "= c #FDBBA5", "- c #FDB099", "; c #FDC7AC", "> c #FDC6A9", ", c #3A2B00", "' c #362700", ") c #FFFFC5", "! c #FFFEAD", "~ c #FFFC00", "{ c #FFFD00", "] c #3F3100", "^ c #403200", "/ c #3F3300", "( c #3D2E00", "_ c #FFFFBE", ": c #FFFF73", "< c #FFF800", "[ c #FFEF8F", "} c #3F3000", "| c #483800", "1 c #FEBDA8", "2 c #403100", "3 c #FFE76B", "4 c #FFE74D", "5 c #3E2F00", "6 c #FFEB00", "7 c #433300", "8 c #FEC6A0", "9 c #4A3A00", "0 c #FEBDA7", "a c #413100", "b c #FFFE00", "c c #FFFE6B", "d c #FFEB73", "e c #FFE200", "f c #FFD500", "g c #FFB700", "h c #FEB15F", "i c #4B3B00", "j c #FFE24D", "k c #FFCD00", "l c #FFA900", "m c #FFC300", "n c #4F3F00", "o c #463700", "p c #584800", "q c #FF9800", "r c #564600", "s c #4C3C00", "t c #534300", "u c #554600", "v c #524200", "w c #FF8300", "x c #504000", "y c #4E3E00", " ", " .. ", " .. .+@. .. ", " .#..$%&*..=. ", " .-&......;>. ", " .,')!~{]^/ ", " .(_:~<[<<<}| ", " .12~<234566789 ", ".0abcdaee5ffg9hi", " 29 c #CC9000", ", c #940000", "' c #B20000", ") c #CCB200", "! c #FF6D01", "~ c #FEE74A", "{ c #CC9E00", "] c #FF4F01", "^ c #F82900", "/ c #FF2B01", "( c #D60000", " ", " ", " ", " .. ", " +@#$ ", " %&*=-; ", " $->,,=-; ", " $-*, '))! ", " ;~*, '){] ", " ^*, '{/ ", " (' '' ", " ", " ", " ", " ", " "}; springlobby-0.169/src/images/rank1.xpm0000600000176000000410000000130412105760300021213 0ustar buildbotwww-data00000000000000/* XPM */ static const char * rank1_xpm[] = { "16 16 22 1", " c None", ". c #CC7300", "+ c #CC6500", "@ c #FCFE38", "# c #EBEE00", "$ c #CACC00", "% c #CCB200", "& c #FF6D01", "* c #FCFE24", "= c #B20000", "- c #EECF00", "; c #FEEB6A", "> c #F7FA00", ", c #CCBB00", "' c #FCFE4A", ") c #D62300", "! c #FF4F01", "~ c #940000", "{ c #D60000", "] c #EEDA00", "^ c #941800", "/ c #7C0000", " ", " ", " ", " .+ ", " .@#+ ", " .@$%$& ", " .*%==%$& ", " +$-=;>=%$& ", " +#,='%%$=,$) ", " !,=#%~~%$=,{ ", " {=#%~ ~%$== ", " =#]~ ~,$~ ", " ~,~ ~,^ ", " ~/ ~/ ", " ", " "}; springlobby-0.169/src/images/rank2.xpm0000600000176000000410000000153212105760300021217 0ustar buildbotwww-data00000000000000/* XPM */ static const char * rank2_xpm[] = { "16 16 32 1", " c None", ". c #EE8600", "+ c #CC6500", "@ c #FCFE38", "# c #FCFE4A", "$ c #EE9D00", "% c #CACC00", "& c #CCBB00", "* c #FCFE56", "= c #CC7300", "- c #E76B6B", "; c #E24E4E", "> c #CCB200", ", c #B20000", "' c #FF950B", ") c #DA8484", "! c #EEDA00", "~ c #940000", "{ c #FCFE24", "] c #D36B6B", "^ c #C02A2A", "/ c #FCFF0B", "( c #C16B6B", "_ c #7C0000", ": c #B26C6C", "< c #680000", "[ c #AE0000", "} c #BC2A2A", "| c #A34D4D", "1 c #CCB600", "2 c #6E0000", "3 c #922A2A", " .+ ", " .@#+ ", " $#%&*+ ", " =@&-;&@+ ", " =#>;##,&@+ ", " '#%,#&&#,&@, ", " )!,@&~,&{~&~ ", " ]^{&~#{~&/~~ ", " (*&~#%%{~&@_ ", " :!~*%<<%@[&_ ", " :}@%_ ~&#~_ ", " |@12 _%#_ ", " 3&_ _&< ", " _< _< ", " ", " "}; springlobby-0.169/src/images/rank3.xpm0000600000176000000410000000162612105760300021224 0ustar buildbotwww-data00000000000000/* XPM */ static const char * rank3_xpm[] = { "16 16 36 1", " c None", ". c #A46C00", "+ c #FBE633", "@ c #FDE629", "# c #A49600", "$ c #A45D00", "% c #FAFD23", "& c #D62300", "* c #FDE623", "= c #FF6D01", "- c #D60000", "; c #FDE909", "> c #FDE51D", ", c #FAFD13", "' c #D4C200", ") c #FF4F01", "! c #FF2B01", "~ c #FDEA13", "{ c #B20000", "] c #F6E202", "^ c #B21D00", "/ c #681100", "( c #7C1400", "_ c #BEAE00", ": c #940000", "< c #7C0000", "[ c #941800", "} c #B23F00", "| c #FF7901", "1 c #D62800", "2 c #FAFD09", "3 c #FAFD25", "4 c #A46800", "5 c #A47B00", "6 c #682000", "7 c #680000", " .. ", " .++. ", " .@##@$ ", " $%#&&#*= ", " $%#-;;-#>= ", " =,#-;##;-#'= ", " )#-;#&&#;-#) ", " !-;#->~{#;-) ", " &;#{]##]{#]& ", " -#^]#/(_;{#& ", " {:;#< :#~:^ ", " :;#[ }#~( ", " :#:{ |1_/ ", " :#234445>]'/ ", " ::##]]]#/6 ", " 777777 "}; springlobby-0.169/src/images/rank4.xpm0000600000176000000410000000143612105760300021224 0ustar buildbotwww-data00000000000000/* XPM */ static const char * rank4_xpm[] = { "16 16 28 1", " c None", ". c #694AB2", "+ c #8C8C8C", "@ c #EFAAFF", "# c #CD92FF", "$ c #B07DFF", "% c #EAEAEA", "& c #976BFF", "* c #C9C9C9", "= c #D0D0D0", "- c #F3F3F3", "; c #FFFFFF", "> c #999999", ", c #4C4C4C", "' c #B2B2B2", ") c #949494", "! c #F7F7F7", "~ c #5B5B5B", "{ c #989797", "] c #D1D0D0", "^ c #B9B8B8", "/ c #8B8A8A", "( c #D8D8D8", "_ c #3F3F3F", ": c #6D6D6D", "< c #353535", "[ c #C2C1C1", "} c #E5E4E4", " ....+++.... ", " .@#$%%%$#@. ", " .#&&***&&#. ", " .$&&***&&$. ", " .$&*%*&$. ", " .$%+%$. ", " .+=+. ", " -;> ", " =;, ", " ');%;'' ", " ==;!--!-;>~ ", " ~,{];^/,, ", " ,;(-_ ", " :;^<[}: ", " ~[< >], ", " ,_ ~, "}; springlobby-0.169/src/images/rank5.xpm0000600000176000000410000000215012105760300021217 0ustar buildbotwww-data00000000000000/* XPM */ static const char * rank5_xpm[] = { "16 16 50 1", " c None", ". c #706D34", "+ c #565656", "@ c #2D5C91", "# c #FFFFFF", "$ c #FCFE72", "% c #6CD7FE", "& c #FCFE36", "* c #ACAAAA", "= c #FCFE5A", "- c #E8E8E8", "; c #EEE330", "> c #50A0FA", ", c #939393", "' c #C7C7C7", ") c #FCFE48", "! c #676767", "~ c #87833F", "{ c #CC9E00", "] c #FAD300", "^ c #FCFE4A", "/ c #FF7901", "( c #F4A600", "_ c #FCFF0B", ": c #D62300", "< c #CC8600", "[ c #FEEC24", "} c #FEEF4A", "| c #EBEE00", "1 c #CCBB00", "2 c #FEEE38", "3 c #FFEB0B", "4 c #CC6500", "5 c #D64100", "6 c #B20000", "7 c #CC7800", "8 c #CC9000", "9 c #FEF056", "0 c #941800", "a c #B21D00", "b c #CCA800", "c c #7C1400", "d c #800000", "e c #CCB200", "f c #FF6D01", "g c #680000", "h c #D65B00", "i c #CCA300", "j c #D60000", "k c #940000", " .+.@.+.@.+. ", " .#$%&*&%=-. ", " .#;>;,;>;-. ", " .-;>;,;>;-. ", " .';>;';>;-. ", " +)>)!&>=+ ", " .%~{~%. ", " @]^/@ ", " (_: ", " {<^[}{{ ", " {{^|1213245 ", " :67898<0a ", " a2bbc ", " <[7d c #D1D1D1", ", c #D0D0D0", "' c #EEEEEE", ") c #F8F8F8", "! c #F6F6F6", "~ c #E6E6E6", "{ c #C2C2C2", "] c #D6D6D6", "^ c #CCCCCC", "/ c #B7B7B7", "( c #FCFCFC", "_ c #F3F3F3", ": c #F5F5F5", "< c #F2F2F2", "[ c #9C9C9C", "} c #757575", "| c #8D8D8D", "1 c #A5A5A5", "2 c #C3C3C3", "3 c #F7F7F7", "4 c #AEAEAE", "5 c #B0B0B0", "6 c #999999", "7 c #595959", "8 c #303030", "9 c #727272", "0 c #3D3D3D", "a c #4B4B4B", "b c #373737", "c c #E9E9E9", "d c #E0E0E0", "e c #AAAAAA", "f c #BABABA", "g c #646464", "h c #F0F0F0", "i c #EBEBEB", "j c #808080", "k c #A2A2A2", "l c #565656", "m c #ECECEC", "n c #242424", " . ", " +@# ", " .$% ", " &$*=- ", " &$*=; ", " >>,>')!=~{]]^ ", "/!*!(*_*:($*$<[ ", " }|1|23*_45167 ", " 8891+*,150a ", " b<$c c #E1A700", ", c #E0A500", "' c #F4DC00", ") c #FAF000", "! c #F9EC00", "~ c #EFCD00", "{ c #D78F00", "] c #E4B000", "^ c #DE9F00", "/ c #D07E00", "( c #FDF900", "_ c #F7E600", ": c #F8EA00", "< c #F6E400", "[ c #BE5A00", "} c #A53100", "| c #B44800", "1 c #C46500", "2 c #D89000", "3 c #FAEE00", "4 c #CA7100", "5 c #CB7400", "6 c #BC5600", "7 c #921B00", "8 c #770700", "9 c #A32E00", "0 c #800C00", "a c #891300", "b c #7C0A00", "c c #F1D200", "d c #EBC200", "e c #C76C00", "f c #D28200", "g c #992300", "h c #F5E000", "i c #F2D600", "j c #AC3B00", "k c #C26100", "l c #901900", "m c #F3D800", "n c #700400", " . ", " +@# ", " .$% ", " &$*=- ", " &$*=; ", " >>,>')!=~{]]^ ", "/!*!(*_*:($*$<[ ", " }|1|23*_45167 ", " 8891+*,150a ", " b<$c c #36FF57", ", c #DAFFE6", "' c #00E31A", ") c #00D819", "! c #23A638", "~ c #30FF51", "{ c #12F92D", "] c #04EA1F", "^ c #00E61B", "/ c #008C10", "( c #19FF3A", "_ c #A5FFC0", ": c #8AFFA5", "< c #4DFF68", "[ c #06FF25", "} c #69FF84", "| c #C7EFFF", "1 c #02FF21", "2 c #2DFF48", "3 c #00B4FF", "4 c #018EC9", "5 c #00FF1F", "6 c #0CF227", "7 c #00A614", "8 c #01EC1D", "9 c #02E81D", "0 c #00EA1B", "a c #00E71B", " ", " .++++. ", " +@#$$$%+ ", " +&*====$-+ ", " +;>=,====')+ ", " .!~,,,={]^^'/. ", " +(=,_:<+++++++ ", " +[===}+||||||+ ", " +1==2+||3++334+", " +5==6+|3+33+34+", " .78=9+|3333+34+", " +0a^+|33++334+", " +^^+|3333334+", " +/+|33++344+", " .++444444+ ", " ++++++ "}; springlobby-0.169/src/images/ready_unsync.xpm0000600000176000000410000000210212105760300022677 0ustar buildbotwww-data00000000000000/* XPM */ static const char * ready_unsync_xpm[] = { "16 16 47 1", " c None", ". c #595959", "+ c #000000", "@ c #04A618", "# c #02FF20", "$ c #00FF1E", "% c #00A613", "& c #1DFF3D", "* c #12FF33", "= c #9CFFBA", "- c #00EF1C", "; c #32FF53", "> c #36FF57", ", c #DAFFE6", "' c #00E31A", ") c #00D819", "! c #23A638", "~ c #30FF51", "{ c #12F92D", "] c #04EA1F", "^ c #00E61B", "/ c #008C10", "( c #19FF3A", "_ c #A5FFC0", ": c #8AFFA5", "< c #4DFF68", "[ c #1AFF35", "} c #FFE57C", "| c #06FF25", "1 c #69FF84", "2 c #43FF5E", "3 c #18FE33", "4 c #00B816", "5 c #02FF21", "6 c #2DFF48", "7 c #2EFF49", "8 c #20FF3B", "9 c #FFCC00", "0 c #B38F00", "a c #00FF1F", "b c #0CF227", "c c #08EE23", "d c #00A614", "e c #01EC1D", "f c #02E81D", "g c #00EA1B", "h c #00E71B", " ", " .++++. ", " +@#$$$%+ ", " +&*====$-+ ", " +;>=,====')+ ", " .!~,,,={]+^'/. ", " +(=,_:<[+}+))+ ", " +|===123+}+)4+ ", " +5==678+}90+4+ ", " +a==bbc+}+0+4+ ", " .de=ff+}9+90+. ", " +gh^^+}9+90+ ", " +^^+}999990+ ", " +/+}99+990+ ", " +}00000000+", " +++++++++++"}; springlobby-0.169/src/images/reload_map.xpm0000600000176000000410000000760012105760300022307 0ustar buildbotwww-data00000000000000/* XPM */ static const char * reload_map_xpm[] = { "22 22 178 2", " c None", ". c #AFBDCA", "+ c #7C97AF", "@ c #ADBAC9", "# c #699EBF", "$ c #89A2B8", "% c #6EAECE", "& c #6AA9CA", "* c #8EA6BB", "= c #A4B4C4", "- c #8EA3B8", "; c #869FB6", "> c #85A0B7", ", c #6385A4", "' c #6FB4D4", ") c #73C0DF", "! c #69A8C9", "~ c #94AABE", "{ c #ABBAC8", "] c #5C84A5", "^ c #407DA7", "/ c #4F97BE", "( c #58A6CC", "_ c #5AADD3", ": c #5FB4D8", "< c #66BBDD", "[ c #6CC1E1", "} c #70C3E3", "| c #73C4E3", "1 c #79C5E3", "2 c #66A5C6", "3 c #99AEC1", "4 c #7A96B0", "5 c #437EA8", "6 c #3986B4", "7 c #3A8DBB", "8 c #4298C3", "9 c #49A2CB", "0 c #51ACD3", "a c #58B5DA", "b c #5FBCE0", "c c #66C3E4", "d c #6DC7E7", "e c #72C9E7", "f c #78C8E6", "g c #7EC7E4", "h c #61A0C1", "i c #A1B3C4", "j c #94A9BD", "k c #3E7DA9", "l c #2A78AA", "m c #3182B2", "n c #398EBC", "o c #4199C5", "p c #48A4CD", "q c #50AED5", "r c #57B7DC", "s c #57BDE1", "t c #54C0E6", "u c #55C4E9", "v c #5CC5E9", "w c #67C5E7", "x c #79C8E5", "y c #83C8E3", "z c #5C98BB", "A c #A8B9C8", "B c #43759D", "C c #2574A7", "D c #2877A9", "E c #3082B2", "F c #388EBC", "G c #3F99C5", "H c #3FA0CC", "I c #30A1CF", "J c #22A2D3", "K c #1DA9DA", "L c #1FB2E2", "M c #20B9E8", "N c #20B6E6", "O c #1EADDE", "P c #1EA5D6", "Q c #2EA3D2", "R c #4EABD3", "S c #407FA7", "T c #BBC6D1", "U c #3274A2", "V c #2071A5", "W c #2776A9", "X c #2E82B2", "Y c #358DBB", "Z c #278CBE", "` c #198DC1", " . c #1A96C9", ".. c #1CA0D2", "+. c #20B9E9", "@. c #1CA4D6", "#. c #1B9BCE", "$. c #3397C4", "%. c #698DAB", "&. c #99ABBD", "*. c #337AAA", "=. c #1F70A5", "-. c #2575A8", ";. c #297EB0", ">. c #1A7CB1", ",. c #1682B8", "'. c #188CC0", "). c #1995C8", "!. c #1B9DD0", "~. c #1DA6D7", "{. c #1FB0E1", "]. c #1EAADB", "^. c #1CA2D4", "/. c #329FCC", "(. c #5F88A8", "_. c #97ABBD", ":. c #3179A9", "<. c #1D6FA4", "[. c #2272A6", "}. c #1570A7", "|. c #1477AD", "1. c #1580B5", "2. c #1789BD", "3. c #1991C5", "4. c #1A99CC", "5. c #1CA1D3", "6. c #1DA6D8", "7. c #1DA8D9", "8. c #1CA4D5", "9. c #31A2D0", "0. c #5785A7", "a. c #AFBCCA", "b. c #3076A5", "c. c #1B6EA3", "d. c #1469A0", "e. c #116BA3", "f. c #1374AB", "g. c #157DB3", "h. c #248CBD", "i. c #3190BD", "j. c #2E85B2", "k. c #3084AF", "l. c #3384AF", "m. c #33A6D3", "n. c #2EA2D0", "o. c #5284A7", "p. c #326F9C", "q. c #11679F", "r. c #1169A1", "s. c #1371A8", "t. c #327CA9", "u. c #6F92AE", "v. c #A8B7C7", "w. c #3298C5", "x. c #2B9FCE", "y. c #4B81A6", "z. c #5F87A8", "A. c #2B76A6", "B. c #93A8BC", "C. c #4098C2", "D. c #457FA5", "E. c #2771A4", "F. c #316B98", "G. c #41749B", "H. c #4F7EA3", "I. c #12679F", "J. c #336C98", "K. c #2D71A1", "L. c #2D6B99", "M. c #8BA3BA", "N. c #206DA1", "O. c #2C72A3", "P. c #ACBAC8", "Q. c #7494AF", "R. c #347AA9", "S. c #7895AF", "T. c #809BB4", "U. c #446F96", " ", " . + ", " @ # $ ", " @ % & * ", " = - ; > > , ' ) ! ~ ", " { ] ^ / ( _ : < [ } | 1 2 3 ", " 4 5 6 7 8 9 0 a b c d e f g h i ", " j k l m n o p q r s t u v w x y z A ", " B C D E F G H I J K L M N O P Q R S ", " T U V W X Y Z ` ...K L +.N O @.#.$.%. ", " &.*.=.-.;.>.,.'.).!.~.O L {.].^./.(. ", " _.:.<.[.}.|.1.2.3.4.5.6.K 7.8.9.0. ", " a.b.c.d.e.f.g.h.i.j.k.l.m...n.o. ", " p.d.q.r.s.t.u.v. = w.x.y. ", " z.q.q.q.A.B. { C.D. ", " = E.q.q.F. { G. ", " H.I.q.J. ", " K.q.L. ", " M.N.O.P. ", " Q.R.S. ", " T.U. ", " "}; springlobby-0.169/src/images/replay_icon.png.h0000600000176000000410000006525312105760300022726 0ustar buildbotwww-data00000000000000/* replay_icon.png - 4267 bytes */ static const unsigned char replay_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a, 0xf4, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0d, 0xd7, 0x00, 0x00, 0x0d, 0xd7, 0x01, 0x42, 0x28, 0x9b, 0x78, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x0a, 0x07, 0x16, 0x05, 0x3a, 0x46, 0x0e, 0xe6, 0xcf, 0x00, 0x00, 0x10, 0x2b, 0x49, 0x44, 0x41, 0x54, 0x58, 0x09, 0x01, 0x20, 0x10, 0xdf, 0xef, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x2e, 0x2e, 0x23, 0x03, 0x03, 0x03, 0x3d, 0xfe, 0xfe, 0xfe, 0x38, 0x22, 0x22, 0x22, 0x3c, 0x00, 0x00, 0x00, 0x1a, 0xe2, 0xe2, 0xe2, 0x48, 0xcd, 0xcd, 0xcd, 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0x05, 0xfd, 0xfd, 0xfd, 0x32, 0x03, 0x03, 0x03, 0x3c, 0x04, 0x04, 0x04, 0x39, 0x2f, 0x2f, 0x2f, 0x3c, 0x27, 0x27, 0x27, 0x16, 0x30, 0x30, 0x30, 0x00, 0xe8, 0xe8, 0xe8, 0x01, 0xaa, 0xaa, 0xaa, 0x00, 0x2b, 0x2b, 0x2b, 0x00, 0xde, 0xde, 0xde, 0x5b, 0x00, 0x00, 0x00, 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x2f, 0x2f, 0x12, 0x00, 0x00, 0x00, 0x39, 0x01, 0x01, 0x01, 0x3b, 0x19, 0x19, 0x19, 0x38, 0x2d, 0x2d, 0x2d, 0x39, 0xfd, 0xfd, 0xfd, 0x07, 0x02, 0x02, 0x02, 0x01, 0xed, 0xed, 0xed, 0x00, 0x5a, 0x5a, 0x5a, 0x00, 0x1c, 0x1c, 0x1c, 0x00, 0xfa, 0xfa, 0xfa, 0x00, 0x72, 0x72, 0x72, 0x00, 0xd3, 0xd3, 0xd3, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x1b, 0x1b, 0x1b, 0x3a, 0xd1, 0xd1, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x2e, 0x2e, 0x23, 0x03, 0x03, 0x03, 0x3d, 0xfd, 0xfd, 0xfd, 0x38, 0x18, 0x18, 0x18, 0x3c, 0x0f, 0x0f, 0x0f, 0x2a, 0x21, 0x21, 0x21, 0x00, 0x5e, 0x5e, 0x5e, 0x01, 0x0f, 0x0f, 0x0f, 0x00, 0xf0, 0xf0, 0xf0, 0x00, 0x48, 0x48, 0x48, 0x00, 0xe5, 0xe5, 0xe5, 0x00, 0x1a, 0x1a, 0x1a, 0x00, 0x71, 0x71, 0x71, 0x00, 0xfa, 0xfa, 0xfa, 0x00, 0xe3, 0xe3, 0xe3, 0x00, 0xd3, 0xd3, 0xd3, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xea, 0xea, 0x00, 0x44, 0x44, 0x44, 0x31, 0xe5, 0xe5, 0xe5, 0x0b, 0xd1, 0xd1, 0xd1, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0x05, 0xfd, 0xfd, 0xfd, 0x32, 0x04, 0x04, 0x04, 0x3c, 0x07, 0x07, 0x07, 0x38, 0x2a, 0x2a, 0x2a, 0x3d, 0x2b, 0x2b, 0x2b, 0x16, 0x33, 0x33, 0x33, 0x00, 0xf7, 0xf7, 0xf7, 0x01, 0x95, 0x95, 0x95, 0x00, 0xd6, 0xd6, 0xd6, 0x00, 0x0c, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0xf1, 0xf1, 0x00, 0xb4, 0xb4, 0xb4, 0x00, 0xe5, 0xe5, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x4c, 0x4c, 0x00, 0x01, 0x01, 0x01, 0x00, 0x03, 0x03, 0x03, 0x00, 0xd9, 0xd9, 0xd9, 0x00, 0x54, 0x54, 0x54, 0x00, 0x16, 0x16, 0x16, 0x00, 0x1c, 0x1c, 0x1c, 0xff, 0xd8, 0xd8, 0xd8, 0xf7, 0xfd, 0xfd, 0xfd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x41, 0x00, 0x00, 0x00, 0x45, 0x1c, 0x1c, 0x1c, 0x39, 0x30, 0x30, 0x30, 0x38, 0x10, 0x10, 0x10, 0x07, 0xf2, 0xf2, 0xf2, 0x01, 0xe8, 0xe8, 0xe8, 0x00, 0x24, 0x24, 0x24, 0x00, 0x58, 0x58, 0x58, 0x00, 0xfa, 0xfa, 0xfa, 0x00, 0x6a, 0x6a, 0x6a, 0x00, 0xb6, 0xb6, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0xb5, 0xb5, 0x00, 0x1b, 0x1b, 0x1b, 0x00, 0x22, 0x22, 0x22, 0x00, 0x64, 0x64, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xd0, 0xd0, 0xfe, 0xcd, 0xcd, 0xcd, 0x01, 0xef, 0xef, 0xef, 0xd8, 0xd9, 0xd9, 0xd9, 0xc4, 0x05, 0x05, 0x05, 0xc7, 0xfe, 0xfe, 0xfe, 0xba, 0xd4, 0xd4, 0xd4, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x2e, 0x2e, 0x30, 0x57, 0x57, 0x57, 0xcd, 0x60, 0x60, 0x60, 0x02, 0xa3, 0xa3, 0xa3, 0x00, 0xda, 0xda, 0xda, 0x00, 0xd6, 0xd6, 0xd6, 0x00, 0xc8, 0xc8, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0xaf, 0xaf, 0x00, 0x33, 0x33, 0x33, 0x00, 0xed, 0xed, 0xed, 0x00, 0x37, 0x37, 0x37, 0x00, 0xfa, 0xfa, 0xfa, 0x00, 0x2a, 0x2a, 0x2a, 0x00, 0xb1, 0xb1, 0xb1, 0x00, 0x05, 0x05, 0x05, 0x00, 0xf7, 0xf7, 0xf7, 0x00, 0x91, 0x91, 0x91, 0x00, 0xef, 0xef, 0xef, 0xff, 0xef, 0xef, 0xef, 0xfa, 0xff, 0xff, 0xff, 0xc8, 0xeb, 0xeb, 0xeb, 0xc8, 0x00, 0x00, 0x00, 0xc4, 0xff, 0xff, 0xff, 0xc6, 0xd1, 0xd1, 0xd1, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x10, 0x10, 0x10, 0x01, 0x10, 0x10, 0x10, 0x00, 0xd5, 0xd5, 0xd5, 0x00, 0x7a, 0x7a, 0x7a, 0x00, 0x9d, 0x9d, 0x9d, 0x00, 0xd3, 0xd3, 0xd3, 0x00, 0x19, 0x19, 0x19, 0x00, 0x34, 0x34, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd2, 0xd2, 0xd2, 0x00, 0x4e, 0x4e, 0x4e, 0x00, 0x16, 0x16, 0x16, 0x00, 0x2a, 0x2a, 0x2a, 0xff, 0xae, 0xae, 0xae, 0x00, 0xdf, 0xdf, 0xdf, 0xec, 0xca, 0xca, 0xca, 0xc2, 0xfc, 0xfc, 0xfc, 0xc9, 0x01, 0x01, 0x01, 0xc3, 0xfc, 0xfc, 0xfc, 0xce, 0xd5, 0xd5, 0xd5, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x27, 0x27, 0x27, 0xda, 0xdf, 0xdf, 0xdf, 0xee, 0x00, 0x00, 0x00, 0x13, 0xfd, 0xfd, 0xfd, 0x00, 0xfb, 0xfb, 0xfb, 0x00, 0x46, 0x46, 0x46, 0x00, 0xdc, 0xdc, 0xdc, 0x00, 0x32, 0x32, 0x32, 0x00, 0xf7, 0xf7, 0xf7, 0x00, 0xd0, 0xd0, 0xd0, 0xfe, 0xbf, 0xbf, 0xbf, 0x01, 0xf0, 0xf0, 0xf0, 0xd7, 0xd9, 0xd9, 0xd9, 0xc5, 0xc8, 0xc8, 0xc8, 0xc7, 0xfb, 0xfb, 0xfb, 0xc3, 0xd3, 0xd3, 0xd3, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xab, 0xab, 0xab, 0xff, 0x3d, 0x3d, 0x3d, 0xc3, 0x00, 0x00, 0x00, 0x50, 0xfb, 0xfb, 0xfb, 0x00, 0xe2, 0xe2, 0xe2, 0x00, 0xf6, 0xf6, 0xf6, 0x00, 0x4e, 0x4e, 0x4e, 0x00, 0x9c, 0x9c, 0x9c, 0xff, 0xa9, 0xa9, 0xa9, 0xa9, 0x05, 0x05, 0x05, 0xa5, 0xff, 0xff, 0xff, 0xc6, 0xd1, 0xd1, 0xd1, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x5e, 0x27, 0x27, 0x27, 0xa0, 0xf5, 0xf5, 0xf5, 0x01, 0x58, 0x58, 0x58, 0x00, 0xf6, 0xf6, 0xf6, 0x00, 0xfa, 0xfa, 0xfa, 0x00, 0xf6, 0xf6, 0xf6, 0x00, 0xa5, 0xa5, 0xa5, 0xf7, 0x23, 0x23, 0x23, 0xea, 0x06, 0x06, 0x06, 0x04, 0xfe, 0xfe, 0xfe, 0x05, 0x12, 0x12, 0x12, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0xfa, 0xfa, 0x08, 0xf2, 0xf2, 0xf2, 0x01, 0x01, 0x01, 0x01, 0x00, 0x05, 0x05, 0x05, 0x00, 0x16, 0x16, 0x16, 0x03, 0x00, 0x00, 0x00, 0x04, 0xfd, 0xfd, 0xfd, 0x00, 0xe9, 0xe9, 0xe9, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfd, 0xfd, 0xfd, 0x06, 0x22, 0x22, 0x22, 0x00, 0x04, 0x04, 0x04, 0x00, 0xff, 0xff, 0xff, 0xff, 0xb4, 0xb4, 0xb4, 0x81, 0xcf, 0xcf, 0xcf, 0x81, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x0e, 0x70, 0x70, 0x70, 0x01, 0x83, 0x83, 0x83, 0x00, 0x11, 0x11, 0x11, 0x00, 0xef, 0xef, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x00, 0x63, 0x63, 0x63, 0x09, 0xa7, 0xa7, 0xa7, 0x1f, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x1b, 0x1b, 0x00, 0x6d, 0x6d, 0x6d, 0x00, 0x02, 0x02, 0x02, 0x00, 0xf4, 0xf4, 0xf4, 0x00, 0x74, 0x74, 0x74, 0x00, 0xef, 0xef, 0xef, 0x00, 0x01, 0x01, 0x01, 0x00, 0x59, 0x59, 0x59, 0x00, 0x30, 0x30, 0x30, 0x00, 0x01, 0x01, 0x01, 0x00, 0x81, 0x81, 0x81, 0x00, 0xc5, 0xc5, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x2e, 0x2e, 0x00, 0x6e, 0x6e, 0x6e, 0x00, 0x04, 0x04, 0x04, 0x01, 0xdb, 0xdb, 0xdb, 0x47, 0xcf, 0xcf, 0xcf, 0x81, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, 0xf8, 0x00, 0xbe, 0xbe, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x09, 0x00, 0xd4, 0xd4, 0xd4, 0x00, 0xea, 0xea, 0xea, 0x00, 0xc0, 0xc0, 0xc0, 0x00, 0x27, 0x27, 0x27, 0x00, 0x3c, 0x3c, 0x3c, 0x00, 0x02, 0x02, 0x02, 0x00, 0x3c, 0x3c, 0x3c, 0x00, 0x7c, 0x7c, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0x6c, 0x6c, 0x00, 0xb7, 0xb7, 0xb7, 0x00, 0x08, 0x08, 0x08, 0x00, 0x62, 0x62, 0x62, 0x00, 0xa4, 0xa4, 0xa4, 0x00, 0xf0, 0xf0, 0xf0, 0x00, 0xd3, 0xd3, 0xd3, 0x00, 0x39, 0x39, 0x39, 0x00, 0x37, 0x37, 0x37, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x19, 0x19, 0x37, 0x48, 0x48, 0x48, 0x49, 0x2b, 0x2b, 0x2b, 0x00, 0xac, 0xac, 0xac, 0x00, 0xc9, 0xc9, 0xc9, 0x00, 0xd7, 0xd7, 0xd7, 0x00, 0x12, 0x12, 0x12, 0x00, 0x26, 0x26, 0x26, 0x00, 0x3f, 0x3f, 0x3f, 0x00, 0x3c, 0x3c, 0x3c, 0x00, 0xcb, 0xcb, 0xcb, 0x00, 0x0c, 0x0c, 0x0c, 0x00, 0xdc, 0xdc, 0xdc, 0x00, 0x4d, 0x4d, 0x4d, 0x00, 0x07, 0x07, 0x07, 0x00, 0x2c, 0x2c, 0x2c, 0x00, 0xdf, 0xdf, 0xdf, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x0a, 0x0a, 0x0a, 0x00, 0x30, 0x30, 0x30, 0x00, 0x0f, 0x0f, 0x0f, 0x00, 0x24, 0x24, 0x24, 0x00, 0xd7, 0xd7, 0xd7, 0x00, 0x12, 0x12, 0x12, 0x00, 0xdd, 0xdd, 0xdd, 0x00, 0x4f, 0x4f, 0x4f, 0x00, 0xb3, 0xb3, 0xb3, 0xe6, 0xd4, 0xd4, 0xd4, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x2e, 0x2e, 0x40, 0x44, 0x44, 0x44, 0xbe, 0x22, 0x22, 0x22, 0x01, 0xec, 0xec, 0xec, 0x00, 0xdf, 0xdf, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x27, 0x27, 0x27, 0x00, 0xfd, 0xfd, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xdb, 0xdb, 0x00, 0xf7, 0xf7, 0xf7, 0x00, 0xfd, 0xfd, 0xfd, 0x00, 0x19, 0x19, 0x19, 0x00, 0x14, 0x14, 0x14, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xf5, 0xf5, 0xf5, 0x00, 0xd9, 0xd9, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x2c, 0x2c, 0x2c, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xdc, 0xdc, 0x00, 0xf7, 0xf7, 0xf7, 0x00, 0xfc, 0xfc, 0xfc, 0x00, 0x19, 0x19, 0x19, 0x00, 0xc6, 0xc6, 0xc6, 0x95, 0xd1, 0xd1, 0xd1, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x24, 0xb6, 0x40, 0x40, 0x40, 0x49, 0xee, 0xee, 0xee, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xcf, 0xcf, 0xcf, 0x66, 0xe3, 0xe3, 0xe3, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xfa, 0x0b, 0x0b, 0x0b, 0x00, 0xf6, 0xf6, 0xf6, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x1b, 0x1b, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x00, 0x20, 0x20, 0x20, 0x00, 0x42, 0x42, 0x42, 0x00, 0xff, 0xff, 0xff, 0x00, 0x06, 0x06, 0x06, 0x00, 0x42, 0x42, 0x42, 0x00, 0x3c, 0x3c, 0x3c, 0x00, 0x67, 0x67, 0x67, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x0a, 0x0a, 0x0a, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x00, 0x3b, 0x3b, 0x3b, 0x00, 0x2c, 0x2c, 0x2c, 0x00, 0x2c, 0x2c, 0x2c, 0x00, 0x27, 0x27, 0x27, 0x00, 0xec, 0xec, 0xec, 0x00, 0xf4, 0xf4, 0xf4, 0x00, 0x05, 0x05, 0x05, 0x00, 0x24, 0x24, 0x24, 0x00, 0xd7, 0xd7, 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x14, 0x14, 0x00, 0xf5, 0xf5, 0xf5, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xd3, 0xd3, 0xd3, 0x00, 0xb4, 0xb4, 0xb4, 0x00, 0xe5, 0xe5, 0xe5, 0x00, 0x9b, 0x9b, 0x9b, 0x00, 0xec, 0xec, 0xec, 0x00, 0xa4, 0xa4, 0xa4, 0x00, 0xcc, 0xcc, 0xcc, 0x00, 0xe0, 0xe0, 0xe0, 0x00, 0x02, 0x02, 0x02, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x09, 0x09, 0x09, 0x00, 0x16, 0x16, 0x16, 0x00, 0x09, 0x09, 0x09, 0x00, 0x1b, 0x1b, 0x1b, 0x00, 0x16, 0x16, 0x16, 0x00, 0xb9, 0xb9, 0xb9, 0x00, 0xf5, 0xf5, 0xf5, 0x00, 0xd9, 0xd9, 0xd9, 0x00, 0xdb, 0xdb, 0xdb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x1d, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x08, 0x08, 0x08, 0x00, 0x1d, 0x1d, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xea, 0xea, 0x00, 0xf6, 0xf6, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xf6, 0xf6, 0x00, 0xe0, 0xe0, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa1, 0xa1, 0xa1, 0x00, 0xdc, 0xdc, 0xdc, 0x00, 0xdc, 0xdc, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x0b, 0x0b, 0x0b, 0x00, 0xec, 0xec, 0xec, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x51, 0x51, 0x51, 0x00, 0x02, 0x02, 0x02, 0x00, 0xd8, 0xd8, 0xd8, 0x00, 0xd3, 0xd3, 0xd3, 0x00, 0x0c, 0x0c, 0x0c, 0x00, 0xf6, 0xf6, 0xf6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc9, 0xc9, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x5b, 0x5b, 0x5b, 0x00, 0xe7, 0xe7, 0xe7, 0x00, 0x27, 0x27, 0x27, 0x00, 0xfd, 0xfd, 0xfd, 0x00, 0xf4, 0xf4, 0xf4, 0x00, 0x27, 0x27, 0x27, 0x00, 0x9d, 0x9d, 0x9d, 0x00, 0x04, 0x04, 0x04, 0x00, 0x54, 0x54, 0x54, 0x00, 0xfa, 0xfa, 0xfa, 0x00, 0x90, 0x90, 0x90, 0x00, 0xf1, 0xf1, 0xf1, 0x00, 0xd9, 0xd9, 0xd9, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0x0e, 0x0e, 0x0e, 0x00, 0x17, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0xd4, 0xd4, 0x00, 0xf0, 0xf0, 0xf0, 0x00, 0xe6, 0xe6, 0xe6, 0x00, 0x11, 0x11, 0x11, 0x00, 0xe3, 0xe3, 0xe3, 0x00, 0xc0, 0xc0, 0xc0, 0x00, 0xff, 0xff, 0xff, 0x00, 0x05, 0x05, 0x05, 0x00, 0xea, 0xea, 0xea, 0x00, 0xae, 0xae, 0xae, 0x00, 0xf1, 0xf1, 0xf1, 0x00, 0xff, 0xff, 0xff, 0x00, 0x0e, 0x0e, 0x0e, 0x00, 0xf1, 0xf1, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0xf1, 0xf1, 0x00, 0xf1, 0xf1, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xea, 0xea, 0xea, 0x00, 0xb9, 0xb9, 0xb9, 0x00, 0xea, 0xea, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0x07, 0x07, 0x07, 0x00, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xf7, 0xf7, 0x00, 0xfb, 0xfb, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0xef, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0f, 0xfe, 0xfe, 0xfe, 0x08, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfd, 0xfd, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0xf3, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0xfb, 0xfb, 0xfb, 0x00, 0xfb, 0xfb, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xfa, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0xf9, 0xf9, 0xf9, 0xd3, 0xd7, 0xd7, 0xd7, 0x40, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xfa, 0xfa, 0xf8, 0xf7, 0xf7, 0xf7, 0xd4, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x03, 0x03, 0x03, 0x12, 0x01, 0x01, 0x01, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0xfd, 0xfe, 0xfe, 0xfe, 0xf4, 0xfe, 0xfe, 0xfe, 0xf0, 0x00, 0x00, 0x00, 0xef, 0x00, 0x00, 0x00, 0xf1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xfe, 0x66, 0xed, 0x2e, 0xac, 0x43, 0x0b, 0x33, 0x50, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/replay_icon_text.png.h0000600000176000000410000002277212105760300023771 0ustar buildbotwww-data00000000000000/* replay_icon_text.png - 1507 bytes */ static const unsigned char replay_icon_text_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71, 0xde, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x03, 0x17, 0x02, 0x27, 0x24, 0x5d, 0x95, 0xa3, 0xce, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0x0e, 0x17, 0x00, 0x00, 0x05, 0x3e, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x98, 0x7f, 0x48, 0xd4, 0x67, 0x1c, 0xc7, 0xdf, 0x5e, 0x17, 0xa7, 0xc9, 0xa9, 0xc8, 0xb4, 0xab, 0x44, 0x6e, 0xb5, 0xfe, 0x11, 0xa4, 0x06, 0xda, 0x1f, 0xab, 0xa0, 0xfd, 0x57, 0x64, 0x3f, 0x46, 0x84, 0xbb, 0x68, 0x65, 0x41, 0x50, 0x24, 0x2c, 0x18, 0xb1, 0x6a, 0xfb, 0x63, 0x8d, 0xfe, 0x19, 0x8e, 0x70, 0x23, 0x73, 0x48, 0x11, 0xb8, 0x02, 0x23, 0x2a, 0x8d, 0x0a, 0x36, 0x2e, 0x33, 0x2a, 0x07, 0x29, 0x49, 0x44, 0xa5, 0x61, 0xb6, 0xd8, 0x9c, 0xa5, 0x19, 0x9b, 0x76, 0xea, 0xdd, 0x79, 0xdf, 0xd7, 0xfe, 0xf9, 0x7e, 0xe5, 0xba, 0xee, 0xca, 0xb1, 0x5a, 0x31, 0x9e, 0x17, 0x7c, 0xfe, 0xb9, 0xe7, 0xf3, 0x7d, 0x3e, 0x9f, 0xe7, 0xfd, 0x3c, 0x9f, 0xe7, 0xf9, 0x70, 0x92, 0xc1, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x83, 0xc1, 0x60, 0x30, 0xfc, 0x0f, 0x49, 0x7b, 0x0b, 0x72, 0xe0, 0x4d, 0xe6, 0xe4, 0x4a, 0x48, 0x24, 0x99, 0x8d, 0x4a, 0xfa, 0x45, 0x52, 0xf9, 0xeb, 0x4a, 0x0e, 0x10, 0xf0, 0xe6, 0x77, 0x22, 0x91, 0x68, 0x34, 0xca, 0x83, 0x07, 0x0f, 0xa8, 0xa9, 0xa9, 0x21, 0x27, 0x27, 0x07, 0x49, 0xbb, 0x5e, 0x67, 0xdc, 0x24, 0xa7, 0xe1, 0xcd, 0x08, 0xe0, 0xec, 0x7e, 0x5e, 0x5e, 0x1e, 0x35, 0x35, 0x35, 0x00, 0x9c, 0x3e, 0x7d, 0x1a, 0x49, 0x83, 0xb6, 0x6f, 0x96, 0xa4, 0x6f, 0x24, 0xfd, 0x21, 0xe9, 0xaf, 0x38, 0xfb, 0x51, 0x52, 0x41, 0x8a, 0x13, 0x35, 0x1c, 0x67, 0xcd, 0x92, 0xde, 0x7d, 0x81, 0x00, 0xef, 0x27, 0x7c, 0x1b, 0x95, 0x74, 0x43, 0xd2, 0x27, 0x92, 0xea, 0x13, 0xc6, 0x9c, 0x78, 0xef, 0x24, 0xfc, 0x7e, 0x42, 0xd2, 0x0e, 0x49, 0xb7, 0x24, 0x85, 0xe3, 0xec, 0xa6, 0xa4, 0x4a, 0x49, 0xd9, 0x2f, 0x13, 0xc0, 0x25, 0xa9, 0x3c, 0x2b, 0x2b, 0x0b, 0x80, 0x91, 0x91, 0x11, 0x47, 0x80, 0x1c, 0x49, 0xa3, 0x8b, 0x17, 0x2f, 0x0e, 0x07, 0x83, 0xc1, 0xd8, 0xd0, 0xd0, 0x90, 0x35, 0x36, 0x36, 0x46, 0x7b, 0x7b, 0x3b, 0x6b, 0xd7, 0xae, 0x75, 0xbe, 0x9d, 0x13, 0x3f, 0xdf, 0x86, 0x0d, 0x1b, 0xb8, 0x7d, 0xfb, 0x76, 0x2c, 0x1c, 0x0e, 0xd3, 0xdd, 0xdd, 0xcd, 0xfa, 0xf5, 0xeb, 0x1d, 0xbf, 0xe9, 0x29, 0x04, 0xf8, 0x60, 0xc7, 0x8e, 0x1d, 0x00, 0xc4, 0x62, 0x31, 0xfa, 0xfa, 0xfa, 0xa8, 0xab, 0xab, 0x23, 0x2b, 0x2b, 0x0b, 0x49, 0xf5, 0x6d, 0x6d, 0x6d, 0x00, 0x4e, 0xbc, 0x2f, 0xec, 0x6f, 0x02, 0x4b, 0x97, 0x2e, 0x05, 0xe0, 0xc6, 0x8d, 0x1b, 0x48, 0x3a, 0xe1, 0xf7, 0xfb, 0x39, 0x7e, 0xfc, 0x38, 0x8f, 0x1e, 0x3d, 0x62, 0x7c, 0x7c, 0x9c, 0x87, 0x0f, 0x1f, 0x5a, 0x8d, 0x8d, 0x8d, 0x7f, 0x06, 0x02, 0x81, 0x53, 0x92, 0x0e, 0x4c, 0x4a, 0x80, 0xec, 0xec, 0x6c, 0x00, 0x06, 0x07, 0x07, 0x1d, 0x01, 0xbe, 0x5f, 0xb2, 0x64, 0x09, 0xd1, 0x68, 0x94, 0x96, 0x96, 0x16, 0x0a, 0x0b, 0x0b, 0x87, 0xbd, 0x5e, 0xef, 0xd0, 0xa1, 0x43, 0x87, 0x26, 0x16, 0x2b, 0xe9, 0xa7, 0xf8, 0xf9, 0x5a, 0x5a, 0x5a, 0x98, 0x39, 0x73, 0xe6, 0x53, 0x9f, 0xcf, 0xf7, 0xb4, 0xb9, 0xb9, 0x19, 0x80, 0xb2, 0xb2, 0x32, 0x24, 0xd5, 0xa6, 0x12, 0x60, 0xcf, 0x9e, 0x3d, 0x14, 0x15, 0x15, 0x91, 0x9e, 0x9e, 0xce, 0xe6, 0xcd, 0x9b, 0x01, 0x38, 0x72, 0xe4, 0x08, 0x92, 0xba, 0x2a, 0x2a, 0x2a, 0x00, 0x68, 0x6a, 0x6a, 0x42, 0x52, 0xc8, 0xbe, 0x9b, 0xae, 0xd7, 0xd6, 0xd6, 0x02, 0xb0, 0x73, 0xe7, 0x4e, 0x24, 0x8d, 0x5e, 0xbb, 0x76, 0x0d, 0x80, 0xd5, 0xab, 0x57, 0xe3, 0xf1, 0x78, 0xc2, 0x33, 0x66, 0xcc, 0x88, 0x6c, 0xd9, 0xb2, 0xe5, 0xb7, 0xce, 0xce, 0xce, 0xde, 0xc9, 0x08, 0xf0, 0x4c, 0x09, 0x1c, 0x3c, 0x78, 0x10, 0x49, 0xdd, 0x92, 0x06, 0x2e, 0x5d, 0xba, 0x04, 0x40, 0x71, 0x71, 0xf1, 0x84, 0x6f, 0x6e, 0x6e, 0x2e, 0x00, 0x5d, 0x5d, 0x5d, 0xd8, 0x47, 0x6d, 0x62, 0xbe, 0xd2, 0xd2, 0x52, 0x24, 0x7d, 0x27, 0x69, 0x7f, 0x49, 0x49, 0x09, 0x00, 0x57, 0xae, 0x5c, 0x41, 0xd2, 0x40, 0x92, 0xb8, 0x53, 0x25, 0x7d, 0x29, 0xa9, 0x47, 0x52, 0x4c, 0x12, 0x53, 0xa6, 0x4c, 0x01, 0x60, 0x60, 0x60, 0x00, 0x49, 0xb1, 0xf4, 0xf4, 0x74, 0x06, 0x07, 0x07, 0x89, 0x44, 0x22, 0xe4, 0xe6, 0xe6, 0x22, 0xa9, 0x28, 0x2d, 0x2d, 0x8d, 0xde, 0xde, 0x5e, 0x62, 0xb1, 0x18, 0xb3, 0x66, 0xcd, 0x42, 0xd2, 0x68, 0x34, 0x1a, 0x05, 0x60, 0xd1, 0xa2, 0x45, 0xce, 0xdc, 0x03, 0x92, 0x1a, 0xec, 0xc5, 0x1f, 0x78, 0xe9, 0x25, 0xe8, 0xd0, 0xd3, 0xd3, 0x43, 0x66, 0x66, 0x26, 0x92, 0x3e, 0x96, 0x34, 0x10, 0x0a, 0x85, 0x52, 0xfa, 0x8e, 0x8f, 0x8f, 0x3f, 0x27, 0x80, 0xc7, 0xe3, 0x41, 0x52, 0xa6, 0xa4, 0x4c, 0x8f, 0xc7, 0x03, 0x40, 0x28, 0x14, 0x4a, 0x25, 0x40, 0xfd, 0xdc, 0xb9, 0x73, 0x39, 0x73, 0xe6, 0x0c, 0x4f, 0x9e, 0x3c, 0xc1, 0xb2, 0xac, 0x89, 0x71, 0xcb, 0xb2, 0x1c, 0x9f, 0xee, 0xaa, 0xaa, 0x2a, 0x00, 0xb6, 0x6e, 0xdd, 0x8a, 0xa4, 0x9a, 0xd2, 0xd2, 0x52, 0x00, 0x82, 0xc1, 0xa0, 0x73, 0x67, 0x8c, 0x3a, 0xa5, 0xe2, 0xc4, 0xeb, 0xe8, 0xe8, 0xa0, 0xba, 0xba, 0xda, 0x11, 0xa8, 0xfe, 0x85, 0x27, 0xc0, 0xed, 0x76, 0x33, 0x6f, 0xde, 0x3c, 0x5a, 0x5b, 0x5b, 0xe3, 0x03, 0xb5, 0xc4, 0x0b, 0x90, 0x9d, 0x9d, 0x9d, 0xea, 0xe9, 0xfc, 0x37, 0x02, 0x84, 0x9c, 0xc4, 0x2b, 0x2b, 0x2b, 0xf1, 0x78, 0x3c, 0xb8, 0x5c, 0xae, 0x44, 0x9f, 0xb2, 0xd9, 0xb3, 0x67, 0x63, 0x59, 0x16, 0x97, 0x2f, 0x5f, 0x46, 0x52, 0x6c, 0xdf, 0xbe, 0x7d, 0x00, 0x54, 0x54, 0x54, 0x20, 0xa9, 0x4a, 0x52, 0xbd, 0xdf, 0xef, 0xe7, 0xe8, 0xd1, 0xa3, 0xf4, 0xf5, 0xf5, 0x3d, 0xb3, 0x49, 0x6d, 0x6d, 0x6d, 0x4e, 0xe9, 0xbc, 0xb0, 0x04, 0x32, 0x24, 0xd5, 0xf9, 0x7c, 0x3e, 0xc2, 0xe1, 0x30, 0xf7, 0xee, 0xdd, 0xc3, 0xe5, 0x72, 0x21, 0x69, 0xe0, 0xe2, 0xc5, 0x8b, 0x00, 0xac, 0x58, 0xb1, 0x02, 0x49, 0x3f, 0xdb, 0xbe, 0x73, 0xec, 0x9a, 0xae, 0x4d, 0xac, 0xed, 0x92, 0x92, 0x12, 0x24, 0xed, 0x97, 0xf4, 0xed, 0x24, 0x4a, 0x20, 0x14, 0x89, 0x44, 0x00, 0xc8, 0xc8, 0xc8, 0x40, 0xd2, 0x57, 0x45, 0x45, 0x45, 0xc9, 0xca, 0x24, 0x76, 0xfe, 0xfc, 0x79, 0x2c, 0xcb, 0xc2, 0xef, 0xf7, 0x73, 0xf3, 0xe6, 0x4d, 0x46, 0x46, 0x46, 0xf0, 0x7a, 0xbd, 0x48, 0x7a, 0xcf, 0x16, 0xa1, 0xca, 0x7e, 0x3d, 0xf0, 0x7a, 0xbd, 0x94, 0x97, 0x97, 0x03, 0x10, 0x89, 0x44, 0x26, 0x25, 0x80, 0xd3, 0x28, 0x0d, 0x9f, 0x3a, 0x75, 0x0a, 0x80, 0x35, 0x6b, 0xd6, 0x20, 0xa9, 0x6e, 0xe1, 0xc2, 0x85, 0x84, 0xc3, 0x61, 0xee, 0xde, 0xbd, 0xcb, 0xfc, 0xf9, 0xf3, 0xc7, 0xdc, 0x6e, 0xf7, 0x68, 0x61, 0x61, 0xe1, 0x58, 0x65, 0x65, 0xe5, 0xaf, 0x9d, 0x9d, 0x9d, 0x7d, 0x89, 0x02, 0x34, 0x37, 0x37, 0xe3, 0xf3, 0xf9, 0x46, 0xf2, 0xf3, 0xf3, 0x47, 0x2e, 0x5c, 0xb8, 0x00, 0xc0, 0xca, 0x95, 0x2b, 0x53, 0x5d, 0x82, 0xa1, 0x8e, 0x8e, 0x0e, 0x00, 0xd6, 0xad, 0x5b, 0x47, 0x4e, 0x4e, 0xce, 0xd8, 0xb9, 0x73, 0xe7, 0x92, 0xe5, 0xf6, 0x75, 0x59, 0x59, 0x19, 0x00, 0x87, 0x0f, 0x1f, 0x06, 0xa0, 0xa1, 0xa1, 0xc1, 0xb9, 0xa8, 0xd3, 0x24, 0x55, 0xdd, 0xba, 0x75, 0xeb, 0x41, 0x20, 0x10, 0xf8, 0x3d, 0x2f, 0x2f, 0x2f, 0x3c, 0x75, 0xea, 0xd4, 0xf0, 0xb2, 0x65, 0xcb, 0x00, 0xb8, 0x7a, 0xf5, 0xea, 0xa4, 0x05, 0x90, 0xa4, 0xcf, 0x57, 0xad, 0x5a, 0x05, 0x40, 0x6b, 0x6b, 0x2b, 0x92, 0xea, 0x24, 0x0d, 0x2f, 0x58, 0xb0, 0x20, 0xd4, 0xd4, 0xd4, 0x14, 0x7d, 0xfc, 0xf8, 0xb1, 0x15, 0x8d, 0x46, 0xe9, 0xed, 0xed, 0xb5, 0x1a, 0x1b, 0x1b, 0x9f, 0x04, 0x02, 0x81, 0xc6, 0xc4, 0x85, 0x6d, 0xdc, 0xb8, 0x91, 0xae, 0xae, 0xae, 0x58, 0x24, 0x12, 0xa1, 0xa7, 0xa7, 0xc7, 0x79, 0x29, 0x90, 0xe4, 0x4b, 0x12, 0xb7, 0xa1, 0xb8, 0xb8, 0x98, 0xf6, 0xf6, 0x76, 0xa7, 0x11, 0xb3, 0xb6, 0x6d, 0xdb, 0x96, 0x2c, 0xb7, 0xe9, 0x2e, 0x97, 0x8b, 0xfb, 0xf7, 0xef, 0x4f, 0x8c, 0x2d, 0x5f, 0xbe, 0x1c, 0x49, 0x9f, 0xda, 0xe3, 0x55, 0x9b, 0x36, 0x6d, 0x6a, 0x38, 0x7b, 0xf6, 0xec, 0x50, 0x7f, 0x7f, 0xbf, 0xf3, 0x0c, 0x72, 0xec, 0xd8, 0x31, 0x0a, 0x0a, 0x0a, 0x90, 0xf4, 0x43, 0xb2, 0x9e, 0x3c, 0xde, 0x1c, 0x7c, 0x09, 0xbf, 0xd7, 0xd9, 0xf5, 0xbc, 0x4b, 0xd2, 0x5d, 0xbb, 0x55, 0x76, 0xec, 0xba, 0xa4, 0xed, 0x76, 0x93, 0xf1, 0xdc, 0xce, 0xc6, 0xd9, 0x25, 0xbb, 0x64, 0x92, 0xc5, 0x4d, 0xb7, 0x1b, 0xaa, 0xf8, 0x79, 0x53, 0xe5, 0x76, 0x79, 0xf7, 0xee, 0xdd, 0x00, 0xf4, 0xf7, 0xf7, 0xe3, 0x76, 0xbb, 0x91, 0x94, 0x6f, 0x8f, 0xe5, 0x48, 0xfa, 0x4c, 0xd2, 0x9d, 0x24, 0x8d, 0xd0, 0x76, 0x49, 0x53, 0xfe, 0xeb, 0xce, 0xf2, 0x55, 0x52, 0x25, 0x89, 0x69, 0xd3, 0xa6, 0x71, 0xf2, 0xe4, 0x49, 0x00, 0xf6, 0xee, 0xdd, 0x8b, 0xbd, 0xd8, 0xb7, 0x86, 0xd7, 0x2a, 0x40, 0x30, 0x18, 0x9c, 0xd8, 0xf9, 0xea, 0xea, 0x6a, 0x67, 0xf7, 0x3f, 0x7c, 0xab, 0x04, 0x48, 0x71, 0x6c, 0x5f, 0xd9, 0x09, 0x88, 0xb3, 0x3b, 0x92, 0x3e, 0x32, 0xff, 0x6e, 0x18, 0x0c, 0xff, 0x98, 0xbf, 0x01, 0xe7, 0x07, 0x1b, 0x95, 0xa2, 0xe8, 0xe2, 0x76, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/s44.png.h0000600000176000000410000702452012105760300021033 0ustar buildbotwww-data00000000000000/* s44.png - 289489 bytes */ static const unsigned char s44_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x01, 0xf4, 0x00, 0x00, 0x01, 0x6e, 0x08, 0x06, 0x00, 0x00, 0x00, 0x77, 0x2b, 0xea, 0xaf, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x1e, 0xc2, 0x00, 0x00, 0x1e, 0xc2, 0x01, 0x6e, 0xd0, 0x75, 0x3e, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd9, 0x07, 0x1d, 0x10, 0x10, 0x01, 0xc8, 0x55, 0x35, 0xa2, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x74, 0xbc, 0x77, 0x98, 0x24, 0x65, 0xb9, 0xf7, 0xff, 0xa9, 0x5c, 0xd5, 0xb9, 0xa7, 0x7b, 0x66, 0x7a, 0xd2, 0x46, 0x16, 0x5c, 0x50, 0x44, 0x51, 0x3c, 0x22, 0x82, 0x0a, 0xa2, 0x1c, 0x10, 0x90, 0x8c, 0xa2, 0x48, 0x12, 0x0e, 0x41, 0x11, 0x11, 0x10, 0x04, 0x05, 0xc9, 0x19, 0x01, 0x45, 0x40, 0x50, 0x09, 0x2a, 0x08, 0xac, 0x08, 0x88, 0xa8, 0x04, 0xf1, 0xf0, 0x13, 0x13, 0xa2, 0xb0, 0x84, 0x3d, 0x9b, 0x67, 0x27, 0xf6, 0x74, 0xae, 0xee, 0xca, 0xf5, 0xfe, 0x51, 0x5d, 0xc5, 0xec, 0x79, 0x7f, 0xef, 0x5c, 0xd7, 0x5c, 0xdb, 0x0c, 0xdd, 0xd5, 0x15, 0x9e, 0x3b, 0x7c, 0xc3, 0xfd, 0x08, 0x1f, 0xdc, 0x73, 0xef, 0xf0, 0xa2, 0x0b, 0xbf, 0xc9, 0x57, 0xcf, 0x3c, 0x03, 0xdf, 0xb3, 0x48, 0x19, 0x1a, 0xa2, 0x28, 0xd0, 0xac, 0x2f, 0x90, 0xcd, 0xe9, 0xf4, 0x7a, 0x3d, 0x04, 0x41, 0xa0, 0x6b, 0x5b, 0xc8, 0xb2, 0x4c, 0x2e, 0x9f, 0x27, 0x9b, 0xcd, 0x02, 0x30, 0x5b, 0x9d, 0x24, 0x0c, 0x14, 0xca, 0xa5, 0x31, 0x14, 0x29, 0xcf, 0xdc, 0x4c, 0x93, 0x1b, 0xae, 0xbf, 0x8d, 0x2d, 0x5b, 0x26, 0x99, 0x9e, 0x9a, 0xe5, 0x43, 0x7b, 0xec, 0x45, 0xbd, 0xd5, 0x60, 0xf9, 0x8a, 0xa5, 0xcc, 0xce, 0xce, 0x52, 0x1c, 0x18, 0xa0, 0xd1, 0x68, 0x53, 0x6b, 0x74, 0xa8, 0x0c, 0x8f, 0x32, 0x3f, 0x5f, 0x65, 0x68, 0xb8, 0x88, 0xa4, 0x38, 0x9c, 0x70, 0xd2, 0x91, 0x0c, 0x94, 0x35, 0x42, 0xa1, 0x8b, 0xa6, 0x8b, 0xa8, 0xaa, 0xcc, 0x40, 0x29, 0x8b, 0xeb, 0xfa, 0x6c, 0xdd, 0xba, 0x8d, 0x3d, 0xf7, 0xdc, 0x93, 0x99, 0x99, 0x19, 0xf6, 0xd9, 0xe7, 0xa3, 0xfc, 0xf7, 0x4b, 0x2f, 0x30, 0x33, 0x33, 0x45, 0xaf, 0xbe, 0x02, 0xd7, 0x75, 0x39, 0xfe, 0xb8, 0xcf, 0xf3, 0xae, 0xd5, 0xab, 0x90, 0xa5, 0x90, 0x56, 0xab, 0xc1, 0xcd, 0xb7, 0xdc, 0x84, 0x65, 0x76, 0x70, 0x1d, 0x87, 0x4c, 0x26, 0x83, 0x28, 0x8a, 0xcc, 0x4e, 0xcf, 0x30, 0x3c, 0x3c, 0x88, 0x63, 0x59, 0x0c, 0x0d, 0x0d, 0xb1, 0x65, 0xcb, 0x16, 0x44, 0xa3, 0x87, 0xae, 0xeb, 0xd8, 0xb6, 0x8d, 0x6d, 0xf7, 0x58, 0x58, 0xe8, 0xa2, 0x69, 0xb0, 0xdb, 0x6e, 0xef, 0xc6, 0x34, 0x4d, 0x64, 0x25, 0x64, 0x68, 0xa8, 0xc2, 0xf2, 0xe5, 0xcb, 0xb9, 0xff, 0xfe, 0x9f, 0x31, 0x36, 0x3a, 0x46, 0x18, 0x86, 0x38, 0x8e, 0x47, 0x18, 0x86, 0xcc, 0xd7, 0x5b, 0x34, 0x16, 0x6c, 0x64, 0x0d, 0x2e, 0xfd, 0xce, 0xc5, 0xfc, 0xf5, 0x2f, 0xaf, 0xf2, 0xfb, 0xdf, 0xbd, 0xc0, 0xd0, 0xe0, 0x18, 0x97, 0x5d, 0x76, 0x25, 0x12, 0x79, 0x14, 0x55, 0xe2, 0x88, 0xc3, 0x0f, 0xe6, 0xe9, 0x67, 0x9e, 0xe2, 0x90, 0x43, 0x0f, 0x20, 0xc4, 0x23, 0x97, 0x4f, 0x61, 0x18, 0x2a, 0x3f, 0xb8, 0xf5, 0x1e, 0x1a, 0x8d, 0x1a, 0x53, 0x53, 0x53, 0xdc, 0x70, 0xe3, 0x75, 0xcc, 0xce, 0xcc, 0x90, 0xce, 0xe8, 0x7c, 0xec, 0xe3, 0xfb, 0xf0, 0xd4, 0x53, 0xbf, 0xc5, 0x30, 0x54, 0x76, 0xd8, 0x61, 0x07, 0x24, 0x49, 0x62, 0x70, 0x70, 0x90, 0x3d, 0xf6, 0xd8, 0x83, 0xfb, 0xee, 0xbb, 0x8f, 0x66, 0xb3, 0x49, 0xa3, 0xde, 0xe1, 0x23, 0xfb, 0xed, 0x41, 0xb7, 0x6b, 0xb2, 0xd7, 0x47, 0xf7, 0xe4, 0xd6, 0x9b, 0xef, 0x82, 0x00, 0xf4, 0x74, 0x0a, 0xdf, 0x55, 0xf8, 0xf1, 0xbd, 0x0f, 0xd0, 0xa8, 0x6a, 0x2c, 0x5d, 0xb2, 0x82, 0xea, 0x7c, 0x03, 0xd7, 0x75, 0x31, 0x52, 0x32, 0x92, 0x62, 0x21, 0xa9, 0x3d, 0xce, 0x3b, 0xff, 0xab, 0x5c, 0x7f, 0xf5, 0x37, 0xb8, 0xf2, 0xca, 0xab, 0x99, 0x9e, 0x9e, 0xc6, 0x71, 0x5c, 0x7c, 0x2f, 0xa4, 0xd7, 0xb3, 0x29, 0x97, 0x87, 0x00, 0x08, 0x03, 0x70, 0x5d, 0x17, 0x59, 0x96, 0xb1, 0x6d, 0x9b, 0x20, 0x08, 0xc8, 0xe5, 0x72, 0xcc, 0xcc, 0xcc, 0x50, 0x2a, 0x95, 0xf0, 0x5c, 0x0b, 0xdf, 0xf7, 0x01, 0x50, 0x55, 0x15, 0x41, 0x10, 0x70, 0x1c, 0x07, 0xcf, 0x8b, 0xee, 0x8f, 0x28, 0x8a, 0x84, 0x61, 0x88, 0x2c, 0xcb, 0x84, 0x61, 0x88, 0xe7, 0x79, 0xa8, 0xaa, 0x8a, 0x2c, 0xcb, 0x58, 0x96, 0x85, 0xa2, 0x28, 0x00, 0x04, 0x41, 0x80, 0xef, 0xfb, 0x48, 0x92, 0x94, 0xfc, 0xcd, 0xf3, 0x3c, 0x82, 0x20, 0xc0, 0x30, 0x0c, 0x64, 0x59, 0xc6, 0xf3, 0x3c, 0x7c, 0xdf, 0x47, 0x14, 0x45, 0x7c, 0xdf, 0xc7, 0xb6, 0x6d, 0x7c, 0x11, 0x02, 0xd7, 0x43, 0x14, 0x45, 0x74, 0x55, 0x43, 0x91, 0x65, 0x42, 0xcf, 0xc7, 0x77, 0x3d, 0x00, 0xb2, 0x69, 0x0d, 0x45, 0xd1, 0x68, 0x99, 0x1d, 0x82, 0x20, 0x00, 0x41, 0xea, 0x9f, 0xab, 0x4e, 0xab, 0xd3, 0x41, 0x94, 0x74, 0x0a, 0x85, 0x02, 0x5b, 0xb6, 0x6c, 0xe2, 0x8f, 0x2f, 0x3e, 0xcf, 0x5e, 0x7b, 0xed, 0x8d, 0xa2, 0xc0, 0x92, 0xa5, 0xe3, 0xd8, 0xb6, 0x4d, 0xa3, 0xd1, 0xe8, 0x9f, 0x47, 0x88, 0x2c, 0x29, 0xa4, 0x52, 0x29, 0x74, 0x5d, 0x47, 0x96, 0x55, 0x00, 0x5c, 0xaf, 0x97, 0x9c, 0x57, 0x18, 0x86, 0xf8, 0xbe, 0xbf, 0xdd, 0xb5, 0x8b, 0x22, 0xc9, 0xb5, 0x3b, 0x8e, 0x13, 0x9d, 0xa7, 0xae, 0x23, 0x49, 0x12, 0xbe, 0xef, 0x63, 0x9a, 0xbd, 0xe8, 0xbc, 0x88, 0xde, 0xa7, 0x28, 0x0a, 0x82, 0x20, 0x24, 0xc7, 0xd1, 0xd4, 0x34, 0x61, 0x18, 0x12, 0x04, 0x41, 0x72, 0x1f, 0x45, 0x51, 0xc4, 0xf3, 0x3c, 0x6c, 0xdb, 0x26, 0x14, 0x1d, 0xc6, 0x46, 0x27, 0xd8, 0xb6, 0x6d, 0x16, 0x01, 0x95, 0x81, 0xe2, 0x30, 0x8d, 0x7a, 0x87, 0x5f, 0xad, 0x79, 0x82, 0x56, 0xab, 0x4b, 0x28, 0xa4, 0x09, 0x42, 0x0f, 0xdb, 0x36, 0x71, 0x3d, 0x8b, 0xe1, 0x4a, 0x89, 0x7a, 0x63, 0x8e, 0x4c, 0x26, 0x85, 0x20, 0x40, 0xe0, 0x64, 0x08, 0x02, 0x97, 0x6f, 0x5d, 0x7c, 0x3e, 0x99, 0xac, 0xca, 0xc8, 0xe8, 0x10, 0xd5, 0xea, 0x1c, 0x5f, 0x3a, 0xe1, 0x8b, 0x34, 0xea, 0x2d, 0x2e, 0xbe, 0xf0, 0x3b, 0xf8, 0x5e, 0x88, 0xa6, 0x2b, 0x04, 0x81, 0x4f, 0x10, 0x3a, 0x54, 0x46, 0x4a, 0x6c, 0xd8, 0xb8, 0x99, 0x6c, 0x56, 0xc0, 0xb1, 0x42, 0xca, 0xe5, 0x12, 0x9e, 0xe7, 0x61, 0x59, 0x16, 0xae, 0xeb, 0x62, 0xdb, 0x01, 0xaa, 0x2a, 0x10, 0x04, 0x21, 0xae, 0x0b, 0x03, 0x03, 0x06, 0xbd, 0x5e, 0xaf, 0x7f, 0x3f, 0x44, 0x5c, 0xd7, 0xa3, 0x50, 0xc8, 0xa3, 0xaa, 0x2a, 0x73, 0xb3, 0x75, 0x7c, 0xdf, 0x67, 0xd9, 0xb2, 0x65, 0xb8, 0xae, 0xcb, 0xf5, 0xd7, 0x5f, 0xcf, 0x05, 0x17, 0x5c, 0xc0, 0xec, 0xec, 0x6c, 0x7f, 0xbd, 0x11, 0xdd, 0x67, 0x37, 0x40, 0x92, 0x20, 0x95, 0x4a, 0x25, 0xf7, 0x29, 0x9d, 0x4e, 0xb3, 0x71, 0xe3, 0x16, 0x06, 0x06, 0xf2, 0xd8, 0xb6, 0x8d, 0x24, 0x49, 0x94, 0x4a, 0x25, 0x36, 0x6e, 0xdc, 0x42, 0xb9, 0x5c, 0xa4, 0x5e, 0xaf, 0xb3, 0x66, 0xcd, 0x1a, 0x74, 0x5d, 0xe7, 0xa0, 0x83, 0x0e, 0x42, 0xd3, 0x34, 0x82, 0x20, 0xa0, 0xd5, 0xea, 0x01, 0x50, 0x2e, 0xe7, 0xc9, 0x64, 0x32, 0x6c, 0xda, 0xb4, 0x0d, 0x51, 0x00, 0xc3, 0x48, 0xe3, 0xd8, 0x01, 0x9a, 0xa6, 0xf3, 0xcb, 0x87, 0xd7, 0x10, 0x86, 0x21, 0xcf, 0xbf, 0xf8, 0x77, 0x0e, 0x38, 0xe0, 0x00, 0xe6, 0x66, 0x6b, 0xfc, 0xfb, 0xdf, 0xaf, 0xf3, 0xf1, 0x8f, 0xed, 0xc7, 0xe6, 0xcd, 0x5b, 0x19, 0x1d, 0x59, 0x82, 0x65, 0x59, 0xc8, 0xd9, 0x0d, 0x10, 0x4a, 0x58, 0xbd, 0x80, 0x2b, 0x2e, 0xbf, 0x9e, 0xdd, 0xde, 0xbb, 0x3b, 0x9f, 0xfa, 0xd4, 0x81, 0xc8, 0xb2, 0x4c, 0x3a, 0x9d, 0xe6, 0xeb, 0xe7, 0x9c, 0xc9, 0x4d, 0x37, 0xdd, 0xc8, 0x9f, 0xfe, 0xfb, 0x79, 0x10, 0x7c, 0x1e, 0x79, 0xe4, 0x61, 0x7e, 0xf0, 0x83, 0x1f, 0xb0, 0xb0, 0x50, 0xe7, 0x99, 0x67, 0x9e, 0xe1, 0xa0, 0xcf, 0xec, 0xc1, 0x37, 0xce, 0x3d, 0x1f, 0xd7, 0xf5, 0x49, 0x19, 0x59, 0x66, 0x66, 0xaa, 0x08, 0xc8, 0x7c, 0xe3, 0x1b, 0xe7, 0xb3, 0x7c, 0xd9, 0x4a, 0xce, 0x3b, 0xef, 0x02, 0x14, 0x5d, 0xa1, 0xde, 0x98, 0x65, 0x7c, 0x62, 0x98, 0xb7, 0xd7, 0xaf, 0x65, 0x97, 0x77, 0xef, 0xc8, 0xd4, 0xec, 0x24, 0x46, 0x4a, 0x23, 0x74, 0x2a, 0x5c, 0x7f, 0xfd, 0x8d, 0xdc, 0x78, 0xc3, 0xcd, 0x5c, 0xfe, 0xdd, 0xab, 0xd8, 0xb8, 0x61, 0x92, 0xc9, 0xc9, 0x19, 0x56, 0xed, 0xb0, 0x13, 0x96, 0x65, 0x93, 0x32, 0x72, 0x49, 0x5c, 0x89, 0xa2, 0x48, 0xa3, 0x59, 0x43, 0x51, 0x14, 0x2a, 0x95, 0x0a, 0x5b, 0xb7, 0x6e, 0x45, 0x15, 0x05, 0xc6, 0x46, 0x27, 0xa8, 0x56, 0x6b, 0x94, 0x8b, 0x65, 0x36, 0x6d, 0xda, 0x44, 0xb9, 0x54, 0x44, 0x96, 0x45, 0x4e, 0x3f, 0xfd, 0x34, 0x52, 0x59, 0x97, 0xf9, 0xea, 0x2c, 0x85, 0x42, 0x86, 0x81, 0x62, 0x9e, 0x4e, 0xa7, 0x8d, 0x18, 0x0a, 0x28, 0x8a, 0x46, 0xad, 0xd6, 0x40, 0xd1, 0x25, 0x84, 0x20, 0xec, 0xc7, 0x56, 0x88, 0x24, 0x88, 0x08, 0x82, 0x80, 0x10, 0xfa, 0x04, 0x41, 0x80, 0xeb, 0xc9, 0x18, 0x86, 0x81, 0x28, 0x29, 0x84, 0xa2, 0x44, 0x75, 0xa1, 0x46, 0x36, 0x9f, 0xe3, 0x9b, 0x17, 0x5c, 0xc4, 0xc4, 0xb2, 0xa5, 0x54, 0xab, 0x35, 0xbe, 0xf6, 0xb5, 0xaf, 0xb2, 0x64, 0xc9, 0x38, 0x5b, 0xb6, 0x6e, 0xe4, 0xa6, 0x9b, 0xaf, 0xe3, 0xfc, 0xf3, 0xbf, 0x81, 0xae, 0x6b, 0x2c, 0xd4, 0xe6, 0x99, 0x9d, 0x59, 0x20, 0x9d, 0xd1, 0x30, 0xdb, 0x36, 0x99, 0x9c, 0x8a, 0x65, 0x39, 0xf8, 0x3e, 0xec, 0xf5, 0xd1, 0x0f, 0xb0, 0x71, 0xe3, 0x46, 0x4e, 0x3b, 0xe5, 0x5c, 0x7e, 0xf4, 0xa3, 0x1f, 0x01, 0x20, 0x08, 0x02, 0x92, 0x24, 0x31, 0x37, 0x37, 0xc7, 0xc4, 0xc4, 0x04, 0x53, 0x53, 0x53, 0xc8, 0xb2, 0x4a, 0xbb, 0xdd, 0xa6, 0xd7, 0xe9, 0x32, 0x50, 0xae, 0x70, 0xe7, 0x0f, 0xef, 0x41, 0x92, 0x64, 0xd2, 0xe9, 0x2c, 0xfb, 0xef, 0xf7, 0x49, 0xd2, 0x99, 0x2e, 0xb9, 0x5c, 0x8e, 0x4c, 0x26, 0x43, 0xab, 0xd5, 0x62, 0x70, 0x70, 0x10, 0xd3, 0x34, 0x69, 0xb5, 0x5a, 0xa4, 0x52, 0x29, 0x82, 0xc0, 0xdb, 0x2e, 0xa6, 0x05, 0x41, 0x40, 0x10, 0x04, 0x82, 0x20, 0x88, 0xae, 0xcf, 0x8d, 0xae, 0x53, 0x92, 0xa4, 0x24, 0x4f, 0x45, 0x31, 0x60, 0xe3, 0xfb, 0xd1, 0xff, 0xcb, 0x64, 0x32, 0x48, 0x92, 0x44, 0xaf, 0xd7, 0xc3, 0x30, 0x8c, 0x24, 0x9e, 0x33, 0x99, 0x0c, 0x61, 0x18, 0x26, 0xf9, 0x2f, 0xce, 0x81, 0x9e, 0xe7, 0x25, 0xbf, 0xc5, 0x62, 0x31, 0xc9, 0x75, 0x9e, 0x17, 0xe5, 0x34, 0x49, 0x92, 0x92, 0x5c, 0x9a, 0x4e, 0x47, 0xdf, 0x09, 0x24, 0x79, 0x57, 0x7c, 0xfb, 0xad, 0x0d, 0x9c, 0x74, 0xe2, 0x97, 0x31, 0x8c, 0x0c, 0xbd, 0x9e, 0x8b, 0xd9, 0xb1, 0x99, 0x9c, 0x9c, 0xa6, 0x34, 0x30, 0x44, 0xa3, 0xde, 0x26, 0x9b, 0x29, 0x10, 0xf8, 0x02, 0x2b, 0x57, 0xec, 0x48, 0x3e, 0x37, 0x80, 0x28, 0x2a, 0x4c, 0x4f, 0xcf, 0x11, 0x04, 0x02, 0x95, 0xca, 0x30, 0x83, 0x43, 0x45, 0x1a, 0x8d, 0x2a, 0xb5, 0xfa, 0x2c, 0xe5, 0xc1, 0x3c, 0x17, 0x5c, 0x78, 0x36, 0x33, 0xb3, 0x9b, 0x29, 0x0d, 0xa6, 0x40, 0xec, 0xb2, 0x50, 0x9f, 0x64, 0x66, 0x76, 0x23, 0x37, 0xdd, 0x7c, 0x35, 0xf3, 0xd5, 0x6d, 0xc8, 0x4a, 0x48, 0xa5, 0x52, 0xa6, 0x67, 0xb5, 0x19, 0x19, 0x1a, 0x46, 0x16, 0xe1, 0x1f, 0x7f, 0xfd, 0x0b, 0xa1, 0xe7, 0x23, 0x86, 0x50, 0xaf, 0x2e, 0xd0, 0x6e, 0xb4, 0xb9, 0xe0, 0xbc, 0xf3, 0xa8, 0xce, 0x56, 0xe9, 0x75, 0x4c, 0xde, 0xbd, 0x7a, 0x67, 0x5e, 0x7a, 0xf1, 0xbf, 0x59, 0x3a, 0x3e, 0xc1, 0xdc, 0xf4, 0x0c, 0x7f, 0xff, 0xcb, 0x2b, 0x14, 0x73, 0x79, 0x1a, 0xcd, 0x59, 0x3e, 0xf7, 0xf9, 0xc3, 0x59, 0xb1, 0xc3, 0x18, 0xff, 0x7e, 0xed, 0x6f, 0x8c, 0x8e, 0x0d, 0xf2, 0xe6, 0xdb, 0xaf, 0xe2, 0x7a, 0x6d, 0xf6, 0xfb, 0xe4, 0xde, 0xa4, 0xd2, 0x32, 0x21, 0x36, 0xdd, 0x5e, 0x83, 0xf1, 0x89, 0x21, 0xfc, 0xc0, 0xc6, 0xb6, 0x4d, 0xa6, 0xa6, 0xb6, 0x90, 0x4a, 0xa9, 0x84, 0x81, 0x40, 0xd7, 0xb4, 0x90, 0x24, 0x89, 0x81, 0x81, 0x32, 0xef, 0x79, 0xcf, 0x0e, 0xa4, 0xd3, 0x06, 0x0b, 0x0b, 0x75, 0xde, 0x7e, 0x7b, 0x23, 0xf3, 0xf3, 0x75, 0x96, 0x2d, 0x5b, 0xc1, 0xda, 0xb5, 0x6f, 0xb2, 0xf7, 0x47, 0xf7, 0x66, 0x9f, 0x7d, 0xf6, 0xa1, 0xd1, 0x68, 0x31, 0x3c, 0x3c, 0x8c, 0xaa, 0xaa, 0x7c, 0xff, 0xb6, 0x7b, 0x18, 0x1d, 0x1b, 0x21, 0x9b, 0x2e, 0x70, 0xcd, 0xd5, 0xdf, 0xe3, 0xaf, 0x7f, 0xf9, 0x17, 0xc3, 0x43, 0xe3, 0x0c, 0x96, 0xc7, 0x78, 0xe0, 0xfe, 0x87, 0x50, 0x35, 0x99, 0x57, 0x5f, 0xfd, 0x27, 0x8f, 0x3f, 0xf1, 0x6b, 0xb6, 0x4d, 0x6d, 0xc5, 0xee, 0xf5, 0x50, 0x55, 0x99, 0xdb, 0x6e, 0xfb, 0x1e, 0x5b, 0xb7, 0x6e, 0xe3, 0xd0, 0x43, 0x0f, 0xe6, 0x0b, 0x5f, 0xf8, 0x02, 0x37, 0xde, 0x74, 0x3d, 0xae, 0x6b, 0xb3, 0x74, 0xd9, 0x38, 0x7e, 0xe0, 0xf1, 0xea, 0xab, 0xaf, 0xf6, 0x17, 0x69, 0x48, 0xb5, 0x3a, 0xc7, 0xd4, 0xd4, 0x24, 0xae, 0x6b, 0xb3, 0x66, 0xcd, 0xa3, 0xcc, 0xcf, 0xcf, 0xa2, 0x69, 0x0a, 0xa5, 0x72, 0x16, 0x4d, 0xca, 0xd0, 0x6b, 0x7b, 0xfc, 0xf9, 0x4f, 0x7f, 0x45, 0xd7, 0xa4, 0xe8, 0xf3, 0xb6, 0xcf, 0x8f, 0x7f, 0x74, 0x2f, 0x86, 0x6a, 0xb0, 0x7c, 0xc9, 0x72, 0x2c, 0xb3, 0x4b, 0x3e, 0x9b, 0xa6, 0x54, 0xcc, 0x92, 0xcb, 0x2a, 0xb8, 0x4e, 0x8b, 0xf3, 0xce, 0x3d, 0x8b, 0x4c, 0x5a, 0x60, 0xed, 0x1b, 0xaf, 0x51, 0x6f, 0xcc, 0x63, 0x18, 0x1a, 0x13, 0x13, 0xe3, 0x48, 0x32, 0x18, 0x29, 0x05, 0x49, 0x0a, 0x99, 0x9b, 0x9b, 0x45, 0x56, 0x24, 0x74, 0x43, 0xa3, 0x63, 0xb6, 0xf1, 0x03, 0x8f, 0x76, 0xa7, 0x0d, 0x42, 0xc8, 0xd0, 0xf0, 0x20, 0xae, 0xe7, 0x24, 0x41, 0x24, 0xcb, 0x32, 0x92, 0x24, 0x21, 0x08, 0x02, 0xa2, 0x28, 0x46, 0xcd, 0x40, 0xbf, 0xa8, 0x05, 0x41, 0xf0, 0xff, 0x1b, 0x10, 0x9e, 0xe7, 0x21, 0x08, 0x02, 0xf1, 0x4f, 0x7c, 0x9c, 0xed, 0x0a, 0xb6, 0xef, 0xe3, 0x38, 0x4e, 0x52, 0x2c, 0xe2, 0x63, 0xc4, 0x3f, 0x8b, 0x5f, 0xcb, 0xb2, 0x8c, 0x20, 0x08, 0xb8, 0xae, 0x8b, 0xeb, 0xba, 0x04, 0x41, 0x40, 0x3a, 0x9d, 0x26, 0x9b, 0xcd, 0xa2, 0x69, 0x1a, 0x9e, 0xe7, 0xd1, 0xeb, 0xf5, 0x92, 0xc0, 0x08, 0xc3, 0x10, 0xc3, 0x30, 0x98, 0x9d, 0x9d, 0x46, 0x55, 0x55, 0x0e, 0x39, 0xe4, 0x10, 0xca, 0xe5, 0x22, 0xb9, 0x5c, 0x0e, 0xc7, 0x71, 0x68, 0xb5, 0x5a, 0x94, 0xcb, 0x03, 0x0c, 0x0c, 0x14, 0xc8, 0x66, 0x33, 0xa8, 0x9a, 0xdc, 0x2f, 0xc2, 0x26, 0xf5, 0xfa, 0x02, 0x0b, 0x0b, 0x0b, 0x74, 0xbb, 0x5d, 0x7a, 0xbd, 0x5e, 0x12, 0x70, 0x71, 0x10, 0xfb, 0xbe, 0x8f, 0xef, 0xfb, 0xc9, 0xf5, 0xaa, 0xaa, 0x4a, 0xa1, 0x50, 0x20, 0x9f, 0xcf, 0xa3, 0x69, 0x1a, 0x92, 0x24, 0xa1, 0xaa, 0x6a, 0x72, 0x8f, 0x14, 0x45, 0x49, 0xae, 0x3d, 0xfe, 0x4c, 0x5c, 0xf4, 0x81, 0xa4, 0x18, 0xc6, 0xaf, 0x15, 0x45, 0xc1, 0x30, 0x0c, 0x14, 0x45, 0xe1, 0xed, 0xb7, 0xb7, 0x90, 0x4e, 0xa7, 0xd1, 0x34, 0x05, 0x49, 0x12, 0x31, 0xcd, 0x36, 0x47, 0x1f, 0x73, 0x14, 0x9f, 0xfb, 0xdc, 0x51, 0x1c, 0x7a, 0xe8, 0x81, 0x84, 0xa1, 0xcb, 0xe0, 0x50, 0x19, 0x41, 0x10, 0xb8, 0xf2, 0xca, 0x2b, 0xf9, 0xe1, 0x1d, 0x3f, 0xe2, 0x8a, 0xcb, 0xaf, 0xe1, 0xca, 0x2b, 0xaf, 0x61, 0x76, 0xba, 0x89, 0xef, 0xa9, 0x5c, 0x71, 0xf9, 0x0d, 0x9c, 0xfb, 0xf5, 0x8b, 0x39, 0xfe, 0x0b, 0xa7, 0x71, 0xf6, 0x57, 0xbf, 0xc9, 0x50, 0x79, 0x39, 0xc3, 0x83, 0x2b, 0xe8, 0x76, 0x24, 0x9e, 0xfc, 0xf5, 0xf3, 0xb4, 0x9b, 0x01, 0xed, 0x96, 0x43, 0x79, 0x60, 0x8c, 0x2d, 0x9b, 0x66, 0x19, 0x28, 0xe6, 0x59, 0x32, 0xb1, 0x92, 0x6c, 0x26, 0x87, 0xeb, 0xf8, 0x04, 0x3e, 0xa8, 0x8a, 0x8e, 0xeb, 0x04, 0xa8, 0x8a, 0x84, 0xae, 0xa5, 0xf0, 0x3d, 0x50, 0x14, 0x92, 0x6b, 0xb3, 0xac, 0x80, 0x56, 0xcb, 0xa3, 0xdb, 0x85, 0x6e, 0xb7, 0x8b, 0x6d, 0xdb, 0x28, 0x8a, 0x86, 0x61, 0xa4, 0xc9, 0xe7, 0x8b, 0xd4, 0x6a, 0x0d, 0xde, 0x78, 0xe3, 0x2d, 0x36, 0x6e, 0xdc, 0x8c, 0x6d, 0xbb, 0x68, 0x9a, 0x81, 0xaa, 0xaa, 0x28, 0x8a, 0x82, 0x28, 0x82, 0xef, 0x93, 0x24, 0x4b, 0xdb, 0xb6, 0x71, 0x1c, 0x87, 0x72, 0xb9, 0x88, 0x28, 0x8a, 0x48, 0x92, 0x84, 0x65, 0x59, 0x34, 0x1a, 0x0d, 0x44, 0x11, 0xe6, 0xe6, 0xea, 0x0c, 0x0f, 0x0f, 0xe3, 0xba, 0x2e, 0xd3, 0xd3, 0xd3, 0x28, 0x4a, 0xd4, 0x8c, 0xb5, 0x5a, 0x3d, 0x5e, 0x7e, 0xf9, 0x4f, 0xe8, 0xba, 0x84, 0x6d, 0xdb, 0x74, 0xcc, 0x06, 0xb9, 0x9c, 0x86, 0xa6, 0xcb, 0x64, 0x73, 0x06, 0xae, 0xd7, 0xa3, 0x63, 0x36, 0x39, 0xee, 0x0b, 0x47, 0x73, 0xc0, 0x81, 0x9f, 0xe4, 0x86, 0x1b, 0xaf, 0xe4, 0x53, 0x9f, 0xfe, 0x04, 0xaf, 0xfc, 0xf3, 0xcf, 0xa4, 0x33, 0x32, 0xcf, 0x3e, 0xf7, 0x1b, 0x4a, 0xe5, 0x0c, 0x33, 0x73, 0x1b, 0xf1, 0x83, 0x2e, 0xc7, 0x1c, 0xfd, 0x79, 0x0e, 0xfc, 0xd4, 0x01, 0xe8, 0xba, 0xc1, 0xea, 0xd5, 0xab, 0x91, 0x24, 0xa9, 0x9f, 0x64, 0x45, 0x7a, 0x3d, 0x93, 0xab, 0xae, 0xbe, 0x9c, 0x5b, 0x6f, 0xbb, 0x89, 0x07, 0x1e, 0xfc, 0x29, 0x41, 0xe0, 0x21, 0x49, 0x02, 0x9d, 0x4e, 0x87, 0xe7, 0x9e, 0x7b, 0x8e, 0x17, 0x5f, 0x7c, 0x11, 0xcf, 0x0d, 0x30, 0x4d, 0x93, 0x20, 0x08, 0x68, 0x34, 0x1a, 0xc8, 0xb2, 0x08, 0x82, 0xcf, 0x4f, 0x7e, 0xf2, 0x23, 0x36, 0x6e, 0x5a, 0x87, 0xe3, 0x76, 0x29, 0x0f, 0x16, 0x38, 0xe5, 0x94, 0x93, 0x99, 0x9f, 0x9f, 0x67, 0xc7, 0x1d, 0xdf, 0x45, 0xb5, 0xba, 0x40, 0x18, 0x4a, 0x48, 0xa2, 0x86, 0xae, 0xa8, 0xdc, 0x74, 0xfd, 0x0d, 0x54, 0x06, 0x87, 0x78, 0xfe, 0xd9, 0x67, 0x39, 0xe1, 0xf8, 0x2f, 0xf2, 0xa1, 0x0f, 0xec, 0xce, 0x5f, 0xfe, 0xfc, 0x12, 0xb9, 0x4c, 0x9a, 0xb4, 0xa1, 0x21, 0x84, 0x3e, 0xcd, 0xfa, 0x02, 0xc5, 0x7c, 0x96, 0xca, 0xe0, 0x10, 0xaa, 0x24, 0xe3, 0xd9, 0x0e, 0x69, 0xdd, 0x40, 0xd3, 0x34, 0xea, 0xf5, 0x3a, 0x92, 0x24, 0xb1, 0x65, 0xcb, 0x16, 0x86, 0x87, 0x07, 0x51, 0x14, 0x89, 0x20, 0x74, 0xe9, 0x59, 0x1d, 0x2c, 0xbb, 0x4b, 0x3e, 0x9f, 0x45, 0x56, 0x44, 0xaa, 0xd5, 0x79, 0xea, 0xf5, 0x3a, 0x8e, 0xe3, 0xe0, 0xfb, 0x21, 0x92, 0xa8, 0x20, 0x08, 0x12, 0xd0, 0x5f, 0xb3, 0x88, 0xef, 0x14, 0x56, 0x51, 0x41, 0x51, 0x14, 0xc2, 0xd0, 0x67, 0x66, 0x66, 0x8a, 0x5a, 0xbd, 0x8a, 0x69, 0xb6, 0x59, 0xb2, 0x64, 0x82, 0x42, 0xa1, 0xc0, 0x37, 0x2f, 0x3c, 0x9f, 0x85, 0x85, 0x05, 0x34, 0x4d, 0x42, 0xd7, 0x55, 0xfe, 0xfe, 0x8f, 0xbf, 0x91, 0xc9, 0xa4, 0x38, 0xff, 0xfc, 0xf3, 0x91, 0x65, 0x19, 0xd3, 0x34, 0x99, 0x9d, 0x5a, 0x20, 0x97, 0x4f, 0x31, 0x38, 0x38, 0x08, 0x21, 0x74, 0x3a, 0x0e, 0xba, 0xae, 0x92, 0xc9, 0x28, 0xbc, 0xf8, 0xdc, 0xdf, 0x68, 0x35, 0xdb, 0xac, 0x5a, 0xb5, 0x8a, 0x5c, 0x2e, 0x87, 0xaa, 0xaa, 0xf4, 0x7a, 0x3d, 0x2c, 0xcb, 0x4a, 0x00, 0x47, 0xa5, 0x52, 0xc1, 0xb6, 0x7b, 0x38, 0x8e, 0xc3, 0x8b, 0x2f, 0xbd, 0x44, 0xbb, 0xdd, 0x44, 0x10, 0x43, 0x74, 0x5d, 0xa3, 0xd7, 0x33, 0x79, 0xea, 0xe9, 0x27, 0xb1, 0x6d, 0x87, 0x07, 0x1e, 0x78, 0x80, 0xb9, 0xb9, 0x39, 0x86, 0x86, 0x86, 0x98, 0x9d, 0x9d, 0x45, 0x55, 0x55, 0xd2, 0xe9, 0x34, 0xaa, 0xaa, 0x26, 0x79, 0x25, 0xce, 0x2d, 0x92, 0x24, 0xa1, 0x69, 0x5a, 0x02, 0x30, 0xe2, 0xb5, 0xbd, 0xb8, 0xc8, 0x2f, 0x8e, 0xd7, 0x5e, 0xcf, 0xe3, 0xd6, 0x5b, 0x6f, 0xc5, 0xb6, 0x6d, 0x4c, 0x33, 0xca, 0x15, 0xae, 0xeb, 0xa2, 0x28, 0x0a, 0xbd, 0x5e, 0x2f, 0xf9, 0x4c, 0x9c, 0x37, 0xe3, 0xf8, 0x8f, 0xef, 0xa3, 0xe3, 0x38, 0xc9, 0x67, 0xe2, 0xef, 0x0f, 0xc3, 0x90, 0x30, 0x0c, 0x93, 0xfc, 0x10, 0x1f, 0x23, 0x6a, 0x30, 0x5c, 0x84, 0x3b, 0xee, 0xfe, 0x79, 0x38, 0x5a, 0xa9, 0xf0, 0xdc, 0x1f, 0x7e, 0xc7, 0xd8, 0xe8, 0x10, 0x81, 0xef, 0x71, 0xd5, 0x55, 0x57, 0x50, 0x2a, 0xe6, 0xf1, 0x03, 0x8b, 0x20, 0x08, 0x28, 0x95, 0x4a, 0xac, 0x7d, 0xf3, 0x4d, 0x8a, 0xc5, 0x22, 0xa5, 0xc1, 0x32, 0xc3, 0xc3, 0xc3, 0xb4, 0xdb, 0x6d, 0x5a, 0xbd, 0xcd, 0x28, 0xb2, 0x41, 0xaf, 0x1b, 0x30, 0x34, 0x38, 0x46, 0xbd, 0xd6, 0xc1, 0x73, 0xa3, 0x6e, 0xf7, 0x92, 0x4b, 0x2e, 0xe1, 0xdb, 0x97, 0x5c, 0xc6, 0x37, 0x2e, 0x38, 0x9f, 0x27, 0x9e, 0x78, 0x82, 0x7f, 0xfe, 0xf3, 0x5f, 0x5c, 0x75, 0xf5, 0x75, 0x98, 0x6d, 0x8f, 0x7c, 0x71, 0x98, 0x76, 0xab, 0x8b, 0x10, 0x48, 0x78, 0x7e, 0x0f, 0xcd, 0x08, 0x18, 0x19, 0xcb, 0xf1, 0x89, 0x7d, 0x3f, 0xcc, 0xe0, 0x70, 0x86, 0x81, 0x52, 0x9e, 0x72, 0x79, 0x00, 0xcf, 0xef, 0xb1, 0xb0, 0x50, 0xe7, 0xf3, 0x9f, 0x3f, 0x8e, 0x35, 0x6b, 0xd6, 0xf4, 0x03, 0x74, 0x92, 0x0f, 0xef, 0xf9, 0x21, 0xde, 0x78, 0xe3, 0x75, 0x8e, 0xfb, 0xdc, 0xf9, 0xac, 0x5e, 0xbd, 0x1a, 0x31, 0x0c, 0xb8, 0xf0, 0xa2, 0x0b, 0x68, 0xd6, 0xeb, 0x0c, 0x0d, 0x97, 0xd9, 0x65, 0x97, 0xd5, 0x04, 0xae, 0xc7, 0xbf, 0x5e, 0x7d, 0x85, 0x4a, 0xa5, 0xc2, 0xc2, 0x42, 0x1d, 0xc7, 0x8a, 0x10, 0xd7, 0xd2, 0xf1, 0x09, 0xe6, 0xe7, 0x17, 0xd8, 0xb6, 0xad, 0x8a, 0x6c, 0x40, 0xa5, 0x52, 0x46, 0x10, 0xc0, 0xb2, 0x2c, 0x3e, 0xb9, 0xff, 0xbe, 0x54, 0xab, 0x55, 0x7e, 0xf7, 0xbb, 0xff, 0xa6, 0x5c, 0xd6, 0xf1, 0x7d, 0x97, 0x03, 0x0e, 0x38, 0x80, 0xd7, 0x5e, 0x5b, 0xcb, 0xec, 0xec, 0x2c, 0x9e, 0xe7, 0x51, 0xaf, 0xdb, 0x8c, 0x8e, 0x16, 0xd8, 0x63, 0x8f, 0x3d, 0xf8, 0xeb, 0x5f, 0xb7, 0x72, 0xcb, 0x2d, 0xb7, 0x70, 0xd8, 0xe1, 0x9f, 0xa5, 0x58, 0x18, 0xe0, 0xb6, 0xdb, 0xbe, 0x8f, 0xa1, 0x67, 0x39, 0xe1, 0x84, 0x93, 0x19, 0xa9, 0x4c, 0x70, 0xc1, 0x05, 0x17, 0x90, 0xcd, 0xa6, 0xe9, 0x59, 0x6d, 0x64, 0x45, 0x40, 0x51, 0xe1, 0x07, 0x77, 0xdc, 0xc2, 0xd3, 0xbf, 0xf9, 0x0d, 0x9a, 0x21, 0x91, 0x52, 0xf3, 0xec, 0xba, 0xeb, 0xae, 0xbc, 0xf1, 0xc6, 0xeb, 0xd4, 0x6a, 0x55, 0x3c, 0x2f, 0x24, 0x97, 0xd7, 0x69, 0x35, 0x2d, 0x8a, 0x03, 0x06, 0xf5, 0x5a, 0x8f, 0xbd, 0xf7, 0xf9, 0x0f, 0xfe, 0xf8, 0xc2, 0x9f, 0xf9, 0xc8, 0x5e, 0x1f, 0x4c, 0x12, 0xd3, 0x53, 0x4f, 0xfe, 0xbe, 0x5f, 0xc5, 0x54, 0x32, 0x99, 0x14, 0x3f, 0xff, 0xc5, 0xfd, 0x5c, 0x79, 0xe5, 0x15, 0xfc, 0xfb, 0xdf, 0xaf, 0x21, 0xa0, 0xe1, 0xda, 0x22, 0xf7, 0xde, 0xfb, 0x53, 0x04, 0xaf, 0x42, 0xbb, 0x6d, 0x92, 0xcf, 0x67, 0x69, 0x77, 0x6a, 0x28, 0x9a, 0xc7, 0xd6, 0x6d, 0x6f, 0xf0, 0xf0, 0x23, 0x3f, 0xa6, 0x6b, 0x2d, 0x60, 0xb6, 0xe6, 0x50, 0x14, 0x15, 0x5d, 0xd7, 0xe9, 0xf5, 0x6c, 0xea, 0xb5, 0x26, 0x8a, 0xa2, 0x21, 0x8a, 0x12, 0x41, 0x10, 0xa0, 0xa9, 0x51, 0x47, 0xa9, 0xeb, 0x3a, 0xdd, 0x6e, 0x37, 0xe9, 0x26, 0xe3, 0xe2, 0x43, 0xf0, 0xce, 0x42, 0x8e, 0x17, 0x5a, 0xbc, 0xc8, 0xe2, 0xa2, 0x19, 0x23, 0xfc, 0x18, 0xa9, 0xc6, 0x28, 0xd4, 0xb6, 0xed, 0xa4, 0x18, 0xc7, 0x85, 0x2d, 0x6e, 0x0a, 0xe2, 0x0e, 0x75, 0x71, 0x21, 0x5b, 0x5c, 0xf4, 0xe3, 0xc4, 0xee, 0x12, 0xe0, 0x3b, 0x1e, 0xaa, 0xaa, 0x90, 0xcb, 0x64, 0x11, 0x05, 0x81, 0x5e, 0xc7, 0xc4, 0x77, 0x23, 0x26, 0x60, 0xc5, 0xb2, 0x71, 0x0c, 0x23, 0x4d, 0xbd, 0xd5, 0xa4, 0xd1, 0x68, 0x50, 0xab, 0x37, 0x71, 0x5d, 0x9f, 0x62, 0xb1, 0x48, 0x28, 0x08, 0xd4, 0xea, 0x2d, 0xca, 0xe5, 0x32, 0x96, 0xdd, 0x25, 0x0c, 0x03, 0xda, 0xed, 0x0e, 0x85, 0x62, 0x1a, 0x51, 0x14, 0x91, 0x65, 0x31, 0x09, 0xdc, 0x08, 0xa5, 0x47, 0x81, 0x4a, 0x28, 0x26, 0x5d, 0x76, 0xc7, 0xec, 0x10, 0x86, 0xf4, 0x91, 0xb8, 0xd4, 0x67, 0x16, 0x7c, 0xc2, 0x90, 0x08, 0x01, 0x07, 0xd1, 0xbf, 0xba, 0xae, 0x92, 0xcb, 0xe5, 0x92, 0xc2, 0x63, 0x59, 0x56, 0xd2, 0x9d, 0xff, 0xef, 0x86, 0x28, 0x3e, 0x76, 0x10, 0x04, 0x88, 0x82, 0x9a, 0x04, 0x71, 0x7c, 0x5f, 0x25, 0x49, 0x4a, 0xee, 0x59, 0xd7, 0x6a, 0x27, 0x49, 0x35, 0x65, 0x64, 0xe9, 0x74, 0xba, 0xec, 0xb0, 0xf2, 0x5d, 0x6c, 0xd9, 0xb2, 0x95, 0x81, 0x62, 0x99, 0xd9, 0x6a, 0x9b, 0xa7, 0x9f, 0x7e, 0x9a, 0xff, 0xf9, 0x9f, 0xff, 0x21, 0x9b, 0xcd, 0x92, 0x4a, 0xa5, 0x50, 0x14, 0x85, 0xcd, 0x5b, 0x36, 0x52, 0xa9, 0x54, 0xd0, 0x84, 0x51, 0x66, 0xe7, 0xa6, 0xc9, 0x17, 0x52, 0x74, 0x3a, 0x0d, 0x32, 0x59, 0x03, 0xcf, 0xf3, 0x68, 0xb5, 0x5a, 0xe4, 0xf3, 0x79, 0x3c, 0x2b, 0x7a, 0x4e, 0x61, 0xe8, 0x73, 0xe6, 0x59, 0xa7, 0x71, 0xdf, 0xfd, 0xf7, 0xf0, 0xa5, 0x13, 0x8e, 0xa5, 0x67, 0xb5, 0x30, 0xcd, 0x16, 0x13, 0x13, 0x43, 0x74, 0x3a, 0x1d, 0x8a, 0xc5, 0x22, 0xb6, 0x6d, 0xb3, 0x6d, 0x5b, 0x15, 0x5d, 0x17, 0xf0, 0xfd, 0x10, 0xdf, 0x07, 0x04, 0xc8, 0xe5, 0x14, 0x3c, 0xcf, 0xc3, 0x71, 0x42, 0x54, 0x55, 0x40, 0xd3, 0x34, 0x54, 0x55, 0x8d, 0xee, 0xb1, 0x94, 0xc2, 0xb2, 0x2c, 0x44, 0x51, 0x8c, 0x9e, 0xa7, 0xeb, 0xd2, 0xed, 0x5a, 0x64, 0xb3, 0xe9, 0xa4, 0xe9, 0x8b, 0x50, 0xbd, 0x9b, 0x5c, 0xbb, 0xeb, 0xfa, 0xf8, 0x3e, 0xe8, 0x7a, 0x94, 0x5c, 0x9b, 0xcd, 0x2e, 0xa9, 0x94, 0x42, 0x18, 0x86, 0xf4, 0x7a, 0x1e, 0xcb, 0x97, 0x8f, 0xd3, 0xed, 0x76, 0xe9, 0x76, 0xbb, 0x3c, 0xfc, 0xf0, 0xc3, 0x1c, 0x73, 0xcc, 0x31, 0x09, 0x0b, 0xd7, 0xed, 0x76, 0x19, 0x18, 0x18, 0x40, 0x14, 0x45, 0xe6, 0xe6, 0xe6, 0x10, 0x25, 0x70, 0x1c, 0xc8, 0x66, 0x15, 0x5a, 0x4d, 0x97, 0xa5, 0x4b, 0xc7, 0xe8, 0x75, 0x6d, 0x2c, 0xcb, 0x41, 0xd3, 0x34, 0x6a, 0x4d, 0x8b, 0x7b, 0xee, 0xb9, 0x87, 0x95, 0x2b, 0x57, 0x31, 0xb5, 0x6d, 0x06, 0x4d, 0x8b, 0xd8, 0x19, 0x81, 0x28, 0x99, 0x9e, 0x7a, 0xe6, 0xe7, 0x30, 0xf4, 0x34, 0xd7, 0x5f, 0x77, 0x0b, 0xd7, 0x5c, 0x73, 0x1d, 0x2b, 0x57, 0xee, 0xc0, 0x91, 0x47, 0x1e, 0xd9, 0x5f, 0xff, 0x21, 0x82, 0x60, 0x73, 0xde, 0x79, 0xe7, 0xd2, 0x6c, 0xd6, 0xb9, 0xf0, 0xa2, 0x0b, 0xd8, 0xb8, 0x71, 0x23, 0xfb, 0xed, 0xbb, 0x3f, 0x86, 0x91, 0xe5, 0x94, 0x93, 0xbf, 0x8c, 0x20, 0x56, 0xe9, 0xf5, 0x6c, 0x52, 0xa9, 0x14, 0x82, 0x20, 0x12, 0x06, 0x02, 0x9a, 0x66, 0x70, 0xe4, 0x91, 0x47, 0xb2, 0xe7, 0x9e, 0x7b, 0x72, 0xfc, 0x17, 0x4f, 0x44, 0x52, 0x65, 0xd6, 0xfc, 0xea, 0x51, 0x9e, 0x7c, 0xf2, 0xd7, 0xfc, 0xea, 0x89, 0xc7, 0xb0, 0xac, 0x2e, 0x82, 0x2c, 0xb0, 0x6c, 0xd9, 0x12, 0x5c, 0x33, 0xcd, 0xf8, 0xf8, 0x12, 0xc6, 0x46, 0x27, 0xd8, 0x7f, 0xff, 0x4f, 0xb1, 0xff, 0x27, 0xff, 0x13, 0x55, 0xd5, 0x01, 0x81, 0x47, 0x1f, 0x59, 0xc3, 0xcc, 0xf4, 0x02, 0x85, 0x42, 0x21, 0xb9, 0x87, 0x96, 0xe5, 0x90, 0xcd, 0x66, 0xb1, 0x2c, 0x0b, 0x5d, 0xd7, 0x11, 0x42, 0x92, 0x75, 0xdd, 0x69, 0xb6, 0xc8, 0xe6, 0xd2, 0x98, 0x9d, 0x26, 0xb9, 0x5c, 0x8a, 0x73, 0xbe, 0x7e, 0x36, 0xaa, 0x6e, 0xd1, 0xb3, 0x4c, 0x2c, 0xab, 0x87, 0x2a, 0x47, 0x4d, 0xa4, 0x10, 0x88, 0x78, 0x5e, 0x80, 0x80, 0x82, 0xed, 0x9b, 0x88, 0x21, 0xfd, 0x26, 0x34, 0x44, 0x12, 0x45, 0x04, 0x01, 0x24, 0xa2, 0xa2, 0x14, 0x8a, 0x22, 0x5b, 0xb6, 0x6c, 0x41, 0xd5, 0x0c, 0xbc, 0x00, 0xb2, 0xf9, 0x02, 0xa2, 0xa4, 0x70, 0xed, 0xb5, 0xd7, 0x71, 0xfc, 0x09, 0x27, 0xd0, 0x31, 0xdb, 0x40, 0xc0, 0x1e, 0x7b, 0x7c, 0x80, 0x99, 0xd9, 0x29, 0x0c, 0x43, 0x43, 0x96, 0x25, 0x36, 0x6e, 0x5a, 0x9f, 0xb0, 0x7e, 0x92, 0x24, 0xd1, 0x6c, 0x36, 0x59, 0xb1, 0x62, 0x19, 0x96, 0x65, 0xb1, 0x69, 0xfd, 0x14, 0x2f, 0xbd, 0xfc, 0x3c, 0xb3, 0xb3, 0xb3, 0x7c, 0xeb, 0xa2, 0xef, 0x32, 0x3f, 0x3f, 0xbf, 0x5d, 0x11, 0x15, 0x04, 0x81, 0x76, 0xbb, 0x4d, 0xb7, 0xdb, 0x45, 0xd7, 0x52, 0x5c, 0x7c, 0xf1, 0xc5, 0x2c, 0x59, 0xb2, 0x8c, 0x4a, 0x65, 0x94, 0xcf, 0x1e, 0x7a, 0x18, 0xbd, 0x9e, 0x8d, 0xdd, 0xb5, 0x58, 0xf3, 0xeb, 0x5f, 0x93, 0xcb, 0xf8, 0x1c, 0x76, 0xd8, 0x61, 0x0c, 0x0e, 0x0e, 0xd2, 0x6c, 0x36, 0x51, 0x55, 0x15, 0xcb, 0xb2, 0x48, 0xa5, 0x52, 0xb4, 0xdb, 0x6d, 0x54, 0x55, 0x46, 0x55, 0x55, 0x82, 0x20, 0xc0, 0xb2, 0x2c, 0x04, 0x21, 0x5a, 0xbf, 0xbe, 0xef, 0xd3, 0xed, 0x76, 0x91, 0x65, 0x35, 0x89, 0xcb, 0x38, 0x7f, 0x2d, 0x8e, 0xdf, 0x20, 0x08, 0xf8, 0xdd, 0xef, 0x7e, 0xc7, 0x67, 0x3e, 0xf3, 0x19, 0xba, 0xdd, 0x6e, 0xd2, 0xdc, 0xa7, 0xd3, 0x69, 0x7c, 0xdf, 0x47, 0xd3, 0xb4, 0xa4, 0x78, 0xc7, 0xcc, 0x5c, 0xd4, 0x30, 0xf9, 0x49, 0x2e, 0x70, 0x1c, 0x87, 0x30, 0x0c, 0xd1, 0x34, 0x6d, 0xbb, 0x58, 0x90, 0x65, 0xb9, 0xdf, 0x24, 0x6e, 0x9f, 0x33, 0x85, 0x9f, 0x3f, 0xfc, 0x4c, 0x18, 0xf8, 0x2e, 0x86, 0x26, 0xe3, 0x7b, 0x0e, 0xdd, 0x4e, 0x9b, 0x91, 0xd1, 0x0a, 0xc7, 0x1e, 0x75, 0x24, 0xb9, 0xbc, 0xce, 0xf1, 0xc7, 0x1f, 0xcf, 0x87, 0x3f, 0xfc, 0x61, 0x8e, 0x3c, 0xe6, 0x68, 0x1e, 0x7d, 0xf4, 0x51, 0x1a, 0xad, 0x26, 0x7f, 0xfe, 0xf3, 0x9f, 0x79, 0xfc, 0xf1, 0xc7, 0xd1, 0xb3, 0x5d, 0x6c, 0xcb, 0x27, 0x9f, 0x1f, 0xe0, 0xad, 0x37, 0x37, 0x70, 0xfa, 0x7f, 0x7d, 0x85, 0x8f, 0x7d, 0xec, 0x13, 0xfc, 0xe6, 0x37, 0xbf, 0xe1, 0x57, 0xbf, 0xfa, 0x15, 0xd9, 0x4c, 0x0e, 0x45, 0xd7, 0x08, 0x02, 0xd8, 0xbc, 0x69, 0x1b, 0x99, 0x4c, 0x99, 0x5b, 0xbf, 0x77, 0x27, 0x33, 0xb3, 0x4d, 0xd2, 0xe9, 0x3c, 0x76, 0xc7, 0x66, 0xe9, 0xb2, 0x51, 0xe6, 0xe6, 0x37, 0xe3, 0x87, 0x2d, 0x8a, 0x25, 0x9d, 0x2f, 0x9d, 0x70, 0x2c, 0x07, 0x1e, 0xf4, 0x69, 0x36, 0x6e, 0x5a, 0x4f, 0xbd, 0x31, 0x87, 0x80, 0xc4, 0xc1, 0x07, 0x1f, 0xc2, 0x63, 0x8f, 0xfd, 0x0a, 0x59, 0x16, 0xf9, 0xc8, 0x47, 0xf6, 0xe4, 0x1f, 0xaf, 0xfc, 0x85, 0x4e, 0xa7, 0x45, 0x10, 0x96, 0xf8, 0xda, 0xd7, 0xbe, 0xc6, 0x7d, 0x3f, 0xb9, 0x97, 0x7a, 0x7d, 0x81, 0xfa, 0x42, 0x8d, 0xe2, 0x40, 0x81, 0x42, 0x21, 0xc7, 0x5b, 0x6b, 0xdf, 0xe0, 0x63, 0xfb, 0x7c, 0x94, 0x37, 0xde, 0x78, 0x2b, 0xea, 0x68, 0x04, 0x99, 0xf1, 0xf1, 0x71, 0xb6, 0x6e, 0xda, 0x42, 0xbb, 0xdd, 0xa6, 0xd3, 0xee, 0x52, 0x1e, 0x19, 0x66, 0xeb, 0xd6, 0xcd, 0x54, 0x2a, 0x15, 0x04, 0x41, 0x60, 0xe3, 0xc6, 0x6d, 0x8c, 0x8d, 0x95, 0x09, 0x42, 0x2f, 0xa2, 0xdc, 0x65, 0x99, 0x6c, 0x36, 0xcb, 0x0e, 0x3b, 0xec, 0xc0, 0xc2, 0xc2, 0x02, 0x1f, 0xfb, 0xd8, 0xc7, 0x48, 0xa7, 0x0d, 0x1e, 0x7d, 0xf4, 0x51, 0x0a, 0x85, 0x02, 0x33, 0xd3, 0x1a, 0x97, 0x5d, 0x76, 0x29, 0xb2, 0x22, 0xf2, 0xe2, 0x8b, 0x2f, 0x32, 0x31, 0xbe, 0x94, 0x0b, 0x2f, 0xbc, 0x88, 0x9f, 0x3d, 0xf8, 0x30, 0x8a, 0xa2, 0xe1, 0x38, 0x16, 0x82, 0x18, 0x72, 0xf8, 0xe1, 0x87, 0x52, 0x19, 0x29, 0x73, 0xd3, 0xcd, 0xd7, 0x72, 0xec, 0xd1, 0x47, 0x50, 0xae, 0x14, 0x58, 0x58, 0x68, 0x90, 0x52, 0x53, 0x2c, 0x5b, 0xb6, 0x8c, 0xd1, 0xd1, 0x0a, 0xcd, 0x56, 0x83, 0xcd, 0x9b, 0x37, 0xf6, 0x51, 0xa6, 0x4d, 0xab, 0x6d, 0x22, 0x89, 0xb0, 0x72, 0xe5, 0x4a, 0x36, 0x6f, 0xde, 0x1c, 0x2d, 0xec, 0x86, 0x1d, 0xa1, 0x68, 0x43, 0x8e, 0x68, 0xb3, 0xc9, 0x16, 0x4b, 0x97, 0x8e, 0x91, 0xcb, 0x67, 0xe8, 0x76, 0x3b, 0x7c, 0xff, 0xf6, 0x3b, 0x39, 0xf8, 0x33, 0x87, 0x33, 0x52, 0x59, 0xc6, 0x65, 0x97, 0x5e, 0x8d, 0xa1, 0x44, 0xd4, 0x71, 0x3a, 0xa3, 0x63, 0x76, 0xeb, 0x18, 0xe9, 0x90, 0xe7, 0x5e, 0x78, 0x9c, 0x0f, 0x7d, 0xf8, 0x3d, 0x5c, 0x73, 0xed, 0x77, 0x59, 0xa8, 0x6e, 0xed, 0x27, 0xc5, 0x16, 0x20, 0xa2, 0x2a, 0x3a, 0xcd, 0x66, 0x1b, 0xd3, 0xf4, 0xc8, 0xe5, 0x74, 0xba, 0x66, 0x14, 0xf8, 0xa9, 0x54, 0x8a, 0x4e, 0xa7, 0x43, 0x18, 0x86, 0x0c, 0x0f, 0x0f, 0xb3, 0x79, 0xf3, 0x24, 0xa5, 0x52, 0x01, 0x91, 0x77, 0x8a, 0x50, 0xfc, 0x1b, 0x17, 0x1b, 0x88, 0x9a, 0x24, 0xdf, 0xf7, 0x13, 0x9a, 0x3d, 0x5e, 0xa8, 0x92, 0x24, 0x25, 0xb4, 0x71, 0xdc, 0x9d, 0xc6, 0x0b, 0x33, 0xfe, 0x8d, 0xa9, 0xe5, 0xf8, 0xb8, 0x82, 0x20, 0x24, 0x85, 0x2f, 0x2a, 0x10, 0x0e, 0xa6, 0x63, 0x81, 0x1f, 0x15, 0xcc, 0x6c, 0x3a, 0x83, 0x00, 0x58, 0x66, 0x97, 0xc0, 0x8b, 0x82, 0x65, 0xa7, 0x55, 0xcb, 0x09, 0x43, 0x81, 0x46, 0xbb, 0x85, 0xe3, 0x38, 0xd4, 0x1b, 0x2d, 0x9a, 0xcd, 0x0e, 0xf9, 0x7c, 0x0e, 0x3d, 0x95, 0x42, 0x51, 0x0d, 0x6c, 0xa7, 0xc7, 0xdc, 0xdc, 0x1c, 0x6b, 0xd6, 0x3c, 0x86, 0xae, 0xab, 0x7c, 0xfa, 0x80, 0x03, 0x50, 0x14, 0x18, 0x18, 0x18, 0xc0, 0xb6, 0xad, 0x7e, 0xb3, 0x12, 0x27, 0x8c, 0x7e, 0x37, 0xee, 0xf7, 0x65, 0x82, 0xc0, 0xdd, 0xae, 0xc3, 0x8e, 0x98, 0x05, 0x07, 0xcf, 0x83, 0x30, 0x8c, 0x10, 0xaa, 0xe3, 0x80, 0x24, 0x41, 0x26, 0xa3, 0x23, 0xcb, 0x72, 0x1f, 0x49, 0xf8, 0x04, 0x01, 0x64, 0x32, 0xca, 0xff, 0x55, 0xd0, 0x63, 0x84, 0x1f, 0x86, 0x21, 0x8a, 0x6c, 0x24, 0x05, 0xdc, 0x75, 0xdd, 0xe4, 0xfe, 0xc5, 0xf7, 0xb8, 0x6d, 0x46, 0x6c, 0x91, 0xe3, 0x78, 0x78, 0xae, 0x8f, 0xef, 0x87, 0x04, 0x01, 0x84, 0x41, 0x74, 0x0f, 0x8d, 0x4c, 0x09, 0xd7, 0x75, 0xb9, 0xfd, 0xf6, 0x1f, 0xe0, 0x79, 0x3e, 0x9a, 0x6a, 0x70, 0xd9, 0x65, 0x57, 0x92, 0xcb, 0xe5, 0xb8, 0xf0, 0x9b, 0x17, 0x61, 0x99, 0x22, 0x7f, 0xfd, 0xeb, 0xcb, 0xec, 0xbc, 0xcb, 0x4e, 0x9c, 0x74, 0xd2, 0xf1, 0x20, 0xf8, 0xdc, 0x79, 0xe7, 0x9d, 0xe4, 0x72, 0x79, 0x04, 0x41, 0x40, 0x11, 0x0c, 0x52, 0xa9, 0x14, 0xae, 0x6b, 0x63, 0xd9, 0x5d, 0x3e, 0xf7, 0xf9, 0x23, 0xb1, 0xec, 0x36, 0xe9, 0x8c, 0xcc, 0x0b, 0x7f, 0xfc, 0x03, 0x1f, 0xda, 0xe3, 0xfd, 0x54, 0x2a, 0xc3, 0x4c, 0x4f, 0xcf, 0x92, 0x4e, 0x1b, 0x49, 0xf2, 0xab, 0xd5, 0xda, 0x28, 0x0a, 0xe8, 0x86, 0x9c, 0xd0, 0x8c, 0xa6, 0x69, 0xf6, 0x1b, 0xa5, 0x68, 0x1d, 0x28, 0x8a, 0x42, 0x6d, 0xa1, 0x87, 0x61, 0x44, 0x85, 0xa2, 0xd3, 0xe9, 0xa0, 0xaa, 0x6a, 0x82, 0x46, 0x34, 0x4d, 0xc3, 0xb2, 0x7a, 0xfd, 0xc4, 0x15, 0x24, 0xcd, 0x4f, 0x44, 0x2d, 0x86, 0xe8, 0xba, 0x42, 0xb7, 0xeb, 0x92, 0xcd, 0xea, 0xb4, 0xdb, 0x16, 0x86, 0x21, 0x27, 0xac, 0x4b, 0xab, 0xd5, 0xa1, 0x50, 0xc8, 0xd1, 0xe9, 0x74, 0x28, 0x97, 0xcb, 0xcc, 0xcc, 0xcc, 0xa1, 0xaa, 0x32, 0xe5, 0x72, 0x99, 0xad, 0x5b, 0x67, 0xc8, 0xe5, 0x8c, 0x48, 0xfe, 0x30, 0x44, 0x66, 0x66, 0xda, 0x64, 0x32, 0x11, 0xab, 0xe0, 0xba, 0x7e, 0x5f, 0x3e, 0x70, 0x18, 0x1b, 0x1b, 0x45, 0x54, 0xd2, 0x34, 0x1a, 0x0d, 0x1e, 0x7c, 0xf0, 0x41, 0x6a, 0xb5, 0x06, 0xe9, 0x54, 0x06, 0xdb, 0x76, 0xf9, 0xe3, 0x1f, 0xff, 0xc8, 0x1d, 0x77, 0xdc, 0x49, 0x10, 0x7a, 0x3c, 0xf6, 0xd8, 0xe3, 0x64, 0xb3, 0x79, 0xb6, 0x6e, 0x9d, 0x64, 0x7c, 0x7c, 0x9c, 0x8b, 0x2f, 0xfe, 0x16, 0x17, 0x5c, 0x70, 0x1e, 0xff, 0x78, 0xe5, 0x6f, 0xec, 0xb4, 0xd3, 0x04, 0xeb, 0xd7, 0xaf, 0xe3, 0x27, 0x3f, 0xf9, 0x31, 0xba, 0xae, 0x73, 0xdd, 0x75, 0xd7, 0xb3, 0x69, 0xe3, 0x24, 0xbb, 0xec, 0xf2, 0x5e, 0x8e, 0x38, 0xfc, 0x48, 0x52, 0xe9, 0x08, 0x41, 0x0e, 0x0e, 0x0e, 0x32, 0x33, 0x33, 0x43, 0x36, 0x9b, 0x45, 0x10, 0xa2, 0x06, 0x36, 0x9f, 0xcf, 0x53, 0xc8, 0x0f, 0x30, 0x39, 0x3d, 0xc5, 0xf4, 0xf4, 0x34, 0x86, 0xa1, 0x31, 0x50, 0x2e, 0x31, 0x5c, 0x19, 0x42, 0x33, 0x0c, 0x8a, 0xc5, 0x22, 0xc7, 0x1f, 0x73, 0x1a, 0xaa, 0xaa, 0xf2, 0x9b, 0xdf, 0xfc, 0x96, 0x03, 0x0f, 0xfc, 0x0c, 0x5f, 0x3b, 0xfb, 0x5c, 0x8e, 0x3a, 0xea, 0x18, 0x6e, 0xbc, 0xe1, 0x66, 0x9a, 0xcd, 0x26, 0x4f, 0xff, 0xe6, 0x0f, 0x34, 0x9b, 0xed, 0x3e, 0x25, 0x9c, 0xc2, 0xf7, 0x7d, 0xac, 0x9e, 0x13, 0x35, 0xb9, 0xf5, 0x3a, 0xf9, 0x7c, 0x3e, 0x91, 0xbe, 0x54, 0x49, 0xc6, 0xb2, 0x3b, 0x78, 0x6e, 0x97, 0x73, 0xbf, 0xf1, 0x35, 0x8c, 0x94, 0x42, 0x40, 0xa3, 0x4f, 0x85, 0x05, 0x18, 0x5a, 0x0a, 0x49, 0x54, 0xe8, 0x34, 0x4d, 0x3c, 0x17, 0x0a, 0x85, 0x12, 0x2d, 0xb3, 0x8e, 0x2c, 0x8a, 0x48, 0x52, 0x9f, 0x99, 0x0b, 0xa3, 0x75, 0x4b, 0x7f, 0xfd, 0x4a, 0xaa, 0xc2, 0xfc, 0xfc, 0x3c, 0x03, 0xa5, 0x32, 0x81, 0x20, 0x22, 0x2b, 0x1a, 0x21, 0x22, 0x8a, 0xa2, 0xf1, 0xe6, 0xba, 0xb7, 0x11, 0xc5, 0x80, 0xd1, 0xb1, 0x88, 0xfe, 0x5f, 0xbe, 0x7c, 0x29, 0xdb, 0xb6, 0x4d, 0x46, 0x08, 0x58, 0x11, 0xa9, 0xd5, 0x6a, 0x14, 0x0a, 0x39, 0x16, 0x16, 0xea, 0x00, 0x8c, 0x8d, 0x8d, 0x31, 0x35, 0x35, 0xc5, 0x92, 0x25, 0x4b, 0x00, 0xb0, 0x6d, 0x9b, 0x94, 0x91, 0x45, 0xd7, 0x75, 0xaa, 0xd5, 0x6a, 0x02, 0x1e, 0x62, 0xd0, 0x00, 0xd0, 0xe9, 0x44, 0x0d, 0xdc, 0x0f, 0xef, 0xb8, 0x8b, 0x4f, 0xed, 0xb7, 0x3f, 0x5a, 0x2a, 0x05, 0x88, 0x48, 0x62, 0x54, 0xa8, 0x65, 0x31, 0xba, 0xff, 0x95, 0x4a, 0x85, 0xa9, 0xa9, 0xa9, 0xed, 0xf2, 0x4e, 0x36, 0x9b, 0xa5, 0xd7, 0x33, 0x31, 0x0c, 0x03, 0x88, 0x58, 0x25, 0xdf, 0xf7, 0xd1, 0x75, 0x3d, 0x29, 0xac, 0xae, 0xeb, 0x27, 0x12, 0x50, 0x1c, 0xa7, 0xbe, 0xef, 0x27, 0x2c, 0x61, 0xb9, 0x5c, 0x46, 0xd7, 0x75, 0xc2, 0x30, 0xa4, 0x56, 0xab, 0x25, 0x8d, 0x41, 0xdc, 0x5c, 0xab, 0xaa, 0x9a, 0xb0, 0x70, 0xb1, 0xcc, 0x18, 0x17, 0x70, 0x59, 0x96, 0x71, 0x1c, 0x67, 0xbb, 0x78, 0x88, 0x81, 0xd0, 0xe2, 0x82, 0x1e, 0x83, 0xa9, 0xa4, 0x31, 0xb8, 0xef, 0xc1, 0x27, 0xc3, 0xc1, 0xf2, 0x00, 0x47, 0x1e, 0x7e, 0x28, 0x67, 0x9d, 0x79, 0x3a, 0x1f, 0xdb, 0xfb, 0xa3, 0x7c, 0xf1, 0xf8, 0x2f, 0x90, 0x4d, 0x19, 0xb8, 0x9e, 0xc9, 0x29, 0xa7, 0x9c, 0xc2, 0xed, 0xb7, 0xdf, 0x8e, 0xa4, 0x2a, 0xdc, 0x7d, 0xf7, 0xdd, 0x9c, 0x70, 0xd2, 0x89, 0x8c, 0x8c, 0x8c, 0x50, 0xab, 0xd5, 0x40, 0x69, 0xb0, 0x72, 0xc5, 0x2a, 0xde, 0x7c, 0x73, 0x1d, 0xaa, 0x92, 0x22, 0x0c, 0xe1, 0xb6, 0xdb, 0x6e, 0xe3, 0xcc, 0x33, 0xcf, 0xa0, 0x5c, 0x1e, 0x40, 0x10, 0x24, 0x66, 0xe6, 0xe6, 0x49, 0xa7, 0xb3, 0xec, 0xb3, 0xf7, 0xfe, 0x1c, 0x74, 0xd0, 0x11, 0x74, 0x5a, 0x3e, 0x1b, 0x37, 0xcf, 0xb0, 0x72, 0xc5, 0x6a, 0x14, 0x24, 0x44, 0xc9, 0xe7, 0xf7, 0xcf, 0xfe, 0x9a, 0xbd, 0xf7, 0xf9, 0x20, 0x3d, 0xbb, 0xc6, 0xd5, 0xd7, 0x5c, 0x4a, 0xad, 0x3e, 0x4f, 0x71, 0x20, 0xcf, 0xec, 0xec, 0x14, 0x99, 0x4c, 0x96, 0xd1, 0xd1, 0x71, 0x54, 0x55, 0x65, 0xdd, 0xba, 0x75, 0x94, 0x4a, 0x05, 0x2c, 0xbb, 0x8b, 0xaa, 0x8a, 0x74, 0xba, 0x32, 0xa9, 0x54, 0x0a, 0xdf, 0x75, 0x51, 0x55, 0x99, 0x46, 0xad, 0x4e, 0x65, 0x64, 0x88, 0x99, 0x99, 0x19, 0x3e, 0xb1, 0xcf, 0xc7, 0x78, 0xe5, 0xef, 0x7f, 0x43, 0x14, 0x45, 0x52, 0xa9, 0x0c, 0x0b, 0xf3, 0x35, 0x82, 0x00, 0x34, 0x59, 0x8d, 0x10, 0x97, 0x0f, 0xc8, 0x0a, 0x95, 0x91, 0x21, 0x5e, 0x7d, 0xf5, 0x55, 0x04, 0x41, 0xc0, 0xb2, 0x5c, 0xfa, 0x8c, 0x2c, 0xb9, 0x9c, 0x8c, 0xe3, 0x78, 0x28, 0x8a, 0x4c, 0xb3, 0xe9, 0xb1, 0xe7, 0x9e, 0xbb, 0x92, 0xce, 0x18, 0x6c, 0xdb, 0xb6, 0x0d, 0xdf, 0xf7, 0xf9, 0xe0, 0x07, 0x77, 0xe7, 0x90, 0x83, 0xcf, 0xe6, 0xed, 0xb7, 0xdf, 0x64, 0xe7, 0x9d, 0x57, 0xd3, 0x31, 0x5b, 0xbc, 0xfc, 0xf2, 0xcb, 0xec, 0xfd, 0xd1, 0x8f, 0xe1, 0xfb, 0x01, 0x9e, 0x17, 0x20, 0x0a, 0x32, 0xb2, 0x02, 0x5f, 0xf8, 0xe2, 0xe7, 0x28, 0x16, 0xb3, 0xdc, 0x77, 0xff, 0x3d, 0x1c, 0x79, 0xd4, 0xa1, 0x34, 0xeb, 0x6d, 0x0a, 0x25, 0x9d, 0x8c, 0x5e, 0x64, 0x72, 0xeb, 0x34, 0xd9, 0xbc, 0x81, 0x28, 0x82, 0x69, 0xf6, 0x48, 0xa7, 0x35, 0x72, 0xf9, 0x4c, 0x84, 0x50, 0xdc, 0x80, 0xe1, 0xe1, 0x61, 0xfe, 0xf5, 0xaf, 0xb7, 0x11, 0x45, 0xd8, 0x6b, 0xaf, 0x3d, 0x98, 0x99, 0x99, 0x61, 0x6e, 0x6e, 0x8e, 0x55, 0xab, 0x56, 0x61, 0xa4, 0xca, 0x68, 0xba, 0x42, 0xab, 0xd5, 0x60, 0xbf, 0xfd, 0xf6, 0x63, 0xd9, 0xd2, 0x1d, 0x39, 0xfb, 0xab, 0xe7, 0x23, 0x62, 0x70, 0xf3, 0x4d, 0xb7, 0x53, 0xcc, 0xad, 0xc4, 0xb6, 0x7b, 0xd8, 0x4e, 0x87, 0x7c, 0x21, 0x85, 0xed, 0xd6, 0xf8, 0xcb, 0xdf, 0x9e, 0x63, 0xed, 0x9b, 0x7f, 0x67, 0xed, 0x1b, 0xaf, 0x62, 0xe8, 0x3e, 0xf3, 0xf3, 0x55, 0x82, 0x20, 0xa4, 0x50, 0x28, 0x22, 0x4b, 0x2a, 0xed, 0xb6, 0x89, 0x28, 0x4a, 0xcc, 0xcf, 0x37, 0x49, 0xa7, 0x34, 0x14, 0x45, 0xa1, 0xdb, 0xed, 0x92, 0xcd, 0x66, 0x23, 0xa6, 0xe6, 0xf5, 0x0d, 0x4c, 0x2c, 0x19, 0x8c, 0x16, 0xb8, 0x1b, 0x24, 0x88, 0x6b, 0x31, 0x55, 0x14, 0x17, 0xa5, 0x18, 0x75, 0xc5, 0xd4, 0xa9, 0xe3, 0x38, 0x49, 0x37, 0x1b, 0x77, 0xa8, 0x8b, 0x69, 0xf4, 0x98, 0xaa, 0x8e, 0x13, 0xff, 0x62, 0x1a, 0x3b, 0xfe, 0xdb, 0x62, 0x1a, 0xdf, 0x74, 0x2c, 0x54, 0x49, 0x46, 0xd7, 0x75, 0x34, 0x45, 0x25, 0xf0, 0x7d, 0x3c, 0xdb, 0x21, 0xf4, 0x23, 0x34, 0xb7, 0xcb, 0xea, 0x55, 0x34, 0x9b, 0x6d, 0xe6, 0x6b, 0x0b, 0x51, 0x67, 0x1d, 0xd0, 0xef, 0xc4, 0x75, 0x44, 0x59, 0xc6, 0xeb, 0x6b, 0x59, 0xd5, 0xea, 0x3c, 0x10, 0xf0, 0xd0, 0xc3, 0x3f, 0xe7, 0xf0, 0xc3, 0x3f, 0xdb, 0xd7, 0x18, 0x67, 0x18, 0x18, 0xc8, 0x24, 0xc5, 0x33, 0xca, 0x53, 0x3e, 0xae, 0xeb, 0xe3, 0x38, 0xd1, 0x3a, 0xc9, 0xe7, 0x53, 0xc9, 0xb9, 0xc5, 0xe7, 0x15, 0xd1, 0xef, 0x51, 0x90, 0x16, 0x8b, 0x05, 0x7a, 0xbd, 0x5e, 0xa2, 0x9f, 0xc7, 0x9d, 0x74, 0x10, 0x80, 0x24, 0xbd, 0x13, 0xa4, 0xf1, 0xe7, 0x63, 0xcf, 0x41, 0xe2, 0x17, 0x10, 0xd4, 0x44, 0x23, 0x8b, 0x8b, 0xfc, 0x62, 0x49, 0x23, 0x57, 0xc8, 0x33, 0x3b, 0x3b, 0x4b, 0x3a, 0x9d, 0xc6, 0xec, 0x44, 0x7a, 0xa0, 0x61, 0x18, 0xcc, 0xcf, 0x2f, 0x50, 0x2e, 0x97, 0xf1, 0x42, 0x85, 0x5a, 0xad, 0x4e, 0x26, 0x93, 0xe3, 0x27, 0x3f, 0x7e, 0x10, 0xdb, 0xf2, 0x11, 0x90, 0x31, 0x4d, 0x1b, 0x51, 0x90, 0xf1, 0x5c, 0x9b, 0x25, 0x4b, 0xc6, 0x99, 0x9e, 0x99, 0x44, 0x10, 0x7d, 0x4e, 0x3c, 0xf1, 0x4b, 0x14, 0x8b, 0x45, 0x6e, 0xb8, 0xe1, 0x06, 0x0c, 0x23, 0x8d, 0xe0, 0x4b, 0x1c, 0x7a, 0xe8, 0xa1, 0xa4, 0x52, 0x29, 0x6c, 0xa7, 0x87, 0xed, 0x74, 0x59, 0xba, 0x74, 0x8c, 0xe9, 0x99, 0x2d, 0xdc, 0x79, 0xe7, 0x1d, 0x54, 0x2a, 0x05, 0x82, 0x20, 0xe0, 0xf8, 0xe3, 0x8f, 0x67, 0x7e, 0xbe, 0x41, 0xa5, 0x52, 0xa2, 0xd3, 0xe9, 0x44, 0x7e, 0x0d, 0xc3, 0x40, 0x92, 0x84, 0xe4, 0xd9, 0xd7, 0x6a, 0x35, 0x4c, 0xd3, 0xa5, 0x9f, 0x7b, 0x28, 0x97, 0xb3, 0x78, 0x5e, 0x48, 0xa3, 0xd1, 0xa1, 0x50, 0xc8, 0xd0, 0xed, 0x76, 0x19, 0x1c, 0x1c, 0x64, 0x6a, 0x6a, 0x96, 0x30, 0x84, 0x54, 0x4a, 0x45, 0x96, 0xa5, 0x24, 0x79, 0xc6, 0xeb, 0x22, 0x4e, 0x70, 0xa9, 0x54, 0x0a, 0x51, 0x14, 0x19, 0x1a, 0x1a, 0xe2, 0xcd, 0x37, 0xd7, 0x23, 0x8a, 0xa0, 0xaa, 0xef, 0x78, 0x30, 0x0a, 0x85, 0x02, 0x61, 0x18, 0x26, 0xc9, 0x5e, 0xd3, 0xb4, 0x44, 0x7b, 0x8f, 0xa8, 0x79, 0x91, 0x10, 0xf7, 0x1d, 0x56, 0xc4, 0xa7, 0x7f, 0xce, 0x0a, 0xad, 0x56, 0x2b, 0xfa, 0x1e, 0x45, 0xc3, 0xee, 0x5a, 0x14, 0x4a, 0x45, 0x1a, 0xb5, 0x26, 0xbf, 0x7d, 0xe6, 0x19, 0x0e, 0x3a, 0xe8, 0x60, 0x9e, 0x7c, 0xf2, 0x49, 0x4c, 0xd3, 0x24, 0x95, 0x2a, 0x73, 0xde, 0x79, 0xe7, 0x27, 0xcf, 0xf6, 0xa2, 0x8b, 0x2e, 0xe4, 0xa2, 0x8b, 0xbe, 0x49, 0x36, 0xa7, 0x73, 0xe9, 0x65, 0xdf, 0x66, 0xdd, 0xba, 0x57, 0x59, 0xb2, 0x64, 0x1c, 0x4d, 0xd3, 0x38, 0xec, 0xb0, 0x23, 0xf8, 0xc0, 0xee, 0x7b, 0x60, 0xdb, 0x1e, 0x87, 0x1f, 0x76, 0x2c, 0xdf, 0xbf, 0xfd, 0x07, 0xfc, 0xec, 0xe7, 0xb7, 0x73, 0xc4, 0x11, 0x47, 0x60, 0x59, 0x3d, 0xde, 0xf7, 0xbe, 0xf7, 0xb1, 0x75, 0xeb, 0x66, 0x3c, 0xcf, 0x23, 0x93, 0x8d, 0xbc, 0x02, 0x5d, 0xd3, 0x01, 0x49, 0xe4, 0x9e, 0x7b, 0xee, 0xa1, 0xd9, 0x68, 0x71, 0xdd, 0x0d, 0xd7, 0x33, 0x35, 0x35, 0xc3, 0x45, 0x97, 0x5c, 0x4c, 0x3e, 0x9f, 0xe7, 0xaf, 0x7f, 0x7a, 0x95, 0x9f, 0xfd, 0xec, 0x67, 0xe4, 0x72, 0x05, 0x34, 0xcd, 0xe0, 0xcd, 0x37, 0xde, 0xe2, 0x97, 0xbf, 0x7c, 0xb4, 0xbf, 0x5e, 0x05, 0xaa, 0xf3, 0x4d, 0x46, 0x2a, 0x63, 0x54, 0xab, 0x55, 0x4e, 0x3c, 0xf1, 0x64, 0x1e, 0x79, 0xe4, 0x51, 0x4e, 0x3c, 0xe1, 0x64, 0x6e, 0xbc, 0xf1, 0x66, 0x72, 0xb9, 0x1c, 0x61, 0x28, 0xd0, 0x6a, 0xb5, 0xd0, 0x75, 0x15, 0x91, 0x00, 0xf0, 0x91, 0x65, 0x8f, 0xf3, 0xce, 0x3f, 0x1b, 0x55, 0x93, 0xb0, 0xdd, 0x6a, 0xd2, 0x64, 0x59, 0x5d, 0x9b, 0xc0, 0x17, 0xc1, 0x97, 0x10, 0x05, 0x15, 0x5d, 0x4b, 0xe3, 0x04, 0x26, 0x8a, 0x24, 0xf5, 0x8b, 0x59, 0x40, 0xe0, 0xf9, 0xb8, 0x9e, 0x4d, 0xe0, 0x46, 0x85, 0x46, 0x35, 0x14, 0x74, 0x3d, 0x45, 0xcf, 0xb6, 0x30, 0x7b, 0x16, 0xc5, 0x81, 0x32, 0xd7, 0xdf, 0x78, 0x13, 0x9f, 0xdc, 0x77, 0x7f, 0xb2, 0xc5, 0x02, 0x41, 0x68, 0xb1, 0x7c, 0xf9, 0x72, 0xd6, 0xae, 0x5d, 0xcb, 0xd2, 0xa5, 0x4b, 0x28, 0x16, 0x8b, 0xd4, 0xea, 0x55, 0x6c, 0xdb, 0x66, 0x7a, 0x72, 0x1e, 0x3d, 0x2d, 0x52, 0x2e, 0x97, 0x69, 0xb7, 0x4d, 0xb2, 0xd9, 0x2c, 0xed, 0x96, 0xc9, 0xb3, 0xcf, 0x3e, 0xcb, 0xe3, 0x8f, 0x3f, 0xce, 0x5d, 0x77, 0xdd, 0x8d, 0x2c, 0x47, 0x2c, 0x8d, 0xae, 0xeb, 0xb4, 0xdb, 0xed, 0xbe, 0xe4, 0x91, 0x66, 0x6a, 0x6a, 0x8a, 0x20, 0x08, 0x38, 0xfd, 0xf4, 0x33, 0xd8, 0x67, 0x9f, 0x8f, 0x63, 0xdb, 0x36, 0x47, 0x1c, 0x71, 0x04, 0xc3, 0x43, 0x23, 0xd8, 0xb6, 0x4d, 0xaf, 0x17, 0x01, 0x89, 0xb1, 0x4a, 0x91, 0xf9, 0xf9, 0xf9, 0xa4, 0x40, 0xe6, 0xf3, 0xf9, 0x04, 0xdd, 0x47, 0xb1, 0xdc, 0x4b, 0x3c, 0x2f, 0xb1, 0xac, 0xa6, 0x28, 0x4a, 0xc2, 0x32, 0x1a, 0x46, 0x3a, 0x89, 0xcf, 0x98, 0x79, 0x5b, 0x5c, 0xa0, 0x0b, 0x85, 0x02, 0x93, 0x93, 0xb3, 0x0c, 0x0f, 0x0f, 0xe0, 0x38, 0x4e, 0x92, 0xff, 0x34, 0x4d, 0xa3, 0x58, 0x2c, 0xa2, 0xeb, 0x7a, 0xe2, 0x15, 0x5a, 0x4c, 0xb1, 0xc7, 0xec, 0xc4, 0x62, 0xa9, 0x72, 0xb1, 0x0f, 0x29, 0xce, 0x39, 0x10, 0x24, 0x88, 0x3d, 0x61, 0x28, 0xd6, 0x3c, 0xf1, 0x7c, 0x18, 0x78, 0x1e, 0x47, 0x1f, 0x79, 0x38, 0xef, 0xdb, 0xed, 0xdd, 0x2c, 0x54, 0xe7, 0x49, 0xa5, 0x74, 0x7a, 0x66, 0x1b, 0x04, 0x37, 0xd1, 0xab, 0x04, 0x49, 0xa2, 0xd3, 0xe9, 0x50, 0x19, 0x1d, 0xc1, 0x30, 0x0c, 0x9a, 0xcd, 0x26, 0x1d, 0x6b, 0x9a, 0x4a, 0x65, 0x04, 0xc3, 0x48, 0x63, 0x76, 0x6c, 0x4e, 0x3e, 0xf9, 0x64, 0xae, 0xb8, 0xe2, 0xbb, 0x0c, 0x57, 0x06, 0x13, 0xfd, 0x42, 0x52, 0x35, 0x8a, 0x85, 0x41, 0x7a, 0x66, 0xc0, 0xc4, 0xc4, 0x4e, 0xec, 0xfe, 0xbe, 0x8f, 0xb2, 0xc7, 0x87, 0x3e, 0x8e, 0xd9, 0x71, 0x30, 0x14, 0x05, 0xcf, 0xef, 0xa2, 0x19, 0x01, 0x7f, 0xfd, 0xfb, 0x8b, 0x3c, 0xfa, 0xd8, 0x83, 0x68, 0x3a, 0x2c, 0xd4, 0xe6, 0x18, 0x1e, 0x1e, 0xe6, 0xc8, 0xa3, 0x0e, 0xe5, 0x7b, 0xdf, 0xbb, 0x15, 0x45, 0xd1, 0x10, 0x90, 0x90, 0x15, 0x91, 0x7c, 0x3e, 0x4b, 0xad, 0x3e, 0x8f, 0x20, 0x84, 0x94, 0x87, 0x97, 0xb0, 0x6d, 0xdb, 0x36, 0xb2, 0xa9, 0x34, 0x99, 0x4c, 0x86, 0x89, 0xf1, 0x71, 0xe6, 0xe6, 0x66, 0x68, 0x36, 0x9b, 0xec, 0xbc, 0xd3, 0xbb, 0x98, 0xdc, 0xba, 0x05, 0xd7, 0xf1, 0xd0, 0x75, 0x9d, 0xc1, 0x52, 0x85, 0xd7, 0x5e, 0x5b, 0x4b, 0xd8, 0x2f, 0xb4, 0xfb, 0xee, 0xbb, 0x2f, 0xcf, 0xbd, 0xf8, 0x27, 0xba, 0xdd, 0x2e, 0x5b, 0xb7, 0xce, 0x91, 0xcb, 0x2b, 0x14, 0x0a, 0x05, 0xba, 0xdd, 0x0e, 0x40, 0x3f, 0x11, 0xc3, 0xc8, 0xc8, 0x20, 0xad, 0x56, 0x83, 0x03, 0x0e, 0x38, 0x80, 0xcd, 0x9b, 0x37, 0xd1, 0xb3, 0x4c, 0xaa, 0xd5, 0x2a, 0xb2, 0x2c, 0x92, 0x49, 0xbf, 0x87, 0xcf, 0x7c, 0xe6, 0x40, 0xae, 0xbb, 0xfe, 0x6a, 0xde, 0xfb, 0xde, 0xf7, 0xe0, 0xfb, 0x2e, 0xa9, 0x54, 0x86, 0x2f, 0x7f, 0xf9, 0x34, 0x8a, 0x85, 0x12, 0xbe, 0x0f, 0x5f, 0xfe, 0xf2, 0xc9, 0x04, 0xa1, 0x4b, 0xab, 0xbd, 0x80, 0x6b, 0x77, 0x28, 0x0d, 0xe7, 0xa9, 0xd7, 0x9b, 0x0c, 0x0d, 0xe7, 0x99, 0x9f, 0x6a, 0x52, 0x28, 0xe6, 0xa3, 0x04, 0xe2, 0x84, 0x68, 0x3a, 0xec, 0xb0, 0x6a, 0x39, 0x9b, 0x36, 0x6d, 0x24, 0x0c, 0xa1, 0xdb, 0x01, 0x55, 0x83, 0x4c, 0x26, 0xc5, 0xaa, 0x55, 0xab, 0x68, 0x36, 0x9b, 0x09, 0x95, 0xa3, 0xeb, 0x3a, 0xa9, 0x4c, 0x81, 0x66, 0xab, 0x4e, 0x26, 0x93, 0xe1, 0xcc, 0x33, 0xbe, 0xc2, 0xf0, 0xd0, 0x12, 0x5c, 0x5b, 0xa6, 0x90, 0xaf, 0xb0, 0x6d, 0xeb, 0x02, 0x81, 0xa7, 0x33, 0x32, 0x3a, 0x8c, 0x69, 0xb6, 0x70, 0xfd, 0x0e, 0xf5, 0xc6, 0x0c, 0xcb, 0x56, 0x0c, 0x73, 0xe6, 0x59, 0x27, 0xa1, 0x1b, 0x32, 0xf5, 0xfa, 0x46, 0x6a, 0xb5, 0x16, 0xb9, 0x5c, 0x06, 0x45, 0xd6, 0x08, 0x43, 0x01, 0xd7, 0xf5, 0x58, 0xbe, 0x6c, 0x25, 0xeb, 0xd7, 0xaf, 0xa7, 0xd3, 0x89, 0x68, 0xa2, 0xbb, 0xef, 0xbe, 0x9b, 0x13, 0x4f, 0x3c, 0x11, 0xb3, 0xe3, 0x32, 0x3e, 0x31, 0x84, 0xeb, 0xba, 0xcc, 0xce, 0xd4, 0xc9, 0x65, 0xa3, 0x60, 0x8a, 0x93, 0xe8, 0x62, 0xd3, 0x46, 0x5c, 0xd4, 0x7b, 0xbd, 0x08, 0x65, 0xc5, 0x54, 0x55, 0x8c, 0xb6, 0x5c, 0xd7, 0x8d, 0x68, 0xdd, 0x45, 0x0b, 0x34, 0xee, 0xb2, 0xe3, 0xff, 0x7e, 0xa7, 0x00, 0x06, 0x09, 0x72, 0x5f, 0x6c, 0x12, 0x33, 0x1d, 0x9b, 0x6c, 0xdf, 0xa8, 0x46, 0x10, 0xe2, 0x7b, 0x1e, 0x42, 0x10, 0x42, 0x10, 0xa1, 0xfa, 0x9d, 0x56, 0x2d, 0xc7, 0x34, 0x7b, 0xcc, 0x56, 0xe7, 0xa3, 0x73, 0x14, 0x22, 0xca, 0x5b, 0x96, 0x55, 0x1c, 0xcf, 0x63, 0xa8, 0xdf, 0x99, 0x97, 0x4a, 0x03, 0xcc, 0xcd, 0xcd, 0x60, 0xa4, 0x34, 0x64, 0x59, 0xa4, 0xdb, 0x35, 0x19, 0x18, 0x18, 0x60, 0x6a, 0x6a, 0x16, 0x49, 0x5a, 0xac, 0xa3, 0x89, 0x7d, 0x5a, 0x2c, 0x36, 0xc2, 0xc5, 0xd7, 0x2c, 0x26, 0x34, 0xf2, 0x76, 0x14, 0x9c, 0xa8, 0xfc, 0x2f, 0xa3, 0x4b, 0xf4, 0x01, 0x45, 0x89, 0xde, 0x1f, 0x99, 0xcd, 0x82, 0xed, 0x24, 0x87, 0xf8, 0xde, 0x78, 0x9e, 0x07, 0xa1, 0x9c, 0x18, 0x9a, 0xfe, 0xf7, 0x7b, 0x7c, 0xdf, 0xc7, 0x72, 0x6c, 0xd2, 0xe9, 0x34, 0x96, 0x65, 0x31, 0x3e, 0x3e, 0x4e, 0xb5, 0x5a, 0x8d, 0x1a, 0x6d, 0x88, 0xee, 0x37, 0x12, 0xe5, 0x72, 0x85, 0x76, 0xab, 0x8b, 0x28, 0xe8, 0xdc, 0x72, 0xf3, 0x1d, 0x28, 0x72, 0x8a, 0x42, 0xbe, 0x4c, 0xb7, 0xdb, 0xe3, 0xc4, 0x93, 0x3e, 0x4b, 0x18, 0x06, 0xfc, 0xfa, 0x89, 0xc7, 0x98, 0x9d, 0x9b, 0xe2, 0xd8, 0x63, 0x8f, 0x26, 0x9f, 0x2f, 0xd2, 0x69, 0x9b, 0x3c, 0xf4, 0xd0, 0x43, 0xb8, 0x96, 0x8b, 0xae, 0x47, 0x4d, 0xcb, 0xd1, 0x47, 0x1f, 0x8b, 0xa6, 0x29, 0xd8, 0x8e, 0x49, 0xa9, 0x54, 0xa0, 0x67, 0x99, 0xf4, 0xba, 0x2d, 0xd2, 0xe9, 0x34, 0x73, 0x73, 0x35, 0x86, 0x87, 0x4b, 0xd4, 0x6a, 0x35, 0xd2, 0xe9, 0x74, 0x42, 0x1f, 0x5a, 0x56, 0x8f, 0x30, 0x0c, 0xc9, 0x64, 0x32, 0x58, 0x96, 0x95, 0x3c, 0xc7, 0x30, 0x0c, 0x59, 0xba, 0x74, 0x29, 0x4b, 0x97, 0x2e, 0xe3, 0xf9, 0xe7, 0x9f, 0xc7, 0x75, 0x43, 0x74, 0x3d, 0x5a, 0x23, 0x86, 0x61, 0xd0, 0xed, 0x76, 0x69, 0xb5, 0xba, 0x0c, 0x0c, 0x64, 0x13, 0x54, 0xe2, 0xba, 0x6e, 0x62, 0x90, 0x13, 0x04, 0xfa, 0xc6, 0xbe, 0x28, 0xd1, 0xb5, 0x5a, 0xad, 0x24, 0xa1, 0xc5, 0x85, 0x7c, 0x76, 0xb6, 0x4a, 0xa1, 0x90, 0xc5, 0x30, 0x0c, 0x66, 0x66, 0xe6, 0x48, 0xa7, 0x8d, 0x84, 0xe1, 0x88, 0x7d, 0x14, 0xc5, 0x62, 0xbe, 0x8f, 0x9a, 0x1c, 0x9a, 0xcd, 0x2e, 0xb9, 0x9c, 0x41, 0xab, 0xd5, 0x63, 0x62, 0xa2, 0xc2, 0xfc, 0xfc, 0x3c, 0xf9, 0x52, 0x89, 0xd9, 0xa9, 0x39, 0x90, 0x60, 0x68, 0x68, 0x90, 0x5e, 0xcf, 0x46, 0xd3, 0x34, 0xc6, 0xc6, 0xc6, 0xe8, 0x76, 0xbb, 0x5c, 0x7b, 0xf5, 0x5d, 0x34, 0x9b, 0x4d, 0x46, 0x47, 0x47, 0x39, 0xfd, 0xf4, 0xd3, 0x19, 0x1a, 0x2e, 0x81, 0xe0, 0x30, 0x3d, 0x33, 0xc9, 0x2d, 0xb7, 0xdc, 0xc0, 0x39, 0xe7, 0x9c, 0x86, 0x28, 0x45, 0xcd, 0x47, 0xab, 0xd9, 0xc6, 0xf3, 0x40, 0x12, 0x75, 0x4e, 0xff, 0xaf, 0xb3, 0x59, 0x32, 0xb1, 0x14, 0x49, 0x6e, 0x72, 0xf1, 0xc5, 0x17, 0x33, 0x3f, 0x3f, 0xc7, 0x9d, 0x77, 0xde, 0xc1, 0x45, 0xdf, 0xfa, 0x26, 0xad, 0x56, 0x83, 0x53, 0x4f, 0x3d, 0x95, 0x87, 0x1e, 0xfa, 0x05, 0x9d, 0x4e, 0x8f, 0x4c, 0x3e, 0x87, 0x80, 0xc4, 0x0d, 0x37, 0xdc, 0xc4, 0xcb, 0x7f, 0xf9, 0x2b, 0x2f, 0xbf, 0xfc, 0x77, 0x2e, 0xba, 0xf8, 0x62, 0x8e, 0x3a, 0xea, 0x18, 0xfc, 0x5e, 0x48, 0x3a, 0x9d, 0xe6, 0xc6, 0x1b, 0x6f, 0xe4, 0x3b, 0xdf, 0xb9, 0x0c, 0x45, 0xd1, 0xe8, 0x74, 0x3a, 0x1c, 0xfc, 0x99, 0x43, 0xd8, 0x73, 0xcf, 0x3d, 0x79, 0xe5, 0x1f, 0x6b, 0x79, 0xff, 0xfb, 0x3f, 0xc0, 0x3f, 0x5f, 0xf9, 0x17, 0xf7, 0xde, 0xfb, 0x13, 0x36, 0x6e, 0xdc, 0x84, 0xa6, 0x1a, 0x3c, 0xfe, 0xf8, 0x13, 0x7d, 0x09, 0x2d, 0xa6, 0x89, 0x7d, 0x32, 0x29, 0x9d, 0xa9, 0xe9, 0xcd, 0x64, 0x33, 0x0a, 0xe5, 0xc1, 0x3c, 0x47, 0x1f, 0xf3, 0x59, 0x42, 0xc1, 0x4c, 0x34, 0x63, 0x91, 0x48, 0x22, 0xd1, 0x95, 0x34, 0xae, 0x03, 0xbd, 0xae, 0x0b, 0xb2, 0xdd, 0x47, 0xe8, 0x7d, 0x59, 0xc8, 0xed, 0x1b, 0x62, 0xfd, 0x3e, 0x52, 0xd6, 0x23, 0xf3, 0x6b, 0x26, 0x97, 0x47, 0x52, 0x14, 0xd6, 0xad, 0x5f, 0x4f, 0xa9, 0x3c, 0xc4, 0xfd, 0xf7, 0x3f, 0xc8, 0x09, 0x27, 0x9d, 0x14, 0xf9, 0xae, 0xca, 0x65, 0x44, 0x51, 0xa4, 0xd9, 0xaa, 0xf7, 0xc1, 0x57, 0x8a, 0x75, 0x6f, 0x6e, 0x44, 0x4b, 0x45, 0x4d, 0x82, 0xe3, 0x84, 0x64, 0x32, 0x06, 0xed, 0x46, 0x8f, 0xb1, 0x89, 0x11, 0xb6, 0x6d, 0x9d, 0x46, 0x90, 0x60, 0x74, 0x74, 0x94, 0x4c, 0x36, 0x5a, 0x2b, 0xaa, 0xaa, 0x32, 0x39, 0x39, 0x49, 0x2e, 0x97, 0xa3, 0x52, 0xa9, 0x24, 0xec, 0xea, 0x96, 0xcd, 0xdb, 0xf8, 0xf5, 0xaf, 0x7f, 0xcd, 0x27, 0x3f, 0xb9, 0x3f, 0xc5, 0xe2, 0x40, 0x22, 0x1b, 0x8e, 0x8d, 0x8d, 0x31, 0x3f, 0x3f, 0xcf, 0xed, 0xb7, 0xdc, 0xc4, 0x4d, 0x37, 0xdd, 0x94, 0x34, 0x00, 0xb1, 0x6f, 0x27, 0x92, 0x20, 0x7b, 0xf8, 0xbe, 0x8b, 0xd4, 0x6f, 0x58, 0xe2, 0x75, 0x1b, 0xaf, 0x39, 0x51, 0x14, 0xc9, 0x66, 0xf3, 0x89, 0x04, 0xd8, 0x68, 0x34, 0x68, 0xb5, 0x4c, 0xc2, 0x10, 0x74, 0x5d, 0x4e, 0xf2, 0xc1, 0xd8, 0xd8, 0x18, 0xeb, 0xd7, 0xaf, 0x4f, 0x50, 0xb4, 0xa2, 0x44, 0x31, 0x5f, 0x28, 0x14, 0x12, 0xb6, 0x2a, 0x8e, 0xeb, 0xc5, 0x05, 0x3d, 0xce, 0x97, 0xb1, 0x46, 0xbf, 0x98, 0xa9, 0x8c, 0x25, 0x38, 0x41, 0x08, 0x93, 0x35, 0x1d, 0xe7, 0x08, 0xe1, 0x27, 0x0f, 0xac, 0x09, 0x73, 0xd9, 0x34, 0x5f, 0x39, 0xe3, 0x74, 0x7c, 0xcf, 0x21, 0x93, 0xd6, 0x69, 0x34, 0x6a, 0x0c, 0x14, 0x0a, 0x58, 0x76, 0x13, 0x45, 0x51, 0xa2, 0xae, 0xc6, 0xb1, 0x23, 0x1a, 0xd2, 0x71, 0x80, 0x08, 0xe9, 0xc8, 0xba, 0x03, 0x88, 0x04, 0x3e, 0x94, 0x4a, 0x83, 0xcc, 0xce, 0x4e, 0x33, 0x5c, 0x19, 0x44, 0x92, 0x04, 0xba, 0x5d, 0x93, 0x52, 0xa9, 0x44, 0xad, 0xd9, 0xc4, 0xb1, 0xe1, 0x47, 0x77, 0xdd, 0xcf, 0x93, 0x4f, 0x3e, 0xc7, 0xde, 0x7b, 0x7d, 0x1a, 0x51, 0xca, 0x62, 0x76, 0x1c, 0x06, 0x32, 0x29, 0xcc, 0x6e, 0x13, 0x59, 0x71, 0xb9, 0xe8, 0xe2, 0xaf, 0x23, 0x4a, 0x0e, 0xf5, 0xe6, 0x0c, 0xa2, 0x28, 0xe0, 0xfb, 0x2e, 0x43, 0xc3, 0x45, 0x7a, 0x3d, 0x0b, 0xc3, 0x48, 0xe3, 0x3a, 0x3e, 0x66, 0xb7, 0x1d, 0x75, 0xe2, 0x9a, 0x84, 0x2c, 0x8b, 0x0c, 0x4f, 0xac, 0x64, 0xc9, 0x92, 0x25, 0xf4, 0x3a, 0x26, 0xa6, 0x69, 0xb2, 0xfb, 0xfb, 0x77, 0x23, 0x97, 0xcb, 0xf1, 0xf3, 0x9f, 0xff, 0x9c, 0xb1, 0xca, 0x08, 0xd5, 0xf9, 0x39, 0x66, 0xa6, 0x67, 0x29, 0x95, 0x4a, 0x34, 0x6a, 0x6d, 0x7c, 0x3f, 0xa4, 0xd3, 0x6c, 0x33, 0x58, 0x1e, 0x66, 0x97, 0x5d, 0xde, 0x83, 0x62, 0xa4, 0x78, 0xec, 0xb1, 0x47, 0x92, 0x22, 0x91, 0xce, 0x18, 0x7d, 0x84, 0xd9, 0xa7, 0x74, 0x3b, 0x90, 0xcb, 0x69, 0x98, 0x5d, 0x9b, 0xf1, 0xf1, 0x32, 0x9e, 0xe7, 0xb2, 0x6d, 0xaa, 0xc9, 0x7e, 0xfb, 0xed, 0xc1, 0xf4, 0xf4, 0x34, 0xaa, 0xb2, 0x8a, 0xe9, 0xe9, 0x6d, 0xcc, 0xcc, 0x4c, 0x52, 0x19, 0x19, 0xa4, 0xdd, 0x69, 0x45, 0xee, 0xea, 0x4c, 0x8e, 0xef, 0x7f, 0xff, 0x0e, 0x04, 0x54, 0x1a, 0x8d, 0x3a, 0xc3, 0x95, 0x12, 0x9f, 0x3d, 0xec, 0x60, 0x64, 0x25, 0x40, 0x51, 0xa1, 0xdb, 0xed, 0xe0, 0x07, 0xa0, 0x49, 0x6a, 0x9f, 0x26, 0xd4, 0xa8, 0x2d, 0x74, 0x28, 0x0d, 0x46, 0x09, 0x45, 0x10, 0xe0, 0x7d, 0xef, 0x7b, 0x37, 0xed, 0x76, 0x07, 0x59, 0x8e, 0x68, 0xcb, 0x7a, 0xbd, 0xce, 0xfa, 0xf5, 0x93, 0xc8, 0x32, 0x2c, 0x5b, 0x36, 0x11, 0xa1, 0x14, 0x23, 0x83, 0x1f, 0xb8, 0xbc, 0xfe, 0xda, 0x3a, 0xc6, 0xc6, 0xc6, 0xd8, 0xbc, 0x61, 0x9a, 0x87, 0x1f, 0x7a, 0x0a, 0x42, 0x03, 0x5d, 0xcd, 0x23, 0x09, 0x19, 0x7a, 0x56, 0xe4, 0x70, 0x16, 0x44, 0x87, 0x85, 0xda, 0x14, 0xa5, 0xc1, 0x0c, 0x6f, 0xbc, 0xf9, 0x4f, 0x5e, 0xf8, 0xe3, 0x1f, 0xd8, 0x3c, 0xf9, 0x2a, 0xb6, 0x6d, 0x53, 0x19, 0x1e, 0x25, 0x9b, 0xcd, 0x63, 0x18, 0x29, 0xfe, 0xfd, 0xaf, 0xd7, 0x19, 0x18, 0x18, 0x60, 0x66, 0x66, 0x0e, 0x51, 0x8c, 0x68, 0x1f, 0x41, 0x10, 0xb8, 0xeb, 0xae, 0xbb, 0x38, 0xed, 0xb4, 0xd3, 0xa8, 0xd7, 0xeb, 0xb8, 0x4e, 0x48, 0xa9, 0x9c, 0x47, 0x08, 0x83, 0xed, 0x5c, 0x96, 0x31, 0xdd, 0x15, 0x17, 0x1d, 0x51, 0x14, 0xe9, 0x74, 0x3a, 0x49, 0xa0, 0xc6, 0xe8, 0x32, 0xa6, 0x9e, 0xe2, 0x60, 0x00, 0xd0, 0xb4, 0x0c, 0xbf, 0xcb, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x75, 0x3d, 0x31, 0x8a, 0xc5, 0x5d, 0x6e, 0x6c, 0xfc, 0x88, 0x8b, 0x7a, 0x8c, 0xcc, 0xe3, 0xa6, 0xa0, 0x65, 0xda, 0x14, 0xf2, 0x51, 0x41, 0xf7, 0x1c, 0x17, 0xdf, 0xf3, 0x50, 0x25, 0x19, 0x91, 0x28, 0x69, 0x2f, 0x5b, 0x32, 0x8a, 0x24, 0x29, 0xd4, 0x9a, 0x0d, 0x6c, 0xdb, 0xc6, 0xb2, 0xa3, 0x42, 0x69, 0x18, 0x69, 0x6c, 0xd7, 0xe5, 0xfb, 0x77, 0xdc, 0xc1, 0x7f, 0xfd, 0xd7, 0x69, 0x78, 0x9e, 0x87, 0x2c, 0x8b, 0xd8, 0x4e, 0x8f, 0xe1, 0xe1, 0x41, 0x3a, 0x9d, 0x36, 0x0b, 0x0b, 0x1d, 0x64, 0x05, 0x64, 0x49, 0x48, 0xcc, 0x2f, 0x20, 0xf4, 0xf5, 0x7b, 0x37, 0x29, 0xce, 0xd1, 0x79, 0xbe, 0xa3, 0xf7, 0xc5, 0xe7, 0x2e, 0x08, 0x02, 0x8e, 0xed, 0xf5, 0x5d, 0xf1, 0xf2, 0x76, 0x12, 0x43, 0xcc, 0x6a, 0x04, 0xa1, 0x97, 0xa0, 0x71, 0x41, 0x10, 0x92, 0xc6, 0xc8, 0x75, 0x5d, 0x1c, 0xc7, 0x49, 0x28, 0xf7, 0xf8, 0xbe, 0xc5, 0xd4, 0x7c, 0xe2, 0x4d, 0x50, 0x23, 0xf6, 0x44, 0xd7, 0xf5, 0x84, 0xf1, 0x68, 0xb7, 0x9b, 0x18, 0x46, 0xe4, 0x2c, 0x57, 0xfa, 0x71, 0x13, 0x06, 0x0a, 0xf7, 0xfd, 0xf4, 0x21, 0xc2, 0x40, 0x25, 0xf0, 0x25, 0x5c, 0x07, 0x54, 0x25, 0xc5, 0xa9, 0xa7, 0x1f, 0x48, 0x36, 0x97, 0xe1, 0x9a, 0x6b, 0xae, 0x20, 0x9d, 0xd1, 0xd0, 0x34, 0x8d, 0xc3, 0x0f, 0x3f, 0x9c, 0xd1, 0xd1, 0x71, 0x2e, 0xfc, 0xe6, 0xb7, 0xf8, 0xe2, 0x71, 0xc7, 0xf1, 0xdb, 0xa7, 0x7f, 0xc7, 0xa1, 0x87, 0x1e, 0x46, 0xa7, 0x63, 0xf2, 0x87, 0x3f, 0xfc, 0x81, 0x4f, 0x7d, 0x6a, 0x7f, 0x44, 0x29, 0x20, 0x9f, 0xcf, 0xe2, 0xf7, 0x8d, 0x91, 0x3f, 0xfe, 0xf1, 0x8f, 0x51, 0x14, 0x85, 0x03, 0x0f, 0x3c, 0x08, 0x4d, 0x8b, 0xee, 0x43, 0xf4, 0x3c, 0x95, 0x44, 0x9b, 0xf4, 0x3c, 0xaf, 0xaf, 0x81, 0xbb, 0x74, 0x3a, 0x36, 0x85, 0x42, 0x9a, 0x30, 0x10, 0x69, 0x36, 0xdb, 0x14, 0x0a, 0x39, 0x1a, 0x8d, 0x56, 0x3f, 0x91, 0x29, 0x88, 0xa2, 0x88, 0xa6, 0x69, 0xb8, 0x9e, 0x95, 0x24, 0xbd, 0xb8, 0x49, 0x8a, 0xd7, 0x4b, 0xdc, 0x38, 0x58, 0x96, 0x85, 0xd3, 0xcf, 0x49, 0xf1, 0xdf, 0x7a, 0xbd, 0x1e, 0xd9, 0x6c, 0x36, 0x59, 0x4b, 0x96, 0x65, 0x61, 0xdb, 0x5e, 0x92, 0x6c, 0x73, 0xb9, 0x1c, 0x9e, 0xe7, 0xb1, 0xb0, 0xd0, 0x22, 0x97, 0x8b, 0x24, 0x81, 0x27, 0x9f, 0x7c, 0x92, 0x7d, 0xf7, 0xdd, 0xaf, 0x4f, 0xd9, 0x77, 0xd1, 0x75, 0x99, 0x40, 0x14, 0xc8, 0xe5, 0x72, 0xc8, 0xb2, 0xcc, 0xcc, 0xf4, 0x2c, 0x85, 0x62, 0x3e, 0x49, 0xf6, 0xb2, 0x2c, 0x73, 0xef, 0x8f, 0x9e, 0x40, 0x51, 0x94, 0x3e, 0x6b, 0x10, 0xf2, 0xcd, 0x0b, 0xcf, 0x23, 0xc4, 0x66, 0xc9, 0xd2, 0x11, 0xaa, 0x0b, 0x33, 0x5c, 0x7a, 0xe9, 0x79, 0x9c, 0x7a, 0xea, 0xa9, 0x54, 0x2a, 0xa3, 0x34, 0x1b, 0x2d, 0xc2, 0x50, 0xc2, 0xb6, 0x02, 0xfe, 0xeb, 0xb4, 0xaf, 0x72, 0xdf, 0x4f, 0x1f, 0xa4, 0x5a, 0x7d, 0x9b, 0x9d, 0xde, 0xb5, 0x8a, 0x2d, 0x5b, 0x36, 0x93, 0xcd, 0xa6, 0x69, 0xb5, 0x1b, 0x9c, 0x7d, 0xf6, 0x57, 0x78, 0xe0, 0x81, 0xfb, 0x99, 0xaf, 0xce, 0x32, 0x50, 0x1c, 0xa4, 0x5a, 0xaf, 0x51, 0x2c, 0x0c, 0x72, 0xf8, 0xe1, 0x47, 0xf2, 0x87, 0x67, 0x5f, 0xa0, 0xd1, 0x68, 0x71, 0xf0, 0xa1, 0x87, 0xf1, 0xd0, 0x43, 0x0f, 0x23, 0x7b, 0x12, 0x57, 0x5d, 0x75, 0x15, 0xeb, 0xd6, 0xad, 0xe3, 0x5d, 0x3b, 0xed, 0xcc, 0xf9, 0xe7, 0x9f, 0xcf, 0xd0, 0x50, 0x85, 0x73, 0xcf, 0x3d, 0x97, 0x7f, 0xfc, 0xe3, 0x15, 0xde, 0xf7, 0xde, 0xff, 0x40, 0x10, 0x04, 0x5e, 0x7e, 0xf9, 0xaf, 0x7c, 0xe0, 0x03, 0x7b, 0x30, 0x50, 0x1c, 0x64, 0x61, 0xa1, 0x8e, 0xe7, 0x06, 0xa4, 0x52, 0x19, 0x4c, 0xab, 0xc7, 0xe6, 0xcd, 0x9b, 0x19, 0x1f, 0x1f, 0x45, 0x91, 0x42, 0x06, 0x4a, 0x59, 0x3a, 0x9d, 0x2a, 0xe7, 0x7e, 0xe3, 0xab, 0xe8, 0x86, 0x48, 0x28, 0x98, 0xd8, 0x76, 0xc4, 0xe6, 0x48, 0x42, 0xe4, 0xe6, 0x17, 0x02, 0x19, 0x5d, 0xcb, 0xa2, 0xc8, 0x06, 0x5d, 0xa7, 0x89, 0x2c, 0xf2, 0x4e, 0x5c, 0x7b, 0xfd, 0x66, 0x9c, 0xe8, 0x59, 0x35, 0xcd, 0x5a, 0xe4, 0xa2, 0xaf, 0x2d, 0x10, 0x20, 0x32, 0x38, 0x3c, 0xcc, 0xc6, 0x4d, 0x5b, 0xd0, 0xf5, 0x14, 0x88, 0x22, 0xaa, 0x1e, 0xd2, 0x6e, 0xb7, 0xd1, 0x34, 0x8d, 0xd9, 0xd9, 0x59, 0x32, 0x99, 0x88, 0x11, 0x6b, 0xb5, 0x5a, 0xec, 0xb8, 0xe3, 0x8e, 0x08, 0x42, 0xc8, 0xba, 0x75, 0xeb, 0xf0, 0xfd, 0x3e, 0x8b, 0x17, 0x8a, 0x80, 0x80, 0x28, 0x46, 0xf1, 0x34, 0x5c, 0x19, 0xa0, 0x5e, 0x8f, 0x1a, 0x01, 0xc3, 0x88, 0xe4, 0xa1, 0x2d, 0x5b, 0x26, 0x11, 0xc5, 0x28, 0x9f, 0xc8, 0x92, 0x46, 0xab, 0xd5, 0x42, 0x92, 0xa4, 0xed, 0xbc, 0x03, 0xa6, 0x69, 0xb2, 0x72, 0xe5, 0x4a, 0xac, 0x4e, 0x87, 0x56, 0xab, 0x85, 0xa6, 0x69, 0x98, 0xa6, 0xd9, 0x8f, 0x9f, 0x36, 0x8e, 0xe3, 0x92, 0xcb, 0x65, 0xb1, 0xac, 0x6e, 0x42, 0x7f, 0xc7, 0x66, 0xd6, 0xb8, 0xb0, 0x8a, 0xa2, 0x48, 0xbd, 0xde, 0x24, 0x97, 0xcb, 0xa1, 0x69, 0x1a, 0xbd, 0x5e, 0x8f, 0x4e, 0xa7, 0x83, 0xef, 0x87, 0x28, 0x8a, 0x94, 0x50, 0xf1, 0x31, 0x70, 0x99, 0x9f, 0x9f, 0x27, 0x9f, 0xcf, 0x27, 0xe8, 0x3f, 0x97, 0xcb, 0x6d, 0x27, 0x11, 0x2c, 0xd6, 0xe6, 0xe3, 0x7c, 0xe8, 0x79, 0xde, 0x76, 0xda, 0xf9, 0x62, 0x39, 0x21, 0x5a, 0xf3, 0xc1, 0xff, 0x25, 0x45, 0x8a, 0xd7, 0x5c, 0xfb, 0x5d, 0xbe, 0x7b, 0xf9, 0x25, 0x14, 0x8a, 0x69, 0x74, 0x43, 0xe0, 0x8a, 0x2b, 0xbf, 0xcd, 0xd0, 0x70, 0x11, 0x3f, 0xe8, 0xe2, 0x07, 0x36, 0x3d, 0xab, 0x4d, 0x2a, 0xad, 0x32, 0x3a, 0x3a, 0x44, 0xa3, 0x51, 0xc5, 0xf5, 0x7a, 0x28, 0xaa, 0x80, 0xe7, 0x5b, 0x14, 0xf2, 0xc3, 0xe4, 0x73, 0x65, 0xb2, 0x99, 0x01, 0xac, 0x9e, 0x4b, 0xb9, 0x34, 0x82, 0x2c, 0xe9, 0x80, 0x88, 0x2c, 0x2b, 0x54, 0xab, 0x0b, 0xe8, 0x7a, 0x8a, 0x42, 0xa1, 0x80, 0x69, 0x9a, 0x3c, 0xfd, 0xf4, 0xd3, 0x84, 0x61, 0x48, 0x2a, 0x95, 0x22, 0x9d, 0x4e, 0x13, 0x84, 0x16, 0x5f, 0x3f, 0xf7, 0x4c, 0x32, 0x59, 0x8d, 0x63, 0x3f, 0x77, 0x24, 0xad, 0x76, 0x1d, 0xdf, 0xf7, 0x50, 0x14, 0x89, 0x54, 0x2a, 0x85, 0x65, 0xb9, 0xb4, 0x5b, 0x3d, 0xea, 0xb5, 0x36, 0x8e, 0xe3, 0x33, 0x3c, 0x34, 0x46, 0x3a, 0x95, 0xa7, 0x90, 0x2f, 0xd1, 0xeb, 0xba, 0x6c, 0xda, 0xb8, 0x8d, 0x83, 0x0e, 0xfc, 0x2c, 0xb5, 0x5a, 0x8b, 0xd7, 0x5e, 0x7b, 0x93, 0xbb, 0xee, 0xfc, 0x09, 0x5d, 0xd3, 0xe1, 0xe8, 0xa3, 0x3e, 0xcf, 0xfb, 0xdf, 0xb7, 0x07, 0xff, 0xf9, 0xe9, 0x23, 0xc8, 0x65, 0x87, 0xa9, 0xce, 0xf5, 0x50, 0x95, 0x2c, 0xba, 0x9a, 0x27, 0x9b, 0x2e, 0x33, 0xb5, 0x6d, 0x81, 0x7f, 0xbe, 0xf2, 0x3a, 0xcf, 0x3c, 0xf3, 0x3b, 0x76, 0xdc, 0xf1, 0x5d, 0x58, 0x56, 0x80, 0xe7, 0xd1, 0x77, 0x42, 0x77, 0xd9, 0x73, 0xcf, 0x0f, 0x23, 0x8a, 0x02, 0xa9, 0x34, 0x28, 0x6a, 0x64, 0x6c, 0x8a, 0xd0, 0x17, 0x94, 0x06, 0x52, 0xfc, 0xf3, 0x95, 0xd7, 0x99, 0x9b, 0x69, 0x32, 0xb9, 0xf5, 0x6f, 0x68, 0x5a, 0x9d, 0x62, 0xd1, 0xc5, 0xb6, 0xa6, 0x30, 0xb4, 0x1e, 0x8e, 0x55, 0xe3, 0x8e, 0xef, 0x5f, 0xc7, 0x45, 0xdf, 0x3c, 0x8b, 0x6e, 0x67, 0x1b, 0xbe, 0xbb, 0x80, 0x6b, 0x35, 0xb1, 0xcd, 0x0e, 0x59, 0x3d, 0x47, 0x4a, 0xce, 0xe0, 0x98, 0x30, 0x98, 0x2f, 0xd2, 0xeb, 0x3a, 0x84, 0x01, 0xd4, 0x16, 0x3a, 0x18, 0x29, 0x85, 0xae, 0xe9, 0x90, 0xcb, 0x66, 0xc9, 0x66, 0xd2, 0xd4, 0x6b, 0x2d, 0x2c, 0xcb, 0x24, 0x95, 0xd2, 0xd8, 0xbc, 0x79, 0x03, 0x33, 0x33, 0xd3, 0xe8, 0x3a, 0x68, 0x9a, 0x44, 0xb5, 0x5a, 0x8d, 0xb4, 0x19, 0x3c, 0xd6, 0xae, 0x5d, 0x87, 0x28, 0xc1, 0x87, 0x3e, 0xf4, 0x41, 0x9e, 0x7a, 0xfa, 0x49, 0x14, 0x55, 0x44, 0x14, 0x43, 0xba, 0xbd, 0x26, 0xdd, 0x5e, 0x1b, 0x45, 0x91, 0xc9, 0x65, 0x8b, 0x08, 0x61, 0x8a, 0x52, 0x71, 0x82, 0x6c, 0x7a, 0x98, 0xd5, 0x3b, 0xed, 0xce, 0x39, 0x67, 0x5f, 0x44, 0x21, 0x37, 0x8c, 0x6b, 0x8b, 0xf8, 0x9e, 0x4c, 0xd7, 0x74, 0x39, 0xe3, 0xf4, 0xaf, 0x51, 0x19, 0x9e, 0x60, 0x66, 0xba, 0xce, 0x03, 0xf7, 0x3f, 0x84, 0x6d, 0x05, 0x7c, 0xeb, 0xa2, 0x4b, 0x51, 0x95, 0x34, 0x87, 0x1d, 0x7a, 0x14, 0x9a, 0x9a, 0x21, 0x9f, 0x2b, 0x33, 0x38, 0x38, 0x44, 0xa3, 0x6e, 0x12, 0x04, 0xe0, 0xba, 0x3e, 0x8a, 0xa2, 0x21, 0x49, 0x0a, 0x86, 0x91, 0x46, 0x92, 0x14, 0x3a, 0x9d, 0x2e, 0xf5, 0x7a, 0x33, 0xa1, 0x97, 0x44, 0x51, 0x4c, 0xf4, 0xa0, 0xb8, 0x58, 0x45, 0x08, 0x3e, 0xc4, 0xb2, 0x1c, 0xc2, 0x50, 0x00, 0x44, 0x6c, 0xdb, 0xc5, 0x71, 0x3c, 0xda, 0x6d, 0x93, 0x5e, 0xcf, 0xa6, 0xdb, 0xb5, 0x68, 0xb7, 0x4d, 0x64, 0x59, 0xc5, 0xf3, 0x02, 0x82, 0x00, 0xb2, 0xd9, 0x3c, 0xf4, 0x75, 0x38, 0x23, 0xad, 0xb0, 0x74, 0xe9, 0x52, 0x3c, 0xcf, 0x23, 0x9f, 0xcf, 0x27, 0xfa, 0x55, 0x5c, 0xe4, 0xc2, 0x50, 0x62, 0x7e, 0x7e, 0x81, 0x85, 0x6a, 0x9d, 0x4e, 0xbb, 0x9b, 0x14, 0x53, 0xc7, 0xb1, 0xf0, 0x03, 0x97, 0x53, 0x4f, 0x3d, 0x19, 0x41, 0x08, 0x09, 0xc3, 0x48, 0x1e, 0x48, 0xa7, 0xd3, 0x74, 0x3a, 0x5d, 0x5a, 0xad, 0x0e, 0xae, 0x1b, 0x39, 0xab, 0xff, 0x77, 0x57, 0xfc, 0x4e, 0xb3, 0x11, 0x1b, 0xfa, 0xa2, 0xf7, 0x2d, 0xd6, 0xbb, 0x62, 0x76, 0x41, 0x56, 0x44, 0x44, 0x29, 0xd2, 0x20, 0x11, 0x02, 0x24, 0x59, 0x40, 0x92, 0x05, 0x42, 0x22, 0x6a, 0xb2, 0xd7, 0x75, 0x91, 0x44, 0x0d, 0x55, 0x49, 0xe1, 0x7b, 0x02, 0x56, 0x2f, 0x42, 0xe5, 0xb2, 0xa4, 0x23, 0x0a, 0x2a, 0x82, 0xe8, 0x23, 0x88, 0x3e, 0xa2, 0x14, 0x20, 0x2b, 0x20, 0x4a, 0x41, 0xf2, 0x5a, 0x37, 0x64, 0xf0, 0x42, 0x34, 0x49, 0x21, 0xf4, 0x5c, 0x34, 0x59, 0x40, 0x11, 0x7d, 0x0a, 0x39, 0x0d, 0xdf, 0xed, 0xe0, 0xbb, 0x3d, 0xcc, 0x66, 0x9d, 0x52, 0x3e, 0x87, 0x4c, 0x88, 0x6d, 0x76, 0x70, 0xcc, 0x1e, 0x29, 0xc5, 0x20, 0x74, 0x40, 0x41, 0xe6, 0xd6, 0xdb, 0x6e, 0xc6, 0x75, 0x7b, 0x9c, 0x71, 0xc6, 0x19, 0x38, 0x8e, 0xc7, 0x17, 0xbf, 0xf8, 0x25, 0x52, 0x46, 0x8e, 0x6f, 0x5f, 0x72, 0x29, 0xba, 0x9e, 0xe2, 0xf1, 0x5f, 0xfd, 0x12, 0xd3, 0x9c, 0xe7, 0x81, 0x07, 0x7f, 0xc0, 0x6f, 0x9f, 0x79, 0x88, 0x56, 0x6b, 0x1b, 0x8f, 0x3e, 0xfa, 0x00, 0x0f, 0xfd, 0xfc, 0x17, 0xdc, 0x79, 0xc7, 0x8f, 0x08, 0x7c, 0xf8, 0xd5, 0x9a, 0x5f, 0xf3, 0x85, 0xe3, 0x8e, 0xa7, 0xd5, 0xec, 0x90, 0x4e, 0x65, 0x58, 0x32, 0xb1, 0x8c, 0x76, 0xab, 0x87, 0xe7, 0x06, 0x88, 0xa2, 0x84, 0xaa, 0x6a, 0xfd, 0x11, 0xb6, 0x68, 0xfc, 0xaf, 0xd3, 0xb1, 0xc9, 0xe7, 0xd3, 0x38, 0x8e, 0x8b, 0xed, 0x74, 0x51, 0xd4, 0xa8, 0x41, 0x57, 0x35, 0x81, 0x7c, 0x21, 0x85, 0x24, 0x43, 0x10, 0xba, 0x20, 0xf8, 0x09, 0x95, 0x99, 0xcf, 0xe7, 0x29, 0x97, 0xcb, 0x09, 0x42, 0x5e, 0xcc, 0x00, 0x65, 0x32, 0x19, 0x0a, 0x85, 0x42, 0xe2, 0x82, 0x6f, 0x36, 0x3b, 0x64, 0x32, 0x99, 0x7e, 0x03, 0x20, 0x21, 0x49, 0x32, 0x8a, 0xa2, 0x46, 0x72, 0x9b, 0x16, 0xb1, 0x2c, 0x96, 0x65, 0x13, 0x86, 0x91, 0xaf, 0xe1, 0x67, 0x0f, 0x3e, 0x84, 0x28, 0x28, 0xec, 0xfd, 0xd1, 0x7d, 0x39, 0xff, 0xbc, 0x8b, 0x78, 0xf0, 0x81, 0x87, 0x78, 0xee, 0xd9, 0x17, 0x48, 0xa7, 0x8a, 0x84, 0x81, 0xc4, 0xf7, 0x6e, 0xf9, 0x3e, 0x3f, 0xbe, 0xf7, 0x7e, 0x46, 0x47, 0x27, 0x68, 0x54, 0x9b, 0xc9, 0xf3, 0xb9, 0xf3, 0x87, 0xf7, 0x70, 0xd7, 0x0f, 0xef, 0xe4, 0xca, 0xcb, 0xaf, 0xe0, 0xb2, 0xef, 0x5c, 0x8a, 0x2c, 0x49, 0x1c, 0x75, 0xc4, 0x91, 0x7c, 0xf6, 0x90, 0x43, 0x39, 0xf7, 0x9c, 0xaf, 0xd3, 0x33, 0xbb, 0x9c, 0x7b, 0xf6, 0x59, 0xec, 0xf6, 0xee, 0xd5, 0x48, 0xa1, 0xc3, 0x40, 0x3e, 0x45, 0xa3, 0x3a, 0xc3, 0xd9, 0x67, 0x9e, 0xc6, 0x75, 0x57, 0x5d, 0xc6, 0xe7, 0x8e, 0x3e, 0x0c, 0x55, 0x4d, 0xb1, 0x6d, 0x72, 0x16, 0x55, 0x31, 0xa8, 0xd7, 0x5b, 0xe8, 0x5a, 0x86, 0xab, 0xae, 0xbc, 0x0e, 0x51, 0x54, 0xfa, 0x28, 0xd8, 0x27, 0x6d, 0x0c, 0x50, 0xc8, 0x0f, 0x62, 0x68, 0x05, 0xb6, 0x6c, 0x9e, 0xe6, 0xc6, 0xeb, 0x6f, 0xe7, 0x86, 0xeb, 0x6f, 0x63, 0xeb, 0xe6, 0x79, 0x6e, 0xb8, 0xf1, 0x6a, 0xce, 0x3b, 0xef, 0x1c, 0x76, 0xdc, 0x71, 0x05, 0xeb, 0x37, 0xbc, 0x45, 0xcf, 0x32, 0xa9, 0x37, 0xe6, 0xf9, 0xd6, 0xb7, 0x2e, 0xc4, 0x30, 0x54, 0xbe, 0x74, 0xe2, 0x51, 0x74, 0xad, 0x1a, 0xbb, 0x7f, 0xe0, 0xdd, 0x20, 0xb8, 0xb4, 0x3b, 0x35, 0x3c, 0xcf, 0xa1, 0x50, 0xcc, 0x21, 0x08, 0x21, 0x86, 0xa1, 0xb0, 0xdb, 0x6e, 0xef, 0x46, 0x10, 0x7d, 0x4e, 0x39, 0xe5, 0x64, 0xda, 0xed, 0x26, 0xb6, 0x6d, 0x47, 0x05, 0x42, 0x54, 0xe8, 0x75, 0x1d, 0x02, 0x5f, 0x40, 0x55, 0x35, 0x52, 0xa9, 0x68, 0xd2, 0x43, 0x55, 0x65, 0x34, 0x4d, 0xc6, 0x71, 0xbb, 0xa4, 0x45, 0x09, 0x35, 0x14, 0x11, 0xbc, 0x00, 0x49, 0x00, 0x49, 0x91, 0xf1, 0x04, 0x1f, 0x4f, 0x12, 0x70, 0x65, 0x81, 0x6c, 0xa9, 0xc8, 0x96, 0xd9, 0x49, 0x8a, 0x83, 0x65, 0x32, 0x99, 0x0c, 0x66, 0xbb, 0xc3, 0x40, 0x26, 0x83, 0xe8, 0x79, 0xd8, 0xcd, 0x26, 0xbe, 0xe5, 0x23, 0x87, 0x12, 0x69, 0x35, 0x45, 0xe8, 0x78, 0xe0, 0xb9, 0xa4, 0x54, 0x89, 0xac, 0xa1, 0x50, 0x9b, 0x9b, 0xc2, 0x6c, 0xb6, 0xa8, 0x94, 0x07, 0x19, 0x2c, 0x16, 0x50, 0x05, 0x09, 0x4d, 0x12, 0x11, 0x7c, 0x1f, 0xdb, 0xec, 0x32, 0x3a, 0x54, 0xc6, 0x6c, 0xcd, 0x32, 0x38, 0x90, 0x26, 0xa5, 0x81, 0xdb, 0x6b, 0xe3, 0x74, 0xdb, 0xa4, 0x35, 0x19, 0xaf, 0x07, 0xa2, 0x1f, 0x62, 0xc8, 0x3a, 0x57, 0x5e, 0xf6, 0x5d, 0xa4, 0x10, 0x3a, 0x8d, 0x26, 0xc5, 0x6c, 0x16, 0x55, 0x14, 0xd9, 0x71, 0xc5, 0x32, 0xcc, 0x66, 0x1d, 0xd7, 0xb5, 0xd1, 0x75, 0x15, 0xcf, 0x8b, 0x8a, 0x63, 0xb7, 0xdb, 0x41, 0x51, 0x24, 0x32, 0x19, 0x03, 0xcf, 0x73, 0x12, 0x70, 0x12, 0xaf, 0xb7, 0x78, 0x3a, 0x45, 0x14, 0xc5, 0x04, 0x90, 0xc4, 0xa8, 0x3a, 0x76, 0x9e, 0x87, 0x21, 0xdb, 0x51, 0xe0, 0xaa, 0xaa, 0xf6, 0xe5, 0x99, 0x54, 0xc2, 0x56, 0xc5, 0x9e, 0x91, 0x18, 0x9c, 0xb8, 0xae, 0x9b, 0x4c, 0xe0, 0xc4, 0x12, 0x42, 0x5c, 0xa8, 0x6d, 0xdb, 0xa6, 0xdd, 0x6e, 0x27, 0x74, 0x7e, 0x4c, 0xc3, 0x2b, 0x8a, 0x92, 0x18, 0xec, 0x0c, 0xc3, 0x78, 0x87, 0x72, 0x5f, 0xb1, 0xd3, 0x2e, 0xe1, 0x11, 0x87, 0x1f, 0xc6, 0x5e, 0x7b, 0xee, 0xc1, 0x57, 0xce, 0x3c, 0x83, 0x89, 0xf1, 0x11, 0x36, 0x6c, 0xfc, 0x1f, 0x06, 0xf2, 0x05, 0xda, 0x9d, 0x5a, 0x92, 0xc8, 0x1c, 0xdf, 0x23, 0x93, 0xc9, 0xa0, 0x6a, 0x1a, 0x6f, 0xbd, 0x35, 0xc9, 0x7b, 0xdf, 0xbb, 0x03, 0xb3, 0xf3, 0xf3, 0xa4, 0x53, 0x59, 0x34, 0xcd, 0x48, 0x68, 0x45, 0x59, 0x89, 0x02, 0x47, 0x51, 0x25, 0x64, 0x49, 0xe5, 0xd2, 0xcb, 0xbf, 0x4b, 0xb3, 0xd1, 0x25, 0x97, 0x2d, 0x71, 0xc9, 0x25, 0x57, 0xd3, 0xa8, 0xd9, 0x5c, 0x7a, 0xd9, 0xf5, 0x9c, 0x7f, 0xde, 0xb7, 0xd0, 0x25, 0x9b, 0xab, 0xaf, 0xb9, 0x9c, 0x73, 0xbf, 0x71, 0x16, 0xd7, 0x5e, 0x7f, 0x29, 0xff, 0x7e, 0xed, 0x1f, 0x3c, 0xf4, 0xf0, 0x03, 0x34, 0x9b, 0x75, 0x74, 0x5d, 0xa7, 0x5e, 0xaf, 0x33, 0x38, 0x38, 0x48, 0xb1, 0x58, 0x62, 0x61, 0xa1, 0xc6, 0xd8, 0xd8, 0x28, 0xdd, 0x6e, 0x87, 0xb9, 0xf9, 0x29, 0x72, 0xb9, 0x2c, 0xe9, 0xe2, 0x28, 0x2f, 0xff, 0x7f, 0x7f, 0x23, 0x9b, 0xd1, 0x19, 0x1f, 0x1f, 0xa5, 0xbe, 0x50, 0x23, 0x9b, 0xcb, 0x70, 0xd6, 0x59, 0x67, 0x71, 0xf3, 0x0d, 0x37, 0x72, 0xc2, 0xf1, 0x27, 0x71, 0xc7, 0x0f, 0xee, 0x64, 0x74, 0x74, 0x94, 0x99, 0xa9, 0x59, 0x34, 0x4d, 0xc7, 0xe9, 0x39, 0x94, 0xcb, 0x43, 0x74, 0xbb, 0x5d, 0x1a, 0x66, 0x9d, 0x5e, 0xaf, 0x47, 0x2a, 0x65, 0xd0, 0xe9, 0xb4, 0x10, 0xc4, 0x28, 0xb9, 0xa7, 0x52, 0x06, 0x0b, 0x0b, 0x26, 0xe5, 0x72, 0x86, 0x54, 0x2a, 0xcd, 0xdc, 0xdc, 0x5c, 0xd2, 0xb9, 0x8b, 0x22, 0x68, 0xaa, 0x11, 0x69, 0x44, 0x9a, 0xcc, 0x3d, 0xf7, 0xdc, 0xcd, 0xa9, 0xa7, 0x7e, 0x19, 0xcb, 0xee, 0xa2, 0xc8, 0x1a, 0xed, 0x76, 0xa4, 0x65, 0x7a, 0x6e, 0xc0, 0xdd, 0x77, 0xfd, 0x04, 0x80, 0x63, 0x8e, 0xf9, 0x1c, 0x41, 0x10, 0x19, 0x5d, 0x54, 0x55, 0xc4, 0x76, 0xba, 0x64, 0x32, 0x29, 0xa6, 0xa6, 0xa3, 0x71, 0x89, 0x9e, 0xd5, 0xa5, 0x54, 0x2a, 0xb1, 0x61, 0xc3, 0x46, 0xfc, 0xbe, 0x86, 0xbf, 0xeb, 0x7b, 0x77, 0xc4, 0x71, 0x7b, 0xcc, 0xcf, 0xcf, 0x53, 0xab, 0x59, 0x64, 0xb3, 0x11, 0xcd, 0x53, 0x2c, 0x94, 0x68, 0x34, 0x1a, 0xb4, 0xdb, 0x3d, 0x34, 0x3d, 0x32, 0x5d, 0x15, 0x0a, 0x69, 0x16, 0xaa, 0x26, 0x81, 0x07, 0x95, 0xe1, 0x15, 0xfc, 0xf8, 0xde, 0x9f, 0x31, 0x37, 0xbb, 0x40, 0x4a, 0x1f, 0x8c, 0x02, 0xc9, 0xec, 0xf1, 0xe7, 0x3f, 0xbf, 0x44, 0xa5, 0x32, 0xc4, 0xe8, 0xd8, 0x20, 0x9b, 0x36, 0xaf, 0x63, 0xc7, 0x9d, 0x56, 0x90, 0x2d, 0x76, 0x39, 0xed, 0xb4, 0xd3, 0x69, 0x34, 0x1a, 0xec, 0xbe, 0xfb, 0x07, 0x99, 0x9b, 0x9d, 0x47, 0x14, 0x65, 0x7a, 0xbd, 0x88, 0xe2, 0xbc, 0xf9, 0xa6, 0xef, 0x71, 0xd5, 0x55, 0x57, 0xf1, 0xd6, 0x5b, 0x6f, 0xb1, 0x50, 0xad, 0x32, 0x38, 0x34, 0xc4, 0xfc, 0xdc, 0x1c, 0x8a, 0xaa, 0x32, 0x30, 0x30, 0x00, 0xbc, 0xe3, 0x08, 0x0d, 0xc3, 0x30, 0x41, 0xa0, 0xb1, 0x7e, 0xd4, 0xeb, 0x99, 0xdb, 0xe9, 0xe2, 0xf1, 0x22, 0x8c, 0x51, 0x67, 0xb3, 0xd9, 0x8e, 0xf4, 0xd9, 0xbe, 0xd1, 0x23, 0xa6, 0x9b, 0xfe, 0xf4, 0xa7, 0x3f, 0xb1, 0xf7, 0xde, 0x7b, 0x27, 0xa8, 0x3d, 0x4e, 0xde, 0x31, 0x3d, 0x1d, 0xff, 0x4d, 0xcf, 0x1a, 0x78, 0x76, 0x84, 0x12, 0xa7, 0x26, 0xab, 0xec, 0xf6, 0xde, 0x77, 0xb1, 0xfe, 0xed, 0x75, 0x8c, 0x0c, 0x57, 0x98, 0x9d, 0x9d, 0x65, 0xc5, 0xb2, 0x65, 0x74, 0xbb, 0x5d, 0xac, 0x3e, 0x7b, 0xe0, 0x05, 0x7e, 0xa2, 0x67, 0x6b, 0x29, 0x03, 0xc7, 0xf5, 0x91, 0x65, 0x31, 0xd1, 0xbf, 0x54, 0x2d, 0x76, 0xe3, 0x47, 0xb3, 0xbb, 0x8d, 0x46, 0x27, 0x71, 0x66, 0x47, 0x26, 0x94, 0xd8, 0x6d, 0xce, 0x76, 0x7a, 0xf6, 0xff, 0xeb, 0x27, 0x9f, 0xcf, 0x63, 0x9a, 0x26, 0xae, 0xeb, 0xbe, 0x83, 0xca, 0x83, 0x20, 0x61, 0x33, 0x7c, 0x4f, 0xd8, 0x8e, 0x8d, 0x48, 0x68, 0xb3, 0x7e, 0x30, 0xbb, 0x5e, 0x6f, 0x3b, 0x17, 0x6c, 0x4c, 0xf5, 0xc5, 0x09, 0x46, 0x08, 0xa2, 0xf9, 0xf0, 0x90, 0xe8, 0x3a, 0x14, 0x45, 0x02, 0x21, 0xc4, 0x71, 0x22, 0xd4, 0x6a, 0x39, 0x02, 0x81, 0x2f, 0x90, 0xcd, 0x94, 0x50, 0x95, 0x2c, 0x0f, 0x3f, 0xf4, 0x38, 0x6b, 0x5f, 0xdb, 0xc8, 0x4e, 0x3b, 0xbe, 0x9b, 0x7a, 0xbd, 0x49, 0xb1, 0xe2, 0xf0, 0xfc, 0xf3, 0xcf, 0xf3, 0xfe, 0xf7, 0xef, 0x86, 0xe7, 0x79, 0x1c, 0x7c, 0xf0, 0xc1, 0x94, 0x4a, 0x25, 0xee, 0xbb, 0xef, 0x81, 0xfe, 0xf1, 0x4d, 0x8e, 0x3e, 0xe6, 0x48, 0x64, 0x59, 0xa2, 0xdb, 0xed, 0xf2, 0x8b, 0x5f, 0x3c, 0xc4, 0xd9, 0x5f, 0x3d, 0x97, 0x7b, 0xef, 0xb9, 0x8f, 0x5a, 0xad, 0xc9, 0x11, 0x47, 0x7d, 0x06, 0x80, 0xc1, 0xc1, 0x22, 0x6b, 0xd6, 0xac, 0xe1, 0xd9, 0x67, 0x9f, 0xe5, 0x3d, 0xef, 0x79, 0x0f, 0x27, 0x9c, 0x70, 0x02, 0xf7, 0xdc, 0x73, 0x0f, 0x47, 0x1c, 0x71, 0x24, 0xe3, 0xe3, 0x63, 0x6c, 0xde, 0xbc, 0x8d, 0x72, 0xb9, 0xd0, 0x77, 0xa2, 0x47, 0xba, 0xa4, 0x61, 0x18, 0x08, 0x02, 0x3c, 0xf5, 0xd4, 0x53, 0xec, 0xba, 0xeb, 0xee, 0x48, 0x12, 0x8c, 0x8f, 0x8f, 0x32, 0x35, 0x35, 0xd5, 0xd7, 0xb9, 0xcd, 0xc4, 0xa3, 0x10, 0x37, 0x85, 0xa6, 0x69, 0x26, 0x14, 0xa8, 0xe7, 0x79, 0xb4, 0xdb, 0x16, 0xba, 0x1e, 0x25, 0xd9, 0x68, 0x9d, 0x9b, 0xb4, 0x5a, 0x5d, 0x04, 0x01, 0x0c, 0x43, 0xc5, 0x75, 0x3d, 0x5c, 0x37, 0x20, 0x9f, 0xcf, 0x24, 0x9f, 0xcd, 0xe7, 0xf3, 0xcc, 0xce, 0x2e, 0xa0, 0xaa, 0x22, 0x9e, 0x1b, 0xf0, 0xd2, 0x4b, 0x2f, 0xf1, 0x1f, 0xff, 0xb1, 0x27, 0x2f, 0xbd, 0xf4, 0x12, 0x33, 0x33, 0x73, 0x28, 0x8a, 0xc2, 0xb1, 0xc7, 0x1e, 0x4b, 0xd7, 0xb4, 0x78, 0xf2, 0x99, 0xa7, 0x12, 0x64, 0x54, 0x28, 0x14, 0xf0, 0xbc, 0x80, 0xfd, 0xf7, 0xdf, 0x1f, 0x45, 0x51, 0xf8, 0xc5, 0x2f, 0x7e, 0x41, 0xab, 0x1e, 0x30, 0x3a, 0x3a, 0x4a, 0xb3, 0xd9, 0x04, 0x21, 0xe0, 0xaa, 0xab, 0x2e, 0x47, 0x37, 0x64, 0x6a, 0xf5, 0x59, 0x6e, 0xb8, 0xf1, 0x1a, 0xce, 0x3c, 0xfd, 0xf3, 0xa8, 0xaa, 0x4a, 0xab, 0xd5, 0xa2, 0x56, 0xeb, 0x30, 0x3e, 0x36, 0x8a, 0xef, 0x45, 0xc0, 0xe0, 0x2b, 0x67, 0x9d, 0x83, 0x20, 0xbb, 0x5c, 0x7d, 0xf5, 0xd5, 0x14, 0x0a, 0x39, 0xda, 0xed, 0x36, 0xf5, 0x46, 0x8d, 0x4a, 0x25, 0x9a, 0x1c, 0xc8, 0x64, 0x52, 0x2c, 0x99, 0x58, 0x49, 0xad, 0xd9, 0x40, 0x55, 0x75, 0x3e, 0x73, 0xd0, 0xa1, 0x04, 0xa1, 0xc0, 0x0b, 0x2f, 0xbc, 0xc8, 0xd6, 0xa9, 0x69, 0xcc, 0x4e, 0x8f, 0xe6, 0xfc, 0x64, 0x82, 0x3e, 0x1b, 0x8d, 0x68, 0x32, 0x61, 0x6c, 0x6c, 0x02, 0xc7, 0x71, 0xb8, 0xe6, 0x9a, 0x6b, 0x38, 0xf2, 0x88, 0xa3, 0xf9, 0xed, 0x6f, 0x7f, 0xcb, 0x0b, 0x2f, 0xfc, 0x89, 0x9d, 0x57, 0xef, 0x4a, 0x69, 0xa0, 0x42, 0xbb, 0xd5, 0xa3, 0xd5, 0x32, 0x31, 0xf4, 0x34, 0x6a, 0x4a, 0x66, 0xeb, 0xd6, 0xad, 0x8c, 0x8f, 0x8f, 0x73, 0xf4, 0x11, 0x47, 0x10, 0xe2, 0xf2, 0xf8, 0xaf, 0x7e, 0xc9, 0xd9, 0x5f, 0x3b, 0x03, 0xdb, 0x31, 0xd9, 0xb8, 0x79, 0x1d, 0xe9, 0xb4, 0x4a, 0xb3, 0xe9, 0x30, 0x58, 0x4a, 0x33, 0x31, 0xb1, 0x94, 0x6e, 0xcb, 0xc6, 0xf7, 0x04, 0x24, 0x49, 0x25, 0xd7, 0x97, 0x8c, 0x5a, 0x9d, 0x26, 0x82, 0x2c, 0xa1, 0xa7, 0x34, 0xbc, 0x30, 0x62, 0xdf, 0x6a, 0x8d, 0x1a, 0x2b, 0x56, 0x2e, 0xa1, 0xdb, 0xed, 0xe2, 0xb9, 0x01, 0xb2, 0xa8, 0xe0, 0x79, 0x3e, 0xed, 0x46, 0x9b, 0x89, 0x89, 0x09, 0xde, 0x7a, 0x6b, 0x1d, 0x43, 0x63, 0x83, 0xc8, 0xb2, 0x4c, 0xad, 0xb6, 0x80, 0xa2, 0x48, 0x08, 0x62, 0x48, 0xa1, 0x90, 0xa3, 0xd7, 0x8b, 0x50, 0x6c, 0x2a, 0x95, 0xe5, 0xf5, 0xd7, 0x37, 0x90, 0x4a, 0x09, 0x64, 0x33, 0x79, 0x1a, 0x8d, 0x46, 0x9f, 0xf9, 0x8b, 0x58, 0x1b, 0x23, 0x1d, 0x92, 0xc9, 0x64, 0xa3, 0x31, 0x48, 0x2b, 0xca, 0xdb, 0xbd, 0x9e, 0x8d, 0xd9, 0x09, 0xc8, 0x66, 0x55, 0x24, 0x51, 0x27, 0xc4, 0x4f, 0x0a, 0x65, 0x18, 0x06, 0x7d, 0x03, 0xdc, 0x64, 0x12, 0x9b, 0x71, 0x3c, 0xc5, 0x2c, 0xd9, 0xe2, 0x18, 0x8b, 0x27, 0x71, 0xe2, 0xdc, 0xb5, 0x78, 0x8f, 0x8c, 0x48, 0xb6, 0x11, 0xb7, 0x93, 0xc1, 0x6c, 0xdb, 0x4e, 0x26, 0x58, 0x62, 0x66, 0x35, 0xce, 0x87, 0x71, 0xee, 0x8a, 0x47, 0x6b, 0xe3, 0x3c, 0x14, 0x1f, 0x3f, 0x36, 0x0b, 0x6f, 0x07, 0x08, 0xfa, 0x0c, 0x66, 0x3c, 0xed, 0xf1, 0x4e, 0x1e, 0x0a, 0xfa, 0x4c, 0xa3, 0xb6, 0xdd, 0xd8, 0x5c, 0x18, 0x86, 0x88, 0xdd, 0xae, 0xc9, 0x9d, 0x77, 0xde, 0xc1, 0x57, 0xbe, 0xf2, 0x15, 0x1c, 0xd7, 0x62, 0xcb, 0x96, 0x2d, 0xc9, 0x7c, 0x6e, 0xbc, 0x21, 0x44, 0x2a, 0x95, 0x62, 0x60, 0x60, 0x00, 0xcb, 0xb2, 0xe8, 0xf5, 0x7a, 0xbc, 0xf7, 0xbd, 0x3b, 0x24, 0xa3, 0x2d, 0xb1, 0x26, 0x20, 0x8a, 0x32, 0x86, 0x91, 0xc6, 0xd0, 0xb3, 0x88, 0x82, 0x86, 0x63, 0x87, 0x9c, 0x73, 0xce, 0x37, 0x98, 0x9f, 0x6b, 0xf0, 0x9d, 0xef, 0x5c, 0xc6, 0x49, 0x27, 0x9d, 0xc2, 0x59, 0x67, 0x7d, 0x95, 0x5b, 0x6e, 0xb9, 0x95, 0x42, 0xa1, 0xc0, 0x65, 0x97, 0x5d, 0x86, 0x6e, 0xa8, 0x5c, 0x76, 0xd9, 0x77, 0xf8, 0xc2, 0x17, 0x3f, 0xcf, 0xb7, 0xbf, 0xfd, 0x6d, 0x9e, 0x78, 0xe2, 0x89, 0xfe, 0xcc, 0x5e, 0x94, 0x04, 0x97, 0x2d, 0x5b, 0x46, 0xb5, 0x5a, 0xc3, 0xf7, 0xa3, 0xa0, 0x6e, 0x34, 0x9a, 0x7d, 0x7a, 0x22, 0x6a, 0x20, 0x6a, 0x0b, 0x2d, 0x76, 0x58, 0xb5, 0x8a, 0x76, 0xdd, 0xe2, 0x8d, 0xd7, 0x37, 0x60, 0x9a, 0x3d, 0x52, 0x46, 0x96, 0xab, 0xae, 0xbc, 0x96, 0xb1, 0xb1, 0x71, 0x1e, 0x7e, 0xe8, 0x11, 0xf2, 0xf9, 0x22, 0xed, 0xb6, 0x49, 0x2a, 0x95, 0xc6, 0xf7, 0x43, 0x56, 0xaf, 0xde, 0x85, 0x76, 0xcb, 0x44, 0x12, 0x15, 0x72, 0xb9, 0x1c, 0xa5, 0x52, 0x89, 0xe5, 0xcb, 0x97, 0xb3, 0x6a, 0xd5, 0x2a, 0x2c, 0xcb, 0x65, 0x6c, 0x6c, 0x0c, 0xdf, 0x0f, 0x50, 0x14, 0x90, 0x65, 0x25, 0xa1, 0x4e, 0x3a, 0x9d, 0x2e, 0xb6, 0x0d, 0x8e, 0x4d, 0x7f, 0x04, 0xc6, 0xa6, 0xd3, 0x31, 0x39, 0xf8, 0xe0, 0x63, 0xe9, 0xf6, 0xda, 0x68, 0x9a, 0x44, 0xa1, 0x98, 0xa2, 0x50, 0x34, 0x98, 0x9d, 0x6d, 0x91, 0xcb, 0xa7, 0xc8, 0x66, 0xb3, 0x78, 0x9e, 0xc7, 0xe0, 0x60, 0xb4, 0x70, 0xab, 0xd5, 0x2a, 0x8d, 0x46, 0x83, 0x5c, 0x2e, 0x47, 0x3e, 0x9f, 0xa7, 0x52, 0xa9, 0x90, 0x4e, 0xa7, 0xa9, 0xd7, 0x5b, 0x34, 0x1a, 0x0d, 0x7c, 0x0f, 0x46, 0x46, 0x4b, 0x7c, 0xfc, 0x13, 0x1f, 0xe6, 0xe2, 0x8b, 0x2f, 0x66, 0x61, 0xa1, 0xc6, 0x40, 0x71, 0x90, 0xa1, 0xc1, 0x3c, 0x66, 0x27, 0x42, 0x6f, 0x8a, 0xa2, 0xd1, 0x68, 0xf4, 0x48, 0xa7, 0xd3, 0x78, 0x5e, 0xb4, 0x41, 0x46, 0x6d, 0xc1, 0x44, 0x55, 0x65, 0xc6, 0xc6, 0xc7, 0xa9, 0xd5, 0xe7, 0xa8, 0xd7, 0xe7, 0x19, 0x9f, 0x18, 0x21, 0x9b, 0x53, 0x99, 0x9b, 0xdf, 0xc6, 0xdf, 0xff, 0xf1, 0x67, 0xf2, 0x85, 0x0c, 0x3b, 0xef, 0xb2, 0x9a, 0x7f, 0xfd, 0xeb, 0x5f, 0xec, 0xb6, 0xdb, 0xee, 0xfc, 0xf3, 0x95, 0xd7, 0x59, 0xb3, 0xe6, 0x71, 0x8a, 0xc5, 0x12, 0xa5, 0xd2, 0x20, 0x03, 0xc5, 0x12, 0x92, 0xa4, 0x30, 0x37, 0x57, 0xa5, 0x6b, 0x5a, 0x6c, 0xdd, 0xb2, 0x0d, 0x55, 0xd5, 0x99, 0x99, 0x99, 0xe3, 0xd6, 0x5b, 0x6f, 0xe7, 0xc6, 0x9b, 0x6e, 0xe1, 0x6b, 0x5f, 0xfb, 0x3a, 0xb9, 0x7c, 0x91, 0x62, 0xb1, 0x14, 0xf9, 0x1a, 0x84, 0xc8, 0x54, 0xd3, 0x6e, 0xb7, 0x51, 0x14, 0x85, 0xb1, 0xb1, 0xb1, 0xed, 0xe6, 0x2c, 0x63, 0xdd, 0x68, 0xf1, 0xe6, 0x31, 0x71, 0x77, 0xa9, 0xeb, 0x7a, 0x42, 0xbd, 0xa7, 0xd3, 0x69, 0xba, 0xdd, 0x6e, 0xdf, 0x75, 0xeb, 0x71, 0xd0, 0x41, 0x07, 0x61, 0x9a, 0x0e, 0xa6, 0x69, 0x12, 0x86, 0x61, 0x62, 0x52, 0xb2, 0x6d, 0x9b, 0x56, 0xab, 0x93, 0x68, 0xd5, 0x31, 0x15, 0x65, 0x9a, 0x26, 0xab, 0x57, 0xaf, 0x48, 0xbe, 0xa3, 0xd1, 0x68, 0xb0, 0x7a, 0xf5, 0x6a, 0x1c, 0xc7, 0x49, 0xcc, 0x2c, 0x52, 0x62, 0xde, 0x79, 0x47, 0xeb, 0x8f, 0x36, 0x8e, 0x89, 0xe8, 0xc7, 0x42, 0xa1, 0xd0, 0x77, 0x3a, 0xbb, 0xb4, 0x5a, 0x3d, 0x6a, 0xb5, 0x0e, 0xb2, 0xcc, 0x22, 0xfd, 0x2c, 0x9e, 0x7d, 0x97, 0x12, 0x83, 0x5e, 0x5c, 0xd4, 0x63, 0x8d, 0x3d, 0xfe, 0x8e, 0xf8, 0xfa, 0x22, 0xe3, 0x59, 0x64, 0x6e, 0x94, 0x44, 0x05, 0x55, 0xd1, 0x23, 0xda, 0x30, 0x14, 0x11, 0x05, 0x39, 0xa1, 0xa2, 0x17, 0x8f, 0xf6, 0xc5, 0x5d, 0x7b, 0x6c, 0xc6, 0x59, 0xac, 0x9f, 0x2d, 0x9e, 0x71, 0x8f, 0x7e, 0xdf, 0x31, 0x0d, 0xc6, 0xc7, 0xf1, 0xbd, 0x28, 0x16, 0x55, 0x55, 0x27, 0x93, 0xc9, 0x31, 0x38, 0x38, 0x48, 0xbb, 0xdd, 0x66, 0x6e, 0x6e, 0x8e, 0x99, 0x99, 0x19, 0x96, 0x2d, 0x1f, 0x67, 0x66, 0x76, 0x1b, 0xbe, 0x6f, 0xb3, 0x79, 0xd3, 0x0c, 0x3b, 0xbf, 0x6b, 0x77, 0x1a, 0x35, 0x97, 0xaf, 0x9c, 0xf9, 0x4d, 0x74, 0xb5, 0xc4, 0xfd, 0x3f, 0x7d, 0x0c, 0xc7, 0x92, 0x10, 0xd0, 0xe9, 0x76, 0x1d, 0x74, 0x2d, 0x87, 0xe7, 0x0a, 0xe8, 0x5a, 0x96, 0x6c, 0xa6, 0xc4, 0xed, 0xb7, 0xdd, 0xc9, 0x27, 0xf6, 0xfd, 0x14, 0xa3, 0x23, 0x4b, 0xf8, 0xdd, 0xef, 0x7e, 0xc3, 0x0e, 0x3b, 0x2c, 0x63, 0x61, 0xa1, 0x4e, 0xb5, 0x5a, 0x65, 0xbf, 0xfd, 0xf6, 0xe3, 0xd8, 0x63, 0x8f, 0xc5, 0x30, 0x0c, 0xd2, 0xe9, 0x34, 0x7f, 0xfc, 0xe3, 0xf3, 0x5c, 0x71, 0xc5, 0xe5, 0x8c, 0x8c, 0x94, 0xe9, 0x76, 0x4d, 0x0c, 0x43, 0x27, 0x95, 0x32, 0x70, 0x5d, 0x87, 0x6d, 0xdb, 0x66, 0x99, 0x9c, 0x9c, 0x65, 0xaf, 0xbd, 0xf6, 0x62, 0x74, 0x74, 0x10, 0xc3, 0xd0, 0xb0, 0x2c, 0x8b, 0x81, 0x81, 0x81, 0xbe, 0x09, 0x4a, 0xef, 0x8f, 0xa4, 0xa5, 0xa8, 0xd7, 0x9b, 0xb8, 0xae, 0x4b, 0x2e, 0x97, 0xa3, 0xd5, 0xea, 0xf5, 0x99, 0x14, 0x8b, 0x5c, 0xce, 0xe8, 0x33, 0x2e, 0x4e, 0xf2, 0xac, 0x97, 0x2c, 0x19, 0xa5, 0x52, 0x19, 0x4c, 0x36, 0xf4, 0x50, 0xd5, 0xa8, 0x31, 0x8b, 0x37, 0x84, 0x6a, 0xb5, 0x5a, 0xac, 0x5c, 0xb9, 0xb4, 0x8f, 0x94, 0xd2, 0xfc, 0xc7, 0x7f, 0xec, 0x49, 0x3e, 0x5f, 0x64, 0x9f, 0x7d, 0x3e, 0x4e, 0xb1, 0x50, 0xe2, 0x9f, 0xaf, 0xfc, 0x0b, 0xdb, 0x72, 0x19, 0x1c, 0x1c, 0xe2, 0x88, 0xc3, 0x8f, 0x46, 0x40, 0xe6, 0x90, 0x03, 0x0f, 0xe1, 0xe3, 0x1f, 0xdb, 0x9f, 0x66, 0xa3, 0xc3, 0x73, 0xcf, 0xfe, 0x89, 0x5c, 0xb6, 0x84, 0x2c, 0x19, 0x0c, 0x0e, 0x0e, 0x26, 0xeb, 0xd6, 0x73, 0x03, 0xae, 0xb8, 0xe2, 0x4a, 0xce, 0x3e, 0xfb, 0x1c, 0x6e, 0xb8, 0xfe, 0x66, 0x3a, 0x6d, 0x0b, 0x51, 0x50, 0x59, 0xbb, 0x76, 0x8a, 0x4b, 0x2e, 0xf9, 0x0e, 0x3b, 0xee, 0xb8, 0x22, 0x6a, 0x38, 0xda, 0x0d, 0xce, 0x3c, 0xf3, 0x0c, 0x6e, 0xbe, 0xe5, 0x7a, 0xae, 0xbf, 0xfe, 0x5a, 0x0c, 0x23, 0x9a, 0x05, 0x57, 0x14, 0x85, 0x65, 0x4b, 0x97, 0x23, 0x20, 0x73, 0xc9, 0xc5, 0x97, 0xf2, 0x85, 0xe3, 0x4e, 0xa4, 0xb6, 0xd0, 0x26, 0x97, 0x2d, 0x11, 0x06, 0x32, 0x86, 0x9e, 0xa5, 0x52, 0x19, 0x27, 0x08, 0xc0, 0xf7, 0x42, 0x4a, 0xa5, 0x32, 0xcf, 0x3c, 0xf3, 0x7b, 0xcc, 0x4e, 0x24, 0x49, 0xc6, 0xeb, 0x66, 0xdd, 0xba, 0xb7, 0x38, 0xfc, 0xf0, 0xcf, 0x72, 0xea, 0xa9, 0xa7, 0xa0, 0xa8, 0x02, 0x07, 0x1f, 0x72, 0x10, 0x99, 0x4c, 0x1a, 0xcf, 0x73, 0x22, 0x5f, 0x93, 0x6b, 0x51, 0x2c, 0xe6, 0xc9, 0x17, 0xb2, 0xd4, 0xeb, 0x55, 0xde, 0xff, 0xfe, 0xf7, 0xd2, 0xeb, 0x75, 0xf9, 0xd9, 0xcf, 0x1f, 0xe8, 0x6f, 0xb0, 0x12, 0x8d, 0x62, 0x16, 0xf2, 0x65, 0x0c, 0x5d, 0xa7, 0x6b, 0x3a, 0x8c, 0x8d, 0x0d, 0x60, 0x9a, 0x26, 0xeb, 0xd7, 0xaf, 0x47, 0x55, 0x65, 0xfc, 0xc0, 0x45, 0xd3, 0x54, 0x6c, 0xa7, 0x47, 0xa1, 0x98, 0x63, 0x60, 0x60, 0x00, 0x45, 0x95, 0xfa, 0x6b, 0xd0, 0x01, 0xa2, 0x02, 0x59, 0xab, 0xd5, 0xfa, 0xf7, 0x72, 0x90, 0x20, 0x08, 0x98, 0x9e, 0x9e, 0x66, 0xe7, 0x9d, 0x77, 0x66, 0xeb, 0xd6, 0x6d, 0xc9, 0x18, 0x67, 0xb5, 0x5a, 0xc5, 0x75, 0x5d, 0x46, 0x47, 0x47, 0x19, 0x1a, 0x1a, 0xea, 0x6f, 0xfe, 0x13, 0xd1, 0xf0, 0xae, 0x6b, 0x93, 0x4e, 0x47, 0xcd, 0x73, 0x10, 0x7a, 0x8c, 0x8d, 0x8d, 0x51, 0x2a, 0x95, 0x90, 0x24, 0x81, 0x91, 0x91, 0x11, 0x4a, 0xa5, 0x01, 0xf2, 0xf9, 0x3c, 0xb9, 0x5c, 0x8e, 0x6c, 0x36, 0x42, 0xaa, 0x86, 0x61, 0xa0, 0xaa, 0x24, 0x79, 0x23, 0x9d, 0x4e, 0x63, 0x9a, 0xd1, 0xc8, 0x62, 0xa9, 0x54, 0x62, 0x6a, 0x6a, 0x6a, 0x11, 0x9a, 0x0e, 0x93, 0x82, 0x1a, 0xc7, 0xee, 0x62, 0xd3, 0x69, 0x9c, 0x27, 0x16, 0xcf, 0x9b, 0xc7, 0xef, 0x8f, 0xeb, 0x42, 0x1c, 0xb7, 0x31, 0x6d, 0x1e, 0x9b, 0x2f, 0xe3, 0xe9, 0x95, 0x18, 0x71, 0xc7, 0xcd, 0xc0, 0x62, 0x73, 0xeb, 0xe2, 0xb8, 0x5e, 0x0c, 0x5a, 0x16, 0x17, 0xff, 0xf8, 0x67, 0xf1, 0x58, 0x5e, 0x1c, 0xef, 0x71, 0xcc, 0xc7, 0xbe, 0x23, 0x41, 0x10, 0x10, 0x86, 0xc7, 0x97, 0x86, 0x9e, 0x6b, 0x53, 0x2a, 0x66, 0x39, 0xf5, 0xcb, 0x27, 0x53, 0xab, 0x56, 0x51, 0x35, 0x99, 0x3b, 0x7f, 0xf0, 0x7d, 0x8c, 0x54, 0xb4, 0xd3, 0xce, 0xd0, 0xd0, 0x10, 0xb6, 0xe7, 0x32, 0x37, 0x37, 0x47, 0x65, 0x64, 0xe4, 0x9d, 0x11, 0xa6, 0x91, 0x0a, 0xae, 0xeb, 0xe1, 0xd8, 0xfd, 0x24, 0xa2, 0x68, 0x28, 0xaa, 0x8c, 0xef, 0x47, 0x1d, 0xc8, 0xd5, 0x57, 0x5f, 0x8d, 0xa8, 0xc8, 0xbc, 0xb1, 0xf6, 0x6d, 0x2e, 0xff, 0xee, 0xd5, 0xd8, 0x8e, 0x40, 0x4a, 0x2f, 0xf2, 0x93, 0xfb, 0x1e, 0xc2, 0x75, 0x04, 0x3e, 0x77, 0xe4, 0xa7, 0xd9, 0x79, 0x97, 0x9d, 0x58, 0xbf, 0x61, 0x2d, 0x3d, 0xab, 0x8e, 0x6e, 0x48, 0xb8, 0x9e, 0xcd, 0x0d, 0x37, 0x5c, 0xcf, 0xd4, 0xd4, 0x24, 0xbe, 0xef, 0xf3, 0xcb, 0x5f, 0x3e, 0x4a, 0xb7, 0xdb, 0xa3, 0xd3, 0xee, 0xd2, 0x6a, 0x5b, 0x0c, 0x0d, 0x65, 0x29, 0x95, 0xf3, 0xe4, 0x72, 0x19, 0x9c, 0x30, 0x4b, 0xbb, 0xdd, 0xe6, 0xee, 0x1f, 0xde, 0xc9, 0x7e, 0xfb, 0xed, 0xcb, 0xce, 0xef, 0x5a, 0xcd, 0xd6, 0xc9, 0xcd, 0xe4, 0xf3, 0x79, 0x3e, 0xf8, 0xfe, 0xdd, 0xd9, 0xb2, 0x69, 0x2b, 0x41, 0x10, 0x30, 0x37, 0x37, 0x4f, 0x2e, 0x93, 0x67, 0xe3, 0x86, 0xcd, 0xa8, 0x92, 0x8a, 0x61, 0x18, 0x64, 0x32, 0x39, 0x5c, 0x22, 0xea, 0x75, 0xb7, 0xdd, 0x76, 0x63, 0xc3, 0x86, 0xf5, 0xf4, 0x7a, 0x26, 0xe5, 0xc1, 0x01, 0x3a, 0x7d, 0x2d, 0x7c, 0x7a, 0x7a, 0x1a, 0x49, 0x92, 0x30, 0xcd, 0x1e, 0x8e, 0xe3, 0xe1, 0xd8, 0x11, 0xd5, 0x2a, 0x08, 0xe0, 0xba, 0x50, 0x1c, 0x50, 0x08, 0xf1, 0x19, 0x1e, 0x1e, 0xa4, 0xdb, 0xed, 0x60, 0xd9, 0x3d, 0x7c, 0x2f, 0x60, 0x68, 0xa8, 0x42, 0xb3, 0xd9, 0x66, 0x6e, 0xba, 0xdb, 0xdf, 0x60, 0x41, 0x60, 0x60, 0xa0, 0x0c, 0x40, 0xbb, 0x5d, 0x67, 0xd5, 0x8e, 0x2b, 0xf8, 0xf7, 0xbf, 0x5f, 0x03, 0x41, 0x20, 0x9b, 0xcd, 0x52, 0x6f, 0xb4, 0x18, 0x1d, 0x1d, 0xa2, 0xd7, 0x33, 0xfb, 0xa3, 0x0b, 0x36, 0x1f, 0xf9, 0xc8, 0x9e, 0xe4, 0x72, 0x05, 0xd6, 0x3c, 0xf6, 0x14, 0x08, 0x30, 0x31, 0x31, 0xc2, 0xc2, 0xc2, 0x02, 0x95, 0xe1, 0xe8, 0xdf, 0x76, 0x3b, 0xa2, 0xe9, 0xcd, 0x8e, 0xcb, 0x4e, 0xef, 0x5a, 0xc9, 0x5b, 0x6f, 0xac, 0x47, 0x96, 0x35, 0x74, 0x3d, 0xcd, 0xdd, 0x77, 0xfd, 0x98, 0xe3, 0x8e, 0xfb, 0x22, 0x8a, 0x9c, 0x62, 0x6c, 0x74, 0x82, 0xeb, 0xae, 0xbb, 0x0e, 0x55, 0xd5, 0x70, 0x5d, 0x9f, 0xd7, 0x5f, 0x7f, 0x1d, 0xc7, 0x71, 0xb8, 0xf7, 0xde, 0x7b, 0x31, 0x72, 0x75, 0x06, 0x06, 0x06, 0xc8, 0x65, 0xf3, 0x6c, 0xdb, 0x36, 0x8d, 0x6d, 0xbb, 0xe4, 0xb2, 0x05, 0x36, 0x6f, 0xde, 0xcc, 0x92, 0x25, 0xcb, 0xd0, 0x34, 0x9d, 0x4e, 0xa7, 0xc3, 0xe5, 0x97, 0x5f, 0xce, 0x69, 0xa7, 0x9d, 0xc6, 0x35, 0xd7, 0x5c, 0xc3, 0xc4, 0xc4, 0x04, 0xc7, 0x1c, 0x73, 0x0c, 0x8d, 0x46, 0x03, 0x55, 0x75, 0xc9, 0x66, 0xb3, 0x49, 0x37, 0xba, 0x6e, 0xdd, 0x06, 0x32, 0x19, 0x83, 0x5d, 0x77, 0xdd, 0x95, 0xd7, 0x5e, 0x7b, 0x0d, 0x4d, 0x53, 0xb6, 0x5b, 0xb0, 0xf1, 0xc2, 0x8c, 0xc7, 0xd8, 0x66, 0x66, 0xe6, 0xc8, 0xe5, 0xa2, 0xf1, 0xa2, 0x38, 0x20, 0x72, 0xb9, 0x1c, 0x1b, 0x36, 0x6c, 0x65, 0xe5, 0xca, 0x25, 0x49, 0x73, 0x19, 0xcf, 0x2a, 0xc7, 0xc7, 0x8a, 0x1b, 0xa5, 0x7c, 0xb9, 0xc0, 0xd6, 0x8d, 0xd3, 0x00, 0x8c, 0x8f, 0x0d, 0x32, 0x3c, 0x34, 0xc4, 0x86, 0x75, 0xff, 0x83, 0x22, 0xc9, 0x0c, 0x0e, 0x0e, 0x62, 0xf7, 0x7a, 0x51, 0x52, 0xe9, 0x17, 0x03, 0x3d, 0x65, 0xbc, 0x53, 0xe0, 0x55, 0x05, 0xcb, 0x76, 0x13, 0xda, 0xcc, 0x71, 0xac, 0x77, 0x1c, 0xfa, 0x41, 0x88, 0xaa, 0x8a, 0x28, 0x4a, 0x3c, 0x07, 0x1f, 0x53, 0xee, 0x7d, 0xfd, 0x4c, 0x88, 0x8a, 0xb7, 0xeb, 0xd9, 0x49, 0x40, 0xc7, 0x4d, 0xcb, 0xe2, 0xcd, 0x28, 0x1c, 0xdb, 0x4b, 0x9a, 0x89, 0xd8, 0xd1, 0x1e, 0xeb, 0xbd, 0x51, 0x23, 0x4c, 0x5f, 0x77, 0xf3, 0xfb, 0xb3, 0xc8, 0x42, 0x42, 0x79, 0x66, 0xb3, 0x59, 0x2c, 0xbb, 0xb3, 0xdd, 0x86, 0x3c, 0xf1, 0x77, 0xc4, 0xdd, 0x7c, 0xaf, 0xe3, 0x24, 0x63, 0x45, 0xd1, 0xdf, 0x04, 0x16, 0x93, 0x06, 0x96, 0x23, 0x90, 0x4a, 0x65, 0x90, 0x44, 0x8d, 0xc9, 0xad, 0x33, 0x3c, 0xf2, 0xcb, 0x5f, 0x93, 0x4e, 0x15, 0x51, 0x95, 0x34, 0xa6, 0xd9, 0xc3, 0xc8, 0x2a, 0x98, 0x9d, 0x1e, 0xf9, 0x7c, 0x91, 0x0d, 0x1b, 0x36, 0x30, 0x34, 0x34, 0x84, 0x69, 0x9a, 0x78, 0x9e, 0xc3, 0xc8, 0xe8, 0x30, 0x9f, 0xf8, 0xf8, 0x6e, 0xe8, 0x9a, 0x8e, 0x20, 0x46, 0x9a, 0xfd, 0x83, 0x0f, 0xfc, 0x9c, 0xd1, 0xd1, 0x09, 0xfe, 0xf3, 0x80, 0x83, 0xa3, 0x06, 0x47, 0x6a, 0x24, 0x4c, 0x44, 0x3c, 0x76, 0xb5, 0x78, 0xc7, 0x2b, 0xdf, 0xf7, 0x18, 0x1e, 0x1e, 0xa6, 0xd9, 0x8c, 0xa8, 0xdc, 0x6c, 0x36, 0xcb, 0xc2, 0x42, 0x8b, 0xe1, 0xe1, 0x81, 0x64, 0x7a, 0x22, 0x46, 0x2a, 0xf1, 0x68, 0xa4, 0x6d, 0x47, 0x5e, 0x9d, 0x78, 0xc3, 0x9e, 0xd8, 0x58, 0x14, 0x8f, 0x15, 0xc5, 0x8c, 0x4e, 0x3c, 0xd3, 0x6b, 0x9a, 0x26, 0x40, 0x62, 0xa6, 0x8b, 0x8a, 0x7d, 0x27, 0x99, 0x57, 0x7f, 0xe1, 0x85, 0x3f, 0x70, 0xfa, 0xe9, 0xa7, 0xb3, 0x65, 0xcb, 0x16, 0x7e, 0xff, 0xfb, 0xdf, 0xf3, 0xa1, 0x0f, 0x7d, 0x04, 0x41, 0x88, 0x58, 0xc4, 0x5c, 0xb6, 0x4c, 0x36, 0x9b, 0x65, 0x72, 0x72, 0x92, 0x74, 0x2a, 0x4b, 0xb3, 0xd9, 0xe4, 0xa9, 0xa7, 0x7e, 0xc3, 0x21, 0x87, 0x1c, 0x82, 0xe3, 0x38, 0x94, 0x86, 0x2b, 0x68, 0x9a, 0xc6, 0x4f, 0x7f, 0x7a, 0x3f, 0xdb, 0x26, 0xa7, 0xc9, 0xe7, 0x0b, 0xfd, 0x64, 0x2c, 0x27, 0x3a, 0xfd, 0xcc, 0xcc, 0x0c, 0xa3, 0x23, 0xe3, 0xfd, 0x42, 0xd4, 0x22, 0x9d, 0xd1, 0x10, 0xc4, 0x00, 0xd7, 0xb5, 0xc9, 0x66, 0x1c, 0x0c, 0x43, 0xe3, 0xe4, 0x93, 0x4f, 0xa2, 0xd1, 0xac, 0x45, 0xcd, 0x7d, 0x79, 0x98, 0x4e, 0xa7, 0x87, 0xae, 0xa5, 0x90, 0x35, 0x81, 0x66, 0x23, 0x6a, 0x86, 0x23, 0x84, 0x5d, 0xc4, 0xb1, 0x5d, 0x7a, 0x3d, 0x9b, 0xc7, 0x1f, 0x7f, 0x9c, 0x3f, 0xbd, 0xf8, 0x67, 0x1e, 0x7a, 0xe4, 0x51, 0xbe, 0xf5, 0xad, 0x6f, 0xf1, 0xda, 0x6b, 0xaf, 0xd1, 0xb3, 0x2c, 0x72, 0xb9, 0x3c, 0xa1, 0x28, 0xf0, 0xc8, 0x23, 0x8f, 0xf0, 0xd9, 0xff, 0x3c, 0x80, 0x7b, 0xee, 0xbd, 0x9b, 0x1b, 0x6e, 0xb8, 0x81, 0xb9, 0xb9, 0x19, 0x6e, 0xbe, 0xf9, 0x66, 0xb6, 0x6d, 0xdb, 0xca, 0xd0, 0xd0, 0x10, 0xeb, 0xff, 0x67, 0x13, 0xa5, 0x72, 0x81, 0x6e, 0xd7, 0x62, 0x74, 0x64, 0x09, 0xae, 0x1b, 0x70, 0xd7, 0x9d, 0xf7, 0x12, 0xf8, 0x12, 0x6b, 0xd7, 0xbe, 0xc9, 0xd0, 0x60, 0x85, 0x74, 0x5e, 0xeb, 0x3f, 0x93, 0x3a, 0xd9, 0x54, 0x96, 0x3f, 0xfe, 0xf1, 0x79, 0x06, 0x8a, 0x79, 0x7e, 0xf9, 0xcb, 0x5f, 0xe0, 0x7a, 0x36, 0xae, 0xd7, 0xa2, 0xdb, 0xeb, 0x50, 0x2a, 0x0d, 0xf0, 0xc6, 0xda, 0xd7, 0xe8, 0x9a, 0x3e, 0xef, 0xdb, 0x75, 0x17, 0x6c, 0xdb, 0xc5, 0xf7, 0x04, 0x54, 0xc1, 0x63, 0xc7, 0x1d, 0x77, 0xa4, 0xde, 0x6c, 0x30, 0x5f, 0xab, 0xe2, 0x05, 0x3e, 0x5e, 0x18, 0xa1, 0xc9, 0xf9, 0x6a, 0xb5, 0x0f, 0xc8, 0xaa, 0x2c, 0x2c, 0xd4, 0x19, 0xad, 0x8c, 0x22, 0xcb, 0x32, 0xd7, 0x5e, 0x75, 0x2d, 0xc5, 0x62, 0x89, 0xbd, 0xf7, 0xd9, 0x9b, 0xf7, 0xec, 0xb6, 0x2b, 0x6b, 0xdf, 0x78, 0x8d, 0xc1, 0xc1, 0x41, 0x04, 0x21, 0xda, 0x48, 0x2b, 0xc4, 0xa7, 0xd9, 0xac, 0xb3, 0x62, 0xc5, 0x0a, 0xe6, 0xe7, 0xe7, 0x13, 0x19, 0x2d, 0x08, 0x22, 0xd6, 0xaf, 0x6b, 0x5a, 0x34, 0x9b, 0x4d, 0x96, 0x2f, 0x5f, 0xce, 0xa6, 0x2d, 0x1b, 0x31, 0x8c, 0x68, 0xcf, 0x8c, 0x30, 0x10, 0x12, 0xd0, 0x66, 0x76, 0x22, 0x30, 0x91, 0xcf, 0x95, 0x99, 0x99, 0x9d, 0xa3, 0x5c, 0x8e, 0xa6, 0x4d, 0x4c, 0xd3, 0x26, 0x9d, 0x56, 0x19, 0x1d, 0xad, 0x30, 0x37, 0x37, 0xb7, 0xdd, 0xc8, 0x68, 0x1c, 0x67, 0x8b, 0xa7, 0x68, 0x62, 0x09, 0x6d, 0xf1, 0x68, 0x5a, 0x6c, 0xf8, 0x8c, 0xd6, 0xf8, 0x3b, 0xd3, 0x37, 0xb1, 0xd9, 0x72, 0x71, 0x7c, 0xc7, 0xac, 0xdc, 0xff, 0xcb, 0x05, 0x1f, 0xbf, 0x5e, 0xfc, 0xdd, 0x71, 0x73, 0x11, 0xbf, 0x5e, 0xbc, 0x49, 0xd5, 0xe2, 0xef, 0x8f, 0xf2, 0x8a, 0x90, 0x30, 0x07, 0x71, 0xb1, 0x17, 0xa3, 0x11, 0x91, 0x0c, 0x6f, 0xbf, 0xb5, 0x8e, 0xb1, 0xd1, 0x09, 0xf6, 0xdc, 0xf3, 0x23, 0x8c, 0x8f, 0x2d, 0xe1, 0x92, 0x4b, 0xbe, 0xc3, 0xc0, 0x40, 0x89, 0x74, 0x3a, 0xc3, 0xe4, 0xe4, 0x36, 0x6e, 0xbb, 0xf5, 0x76, 0x2a, 0xc3, 0x23, 0x4c, 0x4d, 0x4d, 0x93, 0xcb, 0xe5, 0x19, 0x1a, 0x1a, 0xa6, 0xd5, 0xae, 0xe2, 0xba, 0x16, 0xb2, 0x12, 0x3d, 0x0c, 0xcb, 0xb2, 0xe8, 0xb4, 0x4d, 0x04, 0x41, 0xa2, 0x58, 0x2c, 0x71, 0xca, 0x29, 0xa7, 0xf2, 0x5f, 0xa7, 0x9d, 0xc1, 0xd6, 0xad, 0x5b, 0x79, 0xec, 0xb1, 0xc7, 0x28, 0x16, 0xf3, 0xd1, 0xe6, 0x05, 0x66, 0x8b, 0x6e, 0xaf, 0x81, 0xa2, 0x8a, 0x74, 0xbb, 0x2d, 0xee, 0xbf, 0xff, 0xa7, 0x2c, 0x59, 0xb2, 0x04, 0xc7, 0x71, 0xd0, 0x75, 0x8d, 0x2b, 0xae, 0xb8, 0x82, 0xc7, 0x1f, 0x7f, 0x82, 0x35, 0x6b, 0x1e, 0x47, 0xd7, 0x0d, 0x24, 0x51, 0xa1, 0x5c, 0x2e, 0xf3, 0x9e, 0x77, 0xef, 0x84, 0x61, 0x18, 0x54, 0xe7, 0x6b, 0xb4, 0x5a, 0x2d, 0xaa, 0xf3, 0x35, 0x64, 0x49, 0x65, 0x66, 0x66, 0x86, 0xcb, 0x2f, 0xbf, 0x82, 0x75, 0xeb, 0xd6, 0xb1, 0x30, 0xdb, 0xe4, 0x9c, 0x73, 0xce, 0xa1, 0xdb, 0xed, 0xb2, 0xcb, 0x2e, 0xab, 0xfb, 0x1b, 0x0f, 0x84, 0x5c, 0x7d, 0xf5, 0x95, 0xb4, 0x3b, 0x6d, 0xea, 0xcd, 0x05, 0x56, 0xac, 0x58, 0x41, 0xb7, 0xdb, 0xc1, 0x71, 0x1c, 0xb2, 0x99, 0x3c, 0x67, 0x9c, 0x71, 0x46, 0x62, 0x4a, 0x7a, 0xfb, 0xed, 0xb7, 0x79, 0xe3, 0x8d, 0xf5, 0xb4, 0xdb, 0x6d, 0x44, 0x51, 0xee, 0xeb, 0xa9, 0x1e, 0x84, 0x90, 0x4e, 0x2b, 0x28, 0x4a, 0xf4, 0xf0, 0x74, 0x5d, 0x62, 0xe9, 0xd2, 0x15, 0x68, 0x6a, 0x8a, 0xa9, 0xa9, 0xd9, 0x08, 0xe5, 0xe5, 0x8b, 0x38, 0x0e, 0xcc, 0xcd, 0xcd, 0x61, 0x9a, 0x26, 0x23, 0x23, 0x23, 0x58, 0x96, 0x83, 0xaa, 0xaa, 0x74, 0xbb, 0x5d, 0xa6, 0xa7, 0xa7, 0xf1, 0x7d, 0x9f, 0x57, 0x5f, 0x7d, 0x8d, 0x42, 0x21, 0x32, 0xed, 0x74, 0x3a, 0x1d, 0x08, 0x61, 0x76, 0x76, 0x2e, 0xa1, 0xa3, 0x25, 0x49, 0x64, 0xdd, 0xba, 0x75, 0x3c, 0xfb, 0xec, 0xb3, 0x28, 0x2a, 0x0c, 0x0f, 0x97, 0xa8, 0xd7, 0xeb, 0x84, 0x41, 0xe4, 0xee, 0xcc, 0x66, 0xf3, 0xfd, 0x79, 0x63, 0x99, 0x81, 0x81, 0x12, 0xc7, 0x7f, 0xe1, 0xcb, 0x3c, 0xf7, 0xdc, 0x9f, 0x10, 0x84, 0xc8, 0x55, 0x6a, 0x18, 0x1a, 0xbf, 0xff, 0xfd, 0xd3, 0x64, 0xb2, 0x0a, 0x73, 0xd5, 0xcd, 0x14, 0x4b, 0x29, 0x0e, 0xfc, 0xcc, 0xbe, 0x7c, 0xe5, 0xab, 0xa7, 0xb2, 0xeb, 0xae, 0xbb, 0x70, 0xed, 0xb5, 0x57, 0xb3, 0x65, 0x72, 0x33, 0xb5, 0x5a, 0x95, 0xe3, 0x8e, 0x3b, 0xee, 0xff, 0xb0, 0xf5, 0xe6, 0x61, 0x72, 0x95, 0x65, 0xde, 0xff, 0xa7, 0xea, 0x2c, 0x55, 0x75, 0x4e, 0xed, 0x6b, 0xef, 0x9d, 0x4e, 0x27, 0x21, 0x84, 0x84, 0xb0, 0xa3, 0x80, 0xc8, 0x22, 0xfb, 0x36, 0x83, 0xca, 0xa2, 0x08, 0x38, 0x3a, 0x23, 0xe8, 0xa0, 0x23, 0x22, 0xbc, 0x8a, 0xfa, 0x43, 0x45, 0x1d, 0x95, 0x71, 0x64, 0x71, 0x50, 0x5f, 0x67, 0x54, 0x46, 0x07, 0x85, 0x19, 0x50, 0x51, 0x10, 0x85, 0x21, 0x22, 0xca, 0xa6, 0x18, 0xc8, 0x02, 0xd9, 0x3a, 0x9d, 0xde, 0xd2, 0x4b, 0xed, 0x7b, 0x9d, 0xaa, 0x73, 0xce, 0xfb, 0xc7, 0x73, 0xce, 0x49, 0x05, 0x7f, 0xb9, 0xae, 0x5c, 0x5e, 0xc4, 0xab, 0xab, 0xbb, 0xab, 0xce, 0xf3, 0xdc, 0xf7, 0xfd, 0xbd, 0xbf, 0x0b, 0x8b, 0x4b, 0x07, 0x99, 0x9b, 0x9b, 0x11, 0x7f, 0xe7, 0x67, 0xa8, 0x56, 0xab, 0x14, 0x0a, 0x2b, 0xb4, 0xdb, 0x2d, 0x6a, 0xb5, 0x2a, 0xba, 0xae, 0xd1, 0x6a, 0x35, 0x19, 0x1d, 0x1d, 0xe1, 0x7d, 0xef, 0xbb, 0x86, 0x7c, 0x7e, 0x85, 0x54, 0x2a, 0xc9, 0xe8, 0xe8, 0xa8, 0xc7, 0x0c, 0x2d, 0x14, 0x0a, 0x6c, 0xd9, 0xf2, 0x34, 0x9a, 0xa6, 0xb1, 0x63, 0xc7, 0x0e, 0xaf, 0x23, 0x7d, 0x33, 0x5c, 0x65, 0x18, 0x06, 0x95, 0x4a, 0x85, 0x7c, 0x3e, 0xef, 0xc0, 0xf6, 0xd0, 0x6e, 0x9b, 0xd4, 0x6a, 0x6d, 0x9a, 0xcd, 0x26, 0xfb, 0xf7, 0xcf, 0x32, 0x3c, 0x9c, 0x65, 0x6a, 0x6a, 0xc6, 0x41, 0x21, 0x7a, 0x1e, 0xd9, 0xc9, 0x95, 0x96, 0xb8, 0x07, 0x63, 0x76, 0xfa, 0x20, 0x91, 0x68, 0x80, 0x89, 0xd5, 0x82, 0x75, 0xbc, 0x7b, 0xf7, 0x6e, 0x14, 0x45, 0x21, 0x95, 0x4a, 0x1d, 0x66, 0xc2, 0x60, 0xdb, 0xfc, 0x95, 0xe1, 0x83, 0xd8, 0x45, 0x41, 0xab, 0xd5, 0xa6, 0x5a, 0x6d, 0xd2, 0x6e, 0x5b, 0xc8, 0xb2, 0xd8, 0x49, 0xe9, 0x5a, 0x88, 0x50, 0x50, 0xc7, 0x2f, 0x16, 0xe0, 0x1e, 0xb3, 0xbd, 0xd3, 0xe9, 0xd2, 0x35, 0xcc, 0xc3, 0x90, 0x86, 0x37, 0x6b, 0xc8, 0xdd, 0x43, 0x2d, 0x78, 0x02, 0xc2, 0x64, 0x29, 0x14, 0x12, 0x17, 0x8d, 0xd0, 0xad, 0xaa, 0x48, 0x92, 0xe2, 0xbc, 0x5e, 0xc7, 0x3b, 0xc0, 0xae, 0x9a, 0xc4, 0x7d, 0xaf, 0xfa, 0x2d, 0x65, 0xdd, 0x4b, 0xa3, 0xbf, 0xa0, 0xbb, 0xd2, 0x99, 0xfe, 0x3f, 0xb6, 0x2d, 0x4c, 0x5d, 0x7a, 0x3d, 0xcb, 0xe1, 0x36, 0x28, 0x2c, 0x2d, 0x2d, 0xd1, 0x6a, 0xb5, 0x98, 0x9c, 0x5c, 0x83, 0x1e, 0xd6, 0x68, 0xb6, 0xaa, 0x3c, 0xfb, 0xfb, 0xa7, 0xc1, 0x67, 0xf0, 0xd2, 0x4b, 0xcf, 0xd3, 0x68, 0xd6, 0x98, 0x9f, 0x9f, 0x65, 0x68, 0x68, 0x84, 0x6e, 0xd7, 0x44, 0xd7, 0x43, 0xdc, 0xf2, 0xc9, 0x9b, 0x39, 0xeb, 0xcc, 0xd3, 0x58, 0xb7, 0x6e, 0x0d, 0xe1, 0x48, 0x90, 0x58, 0x4c, 0x27, 0x10, 0x90, 0xb8, 0xe1, 0xc6, 0x0f, 0x72, 0xc9, 0x25, 0x17, 0x62, 0x74, 0x9b, 0x24, 0x12, 0x51, 0xc2, 0x61, 0x1d, 0xbf, 0xdf, 0x47, 0xb9, 0x5c, 0x22, 0x9d, 0x4e, 0x11, 0x08, 0x08, 0xd9, 0x63, 0x20, 0xa0, 0x92, 0xcd, 0x66, 0x18, 0x1b, 0x1b, 0xa1, 0x5e, 0xaf, 0x92, 0x4c, 0xc6, 0x09, 0x87, 0x85, 0x95, 0x66, 0x38, 0xac, 0x60, 0x59, 0x3d, 0x56, 0x56, 0x96, 0x1c, 0xcf, 0x83, 0x8e, 0x50, 0x22, 0x2c, 0x15, 0x08, 0x87, 0xc3, 0x84, 0xc3, 0x61, 0x0a, 0x85, 0xa2, 0x38, 0x9b, 0x91, 0x08, 0x23, 0x23, 0x23, 0xec, 0xdd, 0x7b, 0x80, 0x6e, 0xb7, 0xcb, 0xcf, 0x7e, 0xf6, 0x33, 0x14, 0x45, 0xa1, 0x56, 0x6b, 0x79, 0x50, 0x78, 0xb3, 0xd9, 0xf5, 0x18, 0xca, 0x81, 0x40, 0x80, 0x7c, 0xbe, 0x42, 0xbb, 0x6d, 0x12, 0x8d, 0x86, 0x09, 0x87, 0x83, 0x5c, 0x78, 0xe1, 0x85, 0xec, 0xd8, 0xb1, 0x8b, 0x50, 0x28, 0xc4, 0xc9, 0x27, 0x9f, 0x4a, 0x22, 0x11, 0x21, 0x99, 0x14, 0x7c, 0x8b, 0x52, 0xa9, 0xc0, 0xdc, 0xdc, 0x8c, 0xb8, 0xac, 0x65, 0xd1, 0xb4, 0x9d, 0x77, 0xfe, 0xb9, 0xac, 0x5b, 0xb7, 0x16, 0x5d, 0xd7, 0xc9, 0xe7, 0x8b, 0x94, 0x4a, 0x15, 0x4a, 0xc5, 0x0a, 0xe3, 0xe3, 0xab, 0x50, 0x94, 0x80, 0xe0, 0xf3, 0x74, 0x2c, 0x52, 0xc9, 0x1c, 0x1f, 0xfa, 0xd0, 0xdf, 0x33, 0x3a, 0x3a, 0xea, 0x4c, 0x9f, 0x4b, 0x24, 0x93, 0x69, 0x14, 0x39, 0xc4, 0xab, 0x5b, 0xb7, 0x73, 0xf3, 0xc7, 0x6f, 0xa5, 0xd5, 0xec, 0x71, 0xf5, 0x55, 0xd7, 0xb1, 0xb4, 0x94, 0x27, 0x12, 0x8e, 0x31, 0x3e, 0x3e, 0x4e, 0xb5, 0x56, 0xc6, 0xb2, 0x3b, 0x28, 0x2a, 0xd4, 0x6a, 0x55, 0x6c, 0x84, 0x4f, 0x43, 0x2a, 0x95, 0x61, 0x79, 0xa9, 0x40, 0x36, 0x33, 0xc2, 0x3f, 0x7e, 0xe4, 0x66, 0xae, 0x79, 0xef, 0x07, 0x38, 0x7a, 0xd3, 0xc9, 0x7c, 0xe9, 0xce, 0xaf, 0x11, 0xd6, 0x13, 0xc4, 0x63, 0x19, 0x4e, 0x3a, 0xf1, 0x54, 0x1a, 0x8d, 0x16, 0xa7, 0xbc, 0xf5, 0x34, 0x96, 0x16, 0x57, 0x38, 0xea, 0xa8, 0x4d, 0xdc, 0x7b, 0xcf, 0xfd, 0xdc, 0xfe, 0xe9, 0xcf, 0xf2, 0xbd, 0xef, 0xfd, 0x07, 0xe9, 0x74, 0x92, 0x89, 0xd5, 0xab, 0x50, 0x54, 0x3f, 0xa7, 0x9c, 0x76, 0x02, 0xb7, 0x7c, 0xf2, 0x13, 0x6c, 0xdc, 0xb8, 0x81, 0x6f, 0xde, 0x7d, 0x17, 0xb1, 0x58, 0x94, 0xf3, 0xce, 0x7b, 0x07, 0x57, 0x5d, 0xfd, 0x6e, 0x56, 0xaf, 0x5e, 0xc5, 0xc0, 0x60, 0x96, 0x54, 0x3a, 0xca, 0x39, 0x67, 0xbf, 0x9d, 0x8f, 0x7e, 0xf4, 0x1f, 0x09, 0x04, 0x14, 0x8e, 0x3d, 0xf6, 0x78, 0x36, 0x1c, 0xb9, 0x91, 0x3b, 0xef, 0xfc, 0x0a, 0x3b, 0xb6, 0xef, 0x66, 0x76, 0xf6, 0x20, 0xfb, 0xa7, 0x66, 0xd9, 0xb7, 0x6f, 0x8a, 0x55, 0xe3, 0xab, 0x59, 0xbb, 0x76, 0x15, 0xd5, 0x5a, 0x05, 0x55, 0x95, 0x09, 0x47, 0x82, 0x04, 0x83, 0x01, 0x24, 0xc9, 0x4f, 0xb9, 0x5c, 0xa2, 0xd1, 0xa8, 0xa1, 0x28, 0x12, 0xaa, 0x2a, 0x23, 0x49, 0x3e, 0x8c, 0x6e, 0x9b, 0xd7, 0x5e, 0xdb, 0x4e, 0x24, 0x12, 0x61, 0x60, 0x60, 0xe0, 0x30, 0x14, 0xf7, 0xac, 0x33, 0xdf, 0xc1, 0xf3, 0x7f, 0x78, 0x91, 0x4a, 0xa5, 0x42, 0x26, 0x9d, 0xf3, 0xec, 0x57, 0x65, 0x59, 0x26, 0x97, 0xcb, 0x31, 0x34, 0x34, 0x42, 0xa9, 0x54, 0x22, 0x1a, 0x8d, 0xe0, 0xf3, 0xc1, 0xe0, 0xe0, 0x20, 0xb9, 0x5c, 0x86, 0x72, 0xb9, 0x8c, 0x8d, 0x49, 0x3c, 0x1e, 0x67, 0x7e, 0x7e, 0x9e, 0x44, 0x22, 0x44, 0x38, 0x1c, 0x46, 0xd7, 0x75, 0x0f, 0xd1, 0x0a, 0x06, 0x83, 0x9e, 0xce, 0xfb, 0x1f, 0xfe, 0xe1, 0x1f, 0x50, 0x14, 0x1f, 0x85, 0x42, 0x19, 0x49, 0x92, 0x88, 0x46, 0x43, 0x18, 0x86, 0x41, 0xa1, 0x50, 0x38, 0x0c, 0x31, 0x74, 0xcf, 0x93, 0x3b, 0x4d, 0xbb, 0x7f, 0xfb, 0x09, 0xa8, 0xae, 0xb3, 0x65, 0x3f, 0x6a, 0xe6, 0x9e, 0x51, 0xb7, 0xf8, 0xbb, 0xf6, 0xab, 0xee, 0x5d, 0xf5, 0x66, 0xa3, 0xa8, 0x7e, 0x34, 0xa0, 0x7f, 0xe2, 0xef, 0xf7, 0x96, 0xe8, 0x37, 0xdb, 0xea, 0x77, 0x8a, 0x74, 0x57, 0x00, 0xee, 0xae, 0xdd, 0xe5, 0x25, 0x1d, 0xb2, 0x99, 0x76, 0xe0, 0xfb, 0x6f, 0xfc, 0xcb, 0x3d, 0x7c, 0xe5, 0xcb, 0x5f, 0x63, 0xcb, 0x96, 0x3f, 0x10, 0x89, 0x24, 0x68, 0x36, 0xdb, 0x1c, 0x75, 0xd4, 0x46, 0x6e, 0xbb, 0xf5, 0xd3, 0x1c, 0x5c, 0x58, 0x22, 0x18, 0xd0, 0xc8, 0xa4, 0x73, 0xdc, 0x78, 0xe3, 0x47, 0x68, 0x36, 0xdb, 0xac, 0x5a, 0xb5, 0x1a, 0x45, 0x09, 0x90, 0xcf, 0x17, 0xf1, 0xf9, 0x7b, 0x18, 0xdd, 0x06, 0xcd, 0x66, 0x8d, 0x4e, 0xa7, 0x45, 0xcf, 0xec, 0xd0, 0x33, 0xbb, 0xb4, 0xdb, 0x6d, 0xaf, 0xa0, 0xa5, 0x52, 0x29, 0x1e, 0x78, 0xe0, 0x01, 0x9a, 0xad, 0x3a, 0xff, 0xf2, 0x8d, 0xaf, 0xf1, 0xed, 0xef, 0xdc, 0xcb, 0x95, 0x97, 0x5f, 0x42, 0x3c, 0xa1, 0xf3, 0xf3, 0x9f, 0x3f, 0xca, 0x67, 0x3f, 0x77, 0x3b, 0x2f, 0xbe, 0xf4, 0x3c, 0x7e, 0xc9, 0xe7, 0x69, 0xf3, 0xe2, 0xf1, 0x38, 0xfb, 0xf6, 0xed, 0x63, 0x7a, 0xfa, 0x80, 0x07, 0xf3, 0xb7, 0xdb, 0x06, 0xcd, 0x66, 0x93, 0x50, 0x48, 0x40, 0xd9, 0x8d, 0x46, 0x8b, 0x64, 0x2a, 0xce, 0x65, 0x7f, 0x73, 0x09, 0x7b, 0xf6, 0xec, 0xe1, 0x89, 0x27, 0x1e, 0xe7, 0xcb, 0x5f, 0xfe, 0x32, 0x27, 0x9f, 0x7a, 0x3c, 0x85, 0x42, 0x81, 0x6e, 0x57, 0xf8, 0x10, 0x7f, 0xfc, 0xe6, 0x9b, 0xf8, 0xe0, 0x07, 0xff, 0x0e, 0x55, 0x55, 0xf8, 0xbf, 0xff, 0xf7, 0x7e, 0x36, 0x1c, 0xb9, 0x9e, 0x83, 0x8b, 0xb3, 0xa4, 0xd2, 0x09, 0xbe, 0xf7, 0xbd, 0xff, 0xe0, 0xb5, 0xd7, 0xb6, 0x73, 0xee, 0x39, 0xe7, 0xa3, 0xaa, 0x01, 0x4a, 0xa5, 0x0a, 0xeb, 0xd6, 0xae, 0xe7, 0xae, 0xbb, 0xfe, 0x99, 0x60, 0x50, 0x7c, 0x1f, 0x49, 0x92, 0x50, 0x64, 0x15, 0xdb, 0x06, 0x49, 0x52, 0xbc, 0x0f, 0x55, 0xd7, 0xc3, 0x1c, 0xd8, 0xbf, 0x48, 0xbb, 0x65, 0x53, 0xab, 0xc2, 0xca, 0x72, 0x99, 0xe5, 0xa5, 0x32, 0x03, 0xb9, 0x01, 0xea, 0x35, 0x8b, 0xb5, 0x6b, 0xd6, 0xb3, 0xb8, 0xb8, 0xc8, 0xe0, 0x60, 0x0e, 0x80, 0x47, 0x1e, 0x79, 0x84, 0xdf, 0xfd, 0xee, 0x77, 0xe8, 0xba, 0xee, 0x68, 0xce, 0x0f, 0xed, 0x6f, 0x34, 0x5d, 0xf5, 0x88, 0x55, 0xee, 0x0e, 0x66, 0x6e, 0x4e, 0x38, 0x20, 0x4d, 0x4e, 0xae, 0xa6, 0x50, 0x28, 0x50, 0xaf, 0xb5, 0xd1, 0xc3, 0x1a, 0xcf, 0xfd, 0xfe, 0x79, 0x4a, 0xa5, 0x02, 0x4f, 0x3d, 0xf5, 0x24, 0xb6, 0xa5, 0xd2, 0x6e, 0x99, 0x98, 0x3d, 0x99, 0x83, 0x0b, 0x79, 0x7e, 0xfd, 0xc4, 0x53, 0xa4, 0x92, 0x39, 0xde, 0x7b, 0xcd, 0xd5, 0x9c, 0x71, 0xc6, 0xdb, 0xb0, 0x31, 0xe8, 0x18, 0x55, 0xce, 0x3b, 0xff, 0x74, 0x9e, 0x7f, 0x61, 0x0b, 0x5f, 0xfd, 0xfa, 0x1d, 0x04, 0x42, 0x16, 0x3f, 0xfb, 0xf9, 0x4f, 0x79, 0xe9, 0xc5, 0x3f, 0x52, 0xa9, 0x54, 0x68, 0xb5, 0xc4, 0x67, 0xb7, 0x6a, 0x62, 0x9c, 0xcd, 0x9b, 0x37, 0x51, 0x2c, 0xe6, 0x49, 0xa6, 0xa2, 0x04, 0x43, 0x2a, 0xad, 0x56, 0x83, 0x83, 0x07, 0xe7, 0xd1, 0xb4, 0x20, 0x3f, 0xf8, 0xc1, 0x7f, 0x30, 0x3d, 0x3d, 0x45, 0xaf, 0x67, 0x30, 0x3c, 0x3c, 0xc8, 0xb7, 0xbe, 0x75, 0x2f, 0xb3, 0xb3, 0xb3, 0x44, 0x22, 0x11, 0xaf, 0x30, 0x5d, 0x7f, 0xfd, 0xf5, 0xe4, 0xf3, 0x05, 0x4f, 0x6e, 0xd1, 0x5f, 0x94, 0xdc, 0xf7, 0xcd, 0xdd, 0x41, 0xb5, 0xdb, 0x26, 0xa5, 0x52, 0x89, 0x42, 0xa1, 0x42, 0x26, 0x13, 0x47, 0x55, 0x05, 0x8c, 0x16, 0x0c, 0xca, 0x14, 0x0a, 0x05, 0x26, 0x27, 0xc7, 0x1d, 0x74, 0xe3, 0x90, 0xbb, 0x9c, 0x3b, 0xdd, 0x1b, 0x86, 0x80, 0x99, 0x72, 0x43, 0x29, 0x00, 0x66, 0x67, 0xe7, 0xbd, 0xf7, 0x73, 0xed, 0xda, 0xb5, 0xc8, 0xb2, 0xec, 0x75, 0xf7, 0xba, 0xae, 0x93, 0x4c, 0x26, 0x1c, 0x08, 0xaf, 0x7b, 0x98, 0x16, 0xde, 0x9d, 0x02, 0x05, 0xab, 0x54, 0xf8, 0x6f, 0x2b, 0x8a, 0xe2, 0xb1, 0x4d, 0x0f, 0x99, 0xe5, 0x38, 0xb6, 0x96, 0xf8, 0xfa, 0x76, 0x5c, 0xd2, 0x61, 0x90, 0x99, 0x3b, 0x99, 0xab, 0xaa, 0xea, 0x69, 0xaf, 0xfb, 0x6d, 0x22, 0xdd, 0x26, 0x44, 0x92, 0xc4, 0x44, 0x51, 0xa9, 0x54, 0x84, 0xac, 0xb3, 0x6f, 0x27, 0x2c, 0xd8, 0xf6, 0xb2, 0xf7, 0x33, 0xb8, 0x7f, 0xdd, 0xd7, 0x7f, 0xb3, 0x6c, 0x4f, 0x51, 0x25, 0x24, 0xd9, 0xf7, 0x26, 0x3b, 0x5c, 0xe1, 0x1c, 0x67, 0xdb, 0x3e, 0x7a, 0x3d, 0x8b, 0xa1, 0x21, 0x31, 0x3d, 0x1e, 0x98, 0xd9, 0xef, 0xec, 0xd6, 0xdb, 0x9c, 0x72, 0xea, 0x49, 0xe0, 0x33, 0xe9, 0x59, 0x35, 0xc6, 0x57, 0xe5, 0x1c, 0xc2, 0x54, 0x9e, 0x54, 0x3a, 0xcc, 0x4a, 0x7e, 0x81, 0x7b, 0xef, 0xfb, 0x3a, 0x4f, 0xfc, 0xe6, 0xe7, 0x14, 0x4b, 0xf3, 0x24, 0xd3, 0x21, 0x5a, 0x9d, 0x32, 0x3d, 0xab, 0x45, 0x38, 0xa2, 0x10, 0x08, 0x59, 0xa4, 0x33, 0x3a, 0xd5, 0xfa, 0x0a, 0xd5, 0x6a, 0x15, 0x59, 0x16, 0x86, 0x2d, 0x4b, 0x4b, 0x05, 0xc1, 0x3c, 0xce, 0x09, 0x33, 0x8d, 0x99, 0x99, 0x83, 0x94, 0x4a, 0x25, 0xca, 0xe5, 0x96, 0x47, 0x52, 0x2c, 0x95, 0x9a, 0x1e, 0xe2, 0x22, 0x76, 0xef, 0x29, 0x54, 0xd5, 0x4f, 0x38, 0xac, 0x39, 0x64, 0xcf, 0x02, 0xa5, 0x52, 0x9d, 0x5c, 0x2e, 0x8b, 0xcf, 0xe7, 0x23, 0x9f, 0xaf, 0x30, 0x3f, 0x3f, 0x4f, 0x32, 0x29, 0x50, 0xa0, 0xad, 0x5b, 0xb7, 0x8a, 0x3c, 0x89, 0xa8, 0xe6, 0x78, 0x46, 0xf4, 0x90, 0x24, 0x9c, 0xa9, 0x5c, 0x38, 0xae, 0x65, 0xb3, 0x09, 0x24, 0x09, 0xa7, 0x11, 0xef, 0xd2, 0x68, 0x74, 0x88, 0x46, 0x35, 0x96, 0x97, 0x8b, 0x64, 0x32, 0x09, 0x4a, 0xa5, 0x9a, 0x07, 0xc7, 0x47, 0xa3, 0x61, 0x87, 0x0c, 0x19, 0x20, 0x1a, 0x0d, 0x13, 0x8b, 0xeb, 0x24, 0x93, 0x71, 0xde, 0xd8, 0xb5, 0x93, 0x5a, 0xbd, 0xcc, 0x96, 0x2d, 0xff, 0xeb, 0x19, 0x81, 0x14, 0x0a, 0x05, 0xae, 0xba, 0xf2, 0x3d, 0xac, 0x5e, 0xbd, 0x06, 0xf0, 0x91, 0x5f, 0x29, 0x71, 0xd7, 0x5d, 0x5f, 0xe7, 0xc5, 0x17, 0x5f, 0xa4, 0x56, 0xab, 0x01, 0x3e, 0x5a, 0xad, 0x36, 0x57, 0x5e, 0xf9, 0x1e, 0xfc, 0xbe, 0x20, 0xf7, 0xdd, 0xfb, 0x1d, 0xfe, 0xe9, 0x63, 0xb7, 0xe0, 0xf7, 0x29, 0x24, 0x13, 0x69, 0xc7, 0x4e, 0xb8, 0xcc, 0xc2, 0x42, 0x05, 0x55, 0xf5, 0x53, 0xad, 0x15, 0x51, 0x14, 0x89, 0x62, 0xb1, 0x24, 0x98, 0xfb, 0xb6, 0x8f, 0x44, 0x3c, 0xc3, 0x39, 0xef, 0xb8, 0x90, 0xf3, 0xcf, 0xbb, 0x8c, 0x7f, 0xf8, 0xe0, 0x4d, 0xc8, 0x52, 0x88, 0x6e, 0xc7, 0xcf, 0xc2, 0xfc, 0x0a, 0xf3, 0x73, 0x8b, 0x24, 0x93, 0x69, 0x1e, 0x7e, 0xe8, 0x51, 0x8a, 0xc5, 0xb2, 0x90, 0x6b, 0x29, 0x21, 0xbe, 0xfe, 0xf5, 0xbb, 0x08, 0x06, 0x35, 0x2a, 0x95, 0x0a, 0xcd, 0x66, 0x93, 0xbd, 0x7b, 0x77, 0xb3, 0x7b, 0xf7, 0x14, 0xbb, 0x76, 0xef, 0xe0, 0x4b, 0x5f, 0xfa, 0x3c, 0xad, 0x76, 0x9d, 0x17, 0x5e, 0xf8, 0x23, 0x77, 0xdf, 0xf3, 0x2f, 0xfc, 0xee, 0xd9, 0x2d, 0x54, 0x2a, 0x45, 0x46, 0x46, 0x86, 0x78, 0xe2, 0x89, 0x5f, 0xb1, 0x70, 0x70, 0x96, 0xf1, 0xd5, 0x63, 0x2c, 0x2f, 0x2e, 0xd0, 0x68, 0x34, 0x08, 0x87, 0xc3, 0x44, 0x22, 0x09, 0x54, 0x45, 0xe3, 0x33, 0xb7, 0xdf, 0xc1, 0xc3, 0x0f, 0x3d, 0x82, 0x2c, 0x05, 0x31, 0x7b, 0x3e, 0xe2, 0xf1, 0x84, 0xe7, 0x29, 0x21, 0xac, 0x7b, 0x5b, 0xe0, 0xb3, 0x90, 0x15, 0x3f, 0x36, 0x26, 0x92, 0xec, 0x03, 0x2c, 0xea, 0xf5, 0x2a, 0xbd, 0x9e, 0x81, 0xa6, 0x05, 0x9d, 0xa9, 0x56, 0x61, 0x61, 0xe1, 0xa0, 0x63, 0x14, 0x24, 0x58, 0xe6, 0xba, 0xae, 0x33, 0x3f, 0x3f, 0x4f, 0xa5, 0x52, 0x13, 0x08, 0xea, 0x52, 0x9e, 0x64, 0x32, 0x45, 0x28, 0xa4, 0x53, 0xaf, 0x89, 0x73, 0x57, 0x2e, 0x57, 0x31, 0x4d, 0x93, 0x58, 0x2c, 0x86, 0xa6, 0x09, 0xd3, 0xa2, 0x5c, 0x2e, 0x43, 0x36, 0x9b, 0x45, 0x51, 0xc5, 0xbe, 0xdd, 0x45, 0xbd, 0x7a, 0xbd, 0x9e, 0xe0, 0x44, 0x95, 0xcb, 0x1e, 0x62, 0x03, 0xf0, 0x8d, 0x6f, 0x7c, 0x03, 0x59, 0x96, 0x19, 0x1f, 0x1f, 0xf1, 0x0a, 0xad, 0xfb, 0xf3, 0xbb, 0x5c, 0x1c, 0x97, 0xd7, 0xd3, 0xdf, 0x98, 0xf7, 0xdb, 0x49, 0xf7, 0x23, 0x83, 0xfd, 0x26, 0x2e, 0xfd, 0xb0, 0x79, 0x7f, 0xc1, 0xee, 0xdf, 0x81, 0xbb, 0x84, 0xb7, 0xfe, 0x3b, 0xc7, 0x2d, 0xe4, 0x87, 0xaf, 0xce, 0xcc, 0xbf, 0xf2, 0x73, 0xef, 0x27, 0xe0, 0xf6, 0xbf, 0x5e, 0xff, 0x5d, 0xf3, 0xe6, 0xaf, 0xe9, 0x76, 0xbb, 0xf8, 0x02, 0x7a, 0xce, 0xfe, 0xd9, 0x23, 0x8f, 0xd0, 0x69, 0xd5, 0x78, 0xef, 0x7b, 0xae, 0x22, 0x99, 0x88, 0xa3, 0x69, 0x41, 0x62, 0x37, 0x1a, 0xcf, 0x71, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x11, 0x9d, 0xe5, 0x95, 0x79, 0x8f, 0xdd, 0xf7, 0xfe, 0x0f, 0x7c, 0x80, 0xaf, 0x7f, 0xfd, 0xeb, 0x04, 0x35, 0xb1, 0xbf, 0x1e, 0x1e, 0x1e, 0xc6, 0x60, 0x8e, 0x66, 0xb3, 0x83, 0xd1, 0x06, 0x45, 0x0e, 0x13, 0x0c, 0xe8, 0x80, 0xb0, 0x06, 0x74, 0x2f, 0xd3, 0x03, 0xb3, 0xb3, 0x8c, 0x8e, 0x8e, 0x0a, 0x12, 0x83, 0x16, 0xe1, 0xfd, 0xd7, 0x7f, 0x88, 0x99, 0xb9, 0x25, 0x72, 0xb9, 0x41, 0xd6, 0x8c, 0x0e, 0x73, 0xe3, 0x87, 0x3f, 0xc4, 0x4f, 0x1f, 0xfa, 0x11, 0x85, 0xe2, 0x22, 0x1f, 0xba, 0xe1, 0xfd, 0x5e, 0x97, 0xbf, 0x71, 0xe3, 0x06, 0x96, 0x97, 0x57, 0x3c, 0xb9, 0x42, 0x30, 0xa8, 0xd1, 0x6a, 0x35, 0xd0, 0xc3, 0x21, 0x2a, 0x95, 0x22, 0x3e, 0xbf, 0xcd, 0x4a, 0xb9, 0xcb, 0xba, 0x75, 0xeb, 0xf8, 0xe2, 0x1d, 0x9f, 0xe7, 0xf5, 0x37, 0x76, 0xf0, 0x6f, 0xf7, 0x7d, 0x8b, 0xb1, 0xb1, 0x11, 0x16, 0x17, 0x17, 0x09, 0x87, 0x34, 0x96, 0x97, 0x16, 0xa8, 0xd5, 0xea, 0x9c, 0x71, 0xc6, 0x19, 0x5c, 0x7f, 0xed, 0xfb, 0xf9, 0xd8, 0xc7, 0x3e, 0xce, 0xf8, 0xc8, 0x38, 0x17, 0x5e, 0x70, 0x11, 0x8f, 0x3f, 0xfe, 0x38, 0xb7, 0xff, 0x7f, 0x5f, 0xe0, 0x43, 0x1f, 0xfa, 0x10, 0xad, 0x56, 0x83, 0x42, 0xb1, 0x44, 0x2e, 0x97, 0xe4, 0xbb, 0xdf, 0xfd, 0x36, 0xdf, 0xbc, 0xfb, 0x1b, 0x6c, 0xdd, 0xba, 0x95, 0x5c, 0x2e, 0x47, 0xb1, 0x50, 0x46, 0x55, 0x55, 0x96, 0x96, 0x56, 0x3c, 0xbe, 0x80, 0xcf, 0x27, 0x64, 0x12, 0x8d, 0x9a, 0xe5, 0x48, 0xe8, 0xe0, 0xc1, 0x9f, 0xfc, 0x88, 0xeb, 0xae, 0x7b, 0x1f, 0x4b, 0x4b, 0x65, 0xcf, 0xc3, 0xda, 0x87, 0xec, 0x3c, 0x38, 0xc2, 0x32, 0x32, 0x16, 0x8b, 0x51, 0xa9, 0x14, 0xc8, 0x0d, 0xa4, 0xd9, 0xb3, 0x67, 0x37, 0x8a, 0x1a, 0xc4, 0x30, 0x0c, 0x54, 0x07, 0x9a, 0x06, 0xcb, 0x59, 0x07, 0x68, 0x1e, 0x34, 0xec, 0x4a, 0x22, 0xe2, 0xf1, 0xa4, 0x43, 0x04, 0x6a, 0x90, 0xcd, 0x66, 0xb9, 0xe6, 0x9a, 0x6b, 0xb8, 0xff, 0xbe, 0x07, 0x49, 0xc4, 0x93, 0xbc, 0xef, 0x7d, 0xd7, 0x31, 0x3e, 0x3e, 0x41, 0x26, 0x93, 0xe2, 0x23, 0xff, 0x78, 0x03, 0xb3, 0xb3, 0xfb, 0x09, 0x86, 0x14, 0xba, 0x3d, 0x71, 0x48, 0x0f, 0x2e, 0x2c, 0xf2, 0x85, 0x3b, 0x3f, 0xc7, 0x89, 0x27, 0x9c, 0xc4, 0x15, 0xef, 0xbe, 0x86, 0x4c, 0x66, 0x00, 0xa3, 0x63, 0xd1, 0x34, 0x0e, 0xe0, 0xf7, 0x8b, 0xe0, 0x80, 0x5e, 0xd7, 0x46, 0x96, 0xc5, 0x01, 0xec, 0x39, 0x0e, 0x48, 0xe0, 0xf7, 0x1e, 0x46, 0xf7, 0xe1, 0xcf, 0x64, 0x32, 0x42, 0xd2, 0xd7, 0x68, 0x20, 0xf9, 0x6d, 0xef, 0x82, 0x8e, 0x46, 0xa3, 0x9e, 0x16, 0xd4, 0xb2, 0x2c, 0x47, 0xee, 0xd8, 0xfa, 0xab, 0xfd, 0x4f, 0xbf, 0xe1, 0x8c, 0x61, 0x88, 0x00, 0x02, 0xd7, 0x9d, 0x29, 0x9f, 0xaf, 0x10, 0x89, 0x88, 0xee, 0xd8, 0x65, 0x8d, 0xbb, 0xfb, 0x2e, 0xf7, 0x40, 0xb8, 0x32, 0xca, 0x5e, 0xaf, 0x87, 0x16, 0xd3, 0x29, 0xe7, 0xeb, 0x24, 0x92, 0x3a, 0xdd, 0x8e, 0x41, 0x2c, 0x1a, 0xa5, 0x59, 0xab, 0xa3, 0xca, 0xa2, 0x20, 0x86, 0x9c, 0x82, 0xea, 0x73, 0xe4, 0x64, 0x6d, 0xe3, 0x50, 0xc8, 0x81, 0xed, 0xf7, 0x01, 0x2a, 0x86, 0x61, 0x50, 0x6f, 0x08, 0xa9, 0x88, 0xa6, 0x29, 0x1e, 0xbc, 0x1d, 0x0a, 0x05, 0xe8, 0x99, 0xc6, 0x21, 0xff, 0x79, 0x93, 0x3e, 0xf8, 0xcb, 0x99, 0xc8, 0x6d, 0xc3, 0xfb, 0xdd, 0xfa, 0x77, 0xe8, 0xee, 0xc5, 0x60, 0x74, 0xec, 0xc3, 0x2c, 0x1d, 0xdd, 0xce, 0xdd, 0xf5, 0x95, 0x0f, 0x85, 0x0e, 0x91, 0xfe, 0xdc, 0x10, 0x24, 0x61, 0x6e, 0x22, 0x0a, 0xbc, 0x4d, 0xd7, 0x83, 0xec, 0x5d, 0x82, 0x8d, 0xfb, 0x79, 0xc8, 0xb2, 0x8c, 0xec, 0x57, 0xbc, 0xdd, 0xb1, 0x6d, 0x1d, 0x92, 0xaf, 0xb8, 0x07, 0x5d, 0x8f, 0x26, 0x99, 0x9b, 0x9b, 0xe3, 0xe9, 0xa7, 0x9e, 0xe1, 0xd2, 0x4b, 0xff, 0x86, 0x5f, 0xfd, 0xf2, 0xd7, 0xb4, 0xdb, 0x06, 0x9d, 0x4e, 0x97, 0x6b, 0xdf, 0x77, 0x1d, 0x95, 0xfa, 0x1c, 0xe1, 0x68, 0x8c, 0x81, 0xdc, 0x28, 0x7b, 0x77, 0xed, 0x43, 0x8b, 0x44, 0x78, 0xf2, 0xc9, 0x5f, 0x51, 0xa9, 0xe6, 0xb9, 0xf2, 0xaa, 0x77, 0x12, 0xd1, 0x1d, 0xe7, 0x2a, 0x60, 0xed, 0xda, 0x49, 0x16, 0xe6, 0x0f, 0xe2, 0xf3, 0x29, 0x54, 0x2b, 0x0d, 0xa1, 0x6c, 0xf0, 0x8b, 0xf7, 0x6b, 0x71, 0xb1, 0x44, 0x34, 0x1a, 0xa0, 0xdd, 0xee, 0x90, 0xcd, 0x66, 0x28, 0x95, 0x4a, 0xe8, 0xba, 0x8e, 0xac, 0xf8, 0x3d, 0xc2, 0xa4, 0xa2, 0x28, 0x94, 0x4a, 0x6d, 0x86, 0x86, 0x12, 0xde, 0x74, 0xd3, 0x6a, 0x76, 0x3d, 0xb9, 0x8e, 0xaa, 0xaa, 0x2c, 0x2f, 0x97, 0x98, 0x9c, 0x14, 0xde, 0x12, 0xed, 0xb6, 0x49, 0x22, 0x21, 0xd8, 0xea, 0x9f, 0xff, 0xfc, 0xe7, 0xf9, 0xcc, 0x67, 0x3e, 0xe3, 0x15, 0x83, 0x6f, 0x7d, 0xeb, 0x5b, 0x5c, 0x7b, 0xed, 0xb5, 0x34, 0x1a, 0x0d, 0x82, 0xc1, 0x20, 0xe1, 0x70, 0xd8, 0x23, 0xd0, 0x02, 0x1c, 0x38, 0xb0, 0xe0, 0x39, 0xc8, 0x45, 0x22, 0xa2, 0x18, 0x14, 0x8b, 0x15, 0x06, 0x07, 0xb3, 0x1e, 0xfc, 0x1f, 0x0c, 0x06, 0xa9, 0xd7, 0xdb, 0x24, 0x12, 0x61, 0x3a, 0x1d, 0x83, 0x66, 0xd3, 0x00, 0x1b, 0x5e, 0x7c, 0xf1, 0x79, 0x0e, 0x1e, 0x14, 0x05, 0xe8, 0xb2, 0xcb, 0xaf, 0xe6, 0x89, 0x27, 0x9e, 0xe4, 0xf1, 0xc7, 0x7f, 0xcd, 0xd9, 0x67, 0x9d, 0xcb, 0x75, 0xd7, 0x7e, 0x00, 0x9f, 0x4f, 0xe2, 0x87, 0x3f, 0x7c, 0x80, 0x4e, 0xbb, 0x4b, 0x20, 0x64, 0xf2, 0xf1, 0x8f, 0xdf, 0xcc, 0xc2, 0xfc, 0x32, 0xf7, 0xdf, 0xff, 0x5d, 0x86, 0x87, 0x46, 0xb9, 0xe6, 0x9a, 0x6b, 0xf8, 0xce, 0x77, 0xef, 0xa7, 0xd3, 0xe9, 0x70, 0xeb, 0x2d, 0x1f, 0xa4, 0x63, 0x34, 0x50, 0x03, 0x3e, 0x4c, 0xab, 0xc5, 0xf2, 0xca, 0x0a, 0x43, 0xc3, 0x09, 0xcf, 0xd2, 0xf3, 0x63, 0xff, 0xf4, 0x09, 0x8e, 0xd9, 0x7c, 0x02, 0x4f, 0xfd, 0xf6, 0x19, 0xde, 0x71, 0xf6, 0x45, 0x7c, 0xf2, 0x96, 0xdb, 0xf1, 0xfb, 0x42, 0x7c, 0xf1, 0x0b, 0x5f, 0xe6, 0x85, 0xe7, 0xff, 0xc4, 0xc6, 0x8d, 0x9b, 0x19, 0x18, 0x1a, 0xc2, 0xb4, 0xba, 0xfc, 0xe6, 0x37, 0x4f, 0x70, 0xd2, 0x5b, 0x4e, 0x64, 0xff, 0xf4, 0x3e, 0x6a, 0xcd, 0x3a, 0x27, 0x9e, 0x78, 0x3c, 0xfe, 0xae, 0xc9, 0x4d, 0x37, 0x7d, 0x84, 0xe9, 0x03, 0x53, 0x1c, 0xbd, 0xf9, 0x48, 0xfc, 0x7e, 0x8b, 0x66, 0xab, 0x46, 0x30, 0x24, 0x53, 0x2e, 0x97, 0x58, 0x5c, 0x5c, 0x02, 0xdb, 0x4f, 0x3c, 0x9e, 0x66, 0x7e, 0x76, 0x89, 0x68, 0x34, 0x45, 0x34, 0x92, 0xc0, 0x30, 0x2c, 0x1e, 0x7e, 0xf8, 0x61, 0xde, 0x7e, 0xc6, 0xf1, 0x84, 0x63, 0x29, 0x7e, 0xf2, 0xe0, 0xff, 0x60, 0x34, 0x4d, 0x14, 0x39, 0x04, 0x96, 0xf0, 0xe0, 0x50, 0x14, 0x85, 0x68, 0x5c, 0xe6, 0x7d, 0xd7, 0x5e, 0xcd, 0xc2, 0xc1, 0x59, 0x46, 0x86, 0x33, 0x68, 0x5a, 0x88, 0x4c, 0x2a, 0xe5, 0x91, 0xbf, 0x74, 0x45, 0x61, 0xfd, 0xfa, 0x75, 0xbc, 0xb1, 0x7b, 0x17, 0x9d, 0x5e, 0x17, 0x9f, 0x04, 0xd3, 0x33, 0x33, 0x44, 0xa2, 0x61, 0xfc, 0x92, 0x44, 0x22, 0x3e, 0x40, 0xa5, 0x52, 0x21, 0x99, 0x4c, 0xa1, 0x05, 0x75, 0xb6, 0x6f, 0xdb, 0x49, 0xa5, 0x5c, 0x61, 0x6c, 0x64, 0x0c, 0x9f, 0x4f, 0xa2, 0x63, 0xb5, 0x59, 0x59, 0x59, 0x61, 0xe3, 0xc6, 0x0d, 0x4c, 0x1f, 0x98, 0xa2, 0xd3, 0x69, 0xd3, 0x68, 0x18, 0x24, 0x53, 0xc2, 0x9d, 0xad, 0xd1, 0x68, 0x31, 0x38, 0x98, 0xf6, 0x56, 0x2b, 0xd1, 0x68, 0x4c, 0x78, 0x60, 0x2c, 0xad, 0x90, 0x4a, 0xa5, 0x68, 0x77, 0x2a, 0x5e, 0xb3, 0xdd, 0xeb, 0x0a, 0x24, 0x2e, 0x1e, 0x4f, 0x12, 0x09, 0x0b, 0x7f, 0x81, 0xbf, 0xff, 0xe0, 0x87, 0xb9, 0xe9, 0xa3, 0x1f, 0x63, 0x70, 0x30, 0x83, 0xdf, 0x2f, 0xfc, 0x25, 0x74, 0x5d, 0x67, 0x6e, 0x6e, 0x89, 0x91, 0x11, 0x71, 0x8f, 0xb9, 0xc5, 0xbc, 0xff, 0x4f, 0x3f, 0xdc, 0xde, 0xef, 0xd0, 0xe8, 0x42, 0xdb, 0x6e, 0x11, 0x15, 0xb5, 0xae, 0xf7, 0x57, 0x9e, 0xef, 0xfd, 0xce, 0x91, 0x1e, 0x81, 0xb5, 0x6f, 0xba, 0x6f, 0xb7, 0xdb, 0x9e, 0x3c, 0xad, 0x7f, 0x4a, 0xef, 0xcf, 0x72, 0x70, 0x9b, 0x86, 0x7e, 0xee, 0x8f, 0xdb, 0x50, 0xb8, 0xff, 0xd6, 0x6a, 0x35, 0x0e, 0x63, 0xe2, 0xfb, 0xfd, 0x7e, 0x7c, 0xd9, 0xc1, 0xf5, 0x76, 0x34, 0xa2, 0xb3, 0xb8, 0x30, 0x4f, 0x22, 0x1e, 0x26, 0xac, 0x85, 0x38, 0xb8, 0xb8, 0xc0, 0xff, 0x3c, 0xf4, 0x53, 0x7c, 0x7e, 0x93, 0xeb, 0xae, 0xbb, 0x4e, 0x40, 0x8b, 0x01, 0x01, 0x6d, 0x0f, 0x0c, 0x0e, 0x22, 0xcb, 0xb2, 0xb0, 0x4f, 0xed, 0x89, 0xa4, 0x22, 0x55, 0x51, 0x50, 0x64, 0x0d, 0xcb, 0x94, 0xe8, 0x75, 0xf1, 0xc8, 0x00, 0xa5, 0x52, 0x89, 0x44, 0x3a, 0xc5, 0xfb, 0xdf, 0xff, 0x7e, 0xee, 0xbd, 0xf7, 0x5e, 0xaa, 0xb5, 0x26, 0xd8, 0x2a, 0xd1, 0x78, 0x0a, 0xb3, 0xe7, 0xe3, 0x27, 0x3f, 0xfc, 0x21, 0x97, 0xfd, 0xcd, 0xc5, 0x68, 0xba, 0x4c, 0xcf, 0x6c, 0x61, 0x5a, 0x1d, 0xfe, 0xcf, 0xff, 0xb9, 0x8d, 0xc7, 0x1e, 0x7b, 0x8c, 0xdd, 0xbb, 0xf7, 0x10, 0x89, 0x44, 0x1c, 0xe6, 0x78, 0x03, 0xc3, 0x30, 0xc4, 0x04, 0x1f, 0x92, 0xa9, 0xd7, 0x6b, 0xdc, 0xf4, 0xd1, 0x1b, 0xb9, 0xed, 0x33, 0x5f, 0xc2, 0xe7, 0xf3, 0x71, 0xe4, 0x11, 0x47, 0xa0, 0xaa, 0x32, 0x57, 0x5f, 0x79, 0x15, 0xdf, 0xfa, 0xd6, 0xb7, 0xf8, 0xd0, 0x87, 0xfe, 0x9e, 0xef, 0x7d, 0xf7, 0xbb, 0x14, 0xf2, 0x4b, 0x8c, 0x8d, 0x8d, 0xb1, 0xb4, 0xb8, 0xc2, 0xa6, 0xa3, 0x36, 0xb1, 0x73, 0xe7, 0x1b, 0xc4, 0x23, 0x71, 0x82, 0x41, 0x8d, 0x8b, 0x2e, 0xba, 0x88, 0xb7, 0x9e, 0x76, 0x26, 0xef, 0x7c, 0xe7, 0x3b, 0x85, 0x53, 0x92, 0x04, 0x60, 0x23, 0x49, 0x3e, 0x96, 0x96, 0xca, 0x0c, 0x8f, 0x24, 0x51, 0x15, 0xe1, 0x01, 0x1d, 0x8b, 0xc5, 0xd8, 0xb7, 0x6f, 0xbf, 0x3b, 0x03, 0x79, 0x1f, 0x60, 0xb3, 0x21, 0xa1, 0x2a, 0x32, 0xc1, 0xa0, 0x82, 0x1a, 0x00, 0xd3, 0xea, 0x7a, 0x9d, 0x9f, 0xe4, 0x17, 0x45, 0xba, 0x54, 0x2a, 0x71, 0xf7, 0xdd, 0xf7, 0xd2, 0x68, 0xb4, 0xb8, 0xef, 0xbe, 0xfb, 0x08, 0x04, 0x24, 0x6a, 0xf5, 0x32, 0xd5, 0x6a, 0x19, 0x1b, 0x89, 0x66, 0xb3, 0x45, 0x20, 0xa8, 0x90, 0x4c, 0x26, 0x59, 0x59, 0x59, 0x72, 0x60, 0x66, 0x83, 0x5a, 0xb5, 0xcb, 0x51, 0x9b, 0x26, 0x50, 0x55, 0x95, 0x7d, 0x7b, 0xf7, 0xf7, 0xe9, 0x1f, 0x45, 0x67, 0x16, 0x8b, 0xc5, 0xb8, 0xef, 0x9b, 0x3f, 0x45, 0x51, 0x02, 0xb4, 0x9a, 0x06, 0xb2, 0x2c, 0xf3, 0xe7, 0x3f, 0xff, 0x89, 0xff, 0x7a, 0xf0, 0x07, 0x4c, 0xed, 0xdf, 0x45, 0x30, 0xa4, 0x62, 0xd3, 0xc4, 0xb4, 0x7a, 0xc4, 0x62, 0x11, 0xfe, 0xe3, 0x3f, 0xbe, 0xc7, 0x35, 0xd7, 0x5c, 0x4b, 0xa7, 0xdd, 0xe3, 0x8e, 0x3b, 0xee, 0xe4, 0xa4, 0x13, 0x4f, 0xe1, 0x7d, 0xd7, 0x5f, 0xc4, 0xfd, 0xf7, 0xdf, 0xcf, 0xd5, 0x57, 0xbf, 0x0f, 0x45, 0x91, 0x9d, 0xdf, 0xb7, 0x8b, 0x6d, 0x8b, 0x5d, 0xee, 0x93, 0xbf, 0xfe, 0x0d, 0x57, 0x5e, 0x79, 0x25, 0x83, 0x83, 0x83, 0xdc, 0x71, 0xc7, 0x1d, 0x5c, 0x77, 0xdd, 0x75, 0x58, 0x96, 0x45, 0x32, 0x29, 0x48, 0x32, 0x8a, 0x2c, 0x39, 0x6c, 0x54, 0xcd, 0x23, 0xa3, 0xb9, 0xc4, 0x96, 0x5a, 0xad, 0x46, 0x30, 0xa8, 0x1e, 0xf6, 0x10, 0xba, 0x07, 0xe7, 0x90, 0xd1, 0x8a, 0xe8, 0x60, 0x35, 0x4d, 0xf3, 0xf6, 0x62, 0xb9, 0x5c, 0x8e, 0xe7, 0x9e, 0x7b, 0xce, 0x63, 0x3a, 0xeb, 0xba, 0x4a, 0xb3, 0x69, 0xa0, 0x69, 0xaa, 0xa7, 0x63, 0x76, 0x19, 0xaa, 0x3d, 0x9f, 0x89, 0xec, 0x24, 0x3c, 0x6d, 0xde, 0x74, 0x34, 0x5b, 0xff, 0xf2, 0x17, 0x36, 0x1e, 0xb9, 0x81, 0xad, 0xaf, 0xbc, 0x8a, 0xa2, 0x48, 0x24, 0x62, 0x31, 0x01, 0xf3, 0xbb, 0x5a, 0x6f, 0xc9, 0xef, 0xed, 0xcc, 0x6b, 0xcd, 0x06, 0xed, 0x36, 0x28, 0x8a, 0x84, 0xa2, 0x4a, 0x0e, 0x99, 0x45, 0xf6, 0x56, 0x08, 0x9a, 0xa6, 0xd1, 0xed, 0xb5, 0x0e, 0x15, 0x49, 0x13, 0xaf, 0x09, 0xf1, 0x88, 0x6b, 0x8e, 0xdd, 0xa8, 0x4b, 0x9e, 0x71, 0x77, 0x5f, 0xee, 0x24, 0xdd, 0x35, 0xf0, 0x20, 0x74, 0xb7, 0x68, 0xbb, 0x97, 0x88, 0xd0, 0xe5, 0xfb, 0xbc, 0x09, 0xc3, 0x65, 0xfa, 0xf7, 0x1f, 0xde, 0x90, 0xa6, 0x78, 0xcc, 0x7f, 0x37, 0x30, 0xc2, 0x2d, 0xe0, 0x00, 0x7a, 0x28, 0x4c, 0xab, 0x25, 0x26, 0x60, 0xcb, 0xa4, 0x6f, 0xb5, 0x21, 0xba, 0x79, 0x39, 0x70, 0xc8, 0xee, 0xf3, 0x17, 0xbf, 0xf8, 0x25, 0xcf, 0x3e, 0xfb, 0x7b, 0xba, 0x86, 0xc9, 0x25, 0x97, 0x5c, 0xc6, 0x39, 0xe7, 0x9c, 0xc7, 0x7f, 0x3f, 0x76, 0x3f, 0x17, 0x9c, 0x7f, 0x39, 0x8a, 0xac, 0x12, 0x8d, 0xa4, 0x05, 0xb4, 0x68, 0x36, 0xd1, 0x74, 0x05, 0xbf, 0x64, 0x12, 0x90, 0x3b, 0x42, 0x6e, 0x27, 0x49, 0xcc, 0xcc, 0x74, 0x18, 0x1d, 0x55, 0x59, 0x5e, 0x32, 0x48, 0xc4, 0x45, 0xb1, 0xb4, 0x7a, 0xb2, 0x37, 0x25, 0x15, 0x0a, 0x75, 0x86, 0x87, 0xd3, 0xd4, 0x6a, 0x35, 0x91, 0xce, 0xd8, 0x6c, 0xa3, 0xa8, 0x3e, 0x07, 0x1a, 0x34, 0xe9, 0x76, 0x21, 0x97, 0x8b, 0x39, 0x28, 0x5b, 0x88, 0x7c, 0xbe, 0xca, 0xaf, 0x9f, 0x78, 0x9c, 0x4b, 0x2f, 0xbd, 0xd4, 0xbb, 0x24, 0xa3, 0xd1, 0x28, 0x4b, 0x4b, 0x45, 0xa2, 0xd1, 0xd0, 0x61, 0x3e, 0xfa, 0x86, 0xd1, 0x65, 0x64, 0x64, 0x98, 0x42, 0xa1, 0xc0, 0x23, 0x8f, 0x3c, 0xc2, 0xe5, 0x97, 0x5f, 0xee, 0x3d, 0x4f, 0xc5, 0x62, 0x05, 0xcb, 0x82, 0x68, 0x34, 0xe4, 0xed, 0x25, 0x87, 0x86, 0x86, 0xb8, 0xe7, 0x9e, 0x7b, 0x78, 0xd7, 0xbb, 0xde, 0xed, 0x35, 0x82, 0x89, 0x44, 0x82, 0xb9, 0xb9, 0x45, 0x42, 0x21, 0x71, 0xd6, 0x8a, 0xc5, 0x22, 0xbd, 0x5e, 0x97, 0x81, 0x81, 0x2c, 0xb3, 0xb3, 0xcb, 0x8c, 0x8d, 0x0d, 0x62, 0x59, 0x16, 0x0b, 0x0b, 0x4b, 0xfc, 0xea, 0x57, 0x8f, 0xd1, 0xed, 0x76, 0x79, 0xe1, 0xa5, 0xed, 0x9c, 0x72, 0xca, 0x29, 0xf8, 0x7c, 0x0a, 0xb5, 0x6a, 0x83, 0xf9, 0xf9, 0x45, 0xee, 0xbd, 0xe7, 0x7e, 0x1a, 0x8d, 0x26, 0xff, 0xf9, 0xc0, 0x8f, 0x79, 0xff, 0x07, 0xae, 0xe4, 0x86, 0x1b, 0x6e, 0xe4, 0xd4, 0x53, 0xde, 0x4e, 0xad, 0xd6, 0x44, 0x96, 0x82, 0x0e, 0x29, 0x54, 0x7c, 0x86, 0x1f, 0xbe, 0xf1, 0x4a, 0xa2, 0x31, 0x9d, 0xc5, 0xa5, 0x19, 0x62, 0xf1, 0x20, 0x7a, 0x58, 0x65, 0x76, 0x6e, 0x96, 0x78, 0x5c, 0x78, 0x79, 0x5b, 0xb6, 0x4c, 0xa7, 0xdd, 0xe5, 0x33, 0xb7, 0x7f, 0x9e, 0x7f, 0xb9, 0xeb, 0x3e, 0xaa, 0x95, 0x0e, 0xb9, 0xcc, 0x18, 0x9f, 0xbf, 0xe3, 0x2b, 0x0c, 0x0d, 0x0d, 0x73, 0xdd, 0xb5, 0x7f, 0xcf, 0xdd, 0xf7, 0xdd, 0x4d, 0xb3, 0x59, 0x67, 0xfa, 0xc0, 0x3e, 0x36, 0x6d, 0xde, 0xc8, 0x33, 0x5b, 0x7e, 0xcb, 0xc5, 0x97, 0x5d, 0x42, 0xa1, 0xb0, 0x42, 0x42, 0x8b, 0xd2, 0x68, 0xd4, 0xf8, 0xfa, 0x5d, 0x5f, 0xa1, 0xd5, 0xae, 0xd2, 0xed, 0xb6, 0xb0, 0xec, 0x0e, 0x9a, 0x1e, 0xa0, 0xd3, 0x69, 0xf1, 0xc6, 0x1b, 0xfb, 0xe8, 0x75, 0x61, 0xc3, 0x86, 0xf5, 0xc4, 0x63, 0x19, 0x5e, 0x7a, 0xf1, 0x15, 0x1e, 0x7c, 0xf0, 0x21, 0xc2, 0x7a, 0x9c, 0x0b, 0x2e, 0xb8, 0x08, 0x55, 0xef, 0x82, 0x2d, 0xf3, 0xc0, 0x0f, 0x1f, 0x44, 0x0f, 0x44, 0xb1, 0x4c, 0x99, 0x97, 0x5f, 0x7c, 0x19, 0x9f, 0x4f, 0xe2, 0x5f, 0xff, 0xf5, 0x5f, 0x29, 0xd7, 0xe7, 0x78, 0xe6, 0x7f, 0x9f, 0x66, 0xdb, 0xf6, 0x57, 0x58, 0x35, 0x3e, 0x8c, 0x2c, 0xfb, 0xb8, 0xed, 0x93, 0x9f, 0x70, 0xb8, 0x1e, 0x5d, 0x46, 0xb2, 0x69, 0x86, 0x86, 0x86, 0xf8, 0xd3, 0x2b, 0x7f, 0x46, 0x52, 0x25, 0x22, 0xb1, 0x28, 0xbb, 0xf6, 0xee, 0x16, 0xde, 0x01, 0x96, 0x45, 0x22, 0x3e, 0x40, 0x28, 0x14, 0x62, 0xef, 0xde, 0x7d, 0xf8, 0x91, 0x08, 0x05, 0x75, 0xe2, 0x91, 0x38, 0x4b, 0x4b, 0x2b, 0x82, 0x23, 0x62, 0x8a, 0x80, 0x92, 0x9f, 0xfc, 0xe4, 0xbf, 0x78, 0xcf, 0x7b, 0xaf, 0x22, 0x1a, 0x8d, 0x78, 0x43, 0xc0, 0xf2, 0x4a, 0x91, 0x40, 0x10, 0xb0, 0x61, 0x7c, 0x5c, 0xac, 0x35, 0xe6, 0xe7, 0x05, 0xa1, 0x2d, 0x12, 0x89, 0x91, 0x48, 0x24, 0x58, 0xc9, 0xcf, 0x21, 0x49, 0xa2, 0xa0, 0xb5, 0x5b, 0x06, 0xad, 0x96, 0xf0, 0xe0, 0x57, 0x95, 0xa0, 0xf0, 0x27, 0xe8, 0xd8, 0x0c, 0x8f, 0x08, 0xce, 0x97, 0x68, 0xa6, 0x25, 0x1a, 0x8d, 0x06, 0x3e, 0x9f, 0x4d, 0xa9, 0xd4, 0x40, 0xd3, 0xe4, 0xc3, 0xb2, 0x05, 0xdc, 0xf3, 0xeb, 0xae, 0xce, 0xfa, 0xc3, 0x96, 0xdc, 0xc9, 0xf8, 0xf0, 0x50, 0x28, 0xbf, 0x93, 0x75, 0x20, 0xa4, 0xd8, 0xee, 0xda, 0xc0, 0x9d, 0x98, 0xdd, 0xe6, 0xbb, 0x5f, 0xcb, 0x2e, 0x78, 0x54, 0x35, 0x2a, 0x95, 0x06, 0x81, 0xc0, 0xe1, 0x76, 0xd7, 0xfd, 0x7f, 0xdd, 0xf5, 0x64, 0x3f, 0xe9, 0xb6, 0x3f, 0xbc, 0x45, 0xdc, 0x11, 0xbd, 0xc3, 0x18, 0xee, 0xb2, 0x2c, 0xe3, 0x5b, 0xb7, 0x66, 0xc0, 0xce, 0x64, 0x32, 0x14, 0x0a, 0x05, 0xca, 0xe5, 0xb2, 0x70, 0xdd, 0x72, 0x64, 0x47, 0x2e, 0x83, 0xb8, 0xd7, 0x3b, 0x64, 0x90, 0xe1, 0xa6, 0x1d, 0xd9, 0xb6, 0x0d, 0x01, 0x41, 0x24, 0x39, 0xe1, 0xf8, 0xb7, 0xb0, 0x75, 0xeb, 0x6b, 0xe8, 0x5a, 0x94, 0x50, 0x28, 0x42, 0xa3, 0xde, 0x22, 0x14, 0xd2, 0xf8, 0xca, 0x57, 0xbe, 0xcc, 0xf0, 0xf0, 0x30, 0xb3, 0xb3, 0xb3, 0xc4, 0x62, 0x22, 0xe6, 0x30, 0x91, 0x48, 0xf0, 0xce, 0x77, 0xbe, 0x93, 0x52, 0xb1, 0x48, 0x2a, 0x29, 0x3b, 0xc9, 0x4a, 0x62, 0x92, 0xd2, 0x34, 0x01, 0x85, 0xe5, 0x57, 0x8a, 0x64, 0xb3, 0x59, 0xba, 0xbd, 0x8e, 0x03, 0x95, 0x98, 0xa8, 0x01, 0x19, 0x49, 0x02, 0xcb, 0x36, 0xb0, 0x6d, 0x0b, 0xbf, 0x04, 0xb2, 0x14, 0xf3, 0xa6, 0x97, 0x7c, 0x61, 0xc5, 0x0b, 0x09, 0xd0, 0x75, 0x5d, 0x18, 0x0a, 0xf8, 0x55, 0xe7, 0xeb, 0x25, 0x2a, 0x95, 0x1a, 0xd1, 0x48, 0x1c, 0x55, 0x55, 0xb9, 0xf6, 0xda, 0xeb, 0xf1, 0xf9, 0x7c, 0x6c, 0xd8, 0x70, 0xaa, 0x43, 0x46, 0xb2, 0x28, 0x96, 0xf2, 0xdc, 0x70, 0xc3, 0xdf, 0x83, 0x4f, 0xe8, 0xe0, 0xbb, 0x3d, 0x83, 0x9e, 0x51, 0x67, 0x60, 0x60, 0x80, 0x5a, 0xad, 0xc6, 0xca, 0x4a, 0x41, 0x18, 0xe5, 0x14, 0xca, 0xde, 0x84, 0x64, 0xda, 0x6d, 0x2c, 0x13, 0x26, 0x56, 0x8f, 0x52, 0xad, 0xd4, 0x1c, 0x22, 0x8e, 0xd8, 0x75, 0xa8, 0x4a, 0x90, 0xa0, 0x1e, 0x26, 0x99, 0x4c, 0x7a, 0x0f, 0x84, 0x3b, 0xad, 0x05, 0x02, 0x01, 0xa6, 0xa6, 0xa6, 0xc0, 0xdf, 0x42, 0x0b, 0x89, 0x80, 0x8a, 0x27, 0x9f, 0xfc, 0x0d, 0x97, 0x5f, 0xfe, 0x2e, 0xea, 0xb5, 0x26, 0xb2, 0x2c, 0xf3, 0xa9, 0x4f, 0xdd, 0xce, 0x71, 0x47, 0x6f, 0x46, 0xd3, 0x34, 0xde, 0xf1, 0x8e, 0xb3, 0x88, 0xc7, 0xa3, 0x4e, 0xea, 0x51, 0x99, 0xe3, 0x8e, 0xdb, 0x44, 0xbd, 0x5e, 0xc5, 0x34, 0x03, 0xdc, 0x7f, 0xff, 0xfd, 0x54, 0xab, 0x55, 0xb6, 0x6d, 0x7f, 0x15, 0x5d, 0xd7, 0xb9, 0xeb, 0xae, 0xaf, 0x71, 0xeb, 0xad, 0xb7, 0x72, 0xcb, 0x27, 0x3e, 0x89, 0xa2, 0xaa, 0x74, 0x0d, 0x83, 0xbb, 0xef, 0xf9, 0x26, 0xb7, 0xdf, 0x7e, 0x3b, 0xaa, 0x2a, 0x3b, 0x1e, 0xc5, 0x2d, 0x5a, 0x4e, 0xc8, 0x83, 0xab, 0x89, 0xfc, 0xec, 0x67, 0x3f, 0xcb, 0xe7, 0x3e, 0xf7, 0x39, 0x6f, 0xe7, 0x2c, 0x49, 0x7e, 0xcf, 0xe1, 0xcb, 0x8d, 0x3b, 0x75, 0x0d, 0x0f, 0x3c, 0x4f, 0x63, 0xc7, 0xf0, 0xe1, 0x50, 0xc7, 0x7a, 0xc8, 0x64, 0xc2, 0x34, 0x4d, 0xcc, 0x9e, 0x9f, 0x1f, 0xff, 0xf8, 0xc7, 0xec, 0xde, 0xbd, 0x9b, 0x6f, 0x7f, 0xfb, 0xdb, 0xcc, 0xce, 0xce, 0x7a, 0xbe, 0xf9, 0x2e, 0x1b, 0x3e, 0x9f, 0xcf, 0x7b, 0xcf, 0x9a, 0xdf, 0xef, 0xe7, 0xc8, 0x23, 0x8f, 0x44, 0x55, 0x55, 0x5e, 0x7c, 0xf1, 0x45, 0xfc, 0x92, 0x4d, 0x36, 0x9b, 0x15, 0x7c, 0x89, 0x7c, 0xfe, 0xaf, 0xb4, 0x9d, 0xaa, 0xdf, 0xe7, 0x35, 0x50, 0xad, 0x56, 0x87, 0x53, 0x4e, 0x39, 0x89, 0xed, 0x3b, 0x5e, 0xa3, 0x50, 0x68, 0x13, 0x8f, 0x2b, 0x14, 0xca, 0x5d, 0x34, 0x4d, 0x78, 0x7e, 0xbb, 0x8c, 0xe8, 0x7a, 0xbd, 0xee, 0x69, 0x42, 0x9b, 0xcd, 0xfa, 0x61, 0x52, 0x11, 0x77, 0x27, 0xee, 0x4a, 0xcb, 0x14, 0x25, 0xe8, 0x4d, 0xd6, 0xa1, 0xa0, 0xd8, 0xd3, 0x75, 0xbb, 0x26, 0xf5, 0x7a, 0x5d, 0x90, 0xa2, 0xa2, 0xaa, 0x77, 0x5e, 0xdc, 0x55, 0x49, 0x3f, 0x09, 0x26, 0x12, 0xd5, 0x3d, 0xcd, 0xaa, 0x6b, 0xe7, 0x58, 0xaf, 0xd7, 0x3d, 0x44, 0x23, 0x18, 0xd0, 0xbc, 0x5d, 0x99, 0x3b, 0xf5, 0x98, 0xa6, 0xe9, 0xb1, 0xc4, 0xc1, 0xcf, 0xca, 0xca, 0x0a, 0xe9, 0x74, 0xda, 0x0b, 0x9d, 0xd0, 0x34, 0x8d, 0x56, 0xab, 0xe5, 0x4c, 0xf1, 0xa6, 0x17, 0x1a, 0xd1, 0xeb, 0xf5, 0xc8, 0x66, 0x85, 0xe4, 0xe9, 0x50, 0x58, 0x8e, 0x48, 0x9c, 0xbb, 0xe5, 0x96, 0x5b, 0xb0, 0x2c, 0xd1, 0xc1, 0x1f, 0x7f, 0xdc, 0x89, 0x2c, 0x2d, 0x2d, 0x91, 0xc9, 0x64, 0x78, 0xe1, 0xb9, 0xed, 0xbc, 0xf5, 0xad, 0x6f, 0x75, 0xc8, 0x69, 0x5d, 0xae, 0xbd, 0xf6, 0x5a, 0xfe, 0xfb, 0xbf, 0x1f, 0xc1, 0xef, 0xf7, 0x73, 0xe5, 0x95, 0x57, 0xa2, 0x69, 0x41, 0xba, 0x5d, 0x03, 0x3d, 0x1c, 0x62, 0x6e, 0x6e, 0x9a, 0x60, 0x48, 0xa1, 0xd9, 0xaa, 0x33, 0x38, 0x28, 0xd8, 0xdd, 0x76, 0xaf, 0x45, 0x3c, 0x1e, 0xa7, 0x5e, 0x6b, 0xa2, 0x28, 0xe2, 0x62, 0x2c, 0x97, 0x2b, 0x74, 0x0d, 0xb1, 0xe7, 0xfc, 0xc1, 0x83, 0x0f, 0x70, 0xc5, 0x15, 0x57, 0xf0, 0xd8, 0x63, 0x8f, 0x71, 0xfe, 0xf9, 0xe7, 0x23, 0xcb, 0x32, 0xe1, 0x70, 0xd8, 0x73, 0x3c, 0xfc, 0xe5, 0x2f, 0x1f, 0xe3, 0xec, 0xb3, 0xcf, 0x67, 0xcb, 0x96, 0xdf, 0x72, 0xd6, 0x59, 0xe7, 0x10, 0x0e, 0x87, 0xfa, 0xee, 0x18, 0x83, 0xe3, 0x8e, 0x3b, 0x96, 0xeb, 0xae, 0xbb, 0x8e, 0x7f, 0xff, 0xf7, 0x7f, 0x67, 0xd7, 0xae, 0x5d, 0x3c, 0xf6, 0xd8, 0x63, 0xb4, 0x5a, 0x2d, 0x2e, 0xbb, 0xec, 0x6f, 0x50, 0x14, 0x99, 0xa0, 0x1a, 0xa0, 0x5c, 0x6e, 0xa0, 0xaa, 0x3e, 0x46, 0x46, 0x46, 0xd8, 0xbf, 0x7f, 0x96, 0x5c, 0x2e, 0x45, 0xab, 0x25, 0x98, 0xf0, 0xdf, 0xf9, 0xee, 0xfd, 0x9e, 0x5d, 0xe7, 0xd5, 0x57, 0x5f, 0xed, 0x7d, 0x36, 0xee, 0x5e, 0xb4, 0x8d, 0xf0, 0xb7, 0xef, 0xb4, 0x3a, 0x48, 0xfe, 0x00, 0x7a, 0x50, 0xe7, 0xfb, 0xdf, 0x7f, 0x00, 0xdb, 0xf2, 0x21, 0xf9, 0x64, 0xf0, 0x05, 0x79, 0xe1, 0x85, 0x17, 0x38, 0xfe, 0xf8, 0xe3, 0xd1, 0x82, 0x22, 0x30, 0xa6, 0x56, 0xa9, 0x92, 0xc9, 0x64, 0xa9, 0xd5, 0x6a, 0xfc, 0xd3, 0x3f, 0xdd, 0xc4, 0xdd, 0x77, 0xdf, 0xcd, 0x4d, 0x1f, 0xfd, 0x08, 0xdf, 0xfd, 0xee, 0xb7, 0xe9, 0x18, 0x4d, 0xfe, 0xfc, 0xe7, 0x97, 0x79, 0xfc, 0xf1, 0x5f, 0x72, 0xd9, 0x65, 0x97, 0xe1, 0x53, 0x0d, 0x7e, 0xf8, 0xc3, 0x1f, 0xd2, 0x68, 0xd6, 0x09, 0x85, 0x02, 0x74, 0x7b, 0x2d, 0x4c, 0xb3, 0x47, 0xa9, 0x24, 0xac, 0x79, 0x7d, 0xa8, 0x2c, 0x2d, 0x09, 0xb4, 0x32, 0xa0, 0x6a, 0x14, 0x8b, 0x65, 0x6a, 0xb5, 0x06, 0x03, 0xb9, 0x21, 0xae, 0xbf, 0xfe, 0xef, 0xf8, 0xf6, 0xbf, 0xfd, 0x80, 0x9f, 0xfe, 0xf4, 0x61, 0x0c, 0xa3, 0xc7, 0x93, 0xbf, 0xfe, 0x2d, 0x17, 0x5e, 0x78, 0x11, 0xbf, 0xdb, 0xf2, 0x07, 0x36, 0x6f, 0x3e, 0x56, 0x98, 0x96, 0xf8, 0xe7, 0xf8, 0xfc, 0xe7, 0x3f, 0xef, 0xc8, 0xdc, 0xc2, 0x6c, 0xdb, 0xfe, 0x2a, 0x9b, 0x37, 0x6f, 0x66, 0xe7, 0xce, 0xed, 0xb4, 0xea, 0x6d, 0xf4, 0x50, 0x88, 0xc9, 0xc9, 0x49, 0x66, 0x67, 0xe7, 0xf9, 0xe1, 0x0f, 0xff, 0x13, 0x1f, 0x02, 0xf9, 0x79, 0xf7, 0xbb, 0xaf, 0x10, 0x85, 0x29, 0x60, 0x12, 0x8d, 0x46, 0x69, 0xb7, 0x0c, 0x0c, 0xa3, 0xc7, 0xcf, 0x1e, 0x7d, 0x4c, 0xac, 0x32, 0x93, 0x69, 0xde, 0x71, 0xe6, 0xd9, 0xdc, 0xfe, 0x99, 0x4f, 0x92, 0xc9, 0xa4, 0x18, 0x1c, 0x1c, 0x24, 0x1a, 0x11, 0xc5, 0xf6, 0xd6, 0x5b, 0x3e, 0x89, 0xd1, 0x6d, 0x93, 0x4e, 0xa7, 0x49, 0x84, 0x64, 0x52, 0xa9, 0x14, 0xaf, 0x6d, 0xdf, 0x26, 0xd4, 0x06, 0xa6, 0xe0, 0xbb, 0x4c, 0x1f, 0x38, 0x20, 0x3e, 0xc7, 0xee, 0xa1, 0x55, 0x5b, 0xbd, 0x5e, 0xf7, 0x56, 0x5a, 0x85, 0x82, 0xf8, 0xfd, 0x0d, 0xe3, 0x90, 0x67, 0x44, 0x34, 0x1a, 0x17, 0xe7, 0xaa, 0x29, 0x56, 0x27, 0xb9, 0x5c, 0x8e, 0xd7, 0xf7, 0xec, 0xe2, 0x84, 0x13, 0x4e, 0xe0, 0x3d, 0xef, 0xb9, 0x8a, 0x5b, 0x6f, 0xbd, 0x05, 0xcb, 0x36, 0x19, 0x1c, 0xcc, 0x39, 0x8d, 0xab, 0xc4, 0xc2, 0xdc, 0x41, 0xef, 0x33, 0x75, 0x43, 0x4d, 0xfa, 0xe1, 0x69, 0xb7, 0xc8, 0xb9, 0xf2, 0x57, 0xd7, 0xa3, 0xc2, 0x53, 0xbd, 0x28, 0x86, 0xa3, 0x08, 0x11, 0x53, 0xba, 0x0f, 0xc9, 0xe1, 0x63, 0x38, 0x28, 0x98, 0x14, 0xf4, 0x26, 0x6c, 0xd7, 0xc0, 0xc8, 0x4d, 0x39, 0x6c, 0x36, 0xc5, 0x33, 0xef, 0xa2, 0x88, 0xee, 0x6b, 0xf4, 0xcb, 0x73, 0xfb, 0xbf, 0x9f, 0x9b, 0x89, 0xe1, 0x0e, 0x3b, 0x8d, 0x46, 0xc3, 0xbb, 0x6f, 0x6a, 0xb5, 0x26, 0x96, 0x05, 0x99, 0x4c, 0xdc, 0x71, 0x9d, 0x6b, 0x30, 0x30, 0x90, 0x62, 0x65, 0xa5, 0x80, 0xae, 0x07, 0x3c, 0xc2, 0x6c, 0x3f, 0xdc, 0xef, 0xee, 0xd1, 0xdd, 0x86, 0xd5, 0x95, 0x76, 0xfa, 0x56, 0x8d, 0x25, 0xed, 0x72, 0xb9, 0x4c, 0x2e, 0x97, 0xc3, 0xb6, 0x6d, 0x52, 0xa9, 0x14, 0x95, 0x4a, 0xc5, 0x83, 0x1c, 0x5c, 0x09, 0x99, 0xbb, 0x1b, 0x74, 0x3b, 0x14, 0x45, 0x51, 0x68, 0x98, 0x36, 0xa1, 0xa0, 0xce, 0xc1, 0x83, 0x8b, 0x7c, 0xe2, 0xe6, 0xdb, 0x08, 0x85, 0x74, 0xbe, 0x75, 0xdf, 0xb7, 0x79, 0xe0, 0x81, 0x1f, 0x71, 0xc6, 0xe9, 0x67, 0xf0, 0xcc, 0xef, 0x9e, 0x61, 0x71, 0x71, 0x91, 0x4c, 0x26, 0xe3, 0x85, 0x2f, 0x5c, 0x78, 0xc1, 0x05, 0x84, 0x34, 0x8d, 0x44, 0x22, 0x41, 0xb9, 0x38, 0x83, 0xa6, 0x69, 0x34, 0xea, 0x2d, 0x72, 0xb9, 0x1c, 0xf7, 0xdc, 0x73, 0x0f, 0x3b, 0x76, 0xbc, 0xee, 0x04, 0x86, 0x54, 0xf8, 0xc1, 0x0f, 0x7e, 0x80, 0x69, 0x76, 0x1d, 0x9d, 0xad, 0x0f, 0x9f, 0xdf, 0xc6, 0xb2, 0xba, 0xf8, 0xfc, 0x62, 0x92, 0xb6, 0x7a, 0xc2, 0x41, 0xed, 0xa1, 0x87, 0x7e, 0x82, 0x2c, 0xcb, 0xdc, 0xf7, 0xad, 0x7b, 0xd8, 0xb9, 0x73, 0x27, 0x57, 0x5f, 0x7d, 0x35, 0x0f, 0x3d, 0xf4, 0x10, 0xef, 0xbb, 0xe6, 0x3a, 0x64, 0x59, 0xe6, 0xee, 0xbb, 0xef, 0x25, 0x12, 0x89, 0x52, 0x2a, 0x56, 0xc8, 0x66, 0x07, 0xa8, 0x56, 0xeb, 0xfc, 0xe0, 0x07, 0x3f, 0xa0, 0xde, 0x50, 0xc0, 0x27, 0x3c, 0x7b, 0x35, 0x5d, 0xc8, 0x24, 0xf0, 0x99, 0xf8, 0xfd, 0x70, 0xc3, 0x0d, 0xff, 0x40, 0xbd, 0x22, 0x7c, 0x85, 0xe3, 0xf1, 0x04, 0x8a, 0xa2, 0x30, 0x73, 0x60, 0x81, 0x60, 0x50, 0x25, 0x18, 0x14, 0xf2, 0xa6, 0xae, 0xd9, 0x60, 0x74, 0x64, 0xc4, 0x99, 0x50, 0x4a, 0x18, 0x46, 0x17, 0x1f, 0x12, 0xcf, 0x3d, 0xf7, 0x47, 0x8e, 0x3f, 0xfe, 0x78, 0x8e, 0x38, 0x6a, 0x23, 0x57, 0x5d, 0x75, 0x15, 0xa7, 0x9c, 0x72, 0x0a, 0x86, 0x61, 0x70, 0xe3, 0x8d, 0x37, 0x32, 0x3f, 0x3f, 0x7f, 0x68, 0x5a, 0xb5, 0x5b, 0x9e, 0xc4, 0x69, 0x71, 0x21, 0x4f, 0x30, 0x24, 0x62, 0x3e, 0x7b, 0x5d, 0x93, 0xff, 0xf8, 0xfe, 0xf7, 0xf9, 0xd2, 0xe7, 0xbf, 0xc8, 0x3f, 0xff, 0xf3, 0x3f, 0xb3, 0x70, 0x70, 0x8e, 0xcf, 0x7c, 0xe6, 0xd3, 0x28, 0x8a, 0xc2, 0xd9, 0x67, 0x9f, 0xc5, 0xf6, 0x1d, 0xaf, 0x11, 0x8b, 0xc5, 0x28, 0x14, 0x5a, 0x8e, 0x4d, 0xad, 0xe3, 0x75, 0x5c, 0xab, 0x10, 0x0e, 0x87, 0xb9, 0xe2, 0x8a, 0x2b, 0x78, 0xf0, 0x27, 0x3f, 0xa6, 0x51, 0x6f, 0xd1, 0xee, 0x34, 0x69, 0xb7, 0xdb, 0x3c, 0xf0, 0xc0, 0x03, 0x84, 0xc3, 0x3a, 0x1f, 0xfd, 0xe8, 0x47, 0x99, 0x9a, 0xda, 0xcf, 0x67, 0x3f, 0xfb, 0x69, 0xb4, 0xb0, 0xce, 0x9d, 0x77, 0xde, 0x49, 0xa5, 0xd2, 0x22, 0x12, 0x09, 0xf0, 0xe9, 0x4f, 0x7f, 0x9a, 0x91, 0x91, 0x11, 0xba, 0xdd, 0x2e, 0xb7, 0xde, 0x7a, 0x2b, 0x95, 0x4a, 0x15, 0xcb, 0x02, 0x5d, 0x0f, 0x7a, 0x0d, 0x89, 0x1b, 0x30, 0x22, 0x49, 0x12, 0xdd, 0x4e, 0x17, 0x45, 0x91, 0x0f, 0x0b, 0x56, 0xe9, 0x4f, 0x07, 0x53, 0x94, 0x20, 0xe7, 0x9c, 0x73, 0x0e, 0x8f, 0x3c, 0xf2, 0x08, 0xd1, 0x68, 0xd4, 0x99, 0x92, 0xe6, 0xbc, 0x09, 0x7f, 0x64, 0x78, 0x8c, 0x5a, 0xad, 0x46, 0x34, 0x1a, 0x65, 0xff, 0xfe, 0xfd, 0x04, 0x83, 0xa2, 0xb3, 0x3e, 0xfd, 0xf4, 0xd3, 0x99, 0x9e, 0x9e, 0xa6, 0xd1, 0xac, 0xb2, 0x71, 0xe3, 0x46, 0xb6, 0x6d, 0xdb, 0x46, 0xb9, 0x5c, 0xf6, 0xf4, 0xdc, 0xee, 0x6e, 0x2a, 0xa4, 0xc8, 0x94, 0xcb, 0x2d, 0x72, 0xb9, 0x38, 0x96, 0x25, 0xcc, 0x65, 0x56, 0xf2, 0x4b, 0x1e, 0xeb, 0xb9, 0x5c, 0xeb, 0x78, 0x09, 0x4a, 0xee, 0x21, 0x6b, 0x36, 0x9b, 0x0e, 0x8c, 0x06, 0xaa, 0x7a, 0x08, 0xa6, 0xee, 0x27, 0xf0, 0x1d, 0xb2, 0xa1, 0x35, 0x3d, 0xed, 0xb9, 0x69, 0x9a, 0xf4, 0xba, 0x96, 0x33, 0x2d, 0x47, 0x08, 0x87, 0xc3, 0xd4, 0x1b, 0x05, 0xcf, 0x04, 0xa2, 0x7f, 0x35, 0xe1, 0xba, 0xbd, 0xf9, 0x25, 0xbc, 0x70, 0x07, 0x97, 0x30, 0xe3, 0x4e, 0xf7, 0x8a, 0xa2, 0x60, 0xf6, 0x6c, 0xef, 0x5c, 0xb9, 0x30, 0x6c, 0xbf, 0x13, 0x5e, 0x24, 0x22, 0x9a, 0x60, 0xb7, 0xe9, 0x72, 0xb5, 0xae, 0xf1, 0x78, 0xdc, 0x21, 0xf6, 0xd8, 0x8e, 0xa9, 0x8a, 0x49, 0xb5, 0x5a, 0xf5, 0xdc, 0xb2, 0xdc, 0x46, 0x3c, 0x14, 0x52, 0x39, 0xee, 0xb8, 0x13, 0x78, 0xf6, 0xd9, 0x67, 0xf9, 0xdb, 0xbf, 0xfd, 0x5b, 0x0c, 0xa3, 0x4b, 0xb1, 0x58, 0xc4, 0xb6, 0x44, 0x97, 0x7f, 0xde, 0x3b, 0x2e, 0xf3, 0x0a, 0xe8, 0x39, 0xe7, 0x9c, 0x27, 0xa4, 0x46, 0x85, 0x32, 0xb5, 0x5a, 0x8d, 0xe1, 0xe1, 0x61, 0x82, 0x21, 0x95, 0x4b, 0x2f, 0xbd, 0x98, 0x7c, 0x71, 0x99, 0x58, 0x34, 0x8c, 0xae, 0x87, 0x58, 0xc9, 0x1f, 0x44, 0x96, 0x25, 0x92, 0xa9, 0x38, 0xe1, 0xa0, 0xc2, 0xde, 0xbd, 0x07, 0x49, 0x24, 0x04, 0x14, 0x9e, 0x5f, 0x29, 0x92, 0x4e, 0x67, 0x89, 0x46, 0xa3, 0xb4, 0x5a, 0x6d, 0xca, 0x4d, 0x71, 0x89, 0xbb, 0xc1, 0x14, 0x82, 0x4b, 0xd0, 0x23, 0x1a, 0xd5, 0xa8, 0x56, 0x9b, 0x0c, 0x0e, 0xa6, 0xf9, 0xc4, 0x27, 0x3e, 0xc1, 0xed, 0xb7, 0xdf, 0x8e, 0xcf, 0xe7, 0xf3, 0x1a, 0x92, 0x5a, 0xad, 0xc6, 0x99, 0x67, 0x9e, 0x89, 0x24, 0x49, 0x6c, 0xdd, 0xba, 0x95, 0x66, 0xb3, 0x49, 0xa5, 0xd2, 0xe4, 0xea, 0xab, 0xdf, 0x45, 0xa1, 0x50, 0xe0, 0x8f, 0x7f, 0xfc, 0xa3, 0x28, 0x20, 0x6d, 0x31, 0x58, 0x24, 0x93, 0x49, 0xca, 0xe5, 0xb2, 0xc3, 0xad, 0x69, 0x78, 0xfb, 0xda, 0x9b, 0x3f, 0xf1, 0x4f, 0x5e, 0x42, 0xe1, 0x8f, 0x7e, 0xf4, 0x23, 0x76, 0xee, 0xdc, 0x89, 0x65, 0x59, 0x1c, 0x73, 0xcc, 0x31, 0xec, 0xda, 0xb5, 0x0b, 0x7f, 0x20, 0x48, 0x61, 0xb9, 0xc4, 0xe0, 0xc8, 0x00, 0x2b, 0x8b, 0x2b, 0xf4, 0xba, 0x26, 0xbf, 0xdb, 0xf2, 0x7b, 0x8a, 0x85, 0x32, 0xaf, 0xbc, 0xf2, 0x17, 0x4e, 0x3f, 0xfd, 0x5c, 0x6a, 0x4e, 0x4e, 0xf6, 0x25, 0x97, 0x5c, 0xc2, 0x8d, 0x1f, 0xba, 0x81, 0x33, 0xcf, 0x3c, 0x9b, 0x0f, 0x5c, 0xff, 0x7e, 0x3e, 0xf6, 0xb1, 0x8f, 0x71, 0xcc, 0xf1, 0xc7, 0xb0, 0x75, 0xeb, 0x5f, 0xa8, 0x37, 0x84, 0x7d, 0xf2, 0x1f, 0xfe, 0xf0, 0x7b, 0x56, 0xf2, 0xcb, 0x0c, 0x0e, 0xe6, 0x98, 0x9b, 0x9b, 0x63, 0xe6, 0xe0, 0x3e, 0x9a, 0xcd, 0xba, 0xb8, 0xff, 0x1a, 0x65, 0x9a, 0xcd, 0x06, 0x89, 0x44, 0x8c, 0x6e, 0xaf, 0xe3, 0x3c, 0x4f, 0x82, 0x37, 0x54, 0x2e, 0x55, 0x29, 0x97, 0xab, 0x0c, 0x0d, 0x8d, 0x70, 0xeb, 0x27, 0x6f, 0x23, 0x91, 0x48, 0x91, 0x4e, 0x67, 0x09, 0xaa, 0x09, 0xe6, 0xe7, 0x0f, 0x52, 0xa9, 0x54, 0x18, 0x1f, 0x5b, 0x4d, 0xa5, 0x52, 0x23, 0x16, 0x4d, 0x30, 0x35, 0xb5, 0x9f, 0xd5, 0xab, 0x57, 0xd3, 0x32, 0x17, 0xb8, 0xe6, 0x9a, 0x6b, 0x38, 0xfe, 0x84, 0x63, 0xd9, 0xf2, 0xf4, 0x33, 0x68, 0x91, 0x10, 0xcd, 0x46, 0x0b, 0xc5, 0x69, 0xdc, 0xf5, 0x80, 0x70, 0xb5, 0xcb, 0xaf, 0x94, 0xd1, 0x75, 0x9d, 0xdb, 0x6e, 0xfb, 0x14, 0xe7, 0x9d, 0x7b, 0x01, 0x27, 0xbf, 0xe5, 0x2d, 0x24, 0xe2, 0x09, 0xe4, 0x60, 0x97, 0x95, 0xa5, 0x12, 0xb9, 0x81, 0x2c, 0x4b, 0x8b, 0xcb, 0xfc, 0xfc, 0xe7, 0xbf, 0xe4, 0xfe, 0xfb, 0xbf, 0xc3, 0xf9, 0xe7, 0x5f, 0xc0, 0xa3, 0x8f, 0x3e, 0x8a, 0x8d, 0xc1, 0x45, 0x17, 0x5c, 0x48, 0x26, 0x93, 0x12, 0x4d, 0xa9, 0x6d, 0xf2, 0xc8, 0x23, 0x8f, 0x90, 0x49, 0xa6, 0x38, 0x7a, 0xf3, 0x26, 0xfe, 0xf5, 0xab, 0x5f, 0xe1, 0xa4, 0x93, 0x4e, 0x42, 0x56, 0x05, 0x92, 0x74, 0xe5, 0x7b, 0xae, 0x16, 0x0e, 0x9a, 0xce, 0xd4, 0x7b, 0xdb, 0xa7, 0x3e, 0x2b, 0x56, 0x2f, 0xce, 0x84, 0xb9, 0xb2, 0xb2, 0x82, 0x2c, 0xcb, 0x8c, 0x8d, 0x8d, 0x71, 0xe0, 0x80, 0x50, 0x23, 0x75, 0xbb, 0x3d, 0x34, 0x4d, 0x63, 0x79, 0x79, 0x99, 0x44, 0x22, 0xc5, 0xa3, 0x8f, 0x3e, 0xca, 0xdb, 0x4e, 0x7b, 0x3b, 0x93, 0x93, 0x93, 0x48, 0x01, 0xe1, 0xab, 0x7f, 0xe3, 0x8d, 0x1f, 0xe2, 0xab, 0x5f, 0xfd, 0x0a, 0xed, 0x4e, 0x8b, 0x44, 0x22, 0x46, 0xab, 0xd5, 0xa0, 0xdd, 0x36, 0x08, 0x6b, 0xba, 0x27, 0x1f, 0xed, 0x97, 0xa7, 0xba, 0x9c, 0x9b, 0x37, 0xeb, 0xb7, 0xdd, 0xc6, 0xd9, 0x5d, 0x01, 0xd9, 0xbe, 0xb6, 0x77, 0x57, 0xd4, 0xaa, 0xa2, 0xc0, 0xc6, 0xe3, 0x09, 0xaa, 0x55, 0x11, 0xe6, 0x24, 0xf9, 0x03, 0x1e, 0xa2, 0xe6, 0xca, 0x6c, 0xdd, 0xe7, 0x58, 0x34, 0x22, 0x9a, 0xd7, 0x48, 0xf4, 0x4b, 0xde, 0xdc, 0xfb, 0xdd, 0xb5, 0x3b, 0x76, 0x1b, 0x59, 0xf7, 0x35, 0x5c, 0x02, 0xec, 0xca, 0x4a, 0x99, 0xa1, 0xa1, 0x0c, 0xad, 0x56, 0x8b, 0x52, 0xa9, 0x4e, 0x3c, 0xae, 0x1f, 0x1a, 0xb8, 0x5a, 0x2d, 0x2c, 0xab, 0xe7, 0x11, 0xfe, 0xfa, 0x9b, 0x14, 0x17, 0x01, 0xe8, 0x97, 0xce, 0xba, 0x28, 0x83, 0xef, 0x84, 0xe3, 0xd6, 0xd9, 0x87, 0x8c, 0x53, 0xaa, 0x5e, 0xd2, 0x8c, 0x37, 0x85, 0xf7, 0xed, 0x07, 0xfa, 0x35, 0xb3, 0xa1, 0x50, 0x88, 0x46, 0xb7, 0xc3, 0x27, 0x6f, 0xb9, 0x8d, 0x7f, 0xfd, 0xd7, 0xbb, 0x59, 0x5a, 0x5a, 0xe1, 0x67, 0x8f, 0xfe, 0x1c, 0x5d, 0x17, 0xf2, 0xb0, 0xc9, 0xc9, 0x49, 0x16, 0x17, 0x17, 0xc9, 0x66, 0xb3, 0xbc, 0xfd, 0xed, 0x6f, 0xe7, 0xa9, 0xa7, 0x9e, 0xa2, 0xd1, 0x68, 0x70, 0xe9, 0xa5, 0x97, 0x92, 0x4c, 0x26, 0x29, 0xe4, 0xf3, 0xbc, 0xf4, 0xf2, 0xef, 0x78, 0xcb, 0x5b, 0xde, 0xc6, 0x57, 0xbe, 0xf2, 0x05, 0x6e, 0xbb, 0xed, 0x73, 0xfc, 0xe6, 0x37, 0xbf, 0x02, 0x7c, 0x04, 0x83, 0x41, 0x2e, 0xbf, 0xfc, 0x72, 0x47, 0x06, 0x63, 0x62, 0xdb, 0xa6, 0x63, 0xfa, 0xd2, 0xc3, 0x46, 0x14, 0x5c, 0x45, 0x91, 0x68, 0x35, 0x71, 0xd8, 0xca, 0xe2, 0x83, 0x1a, 0x1d, 0x1d, 0xf1, 0x26, 0x2a, 0xd3, 0xea, 0xa2, 0x6b, 0x22, 0xdb, 0xfa, 0x86, 0x1b, 0x3e, 0xcc, 0xbf, 0x7f, 0xef, 0xfb, 0xec, 0xd9, 0xb3, 0x8f, 0x91, 0x91, 0x51, 0x4e, 0x39, 0xe5, 0x14, 0x76, 0x6c, 0x7f, 0x1d, 0x10, 0x9d, 0xcf, 0xbb, 0xaf, 0x78, 0x27, 0xf7, 0xdd, 0x77, 0x37, 0x07, 0x17, 0xe7, 0xe9, 0x1a, 0x06, 0x63, 0xe3, 0xc3, 0x7c, 0xed, 0xeb, 0x5f, 0xe5, 0x13, 0x37, 0x7f, 0x94, 0x9b, 0x6f, 0xbe, 0x99, 0xbb, 0xee, 0xba, 0x8b, 0x52, 0xb1, 0xc2, 0x57, 0xbf, 0xfa, 0x55, 0x3e, 0xf1, 0x89, 0x5b, 0x51, 0x55, 0x85, 0x48, 0x24, 0x42, 0x34, 0x16, 0x64, 0x66, 0x66, 0x81, 0x70, 0x58, 0x63, 0x7c, 0x6c, 0x82, 0x2f, 0x7e, 0xf1, 0x4b, 0x84, 0x42, 0x1a, 0x67, 0x9d, 0x79, 0x2e, 0xc3, 0xc3, 0x83, 0x2c, 0x2c, 0x2e, 0xf1, 0xe4, 0x93, 0x4f, 0x7a, 0xe6, 0x18, 0x67, 0x9e, 0x71, 0x06, 0xf8, 0x7c, 0x9c, 0x72, 0xca, 0x29, 0xfc, 0xf1, 0x0f, 0x7f, 0x20, 0x9b, 0x4d, 0xb0, 0xbc, 0x5c, 0x22, 0x95, 0x8a, 0x62, 0xdb, 0x50, 0x2e, 0x57, 0x19, 0x1e, 0x1a, 0xa6, 0x5e, 0xaf, 0x53, 0x2a, 0x55, 0x88, 0x84, 0x35, 0x8e, 0x3a, 0xea, 0x28, 0xf6, 0xee, 0xdd, 0xcd, 0xc4, 0xc4, 0x2a, 0xfe, 0xf4, 0xe7, 0x57, 0x49, 0x26, 0x43, 0x44, 0xa3, 0x51, 0x16, 0x16, 0x96, 0x90, 0x65, 0x9d, 0x33, 0xcf, 0x3c, 0x13, 0x45, 0x91, 0x98, 0x9e, 0x9e, 0x66, 0x68, 0x78, 0x80, 0x66, 0xb3, 0x89, 0xe4, 0x40, 0xcb, 0xcf, 0x3c, 0xf3, 0x0c, 0x89, 0x44, 0x8c, 0xc5, 0xc5, 0x12, 0x17, 0x5c, 0x70, 0x16, 0x7e, 0x09, 0x87, 0xf5, 0x2f, 0x42, 0x49, 0x9e, 0x7d, 0xf6, 0x45, 0x4e, 0x3e, 0xf9, 0x38, 0x2e, 0xbc, 0xf0, 0x42, 0xbe, 0xf8, 0xc5, 0x3b, 0xb9, 0xf7, 0xde, 0x7b, 0x78, 0xe8, 0xa1, 0x87, 0xd8, 0xbd, 0x7b, 0x37, 0x0b, 0x0b, 0xcb, 0xe8, 0x7a, 0x80, 0x56, 0xab, 0x83, 0x24, 0xf9, 0x68, 0xb5, 0x6c, 0xc7, 0xb0, 0xc3, 0xef, 0xa5, 0x5a, 0x79, 0x30, 0x4f, 0x1f, 0xc9, 0xa3, 0xdf, 0x55, 0xcd, 0xb6, 0x6d, 0xd2, 0xe9, 0xb4, 0x77, 0xe0, 0x8a, 0xc5, 0xb2, 0x13, 0xcc, 0x91, 0xe4, 0x98, 0x63, 0x8e, 0x61, 0xe7, 0x8e, 0x3d, 0x14, 0x8b, 0x45, 0x0f, 0x92, 0x2e, 0x95, 0xaa, 0x4c, 0x4e, 0xae, 0xa2, 0x5a, 0xad, 0x12, 0x89, 0x44, 0x58, 0x5a, 0x5a, 0xe4, 0xad, 0x6f, 0x7d, 0x2b, 0xaf, 0xbc, 0xf2, 0x8a, 0x07, 0xb7, 0x0b, 0x2d, 0xb2, 0x90, 0x15, 0xb6, 0x6a, 0xa2, 0xc8, 0x8d, 0x8f, 0x0f, 0xa3, 0x69, 0x1a, 0x92, 0xec, 0xa3, 0x5c, 0x2e, 0x93, 0xcf, 0xe7, 0x69, 0xb7, 0x2d, 0xe1, 0x14, 0xe9, 0x1c, 0x30, 0xc0, 0x83, 0xc4, 0xdc, 0x20, 0x87, 0x76, 0xbb, 0xfd, 0x57, 0x1e, 0xec, 0x2e, 0x29, 0x4d, 0x4c, 0xd6, 0x46, 0x5f, 0x23, 0x23, 0x56, 0x28, 0x46, 0xe7, 0x10, 0x94, 0x16, 0x8d, 0x85, 0x0e, 0x2b, 0xe0, 0xee, 0x6a, 0xc1, 0x5d, 0x2b, 0x58, 0x76, 0xcf, 0x63, 0xdc, 0xb6, 0x5a, 0x2d, 0x6a, 0xb5, 0x9a, 0x07, 0xbd, 0xf5, 0x17, 0x76, 0x17, 0xb1, 0xe8, 0xf7, 0xc2, 0xef, 0x76, 0xbb, 0xd8, 0x96, 0xec, 0x21, 0x63, 0x95, 0x4a, 0x85, 0x74, 0x3a, 0x4d, 0xb5, 0x5a, 0x65, 0xfd, 0xfa, 0xf5, 0x4c, 0x4f, 0x4f, 0x63, 0x18, 0x1d, 0x4a, 0xa5, 0x32, 0xd1, 0x68, 0x84, 0x4a, 0xa5, 0xc6, 0x8f, 0x7f, 0xfc, 0x9f, 0x5c, 0x75, 0xd5, 0xfb, 0x00, 0xb8, 0xe9, 0xa6, 0x1b, 0xb0, 0x2c, 0x71, 0xe8, 0xef, 0xb9, 0xe7, 0xdb, 0xa4, 0xd3, 0x71, 0x56, 0x56, 0xca, 0xbc, 0xe7, 0x3d, 0x57, 0x10, 0x89, 0x44, 0xf8, 0xce, 0x77, 0xfe, 0x9d, 0x88, 0x16, 0xe6, 0x8c, 0x33, 0xce, 0x62, 0xff, 0xfe, 0xfd, 0xe8, 0xba, 0x4e, 0xb7, 0x6b, 0x72, 0xc1, 0x05, 0x17, 0x90, 0x4e, 0x65, 0x58, 0xbb, 0x76, 0x2d, 0xcf, 0xbf, 0xf0, 0x1c, 0xe7, 0x9c, 0x73, 0x0e, 0x17, 0x5f, 0x7c, 0x21, 0x8f, 0xfe, 0xec, 0x61, 0xce, 0x3d, 0xf7, 0x42, 0x92, 0x29, 0x9d, 0x62, 0xb1, 0x41, 0x3a, 0x1d, 0xc2, 0x36, 0xc5, 0x84, 0x73, 0xe1, 0x85, 0x17, 0x32, 0x3f, 0x3f, 0xcf, 0xf6, 0xed, 0x3b, 0x58, 0xbf, 0x7e, 0x3d, 0x3e, 0x24, 0x76, 0xed, 0xda, 0x45, 0x2c, 0x95, 0x75, 0x60, 0xf1, 0x22, 0x85, 0x42, 0xc1, 0x73, 0x88, 0x5c, 0x58, 0x38, 0xc8, 0x51, 0x47, 0x6d, 0xa0, 0xdb, 0x15, 0x52, 0xd8, 0x91, 0x91, 0x11, 0x66, 0x66, 0x66, 0x00, 0x28, 0x95, 0x6a, 0x24, 0x93, 0x87, 0xa2, 0x66, 0xb3, 0xd9, 0xac, 0x47, 0x2a, 0xd4, 0x75, 0x9d, 0x7d, 0xfb, 0x66, 0xf8, 0xd8, 0xc7, 0x3e, 0xcc, 0xdd, 0x77, 0xff, 0x1b, 0x7a, 0x48, 0xa1, 0xdd, 0xee, 0xe2, 0xf7, 0x43, 0xaf, 0x07, 0x57, 0x5d, 0xf5, 0x4e, 0x7e, 0xf9, 0xcb, 0x5f, 0xd2, 0x6e, 0x77, 0x48, 0x24, 0xe2, 0x28, 0xaa, 0xc4, 0xc4, 0xc4, 0x04, 0x03, 0x03, 0x03, 0x3c, 0xf1, 0xc4, 0x13, 0x4e, 0x43, 0x64, 0x72, 0xe6, 0x99, 0x6f, 0xa3, 0x50, 0x28, 0x80, 0xe3, 0x7d, 0xbe, 0x7b, 0xe7, 0x1e, 0x64, 0xc5, 0x47, 0xd8, 0xf1, 0xc5, 0xff, 0xf2, 0x9d, 0x5f, 0x71, 0xd2, 0xba, 0x7a, 0x1c, 0x77, 0xdc, 0x71, 0xa8, 0xb2, 0xc2, 0x2b, 0xaf, 0xbc, 0x22, 0xf8, 0x1e, 0x88, 0x33, 0xf4, 0xf8, 0xe3, 0x8f, 0x23, 0x07, 0x14, 0x1a, 0x8d, 0x06, 0xe9, 0x74, 0x92, 0x42, 0x61, 0x85, 0x48, 0x54, 0x27, 0x1c, 0x16, 0x88, 0x5b, 0xb7, 0x6b, 0xd0, 0xe8, 0xd4, 0x68, 0x34, 0x6b, 0x0e, 0x4b, 0xba, 0xeb, 0x0d, 0x27, 0xa6, 0xd9, 0x75, 0x96, 0x77, 0x8a, 0xb3, 0xb2, 0x90, 0x30, 0x4d, 0x8b, 0xa5, 0xc5, 0x15, 0xee, 0xbc, 0xf3, 0xcb, 0x42, 0xee, 0xeb, 0x97, 0x49, 0x25, 0x86, 0xb8, 0xe3, 0x8e, 0x2f, 0x90, 0x4c, 0x26, 0xe9, 0x76, 0x7b, 0x94, 0x4b, 0x55, 0x32, 0x99, 0x1c, 0x67, 0x9f, 0x7d, 0x8e, 0xb8, 0xe4, 0xd5, 0x26, 0xcd, 0x5a, 0x83, 0x63, 0x4f, 0x38, 0x06, 0x49, 0x92, 0xd8, 0xbb, 0x77, 0x8f, 0x68, 0xe6, 0xaa, 0x2d, 0x54, 0xcd, 0x8f, 0xd1, 0x10, 0x7e, 0x1a, 0x5f, 0xfc, 0xe2, 0x9d, 0x48, 0x7e, 0x85, 0x4d, 0x9b, 0x36, 0xf3, 0xbf, 0xff, 0xbb, 0x85, 0x8b, 0x2f, 0xbe, 0x98, 0xb7, 0x9f, 0x7e, 0x26, 0x72, 0xa0, 0x8b, 0xe4, 0x17, 0xc6, 0x49, 0x57, 0x5c, 0x71, 0x15, 0x07, 0x0e, 0xcc, 0x50, 0xaf, 0x35, 0xe9, 0x76, 0x05, 0x02, 0x37, 0x3a, 0x36, 0xc0, 0xcc, 0xcc, 0x0c, 0x2f, 0xbf, 0xf8, 0x12, 0x57, 0x5d, 0x2d, 0xa6, 0x7a, 0x2d, 0xa0, 0xb2, 0xb0, 0xb0, 0x20, 0x14, 0x09, 0x8e, 0x69, 0x4e, 0xb9, 0x5a, 0x21, 0x91, 0x48, 0x80, 0xe4, 0xa7, 0x5a, 0xad, 0x32, 0x38, 0x3c, 0xc4, 0xbe, 0x7d, 0xfb, 0x98, 0x99, 0x5b, 0x64, 0x66, 0x66, 0xee, 0x30, 0x3b, 0x5f, 0x55, 0x55, 0x1d, 0x06, 0x7b, 0x14, 0x6c, 0x3f, 0x8b, 0x8b, 0x05, 0x72, 0xb9, 0x24, 0x9a, 0x26, 0x1a, 0xbf, 0xc7, 0x1f, 0xff, 0xb5, 0xc7, 0x31, 0xe9, 0xf4, 0x4c, 0x6e, 0xb9, 0xe5, 0x66, 0xbe, 0xf9, 0xcd, 0x6f, 0x72, 0xf1, 0xc5, 0x17, 0x11, 0x8e, 0x68, 0xd8, 0xb6, 0x49, 0xad, 0xda, 0xc1, 0x2f, 0x41, 0x58, 0x0b, 0x78, 0x53, 0x71, 0xff, 0xae, 0xbb, 0x3f, 0xbf, 0xbc, 0xff, 0xfc, 0x1f, 0x92, 0x7b, 0x09, 0x33, 0x22, 0x9f, 0x64, 0x38, 0x68, 0x69, 0x9e, 0x54, 0x52, 0x68, 0xc8, 0x8b, 0xc5, 0x2a, 0x13, 0x13, 0x63, 0x14, 0x8b, 0x45, 0x02, 0xaa, 0x08, 0xf2, 0xf1, 0xf9, 0x84, 0x05, 0x70, 0xff, 0x5e, 0xdc, 0xe5, 0xd2, 0xb8, 0x3a, 0x70, 0x77, 0x72, 0xee, 0x4f, 0x5f, 0xec, 0x74, 0x3a, 0x1e, 0x82, 0xdc, 0xcf, 0x81, 0x71, 0xef, 0x8a, 0x43, 0xbe, 0x0b, 0xb5, 0xc3, 0x22, 0x54, 0x43, 0xa1, 0x10, 0xe5, 0x72, 0x19, 0x45, 0x91, 0x3c, 0xc6, 0x7d, 0x3f, 0x12, 0xea, 0xb2, 0xee, 0x5d, 0x08, 0xdf, 0xfb, 0x7d, 0x7c, 0x3e, 0x7c, 0x01, 0x05, 0x7b, 0x64, 0x24, 0x43, 0xa3, 0xd1, 0xf0, 0x20, 0xf1, 0xeb, 0xaf, 0xbf, 0x9e, 0x56, 0xab, 0xc5, 0x96, 0x2d, 0x5b, 0x28, 0x95, 0x4a, 0x8e, 0x84, 0xcb, 0x4f, 0x2c, 0x26, 0x76, 0x17, 0xb1, 0x58, 0x0c, 0x5d, 0xd7, 0xf9, 0xcb, 0xf6, 0xbf, 0x60, 0x5b, 0x02, 0xb6, 0x4d, 0xa7, 0x33, 0xfc, 0x6e, 0xcb, 0x8b, 0xe4, 0x72, 0x19, 0xd6, 0xac, 0x59, 0x43, 0xb9, 0x5c, 0x21, 0x1e, 0x8f, 0xf3, 0xea, 0xab, 0xaf, 0xb2, 0x69, 0xd3, 0x26, 0xce, 0x3d, 0xf7, 0x5c, 0x12, 0x89, 0x84, 0xd7, 0x7d, 0x24, 0x93, 0x49, 0x3a, 0xed, 0x0a, 0xb7, 0xdd, 0x76, 0x07, 0xc3, 0xc3, 0x69, 0xbe, 0xff, 0xfd, 0xef, 0xb3, 0xb2, 0x52, 0xe0, 0x96, 0x5b, 0x6e, 0x11, 0x90, 0x99, 0x16, 0x41, 0x92, 0xdd, 0x58, 0x38, 0x1b, 0x1b, 0x0b, 0xdb, 0x36, 0x01, 0x07, 0x6e, 0x97, 0x65, 0x2c, 0x53, 0xf6, 0xde, 0x60, 0x5d, 0x0f, 0x39, 0xb0, 0x2d, 0x8e, 0xac, 0x2c, 0xe8, 0x48, 0x53, 0x2a, 0x8e, 0xb1, 0x01, 0x74, 0x8d, 0x1e, 0xe3, 0xe3, 0x13, 0xec, 0xda, 0xb5, 0x87, 0xa1, 0xa1, 0x21, 0xde, 0x78, 0x63, 0x8a, 0xf5, 0xeb, 0xd7, 0xf3, 0xe7, 0x57, 0x5e, 0xa6, 0xd3, 0x31, 0x38, 0xed, 0xb4, 0xb7, 0x50, 0x6f, 0x54, 0x3d, 0x7d, 0x5f, 0xa5, 0x5c, 0x62, 0x6e, 0x6e, 0x4e, 0x48, 0x23, 0xb4, 0x30, 0xd7, 0x5e, 0x7b, 0x2d, 0xb2, 0xac, 0xf2, 0x85, 0x2f, 0x7c, 0x01, 0x4d, 0xd3, 0xf8, 0xd4, 0xa7, 0x6f, 0xe5, 0xae, 0xbb, 0xee, 0xc2, 0xe8, 0x74, 0xe9, 0xf5, 0x2c, 0x32, 0x99, 0x1c, 0xad, 0x66, 0x87, 0x9f, 0xfc, 0xe4, 0xa7, 0xfc, 0xe9, 0x4f, 0x7f, 0x62, 0xed, 0xba, 0xf5, 0x0c, 0x0c, 0x0c, 0x70, 0xfc, 0xf1, 0x27, 0x32, 0x36, 0x26, 0x26, 0xf9, 0x99, 0x99, 0x59, 0xfc, 0x7e, 0xf1, 0xf3, 0xf9, 0x25, 0xdb, 0x83, 0x77, 0xdd, 0x94, 0x37, 0x55, 0x95, 0x38, 0xf5, 0xd4, 0x53, 0x79, 0xed, 0xb5, 0xd7, 0xb0, 0x0c, 0x83, 0x53, 0x4f, 0x3d, 0x95, 0x7c, 0x7e, 0x99, 0x7d, 0xfb, 0xf6, 0x60, 0xd9, 0x3d, 0xae, 0xb8, 0xe2, 0xdd, 0xd4, 0xeb, 0x75, 0x7e, 0xf1, 0x8b, 0x9f, 0x63, 0x23, 0x26, 0x1d, 0x80, 0x8f, 0x7f, 0xfc, 0x1f, 0xf9, 0xf3, 0x2b, 0x2f, 0x0b, 0x83, 0x94, 0xa0, 0x2a, 0x3c, 0x03, 0x06, 0xb2, 0xfc, 0xe4, 0x27, 0x8f, 0xb1, 0x6a, 0x22, 0xcd, 0xe4, 0xe4, 0x24, 0xcb, 0xcb, 0x8b, 0xcc, 0xcc, 0xcc, 0x38, 0xdd, 0x63, 0x97, 0x9e, 0x29, 0xac, 0x4b, 0x37, 0x6d, 0x12, 0x26, 0x2c, 0xaf, 0xbd, 0xb6, 0x8f, 0x13, 0x4e, 0x38, 0xd2, 0x7b, 0x80, 0xfe, 0xf4, 0xa7, 0x57, 0x88, 0xc5, 0x44, 0x7c, 0x6c, 0x2c, 0x16, 0xf3, 0x62, 0x00, 0x77, 0xef, 0xde, 0x4d, 0xb9, 0xdc, 0xc1, 0x07, 0x8e, 0xf9, 0x8a, 0xd0, 0xe6, 0xcb, 0xb2, 0x20, 0x0b, 0xba, 0xf0, 0x0f, 0x88, 0x0e, 0x73, 0x66, 0x66, 0x9e, 0x5c, 0x2e, 0x4d, 0x3c, 0x1e, 0x27, 0x91, 0x48, 0x10, 0x8f, 0xc7, 0xd9, 0xb2, 0x65, 0x0b, 0xc1, 0xa0, 0x60, 0xff, 0x2e, 0x2e, 0x16, 0x00, 0xbc, 0xb4, 0xae, 0x81, 0x81, 0x01, 0x16, 0x17, 0x17, 0xa9, 0xd7, 0x3b, 0x5e, 0xd3, 0xa3, 0x28, 0x38, 0x46, 0x3a, 0x71, 0xca, 0x65, 0x21, 0x43, 0xf1, 0x5b, 0x26, 0xb1, 0x58, 0x44, 0x1c, 0x10, 0x4c, 0x27, 0x5a, 0xd1, 0x66, 0xcf, 0x9e, 0x29, 0x42, 0x21, 0x15, 0xc3, 0xc2, 0x5b, 0x71, 0x54, 0xab, 0x4d, 0x02, 0x01, 0x91, 0xc6, 0x54, 0x28, 0x54, 0x09, 0x06, 0x25, 0xe1, 0x60, 0xd5, 0xd7, 0x90, 0xb8, 0xc8, 0x93, 0x5b, 0x64, 0xdd, 0x1c, 0x78, 0xb1, 0xc7, 0x76, 0xd3, 0xd0, 0x0e, 0x91, 0x53, 0x22, 0x11, 0xed, 0x30, 0x96, 0x6b, 0x7f, 0x80, 0x4c, 0xaf, 0xd7, 0xc3, 0xe7, 0x17, 0x64, 0x2f, 0xf7, 0xbd, 0x2b, 0x97, 0xcb, 0x5e, 0xb7, 0x6e, 0x18, 0x06, 0xdd, 0x8e, 0xe1, 0x5d, 0x12, 0xae, 0xd6, 0xbe, 0x7f, 0xa2, 0xf7, 0x11, 0xf0, 0x10, 0x84, 0x72, 0xb9, 0x4c, 0x2c, 0x16, 0xf3, 0xde, 0x9f, 0x7c, 0x3e, 0x4f, 0x22, 0x19, 0x61, 0x79, 0x79, 0x99, 0x6e, 0xb7, 0xc7, 0xe4, 0xe4, 0x6a, 0xde, 0x78, 0x63, 0x8a, 0x4c, 0x26, 0xe6, 0x4d, 0x08, 0xf3, 0xf3, 0xcb, 0xe8, 0xba, 0xf8, 0xfe, 0xf1, 0xb8, 0x08, 0xa7, 0x68, 0xd4, 0x5b, 0x4e, 0x34, 0xa5, 0x80, 0xf7, 0xe2, 0xf1, 0x38, 0xa3, 0xa3, 0xa3, 0xf8, 0xfd, 0x12, 0xa5, 0x52, 0xc9, 0xd3, 0xfb, 0x0a, 0x6b, 0x4a, 0x83, 0xd7, 0x5e, 0xdb, 0xc9, 0xd7, 0xbe, 0xf6, 0x25, 0x36, 0x1f, 0xb3, 0x09, 0xcb, 0x32, 0xf8, 0x9b, 0xbf, 0x7d, 0x17, 0xeb, 0xd7, 0x4f, 0x02, 0x16, 0xc7, 0x6e, 0xde, 0xc4, 0xf4, 0xf4, 0x34, 0xc1, 0x80, 0xe0, 0x40, 0x84, 0x42, 0x42, 0xe7, 0xbf, 0xb4, 0xb4, 0x24, 0x24, 0x64, 0xa5, 0x26, 0xc5, 0xa2, 0x90, 0xb4, 0xb9, 0x10, 0xa3, 0x6b, 0x42, 0x24, 0xa6, 0xb2, 0x0a, 0x6f, 0x79, 0xcb, 0xf1, 0xbc, 0xfe, 0xfa, 0xeb, 0xde, 0x65, 0xe5, 0x26, 0x66, 0xb9, 0xa1, 0x2b, 0xd5, 0x6a, 0x8b, 0xb3, 0xcf, 0x3e, 0x9d, 0xdf, 0xff, 0xfe, 0xf7, 0x84, 0x42, 0x21, 0xb2, 0xd9, 0xac, 0xf7, 0xfe, 0xae, 0x2c, 0x2d, 0x8b, 0x9c, 0x86, 0x72, 0x19, 0x4d, 0xd3, 0x3c, 0x68, 0xd3, 0x30, 0x0c, 0x81, 0x68, 0xf8, 0x2c, 0x06, 0x07, 0x07, 0x19, 0x1d, 0x1d, 0x65, 0xc7, 0x8e, 0x1d, 0xd4, 0xeb, 0x75, 0xef, 0xd9, 0xf6, 0xfb, 0xfd, 0xe4, 0x0b, 0x75, 0xc2, 0x91, 0x10, 0xed, 0x56, 0x8b, 0x55, 0xab, 0xc6, 0x59, 0x5a, 0x5c, 0xc0, 0xb2, 0x84, 0x11, 0x54, 0x3c, 0x12, 0xc5, 0xf6, 0x05, 0x9d, 0xf7, 0xa9, 0xc3, 0xc2, 0xec, 0x1c, 0x13, 0x13, 0x13, 0x04, 0x03, 0x2a, 0xf1, 0x78, 0x5c, 0x78, 0x73, 0x74, 0x0d, 0x62, 0x31, 0xf1, 0x19, 0xe8, 0xba, 0x13, 0x14, 0x12, 0x90, 0x69, 0x36, 0x9b, 0x94, 0x4a, 0x45, 0x02, 0xe1, 0x20, 0x53, 0x53, 0x53, 0x4c, 0x4d, 0x4d, 0x11, 0x0e, 0x6b, 0x84, 0xc3, 0x9a, 0x28, 0x10, 0x7e, 0x88, 0x44, 0x22, 0x84, 0x82, 0x1a, 0xf9, 0x7c, 0xd1, 0x81, 0xa4, 0x9b, 0x0c, 0x0e, 0x0e, 0xd2, 0xa8, 0xb7, 0x9c, 0x46, 0x4f, 0xa5, 0x56, 0x15, 0xe8, 0xcc, 0xf8, 0xf8, 0x2a, 0x1a, 0x8d, 0x06, 0xef, 0xbb, 0xe6, 0x3a, 0xca, 0xe5, 0x2a, 0xc9, 0x64, 0x92, 0x75, 0xeb, 0xd6, 0x61, 0xd1, 0xa5, 0xdb, 0x33, 0xd0, 0x34, 0x8d, 0xcf, 0x7d, 0xee, 0x73, 0x3c, 0xff, 0xc7, 0x97, 0x89, 0x27, 0x84, 0xc4, 0x54, 0xd3, 0x42, 0xfc, 0xe2, 0xd1, 0x5f, 0xb0, 0x6d, 0xdb, 0x36, 0x3e, 0xf2, 0xe1, 0x9b, 0xf9, 0xd2, 0x97, 0x3e, 0x4f, 0x2c, 0x96, 0xe0, 0x89, 0x27, 0x9e, 0x60, 0xfd, 0x11, 0x1b, 0x08, 0x85, 0x74, 0x9e, 0x7f, 0xf9, 0x37, 0x74, 0xbb, 0x02, 0x35, 0xfa, 0xc3, 0x1f, 0xb6, 0x72, 0xe1, 0x85, 0x67, 0x12, 0x50, 0x43, 0x0e, 0x42, 0x33, 0x4a, 0x34, 0x12, 0x60, 0xcd, 0x9a, 0x35, 0xd4, 0x6a, 0x35, 0xf2, 0xcb, 0x82, 0x8f, 0xf4, 0x97, 0x3f, 0xbf, 0x42, 0xa5, 0x2a, 0x9c, 0x3c, 0x7b, 0xad, 0xae, 0x38, 0xcf, 0xc9, 0x04, 0x95, 0x4a, 0x85, 0x40, 0x28, 0xc4, 0xc3, 0x0f, 0x3f, 0xcc, 0xc9, 0x6f, 0x7d, 0x0b, 0xd1, 0x68, 0x94, 0x5a, 0xb5, 0xc9, 0xd3, 0x4f, 0xff, 0x2f, 0x9a, 0x16, 0x22, 0x18, 0x0c, 0x7a, 0x46, 0x2f, 0xde, 0x84, 0x19, 0x08, 0x3a, 0x52, 0xc3, 0x3c, 0x03, 0xb9, 0x21, 0xca, 0xe5, 0x32, 0x86, 0x21, 0x94, 0x09, 0x77, 0xdf, 0xfd, 0x2f, 0xe8, 0xd1, 0x18, 0x1f, 0xf8, 0xbb, 0x0f, 0xa2, 0x06, 0x24, 0x02, 0x41, 0x15, 0x9f, 0xcf, 0xc6, 0xef, 0x17, 0xe7, 0x2f, 0x9b, 0x4b, 0x33, 0x77, 0x40, 0x40, 0xee, 0x6e, 0x61, 0xeb, 0x47, 0xb7, 0xfc, 0x7e, 0xb1, 0x32, 0x74, 0xcf, 0xa7, 0x5b, 0x78, 0x5d, 0x78, 0x5c, 0x55, 0x55, 0x7a, 0x56, 0x03, 0x59, 0x52, 0xbd, 0x86, 0x51, 0x96, 0xc5, 0xa0, 0x06, 0x7e, 0x01, 0xa9, 0xcb, 0x01, 0xcf, 0x61, 0xd0, 0x85, 0xbd, 0xdd, 0xd7, 0x16, 0x03, 0x8c, 0xed, 0x0d, 0xb9, 0xfd, 0x2c, 0x78, 0x77, 0x10, 0x76, 0x39, 0x31, 0x6f, 0x46, 0x08, 0x5c, 0xc6, 0xbd, 0x6b, 0xdb, 0x5a, 0x2c, 0x16, 0xbd, 0xa6, 0x5f, 0x0c, 0xa6, 0xa3, 0x4e, 0x4a, 0xa0, 0xe9, 0xfd, 0x7e, 0x6f, 0xd6, 0xc7, 0xbb, 0x13, 0xba, 0xdb, 0xc0, 0x78, 0x84, 0xbc, 0x4d, 0x47, 0x8d, 0xdb, 0xb5, 0x5a, 0x8d, 0x5a, 0xad, 0xc6, 0xa7, 0x3e, 0xf5, 0x29, 0x6a, 0xb5, 0x1a, 0x2f, 0xbd, 0xf4, 0x92, 0x23, 0x3d, 0x99, 0x61, 0x65, 0x65, 0xc5, 0xe9, 0x42, 0xd3, 0x8c, 0x8d, 0x8d, 0xa1, 0xaa, 0x82, 0x1c, 0x37, 0x37, 0x37, 0xc7, 0xe6, 0x13, 0x36, 0xf1, 0xea, 0xab, 0xaf, 0x92, 0xc9, 0xe4, 0x28, 0xe4, 0x4b, 0xce, 0x65, 0x1e, 0xc4, 0x30, 0x7a, 0xde, 0xee, 0x50, 0xc0, 0x2a, 0x62, 0x97, 0x90, 0x4e, 0xa7, 0x49, 0xa5, 0x52, 0x22, 0x21, 0x2d, 0x12, 0x61, 0x6e, 0x76, 0xda, 0x21, 0xed, 0x74, 0x98, 0x9c, 0x9c, 0x24, 0x16, 0x13, 0xd2, 0x88, 0xf9, 0xf9, 0x79, 0x42, 0x21, 0x9d, 0x72, 0xd9, 0xd9, 0x9b, 0x4a, 0x42, 0x12, 0x21, 0xde, 0x4c, 0xf0, 0xf9, 0x1d, 0x7b, 0x4c, 0x87, 0xa5, 0x1c, 0x0c, 0x06, 0x29, 0x14, 0x57, 0x98, 0x9c, 0x9c, 0x64, 0x7a, 0x7a, 0xca, 0x73, 0xe6, 0x71, 0x59, 0xc3, 0x23, 0x23, 0x63, 0xd8, 0x96, 0x8f, 0x4a, 0xa5, 0x26, 0x0e, 0x4a, 0xad, 0x46, 0x28, 0xa8, 0x63, 0xfa, 0x71, 0x2e, 0x59, 0x37, 0xa6, 0xaf, 0x8a, 0x5f, 0xc2, 0x23, 0x66, 0x74, 0x1a, 0x62, 0xff, 0x11, 0x8d, 0xc4, 0x89, 0xc5, 0x84, 0xf9, 0x8a, 0x24, 0x49, 0x4c, 0x4f, 0x2f, 0xb0, 0x61, 0xc3, 0x5a, 0x14, 0x45, 0x8c, 0x80, 0xaf, 0xbd, 0xb6, 0x8b, 0x63, 0x8f, 0xdd, 0x84, 0x65, 0xc2, 0x4b, 0x2f, 0x6d, 0xe3, 0xc8, 0x23, 0x57, 0x0b, 0xe9, 0x56, 0x50, 0x38, 0xec, 0xbd, 0xfc, 0xf2, 0xcb, 0xc2, 0x75, 0xcb, 0x09, 0x86, 0x28, 0x97, 0xcb, 0xe2, 0x43, 0xb7, 0x6c, 0x36, 0x6f, 0x3e, 0x9a, 0xdd, 0xbb, 0x77, 0x53, 0xab, 0xb5, 0x59, 0xbb, 0x76, 0x95, 0x37, 0x31, 0xda, 0xb6, 0xcd, 0xc1, 0xb9, 0x69, 0x54, 0x55, 0xe5, 0x9d, 0xef, 0xfc, 0x5b, 0xc1, 0xd0, 0x0c, 0x0b, 0x14, 0x65, 0xff, 0xfe, 0x7d, 0xec, 0xdc, 0xb9, 0x83, 0x40, 0x50, 0x4c, 0x32, 0xcb, 0xcb, 0x25, 0x06, 0x06, 0x92, 0x9c, 0x7c, 0xf2, 0xc9, 0x8e, 0x3f, 0x71, 0x90, 0xa7, 0x9f, 0x7e, 0xda, 0xcb, 0xeb, 0xf6, 0xfb, 0xfd, 0x9c, 0x74, 0xd2, 0x09, 0x9e, 0x57, 0x7d, 0xa7, 0xd3, 0xa1, 0x5e, 0xaf, 0x13, 0x08, 0x45, 0x69, 0x36, 0x9b, 0x24, 0x12, 0x09, 0x4a, 0xa5, 0x92, 0x77, 0x28, 0x5c, 0x18, 0xd7, 0xbd, 0x38, 0x5d, 0xc9, 0x97, 0x5b, 0xb4, 0x04, 0x0a, 0x20, 0x51, 0x28, 0x2e, 0x21, 0xcb, 0x87, 0xcc, 0x19, 0x5c, 0x68, 0xea, 0x90, 0xff, 0xb1, 0xe8, 0x52, 0xdc, 0x14, 0x2e, 0xd1, 0xf8, 0xa5, 0xc9, 0x64, 0x32, 0xfc, 0xe6, 0x37, 0xcf, 0x60, 0x74, 0x44, 0x44, 0x6d, 0x36, 0x9b, 0xa6, 0x50, 0x28, 0x90, 0xcd, 0x66, 0xbd, 0x29, 0x34, 0x1e, 0x8f, 0x53, 0xa9, 0xd4, 0xd8, 0xbf, 0x7f, 0xda, 0x21, 0xab, 0xf5, 0x1c, 0x2f, 0xf7, 0x20, 0x8d, 0x46, 0x1b, 0x45, 0xf1, 0xd3, 0x6b, 0x5b, 0x84, 0xc3, 0x12, 0x3d, 0xd3, 0xa4, 0xd7, 0x83, 0x91, 0x91, 0x34, 0x9a, 0xa6, 0x79, 0xf9, 0xd1, 0x85, 0x4a, 0xdd, 0x6b, 0x9e, 0xf2, 0x79, 0x11, 0x7a, 0x13, 0x89, 0x48, 0xd4, 0x6a, 0x26, 0x9a, 0x06, 0x96, 0xe9, 0x3f, 0x2c, 0x45, 0xc9, 0x95, 0x9a, 0xb9, 0x4c, 0x71, 0xd3, 0x3a, 0x14, 0xaf, 0xd9, 0xeb, 0x5a, 0xce, 0x9e, 0x5c, 0x1c, 0xc4, 0x48, 0x24, 0xe2, 0x59, 0xac, 0xba, 0xd0, 0x5e, 0xbf, 0x36, 0xdc, 0xb6, 0x6d, 0x5a, 0xed, 0x1a, 0x9d, 0x8e, 0x45, 0x38, 0x1c, 0xf0, 0x60, 0x73, 0xd7, 0x05, 0xce, 0x12, 0x46, 0x02, 0xde, 0xd7, 0xf4, 0x9b, 0x47, 0xb8, 0x05, 0x5e, 0xd7, 0xe2, 0x9e, 0xd4, 0xa7, 0xdd, 0x6e, 0x7b, 0xab, 0x0d, 0x97, 0x58, 0x66, 0x59, 0x86, 0x67, 0x44, 0xe3, 0x1e, 0x7a, 0x57, 0x8d, 0xd0, 0xeb, 0xf5, 0x58, 0x5c, 0xcc, 0xa3, 0x69, 0x2a, 0xb5, 0x9a, 0x81, 0xaa, 0xfa, 0xd8, 0xb0, 0x61, 0x03, 0x96, 0x25, 0xc8, 0x73, 0xaf, 0xbd, 0xf6, 0x1a, 0x92, 0x24, 0xf2, 0xed, 0xc5, 0x05, 0x65, 0x13, 0x89, 0x44, 0x08, 0x06, 0x35, 0x2f, 0xbd, 0xac, 0xd7, 0x33, 0x9c, 0xa6, 0xfc, 0x35, 0x72, 0x03, 0x29, 0x36, 0x6d, 0xda, 0xc4, 0x73, 0xcf, 0x3d, 0x4b, 0x2a, 0x95, 0x60, 0x64, 0x64, 0x84, 0x64, 0x3c, 0x8e, 0xae, 0xeb, 0x2c, 0x2d, 0x2d, 0xf1, 0x97, 0xbf, 0xfc, 0xc5, 0x0b, 0x2e, 0x71, 0x9d, 0xbb, 0x76, 0xef, 0x5b, 0x70, 0x8a, 0x95, 0xc9, 0xfa, 0xf5, 0xe3, 0x4c, 0x4d, 0x1d, 0xc0, 0xb2, 0x60, 0x7c, 0x7c, 0x08, 0xc3, 0x30, 0x58, 0x35, 0xbe, 0xc6, 0x9b, 0x80, 0xa6, 0xa7, 0xa7, 0xd1, 0x75, 0x9d, 0x83, 0x07, 0xf3, 0x68, 0x9a, 0xc2, 0xe9, 0xa7, 0x9f, 0x4e, 0x34, 0x1a, 0xa5, 0xd3, 0xe9, 0xf0, 0xfc, 0xf3, 0xcf, 0x93, 0xcf, 0x97, 0x88, 0x44, 0x34, 0x27, 0x14, 0xa3, 0x4e, 0x2a, 0x15, 0xc5, 0x8f, 0x8f, 0x42, 0xa1, 0x42, 0x22, 0x11, 0xa1, 0x5a, 0xad, 0x71, 0xcd, 0x35, 0xef, 0xe5, 0x91, 0x47, 0x1e, 0xf1, 0xe4, 0x49, 0x6a, 0x40, 0xe6, 0xe0, 0xc1, 0x3c, 0xc1, 0xa0, 0xc4, 0x29, 0xa7, 0x9c, 0xc2, 0x53, 0x4f, 0xfd, 0x9e, 0x64, 0x52, 0xf7, 0x52, 0xb1, 0xc2, 0x91, 0x30, 0x95, 0x4a, 0x9d, 0x6b, 0xde, 0xfb, 0x6e, 0xe6, 0xe6, 0x66, 0x78, 0x63, 0xe7, 0x76, 0xc2, 0x61, 0x9d, 0xf1, 0xf1, 0x51, 0x3a, 0xed, 0x36, 0xc3, 0xc3, 0x13, 0x2c, 0x2e, 0x2e, 0xd2, 0x6a, 0x37, 0x08, 0xaa, 0x01, 0x1a, 0x8d, 0x3a, 0xf3, 0xb3, 0xb3, 0xa4, 0xd3, 0x49, 0x91, 0x47, 0xdf, 0x12, 0x7c, 0x97, 0xc1, 0xc1, 0x41, 0xd6, 0x1f, 0xb9, 0x8e, 0x70, 0x38, 0xcc, 0x81, 0x03, 0x07, 0x18, 0x1d, 0x1d, 0xe5, 0xb5, 0xd7, 0xb6, 0xb2, 0x54, 0x28, 0x12, 0x0e, 0x87, 0x1d, 0x2f, 0xee, 0xa6, 0x57, 0x5c, 0x14, 0x45, 0xc1, 0xb4, 0x7a, 0x74, 0xda, 0x86, 0xe7, 0x24, 0xd9, 0x6e, 0x0b, 0x4f, 0xf0, 0x44, 0x22, 0xc1, 0x81, 0x03, 0x07, 0x19, 0x1f, 0x1f, 0x24, 0x1a, 0x49, 0x79, 0x6b, 0x4f, 0x91, 0xfe, 0xb7, 0xe8, 0x65, 0x68, 0xef, 0xde, 0x7d, 0x80, 0x23, 0xd6, 0x4f, 0x7a, 0xb1, 0xb3, 0xe7, 0x9f, 0x7f, 0x2e, 0xa9, 0x54, 0x8a, 0x5b, 0x6f, 0xfb, 0x14, 0x81, 0x80, 0xb3, 0x5b, 0xb5, 0xe0, 0xb4, 0xd3, 0x4e, 0xe7, 0xc4, 0x13, 0x4f, 0xe4, 0xf5, 0xd7, 0x77, 0x91, 0x4e, 0x65, 0x91, 0x65, 0x85, 0x7f, 0xfb, 0xb7, 0xef, 0x70, 0xcd, 0x35, 0xef, 0xe5, 0x89, 0x27, 0x1f, 0xc6, 0xb6, 0x6d, 0xae, 0xb9, 0xe6, 0x5a, 0xee, 0xbe, 0xfb, 0xdf, 0xb9, 0xf8, 0xe2, 0x33, 0xc4, 0xd9, 0xb5, 0x04, 0x07, 0xa4, 0xdb, 0x11, 0x79, 0xe2, 0xc9, 0x64, 0x92, 0xae, 0x61, 0x90, 0xcf, 0x2f, 0x23, 0xe1, 0x63, 0x64, 0x54, 0x7c, 0x7e, 0xf1, 0x88, 0x70, 0x80, 0xab, 0x37, 0x1b, 0x94, 0x4a, 0x25, 0x7a, 0x96, 0xc5, 0x96, 0x2d, 0x5b, 0x88, 0x27, 0x13, 0x0e, 0x1f, 0x2b, 0xc4, 0xd9, 0x67, 0x9f, 0xed, 0xc4, 0xcd, 0x76, 0x19, 0x18, 0x48, 0x32, 0x3b, 0x5b, 0x24, 0x9d, 0x16, 0xca, 0x18, 0x0b, 0xbf, 0x97, 0xf3, 0x61, 0x59, 0x70, 0xf9, 0xe5, 0x97, 0x63, 0x99, 0x82, 0x00, 0x1a, 0x08, 0x04, 0xf8, 0xe1, 0x8f, 0xfe, 0x8b, 0x42, 0xbe, 0x48, 0x22, 0x19, 0x05, 0x9f, 0x4d, 0xa9, 0x58, 0x63, 0xf3, 0x31, 0x47, 0xb0, 0x67, 0xef, 0x2e, 0x9a, 0x0d, 0x08, 0x6b, 0x8a, 0xb7, 0x4a, 0xeb, 0x67, 0xa4, 0xbb, 0xb0, 0xbb, 0xa6, 0x69, 0x1e, 0x7a, 0x26, 0x50, 0x93, 0xee, 0x61, 0xe1, 0x48, 0x92, 0x2c, 0x88, 0xaa, 0xd5, 0x6a, 0x9d, 0x0f, 0x7e, 0xf0, 0x03, 0xb0, 0x64, 0x7e, 0x01, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x98, 0xa6, 0xc9, 0x77, 0xbe, 0xf3, 0x03, 0xa2, 0x51, 0xb1, 0xba, 0x2a, 0x15, 0x2b, 0x04, 0x83, 0x41, 0xcf, 0x11, 0xd5, 0x2d, 0xc4, 0xee, 0x8a, 0xcb, 0xb6, 0x7d, 0x87, 0xb9, 0x37, 0xf6, 0xff, 0x71, 0xef, 0xca, 0x7e, 0x67, 0x39, 0xf7, 0x6b, 0xdd, 0x7f, 0x6b, 0x36, 0x9b, 0x0c, 0x0f, 0x0f, 0x7b, 0x91, 0xc3, 0xed, 0x76, 0x9b, 0x54, 0x2a, 0xc5, 0x9a, 0x35, 0x6b, 0xd8, 0xb9, 0x73, 0xa7, 0x67, 0x41, 0xed, 0xee, 0xe7, 0xfb, 0x35, 0xf1, 0x6e, 0x71, 0xef, 0x27, 0xf3, 0xf9, 0x7c, 0x3e, 0xa4, 0x63, 0x36, 0x1f, 0x79, 0x47, 0x22, 0x91, 0x20, 0x12, 0x89, 0xb0, 0x7d, 0xfb, 0x76, 0x16, 0x17, 0x17, 0xd9, 0xb5, 0x6b, 0x17, 0x95, 0x4a, 0x85, 0x63, 0x8f, 0x3d, 0xd6, 0x5b, 0xee, 0xd7, 0x6a, 0x35, 0x47, 0x57, 0x5a, 0xf6, 0x74, 0x7c, 0x07, 0x0e, 0xec, 0x67, 0x6c, 0x74, 0x8c, 0x46, 0xbd, 0x8e, 0x6d, 0x59, 0x48, 0x7e, 0x1f, 0xf5, 0x5a, 0x1d, 0x55, 0x95, 0x69, 0xb7, 0x9a, 0xc8, 0x7e, 0x89, 0xae, 0x61, 0x10, 0x0c, 0x04, 0xb0, 0x2d, 0x13, 0xb3, 0xd7, 0x63, 0x61, 0x7e, 0x8e, 0x4d, 0x1b, 0x37, 0x52, 0x29, 0x97, 0xe8, 0x34, 0x9b, 0x04, 0x84, 0x4f, 0x1f, 0x83, 0x03, 0x03, 0xd4, 0x2a, 0x35, 0x7c, 0x40, 0x2e, 0x93, 0xa5, 0x98, 0x2f, 0xe2, 0xf7, 0xdb, 0xc8, 0x92, 0x84, 0x0f, 0xf0, 0xd9, 0x3e, 0x64, 0xc9, 0x4f, 0x40, 0x09, 0xa0, 0xc8, 0x32, 0x3e, 0xdb, 0x87, 0xd9, 0x33, 0xb1, 0x2d, 0x8b, 0x44, 0x22, 0x41, 0x36, 0x93, 0xc1, 0x07, 0x04, 0x54, 0x95, 0x54, 0x32, 0x85, 0x16, 0xd2, 0x18, 0x19, 0x1e, 0xc1, 0xe8, 0x74, 0x58, 0x59, 0x16, 0x99, 0xdf, 0x60, 0xd3, 0x69, 0x77, 0xf0, 0xe1, 0xa3, 0x51, 0xaf, 0xd1, 0x36, 0x1a, 0x82, 0x88, 0x23, 0xf9, 0xa9, 0xd7, 0xcb, 0xd4, 0x6b, 0x15, 0x7a, 0xbd, 0x36, 0xc1, 0x60, 0x80, 0x7d, 0x7b, 0xa7, 0x39, 0xf9, 0x84, 0x13, 0x68, 0xd4, 0x1b, 0x54, 0x2a, 0x65, 0xb0, 0x41, 0x96, 0xfc, 0x28, 0xb2, 0xca, 0xb1, 0xc7, 0x1c, 0x4d, 0x2e, 0x9b, 0x05, 0x0c, 0x12, 0xf1, 0x38, 0x1b, 0x36, 0xac, 0x45, 0x55, 0x15, 0x54, 0x45, 0xe1, 0x98, 0xcd, 0x1b, 0xc8, 0xe5, 0x72, 0x24, 0x13, 0x71, 0x4c, 0xcb, 0xe4, 0x85, 0xe7, 0x5f, 0x24, 0x97, 0x4d, 0x91, 0x48, 0x44, 0x68, 0xb5, 0x1a, 0xd4, 0x6b, 0x4d, 0xc2, 0xe1, 0x20, 0xcd, 0x66, 0x97, 0x74, 0x22, 0xce, 0xd0, 0xc0, 0x20, 0xcb, 0x4b, 0x8b, 0xc4, 0x63, 0x61, 0x56, 0x4f, 0x8c, 0x33, 0x38, 0x90, 0x23, 0xa0, 0x2a, 0xec, 0xdb, 0xbb, 0x8b, 0x76, 0xa3, 0xcd, 0x7b, 0xae, 0x7e, 0x37, 0x66, 0xaf, 0xc7, 0xfa, 0x23, 0xd6, 0x62, 0x99, 0x5d, 0x8a, 0xc5, 0x65, 0x4e, 0x38, 0xfe, 0x58, 0xce, 0x3b, 0xf7, 0x1c, 0x7e, 0xf5, 0xf8, 0xd3, 0x74, 0x8d, 0x36, 0x63, 0xa3, 0x69, 0x36, 0x6f, 0xde, 0x40, 0xa5, 0x52, 0xa0, 0x5e, 0x2f, 0x31, 0x3f, 0x7f, 0x80, 0xa1, 0xa1, 0x2c, 0xb1, 0x58, 0x98, 0x93, 0x4f, 0x3e, 0x01, 0x49, 0x02, 0x45, 0xf6, 0xe1, 0xc3, 0x42, 0x0d, 0xf8, 0x91, 0x24, 0xd0, 0xb4, 0x00, 0x46, 0xc7, 0x60, 0x78, 0x28, 0xc7, 0xf2, 0xd2, 0x02, 0x89, 0x78, 0x14, 0xc9, 0x0f, 0xf1, 0x58, 0x84, 0x56, 0xb3, 0x8e, 0xd9, 0x33, 0x18, 0xc8, 0xa5, 0x51, 0x64, 0x3f, 0xa1, 0xa0, 0x82, 0xdf, 0x67, 0xa1, 0xc8, 0x3e, 0x74, 0x2d, 0x48, 0x40, 0x95, 0x89, 0xc7, 0xc2, 0xe4, 0x72, 0x11, 0x72, 0xb9, 0x24, 0xd9, 0x4c, 0x82, 0x6c, 0x36, 0x41, 0x26, 0x1d, 0x27, 0x16, 0xd3, 0x50, 0x64, 0xc0, 0xee, 0x32, 0x34, 0x98, 0xc1, 0xe8, 0x34, 0x18, 0xc8, 0xa5, 0x28, 0x14, 0x96, 0x50, 0x64, 0x98, 0x58, 0x35, 0x42, 0xa9, 0xb4, 0xc2, 0xc2, 0x7c, 0x01, 0x4d, 0x8f, 0x30, 0x39, 0x39, 0xc1, 0xbe, 0xa9, 0x19, 0x52, 0xa9, 0x18, 0xf3, 0x0b, 0x05, 0x8a, 0xa5, 0x15, 0x4a, 0xa5, 0x2a, 0x4b, 0xcb, 0xcb, 0x8e, 0xed, 0x67, 0x8d, 0x70, 0x38, 0x24, 0x58, 0xf8, 0xaa, 0xeb, 0xea, 0xe4, 0x10, 0x41, 0x54, 0x8b, 0x76, 0xc7, 0x66, 0x6c, 0x6c, 0x80, 0x70, 0x58, 0x24, 0x25, 0xf5, 0x7a, 0x86, 0x63, 0x84, 0xd3, 0xa2, 0xde, 0x34, 0x09, 0x87, 0x83, 0x8e, 0x8f, 0x73, 0x87, 0x40, 0xc0, 0x47, 0x28, 0x14, 0x44, 0x51, 0x6c, 0x54, 0x55, 0x41, 0x92, 0xd4, 0x3e, 0x28, 0xcb, 0xc2, 0xb6, 0x2d, 0xaf, 0xa9, 0x11, 0xbb, 0x33, 0x09, 0xcb, 0x32, 0xb1, 0x2c, 0xe7, 0xb0, 0xfa, 0x6c, 0x6c, 0xcb, 0xa6, 0xdb, 0x35, 0xe8, 0x74, 0xda, 0x1e, 0x59, 0xe6, 0xcd, 0x90, 0x9b, 0xdf, 0xef, 0x27, 0x18, 0x0c, 0x92, 0xcb, 0xa5, 0x09, 0x85, 0x54, 0x27, 0x40, 0x24, 0x46, 0x38, 0xac, 0x3b, 0x3e, 0xe6, 0x42, 0x6a, 0xa5, 0xfa, 0x25, 0x54, 0x59, 0x41, 0xf2, 0xfb, 0x91, 0x7c, 0x7e, 0x7c, 0x36, 0xf8, 0xf1, 0x11, 0x54, 0x03, 0x44, 0x23, 0x11, 0x7a, 0xdd, 0x0e, 0xbd, 0x6e, 0x07, 0x55, 0xf1, 0xe3, 0xc3, 0x42, 0x96, 0x20, 0x14, 0x54, 0x69, 0xd4, 0x1b, 0x24, 0x13, 0x11, 0x5a, 0xcd, 0x06, 0x61, 0x5d, 0xc3, 0xb6, 0x2c, 0x9a, 0x8d, 0x36, 0x8a, 0xec, 0xa7, 0xd3, 0x6e, 0x53, 0x2a, 0x56, 0xa9, 0x55, 0x9b, 0x1c, 0xb9, 0x7e, 0x35, 0xe5, 0x52, 0x11, 0x6c, 0x9b, 0x23, 0xd7, 0xaf, 0xa3, 0xd9, 0xa8, 0xd3, 0xa8, 0xd5, 0x51, 0x24, 0x89, 0xc5, 0x83, 0x79, 0x22, 0xb1, 0x00, 0x99, 0x6c, 0x9a, 0x46, 0xb3, 0xc9, 0xf0, 0xc8, 0x10, 0xa5, 0x62, 0x91, 0x50, 0x28, 0xc0, 0xf4, 0xf4, 0x14, 0xe3, 0xe3, 0xe3, 0xb4, 0x3b, 0x0d, 0xfc, 0x92, 0x8f, 0x4c, 0x36, 0xe5, 0x34, 0x84, 0x5d, 0x16, 0x16, 0xe6, 0xa8, 0x54, 0xea, 0x24, 0x12, 0x71, 0x56, 0x4d, 0x4c, 0xf2, 0xf3, 0x5f, 0x3c, 0xc6, 0x8e, 0x9d, 0xf3, 0xe4, 0x06, 0xe2, 0x64, 0x73, 0x39, 0x0e, 0x2e, 0x15, 0x09, 0x04, 0x25, 0xca, 0xd5, 0x0a, 0x81, 0x80, 0xe6, 0xbc, 0xa7, 0x42, 0x9f, 0xdc, 0x6a, 0x81, 0xae, 0xfb, 0xc9, 0xe7, 0xab, 0x64, 0xb3, 0x09, 0xc2, 0x7a, 0x8c, 0x97, 0x5f, 0xde, 0x4a, 0xa3, 0x51, 0x63, 0x70, 0x70, 0xd0, 0x81, 0x24, 0xdb, 0x5e, 0xe3, 0x37, 0x30, 0x30, 0x40, 0x3a, 0x9d, 0x66, 0x6a, 0x6a, 0x0a, 0xdb, 0x36, 0xa9, 0x54, 0x9a, 0xc4, 0xe3, 0x11, 0xa1, 0x02, 0xa9, 0xb5, 0x69, 0x35, 0x3b, 0x64, 0x32, 0x71, 0x67, 0x55, 0x08, 0xbb, 0x76, 0xbd, 0xce, 0xf0, 0xf0, 0x30, 0xcb, 0xcb, 0x2b, 0x62, 0xed, 0xa4, 0x48, 0xb4, 0xdb, 0x2d, 0x2c, 0xcb, 0xe6, 0xbc, 0xf3, 0xce, 0xe5, 0xe8, 0xa3, 0x37, 0xb0, 0x6d, 0xdb, 0x36, 0x91, 0x14, 0x67, 0x76, 0x69, 0xb7, 0x3a, 0x68, 0x9a, 0xc4, 0x2b, 0x7f, 0xda, 0xce, 0x05, 0xe7, 0x9f, 0x29, 0x32, 0xea, 0x55, 0x85, 0x4c, 0x26, 0x45, 0xa3, 0x51, 0x67, 0xf1, 0xe0, 0x22, 0x96, 0xd9, 0x23, 0x95, 0x8a, 0x63, 0x75, 0xdb, 0x28, 0x0a, 0xa4, 0x93, 0x31, 0x64, 0xd9, 0x26, 0x99, 0x8c, 0xb2, 0xee, 0xc8, 0x23, 0x88, 0x46, 0x75, 0x7c, 0x3e, 0x8b, 0xe5, 0xe5, 0x25, 0x2c, 0xcb, 0x64, 0x7a, 0x7a, 0x3f, 0xb3, 0xb3, 0x07, 0xb0, 0x2c, 0x93, 0x7a, 0xbd, 0x89, 0x16, 0x0a, 0x91, 0x88, 0x27, 0xf0, 0xe1, 0xc7, 0x32, 0x6d, 0x74, 0x4d, 0x47, 0xf2, 0xcb, 0x58, 0x3d, 0x1b, 0x59, 0x96, 0x18, 0xc8, 0xe5, 0xc8, 0xaf, 0xac, 0x50, 0xad, 0x36, 0x18, 0x1c, 0xc8, 0x50, 0xad, 0x94, 0x39, 0xe6, 0x98, 0x8d, 0xd4, 0x6a, 0x55, 0x5a, 0xcd, 0x06, 0x5a, 0x28, 0xc0, 0xba, 0x75, 0x93, 0x2c, 0x2f, 0x1f, 0x64, 0xed, 0x9a, 0x09, 0xf2, 0x2b, 0x8b, 0x48, 0x92, 0xcd, 0xf0, 0x70, 0x5a, 0x30, 0xbc, 0xfd, 0x3e, 0xf6, 0xee, 0xdd, 0xc5, 0xc2, 0xfc, 0x1c, 0x2f, 0xbe, 0xf8, 0x3c, 0xab, 0x27, 0xc6, 0x49, 0x26, 0x12, 0x1c, 0x7b, 0xec, 0xd1, 0xac, 0x9d, 0x98, 0x44, 0x96, 0xfc, 0x2c, 0xcc, 0xcf, 0x33, 0x34, 0x30, 0xc8, 0xfc, 0xdc, 0x1c, 0xd3, 0xfb, 0xa7, 0x39, 0xf7, 0x9c, 0xb3, 0x79, 0xf4, 0x7f, 0xfe, 0x87, 0x58, 0x34, 0x44, 0xad, 0xd2, 0x64, 0x62, 0x7c, 0x94, 0xb3, 0xcf, 0x3a, 0x95, 0x9f, 0x3c, 0xf8, 0x28, 0xa3, 0x23, 0x39, 0x2c, 0xb3, 0x87, 0x6d, 0xf5, 0x88, 0x84, 0xc3, 0x34, 0xea, 0x55, 0x24, 0xbf, 0x8f, 0xe7, 0x7e, 0xf7, 0x3b, 0x8e, 0x3c, 0x72, 0x1d, 0x7f, 0xfe, 0xd3, 0xcb, 0x04, 0x54, 0x05, 0xdd, 0x89, 0x84, 0x35, 0xcd, 0x1e, 0x1d, 0xa3, 0x83, 0x24, 0xf9, 0xf9, 0xed, 0xd3, 0xbf, 0x15, 0x92, 0x35, 0xbf, 0x8f, 0x95, 0x95, 0x06, 0xcd, 0xa6, 0x41, 0xb7, 0xdb, 0xa4, 0x50, 0x28, 0x11, 0x0a, 0xc9, 0x4e, 0x12, 0x9f, 0x49, 0x2c, 0x16, 0x15, 0xd1, 0xba, 0x80, 0xaa, 0x2a, 0xd8, 0xb6, 0xc5, 0x25, 0x97, 0x5c, 0x82, 0xdf, 0xef, 0x23, 0x99, 0x4a, 0x72, 0xdf, 0xb7, 0xbe, 0xcd, 0xf0, 0x70, 0x8e, 0x5d, 0xbb, 0xf7, 0x10, 0x8f, 0x47, 0x29, 0x14, 0xca, 0xa8, 0xaa, 0x9f, 0x54, 0x3a, 0xca, 0xde, 0xbd, 0x73, 0xbc, 0xfb, 0x8a, 0xbf, 0xe1, 0xa4, 0x93, 0x8f, 0x61, 0x6a, 0xef, 0xf4, 0x61, 0x19, 0x08, 0xee, 0x10, 0xe2, 0xca, 0x1b, 0xfb, 0xe3, 0x7a, 0xdd, 0x50, 0x13, 0xd7, 0x2b, 0x42, 0x96, 0x65, 0xf0, 0x89, 0x73, 0x2f, 0xcb, 0x12, 0x7f, 0xfc, 0xe3, 0x4b, 0x3c, 0xff, 0xfc, 0x56, 0xb1, 0xbe, 0xe9, 0xf6, 0xf0, 0xe1, 0xf7, 0x5e, 0xcb, 0x45, 0xcd, 0xba, 0xdd, 0xae, 0xf7, 0xfd, 0x84, 0xe2, 0xa5, 0xeb, 0x4d, 0xe4, 0x6f, 0x8e, 0x56, 0x75, 0xb9, 0x66, 0x6f, 0x4e, 0x8b, 0xec, 0x77, 0x85, 0x73, 0xbf, 0xde, 0xf5, 0xed, 0xe8, 0x6f, 0xc8, 0x85, 0xb7, 0xc1, 0xa1, 0x69, 0xff, 0xcd, 0x26, 0x35, 0xee, 0x7f, 0xf7, 0xff, 0xfe, 0x00, 0x52, 0x40, 0xe5, 0x8e, 0xc5, 0xc5, 0x45, 0x34, 0x4d, 0x2c, 0xf8, 0x33, 0x19, 0xa1, 0xd9, 0x73, 0xfd, 0x9f, 0x5d, 0x82, 0x9c, 0x61, 0x18, 0x7d, 0xf0, 0xa3, 0xe8, 0xf2, 0x53, 0xc9, 0x24, 0xdd, 0x4e, 0x97, 0x85, 0xb9, 0x15, 0x72, 0x99, 0x14, 0x66, 0xb7, 0x87, 0x6d, 0xd9, 0xb4, 0x9b, 0x2d, 0x12, 0xf1, 0x38, 0x3e, 0x20, 0x12, 0x0e, 0x53, 0x29, 0x97, 0x31, 0x7b, 0x3d, 0xc6, 0x46, 0x47, 0xc1, 0xb6, 0xa9, 0x56, 0x2a, 0x58, 0xa6, 0x49, 0xb3, 0xd9, 0xe2, 0xc8, 0x23, 0x8f, 0x14, 0x04, 0x00, 0x53, 0x30, 0xa8, 0x03, 0x81, 0x10, 0x92, 0x24, 0x3b, 0xec, 0xe7, 0x68, 0xdf, 0xd4, 0xe3, 0x73, 0xe4, 0x3e, 0x3a, 0xaa, 0x12, 0x14, 0x5e, 0xec, 0x7a, 0x84, 0x80, 0x12, 0x60, 0x79, 0x71, 0x11, 0x2d, 0xa4, 0xd1, 0x69, 0xb7, 0x98, 0x9c, 0x98, 0x24, 0x18, 0x08, 0x92, 0x4a, 0x26, 0xbc, 0x66, 0x62, 0x20, 0x3b, 0x40, 0xcf, 0xe8, 0x21, 0xf9, 0x64, 0xda, 0xcd, 0x36, 0xa1, 0x60, 0x10, 0xa3, 0xd3, 0x45, 0x0d, 0xfa, 0x31, 0x3a, 0x4d, 0x56, 0x96, 0x17, 0xc9, 0x66, 0xd2, 0x1c, 0xb1, 0x6e, 0x2d, 0x5d, 0xc3, 0x20, 0x1e, 0x8d, 0x72, 0xcc, 0xd1, 0x1b, 0x69, 0x54, 0xea, 0x24, 0x62, 0x71, 0xa6, 0xf7, 0x1f, 0x60, 0xfd, 0xba, 0x23, 0x88, 0x86, 0x63, 0x4c, 0xac, 0x5a, 0x85, 0xd1, 0xe9, 0x10, 0x8b, 0xc4, 0xd0, 0x75, 0x05, 0xdb, 0x32, 0xa9, 0xd7, 0xaa, 0xc4, 0xa3, 0x31, 0xfc, 0x3e, 0x9f, 0x68, 0x40, 0x6c, 0x9b, 0x56, 0xa3, 0x41, 0x26, 0x9b, 0x65, 0x6c, 0x74, 0x98, 0x5d, 0xaf, 0xbf, 0x4e, 0x7e, 0xa5, 0xc6, 0x40, 0x2e, 0x89, 0x22, 0xf9, 0x28, 0x17, 0x5b, 0x64, 0x33, 0x61, 0x0a, 0xf9, 0x2a, 0xd5, 0x4a, 0x89, 0x13, 0x8e, 0x3f, 0x9e, 0xb9, 0xd9, 0x59, 0xde, 0x71, 0xf6, 0x59, 0x2c, 0x2f, 0x2f, 0xb2, 0x6a, 0x7c, 0x0c, 0x5d, 0xd7, 0x39, 0xe1, 0xb8, 0x8d, 0xe4, 0xb2, 0x59, 0x2a, 0x95, 0x02, 0x60, 0x32, 0x3b, 0x33, 0xcd, 0xa9, 0xa7, 0xbe, 0x85, 0xe9, 0xe9, 0xfd, 0xfc, 0xf3, 0x3f, 0x7f, 0x8f, 0xf5, 0xeb, 0x93, 0xa8, 0x8a, 0xc5, 0xa9, 0xa7, 0x9e, 0xcc, 0xe2, 0xc1, 0x19, 0x8c, 0x4e, 0x03, 0xe8, 0x32, 0x38, 0x90, 0xa6, 0x5a, 0x29, 0x10, 0xd1, 0x75, 0x4a, 0xc5, 0x3c, 0xb1, 0x68, 0x18, 0xa3, 0xd3, 0xc4, 0xb6, 0x7a, 0x74, 0x3a, 0x4d, 0x2c, 0x53, 0xec, 0xce, 0x14, 0xd5, 0x8f, 0x2c, 0xe3, 0x34, 0x18, 0x15, 0x27, 0x4a, 0xb2, 0xcb, 0xc4, 0xc4, 0x08, 0x9a, 0xa6, 0x62, 0x59, 0x06, 0x7e, 0xbf, 0x89, 0xa6, 0x29, 0x28, 0x0a, 0x8e, 0x1d, 0xaa, 0x0f, 0xd3, 0x6c, 0xe3, 0xf3, 0xf5, 0xf0, 0xcb, 0x22, 0x45, 0xcc, 0xef, 0xb7, 0x09, 0x04, 0x64, 0x22, 0x51, 0x9d, 0x48, 0x54, 0x27, 0x14, 0x52, 0x51, 0x55, 0x89, 0x6a, 0xad, 0xc8, 0xa6, 0x4d, 0x1b, 0x08, 0x06, 0x15, 0x32, 0x99, 0x24, 0x63, 0xe3, 0xc3, 0x58, 0x56, 0x97, 0x4c, 0x26, 0xc9, 0x9e, 0xbd, 0x07, 0x98, 0x98, 0x58, 0xcb, 0xec, 0xec, 0x0c, 0x91, 0x48, 0x88, 0x66, 0xb3, 0xc1, 0xc4, 0xc4, 0x30, 0x43, 0x43, 0x03, 0x8c, 0x8c, 0x0c, 0xb0, 0x66, 0xcd, 0x04, 0x5b, 0xb7, 0xbe, 0x41, 0x3a, 0x1d, 0xa3, 0x54, 0xaa, 0x39, 0x70, 0x9b, 0xff, 0x30, 0x12, 0xca, 0xfa, 0x75, 0x93, 0x58, 0x96, 0xe1, 0x20, 0x0c, 0x45, 0x1a, 0x8d, 0x0e, 0xbd, 0x9e, 0x41, 0x2e, 0x97, 0x15, 0x52, 0x3a, 0xbb, 0xcb, 0xc8, 0xc8, 0x88, 0x70, 0x7f, 0xd3, 0x75, 0xcf, 0x50, 0x44, 0x48, 0x47, 0x5a, 0xa8, 0x8a, 0xea, 0x1d, 0xf6, 0x6e, 0x17, 0x87, 0x09, 0x7e, 0x88, 0x33, 0xb2, 0x6e, 0xdd, 0x24, 0x60, 0x7b, 0x16, 0xa5, 0x3e, 0x9f, 0x1f, 0x49, 0xf6, 0x03, 0x36, 0xbd, 0x9e, 0x6b, 0x00, 0x61, 0x3b, 0xb6, 0x95, 0x3e, 0x3a, 0x1d, 0xa1, 0xf1, 0x96, 0x65, 0x89, 0x70, 0x38, 0x4c, 0xb3, 0x59, 0xf3, 0xf6, 0x66, 0xfd, 0x69, 0x49, 0xae, 0x44, 0x2d, 0x1a, 0xd6, 0x01, 0xf1, 0xf5, 0x60, 0x3b, 0x7c, 0x11, 0x8b, 0x70, 0x58, 0x27, 0x9b, 0xcd, 0xe0, 0x97, 0x6c, 0x62, 0xf1, 0x08, 0x6a, 0x40, 0xa6, 0xd5, 0x6e, 0x10, 0x0a, 0x05, 0x68, 0x36, 0xeb, 0xd8, 0x58, 0x98, 0x96, 0x41, 0x3a, 0x95, 0xc6, 0x30, 0x44, 0xae, 0x80, 0x68, 0xfc, 0x7b, 0x04, 0x83, 0x01, 0x86, 0x86, 0x72, 0xac, 0x5d, 0x3b, 0x41, 0xb5, 0x5a, 0x11, 0x4e, 0x8b, 0x92, 0x0f, 0xd3, 0x14, 0xce, 0x78, 0xcd, 0x66, 0x83, 0x7d, 0xfb, 0x0e, 0x32, 0x3e, 0x9e, 0xa3, 0x67, 0x09, 0x2e, 0xc0, 0xc4, 0xc4, 0x2a, 0xe6, 0xe6, 0xe6, 0x91, 0x24, 0x3f, 0x3e, 0xbf, 0x8f, 0xe1, 0xe1, 0x11, 0x7a, 0xbd, 0x2e, 0x27, 0x9d, 0x7c, 0x92, 0x47, 0x66, 0xdc, 0xbe, 0x7d, 0x1b, 0xba, 0xae, 0xb3, 0x75, 0xeb, 0x7e, 0x22, 0x11, 0x85, 0xd3, 0x4e, 0x7b, 0x1b, 0xba, 0x1e, 0xe1, 0x85, 0x17, 0x5e, 0x21, 0x1c, 0x16, 0x88, 0xc6, 0xca, 0xca, 0x32, 0xa6, 0x09, 0x23, 0xa3, 0x82, 0xcb, 0x91, 0xcf, 0xb7, 0x09, 0x04, 0x24, 0x14, 0x45, 0x76, 0x0c, 0x3e, 0x86, 0x1c, 0xe8, 0xdd, 0xe7, 0x90, 0xf6, 0xc2, 0x74, 0x3a, 0x4d, 0xe2, 0xf1, 0x38, 0x07, 0x0f, 0x1e, 0x24, 0x9f, 0xaf, 0x10, 0x0e, 0x0b, 0x52, 0xdf, 0xdc, 0xdc, 0x1c, 0x23, 0x23, 0x23, 0x3c, 0xf8, 0xe0, 0x83, 0x1e, 0xd1, 0xad, 0xd5, 0x32, 0x90, 0x65, 0xf1, 0x0c, 0x68, 0x5a, 0x10, 0x2d, 0x14, 0xa0, 0x5c, 0xae, 0xf1, 0xa5, 0x2f, 0x7d, 0x91, 0x2b, 0xae, 0x78, 0x17, 0xcf, 0x3c, 0xf3, 0x0c, 0xf9, 0x7c, 0x9e, 0x54, 0x2a, 0x49, 0xa1, 0x50, 0xa5, 0x5e, 0x6f, 0x11, 0x8d, 0x86, 0xd0, 0x75, 0x8d, 0xd1, 0xd1, 0x51, 0xd6, 0xaf, 0x5f, 0xcf, 0x93, 0x4f, 0x3e, 0x8d, 0x61, 0xb4, 0x69, 0xb7, 0x6d, 0xbe, 0x71, 0xd7, 0x1d, 0x4c, 0xae, 0x5e, 0xc5, 0xe6, 0xcd, 0xeb, 0x69, 0x35, 0x1b, 0x04, 0x02, 0x0a, 0xdd, 0x76, 0x9b, 0x5a, 0xa5, 0x4a, 0x40, 0x55, 0x09, 0x6a, 0x21, 0xd2, 0x89, 0x18, 0x01, 0x45, 0xc1, 0xa6, 0x87, 0x22, 0xfb, 0x89, 0xc6, 0x74, 0xb2, 0x99, 0x24, 0x83, 0x03, 0x59, 0xf2, 0xc5, 0x3c, 0x9d, 0xb6, 0x08, 0x6c, 0x1a, 0x18, 0xc8, 0xd2, 0x6a, 0xd6, 0x49, 0xa7, 0x52, 0x74, 0x8d, 0x0e, 0x95, 0x72, 0x09, 0x4d, 0x8f, 0x7a, 0x59, 0xdb, 0xc2, 0xc5, 0x4f, 0x40, 0xe9, 0xa6, 0x69, 0xa1, 0x39, 0x84, 0xae, 0x76, 0x5b, 0x30, 0xfa, 0x23, 0x91, 0x30, 0x8d, 0x46, 0x9d, 0x55, 0xab, 0x56, 0xb1, 0x6b, 0xd7, 0x2e, 0x11, 0xba, 0x12, 0x0d, 0xd3, 0xe9, 0xb4, 0x09, 0x04, 0x54, 0xf4, 0xb0, 0xc6, 0xf2, 0xf2, 0x12, 0x6a, 0x40, 0x46, 0x51, 0x24, 0x3a, 0x46, 0x9b, 0x56, 0xcb, 0x20, 0x91, 0x88, 0xa3, 0x69, 0x62, 0xe2, 0x55, 0x54, 0x89, 0x72, 0xb9, 0x84, 0xa6, 0x87, 0x98, 0x9d, 0x3d, 0x40, 0x61, 0x25, 0x8f, 0x2c, 0x4b, 0x2c, 0x2c, 0x2c, 0x50, 0x6f, 0xd4, 0xb1, 0x2d, 0x9b, 0x57, 0x5f, 0x7d, 0x95, 0x57, 0x5f, 0xdd, 0x8a, 0x5f, 0x92, 0x18, 0x1d, 0x1e, 0xc4, 0x32, 0x4d, 0x66, 0x67, 0xe6, 0x58, 0x58, 0x98, 0x63, 0x62, 0x62, 0x84, 0x5d, 0xbb, 0x76, 0x61, 0x18, 0x06, 0x4b, 0x4b, 0x4b, 0x34, 0x1a, 0x0d, 0x5a, 0xf5, 0x3a, 0xcd, 0xba, 0x80, 0x9d, 0xeb, 0xd5, 0x2a, 0x6b, 0xd6, 0xac, 0xa1, 0x51, 0xaf, 0xf1, 0xbb, 0x2d, 0x7f, 0x60, 0x79, 0x65, 0x91, 0x62, 0xa9, 0x40, 0xab, 0xd5, 0x64, 0xdb, 0xb6, 0xd7, 0x38, 0xf5, 0xb4, 0x53, 0xd1, 0xb4, 0x10, 0x95, 0x6a, 0x19, 0xcb, 0x6e, 0x13, 0x54, 0x64, 0x4a, 0xc5, 0x12, 0xba, 0x16, 0x42, 0x96, 0x64, 0x8e, 0xda, 0x70, 0x14, 0x63, 0xa3, 0x63, 0x1c, 0x98, 0x3e, 0xc0, 0xc6, 0xa3, 0x36, 0xb2, 0x76, 0xfd, 0x3a, 0x06, 0x06, 0x72, 0xbc, 0xfa, 0xea, 0x3e, 0xa6, 0xa7, 0x77, 0x93, 0xcd, 0xe6, 0x98, 0x9a, 0xda, 0x47, 0xbb, 0xdd, 0x60, 0xdb, 0xb6, 0xed, 0xf8, 0x25, 0xb1, 0xbe, 0x30, 0x4d, 0x8b, 0x60, 0x48, 0xa1, 0xd3, 0x69, 0xf3, 0xf6, 0x33, 0xde, 0xca, 0xca, 0xca, 0x32, 0x53, 0x53, 0x53, 0x54, 0xcb, 0xf5, 0xc3, 0x7c, 0x2e, 0xdc, 0x62, 0xe7, 0xa2, 0x65, 0x6e, 0xa3, 0xed, 0x42, 0xee, 0xee, 0x84, 0xed, 0xfe, 0x5b, 0xa3, 0x51, 0xf3, 0xd6, 0x5f, 0x02, 0x5d, 0xf6, 0x63, 0x99, 0x42, 0x19, 0x52, 0xa9, 0x34, 0x88, 0x46, 0xc3, 0x87, 0x15, 0xec, 0x7e, 0xe7, 0x46, 0x71, 0xae, 0xbb, 0x87, 0x99, 0xd1, 0xb8, 0x93, 0x78, 0x7f, 0xc8, 0x52, 0x7f, 0x41, 0x7e, 0xb3, 0x63, 0x9c, 0xa6, 0x69, 0x5e, 0x9c, 0x6a, 0x28, 0x14, 0x3a, 0xcc, 0x84, 0x4a, 0xa8, 0x6d, 0xcc, 0xc3, 0x9a, 0x85, 0x7e, 0x39, 0x5d, 0xbf, 0xc7, 0xbb, 0xfb, 0xff, 0x01, 0x48, 0xe7, 0x9f, 0x77, 0xe6, 0x1d, 0xab, 0x57, 0xaf, 0x26, 0x95, 0x4a, 0x51, 0x28, 0x14, 0x98, 0x9a, 0x9a, 0x72, 0xe0, 0x44, 0xc3, 0x7b, 0x71, 0x77, 0xb9, 0x2f, 0x76, 0x71, 0xf1, 0x3e, 0x37, 0x2d, 0xb1, 0x77, 0x3f, 0xeb, 0xac, 0xb7, 0x53, 0xaf, 0xd7, 0x89, 0x46, 0xa3, 0xe4, 0x72, 0x03, 0xce, 0x4e, 0xce, 0x4f, 0x30, 0x28, 0xe4, 0x37, 0x23, 0x23, 0x23, 0x9e, 0xf6, 0x36, 0x95, 0x4a, 0x11, 0x8f, 0xc7, 0x19, 0x1c, 0x1c, 0x64, 0x70, 0x60, 0x18, 0x1f, 0x7e, 0xb4, 0x90, 0x8e, 0xa6, 0x69, 0x4e, 0x30, 0x80, 0xcd, 0xd2, 0xd2, 0x0a, 0xd9, 0x6c, 0x8e, 0x80, 0xaa, 0xe2, 0xc3, 0x8f, 0x69, 0xf6, 0x1c, 0xc2, 0x92, 0xe2, 0x91, 0x84, 0x7c, 0x3e, 0x1f, 0x92, 0x4f, 0xb0, 0x44, 0xc7, 0xc6, 0xc6, 0x09, 0x04, 0x54, 0x26, 0x26, 0x56, 0x63, 0x59, 0x36, 0x8a, 0x22, 0x22, 0x13, 0xfd, 0x92, 0x0f, 0xb3, 0x67, 0x3b, 0x86, 0xfc, 0x30, 0x34, 0x34, 0xcc, 0xda, 0xb5, 0xeb, 0xb0, 0x6d, 0x1f, 0x93, 0x93, 0x93, 0xec, 0x99, 0x7a, 0x9d, 0x6a, 0xb5, 0x4a, 0x34, 0x1a, 0x25, 0x9f, 0xcf, 0xf3, 0xc6, 0x1b, 0x7b, 0x58, 0xb7, 0x6e, 0xd2, 0x23, 0x45, 0x0d, 0x0f, 0x8c, 0x62, 0xdb, 0xf0, 0xc6, 0x1b, 0x7b, 0x98, 0x9f, 0x9f, 0x67, 0x68, 0x68, 0x88, 0x42, 0xa1, 0xc0, 0xc8, 0xf0, 0x28, 0xd1, 0x68, 0x94, 0xb1, 0xf1, 0x21, 0xc6, 0xc6, 0xc6, 0x90, 0x65, 0x05, 0xbf, 0x4f, 0x22, 0x14, 0xd2, 0x00, 0x9b, 0x87, 0x1e, 0x7a, 0x9c, 0x33, 0xcf, 0x3c, 0x8d, 0xe5, 0x7c, 0x1e, 0x5d, 0xd7, 0x59, 0xb7, 0x6e, 0x1d, 0x07, 0x0f, 0xce, 0x90, 0xcf, 0xd7, 0xf8, 0xf0, 0x87, 0xff, 0x81, 0xd5, 0xab, 0xc7, 0x18, 0x1c, 0x1c, 0xe4, 0x5d, 0xef, 0x7c, 0x17, 0xbf, 0x7d, 0xea, 0x19, 0xce, 0x3d, 0xe7, 0x6c, 0x76, 0xec, 0xd8, 0xc1, 0xd4, 0xd4, 0x3e, 0x26, 0xd7, 0xac, 0x66, 0x69, 0xe9, 0x20, 0xc3, 0xc3, 0x43, 0x44, 0x23, 0x21, 0xc6, 0xc6, 0x47, 0xc9, 0x66, 0xd3, 0xec, 0xdc, 0xb9, 0x93, 0x23, 0x8e, 0x38, 0x82, 0x3f, 0xbf, 0xf2, 0x27, 0x16, 0x16, 0xe6, 0x58, 0xb7, 0x6e, 0x18, 0x59, 0x15, 0x2b, 0x88, 0x72, 0xb9, 0x88, 0x24, 0xe1, 0x38, 0x6e, 0x09, 0xeb, 0x45, 0x49, 0xf2, 0x51, 0xad, 0xd4, 0x48, 0xa7, 0x53, 0x94, 0xcb, 0x25, 0xc2, 0x11, 0x1d, 0x1b, 0xdb, 0x61, 0xe9, 0x07, 0x50, 0x55, 0x85, 0x6e, 0x4f, 0x18, 0x9e, 0xb8, 0xe6, 0x35, 0x82, 0xac, 0x25, 0x0a, 0x92, 0x65, 0x99, 0x0c, 0x0c, 0xe4, 0x3c, 0xa7, 0x35, 0x5d, 0x17, 0x84, 0x26, 0x57, 0x3f, 0x1d, 0x0c, 0x06, 0x09, 0x47, 0x15, 0x64, 0xd9, 0x07, 0x98, 0xf8, 0x25, 0x08, 0x86, 0x54, 0x42, 0x5a, 0x40, 0x78, 0xa0, 0x4b, 0x30, 0x36, 0x36, 0xee, 0xc1, 0xf3, 0xd5, 0x6a, 0xd5, 0xe1, 0x5f, 0x44, 0x01, 0x9b, 0xb1, 0xb1, 0x2c, 0x4f, 0x3d, 0xf5, 0x17, 0xda, 0x6d, 0x83, 0x5e, 0xcf, 0xe0, 0xb4, 0xd3, 0x4e, 0xf3, 0x60, 0xad, 0xbd, 0x7b, 0xf7, 0xb2, 0x7f, 0xff, 0x2c, 0xe9, 0x54, 0x92, 0xf3, 0xce, 0x3b, 0x8f, 0xbd, 0x7b, 0x77, 0x1f, 0x66, 0xe8, 0xa0, 0xeb, 0x3a, 0xa9, 0x54, 0x0a, 0xab, 0xd7, 0x71, 0x48, 0x21, 0x7e, 0x0a, 0x85, 0x22, 0xe3, 0xe3, 0x43, 0xf8, 0x7c, 0xe2, 0xb0, 0x06, 0x82, 0x0a, 0x8b, 0xcb, 0x05, 0x52, 0xe9, 0x38, 0xf8, 0x6c, 0xc2, 0x61, 0x9d, 0x58, 0x2c, 0x8a, 0xa2, 0xc8, 0x04, 0x82, 0x2a, 0x8d, 0x46, 0x95, 0x76, 0xcb, 0xdd, 0x7d, 0xd9, 0x0e, 0x14, 0x2d, 0x76, 0x9b, 0xa9, 0x54, 0x8a, 0x74, 0x3a, 0x4d, 0xcf, 0x14, 0x0c, 0xd7, 0x44, 0x22, 0x41, 0x3a, 0x9d, 0x46, 0xd7, 0x35, 0xcf, 0x0a, 0xd6, 0xc6, 0xc2, 0x87, 0x1f, 0x59, 0x96, 0x3c, 0x98, 0xbe, 0xdd, 0xee, 0x61, 0x9a, 0x22, 0xe2, 0x36, 0x1e, 0x8f, 0x53, 0x6f, 0x54, 0x09, 0x87, 0xc3, 0x5e, 0x51, 0xef, 0xdf, 0x87, 0xa9, 0xaa, 0x4a, 0xbb, 0x25, 0x26, 0x1c, 0x59, 0x91, 0x08, 0x86, 0x02, 0x80, 0x98, 0xfe, 0x25, 0xd9, 0x8f, 0xa6, 0x85, 0xd0, 0xf5, 0x20, 0x03, 0x03, 0x39, 0x54, 0x55, 0xc1, 0x30, 0xda, 0x8c, 0x8d, 0x8d, 0x62, 0xdb, 0x16, 0x6b, 0xd6, 0x4c, 0x38, 0x93, 0x8d, 0xcd, 0xf0, 0xf0, 0x10, 0xb9, 0x81, 0x34, 0x8a, 0x02, 0x9a, 0x16, 0x24, 0x12, 0x09, 0x83, 0xcf, 0xa6, 0x58, 0x2c, 0xe0, 0xf7, 0x49, 0x74, 0x3a, 0x6d, 0xa2, 0xd1, 0x08, 0xc9, 0x64, 0x0a, 0xd3, 0xec, 0x01, 0x3e, 0x56, 0x4f, 0x8e, 0x62, 0x63, 0x91, 0xcd, 0xa5, 0x90, 0x24, 0xd9, 0xb9, 0x40, 0x24, 0x62, 0xb1, 0x38, 0x81, 0x40, 0x80, 0x57, 0x5f, 0x7d, 0x8d, 0xfd, 0xfb, 0x97, 0xf1, 0xf9, 0xbb, 0xec, 0xdb, 0xb7, 0x8f, 0x50, 0x28, 0xc4, 0xab, 0xaf, 0x6e, 0xe3, 0xa4, 0x93, 0x4e, 0x60, 0x61, 0x61, 0x3f, 0x37, 0xdd, 0x74, 0x13, 0x9a, 0xa6, 0x31, 0x36, 0xba, 0x8a, 0x27, 0x1e, 0x7f, 0x1a, 0xcb, 0x59, 0xaf, 0x08, 0x59, 0x4e, 0x97, 0x56, 0xbb, 0x49, 0xab, 0xd5, 0x25, 0x9b, 0x4d, 0xd1, 0x6c, 0x0a, 0x05, 0x86, 0x48, 0x4b, 0x13, 0x77, 0x84, 0x80, 0x58, 0x2d, 0xc6, 0xc6, 0x26, 0x38, 0xf6, 0xd8, 0x63, 0xd9, 0xb5, 0x6b, 0x17, 0xb5, 0x5a, 0x8b, 0x54, 0x2a, 0xea, 0x38, 0x43, 0x1a, 0xdc, 0x77, 0xdf, 0x3d, 0x1c, 0x7d, 0xf4, 0xd1, 0x3c, 0xfc, 0xf0, 0xcf, 0xd0, 0xf5, 0x10, 0x95, 0x8a, 0xf0, 0x24, 0x70, 0x73, 0xa2, 0x7b, 0xbd, 0x9e, 0x73, 0xf9, 0x86, 0x38, 0xf1, 0xc4, 0x13, 0xd9, 0xb2, 0x65, 0x0b, 0xdb, 0xb7, 0xbf, 0xee, 0xe4, 0xd4, 0x5b, 0xc2, 0x5f, 0x40, 0xc1, 0x91, 0xd2, 0xd5, 0x18, 0x18, 0xc8, 0xb2, 0x6d, 0x9b, 0xf8, 0x1d, 0x2e, 0xb9, 0xe4, 0x12, 0xae, 0xbb, 0xee, 0xbd, 0x84, 0x42, 0x3e, 0xbe, 0x78, 0xe7, 0xd7, 0xd8, 0xfd, 0xc6, 0x76, 0xb6, 0x6d, 0xdb, 0xc5, 0xd2, 0xc2, 0x2c, 0xc7, 0x1c, 0x73, 0x8c, 0xd8, 0x07, 0xab, 0x2a, 0x9b, 0x36, 0x6e, 0xc4, 0x30, 0x0c, 0x96, 0x57, 0x16, 0xd1, 0x82, 0x21, 0x62, 0xf1, 0x30, 0xbd, 0x6e, 0x87, 0x46, 0xa3, 0x46, 0xa7, 0xd3, 0xc6, 0x30, 0x7b, 0x8c, 0x8f, 0x8f, 0xd1, 0x68, 0xd4, 0x31, 0xad, 0x1e, 0x93, 0xab, 0xd7, 0x90, 0x4e, 0xa7, 0x18, 0x1d, 0x1d, 0x41, 0xd7, 0xc3, 0x74, 0x7b, 0x3e, 0xaa, 0xd5, 0x1a, 0xa9, 0x54, 0xda, 0x91, 0x23, 0x55, 0x91, 0x65, 0x85, 0x46, 0xa3, 0x49, 0xb7, 0xdb, 0x73, 0x78, 0x4b, 0x06, 0xb1, 0x58, 0x9c, 0x4a, 0xa5, 0x8c, 0xa6, 0xe9, 0x74, 0x3a, 0x6d, 0x6f, 0xfd, 0x22, 0x8a, 0x99, 0x70, 0x2d, 0x3c, 0xe2, 0x88, 0x75, 0xec, 0xdf, 0xbf, 0x9f, 0x99, 0x99, 0x59, 0x7a, 0x3d, 0x31, 0x11, 0xf7, 0x7a, 0x3e, 0x66, 0x66, 0x0e, 0x30, 0x32, 0x32, 0x42, 0xb9, 0x52, 0x64, 0x60, 0x60, 0x00, 0x49, 0xf2, 0x51, 0x28, 0xe4, 0x9d, 0x1c, 0x73, 0x88, 0x46, 0x62, 0xe4, 0xf3, 0x2b, 0xac, 0xac, 0xe4, 0xd9, 0xbb, 0x6f, 0x8a, 0xf1, 0xf1, 0x31, 0x06, 0x07, 0x87, 0x48, 0xa7, 0x53, 0xd4, 0xeb, 0x15, 0x46, 0x46, 0x46, 0xd8, 0xb6, 0x6d, 0x3f, 0xba, 0xae, 0x82, 0xcf, 0x66, 0x61, 0x21, 0xcf, 0xda, 0xb5, 0xab, 0x09, 0x85, 0x02, 0xc4, 0x23, 0x31, 0xa2, 0xd1, 0x18, 0xb2, 0x2c, 0x11, 0x8d, 0x44, 0x30, 0xcd, 0x1e, 0x46, 0xbb, 0xc3, 0xd2, 0xe2, 0x92, 0xb0, 0xfe, 0x8d, 0x44, 0xbd, 0x28, 0x67, 0x21, 0x1d, 0x2e, 0x88, 0xc1, 0xaf, 0xd5, 0x22, 0x9b, 0xcd, 0x3a, 0x96, 0xae, 0x1a, 0xab, 0x27, 0x27, 0xc8, 0x0d, 0x64, 0x09, 0x04, 0x55, 0x62, 0xf1, 0x28, 0xe9, 0x74, 0x8a, 0x70, 0x58, 0xa7, 0xd6, 0x68, 0x50, 0x2e, 0x97, 0xd9, 0xb8, 0x71, 0x1d, 0x3b, 0x77, 0x1c, 0x20, 0x91, 0xd0, 0xc9, 0xe5, 0x06, 0xc8, 0x66, 0xb3, 0x4c, 0x4d, 0x4d, 0x61, 0x5a, 0x60, 0x74, 0x7b, 0x64, 0xb3, 0x49, 0x9a, 0xcd, 0x06, 0xcd, 0x86, 0x49, 0x22, 0x19, 0xa6, 0x5e, 0x17, 0xab, 0x38, 0xa3, 0xd3, 0xf3, 0x86, 0x4b, 0xd7, 0x55, 0xd2, 0x85, 0xdd, 0xfb, 0xa7, 0x61, 0x97, 0x59, 0xde, 0xbf, 0xeb, 0xee, 0x76, 0xbb, 0x1e, 0xa7, 0x41, 0x98, 0xd8, 0x88, 0xf7, 0x3a, 0x14, 0xd4, 0x1c, 0x59, 0x69, 0xd8, 0x8b, 0x35, 0x75, 0xb3, 0x15, 0xdc, 0xfb, 0xc9, 0x65, 0xa9, 0x77, 0xbb, 0xbd, 0xc3, 0x64, 0x64, 0x6f, 0x2e, 0xbc, 0x6e, 0x21, 0xef, 0xd7, 0x91, 0xbb, 0xe4, 0xc0, 0x7e, 0x52, 0xb1, 0x2b, 0xa7, 0x15, 0x84, 0xe1, 0xb4, 0x77, 0x47, 0xd8, 0xb6, 0x75, 0x98, 0xcb, 0x66, 0x7f, 0xe1, 0xee, 0x97, 0xac, 0xf5, 0xbb, 0x47, 0xfa, 0xae, 0xbe, 0xf2, 0x42, 0xbb, 0x58, 0x2c, 0x72, 0xe0, 0xc0, 0x01, 0x8f, 0x6c, 0xe4, 0x16, 0xec, 0x6e, 0xb7, 0x4b, 0x32, 0x99, 0x64, 0x7a, 0x7a, 0x9e, 0x44, 0x42, 0xd0, 0xee, 0x57, 0xaf, 0x5e, 0x4d, 0xb1, 0x28, 0x74, 0xe2, 0xbd, 0x86, 0x58, 0xf0, 0x27, 0x93, 0x49, 0xd6, 0xac, 0x59, 0x23, 0x8c, 0x21, 0x96, 0x17, 0xbd, 0xd7, 0x72, 0x9d, 0xcf, 0x5c, 0x58, 0x20, 0x12, 0x89, 0x10, 0x8f, 0xc7, 0xbd, 0x24, 0x9c, 0xd9, 0x85, 0xb2, 0xc3, 0xfc, 0x95, 0x9c, 0x42, 0x2d, 0x76, 0x2a, 0x92, 0x24, 0x91, 0x2f, 0x2c, 0x7b, 0x76, 0x84, 0x3e, 0x9f, 0xed, 0x05, 0xc2, 0x44, 0xa3, 0x11, 0x6f, 0x0d, 0x10, 0x51, 0xc3, 0x22, 0x73, 0xda, 0xf9, 0xe5, 0x5d, 0x73, 0xff, 0x56, 0xab, 0x41, 0xbd, 0x5e, 0x27, 0x9b, 0x1d, 0xc0, 0xec, 0xd9, 0x9e, 0xbf, 0xaf, 0x69, 0xda, 0x0e, 0xa3, 0x50, 0xfc, 0x2c, 0xbf, 0xfd, 0xdf, 0x5f, 0x79, 0x81, 0xf7, 0xc2, 0x2a, 0xb3, 0xc7, 0x05, 0xe7, 0x5f, 0x24, 0x5c, 0xc8, 0x34, 0x4d, 0xb8, 0x8f, 0xc5, 0x62, 0xc4, 0x62, 0x09, 0x87, 0xf5, 0x5a, 0xa7, 0x56, 0xab, 0x7b, 0xbb, 0x98, 0x70, 0x54, 0xa6, 0xdd, 0xea, 0x78, 0x7c, 0x01, 0xd7, 0x6e, 0xd2, 0x6d, 0x5a, 0x92, 0xe9, 0x04, 0xc5, 0x62, 0x91, 0x76, 0xbb, 0x4d, 0x3e, 0x9f, 0xe7, 0xb7, 0xbf, 0x7d, 0x96, 0x4b, 0x2e, 0x39, 0x1f, 0xdb, 0x72, 0x21, 0x17, 0x99, 0x9f, 0xfd, 0xec, 0xe7, 0xe8, 0xe1, 0xa0, 0xd0, 0xbe, 0x77, 0x3b, 0x7c, 0xf8, 0x23, 0x37, 0x52, 0xab, 0xd5, 0x30, 0xcd, 0x2e, 0xf5, 0xea, 0x0a, 0x95, 0x4a, 0x49, 0x58, 0xbf, 0x3a, 0x64, 0xbd, 0x50, 0x48, 0xec, 0xa8, 0x7b, 0xa6, 0x41, 0x50, 0x3b, 0x14, 0x1a, 0xd0, 0x9f, 0x0c, 0xe4, 0x3e, 0xd8, 0xae, 0x0b, 0x9c, 0x0b, 0xe9, 0xb8, 0x04, 0x3c, 0x97, 0x79, 0x69, 0x9b, 0x7e, 0xe7, 0x61, 0x16, 0x3b, 0x3a, 0xb7, 0xfb, 0x2c, 0x97, 0x85, 0xcc, 0x25, 0x9d, 0x8e, 0x53, 0xa9, 0x54, 0xb0, 0x6d, 0x9b, 0x44, 0x22, 0x81, 0x24, 0x49, 0xd4, 0x6a, 0x82, 0xb5, 0x1b, 0x0a, 0x85, 0xa8, 0x76, 0x2a, 0x87, 0xed, 0x72, 0x22, 0x51, 0xb1, 0x5b, 0x16, 0xd3, 0x6a, 0x8b, 0x56, 0xab, 0xe9, 0x74, 0xad, 0x02, 0x42, 0xca, 0x64, 0x72, 0xde, 0xcf, 0xd2, 0x69, 0x77, 0xb1, 0xcd, 0x1c, 0xaa, 0x12, 0xf4, 0x98, 0xee, 0x8f, 0x3f, 0xfe, 0x6b, 0x67, 0xbf, 0x2c, 0x1e, 0xd0, 0x8b, 0x2f, 0xba, 0x14, 0x45, 0x51, 0x78, 0xf8, 0xe1, 0x87, 0xa9, 0xd5, 0x7a, 0xa8, 0x2a, 0x4e, 0x91, 0x1b, 0x10, 0xdc, 0x8e, 0x5e, 0x8b, 0xd1, 0xd1, 0x11, 0x02, 0x81, 0x00, 0x3b, 0xb7, 0xef, 0x61, 0xc3, 0x51, 0xab, 0xe9, 0xb4, 0xda, 0xf8, 0xfd, 0x82, 0x54, 0x36, 0x3f, 0x9f, 0x27, 0x9b, 0x4d, 0x11, 0x0e, 0x6b, 0x64, 0x92, 0x29, 0x9e, 0x7d, 0x76, 0x2b, 0xf1, 0x04, 0x8c, 0x0e, 0x8f, 0x08, 0x92, 0x4e, 0xad, 0xc5, 0xe2, 0xe2, 0x22, 0x95, 0x8a, 0xc9, 0xe8, 0x68, 0x82, 0x81, 0x81, 0x01, 0xcf, 0xce, 0x54, 0x4c, 0xd8, 0x2d, 0xa6, 0xa6, 0xa6, 0x98, 0x9c, 0x9c, 0xc4, 0x34, 0x7b, 0x54, 0x2a, 0x15, 0x34, 0x2d, 0x48, 0xad, 0x26, 0x20, 0xe2, 0xb9, 0xb9, 0x05, 0x87, 0xe4, 0x62, 0x12, 0x0c, 0x06, 0xbc, 0xc2, 0x25, 0x9e, 0x93, 0x26, 0x99, 0x4c, 0xd2, 0x3b, 0xec, 0xae, 0xa4, 0xcd, 0x65, 0xbb, 0x76, 0xbb, 0x5d, 0x82, 0x01, 0x1f, 0x36, 0x96, 0x97, 0xba, 0x56, 0x2e, 0x17, 0x9d, 0xf0, 0x19, 0xdd, 0x39, 0xf4, 0xba, 0x47, 0xa2, 0x71, 0x91, 0x83, 0x40, 0x50, 0xf1, 0xfc, 0xab, 0x55, 0x55, 0x74, 0xf4, 0xd5, 0x6a, 0x15, 0xd3, 0x14, 0x97, 0x43, 0xa9, 0x58, 0xf1, 0x9a, 0x54, 0xc3, 0xe8, 0x39, 0x0a, 0x0b, 0xc1, 0xb2, 0xed, 0x1a, 0x3d, 0x6a, 0xb5, 0x9a, 0xb3, 0xc7, 0xd7, 0x3c, 0xc7, 0xbb, 0x76, 0xbb, 0xe9, 0x7c, 0x2e, 0x62, 0xb2, 0x99, 0x9e, 0x9e, 0x63, 0x68, 0x38, 0x43, 0xab, 0xd9, 0x13, 0x8d, 0x93, 0x09, 0x7b, 0xf6, 0xec, 0xc5, 0xb2, 0x00, 0xdb, 0x4f, 0x26, 0x93, 0x11, 0xfe, 0xeb, 0xa5, 0x2a, 0x9a, 0xa6, 0x38, 0xa4, 0x54, 0xdd, 0x73, 0x6e, 0x6b, 0x36, 0x9d, 0xec, 0x79, 0xc9, 0x4f, 0x28, 0x14, 0xf0, 0xa4, 0x83, 0xed, 0x4e, 0xd3, 0xd9, 0x6b, 0xda, 0x94, 0x4a, 0x2d, 0x2e, 0xb9, 0xf8, 0x42, 0x0c, 0xc3, 0xe0, 0xe9, 0xa7, 0x9f, 0xa1, 0x6b, 0x98, 0x28, 0xaa, 0x44, 0xa7, 0x63, 0x92, 0xc9, 0xea, 0x5c, 0x7a, 0xe9, 0x25, 0xe4, 0xb2, 0x23, 0x7c, 0xe3, 0x1b, 0xdf, 0xa0, 0xdd, 0xb6, 0x08, 0x87, 0x0f, 0xe5, 0x50, 0x5f, 0x74, 0xd1, 0x45, 0x42, 0x0a, 0xd6, 0xae, 0xf0, 0xc4, 0x13, 0x4f, 0x60, 0x74, 0xba, 0x34, 0x9b, 0xa6, 0x93, 0x5f, 0x0f, 0xba, 0xa6, 0xd2, 0x6e, 0x1b, 0x68, 0x61, 0x1f, 0xbd, 0x9e, 0xcd, 0xe5, 0x97, 0x5f, 0x46, 0xa9, 0x54, 0xf2, 0x50, 0x46, 0x8f, 0x40, 0xd5, 0x6a, 0x10, 0x8d, 0x46, 0xd9, 0xb1, 0x63, 0x07, 0x41, 0xe7, 0x22, 0x6f, 0xb7, 0x7b, 0xbc, 0xf5, 0xad, 0x27, 0xd3, 0x6a, 0xb5, 0xc8, 0x25, 0x22, 0x58, 0xb6, 0xe9, 0x40, 0x9b, 0x3e, 0x54, 0x55, 0xc6, 0x2f, 0x09, 0x99, 0x68, 0xad, 0x56, 0x23, 0x9a, 0x8c, 0x78, 0xa6, 0x43, 0xa6, 0x09, 0xa1, 0xa0, 0x4e, 0x2c, 0x96, 0x40, 0x96, 0x55, 0x8c, 0x4e, 0x97, 0xe5, 0xe2, 0x0a, 0xc5, 0x62, 0x89, 0x4a, 0xb9, 0x86, 0x6d, 0xfb, 0x84, 0x87, 0x7f, 0xa7, 0x4b, 0xa3, 0x21, 0xac, 0xac, 0x51, 0x6c, 0x07, 0xa1, 0xf1, 0x79, 0x4a, 0x1e, 0xf7, 0x73, 0x96, 0x24, 0xbf, 0x77, 0x4e, 0xdd, 0x46, 0xda, 0xe8, 0xb6, 0x59, 0x58, 0x58, 0x70, 0xfc, 0x08, 0x82, 0xb4, 0x8d, 0x1e, 0x13, 0x13, 0x13, 0x04, 0x02, 0x21, 0xea, 0xf5, 0x06, 0xbd, 0xae, 0x45, 0xab, 0xd5, 0x71, 0xee, 0x4a, 0x1f, 0x0a, 0x7e, 0x8f, 0x00, 0xe6, 0x97, 0x70, 0x8a, 0x59, 0xef, 0x50, 0x08, 0x48, 0x4f, 0xc6, 0x95, 0x2c, 0xb7, 0x5a, 0x4d, 0xc7, 0xd3, 0xc0, 0xa6, 0xd1, 0x68, 0x30, 0x3e, 0x3e, 0x4e, 0xc4, 0xd1, 0x8d, 0x87, 0x42, 0x21, 0x14, 0x39, 0xe0, 0x28, 0x55, 0x4a, 0x14, 0x8b, 0x45, 0x81, 0xd4, 0x86, 0x45, 0x31, 0x93, 0xfd, 0x82, 0x47, 0x63, 0x39, 0xec, 0x74, 0x2c, 0x87, 0x78, 0x16, 0xd0, 0x0f, 0x33, 0x44, 0x71, 0xd9, 0xde, 0xdd, 0x6e, 0x57, 0x14, 0x30, 0xbf, 0xc2, 0x0b, 0x2f, 0x6c, 0xe3, 0x6d, 0x6f, 0x3b, 0x8e, 0x57, 0x5e, 0xd9, 0xca, 0x05, 0x17, 0x5c, 0x20, 0x58, 0xff, 0x48, 0xfc, 0xf4, 0xa7, 0x0f, 0xe3, 0x0f, 0x48, 0x34, 0x9b, 0x26, 0x92, 0x04, 0x83, 0x83, 0x19, 0x96, 0x96, 0x56, 0x18, 0x1c, 0xcc, 0xa0, 0xeb, 0x21, 0xf6, 0xef, 0x9f, 0xa1, 0xe7, 0x78, 0xbd, 0x24, 0x12, 0x11, 0x87, 0xf8, 0x5a, 0xf5, 0xce, 0x59, 0xab, 0xd5, 0x42, 0xf2, 0x07, 0x9c, 0x86, 0xa8, 0x8b, 0xae, 0xab, 0x0c, 0x0f, 0x0f, 0x33, 0x3f, 0x3f, 0x7f, 0xc8, 0x86, 0x36, 0x24, 0x5c, 0x4d, 0x85, 0x8a, 0xa4, 0x45, 0xc4, 0xf1, 0x41, 0x30, 0x4d, 0xdb, 0x6b, 0x14, 0xfa, 0xc3, 0x97, 0xfa, 0x73, 0x1a, 0x7a, 0xbd, 0x9e, 0x77, 0x6e, 0xdd, 0x61, 0xb5, 0xd7, 0xeb, 0x51, 0xaf, 0xd7, 0xbd, 0x5a, 0xe7, 0x9e, 0x83, 0xfe, 0xc4, 0xc4, 0x7e, 0x3f, 0x77, 0xdb, 0x36, 0x0f, 0x7b, 0x7d, 0xb7, 0x11, 0x71, 0x4d, 0xaa, 0xfa, 0xb3, 0x27, 0xfe, 0xff, 0x92, 0xd9, 0xfa, 0x91, 0x01, 0xcf, 0xa5, 0xf2, 0xb8, 0x63, 0xd7, 0xdf, 0x31, 0x30, 0x90, 0x63, 0x7c, 0x7c, 0x8c, 0x75, 0xeb, 0xd6, 0xb2, 0x61, 0xc3, 0x91, 0x4c, 0x4c, 0xac, 0x62, 0x78, 0x78, 0x88, 0xb1, 0xb1, 0x51, 0x72, 0xb9, 0x2c, 0xad, 0x56, 0x1d, 0xc3, 0xe8, 0x00, 0x36, 0x9a, 0x16, 0xf2, 0xfe, 0x77, 0xfd, 0x9a, 0x23, 0x68, 0xb7, 0xdb, 0xcc, 0xce, 0xce, 0xb2, 0x6b, 0xd7, 0x2e, 0xde, 0x78, 0xe3, 0x0d, 0x16, 0x16, 0xe6, 0x3d, 0xf7, 0xaf, 0x40, 0x40, 0xed, 0x8b, 0xb4, 0x3b, 0xe4, 0xf4, 0x55, 0x2e, 0x97, 0x29, 0x14, 0x0a, 0xc8, 0xaa, 0x88, 0x53, 0xcc, 0x64, 0xd2, 0xc4, 0xe2, 0x61, 0x54, 0x55, 0x41, 0x0f, 0x07, 0x49, 0xa6, 0xe2, 0xc4, 0x62, 0x51, 0x6f, 0x7f, 0xe9, 0x86, 0x56, 0xc4, 0xe3, 0x31, 0xcf, 0x5f, 0x1d, 0x20, 0x28, 0x07, 0xc0, 0xe7, 0x66, 0x54, 0x9b, 0x80, 0x8d, 0x1a, 0x50, 0x88, 0x44, 0x84, 0xa1, 0x4b, 0x22, 0x91, 0x44, 0xd3, 0x43, 0x48, 0x4e, 0x3a, 0x52, 0xb5, 0x5a, 0xf3, 0x76, 0x9e, 0x9d, 0x8e, 0xc1, 0xc2, 0xe2, 0x3c, 0xd5, 0x6a, 0x0d, 0x4d, 0xd3, 0x09, 0x06, 0x34, 0x0a, 0xf9, 0x06, 0xa1, 0x90, 0x42, 0xad, 0xd6, 0x60, 0xf7, 0xee, 0x3d, 0x84, 0xf5, 0x08, 0xbd, 0x9e, 0xe9, 0xc4, 0x76, 0xd6, 0xa8, 0x39, 0x32, 0xa9, 0x58, 0x2c, 0x46, 0x26, 0x93, 0xe1, 0x95, 0x57, 0x5e, 0x66, 0xd7, 0xae, 0x5d, 0xd4, 0xeb, 0xc2, 0xa0, 0x64, 0xe3, 0xc6, 0xa3, 0x08, 0x87, 0x23, 0x64, 0xb3, 0x59, 0x21, 0xfd, 0x33, 0xda, 0xe4, 0xf3, 0xc2, 0x90, 0xa6, 0x56, 0xab, 0x31, 0x34, 0x34, 0x48, 0x3a, 0x9d, 0xc6, 0xef, 0x97, 0x58, 0x5e, 0x5e, 0xa6, 0xde, 0x68, 0xb1, 0xbc, 0xbc, 0x48, 0xbd, 0x6e, 0x60, 0x9a, 0x5d, 0xfc, 0x92, 0xcd, 0xd3, 0x4f, 0xbf, 0xc8, 0xe5, 0x97, 0x5f, 0xc8, 0x73, 0xcf, 0x3d, 0xcb, 0x13, 0xbf, 0x7e, 0x1e, 0x59, 0x31, 0x58, 0xb3, 0x76, 0x35, 0xa3, 0x63, 0x63, 0x28, 0x01, 0x85, 0x76, 0xa7, 0x8d, 0x69, 0x59, 0x28, 0xaa, 0x42, 0x34, 0x1a, 0xf6, 0xe2, 0xfa, 0xfc, 0xce, 0xa1, 0x52, 0x14, 0xd5, 0xb1, 0x70, 0x95, 0x0f, 0xcb, 0xca, 0x75, 0xd9, 0x91, 0x2e, 0xd4, 0xa3, 0xeb, 0xba, 0xe7, 0xac, 0x84, 0xcf, 0xc7, 0xf2, 0xca, 0x0a, 0xa6, 0x65, 0x61, 0x03, 0x3e, 0xa7, 0x28, 0xa9, 0x41, 0x05, 0xcb, 0xb6, 0xc0, 0xe7, 0xc3, 0xb4, 0x4c, 0x2c, 0xdb, 0xc2, 0xe7, 0xf7, 0x61, 0x63, 0xd3, 0x31, 0x3a, 0x58, 0x08, 0x47, 0x35, 0x57, 0xf5, 0xe0, 0xf7, 0x4b, 0x18, 0x46, 0xc7, 0x81, 0xc5, 0x2d, 0x74, 0x5d, 0xa3, 0xd7, 0x33, 0x1d, 0xc3, 0x1d, 0x0b, 0x59, 0x52, 0x51, 0x14, 0x15, 0xdb, 0x82, 0x7a, 0xbd, 0x89, 0xd9, 0x0b, 0xd2, 0xed, 0x19, 0x3c, 0xfc, 0xdf, 0xbf, 0x61, 0x69, 0x71, 0x86, 0x6e, 0xd7, 0x74, 0xc8, 0x6f, 0x3d, 0xfc, 0x7e, 0x1f, 0x7b, 0x76, 0xef, 0x05, 0x60, 0x66, 0x66, 0x81, 0xa1, 0x21, 0x31, 0x61, 0xb6, 0xdb, 0x86, 0xc7, 0x9a, 0x0e, 0xe8, 0x41, 0x64, 0x59, 0x11, 0x12, 0xae, 0x0e, 0x24, 0x92, 0x3a, 0x99, 0x74, 0x1a, 0xcb, 0xb2, 0xa9, 0x54, 0xca, 0xd4, 0xeb, 0x62, 0x4a, 0x94, 0x24, 0x19, 0xbf, 0x0f, 0xaa, 0xd5, 0x3c, 0xa3, 0xa3, 0xc3, 0xc4, 0x63, 0x71, 0x81, 0x3a, 0xc9, 0xaa, 0x73, 0x69, 0x4a, 0xa4, 0x1c, 0x4b, 0xcb, 0x95, 0x95, 0x15, 0x6f, 0x02, 0xec, 0x74, 0x0c, 0x2a, 0x95, 0x06, 0xb1, 0x58, 0x98, 0x7c, 0x3e, 0x8f, 0xa2, 0x08, 0xc2, 0x5a, 0x24, 0xaa, 0x23, 0x49, 0x7e, 0x0c, 0x43, 0x10, 0x06, 0x63, 0xb1, 0x18, 0xc9, 0x64, 0x92, 0x48, 0x44, 0x04, 0xee, 0x08, 0x92, 0xa9, 0x09, 0x18, 0x87, 0x91, 0x63, 0xde, 0x1c, 0x02, 0xa1, 0x28, 0x78, 0x04, 0xae, 0x60, 0x50, 0x9c, 0x95, 0x64, 0x32, 0x4e, 0x32, 0x99, 0x74, 0x4c, 0x38, 0x54, 0x74, 0x3d, 0x44, 0x3c, 0x2e, 0xd4, 0x25, 0xc9, 0x94, 0x50, 0x09, 0x08, 0x9f, 0x6c, 0xe1, 0x98, 0xe8, 0x5e, 0x16, 0x82, 0x9c, 0xa8, 0x38, 0x50, 0xac, 0xd8, 0xef, 0xeb, 0x7a, 0xd8, 0xd9, 0xe7, 0xd9, 0xce, 0x44, 0x58, 0xa7, 0x51, 0x6f, 0x38, 0x9f, 0x4f, 0x8f, 0x6e, 0xd7, 0x4d, 0x7b, 0x12, 0x90, 0xbf, 0xa2, 0xa8, 0x44, 0xa3, 0x11, 0xda, 0xed, 0x26, 0x3e, 0x9f, 0xdf, 0xb1, 0x89, 0xed, 0x60, 0x18, 0xff, 0x8f, 0xae, 0x37, 0xeb, 0xb5, 0x2d, 0xbb, 0xee, 0xfb, 0x7e, 0xab, 0x6f, 0x76, 0xbf, 0xf7, 0xd9, 0xa7, 0xbd, 0x4d, 0x75, 0x64, 0xb1, 0xd8, 0x88, 0x71, 0x48, 0xca, 0x54, 0x1c, 0x42, 0x11, 0x60, 0x09, 0x30, 0x8c, 0x24, 0x36, 0x60, 0x03, 0x7e, 0x08, 0x62, 0x3f, 0xc4, 0x79, 0x70, 0x9e, 0xfc, 0x0d, 0xf4, 0x16, 0xe4, 0x0b, 0xf8, 0x29, 0xc8, 0x93, 0x61, 0x18, 0x01, 0x02, 0xd8, 0xb0, 0x83, 0x58, 0x90, 0x8c, 0x24, 0x76, 0x22, 0xc9, 0xb2, 0x41, 0x4a, 0x64, 0x15, 0x8b, 0xac, 0x62, 0x55, 0xdd, 0xba, 0xcd, 0xe9, 0x77, 0xbf, 0x57, 0xdf, 0xe5, 0x61, 0xcc, 0x39, 0xcf, 0x3e, 0x45, 0xe7, 0x02, 0x17, 0xbc, 0xf7, 0x5c, 0xd6, 0x6e, 0xd6, 0x9a, 0x6b, 0xce, 0x31, 0xfe, 0xe3, 0xdf, 0x54, 0x4c, 0x26, 0x53, 0x46, 0xa3, 0x31, 0xe3, 0xc9, 0x88, 0x7e, 0x7f, 0xc0, 0x17, 0x2f, 0xde, 0x30, 0x18, 0xf7, 0x0c, 0xe3, 0x57, 0x8f, 0x20, 0xda, 0x56, 0xf4, 0xfb, 0x75, 0xdd, 0x51, 0x97, 0x72, 0x80, 0x04, 0x41, 0x88, 0xeb, 0x3a, 0xea, 0xe0, 0x2d, 0x69, 0xdb, 0x1a, 0xcf, 0xb3, 0xf8, 0xf8, 0xe7, 0x9f, 0x72, 0x7b, 0x7b, 0x43, 0x9a, 0x16, 0xb2, 0x57, 0xc4, 0x11, 0x83, 0x41, 0x44, 0x47, 0xc3, 0x47, 0x1f, 0x7d, 0xc8, 0x4f, 0x7e, 0xf2, 0x53, 0x36, 0x9b, 0x9c, 0xd1, 0x28, 0x7c, 0x14, 0x64, 0xa3, 0xed, 0x87, 0xdb, 0xa6, 0xe0, 0x5b, 0x1f, 0x7c, 0xc0, 0x27, 0xbf, 0xfc, 0x25, 0x74, 0x1d, 0x7f, 0xef, 0xef, 0xfe, 0x1d, 0xbe, 0xf3, 0xad, 0x6f, 0x30, 0x19, 0x0f, 0xd5, 0x1c, 0xb8, 0x22, 0xdd, 0xd7, 0x7c, 0xf4, 0xe1, 0x2f, 0xf9, 0xce, 0xb7, 0xde, 0x67, 0x32, 0x1e, 0xf3, 0xaf, 0xff, 0xf0, 0xdf, 0xf0, 0x97, 0x7f, 0xf3, 0x7b, 0x9c, 0x9f, 0x9d, 0x31, 0x1a, 0xf4, 0xf8, 0xe0, 0x83, 0x6f, 0xf1, 0xe1, 0x87, 0x1f, 0x71, 0x73, 0x93, 0x71, 0x72, 0x32, 0xe5, 0xee, 0x2e, 0xe5, 0xfa, 0xea, 0x0d, 0x3f, 0xf8, 0xfe, 0xf7, 0xa1, 0xa9, 0xcd, 0xe1, 0xda, 0x34, 0xad, 0x8a, 0xa7, 0x6d, 0xc0, 0x02, 0xcf, 0xf3, 0x59, 0x6f, 0xd6, 0x94, 0x85, 0xec, 0x25, 0x59, 0x96, 0xab, 0x91, 0x4b, 0xc9, 0x6e, 0xb7, 0x67, 0xbd, 0x5a, 0x53, 0x54, 0x02, 0xa7, 0xd7, 0x75, 0x83, 0x65, 0x49, 0x6a, 0x5f, 0xdb, 0xb4, 0x22, 0x58, 0xf3, 0x5c, 0x7a, 0x83, 0xde, 0x81, 0x5d, 0x28, 0x38, 0xb6, 0xab, 0xae, 0x41, 0x9f, 0xe1, 0x70, 0xa8, 0x1a, 0x07, 0x19, 0x31, 0x64, 0x59, 0x46, 0x59, 0x94, 0x52, 0xb0, 0xf4, 0xfa, 0x1c, 0x1f, 0x9f, 0x12, 0x47, 0x21, 0x75, 0x55, 0xb1, 0xb8, 0x5b, 0xb0, 0xdd, 0x6c, 0xb1, 0xb0, 0x08, 0xfd, 0x10, 0xdb, 0xb2, 0x68, 0xeb, 0x96, 0x42, 0x29, 0x27, 0x64, 0xcd, 0xf9, 0x6a, 0x9f, 0x38, 0x50, 0x62, 0x94, 0xb0, 0x4f, 0x52, 0x3c, 0xdf, 0xa3, 0x6d, 0x3b, 0xe2, 0x5e, 0xcc, 0xec, 0xe8, 0x08, 0xcf, 0x77, 0x19, 0x4f, 0xc6, 0x3c, 0xbd, 0x78, 0x22, 0xe3, 0xa9, 0xad, 0x90, 0xde, 0x36, 0x9b, 0xad, 0xe2, 0x4f, 0x89, 0x8c, 0xd3, 0x0e, 0x45, 0xce, 0x35, 0x1a, 0x0e, 0x19, 0x8f, 0xc7, 0x3c, 0x7f, 0xf6, 0x8c, 0x0f, 0x3e, 0xf8, 0x80, 0xb3, 0xd3, 0x53, 0x71, 0x64, 0xac, 0x1a, 0x43, 0x90, 0xd5, 0xda, 0x6f, 0x7d, 0x1e, 0x88, 0xca, 0xc7, 0xe3, 0x83, 0x0f, 0xde, 0xe3, 0xe3, 0x8f, 0x3f, 0xa6, 0xae, 0x1b, 0xbe, 0xf3, 0x9d, 0xef, 0xa8, 0x02, 0x34, 0xe4, 0xc3, 0x0f, 0x7f, 0x46, 0x67, 0x39, 0xf4, 0x7a, 0x3e, 0xbe, 0xef, 0xb2, 0xd9, 0x6c, 0xe9, 0x3a, 0x19, 0x6d, 0xc4, 0x71, 0x44, 0x10, 0x78, 0x2c, 0x96, 0x7b, 0x33, 0x6a, 0xd2, 0xfb, 0xdc, 0xa1, 0xaf, 0x43, 0x91, 0x57, 0xfc, 0xce, 0xef, 0xfc, 0x0e, 0x5f, 0x7c, 0xf1, 0x39, 0xa3, 0xd1, 0x90, 0xbb, 0xbb, 0x3b, 0x4e, 0x4e, 0x4e, 0x8c, 0xc9, 0xcb, 0x7e, 0xbf, 0xc1, 0xf3, 0x7c, 0xfe, 0xfe, 0xdf, 0xff, 0xfb, 0xfc, 0xe2, 0x17, 0x1f, 0x91, 0x67, 0x85, 0xb2, 0x69, 0xae, 0xd8, 0xef, 0x0b, 0xa2, 0x28, 0x78, 0x44, 0x72, 0x3d, 0x8c, 0x2d, 0x3d, 0x84, 0xcf, 0xf5, 0xcc, 0x5e, 0x13, 0x5a, 0xbf, 0x1a, 0xe2, 0xf2, 0xd5, 0x60, 0x96, 0xc3, 0x67, 0x56, 0x1f, 0xe4, 0x87, 0x85, 0xc2, 0xa1, 0xc7, 0xbb, 0x1e, 0xd7, 0xe9, 0xc2, 0xfe, 0xb0, 0x71, 0xfb, 0x6a, 0x42, 0x9b, 0xe3, 0x38, 0x38, 0xef, 0xbc, 0x75, 0xf6, 0xfb, 0xcb, 0xc5, 0x82, 0xd7, 0xaf, 0x5e, 0x71, 0x7b, 0x73, 0xc3, 0x7e, 0xb7, 0x13, 0x78, 0x42, 0x69, 0x6d, 0xdb, 0xb6, 0x25, 0x4d, 0x12, 0xc5, 0x0c, 0x0f, 0x71, 0x1d, 0x87, 0xba, 0xaa, 0xc8, 0xd2, 0x94, 0x2c, 0x2d, 0xa9, 0x9b, 0x96, 0xf1, 0x64, 0xca, 0x93, 0xa7, 0x4f, 0x78, 0xfa, 0xec, 0x29, 0x47, 0xf3, 0x23, 0x82, 0x30, 0xc4, 0xb2, 0x2d, 0x2c, 0x1b, 0x6c, 0xc7, 0xc6, 0x71, 0x5d, 0x5c, 0xcf, 0xa5, 0xa3, 0x23, 0xcb, 0x73, 0x92, 0x34, 0xa5, 0xac, 0x2a, 0xfa, 0x71, 0x8c, 0xef, 0xdb, 0xf8, 0x9e, 0x4d, 0x5d, 0x95, 0x24, 0xfb, 0x35, 0x59, 0x9a, 0x90, 0xa5, 0x3b, 0xf6, 0xbb, 0x0d, 0x16, 0xd0, 0x36, 0x35, 0xae, 0x63, 0x13, 0x85, 0x3e, 0xb6, 0x05, 0x65, 0x91, 0xd3, 0xb5, 0x0d, 0x51, 0x18, 0x90, 0xec, 0xf6, 0x66, 0x73, 0x82, 0x96, 0xb6, 0xab, 0xa9, 0xaa, 0xe2, 0x00, 0x12, 0x95, 0xb9, 0x68, 0x5e, 0x64, 0x6c, 0xb6, 0x6b, 0xf2, 0x2c, 0xc7, 0xb6, 0x2d, 0x6c, 0x5b, 0x0a, 0x8b, 0xfe, 0xa8, 0x4f, 0x5e, 0x14, 0xec, 0x93, 0x8c, 0xfb, 0xc5, 0x1e, 0xcf, 0x87, 0xe3, 0x93, 0x13, 0x66, 0x47, 0x47, 0x8c, 0xc7, 0x53, 0xf2, 0x2c, 0x67, 0xb3, 0x11, 0x97, 0x32, 0xcd, 0x50, 0xae, 0xeb, 0x9a, 0xe5, 0x72, 0xc9, 0xcb, 0x97, 0x2f, 0x99, 0x4c, 0xa4, 0x1b, 0x3d, 0x3f, 0x3f, 0x37, 0x2c, 0xe6, 0x7f, 0xfc, 0x8f, 0xff, 0x37, 0xfe, 0xe2, 0x2f, 0xfe, 0x03, 0x79, 0x9e, 0xb1, 0xd9, 0x6f, 0xb9, 0xbb, 0xbf, 0x63, 0xbd, 0x59, 0xd3, 0xb4, 0x2d, 0x6d, 0x27, 0xd2, 0xb6, 0x24, 0x4d, 0xf0, 0x03, 0x8f, 0xf7, 0xde, 0x7f, 0x9f, 0xff, 0xfb, 0xdf, 0xfe, 0x19, 0xbd, 0x81, 0x85, 0x17, 0xb8, 0x6c, 0x76, 0x2d, 0xff, 0xdd, 0x7f, 0xff, 0xb7, 0x25, 0xac, 0xc6, 0xb5, 0xf9, 0xd1, 0x7f, 0xfe, 0x1d, 0x9e, 0x3c, 0xb9, 0xa0, 0xeb, 0x3a, 0x16, 0xcb, 0x3b, 0xee, 0xef, 0xef, 0x4d, 0x87, 0xed, 0x79, 0x3e, 0x8e, 0x67, 0x81, 0x05, 0x1d, 0x1d, 0x1d, 0x60, 0x3b, 0x0e, 0x7e, 0xe0, 0xe3, 0xf9, 0x3e, 0x7e, 0x20, 0x81, 0x2f, 0x9e, 0xe7, 0xab, 0x4d, 0xa1, 0xa2, 0x6e, 0x5a, 0x5c, 0xcf, 0x27, 0x08, 0x23, 0x5c, 0xcf, 0xa7, 0x2a, 0x1f, 0x0c, 0x83, 0x34, 0x24, 0xee, 0xfb, 0x42, 0xe2, 0x6a, 0x9a, 0xc6, 0x40, 0xce, 0x5a, 0x53, 0xa9, 0xf5, 0xe7, 0xba, 0x53, 0xf2, 0x3d, 0x0f, 0x1b, 0x1b, 0x3a, 0x68, 0xaa, 0x86, 0x2c, 0xcd, 0xc8, 0x92, 0x9c, 0xa6, 0x6a, 0x71, 0x2c, 0x97, 0xaa, 0xac, 0x08, 0xbc, 0x90, 0xe1, 0x60, 0x48, 0x3f, 0x1a, 0xb2, 0x5c, 0x2c, 0xa1, 0xb3, 0x09, 0xbc, 0x90, 0xd0, 0x0f, 0x29, 0x4b, 0x87, 0xc9, 0x64, 0xcc, 0x67, 0x9f, 0x7d, 0xc4, 0xef, 0xfd, 0xde, 0xef, 0xf2, 0xd1, 0x47, 0xbf, 0xe2, 0xc9, 0x93, 0x19, 0x45, 0x5e, 0x50, 0x55, 0x0d, 0x49, 0x52, 0x73, 0x75, 0x75, 0x4d, 0x10, 0x88, 0xc3, 0xd5, 0x68, 0x24, 0xf0, 0x9f, 0xd6, 0x74, 0xef, 0xd3, 0x82, 0xa3, 0x23, 0x91, 0x63, 0x4d, 0xc6, 0x7d, 0x6e, 0x6f, 0xee, 0xa8, 0x2b, 0xc9, 0x64, 0xf6, 0x3c, 0x9f, 0xf5, 0x2a, 0x61, 0x34, 0xea, 0x49, 0x41, 0xe8, 0x7a, 0xa2, 0x66, 0x98, 0xcd, 0x69, 0xdb, 0x46, 0x19, 0x37, 0xc0, 0x76, 0xbb, 0x25, 0xcf, 0x73, 0xe3, 0x29, 0xae, 0xab, 0x6b, 0x29, 0x22, 0x5d, 0xe2, 0x38, 0x20, 0x08, 0x3c, 0x1c, 0x47, 0x21, 0x41, 0x34, 0x4a, 0x2f, 0xbd, 0x62, 0x3a, 0x3d, 0x32, 0x3a, 0x51, 0x2d, 0x4d, 0xd1, 0x92, 0xb1, 0x28, 0x92, 0xd8, 0x5d, 0xcf, 0x7b, 0xb0, 0x47, 0xd5, 0x99, 0xee, 0xfa, 0xe1, 0xf5, 0x1d, 0x28, 0x8b, 0x8c, 0xb6, 0xa9, 0x71, 0x2c, 0x1b, 0xdf, 0x77, 0x64, 0x73, 0x1c, 0x0d, 0x08, 0x03, 0x9f, 0xb6, 0x69, 0xf0, 0x3d, 0x07, 0xba, 0x96, 0xaa, 0x2c, 0x68, 0xaa, 0x12, 0x0b, 0x81, 0xb7, 0x8b, 0x3c, 0xa3, 0x2c, 0x32, 0x2c, 0xa0, 0xae, 0x4a, 0xca, 0x22, 0xa7, 0xad, 0x1b, 0xac, 0xae, 0xc3, 0x73, 0x5d, 0xe2, 0x28, 0xc4, 0xb1, 0x6d, 0x7c, 0xcf, 0xc5, 0xb5, 0x5d, 0xe8, 0x5a, 0x79, 0x1f, 0xdb, 0x51, 0x56, 0xcd, 0x2e, 0x61, 0x38, 0xc4, 0x71, 0x6c, 0x25, 0xb3, 0x5a, 0xb3, 0x58, 0xac, 0x09, 0xc3, 0x00, 0xcb, 0xc2, 0x78, 0x03, 0x8c, 0x46, 0x63, 0x3a, 0x5a, 0x3c, 0xd7, 0x53, 0x9b, 0x39, 0xf4, 0xe2, 0x3e, 0xc7, 0xf3, 0x29, 0x2d, 0x2e, 0x5d, 0x0b, 0x16, 0xb6, 0x70, 0x52, 0xbc, 0x80, 0xa6, 0x69, 0x71, 0x1c, 0x17, 0xba, 0x8e, 0xdf, 0xfa, 0xe1, 0xf7, 0x69, 0x9a, 0x56, 0x41, 0xcc, 0x15, 0x75, 0x2d, 0x45, 0x77, 0x18, 0x84, 0xf4, 0x7b, 0x03, 0x86, 0xc3, 0x3e, 0xbe, 0x2f, 0xc5, 0x4d, 0x92, 0x26, 0xec, 0xf7, 0x05, 0x8e, 0xd3, 0xf2, 0xce, 0x3b, 0x6f, 0x8b, 0xb7, 0xff, 0xdd, 0x9a, 0x28, 0xb2, 0x55, 0xbe, 0x43, 0x05, 0x48, 0xb7, 0x26, 0xa4, 0xab, 0x5b, 0xee, 0x16, 0x57, 0x7c, 0xf4, 0xd1, 0x87, 0x7c, 0xe3, 0x1b, 0x5f, 0xe7, 0xfb, 0xdf, 0xff, 0x4f, 0xf9, 0xc9, 0x4f, 0x7e, 0x4c, 0x51, 0x16, 0x7c, 0xeb, 0x5b, 0x1f, 0xf0, 0x87, 0x7f, 0xf8, 0xff, 0x00, 0x35, 0x75, 0x0d, 0x7f, 0xe3, 0x6f, 0xfc, 0x9e, 0x71, 0x26, 0xfc, 0xee, 0x77, 0xbf, 0xcd, 0x6a, 0x25, 0x5d, 0x66, 0xd7, 0x34, 0xfc, 0xd1, 0x1f, 0xfd, 0x11, 0xf7, 0xf7, 0x39, 0x4f, 0x9f, 0x4e, 0x71, 0x6c, 0x97, 0x5e, 0xcf, 0x67, 0x3e, 0x3f, 0xe2, 0xd3, 0x4f, 0x3f, 0x23, 0x4b, 0xf6, 0xa4, 0x69, 0x4a, 0x9a, 0x64, 0x6c, 0x36, 0x1b, 0x16, 0xcb, 0xa5, 0xc4, 0xdd, 0xd6, 0x0d, 0x60, 0x51, 0xd6, 0x85, 0x42, 0x1f, 0x5d, 0xe8, 0x6c, 0xc3, 0xf5, 0x69, 0x9a, 0x96, 0xba, 0x56, 0xa1, 0x1c, 0x8a, 0x6c, 0xd9, 0x36, 0x0d, 0x79, 0x96, 0x93, 0x67, 0x39, 0x75, 0x55, 0x41, 0xd7, 0x91, 0x17, 0x39, 0x75, 0x55, 0xd3, 0x36, 0x0d, 0x6d, 0xab, 0x92, 0xbb, 0xaa, 0x9a, 0x22, 0xcf, 0xc9, 0xd2, 0x8c, 0xd3, 0x93, 0x33, 0xa2, 0x30, 0xa6, 0xa9, 0x1b, 0x8a, 0xbc, 0xa0, 0x6b, 0xc1, 0x73, 0x7d, 0xe2, 0xa8, 0x47, 0xbf, 0x37, 0xe0, 0x1b, 0x1f, 0x7c, 0x5d, 0x36, 0xfd, 0xa2, 0x52, 0x9b, 0xbb, 0x83, 0x63, 0xbb, 0x4a, 0x6f, 0x5f, 0x12, 0xb8, 0x42, 0xd4, 0x95, 0xfb, 0xed, 0xe0, 0xd8, 0x36, 0x56, 0xd7, 0xc9, 0xfb, 0xd5, 0x0d, 0x8e, 0xe5, 0xab, 0x0c, 0x83, 0x1e, 0x75, 0x5d, 0x89, 0x43, 0xa4, 0xeb, 0x90, 0x65, 0x39, 0x75, 0xdd, 0x30, 0x1b, 0x4f, 0x49, 0x93, 0x4c, 0xb9, 0x85, 0x6a, 0x59, 0x67, 0x60, 0x46, 0x47, 0x7e, 0x3f, 0x20, 0x8a, 0x62, 0xc2, 0x20, 0x24, 0x08, 0x42, 0x06, 0xbd, 0x01, 0x51, 0x14, 0x53, 0x95, 0x15, 0xbb, 0xdd, 0x1e, 0xc7, 0x92, 0xb5, 0x66, 0x5b, 0x36, 0x5d, 0xdb, 0xd2, 0xb5, 0x6a, 0x4f, 0x56, 0xdf, 0xb3, 0x37, 0x18, 0x32, 0x1c, 0x0e, 0x39, 0x3f, 0x3f, 0xe7, 0xc9, 0x93, 0xa7, 0xbc, 0x78, 0xf1, 0x82, 0x37, 0x6f, 0xde, 0xf0, 0xd3, 0xbf, 0xf8, 0x99, 0x34, 0x1f, 0x8a, 0x63, 0xe0, 0x3a, 0x1e, 0x45, 0x59, 0xf3, 0xec, 0xd9, 0xb9, 0x2a, 0xe6, 0x53, 0xb5, 0x87, 0x97, 0xd0, 0xd5, 0xd8, 0x96, 0x83, 0x65, 0xd9, 0xd8, 0x96, 0x14, 0xb5, 0x20, 0x7c, 0x96, 0x7e, 0x7f, 0xc0, 0x5f, 0xfc, 0xc5, 0xcf, 0x55, 0x5c, 0xae, 0x6f, 0xe0, 0x6c, 0x31, 0x72, 0x59, 0x11, 0xc5, 0x3e, 0x67, 0x67, 0xe7, 0xc6, 0xec, 0xe6, 0xea, 0xf2, 0x5a, 0xa5, 0xfc, 0x0d, 0x69, 0xdb, 0xda, 0x34, 0x8e, 0x7a, 0xe6, 0xfe, 0xd5, 0xb0, 0x24, 0x8d, 0x4c, 0x1e, 0x8e, 0xd2, 0xfe, 0xff, 0xa2, 0x4e, 0x0f, 0x67, 0xfd, 0x7a, 0x1e, 0x9f, 0xe7, 0xd9, 0xa3, 0xff, 0xff, 0xa1, 0xc9, 0xd5, 0x57, 0x4d, 0x64, 0x0e, 0x67, 0xf1, 0x87, 0xf6, 0xd2, 0x87, 0x29, 0x6d, 0x5d, 0xd7, 0xe1, 0x3c, 0xbd, 0x98, 0xfe, 0x7e, 0x59, 0x16, 0x34, 0x4d, 0x8d, 0xe7, 0xb9, 0x0a, 0xd2, 0xb5, 0xa9, 0xeb, 0x0a, 0xc7, 0xb1, 0x55, 0x87, 0x5c, 0xb0, 0x5c, 0x2e, 0xe8, 0xf7, 0x7b, 0xf4, 0x7a, 0x31, 0xa7, 0xa7, 0x27, 0x4c, 0x26, 0x63, 0xba, 0xc6, 0x52, 0x8c, 0xbf, 0x82, 0x7d, 0xb2, 0x63, 0xb7, 0x97, 0xe4, 0xae, 0xb6, 0xad, 0xe8, 0x3a, 0x21, 0xf8, 0x54, 0x55, 0x49, 0x5d, 0x57, 0xb4, 0x6d, 0x43, 0x55, 0x95, 0xc2, 0x6e, 0xec, 0x5a, 0xc2, 0x30, 0xa0, 0xa3, 0x24, 0xcb, 0xf7, 0xec, 0x93, 0x0d, 0x65, 0x99, 0x0a, 0xab, 0xdd, 0x83, 0xb6, 0xad, 0xc8, 0xf3, 0x44, 0x49, 0xd4, 0x90, 0x68, 0x43, 0x1a, 0x8a, 0x32, 0x53, 0xe4, 0xa2, 0x1a, 0xe8, 0xb0, 0x71, 0xe4, 0x7f, 0x6d, 0xf0, 0x7c, 0x07, 0xd7, 0xb5, 0x15, 0x61, 0x48, 0xcc, 0x68, 0xf6, 0xfb, 0x3d, 0x59, 0x9e, 0x92, 0x17, 0x19, 0x55, 0x59, 0x2a, 0x1d, 0x3b, 0xd4, 0x4d, 0x49, 0x59, 0xe5, 0x0c, 0x46, 0x43, 0x06, 0x03, 0x91, 0xbc, 0x88, 0x75, 0xe8, 0x0f, 0x19, 0x0c, 0x06, 0xec, 0x77, 0x89, 0x40, 0xa3, 0xdd, 0x83, 0x41, 0xbe, 0xcc, 0x56, 0xa7, 0x86, 0x3d, 0x59, 0x14, 0x52, 0x1c, 0x0c, 0x87, 0x23, 0x5e, 0xbf, 0x7e, 0xc3, 0xf1, 0xf1, 0x09, 0xf7, 0xf7, 0x77, 0x9c, 0x9f, 0xcf, 0x29, 0x8a, 0x82, 0xe7, 0xcf, 0x9f, 0x13, 0xf5, 0x62, 0x43, 0xc4, 0xf2, 0x7d, 0x59, 0x48, 0x96, 0x0d, 0x9b, 0xb5, 0x1c, 0x9e, 0x9f, 0x7e, 0xf6, 0x2b, 0x4e, 0x4f, 0x27, 0x6c, 0xb6, 0x4b, 0xa6, 0xd3, 0x21, 0x5f, 0xfb, 0xfa, 0x05, 0x6d, 0x57, 0x11, 0x46, 0x01, 0x96, 0xd5, 0xf0, 0xea, 0xe5, 0x17, 0xec, 0x93, 0x1d, 0x45, 0x99, 0x2b, 0xe7, 0x35, 0xd7, 0x10, 0xbc, 0x82, 0x20, 0xa0, 0xaa, 0xf3, 0xff, 0x88, 0xbf, 0x30, 0xa6, 0x22, 0xce, 0xd2, 0x12, 0xdf, 0x0f, 0x70, 0x1c, 0x97, 0xa6, 0x91, 0x59, 0xb1, 0xe3, 0xb8, 0xea, 0x61, 0xa8, 0x29, 0x8b, 0xf2, 0x91, 0xc1, 0xc9, 0x68, 0x34, 0x32, 0xb0, 0x3c, 0x40, 0x9a, 0xed, 0x1f, 0x19, 0x9f, 0x68, 0x0d, 0xa7, 0x5e, 0xa8, 0xa3, 0xf1, 0xd0, 0x14, 0x39, 0x0f, 0x0f, 0x7b, 0x80, 0xe7, 0x49, 0x27, 0x0e, 0x36, 0x59, 0x56, 0x90, 0xe7, 0x15, 0xbd, 0x5e, 0x9f, 0xa6, 0x86, 0xf9, 0xd1, 0x31, 0x4d, 0xdd, 0x72, 0x7d, 0x7d, 0x4b, 0x5e, 0x74, 0x7c, 0xf1, 0xc5, 0x17, 0xbc, 0xff, 0xfe, 0xfb, 0xec, 0xf7, 0x3b, 0x26, 0x93, 0x1e, 0xc7, 0xc7, 0x27, 0x4c, 0xa6, 0x63, 0xee, 0xee, 0xee, 0xe8, 0x5a, 0xf8, 0xd1, 0x8f, 0xfe, 0x33, 0x3e, 0xff, 0xfc, 0x25, 0x7f, 0xf9, 0x2f, 0xff, 0x80, 0x4f, 0x3e, 0xf9, 0x84, 0xae, 0xeb, 0x48, 0x92, 0x94, 0xe1, 0x70, 0x40, 0x43, 0x8b, 0xeb, 0x78, 0xdc, 0x5e, 0xef, 0xe8, 0xf7, 0x43, 0xba, 0xae, 0x25, 0x8e, 0x62, 0xb0, 0x2c, 0x85, 0xc6, 0x88, 0x8d, 0x6f, 0x92, 0x26, 0x0c, 0xfb, 0x03, 0x7c, 0x3f, 0x20, 0xcf, 0x33, 0x56, 0xcb, 0x95, 0x7a, 0xe8, 0x45, 0xd1, 0x30, 0x9b, 0x4d, 0x71, 0x1c, 0x9b, 0xcf, 0x3f, 0x7f, 0xc3, 0x72, 0x99, 0x31, 0x1c, 0xfa, 0x44, 0x51, 0x48, 0x9e, 0x67, 0xf4, 0xfb, 0x3d, 0xae, 0xaf, 0xaf, 0x39, 0x39, 0x9d, 0xb3, 0x4f, 0x76, 0x4c, 0x26, 0x23, 0xc5, 0x21, 0x08, 0x08, 0xfc, 0x50, 0xcd, 0xec, 0x1b, 0x65, 0x1c, 0x52, 0x63, 0x59, 0x28, 0xf8, 0xbd, 0xcf, 0x76, 0xbb, 0x56, 0xb3, 0xf0, 0x98, 0x28, 0x0a, 0x55, 0x17, 0xed, 0x28, 0x8e, 0x87, 0x4b, 0x53, 0x65, 0x78, 0xbe, 0xc3, 0x78, 0x32, 0x62, 0x34, 0x1e, 0x0a, 0xd1, 0x2b, 0x8e, 0xf0, 0x7d, 0xd7, 0xb0, 0xc3, 0x83, 0xc0, 0xc7, 0xb6, 0x2d, 0x15, 0x14, 0x03, 0x7e, 0xe0, 0x62, 0x59, 0x88, 0x25, 0x6b, 0x2f, 0x22, 0x0c, 0x95, 0x6d, 0xa5, 0x25, 0x7c, 0x8a, 0x20, 0x0c, 0xe9, 0xf5, 0x22, 0xe2, 0x5e, 0xc4, 0xe2, 0x7e, 0x81, 0x3a, 0x63, 0xa8, 0x6b, 0x39, 0x50, 0x35, 0xea, 0x55, 0x55, 0x35, 0x45, 0x55, 0x1f, 0x10, 0x74, 0x42, 0x40, 0xe0, 0x7e, 0xcd, 0x02, 0x16, 0xf2, 0x56, 0x84, 0x65, 0xd9, 0xa6, 0x03, 0xb7, 0x2c, 0x9b, 0x97, 0xaf, 0xbe, 0x64, 0x32, 0x9e, 0xb2, 0x4f, 0x4b, 0xca, 0xb2, 0xc2, 0xf3, 0x7c, 0xda, 0xb6, 0xa3, 0xd7, 0xeb, 0x53, 0xd7, 0x8d, 0xba, 0xf7, 0x16, 0x59, 0xb2, 0xe7, 0xf2, 0xf2, 0x96, 0x3c, 0x97, 0x6b, 0xe3, 0xfb, 0x9e, 0x32, 0xe2, 0xb1, 0xc8, 0xb2, 0x94, 0x34, 0x4d, 0x59, 0x2c, 0x12, 0x8a, 0x22, 0x43, 0xf1, 0x97, 0xa8, 0xeb, 0x96, 0xd3, 0xb3, 0x19, 0x51, 0x14, 0x70, 0x7e, 0x7e, 0x61, 0x3a, 0xd8, 0x34, 0x4d, 0xd1, 0x19, 0x1a, 0xda, 0xad, 0xd0, 0xb2, 0x2b, 0x82, 0xc0, 0xa7, 0xae, 0x2b, 0x85, 0x94, 0xed, 0xc8, 0x8b, 0x94, 0x4f, 0x7f, 0xf5, 0x4b, 0x66, 0xb3, 0x1e, 0x9e, 0xeb, 0x72, 0x74, 0x34, 0x64, 0x36, 0x9b, 0xb2, 0xdf, 0xef, 0x28, 0xcb, 0x82, 0xfd, 0x7e, 0x47, 0x92, 0xec, 0x79, 0xfd, 0xfa, 0x15, 0x5d, 0x23, 0x39, 0x04, 0xf3, 0xf9, 0x44, 0x69, 0x8d, 0x7b, 0x9c, 0x9c, 0x9c, 0xa8, 0xd1, 0x48, 0xcc, 0x7a, 0xbd, 0xc4, 0xb2, 0x1d, 0x6c, 0xd7, 0xa6, 0xaa, 0x2b, 0xaa, 0xa6, 0xc2, 0xb2, 0x2d, 0x82, 0x30, 0x22, 0x08, 0x03, 0x3c, 0xc7, 0x22, 0x0e, 0x23, 0xa2, 0x30, 0x22, 0xf0, 0x3d, 0x42, 0x3f, 0x24, 0x0a, 0x22, 0xa2, 0x20, 0x20, 0xf4, 0x7d, 0x6c, 0xcf, 0x26, 0x50, 0x5a, 0x6b, 0xcf, 0x73, 0x71, 0x3d, 0x5b, 0x2c, 0x6b, 0x23, 0x59, 0x5f, 0x75, 0x27, 0xfc, 0x09, 0xc7, 0x7d, 0x08, 0xf7, 0x91, 0x4d, 0x5f, 0xba, 0xe8, 0xcd, 0x66, 0x47, 0x55, 0xd5, 0x54, 0x55, 0x4d, 0xd7, 0xda, 0x0c, 0x07, 0x63, 0x66, 0xb3, 0x39, 0xe3, 0xd1, 0x94, 0x7e, 0x6f, 0xc8, 0x2e, 0x51, 0x85, 0x49, 0x87, 0x38, 0xe7, 0x95, 0x95, 0x22, 0xde, 0x79, 0xb8, 0xae, 0xa7, 0x1a, 0xa6, 0xc3, 0xf5, 0x21, 0xaf, 0xad, 0x0f, 0x8f, 0xa6, 0x82, 0xe1, 0x70, 0xc8, 0x7c, 0x3e, 0x27, 0x08, 0xa4, 0xb0, 0x1f, 0xf4, 0x07, 0xf4, 0xfb, 0x3d, 0x83, 0x2a, 0x66, 0x79, 0x4e, 0x0b, 0xf8, 0x61, 0x40, 0xd4, 0x8b, 0xf1, 0xfd, 0x50, 0x35, 0x68, 0x1e, 0x5e, 0xec, 0xaa, 0x2c, 0x72, 0x25, 0x67, 0xdd, 0x27, 0xdc, 0xde, 0xde, 0x8a, 0xed, 0xb6, 0xe3, 0x30, 0x1a, 0x4d, 0x19, 0x0c, 0x86, 0xf4, 0xfb, 0x03, 0x41, 0x41, 0xc3, 0xc8, 0x34, 0x18, 0x5d, 0xa7, 0x85, 0xc8, 0xf0, 0xcf, 0xff, 0xf9, 0xbf, 0xa2, 0xdf, 0x97, 0xcf, 0xfa, 0xd1, 0x47, 0x1f, 0x51, 0x96, 0x15, 0x3f, 0xf8, 0xc1, 0x0f, 0x38, 0xbb, 0x78, 0x62, 0x82, 0x72, 0xd2, 0xac, 0x60, 0xb7, 0xdb, 0xf1, 0xf2, 0xe5, 0x35, 0x69, 0xba, 0xe1, 0xbd, 0xf7, 0xde, 0x23, 0xcd, 0xf2, 0x47, 0x8c, 0x72, 0x7d, 0xfd, 0xf4, 0xc1, 0xbb, 0xdf, 0x27, 0xfc, 0xd5, 0xbf, 0xfa, 0x3b, 0xbc, 0x7c, 0xf9, 0xa5, 0x89, 0x6f, 0x2e, 0x8a, 0xc2, 0x68, 0xc0, 0x7f, 0xf8, 0xc3, 0x1f, 0xe0, 0xfb, 0x0f, 0x26, 0x4f, 0xfb, 0x7d, 0xc2, 0xcd, 0xcd, 0x9a, 0xba, 0x2e, 0x1f, 0x45, 0x92, 0x1e, 0x76, 0xe8, 0x87, 0xa9, 0x6a, 0x7a, 0x86, 0x7d, 0x78, 0x78, 0x6b, 0xc8, 0x5c, 0xcf, 0xdb, 0x0f, 0xe1, 0xf2, 0xc3, 0x6e, 0x5f, 0x7c, 0x2c, 0xfa, 0x86, 0xaf, 0xa5, 0x0f, 0xf1, 0x43, 0x58, 0x3f, 0x0c, 0x43, 0x43, 0xb4, 0xd3, 0xf0, 0xff, 0x21, 0xe2, 0x7a, 0x88, 0x7e, 0xe8, 0xcf, 0xe6, 0x44, 0x5e, 0xf5, 0xfb, 0x55, 0x59, 0xe0, 0xd8, 0x16, 0x51, 0x18, 0xe0, 0x7b, 0x2e, 0x65, 0x91, 0xb3, 0xdf, 0x6d, 0xd9, 0xac, 0x57, 0xe4, 0x59, 0x4a, 0xd7, 0x36, 0x6c, 0xd6, 0x2b, 0x7c, 0xcf, 0xa5, 0x2a, 0x0b, 0x3c, 0xd7, 0x21, 0x4b, 0x13, 0x9a, 0x4e, 0xba, 0xf0, 0xce, 0x82, 0xaa, 0x29, 0x29, 0xaa, 0x84, 0xa2, 0xca, 0x48, 0xf3, 0x94, 0x5d, 0xb2, 0xa1, 0x3f, 0x8c, 0x69, 0xba, 0x9a, 0x96, 0x06, 0xec, 0x35, 0x86, 0x8c, 0x3d, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x96, 0xba, 0xad, 0x28, 0xeb, 0x1c, 0xec, 0x0e, 0x2f, 0x70, 0xf1, 0xdd, 0x8e, 0xae, 0xab, 0xa8, 0xab, 0x1c, 0xdb, 0x69, 0x88, 0x22, 0x61, 0x53, 0x57, 0x55, 0x46, 0xdb, 0x96, 0x0c, 0x06, 0x11, 0x96, 0x55, 0x53, 0x95, 0x39, 0x75, 0x9d, 0xe3, 0x7b, 0x2e, 0xfd, 0x7e, 0x8c, 0x6d, 0x77, 0xa4, 0xe9, 0x8e, 0xaa, 0xae, 0xd9, 0x27, 0x6b, 0x36, 0xdb, 0x15, 0x49, 0xba, 0xa3, 0xac, 0x73, 0xd1, 0x5e, 0x77, 0x25, 0x4d, 0x5b, 0xe3, 0xf9, 0xb6, 0x04, 0xa6, 0x50, 0x63, 0xbb, 0x16, 0x2d, 0x35, 0x69, 0x96, 0x90, 0x64, 0x3b, 0x8a, 0x2a, 0xe3, 0xf5, 0xd5, 0x15, 0x69, 0x9e, 0x73, 0xb7, 0xb8, 0x27, 0x49, 0xe1, 0xe2, 0xc9, 0x11, 0xd7, 0x37, 0xd7, 0x5c, 0x5d, 0x5f, 0xb3, 0xdd, 0x6d, 0xa9, 0x0a, 0xa5, 0xf9, 0xa3, 0x65, 0x9f, 0x6c, 0xb9, 0xba, 0xbe, 0xe2, 0xfa, 0xf6, 0x92, 0x34, 0x4f, 0xb0, 0xec, 0x8e, 0xa2, 0xa8, 0xd8, 0xee, 0xf6, 0x84, 0x51, 0xc0, 0x3f, 0xfb, 0xe7, 0xff, 0x17, 0xdf, 0xfc, 0xd6, 0x3b, 0xec, 0x93, 0x3d, 0xe7, 0x17, 0xe7, 0x7c, 0xf8, 0xd1, 0x87, 0x94, 0x6d, 0xc5, 0x62, 0xb9, 0xc0, 0x76, 0x5d, 0xbe, 0x7c, 0xf5, 0x12, 0xcb, 0xb6, 0xf8, 0xe8, 0xa3, 0x9f, 0xb3, 0xde, 0xae, 0x59, 0x6d, 0x56, 0xdc, 0x2d, 0x6e, 0x19, 0x0c, 0x63, 0x2e, 0x9e, 0x9c, 0x93, 0x97, 0x29, 0xcf, 0xdf, 0x7a, 0xc2, 0xf5, 0xcd, 0x25, 0xc3, 0x71, 0x0f, 0xec, 0x8e, 0xd9, 0x74, 0x82, 0xeb, 0xb9, 0x54, 0x75, 0x05, 0x96, 0xe8, 0x66, 0x27, 0xd3, 0x09, 0xbd, 0x7e, 0x1f, 0xd7, 0x73, 0x29, 0xaa, 0x12, 0xdb, 0x71, 0xb1, 0x1d, 0x17, 0xcb, 0x76, 0xa8, 0x9b, 0x96, 0x2c, 0x2f, 0x48, 0xb3, 0x9c, 0x34, 0xcb, 0x29, 0xca, 0x06, 0xdb, 0x71, 0xe9, 0xb0, 0xc8, 0x8b, 0x92, 0xaa, 0x96, 0xbf, 0x63, 0xd9, 0x54, 0x75, 0x83, 0xef, 0x7b, 0xc4, 0xbd, 0x98, 0xa6, 0x6d, 0xe9, 0x0f, 0x06, 0x02, 0x25, 0xfa, 0x3e, 0x49, 0x9a, 0x82, 0x65, 0x91, 0xe5, 0x09, 0x96, 0x2d, 0x28, 0x80, 0x50, 0xb9, 0xa1, 0x93, 0xd5, 0x8c, 0xed, 0x38, 0x58, 0x3c, 0x38, 0x09, 0xfa, 0x5e, 0x88, 0x6d, 0x39, 0xd4, 0x55, 0x4d, 0x9e, 0x95, 0xa4, 0x49, 0xc6, 0xf2, 0x7e, 0x43, 0x14, 0xf6, 0x38, 0x39, 0x3e, 0x63, 0xd0, 0x1b, 0xf2, 0xfa, 0xd5, 0x15, 0xbb, 0x6d, 0x42, 0xb2, 0xcf, 0x29, 0x8b, 0x9a, 0xfb, 0xe5, 0xce, 0x64, 0x03, 0xfc, 0xe4, 0x27, 0x1f, 0x31, 0x9b, 0x4d, 0xa5, 0x32, 0xb7, 0x5c, 0x4e, 0x4f, 0x4e, 0x78, 0xfa, 0xf4, 0x39, 0x9b, 0xcd, 0x86, 0x93, 0x93, 0x39, 0x57, 0x57, 0x57, 0x7c, 0xef, 0x7b, 0xdf, 0xe3, 0xf8, 0xf8, 0x98, 0xab, 0xab, 0x2b, 0xf2, 0xbc, 0x20, 0xc9, 0x5a, 0x3a, 0x1a, 0x2c, 0xbb, 0x35, 0xb0, 0x68, 0x96, 0xe6, 0xf4, 0xfb, 0x7d, 0x26, 0xe3, 0x09, 0x8b, 0xc5, 0x4a, 0x72, 0xb8, 0x9b, 0x96, 0x28, 0x14, 0xf3, 0x89, 0xf5, 0x7a, 0x23, 0x7e, 0x03, 0xb6, 0x4d, 0xa0, 0x08, 0x96, 0xda, 0xed, 0x6d, 0xb5, 0x5a, 0xd3, 0x75, 0x30, 0x9d, 0x0a, 0xbb, 0x35, 0x8a, 0x03, 0x5c, 0xcf, 0xe1, 0xf2, 0x72, 0xc9, 0x64, 0x12, 0x53, 0x14, 0xb9, 0x32, 0xd0, 0x71, 0x19, 0x8d, 0x86, 0x6c, 0x36, 0x7b, 0xf3, 0xa0, 0x1e, 0xca, 0x63, 0xf4, 0x03, 0xa9, 0xb5, 0xf7, 0x87, 0x76, 0xb8, 0x87, 0xc9, 0x4b, 0x47, 0xd3, 0x3e, 0x4f, 0x9f, 0x3c, 0xe5, 0x9b, 0x1f, 0x7c, 0x83, 0xe7, 0xcf, 0x9e, 0xd2, 0xef, 0xc7, 0x78, 0x9e, 0x8b, 0x05, 0x54, 0x65, 0x41, 0x59, 0x14, 0xc4, 0x71, 0x44, 0xbf, 0x17, 0x11, 0x47, 0x11, 0x71, 0x1c, 0x10, 0x47, 0x52, 0x44, 0x34, 0x4d, 0xc9, 0x7c, 0x7e, 0xc4, 0xa0, 0xdf, 0x63, 0x3c, 0x12, 0x2b, 0x5a, 0xcf, 0x73, 0x71, 0x1d, 0x0b, 0xdb, 0xb2, 0xa9, 0xab, 0x8a, 0xe9, 0x64, 0xca, 0x64, 0x32, 0xa6, 0x1f, 0xf7, 0x08, 0x7c, 0x0f, 0xd7, 0x71, 0x94, 0xbc, 0x52, 0xbe, 0x73, 0x10, 0xc5, 0xca, 0x6d, 0xee, 0x5e, 0xae, 0x5f, 0x5b, 0xe1, 0xf9, 0x0a, 0x96, 0xb5, 0x3b, 0x8e, 0x8f, 0x4f, 0x58, 0x2e, 0x57, 0xc2, 0x53, 0x08, 0x03, 0x36, 0xca, 0x2c, 0x6a, 0xbd, 0xde, 0x30, 0x1a, 0x0f, 0x79, 0x7d, 0x79, 0x6b, 0xdc, 0xf6, 0xb4, 0x57, 0xbd, 0xf0, 0x51, 0x74, 0x9a, 0xda, 0x5e, 0xc5, 0x9b, 0x86, 0x84, 0xa1, 0x6f, 0x66, 0xd1, 0x9e, 0x27, 0x07, 0x01, 0x56, 0xab, 0x0e, 0x1a, 0x8b, 0xd9, 0x6c, 0xcc, 0xb7, 0xbf, 0xfd, 0x0d, 0x7a, 0x7d, 0xcf, 0x48, 0x99, 0xc0, 0x31, 0x64, 0xdb, 0xd1, 0x68, 0x60, 0xde, 0x63, 0x3c, 0x1e, 0x8b, 0x79, 0xcc, 0x6e, 0xa3, 0x64, 0x60, 0x16, 0x61, 0x10, 0x70, 0x7e, 0x76, 0x46, 0xe0, 0xfb, 0xac, 0x96, 0x0b, 0x86, 0x83, 0x01, 0xbe, 0x27, 0xf2, 0xbf, 0x17, 0x2f, 0x5e, 0xe0, 0x3a, 0x0e, 0x45, 0x9e, 0xf3, 0xf1, 0xc7, 0x1f, 0x33, 0x9b, 0x4a, 0x72, 0x61, 0x91, 0xa5, 0x3c, 0x79, 0x72, 0xa1, 0x82, 0x3f, 0x5e, 0x33, 0x18, 0x0c, 0xf0, 0x03, 0x9f, 0xc5, 0x72, 0xc1, 0x68, 0x38, 0xc4, 0xb5, 0x2d, 0xc2, 0x48, 0xa7, 0x71, 0x75, 0x38, 0xae, 0x43, 0xaf, 0x27, 0x06, 0x31, 0x62, 0x34, 0xd2, 0xe0, 0xaa, 0xce, 0xd7, 0xb6, 0x2d, 0x65, 0x78, 0xe5, 0xe0, 0x38, 0x16, 0xae, 0x6b, 0x53, 0x94, 0x39, 0xb6, 0x2d, 0x72, 0x5e, 0xd7, 0xb1, 0xf0, 0x7d, 0x87, 0x28, 0x0a, 0x88, 0xa3, 0x80, 0x30, 0x74, 0xe9, 0x0f, 0xfa, 0x84, 0x81, 0x87, 0x63, 0xa3, 0x64, 0x89, 0x16, 0xbd, 0x28, 0x66, 0x3a, 0x9e, 0x30, 0x9b, 0x4e, 0x19, 0x0d, 0x07, 0x9c, 0x1e, 0x9f, 0x32, 0x19, 0x8d, 0xe9, 0xf7, 0xfa, 0xf2, 0x9d, 0x5c, 0x9f, 0xaa, 0xa8, 0x49, 0x93, 0x8c, 0x34, 0xdf, 0x50, 0x16, 0x05, 0x51, 0x14, 0xd3, 0x8b, 0x7a, 0x34, 0xb5, 0x14, 0xed, 0x81, 0xef, 0x13, 0xf8, 0x21, 0x75, 0x51, 0xd2, 0xb5, 0x9d, 0xc0, 0xfc, 0x5d, 0x07, 0x9d, 0x98, 0x74, 0xa9, 0x1a, 0x0f, 0x3f, 0x08, 0x19, 0x8d, 0x87, 0x0c, 0x86, 0x03, 0x1c, 0xd7, 0xc5, 0x0b, 0x64, 0x0c, 0x10, 0xc5, 0x21, 0x61, 0x14, 0xd0, 0xd6, 0xb5, 0x29, 0x00, 0x74, 0x67, 0x29, 0x92, 0x51, 0xb9, 0x87, 0x9d, 0x63, 0x89, 0xf2, 0xc3, 0x71, 0xb1, 0x2c, 0x1b, 0xab, 0x13, 0x94, 0x60, 0xd8, 0x1f, 0x32, 0x9b, 0x1d, 0x91, 0x25, 0x19, 0xb6, 0x65, 0xe3, 0x3a, 0x2e, 0x9e, 0xeb, 0xe1, 0xb9, 0x1e, 0xbe, 0xe7, 0xe3, 0xb9, 0x1e, 0x81, 0x1f, 0x10, 0xc4, 0x11, 0xff, 0xec, 0x9f, 0xfd, 0x1f, 0xd4, 0x35, 0xfc, 0xf5, 0xbf, 0xfe, 0x7b, 0xe4, 0x79, 0xce, 0x2f, 0x7e, 0xf1, 0x25, 0x51, 0xe8, 0x71, 0x7e, 0x7e, 0xce, 0x70, 0x3c, 0xe1, 0x67, 0x3f, 0xfb, 0x05, 0xae, 0x6b, 0x31, 0x9d, 0x8e, 0x45, 0x9d, 0x54, 0x66, 0x54, 0x55, 0x47, 0x9e, 0x67, 0x8a, 0x50, 0x2b, 0xc5, 0xa9, 0x41, 0x86, 0xb0, 0x68, 0x5b, 0x49, 0x8e, 0x14, 0xbd, 0xfe, 0xe7, 0x9c, 0x9d, 0x9d, 0x28, 0x8e, 0xd3, 0x96, 0x30, 0x0c, 0x4d, 0x63, 0xf2, 0xb3, 0x0f, 0xff, 0x9c, 0x1f, 0xfe, 0xf0, 0xb7, 0xf8, 0x97, 0xff, 0xf2, 0x7f, 0x27, 0x8e, 0x23, 0x3e, 0xfa, 0xf0, 0x33, 0x1c, 0x07, 0xa6, 0xd3, 0x89, 0x69, 0x72, 0xf4, 0x61, 0xab, 0x9f, 0x5f, 0xcd, 0x74, 0x3f, 0x0c, 0x65, 0x3a, 0x64, 0xb6, 0x1f, 0xfe, 0xd2, 0x5c, 0xab, 0xc3, 0x8e, 0xfa, 0x50, 0xb6, 0xe6, 0xba, 0xce, 0x23, 0xe2, 0xb9, 0x3e, 0xa4, 0x0f, 0x49, 0x73, 0x87, 0x5d, 0xf9, 0xa1, 0xde, 0xfc, 0xd0, 0x11, 0xef, 0xf0, 0x97, 0x73, 0x71, 0x3a, 0xfc, 0xfd, 0xaa, 0xd2, 0x92, 0xb4, 0x54, 0x55, 0xce, 0x89, 0x40, 0x4d, 0x8a, 0x52, 0x1f, 0xc7, 0x11, 0xae, 0x2b, 0x04, 0x0d, 0xdd, 0x89, 0x6c, 0xb7, 0x1b, 0x76, 0xfb, 0x84, 0xdd, 0x7e, 0xcd, 0x6e, 0xb7, 0x62, 0x9f, 0x6c, 0x28, 0x8a, 0x54, 0x0e, 0xe6, 0xd8, 0xa5, 0xd7, 0x0f, 0x09, 0x42, 0x17, 0xdb, 0xee, 0xf0, 0x03, 0x87, 0x30, 0xf4, 0x44, 0x26, 0xe5, 0xc9, 0xc2, 0xf6, 0x7d, 0x07, 0xba, 0x8a, 0x20, 0xb4, 0x71, 0x5c, 0xb0, 0x1d, 0x70, 0x9c, 0x96, 0xbc, 0x48, 0x28, 0x8a, 0x04, 0xd7, 0x05, 0xcf, 0xb7, 0x70, 0x5d, 0x0b, 0x47, 0xc9, 0xa3, 0x1c, 0x07, 0x3c, 0xcf, 0x56, 0x19, 0xd0, 0x2d, 0x83, 0x41, 0x9f, 0x28, 0xf2, 0xe9, 0xf5, 0x7c, 0xfa, 0xc3, 0x80, 0xf1, 0x64, 0xc0, 0x64, 0x32, 0x24, 0x8a, 0x7d, 0x6c, 0xbb, 0xa3, 0xed, 0x0a, 0x9a, 0xb6, 0xc4, 0xb2, 0x3a, 0x5c, 0x4f, 0x82, 0x5b, 0xba, 0xae, 0xc2, 0x71, 0x21, 0x8a, 0x03, 0xc2, 0xb8, 0x87, 0x6d, 0x5b, 0xf4, 0x7a, 0x11, 0xbd, 0x9e, 0x4d, 0x53, 0x57, 0xe4, 0x79, 0xca, 0xb3, 0xe7, 0x4f, 0x19, 0x8e, 0xfa, 0x94, 0x79, 0x2e, 0x33, 0xfa, 0xb6, 0xa4, 0x28, 0x53, 0xd2, 0x6c, 0x47, 0x51, 0xa6, 0xd4, 0x4d, 0x49, 0xd3, 0x16, 0x34, 0xb5, 0x4b, 0xbf, 0xdf, 0x63, 0xbb, 0xd9, 0x31, 0x9d, 0xc5, 0xe4, 0x79, 0x46, 0x1c, 0xc7, 0xec, 0xf6, 0x1b, 0xe2, 0x5e, 0xc4, 0x3e, 0x4d, 0x54, 0xe4, 0xe9, 0x56, 0x58, 0xf7, 0xb6, 0x4d, 0x1c, 0xc5, 0x66, 0xee, 0xda, 0x1f, 0x46, 0x60, 0x35, 0x64, 0x79, 0xc2, 0xbb, 0xef, 0xbe, 0xc5, 0x6a, 0x7d, 0xcf, 0xc5, 0xc5, 0x19, 0xd0, 0xb2, 0x5c, 0xde, 0xb3, 0x52, 0xc4, 0xc0, 0xae, 0x6b, 0x19, 0x0e, 0x07, 0x1c, 0x1d, 0xcd, 0x09, 0xc3, 0x90, 0xe5, 0x62, 0xc5, 0xab, 0x97, 0xaf, 0x68, 0xba, 0xca, 0xc0, 0x39, 0x7a, 0x16, 0xa3, 0x21, 0xdd, 0xb6, 0x6d, 0x69, 0x1b, 0x79, 0x74, 0xc5, 0xd8, 0x27, 0x53, 0x0b, 0x46, 0xe6, 0xec, 0x92, 0xf3, 0x6e, 0x9b, 0x59, 0x9d, 0x76, 0x27, 0x9b, 0x4e, 0xa7, 0x86, 0x10, 0x72, 0x48, 0xa0, 0xd1, 0x4c, 0x52, 0xbd, 0xa8, 0x64, 0x5e, 0x24, 0x36, 0xc0, 0xb6, 0xe5, 0x92, 0xa6, 0x19, 0xab, 0xd5, 0x86, 0xdd, 0x36, 0xa5, 0xc8, 0x4b, 0xaa, 0x4a, 0xb2, 0xb8, 0x1d, 0x47, 0xe6, 0x73, 0x65, 0xd1, 0xd2, 0x34, 0x1d, 0xb6, 0xed, 0xb3, 0x59, 0xef, 0x78, 0xf5, 0xf2, 0x0d, 0x5e, 0x28, 0x90, 0xeb, 0x2f, 0x7f, 0xf9, 0x29, 0xdf, 0xfc, 0xe0, 0x03, 0x6e, 0x6f, 0xee, 0xe8, 0x5a, 0x5b, 0x29, 0x15, 0x7c, 0x7e, 0xfc, 0xe3, 0x3f, 0x57, 0xdd, 0x43, 0xc0, 0xb3, 0x67, 0xcf, 0x8c, 0xc1, 0x8a, 0xb8, 0x88, 0x6d, 0x08, 0xe2, 0x88, 0xdd, 0x2e, 0xa7, 0xae, 0x3a, 0xb2, 0x54, 0x58, 0xab, 0xb2, 0xbe, 0x2d, 0x1c, 0xc7, 0x25, 0x49, 0xf6, 0x1c, 0x1f, 0x9f, 0xe0, 0xba, 0x0e, 0x4d, 0x2d, 0x5d, 0xb4, 0x14, 0x0c, 0x0e, 0x4d, 0x5b, 0xd3, 0x1f, 0xc4, 0x24, 0xc9, 0x9e, 0xcd, 0x66, 0x8d, 0x1f, 0x78, 0x1c, 0xcd, 0x27, 0x9c, 0x9d, 0xcf, 0x18, 0x0c, 0xfa, 0xec, 0x76, 0xe2, 0xcf, 0x2d, 0xc8, 0x15, 0x78, 0x9e, 0xcb, 0xd1, 0xd1, 0x8c, 0xfb, 0xc5, 0x2d, 0x8e, 0x6b, 0x9b, 0x8e, 0x57, 0x36, 0x72, 0x4b, 0x34, 0xa3, 0xb4, 0x82, 0x18, 0x39, 0x92, 0xec, 0xd4, 0x1f, 0xf4, 0xb0, 0x6c, 0x68, 0xda, 0xfa, 0x11, 0xc7, 0x63, 0x38, 0x1c, 0x30, 0x99, 0x8e, 0xf9, 0xfa, 0xbb, 0xcf, 0xb8, 0xb8, 0x38, 0xe7, 0xf8, 0xe4, 0x08, 0xcb, 0x82, 0xed, 0x76, 0x63, 0x42, 0x5e, 0x84, 0x30, 0xe3, 0x10, 0xc5, 0x3e, 0xae, 0xe7, 0xa8, 0xae, 0xba, 0xa0, 0x2c, 0x0b, 0x33, 0x56, 0x8a, 0x7b, 0x21, 0x65, 0x99, 0x1b, 0x6d, 0xfc, 0x6e, 0xb7, 0x25, 0xcf, 0x33, 0x40, 0xb3, 0x63, 0x1d, 0x55, 0x60, 0x14, 0x64, 0x79, 0x6a, 0x9e, 0xf1, 0xaa, 0xaa, 0xe9, 0xba, 0x96, 0xd1, 0x64, 0x44, 0x9a, 0xed, 0x79, 0xf5, 0x2a, 0xc5, 0xb2, 0x4a, 0xfa, 0xfd, 0x40, 0x32, 0xa7, 0x4f, 0xa6, 0x1c, 0x1f, 0x1f, 0xf1, 0xec, 0xe9, 0xdb, 0xfc, 0xfb, 0x7f, 0xff, 0xef, 0x79, 0xf2, 0xe4, 0x09, 0x47, 0x47, 0x73, 0xca, 0xa2, 0xe2, 0x5b, 0xdf, 0xfa, 0x36, 0xd3, 0xe9, 0x84, 0x34, 0xcd, 0x78, 0x7d, 0x79, 0x43, 0xd7, 0xb5, 0xca, 0x6a, 0x58, 0x3e, 0x63, 0x9e, 0x67, 0x0a, 0xbe, 0x6d, 0x89, 0x23, 0x97, 0x28, 0x12, 0xd5, 0x43, 0x9e, 0x67, 0x64, 0x59, 0x8d, 0xe3, 0x0a, 0x1c, 0xbd, 0xdd, 0xd5, 0x84, 0xa1, 0xc3, 0x64, 0x32, 0x22, 0xcf, 0x64, 0xee, 0xef, 0xfb, 0xae, 0xda, 0x83, 0x12, 0x95, 0xdb, 0x00, 0x59, 0x96, 0x4a, 0x17, 0xeb, 0x08, 0xfa, 0x36, 0x1e, 0x8f, 0xf0, 0x3c, 0x97, 0x57, 0xaf, 0xdf, 0x90, 0x65, 0xf0, 0xc1, 0x07, 0xef, 0x29, 0x32, 0xaf, 0x20, 0x0a, 0xdb, 0xad, 0x38, 0x43, 0x6a, 0x57, 0xca, 0x3c, 0xcf, 0xb8, 0xb8, 0x38, 0x67, 0xb5, 0x5a, 0x52, 0x55, 0x25, 0x17, 0x17, 0xe7, 0xec, 0x76, 0x5b, 0xa5, 0xda, 0x08, 0x78, 0x73, 0xf9, 0x86, 0x20, 0xf0, 0x38, 0x39, 0x9d, 0xd3, 0x36, 0x0d, 0x71, 0x1c, 0x32, 0x1c, 0x0e, 0x59, 0x2e, 0xef, 0xf1, 0x03, 0x9b, 0xa6, 0x95, 0x26, 0x20, 0x2f, 0x53, 0x6c, 0xa7, 0x23, 0xee, 0x05, 0xc4, 0xbd, 0x18, 0x2f, 0xb0, 0xf1, 0x6d, 0xf1, 0xc6, 0x70, 0x6c, 0x0b, 0xdb, 0x06, 0xc7, 0x96, 0x7d, 0xc9, 0xa2, 0x85, 0xae, 0x61, 0x9f, 0xed, 0x80, 0x06, 0xac, 0x86, 0x0e, 0x71, 0x0e, 0xb4, 0x9d, 0x96, 0x8e, 0x92, 0xa6, 0xcd, 0x09, 0xe3, 0x18, 0xcf, 0xb3, 0x71, 0x3d, 0x1b, 0xd7, 0x11, 0x84, 0xd1, 0x71, 0x6c, 0x2c, 0xab, 0x53, 0x23, 0x44, 0x19, 0x75, 0xe8, 0xee, 0x3a, 0x08, 0x42, 0x83, 0xb8, 0x05, 0x41, 0x80, 0x1f, 0x69, 0x4e, 0x46, 0x28, 0x07, 0xa5, 0xfa, 0x2d, 0x5d, 0xb9, 0xc7, 0xf9, 0xe9, 0x29, 0xb3, 0xd9, 0x8c, 0xf9, 0x7c, 0xce, 0x6c, 0x36, 0x65, 0x3c, 0x1e, 0x33, 0x18, 0xf6, 0x0d, 0x87, 0xc6, 0x76, 0x5c, 0x5c, 0xd7, 0xa2, 0x6e, 0xc4, 0x96, 0xd6, 0xb6, 0xe5, 0x7d, 0xab, 0x3a, 0x67, 0xb7, 0xdf, 0x10, 0x84, 0x1e, 0x96, 0x03, 0xae, 0x4a, 0x24, 0xb4, 0x6d, 0x1b, 0xac, 0x0e, 0xac, 0x4e, 0x0a, 0x7a, 0x57, 0xf8, 0x38, 0x9a, 0x1b, 0xe5, 0xbb, 0x9e, 0x24, 0x62, 0x06, 0x42, 0x8c, 0xcc, 0xb3, 0x42, 0x71, 0x77, 0x24, 0x31, 0x4f, 0x10, 0xa2, 0x87, 0x82, 0x76, 0x97, 0x26, 0xd4, 0x75, 0x01, 0x94, 0xfc, 0xe9, 0x9f, 0xfe, 0x84, 0xf3, 0xf3, 0x13, 0x7e, 0xef, 0xf7, 0x7e, 0x87, 0xe3, 0xb9, 0x04, 0xb0, 0x0c, 0x46, 0x63, 0x3e, 0xfd, 0xf4, 0x97, 0xca, 0x3d, 0x2e, 0x65, 0xb7, 0xcb, 0x14, 0x7c, 0xee, 0xb0, 0xdd, 0xa6, 0x8a, 0xd7, 0x85, 0x19, 0xe7, 0x68, 0xff, 0xf6, 0x87, 0x67, 0x48, 0x54, 0x3d, 0x9a, 0x3b, 0xf4, 0x37, 0xff, 0xe6, 0xdf, 0xe4, 0xe3, 0x8f, 0x3f, 0x66, 0x3c, 0x1e, 0x13, 0x45, 0x11, 0xb3, 0xd9, 0x18, 0xb0, 0xf8, 0xee, 0x77, 0x7f, 0x83, 0x3f, 0xf9, 0x93, 0x3f, 0xe1, 0xec, 0xf4, 0x98, 0x7e, 0x3f, 0xe6, 0xfe, 0x7e, 0x81, 0xe3, 0x38, 0xa6, 0x43, 0x3e, 0x84, 0xdc, 0x0f, 0x33, 0xd1, 0xf5, 0x3e, 0x69, 0x7c, 0xd4, 0x0f, 0x24, 0x71, 0x65, 0x59, 0x3e, 0x3a, 0xbc, 0x0f, 0x0f, 0xde, 0x87, 0xc0, 0x9a, 0xdd, 0x23, 0x37, 0x39, 0x6d, 0x88, 0xa6, 0xdf, 0x53, 0x4b, 0x74, 0x75, 0x11, 0xa1, 0x0f, 0x71, 0x3d, 0x26, 0x3d, 0x2c, 0x2e, 0x1e, 0x6c, 0xda, 0x1d, 0x0b, 0xdf, 0x7b, 0x90, 0x82, 0x94, 0x45, 0x26, 0x1f, 0x00, 0x18, 0x0e, 0x7a, 0x32, 0x5f, 0x5b, 0xde, 0x9b, 0x54, 0x27, 0xc7, 0x71, 0x08, 0xfc, 0x1e, 0x51, 0x38, 0x24, 0xab, 0x45, 0x94, 0x1f, 0x46, 0x3e, 0x41, 0xe0, 0x60, 0x3b, 0xd0, 0x75, 0xb5, 0x0a, 0x4f, 0x69, 0xc1, 0xa9, 0xd5, 0xcc, 0x4b, 0xfe, 0x6c, 0x5b, 0x16, 0x9e, 0xa3, 0x2b, 0x95, 0x8a, 0xa2, 0xdc, 0x0b, 0x83, 0xd2, 0x87, 0xc8, 0x0d, 0x88, 0xe3, 0x90, 0xb2, 0x0c, 0xa8, 0xeb, 0x98, 0xc1, 0xa0, 0xc7, 0x72, 0x75, 0x8f, 0xe5, 0x38, 0x84, 0x9e, 0x47, 0x10, 0xfa, 0x14, 0x79, 0x43, 0x59, 0xed, 0x25, 0x5b, 0x7c, 0x1c, 0xb3, 0x4f, 0x52, 0x99, 0x19, 0x5b, 0x2e, 0x75, 0x5d, 0xd2, 0xd9, 0x05, 0x9d, 0x6d, 0x51, 0x56, 0x39, 0xdb, 0x64, 0xa3, 0x20, 0xcb, 0x80, 0x40, 0xc1, 0x94, 0xb6, 0x07, 0x7e, 0x14, 0x9b, 0x0b, 0xbb, 0x4b, 0x3a, 0xe2, 0x7e, 0x44, 0x96, 0x79, 0x04, 0x91, 0xcb, 0x7e, 0x9f, 0x92, 0xe4, 0x3b, 0xd6, 0xdb, 0xa5, 0xcc, 0x38, 0x2d, 0x5f, 0x3a, 0x40, 0x0b, 0x7c, 0xdf, 0x65, 0x3a, 0x1f, 0x29, 0x4d, 0xaf, 0x58, 0x2e, 0xce, 0x8f, 0x8e, 0xb9, 0xb9, 0xb9, 0x21, 0x2f, 0x0b, 0x86, 0xa3, 0x91, 0x72, 0x72, 0xdb, 0x50, 0x14, 0xa2, 0x09, 0x9d, 0xcc, 0xc6, 0xb8, 0xae, 0xcb, 0x97, 0x5f, 0xbe, 0xe2, 0xf4, 0xfc, 0x8c, 0x2f, 0x5f, 0xbc, 0xe2, 0xd9, 0xb3, 0x67, 0x6c, 0xb7, 0x5b, 0xbc, 0xc0, 0xc7, 0xb7, 0xe1, 0xf6, 0x76, 0xc5, 0x74, 0x36, 0xc6, 0xf3, 0x6d, 0xfa, 0xfd, 0x88, 0xcd, 0x76, 0x21, 0x15, 0xbe, 0x07, 0x56, 0x1c, 0x30, 0x9f, 0x9f, 0x30, 0x9b, 0xcd, 0xe8, 0x3a, 0x8b, 0xcd, 0x7a, 0xa7, 0x82, 0x03, 0x2a, 0x82, 0x38, 0x62, 0xbd, 0x5d, 0xaa, 0x79, 0x6d, 0x47, 0x18, 0xaa, 0xe8, 0x3d, 0x5b, 0x66, 0xa6, 0x12, 0xba, 0x51, 0x53, 0x54, 0x72, 0xb8, 0xd7, 0x6d, 0x43, 0x67, 0x41, 0xd3, 0xc9, 0x9f, 0x6d, 0xdb, 0x26, 0x2d, 0x0a, 0xaa, 0xe5, 0xc2, 0xc8, 0x63, 0xa2, 0x28, 0x62, 0xb1, 0x5e, 0x19, 0xb6, 0x7b, 0x6f, 0x30, 0x30, 0x24, 0x8d, 0xba, 0x6d, 0xf1, 0x82, 0x00, 0x5f, 0xcd, 0x9a, 0xd3, 0x3c, 0xa7, 0x17, 0x0a, 0x0c, 0x54, 0x95, 0x8d, 0xca, 0x54, 0x6f, 0x89, 0xa2, 0x1e, 0xbe, 0x2f, 0x01, 0x2a, 0x8e, 0xed, 0xd1, 0xeb, 0x0d, 0x94, 0x53, 0xdb, 0x3d, 0x59, 0x56, 0xb1, 0xd9, 0x6c, 0xa0, 0xb3, 0x99, 0x8c, 0xe7, 0xec, 0x8b, 0x96, 0x0f, 0x3f, 0x14, 0xf6, 0xb4, 0x65, 0xb9, 0x3c, 0x7f, 0xfe, 0x0e, 0x79, 0x26, 0x8b, 0xf8, 0xdf, 0xfd, 0xe9, 0x4f, 0xf1, 0x7d, 0xf8, 0xf1, 0x8f, 0x3f, 0xe6, 0xaf, 0xfd, 0xb5, 0xff, 0x42, 0x79, 0x1b, 0x7b, 0xc6, 0xdb, 0xfb, 0xe3, 0x8f, 0x5f, 0x60, 0xd5, 0x62, 0xa6, 0x22, 0x29, 0x78, 0xf7, 0x54, 0x55, 0x43, 0x96, 0xe6, 0x6c, 0xb7, 0x39, 0x4f, 0x9e, 0x3c, 0x33, 0xb1, 0x89, 0x60, 0xd3, 0x75, 0x0f, 0xc5, 0x49, 0x10, 0xf9, 0xe6, 0xa1, 0xd3, 0xf6, 0x90, 0x12, 0x5b, 0x2b, 0x2c, 0x55, 0x5d, 0x21, 0xaf, 0x56, 0x2b, 0xe5, 0x5f, 0x2f, 0xb1, 0x98, 0x71, 0x2f, 0x34, 0xec, 0x72, 0xc7, 0xb1, 0xb1, 0xa3, 0xe0, 0xd7, 0xcc, 0x1e, 0x34, 0x93, 0x5d, 0xb3, 0x6e, 0x75, 0xf8, 0x83, 0x7e, 0xcd, 0x7e, 0xbf, 0xcf, 0x6c, 0x36, 0x13, 0xd5, 0x40, 0xb7, 0x37, 0xca, 0x81, 0xe5, 0x72, 0xc1, 0xcd, 0xcd, 0x0d, 0x5d, 0xd7, 0x18, 0x27, 0xb9, 0x5e, 0x3f, 0xc0, 0x75, 0xc5, 0x48, 0xa7, 0x69, 0x2a, 0xf2, 0x5c, 0xe2, 0x57, 0x5d, 0xcf, 0x26, 0x08, 0x03, 0x76, 0xbb, 0x0d, 0xfb, 0xfd, 0x1e, 0xcf, 0x53, 0xe8, 0xc3, 0x6a, 0x4b, 0xd3, 0x48, 0x82, 0x96, 0xe7, 0xf9, 0x07, 0xe6, 0x18, 0xae, 0x22, 0x23, 0x65, 0xec, 0xb6, 0x89, 0xc9, 0x63, 0x58, 0x2c, 0x6f, 0x98, 0x1d, 0x8d, 0x79, 0xdf, 0xaa, 0x79, 0xf2, 0xe4, 0x9c, 0x8b, 0x8b, 0x0b, 0x8e, 0x8e, 0x66, 0x86, 0x68, 0xf9, 0x3f, 0xfd, 0x8f, 0xff, 0x0b, 0x45, 0x21, 0x9f, 0xbf, 0x2c, 0x73, 0x7e, 0xfe, 0xf1, 0x2f, 0xf8, 0x0f, 0xff, 0xe1, 0x17, 0x1c, 0x1f, 0x8b, 0x41, 0x4e, 0x18, 0xc9, 0xa6, 0x92, 0xe5, 0x92, 0x33, 0x5d, 0x95, 0x15, 0x8e, 0x6b, 0xd1, 0x94, 0x62, 0x61, 0x5c, 0xd5, 0x35, 0x61, 0xe4, 0x32, 0x9b, 0x4d, 0x89, 0xa2, 0x33, 0xb5, 0x19, 0x89, 0x97, 0xfe, 0xab, 0x57, 0xaf, 0x48, 0xd3, 0x86, 0xe1, 0x50, 0x6f, 0x52, 0x52, 0xac, 0xd9, 0x8e, 0x8d, 0xe7, 0x89, 0x05, 0x6e, 0xd7, 0xca, 0x88, 0x49, 0x37, 0x16, 0x5a, 0xb2, 0x2a, 0x2a, 0x10, 0x08, 0x5d, 0xc8, 0x93, 0x1c, 0x07, 0x8f, 0xd3, 0xf9, 0x29, 0x6d, 0x5b, 0xd3, 0x8f, 0x62, 0x6c, 0x07, 0x5e, 0x7d, 0xf9, 0x25, 0xc7, 0x73, 0xd1, 0xc3, 0xdf, 0x5c, 0x5e, 0x09, 0xa4, 0x6d, 0xd9, 0xdc, 0xdf, 0xdc, 0xca, 0xfb, 0x0d, 0x5c, 0xd6, 0xdb, 0x1b, 0x7c, 0xdf, 0xa1, 0x2c, 0x33, 0x9a, 0xa6, 0x64, 0xbf, 0x4f, 0xb9, 0xbb, 0xbf, 0x66, 0x3a, 0x9d, 0x71, 0x72, 0x3a, 0xc3, 0x42, 0xfb, 0x06, 0xd8, 0x74, 0x5d, 0x48, 0x1c, 0x87, 0x8c, 0xc6, 0x03, 0xc5, 0x33, 0xb0, 0x70, 0x5d, 0x7d, 0xdf, 0x51, 0x85, 0xae, 0x36, 0x29, 0xaa, 0x55, 0xc6, 0xbb, 0xad, 0x1c, 0xc9, 0xec, 0x47, 0x07, 0x42, 0x5d, 0x77, 0xd8, 0x4e, 0x85, 0x63, 0x37, 0x78, 0xae, 0xc8, 0x76, 0xdb, 0x41, 0x4b, 0x59, 0xd4, 0x14, 0x45, 0xa5, 0x38, 0x4c, 0x35, 0x71, 0xd4, 0xa7, 0x6d, 0x4a, 0xf2, 0xac, 0xa2, 0x28, 0x2a, 0xe8, 0x56, 0xd4, 0x75, 0x4b, 0x5d, 0x35, 0xb8, 0xae, 0x8f, 0x1f, 0x57, 0xaa, 0x33, 0x94, 0x02, 0x36, 0x0c, 0x62, 0xe2, 0x20, 0x54, 0x84, 0x2b, 0x61, 0x7a, 0x3f, 0x40, 0xc7, 0x6a, 0x06, 0xac, 0xdc, 0x0f, 0x2d, 0xcb, 0xc2, 0xf1, 0x1d, 0xc5, 0x7e, 0xaf, 0xd5, 0x9f, 0x2d, 0xda, 0x4e, 0xf6, 0x3b, 0x07, 0x9b, 0x24, 0xdd, 0xca, 0x6b, 0x39, 0x72, 0x80, 0x78, 0xbe, 0x8b, 0xed, 0xd8, 0x6a, 0xa6, 0x5b, 0xd1, 0xb6, 0x52, 0x30, 0x36, 0x0a, 0x95, 0xa2, 0x69, 0x65, 0x2f, 0xa9, 0x44, 0x79, 0x71, 0x34, 0x3d, 0x7e, 0x34, 0x77, 0xfe, 0x2a, 0x4b, 0xdb, 0xf7, 0x85, 0x79, 0xbe, 0x5a, 0xad, 0xf8, 0xdd, 0xdf, 0xfd, 0x6d, 0x46, 0xa3, 0x11, 0xff, 0xe4, 0x9f, 0xfc, 0x13, 0xbe, 0xff, 0xbd, 0xdf, 0x14, 0x9e, 0x4e, 0x0d, 0x3f, 0xfa, 0xd1, 0x6f, 0x13, 0x45, 0x22, 0xeb, 0xfa, 0xe9, 0x4f, 0xff, 0xc2, 0x04, 0x43, 0xd9, 0x76, 0x45, 0x9a, 0x55, 0xca, 0x8a, 0x59, 0x13, 0x3b, 0x75, 0x14, 0x71, 0x4b, 0x55, 0x15, 0xc4, 0x71, 0xc0, 0x78, 0x3c, 0x66, 0x3c, 0x1e, 0x73, 0x7d, 0x7d, 0xcd, 0x3f, 0xfd, 0xa7, 0xff, 0x2b, 0x4f, 0x9e, 0x9c, 0xb3, 0x5a, 0xad, 0x84, 0xe9, 0x5e, 0x48, 0x28, 0xce, 0x6a, 0xb5, 0x32, 0xd9, 0x01, 0x72, 0x36, 0xf1, 0x68, 0xf6, 0xfd, 0x1f, 0x33, 0x85, 0x79, 0x20, 0xb6, 0x3d, 0x38, 0xb8, 0xe9, 0x7d, 0x53, 0x93, 0xd9, 0x34, 0x53, 0xfd, 0x30, 0x12, 0xd5, 0x44, 0x2b, 0x57, 0x95, 0x89, 0x44, 0x3e, 0x1c, 0x07, 0x68, 0xaf, 0x97, 0xaa, 0xea, 0x14, 0x42, 0xfd, 0xd0, 0x9d, 0x7f, 0x35, 0x73, 0xfd, 0xab, 0x70, 0xbe, 0x6d, 0xdb, 0x38, 0x3f, 0xfc, 0xc1, 0x37, 0x7f, 0x5f, 0x6f, 0x20, 0xba, 0x92, 0x19, 0x0e, 0x87, 0xc6, 0xa6, 0xd5, 0xf7, 0x7d, 0x86, 0xc3, 0x21, 0x67, 0x67, 0x67, 0x1c, 0x1f, 0x1f, 0x73, 0x72, 0x22, 0x07, 0xcc, 0x70, 0x38, 0x24, 0xe8, 0x85, 0x02, 0xcf, 0x84, 0x32, 0x17, 0x12, 0xfd, 0x71, 0x8b, 0xef, 0xbb, 0xc4, 0xbd, 0x50, 0x5d, 0xe5, 0x96, 0xba, 0x2e, 0x95, 0x2c, 0x22, 0xa3, 0xaa, 0x0a, 0x23, 0x69, 0x9a, 0x0c, 0x62, 0x7c, 0xdf, 0xa5, 0xa9, 0x6b, 0x05, 0xcd, 0xc5, 0xd0, 0xd5, 0x14, 0x45, 0x86, 0x45, 0xc7, 0x78, 0x2c, 0x30, 0x67, 0x59, 0x14, 0x84, 0xa1, 0x2f, 0x73, 0xbe, 0x0e, 0x05, 0xfb, 0x40, 0xdd, 0xd4, 0x22, 0xdd, 0x69, 0x0a, 0x33, 0x23, 0xf3, 0x7d, 0x07, 0x3f, 0x70, 0xb0, 0x2c, 0x49, 0x66, 0x9b, 0x4c, 0x47, 0x0c, 0x47, 0x7d, 0x31, 0xee, 0xe8, 0x6a, 0x5c, 0xc7, 0xa1, 0x6d, 0x6b, 0xf6, 0xfb, 0x1d, 0x8e, 0x17, 0x72, 0x7c, 0x7c, 0xc4, 0xed, 0xcd, 0x2d, 0x69, 0x9a, 0x30, 0x9f, 0xcf, 0x89, 0xa2, 0x90, 0x20, 0xf0, 0x64, 0xd3, 0x55, 0xba, 0xfb, 0xd1, 0x68, 0x40, 0x14, 0xcb, 0x5c, 0xbb, 0x53, 0x9a, 0x6b, 0xdf, 0xf7, 0xc8, 0x13, 0x9b, 0x8e, 0x8e, 0xf9, 0xfc, 0x88, 0xfd, 0x7e, 0xa7, 0x36, 0xdf, 0x5a, 0x69, 0x98, 0x2b, 0x4a, 0x33, 0x9f, 0x56, 0x76, 0x9c, 0x95, 0x74, 0xd0, 0x02, 0x51, 0x76, 0x78, 0xa1, 0x4d, 0xd4, 0x8b, 0xb8, 0x5f, 0xde, 0x33, 0x3f, 0x39, 0xe2, 0xad, 0xb7, 0x9f, 0x73, 0xb7, 0xb8, 0xa5, 0xa5, 0xc3, 0xf5, 0x25, 0x1e, 0xd2, 0xb2, 0x30, 0x2c, 0xda, 0xaa, 0x2a, 0xe9, 0x5a, 0x0c, 0xf3, 0xbe, 0xa3, 0x35, 0xd6, 0x80, 0x0f, 0xfe, 0xe9, 0x0f, 0x79, 0xf4, 0x55, 0xd9, 0xc9, 0x3c, 0xa4, 0xb3, 0x0c, 0x69, 0x44, 0x43, 0x52, 0x4d, 0xd3, 0x32, 0x99, 0x3c, 0x04, 0x9d, 0xb8, 0xae, 0x6b, 0xbc, 0x08, 0x74, 0x98, 0x8c, 0x5c, 0xc3, 0x87, 0x74, 0x20, 0x6d, 0xed, 0x5a, 0x96, 0x25, 0xab, 0xd5, 0x8a, 0x3c, 0xd9, 0x53, 0x16, 0x05, 0x69, 0x92, 0x52, 0x64, 0x15, 0x71, 0x14, 0x33, 0x9d, 0xcc, 0x70, 0x1d, 0x97, 0xfd, 0x2e, 0x65, 0x7e, 0x74, 0x42, 0xd7, 0x5a, 0x64, 0x69, 0xc6, 0xd5, 0xe5, 0x35, 0x8e, 0xed, 0x52, 0x57, 0x35, 0x9e, 0xe3, 0x61, 0x61, 0xf1, 0xf9, 0xcb, 0x37, 0x78, 0x1e, 0xf4, 0x7a, 0x3e, 0xbd, 0x58, 0xb8, 0x0c, 0xd3, 0xe9, 0x11, 0x7f, 0xfc, 0xc7, 0x3f, 0x46, 0xa1, 0xb8, 0xf8, 0xbe, 0xa4, 0x70, 0x3d, 0x7f, 0xfe, 0x9c, 0x7f, 0xf1, 0x2f, 0xfe, 0x88, 0xb7, 0xdf, 0x7e, 0x82, 0xeb, 0xba, 0x5c, 0x5f, 0xbf, 0xa2, 0x37, 0x1c, 0xcb, 0x2c, 0xd5, 0xb2, 0xb0, 0x6d, 0x8b, 0xe7, 0xcf, 0x9f, 0x73, 0x76, 0x7a, 0xcc, 0x62, 0x71, 0xaf, 0xfc, 0x12, 0xc4, 0x98, 0x22, 0x49, 0x12, 0x7a, 0x71, 0x64, 0xe4, 0x2c, 0xbe, 0x4a, 0xb8, 0xeb, 0xac, 0xd6, 0xc8, 0x11, 0xf5, 0x61, 0xac, 0x49, 0x2a, 0x7a, 0xae, 0xdc, 0xef, 0x4b, 0xe6, 0xf8, 0x6e, 0xbf, 0x61, 0xb7, 0xdb, 0x99, 0x20, 0x20, 0xe1, 0x12, 0x78, 0xbf, 0x56, 0x79, 0x1f, 0xce, 0xde, 0xb4, 0xcd, 0x64, 0xbf, 0xdf, 0xa7, 0xdf, 0xef, 0x9b, 0x7b, 0xa4, 0x7f, 0x87, 0xae, 0xc0, 0xa1, 0x55, 0x59, 0x92, 0x67, 0x39, 0x55, 0x25, 0xe8, 0x83, 0x63, 0xdb, 0xe4, 0x79, 0xca, 0x7a, 0xb5, 0xa2, 0x2c, 0x4a, 0x50, 0x04, 0xcf, 0xaa, 0xcc, 0xc5, 0xa1, 0xae, 0x69, 0x71, 0x6c, 0x9b, 0xb6, 0x69, 0xe4, 0xd9, 0x08, 0x02, 0x7a, 0x71, 0x9f, 0xba, 0x2a, 0x69, 0xea, 0x06, 0x47, 0xc9, 0x38, 0x1d, 0x5b, 0xd8, 0xfd, 0x71, 0xd4, 0x63, 0x38, 0x18, 0xe0, 0x3a, 0xae, 0x82, 0x2a, 0xc5, 0x3d, 0xed, 0xf4, 0xe2, 0x94, 0xef, 0x7d, 0xef, 0x2f, 0x31, 0x9b, 0x09, 0x34, 0xef, 0xb8, 0x96, 0x9a, 0xb1, 0x4b, 0x52, 0xdc, 0xfb, 0x5f, 0x7f, 0x9f, 0xaf, 0x7d, 0xed, 0x29, 0xf7, 0xf7, 0x77, 0xdc, 0xde, 0xde, 0xf1, 0xf6, 0xdb, 0x6f, 0xe1, 0x3a, 0x9d, 0x29, 0x38, 0xaa, 0x16, 0xb3, 0x81, 0x42, 0x43, 0x9e, 0x57, 0xb8, 0xae, 0x20, 0x2c, 0x41, 0xe0, 0x11, 0xf8, 0x22, 0x33, 0x9d, 0x4c, 0x26, 0xb8, 0xae, 0x4d, 0x96, 0xa5, 0x94, 0x55, 0x8e, 0xeb, 0x09, 0x74, 0x7d, 0x76, 0x7a, 0x02, 0x58, 0x6c, 0xd6, 0x5b, 0xa6, 0xd3, 0x89, 0x1c, 0x32, 0xae, 0xf0, 0x76, 0x9a, 0xa6, 0x66, 0xbb, 0xd9, 0x9b, 0xf7, 0xd2, 0x56, 0x9e, 0x59, 0x96, 0x29, 0x49, 0xea, 0x8c, 0x7e, 0xdc, 0x87, 0xae, 0x23, 0x0c, 0x23, 0x3a, 0x95, 0x33, 0xed, 0xfb, 0x1e, 0xbb, 0xdd, 0x9e, 0xb3, 0xb3, 0x53, 0x96, 0xcb, 0x95, 0x81, 0x2e, 0x0f, 0x73, 0xa5, 0xb5, 0xd4, 0xcf, 0x0f, 0x84, 0x9b, 0x53, 0xd5, 0x05, 0xe3, 0xc9, 0x98, 0xd3, 0xd3, 0x63, 0xce, 0xcf, 0xce, 0x79, 0xfa, 0xf4, 0x02, 0xdf, 0xf7, 0x18, 0x8f, 0x06, 0x06, 0x62, 0x1f, 0x8e, 0x7a, 0x0c, 0x47, 0x3a, 0x31, 0xab, 0x26, 0xcb, 0xf7, 0x38, 0x3c, 0xe8, 0x7f, 0x1d, 0x57, 0x3e, 0x7b, 0x47, 0x4d, 0x55, 0x17, 0x54, 0x75, 0xc1, 0x7a, 0xb7, 0x91, 0xce, 0xdd, 0x91, 0x82, 0x52, 0xa4, 0x69, 0x0d, 0xb6, 0xdd, 0x61, 0xd9, 0x9d, 0xe2, 0x16, 0x54, 0x07, 0xd9, 0xdb, 0x22, 0x5d, 0x93, 0xae, 0xdb, 0x33, 0x1d, 0xa8, 0xb8, 0x18, 0xca, 0xc1, 0x0a, 0xc2, 0x30, 0xef, 0xf7, 0x7b, 0x14, 0x95, 0xc8, 0x7a, 0x6d, 0xdb, 0x31, 0x4c, 0x7a, 0x1d, 0x49, 0xda, 0x75, 0x50, 0xe5, 0x05, 0x4d, 0x5d, 0x53, 0x57, 0x95, 0x90, 0x9c, 0x9b, 0x06, 0xcf, 0x75, 0xe8, 0xc5, 0x3d, 0x46, 0xc3, 0x21, 0x41, 0xcf, 0x67, 0x30, 0x1c, 0x10, 0x84, 0x01, 0xb6, 0xdd, 0xb1, 0xdd, 0x6e, 0xb8, 0xbd, 0xbd, 0x22, 0x49, 0xf6, 0xe4, 0x79, 0x46, 0xe0, 0xc9, 0x7a, 0x49, 0xd3, 0x3d, 0x45, 0x51, 0x08, 0xd2, 0xd4, 0xe8, 0x0e, 0xb5, 0x63, 0x9f, 0x15, 0x26, 0x8d, 0x53, 0xd2, 0x23, 0x25, 0x70, 0xa4, 0x6b, 0x3b, 0xfa, 0xfd, 0x3e, 0x55, 0x59, 0x1b, 0x0f, 0xf5, 0xaf, 0xb2, 0xb6, 0xb3, 0x2c, 0x63, 0x9f, 0x49, 0x74, 0xea, 0xa7, 0x9f, 0xbe, 0x60, 0xb3, 0x11, 0xa9, 0xec, 0x97, 0x5f, 0xbe, 0x22, 0xcb, 0x32, 0xfa, 0xfd, 0x3e, 0xff, 0xef, 0x9f, 0xfc, 0x3b, 0xee, 0xee, 0xee, 0xf8, 0xf3, 0x3f, 0xff, 0x19, 0xb7, 0xb7, 0xd7, 0xf2, 0xec, 0xaa, 0xc4, 0xc4, 0x3c, 0x6b, 0x69, 0x3b, 0xc9, 0x8f, 0x68, 0x1a, 0x29, 0xaa, 0x7a, 0xbd, 0xd8, 0x64, 0xb5, 0x4b, 0xa6, 0x07, 0xe6, 0xa0, 0x06, 0xf8, 0xd6, 0xb7, 0xbe, 0x69, 0xe4, 0xbb, 0x22, 0xd3, 0xb4, 0xe8, 0x3a, 0xd1, 0xa0, 0xf7, 0x7a, 0x3d, 0xf6, 0xfb, 0x44, 0xa5, 0x1b, 0xc6, 0x86, 0xf4, 0xa6, 0x8b, 0x91, 0x43, 0x64, 0x41, 0xcf, 0xb4, 0x35, 0xb3, 0x5c, 0x87, 0xc9, 0x68, 0xee, 0xd1, 0xe1, 0xcc, 0xfd, 0x90, 0xd4, 0xa6, 0x0b, 0x81, 0x87, 0x03, 0xdf, 0x36, 0x96, 0xaf, 0x3a, 0x92, 0x59, 0x9b, 0xcc, 0x8c, 0x46, 0x03, 0xa3, 0x0c, 0xd0, 0xc4, 0xdb, 0x43, 0xfe, 0x92, 0x2e, 0x18, 0xf4, 0x5e, 0xa2, 0x3f, 0x93, 0xf5, 0xb7, 0xfe, 0xf6, 0x6f, 0x76, 0xbb, 0xdd, 0x96, 0xaa, 0x2a, 0xd4, 0x41, 0xe5, 0x1a, 0x33, 0x7d, 0x3d, 0x03, 0xd0, 0xec, 0xcd, 0x87, 0x39, 0xa0, 0x54, 0x2d, 0xc5, 0xbe, 0x54, 0x5f, 0x4a, 0x16, 0x74, 0x10, 0xb8, 0x44, 0xb1, 0xb0, 0x89, 0xb1, 0x3a, 0xea, 0xbc, 0x32, 0xce, 0x72, 0xbe, 0x1f, 0xaa, 0xb9, 0x5a, 0x41, 0x10, 0x04, 0x92, 0x5c, 0xd4, 0xe5, 0xac, 0xd7, 0x5b, 0x23, 0x65, 0x58, 0xad, 0xd6, 0xe4, 0x79, 0x4e, 0x1c, 0x09, 0x59, 0xe0, 0x7e, 0xb3, 0x62, 0x3c, 0x1e, 0x43, 0x67, 0xab, 0x2e, 0xb2, 0x33, 0x5f, 0xa6, 0x6d, 0x61, 0x3c, 0x18, 0x1a, 0x1f, 0x5c, 0x2d, 0x8b, 0xd3, 0x2e, 0x62, 0x51, 0x14, 0x91, 0x94, 0x0f, 0x71, 0x7a, 0x65, 0xa9, 0x35, 0x82, 0x0f, 0x69, 0x57, 0xa3, 0xfe, 0x9c, 0xfb, 0xfb, 0x5b, 0xf6, 0x7b, 0xc9, 0x2b, 0x96, 0xfc, 0x6a, 0xcb, 0x24, 0xb8, 0x99, 0xf8, 0xbd, 0x28, 0x26, 0xcf, 0x0a, 0x76, 0xa9, 0x38, 0xda, 0x79, 0x81, 0x4f, 0x55, 0x35, 0x78, 0xd6, 0x83, 0x86, 0x58, 0x62, 0x46, 0x7b, 0x78, 0x6e, 0x60, 0x6e, 0xe0, 0x76, 0xbb, 0xa5, 0xd7, 0x8f, 0x14, 0x14, 0x9e, 0xc9, 0xc3, 0xed, 0x0a, 0xa4, 0xe6, 0xfb, 0x3e, 0xf3, 0xf9, 0x89, 0x41, 0x3e, 0x34, 0xdc, 0xbd, 0x58, 0x2c, 0x8c, 0x49, 0xff, 0x64, 0x32, 0x61, 0x38, 0x1c, 0x1a, 0x06, 0xfd, 0x6e, 0xb7, 0x33, 0x26, 0x26, 0xdb, 0xed, 0x16, 0x3a, 0xcf, 0x48, 0xfa, 0x34, 0xec, 0xa5, 0x17, 0x4e, 0x55, 0x55, 0x2c, 0xd7, 0x6b, 0xc3, 0xbe, 0xd6, 0x3f, 0xd7, 0x5d, 0x4e, 0xd7, 0x75, 0xc4, 0x81, 0x6c, 0x90, 0x75, 0x5d, 0x13, 0x46, 0x3a, 0xdb, 0xbb, 0x7d, 0x48, 0x14, 0xaa, 0x52, 0x03, 0xf1, 0x68, 0x59, 0x95, 0x6d, 0x43, 0x9a, 0xa6, 0x12, 0xd8, 0xe3, 0x48, 0x0c, 0xee, 0x9b, 0xd7, 0x57, 0x6c, 0xb7, 0x7b, 0x02, 0xbf, 0x87, 0x65, 0xd9, 0xf4, 0x7a, 0xc2, 0xfe, 0x4f, 0x8b, 0x87, 0xfc, 0x74, 0xad, 0xaf, 0xbd, 0xba, 0xba, 0xe4, 0xcb, 0x2f, 0xbf, 0x94, 0x9c, 0x6a, 0xb7, 0x26, 0x4d, 0x6b, 0xb0, 0xe1, 0xfb, 0xdf, 0xff, 0x01, 0x6f, 0x2e, 0xaf, 0xf9, 0xfc, 0xb3, 0x57, 0x52, 0x9d, 0x57, 0x2d, 0xae, 0xe3, 0x98, 0x22, 0x43, 0x1b, 0x29, 0xe8, 0xc4, 0xac, 0xd3, 0xd3, 0x23, 0x92, 0x7c, 0xc5, 0x76, 0xdb, 0x30, 0x99, 0xc8, 0x3d, 0x78, 0xef, 0xbd, 0xf7, 0xb8, 0xbb, 0xbb, 0xa3, 0xa7, 0x52, 0xb3, 0x36, 0xf7, 0x6b, 0x26, 0x93, 0x89, 0x89, 0x31, 0x9c, 0xcf, 0xe7, 0x58, 0x96, 0x65, 0x32, 0xd1, 0x75, 0x01, 0x6b, 0xd9, 0x9d, 0x72, 0x7f, 0x93, 0xfb, 0x2e, 0xe4, 0x25, 0x8f, 0xae, 0x75, 0xd9, 0xef, 0xf7, 0x2a, 0x08, 0x48, 0x7c, 0xff, 0x7d, 0x3f, 0xe4, 0xe8, 0xe8, 0x48, 0x0e, 0xff, 0x3a, 0x37, 0x0f, 0x52, 0x55, 0x09, 0x89, 0xc5, 0xb2, 0x45, 0xb6, 0x36, 0x18, 0x0c, 0xe8, 0xf5, 0x55, 0x07, 0x9b, 0x65, 0x38, 0x8e, 0xa5, 0xfc, 0x09, 0x86, 0xf4, 0xfb, 0x22, 0x4b, 0x1a, 0xf6, 0x5c, 0x3e, 0xfb, 0xec, 0x33, 0xf5, 0xba, 0xbe, 0x41, 0xc9, 0xf4, 0xbf, 0x17, 0x65, 0x62, 0x90, 0x09, 0x9d, 0xd4, 0x36, 0x1a, 0x8d, 0x4c, 0xf2, 0x98, 0x65, 0xc1, 0xe5, 0xe5, 0x25, 0x61, 0x18, 0x32, 0x99, 0x4c, 0x1e, 0x79, 0xc5, 0x6b, 0xb9, 0xd9, 0x7c, 0x3e, 0x37, 0x1d, 0x81, 0xf6, 0xc8, 0xd7, 0x4e, 0x53, 0x56, 0x8d, 0x89, 0x6d, 0x9d, 0x9f, 0x9e, 0x49, 0xd1, 0xd9, 0x48, 0x24, 0x6b, 0x9a, 0xa6, 0x7c, 0xf2, 0xe9, 0xe7, 0x7c, 0xfe, 0xf9, 0x0b, 0xb0, 0x7d, 0xca, 0xa2, 0xc1, 0x71, 0x43, 0x8a, 0xbc, 0xc6, 0xf7, 0x63, 0xbe, 0x7c, 0xf5, 0x9a, 0x3c, 0x2f, 0xe9, 0xf5, 0x42, 0xb2, 0x3c, 0xa7, 0xae, 0x21, 0x0c, 0x45, 0x8f, 0x1d, 0x84, 0xf0, 0xf4, 0xe9, 0x53, 0x2c, 0xab, 0x33, 0x7b, 0x88, 0x96, 0x12, 0xe9, 0x7c, 0x68, 0xd7, 0x75, 0x71, 0x14, 0x99, 0x52, 0x6f, 0x92, 0x7a, 0x7f, 0xd1, 0x05, 0xa6, 0x9e, 0x75, 0x6a, 0x0e, 0x82, 0x1e, 0xfb, 0x14, 0x45, 0xa1, 0x6c, 0x7e, 0x6b, 0x43, 0x90, 0xb3, 0x6d, 0xd1, 0xc7, 0x1f, 0xfe, 0x5d, 0x87, 0xdd, 0x68, 0xdf, 0x6c, 0x6d, 0x68, 0xa3, 0xf7, 0x34, 0xdb, 0x92, 0xef, 0xfa, 0xf5, 0xaf, 0x7f, 0x8d, 0x20, 0x74, 0xf0, 0x3c, 0x87, 0xd1, 0xb8, 0x4f, 0xd3, 0x54, 0x0c, 0x06, 0x03, 0xd6, 0x8b, 0x6b, 0xd6, 0xeb, 0xb5, 0x39, 0x48, 0xb4, 0xfb, 0x98, 0xf1, 0xd0, 0xb6, 0x25, 0x04, 0x49, 0x32, 0xd7, 0x03, 0xb5, 0x19, 0xf7, 0x4c, 0xee, 0xbd, 0xed, 0x3b, 0x9c, 0x9d, 0x9d, 0xb1, 0x58, 0x2c, 0xb0, 0x2c, 0xc7, 0x1c, 0x7e, 0x96, 0x65, 0xcb, 0x48, 0x60, 0x9b, 0xb2, 0x58, 0xdc, 0x99, 0x50, 0x19, 0xcf, 0xd7, 0x49, 0x7f, 0x28, 0x89, 0x9c, 0x6d, 0xc6, 0x5e, 0x41, 0x10, 0xe0, 0xb8, 0x3a, 0x15, 0x50, 0xae, 0xdb, 0xcd, 0x52, 0xee, 0x77, 0xbf, 0x1f, 0x13, 0x45, 0x11, 0x59, 0x96, 0x98, 0xb8, 0xdd, 0x30, 0x0a, 0xe8, 0xc5, 0xbe, 0xe1, 0x73, 0x68, 0xd6, 0xb6, 0x65, 0x61, 0x24, 0xac, 0x51, 0x38, 0x34, 0xbc, 0x04, 0x7d, 0x5d, 0xb5, 0x33, 0xa8, 0x7c, 0x0e, 0xf7, 0x51, 0xb0, 0x88, 0x96, 0x55, 0x69, 0x78, 0xb7, 0x51, 0x31, 0xbc, 0x74, 0x3a, 0xe5, 0x4c, 0xac, 0x8c, 0xbb, 0xae, 0xa3, 0xaa, 0x0b, 0xf6, 0xbb, 0x94, 0xed, 0x76, 0x47, 0x18, 0x47, 0x74, 0xd8, 0x14, 0x55, 0x83, 0xeb, 0x07, 0x34, 0x9d, 0xa5, 0x94, 0x35, 0x3b, 0x96, 0xcb, 0x15, 0x61, 0x18, 0x10, 0x06, 0xb1, 0x7a, 0xff, 0x94, 0x27, 0x4f, 0xce, 0x78, 0xf1, 0xe2, 0x8a, 0x93, 0xd3, 0x23, 0x46, 0xa3, 0x09, 0x3f, 0xfb, 0xe9, 0xa7, 0x74, 0x1d, 0x4c, 0xc6, 0x23, 0xb6, 0xbb, 0x0d, 0x8e, 0x63, 0x51, 0x96, 0x7a, 0xb4, 0xe5, 0x52, 0x96, 0x15, 0x51, 0xe8, 0xca, 0x75, 0x2b, 0x6b, 0xa5, 0x8a, 0x69, 0xa0, 0x81, 0xa6, 0x85, 0x77, 0xdf, 0xbd, 0x90, 0xb0, 0x9c, 0xc0, 0xc3, 0x0f, 0x5c, 0xd5, 0xbc, 0x16, 0x34, 0x6d, 0x6c, 0x94, 0x27, 0x9e, 0xe7, 0x19, 0xd7, 0x38, 0xf1, 0x2c, 0xe8, 0xe8, 0xf5, 0x1e, 0x0a, 0xfc, 0x07, 0xa2, 0xe8, 0xc3, 0x01, 0xed, 0x78, 0xe1, 0xaf, 0x41, 0xf1, 0x87, 0x45, 0xfd, 0xa1, 0xa3, 0x9b, 0x5e, 0x73, 0x87, 0xc4, 0x38, 0xd7, 0x79, 0xf8, 0xf9, 0x61, 0xa1, 0xaf, 0x1b, 0x82, 0x30, 0x72, 0x7f, 0x8d, 0x90, 0xa7, 0x8b, 0x0c, 0x21, 0x3d, 0x57, 0x46, 0x12, 0xae, 0xef, 0x8f, 0xab, 0xb5, 0x7b, 0x41, 0x20, 0xd9, 0xe0, 0x55, 0x55, 0xb0, 0x5e, 0xaf, 0xd5, 0xec, 0x3c, 0x3e, 0x18, 0xc6, 0x3b, 0x07, 0x4c, 0xbc, 0xd6, 0x54, 0xcd, 0x55, 0x55, 0x60, 0xdb, 0x0e, 0x83, 0xc1, 0x90, 0xe9, 0x74, 0x24, 0x73, 0x27, 0x55, 0x75, 0x16, 0x5d, 0x66, 0x2a, 0x1d, 0xd7, 0x75, 0x89, 0xe3, 0x98, 0xe1, 0xc0, 0x36, 0x69, 0x48, 0x56, 0x5b, 0x18, 0xda, 0xbf, 0x54, 0x9e, 0x2e, 0xfd, 0xde, 0xd0, 0x3c, 0x94, 0x41, 0x10, 0x30, 0xe8, 0x8f, 0x0c, 0x8c, 0xa9, 0x75, 0xb1, 0xae, 0x2b, 0x33, 0x8b, 0xba, 0xaa, 0xcd, 0xec, 0xe1, 0xd0, 0x76, 0x4f, 0x7f, 0xf1, 0x07, 0x61, 0x3e, 0x8f, 0xa2, 0xf5, 0xf4, 0x66, 0xb1, 0x5a, 0x2d, 0x70, 0x5d, 0x97, 0xf1, 0x78, 0x78, 0xe0, 0xb8, 0xd3, 0x99, 0x03, 0x58, 0x4c, 0x6d, 0x1c, 0x53, 0x20, 0xe0, 0xb8, 0x74, 0xad, 0x45, 0x5e, 0x56, 0xec, 0xf7, 0x1b, 0x06, 0x91, 0x6f, 0x0c, 0x40, 0x64, 0x83, 0x90, 0x8e, 0x50, 0x9c, 0xf5, 0x3c, 0x35, 0xa7, 0x0e, 0xf0, 0xfd, 0x0e, 0xd7, 0xb5, 0xe5, 0xb7, 0xe7, 0xa8, 0xf9, 0x8c, 0x6f, 0x02, 0x49, 0x46, 0xa3, 0x91, 0x09, 0x47, 0xd1, 0xdf, 0xb5, 0x69, 0x1a, 0xa6, 0xd3, 0x29, 0x6f, 0xde, 0xbc, 0x21, 0x49, 0x12, 0x63, 0x3e, 0xa0, 0x67, 0xc8, 0x92, 0x06, 0xf6, 0xf8, 0x66, 0x1e, 0x66, 0xd8, 0xaf, 0x56, 0x2b, 0x9a, 0xae, 0x23, 0x8e, 0xe3, 0x47, 0xa9, 0x61, 0xba, 0x6b, 0xf4, 0x3c, 0x8f, 0xaa, 0xa8, 0x1e, 0xc5, 0xfd, 0x1d, 0xce, 0x8b, 0xba, 0x4e, 0xb2, 0xee, 0xc3, 0xc8, 0x97, 0x64, 0xa8, 0x28, 0xa2, 0x28, 0x32, 0x65, 0x62, 0x52, 0x33, 0x1c, 0x0e, 0x79, 0xf5, 0xfa, 0xce, 0xdc, 0xbf, 0xf1, 0x78, 0x8c, 0xeb, 0x84, 0x3c, 0x7b, 0xf6, 0x9c, 0x4f, 0x3e, 0xf9, 0x84, 0x2c, 0x2b, 0x68, 0x2d, 0x1f, 0x47, 0x8d, 0x58, 0xd2, 0x34, 0x27, 0x4d, 0x53, 0xae, 0xae, 0xdf, 0x90, 0xa4, 0x7b, 0xc2, 0x30, 0x20, 0xcf, 0xc5, 0x72, 0xf5, 0x7b, 0x3f, 0xf8, 0x16, 0x9f, 0x7f, 0xfe, 0x39, 0xcf, 0x9e, 0xbf, 0xcd, 0x66, 0xb3, 0x65, 0xbf, 0x4b, 0x29, 0x9b, 0x96, 0xba, 0x6e, 0xb8, 0xbb, 0xbb, 0x63, 0x38, 0x1c, 0xb2, 0x5a, 0x6d, 0x54, 0xf7, 0xd7, 0x32, 0x9d, 0x0e, 0xe5, 0x90, 0xf7, 0x3a, 0x82, 0x40, 0xdc, 0xdd, 0x06, 0x83, 0x01, 0xbf, 0xf8, 0xc5, 0x27, 0x4c, 0xa7, 0xe2, 0x64, 0xa8, 0x61, 0x5a, 0xfd, 0x5d, 0xf4, 0x6c, 0x4d, 0xfb, 0xaf, 0xeb, 0xeb, 0xa0, 0x76, 0xa4, 0x03, 0xe6, 0x6a, 0xf7, 0x20, 0x33, 0xb1, 0x2c, 0xfa, 0xfd, 0x1e, 0x55, 0x55, 0xb3, 0x58, 0xdc, 0xd2, 0xb5, 0x16, 0x4f, 0x9e, 0x9c, 0x33, 0x9d, 0x4e, 0xb9, 0xb9, 0xb9, 0x53, 0x26, 0x3b, 0x25, 0x17, 0x17, 0x17, 0x62, 0xcc, 0x43, 0xa3, 0x2a, 0x6a, 0xa9, 0xa4, 0x6f, 0x6e, 0x24, 0x3e, 0x58, 0xaa, 0xff, 0xad, 0x89, 0xda, 0x1c, 0x8f, 0xc7, 0xa2, 0x59, 0xaf, 0xc5, 0xd0, 0x47, 0x67, 0x92, 0xeb, 0x84, 0x37, 0x5d, 0x04, 0xad, 0xd7, 0x52, 0xe0, 0x6a, 0xa3, 0xa3, 0xd1, 0x68, 0xf4, 0x88, 0xf3, 0x00, 0x9d, 0x20, 0x65, 0x41, 0x60, 0xd2, 0xa0, 0x74, 0xd1, 0x93, 0x28, 0xa9, 0xe9, 0xf1, 0xf1, 0xb1, 0xd9, 0x5c, 0xe2, 0x38, 0x66, 0x30, 0x18, 0xb0, 0xdb, 0xed, 0x24, 0x18, 0xe2, 0xf8, 0x9c, 0xa2, 0x28, 0x58, 0xad, 0x36, 0x26, 0x33, 0x3e, 0x8e, 0x25, 0x41, 0xee, 0xfe, 0xfe, 0x1e, 0xb0, 0xcd, 0x8c, 0xb2, 0x69, 0x3a, 0x3a, 0xc4, 0xdd, 0xac, 0x2c, 0x55, 0xc0, 0x48, 0x23, 0xdd, 0x68, 0x1c, 0x07, 0xca, 0xcc, 0xa7, 0xc0, 0xf3, 0x6c, 0x26, 0x53, 0x31, 0x87, 0x92, 0xa2, 0xa2, 0x36, 0xd9, 0xf2, 0xba, 0x93, 0x91, 0x75, 0xde, 0xe1, 0xd4, 0xe5, 0x23, 0xc8, 0x31, 0xcf, 0x45, 0x26, 0x9a, 0x65, 0x02, 0xee, 0xcd, 0xe7, 0x31, 0xc3, 0xe1, 0x50, 0x6d, 0xda, 0xa5, 0x71, 0x1d, 0xd4, 0x5d, 0x8b, 0xb6, 0x84, 0xd5, 0x09, 0x5e, 0x5a, 0xaf, 0xad, 0xd7, 0xe4, 0x6a, 0xb5, 0x52, 0xec, 0xf8, 0x87, 0x82, 0xf6, 0x10, 0x2e, 0xcd, 0x33, 0x31, 0xc2, 0x99, 0xcf, 0xe7, 0x44, 0xb1, 0x47, 0x5d, 0x97, 0x26, 0x6c, 0xa8, 0xdf, 0xef, 0xb3, 0x59, 0x5a, 0x46, 0xe5, 0xa1, 0xbf, 0xcf, 0x66, 0xb3, 0xa1, 0x69, 0x64, 0x2c, 0x92, 0xec, 0xd7, 0xca, 0x4c, 0x27, 0x36, 0xd2, 0x44, 0xdf, 0x0f, 0xcc, 0x33, 0xb4, 0xdb, 0xec, 0x55, 0x90, 0xc7, 0x5e, 0xc5, 0x08, 0x23, 0xc6, 0x54, 0x65, 0x83, 0x85, 0xc8, 0x7f, 0x5b, 0xcb, 0xc6, 0xf1, 0x03, 0x6c, 0xcf, 0xa5, 0xb3, 0x6c, 0x5a, 0xa4, 0x6b, 0xac, 0x9a, 0x8e, 0xdd, 0xfe, 0x21, 0x6e, 0xd7, 0xa5, 0xc3, 0xb6, 0x6c, 0x6c, 0xd7, 0xa2, 0x6b, 0xac, 0x47, 0x16, 0xa0, 0x8e, 0xe3, 0xa9, 0xbc, 0x82, 0x07, 0xc6, 0x73, 0x9e, 0x15, 0xd0, 0x36, 0x38, 0xae, 0x26, 0x4f, 0x79, 0xf8, 0xbe, 0xab, 0x8c, 0x8d, 0x54, 0xf7, 0x59, 0xdb, 0xc6, 0x92, 0xf8, 0xd0, 0xa4, 0x44, 0xf3, 0x71, 0x8e, 0x8f, 0x4f, 0x8d, 0x8c, 0xaa, 0x28, 0x8a, 0x47, 0x90, 0xb1, 0xa0, 0x29, 0x81, 0x20, 0xb0, 0xaa, 0xcb, 0x2c, 0xcb, 0x12, 0xda, 0x8e, 0x20, 0xf4, 0x88, 0xbc, 0x08, 0x0b, 0x39, 0x17, 0x1c, 0xcf, 0xe5, 0xea, 0xfa, 0x56, 0x0a, 0xdd, 0x91, 0x43, 0xa7, 0x8a, 0x1b, 0xc7, 0x71, 0x78, 0xf7, 0xdd, 0x77, 0x78, 0xf5, 0xea, 0x95, 0x0a, 0x73, 0x09, 0x99, 0x4e, 0x47, 0x00, 0xbc, 0xf7, 0xde, 0x53, 0xb2, 0xbc, 0x52, 0x87, 0xa7, 0x28, 0x38, 0xe4, 0xb9, 0x45, 0xcd, 0x9a, 0x2b, 0x6c, 0x47, 0x47, 0x1f, 0x57, 0x2a, 0x5d, 0x2d, 0x16, 0xeb, 0x6d, 0xab, 0x63, 0xb5, 0x5a, 0x11, 0x06, 0x3e, 0x41, 0xe8, 0x99, 0x02, 0x11, 0xa0, 0x2c, 0x6a, 0x93, 0x47, 0xdf, 0xb4, 0x85, 0x29, 0x26, 0x85, 0xe5, 0x2e, 0x32, 0x68, 0xdb, 0xb6, 0x99, 0x4c, 0x22, 0x73, 0x1f, 0x0f, 0x9d, 0xd9, 0x8c, 0xc5, 0xaa, 0xea, 0xcc, 0xbf, 0x4a, 0x4e, 0x3b, 0x74, 0x6d, 0x3b, 0x34, 0x55, 0xd3, 0x7b, 0xd0, 0xe1, 0x21, 0xdf, 0x28, 0xa7, 0xcb, 0x43, 0x42, 0x9d, 0xbe, 0xbe, 0x87, 0x52, 0xe1, 0x43, 0x66, 0xfc, 0x21, 0xcc, 0x3e, 0x50, 0x23, 0xd1, 0x24, 0x49, 0xcc, 0xd9, 0xe1, 0x3a, 0x96, 0x8d, 0xed, 0xf9, 0xca, 0x71, 0x0d, 0xda, 0x36, 0xa0, 0x51, 0x29, 0x59, 0xba, 0x83, 0x71, 0x1c, 0x07, 0xdb, 0x72, 0x0c, 0xcb, 0x51, 0x38, 0x1b, 0x1d, 0x55, 0x5d, 0x3d, 0x82, 0x05, 0xba, 0xae, 0x63, 0xb3, 0xd9, 0xb1, 0xdf, 0x4b, 0xc7, 0x6f, 0xb5, 0x9d, 0x71, 0xde, 0xd9, 0x6e, 0x17, 0x74, 0xad, 0x65, 0xa0, 0x83, 0xae, 0xb3, 0x08, 0x3d, 0x5f, 0x19, 0xd0, 0x04, 0x64, 0x69, 0x81, 0xeb, 0xf8, 0x4a, 0xe6, 0xe5, 0xd1, 0x34, 0x1d, 0x47, 0x53, 0xd1, 0x45, 0x4b, 0x7a, 0x9b, 0xcb, 0x6c, 0x36, 0xc2, 0xb2, 0x2c, 0x49, 0x2f, 0xca, 0x0a, 0x16, 0xfb, 0x3b, 0xf3, 0x20, 0x69, 0xc8, 0x49, 0xcb, 0x10, 0x8a, 0x22, 0xc5, 0x0f, 0x23, 0xe3, 0x96, 0x25, 0x55, 0xae, 0x20, 0x0f, 0xae, 0xe3, 0x89, 0xa5, 0x6c, 0x99, 0xe3, 0xfb, 0xa2, 0xb7, 0xcd, 0x8b, 0x94, 0xa6, 0xb5, 0x15, 0x01, 0xd0, 0x55, 0xdf, 0x5b, 0x2a, 0xf2, 0xfd, 0x2a, 0xa5, 0x28, 0x2a, 0xd2, 0xbc, 0x64, 0x34, 0x92, 0xcf, 0x34, 0x1e, 0x4d, 0x71, 0x90, 0xce, 0xbc, 0xaa, 0x2a, 0x3c, 0x37, 0xc0, 0x72, 0x2d, 0xda, 0x56, 0xa4, 0x37, 0xb6, 0xdd, 0xd1, 0xef, 0x0f, 0x09, 0x02, 0x5f, 0x55, 0xf5, 0x32, 0xd2, 0x68, 0x93, 0x1a, 0xdb, 0x91, 0xeb, 0x70, 0x7a, 0x7a, 0xca, 0x93, 0x27, 0x4f, 0xa8, 0xaa, 0x8a, 0x17, 0x2f, 0x5e, 0x30, 0x1c, 0x0e, 0x79, 0xe7, 0x9d, 0x77, 0xb0, 0x2c, 0x8b, 0x2f, 0xbf, 0xfc, 0x92, 0x5f, 0xfe, 0xf2, 0x97, 0x74, 0x5d, 0xc7, 0x6c, 0x36, 0x63, 0x36, 0x9b, 0x19, 0xa6, 0xa6, 0x26, 0x6c, 0xec, 0xb6, 0xb9, 0xd9, 0x08, 0xd3, 0x34, 0x35, 0x1d, 0xb8, 0xde, 0xd8, 0x47, 0xca, 0xa6, 0x57, 0x43, 0x5e, 0x41, 0x20, 0x6e, 0x66, 0xbe, 0xef, 0x4b, 0x25, 0x1f, 0x44, 0x86, 0x48, 0xa2, 0xe7, 0xc7, 0x6d, 0x5b, 0x3f, 0x64, 0x80, 0xc7, 0x21, 0xeb, 0x95, 0x98, 0x49, 0x48, 0x36, 0xbd, 0x68, 0xf0, 0x65, 0x63, 0xb5, 0x18, 0x8d, 0xe6, 0x58, 0x38, 0x24, 0xc9, 0x86, 0x3c, 0x2f, 0xf1, 0x7d, 0x91, 0x37, 0x0a, 0xc9, 0xc3, 0x23, 0xcb, 0x2b, 0x68, 0x2b, 0x5c, 0xc7, 0xc1, 0x0e, 0x1c, 0x7c, 0x37, 0xc6, 0x73, 0x4f, 0x39, 0x3f, 0x3d, 0x52, 0x07, 0x50, 0x4b, 0x92, 0x88, 0x16, 0xf3, 0xe2, 0xe2, 0xcc, 0xc4, 0x63, 0x5e, 0xbe, 0xf9, 0x94, 0xfe, 0x48, 0x1c, 0xa3, 0x76, 0xbb, 0x54, 0x59, 0x20, 0x42, 0x59, 0xb6, 0x04, 0x81, 0xcd, 0x6f, 0xfc, 0xc6, 0x77, 0xe8, 0xf7, 0xfb, 0xfc, 0xab, 0x3f, 0xfc, 0x03, 0x3e, 0xf8, 0xe0, 0x5d, 0xca, 0xb2, 0x34, 0x8b, 0xda, 0xb6, 0x6d, 0xae, 0xaf, 0xaf, 0x55, 0x1a, 0xd9, 0x83, 0xb7, 0xf3, 0xe1, 0xa6, 0xae, 0x8b, 0x40, 0x57, 0x21, 0x3a, 0x5d, 0xa7, 0x2a, 0x65, 0xdb, 0x81, 0x4e, 0x24, 0x8f, 0x5d, 0xd3, 0x52, 0xd4, 0x72, 0x18, 0xc4, 0x51, 0x9f, 0xf7, 0xde, 0x79, 0x07, 0xc7, 0x91, 0x99, 0x6e, 0x59, 0x64, 0xd4, 0x55, 0x41, 0xe0, 0xb9, 0x3c, 0x7f, 0xfa, 0x04, 0xdb, 0x86, 0x2c, 0xd9, 0x31, 0x99, 0x4c, 0x48, 0x12, 0xe1, 0x39, 0x7c, 0xf7, 0xbb, 0xdf, 0x65, 0xd8, 0x8f, 0xa8, 0xeb, 0x9a, 0xc5, 0xe2, 0x8e, 0xb6, 0xae, 0x39, 0x99, 0xcf, 0x78, 0xeb, 0xd9, 0x33, 0x55, 0x9c, 0x8a, 0xb7, 0xbe, 0xb6, 0xc8, 0x7c, 0xf1, 0xe2, 0x05, 0x9b, 0xcd, 0xe6, 0x51, 0x37, 0xdb, 0x76, 0x95, 0x29, 0xd8, 0x0e, 0x0b, 0xba, 0x5e, 0xaf, 0xa7, 0x8a, 0xa4, 0xc4, 0xa0, 0x52, 0xfb, 0xfd, 0xde, 0x14, 0x2a, 0x75, 0x5d, 0xab, 0x02, 0xd1, 0xa1, 0x2c, 0x6b, 0xf5, 0x9a, 0xa1, 0x38, 0x98, 0x95, 0x35, 0xab, 0x95, 0xb8, 0xff, 0x89, 0x21, 0x92, 0xa7, 0x24, 0x4f, 0x25, 0xbb, 0x6d, 0xc2, 0x68, 0x22, 0x24, 0xab, 0x28, 0x8a, 0x79, 0x6f, 0x76, 0xca, 0x78, 0x34, 0x65, 0xb5, 0xdd, 0x71, 0x7f, 0xb7, 0xa2, 0xaa, 0xc1, 0xb6, 0x3c, 0xc0, 0xc6, 0x0b, 0x02, 0x2e, 0xaf, 0x5e, 0x93, 0xe7, 0x1d, 0x51, 0x64, 0xa9, 0x03, 0xb6, 0x50, 0xe3, 0x01, 0x9b, 0xed, 0x66, 0x47, 0xdb, 0x35, 0xc6, 0x6e, 0x53, 0x23, 0x01, 0x65, 0xd9, 0xe2, 0xba, 0x6a, 0x3c, 0x41, 0xf7, 0x48, 0xa3, 0xab, 0xa5, 0x3c, 0xf3, 0xb9, 0x18, 0x7f, 0xe8, 0x24, 0xb9, 0x3c, 0xcf, 0xd9, 0xed, 0x76, 0xca, 0xc3, 0x3d, 0x36, 0x56, 0xa3, 0xbe, 0x1f, 0x2a, 0xe2, 0x50, 0x67, 0x9c, 0x1e, 0x35, 0x67, 0x22, 0x49, 0x32, 0xc3, 0x8f, 0x38, 0x4c, 0xac, 0x3a, 0x9c, 0xe9, 0x1e, 0xcd, 0x66, 0x0c, 0x06, 0x03, 0x39, 0xd4, 0xda, 0x8a, 0xae, 0xab, 0xc8, 0x8b, 0x8e, 0x2c, 0x53, 0x9d, 0x73, 0x91, 0x98, 0x6b, 0xda, 0x75, 0x88, 0xb2, 0x22, 0x49, 0xd5, 0x38, 0xa6, 0xa7, 0x3a, 0xd9, 0xc0, 0xf8, 0x10, 0xe8, 0xc6, 0xa1, 0x2c, 0x2a, 0x8a, 0xbc, 0xc4, 0x0f, 0x22, 0x3c, 0x2f, 0xc4, 0xf7, 0x2b, 0xa2, 0xb0, 0x4f, 0xe0, 0xc7, 0xf4, 0x62, 0xd9, 0xc3, 0xc6, 0xe3, 0x31, 0xe9, 0x3e, 0x33, 0xc5, 0x99, 0x8c, 0x25, 0x33, 0xc5, 0xfc, 0xb7, 0xb0, 0xac, 0x86, 0x38, 0x12, 0x63, 0xa0, 0xaa, 0x2e, 0x58, 0x2e, 0x53, 0x2c, 0x4b, 0x1f, 0x12, 0x52, 0xa0, 0xcd, 0x66, 0x33, 0x93, 0x86, 0xa8, 0xf7, 0x69, 0xcd, 0xd7, 0x70, 0x1c, 0x87, 0xb2, 0x48, 0x71, 0x1d, 0xed, 0xfa, 0x59, 0x28, 0x3e, 0xc7, 0x83, 0x37, 0x85, 0xe7, 0xba, 0x66, 0x6f, 0xd0, 0x7b, 0xb8, 0x3e, 0xa8, 0xf4, 0xba, 0x3a, 0xd4, 0x43, 0x7f, 0x35, 0x59, 0xac, 0x4c, 0x04, 0x32, 0x0f, 0x7c, 0x25, 0xc3, 0xab, 0x6b, 0x6c, 0xeb, 0x81, 0xa0, 0x25, 0xc8, 0x43, 0xc4, 0x68, 0x3c, 0xa6, 0x6e, 0x3a, 0x2c, 0xc7, 0xc3, 0x0f, 0x23, 0x6a, 0x75, 0x9d, 0xf6, 0x7b, 0x79, 0x66, 0xf7, 0xbb, 0x4a, 0x19, 0xc4, 0x94, 0x9c, 0x9d, 0xcd, 0xd4, 0x9a, 0xb0, 0x55, 0x31, 0xdd, 0xaa, 0x94, 0xc4, 0x9e, 0x69, 0x66, 0x04, 0x15, 0x73, 0xa8, 0xea, 0x8e, 0xb6, 0x13, 0x87, 0x40, 0x4d, 0x2e, 0xd3, 0x23, 0x91, 0xb6, 0xed, 0x68, 0xda, 0x8a, 0x7e, 0x7f, 0xc2, 0x76, 0xbb, 0x55, 0xca, 0x10, 0xf1, 0x70, 0xd0, 0xcf, 0x44, 0xdb, 0xb5, 0x8f, 0x1a, 0xbc, 0x43, 0xd6, 0xba, 0x5e, 0x7f, 0xfa, 0x30, 0x7d, 0x54, 0xc8, 0x28, 0xa8, 0xbd, 0x2a, 0x2b, 0x41, 0xae, 0x41, 0x58, 0xfe, 0x96, 0x85, 0x85, 0x28, 0x80, 0xba, 0x4e, 0x93, 0x07, 0x2d, 0x73, 0xbf, 0x9a, 0xb6, 0x36, 0x67, 0xa6, 0x6d, 0xdb, 0xf8, 0xaa, 0x90, 0xfd, 0x6a, 0x97, 0x6e, 0x8a, 0x00, 0xda, 0x5f, 0x23, 0xbd, 0x1d, 0x1e, 0xfe, 0xba, 0x78, 0xd5, 0xcf, 0x56, 0x9a, 0xa6, 0xb8, 0xb3, 0xf1, 0x04, 0x75, 0x42, 0x53, 0x55, 0x05, 0x55, 0x0d, 0x5d, 0x27, 0x1b, 0x60, 0x1b, 0xb4, 0x07, 0xc2, 0x7a, 0x15, 0xea, 0xee, 0x38, 0x58, 0xad, 0x85, 0x83, 0x45, 0xdd, 0xb5, 0xc4, 0x71, 0x9f, 0xb8, 0x17, 0x52, 0x14, 0x39, 0x9b, 0xcd, 0x92, 0xa2, 0xcc, 0x84, 0x55, 0xee, 0xba, 0x26, 0xfc, 0xa2, 0xaa, 0x44, 0xa6, 0x24, 0x1f, 0xda, 0xa5, 0xdf, 0x17, 0x18, 0xb9, 0x48, 0xd7, 0xb8, 0x8e, 0x4f, 0x55, 0x36, 0x26, 0x42, 0xaf, 0x6d, 0x51, 0xb2, 0x88, 0x40, 0x99, 0x8b, 0x6c, 0xd8, 0x6c, 0x04, 0x5e, 0x1b, 0x8f, 0x26, 0x04, 0x41, 0xa0, 0x58, 0xd4, 0x15, 0xe3, 0xe9, 0x91, 0x59, 0x78, 0x7a, 0xa6, 0xd0, 0x59, 0x0e, 0xd8, 0x60, 0xbb, 0x3e, 0x83, 0xc1, 0xc8, 0x74, 0x04, 0x8e, 0x23, 0x17, 0xcf, 0x73, 0x7d, 0xb3, 0xd8, 0xfa, 0x83, 0x58, 0x91, 0xa3, 0x6a, 0x75, 0x93, 0xec, 0x47, 0x17, 0x6c, 0xbd, 0xde, 0x08, 0xaa, 0x30, 0x1c, 0xe3, 0xfb, 0x21, 0x9b, 0x5d, 0x42, 0xbf, 0x3f, 0xa4, 0xed, 0x3a, 0x7c, 0xaf, 0xa4, 0xce, 0x53, 0x03, 0x8f, 0xf7, 0x7a, 0xb6, 0xb2, 0xd8, 0x7c, 0x08, 0x92, 0x11, 0x7d, 0x2e, 0x52, 0x54, 0x34, 0x10, 0x46, 0x91, 0x82, 0xae, 0x65, 0xae, 0x7a, 0x74, 0x74, 0x84, 0xe7, 0xfa, 0xd4, 0x55, 0xc3, 0xd3, 0x27, 0xcf, 0x18, 0x8d, 0xa4, 0x3a, 0x7d, 0xf1, 0xe2, 0x05, 0x9f, 0xfc, 0xf2, 0x53, 0x73, 0x90, 0x0f, 0x06, 0x03, 0x56, 0xab, 0x15, 0x57, 0x57, 0x57, 0xc6, 0x53, 0x3f, 0x6b, 0x73, 0x76, 0x5b, 0x91, 0x08, 0x69, 0xd8, 0x3c, 0x8e, 0x63, 0x9a, 0xba, 0xc3, 0xc2, 0x61, 0x3c, 0x9a, 0x32, 0x18, 0x8d, 0x0c, 0xcb, 0x59, 0xe0, 0xb3, 0x08, 0xcb, 0x72, 0x28, 0x8a, 0x8a, 0x3c, 0x2f, 0xd9, 0x6f, 0xf6, 0xa6, 0xe3, 0xb1, 0x4d, 0x15, 0xd8, 0x3e, 0x72, 0x1e, 0xb2, 0x6d, 0xdb, 0xdc, 0x9f, 0xc3, 0x45, 0x57, 0xd7, 0x12, 0x21, 0xe8, 0x7b, 0x62, 0x85, 0xea, 0x38, 0x1e, 0x96, 0xd5, 0xf1, 0xd9, 0xe7, 0x9f, 0x72, 0x71, 0xfe, 0x14, 0xdf, 0xf7, 0x98, 0x4e, 0x43, 0xe5, 0x3d, 0x90, 0xd3, 0xb5, 0xb2, 0x91, 0x87, 0x81, 0xcb, 0xae, 0x4c, 0x58, 0x2e, 0xb6, 0x34, 0x2d, 0xcc, 0x66, 0x33, 0xae, 0x6e, 0xef, 0x78, 0xfd, 0x6a, 0xc1, 0xb7, 0xbf, 0xf3, 0x01, 0x51, 0x14, 0xf1, 0xdb, 0xbf, 0xfd, 0x9b, 0xfc, 0xc9, 0x9f, 0xfd, 0x19, 0x65, 0x09, 0xa3, 0x71, 0xcc, 0x72, 0xb5, 0x63, 0x30, 0x90, 0x62, 0x2f, 0xcf, 0x73, 0xfe, 0xf4, 0xdf, 0xfd, 0x31, 0xbf, 0xf5, 0x5b, 0xbf, 0x45, 0x14, 0x79, 0x38, 0x8e, 0x47, 0x92, 0x6c, 0xb8, 0xbc, 0xbc, 0xe7, 0xe4, 0x64, 0x42, 0xd7, 0x59, 0x64, 0x59, 0x81, 0x65, 0x3d, 0x6c, 0xe2, 0x5a, 0x13, 0x7a, 0x38, 0x6f, 0x0a, 0x82, 0x80, 0xee, 0x00, 0xc9, 0x71, 0x5d, 0xd1, 0x92, 0x5a, 0xad, 0x85, 0x26, 0xb1, 0x6e, 0x36, 0x2b, 0x83, 0x5e, 0x8d, 0xfa, 0x03, 0x55, 0xb0, 0x6a, 0xf4, 0x2a, 0xe0, 0x68, 0x7a, 0x42, 0x1c, 0xc7, 0x0a, 0xa6, 0x2c, 0xb0, 0x6d, 0xf1, 0xb3, 0xc7, 0xea, 0x33, 0x3b, 0x9a, 0xe0, 0xb8, 0xad, 0x2a, 0x92, 0x26, 0xf4, 0x07, 0x31, 0xe7, 0xe7, 0xe7, 0xb8, 0xae, 0x14, 0xce, 0x47, 0x47, 0x47, 0x2c, 0xee, 0xaf, 0xcc, 0xa8, 0x44, 0x77, 0x4a, 0xfa, 0x7e, 0x16, 0x45, 0xc1, 0x70, 0x14, 0x1b, 0x12, 0x58, 0x96, 0x65, 0xdc, 0xdd, 0x09, 0x22, 0xf2, 0xee, 0xbb, 0xef, 0x2a, 0x2e, 0x43, 0x45, 0x10, 0x84, 0xa6, 0x7b, 0x70, 0x5d, 0xcf, 0x84, 0x3c, 0x84, 0xaa, 0x98, 0xd5, 0x70, 0xf5, 0x6c, 0x36, 0xa3, 0x69, 0x04, 0xf1, 0x68, 0xdb, 0x96, 0x8b, 0x8b, 0x0b, 0x76, 0xcb, 0x2d, 0x5d, 0x27, 0x05, 0x55, 0xd3, 0x59, 0x14, 0x4e, 0x85, 0xab, 0xd6, 0x6d, 0x14, 0x49, 0x87, 0x75, 0x74, 0x74, 0x4c, 0xd5, 0xc0, 0xd5, 0xe5, 0x2d, 0xfb, 0xa4, 0xa0, 0x69, 0x1b, 0x9a, 0xda, 0xa2, 0xa8, 0x2b, 0x4e, 0x4e, 0xe6, 0xc6, 0x15, 0x52, 0xaf, 0x15, 0xbd, 0x29, 0x56, 0x55, 0x45, 0x96, 0xe6, 0x8f, 0xc8, 0x50, 0x65, 0xd9, 0x52, 0xd7, 0xe0, 0xd8, 0x40, 0x67, 0x11, 0xf7, 0xfa, 0x0a, 0xf2, 0xac, 0x1e, 0x8d, 0x84, 0xfa, 0x7d, 0x31, 0x1c, 0xd1, 0x1d, 0xbd, 0xbe, 0x9f, 0x83, 0xc1, 0x88, 0x7e, 0xbf, 0x2f, 0x8e, 0x78, 0x85, 0x1c, 0xa6, 0xbb, 0xdd, 0x03, 0x8c, 0xae, 0x51, 0x86, 0x20, 0xb0, 0x29, 0x8a, 0x4a, 0xdd, 0x13, 0xdb, 0x78, 0x37, 0x0c, 0x06, 0x03, 0xa3, 0xf7, 0xf6, 0x3c, 0x8f, 0x42, 0x1d, 0xd6, 0xcb, 0xe5, 0x0a, 0xd7, 0xb3, 0xc4, 0x07, 0x40, 0xf9, 0xc5, 0xb7, 0x6d, 0xcb, 0x78, 0x76, 0xac, 0x48, 0xa8, 0xa5, 0x42, 0x6c, 0x44, 0xd1, 0x21, 0xdb, 0xb6, 0xc3, 0xc9, 0xc9, 0xd9, 0xc3, 0xe6, 0x5e, 0x49, 0x51, 0x95, 0x26, 0x99, 0x62, 0xd7, 0xe7, 0x14, 0xeb, 0x96, 0xa3, 0x23, 0x9b, 0xcd, 0x26, 0x21, 0xd9, 0xbf, 0xa0, 0xae, 0x5b, 0x8e, 0x8e, 0x8e, 0x18, 0xf4, 0x47, 0x6c, 0x37, 0x29, 0xaf, 0x5f, 0xbf, 0x31, 0x1d, 0x5e, 0xd3, 0x88, 0x47, 0x78, 0x18, 0x49, 0x93, 0xe3, 0x7a, 0x11, 0xfd, 0x41, 0x68, 0xac, 0x58, 0xf3, 0x62, 0x25, 0xe6, 0x2c, 0xd8, 0x58, 0x8e, 0x43, 0xd7, 0xb6, 0x34, 0x75, 0x47, 0xab, 0x0e, 0xb3, 0xa2, 0xa8, 0x4c, 0x0a, 0xa6, 0x6d, 0xbb, 0xca, 0x6a, 0x55, 0x0a, 0xbf, 0xa2, 0xa8, 0xd8, 0xef, 0xd2, 0x83, 0xec, 0x70, 0x5b, 0xdd, 0x1f, 0x29, 0x02, 0x35, 0xa2, 0xa1, 0x47, 0x33, 0x9a, 0xbd, 0x9d, 0xe7, 0xe5, 0x23, 0x6e, 0xc8, 0xe1, 0x0c, 0x17, 0xa0, 0xaa, 0x1b, 0xb5, 0xd6, 0x02, 0x20, 0xa0, 0x69, 0xc4, 0x30, 0x47, 0x5b, 0xd9, 0x5e, 0x5c, 0x5c, 0x50, 0x14, 0xa5, 0x8c, 0x0d, 0xe3, 0x3e, 0xae, 0x1f, 0xb2, 0x5c, 0x6f, 0x24, 0x6b, 0xdc, 0xf3, 0x08, 0x83, 0x98, 0x34, 0xc9, 0x79, 0xf6, 0xec, 0x0c, 0xcf, 0x0b, 0xb8, 0xbd, 0xbd, 0xa5, 0x69, 0x3a, 0xe2, 0xb8, 0x6f, 0x90, 0x95, 0x3c, 0x4d, 0xb0, 0x80, 0x38, 0x0c, 0x69, 0xaa, 0x5a, 0xf8, 0x08, 0x6d, 0x4d, 0xdb, 0x35, 0xd4, 0x7a, 0x9e, 0xaf, 0x48, 0xcb, 0xfa, 0x90, 0x73, 0x5d, 0x57, 0x5c, 0x2a, 0x55, 0x72, 0xdf, 0x62, 0xb1, 0x30, 0x89, 0x69, 0xfa, 0x8c, 0x71, 0x5d, 0x07, 0xdb, 0x7a, 0xe8, 0xba, 0xe5, 0x7b, 0x84, 0x06, 0x82, 0x2f, 0x8a, 0xc2, 0xd8, 0x9f, 0x1f, 0x8e, 0x7b, 0x0e, 0x8d, 0x5c, 0x34, 0x2a, 0xa2, 0x8b, 0x9c, 0xc3, 0x59, 0xf6, 0xe1, 0xfe, 0x79, 0x18, 0xa2, 0xe2, 0x1d, 0x1e, 0xe2, 0x2a, 0xdd, 0xf1, 0x50, 0xfa, 0x7a, 0xc8, 0xc9, 0xd1, 0xe6, 0x4e, 0x1a, 0x15, 0x38, 0x84, 0xf5, 0x01, 0x45, 0x7e, 0xf5, 0xcc, 0xf7, 0xce, 0xf3, 0x1c, 0x37, 0x4b, 0x53, 0x7a, 0xbd, 0x58, 0x64, 0x1f, 0x75, 0x49, 0x53, 0x89, 0x69, 0x4b, 0x67, 0xd9, 0x84, 0x8a, 0xd1, 0x6c, 0xa8, 0xf3, 0x4d, 0x0b, 0xad, 0x44, 0x9a, 0xe2, 0x88, 0x2d, 0x5f, 0xaf, 0xd7, 0x03, 0xab, 0x65, 0xb3, 0x59, 0x93, 0x29, 0x92, 0xc3, 0x70, 0x24, 0x04, 0xa0, 0xfd, 0x46, 0xbc, 0xda, 0xcb, 0x42, 0x5c, 0xbe, 0x66, 0xb3, 0xb9, 0x99, 0x5f, 0xe7, 0x79, 0xc9, 0xf2, 0x7e, 0x45, 0x18, 0x16, 0x6a, 0x91, 0x74, 0x38, 0x8e, 0xd8, 0xae, 0xd6, 0x95, 0x1c, 0xe0, 0xcd, 0x3e, 0x31, 0x1d, 0x75, 0x59, 0x54, 0x2c, 0x16, 0x0b, 0xe9, 0x0e, 0xd4, 0xbc, 0xc3, 0x52, 0xa8, 0x81, 0xe3, 0xd8, 0xf4, 0xfb, 0xe1, 0x41, 0xc8, 0x7d, 0x83, 0xef, 0x87, 0x86, 0x10, 0x63, 0x59, 0x0a, 0x56, 0x69, 0x3a, 0x63, 0x5e, 0xd1, 0xb6, 0x50, 0xe4, 0x89, 0xb9, 0xc8, 0xba, 0xc2, 0x14, 0x57, 0x24, 0xd9, 0xfc, 0x25, 0x3f, 0xd8, 0xc5, 0x72, 0x5c, 0x26, 0xe3, 0x19, 0x8e, 0xb7, 0x23, 0x0a, 0x63, 0xb6, 0xfb, 0x1d, 0xb6, 0x2d, 0xbe, 0xc9, 0x6d, 0x0b, 0x41, 0x10, 0xd1, 0xeb, 0xf5, 0x89, 0xe3, 0x1e, 0x59, 0x5a, 0xd0, 0xd4, 0x1d, 0xbe, 0xe7, 0xe3, 0x3a, 0x9e, 0x10, 0x64, 0xaa, 0x1a, 0xcb, 0x72, 0xe8, 0xf7, 0x86, 0x4c, 0xa6, 0x23, 0x46, 0xa3, 0x01, 0xa3, 0xd1, 0x88, 0x30, 0xf4, 0xb9, 0xbf, 0x17, 0x05, 0xc1, 0xd1, 0xd1, 0x11, 0x49, 0x92, 0xf0, 0xd1, 0x47, 0x1f, 0x71, 0x73, 0x73, 0xc3, 0x7c, 0x3e, 0xe7, 0xed, 0xb7, 0xdf, 0x56, 0x46, 0x2a, 0x89, 0xf1, 0xd9, 0x9f, 0xcd, 0x66, 0xd8, 0xb6, 0xcd, 0xcd, 0xcd, 0x0d, 0x55, 0x69, 0x19, 0x32, 0xa3, 0x9e, 0x35, 0x6e, 0x36, 0x1b, 0x8a, 0xa2, 0x30, 0x9d, 0x87, 0x5e, 0x8c, 0xba, 0xf0, 0x59, 0x2c, 0x16, 0xc6, 0x82, 0x31, 0x4f, 0xd2, 0x07, 0x2f, 0x61, 0x4b, 0x59, 0x5b, 0x36, 0xb5, 0x39, 0x20, 0x36, 0x65, 0xa1, 0x2c, 0x0d, 0x6d, 0xd2, 0x24, 0x25, 0x2f, 0x52, 0xf5, 0x60, 0x87, 0xd8, 0x36, 0xec, 0x76, 0x15, 0x75, 0x95, 0xea, 0x92, 0x8f, 0xa2, 0x28, 0x78, 0xeb, 0xad, 0x67, 0x3c, 0x79, 0xf2, 0x84, 0xe1, 0x70, 0xc8, 0xd5, 0x9b, 0x4b, 0x56, 0xeb, 0x05, 0x69, 0x9a, 0x29, 0xb8, 0x5b, 0x20, 0xa7, 0x22, 0xdf, 0xb1, 0x5e, 0x6f, 0x78, 0xfe, 0xce, 0xd7, 0x58, 0x2e, 0x97, 0xac, 0xd7, 0x6b, 0xde, 0x7f, 0xff, 0xb9, 0x19, 0x5f, 0x9c, 0x9c, 0x9c, 0xd2, 0x1b, 0x8a, 0xee, 0xf8, 0x0f, 0xfe, 0xe0, 0x5f, 0x33, 0x99, 0x84, 0xfc, 0xe8, 0x47, 0x3f, 0xe2, 0xf2, 0xf2, 0x92, 0xc9, 0x44, 0xc8, 0x53, 0x3f, 0xff, 0xf9, 0xcf, 0x19, 0x0e, 0x87, 0x12, 0xe2, 0xd0, 0x34, 0x84, 0xa1, 0xd8, 0xd5, 0x4a, 0x98, 0xcc, 0x94, 0xdd, 0x6e, 0xc7, 0x68, 0x30, 0x30, 0x08, 0x8e, 0x36, 0xc7, 0xd1, 0x07, 0x8e, 0x65, 0x59, 0xf8, 0xb6, 0x43, 0x53, 0x56, 0x32, 0xa7, 0x54, 0xb0, 0x7b, 0x5d, 0xc8, 0xbc, 0xd1, 0x75, 0x5d, 0xc6, 0xc3, 0x1e, 0xfd, 0xfe, 0x00, 0xdb, 0x86, 0xfb, 0xdb, 0x4b, 0x6c, 0x4b, 0xf2, 0xec, 0x87, 0xc3, 0xa9, 0x1c, 0x62, 0x36, 0x7c, 0xfa, 0xe9, 0xa7, 0x3c, 0x7f, 0xfe, 0x9c, 0x6f, 0x7e, 0xf0, 0x35, 0xc5, 0x83, 0x98, 0x10, 0x45, 0x11, 0xcb, 0xe5, 0x92, 0xaa, 0x2c, 0x8d, 0x5a, 0xe4, 0xfc, 0xfc, 0x9c, 0xb7, 0x9e, 0x3d, 0x35, 0x4e, 0x55, 0x45, 0x9e, 0x1a, 0xd7, 0xc1, 0xcb, 0xcb, 0x4b, 0xe3, 0xa7, 0xaf, 0x5d, 0xfb, 0x92, 0x44, 0x62, 0x7b, 0xc5, 0xf0, 0x44, 0x18, 0x54, 0xc5, 0x70, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xb8, 0x0a, 0x7a, 0xce, 0xa9, 0x51, 0xaa, 0xc3, 0x6e, 0x2c, 0x49, 0x12, 0x33, 0x43, 0xd7, 0x1b, 0x94, 0x6d, 0xf9, 0x58, 0x08, 0x4b, 0xbe, 0xae, 0xc4, 0x38, 0xa3, 0xc8, 0x2b, 0xa2, 0xb0, 0xc7, 0x74, 0x72, 0x44, 0xec, 0x45, 0xbc, 0x7e, 0xfd, 0x9a, 0xed, 0x76, 0x0f, 0xb6, 0x4d, 0xbf, 0x3f, 0xa0, 0xaa, 0x2a, 0x16, 0xf7, 0x2b, 0x59, 0x43, 0xc3, 0x23, 0xe3, 0xbb, 0x2d, 0x5d, 0x4c, 0xae, 0xf6, 0x82, 0x8e, 0x38, 0x0e, 0x49, 0x92, 0x9d, 0xc9, 0x40, 0xaf, 0xaa, 0x4a, 0x8a, 0xed, 0xa2, 0x60, 0xb9, 0x5c, 0x3e, 0xca, 0x80, 0xd6, 0xfc, 0x1b, 0x41, 0x42, 0x00, 0x24, 0x7f, 0x5d, 0x6b, 0xd6, 0x1d, 0x47, 0xd2, 0xe9, 0xe2, 0x38, 0x36, 0x6b, 0x55, 0x5b, 0xbd, 0xea, 0x39, 0xba, 0x56, 0x09, 0xe8, 0x71, 0x9c, 0x30, 0xdd, 0x3b, 0x35, 0x43, 0xee, 0x9b, 0x84, 0xc8, 0x2c, 0xcb, 0x4c, 0x7e, 0x75, 0x51, 0x24, 0x66, 0x06, 0xac, 0x0f, 0x22, 0xdd, 0x81, 0x05, 0x41, 0xc0, 0xf1, 0xd1, 0x09, 0x61, 0xe4, 0x63, 0xdb, 0x28, 0xf9, 0x61, 0x8b, 0xeb, 0xda, 0x22, 0xd7, 0xb2, 0xe0, 0xee, 0xea, 0x92, 0x34, 0xcd, 0x55, 0xfe, 0x83, 0xa5, 0xc6, 0x8c, 0xda, 0x11, 0x50, 0x88, 0xb3, 0x32, 0x1e, 0xeb, 0x58, 0x2e, 0x97, 0x34, 0x75, 0xab, 0x66, 0xf5, 0x52, 0x24, 0x05, 0xbd, 0x21, 0x9e, 0x1b, 0xd1, 0x8b, 0x65, 0xcd, 0xad, 0x56, 0x6b, 0xf6, 0xbb, 0x8c, 0xba, 0x92, 0xcf, 0x52, 0x94, 0xa8, 0x98, 0x57, 0x0f, 0xcf, 0x0f, 0xb0, 0x6c, 0x4f, 0xa9, 0x72, 0x62, 0xb0, 0x5a, 0xd6, 0xeb, 0x95, 0x98, 0x0c, 0x61, 0x13, 0x84, 0xf2, 0x33, 0xd7, 0x0f, 0x68, 0xbb, 0x86, 0xa2, 0xac, 0xb1, 0x10, 0x3e, 0x52, 0x2f, 0x1e, 0xe0, 0xf9, 0x8e, 0xda, 0xd8, 0x13, 0x33, 0xe7, 0xef, 0xf7, 0x22, 0x13, 0x0d, 0xec, 0x38, 0x1e, 0xbe, 0x1f, 0x2a, 0xbf, 0x08, 0x17, 0x14, 0x47, 0x48, 0x0e, 0x3f, 0x49, 0x22, 0x2c, 0x8a, 0xc2, 0x20, 0x5d, 0xba, 0x71, 0x38, 0xe4, 0x0c, 0xe8, 0x43, 0x4d, 0x17, 0x21, 0x5e, 0xe0, 0x1b, 0x79, 0x55, 0x59, 0xe6, 0x6a, 0x2e, 0x6c, 0x99, 0xfb, 0x26, 0x07, 0xa4, 0x86, 0x99, 0x2d, 0x53, 0x4c, 0xe9, 0x43, 0x70, 0xb7, 0x95, 0x11, 0xca, 0xc5, 0xc5, 0x53, 0xe5, 0xd6, 0x18, 0x71, 0x75, 0x75, 0xc5, 0xd1, 0xd1, 0x11, 0xc3, 0xc1, 0x88, 0xaa, 0x2e, 0xd5, 0x1a, 0x79, 0x80, 0xdb, 0xe5, 0xb5, 0x1f, 0xce, 0x24, 0xc7, 0xb1, 0xe9, 0xf5, 0x1c, 0x06, 0x43, 0x51, 0xa9, 0xec, 0x36, 0x7b, 0x73, 0xd6, 0x24, 0x3b, 0x21, 0x45, 0x1e, 0x86, 0xb7, 0xe8, 0xcf, 0x62, 0xe1, 0x3e, 0x82, 0xb1, 0x35, 0xaf, 0x40, 0x7f, 0xdf, 0x43, 0xf8, 0x5b, 0xaf, 0xd1, 0x43, 0xc7, 0x47, 0xf1, 0x70, 0x77, 0xd5, 0xb3, 0x66, 0x3f, 0x92, 0x95, 0x89, 0x17, 0x81, 0x63, 0x94, 0x34, 0x87, 0x29, 0x6d, 0xae, 0xfb, 0xa0, 0x6b, 0xaf, 0x8a, 0xfa, 0xd7, 0xe6, 0xeb, 0x87, 0x76, 0xb1, 0x55, 0xd5, 0x3c, 0x9a, 0x9f, 0x7f, 0x55, 0x32, 0xd7, 0x3a, 0xd2, 0x30, 0xe8, 0xf4, 0x46, 0xdf, 0xf7, 0x71, 0x9b, 0xaa, 0x26, 0x4b, 0x52, 0x3a, 0x1a, 0xd2, 0x74, 0x4f, 0x55, 0x15, 0x04, 0xa1, 0x4f, 0x18, 0x04, 0xe2, 0x09, 0x0c, 0x74, 0xad, 0x1c, 0xe4, 0x56, 0x07, 0xae, 0x2d, 0x56, 0x87, 0xb6, 0x6d, 0x53, 0x53, 0x0b, 0x54, 0xad, 0x2a, 0x19, 0x90, 0xf9, 0xf8, 0xcd, 0xf5, 0x9d, 0xe0, 0xff, 0xb5, 0xc4, 0xcb, 0x4d, 0x26, 0x13, 0x4e, 0x4e, 0xce, 0x94, 0x7f, 0x6e, 0xca, 0x72, 0xb9, 0x92, 0x59, 0x5c, 0x9a, 0x98, 0x8e, 0x7d, 0x32, 0xe9, 0xe3, 0xb9, 0x01, 0x9b, 0xcd, 0x86, 0xfd, 0x6e, 0x25, 0x0f, 0x4f, 0x24, 0x87, 0xb9, 0x1d, 0x38, 0x46, 0x53, 0x5b, 0x55, 0x8d, 0x81, 0xb5, 0xf7, 0x6a, 0x86, 0x36, 0x18, 0x0c, 0x8c, 0x23, 0x9b, 0x9e, 0x25, 0xeb, 0xb9, 0x9d, 0x14, 0x0a, 0x1d, 0x5d, 0x8b, 0x81, 0xbe, 0xf5, 0x0d, 0xdc, 0xee, 0x96, 0x12, 0xc5, 0xea, 0xf4, 0x69, 0x1a, 0x48, 0xd3, 0x8c, 0x34, 0x4d, 0x19, 0x8d, 0xc6, 0x9c, 0x9e, 0x9e, 0x72, 0x71, 0xfe, 0x9c, 0xfb, 0xfb, 0x7b, 0x6e, 0x6e, 0xef, 0xe5, 0x3d, 0xab, 0x86, 0xca, 0x91, 0x9c, 0x63, 0xe9, 0x5a, 0x53, 0x23, 0x8b, 0xe8, 0xc5, 0x03, 0x05, 0x7d, 0x24, 0x64, 0x59, 0xa1, 0x36, 0x1b, 0x81, 0x96, 0xe8, 0x6c, 0xfc, 0xc0, 0x25, 0x8a, 0xc4, 0x33, 0x5e, 0x36, 0x05, 0xdf, 0x14, 0x03, 0x9b, 0xcd, 0x8e, 0xd7, 0xaf, 0x2f, 0xd5, 0xa1, 0xed, 0xf1, 0xee, 0xbb, 0x5f, 0x53, 0x81, 0x20, 0xd2, 0x05, 0xc7, 0x71, 0x9f, 0x6f, 0x7f, 0xfb, 0x37, 0x0c, 0x7c, 0x7e, 0x75, 0x75, 0x45, 0x5d, 0xb7, 0x64, 0x59, 0x69, 0x2a, 0x40, 0xdd, 0x8d, 0x6a, 0x16, 0x70, 0x1c, 0xc7, 0x84, 0x0a, 0x52, 0xd3, 0x1b, 0xfc, 0x61, 0x75, 0xd8, 0x75, 0x9d, 0x81, 0x24, 0x93, 0x24, 0xa1, 0x28, 0x33, 0xd5, 0xcd, 0x44, 0x0c, 0xd4, 0x41, 0x38, 0x50, 0xcc, 0x70, 0xcd, 0x62, 0x1d, 0x32, 0x64, 0x30, 0xec, 0x99, 0x99, 0xef, 0x60, 0xf0, 0xa0, 0xf9, 0xd4, 0xa9, 0x50, 0x3f, 0xfa, 0xd1, 0x5f, 0xa1, 0x69, 0x1a, 0x4e, 0x4f, 0x4f, 0xb9, 0xbd, 0x7a, 0x49, 0xe8, 0x3b, 0x4c, 0x46, 0x31, 0x99, 0x6f, 0x29, 0x72, 0x51, 0xc8, 0xd9, 0xc9, 0x94, 0xb2, 0x2c, 0x79, 0xf1, 0x66, 0xc1, 0x64, 0x3a, 0x66, 0x34, 0x9d, 0x10, 0x06, 0x3d, 0xfe, 0xf4, 0xcf, 0x7e, 0xcc, 0x7f, 0xf5, 0x5f, 0xfe, 0xd7, 0xbc, 0x79, 0xf3, 0x86, 0x42, 0x1d, 0xbe, 0x4f, 0x9e, 0x1c, 0x73, 0x7b, 0x7b, 0xcb, 0x1f, 0xfc, 0xc1, 0x1f, 0xf2, 0x97, 0xfe, 0xd2, 0x77, 0xc8, 0x32, 0x29, 0xb8, 0xc6, 0xe3, 0x21, 0xfb, 0x34, 0x33, 0xfc, 0x83, 0xd9, 0x6c, 0xc6, 0x66, 0xb3, 0x31, 0x87, 0xdb, 0x60, 0x30, 0xc0, 0x55, 0x05, 0xdf, 0xa1, 0xcc, 0x43, 0x57, 0xce, 0x7a, 0xa4, 0x54, 0x2a, 0x07, 0x41, 0xcb, 0xc6, 0x14, 0x84, 0x96, 0x25, 0x0f, 0xf0, 0xec, 0x68, 0x62, 0x08, 0x86, 0x41, 0xd0, 0x57, 0xa4, 0x41, 0x8b, 0xbc, 0xd8, 0xe3, 0xb8, 0x12, 0x13, 0x7c, 0x74, 0x34, 0xe5, 0x37, 0x7f, 0xf3, 0xfb, 0xbc, 0xf3, 0xce, 0xdb, 0xdc, 0xdc, 0xdc, 0x50, 0x37, 0x82, 0x48, 0x94, 0x55, 0x6e, 0x9c, 0xd7, 0x3c, 0xcf, 0x63, 0x30, 0xe8, 0x89, 0x46, 0x37, 0xf2, 0xf9, 0xec, 0xb3, 0x05, 0xbf, 0xfa, 0xd5, 0xaf, 0xb0, 0xed, 0x07, 0xc6, 0xf8, 0x21, 0x03, 0x56, 0xfb, 0x14, 0xb8, 0xde, 0xb9, 0x72, 0x53, 0x5b, 0xb0, 0xd9, 0x88, 0xa9, 0xcb, 0x74, 0x3a, 0x35, 0x8e, 0x7e, 0x5f, 0x7e, 0xf9, 0xa5, 0xf1, 0x90, 0x7e, 0xe4, 0x3f, 0xa0, 0x1e, 0xfc, 0x7e, 0x6f, 0x6c, 0xe6, 0xcb, 0xeb, 0xf5, 0x9a, 0x37, 0x6f, 0xde, 0x10, 0xc7, 0x62, 0x8a, 0xb2, 0xdb, 0xed, 0x88, 0xfd, 0x08, 0xdb, 0x96, 0xb9, 0x6a, 0xad, 0xb8, 0x03, 0x69, 0x92, 0x9b, 0xcf, 0xb3, 0x5e, 0x6f, 0xb8, 0xba, 0xba, 0xe2, 0x6e, 0xb1, 0xc2, 0xf7, 0xe5, 0xe0, 0x5e, 0x2e, 0x57, 0xd4, 0x35, 0xcc, 0xe6, 0x33, 0xc3, 0xe0, 0xef, 0xba, 0x9d, 0x99, 0xd1, 0x8b, 0x2d, 0x70, 0x79, 0x10, 0x5f, 0xa9, 0x67, 0x8b, 0x4a, 0x2a, 0xe5, 0xa0, 0x0a, 0x71, 0x8b, 0xfd, 0x5e, 0x88, 0xa2, 0x83, 0xc1, 0x80, 0x5e, 0x4f, 0x52, 0xee, 0x04, 0xba, 0x16, 0x68, 0x77, 0xb5, 0x5a, 0x1d, 0x3c, 0x47, 0x35, 0x65, 0xb9, 0x33, 0xc5, 0x58, 0x10, 0x44, 0x2c, 0xee, 0x97, 0x42, 0x28, 0xf5, 0x2a, 0xc5, 0xcf, 0x19, 0xc9, 0xe6, 0xd6, 0x74, 0x34, 0xb4, 0x9c, 0x9c, 0x9c, 0x18, 0x88, 0x5e, 0xc3, 0x92, 0x7a, 0x63, 0x05, 0xf8, 0xfa, 0x7b, 0x27, 0x32, 0x9a, 0xe9, 0x6a, 0x91, 0xb6, 0xda, 0x1d, 0x59, 0xb6, 0xa3, 0x6e, 0x4a, 0x96, 0xcb, 0x15, 0xab, 0xd5, 0x86, 0xfd, 0x3e, 0x25, 0x4d, 0x73, 0xb3, 0xa9, 0x3b, 0x8e, 0xa7, 0x58, 0xe5, 0xc2, 0x25, 0x0a, 0x02, 0x69, 0x1a, 0x3c, 0xd7, 0x57, 0xc5, 0x88, 0x87, 0xe3, 0x08, 0x37, 0xa0, 0xed, 0x1c, 0xd6, 0xeb, 0x0d, 0xb6, 0xed, 0x72, 0x7a, 0x7a, 0x41, 0x53, 0xdb, 0xe2, 0x89, 0xbe, 0x4e, 0xc4, 0x55, 0x31, 0x96, 0xe7, 0xcf, 0x72, 0x42, 0x82, 0xd0, 0xc7, 0xae, 0x2a, 0xea, 0xa6, 0x66, 0x97, 0x48, 0x77, 0x18, 0x2a, 0xd6, 0x76, 0x5b, 0x55, 0x58, 0xae, 0x03, 0x38, 0xb4, 0xd8, 0x60, 0x21, 0x39, 0x18, 0x41, 0xdf, 0x14, 0x27, 0xfa, 0x30, 0xd1, 0xa4, 0x3c, 0x68, 0x69, 0xea, 0x46, 0x99, 0xac, 0xb8, 0xf8, 0xfe, 0x50, 0xad, 0x5f, 0x5b, 0x49, 0xe3, 0x2a, 0xf3, 0xdf, 0x68, 0x29, 0xa5, 0x46, 0x22, 0xc4, 0xf2, 0x77, 0x44, 0x96, 0x15, 0x06, 0xca, 0x3d, 0x84, 0x9d, 0xf5, 0x7b, 0xea, 0xe7, 0xa8, 0x43, 0x46, 0x01, 0xae, 0x67, 0xe3, 0x39, 0x3a, 0x04, 0x2a, 0xe7, 0xcd, 0x9b, 0x37, 0xd8, 0xb6, 0x83, 0x1f, 0x06, 0x94, 0x95, 0x9c, 0x11, 0xf2, 0x19, 0xc4, 0x4e, 0x7b, 0xb3, 0x6e, 0x08, 0x02, 0xd8, 0x6c, 0x76, 0x6c, 0x36, 0x0d, 0x5f, 0xff, 0xfa, 0x13, 0x76, 0xdb, 0x3d, 0xb7, 0x37, 0x77, 0x4c, 0x27, 0x33, 0x7a, 0x91, 0x4f, 0x99, 0xe5, 0x94, 0x59, 0x49, 0x55, 0x64, 0x04, 0x41, 0x44, 0xd3, 0x48, 0x01, 0x6e, 0x01, 0x45, 0x09, 0x51, 0xd4, 0x9a, 0x66, 0x25, 0x49, 0x12, 0xd2, 0xb4, 0x21, 0x08, 0x72, 0x06, 0x83, 0x01, 0xd0, 0xb1, 0xd9, 0x6c, 0x14, 0xa2, 0x58, 0xe3, 0xd8, 0x1e, 0x8e, 0xed, 0xe1, 0xa9, 0x10, 0xa2, 0xae, 0xa9, 0xcd, 0x48, 0x4b, 0x27, 0xab, 0x69, 0x92, 0xb1, 0xb6, 0x7f, 0xd6, 0x87, 0xaf, 0xde, 0x5f, 0x0f, 0x67, 0xda, 0x8f, 0x46, 0xd2, 0x07, 0x06, 0x34, 0x7a, 0x9d, 0xe9, 0xd7, 0xd5, 0xa3, 0xa0, 0x43, 0x82, 0x67, 0xab, 0xcf, 0xd4, 0xff, 0x08, 0xdc, 0xae, 0x7f, 0x56, 0x94, 0xd9, 0x23, 0xd6, 0xfc, 0x21, 0xc7, 0xe1, 0xb0, 0x8b, 0xd7, 0xe3, 0x38, 0xd7, 0x75, 0x71, 0xa7, 0xd3, 0x29, 0x59, 0x96, 0x92, 0xa4, 0xda, 0x56, 0xb5, 0x52, 0xc6, 0x19, 0xb5, 0x39, 0x00, 0xbe, 0xfa, 0x4b, 0x57, 0x2d, 0x55, 0x5d, 0xb2, 0xdf, 0xef, 0xcc, 0x8c, 0x4f, 0xcf, 0x61, 0x0b, 0xa5, 0x65, 0xbf, 0x38, 0x3d, 0x31, 0xb0, 0xb1, 0x65, 0x89, 0xde, 0x76, 0xbf, 0x4f, 0x95, 0x7f, 0x70, 0x4c, 0xe4, 0xb9, 0x2a, 0x96, 0x52, 0x32, 0xce, 0x5d, 0xd7, 0xa5, 0xaa, 0x6a, 0xd2, 0x54, 0xfe, 0xfb, 0xd6, 0x76, 0xd4, 0x8c, 0xba, 0xa1, 0xeb, 0xe4, 0x21, 0x76, 0x6c, 0x35, 0x8b, 0x6e, 0x60, 0x30, 0x18, 0xaa, 0x48, 0xce, 0x91, 0x99, 0x8f, 0x85, 0xa1, 0xc0, 0xef, 0x45, 0x51, 0x70, 0x7f, 0xf5, 0x46, 0xcd, 0xb7, 0x7d, 0x35, 0x8b, 0x7b, 0xc8, 0xd2, 0xb6, 0x2c, 0x71, 0x1f, 0x12, 0xa8, 0xd8, 0xa2, 0x2c, 0x64, 0x33, 0x9c, 0x4c, 0x26, 0x9c, 0x9f, 0x5f, 0x70, 0x76, 0x76, 0xa6, 0x52, 0xd1, 0x5c, 0xc3, 0xca, 0xdf, 0xab, 0x6b, 0xb4, 0x5e, 0x89, 0xd3, 0x98, 0x3e, 0xc8, 0x9b, 0xba, 0x33, 0x9b, 0x8f, 0xc8, 0x0f, 0x0a, 0xf2, 0xbc, 0xa4, 0x6d, 0xd7, 0xc4, 0xb1, 0xc8, 0x5e, 0xe6, 0xc7, 0x33, 0x95, 0xd3, 0x1d, 0xaa, 0x8d, 0x30, 0xe6, 0xfa, 0xfa, 0x52, 0x75, 0x7c, 0xc2, 0xd6, 0x97, 0xc2, 0xe7, 0xc4, 0x14, 0x24, 0xd3, 0xe9, 0xd4, 0x54, 0xa2, 0x41, 0x10, 0xb0, 0xdb, 0xed, 0xb8, 0xbc, 0xbc, 0x64, 0xa1, 0x62, 0x0a, 0xf5, 0x67, 0x93, 0xca, 0xb2, 0xc1, 0x75, 0x31, 0x95, 0x78, 0x18, 0xc6, 0x44, 0x51, 0x8f, 0x20, 0x68, 0x4d, 0xd4, 0x5f, 0x10, 0x04, 0x8c, 0xc7, 0x0f, 0x44, 0x8a, 0x3c, 0xd9, 0x1b, 0xc8, 0x39, 0x8a, 0x03, 0xce, 0xce, 0xce, 0x78, 0xf2, 0xe4, 0x9c, 0xd1, 0x68, 0x24, 0x1d, 0xc5, 0xfd, 0x82, 0x34, 0xdd, 0x1b, 0xe6, 0x6b, 0x14, 0x85, 0xd0, 0xd9, 0x46, 0x66, 0x61, 0x59, 0x81, 0x21, 0x64, 0xe9, 0xb4, 0xb6, 0x37, 0x97, 0xaf, 0x38, 0x3a, 0x3a, 0xe2, 0x8b, 0x17, 0x9f, 0xe1, 0x79, 0x16, 0x71, 0xec, 0xd3, 0x1f, 0xf8, 0x14, 0x45, 0xc8, 0x76, 0x6b, 0x9b, 0x64, 0xa2, 0xa2, 0xc8, 0xc0, 0x1b, 0x90, 0x24, 0x09, 0xcf, 0xde, 0x7a, 0x87, 0xdd, 0x2e, 0xe1, 0xaf, 0xfc, 0x95, 0x1f, 0xf2, 0xab, 0x5f, 0x7d, 0x42, 0x92, 0x64, 0x0c, 0x46, 0x63, 0xbe, 0xf8, 0xe2, 0x0b, 0xc3, 0xec, 0xde, 0xed, 0x64, 0x36, 0xad, 0x89, 0x2b, 0x5d, 0xd7, 0x11, 0x84, 0x7d, 0x86, 0x83, 0x31, 0x5d, 0x6b, 0x29, 0x6d, 0xbb, 0xf0, 0x0c, 0xb2, 0xb4, 0x60, 0xd0, 0x1f, 0x49, 0x67, 0x5a, 0x3f, 0x78, 0x32, 0x1b, 0x1f, 0x05, 0x05, 0x95, 0x15, 0xa9, 0xf8, 0x9f, 0xdb, 0x36, 0x78, 0x8e, 0x14, 0xa9, 0xae, 0x6d, 0x11, 0x84, 0x1e, 0xc3, 0xe1, 0x10, 0x3f, 0xe8, 0x0c, 0x5c, 0xaf, 0xc9, 0x91, 0xdb, 0x8d, 0xbc, 0xbf, 0x6b, 0xdb, 0x8c, 0x46, 0x23, 0x13, 0x66, 0x54, 0x55, 0x15, 0x58, 0x2d, 0xf7, 0xf7, 0xf7, 0x5c, 0x5f, 0x5f, 0xca, 0xfa, 0x8e, 0x22, 0x9e, 0x3f, 0x7f, 0xce, 0x7c, 0x3e, 0xc7, 0xb6, 0x85, 0xa8, 0x76, 0x79, 0xf5, 0x9a, 0xbb, 0xbb, 0x3b, 0x05, 0xd3, 0xca, 0x3c, 0x5c, 0x77, 0x39, 0x87, 0xe3, 0x1e, 0xcf, 0xf3, 0x78, 0xf9, 0xea, 0x73, 0xba, 0x4e, 0x98, 0xd8, 0x5a, 0xfa, 0x66, 0x59, 0x16, 0x9f, 0x7d, 0xf6, 0x19, 0xbb, 0xdd, 0x4e, 0xc9, 0x73, 0x96, 0x66, 0xc3, 0x19, 0x8f, 0xc7, 0x0c, 0x87, 0xc3, 0x87, 0x8d, 0x01, 0xcf, 0x90, 0xb4, 0x9a, 0xa6, 0x23, 0xcf, 0x4b, 0x86, 0xc3, 0x31, 0xbd, 0xde, 0x80, 0xa2, 0xa8, 0xa8, 0x73, 0xd9, 0x90, 0xc6, 0xa3, 0x09, 0xfb, 0x2c, 0xa5, 0xaa, 0x1e, 0x9e, 0x0d, 0xc7, 0x71, 0x28, 0xca, 0x8a, 0xba, 0x6a, 0x0d, 0x14, 0xee, 0x38, 0x16, 0x93, 0xc9, 0x58, 0x79, 0xb2, 0xb7, 0xec, 0xf6, 0x09, 0x45, 0x99, 0x1b, 0x39, 0xa6, 0x8c, 0xb7, 0x64, 0xef, 0xa8, 0xca, 0x46, 0x5d, 0xf7, 0xce, 0x74, 0xe7, 0xb6, 0xe5, 0x9a, 0x6e, 0x49, 0x50, 0xa1, 0xc6, 0x6c, 0x52, 0x7a, 0xef, 0xd0, 0x08, 0xd9, 0x21, 0xd1, 0x53, 0x13, 0xae, 0xf4, 0xf7, 0xd4, 0xe9, 0x63, 0x71, 0xdc, 0x57, 0xa6, 0x49, 0xb9, 0x9a, 0xb9, 0xf6, 0xf1, 0xbc, 0xc0, 0xcc, 0xde, 0x75, 0xca, 0xa2, 0xf0, 0x70, 0x64, 0x73, 0x16, 0x19, 0xea, 0xc8, 0x10, 0xed, 0x2c, 0xe5, 0x88, 0x18, 0xc7, 0x21, 0x8e, 0x0b, 0xfb, 0x7d, 0x42, 0x59, 0xe6, 0xa2, 0x96, 0x50, 0x9e, 0xe9, 0x9a, 0xa3, 0xa1, 0x8b, 0x57, 0x4d, 0x3a, 0xd3, 0xfe, 0x0d, 0x16, 0x3a, 0xca, 0xd2, 0x35, 0xf3, 0xec, 0x5e, 0xaf, 0x47, 0x56, 0x08, 0x39, 0xd3, 0xb6, 0x6c, 0x7a, 0xf1, 0x88, 0xe1, 0x50, 0xd4, 0x39, 0xae, 0xe2, 0x2d, 0x34, 0x4e, 0x20, 0xff, 0xee, 0x78, 0xf4, 0xfa, 0x63, 0x6c, 0x1b, 0xb3, 0x97, 0xda, 0x8e, 0xa8, 0x05, 0x74, 0x81, 0xde, 0xe8, 0xf1, 0x10, 0x62, 0xdf, 0x1c, 0xf9, 0x01, 0x65, 0x2a, 0x73, 0x77, 0x49, 0xf5, 0xea, 0x8c, 0xd9, 0x90, 0xf1, 0x15, 0xaf, 0x6a, 0x81, 0xc1, 0x51, 0x7f, 0x6f, 0x2b, 0x36, 0x9b, 0x2d, 0x75, 0xad, 0x73, 0xc2, 0x6b, 0x13, 0x9f, 0x3c, 0x1e, 0x8f, 0x0d, 0x0a, 0xa2, 0x89, 0x98, 0x72, 0x40, 0xa6, 0xa6, 0xa0, 0x3f, 0x8c, 0x30, 0x2e, 0xcb, 0x92, 0xfe, 0x70, 0x80, 0xeb, 0xda, 0xf8, 0xae, 0x98, 0xab, 0x04, 0xa1, 0x87, 0xe7, 0xb8, 0x4a, 0x9a, 0x5c, 0x70, 0x77, 0xbb, 0xa1, 0xae, 0x1f, 0xc6, 0x48, 0x9b, 0xcd, 0x86, 0x7d, 0x9a, 0x71, 0x7b, 0x7b, 0xcf, 0x6a, 0x05, 0xd3, 0x89, 0xa0, 0x83, 0xfb, 0x7d, 0xae, 0x0c, 0x63, 0x64, 0x0f, 0xfa, 0xe2, 0x8b, 0x17, 0x6c, 0xb7, 0x5b, 0x8e, 0x8f, 0x26, 0x82, 0xbe, 0x58, 0x1e, 0xaf, 0x5e, 0xbd, 0xa1, 0xd7, 0x8b, 0x58, 0xaf, 0x0b, 0x9a, 0xa6, 0xc5, 0x76, 0x94, 0xd5, 0x71, 0xe0, 0xd1, 0x34, 0xad, 0x6a, 0x46, 0x6b, 0x31, 0x24, 0xf3, 0x3c, 0xb3, 0x8e, 0xee, 0xee, 0x6e, 0x89, 0xa2, 0x98, 0xb2, 0xa8, 0x09, 0x43, 0x17, 0xdb, 0x16, 0x33, 0x1d, 0xdb, 0x76, 0xf1, 0x6c, 0xeb, 0x11, 0xb7, 0x46, 0xa3, 0xb5, 0x1a, 0x49, 0xd0, 0xdc, 0x0b, 0x8d, 0x58, 0x1c, 0x9a, 0xbc, 0xb8, 0xae, 0x4b, 0xd5, 0x56, 0xe2, 0xbc, 0xa7, 0x7e, 0xcb, 0xda, 0x68, 0xcc, 0xfa, 0xd5, 0xb3, 0x7e, 0x31, 0x0c, 0x72, 0x1e, 0x05, 0xb3, 0x34, 0x0d, 0x74, 0x0d, 0xbf, 0x76, 0x90, 0x1f, 0x12, 0xeb, 0xbe, 0x2a, 0x87, 0xfd, 0xea, 0xaf, 0xcd, 0x66, 0x63, 0x54, 0x4b, 0xe2, 0x0d, 0x9f, 0xe3, 0x6e, 0x96, 0x2b, 0xb0, 0x3a, 0x21, 0xa8, 0xcd, 0x8e, 0x64, 0x21, 0x05, 0x32, 0x47, 0xda, 0x6e, 0xb7, 0x74, 0x8d, 0xe2, 0xfe, 0xb7, 0x2d, 0x5d, 0xd3, 0xd0, 0xb4, 0x2d, 0x74, 0xf2, 0xe2, 0xd1, 0x28, 0x52, 0xac, 0xd7, 0xd2, 0x74, 0x17, 0x96, 0x65, 0xf1, 0xec, 0xd9, 0x5b, 0xbc, 0xf7, 0xde, 0x7b, 0x44, 0xbe, 0xa3, 0x74, 0x83, 0x3a, 0xf6, 0x2f, 0x31, 0xc9, 0x34, 0x5d, 0x0b, 0x91, 0xef, 0x30, 0x9b, 0xce, 0x8d, 0xb4, 0x47, 0x3c, 0xa3, 0x6b, 0xc5, 0x0c, 0xf7, 0x69, 0x6c, 0x94, 0x3c, 0xc7, 0xa2, 0x2c, 0x65, 0xf1, 0xd5, 0x4e, 0x6b, 0x3a, 0x95, 0x7d, 0x9a, 0x32, 0x9f, 0xcf, 0xf1, 0x7d, 0x61, 0x8c, 0xaf, 0xd7, 0x6b, 0xc3, 0x66, 0xde, 0x6c, 0x36, 0x14, 0x95, 0x38, 0x15, 0x05, 0xbe, 0x38, 0xf0, 0x64, 0xd9, 0x43, 0xc0, 0x88, 0xef, 0x87, 0x5c, 0x5c, 0xcc, 0xd5, 0x62, 0x2b, 0xd8, 0x6d, 0x13, 0x06, 0x03, 0x87, 0xf1, 0x78, 0x4a, 0xbf, 0x2f, 0xd1, 0x77, 0x75, 0x65, 0xb3, 0xdd, 0x6e, 0x59, 0xad, 0x36, 0x04, 0xc1, 0x2d, 0x9f, 0x7e, 0xfa, 0x19, 0x55, 0xd5, 0x50, 0x56, 0x15, 0xcf, 0x9e, 0xbd, 0xc5, 0x7c, 0x22, 0xd9, 0xce, 0x97, 0x97, 0x97, 0xac, 0xd7, 0x5b, 0x35, 0x37, 0x7f, 0xf0, 0x06, 0xd6, 0x30, 0xd5, 0x68, 0x34, 0x61, 0x3c, 0x9a, 0x2a, 0x3f, 0xf7, 0x82, 0xed, 0x76, 0xcb, 0x76, 0x1b, 0xf0, 0xee, 0x7b, 0x6f, 0x9b, 0xcd, 0x42, 0xf2, 0xe0, 0xb7, 0x2a, 0xc2, 0x31, 0x67, 0x3a, 0x9d, 0xb2, 0xdd, 0x6e, 0x0d, 0x5b, 0x5b, 0x1c, 0xe7, 0x76, 0x86, 0x45, 0x5f, 0x96, 0x25, 0xb3, 0xe9, 0x8c, 0x30, 0x0c, 0x0d, 0x9b, 0x57, 0x57, 0x69, 0xba, 0x2b, 0xc9, 0xf3, 0x9c, 0xd9, 0x6c, 0x06, 0xc0, 0xcd, 0xcd, 0x0d, 0xdb, 0xed, 0xd6, 0xcc, 0xc2, 0xf4, 0x21, 0x17, 0x45, 0xd2, 0x91, 0x5f, 0x3c, 0x39, 0xe3, 0xed, 0xb7, 0xdf, 0x96, 0xce, 0x77, 0xbf, 0xe7, 0xf6, 0xf6, 0x56, 0x2d, 0x26, 0xe7, 0x40, 0xea, 0xd6, 0x9a, 0x8a, 0x57, 0x36, 0x49, 0x8b, 0xae, 0x6b, 0xb9, 0xbd, 0xbd, 0x25, 0x0c, 0x43, 0xce, 0xce, 0x4f, 0xf8, 0x47, 0xff, 0xe8, 0x7f, 0xe6, 0x1f, 0xfe, 0xc3, 0xff, 0x81, 0xeb, 0xeb, 0x6b, 0xaa, 0x32, 0xa7, 0xa9, 0x2b, 0x7c, 0x2f, 0x24, 0x1e, 0x8d, 0xe8, 0xc5, 0x81, 0x21, 0xde, 0xac, 0x56, 0x2d, 0x69, 0xd9, 0xf1, 0xfe, 0xfb, 0xef, 0xf3, 0xea, 0xcd, 0x95, 0x7a, 0x70, 0x32, 0x16, 0x8b, 0x05, 0xb7, 0xb7, 0xf7, 0xe4, 0xe5, 0x0b, 0xda, 0x0e, 0xd4, 0x74, 0xc7, 0x8c, 0x1f, 0x06, 0xc3, 0x3e, 0xcb, 0xe5, 0x92, 0x5e, 0xdc, 0xa3, 0x2c, 0x3b, 0x3e, 0xf9, 0xe4, 0x53, 0xde, 0x7e, 0xfb, 0x2d, 0x13, 0x55, 0x98, 0xa6, 0x29, 0x6f, 0xbd, 0xf5, 0x16, 0x2f, 0x5f, 0xbe, 0xe4, 0xfc, 0x78, 0xfe, 0x88, 0xd4, 0x73, 0x08, 0xb9, 0xd7, 0x75, 0x2d, 0xc3, 0xb4, 0x03, 0xdd, 0xbe, 0xcc, 0x08, 0x3b, 0xfa, 0x03, 0x29, 0x50, 0x5c, 0xaf, 0xe2, 0xed, 0xb7, 0xdf, 0x65, 0xb5, 0x5a, 0xf1, 0xe7, 0x7f, 0xfe, 0xe7, 0x94, 0x65, 0xcd, 0x93, 0x27, 0x4f, 0x38, 0x39, 0x3e, 0x63, 0x38, 0x1c, 0x32, 0x9b, 0x4e, 0x69, 0xdb, 0x96, 0xbb, 0xdb, 0x5b, 0x96, 0xcb, 0x7b, 0x6e, 0x6e, 0x6e, 0xf0, 0x3c, 0x87, 0x38, 0x8c, 0x28, 0xf3, 0x82, 0xef, 0x7e, 0xf7, 0xbb, 0xd2, 0xb5, 0xd9, 0x28, 0x97, 0xc5, 0x92, 0xc5, 0x7d, 0x45, 0x53, 0xd5, 0xf4, 0xa2, 0x88, 0xfe, 0xc9, 0x91, 0xa4, 0xf2, 0xa9, 0x03, 0xe8, 0xf8, 0xf8, 0x98, 0x28, 0x8a, 0xb8, 0xbb, 0xbb, 0x63, 0xbf, 0xdf, 0x33, 0x9f, 0xcf, 0x0d, 0x09, 0x2e, 0x49, 0x12, 0x13, 0x27, 0xec, 0xba, 0x2e, 0x6f, 0xbd, 0xf5, 0x16, 0xbb, 0x9d, 0x8c, 0x62, 0xee, 0xee, 0xee, 0x1e, 0xcd, 0xe7, 0x8c, 0x34, 0x0b, 0x81, 0xe8, 0xb5, 0x03, 0x95, 0x66, 0x81, 0xeb, 0xf0, 0x1d, 0xef, 0x80, 0x91, 0xad, 0x99, 0xdb, 0xb3, 0xd9, 0x8c, 0xf5, 0x7a, 0xcd, 0x7a, 0xbd, 0xe5, 0x8b, 0x2f, 0xae, 0xe4, 0x79, 0xaa, 0xc4, 0x74, 0xe5, 0xe6, 0x66, 0xc9, 0xf9, 0xf9, 0x09, 0x9e, 0xd7, 0x72, 0x79, 0x7d, 0xc7, 0x60, 0x28, 0xb2, 0xc7, 0x28, 0x94, 0x4e, 0xf2, 0xfe, 0x7e, 0x8f, 0xe7, 0x59, 0xf4, 0x7b, 0xb2, 0x86, 0xf4, 0xac, 0x55, 0x6f, 0x4e, 0x87, 0xd0, 0xb9, 0xe3, 0x38, 0x24, 0xeb, 0x9d, 0x21, 0x63, 0xe9, 0x43, 0x48, 0x1f, 0xe0, 0x55, 0x55, 0x29, 0x58, 0xbd, 0x79, 0x94, 0x79, 0x7d, 0x48, 0x02, 0xd4, 0x07, 0xa7, 0xb6, 0xcd, 0x3c, 0xec, 0xb0, 0xe6, 0xf3, 0x39, 0xa3, 0x91, 0xb0, 0xe4, 0x35, 0x51, 0xf0, 0x50, 0xa2, 0x05, 0xd0, 0xeb, 0x0d, 0x18, 0x8d, 0x06, 0x6c, 0x77, 0x0e, 0x49, 0xb2, 0xe3, 0xfa, 0xe5, 0x1b, 0x6e, 0x6e, 0xae, 0x88, 0xa2, 0x80, 0xa2, 0xcc, 0xb8, 0xd9, 0x5e, 0x32, 0x9b, 0xcd, 0x1e, 0xa9, 0x7d, 0x0e, 0x59, 0xd1, 0x0f, 0x6b, 0xab, 0x36, 0xd0, 0xaa, 0x96, 0xca, 0x4d, 0xc6, 0x33, 0xbc, 0x0c, 0x95, 0x03, 0x2f, 0x61, 0x20, 0xfb, 0x5d, 0x42, 0x1c, 0xf5, 0x18, 0x8d, 0x46, 0x58, 0x96, 0x43, 0x56, 0x4b, 0x38, 0xd0, 0x66, 0x53, 0xd0, 0x75, 0x96, 0xe2, 0x31, 0x55, 0xf8, 0xbe, 0xac, 0x47, 0xec, 0x82, 0x3c, 0x4f, 0x0f, 0xe6, 0xb9, 0x4a, 0x82, 0xd6, 0xa9, 0xec, 0x04, 0x5c, 0x73, 0xdf, 0xe2, 0x58, 0xf6, 0xd5, 0xc1, 0xb0, 0x67, 0x24, 0x99, 0x81, 0xe7, 0x1b, 0xd2, 0x5b, 0xd7, 0x35, 0x64, 0x99, 0x1c, 0xd2, 0xfa, 0xba, 0x05, 0x41, 0xcf, 0x28, 0x5f, 0xf4, 0x68, 0x47, 0x17, 0x4f, 0x7a, 0xe4, 0x11, 0x45, 0x91, 0xb2, 0xde, 0x1d, 0x19, 0xf2, 0xa4, 0x66, 0x5f, 0x5b, 0xce, 0x03, 0xaa, 0x25, 0xf9, 0x18, 0x2e, 0x51, 0xe0, 0x1b, 0x8e, 0xc2, 0xf1, 0xf1, 0x31, 0x2f, 0x5f, 0xbe, 0x92, 0xf5, 0x9c, 0x64, 0x2c, 0x16, 0x4b, 0xf6, 0xa9, 0x48, 0x38, 0xdf, 0x79, 0x67, 0x48, 0x55, 0xca, 0x73, 0x71, 0x71, 0x31, 0x50, 0xcf, 0xd1, 0xbd, 0x3a, 0x2f, 0xe0, 0x8b, 0x2f, 0xde, 0xd0, 0x35, 0xa5, 0x90, 0x36, 0xc3, 0x80, 0xb6, 0x95, 0x7d, 0x5b, 0xf6, 0x1f, 0x0b, 0xc7, 0xb1, 0x18, 0xf7, 0x1c, 0x46, 0xa3, 0x89, 0xec, 0x89, 0x59, 0x41, 0x18, 0x06, 0xf4, 0xa7, 0x82, 0xd6, 0x6e, 0x37, 0x32, 0x7e, 0x5b, 0x2c, 0x16, 0x72, 0x3d, 0xca, 0x9d, 0x52, 0x6d, 0x3c, 0x10, 0x28, 0x1d, 0xdf, 0x31, 0xba, 0x78, 0x4d, 0x28, 0xd4, 0x6e, 0x9b, 0xdb, 0xed, 0xd6, 0x70, 0x06, 0x0e, 0x6d, 0x9d, 0x0f, 0x03, 0x59, 0x7c, 0xc5, 0xc7, 0xfa, 0x6a, 0xa2, 0x9a, 0x2e, 0x0a, 0xb4, 0x09, 0xce, 0x61, 0x96, 0xb9, 0x7e, 0xd6, 0xba, 0xae, 0xc3, 0x77, 0x83, 0x5f, 0x83, 0xd9, 0x0f, 0x49, 0x9b, 0x41, 0xe8, 0x3c, 0xca, 0xe9, 0xf8, 0x2a, 0xd3, 0x7d, 0x3a, 0x9d, 0x1a, 0x94, 0x51, 0xa7, 0xbe, 0x59, 0xff, 0xcd, 0xdf, 0xfa, 0x4f, 0xba, 0x5e, 0x2c, 0xe6, 0x0f, 0x1a, 0x3e, 0xca, 0xf3, 0x52, 0x2d, 0xb4, 0x95, 0xaa, 0xcc, 0xa0, 0xed, 0x64, 0x36, 0xad, 0xe7, 0x17, 0x55, 0x5d, 0x10, 0x46, 0xa3, 0x03, 0x26, 0xf1, 0x43, 0x45, 0xdc, 0xef, 0xf7, 0x05, 0xca, 0x2a, 0x1a, 0xf5, 0x3a, 0x1b, 0x03, 0x95, 0xfa, 0x81, 0xcb, 0x74, 0x3a, 0x65, 0x3a, 0x9d, 0xd2, 0x3a, 0x2d, 0xbb, 0x9d, 0x54, 0xbe, 0x92, 0x94, 0xe3, 0x4b, 0x27, 0x64, 0x4b, 0xc5, 0xb7, 0xde, 0x25, 0xea, 0xcb, 0xcb, 0x17, 0xf6, 0xbd, 0x90, 0xd9, 0x6c, 0xce, 0x60, 0x20, 0x84, 0x99, 0xfb, 0xc5, 0x15, 0xb6, 0x6d, 0xb3, 0x5c, 0x2e, 0x55, 0xbc, 0xa5, 0xf7, 0xe8, 0xa6, 0x38, 0xb6, 0x27, 0x3a, 0xd2, 0x3c, 0x51, 0x17, 0x55, 0x20, 0x8e, 0xc9, 0x64, 0xc2, 0x7c, 0x3e, 0xe3, 0xc9, 0x93, 0x23, 0x8a, 0xa2, 0x62, 0xb5, 0x5a, 0xb1, 0x5e, 0x6d, 0xa9, 0xaa, 0x46, 0xa5, 0x07, 0xc9, 0x03, 0x7c, 0x73, 0xbd, 0x92, 0xc5, 0xb1, 0xdf, 0xb1, 0xd9, 0x6c, 0x71, 0xbc, 0x00, 0xdb, 0x96, 0x99, 0x56, 0xbf, 0xdf, 0x27, 0xdd, 0xca, 0xe8, 0x40, 0xd8, 0x90, 0xb6, 0x21, 0xa7, 0xe8, 0xb9, 0xf5, 0x78, 0x3c, 0x66, 0x3e, 0x9f, 0xa9, 0xb9, 0xb7, 0x5c, 0xc3, 0x38, 0x96, 0x88, 0xcc, 0xe1, 0x70, 0x48, 0xd3, 0x4a, 0x95, 0xbf, 0x5e, 0xaf, 0x0d, 0x09, 0x44, 0xeb, 0x91, 0xb3, 0x2c, 0x7b, 0xc4, 0xdc, 0x5e, 0x2e, 0x97, 0xdc, 0xdc, 0xdc, 0x98, 0x82, 0x68, 0xbb, 0xdd, 0xd2, 0x74, 0x96, 0xd9, 0x04, 0xb5, 0xc6, 0x55, 0x9b, 0xbf, 0xb8, 0xae, 0x4b, 0x2f, 0x8a, 0x38, 0x3f, 0x3f, 0xe7, 0xfe, 0xfe, 0xde, 0xfc, 0xdb, 0x64, 0x32, 0x61, 0xb5, 0x5a, 0x49, 0x01, 0xb1, 0xba, 0xe7, 0xf9, 0xf3, 0xe7, 0xbc, 0xf7, 0xde, 0x7b, 0x46, 0xdf, 0xbc, 0x5a, 0xad, 0x4c, 0xe6, 0xb9, 0xa5, 0xa0, 0x5a, 0xdd, 0x41, 0x25, 0x49, 0xc2, 0xc9, 0xc9, 0x09, 0x17, 0x17, 0x17, 0xe4, 0x79, 0xce, 0xd5, 0x9d, 0x48, 0xb7, 0xfa, 0xfd, 0x3e, 0xff, 0xe6, 0xff, 0xfc, 0xb7, 0xb8, 0xae, 0xc5, 0xdf, 0xfb, 0x6f, 0xff, 0x2e, 0x96, 0x65, 0xb1, 0x5a, 0xad, 0xb8, 0x5e, 0x7f, 0xc6, 0x64, 0x3c, 0xa3, 0xad, 0x5a, 0xba, 0xce, 0xe2, 0xe4, 0xe4, 0x94, 0xfd, 0x76, 0x4b, 0x10, 0x3a, 0xdc, 0xdc, 0x5c, 0xd1, 0x9f, 0x7e, 0x13, 0xc7, 0x71, 0xb8, 0xbf, 0xbf, 0xe7, 0xf3, 0xcf, 0x5f, 0xf0, 0xc7, 0x7f, 0xfc, 0x21, 0x51, 0x24, 0x2e, 0x63, 0x5d, 0xd7, 0xd1, 0xda, 0xc2, 0x19, 0x38, 0x3f, 0x3f, 0x55, 0x32, 0xb0, 0x1b, 0x76, 0xbb, 0xcd, 0xc3, 0x2c, 0xaf, 0x89, 0xb9, 0xbf, 0xbf, 0x35, 0xb2, 0x45, 0xc7, 0xb1, 0x58, 0xaf, 0xd7, 0x0c, 0x47, 0x7d, 0x81, 0xc8, 0x3a, 0xe7, 0x20, 0xcb, 0x58, 0x3a, 0x3c, 0xcf, 0x77, 0xcd, 0xf5, 0x69, 0x6b, 0xc5, 0x3d, 0x70, 0x2d, 0x86, 0xc3, 0x3e, 0x65, 0x59, 0x70, 0xf1, 0xe4, 0x8c, 0xf9, 0x7c, 0xce, 0x74, 0x3a, 0x66, 0x3c, 0x89, 0x48, 0xd3, 0x94, 0xbb, 0xbb, 0x85, 0xc9, 0xfa, 0x16, 0xb8, 0x55, 0x1e, 0xea, 0xc9, 0x68, 0xaa, 0x34, 0xc6, 0x96, 0x39, 0x80, 0x8a, 0xa2, 0x60, 0x38, 0x1c, 0xf2, 0x8d, 0x6f, 0x7c, 0x83, 0x9e, 0x9a, 0x61, 0x6e, 0x36, 0x1b, 0x63, 0x5e, 0x73, 0xc8, 0xd3, 0xf0, 0x95, 0xbc, 0x4d, 0x6f, 0x06, 0x51, 0x14, 0x19, 0xd9, 0x58, 0x96, 0x49, 0xb4, 0xae, 0xd6, 0xe0, 0x6b, 0x29, 0x9a, 0x7e, 0xb6, 0xee, 0xef, 0xef, 0xc1, 0x6a, 0x95, 0x9c, 0x50, 0x0a, 0x82, 0x8b, 0x8b, 0x0b, 0xa5, 0xf5, 0xbf, 0x62, 0xb3, 0xd9, 0x30, 0x19, 0xcf, 0x4d, 0x41, 0x28, 0x70, 0x6c, 0x64, 0x36, 0xe6, 0x2c, 0xcb, 0xd8, 0x6f, 0x77, 0xd4, 0x6d, 0x83, 0xeb, 0x7a, 0x04, 0x7e, 0x8f, 0xb2, 0x6a, 0xd8, 0x6c, 0x76, 0x6c, 0xf7, 0x42, 0x50, 0x5d, 0xae, 0x36, 0x6a, 0x7d, 0x35, 0x58, 0xae, 0x83, 0xe7, 0xfa, 0xdc, 0xde, 0x2f, 0x58, 0x2d, 0x37, 0x82, 0x16, 0x00, 0xdb, 0xed, 0x4e, 0x1d, 0x94, 0x1e, 0x55, 0xd9, 0xa8, 0x70, 0x10, 0xd7, 0x74, 0x84, 0x65, 0xd9, 0x31, 0x1a, 0x29, 0xe9, 0x64, 0x92, 0x33, 0x9f, 0xcf, 0xd5, 0xfc, 0x3f, 0xc6, 0xaa, 0xf7, 0xf8, 0xbe, 0x6f, 0xb8, 0x03, 0x9a, 0x78, 0xd9, 0xb6, 0x2d, 0x8b, 0xc5, 0xc2, 0x1c, 0x2a, 0xfa, 0xc0, 0xd1, 0xb0, 0xa7, 0xa8, 0x58, 0x0a, 0xc2, 0xa0, 0x67, 0x0e, 0x17, 0x0d, 0x65, 0x5a, 0x96, 0xc5, 0x7c, 0x3e, 0xe7, 0xfc, 0xfc, 0x1c, 0xcf, 0x17, 0xd3, 0xa0, 0xf5, 0x7a, 0x49, 0x1c, 0xc7, 0xbc, 0xf5, 0xf6, 0x33, 0x2c, 0xcb, 0xe2, 0xfd, 0xf7, 0xdf, 0x17, 0x8f, 0x87, 0x30, 0x50, 0x1c, 0x81, 0x2d, 0x37, 0x37, 0x37, 0xbc, 0xf8, 0xf2, 0x73, 0xae, 0xaf, 0xaf, 0xb1, 0x2c, 0x8b, 0x7e, 0x3f, 0x26, 0xab, 0x85, 0xd0, 0x95, 0xa5, 0xf2, 0x7c, 0x1f, 0x1d, 0x1d, 0x93, 0xec, 0x33, 0x96, 0xcb, 0x25, 0xe3, 0xf1, 0x84, 0xa2, 0xdc, 0x72, 0x72, 0x72, 0xa2, 0x9a, 0x80, 0x3e, 0xaf, 0x5f, 0x5f, 0x1a, 0x7e, 0x43, 0x59, 0xd4, 0x58, 0xb6, 0xdc, 0xff, 0xfb, 0xbb, 0x85, 0xda, 0x5f, 0x03, 0x2c, 0xcb, 0x61, 0xb1, 0x58, 0x30, 0x1e, 0x8f, 0x79, 0x71, 0x79, 0x6f, 0x3c, 0x0a, 0x5c, 0xd7, 0xe5, 0xe4, 0xe4, 0x58, 0x9c, 0x14, 0x91, 0xb0, 0xa9, 0x0e, 0x39, 0x3c, 0xfb, 0x7d, 0x21, 0x1d, 0xde, 0xdd, 0xdd, 0x48, 0x8e, 0x77, 0x18, 0x8a, 0x55, 0x76, 0x55, 0x32, 0x52, 0xe6, 0x57, 0x5a, 0x6f, 0xff, 0x20, 0xbf, 0x6d, 0x59, 0xde, 0x5e, 0x99, 0x66, 0x49, 0x1b, 0x42, 0x6d, 0x36, 0x1b, 0x86, 0x43, 0xf1, 0x42, 0xe8, 0x10, 0xcf, 0x83, 0xc1, 0x60, 0x60, 0x10, 0x25, 0x69, 0x7c, 0x54, 0x9a, 0xe1, 0x5e, 0xa0, 0xf1, 0x7e, 0xbf, 0xcf, 0xd9, 0xd9, 0x99, 0xd9, 0x97, 0xf4, 0x7b, 0x78, 0x8e, 0xcc, 0xd1, 0x1d, 0xc7, 0x23, 0x2f, 0x4b, 0x76, 0x49, 0x42, 0x96, 0xe7, 0x74, 0x2a, 0xca, 0xb9, 0x69, 0x45, 0x71, 0xb2, 0x53, 0x06, 0x41, 0x81, 0xab, 0x4c, 0x61, 0xd2, 0x4c, 0xc6, 0xb6, 0x71, 0x6c, 0xa2, 0xa7, 0xb5, 0xfe, 0x7b, 0x38, 0x1c, 0x1a, 0x0e, 0xcc, 0xfd, 0xfd, 0x92, 0x77, 0xde, 0x79, 0xc7, 0x3c, 0x43, 0xe2, 0x58, 0x58, 0x72, 0x74, 0x74, 0xc4, 0xdd, 0xdd, 0x1d, 0x51, 0x60, 0x71, 0x79, 0x79, 0x8d, 0xe7, 0x39, 0x84, 0x61, 0x2c, 0xe8, 0xab, 0xed, 0x3d, 0xc8, 0x12, 0x2b, 0x5b, 0x91, 0xfb, 0x72, 0xc2, 0x30, 0x56, 0x7b, 0xd5, 0xc0, 0xec, 0x85, 0x2d, 0xf5, 0xa3, 0xf4, 0x34, 0x7d, 0x70, 0x1e, 0x86, 0xac, 0x68, 0x64, 0xe2, 0xab, 0xf1, 0xa7, 0x4d, 0xd3, 0xe0, 0x3b, 0xb6, 0x92, 0x6f, 0x0a, 0xdc, 0xaf, 0xd5, 0x02, 0x5a, 0x8d, 0xa2, 0xd1, 0x0f, 0xfd, 0xfa, 0x9a, 0x3c, 0xaa, 0x67, 0xde, 0xd8, 0xad, 0x29, 0x52, 0xeb, 0xba, 0x51, 0x08, 0x79, 0x67, 0x22, 0x96, 0xab, 0xb2, 0x79, 0xd4, 0x91, 0x1f, 0x32, 0xf2, 0xf5, 0x28, 0xf5, 0xab, 0xb2, 0x3a, 0x77, 0x36, 0x9b, 0x71, 0x72, 0x7c, 0x46, 0x51, 0x14, 0x46, 0xf3, 0xac, 0xad, 0x24, 0x1f, 0x4c, 0xe7, 0x1b, 0xd3, 0xd9, 0x38, 0x8e, 0x32, 0x7c, 0x68, 0x5d, 0xf6, 0x49, 0x66, 0xec, 0xeb, 0xf4, 0x2c, 0x6e, 0x38, 0x1c, 0x9a, 0x39, 0xe6, 0xfd, 0xd5, 0x82, 0xba, 0x2e, 0x0d, 0x6b, 0x50, 0xa0, 0x18, 0xe7, 0xc1, 0xa7, 0xd6, 0x96, 0x2a, 0xe3, 0x78, 0x7e, 0x82, 0x65, 0x39, 0xec, 0xf7, 0x29, 0xdb, 0xcd, 0x9e, 0xed, 0x66, 0x45, 0x9e, 0x17, 0x6c, 0x93, 0x54, 0x65, 0x6d, 0x0f, 0xf0, 0xdc, 0x80, 0x5e, 0x6f, 0x60, 0x52, 0xcb, 0xf6, 0xbb, 0xd4, 0x2c, 0x7e, 0xcd, 0x44, 0xd5, 0x0b, 0x59, 0xde, 0xab, 0x22, 0xcf, 0xc4, 0xec, 0x43, 0x6b, 0x77, 0x9b, 0xa6, 0x32, 0x5a, 0xdc, 0x20, 0x90, 0x2e, 0x7d, 0xbf, 0x4f, 0x59, 0x2e, 0xd6, 0x66, 0x2e, 0x3d, 0x99, 0x4c, 0x39, 0x9a, 0x09, 0x51, 0xe4, 0xdd, 0x77, 0xdf, 0xe5, 0xee, 0xee, 0x4e, 0x49, 0xb5, 0x32, 0x7a, 0x03, 0x9b, 0xba, 0x2e, 0xc8, 0x8b, 0x82, 0x34, 0xdd, 0x43, 0x53, 0x90, 0x67, 0xa5, 0x81, 0xe2, 0x5c, 0xd7, 0x57, 0x33, 0x68, 0x61, 0xe3, 0xbe, 0xf3, 0xce, 0x5b, 0x86, 0xa8, 0x52, 0x56, 0x05, 0xc3, 0xe1, 0x80, 0xf9, 0x7c, 0x46, 0xd7, 0x75, 0xbc, 0x7e, 0xf3, 0xd2, 0x98, 0x4a, 0xe8, 0xf1, 0x46, 0xbf, 0xdf, 0x37, 0x9d, 0xb8, 0x74, 0x49, 0x6b, 0x33, 0xa7, 0xd1, 0x86, 0x21, 0xc3, 0xe1, 0xd0, 0x2c, 0x18, 0x2f, 0x0c, 0xf0, 0x7c, 0x8f, 0xb8, 0x17, 0x32, 0x18, 0xf6, 0xcc, 0x3d, 0xd3, 0xc4, 0x95, 0x74, 0xb7, 0xa7, 0xae, 0x25, 0x6b, 0xbd, 0x2c, 0x73, 0xf2, 0x3c, 0xa5, 0xae, 0x95, 0xbc, 0xc1, 0xb5, 0x79, 0xfa, 0xf4, 0x29, 0x4f, 0x9f, 0x3e, 0x65, 0x30, 0x10, 0x44, 0x42, 0x5f, 0xc7, 0xb2, 0x2c, 0x59, 0xaf, 0xd7, 0x5c, 0xbe, 0x7c, 0x49, 0xaf, 0xd7, 0x53, 0xd6, 0xb3, 0x9d, 0xe9, 0xfc, 0x34, 0xf1, 0x49, 0x1b, 0x62, 0xc4, 0x41, 0xc8, 0x76, 0x0b, 0xff, 0xe0, 0x1f, 0xfc, 0x1d, 0xb6, 0xfb, 0x1d, 0xa3, 0x81, 0x54, 0xf4, 0x83, 0xa3, 0x0f, 0xa8, 0xeb, 0x96, 0xd5, 0x72, 0xcd, 0x72, 0xb1, 0xa2, 0x2a, 0xaf, 0xb9, 0xbd, 0xbd, 0x66, 0x7e, 0x3c, 0xa3, 0x69, 0x1c, 0x7e, 0xf5, 0xab, 0x5f, 0x19, 0x29, 0xde, 0xe5, 0xe5, 0x35, 0x83, 0x01, 0xf8, 0x7e, 0xf0, 0x20, 0x59, 0x0a, 0x23, 0x35, 0x86, 0x69, 0x54, 0xa8, 0x87, 0x67, 0xe6, 0xfb, 0xb6, 0x6d, 0x93, 0x6c, 0x6a, 0x03, 0xa9, 0x26, 0xc9, 0x0e, 0xd7, 0xf5, 0x99, 0x1d, 0x4d, 0x18, 0x0c, 0x04, 0xca, 0xd7, 0x61, 0x14, 0x9e, 0xe7, 0xd1, 0xeb, 0x45, 0x04, 0xa1, 0xc0, 0xb5, 0x61, 0x28, 0xfa, 0xd5, 0xbb, 0x9b, 0x5b, 0x7a, 0xfd, 0xc8, 0xb0, 0xa1, 0xe7, 0xf3, 0x39, 0x5f, 0xff, 0xfa, 0xd7, 0x39, 0x39, 0x11, 0x2f, 0xf0, 0xa6, 0x4d, 0x95, 0x51, 0x47, 0x8f, 0xcd, 0x66, 0xc3, 0xdd, 0xdd, 0x1d, 0xaf, 0x5e, 0xbd, 0x56, 0x9b, 0x6c, 0x9f, 0x74, 0x9f, 0x98, 0xd9, 0xd8, 0x72, 0x79, 0xcf, 0x62, 0xb1, 0x50, 0x05, 0x57, 0x44, 0x92, 0xec, 0x48, 0x92, 0xad, 0x81, 0x76, 0x6d, 0xdb, 0x52, 0x1a, 0x60, 0x49, 0x6a, 0x6b, 0x9a, 0x86, 0x30, 0x8e, 0x1e, 0xc1, 0x98, 0xba, 0x83, 0xd5, 0x07, 0xb0, 0xeb, 0xda, 0x0a, 0xcd, 0xd9, 0x9a, 0xd1, 0x86, 0xb6, 0x94, 0x7d, 0xf1, 0xe2, 0x85, 0x99, 0xf1, 0x6b, 0x62, 0x93, 0x4e, 0xe1, 0xeb, 0xba, 0x4e, 0x34, 0xeb, 0x03, 0x89, 0x96, 0x3d, 0x34, 0x04, 0x39, 0x34, 0xa7, 0xa8, 0xaa, 0x0a, 0x3f, 0x0c, 0xe9, 0xf7, 0x86, 0x38, 0x8e, 0x47, 0xdd, 0xa4, 0x14, 0x45, 0xc9, 0x6a, 0xb5, 0x11, 0x9d, 0xb0, 0xca, 0x8b, 0x2f, 0xcb, 0x8a, 0x3a, 0xef, 0x70, 0x5d, 0x19, 0x4b, 0xc5, 0x3d, 0x71, 0xd0, 0x73, 0x94, 0xbe, 0x5d, 0xfb, 0x1f, 0xa8, 0xdc, 0x1e, 0xb3, 0x11, 0x8e, 0x7a, 0x3d, 0x83, 0xca, 0x39, 0x8e, 0x83, 0x65, 0x77, 0x24, 0xe9, 0x4e, 0x31, 0x84, 0x7d, 0xfc, 0xb0, 0x6f, 0x36, 0xc4, 0xcd, 0x66, 0x63, 0x48, 0x72, 0x0f, 0xda, 0xf7, 0xe6, 0xd1, 0xdf, 0xf5, 0x46, 0xfc, 0xb0, 0xb1, 0x8a, 0x23, 0x9d, 0xde, 0xa7, 0xc4, 0xb4, 0xa6, 0x32, 0x6b, 0x7e, 0xbb, 0xd8, 0x92, 0x65, 0x92, 0xaf, 0xf0, 0xc1, 0x07, 0x1f, 0x70, 0x7e, 0x71, 0xca, 0x64, 0x32, 0x51, 0xe3, 0x8b, 0x1e, 0xf9, 0x76, 0xcb, 0x7e, 0xbf, 0xe5, 0xf6, 0xf6, 0x56, 0xe9, 0xee, 0xe1, 0xf8, 0xf8, 0x18, 0x47, 0x11, 0xbb, 0x06, 0xae, 0x10, 0x2d, 0xa5, 0x9b, 0x17, 0xa4, 0x50, 0x9b, 0x0e, 0x2d, 0x16, 0xf7, 0x3c, 0x7b, 0x7e, 0x4a, 0xbf, 0x3f, 0x7c, 0x74, 0xed, 0x93, 0x24, 0x61, 0xbf, 0x4b, 0x65, 0x4f, 0x40, 0x64, 0x4f, 0x8e, 0x6b, 0x1b, 0x77, 0xc1, 0xeb, 0xeb, 0x2b, 0xee, 0xee, 0xee, 0xb8, 0xb9, 0xb9, 0x61, 0x38, 0x39, 0x66, 0x76, 0x76, 0x4a, 0x1c, 0xc7, 0xac, 0xd6, 0x4b, 0xf6, 0xdb, 0x2d, 0xf7, 0xb7, 0xd7, 0x0f, 0xa4, 0xd5, 0x62, 0x27, 0xeb, 0xde, 0x56, 0xf3, 0x57, 0x89, 0xf6, 0xa3, 0x2e, 0x73, 0xc5, 0x56, 0x6f, 0x85, 0xff, 0x61, 0x69, 0x9f, 0x0b, 0x57, 0x35, 0x64, 0x85, 0x89, 0x04, 0xd6, 0x8d, 0x81, 0x2e, 0xd2, 0x65, 0x74, 0x26, 0x45, 0x60, 0x14, 0xfb, 0x6a, 0x64, 0x91, 0x9a, 0xb4, 0x45, 0xcd, 0xc9, 0x90, 0xc3, 0x3b, 0x31, 0x23, 0xa1, 0xcb, 0xcb, 0x4b, 0xe3, 0x2a, 0x19, 0x86, 0x42, 0x20, 0xee, 0x9a, 0x16, 0xcb, 0xb1, 0x71, 0x5d, 0x1f, 0xc7, 0xf3, 0x70, 0x7d, 0x39, 0xdc, 0xcb, 0x46, 0x0c, 0xc4, 0x96, 0x2b, 0x39, 0x94, 0xd3, 0x24, 0x21, 0x0c, 0x22, 0x7c, 0xd7, 0xa5, 0x2c, 0xc4, 0x02, 0x3c, 0x8e, 0x5d, 0xb2, 0x34, 0x83, 0x46, 0x9c, 0x34, 0xdd, 0x20, 0xa4, 0xed, 0x0f, 0xa0, 0xed, 0x58, 0x2f, 0x96, 0xb2, 0xee, 0x57, 0x0d, 0x1f, 0xfd, 0xf4, 0x13, 0x9e, 0x3f, 0x3f, 0xc5, 0xb5, 0x6c, 0x7c, 0xc7, 0xc5, 0xf1, 0x2d, 0xb2, 0x7d, 0x82, 0xef, 0xb8, 0x78, 0x9e, 0x6d, 0x3c, 0x44, 0x7c, 0x3f, 0x54, 0xf1, 0xb3, 0xad, 0x41, 0xe2, 0x92, 0x74, 0x47, 0xbf, 0x37, 0x54, 0x45, 0x61, 0x67, 0x46, 0x40, 0x9a, 0x00, 0xe7, 0x78, 0xd6, 0x23, 0xfd, 0xf7, 0xa1, 0x16, 0x5f, 0xfb, 0x54, 0xe8, 0xce, 0x5c, 0xbf, 0xa6, 0x46, 0x78, 0x0e, 0xe5, 0xbe, 0x7a, 0x5f, 0xfc, 0x6a, 0xd6, 0x85, 0xbe, 0xd6, 0x69, 0x9a, 0x9a, 0x82, 0x4a, 0x73, 0x4d, 0xc2, 0x30, 0xa4, 0xe9, 0x2a, 0x33, 0xaa, 0x72, 0x1c, 0x57, 0x91, 0x3b, 0x5d, 0xf3, 0xb3, 0xc0, 0x8f, 0x1e, 0x3d, 0x07, 0x9a, 0x7c, 0x6a, 0x02, 0xb1, 0x7c, 0xff, 0x91, 0x2c, 0xd7, 0xf7, 0x7d, 0xdc, 0x24, 0x49, 0x78, 0xf9, 0xf2, 0x25, 0x8b, 0xc5, 0x82, 0xd5, 0x6a, 0xa3, 0x3a, 0xec, 0xa1, 0x62, 0x4c, 0xaf, 0x8c, 0x0f, 0xb0, 0xf6, 0x34, 0x17, 0xef, 0xdc, 0x96, 0xba, 0x29, 0x49, 0xd2, 0xc4, 0x6c, 0x48, 0xba, 0x82, 0x4e, 0xd3, 0x94, 0xeb, 0xeb, 0x5b, 0x3e, 0xff, 0xfc, 0x73, 0x62, 0x2f, 0x52, 0x26, 0x26, 0x8e, 0x21, 0x60, 0x88, 0x6e, 0x51, 0x36, 0xb2, 0xb7, 0xde, 0x7d, 0x8b, 0xb2, 0x10, 0x32, 0x42, 0xd3, 0x08, 0x89, 0xcd, 0x56, 0x6c, 0xdb, 0xff, 0x8f, 0xb8, 0x37, 0x8f, 0xb6, 0xec, 0x3a, 0xeb, 0xc4, 0x7e, 0xfb, 0xec, 0x33, 0xdf, 0xf9, 0x8d, 0x55, 0xf5, 0x54, 0x25, 0x95, 0x06, 0x5b, 0xb6, 0x25, 0x8f, 0x58, 0x38, 0xb1, 0x5b, 0xed, 0x36, 0xc1, 0x0d, 0xb6, 0x85, 0x4d, 0x27, 0x2b, 0x60, 0x92, 0xb5, 0x30, 0x06, 0x77, 0x68, 0x3a, 0x6e, 0x59, 0xab, 0x21, 0x21, 0x01, 0x93, 0x74, 0xda, 0xac, 0xd0, 0x10, 0x16, 0x76, 0xb3, 0x16, 0xb8, 0x69, 0x30, 0x90, 0x95, 0xa0, 0x36, 0x49, 0xbb, 0x6d, 0x30, 0x0b, 0x0c, 0xd8, 0xa1, 0xdd, 0x06, 0x6c, 0x79, 0x90, 0x6d, 0xc9, 0x83, 0xac, 0xa1, 0x24, 0xb9, 0x54, 0xf5, 0x86, 0xfb, 0xde, 0xbb, 0xc3, 0xb9, 0x67, 0x3e, 0x7b, 0xe7, 0x8f, 0x6f, 0x7f, 0xfb, 0x9e, 0xfb, 0xaa, 0x64, 0xbb, 0x24, 0x03, 0x77, 0xa9, 0x96, 0x6a, 0xbc, 0xf7, 0xdc, 0x33, 0x7c, 0xe3, 0x6f, 0xe8, 0xf7, 0x07, 0xb8, 0xbe, 0x4b, 0x89, 0xb1, 0xc8, 0x2b, 0x4c, 0x26, 0xb4, 0x3f, 0x3d, 0x38, 0x18, 0x63, 0xf7, 0x32, 0x3d, 0x80, 0x1b, 0xa7, 0x46, 0x2b, 0xfb, 0x47, 0x5f, 0x7a, 0xa8, 0x1a, 0x85, 0xbc, 0x24, 0x1e, 0xa2, 0xe3, 0x38, 0xc8, 0xb2, 0x0c, 0xe3, 0xf1, 0x02, 0x1a, 0x0d, 0xce, 0x9e, 0x3d, 0x8b, 0x5b, 0x6e, 0x21, 0xca, 0xcf, 0x74, 0x3a, 0xc5, 0x74, 0x3a, 0xc5, 0x53, 0x17, 0x2f, 0xe3, 0xd2, 0xa5, 0x4b, 0x10, 0x42, 0xe2, 0xfc, 0xf9, 0x1b, 0x70, 0xdd, 0xce, 0x39, 0x38, 0x8e, 0x8b, 0xc5, 0x62, 0x81, 0x87, 0x1e, 0x7a, 0x08, 0x07, 0x07, 0x07, 0x38, 0x3c, 0x3e, 0x42, 0x18, 0x46, 0x70, 0xb2, 0x05, 0x26, 0x93, 0x19, 0x16, 0x59, 0x4a, 0x15, 0x6e, 0x45, 0x15, 0x58, 0xdc, 0x09, 0xe1, 0xb9, 0x81, 0x11, 0xb9, 0xe8, 0x59, 0x34, 0xee, 0x17, 0xbe, 0xf0, 0x05, 0x6c, 0x6f, 0x6f, 0x62, 0x30, 0x18, 0x58, 0xf0, 0xc5, 0x78, 0x3c, 0xc6, 0xf8, 0x70, 0x1f, 0x4f, 0x3e, 0xf9, 0x24, 0x06, 0x83, 0x9e, 0x3d, 0x27, 0x6c, 0x98, 0xc0, 0x01, 0x97, 0xc7, 0x87, 0x3c, 0xc2, 0xe1, 0xdf, 0xe7, 0xee, 0x30, 0x0c, 0x43, 0x94, 0x4d, 0x6d, 0x6f, 0x3c, 0x0b, 0x50, 0x39, 0x31, 0x96, 0xe1, 0x75, 0x48, 0x1b, 0x75, 0xc9, 0x98, 0x80, 0xef, 0xfc, 0xce, 0x3b, 0x2c, 0xdd, 0x67, 0xb1, 0x48, 0x48, 0x66, 0xb7, 0x2c, 0x8d, 0xdc, 0xe3, 0x02, 0x41, 0xe0, 0x19, 0x09, 0x45, 0x8d, 0x28, 0x0a, 0x8c, 0x8a, 0x5c, 0x85, 0xf1, 0x78, 0x1f, 0x7b, 0x7b, 0x7b, 0x70, 0xfd, 0x00, 0x37, 0xdc, 0x70, 0x03, 0xa4, 0x94, 0xf8, 0x95, 0x77, 0xbf, 0x13, 0x9f, 0xf9, 0xcc, 0x67, 0xe0, 0xba, 0x2e, 0x7e, 0xfe, 0x17, 0x7e, 0x1b, 0xbf, 0xf4, 0x4b, 0xf7, 0xe0, 0xd2, 0xde, 0x93, 0x88, 0xa2, 0x1e, 0x02, 0xbf, 0xc1, 0xd6, 0x26, 0x8d, 0xca, 0xa3, 0xce, 0x1a, 0xf2, 0x42, 0x40, 0x08, 0x0f, 0xd3, 0xe9, 0x31, 0x8d, 0x22, 0x93, 0x14, 0xb3, 0xd9, 0x02, 0x67, 0xce, 0x9c, 0xb6, 0xdf, 0xaf, 0x2c, 0x6a, 0x5c, 0xb7, 0x73, 0x16, 0x55, 0x5d, 0x9a, 0x89, 0x4b, 0x6d, 0xa9, 0x5d, 0x7c, 0x1e, 0x5c, 0x74, 0x00, 0x10, 0xca, 0x94, 0xd4, 0xb1, 0x7c, 0xf3, 0x77, 0x73, 0x1c, 0x1d, 0x1d, 0x62, 0x7b, 0x6d, 0x13, 0x75, 0x53, 0x91, 0x9f, 0xb7, 0xef, 0x1a, 0x13, 0x1e, 0x4a, 0xe0, 0xf3, 0xf9, 0x02, 0x07, 0xe3, 0xcb, 0xf0, 0x83, 0x1d, 0x48, 0xe9, 0x60, 0x34, 0x1a, 0xe2, 0xa6, 0x9b, 0xcf, 0xe3, 0xfc, 0xf9, 0xeb, 0xb1, 0x58, 0xcc, 0x71, 0xe9, 0xd2, 0x45, 0x54, 0x75, 0x6a, 0x8a, 0xc3, 0x06, 0xf3, 0xf9, 0x1c, 0x4f, 0x3d, 0xf5, 0x14, 0x2e, 0x5e, 0x7c, 0xca, 0x82, 0xc1, 0x84, 0x10, 0x18, 0x0c, 0x06, 0x70, 0x1c, 0x07, 0x4f, 0x3c, 0xf1, 0x04, 0xa6, 0xd3, 0xa9, 0xed, 0x20, 0x8f, 0x8e, 0x8e, 0xc8, 0xcd, 0xce, 0x8c, 0x6b, 0x79, 0x7a, 0xc5, 0xf7, 0x64, 0xd3, 0x34, 0xc8, 0x8a, 0x7c, 0xa5, 0xea, 0x3f, 0x49, 0xfd, 0x6a, 0x8b, 0x56, 0x70, 0x51, 0xcc, 0x2b, 0x0f, 0xda, 0x95, 0x03, 0x65, 0x99, 0xa3, 0x28, 0x34, 0xca, 0x32, 0xb7, 0x3c, 0x65, 0xe2, 0xda, 0x7b, 0x48, 0x92, 0x99, 0xdd, 0x87, 0xb2, 0xa3, 0x13, 0x8f, 0xbc, 0xeb, 0xba, 0xa6, 0x8e, 0xcc, 0xb0, 0x4e, 0x26, 0x93, 0x19, 0x0e, 0x8f, 0x66, 0x98, 0x4c, 0xa6, 0x66, 0x84, 0xad, 0xe0, 0x9b, 0x64, 0xd9, 0x34, 0x1a, 0x55, 0x51, 0xda, 0xa2, 0x83, 0xf7, 0xa5, 0x59, 0x52, 0xa2, 0xa9, 0x35, 0x61, 0x4d, 0x8c, 0x62, 0x64, 0x1b, 0x30, 0x45, 0x1d, 0x23, 0x0c, 0x0a, 0x98, 0xe4, 0x9a, 0xb3, 0x6c, 0x61, 0xfc, 0x1b, 0x04, 0x42, 0x49, 0xa3, 0x76, 0x2e, 0xea, 0x58, 0xf8, 0x87, 0xbf, 0x7f, 0xdb, 0x43, 0x9a, 0x83, 0x1a, 0x07, 0x30, 0xc7, 0x71, 0x90, 0xe5, 0x34, 0xd5, 0x92, 0xae, 0x83, 0x46, 0x29, 0x54, 0x35, 0x15, 0x2e, 0x8d, 0xaa, 0xe9, 0x9a, 0x7b, 0x12, 0xc7, 0xc7, 0x29, 0xce, 0x9e, 0xdd, 0xc1, 0xf5, 0x37, 0x9c, 0x45, 0x1c, 0xc7, 0xd8, 0xd9, 0x39, 0x63, 0xa9, 0x4d, 0x61, 0xe8, 0x23, 0xcb, 0x3c, 0x38, 0x12, 0x10, 0xce, 0xb2, 0x38, 0x10, 0x42, 0xa0, 0x51, 0x35, 0xb2, 0x6a, 0xe9, 0x9a, 0x37, 0x1a, 0x0d, 0x50, 0x96, 0x04, 0xa2, 0xba, 0xfe, 0xfa, 0xeb, 0x0d, 0x6d, 0x6b, 0xe9, 0x67, 0x1d, 0x86, 0xb4, 0xa6, 0x71, 0x84, 0x8b, 0xa6, 0xd6, 0x06, 0x74, 0x9b, 0x43, 0x29, 0xd8, 0x06, 0xa7, 0xae, 0x23, 0x1c, 0x1d, 0x8d, 0xed, 0xb4, 0xa6, 0x54, 0x02, 0x59, 0x9e, 0xd2, 0x14, 0x20, 0x5b, 0x98, 0x42, 0x3d, 0x45, 0xd3, 0x78, 0xf0, 0x3c, 0x69, 0x39, 0xd3, 0x49, 0x92, 0xc0, 0x0f, 0x28, 0xe0, 0x0f, 0x87, 0x7d, 0xb2, 0x39, 0xed, 0xf5, 0x30, 0x88, 0x7d, 0x2b, 0x44, 0xc4, 0xab, 0x08, 0x96, 0x55, 0x9d, 0xcf, 0xe7, 0x08, 0xa4, 0x63, 0x85, 0x73, 0x38, 0x86, 0xcc, 0x66, 0x33, 0x54, 0x55, 0x85, 0xa7, 0x9e, 0x7a, 0x0a, 0x6b, 0xeb, 0x03, 0x3b, 0x19, 0x92, 0x52, 0x5a, 0x63, 0x26, 0xde, 0x91, 0xb7, 0x41, 0x94, 0x6c, 0xe7, 0xc9, 0xa0, 0xcc, 0xb2, 0x2c, 0xa1, 0x1b, 0x85, 0xbc, 0xa4, 0xe7, 0xa3, 0xd1, 0x00, 0x84, 0x44, 0x51, 0xd5, 0x98, 0xcf, 0x4c, 0x87, 0xbf, 0xc8, 0xc9, 0x14, 0xaa, 0x6a, 0x50, 0x39, 0x0d, 0x54, 0x45, 0x14, 0x61, 0xdf, 0xf5, 0xa0, 0x9a, 0xe5, 0xa8, 0x9a, 0xcf, 0x47, 0xdb, 0xe3, 0x9b, 0x70, 0x3c, 0x29, 0xc6, 0xe3, 0x7c, 0x45, 0x32, 0x99, 0xc1, 0xb7, 0x9e, 0xe7, 0x19, 0xaf, 0x05, 0x81, 0xba, 0x56, 0xd0, 0xba, 0x80, 0x23, 0x5c, 0xbb, 0xae, 0xf1, 0xfd, 0xd0, 0x8a, 0x12, 0xcd, 0xa6, 0x84, 0x03, 0xca, 0x73, 0x8d, 0xb5, 0x35, 0x6d, 0x56, 0x50, 0x3e, 0x1a, 0x5d, 0xad, 0x00, 0x66, 0xdb, 0x52, 0xaf, 0x9c, 0x40, 0xb9, 0x58, 0x6c, 0xa3, 0xe4, 0x19, 0xdb, 0xe1, 0xcb, 0x55, 0x74, 0x3b, 0x17, 0xa7, 0xdc, 0x3d, 0xf3, 0xaf, 0x8b, 0xa2, 0xc0, 0xe6, 0xe6, 0xa6, 0x35, 0x3c, 0xe3, 0xa9, 0xb5, 0xeb, 0x3b, 0xb6, 0x18, 0x60, 0x2d, 0x0c, 0x32, 0xc8, 0x81, 0x2d, 0x0e, 0xda, 0xc2, 0x5f, 0x6d, 0x80, 0x73, 0x1c, 0xc7, 0xf6, 0x98, 0x57, 0xcc, 0x59, 0xe6, 0x8b, 0x05, 0x80, 0x0c, 0x6e, 0xe0, 0xe3, 0xf4, 0x75, 0x3b, 0xe8, 0x76, 0xbb, 0x80, 0x76, 0x30, 0x9d, 0x4e, 0x51, 0x36, 0x35, 0x7c, 0x56, 0xe3, 0xa9, 0x6b, 0x54, 0x55, 0x69, 0x85, 0x47, 0x94, 0xaa, 0xb1, 0xb3, 0xb3, 0x63, 0xab, 0xb9, 0x3c, 0x2b, 0x70, 0x7c, 0x7c, 0x0c, 0xcf, 0xa3, 0xee, 0x63, 0x38, 0x58, 0xc3, 0xc6, 0x70, 0x64, 0x69, 0x23, 0x8e, 0x03, 0x03, 0x68, 0x89, 0x2c, 0x2a, 0x53, 0x2b, 0x20, 0x49, 0x88, 0xbe, 0xd3, 0xeb, 0x0d, 0x10, 0x06, 0x3e, 0x0a, 0x8f, 0xf6, 0x26, 0xfd, 0x7e, 0x1f, 0x65, 0xa3, 0x50, 0xe4, 0x15, 0xc6, 0xe3, 0x23, 0x83, 0x60, 0x76, 0x0d, 0xd8, 0xc6, 0xc3, 0xda, 0xda, 0x86, 0xb5, 0xc1, 0xe4, 0xfd, 0x4f, 0x14, 0x75, 0x4c, 0x95, 0x4e, 0x17, 0x24, 0x99, 0x25, 0xad, 0xfd, 0xa1, 0x36, 0x49, 0xb2, 0xc6, 0xc6, 0x46, 0x17, 0x83, 0xc1, 0x00, 0x17, 0xbf, 0xfe, 0x18, 0xce, 0x9c, 0x39, 0x83, 0x9b, 0x6f, 0x7e, 0x0e, 0x1c, 0x47, 0xa2, 0xc8, 0x2b, 0x24, 0x49, 0x6a, 0xd7, 0x00, 0x8f, 0x3e, 0xfa, 0x28, 0x84, 0x10, 0xe8, 0xf5, 0xfa, 0xa4, 0x23, 0x5d, 0x14, 0x64, 0x00, 0xd1, 0x8d, 0xb1, 0xb9, 0xb9, 0x0e, 0x4f, 0x08, 0x2b, 0xcd, 0xca, 0xfa, 0xea, 0x55, 0x59, 0xe2, 0xe0, 0x80, 0x76, 0xdf, 0xbe, 0xef, 0xa3, 0x28, 0x33, 0x64, 0xb9, 0x6b, 0xdc, 0xa6, 0x16, 0x90, 0xae, 0x80, 0xef, 0xbb, 0x38, 0x65, 0x9c, 0x7d, 0xda, 0x9d, 0x17, 0x89, 0x7d, 0x64, 0xc6, 0xc5, 0xcc, 0xc1, 0xfa, 0xfa, 0xc8, 0xde, 0x6c, 0xc4, 0x35, 0x27, 0xad, 0x00, 0x52, 0xf4, 0x0a, 0x51, 0x2f, 0x12, 0x72, 0x65, 0x52, 0x75, 0x0b, 0x94, 0xa1, 0x56, 0x9c, 0x86, 0xb4, 0x6e, 0x8c, 0x99, 0x88, 0x40, 0x10, 0x78, 0x56, 0x01, 0xb0, 0xd7, 0xeb, 0xe0, 0x4b, 0x5f, 0xfe, 0x82, 0xad, 0x18, 0x07, 0x03, 0x52, 0xf9, 0x3b, 0x3c, 0x3a, 0xc6, 0x64, 0x7a, 0x04, 0xe1, 0x50, 0x12, 0x3f, 0x38, 0x38, 0x40, 0x9a, 0x26, 0xb8, 0xfe, 0xfa, 0xeb, 0x71, 0xe6, 0xcc, 0x29, 0x0b, 0x12, 0xe9, 0x74, 0x22, 0x74, 0xbb, 0x7d, 0xa4, 0x69, 0x8a, 0xa3, 0xe9, 0x31, 0x1e, 0x7c, 0xf0, 0x8b, 0x88, 0x22, 0x02, 0xf9, 0xbc, 0xe1, 0x8d, 0x2f, 0xc5, 0x9f, 0x7d, 0xec, 0xcf, 0xb0, 0xb5, 0x7d, 0x1a, 0xd7, 0xed, 0x8c, 0x30, 0x9d, 0x65, 0x18, 0x1f, 0x4e, 0xf1, 0xe1, 0x0f, 0xff, 0x35, 0xe2, 0x18, 0xf0, 0x3c, 0xe0, 0xcc, 0xd9, 0x2d, 0x5c, 0xbe, 0x34, 0x36, 0x3e, 0xed, 0xd4, 0xb1, 0x6d, 0x6c, 0x6c, 0x90, 0x82, 0x56, 0x5d, 0x63, 0x7d, 0x0d, 0x16, 0xf0, 0xd3, 0x28, 0x56, 0x1b, 0x23, 0x7f, 0x73, 0xaa, 0x90, 0x25, 0x5c, 0x48, 0x4c, 0xa6, 0x73, 0x28, 0x5d, 0x1b, 0xc1, 0x22, 0x0f, 0x93, 0xc9, 0xc2, 0x9e, 0x0f, 0x36, 0x97, 0x08, 0xc3, 0x10, 0xc3, 0x61, 0x17, 0xfd, 0x7e, 0x17, 0xbd, 0x7e, 0x07, 0xf3, 0x39, 0x75, 0x8a, 0x6b, 0x6b, 0x23, 0x74, 0xbb, 0x1d, 0xa4, 0x59, 0x82, 0xaa, 0xce, 0x50, 0x96, 0x29, 0xf6, 0x0f, 0x2e, 0xe1, 0xa9, 0xa7, 0x9e, 0x42, 0x9e, 0x67, 0x70, 0x4d, 0x87, 0x56, 0x19, 0x84, 0x2e, 0xd3, 0x0b, 0xb7, 0xb7, 0xb7, 0x71, 0xea, 0xd4, 0x29, 0x08, 0x03, 0xd2, 0xa2, 0x44, 0xd4, 0x20, 0x0c, 0x03, 0x0c, 0x06, 0x24, 0x26, 0x54, 0x96, 0x85, 0x71, 0x6a, 0x5b, 0x0a, 0x76, 0x70, 0x92, 0xe2, 0x07, 0xb1, 0xbd, 0x6f, 0x6b, 0xd3, 0x51, 0x78, 0x8f, 0x76, 0xf9, 0xf2, 0x65, 0x1b, 0x48, 0x39, 0xc0, 0x94, 0x25, 0x8d, 0x81, 0xcf, 0x9e, 0x3d, 0x0b, 0xe1, 0xb4, 0x8a, 0x1b, 0x03, 0x8c, 0x61, 0x19, 0x4b, 0x1e, 0x35, 0xb6, 0x3d, 0x99, 0xdb, 0x42, 0x3b, 0xbe, 0xef, 0xc3, 0x75, 0x08, 0xf0, 0x37, 0x9b, 0x26, 0xd8, 0xdf, 0x3f, 0xc2, 0x6c, 0x4e, 0x14, 0x21, 0x96, 0xfd, 0x24, 0x8e, 0xb2, 0xb4, 0x23, 0x6e, 0x21, 0x04, 0xe0, 0x08, 0x13, 0x54, 0x13, 0xe8, 0x9a, 0xa6, 0x0f, 0x3c, 0x0a, 0x74, 0x8c, 0x94, 0xa5, 0x23, 0x69, 0xbd, 0x94, 0x65, 0x04, 0x1a, 0x22, 0xb0, 0x97, 0x32, 0x6b, 0xa7, 0x06, 0x9e, 0xef, 0xa0, 0xaa, 0x73, 0xc4, 0x6e, 0x08, 0xcf, 0x93, 0x48, 0xd3, 0x9a, 0x84, 0xa8, 0xcc, 0xdf, 0xe5, 0x91, 0x37, 0xbf, 0x77, 0x5b, 0xf6, 0xb7, 0xad, 0x64, 0x46, 0x14, 0x20, 0x7a, 0x26, 0xe8, 0xfb, 0xd5, 0xa0, 0x3f, 0x26, 0xff, 0x88, 0x6e, 0xb7, 0x8b, 0xf1, 0x78, 0x8c, 0x9b, 0x6f, 0xb9, 0x11, 0xeb, 0xeb, 0xeb, 0x76, 0x35, 0x75, 0x7c, 0x7c, 0x4c, 0x01, 0x55, 0x97, 0xc8, 0x72, 0x1a, 0x79, 0xf7, 0xfb, 0x5d, 0x64, 0xb9, 0x51, 0xe7, 0x02, 0x15, 0x26, 0xc3, 0x4e, 0x6c, 0x00, 0x52, 0xee, 0x8a, 0xa9, 0x46, 0x1c, 0x03, 0x1b, 0xeb, 0x5b, 0xc8, 0x8b, 0xc4, 0xac, 0xd7, 0x02, 0x23, 0x14, 0x12, 0xa2, 0x69, 0x8e, 0xcd, 0xb5, 0x14, 0x56, 0xc9, 0x2b, 0x49, 0x52, 0xbb, 0x9a, 0x23, 0xc4, 0x78, 0x83, 0x38, 0xee, 0xa0, 0xd7, 0xeb, 0x98, 0x46, 0xc8, 0x81, 0x94, 0x31, 0xea, 0xa6, 0x44, 0xdd, 0x94, 0xc6, 0x12, 0x98, 0x78, 0xf3, 0x5a, 0x6b, 0xcc, 0x93, 0xa9, 0x99, 0xe2, 0x54, 0x50, 0x46, 0x6e, 0x55, 0x4a, 0xd2, 0xfb, 0xa7, 0x15, 0x68, 0xb5, 0x62, 0xab, 0x39, 0x18, 0xf4, 0xd0, 0xed, 0xc6, 0x98, 0x1d, 0x1d, 0x42, 0xeb, 0x06, 0x49, 0x32, 0xb3, 0x4d, 0x17, 0x33, 0x59, 0xaa, 0xaa, 0xb0, 0x31, 0x87, 0x3b, 0xce, 0xf9, 0x7c, 0x8e, 0xe9, 0x74, 0x8a, 0xf1, 0x78, 0x8c, 0xa3, 0xa3, 0x23, 0x3b, 0xfe, 0x8e, 0xe3, 0xd8, 0x2a, 0x4d, 0x02, 0xc0, 0xd1, 0x11, 0x75, 0xd0, 0x81, 0xe7, 0xc3, 0xf5, 0x03, 0xf8, 0x5e, 0x00, 0xdf, 0xf5, 0x50, 0x94, 0x35, 0xf2, 0x8c, 0xe2, 0xe7, 0x6c, 0xba, 0x40, 0x56, 0x94, 0x34, 0x5d, 0x73, 0x08, 0x5b, 0xe4, 0x0a, 0x17, 0x5a, 0x17, 0x80, 0x26, 0x96, 0x92, 0xf4, 0xa4, 0x55, 0x44, 0xe3, 0xa2, 0x97, 0x8b, 0xb9, 0x5e, 0xaf, 0x87, 0xf5, 0x75, 0x01, 0xad, 0x1f, 0xb7, 0x7b, 0x7a, 0x3e, 0x87, 0xcc, 0x17, 0xef, 0xf5, 0x06, 0xe8, 0xf5, 0x7a, 0x04, 0x94, 0x2d, 0x6a, 0xa3, 0x02, 0x59, 0x5a, 0xc6, 0x55, 0x5a, 0xa6, 0x86, 0xd3, 0xef, 0x40, 0x96, 0x12, 0x9e, 0x57, 0xdb, 0x09, 0xee, 0x62, 0xb1, 0xc0, 0x9a, 0x99, 0x70, 0x59, 0x1c, 0x80, 0x79, 0x56, 0x18, 0xb7, 0xb1, 0x64, 0x36, 0x2c, 0x69, 0x68, 0xdc, 0xad, 0xe7, 0x79, 0x81, 0xc6, 0x41, 0x6b, 0x64, 0xbe, 0x54, 0x8d, 0xe3, 0x86, 0x8c, 0xcf, 0x1b, 0xaf, 0x33, 0x18, 0xbf, 0x90, 0x24, 0x05, 0x86, 0xc3, 0x8e, 0x69, 0x92, 0x79, 0xb7, 0xce, 0xf4, 0x40, 0xd7, 0xc6, 0x81, 0x3c, 0x2b, 0x57, 0xd6, 0x28, 0xac, 0x24, 0xd9, 0x9e, 0xd8, 0xb6, 0x69, 0x71, 0x55, 0x55, 0xc1, 0xa5, 0xfd, 0xa8, 0xb2, 0x1a, 0xd7, 0xc7, 0xc7, 0xc7, 0xd0, 0x8a, 0x1e, 0xda, 0x6e, 0x2f, 0xb6, 0xbb, 0x49, 0xc2, 0x10, 0x29, 0x23, 0x58, 0x10, 0xc1, 0xf7, 0x09, 0xc1, 0x47, 0xe3, 0xab, 0x3e, 0xb4, 0x62, 0xfa, 0xc1, 0x1c, 0x71, 0xd4, 0xc5, 0xda, 0x68, 0x03, 0x1b, 0x03, 0x42, 0x69, 0x97, 0xc6, 0xee, 0x51, 0x4a, 0x61, 0x69, 0x13, 0x75, 0x5d, 0x62, 0xef, 0xc9, 0xc7, 0x89, 0xbe, 0xe1, 0xfb, 0xc8, 0xd2, 0x31, 0x94, 0xd2, 0xa4, 0x95, 0xbd, 0xbe, 0x85, 0x30, 0x88, 0xb1, 0xbd, 0xb6, 0x8e, 0x0b, 0x17, 0x9e, 0x30, 0xa4, 0xf9, 0x02, 0x75, 0x95, 0x61, 0x3e, 0x5f, 0x60, 0xb1, 0x30, 0x40, 0x8e, 0xd0, 0x81, 0x23, 0x5d, 0x78, 0xbe, 0x0f, 0x3f, 0x08, 0x01, 0xe1, 0xa0, 0x28, 0x2b, 0x2c, 0xd2, 0xcc, 0x22, 0x17, 0x39, 0xd9, 0xbb, 0xae, 0x63, 0xc1, 0x40, 0x45, 0x51, 0xa1, 0xd3, 0xf1, 0x71, 0xe3, 0x8d, 0x37, 0x9b, 0x60, 0x07, 0xfa, 0xce, 0x75, 0x8a, 0x24, 0x19, 0xe3, 0xd1, 0x47, 0x2e, 0xe0, 0xf2, 0xe5, 0xcb, 0xd8, 0xda, 0xda, 0xa6, 0xe4, 0x28, 0x48, 0x3d, 0x2a, 0x2b, 0x0b, 0xf4, 0x07, 0x3d, 0x0c, 0x47, 0x23, 0xd2, 0x6d, 0x37, 0x32, 0x84, 0x34, 0x25, 0x28, 0xac, 0xe9, 0x05, 0x84, 0x82, 0xe7, 0x4b, 0x5c, 0x7f, 0xc3, 0x59, 0xe4, 0x79, 0x86, 0xfd, 0xfd, 0x3d, 0xd4, 0x75, 0x09, 0xe1, 0x68, 0x84, 0xc2, 0x47, 0x18, 0xc6, 0x16, 0x55, 0xca, 0x32, 0xac, 0x24, 0xc1, 0x49, 0x1d, 0x2b, 0x07, 0xe5, 0x38, 0x8e, 0x2d, 0xbf, 0x98, 0x85, 0x63, 0x98, 0x46, 0xa6, 0x14, 0x59, 0xaa, 0x52, 0xc0, 0x21, 0x3f, 0x66, 0xe2, 0x7a, 0x4a, 0x6b, 0xe9, 0x57, 0x9b, 0x51, 0xab, 0xeb, 0x49, 0x43, 0xcb, 0x22, 0xa3, 0x02, 0xa5, 0x1b, 0xcc, 0xe6, 0x53, 0x84, 0x1e, 0xcc, 0x8d, 0x5a, 0x63, 0x36, 0x9b, 0xe0, 0xf8, 0xf8, 0x18, 0xfb, 0xfb, 0xe4, 0x46, 0xb5, 0xb1, 0xb1, 0x0e, 0x17, 0x14, 0x9c, 0x9b, 0x86, 0x0c, 0x69, 0x20, 0x14, 0xaa, 0x9a, 0x82, 0xa7, 0x23, 0x01, 0x29, 0x34, 0x0e, 0x0e, 0xf6, 0xf0, 0xfc, 0xe7, 0x3f, 0x1f, 0x17, 0x9e, 0x78, 0x1c, 0x4f, 0x3c, 0xf1, 0x04, 0x6e, 0xbc, 0xe5, 0x66, 0xf4, 0x7a, 0x1d, 0xc4, 0xdd, 0x2d, 0x8c, 0x46, 0xa7, 0xf1, 0xd7, 0x9f, 0xfc, 0x0c, 0xee, 0xbb, 0xef, 0xf3, 0x90, 0x9e, 0x8f, 0xee, 0x40, 0x62, 0x67, 0x67, 0x07, 0xe3, 0xe3, 0x23, 0x3c, 0xfa, 0xf8, 0x3e, 0xf2, 0x04, 0xe8, 0xf7, 0x49, 0xe4, 0x61, 0x63, 0x63, 0x03, 0x55, 0xd9, 0x18, 0xab, 0xcd, 0x1c, 0xfd, 0xfe, 0x00, 0x53, 0xb3, 0x6b, 0xa6, 0x99, 0x18, 0xcc, 0x68, 0xc9, 0x47, 0x10, 0x18, 0x8f, 0xea, 0x46, 0x98, 0xfd, 0x7e, 0x85, 0x3c, 0xd7, 0xf0, 0x7d, 0xf2, 0xa2, 0x8e, 0xa2, 0x0e, 0xa4, 0x2b, 0x70, 0xb4, 0x37, 0xc1, 0x60, 0x10, 0x63, 0x30, 0xec, 0xa0, 0xdb, 0x8b, 0x8d, 0x74, 0x69, 0x82, 0xb2, 0x2c, 0x20, 0x25, 0xb0, 0xb9, 0xb5, 0x8e, 0xcd, 0xcd, 0x11, 0x8a, 0x22, 0x46, 0xa7, 0x13, 0xe1, 0xe8, 0x78, 0x8c, 0x4b, 0x97, 0xbf, 0x8e, 0xcb, 0x97, 0x9f, 0x42, 0xaf, 0xd7, 0x33, 0xde, 0xdf, 0x13, 0xc3, 0x20, 0x20, 0xb4, 0xfd, 0xf6, 0xf6, 0x29, 0xf4, 0xfb, 0x7d, 0x4a, 0x96, 0x55, 0x8e, 0xbd, 0xfd, 0xcb, 0x98, 0xcf, 0xe7, 0x58, 0xa4, 0x73, 0xf4, 0xfa, 0x1d, 0xac, 0x19, 0x87, 0x3d, 0xd2, 0xf2, 0x9f, 0x92, 0xe1, 0x89, 0xae, 0xad, 0xa9, 0x0f, 0x53, 0x11, 0xcb, 0xb2, 0x44, 0x59, 0x35, 0x74, 0x1f, 0x19, 0x8a, 0x17, 0x77, 0x17, 0x24, 0xa6, 0x92, 0x21, 0xcf, 0x53, 0xab, 0x8e, 0xc5, 0xf2, 0xb6, 0x8c, 0x3a, 0x2e, 0x8a, 0x02, 0xd2, 0xd5, 0x76, 0xac, 0xb7, 0xb6, 0xb6, 0x66, 0x35, 0x1e, 0xb8, 0x4b, 0x88, 0x3b, 0xa1, 0xbd, 0x57, 0x20, 0x14, 0x1a, 0x45, 0x6e, 0x68, 0x1a, 0x8d, 0x11, 0xc9, 0xc9, 0xd0, 0x28, 0x60, 0xb1, 0xa0, 0x51, 0x9e, 0x94, 0x2e, 0xa4, 0xe3, 0xa1, 0x52, 0x1a, 0x75, 0x45, 0x4e, 0x56, 0x0c, 0x38, 0xb3, 0xd2, 0xc9, 0xd2, 0x33, 0x41, 0x38, 0x87, 0x2f, 0x03, 0xb8, 0xae, 0x67, 0x2c, 0x3f, 0x85, 0x31, 0x4e, 0xd2, 0x56, 0xfa, 0x39, 0x08, 0x8c, 0xd0, 0x8d, 0x27, 0xc9, 0x74, 0x45, 0x57, 0xe8, 0x05, 0x21, 0x7a, 0xbd, 0xae, 0xed, 0x34, 0xda, 0xdd, 0x51, 0x5b, 0xc5, 0x6f, 0x30, 0x18, 0xb4, 0xdc, 0xc9, 0x96, 0x93, 0x29, 0xee, 0x44, 0xe9, 0x7b, 0x07, 0x4b, 0x5d, 0x7a, 0x41, 0xc2, 0x30, 0x5a, 0x6b, 0x63, 0x6c, 0x92, 0x43, 0xa3, 0x42, 0x59, 0xe5, 0x38, 0x7f, 0xfe, 0x3c, 0x7a, 0xbd, 0xae, 0x4d, 0x0a, 0x65, 0x99, 0x63, 0x3e, 0x2f, 0x50, 0x24, 0x84, 0x81, 0x51, 0xc6, 0xe1, 0x8e, 0xc4, 0x47, 0x96, 0xb2, 0x9d, 0xa5, 0x6a, 0x2c, 0x48, 0x51, 0x88, 0x19, 0xd6, 0x46, 0x1b, 0x96, 0x02, 0xc8, 0x8a, 0x8c, 0x34, 0xf5, 0xc8, 0xe0, 0xb9, 0x81, 0x01, 0xb8, 0xa6, 0x58, 0x2c, 0xe8, 0x1a, 0x55, 0x35, 0xdd, 0xb3, 0xfb, 0xfb, 0x7b, 0xc8, 0xf3, 0xd2, 0x02, 0x5a, 0xb3, 0x34, 0xa7, 0x67, 0x3b, 0x99, 0x60, 0x67, 0x67, 0x07, 0xdb, 0x5b, 0x1b, 0x38, 0x3a, 0x3a, 0xc4, 0x74, 0xba, 0x80, 0xe7, 0x0a, 0xa2, 0x38, 0x0e, 0xfb, 0xf8, 0xfa, 0xd7, 0x9f, 0x40, 0xbf, 0xdf, 0x47, 0xaf, 0xd3, 0x05, 0x40, 0x85, 0x58, 0x5e, 0x64, 0xa8, 0x05, 0x00, 0xad, 0x29, 0x51, 0x99, 0xeb, 0x99, 0x2c, 0x96, 0x0c, 0x01, 0x6b, 0x0c, 0xe4, 0x2c, 0x99, 0x47, 0x7c, 0x9f, 0xf0, 0x7d, 0x24, 0xa5, 0x84, 0x6b, 0x12, 0x2a, 0xeb, 0x81, 0x33, 0x68, 0xb2, 0x69, 0x1a, 0x23, 0xc4, 0xd3, 0xb1, 0x63, 0x5d, 0xa6, 0xb7, 0xf1, 0x84, 0xcc, 0xf7, 0x7d, 0xa4, 0x8b, 0x14, 0xc3, 0x90, 0xd6, 0xac, 0x0a, 0x2e, 0xb2, 0xfc, 0x18, 0x69, 0x5a, 0x20, 0xcf, 0x2a, 0x02, 0x9e, 0x55, 0x40, 0x59, 0x28, 0x08, 0x5d, 0x42, 0x3a, 0x1e, 0x1c, 0x9f, 0x14, 0x47, 0x05, 0x1c, 0xa8, 0x46, 0x40, 0x3b, 0x0d, 0x7c, 0xcf, 0x43, 0x64, 0xa6, 0x0c, 0x41, 0x40, 0x0d, 0x41, 0x9e, 0x1b, 0x43, 0xae, 0x20, 0xc6, 0xe6, 0xfa, 0x06, 0x84, 0x26, 0x16, 0x4a, 0xe3, 0xd4, 0x28, 0x94, 0xc6, 0xfa, 0x68, 0xcd, 0x52, 0x39, 0xe3, 0x38, 0x86, 0x56, 0xc2, 0x4c, 0xb4, 0xa4, 0xdd, 0x3f, 0x4b, 0xe9, 0x22, 0xc9, 0x27, 0x46, 0xc3, 0xde, 0x83, 0x70, 0x68, 0x2d, 0x41, 0x58, 0x1a, 0x12, 0x02, 0xe2, 0x09, 0x68, 0xdb, 0xb9, 0x8c, 0x27, 0x65, 0xed, 0xe4, 0xc9, 0x63, 0xf7, 0x76, 0xfe, 0xf3, 0x3c, 0x0f, 0x75, 0x41, 0xd7, 0x91, 0x57, 0xa0, 0x6d, 0xb9, 0x74, 0x2e, 0x92, 0x8a, 0xa2, 0xc0, 0xb9, 0x73, 0xe7, 0x0c, 0x0d, 0x74, 0x62, 0x54, 0x06, 0x3d, 0xbc, 0xe4, 0x25, 0x2f, 0xc1, 0x22, 0x9b, 0xe3, 0xf0, 0xf0, 0x10, 0xe3, 0xf1, 0x18, 0x75, 0xdd, 0x18, 0xb0, 0xb2, 0x67, 0xd6, 0x24, 0x39, 0x3a, 0x46, 0x97, 0x81, 0xc7, 0xfb, 0x3c, 0xd6, 0xe7, 0xb5, 0x2c, 0x37, 0x08, 0xed, 0xe7, 0xc8, 0xdd, 0xdd, 0xdf, 0x43, 0x96, 0x51, 0x85, 0x54, 0xe4, 0xf4, 0xf0, 0xf3, 0x0e, 0xb8, 0x28, 0x4b, 0x40, 0x08, 0x48, 0x57, 0xa0, 0xac, 0x2b, 0x28, 0x4d, 0x5d, 0x1b, 0xed, 0xa1, 0x62, 0x44, 0x41, 0x68, 0xac, 0xfb, 0xa4, 0xd9, 0x07, 0xba, 0xc8, 0xd2, 0x0a, 0xe3, 0xf1, 0x21, 0xc6, 0xe3, 0x43, 0xb8, 0xda, 0xb1, 0x01, 0xc1, 0xf5, 0xa4, 0x95, 0x1c, 0xe5, 0xea, 0xe7, 0xfa, 0xeb, 0xcf, 0xc3, 0x73, 0x69, 0x27, 0xb8, 0xbb, 0xbb, 0x87, 0x28, 0xea, 0xe0, 0x86, 0xeb, 0x6f, 0xc4, 0x99, 0x33, 0xd7, 0x01, 0x00, 0x1e, 0xfc, 0x5a, 0x1e, 0xab, 0x3c, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xca, 0x57, 0xf1, 0xe8, 0xa3, 0x8f, 0xe1, 0xe8, 0xe8, 0x08, 0x02, 0xd2, 0xf2, 0x27, 0xa1, 0x05, 0xca, 0xb2, 0x82, 0x6a, 0x6a, 0x33, 0x62, 0x74, 0x4d, 0x65, 0xd6, 0x18, 0x50, 0x1a, 0xd9, 0x09, 0xf6, 0x7b, 0x7d, 0x23, 0x3c, 0x40, 0x62, 0x23, 0xe4, 0x97, 0x2d, 0x70, 0x78, 0x78, 0x48, 0xa0, 0x8a, 0x90, 0x76, 0x8f, 0xae, 0xf4, 0x71, 0x74, 0x34, 0xc1, 0x63, 0x8f, 0x3d, 0x8e, 0xbd, 0xdd, 0x03, 0xb8, 0xae, 0x8b, 0x9b, 0x6f, 0xbe, 0xc5, 0x1a, 0x3a, 0xa4, 0x79, 0x06, 0xa5, 0x1a, 0xf4, 0x86, 0x03, 0x9c, 0x3d, 0xbb, 0x83, 0xa8, 0x13, 0xd3, 0xa8, 0x38, 0x25, 0xb1, 0x15, 0x21, 0x04, 0xea, 0x4a, 0x99, 0xf1, 0xaf, 0x8b, 0x20, 0xf0, 0x01, 0x44, 0xd8, 0xdb, 0xdb, 0xa5, 0xae, 0x5c, 0x4a, 0x0c, 0x86, 0x3d, 0xd3, 0x21, 0xd7, 0xc8, 0x8b, 0x0c, 0xc9, 0x42, 0xa2, 0xd3, 0x8d, 0xa1, 0xa1, 0x50, 0x94, 0x39, 0x16, 0xe9, 0x02, 0xf3, 0x64, 0x86, 0xd4, 0xfc, 0xfd, 0x30, 0x0a, 0x21, 0x1c, 0x20, 0x8a, 0x43, 0x23, 0x6f, 0x48, 0xd4, 0xb5, 0xa6, 0x69, 0x80, 0x5a, 0x23, 0xee, 0x44, 0x70, 0x3c, 0x67, 0x65, 0xc4, 0xae, 0x94, 0x02, 0x34, 0xe0, 0x09, 0x69, 0xfc, 0xe5, 0x05, 0xf2, 0xbc, 0xb4, 0x3b, 0x24, 0x76, 0x50, 0x23, 0x39, 0xda, 0x02, 0xcf, 0xb9, 0xf9, 0x66, 0x0b, 0x38, 0xd9, 0xdb, 0xa7, 0x7d, 0xfe, 0xe6, 0xd6, 0x86, 0xd9, 0x5b, 0x57, 0xb8, 0xf8, 0xe4, 0x45, 0xbb, 0x6f, 0x54, 0x8a, 0x46, 0xd9, 0xc3, 0xe1, 0xd0, 0xee, 0xd9, 0xe6, 0x93, 0x19, 0xfa, 0xdd, 0x18, 0x8f, 0x3c, 0xfa, 0x35, 0x38, 0x2e, 0x15, 0x30, 0x8f, 0x3d, 0xf6, 0x08, 0xce, 0x5c, 0xb7, 0x03, 0xad, 0x1b, 0xcc, 0xe7, 0x0b, 0x7c, 0xf1, 0x4b, 0x5f, 0x46, 0xa3, 0x81, 0x34, 0x29, 0x31, 0x5a, 0x5f, 0xc3, 0x03, 0x5f, 0x79, 0x12, 0x01, 0xd5, 0x40, 0x38, 0x77, 0x6e, 0x68, 0xc7, 0x7c, 0x9d, 0xb8, 0x87, 0xf1, 0x78, 0x0c, 0xad, 0x61, 0xd0, 0xfd, 0x99, 0xd9, 0xa1, 0xfb, 0xc6, 0x1f, 0x1a, 0xd0, 0xba, 0x30, 0x15, 0xb4, 0xc1, 0x4a, 0x64, 0x05, 0x7a, 0xbd, 0x2e, 0xe2, 0x38, 0x44, 0x92, 0x24, 0xd0, 0x68, 0xac, 0x28, 0xc8, 0x64, 0x32, 0x81, 0x1f, 0x00, 0xa7, 0x4e, 0x6f, 0xe2, 0xc6, 0x1b, 0x6f, 0x34, 0x68, 0x68, 0x52, 0xd4, 0xeb, 0x0f, 0x62, 0x6c, 0x6e, 0x8d, 0x70, 0xf9, 0xa9, 0x8b, 0x54, 0x94, 0xf6, 0x06, 0x70, 0x5d, 0x89, 0x8b, 0x17, 0x9f, 0xc4, 0xee, 0xee, 0x2e, 0x16, 0xe9, 0x1c, 0x71, 0x27, 0xc4, 0x81, 0x01, 0xfd, 0xf9, 0x3e, 0x01, 0x11, 0x87, 0xc3, 0xa1, 0x95, 0xdb, 0xbc, 0x7c, 0xf9, 0x32, 0xb4, 0x2a, 0x70, 0xe9, 0xd2, 0x25, 0x8b, 0x14, 0x26, 0x1a, 0xa4, 0xb0, 0x32, 0x9b, 0x6d, 0xde, 0x29, 0x77, 0xcb, 0x59, 0x96, 0x61, 0x32, 0x99, 0x90, 0xba, 0x60, 0xb7, 0x6f, 0x1f, 0x58, 0x46, 0xab, 0x9e, 0x34, 0xc0, 0x68, 0x2b, 0x78, 0xb5, 0x83, 0x0b, 0xd3, 0x46, 0x69, 0x84, 0x4a, 0xd7, 0x48, 0x6b, 0xb5, 0xe2, 0xf8, 0xe4, 0xfb, 0xd1, 0xca, 0x18, 0x91, 0x5f, 0xb5, 0xb1, 0xbb, 0xac, 0x2a, 0x81, 0xc2, 0xa0, 0x7c, 0xa1, 0x49, 0xf4, 0x42, 0xc0, 0x81, 0x03, 0xa3, 0x7b, 0x2e, 0x5c, 0x94, 0x05, 0x05, 0x2a, 0x21, 0x59, 0xfa, 0x12, 0xc6, 0x3e, 0x14, 0xc8, 0x17, 0xc4, 0xc5, 0xe6, 0x20, 0xaf, 0x34, 0x89, 0x6d, 0xb8, 0x2e, 0x75, 0xf8, 0xe4, 0xa3, 0xed, 0x22, 0xcb, 0x16, 0xd8, 0xde, 0xde, 0x44, 0xdc, 0x71, 0xad, 0xa3, 0x61, 0x55, 0x55, 0xd0, 0x59, 0x63, 0xa7, 0x7d, 0x34, 0x69, 0x52, 0xf0, 0x7d, 0x9a, 0x1e, 0x75, 0x3a, 0x91, 0x0d, 0x88, 0x6c, 0xcc, 0xc4, 0x1d, 0x3c, 0xf9, 0x4a, 0x28, 0x28, 0x5d, 0xc1, 0xf5, 0xa4, 0x65, 0x28, 0x70, 0xe7, 0x2e, 0xa5, 0x84, 0x23, 0xb5, 0x35, 0x70, 0x61, 0xd1, 0x19, 0x2a, 0x78, 0x68, 0xc2, 0x91, 0xa6, 0x29, 0x44, 0x93, 0x22, 0xcb, 0xc9, 0x29, 0x90, 0x80, 0x55, 0x21, 0xa4, 0x8c, 0xad, 0x60, 0xc9, 0xc1, 0xc1, 0x91, 0x15, 0xbb, 0x29, 0x0c, 0xad, 0x95, 0x7d, 0x28, 0xba, 0xdd, 0xae, 0x2d, 0xbe, 0x54, 0x03, 0x14, 0x39, 0x79, 0x72, 0x33, 0xeb, 0x27, 0x4d, 0x73, 0xcc, 0x8d, 0xd0, 0x11, 0x21, 0xef, 0xa5, 0x2d, 0x58, 0x98, 0xee, 0x36, 0x9f, 0x24, 0x38, 0x75, 0x6a, 0x1b, 0x45, 0x91, 0x63, 0x32, 0x3d, 0x32, 0x71, 0xe7, 0x46, 0xcb, 0x81, 0x66, 0xb9, 0xe7, 0x34, 0x25, 0x4b, 0xdf, 0xfe, 0xa0, 0x87, 0x30, 0x0a, 0xec, 0x68, 0x3e, 0x99, 0xce, 0xd0, 0xef, 0xf7, 0x4d, 0x51, 0xe8, 0x22, 0x8a, 0xc2, 0x15, 0xad, 0x85, 0xe3, 0x83, 0x31, 0x82, 0x20, 0xc0, 0xda, 0xfa, 0x68, 0x65, 0x12, 0x54, 0x94, 0x39, 0xa6, 0xb3, 0x09, 0x4e, 0x9d, 0x3a, 0xb5, 0x22, 0x27, 0xca, 0xdd, 0x1e, 0x63, 0x02, 0xfa, 0x7d, 0x2a, 0xbc, 0x98, 0x6d, 0xc0, 0xf8, 0x05, 0x56, 0x29, 0xbb, 0xf1, 0xe5, 0xe7, 0x01, 0x47, 0x22, 0xcf, 0x0a, 0x3c, 0x75, 0xf9, 0x00, 0x93, 0xe3, 0x19, 0xe6, 0x33, 0xd2, 0x16, 0xe9, 0xf7, 0x3a, 0x10, 0xce, 0x02, 0x4d, 0xa3, 0x90, 0x2d, 0x52, 0xa4, 0x69, 0x61, 0x0a, 0x70, 0xd7, 0x88, 0x38, 0x29, 0x48, 0x0f, 0xb6, 0x58, 0xe5, 0x11, 0x32, 0x37, 0x62, 0xfc, 0xac, 0xf0, 0x0e, 0x9f, 0xa9, 0x62, 0x45, 0x51, 0x58, 0x16, 0x8e, 0xf4, 0x1c, 0x64, 0x83, 0xc2, 0x4c, 0x72, 0x7c, 0x34, 0x0d, 0x19, 0xdf, 0x74, 0xbb, 0x74, 0xfe, 0xd8, 0x98, 0x88, 0x70, 0x4c, 0x12, 0x8e, 0xa3, 0xd1, 0xd4, 0xda, 0xe0, 0x5c, 0xe4, 0x8a, 0xfe, 0x3d, 0x7f, 0x6e, 0x7b, 0x7c, 0x7d, 0xd2, 0x34, 0x85, 0xff, 0xcc, 0x0a, 0xc5, 0x98, 0xf3, 0xd1, 0x2e, 0x38, 0x1d, 0xc7, 0xb1, 0xdf, 0x87, 0x0b, 0x73, 0xbe, 0x07, 0xd8, 0x34, 0x8a, 0x8b, 0x00, 0x66, 0x23, 0x50, 0xd1, 0xb5, 0xb0, 0x31, 0x9c, 0xe3, 0x86, 0x80, 0xbc, 0x42, 0x4f, 0xbe, 0x0d, 0x12, 0x65, 0x80, 0x22, 0x17, 0x31, 0x42, 0x08, 0xda, 0xa1, 0xc7, 0x31, 0x21, 0x1d, 0xa1, 0x1d, 0xeb, 0xa6, 0x56, 0x98, 0xf1, 0x72, 0x55, 0x55, 0xf0, 0x83, 0xe5, 0xc8, 0xbc, 0xbd, 0xaf, 0xb9, 0xfe, 0x86, 0xb3, 0x38, 0xd8, 0x3f, 0xc4, 0xc1, 0xc1, 0x21, 0x76, 0xd3, 0x3d, 0x34, 0x8d, 0x46, 0x59, 0x36, 0x76, 0xaf, 0x71, 0x74, 0x44, 0x15, 0x52, 0x14, 0x45, 0xe8, 0xf7, 0x06, 0xf0, 0x03, 0xcf, 0x3a, 0xff, 0x04, 0x41, 0x80, 0xc9, 0xf1, 0xcc, 0xe8, 0x34, 0x27, 0x00, 0x1c, 0xf4, 0x7b, 0xc4, 0x0b, 0x7f, 0xf2, 0xc9, 0x27, 0x71, 0xe9, 0xd2, 0x2e, 0x9e, 0xda, 0xdd, 0xc5, 0xe5, 0xcb, 0x97, 0xe1, 0x08, 0x17, 0x5a, 0x0b, 0x1c, 0x1e, 0x1e, 0x23, 0xf0, 0x09, 0x90, 0x93, 0x24, 0x29, 0xb2, 0xc5, 0x02, 0xd0, 0x0e, 0x54, 0x03, 0xcb, 0x7b, 0x6d, 0x1a, 0x32, 0x15, 0x89, 0xa2, 0x08, 0x4d, 0x99, 0x62, 0x63, 0x63, 0x03, 0xa7, 0x4e, 0x6d, 0xdb, 0x0a, 0x69, 0x36, 0x9b, 0x58, 0x70, 0x95, 0x27, 0x1d, 0x5c, 0xfc, 0xfa, 0x25, 0xcc, 0x66, 0x09, 0xf2, 0xbc, 0x44, 0x59, 0xd4, 0xe6, 0xa1, 0x27, 0x90, 0x0e, 0xdf, 0x44, 0xdb, 0xdb, 0xdb, 0x08, 0x02, 0x1f, 0x51, 0x37, 0xc2, 0xd6, 0xd6, 0x06, 0x84, 0x74, 0x90, 0x24, 0x33, 0xf8, 0x4e, 0x64, 0xa5, 0x16, 0xa3, 0x68, 0x29, 0x91, 0xba, 0x58, 0xcc, 0x69, 0x07, 0xe9, 0xd3, 0x28, 0x32, 0x08, 0x3d, 0x33, 0x9d, 0xa0, 0x5d, 0x6e, 0xaf, 0xd7, 0xc3, 0x68, 0x34, 0x58, 0x51, 0x26, 0x62, 0x60, 0x11, 0x1b, 0x86, 0xf0, 0xcd, 0x43, 0xd3, 0x05, 0xd7, 0xee, 0x8f, 0x19, 0x4d, 0x19, 0xc7, 0x31, 0xd2, 0x22, 0xb1, 0x55, 0x63, 0x7b, 0x6c, 0x54, 0x96, 0x39, 0xca, 0x32, 0x44, 0xe4, 0x93, 0x1c, 0xa3, 0xe7, 0x51, 0x37, 0xc1, 0x3b, 0x64, 0x76, 0x15, 0x7a, 0xf4, 0xd1, 0x87, 0xed, 0x0d, 0x49, 0x1c, 0x7c, 0x12, 0xc9, 0x99, 0xcd, 0x66, 0xd8, 0xdf, 0xdf, 0x35, 0x28, 0x7d, 0xda, 0xbf, 0x31, 0x07, 0x9c, 0xe5, 0x35, 0x5d, 0xd7, 0x45, 0x95, 0x91, 0x74, 0x26, 0x9a, 0x06, 0x8f, 0x3f, 0xf9, 0x04, 0xbc, 0x38, 0xc4, 0xad, 0xcf, 0xbf, 0x15, 0x49, 0xba, 0x80, 0x1f, 0xfa, 0xd8, 0xdd, 0x3d, 0xc0, 0x74, 0x5a, 0x92, 0x0e, 0x7b, 0x0d, 0x14, 0x65, 0x8d, 0xfe, 0x20, 0xc4, 0xe9, 0xeb, 0x76, 0xd0, 0x1f, 0x0e, 0x50, 0x4d, 0xc6, 0xb6, 0xc2, 0x4c, 0x92, 0xc4, 0x50, 0xef, 0x84, 0x7d, 0xb8, 0x27, 0x93, 0x89, 0x0d, 0x24, 0x9e, 0x47, 0xd5, 0x3d, 0xaf, 0x28, 0xb4, 0xd6, 0x28, 0x33, 0xd2, 0xe2, 0xef, 0x76, 0xbb, 0x50, 0x9a, 0xf5, 0xa7, 0x2b, 0x28, 0x45, 0x62, 0x24, 0xb3, 0x04, 0x38, 0x3e, 0x3e, 0xc4, 0x78, 0xdc, 0x45, 0x9a, 0xc6, 0xd6, 0x0b, 0x3a, 0x52, 0x54, 0xd8, 0x74, 0xba, 0x11, 0xaa, 0xba, 0x40, 0x3e, 0xa5, 0x31, 0xfd, 0xe1, 0xd1, 0x01, 0x82, 0xd0, 0xc3, 0xfa, 0xc6, 0x75, 0xd8, 0xd9, 0x39, 0x85, 0x4b, 0x4f, 0x1d, 0x98, 0x8a, 0x9a, 0x80, 0x94, 0x3c, 0xc5, 0xe2, 0x9d, 0xb4, 0x23, 0x4a, 0xa3, 0x69, 0x4f, 0xb8, 0x89, 0xe1, 0xb0, 0x6f, 0x9c, 0xa0, 0x18, 0xe7, 0x40, 0xc7, 0xcd, 0x2a, 0x7a, 0x79, 0xce, 0xaa, 0x7f, 0x47, 0x44, 0x8d, 0x99, 0x2f, 0xac, 0xad, 0x2a, 0xd3, 0x81, 0xda, 0xc2, 0x3f, 0x4c, 0x49, 0xe2, 0x8a, 0x9c, 0x03, 0x2e, 0xad, 0x10, 0x86, 0x80, 0x30, 0x9d, 0x7a, 0xcb, 0x40, 0x83, 0xf7, 0xe4, 0x54, 0x28, 0x50, 0xe0, 0x64, 0xf0, 0x98, 0xef, 0xbb, 0x36, 0x28, 0xa7, 0x29, 0x50, 0xe5, 0x95, 0x15, 0x48, 0x21, 0xed, 0x78, 0x0a, 0x78, 0x8d, 0xa6, 0xd1, 0xa1, 0xca, 0x96, 0x7c, 0x5a, 0x37, 0x58, 0x5a, 0xd1, 0xfa, 0x81, 0x71, 0x9d, 0xaa, 0x8c, 0xef, 0xbd, 0x01, 0x91, 0x49, 0xc7, 0x23, 0xe7, 0xac, 0xd0, 0x27, 0xdd, 0xea, 0xaa, 0x42, 0x9e, 0x13, 0x3e, 0xe2, 0xf6, 0xdb, 0x5f, 0x80, 0x46, 0x95, 0xd8, 0xd8, 0x58, 0x43, 0x51, 0x66, 0xf0, 0x7c, 0x81, 0xcc, 0x1c, 0x2f, 0x83, 0xfa, 0x18, 0x64, 0xc9, 0x3b, 0x7e, 0xde, 0xd7, 0xb7, 0xdd, 0xd7, 0xda, 0x8a, 0x6f, 0x75, 0x93, 0x59, 0x29, 0x65, 0xc6, 0x26, 0xb0, 0x62, 0x9d, 0x94, 0x04, 0x80, 0x74, 0x1c, 0x81, 0x34, 0x5d, 0x98, 0x84, 0x95, 0x5b, 0x4f, 0xf0, 0xa2, 0xcc, 0xa0, 0x54, 0x8d, 0x4e, 0x27, 0xb2, 0x58, 0x04, 0xad, 0x1b, 0x44, 0x71, 0x00, 0xcf, 0x30, 0x4d, 0x36, 0x36, 0x36, 0x08, 0x9b, 0x11, 0x52, 0x01, 0x3f, 0x4f, 0xa6, 0x46, 0x87, 0xa0, 0xc6, 0xee, 0xee, 0x25, 0x8c, 0x46, 0xeb, 0xc8, 0xd2, 0x02, 0xe3, 0x66, 0x6c, 0xbc, 0xec, 0x61, 0x4d, 0x6d, 0x98, 0x1e, 0x48, 0xd7, 0xaa, 0xb1, 0xfb, 0xf7, 0x3c, 0xa7, 0x35, 0x42, 0xbf, 0xdf, 0xc7, 0x0d, 0xc3, 0xb3, 0x18, 0x8d, 0x06, 0x90, 0xa2, 0x41, 0xe0, 0x4a, 0x8c, 0x46, 0x43, 0xb8, 0xa6, 0x48, 0x4f, 0x66, 0x29, 0x9e, 0xf7, 0x9c, 0xe7, 0xe2, 0x89, 0x27, 0x2f, 0x60, 0x3c, 0x2e, 0xe1, 0x00, 0x50, 0x55, 0x0d, 0x2f, 0x08, 0x68, 0xa2, 0x76, 0xbc, 0xc0, 0x2d, 0xb7, 0xec, 0xb4, 0x0a, 0x0e, 0x8a, 0xd7, 0x8b, 0x45, 0x8e, 0xc5, 0x82, 0x9a, 0xa8, 0xd0, 0x0d, 0x56, 0xba, 0x4b, 0x46, 0x5e, 0xf3, 0x3e, 0x98, 0x13, 0x0d, 0x17, 0x2a, 0xac, 0x0a, 0xc8, 0xb8, 0x9a, 0xf1, 0x78, 0xdf, 0xaa, 0xff, 0x71, 0xa2, 0x62, 0xf9, 0xdc, 0x38, 0x8e, 0x21, 0x34, 0x70, 0x34, 0x99, 0xe2, 0xeb, 0x4f, 0x5e, 0xc2, 0x93, 0x17, 0x77, 0x71, 0x78, 0x34, 0x45, 0xdd, 0x08, 0xf8, 0x61, 0x07, 0x41, 0x10, 0x62, 0x91, 0x16, 0x06, 0x75, 0x2e, 0xa1, 0x1a, 0xd2, 0x42, 0x70, 0x84, 0x03, 0x29, 0x5d, 0xb8, 0xd2, 0x45, 0x37, 0xa6, 0xce, 0x32, 0x0e, 0x42, 0x48, 0x08, 0xa4, 0x0b, 0x6a, 0x8e, 0xba, 0x51, 0x6c, 0x56, 0x79, 0x13, 0x14, 0x06, 0x9b, 0xc5, 0x34, 0xc8, 0x34, 0x29, 0x70, 0xa9, 0xbc, 0x88, 0xba, 0x04, 0x5e, 0xf8, 0xe2, 0x17, 0x60, 0x30, 0x18, 0xe0, 0xe0, 0xe0, 0x00, 0x79, 0x4e, 0x28, 0xf9, 0xc5, 0x62, 0x61, 0x27, 0x68, 0x8e, 0xef, 0xc2, 0x71, 0xa4, 0x65, 0x76, 0x00, 0x0e, 0x0e, 0x0e, 0x0e, 0x6c, 0xbc, 0xed, 0x0f, 0x07, 0xf6, 0xe7, 0xed, 0x55, 0x25, 0xff, 0x9c, 0x81, 0x8c, 0xb4, 0x82, 0x5a, 0xca, 0xc4, 0xf2, 0x34, 0x2d, 0xf2, 0x3d, 0x8b, 0x58, 0xe7, 0xc2, 0x7c, 0x36, 0xa3, 0xf5, 0x46, 0xa7, 0xd3, 0xb1, 0xab, 0xa8, 0xe9, 0x74, 0x6a, 0xdc, 0x35, 0x37, 0x71, 0xf1, 0xe2, 0x45, 0x6c, 0x6c, 0x6c, 0x60, 0x77, 0x77, 0x17, 0xb1, 0x51, 0x37, 0xa5, 0xc4, 0x5e, 0x9b, 0xef, 0xa8, 0xad, 0x72, 0xdf, 0xfe, 0xde, 0xd8, 0x16, 0xa5, 0xfc, 0xfe, 0x6d, 0x2b, 0x61, 0x46, 0xcc, 0xb3, 0xf4, 0x77, 0x10, 0x04, 0x70, 0x77, 0x76, 0x76, 0x10, 0xc7, 0x34, 0x8e, 0x3a, 0x3a, 0x9c, 0x18, 0x10, 0x95, 0xb4, 0x0a, 0x5a, 0x8e, 0x43, 0x2a, 0x67, 0x04, 0xa6, 0x09, 0xe1, 0x07, 0xae, 0x19, 0x2d, 0xcd, 0xf1, 0xb1, 0x8f, 0x7d, 0x0c, 0x83, 0xfe, 0xc8, 0xba, 0x8d, 0x65, 0x19, 0x89, 0x7a, 0xb0, 0x64, 0x1d, 0xf1, 0x32, 0x89, 0xdf, 0x47, 0x41, 0xb7, 0xb1, 0xdd, 0x49, 0x18, 0x16, 0x28, 0x1a, 0x85, 0xf1, 0xf8, 0xd0, 0x68, 0x4b, 0x13, 0xda, 0xfa, 0xe8, 0xe8, 0x08, 0xd3, 0xe9, 0xdc, 0xd0, 0x76, 0xf6, 0x91, 0xcc, 0x53, 0x23, 0x4b, 0x48, 0xf6, 0x8f, 0xd7, 0xed, 0x0c, 0x70, 0xe6, 0xcc, 0x75, 0x70, 0x5d, 0x1f, 0x4f, 0xec, 0xa5, 0x80, 0x74, 0xd0, 0x40, 0xa3, 0xcc, 0x97, 0x96, 0x89, 0x41, 0x10, 0xc0, 0x0b, 0x03, 0xac, 0x0d, 0x08, 0x79, 0x3a, 0x9d, 0xce, 0x50, 0x14, 0xb9, 0x09, 0x98, 0xda, 0x8e, 0x3d, 0xf7, 0x76, 0x67, 0xd6, 0x08, 0xc0, 0xf7, 0x43, 0x48, 0xc7, 0x43, 0x5d, 0x37, 0x48, 0xd3, 0x0c, 0x45, 0x51, 0x61, 0x38, 0xec, 0x63, 0x38, 0x1c, 0xe2, 0xf4, 0xce, 0x19, 0x00, 0x1a, 0xbb, 0x07, 0xbb, 0xb8, 0x74, 0xe9, 0x12, 0xa2, 0x0e, 0x19, 0x00, 0xf8, 0xd6, 0xb2, 0x94, 0xf6, 0xfa, 0x4e, 0xe8, 0xa0, 0x69, 0xc2, 0x55, 0x3d, 0x5e, 0xc3, 0xc5, 0xf7, 0x7d, 0x02, 0xe1, 0x84, 0x51, 0x00, 0xdf, 0x77, 0x4d, 0x57, 0x27, 0xed, 0x5e, 0x88, 0xf7, 0x5b, 0x4c, 0x1b, 0xc9, 0xf3, 0x9c, 0x2c, 0x16, 0x33, 0xe2, 0xb0, 0xb2, 0xca, 0x12, 0x3f, 0x98, 0x49, 0x92, 0x60, 0x32, 0x3f, 0xb2, 0xdf, 0xf7, 0x24, 0x67, 0xf2, 0x24, 0xfa, 0x91, 0x03, 0x24, 0xef, 0xa7, 0x16, 0x8b, 0x05, 0xa2, 0x00, 0x26, 0x39, 0x69, 0x64, 0x59, 0x89, 0x83, 0x83, 0x3d, 0x4c, 0x26, 0x47, 0x88, 0xa2, 0x08, 0xa7, 0x4f, 0x6f, 0xa3, 0xca, 0x4a, 0x54, 0x75, 0x81, 0x2c, 0x5f, 0xa0, 0xaa, 0x49, 0xc5, 0x2a, 0x59, 0xcc, 0xac, 0xca, 0x9c, 0xd3, 0x90, 0xfa, 0x5b, 0xdc, 0xe9, 0xe0, 0xfc, 0xf9, 0xf3, 0x08, 0x7b, 0x1d, 0xfb, 0x5d, 0x2e, 0x5c, 0xb8, 0x80, 0xdd, 0xdd, 0x14, 0x37, 0xdc, 0xb0, 0x8d, 0xc1, 0x70, 0x1d, 0x65, 0x25, 0xf0, 0xb9, 0x2f, 0x7c, 0x09, 0xfd, 0xe1, 0x08, 0x93, 0xe9, 0x1c, 0x70, 0x25, 0x62, 0x41, 0x34, 0xb3, 0xc0, 0xa7, 0xb1, 0x26, 0xfb, 0x3e, 0x6f, 0x6d, 0x6d, 0x21, 0x4d, 0x73, 0xc4, 0xfd, 0x5e, 0xcb, 0xf7, 0x57, 0x98, 0x24, 0xd2, 0xd8, 0xe2, 0xc6, 0x72, 0xf5, 0xb3, 0xc4, 0x8c, 0x84, 0xa9, 0x93, 0x1d, 0x8d, 0x46, 0xb8, 0xf5, 0xd6, 0x1e, 0x36, 0x47, 0x66, 0xad, 0x11, 0x7a, 0x2b, 0x92, 0x91, 0x6c, 0xf6, 0x11, 0xf8, 0x2e, 0x00, 0xda, 0x93, 0xf5, 0xfb, 0x5d, 0x9c, 0x3b, 0x77, 0x0e, 0xeb, 0xeb, 0x23, 0xab, 0xab, 0xbd, 0xbe, 0xbe, 0x6e, 0x2b, 0xe6, 0xba, 0xae, 0x31, 0x1e, 0x8f, 0xa1, 0xd4, 0x45, 0x5b, 0xe0, 0x9c, 0xda, 0x1e, 0x62, 0x63, 0x63, 0xc3, 0xc8, 0xf8, 0x86, 0x16, 0xaf, 0xc1, 0x0f, 0xf2, 0xe1, 0xe1, 0xb1, 0xbd, 0x17, 0x18, 0x9d, 0xca, 0x01, 0xb4, 0x2d, 0xd2, 0xc4, 0x3b, 0xea, 0xb6, 0x53, 0x18, 0xef, 0x16, 0xf9, 0x41, 0x6e, 0xf3, 0xe5, 0xf9, 0x47, 0x51, 0x56, 0x2d, 0xfd, 0xf3, 0xae, 0xd5, 0x30, 0x60, 0x61, 0xa2, 0x38, 0xf6, 0x56, 0x14, 0xa6, 0x58, 0x54, 0x87, 0x03, 0x56, 0x92, 0x24, 0x24, 0x21, 0x6a, 0xc6, 0x8b, 0x45, 0xd9, 0xa0, 0xc8, 0x33, 0x14, 0x46, 0x60, 0x86, 0xa9, 0x56, 0xdd, 0x6e, 0x0c, 0x3f, 0xf2, 0x71, 0x30, 0xde, 0xc7, 0x64, 0x4a, 0x1e, 0xdf, 0x3c, 0x96, 0x0e, 0x34, 0x79, 0x77, 0x7b, 0x9e, 0x0b, 0xa5, 0x6b, 0xd3, 0x89, 0x02, 0x75, 0x51, 0x19, 0x20, 0x4f, 0x81, 0x3c, 0x07, 0x36, 0x36, 0xd7, 0x90, 0xe7, 0x19, 0x1c, 0x09, 0x1c, 0x1d, 0x8d, 0x69, 0x3c, 0x58, 0x85, 0xd6, 0xaa, 0x73, 0x30, 0x20, 0x95, 0x37, 0x2e, 0x60, 0xc9, 0x7b, 0x5e, 0x5b, 0x00, 0x22, 0x07, 0x52, 0x5e, 0x37, 0x70, 0x97, 0xd8, 0xeb, 0xf5, 0x10, 0x86, 0x34, 0xa1, 0x61, 0xdd, 0x06, 0x76, 0xa0, 0x5b, 0x5b, 0xdb, 0xc0, 0xfa, 0xfa, 0x5a, 0xeb, 0x19, 0xa0, 0x69, 0xd5, 0x78, 0x3c, 0xc6, 0xc5, 0x8b, 0x17, 0x31, 0x3f, 0xda, 0xb5, 0x05, 0xeb, 0x7c, 0x3e, 0x87, 0x52, 0x0a, 0xdb, 0xde, 0xa6, 0x05, 0x89, 0x85, 0x9e, 0x8f, 0xe9, 0x64, 0x8e, 0x2c, 0x4b, 0xed, 0x14, 0x82, 0xfc, 0x16, 0xa8, 0x39, 0x60, 0x70, 0x2e, 0xc7, 0x3e, 0x3a, 0x4e, 0x60, 0x73, 0x73, 0xd3, 0x70, 0xc2, 0xfb, 0x76, 0x25, 0xb0, 0xbb, 0xbb, 0x6f, 0xd9, 0x36, 0x1b, 0x1b, 0x1b, 0x26, 0xd9, 0xd3, 0xf4, 0xa2, 0x69, 0x7c, 0x44, 0x71, 0x00, 0x08, 0x85, 0xdd, 0xdd, 0x7d, 0x38, 0x0e, 0x5d, 0x8f, 0x47, 0x1e, 0xfd, 0x9a, 0xa5, 0x2a, 0x86, 0xa1, 0x91, 0x0c, 0x2e, 0x32, 0x2b, 0x20, 0xc4, 0x08, 0x75, 0x9e, 0x64, 0xb0, 0xf8, 0x8d, 0x15, 0xe2, 0x09, 0x94, 0xdd, 0xef, 0x72, 0x7c, 0x68, 0xc7, 0x8b, 0xdd, 0xdd, 0x5d, 0x94, 0x65, 0x69, 0xe9, 0xac, 0x7c, 0xef, 0x32, 0x86, 0x63, 0x6b, 0x6b, 0x03, 0xa3, 0xd1, 0xc8, 0x16, 0x9b, 0x2c, 0xb1, 0xcb, 0xe7, 0xfa, 0xf0, 0xe0, 0x08, 0xe3, 0xa3, 0x43, 0xec, 0xed, 0x8e, 0x31, 0x5f, 0x14, 0xd0, 0x90, 0x10, 0x4e, 0x68, 0x70, 0x0a, 0x53, 0x24, 0x0b, 0x52, 0xcd, 0x54, 0x75, 0x83, 0x20, 0x70, 0xe1, 0x4a, 0x62, 0x71, 0x04, 0x5e, 0x60, 0x92, 0x12, 0x15, 0xa2, 0x3c, 0xca, 0x6f, 0x2b, 0xd5, 0x4d, 0x26, 0x13, 0x9b, 0x20, 0x47, 0x23, 0xe2, 0x9a, 0x47, 0x51, 0x84, 0x8d, 0x0d, 0x02, 0xa1, 0x9e, 0x3e, 0x7d, 0xda, 0x6a, 0x2b, 0x90, 0x21, 0x58, 0x82, 0xfd, 0xfd, 0xc4, 0xa2, 0xf0, 0xab, 0xb2, 0x81, 0x13, 0x38, 0xb6, 0x4b, 0xa6, 0xfd, 0x35, 0x89, 0xd8, 0x74, 0x3a, 0x64, 0xd7, 0xca, 0x54, 0x5f, 0x4e, 0xe8, 0x57, 0xd3, 0x52, 0x67, 0x9d, 0x74, 0x7e, 0x6e, 0x4f, 0x82, 0x56, 0x59, 0x74, 0x87, 0x19, 0x4a, 0xd3, 0x29, 0x69, 0xd5, 0xaf, 0xad, 0xad, 0xd9, 0x78, 0xce, 0xd4, 0x5e, 0x3a, 0x77, 0x19, 0xce, 0x9d, 0x3b, 0x47, 0xf6, 0xd3, 0x2e, 0x2c, 0x0b, 0x45, 0x29, 0x65, 0x0a, 0x51, 0xcf, 0x4e, 0x48, 0xb7, 0xb6, 0xb6, 0xb0, 0xb7, 0xb7, 0x67, 0x69, 0x87, 0x4d, 0xd3, 0x60, 0x3e, 0x27, 0x20, 0x28, 0xbb, 0x34, 0x8e, 0xc7, 0x63, 0xdb, 0x0c, 0x45, 0x51, 0x04, 0x79, 0xfe, 0x7a, 0xf1, 0xbf, 0x16, 0xc5, 0x1c, 0x75, 0x9d, 0x22, 0x08, 0x81, 0x6e, 0xd7, 0x45, 0xb7, 0x2b, 0x31, 0x18, 0xf8, 0x38, 0x73, 0x66, 0x0d, 0x9b, 0x5b, 0x7d, 0x84, 0xa1, 0x40, 0x96, 0x4d, 0x91, 0x65, 0x33, 0x28, 0x55, 0xa2, 0xaa, 0x32, 0x24, 0xc9, 0x14, 0x81, 0x37, 0x02, 0xb4, 0x44, 0x55, 0x01, 0x59, 0x46, 0xfe, 0xb7, 0x3c, 0x5e, 0xea, 0x76, 0xbb, 0x18, 0xad, 0x8f, 0xe0, 0xb8, 0x94, 0x70, 0x93, 0x2c, 0xc5, 0xa5, 0xdd, 0x5d, 0x5c, 0xda, 0xdd, 0x45, 0xad, 0x14, 0xe2, 0x6e, 0x0f, 0x49, 0x7a, 0x88, 0x4e, 0x27, 0xc4, 0xda, 0xfa, 0x00, 0x71, 0x27, 0x46, 0x5d, 0x57, 0xc8, 0xb2, 0x04, 0x8b, 0xc5, 0x1c, 0x69, 0xba, 0xc0, 0x2c, 0x9d, 0xa1, 0xd3, 0x8b, 0x51, 0xab, 0x06, 0x59, 0x9e, 0xa1, 0xd7, 0xef, 0x21, 0xee, 0x76, 0xb0, 0x48, 0x53, 0x64, 0x79, 0x86, 0xd8, 0x6b, 0xe0, 0x3b, 0x1a, 0x91, 0x2f, 0xd1, 0xef, 0x84, 0xe8, 0x45, 0x3e, 0x3a, 0xa1, 0x87, 0x5e, 0x1c, 0xa0, 0x17, 0xf9, 0x28, 0x8b, 0x1c, 0x51, 0x18, 0x20, 0x08, 0x3c, 0xb3, 0x67, 0xcd, 0xd0, 0x98, 0x2e, 0xb6, 0x28, 0x0a, 0xcc, 0xb3, 0x1c, 0xd2, 0xf3, 0x21, 0xa4, 0x44, 0x59, 0x57, 0x28, 0xeb, 0x12, 0x8e, 0xe7, 0xc0, 0xf5, 0x5d, 0x38, 0xae, 0xc0, 0xa9, 0x33, 0xa7, 0xa0, 0xa0, 0x30, 0x9d, 0x4d, 0x50, 0x54, 0xa4, 0x8f, 0xde, 0xef, 0x0f, 0xe0, 0xb9, 0x3e, 0x7c, 0x2f, 0x44, 0x14, 0x38, 0x10, 0xd0, 0x90, 0x52, 0xc0, 0xf7, 0x24, 0x54, 0x53, 0xa1, 0x28, 0x16, 0x70, 0x1c, 0x85, 0x5e, 0x2f, 0x42, 0x9a, 0xce, 0xe0, 0x79, 0x0e, 0xe2, 0x28, 0x40, 0xb7, 0x13, 0xa3, 0xd7, 0xeb, 0xa2, 0x13, 0xc7, 0x90, 0x8e, 0x8b, 0xa6, 0x56, 0xa8, 0x74, 0x85, 0xa3, 0xe3, 0x23, 0x4c, 0x67, 0x53, 0x28, 0xad, 0xa0, 0xa0, 0x50, 0x94, 0x05, 0x94, 0x56, 0xf0, 0x03, 0x1f, 0x79, 0x91, 0xd2, 0xce, 0xac, 0xa9, 0x50, 0xd6, 0x05, 0x16, 0x69, 0x82, 0xa2, 0xca, 0xa1, 0xd0, 0x20, 0x2f, 0x33, 0x44, 0x51, 0x00, 0xd7, 0x95, 0x50, 0x8a, 0x44, 0x27, 0xa4, 0x64, 0xb7, 0x38, 0x89, 0xba, 0xae, 0xa0, 0xa1, 0x11, 0x44, 0x01, 0xfc, 0xc0, 0x47, 0xd4, 0x89, 0xe0, 0xfa, 0x2e, 0xa4, 0x2b, 0x91, 0x15, 0x19, 0x7d, 0x0e, 0x7c, 0xc4, 0xbd, 0x11, 0x82, 0xb8, 0x8f, 0x5a, 0x4b, 0x08, 0x19, 0x20, 0xee, 0x0e, 0xe1, 0x87, 0x5d, 0x94, 0x8d, 0xc0, 0xee, 0xc1, 0x0c, 0xc7, 0xf3, 0x0c, 0x35, 0x3c, 0x44, 0xbd, 0x11, 0xb4, 0x0c, 0x31, 0x5d, 0x94, 0x98, 0x24, 0x39, 0x92, 0xbc, 0x46, 0xe5, 0x44, 0xf0, 0x7b, 0x1b, 0x90, 0xf1, 0x00, 0x59, 0xe5, 0xe2, 0xab, 0x5f, 0xfb, 0x3a, 0xfe, 0xd3, 0x27, 0xee, 0xc7, 0x17, 0xbf, 0x78, 0x01, 0x65, 0xe9, 0x43, 0x29, 0x09, 0x29, 0x7d, 0xa3, 0x5f, 0x50, 0x63, 0x6d, 0x18, 0x21, 0x0e, 0x04, 0x86, 0x5d, 0x1f, 0xfd, 0x88, 0xce, 0x01, 0x75, 0x03, 0x19, 0x1c, 0x87, 0xc0, 0x82, 0x9d, 0x6e, 0x4c, 0xe2, 0x2c, 0x9d, 0x10, 0x51, 0x10, 0xa0, 0xa9, 0x4a, 0xd4, 0x65, 0x01, 0x07, 0x40, 0xe0, 0x79, 0x10, 0x5a, 0xa3, 0xa9, 0x6a, 0x38, 0x10, 0xd0, 0x75, 0x09, 0x81, 0x06, 0x50, 0x0d, 0x9a, 0xaa, 0x42, 0x91, 0x65, 0xe8, 0xc6, 0x31, 0x06, 0xbd, 0x0e, 0x42, 0xdf, 0x07, 0x44, 0x8d, 0xa2, 0xc8, 0x30, 0x9f, 0x4f, 0x30, 0x9f, 0x4f, 0x51, 0xd5, 0xe4, 0x06, 0x46, 0xdd, 0x63, 0x86, 0xc8, 0x8f, 0x48, 0xd5, 0x59, 0xba, 0x70, 0xa5, 0x87, 0xd1, 0x60, 0x1d, 0xdd, 0x78, 0x80, 0x30, 0xe8, 0xc2, 0xf7, 0x62, 0x54, 0x65, 0x8d, 0xaa, 0xac, 0x31, 0x9b, 0xce, 0xd0, 0xef, 0xf5, 0xe1, 0x4a, 0x17, 0x9e, 0xeb, 0xa1, 0xae, 0x2a, 0x9c, 0xda, 0xde, 0x46, 0x7f, 0xd4, 0x47, 0x14, 0x77, 0x10, 0x46, 0x31, 0xe2, 0x4e, 0x17, 0xae, 0xe7, 0x21, 0xcb, 0x0b, 0x2c, 0xd2, 0x0c, 0xf3, 0x24, 0x41, 0x92, 0x64, 0x10, 0x8e, 0x44, 0xa3, 0x88, 0x4a, 0x54, 0x37, 0x0a, 0x41, 0x18, 0xc1, 0xf7, 0x03, 0x02, 0x03, 0xea, 0x02, 0x45, 0x91, 0xc2, 0x75, 0x05, 0xca, 0x2a, 0x43, 0xa7, 0x13, 0x62, 0xb1, 0x98, 0x41, 0x38, 0x0a, 0x75, 0x5d, 0x98, 0x35, 0x53, 0x61, 0x3b, 0x4f, 0xee, 0x4c, 0x19, 0x64, 0x93, 0x2c, 0x66, 0x76, 0xf7, 0x78, 0xd2, 0x77, 0x99, 0xb1, 0x05, 0xdc, 0xd9, 0xf3, 0xce, 0xf7, 0xf0, 0x70, 0x8c, 0xc3, 0x43, 0xd2, 0x25, 0x98, 0x4e, 0xe7, 0x50, 0xaa, 0x82, 0xeb, 0x0b, 0x0c, 0x86, 0x5d, 0x74, 0x06, 0x01, 0x2a, 0x95, 0x43, 0xfa, 0x0a, 0xa7, 0xce, 0xac, 0xd1, 0xe4, 0x21, 0xf6, 0x51, 0xd5, 0x39, 0xe6, 0xf3, 0x09, 0x8a, 0x2c, 0x87, 0x6e, 0x1a, 0xe8, 0x5a, 0x43, 0xc2, 0x41, 0x27, 0x0c, 0x21, 0x74, 0x03, 0x81, 0x1a, 0xae, 0x14, 0x70, 0x1d, 0xa0, 0xa9, 0x0a, 0x14, 0xf9, 0x02, 0xba, 0x69, 0xe0, 0x88, 0x0a, 0x69, 0x52, 0xc1, 0x11, 0xc0, 0xf9, 0xeb, 0x4f, 0xa3, 0xdf, 0xed, 0x61, 0xef, 0xd2, 0x1e, 0xf2, 0x45, 0x01, 0xcf, 0xf1, 0x31, 0x9f, 0xce, 0xd1, 0x1f, 0x74, 0x31, 0x1c, 0x0d, 0x10, 0xc5, 0xa1, 0x01, 0x89, 0x92, 0x06, 0xfb, 0x62, 0x31, 0x83, 0x1f, 0x90, 0xaa, 0x97, 0xef, 0xd3, 0x74, 0x41, 0x08, 0xa0, 0xaa, 0x4b, 0x54, 0x75, 0x09, 0xd5, 0x68, 0x24, 0xb3, 0x23, 0x74, 0x3b, 0x31, 0x74, 0xd3, 0x20, 0x99, 0xcd, 0xd0, 0xed, 0xc4, 0xb8, 0xfe, 0xdc, 0x59, 0xac, 0x8f, 0x46, 0x90, 0x42, 0x20, 0x0c, 0x05, 0x36, 0x37, 0x86, 0x18, 0xf4, 0x63, 0x4c, 0x27, 0x63, 0xcc, 0xa6, 0x47, 0x28, 0x8b, 0x14, 0x4f, 0x5c, 0x78, 0x0c, 0xb3, 0xe9, 0x31, 0xa4, 0xe7, 0xe0, 0x78, 0x32, 0xc3, 0xc1, 0xf8, 0x10, 0x10, 0x12, 0x61, 0xd4, 0x45, 0xb2, 0x28, 0x30, 0x9b, 0x17, 0xf0, 0xbc, 0x18, 0x45, 0x0a, 0xf4, 0xba, 0x23, 0x40, 0xfb, 0x50, 0xb5, 0x03, 0xdd, 0xb8, 0xd8, 0xdc, 0x38, 0x85, 0xc9, 0xd1, 0x0c, 0x55, 0xa1, 0x31, 0x9b, 0xcf, 0xcc, 0xd4, 0x82, 0x82, 0xe9, 0x68, 0x34, 0xc2, 0xda, 0xda, 0xc8, 0xc4, 0xb1, 0x14, 0x9d, 0x98, 0xac, 0x4a, 0x55, 0x53, 0x23, 0x0c, 0xc9, 0xe4, 0xc7, 0x95, 0x02, 0xb3, 0xd9, 0x31, 0xc6, 0xe3, 0x3d, 0x4c, 0xa7, 0x33, 0x44, 0x31, 0x69, 0xb3, 0x53, 0x11, 0x9f, 0x99, 0x82, 0x85, 0x9e, 0x87, 0x4e, 0xec, 0xa2, 0xdf, 0x8f, 0xd1, 0xed, 0xf9, 0xf0, 0x7d, 0x01, 0xd7, 0x55, 0x00, 0x6a, 0x00, 0x35, 0x5c, 0x57, 0x21, 0x4f, 0x16, 0x98, 0x4f, 0xa7, 0xd0, 0x0d, 0x10, 0x87, 0x31, 0xa4, 0x90, 0x40, 0x23, 0xe0, 0x49, 0x0f, 0x9e, 0xf4, 0x10, 0xc7, 0x1d, 0x74, 0xe2, 0x0e, 0xd2, 0x45, 0x8a, 0x7e, 0xbf, 0x87, 0x2c, 0xcb, 0x70, 0xd3, 0x4d, 0x37, 0xd1, 0x74, 0xaa, 0x13, 0x63, 0x63, 0xb3, 0x8f, 0x34, 0x9b, 0x43, 0xa3, 0xc6, 0xe6, 0xe6, 0x08, 0xfd, 0x7e, 0x8c, 0x46, 0x95, 0xe8, 0x76, 0x43, 0x9c, 0xbb, 0x7e, 0x07, 0x61, 0x10, 0x9b, 0xfd, 0xac, 0x84, 0x2b, 0x7d, 0x38, 0xc2, 0xc3, 0x7c, 0x9a, 0x61, 0xf7, 0xf2, 0x01, 0xf6, 0x76, 0x8f, 0x70, 0xe1, 0xf2, 0x11, 0x8e, 0xa6, 0x05, 0xd2, 0x42, 0xa0, 0x56, 0x3e, 0xca, 0xd2, 0x45, 0x9a, 0x56, 0x28, 0x72, 0x01, 0xd5, 0x48, 0x48, 0x11, 0x40, 0xd5, 0x02, 0xaa, 0xd1, 0x70, 0x1c, 0x0f, 0xd2, 0x73, 0xe1, 0x05, 0x01, 0xa2, 0x6e, 0x07, 0x9d, 0x7e, 0x0f, 0x51, 0xa7, 0x83, 0xb8, 0xdb, 0x87, 0x86, 0x44, 0x56, 0x54, 0xd0, 0x42, 0xa2, 0x6e, 0x80, 0xf9, 0x22, 0x43, 0x56, 0x54, 0x48, 0xb2, 0x05, 0x84, 0x94, 0x58, 0x64, 0x19, 0x14, 0x55, 0xa5, 0xe8, 0xf4, 0x7a, 0xe8, 0xf6, 0xfb, 0xa8, 0x95, 0x42, 0xd5, 0x48, 0x1c, 0x4f, 0xe6, 0xf8, 0xda, 0xc3, 0x4f, 0x40, 0x69, 0x00, 0x42, 0xe3, 0xf6, 0x17, 0xbe, 0x00, 0xf3, 0x24, 0x45, 0xad, 0x14, 0xb4, 0xd2, 0x70, 0x84, 0x44, 0x53, 0x37, 0x58, 0x5f, 0xdb, 0x40, 0x91, 0x17, 0x90, 0x8e, 0x40, 0x96, 0xe6, 0xf0, 0x5c, 0x89, 0xba, 0xd6, 0x68, 0xea, 0x06, 0xd0, 0x84, 0x0d, 0x91, 0x8e, 0x0b, 0xad, 0x00, 0xad, 0x34, 0xa0, 0x05, 0xea, 0xaa, 0x46, 0x5d, 0x35, 0xd0, 0x4a, 0x63, 0x38, 0x18, 0x61, 0x91, 0x2c, 0xe0, 0x08, 0x09, 0xd5, 0x68, 0x84, 0x41, 0x04, 0x18, 0xec, 0x05, 0x8f, 0xe3, 0x4f, 0x4a, 0x4a, 0x4f, 0xa7, 0x73, 0x38, 0x8e, 0x84, 0xe7, 0xf9, 0xa8, 0xaa, 0x1a, 0x80, 0xc0, 0xce, 0xce, 0x19, 0x08, 0xe1, 0x20, 0x08, 0x42, 0x54, 0x8e, 0x83, 0x45, 0x5e, 0xc2, 0x0f, 0x02, 0x32, 0xb1, 0xca, 0x32, 0x74, 0x62, 0x1f, 0x79, 0xbe, 0x40, 0xbf, 0x1b, 0x40, 0x68, 0x8d, 0x5a, 0x95, 0xe8, 0x76, 0x23, 0x64, 0x79, 0x8a, 0xaa, 0x29, 0xd1, 0x1d, 0xf4, 0xd0, 0x38, 0x1a, 0xc2, 0x75, 0x30, 0x3b, 0x9c, 0x41, 0x2b, 0xf6, 0x0d, 0xa1, 0x63, 0x77, 0xb5, 0x06, 0x49, 0x09, 0x46, 0x91, 0x95, 0x54, 0xe4, 0x4e, 0x8e, 0xd4, 0xc5, 0xe6, 0xa6, 0x8b, 0xa5, 0xbd, 0x74, 0x59, 0x56, 0x66, 0xe4, 0xd2, 0xc1, 0xe1, 0xd1, 0x11, 0x81, 0x2b, 0x0c, 0x12, 0xde, 0xf5, 0x3d, 0x44, 0x9d, 0xd8, 0x8c, 0xfc, 0x7c, 0xb8, 0xbe, 0x87, 0x5a, 0xd1, 0xf8, 0xfa, 0xf0, 0xf0, 0xd0, 0x9a, 0x3c, 0xf8, 0x61, 0x80, 0xac, 0xc8, 0x11, 0x46, 0x14, 0xdc, 0xe2, 0x4e, 0x0f, 0xa1, 0x71, 0x02, 0xab, 0x95, 0x42, 0xa3, 0x14, 0x4a, 0xe3, 0x59, 0x4b, 0xfb, 0x02, 0x81, 0x6e, 0xaf, 0x03, 0x57, 0x52, 0x65, 0xa9, 0x1a, 0x42, 0x79, 0x0e, 0x47, 0x6b, 0x2b, 0x28, 0x44, 0xae, 0xc4, 0x59, 0x38, 0xc4, 0x75, 0x1d, 0x78, 0x9e, 0xb4, 0x5c, 0xcd, 0x28, 0x0a, 0x56, 0x84, 0x01, 0xa2, 0x5e, 0xdc, 0xd2, 0xc0, 0x6e, 0xcc, 0x48, 0xcf, 0x41, 0x1c, 0x87, 0x18, 0x0e, 0xfb, 0xa6, 0x7a, 0xe6, 0xdf, 0xd7, 0x86, 0x7e, 0xc7, 0xbb, 0x16, 0x85, 0x34, 0x4b, 0x97, 0xa0, 0x2d, 0x53, 0x59, 0x2e, 0xad, 0x57, 0xa5, 0xf5, 0xa2, 0x26, 0xa5, 0xbb, 0xd2, 0x52, 0x34, 0x78, 0xf7, 0xe6, 0x77, 0x02, 0xbb, 0xdf, 0x3c, 0x3a, 0x3a, 0xb2, 0x01, 0x9b, 0x9d, 0x81, 0xd8, 0xff, 0xbb, 0x2d, 0xaa, 0xd1, 0xd6, 0x0e, 0x9e, 0x4e, 0x8f, 0x2d, 0x8b, 0x80, 0xff, 0x1e, 0xa3, 0x2e, 0x5d, 0xd7, 0xb5, 0xc8, 0x54, 0xee, 0x12, 0x98, 0x3a, 0xc5, 0xd4, 0x26, 0xae, 0x04, 0xdb, 0xfa, 0xf7, 0x3c, 0x7e, 0x63, 0xb5, 0x3a, 0xee, 0xb8, 0xf9, 0x33, 0x99, 0x07, 0xee, 0xfb, 0x3e, 0x84, 0xe3, 0x63, 0x3e, 0x9f, 0xe3, 0xf1, 0xc7, 0x1f, 0x47, 0x91, 0x13, 0x88, 0x6a, 0x7d, 0x7d, 0x1d, 0x8e, 0x70, 0x31, 0x1c, 0x0e, 0xad, 0xb6, 0x3a, 0x39, 0x98, 0x69, 0xdb, 0x65, 0x12, 0x10, 0x8f, 0x3c, 0xe7, 0x49, 0xce, 0xd3, 0x85, 0xef, 0xaf, 0x7e, 0x37, 0xae, 0x94, 0x79, 0xdc, 0xd5, 0xa6, 0xe5, 0xf1, 0x0e, 0x49, 0xeb, 0xaa, 0x25, 0xdb, 0x08, 0x73, 0x5e, 0x17, 0xa8, 0x6b, 0x12, 0x5f, 0xa9, 0x9b, 0xdc, 0x5c, 0x7b, 0xb1, 0xa2, 0xf4, 0xc5, 0x93, 0xa7, 0xaa, 0xa9, 0xe0, 0x0a, 0x17, 0x0a, 0x8a, 0x44, 0xa4, 0xcc, 0x0f, 0x0d, 0x02, 0x42, 0x56, 0x4d, 0x85, 0xbc, 0xcc, 0x91, 0xe6, 0x29, 0x0e, 0x8f, 0x0f, 0x8d, 0x8c, 0x6f, 0x17, 0x1b, 0x5b, 0x1b, 0x64, 0xcc, 0x11, 0x7b, 0x36, 0xe1, 0xf2, 0xd4, 0xe0, 0xe4, 0x8f, 0xd9, 0x6c, 0x66, 0x47, 0x79, 0xd4, 0xc9, 0x65, 0xf6, 0xd7, 0x8c, 0x29, 0x69, 0x8f, 0xfc, 0xda, 0x46, 0x22, 0x51, 0xd4, 0x59, 0x91, 0x9b, 0x6c, 0x4b, 0x40, 0x32, 0xe2, 0xb8, 0x1d, 0x40, 0x58, 0x8b, 0x81, 0xc1, 0x4f, 0x6d, 0xb9, 0xca, 0xf6, 0x6a, 0x87, 0xef, 0xb1, 0x6e, 0x97, 0x00, 0x67, 0x65, 0x4d, 0x9d, 0x5e, 0xd4, 0x25, 0xcd, 0x01, 0x61, 0xae, 0x73, 0x55, 0x3a, 0x76, 0xc4, 0xef, 0x79, 0x1e, 0x5c, 0x99, 0x1a, 0x89, 0xe3, 0x02, 0xae, 0xbb, 0xa4, 0xa6, 0x29, 0xad, 0x2c, 0xdf, 0xdf, 0x91, 0x1a, 0x10, 0xb5, 0xed, 0x68, 0x5f, 0xfa, 0xd2, 0xe7, 0x91, 0x45, 0x66, 0x92, 0x60, 0x6f, 0x6f, 0x8f, 0x0a, 0x7d, 0x23, 0x6e, 0xb4, 0xb9, 0xb5, 0x6e, 0xbb, 0x9a, 0xba, 0xae, 0xec, 0xb3, 0x2e, 0x0c, 0x7b, 0x84, 0x34, 0x03, 0x42, 0x43, 0xf9, 0xd4, 0x50, 0x2a, 0xb7, 0xe7, 0x88, 0x80, 0x9f, 0x7d, 0x54, 0x4d, 0x8d, 0xaa, 0xa9, 0x11, 0xc6, 0x91, 0xe5, 0x51, 0x0b, 0x21, 0xd0, 0x95, 0x12, 0x71, 0xc7, 0x47, 0xd5, 0xd4, 0xb8, 0xb4, 0x7b, 0xd9, 0xd2, 0x46, 0x8b, 0xf9, 0x0c, 0x5a, 0x00, 0xfd, 0xe1, 0x00, 0x49, 0x32, 0x45, 0x56, 0x90, 0x35, 0xb2, 0x16, 0x40, 0x63, 0xb0, 0x0a, 0xbe, 0xef, 0xc3, 0x0f, 0x02, 0x8c, 0x46, 0x9b, 0xf0, 0x02, 0x1f, 0x8f, 0x3d, 0xf8, 0x00, 0xa2, 0xb0, 0x83, 0x34, 0x4f, 0xb1, 0xfb, 0x95, 0x3d, 0x6c, 0x6d, 0x6d, 0x61, 0x77, 0x7f, 0x0f, 0xe3, 0xf1, 0x18, 0xbd, 0x5e, 0x0f, 0xdb, 0xdb, 0xdb, 0x56, 0xc1, 0xaf, 0x2d, 0x02, 0xc2, 0x6a, 0x63, 0x4a, 0x29, 0x7c, 0xf5, 0xd1, 0x4b, 0xb8, 0xe5, 0x86, 0x6d, 0x0b, 0xfa, 0xaa, 0xeb, 0x1a, 0x42, 0x3a, 0x56, 0x27, 0x3d, 0xcb, 0x52, 0x4b, 0x11, 0xe6, 0xf1, 0x6e, 0x51, 0xd4, 0x04, 0x66, 0x34, 0xcf, 0x6f, 0xa7, 0x13, 0x63, 0x7d, 0x7d, 0x1d, 0xae, 0x4b, 0x14, 0x26, 0xc7, 0x8c, 0xa6, 0x79, 0x7a, 0x94, 0x65, 0x19, 0xa0, 0x97, 0x34, 0x56, 0x7e, 0x76, 0x39, 0xe9, 0x30, 0xf8, 0xed, 0xd4, 0xa9, 0x53, 0xc4, 0x9b, 0x0f, 0x25, 0x3a, 0x1d, 0x5a, 0xbf, 0xb1, 0x46, 0x42, 0xbf, 0x3f, 0xb0, 0xc8, 0xfe, 0x2c, 0x2d, 0xac, 0xf6, 0x48, 0x53, 0x57, 0x98, 0x4e, 0xa7, 0xd8, 0xbd, 0x4c, 0x94, 0xd5, 0xb2, 0xac, 0x71, 0x69, 0x7c, 0x4c, 0xda, 0xf5, 0x8e, 0x07, 0xa5, 0x68, 0xdd, 0x5a, 0x14, 0x35, 0x1c, 0xe1, 0x1a, 0x0e, 0x7c, 0x8e, 0x30, 0xf4, 0xd1, 0xef, 0x77, 0xe1, 0xf9, 0xd2, 0x4c, 0x9f, 0x3c, 0x74, 0x3a, 0x31, 0x46, 0xa3, 0x21, 0x0e, 0x8f, 0xf7, 0x09, 0xbf, 0x61, 0xd6, 0x45, 0xdc, 0x09, 0xf3, 0x3d, 0xca, 0xeb, 0x17, 0x2e, 0x46, 0xdb, 0xf1, 0x03, 0x00, 0xbc, 0x80, 0xe8, 0xbe, 0x77, 0xdc, 0xd1, 0xb7, 0x74, 0x3d, 0x56, 0x67, 0x23, 0xd4, 0xfe, 0xd4, 0xe2, 0x45, 0x78, 0xb5, 0x48, 0xf1, 0x84, 0x56, 0x0a, 0x7e, 0xb0, 0x1a, 0x6b, 0xda, 0xcf, 0x18, 0x8f, 0xb6, 0x79, 0x4a, 0x96, 0x24, 0x89, 0xc5, 0xb3, 0xb0, 0x78, 0x19, 0x5a, 0xd3, 0x2f, 0x8e, 0x2f, 0x6d, 0xd9, 0x58, 0x21, 0x1a, 0x1b, 0xf3, 0x99, 0x25, 0xc2, 0x2b, 0xeb, 0xaa, 0xaa, 0x80, 0xd0, 0x43, 0x32, 0x9b, 0x93, 0xec, 0xb0, 0xa0, 0xa9, 0x67, 0x9a, 0x2e, 0xb0, 0xb5, 0xbe, 0x81, 0xaa, 0x2e, 0xb0, 0x61, 0xcc, 0xcc, 0x20, 0x1d, 0x48, 0xd7, 0x43, 0x51, 0x95, 0x90, 0x5e, 0x60, 0xe4, 0xc5, 0x33, 0x74, 0x82, 0xf8, 0x0a, 0xad, 0x78, 0xf7, 0xf4, 0xe9, 0x9d, 0x15, 0x0e, 0x6c, 0x9e, 0x53, 0x65, 0xc1, 0x60, 0x36, 0xde, 0x09, 0xf0, 0xc8, 0x80, 0xbf, 0xe0, 0x70, 0x18, 0xe1, 0xcc, 0x99, 0x0d, 0xda, 0x0d, 0x66, 0xcb, 0x31, 0x22, 0x8d, 0x05, 0xe6, 0xa8, 0xaa, 0x1a, 0xc3, 0xe1, 0xd0, 0xca, 0x34, 0xb2, 0x10, 0x09, 0xcb, 0x5b, 0x12, 0x4f, 0x93, 0xf6, 0xd9, 0x69, 0x9a, 0x1b, 0x75, 0x36, 0x17, 0x45, 0x51, 0x92, 0xc4, 0xe9, 0x22, 0xb7, 0xa0, 0x05, 0xba, 0x11, 0xc8, 0x9f, 0x1c, 0xc6, 0x72, 0x2e, 0x8c, 0x5c, 0x28, 0x34, 0x10, 0xd0, 0xa8, 0xab, 0x12, 0x75, 0x46, 0x17, 0xab, 0x83, 0x0e, 0x14, 0xb4, 0xbd, 0x20, 0x69, 0x4e, 0xd4, 0xa7, 0x36, 0x40, 0x86, 0x93, 0xd6, 0xc8, 0x80, 0x4e, 0xda, 0x56, 0x78, 0x3c, 0xb2, 0xe4, 0xe3, 0x6e, 0x03, 0x35, 0xe6, 0xf3, 0xb9, 0x4d, 0xaa, 0xa4, 0xff, 0x3e, 0xb5, 0x45, 0x04, 0x53, 0x85, 0xba, 0xfd, 0x8e, 0x0d, 0x80, 0x1c, 0xe4, 0xb9, 0x68, 0xe0, 0x0e, 0x8a, 0x03, 0x70, 0x3d, 0x57, 0x2b, 0xbb, 0x4f, 0xdf, 0xf7, 0x49, 0x10, 0xc4, 0xf0, 0x27, 0xd3, 0x34, 0xb1, 0xc7, 0xca, 0xf2, 0x8f, 0x4c, 0x8d, 0xa0, 0x24, 0x1f, 0xa2, 0xd7, 0xeb, 0x5b, 0xb0, 0x08, 0x01, 0xa1, 0x42, 0x73, 0x8c, 0x2e, 0xd2, 0x34, 0x37, 0x32, 0x89, 0x9e, 0x55, 0x0a, 0x63, 0x0b, 0xd5, 0xba, 0x6e, 0xac, 0x54, 0x2e, 0xab, 0x6d, 0xb5, 0xc7, 0xf6, 0x75, 0x5d, 0xc3, 0x37, 0xbb, 0x36, 0xe6, 0xb2, 0xf3, 0xef, 0xf3, 0xf8, 0xb3, 0xac, 0x4a, 0xcb, 0x5d, 0x4f, 0xd3, 0xcc, 0xa0, 0xa2, 0x2b, 0x3b, 0x0a, 0x0c, 0x23, 0x1f, 0xd2, 0x0d, 0xa0, 0xb5, 0x63, 0x00, 0x2b, 0xd4, 0x6d, 0xf1, 0x35, 0x68, 0x53, 0x6d, 0xda, 0x80, 0x0f, 0x7e, 0xc0, 0x8a, 0x22, 0x85, 0x23, 0x05, 0xfc, 0xc0, 0x5b, 0xd1, 0x32, 0x66, 0x14, 0xff, 0xe4, 0x28, 0x35, 0x88, 0x75, 0x69, 0x0a, 0x82, 0x8e, 0x49, 0x2a, 0x30, 0xbe, 0xd2, 0x1a, 0x8e, 0x63, 0x38, 0xde, 0xae, 0x63, 0x8a, 0x1f, 0x07, 0x80, 0x6b, 0xcf, 0x07, 0xbf, 0x17, 0x8f, 0xd7, 0x78, 0x4f, 0x5d, 0x14, 0x05, 0x2e, 0x5c, 0xb8, 0x60, 0x77, 0x8a, 0xf3, 0xf9, 0x9c, 0xec, 0x69, 0x4d, 0x70, 0x9d, 0x4e, 0xa7, 0x28, 0x2b, 0x7a, 0xe0, 0xe7, 0xf3, 0xb9, 0xa5, 0xa4, 0xf0, 0x48, 0x9b, 0xf9, 0xfe, 0x7c, 0xdd, 0x38, 0xd8, 0x73, 0xd2, 0x6d, 0x2b, 0x50, 0x71, 0x31, 0xc5, 0x41, 0xac, 0x6d, 0x82, 0xc1, 0xe0, 0x20, 0xa6, 0xa6, 0x71, 0xb1, 0xda, 0x36, 0x6c, 0xe0, 0xa0, 0xd2, 0x7e, 0x5e, 0xda, 0x9c, 0x55, 0x0e, 0x20, 0xed, 0x7d, 0x1f, 0x8f, 0xd4, 0x95, 0x52, 0x38, 0x9e, 0x4e, 0x50, 0x16, 0x15, 0x62, 0x21, 0x30, 0x1a, 0xad, 0x41, 0xb7, 0xa8, 0x73, 0x6c, 0x56, 0xc3, 0x45, 0x26, 0x27, 0xa0, 0x20, 0xf0, 0x91, 0xa7, 0xa9, 0x01, 0x82, 0xd2, 0x4a, 0xa4, 0x6e, 0xc8, 0x75, 0x8b, 0x69, 0x64, 0xdb, 0xa7, 0x36, 0x11, 0x86, 0xbe, 0x19, 0x01, 0xe7, 0x66, 0xe4, 0x4d, 0x85, 0x6a, 0xaf, 0xd7, 0x81, 0xef, 0x7a, 0xc8, 0xf3, 0x0c, 0x45, 0x91, 0xc3, 0x75, 0x1d, 0x84, 0x61, 0x60, 0xd0, 0xd7, 0xce, 0x8a, 0xd4, 0x2b, 0x29, 0x47, 0x9a, 0x09, 0x8e, 0xd9, 0xfb, 0xd6, 0x75, 0x8d, 0xba, 0x72, 0xed, 0xb9, 0xeb, 0xf7, 0xc9, 0xd7, 0xe1, 0x65, 0xaf, 0x78, 0x13, 0x6e, 0xbb, 0xfd, 0x76, 0xfc, 0xd8, 0x5b, 0xdf, 0x8c, 0xd7, 0x7f, 0xcf, 0x77, 0xa0, 0xaa, 0x2a, 0x6b, 0xde, 0xc3, 0x4a, 0x63, 0x5a, 0x6b, 0x1c, 0x1c, 0x1c, 0xa0, 0xaa, 0x72, 0x3b, 0xda, 0x27, 0xac, 0x42, 0x65, 0xe3, 0x58, 0xdd, 0x94, 0x78, 0xe2, 0x89, 0x0b, 0x06, 0x99, 0xec, 0x42, 0x88, 0x14, 0x8e, 0x04, 0xe2, 0x38, 0x42, 0x59, 0x16, 0x88, 0xe3, 0x08, 0xaf, 0xfc, 0x7b, 0xaf, 0xbc, 0x42, 0xb9, 0x8b, 0xb9, 0xd2, 0x45, 0x51, 0xe0, 0xf8, 0xd2, 0x31, 0x3a, 0xa2, 0x83, 0x57, 0xbc, 0xf2, 0x8d, 0x78, 0xc7, 0xff, 0x78, 0x27, 0x7e, 0xf9, 0x17, 0x7e, 0x12, 0x61, 0x1c, 0x22, 0xaa, 0x7b, 0xf8, 0x7b, 0x77, 0xfc, 0x43, 0x7c, 0xee, 0xd3, 0x7f, 0x6c, 0x26, 0x6c, 0xca, 0xac, 0x2d, 0xe8, 0x07, 0x73, 0xce, 0x1d, 0xd1, 0x58, 0xf3, 0xa4, 0x34, 0x65, 0x04, 0xbb, 0xb2, 0x4e, 0x75, 0x83, 0x4e, 0xd7, 0xd0, 0x66, 0xa9, 0x88, 0x59, 0x2c, 0x16, 0xc8, 0xd2, 0x1c, 0x69, 0x4a, 0x85, 0xd7, 0x6c, 0x36, 0xb3, 0x05, 0x78, 0x6d, 0xa8, 0x6d, 0x87, 0x87, 0x87, 0xe8, 0xf7, 0xcd, 0x88, 0xfb, 0x30, 0xb5, 0xc5, 0x25, 0x27, 0x7f, 0x7e, 0x0e, 0xe6, 0xf3, 0x39, 0x16, 0x49, 0x61, 0x30, 0x33, 0x01, 0x64, 0x8b, 0x4e, 0xc5, 0x68, 0x6b, 0xf6, 0x6f, 0x20, 0xe3, 0x2a, 0x05, 0xa5, 0x4a, 0xf3, 0x7c, 0x68, 0x43, 0xbd, 0x23, 0x36, 0x8c, 0x23, 0xb5, 0xd1, 0x30, 0xa9, 0x51, 0x96, 0x0d, 0x61, 0x48, 0xca, 0x05, 0x52, 0xe3, 0x76, 0xc9, 0x79, 0x83, 0xe3, 0x20, 0x8f, 0xaa, 0xeb, 0x06, 0x56, 0x64, 0x87, 0xe3, 0x24, 0xc7, 0x22, 0xc7, 0x71, 0xf0, 0xd4, 0xe5, 0x3d, 0x48, 0x29, 0xb1, 0xbd, 0xbd, 0x6d, 0x81, 0x83, 0x17, 0x2f, 0x5e, 0x24, 0x69, 0x71, 0xb3, 0xae, 0x61, 0x0e, 0x3d, 0x3f, 0x1b, 0x9c, 0x94, 0x95, 0x52, 0xa8, 0xea, 0xda, 0xba, 0xe7, 0x31, 0x78, 0x94, 0x8a, 0x05, 0xc2, 0x80, 0x11, 0xbb, 0x8b, 0x70, 0x32, 0xf3, 0x39, 0x19, 0x3e, 0x35, 0x4d, 0x0d, 0xdf, 0x8f, 0x31, 0x9b, 0xa5, 0x20, 0xeb, 0x32, 0x5c, 0x41, 0xa7, 0xe4, 0x73, 0xea, 0x79, 0x12, 0xbd, 0x5e, 0xc7, 0xd2, 0x4e, 0xf9, 0x1c, 0xb3, 0x67, 0xca, 0x74, 0x3c, 0xc3, 0x70, 0x38, 0x84, 0x2b, 0x80, 0x17, 0xbd, 0xf0, 0x36, 0x7c, 0xf5, 0x2b, 0x5f, 0x86, 0x84, 0x11, 0xd0, 0xea, 0xc6, 0xa8, 0xcd, 0x4a, 0x6d, 0x7d, 0x6d, 0x1d, 0xd7, 0xed, 0x9c, 0x45, 0x59, 0x57, 0xd8, 0x3f, 0xa0, 0xc6, 0x38, 0x4f, 0x33, 0x84, 0xb1, 0x47, 0x0e, 0x7c, 0x9e, 0x63, 0xf2, 0x54, 0x03, 0x97, 0xa8, 0x42, 0x1e, 0xa4, 0xe9, 0x84, 0xea, 0x4a, 0x21, 0x4b, 0x0b, 0x5b, 0x91, 0xa8, 0x06, 0x56, 0x8e, 0x95, 0x90, 0xaf, 0xe4, 0x1e, 0xa6, 0x95, 0xb0, 0xd5, 0x30, 0x7b, 0xf2, 0xba, 0xae, 0xdf, 0x0a, 0x26, 0xda, 0x06, 0x43, 0x16, 0x2f, 0xe0, 0x60, 0xc3, 0xda, 0xe3, 0xfd, 0x41, 0x44, 0xa3, 0xfa, 0x24, 0x25, 0xaf, 0x61, 0xc7, 0xb5, 0x7c, 0xe3, 0xba, 0xae, 0xd1, 0xe9, 0x0f, 0x0c, 0x3d, 0x48, 0x59, 0x8f, 0xdd, 0xc6, 0x58, 0xa0, 0xfa, 0x81, 0x07, 0x4f, 0xb2, 0x2e, 0xb7, 0x36, 0x2e, 0x6c, 0xc2, 0x72, 0x50, 0x59, 0xbd, 0x8d, 0x01, 0x4c, 0x6d, 0xdf, 0x5f, 0x29, 0x49, 0x78, 0xa3, 0x28, 0x33, 0x38, 0x46, 0x76, 0x51, 0xba, 0x82, 0xc4, 0x68, 0x24, 0x90, 0xe7, 0x05, 0x8a, 0x32, 0x6b, 0x39, 0x75, 0x01, 0x1a, 0x0d, 0xaa, 0x9a, 0x00, 0x35, 0xbc, 0x23, 0x65, 0x65, 0x2f, 0xde, 0x61, 0xf1, 0xe7, 0xb0, 0xe2, 0x55, 0x9b, 0xe3, 0xc8, 0x09, 0xdd, 0x3e, 0xb4, 0xbe, 0x0f, 0xe9, 0x7b, 0xb6, 0x63, 0xe3, 0x3d, 0x0c, 0xb9, 0x04, 0xc1, 0x80, 0x3b, 0x7a, 0x36, 0x51, 0x73, 0xa0, 0x69, 0x07, 0x71, 0xde, 0x89, 0x32, 0x95, 0xa1, 0xdd, 0x69, 0xf3, 0xcf, 0xb9, 0x9b, 0xe1, 0x04, 0xc2, 0x12, 0xa5, 0x14, 0x98, 0xc5, 0x15, 0x5e, 0xbe, 0x6d, 0x31, 0x85, 0xb2, 0x68, 0x6c, 0xb2, 0xe7, 0x1d, 0x30, 0x7f, 0xc7, 0xba, 0xae, 0x71, 0xe9, 0xf2, 0x1e, 0x3a, 0x9d, 0x9e, 0x49, 0x98, 0xc2, 0x80, 0x17, 0xe9, 0xef, 0x66, 0xf9, 0xc2, 0x58, 0x53, 0x12, 0xc2, 0xbe, 0x2d, 0xa5, 0xc8, 0x13, 0x0b, 0x06, 0xbf, 0xf1, 0x0f, 0xae, 0x34, 0x97, 0xd3, 0x80, 0xce, 0xca, 0x44, 0x85, 0x83, 0x66, 0x55, 0x91, 0xea, 0xe0, 0xda, 0xda, 0x1a, 0x8e, 0x8e, 0xc6, 0x76, 0x1a, 0xd2, 0xeb, 0x77, 0xcc, 0x03, 0xa9, 0xcc, 0x75, 0x6f, 0x6c, 0x32, 0x67, 0x60, 0x1d, 0x3f, 0x74, 0x8e, 0x03, 0x5b, 0x70, 0xf1, 0x67, 0xf3, 0x3d, 0xc2, 0x05, 0x14, 0x57, 0xfb, 0xec, 0x53, 0xcf, 0xd4, 0x1e, 0x06, 0x07, 0x56, 0x75, 0x66, 0xcf, 0x29, 0x63, 0x1c, 0x38, 0xc0, 0x97, 0x65, 0x89, 0x64, 0x3e, 0xb1, 0x05, 0x80, 0xdf, 0x42, 0xc4, 0xf2, 0x7d, 0x15, 0x77, 0xfc, 0x15, 0x33, 0x16, 0xae, 0xb2, 0x79, 0x6f, 0xcf, 0xfb, 0xb5, 0x76, 0x15, 0xde, 0xee, 0x08, 0xa2, 0x28, 0x6e, 0xf1, 0x50, 0x01, 0xcf, 0xf3, 0xed, 0xfd, 0x36, 0x9f, 0x27, 0x4b, 0x3c, 0x89, 0xe7, 0x01, 0x10, 0x70, 0x1c, 0x09, 0xd7, 0x05, 0x84, 0x70, 0x50, 0x96, 0x15, 0xa2, 0x90, 0xa6, 0x71, 0x5a, 0x00, 0xc7, 0x47, 0x13, 0x5b, 0x4c, 0xb1, 0xc3, 0x9b, 0x56, 0x1e, 0xca, 0xb2, 0x6a, 0x71, 0xe3, 0x95, 0xc5, 0x23, 0x38, 0x8e, 0x03, 0xd9, 0xa1, 0x6e, 0x47, 0x38, 0xda, 0xfe, 0x79, 0x1c, 0x87, 0xe8, 0x74, 0xd7, 0x8c, 0x1d, 0xaa, 0x8f, 0x3c, 0xcf, 0xb0, 0x58, 0x90, 0x2e, 0x3d, 0x09, 0xb7, 0x10, 0x96, 0x61, 0x6d, 0x6d, 0x88, 0xc7, 0x1f, 0x7d, 0xd2, 0xd0, 0x8a, 0xcc, 0x7d, 0xec, 0xb3, 0x8a, 0x24, 0xa9, 0x1a, 0xf2, 0x34, 0x0b, 0x20, 0xa6, 0x4a, 0xb7, 0xd3, 0xc7, 0x23, 0x17, 0xc6, 0xf8, 0xee, 0xef, 0xfe, 0xbe, 0xab, 0x9a, 0x46, 0xc5, 0x71, 0x17, 0xb7, 0xdd, 0x7e, 0x3b, 0x00, 0xe0, 0x67, 0x7e, 0xf6, 0x5d, 0xf8, 0xf9, 0x77, 0xfd, 0x2c, 0xfe, 0xcb, 0x37, 0xbd, 0x0a, 0x4f, 0x3e, 0xf9, 0xa4, 0x11, 0xfa, 0xf1, 0xad, 0x5e, 0x3d, 0xa9, 0x35, 0x5e, 0x68, 0xe1, 0x12, 0x3c, 0x48, 0xe9, 0x22, 0x0c, 0x5d, 0xf8, 0x7e, 0x60, 0x90, 0xd3, 0x0e, 0xe6, 0xf3, 0x29, 0xb6, 0xb6, 0x4e, 0x61, 0x32, 0x39, 0x36, 0xee, 0x6a, 0x01, 0x3a, 0xdd, 0x08, 0x5b, 0x5b, 0x5b, 0xf8, 0xfa, 0xd7, 0xbf, 0x8e, 0x6e, 0xb7, 0x6b, 0xd5, 0x32, 0xb9, 0x13, 0xe6, 0xe7, 0x6b, 0x34, 0x1a, 0x61, 0xef, 0x58, 0xe1, 0x55, 0x77, 0xde, 0x89, 0x3f, 0xfc, 0xd0, 0x1f, 0x2e, 0x29, 0xa8, 0x55, 0x85, 0x2f, 0x7c, 0xee, 0x4f, 0x31, 0x1c, 0x0e, 0xad, 0xe8, 0x96, 0xd6, 0x31, 0xa4, 0x2b, 0x4c, 0x52, 0xa5, 0x02, 0x75, 0x3a, 0x99, 0x99, 0x18, 0xa2, 0x4d, 0xdc, 0x22, 0x50, 0x54, 0x14, 0x45, 0xa4, 0x12, 0x68, 0x68, 0xa8, 0x07, 0x87, 0x24, 0x4d, 0x4c, 0x6e, 0x86, 0x46, 0x9f, 0x5f, 0x80, 0x94, 0x24, 0xc3, 0x00, 0x6b, 0x1b, 0x1b, 0x50, 0xaa, 0xb1, 0xc0, 0xc3, 0xa2, 0xae, 0x30, 0x39, 0x98, 0x61, 0x36, 0x3b, 0x5a, 0x0a, 0x05, 0x05, 0x01, 0xb1, 0x57, 0x3c, 0x0f, 0x42, 0x4a, 0x54, 0x75, 0x8d, 0xa8, 0x4b, 0x98, 0x98, 0xd9, 0xf1, 0xb1, 0xa1, 0x27, 0x7a, 0x28, 0xea, 0x0a, 0x49, 0x96, 0x22, 0xcf, 0x4b, 0xc4, 0x46, 0x47, 0x9d, 0x68, 0x8f, 0x0d, 0x89, 0xc5, 0xa0, 0x31, 0x22, 0x61, 0xf4, 0x7c, 0x72, 0x31, 0x27, 0x1c, 0xcf, 0x80, 0x14, 0x09, 0xa1, 0x3f, 0xdd, 0x3d, 0x84, 0xc2, 0x52, 0x61, 0xad, 0x2d, 0x9e, 0xc4, 0x16, 0xa4, 0x9e, 0x1b, 0x40, 0x2b, 0x61, 0x18, 0x04, 0xb5, 0x8d, 0x3b, 0x1c, 0x47, 0x3a, 0x9d, 0x0e, 0x26, 0x93, 0x09, 0xc6, 0xe3, 0x31, 0x15, 0x38, 0x83, 0x01, 0x92, 0xc4, 0xd0, 0xde, 0x4a, 0x85, 0x4e, 0xc7, 0x33, 0xc2, 0x4f, 0x30, 0x0a, 0x99, 0x09, 0x80, 0x18, 0x8e, 0x63, 0xf2, 0x46, 0xb3, 0x9c, 0xf6, 0x70, 0xe3, 0xd6, 0x36, 0x49, 0x69, 0x3b, 0xd9, 0xb5, 0xf7, 0xe5, 0x36, 0x81, 0xeb, 0xa5, 0x14, 0x3a, 0x9b, 0xdd, 0x50, 0x8c, 0x22, 0x33, 0xa7, 0x2c, 0x2b, 0xe0, 0x79, 0x0b, 0x0b, 0x92, 0x6b, 0x4f, 0xee, 0x3a, 0x9d, 0x0e, 0xbc, 0x30, 0x42, 0x96, 0x65, 0x78, 0xde, 0xed, 0x2f, 0x80, 0x27, 0x5d, 0xdc, 0x72, 0xe3, 0x4d, 0x78, 0xf8, 0x6b, 0x5f, 0xc5, 0x99, 0xd3, 0xa7, 0x81, 0xa6, 0x86, 0x94, 0x01, 0x0e, 0x0e, 0x0f, 0x91, 0xa7, 0x19, 0xa2, 0x28, 0x86, 0xaa, 0x1b, 0x24, 0xf3, 0x39, 0x7c, 0xe9, 0x62, 0x7d, 0x6b, 0x84, 0xe9, 0xd1, 0xd4, 0xe2, 0x69, 0xb8, 0x89, 0x72, 0xa7, 0x33, 0x12, 0x40, 0x89, 0x6a, 0x23, 0xee, 0xee, 0xf8, 0x08, 0xc2, 0x2e, 0x94, 0x26, 0xba, 0x4d, 0xb7, 0xe7, 0xd9, 0xca, 0x4d, 0x08, 0x81, 0xc8, 0xf1, 0x0d, 0xf5, 0x41, 0xe1, 0xeb, 0x17, 0x2f, 0x9a, 0x80, 0xd3, 0x98, 0x0b, 0x13, 0x58, 0x02, 0x7e, 0x53, 0xab, 0x15, 0x0a, 0xc0, 0xda, 0xfa, 0xba, 0x0d, 0x6a, 0x65, 0x59, 0xc2, 0x91, 0x12, 0xbd, 0xfe, 0x92, 0xd7, 0xc8, 0x62, 0x0c, 0x5a, 0x69, 0xc0, 0x01, 0x84, 0x14, 0x86, 0xcf, 0x5a, 0xa2, 0x31, 0x89, 0x96, 0x4e, 0x9e, 0xb2, 0x1e, 0xcb, 0x8e, 0x27, 0x21, 0x5d, 0x09, 0x48, 0xc0, 0x17, 0xd4, 0x65, 0xf9, 0x91, 0x09, 0x92, 0x15, 0x00, 0x0d, 0x38, 0xc2, 0x81, 0x07, 0x0f, 0xda, 0x31, 0xd4, 0x04, 0xd7, 0x39, 0xe1, 0x8f, 0x4c, 0x02, 0x0d, 0x34, 0xf6, 0xab, 0xad, 0x2a, 0x11, 0x07, 0x4a, 0xbe, 0xe0, 0x4b, 0xba, 0x80, 0xb0, 0x68, 0x61, 0xdf, 0x8c, 0x9e, 0xb5, 0xd6, 0x50, 0x0b, 0xea, 0x5a, 0xb5, 0xa3, 0xd1, 0xa0, 0x41, 0xdd, 0xd4, 0xd0, 0x35, 0x8d, 0x21, 0x21, 0x01, 0xe1, 0x1a, 0x43, 0x00, 0x21, 0xe1, 0x98, 0x0e, 0x64, 0x29, 0xde, 0xe1, 0xd8, 0x91, 0x3a, 0x27, 0xf0, 0xa5, 0xb7, 0xbb, 0xb2, 0x49, 0x8e, 0xab, 0x63, 0xee, 0xba, 0xa6, 0xd3, 0x39, 0x82, 0x20, 0x83, 0xef, 0x37, 0xd6, 0xea, 0x50, 0x29, 0xd8, 0x51, 0x7a, 0x18, 0xc6, 0x56, 0x5f, 0x3e, 0xcb, 0x0a, 0x48, 0x99, 0xda, 0x0a, 0x9c, 0x0a, 0x23, 0x6d, 0x1f, 0x0e, 0x06, 0xa5, 0xf0, 0x04, 0x26, 0x08, 0x02, 0xb8, 0x52, 0xac, 0xc8, 0xe9, 0xb6, 0xf9, 0x9a, 0xc4, 0x83, 0xef, 0x9b, 0x8a, 0xb3, 0x44, 0x5d, 0x2b, 0x44, 0x61, 0xd0, 0x72, 0x0f, 0x5b, 0x8a, 0x7c, 0x68, 0x0d, 0x68, 0x4d, 0x02, 0x32, 0x4a, 0x29, 0x28, 0x5d, 0xa3, 0xaa, 0x0b, 0x78, 0xd2, 0x6b, 0x39, 0x15, 0x35, 0x76, 0xed, 0xa1, 0x94, 0xa1, 0x89, 0xa0, 0x5c, 0xe9, 0x64, 0xfd, 0x40, 0xc2, 0x75, 0x03, 0x5b, 0xcd, 0x0b, 0xa1, 0x89, 0x5f, 0xea, 0x91, 0x87, 0x35, 0xaf, 0x54, 0x58, 0xfa, 0x53, 0xba, 0x4e, 0x4b, 0xca, 0x51, 0x5b, 0x8e, 0x74, 0x65, 0x4c, 0x7b, 0xb4, 0x6e, 0xa0, 0x85, 0x82, 0x90, 0x80, 0x42, 0x83, 0xc6, 0x98, 0x5e, 0xd4, 0x75, 0x8d, 0x5a, 0x55, 0xe8, 0x18, 0x1d, 0x06, 0x3f, 0xf4, 0x68, 0x6d, 0x74, 0x3c, 0xb6, 0x0f, 0x63, 0x55, 0x55, 0x70, 0xcc, 0x98, 0xf9, 0x70, 0xb2, 0x83, 0x17, 0xbd, 0xf0, 0x56, 0x9c, 0x37, 0x52, 0xbf, 0xbf, 0xfb, 0xbe, 0x5f, 0xc6, 0xb9, 0x73, 0x5d, 0xcc, 0x66, 0x33, 0x1b, 0x20, 0x98, 0x4f, 0x6e, 0x75, 0xe4, 0xcd, 0x94, 0x83, 0xbb, 0x0d, 0xe6, 0xa2, 0x2b, 0xa5, 0xf0, 0xa9, 0x4f, 0x5f, 0xc6, 0x5b, 0xde, 0xf2, 0x4f, 0x70, 0xcb, 0x73, 0x6f, 0xc5, 0xc1, 0xfe, 0x1e, 0x2e, 0x3c, 0xf6, 0x38, 0xbe, 0xf0, 0xc5, 0xaf, 0x62, 0x38, 0xdc, 0xb3, 0x63, 0x74, 0x92, 0xee, 0x5c, 0x8a, 0x5a, 0x30, 0xfb, 0x81, 0x0b, 0x33, 0xfe, 0x7d, 0xbe, 0x6f, 0xda, 0xd3, 0x1d, 0x9e, 0x20, 0x68, 0x95, 0xda, 0x62, 0x8f, 0x03, 0x16, 0x17, 0xa4, 0xdf, 0xfd, 0x5d, 0x3f, 0x8c, 0xe1, 0x88, 0x94, 0x18, 0x3f, 0xfd, 0xc9, 0x4f, 0xe2, 0xfe, 0x2f, 0x7e, 0xcc, 0x3c, 0x0f, 0xcb, 0x67, 0x38, 0x08, 0x03, 0xbc, 0xf6, 0x1f, 0xfe, 0x20, 0xfe, 0x9f, 0xdf, 0xff, 0x75, 0x42, 0x8c, 0x77, 0x63, 0xac, 0xaf, 0x13, 0xb5, 0xaf, 0xdb, 0x8d, 0x71, 0x3c, 0x39, 0x44, 0xa5, 0xd6, 0xf0, 0xf2, 0x97, 0xbf, 0x06, 0x2f, 0xb8, 0xed, 0x36, 0x00, 0xc0, 0x97, 0x1e, 0x7c, 0x10, 0x97, 0x2e, 0x7f, 0xda, 0xd0, 0x3d, 0x35, 0x46, 0x6b, 0x03, 0x0b, 0xf8, 0xe1, 0xe4, 0x2e, 0xa5, 0x36, 0x5a, 0x04, 0x5d, 0x73, 0x9d, 0x68, 0x54, 0xd9, 0xe9, 0x46, 0xd8, 0x3e, 0x73, 0x0e, 0x3f, 0xf0, 0xe6, 0x37, 0xe3, 0x9b, 0xbd, 0xce, 0xdf, 0x78, 0x13, 0x7e, 0xf3, 0x7d, 0xf7, 0xe2, 0xc1, 0x07, 0x1e, 0xc0, 0xe5, 0xbd, 0xf7, 0xc3, 0x0f, 0x69, 0xbd, 0x31, 0x9d, 0x4f, 0xe1, 0x05, 0x1e, 0x6a, 0x55, 0xa3, 0xd3, 0x5d, 0xda, 0x8f, 0x96, 0x65, 0x8d, 0xac, 0x48, 0xd1, 0xf5, 0xfa, 0x80, 0x03, 0x4c, 0x66, 0x13, 0x2c, 0x92, 0x14, 0x6b, 0x1b, 0x23, 0x94, 0x75, 0x81, 0xf5, 0xcd, 0x35, 0x64, 0x59, 0x81, 0xcf, 0x7d, 0xfe, 0x71, 0xdc, 0x7e, 0xfb, 0x39, 0xbc, 0xec, 0x65, 0x2f, 0xc1, 0x4b, 0x5f, 0x41, 0xe7, 0xe7, 0xa3, 0x7f, 0xfe, 0x31, 0x3c, 0xf0, 0xc0, 0x27, 0xa9, 0xd0, 0x68, 0x80, 0x20, 0x1e, 0xe1, 0x54, 0x7c, 0x0e, 0x00, 0x70, 0xd7, 0xf7, 0xdf, 0x01, 0x00, 0x18, 0x8d, 0x06, 0x08, 0xe2, 0x10, 0x7e, 0xe4, 0xdb, 0x00, 0x5f, 0xa4, 0x19, 0xaa, 0xba, 0x58, 0x4e, 0xa4, 0xca, 0xca, 0x4e, 0x9b, 0x68, 0x1d, 0xa5, 0x90, 0x19, 0x26, 0x49, 0xa7, 0x13, 0x59, 0x8b, 0x52, 0x47, 0x02, 0x61, 0x18, 0x23, 0x99, 0x2d, 0x6c, 0xa1, 0xcc, 0xe3, 0x74, 0x29, 0x5d, 0x5b, 0x84, 0xf3, 0xb4, 0x87, 0xee, 0x41, 0x2c, 0x45, 0x58, 0xaa, 0xdc, 0x76, 0xea, 0xc4, 0x8c, 0x51, 0x08, 0x02, 0x07, 0x42, 0x10, 0x4b, 0x88, 0xdd, 0xd8, 0xb4, 0x66, 0xa3, 0xab, 0x19, 0xea, 0xba, 0x81, 0x10, 0x12, 0xd3, 0xc9, 0xdc, 0xa2, 0xb1, 0x8b, 0xc9, 0x91, 0x89, 0xf3, 0xca, 0xb0, 0x78, 0x34, 0x1c, 0x25, 0xc8, 0xe3, 0xdd, 0x75, 0x51, 0xd5, 0x19, 0xf2, 0x82, 0x68, 0x7c, 0x1a, 0x21, 0x62, 0x66, 0x10, 0x34, 0x02, 0x3a, 0xa3, 0xcf, 0xe5, 0x7b, 0x8f, 0x9f, 0x83, 0xf6, 0xf3, 0xce, 0x6a, 0x8c, 0xed, 0x29, 0x29, 0xff, 0x19, 0x99, 0x97, 0x44, 0x96, 0xbd, 0xc4, 0x00, 0xb9, 0x9e, 0x01, 0xe6, 0xba, 0x2e, 0xc5, 0x3d, 0xe6, 0x87, 0x73, 0x9c, 0xe6, 0x84, 0xac, 0x94, 0xb2, 0x3c, 0x7e, 0xe1, 0x68, 0xc3, 0xe7, 0x87, 0x71, 0x71, 0x13, 0x10, 0x0e, 0x4d, 0x8a, 0x3a, 0x5d, 0x72, 0x9f, 0x1b, 0x0c, 0x7b, 0xe4, 0x41, 0x10, 0x07, 0x14, 0xbb, 0x7c, 0x09, 0x29, 0xe4, 0x8a, 0xa9, 0x4a, 0x5b, 0xe5, 0xd0, 0xf3, 0x3c, 0x5c, 0x77, 0xdd, 0x9a, 0x75, 0x99, 0x63, 0x9c, 0x4b, 0xdb, 0x2b, 0x5e, 0x65, 0x05, 0x66, 0x93, 0x0c, 0x5f, 0xfb, 0xea, 0x43, 0x78, 0xc5, 0x1d, 0xdf, 0x81, 0x34, 0x59, 0xe0, 0x15, 0x2f, 0xbf, 0x83, 0x18, 0x12, 0x9d, 0x18, 0x75, 0x05, 0x8c, 0x8c, 0x27, 0x7d, 0x9e, 0x66, 0x98, 0xcf, 0x67, 0xc8, 0xd3, 0x0c, 0xd0, 0x1a, 0x79, 0x46, 0xc2, 0x57, 0x1c, 0x3b, 0xad, 0xfc, 0x2f, 0x29, 0x9c, 0x25, 0x48, 0x92, 0x85, 0xed, 0x8c, 0x96, 0x08, 0x75, 0xc7, 0x04, 0x00, 0x8d, 0x2c, 0xcb, 0x57, 0x68, 0x23, 0x55, 0x55, 0xa1, 0xd3, 0xed, 0xdb, 0xf1, 0x2e, 0x1d, 0x6c, 0x4b, 0xc2, 0xd2, 0x20, 0xb8, 0x79, 0xa4, 0xcd, 0x7b, 0x5b, 0xfe, 0x73, 0x32, 0x03, 0x59, 0xac, 0xa0, 0x70, 0x19, 0x60, 0xc8, 0x07, 0xc9, 0xe3, 0x7e, 0xba, 0x88, 0x66, 0xdf, 0xe1, 0x50, 0x35, 0xd4, 0x28, 0x20, 0xcb, 0x70, 0x42, 0xf2, 0x54, 0x1a, 0x35, 0x3b, 0x05, 0xa5, 0x1a, 0x7b, 0x11, 0x01, 0xb2, 0xb5, 0xa3, 0x71, 0x7a, 0xb9, 0x82, 0xf6, 0xa4, 0x9b, 0xb8, 0xb6, 0x23, 0x2d, 0x69, 0x04, 0xf7, 0xeb, 0xba, 0x32, 0x37, 0x10, 0x75, 0xe8, 0x74, 0x6c, 0x6c, 0x8f, 0x57, 0x41, 0x08, 0x60, 0xff, 0xe0, 0xc0, 0xd2, 0x6a, 0x78, 0x47, 0xde, 0x1e, 0xdf, 0x8e, 0x46, 0x23, 0x3b, 0xc6, 0xe6, 0x0e, 0x9e, 0x47, 0xa8, 0xc4, 0xaf, 0xcd, 0x6d, 0x31, 0x53, 0xd7, 0xb5, 0x45, 0xac, 0x92, 0xc4, 0xe3, 0xd0, 0xf2, 0x3f, 0xb9, 0x43, 0x5b, 0xca, 0x04, 0x2e, 0xdd, 0xc3, 0x92, 0x24, 0xb1, 0x1d, 0x7a, 0xdb, 0xf9, 0xa7, 0x2d, 0x19, 0xcb, 0x1d, 0x71, 0x7b, 0x5c, 0xc6, 0x0a, 0x67, 0x6d, 0x97, 0x2b, 0xbe, 0x3e, 0x9c, 0x10, 0x78, 0x7c, 0xc4, 0x74, 0x38, 0xbe, 0x59, 0xf9, 0x21, 0x1c, 0xad, 0x6d, 0x18, 0x59, 0xcb, 0xcc, 0x0a, 0xe2, 0x3c, 0xf7, 0x96, 0xbf, 0x8f, 0xcf, 0x7c, 0xf6, 0x8f, 0x57, 0x14, 0xbe, 0xda, 0xfc, 0x4d, 0x9e, 0x7c, 0x30, 0x05, 0x6f, 0x75, 0xe7, 0x24, 0x56, 0x10, 0xe0, 0xd3, 0xa9, 0xc6, 0xf6, 0x99, 0xd3, 0x80, 0xba, 0x6c, 0x3a, 0x52, 0xdf, 0x8e, 0xd0, 0x30, 0x27, 0xc4, 0x3d, 0x63, 0x0d, 0x8a, 0x22, 0xc3, 0xe1, 0x21, 0x15, 0x47, 0x9e, 0xef, 0xae, 0x9c, 0x8b, 0x4b, 0x4f, 0xcd, 0xe1, 0x77, 0xb6, 0xe9, 0x3a, 0x2d, 0x8e, 0xb1, 0xb6, 0x2e, 0xd0, 0xa8, 0x0a, 0x71, 0xd4, 0xb7, 0x63, 0x5d, 0x9e, 0x2c, 0xb4, 0xf5, 0xce, 0xdb, 0xe7, 0x4e, 0x29, 0x65, 0xcd, 0x43, 0x38, 0x41, 0xf6, 0xba, 0x54, 0x30, 0xfd, 0xec, 0x3b, 0x7f, 0x0a, 0x00, 0x70, 0xe1, 0xb1, 0x47, 0x71, 0xfe, 0xc6, 0x9b, 0xf0, 0xc6, 0xef, 0x7f, 0x2b, 0x3e, 0xfd, 0xa9, 0xdf, 0xb3, 0x54, 0x37, 0x4e, 0x94, 0x7c, 0x3e, 0xbf, 0xf8, 0xa5, 0x31, 0x5e, 0xf8, 0x82, 0x0d, 0x5c, 0x1e, 0xc7, 0x88, 0x82, 0x0d, 0xdc, 0x72, 0xf3, 0x75, 0xd8, 0xd9, 0xd9, 0xc1, 0x70, 0x34, 0xc2, 0xe6, 0xd6, 0x36, 0xde, 0xf6, 0x4f, 0xb6, 0xec, 0x39, 0xd8, 0xde, 0xde, 0xc2, 0x6d, 0xb7, 0xdf, 0x8e, 0xbb, 0xde, 0x78, 0x17, 0xf6, 0xf6, 0xf6, 0xf1, 0xef, 0x7e, 0xef, 0x5e, 0xa8, 0xea, 0x21, 0xd2, 0xdb, 0x9f, 0x16, 0x18, 0x0c, 0x06, 0xc6, 0x36, 0xd4, 0xb3, 0xcf, 0x0b, 0x69, 0xd7, 0x77, 0x6c, 0x71, 0xc8, 0x63, 0xff, 0xf6, 0x68, 0xd0, 0x71, 0x1c, 0x6c, 0x9d, 0xfe, 0x4e, 0x5a, 0x37, 0xc5, 0xc0, 0xda, 0xfa, 0x32, 0x19, 0xbe, 0xe8, 0x85, 0x3b, 0x78, 0xd5, 0x9d, 0x77, 0xda, 0x5f, 0xdf, 0x76, 0xfb, 0xed, 0xf8, 0xd4, 0x7f, 0xf7, 0xc7, 0xa8, 0xaa, 0x1a, 0x71, 0xec, 0x98, 0x95, 0x4d, 0x0d, 0x55, 0x37, 0x38, 0x7f, 0xe3, 0x0d, 0xd0, 0xba, 0x41, 0xb7, 0xd7, 0xc1, 0xd6, 0xd6, 0x06, 0x5e, 0xfe, 0xf2, 0xef, 0xc3, 0x5d, 0x6f, 0xbc, 0x0b, 0xef, 0xf9, 0x95, 0xf7, 0xe0, 0xfc, 0x0d, 0xcf, 0xbb, 0x22, 0xf9, 0xde, 0x76, 0xfb, 0xed, 0xf8, 0xc3, 0x0f, 0x75, 0xf1, 0xd7, 0x9f, 0xfc, 0x7d, 0x84, 0x51, 0x68, 0x8e, 0x5d, 0x1a, 0x3a, 0x60, 0x89, 0x30, 0xec, 0x62, 0x30, 0xec, 0xda, 0x29, 0x15, 0x5d, 0x48, 0x16, 0x9f, 0x29, 0x01, 0x04, 0xb8, 0x96, 0xd7, 0x97, 0x1e, 0x7c, 0x10, 0xe3, 0xf1, 0xd8, 0xde, 0x8f, 0x5c, 0xfc, 0x74, 0xbb, 0x5d, 0xe4, 0x05, 0x89, 0x9c, 0xd0, 0xda, 0xa3, 0xb0, 0x06, 0x3c, 0x3c, 0x4d, 0x1c, 0x1f, 0x1e, 0x40, 0x43, 0x61, 0x63, 0x7d, 0x13, 0x4f, 0xed, 0x76, 0xf0, 0xea, 0xbf, 0xff, 0x1a, 0xfc, 0xc4, 0x3f, 0xbb, 0xf3, 0xaa, 0x9f, 0xb1, 0x7f, 0xf8, 0x8d, 0x0b, 0x8d, 0x57, 0xdd, 0x79, 0x27, 0x6e, 0x79, 0xee, 0xad, 0xf8, 0x77, 0xbf, 0x77, 0x2f, 0x1e, 0x7b, 0xec, 0x53, 0x90, 0x72, 0x82, 0xf5, 0x51, 0x17, 0x55, 0x55, 0xda, 0x8e, 0xb1, 0xaa, 0x0a, 0x48, 0x19, 0x22, 0x8a, 0x69, 0x65, 0x17, 0xfa, 0x81, 0xb1, 0x4a, 0xce, 0xed, 0x64, 0x80, 0x8f, 0x7f, 0xb1, 0x98, 0xa3, 0x13, 0x0f, 0x90, 0xe5, 0x39, 0xd2, 0xd6, 0xd4, 0x2c, 0x0c, 0x29, 0xb1, 0x8f, 0xd6, 0xd7, 0x6c, 0x1c, 0xf2, 0x02, 0x1f, 0x5a, 0x2b, 0x44, 0x9d, 0x18, 0x5e, 0xe0, 0x9b, 0x26, 0x89, 0x2c, 0x48, 0x17, 0x8b, 0x05, 0x6a, 0xd5, 0x10, 0x8e, 0x22, 0xcf, 0xac, 0x1c, 0xb1, 0xe7, 0x79, 0x68, 0x4c, 0xb1, 0xe1, 0x05, 0x3e, 0xd2, 0x7c, 0x86, 0x3c, 0x5b, 0x20, 0xcd, 0x73, 0xf8, 0x61, 0x80, 0x20, 0x88, 0x90, 0x96, 0x15, 0xe2, 0x21, 0x49, 0xc3, 0xd6, 0x55, 0x63, 0x14, 0xe4, 0x12, 0x08, 0x01, 0x44, 0xb1, 0x87, 0xf9, 0x7c, 0x01, 0xcf, 0x77, 0xe0, 0xf9, 0x21, 0x89, 0xba, 0x34, 0x39, 0xea, 0x5a, 0xc1, 0xf3, 0x04, 0x06, 0x83, 0x0e, 0x34, 0x5c, 0x8b, 0xd7, 0x22, 0xb6, 0x83, 0x04, 0x10, 0x2d, 0x3d, 0xc1, 0x21, 0x96, 0x9c, 0xef, 0x96, 0xfc, 0x2a, 0xc7, 0xc3, 0x45, 0xbe, 0x40, 0x55, 0x15, 0x28, 0xcb, 0x1c, 0xdd, 0x6e, 0x8c, 0xaa, 0x2a, 0x2c, 0x0d, 0xd1, 0xf7, 0x7b, 0x56, 0x38, 0x27, 0x4d, 0x53, 0xb8, 0x9e, 0x44, 0x2c, 0x23, 0xc4, 0x9d, 0xc8, 0x14, 0x35, 0x15, 0x3c, 0xcf, 0xb7, 0xf1, 0x89, 0x63, 0x5b, 0x7b, 0x62, 0xd6, 0x6e, 0x5e, 0xa2, 0x28, 0xb2, 0xb2, 0xc8, 0x56, 0x02, 0x39, 0x34, 0x7f, 0x07, 0x0a, 0x4a, 0x37, 0x50, 0x5a, 0x40, 0x43, 0x41, 0x38, 0x02, 0x8e, 0x14, 0x56, 0x93, 0x62, 0xb1, 0x28, 0x21, 0x04, 0x29, 0x77, 0x4a, 0x29, 0x71, 0x78, 0x48, 0xea, 0x9b, 0x6b, 0x6b, 0x5b, 0x80, 0x06, 0x7a, 0x71, 0x07, 0x4f, 0x5c, 0x78, 0x1c, 0xa7, 0xb7, 0xb7, 0x30, 0x39, 0x3a, 0x26, 0x6f, 0x8a, 0x79, 0x82, 0xf9, 0x2c, 0xc3, 0xf6, 0xe9, 0x53, 0x40, 0x04, 0xa4, 0x59, 0x0e, 0xdf, 0xf5, 0xb0, 0xb9, 0xb6, 0x8e, 0x24, 0x4b, 0x71, 0xf1, 0xe2, 0x45, 0x0c, 0x87, 0x43, 0xbb, 0x1a, 0xe7, 0xe2, 0x49, 0xcf, 0xcf, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x22, 0xc2, 0x9d, 0x4c, 0xe7, 0x36, 0x70, 0x9d, 0x1c, 0xcf, 0x16, 0x65, 0x8d, 0xb2, 0x6a, 0x56, 0x84, 0x4b, 0xda, 0x15, 0xc9, 0xfe, 0xd1, 0xb1, 0x49, 0xd0, 0x9e, 0x05, 0xc7, 0x2d, 0x41, 0x4d, 0x94, 0x1c, 0x1a, 0xd0, 0xf8, 0x31, 0x2d, 0xf2, 0x15, 0x23, 0x07, 0x0a, 0x3a, 0xf1, 0x52, 0x0b, 0xd7, 0x5b, 0x75, 0xb2, 0x69, 0x8f, 0x60, 0x69, 0xa7, 0x61, 0x74, 0x77, 0x1d, 0xfa, 0xfb, 0x10, 0x0d, 0xb4, 0x10, 0xa8, 0x2c, 0x70, 0x4e, 0xa2, 0xd1, 0x35, 0x72, 0x93, 0x30, 0x14, 0x14, 0x92, 0x74, 0xbe, 0x32, 0xd2, 0x75, 0x7d, 0x09, 0xc7, 0xf1, 0xec, 0xf7, 0xd4, 0xca, 0x38, 0x43, 0xc9, 0x0e, 0x1c, 0xb9, 0xb5, 0xe2, 0x96, 0xe3, 0xf9, 0x72, 0x45, 0x93, 0xba, 0xed, 0xc2, 0xc3, 0x23, 0xf8, 0xd3, 0x3b, 0xa7, 0x56, 0xf6, 0x3f, 0x96, 0x92, 0xe4, 0x18, 0xe0, 0x9c, 0x50, 0xd4, 0xf5, 0x41, 0xd8, 0x4e, 0x50, 0x6b, 0x85, 0x45, 0x46, 0xa3, 0x44, 0xa1, 0x97, 0xfe, 0xc9, 0x0c, 0xea, 0x68, 0x73, 0xca, 0xc3, 0xd0, 0x5f, 0x01, 0x82, 0xb4, 0x45, 0x10, 0x00, 0xa0, 0xdb, 0xe9, 0x53, 0xc2, 0xad, 0x14, 0xd1, 0xe6, 0x1c, 0x12, 0x06, 0xd1, 0x4a, 0x40, 0x08, 0x07, 0xb3, 0x69, 0xb2, 0xac, 0x80, 0x21, 0xa1, 0x15, 0xd0, 0xd4, 0x1a, 0x30, 0x40, 0xb1, 0x36, 0x6d, 0x8a, 0x6f, 0xd2, 0x28, 0x22, 0x87, 0xa8, 0x34, 0x4d, 0x51, 0x95, 0x6a, 0xa5, 0x22, 0x6e, 0x27, 0x5b, 0xa5, 0x14, 0xa6, 0xb3, 0x63, 0xc4, 0x51, 0xd7, 0xec, 0x44, 0x7b, 0x70, 0xdd, 0xc2, 0x56, 0xd6, 0x2c, 0xbc, 0xa1, 0xb5, 0xa2, 0xca, 0xdd, 0x71, 0x68, 0x6d, 0x51, 0x55, 0xc6, 0x28, 0x41, 0xa0, 0x2e, 0x6b, 0x08, 0x05, 0x08, 0xc7, 0x14, 0x74, 0x0e, 0xe0, 0x4a, 0x89, 0xeb, 0xaf, 0xbf, 0x03, 0x3f, 0xfa, 0x63, 0x6f, 0x45, 0xd7, 0xac, 0x1f, 0x38, 0x59, 0xfe, 0xc5, 0x47, 0x3f, 0x86, 0xbf, 0xfc, 0xeb, 0x8f, 0xe1, 0xd4, 0x69, 0x17, 0x07, 0x07, 0x07, 0x58, 0x1b, 0xac, 0x21, 0x8e, 0x29, 0x29, 0xf8, 0xbe, 0x6b, 0xdd, 0xd4, 0x78, 0x6c, 0x5d, 0x14, 0x05, 0x1e, 0xfa, 0xda, 0x04, 0xbf, 0xf9, 0xbe, 0x7b, 0xaf, 0x1a, 0x64, 0xf7, 0xf6, 0xf6, 0xf1, 0xf0, 0x43, 0x5f, 0xc5, 0xc3, 0x0f, 0x3d, 0x84, 0xbf, 0xfc, 0xeb, 0x8f, 0xe1, 0xec, 0xf5, 0xee, 0xca, 0x3d, 0x1e, 0xc7, 0x31, 0x20, 0x81, 0x06, 0x0d, 0xfa, 0xa3, 0xbe, 0x4d, 0x96, 0x79, 0x9e, 0xa3, 0x41, 0xb3, 0x62, 0x26, 0x92, 0xcc, 0xe7, 0xf8, 0x9f, 0x7f, 0xe6, 0x67, 0x71, 0xef, 0xbd, 0xf7, 0xe2, 0x55, 0x77, 0xde, 0x89, 0xcf, 0xdc, 0x77, 0xaf, 0xf5, 0x46, 0xe6, 0x42, 0xcf, 0x71, 0x1c, 0x48, 0xff, 0x56, 0xbc, 0xe3, 0x9e, 0xd7, 0xe0, 0xa3, 0x1f, 0xf9, 0x37, 0xf8, 0xf9, 0x77, 0xfd, 0xab, 0x6b, 0x4a, 0x4e, 0xdb, 0xdb, 0x5b, 0xb8, 0xfb, 0x9e, 0xbb, 0x71, 0xe1, 0xb1, 0x47, 0xf1, 0x3b, 0xbf, 0xf9, 0x4e, 0xd4, 0x4d, 0x89, 0x6e, 0xb7, 0x8f, 0x20, 0x88, 0xe0, 0x79, 0x01, 0xb4, 0x16, 0x96, 0x76, 0x5a, 0xd7, 0x34, 0x11, 0xe1, 0x6b, 0xdb, 0x2e, 0xc6, 0x09, 0xc0, 0xe3, 0x7d, 0x4b, 0x9d, 0x6e, 0x5b, 0x8e, 0x96, 0xa7, 0x0a, 0x52, 0x2a, 0xeb, 0x1d, 0x0f, 0x00, 0xe7, 0x6e, 0x7c, 0x31, 0xfa, 0x9d, 0x02, 0xbd, 0x5e, 0x07, 0x77, 0xbd, 0xf1, 0x2e, 0x00, 0xc0, 0xdd, 0xf7, 0xdc, 0x8d, 0x64, 0x3e, 0xbf, 0xea, 0x7b, 0xdd, 0xf5, 0xc6, 0xbb, 0xf0, 0x97, 0x7f, 0xf5, 0x7b, 0xa8, 0xaa, 0x02, 0x49, 0x32, 0x33, 0x3a, 0x0b, 0xa9, 0xe9, 0xe4, 0x14, 0x1c, 0x29, 0x56, 0xe4, 0x90, 0x01, 0x82, 0xce, 0x90, 0x0f, 0xfb, 0xb5, 0xbd, 0x9e, 0xba, 0xfc, 0x57, 0x70, 0x03, 0xd7, 0x82, 0xab, 0x8a, 0xa2, 0xc0, 0xfe, 0xe1, 0x3e, 0x0e, 0x8e, 0x0e, 0x10, 0x86, 0x44, 0xc1, 0xed, 0x76, 0xfb, 0xf0, 0xa3, 0x10, 0x7e, 0xdd, 0x10, 0x00, 0xc9, 0x97, 0x88, 0x3a, 0x1d, 0xbc, 0xe0, 0xf6, 0xdb, 0xf1, 0xd5, 0xaf, 0x25, 0xf8, 0xaf, 0xfe, 0xeb, 0x1f, 0xc6, 0xf9, 0x1b, 0x6f, 0xc2, 0xb3, 0x7d, 0xf1, 0xf5, 0xe3, 0xc2, 0x6c, 0x3a, 0xf9, 0xb2, 0x91, 0x64, 0x0e, 0x4c, 0x57, 0xee, 0x58, 0x03, 0x21, 0xd7, 0x75, 0xb1, 0x98, 0x27, 0x16, 0xd4, 0xc9, 0x31, 0x97, 0x95, 0x3b, 0x9b, 0x06, 0x16, 0xd3, 0x73, 0xf6, 0xec, 0x59, 0x2b, 0x2d, 0x9a, 0x24, 0x0b, 0x9b, 0xdc, 0x39, 0xd6, 0xce, 0x66, 0xe4, 0x81, 0xce, 0x14, 0x41, 0xf6, 0x4e, 0xaf, 0x2a, 0x05, 0x57, 0xfa, 0x70, 0x03, 0x63, 0xe8, 0x04, 0x09, 0x01, 0x01, 0xe9, 0x90, 0x62, 0xa0, 0x17, 0x3a, 0x06, 0x67, 0x12, 0x20, 0xcf, 0x0b, 0x54, 0x65, 0x63, 0x41, 0xb8, 0xae, 0xeb, 0x61, 0x18, 0x93, 0xc1, 0x95, 0xef, 0xfb, 0x28, 0x9d, 0x92, 0xb4, 0xff, 0x3d, 0x01, 0x68, 0x01, 0x21, 0x34, 0xb6, 0xb6, 0x36, 0xec, 0xaa, 0x80, 0xef, 0x3f, 0xf6, 0x07, 0xa0, 0xf6, 0x48, 0x5a, 0xe0, 0xd9, 0x64, 0x32, 0x81, 0xab, 0x1d, 0x8b, 0x6b, 0x51, 0x4a, 0x61, 0x7a, 0x5c, 0x5a, 0x3f, 0x75, 0xc7, 0x4c, 0x58, 0x49, 0xc8, 0x68, 0xa9, 0xf7, 0xce, 0xa3, 0x78, 0xf6, 0x04, 0x68, 0x2b, 0xbd, 0x71, 0xa3, 0xc0, 0x45, 0x3b, 0xdb, 0xa2, 0x32, 0xa0, 0x34, 0x08, 0xaf, 0xe4, 0x91, 0x73, 0xe3, 0xc2, 0x4d, 0x12, 0xdb, 0x52, 0x93, 0xb0, 0x97, 0x8f, 0x34, 0xcd, 0x6c, 0xe3, 0x19, 0x06, 0xee, 0x8a, 0x00, 0x4d, 0x7b, 0x5c, 0xcf, 0xd3, 0x84, 0xed, 0xed, 0x6d, 0xf4, 0x7a, 0x29, 0x4e, 0x9f, 0x3e, 0x8d, 0xf9, 0x7c, 0x6e, 0x7d, 0x44, 0x58, 0x30, 0x69, 0xd4, 0xa7, 0x7b, 0x72, 0xe7, 0xcc, 0x29, 0x1c, 0x1d, 0x1d, 0x21, 0xf4, 0x3d, 0xcc, 0x26, 0x53, 0x74, 0xba, 0x74, 0x6e, 0x9b, 0xaa, 0xc6, 0x64, 0x36, 0x45, 0x96, 0x17, 0x68, 0x40, 0x13, 0xc1, 0x8d, 0x70, 0xcd, 0x0a, 0xec, 0xb4, 0xb5, 0xde, 0xe9, 0x99, 0x74, 0x48, 0xc2, 0xb5, 0xed, 0x12, 0xc3, 0x23, 0x90, 0x20, 0xe0, 0x31, 0x60, 0x63, 0xba, 0x70, 0x4e, 0xb2, 0x12, 0x41, 0xe0, 0xa3, 0x3b, 0xe8, 0x9b, 0x04, 0x43, 0x17, 0x4c, 0x2b, 0xd1, 0x1a, 0x3f, 0xd4, 0x76, 0x1f, 0xc2, 0x5d, 0x2c, 0x23, 0x04, 0xf9, 0xfd, 0xa3, 0x28, 0xb2, 0xfb, 0xc7, 0xb2, 0xa8, 0xe1, 0xc8, 0xba, 0x85, 0x3a, 0x54, 0x76, 0x4c, 0xc1, 0x9d, 0xdd, 0xb2, 0xbb, 0x24, 0x6d, 0xf2, 0xb2, 0x5a, 0x8e, 0xeb, 0x4f, 0x76, 0x78, 0x3c, 0xc6, 0xe6, 0xdd, 0xf2, 0x49, 0xb5, 0x1d, 0x29, 0x25, 0x42, 0xb3, 0x7b, 0xe0, 0xa0, 0xcb, 0x89, 0x94, 0xbb, 0x77, 0x1e, 0x81, 0xb6, 0xa7, 0x00, 0x6d, 0xf0, 0x5f, 0x93, 0x94, 0x2b, 0x05, 0x03, 0x07, 0x3d, 0x2e, 0x88, 0xda, 0x20, 0xba, 0xf6, 0xe7, 0x32, 0x40, 0x22, 0x4f, 0x13, 0x6b, 0xdc, 0x02, 0xc0, 0x0a, 0x37, 0x30, 0x1a, 0x7a, 0x3e, 0x9f, 0xaf, 0xa0, 0xb3, 0xf9, 0xdc, 0x70, 0x52, 0x67, 0xc5, 0x2b, 0x7e, 0x70, 0xf9, 0x86, 0xe4, 0xf1, 0xea, 0xc9, 0xa4, 0xcd, 0xc7, 0x6e, 0xed, 0x47, 0x6b, 0x6d, 0xa7, 0x0b, 0xbc, 0xd3, 0x76, 0x1c, 0x07, 0x8f, 0x3f, 0x72, 0x88, 0xe7, 0x3f, 0xff, 0x95, 0xb8, 0xe5, 0xb9, 0xcf, 0xb5, 0x5d, 0xe3, 0xbf, 0xfe, 0xd5, 0x5f, 0x46, 0x14, 0x1e, 0x61, 0xe7, 0xd4, 0x1d, 0x88, 0xbb, 0xdd, 0x2b, 0x82, 0x55, 0x9a, 0x24, 0x78, 0xe4, 0x89, 0x47, 0x70, 0x3c, 0x79, 0x08, 0xfd, 0x7e, 0x0f, 0x8e, 0x23, 0xa1, 0xb5, 0x42, 0x63, 0x4c, 0x18, 0x08, 0x0d, 0xbd, 0x1c, 0xfd, 0x7a, 0x9e, 0x07, 0x29, 0x96, 0x5c, 0x6c, 0xfe, 0x0e, 0xbe, 0xef, 0xe3, 0xbb, 0xfe, 0x8b, 0xd7, 0x60, 0x91, 0x66, 0x78, 0xf7, 0xbb, 0xdf, 0x6b, 0xbb, 0xdf, 0xf3, 0x37, 0xde, 0x84, 0xf3, 0x37, 0xde, 0x84, 0x1f, 0x79, 0xdb, 0xdb, 0x70, 0xe1, 0xb1, 0x47, 0xf1, 0x07, 0x1f, 0xfa, 0x30, 0x9e, 0xb8, 0xf0, 0x71, 0x3b, 0x6a, 0xba, 0xe9, 0x96, 0x57, 0x5f, 0x71, 0x4c, 0xeb, 0x1b, 0xc0, 0xf7, 0xbe, 0xfe, 0xb6, 0x6f, 0x18, 0x60, 0xb7, 0xb7, 0xb7, 0xf0, 0xaa, 0x3b, 0xef, 0xc4, 0x8f, 0xbc, 0xed, 0x6d, 0xf8, 0xc4, 0xc7, 0x3f, 0x8e, 0xdf, 0xf9, 0x9d, 0x5f, 0xc7, 0xf5, 0xe7, 0xfd, 0x15, 0x04, 0x39, 0x8b, 0x55, 0xd4, 0x75, 0x6d, 0xf9, 0xde, 0x54, 0xb8, 0x49, 0x9b, 0x64, 0x3e, 0x7f, 0xff, 0xfd, 0xb8, 0xf1, 0xa6, 0x73, 0xf6, 0xdf, 0x1d, 0x4c, 0xfa, 0x08, 0xc4, 0x25, 0xa3, 0xfd, 0x1d, 0x63, 0x73, 0x73, 0x13, 0x8b, 0xfc, 0x0c, 0xee, 0xbe, 0xe7, 0x6e, 0x3c, 0xf8, 0xc0, 0x03, 0x56, 0xa5, 0xeb, 0x99, 0xbc, 0xce, 0xdf, 0x78, 0x13, 0x7e, 0xea, 0x7f, 0xfa, 0x37, 0xf8, 0xb7, 0xef, 0xfd, 0x29, 0xbb, 0x6b, 0xe7, 0xfd, 0x23, 0x5f, 0x7f, 0x5e, 0x1f, 0x71, 0x12, 0x58, 0xae, 0x5a, 0x1a, 0x5b, 0x24, 0x5e, 0xcb, 0x8b, 0xbe, 0xa7, 0x6e, 0x21, 0x6a, 0x5d, 0x54, 0x66, 0xea, 0xf3, 0xc2, 0x17, 0xbc, 0x18, 0x17, 0x2e, 0xfc, 0x15, 0xaa, 0x6a, 0x6b, 0xe5, 0xdf, 0xb4, 0x0b, 0xb2, 0x93, 0xaf, 0xe7, 0xde, 0xfc, 0x1a, 0x8c, 0xc7, 0x5f, 0x30, 0x4c, 0x14, 0x8f, 0x8c, 0x52, 0x8c, 0xf7, 0x77, 0x9a, 0x26, 0x46, 0xff, 0x9d, 0x31, 0x1c, 0x94, 0xe0, 0x85, 0xf0, 0x68, 0x8f, 0x76, 0x0d, 0xaf, 0xfd, 0xfd, 0x39, 0x6e, 0xba, 0xe9, 0x0c, 0x66, 0x33, 0x62, 0xda, 0x70, 0xf7, 0x4d, 0x05, 0x27, 0xb1, 0x13, 0x48, 0xe8, 0x69, 0x64, 0xce, 0x89, 0x63, 0x0b, 0xfa, 0x41, 0xef, 0xc5, 0xf8, 0xf9, 0x77, 0xdd, 0x85, 0x6f, 0xf7, 0xab, 0x9d, 0xd8, 0xff, 0x8f, 0x5f, 0xf8, 0x1f, 0x70, 0xee, 0x1c, 0x19, 0xae, 0x94, 0x55, 0x61, 0x46, 0xdc, 0xa4, 0x07, 0x2f, 0x34, 0x2c, 0xb0, 0x4b, 0xe9, 0xda, 0xc4, 0x83, 0xe5, 0x33, 0xe3, 0x08, 0xdf, 0x32, 0x66, 0xd8, 0x7e, 0x34, 0x49, 0x16, 0xb6, 0x30, 0xe7, 0x67, 0x9d, 0xc0, 0xbe, 0x4b, 0x26, 0x06, 0x0b, 0x01, 0x1d, 0x1c, 0x1c, 0x60, 0x30, 0x18, 0xd8, 0xe7, 0x9e, 0xe3, 0x03, 0xaf, 0x64, 0x38, 0x26, 0x64, 0x59, 0x61, 0x5c, 0x07, 0x23, 0x8c, 0x46, 0xb1, 0x29, 0x06, 0x1a, 0x34, 0x02, 0x06, 0x14, 0x9a, 0x19, 0xcf, 0x8b, 0x65, 0xfc, 0x92, 0x52, 0x22, 0x5d, 0x64, 0xd6, 0x4a, 0x17, 0x42, 0x1b, 0x9c, 0x81, 0x6f, 0x81, 0x83, 0x8e, 0x0c, 0xed, 0xfa, 0x86, 0xc1, 0xc8, 0xdc, 0x44, 0x71, 0x1c, 0x6d, 0xc7, 0x55, 0xdb, 0x98, 0x99, 0x86, 0x8c, 0xa5, 0x6a, 0xad, 0x3b, 0x99, 0xf9, 0xb7, 0xdd, 0x6e, 0x97, 0x74, 0x16, 0x16, 0x73, 0x6b, 0x15, 0xeb, 0xba, 0xae, 0x55, 0xf1, 0x63, 0xcb, 0xde, 0x45, 0x9a, 0x59, 0x99, 0x62, 0x29, 0x85, 0x95, 0xc1, 0x66, 0x41, 0x26, 0xcf, 0x93, 0xa6, 0xeb, 0xef, 0x40, 0xeb, 0x06, 0x83, 0x41, 0x0f, 0xbb, 0xbb, 0x87, 0x08, 0x43, 0x69, 0x04, 0x9b, 0x84, 0xcd, 0x33, 0xac, 0x89, 0xcf, 0x0d, 0x81, 0xef, 0xfb, 0x98, 0xcd, 0xc8, 0x5e, 0xd7, 0xf3, 0x3c, 0x1c, 0x1c, 0x1c, 0xe0, 0xb1, 0xc7, 0x9e, 0xc0, 0x68, 0xd4, 0xc7, 0x6c, 0x46, 0x45, 0x6c, 0x96, 0xcc, 0x68, 0x82, 0x57, 0xe6, 0x98, 0x0e, 0xfa, 0xd8, 0xda, 0xdc, 0xc0, 0x7c, 0x3a, 0x41, 0x1c, 0xc7, 0x48, 0xa6, 0x53, 0x74, 0x62, 0x81, 0xdd, 0x74, 0x17, 0xf3, 0xf9, 0x1c, 0x1b, 0x9b, 0x5b, 0x70, 0x7d, 0x0f, 0x7b, 0xe3, 0x43, 0x54, 0x75, 0x8d, 0x2a, 0x2f, 0x50, 0x14, 0x99, 0x65, 0xa6, 0xf1, 0x24, 0xd1, 0xf5, 0x82, 0xc8, 0x06, 0x7e, 0x05, 0xa0, 0xa9, 0xd5, 0xca, 0x18, 0x62, 0x29, 0x80, 0x61, 0x88, 0xf7, 0xd2, 0x33, 0x53, 0x30, 0xaa, 0xe7, 0x20, 0x04, 0x34, 0x04, 0x34, 0x34, 0x20, 0x1d, 0x40, 0x4a, 0x08, 0xdf, 0x07, 0xb4, 0x40, 0x68, 0x46, 0x1a, 0x9c, 0x34, 0xdb, 0xdd, 0x02, 0x00, 0xcc, 0x92, 0x89, 0xa5, 0x64, 0x79, 0x9e, 0x07, 0xd9, 0x0a, 0x32, 0x5a, 0x3b, 0x50, 0x8a, 0x2a, 0x29, 0xe1, 0x08, 0x84, 0x9e, 0x6b, 0x3b, 0x55, 0x3a, 0x5e, 0x0d, 0xa5, 0x6b, 0x63, 0x08, 0xe1, 0x2c, 0xc7, 0xe1, 0xcd, 0x52, 0xea, 0x72, 0x91, 0xb6, 0x12, 0xb8, 0xbb, 0x4c, 0x86, 0x8d, 0xaa, 0x50, 0x37, 0x25, 0x8a, 0x3c, 0xbd, 0x42, 0xde, 0x6f, 0x39, 0x62, 0xd7, 0x86, 0xf2, 0xa6, 0x51, 0xd7, 0xab, 0x89, 0xdb, 0xfa, 0xe7, 0x4a, 0x67, 0x85, 0xfb, 0x2b, 0xa5, 0x07, 0xdf, 0x97, 0xf6, 0xbd, 0x98, 0x2a, 0x53, 0x55, 0x35, 0x9a, 0xa6, 0x6c, 0x8d, 0x8e, 0x02, 0xac, 0xad, 0x45, 0x50, 0xbd, 0xe5, 0xbf, 0xf7, 0xbd, 0xc8, 0x80, 0x12, 0x09, 0x11, 0xea, 0x7b, 0x91, 0xa9, 0x38, 0xa9, 0x2a, 0x75, 0x9c, 0xc6, 0x26, 0x74, 0xee, 0x9a, 0xd9, 0x6d, 0xa8, 0x5d, 0x70, 0xb4, 0x69, 0x18, 0xed, 0x87, 0xe1, 0xa4, 0x2d, 0x25, 0x15, 0x3f, 0xba, 0x75, 0xbe, 0x05, 0x36, 0x47, 0x2f, 0xc3, 0xeb, 0xbe, 0xef, 0x8d, 0xd8, 0xde, 0xde, 0xba, 0x6a, 0x20, 0xda, 0x39, 0x75, 0x07, 0x7e, 0xe4, 0x6d, 0x6f, 0xfb, 0x86, 0xc1, 0x2a, 0x99, 0xcf, 0xf1, 0xf9, 0xfb, 0xef, 0xc7, 0x67, 0x3f, 0x7b, 0x3f, 0x1e, 0x7e, 0xf4, 0xff, 0xbb, 0x62, 0xaa, 0x40, 0x9f, 0x4b, 0xc2, 0x45, 0x9d, 0x38, 0x5c, 0xda, 0xfe, 0xb5, 0x70, 0x0d, 0x1c, 0xf4, 0xde, 0xf6, 0x8f, 0x7f, 0xf8, 0x69, 0x13, 0x1a, 0x75, 0x80, 0x6f, 0xc5, 0x6f, 0xfd, 0xe6, 0xfb, 0x30, 0x9d, 0x7c, 0xfa, 0x9a, 0xba, 0xcd, 0x6f, 0x34, 0x16, 0x7d, 0xf1, 0x4b, 0x5e, 0x82, 0xdf, 0xfa, 0xcd, 0xf7, 0x21, 0x5d, 0x7c, 0x1e, 0x42, 0x03, 0x51, 0x14, 0xa3, 0x17, 0x93, 0x64, 0xa3, 0x50, 0x1a, 0x59, 0xb2, 0x80, 0x84, 0x40, 0x53, 0x37, 0x98, 0xe7, 0x39, 0xca, 0x92, 0xbe, 0xd7, 0xce, 0x75, 0x3b, 0xf8, 0xde, 0xd7, 0xbe, 0xde, 0xbe, 0xd7, 0xf7, 0xbe, 0xf6, 0xf5, 0xf8, 0xc4, 0xc7, 0x7f, 0x1b, 0xdd, 0x5e, 0x8c, 0xb4, 0xb8, 0x19, 0xb7, 0xbe, 0xe0, 0x3b, 0x57, 0xc6, 0xd8, 0x69, 0x9e, 0x3d, 0xab, 0x63, 0xed, 0xf6, 0x7a, 0xf8, 0xee, 0xef, 0xf9, 0xa7, 0xf8, 0x8f, 0x1f, 0xfd, 0x2d, 0x54, 0x25, 0x8d, 0x01, 0x9b, 0x5a, 0xa3, 0x2a, 0x1b, 0x8b, 0x02, 0xa7, 0x89, 0x99, 0xd9, 0x91, 0x83, 0xee, 0x89, 0xc0, 0x02, 0x39, 0x9d, 0x6b, 0xfa, 0xbc, 0x46, 0x35, 0xd4, 0x25, 0x01, 0x08, 0x42, 0xa2, 0xb8, 0x3a, 0xe6, 0x3d, 0x7e, 0xe0, 0xcd, 0x6f, 0xc6, 0x27, 0x3e, 0xbe, 0x83, 0x17, 0xbf, 0xe4, 0x25, 0xdf, 0xf0, 0x3d, 0x78, 0x25, 0x91, 0xcc, 0xe7, 0xb8, 0x78, 0xf9, 0x3e, 0x0c, 0x4d, 0x02, 0x68, 0x9a, 0x06, 0xfb, 0x07, 0x7b, 0x58, 0x2c, 0x16, 0xe8, 0x74, 0x96, 0x9e, 0xdc, 0xec, 0x5b, 0xc0, 0xf7, 0xf3, 0x74, 0x3e, 0x03, 0xd0, 0xbb, 0xa6, 0xe3, 0x7e, 0xc3, 0xeb, 0xde, 0x8a, 0x0f, 0xff, 0xe1, 0xaf, 0x23, 0x8e, 0x09, 0x2d, 0x1d, 0x7a, 0x3e, 0x7a, 0x31, 0x81, 0x79, 0x3d, 0x47, 0x22, 0xf4, 0x62, 0x08, 0xe5, 0x60, 0x7a, 0x34, 0x35, 0x85, 0x65, 0x8e, 0x22, 0xcd, 0xf0, 0xbd, 0xaf, 0xff, 0xa7, 0xdf, 0x96, 0xae, 0xfc, 0x9b, 0x25, 0xf6, 0x9f, 0xfc, 0xe9, 0x5f, 0xc4, 0xfb, 0x7e, 0xfb, 0xe7, 0xd0, 0xa4, 0x54, 0xfc, 0x7b, 0x41, 0x88, 0xbc, 0xa6, 0x6b, 0x18, 0x79, 0xae, 0xf1, 0xab, 0xa7, 0xd8, 0x57, 0x37, 0x35, 0xca, 0xac, 0xb4, 0x58, 0x8c, 0xaa, 0x22, 0x24, 0x37, 0x84, 0x03, 0xe9, 0xb9, 0x58, 0xdf, 0xdc, 0x40, 0x6f, 0xd0, 0x47, 0x51, 0x64, 0x96, 0x7e, 0x47, 0xc8, 0x7d, 0xc0, 0xf5, 0x3d, 0x38, 0x8a, 0xa6, 0x74, 0x10, 0xa4, 0x5e, 0x19, 0x77, 0xfa, 0xc8, 0xf2, 0x0a, 0xc9, 0x62, 0x1f, 0xb0, 0xe6, 0x4e, 0x4b, 0x93, 0x91, 0x38, 0xee, 0xa2, 0x56, 0xf4, 0x19, 0x5b, 0xdb, 0xdb, 0x16, 0x1b, 0xd3, 0x14, 0x35, 0xe0, 0x34, 0x68, 0x9a, 0x12, 0x51, 0xec, 0x41, 0x6b, 0xc7, 0x4c, 0x05, 0x96, 0x0d, 0x9c, 0xe3, 0x28, 0xb8, 0x9e, 0x8b, 0x34, 0x5d, 0xa0, 0xa8, 0x68, 0xfa, 0x57, 0x37, 0x35, 0x66, 0xf3, 0xc4, 0x34, 0x53, 0x31, 0x34, 0x2a, 0x1c, 0x1f, 0xcf, 0x8c, 0xbc, 0xb2, 0x4b, 0xf4, 0x36, 0xcf, 0x43, 0x51, 0x10, 0xfd, 0x6c, 0x9e, 0x94, 0x2b, 0x54, 0x56, 0x57, 0x38, 0x70, 0x4d, 0xe7, 0x5c, 0xd5, 0x19, 0x1a, 0xa3, 0x29, 0x21, 0x5d, 0xc7, 0xea, 0x31, 0x58, 0x0c, 0x8c, 0x71, 0xa2, 0xe4, 0x55, 0x22, 0x8b, 0x36, 0x31, 0x16, 0x68, 0x7f, 0x7f, 0x1f, 0xba, 0x6e, 0x20, 0xd9, 0x1f, 0xa0, 0x28, 0x00, 0x29, 0x11, 0x9b, 0x09, 0x84, 0xae, 0x6b, 0xe4, 0x59, 0x86, 0x7e, 0x1c, 0xdb, 0xbf, 0x23, 0x84, 0xc0, 0xe9, 0xcd, 0xa1, 0xa5, 0x9a, 0x46, 0x51, 0x64, 0x5d, 0x0c, 0xf3, 0xbc, 0x42, 0x14, 0xf9, 0x18, 0x0e, 0x87, 0xb6, 0x21, 0x0b, 0xc2, 0x00, 0x79, 0x91, 0xa1, 0x3f, 0xe8, 0x19, 0x85, 0x45, 0x07, 0xf3, 0x64, 0x86, 0x28, 0x0e, 0xcd, 0xbf, 0x03, 0x6e, 0x3c, 0xbf, 0x4d, 0x05, 0x5b, 0x4d, 0x8d, 0x83, 0x52, 0x0a, 0xe3, 0xfd, 0x5d, 0x02, 0x28, 0xba, 0xa4, 0xf7, 0x20, 0x47, 0x5d, 0x14, 0x65, 0x0a, 0xed, 0x04, 0x58, 0x5b, 0x1b, 0x60, 0x32, 0x99, 0x00, 0x86, 0x12, 0xc7, 0xce, 0x8b, 0xdd, 0x6e, 0x97, 0x56, 0x98, 0xed, 0x6e, 0xae, 0x0d, 0x4c, 0x68, 0x57, 0xf1, 0xed, 0x80, 0xdc, 0x36, 0x82, 0xaf, 0xca, 0x94, 0x41, 0xfb, 0x2b, 0x0a, 0x3b, 0xbc, 0xf7, 0x6a, 0x03, 0x7e, 0xda, 0x94, 0x08, 0xeb, 0x26, 0xd3, 0xe4, 0x76, 0x27, 0xdb, 0xa6, 0x83, 0x59, 0x14, 0xb7, 0x23, 0x57, 0xa4, 0xf8, 0xac, 0x66, 0x34, 0x27, 0x56, 0x88, 0x15, 0x54, 0x34, 0xbf, 0x4f, 0xbb, 0xeb, 0x6b, 0x1f, 0x2f, 0xff, 0xdf, 0x8e, 0xf6, 0xab, 0x7a, 0xe5, 0xf7, 0xdb, 0x1d, 0x78, 0xfb, 0x38, 0xf8, 0x33, 0xda, 0x00, 0x0e, 0x00, 0xa8, 0xd5, 0xea, 0x08, 0xf0, 0x24, 0xf5, 0x8a, 0x27, 0x03, 0x8c, 0x6c, 0xe4, 0x24, 0x6b, 0x0d, 0x01, 0x2a, 0xe7, 0xaa, 0x9f, 0xb5, 0xd4, 0xe2, 0xf6, 0xaf, 0x7a, 0xfc, 0x27, 0x3f, 0xaf, 0xfd, 0xa3, 0xad, 0x40, 0xd6, 0x06, 0x61, 0xd8, 0xd1, 0xa5, 0xd6, 0x2b, 0x45, 0x1a, 0x00, 0x3c, 0xef, 0xd6, 0xd7, 0xe2, 0xf5, 0x6f, 0x78, 0xc3, 0x37, 0xec, 0xa8, 0x00, 0x5c, 0xb5, 0x33, 0xbf, 0x5a, 0xa2, 0x79, 0xd5, 0x9d, 0x77, 0xe2, 0x55, 0x77, 0xde, 0x89, 0x64, 0xfe, 0x56, 0x7c, 0xfe, 0xfe, 0xfb, 0xf1, 0xc7, 0x7f, 0xfa, 0x47, 0x38, 0x3e, 0xfa, 0x8a, 0x1d, 0xf5, 0xf2, 0xb1, 0xf2, 0xb9, 0xe1, 0xdd, 0x35, 0x3d, 0x80, 0xf5, 0x4a, 0xc0, 0xfb, 0x66, 0x9f, 0x75, 0xea, 0xd4, 0x16, 0x0e, 0xf6, 0xcb, 0x6f, 0x5b, 0x90, 0xed, 0xf6, 0x7a, 0xb8, 0xfb, 0x9e, 0xbb, 0xf1, 0x9e, 0x5f, 0x79, 0x0f, 0x0e, 0xf6, 0xff, 0x72, 0x85, 0xce, 0xc7, 0xff, 0xe7, 0xc9, 0x4d, 0xaf, 0xd7, 0x43, 0xb2, 0xa8, 0x56, 0x26, 0x08, 0xed, 0xe2, 0xa0, 0x9d, 0xc0, 0x4f, 0xbe, 0x3e, 0xfb, 0xd9, 0x2f, 0xe3, 0x47, 0x7e, 0xec, 0xd9, 0x1d, 0xeb, 0x6d, 0xb7, 0xdf, 0x8e, 0x7b, 0xdf, 0x1f, 0x60, 0xd4, 0x99, 0xe0, 0x15, 0xaf, 0xfc, 0x6f, 0xf0, 0xd9, 0xfb, 0x7e, 0xdf, 0x76, 0x0b, 0x6d, 0xba, 0x21, 0x9f, 0x67, 0x9e, 0x66, 0x91, 0xf5, 0xe8, 0xb5, 0x8d, 0xaf, 0xb7, 0xb6, 0x4e, 0x61, 0x34, 0xea, 0xae, 0x70, 0x6d, 0xf7, 0xf7, 0xf6, 0x57, 0xbe, 0xef, 0x37, 0x7b, 0x3d, 0xf8, 0xc0, 0x97, 0x71, 0xfe, 0xc6, 0x9b, 0xf0, 0xf8, 0xe3, 0x8f, 0xc3, 0x75, 0x97, 0x12, 0xd2, 0x7c, 0x9c, 0xbc, 0xbf, 0x66, 0xf6, 0x4c, 0x9e, 0xe7, 0x16, 0x85, 0xdd, 0xed, 0x76, 0x91, 0x66, 0x0d, 0xd2, 0xe2, 0xda, 0xce, 0xd1, 0xce, 0x75, 0x3b, 0x08, 0xc2, 0x10, 0xbd, 0x5e, 0x6c, 0x11, 0xff, 0x6d, 0xa0, 0x20, 0xeb, 0x6e, 0x90, 0xd4, 0xe9, 0x18, 0x0f, 0x3f, 0x92, 0xe0, 0xe7, 0xff, 0xf7, 0xf7, 0x7c, 0xd3, 0x7b, 0xef, 0xdb, 0x99, 0xd4, 0x6f, 0x7b, 0xde, 0xeb, 0xf1, 0xb5, 0x47, 0xff, 0xac, 0x85, 0x59, 0xa2, 0x18, 0x51, 0x1b, 0x1d, 0xfd, 0xa5, 0x5a, 0xe2, 0x52, 0xed, 0x2f, 0x8e, 0x63, 0x78, 0x2e, 0xb9, 0x6d, 0xcd, 0xe7, 0x73, 0xe4, 0xe3, 0xcc, 0x82, 0x78, 0xa3, 0x28, 0xb0, 0x5a, 0xe2, 0x54, 0xc0, 0x2f, 0x57, 0xa6, 0x4d, 0xbd, 0xd4, 0xab, 0xe0, 0xf5, 0x1a, 0x35, 0x4d, 0xdc, 0x99, 0xe7, 0x57, 0xe0, 0x71, 0xf8, 0x07, 0xc7, 0x41, 0x2e, 0xc0, 0xd7, 0xba, 0x1b, 0x96, 0x95, 0x70, 0xb2, 0xf8, 0xe2, 0xc6, 0x8d, 0xe4, 0x73, 0x63, 0xa3, 0xd0, 0x58, 0x5a, 0x2c, 0x8f, 0x46, 0x83, 0x2c, 0x4d, 0x57, 0x3a, 0x71, 0x5e, 0x13, 0xf0, 0xb4, 0xa9, 0xd3, 0xe9, 0x5d, 0xc1, 0x14, 0x6a, 0xb3, 0x44, 0x38, 0x9f, 0xb4, 0x9d, 0xe4, 0x38, 0xe6, 0xf1, 0xc8, 0xbc, 0x3d, 0x02, 0x6f, 0xd3, 0x72, 0xa5, 0x94, 0x68, 0x44, 0x65, 0xff, 0xcd, 0x92, 0xd1, 0xb4, 0x7c, 0x5e, 0xda, 0xaa, 0x8a, 0x3c, 0x05, 0x66, 0x2d, 0x0a, 0x9e, 0xa8, 0xea, 0x5e, 0x1f, 0x83, 0x6e, 0xcf, 0xae, 0xdf, 0x42, 0x8f, 0x26, 0x10, 0x9e, 0x91, 0x9c, 0x2d, 0x8a, 0x02, 0xf9, 0x22, 0x85, 0xe7, 0x48, 0xdc, 0x7a, 0xcb, 0x73, 0x10, 0x04, 0x01, 0xe6, 0xf3, 0x39, 0x2e, 0x5f, 0xbe, 0x8c, 0x40, 0x0a, 0x74, 0x7b, 0x3d, 0xf8, 0x9e, 0x07, 0xa1, 0x48, 0x8e, 0xbc, 0xa9, 0x02, 0x08, 0xa3, 0x93, 0xd1, 0x96, 0x9b, 0x6d, 0x1a, 0xca, 0x7f, 0x9e, 0xeb, 0x23, 0xee, 0x76, 0xb0, 0xd6, 0xac, 0x61, 0x73, 0x9b, 0xc6, 0xf4, 0x17, 0x2f, 0x5e, 0xb4, 0xcf, 0xbb, 0x1b, 0x18, 0x41, 0x7f, 0xdb, 0x49, 0x09, 0x72, 0x3f, 0x17, 0x42, 0x40, 0xf3, 0x48, 0xf4, 0xc4, 0xa0, 0x4b, 0x9b, 0x5f, 0x85, 0x9d, 0xd8, 0x24, 0x1a, 0x69, 0xfe, 0xc0, 0x69, 0x25, 0x60, 0x98, 0x8b, 0x27, 0xe8, 0x3f, 0x47, 0x58, 0x81, 0x11, 0x4e, 0x2a, 0x81, 0x1b, 0xac, 0xdc, 0x00, 0xed, 0x1d, 0x2d, 0x00, 0x28, 0x67, 0x35, 0xc9, 0x2e, 0xf7, 0xb7, 0x9a, 0x90, 0xd3, 0x10, 0x10, 0x0e, 0xed, 0x8c, 0x21, 0x1c, 0x40, 0x3b, 0x2b, 0x45, 0x41, 0x53, 0x9b, 0xcf, 0x32, 0x2e, 0x50, 0x68, 0x15, 0x2d, 0x42, 0x08, 0xc4, 0xbd, 0xce, 0x4a, 0xc1, 0x72, 0x32, 0xe9, 0x71, 0xa2, 0x59, 0xfe, 0x99, 0x5e, 0x49, 0xe8, 0xc2, 0x59, 0xf5, 0x20, 0x6f, 0x94, 0x86, 0x12, 0xea, 0x44, 0x91, 0x40, 0xe7, 0xc5, 0x31, 0xd3, 0x01, 0x01, 0xda, 0x31, 0x01, 0xc2, 0x16, 0x1c, 0xed, 0x57, 0x3b, 0x69, 0xbb, 0x5a, 0x5c, 0x51, 0x50, 0xb5, 0x7f, 0xde, 0xd4, 0x7a, 0xe5, 0xfb, 0xb4, 0x8f, 0xbd, 0x7d, 0x83, 0x9e, 0x94, 0x34, 0xe4, 0xf7, 0xa8, 0x8b, 0x00, 0x3f, 0xf1, 0xf6, 0x77, 0xfe, 0x8d, 0x75, 0x22, 0x9c, 0xdc, 0xff, 0xe2, 0x3f, 0x7e, 0x0a, 0x62, 0x6d, 0xcd, 0x5c, 0xc7, 0x65, 0xd1, 0xa1, 0x0c, 0x37, 0x9d, 0x8b, 0x35, 0x0a, 0xe2, 0xd5, 0x35, 0x7f, 0x8e, 0x96, 0xe7, 0xbf, 0xed, 0xc7, 0x7e, 0xf7, 0x3d, 0x77, 0xe3, 0x5d, 0xff, 0xb2, 0x84, 0x12, 0x5f, 0x45, 0x5a, 0x94, 0x2b, 0xab, 0x18, 0xc7, 0xf3, 0x11, 0x08, 0x07, 0x5a, 0xe9, 0x6b, 0x1c, 0x00, 0xb7, 0xab, 0x31, 0xf7, 0xdb, 0x72, 0x9c, 0xdf, 0xfb, 0xda, 0xd7, 0xe3, 0xbe, 0x4f, 0xfd, 0x3e, 0xee, 0xfb, 0xd4, 0xef, 0xaf, 0xe0, 0x5b, 0xe8, 0x9c, 0x2a, 0x38, 0xda, 0x14, 0x75, 0x10, 0xd0, 0xc2, 0x81, 0x26, 0xd8, 0x0e, 0xaa, 0x5a, 0x59, 0x0c, 0xc1, 0xb7, 0x92, 0x8c, 0x2d, 0xad, 0xa9, 0xe5, 0x76, 0x16, 0x18, 0xa7, 0x41, 0xee, 0xbe, 0xb9, 0xb0, 0x79, 0xba, 0x17, 0xd1, 0x86, 0xa8, 0x10, 0xf9, 0xdd, 0xff, 0x73, 0x81, 0xc8, 0xf7, 0xd0, 0x34, 0x66, 0x65, 0x04, 0x06, 0x3d, 0x09, 0x2b, 0x04, 0xc2, 0x1a, 0xf7, 0x49, 0x92, 0x22, 0xcb, 0x0a, 0x4c, 0x8e, 0x33, 0xc0, 0xdb, 0xbe, 0xa6, 0xf3, 0xf3, 0x6b, 0xbf, 0xfa, 0x2f, 0xd1, 0x1f, 0x79, 0x28, 0xaa, 0x06, 0x45, 0x95, 0xae, 0x14, 0xb4, 0x5c, 0x30, 0xf0, 0xa8, 0x56, 0x7a, 0x01, 0x7e, 0xe6, 0x67, 0x7f, 0xfa, 0x6f, 0x2d, 0x99, 0xb7, 0x31, 0x05, 0x3f, 0x75, 0xcf, 0xbf, 0xc7, 0xc6, 0xe9, 0xd8, 0x26, 0x4e, 0x62, 0x91, 0x0c, 0x2d, 0x6d, 0xb1, 0x4d, 0xdb, 0xcc, 0x73, 0x3a, 0x27, 0x8e, 0xeb, 0x2d, 0x9f, 0x6d, 0xc7, 0x81, 0x74, 0x1c, 0x08, 0xc7, 0x41, 0xa5, 0x1a, 0x34, 0x79, 0x86, 0xb2, 0x32, 0xfe, 0xf0, 0xf5, 0xb2, 0x19, 0xaa, 0xaa, 0x65, 0x07, 0x3e, 0x9d, 0xce, 0x21, 0x25, 0x15, 0x52, 0x24, 0xb9, 0x2b, 0x01, 0xc7, 0x85, 0x70, 0xf5, 0x72, 0x62, 0xab, 0x35, 0xf2, 0xb2, 0x44, 0x5e, 0x56, 0x96, 0x73, 0xce, 0xf1, 0x38, 0xc9, 0xd2, 0x96, 0x8f, 0x78, 0x65, 0x0a, 0x0e, 0xc7, 0x4e, 0x65, 0x79, 0x1f, 0xee, 0x79, 0xae, 0x99, 0xd0, 0x2e, 0x75, 0xe3, 0x49, 0xf0, 0xca, 0x5b, 0x89, 0x49, 0x9c, 0xc8, 0x19, 0x78, 0xd6, 0xd4, 0xd2, 0xc6, 0x07, 0x66, 0xe0, 0xb4, 0x47, 0xee, 0x51, 0x18, 0xac, 0x00, 0xda, 0x4e, 0x4e, 0x29, 0xdb, 0x88, 0xf9, 0x55, 0x0a, 0x27, 0x8c, 0x1f, 0xfd, 0xd2, 0x90, 0xe5, 0x24, 0xe0, 0x98, 0x8b, 0x81, 0xf6, 0xfb, 0x73, 0xd1, 0xc0, 0x40, 0xbe, 0xb6, 0x3b, 0x20, 0x63, 0x6b, 0xda, 0xcd, 0x1f, 0xaf, 0x10, 0x38, 0xb6, 0xb1, 0x6f, 0x03, 0x6b, 0x60, 0xe4, 0x59, 0x45, 0x38, 0x80, 0xaa, 0x80, 0x6e, 0x00, 0xcf, 0x93, 0x08, 0xfc, 0x10, 0x55, 0x1d, 0x43, 0x28, 0xe2, 0xc4, 0x0b, 0x57, 0xc2, 0x13, 0x20, 0x24, 0xbe, 0x39, 0x06, 0xe6, 0xb5, 0xbb, 0x7e, 0x60, 0x75, 0x21, 0x98, 0xad, 0xe1, 0xf2, 0xdc, 0xbf, 0x4d, 0x88, 0xe7, 0x13, 0xc3, 0x1c, 0xe9, 0x93, 0x9d, 0x1d, 0x27, 0x87, 0xb2, 0x60, 0x70, 0x95, 0xa9, 0x72, 0x94, 0x68, 0xed, 0x3b, 0x96, 0x52, 0x78, 0xab, 0xa3, 0xfb, 0x56, 0x42, 0x42, 0x73, 0x45, 0x32, 0x6b, 0x77, 0xb9, 0xac, 0xed, 0xbd, 0x34, 0x7f, 0xe7, 0xee, 0x57, 0x1b, 0xb7, 0xa9, 0x7a, 0x45, 0x09, 0xeb, 0x1b, 0x25, 0xc7, 0xf6, 0x68, 0x9c, 0x4f, 0x30, 0xef, 0x00, 0x4f, 0x8a, 0xf2, 0x9f, 0x74, 0xba, 0x6a, 0xff, 0x7e, 0x3b, 0x41, 0xba, 0xde, 0xf2, 0x86, 0xa2, 0x22, 0x63, 0xf5, 0x5c, 0xb5, 0x2b, 0xdd, 0xab, 0xbd, 0xa4, 0x90, 0x2b, 0xc7, 0x75, 0x32, 0x39, 0xd7, 0x75, 0x71, 0x45, 0xc1, 0xd1, 0xfe, 0x8c, 0xc0, 0x8f, 0xae, 0x38, 0xaf, 0xed, 0xe3, 0x3d, 0x79, 0xfe, 0xdb, 0xd5, 0xea, 0xe6, 0xc6, 0xcb, 0xaf, 0x00, 0x9e, 0xfd, 0x4d, 0xbd, 0xde, 0xf1, 0x8e, 0x1f, 0xc7, 0xbf, 0xf8, 0xb9, 0xb7, 0xc3, 0x0d, 0x35, 0x9a, 0x66, 0xb9, 0xcb, 0x6f, 0xea, 0xfc, 0x8a, 0xe3, 0x4b, 0xb3, 0xfa, 0xdb, 0xfe, 0xf9, 0x9f, 0xf8, 0xf8, 0xc7, 0xf1, 0xe2, 0x97, 0xbc, 0xe4, 0x9a, 0xbf, 0xeb, 0x3b, 0xde, 0xf1, 0xe3, 0x78, 0xf7, 0x7b, 0xee, 0xb6, 0xfb, 0xc4, 0xb6, 0x20, 0x4e, 0xd3, 0x34, 0x88, 0x83, 0xf0, 0xca, 0xc9, 0xd4, 0xb7, 0x3a, 0xc2, 0x7e, 0x06, 0x00, 0xaf, 0xab, 0xbd, 0x86, 0xa3, 0xd1, 0x4a, 0x20, 0x39, 0xe9, 0x9e, 0x75, 0x72, 0x92, 0x63, 0xef, 0x3d, 0x57, 0x61, 0x7b, 0x7b, 0x0b, 0xf7, 0x7d, 0xf2, 0x53, 0xdf, 0xd2, 0xe7, 0xa4, 0x69, 0x82, 0xd9, 0x0c, 0x2b, 0xbb, 0x78, 0xd5, 0xa8, 0xd5, 0xbd, 0xfe, 0x3d, 0x6f, 0xc1, 0xff, 0xf2, 0xbf, 0xfd, 0xea, 0xb7, 0x74, 0x9e, 0xaf, 0x3b, 0xf3, 0x22, 0xec, 0xef, 0xdd, 0x8f, 0x30, 0x70, 0x4d, 0x67, 0x4a, 0x80, 0x4e, 0x4e, 0x5e, 0x44, 0xa5, 0xd4, 0x10, 0x42, 0x22, 0x8a, 0x3c, 0xf8, 0x5e, 0x80, 0x3c, 0x07, 0xf2, 0x6b, 0xbc, 0x3d, 0xb4, 0xa3, 0x0c, 0x45, 0xf4, 0x4a, 0x2d, 0x07, 0xc2, 0x05, 0x54, 0x46, 0x05, 0x53, 0xe2, 0x55, 0xaf, 0x7c, 0xf3, 0xdf, 0xf8, 0x98, 0xfd, 0xe9, 0x5e, 0x3f, 0xfc, 0xd6, 0x7f, 0x8e, 0x7f, 0xff, 0x1f, 0xde, 0x0d, 0xd7, 0x6d, 0xec, 0x24, 0x70, 0x3e, 0x4b, 0x56, 0x55, 0x02, 0x85, 0x84, 0x70, 0x1c, 0xa8, 0x46, 0x21, 0xaf, 0x0a, 0x38, 0x5e, 0x7b, 0xba, 0x8a, 0x25, 0xed, 0xcb, 0xdc, 0x07, 0xcc, 0x7d, 0xe6, 0x46, 0x8b, 0x04, 0xad, 0xaa, 0x16, 0x83, 0xc9, 0x6f, 0x81, 0xa1, 0x99, 0x0e, 0xb9, 0x54, 0x97, 0xdc, 0xd8, 0xd8, 0x68, 0xb1, 0x70, 0x1a, 0x6b, 0xdc, 0x65, 0xd7, 0x98, 0x8e, 0x67, 0xcf, 0x1d, 0xfb, 0x55, 0xb8, 0xae, 0x84, 0x70, 0x96, 0x09, 0xb2, 0xac, 0x72, 0xab, 0x94, 0xa6, 0x35, 0xe7, 0x15, 0xd6, 0x39, 0xe9, 0xaf, 0xb0, 0xaa, 0xda, 0xf8, 0x1f, 0x9a, 0x44, 0x78, 0xad, 0x86, 0xce, 0xb5, 0xf8, 0x01, 0x9e, 0xc4, 0x96, 0xc6, 0xd5, 0x90, 0x8e, 0x87, 0x29, 0xb2, 0xca, 0x32, 0xae, 0x58, 0x93, 0xe4, 0xa4, 0x5f, 0x3c, 0xbd, 0x27, 0x29, 0x54, 0xb6, 0x35, 0x3e, 0x84, 0x20, 0x05, 0x52, 0xad, 0x09, 0xc3, 0xc5, 0xcf, 0x7c, 0x5b, 0x7c, 0x8a, 0xb0, 0x1d, 0x44, 0xa7, 0x26, 0xd6, 0x85, 0xb2, 0xaa, 0xa4, 0xe4, 0x71, 0xa0, 0x8c, 0xda, 0x9f, 0x44, 0x92, 0xcc, 0x48, 0x79, 0x51, 0xd0, 0x4a, 0x62, 0x36, 0x6b, 0x6c, 0xe2, 0x3d, 0x75, 0x6a, 0x0b, 0x69, 0xde, 0xc0, 0x75, 0x80, 0xf9, 0xbc, 0xb6, 0x8a, 0x87, 0x9e, 0x4b, 0xa6, 0x4e, 0x5a, 0x6b, 0x34, 0x20, 0x33, 0x1b, 0x2f, 0xf0, 0xe1, 0x28, 0x40, 0x3b, 0x02, 0xb5, 0x01, 0xda, 0x56, 0xaa, 0xc1, 0x62, 0x3a, 0x5d, 0x11, 0x35, 0x92, 0x52, 0x92, 0xdb, 0xda, 0x49, 0x85, 0x2e, 0xbe, 0xe1, 0xdb, 0x56, 0x8c, 0x27, 0x93, 0x22, 0x00, 0xb8, 0xa1, 0x34, 0x37, 0x9a, 0x6b, 0x4e, 0x94, 0x80, 0xdb, 0xea, 0xd0, 0x19, 0xb5, 0xdd, 0x0e, 0x28, 0xed, 0x7f, 0x9f, 0x16, 0x8b, 0x13, 0x3b, 0x68, 0xb9, 0x52, 0x09, 0xa1, 0x5a, 0xb5, 0xab, 0xd3, 0x8a, 0x1c, 0xa1, 0xac, 0x10, 0x49, 0xeb, 0x01, 0xbd, 0x5a, 0x87, 0xcd, 0xc8, 0xe2, 0x76, 0xa2, 0x5c, 0x26, 0x3d, 0x8d, 0xc8, 0xf8, 0x78, 0x3e, 0x5d, 0xc2, 0x6c, 0xbb, 0x5f, 0x09, 0xe1, 0xd8, 0x5d, 0x8a, 0xb5, 0xd3, 0x6b, 0x55, 0x70, 0x42, 0x38, 0xad, 0x9b, 0x8f, 0x65, 0x4e, 0xbd, 0xab, 0x07, 0x19, 0xae, 0xfa, 0x84, 0x73, 0x45, 0x42, 0x5f, 0x39, 0xbf, 0x5e, 0x78, 0xd5, 0x62, 0xc0, 0x7e, 0x26, 0xe4, 0x15, 0xbf, 0x77, 0xf2, 0xff, 0xed, 0x75, 0x05, 0xbf, 0xce, 0x9c, 0xfe, 0xcf, 0x71, 0xf7, 0x3d, 0x77, 0xff, 0xad, 0x05, 0xab, 0x6e, 0xaf, 0x87, 0x9f, 0xfc, 0xe9, 0x5f, 0xc4, 0xbf, 0xfe, 0xd5, 0x7f, 0x6e, 0xd8, 0x0f, 0x1e, 0x00, 0x07, 0xca, 0xbd, 0x72, 0x9d, 0xe3, 0x55, 0xd7, 0x9e, 0x20, 0xb7, 0xd6, 0xcf, 0x3c, 0xed, 0x9f, 0xed, 0xed, 0xed, 0xe3, 0x67, 0xde, 0xf9, 0x4e, 0xfc, 0xc4, 0x8f, 0xff, 0xf8, 0x35, 0xef, 0xd9, 0xbb, 0xbd, 0x1e, 0x5e, 0x7d, 0xe7, 0x5b, 0xf0, 0xc7, 0x7f, 0xfa, 0x1b, 0x70, 0x3d, 0x02, 0x68, 0x96, 0x55, 0x83, 0x3c, 0x27, 0x24, 0xb1, 0x74, 0x80, 0xa2, 0x78, 0x66, 0xe7, 0xc4, 0x0f, 0x83, 0x6f, 0xcb, 0xb9, 0xdd, 0xdc, 0xda, 0xc6, 0x3f, 0x7b, 0xc7, 0xaf, 0xe0, 0x8f, 0x3e, 0xfc, 0x61, 0x3c, 0xf4, 0xb5, 0x8f, 0x9a, 0x80, 0x64, 0xd6, 0x2d, 0xae, 0x47, 0x13, 0x2c, 0x41, 0x86, 0x95, 0xed, 0x0e, 0x3e, 0x37, 0x82, 0x31, 0x8c, 0x4a, 0xff, 0xa6, 0x89, 0xb1, 0x55, 0x28, 0x32, 0xa8, 0x32, 0xcf, 0x56, 0x51, 0xec, 0x3f, 0xf1, 0xf6, 0x77, 0xe2, 0xe0, 0x60, 0xff, 0x5b, 0x4a, 0xe8, 0x3f, 0xf8, 0x43, 0x6f, 0xc6, 0xaf, 0xfc, 0xd2, 0xa7, 0x51, 0x80, 0x13, 0x98, 0x0f, 0x21, 0xe8, 0xfd, 0x83, 0x50, 0xae, 0xba, 0x0e, 0x2a, 0x9a, 0x96, 0xd5, 0x55, 0x03, 0x5c, 0xe3, 0xed, 0x31, 0x39, 0xae, 0x10, 0x77, 0x4b, 0xf4, 0xfb, 0x31, 0xdc, 0x96, 0xf7, 0x75, 0xd3, 0x34, 0x08, 0x1a, 0x60, 0x38, 0x1c, 0xa2, 0xdb, 0xed, 0x62, 0x3e, 0x1d, 0x7c, 0x4b, 0x93, 0x8a, 0xbf, 0xa9, 0xd7, 0x6d, 0xb7, 0xdf, 0x8e, 0x0f, 0x7e, 0xf0, 0x56, 0x00, 0x8f, 0xd8, 0x78, 0x55, 0x9a, 0x40, 0xdd, 0x1e, 0x77, 0x73, 0x9c, 0x6d, 0x1a, 0x0d, 0xed, 0x2a, 0xf2, 0x21, 0x30, 0x72, 0xa6, 0x4a, 0x29, 0xe4, 0x65, 0x81, 0x24, 0x2d, 0x57, 0xd4, 0x09, 0x1d, 0xc7, 0xb5, 0x45, 0x68, 0x9e, 0x17, 0x76, 0x34, 0x5e, 0x57, 0x44, 0xf9, 0x8c, 0xa2, 0x08, 0x1d, 0xa7, 0x03, 0xcf, 0xf7, 0x30, 0xf0, 0x47, 0xe8, 0x0f, 0x07, 0x56, 0x60, 0x48, 0x08, 0x61, 0x7c, 0x26, 0x68, 0x7a, 0xeb, 0xb6, 0x92, 0x5b, 0x5d, 0x72, 0xec, 0xd3, 0x36, 0x89, 0x97, 0x65, 0x03, 0x08, 0x05, 0xc7, 0x01, 0xce, 0x9d, 0xbb, 0x01, 0xb3, 0xd9, 0x8c, 0x8c, 0xa0, 0x0c, 0x6d, 0xb9, 0xaa, 0x6a, 0x44, 0x51, 0x89, 0xc1, 0xa0, 0x87, 0xd9, 0xac, 0xb6, 0xcd, 0xd8, 0x49, 0x01, 0x26, 0xea, 0x7e, 0x43, 0x3b, 0x86, 0x77, 0xa4, 0x0b, 0x3f, 0x70, 0x5b, 0x8c, 0x9b, 0xa5, 0x65, 0x29, 0xe7, 0x8c, 0x2b, 0x57, 0x8a, 0xfa, 0xaa, 0x3e, 0xe7, 0x7c, 0x4e, 0xfb, 0x9d, 0xee, 0x0a, 0x5d, 0x95, 0x0b, 0x13, 0x5e, 0xaf, 0xb1, 0x4c, 0x2b, 0x33, 0xbf, 0x2c, 0x18, 0x9a, 0x71, 0x49, 0x4a, 0xa1, 0xc8, 0x73, 0x68, 0xdf, 0x07, 0xb4, 0x86, 0x67, 0x44, 0xa5, 0x48, 0x80, 0x4d, 0x20, 0x0a, 0x43, 0xa8, 0xa6, 0xb1, 0xab, 0x0f, 0xaf, 0xdb, 0x85, 0x00, 0x50, 0x95, 0x25, 0x16, 0x49, 0x02, 0xc7, 0x0b, 0xd1, 0x68, 0xc0, 0x75, 0x25, 0xb4, 0x22, 0xaf, 0x76, 0x68, 0x9a, 0x8c, 0x93, 0x07, 0x80, 0xa2, 0x9f, 0x43, 0x40, 0x6b, 0x2a, 0x40, 0x1b, 0x55, 0xa3, 0x6c, 0x6a, 0x2b, 0xf7, 0xbb, 0xb5, 0xb5, 0x85, 0xa3, 0xa3, 0x23, 0xf4, 0x7a, 0x3d, 0xec, 0xed, 0xed, 0xc1, 0xcd, 0xab, 0xf2, 0x8a, 0x91, 0xed, 0xc9, 0x31, 0x77, 0x1b, 0xd0, 0x04, 0x1e, 0x1b, 0x03, 0xa8, 0x12, 0x4a, 0xd8, 0x56, 0x45, 0xce, 0x69, 0xef, 0x98, 0x85, 0x55, 0xd8, 0xba, 0xda, 0xb8, 0x98, 0x76, 0xb2, 0x9d, 0x2b, 0x76, 0x35, 0xcc, 0x89, 0xd4, 0x5a, 0xc3, 0xd7, 0xde, 0xca, 0x45, 0x39, 0xf9, 0x77, 0xa5, 0x27, 0x9f, 0x36, 0x19, 0xf2, 0x85, 0x6f, 0xef, 0xd8, 0xdb, 0x4e, 0x64, 0x4c, 0xcd, 0xfa, 0x46, 0xc9, 0xb0, 0xbd, 0x33, 0x3f, 0x59, 0xf0, 0x34, 0x4d, 0x03, 0x08, 0xd7, 0x82, 0x8b, 0xcc, 0x9f, 0xc0, 0x31, 0x63, 0x4d, 0x42, 0xca, 0x7a, 0x57, 0xbd, 0xc9, 0x96, 0xbf, 0x68, 0xae, 0x48, 0xd8, 0xed, 0xf3, 0x2e, 0x05, 0xae, 0xba, 0x43, 0xe7, 0xff, 0x67, 0x69, 0xf1, 0xb4, 0x05, 0x01, 0x7f, 0xd7, 0x76, 0x00, 0x53, 0x4a, 0x41, 0xa2, 0xff, 0xb7, 0x9a, 0xcc, 0xdb, 0xbb, 0xc2, 0x17, 0xbe, 0xe0, 0x75, 0xf8, 0xd2, 0x57, 0x3e, 0x6a, 0xef, 0x13, 0x47, 0xe0, 0x2a, 0xe0, 0xcb, 0x6b, 0xdf, 0x87, 0x9f, 0x3a, 0xf5, 0xf4, 0x23, 0xd2, 0x7f, 0xfb, 0x1b, 0xbf, 0xfb, 0xac, 0x81, 0x72, 0x7f, 0xf4, 0x27, 0xef, 0x5d, 0xb9, 0x3e, 0x2c, 0xe4, 0xd1, 0x89, 0x43, 0xa4, 0xe9, 0x33, 0x9b, 0x28, 0x24, 0x49, 0xf2, 0x6d, 0x3b, 0xaf, 0x0c, 0x4c, 0xfb, 0xa9, 0x7b, 0x3e, 0x82, 0xee, 0xc0, 0x59, 0xf1, 0x55, 0xbe, 0xda, 0xb3, 0x4c, 0x49, 0x52, 0x5d, 0x5b, 0x01, 0x62, 0x98, 0x25, 0xc4, 0x5e, 0xa9, 0x57, 0x30, 0x18, 0xed, 0x2e, 0xfd, 0x5a, 0x8e, 0xbb, 0x3b, 0x78, 0x11, 0x74, 0xfd, 0xb0, 0x75, 0x10, 0x64, 0x05, 0x3f, 0x21, 0x04, 0x3c, 0x97, 0xa4, 0x6e, 0x9b, 0x5a, 0x19, 0x75, 0xc2, 0x12, 0xf3, 0x24, 0x47, 0xd4, 0x1b, 0x5d, 0xd3, 0x71, 0xbf, 0xf2, 0x3f, 0x7b, 0x0d, 0x1e, 0x7a, 0xf4, 0x13, 0x36, 0x16, 0x30, 0xcd, 0xa9, 0x2c, 0x4b, 0x08, 0x78, 0xc8, 0xb2, 0x02, 0x42, 0x48, 0xfc, 0xe8, 0x8f, 0xdd, 0x83, 0xbf, 0xeb, 0xd7, 0xdb, 0xfe, 0xf1, 0x0f, 0xe3, 0xbd, 0xef, 0xfd, 0x19, 0xa8, 0x86, 0x8a, 0xad, 0xc8, 0x0f, 0x2d, 0xc6, 0x80, 0x80, 0xc5, 0x4c, 0xaf, 0x72, 0x8c, 0xaa, 0xa6, 0xb2, 0xe3, 0x5b, 0xdf, 0x5f, 0xd2, 0xac, 0x8a, 0x82, 0x10, 0xed, 0x83, 0xc1, 0xc0, 0x74, 0xe0, 0xbe, 0x15, 0x8f, 0x12, 0xc2, 0xb1, 0x14, 0x2d, 0x01, 0x6f, 0xc5, 0x7f, 0x9c, 0xc0, 0x66, 0x85, 0xbd, 0x5f, 0x3a, 0x66, 0xa5, 0x4a, 0xf1, 0xb7, 0x5e, 0xc9, 0x03, 0x52, 0x4a, 0xcc, 0xd2, 0x04, 0x4a, 0x91, 0x40, 0x13, 0x25, 0x74, 0x02, 0x1b, 0x03, 0x2c, 0x9b, 0x5a, 0x93, 0x4e, 0x3e, 0xcb, 0x18, 0x57, 0xca, 0x00, 0xbf, 0x0c, 0x98, 0x0f, 0x81, 0xfd, 0x7e, 0x27, 0x25, 0x91, 0xa5, 0xa4, 0x0e, 0x97, 0x31, 0x53, 0xdc, 0x29, 0xb3, 0x62, 0xa8, 0xa5, 0x31, 0x1b, 0x61, 0x2a, 0xbe, 0x6f, 0x98, 0x71, 0xe5, 0x38, 0x20, 0x1b, 0x5f, 0x93, 0x80, 0x57, 0xa7, 0x9f, 0x06, 0xd1, 0x2f, 0x48, 0xaf, 0xa4, 0x51, 0x15, 0x81, 0x3e, 0x59, 0x32, 0xda, 0x71, 0x20, 0xb4, 0x26, 0x83, 0x27, 0x53, 0xb0, 0x54, 0xc6, 0x5b, 0xa4, 0x0d, 0xea, 0x76, 0x1d, 0x12, 0xb1, 0xd2, 0x96, 0x06, 0xac, 0xa1, 0xb5, 0xb2, 0x53, 0x0d, 0xa2, 0xcf, 0xd6, 0x24, 0xf8, 0xe2, 0x06, 0xc6, 0x89, 0x50, 0x18, 0x25, 0xc7, 0x29, 0x6a, 0x91, 0x42, 0x3a, 0xcb, 0xd5, 0x40, 0x5e, 0x95, 0x10, 0x65, 0x03, 0xc1, 0xb4, 0xe4, 0xee, 0xc0, 0xda, 0x1a, 0x6b, 0x47, 0xc0, 0x81, 0x04, 0x5c, 0x07, 0xb1, 0xf0, 0xa1, 0x01, 0x9c, 0x3e, 0x75, 0x06, 0x4d, 0xd3, 0xe0, 0xb6, 0xdb, 0x6e, 0xc3, 0x9f, 0xff, 0xf9, 0x9f, 0xe3, 0x75, 0xaf, 0x7b, 0x1d, 0x5c, 0x96, 0xaa, 0xbc, 0xda, 0x8f, 0x36, 0xd1, 0xfe, 0x64, 0x07, 0x0b, 0x00, 0xb1, 0x51, 0x22, 0x22, 0xd9, 0x56, 0xc7, 0x56, 0x82, 0xdc, 0xd1, 0xae, 0x2e, 0xf5, 0x9b, 0x2b, 0xb8, 0xcc, 0x7e, 0xc7, 0x5f, 0x29, 0x20, 0xb8, 0x1a, 0xe3, 0x8a, 0x4d, 0x6b, 0x75, 0x85, 0xfd, 0x23, 0x8f, 0x95, 0xb4, 0xd6, 0x90, 0x9e, 0xbc, 0xa2, 0xfb, 0x3f, 0xb9, 0x93, 0x39, 0x39, 0xc6, 0x6e, 0x27, 0xf8, 0xc0, 0xf3, 0xaf, 0x48, 0xb6, 0x57, 0xeb, 0x88, 0xdb, 0xa8, 0xf1, 0xf6, 0x77, 0x71, 0xe4, 0xd5, 0x8b, 0x09, 0x4e, 0xa6, 0x2c, 0xaa, 0x73, 0xb5, 0x73, 0x47, 0x88, 0x63, 0xf7, 0xaa, 0xc9, 0xde, 0xae, 0x24, 0x54, 0xb3, 0xf2, 0x9e, 0x27, 0x13, 0xfa, 0x49, 0xea, 0xd1, 0xd5, 0x12, 0x3a, 0x9f, 0x37, 0x1e, 0x95, 0xfe, 0xf7, 0x6f, 0xff, 0xc5, 0xbf, 0xb3, 0x80, 0xf5, 0xfa, 0x37, 0xbc, 0x01, 0xf7, 0x7d, 0xe6, 0x0f, 0x2c, 0xe6, 0xc2, 0x73, 0x9b, 0x95, 0xe3, 0x26, 0x05, 0xc2, 0x67, 0x37, 0x72, 0x4f, 0xe6, 0x73, 0xdb, 0x21, 0xee, 0xed, 0xed, 0xe3, 0xcf, 0xfe, 0xfc, 0xc3, 0xf6, 0xb3, 0x9f, 0xe9, 0xeb, 0x39, 0xe7, 0xff, 0x01, 0x1e, 0x7c, 0xe8, 0x23, 0x76, 0x97, 0xc6, 0xaa, 0x5c, 0x4d, 0x53, 0xc1, 0x91, 0xcf, 0xec, 0x3d, 0xa3, 0x38, 0xfe, 0xb6, 0x9f, 0xdf, 0x9f, 0x78, 0xfb, 0x3b, 0xf1, 0x7f, 0xdf, 0xfb, 0xaf, 0xe0, 0x9a, 0xf3, 0xc9, 0xf7, 0xdf, 0xca, 0x33, 0x20, 0x00, 0x38, 0x84, 0x3d, 0xb9, 0x96, 0x97, 0x52, 0x4b, 0xea, 0x23, 0x8f, 0x46, 0x8b, 0xfc, 0xd9, 0xad, 0x0d, 0xde, 0xf4, 0xa6, 0xef, 0xc1, 0x1f, 0xfc, 0x87, 0xc7, 0x56, 0x9f, 0x29, 0x23, 0x72, 0xc4, 0xa6, 0x36, 0x3c, 0x0d, 0x08, 0x82, 0x08, 0x10, 0x3e, 0xaa, 0x6b, 0x04, 0x2d, 0xbc, 0xfc, 0x15, 0xaf, 0xc0, 0xe3, 0x4f, 0x7d, 0xda, 0xc6, 0x32, 0xee, 0x04, 0xa5, 0x94, 0x80, 0x26, 0xd1, 0x91, 0xad, 0xb5, 0xdb, 0x9e, 0xd5, 0xea, 0x29, 0x4d, 0x12, 0xec, 0x5d, 0x7a, 0x72, 0xe5, 0xde, 0x7b, 0xa6, 0xc5, 0xd9, 0xb0, 0x7f, 0x1b, 0xc6, 0x47, 0x9f, 0xa7, 0xf3, 0x9c, 0x57, 0x76, 0x24, 0xcd, 0xcf, 0x3b, 0xf9, 0x31, 0x18, 0x3a, 0xaf, 0xb3, 0xf4, 0x39, 0x5f, 0x2c, 0x12, 0xfb, 0xbc, 0x0f, 0x06, 0x03, 0xac, 0xad, 0xad, 0x61, 0x32, 0x99, 0x98, 0x0e, 0xb4, 0xb1, 0x54, 0x30, 0x06, 0x9d, 0x2e, 0xa5, 0x4b, 0xf5, 0x0a, 0x8f, 0xda, 0x0f, 0x5c, 0x1b, 0x23, 0x8b, 0x22, 0x5f, 0x69, 0x82, 0xea, 0xba, 0x06, 0xb4, 0xb2, 0xf1, 0x87, 0x75, 0xf5, 0x49, 0x95, 0x51, 0xc3, 0x71, 0x7c, 0x28, 0x4d, 0x7e, 0xed, 0x2c, 0xad, 0x4c, 0xef, 0xe5, 0x1a, 0xc1, 0x27, 0x81, 0x0e, 0x3a, 0x36, 0xe1, 0x2d, 0xe3, 0xfc, 0x89, 0x49, 0x6c, 0x6b, 0xd2, 0x49, 0xaa, 0x73, 0x72, 0x45, 0xb1, 0x93, 0xff, 0x3c, 0x49, 0x8b, 0x65, 0xac, 0x6c, 0x9a, 0x95, 0x38, 0xcf, 0xbb, 0xee, 0xb6, 0x7e, 0xca, 0xc9, 0xb1, 0xbb, 0x38, 0xb1, 0x42, 0x6d, 0x37, 0x6b, 0x6d, 0x4b, 0xd5, 0x93, 0xd8, 0x14, 0xfb, 0x3c, 0x29, 0x8d, 0xa6, 0xac, 0xa0, 0x0d, 0x03, 0xe9, 0x24, 0x16, 0xac, 0x21, 0x2f, 0x48, 0x8b, 0xd1, 0x28, 0xb3, 0xdc, 0x5e, 0x47, 0x0d, 0x20, 0xad, 0x48, 0xa0, 0x2c, 0x0a, 0x7d, 0x78, 0x8e, 0x44, 0x59, 0x14, 0x70, 0xa0, 0xe0, 0x9f, 0x68, 0x24, 0xa5, 0xe3, 0xc0, 0xe7, 0x69, 0x9b, 0x23, 0xa1, 0xcc, 0x77, 0x26, 0xe0, 0x60, 0x07, 0x1f, 0xfa, 0xd0, 0x87, 0x30, 0x1c, 0x0e, 0xf1, 0x91, 0x8f, 0x7c, 0x04, 0x6e, 0x3b, 0x49, 0x9c, 0x4c, 0x8e, 0x6d, 0xe5, 0xac, 0xb6, 0xe0, 0x86, 0xdd, 0xb1, 0xdb, 0x79, 0xa3, 0x63, 0xc1, 0x71, 0xf6, 0xfd, 0xe0, 0x5c, 0x15, 0xa0, 0xd5, 0x1e, 0xa9, 0xa7, 0x69, 0xba, 0xf2, 0x6b, 0x06, 0x2d, 0x58, 0x7d, 0xf1, 0x4a, 0xae, 0x24, 0xab, 0x36, 0x71, 0x9f, 0x00, 0x7c, 0x6a, 0x85, 0xc6, 0xa5, 0xd4, 0xc9, 0x13, 0xcf, 0x27, 0x59, 0x5d, 0x25, 0xe1, 0x39, 0x96, 0xb6, 0xf5, 0x74, 0x45, 0x4b, 0x5b, 0xa0, 0xa0, 0x8d, 0x86, 0xe4, 0x73, 0x51, 0x56, 0xfa, 0x8a, 0xbd, 0xff, 0xca, 0x8e, 0x5c, 0xae, 0xaa, 0x0d, 0x9d, 0xc4, 0x21, 0x54, 0x55, 0x7e, 0xd5, 0x55, 0xc6, 0x12, 0x74, 0xe7, 0x5c, 0xd1, 0x99, 0xb7, 0x3f, 0x83, 0x45, 0x17, 0xae, 0xb6, 0x32, 0xe0, 0x1d, 0x7e, 0x7b, 0x24, 0xf5, 0xe2, 0x17, 0x7d, 0xdf, 0xdf, 0x3a, 0xe0, 0xe7, 0xe4, 0x08, 0xfb, 0x8e, 0xef, 0xf8, 0x3e, 0x7c, 0xe1, 0x81, 0x3f, 0x23, 0xa1, 0x1b, 0xbd, 0xb8, 0xa2, 0xe0, 0x92, 0x8e, 0xba, 0xe6, 0xf7, 0x65, 0x59, 0xd1, 0xf7, 0xdf, 0x7b, 0x2f, 0x7e, 0xed, 0xbd, 0xef, 0xc5, 0x3f, 0x7a, 0xd3, 0x3f, 0xc2, 0x8f, 0xfe, 0xd8, 0x5b, 0xf1, 0xf0, 0x43, 0x5f, 0x25, 0x33, 0x10, 0xe9, 0x3c, 0xab, 0x40, 0xfb, 0xf2, 0x57, 0xbc, 0x02, 0x5f, 0x7a, 0xe4, 0xa3, 0xb4, 0x4b, 0x54, 0x1a, 0xa8, 0x6a, 0x28, 0x08, 0x78, 0xf2, 0x99, 0x9f, 0x8b, 0xc5, 0x62, 0x81, 0xbd, 0xbd, 0xfd, 0x67, 0x74, 0x3d, 0xf6, 0xf6, 0xf6, 0x71, 0xb0, 0xbf, 0x67, 0x75, 0xcb, 0xdb, 0x1d, 0xf2, 0x2d, 0x37, 0xfe, 0x03, 0x7c, 0xee, 0x0b, 0x7f, 0x60, 0x81, 0x6c, 0xed, 0x60, 0xd4, 0x0e, 0x58, 0xf9, 0x35, 0xee, 0x0a, 0x28, 0x08, 0xbb, 0xb6, 0xa0, 0x16, 0x42, 0xa0, 0xc0, 0xb3, 0x4b, 0xe8, 0x84, 0xd2, 0xef, 0xc3, 0xc3, 0x18, 0x9e, 0x47, 0x1d, 0x0c, 0x1d, 0xf3, 0xd2, 0x43, 0x80, 0x8c, 0x7f, 0x88, 0x1a, 0xb4, 0x48, 0x1b, 0x0c, 0xd6, 0x87, 0xd7, 0x8e, 0x57, 0xd0, 0x35, 0x92, 0x34, 0xb5, 0xe7, 0x80, 0x00, 0x55, 0x21, 0xea, 0x8a, 0x62, 0xce, 0xab, 0xbf, 0xeb, 0x35, 0xcf, 0xea, 0x7b, 0x7c, 0xf9, 0xcb, 0x7f, 0x89, 0x87, 0x1f, 0xbd, 0x84, 0x7f, 0xf1, 0x73, 0x6f, 0x7f, 0xd6, 0x20, 0xd3, 0x1f, 0xfc, 0xa1, 0x37, 0xe3, 0x2f, 0x3e, 0xb6, 0x85, 0xdd, 0xdd, 0x7d, 0xa4, 0xf3, 0x87, 0x6d, 0x21, 0xce, 0x78, 0x1c, 0xd5, 0x00, 0xe9, 0xc2, 0x08, 0xc7, 0xc8, 0x72, 0x99, 0xe8, 0x3c, 0x77, 0xa9, 0xc6, 0x98, 0x67, 0x14, 0xa7, 0xa5, 0x03, 0xad, 0x14, 0x6a, 0xad, 0x96, 0x48, 0x77, 0x4e, 0x6c, 0x52, 0x22, 0xf0, 0xbb, 0x50, 0xa6, 0xf3, 0x6e, 0x20, 0x50, 0x55, 0x65, 0x4b, 0x8b, 0x5c, 0x58, 0xc1, 0x27, 0x00, 0xa8, 0x9b, 0x06, 0x8d, 0xd6, 0x44, 0xeb, 0x75, 0x25, 0x1c, 0xcf, 0x45, 0x93, 0x69, 0xd3, 0x5d, 0xe7, 0x70, 0x3d, 0xc0, 0xf7, 0x25, 0x94, 0xae, 0x51, 0xd7, 0xb9, 0xf5, 0xf6, 0xa0, 0xc4, 0xbd, 0xb0, 0x5a, 0x02, 0x51, 0xd8, 0x41, 0x96, 0x65, 0x38, 0x3a, 0x3a, 0x82, 0xeb, 0x0e, 0x2c, 0x6a, 0x9f, 0x59, 0x41, 0xed, 0xc2, 0xae, 0xad, 0xa3, 0x6e, 0xaf, 0x65, 0x6b, 0x75, 0xc8, 0x48, 0xf6, 0x76, 0xcc, 0x6f, 0x37, 0x54, 0x27, 0x69, 0xc6, 0x6d, 0x11, 0x16, 0xa2, 0x0a, 0x7b, 0xb6, 0x7b, 0x67, 0x63, 0x16, 0x9e, 0x64, 0xf0, 0x67, 0xb5, 0xd9, 0x4d, 0xed, 0x18, 0x2e, 0x84, 0x80, 0x2e, 0xeb, 0xa7, 0x5d, 0xd9, 0xf2, 0xe7, 0xcc, 0xe7, 0x73, 0x2b, 0xa7, 0xcd, 0x54, 0x42, 0x96, 0xf8, 0x0e, 0xa2, 0xce, 0xf2, 0xf8, 0x41, 0x6b, 0x04, 0xcf, 0x23, 0xc7, 0x52, 0xcf, 0x75, 0x50, 0xe4, 0x05, 0x1c, 0x73, 0x7e, 0x7c, 0xdf, 0x87, 0xeb, 0x79, 0x28, 0x1b, 0x85, 0x82, 0x69, 0xa9, 0xe6, 0xb8, 0xe2, 0x38, 0xc6, 0x73, 0x9e, 0xf3, 0x1c, 0x73, 0xac, 0x4e, 0xbb, 0x23, 0x6a, 0x68, 0x9c, 0xae, 0x08, 0x21, 0x10, 0xb8, 0xfe, 0x15, 0x27, 0xb2, 0x9d, 0x50, 0xab, 0x66, 0xf5, 0xcb, 0xb4, 0x93, 0xdf, 0x49, 0x10, 0x4e, 0xbb, 0xc3, 0x5d, 0x4a, 0x6b, 0x02, 0xaa, 0x6a, 0x50, 0xea, 0xfa, 0xaa, 0x1d, 0xb1, 0x70, 0x9d, 0x55, 0x10, 0x4b, 0x53, 0xaf, 0x24, 0x5f, 0xe9, 0x11, 0xd2, 0x98, 0xe3, 0x8a, 0x1d, 0xab, 0x9b, 0x3d, 0xa2, 0xae, 0x9b, 0x15, 0xb0, 0xd9, 0x49, 0xf1, 0x1c, 0x16, 0xc2, 0x59, 0x72, 0xe4, 0x57, 0xc1, 0x81, 0x42, 0x34, 0xad, 0x71, 0x3a, 0x20, 0x4c, 0xc1, 0x00, 0x03, 0x80, 0x73, 0x02, 0x79, 0xd5, 0x51, 0xfa, 0xc9, 0x8b, 0xba, 0xfc, 0xfc, 0xe5, 0x39, 0x11, 0x42, 0x40, 0x1b, 0x50, 0xdb, 0xd3, 0x8d, 0xcc, 0xed, 0xf9, 0x62, 0x40, 0x4a, 0x45, 0xe2, 0x1e, 0x62, 0x39, 0x07, 0x85, 0xf3, 0x34, 0x2b, 0x01, 0xad, 0x35, 0x3c, 0x73, 0x03, 0xf3, 0xef, 0xbf, 0xfa, 0x35, 0xdf, 0xf5, 0x77, 0x3e, 0x56, 0x7c, 0xf5, 0x6b, 0xbe, 0x0b, 0x0f, 0x3c, 0xf4, 0x27, 0x00, 0x1a, 0xa0, 0x3e, 0x8b, 0xbd, 0x4b, 0x4f, 0x62, 0xb0, 0x59, 0xd9, 0x73, 0x96, 0x55, 0xd7, 0x9e, 0x24, 0x3e, 0xf8, 0xc1, 0x3f, 0xc1, 0xbd, 0xef, 0xff, 0xbf, 0xf0, 0x89, 0xff, 0xf4, 0x49, 0x00, 0xc0, 0x07, 0x3e, 0xf8, 0x01, 0x3c, 0xf0, 0xc0, 0x27, 0xb1, 0x7d, 0xe6, 0x1c, 0x82, 0xc0, 0xc5, 0x68, 0x3d, 0x7c, 0xd6, 0x89, 0x27, 0x30, 0xaa, 0x7d, 0x7c, 0x4d, 0xca, 0xaa, 0x40, 0x99, 0x79, 0x48, 0xd3, 0x67, 0x96, 0xd4, 0x9a, 0xda, 0xc5, 0x5b, 0xde, 0xf2, 0x43, 0xf8, 0x9e, 0xd7, 0xde, 0x85, 0x97, 0xbd, 0xec, 0x25, 0xd7, 0x04, 0xda, 0x4b, 0x17, 0x73, 0x4c, 0x8e, 0x8f, 0x9f, 0x76, 0x0a, 0xf2, 0x99, 0xcf, 0xff, 0x09, 0xdd, 0x5f, 0x08, 0x00, 0x41, 0xda, 0xd4, 0xf6, 0xfe, 0xd4, 0x1a, 0x8e, 0x71, 0x48, 0xbb, 0x36, 0x70, 0x59, 0x83, 0x52, 0x15, 0xab, 0x81, 0x4b, 0x15, 0xcf, 0xfa, 0x7e, 0x78, 0xf3, 0x0f, 0xfc, 0xb7, 0xf8, 0x7f, 0xdf, 0xff, 0x6e, 0xea, 0xe6, 0xd0, 0x01, 0xb4, 0x46, 0x5d, 0x6b, 0x78, 0x5e, 0x07, 0x8e, 0xe3, 0xa2, 0x2c, 0x73, 0xc4, 0x91, 0x07, 0xdf, 0xcf, 0x31, 0x1c, 0x7a, 0x48, 0x9e, 0xc1, 0x47, 0x56, 0x79, 0x03, 0xcf, 0x91, 0x90, 0x30, 0x2b, 0x3a, 0x25, 0xd0, 0x94, 0x0d, 0x9a, 0x26, 0xc3, 0xbc, 0x98, 0x3d, 0xab, 0x04, 0xfc, 0xfe, 0x7b, 0xef, 0xc5, 0x7d, 0x9f, 0xbb, 0x00, 0x00, 0xb8, 0xef, 0x73, 0x17, 0x70, 0xfc, 0xae, 0x9f, 0xc5, 0xbb, 0xdf, 0xf3, 0x1b, 0xcf, 0xb8, 0x80, 0xdc, 0xde, 0xde, 0xc2, 0xc3, 0x8f, 0x5c, 0x44, 0xa5, 0x1f, 0x81, 0xd6, 0x1a, 0x69, 0x51, 0xac, 0x4c, 0x35, 0x9d, 0xc6, 0x34, 0x0f, 0x8e, 0x40, 0x53, 0xc3, 0x8c, 0xac, 0xd5, 0x89, 0xc6, 0x22, 0x84, 0x34, 0x0c, 0x21, 0x9e, 0x20, 0x91, 0x10, 0x8d, 0x86, 0x76, 0x38, 0x7e, 0x02, 0x65, 0x3d, 0xb7, 0xf1, 0x87, 0x19, 0xb8, 0x64, 0x7f, 0x2b, 0xcc, 0x74, 0xc4, 0xb7, 0xf1, 0x90, 0x14, 0xde, 0x22, 0x33, 0xf9, 0xcc, 0x30, 0x37, 0x1a, 0x22, 0x5a, 0x68, 0xc0, 0xd7, 0xa8, 0xb4, 0x46, 0x55, 0xb2, 0x37, 0x41, 0x00, 0x21, 0x05, 0x4a, 0x33, 0xe2, 0x77, 0x8c, 0x35, 0xb2, 0x72, 0x24, 0xb2, 0xba, 0x84, 0x0c, 0x7d, 0x6c, 0xed, 0x9c, 0x46, 0x60, 0x84, 0x65, 0x68, 0xfd, 0x99, 0x63, 0x32, 0x99, 0x20, 0x49, 0x52, 0x1a, 0x63, 0xd7, 0x35, 0xea, 0xda, 0xb5, 0x34, 0x57, 0x2e, 0x66, 0x98, 0x29, 0x63, 0xbd, 0x43, 0xdc, 0x65, 0x17, 0xae, 0x2a, 0x65, 0x3b, 0x7b, 0xad, 0x1b, 0xf8, 0x81, 0x80, 0x27, 0x25, 0x9c, 0x13, 0xc0, 0x6f, 0xa1, 0x35, 0x5c, 0x29, 0x51, 0xa9, 0x8a, 0x9e, 0x0f, 0xcf, 0x81, 0xe3, 0x19, 0x70, 0x1e, 0x1a, 0x68, 0x47, 0xc3, 0x0b, 0x3d, 0xd4, 0x15, 0xa5, 0xc2, 0xb2, 0x56, 0x57, 0xe4, 0x26, 0x68, 0x40, 0x38, 0x9e, 0x51, 0x43, 0x05, 0x1a, 0x03, 0xf8, 0x53, 0x7a, 0x89, 0x5b, 0xaa, 0x74, 0x05, 0xe1, 0x85, 0xa8, 0x35, 0xe9, 0x43, 0x68, 0x2d, 0x90, 0xa7, 0x05, 0x26, 0x09, 0x69, 0x50, 0x44, 0x29, 0x35, 0x5c, 0x70, 0x5d, 0xc0, 0xf3, 0x10, 0xf8, 0x5d, 0x04, 0x5e, 0x00, 0xa1, 0x7d, 0x68, 0x25, 0xe1, 0x79, 0xc4, 0x2a, 0x28, 0x72, 0x8d, 0xaa, 0xcc, 0xe1, 0xba, 0x86, 0x72, 0xa8, 0x7d, 0xb8, 0xda, 0x83, 0x23, 0x6a, 0xa0, 0xa8, 0xf0, 0xf2, 0x17, 0xbe, 0x98, 0x28, 0x7d, 0x79, 0x09, 0xf7, 0x6a, 0xa3, 0x60, 0x9b, 0x04, 0xc4, 0x95, 0xa0, 0xb3, 0xd5, 0xa4, 0x71, 0x65, 0xe7, 0xd8, 0xae, 0x88, 0x56, 0x75, 0xda, 0x57, 0x91, 0xdc, 0x74, 0xf3, 0xac, 0xfa, 0xd0, 0x9e, 0x7c, 0x2f, 0x47, 0xb8, 0x57, 0xec, 0xf5, 0xdb, 0xc7, 0xcb, 0xa3, 0x9b, 0x95, 0x1d, 0x7f, 0xab, 0x8b, 0x0e, 0xa4, 0xbb, 0x02, 0x0e, 0x6b, 0x8f, 0x65, 0xac, 0x1c, 0xea, 0x89, 0xee, 0xb9, 0x8d, 0x0c, 0x67, 0x95, 0x25, 0xeb, 0x7b, 0xab, 0x79, 0x1e, 0x41, 0x9f, 0x93, 0x37, 0xc5, 0x15, 0xe8, 0xf4, 0xf6, 0xfb, 0xb7, 0xbd, 0xd2, 0x4f, 0x6a, 0x84, 0x93, 0x3c, 0xed, 0xd5, 0xf9, 0xe1, 0xfc, 0x62, 0x7a, 0x82, 0xd0, 0xab, 0x74, 0x0c, 0x87, 0x77, 0xe8, 0x65, 0x75, 0xd5, 0xce, 0xde, 0x3e, 0xc0, 0x56, 0x1f, 0x5f, 0xa3, 0x58, 0xe0, 0x59, 0x77, 0xe7, 0xbf, 0xf6, 0xde, 0xf7, 0xe2, 0x05, 0xb7, 0xdd, 0x76, 0x45, 0x67, 0x78, 0xad, 0x01, 0x2b, 0x94, 0xb7, 0x61, 0x32, 0xbb, 0x0f, 0x6f, 0xba, 0xeb, 0xf5, 0xf8, 0xec, 0x67, 0xef, 0xc7, 0xd1, 0xf4, 0xfe, 0x65, 0x27, 0x59, 0x5e, 0xfb, 0x0e, 0x9d, 0xc7, 0xea, 0xed, 0xd7, 0xc3, 0x8f, 0x5e, 0xc2, 0x63, 0x8f, 0x5f, 0xc6, 0x70, 0x14, 0xa2, 0xd7, 0x09, 0xf0, 0x89, 0x8f, 0x7f, 0xfc, 0x59, 0x81, 0x9e, 0xca, 0x99, 0x83, 0xc1, 0x86, 0xb7, 0x32, 0xad, 0xaa, 0x04, 0xe0, 0xba, 0xcf, 0x2c, 0xa1, 0xbb, 0x2e, 0x25, 0x97, 0x0f, 0x7c, 0xf0, 0x03, 0xf8, 0xc0, 0x07, 0x3f, 0x00, 0x00, 0xb8, 0xe3, 0xa5, 0xe7, 0xf1, 0xc6, 0xef, 0x7f, 0xeb, 0x37, 0x3d, 0xce, 0x93, 0x9c, 0xf7, 0x93, 0x53, 0x90, 0xeb, 0x4e, 0xbd, 0x14, 0x07, 0x87, 0x5f, 0x40, 0x9e, 0x26, 0x57, 0x16, 0xc9, 0x4c, 0xcd, 0xa9, 0xaf, 0x8d, 0x1e, 0x18, 0xfa, 0x21, 0xba, 0xd1, 0xff, 0x4f, 0xdc, 0x9b, 0x87, 0x5b, 0x52, 0x95, 0xe7, 0xe2, 0xef, 0x1a, 0x6a, 0xd8, 0xd3, 0x19, 0x7a, 0x38, 0x0d, 0xdd, 0x0d, 0x74, 0x33, 0x88, 0x0a, 0x6d, 0x34, 0x5e, 0x15, 0xaf, 0x04, 0x0d, 0x4a, 0x6e, 0xf2, 0x88, 0x57, 0x63, 0x06, 0xc3, 0x8d, 0xbf, 0x9f, 0x88, 0x62, 0x62, 0xa2, 0xd7, 0x18, 0x63, 0xfc, 0xdd, 0x00, 0x1a, 0x23, 0x26, 0x37, 0x0f, 0x31, 0x92, 0x49, 0x89, 0x28, 0xb6, 0x09, 0xda, 0xa0, 0xc6, 0x01, 0x21, 0x0e, 0x28, 0xe1, 0xb6, 0x4d, 0x68, 0x40, 0x86, 0xd8, 0x8d, 0x43, 0xa0, 0x07, 0x10, 0x90, 0x9e, 0xcf, 0x39, 0x7b, 0xaa, 0x69, 0xad, 0xf5, 0xfb, 0x63, 0xd5, 0x5a, 0xb5, 0xaa, 0x76, 0xed, 0x43, 0xef, 0x0d, 0x3e, 0xb7, 0x78, 0xce, 0x43, 0x9f, 0xee, 0x73, 0xaa, 0x6a, 0xd7, 0xb0, 0xbe, 0xef, 0x7b, 0xbf, 0xf7, 0x7b, 0x5f, 0xbf, 0x94, 0x9c, 0x2f, 0xf6, 0xe5, 0xd3, 0x0e, 0xe8, 0xba, 0x4a, 0x5f, 0x83, 0x56, 0xa7, 0x8f, 0xc0, 0x0f, 0x21, 0x25, 0x10, 0x25, 0x43, 0xf4, 0x97, 0x07, 0xe8, 0xb4, 0xe7, 0x40, 0x58, 0x80, 0x54, 0x48, 0x0c, 0x86, 0x29, 0x06, 0x83, 0x65, 0xb4, 0x67, 0x5b, 0x53, 0xa0, 0x21, 0x43, 0x30, 0xa6, 0x46, 0x90, 0xb4, 0x46, 0xa3, 0x81, 0x6e, 0xaf, 0x35, 0xf5, 0xb9, 0xef, 0xd8, 0xbe, 0x1d, 0x1f, 0xbb, 0xe6, 0x9a, 0x91, 0xe7, 0xee, 0x83, 0xef, 0x7f, 0xe7, 0x71, 0xb3, 0xfd, 0xc7, 0xb5, 0x22, 0xfe, 0xe9, 0xb3, 0x1f, 0xc9, 0x39, 0x10, 0x80, 0x4b, 0x77, 0x50, 0x52, 0x07, 0x65, 0x42, 0x80, 0x46, 0x8e, 0xc0, 0xd8, 0x6a, 0x34, 0xcd, 0x20, 0x1c, 0x14, 0xd5, 0x5d, 0x93, 0x28, 0xa5, 0xe0, 0x4e, 0xb1, 0xa5, 0x13, 0xbe, 0x74, 0xa4, 0x92, 0x95, 0x4e, 0x9f, 0x58, 0x12, 0x96, 0x77, 0x68, 0x28, 0x3c, 0xca, 0xe1, 0xe5, 0xc1, 0xd5, 0x67, 0x1e, 0x9a, 0x41, 0x03, 0x83, 0x41, 0x1f, 0xca, 0xfd, 0xcf, 0xf0, 0xab, 0xa4, 0x3e, 0xbf, 0x80, 0x7b, 0x4e, 0x22, 0x09, 0xa8, 0x4c, 0x40, 0x40, 0x40, 0x92, 0x2c, 0x1f, 0x1b, 0x4b, 0x6d, 0x91, 0x65, 0xaa, 0xe1, 0xa2, 0x4f, 0xae, 0x34, 0x09, 0x52, 0xaf, 0xc4, 0xf9, 0x9a, 0xe6, 0x32, 0xfa, 0xb5, 0x07, 0x47, 0xb1, 0x6e, 0x6a, 0xf4, 0xc0, 0xf8, 0x89, 0xe8, 0xcf, 0x2f, 0x2b, 0x44, 0xe8, 0x8a, 0x68, 0x1a, 0xc3, 0x8a, 0x2d, 0x65, 0xc6, 0xbc, 0x91, 0xf8, 0xe2, 0xae, 0xf1, 0x59, 0x9c, 0x8d, 0x8c, 0x54, 0xbb, 0xd7, 0xd7, 0xb4, 0x44, 0xc7, 0x4d, 0xc2, 0xa4, 0x83, 0xd8, 0x22, 0x5e, 0xa6, 0xb5, 0xe4, 0xb2, 0xfe, 0x75, 0xc5, 0xcd, 0x1c, 0xc3, 0x25, 0x2f, 0x7f, 0x77, 0x0d, 0x87, 0x4b, 0x5a, 0x95, 0x3c, 0x63, 0xcd, 0xca, 0x25, 0x19, 0x15, 0x53, 0x34, 0x41, 0x40, 0x48, 0x51, 0x43, 0xe4, 0x72, 0xc7, 0xb7, 0x68, 0x6d, 0x20, 0xad, 0xc2, 0xcb, 0x6e, 0x60, 0x73, 0x7f, 0xde, 0xb8, 0x61, 0xb9, 0x7f, 0xef, 0x06, 0xc4, 0xea, 0xf1, 0xab, 0x81, 0x9b, 0x51, 0x36, 0x32, 0x52, 0x56, 0x85, 0xb5, 0x47, 0x49, 0x57, 0xce, 0xbe, 0x14, 0x4a, 0x09, 0x85, 0x0b, 0xe9, 0x57, 0x6f, 0x82, 0x71, 0x83, 0xa3, 0x94, 0x82, 0xe5, 0xfc, 0x00, 0x16, 0xf2, 0xda, 0xf3, 0x33, 0x7f, 0xae, 0x93, 0xd7, 0x2c, 0x8d, 0x97, 0x41, 0x8d, 0xbc, 0x50, 0xee, 0x67, 0x5c, 0x5e, 0x5e, 0x2e, 0x1d, 0xcf, 0xa3, 0xc6, 0xa0, 0x86, 0x8e, 0x28, 0xc4, 0xd5, 0x25, 0x64, 0xee, 0xdf, 0xfb, 0xad, 0xe9, 0xa4, 0x46, 0x7b, 0xdd, 0x2e, 0xfe, 0xe2, 0x2f, 0xaf, 0xb4, 0xd5, 0xef, 0xb6, 0x1b, 0xaf, 0xc7, 0xf3, 0x76, 0x3f, 0x1f, 0x2f, 0x7e, 0xc9, 0x8b, 0xa7, 0xae, 0x6c, 0x7e, 0xee, 0x79, 0xcf, 0xc6, 0x3d, 0xf7, 0xed, 0xb6, 0x64, 0xb3, 0xf2, 0xf3, 0x33, 0x79, 0x80, 0xbc, 0xe0, 0x55, 0x17, 0xe2, 0xd6, 0x6f, 0xdf, 0x0c, 0x4a, 0x09, 0x3c, 0x8f, 0x22, 0x4d, 0x65, 0x4e, 0xbc, 0x61, 0x58, 0xbb, 0x56, 0xc3, 0x57, 0xf7, 0xde, 0x7b, 0xff, 0xd3, 0x0a, 0xe8, 0x7e, 0x6b, 0x1d, 0x16, 0x17, 0xf7, 0x96, 0xae, 0x29, 0xa7, 0x1c, 0x3e, 0x9d, 0xae, 0xfa, 0x6f, 0x84, 0x1e, 0x58, 0x05, 0xc1, 0xba, 0xfb, 0xbe, 0x7d, 0xb8, 0xfb, 0xbe, 0x2b, 0x70, 0xc6, 0x69, 0xeb, 0x71, 0xf1, 0xc5, 0x6f, 0x9f, 0xfa, 0x7c, 0x5f, 0xf8, 0xc2, 0x17, 0xe0, 0x5f, 0xbf, 0x79, 0x0f, 0x82, 0x90, 0x8d, 0xbc, 0x5b, 0x45, 0x2f, 0x7d, 0xb2, 0x1e, 0x7a, 0x34, 0x8c, 0xc0, 0x98, 0x28, 0x2d, 0x90, 0x7a, 0x6c, 0xe9, 0xe9, 0x6f, 0x17, 0xbd, 0xe1, 0x8d, 0xf8, 0xc2, 0xbf, 0x7c, 0x0a, 0x51, 0x3f, 0x81, 0xc8, 0x24, 0x00, 0x06, 0x45, 0x03, 0x2c, 0xf5, 0xb5, 0x4f, 0xba, 0x88, 0x52, 0x50, 0xe6, 0x23, 0xca, 0x06, 0x68, 0x4f, 0xb8, 0xef, 0xc5, 0x63, 0xc7, 0xe0, 0xfb, 0x01, 0x3c, 0x2f, 0x28, 0x41, 0xb1, 0x4a, 0x29, 0x1c, 0x3e, 0x7c, 0x14, 0x27, 0x6d, 0x38, 0x63, 0xea, 0x60, 0x7e, 0xd9, 0x15, 0x57, 0xe4, 0x8b, 0x38, 0xc9, 0x65, 0x42, 0x05, 0xa4, 0x54, 0xb8, 0xfb, 0xbe, 0x7d, 0x25, 0xd9, 0xe2, 0x69, 0x92, 0x9c, 0xa3, 0x07, 0x63, 0xac, 0x3f, 0xb9, 0x01, 0x4a, 0x09, 0x1e, 0xdb, 0x7f, 0x0c, 0xeb, 0x4f, 0x9e, 0x2d, 0xdd, 0xc7, 0xea, 0x7a, 0x68, 0xda, 0x6a, 0xd5, 0x39, 0x7b, 0x57, 0x7d, 0xb1, 0x2a, 0x60, 0xa5, 0xd4, 0xca, 0x2d, 0x3b, 0x25, 0x93, 0xc2, 0x3a, 0x34, 0x11, 0x20, 0x24, 0x2e, 0xed, 0x23, 0x0c, 0x1b, 0x23, 0xdc, 0x23, 0xf7, 0xf7, 0x4b, 0xfa, 0x26, 0x15, 0x3d, 0x0f, 0x8d, 0x52, 0x65, 0xce, 0x79, 0x13, 0xab, 0x32, 0x67, 0xa4, 0xaa, 0x4d, 0x70, 0xd7, 0xe3, 0x68, 0x04, 0x52, 0x09, 0xad, 0x39, 0x02, 0xe4, 0xe8, 0x29, 0x1d, 0xcb, 0x77, 0x72, 0x8f, 0x5f, 0x85, 0xcb, 0xed, 0x9a, 0xaf, 0x98, 0x2d, 0xd6, 0x60, 0x0a, 0x37, 0xf7, 0xb3, 0x40, 0x8e, 0x90, 0x4a, 0x5d, 0x84, 0xd5, 0x70, 0xb9, 0xdc, 0xe3, 0xb8, 0x31, 0xac, 0x6e, 0x94, 0xda, 0xbd, 0x0e, 0xbe, 0xe7, 0x83, 0x71, 0x0e, 0x1e, 0xf8, 0xe0, 0xbe, 0x0f, 0xca, 0xb9, 0xf6, 0x27, 0xc9, 0x5d, 0x27, 0x45, 0x1c, 0x59, 0x92, 0x9f, 0xbe, 0x1f, 0xa4, 0x90, 0xdd, 0x15, 0x02, 0x8c, 0x8b, 0x12, 0xdf, 0xad, 0xe1, 0x7b, 0xe0, 0x84, 0xe9, 0x7a, 0xb3, 0x6e, 0xce, 0xbc, 0x80, 0x38, 0x50, 0x32, 0xe9, 0x80, 0x26, 0xb1, 0xdb, 0xb1, 0xab, 0xea, 0xef, 0x9a, 0x2c, 0xa3, 0x9a, 0x1d, 0x8d, 0xc0, 0x8e, 0x42, 0xd4, 0xde, 0x10, 0x5b, 0xe1, 0xa6, 0xd1, 0x08, 0x0c, 0x5d, 0x04, 0x7c, 0x80, 0x32, 0x56, 0x0a, 0x5c, 0xee, 0xf1, 0x94, 0x52, 0xa5, 0x39, 0xd9, 0xba, 0xe3, 0x08, 0x59, 0x53, 0xa5, 0xa8, 0x72, 0x8b, 0x00, 0x00, 0x88, 0xfd, 0x3b, 0x02, 0xa5, 0xf4, 0xb8, 0x1a, 0x91, 0x04, 0x9e, 0x33, 0x56, 0x56, 0xed, 0x95, 0xbb, 0x73, 0xe0, 0xd5, 0x2a, 0xba, 0x38, 0xcf, 0xd1, 0x07, 0xc1, 0xbd, 0xfe, 0x0b, 0x0b, 0x0b, 0xa5, 0x0a, 0x5d, 0xe5, 0xd0, 0xbb, 0xc8, 0xab, 0x7c, 0xd6, 0x08, 0x9c, 0x67, 0xd1, 0x15, 0xbe, 0x41, 0x29, 0xe1, 0xd2, 0x19, 0xdf, 0x74, 0xc1, 0xfc, 0x83, 0xef, 0x7f, 0xa7, 0x85, 0x14, 0x01, 0x60, 0xc7, 0x77, 0x77, 0x62, 0xc7, 0x77, 0x77, 0xda, 0x5e, 0xf5, 0x34, 0x8c, 0xf9, 0xb3, 0xb7, 0x3c, 0x17, 0x77, 0xec, 0x4c, 0x91, 0xa6, 0xba, 0x7d, 0xd0, 0x68, 0x7a, 0x16, 0x02, 0xce, 0x32, 0x3a, 0xf1, 0xfe, 0x2e, 0xbf, 0xe2, 0xbd, 0xb8, 0xed, 0xdf, 0x6e, 0xc1, 0xcc, 0x6c, 0x88, 0x55, 0xab, 0x1a, 0x58, 0x3d, 0x33, 0x8b, 0x8d, 0x27, 0xbf, 0x00, 0xb7, 0x7e, 0xe7, 0x16, 0xb4, 0x5a, 0x01, 0x94, 0x02, 0x6e, 0xfd, 0xce, 0xcd, 0x78, 0xe5, 0xab, 0xce, 0x9f, 0x1a, 0x5d, 0x78, 0xde, 0x59, 0xcf, 0xc7, 0x0f, 0xff, 0xf3, 0x60, 0x59, 0x27, 0x20, 0x8d, 0x71, 0xc1, 0xb7, 0x22, 0xc3, 0x3c, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x85, 0x97, 0x4c, 0x97, 0x20, 0x04, 0x0c, 0x6f, 0xbb, 0xf4, 0x1d, 0xb8, 0xfa, 0x6f, 0xff, 0x1a, 0x59, 0x26, 0x47, 0xaa, 0xbc, 0xcb, 0xae, 0xb8, 0x02, 0x1f, 0xfe, 0xd0, 0x87, 0xa6, 0x0a, 0xea, 0x73, 0xf3, 0xf3, 0xf9, 0xb3, 0x55, 0x4d, 0x62, 0x29, 0x54, 0x2e, 0xbe, 0x54, 0x65, 0xa8, 0x3f, 0xd5, 0xd6, 0xe9, 0xcc, 0x62, 0x6e, 0xae, 0x59, 0x0a, 0x8a, 0x47, 0xe2, 0xee, 0x44, 0xfb, 0xd8, 0xb0, 0x61, 0xc3, 0xd8, 0x00, 0xf6, 0x99, 0xeb, 0x16, 0xb1, 0xff, 0x40, 0x17, 0xcb, 0xcb, 0xcb, 0xe8, 0x74, 0x66, 0xac, 0x6a, 0x9c, 0x21, 0x36, 0xcd, 0xaf, 0xea, 0xc0, 0x8b, 0x27, 0x47, 0x04, 0x1e, 0x7f, 0xfc, 0x71, 0xa4, 0x89, 0x44, 0x34, 0xcc, 0x46, 0xf9, 0x40, 0x4a, 0xac, 0x38, 0x21, 0xb1, 0x12, 0x87, 0xc1, 0x0d, 0xe6, 0x9d, 0x4e, 0x88, 0xb9, 0xb9, 0x10, 0x8b, 0x8b, 0x43, 0x74, 0xbb, 0x31, 0xa4, 0x54, 0xb8, 0xf5, 0xdb, 0x37, 0xe3, 0x15, 0x2f, 0x7f, 0xc9, 0xd4, 0x49, 0xd9, 0x05, 0x17, 0xfc, 0x77, 0xdc, 0x73, 0xef, 0x37, 0x10, 0x04, 0x1c, 0x57, 0xff, 0xcd, 0x27, 0xf0, 0x85, 0x1b, 0x6e, 0xc0, 0x43, 0xfb, 0xee, 0x2c, 0xad, 0x21, 0xd2, 0xf1, 0xdd, 0x28, 0xbc, 0x22, 0x8a, 0xb6, 0x5e, 0xa3, 0xd1, 0x1a, 0x69, 0x75, 0xba, 0x6b, 0x54, 0x9a, 0x0e, 0x6b, 0xd7, 0xdd, 0xea, 0x94, 0x8c, 0x2b, 0xb8, 0xe2, 0xda, 0x98, 0x66, 0xa9, 0x74, 0xd6, 0x35, 0x5a, 0x04, 0x46, 0xb3, 0xe6, 0x64, 0xca, 0xf9, 0x2b, 0x1d, 0x34, 0x88, 0x1b, 0x27, 0xbc, 0xd1, 0x35, 0xd9, 0x2d, 0xaa, 0x34, 0x74, 0xee, 0x06, 0x41, 0xa2, 0x17, 0x63, 0x65, 0xc4, 0x62, 0x50, 0x93, 0x50, 0x38, 0x31, 0x5a, 0x8a, 0x11, 0x42, 0xb4, 0xdb, 0x16, 0x56, 0x35, 0x85, 0x4f, 0x19, 0x51, 0x35, 0xe7, 0xed, 0x2a, 0x70, 0x12, 0x6b, 0x3d, 0xed, 0xb3, 0xd1, 0x96, 0xb2, 0xfb, 0x7f, 0x57, 0xc4, 0xa6, 0xca, 0x05, 0x00, 0x00, 0x9f, 0xfb, 0x25, 0xa5, 0xd4, 0x6a, 0xef, 0xdf, 0xcc, 0xff, 0x1b, 0xa2, 0xb8, 0x49, 0x66, 0xcc, 0x94, 0x90, 0x29, 0xf8, 0x4c, 0x85, 0x1f, 0x45, 0x11, 0xb8, 0xcb, 0xa2, 0x1c, 0x97, 0xed, 0xd4, 0x55, 0x83, 0x9a, 0x25, 0x99, 0x07, 0x4e, 0x25, 0x2b, 0x7d, 0x63, 0x43, 0x3a, 0x93, 0xf9, 0x2d, 0x24, 0xe0, 0x84, 0x95, 0xfa, 0xd8, 0x5a, 0x94, 0x3f, 0x1a, 0xcb, 0x00, 0x5f, 0x29, 0xd0, 0x5b, 0x25, 0x38, 0x99, 0x55, 0x5a, 0x01, 0x04, 0x84, 0x92, 0x42, 0xda, 0x4e, 0xb8, 0xa3, 0x6e, 0xa3, 0x55, 0xac, 0x4b, 0x96, 0xab, 0xcb, 0xf0, 0x2c, 0x29, 0x2e, 0x77, 0x8e, 0xa3, 0xce, 0xc3, 0x25, 0x84, 0x40, 0xd4, 0xed, 0x8e, 0x25, 0xad, 0xb9, 0x96, 0xa5, 0xe3, 0xda, 0x06, 0x8d, 0x56, 0xc3, 0x06, 0x5f, 0x03, 0x15, 0xb9, 0x08, 0x45, 0x14, 0x0d, 0x6d, 0x85, 0xce, 0x18, 0x03, 0xf7, 0x39, 0x3c, 0x70, 0x40, 0xea, 0x2c, 0x76, 0x38, 0xa2, 0x64, 0xa7, 0x3f, 0xb6, 0xf9, 0x7d, 0x23, 0x1d, 0x2b, 0xe4, 0x74, 0xd0, 0xe8, 0xa7, 0x3e, 0x79, 0x9d, 0x0d, 0xe6, 0x2c, 0xaf, 0x42, 0x92, 0xbc, 0x0a, 0x31, 0xbd, 0xea, 0x99, 0x76, 0xf3, 0x29, 0xf5, 0xdd, 0xeb, 0x20, 0xe3, 0x41, 0x2f, 0xc5, 0x81, 0x83, 0x7a, 0xce, 0x75, 0xd3, 0x29, 0xf3, 0x76, 0x44, 0x84, 0x92, 0xc9, 0x03, 0xfa, 0x7b, 0xdf, 0x7d, 0x31, 0xd6, 0xac, 0x6e, 0x61, 0xe3, 0xc6, 0x39, 0xcc, 0xce, 0x36, 0xd0, 0xed, 0xc6, 0xd8, 0xb5, 0x6b, 0x27, 0x9a, 0x4d, 0x0e, 0x92, 0x27, 0x76, 0x4a, 0x29, 0x6c, 0xbb, 0xf1, 0x7a, 0x7c, 0x78, 0xcb, 0x5f, 0x62, 0xda, 0x2d, 0x1a, 0x44, 0xf0, 0x3c, 0x6e, 0xef, 0x53, 0x33, 0xf0, 0xad, 0x67, 0xf8, 0xc4, 0x01, 0x9d, 0x29, 0x7c, 0xf3, 0x1b, 0xff, 0x8c, 0xf9, 0xd9, 0x10, 0x51, 0x9c, 0x69, 0x7f, 0xe9, 0x38, 0x83, 0x70, 0x9e, 0xd3, 0xcb, 0xae, 0xb8, 0x02, 0xff, 0xf0, 0xf7, 0x7f, 0x3f, 0x71, 0x12, 0xb2, 0x69, 0xd3, 0x26, 0xf8, 0x1e, 0xb7, 0x09, 0xa3, 0x79, 0x3f, 0x95, 0x94, 0xda, 0xe2, 0x51, 0x12, 0x88, 0x6c, 0xb2, 0x69, 0x82, 0xe1, 0xa0, 0x0f, 0xce, 0x44, 0x09, 0x89, 0x83, 0x9c, 0xec, 0x5e, 0xad, 0xa4, 0xf5, 0xbe, 0xf1, 0xe4, 0x17, 0xe0, 0xd1, 0xc3, 0x3b, 0xd1, 0x6a, 0xcf, 0x63, 0xcd, 0xda, 0x13, 0x30, 0x33, 0x33, 0x83, 0x7e, 0xbf, 0x8b, 0x66, 0x33, 0xcc, 0x67, 0xd3, 0x9b, 0x90, 0x8b, 0xdd, 0x89, 0xaf, 0xf3, 0xa0, 0xd7, 0xcb, 0xad, 0x9f, 0xb3, 0x4a, 0x5b, 0x8c, 0x02, 0x72, 0x3a, 0x56, 0xe3, 0x0d, 0x9f, 0xdb, 0x66, 0x83, 0x79, 0xbb, 0x1d, 0x60, 0xdd, 0xda, 0x36, 0xda, 0xed, 0x10, 0x8d, 0x30, 0x00, 0x25, 0xcb, 0x58, 0x5e, 0x1e, 0x42, 0x48, 0x85, 0xad, 0x5b, 0x3f, 0x3e, 0x95, 0xa0, 0x91, 0x5b, 0x5c, 0x64, 0xa9, 0xc4, 0xbf, 0xdd, 0x76, 0x3b, 0x1e, 0x7e, 0xe4, 0x61, 0x1b, 0x20, 0x0d, 0x82, 0xaa, 0x2a, 0x05, 0x4b, 0xdd, 0x08, 0xec, 0xb8, 0xb5, 0x4d, 0xf7, 0xa0, 0x99, 0x56, 0x0e, 0x54, 0xa3, 0xc2, 0x62, 0x6e, 0xdb, 0xae, 0x54, 0xcc, 0xe5, 0xdc, 0x26, 0xed, 0xe6, 0xb8, 0x54, 0xdb, 0x52, 0xad, 0x3b, 0x5e, 0x75, 0x0d, 0x57, 0x4a, 0x69, 0xd6, 0xb6, 0x9d, 0x3c, 0xa0, 0x76, 0xcd, 0x35, 0xb3, 0xe8, 0x43, 0x87, 0xc5, 0x6e, 0xd1, 0x51, 0xe3, 0x2a, 0x59, 0x6a, 0xfd, 0xba, 0x45, 0x8d, 0x7b, 0x3d, 0x68, 0x7d, 0x2b, 0xd9, 0x09, 0xce, 0x06, 0x79, 0x75, 0x0a, 0xf4, 0x3c, 0x88, 0xab, 0x92, 0x51, 0x99, 0x7b, 0x4d, 0xcd, 0x1a, 0xee, 0xea, 0x94, 0x54, 0xab, 0x6f, 0xa5, 0xd4, 0x88, 0xb9, 0x96, 0x91, 0x4c, 0x36, 0xe7, 0x3f, 0xc8, 0x86, 0xb5, 0x0c, 0x7b, 0x73, 0x8c, 0x76, 0xbb, 0x0d, 0x29, 0x72, 0x19, 0x5d, 0x68, 0xef, 0x10, 0x1d, 0xbc, 0xb5, 0xda, 0x1c, 0x58, 0x6a, 0xd1, 0x8c, 0x61, 0x1c, 0x61, 0xb9, 0xd7, 0x05, 0x37, 0xb1, 0x4f, 0x01, 0x23, 0xfd, 0x6c, 0x3d, 0x28, 0xac, 0xa7, 0xdc, 0x69, 0x5e, 0x41, 0x91, 0x7c, 0x71, 0xa0, 0x9c, 0x41, 0x26, 0x72, 0x2c, 0xbb, 0xcf, 0x25, 0xc4, 0x55, 0x61, 0x6c, 0x73, 0xe2, 0xa6, 0x47, 0x3d, 0x4e, 0x18, 0xa6, 0xd9, 0xf2, 0x57, 0x7e, 0xde, 0x15, 0x19, 0x41, 0x06, 0xdc, 0x4a, 0x9d, 0xfb, 0x6c, 0x24, 0xe3, 0x29, 0xf3, 0x01, 0x46, 0x61, 0xfe, 0x3a, 0xbd, 0x74, 0x03, 0x79, 0x13, 0xb3, 0xaf, 0x4c, 0x2b, 0x12, 0x45, 0x95, 0x1b, 0xba, 0x52, 0x42, 0x54, 0xed, 0x6f, 0x03, 0xc0, 0xe2, 0xe2, 0x62, 0x8d, 0x39, 0x0c, 0x1d, 0xa9, 0xd4, 0x2d, 0xa9, 0x69, 0x64, 0x7f, 0xca, 0xf1, 0x90, 0x27, 0x23, 0xab, 0x41, 0x92, 0xe8, 0x17, 0x62, 0x30, 0x48, 0xd1, 0x9c, 0x10, 0xab, 0xdc, 0xb1, 0x7d, 0xbb, 0xed, 0xed, 0x32, 0x46, 0x30, 0x33, 0x13, 0x60, 0x76, 0x26, 0xc0, 0x81, 0x83, 0x7d, 0x0c, 0x1d, 0x35, 0xb7, 0xad, 0xd7, 0x5f, 0x8f, 0x17, 0x9d, 0x73, 0xce, 0xc4, 0x41, 0xa7, 0x33, 0x7b, 0x2a, 0x0e, 0x1e, 0x7c, 0xb0, 0xf4, 0x3c, 0x98, 0x87, 0x73, 0xd2, 0xed, 0xc8, 0xd2, 0x32, 0x4e, 0x3e, 0x79, 0x16, 0xcd, 0x26, 0x87, 0x94, 0x29, 0x82, 0x00, 0x98, 0x9b, 0x07, 0x56, 0xad, 0x9e, 0x47, 0x18, 0x72, 0xf4, 0x07, 0x29, 0x08, 0xa1, 0xd8, 0xf1, 0xdd, 0x9d, 0xd8, 0xbd, 0x6b, 0xd7, 0x54, 0x55, 0xfa, 0x86, 0x0d, 0x1b, 0xf0, 0xe0, 0x0f, 0x9a, 0x98, 0x99, 0x69, 0xd8, 0x7b, 0x26, 0xd2, 0x78, 0x2c, 0x39, 0xed, 0xa9, 0x36, 0x29, 0x33, 0xac, 0x3f, 0x71, 0x15, 0x56, 0xad, 0x9a, 0x81, 0x94, 0x0a, 0xc3, 0x28, 0xc5, 0xe3, 0x4f, 0x2c, 0xa2, 0xd7, 0x8b, 0x31, 0x18, 0x26, 0x36, 0xd9, 0xbc, 0xfa, 0xa3, 0x7f, 0x3e, 0xd6, 0xfe, 0x75, 0xdc, 0xd6, 0xee, 0x74, 0x90, 0xc4, 0x00, 0xe5, 0x1b, 0xf0, 0xbc, 0xb3, 0x9e, 0x8f, 0x5b, 0x6f, 0xbd, 0x09, 0x1b, 0x4f, 0x0a, 0xcb, 0x53, 0x27, 0x98, 0x2c, 0xc9, 0x93, 0x02, 0x4e, 0xc5, 0xa5, 0xec, 0x18, 0xdb, 0xa4, 0xe7, 0x55, 0xb7, 0xed, 0xdb, 0xbb, 0x07, 0x3f, 0x7a, 0xf4, 0x21, 0xcc, 0xaf, 0x59, 0xab, 0xab, 0x1f, 0xca, 0xb1, 0xdc, 0x1b, 0x60, 0xcd, 0xda, 0xd5, 0xb9, 0xdc, 0x2c, 0xd1, 0x73, 0xc0, 0x6a, 0xf2, 0x64, 0x4f, 0x07, 0x42, 0x40, 0x53, 0x06, 0x0c, 0x79, 0x4c, 0xbf, 0x2f, 0x4b, 0xcb, 0xdd, 0xa9, 0xee, 0xdd, 0x97, 0xbe, 0xf2, 0x25, 0x1b, 0xcc, 0x17, 0xd6, 0xb6, 0xd1, 0x6e, 0x07, 0x60, 0x8c, 0xa0, 0xdd, 0xf2, 0x81, 0x85, 0x0e, 0x94, 0x52, 0x58, 0xee, 0x46, 0x78, 0x68, 0xcf, 0x13, 0xb8, 0xe5, 0xe6, 0x9b, 0xa7, 0x36, 0x0e, 0xd2, 0x63, 0xb7, 0xc0, 0xd7, 0xbf, 0x79, 0x3d, 0x78, 0x3e, 0xbe, 0x55, 0x9a, 0x72, 0x81, 0x1c, 0xab, 0xa1, 0xe1, 0x7a, 0x10, 0x8c, 0x5b, 0x8b, 0x06, 0x83, 0xa8, 0x16, 0x61, 0x2d, 0x9e, 0x51, 0xa3, 0xf8, 0x56, 0x9d, 0x1e, 0x4a, 0xf2, 0x31, 0x38, 0x61, 0x67, 0xc1, 0xeb, 0x38, 0x44, 0x72, 0x8c, 0xca, 0xa8, 0x8d, 0x03, 0x24, 0x75, 0x0a, 0xc4, 0x62, 0xfe, 0xdc, 0x38, 0xe2, 0x99, 0xd9, 0xf5, 0xc2, 0x29, 0xb2, 0x80, 0xdf, 0xf5, 0x1a, 0x2e, 0x46, 0x2a, 0xf4, 0x92, 0x74, 0x36, 0xf7, 0xc6, 0xb6, 0x14, 0x84, 0x10, 0x50, 0x64, 0xbc, 0x30, 0x57, 0x51, 0x1d, 0x69, 0xd9, 0xf2, 0xe2, 0xef, 0xf2, 0x98, 0xa8, 0xca, 0x09, 0x4f, 0x9d, 0x96, 0x8b, 0xeb, 0x2c, 0x5a, 0x15, 0x55, 0xab, 0xb6, 0x2c, 0xaa, 0xa3, 0xdd, 0x4a, 0x29, 0xf4, 0x7a, 0x3d, 0x3b, 0x12, 0xae, 0x63, 0x9a, 0xb4, 0x7a, 0x04, 0x84, 0x10, 0x78, 0xb9, 0xd2, 0x9d, 0x76, 0x2b, 0xd4, 0xba, 0xfe, 0x3c, 0xa7, 0x43, 0x3a, 0xbd, 0x03, 0x52, 0xa0, 0xce, 0x4a, 0xbf, 0xf6, 0x34, 0xd7, 0x0a, 0xd6, 0x7f, 0xa5, 0xff, 0x5d, 0xe5, 0x2f, 0x86, 0xc9, 0x9c, 0xca, 0x37, 0x0c, 0xd6, 0xf3, 0xda, 0xed, 0x99, 0x98, 0xa1, 0x7b, 0x93, 0xe9, 0x19, 0x69, 0xbf, 0x71, 0x15, 0x3a, 0x63, 0xfe, 0x48, 0x85, 0x5b, 0xee, 0x51, 0xd3, 0xca, 0xcd, 0x44, 0x49, 0xda, 0x4f, 0xeb, 0xa7, 0x97, 0xdb, 0x00, 0xe5, 0x07, 0x97, 0xd6, 0xc2, 0x4c, 0x66, 0xff, 0x96, 0x74, 0x07, 0x7d, 0xc1, 0x69, 0x05, 0xa1, 0x28, 0xa9, 0x59, 0x55, 0x5a, 0x0b, 0x25, 0x12, 0x9b, 0x73, 0xc3, 0xdd, 0x60, 0x3d, 0x17, 0xce, 0x94, 0x6c, 0x55, 0x5d, 0xf1, 0x1b, 0x00, 0x68, 0x36, 0x9b, 0x39, 0x74, 0x95, 0x1b, 0x13, 0xc4, 0x5a, 0xcf, 0x38, 0xcd, 0xb5, 0xc5, 0x1b, 0xad, 0xf6, 0xd8, 0x1e, 0x8d, 0xe1, 0x2e, 0x10, 0x60, 0x24, 0x93, 0x3f, 0x9e, 0x6d, 0xeb, 0xd6, 0x8f, 0xdb, 0x60, 0x3e, 0x3f, 0xd7, 0xc0, 0xc6, 0x0d, 0x33, 0x60, 0x0c, 0x18, 0x0c, 0x12, 0x30, 0xaa, 0xd1, 0x8d, 0x38, 0xd1, 0xbd, 0xea, 0x69, 0x2b, 0xdf, 0x67, 0x9d, 0xbe, 0x00, 0x40, 0x21, 0x0c, 0xb9, 0x4d, 0x5a, 0x3c, 0x36, 0x79, 0x40, 0x3f, 0x76, 0xb4, 0x87, 0x99, 0x16, 0x81, 0xf4, 0x35, 0xf4, 0x27, 0x52, 0xcd, 0x62, 0x9d, 0x9b, 0xd5, 0x5e, 0xed, 0x8c, 0x26, 0xe8, 0xb4, 0x03, 0x0c, 0x07, 0xe9, 0x54, 0x01, 0xd2, 0xc0, 0xd8, 0x22, 0xcd, 0x34, 0x43, 0xc9, 0xe8, 0x0c, 0x0c, 0xc5, 0x54, 0xbd, 0xf9, 0xb3, 0xb7, 0x6c, 0xc1, 0xb1, 0x45, 0x06, 0x99, 0x1d, 0x83, 0xc7, 0x35, 0x71, 0x91, 0x43, 0xe1, 0xc4, 0xb5, 0x21, 0x86, 0x1d, 0x8e, 0x43, 0x47, 0xb4, 0x04, 0x6e, 0x1c, 0x67, 0x78, 0x68, 0xcf, 0x13, 0x53, 0x11, 0xfa, 0xa2, 0x41, 0x8c, 0x56, 0xf3, 0x31, 0x6c, 0xd8, 0xf0, 0x6a, 0xcc, 0xcf, 0x06, 0x48, 0x86, 0x71, 0x09, 0x72, 0x8d, 0x26, 0x14, 0xc4, 0xc9, 0x92, 0x0c, 0xc9, 0x90, 0x94, 0xda, 0x5a, 0x49, 0xfa, 0xcc, 0xc8, 0xf4, 0xf6, 0xfb, 0x03, 0xa4, 0x4b, 0x47, 0xb0, 0x70, 0xf2, 0x99, 0xda, 0x95, 0x2b, 0xd5, 0x8b, 0x77, 0xc0, 0x29, 0x64, 0x9a, 0x81, 0x81, 0x21, 0xee, 0xc7, 0xf0, 0xf9, 0x74, 0xfa, 0xf7, 0xc3, 0x28, 0x46, 0x96, 0xa5, 0xa3, 0x8b, 0xfb, 0x71, 0xca, 0xce, 0x7d, 0xfa, 0xda, 0x6b, 0x2d, 0x0a, 0xb5, 0x6f, 0xef, 0x1e, 0x6d, 0xfd, 0x1c, 0x7a, 0x98, 0x6b, 0x73, 0x70, 0x08, 0x0c, 0x7b, 0x7d, 0x27, 0x31, 0x95, 0x68, 0x85, 0x04, 0x49, 0x42, 0x11, 0x45, 0x02, 0xb7, 0xde, 0x7a, 0xd3, 0xd4, 0x01, 0xfd, 0xc8, 0x61, 0x9d, 0xf0, 0xf7, 0xfb, 0x19, 0x1a, 0x0d, 0x8e, 0x66, 0xc3, 0xcb, 0xd1, 0x4f, 0x7d, 0xde, 0xa1, 0xef, 0x8d, 0x85, 0xcb, 0x09, 0x21, 0x18, 0xf6, 0x86, 0x63, 0xab, 0x77, 0xa5, 0x14, 0xc2, 0x30, 0x1c, 0x59, 0x7f, 0xea, 0x2a, 0x72, 0x93, 0x70, 0x0b, 0x14, 0x84, 0x39, 0x95, 0x29, 0x70, 0xc6, 0x6d, 0xe0, 0x23, 0xd2, 0x10, 0x8d, 0x73, 0xd8, 0x1c, 0x05, 0x07, 0xca, 0x04, 0x14, 0xf3, 0xef, 0xc8, 0xd7, 0x64, 0x41, 0xa4, 0xb3, 0x36, 0xb2, 0xd2, 0x9a, 0x0c, 0x20, 0xb7, 0xb8, 0x4d, 0x11, 0x47, 0xc6, 0xe2, 0x5a, 0x39, 0xad, 0x4a, 0x02, 0xc6, 0xa8, 0xd3, 0xee, 0x2c, 0xda, 0x8e, 0x75, 0xda, 0x22, 0x75, 0x7e, 0x18, 0x84, 0xad, 0xdc, 0x83, 0x37, 0x41, 0xdb, 0x4d, 0x5c, 0xdd, 0xe0, 0xcc, 0x3c, 0x3e, 0xf2, 0x77, 0xee, 0x3e, 0xdc, 0xdf, 0xab, 0x2b, 0x2a, 0x93, 0x5c, 0xad, 0xb1, 0x4a, 0xda, 0x33, 0x5f, 0xad, 0x56, 0x0b, 0x8c, 0x7a, 0x25, 0x85, 0x40, 0x9d, 0x50, 0x99, 0x6b, 0x95, 0x58, 0x6d, 0xfb, 0x30, 0x0c, 0xd1, 0xe9, 0x74, 0xc0, 0x0d, 0x91, 0xa2, 0xca, 0x4c, 0x37, 0x59, 0xf9, 0x38, 0x16, 0xf9, 0x4a, 0x2c, 0x3e, 0x6b, 0xfe, 0x91, 0x0b, 0xdc, 0x8f, 0x13, 0x7e, 0x11, 0x22, 0x1d, 0x79, 0xe0, 0xdc, 0x8b, 0x52, 0xbd, 0x90, 0x75, 0x17, 0x7f, 0x9c, 0xd4, 0xa9, 0x52, 0x0a, 0xb1, 0xe3, 0xb6, 0x56, 0xcf, 0x44, 0x67, 0x23, 0xe7, 0xec, 0xda, 0x8d, 0xba, 0x8c, 0x77, 0xbd, 0x00, 0xe4, 0x37, 0xcf, 0xd1, 0xcc, 0x1e, 0xf7, 0x32, 0x11, 0x42, 0x2c, 0x24, 0x53, 0xf7, 0x60, 0x49, 0x29, 0xd1, 0xef, 0xc7, 0xb5, 0xc1, 0xdc, 0xf6, 0x28, 0x8f, 0x1c, 0xb1, 0xac, 0x76, 0x4a, 0x29, 0x18, 0x8c, 0x4f, 0x7d, 0xa0, 0x9d, 0x80, 0xc6, 0x5c, 0x1b, 0x37, 0x43, 0xd4, 0x0b, 0xef, 0x64, 0x7a, 0x99, 0xbb, 0x77, 0xed, 0xc2, 0x43, 0x7b, 0x9e, 0xb0, 0xc1, 0xfc, 0xa4, 0x8d, 0xb3, 0x98, 0x9b, 0x0d, 0xb5, 0xad, 0xeb, 0x66, 0x8e, 0x4c, 0x48, 0x44, 0x51, 0x86, 0xc7, 0x1e, 0x5f, 0xc6, 0x72, 0x37, 0xc6, 0x8e, 0xef, 0xee, 0x9c, 0x6a, 0xa6, 0x9a, 0xd2, 0x2c, 0x87, 0xae, 0x0a, 0xb6, 0x6a, 0x12, 0x4f, 0x6e, 0xce, 0x92, 0x65, 0x00, 0xcb, 0x17, 0x97, 0x61, 0x94, 0xe0, 0xc9, 0x03, 0x7d, 0x64, 0xa9, 0xc4, 0x09, 0xeb, 0x86, 0x68, 0xb5, 0x7c, 0x00, 0x04, 0xab, 0xe6, 0x03, 0x2c, 0x2d, 0x0d, 0xa7, 0x0e, 0x90, 0x00, 0xd0, 0x1f, 0x0c, 0x90, 0xc4, 0x04, 0x6f, 0xba, 0xe4, 0x3d, 0xf8, 0xe2, 0xe7, 0xaf, 0xc2, 0xd1, 0x23, 0xcb, 0x18, 0x66, 0x4f, 0x4c, 0xb5, 0x58, 0xbf, 0xec, 0xa5, 0xe7, 0xe3, 0xae, 0xbb, 0xbe, 0x81, 0x4e, 0xdb, 0x87, 0xc7, 0x75, 0xe5, 0xe1, 0x71, 0x80, 0xb7, 0x38, 0xc2, 0xa0, 0x83, 0x61, 0x24, 0xf0, 0xe4, 0xc1, 0x1e, 0x96, 0x7b, 0x09, 0x1e, 0xfa, 0xf1, 0x8f, 0x27, 0x3e, 0xdf, 0xe6, 0xcc, 0x26, 0x88, 0xf8, 0x27, 0xb8, 0xf9, 0xa6, 0x8f, 0x83, 0x31, 0x9d, 0x87, 0x28, 0x45, 0xf2, 0xaa, 0x0b, 0x25, 0x68, 0xff, 0x78, 0x36, 0xad, 0x0d, 0x51, 0x16, 0xe6, 0x48, 0xa7, 0x40, 0x28, 0xf6, 0xed, 0xdd, 0x83, 0x66, 0xab, 0x53, 0x7a, 0x56, 0xce, 0xde, 0xb2, 0x05, 0x9f, 0xbc, 0x6e, 0x1b, 0xbe, 0xf6, 0xd5, 0xaf, 0xe1, 0xce, 0xfb, 0xef, 0x45, 0x9a, 0x68, 0xbb, 0xcd, 0xe1, 0x30, 0x86, 0x96, 0xa6, 0xd6, 0x32, 0xd2, 0xde, 0x14, 0x83, 0xff, 0x77, 0xef, 0xbc, 0x07, 0x6b, 0x56, 0xb7, 0x6a, 0xb5, 0x24, 0xd2, 0xe3, 0x4c, 0x48, 0xce, 0x38, 0xf3, 0x4c, 0xe7, 0xdd, 0xf8, 0x01, 0x3c, 0x4e, 0xd1, 0x6e, 0x07, 0x08, 0x7c, 0x62, 0xcb, 0xb8, 0x82, 0xd9, 0x0c, 0x78, 0xbe, 0x26, 0x3b, 0x3d, 0x79, 0xb0, 0xf7, 0xb4, 0x9e, 0x37, 0x96, 0xb7, 0xe1, 0xe2, 0x24, 0x81, 0x90, 0x02, 0xad, 0x66, 0x88, 0x20, 0xf0, 0x9c, 0xd1, 0x29, 0x59, 0x5b, 0xec, 0xd4, 0x05, 0xa8, 0x3a, 0x14, 0xb2, 0xdf, 0xef, 0xd7, 0x22, 0xaa, 0x45, 0xc1, 0xc4, 0x6b, 0xf7, 0x55, 0xac, 0x95, 0x95, 0x00, 0xe9, 0x8c, 0x07, 0xbb, 0x6e, 0x68, 0x55, 0x0e, 0x54, 0x71, 0xad, 0x1c, 0x19, 0x6d, 0x45, 0xac, 0x56, 0xbc, 0xcb, 0xad, 0x32, 0x8a, 0x6e, 0x7a, 0xbf, 0x5a, 0xa4, 0xa6, 0xd8, 0x57, 0xd1, 0xdb, 0x2f, 0x49, 0xb2, 0x3a, 0xf1, 0xa7, 0xce, 0x29, 0xb4, 0xae, 0x15, 0x50, 0xf7, 0x67, 0x4a, 0x78, 0x29, 0x10, 0x9b, 0x98, 0x67, 0x94, 0xdd, 0x94, 0xc8, 0x46, 0x74, 0x1e, 0xdc, 0xcf, 0x6a, 0x10, 0x92, 0x2a, 0xfa, 0x6a, 0x11, 0x92, 0x28, 0x1e, 0x29, 0x26, 0xdd, 0x2a, 0x3d, 0x8e, 0x63, 0x08, 0x45, 0xc0, 0xa0, 0x0a, 0x7b, 0xee, 0x20, 0x40, 0x18, 0x34, 0xf5, 0x0c, 0xbe, 0x18, 0xa0, 0xd7, 0xeb, 0x61, 0x10, 0x45, 0x48, 0x73, 0x77, 0x38, 0x9e, 0xe5, 0x4c, 0x46, 0x50, 0x87, 0xf0, 0x66, 0x7b, 0x2c, 0x1c, 0xcc, 0xd7, 0x55, 0x74, 0xa6, 0x62, 0x9d, 0x7d, 0xf9, 0x00, 0x55, 0x04, 0x12, 0x29, 0xa4, 0x24, 0x2b, 0x66, 0x38, 0x1a, 0xda, 0x82, 0x15, 0xce, 0x17, 0xa2, 0xac, 0x14, 0x67, 0xc6, 0xe2, 0xf2, 0x8e, 0x50, 0xa1, 0xd7, 0x6e, 0xcd, 0x3b, 0x0a, 0xf6, 0xa6, 0x55, 0x2a, 0x42, 0x21, 0xce, 0x2f, 0xb3, 0x6a, 0xd6, 0x59, 0xec, 0x4d, 0x27, 0x7b, 0xca, 0x42, 0xd3, 0xc8, 0x7b, 0x45, 0x50, 0x40, 0x26, 0x0c, 0x69, 0x0e, 0xd6, 0x39, 0xc7, 0x25, 0x7c, 0x18, 0x1f, 0xf4, 0xe2, 0xe5, 0x17, 0xb6, 0xea, 0x57, 0x4a, 0xd9, 0xb1, 0x35, 0xc5, 0x78, 0x6d, 0x50, 0x37, 0x3d, 0x3a, 0x42, 0x46, 0x33, 0x33, 0x97, 0xb8, 0x92, 0x29, 0x59, 0xf2, 0x60, 0xd7, 0x9e, 0xf3, 0x1a, 0x11, 0xe1, 0x84, 0x23, 0xc9, 0x5b, 0x1a, 0x22, 0xcb, 0x90, 0xa6, 0x12, 0x24, 0x5f, 0x84, 0xcd, 0xec, 0xb9, 0x62, 0x7c, 0x2c, 0x43, 0x15, 0x00, 0x52, 0xa9, 0xab, 0x92, 0x28, 0xc9, 0xd0, 0x9e, 0x50, 0x3a, 0x9c, 0x31, 0x82, 0xf9, 0xf9, 0x26, 0x4e, 0x3e, 0x69, 0x0e, 0xb3, 0xb3, 0xa1, 0x45, 0x5b, 0xc2, 0xa6, 0x7e, 0x49, 0x1b, 0x4d, 0x5f, 0x4b, 0xdc, 0x3e, 0x01, 0x2c, 0x2d, 0xc5, 0xb8, 0xfd, 0xb6, 0xef, 0x1c, 0x77, 0x25, 0xd2, 0xeb, 0x76, 0x71, 0xf4, 0xf0, 0xc3, 0x98, 0x9d, 0xf5, 0x6d, 0x96, 0x6d, 0x9f, 0x1d, 0x3a, 0xb9, 0x96, 0xbb, 0x1f, 0x30, 0x10, 0x4e, 0x41, 0x39, 0x87, 0x0f, 0x82, 0xd9, 0xd9, 0x10, 0x4b, 0x4b, 0x31, 0x40, 0x29, 0x44, 0x9e, 0xd1, 0x53, 0xa6, 0x35, 0xc2, 0xa3, 0x28, 0xc3, 0xd7, 0xbf, 0x75, 0xcb, 0x54, 0x0b, 0x6c, 0x2a, 0x04, 0x82, 0x70, 0x88, 0x4d, 0x9b, 0x36, 0xe1, 0xed, 0xef, 0xf8, 0x2b, 0x7c, 0xf8, 0x4f, 0xdf, 0x81, 0x07, 0xee, 0xbb, 0x6f, 0xaa, 0x80, 0xde, 0x6c, 0xb7, 0xd1, 0x6a, 0xf2, 0xdc, 0xd0, 0xc1, 0x5d, 0x70, 0x90, 0x07, 0x76, 0x06, 0xb1, 0x3a, 0x44, 0x9c, 0x64, 0x78, 0xf8, 0x91, 0x87, 0xa7, 0x3a, 0xc6, 0xc1, 0xc3, 0x7d, 0x8d, 0x50, 0x51, 0x82, 0xc0, 0x18, 0x67, 0x10, 0x9a, 0x33, 0x86, 0x27, 0x0b, 0xe8, 0x49, 0xe6, 0xc1, 0x57, 0x79, 0x77, 0xd1, 0x28, 0x26, 0xca, 0x04, 0x57, 0x7e, 0xf8, 0x03, 0x78, 0xe1, 0xb7, 0x5e, 0x0c, 0x00, 0x78, 0xeb, 0x25, 0x6f, 0x1b, 0x3b, 0xf9, 0xd0, 0xeb, 0x76, 0xf1, 0x6f, 0xb7, 0xdd, 0x8e, 0xf9, 0xf9, 0x59, 0xcc, 0xcd, 0xcf, 0xd7, 0x26, 0x7f, 0xaf, 0x79, 0xed, 0x6b, 0x30, 0x3f, 0x3f, 0x8b, 0xeb, 0xae, 0xfd, 0x38, 0x28, 0x65, 0x50, 0x4a, 0x17, 0x04, 0x8c, 0xeb, 0x77, 0x6a, 0xb0, 0x2c, 0x30, 0xb3, 0xf1, 0xe4, 0x89, 0xce, 0x9b, 0x50, 0x92, 0x9b, 0x6b, 0x78, 0xa5, 0x80, 0xae, 0x94, 0x42, 0x26, 0x8e, 0xef, 0x1a, 0xb8, 0xcf, 0xca, 0xe1, 0x83, 0x4f, 0xc2, 0x0f, 0x38, 0x9a, 0x0d, 0x1f, 0x8a, 0xa4, 0x10, 0x4a, 0xd7, 0xf9, 0x6e, 0xf0, 0x10, 0x42, 0x20, 0x13, 0x12, 0x9c, 0x03, 0x69, 0x86, 0xa9, 0x50, 0x9c, 0x41, 0xaf, 0x07, 0x96, 0xaf, 0x0d, 0xbe, 0xaf, 0x2b, 0x5e, 0x4a, 0x88, 0x46, 0x09, 0xf3, 0xf5, 0xb1, 0x1f, 0x0f, 0x9f, 0x02, 0x72, 0xe6, 0x4f, 0x01, 0x29, 0xeb, 0x75, 0x87, 0x69, 0x45, 0xef, 0x8a, 0x97, 0x07, 0x41, 0xec, 0xd8, 0x4b, 0x8f, 0x7c, 0x51, 0x0a, 0x89, 0x42, 0xe7, 0x82, 0xba, 0xa3, 0xcb, 0x26, 0x09, 0x4c, 0x47, 0xc7, 0x76, 0xdd, 0xc0, 0x2f, 0x54, 0x32, 0x22, 0xdc, 0xe2, 0xda, 0x57, 0x1b, 0xf2, 0x97, 0x4e, 0xc6, 0x0c, 0x32, 0xaa, 0xe0, 0x79, 0xbc, 0xe4, 0xa4, 0xe6, 0x2a, 0x78, 0x96, 0x02, 0x62, 0x94, 0xd5, 0x70, 0x97, 0x0a, 0x23, 0x16, 0x39, 0x66, 0xdd, 0xb4, 0x3a, 0x1e, 0x9c, 0x94, 0xac, 0x5a, 0x4d, 0x0f, 0xdc, 0xee, 0x4f, 0x96, 0x05, 0xcb, 0xdc, 0xfb, 0x0f, 0x68, 0xff, 0x01, 0xf7, 0x3c, 0x5d, 0x95, 0x42, 0xad, 0x16, 0x47, 0x46, 0x92, 0x2e, 0x97, 0x14, 0xa8, 0x39, 0x50, 0xb4, 0x94, 0xb4, 0x44, 0x51, 0x04, 0x91, 0xe5, 0x0a, 0x8a, 0xbe, 0x42, 0xa7, 0xd3, 0xc1, 0xec, 0xec, 0xac, 0x75, 0xb8, 0xe3, 0x55, 0x46, 0xa3, 0xdb, 0x43, 0x2f, 0x8b, 0xac, 0x8c, 0xf6, 0xc1, 0x4d, 0xa0, 0xad, 0xfe, 0x4c, 0x55, 0x61, 0xad, 0xce, 0x6f, 0x1c, 0x00, 0x32, 0x91, 0x8c, 0xad, 0x2e, 0x01, 0x80, 0x04, 0x85, 0xdf, 0xad, 0xfb, 0x61, 0xad, 0x1b, 0x9b, 0xca, 0x56, 0xcc, 0x4a, 0x5d, 0x7b, 0xc7, 0xba, 0x2a, 0x39, 0x83, 0xac, 0x65, 0x40, 0x9a, 0x87, 0xcb, 0xfa, 0xb7, 0x3b, 0x73, 0xe8, 0x2e, 0x49, 0x0e, 0x8e, 0x7d, 0x61, 0xd5, 0x31, 0xc8, 0xcc, 0x11, 0x1a, 0xe1, 0x04, 0x17, 0xaa, 0x37, 0x5f, 0x8d, 0xc0, 0x2f, 0xcd, 0xef, 0xbb, 0x19, 0x26, 0xa0, 0x8d, 0x23, 0x34, 0x6f, 0x01, 0xf6, 0xf8, 0xee, 0x5c, 0xbc, 0xa4, 0xac, 0x76, 0xec, 0x4d, 0x39, 0xd2, 0x80, 0x55, 0x62, 0xcc, 0xf1, 0x6e, 0x61, 0xe8, 0x61, 0x61, 0x6d, 0x03, 0x8d, 0x06, 0xc9, 0xf5, 0x9a, 0xcb, 0x09, 0x0b, 0xe7, 0x04, 0x1b, 0x37, 0xae, 0x41, 0x10, 0x36, 0xf0, 0xe3, 0x1f, 0x1f, 0x38, 0x2e, 0x68, 0x71, 0xf7, 0xae, 0x5d, 0xd8, 0xb7, 0x77, 0x3f, 0xb6, 0xdf, 0xfe, 0x2f, 0x38, 0x7a, 0x2c, 0xc6, 0xea, 0xd5, 0x33, 0x68, 0x55, 0xe4, 0x7f, 0xd3, 0x29, 0xcc, 0x59, 0x36, 0x6f, 0x5e, 0xc0, 0xc2, 0xda, 0xb6, 0x35, 0x26, 0xe9, 0x74, 0x04, 0xd6, 0x2e, 0xa4, 0xf0, 0x78, 0x61, 0xe7, 0xd8, 0x6c, 0x66, 0x90, 0x92, 0x22, 0x8a, 0x8e, 0x4d, 0x85, 0x28, 0x3c, 0xb8, 0x7b, 0x37, 0x3c, 0xee, 0x21, 0x08, 0x02, 0x5c, 0x75, 0xd5, 0x3b, 0x6c, 0xb6, 0xfe, 0xd2, 0x97, 0xfe, 0xd2, 0xd4, 0x50, 0xb3, 0x14, 0x19, 0x24, 0xa1, 0x79, 0xfb, 0x8a, 0x8e, 0x90, 0x66, 0x92, 0x54, 0xa2, 0x11, 0x7a, 0xf8, 0xf7, 0x3b, 0xee, 0x9a, 0x78, 0xdf, 0xcf, 0x3b, 0xeb, 0xf9, 0xd8, 0xf3, 0xd0, 0x83, 0xe8, 0xf5, 0x13, 0xf8, 0x1e, 0xc3, 0xc2, 0x5a, 0x5e, 0x5a, 0xfc, 0x26, 0xed, 0x7f, 0x5f, 0x7c, 0xf1, 0xdb, 0xb1, 0x75, 0xeb, 0x55, 0xa5, 0xc5, 0x93, 0xe4, 0x63, 0x4f, 0x3b, 0xbe, 0xbb, 0x13, 0xaf, 0x7f, 0xdd, 0xeb, 0xb1, 0x76, 0xed, 0xc2, 0x8a, 0xfd, 0xf3, 0xf9, 0xf9, 0xa7, 0x36, 0x40, 0x39, 0xf7, 0xbc, 0xf3, 0x70, 0xfd, 0xa7, 0xff, 0x31, 0xbf, 0x6f, 0x79, 0x72, 0x0e, 0x00, 0x2a, 0x03, 0xe4, 0x64, 0xe7, 0xdc, 0xcb, 0x49, 0xab, 0x86, 0x14, 0xe8, 0xaa, 0xe5, 0xe9, 0x6b, 0x30, 0x39, 0x1a, 0xf4, 0xf0, 0x23, 0x0f, 0xc3, 0xf7, 0x14, 0xa2, 0x68, 0x00, 0xdf, 0xc3, 0xc8, 0x84, 0x8a, 0x79, 0xc7, 0x7d, 0x8f, 0xa0, 0xdd, 0xf2, 0x90, 0x66, 0x29, 0x76, 0xed, 0xda, 0x09, 0xe0, 0x5d, 0x13, 0x1f, 0x27, 0x8e, 0x63, 0x70, 0x06, 0x34, 0x03, 0x1d, 0x88, 0x7a, 0xbd, 0x25, 0xf4, 0xba, 0x8e, 0x49, 0x4e, 0xe8, 0x8f, 0x25, 0xc5, 0xb9, 0x3d, 0xf4, 0x71, 0xfc, 0x20, 0x73, 0x3d, 0xaa, 0x48, 0xa8, 0xbb, 0x8e, 0xd7, 0xb5, 0xf4, 0xcc, 0xd6, 0x6a, 0x37, 0x6b, 0x03, 0xb6, 0x5b, 0xbc, 0x54, 0x89, 0xc2, 0x6e, 0x95, 0xea, 0xf1, 0x70, 0x04, 0x99, 0xac, 0xeb, 0xf9, 0x57, 0x25, 0x5d, 0xcd, 0xb5, 0x36, 0xd2, 0xde, 0x26, 0x40, 0x9a, 0xe2, 0xcc, 0xf6, 0xf0, 0x45, 0x59, 0x38, 0x4c, 0xf7, 0x9f, 0xb3, 0x42, 0x8d, 0x8e, 0xf8, 0x23, 0x2e, 0x6f, 0xe5, 0xa0, 0x4a, 0x2d, 0xc3, 0x3c, 0x4a, 0x62, 0x3b, 0x27, 0xef, 0x79, 0x7a, 0xe4, 0x34, 0x03, 0x56, 0x6c, 0xd9, 0x56, 0xcd, 0xc9, 0xdc, 0xeb, 0xaa, 0x3f, 0x03, 0x19, 0xb9, 0x76, 0xee, 0x35, 0x34, 0x09, 0x59, 0x15, 0xd9, 0x15, 0x99, 0x56, 0x4e, 0x0c, 0xc2, 0x42, 0x65, 0xd5, 0x20, 0x12, 0x9c, 0x98, 0x80, 0x95, 0xb3, 0x60, 0x5d, 0x68, 0x99, 0x80, 0xe6, 0x66, 0x2c, 0x79, 0x55, 0x08, 0xa2, 0x85, 0x0d, 0x4c, 0xf0, 0xa0, 0x04, 0x0a, 0xb2, 0x60, 0xb9, 0x2b, 0x7d, 0xb2, 0x0a, 0x7a, 0xf0, 0x3f, 0xce, 0xe7, 0x20, 0xab, 0x50, 0x57, 0x51, 0x05, 0xb2, 0x95, 0x85, 0x51, 0x08, 0xcb, 0x33, 0x5f, 0xe1, 0x8c, 0x50, 0x00, 0x4a, 0x69, 0xa6, 0x35, 0xf5, 0x56, 0x5e, 0xfc, 0x93, 0x24, 0x1a, 0x0b, 0xc7, 0xeb, 0x84, 0xc4, 0x83, 0x90, 0x0a, 0x42, 0x3a, 0x04, 0x87, 0x9c, 0x51, 0x29, 0x64, 0x86, 0x2c, 0xca, 0x59, 0xea, 0x79, 0x65, 0x6e, 0x20, 0x6f, 0x93, 0x8d, 0x0a, 0x52, 0xb6, 0xd6, 0x63, 0x9c, 0x83, 0x7b, 0x74, 0x04, 0xf2, 0x31, 0x1e, 0xc2, 0xfa, 0x33, 0x28, 0x80, 0x48, 0x28, 0x28, 0x44, 0x51, 0x52, 0xb9, 0xd9, 0xc6, 0x64, 0x20, 0x67, 0x41, 0x0e, 0x7a, 0xa5, 0x04, 0x82, 0x18, 0x48, 0x26, 0x13, 0x79, 0x85, 0x84, 0xb1, 0x0f, 0x3f, 0x21, 0x04, 0x3e, 0xa3, 0x90, 0x04, 0xe0, 0x13, 0x56, 0xbd, 0x9b, 0x36, 0x6d, 0x42, 0xbb, 0xe5, 0x61, 0xf5, 0xaa, 0x16, 0x5a, 0x4d, 0xaf, 0x26, 0xc3, 0xd7, 0x48, 0x87, 0x12, 0x12, 0x8d, 0x00, 0x68, 0xb7, 0x3c, 0xec, 0xdd, 0xff, 0x53, 0xdc, 0xb8, 0x6d, 0x1b, 0xde, 0x70, 0xd1, 0x45, 0xe8, 0x75, 0xbb, 0xd8, 0xbf, 0x7f, 0x3f, 0xf6, 0xed, 0xdd, 0x8f, 0xbd, 0x7b, 0xf7, 0xe2, 0xb1, 0x47, 0xef, 0x2f, 0x8d, 0xbe, 0x01, 0x40, 0xa7, 0xed, 0x21, 0x1a, 0x0e, 0xe0, 0x73, 0x51, 0x7a, 0x91, 0x8f, 0x1c, 0xce, 0xb0, 0x76, 0x61, 0x32, 0xcf, 0x6b, 0x91, 0x0e, 0x71, 0xe8, 0x49, 0x82, 0x46, 0x33, 0x2b, 0xb5, 0x62, 0x92, 0xac, 0xfc, 0xa2, 0x35, 0x02, 0x86, 0x46, 0x5e, 0xa5, 0x3f, 0xf4, 0xe3, 0x1f, 0x4d, 0x14, 0xd0, 0xb7, 0x7e, 0xe6, 0x5a, 0x6c, 0x38, 0x31, 0xc4, 0xb0, 0xdf, 0xc5, 0x85, 0xaf, 0x79, 0x3b, 0xbe, 0xf9, 0x8d, 0x7f, 0x84, 0xc7, 0x66, 0xf1, 0xdb, 0xbf, 0xfd, 0xfa, 0xa9, 0x03, 0x7a, 0x9c, 0x64, 0x60, 0xcc, 0x2b, 0x3d, 0x9b, 0x2e, 0x74, 0xd7, 0x6c, 0xf8, 0x58, 0x58, 0xd3, 0xc2, 0xf0, 0x29, 0x3c, 0x43, 0x7b, 0xdd, 0x2e, 0x0e, 0x1d, 0x3a, 0x58, 0xaa, 0x8e, 0x9b, 0xcd, 0x36, 0x3c, 0xa6, 0x2b, 0x3a, 0x29, 0x04, 0x44, 0x2a, 0xa0, 0xf2, 0xfe, 0x2b, 0x55, 0xc4, 0x5a, 0xf7, 0x1e, 0xef, 0x76, 0xc6, 0x99, 0xcf, 0x46, 0xc3, 0xf7, 0x4a, 0x09, 0xc7, 0xe1, 0x23, 0x47, 0x71, 0xc5, 0xe5, 0x1f, 0x38, 0xee, 0xea, 0xf3, 0xdc, 0xf3, 0xce, 0xc3, 0xa7, 0xaf, 0xbd, 0x16, 0xcd, 0x76, 0xbb, 0x36, 0xf9, 0xfb, 0xf4, 0xb5, 0xd7, 0xea, 0x00, 0x93, 0x0e, 0xa0, 0x24, 0xb3, 0x36, 0xc9, 0x06, 0xcd, 0xcb, 0x26, 0xb4, 0x9c, 0xdd, 0xbf, 0x7f, 0x3f, 0x18, 0x05, 0xa4, 0x48, 0x91, 0x26, 0x72, 0xa4, 0x5f, 0x39, 0x8d, 0xf1, 0xed, 0xdd, 0x3b, 0xef, 0xc6, 0x9a, 0x55, 0x21, 0x7c, 0x9f, 0xc2, 0xe7, 0xf5, 0x50, 0x72, 0xb1, 0x7e, 0x25, 0x18, 0x46, 0x12, 0x7b, 0xf6, 0x4e, 0xd7, 0x96, 0x09, 0x7c, 0x0f, 0xa1, 0xcf, 0x46, 0xde, 0xed, 0x5f, 0x38, 0xff, 0x37, 0x26, 0xda, 0xcf, 0x6d, 0xb7, 0x7e, 0xb6, 0x5e, 0xb9, 0x93, 0x8e, 0x0a, 0x6b, 0x95, 0xec, 0xa1, 0xf9, 0xca, 0xa4, 0xb1, 0x41, 0xb7, 0x3c, 0x36, 0xe5, 0x3b, 0x55, 0xac, 0x29, 0x8a, 0xea, 0x98, 0xef, 0xe6, 0x5c, 0x52, 0x67, 0x6c, 0x58, 0x0b, 0xa5, 0xa8, 0x7c, 0x7d, 0xd7, 0x02, 0x35, 0x3a, 0x02, 0xe9, 0x2f, 0xd3, 0xcf, 0x16, 0x22, 0x83, 0xc8, 0x3d, 0xdd, 0x5b, 0xad, 0x56, 0xb9, 0x58, 0x13, 0x12, 0x69, 0x56, 0x48, 0xc0, 0xa6, 0x69, 0x61, 0xc5, 0xea, 0x71, 0x86, 0x30, 0xf0, 0x2d, 0xe2, 0x4b, 0x08, 0x41, 0x14, 0x67, 0x25, 0xff, 0x10, 0xd7, 0x43, 0x44, 0x2a, 0x05, 0xe4, 0x52, 0xc7, 0x66, 0x36, 0xde, 0x1c, 0x27, 0x8a, 0x22, 0x6b, 0x7e, 0x54, 0x4d, 0x38, 0xdc, 0x6d, 0xd5, 0xaa, 0x55, 0x25, 0x7d, 0x00, 0x73, 0x0c, 0x93, 0x14, 0x37, 0x72, 0xb7, 0x37, 0xd7, 0x1f, 0xc1, 0x4d, 0x38, 0xf4, 0x1c, 0xbb, 0x2b, 0xa1, 0xae, 0xdb, 0x12, 0x59, 0xaa, 0x13, 0xea, 0x19, 0x34, 0x6d, 0x02, 0x62, 0xd6, 0x10, 0x5e, 0x85, 0xa1, 0x4a, 0x99, 0x1a, 0xea, 0xab, 0x67, 0x0b, 0x6f, 0x28, 0x52, 0x4b, 0x56, 0x33, 0x0b, 0x93, 0x81, 0x1b, 0xc6, 0x05, 0x74, 0x21, 0x32, 0x98, 0x91, 0x01, 0x92, 0x13, 0xd8, 0x4a, 0x0f, 0x5c, 0x6e, 0x04, 0xc0, 0x39, 0x2f, 0xf5, 0xf8, 0xcd, 0x03, 0xc8, 0x9f, 0x42, 0xd8, 0x82, 0x07, 0x41, 0xed, 0x03, 0x69, 0x21, 0x15, 0x47, 0x6c, 0xc2, 0x64, 0x44, 0xae, 0x76, 0xb2, 0xd1, 0xb2, 0x57, 0xa6, 0x55, 0x20, 0xa4, 0x75, 0xbf, 0xd1, 0x73, 0x94, 0x14, 0xc8, 0x35, 0x78, 0x93, 0x44, 0x94, 0x6e, 0x8c, 0xeb, 0x53, 0x5b, 0xd5, 0x14, 0xb6, 0x50, 0x71, 0xe8, 0xd9, 0xec, 0xb2, 0xce, 0x62, 0xd6, 0x68, 0x19, 0x1b, 0x88, 0xdf, 0x98, 0x09, 0x88, 0xfc, 0x7a, 0xa5, 0x59, 0x5a, 0x1b, 0xc8, 0xeb, 0xcc, 0x68, 0x26, 0x65, 0x23, 0x9f, 0xb2, 0x71, 0x01, 0xed, 0x96, 0x9f, 0x3b, 0x6c, 0xad, 0x80, 0x00, 0x08, 0x89, 0x55, 0xf3, 0x1e, 0x96, 0x97, 0x19, 0x3e, 0x76, 0xcd, 0x35, 0x23, 0xca, 0x59, 0xe3, 0xe0, 0xfc, 0x46, 0xc3, 0x87, 0xcc, 0x9d, 0x96, 0xcc, 0x79, 0xfe, 0xb7, 0x5f, 0x9e, 0x4e, 0x4c, 0xa5, 0xdb, 0x65, 0xb8, 0xe0, 0x82, 0xff, 0x86, 0xfb, 0xee, 0xfd, 0xd2, 0x48, 0x55, 0xe0, 0x5e, 0xd7, 0x66, 0xd3, 0xc3, 0x89, 0x27, 0xe8, 0xfe, 0xf4, 0xa4, 0x7d, 0x69, 0xca, 0x28, 0x3c, 0x3f, 0x40, 0xb7, 0x97, 0x62, 0xe7, 0x3d, 0x3b, 0x20, 0x95, 0x87, 0x5f, 0xfb, 0xcd, 0xdf, 0x99, 0x5a, 0x5c, 0xe7, 0xd5, 0x17, 0x5e, 0x88, 0x0d, 0x1b, 0x36, 0xe0, 0xf6, 0xff, 0x73, 0x17, 0x8e, 0x1d, 0xdc, 0x59, 0x4b, 0xac, 0xd4, 0xf7, 0x4d, 0xe8, 0x24, 0x70, 0x85, 0xed, 0xd0, 0xa1, 0x83, 0xd8, 0xbd, 0xeb, 0x07, 0xa5, 0x73, 0xd9, 0x7c, 0xea, 0x26, 0x50, 0x22, 0xb1, 0x66, 0x3e, 0xc8, 0x2b, 0xc6, 0xa2, 0xd5, 0xa3, 0x35, 0x18, 0x26, 0x0b, 0x67, 0xeb, 0xd6, 0x2d, 0x58, 0x31, 0x1a, 0x73, 0x7e, 0xcd, 0x46, 0x6b, 0xe2, 0xb1, 0xbd, 0x35, 0x0b, 0x27, 0x60, 0x30, 0xa8, 0x77, 0x9a, 0x7b, 0xc5, 0x2b, 0xcf, 0xc7, 0xfb, 0xfe, 0xf0, 0x77, 0x10, 0xfa, 0x04, 0xdc, 0x9d, 0x47, 0x26, 0x79, 0xc2, 0x37, 0xc5, 0xf8, 0xe5, 0xec, 0x8c, 0x8f, 0x46, 0xc8, 0x6c, 0xbf, 0x55, 0x2b, 0xaf, 0xe9, 0xc4, 0x7a, 0x3a, 0x23, 0x20, 0x05, 0x45, 0x04, 0x14, 0x24, 0x92, 0x44, 0xd5, 0x06, 0x74, 0x73, 0xde, 0x33, 0x33, 0x2d, 0x80, 0x70, 0xa4, 0x69, 0x77, 0xe2, 0xe9, 0x8a, 0xef, 0xdd, 0x75, 0x0f, 0x4e, 0x5c, 0x68, 0x94, 0xa0, 0x58, 0xb3, 0x56, 0x4c, 0x4a, 0xb2, 0xbb, 0x73, 0xc7, 0x97, 0x46, 0x2a, 0x61, 0x13, 0x20, 0xaa, 0x3d, 0xf0, 0x2a, 0x84, 0x3c, 0xce, 0xe9, 0x51, 0x93, 0xd6, 0x56, 0x97, 0xd0, 0x45, 0xed, 0xa7, 0x1e, 0x17, 0x72, 0xb1, 0x0e, 0xcb, 0xbe, 0x6e, 0x12, 0x4a, 0x12, 0x59, 0x4a, 0xc0, 0xab, 0x6b, 0x8c, 0x0e, 0xa4, 0xc4, 0x8e, 0x9f, 0x95, 0xcf, 0x41, 0x8f, 0x85, 0x95, 0x67, 0xf0, 0xcb, 0xc4, 0x3e, 0x57, 0x07, 0x24, 0x8f, 0x28, 0xb9, 0xbc, 0xb7, 0x5e, 0x37, 0x3d, 0x2f, 0xcc, 0x3d, 0xd1, 0x43, 0x7b, 0xee, 0x51, 0xa4, 0xab, 0x5f, 0x4d, 0xc2, 0x13, 0xa5, 0x31, 0xec, 0x82, 0xfb, 0x55, 0x6f, 0xea, 0x52, 0x8d, 0x81, 0x83, 0xc1, 0xc0, 0xc6, 0x14, 0xf3, 0x7f, 0x97, 0x88, 0x98, 0x8a, 0xa2, 0x2a, 0xaf, 0x16, 0xb6, 0xda, 0x8a, 0x36, 0xc9, 0xb9, 0x2f, 0xca, 0xb6, 0x20, 0xdc, 0x63, 0x2c, 0x2d, 0x2d, 0x8d, 0x24, 0x91, 0xdc, 0x54, 0x9d, 0x3a, 0x78, 0x16, 0xd6, 0x9f, 0x1a, 0x12, 0xd4, 0x59, 0xac, 0x0e, 0xee, 0xf9, 0x85, 0xcf, 0x2b, 0x58, 0xa0, 0x9e, 0x8e, 0x5f, 0x15, 0x7a, 0xa9, 0x66, 0x68, 0x6e, 0x96, 0x58, 0xbd, 0x51, 0xd5, 0x2c, 0x90, 0x71, 0x3d, 0x7a, 0x60, 0x14, 0x79, 0x0c, 0x64, 0xa2, 0x54, 0x2e, 0xbd, 0x27, 0xc5, 0xca, 0xa4, 0x86, 0x9a, 0x51, 0x81, 0x51, 0x88, 0xc8, 0x15, 0x85, 0x81, 0xe5, 0x05, 0x48, 0x99, 0x21, 0x0c, 0xb5, 0xa8, 0x85, 0xca, 0x35, 0xde, 0x61, 0x32, 0xd9, 0xbc, 0x97, 0x9d, 0xe5, 0x48, 0x41, 0x9a, 0x8a, 0x91, 0x84, 0x85, 0x10, 0x60, 0x6e, 0x6e, 0x66, 0xac, 0x70, 0x3f, 0x00, 0x64, 0x52, 0x94, 0x18, 0xf8, 0xee, 0x43, 0x5d, 0x0a, 0x4a, 0x4e, 0x40, 0x77, 0x5f, 0x88, 0x99, 0x4e, 0xab, 0xb6, 0x47, 0x24, 0x5d, 0x65, 0x28, 0xa5, 0x2c, 0x79, 0x66, 0x92, 0xed, 0xb5, 0xbf, 0x7a, 0x09, 0xbe, 0xf5, 0x8d, 0x7f, 0x18, 0x79, 0x91, 0xdd, 0x6b, 0xba, 0x76, 0xcd, 0xaa, 0xbc, 0x35, 0x31, 0xc4, 0x13, 0x3f, 0x1d, 0x60, 0x30, 0x7c, 0xea, 0x05, 0x52, 0xbb, 0x0b, 0x71, 0xac, 0x3f, 0xa1, 0x89, 0xf9, 0xf9, 0x26, 0x78, 0x0e, 0x93, 0xbf, 0xe5, 0x77, 0xae, 0x9a, 0x5a, 0x9a, 0xf6, 0x65, 0x2f, 0xd5, 0xe6, 0x1a, 0x3e, 0xf7, 0x4a, 0x2f, 0xb6, 0x81, 0x12, 0x95, 0xd4, 0x99, 0xbd, 0x94, 0x12, 0x3e, 0x07, 0x1a, 0x01, 0x9b, 0xb8, 0x2f, 0xfd, 0xeb, 0xaf, 0x7b, 0x03, 0xee, 0xb8, 0xf3, 0x36, 0xf8, 0x2c, 0xc2, 0x0f, 0x76, 0xdd, 0x8b, 0x0f, 0x5d, 0xf9, 0xd1, 0xa7, 0x25, 0x81, 0xdb, 0xee, 0x74, 0x70, 0xee, 0x79, 0xe7, 0xe1, 0xdc, 0xf3, 0xce, 0x43, 0xaf, 0xdb, 0xc5, 0x03, 0xf7, 0xdf, 0x8f, 0xad, 0x5b, 0x3f, 0x8e, 0x99, 0x66, 0x5c, 0xd2, 0x7c, 0x60, 0x79, 0xff, 0x7b, 0xa5, 0x16, 0x41, 0x9d, 0x14, 0xec, 0xa6, 0x4d, 0x9b, 0xd0, 0x69, 0x17, 0x08, 0x4b, 0x15, 0xa9, 0x82, 0x9a, 0x5c, 0x69, 0x68, 0x38, 0x88, 0xe0, 0x7b, 0xc5, 0xfb, 0x1b, 0x06, 0x93, 0xcd, 0x57, 0xf7, 0xba, 0x5d, 0xcc, 0xcf, 0xcf, 0x8e, 0x0d, 0xe8, 0x9b, 0x4f, 0x3d, 0x0d, 0x7f, 0xf9, 0xd7, 0xff, 0x88, 0x0f, 0x5d, 0xf1, 0x0e, 0xf8, 0x5e, 0xb5, 0x55, 0xa5, 0x20, 0xa7, 0x18, 0x5b, 0xa3, 0x10, 0x90, 0x99, 0xd2, 0xd3, 0x39, 0x55, 0x36, 0x71, 0x36, 0xf9, 0x35, 0xa0, 0x84, 0xc0, 0xa3, 0x04, 0x01, 0x67, 0x56, 0x82, 0xb9, 0x1a, 0x44, 0x6c, 0xcb, 0x24, 0x49, 0x40, 0x54, 0x0a, 0x40, 0x4e, 0x4c, 0x1e, 0xd4, 0x5c, 0x0a, 0x96, 0x4f, 0x41, 0x68, 0x55, 0x37, 0x29, 0x24, 0x52, 0x99, 0xd9, 0xe4, 0xe0, 0xca, 0x0f, 0x5d, 0x85, 0x61, 0x7c, 0x18, 0x00, 0xb0, 0xb0, 0x7a, 0xfd, 0x58, 0x91, 0xa7, 0x97, 0x9e, 0xfb, 0x7a, 0x7c, 0x6f, 0xe7, 0x4d, 0xc5, 0x1a, 0x54, 0x09, 0x22, 0x3a, 0xd1, 0x63, 0x23, 0xeb, 0xb7, 0x1e, 0x9d, 0x54, 0xce, 0x88, 0x2c, 0x29, 0x8d, 0xc9, 0x2e, 0x1e, 0x3b, 0x66, 0x2b, 0x74, 0xce, 0x39, 0xfc, 0xdc, 0xf4, 0xc6, 0x54, 0xc0, 0xc6, 0x77, 0x7d, 0x74, 0x6d, 0xcc, 0x03, 0x3a, 0x44, 0xe9, 0xba, 0x55, 0xe5, 0xc3, 0x87, 0xc3, 0x61, 0x5e, 0x50, 0x09, 0xdb, 0xb7, 0x77, 0xaf, 0x6f, 0x34, 0x4c, 0x34, 0x3b, 0x8a, 0x6a, 0x39, 0x5c, 0xa5, 0x00, 0x30, 0xe4, 0xb5, 0xbd, 0x42, 0x18, 0x7a, 0x23, 0x85, 0xa8, 0x3b, 0x7e, 0x37, 0x4c, 0x0b, 0xb9, 0x59, 0x4a, 0x08, 0x02, 0xdf, 0x83, 0xc7, 0x19, 0x5a, 0x4d, 0x4d, 0x26, 0xee, 0xf7, 0xb4, 0x09, 0x8e, 0x36, 0xa0, 0x29, 0x6c, 0x60, 0xc3, 0xdc, 0x44, 0x6c, 0x18, 0x65, 0x63, 0xdd, 0x36, 0x01, 0xd8, 0x4a, 0xbe, 0x6a, 0x92, 0x65, 0x24, 0x5e, 0x25, 0x48, 0xad, 0x17, 0x8a, 0x8b, 0x6e, 0x08, 0x51, 0xa0, 0x76, 0x46, 0xab, 0x84, 0x51, 0x3d, 0xaa, 0x96, 0x66, 0x71, 0xe5, 0xdd, 0x56, 0xe0, 0x86, 0x89, 0x5e, 0x07, 0xbd, 0x98, 0x80, 0x5b, 0xed, 0x87, 0xd8, 0x1e, 0x79, 0x65, 0x2c, 0xab, 0x5a, 0x41, 0x27, 0x49, 0x52, 0xca, 0x94, 0x46, 0xb2, 0x34, 0x56, 0x85, 0xd9, 0x8b, 0xff, 0x57, 0x99, 0x93, 0x06, 0x96, 0x31, 0xc1, 0x8f, 0x52, 0x8a, 0x38, 0x8d, 0x47, 0x82, 0xb9, 0xfb, 0x7d, 0x94, 0x26, 0x63, 0x13, 0x0b, 0xf3, 0xc0, 0xba, 0x64, 0x0c, 0x03, 0x89, 0xb8, 0x52, 0x81, 0x26, 0x80, 0x1b, 0x51, 0x7f, 0x37, 0xa8, 0x25, 0x59, 0x0c, 0x95, 0xfb, 0x63, 0x9b, 0x17, 0xc3, 0x67, 0x05, 0xec, 0xb4, 0xb8, 0xb8, 0x58, 0xcb, 0xf2, 0x24, 0x28, 0x20, 0xad, 0xe2, 0x81, 0x87, 0x25, 0xdd, 0x99, 0x6b, 0xd5, 0xef, 0x0f, 0x6c, 0x32, 0x65, 0x58, 0xee, 0x8c, 0x31, 0x0b, 0xc1, 0xbb, 0x6e, 0x78, 0x75, 0x93, 0x0a, 0x85, 0x34, 0xe1, 0xe4, 0x0b, 0xd7, 0xb9, 0xe7, 0x9d, 0x87, 0xad, 0x5b, 0x3f, 0x8e, 0x93, 0x37, 0xd2, 0x91, 0x04, 0xad, 0xa8, 0x0c, 0x0f, 0xe9, 0xf3, 0x1c, 0xa4, 0x60, 0x54, 0x07, 0x9f, 0x3a, 0xf6, 0x34, 0xa5, 0x40, 0xe0, 0x17, 0xe4, 0xbf, 0x30, 0x24, 0x90, 0x32, 0x86, 0xc8, 0x3c, 0x28, 0x49, 0xd1, 0xed, 0x7a, 0x58, 0xb7, 0x6e, 0x01, 0x07, 0x0e, 0x1c, 0xc4, 0x43, 0x3f, 0xfe, 0xd1, 0xc4, 0x55, 0xfa, 0x8b, 0xce, 0x39, 0x07, 0x0f, 0xee, 0xde, 0x8d, 0x28, 0x4e, 0xe0, 0x7b, 0x7c, 0xc4, 0xf6, 0xd0, 0x45, 0x47, 0x38, 0x03, 0xd6, 0xac, 0x0e, 0x26, 0xbe, 0x1e, 0xbf, 0xf1, 0x5b, 0xbf, 0x85, 0x3b, 0xee, 0xbc, 0x0d, 0x9d, 0xb6, 0x8f, 0x2b, 0xfe, 0xf4, 0xef, 0x6d, 0x00, 0x35, 0x7d, 0xda, 0x69, 0xc5, 0x43, 0x4c, 0xa0, 0x36, 0xc1, 0xfd, 0xc6, 0x6d, 0xdb, 0x70, 0xd7, 0x1d, 0x5f, 0xb0, 0xcf, 0x58, 0x18, 0x50, 0xac, 0x5d, 0x3d, 0x5d, 0xc2, 0x10, 0xa5, 0x0c, 0x4d, 0x95, 0xd6, 0xf7, 0xe1, 0xc4, 0xe4, 0xd5, 0x29, 0xe7, 0x0c, 0xad, 0x56, 0xd1, 0xf7, 0x8c, 0x06, 0xfe, 0x44, 0xbf, 0xff, 0x17, 0x7f, 0x79, 0x25, 0x76, 0xef, 0xfa, 0x11, 0x3e, 0x7c, 0xe5, 0x95, 0xe3, 0xf9, 0x10, 0xa7, 0x9e, 0x86, 0x2b, 0x3e, 0xf4, 0xf7, 0xf8, 0xf0, 0x95, 0x97, 0xa3, 0xdd, 0x4c, 0xf3, 0x67, 0x3b, 0x7f, 0x7e, 0x27, 0x6f, 0x79, 0x83, 0x7b, 0x04, 0x9e, 0x4f, 0x2c, 0x02, 0xa8, 0xdf, 0x33, 0x02, 0x29, 0x09, 0x18, 0x6f, 0x4d, 0x7c, 0xaf, 0x1a, 0x4d, 0x1f, 0x33, 0xb3, 0x6d, 0x84, 0x01, 0x03, 0xcb, 0xbd, 0x26, 0xdc, 0xa0, 0xe4, 0x42, 0xba, 0x94, 0x52, 0x2c, 0x77, 0x07, 0x58, 0xea, 0x1d, 0xc4, 0xe3, 0x8f, 0x3f, 0x3e, 0x19, 0x29, 0x95, 0xeb, 0x79, 0xec, 0x76, 0xd3, 0x2f, 0xcf, 0x4f, 0x3b, 0x28, 0xc5, 0x19, 0xa7, 0x6f, 0xc4, 0xe7, 0x6e, 0xd8, 0x01, 0x00, 0x78, 0xef, 0x7b, 0x5e, 0xbd, 0x22, 0x1a, 0xb4, 0x73, 0xc7, 0x17, 0x6b, 0x2a, 0xe0, 0x70, 0x84, 0x85, 0x5d, 0x75, 0xc8, 0x5c, 0x11, 0xfd, 0x98, 0xed, 0x54, 0x38, 0x09, 0x09, 0x92, 0x44, 0x8e, 0x90, 0xdb, 0xdc, 0xa0, 0x53, 0x5a, 0x07, 0x19, 0x2d, 0xf5, 0xc0, 0x99, 0xa3, 0xfc, 0xa9, 0xa7, 0x74, 0x02, 0x6b, 0x65, 0xaa, 0x91, 0x4f, 0x85, 0x24, 0x29, 0xce, 0x2f, 0x0c, 0xda, 0x25, 0x44, 0xb8, 0xea, 0xd5, 0xd1, 0xed, 0x15, 0x53, 0x44, 0x2e, 0x3f, 0x85, 0xe7, 0x92, 0xe3, 0x69, 0x94, 0xe5, 0xde, 0xea, 0x49, 0xc9, 0xcb, 0xc3, 0xb8, 0x7e, 0x12, 0xd0, 0xfc, 0xf8, 0x3e, 0xe2, 0x38, 0xd6, 0xa3, 0xc3, 0x59, 0x86, 0xe1, 0xb0, 0x8f, 0xe1, 0x10, 0x60, 0xbc, 0x59, 0xfa, 0x5c, 0x55, 0x36, 0x7b, 0xbb, 0xdd, 0xb6, 0xe7, 0x6f, 0x9c, 0xe4, 0xdc, 0x4a, 0x3e, 0x6c, 0xb6, 0x6a, 0xaf, 0x91, 0xbb, 0x7e, 0x13, 0x52, 0x48, 0xd7, 0xba, 0x85, 0x2a, 0xa5, 0x14, 0x41, 0xe8, 0x8d, 0x20, 0x1b, 0xbc, 0x4a, 0xe6, 0x70, 0x2f, 0x3a, 0xf2, 0x1e, 0xcb, 0x38, 0xf1, 0x02, 0xb3, 0x70, 0xba, 0x07, 0xab, 0x9e, 0x90, 0x1b, 0xd0, 0xab, 0xd0, 0x44, 0xe2, 0x48, 0xbb, 0x56, 0xb3, 0x43, 0xc3, 0x12, 0x34, 0x50, 0x88, 0x9b, 0xb9, 0x55, 0x2f, 0xc2, 0xb8, 0xef, 0x99, 0x33, 0x56, 0x57, 0x27, 0xec, 0x42, 0x69, 0x31, 0xca, 0x62, 0xfa, 0xdd, 0xd5, 0xf1, 0x16, 0xf7, 0xda, 0x30, 0x93, 0xd0, 0xe4, 0x01, 0x35, 0x68, 0x37, 0x4a, 0xfd, 0xf2, 0x2c, 0xcb, 0x10, 0xc7, 0xb1, 0x3d, 0x5f, 0x77, 0xe6, 0xbc, 0x4e, 0xc0, 0x66, 0x18, 0x45, 0xb5, 0xbd, 0x2d, 0xf3, 0xef, 0x9d, 0x4e, 0xa7, 0x34, 0xb6, 0xc6, 0x8d, 0x86, 0x7c, 0x7e, 0xfc, 0x63, 0xc7, 0x16, 0xcb, 0x9f, 0xb7, 0x02, 0x31, 0x55, 0xf5, 0x8b, 0x27, 0xdd, 0x2e, 0xbe, 0xf8, 0xed, 0xd8, 0x7e, 0xfb, 0xb5, 0x15, 0x94, 0x41, 0xda, 0x04, 0xc4, 0xcf, 0xfd, 0xdc, 0x19, 0x63, 0x38, 0x69, 0x23, 0x05, 0xe3, 0x43, 0xc4, 0xb1, 0xc8, 0xd1, 0x1b, 0x5d, 0x66, 0x10, 0x00, 0x8d, 0x86, 0x87, 0xf5, 0x27, 0xb6, 0x11, 0x06, 0x34, 0x27, 0x9f, 0x00, 0x81, 0x4f, 0x30, 0x1c, 0xf6, 0x35, 0x1c, 0xdc, 0x3a, 0x13, 0x3b, 0xb6, 0x6f, 0xc7, 0x17, 0x3e, 0xff, 0x51, 0xfc, 0xd7, 0x97, 0xfd, 0xe6, 0xc4, 0xe7, 0x79, 0xf6, 0x96, 0x2d, 0x78, 0x70, 0xf7, 0x6e, 0xbd, 0x48, 0x57, 0xf4, 0xf8, 0xdd, 0x45, 0xca, 0x26, 0x87, 0xc4, 0x9f, 0x2a, 0x40, 0xea, 0xc0, 0xfe, 0x9e, 0x52, 0x35, 0x6c, 0xb8, 0x02, 0xaf, 0x79, 0xed, 0x6b, 0xa6, 0xba, 0xc6, 0xd7, 0x7e, 0xe2, 0x33, 0xf8, 0x83, 0x3f, 0xf8, 0x5d, 0xbb, 0xff, 0x37, 0x5c, 0x74, 0x11, 0x5e, 0xfc, 0x92, 0x17, 0xe3, 0x6f, 0x3f, 0xf2, 0x47, 0xc5, 0x22, 0x43, 0xd5, 0x54, 0xe8, 0xc5, 0x96, 0x2d, 0xe7, 0xe0, 0x91, 0xbd, 0xdf, 0x76, 0xc6, 0x35, 0x8b, 0xc0, 0xe6, 0x09, 0x3a, 0x45, 0x40, 0xf7, 0x6c, 0x62, 0x2d, 0xa5, 0x44, 0x34, 0xf4, 0xf1, 0xb3, 0xd8, 0x36, 0x9f, 0x7a, 0x1a, 0xae, 0xfe, 0x9b, 0x4f, 0xe0, 0xdf, 0x6e, 0xbb, 0x1d, 0x3b, 0xef, 0xd9, 0x81, 0x68, 0xf9, 0x11, 0x28, 0x6d, 0x30, 0x39, 0xf1, 0xbe, 0x56, 0xcd, 0xcd, 0xa1, 0xd3, 0xf6, 0x6b, 0xfd, 0x26, 0x96, 0x7b, 0x93, 0x25, 0x35, 0xad, 0x66, 0x03, 0xeb, 0xd6, 0x34, 0xd1, 0x0c, 0x0c, 0x84, 0x8f, 0x52, 0x30, 0x71, 0xc7, 0x74, 0xcd, 0xd8, 0x6d, 0x96, 0x09, 0xcc, 0xcd, 0xf8, 0x18, 0xf4, 0x7a, 0xc7, 0x7d, 0x9c, 0xdd, 0xbb, 0x76, 0xc1, 0xe3, 0x14, 0x59, 0x9a, 0x20, 0x8e, 0xcb, 0xa6, 0x32, 0x69, 0xa6, 0x6c, 0xb5, 0xff, 0x86, 0x8b, 0x2e, 0xc2, 0x59, 0x67, 0x9f, 0x8d, 0x07, 0x77, 0xef, 0x5e, 0x31, 0x09, 0x6e, 0x77, 0x3a, 0xa5, 0x0a, 0xd0, 0xbc, 0x0b, 0x46, 0x49, 0x72, 0x1c, 0x71, 0x6e, 0x25, 0xb8, 0x5d, 0x2b, 0x59, 0x0e, 0xca, 0x5e, 0xea, 0xb9, 0xc2, 0x9b, 0x59, 0xcf, 0xaa, 0x15, 0x7a, 0xd5, 0xac, 0xab, 0xdd, 0x6e, 0x97, 0x64, 0xb2, 0xdd, 0x64, 0x48, 0x17, 0x34, 0x5d, 0x64, 0xc6, 0xec, 0x45, 0xe5, 0xa3, 0x93, 0xb2, 0x18, 0x51, 0xeb, 0xc6, 0xcb, 0xa5, 0xe3, 0x73, 0xce, 0x41, 0x9d, 0x0a, 0x38, 0x8e, 0x53, 0xcb, 0xf5, 0x49, 0x45, 0x82, 0xa4, 0x92, 0xe0, 0xb7, 0x3a, 0x33, 0x50, 0xb9, 0x4a, 0x9e, 0x49, 0x1a, 0x28, 0xa5, 0xc8, 0x12, 0x6d, 0x57, 0x4a, 0xe0, 0xa1, 0x11, 0xf8, 0xe8, 0xb4, 0x9a, 0x56, 0x19, 0xae, 0xdf, 0xef, 0x63, 0x38, 0x1c, 0x22, 0x4d, 0x53, 0x4b, 0x78, 0x76, 0xe3, 0x92, 0x1b, 0xd0, 0xab, 0xfe, 0x1c, 0xd5, 0xb6, 0xcc, 0x60, 0x30, 0xa8, 0x6d, 0x93, 0x56, 0x31, 0xa6, 0x6a, 0xdc, 0x35, 0xf1, 0x40, 0x64, 0xe5, 0x71, 0x3d, 0x00, 0xe0, 0x46, 0xcd, 0xa6, 0x5a, 0xfa, 0x13, 0xa2, 0xed, 0xf9, 0xdc, 0xfe, 0xc8, 0xc8, 0xf0, 0x3b, 0x30, 0x76, 0x6c, 0xaa, 0xca, 0xe8, 0xab, 0xf6, 0x6f, 0xf4, 0xc3, 0x19, 0x8f, 0xed, 0xfb, 0xea, 0x85, 0x43, 0x21, 0x4d, 0xa5, 0x03, 0x39, 0xd0, 0xd2, 0xbe, 0x58, 0x2e, 0xc3, 0x59, 0x0d, 0xda, 0xf6, 0x21, 0x72, 0xe6, 0x19, 0xeb, 0x84, 0x05, 0xd2, 0x34, 0xb5, 0x0f, 0xb8, 0xe9, 0x77, 0xbb, 0x7e, 0xcf, 0x55, 0xe8, 0x80, 0xe7, 0x81, 0xd4, 0x04, 0x54, 0x99, 0xaa, 0x4a, 0x0b, 0x41, 0xda, 0x7e, 0x67, 0x9d, 0xdb, 0x5a, 0x15, 0xf2, 0xa7, 0x15, 0x37, 0x9f, 0xea, 0xf5, 0x37, 0x2c, 0x4e, 0x73, 0x03, 0x8d, 0xdb, 0x9b, 0xd1, 0x76, 0xf7, 0x3d, 0xcf, 0x8e, 0xd3, 0x55, 0x55, 0x86, 0x74, 0x8f, 0xc8, 0xb3, 0x84, 0xc6, 0x69, 0xb6, 0x73, 0xcf, 0x3b, 0x0f, 0x5f, 0xff, 0xd6, 0x2d, 0x90, 0xc3, 0x1f, 0x8d, 0x64, 0xa0, 0x96, 0xdb, 0xa0, 0x24, 0x14, 0x24, 0xda, 0x0d, 0x8a, 0x53, 0x36, 0x34, 0xa0, 0x50, 0x9c, 0x2f, 0xac, 0x89, 0x0e, 0x41, 0x10, 0x10, 0x6d, 0xdf, 0xc8, 0x89, 0xb5, 0xa0, 0x6d, 0x35, 0xb4, 0x36, 0x78, 0x26, 0xf6, 0xe3, 0x0b, 0x37, 0xfc, 0x35, 0x7e, 0xf2, 0x44, 0x7f, 0xe2, 0x73, 0x74, 0xf5, 0xc1, 0x09, 0x74, 0xb2, 0xe3, 0x0a, 0xeb, 0xd4, 0x5d, 0xfb, 0x24, 0xce, 0x30, 0xbb, 0x6a, 0xcd, 0x54, 0xd0, 0x7e, 0x75, 0xe1, 0x3c, 0x7b, 0xcb, 0x96, 0xa7, 0x05, 0xbd, 0xd7, 0x19, 0x78, 0x6c, 0x3e, 0xf5, 0x34, 0xbc, 0xe5, 0x77, 0xff, 0x0c, 0x5f, 0xfe, 0xfc, 0xd5, 0x1a, 0x05, 0x18, 0xa4, 0x53, 0xed, 0xfb, 0x95, 0xaf, 0x3a, 0x1f, 0x5f, 0xdc, 0x76, 0xe7, 0xc8, 0xbb, 0xa5, 0xaf, 0xc7, 0x14, 0xf3, 0xfe, 0x69, 0x0a, 0xc9, 0x61, 0x9b, 0x6e, 0x49, 0x32, 0x9d, 0xa4, 0xf0, 0xf1, 0x5c, 0xaf, 0x76, 0xa7, 0x83, 0xd7, 0xbc, 0xf6, 0x35, 0x36, 0x51, 0xda, 0xb7, 0x77, 0x0f, 0x3e, 0x7c, 0xe5, 0xe5, 0xc7, 0x0d, 0xed, 0x7f, 0xe1, 0x86, 0x1b, 0xf0, 0xc5, 0x2f, 0xdf, 0x88, 0xd3, 0x37, 0xcd, 0x43, 0x4a, 0x89, 0x73, 0xce, 0xfd, 0x2d, 0xdc, 0x75, 0xc7, 0x8d, 0xc7, 0xed, 0xf5, 0x30, 0xee, 0x9c, 0xfe, 0xbf, 0xcb, 0xfe, 0x0a, 0x9f, 0xbe, 0xf6, 0x03, 0xfa, 0xb9, 0xca, 0x68, 0x09, 0xc6, 0x95, 0x95, 0xb1, 0x5c, 0x53, 0x04, 0x34, 0x43, 0x0f, 0x5f, 0xfc, 0xf2, 0xe7, 0x71, 0xc6, 0x99, 0x67, 0x3e, 0x25, 0xfa, 0xd4, 0xeb, 0x76, 0xf1, 0x9e, 0x3f, 0x7c, 0x17, 0xd6, 0x2f, 0x34, 0x40, 0x88, 0x80, 0x10, 0xba, 0x35, 0x29, 0xa5, 0x7e, 0xa7, 0x92, 0x38, 0x2d, 0x55, 0xfb, 0xc7, 0xfb, 0xfc, 0x79, 0xcc, 0x03, 0x63, 0x65, 0x44, 0xb5, 0xd4, 0xae, 0x93, 0x8e, 0xce, 0x86, 0x59, 0x63, 0x8d, 0x7f, 0x38, 0xa1, 0xb5, 0x1c, 0x9f, 0x66, 0x38, 0x5f, 0x0f, 0x69, 0xa7, 0x59, 0xde, 0xcf, 0x2d, 0x0a, 0x39, 0x21, 0x85, 0x1d, 0x49, 0x96, 0xd0, 0x10, 0xfa, 0xe2, 0xe2, 0x62, 0x89, 0x73, 0xe4, 0x56, 0xd2, 0x86, 0x6b, 0x63, 0xd6, 0xc3, 0x20, 0x08, 0x4a, 0x48, 0xaf, 0x4e, 0xa0, 0x30, 0xc2, 0x51, 0x32, 0x95, 0x34, 0x21, 0x04, 0x8d, 0x26, 0xab, 0x24, 0x72, 0x7a, 0xee, 0x52, 0x4b, 0x0a, 0x29, 0xbb, 0xbe, 0xba, 0xbc, 0x30, 0x73, 0x3e, 0x49, 0x92, 0xa0, 0x11, 0x76, 0x4a, 0x08, 0x02, 0xe7, 0x1c, 0xcd, 0x66, 0xc1, 0xec, 0x3f, 0x70, 0xb8, 0x6b, 0x21, 0x79, 0x53, 0x7c, 0xba, 0x7e, 0xee, 0x75, 0x41, 0xda, 0x9d, 0x64, 0x92, 0x0a, 0x63, 0x49, 0xe1, 0xe6, 0x67, 0x19, 0xf3, 0x9c, 0x82, 0x38, 0x8f, 0x3f, 0xb9, 0xd8, 0x4c, 0x89, 0xcf, 0x96, 0xc7, 0x3a, 0x2e, 0x97, 0xe5, 0x58, 0xe9, 0x55, 0xf3, 0x50, 0x86, 0xdc, 0x03, 0x63, 0xe1, 0xc8, 0xf0, 0x7b, 0x9a, 0xa6, 0x56, 0x07, 0xd8, 0xcd, 0x12, 0x4a, 0x27, 0x99, 0x11, 0x6b, 0xe6, 0x62, 0x98, 0x8b, 0xf6, 0x05, 0xe1, 0xf9, 0x58, 0x96, 0xf1, 0x60, 0xaf, 0x40, 0xf6, 0x9e, 0xa9, 0x94, 0x69, 0x31, 0xa3, 0xae, 0x84, 0x93, 0x14, 0x40, 0x95, 0x82, 0xa9, 0xaa, 0x9c, 0xbb, 0x74, 0x7c, 0xa0, 0xdd, 0x07, 0xd1, 0xda, 0xab, 0xfa, 0xed, 0xa2, 0x57, 0x19, 0x84, 0xe5, 0xd1, 0x01, 0x00, 0x03, 0x91, 0x94, 0xfa, 0x3b, 0x89, 0xe6, 0xc4, 0x58, 0xc6, 0xbf, 0xcc, 0x92, 0x5a, 0xb8, 0xbf, 0xe8, 0x5d, 0x97, 0x73, 0x02, 0x37, 0x4b, 0x66, 0x8c, 0x21, 0x53, 0x4a, 0x0f, 0x81, 0xe6, 0x4a, 0x74, 0x60, 0xba, 0x47, 0xa3, 0xa8, 0x86, 0xc9, 0xa9, 0xca, 0x7b, 0x46, 0x60, 0xda, 0x37, 0x3e, 0xcb, 0xc7, 0x85, 0x24, 0x01, 0x24, 0xc1, 0x91, 0x6c, 0x19, 0x5e, 0xbe, 0x2f, 0xea, 0x51, 0x40, 0x12, 0x00, 0xcc, 0x8e, 0xb9, 0x05, 0x9e, 0x46, 0x10, 0x48, 0x94, 0x4c, 0x1d, 0x70, 0xde, 0x7a, 0xc9, 0xdb, 0xf0, 0xcf, 0x9f, 0xf9, 0x60, 0x71, 0x8f, 0x75, 0x37, 0x0d, 0x94, 0x50, 0x08, 0xa2, 0x40, 0x3d, 0x06, 0xcf, 0xe7, 0x08, 0x5a, 0x14, 0xad, 0x4a, 0x62, 0x62, 0xc7, 0x84, 0xa4, 0x96, 0x0f, 0x16, 0x8a, 0x68, 0x8e, 0x46, 0x4e, 0x66, 0x8c, 0xb3, 0x08, 0x52, 0x02, 0xdd, 0x5e, 0x86, 0xc7, 0x9f, 0x18, 0x60, 0x69, 0x79, 0xf2, 0x20, 0xb3, 0x61, 0x63, 0x11, 0xd0, 0x99, 0xaf, 0xc0, 0xc2, 0xc2, 0x20, 0xa1, 0xd5, 0xf6, 0x75, 0xb2, 0x93, 0xe5, 0x46, 0x0b, 0x8a, 0x69, 0xa1, 0xb7, 0x38, 0xc1, 0x19, 0xa7, 0x6f, 0x9c, 0xf8, 0x58, 0xcd, 0x76, 0x7b, 0x04, 0x2a, 0x7f, 0x26, 0x36, 0xd3, 0x43, 0x37, 0x8b, 0xfd, 0x81, 0x03, 0x07, 0xf3, 0xe7, 0x3e, 0xef, 0xdb, 0x35, 0xd6, 0x4f, 0x1d, 0x38, 0xbf, 0xf2, 0x95, 0x17, 0x62, 0xd0, 0xbd, 0x63, 0xa4, 0x25, 0xd3, 0x1f, 0x4e, 0x16, 0xcc, 0x0e, 0x1c, 0x38, 0x88, 0x0c, 0x4d, 0x2c, 0x0d, 0x81, 0x66, 0x67, 0x03, 0x86, 0x71, 0x8c, 0x38, 0x38, 0x3a, 0xd1, 0x3e, 0x9e, 0x77, 0xd6, 0xf3, 0xb1, 0x77, 0xcf, 0xa3, 0x4f, 0x59, 0x9d, 0x3e, 0xb8, 0x7b, 0x37, 0x06, 0xbd, 0x5e, 0x89, 0xe7, 0x70, 0xe0, 0x89, 0x47, 0x71, 0xe8, 0xc8, 0x00, 0x5b, 0xb6, 0xac, 0x7c, 0x2d, 0xf6, 0xed, 0xdd, 0x83, 0x4f, 0x5e, 0xf7, 0x09, 0x9c, 0x7e, 0xca, 0xe9, 0x10, 0x22, 0xc3, 0x20, 0x5a, 0x02, 0x65, 0x1c, 0xdb, 0x6f, 0xbf, 0xb6, 0x94, 0x7c, 0x4b, 0x25, 0xc1, 0xf8, 0x14, 0x23, 0x92, 0xa7, 0x9e, 0x86, 0xb3, 0x9e, 0xf7, 0x6a, 0xdc, 0x7b, 0xf7, 0xe7, 0xc1, 0x3c, 0x5f, 0xbf, 0xab, 0x90, 0x00, 0x85, 0xf6, 0xde, 0xa6, 0x7c, 0x44, 0xfb, 0x3b, 0x96, 0x29, 0x14, 0x24, 0x2e, 0xbb, 0xe2, 0x0a, 0x5c, 0xf0, 0xaa, 0x0b, 0x71, 0xe9, 0xdb, 0xde, 0x34, 0xf6, 0xd9, 0xf9, 0xd4, 0x27, 0xaf, 0x03, 0xf7, 0x08, 0xda, 0xb3, 0x1e, 0x9a, 0x4d, 0x56, 0x42, 0xda, 0x14, 0x00, 0xe2, 0xab, 0x91, 0xcf, 0xfb, 0x54, 0xc4, 0xcc, 0x1b, 0xb7, 0x6d, 0x83, 0xe2, 0x0c, 0x41, 0xb3, 0xcc, 0xca, 0xe6, 0x28, 0x60, 0x6e, 0xa3, 0xe0, 0xe9, 0xb6, 0x1e, 0x25, 0x49, 0x21, 0x33, 0x57, 0x15, 0x93, 0x40, 0x88, 0x0c, 0x84, 0xe8, 0x00, 0x17, 0x47, 0xcb, 0x30, 0xa3, 0x57, 0x3a, 0x80, 0x71, 0x50, 0xa6, 0x05, 0xbb, 0xf4, 0xfb, 0x5f, 0xb4, 0x2e, 0xb5, 0xae, 0x80, 0xee, 0x09, 0xeb, 0xef, 0x09, 0xb2, 0x44, 0x5a, 0xe7, 0x30, 0xce, 0x39, 0x38, 0xf3, 0x21, 0x05, 0xc1, 0xa0, 0x1f, 0x61, 0x38, 0x1c, 0x22, 0x08, 0x79, 0x89, 0x97, 0x60, 0x82, 0xbd, 0x46, 0x7e, 0x7d, 0x00, 0x11, 0x7c, 0x9f, 0x8f, 0xb8, 0xa9, 0x59, 0x9b, 0x6a, 0x41, 0x9d, 0xe3, 0x53, 0x10, 0xc2, 0x01, 0x25, 0x91, 0xa5, 0x02, 0x71, 0x9c, 0x22, 0x68, 0x94, 0xcd, 0xb3, 0x8c, 0xf2, 0xa7, 0xbd, 0x0e, 0xd9, 0x10, 0x8c, 0x2b, 0x80, 0x68, 0xcd, 0x7b, 0x83, 0xc2, 0x9a, 0x75, 0x7c, 0xf5, 0xba, 0x19, 0x8b, 0x20, 0x0f, 0x06, 0x03, 0xf4, 0xfb, 0x7d, 0x4d, 0x64, 0x53, 0x4a, 0x6b, 0x60, 0x48, 0x5e, 0x91, 0xcc, 0x75, 0xc6, 0x1b, 0x49, 0xd9, 0xb4, 0x46, 0x56, 0xe2, 0x85, 0xe1, 0x98, 0xb9, 0x9f, 0xcb, 0x8e, 0x96, 0x73, 0x01, 0x05, 0x06, 0x85, 0x36, 0x08, 0x55, 0x00, 0x12, 0x48, 0x95, 0x42, 0xca, 0x0c, 0x7c, 0x30, 0x18, 0x94, 0x20, 0xdb, 0xea, 0x05, 0x74, 0x03, 0x56, 0x75, 0xbe, 0xd0, 0xb0, 0xcf, 0xdd, 0x0a, 0xde, 0xad, 0xc0, 0xeb, 0xd4, 0x73, 0x4a, 0x81, 0x4f, 0xd5, 0x0b, 0xd3, 0x90, 0x11, 0x83, 0x0e, 0x52, 0x4b, 0x9c, 0x13, 0x34, 0x1b, 0xe9, 0xf7, 0x94, 0xaa, 0x31, 0x5a, 0x4f, 0xd0, 0x33, 0x3f, 0x9f, 0x54, 0xbc, 0xb7, 0xab, 0x68, 0x03, 0x73, 0x94, 0x8c, 0xaa, 0x64, 0x3a, 0x40, 0x93, 0x7e, 0xab, 0x08, 0x41, 0xc9, 0x1b, 0x1e, 0xa3, 0xa3, 0x32, 0xee, 0x3e, 0x88, 0xc7, 0x74, 0x5a, 0xa2, 0x14, 0xa4, 0xca, 0x00, 0x49, 0xf4, 0xff, 0x73, 0xd2, 0x1f, 0xf7, 0x75, 0x9f, 0x8e, 0xa8, 0x9c, 0x37, 0x90, 0xb3, 0x3e, 0x08, 0x21, 0x00, 0xd3, 0x7e, 0xc8, 0xb6, 0x77, 0x67, 0x47, 0xdb, 0x8a, 0x73, 0x49, 0xfa, 0x5a, 0x1a, 0x30, 0x89, 0x13, 0x34, 0xa6, 0x44, 0x47, 0x37, 0x9f, 0x7a, 0x1a, 0xce, 0x7c, 0xf6, 0xaf, 0xe0, 0x3f, 0x1e, 0xf8, 0xf2, 0x48, 0xd2, 0xd6, 0x68, 0x7a, 0x25, 0x72, 0x4d, 0x5d, 0x2f, 0x48, 0x27, 0x62, 0xe6, 0x1a, 0xb1, 0x92, 0x11, 0x4d, 0xa7, 0x33, 0x8f, 0x5e, 0x3f, 0xc1, 0xfe, 0x47, 0x0f, 0xa3, 0x3f, 0x10, 0x39, 0xe3, 0x74, 0xf2, 0xf3, 0x73, 0xab, 0x00, 0x29, 0x8b, 0x7b, 0xd6, 0xeb, 0xf5, 0xf4, 0x08, 0x20, 0x98, 0x5e, 0x64, 0xa4, 0x1e, 0x65, 0x89, 0xe3, 0x78, 0xac, 0xf3, 0xd7, 0x53, 0x6d, 0x37, 0x6e, 0xdb, 0x86, 0x5b, 0x6f, 0xbd, 0x09, 0x17, 0x5c, 0xf0, 0xdf, 0xa7, 0x96, 0xf4, 0x34, 0x41, 0x0b, 0xd0, 0x02, 0x22, 0x5b, 0xaf, 0xbf, 0x1e, 0x00, 0xf0, 0x7b, 0xbf, 0xfb, 0xbb, 0x00, 0x80, 0xdb, 0x6e, 0xdb, 0x86, 0x55, 0xf3, 0x21, 0xfc, 0x5c, 0xda, 0xf3, 0x79, 0x67, 0x3d, 0x7f, 0xaa, 0xe3, 0xec, 0xd8, 0xbe, 0x1d, 0x83, 0xee, 0x3d, 0x85, 0x84, 0xb0, 0xa3, 0xa8, 0x45, 0xe9, 0x64, 0xc9, 0xd3, 0xa1, 0x83, 0x07, 0xb0, 0x65, 0xcb, 0x39, 0x00, 0x80, 0xff, 0xdc, 0xb3, 0x07, 0x1e, 0x03, 0x1a, 0xe1, 0xe4, 0xd6, 0xb1, 0xbf, 0x74, 0xfe, 0xf9, 0x63, 0xff, 0xed, 0xd3, 0xd7, 0x5e, 0x8b, 0x7f, 0xfa, 0xdc, 0x67, 0x11, 0xf8, 0x14, 0x61, 0xc0, 0x70, 0xe2, 0xba, 0x16, 0xc2, 0x90, 0xc3, 0xe3, 0x04, 0x73, 0x9d, 0x0c, 0x40, 0x73, 0x45, 0x77, 0xbf, 0x7d, 0x7b, 0xf7, 0xe0, 0xe2, 0x37, 0x5f, 0x62, 0x0d, 0x6d, 0xbe, 0x7c, 0xd3, 0xe7, 0xb1, 0x7a, 0xf5, 0x6a, 0xcc, 0xce, 0x04, 0xa5, 0x35, 0xac, 0xe8, 0x23, 0x4f, 0x97, 0xe8, 0x3e, 0xf4, 0xf0, 0x63, 0x68, 0x36, 0x9b, 0xe8, 0xf6, 0x07, 0x23, 0xad, 0x9d, 0xea, 0x17, 0xa5, 0x14, 0xd4, 0x71, 0x40, 0xbb, 0xf5, 0xdb, 0x37, 0xe3, 0xd6, 0x6f, 0xdf, 0x8c, 0x0b, 0x5e, 0x75, 0xe1, 0x88, 0x1b, 0xdb, 0xd7, 0xbe, 0xfa, 0x35, 0x6d, 0x78, 0xd4, 0xf1, 0x11, 0x36, 0x42, 0xcc, 0xce, 0x36, 0x4b, 0x55, 0xa3, 0x46, 0x9c, 0x52, 0x3c, 0xf4, 0xf0, 0x63, 0xf6, 0x77, 0x56, 0x9a, 0xfd, 0x37, 0xc9, 0xe2, 0xad, 0xb7, 0xde, 0x84, 0x46, 0x98, 0x82, 0x12, 0x61, 0xd7, 0x6d, 0xc6, 0x18, 0xd2, 0x2c, 0x1d, 0x11, 0x3d, 0x71, 0x95, 0xd0, 0x32, 0x49, 0x91, 0xaa, 0xd4, 0xc2, 0xcd, 0x52, 0xc6, 0x79, 0x2f, 0x58, 0x7f, 0xae, 0x76, 0xc7, 0x07, 0xe7, 0x5c, 0xf7, 0x9c, 0x79, 0x90, 0x27, 0x06, 0xba, 0x4a, 0x4e, 0xd3, 0x14, 0x1e, 0x6f, 0xe8, 0xb1, 0x67, 0x43, 0x68, 0xa3, 0xd4, 0x3a, 0x64, 0x72, 0xce, 0x21, 0x84, 0xb4, 0xfd, 0x65, 0x17, 0x7a, 0x6f, 0xb7, 0xdb, 0x68, 0xb7, 0xdb, 0xc8, 0x44, 0x6c, 0xcf, 0xc5, 0x04, 0x69, 0x53, 0x81, 0x33, 0xc6, 0xd0, 0x6c, 0x36, 0x4b, 0x2d, 0x53, 0xb7, 0x20, 0x93, 0x52, 0x6b, 0xd5, 0xbb, 0xbd, 0x71, 0xf3, 0xb9, 0x83, 0xa0, 0x01, 0xcf, 0x0b, 0xe0, 0x87, 0x5e, 0xe9, 0xf3, 0x9b, 0xf5, 0xcd, 0xfc, 0x9c, 0xd1, 0x59, 0x19, 0x0c, 0x06, 0xf0, 0x7d, 0xdf, 0xce, 0xb9, 0x6b, 0x92, 0x5c, 0x82, 0xc5, 0xc3, 0x87, 0x47, 0xf4, 0x47, 0x92, 0x24, 0x41, 0x14, 0x45, 0x5a, 0xe4, 0x85, 0x35, 0x46, 0x08, 0x6f, 0x2e, 0x62, 0x4d, 0x6a, 0x46, 0x47, 0xdd, 0x35, 0xd4, 0xa0, 0x12, 0xae, 0x38, 0x8d, 0x9b, 0x18, 0xc4, 0xb1, 0x02, 0x25, 0xc8, 0xe3, 0x14, 0x07, 0x40, 0x35, 0xe4, 0x3e, 0x4e, 0xba, 0xaf, 0x0a, 0xb3, 0x57, 0x03, 0x97, 0x4b, 0xca, 0xaa, 0xce, 0x78, 0xbb, 0x3d, 0xe4, 0xba, 0x91, 0x08, 0xfd, 0xef, 0x7c, 0xac, 0xd7, 0x79, 0x41, 0x0a, 0xa8, 0x9f, 0xf1, 0x04, 0x0a, 0x25, 0xa2, 0xaa, 0x24, 0xad, 0x85, 0x99, 0x1c, 0xf3, 0x97, 0xba, 0x5e, 0xbd, 0x3b, 0x07, 0xa9, 0xcd, 0x4f, 0xcc, 0x37, 0x1a, 0x35, 0xe0, 0x7c, 0x54, 0xdb, 0xd8, 0x25, 0xae, 0x8d, 0x93, 0x7c, 0xb5, 0x09, 0x92, 0xe7, 0x95, 0x02, 0xb8, 0x9b, 0xe0, 0x18, 0x48, 0x5a, 0x5a, 0x65, 0xa9, 0x4c, 0x9b, 0xe0, 0xb0, 0xe2, 0xe6, 0x69, 0x96, 0x6c, 0xae, 0x76, 0x24, 0x00, 0x08, 0xfd, 0x7f, 0xaa, 0x0a, 0x52, 0x9c, 0x61, 0x73, 0xd3, 0x3c, 0x31, 0xa0, 0x28, 0xce, 0xa3, 0x15, 0x36, 0x74, 0xa6, 0x99, 0x28, 0x24, 0xfd, 0x03, 0x53, 0x57, 0x90, 0x6f, 0xb8, 0xe8, 0x22, 0xdc, 0x7a, 0xeb, 0x4d, 0x38, 0x75, 0x73, 0xd3, 0xbe, 0xf0, 0x47, 0x96, 0x66, 0xf1, 0xf8, 0xe3, 0x8f, 0xe2, 0xf9, 0xcf, 0x5f, 0x5d, 0x9b, 0x0c, 0xb9, 0x6d, 0x0c, 0x25, 0x0d, 0x6b, 0x93, 0x95, 0x14, 0xa0, 0xb2, 0x2c, 0xce, 0x67, 0x2d, 0x15, 0xe6, 0x66, 0x7d, 0xb4, 0xdb, 0x7e, 0x69, 0xb1, 0x9a, 0x74, 0xeb, 0x76, 0x7b, 0x88, 0x23, 0x67, 0x8e, 0xbb, 0xd9, 0x02, 0xa5, 0x00, 0x67, 0x5c, 0xbb, 0x34, 0x71, 0x06, 0xce, 0x29, 0xd2, 0x94, 0xe3, 0x8c, 0x33, 0x9f, 0x3d, 0xf1, 0xfe, 0x07, 0xbd, 0x1e, 0xb6, 0x7d, 0xe1, 0xc6, 0x89, 0xe7, 0xa1, 0xab, 0xdb, 0xe2, 0xb1, 0x63, 0xb5, 0xe3, 0x7d, 0x1f, 0xbb, 0xe6, 0x1a, 0x70, 0x46, 0xb1, 0x76, 0x6d, 0x1b, 0xeb, 0xd7, 0xcf, 0xa2, 0xd1, 0x20, 0xe0, 0x8c, 0xe2, 0x15, 0xe7, 0xbf, 0x72, 0xaa, 0xa4, 0xe1, 0xaa, 0x8f, 0x7c, 0x18, 0x3f, 0xff, 0x73, 0x27, 0x60, 0x6e, 0xae, 0x35, 0x62, 0xcf, 0x78, 0xf4, 0xd8, 0x70, 0xa2, 0xfd, 0xed, 0xdb, 0xbb, 0x1f, 0xf7, 0x3e, 0x70, 0x17, 0x5a, 0x9d, 0x16, 0x28, 0x61, 0x00, 0x14, 0xb2, 0x74, 0x7a, 0x2d, 0x06, 0xfc, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xb2, 0x80, 0xf8, 0xe2, 0x97, 0xbc, 0x78, 0xc5, 0x6a, 0xf2, 0xe1, 0x47, 0x1e, 0xce, 0x8d, 0x6a, 0x04, 0x7e, 0xff, 0xf7, 0xde, 0x8d, 0xbd, 0x7b, 0xf7, 0x62, 0xfb, 0xf6, 0x7f, 0xd5, 0x02, 0x47, 0xa1, 0x8f, 0x75, 0xeb, 0x4f, 0x5e, 0x31, 0x98, 0xdf, 0xfe, 0x9d, 0xdb, 0x00, 0x68, 0x11, 0xa0, 0x07, 0x77, 0xef, 0x46, 0x18, 0x68, 0x85, 0xb1, 0x34, 0x4d, 0x90, 0xa6, 0x12, 0xbe, 0xcf, 0x72, 0x46, 0xb7, 0xee, 0x7f, 0x07, 0xe1, 0xe4, 0x7e, 0xee, 0xbd, 0x6e, 0x17, 0xbd, 0xa5, 0x9d, 0x00, 0x24, 0x3a, 0x9d, 0x56, 0x89, 0x28, 0x5c, 0x65, 0x6a, 0x17, 0x85, 0x52, 0x8a, 0x66, 0xa3, 0x8f, 0xc1, 0x20, 0xb5, 0x72, 0xa9, 0x26, 0xb0, 0x8f, 0x90, 0xe1, 0x28, 0x81, 0xe7, 0x51, 0x88, 0x2c, 0xc3, 0xd2, 0xd2, 0xd2, 0x48, 0x40, 0x0a, 0x03, 0x6a, 0x99, 0xed, 0xc7, 0x43, 0xc6, 0xfc, 0xd4, 0x27, 0xaf, 0xc3, 0xba, 0xf5, 0x27, 0xe3, 0xf0, 0x4f, 0x7f, 0x08, 0x8f, 0x6b, 0xcd, 0x0c, 0x33, 0x42, 0x45, 0x39, 0xb5, 0xfd, 0xe6, 0xb2, 0xb8, 0x93, 0x86, 0x8f, 0x83, 0x46, 0x08, 0x9e, 0x27, 0x95, 0x8c, 0x79, 0xb9, 0x58, 0x8b, 0xb3, 0xfe, 0x8a, 0x81, 0x2d, 0x8c, 0xd2, 0x44, 0x58, 0x8b, 0x53, 0xb3, 0xde, 0xba, 0x85, 0x5e, 0x55, 0x58, 0x05, 0xd0, 0xee, 0x61, 0x0c, 0x1c, 0x3c, 0xaf, 0x7e, 0x85, 0x92, 0x80, 0x14, 0xf0, 0xb9, 0xfe, 0xac, 0x59, 0x94, 0xd8, 0x9e, 0xb8, 0x94, 0x7a, 0x36, 0x5c, 0xe4, 0x5e, 0x0a, 0x20, 0x04, 0x51, 0x5c, 0x04, 0x7c, 0x05, 0xd8, 0xa4, 0x81, 0x71, 0x0e, 0x96, 0xb7, 0xdb, 0x4a, 0xe4, 0xe6, 0x7c, 0x4a, 0x8b, 0x71, 0x0e, 0x4e, 0x08, 0x52, 0x21, 0xe0, 0xe5, 0x85, 0x2b, 0xe5, 0x00, 0xc9, 0x93, 0x02, 0x53, 0xcc, 0x16, 0x0e, 0x85, 0x0a, 0x99, 0x04, 0x88, 0x30, 0x63, 0xc3, 0xfa, 0x2b, 0x8e, 0x93, 0x0a, 0x67, 0xcc, 0x43, 0x10, 0xa8, 0x5c, 0x11, 0x55, 0x95, 0xae, 0xab, 0x3b, 0x0d, 0x50, 0x90, 0x26, 0xf9, 0x08, 0x47, 0xc1, 0x8d, 0x5f, 0x22, 0x13, 0xb5, 0xf1, 0xcb, 0xec, 0xb7, 0x15, 0x04, 0x60, 0x5c, 0x17, 0xf9, 0x42, 0x70, 0x48, 0x95, 0x81, 0xf7, 0xfb, 0xfd, 0xda, 0x3e, 0x63, 0x35, 0x20, 0xba, 0x81, 0xc8, 0xdc, 0x1c, 0x43, 0xaa, 0xa8, 0x23, 0xcc, 0x55, 0x7f, 0xbf, 0xba, 0x7f, 0x93, 0xcd, 0x55, 0xd5, 0x71, 0xca, 0xff, 0x9e, 0x4d, 0xa4, 0x35, 0x5c, 0x3d, 0x97, 0x4c, 0xca, 0x91, 0xde, 0xb4, 0x0b, 0xa9, 0x10, 0xe6, 0x10, 0xa6, 0xe0, 0x6a, 0xf8, 0x1a, 0x37, 0xa0, 0x51, 0x22, 0x83, 0x4b, 0x02, 0x64, 0x4c, 0x16, 0x19, 0x40, 0xee, 0xdd, 0x5b, 0xa8, 0xff, 0xa0, 0xe8, 0x21, 0xe5, 0x46, 0x69, 0xb4, 0x74, 0xe3, 0x90, 0xf7, 0x98, 0x85, 0x26, 0xfc, 0x48, 0x09, 0x50, 0x05, 0x29, 0x29, 0x28, 0xd1, 0x55, 0x6f, 0xb3, 0xd5, 0xd2, 0xe7, 0xa9, 0x28, 0x28, 0x18, 0x18, 0x34, 0xac, 0x4e, 0x29, 0x85, 0x47, 0x3d, 0xf4, 0x49, 0xdf, 0xc2, 0xeb, 0x46, 0x8a, 0x50, 0x4a, 0x69, 0x05, 0x70, 0x0e, 0x3e, 0xa9, 0xfd, 0xbb, 0xd3, 0x98, 0x60, 0xcf, 0xbe, 0x43, 0xe8, 0x75, 0xbb, 0x53, 0xb3, 0xb1, 0xb7, 0x6c, 0x39, 0x07, 0xdd, 0xe5, 0x7b, 0x31, 0x1c, 0x0e, 0x21, 0xa5, 0xc4, 0xaf, 0xfc, 0xd2, 0xff, 0xc0, 0xbd, 0xf7, 0xde, 0x8f, 0x83, 0x07, 0xef, 0x18, 0xb9, 0xef, 0xe6, 0x3a, 0xb7, 0x5a, 0x2d, 0xc7, 0xde, 0xb0, 0x90, 0xd0, 0x05, 0xcc, 0x4b, 0xae, 0xf5, 0xcb, 0x4f, 0xde, 0xd8, 0x86, 0x94, 0x12, 0xb3, 0xf3, 0x2f, 0xc6, 0xeb, 0x5e, 0xf7, 0xcb, 0x53, 0x9d, 0xdf, 0x93, 0x4f, 0x1e, 0x44, 0xa7, 0xd3, 0x41, 0xa7, 0xed, 0x59, 0x35, 0xa7, 0x24, 0x49, 0x72, 0xb4, 0x83, 0x01, 0xa0, 0x80, 0xd2, 0x0b, 0x7a, 0xd8, 0x59, 0x3d, 0x15, 0x5c, 0xae, 0xd5, 0xbb, 0x74, 0x12, 0xf8, 0xbd, 0xbb, 0xbf, 0x39, 0x75, 0x85, 0xbe, 0xd2, 0xec, 0x76, 0x26, 0x24, 0x0e, 0x1e, 0xea, 0x22, 0xcb, 0x12, 0x3c, 0xe7, 0xcc, 0x05, 0x44, 0x43, 0x36, 0xd5, 0xb9, 0x7e, 0xe6, 0xba, 0x8f, 0x20, 0xcb, 0x04, 0x7a, 0xbd, 0x18, 0x9d, 0x76, 0x30, 0xd2, 0x03, 0x9d, 0x54, 0x9b, 0xe0, 0x3f, 0xbe, 0xff, 0x23, 0x80, 0x08, 0x50, 0x08, 0x50, 0x2a, 0x90, 0xa4, 0x02, 0x4a, 0x4e, 0x56, 0xe5, 0x1f, 0xef, 0xcc, 0xfe, 0xb9, 0xbf, 0x70, 0x0e, 0x5e, 0xf3, 0xda, 0xd7, 0xa0, 0xd7, 0xed, 0xe2, 0xa6, 0xaf, 0x7d, 0x19, 0xc3, 0x58, 0x80, 0x51, 0x82, 0x75, 0x0b, 0xe3, 0xcf, 0xf9, 0x93, 0xd7, 0x7d, 0xc2, 0x26, 0xad, 0x1f, 0xbb, 0xe6, 0x1a, 0xcc, 0x74, 0x02, 0x6c, 0x39, 0xeb, 0x04, 0xac, 0x5b, 0xd7, 0x46, 0x12, 0x67, 0xe8, 0xf5, 0xfb, 0x98, 0x99, 0x69, 0xa1, 0xd5, 0x0a, 0x0a, 0xb2, 0x2a, 0x8d, 0x27, 0xbe, 0xae, 0x9f, 0xfa, 0xe4, 0x75, 0x58, 0x5c, 0x8a, 0xd0, 0x69, 0x7b, 0x25, 0xd6, 0x72, 0x5d, 0xcf, 0xd4, 0x24, 0xdc, 0x00, 0x70, 0xc2, 0xba, 0x26, 0xb2, 0x4c, 0x60, 0x71, 0x29, 0xb6, 0x41, 0xbd, 0x6e, 0x0b, 0x02, 0x86, 0x85, 0xb5, 0x0d, 0x04, 0x01, 0xb5, 0x08, 0x4d, 0x89, 0x1d, 0xce, 0x32, 0xfc, 0xc7, 0x03, 0xf7, 0x1d, 0x17, 0xd4, 0x0e, 0x00, 0x6f, 0x79, 0xeb, 0x25, 0xf8, 0xe0, 0xfb, 0xdf, 0x89, 0x30, 0x0c, 0x11, 0x04, 0xdc, 0x16, 0x0a, 0x69, 0x9a, 0x42, 0x26, 0xb2, 0x54, 0xfd, 0x99, 0xe7, 0xc2, 0xac, 0x97, 0xc7, 0x72, 0xf2, 0x1d, 0x63, 0x1e, 0x82, 0x40, 0x22, 0xf0, 0x1b, 0xb9, 0x84, 0x2e, 0xb7, 0x1c, 0x27, 0x63, 0xef, 0xa9, 0x2b, 0x64, 0x23, 0xf5, 0xad, 0xf7, 0x69, 0x82, 0x7c, 0x15, 0xdd, 0x2c, 0xd6, 0x5f, 0x66, 0x0b, 0x37, 0x57, 0x51, 0xd3, 0x55, 0xdb, 0x34, 0x31, 0xc0, 0x3d, 0x37, 0x73, 0xae, 0x46, 0x09, 0xd3, 0x24, 0xab, 0xd5, 0x09, 0x03, 0x77, 0xad, 0x77, 0xf7, 0x69, 0xd8, 0xf0, 0x02, 0x04, 0xfa, 0x14, 0xa8, 0x75, 0xe1, 0x13, 0x22, 0x45, 0x1c, 0xa7, 0x18, 0x0e, 0xe3, 0x5c, 0xab, 0x44, 0xf7, 0xab, 0xa3, 0x28, 0x41, 0xb7, 0xdb, 0xb7, 0x0a, 0xa0, 0x9c, 0xf3, 0xbc, 0x50, 0xd1, 0x01, 0xdc, 0x56, 0xe1, 0xd4, 0x43, 0xab, 0xd9, 0x41, 0xb3, 0xd1, 0x46, 0x9a, 0x8a, 0xd2, 0x9c, 0x79, 0xb5, 0x42, 0xaf, 0xf3, 0x2a, 0x71, 0x03, 0x77, 0x10, 0x34, 0x8a, 0x51, 0x64, 0xe9, 0x56, 0xf9, 0x9a, 0xe0, 0x2a, 0x65, 0x04, 0x22, 0x08, 0x08, 0x95, 0x50, 0x32, 0x01, 0x20, 0xc1, 0x0d, 0x8c, 0x50, 0xed, 0x31, 0x03, 0xb0, 0x2c, 0xbc, 0xea, 0x3c, 0xb7, 0xb9, 0xe1, 0xcb, 0xcb, 0xcb, 0xb5, 0x27, 0x63, 0xbe, 0xaf, 0x42, 0xda, 0x23, 0x27, 0xcf, 0x19, 0xa4, 0xd2, 0x4a, 0x73, 0x55, 0x42, 0x57, 0x69, 0x7f, 0x8a, 0x00, 0x62, 0x14, 0x1a, 0x97, 0xd1, 0xca, 0xe6, 0x2d, 0xe0, 0x6c, 0x64, 0x7f, 0x25, 0xa5, 0x28, 0x8e, 0xda, 0x60, 0x64, 0x49, 0x79, 0x04, 0x60, 0x84, 0xe9, 0x8a, 0x18, 0xba, 0xff, 0x6b, 0xfa, 0x65, 0xba, 0xc7, 0x59, 0x33, 0x6e, 0xe0, 0x72, 0x11, 0x84, 0x1c, 0x39, 0x6e, 0xb9, 0x91, 0x20, 0x4b, 0xa2, 0x07, 0xba, 0xb5, 0xe0, 0x28, 0x31, 0xc5, 0x03, 0xc8, 0x34, 0xe7, 0x13, 0x30, 0x1f, 0x14, 0x0c, 0x10, 0x0a, 0x8c, 0x70, 0xa4, 0x3c, 0x85, 0x60, 0x45, 0xcb, 0xc1, 0x04, 0x73, 0x08, 0x09, 0x99, 0x7f, 0x86, 0xf5, 0xeb, 0xd7, 0x6b, 0x1b, 0xbe, 0xe5, 0x04, 0x9c, 0x45, 0xf8, 0xb7, 0xdb, 0x6e, 0x9f, 0x9a, 0x8d, 0xad, 0x17, 0x86, 0xfb, 0xb1, 0x70, 0x82, 0x0e, 0x96, 0xf7, 0xdd, 0x77, 0x03, 0x84, 0xc8, 0x30, 0xef, 0x04, 0xa7, 0x2a, 0xb9, 0x71, 0x69, 0x69, 0x29, 0x27, 0xd5, 0x98, 0xac, 0x94, 0x95, 0xb2, 0xf8, 0x63, 0x47, 0x33, 0x3c, 0xf7, 0xb9, 0xbf, 0x80, 0x33, 0xce, 0x3c, 0xf3, 0xe9, 0xf9, 0x46, 0x03, 0x38, 0x78, 0xe4, 0x09, 0x70, 0xce, 0x2d, 0xe4, 0xc5, 0x18, 0x43, 0x9a, 0x88, 0x5c, 0x12, 0x32, 0x04, 0x67, 0x41, 0x6e, 0x06, 0xc1, 0xf1, 0xd6, 0x37, 0xbe, 0x6d, 0xaa, 0x63, 0xb8, 0x28, 0xc7, 0xdd, 0xf7, 0xed, 0x9b, 0xda, 0x74, 0xa3, 0x54, 0x91, 0x31, 0x82, 0x46, 0xc8, 0xa1, 0x00, 0x44, 0xf9, 0xf3, 0xac, 0x2b, 0x4b, 0x60, 0x18, 0x0f, 0xf0, 0xf2, 0x57, 0x5c, 0x3c, 0xf1, 0x3e, 0xf7, 0xed, 0xdd, 0x83, 0xbb, 0xef, 0xdb, 0x87, 0x20, 0x60, 0x38, 0xba, 0x18, 0x63, 0x6e, 0x4e, 0xbf, 0xec, 0x2e, 0x24, 0xd9, 0xeb, 0x4e, 0x56, 0x5d, 0xef, 0xdf, 0x77, 0x1f, 0x0e, 0x1e, 0x38, 0x8a, 0xe1, 0x60, 0x88, 0x75, 0x27, 0xce, 0x82, 0xf3, 0x0c, 0x9c, 0x66, 0x2b, 0x9e, 0xc3, 0x24, 0x41, 0xdc, 0x6c, 0x9d, 0xb6, 0x8f, 0xff, 0xf9, 0xce, 0xf7, 0x00, 0x00, 0xfa, 0x83, 0x21, 0x5a, 0xad, 0x5c, 0xe8, 0x49, 0x28, 0xec, 0xdd, 0xff, 0xd3, 0x5a, 0xee, 0x82, 0xe1, 0x1c, 0xf8, 0xad, 0x75, 0x38, 0xf7, 0x17, 0xca, 0x2a, 0x83, 0xcb, 0x4b, 0x3f, 0xc9, 0x15, 0xc3, 0x32, 0x2c, 0x2d, 0x25, 0xe8, 0xf5, 0x8a, 0xf7, 0x7b, 0x38, 0x9c, 0x6c, 0x02, 0x64, 0xc7, 0xf6, 0xed, 0xe8, 0xf6, 0x12, 0xac, 0x5e, 0x77, 0x36, 0xa8, 0xfc, 0x09, 0xa4, 0x4c, 0x4b, 0x55, 0x68, 0xdd, 0x24, 0x8b, 0xe1, 0xc8, 0x35, 0x42, 0x85, 0x75, 0x0b, 0x01, 0x00, 0x85, 0xe1, 0x30, 0x43, 0x1c, 0xcb, 0x91, 0x11, 0x4f, 0xc6, 0x08, 0x9a, 0x4d, 0x8e, 0x56, 0x4b, 0x13, 0xd8, 0x4c, 0xbf, 0xd6, 0xe5, 0x00, 0x99, 0xaa, 0xed, 0xee, 0xbb, 0xee, 0xc6, 0xe6, 0x53, 0x4f, 0x7b, 0x4a, 0x2e, 0xc7, 0xfe, 0xfd, 0xfb, 0xf1, 0xc3, 0xff, 0x7c, 0x02, 0xcf, 0x39, 0x73, 0x01, 0x61, 0xe8, 0x97, 0x21, 0xdd, 0x8e, 0x16, 0x54, 0x19, 0x0e, 0x87, 0x18, 0x0e, 0x87, 0x5a, 0x3a, 0xd4, 0x21, 0xa5, 0x85, 0xcd, 0x76, 0x91, 0x4c, 0x30, 0x0f, 0x8a, 0x12, 0x48, 0x42, 0x2d, 0x6f, 0x8a, 0x28, 0x0d, 0xf7, 0x7a, 0x81, 0xd6, 0x1c, 0xcf, 0xb2, 0x0c, 0x69, 0xa2, 0x83, 0x70, 0x96, 0xa6, 0xba, 0x27, 0x99, 0xaf, 0x91, 0xc6, 0xd9, 0x4c, 0xe5, 0xeb, 0xbd, 0x92, 0xa3, 0x53, 0x4d, 0xb9, 0xb1, 0x01, 0x44, 0x5e, 0x9c, 0x28, 0x02, 0x24, 0x22, 0x43, 0x2a, 0x8b, 0x71, 0x34, 0x89, 0xa2, 0x75, 0xe4, 0x79, 0x01, 0x08, 0xf7, 0x80, 0x5c, 0x9d, 0x54, 0xe4, 0x8a, 0x72, 0x7a, 0x1f, 0xb9, 0x9f, 0x39, 0x67, 0x60, 0x00, 0x08, 0xf7, 0xc0, 0x1c, 0x26, 0xba, 0x6e, 0x03, 0x68, 0x0f, 0x8f, 0x28, 0x4e, 0x4a, 0xc2, 0x38, 0x46, 0x5c, 0xc6, 0x54, 0xd5, 0x2e, 0xe4, 0x6f, 0x82, 0xbc, 0xef, 0xfb, 0x18, 0x44, 0x05, 0x0a, 0x60, 0xe0, 0x7a, 0x97, 0x44, 0x27, 0x44, 0x5a, 0xd2, 0x15, 0x91, 0x92, 0x96, 0x0c, 0x8e, 0x4c, 0x71, 0x30, 0x2e, 0xfe, 0xb4, 0x5b, 0x6c, 0x24, 0xae, 0xba, 0x04, 0xb8, 0x78, 0xb9, 0x07, 0xcf, 0xe7, 0x60, 0x5c, 0x58, 0xcf, 0x14, 0x6e, 0x18, 0x81, 0x75, 0x73, 0xe4, 0x55, 0x2d, 0x60, 0x37, 0xe3, 0x31, 0x1f, 0xcc, 0x0d, 0xa6, 0x75, 0x6a, 0x49, 0x75, 0xec, 0x68, 0xfb, 0x42, 0xe5, 0x7e, 0xdd, 0x75, 0x4a, 0x64, 0x66, 0xff, 0xe3, 0x46, 0xe6, 0x00, 0xa0, 0xd1, 0x68, 0xad, 0x18, 0xd0, 0x97, 0xfa, 0xbd, 0xf1, 0xc9, 0x04, 0x21, 0x85, 0x21, 0x4c, 0x0d, 0x0a, 0xa1, 0x7b, 0xb2, 0xb2, 0x94, 0x1d, 0x57, 0x7f, 0xc6, 0x04, 0x5f, 0x33, 0xd4, 0x6f, 0x64, 0x0b, 0x0d, 0xbb, 0x41, 0xe4, 0x50, 0x0b, 0x08, 0xd1, 0x9e, 0xba, 0x46, 0x93, 0xdd, 0x19, 0x1f, 0x02, 0x24, 0x28, 0xcd, 0x61, 0x28, 0xaa, 0x9c, 0xfd, 0x2a, 0xb4, 0xdb, 0x6d, 0x9d, 0x14, 0x09, 0xc0, 0x63, 0x3e, 0x88, 0xa2, 0x90, 0xa9, 0x63, 0x22, 0xe3, 0x33, 0x0b, 0xb1, 0x03, 0x28, 0xcc, 0x5b, 0x60, 0x1e, 0x18, 0x4d, 0xe2, 0x18, 0x0c, 0x06, 0xc8, 0x84, 0xc0, 0x57, 0xbf, 0xfa, 0xb9, 0xa9, 0x03, 0x7a, 0xbb, 0xd3, 0xc1, 0x07, 0xfe, 0xec, 0xef, 0xf0, 0xc1, 0xf7, 0xbf, 0x13, 0x12, 0x07, 0x91, 0xa6, 0x0a, 0x41, 0x18, 0x22, 0xf0, 0xf5, 0xf9, 0xba, 0xd9, 0xaf, 0x59, 0xe0, 0x3a, 0x9d, 0x8e, 0x7e, 0x29, 0x18, 0xf2, 0x85, 0xc2, 0x20, 0x2d, 0x14, 0x3f, 0xfc, 0xd1, 0x51, 0xac, 0x5b, 0x7f, 0x32, 0x1e, 0x7e, 0xe4, 0x61, 0x3c, 0xfc, 0xc8, 0xc3, 0xf8, 0xfa, 0xb7, 0x6e, 0x01, 0x00, 0xfc, 0xcf, 0x77, 0xbe, 0x67, 0xaa, 0x8a, 0x74, 0xf7, 0xae, 0x07, 0xf0, 0xc2, 0x17, 0x6c, 0x40, 0xbb, 0xcd, 0xad, 0x9d, 0xe0, 0xaa, 0xf9, 0x35, 0x00, 0x28, 0x84, 0x50, 0x88, 0x86, 0x31, 0x96, 0x97, 0x07, 0x78, 0xc1, 0x0b, 0x2f, 0x9c, 0x5a, 0xdd, 0xed, 0x7b, 0x0f, 0x3c, 0x82, 0x66, 0xb3, 0x01, 0x05, 0x20, 0x8e, 0x22, 0x5c, 0x76, 0xc5, 0x15, 0xb6, 0x5f, 0x3b, 0xf1, 0xf5, 0x6c, 0x33, 0x70, 0xc6, 0x11, 0x86, 0x1c, 0xeb, 0x16, 0x74, 0x6b, 0xe4, 0xc9, 0x83, 0x03, 0x10, 0x00, 0x27, 0x9e, 0xd0, 0x42, 0xbb, 0x1d, 0x20, 0x6c, 0x30, 0x9c, 0xbd, 0xe5, 0xb9, 0x13, 0xef, 0xfb, 0xa6, 0xaf, 0xde, 0x0c, 0xc6, 0x08, 0xe6, 0x66, 0x43, 0x2c, 0xac, 0x69, 0x82, 0x73, 0x52, 0x62, 0x13, 0x4f, 0xa3, 0xe5, 0xfe, 0xe1, 0xbf, 0xf8, 0x1b, 0xbc, 0xf9, 0xcd, 0xbf, 0x0d, 0x4a, 0x15, 0x02, 0x1f, 0xa0, 0x1e, 0xc3, 0x5c, 0x8d, 0x7d, 0xef, 0x4a, 0xd5, 0xf8, 0x8e, 0xed, 0xdb, 0x71, 0xfb, 0xff, 0xb9, 0xab, 0x96, 0xd9, 0x6f, 0xb6, 0xff, 0xe7, 0x8d, 0x97, 0x60, 0xdd, 0xba, 0x05, 0xf4, 0xba, 0x5d, 0xfc, 0xd5, 0xff, 0xfe, 0x63, 0x3c, 0xe7, 0x59, 0xab, 0x40, 0x28, 0xd0, 0xef, 0xa7, 0x38, 0xfd, 0x8c, 0x97, 0xd7, 0x4a, 0xf6, 0xae, 0x5b, 0xb7, 0x80, 0x0f, 0x5f, 0xf9, 0x97, 0x63, 0x83, 0xf0, 0xad, 0xdf, 0xfc, 0x3b, 0x04, 0x3e, 0xb1, 0xcf, 0x5f, 0x31, 0xd9, 0x32, 0x19, 0x31, 0xf0, 0xeb, 0xdf, 0xba, 0xc5, 0x1e, 0xe7, 0xca, 0x0f, 0x5d, 0x05, 0x9f, 0xff, 0xd8, 0x12, 0xa5, 0x5c, 0x2d, 0xf0, 0x92, 0x27, 0x78, 0x7e, 0xad, 0xd3, 0x34, 0x45, 0xbb, 0xc5, 0xc0, 0xd7, 0x87, 0x88, 0x22, 0x81, 0xc3, 0x47, 0x62, 0x24, 0x29, 0x0a, 0xcf, 0x6d, 0x00, 0x61, 0xc8, 0x71, 0xe2, 0x09, 0x2d, 0x34, 0x1b, 0x3a, 0xa0, 0x9b, 0x82, 0xc8, 0x85, 0x6b, 0xd3, 0x94, 0xe2, 0xd7, 0x5f, 0xf7, 0x06, 0xbc, 0xfa, 0xc2, 0x0b, 0xed, 0x67, 0x5f, 0x69, 0xfb, 0xca, 0x57, 0xbe, 0x01, 0x21, 0x84, 0x76, 0xad, 0x23, 0x19, 0x82, 0x20, 0xb0, 0x52, 0xd5, 0x33, 0xed, 0x19, 0x1b, 0xac, 0x4c, 0xd5, 0x6e, 0xce, 0x35, 0x49, 0x12, 0x44, 0xb6, 0xa5, 0x0a, 0x48, 0x19, 0xe9, 0xb6, 0x55, 0xde, 0xe2, 0x4b, 0xe2, 0x14, 0xf3, 0x73, 0xa1, 0xed, 0x03, 0x0b, 0x21, 0x6c, 0x30, 0x77, 0x2d, 0x50, 0x5d, 0x43, 0x12, 0xd3, 0x6f, 0xb6, 0x10, 0x3c, 0xe3, 0x4e, 0x75, 0x3f, 0x5a, 0xc5, 0x6a, 0xa2, 0x57, 0xa1, 0x9a, 0x68, 0xda, 0x03, 0xd5, 0x8a, 0x7f, 0x5c, 0xcb, 0xb3, 0xea, 0x76, 0x59, 0x2a, 0xbc, 0x00, 0x70, 0x2f, 0xc4, 0x70, 0x38, 0xc4, 0x60, 0x30, 0xb0, 0x7d, 0x7c, 0xd3, 0x8f, 0x37, 0x95, 0xf8, 0x60, 0xa0, 0xc5, 0x65, 0xcc, 0x7c, 0xba, 0xef, 0xfb, 0xb6, 0x3f, 0x1f, 0x25, 0xd2, 0x29, 0x86, 0x99, 0xa3, 0xef, 0x90, 0x81, 0xd2, 0x14, 0x9c, 0x63, 0x6c, 0x91, 0x5a, 0xe4, 0x2f, 0x85, 0xe5, 0xab, 0x31, 0xc5, 0x31, 0x9c, 0xb1, 0xa5, 0xe5, 0x45, 0x78, 0x9e, 0x67, 0xdd, 0x35, 0x19, 0xa3, 0xd6, 0xa0, 0x25, 0x49, 0x12, 0xa8, 0x34, 0x43, 0x86, 0x14, 0x54, 0xf7, 0x03, 0x40, 0x88, 0x2a, 0x7a, 0xe8, 0xee, 0x81, 0xdd, 0x59, 0xc5, 0x3a, 0x32, 0x99, 0xeb, 0xf7, 0x5a, 0x0d, 0x86, 0xae, 0xf0, 0x8c, 0x79, 0x18, 0xeb, 0x4c, 0x5a, 0x94, 0x52, 0x08, 0xda, 0x61, 0x2d, 0x89, 0xca, 0xdc, 0x44, 0x0d, 0x99, 0x1a, 0xd6, 0xb9, 0xb2, 0xec, 0x40, 0x73, 0x53, 0x0d, 0x24, 0x34, 0x8e, 0xf6, 0x4f, 0x7d, 0x6f, 0xa4, 0x7a, 0x74, 0x21, 0xac, 0x8c, 0x49, 0x47, 0xc3, 0xde, 0xfe, 0xa0, 0xd5, 0xbc, 0x86, 0x54, 0xb9, 0x97, 0x7d, 0x51, 0x79, 0x9b, 0x31, 0x32, 0x45, 0x00, 0xe9, 0x9c, 0x93, 0x19, 0xd1, 0x72, 0x79, 0xfc, 0x24, 0x93, 0xb5, 0xc8, 0x47, 0xf1, 0xbd, 0x74, 0xe0, 0x4f, 0x09, 0x50, 0x02, 0xc6, 0x88, 0xf5, 0xdb, 0x1e, 0xc6, 0x03, 0x24, 0x51, 0xde, 0xcf, 0xe2, 0x01, 0x88, 0xa2, 0x48, 0xa2, 0x14, 0x2a, 0xcb, 0xc5, 0x6c, 0xa2, 0xc2, 0xb4, 0x86, 0xe5, 0x3d, 0x74, 0xe2, 0x78, 0x0f, 0xa7, 0x69, 0xc1, 0x28, 0x6d, 0x36, 0x38, 0xf6, 0xee, 0xff, 0xe9, 0xd3, 0xaa, 0x2a, 0xdd, 0xa0, 0x3e, 0x18, 0xf6, 0xd1, 0xed, 0x09, 0x3c, 0xe7, 0xd9, 0x6b, 0xd0, 0x6a, 0x79, 0x76, 0x61, 0x33, 0xe2, 0x0b, 0x86, 0x20, 0xa2, 0xcd, 0x04, 0x8c, 0xc8, 0x50, 0x62, 0xd9, 0xb0, 0x9b, 0x37, 0x35, 0xd1, 0x6a, 0x75, 0x9d, 0xbe, 0x9d, 0xc0, 0xc1, 0x43, 0x3d, 0xdc, 0xbd, 0xf3, 0xae, 0x89, 0x93, 0x8e, 0x1d, 0xdb, 0xb7, 0x23, 0x4b, 0x33, 0x3c, 0xf9, 0xd3, 0x03, 0x00, 0x74, 0x66, 0x1d, 0x86, 0x21, 0x84, 0x78, 0x28, 0x7f, 0xf6, 0x38, 0x8e, 0x1e, 0xf3, 0xf0, 0x07, 0xef, 0xfe, 0x93, 0xa9, 0x47, 0xcc, 0x76, 0xef, 0xda, 0x85, 0x20, 0x08, 0xf0, 0x9c, 0xe7, 0x9c, 0x09, 0xee, 0x71, 0xfc, 0xe0, 0xc1, 0x1f, 0xa1, 0xdb, 0xed, 0x4d, 0xe5, 0x05, 0xbf, 0x6f, 0xef, 0x7e, 0x9c, 0x79, 0xc6, 0x0c, 0xc2, 0x46, 0x13, 0x94, 0x00, 0x9e, 0xa7, 0x17, 0xfe, 0x76, 0xdb, 0x03, 0xa1, 0x14, 0xad, 0xa6, 0x0f, 0xcf, 0x63, 0x88, 0xa2, 0x78, 0xaa, 0xe4, 0xe3, 0x4b, 0x5f, 0xf9, 0x12, 0x5a, 0x4d, 0x86, 0x85, 0x35, 0x1e, 0x3c, 0x2f, 0x45, 0x12, 0xcb, 0x51, 0x71, 0x23, 0x3a, 0xf9, 0x1c, 0xfa, 0xe6, 0xcd, 0xab, 0xd0, 0x9a, 0x0d, 0xd0, 0x68, 0x78, 0x00, 0x04, 0xba, 0x87, 0x17, 0x27, 0x62, 0xc9, 0x5f, 0xf5, 0x91, 0x8f, 0xe0, 0x45, 0xff, 0xe5, 0xdc, 0xb1, 0x3f, 0xd3, 0x08, 0xd6, 0x94, 0x88, 0x87, 0xc3, 0x68, 0x19, 0xa7, 0x6d, 0x9e, 0x41, 0xe0, 0x33, 0x88, 0x2c, 0xc3, 0x2b, 0x5f, 0x75, 0x3e, 0x1e, 0xdc, 0xbd, 0x7b, 0xe4, 0x19, 0x36, 0x4e, 0x6e, 0xbf, 0x78, 0xfe, 0x2b, 0x46, 0x50, 0x9e, 0x6f, 0x7d, 0xe3, 0x6f, 0x47, 0xcc, 0x53, 0xcc, 0x7b, 0x18, 0xc5, 0x93, 0x41, 0xee, 0xff, 0xeb, 0x7d, 0xc5, 0xd8, 0xdc, 0xa5, 0x6f, 0x7b, 0x13, 0xfe, 0xf9, 0x33, 0x7f, 0x02, 0x06, 0x02, 0x10, 0x6a, 0x45, 0xb2, 0x28, 0xa5, 0x38, 0x7a, 0x98, 0xc0, 0x6f, 0xad, 0x83, 0x47, 0x1f, 0x71, 0x82, 0x87, 0x96, 0x0e, 0xee, 0xcc, 0x50, 0x28, 0x10, 0x2c, 0x2c, 0x48, 0x64, 0x19, 0xcd, 0x7b, 0xb4, 0x7a, 0xfd, 0x61, 0x94, 0xa0, 0xd9, 0x2c, 0x9c, 0xe1, 0xd6, 0xae, 0x5d, 0x5b, 0x83, 0xec, 0x0d, 0xf0, 0xad, 0xef, 0xdc, 0x84, 0x7f, 0xde, 0xf6, 0x39, 0x08, 0x21, 0xf1, 0xe2, 0x9f, 0xdf, 0x0c, 0xbf, 0xa5, 0x51, 0x89, 0xd3, 0x4f, 0x39, 0xdd, 0x4e, 0x62, 0x34, 0x9b, 0x6d, 0x6c, 0x3e, 0x75, 0x13, 0x96, 0x8e, 0x3e, 0xa8, 0x9d, 0xc5, 0x84, 0x2c, 0x11, 0xca, 0x18, 0x63, 0x38, 0x7a, 0x74, 0x11, 0xad, 0x56, 0x0b, 0xad, 0x56, 0x0b, 0x8d, 0x46, 0x03, 0xcd, 0x76, 0xab, 0x08, 0xd8, 0x49, 0x82, 0x58, 0x14, 0xfe, 0x02, 0x52, 0x14, 0x84, 0xb9, 0x2c, 0x33, 0xae, 0x5f, 0x43, 0xdb, 0x73, 0x8f, 0xa2, 0x24, 0x4f, 0x40, 0x28, 0x7c, 0x9f, 0xc1, 0xf3, 0xfd, 0x3c, 0x3e, 0xe8, 0x84, 0x26, 0xc9, 0x95, 0x1a, 0x4d, 0xe2, 0xa3, 0xd7, 0xac, 0x9c, 0xdc, 0xac, 0x24, 0xd2, 0x2c, 0xb5, 0xf0, 0xba, 0x21, 0xa0, 0x71, 0x8f, 0xe4, 0xee, 0x80, 0x4a, 0x57, 0xe6, 0x4a, 0xa3, 0x98, 0x94, 0x33, 0x50, 0xce, 0x90, 0xc4, 0x02, 0x0a, 0xc4, 0x8e, 0x7f, 0x51, 0x5a, 0x78, 0xdc, 0x0b, 0x21, 0x70, 0xf4, 0xd8, 0xa2, 0x4d, 0x18, 0xdc, 0x6b, 0x68, 0xaa, 0xe9, 0x56, 0x73, 0xb6, 0xa4, 0xaf, 0x6e, 0x89, 0xe1, 0x84, 0x83, 0xe6, 0xed, 0x5c, 0x46, 0x35, 0x12, 0xcb, 0x28, 0x03, 0xa3, 0x1e, 0x28, 0xc9, 0xed, 0x5b, 0x21, 0xc1, 0xb9, 0x28, 0xb5, 0xaf, 0x8c, 0x6b, 0xa7, 0x29, 0x4e, 0x29, 0x93, 0x96, 0xcd, 0x6e, 0x20, 0x7d, 0xed, 0x1c, 0x98, 0x43, 0xea, 0x34, 0x18, 0x29, 0x66, 0xcb, 0x71, 0x97, 0x5a, 0xd3, 0x99, 0x30, 0x0c, 0x2d, 0x97, 0x80, 0x73, 0xae, 0x25, 0x76, 0xbd, 0x2c, 0xff, 0xcc, 0x29, 0x84, 0x20, 0x50, 0x10, 0xe0, 0xbd, 0x5e, 0xaf, 0x34, 0x14, 0x6f, 0x32, 0xa1, 0xaa, 0x48, 0xc9, 0x4a, 0x32, 0xaf, 0xe3, 0x06, 0xeb, 0x4d, 0xaf, 0xc2, 0x0d, 0xe6, 0x6e, 0x05, 0x77, 0xe4, 0xc8, 0x91, 0x91, 0x40, 0x5c, 0x65, 0x88, 0xd6, 0x7d, 0x58, 0x93, 0x30, 0xb8, 0xc2, 0x08, 0x75, 0x01, 0x3d, 0x72, 0xdc, 0x94, 0xaa, 0x4e, 0x38, 0x4a, 0x29, 0x80, 0xe9, 0xfe, 0x84, 0x52, 0x6e, 0x16, 0x45, 0x6c, 0xbf, 0xc2, 0x98, 0x13, 0x94, 0x5f, 0x2a, 0x65, 0x38, 0x19, 0x35, 0xec, 0xfc, 0xf2, 0xb5, 0x49, 0x93, 0xc8, 0x7e, 0x8e, 0x3a, 0x68, 0xa5, 0x7c, 0x3d, 0x19, 0x60, 0x12, 0x89, 0xfc, 0x5c, 0xdd, 0x7e, 0x27, 0xe7, 0x1c, 0x14, 0x0c, 0x4a, 0x00, 0x12, 0x79, 0x1f, 0x27, 0x70, 0x74, 0x8c, 0x8d, 0x8c, 0xa0, 0x33, 0x5b, 0x3b, 0x33, 0x33, 0xab, 0xf7, 0xb7, 0x4a, 0xc1, 0xf3, 0x5a, 0xf8, 0xfe, 0xae, 0x9f, 0x62, 0xeb, 0xd6, 0x8f, 0x3f, 0x2d, 0x78, 0xdb, 0x0d, 0xea, 0x07, 0x0e, 0x1f, 0x43, 0x9a, 0x65, 0x00, 0x3c, 0x0b, 0x43, 0xb9, 0x24, 0x4b, 0x3b, 0xdb, 0x99, 0x4a, 0xdb, 0x63, 0x33, 0x6c, 0x77, 0x29, 0x81, 0x47, 0x1f, 0x7d, 0x52, 0xab, 0xe8, 0x2a, 0x20, 0x4e, 0x04, 0x9e, 0x3c, 0x30, 0x44, 0xe3, 0x9e, 0x1d, 0x13, 0x07, 0xf4, 0xaf, 0x7f, 0xeb, 0x16, 0x78, 0x9e, 0x87, 0xb9, 0xf9, 0x39, 0xb0, 0x1c, 0x06, 0x6e, 0x34, 0x1a, 0x10, 0x42, 0xe1, 0x91, 0x47, 0x13, 0x5c, 0x7c, 0xf1, 0xdb, 0x9f, 0x36, 0x34, 0x7e, 0xcf, 0xce, 0x9d, 0xda, 0x0f, 0x3e, 0xf0, 0xd1, 0x6e, 0xb7, 0xd0, 0xee, 0xb4, 0x31, 0x1c, 0x0c, 0xb1, 0xe3, 0xbb, 0x3b, 0x27, 0xde, 0xd7, 0xde, 0xbd, 0x7b, 0x11, 0x84, 0x0a, 0xab, 0xe6, 0x1b, 0xa5, 0xe7, 0xc0, 0x7d, 0xd6, 0xa5, 0x94, 0x38, 0x79, 0xe3, 0x2f, 0x4e, 0xc5, 0x6c, 0x37, 0xd0, 0xed, 0xec, 0x4c, 0x03, 0xad, 0x66, 0x50, 0x62, 0x2e, 0x17, 0xa3, 0xa7, 0xd1, 0x44, 0xfb, 0xbd, 0xf6, 0x13, 0x9f, 0x41, 0x10, 0x12, 0x84, 0xa1, 0x02, 0x63, 0x12, 0x94, 0x32, 0x34, 0x26, 0x20, 0x95, 0x1d, 0x3a, 0xa8, 0xdb, 0x15, 0xaf, 0x78, 0xf9, 0x4b, 0xc6, 0xfe, 0xcc, 0xa5, 0x6f, 0x7b, 0x13, 0xee, 0xde, 0x79, 0x17, 0x76, 0xde, 0xb3, 0x03, 0x5b, 0xb6, 0x9c, 0x83, 0x6f, 0x7f, 0xe7, 0x26, 0x0c, 0x06, 0xba, 0x67, 0x4b, 0x28, 0x70, 0xf5, 0x47, 0xff, 0x1c, 0xfd, 0x21, 0x70, 0xea, 0x69, 0x27, 0x97, 0xee, 0x67, 0x7f, 0x30, 0xc4, 0xce, 0x7b, 0x76, 0xe0, 0xec, 0x2d, 0xcf, 0x1d, 0x79, 0xae, 0x3d, 0x3f, 0x00, 0xc9, 0x49, 0x57, 0xd5, 0x59, 0x61, 0x21, 0xbc, 0x89, 0x9f, 0x7d, 0x17, 0x15, 0x38, 0xe7, 0x9c, 0xff, 0x17, 0x5b, 0xb7, 0x7e, 0x1c, 0xa7, 0x9f, 0x1e, 0xe0, 0xb4, 0xd3, 0x7e, 0x05, 0xaf, 0x38, 0xff, 0x95, 0xa5, 0x8a, 0xf9, 0x23, 0x57, 0x5d, 0x6a, 0x03, 0xe2, 0x43, 0x0f, 0xe9, 0xeb, 0x7d, 0xd2, 0x49, 0x7a, 0xcd, 0xe1, 0x5c, 0x33, 0x94, 0xb3, 0x2c, 0x83, 0x4c, 0x53, 0xc8, 0x3c, 0x68, 0x0e, 0x06, 0x1e, 0xd2, 0x54, 0xab, 0x4d, 0x0e, 0x06, 0x83, 0xd2, 0x9a, 0xac, 0xb5, 0xc0, 0x3d, 0x9c, 0xb4, 0x71, 0x1e, 0xdd, 0x5e, 0x8c, 0x6e, 0x37, 0xce, 0x4d, 0x8f, 0xf6, 0xd9, 0x96, 0xd0, 0x6b, 0x7f, 0xf5, 0x12, 0x5c, 0x76, 0xc5, 0x15, 0x0e, 0x8a, 0x4d, 0x30, 0x37, 0x1b, 0xa0, 0xd5, 0x6a, 0xa2, 0xd3, 0x09, 0x47, 0x48, 0xc9, 0x94, 0x6a, 0x24, 0x20, 0xce, 0x09, 0x66, 0x26, 0x70, 0x78, 0x9e, 0x87, 0xa0, 0x15, 0x14, 0x01, 0x50, 0x20, 0xff, 0x7b, 0xdf, 0xc2, 0xf4, 0x69, 0xe2, 0x17, 0xad, 0x00, 0xa1, 0xf2, 0x2a, 0x5f, 0x94, 0x60, 0x6d, 0x03, 0x5f, 0xbb, 0x4e, 0x67, 0xd6, 0x8e, 0xd4, 0xf3, 0x6d, 0x9c, 0x89, 0xa2, 0x48, 0x23, 0x89, 0x79, 0x35, 0xcc, 0x39, 0xc7, 0xcc, 0x4c, 0xcb, 0x5e, 0x3f, 0xf3, 0xfb, 0xae, 0xf3, 0xa6, 0x4b, 0x30, 0x33, 0x3f, 0x63, 0xb4, 0xe4, 0xcd, 0x7e, 0xca, 0xe4, 0x44, 0x56, 0x9a, 0xdf, 0x1e, 0x26, 0x3a, 0xf9, 0xf7, 0x1b, 0xe1, 0x48, 0x3b, 0xd6, 0x7c, 0x6e, 0x1e, 0xf8, 0xf0, 0x1b, 0x7a, 0xa4, 0x39, 0xc9, 0x13, 0x13, 0x93, 0x70, 0x50, 0x81, 0xfc, 0xef, 0x53, 0x8b, 0xa2, 0x18, 0xa5, 0x4a, 0x29, 0x25, 0x32, 0xd9, 0x1f, 0x89, 0x8d, 0x6e, 0x51, 0x4c, 0xc0, 0x4a, 0x70, 0x7d, 0x95, 0x78, 0xce, 0x58, 0x90, 0x93, 0x86, 0xf5, 0x71, 0x82, 0x7c, 0xaa, 0xc9, 0x5c, 0x3f, 0x25, 0x01, 0xca, 0xb4, 0x2b, 0x9c, 0x1e, 0x7f, 0x66, 0xe0, 0x73, 0x73, 0x73, 0x23, 0xc4, 0x05, 0x97, 0xd4, 0x51, 0x27, 0x42, 0x5f, 0xcd, 0x24, 0xaa, 0x4c, 0x70, 0x97, 0xcc, 0x50, 0xc7, 0x7e, 0x87, 0xed, 0x1a, 0x53, 0x1b, 0xc0, 0xec, 0xf1, 0x9d, 0xff, 0xa4, 0x2e, 0xc7, 0xc1, 0x58, 0x3d, 0xa4, 0x62, 0x94, 0xca, 0x5c, 0x31, 0x07, 0x37, 0xe3, 0x11, 0x44, 0x95, 0x19, 0xe5, 0x06, 0xa6, 0x51, 0x45, 0xc5, 0xaf, 0xb4, 0xf2, 0x8a, 0x75, 0xf3, 0x29, 0x84, 0x07, 0x00, 0x55, 0xf1, 0x03, 0xa6, 0x66, 0x34, 0xcc, 0xa8, 0x17, 0x51, 0xa7, 0x3f, 0x2e, 0x25, 0x28, 0x63, 0xe0, 0xc6, 0xbb, 0x3d, 0xcd, 0x4a, 0x12, 0xa4, 0x75, 0x02, 0x02, 0x1e, 0x93, 0xd6, 0x39, 0x0e, 0x8a, 0xe8, 0x60, 0x9d, 0xd1, 0x9c, 0x40, 0xe7, 0x81, 0xfb, 0x3e, 0xbc, 0x46, 0x53, 0x67, 0xc1, 0x71, 0x04, 0x45, 0x04, 0x5a, 0xed, 0xc0, 0x32, 0x30, 0x49, 0x26, 0x4b, 0x4c, 0x4e, 0x54, 0xda, 0x12, 0xc9, 0xb0, 0x70, 0x9b, 0x23, 0x34, 0x03, 0xa5, 0xc0, 0x43, 0x7b, 0x9e, 0xc0, 0x17, 0x6e, 0xb8, 0x01, 0x6f, 0xbe, 0xf4, 0xd2, 0xa9, 0x83, 0x9b, 0x1b, 0xd4, 0xa1, 0x12, 0x2c, 0x2e, 0xc6, 0x23, 0x0f, 0x65, 0xe9, 0xc1, 0xa4, 0x9e, 0x85, 0xa5, 0x34, 0xb2, 0x23, 0xb0, 0xb8, 0x18, 0xe1, 0x27, 0x8f, 0x0f, 0x11, 0xc7, 0xda, 0xa0, 0x47, 0x48, 0x85, 0x28, 0xca, 0xa6, 0x1a, 0xd1, 0xba, 0xf3, 0xdf, 0xef, 0xc2, 0xf9, 0xbf, 0xf8, 0x6a, 0x3b, 0x5b, 0xbe, 0x67, 0xcf, 0xd7, 0x71, 0xec, 0x08, 0xf0, 0xda, 0x5f, 0x7d, 0xcb, 0xd3, 0x0e, 0xe4, 0x66, 0xbb, 0xe3, 0xce, 0xdb, 0x40, 0x88, 0xc0, 0xa1, 0x03, 0xfb, 0xd1, 0x5d, 0xe2, 0x08, 0xbc, 0x04, 0x73, 0x73, 0x4d, 0x1c, 0x5b, 0x1c, 0x15, 0xc3, 0xb9, 0xf2, 0x43, 0x57, 0x8d, 0x85, 0x95, 0x77, 0x6c, 0xdf, 0x8e, 0x6f, 0x7f, 0xe7, 0x16, 0x6c, 0x79, 0xee, 0x09, 0x23, 0xb0, 0xf7, 0x91, 0x43, 0x04, 0xcf, 0x7d, 0xee, 0xcb, 0xf0, 0xa2, 0x73, 0xce, 0x99, 0x1a, 0x49, 0xb8, 0xf7, 0xde, 0xfb, 0xd1, 0x08, 0x39, 0x36, 0x9c, 0xd8, 0x46, 0xab, 0xe5, 0x3b, 0x8a, 0x65, 0x59, 0xc9, 0x22, 0x79, 0x38, 0xa1, 0x36, 0xc1, 0x3d, 0xf7, 0x7e, 0x1b, 0xff, 0xe5, 0x85, 0x27, 0x62, 0x6e, 0x3e, 0xd4, 0x8b, 0xac, 0x4c, 0x91, 0x76, 0x27, 0x57, 0x21, 0x5c, 0xe9, 0x7e, 0xac, 0x5b, 0xb7, 0x50, 0x12, 0x93, 0x79, 0xd7, 0xbb, 0xdf, 0x85, 0x3f, 0x7d, 0xff, 0x6f, 0xa3, 0xd3, 0xe6, 0x60, 0x3c, 0xc3, 0xd1, 0x63, 0x12, 0x97, 0xfd, 0xc9, 0x28, 0xca, 0xb2, 0x12, 0xe4, 0x1e, 0x65, 0x1b, 0xd1, 0xe0, 0x8f, 0x21, 0x0c, 0xc3, 0x11, 0x2b, 0x4d, 0x31, 0x85, 0x2e, 0xce, 0x65, 0x97, 0xbf, 0x0f, 0x49, 0xff, 0x00, 0xce, 0x7b, 0xc5, 0xaf, 0xe1, 0xec, 0x2d, 0xcf, 0xc5, 0xa6, 0xcd, 0x3f, 0x8f, 0xee, 0xe0, 0x70, 0x89, 0x20, 0x69, 0x18, 0xf7, 0x9a, 0xb4, 0xfb, 0x6c, 0xfc, 0xf2, 0xaf, 0x9c, 0x8f, 0xb5, 0x0b, 0xeb, 0xf0, 0x57, 0xff, 0xfb, 0x8f, 0x91, 0x24, 0x5d, 0x7b, 0x0e, 0x52, 0x8c, 0xaa, 0x18, 0x56, 0x5d, 0xb9, 0xcc, 0x3d, 0x33, 0xe3, 0x61, 0x94, 0x71, 0x24, 0x49, 0x0c, 0x25, 0x4d, 0x8b, 0xaf, 0x38, 0x37, 0xbf, 0xb5, 0x6e, 0xe4, 0xfa, 0x86, 0x01, 0xc3, 0x29, 0x27, 0xad, 0xc2, 0xc9, 0x27, 0xaf, 0x07, 0xa0, 0x70, 0xec, 0xd8, 0x12, 0xa4, 0x54, 0x98, 0x99, 0x99, 0x41, 0x2a, 0x53, 0x48, 0xa1, 0xd1, 0x45, 0x4d, 0xe0, 0xa5, 0x18, 0x44, 0x09, 0x68, 0xa2, 0xad, 0xa3, 0xbd, 0x9c, 0xc1, 0xae, 0x47, 0xc4, 0xda, 0xa0, 0x94, 0xe2, 0xd8, 0x52, 0x17, 0x4b, 0x4b, 0x4b, 0x48, 0x92, 0x04, 0x3e, 0xa3, 0x58, 0x58, 0x58, 0xc0, 0xda, 0xb5, 0x6b, 0x73, 0x78, 0x7a, 0x80, 0x28, 0x8a, 0xec, 0x73, 0x4d, 0x19, 0x9c, 0x60, 0x06, 0x3b, 0x99, 0xd3, 0xeb, 0x75, 0xa1, 0xc7, 0xa5, 0x8b, 0x82, 0x89, 0x52, 0x0e, 0xcf, 0x0b, 0xec, 0xef, 0x12, 0x42, 0x90, 0xc4, 0x22, 0x2f, 0xea, 0x08, 0x28, 0xf1, 0x30, 0x3b, 0x33, 0x83, 0x46, 0xa3, 0x81, 0x24, 0x49, 0xb0, 0xbc, 0xbc, 0x8c, 0x4c, 0x2a, 0xc4, 0x69, 0x62, 0x83, 0xb9, 0x0b, 0xe7, 0xdb, 0xd6, 0x0a, 0xe5, 0x60, 0xb9, 0x03, 0xa6, 0x54, 0x4a, 0x07, 0x41, 0xca, 0x40, 0x39, 0x87, 0x67, 0x92, 0x5b, 0x29, 0xad, 0x02, 0xa6, 0x29, 0x38, 0x00, 0x9d, 0xbc, 0x1b, 0x6f, 0x7b, 0xa5, 0x00, 0x6a, 0x98, 0xfe, 0x8a, 0x20, 0x8a, 0x53, 0xc4, 0x69, 0xae, 0x70, 0x97, 0x0b, 0x9c, 0xa5, 0x2a, 0x83, 0x48, 0xe2, 0xdc, 0x6e, 0x5a, 0x81, 0x7b, 0x2c, 0x9f, 0x6d, 0xce, 0x05, 0x7a, 0x18, 0x03, 0xf7, 0x8a, 0x49, 0x83, 0x38, 0xd6, 0xbc, 0x05, 0x91, 0x0a, 0x28, 0x41, 0x40, 0x18, 0x03, 0x41, 0xa1, 0x54, 0x1a, 0x27, 0x3a, 0x79, 0xf0, 0xc2, 0x10, 0xad, 0xf6, 0x6c, 0xfe, 0x3b, 0x29, 0xba, 0xbd, 0x2e, 0x86, 0xc3, 0x21, 0xa8, 0x1f, 0xc2, 0xa7, 0x1e, 0x28, 0x63, 0xc8, 0x14, 0x90, 0x65, 0x09, 0x78, 0x37, 0xd7, 0xa2, 0xae, 0xab, 0x72, 0xc3, 0x7c, 0xce, 0x74, 0x9c, 0xab, 0x4c, 0x75, 0x41, 0xaa, 0x06, 0x6e, 0x57, 0xa9, 0xab, 0x36, 0xa8, 0xfb, 0xbc, 0xd6, 0xa5, 0xc6, 0x15, 0x03, 0xa8, 0x1e, 0xdf, 0xfd, 0x73, 0xbf, 0x1f, 0x8f, 0x65, 0xb0, 0x0b, 0x21, 0xc0, 0x1c, 0x3f, 0xf5, 0xaa, 0x1c, 0xaa, 0x71, 0x6b, 0x5b, 0x89, 0x85, 0x6f, 0xaa, 0x5d, 0xa5, 0x46, 0x59, 0xf4, 0x26, 0x2b, 0x45, 0xa9, 0x0f, 0x4f, 0xac, 0xd5, 0x6b, 0x96, 0x49, 0x34, 0xc3, 0xd6, 0x88, 0x48, 0x8f, 0x3b, 0x16, 0x18, 0xf5, 0x8f, 0x6a, 0xbc, 0x9e, 0xe5, 0x72, 0xae, 0x9c, 0x83, 0x40, 0xbf, 0x58, 0x8a, 0x00, 0xd1, 0x30, 0x06, 0x67, 0x2c, 0x67, 0x39, 0x6a, 0x09, 0x50, 0xa5, 0x88, 0x16, 0x96, 0x51, 0x12, 0xbe, 0x1f, 0xd6, 0xba, 0xc8, 0x99, 0xaf, 0x78, 0x10, 0xdb, 0x7f, 0xcb, 0xd2, 0x04, 0xbe, 0xaf, 0x21, 0xfd, 0xad, 0xd7, 0x5f, 0x8f, 0x57, 0xbc, 0xf2, 0xfc, 0xa9, 0x7b, 0xc9, 0x6e, 0x50, 0xbf, 0xfa, 0xea, 0x6b, 0x40, 0xc9, 0xae, 0xd2, 0xbd, 0x32, 0x9b, 0x51, 0x55, 0x22, 0x28, 0xfc, 0x85, 0x0d, 0x8b, 0x75, 0xa9, 0x9b, 0x58, 0xd7, 0xa2, 0xb5, 0x6b, 0x56, 0x63, 0xcb, 0x96, 0x73, 0xf0, 0xca, 0x57, 0x9d, 0x3f, 0x55, 0x20, 0x0b, 0x03, 0x5e, 0x92, 0x4f, 0xed, 0x75, 0x2f, 0x1c, 0xa9, 0xa8, 0x9e, 0xce, 0xb6, 0x7b, 0xd7, 0x2e, 0x3c, 0xf2, 0x93, 0x03, 0x58, 0x35, 0x1f, 0x42, 0xca, 0x08, 0x51, 0x44, 0xc0, 0x88, 0x82, 0x1f, 0x08, 0xd4, 0x0d, 0x5a, 0x5c, 0xfa, 0xb6, 0x37, 0x3d, 0x25, 0xc3, 0x5d, 0x3f, 0xa3, 0x40, 0xbb, 0xfd, 0x22, 0xbc, 0xf0, 0x85, 0x2f, 0x78, 0xda, 0xa4, 0x40, 0x03, 0x3d, 0x7f, 0xf5, 0x6b, 0x5f, 0xc6, 0x9a, 0x55, 0x21, 0x1a, 0x0d, 0x86, 0x24, 0x89, 0x90, 0xa6, 0xa3, 0xfa, 0x00, 0x52, 0x4a, 0x44, 0xd1, 0x64, 0x0c, 0x75, 0x29, 0x24, 0x7a, 0xfd, 0x21, 0x14, 0x86, 0x05, 0x41, 0x28, 0x3b, 0xfe, 0x0a, 0xf7, 0x78, 0xee, 0xab, 0xb1, 0xdd, 0x6d, 0xb5, 0x9a, 0xd8, 0x7c, 0xea, 0x69, 0xd8, 0xb7, 0x77, 0x0f, 0x92, 0x24, 0xc6, 0x60, 0x90, 0xa0, 0xdf, 0x97, 0x78, 0xd9, 0x4b, 0x7f, 0x79, 0xec, 0x7e, 0xc6, 0x4d, 0x70, 0xfc, 0xaf, 0xf7, 0x5d, 0x6e, 0x25, 0x64, 0xd7, 0xcc, 0x1e, 0x2d, 0x15, 0x1c, 0x52, 0x4d, 0x2e, 0x64, 0xf4, 0xbc, 0xb3, 0x9e, 0x8f, 0x7f, 0xbc, 0xf6, 0x1f, 0xb1, 0xff, 0x27, 0xff, 0x80, 0x67, 0x3d, 0x6b, 0x15, 0xc2, 0x80, 0xe0, 0xc0, 0x13, 0x72, 0x84, 0x71, 0x0f, 0x00, 0x6f, 0xbd, 0xe4, 0x8f, 0xec, 0xe7, 0xb8, 0x71, 0xdb, 0x9f, 0xe2, 0x94, 0xcd, 0x6d, 0x50, 0x3a, 0x63, 0xd7, 0xa8, 0x7e, 0x2f, 0x1e, 0x29, 0x44, 0xdc, 0xf5, 0x22, 0x8a, 0x0a, 0x84, 0xcf, 0x54, 0x85, 0x69, 0x06, 0xf4, 0xfb, 0x19, 0x82, 0x40, 0xa3, 0x16, 0xc3, 0x61, 0x86, 0x2c, 0x4f, 0xec, 0x77, 0x7c, 0x77, 0x27, 0x5e, 0xfe, 0xf2, 0x97, 0xdb, 0xdf, 0x3f, 0xe3, 0xb4, 0xf5, 0x38, 0x78, 0xe8, 0x28, 0x82, 0x80, 0x63, 0x38, 0x1c, 0x60, 0x38, 0x1c, 0xe2, 0xd8, 0xb1, 0x25, 0xc4, 0x71, 0x8c, 0x23, 0x47, 0x8e, 0xc0, 0x0b, 0x02, 0x34, 0x1a, 0x0d, 0x74, 0x3a, 0x1d, 0xeb, 0x3c, 0x99, 0x24, 0x19, 0x86, 0xc3, 0x21, 0x96, 0x96, 0x96, 0x90, 0xa9, 0xa3, 0xe8, 0xf7, 0xb5, 0xcc, 0xa9, 0x3e, 0xbe, 0xae, 0x64, 0x39, 0xd3, 0x7d, 0x5d, 0x91, 0x26, 0xe8, 0xf7, 0x87, 0x20, 0xe4, 0x68, 0x89, 0x1d, 0x6f, 0x58, 0xf0, 0x94, 0x00, 0x47, 0x8f, 0x1d, 0xc6, 0xd1, 0x63, 0x87, 0xc1, 0x39, 0xc7, 0xda, 0xb5, 0x6b, 0xb1, 0x6a, 0xd5, 0x9c, 0x4e, 0x26, 0xd2, 0x14, 0x49, 0x52, 0xb4, 0xe6, 0x5c, 0x62, 0x5e, 0x51, 0x51, 0x93, 0x12, 0x2b, 0xdf, 0x54, 0xf0, 0xe6, 0xcf, 0x12, 0xb4, 0x24, 0x62, 0x25, 0x2b, 0x53, 0x4d, 0x2e, 0x67, 0xc4, 0x8d, 0x13, 0xb6, 0xe8, 0x20, 0xde, 0x48, 0xcc, 0x71, 0xd7, 0xb0, 0x3a, 0xe9, 0x56, 0x37, 0xfe, 0x78, 0x79, 0x20, 0x37, 0x96, 0xd8, 0x50, 0x65, 0xe4, 0xd5, 0xf4, 0xc8, 0xcd, 0xda, 0xe8, 0x16, 0xbd, 0xd6, 0xc9, 0xb3, 0x72, 0x4c, 0x4a, 0x8a, 0x75, 0xd4, 0x6a, 0x65, 0x28, 0x9a, 0x7f, 0x16, 0x62, 0xe7, 0xf4, 0xc3, 0xb0, 0x09, 0x30, 0x1f, 0x0a, 0x02, 0x69, 0x16, 0x01, 0x4a, 0x8f, 0xc1, 0x71, 0x63, 0xd1, 0x59, 0x27, 0xc1, 0x6a, 0x95, 0xbe, 0x6a, 0x82, 0x45, 0x9d, 0xba, 0x5c, 0x35, 0x28, 0x56, 0x7b, 0xf1, 0xd4, 0x31, 0x73, 0x21, 0x84, 0xa0, 0x97, 0x0e, 0x2b, 0xc1, 0x1c, 0xf9, 0xfc, 0x1e, 0x2c, 0x61, 0xcc, 0x69, 0x52, 0x8f, 0xfc, 0xb9, 0x2a, 0x7c, 0x63, 0x6e, 0x96, 0x95, 0xd7, 0x63, 0xf5, 0xfa, 0xc4, 0x36, 0xf3, 0x35, 0xfc, 0xb5, 0x7c, 0xee, 0xbc, 0x34, 0xc7, 0xae, 0x00, 0xd7, 0xb5, 0xd2, 0xf8, 0xc6, 0x17, 0xbb, 0x52, 0x56, 0xa9, 0x4e, 0x1a, 0x86, 0xa3, 0x54, 0xa0, 0xc6, 0x58, 0x26, 0x13, 0x88, 0x44, 0x34, 0xf2, 0x40, 0xb8, 0xb3, 0x88, 0x5a, 0x50, 0x88, 0x80, 0x13, 0x0f, 0x60, 0x5c, 0xcf, 0xe5, 0x4b, 0x8d, 0x24, 0x18, 0x1f, 0x7a, 0x7d, 0x9e, 0x5a, 0x6e, 0x96, 0x12, 0x0a, 0x2a, 0x29, 0x14, 0x55, 0x00, 0x28, 0x96, 0x8e, 0x96, 0x39, 0x04, 0xd5, 0x87, 0xd7, 0xf3, 0x42, 0xc7, 0x88, 0x81, 0x62, 0x61, 0x6d, 0x03, 0xfd, 0x41, 0x86, 0x7e, 0x3f, 0xc3, 0xc7, 0xfe, 0xee, 0x43, 0xf8, 0xc0, 0x9f, 0xfd, 0xdd, 0xd3, 0x0a, 0x22, 0xed, 0x4e, 0x07, 0x97, 0x5f, 0xf1, 0x5e, 0x7c, 0xfa, 0xda, 0x6b, 0x71, 0xe8, 0xc8, 0x9d, 0xb5, 0x63, 0x87, 0x00, 0xa0, 0x64, 0x79, 0x46, 0x55, 0x08, 0x85, 0x35, 0xab, 0x02, 0xcc, 0xcd, 0xea, 0xe7, 0xe0, 0x45, 0x2f, 0x9a, 0x5e, 0xa4, 0x45, 0xc3, 0xaa, 0xac, 0xf4, 0x39, 0x9e, 0xa9, 0x40, 0x6e, 0xb6, 0x6d, 0x37, 0x5e, 0x0f, 0xdf, 0xe7, 0x58, 0x58, 0x37, 0x87, 0x46, 0x50, 0x68, 0x35, 0x24, 0x99, 0x40, 0x92, 0x1e, 0xa9, 0xad, 0x34, 0x57, 0x0a, 0x6c, 0xaf, 0x7f, 0xed, 0x6f, 0xe0, 0x87, 0x3f, 0xbc, 0x1d, 0x97, 0x5d, 0xf1, 0xd9, 0x67, 0xf4, 0x3c, 0x1f, 0xb8, 0xff, 0x7e, 0x34, 0x1a, 0x1c, 0x1b, 0x36, 0x76, 0xd0, 0xee, 0x84, 0x08, 0x02, 0x6f, 0x84, 0xa8, 0x65, 0x9f, 0x11, 0x32, 0x19, 0xe4, 0x4e, 0x29, 0x41, 0xc0, 0x39, 0x9a, 0x21, 0xb7, 0x01, 0xfd, 0xc8, 0x72, 0x6f, 0xa2, 0x7d, 0x34, 0x9b, 0xcd, 0x15, 0x47, 0x27, 0xf7, 0xef, 0xdf, 0x8f, 0xdf, 0x7f, 0xc7, 0x3b, 0x00, 0x00, 0x17, 0xbf, 0xf1, 0x8d, 0xf8, 0xc1, 0x0f, 0xee, 0x40, 0xa3, 0xad, 0x90, 0x64, 0x19, 0xa2, 0x58, 0xe0, 0x45, 0xe7, 0x9c, 0xb3, 0xe2, 0x67, 0xaf, 0xab, 0xfe, 0x5d, 0x09, 0xd9, 0x2b, 0x3f, 0x74, 0x15, 0xc2, 0xe0, 0xc7, 0x20, 0x8c, 0x81, 0x02, 0xf0, 0x83, 0xc9, 0x95, 0xe2, 0xbe, 0xff, 0xe0, 0x03, 0x10, 0x42, 0x61, 0x30, 0xc8, 0xb0, 0xb4, 0x14, 0x81, 0xaf, 0x6a, 0xe1, 0xd9, 0xcf, 0xee, 0xe0, 0xc6, 0x6d, 0xdb, 0xec, 0x33, 0x7c, 0xd1, 0x1b, 0xde, 0x68, 0x13, 0x8f, 0x7d, 0x7b, 0xf7, 0xe0, 0x2b, 0x5f, 0xfe, 0x2b, 0x0c, 0x87, 0xba, 0xe2, 0x3e, 0xe3, 0x8c, 0x0b, 0xf0, 0xe8, 0xa3, 0xdf, 0xb6, 0xeb, 0x97, 0xbb, 0xd6, 0x1e, 0x3e, 0x94, 0xa2, 0xdd, 0x29, 0x60, 0xd7, 0x4e, 0xae, 0xc1, 0x6e, 0x7e, 0x56, 0x43, 0xef, 0xc0, 0x86, 0x0d, 0xb3, 0x58, 0x58, 0x68, 0x63, 0x71, 0x69, 0x11, 0x07, 0x0f, 0xc6, 0x88, 0x13, 0x09, 0x29, 0x94, 0x75, 0x3b, 0x6c, 0xb5, 0x7c, 0x70, 0xce, 0xf4, 0xa8, 0x69, 0x2f, 0x81, 0xcf, 0x7e, 0x82, 0x76, 0xbb, 0x01, 0xc6, 0x18, 0x86, 0xc3, 0x18, 0x4b, 0x4b, 0x4b, 0x38, 0x74, 0xa8, 0x8f, 0xf9, 0xb5, 0x6d, 0x0c, 0xa2, 0x18, 0x47, 0x17, 0x97, 0xa0, 0xa4, 0x56, 0x4a, 0x9b, 0x99, 0x99, 0x45, 0x18, 0x86, 0x68, 0x7a, 0x3e, 0x08, 0x0b, 0xc0, 0x58, 0x80, 0xe1, 0x70, 0xa8, 0x61, 0xf6, 0x41, 0x94, 0xa3, 0xb6, 0x79, 0x0b, 0x80, 0x11, 0x0c, 0x06, 0x43, 0x00, 0x07, 0x6c, 0xd1, 0xe4, 0xce, 0xb5, 0x87, 0x61, 0x80, 0x7e, 0xbf, 0x8f, 0x5e, 0x6f, 0x08, 0x21, 0x52, 0xf4, 0xba, 0x03, 0x1c, 0x3c, 0x78, 0xd0, 0x0a, 0xa6, 0xcc, 0xce, 0xea, 0xaa, 0xb3, 0xd1, 0x68, 0x20, 0x0c, 0x43, 0xb4, 0x5a, 0x2d, 0x44, 0x51, 0x64, 0xab, 0xfc, 0x28, 0xd2, 0xc2, 0x3d, 0x86, 0x79, 0x6e, 0x84, 0x67, 0xac, 0xb5, 0x28, 0x68, 0x29, 0x21, 0x12, 0x8e, 0xd4, 0xb7, 0x69, 0xf9, 0x56, 0x63, 0x55, 0xa9, 0x60, 0x6d, 0x74, 0x46, 0x92, 0x01, 0x37, 0x56, 0xb9, 0x01, 0xdd, 0xa0, 0x24, 0x2e, 0xe2, 0xaa, 0xe3, 0xb3, 0x0e, 0xe6, 0xfa, 0x67, 0xcd, 0xb4, 0x03, 0x03, 0x21, 0x0a, 0x59, 0x2a, 0xca, 0x05, 0xa2, 0x54, 0x90, 0x39, 0x79, 0x50, 0xb3, 0xec, 0x8d, 0x0c, 0x6c, 0xee, 0x66, 0x07, 0xd7, 0xf3, 0x84, 0xe0, 0xd1, 0x47, 0x1e, 0xb3, 0x31, 0x94, 0x52, 0x8e, 0x76, 0xbb, 0x8d, 0x55, 0xab, 0xd6, 0x60, 0x6e, 0x6e, 0x46, 0x5f, 0x97, 0x8c, 0x20, 0x49, 0x22, 0x48, 0x29, 0x20, 0x68, 0x0a, 0x0a, 0x0a, 0xbe, 0xb8, 0xb8, 0x58, 0x6b, 0x1e, 0xa2, 0x99, 0xb8, 0xed, 0xb1, 0x15, 0xb8, 0xb9, 0xb8, 0x2b, 0xe9, 0xb8, 0x0f, 0x87, 0xc3, 0x91, 0x80, 0x5b, 0x22, 0x89, 0x79, 0x0e, 0xcc, 0x6f, 0x48, 0xe0, 0x39, 0xfc, 0x4d, 0x40, 0x6a, 0xcd, 0x01, 0x4a, 0xb2, 0x8a, 0x42, 0x8e, 0xad, 0xe0, 0x0d, 0xc4, 0x51, 0x0d, 0x78, 0x6e, 0x2f, 0xa3, 0xea, 0x4e, 0x56, 0xfd, 0x33, 0x1b, 0x63, 0xcb, 0x5a, 0xfc, 0x3b, 0xb7, 0x92, 0x8c, 0x4a, 0x01, 0x90, 0x04, 0x44, 0xe9, 0x6c, 0x84, 0x82, 0x81, 0x82, 0x6a, 0xd5, 0x3b, 0x52, 0x64, 0x6e, 0x9c, 0x71, 0xf0, 0x5c, 0x3c, 0x86, 0x79, 0xa1, 0xed, 0xa5, 0x00, 0x0c, 0x2a, 0x03, 0x44, 0x3e, 0xc2, 0xa7, 0xec, 0xbe, 0x74, 0x4b, 0x82, 0x2a, 0x05, 0x22, 0xb5, 0x9e, 0xb6, 0xc8, 0x88, 0x65, 0xf9, 0xaf, 0x34, 0x85, 0x90, 0x26, 0xd2, 0x66, 0x2c, 0x8c, 0x12, 0xb4, 0x5a, 0x40, 0xab, 0x19, 0x21, 0x8a, 0x04, 0xee, 0xbe, 0x6f, 0x1f, 0x3e, 0xf5, 0xc9, 0xeb, 0x56, 0x54, 0xde, 0x3a, 0xde, 0xed, 0xcd, 0x97, 0x5e, 0x8a, 0x1d, 0xdb, 0xcf, 0xc4, 0x9d, 0x77, 0x7e, 0xa6, 0xf6, 0x5e, 0x29, 0x69, 0xf8, 0x0b, 0xfa, 0x05, 0xf4, 0x7d, 0x8a, 0x66, 0x13, 0x90, 0x52, 0x4f, 0x58, 0xb8, 0x62, 0x32, 0x3b, 0xb6, 0x6f, 0xc7, 0x86, 0x8d, 0x1b, 0x26, 0x42, 0x0f, 0x38, 0x23, 0xf8, 0x59, 0x6d, 0xbb, 0x77, 0xed, 0xc2, 0x8e, 0xef, 0xee, 0x44, 0xa7, 0xed, 0xc3, 0xe3, 0x0a, 0xa1, 0xcf, 0xc0, 0x38, 0x45, 0x18, 0x06, 0x18, 0x24, 0x09, 0x4e, 0x3c, 0x71, 0xf2, 0xe4, 0xe1, 0x45, 0xe7, 0x9c, 0x83, 0x1f, 0xff, 0xf8, 0xf6, 0x67, 0xfc, 0x5c, 0xb7, 0x6e, 0xfd, 0x38, 0x38, 0xa3, 0x68, 0x36, 0x7d, 0xf8, 0x3e, 0xb7, 0xfd, 0xca, 0xaa, 0xc2, 0xa3, 0x51, 0x2f, 0x9b, 0x64, 0x0b, 0x7c, 0xaa, 0xb9, 0x26, 0x52, 0x8f, 0x21, 0x72, 0x0e, 0xb4, 0xdb, 0x33, 0x4f, 0x49, 0x84, 0x73, 0x93, 0x9b, 0x53, 0x4f, 0x3b, 0x19, 0xfb, 0xf7, 0xef, 0x3f, 0xae, 0x6a, 0xfd, 0x8e, 0x3b, 0x6f, 0xc3, 0x1f, 0xbc, 0xfb, 0x4f, 0xb0, 0x6f, 0xef, 0x7e, 0xec, 0xdd, 0xbb, 0x17, 0x6f, 0x78, 0xc3, 0xca, 0xe8, 0xcd, 0x4a, 0x50, 0xfe, 0x8d, 0xdb, 0xb6, 0xe1, 0x7b, 0x77, 0x7f, 0x13, 0xab, 0x56, 0x13, 0xa4, 0x89, 0x69, 0x93, 0x11, 0x24, 0x13, 0x0a, 0xe3, 0xec, 0xdb, 0xbb, 0xc7, 0x72, 0x26, 0xa2, 0x58, 0xe0, 0xd1, 0x9f, 0xf4, 0x71, 0xf4, 0x58, 0x8a, 0xb5, 0x6b, 0x52, 0xdc, 0xf7, 0xc0, 0xe7, 0x30, 0xe8, 0xf5, 0xf0, 0xe6, 0x4b, 0x2f, 0xb5, 0xe7, 0xb9, 0x63, 0xfb, 0x76, 0xec, 0xb8, 0xe3, 0xb3, 0x58, 0x5a, 0x1c, 0x60, 0xff, 0x23, 0xc7, 0xf0, 0xfb, 0xbf, 0xf7, 0xc7, 0x38, 0xf7, 0xbc, 0xf3, 0xf0, 0xd6, 0x4b, 0x6e, 0xc2, 0x86, 0x0d, 0x12, 0x8d, 0xb0, 0x53, 0x6a, 0x57, 0xbe, 0xe9, 0x92, 0xf7, 0x60, 0xd3, 0xa6, 0x4d, 0xf8, 0xd4, 0x27, 0xaf, 0x43, 0xaf, 0xfb, 0x40, 0x69, 0x6d, 0x75, 0x59, 0xf4, 0xad, 0xa6, 0x07, 0x29, 0x19, 0x38, 0x0f, 0xd1, 0x6e, 0x79, 0x9a, 0x75, 0x3d, 0x94, 0x78, 0xe4, 0x11, 0xed, 0x0f, 0xfe, 0x9c, 0x33, 0xd7, 0x61, 0x6e, 0xae, 0x89, 0x7e, 0xef, 0x21, 0x78, 0x8c, 0x58, 0x1b, 0xd1, 0x66, 0xb3, 0x89, 0x75, 0xeb, 0x74, 0x41, 0x71, 0xf4, 0xe8, 0x51, 0xc4, 0x19, 0xc0, 0xf3, 0xbe, 0xac, 0xde, 0x3f, 0x87, 0x52, 0x04, 0x71, 0xa4, 0xc7, 0xb7, 0x58, 0x20, 0x91, 0x24, 0x29, 0xa4, 0x02, 0x14, 0x18, 0x24, 0x24, 0x84, 0xa4, 0x3a, 0x80, 0x48, 0x80, 0xb7, 0x1a, 0x10, 0x0a, 0xb6, 0x6a, 0xd6, 0x45, 0x44, 0xe1, 0x88, 0xf9, 0xd3, 0x03, 0x07, 0x9c, 0xb5, 0x98, 0x20, 0xce, 0x04, 0xd4, 0x20, 0x42, 0x92, 0x69, 0x62, 0xd7, 0x81, 0x03, 0x07, 0x6c, 0x2b, 0xc1, 0x0d, 0xd4, 0x46, 0x69, 0x4d, 0x29, 0x61, 0xcf, 0xcd, 0x14, 0x07, 0x6e, 0x12, 0xa4, 0x1c, 0x45, 0x51, 0x99, 0xb7, 0x68, 0x0b, 0x6d, 0x00, 0xa1, 0xfb, 0xdc, 0x63, 0xf8, 0x55, 0xda, 0x2d, 0x33, 0xad, 0xad, 0xc2, 0x75, 0x10, 0x55, 0x48, 0x45, 0x56, 0x4e, 0x04, 0xa4, 0x26, 0x43, 0x53, 0x6b, 0x29, 0x2b, 0xad, 0xcc, 0x77, 0xb5, 0xff, 0x5e, 0x20, 0xb8, 0x4e, 0x01, 0x58, 0x8d, 0x67, 0xd4, 0x11, 0x8e, 0x01, 0xcb, 0x2b, 0xc8, 0x62, 0xbc, 0xcf, 0xf3, 0x02, 0x27, 0x41, 0x22, 0xe0, 0xdc, 0x07, 0x01, 0x45, 0x9a, 0xe8, 0x96, 0x0d, 0xf1, 0x9a, 0x79, 0xab, 0xc2, 0x87, 0x54, 0x99, 0x86, 0xdc, 0xe7, 0xe6, 0xe6, 0xc6, 0xba, 0xea, 0xb8, 0x50, 0xf5, 0xb8, 0xa0, 0x56, 0xdd, 0xdc, 0x85, 0x7c, 0x76, 0x76, 0x76, 0xec, 0x58, 0x1a, 0xa0, 0xdd, 0xd6, 0xea, 0x12, 0x81, 0x02, 0x72, 0xe1, 0x95, 0x8b, 0xa1, 0x4a, 0x64, 0x34, 0xe2, 0xf8, 0x23, 0x57, 0x95, 0x74, 0x00, 0x20, 0x13, 0xa3, 0x8a, 0x5e, 0x2e, 0xa2, 0x40, 0x41, 0x57, 0xfc, 0x4c, 0xac, 0x86, 0x19, 0x5b, 0xf9, 0xb4, 0x15, 0xd4, 0x80, 0x94, 0xf4, 0x79, 0x89, 0x84, 0x35, 0x36, 0x28, 0x18, 0x94, 0x14, 0x44, 0xe6, 0x15, 0xb8, 0x2c, 0xae, 0xb3, 0x80, 0xee, 0xef, 0x08, 0x53, 0xe1, 0xcb, 0xf2, 0x8c, 0x26, 0x35, 0xa6, 0x2f, 0xaa, 0x50, 0x42, 0x1b, 0x24, 0xbd, 0xb2, 0x99, 0x42, 0xe5, 0xc1, 0xf2, 0x83, 0x96, 0x73, 0xee, 0x04, 0x61, 0xc0, 0xb1, 0xe1, 0xc4, 0x19, 0x08, 0x01, 0x2c, 0x2e, 0x45, 0xf8, 0xd2, 0x57, 0xbe, 0x84, 0x17, 0xbe, 0xf0, 0x05, 0xcf, 0x48, 0x9f, 0xf9, 0xdc, 0xf3, 0xce, 0xc3, 0x19, 0x67, 0x3e, 0x1b, 0x37, 0x7c, 0x6e, 0x1b, 0x1e, 0x7b, 0xf4, 0x7e, 0xcc, 0xaf, 0x76, 0x9e, 0x1d, 0x55, 0xb8, 0x7d, 0x99, 0x5e, 0x3a, 0x21, 0x04, 0xad, 0x56, 0x1b, 0x42, 0x48, 0x0c, 0x06, 0x8f, 0xd8, 0xc5, 0x7f, 0xc3, 0xc6, 0x0d, 0x4f, 0x29, 0x67, 0x59, 0xdd, 0x3a, 0x1d, 0xf6, 0x33, 0x0b, 0xe8, 0x57, 0x7f, 0xf4, 0xcf, 0x75, 0x75, 0x1a, 0x30, 0x30, 0x2a, 0xa1, 0x64, 0x0a, 0x91, 0xe9, 0x64, 0x49, 0x29, 0x0a, 0xcf, 0xa3, 0x53, 0x09, 0xf6, 0x74, 0xda, 0x8d, 0x67, 0x3c, 0xf1, 0xd8, 0xbb, 0xff, 0xa7, 0x58, 0xb3, 0xb6, 0x09, 0x50, 0x05, 0x01, 0x85, 0x24, 0x4b, 0xc7, 0xbe, 0x9b, 0xc3, 0x09, 0x21, 0xf7, 0x4d, 0x27, 0xcf, 0x63, 0xcd, 0xaa, 0x39, 0x04, 0x21, 0x2b, 0x7a, 0xbd, 0xd1, 0xca, 0x15, 0x7a, 0x15, 0xa9, 0x58, 0x58, 0xbd, 0x1e, 0xdf, 0xf9, 0xf6, 0x6d, 0x63, 0x03, 0xf3, 0xa6, 0x4d, 0x9b, 0xec, 0x9f, 0x2f, 0xbe, 0xf8, 0xed, 0x13, 0x1b, 0xdf, 0x54, 0xef, 0x43, 0xaf, 0xdb, 0xc5, 0x07, 0xdf, 0xff, 0x4e, 0xf4, 0xe3, 0x2e, 0x9a, 0x4d, 0x0f, 0x83, 0x98, 0xc3, 0xf3, 0xf4, 0xf8, 0x24, 0xa1, 0x14, 0x8c, 0x4f, 0xa6, 0x87, 0xdc, 0xef, 0x0f, 0x40, 0x29, 0x41, 0xa3, 0xa1, 0xf7, 0x01, 0x28, 0xf4, 0xba, 0x11, 0x16, 0x17, 0x87, 0x88, 0xa2, 0x0c, 0x77, 0xdc, 0x79, 0x9b, 0xe5, 0xa6, 0xfc, 0xcd, 0x47, 0xff, 0x06, 0x3f, 0xfc, 0xd1, 0x76, 0x1c, 0x5b, 0x1c, 0xe2, 0xf4, 0x33, 0xb6, 0xe0, 0xb2, 0xcb, 0xfe, 0xd8, 0x7e, 0x96, 0x2d, 0x5b, 0xce, 0xc1, 0xe1, 0xc3, 0x3b, 0xd0, 0xef, 0xf7, 0x4b, 0xee, 0x62, 0x06, 0x51, 0x78, 0xd7, 0xbb, 0xdf, 0x85, 0xb7, 0x5e, 0x72, 0x11, 0xd6, 0xae, 0xc9, 0x0a, 0x17, 0xad, 0x3c, 0xf0, 0xb9, 0x8e, 0x66, 0xf3, 0xf3, 0x33, 0xf9, 0xbf, 0x53, 0xf4, 0x7a, 0x29, 0x96, 0xbb, 0x02, 0x94, 0x10, 0xac, 0x59, 0xdd, 0x46, 0xbb, 0x1d, 0xe2, 0xf7, 0xde, 0xf9, 0xd7, 0xb8, 0xec, 0xf2, 0xf7, 0x21, 0x4d, 0x0e, 0xeb, 0x16, 0x60, 0xb3, 0x89, 0x4e, 0x67, 0x16, 0xed, 0x76, 0x1b, 0x27, 0x9e, 0x78, 0x22, 0x78, 0xa0, 0xa1, 0xef, 0x23, 0x47, 0x8e, 0xe0, 0xe0, 0x81, 0xc3, 0x18, 0x0e, 0x62, 0x78, 0xbc, 0x81, 0x66, 0x33, 0x40, 0x10, 0x34, 0xb0, 0x9c, 0x8f, 0x6c, 0x65, 0xa9, 0x41, 0x3d, 0x01, 0x29, 0x0d, 0x99, 0x8e, 0x23, 0x8a, 0x92, 0x7c, 0x04, 0x2e, 0x00, 0xcf, 0xaf, 0xa5, 0x41, 0x20, 0x4d, 0x2f, 0xba, 0xdf, 0xef, 0x63, 0x30, 0xe8, 0x69, 0xc2, 0x58, 0x27, 0x40, 0xe0, 0x37, 0xf3, 0x91, 0xb2, 0x04, 0xed, 0x76, 0x1b, 0x69, 0x9a, 0x16, 0x1a, 0xe8, 0xc6, 0x0c, 0x26, 0x47, 0x32, 0xbb, 0xdd, 0xfe, 0x88, 0x18, 0x4b, 0x49, 0xbc, 0xc7, 0x91, 0x4e, 0xad, 0x13, 0xfe, 0x72, 0xf7, 0x57, 0xe7, 0x68, 0xe6, 0x72, 0x28, 0xaa, 0x8e, 0xa1, 0x25, 0x5f, 0x0f, 0x47, 0xf9, 0xce, 0xdd, 0x2f, 0x21, 0xca, 0x4e, 0xed, 0x54, 0x8b, 0x2a, 0xb7, 0x70, 0xac, 0xaa, 0xa7, 0x5a, 0xfd, 0xfc, 0xdc, 0xc2, 0xd8, 0xb4, 0x24, 0x4d, 0xab, 0xc2, 0xc4, 0x94, 0x99, 0x99, 0xb9, 0x22, 0xa0, 0x4b, 0x23, 0xd4, 0x46, 0x10, 0x45, 0x3a, 0xe9, 0xf1, 0x3d, 0xcd, 0x9a, 0xf7, 0x40, 0x21, 0x14, 0x41, 0x12, 0xa7, 0xe0, 0x86, 0x45, 0x37, 0x2e, 0xa8, 0xd6, 0x05, 0xc4, 0x6a, 0x8f, 0xdc, 0x0d, 0x78, 0xee, 0xef, 0x0c, 0x06, 0x83, 0xda, 0xde, 0xb4, 0x85, 0xbe, 0xb9, 0x1a, 0x9b, 0x10, 0x10, 0x42, 0xac, 0xf7, 0x2f, 0xa9, 0xb0, 0x3f, 0xcc, 0x3e, 0x38, 0xe1, 0x25, 0x41, 0x7e, 0x77, 0x34, 0x45, 0xff, 0x4e, 0x7d, 0xc2, 0xe1, 0x92, 0x50, 0xea, 0x2a, 0x7f, 0x1b, 0xf0, 0x95, 0x4b, 0xd6, 0x1b, 0x0d, 0xec, 0x32, 0x35, 0x5a, 0xe5, 0xd0, 0xd2, 0xac, 0xce, 0xc8, 0x99, 0xcc, 0x34, 0x54, 0x58, 0x26, 0x0e, 0x8a, 0x32, 0x29, 0x2e, 0xff, 0x1e, 0x8a, 0x42, 0x11, 0xa2, 0x83, 0x38, 0xa1, 0xfa, 0xa3, 0xea, 0x79, 0x39, 0x67, 0x0e, 0xd3, 0x04, 0xc7, 0x3c, 0x69, 0x61, 0x0c, 0xbe, 0xcf, 0x6a, 0x49, 0x8b, 0xe6, 0xff, 0xc2, 0x6a, 0xa8, 0x53, 0xdb, 0x93, 0x9a, 0x9b, 0xf3, 0x20, 0x95, 0xae, 0x30, 0xfa, 0xfd, 0x04, 0x97, 0x5d, 0x71, 0x05, 0xb6, 0x7e, 0xfa, 0xba, 0xa7, 0xd5, 0x4f, 0x77, 0x17, 0xf0, 0x77, 0xbd, 0xfb, 0x5d, 0xf8, 0xda, 0x57, 0xbf, 0x86, 0xfb, 0xee, 0xfb, 0x1c, 0xa2, 0x28, 0xb2, 0x08, 0x84, 0x35, 0x6f, 0x70, 0x5e, 0x80, 0xc3, 0x87, 0x9f, 0xc4, 0x30, 0x12, 0x78, 0xec, 0xf1, 0x01, 0x7e, 0xed, 0x37, 0xba, 0x00, 0x16, 0xa6, 0x3a, 0x8f, 0x46, 0xe3, 0x67, 0x63, 0xe3, 0xf9, 0xe9, 0x6b, 0xaf, 0xc5, 0x43, 0x7b, 0x9e, 0x40, 0xab, 0xe9, 0x61, 0xc3, 0x89, 0x1d, 0xcc, 0x74, 0x02, 0x3b, 0x6a, 0x43, 0xa0, 0x72, 0x82, 0x0e, 0x8e, 0xbb, 0xea, 0x2c, 0x25, 0x8b, 0xde, 0x33, 0x8b, 0x2a, 0x6c, 0xbb, 0xf1, 0x7a, 0x3d, 0xc7, 0x7c, 0x62, 0x13, 0x61, 0xc8, 0x6d, 0x45, 0x56, 0x95, 0x66, 0xb6, 0x1c, 0x13, 0x39, 0x29, 0x23, 0x4c, 0xa0, 0xdf, 0xef, 0x22, 0x8a, 0x72, 0xc3, 0x10, 0x95, 0x61, 0x30, 0x98, 0x6c, 0x1f, 0x27, 0x9c, 0xb0, 0x80, 0x8f, 0x5d, 0x73, 0x0d, 0xde, 0xf2, 0xd6, 0x4b, 0x6a, 0x13, 0xa0, 0x76, 0xa7, 0x83, 0x76, 0x5b, 0x57, 0x93, 0xcf, 0x7f, 0xc1, 0x0b, 0x46, 0xfe, 0xfd, 0x6b, 0x5f, 0xfd, 0x1a, 0xfe, 0xe3, 0xfb, 0x3f, 0x1a, 0x4b, 0x38, 0xac, 0xee, 0xf3, 0x96, 0x9b, 0x6f, 0xc6, 0xf7, 0x1e, 0xd8, 0x8f, 0xc0, 0xa7, 0x08, 0x42, 0xad, 0xc0, 0x36, 0x3b, 0x1b, 0x22, 0x0c, 0xfd, 0x92, 0xad, 0xee, 0x64, 0xcf, 0x1a, 0xc7, 0x29, 0xa7, 0xcc, 0xa0, 0xdd, 0xf6, 0x91, 0xa5, 0x09, 0xd2, 0x44, 0xe2, 0xa7, 0x4f, 0x0e, 0x71, 0xd6, 0x99, 0x1b, 0xf1, 0x81, 0x3f, 0xfb, 0x3b, 0x9b, 0x5c, 0xdd, 0x76, 0xfb, 0x6d, 0x78, 0xd6, 0xa9, 0xf3, 0x78, 0xc7, 0x3b, 0xfe, 0x74, 0xe4, 0xd9, 0x78, 0xd7, 0xbb, 0xdf, 0x85, 0x03, 0x07, 0x2e, 0xb2, 0xcc, 0xff, 0x3a, 0x9e, 0xc1, 0x6b, 0x5f, 0xfb, 0x3f, 0xf0, 0xef, 0x77, 0xfc, 0x53, 0x29, 0xc0, 0xb8, 0xc4, 0x46, 0x5d, 0xb0, 0x48, 0x1b, 0xf0, 0x9a, 0x4d, 0x0f, 0x67, 0x3e, 0x6b, 0xb5, 0x46, 0x37, 0x69, 0x8a, 0xc7, 0x0f, 0x14, 0xd7, 0xe2, 0xe1, 0x87, 0xf7, 0x40, 0x08, 0x05, 0xdf, 0xf7, 0xd0, 0x6c, 0xb6, 0x2d, 0xa9, 0x96, 0x85, 0xf3, 0x08, 0xc3, 0x10, 0xbe, 0x1f, 0xe2, 0xc4, 0x8d, 0x27, 0x41, 0x49, 0xbd, 0xa6, 0x2f, 0x77, 0xbb, 0x58, 0x5c, 0x5c, 0xc6, 0xaa, 0xb5, 0x0b, 0xa0, 0x2c, 0x80, 0xe7, 0xe7, 0x16, 0xd1, 0xa9, 0xd1, 0x2a, 0x4f, 0x30, 0x18, 0x0e, 0x40, 0x89, 0x42, 0xb3, 0xa9, 0x13, 0x1c, 0x42, 0x72, 0xa5, 0xb7, 0x4c, 0x93, 0x8e, 0x01, 0xa0, 0xd5, 0x9e, 0x01, 0xf7, 0x02, 0x04, 0x61, 0x13, 0x59, 0x96, 0x20, 0xcd, 0x14, 0x8e, 0x2d, 0x2d, 0x5b, 0xb6, 0x7b, 0xc3, 0x57, 0x76, 0xe6, 0xdd, 0x7c, 0x36, 0x37, 0xe0, 0x19, 0x77, 0x38, 0xb7, 0x7d, 0xeb, 0xb6, 0x54, 0x33, 0x82, 0x8a, 0x7e, 0x0a, 0x20, 0x15, 0xb1, 0x81, 0xde, 0xd8, 0x53, 0x17, 0x49, 0x81, 0x2a, 0x25, 0x4f, 0xcc, 0xf7, 0x40, 0x94, 0x02, 0x91, 0x12, 0xc4, 0x79, 0x47, 0x32, 0xa5, 0xfb, 0xe1, 0xba, 0xea, 0x57, 0x76, 0x6c, 0x59, 0x4a, 0xed, 0x7f, 0x45, 0x29, 0x05, 0x14, 0xc0, 0xa9, 0xb4, 0x9c, 0xa7, 0xd1, 0x11, 0x6f, 0x58, 0x99, 0xf0, 0xa2, 0xca, 0x87, 0x25, 0x32, 0x1a, 0xc1, 0x2d, 0x83, 0x4e, 0x9b, 0x22, 0xc7, 0xf8, 0x98, 0x28, 0xa5, 0xd0, 0xeb, 0xf6, 0x6d, 0x72, 0x13, 0x04, 0x8d, 0x3c, 0xe0, 0xa7, 0xb9, 0x22, 0x1f, 0x43, 0x36, 0x1c, 0x00, 0x9c, 0x82, 0x71, 0x80, 0x09, 0x01, 0x92, 0xa5, 0xe0, 0xe3, 0x82, 0x79, 0x5d, 0x55, 0xeb, 0x2e, 0x0a, 0xd5, 0x0a, 0xbe, 0xce, 0x6f, 0xdc, 0xc0, 0x23, 0x6e, 0x1f, 0xcf, 0x95, 0xe7, 0x3b, 0x12, 0x2d, 0x8e, 0x04, 0xc9, 0xaa, 0x2a, 0x4e, 0x5d, 0xb2, 0x60, 0xbe, 0x1f, 0xc6, 0xc3, 0x91, 0x2c, 0xca, 0xfd, 0x19, 0xaf, 0x11, 0xd4, 0x06, 0xf2, 0xe2, 0x67, 0xca, 0x01, 0xaf, 0x4c, 0x7a, 0x03, 0xa8, 0xac, 0x49, 0x64, 0xd4, 0x68, 0x62, 0x43, 0x14, 0x01, 0x55, 0xd4, 0x7e, 0xa9, 0xbc, 0xfa, 0xf6, 0x79, 0x50, 0x61, 0x16, 0xc1, 0xb2, 0xe5, 0xf3, 0x0b, 0x68, 0x15, 0x8b, 0x08, 0x21, 0x50, 0xb9, 0xe8, 0x8a, 0x94, 0x46, 0x94, 0x86, 0x41, 0xa6, 0x19, 0x14, 0xf4, 0x98, 0x10, 0x51, 0x5a, 0x5d, 0x4a, 0xd3, 0xcb, 0x34, 0xdb, 0xd2, 0xa2, 0x02, 0xa4, 0xf8, 0x2c, 0xc8, 0xbf, 0x55, 0x75, 0x3e, 0xc7, 0x54, 0xa2, 0x11, 0xfa, 0x68, 0x36, 0x3c, 0x44, 0x91, 0xd6, 0x96, 0xbe, 0xf8, 0xcd, 0x97, 0x3c, 0x63, 0x41, 0x1d, 0x00, 0x5e, 0x7c, 0xce, 0x4b, 0xb0, 0x77, 0xef, 0x5e, 0x1c, 0x3a, 0xf4, 0x5d, 0xfb, 0xe0, 0xba, 0x2c, 0x77, 0x73, 0xed, 0xda, 0xed, 0x36, 0x14, 0x52, 0xfc, 0xfa, 0xaf, 0xfd, 0xe6, 0xd3, 0x3a, 0xb6, 0x92, 0xf2, 0x19, 0x0f, 0xe6, 0x3b, 0xb6, 0x6f, 0xc7, 0xd6, 0xeb, 0xaf, 0xb7, 0x23, 0x60, 0xa1, 0x4f, 0x01, 0x21, 0x00, 0xc6, 0x00, 0x21, 0x91, 0x64, 0x31, 0x7a, 0xfd, 0x04, 0x83, 0x41, 0x36, 0xd5, 0xfe, 0xbb, 0xc3, 0x55, 0xcf, 0x7c, 0x5b, 0x60, 0xc6, 0x87, 0x1f, 0x68, 0xe8, 0x4e, 0x2a, 0x85, 0x2c, 0x87, 0x69, 0x91, 0xb7, 0x9f, 0x8c, 0x3c, 0x70, 0x26, 0x44, 0x3e, 0x6e, 0x38, 0x41, 0x02, 0xc2, 0x28, 0x18, 0xe3, 0xb9, 0x0e, 0xba, 0x02, 0x51, 0x0c, 0x4a, 0x4d, 0xf7, 0xd9, 0x6f, 0xb9, 0xf9, 0xe6, 0xb1, 0x9c, 0x89, 0x93, 0x4e, 0x6e, 0x63, 0xe3, 0xfa, 0x97, 0xd5, 0x06, 0x7c, 0x97, 0x01, 0x7f, 0x3c, 0xdb, 0xf7, 0xee, 0xfe, 0xa6, 0xd5, 0x86, 0x4f, 0x33, 0xa9, 0x17, 0x3e, 0x0f, 0x10, 0x39, 0xca, 0xa5, 0x27, 0x2c, 0x26, 0xe4, 0x8d, 0xb4, 0x03, 0xac, 0x5d, 0x98, 0xc3, 0xe6, 0x8d, 0x2f, 0xc5, 0x20, 0xfa, 0x7e, 0x5e, 0x2d, 0x2d, 0x97, 0xf8, 0x28, 0x67, 0x6f, 0xd9, 0x82, 0xf7, 0xbe, 0xe7, 0x3d, 0x2b, 0x12, 0x1d, 0xd7, 0xad, 0x5b, 0x58, 0x91, 0x6b, 0xb1, 0xf9, 0xd4, 0x4d, 0xf8, 0x8f, 0x07, 0x5a, 0x35, 0x50, 0x70, 0x21, 0xb5, 0xaa, 0xb5, 0x1d, 0x8a, 0x35, 0xd5, 0xe3, 0x34, 0xb7, 0x10, 0x4d, 0x70, 0xfa, 0x29, 0xa7, 0xdb, 0x7d, 0xad, 0x59, 0xbb, 0x0e, 0x61, 0xe0, 0x9b, 0x25, 0xa7, 0x20, 0x8b, 0x11, 0x2d, 0x9c, 0xd2, 0xeb, 0x0e, 0xf3, 0xfe, 0x77, 0x90, 0xf7, 0xb4, 0x5b, 0x08, 0x82, 0x16, 0x0e, 0x1f, 0x5d, 0x2a, 0x8f, 0xcd, 0x52, 0x0e, 0xcf, 0x23, 0xc8, 0x32, 0x6d, 0x72, 0xd4, 0x08, 0x43, 0x04, 0x7e, 0x08, 0x2f, 0x5f, 0xe7, 0x24, 0xc9, 0x5b, 0x98, 0x32, 0x0f, 0x48, 0xbd, 0x3e, 0x82, 0x20, 0xc0, 0xdc, 0xdc, 0x3c, 0x84, 0xd0, 0x64, 0xbb, 0x28, 0x1a, 0xc0, 0xe3, 0x0c, 0x81, 0x4f, 0x11, 0x0f, 0x35, 0xff, 0x24, 0x08, 0x02, 0x34, 0x9b, 0xcd, 0xd2, 0x08, 0x9a, 0x0e, 0xda, 0xd9, 0x48, 0xa5, 0x5d, 0x42, 0x21, 0x55, 0xd9, 0x89, 0xcc, 0x95, 0xe2, 0x25, 0x84, 0x20, 0x0c, 0xc3, 0x92, 0x4b, 0x5b, 0x95, 0x18, 0x9d, 0x54, 0x48, 0xdb, 0x2b, 0xc5, 0xbb, 0x3a, 0x8b, 0x71, 0x3b, 0xa1, 0x94, 0x57, 0xd9, 0x45, 0x3f, 0x5c, 0xa3, 0x91, 0x59, 0x2a, 0x0b, 0xb4, 0x36, 0xaf, 0x0a, 0xa5, 0x40, 0x6e, 0x4b, 0xab, 0xc0, 0xf8, 0xa8, 0x2c, 0xb9, 0x1b, 0x82, 0xc3, 0x30, 0xcc, 0xc7, 0xef, 0x3c, 0x34, 0x1a, 0x0d, 0x70, 0xee, 0xdb, 0xe4, 0x07, 0x8a, 0x22, 0x94, 0x12, 0x2a, 0x4e, 0x91, 0x25, 0x02, 0x14, 0x19, 0x9a, 0xdc, 0x03, 0xaf, 0xaa, 0xbd, 0xd5, 0xcd, 0x99, 0x57, 0xfd, 0x6e, 0xcd, 0x97, 0xf1, 0x52, 0x1f, 0x57, 0x21, 0x9a, 0xea, 0xdf, 0x75, 0xa4, 0x29, 0x25, 0x00, 0x3c, 0xdf, 0x37, 0x9c, 0x0b, 0xaa, 0xc6, 0xcf, 0x95, 0xa3, 0xf2, 0x6d, 0x10, 0x04, 0x23, 0xd2, 0x8b, 0xee, 0xef, 0x54, 0xb5, 0x72, 0x47, 0xb3, 0xa8, 0x02, 0xa2, 0xa9, 0x1f, 0xcd, 0xa3, 0x63, 0x49, 0x81, 0x45, 0xe0, 0x1f, 0x55, 0xc9, 0xab, 0x63, 0x4a, 0xd6, 0xcd, 0xe9, 0x7b, 0x7e, 0xee, 0x6a, 0xc7, 0x3c, 0x10, 0xc6, 0x35, 0x9b, 0x31, 0xef, 0x49, 0x21, 0x93, 0xe0, 0x94, 0x21, 0x21, 0x42, 0x57, 0xee, 0x42, 0x57, 0x55, 0xc6, 0x10, 0x43, 0x4a, 0xbe, 0x22, 0xba, 0xa1, 0x0f, 0xe6, 0x8d, 0xdc, 0x47, 0x29, 0x25, 0x38, 0x53, 0x58, 0xb7, 0xb6, 0x01, 0x21, 0x04, 0x96, 0x96, 0xe3, 0x67, 0x3c, 0xa8, 0x9b, 0x4a, 0x7d, 0xdf, 0xde, 0x0b, 0xf1, 0xe9, 0xeb, 0xfe, 0x57, 0x09, 0xd6, 0x2a, 0xb4, 0x89, 0xf5, 0xc3, 0xaf, 0xa4, 0x40, 0xb3, 0x59, 0x70, 0x35, 0x2e, 0xbb, 0xfc, 0x7d, 0x78, 0xeb, 0x25, 0x6f, 0x9b, 0xe8, 0x3c, 0x08, 0x7d, 0x66, 0xab, 0xdd, 0x7d, 0x7b, 0xf7, 0xd8, 0x59, 0xde, 0x66, 0xc3, 0xc7, 0xa6, 0x93, 0x56, 0xa1, 0xd3, 0xf1, 0xc0, 0x28, 0x01, 0x27, 0x40, 0xa2, 0x32, 0x24, 0x71, 0x06, 0xbf, 0x31, 0x83, 0x94, 0x27, 0xf8, 0xbf, 0xb9, 0xf5, 0xba, 0x5d, 0x5c, 0xfd, 0xd1, 0x3f, 0x07, 0x63, 0x04, 0x61, 0xc8, 0x4a, 0xaa, 0x7d, 0x46, 0x4f, 0xc2, 0x1a, 0x58, 0xe4, 0xbc, 0x17, 0xcd, 0x54, 0x9e, 0xcc, 0x60, 0x66, 0xd8, 0x1f, 0xc2, 0x67, 0x02, 0x8c, 0xbb, 0xb3, 0xec, 0xd3, 0x25, 0x52, 0x1f, 0xbb, 0xe6, 0x1a, 0xbc, 0xfa, 0xc2, 0x0b, 0x47, 0x82, 0xdd, 0xbe, 0xbd, 0x7b, 0x30, 0x33, 0xdb, 0x58, 0x71, 0x56, 0x7d, 0x92, 0xed, 0xb5, 0xbf, 0x7a, 0x09, 0xde, 0x74, 0xc9, 0x3c, 0xfe, 0xe8, 0xbd, 0xef, 0x42, 0x18, 0x72, 0xac, 0x5a, 0x15, 0x22, 0xcc, 0x89, 0x82, 0xc6, 0xd2, 0x73, 0xd2, 0x6d, 0xfd, 0xfa, 0x19, 0xf8, 0x3e, 0xc3, 0x0f, 0x7e, 0x70, 0x07, 0xd6, 0xae, 0xd3, 0xc1, 0xf4, 0xb2, 0xcb, 0xaf, 0x1c, 0xf9, 0x2c, 0x4f, 0xb7, 0x8d, 0x75, 0xf6, 0x96, 0x2d, 0xf8, 0xd2, 0x17, 0x15, 0x3c, 0x8f, 0x5b, 0x8d, 0x07, 0xa3, 0xdc, 0x69, 0xc6, 0xde, 0x08, 0x8b, 0x6c, 0x6b, 0xce, 0xac, 0x57, 0xfa, 0xdd, 0x27, 0x38, 0xe3, 0xcc, 0x33, 0x87, 0x0b, 0xe4, 0x6d, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xb5, 0x91, 0xcc, 0xe2, 0x23, 0x98, 0x9d, 0x69, 0xa0, 0xd9, 0x6c, 0xd8, 0x5e, 0xac, 0x51, 0x1f, 0x53, 0x6c, 0x0e, 0xfd, 0x7e, 0x3f, 0x27, 0xbd, 0xa9, 0x52, 0x91, 0xe3, 0x79, 0x5a, 0xd8, 0x46, 0xcf, 0x87, 0x47, 0xe8, 0xf7, 0x87, 0xa0, 0xb4, 0x70, 0x21, 0x33, 0xc1, 0xd2, 0x24, 0x18, 0x45, 0x9b, 0xb4, 0xa8, 0xa4, 0x5b, 0x41, 0x07, 0x71, 0x1c, 0x63, 0x69, 0xb8, 0x94, 0xff, 0x8c, 0x3e, 0xc7, 0x34, 0x4d, 0x90, 0x24, 0x7d, 0xb4, 0x1a, 0x5e, 0x49, 0x17, 0x40, 0x4a, 0xe9, 0x54, 0xe7, 0xc5, 0xb3, 0x6c, 0xd6, 0x4d, 0x03, 0xe5, 0x1b, 0x97, 0x4f, 0xaa, 0x78, 0x29, 0xbe, 0x54, 0xcf, 0x65, 0x5c, 0x51, 0x6a, 0xbe, 0x86, 0xd1, 0x70, 0x94, 0xd7, 0xe5, 0x8c, 0x76, 0x8e, 0xf3, 0x18, 0x71, 0xa1, 0x7d, 0x83, 0x0c, 0x00, 0x59, 0xee, 0x2a, 0x49, 0x6d, 0x81, 0x58, 0x07, 0xf5, 0xbb, 0xfb, 0x2d, 0x58, 0xf8, 0xfa, 0xf7, 0x29, 0xd5, 0x28, 0x82, 0x41, 0x6d, 0xfb, 0xb1, 0x26, 0x23, 0xb6, 0x5a, 0x0c, 0x9e, 0x17, 0xe8, 0xa9, 0x33, 0x45, 0xa1, 0x64, 0x0c, 0xc6, 0x18, 0xfc, 0x58, 0xe8, 0xa2, 0x4c, 0xc6, 0xf0, 0x7d, 0x86, 0x76, 0x18, 0x80, 0x0b, 0x4e, 0x4b, 0x17, 0xc5, 0x68, 0x05, 0x9b, 0x0b, 0x57, 0xe8, 0xde, 0x16, 0x15, 0x24, 0x25, 0x04, 0x8c, 0x68, 0xec, 0xbe, 0x4e, 0x14, 0xc6, 0x95, 0xeb, 0xab, 0x06, 0xc4, 0x52, 0xf2, 0x90, 0xf1, 0xa2, 0x0b, 0x5d, 0x43, 0xec, 0x72, 0x2b, 0x7c, 0x37, 0x28, 0xd8, 0x00, 0xe9, 0xd1, 0x5c, 0xce, 0x91, 0xd7, 0x56, 0xe2, 0xbc, 0xd2, 0x43, 0xb1, 0xc2, 0xff, 0x99, 0x76, 0x37, 0x6b, 0xf3, 0xa6, 0xbd, 0xa8, 0x9c, 0x6b, 0xe6, 0xa6, 0xb5, 0x84, 0x95, 0x0e, 0xa1, 0x08, 0x95, 0x6c, 0xd0, 0xce, 0xb0, 0x27, 0x76, 0x7e, 0x91, 0x10, 0x02, 0x0a, 0x05, 0x9a, 0x7f, 0xcf, 0x3d, 0xee, 0x10, 0x07, 0x69, 0xad, 0x89, 0x83, 0xf4, 0x08, 0x28, 0xe7, 0x20, 0x9e, 0x57, 0xf4, 0x7e, 0xa4, 0x04, 0xf7, 0x08, 0x38, 0xb4, 0x91, 0x88, 0x8f, 0xb0, 0x92, 0x50, 0xf9, 0xc5, 0xf7, 0xf1, 0xa8, 0x3d, 0x6d, 0x35, 0xb1, 0x70, 0xd9, 0x97, 0x94, 0x10, 0x78, 0x94, 0x22, 0x08, 0x03, 0x34, 0x5b, 0x3e, 0x1a, 0x0d, 0x0f, 0xfb, 0x1f, 0x5d, 0xc2, 0xd1, 0x63, 0xc3, 0x9f, 0x49, 0xa5, 0xbe, 0xf9, 0xd4, 0xd3, 0x70, 0xd6, 0x59, 0xbf, 0x8a, 0x1f, 0xfe, 0xe0, 0xeb, 0xb9, 0xea, 0x11, 0x2b, 0x09, 0xa8, 0x48, 0x15, 0x81, 0x71, 0x81, 0xcd, 0xa7, 0x6e, 0x2a, 0x55, 0x9a, 0x17, 0xbd, 0xe1, 0x8d, 0x13, 0x1d, 0x27, 0x49, 0xb3, 0x67, 0x34, 0x98, 0x5f, 0xfc, 0xe6, 0x4b, 0x6c, 0x9b, 0x23, 0x0c, 0x28, 0x38, 0x27, 0xe0, 0x3c, 0x97, 0xbd, 0x14, 0x02, 0x19, 0x18, 0x88, 0x17, 0x42, 0x64, 0x0c, 0x90, 0x93, 0x05, 0x05, 0xa3, 0x3b, 0xfe, 0x4c, 0x6d, 0x1f, 0x7c, 0xff, 0x3b, 0xf1, 0xd0, 0x9e, 0x27, 0xd0, 0x6c, 0x32, 0xac, 0x5d, 0xe5, 0xc3, 0x23, 0x0a, 0xc8, 0x72, 0xe4, 0x8c, 0x68, 0xf6, 0xb3, 0x10, 0x0a, 0xc8, 0xfb, 0x90, 0x21, 0xf7, 0x11, 0x72, 0x1f, 0x2a, 0x9d, 0x4c, 0x54, 0x25, 0x68, 0x36, 0x11, 0xb6, 0x42, 0xbb, 0xa0, 0x03, 0x80, 0x17, 0x4e, 0x0e, 0x59, 0x87, 0x21, 0x43, 0x92, 0xc8, 0xda, 0x2a, 0xfd, 0xa6, 0xaf, 0xde, 0x0c, 0xae, 0x30, 0xe2, 0x84, 0x77, 0xe0, 0xc0, 0x41, 0x1c, 0x3a, 0x78, 0xc0, 0x8e, 0xb3, 0xb9, 0x64, 0xb7, 0xb3, 0xce, 0x3e, 0x7b, 0x6c, 0xbb, 0xe3, 0xdc, 0xf3, 0xce, 0xc3, 0xee, 0x5d, 0xbb, 0x70, 0xfa, 0xe6, 0x79, 0x04, 0x21, 0x45, 0xb3, 0xe1, 0x21, 0x0c, 0x8b, 0x3e, 0xf4, 0xf2, 0xb1, 0xf8, 0xb8, 0x93, 0x26, 0x13, 0xb0, 0x57, 0x77, 0x3a, 0x68, 0x52, 0x0e, 0x7f, 0x15, 0x81, 0x48, 0x13, 0x9c, 0x72, 0xca, 0x05, 0xcf, 0xd8, 0xfb, 0x32, 0x72, 0xcd, 0x69, 0x13, 0x6b, 0xe6, 0x66, 0x90, 0xc4, 0x29, 0x96, 0x96, 0xfb, 0x18, 0xa8, 0x14, 0xad, 0xce, 0x0c, 0x94, 0xf2, 0x30, 0xe8, 0x65, 0x48, 0x54, 0x37, 0xaf, 0x06, 0xf3, 0x2a, 0x9d, 0xea, 0xf5, 0x4b, 0x48, 0xe0, 0xab, 0x5f, 0xbe, 0x0e, 0x5b, 0xb7, 0xc6, 0x88, 0x06, 0x3d, 0xac, 0x9e, 0x0d, 0xd0, 0xf2, 0x4d, 0x85, 0x4f, 0x21, 0x44, 0x86, 0x74, 0x10, 0x23, 0x9c, 0xeb, 0x62, 0x6e, 0x86, 0x61, 0x6e, 0x86, 0x22, 0x4d, 0x24, 0x92, 0x58, 0x21, 0xcb, 0x90, 0xb7, 0xc8, 0x38, 0xa8, 0xef, 0xa3, 0xdb, 0x8d, 0x10, 0x70, 0x85, 0x34, 0xa1, 0xc8, 0xb2, 0x04, 0x71, 0x9c, 0x42, 0x08, 0x09, 0x0e, 0xa0, 0x1d, 0x2e, 0x20, 0x49, 0x87, 0x88, 0x92, 0x45, 0x78, 0x9c, 0x68, 0xa9, 0xd3, 0xac, 0xf0, 0xff, 0xc6, 0xa0, 0x81, 0x90, 0x79, 0xf0, 0xa5, 0x44, 0x9c, 0xa4, 0x20, 0x4a, 0xaf, 0x6d, 0xe0, 0x29, 0x12, 0x99, 0xa1, 0x9f, 0xfb, 0x85, 0x9b, 0x58, 0x41, 0x29, 0xf2, 0x19, 0x6e, 0x59, 0x1a, 0xf5, 0x92, 0x12, 0x88, 0x23, 0x81, 0x48, 0xc9, 0xa2, 0xaa, 0x53, 0x14, 0x59, 0xd8, 0xb5, 0xe3, 0xb0, 0x99, 0x12, 0x1a, 0x91, 0xe4, 0x2c, 0xf7, 0x32, 0x17, 0x08, 0x79, 0x03, 0x14, 0xe6, 0x9c, 0x32, 0x10, 0x25, 0xa1, 0xcd, 0x94, 0x25, 0xa8, 0x52, 0x68, 0x51, 0xbf, 0xe8, 0xa7, 0x56, 0x0b, 0x49, 0x02, 0xd0, 0x30, 0x18, 0x29, 0x64, 0x91, 0x6a, 0xc2, 0x1d, 0x00, 0x28, 0x2f, 0x80, 0x6b, 0x63, 0x5e, 0x2d, 0xa8, 0xb4, 0x7a, 0x20, 0x40, 0x48, 0xc1, 0xfd, 0xa2, 0x84, 0x80, 0x21, 0x97, 0xc1, 0xe5, 0x9e, 0x26, 0xed, 0x09, 0x91, 0x0b, 0xf2, 0xe8, 0x59, 0x74, 0xa5, 0x08, 0x44, 0x9a, 0x81, 0x31, 0x05, 0x9f, 0x33, 0x0c, 0x07, 0x3d, 0xfc, 0xf8, 0x07, 0xbb, 0x70, 0xf6, 0x73, 0x9e, 0x8b, 0x8e, 0x1f, 0x62, 0x3e, 0xf0, 0x91, 0x26, 0x09, 0x1a, 0x8d, 0x16, 0x0e, 0x1d, 0x1a, 0x00, 0x84, 0x41, 0x52, 0x1f, 0x41, 0x7b, 0x0e, 0x3c, 0x19, 0x46, 0xc5, 0x78, 0x19, 0xa0, 0x9d, 0xba, 0x4c, 0xe6, 0x95, 0x66, 0x50, 0x15, 0xc9, 0xd4, 0x92, 0x62, 0x1b, 0xf7, 0x46, 0xb2, 0x20, 0xb7, 0x5f, 0x27, 0x6a, 0x48, 0x69, 0xee, 0x87, 0x0e, 0x1c, 0xad, 0xf6, 0xaa, 0x40, 0x8d, 0xd1, 0x72, 0x77, 0x0d, 0xe2, 0x01, 0x80, 0x72, 0xcf, 0x92, 0x24, 0x8c, 0xf8, 0x82, 0xa9, 0xfe, 0xad, 0x60, 0x43, 0x7e, 0x0e, 0x33, 0x33, 0x33, 0xa0, 0x84, 0x68, 0x6d, 0x73, 0x10, 0x6b, 0x4f, 0x2a, 0xa0, 0x4d, 0x06, 0x14, 0x24, 0x18, 0x2f, 0xab, 0xe3, 0x29, 0xa5, 0x47, 0x0b, 0x32, 0x91, 0x96, 0xb3, 0x3c, 0x62, 0x6e, 0x0e, 0xb1, 0x19, 0xd8, 0x38, 0x6b, 0x59, 0x17, 0x21, 0xa8, 0x2a, 0xef, 0x19, 0x46, 0x68, 0x96, 0x65, 0x48, 0x06, 0x69, 0xad, 0x24, 0x6e, 0xf5, 0x5a, 0xd4, 0xb5, 0x33, 0x00, 0xc0, 0x03, 0x1f, 0x7d, 0xe0, 0x2a, 0x08, 0x86, 0x8b, 0x24, 0x98, 0xeb, 0xa6, 0xbf, 0x08, 0xda, 0x6d, 0x8e, 0x93, 0x36, 0x6a, 0x03, 0x86, 0x63, 0x8b, 0xd1, 0xcf, 0x24, 0xa8, 0xbf, 0xfa, 0xc2, 0x0b, 0x71, 0xeb, 0xad, 0x37, 0xe1, 0x94, 0x93, 0x47, 0xbd, 0xb3, 0xf5, 0x7c, 0x2d, 0xc5, 0xbe, 0xbd, 0xfb, 0xb1, 0x78, 0xec, 0x58, 0x49, 0xe1, 0x6a, 0xb2, 0xbe, 0xe6, 0x33, 0x43, 0x30, 0xdb, 0xb1, 0x7d, 0xbb, 0x3d, 0x07, 0xc6, 0x28, 0xd6, 0xac, 0x6e, 0xe2, 0xd4, 0x53, 0x56, 0x61, 0x6e, 0x36, 0xc8, 0xe5, 0x1a, 0x15, 0x38, 0xa7, 0xe0, 0x3c, 0x84, 0x52, 0x01, 0x04, 0x02, 0x28, 0x48, 0x2c, 0xe6, 0x12, 0xc4, 0xc7, 0xb3, 0x5d, 0xfb, 0x89, 0xcf, 0xe0, 0xe7, 0x9e, 0xf7, 0xec, 0xa7, 0x7d, 0xae, 0x86, 0xf0, 0x75, 0xf7, 0x7d, 0xfb, 0xc0, 0x18, 0xc1, 0xec, 0x4c, 0x03, 0x0b, 0x0b, 0xb3, 0x68, 0xb7, 0xfd, 0x12, 0x22, 0x63, 0xe6, 0x7c, 0xad, 0xd8, 0x47, 0x7e, 0xff, 0x07, 0xc3, 0x09, 0x2d, 0x60, 0x95, 0x2a, 0xb1, 0x99, 0xa5, 0x94, 0xb5, 0xa2, 0x3a, 0xd5, 0x56, 0x80, 0x1b, 0x6c, 0xbf, 0xff, 0xe0, 0x03, 0x58, 0x7f, 0x62, 0x1b, 0x07, 0x0e, 0xf4, 0xf1, 0xb1, 0x6b, 0xae, 0x19, 0x51, 0x56, 0x7b, 0xcb, 0x5b, 0x2f, 0xc1, 0xa7, 0x3e, 0x39, 0x4a, 0xa6, 0x1b, 0xf4, 0xbb, 0xb8, 0xec, 0xf2, 0xcb, 0x71, 0xf6, 0x96, 0x67, 0x97, 0x04, 0x64, 0xaa, 0xbf, 0x3f, 0x6e, 0xdb, 0xb8, 0x71, 0x15, 0x82, 0xc0, 0xb7, 0xb2, 0xa6, 0x46, 0x02, 0x35, 0xc9, 0x8e, 0x0f, 0xd9, 0x71, 0xab, 0x6f, 0x2f, 0xf0, 0x11, 0x34, 0x02, 0xa8, 0x38, 0x45, 0xd3, 0x6f, 0x5a, 0x4d, 0xf5, 0x9f, 0xc5, 0x16, 0x27, 0x43, 0x0c, 0x87, 0x0c, 0x92, 0x00, 0x61, 0x83, 0x01, 0x84, 0x81, 0xd0, 0x04, 0x8c, 0x52, 0xcc, 0xcc, 0x07, 0xe8, 0x76, 0xe7, 0x6d, 0x31, 0xa3, 0x67, 0xb3, 0x33, 0x08, 0x91, 0x60, 0x18, 0x09, 0x3c, 0xf2, 0xd8, 0x51, 0x1c, 0x3b, 0xd6, 0x47, 0xb3, 0xe1, 0xa3, 0xdb, 0x03, 0x3c, 0xa6, 0xdd, 0xdb, 0x7c, 0x3f, 0xcc, 0xed, 0x53, 0x09, 0x8e, 0x1e, 0xdb, 0x0f, 0xce, 0xfd, 0x9c, 0x3d, 0xcd, 0x41, 0x18, 0x47, 0xe0, 0xf9, 0xb9, 0x91, 0x91, 0x8f, 0x28, 0x4e, 0xe1, 0x71, 0x89, 0x30, 0xe0, 0x08, 0x3c, 0x33, 0x5e, 0xa7, 0xf2, 0x1e, 0x2e, 0x41, 0xd8, 0x5a, 0x05, 0x29, 0x13, 0x40, 0x65, 0x00, 0x49, 0x20, 0xd2, 0x44, 0x8f, 0x9a, 0xe5, 0x7a, 0xee, 0xb3, 0xe1, 0x9c, 0xd6, 0x1e, 0x1f, 0x26, 0x00, 0x25, 0xa0, 0x4c, 0x21, 0x0c, 0x3d, 0x28, 0xf8, 0x00, 0x67, 0xc8, 0x40, 0x10, 0x10, 0xaf, 0x20, 0x89, 0x65, 0x89, 0x75, 0x50, 0xd3, 0x05, 0xa5, 0x67, 0xa5, 0xab, 0x15, 0x25, 0xf9, 0xd8, 0x2b, 0x6c, 0x40, 0x8f, 0x52, 0xdd, 0x8a, 0x54, 0x4a, 0xe8, 0xa4, 0x55, 0x69, 0x75, 0x4f, 0xdf, 0x0b, 0xe0, 0x7b, 0x80, 0x48, 0x14, 0xb4, 0xd3, 0xb1, 0xb4, 0xc2, 0x61, 0x84, 0x00, 0x9c, 0x72, 0x70, 0x8f, 0xc1, 0x23, 0x7c, 0x85, 0xc7, 0xdd, 0xa9, 0xd0, 0x09, 0x85, 0x22, 0xda, 0x0d, 0xb3, 0x04, 0xcd, 0xcb, 0x91, 0xe0, 0x66, 0x2d, 0x5a, 0x09, 0x71, 0xc6, 0xaa, 0x2b, 0x2e, 0x9c, 0x86, 0xa4, 0x2c, 0x84, 0x00, 0xcd, 0x47, 0xa4, 0x78, 0x2e, 0x71, 0x2b, 0x84, 0x00, 0x45, 0x3e, 0x16, 0xc8, 0x03, 0xb4, 0x1a, 0x0d, 0x70, 0xe6, 0x61, 0xd8, 0xeb, 0x43, 0x29, 0x85, 0xa5, 0xa5, 0x25, 0x78, 0x54, 0x27, 0xd5, 0x22, 0x89, 0x90, 0x2a, 0x89, 0xb0, 0xd5, 0x44, 0xd0, 0x68, 0x82, 0x78, 0x1c, 0xdc, 0xf8, 0xdc, 0x16, 0x1f, 0x00, 0x56, 0x63, 0xdc, 0x8c, 0x45, 0x55, 0xc9, 0x08, 0x56, 0x0b, 0x39, 0x8a, 0xec, 0x22, 0x51, 0x47, 0x9a, 0xab, 0xce, 0x89, 0x8f, 0xcc, 0xa1, 0x47, 0xc3, 0xda, 0xc1, 0x7d, 0x5b, 0x79, 0xe5, 0x82, 0xf9, 0x6e, 0x8f, 0xdc, 0x54, 0x08, 0x46, 0x37, 0xd7, 0xcc, 0x07, 0x1a, 0x36, 0x60, 0x95, 0x94, 0x57, 0x4d, 0x26, 0xdc, 0xcc, 0x8f, 0xe7, 0x64, 0xad, 0xe2, 0x81, 0xca, 0x4a, 0xaa, 0x43, 0x55, 0xcb, 0xd6, 0x51, 0x13, 0x00, 0xf3, 0x90, 0x11, 0xdb, 0x9f, 0x72, 0x61, 0x78, 0xce, 0xfd, 0xbc, 0xf5, 0x20, 0x90, 0x24, 0x99, 0x73, 0x0e, 0x1c, 0x41, 0xe0, 0x61, 0xb6, 0x35, 0x3f, 0x82, 0x6c, 0xb8, 0x81, 0xb7, 0x3a, 0x37, 0x59, 0x0d, 0xee, 0x22, 0xb7, 0x27, 0x34, 0x09, 0x4d, 0x55, 0xad, 0x6d, 0x79, 0xb9, 0x37, 0xc2, 0x5f, 0x70, 0x2b, 0xf8, 0x56, 0xab, 0x91, 0xab, 0x16, 0x79, 0xd8, 0xff, 0xc8, 0x22, 0x8e, 0x1e, 0x1d, 0x22, 0x13, 0x12, 0x17, 0xbf, 0xf9, 0x92, 0xa9, 0x4d, 0x47, 0xea, 0x16, 0xc3, 0x8b, 0x2f, 0x7e, 0x3b, 0xfe, 0xf5, 0x96, 0xbf, 0x2f, 0xf1, 0x27, 0x34, 0xec, 0xeb, 0x63, 0x38, 0x14, 0xb8, 0xfe, 0xb3, 0xd7, 0xe0, 0xd0, 0xe1, 0xfe, 0xd4, 0xc7, 0xc8, 0x92, 0xa7, 0xdf, 0x43, 0xbf, 0x71, 0xdb, 0x36, 0xeb, 0x51, 0xce, 0x18, 0xc1, 0xdc, 0x8c, 0x8f, 0x85, 0xb5, 0x1e, 0x18, 0x8b, 0xd0, 0x1f, 0xc4, 0xf6, 0x39, 0x33, 0xfd, 0x38, 0xca, 0x28, 0x1a, 0x21, 0x43, 0x92, 0x70, 0x3c, 0xfe, 0xf8, 0xe3, 0xc7, 0x7d, 0x9c, 0xcb, 0xaf, 0x78, 0x2f, 0x76, 0xef, 0xda, 0x85, 0x9d, 0xf7, 0xec, 0x78, 0x5a, 0xe7, 0x7b, 0xf5, 0xd5, 0xd7, 0xe4, 0xb2, 0x9f, 0x40, 0xb3, 0xe1, 0x61, 0xe3, 0x86, 0x0e, 0x5a, 0xad, 0x40, 0xeb, 0x76, 0x1b, 0x2d, 0xe9, 0x2a, 0x49, 0xd4, 0x6d, 0xf9, 0x90, 0xc9, 0xaa, 0x6b, 0xa1, 0x32, 0x64, 0xa2, 0x90, 0xf3, 0x15, 0x42, 0x58, 0xf2, 0xd3, 0xb8, 0xed, 0x9e, 0x9d, 0x3b, 0x4b, 0xcf, 0xd0, 0xae, 0xef, 0xdf, 0x8f, 0x53, 0x37, 0xcf, 0x63, 0x38, 0x14, 0x88, 0xe2, 0x3e, 0x6e, 0xf8, 0xdc, 0xb6, 0xd2, 0xd8, 0xa4, 0x61, 0x78, 0xd7, 0x21, 0x3d, 0x57, 0x7f, 0xf4, 0xaf, 0xf1, 0xd9, 0xcf, 0x7e, 0x69, 0xa4, 0xb5, 0xf3, 0x54, 0xdb, 0xe2, 0xb1, 0x63, 0x20, 0x84, 0xe2, 0x75, 0xaf, 0xff, 0x43, 0x7c, 0xf9, 0x5f, 0x3e, 0x92, 0xc3, 0xc9, 0x5e, 0x7e, 0x0d, 0x26, 0xbf, 0xee, 0x9e, 0xc7, 0x20, 0x15, 0xc1, 0x93, 0x07, 0xba, 0x78, 0xee, 0x73, 0xfe, 0xeb, 0x33, 0xae, 0x79, 0xe0, 0x6e, 0x33, 0x73, 0xb3, 0x68, 0xcd, 0xf8, 0xa0, 0x8c, 0x80, 0xe5, 0xc8, 0x61, 0x94, 0x0c, 0xa1, 0x94, 0x1e, 0xc9, 0x6a, 0xaf, 0x4d, 0xc1, 0xb9, 0xca, 0x25, 0x56, 0x35, 0x5b, 0x3c, 0x4b, 0x25, 0x7a, 0x5d, 0x85, 0x7d, 0x8f, 0x25, 0x00, 0x91, 0x08, 0x9a, 0x29, 0x94, 0xf7, 0x24, 0x86, 0x38, 0x80, 0x28, 0x65, 0xe0, 0x8a, 0x23, 0x80, 0x0e, 0xd8, 0xbe, 0xbf, 0x90, 0x4f, 0xde, 0xf8, 0x3a, 0xc0, 0x64, 0x04, 0x69, 0x4a, 0x90, 0xa5, 0x14, 0x84, 0x08, 0xc4, 0x19, 0x43, 0x92, 0x05, 0x90, 0x60, 0x7a, 0x76, 0x9f, 0x52, 0x10, 0x5e, 0x54, 0xb1, 0x8b, 0xbd, 0x14, 0x1e, 0x67, 0xf0, 0x03, 0x0e, 0x10, 0x8e, 0x58, 0x28, 0x0c, 0x33, 0x0e, 0x99, 0x69, 0x78, 0xfc, 0x27, 0x4f, 0x1e, 0x85, 0xef, 0xfb, 0x08, 0x82, 0x00, 0xed, 0xf9, 0xb5, 0xe8, 0xcc, 0x34, 0xe0, 0xf9, 0xc0, 0xb0, 0xbf, 0x88, 0xe8, 0x58, 0x06, 0x9f, 0x50, 0x70, 0x8f, 0xda, 0x56, 0x42, 0x14, 0x0d, 0xf2, 0xb5, 0xab, 0x90, 0xfd, 0x36, 0xd5, 0x94, 0x59, 0x6f, 0x0b, 0x52, 0x1b, 0x81, 0xcc, 0x18, 0xa0, 0x74, 0x05, 0x9f, 0xa5, 0x02, 0x84, 0x50, 0x04, 0x7e, 0x88, 0x66, 0xb3, 0x09, 0xdf, 0x0b, 0xc1, 0xb9, 0xa7, 0x55, 0xf7, 0x72, 0xd7, 0xb3, 0x38, 0x19, 0xa2, 0x3f, 0x1c, 0x22, 0x01, 0x81, 0x4f, 0x29, 0x64, 0x9c, 0x8e, 0xe5, 0x8b, 0xd9, 0xf8, 0x95, 0x57, 0xeb, 0x8a, 0xd0, 0x11, 0x04, 0xba, 0x1a, 0x1f, 0x4c, 0x30, 0x37, 0x31, 0x5c, 0x12, 0x5a, 0xbb, 0x7f, 0x73, 0x08, 0x92, 0xe9, 0x36, 0xaa, 0x19, 0x67, 0x36, 0xeb, 0x38, 0xf7, 0x3d, 0x34, 0x9b, 0x4d, 0xcc, 0x74, 0xe6, 0xb4, 0xc6, 0x7e, 0xd0, 0x40, 0x3c, 0x1b, 0x81, 0x11, 0x8a, 0x7e, 0x7f, 0x88, 0x24, 0x49, 0x10, 0x04, 0x01, 0xd2, 0x64, 0x88, 0x5e, 0x1c, 0x43, 0xfa, 0x1e, 0xb2, 0x34, 0xd3, 0xde, 0xee, 0xe6, 0x62, 0xd6, 0xa9, 0xe5, 0xb8, 0x3d, 0x68, 0xd7, 0x9f, 0xd6, 0x9a, 0xab, 0xfc, 0xff, 0xb4, 0xbd, 0x79, 0xb4, 0x64, 0x57, 0x7d, 0xdf, 0xfb, 0xd9, 0x7b, 0x9f, 0xa9, 0xc6, 0x3b, 0x76, 0xb7, 0xd4, 0x13, 0x52, 0x0b, 0x21, 0x05, 0x49, 0x18, 0x2c, 0xdb, 0xc4, 0xcf, 0x44, 0x26, 0x83, 0x97, 0x1d, 0x23, 0x1b, 0xc7, 0x6f, 0x79, 0x21, 0x39, 0x7e, 0xcf, 0x84, 0x18, 0x16, 0x38, 0xf1, 0x93, 0x1d, 0x0f, 0x79, 0x0e, 0x21, 0x89, 0x03, 0x5e, 0x89, 0x9f, 0xc1, 0x40, 0x58, 0xcb, 0x26, 0xc6, 0xb1, 0xe5, 0xf7, 0x78, 0x01, 0x27, 0xcf, 0x04, 0xdb, 0x80, 0xa7, 0x58, 0x56, 0x30, 0xd8, 0x92, 0x40, 0x08, 0x34, 0x45, 0x20, 0x24, 0xa1, 0x6e, 0xb5, 0xba, 0xfb, 0xf6, 0x9d, 0xaa, 0x6e, 0xd5, 0xa9, 0x33, 0xed, 0xbd, 0xdf, 0x1f, 0xfb, 0x9c, 0x73, 0x4f, 0x55, 0xdd, 0x16, 0x5d, 0x6d, 0x71, 0xd6, 0xba, 0xab, 0x87, 0x7b, 0x6f, 0xd5, 0xa9, 0x7d, 0xce, 0xd9, 0xbf, 0xe9, 0x3b, 0x28, 0xd9, 0x98, 0x47, 0xc9, 0xb9, 0x0a, 0xb5, 0x69, 0x9f, 0x7a, 0x90, 0x4c, 0x6c, 0x18, 0x86, 0x07, 0xce, 0xa5, 0x67, 0x09, 0xfd, 0x55, 0x8b, 0x6c, 0x76, 0x0e, 0xd1, 0x34, 0x96, 0x69, 0x1a, 0x83, 0x54, 0x55, 0x7a, 0xf3, 0xfb, 0x97, 0x42, 0xb2, 0x37, 0x67, 0x38, 0xb3, 0x32, 0x8b, 0xb3, 0xb2, 0xb5, 0xb3, 0x22, 0x3a, 0x42, 0xd8, 0xb9, 0x44, 0x65, 0xb6, 0xd2, 0x9e, 0xb5, 0xd6, 0xab, 0x74, 0x92, 0x3d, 0xcf, 0xab, 0x13, 0xa2, 0x59, 0xb0, 0x45, 0x13, 0x00, 0x72, 0xd0, 0xc8, 0xa2, 0x6e, 0x5f, 0xfa, 0xfb, 0x4a, 0x7e, 0x55, 0xa0, 0x69, 0x06, 0xf5, 0xb5, 0xb5, 0xb5, 0x4b, 0xce, 0xf6, 0x9d, 0x2a, 0x94, 0x43, 0xa1, 0xf7, 0x7b, 0x3e, 0x27, 0x4f, 0xf4, 0xb1, 0xd6, 0xd6, 0xed, 0xf7, 0x7f, 0xf2, 0x4f, 0xff, 0x29, 0x3f, 0xf3, 0xcf, 0x7e, 0xe6, 0x8a, 0xdd, 0xd9, 0x66, 0x5b, 0x9f, 0xf7, 0xfe, 0x8f, 0xfb, 0xb1, 0xfa, 0xd1, 0xfd, 0x80, 0x28, 0x25, 0x79, 0x9e, 0x92, 0xe7, 0x05, 0x71, 0x9c, 0x61, 0xb4, 0xcb, 0xc4, 0xfd, 0x2b, 0x40, 0x7f, 0x8f, 0x67, 0x12, 0xb7, 0x45, 0x5b, 0xe0, 0xff, 0xe1, 0x03, 0xef, 0xa9, 0xf9, 0xc5, 0x4a, 0x09, 0x56, 0x96, 0x23, 0x4e, 0x9e, 0xe8, 0xd1, 0x2a, 0x95, 0xe0, 0x3c, 0x4f, 0xd5, 0x72, 0x8d, 0x4d, 0x0d, 0x83, 0xcd, 0xad, 0x73, 0x8c, 0x46, 0xc5, 0x25, 0x13, 0x84, 0xff, 0xfc, 0xd1, 0x8f, 0xf2, 0xb2, 0x53, 0x2b, 0x1c, 0x3f, 0xf9, 0x2a, 0x4e, 0x9d, 0x3a, 0xc5, 0xcd, 0xb7, 0xbc, 0xbc, 0xee, 0x7c, 0x5c, 0x89, 0x06, 0x7c, 0xf3, 0xe8, 0x75, 0x83, 0xfa, 0x7c, 0x5b, 0x6d, 0x45, 0x18, 0x49, 0x8c, 0x29, 0xa6, 0x40, 0x4f, 0x93, 0xc9, 0x64, 0x2e, 0x11, 0xa9, 0xd6, 0x3e, 0x4d, 0x17, 0x9b, 0xfd, 0xb7, 0xa2, 0x16, 0x4b, 0x4b, 0xad, 0xa9, 0x7b, 0x7c, 0x73, 0xeb, 0x85, 0x69, 0x6b, 0x4d, 0x79, 0xe1, 0x67, 0x9e, 0x7e, 0x0a, 0x01, 0xf4, 0xba, 0x11, 0xd1, 0x4b, 0x02, 0xe2, 0xb8, 0xe0, 0x63, 0x1f, 0xff, 0x18, 0x77, 0xfc, 0xf0, 0x9d, 0x97, 0x15, 0x98, 0xcf, 0x3e, 0x77, 0xf6, 0x8a, 0xd6, 0xe9, 0xee, 0xbb, 0x7f, 0x8d, 0xd5, 0x55, 0xcb, 0x7f, 0xfa, 0xd0, 0xdb, 0x91, 0x52, 0xd6, 0xce, 0x55, 0x51, 0x14, 0x31, 0xd8, 0xdd, 0x59, 0xf8, 0xf5, 0x8a, 0xa2, 0x70, 0x5e, 0xd4, 0xd6, 0xd6, 0x46, 0x28, 0xdf, 0x88, 0xe3, 0x99, 0xa7, 0x9f, 0x42, 0x79, 0x12, 0x3f, 0x72, 0x18, 0x88, 0xb0, 0x15, 0xe0, 0x79, 0x92, 0xc2, 0x46, 0x58, 0xeb, 0x66, 0xcd, 0x17, 0xb7, 0x32, 0xac, 0x2e, 0xe7, 0xea, 0x59, 0x8a, 0x29, 0x3c, 0xb0, 0xa6, 0xb4, 0x65, 0x1e, 0xd3, 0xeb, 0x79, 0xdc, 0xf4, 0xf2, 0x93, 0x1c, 0x3a, 0xec, 0xe8, 0xa1, 0xae, 0x40, 0xa2, 0xde, 0x7f, 0x26, 0x49, 0x1b, 0x25, 0x43, 0xfc, 0xa0, 0x45, 0x18, 0xb6, 0xf0, 0x54, 0xe8, 0x80, 0x71, 0xca, 0xcd, 0xc7, 0x27, 0xd9, 0xb4, 0x5d, 0xe7, 0x6c, 0x27, 0x31, 0xe8, 0xac, 0x38, 0x2e, 0x35, 0x05, 0x59, 0x32, 0x66, 0x67, 0x77, 0x8b, 0xc1, 0xf6, 0x0e, 0x69, 0xea, 0xba, 0x9b, 0x47, 0xae, 0x5e, 0xa6, 0x48, 0x33, 0xf6, 0xf6, 0xf6, 0xd8, 0x9d, 0x0c, 0xd9, 0x4b, 0x27, 0xf8, 0x81, 0xa1, 0x28, 0x62, 0x46, 0x93, 0x31, 0x3a, 0xd3, 0x75, 0x40, 0x77, 0x4e, 0x72, 0x69, 0xc9, 0x41, 0xaf, 0x1c, 0x40, 0xab, 0xe4, 0x5f, 0xed, 0x2b, 0x68, 0x56, 0x15, 0xae, 0xb5, 0x28, 0x3c, 0x67, 0xad, 0x6d, 0x9c, 0x50, 0x9b, 0x52, 0x3e, 0x81, 0x0c, 0xe9, 0x84, 0x4e, 0x22, 0xb6, 0xd5, 0xeb, 0x33, 0xc9, 0x52, 0xb4, 0xce, 0x29, 0x8c, 0x66, 0x6f, 0x3c, 0x24, 0x36, 0x96, 0x34, 0xcb, 0x28, 0xb4, 0x25, 0x90, 0x6a, 0xae, 0x48, 0x9a, 0xea, 0xb0, 0x36, 0xf7, 0xdb, 0xca, 0x9d, 0x13, 0x8b, 0x29, 0x5d, 0x35, 0x03, 0x3b, 0x43, 0x7b, 0xb6, 0xd3, 0x49, 0x41, 0x91, 0x1f, 0x04, 0x1a, 0xdf, 0xef, 0x32, 0x28, 0x39, 0x2d, 0x8d, 0xeb, 0xbc, 0xd5, 0x75, 0x59, 0x4c, 0xb7, 0xa6, 0x74, 0x60, 0xda, 0x9d, 0x0e, 0xd6, 0xb8, 0x6a, 0x7c, 0x32, 0x99, 0x50, 0x08, 0x4b, 0x77, 0x75, 0x0d, 0x11, 0x46, 0x58, 0x01, 0x3b, 0xe3, 0x11, 0x2a, 0xf3, 0xf0, 0x76, 0xb6, 0x76, 0xa6, 0xaa, 0xa6, 0x66, 0x25, 0x37, 0x15, 0x60, 0x28, 0x05, 0x52, 0x1a, 0x22, 0x1e, 0xe9, 0x64, 0x34, 0x17, 0xa4, 0x9b, 0xc1, 0x72, 0xb6, 0x15, 0x3a, 0x3f, 0x63, 0x98, 0x56, 0x92, 0xdb, 0x77, 0xde, 0xca, 0xd1, 0x8d, 0x19, 0xfe, 0x5c, 0x5b, 0xba, 0x5c, 0xbb, 0x78, 0x3c, 0xde, 0xaf, 0xd0, 0x3d, 0x8f, 0x56, 0x14, 0x4d, 0xfd, 0xce, 0xd6, 0xd6, 0xd6, 0xcc, 0x82, 0xdb, 0x7a, 0xb4, 0xe0, 0xcc, 0x53, 0xd2, 0x39, 0xfe, 0xba, 0xef, 0x7b, 0xf5, 0x0d, 0x36, 0xdb, 0x21, 0x98, 0x17, 0xa2, 0x51, 0x73, 0x96, 0x7f, 0xcd, 0x24, 0x21, 0x29, 0x69, 0x13, 0x41, 0x10, 0x4d, 0xf1, 0x4d, 0xad, 0xb5, 0xa4, 0x69, 0x4e, 0x14, 0x46, 0x73, 0x9d, 0x83, 0x26, 0x78, 0xac, 0x89, 0xea, 0x6c, 0xbe, 0xf7, 0xbe, 0xba, 0x94, 0x9d, 0xf2, 0xec, 0x6d, 0x76, 0x52, 0x9a, 0x49, 0x4a, 0xb5, 0xc1, 0x37, 0x1f, 0x4e, 0x80, 0x76, 0x3b, 0x28, 0xd7, 0xcf, 0x05, 0xb1, 0xea, 0xa8, 0x82, 0xfa, 0xbb, 0x7f, 0xe5, 0xdd, 0xdc, 0xf7, 0xb9, 0xcf, 0x5c, 0xb1, 0xa5, 0x69, 0xf3, 0x78, 0xf3, 0x5b, 0x7e, 0x94, 0xdf, 0xf8, 0x8f, 0x3f, 0x5b, 0x23, 0x43, 0x5f, 0x72, 0xcd, 0x77, 0xf1, 0xd4, 0x57, 0xff, 0x94, 0xa2, 0xa8, 0x9c, 0x89, 0x04, 0xbd, 0xae, 0x47, 0xbf, 0xb7, 0x38, 0x05, 0xcd, 0x57, 0xde, 0x81, 0xed, 0xf3, 0x83, 0x2a, 0xe7, 0x63, 0xc7, 0x8e, 0xd5, 0xe8, 0xe3, 0x3f, 0xf8, 0xbd, 0x3f, 0xe0, 0xdd, 0xbf, 0xf2, 0xee, 0xfd, 0x8c, 0x5c, 0x49, 0xd6, 0xd6, 0x5a, 0x9c, 0xba, 0x66, 0x99, 0xb5, 0xd5, 0x76, 0x2d, 0xc8, 0xd1, 0xbc, 0x3f, 0x2b, 0x9d, 0x6d, 0x67, 0x87, 0xd9, 0xc2, 0x98, 0x83, 0xf9, 0xdc, 0xaf, 0xfd, 0x3b, 0x7f, 0x97, 0x87, 0x1f, 0xfb, 0x22, 0x8f, 0x3e, 0xf2, 0x04, 0x5f, 0x79, 0xfa, 0x1e, 0xee, 0xb9, 0xf7, 0x1e, 0x00, 0x7e, 0xf1, 0x5d, 0xef, 0x9a, 0x4a, 0x26, 0x3e, 0xf4, 0xeb, 0xbf, 0xcd, 0x9b, 0xdf, 0xf2, 0xa3, 0x0b, 0xaf, 0xef, 0x1d, 0x3f, 0x7c, 0x27, 0x1f, 0xff, 0xfd, 0x8f, 0xd1, 0xef, 0x79, 0x1c, 0x5e, 0x0f, 0xc0, 0xe6, 0x4c, 0x26, 0xd3, 0xca, 0x8e, 0x93, 0xc9, 0x64, 0xce, 0xc8, 0xa2, 0x96, 0x1d, 0x4e, 0x16, 0xc3, 0x1d, 0x0c, 0x87, 0x43, 0xa4, 0xcc, 0xea, 0x67, 0x43, 0x08, 0x41, 0xe0, 0x47, 0x97, 0x9f, 0x74, 0x8d, 0x63, 0x67, 0x23, 0x2c, 0x04, 0x9d, 0x4e, 0x48, 0xb7, 0x1b, 0x30, 0x8e, 0x33, 0x3e, 0xf5, 0xfb, 0xbf, 0x77, 0xd9, 0xbe, 0x02, 0x93, 0x74, 0x73, 0xe1, 0x7b, 0xe3, 0x8d, 0x6f, 0x7c, 0x1b, 0x1f, 0xfd, 0xe8, 0x7b, 0x90, 0x1d, 0xbf, 0x1e, 0xe1, 0x55, 0x23, 0xaf, 0x20, 0x5a, 0xfc, 0x5e, 0x1b, 0xc5, 0x23, 0x96, 0xbc, 0x16, 0x87, 0x0e, 0x85, 0x9c, 0x3f, 0xbf, 0xf1, 0x0d, 0x0b, 0xe8, 0xe3, 0x71, 0x8c, 0x17, 0x06, 0xb4, 0x3b, 0x3d, 0xc0, 0xa0, 0xad, 0x41, 0x60, 0xf1, 0xc3, 0xc0, 0xb5, 0xd7, 0x93, 0x09, 0x2b, 0xab, 0xc7, 0x5d, 0xd1, 0xa0, 0x21, 0x08, 0x73, 0xa2, 0x96, 0x2e, 0x81, 0x65, 0x13, 0x56, 0x56, 0x63, 0x7c, 0xaf, 0xc5, 0x89, 0x6b, 0xaf, 0x67, 0x79, 0xb9, 0x4b, 0x91, 0xef, 0x17, 0x63, 0x9e, 0xe7, 0x4c, 0x51, 0x82, 0xf0, 0x04, 0x02, 0xc7, 0x3e, 0xb1, 0x56, 0xa0, 0x0b, 0x07, 0x74, 0x34, 0x06, 0x0a, 0x23, 0x88, 0x3a, 0x9d, 0x46, 0x81, 0x55, 0xcc, 0x15, 0x5d, 0x71, 0x8a, 0xe3, 0xf3, 0x2b, 0x9f, 0xb0, 0xb5, 0xca, 0x55, 0xed, 0x65, 0x8e, 0x1c, 0x31, 0xa5, 0xf0, 0x50, 0x80, 0xce, 0x0b, 0xfc, 0xc0, 0xb5, 0xc4, 0xf3, 0x74, 0x44, 0x9c, 0xec, 0x30, 0x1c, 0x6c, 0x70, 0xee, 0xc2, 0xd7, 0x48, 0x47, 0x17, 0xf1, 0x85, 0xaa, 0xcf, 0xa9, 0xaa, 0xcc, 0x5d, 0x57, 0xb7, 0xb4, 0x9f, 0xae, 0x41, 0x97, 0x0d, 0x49, 0x4f, 0x1a, 0x2c, 0x26, 0xaf, 0x55, 0x06, 0x5e, 0x83, 0x52, 0x05, 0x4a, 0x7a, 0xf5, 0x08, 0xc1, 0xf3, 0x02, 0x46, 0x93, 0xc4, 0xed, 0x77, 0xd2, 0xe9, 0xb0, 0xfb, 0x61, 0x8b, 0x30, 0x4a, 0x1d, 0x0e, 0xc6, 0x18, 0x3c, 0x63, 0x67, 0x94, 0xdf, 0xa6, 0x0b, 0x9f, 0x59, 0x1d, 0x96, 0x6a, 0x7f, 0xad, 0x8b, 0x58, 0xc3, 0x9c, 0x2e, 0x78, 0x95, 0x6c, 0x38, 0x3a, 0x9a, 0xab, 0xd8, 0x6b, 0x0b, 0x6d, 0x21, 0xa6, 0xbc, 0x4b, 0xa4, 0x01, 0x0a, 0x83, 0x15, 0x16, 0x4d, 0x69, 0x5c, 0x63, 0xf6, 0x0b, 0xea, 0xaa, 0xc3, 0x6c, 0x22, 0x4b, 0xaf, 0xdd, 0x21, 0xcd, 0x73, 0x54, 0xe0, 0xd3, 0xf6, 0xdc, 0xf3, 0x7c, 0xf5, 0xd5, 0xce, 0x65, 0x6f, 0x92, 0xa5, 0x3c, 0xf9, 0xb5, 0xa7, 0x19, 0xee, 0x8d, 0x9d, 0xb0, 0xcc, 0x41, 0xb3, 0x4d, 0x29, 0x65, 0x1d, 0x90, 0x66, 0xe7, 0xb9, 0xd5, 0x87, 0x6f, 0x1d, 0x9a, 0xa7, 0xde, 0xcc, 0x72, 0x5e, 0x67, 0xdb, 0x18, 0xcd, 0x05, 0x9b, 0x94, 0x01, 0x75, 0xb6, 0xc2, 0x6d, 0xaa, 0x01, 0x35, 0x5b, 0xc9, 0x53, 0x2d, 0xc3, 0x72, 0xa3, 0x72, 0x34, 0x8d, 0xb4, 0xfe, 0xb9, 0x66, 0x20, 0x5b, 0x5b, 0x5b, 0x9b, 0xf3, 0x51, 0x6f, 0x26, 0x15, 0x5e, 0x14, 0x1d, 0x58, 0xb9, 0x57, 0xee, 0x43, 0xcd, 0xdf, 0x3b, 0xe8, 0xf7, 0x67, 0xd9, 0x52, 0xb3, 0x6c, 0x80, 0x26, 0x0a, 0x74, 0x96, 0x82, 0xe7, 0x7e, 0x56, 0x4f, 0x09, 0x29, 0xec, 0xa3, 0x87, 0xf5, 0x81, 0xda, 0xc4, 0xb3, 0xa3, 0x8b, 0x4a, 0x7f, 0xf9, 0x20, 0xff, 0xf9, 0xd9, 0x75, 0x6c, 0xca, 0x20, 0xce, 0x66, 0xdb, 0x2e, 0xa8, 0x4b, 0x56, 0x57, 0x5a, 0xf5, 0x6b, 0x57, 0xed, 0xf7, 0xcf, 0xfc, 0xc5, 0x7d, 0x7c, 0xe6, 0x2f, 0x7e, 0x88, 0x1f, 0x7f, 0xeb, 0x5b, 0x6b, 0x64, 0xf2, 0xa8, 0xd4, 0xff, 0x5f, 0xa4, 0xdd, 0x78, 0xe4, 0xc8, 0x61, 0x5e, 0x7a, 0xfd, 0xf7, 0xf0, 0xe4, 0x57, 0xfe, 0xd0, 0x8d, 0x43, 0x46, 0xa3, 0x12, 0x5f, 0xa0, 0xe8, 0x74, 0x02, 0x5a, 0x2d, 0xcb, 0xf1, 0x63, 0x4b, 0x04, 0x81, 0xb7, 0x38, 0x78, 0x28, 0x8c, 0xa6, 0x54, 0xc9, 0x1e, 0x7d, 0xe4, 0x91, 0xaf, 0x3b, 0x8f, 0xbf, 0xfe, 0xba, 0xa3, 0x3c, 0xf9, 0xd4, 0xf3, 0xf5, 0xbf, 0x95, 0x12, 0x2c, 0x2d, 0xf9, 0x9c, 0x3c, 0xde, 0x61, 0x6d, 0xb5, 0x45, 0x14, 0x39, 0x64, 0x71, 0x13, 0xf3, 0x50, 0x75, 0x7e, 0xaa, 0x6b, 0x93, 0xa5, 0x94, 0xd4, 0x94, 0x83, 0x3f, 0x6f, 0x35, 0xef, 0xad, 0x40, 0x5d, 0x55, 0x0b, 0xb8, 0xd2, 0x73, 0xbf, 0xf7, 0x9e, 0x3f, 0x7b, 0x41, 0x6f, 0xf0, 0xaf, 0xb7, 0x9e, 0x6f, 0x7d, 0xcb, 0x5b, 0xb9, 0xef, 0xbe, 0xdf, 0x65, 0x79, 0x39, 0xc4, 0xf7, 0xd5, 0x1c, 0xd3, 0x24, 0x08, 0x82, 0x29, 0xa7, 0xaa, 0x3c, 0xcf, 0xeb, 0x67, 0x27, 0x5b, 0xd0, 0x0b, 0xbc, 0xdb, 0xed, 0xd0, 0xeb, 0xb5, 0xa6, 0x02, 0xfa, 0x64, 0x72, 0xf9, 0x63, 0x92, 0xc7, 0x1e, 0x7d, 0x94, 0x76, 0xcb, 0xc7, 0xf7, 0x15, 0xdd, 0x4e, 0xc0, 0xc9, 0x13, 0x2b, 0x0c, 0x87, 0x09, 0x77, 0x7f, 0xf8, 0xc3, 0x97, 0x15, 0xd0, 0xaf, 0x14, 0x35, 0xbe, 0xbc, 0xb2, 0x52, 0x06, 0x2c, 0x85, 0xe7, 0xed, 0x1b, 0x63, 0x80, 0xd3, 0x41, 0x5f, 0xf4, 0x30, 0x25, 0xe5, 0xc8, 0x53, 0x70, 0xfe, 0xcc, 0xe7, 0xaf, 0x48, 0x54, 0xe8, 0x72, 0x8e, 0x43, 0x87, 0x8f, 0xf0, 0xf4, 0x93, 0x17, 0x58, 0x5b, 0x5f, 0xc2, 0x18, 0x41, 0x56, 0x14, 0xc8, 0x54, 0xa2, 0x02, 0xa7, 0x40, 0x36, 0x99, 0x58, 0x54, 0x36, 0x2c, 0x91, 0xd5, 0xd4, 0x95, 0x2c, 0x02, 0xa2, 0x4e, 0xc8, 0xcb, 0x6f, 0x39, 0xc1, 0xde, 0xc4, 0xb0, 0x3d, 0xda, 0x61, 0x98, 0x0c, 0xeb, 0xca, 0x76, 0x5f, 0xc4, 0x44, 0x32, 0x1e, 0xa8, 0xb2, 0x88, 0x71, 0x3a, 0xed, 0xbe, 0x17, 0x96, 0x89, 0x9f, 0x1b, 0xc3, 0xe6, 0xf1, 0xa4, 0x6e, 0x7d, 0x6b, 0xbd, 0xcf, 0x13, 0xaf, 0xa4, 0x4e, 0xa3, 0xde, 0x0a, 0x59, 0x3e, 0x21, 0xcd, 0xf2, 0x7a, 0xf6, 0x6d, 0x72, 0xd7, 0x25, 0x12, 0x28, 0x74, 0x91, 0x61, 0x4c, 0xc1, 0x24, 0x19, 0x31, 0xda, 0xdb, 0x22, 0x2b, 0x86, 0x58, 0x3b, 0x24, 0x9e, 0x0c, 0xd0, 0x56, 0xb3, 0xdc, 0xe9, 0x53, 0xe8, 0x6c, 0xca, 0x50, 0xa5, 0xe2, 0x9f, 0x03, 0xa4, 0x69, 0x56, 0x83, 0xde, 0x04, 0x0e, 0x90, 0x4d, 0x29, 0xd1, 0x8d, 0x90, 0x08, 0x59, 0x2a, 0x95, 0x0a, 0x40, 0x7a, 0x04, 0x7e, 0x84, 0xaf, 0x02, 0x84, 0x05, 0x9d, 0x1b, 0x26, 0x45, 0x0a, 0x98, 0xfd, 0x78, 0x61, 0xa1, 0xe3, 0x87, 0x68, 0x2f, 0x71, 0xc9, 0x2e, 0x33, 0x7b, 0xba, 0x9d, 0xee, 0xe4, 0x46, 0xfe, 0x3c, 0x46, 0xcc, 0x36, 0x78, 0xe2, 0xbe, 0x15, 0x73, 0x7b, 0x69, 0x33, 0xf6, 0x55, 0xac, 0x2e, 0x61, 0xca, 0xcf, 0x27, 0xe4, 0x14, 0x51, 0x4b, 0x18, 0x8b, 0xb2, 0x38, 0xc0, 0xb5, 0x36, 0xc8, 0xb2, 0x38, 0xad, 0xc6, 0xd9, 0xf1, 0x38, 0xa1, 0xdd, 0x6e, 0xd3, 0x6a, 0xb5, 0x41, 0x49, 0xe2, 0x34, 0xc1, 0xf3, 0x02, 0xba, 0xad, 0x2e, 0xed, 0x76, 0x9b, 0xb4, 0xc8, 0xe9, 0x76, 0xfb, 0x84, 0x9d, 0x2e, 0xdd, 0x8b, 0x9b, 0x6c, 0xef, 0x8e, 0xf0, 0xd2, 0x78, 0x32, 0xe5, 0x42, 0xd4, 0x04, 0x56, 0x55, 0xd4, 0x84, 0x26, 0x87, 0xaf, 0x19, 0x40, 0xb2, 0x64, 0x5e, 0x4c, 0xa6, 0xd9, 0xa6, 0xae, 0x80, 0x60, 0x97, 0x02, 0xc6, 0xb5, 0xca, 0x96, 0x7b, 0x9d, 0x48, 0x08, 0x09, 0x4a, 0x62, 0xa5, 0xc2, 0xa8, 0x52, 0x48, 0x41, 0xc8, 0x12, 0xc4, 0x36, 0x1f, 0xd0, 0xc7, 0xe3, 0xf1, 0xfe, 0xfc, 0x5d, 0x08, 0x7c, 0x3f, 0xc0, 0x6b, 0xed, 0x5b, 0x45, 0xe6, 0x79, 0x3e, 0x57, 0x95, 0x8b, 0xf2, 0x67, 0xa5, 0x90, 0x48, 0xbf, 0x0a, 0xb6, 0xc5, 0x14, 0xad, 0xa1, 0x1a, 0x2d, 0xf8, 0x25, 0xfa, 0xfc, 0x20, 0x1c, 0x00, 0x4c, 0x9b, 0x8d, 0x34, 0xdd, 0xe5, 0xaa, 0xd7, 0xf0, 0x7d, 0x7f, 0x6a, 0x43, 0xad, 0x67, 0xf7, 0x55, 0xeb, 0x56, 0x97, 0xce, 0x6e, 0xca, 0x89, 0x18, 0x28, 0x55, 0xc2, 0xf7, 0x9c, 0x2a, 0x01, 0xb2, 0xe4, 0x36, 0xd6, 0xc9, 0x69, 0xd5, 0xfa, 0x29, 0x13, 0xd5, 0x49, 0x31, 0x99, 0x4b, 0x98, 0x9a, 0xe7, 0xda, 0x4c, 0x2a, 0x9a, 0xc2, 0x14, 0xd5, 0x39, 0x24, 0xc9, 0xbc, 0x41, 0x40, 0x18, 0x0a, 0x8e, 0x5e, 0xdd, 0x2e, 0x41, 0x4f, 0x49, 0x4d, 0x67, 0xf9, 0xd5, 0x0f, 0x7e, 0x90, 0x5f, 0xfd, 0xe0, 0x07, 0x79, 0xe3, 0x8f, 0xfc, 0x08, 0xd7, 0xdf, 0x70, 0x03, 0xd7, 0xdf, 0x70, 0xe3, 0xc2, 0x1b, 0xd9, 0xeb, 0x6e, 0xbf, 0x9d, 0x0f, 0xfe, 0xda, 0x9f, 0x01, 0xb0, 0xb9, 0x7d, 0x1f, 0x5a, 0x0b, 0xda, 0xed, 0x88, 0xeb, 0x5f, 0xea, 0x66, 0x79, 0xdd, 0x4e, 0xc8, 0x38, 0xce, 0x0f, 0x6c, 0x5f, 0xbf, 0xb0, 0xd6, 0xbb, 0xe1, 0xed, 0x3f, 0x7f, 0x17, 0x47, 0x8e, 0x9e, 0xbc, 0xec, 0x76, 0xf6, 0x6c, 0x30, 0x5f, 0x59, 0x0e, 0xb9, 0xe6, 0x64, 0x9f, 0xf5, 0xb5, 0x0e, 0xbe, 0xaf, 0x4a, 0x0c, 0xc6, 0xa4, 0xae, 0xc6, 0xab, 0x84, 0xcc, 0x55, 0xbb, 0xfb, 0x72, 0x8c, 0x4a, 0x66, 0x97, 0x15, 0x7c, 0x9b, 0x15, 0xf8, 0xa3, 0x8f, 0x3c, 0x42, 0x14, 0x2a, 0x3e, 0xf8, 0xeb, 0x1f, 0xac, 0x7d, 0xab, 0xff, 0xec, 0xbf, 0xdf, 0xb3, 0xb0, 0x0c, 0xef, 0x1b, 0xee, 0xbc, 0x93, 0xcf, 0x3f, 0xf0, 0xc7, 0x1c, 0x39, 0xb2, 0x7c, 0x20, 0x98, 0xa7, 0xd2, 0xc4, 0x56, 0x4a, 0xd5, 0x00, 0xd2, 0xea, 0x1e, 0x54, 0x72, 0x31, 0x50, 0x5c, 0x75, 0xcf, 0x36, 0x69, 0xa2, 0x8b, 0xe8, 0xb2, 0x1c, 0x3b, 0x76, 0x8c, 0x13, 0xc7, 0x57, 0x69, 0x97, 0x56, 0x95, 0xed, 0x76, 0x40, 0xbf, 0xdf, 0x62, 0x92, 0x14, 0x73, 0xfe, 0xe6, 0x2f, 0x66, 0x50, 0xef, 0x74, 0xda, 0x44, 0x41, 0x9f, 0xbd, 0xd1, 0x1e, 0x61, 0x14, 0xd6, 0x14, 0x30, 0x29, 0x25, 0x99, 0x5e, 0x1c, 0xa5, 0x1f, 0x44, 0x01, 0x7e, 0xe4, 0x33, 0x1a, 0x65, 0x9c, 0x39, 0x3f, 0xe0, 0x17, 0xfe, 0xd5, 0x4f, 0xfc, 0xb5, 0x3d, 0x11, 0x2e, 0x75, 0xcf, 0x54, 0x8e, 0x86, 0x57, 0x9d, 0x58, 0xc2, 0xf7, 0x7d, 0xe7, 0x1c, 0xa6, 0x0a, 0x07, 0xcc, 0x0b, 0xd6, 0xd8, 0xb9, 0xb0, 0xea, 0x02, 0xb2, 0xe7, 0xc6, 0x08, 0x7e, 0x10, 0x38, 0x7c, 0x8e, 0x82, 0x76, 0xdf, 0x70, 0x68, 0xbd, 0xdf, 0xd8, 0x1f, 0x2a, 0xa7, 0xc8, 0xfd, 0x80, 0x74, 0xf4, 0x70, 0x58, 0x07, 0x7a, 0x6b, 0x85, 0xa3, 0x44, 0x35, 0x3c, 0x17, 0x54, 0x28, 0x6a, 0xa0, 0xb0, 0x0b, 0xbc, 0xba, 0x81, 0x46, 0x37, 0x14, 0x46, 0xa0, 0xa4, 0xab, 0xf6, 0x7d, 0xd5, 0x76, 0x7b, 0xa3, 0x71, 0xad, 0x72, 0x25, 0x7d, 0x0a, 0x9d, 0x12, 0xf8, 0x0a, 0x21, 0x73, 0xb4, 0x89, 0xc9, 0x8b, 0x5d, 0x76, 0x87, 0x67, 0x39, 0xfb, 0xdc, 0x57, 0x98, 0xa4, 0xdb, 0xce, 0x60, 0xc5, 0xee, 0x63, 0x8b, 0xac, 0xad, 0x24, 0x5e, 0x6d, 0xf9, 0x3e, 0xaa, 0x3c, 0x77, 0x8b, 0x31, 0x8e, 0xf6, 0x56, 0xe9, 0x6c, 0xcc, 0x3a, 0x4b, 0xee, 0x83, 0x8f, 0x45, 0x69, 0x3e, 0x14, 0xe3, 0x07, 0x1e, 0x42, 0x78, 0x0e, 0x6c, 0x97, 0xe4, 0x78, 0x4a, 0xd1, 0x0d, 0x02, 0x54, 0xd0, 0x46, 0x25, 0x05, 0xed, 0xb6, 0x77, 0x60, 0xab, 0xfd, 0xa0, 0x99, 0x7a, 0xc5, 0x76, 0xaa, 0x64, 0xbc, 0x41, 0x10, 0x20, 0x0f, 0x08, 0xe8, 0x65, 0x0c, 0x10, 0x20, 0x4d, 0x13, 0x73, 0x45, 0x89, 0xd9, 0x68, 0x16, 0xb7, 0x12, 0xe9, 0xf9, 0x18, 0x01, 0x42, 0x7a, 0xa8, 0xc0, 0xaf, 0xc1, 0x7f, 0x71, 0x1c, 0xa3, 0xa4, 0xc3, 0x00, 0x24, 0x59, 0x4a, 0xa8, 0x23, 0xb2, 0x22, 0xa7, 0xdd, 0xe9, 0x11, 0x84, 0x21, 0x05, 0x96, 0xc1, 0xd6, 0x0e, 0xbb, 0xbb, 0x43, 0x3c, 0x3f, 0x64, 0x32, 0x49, 0x01, 0x89, 0xd7, 0x6a, 0xb5, 0xa6, 0x82, 0xd8, 0x41, 0x95, 0xe0, 0x2c, 0x30, 0xae, 0xbe, 0x00, 0x65, 0x10, 0x3b, 0x68, 0x4e, 0x7b, 0x50, 0xe5, 0x3b, 0xfb, 0xbd, 0x2a, 0xab, 0xab, 0x12, 0x89, 0x83, 0x28, 0x6a, 0xb3, 0xd5, 0x7b, 0x55, 0xb5, 0x1f, 0xe4, 0x97, 0xde, 0x5c, 0x7c, 0xa5, 0xd4, 0x94, 0xdb, 0xdb, 0xbe, 0xc7, 0xac, 0x9a, 0x02, 0xcd, 0x65, 0x59, 0x56, 0xb7, 0xd6, 0x2b, 0xae, 0x67, 0x93, 0xbb, 0xfb, 0x42, 0xa0, 0x38, 0x25, 0xfd, 0x19, 0xb0, 0x60, 0xe3, 0x3c, 0xac, 0x20, 0x99, 0x94, 0x7c, 0x41, 0x3f, 0x24, 0x0a, 0x5b, 0x53, 0x33, 0x75, 0x5d, 0x68, 0xd2, 0x3c, 0x9b, 0x52, 0x47, 0xaa, 0x2a, 0x9f, 0xea, 0x67, 0x9a, 0x28, 0xf5, 0x59, 0x03, 0x01, 0x80, 0x56, 0xbb, 0x33, 0xd5, 0x62, 0x6f, 0x56, 0xfb, 0xd5, 0x26, 0xde, 0x6c, 0xf5, 0x07, 0xbe, 0x9d, 0x9a, 0xe3, 0x6b, 0x93, 0x4c, 0x9d, 0x7f, 0xb5, 0xd9, 0x47, 0xa1, 0xf3, 0x44, 0x56, 0x67, 0x86, 0x6c, 0x6d, 0xc7, 0xb5, 0x9b, 0x13, 0xc0, 0xdd, 0x1f, 0xfe, 0x30, 0x00, 0x3f, 0xf8, 0x03, 0x3f, 0xb8, 0x70, 0x00, 0xea, 0xf6, 0x7a, 0x9c, 0x38, 0xf1, 0x77, 0xf9, 0xd2, 0x97, 0x7e, 0x97, 0x34, 0x2b, 0xf0, 0x95, 0x53, 0xed, 0x6a, 0xb7, 0xfc, 0x52, 0xbd, 0xca, 0xd4, 0x9d, 0x91, 0xd9, 0x60, 0xf0, 0xc2, 0x00, 0x6c, 0xcd, 0xf9, 0x0b, 0x17, 0xa7, 0x82, 0xf4, 0xe5, 0x1c, 0x4a, 0x09, 0x5a, 0x91, 0xa2, 0xdb, 0x75, 0x18, 0x82, 0x95, 0xe5, 0x00, 0x63, 0x33, 0x86, 0x7b, 0xb1, 0x4b, 0xc4, 0x32, 0xa6, 0x3a, 0x3e, 0xcd, 0x71, 0x94, 0x10, 0x02, 0x45, 0x40, 0x12, 0xe7, 0x57, 0xb4, 0x61, 0x1f, 0x3f, 0xda, 0xe1, 0xdc, 0xc6, 0x78, 0xaa, 0xe5, 0x7f, 0x25, 0x6e, 0x73, 0xaf, 0xff, 0x07, 0x6f, 0xe2, 0x2f, 0xff, 0xf2, 0xee, 0x03, 0xbb, 0x3b, 0x4d, 0xfb, 0xe3, 0xa6, 0x30, 0x89, 0xab, 0x70, 0x16, 0x0b, 0xe8, 0x7e, 0xb0, 0x4f, 0xe9, 0xac, 0xba, 0x61, 0x69, 0x5a, 0xf0, 0xdb, 0xbf, 0xf9, 0x1e, 0x7e, 0xfc, 0x27, 0xde, 0x71, 0x49, 0x56, 0xc4, 0x67, 0x3e, 0xfd, 0x69, 0x1e, 0x7c, 0xf0, 0x21, 0xee, 0xb9, 0xf7, 0x0f, 0xf9, 0xa6, 0x5b, 0x8e, 0x96, 0x48, 0x66, 0x8d, 0xd1, 0x39, 0x57, 0x1f, 0xe9, 0x32, 0x1c, 0x4e, 0x5e, 0x10, 0x54, 0xf8, 0xd7, 0xad, 0x80, 0xaf, 0x3d, 0x75, 0x1d, 0xbf, 0xfc, 0xde, 0xbb, 0xf9, 0x37, 0xef, 0x78, 0x63, 0xad, 0x28, 0x58, 0x3d, 0xef, 0x95, 0xd3, 0xe4, 0xe5, 0x1e, 0x37, 0xdf, 0x72, 0x0b, 0xef, 0x7b, 0x6f, 0xcc, 0xfa, 0x7a, 0xb7, 0x14, 0xac, 0x29, 0xf8, 0xdc, 0x43, 0xcf, 0xf0, 0xba, 0xdb, 0x6f, 0x7f, 0xd1, 0x40, 0xa4, 0xb3, 0xcf, 0xcb, 0xbf, 0xfe, 0xb7, 0x1f, 0xe0, 0xdf, 0xfd, 0xd2, 0xbb, 0xe8, 0x74, 0x53, 0xe2, 0x78, 0xc4, 0x60, 0xb8, 0x47, 0x10, 0x44, 0xac, 0xae, 0xae, 0x12, 0xf9, 0x3d, 0x94, 0x0a, 0xf0, 0x42, 0xf0, 0x42, 0x89, 0xf2, 0x85, 0xb3, 0xc2, 0x28, 0x8d, 0xa7, 0x0a, 0x55, 0x5a, 0x8a, 0x96, 0xc6, 0x1f, 0x9e, 0xda, 0xaf, 0xbe, 0xad, 0x85, 0x71, 0x9c, 0xd7, 0xc1, 0xdb, 0xb5, 0xde, 0x4d, 0x29, 0xfe, 0x54, 0x15, 0x37, 0xb6, 0xee, 0x24, 0x66, 0x59, 0x81, 0x45, 0xe3, 0x79, 0xa6, 0xde, 0x77, 0x3d, 0xdf, 0x75, 0xf4, 0x94, 0x70, 0x23, 0x33, 0x61, 0x2c, 0x1a, 0xa7, 0xf7, 0x8f, 0x94, 0x78, 0x9e, 0x8f, 0x31, 0x05, 0x79, 0x9a, 0x51, 0x98, 0x09, 0xc6, 0x56, 0x56, 0xa7, 0x19, 0x59, 0x96, 0xe0, 0x13, 0x4e, 0xd1, 0x20, 0x8b, 0x62, 0xbf, 0xf5, 0xed, 0xfb, 0x7e, 0x8d, 0xf3, 0x30, 0x46, 0xcf, 0x71, 0xbc, 0xb1, 0x12, 0x21, 0x2b, 0xde, 0xbc, 0x71, 0x1c, 0x79, 0x6f, 0xdf, 0x54, 0xa5, 0x28, 0x0a, 0xa4, 0xb2, 0xe5, 0x68, 0x35, 0x23, 0x9b, 0xc4, 0xa8, 0x28, 0xa2, 0xdd, 0xe9, 0x10, 0x76, 0x3a, 0x90, 0xe7, 0x18, 0x93, 0x1c, 0x68, 0x2e, 0xd6, 0xec, 0x70, 0x1d, 0x64, 0xee, 0x22, 0xaa, 0xb6, 0x7f, 0x43, 0xb8, 0xa9, 0x4a, 0x32, 0xac, 0xd6, 0xd8, 0x52, 0xc0, 0x29, 0x50, 0xb3, 0x4a, 0xa4, 0xb3, 0xe6, 0x65, 0x1e, 0xd6, 0x03, 0x2b, 0x05, 0x42, 0x7a, 0xf8, 0x51, 0x88, 0xf4, 0x14, 0x93, 0x24, 0x63, 0x12, 0x8f, 0xf1, 0xa2, 0x80, 0x24, 0x4b, 0x29, 0x76, 0x77, 0x1d, 0xee, 0xa5, 0x70, 0x2d, 0xf7, 0x4c, 0x17, 0xec, 0xed, 0xee, 0x11, 0x09, 0xc5, 0xf9, 0xf3, 0x17, 0xc9, 0x8a, 0x9c, 0xb4, 0x94, 0x79, 0xf6, 0x34, 0x16, 0xe5, 0x97, 0x2f, 0xd6, 0xa8, 0xe6, 0xaa, 0x45, 0x69, 0x06, 0x33, 0xaf, 0x81, 0xc0, 0x76, 0xf6, 0xa2, 0xd3, 0x20, 0xb4, 0x59, 0x54, 0x76, 0x33, 0x38, 0x1d, 0x04, 0xf0, 0xd2, 0xd8, 0x03, 0x69, 0x6b, 0xfb, 0xc2, 0x28, 0xc2, 0x65, 0x2f, 0x82, 0x1a, 0x51, 0xdb, 0x0c, 0xe0, 0xbe, 0xef, 0xe3, 0x89, 0xf9, 0x39, 0x7b, 0xdd, 0x61, 0x08, 0xda, 0xd3, 0x48, 0xdd, 0x72, 0xb3, 0xcb, 0xf3, 0xac, 0x6e, 0x0f, 0x09, 0xa1, 0x9c, 0x15, 0x5d, 0x1d, 0x38, 0x6d, 0x4d, 0x95, 0x68, 0xb6, 0xc9, 0x67, 0x03, 0x6a, 0x53, 0x93, 0x7c, 0x7f, 0x36, 0x32, 0x33, 0xef, 0x11, 0x16, 0x63, 0x9d, 0x4a, 0xd5, 0x2c, 0xc5, 0x0d, 0xa0, 0xd3, 0x8e, 0x1a, 0x20, 0x36, 0x4d, 0x51, 0x98, 0xc6, 0x06, 0x0c, 0xa3, 0xd1, 0x70, 0x2e, 0xc9, 0x71, 0x1b, 0xb3, 0x2c, 0x39, 0xd1, 0xae, 0x25, 0xe6, 0xf9, 0x02, 0xa9, 0x40, 0xeb, 0xa2, 0x54, 0x08, 0xcb, 0x31, 0xd6, 0xf1, 0xcd, 0x9b, 0x72, 0x83, 0x5a, 0xbb, 0x6b, 0x91, 0xa4, 0x09, 0x93, 0x64, 0x5a, 0x06, 0xb1, 0xca, 0x72, 0x2b, 0x24, 0xef, 0xda, 0x6a, 0xbb, 0xd6, 0x5f, 0x1f, 0x8f, 0x33, 0xe2, 0x49, 0x3e, 0x15, 0xd8, 0xef, 0xf8, 0xe1, 0x2b, 0x73, 0x47, 0x7b, 0xdd, 0xed, 0xb7, 0xf3, 0x85, 0x87, 0x3e, 0xc6, 0xce, 0x8e, 0xe6, 0xd0, 0x1a, 0x78, 0x9e, 0x2c, 0xdd, 0xf5, 0x2a, 0xa4, 0x7e, 0xbe, 0x70, 0x65, 0xe6, 0x7c, 0xe9, 0xa7, 0x03, 0x75, 0x14, 0x3a, 0x13, 0x15, 0xa7, 0xca, 0x37, 0x8d, 0x4c, 0xd5, 0xc6, 0x92, 0xa5, 0x9a, 0xe5, 0xe5, 0x88, 0x97, 0xbc, 0x64, 0x99, 0xa5, 0x7e, 0x44, 0xaf, 0xdb, 0xc6, 0x18, 0xcd, 0x78, 0x3c, 0xc1, 0x98, 0x72, 0x8d, 0x23, 0x07, 0x0c, 0xb5, 0x86, 0x06, 0x87, 0x57, 0xd7, 0x56, 0x86, 0x46, 0xae, 0xb2, 0x7e, 0xb8, 0x3f, 0x65, 0x2e, 0x73, 0xd9, 0xa0, 0xb6, 0x55, 0x9f, 0x8b, 0xdb, 0x1e, 0x42, 0xe8, 0xba, 0xd2, 0x7d, 0xe6, 0xe9, 0xc5, 0x25, 0x64, 0xaf, 0xbf, 0xe1, 0x46, 0x3e, 0xfb, 0x59, 0x97, 0x8c, 0x56, 0xf7, 0xb8, 0x52, 0xaa, 0x4e, 0x06, 0x67, 0x35, 0x18, 0xf6, 0x47, 0x58, 0x0b, 0xba, 0xad, 0x95, 0x9e, 0x04, 0x6e, 0x06, 0xeb, 0xd5, 0x72, 0xa3, 0x0f, 0x3e, 0x71, 0x86, 0x37, 0xfe, 0xa3, 0x37, 0xf1, 0x8b, 0xef, 0x7c, 0xe7, 0xd4, 0x75, 0xfa, 0xad, 0x0f, 0x7d, 0x88, 0xcf, 0xfe, 0xd5, 0x3d, 0x75, 0x92, 0xd5, 0xef, 0x87, 0x4c, 0x26, 0x63, 0x7c, 0x2f, 0x70, 0x6e, 0x5e, 0xed, 0x88, 0x78, 0x7c, 0x91, 0x76, 0xcb, 0xab, 0xc7, 0x12, 0xf7, 0xde, 0xf3, 0x67, 0x0d, 0x7c, 0x47, 0x97, 0xef, 0x7b, 0xfd, 0xf7, 0xf1, 0xbe, 0xf7, 0x7d, 0x90, 0x37, 0xbf, 0xe5, 0x47, 0x79, 0xe0, 0xbe, 0xfb, 0x79, 0xfa, 0xe9, 0xa7, 0xe7, 0x92, 0xc8, 0x6a, 0xd4, 0x32, 0x6b, 0x04, 0xd3, 0xfc, 0xfe, 0x93, 0x5f, 0x7e, 0x82, 0xc3, 0x87, 0x0e, 0xd5, 0xe6, 0x1f, 0x4a, 0x39, 0x90, 0x63, 0x96, 0x2d, 0x5e, 0xa1, 0x7f, 0xd7, 0x77, 0x7d, 0x3f, 0x0f, 0x7f, 0xe9, 0x63, 0x64, 0x39, 0x08, 0xa1, 0xcb, 0x7d, 0xc2, 0x81, 0x48, 0x5f, 0xf3, 0xb7, 0xfe, 0xe6, 0x94, 0xd3, 0xda, 0x8b, 0x15, 0xd4, 0x7f, 0xf1, 0x5d, 0xbf, 0xc4, 0xfb, 0xdf, 0xfb, 0x7e, 0xba, 0xdd, 0x25, 0x8e, 0x1e, 0x8b, 0x10, 0xc2, 0xc7, 0x1a, 0x10, 0x72, 0x19, 0x25, 0x7d, 0x84, 0x94, 0xe4, 0x5a, 0x92, 0x15, 0x4e, 0x3e, 0xba, 0x6a, 0x53, 0xe7, 0x75, 0x41, 0x56, 0xee, 0x17, 0x46, 0x95, 0x2d, 0x77, 0xf7, 0x9c, 0xa7, 0x62, 0xd3, 0x89, 0x9b, 0x5a, 0xc0, 0x16, 0x08, 0xab, 0x50, 0xd8, 0x7a, 0x6f, 0xd3, 0xd6, 0xa2, 0x8d, 0x76, 0x3a, 0xec, 0x9d, 0xca, 0xc6, 0xb9, 0x40, 0x78, 0x82, 0xc8, 0xf7, 0x31, 0xa3, 0x5d, 0xa2, 0x56, 0x80, 0x10, 0xb6, 0x54, 0xad, 0xf3, 0xe8, 0x74, 0x7a, 0x58, 0x23, 0x99, 0x4c, 0x52, 0x5c, 0xa3, 0x4b, 0xe0, 0x07, 0x3e, 0xf7, 0x7f, 0xee, 0x51, 0x72, 0x3d, 0x60, 0x92, 0x6e, 0x32, 0xd8, 0x3b, 0xe7, 0x50, 0xda, 0x13, 0x83, 0x27, 0x1d, 0x36, 0xcb, 0x5a, 0x8b, 0x91, 0x02, 0x15, 0x06, 0x18, 0xab, 0x49, 0x4d, 0x81, 0x28, 0xb5, 0x3c, 0x30, 0xb8, 0xce, 0x82, 0x75, 0x01, 0xbd, 0xea, 0x22, 0xe4, 0xa2, 0xc0, 0x0b, 0x3d, 0x7c, 0x19, 0x30, 0xdc, 0x1d, 0xb0, 0xb2, 0xb2, 0xc4, 0xb1, 0x63, 0x87, 0xb8, 0xf0, 0xfc, 0x39, 0x94, 0x31, 0x04, 0x71, 0x41, 0xa0, 0x3c, 0xa4, 0x10, 0x14, 0x52, 0xe1, 0x1b, 0xcd, 0x9a, 0x14, 0xa4, 0x58, 0x92, 0xe1, 0x2e, 0x04, 0x76, 0xaa, 0xc8, 0xab, 0x0a, 0xc5, 0x28, 0x8a, 0xe8, 0x76, 0xbb, 0x8c, 0x46, 0xa3, 0x7a, 0xdf, 0x0e, 0xc3, 0x90, 0x4e, 0xa7, 0x53, 0x5b, 0xb7, 0x2a, 0xa5, 0x90, 0x9d, 0x90, 0xad, 0xad, 0x2d, 0x94, 0xe7, 0xb1, 0xb4, 0xb4, 0xc4, 0x85, 0x0b, 0x17, 0xc8, 0xb2, 0x8c, 0xf5, 0xf5, 0x75, 0x76, 0x76, 0x86, 0xc8, 0x5a, 0xd3, 0xfe, 0x12, 0x80, 0x6c, 0xd5, 0xc5, 0x0a, 0x30, 0x5a, 0x60, 0x6d, 0x4e, 0x92, 0x14, 0x18, 0x9c, 0xc2, 0xa7, 0x87, 0x87, 0xf5, 0x03, 0x7a, 0xfd, 0x3e, 0x71, 0x1c, 0xb3, 0xb5, 0xb3, 0x47, 0x51, 0x14, 0x5c, 0x3c, 0xbf, 0xc5, 0x64, 0x32, 0x41, 0x29, 0xc5, 0x08, 0x17, 0x03, 0xfb, 0xfd, 0x65, 0x06, 0x83, 0x01, 0x7b, 0x7b, 0x7b, 0x78, 0x83, 0xc1, 0x60, 0x8e, 0xce, 0xd4, 0xa4, 0x91, 0xcd, 0x56, 0xa6, 0x55, 0x25, 0x28, 0x84, 0xc0, 0x14, 0xe9, 0x14, 0x32, 0xbe, 0xf9, 0x3a, 0x6e, 0x46, 0x35, 0x99, 0x02, 0x1c, 0xcc, 0x4a, 0xf0, 0x59, 0x29, 0xe6, 0x32, 0xa3, 0x26, 0x6d, 0xac, 0x29, 0x2c, 0x73, 0x10, 0x40, 0xae, 0x89, 0xb8, 0x3d, 0x08, 0x0d, 0x5e, 0x34, 0x3a, 0x08, 0xcd, 0x3f, 0xab, 0xd9, 0x3b, 0xca, 0x9b, 0x02, 0x3c, 0xcd, 0x62, 0x08, 0x66, 0xd5, 0xe7, 0xe6, 0x93, 0x16, 0x39, 0xed, 0xaf, 0x3c, 0x33, 0x54, 0x6f, 0x0a, 0xf3, 0x1c, 0x14, 0xd0, 0x07, 0x83, 0x41, 0x9d, 0x8d, 0x86, 0x61, 0x38, 0xc5, 0x85, 0x9f, 0xe5, 0xf1, 0x37, 0x93, 0xac, 0xea, 0x9c, 0xfc, 0xd0, 0x9b, 0xfb, 0x5c, 0xcd, 0x8a, 0xac, 0xda, 0xbc, 0xaa, 0x75, 0x6f, 0xae, 0xa7, 0x10, 0x82, 0xe1, 0x70, 0x38, 0xc7, 0x71, 0x6f, 0x22, 0xf2, 0x3b, 0x6d, 0xc1, 0x75, 0xd7, 0x2e, 0x91, 0xa4, 0x86, 0xe7, 0xcf, 0xed, 0x31, 0x1a, 0x65, 0xc4, 0x71, 0x4e, 0xa1, 0xcd, 0x1c, 0xe5, 0x68, 0x91, 0x0d, 0xca, 0xe4, 0x1d, 0x8c, 0x19, 0xcf, 0x25, 0x7b, 0xb3, 0x7e, 0xd0, 0x97, 0x3d, 0xd7, 0xd4, 0xa6, 0xd4, 0x47, 0x76, 0x36, 0x9f, 0x2b, 0x4b, 0x21, 0xeb, 0x6b, 0x1e, 0xcb, 0xcb, 0x9d, 0x99, 0x71, 0x92, 0x4b, 0xb4, 0xd2, 0xcc, 0x30, 0x1c, 0x5a, 0x0e, 0x1f, 0x89, 0xf0, 0x03, 0x4d, 0x92, 0xc5, 0xa4, 0x3b, 0x69, 0xd9, 0x39, 0xa9, 0x2a, 0x71, 0xc8, 0xb2, 0xbc, 0x14, 0x7c, 0x70, 0xe3, 0xa7, 0x56, 0xd4, 0xc2, 0x0b, 0x44, 0x8d, 0x24, 0x8f, 0xfc, 0x65, 0xd2, 0xb4, 0x20, 0x67, 0x71, 0xb0, 0x56, 0x91, 0xe7, 0x74, 0x3a, 0x01, 0xa3, 0x51, 0x56, 0x8f, 0x35, 0x9e, 0x7e, 0xfa, 0xe9, 0x2b, 0x6a, 0xcd, 0x0a, 0xa1, 0xa6, 0x9e, 0xab, 0x26, 0x66, 0xa2, 0xd9, 0x86, 0x6f, 0xce, 0xd2, 0xc7, 0x71, 0xba, 0xd0, 0xfb, 0x0c, 0x06, 0x03, 0xb2, 0x4c, 0xd4, 0xc1, 0xd0, 0xf3, 0x3c, 0xd2, 0x34, 0xe3, 0x1f, 0xbf, 0xe9, 0x9f, 0x70, 0xed, 0xa9, 0x6b, 0xa6, 0x8c, 0x55, 0x2a, 0x84, 0xfb, 0x41, 0xb3, 0xf1, 0x1f, 0x7b, 0xd3, 0x9d, 0x1c, 0x3f, 0x36, 0x26, 0x4d, 0x53, 0x96, 0x96, 0x7a, 0x9c, 0x38, 0xee, 0x36, 0xd3, 0xb7, 0xff, 0xfc, 0x5d, 0x53, 0x1d, 0x96, 0xbb, 0x7f, 0xeb, 0x37, 0x01, 0x6a, 0x8c, 0xc1, 0xca, 0xca, 0x12, 0xa7, 0x4e, 0x9d, 0x3a, 0xf0, 0xf3, 0x3f, 0xf3, 0xf4, 0x53, 0xdc, 0xfb, 0x67, 0xf7, 0x1c, 0xf8, 0x7e, 0x17, 0x37, 0x2e, 0xf0, 0x07, 0xbf, 0xff, 0x5b, 0x1c, 0xbd, 0x7a, 0x19, 0x63, 0x74, 0xcd, 0xbc, 0x29, 0x8a, 0x82, 0x24, 0x4d, 0x17, 0x5e, 0xef, 0x63, 0xc7, 0x8e, 0xf1, 0xe5, 0x27, 0x42, 0xfa, 0xfd, 0x16, 0xa3, 0x38, 0x27, 0x9e, 0x14, 0xc4, 0x71, 0x81, 0xb5, 0x94, 0x78, 0x93, 0xfb, 0x78, 0xe3, 0x8f, 0xfc, 0x08, 0x3f, 0x74, 0xc7, 0x1d, 0xfc, 0xf9, 0x3d, 0xf7, 0xb2, 0xb2, 0xb2, 0xf4, 0xa2, 0x98, 0x1f, 0xdd, 0xf5, 0x53, 0x77, 0xf1, 0x3b, 0x1f, 0xf9, 0x08, 0xcf, 0x9e, 0x4d, 0x31, 0x26, 0x47, 0x5b, 0x81, 0xd1, 0xd9, 0x94, 0x47, 0x42, 0x15, 0xf0, 0xaa, 0x80, 0xdc, 0x5a, 0x5e, 0xae, 0x86, 0x8d, 0x18, 0xeb, 0xa4, 0xa3, 0xa1, 0x51, 0xa4, 0x95, 0x8c, 0x92, 0x4a, 0xa9, 0xd3, 0xb5, 0xb5, 0x2b, 0x30, 0x58, 0x59, 0x68, 0x48, 0x8b, 0x29, 0x64, 0xf9, 0x53, 0xba, 0x74, 0x40, 0x83, 0x42, 0x29, 0x5a, 0x14, 0x64, 0xe5, 0xd8, 0x2e, 0xcf, 0x53, 0xb2, 0xac, 0x60, 0x60, 0x77, 0xe8, 0x76, 0xfb, 0xf4, 0xba, 0x2b, 0x18, 0x9d, 0xb3, 0xb5, 0xb5, 0xcd, 0x70, 0x6f, 0x8b, 0x24, 0x8e, 0x19, 0x8e, 0xb6, 0x29, 0xcc, 0x1e, 0x52, 0x48, 0x74, 0x5e, 0x80, 0x31, 0x14, 0x85, 0x99, 0xc3, 0x69, 0x55, 0x9a, 0x07, 0x75, 0x5d, 0x57, 0xf9, 0x3f, 0xa0, 0xea, 0x19, 0xba, 0xb5, 0x82, 0xd4, 0xa4, 0xe8, 0x2c, 0xc7, 0x88, 0x02, 0x85, 0x60, 0x6f, 0x34, 0xe0, 0xc2, 0x05, 0xb7, 0x16, 0xad, 0x7e, 0x0b, 0x11, 0x17, 0x04, 0xbe, 0xf3, 0x0f, 0x97, 0x46, 0xb3, 0xbd, 0x79, 0x91, 0x73, 0xe7, 0xce, 0x11, 0x78, 0x8a, 0xb5, 0xb5, 0x35, 0x84, 0xe7, 0x02, 0x75, 0xc5, 0xe8, 0xaa, 0xf6, 0xc8, 0x38, 0x8e, 0xd9, 0xde, 0xda, 0xa6, 0xdf, 0xef, 0x13, 0x04, 0xc1, 0xfe, 0xb8, 0xb2, 0xd0, 0x04, 0xca, 0xa3, 0xbd, 0xb2, 0x4a, 0x14, 0x45, 0xc4, 0x45, 0xe6, 0x12, 0x06, 0x29, 0x69, 0xb7, 0xdb, 0x48, 0xeb, 0xba, 0x3f, 0xcb, 0xcb, 0xcb, 0x84, 0x9e, 0xa3, 0x9e, 0x35, 0x3f, 0x57, 0xf5, 0xec, 0x55, 0x98, 0xaf, 0xed, 0x89, 0xa3, 0x1f, 0x62, 0x05, 0x49, 0x96, 0x62, 0x70, 0x2c, 0x0c, 0x6d, 0x2d, 0xf1, 0x64, 0x42, 0x90, 0xb9, 0xa4, 0xdc, 0x93, 0x0a, 0xad, 0x2d, 0x79, 0x92, 0x32, 0x16, 0x63, 0xf2, 0x3c, 0xa7, 0x1d, 0xb5, 0x58, 0x5a, 0xea, 0x51, 0xe4, 0x4e, 0x2c, 0xa7, 0xb2, 0xee, 0xf6, 0x3c, 0x29, 0xf0, 0x6a, 0x11, 0x7c, 0x87, 0xd0, 0xf3, 0x6a, 0xc1, 0xff, 0xf6, 0xdc, 0x7c, 0xa1, 0xb9, 0x49, 0x8c, 0xb2, 0xc9, 0x54, 0x00, 0x6c, 0x06, 0x5d, 0x07, 0xa4, 0xe9, 0x4e, 0x6d, 0xa8, 0x4d, 0x01, 0x18, 0x63, 0x4c, 0xe9, 0x1e, 0x33, 0x4f, 0xc7, 0x92, 0xb6, 0xd4, 0x24, 0xd7, 0x06, 0x6b, 0x2c, 0x1a, 0x8d, 0xce, 0xf2, 0xb9, 0x73, 0xa9, 0x68, 0x6f, 0x97, 0xa2, 0x97, 0xd5, 0xa0, 0xb0, 0xe6, 0xe8, 0xa0, 0x44, 0x21, 0x4a, 0x17, 0x8f, 0xcb, 0x9b, 0xc6, 0x96, 0x55, 0x6c, 0xd5, 0x2d, 0x70, 0x94, 0xb4, 0x34, 0x4d, 0xa6, 0x95, 0xdd, 0x66, 0xac, 0xf6, 0x7c, 0x3f, 0x2c, 0x7f, 0xd7, 0x09, 0x8e, 0x58, 0x3b, 0xdd, 0x9d, 0xa8, 0xbc, 0x83, 0x9d, 0xa4, 0x9f, 0xa8, 0xe7, 0xae, 0xd5, 0x71, 0xf4, 0xa5, 0xd7, 0x4e, 0xad, 0x4f, 0x9a, 0xa6, 0xec, 0x8d, 0x46, 0x4c, 0x26, 0x13, 0xd2, 0x34, 0xa5, 0xdb, 0xed, 0xd6, 0x2d, 0xa9, 0xd0, 0x0b, 0xa7, 0x92, 0x22, 0xa5, 0x14, 0x7b, 0xe3, 0xe1, 0xd4, 0xfa, 0xcf, 0x22, 0xe9, 0xbb, 0xbd, 0xde, 0x54, 0x2b, 0xd6, 0xb5, 0xba, 0xf6, 0x8d, 0x10, 0xd2, 0x24, 0x9f, 0xea, 0x8c, 0x34, 0x47, 0x2c, 0x15, 0x5d, 0x30, 0x0c, 0x05, 0xdd, 0xae, 0xa4, 0xd7, 0x0d, 0xd9, 0x1b, 0xa5, 0x3c, 0x77, 0x76, 0xc0, 0xde, 0x28, 0xe3, 0xe3, 0xbf, 0xff, 0xdf, 0x38, 0x75, 0xea, 0xd4, 0x15, 0xd1, 0xda, 0x82, 0xce, 0x11, 0x8e, 0x78, 0x23, 0xc2, 0xc0, 0x43, 0x08, 0x5b, 0x23, 0x68, 0x2b, 0x59, 0xd8, 0x85, 0x5f, 0x2f, 0xf4, 0x69, 0xb7, 0x9d, 0xce, 0x78, 0xbb, 0x1d, 0x70, 0xe2, 0x44, 0x8f, 0xd5, 0x95, 0x16, 0xbe, 0xaf, 0x48, 0x12, 0x37, 0x56, 0xa8, 0x82, 0x90, 0x7b, 0xa8, 0x9c, 0x10, 0x45, 0x61, 0x5d, 0x32, 0x55, 0x57, 0xb6, 0x04, 0xf8, 0xfe, 0xbe, 0xf2, 0x60, 0xbb, 0x13, 0xd6, 0x14, 0x9f, 0x34, 0xc9, 0xd9, 0xde, 0xde, 0x66, 0x30, 0x18, 0xd6, 0x01, 0x3e, 0x5a, 0x8b, 0x38, 0x77, 0xee, 0x19, 0xd6, 0xaf, 0x5e, 0xe3, 0xc2, 0x85, 0x8d, 0x85, 0x92, 0x9c, 0xb5, 0xf5, 0x55, 0xda, 0x61, 0x81, 0x14, 0x8a, 0xf1, 0x38, 0x25, 0x2f, 0x34, 0xcf, 0x9d, 0x7e, 0xe8, 0x8a, 0x36, 0xfb, 0x8b, 0x17, 0x0a, 0xd6, 0xd6, 0xcd, 0x54, 0x47, 0xac, 0x3a, 0xc7, 0xe6, 0xfd, 0xa8, 0xa4, 0x8f, 0xf4, 0x3d, 0x94, 0xf4, 0x49, 0x16, 0xa4, 0x07, 0xb6, 0xda, 0x6d, 0x96, 0x97, 0xa2, 0xb2, 0xd5, 0x9e, 0x92, 0x24, 0x63, 0xe2, 0xb8, 0xe0, 0xda, 0x53, 0xd7, 0x5c, 0x76, 0x45, 0xfa, 0x3b, 0x1f, 0xf9, 0x08, 0x2f, 0xbb, 0xbe, 0x57, 0x8e, 0xb7, 0x22, 0xe2, 0x38, 0xa6, 0xd0, 0x19, 0xff, 0xf7, 0xff, 0xf3, 0x1b, 0x8c, 0xc6, 0x45, 0x3d, 0xca, 0x39, 0xc8, 0xbc, 0xe5, 0x85, 0x82, 0xe2, 0xb5, 0xa7, 0xae, 0xbb, 0x64, 0xcb, 0xff, 0xe6, 0x5b, 0x6e, 0xe1, 0xe8, 0xb1, 0x57, 0xb2, 0xbd, 0xf5, 0x08, 0xad, 0x48, 0x95, 0xb4, 0x33, 0x97, 0x88, 0x67, 0x85, 0x5e, 0x78, 0xad, 0x97, 0x57, 0x56, 0x30, 0x42, 0xb1, 0x33, 0x1c, 0xe0, 0x79, 0xa2, 0xe4, 0xfe, 0x4b, 0x26, 0x93, 0xa2, 0x46, 0x65, 0xdf, 0xfd, 0xe1, 0x0f, 0xd7, 0xa3, 0x29, 0xe0, 0x45, 0x6b, 0xc7, 0xbf, 0xe1, 0xce, 0x3b, 0xf9, 0xcc, 0xa7, 0x3f, 0xcd, 0x67, 0x1f, 0xb8, 0x48, 0xe4, 0x05, 0x2c, 0xad, 0x74, 0xa6, 0x84, 0xae, 0xaa, 0x39, 0xb9, 0xe3, 0x96, 0x7b, 0xec, 0x95, 0x09, 0x8b, 0xfb, 0x9e, 0x76, 0x7d, 0x43, 0xd3, 0x00, 0x4e, 0xd6, 0x14, 0x30, 0x53, 0x95, 0x27, 0x54, 0xcc, 0x1d, 0x29, 0x84, 0xe3, 0x97, 0x03, 0x42, 0x5a, 0x9c, 0x55, 0xa8, 0xaa, 0x7d, 0x27, 0x84, 0xb0, 0xe4, 0xe3, 0x31, 0xe7, 0xce, 0x9d, 0x65, 0x73, 0xf3, 0x22, 0x49, 0x92, 0x94, 0x55, 0xba, 0xcf, 0xd1, 0xab, 0x4f, 0x72, 0xcd, 0x35, 0xd7, 0xb2, 0xd2, 0x5f, 0xc2, 0xea, 0x84, 0xad, 0x8b, 0x17, 0xf0, 0x24, 0x98, 0xdc, 0x05, 0xcd, 0x56, 0x6b, 0x09, 0x6d, 0x12, 0x8a, 0x52, 0x45, 0x6d, 0x7f, 0x5f, 0x2b, 0x3b, 0x49, 0xda, 0x8d, 0x0a, 0xf3, 0xac, 0x98, 0xe2, 0x9f, 0x4b, 0x31, 0x5d, 0xa1, 0x7b, 0x08, 0xa4, 0x50, 0x48, 0x04, 0xdd, 0x95, 0x16, 0x59, 0x92, 0xb3, 0xb9, 0xb9, 0xc1, 0xe1, 0xc3, 0x57, 0x39, 0x0a, 0xaf, 0x49, 0xc8, 0x32, 0xed, 0xda, 0xed, 0x12, 0x10, 0x16, 0x29, 0x1d, 0x6d, 0xcf, 0x0f, 0x14, 0xd2, 0x73, 0x01, 0xd8, 0xf3, 0x3c, 0x67, 0x87, 0x1c, 0xc7, 0x6c, 0x6c, 0x5c, 0x20, 0x08, 0x02, 0x4e, 0x9c, 0x38, 0xce, 0xc6, 0xc6, 0x06, 0x45, 0x91, 0x97, 0x5e, 0xed, 0xed, 0xba, 0xd8, 0x0c, 0xc3, 0x80, 0x7e, 0xbf, 0xc7, 0xee, 0xf9, 0xe7, 0x09, 0x02, 0x9f, 0x34, 0x4d, 0x19, 0x8f, 0x47, 0xa5, 0x2b, 0x63, 0x50, 0xee, 0x43, 0x2d, 0xa4, 0x14, 0x75, 0x91, 0xe1, 0xd6, 0xcc, 0xed, 0x51, 0x4a, 0xb9, 0xfb, 0xaf, 0x7f, 0xc4, 0xd1, 0x8a, 0x77, 0x87, 0x23, 0xf2, 0xed, 0x2d, 0x3c, 0xe5, 0xb3, 0xba, 0xbe, 0x46, 0x14, 0xb5, 0x88, 0x27, 0x13, 0xce, 0x0f, 0x76, 0xf1, 0x95, 0x87, 0xdf, 0xf1, 0x28, 0x0a, 0x43, 0x36, 0x71, 0x23, 0x02, 0x5f, 0x79, 0x74, 0x3a, 0x1d, 0x56, 0x97, 0xd7, 0x48, 0xd3, 0xd4, 0x81, 0x5d, 0x85, 0xc0, 0x53, 0x0a, 0xaf, 0xdb, 0x6d, 0x4f, 0xa1, 0xb1, 0x9b, 0x42, 0x2d, 0x79, 0x9e, 0xce, 0xa1, 0xb7, 0x9b, 0xa0, 0x98, 0xaa, 0xad, 0x77, 0x50, 0x6b, 0xcf, 0x18, 0xc3, 0x70, 0x38, 0x9c, 0x02, 0x2c, 0xf8, 0xfe, 0x7e, 0xd6, 0x02, 0x30, 0x1a, 0x8d, 0xa6, 0x5a, 0xd9, 0xd5, 0xcf, 0x35, 0x2b, 0xdb, 0x26, 0xc8, 0x6c, 0x1a, 0x90, 0x63, 0xeb, 0x0e, 0xc0, 0x2c, 0x87, 0xbb, 0x59, 0xd5, 0xef, 0x03, 0x2e, 0xe6, 0x03, 0xbf, 0xe7, 0xc9, 0x4b, 0xce, 0xf9, 0x1d, 0xa0, 0xa6, 0x33, 0x47, 0xa9, 0x6b, 0x06, 0xf4, 0x6a, 0x46, 0xe9, 0x5c, 0x81, 0xe4, 0xcc, 0x1a, 0x19, 0x8a, 0x22, 0x03, 0x5c, 0xd0, 0x72, 0xdd, 0x0b, 0x31, 0x65, 0x04, 0xb3, 0xb1, 0x71, 0xbe, 0x5e, 0x3b, 0xdf, 0xf7, 0x89, 0xa2, 0x80, 0x7e, 0xbf, 0xdb, 0x40, 0x11, 0x4f, 0x0e, 0x44, 0x50, 0x82, 0x9b, 0x6b, 0x75, 0xbb, 0x07, 0x9b, 0x37, 0x54, 0xc9, 0xd3, 0x64, 0x12, 0xd7, 0x1c, 0xe4, 0x30, 0x0c, 0x68, 0xb5, 0xa2, 0xa9, 0x6e, 0x85, 0xef, 0x45, 0xb5, 0x92, 0x98, 0xdb, 0xa4, 0x93, 0xfa, 0xc1, 0xd4, 0x5a, 0xb3, 0xb7, 0xb7, 0x37, 0x35, 0x37, 0x6e, 0x45, 0x8a, 0x97, 0x9c, 0xec, 0x31, 0x1e, 0xe7, 0x3c, 0xf3, 0xec, 0x90, 0x77, 0xff, 0xca, 0xbb, 0xa7, 0xb8, 0xd5, 0x97, 0x7b, 0xfc, 0xe2, 0xbb, 0x7e, 0x89, 0x47, 0x1f, 0x79, 0x84, 0xff, 0xf2, 0x3b, 0xef, 0x24, 0x2f, 0xa6, 0x95, 0xee, 0x92, 0x2b, 0x30, 0xcc, 0x08, 0x5b, 0x21, 0xa7, 0xae, 0x6b, 0x11, 0x04, 0x21, 0xd6, 0x1a, 0xc2, 0x50, 0xb1, 0xbc, 0xba, 0x42, 0x9a, 0xa6, 0xb4, 0xbd, 0x68, 0x7a, 0xfc, 0x93, 0x5b, 0x0a, 0xa3, 0x9d, 0x41, 0x89, 0x91, 0x58, 0x64, 0x09, 0xf6, 0xda, 0xf7, 0x2f, 0x2e, 0x0a, 0xa7, 0x24, 0x56, 0xe4, 0x83, 0x12, 0x65, 0xda, 0x22, 0xcf, 0x35, 0x3b, 0x83, 0x98, 0xe1, 0xd0, 0x29, 0x2b, 0x1a, 0x02, 0x1e, 0x7f, 0xe2, 0x29, 0xce, 0x3c, 0xff, 0x2c, 0xaf, 0xb9, 0x7a, 0x8d, 0x23, 0x47, 0x0e, 0xf3, 0xfd, 0xaf, 0x5f, 0x40, 0x35, 0x4c, 0x84, 0x1c, 0xbd, 0x6a, 0x85, 0xe5, 0xfe, 0x12, 0x3b, 0xbb, 0x03, 0x76, 0x76, 0xf7, 0x78, 0xe2, 0xab, 0xe7, 0xaf, 0x68, 0x66, 0x1c, 0x74, 0x8e, 0x00, 0x17, 0xa7, 0x12, 0xb3, 0x4a, 0x55, 0xaa, 0x39, 0x4e, 0xa9, 0xae, 0xa3, 0x31, 0x86, 0x2c, 0x5f, 0x6c, 0xf6, 0x3f, 0x1e, 0x4d, 0x08, 0x7d, 0x87, 0xbf, 0x08, 0xfc, 0x08, 0x4f, 0x05, 0x08, 0x2e, 0xbf, 0x9b, 0x32, 0xda, 0xdb, 0xe3, 0xd9, 0xaf, 0xdd, 0x5b, 0xeb, 0x75, 0x57, 0x5d, 0xa9, 0xbc, 0x18, 0x82, 0x18, 0xd6, 0x3f, 0x77, 0xd5, 0x55, 0x87, 0x5f, 0x74, 0x80, 0xd9, 0x5d, 0x3f, 0x75, 0x17, 0xef, 0x7f, 0xef, 0xfb, 0xd9, 0xde, 0x7c, 0xb0, 0x4c, 0xc4, 0x1d, 0xf6, 0x25, 0x8e, 0x93, 0x85, 0x5f, 0x6b, 0x77, 0x67, 0x07, 0x5d, 0x28, 0xc2, 0xa0, 0x45, 0xd8, 0x59, 0xa3, 0xbb, 0xac, 0x49, 0x26, 0x9a, 0x33, 0xcf, 0x6e, 0xb2, 0xbd, 0xbd, 0x87, 0x2e, 0x93, 0x84, 0x1f, 0xfc, 0x81, 0x1f, 0xe4, 0xd6, 0x5b, 0x5f, 0xc5, 0x93, 0x5f, 0xfe, 0xf2, 0x9c, 0xc0, 0xce, 0x5f, 0xe7, 0x78, 0xcd, 0x6d, 0xb7, 0xf1, 0xd4, 0xe9, 0x07, 0x1d, 0x4f, 0x3c, 0xdf, 0x04, 0x2b, 0xc1, 0x9a, 0x39, 0xc1, 0x13, 0x07, 0x7c, 0x9c, 0x47, 0x69, 0x53, 0x77, 0x23, 0x2d, 0xa6, 0x10, 0x35, 0x60, 0x4e, 0x5a, 0x47, 0x41, 0xf3, 0x1a, 0x15, 0x7f, 0x96, 0x3b, 0x5a, 0x30, 0xba, 0x44, 0xf6, 0xfb, 0x0a, 0x29, 0x04, 0xd6, 0x1a, 0x0a, 0x9d, 0xb3, 0x37, 0xdc, 0x64, 0x92, 0x0c, 0x51, 0x9e, 0x66, 0xfd, 0x70, 0x0f, 0x55, 0x5a, 0xaa, 0x8e, 0x27, 0x9b, 0x7c, 0xe5, 0xc9, 0x3d, 0x8e, 0x5f, 0x7d, 0x82, 0x76, 0xbb, 0x8d, 0xd6, 0x29, 0xbe, 0xef, 0xd3, 0x6a, 0x75, 0xd0, 0x06, 0x74, 0x51, 0x80, 0x08, 0xd1, 0x3a, 0x46, 0x88, 0xfd, 0x02, 0xb1, 0x28, 0xca, 0x82, 0xaf, 0x1c, 0xbb, 0xed, 0x6b, 0x3e, 0x94, 0x9f, 0x4d, 0x98, 0x3a, 0x38, 0x3a, 0x3b, 0xe8, 0x16, 0xed, 0xa8, 0x85, 0xe7, 0x79, 0x2c, 0xf7, 0x96, 0xd9, 0xdd, 0xdd, 0x65, 0xbc, 0x17, 0xe3, 0xfb, 0x3e, 0x3b, 0xc3, 0x01, 0x62, 0x6f, 0x52, 0xea, 0x89, 0x14, 0x64, 0x49, 0x8c, 0x29, 0x0a, 0x96, 0x57, 0xfa, 0xb4, 0xca, 0xe0, 0xdd, 0x12, 0x6e, 0x4e, 0x1f, 0x86, 0x11, 0x37, 0xdc, 0x70, 0x23, 0xeb, 0xeb, 0xeb, 0x5c, 0xbc, 0x78, 0x91, 0xb3, 0x67, 0xcf, 0x32, 0x99, 0x4c, 0x38, 0x79, 0xf2, 0x25, 0x9c, 0x3e, 0x7d, 0x9a, 0xb3, 0x67, 0x9f, 0x77, 0x92, 0xba, 0x25, 0xae, 0x69, 0x6d, 0x6d, 0x9d, 0x97, 0xbc, 0xe4, 0x1a, 0x36, 0xc7, 0x7b, 0xf8, 0xbe, 0xcf, 0xf6, 0x60, 0xc0, 0x70, 0x38, 0xac, 0x41, 0xd4, 0xa3, 0xc9, 0x64, 0x2a, 0xd6, 0x34, 0xcd, 0x65, 0x9a, 0xf8, 0xac, 0xed, 0xb3, 0x67, 0x9d, 0xca, 0x5b, 0xd0, 0xe2, 0xf0, 0xe1, 0xc3, 0xb1, 0x12, 0x81, 0x99, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x28, 0xdf, 0xcd, 0xd0, 0x07, 0xc3, 0x21, 0x5b, 0x5b, 0x5b, 0x50, 0x76, 0x0f, 0x94, 0x52, 0xf8, 0x52, 0x30, 0x09, 0x43, 0x02, 0x2f, 0x2c, 0xa9, 0x9f, 0x9d, 0xfa, 0xf5, 0x2a, 0x4d, 0x14, 0x63, 0x0a, 0xbc, 0xc0, 0xdf, 0x7f, 0xc8, 0xdd, 0xf3, 0x69, 0x91, 0xc2, 0x22, 0x30, 0x74, 0x3b, 0xad, 0x39, 0xf4, 0x6c, 0x53, 0xb8, 0xc4, 0x32, 0x6f, 0x41, 0xd8, 0x0c, 0xbe, 0xcd, 0x80, 0xdf, 0x9c, 0x61, 0xd7, 0x7e, 0xdd, 0x9e, 0x8f, 0x27, 0xd5, 0xf4, 0x6c, 0x1a, 0x81, 0x29, 0x34, 0xa6, 0x34, 0xa8, 0x57, 0xc2, 0xc9, 0x94, 0x4a, 0x04, 0xbe, 0xf2, 0xa6, 0xde, 0xaf, 0x02, 0xb7, 0xcc, 0xa2, 0xd0, 0x2f, 0x25, 0xf4, 0x32, 0x1b, 0xd4, 0xc3, 0xc8, 0x9b, 0x43, 0x29, 0xce, 0x76, 0x1c, 0x66, 0xd1, 0xfb, 0xcd, 0xf7, 0x89, 0xa2, 0x68, 0x0a, 0x88, 0xd4, 0xa4, 0x38, 0x39, 0x6e, 0x35, 0x53, 0x2d, 0xef, 0xd9, 0x84, 0xa3, 0xdb, 0x89, 0xe6, 0x50, 0xe6, 0xd6, 0x1a, 0xb2, 0x2c, 0x6d, 0x04, 0x6e, 0x3b, 0xa5, 0x06, 0xd7, 0x3c, 0x8f, 0x6e, 0xbf, 0x53, 0xcf, 0x5f, 0x3d, 0x4f, 0x35, 0x8c, 0x0d, 0x04, 0x5a, 0xcb, 0x29, 0xf5, 0xbc, 0xaa, 0xa5, 0x56, 0xf9, 0x0e, 0x5b, 0x6b, 0x19, 0xec, 0x9e, 0x9f, 0xfa, 0x3c, 0x2e, 0x7b, 0x76, 0x82, 0x06, 0x52, 0x4a, 0x26, 0xe5, 0x8d, 0x39, 0xdd, 0x95, 0x70, 0x0f, 0x53, 0x45, 0x2d, 0xf9, 0xd5, 0x0f, 0xbc, 0x93, 0x5f, 0x7e, 0xef, 0xdd, 0x0b, 0x6f, 0x4c, 0x37, 0xdf, 0x72, 0x0b, 0x9f, 0xfc, 0x44, 0xfb, 0x80, 0x6b, 0xb3, 0xb8, 0xd9, 0xc9, 0xda, 0xda, 0x61, 0x8e, 0x1c, 0x59, 0x25, 0xcb, 0x32, 0xbe, 0xfa, 0xd5, 0xaf, 0x72, 0xe6, 0xcc, 0x26, 0x17, 0x2f, 0xee, 0x70, 0xf2, 0xe4, 0x49, 0x7a, 0xbd, 0x65, 0xa2, 0x28, 0xaa, 0xd1, 0xea, 0x0e, 0x0f, 0x93, 0xbb, 0xc4, 0xc5, 0xee, 0xe3, 0x46, 0x2a, 0xcf, 0x67, 0xad, 0x2d, 0x22, 0xcf, 0xb1, 0x22, 0xc3, 0x0f, 0x05, 0x69, 0x5a, 0x90, 0x15, 0xce, 0xbb, 0xf9, 0x9a, 0x53, 0x7f, 0xa3, 0x14, 0xe4, 0x71, 0x22, 0x46, 0xe3, 0x50, 0xb2, 0xb5, 0xb3, 0x35, 0x55, 0x29, 0x5e, 0xee, 0xb1, 0xbd, 0x9d, 0xb0, 0xda, 0x5e, 0xa6, 0x28, 0xc6, 0x5c, 0xf3, 0x92, 0x13, 0x78, 0xde, 0x05, 0xce, 0x5f, 0x38, 0x7b, 0x49, 0x2b, 0xd6, 0x17, 0x0a, 0xf4, 0xad, 0x70, 0x1d, 0x6b, 0x37, 0x1d, 0xca, 0xb5, 0xbc, 0x67, 0x8d, 0x31, 0x1c, 0x3e, 0xdc, 0x9b, 0x03, 0x8d, 0x56, 0xcf, 0xa7, 0xe7, 0x2d, 0xd6, 0x09, 0x49, 0x93, 0x8c, 0x24, 0xf1, 0x1c, 0xb2, 0x5f, 0xa9, 0xf2, 0x1e, 0xb8, 0xfc, 0x2a, 0xbf, 0xdb, 0xeb, 0xf1, 0xbf, 0x7c, 0xc7, 0x3f, 0xe4, 0xbf, 0xfe, 0x97, 0xf7, 0xa1, 0x94, 0xeb, 0x88, 0xf5, 0x96, 0x96, 0x98, 0x24, 0x69, 0x09, 0x62, 0x15, 0x84, 0x81, 0xe2, 0xa6, 0x9b, 0x6f, 0xe6, 0x1b, 0x71, 0xdc, 0xf5, 0x53, 0x77, 0xf1, 0xae, 0x77, 0xfe, 0x32, 0xa3, 0xc1, 0xe7, 0xf7, 0xd7, 0xc0, 0xf7, 0x17, 0x7e, 0x9d, 0xb3, 0x67, 0xcf, 0x32, 0xd8, 0x1b, 0x01, 0x19, 0xdd, 0xd5, 0x65, 0xac, 0x04, 0x2f, 0x34, 0xac, 0x5f, 0x75, 0x08, 0x63, 0x15, 0xc9, 0x24, 0xe1, 0xe8, 0x91, 0x25, 0x6e, 0xbd, 0xf5, 0x55, 0x5c, 0x7f, 0xc3, 0x8d, 0x9c, 0x3d, 0x7b, 0x96, 0x87, 0x1f, 0xfb, 0xe2, 0x5f, 0xeb, 0xdc, 0x7f, 0xe7, 0x23, 0x1f, 0xe1, 0xdb, 0x5e, 0xfd, 0x6d, 0x5c, 0x7b, 0xea, 0x3a, 0x67, 0xb8, 0x12, 0xbb, 0x71, 0x55, 0xab, 0xb7, 0xbf, 0xbf, 0x1a, 0xab, 0x11, 0x46, 0xd4, 0x4c, 0x18, 0x4a, 0x8b, 0xcf, 0x26, 0x70, 0x74, 0x5e, 0xd3, 0xc2, 0x2f, 0x01, 0x74, 0x05, 0x16, 0xd7, 0x92, 0x37, 0x08, 0x84, 0xd0, 0x2e, 0x88, 0x9b, 0xaa, 0x73, 0x69, 0x4a, 0xe9, 0x53, 0xf7, 0xec, 0xe7, 0x59, 0x46, 0x3c, 0x19, 0xf1, 0xd4, 0x53, 0x5f, 0x2e, 0x9d, 0x20, 0xc1, 0x92, 0xe1, 0xfb, 0x3e, 0x85, 0x2e, 0xd8, 0x1b, 0x4d, 0x18, 0x8f, 0xc7, 0xec, 0xee, 0xee, 0xf2, 0xed, 0xdf, 0xfe, 0xed, 0x74, 0x97, 0xfa, 0xc4, 0xf1, 0x98, 0xde, 0xd2, 0x2a, 0xa3, 0xb1, 0x62, 0x7b, 0xe7, 0x3c, 0x9e, 0x27, 0xf1, 0x95, 0xab, 0x60, 0xab, 0x7d, 0xab, 0x12, 0x56, 0xa9, 0xf6, 0xde, 0xca, 0xce, 0x75, 0x3f, 0xde, 0xe8, 0xf2, 0xbe, 0x2b, 0x7d, 0x09, 0x5a, 0x2d, 0x7a, 0xbd, 0x1e, 0x81, 0x0a, 0xe8, 0x76, 0xbb, 0x08, 0xe1, 0xd3, 0x8e, 0x12, 0xc2, 0xa8, 0xc5, 0xb9, 0xf3, 0x17, 0x69, 0x0b, 0x89, 0x27, 0x15, 0x9e, 0xef, 0xa3, 0x73, 0x8f, 0xcc, 0x14, 0x24, 0x40, 0x2b, 0x0c, 0xf0, 0x95, 0xc4, 0x5a, 0xc3, 0x2d, 0xb7, 0xde, 0xca, 0xd1, 0xa3, 0x47, 0x1d, 0x2b, 0xca, 0x18, 0xd6, 0x8f, 0x1e, 0xa5, 0xbf, 0xbe, 0xce, 0x60, 0x30, 0xe0, 0xd9, 0x67, 0x9f, 0xc5, 0xfa, 0x3e, 0xc6, 0xf3, 0x48, 0x8c, 0x21, 0x6a, 0xb5, 0x38, 0x7a, 0xf2, 0x24, 0xc7, 0x4f, 0x9d, 0x22, 0xe8, 0x76, 0xb9, 0xe1, 0xa6, 0x9b, 0xc9, 0xf3, 0x9c, 0x8b, 0x3b, 0xbb, 0x24, 0xdb, 0x3b, 0x14, 0xa5, 0x9c, 0xab, 0x8d, 0x9d, 0xa9, 0x4a, 0xd5, 0xae, 0xaf, 0xbe, 0x9a, 0xfb, 0xac, 0x52, 0x0a, 0x19, 0xf6, 0xd8, 0xdd, 0xdd, 0x25, 0xcd, 0x36, 0x11, 0x9e, 0x22, 0x08, 0x5b, 0x48, 0x4f, 0x81, 0x15, 0x04, 0xad, 0x88, 0x49, 0x5e, 0x90, 0x27, 0x29, 0x5a, 0x4a, 0x3c, 0x2f, 0xa0, 0x22, 0xbd, 0x99, 0xf2, 0xff, 0x87, 0xda, 0xcc, 0x14, 0x9c, 0x05, 0x5e, 0xa7, 0xd3, 0x9a, 0x6b, 0xd5, 0x55, 0x6f, 0xda, 0x74, 0x47, 0xab, 0x5a, 0xd1, 0x4a, 0x89, 0xda, 0x70, 0xc4, 0x58, 0x35, 0x47, 0x9b, 0xaa, 0x90, 0xe9, 0x4a, 0x39, 0x73, 0xfb, 0xea, 0xe2, 0x54, 0x12, 0x80, 0x4d, 0xf4, 0xf8, 0xd6, 0xc5, 0xcd, 0xb9, 0x76, 0x71, 0x33, 0x28, 0x1e, 0xa4, 0x6e, 0xd6, 0xfc, 0xb3, 0x99, 0x30, 0x34, 0x67, 0xdb, 0xd5, 0xe2, 0xcd, 0xce, 0x64, 0x2f, 0xc5, 0x87, 0x9f, 0xfd, 0x7b, 0x75, 0x4e, 0x4d, 0xaf, 0xf8, 0xd9, 0x60, 0x2f, 0xa5, 0x64, 0x34, 0xda, 0xab, 0xdb, 0x30, 0x55, 0x55, 0xdb, 0xec, 0x14, 0x54, 0x81, 0xf1, 0x20, 0x06, 0x80, 0x94, 0x12, 0x5d, 0x64, 0x0d, 0x5b, 0xca, 0xfd, 0x39, 0x8b, 0x9b, 0xdd, 0xe6, 0x4c, 0x26, 0x93, 0xb9, 0xf7, 0x6f, 0x4a, 0xc3, 0x56, 0xf3, 0xc0, 0x59, 0x5c, 0x41, 0xd5, 0x9d, 0xd8, 0xdd, 0xdd, 0x9d, 0xeb, 0x7a, 0x34, 0x67, 0xe9, 0x4b, 0x27, 0xd7, 0xa7, 0x12, 0xb0, 0x59, 0xf9, 0xd8, 0x7e, 0xbf, 0x3f, 0x45, 0xbb, 0xab, 0xee, 0x0f, 0x4f, 0x19, 0x5a, 0x91, 0x22, 0x8e, 0x05, 0x0f, 0x7c, 0xe1, 0x99, 0xcb, 0xa0, 0x95, 0x1d, 0x7c, 0x6c, 0x6e, 0xc0, 0xf1, 0x93, 0xd3, 0xd4, 0xc5, 0x42, 0xab, 0x85, 0xc1, 0x61, 0xa3, 0x38, 0x27, 0xda, 0x4b, 0x19, 0x0c, 0x06, 0x9c, 0x3d, 0xb7, 0xc5, 0xd6, 0x56, 0xce, 0x60, 0x6f, 0x93, 0xd3, 0xcf, 0x6d, 0x72, 0xf8, 0xf0, 0x3a, 0xfd, 0x7e, 0xbf, 0x06, 0x78, 0x56, 0x54, 0xcc, 0x34, 0x4d, 0x59, 0x5e, 0x3f, 0x4e, 0x3c, 0x49, 0x4b, 0x4a, 0x57, 0x95, 0x8c, 0x56, 0xa0, 0xc8, 0x90, 0xc0, 0x8f, 0xb0, 0x94, 0x49, 0xa3, 0x0c, 0x29, 0x8c, 0x53, 0xe2, 0x8b, 0xc7, 0x39, 0x49, 0x92, 0xd2, 0x69, 0x2d, 0x71, 0xf4, 0xd8, 0x51, 0x5e, 0x71, 0xd3, 0x2b, 0x17, 0xfa, 0xdc, 0x87, 0x0e, 0x1f, 0xa1, 0xdf, 0x39, 0xc2, 0x7d, 0xf7, 0x7d, 0x8e, 0xef, 0xfe, 0xee, 0xef, 0xc6, 0xf7, 0x3d, 0x1e, 0x79, 0xf8, 0x2b, 0x48, 0x29, 0x79, 0xec, 0xd1, 0x47, 0x0f, 0xfc, 0xec, 0xe3, 0x78, 0x72, 0xc9, 0x80, 0xfe, 0xda, 0xef, 0x7c, 0x35, 0x7f, 0xfe, 0xe7, 0x8f, 0xbb, 0x8d, 0xb8, 0x91, 0x3c, 0x37, 0xa5, 0x8f, 0x67, 0xa5, 0x9b, 0x17, 0xe5, 0x60, 0xb7, 0x3b, 0x5d, 0xfa, 0xfd, 0x7e, 0x3d, 0xa2, 0x30, 0xc6, 0xb0, 0xb7, 0x37, 0x58, 0xb8, 0xba, 0xfc, 0xc3, 0x3f, 0xf9, 0x24, 0x81, 0xdc, 0xc4, 0xf7, 0x05, 0x41, 0x14, 0xa1, 0xb5, 0xa4, 0xdf, 0x4f, 0x68, 0xb7, 0xb5, 0xa3, 0x0e, 0xce, 0xcc, 0xe2, 0x5f, 0xcc, 0xe3, 0x27, 0x7f, 0xf2, 0xad, 0xfc, 0xfb, 0x5f, 0x7c, 0x6b, 0x9d, 0x60, 0xa7, 0xc9, 0xe2, 0x0a, 0x83, 0x4f, 0x7e, 0xf5, 0x39, 0x7c, 0x2f, 0x60, 0x7d, 0xfd, 0x10, 0xdb, 0x49, 0x08, 0x08, 0xa4, 0x1f, 0xb0, 0x7a, 0x68, 0x9d, 0xb5, 0xf5, 0x6b, 0x28, 0x72, 0xcd, 0x37, 0xdf, 0xf4, 0x32, 0x96, 0x57, 0x56, 0x78, 0xeb, 0xdb, 0x7e, 0x9c, 0xa2, 0x28, 0x78, 0xc5, 0x2b, 0x6e, 0x58, 0xe8, 0x3d, 0x7e, 0xeb, 0x43, 0x1f, 0x62, 0x38, 0x8a, 0x39, 0x75, 0xea, 0x14, 0xdf, 0xf6, 0x37, 0x5f, 0x5d, 0x6b, 0xd6, 0x5f, 0xb8, 0xb0, 0xc1, 0xbb, 0xff, 0xfd, 0xcf, 0x71, 0xfd, 0x2b, 0x7f, 0x0c, 0xa9, 0x02, 0x26, 0xf1, 0xa4, 0x34, 0xce, 0xda, 0x1f, 0x57, 0xd5, 0x14, 0x29, 0xe9, 0x66, 0xaa, 0xb0, 0x2f, 0x9f, 0x5a, 0x1b, 0x49, 0x51, 0xdd, 0xe3, 0x06, 0x8b, 0x53, 0xbd, 0xb3, 0xc6, 0x01, 0x69, 0x95, 0xd0, 0x98, 0x5c, 0x52, 0x08, 0x41, 0x50, 0x9b, 0x46, 0x09, 0x17, 0x4c, 0x0d, 0x14, 0x5a, 0x33, 0x1a, 0x8e, 0xd9, 0xd9, 0xdd, 0x46, 0x28, 0x41, 0xbb, 0xdd, 0xc6, 0x5a, 0xcd, 0x68, 0xbc, 0x4b, 0x3e, 0xca, 0x69, 0xb5, 0x5a, 0x2c, 0xad, 0x74, 0x58, 0x5a, 0xe9, 0x72, 0xee, 0xfc, 0x10, 0xeb, 0x49, 0x8e, 0x5f, 0xf3, 0x12, 0x76, 0x77, 0x87, 0x58, 0xab, 0xd9, 0x1d, 0xec, 0x50, 0x58, 0xc7, 0x65, 0x17, 0xc5, 0x79, 0x8a, 0x22, 0xab, 0x63, 0xc6, 0x3e, 0xde, 0xca, 0x75, 0x82, 0x8a, 0x5c, 0x97, 0xfb, 0x59, 0x43, 0x2e, 0xb5, 0xb1, 0x7f, 0x06, 0xb2, 0x85, 0x34, 0x3e, 0x56, 0x48, 0xb2, 0xd4, 0x12, 0x06, 0x6d, 0xa2, 0xb0, 0x43, 0x51, 0x18, 0xc2, 0xa8, 0xcb, 0xf2, 0xf2, 0x12, 0xc3, 0xe1, 0x2e, 0x85, 0x36, 0x2c, 0x1d, 0x3e, 0x82, 0x1f, 0x28, 0x94, 0x12, 0xc8, 0x28, 0x20, 0x92, 0x12, 0xdf, 0x40, 0xa6, 0x02, 0xf6, 0x0a, 0xcb, 0xd2, 0x52, 0x97, 0x56, 0x18, 0xb2, 0xbb, 0xbb, 0xcb, 0xc3, 0x8f, 0x7f, 0x99, 0x47, 0x1e, 0x79, 0x84, 0x30, 0x74, 0x46, 0x3e, 0xab, 0xc7, 0x1c, 0x1d, 0x76, 0x75, 0x75, 0x95, 0x6f, 0xf9, 0x96, 0x6f, 0xe1, 0xf0, 0xe1, 0xc3, 0x3c, 0xf7, 0xdc, 0x73, 0xc8, 0xb0, 0x43, 0x9e, 0x8f, 0xc8, 0xf1, 0xc0, 0x6f, 0x61, 0x95, 0x42, 0x5b, 0x87, 0x29, 0xd0, 0x56, 0x13, 0xe7, 0xb6, 0xc4, 0x34, 0x78, 0x4e, 0x90, 0x4d, 0x08, 0xb4, 0xb5, 0xe4, 0xda, 0x60, 0x0b, 0x0d, 0xe9, 0x90, 0x2c, 0xcf, 0x09, 0x82, 0x88, 0x5e, 0xdf, 0x79, 0xc7, 0xc7, 0xc9, 0x84, 0x71, 0xe2, 0xf6, 0x7d, 0xcf, 0x0f, 0xeb, 0x67, 0xd6, 0x57, 0x6e, 0x64, 0xe8, 0x09, 0xc9, 0xa4, 0x48, 0x9d, 0x43, 0x5e, 0x99, 0x54, 0x2b, 0xa5, 0x28, 0xb0, 0x88, 0xc0, 0xc3, 0x53, 0xaa, 0xb2, 0x55, 0x94, 0x75, 0xd5, 0x55, 0x2d, 0x5c, 0x14, 0x85, 0x07, 0x82, 0xcd, 0xaa, 0x63, 0x92, 0xe8, 0x03, 0xff, 0xbf, 0x5a, 0xf4, 0x43, 0x87, 0x0e, 0x4d, 0x55, 0xc5, 0xd5, 0x9c, 0xb8, 0x0a, 0x0e, 0x6a, 0x46, 0x01, 0xae, 0x19, 0xb0, 0x9a, 0x2d, 0xed, 0xe6, 0x45, 0x6c, 0x1e, 0x79, 0x7e, 0xb0, 0x16, 0xef, 0x0b, 0x01, 0xab, 0xa6, 0x6c, 0x52, 0xd3, 0xe2, 0x92, 0xc2, 0x2c, 0x55, 0x1b, 0xbc, 0x99, 0x01, 0xcd, 0x26, 0x2e, 0xd5, 0x18, 0x21, 0x9c, 0xe1, 0xd3, 0x37, 0x69, 0x71, 0x4d, 0xea, 0xdd, 0x2c, 0x7d, 0xa8, 0x92, 0xdd, 0x6d, 0x02, 0x0e, 0xab, 0x16, 0x78, 0x9e, 0xe7, 0xf4, 0x7a, 0xbd, 0x29, 0x74, 0xf2, 0xb4, 0xaa, 0x52, 0xe5, 0xe6, 0xe3, 0xb0, 0x0f, 0x85, 0xce, 0xc8, 0x8b, 0xe9, 0x6a, 0x7f, 0x6d, 0x7d, 0x65, 0x4a, 0x58, 0x26, 0xcf, 0x73, 0x92, 0x49, 0xd6, 0xb8, 0x49, 0xd2, 0x39, 0x30, 0x64, 0x73, 0xe3, 0x3f, 0x7f, 0xfe, 0xfc, 0x54, 0xb7, 0xa2, 0xfa, 0x6a, 0xb7, 0x03, 0x4e, 0x9e, 0x58, 0xa2, 0xd0, 0x86, 0xdd, 0xdd, 0xf4, 0x92, 0x76, 0x98, 0x5f, 0xef, 0x58, 0x5a, 0xbd, 0x89, 0x3c, 0x7f, 0x7c, 0x0a, 0xc0, 0x95, 0x67, 0x39, 0x1f, 0xfa, 0x8d, 0xff, 0xb0, 0x50, 0x2b, 0xff, 0xb1, 0x47, 0x9f, 0xa4, 0xdd, 0x0e, 0xcb, 0x64, 0xd0, 0xd2, 0xeb, 0xba, 0xb6, 0xd4, 0x68, 0x94, 0xb0, 0x71, 0x61, 0xc0, 0xce, 0x76, 0x3c, 0x45, 0xed, 0xab, 0xd6, 0xfa, 0xef, 0x5d, 0xff, 0x4a, 0xf6, 0x86, 0x63, 0xbc, 0x3c, 0x2f, 0xf1, 0x1c, 0x90, 0xa6, 0x29, 0xd6, 0x38, 0x2f, 0xe5, 0xd1, 0x28, 0xa6, 0xdb, 0xeb, 0x94, 0xf3, 0xf7, 0xa0, 0xbe, 0x7f, 0x95, 0x17, 0xd1, 0xed, 0xb5, 0xd8, 0xdd, 0xdc, 0x6a, 0x6c, 0x98, 0x8b, 0x01, 0xd9, 0x5e, 0x7a, 0xcd, 0xcb, 0xd8, 0xdd, 0x38, 0xcd, 0xff, 0xb8, 0xf7, 0xb3, 0x7c, 0xeb, 0xb7, 0xde, 0xca, 0x35, 0xd7, 0x9e, 0x62, 0x6b, 0xf0, 0x65, 0x1e, 0x7e, 0xec, 0x8b, 0xbc, 0x81, 0xfd, 0xe4, 0xe8, 0xfd, 0xef, 0x7d, 0x3f, 0x77, 0xfd, 0xd4, 0x5d, 0x2f, 0xa8, 0x24, 0xf7, 0x9a, 0xdb, 0x6e, 0xe3, 0xf7, 0xfe, 0xdb, 0x6f, 0x72, 0xd5, 0xd5, 0x61, 0x7d, 0xbf, 0xe4, 0xb9, 0x26, 0x49, 0xb2, 0xfa, 0x1e, 0x55, 0x4a, 0xe0, 0x79, 0xfb, 0xf3, 0xca, 0x20, 0x5c, 0x6c, 0x7e, 0x6c, 0xb4, 0xa1, 0xc8, 0xb5, 0xa3, 0x60, 0x96, 0x8a, 0x8c, 0xe3, 0x2b, 0xf0, 0x82, 0xff, 0xf9, 0x7f, 0xfe, 0x2f, 0xf9, 0xe4, 0x27, 0x3e, 0xc1, 0x9f, 0xfe, 0xe9, 0xef, 0x13, 0x75, 0x2e, 0xa0, 0x94, 0xc7, 0x55, 0x57, 0xb7, 0xdd, 0xb8, 0x24, 0x53, 0xdf, 0x50, 0x6d, 0xf4, 0x6e, 0xaf, 0xc7, 0x75, 0xd7, 0xbd, 0x96, 0x8d, 0x8d, 0x07, 0xcb, 0xce, 0xce, 0xe2, 0x9e, 0xf4, 0x9f, 0xf9, 0xec, 0x1f, 0x71, 0xec, 0x58, 0x9b, 0x2c, 0x1b, 0x73, 0xf5, 0x75, 0xaf, 0xc5, 0xf7, 0x03, 0xc2, 0xa0, 0x83, 0xef, 0x45, 0x08, 0x7c, 0xb4, 0xb6, 0x3c, 0xfc, 0xd8, 0xfd, 0x3c, 0xf9, 0xd5, 0xe7, 0xb8, 0xfe, 0x65, 0xdf, 0xc9, 0x78, 0xb4, 0x03, 0x2c, 0xee, 0x53, 0xf0, 0xb1, 0x8f, 0x3b, 0xdd, 0xfa, 0x6f, 0xfb, 0xe6, 0x6b, 0x79, 0xfd, 0x3f, 0x78, 0x13, 0xff, 0xe1, 0x03, 0xef, 0xe1, 0xbe, 0xfb, 0x1e, 0xe2, 0xaa, 0x63, 0xa7, 0x58, 0xdd, 0x3e, 0x4d, 0x77, 0x79, 0x0d, 0xcf, 0x5f, 0xad, 0x67, 0xd0, 0x4e, 0xc9, 0x42, 0xd7, 0x9d, 0x3d, 0x21, 0x04, 0x26, 0xad, 0x66, 0xe2, 0x76, 0xbf, 0x72, 0xc7, 0x80, 0x75, 0xc4, 0x2b, 0x53, 0x26, 0x01, 0x6e, 0x8c, 0x6e, 0xdc, 0xf7, 0x4c, 0x45, 0x5f, 0x13, 0xa4, 0x93, 0xaa, 0x95, 0xeb, 0x28, 0xb9, 0x52, 0x41, 0x51, 0x64, 0xec, 0x6c, 0xed, 0x70, 0xfe, 0xfc, 0x06, 0x13, 0x33, 0xc4, 0x7a, 0x7d, 0x5a, 0x6d, 0x1f, 0x2f, 0x0a, 0xd1, 0xd2, 0x3a, 0x6b, 0xe1, 0x78, 0x88, 0xd6, 0x96, 0xa0, 0xdd, 0xe1, 0xf9, 0x0b, 0xe7, 0x39, 0x75, 0xea, 0x7a, 0x44, 0xa9, 0xea, 0xd6, 0xee, 0xad, 0x12, 0xb6, 0xfa, 0x8c, 0xc6, 0x43, 0x76, 0xce, 0x6f, 0x91, 0xa6, 0x13, 0xe2, 0x38, 0x2e, 0x0b, 0x8e, 0xd2, 0x3a, 0xba, 0x44, 0xcd, 0x2b, 0xe9, 0xd5, 0xfe, 0x22, 0x42, 0x54, 0x8c, 0x95, 0xfd, 0x6e, 0x71, 0x91, 0x59, 0x62, 0x9d, 0x12, 0xb5, 0x5b, 0x58, 0x53, 0x94, 0x05, 0x94, 0xc7, 0x5e, 0xbc, 0xcb, 0xf2, 0xd2, 0x3a, 0x9d, 0x43, 0x2b, 0xa4, 0x25, 0x23, 0xa8, 0x77, 0x68, 0x8d, 0x4e, 0xb7, 0x05, 0x12, 0xb4, 0x76, 0x05, 0x53, 0x14, 0xb4, 0xd8, 0x99, 0x4c, 0xd8, 0x3d, 0x77, 0x1e, 0x7f, 0x73, 0x8b, 0x9d, 0x9d, 0x1d, 0x4e, 0x9f, 0x3e, 0xcd, 0x78, 0x3c, 0x26, 0x5a, 0x5a, 0x46, 0x28, 0x85, 0x51, 0x8a, 0x22, 0x08, 0x1d, 0x3e, 0x20, 0xcb, 0xd9, 0xd3, 0x86, 0x25, 0xe5, 0x91, 0x2a, 0x8f, 0x47, 0xbe, 0xf4, 0x30, 0x49, 0x92, 0x70, 0x7e, 0x6b, 0x97, 0x1c, 0x05, 0xd2, 0x27, 0xc7, 0xa0, 0x3c, 0x85, 0x50, 0x96, 0x2c, 0x4d, 0x11, 0x08, 0x94, 0x50, 0xd3, 0x7b, 0x2c, 0x2e, 0x1e, 0xb6, 0x03, 0x1f, 0x84, 0x20, 0xc9, 0x33, 0xe2, 0x8d, 0x0d, 0xa4, 0xe7, 0x23, 0x94, 0xc2, 0xf7, 0x03, 0xfc, 0x30, 0x00, 0x5b, 0x8d, 0x4e, 0x1c, 0x58, 0x4e, 0x58, 0xeb, 0x5c, 0xe6, 0x8a, 0x02, 0x4f, 0x29, 0xc7, 0x47, 0x2f, 0x0a, 0x92, 0x2c, 0x65, 0x92, 0x26, 0x14, 0x26, 0xc7, 0x1b, 0xec, 0xee, 0xce, 0x21, 0xd9, 0x9b, 0x8b, 0x36, 0x3b, 0xc3, 0x6e, 0x82, 0xe2, 0x5a, 0x9d, 0xe5, 0x03, 0x39, 0xe0, 0xd5, 0xef, 0x56, 0x33, 0xd8, 0x66, 0x40, 0x68, 0x22, 0xd6, 0x85, 0xb1, 0x75, 0x75, 0x3b, 0xcb, 0x45, 0x6f, 0xf2, 0xc6, 0x85, 0x94, 0xf8, 0x0d, 0x3d, 0xea, 0xea, 0x1c, 0x67, 0x03, 0xfe, 0x6c, 0xf2, 0x51, 0x39, 0x43, 0xcd, 0x82, 0xf9, 0x2a, 0xf8, 0x64, 0x96, 0xe5, 0x07, 0xfa, 0xa4, 0xef, 0xa3, 0xf5, 0xa7, 0xbd, 0x6f, 0x67, 0xdb, 0xde, 0x6e, 0x93, 0xf4, 0xa6, 0x6c, 0x57, 0xab, 0x79, 0x74, 0xd5, 0xe2, 0x9d, 0x55, 0xb6, 0x6b, 0xfe, 0x7c, 0x9a, 0xa4, 0x53, 0x49, 0x8c, 0xfb, 0xbe, 0xa4, 0xd7, 0x73, 0xb3, 0xf1, 0xd1, 0x68, 0xd4, 0x40, 0xcc, 0x4b, 0x7c, 0x7f, 0x5f, 0x18, 0xc3, 0xf3, 0x3c, 0x8a, 0x52, 0x76, 0xb4, 0x52, 0xcb, 0x4b, 0xd3, 0xa4, 0x6e, 0xa9, 0x0b, 0x21, 0xd8, 0xd9, 0xd9, 0x9a, 0x9a, 0xd9, 0xcc, 0x49, 0xef, 0x36, 0xe6, 0xe3, 0xfb, 0xdd, 0x81, 0xac, 0xd4, 0x53, 0xce, 0x59, 0x5d, 0x5d, 0x9d, 0xf3, 0x0a, 0xae, 0xee, 0x83, 0x56, 0x4b, 0x70, 0xf4, 0xaa, 0x16, 0x49, 0xa2, 0x19, 0x8f, 0x73, 0xfe, 0xd3, 0x6f, 0xfc, 0xe6, 0xc2, 0xa8, 0xf7, 0xd7, 0x7e, 0xe7, 0xab, 0x79, 0xec, 0xf1, 0x67, 0xeb, 0x0e, 0x80, 0xb5, 0x96, 0x34, 0x73, 0xfe, 0xe6, 0x67, 0x9f, 0x3b, 0x7b, 0xd9, 0x01, 0xdd, 0x18, 0x41, 0x92, 0xba, 0x84, 0x27, 0x8a, 0xdc, 0xc6, 0x71, 0xf1, 0xe2, 0x90, 0x4e, 0xc7, 0x23, 0x49, 0x0b, 0xd2, 0x4c, 0x97, 0xe3, 0x07, 0x37, 0x3b, 0x55, 0x52, 0x11, 0xb5, 0x5a, 0x64, 0x85, 0x25, 0xd3, 0x1a, 0x03, 0xb4, 0x02, 0xf7, 0x7b, 0x93, 0x54, 0x93, 0xeb, 0x1c, 0xa9, 0x0d, 0x2a, 0x08, 0x9d, 0x4c, 0x64, 0x52, 0xe0, 0xfb, 0x8e, 0xbb, 0x9b, 0x1b, 0xc3, 0x38, 0x8e, 0xc9, 0x33, 0x4d, 0xa7, 0x13, 0xa0, 0xed, 0x95, 0xf9, 0xa1, 0xff, 0xd0, 0x1d, 0x77, 0xf0, 0xc4, 0xe3, 0x0f, 0x70, 0xea, 0xd4, 0x4b, 0x39, 0x74, 0xe8, 0x08, 0x9d, 0x4e, 0x97, 0xdb, 0x5e, 0xd3, 0xe7, 0x53, 0x7f, 0xf4, 0xe9, 0xa9, 0x9f, 0xbb, 0xdc, 0xb9, 0xfc, 0xbf, 0xfe, 0xb7, 0x1f, 0xe0, 0xfd, 0xef, 0xfd, 0xc9, 0xfa, 0xfe, 0x4b, 0xd3, 0x74, 0x4a, 0xd5, 0xad, 0xe9, 0x87, 0x1e, 0x86, 0x21, 0xda, 0x2c, 0x16, 0xd0, 0xbb, 0xdd, 0x52, 0x9d, 0x2a, 0x4d, 0xd9, 0xda, 0xda, 0x22, 0x8e, 0xe3, 0xc5, 0x1d, 0xdb, 0xca, 0xa0, 0xfa, 0x86, 0x3b, 0xef, 0xac, 0x01, 0x5e, 0x9f, 0xfa, 0xe3, 0x5f, 0xaf, 0xef, 0xaf, 0xef, 0x79, 0xdd, 0x9b, 0xbe, 0x21, 0x81, 0xfc, 0x5d, 0xef, 0xfc, 0xe5, 0x29, 0x45, 0xbe, 0xea, 0x59, 0x4e, 0xf2, 0xc5, 0x7d, 0x03, 0xf2, 0xbc, 0x60, 0x6b, 0x77, 0x48, 0x5a, 0xf8, 0xf8, 0x5b, 0x43, 0x96, 0xfa, 0x2b, 0xce, 0x92, 0x35, 0xec, 0x81, 0x55, 0x98, 0x49, 0x8e, 0x17, 0x9d, 0xe2, 0x89, 0xaf, 0x3c, 0x44, 0x1c, 0x8f, 0x28, 0xf2, 0x8c, 0xe5, 0xe5, 0x6b, 0x17, 0x7a, 0x8f, 0xef, 0xfd, 0xfe, 0xd7, 0xd7, 0xa0, 0xba, 0x07, 0xbe, 0xf0, 0x0c, 0x0f, 0x7c, 0xe1, 0x1d, 0xf5, 0x3e, 0x11, 0x8f, 0x76, 0x31, 0x22, 0x25, 0x08, 0x21, 0x9d, 0xe0, 0xf4, 0xce, 0x4b, 0x0b, 0x4f, 0x27, 0xdb, 0x6a, 0xb0, 0xd6, 0x5d, 0x97, 0x96, 0x88, 0xca, 0x67, 0xdd, 0xd4, 0xbe, 0x13, 0x50, 0xb6, 0xcf, 0x81, 0xc2, 0x94, 0xa3, 0x3d, 0xe3, 0x94, 0xaa, 0x2a, 0xa7, 0x4d, 0xc7, 0x2d, 0x97, 0x08, 0xe1, 0x53, 0x59, 0xc6, 0x3b, 0x51, 0x19, 0x49, 0xae, 0x54, 0xc9, 0x65, 0x57, 0x2c, 0x2d, 0xaf, 0x60, 0x85, 0x66, 0x38, 0xda, 0x23, 0x4d, 0x27, 0x18, 0xa3, 0xcb, 0xf1, 0x6d, 0x89, 0x52, 0x57, 0x01, 0x5f, 0x7a, 0xec, 0x31, 0x7a, 0x2b, 0x87, 0x50, 0x32, 0x70, 0xe3, 0x1a, 0x3f, 0x64, 0x69, 0xed, 0x10, 0x49, 0x61, 0xb8, 0xfa, 0xea, 0xab, 0xd9, 0xdc, 0x54, 0xa5, 0xac, 0xb0, 0x74, 0x5a, 0xf5, 0x8d, 0x19, 0xfa, 0xbe, 0x26, 0x85, 0xdb, 0x8b, 0x2b, 0x99, 0xb5, 0x6a, 0xff, 0x4d, 0x6d, 0x8e, 0xd1, 0x39, 0x81, 0xef, 0x94, 0xd4, 0xa4, 0x74, 0x42, 0x5e, 0x83, 0xbd, 0x98, 0x43, 0x87, 0x0e, 0x51, 0x58, 0xb8, 0xea, 0xc4, 0x35, 0x2c, 0x2d, 0xf7, 0x5c, 0x17, 0x21, 0xde, 0x73, 0x68, 0x70, 0xe5, 0x93, 0x66, 0x19, 0x5f, 0x3b, 0x77, 0x8e, 0xd1, 0x68, 0xc4, 0x70, 0x38, 0xac, 0xf7, 0x4d, 0x00, 0xa1, 0x14, 0x13, 0x63, 0x38, 0xbc, 0xbe, 0x5e, 0xc7, 0x30, 0xaf, 0xd3, 0x61, 0x90, 0x24, 0x7c, 0xe9, 0x89, 0x27, 0x38, 0xb3, 0xb1, 0xc1, 0xee, 0xee, 0x2e, 0x4f, 0x3e, 0xf5, 0x34, 0x5a, 0x6b, 0xc6, 0xe3, 0xd8, 0xf9, 0x86, 0x08, 0x49, 0x61, 0x2c, 0x42, 0x39, 0x74, 0x49, 0x54, 0xea, 0x84, 0x18, 0x63, 0xc8, 0x1b, 0xb1, 0xb3, 0xba, 0x96, 0xa3, 0xd1, 0xa8, 0xa6, 0xc3, 0x15, 0x5a, 0x63, 0x85, 0x74, 0x49, 0x84, 0x71, 0x1a, 0x09, 0xdd, 0x4e, 0xdf, 0x39, 0xa0, 0x96, 0x5d, 0x56, 0xe7, 0xfe, 0x25, 0xc9, 0x33, 0x27, 0xc1, 0x2c, 0x43, 0x9f, 0xbc, 0xc8, 0xd8, 0x8b, 0xc7, 0x6c, 0xef, 0xed, 0x00, 0x06, 0x6f, 0x6f, 0x34, 0x99, 0x6b, 0x35, 0x4f, 0x6f, 0xfe, 0x1e, 0x52, 0xb9, 0x6a, 0xd0, 0x9b, 0x99, 0x43, 0x17, 0x45, 0x73, 0xae, 0x2c, 0xeb, 0x76, 0x89, 0x6b, 0xe7, 0x34, 0xd4, 0x89, 0x4a, 0x04, 0xa6, 0x03, 0x1d, 0x35, 0x78, 0xcf, 0x9e, 0xc1, 0x53, 0x12, 0x15, 0x86, 0x58, 0x1b, 0x4c, 0x9d, 0x87, 0x13, 0x40, 0x91, 0x07, 0xd3, 0xdd, 0xca, 0xf3, 0x68, 0x07, 0x6a, 0xea, 0x02, 0x57, 0x2e, 0x3c, 0x75, 0x10, 0xf4, 0xd5, 0x94, 0x14, 0xdf, 0x2c, 0x70, 0x2e, 0x92, 0xeb, 0x73, 0x33, 0xdc, 0xa6, 0x70, 0x86, 0x35, 0x45, 0x79, 0x83, 0x2b, 0x3c, 0x5f, 0xe1, 0x88, 0x95, 0x41, 0x83, 0xb6, 0xb7, 0xff, 0x7b, 0x79, 0x49, 0xdf, 0x90, 0x48, 0xda, 0x61, 0x1b, 0x42, 0x40, 0xed, 0x03, 0x06, 0xab, 0x84, 0xa6, 0x09, 0x5a, 0x33, 0xa6, 0xdd, 0x68, 0x91, 0x32, 0x37, 0xe7, 0x17, 0xa2, 0x53, 0x2b, 0x28, 0x39, 0xe3, 0x0d, 0x43, 0x92, 0xa6, 0x08, 0xe1, 0x24, 0x73, 0x7d, 0xd5, 0x23, 0x0c, 0x02, 0x7c, 0xdf, 0xa3, 0x1d, 0x08, 0x02, 0x91, 0x52, 0xf8, 0x19, 0x18, 0xd7, 0x79, 0x98, 0x8c, 0x32, 0x82, 0x30, 0xc4, 0x8f, 0x42, 0xe7, 0xd6, 0x84, 0x25, 0xd5, 0xa5, 0x7c, 0x29, 0x96, 0x62, 0x32, 0x26, 0xc5, 0x62, 0x0d, 0x18, 0x04, 0xc6, 0x0a, 0x0a, 0x03, 0x06, 0x0f, 0xe1, 0x7b, 0x8c, 0x27, 0x45, 0xd9, 0xae, 0xce, 0xb1, 0x3a, 0x47, 0x48, 0x8d, 0xce, 0x73, 0x94, 0x27, 0x68, 0x45, 0x16, 0xb1, 0x12, 0xb1, 0x71, 0x71, 0x42, 0x92, 0x38, 0xa3, 0x8d, 0x83, 0xd0, 0xc9, 0x5f, 0xaf, 0x05, 0xfb, 0xe0, 0x83, 0x0f, 0x21, 0x79, 0x12, 0x5f, 0x86, 0x58, 0x23, 0xd0, 0xd9, 0x80, 0x1f, 0xb8, 0xfd, 0x87, 0x2e, 0x9b, 0xea, 0x73, 0xe1, 0xc2, 0x06, 0x7e, 0x3b, 0x42, 0xf9, 0x12, 0xa1, 0x35, 0x71, 0xd9, 0x01, 0x0a, 0x7b, 0x9e, 0xe3, 0x78, 0x96, 0x15, 0x8b, 0xb4, 0x45, 0x79, 0x41, 0x9c, 0x5e, 0xb5, 0xb5, 0x9a, 0xd0, 0x06, 0x64, 0x36, 0x20, 0x2f, 0x72, 0x6c, 0xe2, 0xd6, 0x4c, 0x15, 0x06, 0xab, 0x2d, 0x22, 0x2b, 0x50, 0x46, 0x91, 0xc6, 0x69, 0x69, 0x44, 0xd1, 0x21, 0xf0, 0x7d, 0x8c, 0x85, 0xcc, 0x58, 0x9c, 0xcc, 0x5f, 0x8b, 0x30, 0x5c, 0xdc, 0xa0, 0x63, 0xb4, 0xb7, 0xc7, 0x17, 0x1f, 0x7a, 0x88, 0xad, 0xc1, 0x88, 0x8e, 0xbf, 0xc2, 0x86, 0x1a, 0x70, 0xeb, 0xad, 0xaf, 0xe2, 0xcc, 0xf3, 0x67, 0xe8, 0xb4, 0x3a, 0x53, 0xb6, 0xa3, 0x97, 0x9b, 0xd4, 0x7c, 0xf1, 0xa1, 0x87, 0xca, 0xae, 0x5a, 0x40, 0xa7, 0xe3, 0x04, 0x3f, 0x2c, 0x79, 0x89, 0x17, 0xa8, 0x36, 0x2c, 0x47, 0x05, 0x8d, 0xd2, 0x80, 0x64, 0x41, 0x3c, 0x98, 0xce, 0x0b, 0x74, 0x96, 0x61, 0xf2, 0x1c, 0x5f, 0x4a, 0xfa, 0x9d, 0x0e, 0x82, 0xe4, 0xaf, 0x15, 0x68, 0xab, 0xce, 0xc2, 0xc9, 0x63, 0xab, 0x7c, 0xe9, 0xf1, 0x73, 0x2f, 0x0a, 0xbd, 0xeb, 0xa0, 0xe3, 0xcd, 0x6f, 0xf9, 0x51, 0x9e, 0x79, 0xfa, 0x29, 0x7e, 0xf5, 0x03, 0xef, 0x24, 0xcf, 0x63, 0x7a, 0x3d, 0x17, 0xe8, 0xf2, 0x74, 0x31, 0x99, 0xe1, 0x67, 0x9e, 0x7e, 0xaa, 0x74, 0xd9, 0x6b, 0x11, 0x85, 0x21, 0x9b, 0x17, 0x77, 0xb0, 0xc6, 0x23, 0x0c, 0xfa, 0x08, 0x9b, 0xe1, 0xa9, 0x88, 0xf1, 0x28, 0xe6, 0xa9, 0xaf, 0x7c, 0x89, 0x8b, 0x1b, 0xcf, 0x11, 0x46, 0x6d, 0x60, 0x71, 0x1a, 0xe6, 0x91, 0x23, 0x87, 0xf9, 0xae, 0xbf, 0x77, 0x3b, 0x7f, 0xfa, 0xdf, 0x3f, 0x39, 0xf3, 0xfb, 0xc2, 0x85, 0xdd, 0xac, 0x83, 0x89, 0x3b, 0x78, 0xaa, 0xac, 0xfc, 0x6b, 0x0b, 0x4e, 0xb0, 0x72, 0xff, 0xe7, 0x73, 0x3d, 0x99, 0x7b, 0xfb, 0x66, 0x42, 0xef, 0xe9, 0x65, 0x57, 0x95, 0x0b, 0x8d, 0x21, 0x07, 0x0c, 0x06, 0x27, 0x28, 0x53, 0xe0, 0xd0, 0xef, 0xa1, 0xf4, 0xd1, 0x26, 0xa7, 0x15, 0x86, 0x84, 0xa1, 0x60, 0xb4, 0x71, 0x91, 0xeb, 0xae, 0x39, 0xc2, 0x60, 0xe7, 0x34, 0x2d, 0xe9, 0x3b, 0xcd, 0x79, 0x9b, 0xb1, 0x1c, 0x7a, 0x58, 0x6d, 0x18, 0x8f, 0x76, 0xb0, 0xd6, 0xd2, 0x69, 0xb5, 0x69, 0xcb, 0x84, 0x6b, 0xaf, 0x3b, 0xc5, 0x4a, 0x71, 0x91, 0xdd, 0xed, 0x1d, 0xce, 0x9d, 0x3d, 0xcd, 0x70, 0xb0, 0xc5, 0x64, 0x3c, 0x64, 0x34, 0xda, 0xa3, 0xd3, 0x6a, 0xd1, 0x89, 0x22, 0x56, 0x82, 0x80, 0x9d, 0xad, 0x1d, 0x96, 0x96, 0x96, 0xd0, 0x1a, 0x5a, 0x2d, 0x37, 0x22, 0xcb, 0x22, 0xc5, 0xd2, 0xd2, 0x12, 0x1b, 0x1b, 0x1b, 0x08, 0x04, 0x51, 0xc9, 0x8c, 0x50, 0x4a, 0x31, 0x99, 0xc4, 0x48, 0xbf, 0x1c, 0x49, 0x6e, 0x6f, 0x11, 0xf6, 0x7a, 0x44, 0x72, 0x89, 0x56, 0xab, 0xc5, 0xda, 0xd5, 0x1e, 0x45, 0x71, 0x91, 0x16, 0x4b, 0xa4, 0x5b, 0x3b, 0xd8, 0x91, 0x8f, 0x17, 0x04, 0x04, 0x59, 0xc2, 0x28, 0x99, 0x10, 0xa7, 0x09, 0xa3, 0x78, 0xcc, 0x78, 0x24, 0xa7, 0x4c, 0xbd, 0x9c, 0x52, 0x66, 0x48, 0xbb, 0xdd, 0x26, 0x8a, 0x22, 0x02, 0xe3, 0xd1, 0x51, 0x2d, 0xd2, 0x51, 0x4a, 0x5e, 0xea, 0x2f, 0x6c, 0x3f, 0xbf, 0xc9, 0xc6, 0xe9, 0xf3, 0x6e, 0x4c, 0x67, 0x13, 0x10, 0x96, 0x76, 0xc7, 0x03, 0x72, 0xb4, 0xc9, 0x08, 0x23, 0x51, 0x53, 0x03, 0xad, 0x75, 0xdd, 0x06, 0x84, 0x41, 0xaa, 0x79, 0xcd, 0xf7, 0x44, 0x3a, 0x95, 0x50, 0x25, 0x41, 0x28, 0x0f, 0x4f, 0xfa, 0xa5, 0xd8, 0x9a, 0xa5, 0xdf, 0xed, 0xb1, 0xb9, 0xb9, 0x85, 0xd1, 0x9a, 0x76, 0xbb, 0xcd, 0x24, 0x4e, 0x69, 0xb5, 0x5a, 0x4e, 0x43, 0xc0, 0x53, 0xe4, 0xd6, 0x60, 0x86, 0xbb, 0x48, 0xad, 0x39, 0xff, 0xb5, 0xaf, 0x91, 0x8d, 0xe3, 0xd2, 0xb5, 0x4d, 0xa9, 0xb9, 0x60, 0xde, 0x9c, 0xc3, 0xce, 0xa2, 0xdb, 0xa7, 0x2a, 0xf5, 0xc6, 0xcc, 0x6e, 0x56, 0x22, 0xd6, 0x5a, 0x4b, 0x85, 0xa0, 0x6f, 0xaa, 0x01, 0x4d, 0x55, 0xfd, 0x26, 0x9d, 0xb2, 0x43, 0x9d, 0x75, 0x27, 0x8b, 0xe3, 0xd1, 0x1c, 0x55, 0x6b, 0x8a, 0x33, 0xae, 0x0f, 0x46, 0xa7, 0x57, 0x37, 0x6d, 0x3c, 0x4e, 0x1a, 0x09, 0x42, 0xa5, 0x30, 0xe4, 0x98, 0x6b, 0xc6, 0x5a, 0xb6, 0xf7, 0x76, 0xe7, 0xac, 0x5b, 0x9b, 0xed, 0xf5, 0x3c, 0xcf, 0x0e, 0x5c, 0x97, 0x7a, 0x7d, 0x7c, 0x59, 0x66, 0x50, 0x12, 0x85, 0x9c, 0xa3, 0xce, 0xa5, 0x59, 0x31, 0xe7, 0x1c, 0xd7, 0x7c, 0xa0, 0x74, 0xf1, 0xc2, 0x3c, 0xfa, 0x34, 0x4d, 0x6b, 0x91, 0x19, 0xf7, 0xc1, 0x4c, 0xdd, 0x4e, 0x13, 0xc2, 0x92, 0xa5, 0x82, 0x49, 0x22, 0xf1, 0xca, 0x24, 0xca, 0xe8, 0x1c, 0xad, 0xab, 0xc4, 0xc2, 0xcd, 0x94, 0x8a, 0x22, 0xa3, 0x98, 0x14, 0x58, 0xe1, 0xe6, 0x5f, 0x99, 0x2e, 0x28, 0x8c, 0x46, 0x5b, 0x4b, 0x4b, 0x6b, 0x50, 0x92, 0x49, 0xd2, 0x63, 0x69, 0xf5, 0x26, 0x6e, 0x7c, 0xe9, 0x71, 0x1e, 0x7b, 0xfc, 0x8f, 0x50, 0x52, 0x20, 0x85, 0x57, 0x76, 0x4f, 0x0a, 0x26, 0x93, 0x18, 0xad, 0x0b, 0xda, 0x51, 0x80, 0xf2, 0x3c, 0x94, 0x54, 0x08, 0x01, 0xed, 0x8e, 0xe5, 0xe4, 0x89, 0x1e, 0xda, 0xc0, 0xce, 0x4e, 0xca, 0x9f, 0xdf, 0x73, 0xef, 0x65, 0xd3, 0xd8, 0x3e, 0xf3, 0xe9, 0x4f, 0x73, 0xec, 0xf8, 0x31, 0x6e, 0xbd, 0xf5, 0x55, 0xdc, 0xf7, 0xd9, 0x27, 0xc8, 0x73, 0xc7, 0x03, 0x2f, 0x32, 0xcb, 0xf5, 0x37, 0x5c, 0xfe, 0xcc, 0xf1, 0x43, 0xbf, 0xfe, 0xdb, 0xe8, 0x2c, 0x65, 0x32, 0x4e, 0x4a, 0x55, 0x3e, 0x9f, 0x76, 0xbb, 0x55, 0x2a, 0xe5, 0x65, 0x64, 0xd6, 0x92, 0xa6, 0x9a, 0xbc, 0xd0, 0x18, 0xa9, 0x1d, 0xf8, 0xca, 0xf3, 0x5d, 0x70, 0xd6, 0x29, 0x46, 0xa7, 0xe4, 0x59, 0x82, 0x2e, 0x92, 0x92, 0xcb, 0x6b, 0x08, 0x03, 0x45, 0x10, 0x28, 0x8a, 0x1c, 0x3a, 0xed, 0x12, 0xd8, 0xa2, 0x53, 0x76, 0xf6, 0x76, 0x6a, 0xb1, 0x89, 0x28, 0x8a, 0xb0, 0x14, 0xee, 0xa1, 0xbd, 0xcc, 0xa3, 0xa2, 0xb6, 0x7d, 0xf2, 0x8f, 0x3e, 0xc5, 0xd5, 0x47, 0x8f, 0xd1, 0xb1, 0x01, 0x59, 0x91, 0xa1, 0x3c, 0x8f, 0x49, 0x9a, 0xb0, 0x71, 0xf1, 0x22, 0x79, 0x51, 0x5c, 0x72, 0x8e, 0xfe, 0x42, 0xc7, 0x1f, 0xfe, 0xc9, 0x27, 0xf1, 0x45, 0x8e, 0xef, 0x7b, 0xa5, 0x77, 0x3b, 0xf5, 0xfd, 0xef, 0x7b, 0xfb, 0x6d, 0x72, 0xdf, 0x77, 0xcf, 0xd2, 0x60, 0xb8, 0x58, 0x67, 0x21, 0x2c, 0x55, 0x14, 0x9b, 0xca, 0x8e, 0xbe, 0xbf, 0xb8, 0xb9, 0x49, 0x75, 0xdd, 0xab, 0x44, 0x25, 0xe8, 0x1c, 0xa1, 0xd0, 0x09, 0x3f, 0xf9, 0x53, 0xff, 0x82, 0x6f, 0xe4, 0xf1, 0xc6, 0x7f, 0xf4, 0x26, 0xba, 0x9d, 0x90, 0xeb, 0x4e, 0xad, 0x93, 0x24, 0x92, 0xa0, 0x73, 0x84, 0x5b, 0x6e, 0x7c, 0xe9, 0x82, 0x38, 0x82, 0x1e, 0x81, 0xaf, 0xa8, 0xc6, 0x94, 0xd5, 0x18, 0x2c, 0xcf, 0x5d, 0x12, 0x29, 0x70, 0x7b, 0xc6, 0x24, 0x1e, 0x12, 0x85, 0x6d, 0x6e, 0xbc, 0xb9, 0x4a, 0x50, 0xce, 0x2c, 0x7c, 0xbe, 0xdf, 0xf4, 0x8a, 0x1b, 0xb9, 0xff, 0x73, 0xf7, 0x13, 0x8f, 0x07, 0x68, 0x9d, 0xa3, 0x94, 0x4f, 0xa7, 0xbb, 0x4c, 0xb7, 0xb7, 0x86, 0x05, 0xf2, 0x3c, 0x45, 0x1e, 0x60, 0xad, 0x3c, 0x2b, 0x42, 0x75, 0x50, 0x87, 0xf2, 0xd2, 0xb6, 0xcc, 0xa2, 0x21, 0xd0, 0x24, 0x68, 0xb5, 0x22, 0x74, 0xd9, 0x3d, 0x8b, 0x4d, 0x06, 0xb8, 0x64, 0xb1, 0xbf, 0xd4, 0xe5, 0xe4, 0xc9, 0xe3, 0x3c, 0x7f, 0xe6, 0x71, 0xda, 0xed, 0x36, 0x45, 0x6e, 0x99, 0xa4, 0x7b, 0xb4, 0x5b, 0x01, 0x27, 0x4e, 0x5e, 0xc3, 0x24, 0x8e, 0x39, 0x7f, 0xfe, 0x3c, 0x28, 0x8f, 0x27, 0xbe, 0xfc, 0x65, 0xa4, 0x70, 0x40, 0x67, 0x5f, 0x3a, 0x74, 0xf6, 0xf2, 0x4a, 0x0f, 0x61, 0x72, 0x8c, 0x91, 0xc4, 0x71, 0x8c, 0xb5, 0x96, 0xa5, 0x95, 0xd5, 0xda, 0x1d, 0xd3, 0xf7, 0x7d, 0x3c, 0xad, 0xf1, 0xa4, 0x47, 0x9a, 0xe7, 0x2c, 0xaf, 0xba, 0xef, 0x69, 0xad, 0x69, 0x95, 0xe8, 0xee, 0xed, 0xed, 0x6d, 0x4c, 0xa7, 0x54, 0x72, 0x13, 0x82, 0x89, 0x12, 0xe8, 0x2c, 0x41, 0x16, 0xfb, 0x62, 0x67, 0xcb, 0x42, 0x11, 0x27, 0x09, 0x36, 0x06, 0x23, 0x05, 0x93, 0x34, 0x61, 0x9c, 0x25, 0xc4, 0x49, 0xc2, 0x24, 0x4d, 0x08, 0x72, 0x27, 0x20, 0xb3, 0xbc, 0xbc, 0x5e, 0xb3, 0x8a, 0x5c, 0x70, 0xcf, 0x48, 0x53, 0x47, 0xd5, 0x73, 0xdd, 0xc3, 0xac, 0xd4, 0x71, 0x48, 0x6b, 0xda, 0x66, 0x9e, 0xe7, 0x28, 0xcf, 0xcc, 0xd0, 0xea, 0xe6, 0xb1, 0x5e, 0x5a, 0x6b, 0xb0, 0xce, 0x6a, 0x78, 0x96, 0x29, 0x55, 0xe1, 0xd4, 0xb4, 0xb6, 0x74, 0x3a, 0x1d, 0xfa, 0xbd, 0x25, 0x92, 0x24, 0x61, 0x73, 0x73, 0x8b, 0x8b, 0x17, 0x2f, 0x62, 0x0c, 0xce, 0xa9, 0x6e, 0x77, 0xb7, 0x1e, 0x03, 0x2a, 0xe5, 0xd7, 0xc0, 0xc1, 0x5e, 0x99, 0xb8, 0x57, 0xa3, 0xdd, 0x20, 0x08, 0xf0, 0x5a, 0xad, 0xf0, 0x40, 0xcf, 0xec, 0xea, 0x03, 0x56, 0x41, 0xd8, 0x39, 0xe1, 0xb8, 0xb6, 0x08, 0xb8, 0xd9, 0xb2, 0xb6, 0x7a, 0x0e, 0x25, 0x3d, 0x45, 0x11, 0x23, 0x03, 0xa1, 0xea, 0x0a, 0xdf, 0x71, 0x1e, 0x35, 0xda, 0xe4, 0x65, 0xd0, 0x9e, 0x46, 0x71, 0x57, 0x6d, 0xf2, 0xea, 0x82, 0x84, 0xa1, 0x77, 0x49, 0xaf, 0x75, 0x80, 0x74, 0x9c, 0x1f, 0x78, 0x43, 0xef, 0x9b, 0x93, 0x94, 0xd5, 0xb4, 0xad, 0xf8, 0x8d, 0xfb, 0xf3, 0xe9, 0xa2, 0x28, 0x08, 0xbc, 0xf0, 0x40, 0xb0, 0x59, 0x75, 0x34, 0xb5, 0xdc, 0xe7, 0x6d, 0xf0, 0x28, 0x79, 0x97, 0xf3, 0x6e, 0x70, 0x4d, 0x24, 0x7f, 0x93, 0x36, 0xd7, 0x04, 0x1d, 0xba, 0xaf, 0xaa, 0x85, 0x54, 0x3d, 0x64, 0xd5, 0x34, 0xc0, 0x7d, 0x8e, 0x30, 0x6a, 0x37, 0x66, 0x2f, 0xa6, 0x21, 0x4c, 0xe3, 0x5e, 0x37, 0xf0, 0xdb, 0xfb, 0xeb, 0x61, 0xb5, 0xa3, 0xc8, 0xd1, 0xe0, 0x1e, 0x1b, 0x28, 0xca, 0xf9, 0x17, 0xc0, 0xe9, 0x33, 0x9a, 0x6b, 0xae, 0xbd, 0x95, 0xeb, 0x5f, 0x7a, 0x9c, 0x63, 0xc7, 0x8e, 0x4d, 0x6d, 0xac, 0xd5, 0xf1, 0x2f, 0x7e, 0xfe, 0x53, 0x28, 0x2f, 0x00, 0xe5, 0xb1, 0xb4, 0xd4, 0x2f, 0xe7, 0xa7, 0x50, 0xe8, 0x8c, 0x30, 0x08, 0x11, 0xd2, 0x61, 0x03, 0x8a, 0x2c, 0xc5, 0xa0, 0x09, 0x03, 0xc5, 0xb1, 0xab, 0x7b, 0xa4, 0x89, 0xe1, 0xd3, 0xf7, 0xfe, 0xee, 0x65, 0x07, 0xf4, 0xeb, 0x6f, 0xb8, 0x91, 0x78, 0xbc, 0xc7, 0x1f, 0x7e, 0xf2, 0xc3, 0xf4, 0xba, 0x21, 0x71, 0x9c, 0x93, 0x24, 0x19, 0x20, 0x6b, 0xf3, 0x92, 0xcb, 0x39, 0xfe, 0xe1, 0x3f, 0xfc, 0x41, 0xfe, 0xea, 0xfe, 0x4f, 0x10, 0x85, 0x1e, 0xeb, 0xeb, 0xeb, 0x2c, 0x2d, 0x2d, 0xed, 0x03, 0xb7, 0x8a, 0xac, 0xa6, 0xe2, 0xd9, 0x92, 0x23, 0xec, 0x4b, 0x55, 0x8f, 0x2d, 0x9e, 0x7a, 0xfa, 0x89, 0x3a, 0x43, 0xaf, 0xae, 0x77, 0x2d, 0xf0, 0x93, 0x28, 0xc6, 0xa3, 0xb4, 0x7e, 0xf0, 0xa4, 0x94, 0xa5, 0x9c, 0xa4, 0xab, 0x72, 0x5b, 0x6d, 0x0f, 0xcf, 0xf7, 0x48, 0x92, 0xcb, 0x6f, 0x3b, 0x77, 0xda, 0x2d, 0x9e, 0x3b, 0xfd, 0x10, 0x59, 0x9a, 0x72, 0xf1, 0xc2, 0x39, 0x4c, 0xa7, 0x5d, 0x26, 0x46, 0x11, 0xcf, 0x3c, 0x23, 0x79, 0xee, 0xcc, 0x19, 0x04, 0x76, 0x6e, 0x8e, 0x7e, 0x39, 0xc7, 0x2b, 0x6e, 0x7a, 0x25, 0x9f, 0xbb, 0xff, 0xf7, 0xe8, 0x76, 0xc1, 0x68, 0x8b, 0xf2, 0x24, 0x51, 0xd4, 0xad, 0x39, 0xfe, 0x02, 0x81, 0x35, 0x90, 0xa5, 0x1a, 0x6d, 0x12, 0xf6, 0x86, 0x8b, 0x55, 0xd7, 0xc6, 0x9a, 0x7a, 0xdd, 0x96, 0x96, 0x96, 0x10, 0x42, 0xf0, 0xdc, 0xf3, 0x17, 0xae, 0x28, 0xb8, 0xbe, 0xf5, 0xad, 0x3f, 0xc6, 0x2b, 0x6e, 0x7a, 0x09, 0x41, 0xe7, 0x08, 0x4f, 0x3f, 0x75, 0x9a, 0xbf, 0xff, 0xb6, 0xb7, 0xbd, 0xe8, 0xb2, 0xa9, 0xb3, 0x15, 0xef, 0xcf, 0xfc, 0xb3, 0x9f, 0xe1, 0x57, 0xde, 0xf7, 0x1e, 0xbe, 0xe3, 0x3b, 0xbe, 0x8f, 0x37, 0xdc, 0x79, 0x27, 0x3f, 0xfb, 0xd3, 0x3f, 0xcc, 0x9f, 0x7f, 0xe6, 0x09, 0x5e, 0xf7, 0x3d, 0x77, 0x2c, 0xf4, 0x3a, 0xbd, 0xbe, 0x33, 0xc2, 0x91, 0x52, 0x12, 0x7a, 0x01, 0x41, 0xe0, 0xd5, 0x1c, 0x6a, 0xcf, 0x93, 0x84, 0x61, 0x44, 0x7f, 0xe9, 0x10, 0x00, 0xfd, 0xa5, 0xab, 0x31, 0x26, 0xe7, 0x65, 0x27, 0xd7, 0x16, 0x3e, 0xe7, 0x38, 0x1e, 0x71, 0xcb, 0x2b, 0xff, 0x36, 0xcf, 0x3e, 0xf3, 0x08, 0x93, 0x78, 0x48, 0xab, 0xdd, 0xe7, 0x25, 0xd7, 0xde, 0x42, 0xaf, 0xbf, 0x46, 0xd4, 0xea, 0x82, 0xd0, 0xe8, 0x62, 0xda, 0xad, 0x92, 0x59, 0xc9, 0x6d, 0x31, 0x0f, 0x06, 0x9e, 0x0d, 0xf0, 0xf3, 0xfb, 0xe7, 0x7e, 0x40, 0x4f, 0x92, 0x84, 0x22, 0x4b, 0x4a, 0xca, 0x56, 0x41, 0x92, 0x64, 0x18, 0x3d, 0xe6, 0xcc, 0x99, 0x6d, 0x36, 0xb7, 0xce, 0xb3, 0x3b, 0xdc, 0xe1, 0xc8, 0x91, 0x43, 0x74, 0x7b, 0xab, 0x4c, 0x62, 0x81, 0x35, 0x4e, 0x4d, 0x32, 0x49, 0x53, 0xe2, 0x71, 0x42, 0x7f, 0x6d, 0x95, 0x2c, 0x77, 0x18, 0xa2, 0x6e, 0xa7, 0x4b, 0x14, 0x2a, 0xb0, 0x05, 0x59, 0xe6, 0xf4, 0x07, 0x94, 0x0c, 0x98, 0xe4, 0x39, 0x9e, 0xe7, 0xb1, 0xb4, 0xb2, 0xc2, 0x70, 0x38, 0x74, 0xcf, 0x5b, 0x89, 0x75, 0x09, 0x3b, 0x11, 0x7b, 0xbb, 0xbb, 0xac, 0xaf, 0xaf, 0x83, 0x10, 0x6c, 0x6f, 0xed, 0x10, 0x04, 0x01, 0xed, 0x76, 0x9b, 0xde, 0x52, 0x9f, 0xbe, 0xf6, 0x9d, 0xbe, 0x3a, 0x20, 0x0a, 0x81, 0xd0, 0xd5, 0x1e, 0xec, 0x61, 0x8c, 0xa4, 0x33, 0x86, 0x28, 0x13, 0x14, 0x5a, 0x83, 0x14, 0x74, 0x8c, 0xa2, 0x93, 0x79, 0x64, 0x45, 0x48, 0x21, 0x3c, 0x86, 0xa5, 0xce, 0xc4, 0xac, 0x12, 0x68, 0xb5, 0x3e, 0x95, 0x34, 0xf0, 0x2c, 0x63, 0xaa, 0xea, 0xb4, 0xaa, 0x19, 0xa6, 0x48, 0xb3, 0xf8, 0x9d, 0xed, 0xfc, 0xce, 0xe2, 0xb3, 0xac, 0xb5, 0x14, 0x0d, 0xcd, 0x8d, 0x59, 0x01, 0x9a, 0x34, 0xc9, 0x68, 0x95, 0x14, 0x6f, 0x63, 0x0c, 0xca, 0xf3, 0xe8, 0x76, 0xbb, 0x44, 0x51, 0xbb, 0x7e, 0xfd, 0xf1, 0xde, 0xa0, 0x41, 0x5b, 0x2b, 0x6d, 0x92, 0xd3, 0x34, 0x9d, 0x9b, 0xf3, 0xce, 0xaa, 0x4e, 0xcd, 0x02, 0xba, 0x6a, 0xab, 0x50, 0x99, 0xd7, 0x3f, 0xd7, 0xa4, 0x65, 0x35, 0xab, 0xf0, 0x4a, 0xaa, 0xb4, 0xd2, 0x74, 0x11, 0xd2, 0x81, 0x33, 0xa4, 0x16, 0x14, 0xb9, 0x9c, 0x0a, 0x80, 0xd5, 0x7b, 0xed, 0x83, 0xcd, 0xbc, 0xb9, 0xc5, 0x6a, 0x2e, 0x54, 0x14, 0x76, 0x2e, 0x09, 0x84, 0x73, 0xf4, 0xa2, 0xb4, 0xae, 0x4a, 0x82, 0xc0, 0x9f, 0x13, 0x5e, 0x31, 0x85, 0x9e, 0xab, 0xa0, 0x9b, 0x47, 0x35, 0x57, 0x69, 0x5e, 0xe8, 0x29, 0x91, 0x1d, 0x8a, 0x39, 0xdb, 0xbd, 0x66, 0x16, 0x96, 0xe5, 0x66, 0xca, 0x0c, 0x62, 0x56, 0x37, 0x5d, 0x79, 0xa5, 0x2a, 0x13, 0xfb, 0x96, 0x7b, 0xcd, 0x2e, 0x40, 0x51, 0xe4, 0xd8, 0x86, 0xe7, 0xee, 0xfe, 0xef, 0xbb, 0xaa, 0x30, 0xc9, 0x07, 0xa0, 0xf7, 0xcf, 0x4d, 0x55, 0x2a, 0x51, 0x8d, 0x07, 0xd6, 0x18, 0xc3, 0x38, 0xee, 0x5c, 0xb6, 0x81, 0x44, 0x9e, 0x39, 0x3e, 0xa8, 0x10, 0x96, 0xb3, 0xcf, 0x9d, 0xaf, 0x59, 0x07, 0x46, 0x17, 0xac, 0xac, 0x2c, 0xb1, 0xdc, 0xeb, 0x93, 0xe5, 0xae, 0x62, 0x08, 0xda, 0x5d, 0x97, 0xad, 0xea, 0x09, 0xca, 0x13, 0x7c, 0xfe, 0x8b, 0x5f, 0x5b, 0x68, 0x73, 0x84, 0xc3, 0x6e, 0xe6, 0x5b, 0x74, 0x71, 0x44, 0x45, 0x37, 0xba, 0x59, 0x04, 0xe9, 0x7c, 0xed, 0xa9, 0xeb, 0xf8, 0xf9, 0x9f, 0x7b, 0x27, 0x9f, 0xfa, 0x83, 0xbb, 0xeb, 0x60, 0x5e, 0x3b, 0x8b, 0x85, 0x2d, 0x3a, 0xa1, 0x5f, 0x06, 0xce, 0x12, 0x08, 0xd4, 0xb8, 0xd6, 0x61, 0xd0, 0xaa, 0x03, 0x75, 0x92, 0x24, 0xe5, 0x98, 0x25, 0x65, 0xb4, 0xb7, 0xc7, 0x64, 0x32, 0xa1, 0xdd, 0xee, 0x92, 0x97, 0x80, 0xb9, 0xe5, 0xe5, 0x65, 0x96, 0x97, 0x0f, 0xd5, 0xaf, 0x5f, 0x14, 0x05, 0xda, 0x08, 0xb2, 0xec, 0xf2, 0x91, 0xd2, 0x95, 0x36, 0xf7, 0x2f, 0xfc, 0xab, 0x9f, 0xe0, 0x8b, 0x8f, 0x9e, 0x41, 0xdb, 0x90, 0xad, 0x9d, 0x4d, 0xd2, 0x6c, 0xcc, 0xc5, 0x8b, 0xe7, 0x18, 0x0e, 0xf7, 0xe8, 0x75, 0x02, 0x3e, 0x7f, 0xff, 0x83, 0x0b, 0x07, 0x80, 0xd7, 0xdd, 0x7e, 0x3b, 0x9f, 0xf9, 0x8b, 0xff, 0x86, 0x9f, 0xe6, 0x48, 0xa9, 0x4b, 0x50, 0xa7, 0xaa, 0x9f, 0xad, 0x20, 0xf4, 0x09, 0xc3, 0x36, 0xed, 0x76, 0x59, 0xa9, 0x7b, 0x8b, 0x21, 0xbc, 0x8d, 0xb6, 0xce, 0x02, 0xb5, 0xb9, 0xf9, 0x98, 0xc5, 0xdb, 0xc9, 0xaf, 0xb9, 0xed, 0x36, 0x92, 0xd4, 0xb0, 0xb4, 0x7a, 0x13, 0xd7, 0xbf, 0xf4, 0xf8, 0x8b, 0x2e, 0x95, 0x7a, 0xa9, 0xe3, 0xfb, 0x5e, 0xff, 0x7d, 0xbc, 0xe7, 0xbd, 0xef, 0xe6, 0xf3, 0x0f, 0xfc, 0x31, 0xf1, 0x68, 0x44, 0x92, 0x64, 0x35, 0xe8, 0x77, 0x91, 0xe3, 0xe6, 0x97, 0xbf, 0x96, 0x27, 0x9f, 0xfe, 0x1f, 0x58, 0x2b, 0xe9, 0xf7, 0x5a, 0x74, 0x3b, 0x11, 0xed, 0x96, 0x4f, 0x14, 0x06, 0x78, 0x4a, 0xb1, 0xb4, 0xb4, 0xcc, 0x2b, 0xbe, 0xe9, 0x36, 0xb4, 0x86, 0xb0, 0x7d, 0x88, 0xe1, 0x70, 0x03, 0x48, 0x17, 0xea, 0x5a, 0x80, 0x73, 0x23, 0x5c, 0x5b, 0x3f, 0x4a, 0x7f, 0x69, 0xb5, 0x1c, 0x95, 0x04, 0x74, 0x3a, 0x4b, 0x28, 0x6f, 0x9f, 0x6a, 0x97, 0xe6, 0x07, 0x58, 0x77, 0x4e, 0xfd, 0x5b, 0x96, 0xe8, 0xf0, 0x7d, 0x1d, 0xf1, 0x3a, 0xd6, 0x0b, 0x81, 0xd5, 0xfb, 0x32, 0xd5, 0xb6, 0xfe, 0x73, 0x7f, 0x77, 0x4b, 0xd3, 0x18, 0x74, 0x41, 0x18, 0x39, 0xaf, 0xf2, 0x74, 0x1c, 0x93, 0xa5, 0x03, 0xb6, 0x36, 0x9f, 0x67, 0x30, 0xdc, 0xe4, 0xf0, 0xfa, 0x3a, 0x69, 0x9e, 0x31, 0x49, 0x12, 0xf2, 0x2c, 0x26, 0x9d, 0x8c, 0xd0, 0x45, 0x86, 0xa7, 0x02, 0x0e, 0x1d, 0xb9, 0x0a, 0x61, 0x7d, 0x02, 0xdf, 0x21, 0xb3, 0x8d, 0x94, 0x14, 0x08, 0xba, 0x9d, 0x2e, 0xbd, 0x23, 0xeb, 0x84, 0x91, 0xc7, 0xe6, 0xd6, 0x2e, 0xad, 0xf2, 0x99, 0x0d, 0x82, 0x80, 0xaf, 0x9e, 0x3e, 0x4d, 0x96, 0x65, 0x75, 0x1c, 0x19, 0x8f, 0x4e, 0xb3, 0xbc, 0xdc, 0xe7, 0x65, 0x37, 0xfc, 0x0d, 0xc2, 0x30, 0x44, 0x2a, 0x9f, 0xc1, 0x60, 0xc0, 0xe9, 0x33, 0x67, 0x1d, 0x4b, 0xc1, 0x04, 0x07, 0xaa, 0x87, 0x56, 0x5f, 0x7b, 0xf1, 0xa6, 0xfb, 0x9c, 0x02, 0xbc, 0xa0, 0x6c, 0xbb, 0x2b, 0x27, 0xef, 0xed, 0x79, 0x3e, 0xa6, 0xdb, 0x21, 0x8e, 0x63, 0x76, 0x77, 0x77, 0x1d, 0xd0, 0xac, 0xc4, 0x37, 0x35, 0x6d, 0x92, 0x0f, 0xf2, 0xf5, 0xa8, 0x3a, 0xc6, 0x85, 0x9e, 0xcc, 0xc5, 0x84, 0x4b, 0xe9, 0x96, 0x1c, 0x54, 0x18, 0x5a, 0x63, 0xcb, 0xd8, 0xe0, 0x04, 0xaf, 0x06, 0x83, 0x41, 0xad, 0x3d, 0xb2, 0xb4, 0xdc, 0x67, 0x38, 0x1c, 0xd1, 0xe9, 0x74, 0x5c, 0xfb, 0xdf, 0x8f, 0xe8, 0x74, 0x3a, 0xf8, 0x7e, 0xc8, 0x78, 0x3c, 0x26, 0xcb, 0x1c, 0x95, 0xd6, 0x75, 0xc2, 0x9d, 0x80, 0xdb, 0xd2, 0xd2, 0xd2, 0x74, 0xcb, 0xbd, 0x19, 0xac, 0xdd, 0x3c, 0x2e, 0x9a, 0xf3, 0xd7, 0xae, 0xfe, 0x2d, 0x84, 0xc0, 0x8f, 0x6c, 0x89, 0x40, 0x74, 0x80, 0x21, 0x59, 0xb6, 0x62, 0x9d, 0xfd, 0x6b, 0x33, 0xab, 0xd1, 0xfb, 0xc6, 0xf4, 0xd8, 0xf2, 0xfb, 0x12, 0xa3, 0xa7, 0xc1, 0x59, 0x4d, 0xce, 0xb6, 0xa3, 0x16, 0xc5, 0x53, 0x33, 0xed, 0xa6, 0xca, 0x9c, 0x31, 0x86, 0x61, 0x9a, 0x5c, 0x12, 0x85, 0x3f, 0x9b, 0x84, 0x54, 0x33, 0xec, 0x29, 0xc4, 0xb9, 0xe2, 0x92, 0x01, 0xbd, 0x12, 0xce, 0xa9, 0x2c, 0x4e, 0x67, 0x65, 0x60, 0xad, 0xb5, 0x18, 0xeb, 0x84, 0xfa, 0x4d, 0x03, 0x1b, 0xb0, 0x7f, 0x0e, 0x92, 0x22, 0x2f, 0x90, 0xc2, 0xa2, 0xa5, 0xc5, 0x4a, 0x5b, 0x82, 0x45, 0xf6, 0x93, 0x92, 0x29, 0x8e, 0xe5, 0x01, 0xb4, 0xb8, 0x8a, 0x5b, 0xde, 0x1c, 0x59, 0x34, 0x5b, 0x3c, 0x49, 0x9e, 0xee, 0x3b, 0xdb, 0x51, 0x59, 0x00, 0x36, 0xfc, 0x8a, 0xe3, 0x18, 0x63, 0x2d, 0x2f, 0x7f, 0xf9, 0x77, 0x5c, 0xf6, 0x6c, 0x7b, 0x69, 0xf9, 0x9b, 0x38, 0x7f, 0xfe, 0x0b, 0xe4, 0x99, 0x26, 0xcd, 0x05, 0x93, 0x49, 0x81, 0xc9, 0x35, 0xe3, 0x71, 0x81, 0x35, 0x63, 0x7c, 0xaf, 0x0b, 0x78, 0x74, 0x5a, 0x7d, 0x76, 0x86, 0x23, 0x7c, 0x3f, 0xa2, 0xd3, 0x6d, 0x71, 0xe8, 0x70, 0x40, 0x92, 0x6e, 0x2d, 0xbc, 0x41, 0xfe, 0xe8, 0x9b, 0x7e, 0x9a, 0x5f, 0xfb, 0xb5, 0x0f, 0xe0, 0x79, 0x0a, 0x63, 0x3c, 0xac, 0x65, 0x61, 0xa4, 0xf3, 0xf2, 0xca, 0x0a, 0x18, 0xc3, 0x70, 0x77, 0xb7, 0xbe, 0x4e, 0x4a, 0x29, 0x7c, 0x4f, 0xd6, 0x00, 0x41, 0x4f, 0xb9, 0x8d, 0xa5, 0x28, 0x2c, 0xa6, 0x30, 0x60, 0x2d, 0xca, 0x83, 0x30, 0xf4, 0x11, 0x22, 0x20, 0x8b, 0xbc, 0xba, 0x83, 0x92, 0xa6, 0x29, 0x23, 0xcf, 0x71, 0xfb, 0x25, 0x05, 0x42, 0x68, 0x84, 0xcd, 0x11, 0x36, 0xc7, 0x6a, 0x43, 0x3a, 0x89, 0x9d, 0xd3, 0x9f, 0x0c, 0xd8, 0xdd, 0xdd, 0x5e, 0x18, 0x14, 0x56, 0x05, 0xf5, 0xa7, 0x9f, 0xde, 0xc0, 0x14, 0x09, 0x76, 0x9c, 0x13, 0x27, 0x63, 0x0a, 0x9d, 0x13, 0x84, 0x6d, 0xa4, 0x14, 0x53, 0x73, 0xf4, 0xcb, 0x7d, 0xdd, 0xd7, 0xfc, 0xad, 0x7f, 0xc0, 0xfd, 0x7f, 0xf9, 0x71, 0x54, 0x69, 0xa0, 0x91, 0x24, 0x59, 0x83, 0xc2, 0x09, 0xbe, 0x67, 0x30, 0xa1, 0x00, 0xa5, 0x10, 0x62, 0xb1, 0xf9, 0x71, 0xb5, 0x07, 0x34, 0x0d, 0x8c, 0x92, 0x64, 0xf1, 0x0a, 0xfd, 0xd1, 0x47, 0x1e, 0x29, 0xc1, 0x87, 0x9b, 0xbc, 0xe1, 0xce, 0x9f, 0x7d, 0x41, 0x9c, 0xc1, 0x8b, 0x8d, 0x78, 0x6f, 0xb7, 0x3d, 0xbe, 0xf6, 0xdc, 0x39, 0xce, 0x9e, 0xff, 0x5d, 0x84, 0x10, 0x0c, 0xf6, 0x26, 0x0b, 0xbf, 0xc6, 0x6b, 0xbf, 0xf3, 0xd5, 0x3c, 0xf1, 0xe4, 0x3d, 0x8e, 0x86, 0xdb, 0x02, 0xcf, 0xb7, 0x20, 0x72, 0xb4, 0x99, 0x38, 0x69, 0x61, 0x1b, 0x10, 0xb6, 0xba, 0x14, 0xb9, 0xc1, 0x0f, 0x42, 0x04, 0xe2, 0xeb, 0x72, 0xeb, 0x8f, 0x1d, 0x3f, 0xc6, 0xa1, 0x43, 0xd3, 0x2c, 0x86, 0xaf, 0x3e, 0xfb, 0x55, 0x7a, 0x2b, 0x5d, 0xfa, 0x4b, 0x87, 0xa6, 0x92, 0xfc, 0x66, 0x85, 0x3d, 0xcb, 0xfa, 0x71, 0xff, 0xdf, 0x4c, 0xe6, 0xf5, 0x81, 0x1d, 0xcc, 0xba, 0xf0, 0xca, 0xcb, 0x6e, 0x9f, 0x30, 0x20, 0x1d, 0xe2, 0xdd, 0x34, 0x6a, 0x9a, 0x20, 0x50, 0x60, 0x9c, 0x4d, 0xee, 0x68, 0x6f, 0x40, 0x9a, 0x0e, 0xf0, 0x64, 0x8e, 0xe7, 0x5b, 0xae, 0xba, 0xfa, 0x10, 0x4a, 0x09, 0x76, 0x2e, 0xba, 0x99, 0x78, 0xb7, 0x13, 0x12, 0xb5, 0x3b, 0xa4, 0x13, 0xe1, 0x44, 0xb5, 0x4a, 0x60, 0x5c, 0xbf, 0xdf, 0xa1, 0x15, 0x46, 0x58, 0x6d, 0xe8, 0x75, 0x22, 0x8e, 0x1d, 0x3f, 0xc2, 0xa1, 0xf5, 0x25, 0xfc, 0x40, 0x71, 0xc2, 0x38, 0x99, 0xd5, 0x9d, 0x9d, 0x1d, 0x36, 0x36, 0x36, 0xd8, 0x1e, 0x4d, 0xea, 0xe2, 0x30, 0xcf, 0x33, 0x3a, 0x9d, 0x90, 0x6b, 0x5f, 0xf6, 0x52, 0xae, 0x3a, 0xe1, 0xcc, 0x99, 0xfa, 0x6b, 0x2b, 0x3c, 0xfb, 0xec, 0xb3, 0x7c, 0xed, 0xec, 0x19, 0x22, 0x15, 0xf1, 0x98, 0x9f, 0x1c, 0xe8, 0x06, 0x5a, 0xfd, 0xdf, 0x68, 0x14, 0x13, 0xb6, 0xdc, 0xf8, 0x2d, 0x6a, 0x2b, 0x5a, 0x5d, 0x45, 0x92, 0xe4, 0x0c, 0xf6, 0x5c, 0x11, 0xdb, 0xdb, 0x73, 0xac, 0x95, 0xbc, 0x28, 0x93, 0x08, 0xe9, 0xf8, 0xfc, 0x69, 0x92, 0x90, 0xa6, 0xa9, 0xa3, 0x45, 0x1b, 0x8b, 0xce, 0x8a, 0x29, 0x40, 0xf0, 0x7e, 0xd7, 0x55, 0x4f, 0xe1, 0xa3, 0x94, 0x92, 0xf8, 0xbe, 0x9c, 0x62, 0x61, 0xcd, 0xd2, 0x45, 0x9b, 0xfb, 0xbd, 0x54, 0xb2, 0xd6, 0x74, 0x28, 0x8a, 0x82, 0xbc, 0xd4, 0x09, 0x51, 0x4a, 0xd1, 0xe9, 0x74, 0x38, 0x79, 0xf2, 0x1a, 0x56, 0x57, 0x57, 0x9d, 0x91, 0x56, 0x69, 0x5c, 0x13, 0xc7, 0x49, 0xad, 0x7e, 0x29, 0xa5, 0x4b, 0x3e, 0x2a, 0x45, 0xd7, 0xb5, 0xb5, 0x35, 0x3c, 0xdf, 0xf7, 0xa6, 0x16, 0xa1, 0x19, 0x50, 0x1c, 0xf2, 0xd8, 0x19, 0x87, 0xb8, 0x2f, 0x53, 0xa3, 0x8a, 0x01, 0x8c, 0x28, 0xa6, 0xda, 0xd5, 0x4d, 0x24, 0xbb, 0x9b, 0x1f, 0x14, 0x73, 0x6d, 0x87, 0xfd, 0xa0, 0x25, 0x58, 0x59, 0x59, 0x39, 0xb0, 0x2b, 0xb0, 0x5f, 0x15, 0x87, 0xf5, 0xbc, 0x60, 0x76, 0xfe, 0x23, 0xa5, 0xc4, 0x97, 0xe1, 0x81, 0x6d, 0xa3, 0xea, 0xcf, 0x28, 0x6a, 0xcf, 0xa1, 0xf5, 0x8b, 0x62, 0x7f, 0x41, 0xe3, 0x78, 0xf4, 0x82, 0xe6, 0x30, 0x46, 0x33, 0xe5, 0xb4, 0xe5, 0x79, 0x1e, 0xa2, 0x3a, 0x97, 0xb2, 0x0d, 0x32, 0x9b, 0x21, 0x8b, 0x46, 0x9b, 0xab, 0xd5, 0xaa, 0x40, 0x6d, 0xa2, 0xf1, 0xbe, 0x2e, 0x20, 0x4b, 0x29, 0x28, 0x8a, 0xcc, 0xb9, 0x1d, 0x19, 0x51, 0x27, 0x46, 0x4e, 0xf9, 0xc9, 0x7d, 0xc5, 0x71, 0x5c, 0xca, 0xc6, 0x96, 0x6d, 0x77, 0xb3, 0xaf, 0x21, 0x2f, 0x84, 0xc0, 0x7a, 0xba, 0xae, 0xec, 0x8d, 0x76, 0x96, 0xab, 0x46, 0xbb, 0x73, 0xb3, 0xd6, 0xe2, 0x05, 0x0a, 0xa4, 0x5c, 0x68, 0x26, 0xfd, 0xda, 0xef, 0x7c, 0x35, 0xbf, 0xf9, 0x9b, 0xf7, 0x31, 0x1a, 0x8d, 0x49, 0x73, 0x97, 0x44, 0xb5, 0xdb, 0x6d, 0x94, 0xcc, 0xc9, 0x32, 0xd8, 0xd9, 0x1e, 0xb1, 0xb9, 0xb9, 0x45, 0xab, 0x15, 0xe1, 0xb5, 0x23, 0x8e, 0x1f, 0x3f, 0xce, 0xd1, 0xa3, 0x47, 0xe9, 0xf6, 0x46, 0x9c, 0x3f, 0x37, 0x5c, 0x78, 0x83, 0xfc, 0xdc, 0x7d, 0xf7, 0xb1, 0xb9, 0xb5, 0x83, 0x52, 0x4e, 0x04, 0x27, 0x0a, 0x16, 0x47, 0x4e, 0xef, 0xee, 0xec, 0x30, 0x1e, 0x8f, 0xeb, 0x6b, 0xec, 0xa4, 0x1c, 0x23, 0xb2, 0x74, 0xbf, 0xfd, 0x15, 0xa8, 0x12, 0x58, 0x69, 0xf7, 0xef, 0xd7, 0xed, 0x8d, 0x8b, 0x53, 0xdd, 0x13, 0x29, 0x65, 0x2d, 0x66, 0xd4, 0x69, 0xb5, 0xdd, 0xbc, 0x5c, 0x6b, 0x8c, 0xb5, 0xec, 0x6c, 0x6d, 0xb2, 0xb3, 0xb5, 0x39, 0x35, 0x43, 0x36, 0xd2, 0x67, 0x3c, 0x5e, 0x1c, 0x18, 0x56, 0x05, 0xf5, 0x9f, 0xbc, 0xeb, 0x2d, 0x8c, 0x07, 0x0e, 0xf4, 0x92, 0x65, 0x19, 0x16, 0xc5, 0x24, 0x71, 0x62, 0x3e, 0x57, 0xa2, 0x2e, 0xf6, 0xba, 0xdb, 0x6f, 0xe7, 0x2f, 0xee, 0xfd, 0xff, 0x50, 0xda, 0xf1, 0x6d, 0x9d, 0x7a, 0xa1, 0x6b, 0xc5, 0xe6, 0x99, 0x65, 0x38, 0x88, 0x19, 0x8d, 0x1c, 0x85, 0x6f, 0x6f, 0xb4, 0x98, 0x8e, 0xb9, 0x2c, 0x55, 0xc0, 0x86, 0xc3, 0xd1, 0xbe, 0x4e, 0x04, 0x72, 0xe1, 0xcf, 0xfe, 0x91, 0xdf, 0xf9, 0x30, 0xad, 0xc8, 0xe7, 0xaf, 0xfe, 0xf2, 0xfe, 0x9a, 0x92, 0x77, 0xa9, 0x35, 0x7a, 0xb1, 0x8f, 0xe5, 0xa5, 0x90, 0xa2, 0x30, 0x0c, 0x06, 0xb9, 0x43, 0x85, 0x9b, 0xc5, 0x51, 0xee, 0xaf, 0xb9, 0xed, 0x36, 0xee, 0xbe, 0xfb, 0xd7, 0xf0, 0x7d, 0x43, 0xa7, 0xeb, 0x11, 0x46, 0x16, 0xa1, 0x32, 0x8c, 0x4d, 0x51, 0x52, 0xe1, 0x29, 0xd7, 0x86, 0xb7, 0x46, 0x32, 0xd8, 0x1b, 0x93, 0x66, 0xc9, 0xd7, 0xbd, 0x8e, 0x97, 0x02, 0x3e, 0x5a, 0x6b, 0xa6, 0xba, 0x8a, 0xcd, 0x51, 0x9e, 0xb5, 0x16, 0xe5, 0xb5, 0x5e, 0xd0, 0x2d, 0xcc, 0x1a, 0x79, 0xc0, 0x8c, 0xbc, 0xb4, 0x68, 0x9e, 0xd1, 0xf9, 0xab, 0x78, 0xec, 0xcd, 0x25, 0x91, 0x4a, 0x23, 0x05, 0x6c, 0x6e, 0x6e, 0x90, 0xe7, 0x63, 0x74, 0x31, 0xa6, 0x15, 0x41, 0x18, 0x49, 0xba, 0xbd, 0x88, 0xc1, 0x70, 0x44, 0xaf, 0xdf, 0xa7, 0xdd, 0x0e, 0x91, 0x14, 0x60, 0x35, 0x52, 0x76, 0x41, 0xbb, 0xfb, 0xa5, 0xb3, 0xdc, 0xa7, 0xdf, 0x5f, 0x26, 0xf4, 0x03, 0x24, 0x86, 0xb5, 0x95, 0x15, 0xae, 0x3a, 0x7a, 0x84, 0xa8, 0xa5, 0x48, 0xe2, 0x11, 0x1a, 0xd8, 0x1e, 0x0c, 0x78, 0xe6, 0xd9, 0x67, 0x39, 0x73, 0xe6, 0x0c, 0xb9, 0x31, 0xac, 0xae, 0xae, 0xd2, 0xed, 0xba, 0xce, 0xdf, 0xb7, 0x7e, 0xf3, 0x37, 0x73, 0xd3, 0x4d, 0x37, 0x21, 0xa5, 0x64, 0x63, 0x63, 0x03, 0x2f, 0xf0, 0x51, 0x7e, 0x88, 0xf2, 0x43, 0x90, 0x1e, 0xda, 0x6a, 0x27, 0xad, 0xed, 0x05, 0xb5, 0x0f, 0x46, 0x73, 0x0f, 0x4f, 0x73, 0xe8, 0x74, 0x7a, 0x65, 0xd7, 0x37, 0xa0, 0x1d, 0x74, 0xdc, 0xc8, 0x29, 0xb3, 0xa0, 0xa8, 0x01, 0x76, 0xd5, 0xec, 0xbe, 0xaa, 0xca, 0xab, 0x62, 0xf6, 0x20, 0x61, 0xb2, 0x83, 0x58, 0x51, 0xb3, 0x63, 0xe1, 0x59, 0xaf, 0x91, 0xd9, 0xbf, 0xd7, 0x31, 0xb1, 0x62, 0x1b, 0xd4, 0x80, 0xbc, 0xa8, 0xd4, 0x3f, 0x29, 0x6a, 0x43, 0x98, 0x56, 0x99, 0x90, 0x8c, 0xf3, 0x09, 0x93, 0xc9, 0x84, 0xd1, 0x28, 0x26, 0x8e, 0x63, 0x37, 0x0e, 0x2f, 0xc7, 0x69, 0x95, 0x80, 0x98, 0x52, 0xca, 0xb5, 0xdc, 0x2f, 0x05, 0x8a, 0x6b, 0x92, 0xfd, 0x9b, 0x41, 0xb7, 0xfa, 0xbe, 0x26, 0x69, 0x64, 0x83, 0x94, 0xa6, 0x15, 0xb6, 0x04, 0x8d, 0xb8, 0x19, 0xf6, 0x6c, 0xf5, 0xdc, 0x7c, 0xed, 0x6e, 0xb7, 0x3b, 0xf5, 0x01, 0x9b, 0xa0, 0x3b, 0xb7, 0x71, 0xe6, 0x53, 0xff, 0xae, 0xb2, 0xb7, 0x6a, 0x86, 0x91, 0x25, 0x66, 0x6e, 0x2e, 0x24, 0xea, 0xc1, 0x11, 0x6c, 0x6d, 0x6d, 0xcd, 0x7d, 0xae, 0xa6, 0x02, 0x5c, 0xa7, 0xd3, 0x9b, 0xba, 0xe1, 0x67, 0x2f, 0xe0, 0xce, 0xce, 0x60, 0x4e, 0x96, 0xb6, 0x9a, 0x59, 0x18, 0x63, 0x88, 0x7a, 0xad, 0xa9, 0x0b, 0x3b, 0x9b, 0x3c, 0x44, 0x25, 0xb7, 0xd9, 0x98, 0x2a, 0x09, 0xf1, 0xa6, 0x50, 0xf9, 0xc6, 0x54, 0x19, 0xb5, 0x7b, 0xd8, 0xaa, 0xbf, 0x57, 0x5f, 0x9d, 0x76, 0xbf, 0x31, 0x97, 0x77, 0x33, 0x17, 0x5d, 0xda, 0xf3, 0x39, 0x50, 0x5d, 0xe2, 0xda, 0x69, 0x65, 0xe5, 0xaf, 0xb3, 0x4a, 0xd8, 0x46, 0xe1, 0x49, 0x45, 0x92, 0xc6, 0x18, 0xcb, 0x42, 0x33, 0xe9, 0x4a, 0xfc, 0xe3, 0x99, 0x27, 0xbf, 0x8c, 0x95, 0xd0, 0x8a, 0x24, 0xc7, 0x8e, 0x1d, 0xa3, 0x28, 0x0a, 0x3a, 0x51, 0xdb, 0x49, 0x02, 0x67, 0x5f, 0x41, 0x08, 0xc1, 0xe1, 0xab, 0x8f, 0xb1, 0xb4, 0xb4, 0x8a, 0xb5, 0x3e, 0x93, 0x49, 0xce, 0x55, 0x87, 0x97, 0x16, 0xde, 0x20, 0x3f, 0xfa, 0xb1, 0xdf, 0x75, 0x32, 0x9a, 0xa1, 0x33, 0xfd, 0x38, 0x72, 0xf4, 0xd8, 0xc2, 0xaf, 0xf1, 0x1b, 0xff, 0xf1, 0x3d, 0x2c, 0x2f, 0xb5, 0x50, 0x42, 0x52, 0x14, 0x29, 0x49, 0x92, 0x92, 0x65, 0x39, 0x45, 0xbe, 0x4f, 0x87, 0xf4, 0x1a, 0x6e, 0x61, 0xb2, 0x54, 0x9b, 0x0a, 0xfa, 0x5d, 0xd2, 0x52, 0x3e, 0xb8, 0x29, 0x9c, 0x53, 0xad, 0x79, 0xe5, 0x6a, 0xd7, 0xc4, 0x76, 0x34, 0x67, 0xea, 0xe3, 0xf1, 0x1e, 0xa6, 0xb8, 0xb2, 0xe0, 0x72, 0xf1, 0xe2, 0x06, 0xc9, 0x64, 0x00, 0x0a, 0x8c, 0x70, 0xb4, 0x16, 0x3f, 0x08, 0x88, 0x93, 0x11, 0x08, 0xc1, 0xe3, 0x8f, 0x7f, 0x16, 0x78, 0xf3, 0xc2, 0x89, 0xc2, 0xf5, 0x37, 0xde, 0xc6, 0x63, 0x0f, 0xff, 0x59, 0x2d, 0x55, 0x59, 0x89, 0x3a, 0x81, 0x04, 0xa4, 0x4b, 0x1e, 0x8d, 0xe3, 0x22, 0x2f, 0x72, 0xec, 0x8d, 0xf6, 0x88, 0x02, 0x31, 0x65, 0x02, 0x94, 0x4e, 0x16, 0x4b, 0x0a, 0x1e, 0x7d, 0xe4, 0x11, 0x1e, 0xfa, 0xc2, 0x17, 0xb8, 0xea, 0x48, 0x9b, 0x0b, 0x1b, 0x63, 0x3e, 0xf6, 0xf1, 0x8f, 0x71, 0xeb, 0xad, 0xaf, 0xfa, 0x86, 0xa1, 0xdb, 0xe7, 0x2a, 0xe1, 0xab, 0x0e, 0xf3, 0xe8, 0xff, 0x3c, 0x4d, 0xa1, 0x2d, 0xfd, 0x5e, 0x80, 0x46, 0xd3, 0x6e, 0x2f, 0xce, 0x52, 0x78, 0xe3, 0x1b, 0xdf, 0xc6, 0x6f, 0xff, 0xbf, 0xef, 0xe3, 0x91, 0x87, 0x1f, 0xc4, 0xf3, 0x7c, 0x94, 0x6c, 0x21, 0x88, 0x08, 0xfd, 0x3e, 0xdd, 0xce, 0x1a, 0xdd, 0xce, 0x0a, 0xbe, 0x17, 0xd2, 0xee, 0x1f, 0xc7, 0x37, 0xcf, 0x5d, 0xf9, 0x09, 0x5b, 0x59, 0xef, 0x0d, 0x95, 0x30, 0x8c, 0x93, 0x41, 0x75, 0xfb, 0x86, 0x6c, 0xe0, 0x73, 0x9a, 0x9d, 0xc3, 0x83, 0xf0, 0x3e, 0x07, 0xb5, 0xe5, 0xeb, 0xfd, 0x0e, 0x33, 0x17, 0xdc, 0xc1, 0xdd, 0xf3, 0xbe, 0x14, 0x5c, 0xd8, 0x38, 0x47, 0x18, 0x08, 0x7c, 0x5f, 0x93, 0x17, 0x05, 0x61, 0x60, 0x49, 0x92, 0x31, 0xad, 0x6e, 0x87, 0x8e, 0x6d, 0x91, 0x66, 0x31, 0xc3, 0xc1, 0x16, 0x79, 0x92, 0xd1, 0xed, 0x74, 0x38, 0xb4, 0x76, 0x98, 0xe5, 0xe5, 0x65, 0x8a, 0x42, 0x62, 0xb4, 0x26, 0x1e, 0xbb, 0x59, 0xbc, 0x95, 0x02, 0xe9, 0x5b, 0x3a, 0xed, 0x10, 0xad, 0x73, 0xbe, 0xf4, 0xf8, 0x57, 0xb8, 0x70, 0xe1, 0x02, 0x5b, 0x5b, 0x5b, 0x8c, 0xc7, 0x63, 0x96, 0xd7, 0x0f, 0xd1, 0x5b, 0x5a, 0x72, 0x14, 0x49, 0xad, 0xc9, 0x75, 0x41, 0x50, 0x69, 0xa1, 0x08, 0x38, 0xbf, 0x71, 0x81, 0x33, 0x67, 0x9f, 0x23, 0xc9, 0x52, 0xb6, 0x77, 0x07, 0x44, 0xaa, 0x8d, 0xef, 0x1b, 0xa2, 0x48, 0xd2, 0x6e, 0x07, 0x84, 0xa1, 0x3f, 0x65, 0x8f, 0x1d, 0x66, 0x01, 0xbd, 0xcc, 0xe9, 0x47, 0xc8, 0x89, 0xa6, 0x6f, 0x0d, 0x76, 0xa8, 0x49, 0x77, 0x72, 0x82, 0x40, 0x90, 0x47, 0xfb, 0x1d, 0x5b, 0x17, 0x44, 0xab, 0x00, 0x19, 0x94, 0x6e, 0x7c, 0x95, 0x70, 0x97, 0x28, 0xe9, 0x9e, 0xfe, 0xcc, 0x78, 0x75, 0x9a, 0x75, 0x55, 0xf1, 0xf5, 0xf7, 0x95, 0xf8, 0x9a, 0x71, 0x6f, 0xba, 0xfb, 0x0d, 0x90, 0x9b, 0xb4, 0xb6, 0xa7, 0x6d, 0xea, 0x9e, 0x54, 0xc5, 0xdd, 0x64, 0xe2, 0x82, 0xb8, 0x33, 0x42, 0x4a, 0x6b, 0x27, 0xc5, 0xca, 0xa3, 0x61, 0xbc, 0x37, 0x98, 0x4a, 0x32, 0xf2, 0x3c, 0xc7, 0x8b, 0xa2, 0xe8, 0x92, 0xb4, 0xb5, 0x66, 0xf0, 0x3a, 0xa8, 0x9d, 0xed, 0x49, 0x3b, 0xd7, 0x4e, 0x68, 0xde, 0x34, 0xd5, 0x82, 0x1c, 0xd4, 0x06, 0x17, 0x42, 0xb0, 0xbb, 0x73, 0x7a, 0xaa, 0x95, 0x3e, 0xeb, 0x39, 0x6d, 0xed, 0xc1, 0x2d, 0xe9, 0x6a, 0x43, 0x09, 0xfd, 0xd6, 0x74, 0x10, 0xb5, 0x06, 0xa3, 0xf7, 0xcf, 0x21, 0x0a, 0xc2, 0x03, 0xa9, 0x78, 0xb5, 0x79, 0x4b, 0x39, 0x52, 0x98, 0xb2, 0x74, 0x6d, 0x70, 0xcd, 0x9d, 0x0e, 0xf0, 0x74, 0x40, 0x77, 0xba, 0xdf, 0xba, 0x54, 0x0c, 0x4b, 0x67, 0xce, 0x77, 0xda, 0xa2, 0x32, 0x11, 0x49, 0x9d, 0x40, 0x54, 0xdc, 0x73, 0x6b, 0x6d, 0x0d, 0xcc, 0xab, 0x84, 0x71, 0x2e, 0xd5, 0x25, 0x48, 0x12, 0xe3, 0x36, 0xe1, 0x32, 0xf8, 0xeb, 0xc2, 0x50, 0x35, 0x3a, 0x84, 0x50, 0x10, 0xe4, 0xf5, 0x8d, 0x55, 0x64, 0x9a, 0x22, 0x37, 0xa8, 0x52, 0xe1, 0x49, 0x79, 0x4e, 0xb4, 0x20, 0xbd, 0x02, 0xae, 0xf0, 0xff, 0xf1, 0x13, 0x3f, 0xcd, 0xbb, 0x7e, 0xe1, 0xed, 0xf4, 0x57, 0x57, 0x49, 0xd3, 0x94, 0xd5, 0xe5, 0x15, 0xf6, 0xf6, 0xc6, 0x04, 0x9e, 0xc3, 0x36, 0x48, 0x15, 0x3a, 0x43, 0x84, 0xfe, 0x2a, 0x42, 0x85, 0x24, 0x99, 0x41, 0xf9, 0x2d, 0xbe, 0xeb, 0xbb, 0xbe, 0x7f, 0x61, 0xc4, 0x73, 0x96, 0xe5, 0xf8, 0x41, 0x44, 0xa7, 0xbf, 0x44, 0xef, 0x0a, 0xab, 0xb2, 0xbf, 0x7f, 0xfb, 0x1d, 0xfc, 0xd7, 0x8f, 0x7e, 0x90, 0x76, 0x34, 0x4d, 0x7d, 0xb4, 0xd6, 0xa2, 0x8d, 0xb3, 0x5f, 0xd4, 0x12, 0x4c, 0x5e, 0xa9, 0xde, 0x39, 0xe2, 0xee, 0x78, 0x73, 0x54, 0x9a, 0x35, 0x80, 0xef, 0xef, 0x0b, 0xfe, 0x54, 0xd7, 0x74, 0x32, 0x99, 0xbe, 0x3e, 0xd5, 0xff, 0x57, 0xe2, 0x3f, 0x9e, 0xe7, 0x4f, 0x25, 0x01, 0x8b, 0xd0, 0x9f, 0xee, 0xfa, 0xc9, 0x1f, 0xa3, 0x13, 0x39, 0xc1, 0x0a, 0xc7, 0x1d, 0x37, 0xac, 0xaf, 0x45, 0x0e, 0x70, 0xa5, 0x24, 0x5f, 0xf8, 0xd2, 0xd7, 0xae, 0xa8, 0xed, 0x7c, 0xeb, 0xad, 0xaf, 0xe2, 0xc1, 0x07, 0x3e, 0x89, 0x52, 0x8a, 0x57, 0xde, 0xfa, 0x3d, 0xec, 0x8d, 0x32, 0x4e, 0x3f, 0xf5, 0x59, 0x52, 0x3f, 0x6d, 0xf8, 0x09, 0x38, 0xf9, 0xda, 0x85, 0x02, 0xfa, 0x70, 0x48, 0xea, 0x53, 0xe3, 0x5b, 0x0e, 0x7a, 0xbe, 0xbf, 0xde, 0xf1, 0xd8, 0xa3, 0x8f, 0x22, 0xb0, 0x78, 0x65, 0xf1, 0xf6, 0x75, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x8a, 0x1a, 0x89, 0xff, 0xf6, 0x77, 0xbc, 0x63, 0xce, 0x7a, 0xf5, 0xc2, 0x85, 0x0d, 0x1e, 0xb8, 0xef, 0xfe, 0x2b, 0x32, 0xfe, 0xb9, 0xd4, 0x7d, 0xf6, 0x9a, 0xdb, 0x6e, 0xe3, 0x5f, 0xff, 0xdb, 0x0f, 0xf0, 0xbe, 0xf7, 0x7d, 0x90, 0xcf, 0xfe, 0xd5, 0x1f, 0x21, 0x94, 0xe5, 0x5b, 0x5e, 0xf1, 0xdd, 0x57, 0xf4, 0x1e, 0x55, 0xd2, 0xbb, 0x7b, 0xf6, 0x61, 0x8c, 0x05, 0x9d, 0x5b, 0x84, 0x35, 0x78, 0x2a, 0xc4, 0xf7, 0x05, 0xdd, 0x6e, 0x8b, 0x76, 0xbb, 0x87, 0x11, 0x8a, 0xef, 0xfd, 0x81, 0xef, 0xb9, 0xa2, 0x73, 0x7e, 0xec, 0xb1, 0xd3, 0x7c, 0xeb, 0xb7, 0xbf, 0x12, 0x6b, 0x5d, 0x55, 0xbd, 0x5f, 0x0c, 0x59, 0x84, 0x30, 0x97, 0x04, 0xb5, 0x4d, 0x77, 0x55, 0xe4, 0x01, 0x73, 0xf5, 0x06, 0x6d, 0xb8, 0xfe, 0x7e, 0xe5, 0xf1, 0x3d, 0xed, 0xd9, 0x1d, 0x04, 0x1e, 0xd2, 0xc2, 0xee, 0xee, 0x0e, 0xfd, 0x5e, 0xe8, 0x92, 0x17, 0x25, 0xe8, 0x74, 0x23, 0xa4, 0xd2, 0x7c, 0xed, 0xcc, 0x39, 0x84, 0xb0, 0x74, 0xdb, 0x21, 0xc7, 0x8e, 0x9d, 0xa0, 0xdf, 0x69, 0x23, 0x85, 0x40, 0x17, 0x76, 0xbf, 0xbb, 0x89, 0x93, 0xc8, 0x2e, 0xa4, 0x64, 0x67, 0x67, 0x87, 0x67, 0x9f, 0xf9, 0x2a, 0x7b, 0xa3, 0x6d, 0x07, 0xaa, 0x0d, 0xdc, 0x0c, 0xdb, 0x0f, 0x23, 0xd6, 0x3a, 0x5d, 0x8e, 0x1f, 0x3f, 0xce, 0x68, 0x34, 0x22, 0x2d, 0xf5, 0xf0, 0xcf, 0x9c, 0x7d, 0x8e, 0x13, 0x17, 0x4e, 0xa2, 0x94, 0xe2, 0xf4, 0x73, 0x67, 0xf8, 0xe2, 0x17, 0xbf, 0xc8, 0xc6, 0xc6, 0x16, 0x6b, 0x6b, 0xcb, 0xf8, 0x61, 0xc0, 0xb8, 0x50, 0x18, 0xcf, 0xc3, 0x44, 0x01, 0x3a, 0xf2, 0xd1, 0xa1, 0x8f, 0x29, 0x31, 0x5c, 0x45, 0x51, 0xa0, 0x23, 0x0f, 0x1d, 0x79, 0xa4, 0x49, 0x01, 0x18, 0x42, 0x0f, 0x72, 0x5f, 0x62, 0x5b, 0x01, 0xaa, 0xdd, 0x46, 0xeb, 0x78, 0xaa, 0x03, 0xeb, 0x54, 0xef, 0x5c, 0x22, 0x33, 0x1a, 0x8d, 0xea, 0xfb, 0x7c, 0x76, 0x5c, 0x51, 0xc5, 0x1c, 0xa5, 0xfc, 0x03, 0x41, 0x86, 0x07, 0x55, 0xf6, 0xb3, 0xd4, 0x69, 0x6b, 0x2d, 0xd2, 0xab, 0xda, 0xf5, 0xd3, 0x94, 0xe9, 0xda, 0xbd, 0xed, 0x80, 0x42, 0xd4, 0x98, 0xa6, 0xc6, 0xbd, 0x99, 0x03, 0xf3, 0x79, 0x95, 0x5a, 0x59, 0x53, 0x38, 0xa5, 0x79, 0xe2, 0xcd, 0xd9, 0xf6, 0xac, 0x26, 0x79, 0x92, 0x79, 0x08, 0x0c, 0x9a, 0xc6, 0x8b, 0x5a, 0x51, 0x2b, 0xdc, 0xb4, 0xa2, 0xf6, 0x94, 0x6d, 0xe3, 0xfe, 0x9b, 0x97, 0x02, 0x32, 0xf8, 0x68, 0x2d, 0x30, 0x5a, 0x82, 0xf5, 0x50, 0x65, 0x96, 0x52, 0x09, 0x62, 0xf8, 0xc1, 0xf4, 0x5c, 0xa4, 0xd9, 0x7a, 0x32, 0xc6, 0x90, 0x8e, 0x36, 0xdd, 0xcc, 0x3e, 0xf0, 0x10, 0xf8, 0xe4, 0x05, 0x64, 0x99, 0xc6, 0x69, 0x5a, 0x87, 0x48, 0x61, 0x19, 0xc7, 0x63, 0xd7, 0xfa, 0x96, 0x1e, 0x78, 0x3e, 0x42, 0x78, 0x4c, 0x92, 0x94, 0xc0, 0x8f, 0x48, 0xc7, 0x31, 0x45, 0x51, 0xd9, 0x85, 0x96, 0x0b, 0x8f, 0x13, 0x21, 0x69, 0x77, 0xc2, 0x52, 0xa0, 0xc3, 0xc9, 0x19, 0x16, 0xb9, 0xa1, 0xdd, 0xee, 0x33, 0x18, 0xec, 0x61, 0xad, 0x73, 0x57, 0x5a, 0x3a, 0x74, 0x35, 0xbb, 0xbb, 0xdb, 0x84, 0x91, 0x4f, 0x27, 0x88, 0x18, 0xc7, 0x03, 0x37, 0x37, 0x97, 0x90, 0xe7, 0x19, 0xf8, 0x41, 0xd9, 0xe2, 0x92, 0xe8, 0xc2, 0x50, 0x64, 0xc9, 0xfe, 0x38, 0xc1, 0x58, 0x30, 0xa5, 0xf8, 0xbe, 0x94, 0xa5, 0xa3, 0x11, 0x18, 0x53, 0xb8, 0x07, 0xc2, 0x68, 0xb0, 0x41, 0xa9, 0x90, 0x54, 0x8e, 0x45, 0xf0, 0x6a, 0x6a, 0x84, 0xb5, 0x82, 0x78, 0xb4, 0x5d, 0xcb, 0x9a, 0x66, 0x3a, 0xc5, 0xf7, 0x15, 0x69, 0xae, 0xc9, 0x52, 0x4b, 0x3f, 0xec, 0xe2, 0x69, 0xcb, 0x78, 0xb8, 0x7b, 0x45, 0xa8, 0xe0, 0x37, 0xdc, 0xf1, 0xbf, 0xf1, 0x27, 0xff, 0xfd, 0x33, 0x28, 0x35, 0x61, 0x67, 0x90, 0xe1, 0x79, 0x2d, 0x12, 0x6d, 0xb8, 0xb8, 0xbb, 0x8b, 0x08, 0x42, 0x26, 0x49, 0xc2, 0x78, 0x98, 0xb0, 0x7a, 0xe2, 0x10, 0x67, 0xcf, 0x9d, 0x43, 0x64, 0xcf, 0xf1, 0x86, 0x3b, 0xdf, 0xb9, 0xd0, 0xfb, 0xfc, 0xe1, 0x9f, 0x7c, 0x12, 0xdf, 0xf7, 0x59, 0x5d, 0x5b, 0x67, 0x6d, 0x7d, 0xbd, 0x7c, 0x10, 0x16, 0x17, 0x6a, 0xb9, 0xe9, 0xe6, 0x9b, 0xf9, 0xaf, 0x7e, 0x97, 0x41, 0x96, 0x93, 0x66, 0x05, 0xbd, 0xde, 0x12, 0xa3, 0xbd, 0x98, 0x40, 0x39, 0x0c, 0x84, 0x92, 0x82, 0x48, 0x28, 0xa4, 0xd4, 0xa0, 0x14, 0x4a, 0x68, 0x3c, 0x5f, 0xe2, 0xd9, 0xe9, 0x04, 0xd4, 0x14, 0xe5, 0x9f, 0x68, 0x72, 0x5b, 0x10, 0xf8, 0x25, 0x98, 0x4e, 0x36, 0xe8, 0x8c, 0xa5, 0x99, 0x8c, 0x35, 0x12, 0x9b, 0x81, 0xd0, 0x62, 0xe1, 0x2a, 0xef, 0x81, 0xfb, 0x1f, 0x60, 0x32, 0x32, 0x90, 0xa7, 0xf8, 0x5e, 0x39, 0x1e, 0xf2, 0x15, 0xa3, 0x12, 0xe5, 0x6b, 0xb4, 0x06, 0x2c, 0x5f, 0x7c, 0xe8, 0xa1, 0x85, 0xab, 0xd7, 0xeb, 0x6f, 0xb8, 0x11, 0x9d, 0x07, 0x58, 0x2d, 0x79, 0xe4, 0x91, 0xfb, 0x28, 0x92, 0x71, 0x39, 0xfe, 0xb2, 0x28, 0x65, 0x6b, 0xda, 0x1a, 0x0b, 0xb6, 0xcb, 0xb3, 0xcc, 0x3a, 0xdf, 0x05, 0x29, 0xd1, 0xa5, 0x3a, 0x59, 0xd4, 0x5e, 0x5e, 0xac, 0x42, 0x3e, 0x76, 0x0c, 0xa9, 0x14, 0x61, 0xd8, 0x26, 0x0c, 0x73, 0xe7, 0x50, 0x66, 0x2c, 0x6f, 0x7f, 0xc7, 0x3b, 0xf8, 0xe4, 0x27, 0x3e, 0x51, 0x27, 0x2f, 0x17, 0x37, 0x2e, 0x10, 0xc7, 0xa3, 0x17, 0xad, 0x32, 0x3f, 0x7b, 0xf6, 0x6c, 0xdd, 0xc1, 0xf8, 0x97, 0xef, 0xf8, 0x59, 0x2e, 0x5c, 0xf8, 0x51, 0x3e, 0xf5, 0xfb, 0xbf, 0xc7, 0xf7, 0x7e, 0xff, 0xeb, 0xaf, 0xf8, 0x35, 0x7f, 0xec, 0x4d, 0x6f, 0xe1, 0xe7, 0xde, 0xfe, 0x26, 0x10, 0xa0, 0x3c, 0x1f, 0x29, 0x52, 0x8a, 0x49, 0xc6, 0xce, 0x76, 0x8a, 0x22, 0x45, 0xda, 0xab, 0xd8, 0x7c, 0xfe, 0x13, 0xdc, 0xfc, 0xb6, 0xbb, 0xaf, 0xe8, 0xf5, 0x85, 0x70, 0xfb, 0xa2, 0x2e, 0x24, 0x66, 0x2a, 0x50, 0x8b, 0xfa, 0xda, 0xe5, 0x79, 0x36, 0x8d, 0x72, 0x6f, 0x1c, 0xa7, 0x1f, 0xbf, 0xbb, 0x06, 0x1e, 0x56, 0xc7, 0x93, 0x5f, 0x7d, 0x8e, 0xf6, 0xea, 0xb7, 0xec, 0x23, 0xad, 0xd1, 0x4e, 0x29, 0x0e, 0x5d, 0x7e, 0x55, 0x7a, 0xe3, 0x65, 0x07, 0x26, 0xc9, 0x69, 0x85, 0x01, 0xaf, 0x79, 0xcd, 0xdf, 0xe2, 0x73, 0x0f, 0xfc, 0x05, 0x4a, 0xa5, 0xae, 0x9a, 0x54, 0x1e, 0xed, 0x8e, 0x4f, 0xaf, 0xbb, 0x42, 0xa7, 0xdb, 0x42, 0x4a, 0xc8, 0x8c, 0x66, 0x2f, 0x73, 0x15, 0xa4, 0xd1, 0x0e, 0xff, 0x23, 0xb5, 0xc7, 0x68, 0x34, 0x62, 0x6f, 0x34, 0x60, 0x32, 0x89, 0x19, 0xc7, 0x03, 0xc6, 0xf1, 0x2e, 0x79, 0xe1, 0x12, 0xe9, 0x20, 0x68, 0xd3, 0xef, 0xad, 0xd2, 0x6a, 0x85, 0x78, 0x12, 0xf6, 0x92, 0x0c, 0x6d, 0xc1, 0x9a, 0x02, 0x89, 0x20, 0x88, 0xba, 0x7c, 0xfe, 0xe1, 0xc7, 0x19, 0x8d, 0x46, 0x9c, 0x3b, 0x77, 0x96, 0xf1, 0x78, 0x8f, 0xf6, 0x4a, 0x97, 0x14, 0x43, 0x92, 0xc5, 0x60, 0x9c, 0x9f, 0xb8, 0x44, 0x11, 0xfa, 0x11, 0xfd, 0x56, 0xb7, 0xc4, 0x8e, 0x24, 0xa4, 0x79, 0x82, 0x5c, 0xee, 0x31, 0x8a, 0x63, 0xfc, 0xa0, 0x45, 0xe8, 0xf9, 0x58, 0xe1, 0x23, 0x84, 0x4f, 0x96, 0x19, 0x84, 0xc8, 0x29, 0x6c, 0x3a, 0x37, 0xe6, 0x6d, 0x8e, 0x74, 0x9b, 0x09, 0xeb, 0x41, 0x45, 0x6f, 0x55, 0x90, 0x4d, 0x03, 0xf2, 0xf6, 0x63, 0x55, 0xd5, 0xfd, 0x56, 0x4a, 0xce, 0xe1, 0xaf, 0xa0, 0x69, 0xda, 0x22, 0x6a, 0xd3, 0xa2, 0x28, 0x8a, 0x6a, 0xd7, 0xbe, 0xea, 0x35, 0xbd, 0x12, 0xe1, 0x6e, 0xad, 0x65, 0x73, 0x73, 0x9b, 0x34, 0x4d, 0xeb, 0xe2, 0xb0, 0x42, 0xb7, 0xf7, 0x7a, 0xce, 0xb7, 0xc1, 0xab, 0x3c, 0xb1, 0x67, 0xfd, 0xba, 0x67, 0xb5, 0xcc, 0x67, 0xe7, 0x06, 0x00, 0x41, 0xd8, 0x9e, 0x9b, 0x2f, 0x34, 0x2b, 0xd6, 0x4a, 0x3f, 0x7b, 0xbf, 0x6d, 0xac, 0xa7, 0x2a, 0xd8, 0x4a, 0x37, 0xbb, 0x09, 0xeb, 0x6f, 0x82, 0xc0, 0x3a, 0xdd, 0xf9, 0x19, 0x79, 0x33, 0x2b, 0xe9, 0xb7, 0x21, 0x2b, 0x34, 0x45, 0x96, 0x83, 0x4d, 0xd1, 0xc6, 0xb5, 0xfa, 0x55, 0x0d, 0x26, 0x73, 0x73, 0x74, 0xdf, 0x0f, 0xc9, 0x0a, 0x8d, 0xcd, 0x32, 0x2c, 0x86, 0xd1, 0x5e, 0x8c, 0x94, 0x09, 0x3a, 0xb7, 0xe5, 0xcf, 0x44, 0x84, 0x51, 0x80, 0x31, 0x05, 0x71, 0x1c, 0x33, 0x9e, 0x4c, 0x18, 0x97, 0xad, 0x0e, 0x29, 0x25, 0x48, 0x8f, 0xdc, 0x4c, 0x48, 0xf2, 0x02, 0x55, 0xb6, 0x63, 0x94, 0x1f, 0x31, 0x99, 0xa4, 0x58, 0x2b, 0xc8, 0x33, 0xcd, 0xce, 0x64, 0x97, 0x78, 0xb2, 0x47, 0xbb, 0x55, 0x39, 0xca, 0xed, 0x3b, 0xab, 0xcd, 0xd2, 0x4a, 0xf6, 0x2f, 0xaa, 0x6c, 0x70, 0x4b, 0x4a, 0x7d, 0x63, 0xa1, 0x4a, 0x4d, 0x66, 0x8b, 0x52, 0x7e, 0xe9, 0xdb, 0x9c, 0x94, 0x95, 0xb9, 0x44, 0x49, 0xcf, 0xd9, 0x18, 0x0a, 0x45, 0xb7, 0xd3, 0x23, 0x2f, 0x8d, 0x42, 0xfc, 0x52, 0x92, 0x33, 0x28, 0xbd, 0xba, 0x95, 0xf2, 0x91, 0xd6, 0xd4, 0xca, 0x69, 0x57, 0x52, 0x85, 0x3c, 0xf9, 0xe5, 0x2f, 0x73, 0xdf, 0x43, 0x8f, 0xba, 0x6b, 0x2b, 0xdd, 0xda, 0x27, 0x49, 0x4c, 0xa6, 0x0b, 0x84, 0xe7, 0xf8, 0xb8, 0xdb, 0xdb, 0x5b, 0x14, 0x59, 0xca, 0x5d, 0x3f, 0xf1, 0x8e, 0x85, 0x5e, 0xff, 0xc2, 0x85, 0x0d, 0xfe, 0xf2, 0x2f, 0x3f, 0x47, 0xb7, 0xd7, 0x73, 0xf2, 0xaa, 0xa1, 0xc7, 0x78, 0x34, 0x22, 0x68, 0x79, 0x57, 0x74, 0xbe, 0x57, 0x5d, 0x7d, 0x35, 0xda, 0x5a, 0xb6, 0x76, 0x06, 0xce, 0xe4, 0xc1, 0x5a, 0xa4, 0xef, 0xa1, 0xb5, 0xa0, 0x28, 0x72, 0x46, 0x59, 0x8e, 0x12, 0x1a, 0x5f, 0x38, 0x8f, 0x09, 0x9d, 0x15, 0x97, 0x40, 0x06, 0xef, 0xff, 0x7b, 0x9c, 0xc6, 0x73, 0x5d, 0x93, 0x69, 0x71, 0x23, 0x07, 0x36, 0xbb, 0xf6, 0xd4, 0x35, 0x0b, 0x9f, 0x6f, 0x61, 0x20, 0x2b, 0x2c, 0x4a, 0x4a, 0x94, 0x6c, 0xa0, 0x64, 0xab, 0x2a, 0xc9, 0xc2, 0x83, 0x0f, 0x2e, 0x1e, 0xd0, 0x8f, 0x1c, 0x39, 0x8c, 0x2e, 0x9f, 0xa7, 0x7c, 0x32, 0xaa, 0x9f, 0xcb, 0xa6, 0x79, 0x90, 0x73, 0xd2, 0x5a, 0x4c, 0xb2, 0x36, 0x08, 0x42, 0x5a, 0x9d, 0xa0, 0xec, 0x34, 0xb9, 0xb5, 0xd8, 0xde, 0xde, 0x5b, 0x18, 0xbc, 0x18, 0x06, 0x1e, 0x81, 0x2f, 0x39, 0x72, 0xa8, 0xc3, 0x24, 0xc9, 0x48, 0x12, 0x47, 0x5f, 0x6d, 0x26, 0x2f, 0x37, 0xdf, 0x72, 0xcb, 0x8b, 0x8a, 0x7c, 0xff, 0xb6, 0x57, 0x7f, 0x5b, 0x5d, 0xa5, 0x57, 0x6b, 0x74, 0x90, 0x77, 0xfa, 0x22, 0xc7, 0xb5, 0xa7, 0xae, 0xe3, 0x7b, 0xff, 0xce, 0x8f, 0xf0, 0x7b, 0x7f, 0xfc, 0x61, 0x94, 0xce, 0xf1, 0x7c, 0x0f, 0xa1, 0x74, 0xc9, 0x6e, 0x49, 0x89, 0x27, 0x23, 0x7e, 0x7c, 0xc1, 0x67, 0x62, 0x26, 0xa4, 0xcf, 0x19, 0x44, 0xcd, 0xce, 0xc9, 0xab, 0xe2, 0xea, 0xa1, 0xcf, 0xfe, 0x1a, 0xd7, 0x5c, 0xfb, 0xcd, 0x7c, 0xd3, 0x2b, 0x6e, 0x6c, 0xd8, 0xd9, 0xbe, 0x76, 0xae, 0x4b, 0xf1, 0xfc, 0xee, 0x11, 0x77, 0x6f, 0x09, 0x03, 0xa2, 0xc4, 0xda, 0x94, 0x1e, 0xe7, 0xc6, 0x1a, 0x6c, 0x29, 0x2c, 0xe3, 0xa4, 0x62, 0xf7, 0xef, 0x79, 0xdf, 0x0b, 0x59, 0x59, 0x59, 0x63, 0x3c, 0xbe, 0x80, 0x2e, 0x2a, 0xb0, 0x97, 0xdb, 0x63, 0x1d, 0x06, 0x05, 0xb2, 0xdc, 0x01, 0x45, 0xf3, 0x4c, 0x53, 0x14, 0x06, 0xcf, 0x0b, 0x18, 0x6d, 0xbb, 0x79, 0xef, 0x68, 0x34, 0xa2, 0x28, 0x32, 0x94, 0x67, 0xf0, 0x03, 0x1f, 0x2f, 0x74, 0xb4, 0xbb, 0x30, 0x08, 0x91, 0xa5, 0xad, 0x6a, 0x21, 0x2c, 0x5a, 0x17, 0x18, 0xad, 0x1d, 0xb6, 0x48, 0x1b, 0x86, 0x83, 0x01, 0xbe, 0xef, 0x93, 0x65, 0xd9, 0xbe, 0x51, 0x94, 0x76, 0xa0, 0x6a, 0xcf, 0x0b, 0x48, 0x3c, 0x1f, 0xe1, 0xfb, 0x14, 0x6d, 0x9f, 0x22, 0xf2, 0x48, 0x42, 0x17, 0x7b, 0x8c, 0x1f, 0x41, 0xa4, 0x10, 0x7b, 0x39, 0x3d, 0x2f, 0xa4, 0xdf, 0x75, 0xc1, 0x2e, 0x1d, 0x4f, 0x98, 0x6c, 0x0f, 0xd0, 0xa3, 0x09, 0xa1, 0x0a, 0x31, 0xbe, 0x9c, 0x8b, 0x6f, 0xcd, 0xa3, 0xe9, 0xd6, 0x79, 0x50, 0x0c, 0x6c, 0xda, 0x7f, 0xcf, 0xd2, 0xd5, 0xaa, 0xae, 0xee, 0x41, 0x95, 0x7a, 0x0d, 0x8a, 0x2e, 0x35, 0x2c, 0x4c, 0xb9, 0x67, 0x1b, 0x45, 0xed, 0x2e, 0x57, 0xf9, 0x9a, 0x54, 0xee, 0x97, 0x45, 0xee, 0x92, 0x8d, 0x24, 0x49, 0xea, 0xa2, 0x7b, 0x79, 0x75, 0xd5, 0x8d, 0x76, 0xa3, 0x08, 0x2f, 0x08, 0x30, 0x80, 0x27, 0x1b, 0x90, 0xfc, 0xd9, 0xcd, 0x2d, 0x2a, 0x5b, 0x10, 0xcd, 0xb6, 0x7a, 0x33, 0x53, 0xc9, 0xd2, 0x62, 0x8e, 0x4e, 0xd6, 0xfc, 0xe0, 0xd5, 0xe6, 0x31, 0x3d, 0x3b, 0x90, 0x08, 0xe1, 0x82, 0xc1, 0x2c, 0x2d, 0x6d, 0xb6, 0x75, 0x74, 0xa9, 0xf9, 0x7e, 0x6d, 0xf7, 0x6a, 0x93, 0xda, 0xaa, 0x14, 0x41, 0x29, 0x82, 0xaf, 0x50, 0xd2, 0x55, 0x21, 0x46, 0xb8, 0x8d, 0xb3, 0x48, 0x52, 0x06, 0xc3, 0x91, 0xd3, 0x17, 0xf6, 0xdb, 0x4c, 0x4a, 0x24, 0x61, 0x37, 0x5a, 0xc6, 0x5a, 0x4d, 0x5e, 0x40, 0x11, 0xa7, 0xa5, 0xc6, 0x6f, 0x51, 0x3a, 0x0e, 0x09, 0x64, 0xd9, 0x62, 0x16, 0xd2, 0xa3, 0xd0, 0x30, 0x8e, 0x53, 0xd7, 0x7d, 0x50, 0x02, 0x84, 0x4f, 0xd4, 0x8a, 0x68, 0xb7, 0x7a, 0x58, 0x0a, 0x86, 0xc3, 0xed, 0xf2, 0x7b, 0x21, 0x61, 0xd8, 0x72, 0xee, 0x38, 0xd5, 0xfd, 0xa2, 0xcb, 0x16, 0x59, 0x03, 0xd9, 0x6e, 0x61, 0x4a, 0x2b, 0xbe, 0x62, 0x06, 0xd8, 0x52, 0x2d, 0xc7, 0x5a, 0x4b, 0x18, 0x74, 0x19, 0x8f, 0xc7, 0xc4, 0xe3, 0x84, 0x38, 0xce, 0x28, 0x72, 0x5d, 0xb6, 0xe0, 0x5d, 0x17, 0x44, 0x45, 0x2e, 0x01, 0xf1, 0x7c, 0x9f, 0x5e, 0x6f, 0x89, 0x49, 0xea, 0xb4, 0xb6, 0xdb, 0xed, 0x36, 0xca, 0xf3, 0xc8, 0x53, 0xd7, 0xce, 0x5a, 0xd4, 0xec, 0xa4, 0x3a, 0xfe, 0xd1, 0x9b, 0xdf, 0xcc, 0xf0, 0xbd, 0xef, 0xe7, 0x73, 0x5f, 0x7a, 0x98, 0x48, 0xc6, 0x4c, 0x74, 0x58, 0xa2, 0xff, 0xcb, 0x75, 0xc1, 0x70, 0x71, 0xe3, 0x3c, 0xff, 0xfc, 0xe7, 0x7e, 0x7a, 0x61, 0x0b, 0xd5, 0x8f, 0xfe, 0xe7, 0x8f, 0x94, 0xe8, 0xd3, 0x10, 0xad, 0x33, 0x92, 0x64, 0xc4, 0x78, 0x3c, 0xa0, 0xd7, 0x5a, 0xbb, 0xa2, 0xed, 0x2f, 0x88, 0xda, 0x4e, 0x0b, 0xd9, 0x6b, 0x21, 0x7d, 0x8f, 0xc3, 0x06, 0x8a, 0xd4, 0xcd, 0xc5, 0x26, 0xf1, 0x88, 0xf1, 0x70, 0x80, 0xce, 0x13, 0xd7, 0x58, 0xb4, 0x06, 0x9d, 0x16, 0x78, 0x9e, 0x3a, 0x70, 0x23, 0xad, 0x83, 0xae, 0x76, 0x34, 0x1f, 0xe7, 0x3a, 0x55, 0x69, 0xf2, 0xef, 0x03, 0x8c, 0x5c, 0x4b, 0x7f, 0xf1, 0x73, 0x3d, 0x7f, 0x7e, 0x03, 0x4f, 0x49, 0x3c, 0x0f, 0xac, 0xb0, 0xb3, 0xfa, 0x48, 0x58, 0x5c, 0x02, 0xf5, 0xc8, 0x23, 0xf7, 0x01, 0x77, 0x2d, 0xfc, 0xfa, 0xd7, 0xbd, 0xfc, 0x16, 0x9e, 0x7a, 0xfc, 0x11, 0x74, 0x56, 0x32, 0x20, 0xe4, 0xfc, 0xb3, 0xbd, 0xa8, 0x15, 0x78, 0x7f, 0xb9, 0x8f, 0xc9, 0xd3, 0xb2, 0x2d, 0x58, 0xdf, 0xd6, 0x57, 0x80, 0x34, 0x97, 0xc4, 0xc9, 0xd8, 0xb9, 0x31, 0x06, 0x16, 0x63, 0x04, 0x69, 0xea, 0xf0, 0x2a, 0xa3, 0x92, 0xf7, 0xfb, 0x62, 0x03, 0xe2, 0x0e, 0x1d, 0x3a, 0x4c, 0xbb, 0xf3, 0xe2, 0x83, 0xec, 0x7e, 0xe8, 0x8e, 0x3b, 0xf8, 0xab, 0x87, 0x3e, 0xe1, 0x66, 0xda, 0x46, 0xa2, 0x8d, 0x8f, 0xc9, 0x33, 0x06, 0x83, 0x01, 0xff, 0xeb, 0xf7, 0x7d, 0xef, 0xc2, 0xcf, 0xc4, 0xd4, 0x3a, 0x75, 0x96, 0xf0, 0xbc, 0x83, 0xdd, 0xe0, 0x9e, 0x79, 0xfc, 0x43, 0x1c, 0x3f, 0xf9, 0xaa, 0xda, 0xd1, 0xed, 0x9f, 0xfc, 0xe3, 0x8f, 0x7c, 0xdd, 0xe4, 0xf9, 0x0b, 0x4f, 0x4c, 0xcf, 0xd6, 0xeb, 0xc0, 0xd2, 0x70, 0x74, 0xb4, 0xd8, 0x92, 0x89, 0x68, 0x01, 0x87, 0xbf, 0x30, 0xda, 0xd9, 0xa6, 0x1e, 0x39, 0x72, 0x84, 0xc7, 0x1f, 0x3f, 0x83, 0xa7, 0x20, 0x1e, 0x1b, 0x3c, 0xcf, 0xfd, 0x19, 0xfa, 0xae, 0x70, 0x8a, 0xe3, 0xb8, 0xfc, 0x4a, 0x28, 0x0a, 0x43, 0xe0, 0x47, 0x14, 0x19, 0x75, 0x75, 0x19, 0xc7, 0x23, 0x0a, 0xed, 0x30, 0x17, 0xbe, 0x1f, 0x82, 0xd0, 0x04, 0x1e, 0x58, 0xad, 0xc9, 0xf2, 0xcc, 0x15, 0x31, 0xd6, 0xa2, 0x75, 0x4e, 0x51, 0x9a, 0x53, 0xd9, 0xb2, 0xbb, 0x5b, 0xb1, 0xaa, 0x2a, 0x7a, 0x57, 0x55, 0x00, 0x0e, 0x26, 0x03, 0xfc, 0x4e, 0x07, 0xd9, 0x8e, 0x88, 0x3c, 0x81, 0xe7, 0x95, 0x4e, 0x93, 0x42, 0xa0, 0x85, 0x22, 0x5e, 0x29, 0x41, 0xda, 0xdd, 0x88, 0x74, 0x32, 0x61, 0x27, 0x4b, 0xd9, 0x20, 0x26, 0x16, 0x13, 0xc6, 0x5e, 0x8b, 0xc3, 0xaa, 0xd9, 0x52, 0x37, 0xd0, 0xe8, 0x34, 0x4f, 0x63, 0x13, 0x9a, 0x89, 0xbc, 0xc3, 0x44, 0xb9, 0x35, 0x32, 0x07, 0xec, 0x1d, 0xfb, 0x5c, 0xfe, 0xa2, 0x30, 0xb5, 0xd7, 0xc6, 0x41, 0x81, 0x5d, 0x53, 0xe1, 0xc3, 0xca, 0x0e, 0x41, 0x3d, 0x4a, 0x71, 0x31, 0xaf, 0xd7, 0xeb, 0x11, 0x04, 0x0e, 0x87, 0x96, 0x97, 0xf8, 0xa8, 0x4a, 0x07, 0x02, 0x60, 0x32, 0x19, 0xd7, 0xb1, 0xb0, 0x56, 0xff, 0xcb, 0xd2, 0x62, 0x2a, 0xe0, 0x36, 0xb3, 0x94, 0x3c, 0xd3, 0x73, 0x7d, 0xfa, 0xda, 0x5c, 0xc4, 0x42, 0xab, 0xd5, 0x39, 0x30, 0xf3, 0x68, 0x56, 0x30, 0xd5, 0x22, 0x68, 0x6d, 0xcb, 0x76, 0x84, 0x22, 0x0c, 0x83, 0xb2, 0x55, 0x20, 0x0f, 0xac, 0x8e, 0x6a, 0xa3, 0x8e, 0x62, 0x32, 0x35, 0x33, 0x9f, 0xfd, 0xb2, 0xda, 0xcd, 0x92, 0x3d, 0xdf, 0xc7, 0xf7, 0x43, 0x94, 0x17, 0x82, 0x95, 0x6e, 0x81, 0x90, 0xf8, 0x5e, 0x40, 0x11, 0x54, 0x92, 0xb3, 0x09, 0x48, 0x49, 0x10, 0x75, 0xf0, 0xa2, 0xae, 0x03, 0x3d, 0x4c, 0x20, 0x2f, 0x0c, 0x69, 0x3a, 0x21, 0x2f, 0xb2, 0x12, 0x9c, 0x00, 0x41, 0xe8, 0x11, 0xf8, 0x3e, 0xb9, 0xb6, 0xe4, 0x3a, 0x47, 0x60, 0xc8, 0xb5, 0x20, 0xd7, 0x1a, 0xac, 0xc1, 0x50, 0xb8, 0xf9, 0xc9, 0x44, 0xbb, 0xd6, 0x92, 0x54, 0x48, 0x11, 0x62, 0x45, 0x40, 0x5c, 0xa2, 0x9e, 0x83, 0xc0, 0x43, 0x50, 0x02, 0xad, 0x2a, 0x8d, 0xe5, 0xc6, 0x58, 0x43, 0xe7, 0x05, 0x5e, 0x20, 0x6a, 0x8d, 0x65, 0xd9, 0x68, 0xbb, 0x57, 0x37, 0x4a, 0x32, 0x29, 0x88, 0xe3, 0x89, 0x43, 0x9c, 0xa7, 0x39, 0x02, 0x0f, 0x29, 0x03, 0x27, 0xd5, 0x6a, 0x34, 0x56, 0x83, 0x57, 0xf2, 0x13, 0xb5, 0x95, 0xec, 0x6d, 0x0d, 0xe8, 0xf6, 0x96, 0xe8, 0xf6, 0x56, 0x9c, 0xb1, 0x81, 0x9f, 0x23, 0x24, 0x3c, 0xfd, 0xf4, 0xd3, 0x57, 0xbc, 0xb1, 0xfc, 0xe3, 0x1f, 0x7b, 0x13, 0xb7, 0x3e, 0xf4, 0x10, 0xd7, 0xdf, 0x70, 0x23, 0xff, 0xf2, 0xdf, 0xfc, 0x2b, 0xc2, 0x30, 0x24, 0x8c, 0x5c, 0x40, 0xef, 0x78, 0x2d, 0xde, 0xf6, 0xd6, 0x37, 0x2f, 0xbc, 0x71, 0x8d, 0xf6, 0xf6, 0xf8, 0xd8, 0xc7, 0x3f, 0x46, 0xd4, 0x8a, 0x88, 0xda, 0x21, 0x51, 0x3b, 0x20, 0x8c, 0x7c, 0x82, 0xc4, 0xbf, 0xe2, 0xf3, 0xdc, 0x1b, 0xc5, 0x74, 0x7a, 0x7d, 0xac, 0x54, 0x20, 0x7c, 0xe7, 0xac, 0x24, 0x2d, 0x7e, 0xe0, 0x50, 0xac, 0xd2, 0x42, 0x3c, 0x16, 0x08, 0x0c, 0xc2, 0x54, 0x46, 0x2d, 0xea, 0x85, 0x93, 0x84, 0x72, 0x86, 0x56, 0xdf, 0xdb, 0xa6, 0x7e, 0x34, 0xeb, 0xff, 0x37, 0x57, 0xc0, 0xc5, 0xde, 0xd8, 0x7a, 0x9e, 0xc8, 0xf7, 0x51, 0x4a, 0x1f, 0x08, 0x5c, 0x92, 0xd2, 0x12, 0xfa, 0x82, 0xa7, 0x9e, 0x7e, 0x9e, 0x0b, 0x17, 0x36, 0x5e, 0xd0, 0x98, 0xe5, 0xa0, 0xe3, 0x15, 0x37, 0xbd, 0x92, 0xff, 0xf9, 0xc5, 0x2f, 0x30, 0xc9, 0x5c, 0x26, 0xdf, 0x0a, 0xa6, 0xbb, 0x00, 0x55, 0x55, 0xb0, 0xc8, 0xf1, 0xf2, 0x97, 0x7f, 0x07, 0x0f, 0xfc, 0xd5, 0x27, 0xea, 0xfb, 0xd4, 0x25, 0x33, 0x8b, 0x77, 0x53, 0x5c, 0x85, 0x51, 0xcd, 0xfb, 0x24, 0x21, 0x86, 0x57, 0xbc, 0xfc, 0x5a, 0xfe, 0xf6, 0xdf, 0x79, 0x2d, 0x7f, 0x7e, 0xcf, 0xbd, 0x00, 0x2f, 0xda, 0xec, 0xbc, 0x09, 0x16, 0xac, 0x92, 0x84, 0x4a, 0x76, 0xf7, 0xc5, 0x00, 0xe2, 0x75, 0x7b, 0x3d, 0xfe, 0xf7, 0x3b, 0x7e, 0x9a, 0x0f, 0xfd, 0xf6, 0xff, 0x55, 0xd2, 0x57, 0x35, 0x47, 0x56, 0x3c, 0x7e, 0xe6, 0xff, 0xfc, 0x85, 0x85, 0xaf, 0xd9, 0x2c, 0xc6, 0xe2, 0xe4, 0x35, 0xaf, 0x20, 0x8c, 0x3a, 0x14, 0x45, 0x36, 0xb5, 0x2f, 0x1b, 0x63, 0x16, 0xb6, 0x2b, 0x7e, 0xe0, 0xbe, 0xfb, 0xd9, 0xd9, 0x1a, 0xa2, 0x94, 0x4f, 0xbb, 0xe4, 0xb2, 0xbb, 0x8e, 0xa1, 0x01, 0x6b, 0x1a, 0x92, 0xdd, 0x15, 0x6f, 0xdd, 0xb1, 0x6c, 0x94, 0xf4, 0xf9, 0xff, 0x79, 0x7b, 0xf3, 0x60, 0xcb, 0xb2, 0xab, 0xbc, 0xf3, 0xb7, 0x87, 0x33, 0xdd, 0xf9, 0x4d, 0xf9, 0x32, 0x2b, 0xb3, 0x66, 0x95, 0x4a, 0x42, 0x2a, 0x49, 0x85, 0x30, 0x92, 0x6c, 0x5a, 0x05, 0x08, 0xd9, 0x1d, 0x6d, 0x0c, 0x84, 0x3c, 0x80, 0x30, 0xed, 0x96, 0x85, 0xed, 0xc6, 0x6e, 0x3b, 0xda, 0x6e, 0x63, 0xdc, 0xdd, 0x42, 0x9e, 0x00, 0xdb, 0xb8, 0x25, 0x30, 0xc2, 0x8d, 0x15, 0x61, 0x50, 0x4b, 0x11, 0xb2, 0x05, 0x76, 0x5b, 0x48, 0x2d, 0x30, 0x60, 0x63, 0x10, 0xa5, 0x32, 0x1a, 0xac, 0x09, 0xcd, 0x45, 0x55, 0x56, 0x96, 0x4a, 0x55, 0x95, 0x95, 0x99, 0x6f, 0xbe, 0xc3, 0x19, 0xf7, 0xde, 0xfd, 0xc7, 0x3e, 0xe7, 0xdc, 0x73, 0xdf, 0x7b, 0x59, 0x55, 0x99, 0x52, 0xf8, 0x44, 0xbc, 0x78, 0x2f, 0x33, 0x5f, 0xde, 0x73, 0xef, 0x39, 0xfb, 0xec, 0xb5, 0xd6, 0xb7, 0xbe, 0xf5, 0x7d, 0x65, 0x91, 0x21, 0x95, 0x64, 0x32, 0x59, 0xa7, 0x28, 0x2a, 0x4c, 0x2c, 0x49, 0xd3, 0x0c, 0x21, 0x0d, 0xbb, 0xbb, 0x7b, 0xe4, 0x45, 0x8a, 0x94, 0x90, 0x65, 0x8b, 0x9a, 0x17, 0x64, 0x70, 0x56, 0x61, 0x22, 0x08, 0x64, 0x8f, 0xb3, 0xdb, 0xb7, 0x30, 0x1c, 0xf5, 0xb9, 0x7a, 0xf5, 0x19, 0x9e, 0x7a, 0xfa, 0x09, 0xd2, 0x74, 0x4a, 0x65, 0xac, 0xf7, 0xa6, 0x10, 0xbe, 0x88, 0x6a, 0x0b, 0x46, 0x63, 0x57, 0xe2, 0x8d, 0x94, 0x92, 0xaa, 0xfe, 0x59, 0x87, 0x01, 0xc2, 0xc8, 0x1a, 0xdd, 0xf5, 0xf0, 0x34, 0xa5, 0xa5, 0x3c, 0x98, 0x72, 0xf5, 0x70, 0xca, 0xd5, 0x27, 0x9e, 0x24, 0x0c, 0x43, 0xfa, 0xc3, 0x21, 0x93, 0xc9, 0x84, 0x5e, 0xaf, 0x47, 0xa6, 0x15, 0xb6, 0xcc, 0x49, 0xab, 0x82, 0x22, 0xcd, 0x48, 0xb3, 0xd4, 0x4b, 0xda, 0x0a, 0xdf, 0x22, 0xf0, 0x9a, 0xf4, 0x4b, 0xf3, 0xaa, 0x6e, 0x20, 0x6f, 0xae, 0xf5, 0xf1, 0xe7, 0xb3, 0x3b, 0x6d, 0xd0, 0x45, 0xa5, 0xbb, 0xdf, 0x4f, 0x33, 0x1c, 0x3b, 0x8d, 0xa8, 0x58, 0x39, 0xd1, 0xf6, 0xc5, 0x7d, 0xe2, 0xad, 0xeb, 0x73, 0x7a, 0x33, 0x96, 0xab, 0x57, 0xaf, 0xb6, 0xba, 0x17, 0xe9, 0x22, 0xaf, 0xdf, 0xa3, 0xec, 0xf8, 0x69, 0x44, 0x28, 0xa5, 0x28, 0x8a, 0xa2, 0xed, 0xb9, 0xeb, 0xc2, 0x58, 0xa4, 0x03, 0x55, 0x7b, 0x77, 0xcb, 0xae, 0x34, 0xa9, 0xef, 0xaa, 0x60, 0x10, 0x5e, 0x38, 0xde, 0x9b, 0xd7, 0xfa, 0x39, 0x56, 0xa5, 0x5a, 0x25, 0xb9, 0xd3, 0xde, 0x6c, 0x33, 0x1f, 0x77, 0xbd, 0x19, 0xf1, 0xe6, 0x22, 0x9e, 0x66, 0x8a, 0xd2, 0xfc, 0x79, 0x14, 0xf5, 0x56, 0x16, 0xf2, 0x09, 0x26, 0xb2, 0x08, 0x10, 0xd2, 0x21, 0x9c, 0x44, 0xaa, 0x10, 0x29, 0x42, 0x2a, 0x07, 0xc6, 0x79, 0x1a, 0xe8, 0x7c, 0x6e, 0xa9, 0x9c, 0x24, 0x0c, 0x23, 0xfa, 0x03, 0x45, 0x59, 0x01, 0x42, 0xb3, 0x98, 0xa7, 0xa4, 0xa9, 0xe3, 0x60, 0x7f, 0x5e, 0xf7, 0x48, 0xfd, 0x45, 0x14, 0xd2, 0x2b, 0xdf, 0x64, 0x85, 0x25, 0x2b, 0xfd, 0x80, 0x7f, 0x59, 0xf8, 0x8d, 0x7f, 0x30, 0x18, 0xa2, 0x64, 0xe4, 0x21, 0x71, 0x11, 0x12, 0xc6, 0x3d, 0x0e, 0xf6, 0x17, 0x48, 0x51, 0x21, 0xa5, 0x45, 0x48, 0x4d, 0x14, 0xf6, 0x98, 0x2f, 0x0e, 0x10, 0x8b, 0x82, 0x5e, 0x32, 0xa0, 0x28, 0x0e, 0x5a, 0xf3, 0x79, 0xa9, 0x04, 0x42, 0x7a, 0x64, 0x42, 0x6b, 0x05, 0x61, 0x88, 0xec, 0x90, 0x2e, 0x96, 0xb3, 0xfa, 0xcb, 0x0a, 0x5d, 0x07, 0x7e, 0x16, 0xb4, 0x57, 0x2b, 0x1a, 0x59, 0x2b, 0x31, 0x15, 0xe4, 0x99, 0xa1, 0x28, 0x4a, 0x70, 0x5e, 0xee, 0xaf, 0x34, 0x8e, 0x3c, 0x4f, 0x49, 0xb3, 0x9c, 0xf5, 0x8d, 0x98, 0xe1, 0x70, 0xec, 0x95, 0x91, 0x62, 0xcd, 0xc1, 0xc1, 0xd1, 0x4d, 0x57, 0x7a, 0xcd, 0xa6, 0xf5, 0x6d, 0xaf, 0x7d, 0x2d, 0x1f, 0xfa, 0xe0, 0x87, 0x58, 0xdb, 0x98, 0xd0, 0xef, 0x7b, 0xf7, 0x31, 0x84, 0xe5, 0x07, 0xbe, 0xef, 0xcf, 0xdd, 0x54, 0x15, 0xf2, 0xbb, 0xbf, 0xf3, 0x61, 0xdf, 0x52, 0x19, 0xf6, 0x59, 0x5f, 0x5b, 0x6f, 0x05, 0x61, 0x8a, 0xac, 0xb8, 0xe9, 0x4d, 0x50, 0x08, 0x45, 0x18, 0xc6, 0x58, 0x51, 0xd5, 0x8a, 0x80, 0x15, 0xf3, 0xe9, 0x8c, 0xd1, 0x78, 0x40, 0x20, 0x85, 0x4f, 0xe0, 0x72, 0xcf, 0xf9, 0x90, 0x4e, 0x22, 0xb0, 0x9e, 0xbb, 0x71, 0x1d, 0xb8, 0x1d, 0x40, 0xc8, 0x0e, 0x29, 0x94, 0xd3, 0x04, 0x8c, 0x7c, 0xe7, 0xf1, 0x26, 0x11, 0xd5, 0x56, 0xc7, 0xe0, 0x24, 0x13, 0xb9, 0x4d, 0xf6, 0x79, 0xe4, 0xe1, 0xaf, 0xdc, 0x70, 0x70, 0x78, 0xc9, 0x4b, 0x5f, 0x5a, 0xeb, 0xd5, 0x3b, 0xb4, 0x04, 0x67, 0x0d, 0xc6, 0xad, 0x3e, 0xa3, 0x37, 0x5a, 0x5d, 0xf7, 0x06, 0x03, 0x2a, 0x6b, 0x11, 0xce, 0x42, 0xed, 0x3b, 0xb0, 0xc8, 0x6f, 0x9c, 0xe2, 0x6f, 0x2c, 0x68, 0x59, 0x57, 0x4e, 0xca, 0xf1, 0x27, 0xff, 0xf8, 0xf7, 0xf2, 0x67, 0x7f, 0xe0, 0x07, 0x18, 0x0c, 0x87, 0xdf, 0xf0, 0x40, 0x7e, 0xda, 0x31, 0x5f, 0xa4, 0x6d, 0x4f, 0xfd, 0x1b, 0x71, 0x34, 0x63, 0x6c, 0x4e, 0x59, 0xee, 0x7f, 0xe9, 0x1f, 0xbd, 0x61, 0x83, 0xa2, 0x53, 0xdf, 0xe3, 0x7c, 0x41, 0x9c, 0xf4, 0x6b, 0x24, 0xb0, 0x81, 0x89, 0xea, 0xfb, 0x27, 0x6f, 0x7c, 0xbd, 0xfd, 0xc1, 0xe7, 0xbe, 0xc2, 0xe7, 0x3e, 0xf7, 0x05, 0x36, 0xcf, 0xdc, 0xca, 0x1d, 0x77, 0x7f, 0x33, 0xfd, 0x60, 0x52, 0xbf, 0x9c, 0x6f, 0xed, 0x21, 0x1c, 0xaa, 0x76, 0x61, 0x91, 0x28, 0xdf, 0xfe, 0xc3, 0xc3, 0xfd, 0x65, 0x9e, 0x63, 0x8c, 0xf3, 0x22, 0x4c, 0xc2, 0xdf, 0xb7, 0xb2, 0x4c, 0x59, 0x2c, 0x32, 0x8a, 0xac, 0x60, 0x26, 0x0e, 0xbd, 0x93, 0x63, 0x95, 0xa3, 0x95, 0x17, 0x49, 0x41, 0x28, 0x24, 0x8a, 0xa2, 0xaa, 0x90, 0x5a, 0x13, 0x46, 0x09, 0x4a, 0x87, 0x94, 0x95, 0x61, 0x91, 0xa6, 0x04, 0xd6, 0x9b, 0x4d, 0x89, 0xf2, 0x60, 0xb5, 0x95, 0x5a, 0xcb, 0xa3, 0x0a, 0x3c, 0x9c, 0xbf, 0x48, 0x67, 0x54, 0xa5, 0xed, 0x18, 0x7a, 0xe9, 0xc6, 0x92, 0x1d, 0x25, 0x15, 0xc3, 0xa2, 0xec, 0x04, 0x47, 0x03, 0x59, 0x86, 0xcb, 0xbd, 0x35, 0xb0, 0x8b, 0x63, 0x7a, 0xd6, 0x3b, 0x94, 0x85, 0x61, 0x48, 0x96, 0x65, 0x24, 0x65, 0x45, 0x3f, 0x37, 0x64, 0x73, 0xcd, 0x5a, 0x18, 0x62, 0x7a, 0x1d, 0x01, 0x35, 0x29, 0x6a, 0xfe, 0x97, 0x6f, 0x3f, 0x78, 0xd2, 0xa0, 0x38, 0xc1, 0xdf, 0xb2, 0xce, 0xd6, 0xf6, 0xb3, 0x16, 0xad, 0xf4, 0x6a, 0x11, 0xdc, 0xca, 0x8a, 0x37, 0x4a, 0x9e, 0xd1, 0x89, 0x98, 0xb7, 0x12, 0xdc, 0x6b, 0xd5, 0xb9, 0xa6, 0xf5, 0xac, 0xea, 0xfd, 0xa6, 0x61, 0xbc, 0xab, 0x1a, 0x41, 0x10, 0x42, 0x50, 0x6a, 0x53, 0x33, 0xf0, 0xa3, 0x9a, 0x30, 0x9d, 0x21, 0x94, 0x44, 0x87, 0x81, 0x17, 0xc0, 0xa9, 0xc7, 0xcf, 0x75, 0xa0, 0xa3, 0xfa, 0xf3, 0x48, 0xa4, 0x50, 0xad, 0x45, 0x5d, 0x53, 0xa1, 0x1c, 0x67, 0xe7, 0x75, 0x61, 0xef, 0xd1, 0xc6, 0x60, 0x65, 0x33, 0xec, 0x0a, 0xcf, 0x34, 0x0e, 0x60, 0xbe, 0xcf, 0x12, 0xb4, 0xf3, 0xe9, 0xc7, 0xff, 0xbd, 0xcb, 0xe0, 0x3b, 0x0e, 0xcf, 0x4b, 0xc9, 0x09, 0x48, 0xa1, 0xf9, 0xb3, 0x94, 0x92, 0x22, 0xf3, 0x04, 0x8a, 0xca, 0x3a, 0xf2, 0xcc, 0x61, 0xc9, 0xeb, 0x4d, 0x5a, 0x82, 0x14, 0x4c, 0x67, 0xb5, 0x89, 0xc9, 0xda, 0x88, 0x38, 0xee, 0x43, 0x51, 0x32, 0x3d, 0x9a, 0x71, 0xf9, 0xca, 0x01, 0xa6, 0x72, 0x68, 0x1d, 0xa3, 0x6a, 0xc6, 0xad, 0x54, 0xce, 0x6f, 0x34, 0x4a, 0x23, 0xa4, 0xc5, 0x98, 0x12, 0x1d, 0x04, 0x08, 0x05, 0xd6, 0x78, 0x82, 0x86, 0xb3, 0x12, 0xad, 0xe2, 0x1a, 0x01, 0x08, 0xe9, 0x25, 0x01, 0x45, 0xb9, 0xa0, 0x2c, 0x33, 0xb4, 0x52, 0x28, 0x1d, 0x03, 0x9a, 0xca, 0x82, 0x0c, 0x02, 0x12, 0x95, 0xd4, 0xce, 0x45, 0xf5, 0x7b, 0x67, 0x99, 0xb8, 0x28, 0x21, 0x71, 0xf5, 0xfc, 0xb3, 0x75, 0x5d, 0x9d, 0xfc, 0xb2, 0xc3, 0xbc, 0x54, 0x68, 0xed, 0xab, 0xd7, 0xaa, 0x84, 0xaa, 0x14, 0x14, 0xb9, 0x41, 0x4a, 0x2f, 0x39, 0xbb, 0xb0, 0x29, 0x85, 0xa9, 0x48, 0x0f, 0x0e, 0xc8, 0x72, 0xe3, 0xc7, 0x2a, 0xb4, 0xa2, 0x34, 0x15, 0xc2, 0x0a, 0x92, 0x48, 0x53, 0x54, 0x05, 0xd7, 0x76, 0x8f, 0x6e, 0x58, 0xa8, 0xe4, 0xf8, 0xb1, 0xb6, 0x36, 0x26, 0x8c, 0x34, 0x49, 0x2f, 0xe2, 0x0f, 0xff, 0xe0, 0x33, 0xfc, 0xd4, 0x3f, 0xf9, 0xb9, 0x9b, 0xae, 0x42, 0x3e, 0xf8, 0xc1, 0x7f, 0x43, 0x92, 0xc4, 0x9c, 0xbb, 0xe5, 0x16, 0xe2, 0xa4, 0xe7, 0x4d, 0x59, 0xaa, 0x25, 0xa2, 0x73, 0xa3, 0xc7, 0x7f, 0xfd, 0xd8, 0xc7, 0x10, 0xce, 0x62, 0x4d, 0x89, 0x16, 0x82, 0x20, 0x8e, 0x7d, 0xef, 0x29, 0x5b, 0x90, 0x07, 0x02, 0x42, 0x0d, 0x58, 0x54, 0xdd, 0xaf, 0xb3, 0xce, 0xa0, 0x10, 0xad, 0x91, 0xc5, 0x32, 0x48, 0x1f, 0x93, 0x16, 0xce, 0x9f, 0x0b, 0x97, 0xb6, 0xb8, 0x9b, 0x88, 0xe7, 0xc5, 0xfc, 0x8a, 0x77, 0xa6, 0x12, 0x72, 0x05, 0xe2, 0x5f, 0x89, 0xf6, 0xf5, 0xa6, 0x70, 0x33, 0x7d, 0xf4, 0x97, 0xde, 0x77, 0x1f, 0x5b, 0xe7, 0xce, 0x70, 0xed, 0xf2, 0x15, 0xbf, 0x01, 0xd6, 0x23, 0x91, 0x7e, 0xe3, 0x74, 0x37, 0xd5, 0x2a, 0x38, 0x7f, 0xfe, 0xfc, 0x09, 0x16, 0x74, 0x65, 0x6e, 0xfc, 0xc3, 0x5b, 0x04, 0xbd, 0x68, 0xc2, 0x7d, 0xf7, 0xbd, 0x9a, 0xef, 0xf9, 0xde, 0xef, 0xfe, 0xba, 0x60, 0xe9, 0xe7, 0x7b, 0x7c, 0xe1, 0xf3, 0x9f, 0xe7, 0x60, 0x7f, 0xbf, 0x1d, 0xdf, 0xec, 0x0a, 0xbd, 0xcc, 0xa6, 0x53, 0xe6, 0x8b, 0xf4, 0xeb, 0xaa, 0xa8, 0xdf, 0xf4, 0xa6, 0xbf, 0xca, 0x07, 0x7f, 0xf5, 0x5d, 0xdf, 0x90, 0x60, 0xde, 0xee, 0xbd, 0x91, 0x20, 0x8c, 0x9a, 0x7e, 0x76, 0xe7, 0x9a, 0x57, 0xe5, 0x0d, 0xbf, 0x56, 0x9a, 0xef, 0xa0, 0xb5, 0x66, 0x7d, 0xeb, 0x02, 0x61, 0x1c, 0x7b, 0xae, 0x8e, 0x94, 0xb8, 0xca, 0x74, 0xf8, 0x3d, 0x78, 0x5d, 0x01, 0xe1, 0x09, 0xca, 0xce, 0x89, 0x3a, 0x80, 0x6a, 0xa4, 0x70, 0x38, 0x57, 0xf9, 0x71, 0xae, 0x20, 0xc4, 0xd9, 0x14, 0xe7, 0xbc, 0x52, 0x99, 0x52, 0x75, 0x70, 0x69, 0x15, 0x3e, 0x13, 0x9c, 0x95, 0x28, 0xe9, 0xbd, 0xc4, 0xad, 0x81, 0xc5, 0x22, 0x25, 0xcf, 0xcb, 0x3a, 0x49, 0x08, 0x11, 0x18, 0x8c, 0xa9, 0x28, 0x8b, 0x39, 0x42, 0xc9, 0x96, 0x84, 0x27, 0x9c, 0x43, 0x20, 0x11, 0x5e, 0x3e, 0xc3, 0x73, 0x8e, 0x54, 0xbd, 0x7e, 0x85, 0x5f, 0x3b, 0x52, 0xd7, 0x7d, 0x6b, 0x24, 0xba, 0x32, 0x04, 0x2a, 0x68, 0xcd, 0xa7, 0x84, 0x56, 0xa8, 0xa0, 0x26, 0x6f, 0x0b, 0x8d, 0x50, 0xbe, 0xd2, 0x1d, 0x0c, 0x06, 0xc8, 0xe9, 0x8c, 0xd9, 0x6c, 0x86, 0x29, 0x72, 0x3c, 0x07, 0x5b, 0x9e, 0x3a, 0x29, 0xd0, 0x4d, 0xda, 0x9b, 0x82, 0xb3, 0xcb, 0x4c, 0x3f, 0x2e, 0x14, 0xd3, 0x55, 0x58, 0x3d, 0xad, 0x0f, 0x7f, 0x1a, 0x7a, 0xdd, 0xc6, 0xb3, 0x96, 0xdd, 0xee, 0x56, 0x88, 0x79, 0xcd, 0x88, 0x5b, 0x58, 0x07, 0xeb, 0xe6, 0x7d, 0x78, 0x61, 0x27, 0xd1, 0x3a, 0x7b, 0x5a, 0xbb, 0x8c, 0xc7, 0x51, 0x14, 0xd5, 0x73, 0xe8, 0xf5, 0x7f, 0x68, 0x4e, 0xd2, 0xed, 0xa7, 0x37, 0xcd, 0xf7, 0xe3, 0x2c, 0xbf, 0xe6, 0xef, 0xfa, 0x91, 0x7a, 0x56, 0xd2, 0x5b, 0x14, 0x45, 0x35, 0x1b, 0xcf, 0xe0, 0x5c, 0x70, 0xc2, 0x82, 0xb3, 0x0b, 0x69, 0x1c, 0xff, 0x7b, 0xe7, 0x1c, 0x59, 0x3e, 0x3b, 0x61, 0xca, 0xd2, 0x64, 0x6b, 0x5e, 0x24, 0x24, 0x44, 0x48, 0x8d, 0x72, 0x0e, 0xe7, 0x14, 0x65, 0xe9, 0x2b, 0x33, 0x63, 0x2b, 0xdf, 0x4f, 0x17, 0x9e, 0xb8, 0xa6, 0x54, 0x81, 0x90, 0x96, 0x22, 0xb7, 0x2c, 0x32, 0x90, 0x24, 0xf4, 0x87, 0x7d, 0xef, 0x39, 0x0b, 0x54, 0x55, 0xee, 0x8d, 0x62, 0xb4, 0x24, 0xee, 0xc5, 0x84, 0xa1, 0x6c, 0x49, 0x11, 0x83, 0xc1, 0x80, 0xa2, 0xb0, 0xe0, 0x14, 0x47, 0x87, 0x0b, 0x7a, 0xbd, 0x3e, 0x79, 0x5e, 0x91, 0x66, 0x25, 0xb2, 0xd2, 0x08, 0x22, 0xca, 0x22, 0xa3, 0xa4, 0x24, 0x08, 0x1d, 0x52, 0x04, 0x94, 0x65, 0xc6, 0x7c, 0x96, 0x12, 0x85, 0x3e, 0xa1, 0x41, 0xd4, 0xb2, 0xaf, 0x65, 0x55, 0xf7, 0x90, 0x02, 0x02, 0xad, 0xb1, 0x82, 0xda, 0x49, 0xad, 0x5e, 0x24, 0xae, 0x6a, 0x67, 0x19, 0x9d, 0x73, 0xa4, 0x53, 0xaf, 0x6d, 0x2e, 0x45, 0x80, 0x0e, 0x62, 0x0f, 0x29, 0xf5, 0x03, 0xc6, 0x63, 0x3f, 0xa7, 0x9e, 0xe3, 0x49, 0x4e, 0x47, 0x47, 0x33, 0xd2, 0x3c, 0x23, 0x08, 0x02, 0x16, 0x8b, 0x19, 0xd7, 0xae, 0x5d, 0x61, 0x3c, 0x1e, 0xb3, 0x58, 0xcc, 0x31, 0xb6, 0x62, 0x38, 0x1c, 0xf0, 0x9f, 0x7f, 0xfb, 0x77, 0xbe, 0xae, 0x80, 0xfe, 0x6d, 0xaf, 0x7d, 0x2d, 0x1f, 0xfe, 0xbd, 0x8f, 0x53, 0x98, 0x82, 0xbf, 0xf9, 0xb7, 0xfe, 0xcf, 0x9b, 0xda, 0x00, 0x2f, 0x3d, 0x76, 0x91, 0x7f, 0xfd, 0xaf, 0xdf, 0xcf, 0xc5, 0x4b, 0xcf, 0x30, 0x1a, 0xf5, 0xb1, 0x4e, 0x32, 0x9f, 0xe7, 0x14, 0x85, 0xad, 0x95, 0xc7, 0x4a, 0x7a, 0xe1, 0x8d, 0xc3, 0xb8, 0xff, 0xef, 0x07, 0xde, 0xcf, 0x85, 0x0b, 0xb7, 0xb0, 0x98, 0x1e, 0x51, 0x5a, 0x47, 0x18, 0xc4, 0x4c, 0xe7, 0x33, 0xa2, 0x50, 0x62, 0xaa, 0x82, 0xc2, 0x78, 0x97, 0x30, 0x61, 0x0d, 0xc2, 0x54, 0xe0, 0xac, 0xe7, 0x2c, 0x34, 0x24, 0x87, 0x46, 0x5d, 0xcb, 0x2d, 0x25, 0x78, 0x9d, 0x73, 0xbe, 0x22, 0x3d, 0x05, 0x4a, 0xbb, 0x5e, 0x45, 0xff, 0x7c, 0x8f, 0x4f, 0x7e, 0xf6, 0x12, 0x49, 0x28, 0xc0, 0xa9, 0xeb, 0x04, 0xf4, 0x9a, 0x14, 0x25, 0xc4, 0x4d, 0xa3, 0x2b, 0x6f, 0x7a, 0xd3, 0x5f, 0xe5, 0x67, 0xff, 0xd9, 0x3f, 0xba, 0xee, 0x06, 0x63, 0x6f, 0xf0, 0xbd, 0x4f, 0xd6, 0xd6, 0x28, 0x2d, 0x68, 0x55, 0x27, 0xe5, 0xb6, 0xc2, 0x3d, 0x47, 0xcb, 0xe2, 0xb4, 0xe3, 0x95, 0xaf, 0x78, 0xfd, 0x8a, 0x95, 0xe9, 0x7f, 0x8b, 0xe3, 0x3f, 0xff, 0xf6, 0xef, 0xf0, 0xfe, 0x0f, 0xbc, 0x9f, 0x7b, 0xee, 0xbe, 0x85, 0xd7, 0xbf, 0xfe, 0x7b, 0xf8, 0x37, 0xbf, 0xfc, 0xcb, 0x2b, 0xff, 0xfe, 0x77, 0xfe, 0xf6, 0xdf, 0xfe, 0xba, 0x02, 0xfa, 0x2b, 0xee, 0xbf, 0x1f, 0xf8, 0xfa, 0xad, 0x5f, 0x1f, 0x78, 0xe0, 0x01, 0x40, 0xb0, 0xb9, 0x75, 0x0b, 0x7f, 0xec, 0x81, 0xef, 0x21, 0x49, 0xc2, 0x95, 0x8d, 0xde, 0x39, 0xc7, 0x6c, 0x7a, 0x78, 0x53, 0xaf, 0x7d, 0xc7, 0x0b, 0x5e, 0xce, 0xe6, 0xd6, 0x79, 0x94, 0xaa, 0xbd, 0xd3, 0x9d, 0xf3, 0x15, 0xa9, 0xa8, 0xfb, 0x48, 0x4e, 0xb4, 0xc2, 0x32, 0xce, 0x7a, 0x68, 0xb7, 0x19, 0xa1, 0x52, 0x4a, 0x92, 0x65, 0x8b, 0xda, 0x1b, 0xc3, 0xdb, 0xa7, 0x22, 0xfc, 0x73, 0x26, 0xe5, 0x52, 0xb5, 0x2e, 0x8a, 0x12, 0xb4, 0x8a, 0x30, 0xc6, 0x9b, 0x3b, 0xa9, 0x28, 0x04, 0x25, 0x11, 0x2a, 0x20, 0x88, 0x62, 0x82, 0x28, 0x22, 0xab, 0x34, 0x56, 0xf8, 0x91, 0x2f, 0x69, 0x52, 0x44, 0x6d, 0xdd, 0x2a, 0xb4, 0x22, 0x54, 0x1a, 0x27, 0x54, 0x9d, 0x70, 0xda, 0x5a, 0xa9, 0xb3, 0xd6, 0xd8, 0xa8, 0x27, 0x3f, 0xa4, 0x68, 0x1c, 0x13, 0x0d, 0xd1, 0x68, 0x48, 0x65, 0x0c, 0x73, 0x57, 0x21, 0xac, 0x25, 0x54, 0x31, 0xc3, 0x41, 0xc2, 0x70, 0xcd, 0x43, 0xee, 0x4f, 0xe7, 0x29, 0x22, 0x49, 0x30, 0xc3, 0x11, 0x22, 0xef, 0x11, 0xcc, 0x07, 0xb8, 0xfd, 0x7d, 0x0e, 0xaf, 0x56, 0xe4, 0xba, 0x60, 0xa3, 0xd2, 0x27, 0xac, 0xa1, 0xbb, 0xd7, 0xba, 0x3b, 0xf1, 0xd5, 0x45, 0x12, 0xba, 0x63, 0xda, 0xdd, 0x62, 0xf4, 0xb8, 0x30, 0x59, 0x51, 0x14, 0xa7, 0x06, 0xf4, 0x65, 0x4c, 0xb5, 0x6d, 0xfb, 0xab, 0x49, 0xaa, 0x9a, 0x62, 0x35, 0x08, 0x02, 0x06, 0x83, 0x11, 0x8b, 0xc5, 0xa2, 0x9d, 0x38, 0x90, 0xc7, 0xa6, 0xc0, 0xf2, 0xaa, 0x20, 0x16, 0x60, 0x05, 0x04, 0xb1, 0x8f, 0xb5, 0x5a, 0x29, 0x75, 0xe2, 0x4d, 0xb6, 0x72, 0xa2, 0x75, 0xb5, 0xdc, 0x95, 0x84, 0xed, 0xbe, 0xe1, 0xaa, 0x9c, 0x2d, 0x15, 0x6a, 0x94, 0x22, 0x92, 0xc1, 0xca, 0x9b, 0xcf, 0xb2, 0x0c, 0xeb, 0x2a, 0xd2, 0xac, 0x60, 0x36, 0x37, 0x27, 0x2e, 0xd8, 0x1d, 0xb7, 0xbf, 0x60, 0x25, 0xbb, 0x69, 0xfc, 0xc4, 0xbb, 0xfe, 0xe8, 0xdd, 0x99, 0xbb, 0x13, 0x90, 0xa8, 0x73, 0x48, 0x19, 0x10, 0x44, 0x81, 0x5f, 0x08, 0x94, 0xe4, 0xc5, 0x82, 0x22, 0x2f, 0x70, 0xae, 0xa4, 0xb2, 0x9a, 0x67, 0xae, 0xee, 0x60, 0x9e, 0xbe, 0xe6, 0xfb, 0x3a, 0x0e, 0x94, 0x0a, 0x88, 0xe2, 0x1e, 0x1b, 0x9b, 0x67, 0x29, 0xad, 0xd7, 0x2c, 0xb7, 0xae, 0xc0, 0xba, 0x92, 0x20, 0x10, 0xf4, 0xfa, 0x11, 0x3a, 0x00, 0x63, 0xfc, 0x05, 0x5c, 0xdf, 0x3a, 0x43, 0x9e, 0x19, 0x0e, 0x0f, 0x66, 0x14, 0x66, 0x86, 0x8e, 0x22, 0x8c, 0xd3, 0x2c, 0x16, 0x19, 0xae, 0x32, 0xf4, 0xa2, 0x90, 0x38, 0xee, 0x61, 0x9d, 0x62, 0x34, 0x0a, 0x18, 0x8e, 0x12, 0x8a, 0x7c, 0x41, 0x92, 0x44, 0x38, 0x9b, 0xd6, 0x0e, 0x5e, 0x3e, 0xdb, 0x6b, 0xf4, 0xc2, 0xb5, 0xd6, 0x44, 0x61, 0x88, 0x53, 0x66, 0xa5, 0x3a, 0xa4, 0x66, 0x98, 0x7a, 0x84, 0x4d, 0x32, 0x18, 0x26, 0x1e, 0xc2, 0x31, 0x7e, 0xec, 0xad, 0x2c, 0x0b, 0x4c, 0x55, 0x60, 0xad, 0xc4, 0x59, 0x98, 0x55, 0x19, 0x38, 0x3f, 0x38, 0x18, 0xc7, 0x21, 0x3a, 0x88, 0xc8, 0xf3, 0x94, 0x5e, 0xaf, 0xc7, 0xd6, 0xd9, 0x6d, 0xbe, 0xf4, 0xf9, 0x4f, 0x30, 0x1c, 0x8c, 0x18, 0x8f, 0x47, 0xfc, 0xea, 0x07, 0x7f, 0x95, 0xd7, 0x7d, 0xd7, 0x77, 0x7e, 0x5d, 0x41, 0xfd, 0xcf, 0xff, 0xf9, 0x37, 0xf0, 0xae, 0x5f, 0x79, 0xcf, 0x0d, 0xbf, 0xc6, 0x43, 0x0f, 0x3e, 0xc8, 0xbb, 0xdf, 0xfd, 0x2f, 0x79, 0xe4, 0xe2, 0xd3, 0x75, 0x42, 0xa3, 0x30, 0x26, 0x67, 0x67, 0x67, 0xbf, 0x35, 0x3b, 0x10, 0x42, 0x90, 0xa5, 0x0b, 0xd6, 0x47, 0x77, 0xdc, 0x38, 0x8c, 0x5b, 0x19, 0x94, 0x82, 0x30, 0xd0, 0x50, 0x56, 0x28, 0xe1, 0x28, 0x8b, 0x0c, 0x2d, 0x24, 0x79, 0x3e, 0x27, 0x35, 0x15, 0x1a, 0x87, 0xc0, 0xa0, 0x95, 0x44, 0xe2, 0x9d, 0xf2, 0xac, 0x69, 0xd6, 0x6a, 0x97, 0xec, 0xb2, 0x3c, 0x94, 0x12, 0x27, 0x88, 0x98, 0xdd, 0xa0, 0x68, 0xac, 0xbd, 0x7e, 0x3c, 0x7e, 0x76, 0xb4, 0x1d, 0x21, 0x1d, 0x76, 0x89, 0xa4, 0x9e, 0x3c, 0xa4, 0x20, 0x08, 0x15, 0x17, 0x2f, 0x3d, 0x7d, 0x53, 0xf3, 0xe8, 0xde, 0x9a, 0xf4, 0x02, 0x5f, 0x7d, 0xec, 0xf2, 0x09, 0xa8, 0xcf, 0x4f, 0x2d, 0xdc, 0x78, 0x32, 0xd2, 0xf4, 0x5a, 0xab, 0xaa, 0xa2, 0x2a, 0x0d, 0x65, 0x71, 0x63, 0xaf, 0xf1, 0xc5, 0x2f, 0x7c, 0x81, 0xc7, 0x2f, 0x7d, 0x9a, 0xff, 0xd6, 0xc7, 0xd5, 0x5d, 0xbf, 0xee, 0xb6, 0x6f, 0xb9, 0x8d, 0xef, 0x7f, 0xe3, 0x1b, 0x79, 0xe6, 0x99, 0xab, 0x5c, 0xdd, 0x7d, 0x9a, 0x97, 0xbd, 0xe4, 0x15, 0xf4, 0x7a, 0x83, 0xaf, 0xbb, 0x9f, 0xde, 0xb4, 0xa5, 0xbe, 0xde, 0xe3, 0xdf, 0xfe, 0xdb, 0x7f, 0xc7, 0x3b, 0x7e, 0xfe, 0xed, 0x7c, 0xe5, 0xe1, 0x27, 0x10, 0xd2, 0x12, 0x84, 0x62, 0x69, 0x53, 0x8d, 0x17, 0x94, 0xaa, 0xcc, 0x8d, 0x2b, 0x13, 0xbe, 0xec, 0x25, 0xaf, 0xe0, 0xe1, 0x27, 0xca, 0x56, 0x07, 0xbe, 0x25, 0x7b, 0x89, 0x0e, 0xc2, 0xe4, 0xc0, 0x59, 0x87, 0xa9, 0x8d, 0xac, 0x9c, 0x35, 0x98, 0xca, 0xd6, 0xbe, 0xe8, 0xa2, 0xf5, 0x26, 0x6f, 0xf6, 0x64, 0x21, 0x15, 0xae, 0xf2, 0x85, 0x53, 0xa0, 0x14, 0x58, 0x4b, 0x20, 0x95, 0x1f, 0xc1, 0xb5, 0x1e, 0xe9, 0x3d, 0x38, 0x9c, 0x32, 0x1e, 0xaf, 0x31, 0x1e, 0x07, 0x9e, 0xc7, 0x22, 0xb5, 0x37, 0xb4, 0x52, 0x15, 0x61, 0x18, 0x11, 0x06, 0xca, 0x1b, 0xa7, 0x38, 0x83, 0xa4, 0xd6, 0x51, 0x17, 0x82, 0xb2, 0x34, 0x98, 0xca, 0xf8, 0x7f, 0xab, 0x51, 0x25, 0x9f, 0x5c, 0x80, 0x0a, 0x3c, 0xf4, 0x6e, 0x2d, 0xe4, 0x31, 0xf4, 0xfb, 0x23, 0xd6, 0xd6, 0xd7, 0x19, 0x6d, 0xac, 0x11, 0x25, 0x31, 0x95, 0xb5, 0xa4, 0x79, 0xc6, 0x41, 0x59, 0x10, 0x14, 0x16, 0xe1, 0x0a, 0x44, 0x50, 0x32, 0xd0, 0x21, 0x1b, 0x9b, 0x03, 0x46, 0x51, 0x82, 0x99, 0x2e, 0xfc, 0x5e, 0xac, 0x1a, 0xa9, 0x72, 0x51, 0x3f, 0xff, 0xcb, 0x2f, 0x2f, 0xee, 0x72, 0xb2, 0xea, 0xee, 0x6a, 0x5c, 0x34, 0xba, 0x24, 0xfe, 0x77, 0xe4, 0x92, 0xdc, 0xd6, 0x28, 0x75, 0xd6, 0xa3, 0x65, 0xc7, 0x7b, 0xe9, 0xed, 0x58, 0x9b, 0x99, 0xad, 0x90, 0xe0, 0x1a, 0xdd, 0x97, 0x26, 0x68, 0x37, 0xad, 0x82, 0x6e, 0xcb, 0xb9, 0xab, 0xf5, 0xd2, 0x68, 0xa3, 0x34, 0xea, 0x98, 0x4a, 0x29, 0x74, 0x28, 0x21, 0x8a, 0xc3, 0x13, 0x8d, 0xfd, 0x26, 0xc3, 0x68, 0x61, 0xf4, 0xa2, 0xc4, 0xb2, 0xea, 0xed, 0x6d, 0x4d, 0x48, 0xba, 0xc8, 0xa9, 0xaa, 0x1c, 0xad, 0x55, 0x0d, 0x0b, 0x94, 0x6d, 0xe5, 0x1d, 0x46, 0x23, 0xa6, 0x47, 0x73, 0xc6, 0xe3, 0x75, 0xa2, 0xb0, 0xcf, 0x93, 0x5f, 0xbb, 0xc2, 0x6c, 0x9a, 0x22, 0x45, 0xc8, 0xd1, 0xd1, 0x8c, 0xaf, 0x7e, 0xed, 0x11, 0x40, 0xd6, 0xfd, 0x49, 0x81, 0xad, 0x2f, 0xa2, 0x52, 0x81, 0x27, 0xb0, 0xf5, 0xfb, 0x1c, 0x1e, 0xee, 0xf3, 0x9a, 0xd7, 0xbc, 0x0a, 0xa1, 0x20, 0x08, 0x04, 0x59, 0x91, 0xb2, 0x7f, 0x74, 0x80, 0x34, 0x92, 0x72, 0x66, 0x6b, 0x1b, 0x47, 0x5b, 0xcb, 0xa8, 0x3a, 0xce, 0x9e, 0xbd, 0x95, 0xcd, 0x5e, 0x8f, 0x6b, 0xd7, 0xae, 0x91, 0x2f, 0x2a, 0x16, 0xb5, 0x9e, 0xf5, 0x99, 0x33, 0xde, 0x08, 0x24, 0xcb, 0x32, 0x86, 0xc3, 0x21, 0x5a, 0x67, 0xc0, 0x51, 0xbb, 0x59, 0x1b, 0xea, 0x84, 0xa2, 0x02, 0xa1, 0x22, 0xc2, 0xa8, 0x8f, 0x2c, 0x7b, 0x14, 0xb3, 0xc0, 0xcf, 0x39, 0xa2, 0xd9, 0x1a, 0xf4, 0x49, 0xf7, 0x2e, 0x63, 0xad, 0x61, 0x1c, 0x45, 0x8c, 0x8a, 0x3d, 0x44, 0x21, 0xd9, 0x39, 0xdc, 0x67, 0x6d, 0x63, 0x93, 0xf4, 0xa8, 0xe2, 0xea, 0xde, 0x3e, 0xf3, 0xc5, 0x82, 0x57, 0xbc, 0xf2, 0x95, 0xe4, 0xd5, 0x80, 0x34, 0x4d, 0x49, 0xfa, 0x43, 0x6e, 0xbf, 0xe5, 0x2c, 0x59, 0x96, 0xf3, 0xd5, 0xaf, 0x7e, 0x95, 0xc5, 0x3c, 0x23, 0x09, 0xc6, 0x14, 0xc5, 0xa5, 0x95, 0xd6, 0x44, 0xaf, 0xd7, 0x6b, 0xab, 0xc5, 0x28, 0x8e, 0x49, 0x8b, 0xa3, 0x15, 0xfd, 0x7a, 0x21, 0x05, 0x41, 0xb2, 0x6c, 0x49, 0x54, 0xf9, 0x21, 0x52, 0x84, 0x8c, 0x45, 0x0f, 0x53, 0x04, 0x98, 0xac, 0xe0, 0xec, 0xd0, 0xa0, 0xcc, 0x23, 0xfc, 0xf7, 0xdf, 0x72, 0x81, 0xc3, 0x4f, 0xef, 0x70, 0x74, 0xf9, 0x19, 0xee, 0x7e, 0xd1, 0xcb, 0xf9, 0xc3, 0x87, 0xe1, 0x3d, 0xef, 0x7a, 0xfb, 0xf3, 0x36, 0x69, 0x39, 0xed, 0xb8, 0xf3, 0xae, 0xbb, 0xb9, 0xfc, 0xc8, 0x23, 0xfc, 0xca, 0xfb, 0xde, 0xc7, 0xf7, 0xbf, 0xf1, 0x8d, 0x2b, 0x95, 0xf7, 0x53, 0x4f, 0x3e, 0xc5, 0x53, 0x4f, 0x3d, 0xc5, 0x23, 0x8f, 0x7a, 0x65, 0xac, 0x97, 0xbf, 0xec, 0x45, 0xfc, 0xa9, 0xef, 0xfd, 0x53, 0x5c, 0x7a, 0xec, 0x22, 0x6f, 0x79, 0xeb, 0x5b, 0x8f, 0x05, 0xca, 0x90, 0x3b, 0x6e, 0x7f, 0x11, 0xf9, 0xf4, 0x49, 0xa2, 0x28, 0xa2, 0x28, 0xe6, 0x2c, 0x16, 0x0b, 0x42, 0x73, 0xf3, 0xfd, 0xe8, 0xf9, 0x7c, 0x46, 0x59, 0x66, 0xad, 0x40, 0xd1, 0x30, 0xf6, 0x0a, 0x51, 0x58, 0x4b, 0x69, 0x0d, 0x65, 0x0d, 0x5b, 0xb5, 0x68, 0x49, 0x5a, 0x11, 0x18, 0xbd, 0x52, 0x21, 0x1f, 0x9f, 0xcc, 0x0e, 0x82, 0xaa, 0xdb, 0x2e, 0x5f, 0x66, 0xd7, 0x75, 0x36, 0x6d, 0x84, 0xa6, 0x74, 0xf6, 0xe6, 0xde, 0xb0, 0xd5, 0xa0, 0xcb, 0xeb, 0x76, 0xe0, 0x1d, 0x0e, 0xe9, 0xf9, 0x3b, 0x37, 0x4d, 0xe2, 0xfa, 0x6b, 0x7f, 0xe3, 0xad, 0xfc, 0xd8, 0xdf, 0xfc, 0xab, 0x38, 0x27, 0xea, 0xca, 0xcc, 0xb7, 0x36, 0x8c, 0xb1, 0xdc, 0xcc, 0xbb, 0xae, 0x50, 0x5e, 0x55, 0x2c, 0x08, 0xd0, 0x81, 0x62, 0x18, 0xdd, 0xd8, 0xfd, 0x5a, 0xcc, 0x66, 0x5c, 0xdd, 0xdd, 0xe1, 0xef, 0xfc, 0xad, 0x37, 0x11, 0xf6, 0xb7, 0x4f, 0xfd, 0x9d, 0x24, 0xda, 0xfc, 0x86, 0x57, 0xf0, 0x57, 0x9e, 0x7e, 0x02, 0x80, 0x37, 0x7e, 0xff, 0x0f, 0x01, 0x7c, 0x43, 0xa1, 0xf1, 0x6f, 0xe4, 0xb1, 0xbd, 0x7d, 0x86, 0x9f, 0xfa, 0xc9, 0x9f, 0xe6, 0x0b, 0x9f, 0xff, 0x3c, 0xef, 0x79, 0xd7, 0xdb, 0xd9, 0xd8, 0xfc, 0xa1, 0x36, 0x20, 0xf8, 0xde, 0xb1, 0x43, 0xde, 0xc4, 0x9d, 0xfb, 0xfe, 0x37, 0xbe, 0x91, 0x7f, 0xf6, 0xf6, 0xf7, 0xd0, 0x0f, 0x9b, 0x2a, 0xd3, 0xe0, 0x5c, 0x85, 0x09, 0x1d, 0xa2, 0x31, 0x6b, 0x74, 0x9e, 0xa0, 0x2b, 0x85, 0xf4, 0x55, 0xb3, 0x82, 0x8a, 0x0c, 0x6b, 0x2b, 0x94, 0x48, 0x38, 0x7f, 0x4b, 0xc8, 0xc7, 0x3f, 0xfa, 0x34, 0x71, 0x38, 0x66, 0x3c, 0x19, 0x50, 0xe6, 0x29, 0xa9, 0x9a, 0x82, 0xb0, 0xa8, 0x58, 0x22, 0x82, 0x84, 0xca, 0x08, 0xac, 0xb3, 0xa8, 0x20, 0x40, 0x48, 0xc1, 0x1a, 0x1a, 0x59, 0x4e, 0x99, 0x24, 0x9b, 0x44, 0x44, 0x88, 0x5b, 0xb7, 0x71, 0xd9, 0x1e, 0xd6, 0x5a, 0x0e, 0xf7, 0xf6, 0x51, 0x83, 0x41, 0xdd, 0x6e, 0x2c, 0x11, 0xb6, 0x40, 0x55, 0x05, 0x4a, 0xd7, 0x44, 0x61, 0x69, 0x08, 0x54, 0x54, 0x6b, 0x9e, 0x3b, 0x74, 0xa0, 0x6b, 0x2e, 0x4b, 0x0a, 0x42, 0xa0, 0x43, 0xb0, 0x0c, 0xd1, 0x41, 0xe4, 0xad, 0x65, 0xc3, 0x1e, 0x49, 0x98, 0x70, 0x70, 0x70, 0x40, 0x79, 0xb8, 0x20, 0x54, 0x0a, 0x1d, 0x68, 0x2e, 0x5f, 0x7e, 0x9a, 0xf9, 0xe1, 0x01, 0xdb, 0xdb, 0xdb, 0xa4, 0x53, 0x5b, 0xfb, 0x10, 0x08, 0x86, 0xc3, 0x3e, 0xb6, 0x5c, 0xf8, 0xb6, 0x57, 0x5d, 0xf5, 0x3b, 0xaa, 0xba, 0x1d, 0xe1, 0x90, 0x42, 0x50, 0x55, 0x5e, 0xbd, 0xb1, 0x19, 0x4f, 0x2b, 0x8a, 0x82, 0xaa, 0x8e, 0x6f, 0x1e, 0x92, 0x5f, 0xda, 0x8c, 0x77, 0x9d, 0x39, 0xbb, 0x28, 0x73, 0x97, 0x68, 0x77, 0x7c, 0xbc, 0x4d, 0xe8, 0x10, 0x9c, 0x47, 0xe2, 0xac, 0x11, 0xcc, 0xb3, 0x0c, 0x29, 0x34, 0xc3, 0x41, 0x82, 0x92, 0x11, 0x52, 0xe8, 0xa5, 0x19, 0x94, 0xc9, 0x50, 0xda, 0x92, 0x15, 0xfb, 0x54, 0x56, 0x12, 0x25, 0x5e, 0xd7, 0x7d, 0xba, 0x5f, 0x71, 0xf6, 0xec, 0x79, 0xb4, 0x53, 0x08, 0xa3, 0xd0, 0x0d, 0xac, 0xd1, 0x9c, 0xa8, 0x2c, 0xcb, 0x53, 0x19, 0xeb, 0xc7, 0x61, 0xbb, 0x66, 0xfe, 0xcd, 0x67, 0x6f, 0x7e, 0x23, 0xcd, 0xf3, 0xb4, 0x36, 0x68, 0x07, 0x1d, 0xc0, 0x5a, 0xd8, 0x27, 0x8a, 0x03, 0x92, 0x24, 0x06, 0x27, 0x31, 0x26, 0xa7, 0x2c, 0x0b, 0xa2, 0x50, 0x13, 0xc7, 0x21, 0x46, 0x96, 0x5e, 0x9f, 0xdc, 0x79, 0x97, 0x1f, 0xe1, 0xea, 0x0d, 0xd7, 0xf8, 0x51, 0xa1, 0x32, 0xcb, 0x39, 0x7b, 0xf6, 0x16, 0xee, 0xbd, 0xf7, 0xc5, 0x08, 0xe1, 0x98, 0xce, 0x8f, 0xd8, 0xd9, 0xbd, 0x86, 0x31, 0x8e, 0xf5, 0xf5, 0x09, 0xe5, 0xd4, 0xbf, 0xe7, 0xae, 0x43, 0x4e, 0x14, 0x45, 0xa4, 0x8b, 0x9c, 0xfd, 0xbd, 0x43, 0xf6, 0x76, 0xf6, 0xc9, 0x6a, 0xe2, 0xde, 0xee, 0xee, 0x2e, 0x42, 0x08, 0x2f, 0x2b, 0x58, 0x8b, 0xd9, 0xf7, 0xe2, 0x61, 0x4d, 0x86, 0xf0, 0xcc, 0xc1, 0xaa, 0x5e, 0xdd, 0xa6, 0x82, 0xc2, 0x39, 0x64, 0x55, 0x90, 0xe5, 0x0b, 0x64, 0x2d, 0x9e, 0xdf, 0xc0, 0x32, 0x59, 0x96, 0x52, 0x64, 0x19, 0xba, 0xcc, 0x6a, 0xe5, 0x30, 0xc7, 0xe5, 0x2b, 0x57, 0x38, 0x77, 0xe1, 0x56, 0x2e, 0xf4, 0xfa, 0x64, 0x95, 0x1f, 0xbb, 0x08, 0xa3, 0x98, 0x28, 0x8a, 0x30, 0xc6, 0xf1, 0xd5, 0x27, 0x2e, 0x71, 0x78, 0x30, 0x25, 0xcb, 0xbc, 0x28, 0x40, 0x9a, 0xa6, 0xf4, 0x86, 0x23, 0x9f, 0x61, 0xf5, 0x6d, 0x6b, 0x06, 0xd3, 0xdc, 0xfc, 0x30, 0x0c, 0x59, 0x5b, 0xdf, 0x68, 0x55, 0xc9, 0xba, 0xb6, 0xb2, 0x4d, 0x80, 0x3f, 0x77, 0xce, 0x9b, 0x08, 0x38, 0x67, 0x30, 0xb9, 0xa2, 0x52, 0x86, 0x40, 0x1b, 0xd6, 0x86, 0x70, 0xe7, 0x1d, 0x67, 0x79, 0xf3, 0x9b, 0xbf, 0x9b, 0x5f, 0x7a, 0xd7, 0x07, 0xf8, 0x1f, 0xdf, 0xf0, 0x1a, 0x7e, 0xef, 0xbf, 0xfc, 0x01, 0x9f, 0xf8, 0xf4, 0x25, 0x7e, 0xe9, 0x17, 0xbf, 0xbe, 0x5e, 0xdf, 0x1d, 0x77, 0x7e, 0x33, 0x9f, 0xfc, 0xc4, 0x6f, 0x71, 0xfe, 0xfc, 0x79, 0x7e, 0xe3, 0x3f, 0xfe, 0x3a, 0x5f, 0xf8, 0xfc, 0x57, 0x4e, 0xef, 0x6b, 0x7f, 0xf2, 0xa1, 0x53, 0xe7, 0xb3, 0x45, 0xad, 0x64, 0x17, 0x86, 0x01, 0xd4, 0x56, 0xa5, 0x8d, 0xa4, 0xa1, 0xbb, 0x49, 0x82, 0x99, 0x56, 0x12, 0x5b, 0x56, 0x38, 0x29, 0xfc, 0x88, 0x19, 0xa0, 0x10, 0x2c, 0xd2, 0xac, 0xbd, 0x5e, 0x9e, 0x50, 0xd4, 0xfa, 0xd5, 0x22, 0xec, 0x49, 0x08, 0xec, 0xb4, 0x7e, 0xda, 0x69, 0x64, 0xcf, 0xe3, 0x2c, 0xd6, 0x1b, 0x3d, 0xde, 0xf1, 0x8e, 0x9f, 0xe7, 0x7d, 0xbf, 0xf2, 0x5e, 0x3e, 0xf7, 0xa9, 0xcf, 0x34, 0x50, 0x53, 0xdb, 0x61, 0x5e, 0x7e, 0x17, 0x34, 0x61, 0xf7, 0x91, 0x87, 0x1f, 0xbe, 0xa9, 0x80, 0x7e, 0xe7, 0x5d, 0x77, 0xf3, 0xbf, 0xfe, 0xe8, 0x8f, 0xf3, 0xb6, 0x9f, 0xfe, 0x29, 0x8c, 0xb3, 0x28, 0xa5, 0x09, 0xa2, 0x90, 0x48, 0xa9, 0xd6, 0x8f, 0xe1, 0x46, 0x0e, 0x29, 0x03, 0xcf, 0x59, 0x31, 0x7e, 0x22, 0x24, 0x5d, 0xdc, 0x98, 0xb9, 0xc9, 0xa3, 0x5f, 0x7d, 0x94, 0xb2, 0xb0, 0x7c, 0xf6, 0x0b, 0x5f, 0xc5, 0x98, 0xc7, 0xeb, 0xcd, 0xcf, 0x9d, 0x8a, 0x04, 0x9d, 0xd6, 0x5b, 0xbf, 0x19, 0xa4, 0x62, 0x36, 0x9d, 0xf2, 0xe8, 0x63, 0x4f, 0x23, 0x95, 0x68, 0xc7, 0x37, 0x7f, 0xf2, 0x27, 0xfe, 0x2f, 0xfe, 0xd3, 0x6f, 0xff, 0x5a, 0xfb, 0x3b, 0xff, 0xf7, 0xbf, 0xf8, 0x17, 0xdf, 0x90, 0xb9, 0xf7, 0xee, 0xac, 0xfb, 0xb3, 0xf5, 0xf3, 0xb7, 0xce, 0x6c, 0x3f, 0x2b, 0xc4, 0xff, 0xd2, 0xfb, 0xee, 0x6b, 0xb5, 0xfe, 0xff, 0xbb, 0x3f, 0xfe, 0xe6, 0x55, 0x73, 0x28, 0x79, 0xe3, 0xfa, 0xf9, 0xb3, 0xe9, 0xb4, 0xad, 0xe6, 0x5a, 0x02, 0x9a, 0x31, 0xe8, 0x40, 0x2d, 0x97, 0x1e, 0xb2, 0x36, 0x76, 0x12, 0x34, 0xe0, 0x4d, 0xd4, 0xf7, 0xe3, 0x66, 0x81, 0x92, 0x18, 0x53, 0x32, 0x1a, 0x8d, 0xda, 0xff, 0x1b, 0xc7, 0x31, 0x91, 0x0e, 0x6a, 0x66, 0x7b, 0x85, 0x40, 0x11, 0x47, 0x09, 0x51, 0x14, 0x7b, 0xb8, 0xbe, 0xb4, 0xad, 0x9f, 0x77, 0x63, 0x38, 0xe2, 0xab, 0x7b, 0x8d, 0x94, 0x96, 0xf5, 0xb5, 0x4d, 0x84, 0x74, 0xed, 0xb3, 0x69, 0x5d, 0xe1, 0x11, 0x32, 0x63, 0xeb, 0x71, 0x5f, 0xd1, 0x0a, 0xe7, 0x1c, 0xdf, 0x3f, 0x5a, 0x1d, 0x94, 0x20, 0xac, 0x8d, 0x5c, 0xca, 0xd6, 0xa9, 0x2c, 0x4d, 0xd3, 0x56, 0x56, 0x7c, 0x3e, 0x9f, 0x33, 0x1a, 0x8d, 0x38, 0x3a, 0x3a, 0xe2, 0xa9, 0xa7, 0x9e, 0x22, 0x08, 0x02, 0x46, 0xa3, 0x11, 0x79, 0x9e, 0xb3, 0x58, 0x2c, 0x58, 0x1b, 0x25, 0x27, 0xd0, 0xb7, 0x6e, 0x15, 0xdc, 0xf4, 0xad, 0x1b, 0x7e, 0x40, 0xbf, 0xdf, 0x6f, 0x9d, 0xcd, 0xac, 0xb5, 0xe4, 0x99, 0x1f, 0xb7, 0x2b, 0x8a, 0x8c, 0x3c, 0x4f, 0x4f, 0x10, 0xe0, 0x8e, 0x93, 0xbe, 0x4f, 0xec, 0x23, 0x56, 0xb5, 0xd7, 0x26, 0x0c, 0x6b, 0x1d, 0xf7, 0xa2, 0x6c, 0x05, 0x6d, 0xf2, 0x3c, 0x6f, 0xe7, 0xd0, 0xbb, 0xed, 0xe9, 0x26, 0x21, 0xe8, 0xb6, 0xa2, 0x9b, 0xf3, 0xea, 0xe9, 0xf4, 0xf0, 0x04, 0xad, 0xbe, 0xf1, 0xc5, 0x6d, 0x7c, 0xb4, 0xbb, 0x22, 0x29, 0x4b, 0x88, 0xc1, 0x91, 0x65, 0x69, 0x1b, 0x7c, 0xa2, 0x28, 0xa0, 0xdf, 0x4f, 0x50, 0x5a, 0xd0, 0xeb, 0xf5, 0x48, 0x92, 0x84, 0xa2, 0xa0, 0x16, 0x40, 0x99, 0x30, 0x9f, 0x67, 0xe8, 0x40, 0x60, 0x5d, 0x86, 0x71, 0x12, 0x1d, 0x28, 0xf2, 0xd2, 0x2e, 0xc5, 0x57, 0x90, 0x48, 0xa5, 0x7c, 0x4f, 0xbc, 0x36, 0xea, 0x28, 0x9d, 0xc5, 0x95, 0x8e, 0xcb, 0x4f, 0x5e, 0x46, 0x47, 0x9a, 0x24, 0x49, 0x88, 0xc2, 0x1e, 0xd3, 0xa3, 0x19, 0x65, 0xe6, 0x58, 0x2c, 0xb2, 0xf6, 0x06, 0x36, 0x3e, 0xd6, 0x20, 0x51, 0x2a, 0x60, 0x34, 0x9a, 0x90, 0xce, 0x33, 0x86, 0xf5, 0x22, 0x6c, 0x16, 0x73, 0x37, 0x93, 0x72, 0x26, 0xf4, 0x8c, 0x5d, 0x01, 0x82, 0x00, 0x29, 0x9c, 0xd7, 0x4f, 0xae, 0x1c, 0xa5, 0x81, 0x50, 0xd6, 0xe3, 0x09, 0xf8, 0x31, 0x0b, 0x25, 0x43, 0x4c, 0x15, 0x32, 0x9b, 0x4d, 0xc9, 0x8a, 0x82, 0xc8, 0x64, 0xac, 0x6f, 0x6e, 0x70, 0x7e, 0x63, 0x8b, 0x83, 0xa3, 0x43, 0xd6, 0x36, 0xb7, 0x30, 0xd6, 0x32, 0x9c, 0x4c, 0x48, 0x7a, 0x3d, 0x8e, 0x66, 0x73, 0x2f, 0xac, 0x3f, 0x9f, 0x73, 0x74, 0x74, 0x44, 0x9a, 0xcd, 0xa9, 0x4a, 0x8b, 0x94, 0x02, 0x63, 0x0b, 0x0e, 0x0f, 0x4b, 0xfa, 0xfd, 0x10, 0x63, 0x20, 0xcb, 0x72, 0x84, 0x28, 0x5a, 0x41, 0x01, 0x21, 0x04, 0x69, 0x76, 0xd8, 0xf6, 0x4d, 0xa2, 0xc8, 0x0b, 0xc7, 0x04, 0x41, 0x4c, 0x10, 0xd7, 0xac, 0xcb, 0xe9, 0x77, 0x62, 0xd3, 0xab, 0x38, 0x31, 0x45, 0xeb, 0x14, 0x21, 0x77, 0xa9, 0x8a, 0x6b, 0x38, 0x57, 0x92, 0x2e, 0x4a, 0x5e, 0xf5, 0x40, 0xc1, 0xb5, 0x7d, 0x78, 0xc1, 0x9d, 0x0b, 0xd6, 0x47, 0xb0, 0xc8, 0x61, 0x34, 0xe8, 0x3d, 0xab, 0x29, 0xc6, 0x73, 0x1d, 0xdf, 0xfe, 0xc0, 0xab, 0x78, 0xc5, 0xfd, 0x3f, 0xc2, 0x3f, 0xf9, 0xe9, 0x9f, 0xac, 0x37, 0x9f, 0x17, 0x3d, 0xeb, 0xc6, 0x74, 0xe5, 0xca, 0xd5, 0xba, 0x2a, 0x97, 0x84, 0x3a, 0x40, 0x07, 0x01, 0x67, 0xb6, 0xb6, 0x88, 0xe2, 0x90, 0x71, 0xb2, 0xd5, 0xf2, 0x26, 0x94, 0x52, 0x20, 0x6f, 0x8e, 0x14, 0x17, 0x47, 0x8a, 0xbc, 0xf0, 0xd5, 0x44, 0x37, 0x1b, 0x6e, 0x5c, 0x89, 0x9a, 0x87, 0xe1, 0x38, 0xb9, 0x45, 0x9e, 0x62, 0xb9, 0xdb, 0xfd, 0xb9, 0xb5, 0x9a, 0x3f, 0x46, 0x66, 0x69, 0x85, 0x23, 0xb4, 0xc4, 0x09, 0x77, 0xc3, 0xc1, 0xe0, 0xa5, 0xf7, 0xdd, 0xc7, 0xff, 0x71, 0xc7, 0x8f, 0xf3, 0x03, 0x7f, 0xe6, 0x07, 0x69, 0xdd, 0xae, 0x9a, 0x60, 0x2e, 0x0c, 0xdd, 0xe1, 0x38, 0x21, 0x7c, 0x20, 0xfc, 0x7a, 0xb9, 0x0f, 0x9f, 0xfd, 0xd4, 0x43, 0x94, 0xa5, 0xa1, 0xac, 0x4a, 0xac, 0xcd, 0x6b, 0x45, 0xc5, 0xe7, 0x7f, 0x1c, 0xec, 0xef, 0xb3, 0xbf, 0x77, 0x08, 0xc2, 0xb4, 0x6d, 0xa1, 0xea, 0x06, 0xc4, 0x69, 0x66, 0xd3, 0x29, 0x0f, 0x7d, 0xe4, 0x63, 0xb5, 0x2a, 0x96, 0x7b, 0x8e, 0xa0, 0xf7, 0x25, 0xb6, 0xb6, 0xce, 0xf0, 0xeb, 0xbf, 0xf6, 0x6b, 0x7c, 0xf2, 0x13, 0xbf, 0xc5, 0x27, 0x3e, 0x7d, 0xa9, 0x85, 0xa4, 0x6f, 0x34, 0xa0, 0x7f, 0xf6, 0x33, 0x9f, 0x41, 0x2a, 0x41, 0x1c, 0x07, 0xfc, 0xec, 0x3b, 0x7e, 0x86, 0xb5, 0xb5, 0x31, 0xc3, 0x41, 0x78, 0xa2, 0x15, 0xf0, 0x8d, 0x08, 0xe8, 0x4f, 0x3d, 0xf5, 0xd4, 0x75, 0x93, 0x8e, 0xd9, 0x74, 0xca, 0x3f, 0xfc, 0x7b, 0x7f, 0xa3, 0xfd, 0x2c, 0x3f, 0xfa, 0xbf, 0xfd, 0xe8, 0xb3, 0xb2, 0xfa, 0x07, 0xc3, 0x21, 0xaf, 0x7f, 0xfd, 0xf7, 0x90, 0x1f, 0x4b, 0x36, 0x85, 0x10, 0x37, 0x1c, 0xcc, 0xff, 0xe1, 0xdf, 0xfb, 0x1b, 0x6c, 0xdf, 0xf6, 0xba, 0x13, 0x7b, 0xbc, 0xb5, 0xb6, 0x13, 0xd0, 0x9b, 0xbc, 0x52, 0xb6, 0xeb, 0x3e, 0x4d, 0x53, 0xaf, 0xe7, 0xae, 0xbc, 0x04, 0xf6, 0x5d, 0x77, 0xdd, 0xc5, 0xe1, 0xe1, 0x2e, 0x61, 0xa4, 0xe8, 0x27, 0x11, 0x95, 0x28, 0x48, 0xd3, 0x8c, 0xb2, 0xb0, 0x2b, 0xb2, 0xdd, 0x45, 0xe1, 0xc7, 0x6d, 0x4d, 0x96, 0xb2, 0xbb, 0xbb, 0xcb, 0xb9, 0x73, 0xdb, 0x24, 0x49, 0xcc, 0xde, 0xde, 0x1e, 0x47, 0x47, 0x33, 0x8c, 0x29, 0xdb, 0x4a, 0xd9, 0xd8, 0xb2, 0xb6, 0x89, 0x36, 0x08, 0x69, 0x50, 0x56, 0x22, 0x6b, 0x52, 0x5c, 0x33, 0x5a, 0x79, 0x3d, 0x0e, 0x4b, 0x96, 0x65, 0xc4, 0x71, 0xdc, 0x7e, 0x35, 0x23, 0x5c, 0x0d, 0x97, 0x4b, 0x4a, 0xc9, 0xf6, 0xf6, 0x76, 0x9b, 0x54, 0x24, 0x49, 0x42, 0x14, 0x45, 0x0c, 0x87, 0x43, 0x6f, 0xbc, 0x74, 0x8a, 0xc7, 0x48, 0xd7, 0xfe, 0xdb, 0x17, 0x63, 0x4b, 0x7e, 0x59, 0x03, 0xb1, 0x37, 0xc5, 0x55, 0xb7, 0x1d, 0xdc, 0x24, 0x4a, 0xdd, 0xfd, 0xa2, 0x09, 0xb8, 0x4d, 0xbb, 0xfa, 0x38, 0x49, 0x8e, 0x5a, 0x46, 0xdc, 0x39, 0x47, 0x1c, 0xd7, 0xea, 0x7f, 0x9d, 0x59, 0xf8, 0xa6, 0xc0, 0x6e, 0x0c, 0xca, 0xb4, 0x8e, 0x50, 0xda, 0xbb, 0xbc, 0xf9, 0xcf, 0x68, 0x71, 0x76, 0xe9, 0x33, 0xa1, 0xb5, 0x44, 0x37, 0x06, 0x29, 0xa7, 0x55, 0x1c, 0x71, 0x1c, 0x9f, 0x70, 0xf3, 0xe9, 0x1a, 0xa8, 0x74, 0x85, 0x39, 0x84, 0x74, 0xad, 0x07, 0x73, 0x18, 0x6a, 0xb4, 0x96, 0x4d, 0x57, 0x18, 0x63, 0x53, 0x8a, 0x72, 0x81, 0x90, 0x15, 0x4a, 0x83, 0xc3, 0xbb, 0x8c, 0x0d, 0x92, 0xa1, 0x57, 0xe3, 0x51, 0x9a, 0xaa, 0xb4, 0x14, 0x95, 0xc1, 0x1a, 0xef, 0xeb, 0xad, 0x83, 0x10, 0x57, 0x55, 0xec, 0xed, 0xec, 0xf1, 0x91, 0xdf, 0x7b, 0x88, 0x20, 0x0c, 0xb9, 0xf3, 0xae, 0xdb, 0x89, 0x7a, 0x11, 0x07, 0x7b, 0x53, 0xb2, 0x45, 0xc9, 0x78, 0x30, 0x6c, 0xb5, 0xd5, 0x9b, 0x0b, 0xdc, 0x28, 0x0a, 0x05, 0x41, 0xc0, 0x6d, 0xb7, 0x5f, 0xe0, 0xca, 0x15, 0x9f, 0x45, 0x0e, 0x06, 0x03, 0xaf, 0xbf, 0xbe, 0x58, 0x90, 0x17, 0x29, 0xa3, 0xf1, 0x80, 0xc5, 0xbc, 0xf0, 0x89, 0x84, 0x94, 0x48, 0x2d, 0xfc, 0x6c, 0x79, 0x2d, 0x24, 0x80, 0x75, 0x88, 0xa6, 0xc7, 0x2d, 0xfc, 0xcd, 0x51, 0x81, 0xa2, 0xcc, 0x73, 0x10, 0xf5, 0xec, 0xba, 0x52, 0x5c, 0xd9, 0x39, 0x20, 0x9a, 0x67, 0x0c, 0xc6, 0x23, 0xd6, 0x37, 0x36, 0x70, 0x52, 0x92, 0x17, 0x5e, 0x5c, 0x22, 0x88, 0xe2, 0xd6, 0xdf, 0x77, 0x63, 0x63, 0x8d, 0x20, 0x50, 0x4c, 0xa7, 0x53, 0x40, 0x92, 0x24, 0x09, 0x07, 0x07, 0x25, 0xb8, 0xa0, 0x66, 0x79, 0x7b, 0xcd, 0xe3, 0x06, 0x3d, 0x70, 0xce, 0x71, 0x66, 0x6b, 0xfb, 0xc4, 0xf4, 0x40, 0xb6, 0xa8, 0x28, 0x8a, 0xd4, 0x67, 0xb6, 0xe6, 0x90, 0xac, 0x38, 0x24, 0x8c, 0xa7, 0xc4, 0x71, 0x81, 0x56, 0x96, 0x74, 0x9a, 0xf3, 0xf4, 0xd7, 0xe0, 0x3f, 0xfd, 0xc7, 0x07, 0x19, 0x25, 0x15, 0x77, 0xdd, 0xbd, 0xce, 0x47, 0x3f, 0xfc, 0x1f, 0x78, 0xc9, 0x2d, 0x70, 0xcb, 0x0b, 0x5e, 0xcd, 0x5f, 0xfc, 0xcb, 0x7f, 0x99, 0x07, 0x1e, 0x78, 0x80, 0x27, 0x9f, 0xf8, 0x0c, 0x5f, 0xdc, 0xce, 0x17, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x3f, 0xfa, 0xbf, 0xff, 0xb3, 0x1b, 0x26, 0x03, 0x7d, 0xea, 0x53, 0x7e, 0x26, 0xfd, 0xa7, 0x7e, 0xf2, 0xa7, 0x9f, 0xd7, 0x66, 0xf2, 0xb6, 0x7f, 0xfa, 0x63, 0x0c, 0x7a, 0x31, 0xc3, 0x41, 0x9f, 0xcd, 0xf5, 0x0d, 0x74, 0x10, 0x10, 0xf7, 0xfb, 0xd8, 0xaa, 0xe4, 0x60, 0x7e, 0x44, 0x18, 0x7a, 0x0e, 0x42, 0xaf, 0x37, 0xa0, 0xac, 0xec, 0x4d, 0x6d, 0xa4, 0x9e, 0xa7, 0x60, 0x56, 0xaa, 0x8f, 0x26, 0x88, 0x1f, 0x27, 0xb5, 0x75, 0xf9, 0x18, 0xdd, 0x40, 0x7f, 0x5a, 0x9f, 0xf9, 0xb9, 0x10, 0x03, 0x71, 0x93, 0x1b, 0xff, 0x43, 0x0f, 0x3e, 0xc8, 0x6f, 0xfc, 0xc7, 0x5f, 0xc7, 0x59, 0x5d, 0x07, 0x74, 0xe3, 0x5f, 0x4d, 0x74, 0xe6, 0xd5, 0xb0, 0x08, 0x40, 0x2b, 0xf8, 0xfd, 0x87, 0x3e, 0x76, 0x53, 0xe7, 0x69, 0x48, 0x88, 0x1f, 0xfd, 0xfd, 0xdf, 0xab, 0xc9, 0xa1, 0x8a, 0xed, 0x33, 0x67, 0x39, 0x73, 0xe6, 0x0c, 0xd6, 0x99, 0x1b, 0x0e, 0x56, 0x71, 0x3d, 0x17, 0x6d, 0x5d, 0x51, 0x43, 0x8d, 0x37, 0x16, 0x58, 0x9f, 0xef, 0xf1, 0xe0, 0x87, 0xff, 0x3d, 0x6f, 0xfb, 0x99, 0xb7, 0x7d, 0x43, 0x60, 0xec, 0x47, 0x1e, 0x7e, 0x18, 0x21, 0xa8, 0xa1, 0x5c, 0x4e, 0xb4, 0x7f, 0xa0, 0x61, 0xf0, 0x7f, 0xfd, 0x47, 0xb7, 0x0d, 0x75, 0xfc, 0xf8, 0x77, 0xbf, 0xfc, 0xcb, 0x6d, 0x30, 0x07, 0x78, 0xdb, 0xcf, 0xbc, 0x8d, 0x6f, 0x7d, 0xf5, 0xab, 0x9e, 0xf5, 0xf9, 0x7b, 0xe6, 0x99, 0xab, 0xac, 0x9f, 0x3f, 0xb3, 0xb2, 0x07, 0xdb, 0x1b, 0x14, 0x10, 0x68, 0x92, 0x8b, 0xe3, 0x6e, 0x61, 0xde, 0xcf, 0xbb, 0xec, 0x40, 0xee, 0xae, 0xae, 0xd0, 0xfd, 0x18, 0xb3, 0x73, 0x8e, 0x74, 0x31, 0x45, 0x08, 0x47, 0x91, 0xa5, 0x5c, 0xdb, 0x79, 0x0a, 0x5c, 0xc5, 0x7c, 0x3e, 0x27, 0x2f, 0x04, 0xa6, 0xcc, 0x09, 0xfb, 0x41, 0xc7, 0xad, 0xcc, 0x8f, 0x86, 0x36, 0x93, 0x51, 0x3a, 0x90, 0xec, 0x5e, 0x39, 0x64, 0x6f, 0x7f, 0x9f, 0x34, 0xcf, 0x88, 0x7b, 0x09, 0xd6, 0x09, 0x46, 0xe3, 0x71, 0x1b, 0xa0, 0xa4, 0xa2, 0x0e, 0x4e, 0x25, 0xc6, 0x56, 0x18, 0x93, 0x53, 0x99, 0x82, 0xa2, 0x36, 0x4a, 0x89, 0xa2, 0xe8, 0xa4, 0x03, 0x66, 0xa7, 0x47, 0xdd, 0x54, 0xc0, 0x5d, 0x69, 0x72, 0xad, 0x35, 0x59, 0x96, 0xb1, 0x58, 0x2c, 0xd8, 0xdb, 0xdb, 0x6b, 0x8d, 0xa5, 0xe2, 0x38, 0x6e, 0x85, 0x5a, 0x96, 0x64, 0xed, 0x25, 0x32, 0xdd, 0x3c, 0xff, 0x0d, 0x5f, 0xac, 0xa9, 0x80, 0xbb, 0x10, 0x7a, 0xa3, 0x9c, 0xda, 0xf0, 0xbc, 0x94, 0xd4, 0x6d, 0xc1, 0xd5, 0x04, 0xec, 0xee, 0xfe, 0xd3, 0x70, 0x83, 0xba, 0x5e, 0x1f, 0xc7, 0x0d, 0xc8, 0x9a, 0x73, 0x34, 0xc8, 0x78, 0x03, 0xdf, 0x37, 0xff, 0xd6, 0xfc, 0x6e, 0x93, 0x50, 0xe8, 0x40, 0x62, 0x6d, 0x55, 0x2b, 0xb1, 0xe6, 0xad, 0x53, 0xa4, 0x2f, 0x02, 0x15, 0x7a, 0x30, 0xec, 0xad, 0x50, 0xef, 0xbb, 0x17, 0xf0, 0x38, 0x51, 0xae, 0xf9, 0x50, 0x79, 0x9e, 0x53, 0x96, 0x8e, 0x28, 0x88, 0x3a, 0x66, 0x26, 0xa6, 0xb5, 0x27, 0x9d, 0xcf, 0x2b, 0x66, 0xb3, 0x29, 0x41, 0xe4, 0x85, 0x5e, 0x72, 0xa9, 0x31, 0xc6, 0xb2, 0x75, 0x66, 0xcc, 0x64, 0x32, 0xc2, 0x0f, 0xc7, 0x5b, 0xa4, 0x5e, 0x6f, 0x87, 0xe9, 0x8f, 0xe6, 0x0b, 0x0e, 0x0f, 0xa6, 0x2c, 0xaa, 0x9c, 0xb2, 0x6c, 0x0c, 0xe0, 0x2d, 0x81, 0x52, 0xa4, 0xb3, 0x39, 0x33, 0x66, 0xe0, 0x1c, 0xbd, 0x41, 0x42, 0x9e, 0xe7, 0x4c, 0x26, 0x13, 0x4c, 0x5d, 0x65, 0xf8, 0x8b, 0xe9, 0xbf, 0xb2, 0xac, 0x68, 0x15, 0xe6, 0xe2, 0xc8, 0xf7, 0xa5, 0xab, 0xaa, 0xea, 0x30, 0x26, 0x97, 0xd0, 0xb9, 0xb0, 0xbe, 0x0c, 0xb2, 0x75, 0x61, 0x64, 0xeb, 0x8a, 0x08, 0x07, 0xc6, 0x39, 0x0a, 0x97, 0xa1, 0x94, 0x40, 0x49, 0x50, 0x38, 0x9c, 0x52, 0x2b, 0xb0, 0xb7, 0xea, 0x0f, 0x19, 0x8d, 0x46, 0x2c, 0xb2, 0x94, 0xab, 0xd7, 0x76, 0x78, 0xf8, 0x43, 0x1f, 0x62, 0x7d, 0x63, 0x83, 0xb3, 0x67, 0xcf, 0x72, 0xeb, 0xed, 0xb7, 0xb5, 0x10, 0x90, 0x27, 0x36, 0x58, 0xc2, 0x50, 0xb3, 0xb1, 0xb1, 0xd6, 0xf6, 0x5d, 0xce, 0x9c, 0x3d, 0x8b, 0xb5, 0x96, 0xab, 0x57, 0xaf, 0xb2, 0xb3, 0xb7, 0xc7, 0xd1, 0xcc, 0xeb, 0x57, 0xcf, 0xe7, 0x73, 0xd2, 0x34, 0x65, 0x5c, 0xbb, 0xb9, 0x35, 0xbc, 0x85, 0xe3, 0x99, 0x9e, 0x08, 0x7e, 0x1f, 0x23, 0x33, 0x84, 0x0b, 0x20, 0x1b, 0x30, 0xd4, 0x67, 0x31, 0xb3, 0x09, 0x87, 0xd7, 0xf6, 0xf9, 0xf0, 0xd5, 0x90, 0x1f, 0x7c, 0xfd, 0x77, 0x70, 0xf5, 0xe2, 0xe7, 0x79, 0xe8, 0x77, 0x3f, 0xc5, 0x6d, 0xb7, 0xc0, 0xe3, 0x5f, 0xfe, 0x18, 0x6f, 0xf9, 0xf1, 0xbf, 0x0b, 0xc0, 0x27, 0x3e, 0x7d, 0x89, 0x3f, 0xf7, 0xe7, 0xfe, 0x2c, 0x7f, 0xed, 0x47, 0x7e, 0x84, 0x3f, 0xf9, 0xdd, 0xdf, 0xbd, 0x52, 0x55, 0x74, 0xab, 0x8c, 0x0f, 0x7d, 0xf0, 0x43, 0x2b, 0x95, 0xc4, 0xd5, 0xdd, 0xa7, 0x9f, 0x57, 0x12, 0xd0, 0x54, 0x06, 0x8f, 0x5c, 0xdc, 0xe5, 0xde, 0xbb, 0x6e, 0x23, 0x0a, 0x23, 0x0c, 0x8e, 0x28, 0xe9, 0x31, 0x59, 0xdf, 0x20, 0x0c, 0x63, 0xf6, 0x9e, 0xa9, 0x6a, 0x9d, 0xe6, 0xcb, 0xcc, 0x66, 0x33, 0x74, 0x18, 0x71, 0xef, 0x7d, 0x93, 0x1b, 0xde, 0x48, 0xc3, 0x20, 0x40, 0xc9, 0xa0, 0x6d, 0xbd, 0x34, 0x04, 0x1e, 0x15, 0x86, 0x27, 0x8c, 0x11, 0x9a, 0x99, 0x72, 0x01, 0x27, 0x08, 0x2b, 0x27, 0x20, 0x76, 0xf1, 0xec, 0x01, 0xbd, 0xc8, 0xf3, 0x1b, 0x1e, 0xff, 0xfa, 0xc2, 0xe7, 0x3f, 0xcf, 0x4f, 0xfe, 0xc4, 0xdf, 0xf7, 0x42, 0x2f, 0x76, 0x54, 0x93, 0xe2, 0xc4, 0xf1, 0x89, 0xb0, 0x26, 0xa7, 0xbc, 0xe9, 0xa4, 0xe1, 0xd2, 0x63, 0x17, 0x79, 0xd3, 0x5f, 0xfc, 0x61, 0x36, 0x37, 0xcf, 0xf2, 0xf2, 0xfb, 0xff, 0x08, 0xeb, 0xeb, 0x5b, 0xf4, 0xfb, 0x7d, 0x92, 0xa4, 0x5f, 0x07, 0x8b, 0xa7, 0x6f, 0xf8, 0x35, 0xef, 0x7f, 0xc5, 0xb7, 0x90, 0x66, 0x53, 0x9e, 0x7a, 0xea, 0x09, 0xf6, 0xf6, 0x77, 0x90, 0x52, 0x3d, 0xe7, 0x67, 0x05, 0xb8, 0xe3, 0x8e, 0x3b, 0xf8, 0xe0, 0xaf, 0xbe, 0x0b, 0xa5, 0x24, 0x49, 0x12, 0x78, 0xd2, 0x93, 0xb1, 0x35, 0x02, 0xd8, 0xfd, 0xec, 0x9e, 0xa0, 0xd8, 0x04, 0xbe, 0x7b, 0xee, 0xbe, 0x85, 0xef, 0xfd, 0xde, 0x1f, 0x6c, 0x83, 0xfb, 0x2f, 0xff, 0x9b, 0xf7, 0xdd, 0x30, 0xb2, 0xf4, 0x9e, 0x7f, 0xfd, 0x5e, 0x82, 0x50, 0xc2, 0x0a, 0xca, 0x42, 0xcd, 0x29, 0x80, 0x57, 0xbf, 0xe6, 0x5b, 0x6b, 0x96, 0xfa, 0xcd, 0x1f, 0xcf, 0xd5, 0x0a, 0xb8, 0x72, 0xe5, 0x2a, 0xef, 0x7e, 0xef, 0x7b, 0x8f, 0xa5, 0x81, 0x8e, 0x77, 0xfc, 0xfc, 0xdb, 0xaf, 0x9b, 0x18, 0x3f, 0xf4, 0xe0, 0x83, 0x2c, 0x4c, 0xc2, 0xa8, 0x2c, 0x51, 0x1d, 0x72, 0x95, 0xbb, 0x41, 0x21, 0xa3, 0x9f, 0xfb, 0xd9, 0x9f, 0x23, 0xec, 0x6f, 0xb7, 0x81, 0xa6, 0x3b, 0x5e, 0x15, 0xaa, 0x10, 0xac, 0x6b, 0x45, 0xc0, 0x9c, 0xf1, 0xf6, 0xce, 0xa2, 0x96, 0x1e, 0x4d, 0x92, 0x04, 0xb0, 0x3c, 0xf9, 0xc4, 0x57, 0xf9, 0xe8, 0x47, 0x3f, 0x4a, 0x1c, 0x69, 0xd2, 0x74, 0x4a, 0xd2, 0x0b, 0x89, 0x43, 0x4d, 0x90, 0x84, 0xed, 0x9a, 0x12, 0x35, 0x99, 0x2d, 0x57, 0x1e, 0x82, 0xcf, 0xb2, 0xb4, 0x3d, 0x5f, 0x9a, 0xa6, 0x35, 0x6f, 0x29, 0x60, 0x7b, 0xfb, 0x5c, 0x3d, 0xcb, 0x5e, 0x12, 0xc7, 0xa1, 0x27, 0x87, 0xda, 0x8a, 0xaa, 0x2a, 0x48, 0xb3, 0x19, 0x8b, 0xc5, 0x8c, 0x45, 0x3a, 0xa3, 0x2c, 0x0b, 0xec, 0xb3, 0x58, 0x19, 0x3a, 0xe7, 0xea, 0xd7, 0xd4, 0x5e, 0x4d, 0x73, 0xb1, 0x68, 0x55, 0xd5, 0x9a, 0xe7, 0x38, 0xab, 0x7d, 0xcd, 0xb5, 0xd6, 0x4c, 0x26, 0x13, 0x46, 0xa3, 0x51, 0x6d, 0x53, 0x1a, 0xb1, 0xbe, 0xbe, 0x8e, 0x68, 0xdd, 0xce, 0x96, 0x8c, 0xf6, 0x6e, 0xf2, 0xdf, 0xd5, 0x59, 0x39, 0x2e, 0x51, 0xde, 0xb8, 0x19, 0x52, 0x27, 0x42, 0xb4, 0x44, 0x43, 0xaf, 0xf2, 0x28, 0x85, 0xa0, 0xac, 0x8a, 0x5a, 0x33, 0xdf, 0x6b, 0x5f, 0x00, 0x18, 0x6b, 0xa8, 0x8c, 0x9f, 0x02, 0x2b, 0x6b, 0x81, 0x1c, 0x6b, 0x2d, 0xf3, 0xf9, 0x1c, 0xad, 0x35, 0xe3, 0xd1, 0x1a, 0xfd, 0x7e, 0x7f, 0x05, 0x2d, 0xf0, 0x55, 0x7a, 0x89, 0xa8, 0xb5, 0x2b, 0xac, 0x5d, 0x12, 0xc6, 0xa3, 0x30, 0x5e, 0x91, 0xa0, 0x5d, 0xb1, 0x4f, 0x3d, 0x2e, 0xec, 0xd2, 0x54, 0x97, 0x4d, 0xff, 0x25, 0x8a, 0xa2, 0x16, 0xfa, 0xad, 0xaa, 0x8a, 0x74, 0xbe, 0xa8, 0xe7, 0x24, 0xfd, 0xc3, 0xd9, 0xcc, 0xcf, 0x39, 0x0c, 0xd6, 0x18, 0x8a, 0x22, 0xf5, 0x42, 0x03, 0xa6, 0x40, 0x4a, 0xcd, 0xc6, 0xe6, 0x08, 0xad, 0xbc, 0x27, 0x71, 0x59, 0x96, 0xe4, 0x99, 0x17, 0x9e, 0xc9, 0xcb, 0x8a, 0x40, 0x7a, 0xe6, 0x71, 0x58, 0xd5, 0xcc, 0x43, 0xe5, 0x9b, 0xd9, 0x49, 0x1c, 0x22, 0x84, 0x87, 0x53, 0xaa, 0x3c, 0x63, 0xee, 0x7c, 0x4f, 0xd9, 0x56, 0x86, 0x20, 0x8c, 0x6b, 0x6b, 0x48, 0x58, 0x04, 0x99, 0x9f, 0x37, 0x94, 0x5e, 0xe1, 0x28, 0x49, 0x12, 0xa6, 0xd3, 0xab, 0x0c, 0x06, 0x3d, 0xf2, 0x3c, 0x67, 0x36, 0x9b, 0xd6, 0xc1, 0xdf, 0x33, 0xd8, 0xf7, 0xf6, 0x76, 0x58, 0x1b, 0x6e, 0xd3, 0x48, 0x78, 0x5a, 0xe7, 0xdd, 0xca, 0x8c, 0xb3, 0xad, 0xef, 0xb8, 0x88, 0x6c, 0xcb, 0x82, 0x36, 0xde, 0x68, 0x1c, 0x57, 0x4b, 0x22, 0xc6, 0x71, 0xc8, 0xc1, 0x6c, 0x4e, 0xe9, 0x60, 0x6f, 0x6f, 0x0f, 0xa4, 0x63, 0x3c, 0x59, 0xe7, 0x3b, 0x5e, 0xf7, 0x5d, 0x9c, 0x3b, 0xb7, 0x8d, 0xd6, 0x9a, 0xaf, 0x7c, 0xe5, 0x0f, 0x31, 0xa6, 0x64, 0x67, 0xe7, 0x88, 0x9d, 0x9d, 0x1d, 0xa2, 0x38, 0x64, 0x7b, 0x7b, 0x9b, 0x24, 0x8e, 0xc8, 0xf3, 0x0c, 0xca, 0x3a, 0x63, 0x73, 0x0b, 0x06, 0xa3, 0x80, 0x24, 0x19, 0x11, 0x45, 0x51, 0x3b, 0xf6, 0x27, 0xa9, 0x4e, 0xc0, 0x34, 0x5d, 0x18, 0x06, 0x19, 0xe3, 0x5c, 0x80, 0x22, 0xa2, 0x5c, 0x84, 0x98, 0xa8, 0x4f, 0xa0, 0x12, 0xb6, 0x37, 0xfa, 0x38, 0x9b, 0xf2, 0xcf, 0xff, 0xf9, 0xbb, 0x79, 0xe1, 0xbd, 0x6b, 0xfc, 0xfd, 0x7f, 0xf0, 0x17, 0x58, 0xdf, 0x0a, 0xf9, 0xb7, 0xbf, 0xf9, 0x5f, 0x78, 0xc7, 0x7b, 0x3e, 0x87, 0x92, 0x5e, 0xe0, 0x43, 0x00, 0xbf, 0xf0, 0xce, 0x77, 0xf2, 0x0b, 0xef, 0x7c, 0x27, 0x6f, 0xf8, 0xbe, 0x37, 0xb4, 0x73, 0xc1, 0xdd, 0xcd, 0x69, 0x6d, 0x6d, 0xd5, 0x12, 0xf5, 0xa1, 0x8f, 0x7c, 0xec, 0x79, 0x07, 0xf3, 0x4f, 0x7c, 0xfa, 0x12, 0x9b, 0xeb, 0x13, 0xce, 0x9c, 0xd9, 0x24, 0x0c, 0x35, 0xcf, 0x5c, 0xdb, 0xe1, 0x6b, 0x5f, 0xfb, 0x2a, 0x0f, 0x3f, 0xfc, 0x30, 0x45, 0x55, 0x31, 0xee, 0x8c, 0xe5, 0x0c, 0x06, 0x03, 0xa4, 0x0a, 0x28, 0xe6, 0x57, 0x6e, 0x8c, 0xf0, 0x74, 0xe5, 0x2a, 0xd6, 0x1a, 0x94, 0x54, 0x27, 0xb4, 0x0a, 0x8e, 0x3f, 0x88, 0x2d, 0x19, 0xa5, 0x19, 0xcf, 0xb4, 0xe2, 0x54, 0x9e, 0x48, 0x1b, 0xd8, 0x9f, 0x83, 0x09, 0x6e, 0xad, 0xe1, 0x46, 0x38, 0x71, 0xb3, 0xe9, 0x94, 0x7f, 0xfe, 0xb3, 0xff, 0x98, 0xbc, 0xb4, 0x48, 0x01, 0x91, 0x2a, 0x97, 0x41, 0xb1, 0xa9, 0xce, 0xdb, 0xd9, 0x74, 0x51, 0xcf, 0xff, 0xba, 0x63, 0x91, 0xfe, 0xf9, 0x1d, 0x3f, 0xf5, 0x93, 0x3f, 0x5e, 0x3f, 0xb7, 0x9a, 0xa4, 0x3f, 0xa4, 0x37, 0x18, 0x81, 0xd0, 0x54, 0x56, 0x78, 0xcf, 0xee, 0xa8, 0x7f, 0x43, 0xaf, 0xf7, 0xb9, 0x2f, 0x7e, 0x96, 0xc9, 0x78, 0x13, 0x63, 0x0c, 0xf3, 0xf9, 0x9c, 0x83, 0x83, 0x94, 0xb5, 0x49, 0xb4, 0xf2, 0xd9, 0x7e, 0xe9, 0x17, 0xdf, 0xc5, 0x0f, 0xff, 0xa5, 0x37, 0x73, 0xed, 0xda, 0x55, 0xde, 0xf4, 0x17, 0xdf, 0x7c, 0x0c, 0x2a, 0xf6, 0x22, 0x49, 0x51, 0xa4, 0x48, 0x12, 0xed, 0xd5, 0xba, 0x8a, 0xfc, 0x24, 0x37, 0xc7, 0x40, 0x9a, 0x5a, 0x8c, 0x71, 0x3c, 0x72, 0xf1, 0x69, 0x1e, 0xfc, 0xf0, 0xbf, 0xa7, 0x16, 0xa6, 0xe4, 0xfd, 0x1f, 0x78, 0x3f, 0x3f, 0xf0, 0x83, 0x6f, 0x64, 0x7b, 0xfb, 0x0c, 0x97, 0x1e, 0xbb, 0x48, 0xaf, 0x3f, 0x5c, 0x49, 0x2e, 0xdf, 0xf2, 0xe3, 0x7f, 0x97, 0x87, 0x3e, 0xf2, 0xb1, 0xd6, 0xe8, 0xe5, 0xa1, 0x07, 0x1f, 0x44, 0x48, 0x08, 0x42, 0x2f, 0x01, 0xd4, 0xb4, 0x0a, 0x94, 0x92, 0x7c, 0xcf, 0x77, 0x7f, 0xdf, 0x37, 0x6c, 0x0e, 0xfe, 0xf1, 0xc7, 0x1f, 0x7f, 0xd6, 0xbe, 0xf8, 0xdb, 0xfe, 0xe9, 0x8f, 0x79, 0xae, 0x87, 0x0e, 0x18, 0x0c, 0x27, 0xf5, 0xf5, 0x3a, 0xe4, 0xa1, 0x8f, 0x7c, 0xec, 0xd4, 0xbe, 0xfb, 0x43, 0x0f, 0x3e, 0xc8, 0x3f, 0xf8, 0x47, 0x3f, 0xc1, 0xf9, 0xdb, 0xee, 0x66, 0x30, 0x1c, 0x33, 0x1a, 0xaf, 0xdf, 0x34, 0x67, 0xe3, 0x75, 0xdf, 0xf5, 0x9d, 0xbc, 0xe7, 0x5d, 0x6f, 0xa7, 0xec, 0xbf, 0xa0, 0xed, 0xd7, 0xb6, 0xc1, 0x42, 0x72, 0xdd, 0x80, 0xee, 0x9c, 0x03, 0x6d, 0x08, 0x02, 0x0f, 0x63, 0x57, 0x59, 0xc6, 0xbc, 0xf2, 0xc8, 0x91, 0xdf, 0x7f, 0x0b, 0xca, 0xf9, 0x8c, 0xaa, 0xf2, 0x45, 0x5c, 0xa3, 0x76, 0x26, 0x85, 0x0f, 0xd6, 0x69, 0x9a, 0x7a, 0xf5, 0x3c, 0x61, 0x79, 0xe4, 0xe2, 0x45, 0x0e, 0xa7, 0x53, 0x2e, 0x5f, 0xbe, 0x4c, 0x18, 0x86, 0x24, 0x49, 0xe2, 0x5d, 0xd5, 0x0a, 0x5f, 0x30, 0x69, 0x2d, 0xeb, 0xc0, 0x5e, 0x52, 0x99, 0xa2, 0x26, 0x56, 0x57, 0x24, 0xb1, 0x44, 0x3a, 0x89, 0xa2, 0x23, 0x1d, 0x2e, 0x5c, 0x4b, 0x5c, 0x6b, 0x2a, 0xed, 0xaa, 0xaa, 0x5a, 0x9e, 0x51, 0x13, 0x20, 0x9b, 0x84, 0xc4, 0x2b, 0xaa, 0x25, 0x2d, 0xda, 0xdc, 0xc4, 0xb2, 0xc9, 0x64, 0x42, 0x36, 0x3f, 0x58, 0x2a, 0x77, 0x1a, 0x73, 0x6a, 0x7b, 0xed, 0xb8, 0x9b, 0x66, 0xd7, 0x7d, 0xb3, 0xf1, 0x46, 0xf0, 0xbc, 0x31, 0xbb, 0x82, 0x7e, 0x34, 0xad, 0xd3, 0xe6, 0xfd, 0x74, 0x27, 0xb9, 0xba, 0x4a, 0x74, 0x5e, 0x0b, 0x5f, 0x52, 0x96, 0x3e, 0xf9, 0x19, 0x0c, 0x06, 0xf5, 0x7c, 0xbf, 0x3a, 0x76, 0xee, 0xc6, 0xc6, 0xb9, 0xc2, 0x98, 0xb2, 0x5e, 0x4f, 0x21, 0xc3, 0xe1, 0x90, 0x5e, 0x6f, 0xd0, 0x5e, 0x1f, 0xdd, 0x9c, 0xb8, 0xb9, 0x20, 0xdd, 0x91, 0xb1, 0xf1, 0x78, 0xdc, 0x96, 0xfa, 0x3e, 0x5b, 0x5b, 0x0a, 0xce, 0xaf, 0x9a, 0xbb, 0x7b, 0x06, 0xa0, 0x75, 0x55, 0xe7, 0x8d, 0x57, 0xa8, 0x40, 0xfb, 0xca, 0xd8, 0x0a, 0x2a, 0x57, 0xe2, 0x30, 0xe4, 0xce, 0x8b, 0x0c, 0x78, 0xfc, 0xdf, 0x3b, 0xe3, 0xcc, 0xe7, 0x29, 0x69, 0x56, 0xe0, 0x8c, 0x57, 0x47, 0x73, 0x0e, 0x9c, 0x2d, 0xb0, 0x55, 0x49, 0x25, 0x01, 0x67, 0xe8, 0xf7, 0xfa, 0x7e, 0xb6, 0x58, 0x07, 0xad, 0xf1, 0xcb, 0xbd, 0x2f, 0xba, 0x1b, 0xad, 0xbd, 0xa3, 0x4f, 0x96, 0x65, 0x84, 0xb5, 0x5d, 0xaa, 0x87, 0x74, 0xfc, 0x8d, 0x6b, 0x92, 0x8f, 0x26, 0x08, 0x1a, 0x63, 0x96, 0xac, 0xf2, 0xa0, 0x0f, 0xcd, 0xdc, 0xa3, 0x31, 0x94, 0xf5, 0x42, 0x16, 0x75, 0x62, 0xd2, 0x1f, 0xf6, 0x89, 0xe3, 0xd0, 0xb3, 0x10, 0xcb, 0x02, 0x29, 0x7c, 0x0f, 0x7e, 0x38, 0xec, 0x33, 0x48, 0x62, 0x8e, 0xae, 0x4d, 0x59, 0xdb, 0xdc, 0xe2, 0x9e, 0x17, 0xbd, 0x98, 0x30, 0xf2, 0x9f, 0x75, 0x34, 0x1a, 0x91, 0x57, 0x25, 0xcf, 0x5c, 0xbb, 0x4a, 0x1c, 0xc7, 0xec, 0xef, 0xef, 0x72, 0x78, 0x78, 0xc8, 0xee, 0xde, 0x0e, 0x51, 0xe4, 0x8d, 0x2d, 0x06, 0x03, 0xef, 0x42, 0x17, 0x49, 0xdf, 0xc7, 0x91, 0x41, 0x46, 0x7f, 0x24, 0xe8, 0xf5, 0x24, 0x52, 0x1a, 0x64, 0x59, 0x8b, 0xef, 0x0f, 0xc6, 0x2b, 0x84, 0x8a, 0x55, 0x84, 0xa4, 0x64, 0xba, 0xb8, 0x0c, 0x54, 0x1e, 0x66, 0x0a, 0x4b, 0xa2, 0xe8, 0x19, 0x06, 0x6b, 0x73, 0x5e, 0xfa, 0xe2, 0x0d, 0x2e, 0x5c, 0x48, 0xb8, 0x30, 0x7c, 0x39, 0x8b, 0xf4, 0x09, 0xee, 0x79, 0x15, 0xcc, 0x0e, 0xff, 0x80, 0xb3, 0x77, 0x1e, 0x30, 0x9c, 0x18, 0x2e, 0xdc, 0x2a, 0xd8, 0xdd, 0x81, 0xc5, 0xc2, 0xd5, 0xe3, 0x19, 0x7e, 0xb3, 0x6c, 0x66, 0x75, 0xff, 0xd8, 0x6b, 0xbe, 0x93, 0x7b, 0xee, 0xbd, 0x97, 0x6f, 0x7b, 0xed, 0x6b, 0x57, 0x36, 0x9b, 0x4b, 0x8f, 0x5d, 0x6c, 0x83, 0x68, 0x77, 0xf3, 0xba, 0xf4, 0xd8, 0x45, 0xb6, 0xb6, 0xce, 0x30, 0x18, 0x0e, 0x57, 0x82, 0x79, 0xe3, 0x54, 0xb6, 0x7f, 0x70, 0xc0, 0xe1, 0xc1, 0x1e, 0x87, 0xb3, 0x39, 0x65, 0xe5, 0x17, 0xf1, 0xda, 0xda, 0x06, 0x8b, 0xa3, 0x69, 0xeb, 0xf5, 0xee, 0x25, 0x72, 0xe1, 0x33, 0x9f, 0x7b, 0x82, 0x07, 0x1e, 0x78, 0x80, 0x37, 0xfd, 0xd0, 0x0f, 0xf1, 0x3f, 0x7c, 0xcf, 0xf7, 0x9e, 0xd8, 0x24, 0x2f, 0x3d, 0x76, 0x91, 0x4f, 0x7c, 0xfc, 0x13, 0x4b, 0x48, 0xf5, 0xd1, 0x27, 0xa9, 0xf2, 0x12, 0xaa, 0xaa, 0xdd, 0x88, 0xaa, 0xda, 0x43, 0xa0, 0x85, 0xcf, 0x6b, 0xd9, 0x5d, 0x67, 0x4c, 0x2d, 0x5e, 0xe1, 0xc7, 0x02, 0xed, 0x31, 0x0f, 0x83, 0xeb, 0x7d, 0x3f, 0xad, 0x7f, 0xde, 0x70, 0x4b, 0xdc, 0x0d, 0x04, 0x73, 0x8f, 0x58, 0x3c, 0xdd, 0x06, 0x38, 0x29, 0xfc, 0x88, 0xdd, 0xb2, 0x7f, 0xee, 0x3a, 0x15, 0x9c, 0xf2, 0x32, 0x95, 0x38, 0xa4, 0x30, 0x5c, 0x7a, 0xec, 0xe2, 0xf3, 0x0e, 0x3e, 0x0f, 0x3d, 0xf8, 0x60, 0x7b, 0x9e, 0xbd, 0xbd, 0x1d, 0x1e, 0x7b, 0xec, 0x51, 0xac, 0xd5, 0x08, 0xe9, 0xc7, 0x60, 0x8a, 0xbc, 0x64, 0x3e, 0x3f, 0x68, 0x7f, 0xb7, 0x51, 0x4e, 0xfb, 0xf6, 0xef, 0x7c, 0xdd, 0xa9, 0x41, 0xe9, 0xd2, 0x63, 0x17, 0xf9, 0xe8, 0xef, 0x7f, 0x92, 0x28, 0xd2, 0x04, 0xa1, 0x24, 0x4e, 0x34, 0xe7, 0xcf, 0xaf, 0xb3, 0x98, 0x4f, 0x79, 0xcf, 0xbb, 0xde, 0xce, 0xb7, 0x7c, 0xeb, 0x9f, 0x68, 0x7b, 0xdd, 0x4f, 0x3e, 0xf1, 0x19, 0xf6, 0x0f, 0xf3, 0x53, 0xda, 0x22, 0x82, 0x38, 0x51, 0x5e, 0xee, 0x56, 0xfa, 0xc0, 0xa0, 0x94, 0x58, 0x11, 0xad, 0x52, 0x4a, 0x62, 0xa5, 0x40, 0xe6, 0x4d, 0x42, 0x25, 0xf8, 0xec, 0x17, 0xbf, 0x4a, 0xd2, 0xf3, 0xd8, 0x7e, 0xba, 0x30, 0xbc, 0xe3, 0xe7, 0xdf, 0x4e, 0x31, 0xbf, 0xd2, 0x56, 0xf1, 0x6f, 0xf8, 0xbe, 0x37, 0x70, 0xf6, 0xec, 0x19, 0x1e, 0x79, 0xf4, 0xc9, 0x36, 0xd9, 0xfc, 0xec, 0x67, 0x3e, 0xc3, 0x2b, 0xee, 0xbf, 0x9f, 0x77, 0xbf, 0xfb, 0x5f, 0xfa, 0xab, 0x29, 0x1a, 0x39, 0x4d, 0xd9, 0x32, 0xb9, 0xef, 0xba, 0xeb, 0xae, 0xe7, 0xbc, 0x9e, 0x97, 0x1e, 0xbb, 0xc8, 0x7c, 0xbe, 0x78, 0xce, 0xfe, 0xfa, 0x17, 0xbf, 0xf0, 0x05, 0x16, 0xb3, 0x8f, 0xad, 0x18, 0xbe, 0xfc, 0xca, 0xfb, 0xbc, 0xbe, 0x7a, 0x73, 0x5d, 0x82, 0x20, 0x64, 0xfb, 0xec, 0x05, 0x5e, 0xfc, 0x4d, 0xdf, 0x0c, 0x0e, 0xbe, 0xf4, 0xe5, 0x4f, 0x73, 0xe5, 0x99, 0xaf, 0xf1, 0x96, 0xb7, 0xbe, 0x95, 0x37, 0x7c, 0xdf, 0x1b, 0x78, 0xe5, 0x2b, 0xef, 0x67, 0xb2, 0xb6, 0xc6, 0xc1, 0xfe, 0x3e, 0xef, 0x7e, 0xf7, 0xbf, 0xa4, 0xaa, 0x4a, 0xe6, 0xd3, 0xc3, 0x95, 0xa4, 0xa7, 0x79, 0x9e, 0x9e, 0xed, 0xbd, 0x36, 0xef, 0xa7, 0x49, 0xc2, 0x1e, 0xfa, 0xc8, 0xc7, 0x58, 0x5b, 0xdf, 0xe6, 0x95, 0x67, 0x38, 0xa1, 0x53, 0x6e, 0x44, 0x03, 0xb3, 0xd7, 0x46, 0x51, 0xd6, 0x7f, 0x17, 0x35, 0x0a, 0x50, 0x16, 0x05, 0x42, 0xf8, 0xfd, 0x76, 0xb8, 0xb6, 0x46, 0xa0, 0x05, 0x50, 0x61, 0x6c, 0x81, 0x12, 0x8e, 0xad, 0xb5, 0x09, 0x49, 0x92, 0xa0, 0x54, 0xd0, 0x06, 0xd3, 0xc6, 0x47, 0x5c, 0x48, 0x47, 0x91, 0x56, 0x04, 0x41, 0xc0, 0xee, 0xd5, 0xab, 0x8c, 0xc7, 0x6b, 0x68, 0x1d, 0xb2, 0x58, 0x64, 0x80, 0x24, 0x4d, 0x73, 0xa2, 0x38, 0x68, 0xb5, 0xce, 0xad, 0x2d, 0x01, 0x51, 0xcf, 0x58, 0xfb, 0x02, 0x2e, 0xcf, 0x0e, 0x4e, 0x10, 0x50, 0xbb, 0xcf, 0x5f, 0x96, 0x65, 0x2d, 0x77, 0xaa, 0x09, 0xca, 0x9e, 0x9c, 0x9d, 0xb7, 0xc9, 0xfb, 0xb5, 0x6b, 0xd7, 0x90, 0x52, 0x32, 0x9d, 0x4e, 0xc9, 0xb2, 0x8c, 0xcd, 0xcd, 0xcd, 0xb6, 0xe7, 0xdc, 0xed, 0xc9, 0x1f, 0x2f, 0x02, 0x1a, 0xf8, 0xfb, 0x34, 0xc4, 0x7a, 0xc9, 0x62, 0x37, 0xb5, 0xff, 0xb9, 0x69, 0x0b, 0xbf, 0x86, 0x5f, 0xe6, 0x83, 0xb1, 0x17, 0x47, 0x6b, 0xbe, 0x2f, 0x4f, 0x57, 0x9b, 0xbb, 0xb0, 0xe4, 0x73, 0x35, 0x63, 0x6a, 0x5d, 0xf8, 0xbd, 0xe1, 0x7b, 0xf9, 0x56, 0x82, 0xac, 0xb9, 0x57, 0x65, 0x5d, 0x44, 0xd7, 0x2d, 0x95, 0xc1, 0x80, 0x24, 0xe9, 0x53, 0xe4, 0xfe, 0xde, 0xea, 0xd9, 0x6c, 0xba, 0x84, 0x60, 0xc2, 0xa0, 0xd5, 0x59, 0xef, 0x36, 0xf9, 0xad, 0x35, 0x14, 0x45, 0xde, 0xbe, 0xf1, 0xc6, 0xcb, 0x5b, 0xcb, 0xa5, 0xe8, 0x8b, 0x54, 0x20, 0x9c, 0x22, 0x49, 0x7c, 0x05, 0xaf, 0xb5, 0x66, 0x9e, 0xce, 0x18, 0x0c, 0xfa, 0x80, 0x37, 0x72, 0x01, 0xd9, 0xc9, 0x30, 0x1c, 0x65, 0x59, 0x30, 0x9f, 0xcf, 0x38, 0x38, 0x38, 0x24, 0x2f, 0x2a, 0xb4, 0x0e, 0x41, 0x36, 0x19, 0x57, 0xe9, 0x19, 0x97, 0xca, 0xb3, 0x98, 0x83, 0x40, 0x51, 0xe6, 0x9e, 0xd8, 0x70, 0x66, 0x73, 0xbd, 0x85, 0x58, 0x7b, 0xbd, 0x5e, 0x0b, 0xa3, 0x34, 0x16, 0x72, 0x87, 0x87, 0x87, 0x2c, 0x16, 0x8b, 0x7a, 0x24, 0xaa, 0x60, 0xb1, 0x58, 0xb4, 0x17, 0xe0, 0xf0, 0xf0, 0x90, 0x3c, 0xcf, 0xd9, 0xdc, 0xdc, 0xe4, 0xe0, 0x60, 0xaf, 0x76, 0x53, 0xf3, 0xae, 0x59, 0x5e, 0x48, 0xc4, 0x2f, 0x4a, 0x21, 0x43, 0x82, 0xc0, 0x27, 0x05, 0x4a, 0x42, 0xe5, 0x2c, 0xce, 0x9a, 0xb6, 0x67, 0xa4, 0x85, 0x64, 0xdc, 0x5b, 0xe3, 0xda, 0xb5, 0x6b, 0x1c, 0x4c, 0xa7, 0x44, 0x51, 0xc8, 0x0b, 0x5f, 0xf8, 0x02, 0x0e, 0x67, 0x53, 0xd6, 0xc3, 0x09, 0x52, 0x4a, 0xe6, 0xf3, 0x29, 0x4f, 0x3f, 0xfd, 0x34, 0x57, 0xaf, 0x5e, 0x6d, 0x37, 0xad, 0xfd, 0xfd, 0x5d, 0xca, 0x2a, 0x65, 0x3c, 0x1e, 0x73, 0x38, 0xdd, 0x6d, 0xfb, 0x35, 0xde, 0xc1, 0xad, 0x86, 0xf3, 0x6d, 0x41, 0x10, 0x04, 0x5c, 0xdd, 0xd9, 0x6b, 0xfb, 0x43, 0x4d, 0x86, 0x98, 0xe7, 0x39, 0x69, 0x9a, 0x7a, 0xfd, 0xde, 0x71, 0x86, 0x92, 0xd0, 0xef, 0x25, 0xc4, 0x51, 0x48, 0x4f, 0x47, 0xf4, 0x23, 0xcd, 0xab, 0x5f, 0x73, 0x3f, 0x7f, 0xf4, 0x8f, 0xdd, 0xc3, 0x13, 0x9f, 0x7b, 0x8a, 0x0f, 0x7f, 0xe4, 0x0f, 0x70, 0xc5, 0x2e, 0x7b, 0xe5, 0x9c, 0xdf, 0xf8, 0xed, 0xcb, 0x44, 0x21, 0xfc, 0x95, 0xbf, 0xd2, 0xe3, 0x13, 0x1f, 0xaf, 0xb8, 0xf8, 0x88, 0xe3, 0xf1, 0x27, 0x4a, 0xe6, 0x8b, 0x4e, 0xcf, 0xf1, 0xe2, 0xd3, 0x6c, 0xdf, 0xf2, 0x28, 0x8f, 0x7e, 0xf5, 0x51, 0xde, 0xf2, 0xd6, 0xb7, 0xf2, 0xfa, 0xef, 0xfa, 0x6e, 0xbe, 0xfd, 0x81, 0x57, 0x71, 0xfe, 0xc2, 0xf9, 0xb6, 0xea, 0x7a, 0xdb, 0x3f, 0xfd, 0xb1, 0x95, 0xfe, 0xfb, 0x53, 0x4f, 0x2e, 0xa5, 0x34, 0xbb, 0xc4, 0x1f, 0x70, 0xcc, 0x67, 0x53, 0xbe, 0xf2, 0x95, 0x03, 0x2a, 0xeb, 0x58, 0x5b, 0x9b, 0xa0, 0x83, 0x80, 0xd9, 0xcc, 0x1b, 0x39, 0xc4, 0x7a, 0x29, 0x36, 0xe4, 0xa1, 0x29, 0x5a, 0x68, 0xf4, 0xdd, 0xef, 0x7d, 0x2f, 0xef, 0x7e, 0xef, 0x7b, 0xf9, 0xd6, 0x6f, 0xbe, 0x93, 0xd7, 0x7e, 0xfb, 0x9f, 0xe6, 0x3b, 0xbe, 0xf3, 0xdb, 0x01, 0xf8, 0x85, 0x9f, 0xff, 0x89, 0x95, 0x5e, 0x64, 0xa0, 0x24, 0x6b, 0x43, 0x6f, 0x39, 0xd8, 0x3c, 0x08, 0xc6, 0x2c, 0xfb, 0xe9, 0xa7, 0x79, 0x11, 0xb7, 0xcc, 0x56, 0xb7, 0x4a, 0x54, 0x39, 0x51, 0x81, 0x77, 0x18, 0xed, 0xc7, 0x19, 0xee, 0xed, 0xff, 0xb3, 0xcb, 0xea, 0xb4, 0x99, 0x77, 0x3e, 0x35, 0xc8, 0x76, 0x90, 0x0d, 0x29, 0xa8, 0x1f, 0x70, 0x73, 0x1d, 0x58, 0xbf, 0x46, 0x88, 0x90, 0x28, 0xe1, 0x08, 0x94, 0xe0, 0xcd, 0x6f, 0x7e, 0x33, 0x3f, 0xf2, 0x3f, 0xff, 0xc8, 0x75, 0x83, 0xee, 0x87, 0x3e, 0xf8, 0x21, 0x1e, 0x7b, 0xec, 0x31, 0x7e, 0xf8, 0x2f, 0xbd, 0x99, 0xb7, 0xbc, 0xf5, 0xad, 0x48, 0xa9, 0x88, 0x93, 0x3e, 0xbd, 0xfe, 0x88, 0xc1, 0x68, 0x93, 0xc2, 0x08, 0x8f, 0x70, 0xcd, 0xe7, 0xad, 0x00, 0xd3, 0xff, 0xf3, 0xaf, 0xfe, 0x55, 0x07, 0x0a, 0xa6, 0x45, 0x6a, 0x9a, 0x2a, 0xb8, 0x81, 0xcd, 0xdf, 0xf3, 0xae, 0xb7, 0xd7, 0xc9, 0xbc, 0xc6, 0xb9, 0x92, 0x2c, 0x2b, 0x48, 0x53, 0x8b, 0x92, 0x92, 0x4f, 0x7f, 0xee, 0x12, 0x9f, 0xf8, 0xf4, 0x3b, 0xdb, 0xd7, 0xe8, 0xde, 0x9b, 0xe3, 0x15, 0xba, 0x94, 0x1e, 0x09, 0xa3, 0xbd, 0x2f, 0xba, 0x55, 0xca, 0x5a, 0xda, 0x4e, 0xfa, 0xf1, 0x54, 0xa9, 0x64, 0x2d, 0x03, 0x4a, 0xdd, 0xab, 0x97, 0x08, 0x69, 0x4f, 0x20, 0x44, 0xef, 0xff, 0xc0, 0xfb, 0x4f, 0x3d, 0xdf, 0x2f, 0xfd, 0xe2, 0xbb, 0x78, 0xe4, 0xe2, 0xd3, 0xe8, 0x80, 0xd6, 0x50, 0x27, 0x08, 0x25, 0x3a, 0xf0, 0xf7, 0xfe, 0x63, 0xff, 0xf5, 0xa1, 0xe7, 0x94, 0x9a, 0x7d, 0xea, 0xc9, 0xa7, 0x56, 0xfc, 0xda, 0x3f, 0xf4, 0xc1, 0x0f, 0xf1, 0xb1, 0xff, 0xfa, 0xd0, 0x75, 0xef, 0x6d, 0x6f, 0x30, 0x68, 0xdb, 0x57, 0xbf, 0xf0, 0xce, 0xe5, 0x35, 0xd1, 0x3a, 0xe0, 0xcc, 0xf6, 0x39, 0x5e, 0xfc, 0x4d, 0x2f, 0xe7, 0xc2, 0xad, 0x77, 0x78, 0xf9, 0xe8, 0xfa, 0xd9, 0x38, 0xd8, 0xbf, 0xd6, 0x26, 0xd3, 0xdd, 0x23, 0x08, 0x42, 0x7a, 0x83, 0x11, 0x4a, 0xe9, 0x95, 0x6a, 0xb1, 0xcb, 0xc8, 0xfe, 0x95, 0xf7, 0xbd, 0x6f, 0xe5, 0x3c, 0xd7, 0xe5, 0x7a, 0x08, 0x41, 0xa0, 0xf5, 0xca, 0x14, 0x4d, 0x23, 0x49, 0x2d, 0x1c, 0xad, 0x69, 0x96, 0xac, 0xad, 0x59, 0x65, 0x13, 0x98, 0x82, 0xa8, 0x1d, 0x07, 0x0e, 0xc3, 0x90, 0xb2, 0x48, 0xfd, 0xa4, 0x52, 0x95, 0xd1, 0x8b, 0x43, 0xc6, 0xe3, 0xb5, 0xb6, 0xb8, 0x52, 0x4a, 0x31, 0x1c, 0x0e, 0x19, 0x8f, 0xc7, 0xed, 0xb4, 0xd1, 0xfe, 0xce, 0x61, 0x1b, 0x6c, 0x5f, 0xfc, 0xe2, 0x17, 0x13, 0x86, 0x21, 0x47, 0x47, 0x47, 0x8c, 0xc7, 0x6b, 0x75, 0x3b, 0x72, 0x4a, 0x5e, 0x64, 0xcc, 0x66, 0x47, 0x1c, 0x1d, 0x1d, 0x30, 0x9b, 0x1f, 0x50, 0x16, 0x55, 0xcd, 0xcf, 0x32, 0x6d, 0x80, 0x5b, 0x79, 0xde, 0x3a, 0xcf, 0x73, 0xc3, 0xfe, 0xee, 0xba, 0x90, 0x35, 0xfd, 0xe4, 0xe6, 0x73, 0x97, 0x65, 0xd9, 0x9a, 0x99, 0x58, 0x6b, 0x19, 0x8d, 0x46, 0xa4, 0xa9, 0x27, 0x73, 0xe7, 0x8b, 0xea, 0x84, 0xa8, 0x5a, 0x17, 0xd5, 0x2b, 0xcb, 0x72, 0xa5, 0xaf, 0x7e, 0xfc, 0x77, 0x9a, 0x7d, 0xab, 0xd9, 0x9f, 0x57, 0x9d, 0x18, 0xdd, 0x09, 0xb1, 0x99, 0xe3, 0x7c, 0x34, 0xa5, 0x74, 0xdb, 0x02, 0x96, 0xd2, 0xb7, 0x55, 0x66, 0xb3, 0x59, 0x2b, 0xca, 0xd6, 0xeb, 0xf5, 0x5a, 0x71, 0x1a, 0xad, 0x95, 0x1f, 0x0d, 0x37, 0xae, 0x4d, 0x18, 0xf2, 0xbc, 0xac, 0xd5, 0xf9, 0x02, 0x8a, 0x06, 0x25, 0x78, 0xfd, 0xeb, 0x2e, 0xb8, 0xae, 0xec, 0xaa, 0xd6, 0xba, 0x55, 0xa2, 0x69, 0x84, 0x50, 0xba, 0xd5, 0x6d, 0x53, 0xcd, 0x57, 0x55, 0x45, 0x1c, 0x0d, 0xbd, 0x3c, 0xab, 0xf2, 0x9b, 0xb7, 0x94, 0x7e, 0x5c, 0x2d, 0x8a, 0xfc, 0x60, 0x7c, 0x97, 0x77, 0xd3, 0xf4, 0x9d, 0x57, 0x20, 0x4f, 0x71, 0x8e, 0xcf, 0x7e, 0xf6, 0xb3, 0x1c, 0x1e, 0xa4, 0x18, 0x03, 0x51, 0xe4, 0xf7, 0xf3, 0x83, 0x03, 0x18, 0x8f, 0xe1, 0xec, 0xf9, 0x0d, 0x0e, 0xf6, 0x8f, 0x98, 0xcd, 0x4a, 0xca, 0xd2, 0x3f, 0xd8, 0xe7, 0xce, 0x9e, 0xe1, 0xf6, 0xdb, 0xef, 0x64, 0x38, 0x1c, 0x12, 0x0d, 0xcf, 0x71, 0x78, 0x78, 0x48, 0x96, 0x2f, 0xea, 0x73, 0xfa, 0x4c, 0x31, 0x2f, 0xfc, 0x0d, 0x53, 0x38, 0x76, 0x77, 0x77, 0x39, 0x38, 0x58, 0x42, 0x2b, 0xb3, 0xd9, 0x8c, 0xc5, 0x22, 0xc3, 0x18, 0xb8, 0xfb, 0xce, 0x88, 0xc5, 0x22, 0x27, 0x2f, 0x41, 0x2a, 0x89, 0xd2, 0x21, 0x32, 0x88, 0xe8, 0xf7, 0x86, 0x0c, 0x46, 0x63, 0xca, 0x54, 0xf0, 0xf0, 0xc3, 0x0f, 0xfb, 0xca, 0xdf, 0x49, 0x5e, 0xf9, 0xca, 0x3f, 0x42, 0x3a, 0x5f, 0xd0, 0x58, 0x0b, 0x06, 0x11, 0x6d, 0x90, 0x15, 0xf5, 0x98, 0xc1, 0x23, 0x0f, 0xff, 0x21, 0x6f, 0x78, 0xc3, 0x1b, 0x38, 0x38, 0x38, 0x60, 0x9e, 0xee, 0xf2, 0x07, 0x9f, 0xfe, 0x0c, 0x8b, 0x45, 0x41, 0x92, 0x04, 0x6c, 0xac, 0xad, 0x73, 0x78, 0x78, 0xc8, 0xda, 0xda, 0x9a, 0xd7, 0xb9, 0x8f, 0x67, 0x18, 0x5b, 0x51, 0x64, 0x39, 0x45, 0x51, 0xa0, 0xb5, 0xa6, 0x17, 0xc5, 0x6d, 0xf6, 0x89, 0xf0, 0x7f, 0x17, 0xa8, 0x5a, 0x34, 0xa0, 0xd1, 0x0a, 0xa8, 0x37, 0x7c, 0x9b, 0xde, 0xe5, 0x65, 0x16, 0x55, 0xc0, 0xc1, 0xd1, 0x53, 0xf4, 0x07, 0x7b, 0xc4, 0xbd, 0x43, 0xde, 0xf1, 0xf3, 0x6f, 0xc4, 0x98, 0xaf, 0xf1, 0x8b, 0x7f, 0xef, 0xb3, 0xbc, 0xed, 0x6d, 0x3f, 0xce, 0xcf, 0xfd, 0xdc, 0x5b, 0xf8, 0xe3, 0x7f, 0xe2, 0x35, 0xfc, 0xee, 0x7f, 0x79, 0x94, 0x4f, 0x7d, 0x69, 0xc1, 0x5f, 0x7a, 0xe3, 0x03, 0x7c, 0xf5, 0xf1, 0x27, 0xc1, 0xf6, 0x79, 0xf7, 0x87, 0xbe, 0xc8, 0xa5, 0xcb, 0x29, 0xd7, 0x0e, 0x4b, 0xf2, 0xdc, 0x2b, 0x93, 0x7f, 0xeb, 0x37, 0xdf, 0x79, 0xea, 0xe6, 0xdc, 0x88, 0x30, 0x18, 0xeb, 0x9e, 0x13, 0x05, 0x16, 0x02, 0x02, 0x2d, 0xe9, 0xc5, 0x8a, 0x28, 0x94, 0x27, 0x2c, 0x7a, 0xfd, 0xfd, 0xd1, 0x2b, 0xea, 0x84, 0x45, 0x69, 0x38, 0x4a, 0xcb, 0x1b, 0x92, 0x14, 0xd5, 0x0a, 0xfa, 0x89, 0x44, 0x49, 0x4e, 0x1d, 0x0f, 0x79, 0xb6, 0x80, 0x2d, 0x9d, 0x3a, 0xb5, 0x37, 0xb7, 0x9c, 0xfd, 0x5d, 0xdd, 0x50, 0xba, 0xa6, 0x11, 0x5a, 0x6b, 0xb2, 0x6a, 0x81, 0x73, 0x90, 0x16, 0xcf, 0x5f, 0x1b, 0x5d, 0x4a, 0x41, 0x2f, 0xd2, 0x68, 0x25, 0x29, 0x4b, 0xef, 0x61, 0xdf, 0xa0, 0x16, 0x4e, 0xa8, 0xda, 0x0a, 0x37, 0xa0, 0x34, 0x15, 0x61, 0xd0, 0xe7, 0xe0, 0xe0, 0x90, 0x40, 0x47, 0x18, 0x5b, 0x3d, 0x6b, 0x4f, 0xf1, 0xf8, 0x31, 0x1e, 0x6f, 0xf0, 0x92, 0x97, 0xbd, 0x8a, 0xf5, 0x8d, 0xb3, 0xf4, 0xfb, 0x23, 0xb4, 0xf6, 0xe3, 0x44, 0xa2, 0x46, 0xa4, 0xf6, 0x76, 0x9f, 0xe1, 0xe3, 0x1f, 0xfd, 0x75, 0xf6, 0x76, 0x2f, 0x3f, 0x8f, 0x57, 0x13, 0x0c, 0x47, 0x23, 0xce, 0x9c, 0xd9, 0x60, 0x3a, 0xdf, 0xa3, 0x28, 0x32, 0xc2, 0x48, 0x51, 0x14, 0x0b, 0x66, 0x87, 0x8e, 0x13, 0x6a, 0xa4, 0xa2, 0xd6, 0xea, 0x16, 0x9d, 0xcd, 0x4d, 0x41, 0x7f, 0x28, 0x88, 0x62, 0xdd, 0xba, 0x0a, 0x96, 0x0b, 0x79, 0xc2, 0x7e, 0xb9, 0x09, 0x2e, 0xfe, 0x19, 0x30, 0x58, 0x63, 0xd1, 0x81, 0xab, 0x39, 0x0b, 0x50, 0x96, 0xcf, 0xbd, 0xee, 0x9a, 0x5b, 0x2d, 0x25, 0xf4, 0x7a, 0x11, 0x61, 0x2c, 0x3b, 0x1b, 0x77, 0x13, 0x0c, 0x0c, 0xbf, 0xf5, 0x1b, 0xbf, 0xf7, 0x9c, 0x9f, 0xdc, 0xab, 0xb7, 0x7d, 0x7d, 0xc7, 0x78, 0x3c, 0xe1, 0x9b, 0xbf, 0xe5, 0xd5, 0xdc, 0x76, 0xfb, 0x5d, 0xf4, 0x07, 0x63, 0x40, 0x70, 0xed, 0xca, 0x55, 0x3e, 0xf9, 0xa9, 0xdf, 0xe7, 0xc9, 0x27, 0x2e, 0x52, 0x1e, 0x6b, 0x3d, 0xe8, 0x20, 0xe4, 0x96, 0xf3, 0xb7, 0x73, 0xdf, 0x2b, 0x5e, 0xcd, 0xf6, 0xb9, 0xdb, 0xda, 0xa0, 0xee, 0x9c, 0x63, 0x77, 0xe7, 0x19, 0x1e, 0xfa, 0xdd, 0x5f, 0xe3, 0xda, 0xd5, 0xcb, 0xcf, 0xab, 0x15, 0x23, 0x84, 0x64, 0x73, 0xeb, 0x1c, 0xdf, 0xf6, 0xda, 0x3f, 0xc5, 0xc6, 0xe6, 0xb9, 0xd5, 0xf6, 0x9d, 0x30, 0x6d, 0x40, 0x17, 0x42, 0xd5, 0x3f, 0x2b, 0x54, 0x93, 0x50, 0x06, 0x86, 0xd9, 0x6c, 0x4a, 0x2f, 0x0e, 0xf9, 0xd0, 0xaf, 0xbd, 0x1f, 0x41, 0xc5, 0xe6, 0xd6, 0x1a, 0xeb, 0xeb, 0x23, 0x66, 0x47, 0x07, 0x8c, 0xd7, 0xcf, 0xb2, 0x48, 0x67, 0xa4, 0x69, 0x4a, 0x1c, 0x87, 0xec, 0xef, 0xef, 0x72, 0xcb, 0xf9, 0xb3, 0xc4, 0xb1, 0x67, 0xc5, 0xdb, 0x2a, 0xe2, 0x93, 0x9f, 0xfc, 0x24, 0xc6, 0xc0, 0xff, 0xf4, 0x17, 0x7e, 0x98, 0x74, 0x51, 0xe0, 0x9c, 0x6a, 0x5d, 0x23, 0xd1, 0x25, 0xf3, 0xf9, 0xdc, 0xb7, 0x70, 0xf6, 0xae, 0xb1, 0xb3, 0xfb, 0x0c, 0x79, 0x36, 0xc5, 0xd8, 0x94, 0x45, 0x3a, 0xf5, 0x85, 0x95, 0xf0, 0x73, 0xe8, 0x4a, 0x78, 0xf2, 0x5c, 0x99, 0x17, 0xed, 0x24, 0x93, 0x0a, 0xb7, 0x18, 0x0c, 0x06, 0xcc, 0x6a, 0xee, 0x91, 0x52, 0xaa, 0xe5, 0xcf, 0x34, 0x31, 0xab, 0x41, 0x4d, 0x27, 0x93, 0x09, 0x42, 0x08, 0xd6, 0xd6, 0xd6, 0x48, 0x92, 0x84, 0x2f, 0x7f, 0xf9, 0xcb, 0x98, 0x5a, 0xff, 0x42, 0x4a, 0xd9, 0xf6, 0xdf, 0x9b, 0x18, 0xb8, 0x0c, 0xb4, 0x27, 0x21, 0xf7, 0x6e, 0x52, 0x71, 0x9c, 0x54, 0xd7, 0x65, 0xc9, 0x77, 0xab, 0xfe, 0x86, 0xb0, 0xd7, 0x7d, 0x9d, 0x50, 0xab, 0x1a, 0x65, 0x48, 0x6a, 0x14, 0xb9, 0x6a, 0xfb, 0xe9, 0x61, 0x10, 0xd7, 0x6d, 0x08, 0x4b, 0x10, 0x68, 0x7a, 0xbd, 0x98, 0x20, 0x54, 0x54, 0x55, 0x51, 0x07, 0x79, 0xcb, 0xf4, 0xa8, 0x60, 0x7b, 0xfb, 0x2c, 0xc3, 0xc1, 0x5a, 0x2b, 0xd3, 0xab, 0x95, 0xd2, 0x75, 0xe6, 0xed, 0xc8, 0xf3, 0x82, 0xc5, 0x22, 0x6d, 0x1f, 0xae, 0xee, 0x9b, 0x6f, 0x36, 0xb1, 0x38, 0x4e, 0xe8, 0xf5, 0x7c, 0xff, 0x6d, 0x3e, 0xf3, 0x55, 0xbb, 0xb1, 0x5e, 0x9b, 0xd7, 0xda, 0x0a, 0x87, 0x69, 0x35, 0xd8, 0xe3, 0x30, 0x79, 0x56, 0x03, 0xf9, 0xbd, 0xfd, 0xc7, 0x98, 0xcd, 0x52, 0xa4, 0x82, 0x38, 0x81, 0xd1, 0x68, 0x44, 0xbf, 0xdf, 0xe7, 0xfc, 0x05, 0xc3, 0xe6, 0xe6, 0x26, 0x51, 0x12, 0xf2, 0x4d, 0xdf, 0xd4, 0x27, 0x08, 0x22, 0x9e, 0x7a, 0xf2, 0x32, 0x5f, 0xfe, 0xf2, 0x57, 0xd8, 0xdd, 0xbb, 0xca, 0xd6, 0x99, 0x0d, 0xce, 0xdd, 0xb2, 0xc5, 0xc1, 0x74, 0x9f, 0x22, 0x5b, 0x20, 0xb0, 0x84, 0x3a, 0x24, 0x89, 0x02, 0xb4, 0xb4, 0x48, 0x02, 0x8c, 0x2d, 0xb9, 0xf8, 0xc8, 0xa3, 0x7e, 0x1e, 0x3c, 0x0c, 0xd9, 0xda, 0xdc, 0xa4, 0xd7, 0xeb, 0xb5, 0x6d, 0x05, 0xdf, 0xf3, 0x78, 0x86, 0x8d, 0xcd, 0x31, 0x61, 0x3c, 0x20, 0x8a, 0xfb, 0x08, 0x19, 0x92, 0x97, 0x5e, 0x22, 0xd6, 0x22, 0x88, 0x83, 0x88, 0xd1, 0x78, 0x00, 0x4e, 0xb2, 0x77, 0x6d, 0x97, 0x27, 0x9e, 0x78, 0x02, 0x2d, 0x03, 0xd6, 0x26, 0x1b, 0x08, 0x14, 0x79, 0xbe, 0x68, 0xc9, 0x11, 0x67, 0xb7, 0xb7, 0x39, 0x3c, 0x3c, 0xe4, 0xc2, 0x85, 0x0b, 0x3c, 0xf1, 0xc4, 0x13, 0x5c, 0xba, 0x74, 0x09, 0x44, 0xee, 0x1f, 0xa8, 0xcd, 0x35, 0xc2, 0x30, 0xc4, 0x38, 0x47, 0x6f, 0x30, 0x60, 0x32, 0x59, 0x63, 0x32, 0x99, 0x70, 0x54, 0xf8, 0x19, 0xec, 0xb5, 0x71, 0xcc, 0x78, 0x38, 0xf2, 0xcc, 0xd2, 0xf9, 0xb4, 0x35, 0xb6, 0x31, 0x26, 0xf7, 0x84, 0x07, 0xeb, 0xd9, 0xa5, 0x65, 0x56, 0x93, 0xbd, 0xa4, 0xf4, 0x68, 0x49, 0x72, 0x40, 0x96, 0xe5, 0x58, 0x1c, 0x41, 0xef, 0x88, 0xfe, 0x04, 0xb4, 0x80, 0x8f, 0xfe, 0xfe, 0x45, 0xae, 0x5c, 0x7e, 0x18, 0x19, 0xcd, 0x38, 0x98, 0x3f, 0xc5, 0x3c, 0x35, 0xfc, 0xce, 0xef, 0x3e, 0xc4, 0xc1, 0x3e, 0xbc, 0xe8, 0x02, 0x3c, 0xfe, 0xd8, 0xc7, 0x30, 0xb6, 0xa2, 0x2f, 0x23, 0xbe, 0xeb, 0x15, 0x15, 0x8f, 0x9d, 0x95, 0x7c, 0xea, 0xd1, 0x90, 0x2b, 0x7b, 0x15, 0x7b, 0x47, 0xe5, 0x75, 0xab, 0xac, 0x30, 0xd4, 0x0c, 0x86, 0x01, 0x47, 0x47, 0x39, 0x65, 0x61, 0x9f, 0x75, 0x53, 0xd5, 0x4a, 0x90, 0x44, 0x9e, 0x09, 0xdd, 0x6d, 0xcf, 0x34, 0x88, 0x44, 0x37, 0xa0, 0x2e, 0x37, 0x74, 0xd0, 0x52, 0x78, 0x52, 0xa2, 0x7d, 0xfe, 0x53, 0xe9, 0x0d, 0xdc, 0x75, 0x9c, 0x01, 0x7c, 0x5c, 0xdd, 0xed, 0xb4, 0xd1, 0xb4, 0xeb, 0xc9, 0xb9, 0x36, 0xd2, 0x98, 0xa7, 0xb9, 0x2a, 0x35, 0xc1, 0x3d, 0x8e, 0x43, 0xca, 0xca, 0x22, 0x4a, 0xf3, 0xbc, 0xfb, 0xdc, 0x12, 0x87, 0xa9, 0x4a, 0xaa, 0x02, 0x7a, 0x43, 0x5d, 0x8f, 0x31, 0x42, 0x5a, 0xe4, 0x9e, 0xbb, 0x21, 0x65, 0x6d, 0xed, 0xaa, 0x29, 0x72, 0x87, 0x14, 0x31, 0xeb, 0x1b, 0x67, 0x58, 0x2c, 0x0e, 0x99, 0x4e, 0x0f, 0x9f, 0xd7, 0x79, 0x74, 0x10, 0x32, 0x1a, 0xaf, 0xb3, 0xb6, 0x7e, 0x86, 0xe1, 0x68, 0xbd, 0x53, 0x1d, 0x78, 0x5b, 0x4c, 0xaf, 0x99, 0xef, 0xff, 0x7c, 0xbc, 0x8d, 0x70, 0xda, 0xa1, 0x94, 0x44, 0xd6, 0x24, 0x21, 0xef, 0x9a, 0xe8, 0xfb, 0xfc, 0x55, 0xe5, 0x96, 0x5c, 0xb3, 0xda, 0x67, 0xde, 0x39, 0x9f, 0x1c, 0x0f, 0x46, 0x31, 0x61, 0x28, 0x5a, 0xaf, 0x02, 0x0f, 0xb1, 0x37, 0x89, 0xbd, 0xa3, 0x32, 0xa0, 0x3a, 0x7d, 0xc7, 0xe3, 0x6b, 0x44, 0x4a, 0xe5, 0xc7, 0xeb, 0xf2, 0xa6, 0x7a, 0xf7, 0x5e, 0xf1, 0x4d, 0x45, 0x2f, 0x7c, 0xa7, 0xaf, 0x55, 0xf9, 0x6b, 0x98, 0xec, 0x4a, 0x49, 0xca, 0xc2, 0xb6, 0x9e, 0xd2, 0x52, 0x89, 0xd5, 0x24, 0x52, 0x79, 0x34, 0xee, 0xaf, 0xff, 0xc8, 0x8f, 0xae, 0x7c, 0xc6, 0xe3, 0x62, 0x49, 0x0d, 0xea, 0xf1, 0xf5, 0x1e, 0x5a, 0x07, 0xac, 0xad, 0x6f, 0xb0, 0xb5, 0x75, 0x86, 0x28, 0x4e, 0xda, 0x6b, 0x37, 0x9c, 0x8c, 0xb9, 0xf7, 0xc5, 0xf7, 0x53, 0x95, 0x25, 0xcf, 0x3c, 0xfd, 0x44, 0x5d, 0x09, 0xfb, 0x35, 0x39, 0x1c, 0x4d, 0x78, 0xd1, 0x4b, 0x5e, 0xc9, 0xb9, 0x5b, 0x6e, 0xf7, 0xd3, 0x3e, 0x9d, 0x35, 0xd9, 0x78, 0x6d, 0x2c, 0x13, 0x17, 0x71, 0xfd, 0x67, 0x50, 0x07, 0x0c, 0x47, 0x13, 0xd6, 0xd6, 0xb7, 0x08, 0x42, 0x5d, 0x2b, 0xc3, 0x59, 0x6a, 0xd3, 0xd4, 0xeb, 0x8e, 0xc1, 0x35, 0xeb, 0xbd, 0x28, 0x0a, 0xe2, 0x38, 0xa6, 0xdf, 0x4f, 0x78, 0xe5, 0x2b, 0x5f, 0xc9, 0xe3, 0x97, 0x1e, 0xa1, 0xd7, 0x4b, 0x38, 0x3c, 0x3c, 0xa4, 0x9f, 0xc4, 0x1e, 0xf9, 0x14, 0xfe, 0x39, 0xcb, 0xb2, 0x8c, 0xe9, 0x74, 0xca, 0xc1, 0x41, 0x4c, 0x92, 0xf8, 0x36, 0xe7, 0x68, 0xb8, 0xc5, 0x78, 0x3c, 0x66, 0x67, 0x67, 0x9f, 0x87, 0x1f, 0x7e, 0x98, 0xdb, 0x6f, 0xbb, 0xab, 0x76, 0xa6, 0x54, 0x44, 0x51, 0xc2, 0x51, 0x7a, 0x40, 0x92, 0xf4, 0x19, 0x0e, 0xc7, 0x6c, 0x6c, 0xac, 0xb1, 0xb5, 0xb5, 0xc1, 0x74, 0xb6, 0xc7, 0xd1, 0xd1, 0x35, 0x76, 0x77, 0xaf, 0xd6, 0x55, 0x77, 0x86, 0x29, 0x0a, 0x64, 0xcd, 0x5f, 0x72, 0xc6, 0xb7, 0x6a, 0x9a, 0x1e, 0x79, 0x43, 0x20, 0x6b, 0x9e, 0xd3, 0x06, 0x3d, 0x6e, 0x12, 0xe3, 0x25, 0xe2, 0x11, 0xac, 0x28, 0x9e, 0x86, 0x61, 0x88, 0x15, 0xd5, 0x52, 0x04, 0xad, 0x0e, 0xe8, 0xdd, 0x00, 0xde, 0xbd, 0x3e, 0x4d, 0xe0, 0x6e, 0xbe, 0x9a, 0x6b, 0xd4, 0xfd, 0xf3, 0x71, 0x96, 0x7b, 0xf3, 0xde, 0xba, 0xc8, 0x4a, 0x53, 0xd8, 0x96, 0x65, 0x49, 0x56, 0xb7, 0xaa, 0x1b, 0x69, 0x5b, 0xa5, 0x7c, 0x31, 0x5d, 0x55, 0x15, 0x4a, 0x6a, 0xca, 0x2a, 0xef, 0xf0, 0x75, 0x2c, 0x55, 0xe5, 0x96, 0xfc, 0xa9, 0xfa, 0xfe, 0xcd, 0xe7, 0x73, 0x66, 0xd3, 0x8c, 0xa2, 0xf0, 0x5a, 0x00, 0x3a, 0xcb, 0x32, 0x7a, 0xbd, 0x5e, 0x4b, 0xbd, 0x5f, 0x7a, 0xcf, 0xca, 0x95, 0x00, 0xd8, 0xc0, 0x19, 0x5d, 0x2b, 0x55, 0x9f, 0xc5, 0xd4, 0xd9, 0x89, 0x94, 0xb5, 0x13, 0x8c, 0xab, 0x17, 0x8e, 0x23, 0xcf, 0xcb, 0x95, 0x07, 0xb4, 0xa1, 0xf1, 0x37, 0x1b, 0xe3, 0x6d, 0xb7, 0x4e, 0x58, 0x9b, 0xf4, 0xda, 0x11, 0x82, 0xe6, 0x82, 0x57, 0x55, 0x45, 0xaf, 0xe7, 0x03, 0xe0, 0xc1, 0xfe, 0x55, 0xef, 0x77, 0x8e, 0xe3, 0x05, 0x77, 0xdf, 0x46, 0x1c, 0xf7, 0x18, 0x0c, 0x06, 0x1c, 0xec, 0xef, 0xa0, 0xe3, 0x09, 0x41, 0xe0, 0x11, 0x84, 0xb2, 0x70, 0x58, 0x93, 0x91, 0xe5, 0x1e, 0xce, 0xad, 0xaa, 0x8a, 0xc1, 0x40, 0x53, 0x55, 0x7e, 0x43, 0x0a, 0x02, 0x03, 0x64, 0x48, 0x69, 0x08, 0x82, 0x5a, 0x74, 0xdf, 0x42, 0x10, 0x29, 0xc2, 0x00, 0x9c, 0xab, 0xb0, 0xc6, 0xa1, 0xf0, 0x0e, 0x6e, 0x26, 0x2f, 0xb9, 0x72, 0xed, 0x0a, 0xb3, 0x99, 0x87, 0x88, 0x84, 0x10, 0xec, 0xee, 0xee, 0xd2, 0x8b, 0x86, 0x44, 0x61, 0xcf, 0xc3, 0x1d, 0xb1, 0x61, 0x38, 0x1c, 0x22, 0x84, 0x42, 0x0a, 0xcd, 0xce, 0xb5, 0x3d, 0x9f, 0x7c, 0x3c, 0x75, 0x99, 0xe9, 0x74, 0x4e, 0x96, 0x4f, 0x19, 0x8f, 0xc7, 0xf4, 0x87, 0x13, 0xb4, 0xd6, 0x1c, 0x1c, 0xf8, 0x05, 0x5c, 0x3a, 0xc9, 0x34, 0x2d, 0x78, 0xe6, 0x6a, 0xca, 0xee, 0xb5, 0x1d, 0xd2, 0x74, 0x4e, 0x92, 0x24, 0x84, 0x35, 0x01, 0xc5, 0x55, 0xc6, 0xdb, 0x7f, 0x2a, 0xd8, 0x3e, 0xbb, 0xc5, 0xd9, 0x33, 0xdb, 0xf4, 0x93, 0x33, 0x88, 0xb8, 0xee, 0x11, 0xa5, 0x29, 0x45, 0x91, 0x22, 0xe4, 0x01, 0x4e, 0xcd, 0x71, 0xe4, 0x48, 0x69, 0xb0, 0x52, 0x93, 0x17, 0xf0, 0x9f, 0x7e, 0xeb, 0x22, 0x97, 0xbf, 0x76, 0xc8, 0x3d, 0xdb, 0x90, 0x97, 0x1b, 0xe0, 0x6e, 0xe7, 0x99, 0xa7, 0x0a, 0x46, 0x83, 0x1e, 0xeb, 0xa3, 0x11, 0xf3, 0x79, 0x4e, 0x10, 0x4a, 0x9e, 0x7e, 0x66, 0x46, 0xa2, 0x87, 0xdc, 0xb1, 0xa5, 0x08, 0x64, 0xc9, 0x93, 0xbb, 0x05, 0x9f, 0x7b, 0xec, 0x80, 0x2b, 0xfb, 0xf3, 0x16, 0xe6, 0x29, 0x2b, 0xd3, 0x42, 0xa2, 0x71, 0xac, 0xe9, 0x25, 0x01, 0xf3, 0x59, 0x41, 0xf9, 0x2c, 0xf0, 0x5e, 0x1c, 0x69, 0xe2, 0x58, 0x12, 0x6a, 0x81, 0x3a, 0x36, 0x7f, 0xb9, 0x22, 0x2d, 0x8c, 0x3d, 0x56, 0x11, 0xc3, 0xa0, 0xe7, 0x8d, 0x21, 0x16, 0xb9, 0xa1, 0xac, 0x8c, 0x0f, 0xec, 0x6e, 0x15, 0x8c, 0xf6, 0x9b, 0x7b, 0x33, 0x66, 0x02, 0x5a, 0xfa, 0x0a, 0xfd, 0xb4, 0x8d, 0x69, 0x65, 0x87, 0x3b, 0x41, 0x6a, 0xb3, 0xcf, 0x3a, 0xdf, 0x7b, 0x3d, 0x1f, 0x83, 0xe5, 0x83, 0x6d, 0x5b, 0x99, 0xc8, 0xe7, 0x53, 0x99, 0x2b, 0x21, 0x08, 0xb5, 0x22, 0xd0, 0x3e, 0x39, 0x46, 0xfa, 0x71, 0x9d, 0xfe, 0xd0, 0x8b, 0x04, 0x38, 0x14, 0x49, 0x32, 0xe4, 0x68, 0x3a, 0x27, 0x08, 0x7b, 0xdc, 0xf7, 0x92, 0x6f, 0xf5, 0xd7, 0xb3, 0x97, 0xf0, 0xc8, 0x1f, 0x7e, 0x8e, 0x34, 0x5b, 0x60, 0xaa, 0xf2, 0xba, 0x01, 0xd8, 0x57, 0x02, 0x01, 0x5b, 0x67, 0xce, 0x73, 0xcf, 0x3d, 0x2f, 0xa7, 0x3f, 0x98, 0x1c, 0x73, 0x42, 0xac, 0x75, 0xb3, 0x6b, 0xc3, 0x0f, 0x1d, 0x04, 0x8c, 0xc6, 0x1b, 0x9d, 0xf1, 0x9c, 0x8a, 0xf9, 0x7c, 0xba, 0x72, 0x0e, 0x21, 0x04, 0xbd, 0xfe, 0x80, 0xdb, 0xee, 0xb8, 0x9b, 0xb8, 0x17, 0xb0, 0x48, 0x8f, 0xd8, 0xdb, 0xbf, 0xc6, 0xc1, 0xc1, 0x1e, 0xfd, 0x24, 0xc0, 0x94, 0x96, 0x4a, 0x7a, 0x37, 0x41, 0x4f, 0xa0, 0x32, 0x88, 0x5a, 0x87, 0xbe, 0xac, 0x5f, 0xc7, 0xda, 0x0a, 0x84, 0xf7, 0xda, 0x56, 0x4a, 0x10, 0x45, 0x9a, 0x44, 0xc1, 0x6c, 0xbf, 0xaa, 0x5b, 0x0f, 0xab, 0x82, 0x19, 0x7e, 0x03, 0x14, 0x04, 0x81, 0xec, 0xb8, 0x82, 0x09, 0x44, 0x20, 0xd0, 0x95, 0xc3, 0x59, 0x51, 0x13, 0xdd, 0x04, 0x55, 0x49, 0x1d, 0xbc, 0x1b, 0x68, 0xbe, 0xc3, 0x71, 0x50, 0xb2, 0xfd, 0xdc, 0xdd, 0xcf, 0x23, 0xa5, 0x58, 0x11, 0x3d, 0xba, 0x72, 0xe5, 0x2a, 0xbf, 0xf0, 0xce, 0x77, 0x9e, 0x50, 0x3f, 0x7c, 0xdb, 0xcf, 0xbc, 0xcd, 0xcf, 0xcd, 0xbb, 0xeb, 0x23, 0x52, 0x8d, 0x01, 0xa5, 0x43, 0xd4, 0x52, 0xc2, 0x75, 0x31, 0x13, 0x47, 0xc4, 0x49, 0x9f, 0xf1, 0x78, 0xc2, 0xcb, 0x5e, 0x7e, 0x3f, 0x6b, 0x9b, 0x9b, 0x7e, 0xa2, 0xa7, 0xbe, 0x0d, 0x3a, 0x08, 0xb8, 0xe5, 0xfc, 0xed, 0xf5, 0xde, 0x14, 0x32, 0x9b, 0x1e, 0xd4, 0xba, 0x03, 0x82, 0xb5, 0xb5, 0x4d, 0x36, 0x36, 0xb7, 0x09, 0xa3, 0xf8, 0xc4, 0xba, 0x54, 0x4a, 0x22, 0x1a, 0x02, 0x94, 0x0e, 0x18, 0x0c, 0xaf, 0xe7, 0x9b, 0xee, 0x13, 0x83, 0x7b, 0xee, 0x7d, 0x39, 0x93, 0xc9, 0x06, 0xfd, 0x9a, 0x8f, 0xd3, 0x54, 0x88, 0xed, 0x58, 0xa6, 0xbb, 0x7e, 0x92, 0xdc, 0xdc, 0x87, 0x86, 0x77, 0xd4, 0xdd, 0xfb, 0xa3, 0x28, 0x62, 0xf7, 0x60, 0x41, 0xd2, 0xf3, 0x44, 0xe9, 0x34, 0xf5, 0xf0, 0xf5, 0xfe, 0xfe, 0x3e, 0xd3, 0xa9, 0xdf, 0xc3, 0x8b, 0x4a, 0x21, 0xb4, 0x62, 0x9e, 0xa6, 0x7c, 0xf1, 0x2b, 0x5f, 0x66, 0xfb, 0xdc, 0x85, 0x5a, 0x81, 0xcd, 0xe2, 0x44, 0x80, 0xd6, 0x7e, 0xf2, 0x28, 0xaa, 0x5b, 0xa7, 0xc3, 0x7e, 0x1f, 0xc7, 0x19, 0xf2, 0xe2, 0x02, 0x47, 0x87, 0xbb, 0x5c, 0xba, 0xf4, 0x18, 0x8b, 0x74, 0xc6, 0x6c, 0x76, 0x80, 0x29, 0x33, 0x8c, 0x2d, 0x41, 0x3a, 0x8f, 0x26, 0xa0, 0x5a, 0x89, 0xd4, 0x6e, 0xa5, 0xdc, 0xc4, 0x98, 0xe3, 0x68, 0x9b, 0x1f, 0x8f, 0x8d, 0xdb, 0x38, 0xd7, 0xef, 0xf7, 0x49, 0x67, 0xc5, 0xca, 0x84, 0x57, 0x17, 0x26, 0x37, 0xc6, 0xd4, 0x23, 0xc6, 0x9c, 0x6a, 0x11, 0xde, 0xb6, 0x2c, 0x5a, 0xa5, 0x38, 0xdf, 0x03, 0xef, 0x8e, 0xb0, 0x35, 0x84, 0xf3, 0x55, 0x8f, 0x14, 0xd9, 0x12, 0x01, 0x8b, 0x6c, 0x39, 0x76, 0x96, 0xe7, 0x39, 0x61, 0x48, 0x3b, 0x8d, 0x95, 0xa6, 0x29, 0x88, 0x63, 0xd2, 0xe7, 0x95, 0x5b, 0xb1, 0x31, 0x6f, 0xc8, 0x73, 0x69, 0x5e, 0x7a, 0x1d, 0x13, 0x14, 0xba, 0x19, 0x87, 0x6a, 0xa8, 0xfb, 0x4d, 0x1f, 0xb2, 0xa1, 0xed, 0x77, 0x35, 0x64, 0xbb, 0xd9, 0x46, 0x03, 0x5f, 0x34, 0x0e, 0x61, 0x8e, 0x66, 0x56, 0xaf, 0x20, 0xcf, 0xea, 0x1e, 0xfb, 0x31, 0x2d, 0xec, 0xe3, 0x36, 0xab, 0x79, 0xee, 0x89, 0x07, 0x51, 0xbc, 0x14, 0xae, 0x11, 0xc2, 0x7a, 0x23, 0x95, 0x72, 0x4a, 0xbf, 0x3f, 0x00, 0xab, 0xeb, 0x8c, 0xca, 0x43, 0x86, 0x4a, 0xd6, 0x1b, 0xfe, 0x62, 0x41, 0x96, 0xed, 0xb7, 0x2a, 0x75, 0xd6, 0xfa, 0xf9, 0x3d, 0x29, 0x60, 0xd0, 0x0f, 0x81, 0x90, 0x40, 0x07, 0x2d, 0x1c, 0xb2, 0x74, 0x7b, 0x13, 0x08, 0xe1, 0xdd, 0xdf, 0x8c, 0x1d, 0x13, 0x04, 0x11, 0xc6, 0x68, 0xd2, 0xbc, 0xc2, 0x3a, 0x4d, 0x14, 0x07, 0x44, 0x51, 0x8f, 0x2c, 0xac, 0x48, 0x17, 0x05, 0x93, 0xc9, 0x84, 0x5b, 0x6f, 0xbd, 0x8d, 0xb3, 0x9b, 0xe7, 0x70, 0x4e, 0xa1, 0x08, 0x19, 0x0e, 0x27, 0x4c, 0xa7, 0x53, 0x8e, 0xe6, 0x3b, 0x2d, 0xfc, 0xbe, 0xbb, 0xbb, 0xcf, 0xe1, 0xe1, 0x94, 0xcd, 0xf5, 0x0d, 0xd2, 0x85, 0xb7, 0x12, 0xb4, 0xc6, 0x7b, 0xca, 0x1f, 0x1d, 0xce, 0x18, 0x8f, 0xc7, 0x58, 0x27, 0x50, 0x3a, 0xe4, 0xf0, 0x68, 0xc6, 0xce, 0xee, 0x3e, 0xe7, 0xcf, 0xbf, 0x90, 0xd1, 0xe0, 0x2c, 0xfb, 0x75, 0x5b, 0x20, 0xcb, 0x2a, 0x42, 0x1d, 0xe1, 0x42, 0x43, 0x9a, 0x65, 0x04, 0xca, 0xb2, 0x7b, 0x6d, 0x01, 0x66, 0x9f, 0xc9, 0xc4, 0x11, 0x69, 0x3f, 0x3b, 0x8a, 0x55, 0x44, 0xe1, 0x80, 0xaa, 0x92, 0x0c, 0x93, 0x1e, 0x32, 0x5c, 0x90, 0x9b, 0x03, 0x10, 0x8a, 0x28, 0xda, 0xe2, 0x60, 0x2f, 0xa1, 0x97, 0xdc, 0x82, 0x4d, 0x3e, 0xcf, 0xdc, 0xec, 0x31, 0x33, 0x05, 0x32, 0xe8, 0x93, 0xbb, 0x98, 0xc7, 0x9e, 0xba, 0x46, 0x3c, 0x2a, 0xd8, 0x3f, 0xba, 0xca, 0x90, 0xdb, 0x51, 0x5a, 0x92, 0x57, 0x50, 0x59, 0x47, 0x2f, 0x0c, 0xb8, 0xb0, 0x35, 0xe2, 0x70, 0x9e, 0x63, 0xad, 0x63, 0xfb, 0x4c, 0x9f, 0xc3, 0x69, 0x46, 0x5e, 0x18, 0xc2, 0x40, 0xb3, 0xb9, 0xd1, 0x43, 0x48, 0x43, 0x1c, 0x7b, 0x72, 0x91, 0x6b, 0x20, 0x6b, 0xe7, 0x85, 0x13, 0x05, 0xa0, 0x03, 0x45, 0x3f, 0x51, 0x58, 0x5b, 0xd4, 0xaa, 0x51, 0x74, 0xf4, 0xd2, 0x1d, 0xa2, 0xd6, 0x4d, 0x76, 0x0e, 0xa4, 0x13, 0x4b, 0x0d, 0x75, 0xd7, 0x09, 0x3a, 0x02, 0x06, 0x52, 0x52, 0x56, 0x90, 0xe6, 0xa6, 0x03, 0x67, 0xfb, 0xa0, 0x1f, 0x87, 0x92, 0x40, 0xcb, 0x76, 0x23, 0x57, 0x72, 0x55, 0x18, 0xa2, 0xf9, 0xea, 0x5a, 0xed, 0x9e, 0x4a, 0x7a, 0x3b, 0x85, 0xe5, 0x7e, 0xbc, 0x47, 0x7e, 0x7c, 0xdd, 0x76, 0xab, 0xfe, 0xc2, 0x78, 0x55, 0x22, 0xad, 0xc4, 0x72, 0xfc, 0x8c, 0xe5, 0xf8, 0x55, 0x37, 0x09, 0x09, 0x6b, 0x69, 0x64, 0xdf, 0x3f, 0xf7, 0x09, 0x6e, 0x85, 0x61, 0x91, 0x41, 0x10, 0x1b, 0xd2, 0xcc, 0x30, 0x1a, 0x4f, 0xb8, 0xe7, 0x9e, 0x97, 0xa0, 0x75, 0xcc, 0xf9, 0x5b, 0x6f, 0x23, 0x50, 0x13, 0x4c, 0x6d, 0xd3, 0xe8, 0x9c, 0x26, 0x2f, 0x0c, 0x8b, 0xc5, 0x51, 0x5b, 0xe5, 0x81, 0x39, 0xd6, 0x73, 0x87, 0xfe, 0x60, 0xcc, 0x3d, 0x2f, 0x7c, 0x19, 0x67, 0xce, 0x5c, 0x40, 0x76, 0x44, 0x94, 0xfc, 0x4d, 0x92, 0x6d, 0x5e, 0x13, 0x84, 0x01, 0xdb, 0xe7, 0x2e, 0xb0, 0xbe, 0xb1, 0x4d, 0xbf, 0x3f, 0xac, 0x11, 0xb7, 0x29, 0x97, 0x2e, 0x7e, 0x99, 0xf9, 0xec, 0xb0, 0xfe, 0xfc, 0x7e, 0x43, 0x99, 0xac, 0xad, 0x73, 0xcf, 0xbd, 0x2f, 0x62, 0x30, 0xec, 0x33, 0x5f, 0x1c, 0xf2, 0xf8, 0xe3, 0x8f, 0x91, 0x17, 0x86, 0x74, 0xb1, 0x87, 0x50, 0x10, 0x2a, 0xd9, 0x06, 0xca, 0x24, 0x89, 0x10, 0x52, 0x20, 0x55, 0x80, 0x10, 0xba, 0x93, 0xe0, 0xd7, 0x24, 0x22, 0x4c, 0xed, 0x4f, 0x00, 0x41, 0xb0, 0x1c, 0xc5, 0x6c, 0x7a, 0x96, 0x27, 0x5d, 0xa9, 0x5c, 0x4b, 0x22, 0x92, 0x52, 0xd0, 0xeb, 0xe9, 0x5a, 0x98, 0xc6, 0xb7, 0x87, 0xc2, 0x50, 0xd7, 0xff, 0xdf, 0x07, 0x7e, 0x63, 0x2c, 0x55, 0x69, 0x10, 0x12, 0xa2, 0x48, 0xb7, 0xc4, 0xc5, 0xa5, 0xc8, 0x87, 0xbf, 0x57, 0x8d, 0x6a, 0x1c, 0xc0, 0x7f, 0xf8, 0xff, 0x3e, 0x78, 0x62, 0xdc, 0xee, 0x7f, 0xf9, 0xeb, 0x7f, 0x1d, 0xad, 0x15, 0xfd, 0x41, 0xec, 0x49, 0xbc, 0x65, 0x55, 0x57, 0xb5, 0x8d, 0x55, 0xa6, 0xdf, 0xd0, 0x75, 0xa0, 0x18, 0x0c, 0x63, 0xb4, 0x0a, 0x58, 0x2c, 0x2a, 0x9c, 0x83, 0xd1, 0x78, 0xcc, 0x37, 0xbd, 0xe4, 0xa5, 0x0c, 0x86, 0x1b, 0xf4, 0x12, 0x8f, 0xc8, 0xb9, 0xba, 0x5f, 0x8a, 0xa9, 0x15, 0xbf, 0xa4, 0x22, 0x8c, 0x22, 0xce, 0xde, 0x72, 0x3b, 0x83, 0xe1, 0x84, 0xaa, 0xf4, 0x63, 0x49, 0x08, 0x41, 0x10, 0x84, 0x8c, 0xc6, 0x6b, 0x6d, 0xa2, 0xb5, 0xd2, 0x5b, 0x0f, 0x23, 0xd6, 0xd6, 0xb7, 0xfc, 0xbd, 0xee, 0x8f, 0xb8, 0xe7, 0xde, 0x97, 0xd7, 0xc1, 0xfa, 0x64, 0x62, 0x29, 0xa5, 0x6a, 0x03, 0xfe, 0x69, 0xf6, 0x9d, 0xc6, 0x54, 0xcf, 0x81, 0xcc, 0x28, 0xaa, 0xaa, 0xa4, 0xaa, 0xe0, 0x4b, 0x5f, 0xfa, 0x12, 0x83, 0xbe, 0x77, 0xf4, 0x9a, 0x4c, 0xb6, 0xa8, 0x8a, 0xac, 0x8d, 0x1b, 0xba, 0xee, 0xcf, 0x0f, 0x87, 0xc3, 0x1a, 0x82, 0xaf, 0xda, 0x20, 0x39, 0x1a, 0x8d, 0x58, 0x5b, 0x5b, 0xe3, 0xcc, 0x99, 0x33, 0x0c, 0x06, 0x23, 0x02, 0xdd, 0x63, 0x36, 0x5d, 0x78, 0xcd, 0x0f, 0x4b, 0xed, 0x4f, 0x51, 0x21, 0x85, 0xc1, 0x51, 0x11, 0x6a, 0x85, 0x92, 0x31, 0x3a, 0xe8, 0x33, 0x1a, 0x8d, 0xeb, 0xc2, 0xb1, 0xa0, 0x92, 0x02, 0x6b, 0x03, 0xac, 0xf1, 0x5a, 0x25, 0x0d, 0x91, 0xac, 0x11, 0x7f, 0x69, 0x88, 0x6e, 0xcd, 0xfb, 0x8e, 0xa2, 0xa8, 0x56, 0xd1, 0x5c, 0x8e, 0xa4, 0x35, 0xe2, 0x33, 0x8d, 0xe9, 0xd6, 0xf4, 0xe0, 0xda, 0x09, 0x03, 0x96, 0x86, 0x95, 0x5e, 0x55, 0x55, 0x3b, 0x0f, 0x7e, 0x9a, 0xb1, 0x8a, 0xff, 0x3b, 0xb3, 0xb2, 0x27, 0x74, 0x2b, 0xf5, 0xd3, 0x8a, 0x98, 0x26, 0x10, 0x37, 0x5f, 0xbe, 0xa5, 0xe0, 0x5b, 0x4c, 0x5d, 0xe8, 0xbe, 0xd1, 0x4b, 0x09, 0x23, 0xbd, 0xa2, 0xee, 0xd7, 0x50, 0x70, 0x1b, 0xc3, 0x9c, 0xa3, 0xd9, 0x02, 0xad, 0x03, 0xaa, 0xce, 0x6d, 0xd4, 0x8b, 0x79, 0x46, 0x59, 0xcf, 0x73, 0x77, 0x65, 0x32, 0xbb, 0x8b, 0x49, 0x34, 0x62, 0x2b, 0xc2, 0xeb, 0xad, 0xbb, 0x7a, 0x23, 0xbd, 0x78, 0xf1, 0x62, 0xcb, 0x6c, 0xec, 0xf5, 0xbc, 0x28, 0x4a, 0x32, 0xec, 0xc3, 0xa8, 0xee, 0x21, 0x9c, 0x52, 0x29, 0x35, 0xd9, 0x54, 0x03, 0x9d, 0x45, 0xa1, 0x46, 0xd5, 0xc4, 0x83, 0x30, 0xd2, 0xb5, 0x28, 0x8d, 0x1f, 0x7d, 0x98, 0x4e, 0xe7, 0x48, 0x21, 0x08, 0x03, 0x8d, 0x35, 0x39, 0xd3, 0xa9, 0x57, 0x5a, 0x53, 0xca, 0x5f, 0x68, 0xa3, 0x3c, 0xe9, 0xc1, 0x5a, 0x8b, 0xb3, 0x1a, 0x67, 0x57, 0xc9, 0x09, 0x79, 0xba, 0xec, 0x8f, 0xe0, 0xbc, 0x11, 0x81, 0xe9, 0xf4, 0xf2, 0xe3, 0x08, 0x9c, 0x52, 0x04, 0x2a, 0xc0, 0x05, 0x21, 0xa5, 0xf1, 0x9b, 0x7c, 0x96, 0x67, 0x2c, 0xe6, 0x19, 0x5a, 0x87, 0xde, 0xcd, 0xec, 0x70, 0x06, 0xc6, 0x91, 0x65, 0x15, 0x18, 0xc5, 0x62, 0x91, 0x52, 0x96, 0x06, 0xa1, 0xe1, 0xe8, 0xe8, 0x88, 0x38, 0x8e, 0x29, 0xf3, 0x82, 0xb5, 0xb5, 0x35, 0xe2, 0x38, 0x6e, 0x33, 0x55, 0x21, 0x05, 0x47, 0x47, 0x73, 0x74, 0x50, 0x30, 0x18, 0x4e, 0x08, 0xa3, 0x1e, 0x3a, 0x88, 0xc9, 0x2a, 0x8b, 0x11, 0x96, 0x2b, 0xcf, 0xec, 0x33, 0x99, 0x4c, 0x38, 0x7f, 0xe1, 0x4e, 0x06, 0x83, 0x3d, 0xae, 0x5c, 0xb9, 0xcc, 0x7c, 0x3e, 0x43, 0x0a, 0x87, 0x92, 0x01, 0xce, 0x15, 0xec, 0xef, 0x1f, 0x62, 0xab, 0xda, 0xb9, 0xae, 0x97, 0x90, 0x65, 0x19, 0xce, 0x54, 0xf4, 0x07, 0x09, 0x22, 0x3f, 0x87, 0x54, 0x25, 0x8a, 0x19, 0xce, 0x4a, 0x2a, 0x6b, 0xe9, 0x25, 0xeb, 0x50, 0xf5, 0x39, 0xb3, 0x7e, 0x07, 0xd3, 0xfd, 0x2b, 0xfc, 0xe6, 0x6f, 0xee, 0xf1, 0xe4, 0xd7, 0xce, 0x31, 0xea, 0x9d, 0xf3, 0x23, 0x1b, 0xb1, 0x61, 0x92, 0x24, 0x8c, 0xf4, 0x01, 0x55, 0xf5, 0x71, 0xf2, 0xd2, 0x92, 0x09, 0x90, 0x13, 0xcd, 0x60, 0xac, 0x39, 0xd3, 0x73, 0x3c, 0x33, 0x13, 0x18, 0xe3, 0x18, 0x8d, 0x34, 0xe3, 0xd1, 0xd0, 0xdb, 0xf4, 0x09, 0x8d, 0x92, 0x50, 0xda, 0x92, 0x73, 0x67, 0x06, 0x48, 0x29, 0x28, 0x73, 0x49, 0x53, 0x1a, 0x5b, 0x6b, 0x3b, 0x7a, 0xe7, 0x50, 0x55, 0xc1, 0xb3, 0x56, 0xbd, 0x9e, 0x7c, 0xbc, 0x6a, 0xa7, 0xdb, 0xfc, 0xec, 0xd7, 0xa1, 0x57, 0xe7, 0xeb, 0xc7, 0x4b, 0x8b, 0xd1, 0x96, 0xdc, 0x14, 0x78, 0x13, 0x88, 0x3c, 0xcd, 0x6a, 0x18, 0x5b, 0xb6, 0x43, 0xdb, 0x42, 0x8a, 0x56, 0x9a, 0x25, 0x3c, 0x56, 0xb9, 0x9c, 0x70, 0x3e, 0x52, 0xfa, 0x54, 0x6b, 0xc3, 0x96, 0x50, 0x53, 0x2c, 0xc7, 0x4d, 0xba, 0xfd, 0xf3, 0xa6, 0x1d, 0xe5, 0x93, 0x4c, 0x58, 0x72, 0x77, 0x5c, 0x3b, 0x5f, 0x6d, 0xad, 0xf7, 0x75, 0x6e, 0x1e, 0x40, 0xbf, 0x06, 0x3d, 0x64, 0x66, 0x8d, 0xc5, 0xe0, 0x28, 0x9c, 0x64, 0x6d, 0x6d, 0x9d, 0xfb, 0x5e, 0xf6, 0x0a, 0x92, 0x64, 0xc0, 0x78, 0xb2, 0xcd, 0xd9, 0xb3, 0xe7, 0xb9, 0x7a, 0x65, 0x8f, 0x30, 0x8c, 0x31, 0x36, 0xa4, 0x28, 0x72, 0xf2, 0xa2, 0x62, 0xb8, 0x76, 0x8e, 0xfb, 0xbf, 0xe5, 0x75, 0xde, 0xdd, 0xd2, 0x09, 0xf2, 0xbc, 0x20, 0x90, 0xd5, 0x89, 0xeb, 0xaa, 0x95, 0xa2, 0x3f, 0x18, 0x11, 0x04, 0x21, 0xe6, 0x58, 0x65, 0x8a, 0xb0, 0x6d, 0x41, 0xd6, 0xeb, 0xf7, 0xb9, 0xfb, 0x9e, 0x97, 0x12, 0xc7, 0x09, 0x3a, 0x88, 0x00, 0xc1, 0x68, 0xb2, 0xc9, 0x78, 0xb2, 0xd5, 0x6e, 0xf4, 0xd6, 0x94, 0xbe, 0xf7, 0x17, 0x48, 0x92, 0x7e, 0x8f, 0x20, 0x0a, 0x99, 0xc4, 0x31, 0x67, 0x0b, 0x4b, 0x69, 0x14, 0x7b, 0x57, 0x1e, 0x6d, 0x15, 0xab, 0x8c, 0xf1, 0x04, 0x41, 0x6b, 0xbd, 0xf3, 0x6b, 0x59, 0x78, 0xdb, 0xcc, 0x28, 0x0a, 0x48, 0x92, 0x88, 0x30, 0x52, 0x5e, 0xfd, 0xcb, 0xf9, 0x99, 0x5a, 0xeb, 0x2a, 0xc2, 0x70, 0x89, 0xda, 0x75, 0xc7, 0x86, 0x9a, 0x7e, 0x63, 0x59, 0x4f, 0x2b, 0xac, 0xda, 0x54, 0x36, 0x64, 0x47, 0x81, 0xa3, 0x3b, 0x37, 0xec, 0x27, 0x03, 0xbc, 0x35, 0x71, 0x80, 0xb1, 0xa6, 0x36, 0xdd, 0x58, 0x0a, 0x43, 0x2d, 0x19, 0xc8, 0x5e, 0xbc, 0xa6, 0xf1, 0x1a, 0xe8, 0x12, 0x03, 0x9b, 0x60, 0xee, 0x49, 0x91, 0x3e, 0x41, 0x88, 0x42, 0xed, 0xd7, 0x5c, 0x0d, 0x89, 0x36, 0x7b, 0xa3, 0x73, 0x39, 0x4a, 0x2b, 0xc2, 0x20, 0xc6, 0xa1, 0x88, 0x22, 0x49, 0x18, 0xf7, 0x58, 0x5f, 0xdb, 0x22, 0x49, 0xc6, 0x6c, 0x6d, 0xdf, 0xe1, 0x83, 0x9e, 0x10, 0x54, 0xc6, 0x60, 0x9d, 0xac, 0x93, 0x1c, 0x5f, 0xf9, 0xda, 0xca, 0xb3, 0xef, 0x7b, 0xfd, 0xd1, 0x8a, 0xba, 0x58, 0x83, 0x68, 0x36, 0x68, 0x69, 0x77, 0xfd, 0xf6, 0xfa, 0x43, 0xee, 0x7f, 0xe5, 0xb7, 0x79, 0x56, 0x79, 0x1b, 0xb0, 0x97, 0x9e, 0x04, 0xdd, 0x75, 0xbc, 0xb4, 0xff, 0x34, 0x2d, 0x9c, 0x7f, 0x7c, 0x8d, 0x8b, 0xeb, 0xb4, 0xaf, 0xfc, 0xfd, 0x5f, 0x9e, 0xbf, 0x09, 0x82, 0xfd, 0x7e, 0x9f, 0x20, 0x50, 0x60, 0x2b, 0x7a, 0x3d, 0x4d, 0x5e, 0xa4, 0xb5, 0x0d, 0xb6, 0x6f, 0x99, 0x16, 0x65, 0x86, 0xd6, 0x3e, 0x90, 0x1b, 0x57, 0x31, 0x4f, 0x33, 0x9c, 0x80, 0x73, 0xb7, 0x9c, 0xe7, 0xe0, 0x70, 0x4a, 0xbf, 0x27, 0x98, 0xcd, 0x73, 0xa4, 0xac, 0x88, 0x7b, 0x31, 0xd6, 0x29, 0x14, 0x12, 0xe3, 0x04, 0xe9, 0x62, 0xc6, 0x6e, 0x3e, 0xe5, 0xf0, 0x68, 0x87, 0xdd, 0x6b, 0x97, 0x81, 0x8c, 0xf9, 0x7c, 0x4a, 0x9a, 0xcd, 0x90, 0x54, 0x5e, 0xb1, 0xb4, 0xd3, 0x06, 0x6b, 0x46, 0xe0, 0x1a, 0x7f, 0xf0, 0xae, 0x60, 0x4b, 0x37, 0x99, 0x6f, 0x60, 0xf8, 0x6e, 0x41, 0xea, 0xcd, 0x62, 0xe4, 0x4a, 0x4c, 0x3a, 0x5e, 0x70, 0x36, 0x63, 0x6f, 0x0d, 0x83, 0xbe, 0x0b, 0xab, 0xfb, 0x4a, 0xd9, 0x2c, 0xc7, 0x9e, 0x6b, 0xd6, 0x7b, 0x37, 0x39, 0x58, 0x5a, 0x7d, 0xd3, 0x16, 0x34, 0x8d, 0xca, 0x9b, 0x77, 0x50, 0x2b, 0x6a, 0x41, 0x34, 0x5d, 0x43, 0xee, 0xab, 0x6d, 0xe9, 0xee, 0x3d, 0xa9, 0xaa, 0x5a, 0x67, 0x5e, 0x34, 0x6d, 0xb2, 0x26, 0x01, 0xa6, 0xb6, 0x0c, 0xf7, 0xf7, 0x5b, 0x0f, 0x87, 0xc3, 0x15, 0xb1, 0x92, 0x65, 0x06, 0xa0, 0xda, 0xec, 0xa5, 0x61, 0x0e, 0x37, 0xa3, 0x6d, 0xcd, 0x45, 0xdb, 0xde, 0xde, 0x3e, 0x06, 0x45, 0x3a, 0xa6, 0xd3, 0x79, 0x0b, 0xd1, 0x87, 0x81, 0x38, 0x31, 0xcf, 0xd7, 0xcd, 0x70, 0x92, 0xa4, 0x8f, 0xd6, 0x21, 0xb3, 0xd9, 0x11, 0xce, 0xf9, 0xd9, 0x42, 0xa5, 0x14, 0xfd, 0x7e, 0xe2, 0x59, 0xdc, 0x71, 0xc2, 0x7c, 0x9e, 0x92, 0x67, 0x0b, 0xaf, 0x82, 0x23, 0x25, 0xfd, 0xd1, 0x80, 0x30, 0xf4, 0x0a, 0x6c, 0x41, 0xe2, 0x49, 0x1c, 0x4b, 0x16, 0xa1, 0xbf, 0x79, 0x45, 0xee, 0x83, 0xf6, 0x30, 0xee, 0x2f, 0x37, 0x34, 0x9a, 0xf9, 0x41, 0x41, 0x54, 0x1b, 0xc7, 0x17, 0x25, 0x54, 0x99, 0xa2, 0x14, 0xbe, 0xa7, 0x57, 0x1a, 0x41, 0x59, 0xa5, 0x14, 0x85, 0x67, 0x50, 0xf6, 0x92, 0x0d, 0x46, 0xc3, 0x75, 0xe2, 0x38, 0x21, 0x54, 0x21, 0x49, 0x62, 0xb0, 0x95, 0xc1, 0x5a, 0x08, 0x42, 0x49, 0x65, 0x3c, 0x53, 0x3a, 0x0a, 0x13, 0xe6, 0xb3, 0x19, 0xbd, 0x5e, 0x8f, 0xdd, 0xdd, 0x7d, 0x8c, 0xf1, 0x46, 0xf4, 0xcd, 0x45, 0x4e, 0x92, 0x21, 0x3a, 0x48, 0x40, 0x47, 0xe4, 0x06, 0x74, 0x90, 0x10, 0xf6, 0x86, 0xa4, 0x87, 0x25, 0xd7, 0xf6, 0xae, 0xd0, 0x4f, 0x22, 0x82, 0x40, 0xd3, 0x1f, 0x84, 0x4c, 0x67, 0x19, 0x45, 0x55, 0x30, 0xe8, 0xf5, 0xc8, 0xd2, 0x9c, 0xaa, 0xf2, 0xca, 0x7a, 0x51, 0x0c, 0xfd, 0xa1, 0x46, 0x63, 0xe1, 0x55, 0x6a, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x28, 0x41, 0x59, 0x18, 0x94, 0xae, 0xe8, 0x0f, 0xc6, 0x38, 0x99, 0x53, 0x54, 0x0e, 0x6c, 0x81, 0x90, 0x25, 0x59, 0x65, 0x28, 0xdd, 0x11, 0xbb, 0x8b, 0xaf, 0x31, 0x1e, 0x0d, 0x78, 0xf0, 0xe3, 0xbf, 0x47, 0xd8, 0xeb, 0x71, 0x65, 0xf1, 0x25, 0x16, 0xe9, 0x9c, 0xb5, 0x8d, 0x01, 0x8f, 0x7e, 0xee, 0x80, 0xde, 0x30, 0xa4, 0x17, 0x09, 0x16, 0x8b, 0x92, 0x2c, 0x2f, 0x51, 0x41, 0x8c, 0x0e, 0x14, 0xa5, 0x83, 0x0b, 0xe7, 0x43, 0x4a, 0x63, 0x09, 0x64, 0x84, 0x94, 0xca, 0x3b, 0xd5, 0x95, 0x96, 0x2c, 0xcb, 0xa9, 0xb2, 0x02, 0x9c, 0x41, 0x05, 0x01, 0x49, 0x2d, 0xa1, 0xe9, 0x9c, 0xc3, 0xe2, 0xb3, 0x75, 0x27, 0x96, 0x7d, 0xaa, 0x26, 0x43, 0x5e, 0x55, 0x47, 0x5a, 0x3e, 0x18, 0x4d, 0x40, 0x6f, 0xfb, 0xe7, 0xba, 0x3b, 0xea, 0x61, 0x56, 0x1e, 0x8c, 0xee, 0xcf, 0x0d, 0xb9, 0x24, 0x78, 0x96, 0x80, 0xdc, 0xf4, 0xcd, 0x4e, 0x53, 0x80, 0x6b, 0x5b, 0x46, 0x86, 0x13, 0x86, 0x09, 0xdd, 0x8a, 0x5d, 0x88, 0x25, 0xdc, 0xd5, 0x3c, 0x0b, 0x4d, 0x00, 0x12, 0x42, 0x50, 0x1a, 0x7b, 0xac, 0xf2, 0x91, 0xc8, 0x8e, 0xcf, 0xb2, 0x92, 0x51, 0x2b, 0x45, 0x59, 0xe4, 0x4b, 0x06, 0xbe, 0xd7, 0x74, 0x88, 0x59, 0x5f, 0xf3, 0x24, 0xa5, 0xf9, 0x42, 0xb0, 0x7f, 0x70, 0xc8, 0xfe, 0xbe, 0x65, 0xb1, 0xf0, 0x90, 0x64, 0x12, 0x0b, 0x82, 0x24, 0x44, 0x87, 0x11, 0xae, 0x6e, 0x61, 0xa9, 0x38, 0x6a, 0x99, 0xbb, 0x22, 0x2e, 0x18, 0xa9, 0xa4, 0x49, 0x93, 0xdb, 0x80, 0xbd, 0x54, 0xc4, 0xb3, 0x4b, 0x7f, 0x79, 0xd1, 0xd5, 0x88, 0xa7, 0x7d, 0x0e, 0x1a, 0x18, 0xd6, 0xfb, 0xaf, 0x4b, 0x02, 0xdd, 0x63, 0x34, 0xae, 0xe7, 0xd3, 0x9d, 0x44, 0x48, 0x53, 0xc3, 0x8f, 0x25, 0xd6, 0x95, 0x94, 0xa5, 0xf4, 0x06, 0x21, 0xaa, 0x47, 0x9c, 0x4c, 0xc8, 0x52, 0xd3, 0xba, 0x53, 0x09, 0xa1, 0x3d, 0xe4, 0xa7, 0x96, 0x96, 0xb0, 0x49, 0x14, 0x7a, 0x55, 0xc5, 0xcc, 0xf3, 0x73, 0xa4, 0xb4, 0x48, 0xe5, 0xdb, 0x37, 0x42, 0x6a, 0x9c, 0x35, 0xed, 0x75, 0xed, 0x56, 0x31, 0x5d, 0x15, 0xbf, 0xa6, 0x7a, 0xef, 0x6e, 0xc6, 0xad, 0x74, 0x6f, 0x7d, 0xff, 0x7d, 0x02, 0x68, 0x3a, 0xd3, 0x12, 0xfe, 0xf3, 0x2b, 0x15, 0xae, 0xcc, 0x07, 0xfb, 0xf3, 0x18, 0x8c, 0x71, 0x7c, 0xf6, 0x8b, 0x4f, 0xb4, 0x73, 0xeb, 0xdd, 0x8e, 0xcc, 0x07, 0x3e, 0xf0, 0x9b, 0xed, 0x35, 0x8a, 0xc2, 0x90, 0xc1, 0xa0, 0x8f, 0x40, 0xb5, 0x85, 0x83, 0x35, 0x02, 0x67, 0xeb, 0x35, 0x24, 0x40, 0xc8, 0x10, 0xa5, 0xfb, 0x24, 0xf1, 0x90, 0xa4, 0x3f, 0x62, 0x6d, 0xb2, 0xc5, 0xc6, 0xd6, 0x16, 0x93, 0xf1, 0x3a, 0xa5, 0x0d, 0x30, 0xa6, 0xee, 0xc1, 0xd6, 0xc9, 0x9d, 0xc0, 0xb3, 0x88, 0x85, 0x94, 0x48, 0x5b, 0x9c, 0x20, 0x6d, 0xae, 0x56, 0xd0, 0xe6, 0x14, 0x62, 0xa7, 0x60, 0x30, 0x5a, 0x6b, 0xa7, 0x1c, 0x9f, 0x8d, 0x07, 0xb2, 0x4c, 0x3c, 0x4e, 0x56, 0x8a, 0x4d, 0x42, 0xfb, 0xec, 0x3a, 0x0b, 0x16, 0xad, 0x15, 0x47, 0x47, 0x47, 0xac, 0xaf, 0xaf, 0x93, 0xe7, 0xbe, 0x95, 0x39, 0x9d, 0xee, 0x73, 0xfe, 0xdc, 0x36, 0x76, 0xee, 0x09, 0xc8, 0xfe, 0xda, 0x54, 0x6d, 0x51, 0x17, 0xc7, 0x11, 0x67, 0xce, 0x9c, 0x41, 0x86, 0x3d, 0xae, 0xc9, 0x5d, 0x04, 0x9a, 0x0b, 0x17, 0x2e, 0x90, 0x2e, 0x0c, 0x61, 0x18, 0x33, 0x1e, 0xc7, 0x48, 0xa9, 0x29, 0xab, 0x8a, 0x40, 0xfb, 0x51, 0x5e, 0x9c, 0xa9, 0x49, 0x9f, 0x8e, 0xaa, 0x57, 0x90, 0x0d, 0x33, 0x16, 0xd3, 0xab, 0x2d, 0xbc, 0xde, 0x08, 0x3e, 0xf8, 0xcf, 0xe1, 0xaf, 0xa4, 0xe7, 0x74, 0x34, 0xba, 0x20, 0xf1, 0xca, 0x1c, 0x7a, 0x97, 0xf7, 0x52, 0x96, 0x9e, 0x7c, 0xd7, 0x8c, 0x61, 0x37, 0xfb, 0x53, 0x1c, 0xc7, 0xe4, 0x79, 0xde, 0xaa, 0x8c, 0x76, 0xe1, 0xf1, 0x86, 0x17, 0xd0, 0xed, 0x91, 0x77, 0xf7, 0xa1, 0xe3, 0x53, 0x2f, 0xdd, 0xff, 0xd7, 0xa0, 0xde, 0x0d, 0xd1, 0xb9, 0x5b, 0x14, 0x34, 0xc9, 0x45, 0xf3, 0xf3, 0x52, 0xdf, 0x5e, 0xb6, 0x8e, 0x9c, 0xcd, 0xbe, 0xb9, 0xaa, 0x30, 0x67, 0x5b, 0x7e, 0x5a, 0x33, 0x79, 0xe6, 0xd5, 0x4f, 0x2d, 0xb9, 0x59, 0x8e, 0xcd, 0xe9, 0xa2, 0xa8, 0xda, 0x93, 0x34, 0x5f, 0x0d, 0xc4, 0x3e, 0x99, 0x4c, 0xda, 0x40, 0xbc, 0xcc, 0x4c, 0x5c, 0xcd, 0x32, 0xf4, 0x8b, 0xbc, 0x21, 0x1b, 0x68, 0x1d, 0xd6, 0xd5, 0x8a, 0x23, 0x8a, 0x4c, 0x3d, 0x0f, 0x9c, 0xae, 0x24, 0x09, 0xdd, 0x0f, 0xe7, 0x47, 0x7e, 0x34, 0x52, 0x84, 0x48, 0x11, 0x7a, 0xdb, 0x37, 0x2c, 0xc6, 0xf8, 0xf1, 0x35, 0xe7, 0x04, 0xd7, 0xae, 0x5d, 0xc3, 0xb9, 0xc6, 0xd0, 0xbd, 0x62, 0x3e, 0x5b, 0x20, 0xa5, 0xa6, 0xdf, 0xf7, 0x0a, 0x41, 0x57, 0xf7, 0x2e, 0xfb, 0x3e, 0x4a, 0x10, 0xd7, 0x1b, 0xad, 0xc2, 0x39, 0xd1, 0x22, 0x0d, 0x8b, 0xd9, 0x32, 0x5b, 0x6b, 0x46, 0xdb, 0x7a, 0xbd, 0x5e, 0x6b, 0x06, 0x3f, 0x1c, 0x9c, 0xf3, 0x09, 0x40, 0x65, 0xbc, 0x22, 0x9c, 0x85, 0x30, 0xb0, 0x0c, 0xfa, 0x1a, 0xa9, 0x15, 0x3b, 0x3b, 0x05, 0x9b, 0x9b, 0xdb, 0x0c, 0x87, 0xc3, 0x25, 0xf3, 0xd3, 0xc1, 0xc1, 0xc1, 0x81, 0x67, 0x23, 0x2e, 0x3c, 0x8b, 0xb6, 0x11, 0xc4, 0x98, 0x1e, 0xcd, 0xd9, 0xdb, 0xdd, 0x25, 0x8e, 0x63, 0xd6, 0xd7, 0x37, 0xdb, 0x05, 0x37, 0x1a, 0x4e, 0xea, 0xb1, 0x1b, 0xc9, 0x22, 0x4b, 0x09, 0xa2, 0x10, 0x53, 0x59, 0xd6, 0x37, 0xfa, 0xec, 0xec, 0xec, 0x70, 0x75, 0x6f, 0x87, 0x61, 0x2f, 0x21, 0x19, 0x04, 0x9c, 0xbf, 0x75, 0x93, 0x3c, 0xf7, 0xc8, 0xc2, 0x8b, 0x5e, 0x74, 0xb6, 0x66, 0xd0, 0x57, 0x18, 0x37, 0x63, 0xb6, 0x48, 0x11, 0xc2, 0x91, 0xf4, 0x21, 0x8a, 0x0c, 0x71, 0x75, 0x95, 0xc2, 0x19, 0xb4, 0xb3, 0xc4, 0x22, 0x42, 0xe8, 0x90, 0xb4, 0x98, 0x12, 0x0c, 0x0c, 0xb3, 0xf2, 0x1a, 0x71, 0xfa, 0x0a, 0xf6, 0xf6, 0x9f, 0xe6, 0xee, 0xbb, 0xcf, 0xa1, 0x93, 0x03, 0xc6, 0x6a, 0xc2, 0x64, 0x6b, 0x83, 0x67, 0xae, 0xee, 0x32, 0x1c, 0x6f, 0x60, 0xb2, 0x94, 0x20, 0x2c, 0x31, 0xb6, 0xf0, 0x7a, 0xf6, 0x2e, 0x24, 0x89, 0x14, 0x8a, 0x7a, 0x92, 0x41, 0xcc, 0x31, 0x95, 0x27, 0x87, 0x09, 0x21, 0x91, 0x54, 0x28, 0xa7, 0x71, 0x16, 0x44, 0x05, 0x42, 0x17, 0x35, 0xf0, 0xe9, 0xd9, 0xd3, 0x42, 0x8a, 0x16, 0x36, 0x6c, 0x32, 0xdc, 0x26, 0x18, 0x36, 0x19, 0x72, 0xd7, 0x89, 0xa8, 0x21, 0xb7, 0xf8, 0x1e, 0xfd, 0x72, 0x7d, 0x74, 0x67, 0x3d, 0x8f, 0x3f, 0x40, 0x5d, 0xd8, 0x4a, 0x05, 0xe1, 0xe9, 0x95, 0x77, 0x87, 0x14, 0x77, 0xfc, 0xab, 0xfb, 0x3a, 0x69, 0x56, 0xae, 0xa0, 0x02, 0xcb, 0xcc, 0xbb, 0x0e, 0x7a, 0xf5, 0x28, 0x49, 0x23, 0x55, 0x39, 0x18, 0x0c, 0x98, 0x4c, 0x3c, 0x1f, 0x22, 0xcf, 0x73, 0xf6, 0x0e, 0xa6, 0xcb, 0x44, 0xa5, 0xe6, 0x79, 0xf8, 0x0d, 0xc3, 0x3f, 0xa0, 0x45, 0xb1, 0xd4, 0x61, 0x4e, 0x92, 0xa4, 0xed, 0xaf, 0x79, 0xa2, 0x51, 0x1f, 0xd5, 0xbb, 0xd5, 0x8b, 0x35, 0x85, 0x09, 0x4e, 0x48, 0x92, 0xb8, 0xcf, 0x70, 0xbc, 0xe6, 0x39, 0x25, 0x16, 0xf6, 0xa7, 0x87, 0x0c, 0x87, 0xde, 0x40, 0xa8, 0x2c, 0x72, 0x8c, 0xf3, 0x1b, 0x8f, 0x8e, 0x24, 0xbd, 0xa4, 0x8f, 0x38, 0x12, 0x6d, 0x9b, 0xc2, 0x7f, 0xf7, 0x49, 0x71, 0x13, 0xa4, 0x5b, 0xd1, 0x1b, 0xc1, 0x2a, 0xf4, 0x5e, 0x2f, 0x64, 0x21, 0x75, 0x27, 0x78, 0x2b, 0x70, 0xba, 0xbe, 0x77, 0x35, 0x21, 0x48, 0xd5, 0x1b, 0x95, 0x8a, 0x5a, 0xad, 0xed, 0xb2, 0xcc, 0x71, 0x2e, 0x22, 0x08, 0x86, 0x9c, 0xdd, 0xbe, 0xa3, 0x25, 0xca, 0x0e, 0xfa, 0x23, 0x06, 0x83, 0x51, 0x9d, 0xa4, 0x6b, 0x04, 0x92, 0x9d, 0x9d, 0x3d, 0x16, 0x8b, 0x19, 0x47, 0xd3, 0x43, 0x66, 0xb3, 0x03, 0xd2, 0xec, 0x88, 0xbc, 0x98, 0x53, 0x96, 0x39, 0xc6, 0x56, 0xc4, 0xe1, 0xea, 0xe4, 0x43, 0x97, 0x9b, 0x73, 0x5c, 0x0c, 0xa8, 0x1b, 0xec, 0xba, 0x30, 0x67, 0x23, 0x14, 0xd2, 0xef, 0xeb, 0x76, 0xfd, 0x98, 0xca, 0xb5, 0xe3, 0x3e, 0x65, 0xe9, 0xd1, 0x80, 0x2e, 0x71, 0xca, 0x9f, 0xd3, 0xb5, 0xc1, 0x5c, 0x29, 0x6f, 0x55, 0x3b, 0x9b, 0x4e, 0x49, 0xf3, 0x1d, 0x10, 0x10, 0x86, 0x7e, 0x1c, 0x48, 0xa0, 0xe9, 0xf5, 0xfa, 0xb5, 0x74, 0xe8, 0x98, 0xd1, 0xd0, 0x7b, 0x6d, 0x2b, 0xa5, 0xd8, 0x3e, 0x77, 0x16, 0x21, 0x7c, 0x52, 0x5f, 0x59, 0x89, 0x31, 0xe0, 0xd0, 0x7e, 0xdd, 0xd8, 0x00, 0x6b, 0x54, 0x3b, 0xa7, 0x28, 0x84, 0xc0, 0x49, 0x87, 0x45, 0x20, 0xad, 0xc4, 0x0a, 0x89, 0xae, 0x37, 0xec, 0x86, 0x43, 0x74, 0x92, 0x77, 0x71, 0x92, 0x59, 0xdd, 0xad, 0x20, 0x9b, 0x91, 0xf4, 0xd3, 0xe4, 0xdd, 0x8f, 0x57, 0x79, 0x27, 0x03, 0xfe, 0x73, 0x13, 0x3f, 0x9a, 0x64, 0x2a, 0xcb, 0xb2, 0x5a, 0x28, 0xc6, 0x74, 0x12, 0x28, 0xff, 0x95, 0x24, 0x09, 0x5a, 0x6b, 0x8e, 0x8e, 0x0e, 0x6a, 0x0f, 0xef, 0x01, 0xbd, 0x5e, 0xe2, 0xad, 0x3f, 0x3b, 0x53, 0x4d, 0xfb, 0xfb, 0xfb, 0x68, 0xd5, 0x67, 0xb1, 0xc8, 0x50, 0x32, 0x06, 0x07, 0x2a, 0x48, 0x90, 0xf5, 0xf3, 0x01, 0x96, 0x28, 0xec, 0xd3, 0xef, 0x27, 0x6c, 0x9d, 0xf1, 0x6a, 0x9b, 0xd7, 0xae, 0x3c, 0xc6, 0xd1, 0xd1, 0x01, 0x07, 0x87, 0x3b, 0xe4, 0xe9, 0x8c, 0xa2, 0xc8, 0x30, 0x55, 0x85, 0x10, 0x16, 0x29, 0xfc, 0x33, 0xd8, 0x88, 0x9f, 0x75, 0xa7, 0xa8, 0x1a, 0x84, 0xc7, 0xeb, 0x9b, 0x6b, 0x16, 0x8b, 0x45, 0x3d, 0xdd, 0xb4, 0x58, 0x3a, 0x55, 0xd6, 0xff, 0xd6, 0x5c, 0xe3, 0xd6, 0x24, 0xa6, 0xde, 0x0f, 0x1a, 0xe2, 0x74, 0xd7, 0x08, 0xa5, 0x89, 0x75, 0xcb, 0xaa, 0x39, 0xeb, 0x18, 0x76, 0xad, 0x9a, 0xa8, 0x34, 0xcf, 0x79, 0x97, 0x60, 0xd7, 0xbc, 0xc7, 0xe6, 0x35, 0x93, 0xa8, 0xd7, 0x0a, 0xdf, 0xf8, 0x78, 0xba, 0xd4, 0x4b, 0xd1, 0x3a, 0x38, 0x31, 0x0a, 0x27, 0xeb, 0xf1, 0x6d, 0x7f, 0x6e, 0x57, 0x4b, 0x9d, 0x67, 0x9e, 0x58, 0x2e, 0x35, 0x51, 0x98, 0xa0, 0x27, 0x93, 0xc9, 0xca, 0xe6, 0xd9, 0x7c, 0x38, 0x6b, 0x2d, 0xd3, 0xe9, 0xf4, 0xc4, 0x0c, 0x5d, 0xf7, 0x81, 0x5a, 0x0a, 0xd4, 0x77, 0x7a, 0x91, 0x96, 0x5a, 0x1f, 0x5d, 0x10, 0x0f, 0x06, 0x2b, 0xa2, 0x2e, 0xc7, 0x2b, 0x36, 0x57, 0x79, 0xf7, 0x9b, 0xb2, 0xac, 0x50, 0x22, 0xa6, 0xac, 0x72, 0xa6, 0xd3, 0x43, 0xca, 0xc2, 0xcb, 0xb7, 0x8e, 0x07, 0x7d, 0x2f, 0x02, 0x83, 0xa2, 0x97, 0xc4, 0x0c, 0x93, 0x51, 0x9d, 0x81, 0xc1, 0x62, 0xb1, 0xe0, 0xcc, 0x99, 0x8d, 0x56, 0xf6, 0xb5, 0x99, 0x43, 0x6e, 0x3c, 0xae, 0xc1, 0x12, 0x45, 0xc1, 0x0a, 0xe9, 0xa1, 0xd9, 0x50, 0xab, 0xaa, 0x24, 0xcb, 0x16, 0xe4, 0x8b, 0x98, 0xa2, 0xf2, 0xb6, 0xb0, 0x61, 0x18, 0x22, 0x94, 0xa4, 0xa8, 0x0c, 0x48, 0xcf, 0x7a, 0x1c, 0x0c, 0x26, 0xf5, 0x4c, 0xbd, 0x64, 0x76, 0x74, 0x84, 0xb5, 0x15, 0x71, 0x14, 0x20, 0x95, 0x37, 0x6c, 0x69, 0x82, 0xd5, 0xfe, 0xfe, 0x3e, 0x71, 0x18, 0xb5, 0xbd, 0xa4, 0x66, 0x94, 0x4d, 0x0a, 0xe5, 0xc5, 0x1b, 0x94, 0x62, 0xb6, 0x48, 0x49, 0xfa, 0xbd, 0xba, 0x1f, 0x28, 0x99, 0xce, 0x66, 0xe4, 0xb3, 0xfd, 0x5a, 0x97, 0xd7, 0x91, 0x17, 0x33, 0x0f, 0xd7, 0x6d, 0x0d, 0x90, 0xf4, 0x49, 0xb3, 0x05, 0x47, 0xd3, 0x1d, 0xfa, 0x83, 0x84, 0x28, 0x08, 0xb0, 0xae, 0xa0, 0xac, 0x13, 0x8f, 0x2a, 0x2b, 0x38, 0x38, 0xcc, 0x31, 0xe9, 0x23, 0x08, 0x0d, 0x3a, 0x9c, 0x40, 0xd0, 0x43, 0xc5, 0x9a, 0xe9, 0xfc, 0x19, 0xce, 0x9c, 0xed, 0x51, 0x8a, 0x03, 0xb0, 0x92, 0xcd, 0xb3, 0x43, 0x0a, 0xf7, 0x0c, 0x46, 0xef, 0x10, 0x8d, 0x02, 0x0e, 0xf3, 0x5d, 0x64, 0x2f, 0x62, 0x61, 0x40, 0x98, 0x10, 0x11, 0x08, 0x94, 0xf3, 0xd9, 0x64, 0x49, 0x41, 0x1c, 0xf4, 0x08, 0x95, 0x17, 0x35, 0x31, 0xb9, 0xc5, 0x78, 0x82, 0xb2, 0x27, 0x7e, 0xf4, 0x47, 0xb8, 0xb8, 0x8f, 0x70, 0x16, 0x2d, 0x25, 0x46, 0xa5, 0x38, 0x2b, 0x10, 0x5a, 0x11, 0x44, 0x31, 0x4a, 0x06, 0x54, 0xd6, 0x92, 0x97, 0x65, 0xad, 0x20, 0xb5, 0x6c, 0xdf, 0x34, 0x06, 0x3a, 0xdd, 0x4d, 0x59, 0x0b, 0xd9, 0x26, 0x91, 0x0d, 0x9c, 0xdd, 0x6c, 0x22, 0xdd, 0x2c, 0xfb, 0xf8, 0xb8, 0x5b, 0xfb, 0x1a, 0x76, 0x19, 0xa3, 0x44, 0xdd, 0x12, 0x6a, 0x84, 0x37, 0x8e, 0x67, 0xcc, 0x5d, 0x91, 0x88, 0x36, 0x60, 0xeb, 0x72, 0x25, 0xe1, 0x38, 0x6e, 0x7b, 0x68, 0x2a, 0xd1, 0x7e, 0x86, 0x20, 0x08, 0x58, 0x5b, 0x5b, 0xe3, 0xdc, 0xb9, 0x73, 0x04, 0x41, 0x40, 0x9a, 0xa6, 0x44, 0xc9, 0xa0, 0x75, 0x6e, 0x9a, 0xcf, 0xe7, 0x2b, 0x73, 0xb1, 0x0d, 0xef, 0x63, 0x32, 0xe9, 0x71, 0xee, 0xdc, 0x39, 0x6e, 0xbd, 0xf5, 0x56, 0x86, 0xc3, 0xe1, 0x8a, 0x19, 0x4d, 0xe1, 0x6e, 0x21, 0x0c, 0x43, 0xa6, 0xf3, 0x99, 0x27, 0x1d, 0x39, 0x48, 0x17, 0x19, 0xbd, 0xde, 0x80, 0xbc, 0x2c, 0xe8, 0x0f, 0x87, 0xc8, 0x40, 0x91, 0xe7, 0x29, 0x16, 0xe3, 0xdb, 0x2c, 0x5a, 0x90, 0x65, 0x29, 0xb3, 0xd9, 0x94, 0x35, 0xb5, 0xd9, 0x51, 0xb4, 0xf3, 0x88, 0x42, 0xa3, 0x6e, 0x27, 0x84, 0x5e, 0xba, 0x5b, 0xd4, 0xe6, 0x2f, 0x42, 0xe8, 0xfa, 0x62, 0xd9, 0x3a, 0x09, 0x0b, 0x5b, 0xee, 0x3d, 0xde, 0x25, 0xde, 0xff, 0x5c, 0xcf, 0xe7, 0x23, 0x1b, 0x3b, 0x64, 0x4f, 0x23, 0x57, 0x7e, 0x2c, 0x86, 0xf1, 0x48, 0x91, 0xc4, 0x03, 0x6e, 0xdd, 0xec, 0xd7, 0x5a, 0xd6, 0x11, 0x41, 0x10, 0xa1, 0x55, 0x80, 0x73, 0xa2, 0x65, 0xee, 0x6e, 0x6d, 0x9e, 0xc3, 0xe1, 0x17, 0x90, 0xa3, 0xa2, 0x28, 0x67, 0x4c, 0xa7, 0x07, 0xec, 0xed, 0xef, 0x70, 0x74, 0x74, 0xc0, 0x7c, 0x76, 0x65, 0x05, 0xbd, 0xe9, 0xee, 0x33, 0xab, 0xad, 0x39, 0x7b, 0x6a, 0x0f, 0xb8, 0x2c, 0x0b, 0xfa, 0xfd, 0x3e, 0x93, 0xc9, 0x84, 0xb5, 0xb5, 0x0d, 0xc6, 0xe3, 0x31, 0x51, 0x14, 0x51, 0x16, 0x86, 0x34, 0x4d, 0x79, 0xfc, 0xf1, 0xc7, 0xc9, 0xb2, 0x8c, 0xb2, 0xca, 0x57, 0x5e, 0x47, 0x0a, 0x81, 0xc0, 0xb4, 0xe2, 0x35, 0xbd, 0x7e, 0x8f, 0xd1, 0x68, 0xc0, 0x9f, 0xfe, 0x33, 0x6f, 0xa0, 0x28, 0x2a, 0xc6, 0xa3, 0x11, 0xb7, 0xdf, 0x71, 0x2b, 0x2f, 0xbc, 0xe7, 0x5e, 0xe2, 0xb8, 0xd7, 0xf6, 0x39, 0xbd, 0xf6, 0x45, 0x58, 0x27, 0x9d, 0x82, 0x22, 0x77, 0x78, 0x4f, 0x21, 0x85, 0x94, 0x21, 0x52, 0x2b, 0xac, 0x13, 0x1e, 0xd1, 0xaa, 0xc0, 0x52, 0xcf, 0xd2, 0x3b, 0x4f, 0xf4, 0x10, 0xd6, 0x61, 0x6b, 0x49, 0x5f, 0x89, 0xb7, 0x42, 0x3d, 0x9e, 0xa0, 0x74, 0x5b, 0x50, 0xcd, 0x5e, 0x72, 0x1c, 0xc1, 0x68, 0x51, 0x98, 0x63, 0x6e, 0x5e, 0xa7, 0xb9, 0x62, 0x1e, 0xe7, 0x87, 0x74, 0x83, 0xbc, 0x41, 0x5c, 0x97, 0xd1, 0xd9, 0x9d, 0x3c, 0x19, 0x8d, 0x46, 0x4c, 0xa7, 0x53, 0x5e, 0x78, 0xcf, 0x9d, 0x8c, 0x27, 0x03, 0xc2, 0x50, 0xb2, 0xbb, 0xbb, 0x8b, 0x15, 0x11, 0x93, 0xb5, 0x51, 0x8d, 0xc6, 0xa5, 0x44, 0x51, 0xe4, 0xed, 0x54, 0x95, 0xf2, 0x0c, 0xf8, 0x20, 0x21, 0x4a, 0x62, 0x8c, 0x55, 0x4c, 0xe7, 0x33, 0x6e, 0x3d, 0x7f, 0x16, 0x6b, 0x34, 0x61, 0x10, 0xe1, 0x9c, 0xc2, 0x22, 0x70, 0x12, 0x94, 0x54, 0x58, 0x67, 0x6a, 0xdf, 0x73, 0xeb, 0xe5, 0x51, 0x2b, 0xcb, 0xd6, 0xd6, 0x16, 0x5a, 0x4b, 0x8c, 0xcd, 0xc1, 0xfa, 0x56, 0x8d, 0xb3, 0x16, 0xad, 0xc2, 0xb6, 0x2a, 0x6f, 0x92, 0xeb, 0xf9, 0x7c, 0xce, 0x74, 0x3a, 0x65, 0x3e, 0x9f, 0xb7, 0x0a, 0x72, 0x4d, 0xbf, 0xbc, 0x99, 0x53, 0x6f, 0x84, 0x68, 0x9a, 0xd8, 0xd5, 0x3c, 0xfb, 0x8d, 0xbb, 0x59, 0xb7, 0xb5, 0x53, 0x14, 0x45, 0x5b, 0x35, 0x37, 0x7b, 0x53, 0x17, 0x4d, 0xf2, 0x76, 0xd6, 0xe5, 0xea, 0x3d, 0x73, 0x5e, 0x34, 0x49, 0xeb, 0xba, 0xf5, 0x53, 0x1b, 0xa9, 0x94, 0x55, 0xd9, 0x06, 0x72, 0xaf, 0x87, 0xe0, 0x39, 0x5c, 0xc2, 0xca, 0xb6, 0xb7, 0x1f, 0x04, 0x01, 0x79, 0x5e, 0xb4, 0xbf, 0x97, 0xc4, 0x7d, 0xf2, 0x22, 0x5d, 0x49, 0xce, 0x82, 0x40, 0x13, 0x45, 0x41, 0xbd, 0xf6, 0x9b, 0xe7, 0x95, 0x96, 0xf1, 0xbf, 0x36, 0xd9, 0x40, 0x0b, 0x59, 0x21, 0x5c, 0x6d, 0x32, 0xdf, 0x88, 0xdc, 0x1b, 0x45, 0x9e, 0x57, 0x8c, 0xc6, 0x49, 0xbb, 0x19, 0x37, 0x0a, 0x3c, 0xfe, 0x43, 0x81, 0xd6, 0x82, 0xc2, 0x6a, 0x64, 0xa0, 0x70, 0xda, 0x52, 0x89, 0xf2, 0x04, 0xa5, 0x7f, 0xe7, 0x68, 0x7e, 0x22, 0xab, 0xec, 0xaa, 0xd2, 0x8d, 0x7b, 0x23, 0x0e, 0xe7, 0x7b, 0x00, 0x1c, 0x2d, 0x0e, 0x5b, 0xf1, 0xfb, 0xd2, 0xa6, 0x84, 0x61, 0xc8, 0xc1, 0xbc, 0x24, 0x8a, 0x12, 0xac, 0xd2, 0xcc, 0x72, 0x2f, 0xde, 0xdf, 0x90, 0x67, 0x8a, 0xa2, 0xc0, 0xe9, 0x21, 0x8b, 0xf4, 0xb0, 0x1d, 0x51, 0xe8, 0xf7, 0xbd, 0xc4, 0x5f, 0x92, 0xd4, 0xb0, 0xac, 0x88, 0x7d, 0xf5, 0xa7, 0x22, 0x04, 0x21, 0x95, 0xd5, 0x80, 0x26, 0x2d, 0x32, 0xae, 0x5e, 0xbd, 0x46, 0x1e, 0x95, 0xdc, 0x7d, 0xf7, 0xdd, 0x5c, 0xb9, 0x72, 0x85, 0x6b, 0x87, 0x87, 0x6d, 0xff, 0x5b, 0x6b, 0x4d, 0x35, 0x5d, 0x50, 0x96, 0x87, 0x9c, 0x3f, 0x7f, 0x1e, 0x9b, 0x5b, 0x36, 0xcf, 0x6f, 0x92, 0xe7, 0x39, 0x4f, 0x3e, 0xf9, 0x24, 0x2a, 0x09, 0xb8, 0x7a, 0x65, 0x8f, 0x40, 0x49, 0xe6, 0x59, 0x4e, 0x6f, 0x14, 0x70, 0x74, 0xb4, 0x4f, 0x14, 0x25, 0x5c, 0xb8, 0xe3, 0x2c, 0xbb, 0xbb, 0xbb, 0x2c, 0x16, 0x0b, 0x8a, 0x32, 0x20, 0x8a, 0x23, 0x16, 0x8b, 0x05, 0x41, 0xa0, 0xb1, 0xf9, 0x9c, 0xd0, 0x1a, 0x8a, 0x83, 0x29, 0x03, 0x2d, 0x31, 0xd9, 0x11, 0x0e, 0x4b, 0xac, 0x14, 0x51, 0x18, 0xa0, 0xab, 0x92, 0xe2, 0xc0, 0x3b, 0xac, 0x85, 0xca, 0xf7, 0x57, 0xad, 0xb5, 0x3e, 0xa0, 0x8a, 0xc4, 0x57, 0x1c, 0xb9, 0x41, 0x88, 0x98, 0x38, 0xd2, 0xec, 0x15, 0x7b, 0x68, 0xa5, 0x91, 0x2a, 0x24, 0x50, 0x0a, 0x51, 0xc1, 0x5a, 0xef, 0x3c, 0xaa, 0x88, 0xd9, 0x88, 0xef, 0xa4, 0x28, 0x2f, 0xd7, 0x8b, 0x56, 0x11, 0x86, 0xb7, 0x32, 0x4f, 0x65, 0x1b, 0xbc, 0xac, 0xcd, 0xe9, 0x05, 0x8d, 0x2c, 0xa1, 0x64, 0x34, 0xf2, 0xb6, 0x80, 0xb3, 0xd9, 0x61, 0x3b, 0x25, 0x10, 0x86, 0x21, 0x3a, 0x00, 0xab, 0x2c, 0x65, 0x39, 0xa7, 0xac, 0x25, 0x07, 0x83, 0x30, 0x40, 0x04, 0x01, 0xc6, 0x28, 0x84, 0xf6, 0x96, 0x8e, 0xc6, 0x55, 0x2d, 0x9c, 0xae, 0xa4, 0x45, 0x06, 0x8e, 0x38, 0x5a, 0xca, 0x1d, 0x76, 0xf9, 0x19, 0x3e, 0xc0, 0x2a, 0xb4, 0x88, 0xb0, 0x36, 0x68, 0xd7, 0xcd, 0x71, 0x24, 0xc7, 0x51, 0xb6, 0x30, 0x5a, 0x03, 0xe1, 0x77, 0x85, 0x24, 0x84, 0x6d, 0xe6, 0x45, 0x97, 0x64, 0x96, 0x66, 0x0d, 0x49, 0xa9, 0x18, 0xd4, 0xf0, 0x71, 0x17, 0xba, 0x12, 0xc2, 0x33, 0x49, 0x93, 0x24, 0x61, 0xad, 0xda, 0xe5, 0xe0, 0xe0, 0x08, 0x6b, 0x04, 0x51, 0x94, 0x90, 0xe6, 0x86, 0x3c, 0xab, 0xb0, 0xb5, 0x6f, 0xb8, 0x8c, 0x02, 0xf2, 0xac, 0xe4, 0xc9, 0xa7, 0x0f, 0xb1, 0xd6, 0xb1, 0x33, 0x3d, 0x62, 0xf3, 0x96, 0xdb, 0xc8, 0x0b, 0x98, 0xe7, 0x82, 0xf5, 0xed, 0x2d, 0x66, 0xb3, 0x19, 0xc9, 0x68, 0x40, 0x7c, 0x34, 0xf5, 0x8a, 0x80, 0xd7, 0x76, 0x38, 0x77, 0xce, 0x23, 0x3f, 0xb7, 0xdf, 0x7e, 0x3b, 0x3a, 0x0c, 0x90, 0x52, 0x73, 0xb4, 0x48, 0x09, 0x7a, 0x03, 0x82, 0xb0, 0x47, 0x51, 0x94, 0x58, 0x03, 0x5a, 0x17, 0x64, 0x65, 0xce, 0xc1, 0xe1, 0x35, 0xf6, 0xf7, 0xf7, 0x19, 0x0c, 0x06, 0x6c, 0x6c, 0x6c, 0xe0, 0xec, 0x8c, 0x50, 0x81, 0x34, 0xb5, 0xfc, 0xb1, 0x50, 0x1e, 0xa6, 0xcd, 0xfc, 0x33, 0xd4, 0xc7, 0xf7, 0x0d, 0x73, 0x37, 0xf7, 0x86, 0x0d, 0xda, 0x0b, 0xb4, 0x94, 0x55, 0x85, 0xb0, 0x8d, 0x10, 0x86, 0x44, 0xb4, 0x19, 0x8f, 0x47, 0x50, 0x8e, 0xf7, 0xdb, 0x97, 0x55, 0x9c, 0xab, 0xfb, 0x81, 0x66, 0x45, 0x6e, 0x5c, 0xa9, 0x00, 0xe7, 0xaa, 0x25, 0xa4, 0xef, 0x7c, 0x5f, 0x55, 0x09, 0x49, 0x3f, 0x19, 0x60, 0xfa, 0x03, 0xbf, 0x26, 0x0d, 0x54, 0x56, 0xe0, 0x2a, 0x89, 0x44, 0xf9, 0xf3, 0x05, 0x02, 0x5b, 0x19, 0x4c, 0x59, 0xb4, 0x50, 0x61, 0x28, 0x47, 0xc4, 0x7a, 0x48, 0x2c, 0x63, 0x52, 0x97, 0x90, 0xf2, 0x65, 0xb4, 0x06, 0xa9, 0x03, 0x5c, 0x09, 0x26, 0x33, 0xb8, 0x4a, 0xa0, 0x84, 0x42, 0xa9, 0x00, 0x84, 0xa4, 0x70, 0x25, 0xce, 0x78, 0xe5, 0x31, 0xdf, 0x0b, 0x76, 0x54, 0xd6, 0x8f, 0xbe, 0x85, 0xaa, 0x8f, 0x29, 0x02, 0xca, 0xc5, 0x00, 0x06, 0xe7, 0x89, 0xc5, 0x1d, 0xc4, 0x6a, 0x80, 0xb5, 0x73, 0xca, 0xc5, 0x3e, 0xa6, 0xda, 0xc1, 0x58, 0x43, 0x59, 0xcd, 0x81, 0x86, 0x6f, 0xa1, 0xb0, 0x56, 0x21, 0x70, 0x48, 0xe9, 0xd7, 0xf8, 0xda, 0x64, 0x8b, 0x38, 0x1e, 0xb0, 0x2f, 0x17, 0x04, 0x41, 0xc0, 0xd9, 0xb3, 0xdf, 0xc4, 0x85, 0xf3, 0xf7, 0x11, 0x25, 0x77, 0xe2, 0xfe, 0x7f, 0xc6, 0xde, 0xac, 0x47, 0xb2, 0x24, 0x4b, 0x0f, 0xfb, 0x6c, 0xb9, 0xfb, 0xf5, 0x35, 0x22, 0x32, 0x32, 0x2b, 0xab, 0xaa, 0xab, 0xa7, 0xba, 0xa7, 0x87, 0x83, 0xe1, 0x70, 0x28, 0x3e, 0x88, 0x0f, 0x94, 0x40, 0x40, 0xef, 0x84, 0x7e, 0xa8, 0x00, 0xe9, 0x17, 0x08, 0x02, 0xd4, 0x2f, 0xd2, 0xe3, 0x8c, 0x48, 0x62, 0x66, 0xd8, 0xd3, 0xcd, 0xae, 0xaa, 0xdc, 0x62, 0xf1, 0xf5, 0xae, 0xb6, 0xe9, 0xe1, 0x98, 0x99, 0x5f, 0xf7, 0xf0, 0xa8, 0xee, 0x02, 0x12, 0x59, 0x19, 0x19, 0xe9, 0xe1, 0xcb, 0xbd, 0x76, 0xce, 0xf9, 0xce, 0xb7, 0x4c, 0x22, 0x4b, 0x0d, 0x67, 0xb0, 0x8e, 0x81, 0x41, 0x80, 0x0b, 0x0e, 0x6b, 0x77, 0xd0, 0xd6, 0x17, 0x49, 0x8b, 0x17, 0xec, 0x67, 0xc6, 0xcc, 0x69, 0x7a, 0x0e, 0xea, 0xa1, 0xd8, 0x8c, 0x4e, 0x89, 0xc0, 0xa7, 0x5f, 0x82, 0x49, 0x24, 0x02, 0x80, 0x00, 0x8c, 0x32, 0xc4, 0x65, 0x24, 0xd7, 0xe9, 0x93, 0x13, 0x59, 0xe0, 0x71, 0x30, 0xe9, 0x77, 0xb8, 0xbe, 0xa1, 0x8d, 0x68, 0x8c, 0x8f, 0xf7, 0x89, 0x4d, 0xc0, 0x2b, 0x6b, 0x29, 0x7b, 0x91, 0x5f, 0x70, 0x41, 0x7a, 0xd6, 0xc6, 0x41, 0xe9, 0x01, 0x45, 0x5e, 0x62, 0xb6, 0x58, 0x62, 0xb7, 0x3f, 0xe2, 0x79, 0xfb, 0x84, 0x22, 0x4f, 0x48, 0x56, 0xe8, 0x46, 0xfc, 0x7f, 0xff, 0xf0, 0x5f, 0xb0, 0xdb, 0xb6, 0xf8, 0x8f, 0xff, 0xf1, 0x7f, 0xc1, 0x6f, 0x7f, 0xfb, 0x5b, 0xfc, 0x9b, 0x7f, 0xf3, 0x37, 0xe8, 0xdb, 0x03, 0xb8, 0xb0, 0xe0, 0x38, 0xa0, 0x2c, 0x53, 0x6c, 0x9e, 0x9f, 0xf0, 0x4f, 0xff, 0xf4, 0x84, 0x5f, 0x7f, 0xff, 0x2b, 0x6c, 0x9f, 0x07, 0x08, 0xd4, 0x60, 0x2e, 0x07, 0x4f, 0x1e, 0xc9, 0x17, 0xc0, 0x71, 0x22, 0x0c, 0x27, 0x12, 0xda, 0x4a, 0x58, 0x9d, 0x00, 0xa2, 0xc4, 0xae, 0x7b, 0x84, 0x13, 0x12, 0x48, 0x2c, 0x06, 0x67, 0xd0, 0x19, 0x85, 0x71, 0x1c, 0x50, 0xe4, 0x06, 0xf3, 0xc5, 0x0c, 0x85, 0x9c, 0x61, 0x6c, 0x34, 0x38, 0x93, 0x48, 0x59, 0x86, 0x8c, 0xe7, 0x98, 0xe5, 0x74, 0x8e, 0x09, 0xcb, 0xa1, 0x74, 0x83, 0xae, 0x6f, 0x50, 0xa6, 0x29, 0x86, 0xe6, 0x88, 0x87, 0x8f, 0x9f, 0x90, 0x72, 0x01, 0xdd, 0x0f, 0x48, 0x64, 0x06, 0x87, 0x12, 0x60, 0x3d, 0x94, 0x56, 0x00, 0x2c, 0xb8, 0x97, 0x55, 0x02, 0xb4, 0x16, 0x33, 0xc3, 0x08, 0xee, 0x11, 0x37, 0x0a, 0x57, 0x20, 0xfe, 0x0a, 0x1c, 0x07, 0x07, 0x47, 0x2a, 0x3d, 0x21, 0xcf, 0x2a, 0x30, 0x6b, 0x20, 0x3d, 0x57, 0x23, 0x91, 0x34, 0xc9, 0x13, 0xf2, 0x2b, 0xbc, 0x9b, 0xb3, 0x02, 0x98, 0x89, 0x89, 0xa2, 0xd6, 0x31, 0xa4, 0x9e, 0xac, 0x38, 0x8c, 0x0a, 0x47, 0xbf, 0xb2, 0x1d, 0x95, 0x42, 0x3d, 0x9b, 0xe1, 0x70, 0x38, 0x40, 0x6b, 0xed, 0xbd, 0xf2, 0x8b, 0xb3, 0x49, 0x9f, 0xdc, 0x42, 0x39, 0x6a, 0xa7, 0x91, 0x2a, 0x8b, 0xdc, 0x1a, 0xe4, 0xce, 0x62, 0x5e, 0xe4, 0x90, 0x24, 0xbd, 0x21, 0x08, 0x8a, 0x16, 0xf6, 0x36, 0x7a, 0xf1, 0xf6, 0x7d, 0x1f, 0xa7, 0x9b, 0xd0, 0x89, 0x04, 0x82, 0x4f, 0x9a, 0xa6, 0x18, 0x9a, 0xf6, 0xcc, 0xbb, 0x36, 0x1c, 0xdc, 0x53, 0xeb, 0xbd, 0xe9, 0x2e, 0x23, 0xb0, 0x0f, 0x83, 0x99, 0x7c, 0xc6, 0xd3, 0x17, 0x96, 0x77, 0x53, 0xd8, 0x62, 0xbf, 0xdf, 0x63, 0x18, 0x86, 0x08, 0x75, 0x90, 0xed, 0xea, 0x2c, 0xee, 0x46, 0x0f, 0xfb, 0xa7, 0x28, 0x5f, 0x08, 0x8c, 0xc4, 0x30, 0x29, 0x19, 0xa3, 0x30, 0x9f, 0xdd, 0xc2, 0x18, 0x0b, 0x21, 0x73, 0x70, 0x96, 0x41, 0x5b, 0x0e, 0xb8, 0x04, 0xbb, 0x7d, 0x8b, 0x87, 0x87, 0x07, 0xdc, 0xff, 0xea, 0xaf, 0xf0, 0xe9, 0xe3, 0x67, 0x6c, 0x36, 0x44, 0x4e, 0xcb, 0xf3, 0x1c, 0x1f, 0x3f, 0x7e, 0x8c, 0x3a, 0x70, 0x67, 0x81, 0xe7, 0xa7, 0x0d, 0xbd, 0x0f, 0x82, 0x7e, 0x46, 0x96, 0xe6, 0x64, 0xf4, 0x3f, 0x5b, 0xc0, 0xf4, 0x34, 0x9d, 0x1b, 0xad, 0x31, 0x0c, 0x54, 0x7c, 0x9e, 0x9e, 0x36, 0xd8, 0xef, 0x8f, 0xf4, 0x5a, 0x73, 0x89, 0xba, 0x28, 0xc0, 0x98, 0x83, 0xb1, 0x0a, 0xc3, 0x48, 0x79, 0xf0, 0x70, 0x06, 0x59, 0x56, 0x22, 0xab, 0x0a, 0x38, 0x67, 0x62, 0x4a, 0x9d, 0x90, 0x2c, 0x32, 0x18, 0x49, 0x66, 0x21, 0xce, 0xc8, 0x15, 0xa3, 0x47, 0x2e, 0x42, 0x47, 0x58, 0xd7, 0xf5, 0x59, 0xb8, 0xc0, 0xd4, 0x4d, 0xce, 0x18, 0x83, 0xaa, 0xaa, 0xe2, 0xf4, 0x1b, 0x0a, 0x63, 0x98, 0x36, 0x39, 0xe7, 0x50, 0x9d, 0x3a, 0x8b, 0xe7, 0x0b, 0x9f, 0x71, 0xe8, 0x7c, 0x77, 0xbb, 0xdd, 0x99, 0xd9, 0xd0, 0x65, 0xb7, 0xef, 0xdc, 0xb9, 0xc6, 0x72, 0xba, 0x6b, 0xbe, 0x9c, 0xb4, 0x02, 0x04, 0x35, 0xe5, 0x52, 0x58, 0x85, 0xb3, 0xac, 0x80, 0x29, 0xe1, 0xcc, 0x18, 0x83, 0x2c, 0xcf, 0x20, 0x44, 0x12, 0xaf, 0x99, 0x29, 0x0c, 0x26, 0x65, 0x8b, 0x66, 0x3f, 0x20, 0xcb, 0xb2, 0x89, 0x1f, 0xb2, 0x8a, 0x8d, 0x48, 0x59, 0x96, 0xf8, 0xf4, 0xe5, 0x33, 0x84, 0x10, 0x94, 0xdd, 0xec, 0xd7, 0x2c, 0x53, 0x88, 0xac, 0x2a, 0x32, 0xac, 0xd7, 0xb7, 0x10, 0x09, 0xa1, 0x0b, 0xc7, 0x66, 0x40, 0xdb, 0x76, 0x91, 0x64, 0xf2, 0xd3, 0xc3, 0x03, 0xb1, 0x96, 0x67, 0x73, 0x38, 0x4e, 0x26, 0x10, 0xbf, 0xfb, 0xfd, 0xbf, 0x60, 0xb9, 0x5c, 0x63, 0xbd, 0x5e, 0xa3, 0x69, 0xf6, 0x58, 0xad, 0x56, 0xa4, 0x1b, 0x05, 0xc3, 0x7a, 0xbd, 0x46, 0x96, 0x9c, 0xfc, 0xe9, 0x3f, 0x7e, 0xfc, 0x48, 0xeb, 0x15, 0xe3, 0xd0, 0xf6, 0xbf, 0xc7, 0xe1, 0xd8, 0x60, 0x18, 0x2d, 0x6e, 0xee, 0xee, 0xf1, 0xeb, 0x5f, 0xff, 0x1a, 0xc3, 0xf0, 0xe0, 0xfd, 0x06, 0x4c, 0x7c, 0xce, 0x65, 0x59, 0xc6, 0xfb, 0xcd, 0x68, 0xf6, 0x42, 0x3e, 0x37, 0xfd, 0x3d, 0x61, 0xa7, 0xcc, 0xe6, 0xe9, 0x8e, 0x2f, 0x5c, 0x0f, 0x52, 0xf2, 0xeb, 0x64, 0xc4, 0x0b, 0x27, 0xc8, 0xab, 0x32, 0x3f, 0xd0, 0x80, 0x6f, 0xbc, 0x14, 0x4b, 0xca, 0xc0, 0x55, 0x39, 0x79, 0x65, 0x1b, 0x33, 0x7a, 0xa5, 0x00, 0xf9, 0x7f, 0xc3, 0x39, 0xd8, 0x89, 0xb9, 0x7d, 0xc2, 0x01, 0x96, 0x0a, 0x38, 0xeb, 0x60, 0xec, 0x88, 0xb6, 0xdb, 0x61, 0xbb, 0x7f, 0xc4, 0xe3, 0xe6, 0x13, 0xf6, 0xbb, 0x0d, 0x2c, 0xf7, 0x2d, 0x84, 0xd3, 0xb0, 0xe6, 0x7c, 0xb5, 0x62, 0xad, 0x85, 0xd1, 0x94, 0x09, 0x11, 0x1c, 0xe3, 0xc2, 0x67, 0xe7, 0xbc, 0x8a, 0xa0, 0xef, 0x5b, 0x54, 0xe5, 0x02, 0x8b, 0xc5, 0x0c, 0x75, 0x5d, 0x02, 0x4c, 0x63, 0x18, 0x5b, 0x68, 0x33, 0x40, 0x48, 0x4a, 0xb1, 0x33, 0x46, 0x61, 0x54, 0x3d, 0xe0, 0x14, 0xf9, 0x63, 0x80, 0x4c, 0x54, 0xb2, 0x2c, 0x83, 0xb4, 0x0c, 0xb3, 0x59, 0x85, 0xc5, 0xa2, 0x82, 0x10, 0x39, 0x84, 0xa0, 0x6b, 0xf3, 0xcd, 0xfd, 0x1b, 0xdc, 0xbf, 0x5d, 0xa3, 0x1f, 0x07, 0x70, 0x46, 0xb3, 0x74, 0x88, 0xf7, 0x75, 0xce, 0xc1, 0xa8, 0x01, 0x83, 0xb3, 0x48, 0x98, 0xbd, 0xea, 0x75, 0x30, 0x25, 0xa5, 0x5d, 0xdb, 0xb5, 0xc6, 0x49, 0x99, 0xbd, 0xcc, 0xcb, 0x9e, 0x7e, 0x4e, 0xd3, 0xcf, 0x27, 0xdc, 0xdb, 0xd3, 0xe9, 0xd9, 0xc0, 0x5d, 0xdd, 0xa1, 0x5f, 0xfb, 0xf7, 0x53, 0x2e, 0x4a, 0xe4, 0x80, 0x8c, 0xe6, 0x05, 0xaf, 0x64, 0x9a, 0xe1, 0x4d, 0x09, 0x75, 0x2c, 0x22, 0x4a, 0x49, 0x92, 0x40, 0x38, 0x87, 0x24, 0x91, 0x70, 0xce, 0xe0, 0xe1, 0xe1, 0x19, 0x8b, 0xc5, 0x12, 0x7f, 0xf5, 0x9b, 0x7f, 0x8d, 0x6f, 0xbf, 0xfd, 0x16, 0x65, 0x59, 0xe2, 0xcb, 0x97, 0x2f, 0x78, 0xff, 0xf5, 0x3d, 0xb4, 0x19, 0xa0, 0xd0, 0x44, 0x1e, 0x47, 0x90, 0x66, 0x19, 0x43, 0x1c, 0x10, 0x67, 0x7a, 0x58, 0xd5, 0xfb, 0x1e, 0x84, 0x88, 0x83, 0x0c, 0xc2, 0xa3, 0x06, 0x74, 0x4e, 0xcd, 0xea, 0x05, 0x8c, 0xca, 0x51, 0xd5, 0x25, 0xee, 0x6e, 0xd6, 0xf8, 0xe9, 0xa7, 0xdf, 0xe1, 0xcb, 0xa7, 0x1f, 0x90, 0x26, 0x40, 0x9a, 0x96, 0x28, 0xb2, 0x22, 0x26, 0x7e, 0x1a, 0xa3, 0xe9, 0x9c, 0x35, 0x26, 0x1a, 0x8b, 0x25, 0x49, 0xc8, 0x33, 0x37, 0x71, 0x90, 0x99, 0x92, 0xe3, 0x28, 0xd9, 0x92, 0x7c, 0x20, 0xda, 0xf6, 0xe8, 0xad, 0xcb, 0x13, 0x18, 0xa3, 0xd1, 0xf7, 0x3d, 0x12, 0x46, 0x32, 0xb3, 0x93, 0x72, 0x85, 0xd6, 0x5a, 0x01, 0xc1, 0x3a, 0x1c, 0x0e, 0x67, 0xb5, 0x6d, 0x9a, 0x85, 0x12, 0xa0, 0xff, 0x29, 0xb9, 0x3c, 0x34, 0xdf, 0xc1, 0xd2, 0x35, 0x4f, 0x88, 0x63, 0x33, 0x45, 0xee, 0xca, 0xb2, 0xf4, 0x46, 0x3d, 0x27, 0xb8, 0x3e, 0xac, 0x04, 0xe3, 0xe7, 0xa6, 0x14, 0xfa, 0xbe, 0xc7, 0xac, 0x9a, 0x21, 0xc9, 0x52, 0x24, 0x70, 0x48, 0xca, 0x9c, 0x06, 0xf2, 0x00, 0x2d, 0x4c, 0x3b, 0x80, 0x10, 0xfd, 0xb6, 0x58, 0x2c, 0x5e, 0xd8, 0xe1, 0x05, 0x56, 0x3b, 0x59, 0x95, 0x9e, 0x4f, 0xf0, 0xca, 0x6a, 0x58, 0xed, 0x60, 0x14, 0xb1, 0x43, 0x83, 0x46, 0x90, 0x60, 0x27, 0x0e, 0xe6, 0x38, 0x75, 0xa0, 0x09, 0x3d, 0x66, 0xc2, 0x93, 0x98, 0x65, 0x1b, 0x0e, 0xe4, 0xbe, 0xef, 0x63, 0x11, 0x5a, 0xaf, 0x6f, 0xcf, 0x9e, 0x13, 0xdd, 0xc4, 0x23, 0x86, 0x81, 0xfe, 0x7e, 0x3e, 0x9b, 0x63, 0x1c, 0x87, 0x53, 0x8a, 0x10, 0x77, 0x67, 0x12, 0x3b, 0xaf, 0x5a, 0xf6, 0x53, 0x21, 0x47, 0x2a, 0x4b, 0x24, 0x32, 0x87, 0x90, 0xe4, 0x37, 0xdc, 0xb7, 0x64, 0x3a, 0x93, 0xa7, 0x15, 0x60, 0x05, 0xc6, 0xde, 0xa0, 0x2a, 0xe6, 0xa7, 0x34, 0xa0, 0x34, 0x81, 0x1e, 0x2d, 0xc6, 0xde, 0x40, 0x0d, 0x16, 0xcc, 0x39, 0xf4, 0xad, 0xc2, 0x81, 0xb5, 0xf4, 0xf3, 0xab, 0x39, 0x66, 0x33, 0x3a, 0x24, 0xca, 0x62, 0x4e, 0x7b, 0x9a, 0xc3, 0x91, 0xa0, 0x39, 0x99, 0x80, 0x0b, 0x83, 0x24, 0x75, 0xe0, 0xcc, 0x91, 0x95, 0xad, 0xd5, 0x48, 0x12, 0x83, 0x2c, 0x4b, 0xb0, 0x9a, 0x97, 0x48, 0xf9, 0x29, 0xa3, 0x3b, 0xb8, 0x02, 0x19, 0xa3, 0x63, 0x11, 0x1d, 0x86, 0xfe, 0xec, 0x26, 0x0e, 0x3b, 0xa3, 0x70, 0x71, 0xcc, 0x96, 0xb3, 0xb3, 0x82, 0x39, 0x8d, 0x06, 0x0c, 0x37, 0x62, 0x2a, 0xd3, 0x38, 0x91, 0x86, 0xf7, 0x38, 0x14, 0xfc, 0x69, 0xba, 0xde, 0x34, 0x86, 0x2f, 0x14, 0x87, 0x3c, 0xcf, 0x5f, 0x40, 0x7a, 0x53, 0x62, 0x07, 0x41, 0xad, 0x49, 0x74, 0x16, 0x0c, 0xd7, 0x4a, 0xb8, 0x9e, 0xda, 0xb6, 0x8d, 0xdf, 0x7b, 0xa9, 0xf1, 0x34, 0xc6, 0xf8, 0x09, 0xdd, 0xc6, 0x1d, 0x55, 0x28, 0xdc, 0xa1, 0x68, 0x1f, 0x8e, 0xbb, 0xf8, 0xbd, 0xc1, 0xf8, 0x21, 0xcb, 0x32, 0xd4, 0x75, 0x8d, 0xd9, 0x6c, 0x86, 0x8d, 0xd8, 0x5d, 0x18, 0x3a, 0x10, 0xfd, 0x48, 0xeb, 0x11, 0x5d, 0xe7, 0x70, 0x73, 0xb7, 0x8e, 0x68, 0x50, 0xd3, 0x9d, 0xb4, 0xd5, 0xa1, 0x41, 0xd1, 0x3a, 0x4c, 0xa4, 0x1a, 0x70, 0x12, 0xc6, 0x39, 0x70, 0x91, 0x20, 0x49, 0x13, 0x80, 0x4b, 0x7c, 0x57, 0xd5, 0xf8, 0xf4, 0xe9, 0x13, 0x8c, 0x63, 0x60, 0x48, 0x50, 0x56, 0x29, 0x9a, 0x63, 0x0b, 0xeb, 0x18, 0x94, 0xd6, 0xd0, 0xaa, 0x8b, 0x4c, 0xd8, 0xac, 0x2c, 0xf0, 0xfe, 0xed, 0x3b, 0x0c, 0xc3, 0x80, 0xed, 0xf3, 0x86, 0xa2, 0x1a, 0xf3, 0x0c, 0x5d, 0x37, 0xa0, 0x1f, 0x35, 0xf2, 0xa2, 0x40, 0x9a, 0x57, 0xf8, 0xf2, 0xf4, 0x4c, 0xe9, 0x72, 0x6d, 0x83, 0x7e, 0x90, 0x78, 0xf7, 0xee, 0x1d, 0x96, 0x4b, 0xda, 0xcb, 0x42, 0x70, 0x28, 0x6b, 0x60, 0x74, 0xd8, 0xc5, 0x67, 0x71, 0xeb, 0x4d, 0xee, 0x6a, 0xe7, 0xbf, 0x27, 0xe2, 0xb4, 0x9e, 0xb8, 0x3c, 0x4c, 0x02, 0x13, 0xfc, 0xd2, 0x4e, 0x76, 0xe2, 0xae, 0x1b, 0x11, 0xf9, 0xd7, 0x02, 0x6a, 0x94, 0x6a, 0xce, 0x50, 0x95, 0xd0, 0x10, 0xc5, 0x5d, 0x37, 0x58, 0x4c, 0x27, 0x64, 0xd6, 0x1f, 0x76, 0xd6, 0xf9, 0x14, 0x35, 0x50, 0x38, 0x93, 0x70, 0xe0, 0xc2, 0xc2, 0x9a, 0x1e, 0x9d, 0xda, 0xa3, 0x1f, 0x36, 0x50, 0x66, 0x03, 0xc3, 0xf6, 0x34, 0xf1, 0x5b, 0x46, 0x4d, 0x81, 0x21, 0xc2, 0x17, 0xe7, 0xdc, 0x33, 0x99, 0x8d, 0x9f, 0x9c, 0x00, 0xee, 0x27, 0x5e, 0xee, 0x78, 0x24, 0xff, 0x70, 0x00, 0x22, 0x13, 0xc8, 0x0b, 0x89, 0xb2, 0xca, 0x50, 0x94, 0x12, 0x69, 0xc6, 0x60, 0xac, 0x06, 0x17, 0x1a, 0x42, 0x1a, 0x08, 0xe9, 0x5d, 0xc6, 0x04, 0x8f, 0x1a, 0x6e, 0x01, 0x06, 0x48, 0x81, 0xcc, 0x25, 0xd0, 0x56, 0x63, 0xbe, 0xcc, 0xb0, 0x5a, 0xd7, 0x48, 0xd2, 0x02, 0xcf, 0xcf, 0x4b, 0x18, 0x07, 0xe4, 0x39, 0x87, 0x75, 0x1d, 0x64, 0x42, 0x4c, 0x73, 0xad, 0x0c, 0x06, 0xe5, 0x5d, 0xc4, 0xd2, 0x04, 0x49, 0x96, 0x20, 0xe3, 0x1c, 0x43, 0xeb, 0xce, 0x94, 0x0f, 0xaf, 0xc1, 0xd6, 0xaf, 0xd9, 0x06, 0x2b, 0x98, 0x57, 0x8b, 0xf9, 0xf4, 0xdf, 0x9c, 0xd2, 0xff, 0xce, 0x79, 0x00, 0x8e, 0xf1, 0x9f, 0xcd, 0x1a, 0xb8, 0x0c, 0x1a, 0x79, 0x69, 0x7a, 0x23, 0x5f, 0xe5, 0x9f, 0x4c, 0x9f, 0x7f, 0xdf, 0xf7, 0x31, 0x26, 0x14, 0x8c, 0x41, 0x4a, 0x4a, 0x56, 0x5b, 0x2e, 0xd6, 0x78, 0x7a, 0x22, 0x6f, 0x8d, 0xe3, 0xa1, 0x85, 0x1a, 0x0d, 0x96, 0xcb, 0x35, 0x9c, 0x63, 0xe8, 0xbb, 0x11, 0xd5, 0xba, 0x8c, 0xd0, 0xb8, 0x56, 0x23, 0xb4, 0x51, 0x10, 0xe2, 0x94, 0x7a, 0xa9, 0x9d, 0x21, 0xee, 0x0d, 0xb3, 0x44, 0xd8, 0x80, 0xf3, 0xf1, 0xd5, 0xbe, 0x21, 0xb2, 0x16, 0xc7, 0x7d, 0x8b, 0xbc, 0xe0, 0x98, 0xd5, 0x2b, 0xac, 0x96, 0xf7, 0x80, 0xb1, 0x48, 0xa4, 0x43, 0x96, 0x27, 0x48, 0x45, 0xe2, 0x19, 0xe4, 0xc4, 0xc7, 0x11, 0x92, 0x4d, 0x22, 0x59, 0x29, 0xcf, 0x63, 0xba, 0x1b, 0xb7, 0xf6, 0xb4, 0xd3, 0x97, 0x52, 0x62, 0xb6, 0x98, 0xa1, 0xaa, 0x28, 0x51, 0xae, 0x1f, 0x8e, 0x50, 0x83, 0x42, 0x92, 0x48, 0x8f, 0x4e, 0x8c, 0x48, 0x93, 0x2c, 0x1a, 0x30, 0xd1, 0x15, 0x17, 0x02, 0x94, 0x82, 0x16, 0x3f, 0x79, 0xd1, 0x28, 0xd1, 0xea, 0xcb, 0x2b, 0x5e, 0xac, 0x89, 0xdf, 0xeb, 0x40, 0xd7, 0x49, 0x78, 0x8e, 0x9c, 0x33, 0x0c, 0xc3, 0x80, 0xba, 0xae, 0xf1, 0xe1, 0xc3, 0x07, 0xcc, 0x66, 0xb3, 0x38, 0x48, 0xe7, 0x79, 0x8e, 0xa7, 0xa7, 0x27, 0x2c, 0x7c, 0xd4, 0x6c, 0x38, 0x3b, 0xc3, 0xd0, 0x13, 0x9a, 0x87, 0x0f, 0x4f, 0x8f, 0xde, 0x4f, 0x80, 0x23, 0xe7, 0x02, 0xc8, 0x38, 0x15, 0xf4, 0x70, 0x90, 0x06, 0x5d, 0x5c, 0x98, 0x72, 0xa6, 0x87, 0x65, 0x38, 0xe8, 0xa7, 0xac, 0xe0, 0xba, 0x9e, 0xc7, 0xdd, 0x78, 0x08, 0x0c, 0x09, 0xa2, 0xfd, 0xa9, 0x58, 0xff, 0xda, 0xfe, 0x27, 0x5c, 0x50, 0x61, 0x32, 0x9f, 0x76, 0x87, 0xe1, 0x79, 0x84, 0xc9, 0xfc, 0x32, 0x0f, 0xf7, 0x44, 0xdc, 0x23, 0x77, 0x9d, 0x3c, 0x2f, 0x7c, 0x47, 0x43, 0x8d, 0xc5, 0xa8, 0x7a, 0x1f, 0x6d, 0x27, 0xd0, 0x7b, 0x69, 0x80, 0x1a, 0x1b, 0x80, 0x2b, 0x24, 0xc9, 0x88, 0xa6, 0x1d, 0xd0, 0xb6, 0x47, 0x24, 0x62, 0x89, 0xb4, 0x48, 0x51, 0xe5, 0xb4, 0xab, 0xef, 0xbb, 0x1e, 0x55, 0x55, 0xa1, 0x2c, 0x4b, 0x1c, 0x8f, 0x47, 0x3c, 0x3d, 0x3d, 0xd1, 0x8d, 0x37, 0x2a, 0x1c, 0xb6, 0x07, 0x2a, 0x70, 0x96, 0xe0, 0x32, 0xee, 0x38, 0x9a, 0x63, 0x47, 0xec, 0xe0, 0x34, 0x45, 0x92, 0x90, 0xc1, 0x42, 0x5d, 0x90, 0xf1, 0x8d, 0xb5, 0x16, 0x3f, 0xfd, 0xf4, 0xcf, 0x10, 0xdc, 0x40, 0x70, 0x0b, 0x07, 0x8b, 0x22, 0x13, 0x48, 0xd3, 0x04, 0x79, 0x91, 0xa2, 0x9a, 0x49, 0x54, 0x69, 0x79, 0xb6, 0x3f, 0x0b, 0xb6, 0x7e, 0xa1, 0x60, 0xb7, 0xdd, 0x18, 0x09, 0x29, 0x53, 0xb2, 0x62, 0xb8, 0x11, 0x3f, 0x7e, 0xfc, 0x1c, 0x0f, 0x5a, 0x6a, 0xb4, 0xc8, 0x67, 0x3b, 0x74, 0xf3, 0x27, 0x22, 0x47, 0x12, 0x0f, 0x6f, 0xa5, 0x0c, 0xfa, 0x9e, 0x8a, 0x5c, 0x2a, 0x52, 0xaf, 0x89, 0xe6, 0x31, 0x24, 0x85, 0x92, 0x93, 0x48, 0x92, 0x91, 0xa6, 0xf9, 0x59, 0xc1, 0x0d, 0x45, 0x7b, 0x1a, 0xc5, 0x78, 0xad, 0x19, 0x38, 0xc9, 0xba, 0xd2, 0xc9, 0xbe, 0x53, 0x9d, 0xed, 0xc1, 0x9d, 0x73, 0x18, 0xc6, 0xe1, 0x94, 0x2c, 0xe7, 0xb3, 0xec, 0x43, 0x43, 0x12, 0x76, 0xee, 0x53, 0x32, 0x5d, 0x78, 0x0f, 0xc2, 0x63, 0xd5, 0x75, 0x7d, 0x86, 0x30, 0x2c, 0x16, 0x8b, 0x78, 0x4d, 0x51, 0xbc, 0xac, 0xc0, 0xf1, 0x78, 0x8c, 0xc1, 0x0c, 0x53, 0xaf, 0x77, 0x6b, 0x2d, 0x14, 0x77, 0x30, 0x16, 0x18, 0x47, 0x05, 0x06, 0x81, 0x72, 0x36, 0x47, 0x9a, 0x24, 0xe8, 0xb5, 0x85, 0xb5, 0x3d, 0x94, 0x71, 0x78, 0x78, 0xda, 0x41, 0x1b, 0x83, 0xb2, 0xac, 0xf1, 0xd5, 0xfd, 0x3b, 0xf4, 0x0b, 0x5a, 0xef, 0x58, 0x70, 0xf4, 0x4f, 0x07, 0x7c, 0xf8, 0x48, 0xd6, 0xa9, 0xcb, 0xc5, 0x02, 0x83, 0xa6, 0x1b, 0x52, 0x5b, 0x83, 0x44, 0x90, 0xd7, 0xb2, 0x4c, 0x53, 0x2c, 0x8a, 0x0a, 0x32, 0xc9, 0x61, 0x1d, 0xc3, 0x68, 0x2c, 0xf2, 0x42, 0xa1, 0xae, 0x67, 0x58, 0xad, 0xbf, 0xc6, 0xfb, 0xf7, 0xef, 0xb1, 0x5e, 0xaf, 0x23, 0xca, 0xe4, 0x9c, 0x8b, 0x48, 0xc4, 0x9f, 0x74, 0xc7, 0xb3, 0xcc, 0x7f, 0xae, 0x01, 0x52, 0x67, 0xd1, 0x3d, 0x2c, 0xa8, 0x54, 0x26, 0xff, 0xe2, 0xca, 0x63, 0x9c, 0x8a, 0xfd, 0xd4, 0x2b, 0x20, 0x4e, 0x14, 0x32, 0x83, 0xe0, 0x27, 0xa5, 0x00, 0x7d, 0xee, 0x36, 0x9a, 0x44, 0x69, 0xa5, 0xe0, 0x1c, 0x8f, 0x0c, 0xff, 0xd3, 0x4f, 0xa1, 0xc7, 0xca, 0xaa, 0x14, 0x4e, 0x2b, 0x28, 0xdd, 0xa1, 0x1f, 0xf7, 0x68, 0xbb, 0x0d, 0x8e, 0xc3, 0x13, 0xfa, 0x71, 0x83, 0x51, 0xef, 0x01, 0x91, 0xc0, 0x85, 0x7d, 0x24, 0xb8, 0x97, 0x73, 0x71, 0xdf, 0x14, 0x00, 0x30, 0x0e, 0x4c, 0x22, 0xae, 0x10, 0x88, 0x5c, 0xe6, 0x60, 0x3c, 0x01, 0x70, 0xbe, 0x28, 0xc1, 0x85, 0xc3, 0xb1, 0x79, 0x06, 0x17, 0x29, 0xea, 0xca, 0x00, 0x4c, 0xa0, 0x69, 0x1a, 0xec, 0xf7, 0x7b, 0xec, 0xf6, 0x8f, 0x50, 0xaa, 0x3b, 0x45, 0x4f, 0x5a, 0x0b, 0x65, 0x07, 0xc0, 0x69, 0x08, 0x9e, 0xa2, 0xa8, 0x19, 0x0e, 0xc7, 0x67, 0x6c, 0xfe, 0xeb, 0x33, 0x29, 0x1e, 0x8c, 0x44, 0x5e, 0xce, 0xf1, 0xb8, 0xf9, 0x84, 0x24, 0xe3, 0x58, 0xaf, 0xbf, 0x85, 0x4c, 0x25, 0x8a, 0xc0, 0xbd, 0x31, 0x06, 0x5a, 0x0f, 0xe8, 0x87, 0x96, 0x26, 0x30, 0xcc, 0xaf, 0x16, 0xe4, 0xa9, 0xa6, 0xf9, 0xb5, 0x1d, 0x36, 0x19, 0x5b, 0x99, 0x3f, 0xc3, 0x01, 0xf1, 0x7c, 0xba, 0x3f, 0x7b, 0xac, 0x89, 0x9b, 0xd9, 0xe5, 0xcf, 0x9e, 0xf2, 0x4f, 0xae, 0x31, 0xe9, 0xa9, 0x51, 0x4a, 0x26, 0x92, 0x50, 0x76, 0x46, 0xae, 0x63, 0x8c, 0x41, 0x69, 0x3a, 0x47, 0x3b, 0x4f, 0x26, 0x93, 0x52, 0x92, 0xc7, 0x00, 0xb3, 0xfe, 0x7e, 0x34, 0x38, 0xec, 0x1b, 0xac, 0x57, 0x77, 0xe0, 0x3c, 0xc5, 0xf1, 0xd8, 0x83, 0x41, 0x62, 0xbb, 0xd9, 0xe3, 0xfe, 0xed, 0x0d, 0x58, 0x46, 0xa8, 0x60, 0x59, 0xd6, 0x18, 0xfa, 0x03, 0x99, 0xa7, 0xc8, 0x0a, 0x56, 0x5b, 0x9a, 0x86, 0x79, 0x76, 0xf2, 0x4f, 0x74, 0x84, 0xf4, 0x18, 0x77, 0x52, 0x68, 0x14, 0x55, 0x0e, 0xce, 0x5a, 0x38, 0xcb, 0xb1, 0xdd, 0xec, 0xf0, 0xc3, 0x1f, 0x3f, 0xe1, 0xb8, 0x7f, 0x46, 0x59, 0x24, 0xd0, 0x7a, 0xc4, 0xfd, 0x9b, 0xe5, 0xc4, 0xd3, 0xa4, 0x83, 0x52, 0x03, 0x00, 0xed, 0x25, 0x86, 0x0c, 0x0e, 0x74, 0xee, 0x06, 0xff, 0x01, 0x42, 0x06, 0x4f, 0xe7, 0x62, 0x59, 0xe6, 0xd0, 0x7a, 0x8c, 0x1c, 0x13, 0x6b, 0x0d, 0xb4, 0x57, 0xae, 0x64, 0x59, 0x82, 0x44, 0x8a, 0x33, 0xcf, 0x8a, 0x13, 0xdf, 0x84, 0xfe, 0x2b, 0xf2, 0xfc, 0xcc, 0xa7, 0x65, 0x6a, 0x8e, 0x26, 0x84, 0x00, 0x33, 0x3a, 0x3a, 0xfb, 0x59, 0x06, 0x70, 0xc6, 0x21, 0xfd, 0x2f, 0x06, 0x86, 0x6a, 0x56, 0xe3, 0xf9, 0xf9, 0x19, 0x8b, 0xc5, 0x22, 0x06, 0xa0, 0xfd, 0xe6, 0x37, 0xbf, 0xc1, 0x3f, 0xfc, 0xc3, 0x3f, 0x60, 0x3e, 0x9f, 0x47, 0x54, 0x74, 0x3a, 0x50, 0x85, 0xa2, 0x3f, 0x0c, 0x03, 0xf2, 0x59, 0x75, 0x22, 0xb0, 0x66, 0x09, 0x94, 0xb3, 0x90, 0x70, 0x9c, 0x3a, 0x64, 0xcb, 0xa0, 0x95, 0x9d, 0x90, 0xe2, 0xdc, 0x59, 0x22, 0x4d, 0x90, 0xa4, 0x04, 0xe2, 0x97, 0x94, 0x12, 0xda, 0xcb, 0xc3, 0xc6, 0x7e, 0x84, 0x1e, 0x69, 0x7f, 0x97, 0xc9, 0xec, 0x0c, 0x56, 0xbf, 0x84, 0xd1, 0xa6, 0x07, 0xba, 0xb3, 0x80, 0xd1, 0x16, 0xd6, 0xb8, 0x33, 0xef, 0xe1, 0x33, 0x36, 0xbc, 0x75, 0x3e, 0x24, 0x23, 0x78, 0xc2, 0x53, 0xc7, 0xac, 0xb5, 0xc1, 0xe6, 0xf9, 0x09, 0x69, 0x9a, 0x62, 0x3e, 0x9f, 0x23, 0xcf, 0x69, 0x6f, 0xea, 0x9c, 0x86, 0xd1, 0x0e, 0x4a, 0x19, 0x48, 0x19, 0x0c, 0x2b, 0x08, 0xd2, 0x63, 0x82, 0x21, 0x4d, 0x73, 0x94, 0x65, 0x86, 0xc5, 0xb2, 0x42, 0x56, 0xaf, 0x71, 0x3c, 0x1e, 0xa1, 0x25, 0xed, 0x4c, 0xf2, 0x94, 0x43, 0x8f, 0x06, 0x9b, 0x6e, 0xeb, 0xa1, 0x35, 0x9a, 0x7c, 0x9c, 0x01, 0x1e, 0x3e, 0x3f, 0x22, 0xcb, 0x32, 0xd2, 0x61, 0x0a, 0x22, 0xc6, 0x0c, 0xa3, 0x22, 0xff, 0xf8, 0x61, 0xc4, 0xa8, 0x06, 0x30, 0x46, 0x50, 0x7d, 0x59, 0xe5, 0x68, 0x9a, 0x06, 0xdf, 0xfd, 0xe2, 0x3d, 0x31, 0x62, 0x99, 0x05, 0x17, 0x16, 0xf3, 0x45, 0x85, 0xb2, 0x48, 0xc8, 0x90, 0x42, 0x0a, 0xec, 0x37, 0x4d, 0x84, 0xdb, 0x69, 0x0f, 0x2a, 0x90, 0x2a, 0x79, 0x22, 0x88, 0x89, 0xfa, 0xac, 0xd1, 0x09, 0xbb, 0xd2, 0xf0, 0xdf, 0x72, 0x36, 0x8f, 0x84, 0x8a, 0x98, 0x9b, 0xab, 0x34, 0x46, 0xbf, 0xaf, 0xde, 0xed, 0x76, 0xb1, 0x39, 0x08, 0x64, 0x90, 0xe9, 0x0a, 0x64, 0xb9, 0x5c, 0xc7, 0x90, 0x83, 0x20, 0xaf, 0x0a, 0x17, 0x7b, 0x58, 0xb5, 0x84, 0xe2, 0x37, 0x85, 0xc5, 0x03, 0x04, 0x14, 0xa0, 0xa3, 0x29, 0xd1, 0x71, 0xaa, 0xa5, 0xbd, 0x24, 0xb4, 0x4d, 0x4d, 0x7e, 0x92, 0x24, 0x01, 0x9b, 0x14, 0xdf, 0xa9, 0x7e, 0x74, 0x0a, 0x09, 0x3a, 0xc7, 0x90, 0x84, 0x22, 0xcf, 0xbc, 0xd3, 0x20, 0x13, 0xb0, 0x4e, 0xa3, 0xe9, 0x9a, 0xb3, 0x6b, 0xaa, 0x1b, 0xba, 0xb3, 0x6b, 0x87, 0xbb, 0x04, 0x06, 0x16, 0x49, 0x9e, 0x42, 0x66, 0xc9, 0x59, 0x0e, 0x81, 0xb2, 0x1a, 0x49, 0x36, 0x43, 0x91, 0x65, 0x94, 0xcf, 0x6d, 0x81, 0x24, 0x4d, 0xd1, 0x8d, 0x8a, 0x98, 0xb8, 0x42, 0x20, 0x49, 0x4b, 0xbc, 0xb9, 0x7f, 0x07, 0x99, 0x26, 0xe8, 0xda, 0x1e, 0xc7, 0xae, 0xc5, 0x76, 0xb3, 0xa7, 0x6b, 0xdf, 0x1a, 0x14, 0x09, 0x31, 0x68, 0x85, 0x10, 0x38, 0x1c, 0x8f, 0xf8, 0xe3, 0x1f, 0xff, 0x88, 0xdd, 0xf1, 0x00, 0x01, 0x86, 0x0f, 0x1f, 0x3e, 0xc0, 0x31, 0x81, 0xe5, 0x72, 0x8d, 0xbc, 0xa8, 0xc0, 0xb4, 0x85, 0x4c, 0x73, 0x54, 0xf5, 0x1c, 0x59, 0x6e, 0x00, 0x1f, 0x46, 0x63, 0xac, 0xc5, 0xa8, 0x14, 0xac, 0x73, 0xa4, 0x55, 0x9e, 0x84, 0x42, 0xa4, 0x69, 0x72, 0x36, 0x60, 0x87, 0xe9, 0x3c, 0xdc, 0xe4, 0xd3, 0xee, 0x7d, 0x6a, 0x0c, 0x75, 0x6e, 0x5a, 0xf1, 0xf3, 0x2c, 0xe6, 0x6b, 0x1a, 0xfd, 0xd3, 0x17, 0x79, 0x9c, 0x6e, 0x69, 0x4d, 0x31, 0x44, 0x2b, 0x65, 0x21, 0xa4, 0xf7, 0x87, 0x47, 0x9c, 0x9e, 0x01, 0x78, 0x89, 0x1d, 0x3d, 0xde, 0x97, 0x2f, 0x3f, 0xe1, 0xd8, 0x6c, 0xb1, 0xdb, 0x3f, 0xa2, 0x3d, 0x3e, 0x61, 0xd4, 0x07, 0x18, 0x73, 0x80, 0x36, 0x1d, 0x8c, 0x1b, 0xc0, 0x8d, 0x04, 0x0b, 0x13, 0xba, 0xa5, 0xfd, 0x72, 0x80, 0xd7, 0x81, 0x40, 0x38, 0xe3, 0x90, 0x82, 0x83, 0x7b, 0xd4, 0xc9, 0x31, 0x44, 0x87, 0xc1, 0xc3, 0x61, 0x8f, 0xc3, 0xbe, 0xc3, 0x67, 0xb3, 0x05, 0x63, 0x1f, 0x91, 0xc8, 0x12, 0x4c, 0x48, 0x74, 0x5d, 0x87, 0xb6, 0x3d, 0xa2, 0x9c, 0x8d, 0xe0, 0xc2, 0xfa, 0x66, 0xdf, 0x23, 0x4b, 0x83, 0xf5, 0xee, 0x96, 0x16, 0x8f, 0x4f, 0x43, 0x0c, 0x7f, 0x49, 0xd2, 0x1c, 0x5c, 0x72, 0x28, 0xd3, 0xe1, 0xc7, 0x1f, 0xff, 0x80, 0x8f, 0x1f, 0x7f, 0xc2, 0xf1, 0xf8, 0xff, 0xc4, 0xfb, 0x80, 0x49, 0x42, 0x26, 0xeb, 0xf9, 0x0c, 0x37, 0x37, 0x44, 0xc0, 0xbb, 0x5d, 0x2e, 0x5e, 0xc8, 0xe9, 0xae, 0x4d, 0xc4, 0x97, 0x5f, 0x8f, 0x7c, 0x22, 0x77, 0xda, 0x5d, 0x5f, 0xba, 0xb8, 0x3a, 0xe7, 0x22, 0xc4, 0x6f, 0x9d, 0xbd, 0x70, 0xba, 0xe3, 0x3f, 0xfb, 0xd9, 0x5e, 0xfe, 0xbc, 0x6b, 0xcf, 0x2b, 0x0c, 0x6e, 0xd7, 0xbe, 0x27, 0x5e, 0x0f, 0x1e, 0xd2, 0xef, 0xfb, 0xfe, 0x34, 0x5c, 0x09, 0x06, 0x38, 0x3a, 0x5f, 0xfa, 0x5e, 0xa1, 0xaa, 0x66, 0x28, 0x8a, 0x0a, 0x89, 0xcc, 0xf1, 0xaf, 0xff, 0xe6, 0x6f, 0x71, 0x38, 0x1c, 0xb1, 0x58, 0x56, 0xde, 0x70, 0x8b, 0x8c, 0x7d, 0xb2, 0x2c, 0x03, 0x70, 0x20, 0xf9, 0xdb, 0x62, 0x0e, 0x63, 0x14, 0x8c, 0xe1, 0xc8, 0xfc, 0xea, 0xd4, 0x39, 0xca, 0xf9, 0x26, 0xf9, 0x24, 0x62, 0x41, 0xef, 0xda, 0x1e, 0x69, 0x9a, 0x43, 0x26, 0xc0, 0xc3, 0x97, 0x0e, 0xcf, 0x4f, 0x3b, 0x38, 0xa3, 0x91, 0xca, 0x04, 0x87, 0x63, 0x07, 0xa3, 0x8f, 0x51, 0x67, 0x6f, 0xad, 0xf5, 0x79, 0x07, 0x24, 0x27, 0x24, 0x45, 0x1e, 0x0d, 0x3e, 0x49, 0x2a, 0xc1, 0x35, 0xf7, 0xd1, 0xd9, 0x06, 0x7d, 0xdf, 0x42, 0x08, 0x06, 0xf5, 0xac, 0xb0, 0xdd, 0x6e, 0x71, 0x38, 0xec, 0x20, 0x04, 0x47, 0x5e, 0xa4, 0x7e, 0x38, 0x00, 0xf2, 0xbc, 0x80, 0x70, 0x98, 0xa0, 0xc3, 0xfe, 0x3d, 0x72, 0x7c, 0x12, 0xfc, 0x32, 0x9c, 0x91, 0x07, 0xa9, 0xe9, 0xe1, 0xd1, 0x30, 0x49, 0xe0, 0xfc, 0x0c, 0xa4, 0xfb, 0x32, 0x89, 0x83, 0xee, 0x76, 0xbb, 0xc5, 0xcd, 0xcd, 0x0d, 0x3e, 0x7f, 0xfe, 0x8c, 0xbf, 0xfc, 0xcb, 0xbf, 0x24, 0x2e, 0xd9, 0x7e, 0x8f, 0xaf, 0xbe, 0xfa, 0x0a, 0x1f, 0x3e, 0x7c, 0x88, 0xa9, 0xa0, 0x53, 0xf7, 0x3b, 0xc6, 0x18, 0xca, 0xb2, 0x44, 0x55, 0x55, 0x70, 0x79, 0x06, 0xc1, 0xc8, 0x54, 0x49, 0x4a, 0x09, 0x08, 0x0e, 0x39, 0x95, 0x26, 0x84, 0xc3, 0x3d, 0x4c, 0xcc, 0xd3, 0x9d, 0x67, 0xf8, 0x15, 0x26, 0x89, 0xa9, 0x27, 0x77, 0x28, 0x16, 0xe1, 0x60, 0x0d, 0xfb, 0x92, 0x29, 0x21, 0xe9, 0xdc, 0xfe, 0xce, 0xef, 0x80, 0x26, 0x36, 0x76, 0x97, 0x9d, 0x6e, 0xe8, 0x76, 0x82, 0x2e, 0x2f, 0x14, 0x8c, 0x30, 0xa5, 0x39, 0xe7, 0x90, 0x48, 0x01, 0x35, 0x1a, 0x6c, 0x37, 0x7b, 0x34, 0x4d, 0x13, 0x63, 0x5b, 0x43, 0xf1, 0x7b, 0x7e, 0xa6, 0x64, 0x35, 0xe5, 0xa3, 0x5a, 0x79, 0x42, 0x3e, 0xb9, 0x5c, 0x26, 0xe8, 0xfb, 0x0e, 0x45, 0x65, 0xc1, 0xac, 0x81, 0x1e, 0x34, 0x86, 0xb6, 0x89, 0xbb, 0xe3, 0xa7, 0xa7, 0x47, 0x74, 0x5d, 0x47, 0xaf, 0x39, 0xcf, 0x51, 0xa4, 0x89, 0xdf, 0x93, 0x3a, 0xa4, 0x82, 0xc3, 0x8c, 0x03, 0x94, 0xb5, 0x28, 0xe7, 0x14, 0x1f, 0x78, 0xc4, 0x1e, 0x0e, 0xda, 0xb3, 0x79, 0xc9, 0x55, 0xea, 0xf9, 0xf9, 0x0b, 0xca, 0xd4, 0x02, 0x56, 0xc1, 0x72, 0x07, 0xa7, 0x0d, 0xc6, 0xa1, 0x01, 0x0c, 0x83, 0x52, 0x1d, 0xac, 0xd3, 0xc8, 0xd2, 0x19, 0xe9, 0xcc, 0x9d, 0x82, 0xb5, 0x12, 0xd6, 0xc2, 0x17, 0x57, 0x7d, 0x66, 0x42, 0x10, 0x0c, 0x14, 0xa6, 0xc5, 0x94, 0xf6, 0xfc, 0x75, 0x94, 0x8d, 0x50, 0xd7, 0xa6, 0x7c, 0xd6, 0xbc, 0xc1, 0x38, 0x2a, 0x2c, 0x97, 0xeb, 0x08, 0xd5, 0x84, 0x1d, 0xf2, 0x54, 0xea, 0x33, 0xf4, 0x0a, 0x8c, 0x3b, 0x48, 0x01, 0x18, 0x4e, 0x46, 0x28, 0x8c, 0x51, 0x63, 0xd7, 0x77, 0x2d, 0x05, 0xc4, 0x4c, 0xbe, 0x3f, 0x14, 0xf0, 0x28, 0x6f, 0x34, 0x63, 0xbc, 0xc8, 0xc2, 0x85, 0x17, 0x7e, 0x4d, 0x63, 0x76, 0x43, 0x91, 0x0a, 0x13, 0x72, 0xf8, 0xde, 0x3c, 0xa9, 0x48, 0xb6, 0x95, 0x65, 0x67, 0x50, 0x7c, 0x78, 0xbc, 0x50, 0xa0, 0x9a, 0xa6, 0x89, 0xdd, 0x69, 0x80, 0xdc, 0x83, 0xcd, 0x62, 0x58, 0x0b, 0x1c, 0x8f, 0x47, 0x0a, 0xea, 0xe9, 0xfb, 0xb8, 0xc6, 0x39, 0xc5, 0x72, 0x8a, 0x33, 0x68, 0x34, 0xea, 0x42, 0xad, 0x80, 0x43, 0x82, 0x41, 0x6b, 0x34, 0x4d, 0x07, 0x6d, 0x0f, 0x68, 0x8e, 0xd4, 0x14, 0xbc, 0xff, 0xe6, 0x6b, 0x3c, 0x3e, 0x6c, 0x90, 0xe7, 0x39, 0xd2, 0xbc, 0x80, 0x63, 0xd4, 0x7c, 0xd4, 0xf3, 0x59, 0x6c, 0x56, 0x8f, 0xdb, 0x0d, 0xb8, 0x14, 0x48, 0xd2, 0x14, 0x4d, 0xd3, 0xa0, 0xeb, 0xba, 0x08, 0xe7, 0x1f, 0xbb, 0x1e, 0xab, 0xe5, 0x0d, 0xb8, 0xa4, 0xd7, 0x61, 0x94, 0x42, 0x21, 0x32, 0xa4, 0x59, 0x0a, 0x0b, 0x85, 0x71, 0xd4, 0x91, 0xf5, 0x1f, 0x10, 0x86, 0xf0, 0x19, 0x05, 0x2b, 0xe6, 0xe3, 0xb1, 0xbf, 0x7a, 0x10, 0x9f, 0x12, 0xb4, 0xb2, 0xb3, 0xdd, 0xb9, 0xd1, 0x03, 0x8c, 0x76, 0x70, 0xdc, 0xc1, 0x49, 0x76, 0x86, 0x56, 0x5c, 0x3b, 0xf0, 0xf9, 0x04, 0xb2, 0x75, 0xde, 0xa1, 0x6f, 0xfa, 0xbd, 0x4a, 0xd9, 0x09, 0x32, 0x76, 0xda, 0xa9, 0x87, 0x5f, 0x41, 0x36, 0x18, 0xe6, 0x96, 0xe0, 0x04, 0x18, 0x57, 0x44, 0x8a, 0x92, 0x0e, 0xb7, 0xdb, 0x2d, 0xf6, 0x87, 0x67, 0x38, 0xdb, 0x42, 0x26, 0x06, 0x89, 0xe4, 0x48, 0x93, 0x9c, 0x7c, 0xda, 0x1d, 0x3c, 0x19, 0xcf, 0x45, 0x73, 0xa2, 0xe0, 0x19, 0x21, 0xe3, 0x54, 0x4e, 0xb6, 0xb9, 0x2c, 0xc8, 0x67, 0xbd, 0xb3, 0xd6, 0xac, 0x9e, 0x41, 0xf0, 0x1c, 0xce, 0xa6, 0xe8, 0x7b, 0x8e, 0x71, 0xa0, 0xc8, 0x65, 0xc6, 0x0c, 0x8a, 0x32, 0x81, 0x10, 0x06, 0x42, 0x72, 0x48, 0xc9, 0xc8, 0x76, 0xd5, 0x38, 0x68, 0x8c, 0xa4, 0x01, 0x17, 0x0c, 0x6f, 0xef, 0x97, 0x50, 0xca, 0x90, 0xb3, 0xa5, 0x76, 0x30, 0x30, 0x60, 0x82, 0x45, 0x1b, 0xe1, 0xba, 0x2a, 0xa8, 0xe9, 0x32, 0x06, 0xaa, 0x1f, 0xa1, 0xf5, 0x48, 0x61, 0x3a, 0xaa, 0xf6, 0x53, 0xff, 0x39, 0x89, 0xec, 0xcf, 0xf1, 0xc5, 0x7f, 0xed, 0xb3, 0xb8, 0xfa, 0xf9, 0x4c, 0x6c, 0x5a, 0xa7, 0x96, 0x9f, 0xe1, 0xba, 0xbe, 0x74, 0x39, 0xbb, 0x8c, 0x1a, 0x7d, 0x61, 0x22, 0x73, 0x89, 0x26, 0x38, 0xbc, 0x18, 0xb8, 0xa6, 0xbf, 0x0b, 0x7f, 0x0d, 0x85, 0x33, 0x48, 0x4a, 0x09, 0x30, 0x0d, 0x6b, 0x7c, 0x91, 0xb3, 0x02, 0xbf, 0xf8, 0xf6, 0x5b, 0x6c, 0x36, 0x3b, 0xe4, 0x99, 0xc6, 0xdf, 0xfc, 0xcd, 0xdf, 0xe2, 0x7f, 0xff, 0x3f, 0xfe, 0x37, 0x7c, 0xf7, 0xdd, 0xbf, 0xc7, 0xfe, 0xb0, 0xc1, 0xb2, 0x4a, 0x21, 0x65, 0xe2, 0x1b, 0xaa, 0x04, 0x6d, 0xdb, 0xe2, 0x66, 0xc9, 0xe2, 0x10, 0x63, 0xad, 0x89, 0xab, 0xd1, 0xf0, 0x3b, 0x0f, 0x12, 0x3f, 0xc7, 0xa0, 0x8d, 0x05, 0xac, 0x81, 0x52, 0x34, 0x3c, 0xfc, 0xf5, 0x5f, 0xff, 0x0d, 0xd6, 0xcb, 0x19, 0xfa, 0xee, 0x80, 0x7f, 0xfc, 0xc7, 0xff, 0x8a, 0xcd, 0xf6, 0xbf, 0x4d, 0xd0, 0x88, 0x30, 0x1d, 0x33, 0x8f, 0xf0, 0x09, 0x0f, 0xe7, 0x13, 0xe2, 0xab, 0xb9, 0xf6, 0xa4, 0xdf, 0x3d, 0xac, 0x25, 0x0f, 0xf4, 0x6e, 0xec, 0x7c, 0x12, 0xa7, 0x43, 0x51, 0x66, 0x28, 0x44, 0x86, 0x71, 0xec, 0x61, 0x2d, 0x21, 0xd4, 0xcc, 0x37, 0xcc, 0xd6, 0xf2, 0xb8, 0xf2, 0x9d, 0x22, 0x1a, 0x50, 0x9c, 0x42, 0xbd, 0x2e, 0xd6, 0x5d, 0xe4, 0x53, 0xa0, 0x49, 0xe1, 0x34, 0x55, 0x28, 0x08, 0x41, 0x66, 0x3d, 0x13, 0x04, 0x65, 0xb3, 0xd9, 0xe0, 0x97, 0xbf, 0xfc, 0x65, 0x4c, 0x05, 0x95, 0x52, 0x46, 0x08, 0x7e, 0xbf, 0xdf, 0x9f, 0xf1, 0x92, 0xc2, 0x59, 0x5c, 0x55, 0x15, 0xaa, 0xaa, 0xc2, 0x63, 0x4b, 0xe7, 0x8d, 0xf5, 0xe7, 0x07, 0xe7, 0x1c, 0x92, 0x6e, 0x52, 0x03, 0x16, 0x61, 0x94, 0x13, 0x6b, 0x78, 0x1c, 0xbd, 0xee, 0x55, 0x9e, 0xdf, 0xcc, 0xe3, 0x48, 0x3f, 0xa0, 0x2a, 0x6a, 0x80, 0x71, 0x40, 0x48, 0x70, 0xb0, 0x33, 0x57, 0x9d, 0x30, 0xed, 0x91, 0x6c, 0xfd, 0xdc, 0xb8, 0xfe, 0x24, 0x1b, 0x4a, 0xce, 0x62, 0x2e, 0x2f, 0x2f, 0xbe, 0x40, 0x8a, 0x0b, 0xcc, 0xf3, 0x70, 0x58, 0x86, 0x02, 0xc0, 0x30, 0x31, 0xe3, 0x3f, 0x76, 0xd1, 0x4d, 0x87, 0x76, 0xc6, 0x02, 0xb7, 0xb7, 0xb7, 0xf4, 0x7c, 0x2c, 0x30, 0x8e, 0x1a, 0xbd, 0x27, 0x81, 0xf4, 0x7d, 0x8f, 0xa6, 0x3d, 0x40, 0x66, 0x3b, 0x0f, 0x21, 0x31, 0x1c, 0x9b, 0x06, 0x0e, 0x74, 0xe1, 0x5a, 0xa7, 0x71, 0x7b, 0xb7, 0xc6, 0x7e, 0xbf, 0x07, 0x98, 0x45, 0x3d, 0x9b, 0x45, 0xed, 0x70, 0xc8, 0x57, 0xa7, 0xee, 0x36, 0xec, 0x0b, 0x2d, 0x8a, 0x22, 0x83, 0xb1, 0x0a, 0xc7, 0xdd, 0x16, 0xfd, 0xd0, 0xe1, 0xd8, 0xec, 0x90, 0xb8, 0x0c, 0x72, 0x31, 0x43, 0x51, 0x24, 0xb0, 0x7a, 0x00, 0x8c, 0x86, 0xb6, 0x16, 0xce, 0x69, 0x9a, 0x3a, 0x38, 0xa0, 0x0c, 0x4d, 0xd5, 0xda, 0x28, 0x30, 0x70, 0x42, 0x20, 0xf4, 0x18, 0x8b, 0x60, 0x38, 0xe8, 0x03, 0xfc, 0x12, 0xd6, 0x21, 0x8c, 0x31, 0xcc, 0xaa, 0xe5, 0x69, 0x3a, 0xe7, 0x1a, 0x45, 0x56, 0xa2, 0x2e, 0x45, 0x2c, 0xba, 0xc7, 0xe3, 0x31, 0x32, 0x67, 0x39, 0x08, 0x69, 0xa0, 0x14, 0x24, 0x07, 0x67, 0x10, 0x0b, 0x4a, 0x78, 0x6d, 0xe1, 0x66, 0x0e, 0xc4, 0x42, 0x72, 0x80, 0xe2, 0x93, 0x78, 0xdd, 0x34, 0x12, 0xd0, 0x9c, 0x73, 0x38, 0x1c, 0x77, 0x2f, 0xa4, 0x64, 0xce, 0xb9, 0xc8, 0x92, 0x0f, 0x46, 0x0e, 0x53, 0xeb, 0xdd, 0x30, 0x89, 0x0f, 0xc3, 0x80, 0xbe, 0x51, 0xb1, 0x59, 0x49, 0x62, 0xb7, 0x7e, 0x9a, 0x12, 0xab, 0xaa, 0x46, 0xd3, 0x34, 0xf4, 0x79, 0x79, 0x18, 0x35, 0x5c, 0xd0, 0xe4, 0xc0, 0x65, 0x22, 0x79, 0x24, 0xe8, 0x40, 0xa5, 0x94, 0x48, 0x9c, 0x24, 0xcd, 0x36, 0x18, 0x2c, 0x0c, 0x8c, 0xd3, 0xd0, 0x46, 0x63, 0x18, 0x07, 0x0c, 0xe3, 0x10, 0x1b, 0x3e, 0xa5, 0x1c, 0xb4, 0x1d, 0xb0, 0xdd, 0x1d, 0x88, 0x13, 0x90, 0xa5, 0xa4, 0x13, 0x96, 0x09, 0x66, 0x8b, 0x15, 0x56, 0x37, 0x6f, 0xe3, 0x0e, 0xb1, 0xaa, 0xe9, 0x77, 0xc7, 0x03, 0x37, 0x40, 0xc7, 0xa6, 0x22, 0xa0, 0x1b, 0x55, 0x55, 0xa1, 0x39, 0x1e, 0xa1, 0x94, 0x42, 0x55, 0x15, 0x58, 0x2e, 0x97, 0xa8, 0x66, 0x35, 0x8c, 0x05, 0x0e, 0xfb, 0x16, 0xfb, 0xfd, 0x1e, 0x65, 0x05, 0xdc, 0xdd, 0xbf, 0xc3, 0xfb, 0xf7, 0xef, 0x91, 0xa6, 0x73, 0x14, 0x45, 0x71, 0xbe, 0x06, 0xf0, 0xc4, 0x50, 0xba, 0xef, 0xf2, 0x9f, 0xd5, 0x12, 0x27, 0x32, 0x89, 0xeb, 0x87, 0x4b, 0x59, 0x1e, 0x4d, 0xec, 0xe6, 0xd5, 0x1d, 0x39, 0xfd, 0x59, 0xff, 0x89, 0x24, 0xbb, 0x49, 0x53, 0x94, 0x26, 0x24, 0x4b, 0xcc, 0xb4, 0x6f, 0x26, 0x12, 0x0c, 0xfa, 0x64, 0xf6, 0x41, 0x19, 0xda, 0xe7, 0xc6, 0xf6, 0xdf, 0x7f, 0xff, 0x3d, 0xba, 0xee, 0x0d, 0xde, 0xef, 0xde, 0x62, 0x77, 0xf8, 0x82, 0xe3, 0xfe, 0x01, 0x4d, 0xbb, 0x41, 0x3f, 0x1e, 0x60, 0xd4, 0x08, 0xce, 0x0c, 0x04, 0x77, 0x60, 0x2c, 0x85, 0xb3, 0x1a, 0x46, 0x8d, 0x9e, 0xa4, 0xe4, 0x27, 0x5e, 0xab, 0xe1, 0x1c, 0x71, 0x23, 0x18, 0xa3, 0x5c, 0x00, 0xce, 0x39, 0x60, 0xc8, 0x68, 0x63, 0xbb, 0x6d, 0x91, 0x26, 0x0a, 0x89, 0x98, 0x43, 0x88, 0x12, 0x75, 0x4d, 0xc4, 0x20, 0x30, 0x3a, 0x04, 0x9b, 0xae, 0xc7, 0xd0, 0x2b, 0xb4, 0x56, 0x01, 0xd6, 0xc2, 0x3a, 0x07, 0x12, 0x6a, 0x58, 0x08, 0xd1, 0x63, 0xb3, 0xed, 0x91, 0x24, 0xde, 0x80, 0x88, 0x25, 0x74, 0x10, 0x1b, 0x07, 0xa3, 0x47, 0x30, 0x46, 0x6c, 0xfe, 0xc5, 0x62, 0x81, 0xbb, 0xfb, 0x37, 0xb8, 0xbf, 0xbf, 0xc7, 0x62, 0xbd, 0x8a, 0x0d, 0xb4, 0x63, 0x40, 0x77, 0x78, 0xb9, 0xbf, 0x7e, 0xdd, 0x26, 0xd4, 0xbd, 0x3a, 0x0d, 0xbf, 0x56, 0x8c, 0xaf, 0x41, 0xf5, 0xe7, 0xba, 0xfd, 0x9f, 0x0f, 0x19, 0x9a, 0xa2, 0x06, 0x57, 0x49, 0x79, 0x48, 0x2e, 0x92, 0x14, 0xf9, 0x84, 0x7f, 0xe4, 0x00, 0xe8, 0xd8, 0x0c, 0xc7, 0xfb, 0xd7, 0xda, 0x38, 0x58, 0x3d, 0x3f, 0x1f, 0xf1, 0xef, 0xfe, 0x87, 0x7f, 0x8f, 0x44, 0xe6, 0xde, 0xff, 0xc3, 0x92, 0x7f, 0xc2, 0x66, 0x87, 0xe5, 0x6a, 0x0e, 0x60, 0x04, 0xe7, 0x12, 0x69, 0x9a, 0x47, 0x2b, 0x71, 0x30, 0x62, 0x93, 0x0b, 0x9e, 0x40, 0x1b, 0x1d, 0x57, 0x35, 0x27, 0x2f, 0x05, 0x16, 0x89, 0x68, 0xf3, 0xc5, 0x1a, 0x7a, 0xec, 0xd1, 0x76, 0x7b, 0x2c, 0xe5, 0x12, 0xcb, 0xc5, 0x7b, 0x94, 0x79, 0x82, 0xdf, 0xff, 0xcb, 0x3f, 0x79, 0x1e, 0x95, 0x3e, 0xf3, 0xe7, 0x97, 0x92, 0xfb, 0x0c, 0x0c, 0x6f, 0x60, 0xe6, 0x84, 0x4f, 0x2b, 0x4b, 0xfc, 0xfb, 0x66, 0x62, 0xe3, 0x9d, 0x24, 0x09, 0x7a, 0x35, 0x46, 0xd5, 0x0b, 0xbd, 0x5f, 0x40, 0x51, 0x64, 0xb0, 0x4e, 0x46, 0xa4, 0x88, 0xc8, 0x9a, 0x76, 0xb2, 0xb2, 0xb2, 0x11, 0xe6, 0x0e, 0xe7, 0xf0, 0xe5, 0x67, 0x13, 0xee, 0xe5, 0xd1, 0x9d, 0xa4, 0x98, 0xd7, 0x1a, 0xaf, 0xc0, 0x9d, 0x09, 0xb5, 0x52, 0x4a, 0x89, 0x8f, 0x1f, 0x3f, 0x62, 0xb9, 0x5c, 0x42, 0x6b, 0x8d, 0xbb, 0xbb, 0xbb, 0xb3, 0x1c, 0x95, 0x4b, 0x5f, 0x8e, 0xf7, 0xef, 0xbf, 0xa1, 0x3a, 0x3d, 0x10, 0x04, 0xcf, 0xc8, 0x58, 0x66, 0x8c, 0x07, 0x5c, 0x98, 0xc2, 0x03, 0xac, 0x1e, 0xe0, 0xc4, 0x00, 0xc1, 0x4e, 0x9d, 0xde, 0x88, 0xe5, 0x77, 0x7c, 0x71, 0xb1, 0x86, 0xf4, 0x36, 0x4c, 0xfc, 0x93, 0x4f, 0x90, 0xac, 0xf5, 0x6c, 0x7a, 0x7a, 0x81, 0xa9, 0x9f, 0xc2, 0x02, 0x2a, 0x10, 0xa6, 0xa8, 0xf0, 0x3c, 0x1e, 0x1f, 0x1f, 0x63, 0x51, 0xcb, 0xf3, 0x3c, 0x92, 0xec, 0x42, 0x53, 0x90, 0x7a, 0x68, 0x83, 0x68, 0xfd, 0x14, 0x24, 0xd3, 0x0f, 0x6d, 0xdc, 0xab, 0x6e, 0xb7, 0x5b, 0x08, 0x9e, 0x20, 0x2b, 0x72, 0x0f, 0xff, 0x90, 0x89, 0x84, 0x70, 0xf4, 0xe1, 0x33, 0x47, 0x59, 0xd8, 0x02, 0x55, 0xf7, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xd6, 0x79, 0x4e, 0x69, 0x67, 0x00, 0xf0, 0xf9, 0x13, 0xed, 0xa5, 0xff, 0xe7, 0xff, 0xf0, 0x3f, 0xe1, 0xe9, 0xe9, 0x29, 0x32, 0x19, 0xc3, 0x84, 0x6a, 0x8c, 0x81, 0x1a, 0x46, 0x48, 0x2e, 0x60, 0x9c, 0x43, 0xdb, 0x1d, 0xb1, 0xdd, 0x3e, 0x23, 0xcb, 0x13, 0x18, 0xa3, 0xb0, 0xdb, 0x3f, 0x47, 0x09, 0x5d, 0x73, 0x3c, 0xe0, 0xd6, 0xad, 0x91, 0xe7, 0x39, 0xac, 0x66, 0xd0, 0xa6, 0x05, 0xe7, 0x16, 0x79, 0x5a, 0xa2, 0xaa, 0x73, 0x1c, 0x0e, 0x83, 0x87, 0x8b, 0x00, 0x29, 0x73, 0xa4, 0x49, 0x86, 0xa2, 0xe0, 0x3e, 0xf0, 0xc3, 0x45, 0x95, 0x41, 0x28, 0x76, 0x7d, 0xdf, 0xc7, 0x1b, 0x35, 0xcb, 0x32, 0x6a, 0x38, 0xfc, 0xd7, 0x43, 0xf1, 0x0e, 0xd3, 0x9d, 0xd6, 0x1a, 0x37, 0x37, 0x37, 0xb1, 0x30, 0x37, 0x4d, 0x13, 0xa7, 0xdf, 0xa2, 0x28, 0xce, 0xde, 0xcb, 0x50, 0x90, 0x42, 0xc3, 0x14, 0xa6, 0xdb, 0x9b, 0x9b, 0x9b, 0xb3, 0xcf, 0xa7, 0x6d, 0xdb, 0x33, 0x73, 0x86, 0xd9, 0xbc, 0x3e, 0x23, 0x6c, 0x84, 0x1b, 0x67, 0x18, 0x86, 0x98, 0x4f, 0x3c, 0x25, 0xa1, 0x4d, 0x77, 0xc4, 0x4a, 0x29, 0x58, 0xc5, 0xce, 0x62, 0x49, 0x2f, 0x27, 0x85, 0x4f, 0x9f, 0x3e, 0x93, 0x4d, 0x69, 0x59, 0x46, 0x8b, 0xc7, 0x70, 0x8d, 0x28, 0xa5, 0xb0, 0xba, 0x59, 0x90, 0x81, 0x90, 0x27, 0xdf, 0x85, 0x3d, 0x54, 0x80, 0xae, 0x14, 0x6c, 0x24, 0xe5, 0x04, 0x4e, 0x48, 0x28, 0x98, 0x4a, 0x29, 0xcc, 0x17, 0x6f, 0x3d, 0xab, 0xbf, 0xc4, 0xed, 0x9b, 0x19, 0xde, 0xbc, 0x79, 0x83, 0xa7, 0xcd, 0x26, 0xc6, 0x31, 0x9e, 0xd8, 0xc8, 0x0c, 0xb3, 0xba, 0x86, 0xe3, 0x22, 0x36, 0x94, 0x59, 0x91, 0xa3, 0xdf, 0xef, 0x31, 0x76, 0x94, 0x32, 0xc5, 0x04, 0xc7, 0x7c, 0x3e, 0xc7, 0xc7, 0x8f, 0x1f, 0x31, 0x0e, 0x03, 0x31, 0xde, 0x8b, 0x1c, 0x5d, 0x3b, 0xc0, 0x02, 0x78, 0xfb, 0xfe, 0x2b, 0x7c, 0xfb, 0x8b, 0x5f, 0xa2, 0xae, 0x17, 0xb0, 0xe0, 0x90, 0x69, 0x02, 0x63, 0x92, 0x38, 0xc1, 0x83, 0x93, 0x6c, 0x87, 0x09, 0x0e, 0xe3, 0x49, 0x65, 0xe6, 0x4a, 0x78, 0xcc, 0x19, 0x0b, 0xda, 0x0c, 0xf1, 0x9a, 0xb8, 0xcc, 0xba, 0x0e, 0x6b, 0xb3, 0x6b, 0x05, 0x22, 0xea, 0xec, 0x8d, 0x79, 0x35, 0xe4, 0x25, 0x3c, 0x7e, 0xd4, 0xce, 0x4e, 0xd6, 0x2d, 0xc6, 0x90, 0xce, 0x9b, 0xc9, 0xca, 0x43, 0xb3, 0x26, 0xe6, 0xc7, 0x32, 0x9c, 0x0e, 0x9d, 0xed, 0xfe, 0x11, 0x79, 0x2e, 0x31, 0x5b, 0xcc, 0x31, 0x9b, 0x67, 0x38, 0x2e, 0x6b, 0x6c, 0x37, 0x25, 0x36, 0xdb, 0xcf, 0x68, 0xdb, 0x06, 0x5a, 0x35, 0x48, 0x04, 0xe5, 0x02, 0x58, 0x03, 0x30, 0x47, 0x13, 0x99, 0xf0, 0xf7, 0xa9, 0x56, 0xcc, 0x5b, 0xe9, 0x1a, 0x18, 0x8f, 0xac, 0x38, 0xe6, 0x89, 0x80, 0x9a, 0xac, 0x97, 0xad, 0x05, 0x78, 0xc2, 0xb1, 0x5e, 0xaf, 0xf1, 0xf6, 0xfe, 0x1b, 0xd4, 0xb3, 0x19, 0x46, 0xd5, 0xe3, 0x70, 0xd8, 0xe3, 0xa7, 0x8f, 0xd4, 0xd4, 0x36, 0xcd, 0x01, 0x16, 0x0a, 0x52, 0x70, 0x24, 0x22, 0xf8, 0x64, 0x70, 0x94, 0x15, 0xdd, 0x57, 0x5a, 0x01, 0xa3, 0xd2, 0x90, 0x32, 0xc7, 0xed, 0xed, 0x1b, 0x7c, 0xf3, 0xcd, 0x2f, 0x70, 0x7b, 0x73, 0xe7, 0x55, 0x32, 0x5e, 0x87, 0x2c, 0x49, 0x8e, 0x14, 0xae, 0x6f, 0xad, 0x35, 0x18, 0xb2, 0x57, 0x6d, 0x85, 0x03, 0x12, 0x75, 0x6d, 0x22, 0x8f, 0x9f, 0xa5, 0xe0, 0x2f, 0x15, 0x08, 0x38, 0x15, 0xfc, 0xf8, 0xf9, 0xb3, 0xd3, 0xf7, 0x52, 0x7a, 0xdd, 0x84, 0x68, 0xfc, 0xca, 0xce, 0xfc, 0xf2, 0x67, 0x5e, 0x0e, 0x4d, 0xc1, 0x34, 0xe4, 0x35, 0x42, 0x5e, 0xf8, 0x59, 0x02, 0x27, 0x0b, 0xda, 0x30, 0x2d, 0x9a, 0x89, 0xa9, 0x8c, 0x10, 0x02, 0x5d, 0x37, 0x60, 0xb9, 0x98, 0x21, 0x4d, 0x53, 0xfc, 0xa7, 0xff, 0xf4, 0xbf, 0xe2, 0xff, 0xfe, 0xed, 0xff, 0x09, 0x21, 0xbf, 0x42, 0x95, 0xf0, 0xb3, 0x9c, 0x90, 0xd0, 0xe8, 0x33, 0x67, 0x20, 0x85, 0x9d, 0x40, 0xc9, 0x9c, 0x06, 0x3f, 0x4f, 0x3c, 0x73, 0xfe, 0xfc, 0x7b, 0x7a, 0x7e, 0xc0, 0xa2, 0xae, 0x50, 0xd7, 0x35, 0xb4, 0x22, 0x0e, 0xcc, 0xc7, 0xcd, 0x23, 0x1e, 0x1f, 0x9e, 0xe9, 0xfc, 0x3a, 0xd8, 0x68, 0xad, 0xca, 0x79, 0xea, 0xd3, 0xf6, 0x02, 0xb9, 0xdb, 0x79, 0x13, 0x34, 0xc4, 0xe9, 0x3d, 0x3c, 0xff, 0xc0, 0xa7, 0x61, 0x92, 0x23, 0xcb, 0x72, 0x08, 0xc9, 0x30, 0x0c, 0x1d, 0x9c, 0x93, 0xa8, 0xaa, 0x0a, 0x92, 0x8b, 0xe8, 0x99, 0x42, 0x7b, 0x78, 0x33, 0x49, 0x73, 0x64, 0x3e, 0xc7, 0x02, 0x18, 0xcc, 0x78, 0xf6, 0xde, 0x9e, 0x31, 0xde, 0x25, 0x87, 0xb0, 0xe7, 0x06, 0x48, 0x79, 0x9e, 0xa1, 0x2c, 0x8b, 0x78, 0x0e, 0x96, 0xe5, 0x92, 0x2c, 0xc2, 0x19, 0xc3, 0x76, 0xbb, 0x8d, 0x8d, 0xc5, 0x7e, 0xbf, 0x8f, 0x01, 0x2d, 0x01, 0xbd, 0x0b, 0x30, 0x7b, 0x9e, 0xe7, 0x51, 0x0d, 0xd3, 0x38, 0x7f, 0xee, 0x0a, 0x89, 0x54, 0x26, 0xb4, 0x9f, 0x5f, 0xaf, 0x6f, 0xcf, 0x2c, 0x2d, 0xa7, 0x7a, 0x60, 0x21, 0x92, 0x58, 0x3c, 0x82, 0x81, 0x0a, 0xc5, 0x46, 0xe6, 0x91, 0xc5, 0x7c, 0x5e, 0xcc, 0xcf, 0xa1, 0x87, 0xba, 0xae, 0xe3, 0x7e, 0x36, 0xc0, 0x06, 0xd3, 0xbd, 0x5d, 0x38, 0x28, 0x02, 0xb4, 0x3f, 0x8e, 0x63, 0x24, 0x30, 0x39, 0xe7, 0xe2, 0xd4, 0x38, 0xd5, 0xb0, 0x6b, 0xad, 0x63, 0x93, 0x41, 0xb6, 0xab, 0x25, 0xd2, 0x8c, 0x9e, 0x3b, 0xed, 0x73, 0xc8, 0xcc, 0xa2, 0xef, 0x7b, 0x24, 0xd2, 0x6b, 0xb7, 0x8d, 0x86, 0x1a, 0x35, 0x74, 0xd8, 0x45, 0xb1, 0x11, 0xb3, 0x59, 0x85, 0xbe, 0xfd, 0x82, 0xbe, 0x3d, 0xa0, 0x39, 0x98, 0x28, 0x6f, 0xfa, 0x8b, 0xef, 0xde, 0xe2, 0xab, 0xaf, 0xbe, 0x42, 0xd7, 0x7c, 0x82, 0x1a, 0x76, 0xe8, 0xdb, 0x2d, 0x18, 0x63, 0x68, 0xfc, 0xfb, 0x12, 0x26, 0xd8, 0x2c, 0xcb, 0x30, 0x4a, 0x62, 0x9d, 0x5b, 0xa5, 0x31, 0x8c, 0xd4, 0xd9, 0x5b, 0xa3, 0x60, 0x1c, 0xc7, 0xac, 0x4c, 0xc0, 0xf2, 0x19, 0x8c, 0xa1, 0x62, 0x9a, 0x4a, 0x01, 0xa7, 0x53, 0x8c, 0x1a, 0x70, 0xbd, 0x00, 0x06, 0x8e, 0x72, 0x59, 0xfa, 0x09, 0x9b, 0xd8, 0xfb, 0xfb, 0x6e, 0x8f, 0xf9, 0x7c, 0x4e, 0x52, 0x2a, 0xdf, 0xa8, 0x84, 0x1b, 0x69, 0xda, 0xa9, 0xf5, 0x7d, 0x4f, 0x66, 0x26, 0xb6, 0x8f, 0x9f, 0x57, 0x60, 0x5b, 0x07, 0x58, 0x3b, 0x4d, 0xd3, 0xb8, 0x3a, 0x09, 0x45, 0x28, 0xbc, 0x97, 0x01, 0xe6, 0x16, 0x52, 0x62, 0xbf, 0xdf, 0x9f, 0x19, 0x26, 0x1c, 0x0e, 0x87, 0x88, 0x8a, 0x84, 0x70, 0x1e, 0x29, 0xe5, 0xc4, 0xcd, 0xe8, 0xb4, 0xf2, 0xd8, 0x6e, 0xb7, 0xb8, 0xbb, 0xbb, 0x8b, 0x93, 0x7b, 0xf8, 0xbb, 0xf5, 0x7a, 0x7d, 0x46, 0xe2, 0x98, 0x4e, 0x9f, 0x61, 0x15, 0x53, 0x14, 0x05, 0x5a, 0xd3, 0xa0, 0xeb, 0x06, 0x3c, 0x3e, 0x12, 0x3f, 0xa1, 0xae, 0xe6, 0xf1, 0x58, 0xdb, 0x6e, 0xb7, 0xf1, 0xda, 0xa0, 0x62, 0x22, 0x91, 0xa6, 0x40, 0xd7, 0x0e, 0x68, 0x7b, 0x6a, 0x40, 0x06, 0xb3, 0x89, 0x64, 0x9d, 0x24, 0xad, 0xc0, 0x38, 0x47, 0x37, 0x9c, 0xe0, 0x7d, 0x0d, 0x07, 0xc6, 0x14, 0xd8, 0xbe, 0x9f, 0xec, 0x1d, 0x39, 0x1c, 0xa8, 0xb8, 0x3f, 0x1f, 0x0f, 0xfe, 0xfd, 0xc9, 0xc1, 0x93, 0x1c, 0xa3, 0xe1, 0x58, 0xad, 0xef, 0x91, 0x17, 0x73, 0xec, 0xf6, 0x3d, 0x8e, 0xfd, 0x67, 0xd4, 0x15, 0x99, 0x19, 0xed, 0x3e, 0x7f, 0x8a, 0x5a, 0xee, 0x24, 0xc9, 0xd0, 0xb7, 0x03, 0x64, 0x2a, 0xd0, 0x34, 0x0a, 0x8e, 0x3b, 0x1c, 0x8e, 0x0d, 0x0e, 0xff, 0xf4, 0x8f, 0x48, 0xd2, 0x04, 0x45, 0x51, 0x01, 0x8c, 0xa1, 0x69, 0x07, 0x70, 0x26, 0x51, 0xd4, 0x33, 0x64, 0x79, 0x4d, 0xf6, 0xb8, 0x3c, 0x85, 0xe0, 0x12, 0xa3, 0xd2, 0x80, 0x65, 0x1e, 0x2e, 0xa3, 0xb4, 0x3e, 0xad, 0x48, 0xe7, 0x2a, 0xb8, 0x9f, 0x18, 0x44, 0xf2, 0xe2, 0xc0, 0x08, 0xc4, 0x31, 0xce, 0x39, 0x8e, 0x5d, 0x03, 0x96, 0x08, 0x70, 0x70, 0x8c, 0x61, 0xcf, 0xe7, 0x1d, 0xfb, 0x94, 0xa3, 0x69, 0x8a, 0x73, 0x39, 0x39, 0x8c, 0x03, 0x71, 0x27, 0x38, 0x5e, 0x99, 0x2b, 0xfa, 0x7d, 0xba, 0x0f, 0x9b, 0xa6, 0xc1, 0x7a, 0x7d, 0x03, 0x2e, 0xfc, 0x0a, 0xcd, 0x38, 0xc0, 0x1f, 0x2e, 0x2c, 0x04, 0xcd, 0xa0, 0xf3, 0x12, 0x32, 0x0a, 0x1b, 0xa1, 0x03, 0x59, 0xc2, 0x1a, 0x7a, 0x1d, 0x65, 0xf6, 0x16, 0xd6, 0x58, 0x0c, 0xad, 0x06, 0x63, 0x39, 0x38, 0x32, 0xda, 0x73, 0x23, 0x87, 0x1a, 0xb7, 0x48, 0xb3, 0x0f, 0x74, 0xbf, 0x58, 0x0d, 0xce, 0x04, 0x92, 0x2c, 0x05, 0x67, 0x16, 0xce, 0x0c, 0x04, 0x69, 0x67, 0x06, 0x49, 0x06, 0x0c, 0x23, 0x70, 0xe8, 0x34, 0xb8, 0x26, 0x7b, 0x51, 0xc6, 0x38, 0x7a, 0x6b, 0xe1, 0xda, 0x35, 0x84, 0x4c, 0x91, 0xa5, 0x73, 0x48, 0xb1, 0x00, 0x4f, 0x6a, 0x30, 0x5e, 0x83, 0xcb, 0x12, 0x59, 0x5e, 0x61, 0xb5, 0xb6, 0xe8, 0x87, 0x8f, 0xd0, 0x9a, 0x0c, 0x72, 0xb2, 0x44, 0xfa, 0x5d, 0xb5, 0x03, 0xe7, 0x12, 0x7d, 0x9f, 0x61, 0x3e, 0x5b, 0xa2, 0xc8, 0xc9, 0xd4, 0xa3, 0xae, 0xe6, 0xf8, 0xc5, 0x37, 0xdf, 0xe3, 0xed, 0xfd, 0x57, 0xc4, 0x93, 0x30, 0xde, 0xb8, 0x83, 0x93, 0x0e, 0x7c, 0x1c, 0x00, 0x36, 0xb2, 0xa8, 0x27, 0x1f, 0x01, 0x28, 0xed, 0x3d, 0x84, 0xcf, 0x0a, 0xb3, 0x87, 0x91, 0x1d, 0xe2, 0xe7, 0x15, 0x56, 0x11, 0x64, 0x1f, 0x4b, 0xd3, 0x56, 0xea, 0xf8, 0xab, 0x51, 0xbe, 0x34, 0x61, 0xda, 0x2b, 0xdc, 0x86, 0x53, 0x10, 0x0e, 0x73, 0x3c, 0x12, 0x15, 0x2f, 0x2d, 0x92, 0x03, 0x07, 0x82, 0x7b, 0x51, 0xfa, 0xb4, 0xd9, 0x0b, 0xcd, 0xb3, 0xf0, 0xa4, 0xaf, 0x29, 0xc4, 0x3f, 0x6d, 0x4e, 0x94, 0x76, 0xa8, 0x53, 0x8a, 0x28, 0xfd, 0xf4, 0x79, 0x83, 0xc3, 0xae, 0xc1, 0x72, 0x55, 0xe1, 0x78, 0x24, 0xe4, 0xf2, 0x37, 0x7f, 0xfd, 0xef, 0x20, 0xd2, 0x0a, 0x55, 0x96, 0xe0, 0x79, 0x7f, 0xc4, 0x57, 0x5f, 0x7d, 0x85, 0x61, 0x0f, 0x18, 0x24, 0x18, 0x34, 0xc7, 0xd2, 0xa5, 0x50, 0xed, 0x88, 0xa1, 0xef, 0xb1, 0xaa, 0xe7, 0xf8, 0xe9, 0xc7, 0x2f, 0x10, 0xff, 0xca, 0x01, 0x56, 0x03, 0x6e, 0xc4, 0xe8, 0x4e, 0x86, 0x3f, 0x8e, 0x79, 0xf9, 0x1a, 0x67, 0xf1, 0x3e, 0x93, 0x89, 0x43, 0x3f, 0x34, 0x60, 0xdc, 0x00, 0xd6, 0xc0, 0xe8, 0x01, 0x6d, 0xbb, 0xc7, 0xa8, 0x5a, 0x28, 0xd5, 0x13, 0xf1, 0x6d, 0x42, 0xfe, 0x95, 0x22, 0x89, 0x9a, 0x7b, 0x22, 0x31, 0x76, 0x48, 0xd2, 0x84, 0xec, 0xbc, 0x07, 0x1d, 0x43, 0xb9, 0x8a, 0xa2, 0xc2, 0xe1, 0x70, 0x80, 0x53, 0x16, 0x32, 0xe1, 0xe0, 0x82, 0xec, 0xc7, 0xbf, 0xf9, 0xe6, 0x3d, 0x94, 0x1e, 0x7d, 0x20, 0x90, 0xf5, 0x0c, 0xfa, 0x90, 0x50, 0x67, 0x20, 0x98, 0x88, 0x43, 0x2b, 0x63, 0x0c, 0xce, 0x0f, 0x9b, 0x04, 0xef, 0x33, 0x4f, 0x52, 0x0d, 0x8d, 0x13, 0x87, 0xb5, 0x1d, 0x65, 0x60, 0x08, 0x01, 0x35, 0x2a, 0x68, 0x35, 0x22, 0xcf, 0xe6, 0x10, 0x59, 0xe9, 0xbd, 0x49, 0x1c, 0x00, 0x89, 0xc3, 0xe1, 0x08, 0x21, 0x32, 0x6c, 0x36, 0x07, 0x00, 0x0c, 0x8b, 0xc5, 0x02, 0xbb, 0xdd, 0x2e, 0xba, 0x2e, 0x16, 0x45, 0x11, 0xcf, 0x5f, 0x1a, 0x8e, 0x19, 0x94, 0x72, 0x28, 0x96, 0x05, 0x60, 0x35, 0xcc, 0xa8, 0x90, 0x4b, 0x81, 0x77, 0x77, 0xb7, 0x90, 0xc7, 0xe3, 0xf1, 0x8c, 0x4d, 0x17, 0x3e, 0xec, 0x90, 0x87, 0x1b, 0x8a, 0x49, 0x98, 0xb2, 0x43, 0x67, 0xaf, 0x94, 0xc2, 0x6e, 0xb7, 0x8b, 0x53, 0x58, 0x9e, 0xe7, 0xa8, 0xeb, 0xfa, 0x34, 0xc5, 0x2a, 0x85, 0x0f, 0x1f, 0x3e, 0x9c, 0x2e, 0x1e, 0x2f, 0x4b, 0x0a, 0x08, 0xc0, 0x54, 0x9b, 0x18, 0x1e, 0x7f, 0x6a, 0xba, 0x9f, 0x24, 0x49, 0x8c, 0xaf, 0x3b, 0x97, 0xae, 0x9d, 0x7c, 0x8a, 0x8b, 0x8c, 0x18, 0xe5, 0xcb, 0xd5, 0xdc, 0x37, 0x1d, 0xe4, 0x00, 0x67, 0x2d, 0x50, 0xd7, 0x35, 0xa4, 0x20, 0xa3, 0x98, 0x0c, 0x0e, 0x5a, 0x19, 0xec, 0x8e, 0x07, 0x6c, 0xb7, 0x7b, 0xf4, 0x9e, 0x6c, 0xf0, 0xe6, 0x7e, 0x8d, 0xaf, 0xde, 0xbf, 0x41, 0x5d, 0xd7, 0x67, 0xf0, 0x33, 0xe7, 0x1c, 0x4d, 0xb3, 0x03, 0x17, 0x16, 0xc6, 0x0e, 0x9e, 0x64, 0x43, 0xfb, 0x8d, 0xf9, 0x7c, 0x8e, 0xd9, 0xbc, 0xc0, 0x6c, 0x36, 0x83, 0xcb, 0x46, 0xbf, 0x8b, 0x94, 0x80, 0x75, 0xe8, 0x9a, 0x1e, 0x9b, 0xcd, 0x06, 0xcd, 0xbe, 0x41, 0xd7, 0x0e, 0xa8, 0x8a, 0x19, 0x76, 0xbb, 0x03, 0x0e, 0x87, 0x06, 0x8b, 0x59, 0x85, 0x3c, 0xcd, 0xa0, 0x95, 0x41, 0x33, 0x76, 0x70, 0xfb, 0x03, 0x16, 0x2e, 0x78, 0x4d, 0x93, 0x53, 0xdb, 0xd0, 0x8f, 0x13, 0x32, 0x09, 0x8f, 0x86, 0x39, 0x53, 0x8d, 0x75, 0xb8, 0x58, 0x8b, 0xa2, 0xc0, 0xf2, 0xbb, 0x1b, 0x1c, 0x8f, 0xc7, 0xb8, 0x9a, 0xb8, 0xe6, 0xac, 0x36, 0x65, 0x99, 0x87, 0xc2, 0xad, 0xb5, 0x46, 0xd7, 0x75, 0x28, 0xca, 0xf2, 0x4c, 0x0a, 0x17, 0xf6, 0xde, 0x81, 0x4b, 0x90, 0x65, 0x19, 0x1e, 0x1f, 0x1f, 0xb1, 0xdd, 0x6e, 0xd1, 0xb6, 0x2d, 0x96, 0xcb, 0x65, 0x7c, 0x9f, 0x02, 0xe7, 0x62, 0xbb, 0xdd, 0x62, 0x18, 0x86, 0x28, 0x8d, 0x23, 0x02, 0x0c, 0x22, 0x42, 0x30, 0x65, 0xe7, 0x07, 0x08, 0x3f, 0xfa, 0x9b, 0x7b, 0x88, 0x7c, 0x36, 0x9b, 0x45, 0xc2, 0x1f, 0x11, 0x41, 0xe8, 0x86, 0x69, 0xdb, 0x36, 0x7e, 0x1f, 0xb9, 0x01, 0x1a, 0x70, 0x26, 0xbd, 0x5f, 0x74, 0x0e, 0x96, 0xf2, 0xab, 0xaf, 0x33, 0xfa, 0x24, 0x73, 0x76, 0xe6, 0xa3, 0x3c, 0x45, 0x02, 0x18, 0x63, 0x90, 0x09, 0xf3, 0xa9, 0x80, 0x36, 0xf2, 0x03, 0x9a, 0xa6, 0x41, 0xd3, 0x90, 0x5c, 0xcb, 0x59, 0x16, 0x1b, 0x90, 0xb0, 0x66, 0x4a, 0xd3, 0x1c, 0x45, 0x41, 0x48, 0x40, 0xd7, 0x6c, 0x50, 0x54, 0x25, 0xd6, 0x76, 0x8d, 0x2c, 0x2b, 0xa0, 0xfa, 0xc1, 0xeb, 0xb6, 0x7d, 0x9c, 0x1c, 0x1c, 0x64, 0x22, 0xe3, 0x4e, 0x3f, 0x49, 0xb2, 0x93, 0x95, 0x32, 0x67, 0x80, 0x4d, 0xae, 0xc2, 0xab, 0xa7, 0xeb, 0xfd, 0xd4, 0x28, 0xbf, 0xd0, 0x68, 0x4f, 0x5d, 0xc2, 0xc0, 0xce, 0x53, 0xd7, 0x18, 0x1d, 0x8a, 0x65, 0x59, 0x4c, 0xf6, 0xeb, 0x0e, 0x23, 0x1f, 0xa3, 0xe7, 0x79, 0x40, 0x4a, 0xa6, 0x91, 0xc6, 0xe1, 0x5e, 0x0b, 0x9f, 0xa3, 0xf0, 0x0d, 0x05, 0x63, 0x76, 0xb2, 0x5f, 0x75, 0x51, 0x9a, 0x63, 0x22, 0x4b, 0x9b, 0xc7, 0xc9, 0x9c, 0x20, 0x72, 0xf2, 0xdb, 0xb6, 0xcc, 0x45, 0x02, 0x1a, 0x17, 0x00, 0x43, 0x86, 0x2c, 0xad, 0xb1, 0x5c, 0xdc, 0x23, 0x4b, 0x6b, 0x3c, 0x3f, 0x6f, 0xa0, 0x99, 0x80, 0x53, 0x1d, 0x8c, 0xd6, 0x30, 0x4e, 0x79, 0x07, 0x37, 0x07, 0xe6, 0x82, 0x5c, 0x8f, 0x26, 0x30, 0xef, 0x2c, 0x0d, 0xa5, 0x8d, 0x4f, 0xd8, 0x4b, 0x20, 0x73, 0xba, 0xef, 0x67, 0xf5, 0x0a, 0x59, 0x31, 0x23, 0xd6, 0x34, 0x93, 0x48, 0x24, 0x07, 0x2f, 0x33, 0x38, 0x68, 0x0c, 0x3d, 0xa0, 0x15, 0x83, 0x1a, 0x7b, 0x0a, 0xcd, 0xd1, 0x63, 0x24, 0xdf, 0x7e, 0xf7, 0xdd, 0x5f, 0x62, 0xb5, 0xba, 0xc1, 0x6c, 0xb6, 0x00, 0x67, 0x12, 0x52, 0xa6, 0xa8, 0xaa, 0x1a, 0x9c, 0x49, 0x8c, 0xa3, 0x8e, 0x84, 0xe6, 0x6b, 0xe8, 0x08, 0xe0, 0xe0, 0x24, 0x7f, 0x99, 0xa5, 0x7a, 0xf9, 0x67, 0x46, 0x21, 0x32, 0xe1, 0xef, 0x9c, 0x25, 0x63, 0x12, 0x06, 0x06, 0xed, 0x9b, 0xa8, 0x73, 0xfb, 0xde, 0xf3, 0x3f, 0xbb, 0x49, 0xe6, 0xfb, 0xe5, 0xe3, 0x4e, 0x63, 0x61, 0xaf, 0xc1, 0xf5, 0xd3, 0x6b, 0xfd, 0x1a, 0x51, 0x2f, 0x34, 0xff, 0x97, 0x24, 0xc9, 0x29, 0xc2, 0xf0, 0xfc, 0xfc, 0x8c, 0xdd, 0x6e, 0x47, 0x6b, 0x3f, 0x49, 0xcf, 0x69, 0x18, 0x06, 0x1c, 0x8f, 0xc7, 0x78, 0xed, 0x84, 0x7b, 0x87, 0xe2, 0xa1, 0x0b, 0x7c, 0xff, 0xfd, 0xf7, 0x78, 0xde, 0x3c, 0x60, 0xb3, 0x69, 0x50, 0x94, 0x59, 0x24, 0x69, 0x96, 0x65, 0x49, 0xb5, 0xc6, 0x4a, 0x38, 0x2b, 0x90, 0xf2, 0xe4, 0x44, 0x98, 0x0d, 0xbc, 0x2a, 0x87, 0x68, 0x20, 0x24, 0x13, 0xe9, 0x73, 0xd0, 0xd9, 0xd9, 0xda, 0x36, 0x70, 0x6b, 0xb4, 0xb6, 0xf1, 0xed, 0x88, 0xd6, 0xc1, 0x96, 0x7c, 0xce, 0x83, 0xbd, 0xf1, 0x69, 0xf7, 0x7d, 0xca, 0x32, 0x20, 0xa4, 0x56, 0x40, 0x59, 0x13, 0x13, 0x17, 0x4f, 0x69, 0x7c, 0x21, 0xfd, 0x4f, 0xc3, 0x8e, 0x0e, 0x9c, 0x87, 0x68, 0x67, 0x09, 0xeb, 0x82, 0x67, 0x8b, 0x1f, 0x94, 0x38, 0x87, 0x73, 0x27, 0xab, 0x62, 0xe7, 0x4d, 0x86, 0xc2, 0x20, 0x5c, 0xe4, 0x94, 0x87, 0xfe, 0xe5, 0xcb, 0x17, 0x18, 0x43, 0xe7, 0xf6, 0x77, 0xdf, 0xfd, 0x12, 0x52, 0x4a, 0x5a, 0x11, 0x6a, 0x8d, 0x6e, 0x18, 0xd0, 0xfb, 0xdc, 0xf9, 0xd4, 0x23, 0xa3, 0x22, 0x49, 0x90, 0xe6, 0x39, 0x98, 0x0f, 0xf6, 0x31, 0xce, 0xc1, 0x04, 0xb2, 0x28, 0x63, 0xf1, 0x6b, 0x85, 0x90, 0x30, 0x0e, 0x90, 0x8c, 0xc3, 0x2a, 0x85, 0xf6, 0xd8, 0x40, 0x7e, 0xf3, 0xcd, 0x37, 0xb1, 0x08, 0x74, 0x5d, 0x87, 0xa6, 0x69, 0x62, 0x71, 0x58, 0x2e, 0x97, 0xd1, 0x90, 0x64, 0x3a, 0x25, 0x07, 0xa2, 0xd2, 0xdb, 0xb7, 0x6f, 0x5f, 0xd0, 0xf5, 0xa3, 0xf9, 0x83, 0x73, 0xb8, 0xbb, 0xbb, 0x3b, 0x23, 0x71, 0x85, 0xc7, 0x08, 0x8d, 0x02, 0x9f, 0x4c, 0x7c, 0xe1, 0x03, 0x99, 0x32, 0x2f, 0x6f, 0x6f, 0x6f, 0xcf, 0x58, 0x9d, 0xe1, 0xfb, 0xc2, 0xe4, 0x96, 0x26, 0x09, 0x76, 0xbb, 0x1d, 0xfe, 0xf0, 0x87, 0x67, 0xa4, 0x69, 0x12, 0x8b, 0x85, 0x52, 0x43, 0x34, 0xc1, 0xd0, 0x5a, 0x23, 0x49, 0x33, 0x5f, 0x34, 0xe8, 0xa2, 0xaa, 0xea, 0x1a, 0x55, 0x35, 0x43, 0xd7, 0xf4, 0x28, 0x72, 0x81, 0xba, 0x4a, 0x91, 0x24, 0xd2, 0xe7, 0xaa, 0xd3, 0x8e, 0xe5, 0xf9, 0xf9, 0x19, 0xb3, 0xd9, 0x0c, 0x75, 0x95, 0xe2, 0xf6, 0x86, 0x34, 0xe6, 0x54, 0x90, 0x2c, 0xba, 0xae, 0x81, 0x56, 0x2d, 0x6e, 0xbf, 0x5e, 0xd0, 0xa4, 0x7c, 0x68, 0xd1, 0x1c, 0x5b, 0x0c, 0x2d, 0x5d, 0x64, 0x52, 0xa4, 0xa8, 0xcb, 0x1a, 0xa3, 0x67, 0x69, 0x73, 0x2e, 0xa1, 0x95, 0xc5, 0x73, 0xb3, 0xc3, 0x61, 0x4f, 0x3e, 0xf0, 0x45, 0x51, 0xa0, 0x37, 0x3b, 0x38, 0x7b, 0xd2, 0x83, 0x92, 0xaf, 0xbe, 0x89, 0x17, 0x6a, 0xdf, 0xff, 0x11, 0xb3, 0xd9, 0x0c, 0x55, 0x55, 0x9d, 0x15, 0xe5, 0xc8, 0x6e, 0x86, 0x38, 0x73, 0xf0, 0x9b, 0xc2, 0x3e, 0xf0, 0xd1, 0x92, 0x69, 0x9a, 0x45, 0xd9, 0x06, 0xfd, 0x39, 0x3d, 0x41, 0x81, 0x8c, 0x9f, 0x15, 0xe1, 0xe9, 0x67, 0xc7, 0x39, 0x47, 0xdb, 0xb6, 0x58, 0xaf, 0xd7, 0xf8, 0xf6, 0xdb, 0x6f, 0x09, 0x91, 0x18, 0x47, 0x52, 0x05, 0x04, 0x59, 0x23, 0x4e, 0xfb, 0xfa, 0x00, 0xcd, 0x07, 0xb8, 0x7f, 0x1c, 0x47, 0xfc, 0xf8, 0xe3, 0x8f, 0xc8, 0xf3, 0xdc, 0x5b, 0x73, 0xae, 0x62, 0x21, 0xde, 0xef, 0xf7, 0x68, 0xdb, 0x16, 0xf5, 0x7c, 0x06, 0x6b, 0x80, 0xc1, 0x37, 0x74, 0xd6, 0x59, 0x58, 0x10, 0xd9, 0x51, 0xa6, 0x09, 0x2c, 0x1c, 0x41, 0xd0, 0x16, 0x50, 0x6a, 0xc0, 0x38, 0x12, 0x3a, 0xc3, 0x04, 0x47, 0xe2, 0x72, 0x70, 0xc7, 0x60, 0x6c, 0xd0, 0x53, 0xfb, 0x03, 0x10, 0x1c, 0x60, 0x02, 0x5c, 0x24, 0x18, 0xc6, 0x81, 0x26, 0x5e, 0x11, 0x26, 0xd4, 0x13, 0x63, 0x3f, 0x18, 0xa5, 0x18, 0x63, 0xa0, 0xcd, 0xe8, 0xa1, 0xb8, 0x36, 0x86, 0x0b, 0x65, 0x59, 0x86, 0x59, 0x56, 0xc5, 0xf7, 0x44, 0x80, 0xc1, 0x68, 0x83, 0xf6, 0x70, 0x44, 0xc2, 0x05, 0xea, 0xba, 0x3e, 0x35, 0x3f, 0x22, 0x45, 0x51, 0x0c, 0x68, 0x8e, 0x1d, 0x06, 0x2f, 0x31, 0xa4, 0xe8, 0x5c, 0x00, 0x82, 0x9f, 0x11, 0x0a, 0x29, 0xc8, 0xc6, 0x51, 0x48, 0xc7, 0x45, 0xf3, 0x75, 0x69, 0x00, 0x12, 0xb2, 0xb5, 0x4f, 0xc1, 0x22, 0xf6, 0x4c, 0x26, 0x63, 0x22, 0x21, 0x2e, 0xb0, 0x70, 0xc3, 0x7e, 0x8f, 0x79, 0x96, 0xb8, 0x88, 0xca, 0x00, 0x08, 0x92, 0x78, 0x5a, 0xeb, 0x62, 0xc1, 0x4d, 0xd3, 0xec, 0xac, 0x46, 0x50, 0xf3, 0xa4, 0x26, 0x16, 0xc6, 0xec, 0x45, 0x52, 0xe2, 0x59, 0xd0, 0x87, 0xb1, 0x93, 0x28, 0x51, 0x9c, 0x4d, 0x29, 0x96, 0x24, 0xe9, 0xa7, 0x94, 0x46, 0x4b, 0x50, 0xa5, 0x14, 0x15, 0xe6, 0x75, 0x86, 0xba, 0xbc, 0xc1, 0xcd, 0x9d, 0xc3, 0xd0, 0x35, 0xd8, 0xef, 0x37, 0x38, 0x1c, 0x1e, 0xd1, 0xb7, 0x3b, 0x38, 0x3b, 0x42, 0x0a, 0x40, 0x26, 0x00, 0x73, 0x44, 0xc0, 0xd2, 0x99, 0x43, 0x66, 0x38, 0x86, 0xd1, 0x40, 0x2b, 0x00, 0x5c, 0xa2, 0x28, 0x73, 0xdc, 0xdd, 0x7e, 0x8f, 0xa2, 0x28, 0x50, 0x95, 0x33, 0xe4, 0x65, 0x05, 0xc6, 0x32, 0xf4, 0xa3, 0x9f, 0x52, 0x1d, 0x47, 0x59, 0xdd, 0xe3, 0xcd, 0x7d, 0x8d, 0xc5, 0xf2, 0x2b, 0xa4, 0x92, 0x88, 0x58, 0x3c, 0xca, 0x96, 0x24, 0x1e, 0x9f, 0x07, 0x64, 0x59, 0x01, 0x21, 0x0b, 0xdf, 0x2c, 0x00, 0xdb, 0xdd, 0x00, 0x6b, 0x09, 0xa1, 0x4a, 0xbc, 0xac, 0xf4, 0x92, 0xac, 0x1b, 0xdf, 0x93, 0xc4, 0xbc, 0x9a, 0x24, 0x38, 0x2d, 0x90, 0xaf, 0x9a, 0xbf, 0x58, 0xf5, 0xaa, 0x69, 0xd0, 0x35, 0x33, 0x99, 0x17, 0xdf, 0x67, 0xdd, 0x55, 0x06, 0xfb, 0x34, 0xdc, 0xe6, 0x12, 0x01, 0x38, 0x27, 0xf0, 0x5d, 0x34, 0x0a, 0x67, 0x32, 0x46, 0x20, 0xc9, 0x13, 0x3c, 0x3c, 0x7c, 0x46, 0xdb, 0xb6, 0x98, 0xcd, 0x0b, 0x28, 0x3b, 0x44, 0x0f, 0xf4, 0x00, 0x01, 0xd3, 0x90, 0x40, 0x04, 0xcf, 0xc3, 0xe1, 0x80, 0xd9, 0xbc, 0xc4, 0xdb, 0xb7, 0x6f, 0xf1, 0xf1, 0xd3, 0x8f, 0x78, 0xe8, 0xb7, 0x58, 0xad, 0x17, 0xb4, 0x3e, 0xd1, 0x04, 0x5d, 0xef, 0xf7, 0x5b, 0x48, 0x51, 0x41, 0xf0, 0x1c, 0x56, 0xd8, 0x53, 0x96, 0x40, 0x88, 0x15, 0x8e, 0xe7, 0x17, 0x07, 0xe3, 0x1a, 0xcc, 0x52, 0xd8, 0x0e, 0x9c, 0x03, 0xf7, 0x68, 0x23, 0xad, 0x80, 0x13, 0x9f, 0xdd, 0xe1, 0x7c, 0x40, 0x97, 0x24, 0x77, 0xc1, 0x49, 0x00, 0x11, 0xe3, 0x61, 0x48, 0x61, 0x60, 0xa0, 0xef, 0x13, 0x42, 0x02, 0xcc, 0xa1, 0x30, 0x19, 0x98, 0xc2, 0x44, 0xf2, 0x9b, 0xc6, 0x7b, 0xd0, 0x82, 0xae, 0xdf, 0x73, 0xa9, 0xf6, 0xc9, 0x0b, 0xe5, 0x34, 0xa4, 0x9e, 0x82, 0x9a, 0xa4, 0x48, 0xc1, 0x24, 0x15, 0xf3, 0xb0, 0x9e, 0x56, 0x8e, 0xce, 0x87, 0xdd, 0xee, 0x00, 0xa5, 0x74, 0x94, 0x1f, 0xef, 0x77, 0x44, 0xe0, 0x65, 0x49, 0x83, 0xa3, 0xe7, 0xdc, 0x84, 0x81, 0xd8, 0x5a, 0x8b, 0xaa, 0xaa, 0xe2, 0x8a, 0x30, 0x9c, 0xc5, 0x97, 0x86, 0x45, 0x7d, 0xdf, 0xc3, 0x6c, 0xf6, 0x60, 0xb0, 0x90, 0x8e, 0xc1, 0x19, 0x8b, 0xfe, 0xd8, 0x40, 0x0e, 0xfd, 0x18, 0x77, 0x9c, 0xf3, 0xd9, 0x02, 0x55, 0x59, 0xc7, 0x49, 0x7c, 0xbf, 0xdf, 0xc3, 0x1a, 0x07, 0x29, 0x38, 0xa4, 0x90, 0x30, 0xc2, 0xc2, 0x68, 0xfa, 0x35, 0xf4, 0x23, 0x7e, 0xf8, 0xe1, 0x07, 0x64, 0x59, 0x16, 0x21, 0xf8, 0x70, 0xe1, 0xa4, 0x69, 0x8a, 0xaa, 0xaa, 0xce, 0x20, 0xf9, 0xe9, 0x1e, 0x35, 0x3c, 0xc1, 0xa7, 0xe7, 0xe7, 0x08, 0x97, 0x4c, 0xd9, 0x80, 0xa1, 0x53, 0x0a, 0x93, 0xfb, 0xd4, 0x5d, 0x6c, 0xda, 0x59, 0x8e, 0xc3, 0x80, 0xcd, 0x66, 0x83, 0xfd, 0x7e, 0x87, 0xa2, 0x28, 0xa2, 0x9c, 0x24, 0x3c, 0x17, 0xa5, 0x68, 0x5f, 0xe2, 0x00, 0x70, 0x2e, 0x91, 0x17, 0x39, 0x41, 0xd3, 0x7e, 0xf2, 0xd1, 0xa2, 0x41, 0x73, 0x78, 0x42, 0xd7, 0x6c, 0x62, 0x20, 0x7d, 0x4c, 0xe9, 0xb2, 0x16, 0x0f, 0x9f, 0xb7, 0xa8, 0xeb, 0x1a, 0x45, 0xb6, 0x82, 0x33, 0x1d, 0xd4, 0xd0, 0xf8, 0x9d, 0x85, 0x45, 0x9e, 0x27, 0x78, 0xfc, 0xf4, 0x23, 0x38, 0x17, 0x48, 0xb9, 0x44, 0x3a, 0x9b, 0x41, 0xe5, 0x16, 0x7d, 0x47, 0xae, 0x71, 0xe3, 0x38, 0x22, 0x4d, 0x6a, 0xa4, 0xb5, 0x44, 0x2a, 0xa4, 0x9f, 0x1c, 0x3b, 0x70, 0x91, 0x20, 0xcd, 0x39, 0xb2, 0x3c, 0xc7, 0x30, 0x1e, 0xfd, 0x0d, 0x12, 0x5c, 0x84, 0x52, 0xef, 0x54, 0x64, 0xe2, 0x8d, 0x13, 0x3e, 0xbc, 0xcb, 0xd0, 0x0a, 0xea, 0xfc, 0x3e, 0x51, 0xd3, 0x51, 0x97, 0x31, 0x43, 0x97, 0x38, 0x07, 0xd2, 0x13, 0x36, 0x9c, 0x97, 0x51, 0x24, 0xd0, 0x9a, 0xc7, 0x02, 0x24, 0x04, 0xed, 0xc5, 0xfa, 0x51, 0x21, 0x2f, 0xd2, 0x48, 0x38, 0x0c, 0xfb, 0xc1, 0x70, 0xe1, 0xfd, 0xc5, 0xf7, 0xdf, 0x45, 0x09, 0x55, 0x51, 0x14, 0x28, 0xcb, 0x5b, 0x58, 0x6b, 0xb1, 0xdf, 0xef, 0x23, 0x41, 0xad, 0xf4, 0x53, 0x7e, 0x80, 0xe8, 0x83, 0xc4, 0xc5, 0x39, 0x17, 0x09, 0x6d, 0xbb, 0xdd, 0x0e, 0x5f, 0xbe, 0x7c, 0x89, 0xcd, 0x49, 0x51, 0x10, 0x8c, 0xb7, 0xdd, 0x6e, 0xd1, 0x36, 0x7d, 0x0c, 0x58, 0x08, 0x13, 0xe1, 0xe1, 0x70, 0xc0, 0xf3, 0xf3, 0x01, 0xcb, 0xc5, 0x0c, 0xda, 0x11, 0xf4, 0xc5, 0x98, 0x40, 0x92, 0x10, 0x64, 0x3e, 0x8e, 0x1a, 0xd6, 0x1e, 0xe0, 0x04, 0x7f, 0x3d, 0x1a, 0x15, 0x0c, 0xa3, 0x97, 0xa3, 0x09, 0xe1, 0x9b, 0x49, 0x26, 0x20, 0x27, 0x7c, 0x10, 0x2a, 0x7a, 0x34, 0xe5, 0x1f, 0x8e, 0x3b, 0x48, 0x91, 0xfa, 0x34, 0xb4, 0xd4, 0x93, 0xd5, 0x88, 0xdf, 0x40, 0x10, 0xb5, 0x41, 0xd7, 0xd1, 0x7b, 0x63, 0x0d, 0x88, 0x4d, 0x2e, 0x34, 0xa4, 0x4f, 0x64, 0xe3, 0x22, 0x41, 0x9a, 0xfa, 0x4c, 0x04, 0x08, 0x18, 0x6e, 0xa0, 0x0c, 0x19, 0x67, 0x38, 0x70, 0x18, 0x47, 0x1a, 0x08, 0xc7, 0x38, 0xe0, 0x18, 0xe9, 0x52, 0x1d, 0x5e, 0xe8, 0x4c, 0xcf, 0x5f, 0x0b, 0xbf, 0xf2, 0xb5, 0x49, 0x41, 0x0d, 0x39, 0xc9, 0xc1, 0x94, 0xe3, 0x22, 0x74, 0xc3, 0x68, 0x07, 0xeb, 0xdd, 0xc8, 0xa8, 0x51, 0xa3, 0xc9, 0x5d, 0x78, 0xf8, 0x37, 0xcd, 0xe4, 0xc4, 0xce, 0x99, 0xd2, 0x12, 0x95, 0x32, 0x3e, 0x10, 0x89, 0x9a, 0x0e, 0xb2, 0x15, 0x15, 0xe0, 0xde, 0x27, 0x9e, 0xf9, 0x0c, 0x03, 0x07, 0x72, 0x77, 0x89, 0x8d, 0x98, 0x45, 0x44, 0x25, 0x02, 0x07, 0x84, 0xf1, 0xa0, 0xc3, 0x66, 0x7e, 0x9f, 0x1f, 0x5e, 0x6b, 0x06, 0x21, 0x39, 0x80, 0x1a, 0xb3, 0xf9, 0x0c, 0xb3, 0xc5, 0x0d, 0xd4, 0x70, 0x8f, 0xfd, 0xfe, 0x0b, 0x76, 0x9b, 0x2f, 0x38, 0x1e, 0x36, 0x38, 0x36, 0x2d, 0xf2, 0x4c, 0xc0, 0x1a, 0x80, 0xcb, 0x14, 0x79, 0x9a, 0x43, 0x24, 0x1c, 0x6a, 0xb4, 0x28, 0xcb, 0x1a, 0x8b, 0xd5, 0x0d, 0x6e, 0x57, 0xdf, 0x43, 0x24, 0x09, 0x92, 0xc4, 0xab, 0x05, 0x2c, 0xc8, 0x5d, 0x2e, 0x08, 0xdf, 0x46, 0x01, 0xeb, 0x4a, 0xe4, 0x59, 0x8d, 0x34, 0x93, 0xe0, 0x00, 0xb4, 0x19, 0x29, 0x6b, 0x40, 0x31, 0xcc, 0xe7, 0x2b, 0x18, 0xe3, 0x30, 0x0c, 0x3a, 0x1e, 0xd8, 0xd6, 0x38, 0x7f, 0x56, 0x15, 0x18, 0x06, 0xe3, 0x0b, 0x0d, 0x8b, 0x66, 0x21, 0x67, 0x9f, 0x83, 0x1e, 0xfe, 0xac, 0x82, 0x3e, 0xfd, 0xfb, 0x69, 0x41, 0xa5, 0x01, 0xdf, 0x9d, 0x0d, 0xf7, 0xd3, 0x87, 0x98, 0xf2, 0x4a, 0xa6, 0x93, 0x7b, 0xfc, 0x3e, 0xeb, 0xae, 0x02, 0x04, 0xc1, 0xf9, 0xf3, 0xd2, 0x7b, 0x80, 0x7e, 0xae, 0x9d, 0x3c, 0x07, 0x77, 0xa6, 0x75, 0x9f, 0xfe, 0x4e, 0xf7, 0x21, 0x15, 0x9c, 0xd0, 0x04, 0xb7, 0x4a, 0x81, 0x5b, 0xe2, 0xda, 0x38, 0x50, 0x01, 0x6c, 0xdb, 0x16, 0x8c, 0x29, 0xcc, 0x67, 0x2b, 0x8c, 0xe3, 0x88, 0xae, 0xeb, 0x50, 0x55, 0x34, 0x40, 0x19, 0x35, 0xf8, 0x89, 0x17, 0xa8, 0xaa, 0x0c, 0x43, 0xaf, 0xb1, 0x3f, 0x3c, 0xa3, 0xcc, 0x19, 0xd6, 0xab, 0x39, 0x9a, 0xb1, 0x3d, 0xd9, 0xe1, 0x72, 0x5a, 0x27, 0xb9, 0xa8, 0x1c, 0x90, 0x9e, 0x28, 0xec, 0x9b, 0x5a, 0x97, 0x40, 0x24, 0x1c, 0x45, 0x31, 0x43, 0x5d, 0x2d, 0x31, 0xab, 0x07, 0x1c, 0x8f, 0x1f, 0x60, 0x9d, 0x86, 0xb3, 0x1c, 0xce, 0xfa, 0x80, 0x28, 0x36, 0xb1, 0x39, 0x66, 0x2a, 0x92, 0xee, 0x38, 0x0f, 0xef, 0x1d, 0x9d, 0x27, 0x49, 0xea, 0x65, 0x5e, 0xd2, 0xa7, 0x04, 0xca, 0x14, 0xc3, 0x40, 0x6e, 0x82, 0xf0, 0x8e, 0x73, 0x3c, 0xc8, 0xd4, 0x3c, 0x8b, 0x9e, 0x73, 0x11, 0x2d, 0x91, 0xc3, 0xfb, 0x4d, 0xd7, 0x4a, 0xee, 0x51, 0xe7, 0x49, 0x3a, 0xa3, 0x05, 0x06, 0x3d, 0x62, 0xbe, 0x58, 0xe2, 0xeb, 0x6f, 0xbe, 0x45, 0xdb, 0xb6, 0xd8, 0x6c, 0x76, 0xf8, 0xf8, 0xe9, 0x0b, 0x76, 0x3b, 0x5a, 0x2b, 0x17, 0xde, 0xc9, 0x73, 0x5a, 0x33, 0xc3, 0x50, 0x14, 0x56, 0xa4, 0x97, 0x21, 0x55, 0xd3, 0x70, 0x1c, 0x61, 0x2d, 0xf2, 0x24, 0x45, 0x55, 0x57, 0x74, 0xb6, 0x8c, 0x23, 0x91, 0xe2, 0xa6, 0x16, 0xaf, 0x51, 0xcf, 0x3c, 0x89, 0x77, 0x9b, 0xda, 0x49, 0x06, 0xe3, 0x98, 0x60, 0x2c, 0x11, 0x48, 0x5b, 0x81, 0x38, 0x17, 0xf6, 0xb3, 0x69, 0x9a, 0xc6, 0xc2, 0x30, 0xdd, 0xff, 0x06, 0x18, 0xd5, 0x18, 0x83, 0xfb, 0xb7, 0x6f, 0xe2, 0x61, 0x13, 0xcc, 0xf3, 0x03, 0xec, 0x9d, 0xe7, 0x79, 0x2c, 0x62, 0x98, 0x74, 0x66, 0xd3, 0x17, 0x79, 0xd8, 0xed, 0x71, 0x7f, 0xff, 0x06, 0x6f, 0xde, 0xdc, 0xc5, 0xe7, 0x4c, 0x3b, 0x60, 0xba, 0xb0, 0x96, 0xcb, 0x65, 0x0c, 0x73, 0xd9, 0x6c, 0x36, 0xc0, 0x9e, 0xe4, 0x32, 0x16, 0x04, 0x37, 0xfe, 0xf2, 0x6b, 0xf2, 0x5d, 0x0f, 0xc5, 0xd3, 0x1a, 0x3f, 0x65, 0xca, 0x1c, 0x55, 0x35, 0xc7, 0xc3, 0xc3, 0x03, 0x85, 0xca, 0x3b, 0x8b, 0x34, 0x91, 0xe0, 0x35, 0xb1, 0xab, 0x8f, 0xc7, 0x23, 0xda, 0xe6, 0x88, 0xaa, 0xce, 0xa0, 0x35, 0x15, 0xd2, 0xae, 0x53, 0x50, 0xa3, 0xa5, 0xe4, 0x38, 0x99, 0x22, 0x2f, 0x32, 0xc0, 0x31, 0xc0, 0x58, 0xec, 0xba, 0x83, 0xd7, 0x3e, 0x0a, 0x2c, 0xd6, 0x8b, 0x48, 0x64, 0x5b, 0xaf, 0xde, 0x78, 0xd9, 0x04, 0x62, 0x08, 0x4c, 0x60, 0xf0, 0x77, 0x5d, 0x07, 0xc6, 0x4d, 0x44, 0x0b, 0xc2, 0x7b, 0x1f, 0x48, 0x6b, 0x69, 0x9a, 0xe2, 0xee, 0xee, 0x0e, 0xb3, 0xd9, 0x8c, 0xa6, 0x7d, 0xef, 0xe6, 0x14, 0xd0, 0x95, 0x29, 0xa3, 0x36, 0x4c, 0xcc, 0xd3, 0x80, 0x1c, 0x22, 0x62, 0x89, 0xb3, 0x86, 0x6b, 0x6a, 0xe4, 0xc3, 0x39, 0xc7, 0xc7, 0x8f, 0x1f, 0x23, 0x29, 0xa3, 0xaa, 0x2a, 0xcc, 0xe7, 0xf3, 0xb8, 0x52, 0x09, 0x37, 0xfd, 0x54, 0xa6, 0x16, 0x9a, 0xb8, 0x24, 0x49, 0x88, 0x19, 0xee, 0x2f, 0xd0, 0x10, 0x43, 0x18, 0x1a, 0xa6, 0xd0, 0xa0, 0xac, 0x6f, 0x6f, 0xb1, 0x58, 0x39, 0xd4, 0x8b, 0xb9, 0x67, 0xcf, 0x93, 0xdd, 0xec, 0x7e, 0x77, 0x80, 0x63, 0x8c, 0x60, 0x4f, 0x6b, 0xc0, 0xb9, 0xf4, 0x17, 0x79, 0x15, 0x77, 0xbe, 0xc6, 0x58, 0x8c, 0x7e, 0x75, 0x12, 0x50, 0x82, 0x69, 0x14, 0xe2, 0x25, 0xd4, 0x3e, 0xf5, 0x4f, 0x98, 0xa6, 0x1f, 0x05, 0xa6, 0xea, 0x30, 0x0c, 0x50, 0x5c, 0x21, 0xcf, 0x4a, 0xa4, 0x29, 0xa5, 0xfb, 0x8d, 0x3e, 0x8d, 0x8d, 0x1e, 0x4b, 0x00, 0xd6, 0xc1, 0x6a, 0x07, 0xcd, 0x14, 0xb4, 0x52, 0x30, 0x66, 0x44, 0x1f, 0x76, 0xd3, 0xda, 0xc4, 0xc9, 0xd4, 0xf1, 0x93, 0x2d, 0xae, 0x99, 0x48, 0x41, 0x5d, 0x20, 0xc9, 0x08, 0x72, 0x43, 0xbb, 0x16, 0xc7, 0x38, 0x85, 0x4a, 0xad, 0x7d, 0x59, 0xe8, 0xa7, 0xb0, 0xa0, 0x71, 0xd3, 0xc9, 0x71, 0x62, 0x3a, 0x82, 0xd3, 0xae, 0x2f, 0x4c, 0x17, 0xe4, 0x41, 0xcd, 0x20, 0x05, 0xf9, 0xef, 0x73, 0x2e, 0xe1, 0xa0, 0xe2, 0x4a, 0xe3, 0x52, 0xd2, 0x17, 0x58, 0xf2, 0xa7, 0xe9, 0x72, 0xba, 0xbf, 0x0f, 0x40, 0x7b, 0x02, 0xad, 0x2c, 0x94, 0x55, 0x30, 0x46, 0xfb, 0x3c, 0x68, 0x71, 0xd5, 0x6c, 0x65, 0xca, 0xfe, 0x8d, 0x68, 0x9f, 0x29, 0xa0, 0x47, 0x0d, 0xa5, 0x7a, 0x34, 0x6d, 0x8f, 0xe6, 0x38, 0xa2, 0x6d, 0x2d, 0x8c, 0x95, 0xe0, 0x3c, 0x47, 0x9e, 0x97, 0x18, 0x86, 0x11, 0xd6, 0x09, 0x18, 0x93, 0x60, 0x18, 0x1d, 0x86, 0xde, 0x02, 0x8c, 0x21, 0x2f, 0x05, 0x91, 0xf2, 0x40, 0xf2, 0x43, 0xc6, 0xbd, 0xe9, 0x89, 0xf0, 0x48, 0xb9, 0xe3, 0x60, 0xc8, 0x63, 0x9a, 0x9a, 0xe4, 0x9c, 0x72, 0xde, 0x4d, 0x0f, 0x40, 0x79, 0xd7, 0xfa, 0x0c, 0x06, 0x06, 0x3c, 0x49, 0x91, 0x4a, 0x09, 0xe7, 0x58, 0xe4, 0x12, 0x40, 0xca, 0x13, 0xe9, 0x8c, 0x9d, 0x20, 0x73, 0x38, 0x07, 0x17, 0x56, 0x7f, 0xee, 0x32, 0x7e, 0xf4, 0x62, 0x0a, 0x77, 0xe7, 0xe9, 0x7e, 0xf0, 0x08, 0x12, 0x79, 0xb1, 0xf3, 0x33, 0x02, 0xe1, 0x75, 0x58, 0x3f, 0xe8, 0xd4, 0xaf, 0x3b, 0xbd, 0x31, 0x61, 0xcf, 0xf6, 0xdf, 0xa7, 0xa2, 0x6c, 0x23, 0x54, 0x7c, 0xfe, 0xeb, 0x54, 0xf0, 0x09, 0xa6, 0x36, 0x17, 0xab, 0x9e, 0x0b, 0x63, 0x1a, 0xe1, 0x19, 0xe0, 0x96, 0x12, 0x2a, 0x75, 0x51, 0x20, 0x2f, 0x04, 0xf6, 0xd0, 0xe8, 0xb6, 0x0d, 0xb6, 0xdb, 0x2d, 0x56, 0xcb, 0xdb, 0x38, 0x80, 0x14, 0x45, 0x81, 0xd1, 0x27, 0x6c, 0xae, 0x56, 0x2b, 0xec, 0x36, 0x3b, 0xbf, 0x72, 0x61, 0x98, 0xcf, 0xe7, 0x80, 0x93, 0xd8, 0xef, 0x77, 0x50, 0x23, 0xc3, 0x72, 0xb9, 0x46, 0x96, 0x86, 0x4c, 0x72, 0x46, 0x16, 0x30, 0x86, 0x88, 0x80, 0x74, 0x8d, 0x18, 0xff, 0x9e, 0x33, 0x5f, 0x50, 0x05, 0xe0, 0x38, 0xa4, 0xc8, 0x50, 0xe4, 0x73, 0xcc, 0xe7, 0x23, 0x36, 0x9b, 0x1a, 0x4a, 0x0d, 0x1e, 0xb5, 0x02, 0xc6, 0x41, 0x91, 0x4e, 0x3e, 0x44, 0x0a, 0x73, 0x1b, 0x89, 0x71, 0x24, 0x89, 0xe4, 0x60, 0x2c, 0x9c, 0x5d, 0x1a, 0xd6, 0x32, 0x8c, 0xa3, 0x82, 0x10, 0x06, 0x32, 0x09, 0xc6, 0x56, 0xa7, 0x81, 0x33, 0xc8, 0x42, 0xc3, 0x64, 0x7e, 0x42, 0x03, 0xb8, 0x6f, 0xc8, 0x4e, 0x72, 0xee, 0xb0, 0x12, 0x54, 0xe3, 0xa9, 0x6e, 0x8a, 0x34, 0x45, 0xd7, 0x0d, 0xa8, 0xaa, 0x1a, 0x4a, 0x19, 0xdc, 0xde, 0xbe, 0xa1, 0xc0, 0xa0, 0x6e, 0xf4, 0x5e, 0xef, 0x0a, 0xd2, 0x13, 0xbb, 0xc9, 0x81, 0x30, 0xc5, 0xa0, 0x46, 0x28, 0xa3, 0x91, 0x8a, 0x14, 0x42, 0x4a, 0x5a, 0xcd, 0x05, 0x0b, 0x61, 0xaf, 0x34, 0xd4, 0xd6, 0x60, 0xd4, 0x0a, 0x25, 0x2a, 0x5a, 0x15, 0x89, 0x14, 0xc6, 0x1a, 0x18, 0x67, 0x21, 0x7f, 0xf8, 0xe1, 0xa7, 0x78, 0x60, 0x53, 0x78, 0x7d, 0x12, 0xe1, 0x8b, 0xe3, 0xb1, 0xf5, 0xce, 0x34, 0x43, 0x9c, 0xde, 0x02, 0xdc, 0xc2, 0x98, 0xc0, 0x9b, 0x37, 0x2b, 0xb4, 0x6d, 0x1b, 0x19, 0xcd, 0x59, 0x96, 0x45, 0x62, 0x55, 0x80, 0x2d, 0xa7, 0xfb, 0xbe, 0x4b, 0xcd, 0xe6, 0x66, 0xb3, 0x89, 0x32, 0xa8, 0x40, 0x9e, 0x0b, 0x3b, 0xfb, 0xe3, 0xf1, 0x18, 0x49, 0x75, 0x01, 0x66, 0x0f, 0x05, 0x3d, 0x42, 0x8e, 0x5e, 0x17, 0x9a, 0xa6, 0x59, 0x2c, 0xf8, 0x59, 0x46, 0xb9, 0xb8, 0x87, 0xc3, 0x01, 0x5f, 0xbe, 0x7c, 0xc1, 0x7a, 0x75, 0x8b, 0x72, 0x56, 0x90, 0x07, 0x3a, 0x28, 0x02, 0x33, 0x2f, 0x2b, 0x6a, 0x5c, 0xfa, 0x23, 0x38, 0x38, 0xaa, 0x82, 0xa6, 0xc6, 0x56, 0x52, 0xcc, 0x9e, 0x33, 0x0e, 0x43, 0x37, 0x60, 0x39, 0x27, 0xf9, 0x80, 0xd5, 0x16, 0x45, 0x56, 0x20, 0x9d, 0x51, 0x57, 0xba, 0x7d, 0xde, 0xe2, 0xf9, 0xf9, 0x19, 0xdc, 0x52, 0x94, 0x66, 0x95, 0xcd, 0x50, 0x65, 0x0c, 0x60, 0xf4, 0xde, 0x31, 0x08, 0x58, 0x00, 0x7d, 0xe7, 0x65, 0x54, 0x29, 0x83, 0x73, 0x44, 0xfe, 0xb1, 0xb0, 0x48, 0x52, 0x81, 0x8c, 0x27, 0x98, 0xcf, 0x56, 0x70, 0x96, 0xfb, 0x86, 0x22, 0x4c, 0x8e, 0x89, 0x27, 0x7a, 0x19, 0x80, 0x8d, 0x71, 0x47, 0x15, 0x88, 0x11, 0x53, 0xa9, 0x84, 0x14, 0x0c, 0xd6, 0x69, 0xec, 0x0f, 0x5b, 0x2a, 0x4e, 0x99, 0x44, 0x55, 0x17, 0xb1, 0x41, 0xe2, 0x9c, 0x26, 0x12, 0xee, 0x38, 0x1c, 0x3c, 0xb4, 0x3c, 0xe8, 0x93, 0x01, 0x8c, 0xa4, 0xa6, 0x2b, 0x10, 0xe1, 0xb2, 0x2c, 0xc3, 0x7c, 0x3e, 0x8f, 0xf1, 0x90, 0xc3, 0x30, 0xf8, 0xeb, 0xa2, 0x84, 0x10, 0x1c, 0x4d, 0x73, 0x98, 0x4c, 0x0e, 0x16, 0xdb, 0xed, 0x21, 0x36, 0x6d, 0x53, 0x15, 0x42, 0x90, 0xae, 0x8d, 0xe3, 0x18, 0x8d, 0x7f, 0xa6, 0x50, 0x7f, 0xe0, 0x24, 0x3c, 0x3c, 0x3c, 0xc4, 0x6c, 0x7b, 0xba, 0xc9, 0xa8, 0xe9, 0x58, 0x2c, 0x16, 0x28, 0x0a, 0x9a, 0x90, 0x42, 0xa3, 0xe7, 0x6c, 0xd8, 0xd5, 0x9d, 0x76, 0xf0, 0xc6, 0x87, 0x52, 0x30, 0x3a, 0x1a, 0x61, 0x1c, 0xfc, 0x0e, 0xce, 0x1b, 0x92, 0xa4, 0xf2, 0x14, 0x16, 0x24, 0x04, 0xb8, 0x94, 0xe0, 0xf2, 0x14, 0x89, 0x6a, 0xb9, 0x46, 0x26, 0xb3, 0xf8, 0x5a, 0x69, 0x0d, 0x61, 0x23, 0xa3, 0x5f, 0xf2, 0xc4, 0x43, 0x6f, 0x14, 0x66, 0x43, 0x3a, 0x7f, 0x0d, 0xc1, 0x25, 0xb4, 0x32, 0x30, 0x89, 0x81, 0x1e, 0x4d, 0x6c, 0x58, 0x83, 0xb9, 0x0a, 0x15, 0x02, 0x31, 0x09, 0xd1, 0x80, 0x7f, 0x6e, 0x84, 0x6e, 0x71, 0x7f, 0x98, 0x86, 0xc2, 0x7b, 0x0d, 0x92, 0xa5, 0x46, 0x22, 0x3d, 0x83, 0xba, 0x2f, 0x93, 0xb9, 0xf8, 0x45, 0x41, 0x9f, 0xee, 0xf1, 0xe8, 0xba, 0xc9, 0xbc, 0x63, 0x22, 0x31, 0xd1, 0x29, 0xb0, 0x85, 0xc5, 0x06, 0xc5, 0x5a, 0x40, 0x8a, 0x14, 0x9a, 0xdb, 0x38, 0xf1, 0x03, 0x1c, 0xd6, 0xd0, 0xb5, 0xcb, 0x79, 0x1a, 0x57, 0x19, 0xc1, 0x49, 0xec, 0x4c, 0x7e, 0x03, 0x01, 0xc6, 0xb4, 0xd7, 0x91, 0xf3, 0x17, 0x13, 0xa1, 0x0d, 0xf4, 0x30, 0xc6, 0xc0, 0x24, 0xf7, 0x24, 0x23, 0x13, 0xad, 0x30, 0x0b, 0xf9, 0x06, 0x5d, 0x7f, 0x40, 0xdb, 0xb4, 0xd8, 0x6d, 0x35, 0x9a, 0x4e, 0xc3, 0x6a, 0x01, 0x29, 0x4b, 0x64, 0x59, 0x09, 0xe3, 0xd7, 0x03, 0xca, 0x78, 0x22, 0x12, 0x04, 0xa4, 0xe4, 0x10, 0xa2, 0x86, 0x33, 0x19, 0x18, 0xf3, 0x4e, 0x5d, 0xce, 0xab, 0x57, 0x92, 0x53, 0x1c, 0xa6, 0x61, 0x0e, 0xed, 0x61, 0xa4, 0x05, 0x04, 0xf3, 0x52, 0x35, 0x0e, 0x9f, 0x93, 0x50, 0x41, 0x4a, 0x81, 0x43, 0x77, 0x6a, 0x7e, 0xf5, 0xf4, 0xe0, 0x07, 0x60, 0x35, 0x59, 0x36, 0x4f, 0x49, 0x6e, 0x27, 0xf4, 0x67, 0x6a, 0x07, 0xfa, 0x7a, 0x41, 0x3f, 0x59, 0xef, 0xb2, 0x09, 0x94, 0x1d, 0x3e, 0x2b, 0x40, 0x5b, 0xfb, 0x27, 0x21, 0xf7, 0xd3, 0xfb, 0xff, 0x72, 0x07, 0xce, 0x26, 0x90, 0xb9, 0xb3, 0xce, 0x4f, 0xa1, 0x2c, 0x4e, 0x95, 0x62, 0xa2, 0x63, 0x3f, 0x83, 0xee, 0xc3, 0x3d, 0x32, 0xd9, 0x99, 0x4f, 0xcf, 0xe6, 0xf0, 0xb5, 0x6a, 0x36, 0x43, 0xdb, 0x1e, 0xf1, 0xe5, 0xf3, 0x07, 0xf2, 0x11, 0x30, 0x3d, 0xd6, 0x37, 0xb3, 0x78, 0x4f, 0x86, 0x33, 0x83, 0xb1, 0x24, 0xfe, 0x3f, 0x65, 0x8c, 0x93, 0xe1, 0xd3, 0xa8, 0x7a, 0x70, 0xef, 0x46, 0x99, 0x65, 0x09, 0xea, 0x59, 0x89, 0xa7, 0xa7, 0x0f, 0x70, 0x96, 0xa3, 0xef, 0x8f, 0x10, 0xe9, 0xea, 0x64, 0xf7, 0x0b, 0x5a, 0x1d, 0x09, 0x96, 0x9c, 0x6a, 0x85, 0x20, 0xe6, 0x36, 0xbd, 0x3e, 0x0d, 0xeb, 0x48, 0xe6, 0x58, 0xe4, 0x0b, 0xcc, 0x6b, 0x8e, 0x37, 0x77, 0xef, 0xd0, 0x76, 0x47, 0x0c, 0x43, 0x4f, 0x13, 0xb4, 0xf0, 0x9e, 0x1e, 0x8e, 0x58, 0xe9, 0x52, 0xb0, 0x2b, 0x68, 0x89, 0xa3, 0xc0, 0x15, 0x99, 0xa0, 0xdf, 0x6b, 0x9f, 0x26, 0x28, 0x90, 0x24, 0x05, 0x86, 0x71, 0xf0, 0x83, 0x95, 0x5f, 0x31, 0x1b, 0x13, 0x1b, 0xd9, 0xb0, 0xce, 0x0a, 0x51, 0xd9, 0x00, 0x21, 0x74, 0xca, 0x68, 0xc0, 0xf1, 0x33, 0xab, 0x65, 0xee, 0xd7, 0x6c, 0x77, 0xef, 0xbe, 0x42, 0xd7, 0x75, 0xe8, 0x06, 0x85, 0xcd, 0xee, 0x80, 0xf5, 0xfa, 0x16, 0xfd, 0xa8, 0x61, 0x19, 0x47, 0x92, 0xa4, 0x34, 0xa5, 0x7b, 0x32, 0x73, 0xdb, 0xb6, 0x71, 0x2a, 0x0f, 0x43, 0x49, 0x18, 0x66, 0xaf, 0x49, 0xba, 0xc9, 0x48, 0x6b, 0xf0, 0xbc, 0x22, 0x07, 0xe8, 0x01, 0xd2, 0x19, 0xc8, 0xaa, 0xaa, 0xe2, 0x87, 0xb8, 0xdf, 0xef, 0xe3, 0x61, 0x19, 0xa6, 0x9b, 0x00, 0x87, 0x4e, 0x49, 0x34, 0xe1, 0xf0, 0x93, 0x82, 0x9d, 0x59, 0x6f, 0x86, 0x7f, 0x37, 0x95, 0xac, 0x85, 0x0f, 0x27, 0x40, 0xe5, 0xc1, 0xaf, 0x7d, 0x1c, 0x47, 0x8c, 0xba, 0x8f, 0x85, 0x8a, 0xf6, 0xe2, 0x69, 0x84, 0x7e, 0x69, 0x57, 0x4c, 0x5a, 0x43, 0x9a, 0xb2, 0x14, 0xba, 0xce, 0x9d, 0x79, 0xf1, 0x56, 0x75, 0x81, 0xe6, 0xd8, 0xe1, 0xcb, 0x97, 0x2f, 0xde, 0x19, 0xce, 0x87, 0xb4, 0x18, 0xda, 0xd3, 0x87, 0x83, 0xda, 0x86, 0x9b, 0x8f, 0x3b, 0xf4, 0xfd, 0x88, 0xd6, 0x3b, 0x5e, 0x75, 0x9b, 0x6d, 0x84, 0x93, 0xdb, 0x66, 0x8c, 0xec, 0x7a, 0x21, 0x18, 0xda, 0xa6, 0x81, 0x94, 0xd2, 0x33, 0xda, 0xbb, 0x18, 0x0c, 0x53, 0x96, 0x25, 0x6e, 0xd6, 0xf7, 0xb8, 0xbb, 0x7d, 0x87, 0xed, 0xe3, 0x03, 0xcc, 0xe8, 0xd0, 0x1d, 0x3b, 0xf4, 0xc3, 0x00, 0x26, 0xe9, 0x7b, 0xaa, 0x7a, 0x8e, 0x22, 0x4d, 0xe3, 0x85, 0x51, 0xb2, 0x04, 0x79, 0x95, 0x61, 0x7f, 0x3c, 0xa0, 0x1b, 0x3b, 0x48, 0x5e, 0x60, 0x75, 0xbb, 0x82, 0xea, 0x9d, 0xdf, 0x99, 0xfb, 0xbd, 0xb5, 0x18, 0xa1, 0x75, 0x8a, 0x3c, 0xa7, 0x22, 0xf3, 0xf0, 0xf8, 0x1c, 0xdf, 0xff, 0xba, 0xae, 0x27, 0x16, 0xad, 0x9e, 0xdc, 0x95, 0x9e, 0x24, 0x21, 0xc4, 0xf2, 0x2f, 0x31, 0x9b, 0xcd, 0xbc, 0x81, 0xc2, 0x31, 0x7e, 0x36, 0xa4, 0xb5, 0x4c, 0x21, 0x04, 0xf7, 0xb2, 0x33, 0x5f, 0x1c, 0x79, 0x12, 0xb9, 0x09, 0xe1, 0x31, 0xa7, 0x56, 0xac, 0xf3, 0xf9, 0x1c, 0xdb, 0xed, 0x16, 0xbf, 0xff, 0xfd, 0xef, 0x29, 0xd7, 0x7d, 0x3e, 0xc7, 0x6c, 0x36, 0x83, 0xd6, 0x1a, 0x87, 0xc3, 0x01, 0x8b, 0xc5, 0x2a, 0xae, 0x2a, 0x82, 0xbc, 0x30, 0x98, 0x50, 0x04, 0x24, 0x66, 0x18, 0x86, 0x28, 0xfd, 0x0b, 0x0d, 0xc3, 0x7c, 0x3e, 0xc7, 0x6a, 0xb5, 0xc2, 0xe7, 0xa7, 0x47, 0x12, 0x85, 0x38, 0x0b, 0xee, 0x08, 0xaa, 0x4e, 0xb3, 0x0c, 0x55, 0x45, 0xbb, 0xa4, 0xa1, 0x27, 0xdd, 0x28, 0xe3, 0x1e, 0x66, 0x77, 0x0e, 0xd6, 0xd0, 0x4d, 0xa4, 0x8c, 0x86, 0x90, 0x69, 0xdc, 0xf7, 0x71, 0x2e, 0x91, 0x65, 0x05, 0xd2, 0x74, 0x32, 0x71, 0x08, 0xe9, 0x75, 0xce, 0xde, 0xf8, 0x46, 0x24, 0x3e, 0x6c, 0x83, 0x3c, 0xa3, 0xb9, 0x94, 0x04, 0xd9, 0x69, 0x17, 0x6f, 0xf6, 0x61, 0x18, 0xc0, 0xd8, 0xe8, 0xc9, 0x29, 0x69, 0x34, 0x3c, 0x51, 0xca, 0x9b, 0xde, 0xe0, 0x14, 0x94, 0x23, 0x12, 0x0e, 0x2e, 0x81, 0x14, 0x84, 0x2e, 0x38, 0x4d, 0x45, 0x9a, 0x7e, 0x96, 0x40, 0x55, 0xa5, 0xe4, 0x4c, 0x58, 0xcf, 0x30, 0x5b, 0x2c, 0x28, 0x39, 0x90, 0x01, 0xce, 0x18, 0x4a, 0xed, 0x72, 0xe6, 0x4f, 0xfa, 0x70, 0xff, 0xdc, 0xd7, 0xac, 0x63, 0x13, 0xb8, 0xdd, 0x7a, 0xc3, 0x0f, 0x13, 0x61, 0xc6, 0xae, 0x1d, 0x26, 0xbc, 0x08, 0x82, 0x5b, 0x43, 0x21, 0x07, 0x8c, 0x8f, 0xee, 0x25, 0x32, 0x58, 0x40, 0x51, 0x4e, 0x84, 0x3c, 0x83, 0xcc, 0x93, 0x65, 0x2f, 0x9d, 0xca, 0xc2, 0x2f, 0x13, 0x25, 0x87, 0x6e, 0x62, 0x0e, 0x72, 0x42, 0x18, 0x82, 0xd3, 0x19, 0xe3, 0x00, 0x67, 0x16, 0x42, 0x12, 0xe4, 0xe9, 0x1c, 0xed, 0x53, 0x9b, 0x63, 0x0a, 0xce, 0x67, 0xb8, 0xb9, 0xc9, 0x71, 0x73, 0x73, 0x07, 0xa5, 0x76, 0x68, 0x9b, 0x07, 0xec, 0x0f, 0x0f, 0xe8, 0xbb, 0x03, 0x46, 0xd5, 0xc2, 0x22, 0x45, 0x9a, 0xe4, 0x28, 0xab, 0x05, 0xaa, 0x72, 0x8d, 0x2c, 0x9f, 0xa3, 0x28, 0x66, 0x28, 0xf2, 0x12, 0x96, 0xa5, 0xe0, 0xdc, 0x3f, 0x26, 0x00, 0xe5, 0x99, 0xf8, 0x54, 0xbe, 0x0d, 0xea, 0xf9, 0x0d, 0x60, 0x4f, 0x2e, 0x62, 0xcc, 0x1a, 0x80, 0x3b, 0x68, 0x6b, 0x61, 0x94, 0x03, 0x4f, 0x4e, 0xf7, 0xd3, 0xa0, 0x83, 0x3f, 0xc1, 0x54, 0xf6, 0xa4, 0xcf, 0xf6, 0xcb, 0xf1, 0xfd, 0xf7, 0x26, 0x3c, 0x30, 0xe7, 0x2c, 0x75, 0x87, 0xf3, 0x83, 0x77, 0x1a, 0x54, 0x13, 0xde, 0x1b, 0xd2, 0xd7, 0xdb, 0xd0, 0x3a, 0xfd, 0x3c, 0xcb, 0x1d, 0xf6, 0x05, 0x4c, 0x7f, 0x76, 0x4d, 0x38, 0xf5, 0x22, 0x00, 0xeb, 0x12, 0xe6, 0xbf, 0x76, 0x7d, 0x45, 0x74, 0x4d, 0xb0, 0xab, 0xa6, 0x33, 0xe1, 0x6b, 0x7d, 0x4f, 0xf7, 0xf0, 0xf1, 0x78, 0x44, 0xdb, 0xed, 0x61, 0x54, 0x8b, 0xa6, 0xdd, 0xa2, 0xef, 0x0e, 0x90, 0x09, 0xdd, 0xeb, 0x1f, 0x3f, 0x7e, 0xc4, 0x6a, 0x75, 0x47, 0xb0, 0xb7, 0x73, 0xa8, 0x67, 0x45, 0x44, 0x39, 0x48, 0x91, 0x54, 0x90, 0x32, 0xa8, 0x3d, 0xc0, 0x68, 0x86, 0x71, 0xec, 0x91, 0x26, 0x15, 0x86, 0xb1, 0x87, 0x1b, 0x07, 0x0f, 0x59, 0x67, 0x24, 0x92, 0x00, 0x07, 0x13, 0xa7, 0xd8, 0x53, 0x6b, 0x95, 0x77, 0xff, 0x74, 0xb0, 0x96, 0x41, 0x2b, 0x07, 0x6b, 0x04, 0x12, 0x59, 0xa2, 0x2a, 0x05, 0xde, 0xbc, 0xf9, 0x0a, 0x6d, 0x7b, 0xf4, 0xc1, 0x2a, 0x0a, 0x60, 0xda, 0xdb, 0x67, 0xf7, 0x30, 0x56, 0x03, 0x6c, 0xbc, 0xb2, 0xea, 0x38, 0x99, 0x9d, 0xc1, 0xc7, 0x37, 0x3b, 0x47, 0xa1, 0x28, 0xc3, 0xd8, 0x45, 0x75, 0x17, 0x63, 0x0e, 0x46, 0x9b, 0xb3, 0x06, 0x98, 0xa4, 0x9c, 0x53, 0x72, 0x36, 0x9d, 0x59, 0x8c, 0x07, 0xd4, 0x4c, 0x7a, 0xa4, 0x93, 0xea, 0xd8, 0x72, 0xb1, 0x46, 0x9e, 0xf5, 0xd8, 0x6e, 0xb7, 0x9e, 0xf5, 0x4e, 0xeb, 0xa2, 0xbe, 0xef, 0x69, 0xc0, 0xe1, 0x1c, 0x69, 0x4e, 0xae, 0xa2, 0xc7, 0xae, 0x45, 0xbd, 0x98, 0x83, 0x49, 0x22, 0xc2, 0x8d, 0x46, 0xbf, 0xc8, 0x6c, 0x67, 0x96, 0x3e, 0xe7, 0xd1, 0x68, 0x8c, 0x46, 0xc3, 0xb4, 0x3d, 0x74, 0x2a, 0x21, 0x98, 0x43, 0xc2, 0x2c, 0xd2, 0x22, 0x83, 0x3c, 0x1c, 0x0e, 0x91, 0x7d, 0x3e, 0x95, 0x15, 0x05, 0x08, 0x3d, 0xc8, 0xd6, 0x42, 0xf7, 0x10, 0x0a, 0x75, 0xd0, 0x36, 0x87, 0x7d, 0x68, 0x98, 0xe0, 0x43, 0xa7, 0x56, 0xd7, 0x35, 0xb6, 0xdb, 0x6d, 0xd4, 0x01, 0x97, 0x65, 0x19, 0x19, 0xd2, 0x61, 0x07, 0xc0, 0xbc, 0x24, 0x26, 0x4c, 0x38, 0x81, 0x09, 0x1f, 0x9a, 0x87, 0x40, 0x56, 0x08, 0x44, 0xbc, 0x30, 0xc9, 0x65, 0x59, 0x46, 0xa9, 0x34, 0xed, 0x11, 0x4a, 0x0f, 0xfe, 0x42, 0xa6, 0xdd, 0xab, 0x52, 0x0a, 0x75, 0x35, 0x8f, 0xfe, 0xd8, 0x6d, 0xdb, 0xa2, 0x3f, 0x34, 0xb1, 0x18, 0x5b, 0x0b, 0xec, 0xb6, 0x1b, 0x4a, 0x12, 0xeb, 0xc9, 0x84, 0xc6, 0xaa, 0x2e, 0x92, 0xbd, 0x08, 0xc6, 0x5e, 0x60, 0x18, 0x06, 0x3c, 0x3d, 0x3d, 0x21, 0xcf, 0x0b, 0x7c, 0xf3, 0x15, 0x65, 0x59, 0xc7, 0xe2, 0x69, 0x89, 0x14, 0xa5, 0x8f, 0x8a, 0x76, 0xec, 0x35, 0x91, 0xd6, 0x06, 0xd5, 0xe3, 0xd0, 0x36, 0xd8, 0xec, 0xb6, 0xde, 0x44, 0xa4, 0xc2, 0xf3, 0xf3, 0x33, 0x8c, 0x55, 0xa8, 0xe7, 0x73, 0x70, 0xc9, 0xd0, 0x75, 0x0d, 0xfa, 0xb1, 0x83, 0x85, 0x42, 0xa6, 0x56, 0x31, 0x68, 0xc6, 0x39, 0x07, 0x37, 0x9a, 0xf8, 0xfa, 0xb2, 0x2c, 0xc3, 0x7a, 0xbd, 0x8e, 0x64, 0xbc, 0x98, 0x40, 0x36, 0x61, 0x93, 0x7f, 0xfe, 0xf4, 0x53, 0x94, 0xa4, 0x5d, 0xc2, 0xe9, 0x24, 0x3b, 0x5a, 0x47, 0x78, 0x3b, 0x34, 0x4a, 0x81, 0x58, 0x15, 0x64, 0x6b, 0x79, 0x9e, 0x63, 0x36, 0x9b, 0xbd, 0x30, 0xf0, 0x01, 0x80, 0x87, 0x87, 0x07, 0x24, 0x49, 0x82, 0xfb, 0xfb, 0xfb, 0x17, 0xb0, 0x5e, 0xf0, 0x09, 0x58, 0xad, 0x56, 0x91, 0xf5, 0x1e, 0x4c, 0x1b, 0x28, 0xc5, 0x08, 0x67, 0xc4, 0x8e, 0xd0, 0xc8, 0x05, 0xf4, 0x60, 0x6a, 0x0f, 0x1b, 0x98, 0xd5, 0x89, 0xcc, 0xd0, 0x34, 0x0d, 0x9e, 0x9f, 0x9f, 0xf1, 0xf0, 0xf0, 0x80, 0x2c, 0xad, 0xa2, 0x73, 0x1e, 0x4d, 0xac, 0x32, 0x6a, 0xde, 0x05, 0x4f, 0x20, 0xd2, 0xe4, 0x8c, 0xbd, 0x3f, 0x6d, 0x06, 0x43, 0xb8, 0xce, 0xd4, 0x5f, 0x61, 0x3a, 0x81, 0x48, 0x29, 0xe1, 0x64, 0xd8, 0x21, 0xf7, 0xa4, 0x54, 0x00, 0xf9, 0xba, 0x07, 0xd2, 0xe5, 0xd8, 0xf5, 0x9e, 0x58, 0xc6, 0x90, 0x70, 0x01, 0x91, 0x30, 0x70, 0x7e, 0x6e, 0x6b, 0x9b, 0x24, 0x09, 0x78, 0x5a, 0xc0, 0xfa, 0x15, 0x15, 0xb7, 0xa7, 0x34, 0xc2, 0xba, 0x5a, 0x21, 0xaf, 0x6a, 0xd4, 0x95, 0x27, 0x6d, 0xf1, 0x14, 0xda, 0x12, 0x93, 0x97, 0x5b, 0x06, 0x61, 0xf9, 0x0b, 0x45, 0xc2, 0x59, 0xc1, 0x9c, 0xe8, 0xc4, 0xa7, 0x70, 0x7c, 0xb8, 0x5e, 0xb4, 0xe5, 0x00, 0x4e, 0x5d, 0xbc, 0xd1, 0x27, 0xfe, 0x00, 0x15, 0x74, 0x75, 0x21, 0x75, 0x3a, 0x05, 0xe8, 0x38, 0x0b, 0x34, 0xed, 0xfe, 0x6c, 0x2a, 0x38, 0x11, 0x06, 0xe5, 0xab, 0x59, 0xf4, 0x67, 0xd3, 0xe4, 0x24, 0x7e, 0xf3, 0x24, 0x8d, 0x22, 0xeb, 0x4e, 0x6b, 0x2d, 0x04, 0x17, 0xa4, 0xe3, 0xb5, 0x96, 0x0c, 0x45, 0x1c, 0x05, 0xb5, 0xc0, 0x19, 0x38, 0x67, 0x30, 0xab, 0xd7, 0x50, 0xaa, 0x87, 0x35, 0x0d, 0x1c, 0x4b, 0x90, 0xe5, 0x15, 0xaa, 0x3a, 0xc1, 0xfd, 0xdb, 0x1b, 0x00, 0x06, 0xc6, 0x74, 0x24, 0x37, 0x35, 0x02, 0x82, 0xe7, 0x10, 0x49, 0x49, 0x91, 0xc8, 0x86, 0x41, 0x69, 0x0e, 0x27, 0x4c, 0x94, 0xf2, 0x59, 0xe6, 0x2d, 0x43, 0xbd, 0x41, 0x8a, 0x60, 0x02, 0x87, 0xc3, 0x21, 0x7a, 0x78, 0x0b, 0xce, 0xc0, 0xa4, 0x00, 0xf7, 0xe1, 0x3d, 0x5a, 0x6b, 0x28, 0xf8, 0xbc, 0x01, 0xc1, 0xa2, 0x24, 0x89, 0x0b, 0x06, 0xad, 0xe9, 0x1c, 0xac, 0xab, 0xe2, 0x85, 0x31, 0x4c, 0xd0, 0x8a, 0xd3, 0xe9, 0x2e, 0x5e, 0x87, 0xc9, 0x2f, 0xfc, 0xf3, 0xa7, 0x92, 0xb6, 0xc0, 0x25, 0xe0, 0xfc, 0xe7, 0xd3, 0xf4, 0x82, 0xee, 0xf9, 0x44, 0x74, 0xbc, 0x7c, 0x5c, 0x3e, 0x41, 0x0b, 0x58, 0xcc, 0xb5, 0x9f, 0xc6, 0x6c, 0xbe, 0x4c, 0x70, 0x9b, 0x40, 0xf0, 0x30, 0x67, 0x90, 0xfd, 0xe5, 0x0a, 0x88, 0x59, 0x85, 0xf5, 0x7a, 0x8d, 0xef, 0xbf, 0xff, 0x1e, 0xa3, 0x6a, 0xb1, 0xdf, 0x3e, 0xa0, 0x1f, 0x0e, 0xd0, 0xaa, 0xc3, 0xdd, 0xdd, 0x0d, 0x9a, 0xa6, 0xc1, 0x3f, 0xff, 0xd3, 0xbf, 0xe0, 0xfb, 0xef, 0x7f, 0x83, 0x77, 0x6f, 0xbf, 0x3e, 0x0b, 0x0a, 0x5a, 0x2e, 0x97, 0xf8, 0x2f, 0xff, 0xf9, 0x09, 0x8c, 0x39, 0xb4, 0xdd, 0x1e, 0x0f, 0x8f, 0x9f, 0x01, 0xc7, 0xf1, 0xf9, 0xd3, 0x16, 0xb7, 0x37, 0x80, 0xe0, 0x19, 0x6e, 0xef, 0x96, 0xe0, 0x8c, 0x51, 0x91, 0xf4, 0x76, 0xaf, 0x4e, 0x6b, 0x08, 0x41, 0x04, 0x54, 0x6d, 0x46, 0x18, 0xef, 0x69, 0xa2, 0x86, 0x91, 0x94, 0x0a, 0xda, 0x90, 0x67, 0x01, 0x93, 0x28, 0x8b, 0x6a, 0xd2, 0x3c, 0x8d, 0x00, 0x0c, 0x46, 0xd5, 0x02, 0xb0, 0x50, 0x1a, 0x94, 0xb2, 0x77, 0xd6, 0xb0, 0x90, 0xba, 0x21, 0x5c, 0xe3, 0x77, 0xf5, 0xda, 0x6b, 0xd2, 0x07, 0x94, 0x65, 0x81, 0xfd, 0x61, 0x3b, 0x69, 0x7c, 0x4e, 0x8e, 0x96, 0x89, 0xe7, 0x69, 0x70, 0x4e, 0xe8, 0xd5, 0x74, 0xe8, 0x39, 0x65, 0x5c, 0xc8, 0x17, 0x4a, 0x93, 0xb6, 0x6d, 0x51, 0xd7, 0x73, 0x0c, 0x83, 0xf2, 0x26, 0x5b, 0x02, 0x8b, 0xc5, 0x02, 0xce, 0x02, 0x65, 0x51, 0x61, 0x75, 0x4f, 0x7c, 0xaf, 0xcf, 0x9f, 0x3f, 0x9f, 0xf9, 0xaf, 0x5c, 0xba, 0x6a, 0x4e, 0xd7, 0x70, 0xd3, 0xc1, 0x38, 0xab, 0x67, 0xc8, 0xb3, 0x14, 0x49, 0x96, 0x21, 0x4f, 0x1c, 0xaa, 0xaa, 0x00, 0xfb, 0x0f, 0xff, 0xe3, 0x3b, 0x97, 0xe7, 0x79, 0x2c, 0x98, 0xe1, 0xb0, 0x9b, 0x0a, 0xe2, 0xc3, 0x05, 0x50, 0x96, 0x65, 0x74, 0xff, 0x0a, 0x90, 0x6a, 0x20, 0x3a, 0x05, 0x12, 0xd4, 0xf1, 0x78, 0x8c, 0xe4, 0xac, 0x68, 0x1b, 0x9a, 0xd1, 0x01, 0xe7, 0xfc, 0x1b, 0x9b, 0x15, 0x54, 0xe0, 0x4d, 0x7f, 0xd2, 0xbe, 0x3e, 0x3d, 0x3d, 0xa1, 0xef, 0x7b, 0xd4, 0x75, 0x1d, 0xc9, 0x56, 0x79, 0x5e, 0x47, 0x62, 0x5d, 0xd3, 0x34, 0x78, 0x7c, 0x7c, 0x44, 0x9e, 0xe7, 0xb8, 0xbd, 0xbd, 0x3d, 0x23, 0xc7, 0x85, 0x22, 0x11, 0x34, 0xec, 0x41, 0xbb, 0xc7, 0x18, 0xed, 0x6e, 0x02, 0x59, 0x6b, 0x36, 0x9b, 0x01, 0xa0, 0x7d, 0x7a, 0xd8, 0xd7, 0x87, 0xa9, 0x31, 0x1c, 0xce, 0x81, 0x51, 0x4e, 0xef, 0x81, 0x8d, 0x3f, 0x77, 0x3e, 0x27, 0x3d, 0xf2, 0x7a, 0xbd, 0xa6, 0xfd, 0x36, 0x63, 0xc8, 0xe6, 0x14, 0xb9, 0x3a, 0x8e, 0x23, 0x16, 0x8b, 0x05, 0xc6, 0x71, 0xc4, 0xc7, 0x8f, 0x1f, 0x23, 0x8a, 0x71, 0x3c, 0x1e, 0xc1, 0x39, 0xf7, 0xc4, 0x35, 0xea, 0xcc, 0xb6, 0xdb, 0x6d, 0xd4, 0xd8, 0x1b, 0x75, 0xc4, 0x38, 0x92, 0xe7, 0xfa, 0x72, 0xb9, 0x82, 0xe0, 0x09, 0x8c, 0x21, 0x75, 0xc1, 0x6e, 0x77, 0x80, 0xf5, 0x10, 0x50, 0x5d, 0xcd, 0x61, 0x8c, 0xc3, 0x6e, 0xb7, 0x27, 0x0f, 0xf6, 0xc5, 0x1a, 0x59, 0x96, 0x61, 0xb7, 0xfb, 0x1c, 0xd9, 0xe7, 0x5a, 0x6b, 0xef, 0x69, 0x9f, 0x47, 0xe9, 0xd5, 0xe6, 0x69, 0x8b, 0x5f, 0xfd, 0xea, 0x57, 0x3e, 0x28, 0xe6, 0x27, 0x3f, 0xc5, 0x57, 0xf1, 0xb3, 0x6e, 0x7b, 0xe6, 0x9b, 0xa3, 0x1c, 0x79, 0x9e, 0x42, 0x48, 0x10, 0x22, 0x62, 0xa9, 0xc9, 0xe8, 0xd4, 0x18, 0x75, 0xe8, 0xc1, 0x77, 0x60, 0xb7, 0xa3, 0x84, 0xb3, 0x3c, 0xcf, 0x01, 0x6d, 0x7c, 0x78, 0x87, 0xc0, 0xd0, 0x53, 0xe8, 0x8b, 0x10, 0x02, 0xf3, 0x79, 0x8d, 0xf9, 0xbc, 0xc6, 0x60, 0xa9, 0x01, 0x7b, 0x78, 0x78, 0x80, 0x10, 0x09, 0xde, 0xde, 0x7f, 0x83, 0xfd, 0xae, 0xc7, 0x61, 0xdf, 0xe3, 0xeb, 0xf7, 0xdf, 0xa1, 0x37, 0x43, 0xf4, 0x62, 0x1e, 0x86, 0x0e, 0x5d, 0xdf, 0x60, 0x1c, 0x87, 0x93, 0x5b, 0x98, 0xb8, 0x9e, 0x03, 0x10, 0x6f, 0x62, 0xd6, 0x46, 0x79, 0x95, 0x52, 0x0a, 0xe3, 0x10, 0x48, 0x83, 0x7e, 0xf2, 0xf2, 0xc5, 0x39, 0x14, 0xc7, 0x50, 0xa8, 0x23, 0x99, 0x27, 0x71, 0x7e, 0xaf, 0x26, 0x21, 0x98, 0x87, 0xe2, 0x95, 0xa6, 0x54, 0x26, 0x58, 0xa8, 0x71, 0x8b, 0xb2, 0xa8, 0xe1, 0x98, 0x84, 0x75, 0x29, 0x84, 0x98, 0xc1, 0xda, 0x0a, 0xd6, 0x66, 0xc8, 0xd2, 0x19, 0xde, 0x7c, 0xfb, 0x8b, 0x28, 0xc7, 0x29, 0x8a, 0xca, 0xaf, 0x15, 0x92, 0x53, 0x3c, 0xac, 0x11, 0xa7, 0xbd, 0x31, 0x44, 0x24, 0xfb, 0x9c, 0xd8, 0xe2, 0x27, 0x19, 0xe8, 0x34, 0x74, 0x26, 0xdc, 0xdc, 0x97, 0x11, 0xc4, 0x97, 0xfe, 0xf8, 0x41, 0x0d, 0xf1, 0x9a, 0xb1, 0xc9, 0x54, 0xc2, 0x16, 0x60, 0xcd, 0xa0, 0xfe, 0x00, 0x80, 0x7e, 0x22, 0x61, 0x9b, 0x4e, 0x32, 0x53, 0x09, 0x4f, 0x58, 0x79, 0x05, 0xa2, 0x69, 0x78, 0x4e, 0x42, 0x08, 0x18, 0xd5, 0xbe, 0xea, 0x74, 0x36, 0x65, 0x5a, 0xbf, 0x9a, 0x28, 0x66, 0xaf, 0x14, 0xcb, 0x57, 0x18, 0xe5, 0xd7, 0x0d, 0x53, 0xd8, 0x55, 0x17, 0xb4, 0x4b, 0x13, 0x97, 0x4b, 0x28, 0x39, 0x36, 0x44, 0xfe, 0xfa, 0x7b, 0xcd, 0x58, 0xe7, 0xda, 0x6b, 0xfb, 0xf9, 0xe7, 0xf3, 0x32, 0x3e, 0x35, 0x14, 0xca, 0xa9, 0x52, 0xe8, 0x14, 0x7a, 0x35, 0xbe, 0x60, 0x9f, 0x4f, 0x9f, 0xeb, 0x59, 0x96, 0xc6, 0x95, 0xf7, 0xd0, 0x61, 0xbc, 0xea, 0x40, 0x36, 0x3d, 0xf8, 0x2f, 0xfd, 0x41, 0xce, 0x90, 0x20, 0x9d, 0x50, 0xd2, 0x20, 0x2c, 0x9c, 0x67, 0x9c, 0x07, 0x3d, 0x78, 0x50, 0x4a, 0x90, 0x1f, 0xa7, 0x81, 0x19, 0x07, 0x74, 0xdd, 0x0e, 0x6d, 0xb3, 0xc1, 0xd8, 0x1f, 0xa0, 0x74, 0x0f, 0xcd, 0x1f, 0xa1, 0x46, 0x80, 0x63, 0x86, 0xfb, 0xbb, 0x5f, 0xe2, 0xed, 0xfd, 0x77, 0x71, 0x85, 0x58, 0x96, 0x25, 0x9a, 0xfe, 0x23, 0x7e, 0xfb, 0xdb, 0xff, 0x0b, 0x16, 0x1d, 0xd2, 0x4c, 0xa0, 0xeb, 0x1a, 0xe4, 0x79, 0x89, 0x3c, 0xab, 0xb0, 0x5e, 0xbd, 0x41, 0x39, 0xfb, 0xee, 0x6c, 0xd5, 0x1b, 0x3e, 0x97, 0xe0, 0x2d, 0x61, 0x34, 0x7f, 0xa1, 0xae, 0x9a, 0x16, 0x52, 0xdb, 0xf7, 0xc8, 0x72, 0x89, 0xe7, 0xa7, 0x1f, 0xf0, 0xe5, 0xe1, 0xbf, 0x23, 0x4d, 0x2d, 0xc0, 0x46, 0x34, 0xed, 0x1e, 0x30, 0x96, 0x26, 0x75, 0x63, 0x60, 0x8c, 0x8b, 0x91, 0xb9, 0x79, 0x2e, 0x21, 0x24, 0x83, 0xb5, 0x06, 0x89, 0xfb, 0x1e, 0x4a, 0x0f, 0x14, 0xec, 0xa2, 0x7b, 0x68, 0xd3, 0x42, 0xeb, 0x01, 0xa3, 0xea, 0xa1, 0xf5, 0x88, 0xb4, 0xa0, 0x15, 0xef, 0xf7, 0xdf, 0x7f, 0x8f, 0x5f, 0xfe, 0xf2, 0x97, 0x51, 0x6f, 0xde, 0x75, 0x1d, 0xfe, 0xf0, 0x87, 0x3f, 0x60, 0x79, 0x77, 0x13, 0xd1, 0x50, 0x72, 0xb6, 0x24, 0x0e, 0xd1, 0x30, 0x0c, 0x98, 0xcf, 0xe7, 0xa8, 0xaa, 0x0a, 0xfb, 0xfd, 0xc9, 0x96, 0x3c, 0xf0, 0x7f, 0xc2, 0x3d, 0xde, 0x75, 0x9e, 0x23, 0x66, 0x1d, 0x8e, 0xbb, 0x3d, 0x6e, 0xd6, 0x74, 0xae, 0xcf, 0xca, 0x8a, 0x5c, 0xf5, 0x9c, 0x82, 0x10, 0xb4, 0x50, 0xb4, 0x5a, 0xc1, 0xa8, 0x91, 0x48, 0x9d, 0xad, 0xb7, 0x99, 0x5e, 0xff, 0x05, 0x16, 0x8b, 0x05, 0xea, 0x32, 0xc7, 0x7c, 0x3e, 0x47, 0x91, 0x67, 0x90, 0xdf, 0x7d, 0xf7, 0x5d, 0x7c, 0x92, 0x5d, 0xd7, 0x9d, 0x79, 0x43, 0x87, 0x0f, 0x26, 0x58, 0x6b, 0x86, 0x8b, 0xa6, 0xae, 0x6b, 0x2c, 0x97, 0xcb, 0x48, 0xc2, 0x0a, 0x13, 0x64, 0x9e, 0xe7, 0xd1, 0xca, 0x72, 0xba, 0x47, 0x35, 0x8e, 0x0e, 0x04, 0x33, 0x21, 0x68, 0x49, 0x29, 0xb1, 0xdf, 0x90, 0x79, 0xc8, 0x72, 0xb9, 0xc4, 0xcd, 0xcd, 0x4d, 0x7c, 0xd1, 0x9b, 0xcd, 0x06, 0x9b, 0xcd, 0x06, 0xce, 0x51, 0x10, 0x46, 0xf8, 0x7b, 0xce, 0x39, 0xfa, 0xbe, 0xc7, 0xf3, 0xf3, 0x33, 0xb6, 0xdb, 0x2d, 0xd6, 0xeb, 0x75, 0x44, 0x10, 0xee, 0xee, 0xee, 0x70, 0x7f, 0x7f, 0x1f, 0x49, 0x58, 0x5a, 0x6b, 0x3c, 0x3d, 0x3d, 0xc5, 0xa2, 0x1f, 0xac, 0x50, 0x03, 0x9b, 0xf0, 0xe6, 0xe6, 0x06, 0xab, 0xd5, 0x2a, 0xbe, 0xa6, 0x69, 0x86, 0x7b, 0xd8, 0x0b, 0x87, 0x82, 0x3e, 0xb5, 0xd6, 0x7c, 0x78, 0x78, 0xc0, 0x30, 0x0c, 0x28, 0x8a, 0x02, 0xb3, 0xd5, 0x2d, 0xbe, 0x7c, 0xfc, 0x84, 0x9f, 0x7e, 0xfa, 0x09, 0xeb, 0xf5, 0x1a, 0xb7, 0xb7, 0xb7, 0xa8, 0x72, 0xda, 0x73, 0x0b, 0x30, 0xe4, 0x09, 0xb1, 0xa6, 0x05, 0x17, 0x80, 0xb1, 0x28, 0xd2, 0x0c, 0x72, 0xb5, 0x8e, 0xce, 0x77, 0xdb, 0x9d, 0x45, 0x9e, 0x33, 0xcc, 0x67, 0x2b, 0xdf, 0x18, 0x68, 0x74, 0xdd, 0x00, 0xad, 0x2d, 0xd2, 0x24, 0x87, 0x36, 0xe4, 0xaf, 0xae, 0x94, 0x89, 0xcf, 0x2f, 0x4d, 0x48, 0x5b, 0xbf, 0xdb, 0x1d, 0xc0, 0x18, 0xb9, 0x34, 0x85, 0xcc, 0x78, 0x80, 0x7b, 0x26, 0xf6, 0x00, 0x6b, 0x81, 0xd5, 0x6a, 0xe5, 0x21, 0x64, 0x86, 0x37, 0x6f, 0xde, 0x00, 0x00, 0x76, 0xbb, 0x1d, 0x9a, 0xa6, 0x21, 0xb4, 0xa2, 0xed, 0xa1, 0xb5, 0x43, 0x3f, 0xd0, 0x14, 0xc4, 0x18, 0x75, 0xed, 0x21, 0x66, 0xf0, 0xee, 0xdd, 0xdb, 0x18, 0x25, 0x4b, 0x85, 0xdc, 0x44, 0x5e, 0xc3, 0xf1, 0x78, 0x84, 0xee, 0x3b, 0x38, 0x2b, 0xa8, 0x20, 0xf2, 0x0c, 0x52, 0xa6, 0x90, 0x92, 0xae, 0x89, 0xc7, 0xc7, 0x1e, 0x83, 0x1d, 0x51, 0xd7, 0x15, 0x56, 0xab, 0x95, 0x87, 0xc3, 0x53, 0x08, 0x41, 0xa8, 0x46, 0x5d, 0xd7, 0xc8, 0x90, 0xa2, 0x6d, 0x8f, 0xd8, 0xed, 0x8e, 0x38, 0x1c, 0x77, 0xa7, 0x62, 0x2e, 0xe0, 0xf3, 0xda, 0x87, 0xb3, 0x9d, 0xf1, 0xb4, 0xe0, 0x70, 0xce, 0x01, 0x5e, 0x82, 0x33, 0x01, 0x67, 0x01, 0x50, 0x05, 0xff, 0xe5, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x86, 0x04, 0x69, 0x2a, 0x89, 0x60, 0x13, 0xe4, 0x8f, 0xdc, 0x41, 0x78, 0x63, 0x15, 0x67, 0x4f, 0x1a, 0xf5, 0x97, 0x99, 0xd1, 0x06, 0xc6, 0xef, 0x9f, 0xc9, 0x6e, 0xd4, 0x00, 0x5e, 0xde, 0xa4, 0x9d, 0x45, 0x2a, 0x05, 0xf2, 0xb4, 0x84, 0x52, 0xf4, 0xfe, 0xde, 0xdc, 0xdc, 0xe1, 0xaf, 0x7e, 0xf3, 0xb7, 0x70, 0x59, 0xee, 0x3b, 0xf4, 0x34, 0xee, 0xb1, 0x43, 0x01, 0x74, 0x96, 0x41, 0xeb, 0x49, 0x71, 0x8d, 0xa9, 0x64, 0xa7, 0x04, 0xae, 0x34, 0x95, 0x67, 0xba, 0xf2, 0x20, 0x93, 0x39, 0x79, 0xa9, 0xab, 0x17, 0x2e, 0x54, 0x67, 0xde, 0xd0, 0x17, 0x3b, 0xdc, 0x6b, 0x4e, 0x65, 0x67, 0xc5, 0x35, 0xb2, 0xe2, 0x5d, 0x8c, 0x13, 0x9d, 0x4a, 0x97, 0xc2, 0xd4, 0x48, 0xe4, 0x28, 0xda, 0x77, 0x93, 0x0b, 0x17, 0x8f, 0xeb, 0x23, 0xad, 0xe1, 0x0f, 0x24, 0x16, 0x27, 0xd4, 0x6b, 0x11, 0xa1, 0xaf, 0xd9, 0x91, 0x4e, 0x5f, 0x5f, 0x98, 0x8a, 0xaf, 0x45, 0x77, 0x5e, 0xfa, 0x4e, 0x5c, 0xfe, 0x7d, 0x40, 0x03, 0xae, 0x15, 0xd5, 0x97, 0x85, 0xd3, 0xbe, 0xf0, 0xb2, 0x98, 0x9e, 0x73, 0xaf, 0x15, 0xf3, 0xe9, 0x0a, 0xf1, 0x35, 0x9e, 0xc3, 0x9f, 0x0a, 0x46, 0x79, 0xad, 0x39, 0xa1, 0x9f, 0xcf, 0xce, 0xe4, 0xa2, 0x97, 0xa8, 0x4c, 0xf0, 0x07, 0x79, 0x2d, 0xcf, 0x3e, 0xb0, 0xae, 0xaf, 0xd9, 0xcb, 0x4e, 0x1b, 0xc0, 0xd7, 0x5e, 0x23, 0xe3, 0x1c, 0x60, 0x12, 0x80, 0x26, 0x65, 0x40, 0x90, 0x3f, 0x46, 0x14, 0xc0, 0x01, 0x93, 0x86, 0x63, 0xfa, 0x1e, 0x6a, 0xad, 0xc1, 0x32, 0x8f, 0xc8, 0xc0, 0x4d, 0xfc, 0x15, 0x44, 0x5c, 0xd5, 0xa6, 0x69, 0x8a, 0xdb, 0xbb, 0x1b, 0x30, 0xae, 0x90, 0xa4, 0x04, 0x6f, 0x13, 0x59, 0x51, 0xa2, 0xaa, 0x66, 0xa8, 0xaa, 0x19, 0x05, 0x79, 0xc9, 0x94, 0x72, 0x05, 0xc2, 0x9a, 0xc2, 0x31, 0x58, 0xe3, 0x5e, 0xa0, 0x44, 0x81, 0xe0, 0x1a, 0xfd, 0x4a, 0x24, 0xf7, 0xec, 0x73, 0x78, 0x54, 0xd3, 0x80, 0x0b, 0x09, 0xc6, 0x2d, 0x9c, 0x56, 0x30, 0x76, 0x00, 0x63, 0x12, 0x80, 0xc5, 0x30, 0x28, 0x8f, 0x22, 0x72, 0xe4, 0x85, 0x44, 0x9a, 0x26, 0xe8, 0x06, 0x3a, 0xcb, 0xdb, 0xf6, 0xe8, 0x53, 0xd7, 0x8c, 0x67, 0xb9, 0x07, 0x37, 0x4a, 0x1d, 0x25, 0x72, 0x59, 0x96, 0x83, 0x31, 0x1f, 0xa7, 0xab, 0x2d, 0xc6, 0x51, 0x43, 0x2b, 0x1b, 0x43, 0xa3, 0xba, 0xae, 0x03, 0x43, 0x4f, 0x6a, 0x09, 0x03, 0x34, 0x47, 0x32, 0x95, 0xe9, 0xbb, 0x11, 0x6a, 0x24, 0x03, 0x27, 0x78, 0x1f, 0x07, 0xe7, 0xb9, 0x3f, 0xf7, 0x77, 0x77, 0x68, 0xbb, 0x23, 0x54, 0x3f, 0xa0, 0x6b, 0x88, 0x38, 0x3d, 0xb4, 0x0d, 0xac, 0xee, 0x61, 0xb5, 0xf1, 0xab, 0x24, 0x43, 0x6a, 0x06, 0x4b, 0x6b, 0x67, 0x35, 0x8c, 0x18, 0xc6, 0x1e, 0x66, 0xd4, 0x48, 0xb8, 0x03, 0xe3, 0x74, 0x1d, 0xf5, 0x43, 0x83, 0xae, 0x3d, 0x40, 0x36, 0x7e, 0x57, 0x1c, 0x98, 0xd6, 0xd3, 0x03, 0xf4, 0xe1, 0xe1, 0x21, 0x4e, 0xed, 0xc1, 0x56, 0x34, 0xb0, 0x94, 0x83, 0x3e, 0x7d, 0x1a, 0xb6, 0x11, 0xba, 0x28, 0x8a, 0xa6, 0xa3, 0x7d, 0x6e, 0xdb, 0xb6, 0x70, 0x8c, 0x2e, 0xce, 0x41, 0x51, 0xba, 0xcd, 0xa0, 0xc6, 0xc8, 0x82, 0x9e, 0x9a, 0xd8, 0x04, 0x98, 0x9d, 0x76, 0x0d, 0x25, 0x18, 0x23, 0x9f, 0xec, 0xfd, 0x7e, 0x1f, 0xa7, 0xca, 0xa2, 0x28, 0xb0, 0x5a, 0xad, 0x70, 0x73, 0x73, 0x13, 0x09, 0x5d, 0xc1, 0x55, 0x2c, 0x18, 0xc4, 0x84, 0x03, 0xff, 0x9b, 0x6f, 0xbe, 0x81, 0xb5, 0x96, 0x60, 0x6f, 0x7f, 0x31, 0x04, 0x2b, 0xd4, 0xed, 0x76, 0x8b, 0x0f, 0x1f, 0x3e, 0xc4, 0xd7, 0x1e, 0x60, 0x94, 0x20, 0xaf, 0x23, 0xe7, 0x38, 0x19, 0x4d, 0x15, 0x42, 0x5c, 0xe7, 0xf1, 0x78, 0x8c, 0x8f, 0xf5, 0xf7, 0x7f, 0xff, 0xf7, 0xb1, 0x48, 0x84, 0xc3, 0x33, 0x3c, 0x8e, 0xf2, 0x0a, 0x80, 0xb0, 0x57, 0x0e, 0xc1, 0x1d, 0x53, 0x0b, 0x4d, 0x6b, 0x68, 0x5a, 0x9b, 0xcd, 0x6a, 0x48, 0x91, 0x42, 0xe4, 0x0e, 0x89, 0x2c, 0xbd, 0xa1, 0x0e, 0x43, 0x9a, 0x16, 0xbe, 0xd9, 0x18, 0xb1, 0xdb, 0x1e, 0x71, 0x3c, 0x1e, 0x51, 0x55, 0x74, 0x41, 0x69, 0xad, 0xf1, 0xe6, 0x6e, 0x49, 0x93, 0x26, 0x34, 0xd2, 0x24, 0x07, 0x67, 0x12, 0x4d, 0xdb, 0xd0, 0xc5, 0xc4, 0x39, 0xac, 0x51, 0xf1, 0xe7, 0xd6, 0x75, 0x1d, 0x65, 0x70, 0x51, 0xdb, 0xc8, 0x14, 0x1c, 0xc8, 0x17, 0x1b, 0x5e, 0xc6, 0x12, 0x74, 0x9c, 0x8c, 0x03, 0x3f, 0xfc, 0xf8, 0x07, 0x48, 0x99, 0x9c, 0x98, 0xd0, 0x4c, 0x46, 0x52, 0x9e, 0x73, 0x0e, 0x8b, 0xf5, 0x0a, 0x5a, 0x01, 0x46, 0x93, 0xf5, 0x62, 0x9a, 0xe4, 0xe0, 0x02, 0x91, 0xf3, 0x30, 0x1a, 0x8d, 0xa6, 0xef, 0x50, 0x14, 0x25, 0xb8, 0x31, 0x50, 0xc7, 0x23, 0x64, 0x9a, 0xe1, 0xfe, 0xed, 0x5b, 0xbc, 0xfb, 0xea, 0x3d, 0x9e, 0x77, 0x1f, 0x31, 0x8c, 0x0d, 0x86, 0xb1, 0x45, 0xd7, 0x1d, 0x61, 0x9d, 0x86, 0x94, 0x1c, 0x00, 0x05, 0x37, 0x58, 0xa7, 0x48, 0x41, 0x6a, 0x27, 0x06, 0x2a, 0x8e, 0x43, 0x30, 0x7a, 0x7e, 0xd6, 0xf1, 0x58, 0x34, 0x19, 0x84, 0x8f, 0x00, 0xce, 0x23, 0x84, 0x7c, 0xd4, 0x7b, 0x7f, 0xe8, 0x7a, 0xe7, 0x26, 0xa3, 0xa1, 0xc6, 0x11, 0x69, 0x46, 0x93, 0xba, 0xc6, 0x48, 0xab, 0xd0, 0xe0, 0x71, 0x6f, 0xc8, 0x0e, 0x93, 0x16, 0xa6, 0x9e, 0xc8, 0x36, 0x2a, 0x8c, 0x0a, 0xe0, 0xbd, 0x83, 0xd2, 0x29, 0xac, 0xc9, 0xc0, 0x05, 0x43, 0x96, 0x27, 0xb0, 0x49, 0x1a, 0x61, 0xec, 0xc0, 0x22, 0x26, 0x19, 0x8e, 0x84, 0xe3, 0x0e, 0x49, 0x32, 0x99, 0x8a, 0xa2, 0x8b, 0xd4, 0xe9, 0x90, 0x9f, 0xa6, 0x35, 0x4d, 0x4d, 0x6f, 0xa6, 0xd2, 0xc4, 0xe0, 0xaf, 0x7d, 0x09, 0xbb, 0x5f, 0x2b, 0x1c, 0xaf, 0xa7, 0x70, 0xf1, 0x48, 0x86, 0xba, 0xb4, 0x7e, 0xbd, 0xe6, 0x33, 0x7e, 0xe9, 0x3d, 0x3d, 0x6d, 0xa2, 0xa6, 0xe6, 0x53, 0x92, 0xe7, 0x67, 0xcf, 0xfd, 0x9a, 0xbd, 0xe8, 0xb5, 0x14, 0xb7, 0x58, 0xe8, 0x04, 0x22, 0xbc, 0xc9, 0xd8, 0xc5, 0x8e, 0x1a, 0x0c, 0x60, 0x53, 0xe9, 0xd5, 0xc5, 0xe3, 0xc2, 0x5d, 0xf1, 0x01, 0x77, 0x17, 0xb1, 0xb0, 0xe7, 0x84, 0x36, 0x4c, 0x0b, 0x15, 0xdc, 0x55, 0x59, 0xd9, 0xf4, 0xbf, 0xa9, 0x14, 0xf7, 0xe7, 0x1a, 0x87, 0xd7, 0xbe, 0xf6, 0x73, 0xcd, 0xca, 0x35, 0xc3, 0xa0, 0x9f, 0xb3, 0xe1, 0xbd, 0xf6, 0xe7, 0xd7, 0xf2, 0xcc, 0x2f, 0xe3, 0x5b, 0xaf, 0x99, 0x17, 0x45, 0xa2, 0x18, 0x83, 0xbf, 0x26, 0x2f, 0xde, 0x61, 0xc7, 0x61, 0x9d, 0x06, 0xe7, 0x0e, 0xdc, 0x23, 0x3c, 0x71, 0x75, 0x25, 0xc8, 0x9c, 0xc5, 0xf8, 0x26, 0x99, 0x43, 0xc5, 0xc1, 0x2e, 0x4d, 0x32, 0x5f, 0x17, 0x0c, 0xba, 0xf6, 0x48, 0xf7, 0x99, 0xb1, 0x60, 0xbe, 0x06, 0x18, 0x0d, 0x70, 0x96, 0x23, 0xcf, 0x2a, 0xcc, 0x66, 0xb3, 0x53, 0x2c, 0xeb, 0x64, 0x82, 0x3d, 0xbd, 0xbe, 0xf4, 0xd5, 0x86, 0x91, 0x73, 0x8e, 0x34, 0x61, 0x30, 0x96, 0xec, 0xb3, 0xb9, 0xb0, 0x60, 0xdc, 0x45, 0x69, 0x5a, 0x40, 0x95, 0xec, 0x04, 0xfd, 0xa2, 0xc1, 0x53, 0xe3, 0x70, 0x00, 0x4d, 0xe9, 0xea, 0x18, 0xeb, 0x8a, 0x31, 0x26, 0x86, 0xd1, 0x84, 0xe7, 0x33, 0xf7, 0x9e, 0xea, 0xcf, 0x4f, 0x7b, 0xfc, 0x0e, 0xff, 0x3d, 0x3e, 0xa6, 0x52, 0x0a, 0x7d, 0x37, 0xa2, 0x3b, 0x0e, 0xa8, 0xeb, 0x04, 0x09, 0xcf, 0x30, 0x38, 0x05, 0x33, 0x3a, 0x4a, 0x21, 0x64, 0x0e, 0x7a, 0x30, 0xf8, 0xb4, 0xff, 0x12, 0xeb, 0x64, 0x5a, 0xe5, 0xc8, 0x64, 0x76, 0x32, 0xb5, 0x92, 0x12, 0xbb, 0xa7, 0x2f, 0x31, 0x50, 0x6a, 0xb7, 0x79, 0x22, 0xcb, 0x6d, 0xab, 0xc1, 0xf9, 0x9d, 0x5f, 0x51, 0x4b, 0xb4, 0xcd, 0x80, 0x7e, 0x20, 0xa4, 0xc1, 0x2a, 0x1a, 0x86, 0x99, 0x03, 0x92, 0xac, 0x40, 0xd3, 0xee, 0x91, 0x66, 0x02, 0xb3, 0x2a, 0x85, 0xb5, 0x40, 0xdb, 0x1e, 0x20, 0x77, 0xbb, 0x3d, 0xf2, 0x3c, 0x8f, 0x91, 0xa7, 0x53, 0x03, 0x8b, 0x24, 0x49, 0xe3, 0xe4, 0x4e, 0x1f, 0x12, 0xe2, 0x4d, 0x44, 0x53, 0xb6, 0x88, 0x32, 0xb3, 0xb0, 0xc7, 0x0d, 0xc5, 0x1e, 0x40, 0x74, 0x11, 0xe3, 0x92, 0x20, 0xf4, 0x6e, 0x18, 0x48, 0x82, 0x65, 0x89, 0x84, 0xb0, 0x9e, 0x2d, 0xe3, 0xee, 0x3c, 0xc0, 0x73, 0x61, 0xff, 0xdb, 0x75, 0x1d, 0x38, 0x4f, 0xe3, 0x61, 0x11, 0x24, 0x52, 0x61, 0xb7, 0x1f, 0xa4, 0x4a, 0x41, 0x57, 0x1d, 0xe4, 0x5c, 0xd3, 0x34, 0xb0, 0xf0, 0x2b, 0xc0, 0xad, 0xc1, 0x71, 0x8d, 0x3c, 0xc9, 0x7b, 0xcc, 0xe7, 0xf5, 0x99, 0x0c, 0xab, 0xeb, 0x3a, 0x00, 0xc0, 0xdb, 0xb7, 0x6f, 0xbd, 0x9e, 0xdd, 0x61, 0xb3, 0xd9, 0xc0, 0x5a, 0xeb, 0xad, 0xf8, 0x8a, 0xb8, 0x6b, 0x0c, 0xde, 0xe9, 0xe1, 0x42, 0x0f, 0xb0, 0x7e, 0xdf, 0xf7, 0x31, 0x66, 0x75, 0x9a, 0x9c, 0x35, 0xf5, 0x60, 0x0f, 0x70, 0x2a, 0x43, 0x4a, 0x7b, 0x3e, 0x9e, 0x02, 0x10, 0x98, 0xcf, 0x67, 0xde, 0x45, 0x88, 0x9a, 0xa8, 0xbb, 0xe5, 0x3a, 0x7e, 0xf8, 0xcd, 0x4d, 0x83, 0x87, 0x87, 0x07, 0x18, 0xe3, 0xa2, 0x6c, 0xb0, 0x69, 0x0e, 0x91, 0x94, 0x44, 0xd1, 0x96, 0x04, 0xdf, 0xef, 0x76, 0x3b, 0x30, 0xc6, 0xf0, 0xf5, 0xfb, 0xb7, 0x91, 0x83, 0x10, 0x7c, 0xdf, 0xc3, 0x73, 0x7e, 0x7a, 0x7a, 0x82, 0xc8, 0x18, 0x69, 0x8b, 0xb9, 0x3c, 0xc9, 0x5a, 0x7c, 0x51, 0x67, 0x96, 0xf9, 0xe7, 0x42, 0xcd, 0xc1, 0x6a, 0xb5, 0x42, 0x9e, 0x95, 0xb1, 0x99, 0x58, 0xaf, 0x6f, 0xd1, 0x75, 0x0d, 0x8c, 0xf6, 0x93, 0xa8, 0x65, 0x51, 0xb2, 0x24, 0xb9, 0x84, 0x4c, 0x12, 0x88, 0x22, 0x21, 0xd7, 0xb5, 0x63, 0x8b, 0x4e, 0x6a, 0x30, 0x48, 0xdc, 0xdd, 0x7e, 0x8d, 0xd5, 0xcd, 0xad, 0xcf, 0x90, 0x97, 0x48, 0x12, 0x4e, 0x86, 0x37, 0x99, 0xf4, 0x26, 0x30, 0xa4, 0x77, 0x76, 0x0e, 0x48, 0xb3, 0xe2, 0xc5, 0xee, 0x18, 0xb0, 0x30, 0x46, 0x79, 0x89, 0x14, 0x1d, 0x08, 0xc2, 0xe7, 0x73, 0x97, 0x65, 0x1d, 0xdd, 0x0a, 0x9d, 0x63, 0xf8, 0xcc, 0x7f, 0xc4, 0x7e, 0xbf, 0xf3, 0x2b, 0x12, 0x07, 0xeb, 0x3c, 0x9b, 0x59, 0x69, 0x24, 0xa9, 0x83, 0x90, 0x89, 0x0f, 0xfc, 0xb0, 0xa4, 0x13, 0x67, 0x16, 0x0c, 0xd2, 0x13, 0xb7, 0x0c, 0xf2, 0xb4, 0x86, 0xe0, 0x09, 0xda, 0x4e, 0x41, 0x69, 0x8b, 0xe5, 0x72, 0x8d, 0xbb, 0xbb, 0x5f, 0x60, 0xbe, 0xb8, 0xc7, 0xa0, 0x14, 0x8c, 0x11, 0xe0, 0x5c, 0x47, 0xd2, 0x4c, 0x28, 0xe6, 0x22, 0x15, 0x1e, 0x52, 0x3b, 0xc9, 0xc1, 0xec, 0x24, 0x8a, 0xf1, 0x05, 0x74, 0x7a, 0x51, 0x40, 0xc3, 0xd7, 0x42, 0xc3, 0xcc, 0x2f, 0xd8, 0xca, 0xa7, 0x1d, 0xab, 0x3b, 0x9b, 0xc6, 0xce, 0xb2, 0x98, 0x7d, 0x93, 0x7c, 0xc6, 0xb6, 0x76, 0xec, 0xec, 0xcf, 0x5a, 0xab, 0xab, 0x05, 0x38, 0x3c, 0xc7, 0xcb, 0x82, 0x33, 0x9d, 0x6a, 0x9d, 0x73, 0x90, 0x93, 0x30, 0x8f, 0xc0, 0xc8, 0x9d, 0x1e, 0xc8, 0x97, 0x71, 0xc9, 0xd7, 0xb4, 0xd9, 0xaf, 0x4d, 0xb8, 0x97, 0xe1, 0x22, 0xd7, 0x26, 0x74, 0x38, 0xf6, 0x67, 0x27, 0x9b, 0xfd, 0x39, 0x10, 0xf9, 0x65, 0x41, 0xbe, 0xe6, 0xd0, 0x37, 0xfd, 0xfd, 0x32, 0x7e, 0xf6, 0xb5, 0x3c, 0xf3, 0xcb, 0x46, 0x26, 0xae, 0x64, 0x3c, 0xe4, 0xfe, 0x5a, 0xa6, 0xf9, 0xb5, 0xdf, 0xa7, 0xdf, 0x17, 0x0c, 0x93, 0xe8, 0xf9, 0xd8, 0xb3, 0x26, 0x26, 0xec, 0x8c, 0x2f, 0x0b, 0xfe, 0x54, 0x81, 0xc7, 0x1c, 0x7c, 0x16, 0xb8, 0xcf, 0x0e, 0x27, 0xbc, 0xfd, 0xa2, 0x79, 0x60, 0x17, 0xf6, 0xde, 0x84, 0xd6, 0x38, 0x48, 0x1c, 0x07, 0x82, 0xb3, 0xb9, 0xe0, 0xf1, 0xdc, 0x66, 0x15, 0x71, 0x5c, 0xac, 0x63, 0xd8, 0x3d, 0x6e, 0x26, 0x9e, 0xe4, 0xa4, 0xe4, 0x61, 0x48, 0x50, 0x57, 0x29, 0xca, 0x62, 0x1e, 0xa5, 0xc9, 0xd3, 0xd7, 0x36, 0x6d, 0x52, 0xa6, 0x68, 0xd6, 0xf4, 0x9a, 0x38, 0x35, 0x75, 0x2d, 0xfa, 0xe1, 0x00, 0xa5, 0x5b, 0x80, 0x19, 0x4f, 0xb6, 0x24, 0x22, 0x75, 0x48, 0x82, 0x0c, 0xf5, 0x43, 0x8a, 0x04, 0xb2, 0x4c, 0xa0, 0xf4, 0x88, 0xbe, 0x6f, 0xd1, 0x1f, 0x07, 0x64, 0x99, 0x85, 0x4c, 0x05, 0x92, 0x4c, 0x82, 0x21, 0x9d, 0xf8, 0x34, 0x50, 0xad, 0x28, 0xb3, 0x1a, 0x87, 0x71, 0x87, 0x2f, 0x1f, 0xbf, 0xe0, 0xcb, 0x47, 0x2a, 0xce, 0x59, 0x4e, 0x1a, 0x71, 0x72, 0xd8, 0xb4, 0x68, 0x67, 0x44, 0x98, 0xd6, 0xca, 0x60, 0xb4, 0xea, 0x6c, 0xb5, 0xd1, 0x35, 0x44, 0xb2, 0x96, 0x45, 0x82, 0x44, 0xa4, 0xc8, 0x92, 0xfc, 0x24, 0x13, 0x16, 0x12, 0x5f, 0xdd, 0xdf, 0x00, 0x66, 0x00, 0x4c, 0x8f, 0x46, 0x00, 0xce, 0x0e, 0x68, 0xbb, 0x06, 0xcd, 0x91, 0x83, 0x61, 0xc0, 0xe7, 0x4f, 0x7b, 0x6f, 0x66, 0x46, 0x03, 0x59, 0x92, 0x67, 0x60, 0x22, 0x01, 0xe7, 0x02, 0x65, 0x96, 0xa3, 0x93, 0x12, 0x49, 0xc2, 0x90, 0xe5, 0x02, 0x8c, 0x01, 0x6d, 0x6b, 0x20, 0x03, 0xb4, 0x17, 0x48, 0x6d, 0x61, 0xfa, 0x0c, 0x04, 0xac, 0xd0, 0xb1, 0x10, 0x8c, 0xfa, 0x88, 0xdd, 0x6e, 0x17, 0xf7, 0xe6, 0x14, 0x51, 0xfa, 0x8c, 0x1f, 0x7f, 0xfc, 0x91, 0xb0, 0xff, 0xd9, 0x2c, 0x16, 0x90, 0x61, 0x18, 0xa2, 0x24, 0x4d, 0x24, 0x34, 0xd9, 0x69, 0x3f, 0xe5, 0xe6, 0x65, 0x81, 0xdb, 0xdb, 0x5b, 0x74, 0xfb, 0x26, 0xee, 0xdb, 0x83, 0xe5, 0xeb, 0x34, 0x91, 0x2b, 0x40, 0xf3, 0x53, 0xad, 0x74, 0x98, 0xe4, 0xa7, 0x87, 0x47, 0x98, 0xa8, 0xa7, 0xae, 0x73, 0xa1, 0x31, 0xa9, 0xeb, 0x1a, 0xf7, 0xf7, 0xf7, 0xd0, 0x5a, 0xc7, 0xe7, 0x5f, 0x96, 0x65, 0xdc, 0x71, 0x94, 0x65, 0x89, 0xa6, 0x69, 0xe2, 0x6b, 0x0a, 0xfb, 0xf0, 0x2c, 0xcb, 0xb0, 0x5c, 0xd6, 0x71, 0xb7, 0x13, 0x22, 0x3c, 0x43, 0xd3, 0xd0, 0x75, 0x1d, 0xb6, 0x8f, 0x4f, 0x68, 0x1a, 0x85, 0xd9, 0x2c, 0xc3, 0xed, 0xfa, 0x06, 0x77, 0x77, 0x77, 0x18, 0x7c, 0xd3, 0xb2, 0xdf, 0xee, 0x60, 0x14, 0x65, 0xf7, 0x66, 0x49, 0x0a, 0x6d, 0x0c, 0x69, 0x6a, 0xb5, 0x89, 0xaf, 0xb3, 0xae, 0x96, 0x80, 0x3b, 0xd9, 0xbc, 0x12, 0xa9, 0x49, 0xc5, 0xcc, 0xe9, 0xd0, 0x39, 0xd6, 0x75, 0x1d, 0xc9, 0x67, 0xcf, 0xcf, 0xcf, 0x18, 0x86, 0x0e, 0xc3, 0x68, 0x61, 0xbd, 0xf6, 0x33, 0xf5, 0xe4, 0x30, 0xe7, 0x2c, 0xa4, 0x14, 0x28, 0x0a, 0xba, 0x51, 0x8e, 0x6d, 0x83, 0xcc, 0x68, 0x6f, 0x9c, 0x72, 0xf0, 0x68, 0xc0, 0x0c, 0xe0, 0x0c, 0xc7, 0xb6, 0xc1, 0x3c, 0xf5, 0xa4, 0x1f, 0x68, 0x2f, 0xcd, 0x70, 0x70, 0x13, 0x6d, 0x6a, 0x56, 0xd5, 0x5e, 0x43, 0xad, 0xb1, 0x79, 0xde, 0x41, 0xeb, 0x0d, 0xfa, 0x7e, 0x84, 0xb3, 0xb4, 0x7b, 0x5f, 0xac, 0x57, 0x80, 0x00, 0xb2, 0xa4, 0x40, 0xed, 0x21, 0x34, 0xb2, 0xcd, 0x6d, 0xd0, 0x34, 0x07, 0x74, 0x63, 0x03, 0xc6, 0x46, 0xf2, 0x68, 0xb6, 0x1c, 0xce, 0x71, 0xba, 0x59, 0x58, 0x82, 0xa6, 0xe9, 0x91, 0xa6, 0x44, 0xca, 0x2b, 0xca, 0x0c, 0xfd, 0x90, 0x60, 0x18, 0x0c, 0xac, 0xd3, 0x60, 0x96, 0xf9, 0x44, 0xac, 0xec, 0xd5, 0x89, 0x91, 0x31, 0x86, 0x63, 0xa3, 0x70, 0x77, 0x77, 0x8f, 0x6f, 0xbe, 0xf9, 0x06, 0x6f, 0xde, 0xbc, 0x41, 0x51, 0x90, 0x73, 0xd5, 0x7e, 0x47, 0xd9, 0xcb, 0x77, 0xb7, 0xef, 0x30, 0x0e, 0x16, 0xfb, 0x1d, 0x25, 0xe9, 0x31, 0xe6, 0x53, 0xf7, 0x7a, 0x32, 0x1c, 0x9a, 0x2f, 0x6b, 0x9a, 0x02, 0x9c, 0xf0, 0xd0, 0xb2, 0xf4, 0xcc, 0x5f, 0x2f, 0xb5, 0xe4, 0xe4, 0xa6, 0xc7, 0x05, 0xc3, 0xbc, 0x9e, 0xe3, 0xbb, 0xef, 0xfe, 0x02, 0xef, 0xde, 0xfd, 0x05, 0x18, 0xaf, 0xa1, 0x15, 0xd0, 0x1b, 0x1f, 0x2c, 0x61, 0x01, 0xc6, 0x48, 0xe7, 0x6a, 0x59, 0x48, 0x2b, 0xc4, 0x99, 0xa6, 0xdf, 0xe0, 0xe5, 0x24, 0x35, 0x2d, 0xd4, 0x53, 0x35, 0xc8, 0xb5, 0x04, 0xc2, 0x69, 0x21, 0x39, 0x1d, 0xb0, 0xaf, 0xe7, 0x62, 0x9f, 0x17, 0x01, 0xbf, 0xb2, 0x40, 0x58, 0x5d, 0x78, 0xc6, 0xae, 0x78, 0x3d, 0x66, 0x73, 0x7a, 0xa0, 0x13, 0xd3, 0x5d, 0x9f, 0x78, 0x00, 0x1e, 0xee, 0x36, 0x2a, 0x38, 0x67, 0x21, 0xee, 0xe9, 0x83, 0x96, 0x79, 0x7a, 0x1f, 0x5f, 0xe3, 0x3f, 0x84, 0xa8, 0xe3, 0x97, 0x05, 0x71, 0xba, 0x32, 0x48, 0x26, 0x93, 0xfb, 0x4b, 0x13, 0x15, 0xf7, 0x4a, 0x23, 0x70, 0x5e, 0x54, 0x27, 0x24, 0xb6, 0x8b, 0xef, 0xb5, 0xc6, 0xbe, 0x3a, 0x09, 0x5f, 0xb3, 0x42, 0xbd, 0xf6, 0x19, 0xfc, 0xdc, 0x7f, 0xe7, 0xe4, 0xb6, 0xf3, 0xa9, 0x7d, 0x0a, 0xaf, 0xff, 0xa9, 0xa2, 0x7e, 0xb9, 0x76, 0x0a, 0xbf, 0x42, 0x43, 0xf6, 0xda, 0xfb, 0x7b, 0x2d, 0x7e, 0xf5, 0x0c, 0x8d, 0x31, 0xda, 0xeb, 0xb5, 0x0d, 0x5c, 0x98, 0x6e, 0x19, 0xa7, 0x1d, 0x3a, 0x23, 0x7b, 0xda, 0xf0, 0x39, 0x99, 0x90, 0x8f, 0x10, 0xd7, 0x42, 0xf4, 0xd9, 0xa7, 0x69, 0x8a, 0xc5, 0x6c, 0x89, 0xf9, 0x7c, 0x1e, 0xfd, 0x09, 0x18, 0x87, 0xb7, 0x41, 0x36, 0x48, 0x53, 0x09, 0xd1, 0x8b, 0xa8, 0x03, 0x17, 0xc2, 0x93, 0x45, 0xb3, 0x19, 0xd2, 0x34, 0x3f, 0x73, 0x49, 0x3c, 0x27, 0x13, 0xba, 0x17, 0xa4, 0xd0, 0xcb, 0x66, 0x50, 0xab, 0x0e, 0x5d, 0x77, 0x80, 0x36, 0x3d, 0xa4, 0x04, 0x18, 0xb7, 0xde, 0x6e, 0x59, 0xc0, 0x6a, 0x8e, 0xae, 0x53, 0x27, 0xa3, 0x30, 0x29, 0xe2, 0x30, 0x92, 0xa6, 0x39, 0xb2, 0xac, 0xc0, 0x30, 0xee, 0x20, 0x04, 0x20, 0x25, 0x87, 0xb3, 0x64, 0xc4, 0x14, 0xf8, 0x3b, 0xc1, 0x4b, 0x23, 0xc4, 0x06, 0x07, 0x6e, 0x51, 0xdf, 0x9b, 0xb8, 0x9b, 0x57, 0x23, 0xed, 0xbe, 0x43, 0x02, 0x5f, 0x20, 0x25, 0x2f, 0x16, 0x0b, 0x2c, 0x16, 0x0b, 0x7c, 0xfd, 0xee, 0xab, 0xc8, 0x63, 0xc8, 0x92, 0x14, 0xdc, 0x01, 0xc6, 0xf8, 0x86, 0xde, 0x3a, 0xd8, 0xb1, 0xc7, 0xd8, 0x1e, 0xd1, 0x1d, 0xb6, 0x18, 0xbb, 0x16, 0x49, 0x02, 0x0c, 0x3d, 0xb0, 0xdd, 0x6d, 0x31, 0xa8, 0x3d, 0xee, 0xef, 0xef, 0xc1, 0x30, 0xc7, 0x6c, 0xb6, 0xc2, 0xed, 0xcd, 0x1d, 0x84, 0xc8, 0xb0, 0xdb, 0x37, 0x38, 0x1e, 0xa8, 0x51, 0x68, 0xba, 0x3d, 0xda, 0xee, 0x88, 0xfd, 0x3e, 0x41, 0x92, 0x0a, 0x38, 0xa7, 0x20, 0x8d, 0x76, 0xd0, 0x4a, 0x41, 0x8b, 0x93, 0x81, 0x0c, 0xc1, 0x19, 0x39, 0xd9, 0x99, 0xfa, 0x27, 0x59, 0x95, 0xb3, 0x33, 0xcf, 0xf7, 0x71, 0xd0, 0x68, 0xdb, 0x26, 0x9a, 0x79, 0x9c, 0x32, 0xba, 0xcb, 0x58, 0x84, 0x43, 0x53, 0x30, 0x65, 0xb7, 0x0f, 0xc3, 0x00, 0xed, 0x73, 0x70, 0xe7, 0x45, 0x1d, 0x7d, 0xbc, 0x9b, 0xa6, 0x39, 0x4d, 0xf4, 0x9c, 0xe3, 0xfe, 0xfe, 0x1e, 0xce, 0x89, 0x48, 0xc6, 0x0a, 0xba, 0xf6, 0xa0, 0xc5, 0xce, 0xf3, 0x3c, 0x12, 0xe6, 0x02, 0xc4, 0x1d, 0xe4, 0x70, 0x61, 0x62, 0x6f, 0xdb, 0x96, 0x4c, 0xf8, 0xfd, 0x0d, 0x14, 0xa6, 0xe8, 0x30, 0xe1, 0x87, 0xc6, 0x60, 0xbf, 0xdf, 0x63, 0xb9, 0x5c, 0x62, 0xb9, 0x5c, 0xc6, 0x34, 0xb1, 0xed, 0x76, 0x8b, 0xbe, 0x27, 0x2d, 0x7c, 0x9e, 0xe7, 0x91, 0x74, 0x17, 0x5c, 0x7d, 0x9c, 0x73, 0xf8, 0xbb, 0xbf, 0xfb, 0x3b, 0xfc, 0xee, 0x77, 0xbf, 0x8b, 0x64, 0xb7, 0x2c, 0xcb, 0xb0, 0x58, 0x2c, 0xf0, 0xfe, 0xfd, 0xfb, 0xc8, 0x31, 0x08, 0xd9, 0xdd, 0x6d, 0xdb, 0x46, 0xb8, 0x3e, 0x14, 0xa4, 0xa2, 0xa8, 0xb1, 0x58, 0xac, 0x60, 0x0c, 0x3d, 0xf7, 0x34, 0xa3, 0x7d, 0xf5, 0xdb, 0xb7, 0x6f, 0xb1, 0x5e, 0x2f, 0x61, 0x07, 0x83, 0xcd, 0x66, 0x43, 0x72, 0x0a, 0x01, 0xa4, 0x99, 0xc0, 0x6a, 0x3d, 0x87, 0x31, 0x84, 0x3a, 0x0c, 0x7d, 0x8f, 0xba, 0x2e, 0xa3, 0x2a, 0x00, 0x00, 0xca, 0x2a, 0x87, 0x31, 0xc4, 0x9e, 0x7c, 0x78, 0x78, 0x88, 0x9e, 0xcb, 0xc1, 0xa6, 0x31, 0x34, 0x6b, 0x24, 0x5b, 0x03, 0xb8, 0x60, 0x67, 0xe6, 0x30, 0xa1, 0x00, 0x71, 0xce, 0xc1, 0x92, 0x04, 0x75, 0x3d, 0xc3, 0xf1, 0xd0, 0xe2, 0xe1, 0x61, 0x83, 0xae, 0x1d, 0x90, 0xa6, 0x05, 0xd2, 0x8c, 0x6e, 0xc4, 0x24, 0xad, 0x60, 0x0d, 0x50, 0x14, 0x35, 0xee, 0xdf, 0x7e, 0x83, 0xfb, 0xfb, 0xb7, 0x30, 0xc6, 0xe0, 0x87, 0x1f, 0xfe, 0x88, 0xed, 0xae, 0x41, 0xd7, 0x19, 0x58, 0x4b, 0x8f, 0xab, 0x0d, 0x15, 0xf3, 0x34, 0x9b, 0xa1, 0xac, 0x16, 0xe0, 0x2c, 0xc1, 0x76, 0xbf, 0x89, 0x50, 0xb7, 0xd6, 0x16, 0xc3, 0x30, 0xc2, 0x39, 0xef, 0xfb, 0xcd, 0xc8, 0x2e, 0xf2, 0x7c, 0x7f, 0xc7, 0xcf, 0xe0, 0xdf, 0xbf, 0xfe, 0x57, 0xff, 0xd6, 0x3b, 0xd8, 0x95, 0x30, 0x5a, 0x62, 0x1c, 0x68, 0x65, 0xb1, 0x5a, 0x96, 0x58, 0xcc, 0xef, 0xf0, 0x0f, 0x7f, 0xff, 0xff, 0xa2, 0xed, 0x14, 0xba, 0x5e, 0x03, 0x8c, 0xe0, 0x7c, 0xc7, 0xe8, 0xa6, 0x32, 0xa3, 0x45, 0xd7, 0x0d, 0x48, 0x53, 0xf2, 0xe2, 0xb7, 0xda, 0xa3, 0x2d, 0x2c, 0x05, 0xe3, 0x1c, 0xce, 0x69, 0xe8, 0x91, 0x7b, 0x28, 0xae, 0xc0, 0xcd, 0xfa, 0x1d, 0x16, 0x8b, 0x3b, 0x8c, 0x8a, 0x62, 0x3d, 0xb3, 0xbc, 0x82, 0xc0, 0xc4, 0x59, 0xcb, 0xb2, 0x58, 0x40, 0x42, 0x43, 0x19, 0x6c, 0x77, 0x29, 0xfa, 0x33, 0x64, 0x4b, 0x9f, 0x8a, 0xc1, 0x38, 0xf6, 0x57, 0x2d, 0x3d, 0xaf, 0x1d, 0xce, 0xd7, 0x0f, 0x7e, 0x7e, 0x96, 0xae, 0x36, 0x0d, 0x40, 0x3a, 0xff, 0x77, 0x7e, 0x97, 0x7a, 0xe1, 0x36, 0x36, 0x2d, 0x12, 0xd7, 0x0a, 0xd1, 0x34, 0x73, 0xe1, 0x52, 0x0b, 0x1f, 0x1a, 0xee, 0xcb, 0x02, 0x38, 0x65, 0x4b, 0x4f, 0x13, 0xfd, 0xae, 0xc1, 0xf2, 0x97, 0x3b, 0xf7, 0x3f, 0x27, 0x3f, 0xfc, 0xfc, 0xeb, 0x2f, 0xa5, 0x58, 0x3f, 0xf7, 0x6f, 0xfe, 0xd4, 0x04, 0x7f, 0xf9, 0x1c, 0xd4, 0x99, 0xd7, 0xfa, 0x4b, 0x1d, 0xf0, 0x35, 0x78, 0xfd, 0xf2, 0xfd, 0x98, 0xae, 0x51, 0x2e, 0x9d, 0xbf, 0x2e, 0x21, 0xf1, 0xcb, 0xc6, 0x64, 0x6a, 0x83, 0x7d, 0xe9, 0xe1, 0xc1, 0x18, 0xf3, 0x48, 0xd6, 0x35, 0x12, 0x24, 0x5e, 0x78, 0xc1, 0x07, 0xbe, 0xc5, 0xe9, 0xf1, 0xe1, 0x65, 0x50, 0x94, 0x6e, 0x06, 0xe6, 0xae, 0x38, 0xdd, 0xc9, 0x68, 0x2f, 0x4b, 0x2e, 0x82, 0x0a, 0x4a, 0x0f, 0x5e, 0x16, 0xa6, 0xc0, 0x99, 0x44, 0x56, 0x54, 0xb8, 0xbb, 0x7d, 0x83, 0x9b, 0xf5, 0x1b, 0x18, 0x2d, 0xbc, 0xdb, 0x23, 0x49, 0xdd, 0x8c, 0xd5, 0xf1, 0x2c, 0x26, 0x23, 0x32, 0x40, 0x88, 0x0c, 0x79, 0x56, 0x63, 0x1c, 0xdc, 0x59, 0xc3, 0x74, 0x89, 0xe6, 0x58, 0x1f, 0x2c, 0x74, 0xf9, 0xfa, 0xcf, 0x5e, 0xaf, 0x35, 0x30, 0xb6, 0x07, 0xe3, 0x16, 0x42, 0x30, 0x8c, 0x43, 0x8f, 0x51, 0x75, 0xc4, 0xa3, 0x6a, 0x5a, 0x28, 0x45, 0xc1, 0x47, 0x92, 0x27, 0xe8, 0x3b, 0x85, 0xe7, 0xe7, 0x2d, 0xda, 0xa6, 0x43, 0x9a, 0x25, 0x58, 0xaf, 0x97, 0x10, 0x32, 0x44, 0x17, 0x5b, 0x68, 0xa5, 0xe1, 0x9c, 0x80, 0x14, 0x24, 0xa1, 0x13, 0x42, 0x40, 0x8f, 0x0a, 0x82, 0x71, 0x30, 0x61, 0x61, 0x19, 0xa3, 0x5d, 0xbf, 0x08, 0xcf, 0x27, 0x05, 0x43, 0x46, 0x7c, 0xab, 0xb1, 0x07, 0x5c, 0x02, 0x35, 0x92, 0x4b, 0xe6, 0xac, 0x2e, 0x71, 0xb3, 0x5e, 0xa2, 0xae, 0xeb, 0x58, 0xbb, 0xc2, 0x99, 0x15, 0xeb, 0x6b, 0x9a, 0x62, 0xf7, 0xe5, 0x0b, 0xb8, 0x55, 0x98, 0x57, 0x39, 0xf2, 0x1c, 0x58, 0x2c, 0x66, 0x18, 0xd4, 0x80, 0xd9, 0xbc, 0x42, 0x92, 0x08, 0x80, 0x4b, 0x1f, 0xa8, 0xa4, 0xb0, 0xdd, 0x6f, 0x61, 0x8d, 0xc0, 0xb1, 0x19, 0xd1, 0x77, 0x9a, 0xd0, 0x84, 0x84, 0xea, 0xf0, 0xd3, 0xd3, 0x13, 0xc5, 0xc6, 0x32, 0x0b, 0x19, 0x20, 0xba, 0x29, 0x1b, 0x38, 0x74, 0x28, 0x61, 0xf7, 0xc0, 0x18, 0xc3, 0x6a, 0xb5, 0xc2, 0x72, 0xb9, 0x84, 0x31, 0x06, 0xfb, 0xfd, 0x3e, 0x46, 0xbb, 0xad, 0xd7, 0xeb, 0x48, 0x46, 0x0b, 0xfb, 0xf3, 0x69, 0xdc, 0x67, 0xb8, 0x08, 0xa7, 0xc6, 0x31, 0x56, 0x29, 0xb2, 0x95, 0x1d, 0xc8, 0x8c, 0x26, 0x58, 0xb6, 0x32, 0xc6, 0xf0, 0xf9, 0xf3, 0xe7, 0x68, 0x5a, 0xc0, 0xf9, 0xc4, 0xd0, 0x1f, 0x88, 0x4c, 0xf3, 0xa9, 0x7c, 0x6b, 0x7a, 0x30, 0x75, 0x5d, 0x17, 0x59, 0x85, 0x5a, 0x6b, 0xca, 0xa7, 0xf6, 0xa4, 0xb6, 0xd9, 0x6c, 0x86, 0xb7, 0x6f, 0xdf, 0xe2, 0xee, 0xee, 0x2e, 0x4a, 0x75, 0x02, 0x91, 0x2f, 0xcf, 0x73, 0xac, 0x56, 0xab, 0x58, 0xc8, 0x83, 0x4f, 0xf7, 0x9b, 0x37, 0x6b, 0x2c, 0x97, 0xcb, 0x98, 0x5d, 0x3b, 0x8e, 0x63, 0x94, 0xc3, 0xd1, 0x8d, 0xc9, 0x51, 0xf9, 0x06, 0x63, 0x6a, 0x9b, 0x3a, 0x0c, 0x03, 0xca, 0x3c, 0xc7, 0xbb, 0x77, 0xef, 0x22, 0xbc, 0x96, 0xa7, 0x29, 0x5c, 0x51, 0x90, 0x12, 0xc0, 0xb3, 0xf1, 0x93, 0xcc, 0x60, 0xbd, 0x5e, 0x92, 0xbd, 0xa2, 0xd3, 0x28, 0x74, 0x81, 0xc3, 0x61, 0x07, 0xc6, 0x80, 0xbe, 0xcf, 0x90, 0x72, 0x89, 0xbc, 0x48, 0xd0, 0xf7, 0x06, 0x4f, 0x4f, 0x5f, 0xd0, 0x0f, 0xad, 0x97, 0x00, 0xe6, 0x60, 0x1a, 0x60, 0x90, 0xe8, 0xfb, 0xe3, 0x59, 0x2a, 0xda, 0x49, 0x93, 0x5e, 0xe1, 0x57, 0xbf, 0xfe, 0x35, 0x19, 0xe0, 0x78, 0xa8, 0xff, 0x78, 0x3c, 0x7d, 0x2f, 0x18, 0x43, 0x51, 0x9d, 0x0e, 0xe0, 0xe9, 0x9e, 0x2c, 0x14, 0xf7, 0xc7, 0xed, 0x0e, 0x52, 0xa6, 0x50, 0xca, 0x81, 0xb3, 0x04, 0x79, 0x2e, 0x51, 0xe4, 0x33, 0x64, 0x59, 0x0e, 0x6b, 0x80, 0xae, 0xd5, 0xde, 0x06, 0x75, 0xc0, 0xa3, 0xd8, 0x41, 0x2b, 0xf2, 0x96, 0x7f, 0xf8, 0xb2, 0xc5, 0x76, 0x73, 0x80, 0x15, 0x1c, 0x8e, 0xa5, 0x18, 0xb5, 0x05, 0x63, 0x1c, 0xf3, 0xd9, 0x0d, 0xe6, 0xcb, 0x3b, 0x80, 0x67, 0xe8, 0x7a, 0x83, 0x1f, 0x7f, 0xfc, 0x09, 0x4d, 0x73, 0xc4, 0x6e, 0xb7, 0xc7, 0xd0, 0x2b, 0x0f, 0x05, 0x33, 0x68, 0x65, 0xe2, 0x0a, 0x20, 0xec, 0xd8, 0xc2, 0xc4, 0x1b, 0x56, 0xdc, 0x96, 0x39, 0xfc, 0xf3, 0x7f, 0xfb, 0x03, 0xde, 0xbc, 0x79, 0x83, 0xaf, 0xbf, 0x2e, 0xb0, 0x58, 0x12, 0x62, 0xb4, 0xdf, 0x1d, 0xf1, 0xc3, 0x0f, 0x3f, 0xe0, 0xd3, 0xa7, 0x4f, 0x68, 0x0f, 0x8f, 0x68, 0xda, 0x03, 0x45, 0x6c, 0x0a, 0x1e, 0x7d, 0xf5, 0xd3, 0x94, 0x9f, 0xb9, 0x62, 0x69, 0x6d, 0x31, 0xf6, 0x0a, 0x00, 0x83, 0x49, 0x34, 0x18, 0x77, 0x50, 0x6a, 0x40, 0x92, 0x2c, 0xc0, 0x65, 0x42, 0xd3, 0x44, 0x52, 0x81, 0x81, 0x56, 0x23, 0x0e, 0x02, 0x0c, 0x09, 0x25, 0xb9, 0x31, 0xe6, 0x53, 0xa2, 0xdc, 0x19, 0xb9, 0x0c, 0xe0, 0x71, 0x2d, 0x13, 0xa0, 0xf8, 0x18, 0x15, 0x79, 0x65, 0x07, 0x7e, 0xcd, 0xfb, 0xfb, 0x92, 0xb8, 0x75, 0xf9, 0xb5, 0x60, 0x26, 0x33, 0x2d, 0x96, 0x67, 0x79, 0xe6, 0x31, 0x9e, 0xd2, 0x17, 0x62, 0xf0, 0x33, 0x7d, 0xb3, 0xe1, 0xe6, 0x67, 0x8b, 0x52, 0xd0, 0x64, 0x9f, 0x8c, 0x35, 0x9c, 0x0f, 0x5f, 0xb1, 0x11, 0x55, 0xbb, 0x2c, 0xc8, 0xd3, 0x69, 0x70, 0xba, 0x1b, 0x9d, 0xae, 0xf2, 0xe2, 0xa1, 0x6d, 0xd8, 0xd5, 0x55, 0xc3, 0x65, 0x33, 0x73, 0x15, 0x6e, 0xc7, 0xd4, 0x77, 0xdc, 0x4d, 0x42, 0x4c, 0xdc, 0xc4, 0x1e, 0x95, 0xbd, 0x0e, 0xd7, 0x7b, 0x27, 0xbe, 0x9f, 0xdb, 0x55, 0x5f, 0x92, 0xe2, 0x5e, 0xd3, 0x75, 0xff, 0x39, 0x30, 0xff, 0x35, 0x9f, 0x81, 0x9f, 0xdb, 0x8f, 0x5f, 0xc6, 0xdb, 0x5e, 0x4a, 0x1b, 0xc9, 0x18, 0xea, 0x3a, 0x03, 0xfe, 0xf2, 0x75, 0x5f, 0x7b, 0x1f, 0x4f, 0x13, 0x2f, 0x23, 0x3e, 0x4a, 0x14, 0xdb, 0x93, 0x3e, 0x9b, 0x7e, 0xbe, 0xc3, 0xff, 0xcf, 0xd9, 0x9b, 0x2c, 0x49, 0x92, 0x24, 0x59, 0x62, 0x4f, 0x36, 0xdd, 0x6c, 0x75, 0xf7, 0xf0, 0x58, 0x32, 0xbb, 0xf6, 0xe9, 0xee, 0xc1, 0x80, 0xfa, 0x84, 0x13, 0x2e, 0x73, 0xc0, 0xb9, 0xff, 0x00, 0x17, 0xfc, 0x24, 0xbe, 0x60, 0x0e, 0xc0, 0x7c, 0x00, 0x88, 0x66, 0x86, 0xba, 0x50, 0xd5, 0x55, 0x95, 0x11, 0x19, 0x11, 0xbe, 0xda, 0xa2, 0x9b, 0x6c, 0x38, 0xb0, 0x88, 0x98, 0x98, 0x9a, 0x9a, 0x67, 0x11, 0x92, 0xc8, 0x29, 0x22, 0x23, 0x3c, 0xdc, 0xcd, 0x4d, 0x55, 0x85, 0x99, 0x1f, 0xbf, 0x85, 0x79, 0x77, 0xa6, 0x26, 0x38, 0x7d, 0x7d, 0x1f, 0x4c, 0xb0, 0x62, 0xa4, 0x70, 0x8d, 0xc1, 0xdb, 0x40, 0xa2, 0xb5, 0xb4, 0x8e, 0xb3, 0x3a, 0x71, 0x72, 0xa4, 0x28, 0x30, 0xf4, 0x03, 0x94, 0xe0, 0xa8, 0xaa, 0x25, 0xb4, 0xf6, 0x29, 0xfd, 0x2f, 0x1a, 0xed, 0x90, 0x65, 0xad, 0x4b, 0x0d, 0x47, 0x3e, 0x90, 0x4f, 0x1b, 0x5e, 0x6a, 0xb8, 0x3a, 0x72, 0xa6, 0x73, 0x23, 0xb8, 0xf4, 0x18, 0xf5, 0x40, 0x24, 0x33, 0x4d, 0x21, 0x5d, 0x52, 0xd0, 0xe0, 0x41, 0xfe, 0xfd, 0x8a, 0x7c, 0x20, 0x1c, 0xd0, 0x34, 0x15, 0x96, 0xcb, 0x35, 0x6e, 0xdf, 0xbd, 0xa7, 0xfc, 0x92, 0x43, 0x0f, 0x6b, 0x3d, 0x59, 0x6f, 0xf3, 0x82, 0x5c, 0xdf, 0x8c, 0x87, 0x1e, 0x49, 0xa5, 0x64, 0x47, 0x0d, 0xad, 0x07, 0x08, 0xc9, 0xc0, 0x43, 0x36, 0x44, 0x51, 0x16, 0x60, 0x1e, 0xe0, 0xdc, 0xa5, 0x8f, 0xaa, 0x92, 0xb8, 0xb9, 0xd9, 0xe2, 0xe6, 0x66, 0x05, 0x21, 0x3c, 0x0e, 0x87, 0x97, 0xe4, 0x23, 0x52, 0x96, 0x45, 0x52, 0xd8, 0xd0, 0x7d, 0xe5, 0x30, 0x76, 0x1d, 0x0a, 0xc1, 0x50, 0xd7, 0x0d, 0x8c, 0x93, 0xd8, 0x6c, 0x96, 0xe8, 0x34, 0x43, 0x51, 0xf1, 0xf0, 0x8c, 0x1a, 0x18, 0xeb, 0xd0, 0x0f, 0x23, 0x0e, 0xc7, 0x01, 0x42, 0xd6, 0x28, 0xcb, 0x35, 0xd6, 0xdb, 0x15, 0x94, 0xac, 0xd0, 0x59, 0x5a, 0xb9, 0x0e, 0x1d, 0xa9, 0x0e, 0xac, 0xd3, 0x90, 0xf9, 0x03, 0x37, 0x0c, 0x03, 0x76, 0xbb, 0x5d, 0x32, 0x58, 0xf9, 0xd5, 0xaf, 0x7e, 0x95, 0xa6, 0xba, 0x28, 0x85, 0x8a, 0x6c, 0xf7, 0xa2, 0x28, 0x12, 0x09, 0x2d, 0xb1, 0x1e, 0xb3, 0xe9, 0xb5, 0x6d, 0xdb, 0xb3, 0x6c, 0xea, 0xdd, 0x6e, 0x87, 0x7e, 0x1c, 0xd1, 0x34, 0x0d, 0xb6, 0xb7, 0x14, 0xd4, 0x21, 0x3d, 0xc7, 0xc3, 0xc3, 0x03, 0xfe, 0xfa, 0xd7, 0xbf, 0xa6, 0xa6, 0xe2, 0xe3, 0xc7, 0x8f, 0x49, 0xcb, 0x7c, 0x3c, 0x0e, 0x59, 0xb2, 0xce, 0x49, 0x6b, 0x1c, 0xf7, 0x5b, 0xc6, 0xd0, 0xce, 0x98, 0xa6, 0xe9, 0xfe, 0x0c, 0xc2, 0x8a, 0x19, 0xb2, 0x11, 0x72, 0x61, 0x8c, 0xa5, 0x62, 0x1f, 0xf7, 0xda, 0x91, 0x2c, 0x16, 0xf3, 0x65, 0xa3, 0x90, 0xff, 0xfe, 0xfe, 0x1e, 0xf7, 0xf7, 0xf7, 0xa8, 0x2a, 0x99, 0x60, 0xee, 0x58, 0x58, 0x36, 0x9b, 0x4d, 0x7a, 0x4d, 0x7d, 0x6f, 0xd2, 0x9e, 0x3c, 0xef, 0xac, 0xa3, 0x0e, 0x33, 0xbe, 0x2f, 0x71, 0x42, 0x5e, 0xad, 0x56, 0xd8, 0xef, 0xf7, 0x89, 0x6b, 0x70, 0x7f, 0x7f, 0x97, 0x32, 0xc7, 0x8b, 0x52, 0x62, 0xb3, 0x59, 0x41, 0x4a, 0x72, 0x7f, 0x13, 0x92, 0x0c, 0xf7, 0x7f, 0xfc, 0xf1, 0x13, 0x8a, 0xa2, 0xc0, 0xcf, 0x5f, 0x3f, 0xe3, 0xcb, 0x97, 0x9f, 0x50, 0x55, 0x05, 0x96, 0x4b, 0x32, 0x66, 0x90, 0x7c, 0x81, 0x87, 0x87, 0x07, 0xb4, 0x1d, 0xdd, 0x78, 0x1e, 0x2a, 0x59, 0xc9, 0x96, 0x95, 0x4a, 0x79, 0xee, 0x4a, 0xa9, 0x44, 0xfe, 0x88, 0x0c, 0x73, 0x42, 0x4a, 0x8e, 0x01, 0x3a, 0x32, 0xc9, 0x1c, 0xc6, 0xb9, 0x13, 0xa4, 0x3d, 0x58, 0x87, 0x71, 0x3c, 0x80, 0x33, 0x62, 0xa5, 0xc2, 0x4b, 0xf4, 0xfd, 0x80, 0xc3, 0x9e, 0x8c, 0x11, 0xba, 0x41, 0x83, 0x33, 0xda, 0x4b, 0x1d, 0x8f, 0x5f, 0xf1, 0xb7, 0x9f, 0xbe, 0x9e, 0xde, 0xfb, 0xc5, 0x06, 0xbd, 0x69, 0xc1, 0x98, 0x85, 0x35, 0x1e, 0x4d, 0xb3, 0xc4, 0x0f, 0x9f, 0x7e, 0xc4, 0x76, 0x73, 0x87, 0xe7, 0xa7, 0x3d, 0xfe, 0xfc, 0xa7, 0xbf, 0xe2, 0xf3, 0x97, 0x3f, 0x05, 0x8e, 0x03, 0x39, 0x23, 0x95, 0x45, 0x0d, 0x30, 0x92, 0x9b, 0x10, 0x3b, 0x5f, 0x24, 0x6d, 0xad, 0xf7, 0xe4, 0x35, 0x0e, 0xf8, 0x34, 0xb9, 0x6b, 0x6b, 0xf0, 0xfd, 0xfb, 0x03, 0xf6, 0xbb, 0x16, 0x7f, 0xae, 0xff, 0x0a, 0xa5, 0x4a, 0x68, 0xad, 0xf1, 0xfc, 0xfc, 0x8a, 0xa7, 0xa7, 0x27, 0x78, 0xb3, 0x07, 0xe7, 0x40, 0x55, 0xd5, 0x81, 0xc9, 0x3e, 0xc0, 0x59, 0x1f, 0xc8, 0x2f, 0xd4, 0xa0, 0x70, 0x2e, 0x30, 0x06, 0xbb, 0x63, 0x63, 0x2c, 0xac, 0xd6, 0xe1, 0x35, 0x8c, 0x61, 0x6f, 0xbe, 0x85, 0xf3, 0x3d, 0xbe, 0x7f, 0x7b, 0x46, 0x5d, 0xdf, 0xe1, 0xfd, 0x87, 0x5b, 0x40, 0x56, 0xe8, 0xba, 0x11, 0xc5, 0xa2, 0x00, 0xfc, 0xb9, 0xd9, 0x4f, 0xb4, 0x5a, 0x65, 0x4c, 0x9f, 0xdd, 0x8f, 0x32, 0xb8, 0x47, 0x45, 0xd9, 0xda, 0x34, 0xf9, 0x6d, 0xca, 0x62, 0x8f, 0xc9, 0x73, 0x53, 0x68, 0xfe, 0xdc, 0x17, 0x5c, 0x5c, 0x9d, 0x6c, 0xe7, 0x60, 0xec, 0xac, 0x6c, 0xd2, 0x01, 0xcf, 0xfc, 0x55, 0xe3, 0x91, 0x29, 0xcb, 0x3b, 0x67, 0x63, 0x47, 0xa4, 0xad, 0x29, 0x56, 0xe7, 0x90, 0xb4, 0xf3, 0xa4, 0x16, 0x88, 0x05, 0x5b, 0x9d, 0xef, 0x62, 0x39, 0x93, 0x81, 0xb8, 0x44, 0xff, 0x8d, 0xae, 0xc3, 0xc9, 0x59, 0xf5, 0x5c, 0xa7, 0x1d, 0x0d, 0x9e, 0xe2, 0xe1, 0x3e, 0xad, 0x9d, 0x53, 0xc5, 0xc0, 0xfc, 0x4a, 0xe2, 0xed, 0x82, 0x3e, 0x2d, 0xfc, 0xd7, 0x8a, 0xeb, 0xff, 0x5f, 0xd9, 0xda, 0xb4, 0xc1, 0x9a, 0x16, 0x5c, 0x52, 0x75, 0x60, 0x56, 0xb6, 0x16, 0x0d, 0xaf, 0xde, 0xbc, 0xb6, 0xcc, 0xcd, 0x86, 0xae, 0xc4, 0xaf, 0x3f, 0x6d, 0x48, 0xa6, 0xf0, 0x7b, 0x34, 0xd0, 0x89, 0xac, 0xee, 0x68, 0xd0, 0x13, 0x15, 0x14, 0x5a, 0xeb, 0x44, 0x40, 0x8d, 0xe7, 0xb3, 0xb5, 0x05, 0xe0, 0x25, 0x98, 0x56, 0x70, 0xc1, 0xfc, 0x24, 0x0e, 0x32, 0x46, 0xe3, 0x8c, 0x24, 0x4a, 0x88, 0x94, 0x3e, 0xc1, 0xff, 0x0e, 0x50, 0xaa, 0xc0, 0x66, 0xbd, 0x45, 0xd7, 0xda, 0xa4, 0xc0, 0x99, 0x36, 0x7b, 0xf1, 0xf3, 0xf3, 0x86, 0x66, 0x4e, 0x76, 0x78, 0x38, 0xee, 0x70, 0x6c, 0xf7, 0x50, 0xc2, 0x42, 0x95, 0x2a, 0xa5, 0xa8, 0x71, 0x0e, 0xc0, 0x16, 0x70, 0x96, 0x98, 0xea, 0x4c, 0x78, 0x6c, 0xb7, 0x37, 0xf8, 0xf8, 0xf1, 0x87, 0x54, 0x0f, 0xea, 0xba, 0x84, 0xf5, 0x07, 0x38, 0xcb, 0x30, 0x2a, 0x0b, 0x29, 0x05, 0xca, 0xa2, 0x0a, 0x8d, 0x38, 0x21, 0xbb, 0xce, 0x90, 0x12, 0x85, 0x31, 0x9f, 0xee, 0xdb, 0x61, 0xe8, 0x61, 0xec, 0x88, 0x7e, 0x90, 0x60, 0x8e, 0x62, 0xc5, 0x59, 0xd3, 0x40, 0x70, 0x6a, 0x60, 0x97, 0x8b, 0x1a, 0x52, 0x30, 0xbc, 0xbe, 0x3c, 0x25, 0xde, 0xd2, 0x6a, 0xb5, 0xc2, 0x6a, 0xd9, 0x40, 0x49, 0x8e, 0xbe, 0x1f, 0x71, 0x3c, 0xd0, 0x40, 0xe7, 0xcc, 0x88, 0xa2, 0x94, 0x58, 0xaf, 0x97, 0xf0, 0xdc, 0x62, 0xb5, 0x59, 0xa2, 0xd7, 0x05, 0xca, 0xb2, 0x80, 0xf5, 0x06, 0x6d, 0xdb, 0x83, 0x4b, 0x06, 0x29, 0x80, 0x7e, 0x70, 0x70, 0x8e, 0x52, 0xd6, 0xfa, 0x6e, 0xc0, 0xd1, 0x69, 0x8c, 0xfe, 0x08, 0xa5, 0x28, 0xef, 0x80, 0xd0, 0x4f, 0x09, 0x19, 0xf3, 0xb0, 0xa3, 0xd3, 0x57, 0x9c, 0xce, 0x22, 0xc4, 0x1d, 0x0b, 0x5d, 0x64, 0x6d, 0xc7, 0x7d, 0x34, 0x19, 0x9e, 0xf4, 0xc9, 0xff, 0x3b, 0x4e, 0xe5, 0x11, 0x6e, 0x8f, 0x44, 0x2a, 0xe7, 0x1c, 0xd0, 0xb5, 0x24, 0x5d, 0x0a, 0x99, 0xae, 0x5c, 0x52, 0xf6, 0xb8, 0x6e, 0x87, 0xb4, 0x4f, 0x5e, 0xaf, 0xd7, 0x70, 0xce, 0xe1, 0xf9, 0xf9, 0x99, 0x8a, 0xfe, 0x76, 0x0b, 0x6b, 0x5f, 0x71, 0x73, 0x73, 0x93, 0x3e, 0x47, 0x08, 0x91, 0x0a, 0x78, 0xdc, 0x55, 0x3b, 0xe7, 0xf0, 0xe1, 0xc3, 0x87, 0x04, 0xdb, 0xc7, 0x1b, 0x2c, 0x16, 0xda, 0x58, 0x3c, 0x5f, 0x5e, 0x5e, 0x60, 0xad, 0x4d, 0x2b, 0x01, 0x00, 0x58, 0x2e, 0x2b, 0x18, 0xd3, 0x63, 0xb1, 0x28, 0xa1, 0x14, 0x0b, 0x7a, 0x48, 0x86, 0xfd, 0xfe, 0x39, 0x4c, 0xee, 0x37, 0xd0, 0xda, 0xa0, 0xaa, 0x96, 0x09, 0xfe, 0xfa, 0xfe, 0xfd, 0x39, 0x34, 0x01, 0x6b, 0x70, 0x39, 0xa2, 0x08, 0x79, 0xdd, 0xbb, 0xdd, 0x0e, 0x5c, 0x4a, 0xb4, 0x7d, 0x4f, 0x7a, 0xf9, 0xa6, 0xc1, 0x3f, 0xfc, 0xc3, 0x3f, 0xa0, 0x6a, 0x1a, 0x32, 0x4a, 0x79, 0x7c, 0xc4, 0xbb, 0x77, 0xef, 0x60, 0x9c, 0x83, 0x67, 0x0c, 0x77, 0xf7, 0xf7, 0x70, 0x66, 0x87, 0x9f, 0xfe, 0xfa, 0x40, 0xa4, 0x43, 0xb6, 0x02, 0xb3, 0x15, 0x14, 0x03, 0xf6, 0x87, 0x0e, 0xd5, 0x5a, 0xc1, 0x2b, 0x8f, 0x5d, 0xb7, 0x87, 0x6f, 0x3d, 0xbc, 0xe0, 0xf8, 0xc3, 0x3f, 0xff, 0x47, 0xac, 0xd7, 0x6b, 0x68, 0xad, 0xf1, 0xf8, 0xf8, 0x88, 0xf6, 0xe5, 0x05, 0xab, 0xe5, 0x0d, 0xa4, 0xaa, 0xc9, 0x40, 0x67, 0x34, 0x58, 0x6e, 0x16, 0x68, 0x9a, 0x25, 0xaa, 0xba, 0xc6, 0xeb, 0xee, 0x11, 0xbf, 0xf9, 0x0f, 0xbf, 0x85, 0xb5, 0x1e, 0xdf, 0x1f, 0x1f, 0xd1, 0xdc, 0x6c, 0xa0, 0xad, 0x43, 0xb9, 0xdd, 0xe0, 0xe5, 0xeb, 0x57, 0x1c, 0x77, 0xb4, 0xcf, 0x07, 0x2b, 0xe0, 0xb9, 0x84, 0x2c, 0x91, 0xd6, 0x23, 0xe3, 0x38, 0xc2, 0x1b, 0xa0, 0x28, 0xe3, 0xf4, 0x2e, 0x01, 0x2f, 0xa1, 0x0a, 0x9a, 0x68, 0x9d, 0x73, 0x58, 0x34, 0x2b, 0x4a, 0x96, 0x5b, 0xae, 0xb1, 0x68, 0xd6, 0xc4, 0x08, 0x7d, 0x7a, 0xc2, 0xe3, 0xd3, 0x77, 0x74, 0x5d, 0x0b, 0xd5, 0x28, 0x68, 0x4d, 0x0f, 0xe3, 0xaa, 0x5a, 0x83, 0x97, 0x2b, 0x8c, 0x5e, 0x82, 0x15, 0x02, 0x37, 0x1f, 0x3e, 0xe1, 0xeb, 0xd3, 0x06, 0x4c, 0xb9, 0x04, 0xe5, 0x1d, 0x06, 0xb2, 0x5a, 0x14, 0x62, 0x89, 0x72, 0xb1, 0x81, 0x31, 0x23, 0xb8, 0x10, 0x60, 0x42, 0xc0, 0xf9, 0x13, 0x4b, 0x9c, 0x34, 0xd5, 0x0c, 0x37, 0xb7, 0x9f, 0x70, 0x7b, 0x4b, 0x28, 0x8a, 0x2a, 0x44, 0x70, 0xb0, 0x7b, 0xc5, 0xa1, 0x3b, 0xc0, 0x42, 0x03, 0x10, 0xe4, 0xd5, 0xec, 0x3c, 0xaa, 0x5a, 0x40, 0x48, 0x01, 0x6d, 0x34, 0x1c, 0x73, 0xe0, 0x85, 0x04, 0x17, 0x6b, 0x8c, 0x63, 0x87, 0x6e, 0x3c, 0xc2, 0xb0, 0x01, 0x5e, 0x7a, 0x68, 0xce, 0xc0, 0x50, 0x80, 0xa9, 0x06, 0x95, 0x64, 0xa8, 0xea, 0x1b, 0x2c, 0x97, 0xf7, 0xf8, 0xed, 0xef, 0xff, 0x13, 0xee, 0x3f, 0xfc, 0x03, 0xda, 0x7e, 0x84, 0xe7, 0x0e, 0xac, 0x66, 0xe8, 0x8e, 0x0e, 0x5a, 0x0f, 0x59, 0xd3, 0x28, 0xc2, 0x21, 0x44, 0xa1, 0x2f, 0x9c, 0xc9, 0xd0, 0x10, 0x1b, 0x18, 0x7e, 0x6a, 0xee, 0xe2, 0xe1, 0x94, 0x17, 0xec, 0x9c, 0xc0, 0x93, 0x27, 0x18, 0xe6, 0x07, 0x70, 0x5e, 0x54, 0x63, 0x97, 0x9f, 0x13, 0x33, 0xa7, 0x07, 0xde, 0xe9, 0x10, 0x8f, 0xb0, 0x7f, 0xcc, 0x46, 0x0f, 0xda, 0xf7, 0xee, 0xd2, 0x49, 0x2b, 0x3f, 0x3c, 0xb5, 0x19, 0xe0, 0x44, 0x78, 0xcd, 0xde, 0xc3, 0x59, 0x0b, 0xe7, 0xc9, 0x3a, 0x73, 0x59, 0x36, 0xe8, 0xc7, 0x7e, 0x52, 0x50, 0x00, 0xc1, 0xa3, 0x9c, 0x8c, 0x11, 0x2c, 0x1b, 0x26, 0xfc, 0x54, 0x3c, 0x32, 0x78, 0x35, 0xaa, 0x43, 0x92, 0x0c, 0x71, 0x52, 0x14, 0xe7, 0x76, 0xd8, 0x79, 0x51, 0xca, 0x9b, 0x90, 0x88, 0x2a, 0xe6, 0xbe, 0xf1, 0x73, 0x6b, 0x8b, 0xbc, 0xf9, 0x8a, 0x59, 0xf1, 0x6f, 0x69, 0xd9, 0xdf, 0xfa, 0x7d, 0x2c, 0x38, 0x73, 0x4c, 0xfe, 0x6b, 0x88, 0x4b, 0x7e, 0x7d, 0x62, 0xc1, 0xcd, 0xaf, 0x5d, 0xae, 0x3c, 0xb8, 0x58, 0x81, 0x65, 0x12, 0xae, 0xfc, 0xdf, 0xc7, 0xd0, 0x95, 0x79, 0xbd, 0xbf, 0x9f, 0x28, 0x01, 0x58, 0xb0, 0xec, 0x05, 0x9c, 0xd3, 0x24, 0x8b, 0x0a, 0xe9, 0x62, 0x3c, 0xe8, 0x15, 0x89, 0xef, 0x12, 0xc2, 0xa0, 0xc0, 0xc8, 0x0c, 0xc8, 0xd9, 0x20, 0x39, 0x13, 0xe0, 0xac, 0x80, 0x10, 0x06, 0x2b, 0xde, 0xe0, 0x75, 0xdf, 0xe2, 0xcb, 0xdf, 0xfe, 0x1d, 0xc2, 0x03, 0x1f, 0x3f, 0xfd, 0x0a, 0xd6, 0x1e, 0xf1, 0xf3, 0xc3, 0xcf, 0xe8, 0x86, 0x27, 0x18, 0xdf, 0x12, 0xbf, 0x49, 0x16, 0xd0, 0x06, 0xb8, 0xbd, 0xff, 0x01, 0x65, 0x75, 0x8b, 0x2f, 0x0f, 0x07, 0xac, 0x96, 0x77, 0x38, 0xec, 0xbb, 0x10, 0x2b, 0x2c, 0xc9, 0x1f, 0x3f, 0x22, 0x10, 0x60, 0xf0, 0xee, 0xe4, 0xd3, 0x70, 0x5a, 0x1d, 0xf8, 0x30, 0xc5, 0x53, 0x83, 0xd7, 0x77, 0x0e, 0xde, 0x4a, 0x0c, 0xda, 0x40, 0x08, 0x8b, 0x45, 0xb3, 0xa6, 0x94, 0xc8, 0xee, 0x80, 0xaa, 0x6a, 0xe0, 0xac, 0x80, 0xe0, 0x1e, 0x4a, 0x12, 0x0a, 0xeb, 0xbd, 0xc7, 0xeb, 0xeb, 0x2b, 0xe5, 0xb9, 0x03, 0x58, 0xd4, 0x4d, 0x18, 0x14, 0x39, 0x94, 0x64, 0x68, 0xf7, 0x07, 0x1c, 0x77, 0x7b, 0x4a, 0xe8, 0x54, 0x0a, 0xc7, 0x7e, 0x00, 0x77, 0x12, 0x8c, 0x1b, 0x40, 0x1f, 0x61, 0x01, 0xac, 0x1a, 0xa0, 0x59, 0x70, 0x28, 0xc5, 0xf0, 0xf5, 0xb1, 0x05, 0xf3, 0x1e, 0xc7, 0x6e, 0xc0, 0xa8, 0x25, 0x36, 0x9b, 0x1b, 0x1c, 0x0e, 0xfb, 0x33, 0x4e, 0x5a, 0xb4, 0x92, 0xb5, 0xae, 0xc7, 0x6e, 0xdf, 0x62, 0xb7, 0x7f, 0xc6, 0x6e, 0x47, 0x93, 0xfb, 0xfd, 0xb2, 0xc6, 0x6a, 0xb5, 0x41, 0x59, 0x17, 0xc1, 0xec, 0xa8, 0x47, 0x55, 0x28, 0x70, 0xe6, 0x61, 0x9d, 0x05, 0x57, 0x6b, 0x48, 0xeb, 0xd1, 0x76, 0x1d, 0x8e, 0xc7, 0x01, 0x4c, 0x08, 0x6c, 0xaa, 0x02, 0x4a, 0x96, 0xe8, 0x86, 0x11, 0x35, 0x5f, 0xa2, 0xaa, 0x0a, 0x8c, 0x4c, 0xe1, 0xd8, 0xbe, 0xc2, 0x38, 0x0b, 0xf9, 0xfe, 0xfd, 0xfb, 0x74, 0x40, 0xc4, 0xc2, 0x1c, 0x75, 0xdb, 0xdf, 0xbf, 0x7f, 0x4f, 0x93, 0x65, 0x94, 0x98, 0xe5, 0xbb, 0x72, 0x0f, 0xd2, 0x74, 0x57, 0x55, 0x95, 0x0a, 0x69, 0x34, 0x52, 0xf9, 0xc3, 0x1f, 0xfe, 0x00, 0x63, 0x0c, 0x39, 0xaa, 0x39, 0x9a, 0xf0, 0xfb, 0x20, 0x19, 0xeb, 0xc7, 0x81, 0xbc, 0xb2, 0x3d, 0x4f, 0x3b, 0xf1, 0xdb, 0xdb, 0x5b, 0x34, 0x4d, 0x83, 0x77, 0xef, 0xde, 0xe1, 0xfb, 0xf7, 0xef, 0x78, 0x78, 0x78, 0x80, 0xf7, 0x22, 0x11, 0xf5, 0x48, 0x92, 0x54, 0xa4, 0x9d, 0x7b, 0x74, 0x48, 0x7b, 0x78, 0xa0, 0x82, 0x18, 0xdd, 0xb9, 0x62, 0x96, 0x77, 0x84, 0xc5, 0xe3, 0x7e, 0x38, 0xb2, 0xce, 0xf3, 0xd5, 0xc2, 0xf1, 0xf8, 0x9a, 0xe0, 0x68, 0x00, 0xd4, 0x95, 0x65, 0xd0, 0x75, 0xdb, 0xb6, 0xe9, 0xfb, 0xc4, 0x7d, 0x58, 0xfc, 0xf7, 0x63, 0xc8, 0xb0, 0x8d, 0x05, 0xf0, 0x70, 0x38, 0x40, 0x29, 0x85, 0x5f, 0xff, 0xfa, 0xd7, 0xf8, 0xf4, 0xe9, 0x13, 0x3e, 0x7e, 0xfc, 0x98, 0xf8, 0x07, 0xf1, 0xfd, 0x7c, 0x7d, 0x7d, 0x4d, 0xab, 0x89, 0xc5, 0x62, 0x01, 0xc9, 0x91, 0x22, 0x45, 0x87, 0x61, 0xc0, 0x5f, 0xfe, 0xfa, 0x67, 0x3c, 0x3c, 0x3c, 0xc0, 0x68, 0x3a, 0xfc, 0xd7, 0x77, 0x9b, 0xd0, 0x48, 0xd0, 0x03, 0xbd, 0xdb, 0x1d, 0xf0, 0x10, 0xec, 0x60, 0x8d, 0x76, 0xb0, 0xa1, 0xa1, 0xaa, 0xab, 0x05, 0x84, 0xaa, 0x21, 0xbb, 0x0e, 0x6d, 0xd7, 0xe3, 0xf9, 0xe5, 0x15, 0xee, 0x89, 0x1a, 0x8f, 0x43, 0xab, 0xf1, 0xf4, 0xf4, 0x04, 0xc1, 0x15, 0x8c, 0xe5, 0x58, 0x2d, 0xb7, 0xe8, 0x7b, 0x87, 0xb6, 0x35, 0x28, 0xeb, 0x4d, 0x72, 0x9d, 0x8b, 0x1e, 0xfd, 0x91, 0x10, 0xe8, 0x9c, 0xc3, 0x72, 0xb5, 0x0d, 0x72, 0xab, 0xb0, 0x77, 0x36, 0x1e, 0xe3, 0xe8, 0x30, 0xf4, 0xc1, 0xc2, 0xd7, 0x92, 0x01, 0x85, 0x92, 0x35, 0xa4, 0x2c, 0x30, 0x0e, 0x1a, 0x45, 0xd1, 0xa0, 0x2c, 0x6b, 0xf4, 0x7d, 0x8b, 0x56, 0x77, 0xe0, 0x82, 0x50, 0x9b, 0xed, 0xe6, 0x06, 0xeb, 0xd5, 0x2d, 0x56, 0xcb, 0x2d, 0xb0, 0x28, 0xb0, 0x68, 0xb6, 0xb8, 0xbf, 0xfb, 0xdf, 0xf0, 0xef, 0xff, 0xfe, 0xef, 0xf8, 0xb7, 0x7f, 0xfb, 0x37, 0x74, 0xed, 0x31, 0x18, 0x3f, 0x90, 0xb2, 0xa1, 0xef, 0x7a, 0xd4, 0x35, 0x79, 0xee, 0x8f, 0x83, 0x0d, 0xb2, 0xca, 0x06, 0x37, 0x37, 0x77, 0x78, 0xf7, 0xee, 0x5d, 0x78, 0x9d, 0xf7, 0xc9, 0x81, 0xd0, 0x39, 0xe2, 0x51, 0x50, 0x93, 0x51, 0x61, 0xb9, 0xd8, 0xe2, 0xcb, 0xdf, 0xfe, 0x0c, 0xad, 0x7b, 0x0c, 0xe3, 0x11, 0x7d, 0x3f, 0xa2, 0x28, 0x11, 0x7c, 0xe5, 0x39, 0x18, 0x07, 0xcc, 0x68, 0x13, 0xac, 0x9f, 0x94, 0x16, 0x10, 0xc1, 0xce, 0x91, 0x63, 0x51, 0x2e, 0xb1, 0x58, 0x2c, 0x69, 0xf2, 0x1f, 0x0d, 0x8e, 0xc7, 0x0e, 0x83, 0xd6, 0x10, 0x4a, 0x02, 0x0e, 0x30, 0x83, 0x4f, 0xcf, 0x03, 0xa1, 0x07, 0xe7, 0xc6, 0x2b, 0x74, 0x2f, 0x16, 0x90, 0x12, 0x59, 0x06, 0xb9, 0xb9, 0x98, 0x30, 0x73, 0x6a, 0x71, 0x4e, 0x66, 0x9a, 0x93, 0x25, 0xbd, 0x35, 0x25, 0xce, 0xa5, 0x7d, 0x51, 0xe1, 0x9b, 0xec, 0x5e, 0x83, 0x9b, 0xda, 0x7a, 0xbd, 0x9e, 0x9d, 0xbe, 0xf3, 0x38, 0xe3, 0xdc, 0x10, 0x25, 0xea, 0xb9, 0x63, 0x13, 0x3f, 0xd5, 0x59, 0x5f, 0x23, 0x90, 0x4d, 0x57, 0x05, 0x69, 0x02, 0x33, 0xa7, 0xbd, 0x62, 0xbe, 0x86, 0x98, 0xca, 0xe3, 0xae, 0xd9, 0xa3, 0x26, 0xff, 0xfa, 0x99, 0x62, 0x9f, 0x9b, 0xe1, 0xe4, 0xbb, 0xff, 0xf3, 0xe9, 0x7d, 0x1e, 0x4e, 0x9f, 0x83, 0xcd, 0xaf, 0x41, 0xe6, 0x73, 0xab, 0x93, 0x5f, 0xda, 0xd7, 0xc7, 0xcf, 0x2b, 0x8a, 0xea, 0xaa, 0x21, 0xce, 0x89, 0x23, 0x70, 0xf2, 0x7e, 0x3f, 0xc9, 0xf2, 0x58, 0x22, 0x23, 0x46, 0xc9, 0xdf, 0xb9, 0xe7, 0x3e, 0xfb, 0xc5, 0xd7, 0xc3, 0x18, 0x03, 0xf7, 0x08, 0x6e, 0x71, 0x16, 0x9e, 0x87, 0x44, 0x3e, 0x90, 0xbd, 0x72, 0x72, 0x94, 0x63, 0x64, 0x9b, 0x0b, 0x67, 0x61, 0x4c, 0x9f, 0x59, 0x72, 0x93, 0xd9, 0x49, 0x0c, 0x43, 0x79, 0x7a, 0x7a, 0xc2, 0xfe, 0xd0, 0xd2, 0xf0, 0xe7, 0x2c, 0x18, 0xf3, 0x28, 0x4b, 0x05, 0x21, 0x38, 0xac, 0xf3, 0x10, 0x21, 0xf5, 0x31, 0x0e, 0x53, 0x43, 0x3f, 0xa2, 0x1f, 0x0f, 0x69, 0x7d, 0x3a, 0xbd, 0x87, 0xe8, 0xba, 0xda, 0x37, 0xfd, 0x0c, 0xea, 0xaa, 0xc1, 0x30, 0x74, 0x18, 0x87, 0x21, 0xc4, 0x02, 0xbb, 0x53, 0x94, 0x29, 0xb7, 0x18, 0x07, 0x0f, 0x21, 0x1c, 0x3c, 0x22, 0xda, 0xc5, 0x13, 0x11, 0xd3, 0x5a, 0x5a, 0xfb, 0x82, 0x05, 0xd7, 0x4c, 0x7e, 0xca, 0xa1, 0x00, 0xa3, 0x0f, 0xc6, 0x0d, 0x46, 0xdd, 0x41, 0x0a, 0xe0, 0xe6, 0x76, 0x85, 0x1f, 0x3f, 0xbd, 0xc3, 0xed, 0xdd, 0x12, 0x1e, 0x06, 0xed, 0x71, 0x8f, 0x7a, 0x2d, 0x30, 0xf4, 0x1a, 0xc3, 0x40, 0xeb, 0xc2, 0x42, 0xd5, 0x84, 0xac, 0x7a, 0x22, 0x0c, 0xfe, 0xf0, 0xc3, 0x0f, 0x41, 0x7e, 0x6b, 0xf0, 0xf2, 0xf2, 0x02, 0x1e, 0x52, 0x1f, 0x57, 0xab, 0x15, 0x9c, 0x37, 0x68, 0x54, 0x09, 0xa9, 0xca, 0x10, 0x4e, 0x13, 0x7c, 0x2c, 0x8c, 0x0d, 0xa9, 0x75, 0x2d, 0x0c, 0x28, 0x39, 0x50, 0x6b, 0x47, 0xeb, 0x8d, 0x20, 0x3b, 0x36, 0xb6, 0x47, 0xdf, 0x13, 0xc1, 0x7a, 0xe8, 0x04, 0xc0, 0x2c, 0x0a, 0x41, 0xca, 0x22, 0xf6, 0x2f, 0xff, 0xbc, 0xf2, 0x31, 0xae, 0x6d, 0xb9, 0x24, 0x92, 0x5a, 0xec, 0x74, 0x23, 0xcb, 0xbc, 0x0a, 0x53, 0x68, 0xf4, 0xe5, 0x8e, 0xd3, 0xba, 0xf3, 0x3a, 0xc9, 0xd6, 0xa2, 0x27, 0x7c, 0xd7, 0x75, 0x49, 0x8a, 0xb6, 0xd9, 0x6c, 0xb0, 0x5a, 0xad, 0x28, 0xd3, 0xda, 0x5a, 0xa8, 0x20, 0xd9, 0x1a, 0x03, 0x3b, 0xf3, 0xdd, 0xe6, 0x36, 0xb9, 0xce, 0x45, 0xf2, 0x5a, 0xec, 0xa4, 0xba, 0xae, 0xc3, 0xeb, 0xeb, 0x31, 0x41, 0xf8, 0x11, 0xe6, 0x8f, 0xe4, 0x37, 0xc6, 0x18, 0x7e, 0xf8, 0xe1, 0x07, 0xec, 0x76, 0xbb, 0x24, 0x05, 0x33, 0xc6, 0xe0, 0xf9, 0xf9, 0x19, 0x7f, 0xfb, 0xdb, 0xdf, 0xa0, 0xb5, 0x4e, 0xfb, 0xee, 0x58, 0xd4, 0xa3, 0x2e, 0x3c, 0x6a, 0x12, 0xeb, 0x5a, 0x25, 0x87, 0x1f, 0x00, 0x38, 0x1c, 0x0e, 0x29, 0xbf, 0x9b, 0x48, 0x3f, 0x2e, 0x19, 0xeb, 0x50, 0xa2, 0x5a, 0x77, 0xd6, 0x14, 0x44, 0x9b, 0x56, 0x29, 0xc9, 0x58, 0x20, 0x16, 0xf8, 0x18, 0x2d, 0x1a, 0x5f, 0xef, 0xb7, 0x6f, 0xdf, 0xd2, 0x0a, 0x22, 0x1e, 0x96, 0xb7, 0xb7, 0xb7, 0xf0, 0xde, 0x66, 0x56, 0x7f, 0xf6, 0x34, 0x19, 0x3b, 0x42, 0x0b, 0x9e, 0xf6, 0xaf, 0xa8, 0xab, 0x45, 0x7a, 0x4f, 0x8c, 0xb1, 0x89, 0xac, 0xc2, 0x18, 0xc3, 0xf3, 0xe3, 0x53, 0xea, 0xe2, 0x8d, 0x25, 0x62, 0xdc, 0x60, 0x4e, 0x5d, 0xad, 0xd1, 0x16, 0xcd, 0x72, 0x85, 0xe3, 0xf1, 0x88, 0xdf, 0xff, 0xfe, 0xf7, 0xd8, 0xde, 0xdc, 0xe1, 0x77, 0xbf, 0xfb, 0x1d, 0xc0, 0xe9, 0xf5, 0xea, 0xee, 0x84, 0x90, 0x4c, 0xed, 0x53, 0xb5, 0xd6, 0x38, 0x1c, 0x83, 0xe5, 0xac, 0x21, 0x2f, 0x65, 0x6b, 0x3c, 0xb4, 0xf6, 0x18, 0x87, 0x90, 0xc6, 0xc7, 0xc8, 0x4b, 0x5d, 0xca, 0x02, 0x85, 0x6a, 0xd2, 0x7b, 0x3b, 0x8e, 0x3d, 0x9c, 0x37, 0xe8, 0x74, 0x9b, 0xde, 0x73, 0x72, 0x29, 0x2b, 0xc0, 0x59, 0x01, 0xef, 0x24, 0x8c, 0xf6, 0xe0, 0xfc, 0x99, 0x4c, 0x8b, 0x86, 0x16, 0x9f, 0x3f, 0x7f, 0xc6, 0x5f, 0xfe, 0xf2, 0x67, 0xb4, 0x6d, 0x8b, 0xcd, 0x66, 0x83, 0xbb, 0x3b, 0x8a, 0x63, 0x8c, 0x4d, 0xc6, 0x62, 0xb1, 0x4a, 0xe6, 0x39, 0xa7, 0x03, 0xb5, 0x4e, 0xf7, 0x6a, 0x1e, 0x2d, 0x1b, 0x63, 0x1c, 0xbb, 0xc3, 0x23, 0xba, 0xee, 0x88, 0x6f, 0xdf, 0xbf, 0xe0, 0xe1, 0xf1, 0x33, 0x18, 0x37, 0x58, 0xae, 0x2a, 0x08, 0x09, 0x0c, 0xc3, 0x11, 0xcc, 0x2e, 0x28, 0x71, 0xcc, 0x51, 0x77, 0xac, 0xb5, 0x85, 0x77, 0x02, 0x9c, 0x95, 0x90, 0xb2, 0xc2, 0x1f, 0x7e, 0xf7, 0x9f, 0xf0, 0xee, 0xee, 0x13, 0x9c, 0xab, 0x20, 0x8a, 0x15, 0x54, 0x51, 0xa3, 0xb7, 0x1a, 0xa2, 0x90, 0x24, 0x6b, 0xe3, 0xeb, 0x33, 0xf8, 0x72, 0x2a, 0x69, 0x8a, 0x0d, 0x65, 0x6c, 0x16, 0xa2, 0x84, 0x32, 0x77, 0xc3, 0x7a, 0x0b, 0xb2, 0xcd, 0x5d, 0x1a, 0xf3, 0xc9, 0x7d, 0x2e, 0xac, 0x65, 0xce, 0xc0, 0x24, 0xe5, 0xde, 0x87, 0xdd, 0x79, 0xdc, 0xa1, 0xc7, 0x42, 0x18, 0x0f, 0x98, 0x7c, 0xfa, 0x8b, 0x45, 0x3d, 0x9f, 0x70, 0xf3, 0xef, 0x19, 0x9b, 0xe9, 0xa2, 0x28, 0x30, 0x6a, 0x73, 0x01, 0xe7, 0xe6, 0x9f, 0x1b, 0x9f, 0x93, 0x29, 0x5c, 0x1a, 0xbf, 0x76, 0x55, 0xf2, 0xd9, 0x09, 0x37, 0x4e, 0xa4, 0xb9, 0x07, 0xc6, 0x1c, 0xd9, 0xef, 0x94, 0x51, 0x7d, 0x69, 0xda, 0x12, 0x1b, 0xf3, 0x6b, 0x10, 0x7c, 0x64, 0xd1, 0xbf, 0x45, 0xbe, 0x9b, 0xb2, 0xac, 0x7f, 0xc9, 0x1f, 0x7d, 0xee, 0xef, 0xae, 0x35, 0x0b, 0xf9, 0x4a, 0xe1, 0xef, 0xd9, 0xbf, 0xcf, 0xfd, 0x7e, 0xca, 0x9e, 0x7f, 0x8b, 0x5d, 0x3f, 0x57, 0xe0, 0x4b, 0x19, 0x77, 0x22, 0x0e, 0x2e, 0xa8, 0x34, 0xac, 0x07, 0x79, 0xa6, 0x3b, 0xc0, 0xda, 0x31, 0x04, 0xd4, 0x38, 0xc0, 0x0f, 0x30, 0x66, 0x07, 0xad, 0x5f, 0xe1, 0xcc, 0x11, 0xce, 0x0f, 0x90, 0xf0, 0x18, 0x8c, 0x85, 0x35, 0x00, 0xbc, 0x24, 0x8f, 0x7c, 0x6b, 0x21, 0x4b, 0x85, 0xa6, 0xa9, 0xc0, 0x95, 0x09, 0xb6, 0xd0, 0x23, 0xac, 0x13, 0x58, 0x2f, 0xef, 0x51, 0x14, 0xef, 0xe0, 0x4c, 0x0d, 0x86, 0x0a, 0x0e, 0xc7, 0x34, 0xd0, 0x9c, 0xee, 0x55, 0xa4, 0x01, 0x33, 0x72, 0x3d, 0xa6, 0x2c, 0xff, 0x74, 0x7d, 0xf4, 0x67, 0x3c, 0x3f, 0x7f, 0xc7, 0xf1, 0xf0, 0x00, 0x30, 0x22, 0xb8, 0x02, 0x06, 0xd6, 0x8d, 0x60, 0xce, 0xc3, 0x5a, 0xc0, 0x68, 0x07, 0xe7, 0x08, 0xee, 0x07, 0x38, 0x8c, 0x19, 0xd1, 0x0f, 0x44, 0x9c, 0x6b, 0xaa, 0x26, 0xf9, 0x54, 0x30, 0x0f, 0x74, 0xfd, 0x31, 0x4d, 0xe8, 0x52, 0x72, 0xc8, 0xc2, 0x62, 0xb5, 0x68, 0xb0, 0xde, 0xac, 0x50, 0xd7, 0x0a, 0xa5, 0x62, 0xe0, 0xc2, 0xc3, 0x9a, 0x11, 0xc6, 0x8c, 0x60, 0xe5, 0x07, 0xe8, 0xd1, 0x62, 0x1c, 0x89, 0xa4, 0x26, 0xb8, 0x84, 0x94, 0x15, 0x44, 0xc8, 0xc8, 0x88, 0xab, 0x4e, 0x72, 0xc0, 0x6c, 0x51, 0xd5, 0x25, 0x36, 0x9b, 0x15, 0x94, 0x12, 0x30, 0x76, 0x84, 0xb4, 0x3e, 0x9d, 0x57, 0xbd, 0x1e, 0x92, 0x37, 0xc3, 0x38, 0x8e, 0x44, 0xf8, 0x16, 0x4b, 0x58, 0x4b, 0x26, 0x55, 0x5c, 0x56, 0x28, 0xcb, 0x06, 0x52, 0xd5, 0xc4, 0xd9, 0x09, 0x2a, 0x13, 0xba, 0xd0, 0x1a, 0xaa, 0x60, 0x50, 0xd2, 0x43, 0xbe, 0xff, 0xf0, 0x2e, 0x3d, 0xa4, 0xb1, 0x20, 0xc5, 0xc3, 0xa9, 0xac, 0x88, 0x18, 0xd7, 0xf5, 0x47, 0x1c, 0x8e, 0x54, 0x70, 0xea, 0xa6, 0xc4, 0x4a, 0xd2, 0xb4, 0xfb, 0xe1, 0xc3, 0xfb, 0x24, 0x3b, 0x8b, 0x1d, 0x3b, 0x69, 0x97, 0xfb, 0x14, 0x4d, 0xf9, 0xfa, 0xfa, 0x8a, 0xdd, 0x61, 0x4f, 0xae, 0x41, 0xef, 0xdf, 0xa7, 0xe2, 0x04, 0x00, 0x5f, 0xbf, 0x7e, 0x45, 0x55, 0x55, 0x69, 0x47, 0x1f, 0x1b, 0x88, 0x98, 0x3e, 0xb3, 0x5c, 0x6e, 0xcf, 0x8a, 0x71, 0x24, 0xc4, 0xc5, 0xaf, 0x11, 0x19, 0xeb, 0x51, 0xf3, 0x1e, 0x21, 0xa8, 0xdb, 0xdb, 0x5b, 0x54, 0x55, 0x85, 0xfb, 0xfb, 0xfb, 0x54, 0xd0, 0x73, 0x37, 0xae, 0x48, 0xd0, 0xdb, 0xef, 0x9f, 0x53, 0x27, 0x1f, 0x9b, 0x81, 0xed, 0x76, 0x8b, 0xc5, 0x62, 0x81, 0xc3, 0xe1, 0x80, 0xa6, 0x59, 0x9f, 0xe9, 0xd9, 0xe3, 0x9e, 0xbe, 0xae, 0x6b, 0x2c, 0x97, 0xcb, 0xd4, 0x50, 0x44, 0xb6, 0x7d, 0xdc, 0x43, 0x2f, 0x16, 0x0b, 0xdc, 0xdf, 0xdf, 0xc3, 0x5a, 0x8b, 0xc7, 0xc7, 0xc7, 0xb4, 0x7b, 0xa7, 0x22, 0xee, 0x53, 0x66, 0xf8, 0xc3, 0xc3, 0xcf, 0x01, 0x82, 0x15, 0x94, 0x48, 0x54, 0xd4, 0x58, 0x34, 0x2b, 0x18, 0x43, 0xaf, 0x55, 0xc9, 0x06, 0x77, 0x77, 0xef, 0xc1, 0x20, 0xf0, 0xf9, 0xf3, 0x67, 0x1c, 0x8f, 0x1d, 0x56, 0xab, 0x35, 0xa4, 0x04, 0xf6, 0xbb, 0x03, 0x76, 0xbb, 0x31, 0xa5, 0x79, 0x39, 0x4b, 0x61, 0x18, 0x65, 0x49, 0xaf, 0x8d, 0x02, 0x6f, 0x96, 0x49, 0x46, 0x58, 0xd6, 0x2b, 0xec, 0xf6, 0x1a, 0xff, 0xed, 0x7f, 0x7c, 0x49, 0x70, 0xe5, 0xb2, 0x5c, 0x40, 0x4a, 0x7d, 0x86, 0xbc, 0xc4, 0x07, 0x4a, 0x6b, 0x0d, 0x0b, 0x16, 0x18, 0xe8, 0xa4, 0x37, 0xf5, 0x8e, 0x6e, 0x24, 0xfa, 0x95, 0xc3, 0xab, 0x22, 0x38, 0xa2, 0x71, 0x8c, 0x43, 0xe6, 0x29, 0xee, 0x18, 0xbc, 0xe7, 0xb0, 0xbe, 0x80, 0x60, 0x32, 0xb8, 0x47, 0x01, 0xe3, 0x40, 0x7b, 0x5c, 0xce, 0x48, 0xb7, 0x3d, 0x8e, 0xd4, 0x2c, 0x2e, 0x9a, 0x15, 0x7e, 0xf5, 0xab, 0x15, 0xd6, 0xeb, 0x8f, 0xe8, 0xba, 0x63, 0x8a, 0x3a, 0x8d, 0xeb, 0x91, 0xf8, 0x1e, 0x59, 0x6b, 0x93, 0x5f, 0x39, 0x35, 0x2c, 0x86, 0x60, 0xe0, 0x10, 0xa7, 0x1a, 0x39, 0x1c, 0x75, 0x55, 0xa1, 0x2c, 0xd6, 0x78, 0x7f, 0x7b, 0x83, 0xb6, 0xdb, 0x27, 0x8f, 0x85, 0xfd, 0xe1, 0x11, 0xce, 0x8e, 0x21, 0xc0, 0x01, 0x50, 0xdc, 0x05, 0xfd, 0x6d, 0x56, 0x34, 0x2d, 0x20, 0x14, 0x3d, 0x8c, 0xcb, 0xc5, 0x0d, 0x6e, 0x6e, 0x3f, 0xc0, 0x58, 0x05, 0x63, 0x25, 0x1c, 0x53, 0x50, 0x4c, 0x82, 0x0b, 0x0e, 0xed, 0x86, 0xc4, 0x35, 0x99, 0x16, 0x8a, 0x93, 0xac, 0xc8, 0xa4, 0xe4, 0xa4, 0xa9, 0x4b, 0xd9, 0x9c, 0xa3, 0xd9, 0x35, 0x92, 0xd9, 0x9c, 0x06, 0xfa, 0xcc, 0x02, 0x37, 0x73, 0x42, 0x7b, 0x6b, 0x22, 0x63, 0xd9, 0x64, 0xeb, 0xbd, 0xc7, 0x30, 0xf6, 0x67, 0x86, 0x21, 0xb9, 0x16, 0x78, 0xca, 0x70, 0x8f, 0x0d, 0xd3, 0xc9, 0x76, 0xd6, 0x64, 0xda, 0x67, 0x96, 0xed, 0xea, 0xdd, 0xe4, 0x57, 0x9f, 0xc1, 0xa5, 0xe7, 0x8c, 0xf7, 0xaa, 0xac, 0x67, 0x1b, 0x82, 0xfc, 0x73, 0xe7, 0xa6, 0xce, 0x53, 0xf3, 0x32, 0x6f, 0x5e, 0x73, 0xcd, 0x87, 0xfe, 0x82, 0x25, 0x3e, 0xb3, 0x63, 0xff, 0xa5, 0xdf, 0xcf, 0x15, 0xda, 0x6b, 0xc5, 0x7c, 0xce, 0xb4, 0xe7, 0x2d, 0x56, 0xfb, 0x35, 0x87, 0xb9, 0x6b, 0x7f, 0x7f, 0x4d, 0x07, 0xff, 0xf7, 0x34, 0x03, 0xd1, 0xdb, 0x1f, 0x70, 0xc1, 0x87, 0x5f, 0x9c, 0x42, 0x68, 0x5c, 0x94, 0x8d, 0xc5, 0xc8, 0x5c, 0x16, 0xf2, 0xc6, 0xa3, 0xe5, 0x2c, 0x35, 0x64, 0xb2, 0xe0, 0x18, 0x4c, 0xf4, 0x1c, 0x97, 0xa8, 0x4b, 0x22, 0x2f, 0x5b, 0xd0, 0x14, 0x49, 0x1e, 0x0d, 0x2a, 0xe5, 0xee, 0xa5, 0xf5, 0x82, 0x93, 0xf0, 0x8e, 0x43, 0xc9, 0x32, 0xc8, 0x58, 0x25, 0xe0, 0x4f, 0xf7, 0x27, 0x67, 0x0c, 0x0e, 0x48, 0xd3, 0xff, 0x35, 0xeb, 0x60, 0x26, 0x6a, 0x28, 0x55, 0x83, 0xb3, 0x02, 0xda, 0x8e, 0xd0, 0xa3, 0x81, 0x90, 0x00, 0xbc, 0x00, 0xe0, 0xa0, 0x94, 0x80, 0x14, 0x0c, 0xd6, 0xd2, 0x70, 0x03, 0x00, 0x52, 0x95, 0xe0, 0xc2, 0x83, 0x73, 0x07, 0xef, 0x0d, 0x74, 0xb0, 0x53, 0xe5, 0x61, 0x4d, 0x76, 0x7b, 0x47, 0x05, 0xb7, 0x2c, 0x4b, 0x2c, 0x57, 0xc0, 0x6a, 0x45, 0x03, 0xd5, 0xd0, 0xb5, 0x78, 0x7e, 0x7e, 0xc4, 0xd0, 0xf5, 0xa8, 0x6a, 0xe2, 0x8f, 0x3d, 0xb7, 0x21, 0x5e, 0x5c, 0x70, 0x28, 0x51, 0x40, 0xca, 0x32, 0xac, 0x33, 0x04, 0x84, 0x90, 0x14, 0xd8, 0xc5, 0x00, 0x2e, 0x04, 0x54, 0x59, 0xa1, 0xac, 0x4a, 0x94, 0x75, 0x05, 0xe7, 0x0c, 0xda, 0xc3, 0x00, 0x1d, 0x38, 0x62, 0x5d, 0xf0, 0x6e, 0xe1, 0x8a, 0x2c, 0xcb, 0x85, 0x90, 0x60, 0x62, 0x85, 0xa2, 0x58, 0x90, 0x73, 0xa8, 0xb7, 0x10, 0x8c, 0x53, 0x74, 0xaa, 0x19, 0x09, 0xf5, 0xab, 0x0a, 0x14, 0x4c, 0xc1, 0xc3, 0x62, 0xe8, 0x07, 0x0c, 0xdd, 0x00, 0x27, 0x19, 0x64, 0x14, 0xf7, 0xe7, 0x86, 0x2c, 0xf1, 0xa1, 0x5b, 0xaf, 0xd7, 0x09, 0x0e, 0x89, 0x0b, 0x7e, 0xf2, 0xad, 0xa6, 0xc8, 0xb7, 0x3f, 0xfe, 0xf1, 0x8f, 0xb8, 0xb9, 0xb9, 0x49, 0x05, 0x34, 0xbf, 0xc9, 0x9c, 0x73, 0xf8, 0xcb, 0x5f, 0xfe, 0x82, 0xa7, 0xa7, 0x27, 0xbc, 0xee, 0x77, 0x58, 0x2e, 0x97, 0x60, 0xa1, 0x70, 0x76, 0x03, 0x91, 0xaa, 0xb6, 0x8b, 0x35, 0x76, 0xbb, 0x5d, 0x82, 0xd4, 0x57, 0xab, 0x15, 0x18, 0x63, 0x29, 0xce, 0x73, 0xb7, 0xfb, 0x7c, 0xa1, 0x6f, 0xcf, 0xf5, 0x94, 0x31, 0x83, 0xdb, 0x39, 0x87, 0xae, 0xeb, 0x92, 0xa5, 0x6b, 0x0c, 0x89, 0x8f, 0x13, 0x52, 0x94, 0xa0, 0xc4, 0x46, 0x23, 0x4e, 0x01, 0x91, 0x90, 0x16, 0x25, 0x5d, 0x9c, 0x73, 0x6c, 0xb7, 0xdb, 0xb4, 0xa7, 0xce, 0x21, 0xf8, 0x5c, 0xeb, 0x1e, 0xd1, 0x87, 0xbe, 0xed, 0xd0, 0x54, 0x35, 0x36, 0x2b, 0xda, 0x1f, 0xff, 0xf4, 0xd3, 0x4f, 0xf8, 0xe9, 0xa7, 0x9f, 0x92, 0xa6, 0xfe, 0xb7, 0xbf, 0xfd, 0x2d, 0x5e, 0x5f, 0x5f, 0xd1, 0x1d, 0xc9, 0x73, 0x5c, 0x0f, 0xe4, 0x6d, 0xde, 0xb7, 0x1d, 0xf6, 0x7a, 0x87, 0x3a, 0xc4, 0xb6, 0x16, 0x45, 0x85, 0xbe, 0x1b, 0xb1, 0xdf, 0x1f, 0x61, 0xad, 0x23, 0x19, 0x95, 0x73, 0x90, 0xb2, 0x86, 0x1e, 0x38, 0x86, 0xa1, 0xc7, 0xee, 0x75, 0x40, 0xd7, 0x1a, 0x48, 0x0e, 0x28, 0xc5, 0x30, 0xf4, 0x1c, 0xef, 0xde, 0xff, 0x3e, 0xa8, 0x0a, 0xe8, 0xb5, 0x31, 0x41, 0xd2, 0x30, 0x55, 0x51, 0x9c, 0xec, 0xeb, 0x4b, 0x0b, 0x63, 0x19, 0x9a, 0xe5, 0x82, 0x50, 0x0d, 0x59, 0xe3, 0xe5, 0xb5, 0x47, 0x59, 0xd4, 0x90, 0x85, 0xc2, 0xf3, 0x8b, 0x86, 0x94, 0x91, 0x48, 0xa2, 0x4e, 0x9e, 0xd3, 0x1c, 0x90, 0xca, 0x41, 0x30, 0xca, 0x18, 0xf6, 0x9e, 0x48, 0x89, 0xa4, 0xd3, 0x14, 0xc1, 0xeb, 0x19, 0x18, 0x7a, 0x8a, 0xcd, 0xa4, 0x7d, 0x85, 0x6e, 0x0f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x97, 0x09, 0xd3, 0xb3, 0x4b, 0x10, 0x74, 0xa7, 0x3b, 0x14, 0x43, 0x91, 0xf2, 0x82, 0x19, 0x14, 0xa4, 0xe0, 0x20, 0x93, 0x76, 0x0e, 0xc6, 0x1a, 0x1c, 0x0e, 0x1a, 0xc6, 0x0c, 0x10, 0x92, 0x63, 0xb5, 0xfa, 0x80, 0xed, 0x96, 0xa5, 0x86, 0x02, 0x90, 0x64, 0xde, 0xd0, 0x9a, 0xe4, 0xaa, 0x26, 0x85, 0x0a, 0xef, 0x59, 0x09, 0x06, 0x42, 0x6a, 0x3c, 0xf7, 0x94, 0xa8, 0xec, 0x01, 0x6b, 0x18, 0x1c, 0xa8, 0xdb, 0x6f, 0x75, 0x8f, 0x51, 0x0b, 0xd4, 0x8b, 0x5b, 0xbc, 0xff, 0x20, 0x21, 0x54, 0x81, 0xa7, 0xe7, 0xaf, 0x30, 0x16, 0x28, 0xeb, 0x1a, 0x7e, 0x24, 0xdf, 0xf6, 0x98, 0x63, 0x4e, 0xbf, 0x12, 0x14, 0xae, 0x64, 0x81, 0xc7, 0xa7, 0x3d, 0x96, 0xcb, 0x0e, 0x5c, 0x72, 0x78, 0xa6, 0xc0, 0x25, 0x27, 0x63, 0x0d, 0x25, 0xe1, 0x8d, 0x83, 0xf6, 0x3e, 0xc1, 0xd9, 0xf4, 0xcc, 0xb8, 0x89, 0x9b, 0x95, 0x80, 0xb5, 0x7e, 0x22, 0x27, 0xe3, 0x61, 0x7f, 0xe9, 0x70, 0x1a, 0xa0, 0xe2, 0x34, 0xc7, 0x93, 0xdb, 0x1c, 0x15, 0xc1, 0xd3, 0x3e, 0x3a, 0x4f, 0xeb, 0x4a, 0xa4, 0xb2, 0x6c, 0x87, 0x3d, 0x9d, 0x42, 0x73, 0x52, 0xd4, 0xe9, 0xb0, 0x66, 0x59, 0xa8, 0x07, 0x50, 0x96, 0x2a, 0xb1, 0xc2, 0x9d, 0x33, 0x17, 0x07, 0x67, 0x9c, 0x5e, 0x68, 0x97, 0xe9, 0xc2, 0xae, 0xd5, 0x63, 0x1c, 0x2d, 0x8c, 0xe1, 0x00, 0x9f, 0xf3, 0x17, 0xf7, 0x21, 0x8d, 0xcc, 0xa3, 0xeb, 0x8f, 0x17, 0x92, 0x2b, 0x21, 0x19, 0xe5, 0x3c, 0x87, 0xc9, 0x64, 0x2a, 0x47, 0x9a, 0xd3, 0x25, 0xe7, 0xda, 0xfc, 0xf3, 0x09, 0x14, 0x57, 0x9b, 0x9c, 0x6b, 0x1a, 0xec, 0xe9, 0xfb, 0x33, 0xb7, 0x2a, 0x98, 0x33, 0xb6, 0x99, 0x2b, 0xbe, 0xd7, 0xa6, 0xf6, 0xbf, 0xb7, 0xc8, 0x9e, 0xae, 0xef, 0xc9, 0xb0, 0x6b, 0x7a, 0x0d, 0x4e, 0xaf, 0x7f, 0x26, 0xed, 0xce, 0x9a, 0x33, 0xbd, 0xfd, 0xb4, 0x51, 0xc8, 0x11, 0xa0, 0x39, 0x28, 0xfe, 0x24, 0x8b, 0xf3, 0xc4, 0x0b, 0x61, 0x8c, 0xa6, 0x59, 0xcf, 0xd2, 0x44, 0xcb, 0x42, 0xbc, 0x29, 0x98, 0x80, 0x31, 0x94, 0xbb, 0xe0, 0x9c, 0x83, 0xf3, 0x06, 0xc3, 0x40, 0xae, 0x95, 0x36, 0x18, 0x1c, 0x09, 0x46, 0x56, 0xac, 0xce, 0x6a, 0x38, 0x63, 0xc0, 0x19, 0x05, 0xad, 0x08, 0xe9, 0x01, 0xcb, 0x02, 0x6a, 0x59, 0x81, 0xa9, 0x25, 0xe0, 0x4a, 0x58, 0xbf, 0x4b, 0x6b, 0xa1, 0x39, 0xb7, 0xc2, 0x6b, 0x06, 0x3d, 0x49, 0x85, 0x01, 0x85, 0x42, 0x2d, 0x50, 0x16, 0x4b, 0x98, 0xae, 0x27, 0x72, 0xad, 0x88, 0x72, 0x4e, 0x17, 0xa2, 0x45, 0x23, 0xa9, 0xed, 0xe4, 0x5f, 0xa0, 0x0a, 0x06, 0x0f, 0x09, 0x33, 0x6a, 0x80, 0x0f, 0x80, 0x33, 0x50, 0x4a, 0x62, 0xb1, 0x2c, 0xb0, 0x6c, 0xaa, 0x70, 0xd6, 0x33, 0x58, 0xbb, 0xc7, 0xfe, 0xf5, 0x01, 0x0f, 0xdf, 0x06, 0x78, 0xcf, 0xa0, 0x02, 0x5f, 0x48, 0x09, 0x05, 0x58, 0xfa, 0x59, 0x9c, 0x05, 0x84, 0x90, 0xb4, 0x3e, 0xf1, 0x1c, 0x5a, 0x3b, 0xca, 0x44, 0xc7, 0x88, 0x87, 0x87, 0x47, 0x42, 0x2d, 0xcd, 0x00, 0xad, 0x49, 0x96, 0xfc, 0xf4, 0xf4, 0x8c, 0x61, 0xe8, 0xf1, 0xf2, 0xfa, 0x84, 0xdb, 0xed, 0x5d, 0x18, 0x6e, 0x24, 0x44, 0x49, 0xbb, 0xf1, 0xa2, 0x22, 0x92, 0xb6, 0x14, 0x0a, 0xb2, 0x20, 0x8f, 0x94, 0x61, 0x18, 0x52, 0x72, 0x61, 0x37, 0x0e, 0x18, 0x8c, 0x86, 0xb2, 0x23, 0x58, 0x47, 0x29, 0x9a, 0xde, 0x1a, 0x58, 0x33, 0xa2, 0x10, 0x1c, 0x72, 0xb1, 0x68, 0xd2, 0xc5, 0x8f, 0x53, 0x85, 0xd6, 0x00, 0xe7, 0x0c, 0xcf, 0xcf, 0x4f, 0xf8, 0xf1, 0xc7, 0x1f, 0xb1, 0x5e, 0xdf, 0x40, 0x08, 0x1e, 0x52, 0xb2, 0x38, 0x8c, 0xd1, 0x21, 0x0c, 0xbe, 0x3c, 0xd3, 0x77, 0xc7, 0x87, 0xae, 0x6d, 0x5b, 0x32, 0xf6, 0xb8, 0xbf, 0xc7, 0xc7, 0x8f, 0x1f, 0xf1, 0xe1, 0xd3, 0x47, 0x2c, 0x16, 0x0b, 0x70, 0x49, 0x56, 0xaa, 0x42, 0xd1, 0x4e, 0xdb, 0xf6, 0xf4, 0x75, 0xa2, 0xb4, 0x2c, 0x4e, 0x0a, 0x71, 0xe7, 0x5d, 0x96, 0x48, 0xbe, 0xe7, 0x71, 0x72, 0x8f, 0xd3, 0x5b, 0x9c, 0x88, 0xf3, 0x7d, 0xe3, 0xed, 0xed, 0x2d, 0x36, 0x9b, 0x0d, 0xbe, 0x7c, 0xf9, 0x72, 0xb6, 0x1a, 0xc8, 0xa7, 0xe7, 0xb8, 0x03, 0xa4, 0x9b, 0x9d, 0x9d, 0x3d, 0xd8, 0x91, 0x3f, 0x90, 0x6b, 0x07, 0x63, 0x02, 0x5c, 0x34, 0x0f, 0x88, 0x1a, 0x42, 0x21, 0x04, 0xfe, 0xf4, 0xc7, 0xff, 0x37, 0xc1, 0xf1, 0xd1, 0xcf, 0x7e, 0xbb, 0xdd, 0xe2, 0xfe, 0xfe, 0x1e, 0xfb, 0xfd, 0x9e, 0x98, 0xd6, 0xfe, 0xe4, 0xec, 0x16, 0x3f, 0x27, 0x7e, 0x3c, 0x3f, 0xbf, 0xe2, 0xf1, 0xe1, 0x15, 0x65, 0x59, 0x83, 0x73, 0x01, 0x67, 0x39, 0x9a, 0x66, 0x85, 0x45, 0xb3, 0x84, 0xb5, 0x1e, 0xed, 0xe0, 0xf0, 0xf2, 0xdc, 0x41, 0x6b, 0x8b, 0xf5, 0xf2, 0x03, 0x6e, 0xb7, 0x25, 0x0a, 0x55, 0xa1, 0xaa, 0x1a, 0xfc, 0xf8, 0xa9, 0xc6, 0xbe, 0x37, 0x69, 0xb2, 0xd2, 0x96, 0xa0, 0x70, 0x63, 0x1d, 0x78, 0x6b, 0x20, 0x84, 0xc7, 0xa2, 0x79, 0x87, 0x97, 0xfd, 0x0e, 0x4c, 0x48, 0x3c, 0x3c, 0x8c, 0x58, 0x2c, 0x0b, 0x8c, 0xa3, 0x44, 0xdb, 0x51, 0xbe, 0xf7, 0xed, 0x66, 0x05, 0xa3, 0x43, 0x3e, 0x43, 0x70, 0x47, 0xf3, 0x7e, 0x3c, 0x91, 0xb2, 0x14, 0x19, 0xf9, 0xd0, 0xce, 0xdc, 0xc0, 0x59, 0x1e, 0x8c, 0x17, 0x82, 0x89, 0x8a, 0x08, 0x9e, 0xde, 0x9e, 0x0e, 0x82, 0xd8, 0x10, 0x78, 0x70, 0x78, 0xc6, 0x51, 0xd6, 0xcb, 0x13, 0xe1, 0xcb, 0x10, 0x0b, 0x9a, 0xa2, 0x62, 0x3b, 0x58, 0xc3, 0xc0, 0x98, 0x46, 0x55, 0x15, 0xa8, 0x17, 0x2b, 0x8a, 0x69, 0x3c, 0x12, 0xda, 0x23, 0x15, 0xf1, 0x1a, 0x5e, 0x5e, 0xbb, 0xc0, 0x9d, 0x68, 0x50, 0xd5, 0x32, 0x35, 0x0a, 0x6d, 0xef, 0xd0, 0xf6, 0x03, 0x24, 0xd7, 0x29, 0x6c, 0xc4, 0x7b, 0x11, 0xa2, 0x0d, 0x11, 0xa6, 0x43, 0x46, 0x81, 0x2b, 0xb6, 0x42, 0xa9, 0x24, 0xf8, 0xb2, 0x40, 0xdf, 0x0f, 0x78, 0x79, 0x39, 0xc0, 0x8c, 0x06, 0xf0, 0x0c, 0x85, 0xe0, 0xb0, 0x81, 0xef, 0x93, 0x17, 0xba, 0x38, 0x49, 0x18, 0x0d, 0xf4, 0xa3, 0x87, 0x70, 0x16, 0x42, 0x30, 0x78, 0xce, 0x60, 0xbc, 0x83, 0xe3, 0x16, 0xda, 0x58, 0x2c, 0x16, 0xab, 0xb4, 0xa7, 0x8d, 0xdc, 0x88, 0xa9, 0x97, 0xfa, 0x89, 0xc0, 0xc6, 0x2e, 0x76, 0xc3, 0x73, 0xfa, 0xe6, 0x33, 0xe3, 0x0c, 0x63, 0xfe, 0x2e, 0xe3, 0x92, 0x6b, 0xba, 0xeb, 0xd3, 0xf7, 0x0d, 0x9f, 0xe7, 0xce, 0x59, 0xee, 0xce, 0xe1, 0xcd, 0x70, 0x96, 0x1c, 0x72, 0x9e, 0x06, 0x9c, 0x20, 0x4c, 0x0b, 0x73, 0x50, 0x78, 0xfc, 0x1e, 0x52, 0xf2, 0x49, 0xd2, 0xd5, 0xa5, 0x25, 0xed, 0xd4, 0x52, 0x76, 0xca, 0xfe, 0x7f, 0xeb, 0xbf, 0xf8, 0xdc, 0xe6, 0xcf, 0x54, 0xae, 0xda, 0xb9, 0xe6, 0x2f, 0x7f, 0x6a, 0x58, 0xae, 0xcb, 0xd1, 0xae, 0xc5, 0xd9, 0xbe, 0x65, 0x18, 0x33, 0x27, 0xb1, 0x9a, 0x93, 0xa9, 0xbd, 0x65, 0x16, 0x33, 0x27, 0xcf, 0x9a, 0x36, 0x16, 0xb9, 0xe3, 0xdc, 0x2f, 0x69, 0xee, 0xaf, 0xb9, 0xcc, 0x51, 0x78, 0x90, 0x4d, 0x26, 0x2e, 0xd1, 0x99, 0xed, 0xc4, 0xb1, 0x60, 0x60, 0x36, 0x5e, 0x1b, 0x1b, 0x76, 0xd4, 0x91, 0x63, 0x31, 0xc2, 0xf9, 0xe0, 0x19, 0xc1, 0x09, 0x5d, 0x34, 0xc6, 0xa0, 0xdf, 0xbf, 0x00, 0xcc, 0x41, 0x14, 0x02, 0x4a, 0x09, 0x68, 0xdd, 0x41, 0x4a, 0x0e, 0xa3, 0x3d, 0xac, 0xf3, 0x09, 0x49, 0x92, 0xac, 0x80, 0x77, 0x0a, 0x1c, 0x65, 0x46, 0xfc, 0x3c, 0xe5, 0x0b, 0xc4, 0xef, 0xcf, 0xb9, 0xbd, 0x4a, 0x38, 0xa4, 0x9f, 0xa1, 0x40, 0x59, 0x2c, 0x60, 0xea, 0x15, 0x86, 0x91, 0xe4, 0x6a, 0xce, 0x3a, 0x08, 0x49, 0xa4, 0xbf, 0x51, 0xf7, 0xe1, 0xa6, 0x3f, 0x29, 0x51, 0x3c, 0x74, 0x2a, 0xea, 0x42, 0x00, 0xb2, 0x28, 0x01, 0x28, 0x54, 0xa5, 0xa0, 0x90, 0xaa, 0x42, 0xc0, 0x79, 0xe2, 0x6d, 0x2d, 0x9b, 0x12, 0xa6, 0x20, 0x74, 0x75, 0xbd, 0xbc, 0x41, 0x5d, 0x2d, 0x31, 0x74, 0x06, 0xdf, 0xbf, 0x3f, 0xe2, 0xf9, 0xf1, 0x05, 0xf5, 0xfb, 0x1b, 0x3a, 0x6b, 0x98, 0x04, 0xe3, 0x64, 0x50, 0x65, 0x6c, 0x8f, 0xae, 0x37, 0xb0, 0xd6, 0xa3, 0xaa, 0x37, 0x64, 0x48, 0xe3, 0x01, 0xaf, 0x2d, 0x8c, 0x05, 0x8c, 0x65, 0x50, 0x45, 0x8d, 0xed, 0xcd, 0x3b, 0x58, 0x0b, 0x14, 0x55, 0x8d, 0xa6, 0x59, 0xa2, 0x28, 0x2b, 0x88, 0x50, 0xc4, 0xab, 0x8a, 0xa4, 0xda, 0xce, 0x7a, 0x78, 0x27, 0xa1, 0x0a, 0x52, 0xde, 0x0c, 0x66, 0x80, 0x85, 0xa5, 0xf0, 0x18, 0xe7, 0x20, 0x1d, 0xbd, 0x5f, 0x65, 0x43, 0xde, 0x19, 0x45, 0x29, 0x20, 0xeb, 0xba, 0x4e, 0x6f, 0xb4, 0x4b, 0xf2, 0x1d, 0x93, 0x7e, 0x1f, 0x13, 0xc3, 0x62, 0xcc, 0x66, 0x24, 0xc0, 0xc5, 0x1d, 0xe1, 0xe3, 0xe3, 0x63, 0xda, 0x1f, 0xdf, 0xdf, 0xdf, 0xe3, 0xee, 0x8e, 0x1c, 0xd3, 0x18, 0x63, 0xf8, 0xf9, 0xe7, 0x9f, 0x29, 0x67, 0x56, 0x8f, 0x78, 0x7a, 0x7a, 0x42, 0x1f, 0x76, 0x9b, 0xda, 0x86, 0x3c, 0xed, 0x86, 0xc8, 0x76, 0x31, 0xf0, 0x23, 0xb2, 0xd4, 0xe3, 0xfe, 0x6f, 0xbf, 0x3f, 0x84, 0x5d, 0xfa, 0x6b, 0x9a, 0x8e, 0xd7, 0xeb, 0x75, 0x82, 0x62, 0x23, 0x7b, 0x3d, 0xa6, 0xac, 0x45, 0x77, 0xb5, 0x68, 0xd3, 0x1a, 0x65, 0x1f, 0xc9, 0xad, 0x27, 0x40, 0xaf, 0x27, 0xdd, 0xfa, 0x3e, 0x35, 0x07, 0x91, 0xa9, 0x1c, 0x63, 0x48, 0x29, 0x79, 0x6d, 0x73, 0xa6, 0xa9, 0x8f, 0x3b, 0xbd, 0x08, 0xcf, 0xc7, 0x70, 0x98, 0xe8, 0x88, 0x17, 0xd7, 0x01, 0x52, 0xca, 0x64, 0x19, 0x3b, 0xf5, 0xb9, 0x8f, 0x37, 0xf0, 0xf1, 0x78, 0xc4, 0x6e, 0xdf, 0xa1, 0xeb, 0x7a, 0x2c, 0x9a, 0x15, 0x6e, 0x6f, 0xdf, 0xa1, 0xae, 0x96, 0x50, 0xb2, 0x41, 0x53, 0x93, 0xde, 0x7f, 0xbd, 0xdd, 0xe2, 0x70, 0x38, 0xc2, 0x68, 0x87, 0xaa, 0x5a, 0x82, 0x33, 0x01, 0x3d, 0xfa, 0xd0, 0x2d, 0x56, 0x58, 0x2e, 0xab, 0xec, 0x9a, 0xf5, 0x18, 0x47, 0xc0, 0x7a, 0x82, 0x4c, 0x85, 0x2c, 0xd0, 0x6b, 0x0e, 0x6b, 0x4b, 0xf4, 0x3d, 0x87, 0xf7, 0x25, 0xb4, 0x96, 0xd8, 0x6e, 0xef, 0xd0, 0x6b, 0xba, 0x7e, 0xc3, 0xb8, 0x9b, 0x49, 0xa4, 0x62, 0x34, 0x85, 0x73, 0x86, 0x51, 0x5b, 0x58, 0xc7, 0xc0, 0xb8, 0x22, 0xf2, 0x86, 0x64, 0x27, 0x29, 0x99, 0xe7, 0x50, 0x35, 0x75, 0xc3, 0x46, 0x03, 0x7d, 0xa7, 0x31, 0x0e, 0x01, 0xbe, 0xb7, 0xb4, 0x47, 0x17, 0xb5, 0x4f, 0xab, 0x12, 0x9a, 0x3c, 0x01, 0xc1, 0x39, 0x98, 0x57, 0x60, 0x9e, 0x14, 0xdd, 0x7a, 0x04, 0x8c, 0xee, 0x43, 0xa3, 0xb6, 0x80, 0x94, 0x16, 0x7d, 0xdf, 0xe2, 0xe9, 0xb0, 0xc3, 0x62, 0xb1, 0x82, 0x77, 0x0c, 0x7d, 0x67, 0x61, 0xcc, 0x40, 0x3b, 0x6e, 0xef, 0xc1, 0x39, 0x7d, 0xcd, 0xb2, 0x70, 0xe0, 0x9c, 0x6c, 0x14, 0x89, 0x57, 0x10, 0x42, 0x24, 0x39, 0xb1, 0xf2, 0x39, 0x53, 0x60, 0x5c, 0xc3, 0xda, 0x01, 0x8c, 0x79, 0x34, 0xcd, 0x1d, 0xee, 0xee, 0x2c, 0xb8, 0x28, 0xd0, 0x75, 0x07, 0x08, 0xd1, 0x41, 0xeb, 0x30, 0x39, 0x72, 0x05, 0xa5, 0x18, 0x2c, 0xe3, 0xe1, 0x6b, 0x09, 0xac, 0xb7, 0x77, 0xa8, 0xca, 0x25, 0xac, 0x13, 0x21, 0xf4, 0x85, 0x9c, 0xe6, 0xac, 0x67, 0xb0, 0xde, 0x61, 0x30, 0x63, 0xda, 0x13, 0xeb, 0xd1, 0x40, 0x67, 0x3b, 0x65, 0x22, 0xd8, 0x11, 0x77, 0x40, 0x49, 0x71, 0x0e, 0xbb, 0x7a, 0xda, 0x67, 0x3b, 0xeb, 0xaf, 0xc2, 0xa7, 0x24, 0x03, 0x7b, 0xdb, 0x18, 0xe5, 0xda, 0x81, 0x7e, 0xad, 0x51, 0xf0, 0xc8, 0xed, 0x3f, 0x19, 0xba, 0xae, 0x3d, 0xfb, 0xfe, 0x53, 0xab, 0xd3, 0x69, 0x21, 0x99, 0xee, 0x31, 0xbd, 0x71, 0x57, 0x0b, 0x7a, 0x3e, 0x21, 0x5e, 0x23, 0xf5, 0x95, 0xaa, 0x38, 0x0b, 0xfd, 0xf8, 0x7b, 0x61, 0x64, 0x4c, 0x56, 0x07, 0x39, 0xdb, 0xfc, 0x2c, 0x8f, 0x7c, 0x22, 0x85, 0xba, 0x24, 0x14, 0xf2, 0xbf, 0xc3, 0xbc, 0x06, 0x7f, 0xb7, 0xb4, 0xed, 0xda, 0xae, 0xff, 0x1a, 0x9c, 0xce, 0x99, 0xb8, 0xba, 0x02, 0x88, 0xf7, 0x09, 0x92, 0xd3, 0x9d, 0xcf, 0x7b, 0x25, 0x72, 0x23, 0xe4, 0xf2, 0xcd, 0xfb, 0x63, 0x2a, 0x8b, 0xbc, 0xb0, 0x8e, 0x55, 0xd1, 0x5f, 0xc0, 0xc1, 0x07, 0xb4, 0x25, 0x86, 0x08, 0xb9, 0x30, 0xd2, 0x0a, 0x4e, 0x10, 0x7b, 0x44, 0xcd, 0xa8, 0x68, 0x9a, 0x10, 0x64, 0x22, 0xc0, 0x24, 0x87, 0x77, 0x54, 0xd0, 0xc9, 0x6e, 0xd5, 0x81, 0x29, 0x01, 0xb0, 0x02, 0x60, 0x0e, 0xc6, 0xf6, 0x18, 0x46, 0x92, 0x9a, 0x9a, 0x85, 0x49, 0xc5, 0xd5, 0x18, 0x07, 0x59, 0x5c, 0x36, 0x34, 0xf9, 0x3d, 0xc8, 0x98, 0xbb, 0xbe, 0x3e, 0x62, 0x0c, 0xb0, 0x0c, 0x52, 0x94, 0x50, 0xb2, 0x02, 0x42, 0x88, 0x15, 0x85, 0x2a, 0xc9, 0x44, 0xfc, 0xb4, 0xd6, 0x06, 0xf8, 0x82, 0xc3, 0x5a, 0x0d, 0x63, 0x07, 0x14, 0x25, 0x47, 0x53, 0xd7, 0xd8, 0xed, 0x5e, 0x69, 0x78, 0xa8, 0x0a, 0xd4, 0xa5, 0x44, 0xdd, 0x48, 0x94, 0x8a, 0x50, 0x34, 0xe7, 0x0c, 0xfa, 0xbd, 0x86, 0x94, 0x0a, 0x4d, 0xb9, 0x80, 0x14, 0x25, 0x0e, 0xbb, 0x01, 0x5f, 0x3e, 0x7f, 0xc3, 0x4f, 0x7f, 0xfb, 0x8a, 0xfd, 0xcb, 0x01, 0xff, 0x7c, 0xf7, 0x2b, 0x8c, 0x63, 0x0f, 0x78, 0x0d, 0x86, 0x0a, 0x0c, 0x1e, 0xe3, 0xe0, 0x08, 0xc1, 0xd2, 0xe1, 0xde, 0x83, 0x85, 0x73, 0x0c, 0x9c, 0x15, 0x80, 0xf7, 0xb0, 0x06, 0x90, 0x55, 0x81, 0xe5, 0x62, 0x01, 0x6b, 0x35, 0xca, 0xb2, 0x86, 0xaa, 0x6b, 0x28, 0xd5, 0x40, 0x88, 0x12, 0x42, 0x96, 0x10, 0x82, 0xfe, 0xbf, 0xd3, 0x07, 0x30, 0x1e, 0x1d, 0xe6, 0xc6, 0xb4, 0x52, 0x14, 0x8a, 0x03, 0xcc, 0xa3, 0xa6, 0x2c, 0x1c, 0x14, 0x05, 0xc7, 0x7a, 0xb5, 0x85, 0x87, 0x86, 0x8c, 0xfb, 0xdc, 0xe8, 0xe8, 0x96, 0x77, 0xba, 0x71, 0xb2, 0x8d, 0x8c, 0xee, 0xc5, 0x62, 0x91, 0xf6, 0xe2, 0x5d, 0xd7, 0xe1, 0xe5, 0xe5, 0x25, 0x99, 0xb6, 0x7c, 0xf8, 0xf0, 0x01, 0x45, 0x51, 0xe0, 0xf9, 0xf9, 0x39, 0x59, 0x97, 0xc6, 0x42, 0xb7, 0xdf, 0xef, 0xf1, 0xf9, 0xf3, 0x67, 0x30, 0x21, 0x70, 0x73, 0x73, 0x83, 0x45, 0xb1, 0x4c, 0xbb, 0xe4, 0xae, 0xeb, 0x52, 0x42, 0x5a, 0x24, 0xd8, 0x45, 0xf3, 0x9a, 0xbb, 0xbb, 0x7b, 0x7c, 0xfb, 0xf6, 0x2d, 0xe9, 0xdf, 0x23, 0x31, 0x2d, 0x5e, 0xf8, 0x58, 0x2c, 0xa2, 0x2b, 0xdb, 0x6a, 0xb5, 0xc2, 0x6e, 0xb7, 0xc3, 0xd7, 0xaf, 0x5f, 0x71, 0x77, 0x77, 0x87, 0xdb, 0xdb, 0x5b, 0x22, 0x25, 0x84, 0xef, 0x11, 0x49, 0x67, 0x11, 0x7e, 0x5f, 0x2c, 0xca, 0x33, 0x93, 0x99, 0xdc, 0x93, 0x3a, 0x16, 0xe6, 0xba, 0xae, 0xd1, 0x75, 0x5d, 0xd2, 0x74, 0xc7, 0x26, 0xa1, 0xef, 0x7b, 0xf4, 0x87, 0xf6, 0x2c, 0xd8, 0xe6, 0xfb, 0xf7, 0xef, 0xd0, 0x5a, 0xe3, 0x9f, 0xfe, 0xe9, 0x9f, 0xf0, 0x9b, 0x5f, 0xfd, 0x3a, 0x85, 0xca, 0x68, 0xad, 0xe1, 0x8c, 0x05, 0x07, 0x4b, 0x52, 0x89, 0xdd, 0xcb, 0x2b, 0x7e, 0xf8, 0xe1, 0x47, 0xc0, 0x73, 0xdc, 0xdf, 0x7f, 0x40, 0x5d, 0x2d, 0xf1, 0xfc, 0xbc, 0x47, 0x7b, 0xec, 0x51, 0x48, 0x22, 0xab, 0x0d, 0xbd, 0x41, 0x59, 0x2c, 0x50, 0x16, 0x1c, 0xce, 0x32, 0x78, 0x27, 0x21, 0x85, 0xc0, 0x30, 0x68, 0x3c, 0x3f, 0x1d, 0xd1, 0xfb, 0x11, 0x4c, 0x44, 0xc8, 0x57, 0xc0, 0xf9, 0x22, 0xe4, 0x8a, 0x48, 0x58, 0x27, 0xa0, 0x3b, 0x0b, 0xc1, 0x0b, 0x18, 0xcb, 0x00, 0x56, 0xe0, 0xdb, 0xc3, 0x0b, 0xca, 0x7a, 0x83, 0xc3, 0x81, 0x62, 0x6a, 0xad, 0x3d, 0x27, 0x58, 0x4d, 0xbd, 0xc6, 0x1d, 0x28, 0x7b, 0x38, 0x1e, 0x9c, 0xde, 0x51, 0xd3, 0x47, 0x37, 0x2b, 0x50, 0x38, 0xda, 0x17, 0x39, 0x07, 0x18, 0xeb, 0x01, 0x46, 0x4d, 0x91, 0x84, 0x84, 0x2c, 0x04, 0xb4, 0x6f, 0xcf, 0xa6, 0x2f, 0x63, 0x2c, 0xb4, 0xef, 0xe1, 0x9d, 0x81, 0xb3, 0x0c, 0x85, 0x64, 0x69, 0x1f, 0xc7, 0x8d, 0x4d, 0xd9, 0xd5, 0xaa, 0xa8, 0x20, 0x55, 0x89, 0xfd, 0xfe, 0x90, 0xe2, 0x48, 0xc9, 0x82, 0x35, 0x38, 0x6f, 0x31, 0x42, 0x01, 0xc6, 0x81, 0x60, 0x62, 0xcd, 0x3d, 0x38, 0x27, 0x04, 0xc1, 0x39, 0xb2, 0x38, 0x15, 0xc2, 0x80, 0x33, 0x07, 0x30, 0x0b, 0x63, 0x2d, 0xac, 0x05, 0x96, 0x8b, 0x1b, 0xe2, 0x32, 0xec, 0x6e, 0xf1, 0xf0, 0xf0, 0x0d, 0xbb, 0x97, 0x3f, 0x9e, 0x0e, 0xe0, 0x74, 0xa0, 0x9d, 0x0a, 0x6f, 0x55, 0x35, 0xa4, 0x53, 0xd7, 0x81, 0xac, 0x15, 0x42, 0x5c, 0x04, 0x28, 0x61, 0x6d, 0x6c, 0xc7, 0x33, 0x78, 0x77, 0x9a, 0x4a, 0xd5, 0xb6, 0x6d, 0x52, 0x67, 0xcc, 0x15, 0x98, 0xf8, 0x5e, 0x4f, 0x3d, 0xcb, 0xe3, 0x47, 0x6c, 0x26, 0xaf, 0xc1, 0xbc, 0xce, 0xbb, 0xab, 0x3b, 0xf8, 0xd9, 0x5d, 0x6b, 0xda, 0xdd, 0x47, 0x34, 0x65, 0x1a, 0xdd, 0x49, 0x09, 0x6b, 0x91, 0x7c, 0x49, 0xa8, 0x98, 0x83, 0x73, 0x97, 0x12, 0x30, 0x3a, 0x5c, 0xe4, 0x9b, 0x0d, 0x49, 0x94, 0xf4, 0xe5, 0x53, 0x21, 0xa1, 0x05, 0xec, 0x8c, 0x84, 0x97, 0x43, 0xe6, 0xf9, 0x7b, 0xf8, 0x4b, 0xe1, 0x25, 0x84, 0xcc, 0xf8, 0x6c, 0x45, 0x73, 0x6a, 0x74, 0xa2, 0xf4, 0x76, 0x6e, 0x15, 0x91, 0x64, 0x79, 0xd9, 0xbf, 0x99, 0xfb, 0x3e, 0x73, 0x4e, 0x6e, 0xd7, 0x9a, 0xa5, 0x6b, 0x05, 0x7d, 0x3a, 0x5d, 0x9e, 0xed, 0xf1, 0xc1, 0xaf, 0x16, 0xf3, 0x6b, 0x53, 0xe9, 0xd9, 0xf5, 0x7f, 0x03, 0xc9, 0xc8, 0x8b, 0xe3, 0x35, 0x04, 0x00, 0xce, 0xa5, 0xf4, 0xaf, 0x53, 0x46, 0x7a, 0x94, 0xad, 0x79, 0x82, 0xc7, 0x61, 0x60, 0x12, 0x4f, 0xc5, 0x9e, 0x98, 0xe7, 0xc1, 0xe6, 0xd7, 0x3a, 0x72, 0x59, 0x23, 0x05, 0x10, 0x4d, 0xeb, 0x9e, 0x39, 0x0c, 0x43, 0x87, 0x7a, 0x59, 0x80, 0x31, 0x0e, 0x6b, 0x3b, 0xb8, 0xb0, 0x83, 0x97, 0x52, 0x02, 0x96, 0xd0, 0xb4, 0x88, 0x98, 0xe6, 0x2a, 0x88, 0x39, 0x22, 0xe6, 0x1c, 0xb1, 0x31, 0x66, 0x19, 0xf0, 0x90, 0xa3, 0x10, 0xfd, 0x34, 0x58, 0x08, 0x45, 0x8a, 0x09, 0x6c, 0xe3, 0x38, 0x86, 0xfc, 0x74, 0x72, 0xd6, 0x73, 0x9a, 0xe4, 0x8a, 0x75, 0x5d, 0xa1, 0xaa, 0xef, 0xc2, 0x6b, 0x06, 0xe0, 0x0d, 0xac, 0xeb, 0xd1, 0x0f, 0x86, 0xd0, 0x09, 0xee, 0xb1, 0x58, 0x6c, 0xd0, 0x1d, 0x07, 0x3c, 0xec, 0x9f, 0x60, 0xf4, 0x33, 0xc6, 0x0e, 0x68, 0x8f, 0x1a, 0x8a, 0x55, 0xb8, 0xd9, 0x36, 0x50, 0xb2, 0xc0, 0x00, 0x32, 0x7f, 0xd1, 0x23, 0x19, 0xb2, 0x19, 0x4d, 0x45, 0x3d, 0xa2, 0xc9, 0x4a, 0x96, 0x28, 0x0a, 0x09, 0xa9, 0x38, 0xac, 0x1d, 0x31, 0xea, 0x3e, 0xf1, 0x88, 0xea, 0xf5, 0x22, 0x3c, 0x0b, 0x02, 0xc6, 0x79, 0x78, 0x10, 0xe2, 0xc1, 0x44, 0x01, 0xa1, 0x2a, 0x14, 0xa5, 0x03, 0xe3, 0x23, 0x6c, 0x67, 0xd1, 0x8d, 0x61, 0xd7, 0x2f, 0xc9, 0xda, 0x96, 0x31, 0x0f, 0xe9, 0x1c, 0xda, 0xf6, 0x00, 0xef, 0x24, 0xf8, 0xb6, 0x81, 0xb7, 0x16, 0xec, 0xff, 0xf8, 0xdf, 0xff, 0xb3, 0xaf, 0xaa, 0x0a, 0xbb, 0xdd, 0x0e, 0x3f, 0xfd, 0xf4, 0x13, 0x56, 0xab, 0x15, 0xfe, 0xf1, 0x1f, 0xff, 0x11, 0x9b, 0xcd, 0x06, 0x5d, 0x4b, 0x86, 0x01, 0x75, 0xd0, 0x8f, 0xc7, 0xd4, 0xb2, 0x68, 0xd8, 0xf2, 0xba, 0x7b, 0x48, 0xce, 0x68, 0xd1, 0x39, 0x2e, 0x5a, 0xa8, 0x12, 0x7b, 0x7c, 0x95, 0x12, 0xdb, 0xb4, 0xd6, 0x09, 0xba, 0x4e, 0x61, 0x2f, 0x6e, 0x4c, 0x1e, 0xe9, 0x91, 0x65, 0x6e, 0x8c, 0x49, 0xac, 0xfa, 0x9b, 0x77, 0xf7, 0x69, 0x77, 0xfe, 0xe5, 0xcb, 0x17, 0xac, 0x56, 0xab, 0x94, 0x7e, 0xb6, 0x58, 0x2c, 0x70, 0x7c, 0xa6, 0x43, 0x4f, 0x2a, 0x11, 0xf6, 0xdc, 0x12, 0x9c, 0x13, 0xd4, 0xd2, 0x75, 0x1d, 0xba, 0x7d, 0x84, 0xdc, 0x6d, 0x20, 0x13, 0x50, 0x08, 0x48, 0xdf, 0x87, 0x95, 0xc0, 0x87, 0x1f, 0x93, 0x57, 0xfa, 0xd3, 0xd3, 0x13, 0x18, 0x63, 0xb8, 0xbf, 0xbf, 0x4f, 0xa1, 0x2f, 0xcb, 0xe5, 0x3a, 0x11, 0x80, 0x72, 0x8f, 0xfb, 0x48, 0x76, 0x2a, 0xc4, 0xe9, 0x66, 0x34, 0x76, 0x84, 0x05, 0x45, 0xf9, 0xf1, 0xe0, 0xb0, 0x55, 0x94, 0x0b, 0xea, 0x78, 0x45, 0x81, 0x42, 0x2d, 0xc1, 0x50, 0x61, 0xd4, 0xb4, 0xe7, 0xf5, 0x1e, 0xe8, 0xd8, 0x07, 0x6c, 0x36, 0x9b, 0xa4, 0x49, 0x8e, 0x90, 0x7e, 0x24, 0xa8, 0x51, 0xf4, 0x1f, 0xce, 0x8a, 0x44, 0xb4, 0x84, 0x8c, 0x04, 0xb1, 0xe8, 0xcc, 0x17, 0xed, 0x5f, 0x4f, 0xff, 0x76, 0xde, 0x7d, 0x2b, 0xf7, 0x1a, 0x28, 0xeb, 0x2a, 0xad, 0x01, 0x72, 0x3b, 0xdc, 0x78, 0x10, 0x32, 0xc8, 0xb3, 0x7d, 0xea, 0xd4, 0x91, 0x4c, 0x8f, 0xe7, 0xfe, 0xea, 0x67, 0x89, 0x4c, 0x9c, 0x27, 0xb2, 0xe0, 0xf4, 0x7b, 0x9f, 0xf2, 0xd5, 0xfb, 0x0b, 0x9d, 0xed, 0x34, 0x1c, 0x63, 0xca, 0xbc, 0xce, 0xbf, 0x97, 0xb5, 0xee, 0x6c, 0x07, 0x9b, 0x3b, 0x94, 0xd1, 0x61, 0x66, 0x13, 0x63, 0x3f, 0xae, 0x5f, 0xa2, 0x5f, 0xc1, 0xf3, 0xf3, 0x33, 0x5e, 0x5f, 0xff, 0x4f, 0x68, 0x4d, 0xd7, 0xd2, 0x38, 0x0e, 0x78, 0x01, 0x21, 0x96, 0x58, 0x34, 0x5b, 0x2c, 0x16, 0x6b, 0x2c, 0x96, 0xbf, 0xc6, 0xcd, 0xed, 0x7b, 0x48, 0x51, 0x62, 0xe8, 0x3d, 0x1c, 0x08, 0x9d, 0xd0, 0xc1, 0x03, 0x1b, 0x88, 0x3f, 0x4f, 0xbc, 0x36, 0x81, 0x7c, 0x15, 0x5c, 0xed, 0x8e, 0xc7, 0xe3, 0xc5, 0xe1, 0x9e, 0x1f, 0xfa, 0x0a, 0xea, 0xa2, 0x20, 0xe7, 0xbf, 0x8f, 0xae, 0x8d, 0xf9, 0xe1, 0x9d, 0xff, 0x3f, 0xe7, 0xec, 0x4d, 0x48, 0x59, 0x6b, 0x93, 0x69, 0xae, 0x79, 0x42, 0xa7, 0x12, 0x41, 0x74, 0x32, 0xc1, 0xc5, 0xff, 0x62, 0x13, 0x12, 0x9b, 0xec, 0xe9, 0x6b, 0x38, 0x4d, 0x78, 0x66, 0xd6, 0xfa, 0x35, 0x42, 0xde, 0xb1, 0x39, 0x9e, 0x92, 0xd3, 0xf2, 0xd7, 0x1b, 0x9b, 0x9d, 0x78, 0xef, 0xe6, 0x7b, 0x63, 0x6a, 0x3a, 0xed, 0x79, 0x42, 0x60, 0xc6, 0x82, 0x76, 0xe6, 0xe4, 0x81, 0x91, 0x93, 0xf8, 0xf2, 0xe7, 0xf5, 0x2d, 0x56, 0xf8, 0x74, 0x87, 0x3e, 0x37, 0x05, 0xce, 0xf9, 0xa4, 0x27, 0x34, 0x8b, 0x5f, 0x5a, 0xde, 0x5e, 0x32, 0xf1, 0xdd, 0x45, 0xc3, 0x72, 0x2a, 0xe8, 0xee, 0xec, 0xfd, 0xcd, 0x3d, 0x06, 0xfe, 0x1e, 0xbf, 0xf8, 0xb2, 0x68, 0xde, 0xcc, 0x82, 0x9f, 0x63, 0xff, 0x9f, 0xad, 0x0c, 0x10, 0x5c, 0x03, 0xb9, 0xcb, 0x38, 0x12, 0xa1, 0x81, 0x77, 0x0c, 0x45, 0xe1, 0x01, 0x6b, 0xa0, 0x4d, 0x8f, 0xbe, 0xdb, 0xa1, 0xef, 0x9f, 0x61, 0xcd, 0x1e, 0x8c, 0x75, 0xe0, 0xc2, 0x41, 0xa2, 0x0a, 0x24, 0x63, 0x52, 0xb5, 0x30, 0xe6, 0xc3, 0x07, 0x25, 0xe5, 0x79, 0x14, 0x90, 0xb2, 0x42, 0x51, 0x2c, 0x51, 0x2f, 0x6e, 0x51, 0xd7, 0x37, 0x90, 0x72, 0x09, 0xef, 0x24, 0xb4, 0x65, 0x18, 0x39, 0xed, 0xdd, 0x85, 0x10, 0x14, 0x92, 0xe4, 0x01, 0x67, 0x28, 0x55, 0xcc, 0x18, 0x03, 0x2e, 0x07, 0x40, 0x84, 0xfb, 0x09, 0x02, 0x0e, 0x01, 0x9a, 0x0f, 0x7f, 0xe6, 0x5a, 0x0d, 0xa9, 0x3c, 0xc6, 0xf1, 0x05, 0xc3, 0xf0, 0x0c, 0x81, 0x0e, 0x7a, 0x3c, 0x60, 0xe8, 0x0f, 0x21, 0x03, 0xa0, 0x83, 0x08, 0x3f, 0xa3, 0x35, 0x23, 0xcc, 0xd8, 0xc1, 0xbb, 0x1e, 0xcd, 0x42, 0x61, 0xb5, 0xac, 0x50, 0xc9, 0x0e, 0x46, 0x3b, 0x74, 0xe3, 0x88, 0x76, 0xb0, 0x18, 0x8d, 0x05, 0x98, 0x04, 0x97, 0x05, 0xb8, 0x50, 0xe8, 0x5b, 0xb2, 0xb6, 0x5d, 0xad, 0x36, 0x18, 0xad, 0xc7, 0xd3, 0xcb, 0x01, 0xda, 0x38, 0x70, 0xa5, 0x60, 0xac, 0x87, 0xdb, 0x9d, 0x6c, 0x7c, 0xa3, 0x61, 0x58, 0x3c, 0x6f, 0xee, 0xee, 0xee, 0xb0, 0xb9, 0x7f, 0x97, 0xce, 0xae, 0xbc, 0x99, 0x8b, 0xd7, 0x62, 0xb1, 0xb9, 0x85, 0x12, 0x12, 0xde, 0x6a, 0xc0, 0x79, 0x28, 0x45, 0x3c, 0xa8, 0xb2, 0xa9, 0xb1, 0xbd, 0xbd, 0xc1, 0xf3, 0xe1, 0x3b, 0xdd, 0xcf, 0x83, 0xc1, 0xd8, 0xf5, 0x70, 0xdd, 0x80, 0x7f, 0xfb, 0x7f, 0xfe, 0x07, 0xee, 0x16, 0x6b, 0xbc, 0xdb, 0xde, 0x60, 0x64, 0x0c, 0xbd, 0x1d, 0x20, 0x0a, 0x05, 0x5e, 0x70, 0xf4, 0xba, 0x87, 0xec, 0xfb, 0x0e, 0x80, 0x87, 0xd6, 0x63, 0x78, 0x13, 0x1c, 0xda, 0xf6, 0x08, 0xc0, 0x63, 0xb3, 0xbe, 0x85, 0x73, 0x0e, 0x7d, 0xdf, 0xe3, 0x70, 0x38, 0x24, 0x28, 0x3b, 0xca, 0xb1, 0xa2, 0x47, 0x79, 0x9e, 0x89, 0xde, 0xb6, 0x6d, 0x32, 0x73, 0x79, 0xf7, 0xee, 0x03, 0x38, 0x17, 0xd8, 0x6e, 0x6f, 0xb0, 0xdf, 0xef, 0x83, 0x63, 0x1c, 0x39, 0x97, 0xdd, 0xdf, 0xdf, 0xc3, 0x3b, 0x15, 0xbc, 0x7f, 0x7d, 0x30, 0xf2, 0xaf, 0xd2, 0x61, 0x40, 0x99, 0xe4, 0x16, 0x65, 0xd8, 0x6d, 0xdc, 0xde, 0xbe, 0x23, 0x62, 0x99, 0xb6, 0x29, 0x83, 0xba, 0x59, 0x52, 0x17, 0xde, 0xf6, 0xc7, 0xf0, 0xc0, 0xd3, 0x6d, 0x1a, 0x1b, 0x08, 0xe1, 0x24, 0x18, 0xb3, 0xb8, 0xb9, 0xb9, 0xc1, 0xcd, 0xed, 0x26, 0x48, 0xe4, 0x0e, 0xf0, 0x58, 0xe1, 0xb7, 0xbf, 0xfb, 0x0d, 0xf6, 0xbb, 0x22, 0x1d, 0x5c, 0x92, 0x53, 0xa2, 0xda, 0x61, 0xf7, 0x9d, 0x4c, 0x6d, 0x34, 0x43, 0x29, 0x09, 0xa2, 0x5f, 0x2f, 0xaa, 0x33, 0x79, 0x57, 0x3c, 0x7c, 0xac, 0x7d, 0x46, 0xdb, 0xb6, 0x78, 0xd9, 0xef, 0x70, 0x3c, 0xee, 0x61, 0xc2, 0xae, 0x35, 0x1e, 0x9c, 0xc7, 0xe1, 0x19, 0x5a, 0x5b, 0x18, 0xed, 0xc1, 0x78, 0x89, 0xb2, 0x58, 0x61, 0xb3, 0x7e, 0x87, 0x77, 0xef, 0x7f, 0xc0, 0xed, 0xcd, 0x3d, 0x3e, 0x3f, 0x9d, 0x0e, 0xd9, 0xbc, 0xd0, 0xc6, 0x5d, 0x2c, 0x70, 0x69, 0x2c, 0x12, 0x0b, 0x1d, 0xe7, 0x1c, 0x4a, 0xf2, 0x8b, 0x38, 0xc5, 0xfc, 0xa0, 0xba, 0x96, 0xa4, 0x15, 0xff, 0x7e, 0x0c, 0x3c, 0x83, 0x78, 0xb0, 0x46, 0x7d, 0x71, 0xe4, 0x46, 0xe8, 0xd1, 0xcd, 0x1e, 0x0e, 0xf1, 0x1a, 0x09, 0xae, 0x2e, 0x18, 0xd8, 0x73, 0x44, 0xa3, 0xfc, 0x40, 0x8c, 0x44, 0x28, 0x5a, 0x81, 0xd4, 0x6f, 0xee, 0x4a, 0xa7, 0xcd, 0xc2, 0x34, 0x33, 0x5c, 0x08, 0x39, 0x9b, 0x75, 0x7d, 0x7a, 0x80, 0x4e, 0xdc, 0x90, 0xc8, 0x7b, 0x88, 0x8d, 0x4f, 0xd7, 0x75, 0x78, 0x79, 0x26, 0x6f, 0x7e, 0x26, 0x05, 0x38, 0x67, 0xb0, 0x8e, 0xc1, 0x0c, 0x03, 0xac, 0xd9, 0xa1, 0xed, 0x35, 0x84, 0xfa, 0x44, 0x6b, 0x16, 0xa5, 0xe0, 0x18, 0x83, 0xe0, 0x02, 0x9e, 0x71, 0x08, 0xf8, 0xe4, 0x8f, 0x4d, 0x2b, 0x0f, 0x1b, 0x5e, 0x23, 0x4b, 0x8e, 0x5b, 0x51, 0x0d, 0x71, 0xcd, 0xab, 0xda, 0x7b, 0x0f, 0xe6, 0xe7, 0xa1, 0xd0, 0x5c, 0x22, 0x36, 0xfd, 0xd9, 0xe2, 0xcf, 0x70, 0xf2, 0xec, 0xc6, 0xd5, 0x08, 0xcd, 0x6b, 0x13, 0x5a, 0x2a, 0x20, 0x57, 0xbe, 0x6f, 0xbe, 0x76, 0xca, 0x8d, 0x5a, 0x72, 0x1f, 0x72, 0x9a, 0x78, 0xce, 0x8b, 0x89, 0x77, 0x21, 0x55, 0xce, 0x47, 0x96, 0xf4, 0xc9, 0xcc, 0xc4, 0x3b, 0x16, 0xd0, 0x1e, 0x24, 0x38, 0x94, 0xd2, 0xb7, 0x04, 0xb1, 0xaa, 0x93, 0x69, 0x09, 0xa1, 0x25, 0x16, 0x16, 0x7a, 0x8c, 0xd3, 0x3b, 0x11, 0x03, 0x5d, 0x40, 0x4f, 0x04, 0x57, 0x10, 0x5c, 0xc1, 0x86, 0x40, 0xa1, 0xe8, 0x82, 0x38, 0xbd, 0x6f, 0xe6, 0x0a, 0xfa, 0x54, 0x93, 0xfe, 0x4b, 0x0a, 0x83, 0x6b, 0x09, 0x71, 0xd1, 0x19, 0x2f, 0x47, 0x5a, 0xa6, 0xea, 0x85, 0xb7, 0x74, 0xfa, 0x04, 0xb9, 0xfb, 0x33, 0x79, 0xdc, 0xf4, 0x59, 0x9a, 0x6a, 0xfd, 0x73, 0x37, 0x39, 0x7a, 0x47, 0xe4, 0xd5, 0x84, 0xb7, 0xe9, 0x73, 0x37, 0x25, 0x9d, 0x9d, 0x7e, 0xc5, 0xe4, 0xd7, 0x40, 0xcc, 0xe4, 0xf4, 0xbe, 0x72, 0x7f, 0xe9, 0xb1, 0x0e, 0x58, 0x38, 0x6f, 0xd1, 0xf7, 0x87, 0xa4, 0xeb, 0x26, 0xf7, 0x45, 0xda, 0x9d, 0x47, 0x76, 0xba, 0x75, 0x92, 0x48, 0xa0, 0xdc, 0x27, 0x32, 0x5d, 0xfc, 0xde, 0x42, 0x08, 0xc8, 0x88, 0xd2, 0x18, 0x03, 0xed, 0x0c, 0x79, 0xcb, 0x7b, 0x40, 0x72, 0x4e, 0xe9, 0x8b, 0xa0, 0xd5, 0x20, 0x0b, 0x05, 0x9d, 0x81, 0xa4, 0x7e, 0x9c, 0x73, 0x2a, 0xea, 0x0d, 0x43, 0xa1, 0x28, 0x50, 0x66, 0xec, 0x0d, 0xb4, 0x1d, 0xe1, 0xdc, 0x48, 0x91, 0xaf, 0x21, 0xfb, 0xc1, 0x1b, 0x7b, 0x72, 0x6c, 0x94, 0x02, 0xcc, 0xd1, 0x34, 0xdf, 0x0d, 0x3d, 0x9e, 0x1f, 0x1f, 0x28, 0x1d, 0x31, 0xc4, 0x20, 0x97, 0x55, 0x05, 0x07, 0x09, 0x84, 0x55, 0xc8, 0xfb, 0x8f, 0x3f, 0x60, 0x18, 0x34, 0x46, 0x4d, 0xcd, 0x6f, 0xbc, 0x97, 0xfb, 0x6e, 0x44, 0x37, 0xf4, 0xd8, 0xfd, 0x4c, 0x6b, 0xd5, 0xa2, 0x28, 0xd2, 0x44, 0xce, 0xc3, 0x6b, 0x5f, 0xae, 0x1a, 0x9a, 0xf4, 0x99, 0x48, 0x16, 0xca, 0x53, 0xf3, 0xa7, 0x61, 0xe8, 0xc0, 0xcb, 0x0a, 0x82, 0x91, 0x4e, 0x5f, 0x48, 0x0e, 0xeb, 0x1c, 0x86, 0xa1, 0x47, 0xdb, 0xee, 0xf1, 0xf3, 0xd7, 0xcf, 0x90, 0xa2, 0xa0, 0xbe, 0xd1, 0x38, 0x30, 0x4b, 0x99, 0x14, 0x34, 0x30, 0x30, 0xac, 0x14, 0x87, 0x3d, 0x8c, 0xe8, 0x77, 0x7b, 0x18, 0xe6, 0x00, 0xee, 0xc9, 0xfa, 0x35, 0x9a, 0xab, 0x54, 0x55, 0x85, 0xae, 0xeb, 0xf0, 0xa7, 0x3f, 0xfd, 0x89, 0x04, 0xff, 0x45, 0x93, 0xe0, 0xf8, 0x3c, 0xd9, 0x2c, 0x5a, 0xae, 0x56, 0x35, 0xe9, 0x82, 0xeb, 0x7a, 0x81, 0xa2, 0xa8, 0xce, 0x76, 0xc8, 0x00, 0xc7, 0xf3, 0xd3, 0x2b, 0xac, 0xb5, 0x24, 0xa4, 0x77, 0x1e, 0x75, 0xb5, 0x48, 0xd3, 0xe8, 0x7e, 0x77, 0x84, 0x0e, 0x56, 0xa4, 0x9b, 0xcd, 0x3a, 0x45, 0x92, 0x8e, 0xe3, 0x88, 0xfd, 0x6e, 0x8f, 0x6f, 0xdf, 0xbe, 0xe3, 0xdd, 0x7b, 0x07, 0x6f, 0x3d, 0xb1, 0xea, 0xb5, 0x45, 0x6f, 0x7b, 0x8c, 0x3d, 0x4d, 0xda, 0x92, 0x4b, 0x54, 0x75, 0x0d, 0x2e, 0x1c, 0x84, 0x8e, 0x87, 0x10, 0x69, 0xe0, 0xab, 0xba, 0xc0, 0xdd, 0xbb, 0x1b, 0xbc, 0x7f, 0xf7, 0x21, 0xc8, 0xe1, 0x7a, 0x74, 0x63, 0x07, 0xe7, 0x2c, 0xf6, 0x87, 0x3d, 0xc1, 0xf6, 0xdc, 0x63, 0xb9, 0xe1, 0x30, 0x96, 0xe1, 0xeb, 0xd3, 0x57, 0x92, 0x9a, 0xad, 0x28, 0x7f, 0xfd, 0xdd, 0x7d, 0x89, 0x71, 0x7c, 0xc5, 0xc3, 0xe1, 0xdf, 0x29, 0x0d, 0x0c, 0x35, 0x0a, 0x57, 0xa4, 0x62, 0x41, 0x16, 0xa9, 0x0e, 0xc2, 0x7e, 0x82, 0x83, 0xc0, 0x72, 0xb5, 0xc5, 0x7a, 0x73, 0x03, 0x26, 0x48, 0xe7, 0xd8, 0xb6, 0x2d, 0xba, 0x71, 0x80, 0xf3, 0x0e, 0xce, 0x13, 0x21, 0xa4, 0xef, 0x47, 0x3c, 0xbf, 0x3c, 0xe2, 0xcb, 0xd7, 0x3d, 0xea, 0xbf, 0x7d, 0xc7, 0x72, 0xb1, 0xc6, 0x7f, 0xf8, 0x9f, 0xff, 0x33, 0xa4, 0x8c, 0x05, 0x5d, 0xa4, 0xa6, 0x81, 0xf3, 0xb0, 0x1b, 0xf5, 0x32, 0x15, 0xb1, 0xf4, 0x30, 0x00, 0x54, 0x58, 0xbc, 0x87, 0x52, 0x65, 0x76, 0xc8, 0x22, 0x40, 0xd6, 0xa7, 0xc3, 0x77, 0xda, 0xf9, 0x9f, 0x1e, 0x28, 0xf2, 0x70, 0xe6, 0x9c, 0x88, 0x21, 0xb9, 0x9f, 0x72, 0xd8, 0x42, 0xa7, 0x24, 0xa5, 0x93, 0x44, 0xe9, 0x3a, 0xf4, 0x35, 0x0d, 0x4d, 0x88, 0xdf, 0x27, 0x22, 0x39, 0x73, 0x92, 0xa4, 0x7c, 0x62, 0x9a, 0xdb, 0xf5, 0xe5, 0xf0, 0xff, 0xd4, 0x74, 0x65, 0x1a, 0x5f, 0x19, 0xff, 0x3c, 0x0f, 0x05, 0x8a, 0x19, 0xee, 0x79, 0xc1, 0x8f, 0xd0, 0xec, 0xf1, 0x48, 0x29, 0x7f, 0x0e, 0x8a, 0x7c, 0xb3, 0x3c, 0x41, 0xf8, 0x8c, 0x09, 0x78, 0xce, 0x01, 0x21, 0x83, 0xdc, 0x86, 0x07, 0x36, 0x7e, 0x20, 0x6b, 0x0a, 0x09, 0xcf, 0x78, 0x20, 0x0f, 0x8a, 0xb0, 0x97, 0x3b, 0x4d, 0x54, 0x91, 0x54, 0x14, 0x7f, 0xc6, 0xe8, 0xa1, 0x90, 0x4b, 0xbf, 0xce, 0xbc, 0xd8, 0x93, 0x9c, 0x87, 0x4f, 0x7e, 0xce, 0x58, 0x80, 0x6c, 0xda, 0x9d, 0x9e, 0x08, 0x6a, 0xfe, 0xec, 0xc0, 0x9f, 0x33, 0x9a, 0x49, 0xf1, 0xa6, 0x72, 0xde, 0xfc, 0x65, 0x2e, 0xf0, 0x63, 0x9a, 0xf2, 0x96, 0x2b, 0x44, 0xa6, 0x84, 0xb9, 0xf8, 0xa1, 0x4d, 0x3b, 0x4b, 0xfc, 0x9a, 0x5a, 0x78, 0x4e, 0x0b, 0xda, 0xb4, 0x41, 0xcb, 0xa7, 0x98, 0x9c, 0x90, 0x17, 0x9b, 0xcd, 0xe9, 0xeb, 0x3e, 0x11, 0xe9, 0xc4, 0x45, 0x23, 0x39, 0x65, 0xe9, 0x4f, 0x8b, 0xf7, 0xdf, 0x23, 0x45, 0xcb, 0x59, 0xe0, 0x6f, 0x41, 0xe2, 0xe0, 0x98, 0x65, 0x66, 0xcf, 0xad, 0x27, 0xa6, 0x04, 0x38, 0x92, 0x67, 0x5d, 0x32, 0xb9, 0xa7, 0x71, 0xb8, 0xf9, 0x64, 0x37, 0x95, 0xdd, 0x79, 0xcf, 0x2e, 0x9a, 0xf5, 0x28, 0x19, 0x24, 0xad, 0x81, 0x0b, 0x79, 0xe7, 0xfe, 0xa4, 0x2c, 0x64, 0xa7, 0x80, 0x1e, 0x9f, 0x9e, 0x3b, 0x24, 0x57, 0xb6, 0x98, 0x36, 0x46, 0xe7, 0x81, 0x9f, 0x4d, 0xfc, 0xa3, 0xd9, 0x3e, 0xea, 0xfc, 0x15, 0x45, 0x30, 0xb3, 0xa0, 0xab, 0x67, 0x3e, 0xfc, 0x3b, 0x2a, 0x82, 0xde, 0x09, 0x30, 0xc3, 0x60, 0x5d, 0x0b, 0xa0, 0x02, 0x50, 0xd1, 0xf9, 0xc5, 0x01, 0xc6, 0x14, 0x09, 0x5e, 0x1c, 0xc0, 0x3d, 0x07, 0xb8, 0x85, 0x64, 0x1c, 0x4a, 0x09, 0x14, 0x4a, 0xe1, 0x70, 0xe8, 0xc8, 0x9e, 0xd8, 0x90, 0xe1, 0x8d, 0x0d, 0x66, 0x3b, 0x96, 0x33, 0x30, 0xc3, 0x00, 0x3f, 0xc0, 0x71, 0x06, 0x3d, 0x76, 0x38, 0x1c, 0x5f, 0x60, 0xcc, 0x0e, 0x4a, 0x38, 0xc0, 0x5b, 0x78, 0x00, 0xd6, 0xf4, 0xe9, 0xac, 0x96, 0x1c, 0xe4, 0xbb, 0xc0, 0x05, 0x0c, 0xd3, 0x70, 0x7a, 0xc4, 0x72, 0xfd, 0x3e, 0xe4, 0xbb, 0x4b, 0x80, 0x29, 0x18, 0x07, 0xd2, 0xd2, 0x1b, 0x0f, 0xe3, 0x81, 0x61, 0x74, 0xe8, 0xfa, 0x11, 0x42, 0x29, 0x28, 0x59, 0x42, 0x49, 0x60, 0xd4, 0xb4, 0xf2, 0x2d, 0x64, 0x19, 0x92, 0x31, 0x47, 0x70, 0x1e, 0x09, 0xdd, 0x1e, 0x8c, 0xb9, 0xe0, 0x52, 0x5a, 0xc0, 0x70, 0x0b, 0x1e, 0xae, 0x65, 0x1c, 0x96, 0xf2, 0x06, 0xd9, 0x0c, 0x26, 0xc4, 0xbe, 0x02, 0xd6, 0x1b, 0x78, 0xcd, 0x31, 0x9a, 0x01, 0x5e, 0x33, 0x30, 0xe9, 0xb0, 0x0d, 0x9e, 0x30, 0x52, 0x08, 0xc0, 0x79, 0x60, 0xd0, 0x78, 0x5a, 0x2f, 0x50, 0x55, 0x02, 0x52, 0x79, 0x74, 0xdf, 0x7f, 0x82, 0x84, 0xc7, 0xa6, 0x52, 0xa8, 0x97, 0x4b, 0x88, 0x42, 0x90, 0xf5, 0x6b, 0xec, 0x6e, 0x73, 0xd8, 0x0a, 0x00, 0xda, 0xee, 0x00, 0xd6, 0x33, 0x98, 0x67, 0x93, 0x34, 0xe2, 0x64, 0xab, 0x57, 0x91, 0x93, 0xdc, 0xc3, 0x31, 0x59, 0xac, 0x0a, 0x21, 0x43, 0x68, 0x03, 0x59, 0xe9, 0x09, 0x21, 0xd1, 0x99, 0x16, 0x2f, 0x2f, 0x2f, 0xd8, 0xed, 0x76, 0x28, 0x8a, 0x82, 0xf6, 0xe7, 0xc1, 0x80, 0xc6, 0x5a, 0x8b, 0xed, 0xe6, 0x1d, 0x8e, 0xc7, 0x23, 0x3e, 0xef, 0xbf, 0xa5, 0x07, 0xbd, 0xae, 0x6b, 0xbc, 0xbb, 0x5b, 0xa0, 0xae, 0x56, 0xf8, 0xf6, 0xf0, 0x05, 0x7d, 0x37, 0x26, 0x9d, 0x78, 0x24, 0x80, 0x95, 0x65, 0x09, 0xef, 0x18, 0x5e, 0x5f, 0xf6, 0xe9, 0x46, 0x27, 0x0f, 0xef, 0x67, 0x0c, 0xc3, 0x90, 0xc8, 0x79, 0xdf, 0x1e, 0xbf, 0x11, 0x34, 0xe3, 0x1d, 0xf4, 0x48, 0xb2, 0xb6, 0xdf, 0x7d, 0xfc, 0x43, 0x62, 0x9c, 0x3f, 0xbd, 0xec, 0xc9, 0x0d, 0xae, 0xe2, 0xd8, 0xdc, 0xbc, 0xc3, 0x72, 0xb9, 0xa4, 0x06, 0xc0, 0x38, 0x1c, 0xda, 0x03, 0x0a, 0xb5, 0xc1, 0xa8, 0x19, 0x86, 0xd1, 0x63, 0x18, 0xfa, 0xb3, 0xac, 0x77, 0xce, 0x39, 0x84, 0x79, 0xc0, 0x60, 0x86, 0x44, 0x12, 0x14, 0x45, 0xd0, 0xf3, 0x0a, 0x92, 0xa1, 0x94, 0xd5, 0x16, 0xd6, 0xf5, 0x30, 0x76, 0x08, 0xaf, 0x9f, 0xf6, 0xc3, 0x75, 0xb3, 0xc6, 0x62, 0xb9, 0x09, 0x05, 0xe1, 0xa4, 0xd5, 0x8d, 0xce, 0x4f, 0xc6, 0xb8, 0xa4, 0xee, 0x4d, 0x10, 0x98, 0x67, 0x59, 0x10, 0x05, 0xdd, 0xd8, 0xe3, 0xa8, 0xaf, 0x1c, 0x54, 0x44, 0x0c, 0xcb, 0x49, 0x49, 0xb4, 0xcb, 0x8a, 0xc5, 0x07, 0xa1, 0x21, 0x38, 0xbf, 0xde, 0x53, 0x72, 0x91, 0x50, 0x45, 0x0a, 0xf3, 0xa0, 0x69, 0xd4, 0x06, 0x36, 0x6a, 0x40, 0x43, 0xbc, 0x7d, 0x53, 0xaa, 0x33, 0x85, 0x6c, 0x2f, 0xa7, 0x10, 0x7b, 0x35, 0x90, 0x23, 0x9f, 0xce, 0xe3, 0x21, 0x9f, 0x17, 0xa0, 0x08, 0xb9, 0x9f, 0x75, 0xfc, 0x52, 0x9e, 0xad, 0x07, 0x8c, 0xe1, 0xe9, 0x60, 0x8e, 0xc5, 0x34, 0x16, 0x0e, 0x72, 0x1d, 0x7c, 0x9f, 0x56, 0x0c, 0x34, 0x65, 0x33, 0x14, 0x65, 0x8d, 0xcd, 0xe6, 0x0e, 0xeb, 0xd5, 0x16, 0xab, 0xe5, 0x16, 0x65, 0xdd, 0x50, 0x97, 0xec, 0x38, 0x84, 0xa4, 0xc6, 0x56, 0x3b, 0x8a, 0x10, 0x65, 0x2e, 0xca, 0x87, 0x26, 0x91, 0xa7, 0xcc, 0x25, 0x24, 0x20, 0xb7, 0x39, 0xcd, 0x0b, 0x0c, 0xe7, 0x1c, 0x52, 0xc8, 0xab, 0x06, 0x25, 0x53, 0x96, 0xf9, 0x54, 0x9a, 0x95, 0x23, 0x21, 0x73, 0x84, 0xab, 0xb9, 0xa9, 0xf0, 0x1a, 0xf1, 0x6b, 0xea, 0xef, 0x3d, 0x9d, 0x36, 0xaf, 0x59, 0xc3, 0xc6, 0xc6, 0x8f, 0xee, 0xd4, 0x53, 0x46, 0xfb, 0xb9, 0x87, 0x7c, 0x6c, 0xc2, 0x10, 0xee, 0x75, 0x24, 0x16, 0x73, 0x3c, 0x6c, 0xcf, 0x21, 0x75, 0x9f, 0x24, 0x47, 0xb9, 0xfd, 0xe9, 0xe9, 0xbe, 0x71, 0x30, 0x26, 0x34, 0x69, 0xde, 0x5d, 0x90, 0xa9, 0xf2, 0x09, 0x77, 0xba, 0xee, 0xc8, 0x1b, 0xc4, 0x6b, 0x59, 0xf4, 0xd7, 0x88, 0x79, 0x53, 0xe6, 0x3b, 0x63, 0x0c, 0x5c, 0xf0, 0x8b, 0xbd, 0xf8, 0x54, 0x03, 0x9f, 0x37, 0x21, 0xf9, 0x3d, 0x4c, 0x66, 0x4b, 0xee, 0x2a, 0x69, 0xf0, 0x9a, 0x4f, 0x41, 0x7e, 0x2d, 0xa5, 0x2c, 0xde, 0xf4, 0x98, 0x9f, 0x5a, 0xe7, 0xce, 0x31, 0xee, 0x69, 0x70, 0xa0, 0xc6, 0x91, 0x71, 0x1f, 0x24, 0xa9, 0x41, 0x7f, 0xce, 0x24, 0x98, 0xb3, 0xa1, 0xd9, 0x65, 0x17, 0xe8, 0x8f, 0x94, 0x71, 0x25, 0x16, 0x33, 0xc8, 0x2d, 0x9c, 0x8b, 0xcd, 0xbf, 0x85, 0x67, 0x15, 0x9c, 0xe5, 0xe0, 0xc2, 0xc1, 0xf9, 0x12, 0x45, 0x61, 0x28, 0xa7, 0x82, 0xf9, 0xf4, 0x9c, 0x70, 0x70, 0x70, 0xc9, 0x00, 0xee, 0x60, 0x35, 0xd9, 0xd1, 0xea, 0x71, 0x84, 0xb3, 0x23, 0xa4, 0x0a, 0xeb, 0x34, 0x17, 0x82, 0x72, 0xc0, 0x82, 0xe4, 0xd3, 0xc3, 0x79, 0xc0, 0xb8, 0x16, 0xcc, 0x3b, 0x1c, 0x76, 0x8f, 0x78, 0x79, 0xfe, 0x06, 0xb0, 0x01, 0x8b, 0x86, 0xd0, 0x36, 0xe6, 0x1c, 0xca, 0x52, 0x9e, 0xd6, 0x9f, 0x8a, 0x5e, 0x2f, 0xe3, 0x1a, 0x60, 0x16, 0x42, 0x78, 0x48, 0xaf, 0x82, 0xc5, 0xad, 0xc3, 0x30, 0x1a, 0x8c, 0xa3, 0xc1, 0x18, 0x64, 0x78, 0x00, 0xf0, 0xf0, 0xf0, 0x0d, 0x45, 0x51, 0xe0, 0xfd, 0xfb, 0x1b, 0x54, 0xcd, 0x12, 0x9d, 0x7e, 0x82, 0x7e, 0x3d, 0x80, 0x49, 0x85, 0xd5, 0x6a, 0x81, 0xd7, 0x4a, 0x61, 0x34, 0x03, 0xac, 0x37, 0x44, 0x5b, 0x64, 0x02, 0xd6, 0xd1, 0xa4, 0x8c, 0x80, 0x4a, 0x50, 0xb3, 0xce, 0x03, 0x42, 0xe1, 0xb3, 0xb0, 0x24, 0x8f, 0xaa, 0x2a, 0x20, 0x05, 0x28, 0xfc, 0x65, 0x24, 0x1b, 0xde, 0x51, 0x6b, 0x40, 0x02, 0xaa, 0xe4, 0x58, 0x6f, 0xd7, 0x09, 0xc9, 0xe1, 0xce, 0x03, 0x21, 0x1d, 0x6f, 0xec, 0x0f, 0xd8, 0x99, 0x11, 0x37, 0xdc, 0xc0, 0x71, 0x06, 0xef, 0x35, 0x94, 0xe9, 0xa0, 0x64, 0x09, 0x29, 0x25, 0x0f, 0xc9, 0x38, 0x36, 0x8b, 0x4d, 0xe4, 0xa8, 0xeb, 0x12, 0xaf, 0xaf, 0x87, 0xb3, 0x58, 0xc6, 0xb8, 0x2b, 0x88, 0x96, 0xa8, 0x9c, 0x49, 0xe8, 0xd1, 0xa0, 0xf5, 0x7d, 0x62, 0x72, 0x73, 0x4e, 0xbb, 0x5d, 0xea, 0xf0, 0x0b, 0x54, 0x55, 0x13, 0xa4, 0x60, 0x3d, 0xba, 0xee, 0xe7, 0x14, 0xe8, 0x72, 0x73, 0x73, 0x83, 0xae, 0x1f, 0xf1, 0xa7, 0x3f, 0xff, 0x05, 0xcf, 0xcf, 0xcf, 0x58, 0xad, 0x56, 0xd8, 0x6c, 0x36, 0x50, 0x87, 0x36, 0xb1, 0xeb, 0x97, 0x8b, 0x1a, 0x63, 0x3f, 0xc2, 0x39, 0x1d, 0xd2, 0xdf, 0x3c, 0xa4, 0x28, 0xc1, 0xbc, 0x84, 0xd5, 0xc0, 0xfe, 0x78, 0x48, 0x0f, 0x7e, 0x44, 0x0d, 0xba, 0x0e, 0x70, 0x78, 0x00, 0x97, 0x0a, 0x83, 0x19, 0xf0, 0xe1, 0xc3, 0x87, 0x14, 0xa8, 0x72, 0x68, 0x07, 0x0c, 0xe3, 0x73, 0x62, 0xc9, 0xff, 0xf4, 0xd3, 0x33, 0xc6, 0x71, 0xc4, 0x87, 0x0f, 0x1f, 0xb1, 0x58, 0xdc, 0xa0, 0xae, 0x1b, 0x34, 0xcd, 0x3b, 0xb4, 0x6d, 0x8b, 0x4f, 0x9f, 0xfe, 0x80, 0xaf, 0x3f, 0x7f, 0x27, 0x78, 0xa6, 0xeb, 0xd0, 0xb6, 0x03, 0x0e, 0x07, 0x62, 0x32, 0xd3, 0xcd, 0xcc, 0xd0, 0x94, 0x15, 0xc1, 0x33, 0xdc, 0xc2, 0x33, 0x06, 0x63, 0x3c, 0xfa, 0xd1, 0x41, 0xaa, 0x10, 0x8f, 0xf7, 0xdc, 0xc1, 0x7a, 0x40, 0xaa, 0x35, 0x3e, 0xde, 0x6c, 0xb1, 0x5c, 0xdf, 0x62, 0xb1, 0x58, 0xa3, 0x6e, 0xd6, 0x28, 0x54, 0x89, 0x6e, 0x00, 0xf4, 0x68, 0xe1, 0x7d, 0xb0, 0x0f, 0x35, 0x3e, 0x15, 0x02, 0x7a, 0x80, 0xf4, 0xc5, 0x21, 0x9f, 0x17, 0x07, 0xa3, 0xdf, 0xde, 0x21, 0x1b, 0xed, 0xb2, 0xc3, 0x05, 0xe1, 0xba, 0x9c, 0x3e, 0x6f, 0xc8, 0x9c, 0xb8, 0x72, 0x32, 0x51, 0xfc, 0xff, 0xae, 0xeb, 0x2e, 0xbc, 0xb1, 0x73, 0x4d, 0xaf, 0x14, 0xea, 0x02, 0x52, 0xce, 0xa1, 0xd9, 0xdc, 0x29, 0x6c, 0x1a, 0x95, 0x18, 0x51, 0x81, 0x6b, 0x05, 0x3d, 0x9f, 0xe6, 0x72, 0xf2, 0x58, 0x9c, 0xc4, 0x63, 0x41, 0xcf, 0xf7, 0xa6, 0xd3, 0x83, 0xb3, 0x69, 0x9a, 0xf4, 0x77, 0xb1, 0xa0, 0x47, 0xbe, 0x40, 0x5d, 0xd7, 0xd8, 0x1f, 0xff, 0x81, 0xe4, 0x8d, 0xe6, 0x05, 0xde, 0x0d, 0x60, 0x4c, 0xa1, 0xaa, 0xb6, 0x58, 0xad, 0x6f, 0xb1, 0xd9, 0xdc, 0xa1, 0xaa, 0x56, 0x28, 0x8b, 0x05, 0x15, 0xae, 0x58, 0x78, 0xb3, 0xc3, 0xcc, 0x8e, 0x51, 0xc5, 0x10, 0x9b, 0x25, 0x6a, 0x3a, 0x19, 0xf7, 0x67, 0xd1, 0x99, 0xd3, 0xe9, 0x32, 0xee, 0xf2, 0x55, 0x70, 0x90, 0xbb, 0x9e, 0x96, 0x96, 0x33, 0xc0, 0xcf, 0xe1, 0x5f, 0x22, 0xb0, 0x5d, 0x4a, 0xae, 0xf2, 0xc2, 0x1b, 0xa5, 0x40, 0xd3, 0x9c, 0xf5, 0x54, 0x78, 0x26, 0xd3, 0x70, 0x6c, 0x74, 0xe6, 0x20, 0xe3, 0x9c, 0x3f, 0x12, 0xaf, 0x5f, 0xdd, 0x54, 0x99, 0xb1, 0xcc, 0x65, 0xea, 0x19, 0xfd, 0x1b, 0x9f, 0xed, 0xed, 0x4f, 0xd7, 0x9d, 0x26, 0x42, 0x9e, 0xa4, 0x4a, 0x79, 0xe1, 0xa6, 0x6b, 0x49, 0xeb, 0x3f, 0x82, 0x2c, 0xd5, 0xd9, 0xbd, 0x1f, 0x0b, 0xd2, 0x38, 0xea, 0xab, 0xd3, 0xeb, 0xd4, 0xe9, 0x6d, 0x0a, 0x37, 0xcf, 0x49, 0xcb, 0xa6, 0x0d, 0xd1, 0x9c, 0xf5, 0xee, 0xd9, 0xf7, 0x13, 0xec, 0x4d, 0x33, 0x98, 0x39, 0x99, 0x5a, 0xce, 0x87, 0x79, 0xcb, 0xab, 0x7e, 0xae, 0x50, 0xff, 0x3d, 0x84, 0xb9, 0x79, 0x33, 0x1b, 0x9f, 0xf8, 0x1d, 0x67, 0x45, 0x9f, 0x89, 0xd4, 0x7c, 0xd2, 0x1e, 0x9d, 0x01, 0xcc, 0x25, 0x62, 0xa8, 0x10, 0x12, 0xcc, 0x31, 0x38, 0xaf, 0x27, 0x96, 0xba, 0xf4, 0xda, 0xc7, 0xa1, 0x0f, 0xcf, 0xd7, 0x08, 0x13, 0x8a, 0x7a, 0x5c, 0x7d, 0x32, 0xee, 0x21, 0x64, 0x11, 0x7e, 0x76, 0x92, 0x30, 0x46, 0xbe, 0x8f, 0xe0, 0x82, 0x12, 0x13, 0x1d, 0xe5, 0xb0, 0x7b, 0xeb, 0xe0, 0xad, 0x85, 0xb7, 0x23, 0xac, 0x09, 0x4c, 0xf9, 0x11, 0x50, 0x85, 0x84, 0x0f, 0xa1, 0x2e, 0xc4, 0x5b, 0xa1, 0x67, 0x9f, 0x01, 0x70, 0xd6, 0x63, 0xb5, 0x50, 0xe8, 0x87, 0x03, 0xda, 0xe3, 0x2b, 0x76, 0xbb, 0x17, 0x48, 0xa1, 0x21, 0x78, 0x45, 0x24, 0x34, 0x29, 0xe1, 0x3d, 0x85, 0x30, 0x49, 0x29, 0xc1, 0x85, 0x80, 0xf1, 0x23, 0xac, 0x76, 0x64, 0x3e, 0x23, 0x24, 0xbe, 0xfe, 0xbc, 0x0b, 0x46, 0x58, 0x48, 0xf7, 0xaa, 0x4f, 0x11, 0xcd, 0x32, 0x98, 0xc1, 0x54, 0x28, 0xeb, 0x25, 0x8a, 0xb2, 0x01, 0x67, 0x3b, 0x7a, 0xe6, 0x3c, 0x0b, 0xc6, 0x58, 0x23, 0xc6, 0xc1, 0x42, 0x6b, 0x0b, 0x95, 0xf1, 0x49, 0xe2, 0x9a, 0x5a, 0xd6, 0x25, 0xc0, 0x1c, 0xac, 0xd3, 0x70, 0xde, 0x5c, 0xde, 0x63, 0x82, 0x90, 0x59, 0x17, 0xa3, 0x70, 0x1d, 0xb9, 0xf6, 0x45, 0x25, 0xc0, 0x18, 0xd6, 0xd8, 0x80, 0x43, 0x25, 0x15, 0x2a, 0xc9, 0x51, 0x15, 0x12, 0x08, 0x04, 0x39, 0x61, 0x35, 0x2a, 0x59, 0xc0, 0x72, 0x0f, 0x58, 0x0d, 0x66, 0x19, 0x64, 0x0c, 0x30, 0x89, 0x37, 0xff, 0xe1, 0x70, 0x48, 0x19, 0xda, 0x31, 0xf6, 0x8d, 0x3e, 0xc8, 0xac, 0xe4, 0x78, 0x3c, 0x86, 0x08, 0x4e, 0x81, 0xf7, 0xef, 0x7f, 0xc4, 0xc3, 0xc3, 0x43, 0xf0, 0x2c, 0x67, 0x28, 0xcb, 0x2a, 0x19, 0xcc, 0xf4, 0x7d, 0x1f, 0x76, 0xa4, 0x74, 0x11, 0xf6, 0xfb, 0x3d, 0x0e, 0x87, 0x03, 0x5e, 0x5e, 0xc8, 0x48, 0x66, 0xbf, 0x3f, 0x82, 0x33, 0x05, 0xe7, 0x3c, 0x3e, 0x7c, 0xa0, 0x58, 0xd3, 0x18, 0xce, 0x42, 0xc1, 0xf2, 0xd1, 0x9a, 0x31, 0xc6, 0x81, 0xae, 0x92, 0x33, 0x5c, 0x94, 0x3d, 0x94, 0x65, 0x1d, 0x22, 0x41, 0x7b, 0xc0, 0x73, 0x8a, 0xf6, 0x2c, 0x1c, 0x18, 0x24, 0x9e, 0x1e, 0x77, 0xa8, 0xb7, 0x6b, 0x7c, 0x7f, 0x3a, 0xa0, 0xd7, 0x0c, 0xeb, 0xf5, 0x06, 0xaa, 0x22, 0xf1, 0xbf, 0x2c, 0xd7, 0xb8, 0xbb, 0xbb, 0xc3, 0xbf, 0x2c, 0x36, 0x78, 0x78, 0x78, 0xc0, 0x66, 0xb3, 0xa1, 0x43, 0x2d, 0x84, 0x49, 0xbc, 0xec, 0x5f, 0x60, 0x41, 0x37, 0x1b, 0x63, 0x0c, 0x45, 0x5d, 0x60, 0xc9, 0x97, 0x50, 0xc1, 0x39, 0x2f, 0x3e, 0x8c, 0xaf, 0xdf, 0x00, 0xef, 0x25, 0x44, 0x51, 0x42, 0x49, 0x05, 0x6d, 0x29, 0xb6, 0xcf, 0x1e, 0x2d, 0xb8, 0xec, 0xa1, 0xca, 0x0d, 0x1a, 0x55, 0x61, 0xb3, 0xd9, 0xe2, 0xee, 0xdd, 0x47, 0xac, 0x96, 0x5b, 0x58, 0x4f, 0x64, 0xb0, 0xc3, 0xb1, 0x47, 0x55, 0x55, 0x18, 0x47, 0x93, 0x60, 0xc7, 0xa2, 0x38, 0x91, 0x2a, 0x84, 0x10, 0x88, 0xbe, 0x11, 0xe7, 0x87, 0xf4, 0xc9, 0x42, 0x94, 0x0e, 0x3b, 0x9e, 0x82, 0x31, 0x72, 0xf6, 0xaf, 0x10, 0x2a, 0x34, 0x06, 0xc8, 0xe0, 0x39, 0x1e, 0x1e, 0xec, 0x10, 0x0e, 0x32, 0x0e, 0x67, 0x13, 0x59, 0x9e, 0x66, 0x47, 0xef, 0xf1, 0x34, 0xe5, 0xc8, 0x27, 0x5f, 0xf9, 0x29, 0x14, 0x9a, 0x13, 0xa2, 0xf2, 0x5d, 0xfb, 0xdc, 0x61, 0x73, 0x3a, 0x70, 0xfd, 0xdb, 0xce, 0x66, 0x93, 0xfd, 0x67, 0xbc, 0x47, 0x23, 0x3b, 0xb6, 0x28, 0xca, 0x8b, 0xfc, 0xe8, 0x7c, 0x0a, 0xd3, 0xfa, 0xa4, 0x4b, 0x8e, 0xfb, 0xe0, 0x68, 0xd7, 0x5b, 0xd7, 0x35, 0x9a, 0xc5, 0x3f, 0xa2, 0xae, 0x5f, 0x50, 0x55, 0x2f, 0x30, 0x4e, 0x07, 0xb2, 0xe5, 0x0a, 0x8b, 0xd5, 0x06, 0x4d, 0xb3, 0x04, 0x47, 0x01, 0x70, 0x11, 0x74, 0xea, 0x2c, 0xed, 0x9c, 0xb9, 0x14, 0xe4, 0xe7, 0x9e, 0xd6, 0x1a, 0xa7, 0xf0, 0x11, 0xb2, 0x54, 0x45, 0x92, 0x33, 0xe6, 0x8d, 0x4e, 0xfe, 0x1e, 0x4b, 0x29, 0x63, 0xb2, 0xe4, 0x45, 0xa3, 0x73, 0x2d, 0x30, 0x65, 0x3a, 0x3d, 0x72, 0x2e, 0x7f, 0x31, 0x01, 0x6c, 0x4e, 0x3e, 0x35, 0x6d, 0x9e, 0x62, 0xd3, 0x93, 0xa3, 0x74, 0x39, 0x99, 0x6e, 0xba, 0xda, 0x48, 0x5f, 0xc7, 0xa5, 0x39, 0x3c, 0xf3, 0x19, 0xcf, 0x48, 0x90, 0x4c, 0x04, 0xe7, 0x31, 0x32, 0xb5, 0xe1, 0x4c, 0x64, 0x6a, 0x02, 0x96, 0xcc, 0x6e, 0x38, 0xe7, 0x29, 0x38, 0xc6, 0x58, 0x03, 0x1f, 0x94, 0x0a, 0xd6, 0x18, 0x30, 0x38, 0xf0, 0x00, 0x63, 0x32, 0x70, 0x08, 0xce, 0xce, 0x56, 0x2e, 0x79, 0xa0, 0x49, 0xfe, 0xde, 0x46, 0x2e, 0xca, 0x1c, 0xe4, 0x3e, 0xf7, 0x5e, 0xce, 0x15, 0xc7, 0x3c, 0x1c, 0x27, 0xdf, 0xa7, 0xc7, 0xe6, 0xc3, 0xc1, 0x5d, 0xd5, 0x9d, 0x5f, 0x43, 0xa6, 0xf2, 0xa6, 0x4d, 0x0a, 0x76, 0x75, 0xf7, 0x7d, 0x2d, 0xb2, 0x75, 0xca, 0x11, 0x78, 0x8b, 0x83, 0x32, 0xcd, 0x62, 0xbf, 0x4c, 0xec, 0x4b, 0x9f, 0x99, 0xc5, 0xce, 0x72, 0xb0, 0x2b, 0x5e, 0x07, 0xa7, 0xd5, 0x88, 0x05, 0xb7, 0x0c, 0x52, 0x12, 0xf2, 0xe2, 0xc1, 0xe1, 0x12, 0xc2, 0x48, 0x30, 0x3f, 0x49, 0x47, 0x79, 0x2a, 0x90, 0x91, 0x65, 0x1e, 0x4d, 0x8c, 0x8c, 0x05, 0x20, 0x15, 0xbc, 0xd5, 0x30, 0x9e, 0x20, 0x7c, 0x21, 0x3d, 0x0a, 0x55, 0x40, 0x70, 0x7a, 0x9f, 0xdb, 0xc3, 0x0b, 0xb8, 0x24, 0xb9, 0x97, 0x77, 0xe4, 0x3a, 0xa7, 0x0a, 0x09, 0x06, 0x42, 0x6c, 0x39, 0x1c, 0xc6, 0xae, 0x45, 0x7b, 0xd8, 0xa1, 0x6f, 0x0f, 0x14, 0xa2, 0xc2, 0x0c, 0x9a, 0x86, 0x48, 0xd3, 0xd6, 0x51, 0xd8, 0x8c, 0x75, 0x0c, 0xbd, 0xd6, 0x68, 0xbb, 0x16, 0xfd, 0x78, 0x84, 0x90, 0x40, 0x55, 0x15, 0x30, 0x28, 0x21, 0xa4, 0x42, 0x15, 0x78, 0x4c, 0x29, 0xbd, 0x2f, 0xc4, 0xea, 0xd6, 0xcd, 0x8a, 0x56, 0xac, 0x06, 0xc0, 0xa0, 0x21, 0x44, 0x89, 0xf5, 0x9a, 0x6c, 0xc1, 0xbd, 0x01, 0x9a, 0xd5, 0x1a, 0x36, 0x73, 0xc0, 0xab, 0xea, 0x3a, 0x0d, 0x64, 0xc7, 0x7e, 0xc0, 0x4d, 0xb3, 0x08, 0x5f, 0xef, 0x94, 0x42, 0x78, 0xa6, 0xc2, 0xd0, 0x1a, 0x28, 0x48, 0x94, 0x28, 0x45, 0x01, 0x2f, 0x28, 0xfc, 0xc8, 0x32, 0x1b, 0x06, 0xbc, 0xa0, 0x38, 0x83, 0x07, 0x13, 0x80, 0xe4, 0xb4, 0xfe, 0xe6, 0x8c, 0x43, 0x78, 0xc0, 0xb7, 0x2d, 0x8a, 0x42, 0xc2, 0x0a, 0x06, 0x94, 0x25, 0xca, 0xa6, 0x86, 0xec, 0x7a, 0x0a, 0xc5, 0x68, 0xc2, 0xee, 0xdb, 0xc3, 0xc2, 0xd8, 0x11, 0x65, 0x59, 0xe0, 0x87, 0x4f, 0xbf, 0x86, 0xb5, 0x16, 0xdf, 0xbe, 0x7d, 0x4b, 0x9e, 0xe9, 0xf1, 0xa1, 0x51, 0x4a, 0x25, 0xdb, 0xd7, 0xc8, 0x8c, 0x8d, 0x7b, 0x82, 0x78, 0x90, 0x2b, 0x59, 0xc1, 0x68, 0x07, 0xc1, 0x25, 0xed, 0xcf, 0x3d, 0x31, 0x9f, 0x9f, 0x1e, 0xbf, 0xe2, 0xe9, 0xf1, 0x05, 0x9e, 0x21, 0x39, 0xb5, 0x1d, 0xda, 0x43, 0x32, 0xa7, 0xb9, 0xbd, 0xbd, 0xc5, 0xdd, 0xe6, 0x0e, 0xed, 0xee, 0x08, 0x3d, 0x9a, 0xf4, 0xc0, 0x8f, 0x83, 0x86, 0xcf, 0xfc, 0x9b, 0x8d, 0x70, 0xb0, 0x9e, 0xc1, 0x84, 0x3f, 0x93, 0x42, 0x81, 0x4b, 0xda, 0x2b, 0xef, 0x0e, 0x1d, 0xaa, 0xed, 0x1d, 0x9e, 0x9f, 0x5b, 0x3c, 0x3c, 0x1c, 0xb0, 0x5a, 0x1d, 0xb1, 0x5a, 0xad, 0x50, 0x96, 0x35, 0xba, 0x8e, 0xe1, 0x70, 0x70, 0xf8, 0x70, 0xf3, 0xbf, 0xa2, 0xe6, 0xaf, 0x38, 0x3c, 0x12, 0xac, 0x5f, 0xd7, 0x35, 0x54, 0x51, 0xe0, 0xc3, 0x36, 0x44, 0xc1, 0xd6, 0xfa, 0x62, 0x47, 0x96, 0x4f, 0x53, 0xef, 0xd6, 0x0f, 0xd8, 0xed, 0x5f, 0x70, 0x6c, 0xdb, 0x30, 0x91, 0x3a, 0x6c, 0x36, 0x6b, 0x54, 0x75, 0x89, 0x66, 0xb9, 0x04, 0x17, 0x4d, 0xb0, 0x1c, 0xe4, 0x68, 0x3b, 0x0f, 0x63, 0x07, 0x30, 0xae, 0xc0, 0x50, 0xa0, 0x2c, 0x1b, 0x0a, 0x3c, 0xb1, 0x2e, 0x59, 0xca, 0xc6, 0x09, 0x86, 0xbe, 0x16, 0x4d, 0xd4, 0xd3, 0x5c, 0xe6, 0x38, 0x4d, 0x19, 0x63, 0x50, 0x96, 0xf5, 0xc5, 0x43, 0x1d, 0x0f, 0xe8, 0xf8, 0x39, 0xf9, 0x81, 0x3c, 0x4d, 0x7e, 0xca, 0xd9, 0xc1, 0x11, 0xfe, 0x8c, 0x84, 0x3c, 0xf2, 0xe3, 0x2f, 0x2f, 0x8a, 0x4d, 0x3e, 0xa1, 0x38, 0xeb, 0x2e, 0x88, 0x6b, 0xf9, 0xa4, 0x44, 0x8d, 0x99, 0xbb, 0x20, 0xcb, 0xe5, 0xe1, 0x24, 0xd3, 0x69, 0x69, 0x2a, 0x1b, 0xca, 0x1b, 0x99, 0x7c, 0x4a, 0x8c, 0x93, 0xe1, 0x94, 0x85, 0x9d, 0xef, 0x6e, 0xc7, 0xd0, 0xb0, 0xe4, 0xc8, 0x43, 0x7e, 0xf0, 0x57, 0xe5, 0x47, 0x30, 0xd4, 0x90, 0x72, 0x09, 0x21, 0x3d, 0xea, 0x10, 0x34, 0x24, 0x84, 0x02, 0xb8, 0x80, 0x19, 0xb3, 0xf0, 0x94, 0x18, 0xe0, 0x82, 0x30, 0x51, 0x4c, 0x76, 0xf8, 0x84, 0x1a, 0xb0, 0x04, 0x25, 0x4e, 0x77, 0xfe, 0xf9, 0xf7, 0x4e, 0xd3, 0x68, 0xb8, 0x76, 0x39, 0xaa, 0x90, 0x9b, 0xa4, 0xe4, 0x8a, 0x85, 0x29, 0x43, 0x3b, 0x76, 0xee, 0xd7, 0x20, 0xd5, 0x38, 0xa1, 0x5f, 0x47, 0x47, 0x68, 0x27, 0x19, 0x77, 0xd9, 0x73, 0x9c, 0x8b, 0xd8, 0x58, 0xe6, 0x69, 0x68, 0x27, 0x2b, 0x5e, 0x96, 0xd6, 0x45, 0x97, 0xcd, 0xc4, 0x09, 0xf1, 0xc9, 0x6d, 0x79, 0xe3, 0x21, 0x7f, 0xfe, 0x5a, 0x4e, 0x01, 0x24, 0xd6, 0xba, 0xe0, 0x8b, 0xed, 0xc3, 0xf7, 0x3d, 0x41, 0xa2, 0xce, 0xc5, 0x06, 0xf1, 0xd4, 0x98, 0x46, 0x4b, 0xe7, 0x29, 0xf2, 0x30, 0x47, 0x0a, 0x7d, 0x6b, 0x87, 0x3e, 0x6d, 0x72, 0xe6, 0x88, 0x71, 0x73, 0xee, 0x6d, 0xd6, 0xdb, 0xd9, 0x15, 0xd1, 0xb5, 0x22, 0x7b, 0xd1, 0x7c, 0xf9, 0xf9, 0x68, 0xd0, 0xf8, 0x91, 0x27, 0xf3, 0x5d, 0xe3, 0x98, 0xcc, 0xad, 0x03, 0xae, 0xc1, 0xeb, 0xd3, 0xaf, 0xe5, 0x3c, 0xb9, 0xfd, 0xd0, 0xa7, 0xfb, 0xf0, 0xde, 0xc6, 0xfb, 0x37, 0x18, 0xef, 0xc0, 0x9f, 0x3d, 0xd7, 0xe9, 0x8c, 0x00, 0xb0, 0x5e, 0x34, 0xf0, 0x70, 0x44, 0xe8, 0x12, 0x2c, 0xb0, 0xdd, 0x11, 0x56, 0x72, 0xe1, 0x7d, 0xf2, 0x86, 0x9c, 0xcc, 0xdc, 0x49, 0x71, 0xc1, 0x02, 0x9b, 0x5e, 0xc2, 0xc1, 0x3a, 0x47, 0xae, 0x72, 0x30, 0x34, 0xcd, 0x32, 0x07, 0xab, 0x47, 0x58, 0xa7, 0x31, 0x1c, 0xf7, 0xe9, 0x1a, 0x8f, 0x9a, 0x52, 0xff, 0x8a, 0xa1, 0x49, 0x3e, 0xff, 0xdf, 0xf7, 0x2f, 0xe8, 0xfa, 0x3d, 0xda, 0xc3, 0x31, 0x4c, 0xe1, 0x91, 0xb4, 0x2c, 0xd0, 0x34, 0x0c, 0xb7, 0xb7, 0x77, 0xf0, 0xd1, 0x66, 0xda, 0x68, 0x30, 0x21, 0xc1, 0x06, 0x05, 0xa1, 0xc8, 0xc2, 0x7c, 0xf9, 0xfe, 0xc3, 0xa9, 0x01, 0xf4, 0xe2, 0xec, 0x6c, 0xb5, 0xd6, 0xc2, 0x31, 0x09, 0x67, 0x41, 0x7e, 0xf5, 0x60, 0xe0, 0x4a, 0x62, 0xb5, 0xdc, 0x24, 0xab, 0xf2, 0x77, 0x77, 0x1f, 0xb1, 0x68, 0x36, 0xe9, 0x7d, 0x8d, 0x0e, 0xaa, 0x8f, 0x8f, 0x8f, 0xe8, 0x3b, 0x93, 0x21, 0x90, 0x48, 0x9c, 0x84, 0xd8, 0x48, 0x31, 0x46, 0x03, 0x8d, 0xd1, 0x0e, 0xcc, 0x3b, 0x38, 0x43, 0x92, 0xc0, 0x51, 0x1b, 0x38, 0x06, 0x98, 0xd2, 0x81, 0x31, 0x47, 0x5e, 0x7d, 0x8c, 0xfc, 0xf5, 0x47, 0x4f, 0xe1, 0x66, 0x85, 0xf3, 0x50, 0x52, 0xe1, 0xe6, 0xee, 0x1d, 0x78, 0xa1, 0xf0, 0xd2, 0x1e, 0xa0, 0xfb, 0x01, 0xa2, 0x59, 0x42, 0xae, 0x56, 0xab, 0xc4, 0x6a, 0x8d, 0xa6, 0xf0, 0x34, 0x2d, 0x16, 0xf8, 0xfc, 0xf9, 0x33, 0xea, 0xba, 0xa6, 0xec, 0x6c, 0x63, 0xb0, 0xdd, 0x6e, 0xb1, 0x5c, 0x2e, 0x53, 0x00, 0xcb, 0xf1, 0xd8, 0xa1, 0x28, 0xaa, 0xe4, 0x7f, 0x1e, 0x27, 0x47, 0xa5, 0x14, 0xaa, 0xaa, 0x49, 0x90, 0x70, 0x64, 0xbd, 0x13, 0x73, 0x5d, 0xa7, 0xc0, 0x17, 0x26, 0x38, 0x5e, 0x5e, 0x5e, 0xf0, 0xf2, 0x72, 0xc0, 0x7e, 0x7f, 0x80, 0x0a, 0x5e, 0xb6, 0x31, 0x60, 0xe5, 0x57, 0x9f, 0x7e, 0x1d, 0xf6, 0xc9, 0xf4, 0xa0, 0x1f, 0x0e, 0x6d, 0x6a, 0x2a, 0x84, 0x10, 0x60, 0x92, 0x26, 0xf7, 0xb2, 0xac, 0x71, 0x3c, 0xb4, 0xe8, 0xfb, 0x11, 0x3e, 0xc0, 0x43, 0xde, 0x09, 0x3c, 0x3e, 0xec, 0xb0, 0x5a, 0xad, 0x50, 0x57, 0x8b, 0xb0, 0x73, 0x2b, 0x50, 0x16, 0x4b, 0x14, 0xaa, 0x46, 0xdf, 0x59, 0x1c, 0xaa, 0x47, 0x2c, 0x37, 0x35, 0x5e, 0x5f, 0x5b, 0x48, 0x09, 0x1c, 0xba, 0x47, 0xf4, 0xcf, 0x3d, 0x3e, 0x7c, 0xf8, 0x10, 0x88, 0x0f, 0x7c, 0xf2, 0x50, 0xd0, 0x21, 0x46, 0x1f, 0x40, 0xb3, 0x78, 0x0f, 0x55, 0xd4, 0x58, 0xad, 0x46, 0x08, 0x45, 0x07, 0xfa, 0x60, 0x08, 0x7a, 0x22, 0x73, 0x97, 0x05, 0x5c, 0xcd, 0x49, 0x4b, 0xcd, 0x25, 0xac, 0xe3, 0x18, 0x06, 0x0d, 0x6d, 0x48, 0xf6, 0xa4, 0x24, 0x4f, 0x1d, 0x5d, 0x5e, 0xb4, 0xe3, 0x81, 0x16, 0x65, 0x6b, 0x71, 0x3a, 0xa6, 0xc3, 0xca, 0xa5, 0xd7, 0x40, 0x46, 0x2b, 0xe6, 0x8c, 0xf9, 0x9e, 0x13, 0xd4, 0xa6, 0x86, 0x21, 0xf1, 0x70, 0x8d, 0x07, 0x81, 0x50, 0xe2, 0xec, 0xd0, 0x88, 0x87, 0xe2, 0x09, 0xba, 0x57, 0x67, 0x32, 0xa0, 0x9c, 0x60, 0x76, 0xf2, 0x82, 0xc6, 0xd9, 0x84, 0xf7, 0xd6, 0x2e, 0x77, 0xba, 0x4f, 0x8c, 0xc9, 0x63, 0xd3, 0x1d, 0x64, 0x0e, 0xb7, 0xc7, 0x9f, 0x2b, 0x16, 0x96, 0x1c, 0xf2, 0x8d, 0x09, 0x77, 0x39, 0xe1, 0x24, 0x87, 0x98, 0x73, 0x92, 0x5c, 0x5e, 0x10, 0x23, 0x6c, 0x3f, 0x6a, 0x0b, 0xad, 0x39, 0x9c, 0x15, 0x90, 0x05, 0x39, 0xd2, 0xa9, 0xa2, 0x49, 0xef, 0x33, 0x99, 0xd3, 0x48, 0x42, 0x26, 0x41, 0xd7, 0xd1, 0xb8, 0xb8, 0x7a, 0x30, 0x10, 0x4c, 0x9d, 0x11, 0xd4, 0x22, 0x5c, 0x6d, 0x9d, 0x3e, 0x83, 0xb1, 0xe7, 0xa6, 0xc3, 0xa8, 0xf3, 0xe7, 0x82, 0x9f, 0x18, 0xb9, 0xa1, 0x91, 0x32, 0xc6, 0x03, 0x36, 0xc8, 0xe0, 0xa2, 0x35, 0x6c, 0x0c, 0xaa, 0x08, 0x48, 0x00, 0xe3, 0x3e, 0xc5, 0xaf, 0x4e, 0x15, 0x01, 0x39, 0x4c, 0x9e, 0x37, 0x73, 0xd3, 0xe6, 0xca, 0xb8, 0x53, 0x51, 0x9c, 0x92, 0xd8, 0xe6, 0x27, 0xb3, 0x29, 0x62, 0xc4, 0xaf, 0x92, 0x25, 0xa3, 0x95, 0x74, 0xde, 0x2c, 0xe4, 0x41, 0x35, 0x31, 0x65, 0x6b, 0xce, 0x77, 0x3d, 0xde, 0x23, 0x91, 0x3d, 0x3c, 0x97, 0x8b, 0x1d, 0x77, 0x91, 0x71, 0x85, 0x31, 0x95, 0x7d, 0x45, 0xce, 0xcf, 0x2f, 0xb9, 0xcd, 0x5d, 0x2b, 0xf2, 0x79, 0x23, 0x7d, 0xcd, 0x24, 0xc6, 0xc1, 0x5d, 0x70, 0x3b, 0xa6, 0x4d, 0xf3, 0x35, 0xdb, 0x55, 0xfa, 0x62, 0xf6, 0xcd, 0xb8, 0xd6, 0xd9, 0x7d, 0xf7, 0xd9, 0x6b, 0xf4, 0x67, 0xce, 0x7c, 0x27, 0xef, 0xfc, 0x3c, 0xb5, 0x0e, 0x67, 0xcd, 0x6f, 0xfe, 0x31, 0x8c, 0x2e, 0x10, 0x33, 0xa7, 0x3f, 0x7b, 0xf6, 0xbd, 0xf9, 0xb9, 0xe7, 0xc7, 0xa9, 0x69, 0x72, 0xe8, 0x87, 0x2e, 0xe3, 0xd8, 0x38, 0x08, 0xc9, 0xc0, 0x9c, 0x48, 0x2a, 0x06, 0x6d, 0xa2, 0xbd, 0xf1, 0xb9, 0xfb, 0x9f, 0x14, 0x92, 0xbc, 0xa9, 0x02, 0xf1, 0xd3, 0xd8, 0x11, 0x76, 0x1c, 0x88, 0xdc, 0xb6, 0x7f, 0xc6, 0xd3, 0xf3, 0x03, 0x8e, 0xbb, 0x57, 0x18, 0xd3, 0x06, 0xa4, 0xd2, 0xa3, 0x0f, 0xcd, 0x79, 0x51, 0x35, 0x89, 0x58, 0xbd, 0x52, 0x8a, 0x1c, 0xdf, 0xa4, 0xc1, 0x66, 0xb5, 0x85, 0x28, 0x3c, 0x86, 0xe1, 0x08, 0xce, 0x09, 0x6a, 0x2f, 0x54, 0x05, 0xcf, 0x05, 0x29, 0x28, 0xb8, 0x82, 0x03, 0x27, 0x8b, 0xd5, 0x42, 0xa0, 0x6a, 0x2a, 0x94, 0x62, 0x7d, 0x92, 0x1d, 0x1b, 0x92, 0xad, 0x99, 0x91, 0x54, 0x2b, 0xce, 0x39, 0x8c, 0x8e, 0x02, 0x53, 0x2a, 0x49, 0xf9, 0x26, 0xc6, 0x3b, 0xb2, 0xc9, 0x4d, 0xd1, 0xb5, 0x02, 0x4a, 0x95, 0xe9, 0x3e, 0x5b, 0x2c, 0x16, 0xc1, 0x43, 0xe5, 0x90, 0xf2, 0x38, 0xe6, 0xe4, 0x84, 0xa7, 0xf3, 0xb5, 0x0c, 0x16, 0xda, 0x1a, 0xe3, 0x30, 0xc0, 0x5a, 0x0d, 0x6d, 0x0d, 0xb8, 0xe2, 0x28, 0xeb, 0x0a, 0x55, 0x58, 0x1d, 0x28, 0x25, 0x50, 0x0a, 0x40, 0x82, 0xc8, 0x78, 0x8d, 0x94, 0x58, 0xd5, 0x15, 0xbe, 0x7f, 0xf9, 0x33, 0x9a, 0xf5, 0x06, 0x8e, 0x0b, 0x2c, 0x37, 0x1b, 0xdc, 0x7d, 0xf8, 0x00, 0xd9, 0x1e, 0x7b, 0x34, 0x4d, 0x03, 0x55, 0x95, 0x94, 0xdf, 0x5a, 0x36, 0x28, 0x8b, 0x3a, 0x40, 0x60, 0xf4, 0x50, 0xdc, 0xdd, 0xdd, 0xa1, 0xaa, 0xaa, 0xe4, 0x18, 0xb7, 0xd9, 0x6c, 0x28, 0x06, 0xb5, 0xa5, 0x82, 0xfc, 0xfc, 0xb4, 0x43, 0xd7, 0x8e, 0xa9, 0xdb, 0xd1, 0x63, 0xd0, 0xa5, 0x1b, 0x96, 0xf4, 0xc8, 0xc6, 0x38, 0x28, 0xd9, 0xe0, 0xf5, 0xa5, 0x45, 0xd7, 0x1a, 0xac, 0x56, 0x35, 0x44, 0x29, 0xd0, 0xac, 0x57, 0xe8, 0x9f, 0x5e, 0x61, 0x0c, 0xb0, 0xda, 0x36, 0x58, 0x2d, 0x96, 0x49, 0xa7, 0xbe, 0x6f, 0x8f, 0x49, 0x22, 0x28, 0x3f, 0x2c, 0xae, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xf7, 0xe5, 0xf1, 0x3b, 0xca, 0x45, 0x8d, 0x97, 0xc3, 0x1e, 0xfb, 0xfd, 0x9e, 0xf2, 0xca, 0xeb, 0x1f, 0x43, 0xae, 0xf9, 0x0d, 0x56, 0xdb, 0x02, 0xfa, 0xe9, 0x09, 0xc7, 0x03, 0xb9, 0xd6, 0x35, 0x4d, 0x83, 0xdf, 0xff, 0xf3, 0xbf, 0x10, 0x39, 0x2d, 0xe8, 0xd6, 0xa5, 0x28, 0x92, 0xd3, 0x18, 0x85, 0x75, 0xdc, 0xa1, 0x3f, 0x02, 0x5e, 0xac, 0xa1, 0xad, 0x83, 0xe3, 0x0e, 0xbc, 0x72, 0x78, 0xd8, 0xb1, 0x04, 0x99, 0xce, 0xed, 0xa4, 0xe2, 0x47, 0x6f, 0x9f, 0xe0, 0x8b, 0x35, 0xa4, 0xf2, 0xe9, 0x91, 0x92, 0x3c, 0x10, 0xb2, 0xac, 0x85, 0x54, 0x6b, 0x30, 0x47, 0x28, 0x82, 0x77, 0xe4, 0x5e, 0xa6, 0x0a, 0x92, 0x63, 0x68, 0xad, 0x31, 0x0e, 0x31, 0xff, 0x57, 0xc1, 0x59, 0x0f, 0x3d, 0x7a, 0x2c, 0x97, 0xcb, 0xc4, 0x47, 0xb0, 0xce, 0x27, 0x39, 0xd4, 0x49, 0x13, 0x4b, 0x0f, 0x32, 0xe7, 0x27, 0x58, 0x34, 0xcf, 0x55, 0x9e, 0xe6, 0x4a, 0xc7, 0x9f, 0x21, 0x1e, 0x3c, 0xd1, 0xb8, 0x87, 0x08, 0x5b, 0x1c, 0x5a, 0xfb, 0xf0, 0xf5, 0x15, 0x00, 0x8b, 0x71, 0x8c, 0x4e, 0x81, 0x1e, 0x7a, 0x1c, 0xb2, 0x49, 0x2a, 0x90, 0xa0, 0x1c, 0xa3, 0xe8, 0x56, 0xa3, 0xc1, 0x98, 0xb9, 0xea, 0x82, 0x15, 0x5f, 0xcf, 0x34, 0x1c, 0x23, 0xb7, 0xfa, 0x54, 0x8a, 0x5d, 0xd8, 0x76, 0x4e, 0x19, 0xd7, 0xb1, 0x99, 0xc8, 0x35, 0xec, 0xa7, 0x03, 0xdc, 0x06, 0xd2, 0xdb, 0x80, 0x61, 0x38, 0x91, 0xa8, 0x28, 0x60, 0x48, 0x41, 0xa9, 0x26, 0x48, 0x0c, 0x83, 0xdd, 0x63, 0x16, 0xd4, 0x33, 0x0c, 0x06, 0xdd, 0xe8, 0x60, 0x20, 0x21, 0xcb, 0x15, 0x8a, 0x52, 0x82, 0xb1, 0x12, 0xce, 0x92, 0x53, 0x1e, 0x67, 0x00, 0x13, 0x0d, 0xb4, 0xb5, 0x94, 0xa4, 0x24, 0x38, 0xb4, 0x1e, 0xe0, 0xec, 0x08, 0xce, 0x2c, 0x9c, 0xd5, 0xf0, 0x96, 0xa5, 0xd7, 0x41, 0xd7, 0x00, 0xc9, 0xeb, 0x20, 0x46, 0xe2, 0xe6, 0x45, 0x23, 0x47, 0x18, 0xc6, 0x71, 0x44, 0x53, 0xa8, 0x33, 0x06, 0x7e, 0x6c, 0x56, 0xe2, 0x8a, 0x20, 0x0f, 0x3e, 0x8a, 0xa1, 0x49, 0xf1, 0x5a, 0x93, 0x0c, 0x2f, 0x97, 0xf1, 0xd1, 0xaa, 0x66, 0xe8, 0x4f, 0xae, 0x88, 0x55, 0xd5, 0x9c, 0x1d, 0x22, 0xa4, 0x84, 0xe0, 0x28, 0xc2, 0xf7, 0x35, 0xce, 0xcf, 0x4a, 0x1a, 0xa7, 0xba, 0xe9, 0x3c, 0x72, 0x38, 0xbf, 0x97, 0xa4, 0xac, 0x92, 0xea, 0x23, 0xf1, 0x07, 0x52, 0x81, 0x3b, 0x05, 0x7b, 0xc4, 0xc6, 0xcf, 0x7b, 0x04, 0x29, 0x1b, 0x79, 0xe2, 0x77, 0xdd, 0x90, 0x45, 0x36, 0xb3, 0xf0, 0x5c, 0xb2, 0xb4, 0x52, 0x8b, 0xd6, 0xb4, 0xd1, 0x22, 0x76, 0x6a, 0x49, 0x1b, 0x25, 0x53, 0x73, 0x72, 0xbd, 0xd8, 0xfc, 0x5d, 0x83, 0xab, 0xa7, 0xf2, 0xb5, 0xb9, 0x0c, 0xf5, 0x3c, 0x67, 0x7d, 0xca, 0x50, 0xb6, 0xd6, 0x42, 0xa8, 0xf9, 0x95, 0xd2, 0xd4, 0xe2, 0x77, 0x4e, 0x19, 0x12, 0x77, 0x16, 0xd3, 0xec, 0xf3, 0xfc, 0x67, 0x9c, 0x36, 0x32, 0xd3, 0xe2, 0x30, 0x6d, 0x38, 0xa6, 0xe7, 0xd3, 0x94, 0x43, 0x70, 0xf1, 0x1a, 0xb8, 0x48, 0x61, 0x2b, 0x2e, 0x11, 0x13, 0x05, 0x18, 0x48, 0x87, 0xcd, 0xe0, 0x60, 0xad, 0x81, 0x36, 0x06, 0xde, 0x13, 0x09, 0x8f, 0x73, 0x81, 0xfd, 0xbe, 0x47, 0xdf, 0x1f, 0xb0, 0x68, 0xc8, 0x27, 0x9d, 0x07, 0x0b, 0xe8, 0x93, 0xcc, 0x8e, 0xc3, 0x1a, 0xc0, 0x73, 0x8d, 0x61, 0x30, 0x64, 0x54, 0xc4, 0x96, 0x58, 0x34, 0x1e, 0xbe, 0x89, 0xdc, 0x0f, 0x22, 0xe5, 0x32, 0xee, 0x50, 0x95, 0x0a, 0x8f, 0x5f, 0x77, 0xf8, 0xbf, 0xff, 0xaf, 0xff, 0x82, 0xdf, 0xfc, 0xfa, 0x3d, 0x7e, 0xfe, 0xe9, 0x8f, 0x68, 0x6a, 0x5a, 0x69, 0x78, 0x47, 0x84, 0xb9, 0x66, 0x21, 0xd0, 0x34, 0x4b, 0x54, 0xa5, 0x84, 0x31, 0x40, 0xd7, 0x3a, 0xb0, 0x10, 0xce, 0x64, 0xed, 0x88, 0xbe, 0x1f, 0x01, 0x58, 0x54, 0x75, 0x81, 0x4a, 0x2d, 0x61, 0x7b, 0x06, 0xeb, 0x1a, 0x0c, 0xc3, 0x18, 0x1c, 0x19, 0x39, 0xac, 0x93, 0xb0, 0x5a, 0x90, 0x13, 0x9c, 0xe6, 0xd0, 0x4e, 0xa5, 0x86, 0xc4, 0x39, 0x0e, 0xe3, 0x2c, 0x46, 0x18, 0x18, 0xe6, 0x61, 0xe1, 0x20, 0x3d, 0x87, 0xe0, 0x02, 0xc7, 0xfd, 0x2b, 0x16, 0x8b, 0x05, 0xbc, 0x1d, 0xa0, 0x0a, 0x89, 0xb6, 0xdf, 0x43, 0x28, 0x0d, 0xef, 0x28, 0x48, 0x05, 0x60, 0x28, 0x0b, 0x05, 0xef, 0x38, 0xcc, 0xd0, 0xa3, 0x94, 0x24, 0xe7, 0xf6, 0x96, 0xc3, 0x58, 0x92, 0x77, 0x0b, 0x26, 0xa1, 0x75, 0x1b, 0xc8, 0x94, 0x0c, 0xd6, 0x8c, 0x18, 0x86, 0x1e, 0x92, 0x71, 0x38, 0xe3, 0xe1, 0xc6, 0x01, 0x66, 0xb4, 0x90, 0x4a, 0xa2, 0xe0, 0x35, 0x30, 0x72, 0xa8, 0x6d, 0x71, 0xe2, 0x44, 0x71, 0x86, 0x97, 0xe7, 0x27, 0x80, 0x09, 0x0c, 0xa3, 0xc3, 0xa2, 0x12, 0xd0, 0xff, 0xf8, 0xbf, 0x60, 0x2f, 0x19, 0x64, 0x29, 0x31, 0xd4, 0x12, 0x3f, 0x73, 0x46, 0xb2, 0xb5, 0x18, 0xf7, 0x19, 0x03, 0x52, 0xe2, 0xa1, 0xf9, 0xf3, 0xcf, 0xdf, 0x71, 0x38, 0x1c, 0xd3, 0xcd, 0x45, 0xbb, 0xf0, 0x03, 0x18, 0xe3, 0x68, 0x9a, 0x05, 0xbc, 0x25, 0xf3, 0x07, 0xda, 0x8d, 0xbf, 0x40, 0x6b, 0x8d, 0xa6, 0x69, 0x92, 0xb6, 0xfb, 0xe6, 0x86, 0xc2, 0x4f, 0x8e, 0xed, 0x1e, 0xdf, 0xbe, 0x7d, 0x4b, 0x5a, 0xf5, 0xf5, 0x7a, 0x8d, 0x4f, 0x3f, 0x7c, 0xc0, 0x7e, 0x38, 0x60, 0xb1, 0x58, 0x60, 0xbd, 0x5e, 0xc3, 0x85, 0xaf, 0x3f, 0xf4, 0x23, 0xba, 0x61, 0x84, 0x67, 0xb4, 0x9f, 0x79, 0x7e, 0x3d, 0x42, 0x6b, 0x22, 0xc5, 0x1d, 0x8e, 0x03, 0x0e, 0x87, 0x03, 0xc0, 0x05, 0xca, 0x6a, 0x8d, 0xd7, 0x97, 0x36, 0x64, 0x6d, 0xd7, 0xf8, 0xf0, 0xfe, 0x13, 0x7e, 0xf8, 0xf4, 0x1b, 0x30, 0x88, 0xf4, 0x1a, 0x46, 0xaf, 0x52, 0x4c, 0xa2, 0xe0, 0x94, 0x0c, 0x46, 0xd0, 0xf2, 0x88, 0x51, 0x58, 0x00, 0x27, 0xaf, 0x6b, 0x29, 0xc5, 0x99, 0xee, 0x9b, 0x7e, 0xd5, 0x93, 0x62, 0x7e, 0x7e, 0xf0, 0xc5, 0x25, 0xe2, 0x14, 0xd2, 0x26, 0x92, 0x8f, 0x0a, 0x44, 0x34, 0x9a, 0xb4, 0x1c, 0x63, 0x41, 0xd6, 0x20, 0x20, 0x05, 0x69, 0x6e, 0xad, 0x19, 0x2f, 0x88, 0x6c, 0xa7, 0xc3, 0x8a, 0x5c, 0x83, 0xa6, 0x4c, 0xe4, 0xa9, 0x14, 0x68, 0x8e, 0x05, 0x3e, 0x57, 0x40, 0xf2, 0xa2, 0x1f, 0x61, 0x33, 0x04, 0x9d, 0x76, 0x6e, 0x87, 0x3b, 0xe7, 0x7e, 0x95, 0x43, 0xdf, 0xf9, 0xeb, 0xc9, 0xa7, 0x92, 0x7c, 0x02, 0x3c, 0x85, 0x87, 0x8c, 0x67, 0x07, 0xd3, 0xb9, 0xe4, 0xe8, 0xe4, 0x25, 0x3e, 0x75, 0x58, 0x3b, 0x4f, 0xf4, 0xf2, 0x67, 0x30, 0x6a, 0x8e, 0x64, 0x4c, 0xa7, 0xd2, 0x78, 0xad, 0xe2, 0x64, 0x68, 0x8c, 0xbf, 0x60, 0x86, 0x9f, 0x1f, 0x80, 0x34, 0x81, 0xc7, 0xb4, 0xa9, 0x28, 0xdd, 0x8b, 0xaf, 0xc5, 0x04, 0xa2, 0xcc, 0xc9, 0x76, 0xd3, 0x05, 0x86, 0x2d, 0x75, 0xea, 0xec, 0x4a, 0x8c, 0x66, 0xbc, 0x3f, 0xa6, 0xd6, 0xa7, 0xb9, 0x5c, 0x2b, 0x72, 0x25, 0xe6, 0xe0, 0xe0, 0x58, 0x54, 0x73, 0x63, 0x9d, 0xd8, 0x1c, 0xe4, 0xcd, 0xcd, 0x54, 0x9a, 0x15, 0xaf, 0x63, 0x6a, 0x00, 0x98, 0x9a, 0x75, 0xdc, 0x4a, 0xbb, 0x71, 0xa9, 0xce, 0x8a, 0x5b, 0xfc, 0x7e, 0xb9, 0x3f, 0x7d, 0xbc, 0xf6, 0x79, 0x21, 0x8b, 0xef, 0xf9, 0x6e, 0x77, 0x48, 0xd3, 0x1b, 0x39, 0x6e, 0xa9, 0x49, 0x81, 0x3d, 0xe9, 0x9b, 0x4f, 0x8d, 0x1f, 0x4b, 0x41, 0x24, 0x64, 0x04, 0xc5, 0xc3, 0xd4, 0x63, 0x2f, 0x98, 0xfc, 0xd1, 0x32, 0x38, 0xb2, 0xa6, 0x23, 0x09, 0x32, 0xb7, 0xaf, 0x7d, 0x2b, 0x99, 0x2e, 0xae, 0x30, 0xf2, 0x50, 0xa7, 0x7c, 0xda, 0x9c, 0x93, 0xf1, 0xe5, 0x85, 0x3e, 0x22, 0x04, 0x39, 0x82, 0x16, 0x11, 0xa1, 0xaa, 0xaa, 0x60, 0xdc, 0xbc, 0xb1, 0xce, 0x9c, 0x54, 0x6f, 0xce, 0x00, 0xc6, 0x66, 0x9e, 0x0a, 0x39, 0xf7, 0x63, 0xca, 0x67, 0x79, 0xcb, 0xda, 0x75, 0x6e, 0xa2, 0x9f, 0x8b, 0x94, 0x9d, 0x6b, 0x6c, 0x38, 0xe3, 0x67, 0xa1, 0x2f, 0xb3, 0x3c, 0x00, 0x21, 0xc0, 0x45, 0x09, 0x25, 0x1d, 0x94, 0xb2, 0x50, 0x72, 0x84, 0x94, 0x1a, 0x6d, 0x2b, 0xe0, 0x5d, 0x1f, 0x8c, 0x64, 0x38, 0x38, 0x9f, 0xe6, 0xb1, 0x33, 0x68, 0x73, 0x3a, 0xdb, 0x94, 0x2a, 0xc3, 0x9a, 0x0e, 0x70, 0xcc, 0xc1, 0x79, 0x84, 0x88, 0xe6, 0x3d, 0x56, 0x0b, 0x52, 0x17, 0xad, 0x37, 0x4b, 0xec, 0x5e, 0x5e, 0x01, 0x67, 0x20, 0x65, 0x83, 0x82, 0x53, 0xb1, 0x35, 0x76, 0x84, 0xd1, 0x03, 0xf6, 0x2f, 0x1a, 0x47, 0xbe, 0x87, 0x35, 0x64, 0xc1, 0x5c, 0x08, 0x32, 0x12, 0xe3, 0xc2, 0x86, 0xa6, 0x02, 0x09, 0x0d, 0xb6, 0xc6, 0xe3, 0xdb, 0xb7, 0x6f, 0xe1, 0x7a, 0x48, 0x4a, 0x2a, 0xb3, 0x23, 0x8c, 0x1f, 0x51, 0x78, 0x01, 0x0e, 0x0f, 0x29, 0x8e, 0x89, 0xef, 0xe2, 0x9c, 0x85, 0x35, 0x06, 0xce, 0x68, 0x6a, 0xd6, 0x9d, 0xc3, 0xa8, 0x1d, 0xa4, 0x8f, 0x5c, 0x32, 0xe2, 0x73, 0xe5, 0xc9, 0xa0, 0x8a, 0x17, 0xc1, 0x1f, 0xde, 0x82, 0xb3, 0x93, 0xd5, 0x71, 0xf4, 0x6a, 0x79, 0x7e, 0xf8, 0x0e, 0xce, 0x39, 0xd6, 0xeb, 0x35, 0xaa, 0xba, 0x40, 0x11, 0xf3, 0xcc, 0x07, 0x82, 0xce, 0x51, 0x2a, 0x68, 0xa3, 0xa1, 0xbb, 0x11, 0xdd, 0x91, 0x86, 0xde, 0xa6, 0x5e, 0xa2, 0x59, 0x2d, 0xb1, 0x6c, 0x16, 0xe9, 0x79, 0x2e, 0x0a, 0x09, 0x6f, 0x82, 0x9d, 0x2c, 0x63, 0x58, 0x35, 0x35, 0x6e, 0x6e, 0xee, 0xc0, 0x97, 0x0b, 0x80, 0x31, 0x08, 0xc5, 0xc1, 0x94, 0x87, 0x77, 0x1a, 0x92, 0x3a, 0x66, 0x91, 0xba, 0xaf, 0x71, 0x34, 0xe8, 0x3a, 0x2a, 0xbc, 0x1f, 0x3f, 0xfc, 0x80, 0xd7, 0xd7, 0x57, 0xb4, 0x6d, 0x0b, 0xce, 0x28, 0xd1, 0xec, 0xe9, 0xf1, 0x05, 0x65, 0xf9, 0x80, 0x9b, 0x9b, 0x1b, 0x38, 0xaf, 0x52, 0xb8, 0x4a, 0xd7, 0x51, 0x90, 0x46, 0x59, 0x93, 0x19, 0xcb, 0xa1, 0x3d, 0x60, 0x7f, 0x38, 0xa0, 0xae, 0x6b, 0xdc, 0xdc, 0xde, 0x42, 0x05, 0x82, 0x50, 0x7c, 0x30, 0x4c, 0x38, 0x98, 0xe2, 0xe1, 0x63, 0x62, 0xb0, 0xfb, 0x30, 0x42, 0x95, 0x15, 0xee, 0xb7, 0x5b, 0xbc, 0x3e, 0x8f, 0xe8, 0x87, 0x01, 0x45, 0x51, 0x63, 0xb9, 0xb9, 0xa5, 0xbd, 0x6e, 0xb1, 0xc6, 0xcd, 0xcd, 0x0d, 0xde, 0xbf, 0x7f, 0x0f, 0x3d, 0x2c, 0x01, 0xf0, 0x94, 0xf8, 0x16, 0x2d, 0x00, 0x19, 0x44, 0x78, 0x10, 0xc3, 0xd4, 0xe6, 0x04, 0xed, 0x8b, 0xc0, 0xe1, 0x1c, 0xc1, 0xc8, 0xd6, 0x09, 0x40, 0x1c, 0x4f, 0x0f, 0xb9, 0x38, 0x3d, 0xe4, 0xde, 0x18, 0x7a, 0xd8, 0x9c, 0x9f, 0xdc, 0xfc, 0x64, 0xb7, 0x69, 0x9c, 0x81, 0xb1, 0x06, 0x2a, 0xd8, 0x92, 0x9e, 0xed, 0x70, 0x83, 0x83, 0x17, 0x63, 0x0c, 0xfd, 0x60, 0x82, 0x5c, 0x27, 0x40, 0x52, 0x1c, 0x09, 0x5e, 0x8d, 0x3b, 0xc1, 0xf8, 0x7e, 0xe4, 0x70, 0x64, 0x7c, 0x50, 0x23, 0x64, 0x7c, 0x26, 0x89, 0xca, 0x1a, 0x88, 0xa9, 0x4e, 0x76, 0xca, 0x9a, 0x8d, 0x07, 0x73, 0x7e, 0x10, 0xe7, 0x53, 0x03, 0xc1, 0x3c, 0xf6, 0x6c, 0x5f, 0x77, 0x76, 0x70, 0xfb, 0x38, 0x89, 0x9d, 0xff, 0x8c, 0x51, 0xbe, 0x16, 0xb5, 0xce, 0x27, 0xf2, 0x90, 0x49, 0x92, 0xba, 0x53, 0x7a, 0xd4, 0x09, 0xc2, 0x3b, 0xa5, 0x8d, 0xc5, 0x03, 0xcf, 0xcc, 0xea, 0xa1, 0xe7, 0x5c, 0xc5, 0xf2, 0x29, 0x36, 0xfe, 0xbc, 0x55, 0x55, 0x5c, 0x30, 0x98, 0xe3, 0x01, 0x4e, 0x72, 0x34, 0x9b, 0x9a, 0xd3, 0xbc, 0x41, 0x88, 0x87, 0x3a, 0x17, 0x25, 0x84, 0x50, 0x64, 0x63, 0x19, 0x1a, 0xc8, 0xe0, 0x9d, 0x0b, 0x11, 0x02, 0x27, 0xa8, 0xa0, 0xf3, 0x64, 0x5a, 0x64, 0x9d, 0x01, 0x58, 0x0c, 0x91, 0x60, 0x17, 0xf1, 0xa1, 0xf4, 0xfe, 0xe5, 0x6b, 0x93, 0xf3, 0xfd, 0xea, 0x19, 0x6b, 0xd9, 0xd9, 0x8b, 0x86, 0x27, 0xff, 0x39, 0xf2, 0xac, 0xf7, 0x39, 0xbf, 0xf2, 0xc8, 0x77, 0xc8, 0xaf, 0xfd, 0x94, 0xc4, 0x76, 0x8d, 0x18, 0xe7, 0x9c, 0x83, 0x9d, 0x58, 0x9f, 0x4e, 0x25, 0x6a, 0x71, 0x32, 0xbd, 0x56, 0xa0, 0x62, 0xd2, 0x61, 0x2c, 0x7a, 0x79, 0xc1, 0xcc, 0xa1, 0xfc, 0xab, 0x05, 0x65, 0x22, 0x91, 0xbb, 0x84, 0x8b, 0xcf, 0xaf, 0x7d, 0x0e, 0xdb, 0xe6, 0x79, 0xf2, 0x73, 0x79, 0xeb, 0x53, 0x63, 0x96, 0x5c, 0x96, 0x97, 0x48, 0x6d, 0x93, 0x82, 0x38, 0x6d, 0x6a, 0xe3, 0xdf, 0xe7, 0xf6, 0xbd, 0x73, 0xef, 0xef, 0xb5, 0x09, 0x3a, 0x77, 0xca, 0x9b, 0x7b, 0x7f, 0xf3, 0xe6, 0xfb, 0x97, 0xbc, 0xe3, 0xaf, 0x7d, 0xde, 0x5b, 0xac, 0xf8, 0xe9, 0xfd, 0x36, 0x97, 0xa6, 0x47, 0x49, 0x64, 0xf9, 0xf3, 0x7a, 0x5a, 0xb9, 0xb8, 0x90, 0x49, 0xce, 0x05, 0x35, 0x37, 0x52, 0x36, 0xe0, 0x6c, 0x05, 0xe7, 0x8e, 0xf0, 0x5e, 0xc3, 0x19, 0xd2, 0x9d, 0x33, 0x66, 0x83, 0x16, 0x3d, 0xfc, 0xfb, 0x90, 0xc6, 0x28, 0x4b, 0x01, 0x2d, 0x01, 0x21, 0x56, 0x58, 0xae, 0x56, 0xa8, 0xeb, 0x05, 0xa4, 0x2c, 0x92, 0xe5, 0x2d, 0xe7, 0xc0, 0xdd, 0xf6, 0x1d, 0x4a, 0x25, 0xf0, 0xdf, 0xff, 0xfb, 0x7f, 0x83, 0x1d, 0x0f, 0x28, 0x4b, 0x8f, 0xd5, 0x6a, 0x81, 0x61, 0xe8, 0xc0, 0x60, 0x48, 0xcd, 0x01, 0x2a, 0xb6, 0x74, 0x0e, 0x57, 0x44, 0xd2, 0x2e, 0x2a, 0x1c, 0xf7, 0x2d, 0x18, 0x77, 0x60, 0x96, 0x0a, 0xba, 0x54, 0x0c, 0xd0, 0x74, 0x66, 0x6a, 0x6e, 0x71, 0x6b, 0x1d, 0xca, 0xa2, 0x84, 0x94, 0x05, 0xba, 0x71, 0xc0, 0xd8, 0x0f, 0x30, 0x6e, 0x80, 0x33, 0x0c, 0x56, 0x0f, 0xc4, 0x14, 0x17, 0x39, 0xb1, 0xd8, 0x67, 0x5e, 0x1f, 0x8e, 0x38, 0x5e, 0xe3, 0x00, 0x6d, 0x06, 0x8c, 0x4d, 0x81, 0xa1, 0x6f, 0xa9, 0x39, 0x34, 0x16, 0x85, 0x94, 0x84, 0xfc, 0x71, 0xa0, 0x10, 0x94, 0xce, 0xa6, 0x87, 0x0e, 0xaf, 0xaf, 0x2f, 0x78, 0x7d, 0x7d, 0xc5, 0xd0, 0xf5, 0xe0, 0x82, 0x50, 0x41, 0xa3, 0x87, 0xe0, 0xc5, 0x62, 0xd2, 0xd9, 0xd6, 0xf5, 0x47, 0xe8, 0x9d, 0x85, 0x12, 0x82, 0xa4, 0x7b, 0xcc, 0x43, 0x70, 0x07, 0xe7, 0xc3, 0xfa, 0xc1, 0xf4, 0x00, 0x16, 0x01, 0xc9, 0xed, 0x00, 0xeb, 0x60, 0xbd, 0x43, 0xdd, 0x34, 0xa8, 0xeb, 0x06, 0x45, 0x53, 0x43, 0x55, 0x25, 0x2c, 0x2c, 0x1c, 0x73, 0xb0, 0xce, 0xa2, 0xef, 0x07, 0xc8, 0x1f, 0x7e, 0xf8, 0x31, 0x64, 0x67, 0x2b, 0xf4, 0x7d, 0x8f, 0xa8, 0x4b, 0x17, 0x42, 0x04, 0xf6, 0xba, 0x4f, 0x2e, 0x5b, 0x71, 0xba, 0x88, 0x0f, 0xc3, 0xcb, 0xeb, 0x4b, 0x22, 0x53, 0xc5, 0x3f, 0x8b, 0x16, 0xa6, 0x8b, 0xc5, 0x02, 0xf0, 0x22, 0xf9, 0xa6, 0x3b, 0xe7, 0xd0, 0x34, 0x0d, 0xe2, 0xce, 0xbe, 0x6d, 0x5b, 0x7c, 0xfe, 0xe9, 0x73, 0x68, 0x02, 0x1a, 0xac, 0xd7, 0x6b, 0x6c, 0xd6, 0x77, 0xa8, 0xab, 0x16, 0x8e, 0x01, 0x77, 0xb7, 0xef, 0x00, 0xd6, 0xa3, 0x6c, 0x6e, 0x70, 0x73, 0x73, 0x87, 0xbb, 0x77, 0xef, 0x82, 0xfe, 0x54, 0x60, 0xb5, 0xd9, 0xa0, 0x28, 0x2a, 0xe8, 0xb1, 0xc1, 0x30, 0x0c, 0x64, 0x7c, 0xc3, 0xea, 0x60, 0x87, 0x2a, 0xc2, 0x74, 0xc5, 0xa0, 0x47, 0x9f, 0x92, 0xbe, 0x9c, 0xa5, 0xc9, 0x99, 0x41, 0x91, 0x58, 0xc6, 0x03, 0xd6, 0x75, 0x29, 0xbf, 0xdb, 0x79, 0x09, 0x05, 0x95, 0x76, 0xa0, 0xc6, 0x6a, 0x78, 0x97, 0x17, 0xca, 0x1c, 0x1a, 0xd5, 0xc1, 0xfa, 0x75, 0x0b, 0xce, 0x64, 0x28, 0x06, 0x0e, 0x46, 0x9f, 0x7c, 0xb0, 0x49, 0x3f, 0x29, 0xc8, 0xbc, 0xc1, 0xf3, 0x44, 0x42, 0xa2, 0x43, 0x2e, 0xe6, 0x41, 0xb3, 0x60, 0x52, 0x62, 0xa1, 0x54, 0x01, 0xce, 0xd9, 0x59, 0xd1, 0x99, 0x33, 0x5c, 0xc9, 0x0b, 0x32, 0xe7, 0xb8, 0xe2, 0x32, 0x76, 0x92, 0x8d, 0xd1, 0xb5, 0x41, 0x4a, 0xbe, 0x3a, 0x1d, 0xa2, 0x02, 0xc2, 0xc8, 0xd3, 0x9f, 0xc5, 0xa5, 0x96, 0x47, 0x70, 0x65, 0x02, 0xdc, 0x04, 0x19, 0x98, 0x4e, 0x41, 0x79, 0x41, 0xc9, 0x27, 0x83, 0x29, 0x43, 0x7b, 0x6e, 0x82, 0x89, 0x44, 0xca, 0xb9, 0xe9, 0x22, 0x6f, 0x6a, 0xf2, 0xcf, 0x9f, 0x42, 0xbe, 0x73, 0x1e, 0xea, 0xf9, 0xc4, 0x6a, 0xed, 0xa5, 0x64, 0x28, 0xff, 0xfb, 0x71, 0xa4, 0xee, 0x9a, 0xf9, 0xc0, 0x45, 0xd0, 0x2e, 0x90, 0x39, 0x4b, 0x9a, 0xc4, 0x35, 0xe0, 0x03, 0x54, 0x4d, 0x83, 0x8c, 0x03, 0xf3, 0x14, 0xc5, 0xc8, 0xfd, 0xf5, 0x30, 0x8f, 0xa9, 0xc4, 0x6f, 0x2e, 0x49, 0x8d, 0x31, 0x06, 0x15, 0xc2, 0x84, 0xf2, 0x9f, 0x2b, 0x5f, 0x35, 0x5c, 0x2b, 0xcc, 0xf9, 0x84, 0x39, 0xb7, 0xff, 0x8d, 0x5f, 0x4f, 0x0a, 0x7e, 0xe9, 0x4e, 0x96, 0x7d, 0x4d, 0xe3, 0xe6, 0xdd, 0xe5, 0xae, 0x65, 0xbc, 0xe7, 0xcd, 0x6b, 0x74, 0xfa, 0x8b, 0x39, 0x0c, 0xe7, 0x0e, 0x7e, 0xe7, 0x24, 0xbf, 0xbc, 0xb0, 0x4c, 0xaf, 0xe9, 0xb5, 0xc6, 0x23, 0xba, 0x32, 0xce, 0x39, 0xbd, 0xc5, 0x7f, 0x9b, 0x3b, 0x6f, 0x4d, 0x79, 0x0a, 0xf9, 0xf7, 0xce, 0x1d, 0xf7, 0xf2, 0xfb, 0xf4, 0x2d, 0x15, 0x46, 0xce, 0x41, 0xc8, 0x89, 0x80, 0x67, 0x76, 0xae, 0xf0, 0xb3, 0xa6, 0x3a, 0xd7, 0x76, 0xde, 0xd3, 0xeb, 0x14, 0x75, 0xdc, 0xf9, 0x3d, 0x3f, 0xf5, 0x9a, 0x7f, 0xcb, 0x08, 0x27, 0x5a, 0x0e, 0x5f, 0x23, 0xf5, 0xcd, 0xdd, 0x73, 0xf9, 0xb3, 0x49, 0x64, 0xc5, 0xe9, 0xfb, 0xce, 0xc1, 0xc0, 0x2e, 0x91, 0x00, 0x5c, 0x36, 0x67, 0x45, 0x51, 0x00, 0xcc, 0x93, 0x12, 0x89, 0x67, 0x4d, 0x4b, 0xb0, 0x48, 0x16, 0xaa, 0x04, 0x87, 0x07, 0x63, 0x94, 0x12, 0x59, 0x28, 0x72, 0x02, 0x75, 0x96, 0x48, 0x8d, 0xc7, 0xfd, 0x11, 0xeb, 0xf5, 0x1a, 0x87, 0x43, 0x87, 0xf6, 0x78, 0xc4, 0xa2, 0xe6, 0x28, 0x4b, 0x0e, 0x29, 0x80, 0x71, 0x3c, 0x40, 0x28, 0x92, 0xdb, 0x39, 0xab, 0xe1, 0xa1, 0x61, 0x0d, 0xa8, 0x88, 0x8e, 0x14, 0x0e, 0xb5, 0xa8, 0x97, 0x89, 0xaf, 0xc2, 0xe0, 0xc0, 0x1c, 0x03, 0xf7, 0x1c, 0xcc, 0x59, 0x00, 0x0c, 0xfb, 0xdd, 0x13, 0xe0, 0x37, 0x10, 0x42, 0x61, 0xbf, 0xdf, 0xe3, 0x75, 0xff, 0x42, 0x4e, 0x72, 0x05, 0x03, 0xe7, 0x0e, 0xab, 0xe5, 0x1d, 0x0c, 0x80, 0x3e, 0x36, 0x82, 0xee, 0xfc, 0xfd, 0xae, 0x24, 0xdd, 0xdf, 0xd6, 0x19, 0x2c, 0x9b, 0x12, 0x63, 0xe0, 0x92, 0x59, 0x3d, 0x42, 0x55, 0x15, 0xac, 0x77, 0x50, 0x85, 0xa4, 0x94, 0x36, 0x55, 0x90, 0xb1, 0x99, 0xee, 0xa1, 0xc7, 0x16, 0x0c, 0x06, 0x4a, 0x89, 0xb4, 0x92, 0xeb, 0x87, 0x43, 0xb8, 0x9e, 0x41, 0x32, 0x3c, 0xf4, 0x90, 0xca, 0x42, 0xf2, 0x02, 0x4d, 0x59, 0x43, 0x30, 0x09, 0xa3, 0x01, 0x03, 0x80, 0xc1, 0xc0, 0x5b, 0x5a, 0x47, 0xb5, 0xdd, 0x81, 0x64, 0xe2, 0x52, 0x60, 0xb5, 0x6a, 0xd0, 0xdc, 0x6c, 0x50, 0x71, 0x06, 0xcf, 0x3c, 0xa4, 0x20, 0x6e, 0x95, 0x75, 0x06, 0xda, 0x6a, 0x0c, 0xa6, 0x87, 0xfc, 0xf9, 0xcb, 0xb7, 0xd4, 0xb5, 0x1a, 0x63, 0x52, 0x41, 0x6e, 0x9a, 0x06, 0x8c, 0x09, 0xd4, 0xf5, 0x22, 0xdd, 0xa8, 0xb4, 0xe3, 0x2a, 0xd3, 0xc3, 0xb0, 0xdc, 0x88, 0xc0, 0x86, 0x26, 0x4d, 0xde, 0xf7, 0xef, 0xdf, 0xf1, 0xb7, 0x2f, 0x7f, 0xc3, 0x76, 0xbb, 0x25, 0x4d, 0xb9, 0xa2, 0x03, 0xcb, 0x78, 0x03, 0xed, 0x34, 0x2c, 0x2c, 0xca, 0x86, 0x26, 0x78, 0x51, 0x08, 0xfc, 0x4f, 0xeb, 0x7f, 0xc1, 0xeb, 0xeb, 0x2b, 0x76, 0xfb, 0x23, 0x86, 0xde, 0x11, 0xe1, 0x87, 0x97, 0x80, 0x67, 0x30, 0x56, 0xe0, 0xd7, 0xbf, 0xfb, 0x8f, 0x94, 0x7a, 0xb5, 0x5e, 0xa3, 0x2c, 0x6a, 0x0c, 0x23, 0xd9, 0xc3, 0x72, 0x25, 0xb1, 0xdf, 0x1d, 0x61, 0xbd, 0xa2, 0x9c, 0x58, 0x56, 0x40, 0x1b, 0x8e, 0x71, 0x34, 0x60, 0x4c, 0xa0, 0x90, 0x05, 0x54, 0x59, 0xa1, 0xf2, 0xb9, 0xc3, 0x19, 0xe0, 0x42, 0xca, 0x55, 0xb2, 0x9a, 0x6d, 0xc4, 0x49, 0xd3, 0x9d, 0xc9, 0xd1, 0x4e, 0x6e, 0x59, 0xee, 0xc2, 0x94, 0x22, 0x67, 0xb9, 0x1b, 0x43, 0xc5, 0x93, 0xf3, 0x08, 0x8b, 0xea, 0x04, 0xa3, 0x32, 0xc6, 0x20, 0x55, 0x9d, 0x49, 0x9a, 0xa2, 0x3c, 0xe4, 0xf4, 0x61, 0x2d, 0xbb, 0x98, 0x3a, 0xf2, 0x07, 0x32, 0x1e, 0x28, 0x73, 0x4c, 0xe5, 0xe8, 0x44, 0x36, 0x95, 0xb4, 0xe5, 0xc5, 0x21, 0xdf, 0x09, 0x4e, 0x0f, 0x35, 0xf2, 0xda, 0x5f, 0x9c, 0xc9, 0xc1, 0x72, 0x72, 0x1d, 0xa1, 0x07, 0x38, 0x5b, 0x37, 0xe4, 0x90, 0xa9, 0x10, 0x2c, 0x44, 0xa1, 0xe2, 0xea, 0xc7, 0x29, 0xf8, 0x01, 0x67, 0x7a, 0xd8, 0xc8, 0xf6, 0x54, 0x4a, 0x5e, 0x78, 0x65, 0x4f, 0x51, 0x88, 0x39, 0x79, 0xd1, 0x9c, 0xf6, 0x3e, 0x3f, 0xd0, 0x4e, 0x9e, 0xf8, 0xe7, 0xec, 0xdf, 0x1c, 0xc2, 0xf4, 0xde, 0x63, 0xd4, 0x3d, 0x69, 0x9d, 0xb9, 0x05, 0x63, 0x94, 0xf1, 0xec, 0xbd, 0x87, 0x92, 0x81, 0xc8, 0xc5, 0xca, 0xb0, 0x3f, 0x8f, 0x99, 0xe5, 0xf4, 0xc1, 0x3c, 0x91, 0x8d, 0xa2, 0xf5, 0xe7, 0xa5, 0x7e, 0x18, 0x17, 0xd7, 0x75, 0x4e, 0x7a, 0xe6, 0x8c, 0x3e, 0xb3, 0xb3, 0xcd, 0x51, 0x92, 0xfc, 0x9e, 0x9c, 0x4e, 0xb5, 0x91, 0x3c, 0x97, 0x5b, 0xb3, 0xe6, 0xab, 0x8e, 0x84, 0x54, 0x78, 0x73, 0x61, 0xeb, 0x3a, 0x97, 0xd6, 0x76, 0x8d, 0x07, 0x11, 0x9b, 0x8a, 0xb9, 0xe2, 0x00, 0x00, 0xbb, 0xdd, 0x4b, 0x5a, 0x59, 0xd5, 0x75, 0x39, 0x69, 0x2c, 0x4d, 0xba, 0x0e, 0x6f, 0x99, 0xd4, 0xe4, 0x53, 0x7a, 0xee, 0x61, 0x40, 0xd6, 0xb1, 0x26, 0xbb, 0x1f, 0x59, 0xb2, 0xda, 0xa5, 0x22, 0x74, 0xae, 0x38, 0x99, 0x93, 0xfb, 0xcd, 0x59, 0xbb, 0xe6, 0xff, 0x9f, 0x17, 0xf4, 0xe9, 0xd7, 0xc9, 0xdf, 0x9f, 0x71, 0x1c, 0x53, 0x54, 0x73, 0xee, 0x94, 0x37, 0xbd, 0x3e, 0x97, 0x05, 0xf7, 0x12, 0x32, 0x3f, 0x27, 0x80, 0xba, 0x8b, 0x1c, 0xf8, 0xbc, 0x99, 0xfa, 0xa5, 0xf8, 0xdc, 0x6b, 0xc6, 0x41, 0x6f, 0x5d, 0xf3, 0xe9, 0x33, 0xc6, 0x39, 0xc2, 0x60, 0x90, 0x29, 0x14, 0x7c, 0x96, 0x96, 0xe7, 0x0c, 0x9c, 0xb7, 0x61, 0x8d, 0x35, 0xa0, 0xef, 0xfb, 0x14, 0x45, 0xed, 0x79, 0x94, 0xa9, 0x59, 0x80, 0x99, 0x54, 0xcc, 0xe9, 0xfa, 0x38, 0x0c, 0xda, 0xa1, 0x6b, 0x6d, 0x88, 0x2b, 0x1d, 0xd0, 0x34, 0x16, 0x8c, 0x23, 0xa9, 0x1b, 0xb6, 0xdb, 0x1b, 0x30, 0xef, 0x20, 0xa4, 0xc2, 0xbf, 0xfe, 0xeb, 0xbf, 0x62, 0xd9, 0x70, 0x74, 0xc7, 0x07, 0xbc, 0x3c, 0xff, 0x8c, 0xb2, 0x62, 0xf8, 0xaf, 0xff, 0xf5, 0xbf, 0x04, 0xd3, 0x1a, 0x4b, 0x43, 0x49, 0x11, 0xc2, 0x83, 0xb4, 0x85, 0x73, 0x80, 0x36, 0x51, 0x23, 0x6f, 0xa9, 0xaf, 0x70, 0x80, 0x1b, 0xc7, 0xf0, 0xac, 0x92, 0xac, 0xd3, 0xe9, 0x1e, 0x5c, 0xaa, 0x60, 0x51, 0xde, 0x41, 0x2a, 0x40, 0x82, 0x76, 0xd2, 0xdf, 0xbe, 0xfc, 0xf9, 0xe2, 0xd9, 0x8a, 0x68, 0x8c, 0x94, 0x12, 0x8f, 0x8f, 0x5f, 0x68, 0xf5, 0xa2, 0x2a, 0x08, 0x06, 0x48, 0xce, 0xa0, 0xad, 0x41, 0xdf, 0x1e, 0xa1, 0x87, 0x1e, 0xa2, 0x58, 0xc1, 0x0e, 0x1e, 0x56, 0x1f, 0xb1, 0x07, 0x30, 0x0e, 0x84, 0x56, 0x8f, 0xba, 0x83, 0xe0, 0x1e, 0xaf, 0xaf, 0xbb, 0xd0, 0x60, 0x77, 0x58, 0x7a, 0x72, 0x5d, 0xad, 0x6b, 0x0a, 0x04, 0xb3, 0xb6, 0xc1, 0x7a, 0xcd, 0x41, 0x78, 0x86, 0x80, 0x77, 0x1c, 0x7d, 0x3f, 0x62, 0xb0, 0x1e, 0xaa, 0xe6, 0xa8, 0x1b, 0x19, 0xa2, 0x5e, 0x2d, 0x94, 0x62, 0x28, 0x2a, 0x89, 0xc5, 0xba, 0xc6, 0xb2, 0x28, 0xc0, 0xac, 0x81, 0xed, 0x47, 0x14, 0x4c, 0x03, 0x5e, 0xc3, 0xfb, 0x11, 0xcc, 0x8d, 0x50, 0x18, 0x21, 0x8f, 0x47, 0x62, 0x9e, 0xd7, 0x75, 0x1d, 0x42, 0x51, 0xca, 0xd0, 0x1d, 0x5a, 0xdc, 0xdd, 0x51, 0x3c, 0x68, 0x9c, 0xdc, 0xbb, 0xae, 0x4b, 0x37, 0xdf, 0x38, 0x1e, 0x71, 0xfb, 0xfe, 0x1e, 0xaf, 0xaf, 0xaf, 0x60, 0x8c, 0xe1, 0xee, 0xee, 0x0e, 0x8b, 0xc5, 0x02, 0xaf, 0xaf, 0xaf, 0x18, 0xc7, 0x11, 0x2f, 0x2f, 0x2f, 0x58, 0x34, 0xeb, 0x94, 0x86, 0x36, 0x65, 0xb1, 0x72, 0xce, 0x61, 0x8d, 0x84, 0xb3, 0x44, 0xc2, 0x68, 0xea, 0x2d, 0x7e, 0xf8, 0xf1, 0x37, 0xa8, 0x9b, 0x25, 0xca, 0xaa, 0xc1, 0x76, 0x7b, 0x8b, 0x6f, 0x0f, 0xc4, 0xa2, 0x67, 0x42, 0xa1, 0xef, 0x07, 0x12, 0xe0, 0xcb, 0x05, 0x9c, 0xa7, 0x80, 0x0c, 0x21, 0xc9, 0x22, 0xb0, 0xaa, 0x2a, 0x30, 0x08, 0x68, 0x47, 0xec, 0xef, 0xd1, 0x52, 0x91, 0x12, 0xfc, 0x9c, 0xe5, 0xcc, 0xa2, 0x1f, 0x77, 0x3c, 0x3c, 0x0c, 0x02, 0x63, 0x9c, 0x20, 0xf1, 0xc8, 0xca, 0xcf, 0xa5, 0x06, 0xf1, 0x70, 0x3e, 0x3d, 0x84, 0xf4, 0xe7, 0x8c, 0x09, 0x58, 0xef, 0x48, 0x33, 0x1b, 0x1f, 0x4c, 0x06, 0x30, 0x11, 0xa6, 0x91, 0x20, 0xdb, 0x8a, 0xc6, 0x0a, 0x14, 0x58, 0x90, 0xcb, 0x8c, 0x2c, 0x9c, 0x17, 0xc1, 0x9d, 0x89, 0x60, 0x25, 0x1f, 0x3c, 0x91, 0x9d, 0xf3, 0x21, 0x85, 0xec, 0xd2, 0x1f, 0xfa, 0x7c, 0xca, 0xb0, 0x99, 0x95, 0x2b, 0xc2, 0x64, 0x1e, 0x83, 0x43, 0x08, 0x0e, 0x9f, 0x66, 0x44, 0xd3, 0x7b, 0x61, 0xcf, 0x26, 0xc1, 0x38, 0x09, 0x4c, 0xd9, 0xba, 0xd7, 0x5c, 0xca, 0xf2, 0xb8, 0xd9, 0x69, 0x22, 0x55, 0x0e, 0x7b, 0x4f, 0x0b, 0xf1, 0xf4, 0x00, 0xe2, 0x9c, 0x5d, 0x4c, 0x26, 0x73, 0x61, 0x20, 0xd3, 0x22, 0x1f, 0x5f, 0xa7, 0xd6, 0xc3, 0xc5, 0xce, 0x35, 0xff, 0x19, 0x84, 0xe0, 0x17, 0xa4, 0xc1, 0xdc, 0x9a, 0x54, 0x29, 0x7a, 0x68, 0x00, 0x06, 0xc6, 0x11, 0x1a, 0x2c, 0x0f, 0x30, 0x03, 0x0f, 0x09, 0x13, 0x12, 0x94, 0xc0, 0x68, 0x2a, 0x67, 0xe1, 0xa0, 0x60, 0x00, 0x98, 0xe7, 0x09, 0xc1, 0x88, 0x50, 0xfb, 0x69, 0xd7, 0xce, 0x66, 0xcd, 0x4e, 0xa6, 0x8c, 0x7f, 0x93, 0x11, 0xd0, 0xa6, 0x1c, 0x83, 0x9c, 0x1b, 0x31, 0x45, 0x27, 0xa6, 0xf7, 0xf4, 0x89, 0x73, 0x71, 0x52, 0x34, 0xe4, 0xc5, 0x60, 0xce, 0x96, 0x97, 0x8c, 0x2d, 0xe4, 0xc5, 0x81, 0x9f, 0xbf, 0xe7, 0xb9, 0x76, 0xff, 0x2d, 0x9d, 0xf6, 0x9c, 0xaa, 0x62, 0x2e, 0xdd, 0x6b, 0xee, 0x3d, 0x99, 0xbb, 0xd6, 0x73, 0x26, 0x2e, 0xd3, 0x66, 0x7b, 0x6e, 0x77, 0x3e, 0x85, 0xd4, 0xa7, 0x8d, 0x42, 0xbe, 0x12, 0x98, 0x6a, 0xc4, 0xdf, 0xca, 0x30, 0x9f, 0xb2, 0xe5, 0x53, 0xf0, 0x8b, 0x60, 0x6f, 0x9a, 0xbb, 0xcc, 0xe9, 0xc4, 0xcf, 0xe4, 0x87, 0x99, 0xec, 0x70, 0x8e, 0x94, 0xf7, 0x96, 0x04, 0x8e, 0x5e, 0x87, 0xb9, 0xba, 0xff, 0xce, 0x11, 0x8c, 0xd9, 0xa4, 0x35, 0x00, 0xd6, 0x9f, 0x08, 0xb6, 0x67, 0x0c, 0xf9, 0x74, 0x4f, 0x93, 0xb8, 0xdc, 0x58, 0x03, 0xa3, 0x47, 0xf4, 0xfd, 0x11, 0x5d, 0x7b, 0x4c, 0x81, 0x5c, 0x3a, 0xb0, 0xdb, 0x3d, 0x4c, 0x20, 0xc7, 0x81, 0x10, 0x4b, 0x4e, 0x1f, 0x6d, 0xdf, 0x63, 0xe8, 0x3d, 0x94, 0x2a, 0xc2, 0x3a, 0x8b, 0x4c, 0x62, 0xe2, 0xdf, 0x77, 0x87, 0x3d, 0x49, 0xcd, 0xc6, 0x01, 0xdb, 0x6d, 0x03, 0xee, 0x7b, 0x34, 0x4d, 0x85, 0xae, 0x53, 0x10, 0xdc, 0xe0, 0x77, 0xbf, 0xf9, 0x11, 0xce, 0x59, 0x30, 0xe6, 0x51, 0x56, 0x22, 0x85, 0x50, 0x59, 0xeb, 0xe1, 0x2c, 0x70, 0x3c, 0x76, 0x94, 0x9d, 0x51, 0xd0, 0xb3, 0x7e, 0x42, 0x50, 0x89, 0xfb, 0x32, 0x76, 0x0e, 0x0c, 0x23, 0x60, 0x2d, 0x94, 0x70, 0x10, 0xb5, 0x00, 0x93, 0x80, 0x2a, 0xc8, 0x26, 0xfb, 0x57, 0x3f, 0xdc, 0x85, 0x5a, 0x36, 0x62, 0x08, 0x7b, 0xed, 0xb1, 0xeb, 0x31, 0x76, 0xf4, 0x1e, 0x2d, 0xd7, 0xb7, 0x29, 0x15, 0x0f, 0x9e, 0x76, 0xeb, 0x9c, 0x79, 0x94, 0x05, 0x59, 0x43, 0x8f, 0xf6, 0x08, 0xe6, 0x18, 0x34, 0xe7, 0x10, 0x1c, 0x94, 0x11, 0xef, 0x28, 0x00, 0xc6, 0x39, 0x87, 0x52, 0x51, 0xb3, 0xb4, 0x6c, 0x04, 0x6e, 0x36, 0x0d, 0xea, 0xa0, 0x8f, 0xaf, 0x2a, 0xb2, 0x4f, 0xaf, 0x54, 0x0b, 0x06, 0x01, 0x25, 0x0a, 0x70, 0xae, 0xd0, 0xf5, 0x05, 0x5e, 0x8f, 0x2d, 0x46, 0x3b, 0x40, 0x6b, 0x87, 0x71, 0x47, 0xf5, 0xa4, 0xa8, 0x39, 0x38, 0x37, 0x38, 0x74, 0xaf, 0x18, 0x07, 0x06, 0xe9, 0x00, 0x67, 0x46, 0x14, 0x23, 0xa0, 0x9d, 0x85, 0xf1, 0x1a, 0x70, 0x16, 0xcc, 0x59, 0xc8, 0xfd, 0x7e, 0x4f, 0xd3, 0xf6, 0x72, 0x09, 0xa5, 0x14, 0xb1, 0xd7, 0x83, 0x1e, 0x5c, 0xf0, 0x32, 0xb9, 0xde, 0xb4, 0x49, 0x6b, 0xad, 0xe8, 0xc0, 0x82, 0xc0, 0xa1, 0x3d, 0xe2, 0xd0, 0x92, 0x06, 0xb0, 0xa8, 0x4a, 0xd4, 0x8b, 0x06, 0x45, 0x55, 0x26, 0x92, 0x1c, 0x97, 0x1c, 0x6d, 0xd7, 0xa2, 0xed, 0xdb, 0x04, 0xbd, 0xaf, 0x0e, 0x2b, 0x6c, 0xb7, 0x5b, 0x4a, 0xa4, 0x59, 0xfe, 0x1a, 0xcb, 0x1f, 0x6f, 0x20, 0x64, 0x41, 0x2e, 0x6a, 0xcb, 0x35, 0xda, 0x6e, 0xc4, 0xcb, 0xae, 0xc3, 0xe1, 0xf8, 0x08, 0x2f, 0x17, 0xe0, 0x5e, 0xc2, 0xf4, 0x16, 0xc7, 0x96, 0x0c, 0x63, 0xb4, 0x33, 0x80, 0xe7, 0x10, 0x72, 0x89, 0xb6, 0x7f, 0xa2, 0x07, 0x57, 0x92, 0x4e, 0xdd, 0x07, 0x87, 0x2e, 0x21, 0x05, 0x9c, 0x76, 0x70, 0x66, 0xcc, 0xa4, 0x5e, 0x36, 0xec, 0x4b, 0x1d, 0x31, 0x98, 0xad, 0xc7, 0x38, 0xfa, 0xd0, 0xcd, 0x89, 0x33, 0x3f, 0xf3, 0xc8, 0xd4, 0x84, 0x3f, 0xf7, 0x48, 0x4e, 0xf0, 0x14, 0x24, 0xe5, 0x04, 0x4f, 0x82, 0x53, 0x72, 0xd2, 0x59, 0xb2, 0x3f, 0xf4, 0x48, 0x6e, 0x4c, 0x51, 0xde, 0x41, 0xf2, 0x23, 0xc0, 0xfb, 0x93, 0xff, 0x78, 0x5e, 0x78, 0xf3, 0xfd, 0xf8, 0x5c, 0x68, 0x43, 0x4e, 0xfe, 0xba, 0xd8, 0xe1, 0x5f, 0x81, 0x4f, 0x73, 0xe6, 0x6d, 0xfc, 0xbd, 0x31, 0x2e, 0x7d, 0x4c, 0x8e, 0x25, 0xfa, 0xb9, 0xbc, 0xc8, 0x9a, 0x9b, 0x93, 0xad, 0x67, 0xfc, 0x3e, 0x45, 0x51, 0x50, 0xe0, 0x46, 0x7a, 0x6d, 0x08, 0xeb, 0x05, 0xb2, 0x1e, 0x96, 0x42, 0x52, 0x13, 0xc3, 0x32, 0x78, 0x32, 0x91, 0x9c, 0x70, 0x06, 0xd3, 0xce, 0xf9, 0x65, 0xe7, 0xc6, 0x1e, 0xd3, 0x82, 0x30, 0x07, 0x37, 0x47, 0x23, 0x91, 0xd3, 0x7b, 0x72, 0xce, 0x49, 0x98, 0x16, 0x81, 0xa2, 0xe4, 0x70, 0x4e, 0xc0, 0x07, 0x2b, 0x46, 0x2e, 0x68, 0xff, 0xcd, 0x00, 0x78, 0xaf, 0x61, 0x8c, 0x80, 0x10, 0x12, 0x42, 0xf8, 0xf3, 0x0c, 0xee, 0x09, 0x54, 0x7d, 0x8a, 0x17, 0xf5, 0x89, 0x27, 0x30, 0x85, 0x95, 0xa7, 0xd0, 0x2a, 0x85, 0xb3, 0xf8, 0x0b, 0x04, 0xe2, 0x9a, 0x52, 0x60, 0x1a, 0x7a, 0x13, 0x0f, 0xa2, 0xbc, 0xa1, 0xca, 0x15, 0x00, 0x73, 0xd6, 0xaf, 0x17, 0x7e, 0x00, 0xce, 0xbf, 0xa9, 0x6f, 0xce, 0x55, 0x1e, 0x73, 0xd0, 0x6f, 0xdd, 0x90, 0x05, 0x74, 0x9a, 0xd8, 0xc2, 0x54, 0xa7, 0x40, 0x6a, 0x02, 0x63, 0x6d, 0x76, 0xcd, 0x28, 0x74, 0x05, 0xcc, 0x87, 0x21, 0x30, 0xa0, 0x37, 0xd9, 0x7d, 0xed, 0xa8, 0x3b, 0x06, 0x17, 0x81, 0x29, 0x1d, 0x10, 0x22, 0xeb, 0x32, 0xae, 0x08, 0x3f, 0xdd, 0x43, 0x9c, 0x5f, 0xee, 0xc8, 0xa7, 0x0d, 0xc7, 0xf4, 0xcf, 0xf3, 0x9f, 0x37, 0x36, 0x7a, 0xd7, 0x22, 0x56, 0x63, 0x53, 0x91, 0xaf, 0x38, 0x72, 0x92, 0x5c, 0x21, 0x8a, 0xab, 0x36, 0xba, 0x27, 0xc7, 0xbb, 0x79, 0x06, 0x3a, 0xad, 0x44, 0x2e, 0xd7, 0x0f, 0xd3, 0xd5, 0xca, 0xb4, 0x89, 0x9e, 0xd3, 0x98, 0xcf, 0xad, 0xb8, 0x72, 0x0e, 0xc7, 0xb4, 0x51, 0x4f, 0x3f, 0x6f, 0xb0, 0x12, 0x05, 0x33, 0xe9, 0x1e, 0xf6, 0x59, 0xb8, 0xce, 0xa8, 0x35, 0x04, 0xf3, 0x17, 0xf2, 0xc5, 0x74, 0x86, 0xf8, 0x68, 0x63, 0x4a, 0x21, 0x58, 0x82, 0x8b, 0xe4, 0x1f, 0xc0, 0xb9, 0x44, 0xe5, 0x15, 0x0a, 0xc5, 0xd1, 0x34, 0xb7, 0xd8, 0x6e, 0x6e, 0x03, 0x57, 0x8a, 0xc1, 0x3b, 0x1a, 0x06, 0x58, 0x51, 0xa0, 0xaa, 0x4b, 0x0c, 0x1d, 0xc7, 0xd0, 0xb6, 0x78, 0x7d, 0xfd, 0x8a, 0x65, 0xe3, 0xc0, 0xe1, 0xf1, 0xf4, 0xf4, 0x48, 0x4b, 0xce, 0x00, 0xe9, 0x1b, 0xad, 0x31, 0xf4, 0x7b, 0xf4, 0xfd, 0x08, 0x63, 0xe8, 0x79, 0x26, 0xc7, 0x4f, 0x4e, 0x24, 0x63, 0x4e, 0xc3, 0x0c, 0xe7, 0x0c, 0x85, 0xe2, 0x60, 0x85, 0x44, 0xa3, 0x44, 0x52, 0x60, 0x88, 0x8a, 0x03, 0x90, 0xb0, 0x5e, 0xc3, 0xd9, 0x01, 0xc6, 0x3a, 0x7c, 0x7f, 0xa1, 0xf8, 0xeb, 0x42, 0x55, 0xa8, 0x2b, 0x85, 0xf5, 0xea, 0x06, 0x45, 0x51, 0xa5, 0x41, 0xa5, 0x1b, 0xe9, 0x3a, 0x75, 0x5d, 0x87, 0x7e, 0xe8, 0xd0, 0xb6, 0x1d, 0x8a, 0xa2, 0x40, 0xd3, 0x34, 0x28, 0xcb, 0x12, 0xbb, 0xf6, 0x15, 0x42, 0x30, 0xd4, 0x75, 0x85, 0xe5, 0x62, 0x01, 0x21, 0x18, 0xac, 0x36, 0xd0, 0x86, 0x38, 0x68, 0x45, 0x58, 0x51, 0x53, 0x94, 0xb8, 0x3c, 0x05, 0x88, 0xf9, 0x11, 0x46, 0xf7, 0xe8, 0xed, 0x13, 0x24, 0x93, 0x28, 0x9a, 0x15, 0x9a, 0x7a, 0x0d, 0x55, 0x48, 0x58, 0xcf, 0x71, 0xe8, 0x35, 0x69, 0xd1, 0x6d, 0x07, 0x25, 0x0b, 0x80, 0x11, 0x32, 0x60, 0xac, 0x83, 0xe3, 0x1c, 0xdc, 0x7a, 0xd8, 0x71, 0x00, 0x37, 0x1d, 0xad, 0x74, 0x05, 0xc0, 0x19, 0x20, 0xbc, 0x83, 0xdc, 0xed, 0x0e, 0x58, 0x2e, 0x97, 0xd0, 0xda, 0xe2, 0x78, 0xec, 0xd2, 0x54, 0xd9, 0x34, 0x4d, 0xf2, 0xb9, 0x8e, 0xbb, 0xf4, 0x18, 0xed, 0x19, 0xa7, 0x03, 0xdd, 0x6a, 0x28, 0x25, 0x20, 0x04, 0xc7, 0xb7, 0x6f, 0x3f, 0xe3, 0x70, 0x20, 0x9f, 0x77, 0x22, 0xad, 0xbd, 0x43, 0xdf, 0x99, 0x64, 0x9a, 0x92, 0x13, 0xb9, 0x5e, 0x5e, 0x88, 0x38, 0xd0, 0x37, 0x05, 0x3c, 0x17, 0x21, 0xcd, 0xe6, 0x4f, 0x28, 0xca, 0x05, 0xed, 0xd3, 0xb7, 0x77, 0xf8, 0xf0, 0x71, 0x8d, 0x43, 0x67, 0xc1, 0x39, 0x69, 0xd0, 0xf5, 0xe8, 0x00, 0x0e, 0xf4, 0x87, 0x3d, 0xac, 0xe3, 0xd8, 0x6c, 0x36, 0xc9, 0x72, 0x93, 0x08, 0x39, 0x23, 0x86, 0x7e, 0x0c, 0x7b, 0x7e, 0x09, 0xad, 0x2d, 0xd6, 0xcb, 0x26, 0x68, 0x29, 0x0d, 0xa0, 0xa9, 0x20, 0x83, 0x53, 0x28, 0x81, 0x83, 0x03, 0xf3, 0x3c, 0x65, 0x61, 0xcf, 0x41, 0xba, 0x5a, 0xfb, 0x70, 0xa3, 0x9f, 0x9b, 0x82, 0x9c, 0xe2, 0x29, 0x87, 0x8b, 0xc3, 0x2e, 0x27, 0x95, 0xad, 0x56, 0x9b, 0xe4, 0x75, 0x4c, 0xef, 0x9b, 0x0b, 0xd3, 0xde, 0xf9, 0x1e, 0x30, 0xee, 0xa3, 0xf3, 0x69, 0xc0, 0x5a, 0x8b, 0x42, 0xf1, 0x8b, 0x43, 0xe2, 0xad, 0x7c, 0xe7, 0xe9, 0xf4, 0x13, 0x2d, 0x4f, 0xa7, 0x91, 0x91, 0xf1, 0x73, 0x23, 0xd1, 0x67, 0xfa, 0xef, 0x4f, 0xbb, 0x4a, 0x71, 0x31, 0xbd, 0xe5, 0xe4, 0xba, 0x29, 0x24, 0x38, 0x57, 0x18, 0xe6, 0x20, 0xf5, 0x14, 0x5e, 0x92, 0x4d, 0xa0, 0xf9, 0xf7, 0x8e, 0xf7, 0x17, 0x41, 0x53, 0xe7, 0xa4, 0xb1, 0x7c, 0x6d, 0x90, 0x1f, 0x52, 0x53, 0x5b, 0xd2, 0x7c, 0xba, 0xcd, 0x27, 0xb5, 0x33, 0x63, 0x1c, 0x67, 0x60, 0x8c, 0x86, 0xc7, 0x00, 0x2e, 0x10, 0xd6, 0x20, 0x06, 0xde, 0x6b, 0x58, 0x27, 0xe0, 0x8c, 0x4c, 0x50, 0x3b, 0x69, 0xae, 0x73, 0xef, 0xf9, 0xb9, 0x94, 0x33, 0x7f, 0x01, 0x8d, 0x9f, 0x91, 0xd0, 0xb2, 0x08, 0x5e, 0xef, 0x3d, 0x4a, 0xc1, 0xcf, 0x1a, 0xb5, 0xb9, 0xe6, 0x23, 0x27, 0x9d, 0x45, 0xf2, 0xe2, 0xd4, 0xd6, 0x34, 0xbf, 0x97, 0x72, 0x66, 0x7d, 0x4c, 0xcb, 0x9b, 0x6b, 0x80, 0xae, 0x85, 0xb4, 0xe4, 0xc5, 0x65, 0x1a, 0xca, 0x33, 0x45, 0x19, 0x0e, 0x87, 0x43, 0xfa, 0xfe, 0x65, 0x59, 0x9e, 0x39, 0xf6, 0x45, 0x37, 0xbf, 0x1c, 0xa6, 0x9e, 0x73, 0x1e, 0x9b, 0x93, 0x9d, 0x4d, 0x0b, 0x68, 0xbe, 0x0e, 0x3b, 0x0b, 0x02, 0x72, 0xe6, 0x4d, 0x66, 0xf7, 0xf4, 0x7b, 0x9e, 0x4d, 0xd7, 0x57, 0x0a, 0x66, 0x7e, 0x0f, 0x47, 0x89, 0xa7, 0xd6, 0x3a, 0xa1, 0x93, 0xb9, 0x46, 0x7e, 0x4a, 0xaa, 0x9b, 0x4b, 0xd5, 0x9b, 0x9b, 0xfa, 0x93, 0xa7, 0x03, 0x13, 0x17, 0x86, 0x34, 0x7e, 0xa6, 0xc9, 0x9b, 0x73, 0x91, 0x8b, 0x08, 0xd7, 0x14, 0x91, 0xb8, 0xe6, 0x8a, 0x37, 0xe7, 0xf3, 0x40, 0xef, 0x8f, 0x83, 0xc7, 0x84, 0x34, 0xe9, 0x4f, 0x9a, 0x76, 0x2e, 0x78, 0x90, 0xb0, 0x15, 0x30, 0xa6, 0x80, 0xd1, 0x05, 0xbc, 0xaf, 0xc8, 0x45, 0x32, 0x0c, 0x29, 0x8c, 0xbb, 0x14, 0x50, 0x42, 0xd7, 0x8e, 0x52, 0x34, 0x2b, 0x2b, 0xc0, 0x59, 0x89, 0xe5, 0xf2, 0x3d, 0x36, 0xdb, 0x2d, 0xbc, 0x2f, 0x88, 0x70, 0x6d, 0x2d, 0x3c, 0x17, 0x50, 0x82, 0x61, 0xf7, 0xb2, 0x83, 0x92, 0x0c, 0x75, 0x59, 0x42, 0x08, 0x86, 0xcf, 0x9f, 0x3f, 0x03, 0x68, 0x71, 0x3c, 0xee, 0xb0, 0x6c, 0x18, 0x24, 0x93, 0x50, 0x45, 0x01, 0xa5, 0x88, 0xdb, 0xd4, 0x2c, 0x0c, 0x38, 0x93, 0xc1, 0x54, 0x4b, 0x53, 0xc6, 0xb9, 0xd3, 0x64, 0xaf, 0xea, 0x18, 0xa4, 0x28, 0x50, 0xd7, 0x0d, 0xaa, 0xaa, 0x81, 0x3e, 0x52, 0xfa, 0xa7, 0x0e, 0x9e, 0x07, 0xe2, 0xff, 0xa3, 0xec, 0x5d, 0x62, 0x6d, 0x4b, 0xd2, 0xf4, 0xa0, 0x2f, 0x22, 0xd6, 0x6b, 0x3f, 0xce, 0xf3, 0x66, 0xe6, 0xcd, 0xac, 0xac, 0xb2, 0xcb, 0xdd, 0xd5, 0xad, 0x6e, 0x77, 0xb5, 0x1b, 0xdc, 0xb2, 0x07, 0x06, 0xa9, 0x85, 0x91, 0x6c, 0xc9, 0x02, 0x63, 0x61, 0x09, 0x23, 0x79, 0x60, 0x0f, 0x61, 0x84, 0xf1, 0x10, 0x31, 0x60, 0x62, 0x18, 0x02, 0x33, 0x06, 0x20, 0x64, 0x1b, 0x8b, 0x01, 0x6a, 0xe1, 0x09, 0x13, 0x46, 0x08, 0xe4, 0x01, 0x16, 0x20, 0x70, 0xbb, 0x5d, 0xea, 0xaa, 0x76, 0x51, 0x59, 0xae, 0x7c, 0xde, 0xc7, 0x79, 0xec, 0xc7, 0xda, 0x6b, 0xad, 0x78, 0x30, 0xf8, 0xe3, 0x8f, 0xf5, 0x47, 0xec, 0xb5, 0x4f, 0x36, 0x99, 0x3a, 0xba, 0x99, 0xe7, 0x9e, 0xb3, 0xf7, 0x5e, 0x6b, 0x45, 0xc4, 0xff, 0xfa, 0x1e, 0x4d, 0x85, 0x71, 0x3c, 0x62, 0x18, 0x0f, 0xf0, 0xf0, 0xb8, 0xbb, 0x26, 0x7d, 0x12, 0xad, 0x0c, 0xbc, 0x27, 0x01, 0xa3, 0xd3, 0xf1, 0x19, 0xfb, 0x29, 0xea, 0x24, 0x6c, 0x6e, 0x28, 0xb8, 0x43, 0x41, 0x79, 0x07, 0x15, 0x3c, 0x25, 0x19, 0xce, 0x63, 0xec, 0x4f, 0x68, 0x5a, 0xea, 0x12, 0xee, 0x9e, 0x7b, 0x1c, 0x0f, 0x4f, 0x30, 0xc9, 0x7d, 0x30, 0xa0, 0x36, 0x06, 0x83, 0xb3, 0x49, 0x77, 0xa5, 0xed, 0xea, 0xe8, 0x55, 0x42, 0x2d, 0xf7, 0xba, 0x51, 0x50, 0x76, 0x82, 0x9d, 0x46, 0x1c, 0x8f, 0xa4, 0x88, 0xa8, 0xaa, 0x15, 0x9a, 0xd6, 0xe0, 0x76, 0xd5, 0xc0, 0xb4, 0x2d, 0x8e, 0x7e, 0x0d, 0x8f, 0xb8, 0xfe, 0x15, 0xb0, 0x6a, 0x57, 0xd8, 0xb4, 0x0d, 0xfc, 0x38, 0xe0, 0xb0, 0x9b, 0xb0, 0xf6, 0x01, 0x4e, 0x03, 0xbe, 0xd2, 0x08, 0x46, 0x93, 0xa6, 0xfc, 0xaf, 0x7e, 0x57, 0x85, 0xa6, 0x21, 0xc0, 0xc2, 0xfd, 0xfd, 0x07, 0x68, 0x9a, 0x0e, 0xbb, 0xdd, 0x0e, 0xab, 0x6e, 0x8d, 0xe3, 0x34, 0x44, 0xdd, 0xeb, 0x0d, 0xba, 0x76, 0x0d, 0xef, 0x81, 0xe1, 0x34, 0x22, 0x04, 0x42, 0x7e, 0xba, 0x6e, 0x48, 0x10, 0x7e, 0x63, 0xaa, 0x24, 0xa4, 0xdf, 0xb6, 0x2d, 0xd6, 0xeb, 0x35, 0x9e, 0x9e, 0x9e, 0x00, 0x50, 0x12, 0x40, 0xc2, 0x32, 0x94, 0xc9, 0x23, 0xc4, 0xc0, 0x68, 0xd6, 0xd8, 0x6e, 0xaf, 0x61, 0x4c, 0x8d, 0xfe, 0x38, 0xc1, 0x4e, 0x01, 0xeb, 0xf5, 0x16, 0x77, 0xb7, 0x1f, 0x90, 0xf5, 0x64, 0xb3, 0xa1, 0xa1, 0xbf, 0x0b, 0xf0, 0x4e, 0x43, 0x81, 0x66, 0xf8, 0x75, 0x45, 0xfe, 0xec, 0x5e, 0x9d, 0xd2, 0xfb, 0x72, 0xf5, 0x44, 0x92, 0x93, 0xf4, 0x3d, 0x16, 0xf7, 0xf7, 0x0e, 0xb1, 0x4d, 0x34, 0x89, 0x03, 0x34, 0x60, 0xb5, 0xea, 0x5e, 0x94, 0x76, 0xbc, 0xb4, 0x59, 0x67, 0xfd, 0x78, 0x77, 0x56, 0xf5, 0x48, 0x65, 0xad, 0xed, 0x76, 0x7b, 0xa6, 0xd5, 0x9d, 0xa1, 0x50, 0x55, 0x87, 0xd3, 0xe9, 0x94, 0x28, 0x83, 0xd2, 0x71, 0x8a, 0xa9, 0x4a, 0x32, 0xc0, 0xcb, 0xb9, 0x1e, 0x61, 0x17, 0xe6, 0x2a, 0xa0, 0xeb, 0x48, 0x76, 0x97, 0x33, 0xca, 0x61, 0x18, 0xb0, 0x5a, 0xad, 0x32, 0x8d, 0x6e, 0xd9, 0x3d, 0x28, 0x81, 0x6c, 0x4b, 0xda, 0xd2, 0xe3, 0xe8, 0x33, 0xf4, 0x3d, 0xd3, 0xc1, 0xf8, 0x67, 0x9d, 0xcf, 0x6d, 0x3d, 0x65, 0x0b, 0x9e, 0x2b, 0xe6, 0xa5, 0x60, 0xc0, 0x87, 0x6a, 0xdb, 0x76, 0x67, 0x7f, 0x2f, 0xdf, 0x7f, 0x15, 0xa5, 0x14, 0x97, 0x0e, 0x5b, 0x79, 0x20, 0xe7, 0xb3, 0xd7, 0xf3, 0x0a, 0x4b, 0x7a, 0x80, 0x4b, 0x39, 0x53, 0x5b, 0xd0, 0x86, 0xca, 0x6a, 0x94, 0x5b, 0xce, 0x97, 0xbc, 0xae, 0x65, 0xcb, 0xb9, 0x6c, 0xe5, 0x4a, 0xc3, 0x1b, 0xa9, 0xf8, 0x26, 0x3b, 0x0c, 0xd4, 0xfa, 0x33, 0x99, 0xb0, 0x93, 0x3c, 0xcc, 0x39, 0xc9, 0xbb, 0x34, 0x0a, 0x61, 0x29, 0x64, 0x79, 0x1f, 0xb8, 0x55, 0xce, 0xdc, 0x71, 0xa9, 0x65, 0x7f, 0x36, 0x6b, 0x56, 0x6d, 0x5a, 0xaf, 0x92, 0xde, 0x25, 0xbb, 0x3b, 0xf2, 0x9e, 0x95, 0x14, 0xc7, 0xa7, 0xa7, 0xf7, 0x73, 0x55, 0x5e, 0xd7, 0x59, 0xd2, 0xd4, 0xb6, 0x2d, 0xc6, 0x71, 0x2c, 0xe6, 0xb5, 0x45, 0x77, 0x45, 0xd7, 0x67, 0x6d, 0x78, 0xbe, 0x5f, 0x65, 0x10, 0x5f, 0x42, 0x94, 0x7b, 0x4f, 0xb3, 0x75, 0xe7, 0x26, 0x8c, 0x31, 0xb9, 0xae, 0xeb, 0x3a, 0xd2, 0xf5, 0x48, 0x2f, 0x21, 0xbd, 0x97, 0x8a, 0xdd, 0x31, 0x6d, 0xa1, 0x34, 0xe9, 0x12, 0xc0, 0xaf, 0x17, 0x15, 0x14, 0xe5, 0x18, 0x68, 0x49, 0xdb, 0x21, 0x8d, 0x36, 0xd4, 0xcb, 0x7e, 0xe5, 0xc6, 0x2c, 0x5b, 0x99, 0xa6, 0x6b, 0x51, 0xfe, 0xcc, 0x52, 0xb4, 0x7c, 0xaf, 0x97, 0xb4, 0xdb, 0x1b, 0xa3, 0xcf, 0x00, 0xa2, 0x32, 0x69, 0xe4, 0xf5, 0xb8, 0x24, 0x16, 0x44, 0x5a, 0xfe, 0x1b, 0x4a, 0x52, 0x95, 0x25, 0x55, 0x32, 0x83, 0x84, 0x50, 0x0f, 0x51, 0xcf, 0x7d, 0xe8, 0x8f, 0xf1, 0x9c, 0x39, 0xe2, 0x8b, 0xcf, 0x7f, 0x8a, 0x77, 0x6f, 0x7f, 0x8e, 0xae, 0xf3, 0xd8, 0x5e, 0x75, 0xd0, 0x66, 0x4a, 0x12, 0xd1, 0x7e, 0xa2, 0x8e, 0x5e, 0x5d, 0xad, 0x50, 0x45, 0x5b, 0xe5, 0xdd, 0x48, 0xa0, 0xdc, 0xbb, 0xdb, 0x57, 0xf8, 0xf0, 0xc3, 0x8f, 0x51, 0x99, 0x8e, 0x68, 0xa1, 0x8a, 0xbe, 0x1f, 0x0e, 0xff, 0x2b, 0x4e, 0xa7, 0x13, 0x76, 0xbb, 0x1d, 0x4e, 0x27, 0x62, 0x49, 0xad, 0x37, 0x9d, 0x10, 0x90, 0xb2, 0x30, 0x46, 0x58, 0x3b, 0x57, 0x6a, 0x76, 0x8a, 0x0b, 0x81, 0x9a, 0xfd, 0xc2, 0xa7, 0x81, 0xd7, 0x21, 0x9f, 0x99, 0x9c, 0x54, 0xf2, 0xb9, 0xc4, 0x67, 0x12, 0x9f, 0x8f, 0xc3, 0x69, 0xb6, 0xda, 0x96, 0xeb, 0xbf, 0x69, 0x1a, 0xac, 0x56, 0xab, 0x45, 0xd6, 0x10, 0x17, 0x4a, 0xa7, 0xd3, 0x09, 0x5d, 0xd7, 0x64, 0x09, 0x6b, 0x99, 0x84, 0xd1, 0x08, 0xbb, 0x4e, 0xe6, 0x61, 0x32, 0x81, 0xa5, 0x31, 0x77, 0x9b, 0x3a, 0x5c, 0x52, 0x7a, 0xb9, 0x6d, 0x49, 0xac, 0x66, 0xb2, 0xc7, 0xb3, 0x73, 0x9f, 0x93, 0xfa, 0xb6, 0x6d, 0x51, 0xd7, 0x6d, 0xd2, 0x87, 0xe9, 0xfb, 0x9e, 0x24, 0xdb, 0xef, 0xee, 0xa8, 0xcd, 0x40, 0x17, 0x6e, 0xa2, 0x90, 0x7e, 0x85, 0xa6, 0xad, 0xf1, 0xb0, 0x7f, 0xc2, 0x7e, 0x6f, 0xf1, 0xfe, 0xfd, 0x7b, 0x54, 0x55, 0x83, 0xba, 0x6a, 0xd1, 0x34, 0x1d, 0xd6, 0xab, 0x0d, 0xea, 0xda, 0x60, 0xf4, 0x0a, 0xdb, 0xab, 0x7b, 0xac, 0x56, 0x2b, 0xb4, 0x6d, 0x8b, 0xc3, 0xbe, 0xc7, 0xd7, 0x5f, 0x7f, 0x8d, 0xb7, 0x5f, 0xbc, 0x49, 0xad, 0x06, 0x56, 0x94, 0xb2, 0xd6, 0x62, 0x1a, 0x01, 0xef, 0x59, 0xe3, 0xb7, 0x46, 0xd5, 0xb4, 0x80, 0xae, 0x50, 0x35, 0x1d, 0xb6, 0xd5, 0x1a, 0x80, 0x46, 0xd7, 0x12, 0x0f, 0x6f, 0xb5, 0xda, 0xa0, 0xee, 0xae, 0x66, 0x13, 0x8f, 0x50, 0x01, 0x81, 0xc4, 0x59, 0x8c, 0xa9, 0xe3, 0xcc, 0x5c, 0x45, 0x27, 0x1b, 0x6e, 0x27, 0x86, 0x0b, 0xa8, 0x4e, 0x95, 0xc4, 0x2b, 0x66, 0x27, 0x2e, 0x97, 0x55, 0x20, 0xe5, 0x5c, 0x8f, 0x0f, 0xfc, 0x25, 0xa4, 0x28, 0x6f, 0x1e, 0xad, 0xc3, 0x99, 0x81, 0x88, 0xfc, 0x79, 0x0e, 0x68, 0xa5, 0x69, 0x49, 0xda, 0xc0, 0xba, 0xca, 0x5a, 0xe0, 0xf3, 0xec, 0xd7, 0x24, 0x3e, 0xa3, 0x0c, 0xc2, 0x65, 0xd0, 0x91, 0x01, 0x89, 0x03, 0x37, 0x1b, 0x8f, 0xb0, 0x72, 0x5f, 0x79, 0xa0, 0xcb, 0x76, 0xbc, 0xbc, 0xbe, 0xc4, 0x4d, 0x17, 0x49, 0xc9, 0x4c, 0xe7, 0x98, 0x01, 0x23, 0xbc, 0x59, 0x64, 0x40, 0x2f, 0xd1, 0xb9, 0x65, 0xf7, 0x61, 0x49, 0xf6, 0x55, 0xca, 0x9c, 0x2e, 0x1d, 0xaa, 0x4b, 0x7e, 0xce, 0xe5, 0xdc, 0x75, 0x09, 0x4d, 0x5e, 0x22, 0xb4, 0x65, 0x22, 0x55, 0xfe, 0xbc, 0x3c, 0xe8, 0x96, 0xdc, 0xc4, 0x98, 0x8a, 0x25, 0x9f, 0x6d, 0xce, 0xa3, 0xcf, 0x75, 0x08, 0x64, 0x35, 0x2d, 0x01, 0x53, 0x25, 0xbf, 0x98, 0x5f, 0xe3, 0xd4, 0x4f, 0xe9, 0x9e, 0xb6, 0xcd, 0x0a, 0x4d, 0xdd, 0xe5, 0x82, 0x3a, 0x1c, 0x30, 0x82, 0x8a, 0x7a, 0xf2, 0x79, 0x47, 0x80, 0x93, 0x34, 0x39, 0x5a, 0x91, 0x74, 0x25, 0xc6, 0x31, 0x94, 0x01, 0x37, 0x6b, 0x9b, 0x2e, 0xd0, 0xa3, 0xf8, 0x33, 0x70, 0x40, 0x96, 0xd5, 0xae, 0xac, 0x10, 0xd9, 0x56, 0xb9, 0x54, 0x68, 0xe3, 0x7b, 0x27, 0xed, 0x63, 0x9d, 0x68, 0xbf, 0xa7, 0x67, 0x83, 0x65, 0x30, 0x97, 0x1c, 0xb3, 0x94, 0x55, 0x69, 0xce, 0xf8, 0xd0, 0xf0, 0x5e, 0x21, 0xc0, 0xa6, 0xee, 0x09, 0xa1, 0xcf, 0xa7, 0xd8, 0x96, 0x35, 0xd1, 0xfe, 0x96, 0xb8, 0x93, 0x5a, 0x2b, 0x28, 0x6d, 0xc8, 0x46, 0x53, 0x01, 0x6e, 0x52, 0x17, 0x91, 0xe8, 0x12, 0x9c, 0xb8, 0x24, 0x15, 0x0b, 0x00, 0x4a, 0xe3, 0x5b, 0x78, 0xe2, 0x2f, 0x0b, 0x2f, 0xd1, 0xa8, 0x47, 0x5d, 0x44, 0xb2, 0xf3, 0x33, 0xbb, 0x84, 0x63, 0x88, 0x8b, 0xe2, 0xac, 0xc3, 0xc0, 0xcf, 0xb5, 0xd4, 0x41, 0x28, 0x13, 0x0a, 0xef, 0xa6, 0x88, 0xe5, 0x19, 0x93, 0xfa, 0x20, 0xbf, 0x6c, 0x08, 0xc0, 0x38, 0x0e, 0x80, 0xf7, 0xe8, 0xba, 0x0a, 0x4a, 0x79, 0x74, 0xab, 0x06, 0xb7, 0x77, 0xd7, 0xa8, 0xeb, 0x09, 0x4d, 0x3b, 0x3b, 0x0d, 0x7a, 0x6f, 0xa1, 0x8c, 0x42, 0x65, 0x6a, 0x74, 0x4d, 0x0b, 0xa5, 0xe8, 0x6c, 0x69, 0x23, 0xa2, 0xbb, 0x6b, 0x01, 0x8d, 0x01, 0xc7, 0xc3, 0x0e, 0xbb, 0xe7, 0x23, 0x75, 0x5c, 0xa7, 0x09, 0x37, 0xcd, 0x63, 0xa4, 0x05, 0x56, 0xa8, 0xeb, 0x2b, 0xac, 0x56, 0x2b, 0x6c, 0xaf, 0xd6, 0xa9, 0xdb, 0xa3, 0xd4, 0xac, 0xa3, 0x31, 0x4d, 0x13, 0x29, 0xca, 0x45, 0x0c, 0x50, 0x08, 0x01, 0xcf, 0xfb, 0x5d, 0x5a, 0xef, 0x0c, 0x64, 0xe3, 0xb5, 0x2e, 0xd7, 0x12, 0xef, 0xc7, 0x69, 0x9a, 0xd2, 0x7f, 0x7b, 0xef, 0x51, 0x57, 0x1d, 0x80, 0x2a, 0x3b, 0xe7, 0x66, 0xde, 0x7c, 0x9d, 0xed, 0x7f, 0x1a, 0xd9, 0xaa, 0x18, 0x6c, 0x37, 0x08, 0xe1, 0x3a, 0xad, 0x71, 0xf6, 0x0d, 0x38, 0x9d, 0x4e, 0x69, 0x5f, 0xb0, 0x8d, 0x38, 0x8f, 0xac, 0x99, 0xe9, 0x25, 0x13, 0x8b, 0xcf, 0x7e, 0xfe, 0x33, 0xac, 0x56, 0x2d, 0xb6, 0xdb, 0x2d, 0x36, 0x9b, 0x4d, 0x0a, 0xe4, 0xf3, 0x78, 0xa9, 0x49, 0xc1, 0x3e, 0xb3, 0x5d, 0x8e, 0x7b, 0x9b, 0x28, 0xe6, 0x7d, 0x66, 0x46, 0x55, 0xad, 0xb6, 0xe4, 0x65, 0x7e, 0x3c, 0x1e, 0xf1, 0xf6, 0xe1, 0x3d, 0xf6, 0x7b, 0xd2, 0x3e, 0x6f, 0x5b, 0x85, 0xdf, 0xfe, 0xb3, 0x7f, 0x26, 0x3a, 0x8d, 0xf5, 0xa4, 0x0e, 0xe6, 0x02, 0x8e, 0xa7, 0x03, 0x8e, 0xa7, 0x1e, 0xfa, 0x49, 0xe3, 0xe8, 0xe8, 0x02, 0xaf, 0xae, 0x2c, 0xba, 0x8e, 0x08, 0xfd, 0xc7, 0x83, 0x87, 0x77, 0x35, 0xb4, 0x6a, 0x70, 0xd8, 0x4d, 0xf1, 0xe6, 0x54, 0xa8, 0xcc, 0x0a, 0xcd, 0x5a, 0xc7, 0x76, 0x15, 0x5d, 0xec, 0xcd, 0xab, 0x0f, 0xe8, 0xff, 0xeb, 0x16, 0x55, 0xd5, 0x21, 0x78, 0x95, 0x14, 0x89, 0xda, 0x66, 0x05, 0x1b, 0xd8, 0x2c, 0x80, 0x61, 0x98, 0x1c, 0x90, 0x47, 0x20, 0x68, 0xd4, 0x9d, 0xc9, 0x5a, 0x9f, 0x97, 0x8c, 0x3d, 0x64, 0x8b, 0x79, 0xae, 0x34, 0xfd, 0xb7, 0x2a, 0x31, 0xc9, 0x19, 0xa2, 0x54, 0x65, 0x4b, 0xb4, 0xa0, 0xaa, 0xbe, 0xd8, 0xbe, 0xe4, 0x43, 0x6d, 0xa9, 0xfd, 0x3c, 0xbf, 0x57, 0x10, 0xa0, 0x14, 0xd6, 0xe6, 0x66, 0x85, 0x2d, 0xa0, 0x8e, 0xf6, 0xa5, 0xf4, 0x7e, 0x26, 0xf1, 0x9b, 0xd9, 0xbe, 0xd4, 0x98, 0x3a, 0xab, 0xb0, 0xf8, 0x33, 0xca, 0x83, 0x9e, 0x2b, 0xc0, 0x0c, 0x18, 0x28, 0xaa, 0xe8, 0x99, 0xc2, 0x72, 0x0e, 0x1c, 0x2a, 0x67, 0x6e, 0x67, 0x2d, 0xcc, 0x64, 0x63, 0xea, 0xb2, 0x2f, 0x89, 0x94, 0x5f, 0x6a, 0xaf, 0x96, 0x33, 0xbe, 0xf2, 0xa0, 0x5e, 0x6a, 0x2f, 0x2e, 0x81, 0x97, 0x96, 0x50, 0xbc, 0x4b, 0x73, 0x50, 0x09, 0xb2, 0x2a, 0x83, 0xfc, 0xa5, 0xc3, 0x76, 0x09, 0x70, 0x75, 0xc9, 0x03, 0x5e, 0xb6, 0x71, 0xa5, 0x8e, 0xbe, 0xac, 0x96, 0xe5, 0x1a, 0x9a, 0x51, 0xd2, 0xb4, 0x59, 0xb9, 0x92, 0x92, 0xfc, 0xe8, 0x92, 0x77, 0xbd, 0x14, 0x74, 0xe5, 0xc1, 0xc5, 0x07, 0xb8, 0x9c, 0xdf, 0xf2, 0x7f, 0xcb, 0x24, 0x2c, 0x93, 0xf9, 0x45, 0x0c, 0x72, 0x6a, 0xd6, 0x0b, 0xd0, 0xa9, 0x6d, 0x08, 0xac, 0x56, 0xdd, 0xd9, 0x18, 0x4a, 0x06, 0x3a, 0xe7, 0xa6, 0x33, 0x50, 0x16, 0x7f, 0x26, 0x7e, 0xcf, 0x25, 0x9e, 0x74, 0xfa, 0xbe, 0x56, 0x70, 0xde, 0x65, 0x74, 0xb4, 0x94, 0x40, 0x1a, 0x4e, 0x98, 0x66, 0x5f, 0xee, 0x32, 0xa9, 0xf3, 0xce, 0x44, 0x8c, 0x0a, 0x03, 0x06, 0x19, 0x6c, 0xea, 0xa3, 0x04, 0xb5, 0x16, 0x55, 0xb4, 0x4c, 0xd6, 0x74, 0xac, 0xd6, 0x11, 0x5d, 0xbf, 0x7c, 0xfe, 0x33, 0xac, 0xb7, 0x12, 0x02, 0xa0, 0xc2, 0x2c, 0x8f, 0x9a, 0x64, 0x07, 0xe2, 0xf7, 0x82, 0xba, 0xac, 0xc2, 0xf6, 0x2d, 0x66, 0x39, 0x2c, 0xbe, 0xf2, 0x92, 0x5d, 0xeb, 0x92, 0x5b, 0xdc, 0xb7, 0x49, 0xd7, 0xca, 0xfd, 0xbd, 0xc4, 0xc0, 0x90, 0x49, 0xb7, 0xf5, 0x2e, 0x82, 0x42, 0x03, 0x94, 0x96, 0xe3, 0x28, 0x45, 0x66, 0x57, 0xab, 0x0e, 0x2a, 0x10, 0xc7, 0xfb, 0x78, 0x38, 0x62, 0x9a, 0x7a, 0x38, 0x37, 0xc2, 0xfb, 0x1e, 0xc7, 0xbe, 0xc7, 0xdd, 0xdd, 0x2b, 0x78, 0x3f, 0x01, 0x8e, 0x94, 0x24, 0x8d, 0x56, 0x30, 0x15, 0xe9, 0x2b, 0x20, 0x4c, 0xe8, 0x56, 0x2c, 0xa2, 0xf4, 0x8c, 0xfe, 0x34, 0xe1, 0x74, 0x1a, 0xe1, 0xc3, 0x84, 0x6e, 0xd5, 0x60, 0xb3, 0x35, 0xb8, 0xa9, 0x6f, 0x51, 0xd7, 0xb3, 0xa4, 0x2c, 0xf3, 0xb6, 0xb5, 0x46, 0xc2, 0x3e, 0xa5, 0x6b, 0xd1, 0x01, 0x95, 0xd7, 0x99, 0x6b, 0xdc, 0xd5, 0xcd, 0x75, 0x96, 0x54, 0x4b, 0x56, 0x05, 0x07, 0x52, 0xd9, 0x25, 0xe3, 0x2a, 0x79, 0xfe, 0x59, 0x5a, 0xe8, 0x4a, 0xe5, 0x9d, 0x27, 0x7a, 0x3d, 0x85, 0xd5, 0x7a, 0xbb, 0xb8, 0x27, 0x79, 0x14, 0xed, 0x9d, 0x4a, 0x67, 0x3c, 0xbf, 0xbe, 0x4c, 0x70, 0xbb, 0xae, 0x43, 0xdf, 0xf7, 0x78, 0x7e, 0x7e, 0x4e, 0x18, 0x34, 0x89, 0x91, 0x5a, 0xaf, 0xe7, 0x6e, 0xc4, 0xf3, 0xf3, 0xf3, 0x19, 0x30, 0x76, 0xbd, 0x6e, 0x52, 0x07, 0x41, 0x16, 0x54, 0xfc, 0x9c, 0x9a, 0xc6, 0x64, 0xbe, 0x0b, 0xce, 0x4d, 0xa8, 0x76, 0xc7, 0x1e, 0xb7, 0x4d, 0x8b, 0x76, 0xbd, 0x41, 0xb7, 0x36, 0xe8, 0x36, 0xd7, 0x80, 0x79, 0x87, 0xa6, 0x69, 0xf0, 0xf6, 0xf1, 0x21, 0x69, 0x7f, 0x7b, 0x05, 0x04, 0xad, 0xe0, 0x61, 0xa2, 0x21, 0x7b, 0xc0, 0xfb, 0xf7, 0x03, 0xb4, 0x1e, 0xf1, 0xfe, 0xfd, 0x29, 0x55, 0xf9, 0xc6, 0xb4, 0xb8, 0xb9, 0x21, 0xdf, 0xf3, 0xe8, 0xcf, 0x2a, 0xb2, 0xa7, 0x26, 0x06, 0x0b, 0xfa, 0xb3, 0x59, 0x11, 0xda, 0x4f, 0xab, 0x0a, 0x4d, 0xd3, 0xc2, 0x7b, 0xe0, 0xd4, 0x8f, 0x24, 0xdc, 0x5f, 0xd5, 0xd1, 0x9c, 0x21, 0xc4, 0x40, 0x1f, 0xcd, 0x20, 0xe2, 0xe2, 0x09, 0xc1, 0xa3, 0xef, 0xc7, 0x64, 0xdb, 0xc8, 0x1b, 0x55, 0x3e, 0x94, 0xd4, 0xea, 0x76, 0x3c, 0x73, 0xd4, 0xdf, 0xba, 0x41, 0x64, 0x05, 0x2d, 0xfd, 0xe1, 0xcb, 0x0c, 0xb8, 0x44, 0xf9, 0x2e, 0x39, 0x38, 0xf1, 0x03, 0xcc, 0x17, 0x8a, 0x98, 0x2b, 0xea, 0x2a, 0x02, 0x39, 0xa2, 0x68, 0x89, 0x63, 0x50, 0x97, 0x4a, 0x41, 0x9b, 0xf4, 0xaa, 0x15, 0xb9, 0xea, 0x38, 0x25, 0xaa, 0x1d, 0x7a, 0x4d, 0x76, 0xc1, 0xe3, 0x85, 0x26, 0x95, 0xe1, 0xf8, 0x50, 0x2d, 0xe9, 0x49, 0xb2, 0x1a, 0x2f, 0x41, 0x74, 0xf2, 0x40, 0x58, 0xb2, 0x00, 0x95, 0xc1, 0x42, 0x9b, 0xfa, 0x0c, 0x59, 0x5d, 0xa2, 0x95, 0xcb, 0x99, 0x62, 0x5e, 0x81, 0xe8, 0xc5, 0xa0, 0xba, 0xf4, 0xb3, 0x58, 0x50, 0x65, 0x2b, 0x05, 0x59, 0x96, 0x92, 0x38, 0xa9, 0xb5, 0x2e, 0x2b, 0x7b, 0x99, 0x98, 0x2d, 0x3b, 0x51, 0xe5, 0x56, 0xac, 0x65, 0xa2, 0xc8, 0xaf, 0xc9, 0x22, 0x36, 0x65, 0x4b, 0x5d, 0xde, 0xfb, 0x32, 0x91, 0x98, 0x67, 0xb8, 0x2a, 0x63, 0x19, 0xc8, 0xf6, 0x39, 0x27, 0x05, 0x65, 0xcb, 0x3f, 0x03, 0x37, 0x79, 0x95, 0x90, 0xf6, 0xe9, 0xfb, 0x41, 0x47, 0x39, 0x4c, 0x9f, 0xc6, 0x4d, 0xa3, 0xb3, 0x67, 0x49, 0x27, 0xb1, 0x3d, 0xd4, 0x22, 0x4f, 0x7d, 0xe9, 0x7e, 0x96, 0x09, 0x56, 0x08, 0xc4, 0xc4, 0xe0, 0x80, 0x49, 0x1d, 0x27, 0x85, 0x5a, 0xcf, 0x49, 0xe6, 0x38, 0x8e, 0x04, 0x40, 0x5d, 0xb4, 0x0b, 0x05, 0x5c, 0xc8, 0xdd, 0xdb, 0x2e, 0xc9, 0xb4, 0x2e, 0x51, 0xbf, 0xc8, 0x9b, 0x41, 0x47, 0xe0, 0x69, 0x4c, 0x86, 0x55, 0x88, 0x01, 0x4a, 0x47, 0x55, 0x53, 0xbf, 0xc8, 0xc0, 0x20, 0x0d, 0x75, 0x0f, 0x7d, 0xc1, 0x87, 0xbe, 0x7c, 0xfe, 0x4b, 0x78, 0x95, 0x97, 0xbe, 0x3f, 0x7f, 0xaf, 0xba, 0x28, 0x18, 0xc3, 0x3a, 0xe9, 0x19, 0x26, 0xa0, 0xb8, 0x0f, 0x4b, 0x82, 0x43, 0xb9, 0x16, 0x7c, 0x38, 0xeb, 0x20, 0x95, 0xe3, 0x8b, 0x4b, 0xdd, 0x47, 0x02, 0xf7, 0x06, 0x84, 0x40, 0x86, 0x5c, 0x2c, 0x28, 0x43, 0xeb, 0x8a, 0xce, 0x8b, 0x61, 0xec, 0x51, 0x29, 0x00, 0xce, 0xe1, 0x70, 0xdc, 0xe1, 0x34, 0xf4, 0x30, 0x55, 0xc0, 0x66, 0xb3, 0x42, 0x40, 0x0d, 0x3f, 0x59, 0x28, 0x06, 0x56, 0x06, 0x9f, 0x30, 0x29, 0xe4, 0xd7, 0xe6, 0x30, 0xf6, 0x0f, 0x14, 0xe4, 0xa6, 0x27, 0xd8, 0x6e, 0x95, 0x92, 0xfd, 0x55, 0xb7, 0x86, 0x31, 0x35, 0xb6, 0xab, 0xcd, 0xfc, 0x2c, 0x95, 0x4f, 0x78, 0xa3, 0x71, 0xe4, 0xe2, 0x22, 0x26, 0xbf, 0x95, 0x42, 0xad, 0xbb, 0xe8, 0x85, 0x4e, 0xe7, 0xa4, 0x73, 0x0e, 0xba, 0xaa, 0x53, 0x30, 0xe3, 0xd6, 0xb5, 0xec, 0x90, 0x49, 0x55, 0x40, 0x39, 0x82, 0x9a, 0x5b, 0xe4, 0x1e, 0x5a, 0xb7, 0x99, 0x82, 0xe3, 0xdc, 0x45, 0x75, 0x78, 0x7e, 0xde, 0x65, 0xfb, 0x97, 0xcf, 0x38, 0x2a, 0x72, 0x8f, 0xb8, 0xbe, 0x7a, 0x85, 0xd3, 0xe9, 0x98, 0xf6, 0x6e, 0xd7, 0x11, 0x75, 0x73, 0x18, 0x06, 0x3c, 0x3d, 0xed, 0xf1, 0xe6, 0xcd, 0x98, 0x75, 0xc3, 0xb6, 0x5b, 0xd2, 0x61, 0x21, 0x03, 0x28, 0x83, 0xd5, 0x9a, 0x46, 0xae, 0xfb, 0xfd, 0x3e, 0xca, 0xa3, 0xdb, 0xec, 0xf9, 0x7c, 0xf5, 0xd5, 0x57, 0x99, 0x92, 0x28, 0x81, 0xeb, 0x9a, 0x6c, 0xb4, 0xc9, 0x5d, 0x70, 0x3e, 0x87, 0xaa, 0xfb, 0x0f, 0x3e, 0x46, 0xd7, 0x75, 0x98, 0x26, 0x47, 0x76, 0x87, 0xda, 0xa2, 0x6e, 0x4f, 0x80, 0x52, 0x78, 0x78, 0x3a, 0xc2, 0x98, 0x98, 0x15, 0x28, 0x03, 0x53, 0xd3, 0x43, 0x58, 0xaf, 0xc8, 0xd3, 0xfc, 0x57, 0x7f, 0xe3, 0xe3, 0x88, 0x86, 0xaf, 0xe3, 0x8d, 0xab, 0x44, 0xb6, 0xd4, 0xe4, 0xf6, 0x8b, 0x41, 0x0b, 0x2f, 0xe4, 0x90, 0x68, 0x17, 0x8c, 0x58, 0x34, 0x5c, 0xa5, 0x54, 0x0a, 0x3a, 0xd0, 0xff, 0x87, 0xa8, 0xfc, 0xe6, 0x93, 0x69, 0x05, 0xd1, 0xc4, 0xf8, 0x20, 0x3a, 0x8d, 0xa7, 0xc8, 0x89, 0xe6, 0x07, 0x94, 0x57, 0xc3, 0x2a, 0xb6, 0xc4, 0x9d, 0xe5, 0x59, 0xb3, 0xc9, 0x82, 0xd4, 0x12, 0x58, 0x65, 0x29, 0xa3, 0x95, 0x73, 0x12, 0xae, 0x7e, 0xe9, 0xc1, 0x8d, 0x8b, 0x7e, 0xdd, 0x52, 0x5e, 0xf3, 0x92, 0x5a, 0x17, 0xb9, 0xc3, 0x9d, 0x6b, 0x49, 0xcb, 0x76, 0xb5, 0xfc, 0x0c, 0x9c, 0x41, 0xca, 0x39, 0xe7, 0x30, 0x0c, 0x59, 0x0b, 0x98, 0x5b, 0x45, 0x32, 0x23, 0xe5, 0xce, 0x44, 0x69, 0xce, 0x31, 0x4d, 0x53, 0xea, 0x40, 0x94, 0x19, 0xee, 0xa5, 0xaa, 0xba, 0x04, 0x77, 0xd5, 0x51, 0xa3, 0x5b, 0xce, 0x90, 0xe4, 0x21, 0x22, 0x95, 0xb6, 0x96, 0xc0, 0x7d, 0x97, 0xaa, 0x87, 0x84, 0x02, 0x5e, 0xe0, 0xf1, 0x2e, 0x99, 0x55, 0x5c, 0xfa, 0x67, 0x1e, 0x8d, 0xe4, 0x5a, 0xe0, 0xe5, 0x3c, 0x77, 0x49, 0xbf, 0x3c, 0x93, 0x48, 0x2d, 0xba, 0x0d, 0x32, 0xc1, 0x93, 0xbf, 0xcb, 0x87, 0x47, 0xd9, 0xf2, 0xe4, 0xdf, 0x93, 0xb3, 0x3d, 0x0a, 0xea, 0x4d, 0xfc, 0x3b, 0x1f, 0x99, 0x05, 0x88, 0x5f, 0x84, 0x1b, 0xe1, 0xbd, 0x51, 0x1e, 0xf6, 0x0c, 0x86, 0x92, 0x09, 0x94, 0x54, 0x4e, 0x5b, 0x0c, 0xbe, 0x17, 0x78, 0xda, 0x4b, 0x0a, 0x70, 0x94, 0x2c, 0x92, 0x1f, 0x76, 0x0e, 0xc8, 0x0a, 0x19, 0x6a, 0xdd, 0xa0, 0x39, 0xa3, 0x85, 0xf1, 0x1a, 0xe3, 0xf9, 0x7f, 0x49, 0x27, 0xcc, 0x12, 0x6d, 0x3f, 0x77, 0xa8, 0x22, 0xd3, 0x33, 0xca, 0xeb, 0xfa, 0x02, 0x57, 0x11, 0x04, 0xcb, 0x04, 0xa9, 0xb3, 0xc5, 0x5c, 0x6e, 0x02, 0x76, 0xb9, 0xa8, 0x6c, 0x46, 0xb4, 0x28, 0x53, 0x19, 0x78, 0x47, 0x81, 0x9b, 0x95, 0xc9, 0x08, 0x69, 0x4f, 0x25, 0x38, 0x25, 0x3f, 0x5e, 0x74, 0xc6, 0xd8, 0x6d, 0x4c, 0x65, 0xf7, 0x19, 0xc8, 0xc1, 0x8e, 0xf3, 0x91, 0x11, 0x00, 0x98, 0x3f, 0x52, 0x22, 0xf2, 0x92, 0x41, 0x4c, 0x79, 0x06, 0x95, 0x89, 0xeb, 0x52, 0xd7, 0xe8, 0xa5, 0x0e, 0x40, 0xd9, 0xc5, 0x5a, 0x4a, 0xd0, 0x52, 0xc7, 0xca, 0xe8, 0xa4, 0x15, 0x31, 0x8f, 0xa3, 0x00, 0xef, 0x58, 0xe1, 0x72, 0x02, 0x6a, 0x03, 0xa5, 0x67, 0x7a, 0x6b, 0x53, 0x07, 0xf2, 0x49, 0xd7, 0x01, 0xa7, 0xc1, 0xc1, 0x98, 0x0a, 0x5d, 0x53, 0xc1, 0x3a, 0xf2, 0x31, 0x47, 0x98, 0xa0, 0x8c, 0x42, 0xd3, 0x2a, 0xdc, 0xde, 0x6d, 0x61, 0xad, 0x25, 0xab, 0xe2, 0xf5, 0x3a, 0x09, 0x5e, 0x79, 0xef, 0xd1, 0xf7, 0xcf, 0x78, 0x7e, 0xa6, 0x6b, 0x34, 0x15, 0xcd, 0xc9, 0xdb, 0xb6, 0x4e, 0xdc, 0x78, 0x63, 0xc8, 0x11, 0x6d, 0x3e, 0x73, 0x6c, 0x04, 0x68, 0xf7, 0x29, 0x60, 0x5b, 0x9f, 0x1b, 0x2f, 0x95, 0xeb, 0x9a, 0x03, 0x5f, 0xa9, 0x1f, 0x32, 0x3f, 0x41, 0x0b, 0xa5, 0x49, 0xfa, 0x79, 0x9c, 0xc6, 0x8c, 0xad, 0x41, 0xc2, 0x53, 0x63, 0x0a, 0x94, 0x00, 0xb0, 0x5e, 0xaf, 0xb1, 0xd9, 0x6c, 0x70, 0xb7, 0xba, 0xc1, 0xcd, 0xed, 0x15, 0x8c, 0x5a, 0x17, 0x86, 0x64, 0x54, 0xd4, 0x0e, 0xc3, 0x80, 0xa6, 0x69, 0xa2, 0x3a, 0x9c, 0x3f, 0x03, 0xc4, 0x72, 0x55, 0xff, 0xf0, 0xf8, 0x36, 0x55, 0xfb, 0x2c, 0x35, 0x5c, 0xd7, 0x55, 0x74, 0x62, 0x9b, 0xf0, 0xc1, 0x07, 0x1f, 0xa4, 0x00, 0x2e, 0xa9, 0x9b, 0x7c, 0x5d, 0x8f, 0x4f, 0xef, 0x61, 0x2a, 0x95, 0x3a, 0x18, 0xda, 0x00, 0xd5, 0x97, 0x6f, 0xde, 0xc1, 0xe8, 0x1a, 0xe3, 0x68, 0xb1, 0xd9, 0x5c, 0x51, 0xf6, 0xd4, 0xac, 0xa8, 0x2d, 0xee, 0x48, 0xde, 0x71, 0xa2, 0x75, 0x1c, 0x59, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xbb, 0xbd, 0x8a, 0x2a, 0x3f, 0x35, 0x9a, 0xa6, 0xa3, 0xa0, 0xa6, 0x6b, 0xe8, 0xe6, 0x36, 0xb9, 0x6e, 0xcd, 0x92, 0xa6, 0x1e, 0xd3, 0x68, 0x31, 0x0c, 0x4e, 0xc8, 0x09, 0x4a, 0x27, 0x20, 0x88, 0x03, 0x50, 0x21, 0x78, 0xd2, 0xd9, 0x1d, 0x07, 0x17, 0x05, 0x3c, 0xd8, 0x86, 0x52, 0xa1, 0x3f, 0x0d, 0xc2, 0xd2, 0x2e, 0xce, 0x62, 0xbd, 0xa8, 0xc8, 0xf4, 0xf2, 0x22, 0xf7, 0xec, 0xf0, 0x64, 0x90, 0xe6, 0x3c, 0x74, 0xe0, 0x84, 0x8b, 0xfc, 0x53, 0x19, 0xac, 0xa4, 0x70, 0xcb, 0x92, 0x12, 0x55, 0x09, 0xe2, 0x2a, 0xdb, 0xed, 0x32, 0xc0, 0x2f, 0x49, 0x32, 0xf2, 0x8c, 0x94, 0x55, 0xe9, 0x08, 0x60, 0x43, 0x0f, 0x85, 0x1f, 0x8c, 0x31, 0xd4, 0x92, 0xa7, 0xd7, 0xd2, 0x50, 0x5a, 0x43, 0xa5, 0xaa, 0x88, 0x92, 0x15, 0x16, 0x96, 0xe1, 0x19, 0x39, 0x2f, 0x0a, 0x99, 0xa1, 0x4b, 0x2a, 0x93, 0xac, 0x96, 0xa5, 0x82, 0x97, 0x0c, 0x5c, 0xb9, 0x85, 0xa7, 0x7a, 0x71, 0x06, 0x2c, 0xb5, 0xd1, 0x97, 0x80, 0x39, 0x25, 0x72, 0xba, 0xec, 0x74, 0x48, 0xca, 0xde, 0x25, 0x2e, 0xf4, 0x4b, 0x15, 0xfa, 0x25, 0xc3, 0x8d, 0xb2, 0xc2, 0x29, 0x9f, 0x43, 0xf9, 0x2c, 0x96, 0x02, 0x5e, 0x59, 0xf9, 0x94, 0xa3, 0x13, 0x09, 0x76, 0x93, 0x6a, 0x62, 0xf2, 0x1e, 0x94, 0xc1, 0xb5, 0xec, 0x7e, 0x30, 0xe8, 0xb1, 0xac, 0x04, 0xf9, 0xb5, 0x97, 0xd4, 0xcd, 0x64, 0x60, 0x34, 0x26, 0x17, 0x26, 0x92, 0xa8, 0xeb, 0xa5, 0xe7, 0x23, 0xbb, 0x33, 0x65, 0x30, 0xbf, 0x24, 0xfd, 0x5a, 0xce, 0xb1, 0x65, 0x82, 0xeb, 0xa2, 0x22, 0x17, 0xed, 0x73, 0x9f, 0x25, 0xa2, 0x14, 0x20, 0xfc, 0x85, 0xf9, 0x74, 0x88, 0x58, 0x9d, 0xfa, 0xe2, 0xf3, 0x5f, 0x92, 0x8d, 0x5d, 0x4a, 0x56, 0xe6, 0x35, 0x41, 0x87, 0x3e, 0x1d, 0xae, 0x1e, 0x75, 0xdd, 0xc1, 0x59, 0xfa, 0x7c, 0xda, 0x90, 0xb4, 0xaf, 0xa9, 0x66, 0xfa, 0x9c, 0x52, 0x01, 0xe3, 0x70, 0x79, 0x4c, 0x77, 0xe9, 0xfe, 0x94, 0x1d, 0x8d, 0xa5, 0xe0, 0xcd, 0x7f, 0x27, 0xfd, 0xd8, 0x97, 0x30, 0x1a, 0x21, 0xf8, 0xe5, 0x40, 0x5b, 0x60, 0x34, 0x2e, 0x05, 0xf2, 0x25, 0xba, 0x63, 0xc9, 0x43, 0x5f, 0x72, 0xce, 0x4b, 0xc2, 0x45, 0x81, 0x0d, 0x8e, 0x42, 0xd4, 0xc3, 0x20, 0xe3, 0x12, 0xa3, 0x2b, 0x68, 0xa5, 0x08, 0xc3, 0x83, 0x80, 0x80, 0x11, 0x75, 0xb5, 0x82, 0x82, 0x8e, 0xb3, 0xe0, 0x3d, 0x9c, 0x3f, 0x61, 0xdd, 0xdc, 0xa1, 0x8a, 0x72, 0xd6, 0x06, 0x86, 0xb8, 0xd0, 0xda, 0xa3, 0x61, 0x61, 0xa7, 0xd3, 0x8e, 0xba, 0x57, 0xd3, 0x11, 0x7e, 0xda, 0xa7, 0x40, 0x1d, 0xe0, 0xe0, 0xa6, 0x1e, 0x9b, 0xee, 0x75, 0x3a, 0xb7, 0x8c, 0x61, 0x76, 0x03, 0x99, 0x23, 0xb1, 0x8e, 0x04, 0x55, 0xde, 0xa7, 0x08, 0x1a, 0x3d, 0xcd, 0x15, 0x6b, 0xad, 0xb1, 0x6e, 0x37, 0xd9, 0x28, 0xb1, 0x94, 0x8f, 0xe6, 0x8a, 0x5d, 0xb6, 0xdb, 0x79, 0x5d, 0x97, 0x63, 0x50, 0x6e, 0x6d, 0x4b, 0x41, 0x20, 0x56, 0x35, 0xe5, 0xfd, 0xd2, 0x75, 0x5d, 0x86, 0x6b, 0x32, 0xba, 0xc3, 0x0a, 0xdd, 0x5c, 0x24, 0xd9, 0x31, 0x2a, 0x40, 0x56, 0x58, 0xad, 0xef, 0x70, 0x3c, 0x1e, 0xa3, 0x4f, 0x7a, 0x9b, 0x15, 0x55, 0xfc, 0x1e, 0x7d, 0xbf, 0x4d, 0xef, 0x2b, 0x0b, 0x82, 0x79, 0x64, 0x70, 0xcc, 0xc6, 0xa6, 0xcc, 0x74, 0xe1, 0x6b, 0xbd, 0xba, 0xde, 0x66, 0x4a, 0xac, 0x6d, 0xdb, 0xa2, 0x7a, 0xf5, 0xea, 0x3b, 0xf0, 0x3e, 0x60, 0xb7, 0x3b, 0x40, 0xeb, 0x0e, 0xda, 0xac, 0x60, 0x2a, 0x0f, 0x6d, 0x1a, 0x34, 0x66, 0x85, 0xd5, 0xea, 0x1a, 0xdb, 0xed, 0x2d, 0x56, 0xdd, 0x06, 0x6d, 0xbb, 0x4a, 0xe0, 0x32, 0x6b, 0x2d, 0x06, 0x17, 0x6f, 0x62, 0x00, 0x82, 0x25, 0xf9, 0x4c, 0xad, 0x2b, 0xe8, 0xba, 0x41, 0xd5, 0x6a, 0x0c, 0xa7, 0x29, 0xcd, 0x5a, 0x95, 0x32, 0xd0, 0xf1, 0xcf, 0x79, 0xf6, 0x38, 0x40, 0x57, 0x64, 0x2c, 0xef, 0xbc, 0x87, 0x77, 0xf1, 0x90, 0x07, 0x60, 0x9d, 0x14, 0x8b, 0xa8, 0x60, 0x8c, 0x3b, 0x03, 0x8f, 0x8d, 0xd3, 0x94, 0x5a, 0xee, 0xd2, 0x1f, 0xda, 0x33, 0xfa, 0x1a, 0xe5, 0x4d, 0xc2, 0x8b, 0xad, 0xb3, 0x72, 0x46, 0x28, 0x51, 0xd6, 0xe5, 0xac, 0x94, 0x16, 0x5c, 0xb5, 0x08, 0xf6, 0x92, 0x2d, 0x59, 0xd9, 0x36, 0x93, 0xda, 0xdc, 0xb4, 0xc8, 0x46, 0x78, 0xef, 0xa2, 0x1e, 0xba, 0x4e, 0x15, 0x01, 0x81, 0x3e, 0x66, 0xeb, 0x59, 0x5e, 0x00, 0x3c, 0x3f, 0x27, 0xf3, 0x17, 0x13, 0x51, 0xff, 0x75, 0x86, 0x0c, 0x96, 0xc1, 0x5c, 0x56, 0xce, 0x32, 0x8b, 0xe5, 0x44, 0x80, 0xef, 0x8b, 0x34, 0xb1, 0xc8, 0x4d, 0x59, 0xaa, 0x2c, 0xc8, 0xb8, 0xe4, 0xc8, 0x44, 0xbf, 0x3b, 0x44, 0xef, 0xea, 0x12, 0xd8, 0xb6, 0xc4, 0x97, 0x5d, 0x9a, 0x0b, 0xcb, 0x80, 0x5e, 0x06, 0x6f, 0x99, 0x4d, 0xcb, 0x83, 0xbb, 0x04, 0xa8, 0x5d, 0x6a, 0x57, 0x96, 0x9c, 0xfb, 0xb2, 0x9a, 0x96, 0x09, 0xc6, 0x12, 0xb0, 0xef, 0x25, 0xc5, 0xb1, 0x4b, 0x32, 0x9b, 0x65, 0xd0, 0xe7, 0xcc, 0x7e, 0xa9, 0xad, 0x4b, 0x2d, 0xe9, 0x59, 0x79, 0x8f, 0x3e, 0x0b, 0xaf, 0x5f, 0xaa, 0x16, 0x9b, 0xa6, 0x5d, 0xb8, 0xbe, 0x59, 0xb5, 0x8f, 0xc5, 0x3a, 0xf8, 0xbf, 0x39, 0x40, 0xb0, 0x67, 0xf8, 0x6c, 0x83, 0x99, 0xba, 0xb3, 0x89, 0x82, 0x47, 0xa6, 0x29, 0xe7, 0x20, 0x41, 0x99, 0x90, 0xee, 0x76, 0xbb, 0xb3, 0x31, 0x88, 0x4c, 0xe8, 0xaa, 0x3a, 0x9f, 0xc9, 0xce, 0xce, 0x69, 0x21, 0x1b, 0x25, 0x2c, 0x09, 0xe1, 0xc8, 0x91, 0xce, 0x12, 0x82, 0x7d, 0x09, 0xb4, 0x29, 0xe7, 0x93, 0x44, 0xfb, 0x8a, 0x23, 0x9f, 0x0a, 0xf0, 0xa1, 0x86, 0xf3, 0x23, 0xbc, 0xb5, 0x08, 0xd0, 0x91, 0x1a, 0x3a, 0x77, 0x33, 0xb4, 0x2e, 0xc7, 0x07, 0x0e, 0x21, 0xe8, 0x45, 0x51, 0x19, 0xc9, 0xdc, 0x58, 0x62, 0x81, 0x5c, 0x32, 0x5c, 0xb9, 0x24, 0xa6, 0xb3, 0x94, 0x2c, 0x64, 0x33, 0x79, 0x5c, 0x3e, 0x97, 0x96, 0x7c, 0x1a, 0x96, 0x94, 0xee, 0x2e, 0x75, 0x07, 0x4a, 0x4a, 0xa4, 0x4c, 0x94, 0x26, 0x4b, 0x48, 0x7b, 0xad, 0x01, 0xa3, 0x0c, 0x4c, 0x15, 0x0b, 0x35, 0xdd, 0x00, 0x41, 0x61, 0xb2, 0x27, 0x0c, 0x43, 0x0f, 0xe7, 0x4f, 0xe4, 0x96, 0x59, 0xb7, 0xa8, 0xab, 0x2d, 0xea, 0x66, 0x80, 0xf3, 0xd4, 0x49, 0xe5, 0xf5, 0x57, 0x69, 0x05, 0xd3, 0x34, 0x58, 0xb5, 0x26, 0x82, 0xab, 0x15, 0xaa, 0xb0, 0xc5, 0xa9, 0x3a, 0xd2, 0xdc, 0x3b, 0x7a, 0xa2, 0x37, 0x75, 0x87, 0xb6, 0x6b, 0xd1, 0x36, 0x0a, 0x06, 0x5d, 0x3c, 0x73, 0x7c, 0x04, 0x96, 0x0d, 0x18, 0x86, 0xd9, 0xc7, 0x62, 0xb7, 0x3f, 0x66, 0xf3, 0xe1, 0x04, 0x58, 0x6b, 0x4c, 0x04, 0x6e, 0x6f, 0xce, 0x8a, 0x30, 0xae, 0xa8, 0x39, 0x80, 0xcb, 0xe4, 0x9a, 0x63, 0x81, 0xfc, 0x33, 0x8d, 0x2a, 0x6d, 0x20, 0x3e, 0xfa, 0x6a, 0x95, 0xbe, 0x7f, 0x3c, 0x1e, 0xd1, 0xd4, 0x64, 0xc3, 0x6a, 0xad, 0x85, 0xb3, 0x0e, 0xbb, 0xe7, 0x43, 0x7a, 0xcf, 0xfb, 0xfb, 0x3a, 0x9d, 0x2b, 0x32, 0x21, 0xe0, 0xd6, 0xf8, 0xf5, 0xf5, 0x75, 0xe6, 0x9e, 0xc8, 0xad, 0x71, 0xfe, 0xbc, 0xf7, 0xf7, 0xb7, 0x18, 0xc7, 0x11, 0x87, 0xc3, 0x01, 0xc7, 0xe3, 0x11, 0xa7, 0xd3, 0x31, 0x0b, 0xd8, 0xdb, 0xed, 0x36, 0xb9, 0x2c, 0x96, 0x32, 0xc0, 0xde, 0x7b, 0x1c, 0x0e, 0x87, 0xac, 0xb3, 0x5b, 0x55, 0x15, 0x2a, 0xa5, 0x2a, 0x6c, 0xb7, 0x2b, 0xac, 0x57, 0xd7, 0xb8, 0xb9, 0xb9, 0xc3, 0xed, 0xed, 0x1d, 0xa6, 0x91, 0x06, 0xfa, 0x36, 0xac, 0xd3, 0x1c, 0xce, 0x39, 0x0f, 0x8f, 0x0a, 0x1e, 0x35, 0x71, 0x72, 0xe3, 0xbc, 0x9a, 0xcb, 0x7f, 0xe7, 0x42, 0xba, 0x31, 0x44, 0x74, 0xd7, 0x71, 0x43, 0xf0, 0x06, 0xb1, 0xb1, 0xdd, 0x3e, 0xc1, 0x3b, 0x16, 0x92, 0x70, 0x71, 0x9e, 0xc0, 0x2e, 0x57, 0x73, 0xb5, 0x1f, 0xc2, 0x14, 0xfd, 0xcd, 0xc3, 0x65, 0xfb, 0x41, 0xb1, 0xd1, 0x67, 0x19, 0x43, 0x1d, 0x95, 0xdc, 0x54, 0x3a, 0xe0, 0x38, 0x30, 0x39, 0x27, 0x2b, 0xec, 0x65, 0x7d, 0xf1, 0x52, 0x57, 0x79, 0xa9, 0xbd, 0xb5, 0x24, 0xf6, 0xf0, 0x92, 0x76, 0x32, 0x67, 0xcb, 0xb2, 0xa2, 0x9e, 0xa6, 0x09, 0xc7, 0xe3, 0x21, 0x03, 0xa1, 0xcd, 0x81, 0x7e, 0x4a, 0x80, 0x2a, 0x69, 0xf0, 0x20, 0x2b, 0xa7, 0xa6, 0x69, 0x70, 0xea, 0xa7, 0xf4, 0xbb, 0xb2, 0x95, 0xc3, 0x07, 0x65, 0x39, 0x37, 0x66, 0xca, 0x43, 0x89, 0x8c, 0x96, 0x6d, 0x78, 0x49, 0xff, 0x90, 0x99, 0xac, 0xa4, 0x87, 0xf0, 0xe2, 0x64, 0x9a, 0xdc, 0x12, 0x52, 0x5f, 0xce, 0x91, 0xcb, 0xf6, 0x6f, 0x39, 0x9a, 0x28, 0xdb, 0xf0, 0xa5, 0x2a, 0xda, 0x25, 0x94, 0xbb, 0x7c, 0x8d, 0x97, 0x38, 0xfa, 0xe5, 0xec, 0x5c, 0x62, 0x24, 0x4a, 0x84, 0xfc, 0x25, 0x55, 0xb3, 0xa5, 0x0a, 0xbe, 0x69, 0x9a, 0xec, 0x99, 0x95, 0xf7, 0x81, 0x47, 0x1e, 0xa5, 0x26, 0x00, 0xdf, 0xdb, 0xf5, 0x7a, 0x9d, 0xd1, 0x10, 0xe7, 0x6a, 0x65, 0x1e, 0xed, 0x5c, 0x4a, 0x56, 0x68, 0x3d, 0xdb, 0x65, 0x05, 0x32, 0xe1, 0xbe, 0xc6, 0xaf, 0x2b, 0x29, 0x91, 0xbc, 0x06, 0xac, 0x3b, 0x45, 0x65, 0x3c, 0xcc, 0xd4, 0x2e, 0x45, 0x09, 0x78, 0x88, 0xe0, 0x2f, 0x6d, 0x4c, 0x32, 0xa2, 0x29, 0x8d, 0x53, 0x58, 0x9a, 0xb5, 0x54, 0x45, 0x0b, 0x21, 0x24, 0x8f, 0x05, 0x89, 0xaa, 0x2f, 0xef, 0xe9, 0x34, 0x0d, 0x19, 0x0b, 0xa2, 0xa4, 0x58, 0x19, 0xb3, 0xa0, 0x6e, 0xe6, 0x7c, 0xea, 0xf4, 0x51, 0x27, 0x8b, 0x02, 0x08, 0x94, 0x82, 0x75, 0x03, 0xa6, 0x69, 0x20, 0x43, 0x11, 0x4d, 0x55, 0x1c, 0xd1, 0xb0, 0xe4, 0xd8, 0x80, 0xe8, 0x50, 0xe4, 0x90, 0x55, 0x15, 0xf7, 0x0c, 0x49, 0x00, 0x2a, 0x04, 0x9f, 0xde, 0x7f, 0x1e, 0x35, 0xcc, 0x32, 0xc8, 0xa9, 0x85, 0xff, 0x62, 0x50, 0xaf, 0x2f, 0xaa, 0x2e, 0x12, 0x06, 0x05, 0x8b, 0x0a, 0x82, 0xd2, 0xed, 0x6d, 0xc9, 0x89, 0x30, 0xfd, 0x3e, 0x2e, 0x2b, 0xdc, 0x49, 0x16, 0x88, 0x5b, 0x50, 0x24, 0xa4, 0xfd, 0xdb, 0x26, 0x2c, 0x84, 0x52, 0x0a, 0xc1, 0x2b, 0xb8, 0xa0, 0x60, 0xa7, 0x09, 0x21, 0x18, 0x6c, 0xaf, 0xb6, 0x78, 0xec, 0x4f, 0x38, 0x1e, 0x7a, 0x0c, 0x03, 0xd1, 0x95, 0x8d, 0xd6, 0x14, 0xf4, 0x8d, 0x43, 0xab, 0x3a, 0xb2, 0x4d, 0xd5, 0x88, 0x95, 0x68, 0x8d, 0xcd, 0xaa, 0x45, 0x55, 0x11, 0x78, 0x4d, 0x5b, 0x85, 0xba, 0xa2, 0x64, 0xca, 0xf9, 0x01, 0x7d, 0x7f, 0x40, 0x7f, 0xdc, 0xa3, 0x3f, 0x7a, 0x0c, 0x63, 0x9f, 0x84, 0x8d, 0xb8, 0x3a, 0x67, 0x1b, 0xe2, 0xba, 0xae, 0xd1, 0xad, 0x9a, 0x58, 0xf0, 0xe4, 0x72, 0xb8, 0x01, 0xe4, 0xa2, 0xe8, 0x9c, 0x83, 0xf3, 0xfa, 0xa2, 0xb5, 0xb5, 0x04, 0xa0, 0x71, 0xcb, 0xba, 0xb4, 0x2a, 0xde, 0xef, 0x8f, 0x18, 0x06, 0xa2, 0x5e, 0x3b, 0xe7, 0xb0, 0x5e, 0xaf, 0x71, 0x73, 0x13, 0xd2, 0x59, 0x4c, 0x49, 0xaa, 0x8e, 0x98, 0x96, 0x99, 0x46, 0xcc, 0xac, 0xae, 0x84, 0xbe, 0x17, 0x94, 0x33, 0x49, 0x6b, 0x63, 0x07, 0x52, 0xad, 0x35, 0x36, 0x9b, 0x4d, 0xda, 0xef, 0xfc, 0x4c, 0x1f, 0x1f, 0x1f, 0x53, 0xb0, 0x27, 0xa9, 0x75, 0x95, 0x66, 0xff, 0x7c, 0x46, 0xc8, 0x8e, 0x9e, 0x44, 0xc1, 0x3b, 0xe7, 0x60, 0xaa, 0x19, 0x18, 0x7b, 0x3c, 0x1e, 0xf1, 0xfc, 0xfc, 0x0c, 0xf5, 0xd7, 0xff, 0xc6, 0xbf, 0x17, 0x98, 0xd3, 0x46, 0x07, 0xa4, 0xe0, 0xd0, 0xfa, 0x06, 0xec, 0x81, 0xcd, 0x14, 0x10, 0x04, 0x13, 0xa9, 0x0a, 0x1e, 0x16, 0x7d, 0x7a, 0x13, 0xd9, 0x12, 0x9c, 0xc5, 0x20, 0xf4, 0x22, 0xba, 0x36, 0x65, 0x54, 0xd3, 0x79, 0x1b, 0x4a, 0x2e, 0xe0, 0xc3, 0xfe, 0x39, 0x9b, 0x0f, 0x96, 0x8e, 0x60, 0xa7, 0xf1, 0x98, 0xd2, 0x5c, 0xa6, 0xad, 0xf9, 0x68, 0x86, 0x02, 0xd0, 0x86, 0xef, 0xba, 0x0e, 0x75, 0xc5, 0x7c, 0xbf, 0x49, 0x78, 0x0f, 0x9b, 0xe8, 0x1a, 0xe6, 0x17, 0xd5, 0xca, 0x64, 0x55, 0x5c, 0x4a, 0xd6, 0x72, 0x40, 0xec, 0xfb, 0xd3, 0xc5, 0x79, 0x3b, 0x6f, 0x48, 0xd9, 0xea, 0x91, 0xd5, 0x32, 0xdd, 0xe3, 0xd9, 0x62, 0x53, 0xf2, 0x14, 0x99, 0x97, 0xbc, 0x14, 0x24, 0x25, 0x1a, 0x9a, 0x71, 0x0a, 0x25, 0x35, 0x8e, 0x7f, 0xae, 0xef, 0xfb, 0x33, 0x6e, 0xa6, 0xfc, 0xc7, 0x4e, 0x2f, 0xa3, 0x70, 0xab, 0xaa, 0x4b, 0x8b, 0x67, 0x18, 0xa2, 0xc7, 0x7d, 0xac, 0xfc, 0xeb, 0xba, 0x46, 0xd3, 0xae, 0x5e, 0x94, 0xae, 0xe4, 0x0e, 0x85, 0x04, 0x77, 0xc9, 0xea, 0x6d, 0xbd, 0xde, 0x9c, 0xa9, 0x93, 0xf1, 0xfb, 0xb1, 0x1c, 0x71, 0xc9, 0xe3, 0x2e, 0x37, 0x2e, 0x67, 0xc5, 0xbc, 0xf8, 0x25, 0x92, 0x7f, 0x18, 0x86, 0x0c, 0x65, 0x2e, 0x01, 0x2a, 0x7c, 0xdf, 0x4b, 0xce, 0xf3, 0x92, 0x0e, 0xf6, 0xa5, 0x35, 0x2c, 0x13, 0x9a, 0x12, 0x47, 0xb1, 0x0c, 0xb4, 0xc9, 0x13, 0x98, 0xba, 0xda, 0x24, 0xc7, 0x2b, 0xc0, 0x63, 0x9c, 0x7a, 0x8c, 0xe3, 0x09, 0xa6, 0x62, 0xbb, 0x46, 0x44, 0x96, 0x87, 0xa1, 0xce, 0x96, 0xd7, 0xc9, 0x37, 0x9c, 0xdc, 0xe2, 0x26, 0x31, 0x92, 0xb2, 0xe8, 0xba, 0x0e, 0x4f, 0x4f, 0x4f, 0x49, 0x89, 0xb1, 0x6d, 0xdb, 0x74, 0xa0, 0x73, 0x20, 0x67, 0x23, 0x95, 0xcd, 0x66, 0x83, 0xc9, 0x1e, 0x32, 0x0e, 0xbd, 0x4c, 0xfc, 0xf8, 0x5a, 0xdb, 0xb6, 0x4d, 0xbf, 0xc3, 0xcf, 0x83, 0x6d, 0x92, 0x4b, 0xaa, 0xe6, 0x92, 0x72, 0x59, 0x19, 0x50, 0xb2, 0x75, 0x1c, 0x7d, 0x21, 0xca, 0x6e, 0x8c, 0x3c, 0x0b, 0x38, 0x51, 0x92, 0xe3, 0x02, 0xee, 0x32, 0x19, 0xbd, 0x85, 0xd6, 0x1e, 0x93, 0x3d, 0x42, 0x1b, 0x07, 0x1f, 0x4e, 0xf8, 0xe6, 0xcd, 0xd7, 0xf8, 0xce, 0x77, 0x3e, 0xc6, 0x6e, 0xb7, 0x03, 0x42, 0x8b, 0xb6, 0x59, 0xc1, 0x7b, 0x05, 0x67, 0x55, 0xf2, 0xa1, 0x20, 0xc5, 0x4b, 0x93, 0xfc, 0xd4, 0x2f, 0x81, 0xc6, 0x2e, 0xa9, 0xb3, 0x2d, 0xb1, 0x60, 0x96, 0xd6, 0x0a, 0xd1, 0xc1, 0x2e, 0x17, 0x01, 0xec, 0x13, 0xff, 0x12, 0xd3, 0xe6, 0x25, 0xda, 0x5a, 0x5b, 0xb5, 0x8b, 0x09, 0xed, 0x12, 0x95, 0x6d, 0xa9, 0x23, 0x39, 0xa2, 0x82, 0x89, 0xf3, 0x57, 0x84, 0x89, 0x94, 0xe3, 0x82, 0x86, 0x8e, 0xeb, 0xcd, 0xa8, 0x89, 0xaa, 0xe6, 0xf1, 0x08, 0xeb, 0x77, 0xf0, 0xe1, 0x00, 0x65, 0x7a, 0x28, 0x73, 0x02, 0xd4, 0x88, 0xfb, 0x2d, 0xa9, 0xa6, 0xad, 0x9a, 0x96, 0xc0, 0xca, 0xec, 0x8b, 0x31, 0x12, 0x3d, 0xac, 0xdf, 0xbf, 0x11, 0x8c, 0xa0, 0x2a, 0x03, 0x97, 0x19, 0x63, 0x30, 0x0a, 0xaf, 0x8d, 0xa5, 0x8e, 0xc2, 0xe1, 0xb0, 0xcb, 0xd6, 0x24, 0xcf, 0xa9, 0xb9, 0x7d, 0x3d, 0xb9, 0xf3, 0x3d, 0x25, 0xd7, 0x11, 0xaf, 0x57, 0x79, 0x26, 0xca, 0x67, 0xdb, 0x1f, 0x4f, 0xa9, 0x62, 0x66, 0xd7, 0x4f, 0x2e, 0x8e, 0x24, 0xfb, 0x84, 0xd7, 0x1d, 0xbf, 0x76, 0xd2, 0xf6, 0xaf, 0xa6, 0x04, 0x4a, 0x96, 0xc0, 0x59, 0xe9, 0xec, 0xc8, 0x71, 0x80, 0x2d, 0x55, 0x25, 0x8d, 0x8e, 0xcf, 0x07, 0xde, 0x47, 0x7c, 0x6d, 0x6c, 0x01, 0xfb, 0xfc, 0xb4, 0xcf, 0x8a, 0x17, 0x9e, 0xa7, 0x53, 0x31, 0x78, 0x44, 0x55, 0x2b, 0xdc, 0xde, 0xde, 0xa2, 0xaa, 0x2a, 0xec, 0xf7, 0x7b, 0x3a, 0xef, 0xbb, 0x6e, 0x93, 0xda, 0xb7, 0x0c, 0x38, 0x63, 0x71, 0x01, 0x02, 0x48, 0x78, 0x21, 0xd8, 0x92, 0x57, 0xb4, 0x7d, 0x3f, 0x65, 0x80, 0x83, 0x92, 0x8a, 0xa4, 0xf5, 0xac, 0x73, 0x9d, 0x57, 0x4d, 0xb1, 0x1d, 0x56, 0x80, 0x78, 0x2e, 0x49, 0x97, 0xca, 0x6c, 0x53, 0xb6, 0xbe, 0x4d, 0x6d, 0x12, 0xf5, 0x83, 0x0f, 0x46, 0xb2, 0x30, 0x55, 0x29, 0xa0, 0xcb, 0xa0, 0xc8, 0x01, 0x7a, 0xa9, 0x8d, 0x57, 0xf2, 0x92, 0x2f, 0x51, 0xd1, 0x64, 0xfb, 0x96, 0xda, 0x78, 0xea, 0xa2, 0xc6, 0xb2, 0xb5, 0x53, 0xf1, 0xda, 0xd1, 0x1b, 0x3d, 0xf9, 0x65, 0xeb, 0x65, 0x8d, 0xed, 0x05, 0x15, 0xab, 0x4b, 0x33, 0x3d, 0x09, 0x44, 0x93, 0x07, 0x23, 0x6f, 0x00, 0xbe, 0x37, 0xac, 0xf6, 0x27, 0x37, 0x50, 0x53, 0xaf, 0x2e, 0x9a, 0x3c, 0xd0, 0xf3, 0xf3, 0xd9, 0x06, 0x90, 0x94, 0x89, 0x25, 0xf1, 0x91, 0x92, 0x96, 0xc7, 0x96, 0xba, 0x59, 0x6b, 0x2b, 0xce, 0xf5, 0x37, 0x9b, 0x0d, 0xfa, 0xfe, 0x94, 0x6d, 0x74, 0xf9, 0x9c, 0x64, 0x15, 0x2f, 0xbb, 0x09, 0x92, 0xae, 0xc6, 0xc1, 0xf9, 0xd2, 0xb3, 0xdb, 0x6c, 0x36, 0xa9, 0x05, 0x27, 0x41, 0x6a, 0xbc, 0x21, 0x4a, 0x69, 0x59, 0x59, 0x61, 0xf3, 0x46, 0x3c, 0xe3, 0xee, 0x8a, 0x4a, 0x58, 0xde, 0xf7, 0xb0, 0x80, 0x38, 0x76, 0xc2, 0x22, 0xb8, 0xc4, 0x31, 0xe4, 0x5d, 0x09, 0x0f, 0x6d, 0xbc, 0x50, 0x54, 0xf3, 0xd9, 0xb5, 0xa5, 0xae, 0x80, 0x56, 0x11, 0x81, 0x1c, 0x0f, 0xb9, 0x68, 0xbe, 0xc2, 0xaf, 0x5d, 0x6e, 0xfe, 0xd3, 0xe9, 0x94, 0x75, 0x59, 0x18, 0x0d, 0x9c, 0x5a, 0x83, 0x6d, 0x3e, 0x93, 0x96, 0x5a, 0xf7, 0xfc, 0xcc, 0x8d, 0x31, 0xd4, 0xad, 0x8b, 0x95, 0x03, 0x57, 0xdd, 0xcc, 0xb7, 0x5d, 0x0a, 0xe8, 0x65, 0x07, 0xa6, 0x14, 0x34, 0x4a, 0x5f, 0xc5, 0xc8, 0xa7, 0x3c, 0xdc, 0x25, 0xf7, 0x5d, 0x4a, 0xb5, 0xa6, 0x6b, 0x96, 0xb4, 0x31, 0xe5, 0xc9, 0x29, 0x50, 0x85, 0xcc, 0xfc, 0x84, 0x3e, 0x8b, 0x21, 0xb1, 0xea, 0x0b, 0x1d, 0x8f, 0x25, 0x15, 0xc3, 0x97, 0x8c, 0x50, 0xbe, 0x0d, 0xdc, 0x96, 0x7e, 0x5f, 0xb9, 0x6f, 0x35, 0x55, 0x59, 0x02, 0xb4, 0x2d, 0x39, 0x2b, 0x2e, 0xb5, 0xd6, 0xcb, 0x91, 0xce, 0x12, 0x4a, 0xff, 0xa5, 0xf7, 0x87, 0xf7, 0x70, 0x08, 0xd0, 0xde, 0x41, 0x83, 0xce, 0x4f, 0xb6, 0x78, 0xae, 0x14, 0x60, 0xb4, 0x46, 0xdb, 0x74, 0xb8, 0xba, 0xaa, 0xa1, 0xcd, 0x1a, 0xa6, 0x1e, 0x51, 0x35, 0x23, 0x4c, 0x65, 0xa1, 0x8d, 0xc5, 0x4a, 0x4f, 0x29, 0x69, 0x3f, 0xf5, 0x3d, 0xac, 0xb3, 0x50, 0x8a, 0x5c, 0xe4, 0x80, 0x1a, 0xdb, 0x0f, 0x3e, 0xc9, 0x84, 0x5b, 0xe4, 0x1c, 0xd8, 0x59, 0x8f, 0xf6, 0x2a, 0xaf, 0x72, 0xcb, 0x79, 0xf7, 0x76, 0xbb, 0xce, 0x02, 0x64, 0x29, 0x58, 0x55, 0xb7, 0xdd, 0xc5, 0x80, 0x5e, 0x8e, 0xd8, 0x96, 0x04, 0xa4, 0x08, 0xf0, 0xdd, 0x64, 0x7b, 0x9b, 0xa4, 0x65, 0x19, 0x8b, 0x11, 0xb0, 0xdd, 0x6e, 0xb1, 0x5a, 0x35, 0x49, 0xb8, 0x85, 0xf6, 0x41, 0x85, 0xcd, 0xa6, 0xc1, 0x6a, 0x93, 0xab, 0x67, 0x72, 0x42, 0xc0, 0x01, 0xfb, 0xea, 0xea, 0x2a, 0xa3, 0x15, 0xef, 0x76, 0xbb, 0x14, 0x78, 0xad, 0xb5, 0xb8, 0xbd, 0xbd, 0x4d, 0x40, 0x3b, 0x79, 0x4e, 0x97, 0x98, 0x9b, 0x92, 0x6d, 0xc3, 0x7b, 0xe3, 0xfe, 0xfe, 0x2e, 0xb1, 0x49, 0x9c, 0xf3, 0x68, 0xdb, 0x0e, 0x55, 0xdb, 0x5c, 0x45, 0xaa, 0x02, 0x6f, 0x9c, 0xf9, 0x97, 0x03, 0x14, 0x9c, 0x72, 0x51, 0xa9, 0x2d, 0xc4, 0x0e, 0x89, 0x30, 0x84, 0x08, 0x16, 0x93, 0x0d, 0x59, 0xeb, 0x03, 0x51, 0xa5, 0x4d, 0x69, 0x44, 0x7d, 0xdd, 0x78, 0xd8, 0x05, 0x41, 0xd9, 0x8a, 0x9f, 0x6b, 0x10, 0xce, 0x64, 0x4a, 0x23, 0xd9, 0x3d, 0xa6, 0x45, 0x19, 0xcc, 0xd9, 0x43, 0xca, 0xa5, 0x11, 0xc3, 0x45, 0x24, 0x2f, 0xbd, 0x46, 0xbc, 0xd9, 0xc1, 0x66, 0x2d, 0x41, 0x7a, 0x08, 0x54, 0x21, 0x73, 0x80, 0x4d, 0xd5, 0x90, 0x32, 0xa2, 0x95, 0xe6, 0x13, 0xda, 0x35, 0xcf, 0x9a, 0xbd, 0xa8, 0xf4, 0xf5, 0xd9, 0xfc, 0x34, 0x49, 0xe3, 0xc6, 0x6a, 0x42, 0xce, 0xb2, 0xe5, 0x1c, 0x92, 0x38, 0xb6, 0x34, 0x33, 0x65, 0x84, 0xf3, 0x8c, 0xb6, 0xd5, 0x71, 0x63, 0x94, 0x7c, 0x53, 0x96, 0x21, 0xcd, 0x5b, 0xa0, 0x25, 0x10, 0x4f, 0xb6, 0xa1, 0x2e, 0x55, 0x9b, 0x4b, 0xf3, 0x4b, 0xb9, 0xe8, 0x8f, 0xc7, 0xe3, 0xa2, 0x52, 0x57, 0x02, 0x6d, 0x99, 0xfa, 0xac, 0x3b, 0x50, 0x9a, 0x74, 0xc8, 0xeb, 0x96, 0x23, 0x03, 0x6a, 0x07, 0xbb, 0xb3, 0xca, 0x50, 0x1e, 0x8a, 0x25, 0xed, 0x6e, 0x09, 0xb4, 0x54, 0xba, 0xc4, 0xc9, 0xa4, 0x47, 0x06, 0xcf, 0x32, 0x38, 0xca, 0x19, 0xed, 0x92, 0x5f, 0xf8, 0x25, 0x3a, 0x91, 0x7c, 0xbe, 0x4b, 0xd5, 0x45, 0xf9, 0xb3, 0x4b, 0x22, 0x37, 0xe9, 0xf5, 0xbd, 0x4a, 0x80, 0x51, 0xba, 0xcf, 0x35, 0xa0, 0xec, 0x4c, 0xcb, 0xd1, 0x11, 0x6c, 0xa6, 0xc4, 0xef, 0xc4, 0xb6, 0xb3, 0x73, 0x80, 0x0a, 0x53, 0xec, 0x4c, 0xe8, 0x24, 0x4d, 0x4b, 0xee, 0x54, 0x36, 0x56, 0x12, 0x27, 0xb4, 0x6d, 0x0d, 0x63, 0xaa, 0x18, 0x0c, 0x81, 0xba, 0x36, 0x11, 0x08, 0xe5, 0x23, 0x15, 0xd4, 0x65, 0x89, 0x47, 0x79, 0x0f, 0xb9, 0x05, 0xca, 0x09, 0x26, 0xb7, 0x81, 0x0f, 0x87, 0xc3, 0x8b, 0xfe, 0xdd, 0x97, 0xf8, 0xfd, 0x19, 0x1a, 0xb9, 0xe0, 0x45, 0x2f, 0x1d, 0xce, 0x32, 0xa8, 0xc9, 0x7b, 0x6e, 0xad, 0x45, 0xf0, 0xe4, 0x46, 0x65, 0xfd, 0x08, 0x0d, 0x87, 0x00, 0x0b, 0xeb, 0x46, 0x4c, 0x76, 0x80, 0x75, 0x27, 0x04, 0xd7, 0x50, 0x3b, 0x19, 0x2a, 0x51, 0xc8, 0xe6, 0x67, 0x83, 0xb3, 0xb9, 0x74, 0x09, 0xba, 0x93, 0x2c, 0x85, 0x25, 0xda, 0x58, 0xb9, 0x7e, 0xce, 0xd6, 0x90, 0x59, 0x9e, 0x6f, 0xcf, 0xaf, 0xa1, 0x2f, 0x26, 0x08, 0x2f, 0xf9, 0x9c, 0xa7, 0xf7, 0xb1, 0xe7, 0x54, 0xc3, 0x25, 0x81, 0xa7, 0x4b, 0x80, 0x50, 0xa3, 0x6a, 0x40, 0x05, 0x18, 0xe5, 0x88, 0x43, 0xae, 0x03, 0x6a, 0x4d, 0xee, 0x82, 0x1a, 0x01, 0x75, 0x05, 0x34, 0x4d, 0x8d, 0xb6, 0x5d, 0xa3, 0xe9, 0x02, 0x05, 0xf2, 0x6a, 0x40, 0x55, 0x3b, 0x98, 0xca, 0x63, 0xf7, 0xf0, 0x0b, 0x04, 0xef, 0xe0, 0x9d, 0x25, 0x57, 0xb0, 0x46, 0x91, 0x5c, 0xb4, 0x0f, 0x70, 0x4e, 0xa3, 0x7f, 0x3e, 0xc1, 0x5a, 0x60, 0x9a, 0x88, 0x53, 0x6e, 0xad, 0xc3, 0x34, 0xf9, 0x24, 0x5b, 0x7b, 0x78, 0xff, 0x36, 0x9d, 0x19, 0x9c, 0x2c, 0xae, 0x56, 0x9b, 0x4c, 0x69, 0x8d, 0x93, 0x12, 0x99, 0x88, 0x26, 0x8c, 0x52, 0x5d, 0x5d, 0x64, 0xcf, 0x94, 0xe2, 0x40, 0xd2, 0x55, 0x93, 0xbf, 0xfa, 0xa3, 0x45, 0xdb, 0xb6, 0x29, 0x31, 0xe5, 0xf7, 0x90, 0x2c, 0xa2, 0xdd, 0x6e, 0x97, 0x55, 0xd0, 0x37, 0x37, 0x37, 0x09, 0x18, 0xb7, 0x3f, 0xbe, 0x39, 0x33, 0x50, 0xe2, 0xea, 0xba, 0xef, 0xfb, 0xa4, 0x36, 0x27, 0xd7, 0xd4, 0x76, 0xbb, 0xc5, 0x07, 0x1f, 0x7c, 0x90, 0xba, 0x69, 0xdc, 0x6d, 0x60, 0xbf, 0x94, 0x64, 0x7c, 0x33, 0x4d, 0xf8, 0xf0, 0x83, 0xd7, 0x18, 0xc7, 0x31, 0x7e, 0xff, 0x04, 0xa5, 0xa8, 0x48, 0xb9, 0xbe, 0xbe, 0xc6, 0x7a, 0xbd, 0xc6, 0xf3, 0xf3, 0x73, 0x2a, 0x16, 0xb8, 0x03, 0x50, 0x29, 0x34, 0x49, 0x2c, 0x41, 0xa7, 0xb6, 0x53, 0xa4, 0x90, 0xd5, 0xe4, 0x46, 0x36, 0x4d, 0x13, 0x9c, 0xf5, 0x62, 0x26, 0x13, 0xa5, 0xf6, 0xb4, 0x22, 0x9e, 0x29, 0x42, 0x2a, 0x54, 0x55, 0xf0, 0xe4, 0xbf, 0xa0, 0x14, 0x89, 0xf7, 0xfb, 0x10, 0xe9, 0x23, 0x2c, 0xa4, 0x30, 0x2f, 0x34, 0xe7, 0xdd, 0x59, 0x90, 0xc9, 0x02, 0x92, 0x3f, 0x9f, 0x4d, 0x67, 0x55, 0x7b, 0x98, 0x32, 0xca, 0xc5, 0x9c, 0xd5, 0xc4, 0xaa, 0x2f, 0xce, 0x86, 0x66, 0x5a, 0x8d, 0x44, 0x72, 0x87, 0x54, 0x5d, 0x5f, 0x92, 0x59, 0xbc, 0x14, 0xf0, 0xe6, 0x0a, 0xe0, 0x32, 0x8d, 0x64, 0xa9, 0xc5, 0xb5, 0x24, 0x14, 0x51, 0x76, 0x0f, 0xe4, 0xc3, 0xe7, 0x96, 0xe9, 0xa5, 0xb6, 0x2e, 0xb7, 0x8a, 0xe4, 0x6b, 0x94, 0xda, 0xe5, 0x97, 0x74, 0x9d, 0x4b, 0x1a, 0x52, 0x09, 0x00, 0xa3, 0x4c, 0x78, 0x38, 0xd3, 0x40, 0x97, 0xf3, 0x5e, 0x6d, 0xea, 0xb3, 0x83, 0x5a, 0x5e, 0x17, 0xab, 0xd5, 0x49, 0x4c, 0x00, 0x6f, 0xb2, 0xd3, 0xe9, 0x94, 0xb5, 0x84, 0x2f, 0xc9, 0xc3, 0x5e, 0x72, 0xb2, 0x92, 0xbe, 0xd8, 0xe5, 0xbd, 0xe4, 0xfb, 0x27, 0x5b, 0xee, 0x32, 0xfb, 0xe5, 0x7b, 0x25, 0x81, 0x83, 0xf2, 0x1e, 0xf3, 0x26, 0x94, 0x15, 0xd0, 0x25, 0xda, 0xd0, 0xa5, 0x71, 0x0d, 0x57, 0xb0, 0x72, 0x6e, 0xc7, 0xd5, 0x49, 0x1a, 0x21, 0x19, 0x13, 0xc5, 0x50, 0x18, 0x3f, 0x12, 0x00, 0x55, 0x47, 0x3e, 0xef, 0x18, 0xc1, 0x45, 0x26, 0xa9, 0x8e, 0x51, 0xa2, 0x19, 0x67, 0x92, 0xce, 0x41, 0x2f, 0xa0, 0xfc, 0x65, 0x7b, 0x50, 0xb6, 0x1a, 0xf9, 0xbf, 0x79, 0x36, 0x4f, 0x6e, 0x6f, 0x47, 0x38, 0xc7, 0x63, 0x28, 0x85, 0xaa, 0xca, 0x41, 0xa1, 0xc6, 0x18, 0xec, 0xf7, 0x07, 0xac, 0xd7, 0x6b, 0xac, 0xd7, 0xeb, 0x58, 0x49, 0x8d, 0xf1, 0x7e, 0xb9, 0x64, 0x2f, 0x7c, 0x2e, 0xe6, 0xa3, 0x11, 0x82, 0x5c, 0x4f, 0xd2, 0x89, 0x0e, 0x29, 0x31, 0xf5, 0xe1, 0x65, 0x69, 0xe5, 0x32, 0x91, 0x97, 0x49, 0x1f, 0x09, 0xe3, 0xd4, 0xd0, 0x9a, 0x29, 0xaa, 0x2e, 0x3a, 0x14, 0x3a, 0xc2, 0xe9, 0x78, 0x0b, 0xad, 0x1b, 0x18, 0xa3, 0xa0, 0x15, 0x39, 0x31, 0x96, 0x6a, 0x7f, 0x92, 0x8e, 0xf6, 0x6d, 0x28, 0xf2, 0x3f, 0x6a, 0x75, 0x9e, 0x19, 0xeb, 0x54, 0xfa, 0x45, 0xd0, 0x1c, 0x9b, 0x22, 0x5d, 0x12, 0xa0, 0x59, 0x3a, 0x97, 0xe4, 0xcf, 0x56, 0xba, 0x3a, 0x1b, 0xf3, 0xbc, 0x58, 0x91, 0x17, 0xaf, 0xdf, 0xb5, 0x0d, 0x54, 0xf4, 0x32, 0xaf, 0x8c, 0x43, 0x65, 0x02, 0x34, 0x1c, 0x54, 0xe0, 0x99, 0x70, 0x14, 0xa0, 0x71, 0x01, 0xa7, 0xa7, 0x01, 0xa7, 0x61, 0x87, 0xd3, 0xf8, 0x00, 0xe7, 0x7b, 0x04, 0x8c, 0xb8, 0x6a, 0x6c, 0x76, 0xf6, 0x50, 0x27, 0x2e, 0x8e, 0xb1, 0xa6, 0x09, 0x2e, 0x18, 0x78, 0x28, 0x20, 0x76, 0x48, 0x34, 0x14, 0xaa, 0x68, 0x5c, 0x54, 0x55, 0x15, 0xc2, 0xd8, 0x67, 0xd8, 0x11, 0xf9, 0xcc, 0x19, 0x94, 0xc6, 0x67, 0x86, 0x04, 0x9d, 0xa5, 0xc2, 0xa0, 0x6d, 0xb2, 0x73, 0xba, 0xec, 0x7c, 0x94, 0x5d, 0xc9, 0x32, 0xb8, 0xaf, 0xd7, 0xeb, 0x6c, 0x54, 0x57, 0x76, 0x4a, 0xaf, 0xae, 0xae, 0x32, 0xb3, 0x32, 0x19, 0xf4, 0x69, 0xe4, 0xfb, 0x80, 0xed, 0x76, 0x8b, 0xed, 0x76, 0x9b, 0xce, 0x0b, 0x2a, 0xe2, 0x14, 0xd6, 0xeb, 0x15, 0xa6, 0x69, 0x8c, 0x14, 0x34, 0xb2, 0x25, 0x1f, 0x86, 0x21, 0x61, 0x4f, 0xa6, 0x69, 0xc4, 0xdd, 0xdd, 0xad, 0x40, 0xa9, 0x3b, 0x6c, 0xb7, 0x1b, 0xdc, 0xde, 0xde, 0x24, 0x1b, 0x73, 0x67, 0x91, 0xf6, 0xde, 0x38, 0x8e, 0x69, 0xf4, 0xc5, 0x0e, 0xa7, 0xdb, 0xab, 0x75, 0xd2, 0xc0, 0x48, 0x7a, 0x2f, 0xe9, 0x10, 0xf5, 0x0a, 0x41, 0x87, 0x24, 0x8f, 0x5a, 0x06, 0x35, 0x6d, 0x48, 0x36, 0xd1, 0xbb, 0x10, 0x01, 0x6e, 0x3e, 0xb5, 0x2b, 0xce, 0x41, 0x4e, 0x21, 0xb6, 0x97, 0xe7, 0x36, 0x4a, 0x59, 0x39, 0x85, 0x10, 0x50, 0x89, 0x0c, 0x2b, 0x20, 0x2a, 0x3c, 0xd9, 0x79, 0xe3, 0xb6, 0xa6, 0x7d, 0x71, 0x03, 0x91, 0x79, 0x82, 0x17, 0x1e, 0xe4, 0xb1, 0xdd, 0x58, 0x93, 0x12, 0x1d, 0x1b, 0xd6, 0x4f, 0xa3, 0x4b, 0xf4, 0xaf, 0xb9, 0xea, 0xf3, 0xb0, 0xae, 0x4f, 0x12, 0x59, 0xde, 0xb3, 0x2b, 0xd8, 0xec, 0x04, 0x65, 0xb4, 0x99, 0x05, 0xa3, 0xe2, 0xbf, 0x99, 0x70, 0x83, 0xf5, 0x67, 0x2e, 0x64, 0x65, 0x2b, 0x95, 0x84, 0x79, 0xec, 0x22, 0xf5, 0xa7, 0xaa, 0xda, 0x74, 0xc0, 0xb0, 0x2a, 0x5c, 0x0e, 0x12, 0x32, 0x62, 0x81, 0x3a, 0xa1, 0x76, 0xa5, 0x13, 0x32, 0xba, 0xac, 0xa8, 0x4a, 0x57, 0xb5, 0x12, 0x41, 0x2e, 0x85, 0x67, 0xba, 0x76, 0xf3, 0xb2, 0x56, 0x74, 0x9c, 0xe7, 0x94, 0xf4, 0xad, 0x52, 0x50, 0x47, 0x66, 0xa9, 0x25, 0x47, 0xbb, 0x14, 0x70, 0x91, 0xd7, 0x48, 0x8e, 0x5a, 0x2e, 0x43, 0x87, 0x72, 0xf0, 0x5d, 0xf2, 0x03, 0xbf, 0xf4, 0x59, 0x4b, 0x14, 0xf5, 0x3c, 0x27, 0xad, 0xb3, 0x11, 0x90, 0x5c, 0x8b, 0x52, 0xeb, 0xba, 0xd4, 0x02, 0x90, 0x15, 0xeb, 0x4b, 0x86, 0x26, 0xa5, 0x3d, 0x66, 0x99, 0xdc, 0x94, 0xb3, 0xbb, 0x52, 0xc1, 0x2b, 0x71, 0xa0, 0x95, 0x17, 0x0c, 0x0c, 0x9f, 0x3a, 0x4b, 0x14, 0x54, 0x55, 0xea, 0xe4, 0x00, 0x16, 0x55, 0xa5, 0x0a, 0x80, 0x56, 0xc8, 0xaa, 0x1c, 0x79, 0xbd, 0xb2, 0xd5, 0xce, 0xce, 0x6c, 0xf2, 0x33, 0x2c, 0x53, 0xa9, 0x82, 0x18, 0x09, 0x55, 0xe9, 0x30, 0x63, 0xbc, 0x00, 0xeb, 0xc7, 0x2f, 0x55, 0x86, 0x65, 0xd2, 0x58, 0x0a, 0x31, 0x9d, 0x83, 0xfa, 0xc2, 0x45, 0xa7, 0xb2, 0x32, 0x89, 0xca, 0x34, 0x2d, 0xb8, 0xbe, 0x55, 0x15, 0xb4, 0x71, 0x50, 0xbe, 0x26, 0x85, 0x32, 0x65, 0x50, 0x37, 0x3a, 0x7d, 0xa9, 0xc0, 0x72, 0xd6, 0x3a, 0x26, 0x1f, 0xd4, 0x66, 0x35, 0xba, 0x82, 0x36, 0x0a, 0xa7, 0xd3, 0xf8, 0x62, 0x85, 0xbd, 0xd4, 0x7a, 0x2f, 0x69, 0x61, 0x2f, 0x09, 0x12, 0x01, 0xf6, 0x45, 0x14, 0xfb, 0x4b, 0xc5, 0xc0, 0x4b, 0xea, 0x97, 0x09, 0xdf, 0x10, 0xcf, 0x8f, 0x25, 0xdf, 0x89, 0x4b, 0x33, 0x74, 0xf9, 0xfb, 0xb5, 0x26, 0x20, 0xa4, 0x56, 0x16, 0x1a, 0x23, 0x74, 0x18, 0xe1, 0xfc, 0x08, 0x37, 0x8d, 0x70, 0xd6, 0xe2, 0xe8, 0xfb, 0x88, 0xd5, 0xa0, 0x84, 0x72, 0xb2, 0x27, 0x4c, 0xf6, 0x00, 0xa8, 0x09, 0x4a, 0x79, 0xec, 0x87, 0xfe, 0x6c, 0x4c, 0x36, 0xc6, 0x00, 0x35, 0x8e, 0x23, 0x4c, 0x58, 0xa5, 0x80, 0x2d, 0x05, 0x60, 0xf8, 0xe7, 0xb7, 0xb7, 0x48, 0x34, 0x5c, 0x1f, 0x3c, 0x7c, 0x50, 0x70, 0x5e, 0xdc, 0xfb, 0x30, 0x3f, 0x6b, 0x29, 0x16, 0x33, 0xaf, 0x73, 0x3e, 0xf3, 0x72, 0x26, 0x07, 0x9f, 0x93, 0x75, 0xbd, 0xdc, 0x41, 0xe5, 0xfb, 0xf2, 0xfc, 0x7c, 0x4c, 0x8a, 0x9d, 0x55, 0x6d, 0xd0, 0xad, 0xb6, 0x29, 0x31, 0x31, 0xc6, 0xe0, 0xfd, 0xfb, 0xf7, 0xb8, 0xdb, 0x5c, 0xa3, 0xeb, 0x3e, 0x4a, 0x09, 0xc6, 0xf1, 0x78, 0x4c, 0xe7, 0xc3, 0xd5, 0x15, 0xc9, 0xd5, 0x72, 0x35, 0x2f, 0xdb, 0xe9, 0x8c, 0xb1, 0xe1, 0x80, 0x2c, 0x29, 0x6f, 0x7c, 0x06, 0x3e, 0x3f, 0x3f, 0xa7, 0x40, 0xed, 0xa2, 0x81, 0xcc, 0x7a, 0xbd, 0x4e, 0xf7, 0x67, 0x1a, 0xc7, 0x84, 0x81, 0x62, 0xe4, 0x3c, 0x3b, 0x6c, 0x32, 0xe0, 0x75, 0x73, 0xbd, 0x49, 0x5d, 0x83, 0x69, 0x9a, 0x50, 0x25, 0x24, 0xa7, 0xf2, 0x91, 0xaf, 0x6d, 0xa3, 0x32, 0x5b, 0x80, 0x0d, 0xf6, 0x5c, 0xe1, 0xac, 0x42, 0x94, 0x65, 0x54, 0xb0, 0xbe, 0x16, 0x9b, 0xd6, 0x88, 0x80, 0x46, 0x15, 0x07, 0x5f, 0x98, 0x9c, 0x7d, 0xc9, 0x03, 0x58, 0xd7, 0xdb, 0x24, 0xdb, 0xa0, 0xb5, 0x86, 0xe6, 0x99, 0x8f, 0xd6, 0x80, 0x73, 0x08, 0x3e, 0x9c, 0x1d, 0xb8, 0x79, 0x60, 0x78, 0x59, 0x65, 0xea, 0xbc, 0x6d, 0xe5, 0xcf, 0xe6, 0xae, 0x4b, 0x40, 0x9c, 0x97, 0xb2, 0x5b, 0x79, 0xd0, 0xd4, 0x75, 0x95, 0x1d, 0x80, 0x65, 0x6b, 0xb0, 0x04, 0xd5, 0xc9, 0xd7, 0x22, 0xa0, 0xd9, 0x21, 0x55, 0x4d, 0x5c, 0xcd, 0xc9, 0x2a, 0xe4, 0x4c, 0x19, 0xea, 0x4c, 0xd8, 0x24, 0x9c, 0x05, 0x35, 0xa9, 0x23, 0x2f, 0xe7, 0xcd, 0x67, 0x2a, 0x51, 0x17, 0x5a, 0xc1, 0x79, 0x87, 0x42, 0x9f, 0x55, 0xf8, 0x4b, 0x94, 0x23, 0xf9, 0xa7, 0x0c, 0xe0, 0x5c, 0x21, 0x73, 0x62, 0xc0, 0xd9, 0x24, 0xa3, 0x3a, 0x69, 0xec, 0x51, 0x32, 0x15, 0xf4, 0xb7, 0x5a, 0x4f, 0x96, 0xf6, 0x97, 0xb2, 0x7b, 0x21, 0x67, 0xd5, 0xc6, 0x98, 0x94, 0xd5, 0x32, 0x23, 0x83, 0x1d, 0xb4, 0xca, 0xaa, 0xa0, 0xa4, 0xd5, 0x95, 0x3c, 0xfd, 0xa5, 0xca, 0x7c, 0xa9, 0x32, 0x93, 0x87, 0x6b, 0xdf, 0x93, 0xdd, 0x22, 0x83, 0x5d, 0x98, 0x62, 0x38, 0x9b, 0xfb, 0x10, 0x65, 0xc7, 0x27, 0x2e, 0xb0, 0x4b, 0x87, 0x14, 0x54, 0xc0, 0x38, 0x0d, 0x68, 0x15, 0x25, 0xa7, 0x6c, 0xe4, 0x41, 0x95, 0xa9, 0x89, 0x1d, 0xae, 0x29, 0xb1, 0x4d, 0xa0, 0x02, 0x4c, 0xa4, 0xf4, 0x34, 0x2d, 0x1d, 0xc2, 0xfc, 0xe5, 0x9c, 0x8d, 0xda, 0x05, 0xd4, 0xb5, 0x72, 0x3e, 0xea, 0x13, 0xd4, 0x06, 0x50, 0x75, 0x5a, 0x83, 0x55, 0x15, 0xf7, 0x70, 0x88, 0x82, 0xcb, 0x86, 0xaa, 0x4c, 0xe7, 0x2d, 0x86, 0xf1, 0x44, 0xcf, 0x3c, 0x38, 0x58, 0xc7, 0x22, 0x39, 0xb3, 0x64, 0xec, 0xcc, 0x1c, 0x99, 0xe5, 0x52, 0x2f, 0xcf, 0x9d, 0x19, 0x29, 0x5e, 0x2f, 0xea, 0x90, 0x97, 0x86, 0x18, 0x4b, 0xc9, 0x02, 0x29, 0x48, 0x06, 0xc1, 0x6b, 0x27, 0x6b, 0x56, 0xe6, 0xb8, 0x43, 0x59, 0x42, 0xd1, 0x87, 0x09, 0x1a, 0x55, 0x4a, 0xd8, 0x95, 0x9a, 0xc5, 0xa9, 0x4a, 0xe4, 0xfd, 0xa5, 0xf6, 0xfa, 0xff, 0x1f, 0xa1, 0x18, 0xf9, 0x59, 0x97, 0x12, 0xbe, 0x7c, 0xb4, 0x75, 0xb9, 0x7a, 0x2e, 0x3b, 0x84, 0x52, 0x9c, 0x27, 0x09, 0x17, 0xa9, 0xea, 0xc5, 0xf9, 0x7c, 0xd9, 0x31, 0x3b, 0x03, 0xdd, 0xf9, 0x01, 0xce, 0xf5, 0xb0, 0xbe, 0x07, 0xc2, 0x01, 0x40, 0x0f, 0xef, 0x7b, 0x4c, 0xd3, 0x09, 0x6e, 0x9a, 0x50, 0x55, 0x23, 0x8c, 0x9d, 0x8d, 0x7e, 0xb4, 0xb6, 0xe8, 0xba, 0x38, 0x1e, 0x32, 0xc0, 0xee, 0x9d, 0x18, 0x65, 0x72, 0x57, 0xcb, 0xce, 0xb2, 0xc7, 0x77, 0x37, 0x6b, 0x18, 0xa7, 0x51, 0x7b, 0x52, 0xb9, 0x34, 0xa3, 0x87, 0x99, 0x58, 0x6c, 0xca, 0xe0, 0xf1, 0xf1, 0x5d, 0xc6, 0xea, 0x20, 0xb5, 0xb5, 0xd9, 0xd0, 0xc4, 0x3b, 0x24, 0xe4, 0x37, 0x9f, 0x8d, 0x5c, 0x89, 0x6a, 0xad, 0xe1, 0xe1, 0x16, 0xb1, 0x45, 0xfc, 0x0f, 0xe3, 0x47, 0xca, 0x33, 0x9a, 0xef, 0xc1, 0xa7, 0x9f, 0xbe, 0x4e, 0x15, 0x38, 0xb5, 0xb9, 0x07, 0xf4, 0xfd, 0x9c, 0x80, 0x5c, 0x5f, 0x5f, 0x03, 0xb0, 0x98, 0xa6, 0x3e, 0xee, 0x11, 0x8d, 0xaa, 0xa2, 0xaa, 0xbe, 0x6d, 0x5b, 0xec, 0x0f, 0x0f, 0xb0, 0x76, 0xc4, 0x38, 0xd2, 0x59, 0xf3, 0xc9, 0x27, 0xaf, 0xb1, 0xd9, 0x6c, 0x52, 0xf7, 0x8f, 0x2b, 0xf2, 0x71, 0x1c, 0xb1, 0xdb, 0xed, 0x30, 0x0c, 0x43, 0xd6, 0xad, 0xbb, 0xbf, 0xbf, 0xc7, 0x6a, 0xd5, 0x62, 0xb5, 0x6a, 0x85, 0xde, 0xfc, 0x10, 0x93, 0x0a, 0x83, 0xfb, 0xfb, 0xfb, 0x94, 0x08, 0xb1, 0x00, 0x8d, 0x31, 0x06, 0x9b, 0x0d, 0x05, 0x71, 0x1e, 0x7f, 0x0d, 0xc3, 0x80, 0xaf, 0xbf, 0xfe, 0x9a, 0xcc, 0x59, 0x94, 0x8e, 0x60, 0x03, 0x44, 0xd1, 0x92, 0x28, 0xa1, 0x18, 0xf7, 0xc7, 0xbc, 0x40, 0x08, 0x3e, 0x41, 0x8b, 0x89, 0x91, 0x91, 0x53, 0x23, 0x02, 0x19, 0x55, 0xf9, 0x70, 0xf4, 0xf7, 0x46, 0x57, 0x88, 0x90, 0x0b, 0x20, 0x2a, 0xb4, 0x55, 0xba, 0x82, 0x82, 0x82, 0x75, 0x16, 0x6e, 0x72, 0xf0, 0xea, 0xdc, 0x85, 0x2a, 0xab, 0x1a, 0x42, 0x6e, 0x99, 0x58, 0x66, 0xcd, 0x74, 0x83, 0x64, 0x47, 0x21, 0x47, 0x18, 0x8e, 0xd3, 0x90, 0x68, 0x6c, 0xa5, 0xca, 0x99, 0xf7, 0x01, 0xa6, 0xf2, 0x89, 0xe2, 0xc2, 0xe0, 0xba, 0xbc, 0xda, 0x08, 0x69, 0x7e, 0x3e, 0x6f, 0xe2, 0x90, 0xe8, 0x15, 0x2a, 0xce, 0x36, 0x95, 0x56, 0x30, 0x4a, 0x91, 0xf8, 0x8b, 0x8e, 0xee, 0x70, 0x3e, 0xa0, 0x69, 0xab, 0x24, 0xd0, 0xc2, 0x62, 0x09, 0x99, 0x2a, 0x9c, 0xd7, 0x67, 0x1c, 0x6d, 0x39, 0xc3, 0x59, 0x1a, 0x43, 0xe4, 0xc1, 0xe4, 0x1c, 0x2c, 0x57, 0x66, 0xea, 0xb2, 0x3d, 0x5d, 0x8a, 0xcc, 0xf4, 0xc7, 0xf1, 0xa2, 0x31, 0xc5, 0x39, 0x5e, 0x01, 0x8b, 0x9c, 0xf0, 0x4b, 0x7c, 0x6e, 0x79, 0xa8, 0x94, 0x34, 0xb3, 0xf9, 0x99, 0xce, 0x9b, 0x8e, 0x17, 0xf4, 0xd2, 0x41, 0x74, 0xc9, 0x80, 0xa2, 0xa4, 0xac, 0x94, 0x07, 0x3e, 0x83, 0x6d, 0x24, 0xf2, 0x9d, 0xe7, 0xc1, 0x55, 0x55, 0x65, 0xad, 0xe9, 0x1c, 0xdb, 0x80, 0x45, 0x33, 0x97, 0x25, 0x4e, 0x76, 0xd9, 0x76, 0x97, 0x58, 0x01, 0x99, 0x9c, 0x2c, 0x25, 0x9b, 0xce, 0x4d, 0xa2, 0x25, 0x3f, 0x41, 0x03, 0xe4, 0xef, 0x5c, 0x55, 0x68, 0xd1, 0x62, 0xb7, 0xdb, 0xa1, 0x32, 0x35, 0x9a, 0x26, 0xae, 0x13, 0x37, 0x27, 0x72, 0x21, 0x38, 0x58, 0x67, 0x33, 0xf1, 0x17, 0xf9, 0xac, 0xf9, 0x80, 0x94, 0x80, 0x46, 0x09, 0x68, 0x23, 0x31, 0xa3, 0xb9, 0x8b, 0x21, 0x25, 0x24, 0x65, 0x97, 0xe7, 0xfa, 0xfa, 0x1a, 0x7d, 0xdf, 0x63, 0xb7, 0xdb, 0x45, 0xff, 0xe9, 0x2a, 0x4b, 0xea, 0x96, 0x00, 0x83, 0xdf, 0x06, 0x20, 0x2b, 0xef, 0xd7, 0x52, 0xf7, 0x43, 0x26, 0x55, 0x32, 0x91, 0xcf, 0x92, 0x3e, 0x41, 0x43, 0x85, 0x62, 0xba, 0x99, 0x8b, 0x66, 0x2d, 0x1e, 0xc3, 0x40, 0xd5, 0x52, 0x53, 0xfb, 0x94, 0x28, 0xb1, 0x46, 0x78, 0x99, 0xe4, 0x2e, 0x71, 0xcc, 0x2f, 0x55, 0xb6, 0x25, 0x46, 0x62, 0xa9, 0x42, 0x76, 0xce, 0xa5, 0x31, 0xe4, 0x65, 0x10, 0x9c, 0xba, 0x28, 0x7d, 0x2c, 0x93, 0xd3, 0x25, 0xf6, 0x84, 0x52, 0x0a, 0xca, 0xab, 0x8b, 0xaa, 0x8b, 0x7f, 0x94, 0xc4, 0x03, 0x61, 0x80, 0xb3, 0x3d, 0xa6, 0xf1, 0x11, 0xce, 0x3d, 0x03, 0x38, 0x42, 0xe1, 0x04, 0xef, 0x06, 0x38, 0x37, 0x61, 0xbd, 0xaa, 0x11, 0xc2, 0x09, 0xd6, 0xce, 0x12, 0xc5, 0xc3, 0x70, 0xc0, 0x38, 0xf5, 0xb0, 0x76, 0xc4, 0x75, 0xf3, 0x8a, 0x9e, 0xb9, 0x89, 0x2d, 0x74, 0x05, 0x38, 0x1f, 0x12, 0x0b, 0xe3, 0x70, 0x7c, 0xcc, 0xce, 0x06, 0x0e, 0x4c, 0x94, 0x18, 0xd6, 0xe8, 0xba, 0xa6, 0x70, 0x2a, 0xf3, 0x18, 0xc7, 0x13, 0x9c, 0x8b, 0x62, 0x5b, 0x61, 0x96, 0x41, 0xe6, 0x71, 0x99, 0x1c, 0x25, 0x79, 0x35, 0xbd, 0x28, 0xdd, 0xcb, 0xa3, 0x3e, 0x6e, 0x61, 0x33, 0x28, 0x77, 0xa6, 0x4d, 0x8e, 0x59, 0xa2, 0xdf, 0x75, 0x1d, 0xb6, 0x57, 0xab, 0x8c, 0x96, 0x4a, 0xfc, 0xf0, 0x3e, 0x37, 0x47, 0x81, 0x82, 0xf3, 0x0a, 0xf7, 0xf7, 0xf7, 0x89, 0xf6, 0xc6, 0x73, 0xef, 0xdd, 0x8e, 0xc4, 0x74, 0xfa, 0xbe, 0x4f, 0x34, 0x35, 0x9e, 0xab, 0xb3, 0x2d, 0xf9, 0x66, 0xb3, 0x49, 0x3c, 0x72, 0x4e, 0x4e, 0x4a, 0x8b, 0x68, 0x9e, 0xd9, 0x4b, 0xe6, 0xcf, 0xe1, 0x70, 0xc0, 0x6e, 0xb7, 0xc3, 0xfb, 0xf7, 0xef, 0xf1, 0xfc, 0xfc, 0x8c, 0xd3, 0x69, 0x4c, 0x7b, 0x92, 0x0b, 0x94, 0x2a, 0x60, 0x8a, 0x15, 0x79, 0x04, 0x2b, 0x24, 0x6e, 0xa4, 0x41, 0x5b, 0xb1, 0x68, 0xc9, 0x94, 0x94, 0x9f, 0x9c, 0x97, 0xbc, 0xe8, 0xb5, 0xe0, 0x99, 0xcf, 0xbe, 0xd1, 0x89, 0x52, 0x15, 0x1c, 0x94, 0x32, 0xa9, 0x5a, 0x9a, 0x6d, 0x1e, 0x03, 0x05, 0x43, 0xc5, 0x55, 0x73, 0x40, 0xb0, 0xf3, 0x6b, 0x27, 0x5a, 0x93, 0x59, 0x9d, 0x49, 0x80, 0x96, 0x55, 0xae, 0xd6, 0x46, 0xcc, 0x41, 0x55, 0x02, 0xe0, 0xc9, 0xaa, 0x6f, 0x46, 0xcb, 0xe2, 0xc5, 0x00, 0xb6, 0xe4, 0x3e, 0x25, 0x37, 0x51, 0x19, 0x7c, 0x59, 0xc9, 0x87, 0x5b, 0x34, 0x4b, 0x41, 0x77, 0xe9, 0xd0, 0xe0, 0x85, 0x75, 0x73, 0x73, 0x93, 0xf1, 0x83, 0x4b, 0x2e, 0x71, 0x09, 0xe6, 0x2a, 0x3b, 0x0f, 0xec, 0x3a, 0x54, 0xca, 0xb7, 0xca, 0x60, 0x2a, 0x83, 0x9a, 0x5c, 0xcc, 0x97, 0x84, 0x31, 0x72, 0x14, 0xfb, 0x39, 0x06, 0x20, 0x33, 0x7a, 0x59, 0x30, 0xa7, 0x90, 0x08, 0x75, 0xde, 0x44, 0x4c, 0xc1, 0x9b, 0x35, 0x0b, 0x1c, 0xf6, 0xfb, 0x3d, 0xb4, 0x36, 0x19, 0x0a, 0x9e, 0x83, 0x09, 0x07, 0x23, 0xde, 0x04, 0x25, 0xad, 0x4d, 0xb6, 0xc3, 0x25, 0xcb, 0xa2, 0x44, 0xc8, 0x33, 0xbd, 0x8a, 0x37, 0x0c, 0x1f, 0x28, 0xd2, 0x7d, 0x6c, 0x89, 0x92, 0x28, 0x35, 0xeb, 0x4b, 0xb1, 0x93, 0xb2, 0x63, 0xb4, 0xc4, 0xa3, 0xe7, 0xcf, 0xb5, 0xdd, 0x6e, 0xc5, 0x41, 0x38, 0x2c, 0x5b, 0xa1, 0x2a, 0x1f, 0xa9, 0xdf, 0x84, 0x2f, 0x31, 0x46, 0xa1, 0xaa, 0x6b, 0x98, 0x4a, 0xe3, 0xed, 0xdb, 0xb7, 0xd8, 0x6c, 0x5c, 0x4c, 0x38, 0x4d, 0xf2, 0xa9, 0xf6, 0x61, 0x7e, 0x9e, 0xa9, 0x9a, 0x89, 0x07, 0x26, 0xab, 0x63, 0x95, 0xfc, 0x76, 0xbe, 0xa7, 0x72, 0xad, 0x38, 0x1f, 0x32, 0x24, 0x6d, 0xb9, 0x16, 0x08, 0x69, 0x4c, 0x6a, 0x54, 0x0f, 0x0f, 0x0f, 0x09, 0x7c, 0x33, 0xdb, 0xdf, 0xb6, 0x67, 0xc9, 0xdb, 0x52, 0x12, 0x78, 0x29, 0xb8, 0x4c, 0x16, 0x8b, 0x72, 0xba, 0xb2, 0x2a, 0x2d, 0x55, 0x09, 0x33, 0x03, 0x0e, 0x87, 0x24, 0x2b, 0x6d, 0x8c, 0x41, 0x50, 0x24, 0x1d, 0x4d, 0xbf, 0x47, 0x7a, 0xe2, 0x89, 0x02, 0x18, 0x00, 0x05, 0x72, 0x02, 0x1b, 0xc3, 0x14, 0xef, 0x51, 0x75, 0x91, 0xe7, 0x5d, 0x76, 0xbc, 0x2e, 0x05, 0xf6, 0xd2, 0xef, 0x3d, 0xb3, 0xe1, 0x6c, 0xab, 0x8b, 0x20, 0x37, 0x16, 0xfc, 0xb9, 0x34, 0x7f, 0xe7, 0xae, 0xc9, 0xa5, 0xd6, 0xb9, 0x4c, 0xf0, 0x2e, 0xdd, 0xbf, 0xa5, 0x51, 0x88, 0xfc, 0x7e, 0xa3, 0x3c, 0x54, 0x98, 0xe0, 0xec, 0x80, 0x69, 0x3a, 0x42, 0xeb, 0x03, 0xb4, 0x99, 0xa0, 0xf4, 0x84, 0xca, 0x78, 0xbc, 0x7f, 0xff, 0x26, 0xfa, 0x85, 0x37, 0x51, 0xfe, 0x5b, 0xa1, 0x6d, 0x88, 0xf2, 0x6b, 0x4d, 0x85, 0xa1, 0x27, 0x89, 0xf0, 0x56, 0xb7, 0xf1, 0xfe, 0x03, 0x8e, 0xc5, 0x8d, 0xb4, 0x86, 0x56, 0x2e, 0x75, 0x96, 0x10, 0x1c, 0xac, 0xeb, 0x31, 0xd9, 0x21, 0x26, 0x63, 0x15, 0xd6, 0xeb, 0x4d, 0x76, 0xdf, 0x4b, 0xad, 0x04, 0x1f, 0x93, 0x4f, 0x39, 0x3f, 0x97, 0x1a, 0xf5, 0xbb, 0xe3, 0xe3, 0x8b, 0x14, 0xbd, 0x52, 0xe4, 0x48, 0x2a, 0xc1, 0x55, 0x55, 0x85, 0xdb, 0xbb, 0x4d, 0xe6, 0x35, 0x32, 0x57, 0xcf, 0x44, 0xcf, 0x7d, 0xf7, 0xfe, 0x80, 0xd5, 0x6a, 0x85, 0xeb, 0x1b, 0x32, 0x69, 0x39, 0x1c, 0x0e, 0x24, 0xe6, 0x12, 0x6a, 0xd4, 0xcd, 0x16, 0xc7, 0x23, 0xed, 0xbf, 0x9b, 0x9b, 0x9b, 0xec, 0x0c, 0xf0, 0xde, 0xa7, 0x76, 0xfc, 0xcd, 0xcd, 0x0d, 0xb6, 0xdb, 0x6d, 0xf6, 0x8c, 0xd9, 0xc2, 0xb5, 0x6d, 0xdb, 0x94, 0x10, 0xf0, 0x59, 0xc7, 0x60, 0xdd, 0x61, 0x18, 0xf0, 0x93, 0x9f, 0xfc, 0x24, 0xfb, 0xbc, 0x92, 0x8e, 0x47, 0xc9, 0xc2, 0x31, 0xa1, 0xea, 0xf7, 0xfb, 0x3d, 0xfd, 0xdc, 0x69, 0x6c, 0x32, 0xc0, 0x18, 0x69, 0x9f, 0x53, 0x10, 0x6f, 0x1a, 0x6e, 0x67, 0x92, 0xd1, 0x40, 0x5e, 0x2d, 0x07, 0x92, 0xba, 0xd3, 0x2a, 0xa2, 0x6c, 0xe3, 0x0c, 0x3b, 0xd2, 0x45, 0x4e, 0x63, 0x9f, 0x55, 0x9c, 0x55, 0x15, 0x60, 0xdd, 0xcc, 0x55, 0x5f, 0xad, 0x37, 0xa4, 0x79, 0x5b, 0x35, 0x19, 0xa2, 0x58, 0x29, 0x85, 0xca, 0x68, 0x54, 0x41, 0x53, 0x4b, 0x10, 0x80, 0x8b, 0x07, 0x98, 0x0c, 0x78, 0x5a, 0x6b, 0x90, 0x59, 0x0e, 0xb9, 0x26, 0x49, 0x9d, 0x65, 0x56, 0xc0, 0x6a, 0x75, 0x95, 0x24, 0xf9, 0x64, 0xfb, 0x4a, 0x69, 0x05, 0xad, 0x02, 0xc6, 0x89, 0x46, 0x05, 0x92, 0x3b, 0x9e, 0x01, 0x28, 0x5c, 0x19, 0xe8, 0x19, 0x61, 0x4e, 0x9f, 0xeb, 0xe6, 0x76, 0x9b, 0x55, 0x78, 0x84, 0x05, 0xd0, 0xd0, 0xa6, 0x8e, 0xf3, 0xf8, 0x0a, 0xa6, 0xd2, 0x67, 0x7c, 0xc6, 0x00, 0x12, 0xf0, 0xb0, 0xce, 0x91, 0x2a, 0x9e, 0xb5, 0xd8, 0x47, 0x5f, 0x79, 0xa5, 0xa2, 0x45, 0x9f, 0xf8, 0x3c, 0x3e, 0x10, 0x60, 0xd1, 0x54, 0xc4, 0x1b, 0x9d, 0xb9, 0x93, 0x1b, 0xf4, 0xbd, 0x83, 0xf7, 0xb3, 0x1b, 0xcf, 0x34, 0xb1, 0x33, 0x90, 0x89, 0x5d, 0x0c, 0xd2, 0x9c, 0xa6, 0x99, 0x0b, 0xd0, 0xf7, 0x33, 0x40, 0xcd, 0x7b, 0x95, 0x38, 0xf9, 0xe9, 0x00, 0x8e, 0x3d, 0xd4, 0x10, 0x41, 0x8b, 0x39, 0xa5, 0xa9, 0x22, 0xd5, 0xbf, 0xc8, 0x54, 0x68, 0x6a, 0x61, 0x8e, 0x20, 0x64, 0x09, 0xab, 0x4a, 0xa1, 0xd2, 0x0a, 0x1e, 0x0a, 0xba, 0x12, 0x40, 0xb8, 0x51, 0x6c, 0xa8, 0xba, 0xc1, 0x78, 0xea, 0xe1, 0x9c, 0x15, 0xb6, 0xb1, 0x04, 0x54, 0xb2, 0x76, 0x82, 0xf7, 0x2e, 0x75, 0x47, 0x38, 0x79, 0x61, 0x3a, 0x20, 0x05, 0x3e, 0xa9, 0xdb, 0x4c, 0x54, 0x19, 0xe7, 0x26, 0x1c, 0x8f, 0x63, 0xc2, 0x64, 0x58, 0x6b, 0xd1, 0xb5, 0x6b, 0xd1, 0x19, 0x30, 0x18, 0x86, 0x31, 0x89, 0x9e, 0xd0, 0x6b, 0xcc, 0x94, 0x32, 0x05, 0x23, 0xf8, 0xea, 0x64, 0xf5, 0x4b, 0x19, 0x34, 0x22, 0x78, 0xcc, 0xc5, 0x31, 0x07, 0x09, 0x8f, 0x1c, 0x46, 0x42, 0xb9, 0x56, 0x75, 0x83, 0x4a, 0x37, 0xc4, 0x90, 0x00, 0xad, 0x29, 0xa5, 0x0c, 0x74, 0x55, 0xa1, 0xad, 0x6b, 0xd4, 0x51, 0x84, 0x22, 0x69, 0x39, 0xc7, 0x20, 0xbb, 0x6a, 0x36, 0xf0, 0x2e, 0xea, 0x4e, 0x57, 0x35, 0x02, 0x68, 0x23, 0x43, 0x4d, 0x30, 0x26, 0xe0, 0xf5, 0x27, 0x5b, 0x7c, 0xf9, 0xe5, 0x67, 0xb8, 0xbd, 0xff, 0x01, 0xec, 0x30, 0x00, 0x46, 0x41, 0xeb, 0x0e, 0xc6, 0xb4, 0xb0, 0x6e, 0xc0, 0xdd, 0xcd, 0x16, 0xba, 0xea, 0x81, 0xe9, 0x1e, 0xc1, 0x9f, 0xd0, 0xdd, 0x7c, 0x86, 0x2f, 0xde, 0xfe, 0xbf, 0x68, 0xbb, 0x8f, 0xa1, 0xf4, 0x80, 0xd0, 0x77, 0xf0, 0xfa, 0x00, 0x1b, 0x1e, 0xb1, 0xae, 0x3f, 0x84, 0x77, 0x06, 0xd3, 0x10, 0xd0, 0x76, 0x0e, 0x41, 0xbf, 0x83, 0xc7, 0x36, 0xd1, 0x51, 0x5d, 0xc4, 0x9f, 0x28, 0x50, 0xbb, 0x8f, 0xef, 0xd9, 0x14, 0x3c, 0xd6, 0xd7, 0x57, 0xd8, 0xde, 0xde, 0xa4, 0xc3, 0x74, 0xf4, 0x0e, 0x93, 0x9d, 0xa0, 0x05, 0xb0, 0x91, 0x0f, 0x50, 0x6e, 0x35, 0x1a, 0x63, 0x50, 0x99, 0x76, 0xc1, 0xa1, 0x6d, 0x0e, 0x92, 0x5e, 0x53, 0x5f, 0xd0, 0xc7, 0x0f, 0xa1, 0x95, 0x8e, 0xaa, 0x90, 0xf4, 0xfe, 0xcf, 0xcf, 0x8f, 0xd8, 0xb4, 0x24, 0xde, 0xd3, 0x74, 0x75, 0xa4, 0xea, 0x4d, 0xa8, 0xea, 0x26, 0x3e, 0xc3, 0xd7, 0x08, 0xe6, 0x1d, 0xdc, 0x69, 0x05, 0xa5, 0x1c, 0x06, 0xf5, 0x7b, 0x18, 0xc2, 0xd7, 0xa8, 0xaa, 0x1f, 0x40, 0xe9, 0x1e, 0x5e, 0xbf, 0x81, 0x69, 0x8f, 0x18, 0x87, 0xef, 0x02, 0x6e, 0x03, 0xbd, 0xfe, 0x39, 0x29, 0x40, 0x56, 0x1f, 0x61, 0xb0, 0xdf, 0x40, 0xf9, 0x95, 0x08, 0x7a, 0xee, 0x22, 0x05, 0x8a, 0xbc, 0xe3, 0x73, 0xd6, 0x86, 0x52, 0x0a, 0x5d, 0xb4, 0xbb, 0x0d, 0x9e, 0x93, 0x4a, 0x6a, 0x70, 0x56, 0xaa, 0x81, 0xaa, 0x34, 0xe0, 0x87, 0xf4, 0xda, 0x08, 0x81, 0x0a, 0xf6, 0x08, 0x3e, 0xa6, 0x83, 0x6d, 0x95, 0xda, 0xd7, 0x3a, 0x4a, 0x3e, 0x13, 0x36, 0x22, 0x8e, 0x2d, 0x8c, 0x8a, 0xde, 0x37, 0x31, 0x79, 0xf5, 0x0a, 0xde, 0x22, 0x19, 0x56, 0xa9, 0x7a, 0x0d, 0x04, 0x95, 0x40, 0x87, 0x46, 0x79, 0x40, 0x59, 0x20, 0x44, 0x3b, 0xd9, 0xf1, 0x11, 0xda, 0x38, 0xd4, 0x95, 0x85, 0x36, 0x03, 0x42, 0x38, 0x60, 0xb2, 0x47, 0x0c, 0xe3, 0x01, 0xd3, 0x38, 0x60, 0xd2, 0x7d, 0xa4, 0xf9, 0x7a, 0x18, 0x45, 0x85, 0x50, 0xb0, 0xf3, 0x20, 0xef, 0xea, 0xea, 0x75, 0x42, 0x6c, 0xbb, 0x63, 0x2f, 0x8a, 0x97, 0x2b, 0xd4, 0x35, 0x10, 0xea, 0x31, 0x31, 0x94, 0x82, 0xa1, 0x6e, 0xd1, 0xba, 0xde, 0xa4, 0xc4, 0xbd, 0xaa, 0xee, 0xd2, 0x8c, 0xf8, 0x74, 0x3a, 0x61, 0xb2, 0x06, 0x93, 0xa5, 0x7b, 0xb8, 0x5a, 0xad, 0x50, 0xd7, 0x14, 0xbc, 0x4e, 0x83, 0xcb, 0x0b, 0x89, 0xaa, 0x46, 0xd3, 0xae, 0xf1, 0xf0, 0xf0, 0x90, 0xe8, 0x9a, 0xa6, 0xa6, 0xa4, 0x7f, 0x72, 0xb3, 0x8b, 0xe0, 0x66, 0x7d, 0x73, 0x36, 0x66, 0xe4, 0x19, 0xb7, 0x31, 0x06, 0xc3, 0x69, 0x4a, 0x01, 0xbb, 0xdb, 0xae, 0xd3, 0xfa, 0xdc, 0xed, 0x76, 0x78, 0x7e, 0xda, 0xc1, 0x85, 0x5d, 0x2c, 0x78, 0xe8, 0x0c, 0xe9, 0x3a, 0xd2, 0x5f, 0xdf, 0x6e, 0xb7, 0xd8, 0x34, 0x2b, 0x7c, 0xf0, 0x21, 0x15, 0x5c, 0xc7, 0xe3, 0x11, 0xc7, 0x9e, 0xaa, 0xe1, 0x8f, 0x5e, 0x7f, 0x17, 0x00, 0x88, 0x07, 0x6e, 0xea, 0x84, 0xc4, 0xe7, 0xf9, 0x3e, 0x03, 0xed, 0x68, 0xed, 0x90, 0x54, 0xee, 0x9b, 0xb7, 0x5f, 0xe2, 0x70, 0xe8, 0x67, 0x8b, 0x53, 0xc3, 0xae, 0x9f, 0x2e, 0xfa, 0x36, 0x50, 0x7c, 0x6d, 0x9b, 0x55, 0x9c, 0x85, 0x3b, 0x28, 0x1c, 0xf0, 0xc1, 0x07, 0x35, 0xb5, 0xea, 0x4f, 0x23, 0xec, 0xe4, 0xd0, 0xf7, 0x03, 0xde, 0xbd, 0x3b, 0xe2, 0x74, 0x02, 0xea, 0x1a, 0x78, 0xf5, 0xc1, 0x4c, 0xcf, 0xbd, 0xbd, 0xbd, 0xa5, 0xe2, 0x97, 0x50, 0x89, 0x4c, 0xc3, 0xe2, 0xe0, 0x45, 0x19, 0xee, 0x34, 0xb9, 0x34, 0xf3, 0xa2, 0x43, 0x5f, 0xca, 0x88, 0x72, 0x4b, 0x5a, 0x9f, 0xb5, 0xcb, 0x64, 0x86, 0x24, 0xfd, 0x5c, 0xa5, 0x87, 0xf7, 0x34, 0x4d, 0x8b, 0x16, 0x9d, 0x65, 0x75, 0x7c, 0x49, 0xc7, 0x99, 0x94, 0x96, 0x5e, 0x36, 0x3d, 0xa8, 0xea, 0x86, 0xc0, 0x6f, 0xd6, 0x2e, 0xce, 0xc2, 0x27, 0xf1, 0xfd, 0x25, 0x23, 0x04, 0xa3, 0xcd, 0x8b, 0x6a, 0x71, 0x9c, 0xac, 0x94, 0xc0, 0x33, 0xfe, 0x9c, 0xe3, 0x40, 0x81, 0xd6, 0x4e, 0x33, 0x1a, 0x1d, 0x41, 0xa1, 0xae, 0x1a, 0x54, 0x86, 0xf4, 0xf3, 0x29, 0x90, 0xd5, 0x58, 0xaf, 0x6b, 0xac, 0x56, 0x41, 0x1c, 0x26, 0x1c, 0xb4, 0x90, 0xfe, 0x9f, 0xbb, 0x28, 0x04, 0xb4, 0x0b, 0x18, 0xa6, 0x3e, 0x13, 0xf4, 0x91, 0x7e, 0xbb, 0x52, 0x17, 0x40, 0x56, 0x39, 0xd2, 0x73, 0x5d, 0x7a, 0xf3, 0xca, 0x9f, 0x2f, 0x35, 0x85, 0x33, 0x31, 0x1a, 0xd1, 0xc2, 0xc6, 0x19, 0x0d, 0x2f, 0x7f, 0x4e, 0x65, 0x35, 0x7a, 0xa9, 0x1d, 0x2f, 0x0f, 0xfc, 0x12, 0xc9, 0x5f, 0xea, 0x9b, 0x73, 0xf6, 0xaa, 0xb5, 0xc6, 0x6a, 0xb5, 0x4e, 0x76, 0x8f, 0x89, 0xf6, 0x95, 0x06, 0x23, 0xb4, 0x71, 0x65, 0xeb, 0x9c, 0x3c, 0x02, 0x24, 0xe8, 0xcb, 0xa4, 0x44, 0x8d, 0x67, 0xb2, 0x33, 0x1d, 0x51, 0xc5, 0x8c, 0xde, 0xcf, 0x2a, 0x6a, 0x62, 0xec, 0x43, 0xd5, 0x71, 0x74, 0x6a, 0x52, 0xb3, 0x87, 0x31, 0x1f, 0xfc, 0x5a, 0x57, 0x99, 0x72, 0x1f, 0x77, 0x05, 0x7c, 0x98, 0xdb, 0xfb, 0x87, 0xa7, 0x23, 0x94, 0x32, 0xc9, 0x98, 0x02, 0xaa, 0x82, 0x75, 0x88, 0x95, 0x73, 0x80, 0x02, 0x61, 0x2b, 0xbe, 0xfe, 0xfa, 0x6b, 0x6c, 0x36, 0x1b, 0x38, 0xab, 0xd0, 0xd4, 0x15, 0xa6, 0x29, 0xa0, 0x6d, 0x89, 0x1b, 0xae, 0x61, 0xa1, 0x2f, 0x08, 0x8b, 0xd4, 0x75, 0x0d, 0xb8, 0x0a, 0x95, 0xa3, 0x0c, 0xbf, 0xa9, 0x1a, 0x78, 0xa7, 0x51, 0xd7, 0x1e, 0x0e, 0x06, 0xba, 0x6a, 0xb2, 0x8a, 0xa8, 0xac, 0x3c, 0xa5, 0xd2, 0x9d, 0x5c, 0xff, 0x69, 0x6c, 0xa1, 0x74, 0x86, 0xfb, 0x28, 0x93, 0xee, 0x25, 0x8a, 0xdf, 0x39, 0xcf, 0x7a, 0x5e, 0xe3, 0x74, 0x3e, 0x8c, 0xb0, 0x56, 0x27, 0x2a, 0x0f, 0x09, 0xdb, 0x10, 0xda, 0xd9, 0x79, 0xea, 0xb0, 0x50, 0x67, 0x20, 0x02, 0x69, 0xbd, 0x8b, 0x89, 0xa6, 0x7c, 0xdf, 0x90, 0x19, 0x41, 0xa9, 0x72, 0x04, 0x15, 0x15, 0xd6, 0xa4, 0xb4, 0xec, 0xd2, 0x98, 0x4a, 0xb6, 0xbc, 0x97, 0x40, 0x73, 0x99, 0x3d, 0xb2, 0x83, 0xb8, 0x1e, 0x95, 0xe1, 0x5b, 0xc8, 0x14, 0x2a, 0x56, 0x90, 0x5a, 0x80, 0xda, 0xea, 0x5a, 0xf8, 0x52, 0x04, 0xcc, 0xee, 0x70, 0x7c, 0xc6, 0x49, 0xb7, 0x36, 0xea, 0xd0, 0xd0, 0x19, 0x12, 0xa0, 0x34, 0x08, 0xc0, 0xe6, 0x1c, 0x82, 0x8d, 0xcf, 0x5e, 0x07, 0x68, 0x43, 0x88, 0x7f, 0x85, 0x80, 0x55, 0x57, 0xc1, 0x8e, 0x23, 0x8e, 0xc7, 0x67, 0x9c, 0xc6, 0x47, 0x38, 0x47, 0x1a, 0xec, 0x88, 0x82, 0x2e, 0x5e, 0x1f, 0xd2, 0xf3, 0x62, 0xac, 0x8b, 0xb4, 0x62, 0x3e, 0x1c, 0x76, 0x91, 0xaa, 0x58, 0x41, 0xa9, 0x3a, 0x1b, 0x15, 0x39, 0xe7, 0xd0, 0x76, 0xf9, 0xf9, 0xcd, 0xe8, 0xef, 0x19, 0xcd, 0x7d, 0xbe, 0x2e, 0xf8, 0xb9, 0x53, 0x97, 0x92, 0xe8, 0x8f, 0xfc, 0x4c, 0xb9, 0x45, 0xbd, 0xdb, 0xed, 0xf0, 0xf8, 0xf8, 0x88, 0xdb, 0xdb, 0xdb, 0xc4, 0x4e, 0x39, 0x1e, 0x8f, 0x59, 0xc1, 0xc3, 0x7e, 0xe5, 0xbc, 0x5f, 0x19, 0xa3, 0xc2, 0xf3, 0x6b, 0x3a, 0x0f, 0x6d, 0xda, 0x77, 0xec, 0x51, 0xde, 0x34, 0x0d, 0x5e, 0xbd, 0x7a, 0x45, 0x9d, 0x2c, 0x3c, 0x65, 0x96, 0xaa, 0xfc, 0xba, 0x65, 0x77, 0x8e, 0xbf, 0xcf, 0xf4, 0x36, 0x4e, 0x52, 0x82, 0x3f, 0x25, 0x0f, 0x74, 0x06, 0xb6, 0xb1, 0x12, 0x28, 0x39, 0xb2, 0x9d, 0xf0, 0xf1, 0xc7, 0x1f, 0xe3, 0xd5, 0xab, 0x57, 0xa8, 0xeb, 0x1a, 0xef, 0xdf, 0xbf, 0xc7, 0x37, 0x5f, 0xbf, 0x4d, 0x15, 0xf6, 0x6a, 0xb5, 0x49, 0x1d, 0x66, 0xbe, 0x8f, 0x34, 0xcf, 0xa7, 0x0a, 0x9e, 0xf5, 0xd9, 0xbb, 0x28, 0xb9, 0x6e, 0xad, 0xc7, 0xd5, 0xd5, 0x3e, 0x8d, 0x2d, 0x86, 0xf1, 0x39, 0x25, 0x2c, 0xcc, 0xc8, 0xa9, 0x4a, 0x2d, 0x5c, 0xb9, 0x81, 0xf9, 0x06, 0x2e, 0x89, 0xfc, 0x53, 0xf0, 0xa8, 0x5e, 0x94, 0x9e, 0x94, 0x74, 0x32, 0xce, 0xf8, 0xf9, 0x86, 0x5d, 0xa2, 0x84, 0x94, 0x68, 0xe0, 0xa5, 0x16, 0x17, 0xbf, 0xbe, 0x75, 0xc3, 0xa2, 0xb4, 0x28, 0x7f, 0xad, 0x57, 0xcd, 0xc5, 0x59, 0x1d, 0xd3, 0xc2, 0x2e, 0xbd, 0x0f, 0x05, 0xf4, 0xfa, 0x5b, 0x38, 0x8e, 0x21, 0xd3, 0xc6, 0xe6, 0xea, 0x71, 0x46, 0x5b, 0xcf, 0xc6, 0x30, 0xd3, 0x54, 0xaa, 0x15, 0xcd, 0x6d, 0xc4, 0x52, 0xad, 0x8b, 0x03, 0x97, 0x44, 0x97, 0xcb, 0xc0, 0xc4, 0x87, 0xf0, 0x70, 0x1a, 0x5f, 0x14, 0x4e, 0x60, 0xf5, 0x30, 0xde, 0xa4, 0xf2, 0xf5, 0x24, 0xe8, 0x6b, 0xc9, 0xb0, 0xe4, 0x25, 0xbf, 0x71, 0x49, 0x9b, 0x2b, 0xbf, 0x2f, 0xf5, 0xb6, 0x97, 0x92, 0x2c, 0xb9, 0xb9, 0x97, 0xfc, 0xd0, 0x4b, 0xb9, 0x55, 0x0e, 0x86, 0x6c, 0x11, 0x9b, 0x73, 0xef, 0x43, 0x12, 0xec, 0xa1, 0x9f, 0x9f, 0x3d, 0xeb, 0xd9, 0x13, 0x9b, 0x37, 0x26, 0xa1, 0xde, 0xf3, 0xd7, 0x9e, 0xe7, 0xc5, 0x3a, 0xd9, 0xec, 0xce, 0x89, 0x48, 0x05, 0x6b, 0x47, 0x84, 0xc0, 0x26, 0x3f, 0xd4, 0x0e, 0x37, 0x46, 0xc1, 0x53, 0x31, 0x83, 0xc6, 0x74, 0xc2, 0x9d, 0x8c, 0x14, 0xdd, 0xd8, 0x9d, 0xd0, 0x98, 0x1a, 0xc1, 0xcf, 0x94, 0x4a, 0xa6, 0x30, 0xd9, 0xd1, 0x26, 0x8e, 0xfd, 0x66, 0xb3, 0xc9, 0xd6, 0x3c, 0x5b, 0xa1, 0x7a, 0x17, 0x10, 0x60, 0x71, 0x7d, 0xb3, 0xc1, 0x6b, 0xf5, 0x09, 0xbe, 0xfc, 0xea, 0x73, 0x7c, 0xf8, 0xc1, 0x6b, 0xd2, 0x26, 0x30, 0x2d, 0xc6, 0x21, 0xe0, 0xea, 0xea, 0x1a, 0xc7, 0x7e, 0x07, 0x6d, 0x0c, 0x34, 0x0c, 0x9c, 0xcf, 0xdb, 0xc6, 0x08, 0x61, 0x91, 0x8a, 0x93, 0x2a, 0x6f, 0x3b, 0xa1, 0x6e, 0xd5, 0x19, 0x36, 0x45, 0x1e, 0xbc, 0x0c, 0xc2, 0x29, 0x0d, 0x67, 0x18, 0x8b, 0xa0, 0x7d, 0xce, 0x66, 0x90, 0xcf, 0x97, 0xe6, 0xa4, 0xb3, 0x4b, 0x97, 0x1c, 0x09, 0x49, 0x1e, 0x76, 0x39, 0x3b, 0xa6, 0xcf, 0xe0, 0x52, 0xe0, 0x30, 0x46, 0xc1, 0xba, 0x91, 0xf0, 0x28, 0xd6, 0xa1, 0xef, 0x8f, 0xb8, 0xb9, 0xb9, 0x86, 0x0f, 0x16, 0x01, 0x1e, 0x2e, 0x4c, 0x50, 0xaa, 0x8d, 0x4c, 0x1d, 0xaa, 0x5c, 0xa7, 0xc9, 0xa5, 0x60, 0x1e, 0x05, 0x19, 0x81, 0xa0, 0x12, 0xa5, 0x4a, 0x29, 0x5a, 0x1f, 0x97, 0x4c, 0x56, 0xf8, 0x3e, 0x2e, 0xb9, 0xfd, 0x65, 0x49, 0xbb, 0xb3, 0x69, 0x3c, 0x49, 0xf7, 0x5c, 0x03, 0xc9, 0x8a, 0xb4, 0x02, 0x94, 0x49, 0xba, 0x1d, 0xb4, 0xce, 0x42, 0xaa, 0x68, 0xa9, 0x93, 0x15, 0x81, 0xad, 0x41, 0x65, 0x09, 0x48, 0xfa, 0xec, 0x10, 0xa0, 0x5d, 0x1f, 0x88, 0xb7, 0x2f, 0xdb, 0xea, 0xe1, 0x40, 0x54, 0xe3, 0x8a, 0xbb, 0x08, 0x54, 0xa1, 0x07, 0x8c, 0x50, 0xc1, 0xe1, 0xd4, 0xef, 0x30, 0x4e, 0x3d, 0x4e, 0xfd, 0x23, 0x46, 0xfb, 0x0c, 0x85, 0x09, 0x55, 0xad, 0x50, 0xd7, 0x0d, 0x6a, 0xa3, 0xa0, 0xbc, 0xcb, 0x14, 0x2a, 0xf9, 0xf9, 0x33, 0x00, 0xab, 0x64, 0x7b, 0xf0, 0xc8, 0x8a, 0x7f, 0x67, 0x9c, 0x2e, 0xd8, 0xfa, 0xc6, 0xfb, 0xc3, 0x23, 0xc5, 0x19, 0xf0, 0x35, 0x6b, 0x24, 0x4c, 0x93, 0xc7, 0x38, 0xce, 0xe0, 0x57, 0xde, 0xe3, 0x5c, 0xdd, 0x3a, 0xe7, 0x12, 0x3d, 0x4b, 0x9e, 0x69, 0x52, 0x4d, 0x93, 0x2d, 0x47, 0x79, 0xde, 0xcd, 0x81, 0x97, 0x5f, 0x67, 0xbb, 0xbd, 0xcb, 0xce, 0xd3, 0xc3, 0xe1, 0x80, 0xbe, 0xef, 0xd3, 0xef, 0xaf, 0xb7, 0x2d, 0x4c, 0xa4, 0xfe, 0x75, 0x5d, 0x87, 0xed, 0x76, 0x9b, 0xd0, 0xe3, 0xdc, 0x65, 0x92, 0xa3, 0x14, 0x79, 0x0e, 0xad, 0x57, 0x1b, 0x68, 0x3d, 0xcb, 0xb0, 0xca, 0xeb, 0xe0, 0xaa, 0x7e, 0xbb, 0xdd, 0xe2, 0x70, 0x38, 0xe0, 0xe1, 0xe1, 0x89, 0x3a, 0x6f, 0xd1, 0x3b, 0xe0, 0xb3, 0xcf, 0x3e, 0xc7, 0x9b, 0x37, 0xc0, 0xdd, 0x1d, 0xb0, 0x5e, 0xd7, 0xd8, 0x6c, 0x36, 0x49, 0xd1, 0x94, 0xde, 0x8f, 0xce, 0xd6, 0xbe, 0x3f, 0xc5, 0xeb, 0x6a, 0x22, 0x96, 0x66, 0x96, 0x9b, 0x26, 0xe9, 0xdb, 0x36, 0x75, 0x1d, 0xf6, 0xfb, 0x3d, 0x15, 0xc9, 0xde, 0x51, 0xcb, 0x28, 0x78, 0xa2, 0x0c, 0x78, 0x25, 0xa8, 0x3f, 0x2e, 0x82, 0xc0, 0xd8, 0x53, 0x5c, 0xe7, 0x5c, 0x61, 0x5a, 0x90, 0x39, 0xd8, 0xac, 0x34, 0x79, 0x90, 0x87, 0x89, 0x14, 0xa9, 0xe7, 0x6c, 0xa4, 0x04, 0xf3, 0x48, 0x40, 0x51, 0x6e, 0x84, 0xb2, 0x30, 0xe7, 0x9b, 0x4a, 0x7d, 0x64, 0x97, 0xec, 0x00, 0x43, 0xc0, 0xa2, 0xfa, 0x5c, 0x56, 0xc1, 0x54, 0xf5, 0x19, 0xca, 0x39, 0x4b, 0x2e, 0x9a, 0xfa, 0x8c, 0xc3, 0x98, 0x2b, 0xc2, 0x2d, 0xa3, 0xd1, 0x83, 0xa7, 0x2f, 0x5d, 0xeb, 0xc5, 0x39, 0xeb, 0x9c, 0xf1, 0x9b, 0x28, 0xb8, 0x60, 0x01, 0x94, 0x22, 0x15, 0x1a, 0xd6, 0xfa, 0x54, 0x2d, 0xd2, 0x47, 0xd2, 0x31, 0xb0, 0x44, 0x07, 0x1e, 0xab, 0xce, 0xd0, 0x9b, 0x25, 0xef, 0x52, 0xce, 0xa7, 0x64, 0x05, 0xcf, 0x88, 0xcb, 0x12, 0x27, 0x20, 0xd1, 0xea, 0xd6, 0x86, 0x45, 0x80, 0x10, 0xbf, 0xff, 0x50, 0x78, 0xaa, 0x97, 0xd5, 0xcc, 0x25, 0xab, 0xd4, 0x44, 0xc9, 0xaa, 0xab, 0x33, 0xf7, 0x35, 0x99, 0x30, 0xbc, 0x7b, 0xf7, 0x2e, 0x93, 0xae, 0x95, 0x6b, 0x83, 0x0d, 0x37, 0xe4, 0xa8, 0x25, 0xd3, 0xae, 0x0e, 0xb4, 0xc9, 0xea, 0x2a, 0xff, 0x0c, 0x74, 0xfd, 0x33, 0x4a, 0x5f, 0x0a, 0xaa, 0xd8, 0x90, 0x83, 0xdf, 0xaa, 0x5a, 0x27, 0xe4, 0xb6, 0x52, 0x88, 0x55, 0xd1, 0x10, 0xd7, 0xfa, 0x84, 0xa6, 0x5e, 0xcf, 0xd7, 0x0b, 0x23, 0xaa, 0x33, 0x9d, 0xcd, 0xf0, 0x54, 0xf2, 0x18, 0x70, 0xf0, 0xde, 0x46, 0x27, 0x40, 0x8f, 0xeb, 0xab, 0x57, 0xd4, 0xf2, 0x9b, 0xe2, 0xdc, 0x35, 0x10, 0xc3, 0x44, 0xeb, 0x0a, 0x3a, 0x22, 0xf4, 0xbb, 0xae, 0x83, 0x77, 0x84, 0x98, 0xbf, 0xbf, 0xff, 0x00, 0xd3, 0x48, 0x63, 0xa6, 0xbe, 0x1f, 0xe6, 0x51, 0x51, 0xd0, 0xe7, 0x9a, 0xfc, 0x18, 0xa0, 0x7c, 0x07, 0xeb, 0x67, 0x21, 0x0d, 0x5f, 0xcd, 0xc9, 0xd6, 0x30, 0x0c, 0xa8, 0x9a, 0x70, 0xa6, 0x31, 0xce, 0x87, 0xb8, 0x54, 0x20, 0x5c, 0xb2, 0x01, 0x96, 0xcf, 0x52, 0xca, 0x1b, 0x2f, 0x05, 0xc6, 0x4b, 0xe2, 0x3f, 0x4e, 0x8e, 0xc1, 0x54, 0xc8, 0xdd, 0xd8, 0xb4, 0x47, 0x55, 0x2b, 0x34, 0x2d, 0x69, 0xc9, 0x57, 0xb5, 0x8a, 0xdd, 0x8b, 0x09, 0x50, 0x36, 0x21, 0xd9, 0xed, 0x34, 0x82, 0x55, 0x72, 0x79, 0x8f, 0xd8, 0xc9, 0x03, 0x21, 0x07, 0x37, 0xaa, 0xe0, 0xa1, 0x12, 0x4e, 0xc3, 0xc3, 0x8b, 0x84, 0xf2, 0xa5, 0xa0, 0xfd, 0xa2, 0x5d, 0xcc, 0xc9, 0xe5, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xf6, 0x40, 0x70, 0xb9, 0x52, 0xa4, 0x42, 0x56, 0x6d, 0xd3, 0xfd, 0xa8, 0x52, 0x20, 0xa7, 0x51, 0x0c, 0xbb, 0xe4, 0x00, 0xe3, 0xb4, 0x8f, 0x49, 0x40, 0xfc, 0x8a, 0x38, 0xa4, 0x04, 0x30, 0x8e, 0x1d, 0x25, 0x15, 0xfc, 0x1c, 0xcc, 0x75, 0x88, 0x6d, 0x78, 0x05, 0xa8, 0x03, 0x2a, 0x5d, 0x25, 0x1f, 0x0b, 0x15, 0x26, 0x4c, 0xf6, 0x84, 0xf1, 0xf4, 0x8c, 0xc9, 0x9e, 0xf0, 0xcd, 0x17, 0x3f, 0x47, 0xc0, 0x14, 0x03, 0xb9, 0x47, 0xdb, 0x10, 0x58, 0x39, 0xe8, 0x1a, 0x36, 0x68, 0x74, 0x35, 0xb1, 0x95, 0x9c, 0xf3, 0x18, 0xc7, 0x29, 0xea, 0xe0, 0x23, 0xa3, 0x6e, 0x12, 0x26, 0x60, 0x4c, 0xc1, 0x5c, 0xee, 0x99, 0x9b, 0x9b, 0x9b, 0x02, 0xd4, 0x96, 0x63, 0x08, 0xf8, 0x7c, 0x67, 0xd1, 0x98, 0x72, 0xac, 0xf9, 0xee, 0xdd, 0x3b, 0x6c, 0xb7, 0xdb, 0x84, 0xab, 0x79, 0x7c, 0x7c, 0x4c, 0x48, 0x76, 0x06, 0x70, 0xca, 0xf3, 0x9b, 0xcf, 0x7f, 0x5e, 0x97, 0x1f, 0x7e, 0xf8, 0x61, 0x06, 0xf2, 0xe4, 0x59, 0x38, 0x9f, 0x23, 0x5f, 0x7f, 0xfd, 0x75, 0x26, 0x25, 0xad, 0xb5, 0x4e, 0x55, 0x3a, 0x25, 0xac, 0x33, 0xe3, 0x84, 0xe7, 0xda, 0x92, 0xf3, 0xfe, 0xf1, 0xc7, 0x1f, 0x27, 0x5c, 0xca, 0xf1, 0x78, 0x4c, 0x15, 0x33, 0xff, 0xfe, 0xf1, 0x78, 0xca, 0xb0, 0x49, 0x4c, 0x51, 0xe3, 0x78, 0xf5, 0xfe, 0xfd, 0x63, 0x42, 0xd1, 0x3b, 0x1b, 0xd2, 0xa8, 0xe1, 0xd3, 0x4f, 0x3b, 0x7c, 0xf8, 0xe1, 0x18, 0x93, 0x8f, 0xd9, 0x89, 0x6d, 0x38, 0x4d, 0x51, 0x57, 0x3e, 0xa4, 0xb6, 0xbe, 0xf7, 0xab, 0xb8, 0x0e, 0x07, 0x68, 0x35, 0x77, 0x22, 0x00, 0xe0, 0x79, 0x77, 0x48, 0x33, 0x79, 0xae, 0xda, 0xab, 0x61, 0x18, 0xd3, 0x6a, 0x9c, 0x5b, 0xa3, 0x7c, 0xf8, 0x49, 0x69, 0x56, 0x0a, 0x98, 0x72, 0x53, 0x5b, 0x7b, 0x3a, 0x93, 0x50, 0x2d, 0x2d, 0x22, 0x65, 0x15, 0x58, 0x1a, 0xaa, 0xc8, 0xec, 0x7f, 0xa9, 0x82, 0x96, 0x55, 0xe4, 0xd2, 0x3f, 0x52, 0x4b, 0x99, 0x33, 0xa8, 0x3c, 0xa0, 0x41, 0x00, 0xf5, 0xd4, 0x19, 0x67, 0x7b, 0xb2, 0xee, 0x8c, 0xb2, 0x94, 0x05, 0x27, 0x8c, 0x8b, 0x72, 0x90, 0x7c, 0x9f, 0xa8, 0x12, 0x58, 0xf6, 0xf3, 0x66, 0xad, 0xf6, 0xb0, 0x50, 0x29, 0xcd, 0x09, 0x85, 0x89, 0xca, 0x74, 0x9c, 0x45, 0x4e, 0x39, 0x28, 0xc4, 0x53, 0x66, 0x12, 0x74, 0x10, 0x07, 0x56, 0xc4, 0x29, 0x08, 0x73, 0x91, 0x25, 0x9e, 0xaf, 0x0c, 0xbc, 0xa5, 0x27, 0xb8, 0x04, 0xca, 0x2d, 0x69, 0xd0, 0xcf, 0x9f, 0xdf, 0x64, 0x14, 0x35, 0x59, 0xc1, 0x95, 0x40, 0xa2, 0x12, 0x5c, 0xc8, 0x2d, 0xdb, 0xa5, 0x11, 0x4a, 0xd9, 0x4d, 0x28, 0xc7, 0x35, 0x52, 0x47, 0x9c, 0x7f, 0x9e, 0x5b, 0x4a, 0xb9, 0xd6, 0x7c, 0x9d, 0x5a, 0xee, 0xb3, 0x37, 0x76, 0x0c, 0x1c, 0x45, 0x47, 0xa7, 0xb4, 0x12, 0xe5, 0x3f, 0x49, 0x78, 0x86, 0x36, 0xa8, 0xab, 0x64, 0xab, 0xcd, 0xa0, 0xaa, 0xd7, 0xd1, 0xcc, 0x83, 0xfc, 0xb6, 0x9d, 0x23, 0x61, 0x15, 0xc6, 0x64, 0x54, 0xcd, 0x9a, 0xc6, 0x50, 0x59, 0x07, 0x4b, 0xa0, 0xb2, 0x23, 0x60, 0x54, 0x47, 0xd5, 0x41, 0xad, 0x81, 0xb6, 0xab, 0x23, 0xa6, 0xa1, 0x82, 0x8d, 0x14, 0x1f, 0x1f, 0x3c, 0xb4, 0xaa, 0xd0, 0xd4, 0x0d, 0x09, 0xb2, 0xe8, 0x1a, 0x5a, 0x03, 0xbb, 0xc3, 0x11, 0xdb, 0x6d, 0x83, 0xed, 0x76, 0x8b, 0x87, 0x87, 0x27, 0x7c, 0xf0, 0xc1, 0x6b, 0x78, 0x3f, 0xa1, 0x69, 0x3a, 0x1c, 0x8f, 0x27, 0x34, 0xad, 0x02, 0x9c, 0x4b, 0x2d, 0x77, 0x3e, 0x4c, 0xa7, 0x69, 0x82, 0x0f, 0x23, 0x2a, 0xe5, 0xa2, 0xa6, 0x42, 0xa1, 0x91, 0x50, 0x00, 0x24, 0x65, 0x02, 0x5e, 0x02, 0x1c, 0x25, 0xb7, 0x5a, 0xa2, 0xe6, 0x97, 0xba, 0x62, 0x32, 0xf0, 0x1b, 0x63, 0xa0, 0x85, 0xee, 0x43, 0x69, 0xd6, 0x43, 0x49, 0xa8, 0x4c, 0xfa, 0x5c, 0x74, 0xfe, 0x8a, 0x1d, 0x17, 0x28, 0x98, 0x4a, 0xc1, 0x07, 0x8b, 0xaa, 0x9e, 0xbb, 0x23, 0x55, 0x45, 0x33, 0x69, 0x63, 0x14, 0xe0, 0x3d, 0xac, 0x1b, 0xb0, 0x6a, 0xe7, 0x19, 0x38, 0x25, 0xc9, 0x0a, 0x46, 0xb7, 0x68, 0x9b, 0x0e, 0x5a, 0x99, 0x58, 0xe9, 0xea, 0xe8, 0x8b, 0x3e, 0x17, 0x05, 0x95, 0xa9, 0x16, 0xd5, 0xd8, 0x24, 0xf8, 0xea, 0x25, 0x7d, 0x75, 0x63, 0xa2, 0x5c, 0x4a, 0x86, 0x66, 0x0f, 0xf4, 0x5e, 0x5a, 0xb2, 0x35, 0x74, 0x14, 0x10, 0xe2, 0x62, 0x83, 0xce, 0xd1, 0xd1, 0x9e, 0xe8, 0xef, 0x60, 0xa8, 0xa5, 0x4d, 0x3c, 0x87, 0x24, 0x69, 0x4b, 0xc2, 0x5a, 0x84, 0xb7, 0x51, 0x51, 0xaf, 0x40, 0xab, 0x38, 0xfe, 0x41, 0x40, 0xad, 0xfb, 0xd8, 0xee, 0xf7, 0xf0, 0xd6, 0x11, 0x4f, 0x7c, 0xd8, 0xe3, 0x34, 0x3c, 0x63, 0x9c, 0x7a, 0xdc, 0xdd, 0x13, 0x07, 0xbf, 0x32, 0x15, 0x8c, 0x01, 0x4c, 0xa5, 0xa0, 0x82, 0x8f, 0xf8, 0x10, 0x87, 0xc7, 0xa7, 0x87, 0x33, 0x17, 0x49, 0x0e, 0xa6, 0xeb, 0x7a, 0x95, 0xc0, 0x5c, 0xd2, 0x2f, 0x80, 0xa5, 0x80, 0xbb, 0xae, 0xc3, 0x38, 0x1e, 0x0b, 0xd0, 0x31, 0xdb, 0x42, 0x07, 0x58, 0x1b, 0xb0, 0xdf, 0x1f, 0x44, 0xc5, 0x6c, 0xd2, 0xac, 0xf9, 0x78, 0x24, 0x77, 0x31, 0xc6, 0xaf, 0x94, 0xc2, 0x31, 0xfc, 0x19, 0xba, 0xae, 0xc3, 0x6e, 0xb7, 0x4b, 0xe6, 0x29, 0xbc, 0x4e, 0x39, 0x68, 0xf7, 0x7d, 0x3f, 0x77, 0xb7, 0xbc, 0x47, 0xdf, 0xf7, 0x49, 0xa8, 0x85, 0xc0, 0xaf, 0x85, 0x6e, 0x81, 0xf8, 0x7d, 0x3a, 0x0b, 0x2d, 0xd9, 0x84, 0x8b, 0x24, 0x80, 0x04, 0xa1, 0x18, 0x64, 0x5b, 0xa5, 0x3f, 0x95, 0x32, 0x31, 0x70, 0x1e, 0xa0, 0x35, 0x07, 0x7e, 0x2b, 0xf4, 0x22, 0xc8, 0xe3, 0x84, 0xa5, 0x63, 0x4f, 0xa7, 0x13, 0x1e, 0x1e, 0x1e, 0xa8, 0xbd, 0xbe, 0xda, 0xa2, 0xeb, 0xaa, 0x78, 0x9f, 0x29, 0xb0, 0x5f, 0x5f, 0x5f, 0xc7, 0x6e, 0xc4, 0x8c, 0xc2, 0x7f, 0x78, 0xff, 0x84, 0xc7, 0xc7, 0x03, 0xa6, 0x89, 0x66, 0xe4, 0x75, 0xad, 0x53, 0x67, 0x81, 0xdc, 0xee, 0x6a, 0x6c, 0xd6, 0xdb, 0xc4, 0xd0, 0xa1, 0x19, 0xfd, 0x90, 0x28, 0xca, 0x80, 0x46, 0x75, 0x3a, 0x8d, 0xe2, 0x82, 0x74, 0x9a, 0x40, 0x02, 0x39, 0xba, 0x3c, 0x07, 0x7f, 0x51, 0x0b, 0x72, 0x18, 0x4e, 0x67, 0x54, 0x0f, 0x59, 0x45, 0x4b, 0xa1, 0x8f, 0x12, 0x55, 0x2d, 0xb5, 0xc1, 0x97, 0x2a, 0xb9, 0x25, 0xe3, 0x87, 0xb2, 0xe2, 0xe6, 0x0a, 0x68, 0x69, 0x86, 0x4f, 0x5a, 0xe2, 0xc3, 0x22, 0xb5, 0xa9, 0xa4, 0xaf, 0x94, 0xc8, 0xdc, 0x99, 0xd6, 0x30, 0xbd, 0xa8, 0x02, 0x47, 0x00, 0x39, 0x1f, 0x55, 0xe7, 0xb8, 0x92, 0x9b, 0xc1, 0x73, 0xc7, 0xc3, 0x69, 0x81, 0x83, 0xaa, 0x05, 0xda, 0xd1, 0xa5, 0xac, 0xd2, 0x98, 0x1a, 0x4a, 0x71, 0x3b, 0x8b, 0x0e, 0x38, 0xaa, 0x92, 0x96, 0xfc, 0xa2, 0xa9, 0x6d, 0xc8, 0xf3, 0xdd, 0x92, 0x56, 0xc5, 0xf7, 0x40, 0xa2, 0x64, 0xa5, 0xef, 0x36, 0x6f, 0x4c, 0x6e, 0xdf, 0x94, 0x33, 0xf4, 0x39, 0xf8, 0x37, 0x67, 0xbc, 0xef, 0xb2, 0x5d, 0xbe, 0x84, 0x98, 0x97, 0x19, 0x7b, 0x79, 0xe0, 0x67, 0xcf, 0xd9, 0xbb, 0xec, 0x99, 0x96, 0x6c, 0x80, 0xf5, 0x7a, 0x7d, 0xa6, 0x10, 0x26, 0x83, 0xb4, 0x6c, 0x05, 0x73, 0x50, 0x90, 0x34, 0x4b, 0x96, 0x99, 0xe5, 0xe4, 0xa2, 0x6c, 0x09, 0xa6, 0xd9, 0x79, 0xd1, 0xf2, 0x4f, 0xc2, 0x38, 0x7e, 0x10, 0xf3, 0x73, 0x07, 0x28, 0xa2, 0x44, 0x19, 0xa3, 0xa2, 0xb9, 0x87, 0x4e, 0xd2, 0xc0, 0xb3, 0xad, 0xa9, 0xcf, 0x3a, 0x35, 0xcc, 0xe4, 0x18, 0x06, 0x1b, 0x0f, 0x79, 0x02, 0x3f, 0x39, 0x3f, 0x41, 0x87, 0x2a, 0xca, 0xb1, 0xd6, 0xc2, 0x89, 0x6f, 0xc2, 0x64, 0x7b, 0x4c, 0x93, 0x8d, 0x55, 0x4d, 0x8d, 0xeb, 0xeb, 0x5b, 0x7c, 0xfe, 0xf9, 0xe7, 0x71, 0x36, 0x49, 0xdd, 0x8a, 0xba, 0x6a, 0x01, 0xcc, 0x23, 0x31, 0xe3, 0x67, 0x87, 0x26, 0x9a, 0xd5, 0x5b, 0x9c, 0x0e, 0x03, 0x94, 0x99, 0x45, 0x3d, 0x06, 0x35, 0xc0, 0x59, 0x05, 0xe8, 0xb9, 0x6a, 0x2f, 0x71, 0x0a, 0xa5, 0xf3, 0xd9, 0xd2, 0xd8, 0x85, 0x0f, 0xee, 0xd6, 0x9c, 0x07, 0x7c, 0x9e, 0x21, 0x12, 0xfa, 0x3c, 0xaf, 0xca, 0xcb, 0xe4, 0xbd, 0x6d, 0x57, 0x89, 0x02, 0x4a, 0xf1, 0x9d, 0x66, 0xcf, 0x3c, 0xe2, 0xf0, 0xde, 0x62, 0xbf, 0x7f, 0x8c, 0x6b, 0x76, 0x04, 0x94, 0x43, 0xb7, 0x6a, 0x31, 0xd9, 0x13, 0xaa, 0xda, 0xc0, 0x4f, 0x1e, 0xce, 0x4d, 0x79, 0x75, 0x0f, 0x0d, 0xef, 0x02, 0xaa, 0x9a, 0x12, 0xa1, 0xa6, 0x69, 0x30, 0x9c, 0x54, 0xd2, 0x72, 0x37, 0xde, 0x40, 0xa3, 0x02, 0x54, 0xf5, 0x22, 0xe5, 0xeb, 0xdb, 0x14, 0xe1, 0x98, 0xd6, 0x9a, 0xb8, 0xf7, 0x32, 0xe3, 0x66, 0xdc, 0x45, 0xa8, 0x92, 0x70, 0x09, 0xad, 0x0f, 0x97, 0x05, 0xf5, 0xe0, 0x75, 0x02, 0x99, 0x72, 0xb2, 0xa1, 0xb5, 0x49, 0x55, 0x3b, 0x25, 0xa8, 0x1e, 0x5a, 0xb9, 0xe8, 0x57, 0xee, 0x00, 0xd0, 0xa8, 0x41, 0x07, 0x8f, 0xba, 0x8b, 0xba, 0xe7, 0xd3, 0x80, 0x71, 0x3a, 0xc2, 0x4e, 0x3d, 0xac, 0xeb, 0x11, 0xd0, 0xa3, 0x32, 0x23, 0xb4, 0xd2, 0x70, 0x7e, 0x42, 0x3f, 0x0d, 0xf0, 0x8e, 0x80, 0xa6, 0x70, 0x21, 0x8d, 0x01, 0xdb, 0x4e, 0x70, 0xda, 0x2b, 0x76, 0xcf, 0xac, 0xb0, 0x5a, 0xb5, 0x31, 0x60, 0x9f, 0xc4, 0x99, 0x48, 0xd7, 0xeb, 0xdc, 0x84, 0x61, 0xa0, 0x3f, 0xf7, 0xfb, 0xe7, 0xb3, 0x0a, 0x5d, 0xb2, 0x60, 0x88, 0xc7, 0x8d, 0xd4, 0x82, 0x96, 0xf7, 0x90, 0x46, 0x4e, 0x57, 0xa9, 0x25, 0xaf, 0xb5, 0xc6, 0xcd, 0xcd, 0x0d, 0xba, 0xae, 0x4b, 0x85, 0x19, 0x07, 0x68, 0x15, 0xbd, 0xd9, 0xb9, 0xbb, 0xcb, 0x67, 0x17, 0xff, 0x1d, 0x27, 0xfc, 0xb2, 0x52, 0x26, 0x47, 0xb4, 0xfa, 0xac, 0x80, 0x4c, 0xc6, 0x2e, 0xd3, 0x84, 0xd1, 0x1e, 0xd3, 0xcf, 0x32, 0xfd, 0x4b, 0x16, 0x5e, 0x8f, 0x8f, 0x8f, 0x19, 0xa5, 0x8d, 0xab, 0xf5, 0x79, 0x1c, 0x51, 0xa5, 0xbd, 0xc2, 0x5d, 0x44, 0xbe, 0xd6, 0xbe, 0x27, 0x10, 0xe1, 0xee, 0xf9, 0x80, 0xc3, 0xbe, 0xc7, 0xed, 0xed, 0x2d, 0x5e, 0xbd, 0xfa, 0x90, 0xd6, 0xe3, 0x30, 0x0a, 0x89, 0xd7, 0xd9, 0xa9, 0xed, 0xee, 0xee, 0x2e, 0x7e, 0x8e, 0x06, 0x9b, 0xcd, 0x06, 0x6d, 0x5b, 0xc3, 0xb9, 0x90, 0xaa, 0x7c, 0xad, 0x29, 0xd1, 0x09, 0x3e, 0x8e, 0xbd, 0x9a, 0xea, 0x8c, 0x99, 0x53, 0x21, 0x10, 0xed, 0x03, 0x41, 0x27, 0x53, 0x13, 0x6e, 0x59, 0x53, 0xfb, 0x2f, 0x1e, 0xb2, 0x64, 0x7a, 0x9e, 0xfa, 0xf7, 0xa5, 0x6c, 0xe2, 0x12, 0x70, 0x84, 0x67, 0x70, 0xf2, 0xd0, 0x2f, 0x39, 0xc9, 0x4b, 0x96, 0x95, 0x25, 0xcf, 0xb3, 0x44, 0x9f, 0x2f, 0xcd, 0x7d, 0x97, 0x02, 0x3a, 0x35, 0x14, 0x54, 0x2e, 0x7a, 0x21, 0xac, 0x14, 0xa1, 0xd5, 0xb7, 0x88, 0x47, 0xb8, 0x45, 0x6e, 0xf6, 0x1c, 0xa0, 0xaa, 0x45, 0x99, 0x58, 0xd9, 0x52, 0x97, 0xaa, 0x71, 0xf9, 0xdf, 0x71, 0xb5, 0x3b, 0x45, 0xd0, 0xa1, 0x8e, 0xfe, 0xea, 0x48, 0x3c, 0x79, 0xf9, 0x3b, 0xb9, 0xc5, 0x2b, 0x77, 0x4b, 0xdc, 0xd9, 0x41, 0x24, 0x0d, 0x4d, 0xa4, 0xb8, 0x05, 0xcf, 0xa6, 0xf8, 0x20, 0x2f, 0x25, 0x4f, 0x25, 0x3d, 0x62, 0x7e, 0x9f, 0x65, 0x05, 0xb1, 0xa4, 0xba, 0x56, 0x00, 0xdf, 0xca, 0x03, 0xaf, 0x94, 0x54, 0x2d, 0x41, 0x45, 0xb1, 0x50, 0x39, 0xab, 0xf6, 0xf8, 0x19, 0xb3, 0x74, 0x63, 0xd9, 0x49, 0x98, 0xd1, 0xf4, 0x75, 0xd2, 0xe5, 0xa7, 0x8e, 0x83, 0xcd, 0x40, 0x46, 0xd2, 0x0e, 0x96, 0x5e, 0x23, 0x17, 0xe9, 0x20, 0x44, 0xbd, 0x4d, 0x12, 0xb8, 0x2c, 0xd8, 0x32, 0x2b, 0xdd, 0x4d, 0xa2, 0x05, 0x0c, 0x04, 0x47, 0xd2, 0xa2, 0x55, 0x55, 0xa1, 0xed, 0x6a, 0x4c, 0x23, 0xb5, 0x49, 0x09, 0xa9, 0x8e, 0xc4, 0x87, 0x96, 0xeb, 0x98, 0x40, 0x3a, 0x54, 0x35, 0x04, 0x4c, 0x68, 0x5a, 0x03, 0xed, 0x00, 0x6b, 0x47, 0xdc, 0xac, 0x37, 0x08, 0xc1, 0x65, 0xf7, 0x65, 0xf6, 0x73, 0x1e, 0x60, 0x6a, 0x8b, 0xfd, 0x7e, 0x9f, 0xda, 0x90, 0x8f, 0x0f, 0xcf, 0xd8, 0x6c, 0x6e, 0x70, 0xd8, 0x3f, 0xa0, 0x32, 0x1d, 0xda, 0x3a, 0x26, 0x5e, 0xc1, 0xa0, 0x0a, 0x55, 0xa6, 0x72, 0x05, 0x4f, 0x81, 0xd5, 0x44, 0xb0, 0x58, 0x6a, 0x8d, 0x5b, 0x05, 0x53, 0xfb, 0xc4, 0xb8, 0x58, 0xa2, 0xe2, 0xc9, 0xf5, 0x2c, 0x9f, 0xa1, 0x3c, 0x40, 0x97, 0xb8, 0xff, 0x67, 0xe0, 0xc7, 0x80, 0x33, 0x29, 0xe2, 0xd2, 0x0e, 0x93, 0xba, 0x67, 0x01, 0x4a, 0x55, 0x08, 0x88, 0x02, 0x38, 0x2a, 0x24, 0x36, 0xc1, 0xe1, 0xb8, 0xc7, 0xf5, 0xf5, 0x35, 0x6c, 0xd4, 0xa8, 0xef, 0xba, 0x06, 0xa7, 0xd3, 0x31, 0x1a, 0x5a, 0x84, 0xf4, 0xcc, 0x7d, 0x44, 0x7e, 0xd3, 0x7d, 0xd7, 0xa8, 0xab, 0x16, 0x95, 0x5e, 0xa7, 0x2a, 0x4b, 0xc5, 0xbd, 0xa4, 0x95, 0xa1, 0xb1, 0xf5, 0x82, 0x34, 0xf2, 0x25, 0x0a, 0xe7, 0xd2, 0x7c, 0x98, 0x01, 0x7c, 0x4a, 0xb9, 0x6c, 0xcc, 0x42, 0xd5, 0xb5, 0xcd, 0xbb, 0x66, 0x9e, 0xd6, 0x23, 0x9d, 0x07, 0x36, 0xcd, 0xc9, 0x75, 0x9c, 0xfd, 0xd3, 0xba, 0x53, 0xc9, 0xd9, 0x92, 0xcf, 0x29, 0xef, 0x7a, 0xd2, 0x83, 0x57, 0x31, 0x98, 0xab, 0x09, 0x01, 0x13, 0xe0, 0x27, 0x58, 0xef, 0x81, 0xf1, 0x31, 0xde, 0xd3, 0x09, 0x4a, 0x0d, 0x30, 0x66, 0x04, 0xd4, 0x00, 0xa5, 0x07, 0xa8, 0x60, 0xa9, 0x35, 0xaf, 0x26, 0x38, 0x77, 0x02, 0xc2, 0x18, 0x67, 0x81, 0x86, 0xe6, 0xee, 0x46, 0x25, 0x93, 0xac, 0xba, 0xae, 0xb2, 0x04, 0x7d, 0x9a, 0x06, 0x58, 0x3b, 0xa6, 0x76, 0xb8, 0x6c, 0x75, 0xe7, 0x8c, 0x1e, 0x07, 0xe7, 0x3d, 0x7c, 0xb0, 0x59, 0x02, 0xef, 0x83, 0x27, 0xc8, 0x62, 0x14, 0xce, 0xb1, 0x8e, 0xce, 0x9c, 0xba, 0xae, 0x71, 0x15, 0x75, 0xc8, 0x8d, 0x31, 0x78, 0x7a, 0x3c, 0xa4, 0x6a, 0x5a, 0x02, 0x7b, 0x9f, 0x9e, 0x9e, 0xf0, 0xfc, 0xfc, 0x9c, 0xf9, 0x07, 0x70, 0xa0, 0x97, 0x16, 0xc3, 0x8c, 0x66, 0x97, 0x67, 0x12, 0x07, 0x60, 0x72, 0x20, 0x7b, 0xce, 0xce, 0x45, 0x09, 0x6c, 0x73, 0xce, 0xe1, 0x79, 0x7f, 0x4a, 0x00, 0x36, 0x5e, 0xe7, 0x4c, 0xb3, 0x95, 0x96, 0xa8, 0x3c, 0x9b, 0xcf, 0x65, 0xc4, 0x81, 0x57, 0xaf, 0x3e, 0x4c, 0xe7, 0x09, 0xff, 0x8c, 0x73, 0x0e, 0xab, 0xd5, 0x0a, 0xc3, 0x30, 0x60, 0xd5, 0x6d, 0x04, 0xe6, 0x20, 0xe0, 0x70, 0x38, 0xe0, 0xed, 0xdb, 0x77, 0xc2, 0x52, 0x75, 0x9d, 0xde, 0xa7, 0x6d, 0x5b, 0x34, 0xe9, 0x39, 0x70, 0xb1, 0x45, 0x63, 0x80, 0xc3, 0xa1, 0x4f, 0xc5, 0xe5, 0xf3, 0xb3, 0x4a, 0xcc, 0x03, 0xc6, 0x47, 0xf1, 0xb3, 0x23, 0x66, 0x89, 0x68, 0x7b, 0x97, 0x00, 0x2b, 0x06, 0xb1, 0x95, 0x5a, 0xdf, 0xbc, 0x31, 0x57, 0xeb, 0x76, 0xd1, 0xa5, 0x48, 0x56, 0x71, 0x72, 0x31, 0xc8, 0x80, 0xc0, 0x1f, 0x50, 0x66, 0x77, 0x72, 0x9e, 0xc9, 0xe8, 0xc6, 0x4b, 0x02, 0x23, 0xb2, 0xe2, 0x2b, 0x85, 0x4d, 0x66, 0x25, 0xb7, 0xf6, 0xa2, 0x3d, 0xdf, 0x4b, 0xc9, 0x41, 0x9a, 0xa1, 0xab, 0xfa, 0x2c, 0x98, 0x67, 0x2d, 0x63, 0x07, 0x38, 0x1b, 0x60, 0x6d, 0x6e, 0xba, 0x31, 0xfb, 0x0d, 0x77, 0x59, 0xbb, 0xaa, 0xd4, 0x2c, 0x67, 0x30, 0x96, 0x0c, 0xb0, 0x4b, 0xa6, 0x2a, 0x25, 0x97, 0x3d, 0xd9, 0xdb, 0x3a, 0x7b, 0x76, 0x4d, 0xb9, 0xb4, 0xaa, 0x3a, 0xd3, 0x61, 0x67, 0x81, 0x06, 0x6e, 0x59, 0x49, 0x85, 0x35, 0xa6, 0x9b, 0xf0, 0x33, 0xee, 0xfb, 0x31, 0xfb, 0xbc, 0xd2, 0x6a, 0x90, 0x5a, 0x86, 0x36, 0xfb, 0x3d, 0x89, 0x84, 0xe7, 0xcd, 0x70, 0xd9, 0x38, 0x07, 0x30, 0x82, 0x5b, 0x29, 0xc7, 0x02, 0x65, 0x72, 0x22, 0x03, 0xba, 0xfc, 0x79, 0xbe, 0x16, 0x76, 0xb5, 0x53, 0x6a, 0xf6, 0x72, 0xaf, 0x6a, 0x8d, 0xcf, 0x3f, 0xff, 0x3c, 0x71, 0xb0, 0xf3, 0xa4, 0x91, 0xc7, 0x15, 0x2e, 0xd7, 0x3c, 0xcf, 0xb8, 0xe8, 0x1a, 0xa6, 0xee, 0x52, 0x7b, 0xd4, 0xc5, 0xd6, 0xfb, 0x38, 0x8e, 0xf0, 0xc1, 0xc2, 0x54, 0x2a, 0xd9, 0x5f, 0x12, 0x5e, 0x43, 0x08, 0x43, 0x44, 0x79, 0x56, 0x1f, 0x78, 0x1c, 0x42, 0x95, 0x12, 0xd9, 0xe5, 0xb6, 0x30, 0x26, 0xc0, 0x7b, 0xfa, 0x1e, 0x51, 0x57, 0xa6, 0x14, 0x5c, 0xbd, 0x77, 0x50, 0x30, 0xa8, 0xeb, 0x16, 0xa6, 0xa6, 0x83, 0xbd, 0xeb, 0x3a, 0x7c, 0xf2, 0xc9, 0x27, 0xb0, 0x13, 0xb9, 0x3f, 0xed, 0x9e, 0xdf, 0x62, 0x73, 0xdb, 0x22, 0x84, 0x53, 0x54, 0x76, 0x9b, 0x01, 0x80, 0x7c, 0x20, 0x39, 0x3f, 0x40, 0xeb, 0x15, 0x25, 0x14, 0x61, 0xa6, 0x82, 0x05, 0x3d, 0x63, 0x59, 0xe4, 0x18, 0x46, 0x0a, 0x0e, 0xc9, 0xf1, 0x4b, 0xc9, 0x32, 0x90, 0xdd, 0x1e, 0x37, 0x8c, 0x8b, 0x9a, 0xe3, 0xc9, 0x8e, 0x56, 0xd5, 0xcb, 0x81, 0x3e, 0xde, 0xa7, 0xc3, 0xe1, 0x90, 0x2a, 0x58, 0x6d, 0x3c, 0x25, 0xdd, 0xca, 0x27, 0xf9, 0xdb, 0xaa, 0x36, 0x18, 0x0e, 0xa7, 0xc8, 0xb5, 0x3d, 0xc5, 0xf3, 0xc8, 0xe0, 0xe9, 0x89, 0xb0, 0x05, 0x46, 0x45, 0x2f, 0x6f, 0x1d, 0x52, 0x63, 0x84, 0x6d, 0x9e, 0x8d, 0x31, 0x08, 0x91, 0xa5, 0x62, 0xad, 0x83, 0x0e, 0xb3, 0xac, 0x35, 0x82, 0x87, 0x0b, 0x0e, 0xca, 0x2f, 0x4b, 0xd2, 0xce, 0x55, 0x6b, 0x75, 0x86, 0x05, 0x90, 0x58, 0x9a, 0xc9, 0x8e, 0xb1, 0xaa, 0xd6, 0x31, 0xf9, 0xd7, 0xc9, 0xc3, 0xe2, 0xd2, 0x0c, 0x9e, 0x46, 0x6c, 0x7c, 0xbf, 0xaa, 0xd4, 0xd9, 0x09, 0xac, 0x31, 0x0d, 0xc9, 0xc8, 0x19, 0x39, 0xb4, 0x03, 0x9a, 0xaa, 0x73, 0xf8, 0x01, 0xce, 0x8f, 0xd4, 0xbd, 0xd8, 0xbd, 0x89, 0xcf, 0x8a, 0xa8, 0xbe, 0xc6, 0x04, 0xe8, 0xc9, 0x21, 0xf8, 0x09, 0x93, 0xeb, 0xe1, 0x26, 0x9b, 0xb0, 0x24, 0x70, 0x44, 0xc5, 0x0c, 0x6e, 0x82, 0x77, 0x24, 0xb6, 0x65, 0xe3, 0x39, 0x20, 0xdb, 0xd1, 0x8c, 0xaf, 0x18, 0x86, 0x01, 0x0f, 0x0f, 0x0f, 0x19, 0x82, 0xbc, 0x5c, 0x13, 0x6c, 0xa1, 0x5b, 0x3a, 0xf9, 0xf1, 0x38, 0x4f, 0xc6, 0x0f, 0x56, 0x47, 0xe3, 0x59, 0x34, 0xc9, 0x94, 0x76, 0x19, 0x23, 0x8a, 0x2b, 0x61, 0x46, 0xdb, 0x4b, 0x04, 0x3a, 0x4b, 0xab, 0x5a, 0x6b, 0xb1, 0x5e, 0xaf, 0x13, 0x87, 0x7b, 0xbb, 0xdd, 0x26, 0x69, 0xd5, 0xe3, 0xf1, 0x98, 0x0c, 0x55, 0xe8, 0xe7, 0xba, 0x33, 0x4f, 0x03, 0x3e, 0x3f, 0xc7, 0x71, 0xc4, 0xed, 0xed, 0xbd, 0x48, 0x32, 0x01, 0xad, 0x0d, 0xda, 0x96, 0x80, 0xad, 0x7c, 0x26, 0x53, 0x3b, 0x7c, 0x42, 0xdf, 0x0f, 0x59, 0x80, 0x6f, 0x9a, 0x06, 0x5f, 0x7e, 0xf9, 0x65, 0x7a, 0x6d, 0x4e, 0x16, 0x64, 0xb5, 0x7c, 0xd8, 0xf7, 0xb1, 0x33, 0x50, 0x27, 0x14, 0x7f, 0x5d, 0x37, 0xe9, 0x9a, 0xa6, 0x69, 0xcc, 0x40, 0xbb, 0x5c, 0x84, 0x58, 0x3b, 0xc4, 0xa0, 0x8f, 0x28, 0x6c, 0x73, 0x82, 0x31, 0x75, 0x4c, 0x18, 0xe6, 0xf1, 0xab, 0x9d, 0x1c, 0x56, 0xdd, 0x7a, 0x46, 0xfc, 0x7b, 0x40, 0xfd, 0xd5, 0xbf, 0xf6, 0x1f, 0x07, 0xde, 0xc4, 0xac, 0x17, 0x5b, 0xda, 0x8b, 0x4a, 0x74, 0xb5, 0x9c, 0x37, 0xd7, 0x8d, 0xd8, 0xdc, 0x0c, 0xc6, 0x89, 0x1b, 0x9e, 0xab, 0x22, 0x39, 0x37, 0x93, 0x01, 0xbc, 0x34, 0xc1, 0xe0, 0x19, 0xa9, 0x54, 0xb8, 0x52, 0x6a, 0xce, 0x46, 0xa4, 0xf1, 0xfb, 0xbc, 0xe1, 0x9a, 0x33, 0xc9, 0xce, 0x2c, 0xe8, 0x7b, 0xb3, 0x28, 0x3a, 0xc0, 0xbf, 0x7f, 0x1a, 0xc6, 0xcc, 0x44, 0x43, 0x82, 0x38, 0x68, 0x51, 0xea, 0xac, 0x1d, 0x2c, 0x17, 0xa7, 0xb5, 0x16, 0x0a, 0x4d, 0xba, 0xe6, 0x52, 0xb2, 0xb4, 0xae, 0x6b, 0xd8, 0x09, 0x67, 0xf7, 0x52, 0xb6, 0x30, 0xa5, 0x30, 0x4d, 0x39, 0xeb, 0x91, 0x28, 0x6f, 0x09, 0xde, 0xc9, 0x5a, 0xc4, 0xda, 0xa6, 0x0d, 0xc9, 0x99, 0x60, 0xe9, 0x34, 0xb6, 0x5e, 0xaf, 0x13, 0x32, 0x53, 0xce, 0x04, 0xe9, 0x73, 0xe8, 0x54, 0xb1, 0x4b, 0x8a, 0xdb, 0x8c, 0x94, 0xd6, 0x8b, 0xb3, 0xff, 0x34, 0x2b, 0xaf, 0x75, 0xf6, 0x6c, 0x79, 0xfd, 0xf0, 0x0c, 0x49, 0xfa, 0x85, 0x2f, 0xe9, 0x54, 0xaf, 0x22, 0xc7, 0x58, 0x7a, 0x07, 0x4b, 0x31, 0x94, 0x9b, 0x9b, 0x1b, 0x7c, 0xf5, 0xd5, 0x57, 0xe4, 0x3c, 0xf4, 0xe1, 0x87, 0xd8, 0x6c, 0x36, 0xd8, 0xef, 0xf7, 0x38, 0x9d, 0x08, 0xfd, 0x39, 0x26, 0x8a, 0x1b, 0x07, 0x50, 0x2b, 0x02, 0x12, 0x05, 0x8c, 0x36, 0x52, 0x3e, 0xe8, 0xa2, 0x74, 0xb2, 0xd3, 0xa4, 0x0d, 0x64, 0x61, 0xed, 0x0c, 0x2a, 0x34, 0x9a, 0x9f, 0x6f, 0xa4, 0xb5, 0x35, 0x53, 0xcc, 0xfa, 0x89, 0x16, 0xb5, 0xdb, 0x3d, 0xc1, 0xda, 0x91, 0xda, 0x61, 0x5d, 0x03, 0x6d, 0xef, 0xb3, 0x4e, 0x87, 0xb5, 0x4c, 0x91, 0x8c, 0x6d, 0xc5, 0x3a, 0x26, 0x1a, 0x3a, 0x44, 0x7e, 0xf1, 0x3c, 0x0a, 0x20, 0xfd, 0xe9, 0x0d, 0x25, 0x85, 0xce, 0x0b, 0x70, 0x8f, 0x46, 0xdd, 0x50, 0x4b, 0x7f, 0x8c, 0x7e, 0xe5, 0x73, 0xa2, 0xd2, 0x22, 0x78, 0x8d, 0xe1, 0xe4, 0x30, 0x0c, 0x13, 0xee, 0xee, 0xd7, 0xf8, 0xea, 0x9b, 0x7f, 0x8e, 0x9b, 0xcd, 0xaf, 0xe2, 0xee, 0xee, 0x06, 0xdf, 0x3c, 0xff, 0x6f, 0x78, 0x7c, 0xd8, 0xe3, 0x66, 0xfd, 0x6b, 0x58, 0x6f, 0x0d, 0x86, 0x63, 0x8b, 0xaa, 0x19, 0xf0, 0xfe, 0xe1, 0x4b, 0x68, 0xb5, 0xc2, 0xba, 0xfd, 0x18, 0xc1, 0x1b, 0x74, 0x9b, 0x09, 0xba, 0xde, 0xc3, 0x0e, 0xab, 0xac, 0x2b, 0x73, 0xa9, 0x1b, 0x52, 0x26, 0xb2, 0x7c, 0xcd, 0xc7, 0x7e, 0x9f, 0x51, 0x89, 0xf8, 0x1c, 0xe0, 0x03, 0x9a, 0x3b, 0x1e, 0x25, 0x88, 0x8e, 0xd7, 0x66, 0x5d, 0x6d, 0x23, 0x46, 0x81, 0xc6, 0x11, 0xc6, 0x68, 0x68, 0xe3, 0x53, 0x6b, 0xfa, 0xf1, 0xe9, 0x0d, 0xbc, 0xf7, 0x78, 0xf5, 0xea, 0x15, 0x76, 0xbb, 0x5d, 0x3a, 0xe8, 0x3f, 0xff, 0xfc, 0x4b, 0x7c, 0xf2, 0xc9, 0x27, 0xa8, 0x4c, 0x8b, 0xc3, 0xa1, 0xc7, 0x66, 0xb3, 0x02, 0xd4, 0x04, 0xeb, 0x0f, 0xa8, 0xab, 0x16, 0x76, 0x6c, 0x60, 0xd4, 0x35, 0x50, 0xbd, 0x85, 0x9b, 0x3a, 0x78, 0xdb, 0xc6, 0xe7, 0x40, 0x8e, 0x73, 0xde, 0x29, 0x78, 0x57, 0xa3, 0x69, 0xa6, 0x17, 0xf5, 0xd5, 0x4b, 0x2a, 0xa6, 0xf4, 0x41, 0x70, 0xce, 0xa1, 0xd2, 0x5e, 0x8c, 0x1b, 0x9a, 0xc4, 0x8e, 0xe0, 0x6b, 0xad, 0xcd, 0x36, 0x56, 0xac, 0x36, 0x69, 0xf7, 0xcf, 0x09, 0x7f, 0x80, 0x0d, 0x1e, 0x3a, 0xe8, 0xe8, 0x75, 0xaf, 0x62, 0x40, 0xa7, 0x16, 0xbb, 0xd6, 0x0a, 0xde, 0x3e, 0xc2, 0x54, 0x01, 0x55, 0x6d, 0xa1, 0xf5, 0x01, 0x93, 0x7d, 0xc6, 0xe9, 0xf4, 0x8c, 0xbe, 0xdf, 0x61, 0x9c, 0x06, 0xf8, 0x13, 0x39, 0x5e, 0x06, 0x67, 0x61, 0x2a, 0xa0, 0xa9, 0xc8, 0xb2, 0x95, 0x95, 0xde, 0x8c, 0x21, 0xc0, 0x25, 0xcd, 0x6d, 0x6b, 0x54, 0xd1, 0x2e, 0x94, 0x3f, 0x6b, 0x30, 0x73, 0x27, 0x41, 0x52, 0xc3, 0x78, 0xce, 0xcc, 0x32, 0xa6, 0x7c, 0x1e, 0xcb, 0x6b, 0x07, 0x80, 0xdd, 0x6e, 0x9f, 0x15, 0x61, 0x12, 0x78, 0xca, 0xc9, 0xbc, 0x64, 0x39, 0xc8, 0xd7, 0x02, 0x80, 0x53, 0x6f, 0x33, 0x4b, 0x63, 0x59, 0x08, 0xf0, 0x79, 0x9c, 0xd6, 0x4a, 0x5d, 0xc7, 0x36, 0xfa, 0x0c, 0xae, 0x1b, 0x86, 0x3e, 0xa3, 0x0e, 0x73, 0x47, 0xef, 0xfe, 0xfe, 0x1e, 0x1f, 0x7e, 0xf8, 0x21, 0x86, 0x71, 0xb6, 0x48, 0x66, 0x2e, 0x7c, 0x2e, 0x29, 0x1d, 0x92, 0xc6, 0xba, 0xd6, 0x5a, 0x38, 0x9b, 0xd1, 0xeb, 0x76, 0x1d, 0x25, 0x04, 0x5d, 0xd7, 0xe1, 0xfa, 0xfa, 0x1a, 0x55, 0x55, 0x65, 0xc2, 0x4d, 0x2e, 0x2a, 0x15, 0xf2, 0x67, 0x63, 0x20, 0x1b, 0xcd, 0xbc, 0x2d, 0xa6, 0x69, 0x66, 0x19, 0x71, 0xa2, 0x2d, 0xcf, 0xd9, 0xa6, 0xa9, 0xb1, 0xdf, 0x1f, 0x12, 0xbd, 0xb6, 0x6b, 0xd7, 0x51, 0xef, 0x9d, 0x3a, 0x8f, 0x4d, 0xc3, 0x82, 0x5b, 0x6c, 0x3d, 0x4b, 0xf7, 0xbf, 0x69, 0x1a, 0xac, 0xba, 0x75, 0xea, 0x98, 0xf1, 0x7d, 0x25, 0x7f, 0x94, 0xd8, 0x8a, 0x95, 0x19, 0x9a, 0x34, 0x67, 0x28, 0xe5, 0x30, 0x65, 0x46, 0xce, 0x8a, 0x3a, 0xb2, 0xdd, 0x22, 0xb3, 0x7e, 0x0e, 0x80, 0xd2, 0x69, 0x4c, 0x1e, 0x1e, 0x52, 0xea, 0xf3, 0x92, 0xd5, 0x1f, 0x1f, 0x16, 0x9c, 0x68, 0xe4, 0x55, 0xfc, 0x79, 0xab, 0x3e, 0x6b, 0x3f, 0x17, 0x2d, 0xdf, 0x92, 0x4a, 0x55, 0xd5, 0x4d, 0xca, 0x02, 0x4b, 0xea, 0x17, 0x65, 0x48, 0xa5, 0x57, 0xee, 0xa9, 0xa8, 0x38, 0x5c, 0xa6, 0x52, 0x26, 0x69, 0x15, 0x04, 0x86, 0xaa, 0x04, 0x0a, 0x96, 0x67, 0xbc, 0xf3, 0x01, 0x79, 0x75, 0x75, 0x75, 0xd6, 0x39, 0x90, 0x95, 0x50, 0xdb, 0xb6, 0x67, 0xdc, 0x6c, 0xf9, 0x67, 0x90, 0x88, 0xec, 0xa2, 0x1a, 0x96, 0x36, 0xa5, 0x9c, 0x5c, 0x95, 0xd2, 0xb3, 0x72, 0x83, 0xc9, 0x6e, 0x45, 0xe2, 0xa1, 0x2f, 0x48, 0x4b, 0xca, 0x96, 0xe4, 0x14, 0x05, 0x6d, 0x78, 0xdd, 0x70, 0x52, 0x27, 0xdd, 0xce, 0x4a, 0xe0, 0x9b, 0x3c, 0xdc, 0x6b, 0xa3, 0x17, 0xbb, 0x39, 0xdc, 0x5a, 0x63, 0xf5, 0x23, 0x4e, 0xec, 0xe6, 0xd9, 0x2b, 0xb5, 0xcd, 0xea, 0x94, 0xe8, 0xc4, 0xcf, 0x56, 0x98, 0xe7, 0x94, 0xad, 0x52, 0x55, 0x20, 0xfa, 0x7d, 0x70, 0x59, 0x32, 0xc5, 0x01, 0x68, 0x1e, 0x13, 0x8d, 0x02, 0x0f, 0xa2, 0x22, 0x9e, 0x81, 0x01, 0x55, 0x44, 0x4b, 0x2b, 0x29, 0x97, 0xf4, 0x1c, 0xf8, 0x3d, 0x23, 0xad, 0xd0, 0x93, 0xda, 0x1b, 0xe9, 0x0a, 0xe8, 0x38, 0x57, 0x57, 0x42, 0x5a, 0x16, 0x99, 0x3e, 0xbf, 0xb2, 0x71, 0xc6, 0xaa, 0xa4, 0xc9, 0x8f, 0x83, 0xd6, 0x2e, 0x71, 0xe5, 0x01, 0xe0, 0x70, 0x38, 0xa4, 0xf9, 0xdf, 0x6e, 0xb7, 0x43, 0x55, 0x55, 0xb8, 0xbe, 0xbe, 0xc6, 0xb6, 0xdb, 0xe2, 0x78, 0x7a, 0x80, 0x56, 0x9d, 0x90, 0x46, 0x8d, 0x41, 0xda, 0x18, 0x18, 0xe3, 0x93, 0x21, 0x91, 0xa4, 0x9b, 0x2d, 0xad, 0x9f, 0x4b, 0x86, 0x29, 0xb2, 0xb2, 0x92, 0xd4, 0xd6, 0xac, 0xcb, 0xe4, 0x17, 0xba, 0x5e, 0x52, 0x0a, 0x38, 0x56, 0xab, 0x4a, 0x31, 0xa7, 0xdc, 0xc3, 0x79, 0x02, 0x1e, 0xb2, 0xb9, 0xc5, 0x38, 0x8e, 0x74, 0x80, 0xad, 0x36, 0x69, 0x9d, 0xf3, 0x01, 0x6c, 0x2a, 0x3d, 0x07, 0x51, 0xd8, 0x98, 0x80, 0x46, 0x9d, 0xf6, 0xc0, 0x14, 0x2f, 0x1f, 0xdf, 0x43, 0xcf, 0xf4, 0x43, 0x6d, 0xe0, 0x75, 0x05, 0xa5, 0xec, 0x8b, 0x33, 0x73, 0xc9, 0x53, 0x97, 0x6c, 0x1b, 0xfe, 0xd3, 0xdb, 0xd3, 0x2c, 0x28, 0x03, 0x9b, 0x82, 0x4d, 0x42, 0xd6, 0xc7, 0xd1, 0x8f, 0x46, 0x35, 0x03, 0xff, 0x92, 0x88, 0x0d, 0xa0, 0x05, 0x80, 0x52, 0x45, 0x2f, 0x77, 0xad, 0x3c, 0x02, 0x2c, 0x9c, 0xf7, 0xa8, 0x6b, 0x87, 0x69, 0xdc, 0xe3, 0xf9, 0xf9, 0x01, 0xc3, 0xf4, 0x08, 0xef, 0xf7, 0x64, 0x8c, 0x12, 0x08, 0xa4, 0x59, 0xd5, 0x1d, 0xc6, 0xd1, 0x63, 0xb2, 0x23, 0x86, 0x71, 0xc4, 0xa8, 0x3d, 0xea, 0xa6, 0x82, 0xd1, 0x31, 0x71, 0x40, 0x8d, 0xba, 0x06, 0xda, 0xb6, 0x42, 0x5d, 0x35, 0x29, 0x50, 0x38, 0xe7, 0x31, 0x8d, 0x0e, 0xab, 0xeb, 0x2a, 0xab, 0xae, 0x79, 0x56, 0xdd, 0x75, 0x5d, 0xd6, 0x66, 0x96, 0x00, 0x41, 0x99, 0xa0, 0xa5, 0xe7, 0x50, 0x80, 0x69, 0xf9, 0x7b, 0xab, 0xd5, 0x2a, 0x53, 0x30, 0x64, 0x4f, 0x71, 0x6e, 0x69, 0xd7, 0xd5, 0x2a, 0xe1, 0x47, 0xb8, 0xf2, 0x95, 0xdd, 0xe0, 0x52, 0x61, 0x8d, 0x13, 0x05, 0xee, 0x16, 0xbc, 0x7d, 0x3b, 0xa4, 0xdf, 0xe5, 0x2a, 0x9e, 0x0d, 0x54, 0xbe, 0xf9, 0xe6, 0x1b, 0x8c, 0x53, 0x4f, 0xfb, 0x21, 0x56, 0xf1, 0x72, 0x0d, 0x12, 0xad, 0x6d, 0x9d, 0xd6, 0xa2, 0x4c, 0x28, 0x38, 0xc8, 0xaf, 0x56, 0xab, 0x94, 0x54, 0xf0, 0xd9, 0xcf, 0xba, 0xef, 0x84, 0xb2, 0x7f, 0x9d, 0x5e, 0x8f, 0xdf, 0x9b, 0x24, 0x59, 0x4f, 0xb1, 0x83, 0xb1, 0x49, 0x09, 0x0d, 0x8f, 0x0e, 0xa4, 0x15, 0xf1, 0x7e, 0xbf, 0x43, 0x5d, 0xd7, 0xf8, 0xe8, 0xa3, 0x8f, 0xa2, 0x12, 0x5f, 0x15, 0x8b, 0x21, 0x2a, 0x70, 0xbf, 0xf9, 0xe6, 0xab, 0xa4, 0x53, 0x42, 0xb1, 0xb4, 0xca, 0x58, 0x3f, 0x4a, 0xd3, 0xe7, 0xee, 0x4f, 0xc7, 0xf4, 0x0c, 0xab, 0x29, 0xea, 0x9d, 0xcf, 0x0e, 0x4e, 0xdc, 0x1a, 0xf3, 0x34, 0xc7, 0xcb, 0x1c, 0x9c, 0x7c, 0x9c, 0xf9, 0x85, 0xe4, 0x5c, 0xc4, 0x07, 0x12, 0xd3, 0x32, 0x4a, 0x8a, 0x11, 0xc0, 0x3c, 0x3d, 0x0e, 0xaa, 0xe7, 0x6d, 0xe1, 0x19, 0x91, 0x1e, 0xa2, 0xd3, 0x54, 0x28, 0x28, 0x34, 0x26, 0x7d, 0x2e, 0x3a, 0x54, 0x1d, 0xb4, 0x0e, 0x89, 0x37, 0x9c, 0xb7, 0xb7, 0x66, 0x1c, 0x80, 0x94, 0xa9, 0x95, 0x87, 0x49, 0xaa, 0x52, 0x03, 0xb2, 0x80, 0x7c, 0x6e, 0xc8, 0xe1, 0x33, 0x2a, 0x17, 0x3f, 0x70, 0xbe, 0xc6, 0xc9, 0xf9, 0x08, 0x8a, 0x73, 0x69, 0xde, 0xcd, 0x06, 0x30, 0xce, 0x01, 0x6d, 0x53, 0x9d, 0xcd, 0xb7, 0x33, 0x90, 0xa0, 0x96, 0xad, 0x68, 0xf2, 0x83, 0x37, 0x95, 0x12, 0x6e, 0x74, 0x73, 0xa0, 0x8c, 0xb0, 0x9e, 0x28, 0x57, 0x49, 0x07, 0xff, 0x38, 0xd8, 0xa4, 0xf0, 0x47, 0x59, 0x9c, 0x4c, 0x4a, 0x10, 0x93, 0x20, 0x92, 0xc4, 0x25, 0xb1, 0x20, 0x9d, 0x0e, 0x2a, 0xaa, 0x10, 0x67, 0x20, 0xa3, 0xec, 0x1e, 0xa4, 0x8c, 0x1b, 0x6a, 0xd1, 0x9c, 0x25, 0xdd, 0x43, 0xcc, 0x89, 0x94, 0x6c, 0xb3, 0x71, 0x30, 0x90, 0xa0, 0xc2, 0x25, 0xb4, 0xb0, 0xa4, 0xce, 0x95, 0xf7, 0x87, 0xbb, 0x0e, 0xab, 0xd5, 0x2a, 0x01, 0x64, 0xac, 0xb5, 0xd8, 0x6c, 0x36, 0x89, 0x2b, 0xba, 0x04, 0xbc, 0x93, 0x63, 0x87, 0x92, 0x57, 0x5f, 0xea, 0xc0, 0x7b, 0xe7, 0xd3, 0x26, 0x61, 0xf5, 0x2d, 0x6e, 0xbf, 0x71, 0x10, 0x57, 0x20, 0xa0, 0x52, 0x8e, 0xd3, 0x88, 0x60, 0x4e, 0xa5, 0x88, 0x0b, 0xed, 0x3d, 0x14, 0xf4, 0x59, 0x85, 0xe6, 0x7c, 0xb4, 0x47, 0xf5, 0x3c, 0xf7, 0x27, 0x9b, 0xd2, 0x39, 0x09, 0xd3, 0x71, 0x96, 0x2a, 0xa5, 0x7f, 0x43, 0x42, 0x4d, 0x6b, 0x55, 0xc1, 0x85, 0x29, 0xbf, 0x0e, 0xcc, 0xc2, 0x40, 0x7d, 0xbf, 0xc3, 0xcd, 0xdd, 0x1a, 0xfb, 0xfd, 0x1e, 0xeb, 0x75, 0x87, 0xc3, 0x30, 0xe2, 0xc3, 0x0f, 0x3f, 0xc1, 0xfe, 0x81, 0xee, 0x8d, 0x0e, 0xfa, 0x0c, 0xac, 0x48, 0xd7, 0xe3, 0x10, 0x94, 0xa2, 0x00, 0x17, 0x1d, 0xb7, 0xa0, 0xe6, 0xd9, 0x2d, 0x89, 0xb6, 0x80, 0x78, 0xd4, 0x2a, 0xba, 0x10, 0xc6, 0xb9, 0xa8, 0x52, 0x9a, 0xe6, 0xd5, 0x31, 0xf1, 0xe4, 0x43, 0xaa, 0x0c, 0xf8, 0x0c, 0xfe, 0x2a, 0xbb, 0x4a, 0xd2, 0x64, 0xc4, 0x59, 0x95, 0x84, 0xac, 0x42, 0xdc, 0x3b, 0xd6, 0xcd, 0x95, 0x70, 0xad, 0x59, 0x26, 0x39, 0xc4, 0xb6, 0x3b, 0x01, 0x12, 0xbb, 0x6e, 0x8d, 0x10, 0x31, 0x02, 0x8c, 0x1c, 0x86, 0xa2, 0xd1, 0x06, 0x30, 0x6b, 0x02, 0xe4, 0xcf, 0xcc, 0x24, 0xb3, 0x1a, 0xf8, 0x0a, 0x30, 0x0d, 0xbc, 0x1f, 0x5f, 0xb4, 0x1a, 0x2d, 0x81, 0xb9, 0xe5, 0x1a, 0xad, 0x4d, 0x2b, 0x44, 0xb9, 0x68, 0x4c, 0x52, 0xd7, 0x35, 0x61, 0x2a, 0x22, 0x1e, 0x80, 0x41, 0x72, 0x84, 0xb1, 0x10, 0x5d, 0x3a, 0x78, 0x18, 0xd4, 0x40, 0x08, 0xd0, 0xda, 0xc7, 0xbd, 0x1f, 0x48, 0x8a, 0xd5, 0xf7, 0xb0, 0x6e, 0xc0, 0xf3, 0xf3, 0x97, 0xe8, 0x8f, 0xcf, 0x38, 0xf4, 0xef, 0x31, 0xd9, 0x3d, 0xea, 0x2a, 0xa0, 0x69, 0x35, 0x9a, 0x4a, 0x43, 0x21, 0xe0, 0x78, 0xe4, 0x8e, 0xa8, 0x46, 0x55, 0x77, 0xe8, 0x6a, 0x52, 0xa6, 0x54, 0x81, 0xe6, 0xda, 0x46, 0xc9, 0x31, 0x26, 0x4b, 0x9b, 0x06, 0x78, 0x3f, 0x22, 0xc0, 0xe2, 0xe1, 0x61, 0x97, 0x39, 0x01, 0x72, 0x62, 0x7e, 0x3c, 0x1e, 0x13, 0xaf, 0x59, 0x0a, 0xb2, 0x48, 0x8c, 0x87, 0xb5, 0x16, 0x9b, 0xf5, 0x75, 0x26, 0x42, 0x15, 0x22, 0x23, 0x87, 0xf7, 0xd8, 0x57, 0x5f, 0x7e, 0x93, 0xba, 0x76, 0x08, 0x11, 0xcd, 0x0f, 0x43, 0x9d, 0xb0, 0xba, 0x4a, 0x4e, 0x99, 0x32, 0x51, 0x97, 0x09, 0x36, 0xfb, 0x85, 0x73, 0xa0, 0xe7, 0xa0, 0xc9, 0x9f, 0x79, 0xb3, 0xd9, 0x24, 0x39, 0x56, 0x89, 0xcf, 0xe0, 0x64, 0x64, 0xb7, 0x7f, 0x4c, 0xe2, 0x44, 0xab, 0xd5, 0x0a, 0x77, 0x77, 0x77, 0x59, 0x07, 0x81, 0xc7, 0x38, 0x9c, 0x70, 0x48, 0x71, 0x18, 0x46, 0x92, 0xb3, 0x46, 0x3b, 0x4b, 0x1d, 0xcb, 0xd8, 0xd6, 0xf7, 0x7d, 0x1a, 0x15, 0x90, 0xd0, 0xd5, 0x2a, 0x15, 0x51, 0x5d, 0xd7, 0xc1, 0xe8, 0x26, 0x73, 0x61, 0xf3, 0xde, 0xc3, 0x4e, 0x1e, 0xfd, 0x91, 0xb0, 0x03, 0xab, 0xf5, 0xac, 0x65, 0xef, 0x9c, 0x43, 0x9f, 0x00, 0x77, 0x74, 0x2f, 0x5f, 0xbd, 0x7a, 0x95, 0x98, 0x1b, 0xec, 0x49, 0xc2, 0xf4, 0xba, 0x53, 0x3f, 0x60, 0xb7, 0x7f, 0x16, 0xc5, 0xaa, 0xc7, 0x38, 0x02, 0x95, 0x44, 0xb5, 0x96, 0xd9, 0xba, 0xb4, 0x5c, 0x2c, 0x41, 0x33, 0xe4, 0x77, 0xbd, 0xcd, 0x66, 0xc3, 0x65, 0xcb, 0x56, 0xda, 0x68, 0xf2, 0xcf, 0xc9, 0x3f, 0x25, 0xf2, 0x7a, 0x49, 0xab, 0xb8, 0x6c, 0xf7, 0x96, 0x40, 0x16, 0x6e, 0x09, 0x97, 0x06, 0x2f, 0x73, 0x86, 0x1d, 0x16, 0x4c, 0x1f, 0x98, 0x0f, 0xaa, 0x30, 0xc6, 0xf6, 0x89, 0x0c, 0x4a, 0x33, 0xa5, 0xc1, 0x24, 0xfa, 0x5e, 0x49, 0xbb, 0xe1, 0xca, 0xd6, 0x59, 0x97, 0x59, 0x6c, 0x96, 0x00, 0xb2, 0x25, 0x04, 0xf5, 0x92, 0x16, 0x7b, 0xa9, 0x5b, 0xbd, 0xe4, 0xdf, 0x2b, 0x33, 0x65, 0xd9, 0x52, 0xe7, 0x2a, 0x82, 0xef, 0xeb, 0x25, 0x83, 0x12, 0x79, 0x98, 0xce, 0x2d, 0xad, 0xe1, 0x8c, 0x3e, 0x26, 0x3b, 0x14, 0xf2, 0xfe, 0x96, 0x73, 0x6d, 0xa5, 0x14, 0x60, 0xce, 0x29, 0x8b, 0x25, 0x6d, 0x6e, 0x09, 0x6c, 0x94, 0x36, 0xbf, 0xb3, 0x67, 0xe6, 0x1e, 0xb2, 0xb5, 0xc9, 0x60, 0x98, 0xb2, 0x9b, 0x23, 0xb1, 0x1c, 0x9c, 0x68, 0x5a, 0x6b, 0x11, 0xe0, 0x44, 0x42, 0xe6, 0x52, 0x55, 0x3b, 0xcf, 0xcf, 0xf2, 0xf1, 0x07, 0xa9, 0x15, 0x2a, 0x51, 0x55, 0xcd, 0x74, 0x2a, 0x19, 0x9c, 0xa9, 0x55, 0x6f, 0xd0, 0xd4, 0x1d, 0xa0, 0x68, 0x26, 0xe6, 0x1c, 0x55, 0xfc, 0x49, 0x48, 0x45, 0x99, 0x64, 0x14, 0x38, 0x03, 0x31, 0x15, 0x9a, 0x86, 0xe6, 0xf0, 0x93, 0x1d, 0xe0, 0x9c, 0x8d, 0x3a, 0x02, 0x35, 0x8c, 0x61, 0xc7, 0x31, 0x8d, 0xa0, 0x4d, 0x94, 0x80, 0x74, 0x82, 0xfa, 0x14, 0x69, 0x4f, 0xca, 0x50, 0x62, 0xa1, 0x08, 0xb8, 0xca, 0x89, 0x99, 0x02, 0xe0, 0x7c, 0x6c, 0x0f, 0x9e, 0x56, 0xd0, 0x1a, 0xd8, 0x6c, 0x37, 0xb1, 0xfa, 0x59, 0xa1, 0xe9, 0x1a, 0x04, 0x6b, 0xa0, 0xc4, 0xba, 0x22, 0xc3, 0x0b, 0x7d, 0x86, 0x8f, 0x59, 0xda, 0x77, 0x32, 0x11, 0x2a, 0xf7, 0xa8, 0xa4, 0x3a, 0xf1, 0xe1, 0xca, 0xeb, 0x4f, 0x6a, 0x62, 0x73, 0xc7, 0xa3, 0x34, 0x5d, 0x59, 0xd6, 0xdf, 0xa6, 0xbd, 0xc9, 0x94, 0x3d, 0xef, 0x3d, 0x0e, 0xc7, 0x47, 0x0c, 0xc3, 0x14, 0x2d, 0x5b, 0x1b, 0x38, 0xeb, 0xe1, 0x4d, 0x88, 0xb6, 0xbf, 0x88, 0xb3, 0xde, 0x09, 0x4d, 0xed, 0xa2, 0xc5, 0xa7, 0x46, 0x30, 0x06, 0x0a, 0x55, 0x4c, 0x3c, 0x62, 0x40, 0x16, 0xa2, 0x2e, 0xe4, 0x6a, 0x17, 0x08, 0xa8, 0xb6, 0x40, 0x45, 0x5b, 0xa2, 0x59, 0x2e, 0xe1, 0x77, 0x68, 0xc4, 0xd4, 0xc1, 0x98, 0x99, 0xe2, 0x44, 0xb8, 0x1a, 0x99, 0x54, 0xce, 0xad, 0x76, 0x6a, 0xbd, 0xbb, 0x02, 0xa7, 0x64, 0x51, 0xeb, 0x48, 0xb1, 0x0c, 0x0e, 0x43, 0xbf, 0xc3, 0x30, 0x3e, 0x63, 0x38, 0x3d, 0x62, 0x9a, 0x4e, 0x18, 0xc7, 0x6f, 0x10, 0xc2, 0x04, 0xa5, 0x1c, 0x36, 0x1d, 0x99, 0x49, 0x69, 0xe5, 0xe0, 0x63, 0xd2, 0x73, 0x75, 0xfd, 0x8a, 0xf0, 0x06, 0x6c, 0xc5, 0x1b, 0xa8, 0xed, 0x6c, 0xc7, 0x48, 0x65, 0x2a, 0xa8, 0xa2, 0x3c, 0x8a, 0xe2, 0x3d, 0xb2, 0x5a, 0xad, 0xd3, 0x5e, 0x9b, 0xa6, 0x31, 0x05, 0x45, 0x4e, 0xce, 0xbf, 0xfb, 0xdd, 0xef, 0x66, 0x15, 0x31, 0xcf, 0xc1, 0x4f, 0xa7, 0x13, 0xa6, 0x69, 0xc2, 0xe3, 0xe3, 0x63, 0xc6, 0x54, 0x92, 0x9d, 0x44, 0x00, 0xd8, 0x6e, 0xb7, 0xa9, 0x4d, 0xce, 0x6d, 0xea, 0xdc, 0xa3, 0x42, 0xa7, 0x6a, 0x3d, 0x19, 0x56, 0xc5, 0xdf, 0x35, 0xc6, 0xe0, 0xee, 0xee, 0x2e, 0x81, 0xd6, 0xfa, 0xbe, 0x4f, 0x80, 0xb3, 0xbb, 0xbb, 0x3b, 0x5c, 0x5f, 0x5f, 0xe3, 0xe1, 0xe1, 0x5d, 0xaa, 0xa8, 0x39, 0xe9, 0x90, 0x58, 0x8d, 0x1f, 0xbc, 0xfa, 0x41, 0x6a, 0xb3, 0xb3, 0xb7, 0x3a, 0x57, 0xdb, 0x5c, 0x2c, 0xcc, 0xe7, 0x05, 0x22, 0xe5, 0x94, 0xb1, 0x28, 0x36, 0x56, 0xf5, 0x2c, 0xf7, 0xad, 0x12, 0x58, 0x8d, 0xbf, 0x1e, 0x1f, 0x9f, 0x48, 0xd7, 0xde, 0x3a, 0x38, 0x37, 0x26, 0x70, 0x1f, 0xa0, 0x60, 0x8c, 0x45, 0x30, 0x3a, 0xd3, 0x66, 0x91, 0x3e, 0x13, 0x24, 0xd9, 0xba, 0x4a, 0x67, 0x85, 0x1c, 0x55, 0x6d, 0x36, 0x5d, 0x1c, 0x93, 0xda, 0x84, 0x05, 0xa3, 0xa4, 0xa1, 0x9a, 0xf5, 0x00, 0x5c, 0xc0, 0x9f, 0xf8, 0xa5, 0xef, 0xe3, 0x74, 0x3a, 0xe1, 0x70, 0x38, 0x60, 0xbf, 0xdf, 0x47, 0x33, 0xa7, 0x8a, 0x0e, 0xc4, 0xc9, 0x0e, 0xb0, 0x4e, 0x9d, 0x05, 0x51, 0x46, 0x31, 0x9e, 0x51, 0xc3, 0xb4, 0x46, 0x65, 0x1a, 0xaa, 0x6a, 0x5c, 0x94, 0x25, 0xf5, 0x6a, 0x16, 0xa3, 0x09, 0xf3, 0xfc, 0x9c, 0xdc, 0xd7, 0x10, 0x5b, 0xd0, 0x00, 0x82, 0x85, 0x43, 0xa0, 0x6a, 0x21, 0xca, 0x66, 0xb2, 0x29, 0x8c, 0x04, 0xe7, 0x78, 0x53, 0xc8, 0x81, 0x1a, 0x8d, 0xba, 0x9a, 0x95, 0x7f, 0x28, 0x2b, 0x97, 0x01, 0x47, 0x25, 0x41, 0x19, 0xda, 0x54, 0xfa, 0x0c, 0x0b, 0x90, 0x65, 0xdc, 0x85, 0x21, 0x87, 0xc4, 0x0a, 0x94, 0x87, 0x5c, 0xa9, 0x60, 0x36, 0xab, 0x5f, 0x21, 0x1e, 0xce, 0x7c, 0x08, 0xcf, 0xa2, 0x36, 0xd6, 0x8d, 0x59, 0x65, 0x62, 0xb4, 0x89, 0x14, 0x15, 0xfa, 0x99, 0xaa, 0x6a, 0x0a, 0x90, 0x9e, 0x4b, 0x41, 0x9e, 0x03, 0x8e, 0xec, 0x20, 0xd0, 0xac, 0x78, 0x4e, 0x6c, 0xba, 0x4e, 0x2e, 0xc8, 0x10, 0x5f, 0xb3, 0xca, 0xe8, 0x43, 0xd3, 0x64, 0xb3, 0x36, 0x18, 0x27, 0x2c, 0x9c, 0xd4, 0x48, 0xa0, 0x1e, 0x1f, 0xf0, 0x29, 0x58, 0x16, 0x40, 0x40, 0x49, 0x45, 0x24, 0xa5, 0x3e, 0x9b, 0xf1, 0x53, 0x25, 0xa8, 0xae, 0xc4, 0x34, 0x2c, 0x1d, 0x8a, 0xa5, 0xb4, 0x66, 0x09, 0xa0, 0x63, 0xd4, 0x68, 0x08, 0x34, 0xeb, 0x2a, 0x51, 0xee, 0x73, 0x82, 0x11, 0x2b, 0x27, 0xad, 0x44, 0x40, 0x41, 0x3c, 0x44, 0xfc, 0x19, 0x28, 0xd2, 0xb9, 0x99, 0xad, 0xa1, 0x75, 0xde, 0x95, 0xa1, 0xd7, 0x66, 0x84, 0x7a, 0x13, 0xd7, 0x0c, 0x71, 0xaa, 0xc9, 0x4c, 0x42, 0xc5, 0x79, 0xdb, 0x09, 0xb5, 0xb2, 0xc9, 0xeb, 0x20, 0x44, 0xfd, 0x6d, 0xb6, 0x9c, 0x75, 0xce, 0xc1, 0x54, 0x5c, 0xf9, 0xd4, 0x51, 0xc3, 0x7d, 0x96, 0xaa, 0xac, 0xd0, 0x60, 0x72, 0x23, 0x14, 0x6a, 0x3a, 0xf0, 0xbd, 0x4e, 0xfc, 0x60, 0xee, 0xf6, 0x54, 0xb5, 0x86, 0x0a, 0x46, 0x70, 0x98, 0x67, 0xd9, 0x52, 0xad, 0x89, 0x96, 0x78, 0xe8, 0x1f, 0x71, 0xb3, 0xdd, 0xe2, 0xab, 0xaf, 0xbe, 0xc0, 0xaf, 0xbc, 0xde, 0xe0, 0xab, 0x2f, 0xdf, 0xe2, 0xfe, 0xea, 0x53, 0x8c, 0x76, 0x47, 0xef, 0xcd, 0x07, 0xb2, 0x9e, 0x2d, 0x29, 0x19, 0x89, 0x4c, 0xe2, 0x75, 0x5e, 0xd8, 0x99, 0xaa, 0x8c, 0x0d, 0x62, 0xed, 0x94, 0x25, 0xdd, 0xb3, 0xfe, 0x82, 0xc5, 0x38, 0x9e, 0x5e, 0xe4, 0x68, 0xa7, 0xf1, 0xc1, 0x42, 0xa2, 0x9d, 0xe6, 0xb0, 0x61, 0xe6, 0x70, 0xe7, 0x41, 0x27, 0xda, 0x42, 0x8e, 0xfb, 0x58, 0xfd, 0x2b, 0x18, 0x5d, 0xc1, 0x18, 0x0f, 0xa5, 0x6a, 0x34, 0x35, 0x05, 0x17, 0xeb, 0xfa, 0x59, 0xd1, 0x25, 0x54, 0x40, 0xa8, 0xe3, 0x97, 0x26, 0x15, 0xa0, 0xa8, 0x9d, 0x4e, 0x32, 0xba, 0x91, 0x62, 0xea, 0xa6, 0x78, 0x79, 0x23, 0x82, 0x77, 0x8b, 0x92, 0xce, 0x4b, 0xba, 0x09, 0x4b, 0x45, 0x07, 0xcf, 0x9b, 0x99, 0xcd, 0x32, 0x9c, 0x46, 0x28, 0x35, 0x25, 0x05, 0x31, 0x56, 0x45, 0xf3, 0x41, 0xa2, 0xe9, 0xe7, 0xf7, 0xd4, 0x38, 0xc1, 0x39, 0x60, 0x18, 0x4f, 0x18, 0xfa, 0x67, 0xec, 0x0f, 0xef, 0xd0, 0xf7, 0xef, 0x30, 0xda, 0x1d, 0x02, 0x46, 0xdc, 0x5d, 0x1b, 0x98, 0x5a, 0xa1, 0xae, 0x22, 0xe5, 0xcd, 0x4d, 0x98, 0xac, 0x25, 0x5b, 0xd1, 0xa0, 0xa1, 0x36, 0xc4, 0x5f, 0x1e, 0x7a, 0x6a, 0x03, 0x2b, 0xee, 0x14, 0x18, 0x3d, 0xdf, 0xb7, 0xe8, 0x1b, 0xee, 0xbd, 0x87, 0xa9, 0x14, 0xba, 0xae, 0x21, 0x4c, 0x08, 0x80, 0x43, 0xb4, 0xf7, 0xdd, 0x6e, 0xb7, 0x69, 0x86, 0xcc, 0xc1, 0x61, 0x9a, 0x26, 0xbc, 0x7f, 0xff, 0xfe, 0x0c, 0xd0, 0x2a, 0x9f, 0xe5, 0xed, 0xed, 0x7d, 0x1a, 0xe7, 0x95, 0x7e, 0xe5, 0x4a, 0x29, 0x3c, 0x3f, 0xef, 0x71, 0x3a, 0x8d, 0xa9, 0x5b, 0xc7, 0xed, 0x76, 0x3e, 0x6b, 0x8c, 0x31, 0x69, 0x6e, 0x2f, 0x47, 0xb4, 0xfc, 0xf5, 0xf8, 0xf8, 0x84, 0xcd, 0x66, 0x1d, 0x29, 0x5f, 0xaf, 0x52, 0x57, 0xef, 0xfd, 0xfb, 0xf7, 0xf8, 0xfa, 0xeb, 0xaf, 0xf1, 0xfa, 0xf5, 0x87, 0x67, 0x9f, 0x8f, 0x3b, 0x5d, 0x21, 0x84, 0x64, 0x59, 0x1a, 0x42, 0x48, 0x1a, 0xeb, 0x14, 0x30, 0x49, 0xa1, 0xf1, 0xcd, 0x9b, 0x37, 0x67, 0x66, 0x38, 0x7c, 0x6e, 0x32, 0xfe, 0x88, 0xbb, 0x81, 0xd2, 0xc5, 0x93, 0xef, 0x03, 0x1b, 0x15, 0xf1, 0x7c, 0x9c, 0x71, 0x60, 0x5c, 0x95, 0xd7, 0xd5, 0x2a, 0xc6, 0x16, 0xc2, 0x7b, 0xf1, 0x9a, 0x6a, 0xdb, 0x0a, 0x55, 0xd5, 0xe0, 0x70, 0x78, 0x42, 0x55, 0xd5, 0xb3, 0x34, 0x6d, 0x6b, 0x32, 0x05, 0x45, 0xef, 0x91, 0xb0, 0x6d, 0x84, 0x85, 0xea, 0x04, 0x5b, 0xc5, 0xe3, 0x70, 0x7c, 0xc6, 0x6e, 0xf7, 0x8c, 0xe7, 0xe7, 0xe7, 0xa8, 0x0a, 0xda, 0xa0, 0x2a, 0x75, 0xce, 0xcb, 0x6a, 0x52, 0x06, 0xc2, 0xd2, 0x9c, 0x80, 0xb3, 0xa6, 0x84, 0x6a, 0xd5, 0x97, 0xfd, 0xc9, 0x17, 0x95, 0xa2, 0xd8, 0xb5, 0x4b, 0x00, 0xc0, 0x96, 0x1c, 0xc6, 0x96, 0x94, 0xc4, 0x24, 0x28, 0xee, 0xd2, 0x97, 0x4e, 0xbc, 0x7a, 0x9d, 0x1c, 0xad, 0x64, 0xdb, 0xdd, 0x85, 0x9c, 0xbe, 0xc5, 0x87, 0x0d, 0xff, 0x7f, 0x06, 0x10, 0x13, 0x1d, 0x82, 0xf9, 0xf5, 0x67, 0x1e, 0xa0, 0x04, 0x8b, 0x94, 0xae, 0x40, 0x79, 0xf0, 0x91, 0x15, 0xd0, 0x79, 0xd5, 0xb3, 0xe4, 0x8c, 0xc4, 0x87, 0xaa, 0x44, 0x93, 0x67, 0xad, 0xf1, 0x42, 0x96, 0x93, 0x03, 0xba, 0x1c, 0x69, 0xc8, 0x19, 0xb7, 0xf4, 0x14, 0x96, 0x73, 0xaf, 0x33, 0x70, 0x54, 0xd0, 0xe7, 0xea, 0x58, 0x12, 0xaf, 0x60, 0x83, 0x08, 0x8c, 0xe7, 0x2e, 0x64, 0x12, 0x54, 0xb4, 0x74, 0xf0, 0x5b, 0xeb, 0x5e, 0xec, 0xca, 0xc8, 0xb5, 0x55, 0xea, 0x2c, 0x93, 0x1d, 0x2f, 0xbb, 0xcb, 0xcd, 0x1e, 0xcd, 0xfc, 0x33, 0xd3, 0x94, 0xaf, 0xb7, 0x65, 0xe9, 0x62, 0x53, 0xb8, 0xcb, 0xa9, 0xd4, 0x9e, 0x4d, 0x0a, 0x7d, 0xb1, 0x3a, 0xe6, 0xbf, 0xa3, 0x91, 0x88, 0x83, 0xeb, 0x43, 0x4a, 0x16, 0x48, 0x7a, 0x36, 0xe2, 0x01, 0x24, 0xe3, 0xc3, 0x05, 0x00, 0x6d, 0x96, 0x54, 0xb2, 0x64, 0x70, 0x5a, 0xfb, 0xb0, 0x50, 0x4a, 0xea, 0x29, 0xcc, 0xea, 0x74, 0x73, 0xf7, 0x43, 0x31, 0xbb, 0x39, 0x8a, 0x8c, 0xd0, 0x68, 0xc9, 0x5a, 0x4b, 0x16, 0x8e, 0x07, 0x8b, 0xab, 0xab, 0x2b, 0x7c, 0xf6, 0xd9, 0x3f, 0xc1, 0xeb, 0x8f, 0x3e, 0x4d, 0xda, 0xde, 0x01, 0xb3, 0x95, 0xaa, 0xd1, 0x51, 0xa7, 0xdb, 0xcd, 0x33, 0xf5, 0x32, 0x81, 0x2d, 0x47, 0x18, 0x72, 0x2f, 0x94, 0xd2, 0xb1, 0x94, 0x50, 0xae, 0xb3, 0xbd, 0x5b, 0x8a, 0x0b, 0x21, 0xa8, 0x45, 0xcb, 0xd1, 0x84, 0x80, 0xae, 0xba, 0xc4, 0x6d, 0xa3, 0xef, 0x11, 0xdf, 0x9f, 0x3d, 0x22, 0x68, 0xce, 0x69, 0x84, 0xbf, 0x7d, 0x0d, 0x67, 0x03, 0xd1, 0x35, 0x3d, 0x61, 0x6b, 0xec, 0x64, 0x50, 0x57, 0xab, 0x54, 0x05, 0x2b, 0xd4, 0x08, 0x21, 0x82, 0xcc, 0x8c, 0x8f, 0xa3, 0xaa, 0x28, 0x0b, 0x0b, 0x4b, 0x09, 0x93, 0x47, 0xa4, 0xe9, 0xda, 0x8b, 0xed, 0xf6, 0xa5, 0x33, 0xac, 0xa4, 0xe8, 0x8d, 0x71, 0xee, 0x6c, 0x4c, 0xa4, 0x2f, 0x06, 0x36, 0xb2, 0xa2, 0xbd, 0xe9, 0xb2, 0xce, 0x97, 0x17, 0x38, 0x9a, 0x78, 0x7f, 0xc3, 0x03, 0xa1, 0xa8, 0x4f, 0x7b, 0xf4, 0xa7, 0x67, 0x8c, 0xc3, 0x33, 0xb4, 0x39, 0x62, 0xbb, 0x72, 0x68, 0x2a, 0x03, 0xa3, 0x1d, 0x8c, 0x0a, 0x70, 0x53, 0x6c, 0x73, 0x8f, 0x13, 0x94, 0xaa, 0xb0, 0x6a, 0xd7, 0xe8, 0xda, 0x35, 0x8e, 0xfd, 0x73, 0x54, 0x45, 0xb4, 0x34, 0x4e, 0x08, 0x73, 0x67, 0x49, 0x29, 0x83, 0xc3, 0x61, 0x1f, 0xc7, 0x6e, 0x01, 0xe3, 0x74, 0x84, 0x73, 0x36, 0xae, 0x5f, 0x4a, 0xc4, 0xaf, 0xae, 0x5f, 0x25, 0xc4, 0xb8, 0xbc, 0x46, 0x19, 0x6c, 0x19, 0xe5, 0x2e, 0x75, 0xde, 0x13, 0x9a, 0x7d, 0xda, 0x27, 0x8d, 0x07, 0x06, 0x82, 0x49, 0x60, 0xb5, 0xac, 0x98, 0xd9, 0x98, 0x84, 0x29, 0x65, 0x55, 0x55, 0xe1, 0x8b, 0x2f, 0xbe, 0xc0, 0x38, 0x4e, 0x99, 0x16, 0x83, 0xdc, 0xff, 0xbf, 0xfc, 0xcb, 0xbf, 0x94, 0x31, 0x5a, 0xb8, 0xab, 0x74, 0x75, 0x75, 0x15, 0xdb, 0xf0, 0x88, 0xb4, 0x2e, 0x6a, 0xbb, 0x73, 0x11, 0x90, 0xe6, 0xd4, 0xb0, 0xe9, 0xff, 0x39, 0x80, 0x33, 0x00, 0xad, 0x69, 0x1a, 0xdc, 0xdd, 0xdd, 0xa7, 0x8a, 0x77, 0x96, 0x34, 0x6e, 0x60, 0x4c, 0x15, 0x2b, 0xf9, 0x41, 0x68, 0x87, 0x84, 0x34, 0x36, 0xa3, 0xfd, 0xeb, 0xcf, 0x2c, 0x9c, 0x25, 0x60, 0x4f, 0x9e, 0xb5, 0x8c, 0x42, 0xe7, 0x6e, 0x01, 0xff, 0x3c, 0xdd, 0x27, 0x2d, 0xc6, 0x69, 0x2a, 0x03, 0xc1, 0x35, 0xcd, 0xcc, 0x8b, 0x27, 0xd0, 0xb3, 0x4b, 0x00, 0x72, 0xef, 0x02, 0xea, 0x46, 0x67, 0x05, 0xa9, 0xd6, 0x1a, 0x15, 0x8b, 0x07, 0x48, 0x39, 0x4d, 0xae, 0x42, 0xe8, 0xc6, 0x52, 0xc5, 0x40, 0x87, 0x5a, 0x15, 0xe7, 0x7e, 0x54, 0xe5, 0x4c, 0x2e, 0x08, 0xa1, 0x99, 0xb9, 0x35, 0x31, 0xab, 0x73, 0xd1, 0x22, 0x96, 0x6a, 0x3a, 0xd4, 0xf6, 0x40, 0x92, 0x38, 0xa4, 0x79, 0x81, 0x3c, 0xec, 0x90, 0x01, 0x4b, 0xe6, 0x1b, 0xaa, 0x23, 0x64, 0x9f, 0xcd, 0x49, 0x70, 0x51, 0x5d, 0x2e, 0x49, 0xd1, 0x06, 0x9c, 0x29, 0xa1, 0x65, 0xf3, 0xa2, 0x29, 0xd7, 0x4b, 0x97, 0x2d, 0xe9, 0xd2, 0x3a, 0x93, 0x83, 0x8b, 0xa4, 0xa7, 0x49, 0x14, 0xbf, 0xfc, 0xbc, 0x73, 0x6b, 0x51, 0x80, 0x5e, 0x32, 0x1e, 0xbc, 0x8f, 0xca, 0x46, 0xa7, 0x22, 0x88, 0x72, 0x50, 0xae, 0x50, 0xd7, 0x55, 0x9a, 0x73, 0xcf, 0x41, 0x3e, 0xa4, 0xc3, 0x42, 0x6b, 0x8d, 0xe1, 0xe4, 0xa1, 0x2a, 0x3a, 0xdc, 0x35, 0x1b, 0x54, 0x44, 0x3d, 0x01, 0xe7, 0x43, 0x9a, 0x5b, 0x19, 0x3d, 0x7f, 0x3e, 0xeb, 0xe8, 0x30, 0x24, 0xf0, 0x8d, 0x3f, 0x33, 0xcd, 0x91, 0xc0, 0x13, 0xae, 0xe6, 0x96, 0x44, 0x37, 0xa4, 0x94, 0xaf, 0x94, 0xf4, 0x2d, 0xa5, 0x68, 0x97, 0xbc, 0x9e, 0x67, 0x61, 0x19, 0x7f, 0x46, 0xd3, 0x5b, 0x42, 0x55, 0x97, 0x1a, 0xf0, 0xb2, 0x53, 0xc0, 0x7c, 0x72, 0x96, 0xbf, 0x94, 0x00, 0x3d, 0x46, 0x8c, 0x96, 0xf3, 0x73, 0x56, 0x28, 0xd3, 0x26, 0x07, 0x69, 0xd1, 0xbd, 0x44, 0x66, 0x42, 0x44, 0x9d, 0x95, 0x2a, 0x06, 0x0c, 0x85, 0x8f, 0xd7, 0x5f, 0xd0, 0x05, 0x6d, 0x01, 0xe0, 0x90, 0xdd, 0x93, 0x8f, 0xf6, 0xbb, 0x65, 0x74, 0x95, 0x07, 0x7e, 0x3f, 0x7c, 0x83, 0x51, 0xfd, 0x69, 0x34, 0x4d, 0x9d, 0xc6, 0x39, 0xdc, 0x71, 0x51, 0xa0, 0xd6, 0x3a, 0xcb, 0xfa, 0x32, 0xf7, 0x3d, 0x84, 0x63, 0xc4, 0x84, 0x84, 0x45, 0x9d, 0x04, 0x6e, 0xa1, 0x0e, 0xc3, 0x80, 0x57, 0xaf, 0x5e, 0xe1, 0xf7, 0x7e, 0xf2, 0x0e, 0xaf, 0x3f, 0xfa, 0x94, 0x78, 0xb5, 0x35, 0x05, 0xec, 0x86, 0x47, 0x44, 0x86, 0xdb, 0xeb, 0xf3, 0x7d, 0x0b, 0xce, 0xcf, 0x80, 0x42, 0x35, 0x53, 0x47, 0x7f, 0xad, 0xff, 0x09, 0x7e, 0xeb, 0xfe, 0x1e, 0x7f, 0xef, 0xf1, 0x2a, 0x7e, 0x0e, 0x4e, 0xbc, 0x4d, 0x4a, 0x7c, 0x88, 0xbf, 0x5c, 0x67, 0x7b, 0xbb, 0xf4, 0x75, 0x5e, 0x6a, 0xe3, 0x2f, 0x27, 0xfc, 0x64, 0x6a, 0x63, 0xad, 0x8b, 0x7b, 0xc0, 0x27, 0xac, 0x42, 0xd7, 0x69, 0x8c, 0xa3, 0xc5, 0x04, 0x87, 0xca, 0x74, 0x18, 0xec, 0x88, 0xe0, 0x09, 0x28, 0xf4, 0x61, 0xfd, 0x0e, 0x7f, 0xee, 0x87, 0x1f, 0xe0, 0x7f, 0xff, 0x59, 0x94, 0xd8, 0x75, 0x8e, 0x24, 0x5f, 0xc3, 0x8c, 0xff, 0x60, 0x55, 0x35, 0x28, 0x91, 0x2c, 0x7a, 0x15, 0x45, 0x5a, 0x70, 0x31, 0xe1, 0x5c, 0x92, 0xae, 0x2d, 0x83, 0x7f, 0xaa, 0x28, 0x95, 0x89, 0xa0, 0xc3, 0xb9, 0x30, 0xa0, 0x2e, 0xe2, 0x98, 0xe9, 0xb8, 0x87, 0x38, 0xdb, 0x9e, 0xb5, 0xd0, 0xbf, 0xa4, 0x40, 0x3d, 0x91, 0x46, 0xc1, 0x66, 0xe3, 0xd1, 0xb4, 0x35, 0x74, 0x05, 0x68, 0x65, 0x31, 0xec, 0x2d, 0x5c, 0x88, 0x6a, 0x64, 0xd6, 0x41, 0x83, 0xba, 0xa2, 0xad, 0x59, 0xa3, 0xd1, 0x2b, 0x4c, 0x7a, 0x40, 0xd3, 0x18, 0xa8, 0xae, 0x25, 0x9d, 0xfa, 0x81, 0x28, 0x56, 0x44, 0xef, 0x72, 0xb8, 0xff, 0xe0, 0x1e, 0x5d, 0x47, 0x01, 0xfd, 0x34, 0x28, 0x8c, 0xd3, 0x11, 0x80, 0x85, 0xf3, 0x44, 0xb2, 0xdb, 0xac, 0xaf, 0xa8, 0x92, 0x7e, 0xda, 0x27, 0x45, 0xb6, 0xba, 0xae, 0xf1, 0xea, 0xd5, 0x2b, 0xbc, 0x7a, 0xf5, 0x0a, 0x8f, 0x8f, 0x8f, 0xd9, 0x1e, 0x67, 0x4f, 0xee, 0xfe, 0xb8, 0xc7, 0xe1, 0x70, 0xc0, 0xeb, 0xd7, 0x9f, 0xa6, 0xd9, 0xae, 0x31, 0x23, 0xb4, 0xae, 0xb0, 0xdd, 0x6e, 0xcf, 0xf8, 0xeb, 0x73, 0x75, 0xab, 0xe0, 0xdc, 0x88, 0xc3, 0xa1, 0x4f, 0xf6, 0xd1, 0x1c, 0xf4, 0xae, 0xae, 0xae, 0x12, 0x1b, 0x87, 0x81, 0xb1, 0x87, 0xc3, 0x21, 0x43, 0x70, 0x33, 0x20, 0x8d, 0xcd, 0x5c, 0xda, 0x96, 0x3e, 0x17, 0x9b, 0xb8, 0x70, 0xa5, 0xcc, 0x81, 0xf3, 0xd5, 0x07, 0xb7, 0x68, 0x9a, 0x26, 0xa1, 0xf5, 0x65, 0xc0, 0xdd, 0x6e, 0xb7, 0x08, 0x01, 0x99, 0xd7, 0x3a, 0xcf, 0xea, 0xf9, 0x3c, 0x62, 0x25, 0xba, 0x52, 0xa1, 0x4e, 0xda, 0xf7, 0xf2, 0xd7, 0x38, 0xd8, 0x6c, 0xfc, 0x49, 0x32, 0xb9, 0x1a, 0x57, 0x57, 0x2e, 0xd1, 0xfb, 0x48, 0x59, 0x74, 0xc6, 0x60, 0x6d, 0xb6, 0xb3, 0xee, 0x88, 0x73, 0x0e, 0xce, 0xe6, 0x86, 0x5a, 0x87, 0xc3, 0x2e, 0x9e, 0xab, 0x26, 0xe9, 0x9a, 0xc8, 0x73, 0xfa, 0x78, 0xdc, 0x01, 0xf0, 0xb8, 0xb9, 0x21, 0xab, 0xd6, 0x08, 0x10, 0xac, 0xce, 0xaa, 0x66, 0x59, 0x91, 0x97, 0x32, 0xad, 0xdc, 0x92, 0x20, 0xda, 0x96, 0x39, 0x43, 0x5f, 0x4b, 0xd4, 0xa3, 0x44, 0xcd, 0x4b, 0x34, 0xb9, 0xac, 0x84, 0x4b, 0x13, 0x10, 0xd9, 0x4e, 0x95, 0x33, 0x6d, 0x49, 0x17, 0x9b, 0xab, 0xe4, 0xf3, 0x19, 0x3b, 0x7d, 0x2f, 0x44, 0xd9, 0x54, 0xbf, 0x28, 0x3c, 0x93, 0x3e, 0x6f, 0xa5, 0x84, 0xbd, 0xeb, 0x8c, 0x1e, 0x94, 0x34, 0x24, 0xf9, 0xde, 0xfc, 0xbe, 0x9c, 0x85, 0xf6, 0x3d, 0x09, 0x3f, 0x18, 0xa3, 0xe1, 0x3c, 0xa0, 0x9c, 0x68, 0xd7, 0x6b, 0x05, 0xad, 0xea, 0x33, 0x5f, 0xf6, 0x92, 0xb7, 0x7b, 0xa9, 0x42, 0x9f, 0x93, 0x1f, 0x9f, 0xbd, 0x37, 0xdf, 0x13, 0x89, 0xa6, 0x96, 0x1b, 0x67, 0x69, 0x8e, 0xbf, 0xd4, 0x15, 0x09, 0x21, 0x60, 0x9c, 0xc6, 0x33, 0x15, 0x40, 0x46, 0x11, 0x93, 0x2d, 0xa6, 0x7f, 0x91, 0xb6, 0x06, 0x95, 0xa3, 0xc6, 0xb9, 0xfd, 0xc4, 0xcf, 0x56, 0x56, 0x6d, 0xa5, 0xf9, 0x8b, 0x73, 0x0e, 0xab, 0xb6, 0xc9, 0x3a, 0x1f, 0x97, 0xe4, 0x7d, 0x65, 0xc6, 0x2b, 0xa9, 0x83, 0x21, 0x05, 0xf9, 0xf8, 0x19, 0x63, 0x60, 0x67, 0x29, 0x45, 0x42, 0xc9, 0x6a, 0xfc, 0xfc, 0x47, 0x7f, 0x1f, 0x7f, 0xee, 0x77, 0xfe, 0x1a, 0x86, 0xfd, 0xd7, 0x78, 0xd7, 0x7f, 0x0a, 0x63, 0x74, 0xd2, 0x58, 0x9f, 0xd5, 0x11, 0xa5, 0x02, 0x9d, 0xa4, 0x56, 0x1a, 0xfc, 0xf4, 0x9f, 0xfe, 0x37, 0xf8, 0x5b, 0xff, 0xe1, 0x7f, 0x84, 0x0f, 0x3f, 0x7a, 0x8d, 0xa7, 0xf7, 0xe4, 0xc1, 0x5c, 0xb7, 0xb9, 0x13, 0xdf, 0x34, 0x38, 0x8c, 0x76, 0xc0, 0x1f, 0x57, 0xcf, 0x78, 0x7c, 0xfb, 0x44, 0xd7, 0xfd, 0xd9, 0x37, 0xf8, 0xf8, 0x17, 0x5f, 0x22, 0xec, 0x9e, 0xf0, 0x17, 0x00, 0xfc, 0xcf, 0xaf, 0x7f, 0x81, 0x7f, 0x82, 0x5f, 0x8b, 0x4e, 0x86, 0x93, 0x68, 0x4b, 0x93, 0xcc, 0x6e, 0x0e, 0xbe, 0x52, 0xf0, 0xc1, 0x40, 0xe9, 0x59, 0x10, 0x47, 0x29, 0x0d, 0xad, 0x58, 0x55, 0x4c, 0xe3, 0xea, 0xea, 0x0a, 0x9f, 0x7f, 0xf1, 0x63, 0x7c, 0xe7, 0xa3, 0x7f, 0x19, 0x4f, 0x4f, 0x4f, 0xf8, 0xde, 0xf7, 0xbe, 0x87, 0x1f, 0xff, 0xf8, 0xc7, 0xf8, 0xa5, 0xef, 0xfd, 0x2b, 0xc4, 0x55, 0x8e, 0x87, 0x28, 0x3f, 0x9f, 0x7f, 0x67, 0xf3, 0x13, 0x60, 0x23, 0x3f, 0xf5, 0x71, 0x39, 0x5a, 0xad, 0xee, 0xd3, 0xa1, 0x2a, 0xbb, 0x57, 0xb2, 0x03, 0x24, 0x15, 0xf8, 0x4a, 0x35, 0xc1, 0x59, 0x05, 0x52, 0xbd, 0x88, 0x27, 0xa1, 0x73, 0x25, 0x26, 0x17, 0xf1, 0xd9, 0x05, 0xaf, 0xf0, 0xeb, 0xdf, 0x35, 0xb8, 0xab, 0x2d, 0xb0, 0xfd, 0x08, 0x0f, 0x0f, 0x4f, 0x78, 0xf3, 0xa8, 0xb1, 0x69, 0x8e, 0x58, 0xaf, 0xe9, 0x59, 0xdd, 0xd5, 0x13, 0xb0, 0xbd, 0xc6, 0xe7, 0x9f, 0x6f, 0xe7, 0x99, 0x69, 0x04, 0xc4, 0xf1, 0xe1, 0xa7, 0xb5, 0xa1, 0x9a, 0x58, 0x20, 0xfc, 0x91, 0x94, 0xfc, 0x4c, 0xb6, 0x6f, 0x2e, 0x99, 0x33, 0x9d, 0x29, 0x1b, 0x16, 0x09, 0x49, 0x13, 0x03, 0xcd, 0x9c, 0xc4, 0x18, 0x21, 0xde, 0xe4, 0xa3, 0x0d, 0xae, 0x49, 0x23, 0x92, 0xd9, 0x6f, 0x3b, 0x52, 0x4c, 0x4f, 0xef, 0xa2, 0xae, 0xc1, 0x84, 0xae, 0xd1, 0xd0, 0x46, 0x23, 0x84, 0x09, 0x87, 0xfd, 0x13, 0x8e, 0xfd, 0x33, 0xee, 0xb6, 0xf7, 0x30, 0x30, 0xa8, 0xb4, 0x41, 0x5b, 0x6b, 0x68, 0x6f, 0xc8, 0x02, 0x77, 0x74, 0x18, 0x4e, 0x47, 0x3c, 0xb8, 0x6f, 0xe8, 0xac, 0x50, 0x15, 0x14, 0x34, 0x0c, 0x0c, 0x8c, 0x69, 0x63, 0x40, 0xad, 0xe0, 0xfc, 0x84, 0x10, 0x6a, 0x68, 0x23, 0x80, 0x73, 0xab, 0x1a, 0xc6, 0x04, 0x38, 0x3f, 0xe1, 0xab, 0x5f, 0xbc, 0xc7, 0xcd, 0xcd, 0x4d, 0xf2, 0xee, 0x66, 0x84, 0xf6, 0x30, 0x0c, 0x09, 0x90, 0x26, 0xdd, 0xd3, 0x38, 0xf0, 0xb2, 0x02, 0xdc, 0xf1, 0x38, 0x66, 0x34, 0x64, 0x63, 0x0c, 0xee, 0xef, 0xef, 0x71, 0x7b, 0x7b, 0x8b, 0xba, 0xae, 0xd1, 0xf7, 0x7d, 0x21, 0xc4, 0x43, 0x74, 0x56, 0xa6, 0x9e, 0x72, 0x61, 0xc3, 0x40, 0x2f, 0xb9, 0x76, 0xea, 0xba, 0xc6, 0xdd, 0xdd, 0x9d, 0xd0, 0x4d, 0x3f, 0xa6, 0xa0, 0xcd, 0xc1, 0xd9, 0x46, 0x09, 0x66, 0xae, 0x5a, 0x79, 0x86, 0xcd, 0x7f, 0x3f, 0x8e, 0x63, 0x42, 0xd6, 0x33, 0xe5, 0x6c, 0xbf, 0xdf, 0x13, 0x47, 0xfc, 0x70, 0xc0, 0x77, 0xbe, 0xf3, 0xe9, 0x99, 0x92, 0xa9, 0x2c, 0xde, 0x18, 0x65, 0x5f, 0x82, 0x82, 0x39, 0x61, 0x08, 0x5e, 0x65, 0x01, 0x5c, 0x76, 0xb4, 0x4a, 0x4c, 0x95, 0x54, 0xe4, 0xe4, 0xaf, 0xe7, 0x2f, 0xdf, 0xa0, 0xaa, 0x66, 0x97, 0xbb, 0xe0, 0xf3, 0x4e, 0x10, 0x53, 0xe5, 0xda, 0x76, 0x15, 0x8b, 0x4c, 0x21, 0x51, 0xae, 0x90, 0xc6, 0x1c, 0x1c, 0x2b, 0x8d, 0x31, 0x50, 0xff, 0xc6, 0xbf, 0xfd, 0xb7, 0x83, 0xcc, 0xa6, 0xb8, 0x0a, 0x2d, 0x67, 0xcb, 0xfc, 0xbd, 0xcc, 0x5e, 0x2e, 0xb8, 0x45, 0x1e, 0xa2, 0x9c, 0x95, 0x2d, 0x65, 0xe5, 0xfc, 0xbd, 0xeb, 0x48, 0x25, 0x28, 0x5b, 0xe5, 0x29, 0x03, 0xae, 0xba, 0x45, 0x84, 0x7a, 0x12, 0x3e, 0x89, 0x20, 0x1c, 0xf9, 0xd9, 0xa5, 0x7b, 0x50, 0xd7, 0x6e, 0x16, 0x39, 0xe0, 0x33, 0xca, 0xd6, 0x2c, 0x3a, 0x7c, 0xc9, 0x0c, 0xbc, 0x0c, 0xa8, 0xf2, 0x86, 0x0f, 0x63, 0x9f, 0x92, 0x00, 0x9e, 0xa9, 0x95, 0xe0, 0x2d, 0xf9, 0xbb, 0x65, 0x42, 0x61, 0x27, 0x95, 0x09, 0xea, 0xc8, 0xe7, 0x20, 0x67, 0xc8, 0xa5, 0xee, 0x7a, 0xba, 0x8f, 0x02, 0xb0, 0x24, 0x93, 0x01, 0x09, 0x6c, 0x91, 0x80, 0x0c, 0xf9, 0x3c, 0xb9, 0x3d, 0x56, 0xf2, 0x3f, 0xcb, 0xac, 0xba, 0x04, 0xba, 0xc8, 0xeb, 0xb3, 0xae, 0x8f, 0xbc, 0xd6, 0x2a, 0x75, 0x57, 0xac, 0xb5, 0xb0, 0x93, 0xcb, 0x68, 0x71, 0xec, 0x34, 0x46, 0x9e, 0xe2, 0xac, 0x53, 0xa0, 0x61, 0xaa, 0xcd, 0x99, 0x20, 0x8f, 0xdc, 0x1c, 0x25, 0x27, 0xba, 0xbc, 0x4f, 0xc7, 0xfd, 0x2e, 0x03, 0x31, 0x66, 0xe2, 0x26, 0xd3, 0xcf, 0xd1, 0xb4, 0xdf, 0x4f, 0xf7, 0xea, 0x3b, 0xaf, 0x8f, 0xf8, 0xd1, 0xff, 0xfd, 0x0f, 0x71, 0xf5, 0xfa, 0xdf, 0x4d, 0xaf, 0xd5, 0x8f, 0x87, 0x33, 0xd0, 0xa7, 0x5c, 0x6b, 0x7d, 0xbf, 0xc3, 0x6f, 0x7c, 0x7f, 0xc0, 0x6f, 0xfc, 0xf0, 0x87, 0xf1, 0x00, 0x6f, 0x53, 0x20, 0x9f, 0x06, 0x77, 0x16, 0xd4, 0xcb, 0x7f, 0xa6, 0x61, 0x4e, 0x52, 0x56, 0x5f, 0xff, 0x21, 0x00, 0xe0, 0xb3, 0xe3, 0x80, 0xff, 0xe5, 0x27, 0xf4, 0x5c, 0xb5, 0x6f, 0x92, 0xf5, 0xe1, 0x3c, 0x2a, 0x20, 0xfe, 0xab, 0x34, 0xec, 0x59, 0x12, 0x37, 0xa2, 0x07, 0x86, 0x45, 0x05, 0x36, 0xfe, 0xda, 0x6c, 0xba, 0xb4, 0xfe, 0x7e, 0x73, 0xfc, 0x03, 0xfc, 0xc5, 0xe3, 0x80, 0xaf, 0xbe, 0xfb, 0x09, 0x00, 0xe0, 0xe3, 0x5f, 0x7c, 0x99, 0xfd, 0xb7, 0xfc, 0xe7, 0xab, 0xef, 0x7e, 0x82, 0x7f, 0xf0, 0xf4, 0x2a, 0x9b, 0x9d, 0x2f, 0xd9, 0xa8, 0xca, 0x31, 0x93, 0x5c, 0x5b, 0x12, 0x10, 0x59, 0xb2, 0x44, 0xb2, 0x2e, 0x4b, 0xc8, 0x67, 0xd4, 0x5a, 0x6b, 0xd8, 0xa7, 0xdf, 0xc7, 0xa7, 0x1f, 0xdf, 0xe2, 0x2f, 0xfd, 0xe5, 0x7f, 0x0b, 0xbf, 0xf1, 0x83, 0x5f, 0xc7, 0x3f, 0xfc, 0x9f, 0xfe, 0x47, 0x7c, 0xfe, 0xf9, 0xe7, 0x00, 0x80, 0xdf, 0xff, 0xc3, 0x1d, 0x5e, 0x6d, 0x7b, 0x34, 0xcd, 0x35, 0x7e, 0xf3, 0x4f, 0xdc, 0xe2, 0xf6, 0x7b, 0x3f, 0xc0, 0x7f, 0xf1, 0x9f, 0xff, 0xa7, 0xf8, 0xc1, 0x6f, 0xfd, 0x0d, 0x51, 0x89, 0xcf, 0xc8, 0xf2, 0x2a, 0xa8, 0x2c, 0x59, 0x2d, 0x15, 0x17, 0x75, 0x76, 0x6f, 0xcf, 0xbd, 0x1a, 0x2a, 0xdd, 0xc2, 0xfa, 0x88, 0x63, 0x81, 0x23, 0xbb, 0x60, 0x1d, 0xf1, 0x2d, 0xce, 0xa1, 0x36, 0xdf, 0x03, 0x3c, 0xa9, 0x07, 0x1a, 0x4c, 0x30, 0x6a, 0x82, 0xd6, 0x23, 0x94, 0x1a, 0xa0, 0xc2, 0x88, 0x4a, 0x8d, 0x08, 0xde, 0xc2, 0x4e, 0x47, 0xd8, 0x71, 0x8f, 0x71, 0x7c, 0x86, 0x1b, 0x0f, 0xb0, 0xae, 0x87, 0xb7, 0x13, 0x50, 0x3b, 0x21, 0x5e, 0x32, 0xa4, 0xf1, 0xc8, 0x38, 0x8e, 0x89, 0x86, 0x28, 0x91, 0xdb, 0xac, 0x29, 0x31, 0x8f, 0x43, 0x02, 0xf6, 0xfb, 0x7d, 0x02, 0x7c, 0xdd, 0xdd, 0xdd, 0x25, 0x2a, 0x2c, 0x27, 0xbf, 0xbb, 0xdd, 0x2e, 0x09, 0xad, 0xac, 0x56, 0xab, 0x14, 0xbc, 0xeb, 0xba, 0xc6, 0xe3, 0x27, 0x03, 0xbd, 0xbf, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xe3, 0x3e, 0xf2, 0xb9, 0x87, 0xe4, 0x42, 0xc6, 0xfe, 0xf6, 0xe3, 0x38, 0xe2, 0x93, 0x4f, 0x3e, 0xc9, 0x46, 0x85, 0x1c, 0xc8, 0xda, 0x96, 0x92, 0x86, 0xa7, 0xe7, 0x37, 0xe4, 0x12, 0x16, 0xe7, 0xcc, 0x7c, 0x8e, 0xf0, 0x99, 0xfe, 0xee, 0xed, 0x53, 0xac, 0xa4, 0xdb, 0x04, 0x70, 0xd5, 0x5a, 0xe3, 0x70, 0x38, 0xe0, 0xe9, 0xe9, 0x29, 0x01, 0xda, 0xa4, 0x8a, 0xa5, 0xa4, 0x8d, 0x36, 0x4d, 0x93, 0xe9, 0x90, 0x94, 0x7a, 0x00, 0xd6, 0x52, 0x4c, 0xda, 0x6e, 0xb7, 0xb8, 0xb9, 0xb9, 0x89, 0x7b, 0xb6, 0x4f, 0xa2, 0x5e, 0xd4, 0xa1, 0x33, 0x09, 0x64, 0x39, 0x4d, 0x43, 0xd4, 0x4f, 0x21, 0x3d, 0xfa, 0xfd, 0xee, 0x98, 0xe9, 0x88, 0x78, 0xef, 0x13, 0xc2, 0x7f, 0x1c, 0xc7, 0x54, 0xd9, 0xf3, 0x78, 0x52, 0x82, 0x90, 0x67, 0xea, 0xd9, 0x3e, 0x51, 0x2b, 0xb9, 0xc3, 0x20, 0xbb, 0xbe, 0xfc, 0x73, 0x4c, 0x0b, 0x5c, 0xaf, 0xd7, 0xb8, 0xba, 0xba, 0x42, 0xd7, 0x75, 0x38, 0x0d, 0x24, 0x3d, 0x3b, 0x8e, 0x23, 0xde, 0xbd, 0x23, 0x05, 0x39, 0x7e, 0x4f, 0x92, 0x7a, 0xd5, 0xc9, 0xcf, 0x82, 0x69, 0xbb, 0x8c, 0xb4, 0xa7, 0xcf, 0x32, 0x24, 0x57, 0x38, 0xfe, 0x1d, 0xf3, 0x4b, 0xbf, 0xf2, 0x67, 0xfe, 0x93, 0x12, 0xc0, 0xc4, 0x17, 0xc1, 0x3f, 0xc8, 0x55, 0xbc, 0x44, 0x3c, 0x52, 0xab, 0x09, 0x99, 0xcb, 0x4e, 0x19, 0xc0, 0xf9, 0x41, 0xc8, 0xcd, 0xc4, 0xaf, 0x57, 0x55, 0x64, 0x87, 0x48, 0x87, 0x82, 0xcf, 0xaa, 0x6e, 0x6e, 0xe3, 0x77, 0xed, 0x6a, 0x51, 0x7e, 0x31, 0x55, 0xbd, 0x02, 0xa5, 0x2b, 0xab, 0x2c, 0xfe, 0xdc, 0xd3, 0x68, 0xcf, 0xe8, 0x4b, 0xb2, 0x42, 0xf4, 0x4e, 0x2d, 0x66, 0xe0, 0x65, 0x36, 0x2e, 0x03, 0x89, 0xbc, 0xd6, 0x71, 0x98, 0xa2, 0xec, 0x28, 0x49, 0xb5, 0x2a, 0xd0, 0x58, 0x82, 0xbf, 0xc6, 0x91, 0xc0, 0x0b, 0xde, 0x91, 0x51, 0x87, 0x82, 0x86, 0xd1, 0x55, 0xe4, 0xdf, 0xea, 0x64, 0x2e, 0x72, 0x49, 0xd6, 0xb6, 0xf4, 0x08, 0x97, 0xaa, 0x5e, 0x6c, 0xb7, 0x29, 0xe7, 0xc0, 0x65, 0x7b, 0x5a, 0x3a, 0xdb, 0x5d, 0xd2, 0xcb, 0x97, 0x63, 0x82, 0xd2, 0x35, 0x49, 0x06, 0x53, 0xf9, 0xdc, 0xf9, 0x73, 0xf4, 0xfd, 0x5e, 0x54, 0x8f, 0x3c, 0x6b, 0x36, 0xa8, 0x4c, 0xee, 0x90, 0xc6, 0x54, 0x7c, 0x69, 0x90, 0x43, 0xad, 0x5e, 0x93, 0x05, 0xee, 0xf2, 0x1e, 0xc8, 0x6b, 0x93, 0x02, 0x42, 0x29, 0xa1, 0x3a, 0xf5, 0x67, 0xd7, 0xc2, 0xff, 0xff, 0xfd, 0xef, 0xad, 0xf0, 0x8b, 0x3f, 0xfc, 0x1f, 0xf0, 0xd5, 0xe7, 0xff, 0x07, 0xee, 0x3e, 0xfc, 0xd3, 0x78, 0xf7, 0xee, 0x73, 0xd4, 0xab, 0xef, 0x41, 0xe9, 0xeb, 0x79, 0xc4, 0x52, 0xe7, 0xd7, 0x2c, 0x93, 0xb5, 0x9f, 0xfe, 0xde, 0x7f, 0x8b, 0xbf, 0xfa, 0x97, 0x7f, 0x07, 0xbb, 0xdd, 0x0e, 0x9f, 0xfd, 0xf4, 0xa7, 0xf8, 0xe2, 0x17, 0xbf, 0xc0, 0xbb, 0xf7, 0xef, 0xf0, 0xf0, 0xf0, 0x84, 0xe9, 0xe1, 0x4b, 0x1c, 0x2c, 0xd9, 0x07, 0x37, 0x4d, 0x7d, 0x31, 0xa0, 0x9b, 0x8a, 0x74, 0xc5, 0x01, 0xe0, 0xd8, 0x6d, 0x30, 0xac, 0x6f, 0xd0, 0xdd, 0xdc, 0xe3, 0xb7, 0x7f, 0xf8, 0x1d, 0xfc, 0xde, 0x8f, 0xdf, 0x02, 0x9e, 0xee, 0x89, 0xb5, 0x53, 0xa4, 0x14, 0xd2, 0xd8, 0xa5, 0xaa, 0x0c, 0x9c, 0xb3, 0xa9, 0xaa, 0x2b, 0x31, 0x00, 0xe9, 0xbf, 0x75, 0xc8, 0xa8, 0x66, 0x0c, 0x6a, 0x9b, 0x0f, 0x93, 0x79, 0xfe, 0xfd, 0x17, 0x6e, 0x02, 0xb6, 0xcf, 0xfb, 0xf4, 0x05, 0x20, 0xfb, 0xef, 0x34, 0x36, 0xd8, 0x6c, 0xf1, 0xfa, 0x34, 0xe2, 0x2b, 0xff, 0x06, 0x5f, 0x85, 0x9b, 0x5c, 0xd2, 0x53, 0x24, 0xc5, 0x4b, 0x52, 0xc7, 0x4b, 0xed, 0xeb, 0x12, 0x34, 0x24, 0x2b, 0x30, 0xee, 0x30, 0xc9, 0x7f, 0x7e, 0xe7, 0x87, 0x37, 0xf8, 0xe2, 0xdd, 0x88, 0x5f, 0xff, 0x93, 0xbf, 0x0a, 0x5d, 0x6b, 0xfc, 0xfc, 0xb3, 0xcf, 0xe0, 0x5c, 0xc0, 0x3f, 0xfb, 0xd1, 0x4f, 0xe1, 0xd0, 0x61, 0xdd, 0x58, 0x7c, 0xf3, 0xa4, 0xf1, 0xb8, 0x7b, 0x87, 0x3f, 0xff, 0xe7, 0xff, 0x35, 0xfc, 0xda, 0xaf, 0xff, 0x26, 0x7e, 0xf4, 0x87, 0x6f, 0x49, 0x03, 0x3d, 0x82, 0xe0, 0x52, 0xfb, 0xa8, 0x18, 0xe1, 0x94, 0x0a, 0x78, 0xb9, 0x4f, 0x3a, 0x80, 0x60, 0x12, 0xb5, 0x0a, 0xd0, 0xa4, 0x14, 0xa9, 0x4c, 0x34, 0x4d, 0x51, 0x34, 0xc2, 0x8b, 0x40, 0xa5, 0xda, 0x54, 0x30, 0xb8, 0x81, 0x89, 0x7f, 0x5f, 0x41, 0x93, 0xa4, 0x2a, 0x08, 0x3b, 0x11, 0x82, 0xc7, 0x71, 0xff, 0x35, 0x8e, 0xfd, 0x0e, 0x87, 0xc3, 0x13, 0x0e, 0xfb, 0x47, 0xf4, 0xa7, 0x67, 0x4c, 0x53, 0x0f, 0x04, 0x72, 0x7c, 0x3b, 0x9e, 0x8e, 0xe9, 0xa0, 0x66, 0x11, 0x93, 0x87, 0x87, 0x07, 0xec, 0x76, 0xbb, 0x88, 0x51, 0x3a, 0xe1, 0xe6, 0xe6, 0x1a, 0x1f, 0x7f, 0xfc, 0x31, 0xb6, 0xdb, 0x6d, 0x4a, 0x76, 0x57, 0xab, 0x15, 0x5e, 0xbd, 0x7a, 0x95, 0x84, 0xa9, 0x36, 0x9b, 0x4d, 0x6a, 0x93, 0x73, 0xbb, 0x9b, 0x69, 0x5f, 0x00, 0xb0, 0x5a, 0xad, 0x70, 0x73, 0x73, 0x13, 0xdb, 0xcc, 0x01, 0xcf, 0xcf, 0xcf, 0x78, 0xf3, 0xe6, 0x0d, 0x9c, 0x0b, 0xa9, 0x6a, 0x34, 0xc6, 0x60, 0xbd, 0x5e, 0x63, 0xb3, 0xd9, 0xa4, 0x3f, 0xd9, 0x5d, 0xad, 0xec, 0xb2, 0xf1, 0xbc, 0xdb, 0xf9, 0xf1, 0x4c, 0xad, 0x73, 0x18, 0x06, 0xbc, 0x79, 0xf3, 0x06, 0xbf, 0xf8, 0xc5, 0x37, 0x49, 0x5a, 0x59, 0x5a, 0x9e, 0x32, 0xaa, 0x9d, 0x69, 0x67, 0x1c, 0xa0, 0xe6, 0x20, 0x6d, 0xd3, 0xbc, 0x59, 0x02, 0xd2, 0xa4, 0xd1, 0x17, 0x7b, 0x8d, 0x4b, 0xfb, 0x6b, 0x2e, 0x6a, 0x98, 0x66, 0xe6, 0xbd, 0xc7, 0x97, 0x5f, 0x7e, 0x19, 0xc7, 0x0f, 0x53, 0x94, 0x67, 0x6d, 0x62, 0x70, 0x56, 0x49, 0x0a, 0x9a, 0xc5, 0x64, 0x58, 0x91, 0x8d, 0x03, 0x2f, 0xcf, 0xdd, 0x87, 0x61, 0xc0, 0xe1, 0x70, 0x48, 0x7c, 0x74, 0x49, 0xdd, 0x63, 0x7a, 0x5a, 0xdb, 0xb6, 0xc9, 0x14, 0x46, 0x8a, 0xa3, 0x31, 0xf2, 0x9c, 0x8c, 0x68, 0x54, 0xd6, 0x3d, 0x1c, 0xc7, 0x11, 0x0f, 0x8f, 0xef, 0x71, 0x38, 0x1c, 0xf0, 0xf8, 0xf8, 0x88, 0x87, 0x87, 0x87, 0xa4, 0x77, 0xcf, 0x6b, 0xf2, 0xe1, 0xe1, 0x21, 0xeb, 0x80, 0xc9, 0xb3, 0xd0, 0x7b, 0x8f, 0x7d, 0x1c, 0xf1, 0x6d, 0xb7, 0x5b, 0xdc, 0xde, 0xde, 0x92, 0xd3, 0xdb, 0x5f, 0xfc, 0x37, 0xff, 0x83, 0x20, 0xfb, 0xf6, 0xd2, 0x7f, 0x3a, 0x95, 0xf1, 0xa2, 0x02, 0x94, 0x2f, 0xaa, 0xe0, 0xcf, 0x14, 0x94, 0x64, 0x10, 0xe0, 0x56, 0x4d, 0xe9, 0xea, 0xc4, 0x9b, 0xbd, 0x8b, 0x87, 0xe1, 0x25, 0x63, 0x84, 0xaa, 0xea, 0xce, 0x40, 0x69, 0x9c, 0x25, 0x39, 0xe7, 0x60, 0xc3, 0x12, 0x0f, 0x5d, 0xb4, 0x48, 0x70, 0x39, 0x19, 0xa0, 0x36, 0x5d, 0x73, 0x56, 0xa1, 0xcb, 0x83, 0xc9, 0x17, 0x5a, 0xe5, 0x4b, 0xd5, 0xbe, 0xac, 0x8e, 0x4a, 0x53, 0x12, 0xde, 0x10, 0x4b, 0x41, 0x93, 0x16, 0x4d, 0x97, 0x16, 0xb1, 0xf4, 0x1e, 0x4e, 0x76, 0x9e, 0x45, 0x32, 0x24, 0xab, 0x49, 0x96, 0x5e, 0x5d, 0xea, 0x8e, 0xc8, 0x0a, 0x7c, 0xc9, 0xde, 0x52, 0x06, 0x6d, 0xd9, 0xe2, 0x2f, 0x29, 0x28, 0xcc, 0x13, 0xe7, 0x80, 0x2e, 0xf9, 0xdd, 0x5a, 0x6b, 0xec, 0xf6, 0xef, 0xa1, 0x75, 0x25, 0x3e, 0x73, 0x54, 0x81, 0x0a, 0x2a, 0xeb, 0x30, 0x38, 0x6f, 0x85, 0x99, 0x85, 0x4a, 0x68, 0x5f, 0xe7, 0xcd, 0xa2, 0x8e, 0x3f, 0x3f, 0x67, 0x06, 0xd5, 0x48, 0xf9, 0x5c, 0xde, 0x30, 0x75, 0x5d, 0xe3, 0xd4, 0x1f, 0xcf, 0x9e, 0x2f, 0x3f, 0xaf, 0x8f, 0xae, 0xbe, 0xc6, 0x97, 0xef, 0x89, 0x89, 0x30, 0x4e, 0x1b, 0xfc, 0xf1, 0xd7, 0x23, 0xda, 0xe8, 0x8f, 0xfc, 0x2f, 0xbe, 0xa4, 0x8c, 0xbb, 0x5d, 0x35, 0x67, 0x9d, 0x21, 0x00, 0xf8, 0xd9, 0xef, 0xff, 0x5d, 0xfc, 0xcd, 0xbf, 0xf9, 0xef, 0xe3, 0xf6, 0xee, 0x0e, 0x4d, 0xd5, 0xc6, 0x7b, 0x3d, 0xe0, 0xf1, 0x5f, 0xfc, 0x21, 0x3e, 0x7f, 0x3a, 0xe1, 0xb8, 0xdf, 0xe3, 0x34, 0x56, 0x18, 0x47, 0xd2, 0x8a, 0xfe, 0xf8, 0xe3, 0x8f, 0xf0, 0xe9, 0x4d, 0x07, 0x6c, 0x09, 0x89, 0x7b, 0x7b, 0x77, 0x77, 0x56, 0xd1, 0x97, 0x15, 0x7b, 0xdd, 0x1a, 0xfc, 0xfd, 0xdf, 0xfd, 0x11, 0x5d, 0x47, 0x54, 0xbe, 0xe3, 0x67, 0xce, 0xed, 0x42, 0x06, 0xe2, 0x2d, 0xa9, 0x98, 0x01, 0x80, 0xd7, 0x2f, 0x6b, 0x91, 0xd7, 0x0d, 0x3d, 0xaf, 0x1f, 0xff, 0xe3, 0xff, 0x0e, 0xff, 0xd5, 0x2f, 0xff, 0xa9, 0xc5, 0xa4, 0xe3, 0xa3, 0xcd, 0xf6, 0x62, 0x42, 0xf2, 0xb7, 0xc6, 0x3b, 0x6c, 0xaf, 0xee, 0xcf, 0xf6, 0x60, 0xb9, 0x47, 0xe4, 0xbc, 0x59, 0xfe, 0x7f, 0x79, 0x36, 0x70, 0x30, 0xe7, 0xe7, 0x37, 0x4e, 0x79, 0x02, 0xf7, 0xe5, 0x1f, 0xfc, 0xf7, 0xf8, 0xbb, 0xff, 0xf5, 0xef, 0xe2, 0xff, 0xf9, 0x83, 0x7f, 0x86, 0xc3, 0xe1, 0x88, 0xc7, 0x87, 0x07, 0x7c, 0xfe, 0xf9, 0xe7, 0xf8, 0xf4, 0xd3, 0x4f, 0xf1, 0xf0, 0xf0, 0x84, 0x7f, 0xf4, 0x8f, 0x7f, 0x84, 0xa6, 0xbb, 0xa5, 0x7b, 0x0b, 0x0a, 0x56, 0xbf, 0xf2, 0x83, 0xef, 0xe2, 0xf7, 0xfe, 0xb9, 0xc5, 0xf6, 0xfa, 0x3e, 0xc6, 0x71, 0x61, 0xe2, 0xe3, 0xce, 0x11, 0xd0, 0x59, 0x27, 0x8e, 0xcd, 0x7c, 0x02, 0xd3, 0x92, 0x74, 0x62, 0xdd, 0x90, 0x6b, 0x5b, 0x48, 0x0c, 0x03, 0x1b, 0x05, 0x6f, 0xbc, 0x0a, 0xa8, 0x9b, 0x58, 0x30, 0x38, 0x1a, 0xbf, 0x18, 0x90, 0x20, 0x8c, 0x52, 0x13, 0xbc, 0x3d, 0xc2, 0xda, 0x3d, 0xac, 0x1d, 0x60, 0x4f, 0x03, 0xec, 0x34, 0xe0, 0x74, 0xda, 0xe3, 0x74, 0xdc, 0x61, 0x18, 0x76, 0x08, 0xae, 0x8f, 0x3f, 0x1b, 0x70, 0x7d, 0x7b, 0x93, 0xc6, 0x7d, 0x92, 0xf7, 0xdc, 0xb6, 0x2d, 0x6e, 0x6f, 0x6f, 0xa3, 0xcb, 0xde, 0x03, 0x9e, 0x9e, 0x9e, 0x12, 0x8d, 0xeb, 0xfa, 0xfa, 0x3a, 0xad, 0x93, 0x9b, 0xdb, 0x4d, 0xda, 0xa7, 0x5c, 0x89, 0xb3, 0x20, 0xcf, 0x6a, 0xb5, 0xca, 0x3a, 0x5d, 0x52, 0x97, 0x9f, 0x41, 0x6d, 0xce, 0xce, 0x46, 0x29, 0x5c, 0xfd, 0x97, 0xc9, 0xbf, 0x3c, 0xef, 0x59, 0x6d, 0x8d, 0x7f, 0x67, 0xb5, 0x6a, 0x13, 0x28, 0x8d, 0x39, 0xeb, 0xec, 0x29, 0x4e, 0xef, 0x13, 0x92, 0x3b, 0x1b, 0x77, 0x03, 0x77, 0xbb, 0xdd, 0x99, 0xe4, 0xb4, 0x04, 0x97, 0xc9, 0x75, 0xb3, 0xdd, 0x6e, 0x33, 0x41, 0x32, 0xee, 0x4e, 0xf4, 0x7d, 0x8f, 0xd3, 0xe9, 0x84, 0xfb, 0xfb, 0xfb, 0x8c, 0xee, 0xc5, 0x67, 0xae, 0x64, 0xd0, 0xd0, 0xda, 0x9b, 0x04, 0x2e, 0x25, 0x60, 0x18, 0x7b, 0x8c, 0xe3, 0x88, 0x8f, 0x5f, 0x7f, 0x27, 0x93, 0x97, 0xe5, 0xfb, 0xca, 0xe7, 0x76, 0xd7, 0x75, 0xe8, 0xfb, 0x3e, 0x55, 0xe0, 0x5c, 0x59, 0xf3, 0xe8, 0x60, 0x18, 0x86, 0xd4, 0x11, 0xe1, 0x71, 0x05, 0x7f, 0x8e, 0xbe, 0xef, 0x71, 0x75, 0x75, 0x95, 0x2a, 0x6d, 0x46, 0xd6, 0x33, 0x78, 0x6f, 0xbd, 0x5e, 0xa3, 0x6e, 0x66, 0xb3, 0x2c, 0x9e, 0xe3, 0x4b, 0x09, 0x59, 0x1e, 0x37, 0x94, 0xbe, 0x1b, 0x1c, 0xa3, 0xf7, 0xfb, 0xa7, 0xf4, 0xbc, 0xf9, 0x1c, 0x51, 0x7f, 0xe9, 0xaf, 0xfc, 0xed, 0x20, 0x2f, 0x48, 0x1e, 0xee, 0x2c, 0xa8, 0x3f, 0x4b, 0xa1, 0xe6, 0x66, 0x29, 0x5a, 0xe5, 0xad, 0xb7, 0x32, 0x00, 0x49, 0x99, 0xbd, 0x25, 0x00, 0x4a, 0x53, 0x99, 0x45, 0x2d, 0xf5, 0xd9, 0x3e, 0x73, 0x73, 0x06, 0x78, 0x4b, 0x00, 0x02, 0xe7, 0x60, 0x9a, 0x76, 0x11, 0x84, 0x95, 0x90, 0xf9, 0xa8, 0xce, 0xe6, 0x32, 0xb2, 0xad, 0x3b, 0xbb, 0x21, 0xa9, 0x33, 0xb7, 0xb5, 0x25, 0x7f, 0xf1, 0x32, 0xe0, 0x4a, 0x3f, 0x68, 0x79, 0x7f, 0xe4, 0x6b, 0x48, 0x43, 0x83, 0x32, 0x69, 0xa8, 0xaa, 0xf6, 0xcc, 0xe1, 0x4a, 0xd2, 0x84, 0x96, 0x5a, 0x85, 0xf2, 0x33, 0xd9, 0x98, 0x59, 0x97, 0xd2, 0xba, 0x52, 0x94, 0x47, 0x06, 0x74, 0x79, 0x0d, 0x25, 0xe0, 0xa7, 0x94, 0x98, 0xe5, 0x83, 0xa2, 0x94, 0xec, 0x95, 0xaf, 0xe1, 0xc3, 0x10, 0xc1, 0x8d, 0xfc, 0xfc, 0x74, 0xc6, 0xc5, 0xbd, 0xba, 0xba, 0x8a, 0xea, 0x5f, 0x56, 0x00, 0x2c, 0x67, 0xd4, 0xef, 0x64, 0xf3, 0xfb, 0xc1, 0xd7, 0xcf, 0xd7, 0x28, 0xaf, 0x8d, 0xd1, 0xa8, 0xf2, 0x59, 0x3a, 0x3b, 0x0b, 0xd7, 0xf4, 0x6f, 0x7f, 0x17, 0xbf, 0xfe, 0x2f, 0xfd, 0x15, 0xca, 0xaa, 0xf7, 0x0f, 0x29, 0x98, 0x7f, 0xff, 0x8f, 0x7d, 0x84, 0x9f, 0xfd, 0xfc, 0x9b, 0xf4, 0x73, 0xdf, 0xff, 0x63, 0x1f, 0xe1, 0x8b, 0x6f, 0xa8, 0x15, 0x67, 0x6a, 0x9d, 0x29, 0x39, 0x01, 0xc0, 0x2f, 0xfe, 0xe0, 0x1f, 0xe0, 0xef, 0xfc, 0x67, 0xff, 0x25, 0x7e, 0xf2, 0x7f, 0xfe, 0x23, 0x3c, 0x4c, 0x15, 0x7e, 0xf8, 0x9b, 0x7f, 0x32, 0xcd, 0xc7, 0x65, 0x70, 0x07, 0x80, 0xc7, 0x87, 0x07, 0x00, 0xc0, 0xc3, 0xc3, 0x13, 0xde, 0x7e, 0xf3, 0x15, 0x9e, 0xf7, 0x94, 0x61, 0x5f, 0x6f, 0xd7, 0xb4, 0x69, 0xb7, 0x5b, 0xac, 0xd7, 0x5b, 0xdc, 0xdd, 0xdd, 0xa4, 0x20, 0xbf, 0xd9, 0xac, 0x53, 0x70, 0x5f, 0x7d, 0xfd, 0x87, 0xf8, 0x7b, 0xff, 0x57, 0x48, 0xe2, 0x17, 0x0c, 0x3c, 0xe2, 0x56, 0x63, 0x55, 0xeb, 0x8b, 0x1a, 0x0d, 0x51, 0xc9, 0xf6, 0x45, 0x3f, 0x7a, 0x15, 0x03, 0xfe, 0x5f, 0x5f, 0xbf, 0xc5, 0x9f, 0x7a, 0xd8, 0xe1, 0x9b, 0xc3, 0xfe, 0x8f, 0x1c, 0xcc, 0xbf, 0x39, 0xec, 0xf1, 0x77, 0xaa, 0xef, 0xe2, 0xea, 0xfa, 0xd5, 0x22, 0x05, 0x51, 0xae, 0xef, 0x4b, 0x2d, 0xf7, 0x52, 0xe1, 0xf0, 0x4c, 0x89, 0xcd, 0x87, 0x2c, 0x99, 0xfa, 0x57, 0x7f, 0xeb, 0x06, 0xff, 0xfa, 0x6f, 0xff, 0x59, 0x5c, 0x7d, 0xfc, 0x29, 0x7e, 0xf6, 0xc5, 0xcf, 0xf0, 0xb3, 0x9f, 0xfd, 0x0c, 0xbf, 0xff, 0x4f, 0xff, 0x69, 0xfa, 0xf9, 0xf5, 0x7a, 0x9b, 0x82, 0x7a, 0x83, 0x27, 0xec, 0x4f, 0x01, 0xdb, 0x4e, 0xe1, 0x18, 0x5e, 0xe1, 0xe6, 0xee, 0xe3, 0xb3, 0x80, 0x5e, 0xe3, 0xdc, 0x3a, 0x73, 0x59, 0xe3, 0x42, 0xc7, 0x24, 0x94, 0x10, 0xe2, 0x14, 0xd4, 0x0d, 0xa6, 0xa8, 0x55, 0x0f, 0xe5, 0xc9, 0xc7, 0x3e, 0x8c, 0xe4, 0x74, 0xc6, 0xfe, 0xf6, 0x76, 0x4a, 0xca, 0x6f, 0x2a, 0x78, 0x38, 0x7b, 0xc2, 0x30, 0xee, 0x31, 0x9e, 0xc8, 0xbe, 0x74, 0x7f, 0xf8, 0x09, 0xb4, 0x06, 0x2a, 0x4d, 0xb2, 0xb3, 0x46, 0x7b, 0xb4, 0xb5, 0x46, 0xd3, 0x92, 0xab, 0xd9, 0xa9, 0x77, 0x49, 0x67, 0x81, 0x5b, 0xde, 0x1c, 0x34, 0x00, 0xe0, 0xfd, 0xfb, 0xf7, 0x67, 0x74, 0x53, 0xa9, 0x6a, 0xe6, 0xfc, 0x6c, 0x22, 0xb2, 0xd9, 0x6c, 0x70, 0x73, 0x73, 0x13, 0xdd, 0xbc, 0x86, 0x58, 0xc5, 0x1e, 0xcf, 0x30, 0x0f, 0x32, 0x18, 0x1d, 0x0f, 0x63, 0xc2, 0xe4, 0xb0, 0x8f, 0x37, 0x57, 0xaa, 0xa5, 0xd9, 0x89, 0x94, 0x04, 0x9f, 0xa5, 0x5d, 0x5d, 0x8e, 0x09, 0x48, 0x02, 0x3b, 0xf4, 0x5e, 0xbb, 0x5d, 0x9f, 0x38, 0xe2, 0x4b, 0x58, 0x2d, 0x06, 0xdd, 0xf1, 0xeb, 0x71, 0xdb, 0x9a, 0xab, 0xe0, 0xdd, 0x6e, 0x27, 0xd0, 0xe7, 0xb3, 0xa2, 0x1c, 0x3f, 0x43, 0x56, 0xa2, 0x93, 0xb6, 0xc1, 0x53, 0x62, 0x1e, 0xfc, 0x7f, 0x94, 0xbd, 0x69, 0x90, 0x64, 0xd7, 0x75, 0x1e, 0xf8, 0xdd, 0xb7, 0xbf, 0x97, 0x2f, 0xf7, 0xcc, 0xaa, 0xea, 0xae, 0xea, 0x46, 0x77, 0x03, 0x4d, 0x2c, 0x24, 0x01, 0x0a, 0x84, 0x28, 0x89, 0x14, 0x29, 0x59, 0x22, 0xb5, 0x87, 0x24, 0xc7, 0xc4, 0x48, 0x96, 0x43, 0x1e, 0x8e, 0x18, 0x21, 0x2b, 0x26, 0x46, 0x56, 0x28, 0x42, 0xe6, 0x78, 0xac, 0x90, 0x23, 0x34, 0x31, 0xfe, 0xe1, 0x70, 0xcc, 0xa2, 0x1f, 0x1e, 0x8f, 0xed, 0x99, 0x98, 0x90, 0x43, 0xb4, 0x2c, 0x79, 0x6c, 0x8a, 0xd4, 0xe6, 0x81, 0x40, 0x2d, 0x84, 0x08, 0x70, 0x11, 0x41, 0x10, 0x0b, 0x81, 0x06, 0x1a, 0xe8, 0xbd, 0xba, 0xaa, 0xb2, 0xaa, 0x72, 0xcf, 0x7c, 0xfb, 0x7b, 0xf3, 0xe3, 0xde, 0x73, 0xf3, 0xbe, 0x97, 0x59, 0x1d, 0x74, 0x46, 0x74, 0xa0, 0xd1, 0x5d, 0x5d, 0x95, 0xf9, 0xf2, 0xe5, 0x3d, 0xe7, 0x7c, 0xe7, 0x5b, 0x56, 0x71, 0xad, 0x71, 0x1c, 0x8a, 0xc6, 0x49, 0xac, 0x8c, 0xc1, 0x6b, 0xd5, 0x62, 0x1e, 0xc8, 0xd5, 0xaa, 0x2a, 0x51, 0x53, 0x91, 0x65, 0x3a, 0x37, 0x49, 0xee, 0x46, 0xf9, 0x1c, 0x51, 0x14, 0xa1, 0x56, 0xab, 0xf1, 0x90, 0x97, 0xe9, 0x14, 0xb3, 0x19, 0x27, 0xb0, 0x35, 0x9b, 0x4d, 0x09, 0x7f, 0xfb, 0x3e, 0x8f, 0x3a, 0xa5, 0x55, 0x03, 0xbd, 0x27, 0x86, 0xc1, 0xc9, 0x83, 0x71, 0x12, 0x56, 0xe2, 0xb8, 0x93, 0x52, 0x50, 0x4d, 0xa3, 0xd1, 0x90, 0x7b, 0x79, 0x7a, 0x6e, 0xc4, 0x25, 0xe0, 0xcf, 0xd9, 0x96, 0x53, 0x3d, 0xdd, 0x43, 0xec, 0xc7, 0x7e, 0xfa, 0x1f, 0x16, 0xd5, 0x6c, 0x72, 0x75, 0xa7, 0x49, 0xd0, 0x7b, 0x55, 0x96, 0x55, 0x14, 0x05, 0x90, 0x67, 0xa5, 0x02, 0x5f, 0xcd, 0x14, 0x27, 0x9d, 0xa6, 0x5a, 0x28, 0xca, 0xd6, 0x9b, 0xe9, 0x1a, 0x04, 0x5c, 0x9a, 0xd0, 0x85, 0x79, 0x7f, 0x95, 0x05, 0x2d, 0x77, 0xe1, 0x4a, 0x9e, 0xb1, 0xfa, 0x81, 0x5d, 0x15, 0x49, 0xb6, 0xb2, 0x19, 0x14, 0x7e, 0xbb, 0xa4, 0x89, 0x0c, 0xc3, 0x50, 0x7a, 0xbd, 0x6f, 0x92, 0xa6, 0xa8, 0x87, 0x54, 0x75, 0x65, 0x40, 0x37, 0x4b, 0x14, 0x25, 0xa5, 0xfd, 0xa0, 0x7a, 0x53, 0xd3, 0x9e, 0x43, 0x95, 0xb9, 0x55, 0x0f, 0x65, 0x92, 0x3a, 0x55, 0x5d, 0xb4, 0x4a, 0xd2, 0x9f, 0x0a, 0x61, 0xab, 0x84, 0x12, 0x28, 0x4d, 0x87, 0x1a, 0x9c, 0x51, 0x7d, 0x3f, 0xd4, 0x43, 0x53, 0x2d, 0xe8, 0xf4, 0x1c, 0xab, 0xdc, 0x00, 0x15, 0xc2, 0xaa, 0x4e, 0xf7, 0xd4, 0x2d, 0xf3, 0x0f, 0x46, 0x2c, 0x6d, 0x4b, 0xf9, 0xf7, 0x10, 0xd3, 0xbd, 0x30, 0xbe, 0x68, 0x34, 0x04, 0xbc, 0xad, 0xad, 0x58, 0xbf, 0xab, 0x69, 0x81, 0x21, 0x49, 0x51, 0x22, 0x1d, 0xd2, 0x0e, 0x91, 0xee, 0x43, 0x4a, 0x25, 0x52, 0x1b, 0x93, 0x12, 0xbf, 0xa3, 0xc8, 0xb0, 0x18, 0xac, 0x0a, 0xb9, 0x5a, 0xb8, 0xcf, 0x7a, 0x58, 0x98, 0x80, 0xb9, 0xef, 0xe7, 0x8d, 0x0f, 0x43, 0xe9, 0x7d, 0xd3, 0x34, 0x0d, 0xff, 0xf0, 0x27, 0x3a, 0x38, 0xf1, 0x76, 0xb0, 0x58, 0x2c, 0xf1, 0x37, 0x5f, 0xf9, 0x0a, 0xae, 0x3e, 0xfa, 0x28, 0xb6, 0xfa, 0x3b, 0x78, 0xf9, 0x9b, 0x2f, 0xe1, 0xf0, 0x70, 0x80, 0x9d, 0x9d, 0xad, 0xb5, 0x22, 0x4d, 0xd3, 0xb8, 0x2c, 0xf4, 0xca, 0x24, 0x0f, 0xa0, 0x54, 0xe8, 0x3f, 0xf2, 0xbd, 0xdf, 0x07, 0xd3, 0xd6, 0x91, 0x44, 0x19, 0xae, 0x7c, 0xf6, 0x3f, 0xe1, 0x70, 0xef, 0x1c, 0xfe, 0xe5, 0x5d, 0x47, 0x76, 0xd9, 0xc4, 0x3d, 0xe0, 0x66, 0x2a, 0xc6, 0x46, 0xe4, 0x68, 0x85, 0xe9, 0x17, 0x67, 0x16, 0x5a, 0x6e, 0x0d, 0xcc, 0xaf, 0xd7, 0xcf, 0xbf, 0xd7, 0xc2, 0x53, 0xdf, 0x7c, 0x77, 0xad, 0x60, 0x3f, 0xa8, 0xa8, 0x0f, 0x16, 0x73, 0xfc, 0x33, 0xe7, 0x12, 0x6c, 0xdb, 0xdb, 0xe8, 0x76, 0xf8, 0xed, 0x14, 0xf4, 0x2a, 0xb2, 0x54, 0x6d, 0xca, 0x0b, 0xe5, 0xfe, 0xcf, 0xf3, 0x1c, 0xff, 0xe8, 0x97, 0x7f, 0x12, 0xf6, 0x22, 0x44, 0x54, 0x73, 0xf0, 0xe4, 0xfb, 0xdf, 0x8b, 0xe3, 0xc1, 0x0c, 0xc9, 0x72, 0x81, 0x38, 0x9c, 0xe3, 0xfa, 0xbd, 0xbb, 0xb8, 0xfe, 0xd6, 0x35, 0xec, 0xef, 0xef, 0xe3, 0xe5, 0xd7, 0xef, 0xf2, 0x6b, 0x2e, 0x0a, 0x7b, 0xa8, 0xf5, 0xd0, 0x6c, 0x6f, 0x97, 0xaf, 0x51, 0xa1, 0xc1, 0x64, 0xda, 0x99, 0x4d, 0x48, 0xc9, 0xe0, 0x45, 0x14, 0x73, 0xc9, 0x26, 0x16, 0x04, 0xc5, 0x3c, 0xcb, 0x64, 0x50, 0x0c, 0xd3, 0x84, 0x64, 0xa9, 0x88, 0x79, 0x8e, 0x7d, 0x16, 0xc3, 0x71, 0xdf, 0x45, 0x16, 0x27, 0xb2, 0x40, 0xa6, 0x59, 0x88, 0x22, 0x4f, 0x90, 0x17, 0x21, 0x0a, 0xe4, 0xe8, 0xf8, 0x3d, 0x14, 0x45, 0x86, 0x34, 0x8b, 0x11, 0x45, 0x4b, 0xc4, 0x51, 0x20, 0x60, 0x6a, 0xfe, 0x19, 0x6a, 0xf9, 0xdd, 0x92, 0x97, 0x39, 0x9d, 0x1b, 0xcb, 0xe5, 0x12, 0xa3, 0xd1, 0x08, 0x61, 0x18, 0xa2, 0xdd, 0x6e, 0xa3, 0xd9, 0x6c, 0xca, 0xc2, 0x11, 0x04, 0x01, 0x6c, 0xdb, 0x46, 0xad, 0x56, 0x43, 0xbb, 0xd3, 0x2c, 0xe5, 0x66, 0x50, 0x21, 0x27, 0xc7, 0xb3, 0x7a, 0xbd, 0xbe, 0x86, 0x7c, 0x11, 0x22, 0x98, 0xe7, 0x39, 0x82, 0xe5, 0xca, 0x1d, 0x8d, 0x86, 0x1d, 0x55, 0x4f, 0xee, 0x79, 0x5e, 0x29, 0xd0, 0x44, 0x0d, 0x5f, 0x21, 0x7f, 0x06, 0xfa, 0x3c, 0x92, 0x1b, 0x9b, 0xca, 0x24, 0xd7, 0x44, 0xd4, 0x6f, 0x14, 0x45, 0x98, 0x4e, 0xa7, 0x52, 0x0f, 0x4e, 0x3e, 0xed, 0x2a, 0x77, 0x45, 0x95, 0x3e, 0xd2, 0xf9, 0x4c, 0xd0, 0x37, 0x9d, 0x09, 0xd5, 0xe6, 0x2c, 0x2f, 0x56, 0x24, 0x34, 0x2a, 0x96, 0x2a, 0xd2, 0xd9, 0x6a, 0xb5, 0xc4, 0x7d, 0xb7, 0x4a, 0x63, 0xcc, 0xf3, 0x1c, 0x71, 0x22, 0x74, 0xfb, 0xd0, 0x25, 0x8a, 0x41, 0x8d, 0x0b, 0xad, 0x0a, 0x09, 0x32, 0x57, 0xdf, 0x1f, 0x35, 0xa7, 0x84, 0x9a, 0x28, 0x95, 0x95, 0x4f, 0x4c, 0x73, 0x9a, 0xb8, 0xa7, 0xd3, 0xa9, 0x44, 0x3e, 0xe8, 0x9a, 0x93, 0xf3, 0x1d, 0x63, 0x0c, 0xc3, 0xd1, 0x49, 0xe9, 0x3c, 0xa5, 0x46, 0x81, 0x50, 0x1b, 0xf2, 0x07, 0x20, 0x7b, 0x67, 0x0e, 0xb3, 0xcf, 0xa5, 0x6e, 0x3f, 0x4d, 0x23, 0x89, 0x1e, 0x90, 0xb5, 0xad, 0x51, 0x25, 0x22, 0xa8, 0x18, 0xbd, 0x9a, 0xec, 0x55, 0x75, 0x12, 0xcb, 0xb2, 0x0c, 0x1a, 0x8a, 0xb5, 0xbc, 0x63, 0xf5, 0xc3, 0x42, 0x6f, 0xc4, 0xa6, 0x34, 0x37, 0xba, 0x38, 0x6a, 0x31, 0xaf, 0xea, 0xd8, 0xd5, 0x09, 0xbf, 0xca, 0xb6, 0x26, 0x32, 0x87, 0x3a, 0xd9, 0x55, 0x3d, 0x97, 0xb9, 0x17, 0xbb, 0xae, 0x18, 0x9f, 0x90, 0xd7, 0x32, 0x83, 0x65, 0x41, 0x98, 0xe0, 0x60, 0xa3, 0xbd, 0xe9, 0xca, 0x22, 0x55, 0x5b, 0xcb, 0xfc, 0xa5, 0x22, 0x40, 0x96, 0x7c, 0xea, 0x9f, 0x57, 0x79, 0x04, 0x0f, 0x72, 0xb2, 0xcb, 0xb2, 0x7c, 0x6d, 0x1d, 0xa1, 0x42, 0x5e, 0x55, 0x99, 0x96, 0xfa, 0xf7, 0x79, 0x9e, 0xc3, 0x50, 0x20, 0x69, 0x75, 0x8f, 0x5c, 0xb5, 0xaa, 0xdd, 0xe4, 0x31, 0x50, 0x9d, 0xd2, 0x55, 0x05, 0x82, 0xfa, 0x9e, 0x55, 0x19, 0xe8, 0x6a, 0xb3, 0x91, 0xa4, 0xab, 0x09, 0x9d, 0x24, 0x8f, 0xbc, 0xd0, 0xae, 0x20, 0x7b, 0xc3, 0x30, 0xa0, 0xe9, 0x65, 0x0f, 0x79, 0xfe, 0x1e, 0x08, 0xf7, 0xf4, 0x4a, 0x23, 0x59, 0x95, 0xa5, 0xa9, 0xcd, 0x55, 0x95, 0x41, 0x7a, 0xae, 0x17, 0xe3, 0x56, 0xfa, 0x61, 0xfc, 0x97, 0x3e, 0x96, 0x8b, 0x39, 0x0c, 0xd3, 0x82, 0x61, 0x99, 0x25, 0xe4, 0xe4, 0x43, 0xf6, 0x75, 0xb8, 0x9f, 0x8f, 0xd0, 0xfb, 0xa9, 0x8f, 0x01, 0xb5, 0x1d, 0x5c, 0xdd, 0xed, 0xe1, 0xfa, 0x5b, 0x6f, 0xa1, 0xd5, 0x6e, 0x63, 0x77, 0x77, 0x57, 0x16, 0xe8, 0x1b, 0x37, 0x6e, 0x94, 0xa6, 0x70, 0x9a, 0x1e, 0xdb, 0xa6, 0xb8, 0xde, 0x7e, 0x17, 0xef, 0xbd, 0xd0, 0x96, 0x45, 0x7e, 0x3c, 0x1a, 0xe1, 0xa5, 0x97, 0x5e, 0x96, 0x5f, 0x4b, 0x24, 0xb9, 0x62, 0x36, 0xc1, 0xf6, 0x9b, 0x13, 0xb4, 0xea, 0xc0, 0x32, 0xff, 0x4e, 0x14, 0x85, 0x2e, 0x65, 0x8d, 0xb4, 0x57, 0x27, 0xd3, 0x1c, 0xe0, 0x8c, 0xa2, 0x7e, 0x06, 0x4b, 0x9b, 0xd8, 0xdd, 0xf3, 0x83, 0x2f, 0xe3, 0xd5, 0x78, 0x1b, 0xe7, 0x96, 0x91, 0x2c, 0xde, 0xea, 0xa4, 0x5e, 0x9d, 0xda, 0xd5, 0xe9, 0x3d, 0x0b, 0x63, 0xe8, 0x5e, 0x7d, 0x63, 0xb3, 0xc7, 0x63, 0x36, 0x93, 0x33, 0x62, 0x87, 0x57, 0x5c, 0x1c, 0x35, 0xb2, 0xb7, 0xba, 0x67, 0xa7, 0x69, 0xb7, 0x28, 0x80, 0xc1, 0xf5, 0xcf, 0xe2, 0xe6, 0x8d, 0xf7, 0xe2, 0xf2, 0x95, 0x87, 0xd1, 0xab, 0xf3, 0xd5, 0x45, 0x7f, 0xab, 0x8e, 0xe7, 0xbe, 0xf0, 0x75, 0x5c, 0x7f, 0xeb, 0x9a, 0x44, 0x41, 0x7a, 0x5b, 0x3b, 0x78, 0xe8, 0x7c, 0x1f, 0xb7, 0xef, 0x1f, 0x23, 0x0e, 0xc7, 0x38, 0x77, 0xbe, 0x8f, 0x83, 0x29, 0x84, 0x6d, 0xb5, 0x26, 0x8b, 0xb9, 0x50, 0xfb, 0xad, 0x99, 0xc6, 0xa8, 0x83, 0x41, 0x4a, 0x0e, 0x7c, 0x94, 0xf5, 0x5a, 0xa4, 0x82, 0x09, 0x2f, 0x2c, 0x89, 0x73, 0xb1, 0xbf, 0x44, 0x0a, 0x56, 0xe4, 0xd0, 0x19, 0x90, 0xe5, 0x11, 0xc2, 0x68, 0x81, 0x34, 0x8a, 0x91, 0x2c, 0x96, 0x08, 0x83, 0x18, 0x8b, 0x05, 0x99, 0xa3, 0x68, 0x70, 0x3d, 0x07, 0x35, 0xbf, 0x05, 0xdb, 0xd6, 0xa1, 0xb1, 0xc9, 0x4a, 0xb7, 0x68, 0x71, 0xc3, 0x1c, 0x5d, 0xb7, 0xe1, 0xba, 0x9c, 0x28, 0xe6, 0x59, 0x4d, 0x4c, 0x26, 0x13, 0x44, 0x51, 0x24, 0x43, 0x3c, 0xc8, 0xd8, 0x85, 0x7b, 0x85, 0xf7, 0x91, 0x24, 0x09, 0x06, 0x83, 0x81, 0xdc, 0x73, 0xab, 0xa4, 0xb6, 0x2c, 0x4b, 0x61, 0x9a, 0x06, 0x18, 0x03, 0xa2, 0x28, 0x94, 0x06, 0x23, 0xbe, 0xef, 0xa3, 0x5e, 0xaf, 0xcb, 0x62, 0x45, 0x45, 0x98, 0x86, 0x0d, 0xcf, 0xe3, 0xac, 0xe9, 0xba, 0xcf, 0x21, 0x60, 0x2a, 0x84, 0x04, 0x05, 0x53, 0xd1, 0x1a, 0x0e, 0x87, 0x25, 0xe5, 0x0f, 0x91, 0xea, 0xe8, 0xbc, 0xd0, 0x34, 0x43, 0x32, 0xd6, 0xe9, 0x41, 0xfb, 0xef, 0x28, 0x8a, 0x50, 0xe4, 0x9a, 0xfc, 0x7e, 0xea, 0xbf, 0xa7, 0x82, 0x3e, 0x18, 0x0c, 0xd6, 0x92, 0xf8, 0x08, 0x36, 0xa7, 0x70, 0x27, 0x3a, 0x8b, 0x68, 0xa7, 0xad, 0x92, 0xef, 0xb2, 0x3c, 0x2d, 0xad, 0xe5, 0xd4, 0xf3, 0x3b, 0x49, 0x12, 0xdc, 0xbb, 0x77, 0x4f, 0x5c, 0x2b, 0xf2, 0x15, 0x61, 0xf2, 0x39, 0xf8, 0xbe, 0x8f, 0x3c, 0x83, 0x84, 0xd4, 0x69, 0x35, 0xa0, 0x92, 0xf8, 0xd4, 0xa9, 0x7d, 0x3c, 0x1e, 0x63, 0xb1, 0x58, 0xc8, 0x62, 0x6b, 0xdb, 0x36, 0x4e, 0x4e, 0x4e, 0xe0, 0xba, 0x2e, 0x6a, 0xb5, 0x9a, 0xd4, 0xed, 0x0f, 0x87, 0x43, 0x09, 0xd9, 0x53, 0x91, 0x25, 0xf3, 0x1c, 0x42, 0x3a, 0xa8, 0x39, 0x33, 0x2d, 0x73, 0x8d, 0xf7, 0xa4, 0xf2, 0xcc, 0xa6, 0xd3, 0x69, 0x69, 0xc8, 0x95, 0xe7, 0xbe, 0x40, 0x33, 0x3c, 0x91, 0x76, 0x5a, 0xfa, 0x3b, 0x15, 0x26, 0xdf, 0xc4, 0x62, 0xdd, 0x34, 0x1d, 0x10, 0x64, 0x6d, 0x9b, 0x96, 0x42, 0xc8, 0x21, 0x87, 0x34, 0xd2, 0x98, 0x43, 0x7a, 0x5e, 0x93, 0x3d, 0xe7, 0x6a, 0x9f, 0x93, 0x8b, 0x78, 0xbc, 0x7c, 0x63, 0xae, 0xf9, 0xaa, 0x13, 0x33, 0x36, 0x06, 0xb6, 0x50, 0x41, 0xb2, 0x35, 0x7d, 0x63, 0x16, 0xf7, 0x8a, 0x61, 0xce, 0xa4, 0xc3, 0x58, 0x55, 0x1a, 0xa6, 0xeb, 0x3c, 0x17, 0xb8, 0x4a, 0xf6, 0x79, 0x50, 0xdc, 0x6a, 0x75, 0x87, 0x5e, 0xab, 0x35, 0xa4, 0x4d, 0xa8, 0x61, 0x30, 0xd8, 0x36, 0xc0, 0x58, 0x2c, 0x6e, 0xba, 0x6c, 0x2d, 0xad, 0x4a, 0xf5, 0xe9, 0x2e, 0xcb, 0x5d, 0xd8, 0x99, 0x7e, 0xe7, 0x9b, 0xae, 0x8f, 0x4a, 0xce, 0x50, 0xa3, 0x67, 0x37, 0xd9, 0x6b, 0x6e, 0x8a, 0x9c, 0x55, 0x1b, 0x20, 0x55, 0x8e, 0x58, 0x9d, 0xd4, 0x37, 0xa1, 0x03, 0x67, 0xe9, 0xcb, 0xf9, 0x87, 0x56, 0x78, 0x7a, 0x0b, 0xcb, 0x42, 0xd9, 0xed, 0x1b, 0x5a, 0x29, 0x3f, 0x5b, 0x5e, 0x6b, 0xa6, 0xf1, 0x9c, 0x68, 0x8d, 0x87, 0x73, 0x70, 0x07, 0x33, 0x0d, 0xc8, 0x73, 0xa4, 0x19, 0x7f, 0x6d, 0x3c, 0x76, 0x14, 0x0a, 0x8c, 0xc6, 0x5f, 0xdf, 0xfb, 0x2e, 0x87, 0x38, 0x1e, 0x03, 0xe7, 0x3a, 0xe6, 0xb7, 0x35, 0x99, 0xab, 0x8f, 0xc5, 0x62, 0x04, 0xaf, 0xd6, 0x81, 0x66, 0xe8, 0xa5, 0x35, 0xc5, 0x53, 0x9d, 0x0e, 0x8a, 0xa3, 0x6b, 0x5c, 0x76, 0x76, 0x71, 0x07, 0x4f, 0x5d, 0xdc, 0xc2, 0x4b, 0x6f, 0xdd, 0xc1, 0x78, 0x34, 0x2a, 0x4d, 0xe3, 0x54, 0xcc, 0x65, 0x83, 0x30, 0x9f, 0x63, 0x39, 0x9f, 0x43, 0x93, 0x3a, 0xf4, 0x9b, 0xa0, 0xa3, 0xbc, 0xf9, 0xc1, 0x67, 0xe4, 0xbf, 0xdd, 0x6d, 0x3a, 0x72, 0xa7, 0xce, 0x6e, 0xaf, 0x9e, 0xf3, 0x3f, 0xab, 0xed, 0xe2, 0x1f, 0xc4, 0x19, 0xf7, 0x4c, 0x47, 0x86, 0xbc, 0x28, 0xc4, 0xeb, 0xb6, 0x1f, 0x58, 0x30, 0x0b, 0x99, 0xc5, 0xbd, 0xb2, 0x35, 0x2d, 0xb9, 0xae, 0x31, 0x86, 0x7f, 0xfc, 0x8f, 0x7e, 0x03, 0xce, 0xf4, 0x00, 0xcf, 0xfe, 0x87, 0x3f, 0xc6, 0xd3, 0x27, 0x03, 0x64, 0x57, 0x1f, 0x06, 0xda, 0xf5, 0x8d, 0x10, 0xbc, 0xfa, 0x78, 0xb5, 0x5d, 0x47, 0x71, 0x3f, 0x5b, 0xb3, 0x7d, 0x55, 0xbf, 0xff, 0x59, 0xf7, 0xc4, 0xa6, 0xf5, 0x97, 0x7a, 0xef, 0xad, 0xee, 0x2f, 0x01, 0xc9, 0x33, 0x0d, 0xcf, 0x7c, 0xe8, 0x87, 0xf1, 0xfa, 0x6b, 0x6f, 0x60, 0xff, 0x1e, 0x67, 0xb4, 0x6f, 0xf5, 0x77, 0x30, 0x38, 0x3e, 0x04, 0x00, 0xbc, 0xf6, 0xda, 0xbb, 0x82, 0x73, 0x03, 0x1c, 0x8f, 0x33, 0x38, 0x16, 0x3f, 0xd0, 0x7d, 0x87, 0xa1, 0xd3, 0x71, 0x70, 0x30, 0x5d, 0x3e, 0xf0, 0x9e, 0x3f, 0xeb, 0xf9, 0x72, 0x02, 0x1c, 0x65, 0x95, 0x17, 0xc2, 0xaf, 0x3e, 0x93, 0xba, 0x7b, 0xee, 0x03, 0x20, 0xb8, 0x42, 0x59, 0x8a, 0x24, 0x8f, 0x91, 0x25, 0x21, 0xe2, 0x64, 0x89, 0x3c, 0x4b, 0x51, 0xe0, 0x3a, 0x0a, 0x96, 0xc0, 0xb0, 0x52, 0x68, 0x26, 0xdf, 0xe3, 0x7a, 0x35, 0x1b, 0x9e, 0x67, 0xc1, 0xb2, 0x0d, 0xf8, 0x4e, 0x4f, 0x36, 0xb3, 0xbc, 0x48, 0x2d, 0x91, 0x64, 0x29, 0x18, 0x2b, 0x90, 0x15, 0xdc, 0x23, 0x9f, 0xee, 0xfd, 0x24, 0x8d, 0x90, 0xa4, 0x40, 0x92, 0x46, 0x9c, 0x85, 0xed, 0xfa, 0x38, 0x3e, 0x3e, 0xe2, 0x84, 0xa7, 0x76, 0xa3, 0xc4, 0xa0, 0xd6, 0x75, 0xee, 0xac, 0x99, 0x65, 0x19, 0x86, 0xc3, 0xa1, 0xd4, 0x72, 0x53, 0xe2, 0xd7, 0x6c, 0x36, 0xc3, 0xe1, 0xe1, 0x21, 0x1a, 0x8d, 0x86, 0x64, 0x97, 0xab, 0x41, 0x29, 0xb4, 0xab, 0xd7, 0x75, 0x03, 0xba, 0xc1, 0x60, 0x5a, 0x3a, 0xf2, 0x48, 0xa8, 0x57, 0x74, 0x1d, 0x59, 0x9e, 0x20, 0x0e, 0x42, 0x34, 0x9a, 0x7e, 0x69, 0x85, 0xc7, 0xef, 0xcd, 0x95, 0x35, 0xf4, 0xe9, 0xc9, 0x4c, 0x1a, 0xbd, 0xb4, 0x5a, 0x2d, 0xb9, 0x2a, 0x22, 0xbb, 0xd4, 0x24, 0x4e, 0x4b, 0x69, 0x7c, 0x14, 0xc9, 0x4a, 0x46, 0x2e, 0xd4, 0xc4, 0x54, 0x1b, 0x7a, 0x6a, 0xde, 0xa7, 0xd3, 0xa9, 0x84, 0xf3, 0xa9, 0x89, 0x51, 0x39, 0x42, 0x79, 0x91, 0x95, 0x06, 0x12, 0x6a, 0x1c, 0xa8, 0x3e, 0x75, 0x3a, 0x1d, 0xc1, 0xa0, 0x4f, 0x45, 0xe1, 0x4e, 0xc4, 0x99, 0xc2, 0xcf, 0x3a, 0xdb, 0x72, 0xd7, 0x08, 0xdf, 0xc4, 0x28, 0xa7, 0x08, 0x59, 0x0a, 0xc8, 0xa2, 0x04, 0x36, 0x6a, 0x64, 0x8b, 0xa2, 0xc0, 0xe3, 0x8f, 0x3f, 0x2e, 0x9b, 0x93, 0xd1, 0x68, 0xc4, 0x33, 0xd0, 0x5d, 0x17, 0xad, 0x56, 0x0b, 0x9a, 0xa6, 0x61, 0x3a, 0x9d, 0xca, 0xc6, 0x96, 0xee, 0x3d, 0x72, 0xcb, 0x5b, 0x2c, 0x16, 0xb0, 0x9d, 0x55, 0x24, 0xad, 0x3a, 0x0c, 0xd2, 0x83, 0x14, 0x07, 0x61, 0x18, 0x62, 0xb9, 0x5c, 0x96, 0x90, 0x66, 0x8e, 0x56, 0xae, 0x9c, 0x44, 0xc9, 0xe5, 0xcf, 0x28, 0x72, 0x20, 0xcf, 0x0b, 0xa4, 0x49, 0x26, 0x49, 0x64, 0x74, 0xf3, 0x1b, 0x86, 0x21, 0xe0, 0xa8, 0x32, 0x04, 0xcc, 0x90, 0xa3, 0xc8, 0xb1, 0x31, 0xa5, 0xac, 0x0a, 0xb9, 0xab, 0x59, 0xcb, 0x2a, 0x1c, 0xa7, 0x69, 0x1a, 0x98, 0x7e, 0xb6, 0xb3, 0x1c, 0x63, 0x0c, 0x59, 0xaa, 0xb0, 0x2b, 0x99, 0x88, 0x8c, 0x60, 0x0c, 0x4c, 0xd3, 0xc1, 0x34, 0x1d, 0xb9, 0xb8, 0xb0, 0x54, 0xdc, 0xd4, 0xef, 0xcf, 0x6f, 0xc4, 0x15, 0x21, 0x83, 0xde, 0x14, 0x9a, 0xea, 0xc9, 0xd7, 0xba, 0x2a, 0x4b, 0x53, 0x5f, 0x0f, 0xc1, 0x1c, 0xaa, 0x1c, 0x4d, 0x6d, 0x7e, 0x48, 0x6a, 0x42, 0x5d, 0x2c, 0x41, 0x4e, 0xf4, 0xf5, 0x74, 0x33, 0x6f, 0x62, 0x98, 0x57, 0x27, 0x70, 0xd5, 0x27, 0x5e, 0x2d, 0xce, 0xd5, 0x55, 0x84, 0x7a, 0x40, 0x91, 0x26, 0x53, 0x2d, 0xca, 0xea, 0x87, 0x43, 0xcd, 0xa7, 0xaf, 0x1e, 0x6c, 0xaa, 0x27, 0xfb, 0x26, 0xed, 0x7a, 0x35, 0x19, 0xaf, 0xba, 0x7e, 0xe0, 0x72, 0xb4, 0x5c, 0x90, 0x89, 0x56, 0x0e, 0x55, 0x74, 0x9d, 0x4a, 0x06, 0x3f, 0x39, 0x15, 0x63, 0xa6, 0x48, 0xf9, 0x52, 0x68, 0x86, 0xb9, 0x31, 0x6d, 0xae, 0xea, 0x51, 0x9f, 0xa6, 0x29, 0x82, 0xc1, 0xe7, 0xd0, 0xe8, 0x5e, 0x80, 0xd5, 0xf8, 0x18, 0x00, 0xe0, 0xa3, 0x9f, 0xf8, 0x49, 0x0c, 0x6e, 0xbf, 0x85, 0x38, 0x8d, 0x70, 0xf3, 0xc6, 0x2d, 0x1c, 0x8f, 0xb3, 0xb5, 0xfd, 0xf9, 0xa6, 0xc7, 0xf9, 0x8b, 0x57, 0x51, 0x1f, 0xde, 0xc6, 0x30, 0xe8, 0x97, 0xbc, 0x10, 0x3e, 0x68, 0x5c, 0xc3, 0xce, 0xbd, 0x08, 0xa8, 0x37, 0x71, 0xee, 0x85, 0x57, 0x10, 0xf4, 0x9a, 0x38, 0xf1, 0x76, 0xf0, 0xc1, 0x47, 0x2f, 0x62, 0x7f, 0x7f, 0x1f, 0xad, 0x76, 0x1b, 0xbd, 0xad, 0x1d, 0xdc, 0xbb, 0x77, 0x02, 0xc7, 0xfa, 0xf6, 0x9b, 0x87, 0x56, 0xbb, 0x8d, 0xf1, 0x68, 0x84, 0x86, 0xef, 0xa1, 0x75, 0xe1, 0x11, 0x00, 0x40, 0x6f, 0x79, 0x08, 0xe7, 0xcd, 0x6b, 0xf2, 0x6b, 0x8e, 0x0e, 0xf7, 0xf1, 0xa1, 0xed, 0x04, 0xaf, 0xe0, 0xe1, 0xf5, 0x88, 0xdc, 0x0d, 0xbf, 0xb0, 0x9a, 0x29, 0x1f, 0x18, 0x2e, 0x52, 0x14, 0x39, 0x1e, 0x7f, 0x64, 0x06, 0xc0, 0xc7, 0xc7, 0x46, 0xdf, 0x85, 0xc9, 0x4b, 0xd7, 0xf1, 0xca, 0x70, 0x88, 0xa7, 0x3a, 0x9d, 0x6f, 0xeb, 0xb9, 0x67, 0x79, 0x86, 0x24, 0x8d, 0xd7, 0xb8, 0x1b, 0x25, 0xeb, 0x5e, 0x62, 0x95, 0x6f, 0xf8, 0x6f, 0x96, 0xa7, 0x28, 0x90, 0x83, 0x69, 0x80, 0xc6, 0xb4, 0x0a, 0xc4, 0x5a, 0x5e, 0xaf, 0xed, 0xee, 0xee, 0x4a, 0x3e, 0x42, 0xbb, 0xdd, 0xc4, 0xe0, 0xf8, 0x10, 0xaf, 0xbd, 0xf6, 0x2e, 0xf6, 0xf6, 0x7a, 0xb0, 0xfd, 0x36, 0x58, 0x7c, 0x5c, 0xfa, 0xfa, 0x47, 0x2f, 0xb5, 0x11, 0xc6, 0x06, 0x3c, 0xcf, 0x47, 0x51, 0x2c, 0x14, 0x0f, 0x7c, 0xca, 0x15, 0x07, 0x3f, 0xbb, 0x0a, 0xf5, 0x6c, 0xd1, 0xa4, 0xb7, 0x3b, 0x77, 0xd2, 0x23, 0xdb, 0xe9, 0x5c, 0x24, 0xbe, 0x71, 0x58, 0x36, 0x13, 0x0e, 0x7e, 0xba, 0xce, 0x1b, 0x70, 0x8d, 0x15, 0xc8, 0xd2, 0x14, 0x51, 0x1c, 0x20, 0x47, 0x08, 0x5d, 0x4f, 0xa0, 0xeb, 0x39, 0xda, 0x5e, 0x4f, 0x40, 0xf6, 0x06, 0x72, 0x46, 0xf7, 0x30, 0xf7, 0x45, 0x8f, 0xa3, 0x14, 0xf7, 0x6e, 0x7c, 0x0b, 0xae, 0x5f, 0x83, 0xef, 0x8b, 0x08, 0x63, 0x14, 0xd2, 0x21, 0x31, 0x49, 0x32, 0xcc, 0x47, 0x07, 0xf0, 0x3c, 0x0f, 0x9e, 0xe7, 0xc9, 0x2c, 0x6f, 0x1a, 0x98, 0x68, 0x27, 0x4b, 0x64, 0x34, 0x95, 0xb8, 0x4c, 0x9f, 0xf7, 0x20, 0xe0, 0xb2, 0x27, 0x5d, 0xd7, 0x31, 0x1c, 0x0e, 0x71, 0xfd, 0xfa, 0x75, 0xc4, 0x31, 0xd0, 0xe9, 0xf8, 0xd8, 0xda, 0xda, 0xe2, 0x53, 0xa8, 0x38, 0xbf, 0xa8, 0x38, 0xaa, 0x31, 0xc7, 0x41, 0x10, 0x4a, 0x22, 0x1b, 0x35, 0x03, 0xe4, 0x00, 0x3a, 0x9f, 0xcf, 0x4b, 0x5e, 0xed, 0x54, 0x94, 0x69, 0x6a, 0xe6, 0x11, 0x9e, 0x4d, 0x39, 0xd1, 0xc6, 0x71, 0x8c, 0x93, 0x93, 0x13, 0xcc, 0xe7, 0x73, 0xb8, 0xae, 0x8b, 0x5e, 0xaf, 0x87, 0x28, 0x8c, 0x25, 0x02, 0x41, 0xd6, 0xb2, 0x93, 0xc9, 0x04, 0x8e, 0xe3, 0x60, 0x7b, 0x7b, 0x5b, 0xae, 0x19, 0x68, 0xbd, 0x46, 0xe7, 0x26, 0x15, 0xd3, 0x76, 0xbb, 0x5d, 0x9a, 0xdc, 0xa9, 0x96, 0xd0, 0xe7, 0x36, 0xcd, 0x56, 0xff, 0x9e, 0x1c, 0xe1, 0x6c, 0xdb, 0x96, 0x6c, 0xf5, 0x93, 0x93, 0x13, 0x91, 0xb6, 0xe6, 0xa1, 0xd3, 0xe9, 0xc0, 0x75, 0xb9, 0xf4, 0x0f, 0x8c, 0xa3, 0x87, 0x59, 0x5a, 0x48, 0x56, 0xfc, 0x46, 0xe3, 0x2b, 0x25, 0xed, 0xb3, 0xdb, 0xed, 0x42, 0xd3, 0x34, 0xd9, 0x84, 0xa4, 0x69, 0x8a, 0xc3, 0xc3, 0x43, 0xb9, 0xd6, 0x20, 0x88, 0xbf, 0xd9, 0x6c, 0x22, 0x08, 0x02, 0x1c, 0x1e, 0x1e, 0x22, 0x08, 0x02, 0x89, 0x96, 0x58, 0x96, 0x85, 0xf9, 0x7c, 0x2e, 0xa7, 0x6e, 0xd3, 0x34, 0x31, 0x1c, 0x0e, 0x4b, 0xf1, 0xd6, 0xea, 0x20, 0x4d, 0x4d, 0x83, 0xe7, 0x71, 0xeb, 0x5b, 0xda, 0xd7, 0xab, 0x79, 0xee, 0x71, 0x1c, 0xc3, 0xf3, 0x3c, 0xec, 0xec, 0xec, 0xac, 0x12, 0x17, 0xd5, 0xc8, 0x3a, 0x35, 0xdb, 0x9c, 0x2e, 0x6e, 0x95, 0xa8, 0xa5, 0xee, 0x4c, 0xa0, 0xe4, 0x80, 0xaf, 0xa0, 0x08, 0x43, 0x61, 0xed, 0x15, 0x42, 0x03, 0x58, 0x48, 0x07, 0x34, 0xb5, 0xb8, 0x3b, 0x56, 0x6d, 0x0d, 0x8a, 0x87, 0x12, 0x81, 0xa9, 0x99, 0x9a, 0x02, 0x23, 0x17, 0x30, 0x0c, 0x53, 0x76, 0x8b, 0x71, 0x9c, 0x88, 0x0b, 0x9b, 0x49, 0x7b, 0x4c, 0x5d, 0xb7, 0x4b, 0x4c, 0x70, 0x06, 0x1d, 0x59, 0x5a, 0x60, 0x99, 0x86, 0x92, 0xfc, 0x62, 0x99, 0x8e, 0xd2, 0x78, 0xe4, 0x92, 0xec, 0x41, 0x52, 0x02, 0x95, 0x50, 0x41, 0xd7, 0xa2, 0x5a, 0x18, 0x57, 0xab, 0x89, 0x4c, 0x98, 0xf9, 0x27, 0x6b, 0x7a, 0x7c, 0xc6, 0x00, 0xdb, 0xb6, 0xc4, 0xcd, 0x82, 0x35, 0x68, 0x89, 0x9b, 0x72, 0xa4, 0xa5, 0xe2, 0x4e, 0xdd, 0xf3, 0x8a, 0x04, 0xe4, 0xad, 0xb1, 0x41, 0xe9, 0xfa, 0x33, 0xc6, 0x60, 0x8b, 0x78, 0x3f, 0x95, 0xc4, 0x41, 0xef, 0x0d, 0xed, 0xb2, 0xd4, 0x9d, 0x98, 0xca, 0x87, 0x98, 0x4e, 0xa7, 0x82, 0xc9, 0x9b, 0xc1, 0xb6, 0xf9, 0x64, 0x91, 0xa6, 0x11, 0x26, 0xd3, 0x11, 0x8a, 0x22, 0x83, 0xef, 0xd7, 0x78, 0xf7, 0x19, 0x87, 0xc8, 0x32, 0x9e, 0xd5, 0x6b, 0x59, 0x0e, 0x8a, 0x8c, 0xdc, 0xfd, 0x32, 0x64, 0x19, 0xa5, 0xd6, 0x65, 0x00, 0x32, 0xe8, 0xba, 0x58, 0x6d, 0x58, 0x3c, 0x91, 0xab, 0x5e, 0x6f, 0x48, 0x69, 0x0c, 0x6f, 0xb6, 0xc4, 0x7d, 0xa6, 0xf3, 0xc9, 0x33, 0xce, 0x42, 0x49, 0xca, 0xa1, 0x4e, 0x58, 0x35, 0x0e, 0xa2, 0x0f, 0x8f, 0xe3, 0x38, 0x30, 0xb3, 0x0b, 0xf8, 0xf4, 0xaf, 0xff, 0x73, 0x44, 0xb3, 0x23, 0xfc, 0xab, 0x7f, 0xfb, 0x37, 0xf0, 0x3c, 0x1f, 0x5b, 0x0f, 0x3d, 0x8a, 0x68, 0x76, 0x04, 0xcb, 0xb0, 0x71, 0x59, 0x40, 0xdb, 0x40, 0x07, 0xef, 0x17, 0x85, 0x61, 0x53, 0x91, 0xbf, 0x75, 0x67, 0x80, 0x4b, 0x17, 0x1f, 0xc2, 0xe8, 0xd8, 0x40, 0x1a, 0xae, 0xae, 0xf5, 0x93, 0xcf, 0x3c, 0x06, 0xbc, 0xf0, 0x8a, 0xfc, 0x7f, 0x9a, 0xd2, 0x5b, 0x17, 0x1e, 0xc1, 0xf5, 0xfd, 0xaf, 0x00, 0x00, 0x2e, 0x5f, 0xb9, 0x84, 0x93, 0xc1, 0xe1, 0xda, 0x74, 0x7e, 0x96, 0x4b, 0xdc, 0x7c, 0xe7, 0x1c, 0x2c, 0xc3, 0xc6, 0x68, 0x34, 0x81, 0xe7, 0xfb, 0x92, 0x54, 0x37, 0x3e, 0x99, 0x60, 0xa7, 0xf2, 0xb5, 0x4f, 0x75, 0x3a, 0x78, 0xe9, 0x24, 0x14, 0xcd, 0x91, 0x89, 0x28, 0x0a, 0xe0, 0xfb, 0x9e, 0x68, 0x60, 0xc9, 0xce, 0x93, 0x17, 0xa9, 0x55, 0x73, 0x96, 0x29, 0x2e, 0x8d, 0x4c, 0xf1, 0x62, 0xe7, 0x07, 0xe0, 0x96, 0xb1, 0x42, 0x01, 0x9e, 0xf8, 0xc1, 0xcb, 0x18, 0x3f, 0xd6, 0xc1, 0xad, 0x3f, 0xbb, 0x86, 0x57, 0xde, 0xba, 0x89, 0x9d, 0x33, 0x20, 0x78, 0xfa, 0xb3, 0x67, 0x87, 0x43, 0x68, 0x5a, 0x5d, 0x40, 0xd9, 0x65, 0x79, 0x1c, 0xfd, 0xe2, 0xe1, 0x11, 0x04, 0xf9, 0xa5, 0x32, 0x35, 0x90, 0xfe, 0x9f, 0x34, 0xc0, 0xab, 0x04, 0xc4, 0x0c, 0x6a, 0xff, 0x6e, 0x09, 0xb8, 0xfb, 0xa1, 0x7e, 0x86, 0xd7, 0x5e, 0x7b, 0x17, 0x07, 0xc3, 0x04, 0x71, 0x38, 0xc6, 0x7b, 0xde, 0xf3, 0x1e, 0xf4, 0x5b, 0x3a, 0x0e, 0x86, 0x09, 0x4e, 0x87, 0xd7, 0xd0, 0xed, 0xf4, 0x64, 0x13, 0xa5, 0x16, 0x76, 0xc7, 0x4a, 0xb1, 0x5c, 0xce, 0x61, 0x30, 0x06, 0x53, 0x04, 0x24, 0xf0, 0xcf, 0xb6, 0x88, 0x34, 0xcd, 0x79, 0xfe, 0x3c, 0x31, 0x9c, 0xa1, 0x01, 0x9a, 0xce, 0x64, 0xa0, 0x89, 0x69, 0x76, 0x45, 0x9e, 0x78, 0x0c, 0x20, 0x86, 0xae, 0x65, 0x30, 0xf5, 0x0c, 0x9a, 0x9e, 0xa2, 0x40, 0x8a, 0x56, 0x33, 0xc2, 0x32, 0x98, 0x21, 0x08, 0x27, 0xd0, 0x8c, 0x10, 0x86, 0x11, 0x03, 0x2c, 0x17, 0xf9, 0x0d, 0x3a, 0x30, 0xcb, 0x01, 0x06, 0x58, 0x36, 0x93, 0x07, 0x73, 0x1c, 0xc7, 0x18, 0x8d, 0x46, 0x18, 0x8f, 0x17, 0x68, 0x75, 0xba, 0x12, 0xbe, 0xe5, 0x3d, 0x4e, 0xc1, 0x87, 0x91, 0x3c, 0x95, 0x8d, 0xea, 0x7c, 0x3e, 0x97, 0x07, 0x38, 0x4d, 0x65, 0x34, 0x18, 0x78, 0x9e, 0x57, 0xf2, 0xd6, 0x20, 0x28, 0x96, 0xfe, 0x9d, 0x6d, 0x5b, 0x25, 0xf3, 0x96, 0x46, 0xa3, 0x21, 0x77, 0xc9, 0xb7, 0x6f, 0xdf, 0x46, 0xaf, 0xd7, 0x93, 0x45, 0xd3, 0xf7, 0x7d, 0x34, 0x1a, 0x8d, 0x92, 0x0c, 0x8a, 0x0a, 0x1f, 0x45, 0x85, 0x12, 0x91, 0xd1, 0xb6, 0x6d, 0x74, 0x3a, 0x1d, 0xe9, 0xe9, 0x4e, 0x44, 0x2d, 0xc6, 0x98, 0x64, 0xa9, 0x47, 0x51, 0x04, 0x0d, 0xae, 0xfc, 0xbe, 0x96, 0x65, 0xa1, 0x51, 0x6f, 0xa2, 0x51, 0x6f, 0xca, 0xd7, 0x00, 0x00, 0xed, 0x76, 0x1b, 0xe3, 0xf1, 0x18, 0x07, 0x07, 0x07, 0x58, 0x2e, 0x43, 0xb4, 0xdb, 0x4d, 0x38, 0x8e, 0x83, 0xa3, 0xa3, 0x23, 0xb8, 0xae, 0x2b, 0x24, 0x63, 0x01, 0xa2, 0x08, 0x30, 0x0c, 0xa0, 0xdf, 0x6f, 0xa3, 0xdf, 0xef, 0x4b, 0xa2, 0xa8, 0x4a, 0x1a, 0xa6, 0xa6, 0x87, 0x6b, 0xef, 0x73, 0x9c, 0x3b, 0xdf, 0x92, 0x59, 0xe5, 0x34, 0x28, 0x10, 0xdc, 0x5d, 0x45, 0x3d, 0xd5, 0x15, 0x60, 0xa3, 0xc9, 0x75, 0xeb, 0x61, 0x10, 0xe3, 0xfe, 0xfd, 0xfb, 0xf2, 0x6c, 0x1c, 0x0e, 0x87, 0x92, 0x9d, 0xee, 0x79, 0x1e, 0x46, 0xa3, 0x09, 0x74, 0xdd, 0xc4, 0xd6, 0xd6, 0x0e, 0x0c, 0xc3, 0xc0, 0xc1, 0xc1, 0x01, 0x4e, 0x4e, 0x86, 0x30, 0x0c, 0x43, 0x30, 0xf5, 0x53, 0x09, 0xa7, 0xd3, 0xf4, 0x7c, 0x70, 0x70, 0x20, 0xeb, 0xe6, 0x72, 0x19, 0x22, 0x8a, 0x12, 0x8c, 0xc7, 0x53, 0x39, 0xf0, 0x35, 0x1a, 0x2d, 0x49, 0xbc, 0xdb, 0xd9, 0xd9, 0x59, 0x33, 0xe3, 0x52, 0xe3, 0xcc, 0x47, 0xc3, 0x19, 0xcf, 0x7a, 0x70, 0x0d, 0xc4, 0x31, 0x4f, 0x81, 0xf4, 0x7d, 0x4f, 0x26, 0x50, 0x82, 0x71, 0xcb, 0xdd, 0xfb, 0xf7, 0x0f, 0xe5, 0x3d, 0xa2, 0x5f, 0x7d, 0xec, 0x23, 0xbf, 0x59, 0xd5, 0x31, 0xd3, 0x0d, 0xa2, 0xc6, 0xc1, 0x55, 0xa1, 0x5c, 0x9e, 0x77, 0x5c, 0x96, 0xad, 0xa9, 0xc5, 0x89, 0x8a, 0x88, 0x1a, 0x87, 0xb7, 0xce, 0xd4, 0x2e, 0x43, 0x72, 0xea, 0xee, 0x98, 0xcb, 0xca, 0xf4, 0x95, 0x8e, 0x5b, 0x24, 0x53, 0xf1, 0x98, 0x4a, 0x1d, 0x1a, 0xe3, 0x1d, 0xda, 0x26, 0xc2, 0xd9, 0x8a, 0xe5, 0xae, 0x95, 0x26, 0x4a, 0xb5, 0xbb, 0x51, 0xcd, 0xf4, 0xab, 0x70, 0xb5, 0x7a, 0x63, 0xd0, 0x85, 0x52, 0xa7, 0xf8, 0x15, 0xf4, 0x65, 0xac, 0x49, 0x76, 0x54, 0x66, 0xaf, 0xba, 0xf3, 0xad, 0x3a, 0xd1, 0x51, 0xa7, 0xa9, 0x7e, 0x2d, 0x7d, 0x8d, 0x9a, 0x9b, 0xbb, 0x09, 0xc2, 0x54, 0x83, 0x73, 0x4a, 0x2b, 0x84, 0x8a, 0xf9, 0x07, 0x35, 0x6b, 0xea, 0xf7, 0xa6, 0xff, 0x72, 0x0d, 0x27, 0xf9, 0x36, 0x73, 0x82, 0x49, 0x96, 0xa5, 0x62, 0xc2, 0xe2, 0xd6, 0xbe, 0xbc, 0x73, 0x2c, 0x44, 0xc6, 0xb4, 0x68, 0xcc, 0x84, 0xbc, 0x87, 0xd6, 0x28, 0x9c, 0x05, 0x2c, 0xb3, 0x6e, 0x24, 0x72, 0x10, 0x45, 0xa1, 0x80, 0x8c, 0x54, 0x16, 0x3d, 0x35, 0x86, 0xe2, 0x7a, 0xeb, 0xe5, 0x24, 0xaf, 0xaa, 0xc4, 0x88, 0x88, 0x24, 0xcf, 0x3c, 0xce, 0xad, 0x15, 0x3f, 0xfc, 0xb1, 0x8f, 0xa3, 0xd0, 0x2c, 0xf8, 0xda, 0x01, 0x76, 0x1f, 0x7a, 0x0f, 0x4c, 0xd3, 0xc2, 0xf3, 0x7f, 0xfe, 0xff, 0xe1, 0x89, 0xa7, 0x3f, 0x02, 0xdb, 0x04, 0xba, 0xbd, 0x1e, 0xba, 0xbd, 0x1e, 0x5c, 0xd7, 0x46, 0xbb, 0xd5, 0xc1, 0xc5, 0xdd, 0x3e, 0x76, 0xb6, 0x1b, 0x68, 0x36, 0x5c, 0x74, 0x9a, 0x26, 0x2c, 0xdb, 0x83, 0x9e, 0x9d, 0xe0, 0xcd, 0x5b, 0x21, 0x0c, 0xd3, 0x2d, 0xe5, 0x75, 0x7f, 0xf0, 0x82, 0x8e, 0xfa, 0xdd, 0x23, 0x6c, 0xd5, 0x7c, 0x2c, 0x92, 0x18, 0xf5, 0xbb, 0x47, 0xb0, 0x1e, 0xee, 0x22, 0x30, 0x1a, 0x70, 0xb2, 0x05, 0x0e, 0x4e, 0xa7, 0xd8, 0xee, 0x6f, 0xc3, 0xc9, 0x16, 0xb8, 0x75, 0x70, 0x02, 0x5b, 0xd1, 0x9f, 0x4f, 0xe7, 0x4b, 0xfc, 0xdf, 0x9f, 0xfb, 0x1c, 0xb6, 0x1f, 0x7b, 0x2f, 0x2e, 0x3f, 0x7a, 0x09, 0xd1, 0x29, 0x97, 0x33, 0xf5, 0x77, 0xfb, 0xa8, 0xb5, 0xb7, 0xf0, 0xd6, 0x9b, 0xdf, 0xc2, 0xa5, 0x7e, 0x03, 0xad, 0x9d, 0x73, 0x48, 0xa2, 0x0c, 0xd6, 0x1b, 0xd7, 0xe0, 0x9f, 0x9c, 0x80, 0xd5, 0x9b, 0x40, 0xcc, 0xa7, 0xb2, 0x7a, 0x94, 0xe0, 0x4f, 0x0f, 0xbf, 0x02, 0xaf, 0xf3, 0x18, 0xb2, 0x2c, 0xc5, 0x64, 0x32, 0x86, 0xef, 0xd7, 0x94, 0xdd, 0x39, 0x6f, 0x76, 0x0b, 0xe4, 0xb2, 0xa8, 0x33, 0xfd, 0xc1, 0x53, 0xfc, 0x4f, 0x3b, 0x31, 0xee, 0xde, 0x9b, 0xe1, 0xc2, 0xfb, 0x78, 0xfb, 0xe0, 0x34, 0x1c, 0xbc, 0xff, 0x3b, 0xf6, 0x10, 0x9f, 0xa6, 0x78, 0xf1, 0x74, 0x8c, 0xa7, 0x44, 0x42, 0x5c, 0xcd, 0xb2, 0xe4, 0x2f, 0xd9, 0x60, 0x30, 0x1d, 0xff, 0x39, 0x35, 0xe0, 0x88, 0x1c, 0xf2, 0x2a, 0x3f, 0xa5, 0xa4, 0xe7, 0x3e, 0xc3, 0xeb, 0xbc, 0x6a, 0x24, 0x53, 0x65, 0x6c, 0x17, 0x59, 0x2e, 0x27, 0xd6, 0x1b, 0xb7, 0xee, 0x22, 0x4b, 0xf9, 0x2e, 0xf6, 0xf4, 0xf4, 0x14, 0x17, 0x77, 0xfb, 0xb8, 0x7f, 0x34, 0x87, 0x8e, 0x08, 0x93, 0xc0, 0x84, 0x8e, 0x00, 0x05, 0x5c, 0xa4, 0x99, 0x56, 0xfa, 0x95, 0xeb, 0x75, 0x8c, 0x46, 0x73, 0xe8, 0x86, 0x25, 0x6c, 0x63, 0xb9, 0x4b, 0x9c, 0x61, 0xe8, 0xb0, 0x4d, 0x5b, 0x04, 0xe4, 0x08, 0xbb, 0x5a, 0x9d, 0xc9, 0x06, 0x85, 0x69, 0x39, 0x2c, 0xcb, 0x83, 0x69, 0x30, 0xd8, 0x16, 0x83, 0x65, 0xe5, 0x80, 0x16, 0xa3, 0xc8, 0x03, 0x64, 0xc5, 0x12, 0x45, 0x1e, 0x63, 0xff, 0xde, 0x9b, 0x08, 0x83, 0x29, 0x80, 0x18, 0x4c, 0x4b, 0x91, 0xa4, 0x0b, 0x84, 0xc1, 0x14, 0x69, 0x12, 0xa1, 0x28, 0x52, 0x6c, 0x77, 0xb6, 0xe0, 0xba, 0x1e, 0xc0, 0x34, 0x4c, 0x67, 0x73, 0x1c, 0x0d, 0x8e, 0x71, 0x72, 0x3a, 0x44, 0x92, 0xa4, 0xb0, 0x6c, 0x07, 0x71, 0x9a, 0x23, 0x8a, 0x62, 0x4c, 0xa7, 0x33, 0x4c, 0x26, 0x53, 0x84, 0x61, 0x04, 0xc6, 0x34, 0x98, 0xa6, 0x05, 0xc3, 0x30, 0xe1, 0x3a, 0xb6, 0xd4, 0x61, 0xd3, 0x61, 0x4e, 0x0d, 0x00, 0x21, 0x62, 0xaa, 0xd6, 0xb9, 0x8a, 0xde, 0x39, 0x0e, 0x9f, 0x46, 0x29, 0x84, 0xc4, 0x30, 0x0c, 0x34, 0x1a, 0x0d, 0xe9, 0xd6, 0x46, 0x1c, 0x26, 0x95, 0x7f, 0xa2, 0x36, 0xfe, 0x96, 0x65, 0xcb, 0xf3, 0x46, 0x85, 0xb4, 0x69, 0x48, 0xa8, 0x72, 0xa0, 0x88, 0xac, 0xc6, 0xcf, 0xce, 0x42, 0x9c, 0x27, 0x3a, 0x77, 0xb8, 0x43, 0x81, 0x24, 0x89, 0xb1, 0x0c, 0x96, 0x98, 0xcf, 0x67, 0x98, 0x4c, 0x27, 0x98, 0xcf, 0x56, 0x61, 0x2c, 0x1c, 0xfa, 0xb7, 0xa5, 0x33, 0x1d, 0x7d, 0x6f, 0xc3, 0x30, 0xd0, 0x6a, 0x35, 0xd1, 0xe9, 0x34, 0x60, 0x18, 0x5a, 0xa9, 0x20, 0xab, 0xa8, 0x04, 0x31, 0xbc, 0xa3, 0x88, 0x67, 0xa0, 0x37, 0x9b, 0x35, 0xb4, 0xda, 0x2d, 0xe9, 0x45, 0x4f, 0xa8, 0x83, 0xef, 0xfb, 0xe8, 0x74, 0x3a, 0xd8, 0xd9, 0xd9, 0x41, 0xb7, 0xcb, 0xcd, 0x91, 0xc6, 0xe3, 0x11, 0x8e, 0x8f, 0x8f, 0xb1, 0x58, 0xcc, 0xf9, 0x99, 0x9e, 0x72, 0x78, 0x9a, 0x31, 0xbe, 0xe3, 0xef, 0xf5, 0x7a, 0x72, 0x78, 0x68, 0x36, 0x9b, 0xb2, 0xd1, 0xa8, 0xd7, 0x1b, 0x6b, 0x19, 0x15, 0x74, 0x6e, 0x73, 0xf4, 0x82, 0x4f, 0xe5, 0x3c, 0x8a, 0x95, 0x1b, 0xd1, 0x9c, 0x3f, 0x7f, 0x5e, 0xa0, 0x01, 0x2e, 0x34, 0x4d, 0x47, 0xbf, 0xdf, 0x97, 0xa9, 0x71, 0x27, 0x27, 0x27, 0x58, 0x2c, 0x16, 0xa8, 0xd7, 0xeb, 0x38, 0x7f, 0xfe, 0x3c, 0x96, 0xcb, 0xb9, 0x24, 0xfe, 0xa9, 0x86, 0x31, 0x74, 0xa6, 0x37, 0x1a, 0x2d, 0xe1, 0xc8, 0xb7, 0x94, 0x24, 0x42, 0x6a, 0xbc, 0x78, 0xcd, 0x8d, 0x24, 0x71, 0x58, 0xaa, 0xb9, 0x54, 0xeb, 0x3e, 0x15, 0x42, 0x57, 0xe3, 0x29, 0x55, 0xf8, 0xb4, 0xca, 0x96, 0xae, 0x32, 0xd3, 0xab, 0x04, 0x39, 0x95, 0xdd, 0xaa, 0x16, 0xbf, 0x92, 0x87, 0x76, 0x45, 0x3f, 0xae, 0xe6, 0x65, 0x57, 0x8b, 0x64, 0x29, 0x5c, 0xa5, 0xf2, 0x7c, 0xd7, 0xa6, 0x7d, 0xd3, 0x90, 0xdd, 0x39, 0x25, 0xd7, 0x14, 0x05, 0x13, 0xcc, 0x6c, 0xc8, 0x10, 0x03, 0x4e, 0x6e, 0x63, 0x72, 0x07, 0xcc, 0x3b, 0xd2, 0x18, 0xae, 0x5b, 0xdb, 0xb8, 0x4b, 0xa7, 0xd7, 0x12, 0x45, 0xb1, 0x30, 0xb4, 0x60, 0x15, 0xf2, 0x18, 0x3f, 0x54, 0x92, 0x64, 0x95, 0x76, 0xc6, 0x0f, 0x66, 0x2a, 0xfc, 0xbc, 0x68, 0x12, 0x29, 0x50, 0x7d, 0xce, 0xea, 0x01, 0xa8, 0x26, 0x07, 0xd1, 0x35, 0x50, 0x35, 0xed, 0x85, 0x4c, 0xef, 0xb1, 0x4b, 0x0c, 0xd1, 0xea, 0xbf, 0xa9, 0x26, 0xa0, 0xa9, 0x08, 0x04, 0xff, 0x19, 0x29, 0xa2, 0x38, 0x04, 0x90, 0x8b, 0x0f, 0x1a, 0x10, 0x04, 0x4b, 0x79, 0x03, 0x03, 0xb9, 0xf0, 0x2a, 0xce, 0x61, 0x99, 0x1a, 0x0c, 0x43, 0x2f, 0x73, 0x03, 0x18, 0xd6, 0xa6, 0xc3, 0x15, 0x6c, 0xae, 0xba, 0xf1, 0xe9, 0x2b, 0x28, 0x14, 0x90, 0x2a, 0x85, 0x52, 0x13, 0xa7, 0x1c, 0xfe, 0xf4, 0xfc, 0x3f, 0xfa, 0x89, 0x9f, 0xc4, 0xfb, 0x0e, 0xdf, 0xc1, 0xff, 0xf9, 0xbf, 0xff, 0x53, 0x7c, 0xf2, 0x97, 0x7e, 0x15, 0x1f, 0xfa, 0xd8, 0x8f, 0xcb, 0xf7, 0xe5, 0xa3, 0x9f, 0xf8, 0x49, 0x8c, 0x0e, 0xdf, 0x41, 0x7b, 0xe7, 0x11, 0x44, 0xb3, 0x23, 0x3e, 0x15, 0xec, 0x3c, 0xb2, 0xba, 0x87, 0x66, 0x47, 0xd2, 0xb2, 0xf5, 0x72, 0x1a, 0xe1, 0xaf, 0x9f, 0x1f, 0x21, 0x0a, 0x4f, 0x50, 0xf3, 0xbb, 0xd0, 0x35, 0xce, 0xec, 0xed, 0xb9, 0xb7, 0x30, 0xe9, 0xfe, 0x00, 0xf0, 0x11, 0xe0, 0xf0, 0xf6, 0x00, 0x3b, 0x62, 0x62, 0x9d, 0xbc, 0x74, 0x1d, 0xe6, 0x47, 0xf9, 0x94, 0x3e, 0xf9, 0xc2, 0x73, 0x88, 0xaf, 0x5c, 0xe2, 0xb0, 0xf9, 0x5b, 0x77, 0x70, 0x75, 0xb7, 0x07, 0x00, 0xd8, 0x9f, 0x84, 0xf8, 0xed, 0xcf, 0x7c, 0x06, 0x00, 0xf0, 0xd9, 0xcf, 0x7d, 0x16, 0x9f, 0x05, 0xf0, 0x89, 0x8f, 0xff, 0x04, 0x9e, 0x7a, 0xf2, 0x31, 0xc0, 0x6f, 0x4a, 0xe6, 0x7b, 0xeb, 0xc2, 0x23, 0x48, 0xa2, 0x0c, 0xe7, 0xb2, 0x63, 0xb8, 0xf7, 0x0e, 0x36, 0xc2, 0xe5, 0xdf, 0x7f, 0xf1, 0x49, 0xbc, 0x2e, 0x0e, 0xb5, 0x15, 0x52, 0xb3, 0x5a, 0x6b, 0xac, 0x26, 0xf3, 0x94, 0x47, 0xba, 0x3e, 0x80, 0x7b, 0x31, 0xbf, 0xf5, 0x39, 0xec, 0xd4, 0x1f, 0xc1, 0xb5, 0x6b, 0xd7, 0xf1, 0x22, 0x80, 0x0f, 0xff, 0xec, 0x07, 0xe4, 0xdf, 0xd1, 0xef, 0x7f, 0xe7, 0xe5, 0x6b, 0x12, 0x7e, 0x7f, 0x72, 0x34, 0x7b, 0xa0, 0x6f, 0x79, 0xd5, 0x31, 0x4e, 0x3d, 0x44, 0xce, 0xf2, 0x92, 0xa0, 0x02, 0x51, 0x4e, 0xba, 0x5b, 0xa9, 0x65, 0x0c, 0xa6, 0xe1, 0xce, 0x9b, 0xff, 0x11, 0xba, 0xf7, 0xc4, 0xda, 0xcf, 0xbc, 0x77, 0xef, 0xa4, 0xa4, 0x4c, 0x98, 0xcd, 0x81, 0xba, 0x3f, 0x55, 0x2c, 0x81, 0x1b, 0x12, 0x7d, 0x59, 0x79, 0xbf, 0x6b, 0x12, 0xda, 0xe7, 0x36, 0xb2, 0xe4, 0x0b, 0x5f, 0x80, 0x69, 0x0c, 0xba, 0xce, 0x27, 0x74, 0x7e, 0x9d, 0x74, 0xa4, 0xc9, 0x02, 0x86, 0xa9, 0xc3, 0x34, 0x72, 0x14, 0x88, 0x01, 0x04, 0x48, 0xf2, 0x19, 0x58, 0x11, 0x01, 0xc8, 0xd1, 0xdf, 0x6a, 0x20, 0xcb, 0x23, 0x64, 0x79, 0x88, 0x34, 0x5b, 0x20, 0x4e, 0xa6, 0x08, 0xe3, 0x00, 0x45, 0x91, 0x21, 0x4a, 0x0c, 0xdc, 0x18, 0x72, 0x78, 0x99, 0x78, 0x3a, 0xf4, 0x7a, 0xa5, 0x31, 0x97, 0x5d, 0x0e, 0x77, 0xa2, 0xcf, 0x28, 0xe5, 0x7a, 0x9b, 0x9a, 0xc2, 0x79, 0x29, 0x34, 0xe8, 0x1a, 0xd7, 0xc1, 0x17, 0x39, 0x64, 0x82, 0xa5, 0x6d, 0xb9, 0x52, 0xc6, 0x26, 0xb9, 0x08, 0xa6, 0x06, 0xd7, 0x61, 0x88, 0x93, 0x00, 0x8d, 0x46, 0x03, 0xdd, 0x6e, 0x57, 0xca, 0x8b, 0x09, 0x5e, 0x9f, 0xcf, 0xe7, 0x92, 0xd0, 0x45, 0x67, 0xb8, 0x1a, 0xb4, 0xc2, 0xf7, 0xb0, 0xa9, 0x7c, 0x3f, 0x66, 0xb3, 0x99, 0x8c, 0x15, 0xa5, 0x33, 0x85, 0x0c, 0x6e, 0xd4, 0xd7, 0xb0, 0xd2, 0x95, 0xe7, 0x68, 0x35, 0xbb, 0x25, 0x5f, 0x01, 0x3a, 0x7f, 0x08, 0x32, 0xa7, 0xa9, 0x78, 0x15, 0x81, 0xca, 0x1b, 0x85, 0x5e, 0xaf, 0x27, 0xa7, 0x78, 0x22, 0x9a, 0xa9, 0xee, 0x6e, 0x34, 0xa5, 0x92, 0xdc, 0x4d, 0x5d, 0x13, 0xd0, 0xa0, 0xe9, 0xba, 0x2e, 0xa6, 0xb3, 0x09, 0x66, 0xb3, 0x19, 0xe6, 0x02, 0x25, 0x23, 0x84, 0x93, 0xd6, 0xa0, 0x44, 0xe0, 0xeb, 0x76, 0xbb, 0xd8, 0xde, 0xde, 0x86, 0x65, 0x89, 0x62, 0x3c, 0x19, 0x62, 0x34, 0x1a, 0xa1, 0xdb, 0xe9, 0x4b, 0x92, 0x9e, 0x3a, 0x18, 0x91, 0x15, 0xad, 0xe3, 0x78, 0x12, 0x0d, 0xa1, 0x86, 0x82, 0x5e, 0x6f, 0xb3, 0xd9, 0x44, 0xb7, 0xcb, 0x57, 0x02, 0x27, 0x27, 0x27, 0x38, 0x3d, 0x9d, 0x4b, 0xa9, 0x2e, 0x25, 0xbd, 0xf5, 0x7a, 0x7d, 0xb9, 0x12, 0xa1, 0xa2, 0x4d, 0x7c, 0x87, 0x20, 0x08, 0x50, 0xf3, 0xea, 0xa5, 0x75, 0x01, 0xfd, 0x0c, 0x42, 0x55, 0x8e, 0x8f, 0x4f, 0x05, 0xe2, 0x92, 0x22, 0xcf, 0x01, 0xdb, 0xe6, 0xaf, 0x95, 0x9a, 0x8f, 0x28, 0x5e, 0xc0, 0xb2, 0x2c, 0x6c, 0x6f, 0x6f, 0xc3, 0xf7, 0xeb, 0x74, 0x5e, 0x1b, 0x6b, 0x3e, 0xee, 0xf4, 0x06, 0x2e, 0x16, 0x8b, 0x12, 0x61, 0x4a, 0xa5, 0xe8, 0xd3, 0x87, 0x02, 0x05, 0x8f, 0x45, 0xd5, 0x48, 0xce, 0xa5, 0xad, 0xf4, 0x92, 0x8b, 0xc5, 0x42, 0xfa, 0x29, 0x13, 0xa3, 0x1b, 0x05, 0xb1, 0xe7, 0x81, 0x48, 0x4c, 0x27, 0xd5, 0x43, 0x41, 0xcd, 0x3b, 0xaf, 0xe6, 0x6d, 0x97, 0x26, 0xd1, 0x42, 0x13, 0x28, 0x01, 0x2a, 0x01, 0x28, 0x7c, 0xa2, 0x2c, 0x8c, 0x72, 0x1a, 0x18, 0x21, 0x0d, 0xea, 0x4d, 0xa2, 0x7e, 0x50, 0x68, 0x7a, 0xa0, 0x0b, 0xa6, 0xb2, 0x37, 0xd7, 0xa3, 0x21, 0x21, 0xbb, 0xcc, 0xea, 0x9e, 0x9c, 0x8a, 0xaa, 0xba, 0xd7, 0x57, 0xe5, 0x32, 0xea, 0x07, 0xa3, 0xaa, 0xad, 0xaf, 0xa6, 0xf7, 0x54, 0x5d, 0xb9, 0x1e, 0x94, 0x08, 0x55, 0xdd, 0xbb, 0x56, 0x0f, 0xdc, 0x12, 0x7a, 0xc1, 0x98, 0x64, 0xa8, 0xaf, 0x72, 0x9b, 0x57, 0x2b, 0x0f, 0x22, 0xb8, 0xd8, 0xb6, 0x23, 0xb2, 0xdf, 0x8b, 0x4a, 0xf0, 0x4e, 0xb6, 0xf1, 0x39, 0x10, 0x1a, 0x52, 0x3d, 0xcc, 0x4b, 0x13, 0x38, 0x08, 0xaa, 0x2f, 0x36, 0x16, 0xf4, 0xea, 0xde, 0xfe, 0xdf, 0xfe, 0xeb, 0xdf, 0xc2, 0xe0, 0xf4, 0x3e, 0x7e, 0xee, 0x67, 0x7f, 0x5e, 0x74, 0xac, 0x73, 0x78, 0x1e, 0x87, 0x86, 0x3f, 0xf9, 0x73, 0x3f, 0x09, 0x00, 0xf8, 0x81, 0xef, 0xff, 0x01, 0x7c, 0xf2, 0x97, 0x7e, 0x15, 0xd1, 0xec, 0x08, 0xd1, 0xec, 0x08, 0x76, 0x7d, 0x9b, 0x43, 0x98, 0xe2, 0xbf, 0x4d, 0x22, 0x9a, 0xf8, 0x6d, 0x9c, 0x1e, 0xbe, 0x88, 0x46, 0x73, 0x0b, 0x96, 0xdb, 0x01, 0x63, 0x0c, 0x3b, 0x3b, 0x5b, 0x5c, 0xcb, 0xbe, 0xfd, 0x08, 0x5c, 0x00, 0x04, 0xaa, 0xef, 0xdc, 0x3b, 0xc0, 0x8d, 0x28, 0x83, 0x65, 0xd8, 0x78, 0xaa, 0xd3, 0xc1, 0xad, 0xbb, 0xef, 0xa0, 0x75, 0xe1, 0x11, 0x5c, 0xb9, 0x72, 0x05, 0xbf, 0xfd, 0x1f, 0x7f, 0x17, 0x00, 0x70, 0xfd, 0xdd, 0xfb, 0x6b, 0xaf, 0xf3, 0xb9, 0x2f, 0xfc, 0x31, 0x8e, 0xee, 0xbf, 0x8c, 0x7f, 0xf0, 0x2b, 0xbf, 0x29, 0x0b, 0x3a, 0xe9, 0xcf, 0xc7, 0x77, 0x26, 0x70, 0x66, 0x13, 0x3e, 0x9d, 0x03, 0x60, 0xf5, 0x26, 0x8a, 0xd9, 0x44, 0xc2, 0xee, 0xaf, 0xcf, 0x73, 0xdc, 0x7b, 0xf3, 0x0f, 0x61, 0x74, 0xbe, 0x53, 0x79, 0x2f, 0x8b, 0x15, 0x6c, 0x2c, 0xb4, 0xd5, 0x85, 0x48, 0xef, 0x3a, 0xeb, 0xf1, 0xf7, 0x1f, 0xff, 0x28, 0xb6, 0x44, 0x91, 0x7e, 0xf6, 0xe5, 0x6b, 0x38, 0x77, 0xf5, 0x11, 0x5c, 0x7e, 0xda, 0x5f, 0x2b, 0xea, 0xb8, 0x3d, 0x58, 0x93, 0xab, 0x49, 0x29, 0x1b, 0x13, 0xd9, 0xe1, 0xb4, 0xb1, 0x17, 0x68, 0x0c, 0xd3, 0x04, 0x99, 0xb1, 0x58, 0x65, 0xc2, 0xab, 0x84, 0xcf, 0x55, 0x43, 0xaa, 0x3d, 0xd8, 0x81, 0x51, 0x77, 0xf0, 0xf8, 0x07, 0x7e, 0x1a, 0xb7, 0xee, 0x0c, 0x10, 0x87, 0xe3, 0xd2, 0xf3, 0x38, 0x18, 0x26, 0xe8, 0xfa, 0x01, 0x80, 0x15, 0x6a, 0x30, 0x9b, 0xc7, 0xf2, 0xf7, 0x5d, 0x41, 0x03, 0x38, 0x1d, 0x9e, 0xc0, 0x30, 0xda, 0x70, 0x5d, 0x57, 0x66, 0xc6, 0xaf, 0xce, 0x0f, 0x21, 0x3b, 0x63, 0xdc, 0x2f, 0x9f, 0x93, 0xdf, 0x98, 0x78, 0x4d, 0x39, 0x5c, 0x23, 0x06, 0x90, 0x21, 0x4b, 0x62, 0x64, 0xf9, 0x12, 0xa9, 0x30, 0x85, 0xc9, 0x8b, 0x08, 0x05, 0x32, 0x68, 0x88, 0x30, 0x9b, 0x8d, 0x10, 0xc6, 0x33, 0x98, 0x56, 0x81, 0x9a, 0x6f, 0xc1, 0xf7, 0xeb, 0xab, 0x14, 0xc0, 0xcc, 0xc4, 0x72, 0x19, 0x60, 0x32, 0x99, 0xca, 0xcf, 0x2b, 0x4d, 0x8c, 0xba, 0xae, 0x23, 0x0b, 0x72, 0xe9, 0x44, 0xa6, 0x1a, 0xb2, 0x90, 0xc2, 0x25, 0x4a, 0x83, 0x12, 0x6a, 0x41, 0xe6, 0x32, 0xaa, 0x94, 0x92, 0x8a, 0x22, 0xa1, 0x86, 0x25, 0x8f, 0x7d, 0x64, 0xa2, 0x38, 0x84, 0x72, 0xa7, 0x4a, 0x7b, 0xde, 0x46, 0xa3, 0x29, 0x9d, 0xe2, 0x0c, 0x83, 0x50, 0x31, 0x9a, 0x36, 0xf9, 0xcf, 0x27, 0xa2, 0x9a, 0x2a, 0x4d, 0xa5, 0x42, 0xeb, 0x79, 0x9e, 0x2c, 0xca, 0xaa, 0xd9, 0x0a, 0x15, 0xcd, 0x24, 0x49, 0x71, 0xed, 0xe0, 0xae, 0x08, 0xe9, 0x01, 0x6c, 0x7b, 0x35, 0x3d, 0xf2, 0x09, 0x3f, 0x42, 0x4b, 0xc8, 0xed, 0x68, 0x72, 0xa6, 0xc1, 0x82, 0xdc, 0xd3, 0x24, 0x74, 0x2c, 0xf8, 0x56, 0x79, 0x9e, 0xa3, 0xd1, 0x68, 0xc0, 0x75, 0x5d, 0xf9, 0xb3, 0xd5, 0x02, 0x47, 0xb2, 0x32, 0x22, 0x8a, 0x75, 0x3a, 0x9d, 0x92, 0x15, 0x6b, 0x96, 0x65, 0x92, 0x74, 0x46, 0x3a, 0x7e, 0xde, 0xbc, 0x10, 0xea, 0xc1, 0xe4, 0x90, 0xe9, 0x38, 0x8e, 0x6c, 0x7c, 0x26, 0x93, 0x49, 0x89, 0x8d, 0x5f, 0xab, 0xd5, 0xd0, 0x68, 0x34, 0x30, 0x1c, 0x8e, 0x25, 0xf7, 0x8a, 0x87, 0xd7, 0x44, 0xe2, 0xf5, 0xea, 0x22, 0x3e, 0xb6, 0x21, 0xad, 0x57, 0xfb, 0xfd, 0x06, 0xea, 0xf5, 0xba, 0x7c, 0x3e, 0xb4, 0xff, 0x27, 0xb7, 0x37, 0x35, 0x09, 0x4e, 0xc6, 0xab, 0x9a, 0xba, 0xe4, 0x99, 0xd1, 0xb5, 0xa0, 0xd4, 0x3a, 0xda, 0xdb, 0xab, 0x3a, 0x7b, 0x72, 0xac, 0x8b, 0xe3, 0x18, 0xbe, 0xef, 0xe3, 0xe2, 0x85, 0x4b, 0xfc, 0xda, 0x68, 0x26, 0x82, 0xa5, 0x90, 0xbb, 0xa9, 0x72, 0xb1, 0x2a, 0x13, 0xb4, 0x4a, 0x0e, 0xa8, 0xee, 0xda, 0x89, 0x64, 0xa8, 0x6a, 0x4e, 0x55, 0xdf, 0x5a, 0xda, 0x25, 0xa8, 0xd3, 0x2b, 0x7d, 0x2f, 0xbe, 0x03, 0xd8, 0x1c, 0xde, 0x51, 0xd5, 0x87, 0x52, 0x43, 0x90, 0xe7, 0x19, 0x18, 0xcb, 0x14, 0xc8, 0xc9, 0x5a, 0x93, 0x5c, 0x95, 0x0b, 0x08, 0xa4, 0x3c, 0x8a, 0x32, 0x9f, 0x69, 0x52, 0xe6, 0x11, 0x79, 0x2b, 0x42, 0x1d, 0x4d, 0xa3, 0xb4, 0x93, 0x2c, 0x0a, 0xc0, 0xb6, 0x9d, 0x07, 0x3a, 0x71, 0x69, 0xcc, 0x50, 0xe0, 0x7d, 0xee, 0x0d, 0x9d, 0x17, 0x39, 0xb2, 0x34, 0xd9, 0x0b, 0x3e, 0xa6, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x47, 0x22, 0xf6, 0xf1, 0x80, 0x20, 0x03, 0x81, 0x21, 0x4b, 0x33, 0xc9, 0x7e, 0xd7, 0x15, 0x52, 0x9a, 0x1a, 0x51, 0xa9, 0x5e, 0x6b, 0xb5, 0xd0, 0x57, 0x8d, 0x6f, 0xaa, 0x81, 0x31, 0x6a, 0xd3, 0xa0, 0x42, 0xd6, 0xa5, 0x3c, 0xf6, 0x8a, 0x97, 0x3b, 0x63, 0xba, 0x78, 0xaf, 0x0a, 0x11, 0x0c, 0x51, 0x08, 0x02, 0x0b, 0xdf, 0xe5, 0x71, 0xe3, 0x07, 0x1e, 0x0e, 0x60, 0xdb, 0xbc, 0x09, 0x33, 0x74, 0x43, 0x36, 0x50, 0x64, 0x2d, 0x9a, 0x17, 0xb9, 0x44, 0x21, 0xd4, 0x09, 0x8e, 0xdf, 0x17, 0xfa, 0xda, 0x04, 0x47, 0x16, 0xb0, 0x59, 0x5e, 0xac, 0x69, 0xee, 0xab, 0x48, 0x45, 0xb6, 0x78, 0x01, 0x3b, 0x0f, 0x7d, 0x00, 0x7f, 0xf1, 0x57, 0x7f, 0x81, 0xbd, 0x5f, 0x2f, 0xbb, 0x9d, 0x7d, 0xed, 0xf9, 0x3f, 0xc1, 0xc5, 0xf3, 0x35, 0xfc, 0xcf, 0xff, 0xeb, 0xbf, 0x87, 0xe7, 0xf9, 0x58, 0x2e, 0xe7, 0xb0, 0xeb, 0xdb, 0x6b, 0x45, 0x5d, 0x2d, 0xec, 0x35, 0x2b, 0x58, 0x4b, 0xd3, 0xf2, 0x3c, 0x7f, 0xa5, 0x39, 0xdf, 0x7e, 0x04, 0x71, 0xf7, 0x02, 0x9a, 0xa7, 0x77, 0x71, 0x08, 0xc0, 0xfb, 0xda, 0x8b, 0x68, 0x7e, 0xf0, 0x2a, 0xc6, 0x0f, 0x6d, 0x61, 0xf2, 0xf2, 0x35, 0xb4, 0x2e, 0x3c, 0x82, 0x76, 0xbb, 0x59, 0x2a, 0xe4, 0xba, 0x6e, 0xc2, 0xb4, 0x5c, 0x24, 0x71, 0x20, 0x5d, 0xa9, 0x5e, 0x7d, 0x63, 0x1f, 0x2f, 0x7c, 0xe9, 0x8b, 0xb8, 0xfa, 0xe8, 0xa3, 0xe5, 0xa6, 0x47, 0x14, 0xd0, 0xa2, 0x52, 0xd4, 0x57, 0xef, 0x5f, 0x8c, 0xfe, 0xc3, 0x1f, 0xe7, 0x3a, 0x5c, 0x8d, 0x5f, 0x2b, 0xbe, 0x66, 0x62, 0xb2, 0x98, 0xf3, 0x7b, 0x59, 0x43, 0x81, 0xf4, 0x4c, 0x65, 0x04, 0x4d, 0xdc, 0x5b, 0x35, 0x1f, 0x7f, 0x0f, 0xc0, 0xef, 0xfc, 0x87, 0x3f, 0xc6, 0xdf, 0xd9, 0xfe, 0x51, 0xb4, 0x76, 0x9b, 0xa5, 0xa2, 0xfe, 0xc6, 0x9f, 0xdf, 0xc4, 0xe4, 0xa5, 0xeb, 0x78, 0x55, 0x30, 0xdf, 0x55, 0x5d, 0x3a, 0x4f, 0x83, 0x5b, 0x4f, 0x4c, 0xdb, 0x64, 0x07, 0x5a, 0x9d, 0xe4, 0x89, 0x0d, 0xbc, 0x29, 0x14, 0x49, 0x12, 0x90, 0x92, 0x02, 0xd1, 0x7c, 0x04, 0x0b, 0x13, 0xc4, 0xca, 0x35, 0xf2, 0x1d, 0x86, 0xba, 0x1f, 0xc8, 0x49, 0x9c, 0x1c, 0xf9, 0xea, 0xbe, 0xc5, 0x7d, 0xdc, 0xdf, 0xff, 0xb0, 0x94, 0xb1, 0x3d, 0xf5, 0xe4, 0x63, 0xf8, 0xe6, 0xb5, 0x43, 0x11, 0xb9, 0x2a, 0x9e, 0xab, 0xc8, 0xa4, 0xb7, 0x4c, 0x53, 0x24, 0x0a, 0x26, 0xfc, 0xa8, 0x61, 0x39, 0x0a, 0x10, 0x9b, 0x38, 0x83, 0x6b, 0xc5, 0x08, 0xc3, 0x00, 0xcb, 0x60, 0x8a, 0x28, 0xa6, 0x42, 0x1e, 0xf1, 0x60, 0x9b, 0x3c, 0x85, 0x06, 0xee, 0xc3, 0x6e, 0x6a, 0x05, 0x9a, 0xbe, 0x8f, 0x66, 0xab, 0x26, 0x2c, 0x8f, 0x03, 0x84, 0x61, 0x0c, 0xab, 0xd9, 0x96, 0xcd, 0x2f, 0x4d, 0xe9, 0xc4, 0x30, 0x1f, 0x0e, 0x87, 0x48, 0xb2, 0xb2, 0x6d, 0x31, 0x4d, 0xbe, 0x34, 0x08, 0xd4, 0xeb, 0x4d, 0xac, 0xe2, 0xab, 0x99, 0x50, 0x08, 0xe5, 0x82, 0xa3, 0xc2, 0xe0, 0xba, 0x9e, 0x20, 0xa9, 0x45, 0x72, 0xd2, 0xe5, 0x9f, 0x63, 0x7e, 0x96, 0x5a, 0xf6, 0xca, 0xd5, 0x53, 0x5d, 0xf9, 0x51, 0x71, 0xa7, 0xc9, 0x9e, 0xae, 0x3b, 0xad, 0x1a, 0xe9, 0x67, 0x92, 0xb4, 0x8d, 0xac, 0x67, 0xeb, 0xf5, 0x7a, 0x09, 0x9a, 0x27, 0xfb, 0x57, 0x7a, 0xff, 0xe8, 0x75, 0xd2, 0x0e, 0xbd, 0xdb, 0xf1, 0x84, 0x2f, 0xfb, 0x02, 0x41, 0x90, 0xc1, 0x30, 0x22, 0xb4, 0x5a, 0x7d, 0x9c, 0x3f, 0xbf, 0x03, 0x5d, 0xd7, 0x71, 0xe3, 0xc6, 0x2d, 0x2e, 0x5f, 0x43, 0xce, 0x35, 0xda, 0xb6, 0x29, 0x98, 0xf4, 0x7c, 0x75, 0x34, 0x38, 0x3e, 0x82, 0xe7, 0x79, 0x82, 0x70, 0x56, 0xc3, 0xe9, 0xe9, 0x29, 0x8e, 0x4f, 0x06, 0x68, 0x34, 0x1a, 0xa8, 0xd5, 0x6a, 0x48, 0xd2, 0x14, 0x61, 0x14, 0x94, 0xe4, 0xaf, 0xba, 0xb1, 0xf2, 0xa4, 0x98, 0xcd, 0x72, 0xd9, 0x30, 0xf0, 0xfd, 0x74, 0x43, 0xba, 0xb3, 0x51, 0x33, 0x40, 0xcd, 0x08, 0x9f, 0xdc, 0x57, 0x04, 0xe4, 0x66, 0xb3, 0x09, 0x43, 0x2f, 0x6b, 0xc6, 0xa9, 0xb1, 0xa2, 0xc6, 0x8c, 0x38, 0x09, 0xa4, 0x1f, 0xbf, 0x72, 0x85, 0xef, 0xff, 0x89, 0x75, 0xfe, 0xee, 0xbb, 0xef, 0x96, 0xdc, 0xfb, 0x92, 0x24, 0xc1, 0xe9, 0xe9, 0xa9, 0x6c, 0x4c, 0x3c, 0xcf, 0x97, 0x88, 0x05, 0xd5, 0x42, 0xda, 0xf9, 0xef, 0xec, 0xec, 0xe0, 0xe0, 0xe0, 0x40, 0xd4, 0x33, 0x2e, 0xa9, 0xe6, 0x83, 0xb2, 0x5e, 0x22, 0x93, 0xd3, 0x75, 0x27, 0x3d, 0x3f, 0xc9, 0xf9, 0x1a, 0x8d, 0x06, 0x96, 0xcb, 0x25, 0x6c, 0xdb, 0x40, 0xab, 0xd5, 0x5a, 0x91, 0xab, 0x55, 0xa6, 0xe1, 0x59, 0x5e, 0xde, 0x9b, 0x0c, 0x25, 0xf2, 0x3c, 0x87, 0x69, 0x38, 0x25, 0x58, 0x97, 0x3a, 0x38, 0xfa, 0xb7, 0xa6, 0x69, 0x2b, 0xee, 0x62, 0xd9, 0x5a, 0x32, 0x18, 0x98, 0x0a, 0xc7, 0x73, 0xe6, 0x2b, 0x23, 0x01, 0x29, 0x31, 0xda, 0x2b, 0x5e, 0xe7, 0x9b, 0x74, 0xf1, 0x55, 0xb9, 0x96, 0x1a, 0x61, 0xa8, 0xe6, 0x7c, 0xab, 0xfa, 0x6c, 0x35, 0xc3, 0x5b, 0x85, 0x12, 0xab, 0xc9, 0x38, 0x9b, 0xd2, 0xa2, 0xe8, 0x6b, 0x9b, 0x8d, 0xf6, 0x99, 0xe9, 0x4c, 0x2a, 0x83, 0x7a, 0x93, 0xe4, 0x27, 0xcf, 0xf3, 0x12, 0x02, 0x52, 0x8d, 0x25, 0xa5, 0x82, 0x2c, 0x5d, 0xf1, 0x94, 0x7d, 0x7c, 0x55, 0xaa, 0xb6, 0xe9, 0x7a, 0x70, 0xe3, 0x9b, 0xa8, 0x64, 0xd8, 0x50, 0x95, 0x9f, 0xad, 0x8a, 0x6c, 0x51, 0x4a, 0xb3, 0xe3, 0x16, 0xad, 0x50, 0xd2, 0xdd, 0x32, 0xe8, 0xba, 0x29, 0x73, 0x9f, 0xa9, 0xe9, 0xa1, 0xf7, 0x3c, 0x93, 0x44, 0xb6, 0x42, 0x3e, 0xef, 0x4d, 0x2e, 0x81, 0x45, 0x51, 0x7e, 0x7e, 0x69, 0x51, 0xd6, 0xe0, 0x57, 0x8d, 0x89, 0x18, 0x63, 0xf8, 0xf4, 0xaf, 0xff, 0x73, 0x00, 0xc0, 0xef, 0xfe, 0xde, 0xef, 0xc9, 0xa2, 0x4d, 0x8f, 0xfd, 0xfd, 0x7d, 0xfc, 0xc6, 0x6f, 0xfe, 0x16, 0xfa, 0x92, 0xb5, 0xbd, 0xfa, 0x7b, 0xb5, 0x98, 0x57, 0x1f, 0xdd, 0xed, 0xab, 0xd0, 0x74, 0x47, 0x44, 0x20, 0x26, 0x78, 0xf4, 0x3d, 0xef, 0x45, 0xbb, 0xdd, 0xc4, 0xfe, 0xfe, 0xbe, 0xb4, 0x1a, 0xb5, 0xc4, 0xb4, 0xce, 0x6e, 0x0f, 0x30, 0x3e, 0x99, 0xa0, 0xd5, 0x6b, 0xe2, 0xc9, 0xef, 0x78, 0x0c, 0x38, 0xbd, 0x8b, 0x7f, 0xfd, 0xfb, 0x9f, 0x51, 0xfc, 0xda, 0x4d, 0x34, 0x3b, 0xbb, 0xe8, 0xf4, 0x2f, 0x62, 0x32, 0xbc, 0x8f, 0xe5, 0x7c, 0x84, 0x70, 0x39, 0x45, 0x96, 0x25, 0xf8, 0xed, 0xcf, 0x7c, 0x06, 0xff, 0xc7, 0xbf, 0xf8, 0x17, 0x25, 0xeb, 0x57, 0x15, 0xb7, 0x50, 0x8b, 0xba, 0x74, 0xbc, 0x5b, 0x4e, 0x90, 0xa6, 0x05, 0x66, 0xfb, 0x5f, 0x42, 0xbf, 0xff, 0x5f, 0x55, 0xfc, 0xd9, 0x51, 0x6a, 0x90, 0x32, 0x46, 0x59, 0xec, 0x2b, 0x32, 0x1a, 0x63, 0x0c, 0x8f, 0xcd, 0xde, 0x01, 0x98, 0xb9, 0x46, 0xba, 0xfb, 0xcc, 0xef, 0xfd, 0x27, 0xfc, 0xf2, 0xaf, 0x7d, 0xaa, 0xf4, 0xe7, 0x4f, 0xfc, 0xe0, 0x65, 0xbc, 0x01, 0xe0, 0xf9, 0xe7, 0xbe, 0x8a, 0x27, 0x95, 0x7f, 0xf3, 0x6a, 0xbb, 0x0e, 0x36, 0x48, 0x24, 0x3a, 0xb0, 0x42, 0x03, 0x72, 0xc9, 0x7d, 0xa1, 0xe8, 0x5a, 0xca, 0xfa, 0xa6, 0xe7, 0x41, 0xb1, 0xb0, 0xaa, 0x76, 0x9e, 0xd0, 0xb3, 0x15, 0x8a, 0xc6, 0xa0, 0x45, 0x03, 0x9c, 0x0e, 0x4f, 0x10, 0xa3, 0x09, 0xcb, 0x81, 0x74, 0x7f, 0x53, 0x27, 0xf2, 0xba, 0x3f, 0x85, 0x65, 0x35, 0xe0, 0x58, 0x29, 0xc2, 0xd8, 0xc0, 0xe9, 0xf0, 0x04, 0x10, 0x6a, 0x80, 0xe9, 0x7c, 0x89, 0xab, 0x8f, 0x36, 0x51, 0x14, 0x87, 0xe2, 0xc0, 0x2e, 0x64, 0x96, 0xbd, 0xce, 0x0c, 0xbe, 0x9a, 0x00, 0x4d, 0xe6, 0x00, 0xd3, 0x72, 0xe4, 0x45, 0x86, 0xa2, 0x88, 0x90, 0xe5, 0x19, 0xe6, 0xe3, 0x3b, 0x08, 0x82, 0x25, 0xe6, 0xc1, 0x1c, 0x59, 0x1e, 0xc1, 0x34, 0x35, 0xee, 0xef, 0xcf, 0x52, 0x30, 0x96, 0xc3, 0x75, 0x2c, 0xd8, 0x96, 0x0e, 0xb0, 0x14, 0xc8, 0x81, 0xd1, 0xc9, 0x0c, 0x69, 0x9a, 0xa3, 0xc8, 0x79, 0xa3, 0x9a, 0xb3, 0x58, 0x4c, 0xce, 0x23, 0xb9, 0x5b, 0x5e, 0x9d, 0x7f, 0x4c, 0x92, 0xdc, 0xa8, 0xd8, 0xab, 0x4a, 0x8e, 0x38, 0x8e, 0xe1, 0x58, 0xba, 0x52, 0x6c, 0xb4, 0x35, 0x8e, 0x4b, 0x35, 0xac, 0x88, 0x8a, 0x0d, 0x7d, 0x56, 0x5c, 0x97, 0x43, 0xb8, 0xc3, 0xe1, 0x50, 0xb2, 0xa7, 0x09, 0xa6, 0xce, 0xf3, 0x5c, 0xa0, 0x16, 0x6c, 0x63, 0x94, 0x29, 0x9d, 0x2d, 0xe4, 0xe4, 0x96, 0x65, 0x19, 0x8e, 0x8e, 0x8e, 0x64, 0x40, 0x48, 0xab, 0xd5, 0x2a, 0xa9, 0x7b, 0x68, 0xd7, 0xae, 0xc2, 0xea, 0x47, 0x87, 0xa7, 0x68, 0x34, 0x1a, 0xd8, 0xde, 0xde, 0x96, 0x53, 0x3d, 0x19, 0xb2, 0x4c, 0x26, 0x13, 0xec, 0xed, 0xed, 0x61, 0x32, 0x99, 0xc8, 0xef, 0xa3, 0x0e, 0x78, 0x44, 0x86, 0x1d, 0x8f, 0xc7, 0xc8, 0xb2, 0x0c, 0x1d, 0xf1, 0x19, 0x26, 0x6b, 0x54, 0x62, 0xd3, 0xd3, 0x7f, 0x55, 0x07, 0x37, 0x82, 0xe6, 0x79, 0xe2, 0x5a, 0xba, 0x16, 0xdb, 0x4c, 0xd7, 0xc7, 0xf7, 0x7d, 0xcc, 0x66, 0x33, 0xc4, 0x71, 0x28, 0xb3, 0xce, 0xc9, 0x3f, 0x23, 0x8e, 0x63, 0xf8, 0x35, 0xfe, 0xda, 0x27, 0x93, 0x89, 0xd4, 0xc4, 0x3b, 0x8e, 0x23, 0x2d, 0x6a, 0x6d, 0x9b, 0x4b, 0xfd, 0xc8, 0x52, 0x57, 0xf5, 0xc4, 0xe0, 0x4d, 0x08, 0xa4, 0x9b, 0x1b, 0x27, 0x29, 0xda, 0xb2, 0xa1, 0x08, 0x82, 0x00, 0x77, 0xef, 0xde, 0x95, 0xef, 0x19, 0xa1, 0xbe, 0xea, 0x2a, 0x99, 0x12, 0xe6, 0xd4, 0xa4, 0x4c, 0x69, 0x97, 0x2d, 0xd6, 0x20, 0xe4, 0x11, 0x40, 0xab, 0x1d, 0x4d, 0xd3, 0x64, 0x20, 0x4f, 0xbf, 0xbf, 0x8d, 0xc5, 0x62, 0x81, 0xa3, 0xa3, 0xe3, 0x55, 0xd4, 0x6c, 0x75, 0xb7, 0x5a, 0xdd, 0xa7, 0x57, 0xf3, 0xc2, 0xd5, 0x09, 0xcf, 0x70, 0xed, 0xb5, 0xc9, 0x5a, 0x15, 0xc8, 0xab, 0x64, 0x3a, 0xd5, 0x1a, 0x55, 0x76, 0x92, 0x95, 0x38, 0xb9, 0xaa, 0x6c, 0xcc, 0x71, 0x6a, 0x32, 0xf4, 0x83, 0xdb, 0x2d, 0x96, 0x9f, 0x0f, 0xcf, 0x47, 0x67, 0x72, 0x07, 0xbe, 0x56, 0xb0, 0x19, 0xd7, 0x6c, 0x32, 0x83, 0x09, 0xfd, 0xa4, 0x3a, 0xd1, 0x72, 0xf9, 0x9b, 0xae, 0xe9, 0x25, 0xb8, 0x1a, 0x05, 0x77, 0xba, 0x60, 0xd0, 0xe1, 0x3a, 0xee, 0x03, 0xf5, 0xe0, 0x94, 0x97, 0xab, 0x4a, 0x1e, 0xd4, 0x30, 0x13, 0x15, 0x66, 0x27, 0x48, 0x4d, 0xfd, 0x60, 0xa7, 0x59, 0x5a, 0x72, 0x03, 0xab, 0xca, 0xdb, 0xaa, 0x13, 0x90, 0x6a, 0x22, 0x40, 0xf2, 0x9b, 0x2a, 0x19, 0x4e, 0xcd, 0x71, 0x57, 0x11, 0x97, 0x95, 0xbb, 0x93, 0xda, 0x94, 0x65, 0x32, 0xab, 0x99, 0xff, 0xbb, 0x42, 0xec, 0x79, 0x22, 0x99, 0xe0, 0x44, 0x87, 0x8f, 0x65, 0x6a, 0x10, 0x1b, 0x13, 0x00, 0x5a, 0xc9, 0x14, 0x68, 0x85, 0x5c, 0x94, 0x1b, 0x16, 0x0e, 0x47, 0x99, 0x8a, 0xe4, 0xad, 0x6c, 0x82, 0x50, 0x6d, 0xc2, 0xaa, 0xb1, 0x83, 0x6a, 0x33, 0xf0, 0xe9, 0x5f, 0xfb, 0x35, 0xbc, 0xfd, 0xda, 0x8b, 0xd8, 0x7b, 0xf8, 0x49, 0x78, 0x9e, 0x8f, 0x67, 0x3f, 0xff, 0xbb, 0xf8, 0xd2, 0xf3, 0x7f, 0x84, 0xdd, 0xdd, 0x5d, 0xec, 0x3d, 0xf4, 0x38, 0x8e, 0x87, 0x43, 0x09, 0xc3, 0x03, 0x90, 0x7b, 0x75, 0xd5, 0x36, 0x54, 0xee, 0x5f, 0x9d, 0xba, 0xdc, 0xdf, 0x07, 0xc1, 0x14, 0x83, 0xe3, 0x43, 0xb4, 0xda, 0x6d, 0xb4, 0xda, 0x6d, 0xdc, 0xbc, 0x71, 0x0b, 0xd7, 0xdf, 0x7a, 0x8b, 0x43, 0x6a, 0xdd, 0x0b, 0x40, 0xf7, 0x02, 0xdf, 0xa7, 0x17, 0x80, 0xb5, 0xdd, 0xc7, 0xe0, 0xf8, 0x10, 0xaf, 0xbe, 0xb1, 0x2f, 0x8a, 0xb9, 0x85, 0x56, 0x77, 0x17, 0x7b, 0x97, 0x3f, 0x00, 0xbf, 0xb9, 0x85, 0xce, 0xd6, 0x25, 0x04, 0xf3, 0x11, 0xee, 0xdf, 0x7e, 0x0d, 0xe3, 0xe1, 0x7e, 0xc9, 0x9a, 0xd6, 0xab, 0xd5, 0xb1, 0xc4, 0x8c, 0xc7, 0xa9, 0x9e, 0x51, 0xd4, 0x77, 0xee, 0x1d, 0x20, 0xcd, 0x3d, 0x84, 0x61, 0x84, 0xdd, 0x27, 0x3e, 0x51, 0xda, 0x9f, 0x33, 0x8d, 0x56, 0x15, 0x85, 0x70, 0x35, 0x63, 0x80, 0xa6, 0x6f, 0x9c, 0xd0, 0x9f, 0xea, 0x74, 0x00, 0x65, 0x27, 0x3e, 0x58, 0xcc, 0xf1, 0x24, 0x80, 0x57, 0x0a, 0x0f, 0x2f, 0xfe, 0xfe, 0x37, 0x4b, 0xfb, 0x74, 0x2a, 0xea, 0x00, 0xf0, 0x3b, 0xcf, 0x7d, 0x15, 0x7f, 0xaf, 0xd2, 0x08, 0x9c, 0xe9, 0x52, 0xb7, 0xe1, 0x1e, 0xab, 0xf2, 0x5c, 0x36, 0xad, 0xd3, 0xd4, 0xdf, 0xf7, 0x3b, 0x0e, 0x0e, 0x86, 0xab, 0x86, 0x26, 0x46, 0x13, 0xbe, 0x33, 0x91, 0xc5, 0xfc, 0xea, 0x23, 0x7b, 0x58, 0xce, 0xe7, 0x98, 0xce, 0xa7, 0x70, 0x2c, 0x0f, 0x7b, 0x7b, 0x3d, 0xbc, 0xff, 0x72, 0x0b, 0x98, 0x9f, 0xe2, 0x64, 0x70, 0x02, 0xcb, 0x6a, 0x60, 0x34, 0x9a, 0x70, 0x24, 0x43, 0x87, 0xb8, 0x39, 0x45, 0x53, 0xcd, 0x32, 0xe4, 0x59, 0x22, 0x20, 0xf7, 0x14, 0x60, 0x19, 0xb2, 0x24, 0x44, 0x92, 0x2e, 0x10, 0xc7, 0x11, 0x92, 0x34, 0x82, 0x36, 0xbb, 0x29, 0x2c, 0x54, 0x73, 0x68, 0x06, 0x83, 0x06, 0x5b, 0x06, 0x27, 0x31, 0x9d, 0x61, 0x74, 0x72, 0x5a, 0x32, 0x65, 0x29, 0x0a, 0x0d, 0x1a, 0xb3, 0xe0, 0x3a, 0x0d, 0xb8, 0x4e, 0x0d, 0x87, 0xd3, 0x23, 0x79, 0x58, 0xd7, 0xea, 0x4d, 0x38, 0x5e, 0xd9, 0xfe, 0x9a, 0x0a, 0xce, 0x62, 0xb1, 0xc0, 0x62, 0xb1, 0x28, 0x31, 0xd5, 0x19, 0x03, 0x8e, 0x8f, 0x4f, 0x25, 0x9a, 0xc9, 0x6d, 0x45, 0x4d, 0x18, 0x86, 0x29, 0x0b, 0xf0, 0x78, 0x3c, 0x2e, 0x0d, 0x17, 0x14, 0x68, 0x43, 0x8e, 0x62, 0xc3, 0x61, 0x82, 0x46, 0xa3, 0x81, 0x76, 0xab, 0x8b, 0x9d, 0xed, 0xf3, 0x12, 0xce, 0xa7, 0x82, 0x1a, 0x2c, 0x23, 0xf9, 0x5c, 0x48, 0xbf, 0xec, 0x3a, 0x35, 0x38, 0xb6, 0xc7, 0x9f, 0x8b, 0xa9, 0x49, 0x77, 0xb3, 0xe9, 0x74, 0x8a, 0xe5, 0x72, 0x89, 0x20, 0x08, 0xe5, 0xb9, 0x4d, 0xee, 0x71, 0x54, 0x13, 0xa8, 0x61, 0x21, 0x04, 0xe0, 0xd2, 0xa5, 0x8b, 0x48, 0x92, 0x04, 0xd3, 0xe9, 0x14, 0xa3, 0xd1, 0xa9, 0x4c, 0x7c, 0xf3, 0x7d, 0x1f, 0x5b, 0x5b, 0x3d, 0x64, 0x59, 0x01, 0xd7, 0x5d, 0x0d, 0x75, 0x2a, 0x4b, 0x7d, 0x3e, 0x9f, 0x62, 0x7b, 0x7b, 0x5b, 0xc8, 0xfc, 0x22, 0xcc, 0xe7, 0x53, 0x68, 0x1a, 0x43, 0xb7, 0xdb, 0x86, 0xae, 0xeb, 0x98, 0x89, 0x35, 0xd4, 0x8a, 0xbd, 0xbe, 0x52, 0x21, 0x51, 0x13, 0xe2, 0x79, 0xbe, 0x3c, 0x37, 0xe7, 0xf3, 0xf9, 0x5a, 0x78, 0xca, 0xa5, 0x4b, 0x97, 0x4a, 0xdc, 0x0d, 0x9a, 0x7c, 0x35, 0x5d, 0x93, 0x61, 0x37, 0xc4, 0x2d, 0x20, 0x69, 0x18, 0x49, 0xc8, 0x38, 0x44, 0xcf, 0x1b, 0xab, 0xd1, 0x88, 0x93, 0xea, 0xa8, 0x50, 0xab, 0x19, 0xec, 0x5c, 0xd1, 0x30, 0x46, 0x14, 0x45, 0xe8, 0xf5, 0x7a, 0xf0, 0xbc, 0x15, 0x0b, 0xbd, 0xd5, 0xd2, 0x4a, 0xe1, 0x38, 0xd4, 0x2c, 0x10, 0x33, 0xbe, 0xd9, 0x6c, 0x57, 0x22, 0x89, 0x2d, 0xd8, 0xb6, 0x0b, 0xdf, 0x6f, 0x88, 0xe7, 0x9c, 0x60, 0x3c, 0x1e, 0x63, 0x3a, 0x9d, 0x96, 0xec, 0xd5, 0xa7, 0xd3, 0x29, 0xa6, 0xd3, 0x00, 0xc3, 0xd3, 0x49, 0x49, 0x0d, 0x55, 0xe4, 0xe0, 0xa4, 0xb8, 0xea, 0x9e, 0x93, 0x6e, 0x22, 0xad, 0x02, 0x0b, 0x57, 0xf3, 0xcb, 0x09, 0x8e, 0xa0, 0x29, 0x58, 0xc6, 0xaa, 0x8a, 0x2e, 0x49, 0x9d, 0xa6, 0x55, 0xe1, 0x3c, 0x3d, 0xb1, 0x9a, 0xdf, 0xd8, 0xa8, 0x03, 0xa7, 0x37, 0x92, 0x3a, 0xba, 0x2a, 0x8b, 0x56, 0x8d, 0xda, 0xac, 0x86, 0x96, 0xa8, 0x13, 0x72, 0x8e, 0x72, 0x4a, 0x17, 0x15, 0x34, 0x95, 0xb9, 0x5f, 0x5d, 0x09, 0xa8, 0x90, 0xb1, 0xaa, 0x4f, 0xdc, 0x64, 0xa7, 0x9a, 0x65, 0x85, 0x24, 0x6b, 0xa8, 0x93, 0xb2, 0xae, 0x9b, 0x8a, 0x9c, 0x2f, 0x12, 0xd7, 0xc8, 0x80, 0x65, 0xd9, 0x12, 0x8a, 0x4c, 0xd3, 0x14, 0xae, 0x55, 0x0e, 0x44, 0x29, 0xf9, 0x34, 0x67, 0x99, 0x4c, 0x13, 0xda, 0xb4, 0x87, 0xae, 0x76, 0xa4, 0x2a, 0xc1, 0x8e, 0x6e, 0x54, 0x95, 0x2c, 0xa7, 0xee, 0xe5, 0x56, 0xf2, 0x97, 0x44, 0xc0, 0x72, 0x39, 0x92, 0x24, 0x85, 0x61, 0x68, 0xa2, 0xab, 0x2f, 0xb0, 0x58, 0xcc, 0xd1, 0x68, 0x34, 0x10, 0xc7, 0xfc, 0x03, 0xcc, 0xa0, 0x43, 0xd7, 0x81, 0x2c, 0xe5, 0xd3, 0x3a, 0xf7, 0x8c, 0x0e, 0x2a, 0xce, 0x7c, 0x50, 0x3a, 0x70, 0x0e, 0x4d, 0x9a, 0x66, 0xae, 0xd8, 0xb9, 0x32, 0x65, 0xb7, 0x09, 0x30, 0x63, 0xdd, 0xa3, 0xbf, 0xb4, 0x72, 0x48, 0x63, 0x3c, 0xfb, 0x79, 0xbe, 0xab, 0x3e, 0x3c, 0x1c, 0xe0, 0xb3, 0x9f, 0xfb, 0x2c, 0xbe, 0xf7, 0xa3, 0xdf, 0x8d, 0x2f, 0xfd, 0xf5, 0x57, 0x56, 0x93, 0xe4, 0x3f, 0xf9, 0x27, 0xf8, 0xfc, 0x33, 0xdf, 0x87, 0x7e, 0xa7, 0x83, 0x45, 0x18, 0xcb, 0xe9, 0xdc, 0xae, 0x6f, 0x97, 0x8a, 0xb8, 0x5a, 0xd8, 0x0d, 0x83, 0x13, 0x86, 0x58, 0xc1, 0x50, 0xe4, 0x29, 0xf6, 0xf7, 0xf7, 0x71, 0xfd, 0xad, 0xb7, 0x70, 0x75, 0xb7, 0x87, 0xcb, 0x57, 0x1e, 0xc1, 0xe5, 0x2b, 0x97, 0x70, 0xf3, 0xc6, 0x2d, 0xa9, 0x89, 0xde, 0xea, 0xef, 0xc8, 0x40, 0x95, 0xdd, 0xbd, 0x5d, 0xe8, 0xba, 0x09, 0xd7, 0x6b, 0xc2, 0xf5, 0xdb, 0x38, 0xf7, 0xd0, 0xfb, 0x50, 0x6f, 0x9f, 0xe3, 0x21, 0x35, 0x86, 0x0d, 0xcb, 0xf1, 0xc1, 0x34, 0x03, 0x00, 0xc3, 0x78, 0x78, 0x4f, 0xfa, 0xbd, 0xff, 0xcc, 0xcf, 0xfc, 0xd7, 0x00, 0x80, 0x7f, 0xf7, 0xa9, 0x5f, 0xc0, 0xce, 0x3d, 0xc8, 0xe8, 0xd2, 0x6a, 0x7c, 0xe9, 0xf1, 0xcd, 0xaf, 0x20, 0xb1, 0x76, 0xd1, 0x6c, 0x36, 0x51, 0x98, 0x05, 0x80, 0x4c, 0x16, 0xa9, 0x15, 0x04, 0x5e, 0x48, 0x09, 0x60, 0xb5, 0xa0, 0x0f, 0xde, 0xf9, 0x2b, 0xec, 0xb8, 0x2d, 0x0c, 0x36, 0x58, 0xb9, 0xfe, 0x30, 0x38, 0xe9, 0xef, 0x8d, 0x3f, 0xbf, 0x29, 0x8b, 0x78, 0x49, 0xd6, 0x76, 0x32, 0xc1, 0xf3, 0xcf, 0xbe, 0x80, 0x8f, 0x6d, 0xef, 0xe0, 0x95, 0xe1, 0x10, 0x40, 0xfd, 0x81, 0x45, 0x7d, 0x53, 0xca, 0x9a, 0x5a, 0xd0, 0xc9, 0xbe, 0xb3, 0xea, 0x4e, 0xc8, 0x18, 0xc3, 0xdb, 0x7f, 0xf3, 0xbb, 0x18, 0x74, 0x3e, 0x5c, 0x22, 0xbe, 0x71, 0x48, 0xbd, 0x87, 0x38, 0x9e, 0x62, 0x36, 0x8f, 0xe1, 0x79, 0x3e, 0x7e, 0xfc, 0x27, 0x7e, 0x02, 0xf7, 0xef, 0x1d, 0xe0, 0xad, 0xb7, 0xdf, 0x42, 0xbb, 0xdd, 0xc4, 0x8f, 0xfd, 0xe0, 0x27, 0x30, 0x4d, 0x22, 0x8c, 0x3e, 0xff, 0x47, 0x78, 0xe5, 0xd5, 0x6b, 0x88, 0xe3, 0x29, 0x0c, 0xa3, 0xc1, 0xef, 0xe3, 0x82, 0xaf, 0x85, 0x78, 0x02, 0x62, 0x0a, 0xd7, 0xb2, 0x84, 0x55, 0x2b, 0x10, 0xc7, 0x21, 0x82, 0x70, 0x8a, 0xf9, 0x62, 0x8c, 0xd9, 0x7c, 0x8c, 0x30, 0x5c, 0x62, 0xaf, 0xb6, 0x84, 0xae, 0x69, 0x30, 0x6c, 0x1d, 0x9a, 0xce, 0xb3, 0xe7, 0xb3, 0x24, 0x47, 0x26, 0x9d, 0x2b, 0x0d, 0xe4, 0x79, 0x82, 0x3c, 0x07, 0x2c, 0xd3, 0x83, 0xe3, 0xf8, 0xd0, 0x98, 0x8d, 0x2c, 0x31, 0x10, 0x2c, 0x21, 0xb5, 0xc1, 0xe4, 0xec, 0xa6, 0x06, 0xc0, 0x14, 0x45, 0x81, 0xc5, 0x72, 0x26, 0xcf, 0x3e, 0xa6, 0x15, 0xb0, 0x05, 0x71, 0x8d, 0x0a, 0x32, 0xed, 0xd5, 0x5d, 0x97, 0xcb, 0xbf, 0x28, 0x7f, 0x9b, 0xf6, 0xd4, 0xad, 0x56, 0xab, 0x04, 0x19, 0xd3, 0x67, 0x9b, 0x17, 0xc4, 0x18, 0x17, 0x2f, 0xf6, 0x64, 0x01, 0x25, 0x22, 0x17, 0xed, 0xd8, 0x5b, 0xad, 0x96, 0x74, 0x41, 0xab, 0x86, 0x44, 0xa9, 0xf7, 0xcc, 0x64, 0x32, 0x91, 0x67, 0x3d, 0x41, 0xdd, 0x69, 0x9a, 0xe2, 0xee, 0xdd, 0xbb, 0xe8, 0x76, 0xbb, 0xa5, 0xc6, 0xad, 0xca, 0xf5, 0x51, 0x9d, 0xe4, 0xc8, 0x0b, 0x9e, 0x8a, 0x2b, 0x9f, 0xf4, 0xeb, 0xf2, 0x2c, 0x22, 0xb8, 0x9f, 0x98, 0xf8, 0xa4, 0x4b, 0x7f, 0xe8, 0xa1, 0x87, 0x50, 0xab, 0xd5, 0x64, 0xb8, 0x09, 0xad, 0x01, 0xee, 0xdc, 0xb9, 0x83, 0x46, 0xa3, 0xb1, 0x36, 0x20, 0x66, 0x59, 0x26, 0x0b, 0xeb, 0x68, 0x34, 0x81, 0xef, 0xfb, 0x52, 0xf2, 0xaa, 0x06, 0x37, 0x59, 0x96, 0x85, 0xe5, 0x92, 0xeb, 0xf4, 0xb7, 0xb7, 0xfb, 0xf2, 0xbc, 0x9a, 0xcf, 0xe7, 0xc8, 0x72, 0x1e, 0x2d, 0xdb, 0x6e, 0x75, 0xa5, 0xda, 0xa9, 0xd5, 0x6a, 0xc1, 0xb6, 0x6d, 0x9c, 0x9e, 0x9e, 0x22, 0x0c, 0x43, 0xf4, 0xfb, 0x7d, 0x38, 0x0e, 0x97, 0x22, 0xd6, 0x6a, 0x35, 0x59, 0x37, 0x96, 0xcb, 0x25, 0x4e, 0x4f, 0x4f, 0x71, 0x7a, 0x7a, 0x8a, 0x46, 0x83, 0x7b, 0xb5, 0xf7, 0xfb, 0x7d, 0x79, 0x8d, 0x06, 0x83, 0x81, 0xd8, 0xaf, 0xb7, 0x10, 0x04, 0xbc, 0x79, 0x39, 0x38, 0x38, 0x00, 0x71, 0x5c, 0x4d, 0x13, 0x8a, 0x36, 0xdd, 0x91, 0x13, 0xbb, 0xda, 0xd8, 0xd5, 0x6a, 0x35, 0xb1, 0x6b, 0xe7, 0x4a, 0x23, 0x7a, 0x6e, 0xf5, 0x7a, 0x1d, 0x86, 0x61, 0xc8, 0x84, 0x36, 0x2a, 0xe8, 0xaa, 0x86, 0x9f, 0xfd, 0xd0, 0x8f, 0x7f, 0xba, 0xd8, 0x64, 0xcd, 0x4a, 0x4f, 0x90, 0x0a, 0x9f, 0xba, 0xd8, 0x57, 0x3b, 0xc1, 0x6a, 0xa1, 0x29, 0x65, 0x6f, 0x17, 0x46, 0x09, 0x82, 0xa7, 0x9b, 0x8b, 0x6e, 0x80, 0x3c, 0x5d, 0x97, 0x9b, 0xa9, 0x05, 0x5d, 0x65, 0x1f, 0xaa, 0xd9, 0xe2, 0x92, 0x78, 0x65, 0x5b, 0x25, 0x22, 0x5f, 0xd5, 0x20, 0x45, 0xb5, 0x83, 0xad, 0xea, 0xeb, 0x49, 0xc7, 0x5d, 0x75, 0x8a, 0x3b, 0x8b, 0xc9, 0xab, 0xfe, 0x39, 0xfd, 0x4c, 0x4b, 0xb0, 0x15, 0x09, 0x22, 0x53, 0xa3, 0xfe, 0xaa, 0xdc, 0x84, 0x4d, 0x31, 0xa8, 0x69, 0xc6, 0xaf, 0x0f, 0x58, 0x0e, 0xd3, 0xe4, 0x6c, 0xf3, 0x34, 0x4b, 0xc4, 0xf5, 0x71, 0x2a, 0xf1, 0x85, 0x3a, 0xf1, 0xe7, 0x65, 0x47, 0x47, 0x1f, 0xe0, 0xb3, 0xa6, 0x20, 0xba, 0x4e, 0x04, 0x57, 0x31, 0xc6, 0xad, 0x0f, 0x57, 0x92, 0x39, 0xd2, 0xd9, 0xa7, 0x32, 0xee, 0x93, 0xbf, 0x77, 0x2b, 0x27, 0x2f, 0x22, 0x62, 0xd4, 0x7c, 0x6e, 0x99, 0x18, 0x45, 0x81, 0xdc, 0xcf, 0x05, 0x81, 0x2e, 0x48, 0x22, 0x06, 0xf2, 0x22, 0x45, 0x96, 0x45, 0xb0, 0x6c, 0x03, 0x79, 0x9e, 0x61, 0x32, 0xe5, 0x85, 0xcc, 0xad, 0xd5, 0x84, 0x7a, 0x80, 0x4f, 0xb4, 0x59, 0x56, 0x20, 0xcb, 0x73, 0x7e, 0x33, 0xc7, 0x9b, 0x4d, 0x4b, 0x56, 0x16, 0xad, 0x23, 0xdc, 0x7c, 0xfb, 0x05, 0x8c, 0x4e, 0x6e, 0xc9, 0xdd, 0xf4, 0xa6, 0xc7, 0x8b, 0x5f, 0x7d, 0x1d, 0x96, 0x65, 0x60, 0x34, 0x5d, 0xe2, 0x0f, 0xfe, 0xfd, 0xbf, 0xc1, 0xdf, 0xfe, 0xb9, 0xbf, 0x5f, 0xfa, 0xfb, 0x9a, 0x63, 0xc9, 0x62, 0x0f, 0x00, 0x9f, 0xfe, 0xc7, 0xff, 0x1b, 0x9a, 0xed, 0x73, 0xc8, 0xf3, 0x18, 0xb3, 0xf1, 0x11, 0x3e, 0xfe, 0x3d, 0x7b, 0xb8, 0x71, 0xe3, 0xc6, 0x2a, 0x39, 0x6d, 0x77, 0x17, 0x5b, 0xfd, 0x1d, 0x69, 0xdb, 0x4a, 0x06, 0x31, 0x94, 0x9e, 0xf6, 0xdf, 0xff, 0xca, 0xa7, 0x71, 0xf1, 0xe1, 0x0f, 0xa1, 0xd1, 0xea, 0xc3, 0x71, 0xea, 0x80, 0xf0, 0x24, 0xa7, 0x7d, 0x66, 0x96, 0x25, 0x38, 0x1d, 0xdc, 0xc1, 0xdd, 0x9b, 0xdf, 0xc0, 0xe8, 0x64, 0xff, 0x81, 0xcf, 0x5d, 0x7d, 0xfc, 0xbb, 0x4f, 0xfd, 0x02, 0xfe, 0xd5, 0xbd, 0x25, 0x0e, 0xdf, 0xfd, 0x6b, 0x5c, 0x7c, 0xe2, 0x47, 0x61, 0x5b, 0x1d, 0xe8, 0x86, 0x09, 0xa6, 0x15, 0x52, 0x6e, 0x55, 0x80, 0x9a, 0x9f, 0x04, 0x5e, 0xcd, 0x5a, 0x43, 0x33, 0x7e, 0xaa, 0x38, 0x5e, 0xcb, 0x37, 0xaf, 0x3e, 0x9e, 0xf5, 0x6c, 0xfc, 0xf0, 0xcf, 0xfc, 0x44, 0x89, 0x24, 0x27, 0xaf, 0xe5, 0xef, 0x7f, 0x13, 0xc6, 0x17, 0xbe, 0x8c, 0x6f, 0x74, 0xdb, 0x78, 0x39, 0xaf, 0xa3, 0xd5, 0xd9, 0x5a, 0xe3, 0xb8, 0xc8, 0xff, 0x66, 0x2a, 0xa7, 0x03, 0x12, 0xed, 0x91, 0x9f, 0xc1, 0x98, 0x47, 0x05, 0x1b, 0x06, 0x9f, 0x76, 0x18, 0x74, 0x14, 0x85, 0x86, 0x3c, 0x03, 0x34, 0xe3, 0x00, 0xb3, 0xe1, 0x6d, 0x9c, 0xce, 0x5d, 0x99, 0x9c, 0x46, 0x3b, 0x72, 0x7e, 0x56, 0xf0, 0xa2, 0xfe, 0xd3, 0x3f, 0xfd, 0x23, 0xf8, 0xf0, 0xd3, 0xcf, 0xe0, 0x95, 0xb7, 0xde, 0x90, 0x21, 0x39, 0x97, 0x2e, 0x5d, 0xc2, 0xfd, 0x7b, 0x07, 0xf8, 0xf3, 0xbf, 0x78, 0x01, 0x71, 0x3c, 0x45, 0x8c, 0x5d, 0xb4, 0xdb, 0x6d, 0x30, 0x2c, 0xc1, 0x58, 0x00, 0xe4, 0x01, 0xb2, 0x34, 0x04, 0x33, 0x87, 0x98, 0xcf, 0x26, 0x18, 0x1e, 0x0f, 0x30, 0x9b, 0x8e, 0x90, 0xa7, 0x31, 0x5c, 0xc7, 0x80, 0x5f, 0xf3, 0xe0, 0x5a, 0x26, 0xa6, 0x41, 0x56, 0x6a, 0xd2, 0x89, 0x10, 0x46, 0x5c, 0x92, 0x30, 0x48, 0x64, 0xc1, 0x23, 0xd3, 0x10, 0xb2, 0x01, 0x5d, 0x2e, 0x97, 0x28, 0x34, 0x1d, 0xb3, 0x59, 0x80, 0x56, 0x8b, 0x6b, 0xb1, 0xb9, 0x14, 0x8a, 0x4f, 0x90, 0x8b, 0xc5, 0x02, 0xd1, 0x32, 0x90, 0x59, 0xdd, 0x34, 0x9d, 0x91, 0x55, 0x2a, 0xf7, 0xe1, 0xb0, 0xe5, 0xcf, 0x56, 0x21, 0x77, 0x79, 0x8e, 0x21, 0x2e, 0xed, 0x60, 0xe9, 0x7b, 0x53, 0x48, 0x48, 0xc1, 0x88, 0xa0, 0x2c, 0x12, 0xd4, 0xd2, 0x48, 0xee, 0xe9, 0x4d, 0xd3, 0x80, 0xa1, 0xad, 0xa7, 0x79, 0xa9, 0x90, 0x79, 0xad, 0xce, 0x0d, 0x6d, 0xc6, 0xe3, 0x29, 0xe2, 0x18, 0xa8, 0xd7, 0x4d, 0xf4, 0x7a, 0x3d, 0x69, 0x63, 0x6a, 0x18, 0xb6, 0xcc, 0x40, 0xa7, 0x01, 0x6e, 0x3e, 0xcf, 0xa0, 0xeb, 0x80, 0xef, 0x5b, 0x70, 0x1d, 0xde, 0xd0, 0xd4, 0x6a, 0x35, 0x39, 0x28, 0x38, 0x8e, 0x23, 0xa3, 0x45, 0xf3, 0x7c, 0x15, 0x91, 0xaa, 0x4a, 0x9b, 0xe9, 0xfc, 0x1c, 0x8f, 0x4f, 0xd6, 0xac, 0xbe, 0xd5, 0x7a, 0x61, 0xdb, 0x35, 0x04, 0x41, 0x80, 0xe1, 0x70, 0x81, 0x6e, 0xd7, 0xc7, 0xce, 0xce, 0x0e, 0x34, 0x4d, 0x5b, 0x11, 0x0f, 0x51, 0xe0, 0xe8, 0xe8, 0x08, 0x93, 0xc9, 0x44, 0x0e, 0x69, 0x24, 0xd7, 0xad, 0xd7, 0xeb, 0xb0, 0x2d, 0x57, 0x4e, 0xe5, 0xbe, 0xef, 0xc3, 0xb2, 0x2c, 0x2c, 0x16, 0x0b, 0x9c, 0x9e, 0x9e, 0x72, 0x3d, 0x7d, 0x32, 0x92, 0xa1, 0x36, 0xa6, 0x78, 0xad, 0x61, 0x18, 0xc9, 0x64, 0x35, 0xe2, 0x1d, 0xf0, 0x9d, 0x3c, 0xf7, 0x7b, 0xd7, 0x0d, 0x26, 0xe5, 0x7b, 0x8b, 0x38, 0xe1, 0xc5, 0xd9, 0xf7, 0x79, 0x73, 0xa3, 0xf1, 0x73, 0x79, 0x74, 0x3a, 0x44, 0xb3, 0xd9, 0x44, 0x92, 0x87, 0x1c, 0x9a, 0x37, 0x0c, 0x9c, 0x0c, 0x4f, 0x31, 0x9a, 0x4e, 0xa0, 0x9b, 0xbc, 0xf6, 0x69, 0xba, 0x0e, 0x3b, 0xe5, 0x8d, 0x07, 0xad, 0x25, 0x5c, 0xd7, 0xc5, 0x68, 0x34, 0xc2, 0x7c, 0x1e, 0xa2, 0xd7, 0x6b, 0x21, 0x49, 0x12, 0xd4, 0xeb, 0x75, 0xcc, 0xe7, 0x73, 0x59, 0xec, 0x69, 0xa7, 0xae, 0xd6, 0x31, 0x3a, 0xeb, 0x1d, 0xc7, 0x81, 0x7e, 0xe9, 0xe1, 0xef, 0xfe, 0x4d, 0xb5, 0x10, 0xaa, 0x5d, 0x98, 0x8a, 0xef, 0xab, 0x1d, 0xa8, 0x0a, 0x25, 0x57, 0x27, 0xd8, 0x72, 0x7c, 0xa9, 0x2e, 0x3b, 0x33, 0xf2, 0x76, 0xa7, 0xa9, 0x31, 0x49, 0x12, 0x38, 0xb6, 0xb3, 0x16, 0x8f, 0xa9, 0x16, 0xcf, 0x6a, 0x12, 0x98, 0xba, 0x0b, 0xd6, 0x75, 0x1d, 0x86, 0x69, 0x6c, 0x94, 0x3c, 0xa9, 0x41, 0x2a, 0x55, 0xf6, 0x74, 0x39, 0x5e, 0xd2, 0x3a, 0x33, 0x36, 0x95, 0xe0, 0xb1, 0x6a, 0xa8, 0x43, 0xa9, 0x13, 0x57, 0x4c, 0xfb, 0xe9, 0x83, 0x42, 0x5f, 0xa3, 0x5e, 0xec, 0xaa, 0xac, 0x8f, 0xa6, 0xf2, 0x28, 0x16, 0x1f, 0x66, 0x9d, 0xb2, 0xab, 0x73, 0x01, 0x2d, 0xad, 0x0c, 0x57, 0x56, 0xe4, 0x32, 0x4d, 0xc2, 0xda, 0x45, 0x01, 0x49, 0x90, 0x51, 0x27, 0x22, 0xf5, 0x17, 0x49, 0x25, 0x54, 0x46, 0x3e, 0x21, 0x09, 0x74, 0x78, 0x10, 0x41, 0xcf, 0x30, 0x74, 0xa9, 0x47, 0xe7, 0xb2, 0x3d, 0x4e, 0xc2, 0xf1, 0xfd, 0x15, 0x04, 0x45, 0x8e, 0x61, 0xa6, 0x69, 0x28, 0x07, 0xbb, 0xb5, 0x32, 0x12, 0x29, 0x38, 0xd1, 0x88, 0x33, 0x6a, 0x19, 0xe2, 0x98, 0xdb, 0x26, 0x7a, 0xb5, 0xda, 0x4a, 0xaf, 0x2f, 0x72, 0xe2, 0x21, 0x8c, 0x50, 0x0a, 0x49, 0x08, 0xc2, 0x46, 0x87, 0xb4, 0x28, 0x98, 0x62, 0x70, 0x70, 0x0d, 0x61, 0x30, 0x7b, 0x60, 0x81, 0xfa, 0xe1, 0x1f, 0xfa, 0x5b, 0x18, 0x0d, 0x07, 0x70, 0xfd, 0x0e, 0x9e, 0xf9, 0xce, 0xef, 0x81, 0x65, 0xe8, 0x48, 0xd2, 0x15, 0x0b, 0x7f, 0xb0, 0xff, 0x36, 0x5c, 0x7f, 0xe5, 0x8e, 0xf6, 0x67, 0xcf, 0xbd, 0xc0, 0x27, 0x69, 0x56, 0x20, 0x8e, 0x17, 0xb8, 0xb2, 0xd7, 0xc0, 0x48, 0x14, 0xee, 0xf9, 0x7c, 0x81, 0x83, 0x83, 0x43, 0xcc, 0xe7, 0x53, 0x58, 0xa6, 0x89, 0x56, 0xbb, 0x0d, 0xc7, 0x75, 0x31, 0x1e, 0x8d, 0xb0, 0x58, 0xce, 0xa1, 0xeb, 0x06, 0x5e, 0xf8, 0xea, 0xab, 0xd8, 0xde, 0x7b, 0x1c, 0xf5, 0x7a, 0x87, 0x33, 0xbe, 0x2b, 0x7b, 0x4a, 0xc6, 0x34, 0x98, 0xb6, 0x07, 0xc3, 0x32, 0x31, 0x9b, 0x0c, 0x90, 0xc4, 0xc1, 0xb7, 0x55, 0xd0, 0xa3, 0xbe, 0x8b, 0x44, 0xeb, 0xc0, 0xef, 0xbd, 0x07, 0xb3, 0xd1, 0x00, 0x8e, 0x53, 0x87, 0x69, 0x39, 0xd2, 0x1b, 0x00, 0xe0, 0xf2, 0x2b, 0xfe, 0x1e, 0x72, 0x6d, 0x75, 0x95, 0x97, 0xf1, 0xb3, 0xe3, 0x01, 0x16, 0x49, 0xbc, 0xf6, 0xbd, 0x8f, 0x83, 0x25, 0x6a, 0xa6, 0x89, 0xad, 0x9a, 0x8f, 0x73, 0xcb, 0x00, 0x87, 0x27, 0x63, 0x5c, 0xf8, 0xc8, 0xc3, 0x6b, 0x5f, 0x77, 0xe1, 0x7d, 0x3b, 0xf8, 0xa3, 0x17, 0xb9, 0xd5, 0xea, 0x61, 0x61, 0xc3, 0x15, 0x28, 0x47, 0xb5, 0x71, 0x60, 0x8c, 0xc1, 0xd0, 0x4c, 0xe5, 0x7e, 0xa3, 0xcf, 0xe8, 0xaa, 0xf1, 0xd5, 0x19, 0xff, 0x73, 0x4d, 0xd7, 0xc0, 0x04, 0x47, 0x26, 0xcf, 0x79, 0x9c, 0x65, 0x1a, 0x1e, 0x60, 0x3c, 0x99, 0x41, 0x27, 0xdf, 0x74, 0x00, 0x71, 0x9c, 0xc1, 0xd0, 0x53, 0xe8, 0xba, 0x8d, 0x2c, 0x8b, 0x30, 0x9c, 0xa6, 0x98, 0x0c, 0x27, 0xd0, 0x2c, 0xa0, 0xd5, 0xee, 0x20, 0xcf, 0x89, 0x61, 0x1d, 0xe3, 0xe9, 0xf7, 0xbe, 0x0f, 0xdf, 0xf9, 0xd8, 0x55, 0xbc, 0xf6, 0xd6, 0x9b, 0x98, 0x85, 0x05, 0x5c, 0xcf, 0x00, 0x8a, 0x05, 0xb2, 0x64, 0x8e, 0x38, 0x99, 0x23, 0xcb, 0x42, 0xbc, 0x7d, 0xfd, 0x15, 0x04, 0xc1, 0x02, 0xa6, 0xa9, 0xa1, 0x51, 0xaf, 0xa3, 0x51, 0xf7, 0x61, 0x9a, 0x3a, 0x77, 0x7d, 0x0b, 0x23, 0x98, 0xb6, 0x2b, 0x8b, 0x38, 0xed, 0x64, 0x49, 0x03, 0xae, 0x69, 0x1a, 0x6a, 0x9e, 0x2f, 0xb3, 0xa6, 0xc9, 0x75, 0x8d, 0x64, 0x56, 0xae, 0xeb, 0xa2, 0xd1, 0x6c, 0xf0, 0x98, 0xd4, 0x34, 0x41, 0x9a, 0x26, 0xc8, 0xf3, 0x0c, 0xb6, 0x6d, 0xc1, 0x75, 0x1d, 0x18, 0x86, 0x0e, 0xcf, 0x75, 0x00, 0x70, 0xb4, 0x6b, 0x3c, 0x1e, 0x61, 0x3e, 0x9f, 0x41, 0xd3, 0x18, 0x9a, 0xcd, 0x06, 0xb6, 0xb6, 0xfa, 0x58, 0x2e, 0x02, 0xd9, 0x74, 0x93, 0x19, 0x14, 0x21, 0x6d, 0x59, 0x96, 0xc1, 0x76, 0xcc, 0x12, 0x7a, 0x48, 0x45, 0x8b, 0xce, 0x9a, 0xb9, 0x88, 0x2d, 0xcd, 0x45, 0x28, 0x85, 0xa6, 0xaf, 0xce, 0xa9, 0x28, 0x8a, 0x00, 0xd1, 0x98, 0x50, 0x31, 0x27, 0x52, 0x9b, 0xb4, 0x7d, 0x36, 0x74, 0x79, 0x2f, 0xd9, 0x36, 0x8f, 0x67, 0xed, 0x76, 0xbb, 0x72, 0x52, 0x9f, 0x4e, 0xe7, 0x02, 0xda, 0xf6, 0x64, 0xb3, 0xe1, 0x38, 0x3a, 0x2c, 0x11, 0xfb, 0xb9, 0xb3, 0x7d, 0x4e, 0x34, 0x0f, 0xa6, 0xb4, 0x46, 0xa5, 0xef, 0xcd, 0x07, 0x41, 0xa3, 0xc4, 0xcd, 0x51, 0x11, 0x5b, 0x3e, 0x69, 0x2f, 0xe5, 0x4a, 0x82, 0x82, 0x50, 0x28, 0xad, 0x8c, 0x0f, 0x12, 0xe4, 0xb4, 0x99, 0xc2, 0x71, 0x6c, 0x91, 0xe0, 0xc6, 0xf7, 0xca, 0xd3, 0xe9, 0x14, 0x47, 0x87, 0x87, 0xd2, 0x85, 0x0e, 0x62, 0xd0, 0xca, 0x39, 0xc1, 0x87, 0x7f, 0xff, 0x28, 0xc6, 0x32, 0x08, 0xb0, 0x0c, 0x96, 0x58, 0x06, 0x01, 0x82, 0x30, 0x44, 0x9a, 0x65, 0x30, 0x4c, 0x13, 0x5e, 0xcd, 0x03, 0xd3, 0xb8, 0xef, 0x7d, 0xbb, 0x45, 0x59, 0xf2, 0x75, 0xe9, 0x94, 0x37, 0x99, 0xcc, 0x00, 0x30, 0x44, 0x51, 0x28, 0xae, 0x3f, 0x93, 0x2a, 0x2e, 0xf2, 0xcf, 0xb8, 0x79, 0xe7, 0x00, 0x86, 0xc1, 0x50, 0x13, 0x06, 0x40, 0x8e, 0xcd, 0x75, 0xf6, 0xc1, 0x72, 0x89, 0x93, 0x93, 0x13, 0x38, 0x2e, 0x4f, 0xbe, 0xcb, 0x8b, 0x02, 0x35, 0xdf, 0x87, 0xdf, 0xa8, 0xc3, 0x76, 0x38, 0xe1, 0xae, 0xd9, 0x6a, 0x21, 0x98, 0x2e, 0x65, 0xb3, 0x43, 0xc3, 0xee, 0x7c, 0xbe, 0x80, 0xa6, 0x01, 0xdb, 0xdb, 0x5b, 0xdc, 0x1e, 0x56, 0xdc, 0x13, 0xcd, 0x66, 0x53, 0x1a, 0xe8, 0xd0, 0x7d, 0x40, 0x1c, 0x2c, 0x6a, 0x86, 0xc2, 0x30, 0xe4, 0x90, 0x7b, 0x35, 0x82, 0x73, 0xd3, 0x3e, 0x57, 0xed, 0x20, 0xd5, 0x3d, 0xee, 0x26, 0x28, 0x58, 0xee, 0x49, 0x99, 0xb6, 0x96, 0x1a, 0xa6, 0xe6, 0xd4, 0x56, 0x77, 0xe7, 0xd5, 0xe2, 0xaa, 0xee, 0xf6, 0xe9, 0x46, 0x57, 0x35, 0x95, 0x67, 0x3d, 0xd4, 0xc2, 0xad, 0x42, 0xd0, 0xea, 0x4e, 0x48, 0xd5, 0xd9, 0x6f, 0xca, 0x08, 0x57, 0x5f, 0xb7, 0xea, 0x01, 0xaf, 0xc6, 0x77, 0x42, 0xe1, 0x04, 0xa8, 0xd2, 0x37, 0x95, 0x29, 0x7a, 0xd6, 0x4e, 0x58, 0xca, 0xca, 0x90, 0x89, 0x50, 0x8e, 0x55, 0xee, 0x78, 0x51, 0x68, 0xd2, 0x83, 0x98, 0x3f, 0x67, 0x4d, 0x4e, 0xd4, 0x44, 0x44, 0x8b, 0xc2, 0x44, 0x92, 0x54, 0x36, 0xed, 0x35, 0xe9, 0x3d, 0x21, 0x64, 0x85, 0x08, 0x32, 0xd4, 0xed, 0xab, 0x96, 0xb1, 0x94, 0x53, 0x9e, 0x17, 0x65, 0x5d, 0x7f, 0x92, 0x24, 0x12, 0x2e, 0x9f, 0x4f, 0xb8, 0xa3, 0x55, 0xbb, 0xdd, 0x94, 0x70, 0xaa, 0x65, 0xf9, 0x42, 0x7d, 0x90, 0xa3, 0x40, 0xb1, 0x16, 0x85, 0xba, 0x6a, 0x80, 0x04, 0xfb, 0x5e, 0x33, 0xa0, 0xeb, 0x1a, 0x18, 0xbd, 0xe7, 0x15, 0x47, 0xa7, 0x07, 0x49, 0xf2, 0x34, 0xcd, 0x80, 0x69, 0xb9, 0xc2, 0xf0, 0xc6, 0x85, 0xa6, 0x73, 0x58, 0x3b, 0xcb, 0x12, 0xfc, 0x9d, 0x9f, 0xfb, 0xbb, 0xf8, 0xd2, 0x8b, 0x2f, 0x9f, 0x39, 0x95, 0xb7, 0xb7, 0x1f, 0xae, 0x58, 0x9a, 0x92, 0xf1, 0x51, 0x21, 0xcd, 0x65, 0xaa, 0x8f, 0xc3, 0xc3, 0x81, 0x4c, 0x57, 0xdb, 0xdd, 0xdd, 0x95, 0x7e, 0xec, 0xe3, 0xd1, 0x08, 0xe7, 0x2e, 0xbc, 0x17, 0x35, 0xbf, 0x25, 0xc9, 0x3a, 0x74, 0x5f, 0xd3, 0x35, 0xe3, 0xf7, 0x81, 0x01, 0xc7, 0xad, 0x43, 0x37, 0x2c, 0xe8, 0x86, 0x05, 0xc7, 0xf5, 0x01, 0xc6, 0x04, 0x61, 0x2e, 0x05, 0x36, 0x58, 0x1e, 0x7f, 0xf1, 0xab, 0x6f, 0xe1, 0x5c, 0xef, 0x36, 0x2e, 0x3c, 0xf1, 0x63, 0xe8, 0x6e, 0x5d, 0x84, 0x65, 0x7a, 0xca, 0x67, 0xab, 0x90, 0xe4, 0x38, 0x7e, 0xef, 0x6b, 0xd0, 0xb4, 0xf2, 0xbd, 0xfa, 0xf0, 0xf8, 0x1d, 0x0c, 0x96, 0xd1, 0xc6, 0xa0, 0x95, 0x4d, 0x61, 0x2c, 0x9b, 0xf6, 0xe9, 0x00, 0xf0, 0xb1, 0x4f, 0x7c, 0x17, 0xfe, 0x9f, 0xe7, 0xbe, 0x2e, 0xa0, 0xfe, 0x2a, 0xb1, 0x6d, 0x45, 0x90, 0xd3, 0x19, 0x8f, 0xa2, 0x5c, 0x7d, 0x86, 0xe8, 0x7d, 0x14, 0xcd, 0x94, 0xc1, 0xed, 0xda, 0xb8, 0x93, 0xa0, 0x86, 0x02, 0x0c, 0x05, 0x18, 0x6c, 0x76, 0x0b, 0xfb, 0xc3, 0x31, 0xba, 0x9d, 0x9e, 0x20, 0xb9, 0x41, 0x21, 0xc3, 0xc5, 0xe8, 0x76, 0x80, 0xd3, 0xb9, 0x0b, 0x20, 0x92, 0x7f, 0xbf, 0x5c, 0xcc, 0x70, 0xf9, 0xca, 0xc3, 0x38, 0xb7, 0x7d, 0x11, 0x07, 0x47, 0x77, 0x30, 0x4d, 0x22, 0x3c, 0xf9, 0xdd, 0x1f, 0xc4, 0xd5, 0x2f, 0xfe, 0x67, 0xec, 0x9f, 0xdc, 0xc6, 0x72, 0x19, 0x62, 0xb9, 0x1c, 0x62, 0x32, 0x3a, 0xc4, 0x62, 0xc1, 0xdd, 0x0e, 0x2f, 0x5c, 0xe8, 0x21, 0x8e, 0x43, 0xc4, 0x61, 0x88, 0xf1, 0x7c, 0x8e, 0x22, 0x4b, 0x60, 0x1a, 0x1a, 0x1c, 0xcb, 0x84, 0xed, 0x39, 0x28, 0x34, 0xbd, 0xe4, 0xa5, 0x2d, 0x53, 0x18, 0xc5, 0xf5, 0x9c, 0xcf, 0x46, 0x25, 0x5b, 0x66, 0x82, 0xc9, 0xc9, 0xec, 0x25, 0x13, 0x4c, 0x71, 0x3a, 0x70, 0x69, 0xaa, 0x5b, 0x2e, 0x97, 0x3c, 0x23, 0x3c, 0x8c, 0x60, 0x9a, 0x26, 0x7c, 0xdf, 0x2f, 0xb9, 0x41, 0xce, 0x66, 0x33, 0x8c, 0x46, 0x23, 0xf9, 0xf9, 0x33, 0x2d, 0x13, 0x9e, 0xb7, 0xd2, 0xb3, 0x13, 0xc1, 0x2e, 0x8c, 0x03, 0xa4, 0x59, 0x0a, 0xdd, 0x34, 0x50, 0xab, 0xfb, 0x15, 0x59, 0x58, 0x20, 0x89, 0xbd, 0x00, 0x9f, 0x8c, 0x6d, 0xc7, 0x54, 0x2c, 0xae, 0x43, 0x98, 0xb6, 0x55, 0x72, 0xf9, 0x54, 0x79, 0x3c, 0x79, 0x9e, 0xa3, 0xdb, 0x6d, 0x4b, 0xed, 0x33, 0xc5, 0x70, 0x92, 0xd6, 0x9b, 0xc2, 0x45, 0xa8, 0xe0, 0xd0, 0x75, 0x21, 0x26, 0x3c, 0xf7, 0x52, 0x4f, 0xe1, 0xd5, 0x1c, 0x5e, 0x6c, 0x9a, 0x1c, 0xf6, 0x37, 0x4d, 0x93, 0x4f, 0xbf, 0xe1, 0x02, 0x69, 0x82, 0x92, 0x2a, 0x42, 0x65, 0xe4, 0xa7, 0x69, 0x8a, 0x7e, 0x7f, 0x5b, 0x16, 0xa6, 0xe9, 0x74, 0x8a, 0x5a, 0xad, 0x86, 0xad, 0xad, 0x2d, 0x31, 0x00, 0x32, 0xd8, 0x36, 0xd7, 0xa4, 0x8f, 0x46, 0xa3, 0x35, 0x3b, 0x6c, 0x0e, 0x33, 0x73, 0x26, 0x3e, 0x37, 0x71, 0xd1, 0x24, 0x42, 0x40, 0x6b, 0xcd, 0x2c, 0xcb, 0x61, 0x18, 0x04, 0xd3, 0x47, 0x48, 0xd3, 0x0c, 0x9e, 0xe7, 0x49, 0x48, 0xdb, 0xb0, 0xf9, 0x0e, 0x7c, 0xff, 0x8d, 0x6f, 0x21, 0xcb, 0x78, 0x93, 0xe6, 0xb9, 0x1c, 0xc2, 0x6f, 0x38, 0x9e, 0x74, 0xe1, 0x63, 0x4c, 0x03, 0x58, 0x81, 0x24, 0xcb, 0x90, 0xca, 0x84, 0x51, 0x0d, 0x57, 0xaf, 0x5e, 0x42, 0x1c, 0xc7, 0x2b, 0xa7, 0x4e, 0x93, 0xc3, 0xe3, 0xfd, 0x6e, 0x8f, 0x37, 0x52, 0x29, 0x97, 0x2b, 0xc6, 0x4a, 0x48, 0x16, 0x35, 0x5b, 0x8b, 0xe5, 0x12, 0xfd, 0x76, 0x47, 0xf2, 0x29, 0xe8, 0xfd, 0xe7, 0xf2, 0xb8, 0x05, 0x0c, 0x43, 0x47, 0xaf, 0xd7, 0x15, 0x36, 0xc0, 0x73, 0x31, 0x74, 0x19, 0x88, 0xa2, 0x50, 0x36, 0x66, 0x7b, 0x7b, 0x7b, 0xa5, 0x78, 0xe9, 0x3c, 0xcf, 0x61, 0x54, 0x77, 0xd4, 0xd5, 0x14, 0x2e, 0x75, 0xf7, 0x5c, 0xf5, 0xdc, 0x3e, 0xcb, 0xc3, 0x9d, 0xbe, 0x47, 0x14, 0xc6, 0x92, 0x9d, 0x47, 0xfa, 0x39, 0x2a, 0x7a, 0x04, 0x1b, 0xd0, 0xcf, 0xa5, 0xe9, 0x51, 0xf5, 0x66, 0xaf, 0x26, 0xc9, 0x54, 0xe3, 0xf3, 0xaa, 0x13, 0x73, 0xb5, 0x68, 0xaa, 0xfb, 0xee, 0x2a, 0xe9, 0x8a, 0x76, 0x38, 0x55, 0xa7, 0xab, 0x2a, 0xa1, 0xa7, 0x6a, 0xf4, 0xb2, 0xa9, 0xf8, 0x57, 0x35, 0xfa, 0xd4, 0xb4, 0x10, 0xcc, 0x5d, 0xf5, 0x4b, 0xa7, 0x5f, 0x8e, 0x6b, 0xc9, 0x58, 0xbf, 0x34, 0x8d, 0x01, 0x56, 0x08, 0x5b, 0x49, 0x0b, 0x96, 0x65, 0x48, 0xf9, 0x05, 0xb7, 0x59, 0x2d, 0x60, 0x18, 0xfc, 0xef, 0x34, 0x4d, 0x43, 0xa2, 0xaf, 0x6c, 0x62, 0xab, 0x53, 0x6e, 0x75, 0xe7, 0xae, 0xfa, 0xbb, 0xd3, 0x0d, 0x10, 0xc7, 0xb1, 0x64, 0x71, 0x66, 0x99, 0x40, 0x16, 0x84, 0x41, 0x07, 0xe9, 0x68, 0x83, 0x60, 0x29, 0x3f, 0x7c, 0x9b, 0x8a, 0xed, 0x2a, 0x15, 0x0d, 0x62, 0x72, 0xd4, 0x4a, 0x85, 0x79, 0x3a, 0x9d, 0xc2, 0x72, 0x1c, 0x6e, 0x19, 0x2b, 0xae, 0x93, 0xae, 0x2b, 0x04, 0x3a, 0x65, 0x8d, 0xb1, 0xc9, 0x5c, 0x48, 0xd3, 0x0c, 0x78, 0x35, 0x3e, 0x59, 0xdb, 0x8e, 0x8f, 0x76, 0xf7, 0x02, 0xc2, 0x60, 0x8a, 0x56, 0xf7, 0x02, 0x5c, 0xb7, 0x8e, 0x0c, 0x0c, 0xcb, 0xf9, 0x10, 0xb7, 0xaf, 0x7f, 0xb9, 0x1c, 0xbe, 0x12, 0xc6, 0x67, 0x36, 0x7b, 0xfb, 0x37, 0xbe, 0xc9, 0x0d, 0x3c, 0x34, 0x0d, 0x9a, 0xc6, 0x27, 0xde, 0x07, 0x3d, 0x4a, 0x85, 0xbd, 0xe9, 0x60, 0xf7, 0xb1, 0x27, 0xe1, 0x78, 0xd7, 0xf9, 0xe4, 0x9c, 0xa7, 0xa5, 0xe9, 0x49, 0x25, 0x25, 0xf2, 0x46, 0xc8, 0x80, 0xe7, 0xb7, 0x61, 0xda, 0x1e, 0xce, 0x5f, 0x7c, 0x02, 0x4c, 0x63, 0xb8, 0x7f, 0xfb, 0x0d, 0xc4, 0xd1, 0x42, 0x14, 0xf4, 0x54, 0xee, 0x7b, 0x4d, 0xc3, 0x40, 0x9e, 0xa6, 0x88, 0x59, 0x1f, 0xcb, 0xf9, 0x14, 0xbd, 0xad, 0x5d, 0xa0, 0xe0, 0xf7, 0x38, 0xd9, 0x8d, 0xae, 0x25, 0xae, 0x15, 0x1a, 0x99, 0xaa, 0x02, 0xe0, 0xe1, 0x32, 0x58, 0xae, 0xc3, 0xed, 0xdf, 0x3a, 0x19, 0xa0, 0xef, 0x96, 0x03, 0x65, 0xf4, 0xeb, 0xef, 0xe2, 0x1b, 0xc3, 0x61, 0x59, 0x93, 0xae, 0xec, 0xd3, 0x1b, 0x5f, 0x7e, 0x03, 0xd3, 0x71, 0x7e, 0x66, 0x93, 0x25, 0x3f, 0x6b, 0x85, 0x2e, 0x48, 0xeb, 0x85, 0x68, 0x00, 0x72, 0x19, 0xce, 0x94, 0x17, 0xea, 0xfb, 0x20, 0x12, 0xe3, 0x74, 0x86, 0x42, 0xef, 0xe3, 0xfb, 0xbf, 0xef, 0x51, 0xec, 0xee, 0xed, 0xe2, 0x0f, 0x3f, 0xff, 0xc7, 0x98, 0xcd, 0x63, 0x58, 0x4e, 0x4b, 0x6a, 0xd1, 0xe3, 0x78, 0x8a, 0xae, 0x0f, 0xcc, 0xc0, 0xf0, 0xd4, 0x93, 0x8f, 0xa1, 0xbf, 0xb5, 0x8d, 0xe3, 0xc1, 0x11, 0x5e, 0x7f, 0xed, 0x35, 0x1c, 0x1d, 0x0d, 0xb0, 0xbd, 0xbd, 0x85, 0x2f, 0x3d, 0xff, 0x3c, 0xfe, 0xe8, 0xf3, 0x7f, 0x84, 0x93, 0xc1, 0x09, 0x66, 0xf3, 0x7d, 0xd8, 0x8e, 0x0f, 0x56, 0x04, 0xd0, 0x8d, 0x10, 0x9e, 0x07, 0x98, 0xa6, 0x85, 0x24, 0x5a, 0x22, 0x4b, 0x53, 0x14, 0x42, 0xda, 0x64, 0x9b, 0x62, 0x0a, 0x37, 0x38, 0xb2, 0x10, 0x44, 0xa1, 0x3c, 0xcb, 0xd4, 0x14, 0x2f, 0xba, 0x27, 0x39, 0x87, 0x24, 0x2e, 0x65, 0x62, 0xd3, 0xfd, 0x1d, 0xc7, 0x31, 0xbc, 0x7a, 0x4d, 0x1c, 0xb2, 0x11, 0xa6, 0xd3, 0x09, 0xe2, 0x38, 0x92, 0x05, 0x32, 0xcb, 0x32, 0xd8, 0xa6, 0x09, 0xad, 0xe0, 0x2e, 0x8c, 0x86, 0x61, 0xc0, 0xf5, 0x1c, 0xb4, 0xec, 0xa6, 0xfc, 0x3c, 0x4e, 0xa7, 0xe3, 0x12, 0x61, 0x8d, 0x7c, 0x27, 0x98, 0xc6, 0xe3, 0x5a, 0x93, 0x34, 0x94, 0x8c, 0xee, 0x66, 0xb3, 0x29, 0xad, 0x60, 0x89, 0x2c, 0x47, 0xf1, 0x9d, 0x86, 0x21, 0xbc, 0xd5, 0x5d, 0x47, 0xf9, 0x9c, 0xf3, 0xf3, 0x47, 0x85, 0xbc, 0x67, 0xb3, 0x19, 0xd2, 0x34, 0x95, 0x05, 0xe1, 0xd6, 0xad, 0x5b, 0x25, 0x2f, 0xf5, 0x6a, 0xa2, 0xa3, 0x65, 0x39, 0x25, 0xcf, 0x09, 0x95, 0xb1, 0xad, 0xde, 0xeb, 0x94, 0x32, 0x96, 0x65, 0x99, 0xdc, 0xf7, 0xba, 0xae, 0x8b, 0x3c, 0xd3, 0x24, 0xdc, 0x4f, 0xdf, 0x9f, 0xa4, 0x64, 0xf4, 0xe7, 0x14, 0x64, 0xc2, 0x18, 0x5b, 0x5b, 0xe1, 0xfa, 0x35, 0x6e, 0x96, 0x12, 0x47, 0x9c, 0x1f, 0x40, 0xeb, 0x42, 0x82, 0xf8, 0x3d, 0xc7, 0x95, 0xcd, 0xc6, 0xca, 0x24, 0x8b, 0x93, 0xf7, 0x66, 0xb3, 0x19, 0x8a, 0x5c, 0x2b, 0xb9, 0x83, 0x6a, 0x9a, 0xc6, 0xd3, 0xf1, 0xe6, 0xfc, 0x5c, 0x1e, 0xcd, 0x0e, 0xe4, 0x19, 0x6a, 0x99, 0x0e, 0x74, 0xcd, 0xc4, 0x72, 0x19, 0x62, 0x30, 0x38, 0xc1, 0x72, 0x19, 0x60, 0x7b, 0x7b, 0x6b, 0x65, 0x9c, 0x23, 0x78, 0x51, 0x86, 0xa9, 0x49, 0x52, 0xde, 0x32, 0x0e, 0x71, 0x70, 0x70, 0x00, 0x8d, 0x31, 0xbe, 0x8e, 0x89, 0x62, 0xdc, 0xba, 0x75, 0x0b, 0xa6, 0xce, 0x9b, 0x26, 0xdd, 0x82, 0x9c, 0xb0, 0xc3, 0x38, 0x02, 0x33, 0x74, 0x74, 0x3a, 0x1d, 0xc4, 0x71, 0x8c, 0xf1, 0x84, 0xf3, 0x73, 0xf8, 0xd9, 0xa1, 0x2b, 0xf7, 0x57, 0x21, 0xcd, 0x90, 0x08, 0xcd, 0xb2, 0x2c, 0x03, 0xbd, 0x5e, 0x07, 0x8d, 0x46, 0x03, 0xf7, 0xee, 0xdd, 0xc3, 0xc9, 0xc9, 0x00, 0x49, 0x92, 0xa0, 0xd1, 0x68, 0x95, 0xe2, 0x5f, 0x7d, 0xdf, 0x87, 0x41, 0x45, 0xb5, 0x6a, 0xbb, 0x49, 0xd3, 0x22, 0xed, 0x7b, 0xd4, 0xc4, 0x24, 0x55, 0x57, 0x79, 0x56, 0x41, 0x33, 0x4d, 0x13, 0x69, 0x12, 0xad, 0xed, 0x47, 0xa9, 0x53, 0x2c, 0x8a, 0x02, 0x79, 0x9a, 0x6f, 0x4c, 0x47, 0xa2, 0x9f, 0xa7, 0xc6, 0x2f, 0xaa, 0xcd, 0x03, 0x41, 0xca, 0x6a, 0x5e, 0x76, 0x35, 0x2b, 0x5c, 0x9d, 0xf8, 0xab, 0x37, 0xed, 0x6a, 0xd7, 0x99, 0xad, 0x4d, 0xf6, 0x6a, 0xf8, 0x81, 0xea, 0x7b, 0x4c, 0x28, 0x41, 0x69, 0xea, 0x57, 0x9e, 0x17, 0x7d, 0x2f, 0xd5, 0x40, 0x5f, 0xb5, 0xc7, 0xac, 0x92, 0x88, 0xb8, 0xf6, 0xd3, 0x45, 0x92, 0x44, 0x48, 0x53, 0x26, 0xb3, 0x7a, 0x39, 0x13, 0x3f, 0x41, 0x9a, 0x6a, 0x3c, 0x05, 0xa9, 0x48, 0x91, 0x26, 0xb9, 0x52, 0x38, 0x52, 0xc9, 0x72, 0xce, 0xf2, 0xec, 0x81, 0xe1, 0x1c, 0x44, 0xac, 0x53, 0x1d, 0xfd, 0x54, 0xe6, 0xba, 0x6d, 0xbb, 0x25, 0x22, 0x5d, 0x81, 0xbc, 0x64, 0x72, 0xa1, 0xba, 0xfd, 0xd1, 0x81, 0x42, 0xe6, 0x17, 0xe5, 0xf4, 0x27, 0x6a, 0x82, 0xca, 0x4e, 0x7a, 0x74, 0xbd, 0x25, 0xfc, 0x0f, 0xa6, 0xec, 0x0c, 0x0d, 0x30, 0x65, 0xa5, 0xb1, 0x49, 0x45, 0x60, 0xbb, 0x75, 0x5c, 0xb8, 0xf2, 0x0c, 0x8a, 0x5c, 0x10, 0xf1, 0x6c, 0x0f, 0x79, 0x9e, 0xc2, 0xb6, 0x3d, 0x68, 0xba, 0x89, 0x54, 0xbc, 0xd4, 0xa7, 0xbf, 0xe3, 0x2a, 0xb4, 0xd3, 0x7d, 0x44, 0x35, 0x47, 0xbc, 0xf2, 0xfa, 0xd9, 0x05, 0xfd, 0xde, 0x3e, 0x2c, 0xdb, 0x12, 0x84, 0xc3, 0xf4, 0x81, 0x48, 0xcf, 0x7a, 0x61, 0x07, 0x46, 0xc9, 0x8a, 0xdd, 0xaf, 0x57, 0xf6, 0xff, 0x55, 0x52, 0xa5, 0xe3, 0xd6, 0xf1, 0xd0, 0xd5, 0x67, 0x10, 0x86, 0x21, 0x9a, 0xed, 0x1e, 0x34, 0x43, 0x87, 0xed, 0x35, 0xa1, 0x1b, 0x82, 0x63, 0x51, 0xcc, 0x11, 0x06, 0x21, 0x16, 0x47, 0xaf, 0xf2, 0x29, 0x35, 0xae, 0xa1, 0x56, 0xef, 0x60, 0x31, 0x1d, 0xa3, 0x5e, 0xef, 0x72, 0xa2, 0x16, 0xe3, 0xc9, 0x5a, 0x54, 0xcc, 0x57, 0x5c, 0x97, 0xac, 0xe4, 0x90, 0x76, 0x74, 0xe3, 0xaf, 0xa1, 0xc3, 0x02, 0x2a, 0x85, 0xfb, 0x41, 0x8f, 0x87, 0x06, 0xa7, 0x78, 0xf5, 0xe5, 0x6b, 0x78, 0xe2, 0x7b, 0x2f, 0x97, 0xf4, 0xe9, 0x00, 0xf0, 0x0b, 0xbf, 0xf8, 0x8b, 0xf8, 0x9f, 0xfe, 0xf9, 0xff, 0x25, 0x1c, 0x15, 0xd9, 0x19, 0x29, 0x7b, 0x3a, 0x18, 0x13, 0x9f, 0x35, 0x68, 0x02, 0x45, 0xd0, 0x85, 0x5c, 0x0c, 0x28, 0x34, 0xf5, 0xda, 0x64, 0x00, 0xd3, 0x70, 0xeb, 0x9b, 0x7f, 0x80, 0x66, 0xe7, 0xbd, 0xf8, 0xd0, 0xd3, 0x3f, 0x82, 0xd7, 0x5f, 0x7b, 0x83, 0x9b, 0xfa, 0x1c, 0x0e, 0x70, 0x2a, 0xce, 0xf2, 0x79, 0x58, 0x20, 0x86, 0x8b, 0x4b, 0x17, 0xb7, 0x00, 0xdc, 0x5e, 0x49, 0x10, 0x07, 0x47, 0x18, 0x8f, 0x46, 0x18, 0x8f, 0x46, 0xf8, 0xda, 0x57, 0xbe, 0x8a, 0x57, 0x5e, 0xbd, 0x86, 0x79, 0x58, 0xe0, 0x23, 0x1f, 0x7a, 0x1c, 0x8b, 0xd7, 0x9f, 0x87, 0xe7, 0x34, 0xa0, 0x1b, 0x05, 0x74, 0x3d, 0x12, 0xc9, 0x87, 0x3a, 0x8e, 0x0f, 0x06, 0xa5, 0x7c, 0x03, 0xc0, 0x44, 0x1c, 0xa7, 0x98, 0xcf, 0x29, 0x08, 0x65, 0x7d, 0x08, 0x51, 0x1b, 0xd8, 0x7a, 0x9d, 0x5b, 0xc7, 0xf2, 0x46, 0x7b, 0xe5, 0x8c, 0x29, 0xbd, 0xc5, 0x83, 0x39, 0x87, 0xe8, 0x0d, 0xbe, 0x6b, 0x5d, 0x2c, 0xf9, 0xfd, 0xce, 0x34, 0xc0, 0x73, 0x1c, 0xf4, 0x3b, 0x5d, 0xc9, 0x6a, 0x0e, 0xc3, 0x00, 0x69, 0x1a, 0xa3, 0x28, 0x32, 0x39, 0xa5, 0x76, 0xb7, 0xba, 0x25, 0x6e, 0x4d, 0x9c, 0x89, 0x70, 0x92, 0x24, 0x42, 0x92, 0x27, 0x68, 0xb4, 0x5b, 0xa5, 0xb4, 0x34, 0x4d, 0xd3, 0x80, 0x22, 0x87, 0x6e, 0x99, 0x70, 0x6a, 0x1e, 0x6a, 0x0e, 0x77, 0x5a, 0x4b, 0x12, 0x9e, 0xde, 0x95, 0x17, 0xa9, 0xfc, 0xcc, 0x6a, 0x9a, 0x06, 0xdb, 0x73, 0x61, 0x58, 0x16, 0x98, 0x21, 0x56, 0x21, 0xa9, 0x81, 0x22, 0xcf, 0x90, 0xe4, 0x19, 0x58, 0x9a, 0x48, 0xa4, 0x8e, 0xbe, 0x7f, 0x95, 0x34, 0x17, 0x04, 0xb1, 0x84, 0xea, 0xc9, 0xab, 0x9e, 0x26, 0x7e, 0x5d, 0xd7, 0xf1, 0xf6, 0xdb, 0x6f, 0xcb, 0x09, 0xb9, 0xd9, 0x6c, 0xca, 0xfd, 0xf5, 0x74, 0x3a, 0xe5, 0x24, 0x2f, 0x50, 0x9a, 0x21, 0x83, 0x61, 0xd8, 0x0a, 0xd2, 0x69, 0x09, 0x9e, 0x42, 0x86, 0x38, 0x4e, 0x05, 0xe2, 0xe1, 0x89, 0xf5, 0x00, 0x27, 0xea, 0xf6, 0x7a, 0x5b, 0x88, 0xa3, 0x58, 0x72, 0x06, 0x54, 0x24, 0x95, 0x98, 0xe4, 0xc4, 0x49, 0x48, 0xd2, 0x0c, 0xc8, 0x0b, 0x2c, 0x83, 0x10, 0xe3, 0xc9, 0x54, 0xb2, 0xe9, 0x6b, 0xb5, 0x7a, 0x85, 0xdf, 0xa5, 0x23, 0x47, 0x81, 0x40, 0xc0, 0xe8, 0x96, 0xe3, 0xc1, 0xb0, 0x88, 0x34, 0x0d, 0xc4, 0x59, 0x0e, 0xcb, 0x74, 0xd0, 0xdf, 0xae, 0xaf, 0x24, 0x75, 0x49, 0x86, 0x24, 0x8b, 0xb0, 0x08, 0x03, 0x51, 0x3c, 0x13, 0xf9, 0x9c, 0x66, 0x0b, 0x1e, 0x3c, 0xd3, 0xeb, 0x76, 0xb9, 0x91, 0x4c, 0xc2, 0x51, 0x9e, 0x86, 0xcf, 0xff, 0xfd, 0xcb, 0xaf, 0x7e, 0x1d, 0xed, 0x76, 0x1b, 0xae, 0x44, 0x04, 0x2c, 0x29, 0x3d, 0xb3, 0xc3, 0x10, 0xfb, 0xfb, 0xfb, 0x25, 0x2b, 0x57, 0xda, 0x95, 0x9f, 0x3b, 0x77, 0x0e, 0xbd, 0x5e, 0x4f, 0x40, 0xf0, 0x73, 0x1c, 0x1d, 0x1d, 0x49, 0x95, 0x80, 0xae, 0xeb, 0xb8, 0x78, 0xf1, 0x22, 0xda, 0xed, 0x36, 0xa6, 0xd3, 0xb9, 0x5c, 0x57, 0x48, 0xe5, 0xd9, 0x26, 0x97, 0x2e, 0xba, 0xb1, 0x55, 0x1f, 0xf6, 0x6a, 0xfc, 0xe8, 0x26, 0x22, 0x53, 0x99, 0xf1, 0xbc, 0x5a, 0xde, 0xab, 0x71, 0x79, 0x64, 0xda, 0x9f, 0xa6, 0x29, 0x5c, 0xd7, 0x2d, 0xb1, 0x38, 0xd5, 0x89, 0xbc, 0x9a, 0xbf, 0xbe, 0x09, 0xda, 0xaf, 0x5a, 0xc2, 0x56, 0x75, 0xe3, 0xea, 0x4e, 0x59, 0x65, 0xbb, 0xab, 0xcf, 0xf7, 0xac, 0xd7, 0x50, 0xdd, 0x99, 0x57, 0xbd, 0xde, 0xd3, 0x34, 0x85, 0x21, 0x60, 0x1e, 0xfa, 0x3e, 0x89, 0x22, 0xc3, 0xa3, 0x1d, 0x77, 0x95, 0x0f, 0xa0, 0x3e, 0xdf, 0x34, 0x8d, 0x45, 0x87, 0xce, 0xd3, 0xe3, 0xf8, 0x24, 0xae, 0x09, 0x29, 0x4d, 0x02, 0xdb, 0xf6, 0x38, 0xb2, 0x91, 0x84, 0x28, 0x72, 0x42, 0x15, 0x74, 0x65, 0xda, 0x35, 0x1e, 0x78, 0x60, 0xab, 0x2c, 0x7d, 0xba, 0xbe, 0xea, 0xa1, 0xa5, 0x22, 0x14, 0xba, 0xae, 0x23, 0xcb, 0x49, 0xde, 0xb1, 0xe2, 0x10, 0xd0, 0x7d, 0xe0, 0x98, 0xfc, 0x66, 0x4c, 0xd3, 0x55, 0xd8, 0x4b, 0x96, 0xad, 0xbf, 0x4f, 0x69, 0xca, 0x27, 0x76, 0x42, 0x61, 0xd4, 0x66, 0x87, 0xa0, 0xa1, 0x34, 0xcb, 0x60, 0x59, 0x0e, 0x9c, 0x8a, 0x2e, 0x7e, 0x1d, 0x59, 0x58, 0x4d, 0xe8, 0xea, 0x75, 0x2c, 0x19, 0xec, 0xe8, 0x26, 0x1e, 0xd9, 0x7b, 0x04, 0x77, 0xe6, 0x53, 0xd4, 0xf2, 0x04, 0xa9, 0xde, 0x80, 0xf7, 0x80, 0x9a, 0xb6, 0xbf, 0xbf, 0x8f, 0xdf, 0xf8, 0x1f, 0x3f, 0x85, 0xdf, 0xfa, 0x97, 0x7f, 0xc2, 0xa7, 0xc9, 0xbc, 0xc0, 0x7f, 0xe9, 0x83, 0x1a, 0x4e, 0xd3, 0x32, 0xe4, 0x21, 0xaf, 0x9a, 0x6f, 0xc8, 0xf7, 0xc7, 0x30, 0xe1, 0xd6, 0x5a, 0x80, 0x16, 0x70, 0xf9, 0x9e, 0x61, 0xc0, 0xad, 0xb5, 0x60, 0xbb, 0x0e, 0xdf, 0xb9, 0xe9, 0x9c, 0x64, 0xe5, 0x78, 0x3d, 0x98, 0x3a, 0xc3, 0xe1, 0xdd, 0xeb, 0xb0, 0x1d, 0x1f, 0x8d, 0x66, 0x0f, 0xd0, 0x4c, 0x45, 0x9e, 0xc8, 0xa4, 0xf6, 0x9b, 0xc9, 0x7b, 0x3f, 0x2d, 0xe5, 0x25, 0xfc, 0xe8, 0x87, 0xbf, 0x1b, 0x78, 0xf1, 0x1b, 0x1b, 0xb5, 0xed, 0x7d, 0xd7, 0xc3, 0xe1, 0xde, 0xb9, 0x12, 0x59, 0xae, 0xef, 0x7a, 0x40, 0xb0, 0xc4, 0x6d, 0x00, 0xf7, 0xaf, 0x0d, 0x4b, 0x05, 0x7d, 0xbc, 0x3f, 0x41, 0x5d, 0x06, 0xc0, 0x9e, 0xcd, 0x6c, 0x27, 0xe5, 0x02, 0x5f, 0x05, 0x88, 0x33, 0x01, 0x99, 0x28, 0xea, 0xb9, 0x28, 0xf8, 0x65, 0x54, 0xea, 0xa7, 0xfe, 0xf6, 0xa7, 0xf0, 0xda, 0x6b, 0xef, 0x62, 0x3c, 0x1a, 0x89, 0xf0, 0x1c, 0x17, 0x3b, 0x3b, 0x5b, 0x98, 0xbd, 0x73, 0x0f, 0x31, 0x80, 0xf7, 0xbc, 0xe7, 0x3d, 0x78, 0xfb, 0xed, 0xb7, 0x01, 0x6c, 0xe1, 0x93, 0xbf, 0xf4, 0xab, 0x78, 0xfd, 0xeb, 0x5f, 0xc4, 0x5f, 0x3f, 0xf7, 0x87, 0x22, 0xe8, 0x83, 0x2b, 0x0e, 0xde, 0xbe, 0x39, 0xc4, 0x3c, 0x2c, 0x60, 0x39, 0xdc, 0x50, 0x43, 0x47, 0x84, 0x38, 0x1a, 0xa1, 0x88, 0x32, 0x44, 0x11, 0x41, 0xd1, 0x0c, 0xed, 0x66, 0x83, 0x13, 0x9d, 0x82, 0x18, 0xc1, 0x3c, 0x45, 0x12, 0x26, 0xd0, 0x18, 0xf9, 0x60, 0xe7, 0x30, 0xcc, 0xa2, 0xe4, 0xa5, 0x4d, 0xb0, 0x3a, 0xed, 0x83, 0x67, 0xb3, 0x85, 0x64, 0x4d, 0xab, 0x6b, 0x48, 0xda, 0x61, 0xce, 0xe7, 0x53, 0x78, 0x9e, 0x27, 0xac, 0x50, 0x0d, 0xb1, 0xcf, 0x65, 0x72, 0xaf, 0xfc, 0xfa, 0xeb, 0x6f, 0xc0, 0xb2, 0x56, 0xf9, 0xd6, 0x9c, 0x98, 0x65, 0xc0, 0x34, 0x85, 0x37, 0x79, 0x30, 0x2b, 0xa1, 0x03, 0xea, 0x8a, 0x51, 0xb5, 0x92, 0xa5, 0x3d, 0xb8, 0x7a, 0x46, 0xf9, 0xbe, 0xcf, 0xc3, 0x5f, 0xc5, 0x67, 0x9b, 0xcb, 0x60, 0x63, 0xc5, 0xfc, 0x4b, 0x97, 0x12, 0x31, 0x6a, 0xaa, 0x09, 0x2a, 0xa7, 0xb5, 0xdb, 0x76, 0xaf, 0xbb, 0x22, 0x00, 0x0a, 0x4f, 0x78, 0x82, 0xf2, 0xf9, 0x1a, 0xa2, 0x10, 0x45, 0x0c, 0xb0, 0x2c, 0x5d, 0xa2, 0xad, 0x84, 0x26, 0x74, 0x3a, 0x6d, 0xcc, 0xe7, 0x73, 0xdc, 0xbd, 0x7b, 0x07, 0xc3, 0xe1, 0x10, 0x45, 0x51, 0xa0, 0xdd, 0x6e, 0x4b, 0x67, 0xb8, 0xd9, 0x74, 0x29, 0x5d, 0xd9, 0xd4, 0xdd, 0x3d, 0xdd, 0x3b, 0xf7, 0xef, 0x0f, 0x64, 0x9c, 0xaa, 0xaa, 0xae, 0x22, 0x52, 0xdb, 0x68, 0x38, 0x15, 0x01, 0x33, 0x1c, 0xa1, 0x9c, 0xcf, 0x67, 0x98, 0xcd, 0x72, 0x0c, 0x87, 0x63, 0x61, 0x22, 0x53, 0x93, 0x56, 0xb0, 0xd5, 0x20, 0xaa, 0x56, 0xab, 0x85, 0xc1, 0x60, 0x88, 0x20, 0xc8, 0x90, 0x24, 0x3c, 0xf8, 0x85, 0xcc, 0x2b, 0xd3, 0x14, 0xc8, 0x32, 0xa0, 0xd1, 0xe1, 0xe1, 0x31, 0x9d, 0x4e, 0x07, 0xb6, 0x45, 0xf1, 0xb2, 0x22, 0xdd, 0x31, 0x08, 0xd1, 0x6e, 0x77, 0x14, 0x34, 0x21, 0x44, 0x14, 0x26, 0x08, 0xc2, 0x05, 0xe2, 0x38, 0x45, 0x51, 0x30, 0x24, 0x29, 0xd7, 0xec, 0x2f, 0x16, 0x0b, 0xbc, 0xf1, 0xc6, 0x1b, 0x88, 0x96, 0x01, 0x67, 0xbd, 0x77, 0x7b, 0x48, 0xd3, 0x54, 0x86, 0xe1, 0x24, 0xd3, 0x29, 0x74, 0xd3, 0x40, 0x32, 0x9b, 0x22, 0x14, 0xee, 0xa8, 0xa6, 0x65, 0x21, 0x89, 0x52, 0x2c, 0x96, 0x33, 0x89, 0x2a, 0xf0, 0x6b, 0x9f, 0xc3, 0x30, 0x74, 0xb9, 0xc6, 0xf1, 0x7d, 0x1f, 0x71, 0xc2, 0x6b, 0x00, 0x45, 0xa4, 0x76, 0x8a, 0x0e, 0x1c, 0xd7, 0x42, 0xad, 0xe6, 0x42, 0xd3, 0x78, 0xe8, 0x11, 0xb7, 0xc0, 0x9d, 0xae, 0x20, 0x77, 0x95, 0x2d, 0xa7, 0x4e, 0xca, 0x6a, 0x61, 0x54, 0xcd, 0x4d, 0x54, 0xd9, 0x58, 0x15, 0xd2, 0x5d, 0xb9, 0xc2, 0xad, 0xf4, 0xcf, 0xc4, 0x96, 0x57, 0x77, 0xd1, 0x9a, 0xae, 0xad, 0x39, 0xa0, 0xa9, 0x3a, 0xf5, 0x6a, 0x93, 0xa0, 0x3e, 0xa7, 0xea, 0x74, 0xad, 0x16, 0xec, 0x4d, 0xe9, 0x68, 0x6a, 0xb3, 0x72, 0xd6, 0x7e, 0xbb, 0xca, 0xb6, 0x57, 0x27, 0x46, 0x55, 0x76, 0x27, 0x9b, 0x09, 0x25, 0x4b, 0xb7, 0x1a, 0x50, 0x73, 0x66, 0x06, 0x73, 0xa5, 0x61, 0x50, 0x77, 0x8f, 0x86, 0x61, 0x72, 0xd2, 0x4e, 0x9e, 0x20, 0xcb, 0x8c, 0x92, 0xbb, 0x13, 0xad, 0x24, 0x92, 0x24, 0x92, 0x16, 0xac, 0x94, 0x0d, 0x7e, 0xd6, 0x83, 0xa6, 0xe8, 0x6a, 0x21, 0xa7, 0x0f, 0x38, 0xa1, 0x1d, 0x12, 0x66, 0x2b, 0xb2, 0xca, 0xce, 0xcb, 0x2c, 0x71, 0x04, 0x54, 0x57, 0x3a, 0xf5, 0xb5, 0xf1, 0x7f, 0xc3, 0x1b, 0x1a, 0x2d, 0x07, 0x2c, 0x8b, 0xb3, 0x37, 0x89, 0xc4, 0xc1, 0x1b, 0x07, 0x0d, 0x60, 0xfc, 0x40, 0x49, 0xd2, 0x14, 0xba, 0x6e, 0x22, 0x57, 0xae, 0x49, 0x75, 0x3a, 0xdf, 0x54, 0x44, 0xd6, 0xb4, 0xf9, 0x8c, 0xc1, 0x71, 0xea, 0xf0, 0x7c, 0x13, 0x17, 0xfd, 0x86, 0x98, 0xd0, 0x0b, 0xc4, 0x0f, 0xb8, 0x26, 0x3f, 0xff, 0x0b, 0xbf, 0x8c, 0x45, 0x18, 0x4b, 0x33, 0xa3, 0xbc, 0x12, 0xe3, 0x79, 0xd6, 0x63, 0x67, 0x67, 0x0b, 0x87, 0x87, 0x03, 0x2c, 0x97, 0xf3, 0xd2, 0xda, 0x49, 0x5d, 0xcf, 0x10, 0xfa, 0x44, 0x07, 0xa4, 0xeb, 0x59, 0x94, 0x5b, 0xb3, 0x51, 0x87, 0x5d, 0x14, 0x0c, 0x96, 0xe5, 0xc1, 0xf3, 0xb8, 0x9d, 0xd2, 0x4f, 0xfd, 0xc8, 0xf7, 0xe2, 0x4f, 0xff, 0xf2, 0x65, 0x18, 0x5d, 0x47, 0xb8, 0xf2, 0x69, 0xa5, 0xeb, 0xcb, 0x13, 0x04, 0xb1, 0xe6, 0xea, 0x78, 0xf0, 0xe6, 0x67, 0xf1, 0xdd, 0x3f, 0xfe, 0xeb, 0x38, 0x7e, 0xf1, 0x1b, 0x25, 0x6d, 0xfb, 0x71, 0xb0, 0x5c, 0x23, 0xc6, 0xa9, 0x8f, 0x6f, 0x74, 0xdb, 0x78, 0x68, 0x70, 0x8a, 0xe7, 0x9f, 0xfb, 0x2a, 0xce, 0x3f, 0xd6, 0x41, 0x6b, 0xb7, 0x89, 0xf1, 0xfe, 0x04, 0xad, 0xdd, 0x26, 0xfe, 0x97, 0xdf, 0xfa, 0xe2, 0x99, 0xc1, 0x2f, 0xd5, 0x26, 0x8c, 0x76, 0xfc, 0xdc, 0xfd, 0x71, 0xf5, 0xf9, 0xc8, 0x61, 0x94, 0xde, 0xcf, 0x6b, 0x5f, 0xf9, 0x1d, 0xfc, 0xd3, 0xff, 0xe1, 0x4b, 0xb8, 0xfa, 0xe8, 0xd7, 0x71, 0x3c, 0x38, 0x42, 0x6d, 0x7f, 0x1f, 0x87, 0x87, 0x03, 0xd4, 0x76, 0xb6, 0xd0, 0xed, 0xf4, 0x80, 0xe1, 0xca, 0xbf, 0xfd, 0xfe, 0x9d, 0xeb, 0x78, 0xf6, 0xf3, 0xbf, 0x8b, 0xc3, 0x43, 0x2e, 0x03, 0x3a, 0x38, 0x89, 0xf0, 0xe8, 0xa5, 0xb6, 0xe2, 0x25, 0xd0, 0x92, 0x9e, 0xef, 0x9a, 0x96, 0x71, 0xf9, 0x99, 0x61, 0xc2, 0xb1, 0x4c, 0xe4, 0x45, 0x86, 0x34, 0xcb, 0xb0, 0x5c, 0x2e, 0x38, 0xc3, 0xb9, 0xee, 0xc1, 0x34, 0x5c, 0x30, 0xdd, 0x94, 0x8e, 0x6c, 0x79, 0x06, 0x68, 0x2c, 0x2a, 0x91, 0x8c, 0x54, 0x5e, 0x0f, 0x11, 0x78, 0x89, 0x43, 0x42, 0xb2, 0x30, 0x9e, 0xee, 0xc8, 0x90, 0xe7, 0x0c, 0xe7, 0xcf, 0xef, 0x60, 0xb1, 0x58, 0x20, 0x08, 0x16, 0x98, 0xcd, 0x66, 0x18, 0x0e, 0x0b, 0xb8, 0x2e, 0xd0, 0x6e, 0xf3, 0xe2, 0xb0, 0xbd, 0xd3, 0x96, 0x3c, 0x8b, 0x30, 0x0c, 0x31, 0x5f, 0x4c, 0x51, 0x20, 0x93, 0x28, 0xd9, 0x3c, 0x2a, 0xdf, 0x4b, 0x34, 0xf4, 0x70, 0x97, 0x31, 0x0f, 0x79, 0xba, 0x62, 0x7e, 0xab, 0xab, 0x1c, 0xb2, 0x40, 0x65, 0x59, 0x5e, 0x32, 0x9b, 0xd1, 0xf4, 0x55, 0xcc, 0xa8, 0x6d, 0xdb, 0xc8, 0x35, 0xc6, 0xf3, 0xcd, 0x95, 0xe6, 0x3c, 0xcb, 0x73, 0x9e, 0xde, 0x27, 0x22, 0x57, 0xa9, 0x79, 0x50, 0x77, 0xc1, 0xf4, 0x3d, 0x5b, 0xad, 0xa6, 0x2c, 0x22, 0x44, 0xac, 0xa3, 0xe9, 0x94, 0x08, 0xb2, 0x1c, 0xe9, 0xb3, 0xa5, 0x67, 0xb9, 0x65, 0x59, 0x12, 0xc1, 0xbb, 0x74, 0xb9, 0x57, 0x5a, 0x49, 0x91, 0x65, 0x2b, 0xa1, 0xbe, 0x14, 0x6c, 0x42, 0x4d, 0x04, 0xdf, 0xfd, 0x73, 0x56, 0xb9, 0xa6, 0x69, 0xf2, 0xef, 0x93, 0x24, 0x91, 0x08, 0x81, 0xae, 0x4f, 0xe4, 0xeb, 0x9f, 0xcc, 0x67, 0x1c, 0x35, 0xd4, 0x35, 0xa4, 0x45, 0x8e, 0x9c, 0x01, 0x5e, 0xdd, 0x97, 0x5c, 0xaf, 0x1c, 0x96, 0x30, 0x96, 0x89, 0x65, 0xc3, 0xb6, 0x5c, 0x2e, 0x91, 0xe6, 0x31, 0x74, 0x0d, 0xd0, 0x0d, 0x03, 0xba, 0x61, 0x41, 0xd3, 0x4d, 0xe4, 0x28, 0x10, 0x25, 0x3c, 0xbd, 0x6c, 0x3a, 0x99, 0x4b, 0x4e, 0x01, 0xe7, 0x0a, 0xf0, 0x5a, 0x46, 0x33, 0x67, 0xb3, 0x99, 0xc2, 0x07, 0x30, 0x1a, 0x2d, 0xb8, 0xbc, 0x4c, 0xc8, 0x33, 0xe9, 0xba, 0x50, 0x93, 0x94, 0x0b, 0xee, 0x53, 0x0e, 0x40, 0x4b, 0x74, 0xa4, 0x45, 0x8e, 0xac, 0x58, 0xdd, 0x5b, 0xc1, 0x7c, 0x21, 0x55, 0x5f, 0xed, 0x76, 0x13, 0x17, 0x2f, 0xee, 0xc9, 0xb5, 0xca, 0x6c, 0x36, 0x93, 0xcd, 0xd3, 0xd1, 0x51, 0x88, 0xc9, 0x64, 0x22, 0x2c, 0x65, 0x9b, 0xd8, 0xa5, 0xb0, 0xce, 0x12, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xdb, 0x3b, 0x8f, 0x66, 0xb3, 0x89, 0x3b, 0xb7, 0xef, 0x4b, 0x69, 0xa2, 0x6d, 0xdb, 0xa8, 0xd5, 0x6a, 0x30, 0xd4, 0x62, 0x97, 0x2b, 0xe9, 0x69, 0xaa, 0xa3, 0x11, 0x75, 0xa5, 0x55, 0x13, 0x1a, 0x55, 0xca, 0xb5, 0x09, 0x32, 0x27, 0x5f, 0x0d, 0x7a, 0x03, 0xe8, 0x4d, 0xa3, 0x28, 0x39, 0x75, 0xa7, 0x4e, 0xd0, 0x30, 0x4d, 0xba, 0xea, 0xc4, 0xae, 0x12, 0xcd, 0xd4, 0x09, 0x9c, 0x6d, 0x70, 0x92, 0x53, 0xb5, 0xd9, 0xd5, 0xff, 0x57, 0x4d, 0x12, 0xd2, 0x34, 0x95, 0x05, 0xa5, 0x6a, 0x4b, 0xb9, 0xc9, 0xca, 0x52, 0x65, 0x6a, 0xd2, 0xbf, 0x21, 0xb3, 0x7e, 0xb5, 0xe8, 0xa9, 0x3f, 0xa3, 0xba, 0x6a, 0xa8, 0x1e, 0x88, 0xbc, 0xe0, 0xf2, 0x0e, 0x30, 0x4e, 0x52, 0xb1, 0x3f, 0x67, 0x00, 0xcb, 0xe5, 0x6e, 0x9b, 0xf6, 0x4f, 0x74, 0xb0, 0xf0, 0xa6, 0xa2, 0xac, 0xf3, 0xdf, 0xb8, 0xdb, 0x04, 0xd7, 0xc9, 0x52, 0xda, 0x11, 0xed, 0xe7, 0xe8, 0xff, 0xb9, 0x3c, 0x67, 0x25, 0x4f, 0x2b, 0xcb, 0x0e, 0x35, 0x29, 0x87, 0xa1, 0xb5, 0x47, 0x9c, 0xc4, 0xe2, 0xc3, 0xae, 0x2b, 0x8e, 0x51, 0xaa, 0x3e, 0x9f, 0x4f, 0xdf, 0x7a, 0xc1, 0x60, 0x59, 0xa6, 0x84, 0xf2, 0x22, 0x41, 0x5e, 0x31, 0x0c, 0x62, 0xd6, 0xe7, 0x28, 0x08, 0xfa, 0x17, 0x08, 0x82, 0x2a, 0xef, 0xab, 0xbe, 0x86, 0xea, 0x7b, 0x51, 0x2a, 0xf8, 0xca, 0x97, 0xcc, 0x6a, 0x7d, 0x49, 0x86, 0x33, 0xcf, 0xd8, 0xa7, 0x5b, 0x98, 0x41, 0x3b, 0x0d, 0x31, 0x9a, 0x4f, 0x45, 0x43, 0x54, 0x4e, 0xb4, 0x7b, 0xd0, 0x63, 0x38, 0x5c, 0xf9, 0xfa, 0x6b, 0x4c, 0x93, 0x07, 0xf5, 0x26, 0x3b, 0x54, 0xd2, 0x0a, 0xbb, 0x5e, 0xe7, 0x4c, 0xf4, 0x81, 0xbf, 0x17, 0x09, 0x6c, 0x93, 0x21, 0x5c, 0xcc, 0x90, 0x17, 0x39, 0x2e, 0x5f, 0x79, 0x1f, 0x3a, 0xaf, 0x0f, 0x61, 0x3b, 0x1e, 0xc2, 0x28, 0x96, 0xd7, 0x9e, 0x13, 0x27, 0xf9, 0x35, 0xd6, 0xa0, 0xa8, 0x34, 0xc4, 0xc8, 0xf1, 0xc9, 0x4f, 0xfd, 0x1a, 0x2e, 0x3f, 0xed, 0xe3, 0xe0, 0xe3, 0xdf, 0x83, 0x93, 0x2f, 0x7c, 0x19, 0xbd, 0x34, 0xe1, 0xfe, 0xf0, 0x4a, 0xde, 0xbc, 0x7e, 0xfd, 0xdd, 0xb5, 0xe7, 0xf1, 0x54, 0xa7, 0x03, 0xfd, 0x74, 0x04, 0x0c, 0x4e, 0x31, 0x3a, 0xd2, 0xd1, 0xda, 0x45, 0x69, 0x52, 0x67, 0xd8, 0x6c, 0xd9, 0x2a, 0x1b, 0xef, 0xb4, 0x10, 0x3b, 0xf3, 0x95, 0xd7, 0x3c, 0xb7, 0x02, 0xe6, 0xe7, 0x47, 0x9c, 0x29, 0xc6, 0x37, 0x5a, 0x81, 0x1f, 0xfa, 0x91, 0x9f, 0xc3, 0x8b, 0x5f, 0xfe, 0x4b, 0x78, 0xb5, 0x3a, 0xc6, 0xa3, 0x11, 0x76, 0x77, 0x77, 0x31, 0x1c, 0x86, 0x58, 0xc4, 0x2e, 0x6c, 0xdf, 0x05, 0x86, 0x27, 0xb8, 0x75, 0x67, 0x20, 0xa1, 0xf7, 0x97, 0x5f, 0xbf, 0x0b, 0xcb, 0x69, 0xe1, 0x5c, 0xc7, 0x04, 0x70, 0x8c, 0xfd, 0xc3, 0x31, 0xae, 0x3e, 0x0a, 0xc5, 0x2e, 0xb6, 0x89, 0x38, 0x9e, 0x22, 0x8d, 0x23, 0x24, 0x51, 0x06, 0x40, 0xb8, 0xa4, 0x65, 0x05, 0x92, 0x28, 0x01, 0x43, 0x8e, 0x3c, 0x67, 0x48, 0xd3, 0x08, 0xf3, 0x59, 0x88, 0x30, 0x4e, 0x01, 0xe8, 0x30, 0x0d, 0x9b, 0xef, 0x87, 0xb1, 0x94, 0x4d, 0x18, 0xad, 0xf0, 0x88, 0xa9, 0x4d, 0x53, 0xa8, 0x1a, 0x34, 0x43, 0x93, 0xb7, 0x2c, 0x82, 0x59, 0x28, 0x5d, 0xce, 0xf6, 0xf6, 0xf6, 0x64, 0x70, 0x86, 0x65, 0x59, 0x38, 0x3e, 0x3e, 0x86, 0x4e, 0x52, 0x22, 0xf1, 0xbd, 0x09, 0xed, 0xa2, 0x8c, 0xf3, 0x4d, 0xc8, 0x23, 0xa1, 0x3c, 0xb5, 0x5a, 0x0d, 0x79, 0x6a, 0xca, 0xb5, 0xa2, 0xda, 0xd0, 0x12, 0xd2, 0x65, 0x8a, 0x20, 0x1a, 0x3a, 0x5f, 0xc1, 0xf2, 0x52, 0x41, 0x3e, 0x9d, 0x8c, 0x4b, 0xeb, 0x45, 0x6e, 0x48, 0x32, 0x5d, 0x25, 0x31, 0x0a, 0x63, 0x29, 0x6a, 0x4a, 0xe9, 0xe7, 0xd6, 0xeb, 0x75, 0xa1, 0x07, 0xcf, 0x44, 0x6e, 0x7a, 0x80, 0xe9, 0x74, 0x2a, 0xf5, 0xed, 0xc4, 0x36, 0x9f, 0xcd, 0x78, 0xe6, 0x38, 0x9d, 0xd1, 0xd4, 0x00, 0xd1, 0x39, 0x98, 0x65, 0x63, 0x89, 0x2c, 0xd0, 0x73, 0xa4, 0xc6, 0x28, 0x8e, 0x63, 0x6c, 0xf5, 0x5a, 0xf0, 0xdc, 0x9a, 0xfc, 0x2c, 0x8d, 0x46, 0x23, 0x8c, 0xed, 0xb1, 0x7c, 0x7e, 0x9e, 0xe7, 0x73, 0x36, 0xfb, 0xd1, 0x00, 0x8d, 0x46, 0x1d, 0x5b, 0x5b, 0x5b, 0x52, 0x02, 0x68, 0x9a, 0x26, 0xa2, 0x34, 0x92, 0x2e, 0x77, 0xcb, 0xe5, 0x52, 0x86, 0xa6, 0x10, 0x71, 0x30, 0x4b, 0x57, 0xbe, 0x07, 0x14, 0x9a, 0x32, 0x1a, 0x8d, 0x24, 0x74, 0x3d, 0x0f, 0x86, 0xf2, 0xf7, 0x94, 0x59, 0xd1, 0x6c, 0xb4, 0xe1, 0xd7, 0x1a, 0xf2, 0xdc, 0x25, 0xee, 0x57, 0x9a, 0xad, 0xd4, 0x5a, 0xdc, 0x15, 0xcf, 0xc7, 0xa3, 0x8f, 0xfa, 0x70, 0x1c, 0x07, 0x83, 0x23, 0x6e, 0x61, 0xdb, 0x69, 0xb6, 0xb0, 0x58, 0x2c, 0x60, 0xea, 0x5c, 0x9a, 0x76, 0xfb, 0xde, 0x0d, 0xf4, 0x7a, 0x3d, 0xd4, 0x9b, 0x4d, 0x14, 0x8c, 0xaf, 0xa0, 0x2c, 0x87, 0xbb, 0xfb, 0xcd, 0xe6, 0x73, 0xec, 0xed, 0xed, 0x49, 0x2f, 0x02, 0x3a, 0xdb, 0x89, 0xb5, 0xaf, 0x2a, 0x98, 0x88, 0x63, 0xd6, 0x6e, 0xb7, 0xd1, 0x6e, 0xb7, 0x65, 0x4c, 0xab, 0xef, 0xfb, 0x72, 0x87, 0x4e, 0x4d, 0x82, 0xbe, 0xf7, 0xd0, 0x33, 0xbf, 0xa9, 0x5a, 0xfb, 0x6d, 0xba, 0x71, 0x54, 0x6d, 0x35, 0x75, 0x8a, 0xb6, 0x6d, 0x73, 0x16, 0x63, 0xce, 0x3b, 0x5e, 0x80, 0x27, 0x05, 0x01, 0x1a, 0xff, 0xb3, 0x8c, 0xe7, 0x9f, 0x13, 0xdc, 0x42, 0x4c, 0x6d, 0xf2, 0x4f, 0xcf, 0xb2, 0x1c, 0x69, 0x51, 0x40, 0x37, 0x4d, 0x68, 0x86, 0x81, 0x38, 0x4d, 0x11, 0xc6, 0x31, 0x12, 0xd1, 0xd1, 0x64, 0x45, 0x01, 0xcd, 0xd0, 0xc1, 0x74, 0x0d, 0x05, 0x63, 0xc8, 0x45, 0x1c, 0x05, 0x34, 0x0d, 0x4c, 0xd7, 0x01, 0x8d, 0x29, 0xf9, 0xc7, 0xf9, 0x5a, 0x0c, 0x5d, 0xd5, 0xc8, 0x82, 0x26, 0x69, 0xfa, 0x40, 0xd2, 0x84, 0x47, 0xff, 0x5f, 0x9d, 0xf0, 0xc9, 0x12, 0xb7, 0x5a, 0xc8, 0xe9, 0x7b, 0x93, 0x1f, 0x3b, 0x35, 0x3a, 0x84, 0x56, 0xa8, 0xc4, 0x19, 0xb5, 0xf8, 0xab, 0x6e, 0x6d, 0x72, 0x52, 0x03, 0x43, 0x9a, 0x26, 0xe2, 0xe7, 0x66, 0x2b, 0xfb, 0x5b, 0x0d, 0x72, 0x02, 0x9f, 0x4e, 0x67, 0x92, 0x5d, 0x6a, 0x1a, 0x96, 0xdc, 0x05, 0xf1, 0xc2, 0x91, 0xaf, 0xe9, 0xdb, 0x55, 0x99, 0x08, 0x41, 0x6b, 0x74, 0x50, 0x11, 0x7f, 0x80, 0x5e, 0x73, 0x54, 0x84, 0xdc, 0xdc, 0x45, 0x07, 0xd2, 0x22, 0x45, 0x56, 0x64, 0xd0, 0x0c, 0x0d, 0xba, 0x65, 0x82, 0xe9, 0x1a, 0x72, 0xc6, 0x90, 0xf1, 0xee, 0x01, 0xba, 0x69, 0x21, 0x07, 0x43, 0x9a, 0x33, 0xe4, 0xd0, 0x90, 0x43, 0x43, 0x91, 0x71, 0xf2, 0x0e, 0x97, 0xdd, 0x89, 0x84, 0x29, 0xcd, 0x04, 0x03, 0x83, 0xae, 0x99, 0xd0, 0x98, 0x05, 0xa6, 0x99, 0x30, 0x0c, 0x1b, 0x0c, 0x3a, 0xd2, 0x2c, 0x57, 0x0a, 0x78, 0x0e, 0x96, 0x17, 0x6b, 0x39, 0xf2, 0x9b, 0xf6, 0xd1, 0x9b, 0x38, 0x0e, 0xba, 0xae, 0x83, 0xe9, 0x3a, 0xc2, 0xe5, 0x04, 0xe7, 0xba, 0x4c, 0xca, 0xd5, 0xd6, 0x50, 0x0a, 0x43, 0x87, 0x65, 0xe8, 0x58, 0x8c, 0xee, 0x42, 0x3b, 0xb9, 0x8d, 0x3b, 0xaf, 0xbd, 0x84, 0x67, 0xbf, 0xfc, 0x37, 0x18, 0x07, 0x1e, 0x0a, 0x96, 0x22, 0x8a, 0xe6, 0xb8, 0x74, 0xbe, 0x2e, 0x65, 0x6b, 0x67, 0xc3, 0xec, 0x91, 0x94, 0xb5, 0x4d, 0x23, 0x03, 0xa6, 0xed, 0x00, 0x45, 0x2a, 0x32, 0xbe, 0x33, 0xa1, 0x0f, 0x4f, 0x90, 0x66, 0x09, 0xc0, 0x0a, 0xd8, 0x0e, 0x27, 0x36, 0x26, 0x59, 0x22, 0x62, 0x3b, 0x57, 0xbf, 0xf2, 0x22, 0x03, 0x63, 0x80, 0x09, 0x07, 0x8b, 0xd9, 0x0c, 0x83, 0xfb, 0x37, 0x10, 0x2c, 0x67, 0xb8, 0x73, 0x94, 0xc3, 0xb6, 0xeb, 0x62, 0x3a, 0x37, 0xa5, 0xee, 0x95, 0xdf, 0x6f, 0x44, 0x24, 0x5c, 0x31, 0xcd, 0xd3, 0x84, 0xa1, 0xc8, 0x19, 0x3e, 0xf9, 0xa3, 0x7d, 0x84, 0xb3, 0x08, 0xfd, 0x8b, 0x6d, 0x1c, 0x19, 0x3e, 0xc2, 0x5b, 0xf7, 0xe1, 0xe5, 0x39, 0x96, 0x7c, 0xf9, 0x8e, 0xbe, 0xeb, 0x61, 0x76, 0xf9, 0x22, 0xb4, 0x61, 0xf9, 0x35, 0x6a, 0xc3, 0x11, 0xfa, 0xae, 0x87, 0x93, 0x38, 0x46, 0x3a, 0x5d, 0x96, 0x64, 0x6c, 0x93, 0x79, 0x1d, 0xd7, 0xae, 0x1f, 0xc1, 0x71, 0x1a, 0xe2, 0xf3, 0xcc, 0x3f, 0xd3, 0x79, 0xc6, 0xb8, 0x57, 0x7a, 0xce, 0x00, 0x63, 0x81, 0x1c, 0x09, 0xb2, 0x22, 0x41, 0x91, 0xf3, 0xe2, 0xc9, 0x0a, 0x0d, 0xc8, 0x0d, 0xb0, 0xc2, 0x42, 0x82, 0x02, 0x5a, 0x61, 0x40, 0xd7, 0x4c, 0xe8, 0x70, 0xf0, 0x91, 0x0f, 0x5d, 0x41, 0xbf, 0xbf, 0x05, 0xcb, 0x34, 0x91, 0x67, 0x80, 0x69, 0x9b, 0x78, 0xe8, 0xa1, 0xf3, 0xb8, 0x7c, 0xe1, 0x1c, 0x1c, 0x2b, 0x43, 0x5c, 0x78, 0x70, 0xf5, 0x18, 0x93, 0xd9, 0x0a, 0x49, 0xc8, 0xd2, 0x10, 0x41, 0x62, 0x41, 0x37, 0x1c, 0x04, 0x61, 0x88, 0x7e, 0xb7, 0x8e, 0xe9, 0x74, 0x89, 0x20, 0x58, 0x22, 0x83, 0x83, 0x2b, 0x17, 0x3b, 0x38, 0xbc, 0x77, 0x13, 0xbe, 0xeb, 0x01, 0x79, 0x81, 0x34, 0x8a, 0x91, 0x27, 0x09, 0x74, 0x06, 0x9c, 0x0e, 0xa7, 0x30, 0x4d, 0x1b, 0xcd, 0x56, 0x03, 0xb5, 0x9a, 0x8b, 0xa2, 0x48, 0x10, 0x06, 0x13, 0xa4, 0xe9, 0x12, 0x8c, 0x45, 0xd0, 0x18, 0xdf, 0xfb, 0x1b, 0x26, 0x83, 0xeb, 0xd9, 0xa8, 0xd7, 0x6b, 0xf0, 0x6a, 0x36, 0x74, 0x83, 0x21, 0xcb, 0x13, 0x2c, 0x83, 0x39, 0xc0, 0x72, 0xb8, 0xae, 0x05, 0xd3, 0xd2, 0x61, 0x98, 0x1a, 0x9a, 0xad, 0x3a, 0x9a, 0x4d, 0x1f, 0xba, 0xc1, 0x6d, 0x13, 0xb7, 0xfa, 0x3d, 0xd8, 0x96, 0x89, 0xf9, 0x6c, 0x0a, 0x06, 0xa0, 0x51, 0xaf, 0xc3, 0xb1, 0x6d, 0xd8, 0x96, 0x85, 0x24, 0xcf, 0x00, 0x06, 0xae, 0x00, 0xd1, 0x38, 0xe7, 0x25, 0x49, 0x13, 0x68, 0xba, 0x86, 0x5a, 0xdd, 0x47, 0xb3, 0xe5, 0xa3, 0xd3, 0x69, 0xa3, 0xdd, 0x6e, 0xa1, 0xd9, 0x6c, 0xa0, 0xdd, 0x6e, 0xa1, 0xd1, 0xa8, 0x0b, 0xb8, 0x3c, 0x44, 0x96, 0xc7, 0x58, 0x2c, 0x27, 0x68, 0xb5, 0x9a, 0x30, 0x4d, 0x8d, 0xc3, 0xfa, 0x71, 0x04, 0xd7, 0xe1, 0xfa, 0xf1, 0x9a, 0xeb, 0x89, 0xcf, 0x08, 0x90, 0xe4, 0x19, 0xb2, 0x3c, 0x43, 0x06, 0xce, 0xc6, 0x5e, 0x86, 0x01, 0xd2, 0x22, 0x47, 0xa1, 0x31, 0x40, 0xd7, 0x90, 0xe4, 0x19, 0x82, 0x34, 0x46, 0x5a, 0xe4, 0x30, 0x5c, 0x07, 0x6e, 0xdd, 0x47, 0x1e, 0x24, 0xd8, 0xdb, 0xbb, 0x88, 0xed, 0xed, 0x1d, 0x38, 0x8e, 0x8b, 0x5a, 0xcd, 0x87, 0xef, 0xd7, 0xa1, 0x69, 0x06, 0xd2, 0x34, 0x43, 0xad, 0xe6, 0x95, 0xf2, 0x1d, 0x3c, 0xcf, 0x45, 0x92, 0x06, 0x98, 0xcd, 0xc6, 0x48, 0xb3, 0x18, 0xba, 0xce, 0x70, 0xe1, 0xc2, 0x2e, 0x3a, 0x9d, 0x16, 0x7a, 0xfd, 0x0e, 0x1e, 0xb9, 0x7a, 0x05, 0xed, 0x76, 0x13, 0xae, 0x67, 0x63, 0x6b, 0xab, 0x27, 0x1d, 0x3c, 0xd5, 0x10, 0x21, 0x5d, 0xd7, 0x51, 0xaf, 0xfb, 0xe8, 0xf5, 0xba, 0x48, 0x92, 0x98, 0xb3, 0xe1, 0xb3, 0x18, 0x35, 0xdf, 0x45, 0xab, 0x55, 0x87, 0xed, 0x98, 0xc2, 0xaa, 0x37, 0xc7, 0x6c, 0x36, 0x81, 0x61, 0x6a, 0xd8, 0xda, 0xee, 0x8a, 0xfb, 0x3e, 0x47, 0xb3, 0xd9, 0x44, 0x1c, 0x47, 0x58, 0x2e, 0x17, 0xb8, 0x77, 0xef, 0x0e, 0x92, 0x38, 0x86, 0x65, 0x9a, 0x70, 0x6d, 0x07, 0x0c, 0x40, 0x14, 0xc6, 0x40, 0x0e, 0x78, 0xae, 0x87, 0xd1, 0x64, 0x88, 0x20, 0x58, 0x20, 0x0a, 0x23, 0xcc, 0xe7, 0x33, 0x1c, 0x1c, 0xdc, 0xc7, 0xd1, 0xd1, 0x14, 0xd3, 0x69, 0x84, 0xc9, 0x24, 0x40, 0x9c, 0x02, 0x79, 0x1e, 0xe3, 0xde, 0xdd, 0x19, 0x5a, 0x2d, 0x1f, 0x75, 0xbf, 0x8d, 0x77, 0xdf, 0xb9, 0x8d, 0xf1, 0x68, 0x86, 0xc5, 0x3c, 0x82, 0xa6, 0xe5, 0xd2, 0x8e, 0xd6, 0x71, 0x6d, 0x6c, 0x6d, 0x6d, 0xa1, 0xdd, 0x6e, 0xa1, 0xdf, 0xef, 0x8b, 0xf0, 0x9a, 0x05, 0x8a, 0xa2, 0x40, 0x53, 0x20, 0x2a, 0x96, 0x69, 0xf2, 0x7d, 0x3f, 0xb8, 0xf4, 0x6d, 0xe7, 0xfc, 0x36, 0x5f, 0xd9, 0x58, 0x16, 0xb2, 0x3c, 0xc7, 0x7c, 0xb1, 0x40, 0x21, 0x6a, 0x67, 0x9e, 0xe7, 0x30, 0x0a, 0x48, 0xe3, 0x18, 0x1a, 0x74, 0xb9, 0x7a, 0xc8, 0x42, 0xbf, 0xdf, 0x97, 0x68, 0x07, 0x0d, 0x61, 0x9d, 0x0e, 0x27, 0xc6, 0x8d, 0xc7, 0x63, 0xdc, 0xba, 0x75, 0x0b, 0x8b, 0xc5, 0x0c, 0x3b, 0x3b, 0x3b, 0x78, 0xe8, 0xd2, 0x45, 0x98, 0x96, 0x81, 0x24, 0x4e, 0x61, 0xa0, 0x10, 0xec, 0x53, 0xe8, 0xd0, 0x98, 0x01, 0x43, 0xd7, 0xa0, 0xb1, 0x5c, 0xee, 0x66, 0x4c, 0x63, 0x95, 0x0c, 0x46, 0xcc, 0xed, 0x24, 0x49, 0x30, 0x9f, 0x2d, 0xe5, 0x84, 0x57, 0x0d, 0xd6, 0xa0, 0xc2, 0x15, 0x45, 0x71, 0x49, 0xfb, 0xa8, 0x4a, 0x28, 0x34, 0x4d, 0xc3, 0x42, 0x7c, 0x2f, 0x62, 0x8d, 0xaa, 0x16, 0xa9, 0x9b, 0xbc, 0xd9, 0xd7, 0x0e, 0xfc, 0x0a, 0xd4, 0x5e, 0x9d, 0xb6, 0xd7, 0xad, 0x4e, 0xcb, 0x7a, 0xfa, 0x58, 0x74, 0x43, 0xea, 0xcf, 0x53, 0x21, 0xf5, 0xea, 0x4e, 0xbe, 0x0a, 0xfb, 0xea, 0x1b, 0x12, 0xce, 0xaa, 0xfb, 0xf6, 0x6a, 0x56, 0xba, 0xfa, 0xfc, 0x83, 0x68, 0x21, 0x9e, 0x0b, 0x93, 0x13, 0x71, 0x9e, 0xa7, 0x88, 0xa2, 0x58, 0x16, 0xe5, 0x38, 0x8e, 0x15, 0xa7, 0xb5, 0xb2, 0x35, 0x2a, 0xc1, 0x48, 0xea, 0xaa, 0x42, 0xcd, 0x7a, 0xa7, 0x66, 0xa3, 0x6a, 0xd1, 0x29, 0x7f, 0xcf, 0xb0, 0xd1, 0x81, 0x4f, 0x9d, 0x38, 0x37, 0x85, 0x6e, 0xc8, 0x95, 0x41, 0x9a, 0x41, 0x83, 0x21, 0x58, 0xd8, 0x9a, 0xf2, 0x75, 0x0a, 0x59, 0x0c, 0xc5, 0x1a, 0x67, 0x41, 0x16, 0x69, 0x9d, 0x1f, 0x36, 0x85, 0x64, 0x9a, 0x6b, 0x10, 0x98, 0x32, 0xc0, 0x18, 0xf2, 0x2a, 0xa3, 0x5e, 0x1c, 0x8e, 0x79, 0x91, 0xf3, 0x94, 0x3f, 0x8d, 0x21, 0x4b, 0x63, 0x00, 0xce, 0xc6, 0x22, 0xec, 0x66, 0x73, 0x0c, 0x6f, 0xbd, 0x86, 0x60, 0x74, 0x8c, 0xf1, 0xc9, 0x04, 0xec, 0xf6, 0x00, 0x0c, 0xc0, 0x9f, 0xfe, 0xc5, 0xdf, 0xe0, 0xd2, 0x7b, 0x3e, 0x8a, 0x5a, 0xc3, 0x97, 0xf2, 0xb1, 0x2b, 0x57, 0xae, 0x00, 0x80, 0x34, 0x98, 0xd9, 0x04, 0xb7, 0x57, 0x51, 0x10, 0x43, 0x89, 0x7f, 0xad, 0x12, 0x1e, 0x55, 0xae, 0x46, 0x51, 0x14, 0x78, 0xe2, 0x7c, 0x86, 0xdd, 0xdd, 0x9d, 0xd5, 0x37, 0x98, 0x9f, 0x62, 0x7f, 0xb2, 0xc4, 0x97, 0x9e, 0x7f, 0x16, 0x5b, 0xe7, 0x3e, 0xc1, 0xa1, 0xea, 0x2c, 0x03, 0x8a, 0x1c, 0x4c, 0x23, 0x9f, 0x02, 0x55, 0xbf, 0x9e, 0xcb, 0x3d, 0x35, 0xd3, 0x56, 0xef, 0xd9, 0xa5, 0xee, 0xa2, 0xcc, 0x50, 0xff, 0x5e, 0xee, 0xcd, 0xfe, 0x67, 0x2f, 0x5f, 0xc3, 0xd3, 0xa7, 0x23, 0x69, 0x24, 0x83, 0xe1, 0x10, 0x4f, 0x6f, 0xb8, 0x46, 0xc7, 0xc1, 0x12, 0x5d, 0x5d, 0xc3, 0x37, 0x86, 0x43, 0x7c, 0x8f, 0xf2, 0xe7, 0x3f, 0xfa, 0xf1, 0x2e, 0x3e, 0xfb, 0xa7, 0xc5, 0x5a, 0x76, 0x82, 0x2a, 0x6f, 0x35, 0xb4, 0x42, 0x5a, 0x01, 0x4b, 0x8b, 0x66, 0x68, 0x22, 0x64, 0x04, 0x70, 0x4c, 0xc1, 0xba, 0xce, 0x18, 0x58, 0xf8, 0x0e, 0x16, 0x8b, 0x16, 0x80, 0x01, 0x2e, 0x5f, 0x79, 0x18, 0xdf, 0xf1, 0x5d, 0x8f, 0xe0, 0xd9, 0x3f, 0xfe, 0x7f, 0x31, 0x1a, 0x4d, 0x70, 0xef, 0xde, 0x09, 0x0e, 0x86, 0x09, 0x2e, 0x5d, 0xdc, 0x92, 0x41, 0x2c, 0x9b, 0x1e, 0xbe, 0xc3, 0xf0, 0xc2, 0xd7, 0xde, 0x94, 0xbf, 0x97, 0xf7, 0x67, 0xce, 0x10, 0x86, 0x09, 0x92, 0x24, 0x44, 0x9a, 0xc5, 0x72, 0x8d, 0x75, 0xfe, 0xfc, 0x79, 0xb9, 0x1b, 0xf6, 0x7d, 0x1f, 0xbb, 0xbb, 0xbb, 0x38, 0x7f, 0xfe, 0x9c, 0x94, 0x06, 0x51, 0x88, 0x0b, 0x71, 0x78, 0x48, 0x93, 0xad, 0x9e, 0x55, 0x64, 0x6d, 0xaa, 0xe6, 0x43, 0xb8, 0xae, 0x8b, 0x30, 0x0c, 0x71, 0xe5, 0xca, 0x15, 0x4c, 0xa7, 0x53, 0xc4, 0x71, 0x2c, 0x3d, 0xbc, 0x8f, 0x8e, 0x8e, 0x24, 0x93, 0xbc, 0x2d, 0x64, 0x47, 0x34, 0x04, 0xd1, 0x80, 0x40, 0xfc, 0x96, 0x46, 0xab, 0xae, 0xfc, 0xbd, 0x26, 0x07, 0x09, 0x3a, 0xcf, 0xc8, 0xdf, 0x9c, 0x9e, 0x23, 0x35, 0xf2, 0x60, 0xb9, 0x0c, 0x4f, 0xb2, 0x2c, 0x0b, 0x9a, 0xa9, 0x43, 0x47, 0x81, 0x28, 0x8a, 0x91, 0xe6, 0x34, 0xad, 0x39, 0x80, 0xa9, 0x97, 0xd0, 0xce, 0x56, 0xab, 0x85, 0x6e, 0xb7, 0xcb, 0xe5, 0x57, 0x69, 0x0a, 0xbf, 0xdd, 0x96, 0x12, 0x3a, 0xd7, 0x75, 0xb1, 0xb5, 0xb5, 0x25, 0x5d, 0xe7, 0xb8, 0xd3, 0x9b, 0x27, 0x51, 0xd4, 0x28, 0xe2, 0xc4, 0x42, 0xa6, 0x59, 0xf2, 0x3c, 0xf2, 0x7d, 0x1f, 0x9e, 0xe7, 0xc9, 0xa9, 0x97, 0x2c, 0x4a, 0xc9, 0x0e, 0x55, 0xd7, 0xec, 0x92, 0x72, 0x80, 0x86, 0x0a, 0x5a, 0x49, 0xc5, 0x11, 0x27, 0x82, 0xc5, 0x71, 0x8c, 0xd1, 0x68, 0x24, 0x51, 0x5c, 0x42, 0xbe, 0x6c, 0xdb, 0x44, 0x9e, 0x43, 0x98, 0xcb, 0x9c, 0xa0, 0x28, 0x38, 0xc7, 0x21, 0x13, 0x64, 0xea, 0x66, 0xb3, 0x2e, 0xc3, 0x72, 0x96, 0xcb, 0x25, 0x16, 0x73, 0x2e, 0x17, 0xe4, 0x92, 0x37, 0x1b, 0x86, 0x6d, 0xc9, 0xd7, 0x5e, 0xf3, 0xea, 0xe8, 0x76, 0xbb, 0xd2, 0xad, 0xd2, 0x34, 0x4d, 0x84, 0xc9, 0x4c, 0x10, 0x65, 0x0f, 0xa4, 0xf1, 0x99, 0x61, 0x6a, 0xf0, 0x6b, 0x5c, 0x87, 0x7f, 0xe3, 0xe6, 0x35, 0x9c, 0x3b, 0x77, 0x0e, 0xe7, 0xce, 0x9d, 0x83, 0xe3, 0x5a, 0x72, 0xe5, 0xb2, 0x10, 0xfa, 0x7f, 0xd7, 0xe3, 0xbe, 0xea, 0x89, 0xe0, 0x0c, 0xd8, 0x06, 0x47, 0xfc, 0x0a, 0x93, 0x9f, 0x87, 0x64, 0x3a, 0xa6, 0x72, 0xba, 0xe8, 0x7c, 0x5e, 0x2c, 0x97, 0xd0, 0x9c, 0x9a, 0xa8, 0x0f, 0x1a, 0xd2, 0x34, 0x47, 0xbd, 0x5e, 0x83, 0xe3, 0x78, 0x98, 0xcd, 0x66, 0xb8, 0x71, 0xe3, 0x9b, 0x98, 0xcd, 0xe6, 0x78, 0xec, 0xb1, 0xab, 0xf0, 0x3c, 0xce, 0xa5, 0xda, 0xdf, 0xdf, 0xc7, 0xbb, 0xef, 0xbe, 0x8b, 0x24, 0x49, 0xd0, 0x6e, 0xb7, 0xf1, 0xf0, 0xc3, 0x57, 0xb1, 0x58, 0x2c, 0xf0, 0xea, 0xab, 0xaf, 0xc2, 0x73, 0xb9, 0x34, 0x55, 0x86, 0xb3, 0xa8, 0x32, 0x31, 0x75, 0x22, 0x92, 0x44, 0x26, 0x41, 0x36, 0xa0, 0xfd, 0x2b, 0xdf, 0x7d, 0x44, 0x6b, 0x99, 0xe6, 0xea, 0xbe, 0x55, 0xf5, 0x72, 0x57, 0x0f, 0x74, 0xd5, 0x51, 0x4d, 0xcd, 0xbd, 0xa6, 0xbf, 0x53, 0xbd, 0x90, 0xab, 0x85, 0x40, 0x85, 0x5c, 0xa9, 0xa0, 0xd2, 0x07, 0x45, 0xdd, 0xf3, 0xd2, 0x05, 0x55, 0x65, 0x64, 0xd5, 0x2c, 0x77, 0x62, 0x5f, 0x13, 0x74, 0xa9, 0x4a, 0x58, 0xce, 0x82, 0xb3, 0xab, 0xf0, 0x58, 0xd5, 0xee, 0x52, 0x95, 0xcf, 0xd1, 0x35, 0x55, 0xd7, 0x01, 0x2a, 0xda, 0x91, 0xa3, 0x0a, 0xad, 0xf0, 0xbd, 0x2a, 0x6f, 0xb2, 0x32, 0x19, 0xcd, 0x67, 0xdb, 0x36, 0x8a, 0x9c, 0xb3, 0x60, 0x79, 0x32, 0x8f, 0xb6, 0x71, 0xbf, 0xac, 0xde, 0x38, 0x64, 0x90, 0x51, 0x2d, 0xd6, 0x25, 0x22, 0xa0, 0x56, 0x56, 0x36, 0x54, 0x49, 0x89, 0xea, 0xea, 0x40, 0x45, 0x27, 0x98, 0x72, 0xdd, 0xf9, 0x75, 0xd2, 0x84, 0x46, 0x59, 0x5f, 0x15, 0x1d, 0xa6, 0xcb, 0x82, 0xbe, 0xa6, 0x29, 0xa7, 0x7f, 0x5f, 0x59, 0x73, 0xa8, 0xf7, 0x0a, 0x1d, 0x9e, 0xd5, 0x42, 0x59, 0xdd, 0x41, 0x57, 0x77, 0xee, 0x6e, 0x36, 0x47, 0x34, 0x9e, 0x60, 0x31, 0xbe, 0x83, 0x1b, 0xd7, 0xdf, 0xe1, 0xe1, 0x2a, 0xd7, 0xae, 0xcb, 0xbf, 0xbf, 0xbd, 0xd5, 0x45, 0xb0, 0x9c, 0x0a, 0xc6, 0x71, 0x21, 0x8b, 0x78, 0xc3, 0xf7, 0x1e, 0xc8, 0x70, 0x6f, 0xf8, 0x1e, 0xa6, 0xf3, 0x65, 0x85, 0xdc, 0xc8, 0xd6, 0x1a, 0x9e, 0x32, 0xbf, 0xa0, 0x50, 0x98, 0xb9, 0x35, 0xec, 0xef, 0x73, 0x0f, 0xf8, 0xa5, 0x22, 0xcf, 0x79, 0xfa, 0xe9, 0xbf, 0x05, 0x20, 0x45, 0x6f, 0x6b, 0x07, 0x6f, 0xbe, 0xfe, 0x02, 0xa6, 0xd1, 0x63, 0xa8, 0xd5, 0x3b, 0x60, 0x5a, 0x01, 0x83, 0xd1, 0x0e, 0x3a, 0x47, 0x51, 0xac, 0xfc, 0x02, 0x34, 0x4d, 0x03, 0xd3, 0x80, 0xac, 0xd0, 0xf0, 0x8b, 0xff, 0xcd, 0x7f, 0x8b, 0x66, 0xe7, 0xa6, 0x24, 0xb3, 0x01, 0xc0, 0xb9, 0xab, 0xdc, 0xc3, 0xfe, 0x1b, 0x2f, 0x5f, 0xc3, 0x0f, 0x2f, 0x23, 0xfc, 0x9b, 0xbf, 0xfa, 0x22, 0xfa, 0x5d, 0x0f, 0x4f, 0x9f, 0x7f, 0x44, 0x4e, 0xec, 0xc7, 0xc1, 0xb2, 0xf4, 0xdf, 0x87, 0x06, 0xa7, 0x78, 0xe3, 0xcf, 0x6f, 0xca, 0x5d, 0x3a, 0xbf, 0x0f, 0x00, 0xfa, 0x18, 0x50, 0xc2, 0x9e, 0x3a, 0x6d, 0x2d, 0xc3, 0xc5, 0xca, 0x23, 0x80, 0x99, 0xd0, 0x75, 0x40, 0x97, 0xe1, 0x31, 0x0c, 0x2c, 0xd7, 0xa0, 0x17, 0x9c, 0x9b, 0xf1, 0xd1, 0x8f, 0x3d, 0x23, 0x59, 0xea, 0x8b, 0xc5, 0x12, 0x5f, 0xfb, 0xc6, 0xe7, 0x4a, 0xb1, 0xa9, 0xbe, 0xc3, 0xf0, 0xf9, 0xcf, 0xfe, 0x09, 0xfa, 0x5d, 0x0f, 0xbd, 0x73, 0xdf, 0xc1, 0x5f, 0x47, 0xcf, 0xc6, 0xc1, 0x49, 0x84, 0x38, 0x1c, 0xcb, 0x9d, 0x39, 0x15, 0xf2, 0x58, 0x04, 0xe2, 0x7e, 0xeb, 0x9d, 0x19, 0x92, 0x2c, 0x87, 0x55, 0xe8, 0x30, 0x4c, 0x07, 0x8e, 0x20, 0xa9, 0xd9, 0xb6, 0x85, 0x4c, 0xc8, 0xe6, 0xd2, 0x2c, 0x96, 0x21, 0x26, 0x51, 0x14, 0xca, 0xa1, 0x64, 0x3a, 0xc9, 0x50, 0xaf, 0x9b, 0x68, 0x77, 0x9a, 0x52, 0x4f, 0x5e, 0x14, 0xab, 0xc6, 0x9b, 0xd2, 0xc6, 0x54, 0xfb, 0x51, 0xcf, 0xf3, 0xa4, 0xda, 0xe3, 0xf8, 0xf8, 0x58, 0x92, 0xc1, 0xba, 0xdd, 0x2e, 0x3a, 0x9d, 0x8e, 0x8c, 0x44, 0xae, 0xd5, 0x6a, 0x88, 0xb3, 0x95, 0x33, 0x1a, 0x31, 0xed, 0xd5, 0x61, 0x81, 0xec, 0x4e, 0x55, 0x13, 0x2b, 0x3a, 0xff, 0x74, 0x5d, 0xc7, 0xd1, 0xe1, 0x31, 0xe7, 0x64, 0x84, 0x09, 0x22, 0xc1, 0xf8, 0x8e, 0xe3, 0x50, 0xc6, 0x83, 0x2e, 0xc6, 0x73, 0xd8, 0x9e, 0x0b, 0xcf, 0xe3, 0x03, 0x93, 0x6e, 0x1a, 0xb0, 0x74, 0x1b, 0xa6, 0x63, 0xc3, 0xb6, 0x2d, 0x2c, 0xc3, 0x60, 0xb5, 0x02, 0x2d, 0x72, 0xb8, 0xa6, 0x01, 0xd3, 0xb6, 0x01, 0x31, 0xf5, 0xf1, 0xc4, 0xc9, 0x5c, 0xae, 0x05, 0x06, 0x83, 0x01, 0xf6, 0xf7, 0xf7, 0xa5, 0x34, 0x2c, 0x8a, 0x42, 0x45, 0xc2, 0xc6, 0x13, 0xcd, 0xc0, 0x72, 0x69, 0xf9, 0x7d, 0x74, 0x74, 0x24, 0x7d, 0xe0, 0xd5, 0x20, 0x2c, 0xd2, 0xd1, 0xa3, 0x30, 0xe4, 0x19, 0xab, 0xae, 0xb6, 0x08, 0x0d, 0x8e, 0xe3, 0x05, 0x7a, 0xfd, 0x0e, 0x4c, 0xd3, 0x44, 0x1c, 0xc7, 0x3c, 0x04, 0x25, 0x49, 0x60, 0x5a, 0x7c, 0x65, 0x40, 0xee, 0x6d, 0x59, 0x96, 0x49, 0xc8, 0x9c, 0x87, 0xbf, 0x8c, 0xb1, 0x5c, 0x46, 0xd0, 0x2d, 0xc8, 0x00, 0x17, 0xd3, 0xb0, 0x11, 0xc5, 0x11, 0x92, 0x9c, 0x87, 0xb2, 0x74, 0xbb, 0x5d, 0xd1, 0x78, 0xc5, 0x38, 0x3d, 0x3d, 0xc5, 0x7c, 0x31, 0x95, 0x26, 0x36, 0xd3, 0x29, 0xb7, 0x7e, 0xf6, 0xea, 0x06, 0x1c, 0xc7, 0x95, 0x04, 0xb3, 0x2c, 0x4b, 0x30, 0x1c, 0x8e, 0x70, 0x7f, 0x7f, 0x84, 0x3c, 0x07, 0x76, 0xf7, 0x7c, 0xb9, 0x1e, 0xd8, 0xdd, 0x3b, 0x27, 0x1c, 0x3c, 0x5d, 0x29, 0x4d, 0x3c, 0xb8, 0x71, 0x0c, 0xd3, 0x04, 0x76, 0xb6, 0xb7, 0x10, 0x86, 0x21, 0x4e, 0x8e, 0x84, 0xed, 0x6b, 0x83, 0x4b, 0x13, 0x6f, 0xdc, 0xbc, 0x8d, 0x66, 0xb3, 0x0e, 0xd3, 0xb6, 0xc1, 0x74, 0x0d, 0x4e, 0xcd, 0x83, 0xe5, 0xf0, 0x9a, 0xe6, 0xb8, 0x2e, 0xac, 0x84, 0x4b, 0xf5, 0xf2, 0x8c, 0xbb, 0x07, 0x2e, 0x17, 0x7c, 0x0d, 0xb3, 0xb7, 0xb7, 0x87, 0x9d, 0x0f, 0x9c, 0x47, 0x92, 0x46, 0x38, 0x3a, 0x3a, 0xc2, 0x72, 0x19, 0xa2, 0xd9, 0x6c, 0xcb, 0x55, 0xc3, 0xc9, 0xc9, 0x09, 0xde, 0x7a, 0xeb, 0x26, 0x4e, 0x4e, 0x86, 0xe8, 0xf7, 0xfb, 0x30, 0x0c, 0x03, 0x5b, 0x5b, 0x5b, 0xb8, 0x7d, 0xfb, 0x36, 0xdf, 0xa1, 0xab, 0x44, 0xb4, 0x2a, 0x01, 0x49, 0x85, 0x8a, 0xa9, 0xf8, 0xd0, 0xe1, 0x4f, 0x85, 0xb0, 0x3a, 0x99, 0xd2, 0xcd, 0xa9, 0xc6, 0x8f, 0x52, 0x71, 0x53, 0xed, 0x57, 0x1d, 0xe1, 0xff, 0x4b, 0x37, 0x3b, 0xc9, 0xd9, 0xaa, 0x93, 0xc0, 0xa6, 0xa2, 0xc4, 0xe3, 0x9a, 0x8b, 0xd2, 0x34, 0xae, 0xfa, 0x16, 0xab, 0x9a, 0xca, 0xea, 0x84, 0xb8, 0xf2, 0x5c, 0xd7, 0x4b, 0x44, 0x39, 0xb5, 0x38, 0xab, 0x52, 0xaf, 0xea, 0xcf, 0xaf, 0xba, 0x73, 0x55, 0xa7, 0xdb, 0x6a, 0x91, 0x54, 0x4d, 0x6a, 0xd4, 0xef, 0x65, 0x9a, 0xae, 0x4c, 0xaf, 0x4a, 0x13, 0xd2, 0x81, 0xa3, 0x24, 0x91, 0x2b, 0x8a, 0x42, 0xc6, 0xfc, 0xc5, 0x71, 0x0a, 0xcb, 0x62, 0xc2, 0x63, 0xba, 0x2c, 0x11, 0x53, 0x9b, 0x19, 0x75, 0xad, 0x50, 0x35, 0xd9, 0x51, 0xff, 0x4d, 0x55, 0x97, 0x5f, 0x75, 0x0b, 0x54, 0xef, 0x0b, 0xd5, 0xce, 0x56, 0x5e, 0x3f, 0xcd, 0x28, 0xed, 0x95, 0x73, 0xa4, 0xc2, 0xa2, 0x56, 0x21, 0xb8, 0x31, 0xac, 0x21, 0x0b, 0xf2, 0x9a, 0x62, 0x9d, 0x60, 0xa5, 0x22, 0x11, 0xd5, 0x6b, 0x5b, 0xfd, 0xda, 0x3c, 0xcf, 0x25, 0xa9, 0x8d, 0x0a, 0xf9, 0xfe, 0xcd, 0x97, 0x30, 0x79, 0xe9, 0x7a, 0xa9, 0x88, 0xab, 0x8f, 0xbf, 0xba, 0xf3, 0x2a, 0x50, 0xd9, 0xd7, 0x57, 0x8b, 0xf5, 0xa6, 0x87, 0xe7, 0xfb, 0xf0, 0x7c, 0x1f, 0x87, 0x87, 0x03, 0x68, 0x4c, 0x7b, 0x20, 0xd9, 0x71, 0x45, 0xc0, 0x04, 0x74, 0x51, 0xd4, 0x29, 0x05, 0x8e, 0xfc, 0xe5, 0x3d, 0xcf, 0x47, 0xdb, 0x4c, 0x71, 0x7d, 0xff, 0x04, 0x9e, 0xf0, 0xf0, 0xb6, 0xbd, 0x73, 0x60, 0x21, 0x84, 0x8d, 0x2a, 0x27, 0x17, 0x56, 0x55, 0x28, 0x20, 0xdc, 0xa2, 0x60, 0x98, 0x1c, 0x3c, 0x8f, 0xfd, 0x97, 0x5b, 0x68, 0x0a, 0x5f, 0x76, 0x22, 0xb5, 0xb5, 0xb7, 0x33, 0x00, 0xbc, 0x78, 0x1f, 0xde, 0x1e, 0x00, 0x5f, 0x03, 0x8e, 0x4f, 0x97, 0xc8, 0xbe, 0xef, 0x61, 0xc9, 0x74, 0xef, 0x6f, 0x90, 0xb7, 0x4d, 0x5e, 0xba, 0x8e, 0xf3, 0x8f, 0x7d, 0xd7, 0x99, 0xfe, 0x0f, 0x6b, 0xcd, 0x93, 0xb3, 0x92, 0x07, 0xea, 0x60, 0xd0, 0x34, 0x1d, 0x52, 0x19, 0x5f, 0x14, 0x88, 0x83, 0x25, 0x34, 0x4d, 0xc3, 0xe1, 0xbd, 0xbf, 0xc4, 0xb7, 0x6a, 0x1f, 0xc0, 0x70, 0x18, 0x62, 0x6f, 0xaf, 0xc7, 0x39, 0x0f, 0xc3, 0xdb, 0x88, 0xc3, 0x95, 0x09, 0xce, 0xf9, 0x8b, 0x57, 0x81, 0xaf, 0x7f, 0x09, 0xc7, 0xa7, 0x4b, 0x7c, 0xf0, 0x83, 0x7d, 0xdc, 0xbe, 0x7f, 0x8c, 0x83, 0x93, 0x75, 0x93, 0x9c, 0x18, 0x4d, 0x74, 0xfd, 0x00, 0xb3, 0xf9, 0x44, 0xfe, 0xbf, 0x61, 0x1a, 0xd0, 0x0d, 0x6e, 0x72, 0x53, 0x00, 0xc8, 0x72, 0x20, 0xcd, 0x00, 0xd3, 0xe2, 0x4c, 0x61, 0xa6, 0x15, 0x52, 0x2b, 0xcd, 0x63, 0x32, 0x79, 0x66, 0xc1, 0xce, 0x76, 0x97, 0x7f, 0x4e, 0x58, 0xae, 0xec, 0xcf, 0x75, 0x39, 0x81, 0x2e, 0x16, 0xb3, 0x92, 0x23, 0xa3, 0xae, 0xf3, 0xc9, 0xdf, 0x30, 0x34, 0x30, 0x66, 0x61, 0x3c, 0x9e, 0x96, 0x54, 0x3b, 0x9c, 0xf9, 0xdd, 0x91, 0x56, 0xcb, 0xb6, 0x38, 0xbc, 0xd5, 0x86, 0xbf, 0x94, 0x59, 0x90, 0x69, 0x88, 0x90, 0x20, 0xcf, 0x32, 0xc4, 0x59, 0x2a, 0x76, 0xd5, 0x33, 0xa4, 0x29, 0x60, 0xdb, 0xab, 0xdd, 0x2f, 0xb0, 0x2a, 0xf4, 0x04, 0xc1, 0x5a, 0x96, 0x85, 0xee, 0x56, 0x5f, 0xbc, 0x3f, 0x39, 0xa0, 0x31, 0xd8, 0x96, 0x8d, 0x5c, 0xe8, 0xcf, 0x27, 0x93, 0x31, 0xd2, 0x9c, 0xa7, 0x74, 0x99, 0xb6, 0x85, 0x34, 0x08, 0x30, 0x9d, 0xcf, 0x11, 0x25, 0x09, 0x0a, 0x06, 0x44, 0x49, 0x0c, 0x47, 0x68, 0xc8, 0x55, 0xa6, 0x38, 0x11, 0xe4, 0x16, 0x8b, 0x05, 0x4c, 0xd3, 0x90, 0xfb, 0x6d, 0x5d, 0xe7, 0x88, 0x6d, 0x81, 0x4c, 0xea, 0xec, 0x57, 0xf1, 0xc3, 0x1e, 0x7c, 0xdf, 0x47, 0xbf, 0xdf, 0x97, 0xe7, 0x4f, 0x96, 0x65, 0x98, 0xcf, 0x96, 0xf2, 0xdc, 0x08, 0xc3, 0x50, 0x4e, 0xb6, 0x2b, 0x3d, 0xbb, 0x87, 0xe9, 0x94, 0x4b, 0xbf, 0xb8, 0xe7, 0xfa, 0x36, 0x1a, 0x0d, 0xae, 0x4c, 0x18, 0x0e, 0x87, 0x58, 0x2c, 0x67, 0x92, 0xa7, 0x54, 0xab, 0xb9, 0xc2, 0xc1, 0xae, 0x0e, 0xd7, 0xe5, 0xd2, 0xb8, 0x9c, 0xe5, 0x8a, 0x2d, 0x78, 0x8a, 0xc5, 0x72, 0x89, 0xc5, 0x1c, 0x60, 0x6c, 0x8e, 0x66, 0xb3, 0x01, 0xc3, 0xa8, 0xa3, 0xd3, 0xf1, 0xe4, 0x94, 0xdc, 0x68, 0x34, 0x30, 0x9b, 0x2e, 0xb8, 0x8b, 0x9b, 0xe3, 0x20, 0xc9, 0x83, 0x8a, 0x73, 0x66, 0x8e, 0x7a, 0xdd, 0x47, 0xad, 0x96, 0xc3, 0xd0, 0x2d, 0xdc, 0xbf, 0x3f, 0x46, 0xbd, 0x0e, 0xe1, 0xfc, 0x67, 0xe0, 0xe4, 0xe4, 0x04, 0xc3, 0xe1, 0xa9, 0x4c, 0xa3, 0xdb, 0xde, 0x69, 0xe1, 0xf4, 0xf4, 0x54, 0xd6, 0x2f, 0xbb, 0xcb, 0xef, 0x27, 0x0d, 0xdc, 0x23, 0xdf, 0xf7, 0xb9, 0x89, 0x4d, 0x10, 0x45, 0x58, 0x2e, 0xe6, 0x88, 0xd2, 0x04, 0x6c, 0xce, 0x91, 0x0a, 0xdd, 0x30, 0x10, 0x8f, 0x16, 0x58, 0x2c, 0x22, 0x78, 0x1e, 0x27, 0x10, 0x37, 0x9b, 0x4d, 0xe1, 0x51, 0x3f, 0xc2, 0xcd, 0x9b, 0x37, 0x61, 0x59, 0x16, 0x2e, 0x5e, 0xbc, 0x28, 0xed, 0x67, 0x51, 0x68, 0xb8, 0x77, 0xf7, 0x3e, 0x8e, 0x8f, 0x8f, 0x71, 0xe5, 0xf2, 0x45, 0x2c, 0x83, 0x39, 0x0c, 0xdd, 0xc2, 0x74, 0x31, 0xc5, 0xad, 0x5b, 0xb7, 0x70, 0xef, 0xde, 0x11, 0x0c, 0xd7, 0xad, 0xad, 0x19, 0xab, 0xac, 0x0e, 0x2a, 0xc0, 0x71, 0x3c, 0xd8, 0xb6, 0x2b, 0x0f, 0x5a, 0x2a, 0x9a, 0x41, 0x10, 0xc9, 0x10, 0xf7, 0x6a, 0xb4, 0xe8, 0xca, 0x1e, 0x36, 0x2f, 0x59, 0xc8, 0xd2, 0x9f, 0x53, 0xb1, 0x22, 0x78, 0x49, 0xdd, 0x75, 0xab, 0x53, 0x33, 0x45, 0xe9, 0x6d, 0x22, 0x49, 0x31, 0xe1, 0x81, 0x5a, 0x25, 0xe2, 0xa9, 0x50, 0x27, 0x19, 0x2f, 0x54, 0xed, 0x64, 0xe5, 0xd7, 0x91, 0x5b, 0x5b, 0xe5, 0xd0, 0xac, 0x42, 0xed, 0xea, 0xb5, 0x51, 0x1b, 0x9e, 0x54, 0x69, 0x1e, 0x88, 0xec, 0xa2, 0x3e, 0xa8, 0x2b, 0xdd, 0x04, 0x39, 0x73, 0x67, 0xb6, 0x42, 0x64, 0x5b, 0x73, 0xed, 0x79, 0x21, 0x60, 0x55, 0x8e, 0x2a, 0x30, 0xd4, 0xbc, 0xba, 0x6c, 0x84, 0x92, 0x24, 0x03, 0x44, 0xc1, 0x24, 0xf2, 0x84, 0x25, 0xe2, 0x69, 0xab, 0xd3, 0x21, 0xbd, 0x3e, 0xba, 0xde, 0x9b, 0x08, 0x85, 0x9b, 0x75, 0xc5, 0x6c, 0xe3, 0xf3, 0xac, 0xbe, 0xee, 0xf2, 0x54, 0xaa, 0x95, 0x8c, 0x4e, 0xb8, 0x3e, 0x9a, 0x71, 0xa4, 0x61, 0x83, 0x7b, 0x5d, 0x89, 0x40, 0xc9, 0x20, 0xe1, 0xf3, 0xd2, 0xcf, 0xa6, 0x66, 0x09, 0x05, 0x9f, 0xe6, 0x19, 0x50, 0x08, 0xf3, 0x1a, 0x95, 0xb0, 0x55, 0x64, 0xab, 0x6b, 0xfb, 0xad, 0xe7, 0xfe, 0x60, 0x6d, 0x1a, 0xdf, 0xf4, 0xe8, 0xf7, 0x76, 0x70, 0xe3, 0xfe, 0xa9, 0x64, 0xf0, 0x83, 0xb1, 0x6f, 0x5b, 0x87, 0xbe, 0x2a, 0xd6, 0x4c, 0x16, 0xec, 0xb3, 0x9a, 0x22, 0xde, 0x30, 0x32, 0x18, 0x0c, 0x48, 0x15, 0x2b, 0xd6, 0x76, 0xbb, 0xc9, 0x0d, 0x25, 0xe6, 0xa7, 0x80, 0xdf, 0x85, 0xe7, 0xf3, 0x29, 0xe8, 0x64, 0x70, 0x28, 0xee, 0xd9, 0xba, 0x98, 0xc4, 0xf9, 0xfa, 0x65, 0xf5, 0x9e, 0xb1, 0x0a, 0xbb, 0xbd, 0xc0, 0x7f, 0x77, 0xf5, 0x71, 0x3c, 0xff, 0xdc, 0x57, 0x4b, 0x89, 0x69, 0x34, 0x5d, 0xb7, 0x76, 0x81, 0xf6, 0xf6, 0x65, 0xfc, 0xca, 0x17, 0xbe, 0xb8, 0x06, 0xb1, 0xab, 0xc5, 0x9c, 0x7e, 0xff, 0x98, 0xef, 0xe3, 0x10, 0x65, 0x52, 0x1c, 0x4d, 0xe8, 0x3d, 0x9b, 0x67, 0xbf, 0x0f, 0x93, 0xbd, 0xd2, 0x3d, 0x63, 0x2a, 0x3e, 0x11, 0x69, 0xce, 0x63, 0x49, 0x59, 0x01, 0x49, 0xe2, 0x63, 0x69, 0x0e, 0xc3, 0x36, 0xf0, 0xf0, 0xd5, 0xef, 0xc1, 0xcb, 0xaf, 0xbf, 0xcd, 0x9b, 0x16, 0xbf, 0x0d, 0x60, 0x82, 0xd9, 0x3c, 0x2e, 0x31, 0xd6, 0xdf, 0xfc, 0xe6, 0xe7, 0xce, 0x56, 0x6b, 0x88, 0xe9, 0x9c, 0x1e, 0xdc, 0xff, 0x3d, 0x96, 0xa1, 0x2e, 0x96, 0x67, 0xc2, 0xab, 0x3b, 0x28, 0x8a, 0x87, 0x51, 0xf7, 0x2d, 0xcc, 0x17, 0xdf, 0xe2, 0xbc, 0x10, 0xc1, 0x23, 0x29, 0x90, 0x09, 0x88, 0xb6, 0x89, 0x7a, 0xdd, 0x97, 0x3c, 0x92, 0x30, 0xe0, 0xe8, 0xa4, 0xa9, 0x38, 0x2e, 0xa6, 0x29, 0x87, 0xd8, 0xb9, 0x5b, 0x97, 0x26, 0xa7, 0x72, 0x95, 0xcc, 0xa6, 0x0e, 0x34, 0xb4, 0xe7, 0x5c, 0x2c, 0x38, 0x63, 0x99, 0x88, 0xa8, 0xa7, 0xa7, 0xa7, 0xb8, 0xfa, 0xd8, 0xa3, 0x12, 0xd9, 0xa2, 0x81, 0x23, 0x8a, 0xa2, 0x55, 0xb3, 0x5c, 0x88, 0x74, 0x06, 0x4d, 0x17, 0xd7, 0x31, 0x43, 0x14, 0xf1, 0x6b, 0x6e, 0x9a, 0x05, 0x3c, 0xcf, 0x85, 0xeb, 0x7a, 0x12, 0xaa, 0x5e, 0xb1, 0xd5, 0x0b, 0x78, 0x9e, 0xa7, 0x84, 0x50, 0x65, 0x40, 0xca, 0x53, 0x25, 0x19, 0x63, 0x48, 0xb2, 0x14, 0x61, 0x1c, 0xa1, 0x60, 0x80, 0xab, 0x71, 0x42, 0x55, 0x92, 0x65, 0xc8, 0xa2, 0x08, 0xa9, 0xe2, 0x5d, 0x41, 0x85, 0xdc, 0x71, 0x1c, 0xc9, 0x40, 0xb7, 0x6d, 0x1b, 0xbe, 0xef, 0x23, 0x8a, 0x22, 0xd4, 0xeb, 0x9c, 0x74, 0x35, 0x99, 0x4c, 0x10, 0x86, 0xbc, 0xf8, 0xe9, 0xe2, 0x67, 0x70, 0xb3, 0x9a, 0x04, 0x59, 0x96, 0xc0, 0x34, 0x1d, 0x38, 0x8e, 0x85, 0x20, 0xe0, 0xa1, 0x21, 0x41, 0x10, 0xac, 0xe5, 0xab, 0x13, 0x3f, 0x4b, 0x95, 0xdf, 0x99, 0xa6, 0x0e, 0xdf, 0xe7, 0xd2, 0xb9, 0xc9, 0x64, 0x82, 0x77, 0xdf, 0xbd, 0x2e, 0xd9, 0xe2, 0xbc, 0x49, 0xe0, 0xc6, 0x3d, 0x1c, 0xd9, 0xa0, 0x20, 0x2c, 0xce, 0x08, 0xef, 0x74, 0x5a, 0xc8, 0xf5, 0x42, 0x32, 0xf0, 0xb3, 0xac, 0x80, 0x5b, 0x73, 0x90, 0xa5, 0x9c, 0x6f, 0xd4, 0xe9, 0x74, 0x30, 0x1e, 0x4e, 0xe1, 0x38, 0x8e, 0x80, 0xe6, 0x4d, 0x11, 0x88, 0x62, 0xc9, 0xf7, 0x54, 0xb7, 0x32, 0x2c, 0x16, 0x22, 0x6f, 0xdd, 0xe4, 0x24, 0x67, 0xc6, 0x88, 0x4f, 0x66, 0xe2, 0xfd, 0xef, 0x7f, 0x48, 0xe8, 0xc0, 0x4f, 0x31, 0x18, 0x0c, 0xe0, 0xfb, 0x3e, 0x1a, 0x0d, 0xde, 0xc4, 0x86, 0x61, 0x88, 0x3b, 0x77, 0xf6, 0xb9, 0x45, 0x36, 0xb1, 0xfe, 0x35, 0x8e, 0xa6, 0xba, 0x36, 0x7f, 0xed, 0x39, 0xe3, 0xec, 0x7c, 0xa6, 0xeb, 0xd0, 0x0c, 0x1d, 0x5e, 0xdd, 0x87, 0x61, 0x71, 0x35, 0x85, 0x69, 0x59, 0x60, 0xb5, 0x2e, 0x3c, 0x8f, 0x67, 0xca, 0xdf, 0xbb, 0x77, 0x0f, 0x87, 0x87, 0x27, 0xc8, 0x32, 0xe0, 0x89, 0x27, 0xae, 0xa2, 0xdb, 0xed, 0x63, 0x3e, 0x9f, 0xe2, 0xb5, 0xd7, 0x5e, 0x93, 0x0d, 0xc4, 0xe9, 0xe9, 0x29, 0x2c, 0xcb, 0xc2, 0x85, 0x0b, 0x17, 0x78, 0xc2, 0xdd, 0x70, 0x02, 0xdb, 0x72, 0xb1, 0xbd, 0xbd, 0x0d, 0xdb, 0x76, 0x71, 0xf9, 0xf2, 0xc3, 0x30, 0xa4, 0x9c, 0x41, 0x29, 0x88, 0x34, 0x99, 0x55, 0x35, 0xe8, 0x2a, 0xf9, 0x4c, 0xdd, 0x3b, 0xab, 0x12, 0x32, 0x75, 0x87, 0xad, 0x69, 0xf9, 0x9a, 0xae, 0x5d, 0x4d, 0x23, 0x8a, 0x44, 0x41, 0xaf, 0x1a, 0xd7, 0xa8, 0xfe, 0xc6, 0x9b, 0xd8, 0xdb, 0xf2, 0x67, 0x29, 0x19, 0xec, 0xb4, 0x16, 0x50, 0x7d, 0xb5, 0xe9, 0x83, 0xa4, 0x3e, 0x3f, 0xd5, 0x48, 0xc5, 0x50, 0x34, 0xc3, 0x2a, 0xf1, 0x6d, 0x93, 0xfe, 0x7d, 0x93, 0xcd, 0xad, 0xba, 0xa3, 0x56, 0xf3, 0xd6, 0xe9, 0xeb, 0x49, 0x7f, 0xbf, 0x89, 0xe1, 0xcc, 0x25, 0x24, 0x1a, 0x74, 0x83, 0xc9, 0x88, 0xd1, 0x3c, 0x4f, 0xa5, 0x74, 0x2c, 0xcb, 0x0a, 0x68, 0x1a, 0x49, 0xa3, 0x0c, 0x81, 0x5e, 0x30, 0xd9, 0x31, 0x47, 0x61, 0x8c, 0x34, 0xc9, 0xe4, 0xa1, 0x42, 0xaf, 0x59, 0x5d, 0x19, 0xa8, 0x0e, 0x7f, 0x9b, 0x90, 0x94, 0x84, 0x25, 0x1b, 0x43, 0x71, 0x54, 0xe6, 0x79, 0xd5, 0x1c, 0xa7, 0xcc, 0x38, 0x57, 0x21, 0x6f, 0x51, 0x70, 0x72, 0x86, 0x82, 0xe5, 0xd2, 0x41, 0xae, 0x54, 0xd4, 0x51, 0xac, 0x15, 0x79, 0xb5, 0x41, 0xa8, 0x42, 0xee, 0x55, 0x25, 0xc5, 0xba, 0xe7, 0x7e, 0x21, 0x8b, 0xed, 0xe4, 0xd5, 0xd7, 0xd1, 0x7a, 0xec, 0x2a, 0xba, 0x42, 0xea, 0x75, 0x9a, 0x6d, 0x5e, 0x99, 0xfc, 0xdd, 0xbd, 0xc7, 0x70, 0x7b, 0x38, 0xc6, 0xff, 0xcf, 0xd9, 0x9b, 0x06, 0x4b, 0x96, 0x9e, 0x75, 0x7e, 0xbf, 0xf7, 0xec, 0x4b, 0xae, 0x37, 0xf3, 0xde, 0xba, 0xb5, 0xf7, 0x56, 0xea, 0xa2, 0x25, 0xb5, 0x84, 0x58, 0xc4, 0x00, 0x03, 0x02, 0x01, 0x1a, 0x98, 0x05, 0x62, 0xc2, 0x80, 0x89, 0x21, 0xf0, 0x88, 0x08, 0x22, 0x66, 0xc2, 0x18, 0xef, 0x81, 0x97, 0xb1, 0x03, 0x08, 0x62, 0xbe, 0x78, 0xec, 0x19, 0x22, 0x3c, 0x84, 0x3c, 0x0e, 0xb3, 0x0d, 0x0c, 0x20, 0x8c, 0x2c, 0xdb, 0xec, 0x92, 0x00, 0x6b, 0x14, 0x08, 0x21, 0x24, 0xa4, 0x46, 0x52, 0x2f, 0xd5, 0x5d, 0xd5, 0xb5, 0xd7, 0x5d, 0xf2, 0xe6, 0x76, 0xce, 0xc9, 0xb3, 0x1f, 0x7f, 0x78, 0xcf, 0x7b, 0xee, 0xc9, 0xbc, 0x59, 0xdd, 0x3d, 0x93, 0x11, 0x15, 0x7d, 0xbb, 0xea, 0xde, 0xbc, 0xb9, 0x9c, 0x7c, 0x9f, 0xe7, 0xf9, 0x3f, 0xff, 0xc5, 0xf5, 0xfa, 0x8d, 0x95, 0xaa, 0xba, 0x3d, 0x43, 0xc1, 0x61, 0xa7, 0xdb, 0x4c, 0xcc, 0x17, 0xfb, 0xf5, 0x6e, 0xbe, 0x33, 0x6a, 0xbe, 0xe7, 0xc6, 0xcb, 0x2f, 0xf3, 0x28, 0xd0, 0x1b, 0x35, 0xc0, 0xe6, 0xfa, 0xa5, 0xfd, 0xbc, 0xa4, 0x0f, 0x88, 0x20, 0x8e, 0xe6, 0x44, 0x41, 0x82, 0xd7, 0xe9, 0x30, 0x9d, 0xce, 0x4f, 0x33, 0xdd, 0xe7, 0xf7, 0xd7, 0x10, 0x80, 0x38, 0x35, 0x58, 0x55, 0xc8, 0x1d, 0xb9, 0x86, 0x24, 0xd8, 0x35, 0x8d, 0x91, 0xcc, 0xfa, 0x96, 0xbf, 0x4f, 0xe3, 0xce, 0x5f, 0xff, 0x2a, 0xfb, 0x97, 0xde, 0x89, 0xbe, 0x8a, 0xce, 0x14, 0x75, 0x75, 0x1b, 0x5c, 0xec, 0xf3, 0xa9, 0x7f, 0xfb, 0xe7, 0xfc, 0xea, 0x4f, 0xff, 0x24, 0x2f, 0xfc, 0xd5, 0x4b, 0x0d, 0xd3, 0x5d, 0xc9, 0xd7, 0x54, 0x31, 0x6f, 0xcb, 0xd9, 0x94, 0x6c, 0x6d, 0x76, 0x7f, 0xde, 0xbc, 0x5f, 0xff, 0xe3, 0x3f, 0xf9, 0xdb, 0x00, 0xfc, 0x17, 0x3f, 0xfd, 0xd7, 0x6b, 0xd7, 0x40, 0x18, 0x26, 0x8d, 0xc9, 0x8d, 0x46, 0x29, 0x1b, 0x9d, 0xba, 0x19, 0x81, 0x0a, 0x5d, 0xac, 0xd0, 0x2a, 0x9d, 0x07, 0x77, 0x4e, 0x9f, 0xa7, 0x64, 0xb1, 0xef, 0xad, 0xe5, 0x9e, 0x9f, 0xdf, 0x31, 0xf9, 0x8d, 0x8f, 0xdf, 0xe2, 0xef, 0x7f, 0xdf, 0xdf, 0xe7, 0xe1, 0x71, 0xc2, 0xed, 0x07, 0x47, 0xeb, 0x05, 0x9d, 0xf9, 0x1a, 0xcc, 0xae, 0x92, 0xd9, 0x54, 0x53, 0x30, 0x9b, 0x1d, 0x53, 0x94, 0x36, 0x5f, 0xf7, 0x9e, 0x6f, 0xe5, 0xed, 0xef, 0x78, 0x07, 0xbf, 0xfc, 0xaf, 0xff, 0xad, 0xf4, 0x62, 0xb7, 0x25, 0xb2, 0x25, 0xc3, 0x8f, 0xd4, 0xe7, 0xc4, 0x6e, 0xce, 0x86, 0x5e, 0x77, 0x28, 0xd3, 0xb3, 0x4e, 0x8e, 0x98, 0xcf, 0xe7, 0xb5, 0x54, 0x4a, 0xc2, 0xef, 0x83, 0xc1, 0x80, 0x55, 0xbc, 0x44, 0xd7, 0xf5, 0x46, 0x8e, 0xb4, 0x5a, 0xad, 0x28, 0xab, 0x9c, 0x34, 0x93, 0x4d, 0x58, 0x96, 0xca, 0xc9, 0xbf, 0xbd, 0x1b, 0x56, 0x72, 0x27, 0x5d, 0xd7, 0x99, 0x4c, 0x26, 0x6b, 0x52, 0xde, 0xd5, 0x6a, 0xd5, 0xb0, 0x9a, 0x4d, 0xd3, 0x64, 0x15, 0x67, 0x2d, 0x59, 0xb0, 0x81, 0xe3, 0x78, 0x0c, 0x87, 0xda, 0x5a, 0xc0, 0x8b, 0xa6, 0x19, 0x78, 0x9e, 0x74, 0x01, 0x93, 0x71, 0xcd, 0x82, 0x34, 0x95, 0xb0, 0x77, 0x18, 0xcc, 0x65, 0xf3, 0x6f, 0x6a, 0x64, 0x45, 0x81, 0x48, 0x57, 0xb2, 0xf9, 0x55, 0x2b, 0x32, 0x53, 0x36, 0x21, 0x49, 0xcd, 0x0f, 0xb0, 0xdd, 0xd3, 0x6c, 0xf1, 0xb4, 0xc8, 0xa9, 0x72, 0xd9, 0x18, 0xf4, 0xfb, 0xfd, 0x26, 0x13, 0xdc, 0x30, 0x0c, 0xce, 0x9f, 0x3f, 0x5f, 0xa7, 0x7d, 0x25, 0x6b, 0x84, 0xda, 0xaa, 0x19, 0x40, 0x4e, 0xc3, 0xaf, 0x14, 0xff, 0x20, 0x08, 0x82, 0x46, 0xdd, 0xa1, 0x1a, 0x9e, 0xc9, 0xc9, 0x51, 0xe3, 0x93, 0xef, 0xb8, 0x16, 0x96, 0x3d, 0x6c, 0x48, 0xba, 0x4a, 0x26, 0xa7, 0x22, 0xa8, 0x2d, 0xcb, 0x62, 0x7f, 0x7f, 0x7f, 0xad, 0xb6, 0x04, 0x41, 0x80, 0xeb, 0xda, 0x8c, 0x46, 0xbb, 0x0d, 0x24, 0x3f, 0x9d, 0x4d, 0x9a, 0xd0, 0x12, 0xdf, 0xef, 0x10, 0x45, 0x61, 0x3d, 0xe5, 0xa7, 0xcd, 0x99, 0x34, 0x9b, 0x9f, 0x70, 0xf3, 0xd6, 0x2d, 0x4c, 0xcd, 0x64, 0x3a, 0x3d, 0xa1, 0xaa, 0x94, 0xc9, 0x96, 0xdb, 0xac, 0x30, 0x7d, 0xdf, 0x6f, 0x42, 0x76, 0x5c, 0xd7, 0x5f, 0x4b, 0x0b, 0x0d, 0x82, 0x90, 0x2c, 0x83, 0x6e, 0x57, 0xf0, 0xf4, 0xd3, 0x4f, 0x73, 0xe9, 0xd2, 0x25, 0x2c, 0x5b, 0x32, 0xd7, 0x57, 0xab, 0xa8, 0xe1, 0x15, 0xec, 0xef, 0xef, 0xb3, 0xbf, 0xbf, 0x4f, 0xaf, 0xdb, 0x65, 0xb1, 0x58, 0x70, 0xf4, 0xe8, 0x80, 0xd9, 0x6c, 0x46, 0xe6, 0x7a, 0x0c, 0x87, 0x43, 0x7a, 0xc3, 0xcb, 0x52, 0x25, 0x90, 0x24, 0x04, 0x51, 0x48, 0x29, 0xa0, 0x44, 0x36, 0x61, 0xab, 0xc5, 0x82, 0x8b, 0x83, 0xf3, 0x1c, 0x1d, 0x1d, 0x71, 0xfb, 0xf6, 0x5d, 0xba, 0x5d, 0x9f, 0x67, 0x9e, 0x79, 0x9a, 0x57, 0x5e, 0x79, 0x8d, 0x2f, 0x7e, 0xf1, 0x06, 0xcb, 0x25, 0x5c, 0xbc, 0x68, 0xb0, 0xb3, 0xb3, 0x43, 0x18, 0x46, 0xc4, 0x71, 0xca, 0xa5, 0x4b, 0x97, 0x48, 0xd3, 0x94, 0x93, 0x93, 0x13, 0x06, 0x83, 0x41, 0x9d, 0x26, 0xd7, 0xc1, 0xb6, 0x5d, 0xe6, 0xf3, 0x39, 0x65, 0x59, 0x61, 0x28, 0x66, 0x94, 0xb2, 0xa0, 0xdc, 0x84, 0xe0, 0x37, 0x6d, 0x4e, 0xdb, 0x14, 0xff, 0x34, 0x4d, 0xd6, 0x8a, 0xc1, 0x26, 0xc4, 0x6d, 0x9a, 0xd6, 0x1a, 0x74, 0xdd, 0xfe, 0x1e, 0x4d, 0xd3, 0xb0, 0xea, 0x9d, 0x51, 0x5b, 0x63, 0xae, 0x82, 0x5a, 0x14, 0x74, 0xff, 0x46, 0xb7, 0x36, 0x94, 0xad, 0xc2, 0x47, 0x36, 0x8b, 0x6e, 0x5b, 0xc3, 0xde, 0xde, 0x5f, 0x3d, 0x4e, 0xeb, 0xdc, 0x9e, 0x26, 0xdb, 0x7b, 0xe5, 0xcd, 0x7f, 0xaf, 0xaa, 0x0a, 0xdb, 0xb2, 0x9a, 0xd7, 0x6c, 0xb3, 0x18, 0xb5, 0x13, 0xea, 0xb6, 0x79, 0xd4, 0x37, 0xc5, 0xac, 0x6a, 0xe7, 0x99, 0x4b, 0x7f, 0xf3, 0xd3, 0x3d, 0xa5, 0x56, 0xef, 0x30, 0x4b, 0x99, 0x56, 0x25, 0xea, 0x22, 0x8d, 0xb6, 0xc6, 0x0b, 0x68, 0x93, 0x6e, 0x54, 0x11, 0x54, 0x90, 0x98, 0x6a, 0xa2, 0xb6, 0x79, 0xd7, 0x6b, 0x42, 0xdb, 0xba, 0x3a, 0x50, 0x7f, 0x14, 0x3c, 0xd6, 0x96, 0xe6, 0xa9, 0x6b, 0xe2, 0xf4, 0x75, 0x10, 0x6b, 0x0e, 0x71, 0x0d, 0xca, 0xa1, 0x95, 0x35, 0x34, 0xc9, 0x63, 0xed, 0x69, 0xdb, 0xaf, 0xa5, 0x9a, 0xcc, 0xdb, 0xa6, 0xe1, 0xe6, 0x86, 0x57, 0x7d, 0xb5, 0xd1, 0x5c, 0x09, 0x41, 0xf3, 0x1c, 0x46, 0xba, 0x46, 0x01, 0x14, 0xd7, 0x9e, 0x66, 0xf6, 0xd2, 0x8d, 0xa6, 0xb0, 0x37, 0x53, 0x5d, 0x5d, 0xe0, 0x7f, 0xfb, 0x64, 0x8e, 0xeb, 0xf5, 0xeb, 0xd0, 0x93, 0x04, 0x81, 0xc0, 0xeb, 0x74, 0x18, 0xef, 0xed, 0xd3, 0x1f, 0xf6, 0x59, 0xb3, 0x64, 0x09, 0xe4, 0x81, 0xdc, 0x2e, 0xc2, 0x8b, 0x20, 0x42, 0xd3, 0xfa, 0x4d, 0x10, 0xc9, 0xb6, 0xfc, 0x80, 0xd3, 0xe7, 0x54, 0xa1, 0x51, 0xf1, 0xf6, 0xcb, 0x26, 0x60, 0x72, 0xf1, 0xe2, 0x45, 0x79, 0x9f, 0x5e, 0x67, 0x0d, 0x82, 0x6f, 0x0a, 0x3c, 0xb0, 0x8a, 0x16, 0x74, 0xba, 0xa7, 0x66, 0x3a, 0x42, 0x13, 0x75, 0x46, 0xb7, 0x6a, 0xa0, 0xe4, 0xfd, 0xff, 0xad, 0xb7, 0x7d, 0x2d, 0x47, 0x35, 0xe9, 0xed, 0x3d, 0x93, 0x69, 0x53, 0xd4, 0x2f, 0x5c, 0x3f, 0x95, 0xca, 0xbd, 0x70, 0x47, 0xbe, 0x7e, 0x1f, 0xf9, 0xab, 0x1b, 0xfc, 0xe8, 0x77, 0xbe, 0x97, 0x4f, 0x7e, 0xec, 0x33, 0x5c, 0x3d, 0x9c, 0xac, 0xbd, 0x36, 0x6b, 0xc5, 0xfc, 0xa5, 0x1b, 0x3c, 0x78, 0xe9, 0x9a, 0x7c, 0xce, 0x07, 0x3a, 0x02, 0x0d, 0x81, 0xce, 0xcf, 0xfc, 0xec, 0xef, 0xd6, 0x6f, 0xc0, 0x13, 0xad, 0x26, 0x4c, 0x20, 0x30, 0x30, 0x74, 0x10, 0x5a, 0x85, 0xa9, 0x09, 0x74, 0x83, 0x5a, 0x2a, 0x26, 0xd9, 0xff, 0xf1, 0x7c, 0x86, 0x69, 0x74, 0xd6, 0x8a, 0x77, 0x1a, 0xcf, 0x48, 0x82, 0xf5, 0xcc, 0x75, 0x39, 0xb5, 0xc3, 0xe1, 0xe4, 0x01, 0xe7, 0xc7, 0x17, 0xce, 0x40, 0xed, 0x41, 0x5c, 0x35, 0xbb, 0x73, 0x09, 0xb7, 0x4b, 0xa2, 0xe2, 0xdf, 0x7b, 0xef, 0xd7, 0x73, 0xff, 0xde, 0x7d, 0x7e, 0xf7, 0xe3, 0x5f, 0xa0, 0xdb, 0x33, 0x89, 0x82, 0x80, 0xcf, 0xfe, 0xf9, 0x9f, 0xe3, 0xf6, 0x0c, 0x34, 0x61, 0xe0, 0x9b, 0x7e, 0x1d, 0xe2, 0x74, 0x0a, 0x77, 0x97, 0x65, 0xd1, 0x0c, 0x0b, 0x59, 0x5a, 0x36, 0x52, 0xa7, 0xb6, 0x2f, 0x44, 0xa3, 0x93, 0x1e, 0x76, 0xd6, 0xa4, 0xbc, 0x6a, 0x9d, 0xa7, 0x88, 0xbc, 0xbe, 0xd7, 0x6f, 0xd6, 0x87, 0x0a, 0x0d, 0x50, 0x24, 0x56, 0xdf, 0xf7, 0x1b, 0x38, 0x56, 0x9d, 0x23, 0x0a, 0xdd, 0x54, 0x88, 0xa4, 0xa1, 0x5b, 0xa7, 0x08, 0x63, 0x5e, 0x20, 0xd0, 0x9b, 0xf5, 0x5a, 0xb0, 0x8c, 0x28, 0xcb, 0xaa, 0x96, 0xa1, 0xc9, 0xb0, 0x97, 0x30, 0x0c, 0x24, 0x9f, 0x86, 0x82, 0x34, 0xcb, 0xe8, 0xd6, 0x06, 0x42, 0xa5, 0xa8, 0x3f, 0x73, 0x94, 0x94, 0x45, 0xd9, 0x38, 0x4e, 0xba, 0xb6, 0x9c, 0xcc, 0x45, 0x29, 0x21, 0xf9, 0xaa, 0x36, 0x8e, 0x2a, 0x90, 0x28, 0x20, 0x79, 0xc5, 0xed, 0xdb, 0xb7, 0xd7, 0x64, 0xc3, 0xae, 0x2b, 0x35, 0xf4, 0x27, 0x27, 0x27, 0x84, 0xb5, 0xef, 0xbf, 0x7c, 0xcc, 0x35, 0xfa, 0x9a, 0x8b, 0xc6, 0x90, 0x2a, 0x8a, 0x64, 0xe1, 0x53, 0x40, 0x97, 0x10, 0xe0, 0xba, 0x52, 0xf2, 0x97, 0x24, 0x2b, 0xca, 0x52, 0x5b, 0x43, 0x16, 0xd4, 0x7b, 0x10, 0x04, 0x01, 0xcb, 0xe5, 0xb2, 0xd9, 0xd5, 0x0f, 0x06, 0x3d, 0x2c, 0xcb, 0x22, 0x08, 0x02, 0xa6, 0xb3, 0x49, 0x03, 0xe3, 0x3f, 0x7c, 0xf8, 0xb0, 0x31, 0x7c, 0xd1, 0x75, 0x9d, 0x24, 0x49, 0x6b, 0x42, 0x9d, 0x64, 0x7d, 0x3f, 0x9a, 0x3c, 0x6a, 0x56, 0x11, 0x96, 0x65, 0xca, 0x7d, 0x78, 0x2d, 0x63, 0x4b, 0x92, 0x8c, 0xf3, 0x7b, 0x97, 0x6a, 0x65, 0x4a, 0xc0, 0xf1, 0xf1, 0x84, 0x47, 0x8f, 0x1e, 0x92, 0xa6, 0x60, 0x59, 0x82, 0x83, 0x83, 0x03, 0x7a, 0x03, 0x8f, 0xc5, 0x62, 0x41, 0xbf, 0x2f, 0xef, 0xdf, 0xb2, 0x0d, 0x2e, 0x5f, 0xbe, 0xd8, 0x0a, 0x95, 0x91, 0xb2, 0xb5, 0x1b, 0x37, 0x5e, 0x25, 0x8c, 0xe0, 0x5d, 0xef, 0x7a, 0x92, 0x30, 0x0c, 0x9a, 0x10, 0x9b, 0xc9, 0xc9, 0x03, 0x92, 0x24, 0xe1, 0x61, 0x10, 0x90, 0x24, 0x09, 0x7b, 0x7b, 0x7b, 0xb2, 0x11, 0x5a, 0xc5, 0x18, 0x86, 0xc1, 0xcd, 0x5b, 0x37, 0xea, 0xed, 0x98, 0x54, 0x69, 0x51, 0xab, 0x1b, 0x1c, 0xc7, 0x01, 0x21, 0x58, 0x45, 0x89, 0x8c, 0x70, 0x8d, 0x33, 0xfa, 0xfd, 0x3e, 0xe7, 0xce, 0x9d, 0xe3, 0xce, 0xed, 0x7b, 0x58, 0x66, 0xc9, 0xde, 0xae, 0x87, 0xd0, 0x2a, 0xe6, 0xf3, 0x45, 0x4d, 0x2c, 0x77, 0x99, 0xcf, 0x17, 0xf5, 0x79, 0x6c, 0x72, 0xfb, 0xf6, 0x1d, 0xa0, 0x6a, 0x5c, 0xf9, 0x06, 0x03, 0x29, 0x67, 0x33, 0xd4, 0x61, 0xbf, 0xc9, 0xce, 0x56, 0xa9, 0x33, 0xaa, 0xc3, 0x52, 0x84, 0x0d, 0xc5, 0xa4, 0x96, 0xfa, 0xb7, 0xfc, 0x4c, 0xe1, 0x6c, 0x13, 0xdc, 0xb2, 0x2c, 0x3f, 0xc3, 0x8e, 0x6e, 0x4f, 0x8d, 0xab, 0x9a, 0x65, 0xae, 0x34, 0x74, 0xea, 0xe2, 0x51, 0xe4, 0x07, 0x15, 0x0f, 0xfa, 0x38, 0xfb, 0xd4, 0xb2, 0x25, 0x15, 0x33, 0x37, 0xb2, 0x86, 0xd5, 0x07, 0xab, 0x4d, 0x78, 0x53, 0x53, 0xbc, 0x3a, 0x7c, 0x57, 0x35, 0xfc, 0x73, 0xfa, 0x61, 0x2f, 0xd7, 0x0a, 0x97, 0xd2, 0x6e, 0x6f, 0x4e, 0xe9, 0xdb, 0x3c, 0xec, 0x37, 0xb9, 0x02, 0x6d, 0x84, 0x61, 0x73, 0xc7, 0xae, 0x1a, 0x97, 0x55, 0xac, 0x24, 0x72, 0xe5, 0x1a, 0xec, 0x2e, 0x8b, 0x72, 0xd5, 0x44, 0xb2, 0xb6, 0x83, 0x1d, 0xaa, 0x92, 0xc6, 0x4f, 0xd9, 0xf3, 0xbc, 0xa6, 0xdb, 0x6d, 0x3f, 0xb7, 0x36, 0xf9, 0xa4, 0x1d, 0xbc, 0xa3, 0x8a, 0x7f, 0xf3, 0x78, 0xac, 0xb3, 0xfe, 0xe9, 0xed, 0xc7, 0x9b, 0xb4, 0x5e, 0x1f, 0xd1, 0x5a, 0x4f, 0xb4, 0x55, 0x06, 0xea, 0x70, 0x57, 0x5c, 0x80, 0xe6, 0x35, 0x2c, 0x40, 0x98, 0xa2, 0x71, 0x0a, 0x7b, 0x23, 0xd7, 0xb1, 0x6d, 0x2e, 0x7d, 0x9b, 0xde, 0x07, 0xdb, 0x1c, 0xfd, 0x00, 0x44, 0xeb, 0xf9, 0xaa, 0x09, 0x74, 0xf4, 0x26, 0x86, 0x3b, 0x0d, 0x6f, 0x02, 0xf9, 0xf8, 0x2e, 0x5e, 0xbc, 0xd8, 0x14, 0xee, 0xe3, 0xc3, 0x47, 0x5b, 0xf7, 0xe9, 0x6b, 0xa4, 0xb9, 0xe6, 0xfd, 0xe4, 0xcc, 0xeb, 0xb6, 0x8e, 0x22, 0x55, 0x4d, 0xd1, 0xbe, 0x79, 0xf3, 0xa6, 0x8c, 0x65, 0x7d, 0xf2, 0xed, 0x0c, 0x72, 0x59, 0xb0, 0x66, 0x77, 0x5f, 0x65, 0xba, 0x91, 0xac, 0x2a, 0x59, 0xfb, 0x65, 0x03, 0xed, 0x4b, 0xc5, 0xc0, 0x69, 0x37, 0xa3, 0xde, 0xc3, 0x0f, 0x44, 0x09, 0x55, 0x9e, 0x71, 0x5c, 0x6b, 0xcd, 0x95, 0x41, 0xcc, 0xb7, 0xf0, 0x5e, 0xdc, 0xe1, 0x2e, 0xc3, 0x73, 0x05, 0xbf, 0xf5, 0xeb, 0xff, 0xbb, 0x2c, 0xe8, 0x1f, 0xfd, 0x08, 0x1f, 0xf9, 0xe8, 0x47, 0xf8, 0x9d, 0x7f, 0xf9, 0x4f, 0x65, 0xe1, 0x6f, 0x15, 0x75, 0x45, 0x8c, 0x6b, 0x76, 0xd9, 0x75, 0x43, 0xf0, 0xe7, 0xaf, 0x3d, 0x42, 0x20, 0x2d, 0x89, 0xef, 0x9e, 0x74, 0x6a, 0x22, 0x4f, 0xda, 0x10, 0xa9, 0x54, 0x00, 0x8d, 0x5a, 0x7d, 0x15, 0x45, 0x4e, 0x9a, 0xa5, 0xa4, 0xc9, 0x8a, 0x38, 0x96, 0x79, 0xd8, 0xae, 0x98, 0x63, 0x1a, 0x67, 0x9b, 0xe7, 0xcd, 0x09, 0x5c, 0xc1, 0xed, 0x2a, 0xe7, 0xfe, 0x3f, 0xfa, 0xd1, 0xff, 0xbc, 0x76, 0x8b, 0xdb, 0x66, 0x96, 0xd4, 0x63, 0xb4, 0x73, 0xba, 0x02, 0x19, 0x0c, 0x87, 0x44, 0xab, 0x39, 0x42, 0x37, 0xf8, 0xf2, 0xe4, 0x77, 0xd1, 0x34, 0x9d, 0x7e, 0xdf, 0xc5, 0x71, 0x6d, 0xcc, 0xdc, 0x5c, 0x43, 0xd3, 0xe4, 0xbe, 0xfb, 0x74, 0xf8, 0x38, 0x99, 0x1c, 0x37, 0x84, 0xe0, 0x76, 0x04, 0xa5, 0x82, 0x8a, 0x35, 0xbd, 0x6c, 0x4c, 0x4f, 0x36, 0x3f, 0x23, 0x12, 0xa1, 0x08, 0x9b, 0xcf, 0xb3, 0x8a, 0x19, 0x56, 0x24, 0x2d, 0x21, 0x04, 0x66, 0x2b, 0xbe, 0x79, 0xd3, 0xd8, 0xaa, 0x28, 0x0a, 0xe6, 0xf3, 0x60, 0x0d, 0xf1, 0x6a, 0xa7, 0x51, 0xae, 0x56, 0x2b, 0x46, 0xa3, 0x11, 0x96, 0x69, 0xd5, 0xda, 0xed, 0x90, 0xc3, 0xc3, 0x80, 0x73, 0xe7, 0x04, 0x83, 0x61, 0x4f, 0xb2, 0xdc, 0x4f, 0x6a, 0x3b, 0x52, 0x64, 0x84, 0xe9, 0xee, 0xee, 0xb8, 0xf1, 0x39, 0x8f, 0xd3, 0x98, 0xc3, 0xe3, 0xe3, 0x06, 0xed, 0x2c, 0x91, 0xf1, 0xa7, 0x71, 0x26, 0xd5, 0x2f, 0xbe, 0xef, 0x53, 0x84, 0x61, 0xc3, 0xda, 0xef, 0x76, 0xbb, 0x0d, 0x69, 0x4c, 0xd5, 0x84, 0xbd, 0xbd, 0xbd, 0x66, 0xea, 0x96, 0x96, 0xcb, 0x36, 0xb6, 0x63, 0x36, 0xe9, 0x6b, 0x27, 0x27, 0xa7, 0x67, 0xca, 0x6a, 0x55, 0x60, 0x18, 0x34, 0x3a, 0xe9, 0x93, 0x93, 0x13, 0x2c, 0xcb, 0x5b, 0x23, 0xd0, 0xaa, 0x9f, 0x53, 0x90, 0xba, 0x10, 0x15, 0xb3, 0xd9, 0x8c, 0x7b, 0xf7, 0x16, 0xf4, 0xfb, 0x7d, 0x7c, 0xdf, 0xa7, 0xd3, 0xf1, 0x6a, 0xe2, 0xda, 0x8c, 0xe7, 0x9f, 0x7f, 0x9e, 0xe9, 0x74, 0x4a, 0x45, 0x41, 0x92, 0xe4, 0x52, 0x62, 0x68, 0x18, 0x14, 0x45, 0x48, 0x18, 0x06, 0x14, 0x46, 0xc5, 0x70, 0x3c, 0x92, 0xbe, 0xea, 0xa1, 0xdc, 0xd1, 0x27, 0xb5, 0xf9, 0x89, 0x30, 0x04, 0xf7, 0xee, 0xdd, 0xc3, 0x71, 0x9c, 0x66, 0xbf, 0x6f, 0x18, 0x46, 0xed, 0x25, 0x2f, 0x57, 0x27, 0x22, 0xc8, 0x58, 0x2c, 0x12, 0x6c, 0x3b, 0x22, 0xcb, 0xfc, 0xba, 0x36, 0x9d, 0x0e, 0x39, 0xc7, 0xc7, 0xc7, 0x75, 0x1e, 0x07, 0xec, 0xee, 0x4a, 0xd9, 0xda, 0x9f, 0xfc, 0xc9, 0x2d, 0x0e, 0x0e, 0x8e, 0x78, 0xfb, 0xdb, 0xbf, 0xaa, 0x71, 0xb4, 0x9b, 0xcf, 0x66, 0xb2, 0x41, 0xa9, 0x63, 0x94, 0x27, 0x47, 0xc7, 0x68, 0x9a, 0xc6, 0x70, 0xdc, 0x97, 0xbc, 0x81, 0x7a, 0x48, 0x8d, 0xa3, 0x54, 0x12, 0x17, 0x6b, 0xad, 0xbe, 0x66, 0x6a, 0x3c, 0xf7, 0xdc, 0x73, 0xe4, 0x79, 0xce, 0x8b, 0x2f, 0xbe, 0x48, 0x55, 0x55, 0x3c, 0xf5, 0xd4, 0x53, 0xec, 0xec, 0xec, 0x30, 0x9f, 0xcf, 0x89, 0x56, 0x01, 0xe3, 0xf1, 0xb8, 0x19, 0x54, 0x65, 0xa3, 0x94, 0x30, 0x9d, 0x4e, 0xe9, 0xf7, 0xfb, 0x14, 0x45, 0xde, 0xc4, 0xab, 0x9a, 0xa6, 0xc9, 0x83, 0x07, 0x0f, 0xd0, 0xaf, 0x3c, 0x21, 0xe3, 0x53, 0x55, 0x87, 0xa6, 0xc4, 0xf4, 0x79, 0x9e, 0x37, 0x17, 0xe6, 0x66, 0xfc, 0xa8, 0x82, 0x75, 0x8b, 0x0a, 0xca, 0xaa, 0x42, 0xd3, 0x0d, 0x2c, 0xdb, 0xa6, 0x28, 0x2b, 0x56, 0x71, 0x4c, 0x59, 0x81, 0xeb, 0x79, 0x72, 0xf1, 0x9f, 0x65, 0x64, 0x79, 0x8e, 0xa6, 0xeb, 0x18, 0xa6, 0x29, 0xe5, 0x48, 0xb5, 0x2c, 0xc9, 0xeb, 0x0d, 0xf1, 0x3a, 0x3d, 0x34, 0xc3, 0x22, 0x4e, 0x73, 0xf2, 0x92, 0xda, 0x5f, 0xd7, 0x21, 0x2f, 0x2b, 0x34, 0xc3, 0xc2, 0xf1, 0x7c, 0x1c, 0xcf, 0xc7, 0xb4, 0x1d, 0x0c, 0x4b, 0xfd, 0xb1, 0x11, 0xba, 0x21, 0x3d, 0x96, 0x5b, 0x5a, 0x75, 0xb9, 0x6b, 0x15, 0x08, 0x5d, 0x43, 0x37, 0x0d, 0xd2, 0x3c, 0x6b, 0xba, 0xa3, 0x34, 0xcf, 0x28, 0x51, 0xba, 0x77, 0x9d, 0xa2, 0xaa, 0xf0, 0x6a, 0x7f, 0xe4, 0xb6, 0x8e, 0xbb, 0x7d, 0x20, 0x2b, 0x32, 0xe0, 0xe6, 0xf4, 0xaa, 0x3a, 0xec, 0x8e, 0xef, 0x34, 0xfb, 0x4e, 0x9a, 0x78, 0x48, 0xa9, 0x31, 0x36, 0x0c, 0x69, 0xed, 0x2a, 0x9b, 0x9e, 0xa2, 0x3e, 0xa4, 0xcb, 0xe6, 0xfb, 0xa0, 0xc4, 0x76, 0x6d, 0x0c, 0x53, 0x39, 0xc5, 0x9d, 0x4a, 0xa1, 0x2c, 0xd3, 0x92, 0x79, 0xe1, 0x95, 0x24, 0xc0, 0x09, 0x34, 0xaa, 0x52, 0xa6, 0xfe, 0x34, 0x0c, 0xf9, 0x7a, 0xaf, 0x2a, 0xad, 0x0a, 0x95, 0xbe, 0x9f, 0xba, 0xa8, 0x4a, 0x67, 0x31, 0x49, 0x4a, 0xa4, 0xf9, 0x23, 0xfd, 0xc0, 0xb5, 0x1a, 0x36, 0x03, 0xac, 0x8a, 0xb2, 0x7e, 0x4c, 0x42, 0x13, 0xe8, 0x9a, 0xd6, 0x04, 0x7d, 0x68, 0x55, 0x85, 0xe7, 0x3a, 0xd2, 0xad, 0xac, 0x2c, 0x11, 0x54, 0x58, 0xa6, 0x81, 0x65, 0x18, 0x64, 0x69, 0xc2, 0x62, 0x3e, 0x43, 0x58, 0x19, 0xc2, 0xc8, 0xd1, 0xad, 0x92, 0x4a, 0xcb, 0xc9, 0xab, 0x84, 0xb2, 0x2a, 0xd0, 0x0c, 0xd0, 0x64, 0x18, 0x5a, 0xfd, 0x5c, 0x2b, 0x10, 0x45, 0xfd, 0x5a, 0x95, 0x68, 0xa2, 0x42, 0x13, 0x15, 0x7a, 0x55, 0x61, 0x68, 0x60, 0xe9, 0x1a, 0x86, 0x00, 0xad, 0x2a, 0xd1, 0xaa, 0x12, 0x1d, 0xf9, 0xf7, 0x79, 0x12, 0xa3, 0x53, 0x61, 0x1b, 0x3a, 0xb6, 0xa1, 0x63, 0x68, 0xd4, 0x0a, 0x78, 0xf9, 0xa7, 0x12, 0x05, 0x45, 0x16, 0xf0, 0xc1, 0x0b, 0xde, 0x19, 0x8d, 0xf5, 0xe6, 0x6d, 0x55, 0x1f, 0xc6, 0xef, 0xb9, 0x7c, 0x81, 0xcf, 0xcc, 0x57, 0x58, 0xae, 0x8e, 0x2e, 0x04, 0x69, 0x12, 0x20, 0xd2, 0x13, 0x5e, 0xbf, 0x7d, 0x97, 0xe9, 0x74, 0x4a, 0x92, 0x66, 0xf4, 0x3a, 0x1e, 0xc3, 0x9d, 0x21, 0x7b, 0x7b, 0xe7, 0x78, 0x6a, 0xaf, 0xcb, 0x85, 0x71, 0x9f, 0x51, 0xcf, 0x63, 0xd4, 0xf3, 0x08, 0x93, 0x8c, 0x93, 0x65, 0x81, 0xed, 0xb8, 0x40, 0xd1, 0xbc, 0xb7, 0xaa, 0x21, 0x93, 0xd6, 0xb8, 0xd2, 0xf3, 0xb9, 0xaa, 0x4a, 0xa8, 0x4a, 0x3c, 0x3d, 0x20, 0x08, 0x42, 0x5c, 0x57, 0x7a, 0xd1, 0xff, 0xf5, 0x17, 0xbf, 0x48, 0x9a, 0xe6, 0x9c, 0x7f, 0xe2, 0x29, 0x86, 0xc3, 0x01, 0x96, 0x69, 0x52, 0x14, 0x15, 0x8b, 0x45, 0x44, 0x18, 0xeb, 0xd8, 0x56, 0x0f, 0x81, 0x01, 0x18, 0x08, 0x2c, 0xa8, 0x74, 0xca, 0x42, 0x90, 0x65, 0x25, 0x45, 0x5e, 0xf2, 0x7c, 0xf1, 0x0a, 0x4f, 0xd7, 0xc1, 0x2a, 0xbe, 0xdf, 0x25, 0xca, 0x33, 0x3c, 0x4d, 0x60, 0x05, 0x11, 0x2f, 0x1c, 0x9c, 0xf0, 0xcc, 0xdb, 0xdf, 0x86, 0xdb, 0xa9, 0xf8, 0xc9, 0x9f, 0xf9, 0x3f, 0xb0, 0xdd, 0x0e, 0x55, 0x59, 0x50, 0x55, 0x25, 0xff, 0xd5, 0x7f, 0xf9, 0xfd, 0xec, 0xf4, 0x47, 0xbc, 0x70, 0x70, 0xc2, 0x43, 0xcf, 0xa5, 0xbf, 0x58, 0xe2, 0x9b, 0x26, 0x51, 0x7d, 0x08, 0xae, 0xaa, 0x8a, 0xcb, 0xdf, 0xfe, 0x3c, 0x83, 0x8b, 0x7d, 0x2e, 0x0f, 0x74, 0xfe, 0xe8, 0x93, 0xf7, 0x21, 0x4d, 0x79, 0xe5, 0xc5, 0x4f, 0x73, 0x72, 0x70, 0x97, 0x9e, 0x33, 0xc2, 0xc2, 0xc5, 0x2c, 0x34, 0xcc, 0x52, 0x47, 0xa4, 0x9f, 0x42, 0xcf, 0xef, 0xa0, 0x65, 0xaf, 0x93, 0xaf, 0x6e, 0x10, 0x2f, 0x5e, 0x22, 0x5b, 0xbd, 0x82, 0xc8, 0xef, 0x60, 0xeb, 0x0f, 0x19, 0x8f, 0xdf, 0xc1, 0xbd, 0x83, 0xc5, 0x1b, 0xfb, 0xc9, 0x5f, 0xd8, 0xe5, 0x63, 0x7f, 0xfc, 0xa7, 0x98, 0x86, 0x56, 0x73, 0x27, 0xe0, 0xab, 0xae, 0x5d, 0x5f, 0xd3, 0xa2, 0x4b, 0x3f, 0x01, 0x81, 0x4e, 0x82, 0xa1, 0xe7, 0x8d, 0x27, 0xc0, 0xad, 0x5b, 0x8f, 0xb8, 0xf6, 0xf4, 0x93, 0xfc, 0xf5, 0xe7, 0x3e, 0x83, 0x5e, 0xb8, 0xdc, 0xbd, 0xbd, 0x62, 0x31, 0x2d, 0x71, 0x2d, 0x97, 0x32, 0x15, 0x24, 0xab, 0x4c, 0xea, 0xe5, 0x35, 0x0b, 0x21, 0x4c, 0x2a, 0xcd, 0xa4, 0x12, 0x26, 0x68, 0x16, 0x85, 0x30, 0x11, 0xa6, 0x8e, 0x30, 0x0c, 0xc2, 0x38, 0x65, 0xb6, 0x0c, 0x49, 0xf2, 0x12, 0xcd, 0xb4, 0xc9, 0x4a, 0x58, 0x84, 0x2b, 0xa2, 0xb0, 0x20, 0x4e, 0x2a, 0xc2, 0x28, 0x67, 0xb1, 0x4c, 0x88, 0x56, 0x05, 0x69, 0x26, 0xa8, 0xb0, 0xd0, 0x74, 0x17, 0x47, 0xeb, 0x91, 0xa7, 0x82, 0x38, 0xae, 0x28, 0x72, 0x9d, 0x34, 0xd3, 0xc8, 0x73, 0x9d, 0x12, 0x0b, 0xa1, 0x39, 0x04, 0xab, 0x15, 0x9a, 0x61, 0x63, 0x58, 0x2e, 0xba, 0xed, 0x82, 0x6e, 0x11, 0x26, 0x39, 0x59, 0x29, 0xf0, 0xba, 0x03, 0x7a, 0x6e, 0x47, 0x6a, 0x96, 0xe3, 0x88, 0x28, 0x89, 0xc8, 0x48, 0xd1, 0x6c, 0x0d, 0xc3, 0xb3, 0x70, 0x7a, 0x36, 0x79, 0x99, 0x80, 0x56, 0x4a, 0x98, 0x3f, 0x4e, 0x19, 0x0e, 0x7c, 0xfa, 0x7e, 0x17, 0x51, 0x40, 0x38, 0x5d, 0xe2, 0xf4, 0xbb, 0x94, 0x45, 0xce, 0x72, 0x36, 0x67, 0xa7, 0xdb, 0x27, 0x98, 0x2e, 0x08, 0x97, 0x21, 0x61, 0x10, 0x12, 0x05, 0x2b, 0x2a, 0x47, 0xa7, 0xaa, 0x35, 0xe8, 0x69, 0x26, 0xbd, 0x02, 0x6c, 0xa1, 0xd3, 0x11, 0x26, 0x76, 0x25, 0x48, 0x9d, 0x04, 0x6f, 0xc7, 0xc7, 0xb4, 0x0d, 0xe2, 0xb4, 0x90, 0x4d, 0x78, 0x61, 0x50, 0xac, 0xa0, 0x4c, 0x34, 0x44, 0x61, 0x52, 0x14, 0x02, 0xdb, 0x72, 0xb1, 0x7d, 0x8f, 0xd2, 0xd0, 0xc8, 0xb5, 0x0c, 0x3c, 0x1d, 0xb3, 0x63, 0xb1, 0xd7, 0xdd, 0xc5, 0x34, 0x2c, 0xba, 0x9d, 0x1e, 0x17, 0xf7, 0xcf, 0xb3, 0x33, 0xd8, 0xa1, 0x48, 0x24, 0x94, 0x3f, 0x1a, 0x8c, 0xa8, 0x00, 0xdf, 0xf3, 0xb1, 0x1d, 0x9b, 0xd1, 0x68, 0x44, 0x14, 0xc7, 0x64, 0x79, 0xce, 0x32, 0x0a, 0xb1, 0x5d, 0x87, 0xbe, 0xe7, 0x60, 0x68, 0x1a, 0x8e, 0x65, 0x71, 0x6e, 0x77, 0x97, 0x8e, 0xef, 0xe1, 0xbb, 0x2e, 0x1d, 0xdf, 0x63, 0x36, 0x3d, 0xe1, 0xc5, 0x97, 0xee, 0x30, 0x9b, 0xce, 0xc8, 0xea, 0xdc, 0x71, 0x99, 0x67, 0x1e, 0x60, 0x59, 0x26, 0x97, 0x2f, 0x5f, 0xc2, 0x15, 0x1e, 0x79, 0x52, 0x60, 0x18, 0x36, 0xe3, 0xdd, 0x73, 0xd8, 0xae, 0xc7, 0x6c, 0xbe, 0xa0, 0x28, 0x4a, 0xc6, 0x3b, 0x63, 0x0c, 0x5d, 0xa7, 0xe7, 0xfb, 0xf4, 0x7b, 0x5d, 0xfa, 0xbd, 0x3e, 0xb6, 0xe3, 0x90, 0x8c, 0xb3, 0x02, 0x35, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x97, 0x25, 0xcb, 0x38, 0x24, 0x2c, 0x32, 0x82, 0xac, 0xc0, 0x70, 0xe0, 0xa9, 0x67, 0xae, 0x52, 0x89, 0x8a, 0xd9, 0xc9, 0x31, 0xf7, 0xee, 0x3e, 0xa2, 0xca, 0x23, 0x8e, 0x0f, 0x1e, 0x51, 0x15, 0x92, 0x88, 0xec, 0xfa, 0x06, 0x86, 0x29, 0x70, 0x7a, 0x36, 0x9a, 0x95, 0x53, 0x18, 0x39, 0xde, 0xd0, 0xc3, 0xa8, 0xa4, 0xd2, 0xab, 0x2a, 0xe5, 0x48, 0x13, 0x2c, 0x25, 0x5b, 0xbd, 0xd7, 0xed, 0x31, 0x1e, 0x8f, 0x99, 0x86, 0x73, 0xa2, 0x38, 0xa4, 0xd2, 0x05, 0xe3, 0x73, 0xbb, 0x52, 0x4f, 0xaf, 0x55, 0x44, 0x69, 0x84, 0x69, 0x1b, 0xd8, 0xa6, 0xc6, 0x9d, 0xfb, 0xb7, 0xb8, 0x7b, 0xff, 0x16, 0xbd, 0xa1, 0x8f, 0xa1, 0x97, 0x54, 0x64, 0xf4, 0xba, 0x0e, 0x9e, 0x67, 0x02, 0x39, 0x51, 0xb4, 0xc0, 0x75, 0x4c, 0xca, 0x22, 0xe5, 0xe4, 0xe4, 0x10, 0xc7, 0x36, 0x18, 0x8f, 0x07, 0xb8, 0xae, 0x49, 0xaf, 0x2f, 0x15, 0x02, 0xe7, 0xcf, 0x9f, 0xa7, 0xaa, 0x2a, 0x8e, 0x8e, 0x8e, 0x30, 0x36, 0x61, 0x50, 0x05, 0xbb, 0xb4, 0x89, 0x54, 0x9b, 0xfb, 0x67, 0xf5, 0x77, 0xed, 0x08, 0x4e, 0xd5, 0x85, 0xf5, 0x7a, 0xbd, 0xb5, 0xb8, 0x3e, 0x45, 0xb8, 0x50, 0x8e, 0x36, 0xaa, 0x29, 0xc8, 0xb2, 0x0c, 0x8b, 0xd3, 0x2c, 0x74, 0x45, 0x8e, 0x6b, 0x33, 0xe1, 0x95, 0x49, 0xcb, 0x56, 0x76, 0x73, 0xbd, 0xc3, 0xd9, 0x24, 0x7b, 0xad, 0x85, 0x63, 0xd4, 0x46, 0xf8, 0x6d, 0x92, 0x5b, 0x9b, 0xf0, 0xa5, 0x26, 0xd0, 0x4d, 0xa2, 0x57, 0x7b, 0xcd, 0x70, 0x36, 0xc6, 0xf3, 0x94, 0xe1, 0xdc, 0xce, 0x3f, 0x6f, 0xff, 0xbd, 0x82, 0xba, 0xb7, 0x91, 0xcf, 0xda, 0xf7, 0xd3, 0x46, 0x2b, 0xda, 0x31, 0x8d, 0xdb, 0xb4, 0xeb, 0xdb, 0x6c, 0x6a, 0xd5, 0xcf, 0x37, 0x8e, 0x62, 0x55, 0xb5, 0xc6, 0x71, 0x50, 0x2e, 0x48, 0xea, 0xff, 0x15, 0xdb, 0xb3, 0x91, 0xe7, 0xbd, 0xa1, 0x49, 0x2a, 0x6b, 0x6e, 0x64, 0x6d, 0x05, 0x44, 0x93, 0x69, 0x5f, 0xc6, 0x2d, 0x98, 0xfd, 0x34, 0xa7, 0xfb, 0x34, 0xc3, 0x7d, 0x6d, 0x89, 0x7e, 0xe6, 0xfe, 0xf5, 0xda, 0xf8, 0x64, 0x1b, 0xb1, 0xb2, 0x4d, 0x92, 0xdc, 0x24, 0x9b, 0xb5, 0x75, 0xe0, 0xe2, 0x2d, 0x92, 0xda, 0x46, 0xba, 0xc6, 0xa4, 0x28, 0x99, 0xbd, 0x74, 0x83, 0x9f, 0xb8, 0x7e, 0x8d, 0x5f, 0x9a, 0x8b, 0x86, 0xad, 0xbe, 0x08, 0x22, 0x7a, 0x1d, 0x0f, 0xaf, 0xd3, 0x91, 0x7b, 0xf3, 0xce, 0xa8, 0x86, 0xdb, 0xf3, 0xad, 0x6c, 0x77, 0x4d, 0x5f, 0xd5, 0x8f, 0x8b, 0x37, 0xe4, 0x48, 0x48, 0x54, 0x2b, 0xad, 0x99, 0xed, 0x87, 0x1c, 0x1f, 0x3e, 0x6a, 0x12, 0x96, 0x8e, 0x0f, 0x1f, 0x71, 0x7c, 0xf8, 0x88, 0xf1, 0xde, 0x3e, 0x4f, 0x3e, 0xf5, 0x04, 0x83, 0xe1, 0x90, 0xa1, 0x99, 0xf3, 0xce, 0xce, 0x88, 0x4f, 0xbf, 0x30, 0xaf, 0x7f, 0x5e, 0x6a, 0xfc, 0x4f, 0xdf, 0x73, 0x78, 0xf0, 0xd2, 0xaf, 0xf1, 0x5f, 0x5f, 0x7a, 0x27, 0x47, 0x86, 0xc9, 0x38, 0xcf, 0xd6, 0xa6, 0xeb, 0x91, 0xae, 0x71, 0x1b, 0xf8, 0xc3, 0x0f, 0xff, 0x0e, 0x57, 0xbf, 0xe3, 0x3b, 0xb1, 0xdd, 0x2e, 0xe7, 0x2e, 0x5c, 0xe3, 0xf0, 0xe1, 0xab, 0x44, 0xc1, 0x49, 0x33, 0x81, 0x7f, 0x0b, 0x12, 0x7e, 0xff, 0xfc, 0x68, 0xc8, 0x07, 0x36, 0xe2, 0x56, 0xa7, 0x07, 0x3a, 0x28, 0x1f, 0xf7, 0x2a, 0x26, 0xcd, 0x2b, 0x96, 0xcb, 0x23, 0x84, 0x80, 0x92, 0x39, 0x86, 0x61, 0x51, 0x94, 0x75, 0x72, 0xd6, 0x62, 0x26, 0xaf, 0xa5, 0x32, 0x91, 0xc6, 0x48, 0x42, 0xb2, 0xa1, 0x0d, 0x53, 0xd4, 0x1c, 0x92, 0xc5, 0x9b, 0xbe, 0x2f, 0x76, 0x67, 0x88, 0xe3, 0x98, 0x8c, 0x77, 0x1c, 0x8e, 0x4f, 0x62, 0x56, 0xab, 0x8c, 0x9d, 0x1d, 0x87, 0xdb, 0x0f, 0xd8, 0x0a, 0xbb, 0x4f, 0x02, 0x97, 0x51, 0x67, 0x85, 0x65, 0xf5, 0x48, 0xd3, 0x05, 0x87, 0x47, 0x8f, 0x6a, 0xd4, 0xb0, 0x24, 0x08, 0xe2, 0x26, 0xfd, 0xab, 0x2c, 0x35, 0xd9, 0x7c, 0xe6, 0x29, 0x51, 0x52, 0xbf, 0x5f, 0xb5, 0xf1, 0x50, 0x9e, 0xe7, 0x64, 0xa5, 0x6c, 0xc6, 0xd4, 0x84, 0xa9, 0xae, 0xd9, 0xf6, 0xca, 0x4f, 0xd7, 0xf4, 0xb5, 0x75, 0x62, 0x3b, 0x46, 0x5a, 0xd7, 0x75, 0x16, 0xb3, 0x59, 0x6d, 0x94, 0x22, 0x61, 0xe3, 0x28, 0xa9, 0xfd, 0xd0, 0xe3, 0x98, 0xd9, 0x2c, 0x21, 0xab, 0x24, 0x3b, 0xd9, 0x71, 0x1c, 0xba, 0xfd, 0x5e, 0xed, 0x30, 0x26, 0x35, 0xc5, 0x59, 0x96, 0xb1, 0x0a, 0x56, 0xcd, 0x84, 0x3c, 0x18, 0x0d, 0xe8, 0x0e, 0x3a, 0x68, 0x86, 0x24, 0x67, 0xcd, 0x83, 0x39, 0x9d, 0xda, 0x38, 0xa6, 0xc8, 0x72, 0x84, 0xa1, 0x53, 0x95, 0xd2, 0xe4, 0xa5, 0xc8, 0x72, 0xe2, 0x24, 0xe6, 0xe8, 0xde, 0x3d, 0xac, 0x1a, 0x09, 0x54, 0xeb, 0xb6, 0x24, 0x49, 0x30, 0x2c, 0x93, 0x24, 0xcb, 0x58, 0x65, 0xb2, 0x10, 0xda, 0x8e, 0x43, 0x0a, 0x2c, 0x96, 0x01, 0x69, 0xb4, 0xc2, 0x37, 0x6c, 0x7c, 0xcf, 0xc3, 0x1c, 0x59, 0x94, 0x79, 0x59, 0x87, 0x3f, 0x29, 0xdb, 0x5b, 0xe9, 0xf3, 0xa0, 0x23, 0xc3, 0x67, 0x2a, 0xad, 0xc2, 0xf1, 0x1c, 0x19, 0xef, 0xe9, 0x59, 0x64, 0x22, 0x25, 0xc9, 0x22, 0x66, 0xc9, 0x8c, 0xd9, 0x22, 0xa7, 0xdf, 0xed, 0xd1, 0xe9, 0x74, 0xe4, 0xf5, 0x59, 0x55, 0xb8, 0xbe, 0x4f, 0x5e, 0xb3, 0xe4, 0x0b, 0xe4, 0xe3, 0xb5, 0x04, 0x8d, 0x47, 0xbb, 0x3a, 0xe7, 0x93, 0x24, 0xe1, 0xd2, 0xee, 0x05, 0x06, 0x83, 0x81, 0xcc, 0xf1, 0xae, 0x2d, 0x5e, 0xd5, 0x5e, 0x7d, 0xb5, 0x5a, 0xb1, 0xb7, 0x37, 0x68, 0xf8, 0x0b, 0x4a, 0xbb, 0xae, 0x56, 0x7e, 0xb3, 0xd9, 0x0c, 0xf2, 0xd3, 0xb3, 0x6d, 0xb5, 0x5a, 0xd5, 0x44, 0x46, 0xa3, 0x79, 0xaf, 0x56, 0xab, 0x90, 0x24, 0x5a, 0xb1, 0x98, 0xc9, 0xeb, 0x39, 0x4e, 0x33, 0xa2, 0x34, 0x91, 0xef, 0x43, 0xbf, 0x8b, 0x30, 0x32, 0xaa, 0x7a, 0xd5, 0x9c, 0x67, 0x52, 0x11, 0x30, 0x1c, 0x66, 0xf8, 0x8e, 0x8f, 0xa8, 0xe0, 0xf2, 0xe5, 0xab, 0xc4, 0x69, 0x42, 0x29, 0x4a, 0x4a, 0x0a, 0xf9, 0x3e, 0xf6, 0x3a, 0x84, 0x71, 0x44, 0x92, 0xac, 0x70, 0x0c, 0x29, 0x75, 0x34, 0x34, 0x9d, 0xaa, 0xb2, 0xb1, 0xea, 0x28, 0xd4, 0x64, 0x15, 0x73, 0xf7, 0xee, 0x5d, 0x46, 0x17, 0x46, 0x8c, 0xc7, 0x3b, 0x74, 0x07, 0x7d, 0x6c, 0xd7, 0x21, 0x8a, 0x02, 0x92, 0x2c, 0x85, 0x4c, 0xbe, 0x1e, 0xcb, 0x68, 0xd9, 0x04, 0x5f, 0x8d, 0xc7, 0x63, 0xce, 0x8d, 0xa5, 0x4a, 0x20, 0x58, 0x2c, 0x79, 0xf5, 0xd5, 0x57, 0xd9, 0xdf, 0xdf, 0xe7, 0xf2, 0x65, 0xb9, 0x87, 0xbf, 0x73, 0xe7, 0x0e, 0xcb, 0xe5, 0xb2, 0x39, 0x17, 0x3d, 0xcf, 0xa3, 0xc2, 0xe4, 0xd5, 0x57, 0x5f, 0x65, 0x32, 0x99, 0x60, 0x9a, 0x92, 0xf4, 0x67, 0x6c, 0x9a, 0xa9, 0xa8, 0x02, 0xd1, 0xf6, 0x5e, 0x5f, 0x93, 0x5a, 0xb4, 0x26, 0xd9, 0x34, 0x3f, 0x4d, 0xf7, 0x51, 0xbb, 0x21, 0x75, 0xd8, 0x2b, 0xd2, 0x83, 0x0a, 0xac, 0x6f, 0xeb, 0x2d, 0xdb, 0xb6, 0xa5, 0x9b, 0x5e, 0xc5, 0x6d, 0x1d, 0x7b, 0xdb, 0x6f, 0x7c, 0x1b, 0x74, 0x65, 0xe8, 0xe2, 0x0c, 0x99, 0xaf, 0xfd, 0xef, 0x6a, 0xd7, 0xb5, 0xed, 0x7b, 0xb6, 0x15, 0xef, 0xcd, 0x64, 0x37, 0xd5, 0x8c, 0x6c, 0x0b, 0x8a, 0x69, 0x58, 0xda, 0xa5, 0x02, 0x9f, 0x25, 0x34, 0xaa, 0xf6, 0xaa, 0x8a, 0x21, 0x7c, 0x9a, 0x65, 0x5d, 0xc9, 0xb8, 0xce, 0x36, 0xb9, 0x4c, 0xac, 0xbb, 0xa2, 0x6d, 0x46, 0xb7, 0x6e, 0x42, 0xb9, 0x9b, 0x11, 0xb1, 0x0a, 0x1e, 0xdb, 0xb4, 0x9e, 0x15, 0x42, 0x32, 0xac, 0x2d, 0xcb, 0x68, 0x4c, 0x36, 0xe4, 0x04, 0x59, 0xac, 0xbd, 0xbe, 0x98, 0x6f, 0x7c, 0xd8, 0xaa, 0xa6, 0x4a, 0xbd, 0x0f, 0x6d, 0x24, 0xc3, 0xb2, 0x2c, 0x8a, 0x2c, 0x6d, 0xad, 0x12, 0x5a, 0xb1, 0xa8, 0x5b, 0x7c, 0xec, 0xdf, 0x88, 0x03, 0xd1, 0xf6, 0x88, 0x6f, 0x37, 0x92, 0xed, 0x86, 0x6e, 0x1b, 0x71, 0xaf, 0x28, 0x4b, 0x8a, 0xf2, 0xad, 0x79, 0xb1, 0x6f, 0x92, 0xe4, 0x14, 0x87, 0x40, 0xd3, 0x34, 0xbe, 0xe6, 0xd9, 0x2b, 0xad, 0x22, 0xbe, 0xe5, 0x67, 0x4f, 0xbe, 0x8c, 0x71, 0x24, 0x21, 0xf7, 0x6f, 0xda, 0xd9, 0xe1, 0x2b, 0xcd, 0x5e, 0xb4, 0xdc, 0x6a, 0x51, 0x5b, 0x55, 0x15, 0xe1, 0xc1, 0x97, 0x79, 0xd7, 0xf3, 0xd7, 0xf9, 0xc2, 0x8d, 0x10, 0xea, 0xcd, 0x7c, 0x1b, 0xca, 0xf7, 0x3a, 0x1d, 0xde, 0xfe, 0x8e, 0x77, 0x30, 0xbb, 0xfb, 0x2a, 0x5f, 0xfe, 0xd2, 0x97, 0x9a, 0x46, 0x62, 0x30, 0x1c, 0x22, 0xc4, 0x0c, 0x21, 0x2a, 0x19, 0xa9, 0xdb, 0x48, 0x38, 0xe5, 0xb5, 0xf7, 0x93, 0xdf, 0xf0, 0x5d, 0x1c, 0xd5, 0xab, 0x85, 0x63, 0xe3, 0xec, 0x1b, 0xf8, 0x9e, 0xc9, 0x94, 0x49, 0x51, 0xf2, 0xeb, 0xbf, 0xf9, 0xab, 0x18, 0x86, 0x4d, 0xaf, 0xbb, 0x4f, 0xb2, 0x0a, 0x1b, 0xae, 0x41, 0xbb, 0xa8, 0xcf, 0x3f, 0x77, 0x83, 0x97, 0x0e, 0xd7, 0x35, 0xfa, 0xd7, 0x5b, 0x85, 0xdd, 0xb4, 0x63, 0xaa, 0x12, 0x3c, 0xdf, 0xa1, 0xaa, 0x0a, 0x92, 0xf4, 0x01, 0xc7, 0xf3, 0x07, 0xac, 0xa2, 0x90, 0x38, 0x8e, 0x70, 0x44, 0x52, 0xe7, 0x0e, 0xe4, 0x92, 0xe7, 0x61, 0x08, 0x74, 0x5d, 0xfa, 0xb9, 0x3f, 0xf7, 0xee, 0x1f, 0x79, 0x2c, 0x6c, 0xbe, 0x09, 0xb7, 0x9b, 0xa6, 0xce, 0xde, 0xde, 0x90, 0xb2, 0x5a, 0x30, 0xd3, 0x56, 0x8d, 0xb4, 0xef, 0x8d, 0x6e, 0x8e, 0x95, 0xf3, 0xce, 0x77, 0x7e, 0x35, 0x17, 0x2f, 0x5d, 0x24, 0x49, 0x62, 0x74, 0x5d, 0xc3, 0xb6, 0x15, 0x9c, 0x9d, 0x93, 0x65, 0x02, 0xbb, 0x6e, 0x60, 0xd5, 0xb9, 0x63, 0x88, 0x53, 0x93, 0x96, 0x38, 0x4b, 0xb1, 0x2c, 0xa3, 0xb1, 0x25, 0x55, 0xc6, 0x59, 0x6d, 0x16, 0x7a, 0xd6, 0x32, 0x78, 0x6a, 0xf3, 0x6f, 0xd4, 0xb5, 0xd8, 0xb1, 0x3b, 0x52, 0x93, 0x1c, 0xcb, 0xd5, 0x60, 0x56, 0x16, 0x4d, 0x8e, 0xb8, 0x65, 0x59, 0x08, 0xb3, 0x3d, 0x40, 0x48, 0x3f, 0x01, 0xc3, 0xd4, 0x70, 0x84, 0x85, 0xe3, 0xd8, 0x8c, 0x77, 0xf7, 0x65, 0x33, 0x92, 0x27, 0x2c, 0x83, 0x39, 0xc7, 0x87, 0x47, 0x04, 0x51, 0x40, 0x51, 0x49, 0xb5, 0x8b, 0x67, 0xcb, 0x7d, 0xb0, 0x86, 0x3c, 0xc0, 0x6d, 0xc3, 0x44, 0xaf, 0xfd, 0x1d, 0xfa, 0x65, 0x49, 0xaf, 0x28, 0xa5, 0xb9, 0x56, 0x6d, 0x76, 0x12, 0x04, 0x01, 0xc1, 0x2a, 0x62, 0xf7, 0xdc, 0x5e, 0xc3, 0x2c, 0x2f, 0xcb, 0x92, 0xac, 0x26, 0xe7, 0xf6, 0x3a, 0x5d, 0x84, 0xeb, 0x63, 0x54, 0x02, 0x4b, 0xd3, 0x59, 0x84, 0x81, 0xf4, 0x10, 0xd0, 0x0d, 0xba, 0x7d, 0x0f, 0xb3, 0x6f, 0x62, 0x09, 0x1b, 0x5d, 0xe8, 0x68, 0xe8, 0xcc, 0xe7, 0x73, 0x74, 0x5d, 0x46, 0xde, 0xa6, 0xc9, 0x8a, 0x47, 0x8b, 0x13, 0xb2, 0x2a, 0xc1, 0xef, 0x7a, 0xf4, 0x06, 0x5d, 0xc2, 0x60, 0x41, 0x5e, 0x16, 0x2c, 0xc3, 0x80, 0x34, 0x96, 0x7c, 0x2a, 0xcf, 0x71, 0x25, 0x74, 0xde, 0xeb, 0x91, 0xe6, 0x59, 0xa3, 0x99, 0x0f, 0x82, 0x00, 0xbf, 0x2b, 0xe3, 0x50, 0x15, 0x74, 0xfc, 0xf2, 0xcb, 0x2f, 0x33, 0x1a, 0x8d, 0xd6, 0x72, 0x35, 0x14, 0x91, 0x78, 0x34, 0x1a, 0xb1, 0x0c, 0x25, 0x4b, 0xbc, 0x2c, 0x4b, 0x26, 0x93, 0x09, 0x86, 0x61, 0x34, 0x5a, 0xff, 0xaa, 0xaa, 0xd0, 0x2b, 0x03, 0xbf, 0xdf, 0x45, 0xb3, 0x4c, 0x96, 0x51, 0x88, 0x91, 0x6a, 0x0c, 0x86, 0x3d, 0x39, 0x68, 0x0a, 0x0d, 0xdf, 0xd8, 0x97, 0x84, 0xbe, 0xa2, 0x40, 0xd7, 0x4c, 0xd0, 0x04, 0x71, 0x5e, 0x10, 0xa6, 0x12, 0x29, 0x98, 0x86, 0x01, 0x96, 0x21, 0x59, 0xe7, 0xba, 0xa1, 0xd1, 0xdd, 0xd9, 0x61, 0xd0, 0xeb, 0xe3, 0xd9, 0x0e, 0xa2, 0x92, 0xfc, 0x25, 0xcd, 0x10, 0x2c, 0xc2, 0x80, 0xac, 0xc8, 0x98, 0xcf, 0xe7, 0x32, 0x19, 0xce, 0x95, 0xab, 0x5c, 0xdb, 0xb2, 0xe9, 0xf5, 0x7a, 0xd8, 0xa6, 0x41, 0x92, 0x38, 0x54, 0x85, 0x5c, 0x67, 0xce, 0xab, 0x19, 0xb3, 0xf9, 0x09, 0x5f, 0xfa, 0xd2, 0x6b, 0xec, 0xee, 0x7a, 0x0c, 0x82, 0x1d, 0x89, 0x0a, 0x17, 0x52, 0x32, 0xa8, 0xce, 0xd3, 0x0b, 0x17, 0x2e, 0x60, 0xdb, 0x36, 0x61, 0x9d, 0x96, 0xa6, 0x24, 0x7a, 0xa6, 0x69, 0xd2, 0xeb, 0x9d, 0xda, 0xcf, 0x4e, 0x26, 0x13, 0x1e, 0x3c, 0x78, 0xd0, 0x9c, 0xbd, 0xdd, 0x6e, 0x97, 0xfd, 0xfd, 0x7d, 0x1e, 0x1d, 0x4c, 0xb9, 0x7e, 0xfd, 0x7a, 0xe3, 0x05, 0xf0, 0xfa, 0xeb, 0xaf, 0xcb, 0xb4, 0x35, 0xd5, 0xa1, 0x6e, 0x12, 0xc7, 0x94, 0x11, 0x42, 0xdb, 0xbd, 0xa7, 0x6d, 0xcc, 0x52, 0xd4, 0xbf, 0xb0, 0x2d, 0x05, 0x53, 0x66, 0x2e, 0x6a, 0xd7, 0x1e, 0xc7, 0x71, 0x33, 0xe5, 0xb5, 0xa7, 0x67, 0xa5, 0x55, 0x6c, 0x1b, 0xae, 0xa8, 0xdf, 0xa3, 0xf6, 0x49, 0xed, 0x69, 0xb2, 0xbd, 0xa7, 0x6f, 0xee, 0x87, 0xfc, 0x0c, 0x6a, 0xd0, 0x3e, 0x58, 0xd5, 0xc5, 0xb1, 0x59, 0x30, 0x1a, 0x4d, 0x68, 0x96, 0xaf, 0x99, 0xdb, 0xb4, 0xd3, 0xc9, 0x36, 0xc9, 0x74, 0xdb, 0x26, 0xed, 0xf6, 0xe3, 0xda, 0x44, 0x0a, 0x36, 0x5f, 0xd3, 0x6d, 0x06, 0x24, 0xf2, 0x4d, 0x2e, 0xd6, 0x58, 0xa3, 0x6b, 0x3a, 0xef, 0x2d, 0x28, 0x49, 0x7b, 0x4a, 0xef, 0x76, 0xbb, 0x6b, 0xec, 0xfa, 0xf6, 0x73, 0x6c, 0x93, 0xe6, 0xb6, 0x25, 0xcd, 0x29, 0xe9, 0xd7, 0x5b, 0x49, 0x6b, 0x6b, 0x37, 0x45, 0x6d, 0xcd, 0xfe, 0xfa, 0x8e, 0xfe, 0x6c, 0xd3, 0xb3, 0x16, 0x4d, 0xba, 0xad, 0xb8, 0x57, 0x9c, 0x51, 0x09, 0x68, 0x1b, 0x91, 0xa4, 0x9b, 0xcc, 0xfc, 0xcd, 0xd7, 0xe2, 0x8d, 0xf2, 0xba, 0xb7, 0xdd, 0x06, 0xd7, 0xaf, 0x9d, 0x45, 0x5b, 0x14, 0x8b, 0x5d, 0x15, 0xf5, 0x60, 0xd2, 0x14, 0xf1, 0xab, 0x87, 0x13, 0xa4, 0x68, 0x4a, 0x1e, 0xda, 0xb3, 0xc3, 0x09, 0x3f, 0x76, 0xfd, 0x1a, 0x1f, 0x8e, 0xcb, 0xfa, 0x90, 0x3e, 0x7b, 0x0b, 0x0f, 0xbe, 0xcc, 0xc5, 0xfd, 0x41, 0xbd, 0x13, 0xcf, 0xb6, 0x4e, 0xf9, 0x51, 0x10, 0xe0, 0xfb, 0x1e, 0xfe, 0xf5, 0xe7, 0x19, 0x84, 0x11, 0xfd, 0xc9, 0x5d, 0x6e, 0x07, 0x13, 0xfa, 0x65, 0x40, 0x29, 0x4a, 0x84, 0x26, 0x28, 0x1b, 0xb3, 0x27, 0xf9, 0xbc, 0x1f, 0xbc, 0xf8, 0x61, 0xf6, 0x2f, 0xbd, 0x13, 0x36, 0xf6, 0xde, 0xdb, 0x9e, 0xe3, 0xa7, 0x7f, 0xe5, 0xd7, 0xd8, 0x3b, 0xf7, 0x0c, 0xfd, 0xe1, 0x79, 0x86, 0xa3, 0x4b, 0xcc, 0x67, 0xeb, 0x23, 0xef, 0x85, 0xeb, 0x3b, 0xb8, 0xc3, 0x6f, 0x04, 0xe0, 0x8b, 0x35, 0x7c, 0xff, 0xfc, 0x57, 0x5f, 0xaf, 0x35, 0xec, 0x30, 0x3c, 0x57, 0x70, 0x74, 0x7c, 0x0b, 0xdb, 0x34, 0x18, 0x8e, 0x4c, 0xaa, 0x0a, 0x92, 0xfc, 0x3e, 0x69, 0x19, 0x53, 0x94, 0x09, 0x95, 0x96, 0x52, 0x96, 0x7d, 0x74, 0x5d, 0xc3, 0xb2, 0x6c, 0x34, 0x5d, 0x7a, 0xb9, 0x17, 0x45, 0xc6, 0x64, 0xaa, 0xf3, 0xe0, 0xce, 0x8d, 0xc7, 0xba, 0xbd, 0x01, 0x5c, 0x7b, 0xe6, 0x12, 0x9e, 0xd7, 0xe1, 0x9f, 0xff, 0xdc, 0xef, 0x31, 0xe8, 0xdb, 0xc4, 0xf1, 0x92, 0xe1, 0x40, 0xe0, 0xd5, 0xba, 0xee, 0x6d, 0x3f, 0x27, 0x13, 0xd6, 0xe4, 0xff, 0x8f, 0xf7, 0xf6, 0xb9, 0xf6, 0xec, 0x75, 0xde, 0xfd, 0xfc, 0xd7, 0xf2, 0xbf, 0x9a, 0x26, 0xbd, 0x9e, 0x8b, 0xeb, 0xcb, 0x9d, 0xad, 0x65, 0x4b, 0xc2, 0x62, 0x56, 0x73, 0x74, 0xda, 0x11, 0xc7, 0x6b, 0x16, 0xcf, 0x99, 0x8c, 0xee, 0xb4, 0x74, 0x03, 0x4d, 0x05, 0x49, 0xa5, 0x72, 0xb8, 0x48, 0x25, 0xdb, 0x6c, 0x0d, 0x3d, 0x53, 0x06, 0x2c, 0xcd, 0xde, 0x7c, 0x5e, 0x4f, 0x4c, 0xcd, 0xb5, 0x5b, 0x37, 0x8a, 0xc6, 0xa9, 0x9b, 0x9b, 0xda, 0xd1, 0xe7, 0x35, 0x19, 0x4c, 0xa5, 0x6d, 0x69, 0x9a, 0xc6, 0x97, 0x5e, 0x7b, 0x81, 0x5e, 0xaf, 0x47, 0x6f, 0x28, 0x9d, 0xc9, 0x74, 0x4b, 0xa7, 0x9b, 0x75, 0xd1, 0x4d, 0xa3, 0xd1, 0x5a, 0xe7, 0x79, 0x4e, 0x55, 0xca, 0xe1, 0x21, 0x2d, 0x72, 0xf2, 0x3c, 0xa1, 0xcc, 0xe4, 0xb9, 0x37, 0x5f, 0x86, 0xf8, 0xae, 0x4b, 0xbf, 0xdb, 0xc3, 0xd4, 0xe4, 0xa4, 0xb7, 0x8c, 0x42, 0x76, 0xcf, 0xed, 0xb1, 0x08, 0x02, 0x72, 0xb3, 0xac, 0x7f, 0x26, 0x47, 0x47, 0x9e, 0xa9, 0xae, 0x69, 0x61, 0xa1, 0xa1, 0x55, 0xb0, 0xaa, 0x25, 0x6c, 0x5a, 0xa5, 0x43, 0x01, 0x71, 0x9a, 0x12, 0x26, 0x11, 0x59, 0x94, 0x92, 0x65, 0x39, 0x86, 0xa6, 0xe3, 0xfb, 0x1e, 0x9e, 0xed, 0x22, 0x74, 0x9b, 0x55, 0x16, 0x91, 0x26, 0x05, 0x69, 0x9c, 0x90, 0xac, 0x6c, 0x4c, 0xdb, 0x26, 0xcd, 0x73, 0x6c, 0x5d, 0x67, 0x67, 0x3c, 0x6a, 0x9a, 0xa0, 0x4a, 0x80, 0xed, 0x3a, 0xf8, 0x46, 0x47, 0xa6, 0xa9, 0xe5, 0x19, 0xd3, 0xe9, 0x14, 0x51, 0x17, 0x32, 0xf5, 0x3e, 0xed, 0x5c, 0xbc, 0xc8, 0xce, 0xce, 0x4e, 0x8d, 0xa8, 0xc8, 0x33, 0x43, 0xa9, 0x0d, 0x46, 0xa3, 0x11, 0xc7, 0xd3, 0x05, 0xbb, 0xbb, 0x23, 0xa9, 0x61, 0x8f, 0x96, 0x8d, 0x6c, 0xae, 0x28, 0xe5, 0x24, 0xaf, 0x95, 0x06, 0x85, 0x28, 0xc1, 0xd0, 0x09, 0x56, 0x11, 0x71, 0x9a, 0xd4, 0xef, 0x4f, 0x49, 0x5a, 0x94, 0xf8, 0x86, 0x4d, 0x9e, 0xc9, 0x1a, 0xe5, 0x38, 0x02, 0x53, 0xb7, 0xa8, 0xd2, 0x9c, 0xf9, 0xf4, 0x84, 0xa3, 0xe9, 0x1c, 0xa7, 0xab, 0xd1, 0xf1, 0x7c, 0x19, 0x67, 0x9c, 0x4b, 0xab, 0xd9, 0x60, 0x11, 0x42, 0x51, 0xe2, 0x3a, 0x0e, 0x65, 0x01, 0x86, 0x65, 0xb2, 0x4a, 0x57, 0x08, 0x1d, 0xb2, 0x30, 0x67, 0x38, 0x1a, 0x36, 0xef, 0xeb, 0x6b, 0xaf, 0xdd, 0x60, 0x77, 0x77, 0x97, 0x61, 0x7f, 0x20, 0x95, 0x29, 0x65, 0x85, 0x65, 0x19, 0x74, 0xba, 0x1e, 0x57, 0x9d, 0xab, 0x58, 0x9d, 0x03, 0x1c, 0xc7, 0x22, 0x49, 0x12, 0x16, 0x93, 0x25, 0x9a, 0x06, 0xbd, 0x41, 0x1f, 0x5d, 0x97, 0x68, 0xc4, 0xeb, 0xaf, 0xbf, 0x4e, 0xaf, 0xd7, 0xc3, 0xad, 0xaf, 0xab, 0x46, 0xb6, 0xad, 0x1b, 0x5c, 0xb8, 0x70, 0xa1, 0x61, 0xfa, 0x3f, 0x7c, 0xf8, 0xb0, 0x41, 0x7d, 0xa7, 0xd3, 0x69, 0x53, 0x33, 0x0e, 0x8f, 0xe6, 0x6b, 0xa1, 0x30, 0xbe, 0xef, 0x63, 0xb4, 0xe1, 0x6b, 0x75, 0xc0, 0xa9, 0xa9, 0xb9, 0x3d, 0xb5, 0xb6, 0xa1, 0x65, 0x05, 0xb5, 0xab, 0x82, 0xdf, 0x2e, 0xd0, 0x0a, 0xc6, 0xf6, 0x3c, 0xaf, 0xf9, 0x77, 0x15, 0x18, 0xd0, 0x26, 0xa7, 0x29, 0x48, 0xb1, 0x0d, 0x57, 0xab, 0x0f, 0x9b, 0x22, 0xb3, 0x29, 0x36, 0x65, 0x3b, 0x5d, 0x4d, 0x15, 0x3a, 0xf5, 0x01, 0xdd, 0x2c, 0x08, 0x9b, 0x8c, 0xfc, 0xb6, 0x23, 0x5d, 0xbb, 0x50, 0xeb, 0xba, 0xce, 0x32, 0x4e, 0xce, 0x04, 0xa8, 0xb4, 0xa5, 0x52, 0x9b, 0x4d, 0xcc, 0x66, 0xf6, 0x7a, 0x52, 0x4b, 0x2e, 0x4e, 0x11, 0x04, 0x10, 0xe2, 0x94, 0xd9, 0x69, 0x9a, 0xd6, 0x5a, 0x7e, 0xf2, 0xa6, 0xfc, 0xaa, 0xda, 0x88, 0x69, 0x7d, 0x9c, 0x87, 0xf9, 0xe3, 0x08, 0x61, 0xba, 0xa1, 0xd5, 0x0e, 0xf7, 0x02, 0xdd, 0xd0, 0x30, 0xc4, 0x29, 0x84, 0x9d, 0x17, 0x59, 0xd3, 0xd0, 0x34, 0x05, 0x51, 0x3f, 0xb5, 0x65, 0x15, 0x42, 0x90, 0x6d, 0x81, 0x94, 0xdb, 0x37, 0x85, 0xd2, 0xb4, 0xfd, 0x05, 0xda, 0x79, 0xf0, 0xa6, 0xd9, 0x7e, 0x3e, 0x35, 0x2c, 0xf9, 0xef, 0x10, 0x47, 0xba, 0x89, 0x3a, 0xb4, 0x8d, 0x78, 0xd4, 0x75, 0xd2, 0x5e, 0x43, 0x6c, 0xbe, 0x0e, 0x86, 0x61, 0x60, 0xbc, 0xc5, 0x3c, 0x73, 0x05, 0xb9, 0xeb, 0x37, 0x5e, 0xe3, 0xf3, 0xa3, 0x21, 0xa5, 0xd1, 0x91, 0x4e, 0xb3, 0x42, 0x70, 0xf1, 0xd2, 0x45, 0x8c, 0x3b, 0x2f, 0xaf, 0xe9, 0xd8, 0xdb, 0x45, 0x7c, 0xf3, 0x36, 0x7b, 0xe9, 0x06, 0x5f, 0xff, 0xdd, 0x4f, 0xf1, 0xd9, 0x97, 0x82, 0x33, 0x48, 0xc4, 0xf9, 0xce, 0x8c, 0x47, 0x1d, 0x8b, 0x45, 0x10, 0x31, 0xde, 0xe3, 0x6c, 0x9a, 0x5b, 0x8d, 0x02, 0x2c, 0x82, 0x88, 0xfb, 0xf7, 0xee, 0x33, 0x18, 0x4a, 0x86, 0x77, 0x7e, 0xe5, 0x59, 0x2e, 0x02, 0xab, 0xa4, 0x20, 0x7f, 0xe1, 0x8b, 0x68, 0x42, 0x47, 0xd7, 0xcd, 0x16, 0x5a, 0xa3, 0xf1, 0x93, 0xdf, 0xf0, 0x5d, 0xb0, 0x61, 0x0c, 0xd3, 0x96, 0xa0, 0xb5, 0x8b, 0xbc, 0xeb, 0xf6, 0xb8, 0x74, 0xf9, 0xed, 0x74, 0x7c, 0x89, 0x90, 0x95, 0x79, 0x78, 0xe6, 0x79, 0x0c, 0xcf, 0x15, 0xac, 0xbe, 0xe6, 0x1a, 0xf9, 0x17, 0xfe, 0x04, 0xe3, 0xc8, 0x63, 0x30, 0xee, 0x37, 0x3a, 0xf4, 0xd9, 0xfd, 0x39, 0x49, 0x3c, 0x45, 0xd3, 0x35, 0x0c, 0x33, 0xa5, 0x28, 0x57, 0x64, 0x79, 0x8c, 0xd0, 0x72, 0x74, 0xa3, 0xc2, 0xb3, 0xc1, 0xcc, 0x2c, 0x2c, 0xdb, 0xa8, 0xb5, 0xbd, 0xc8, 0xa0, 0xa1, 0x22, 0xe3, 0xd9, 0xe7, 0xbf, 0x8f, 0x57, 0x5e, 0x79, 0x65, 0xcd, 0x9e, 0x55, 0x31, 0xdd, 0x95, 0x31, 0x8c, 0xe7, 0x75, 0xf8, 0xb6, 0x6f, 0x7f, 0x1f, 0xff, 0xf2, 0xe7, 0xff, 0x39, 0xfb, 0xe7, 0x7c, 0xf6, 0xf7, 0xfb, 0x98, 0x86, 0xce, 0xe4, 0x24, 0x6c, 0x0a, 0x78, 0xda, 0xd2, 0x1c, 0xa4, 0x40, 0xc7, 0x99, 0x13, 0xc4, 0x33, 0xac, 0x9d, 0x5d, 0xbe, 0xed, 0xdb, 0xdf, 0xc7, 0xd1, 0xd1, 0x21, 0x5f, 0x78, 0xe1, 0x2f, 0x25, 0x67, 0x45, 0x07, 0xc3, 0xac, 0xaf, 0x7f, 0x21, 0x79, 0x2a, 0xc3, 0xa1, 0xcc, 0xe8, 0x2e, 0x90, 0x0d, 0x76, 0x52, 0x33, 0xd2, 0xcb, 0x52, 0x22, 0x0a, 0x79, 0x5e, 0x36, 0xf6, 0xc9, 0x0a, 0xce, 0xb5, 0x6d, 0x1b, 0xdb, 0xb6, 0x25, 0x3a, 0x55, 0x9f, 0x4f, 0xea, 0xda, 0x6c, 0xa3, 0x8b, 0xba, 0x10, 0xd8, 0x3b, 0x43, 0x49, 0xfe, 0x2d, 0xf2, 0x9a, 0xb0, 0x5a, 0x9f, 0x35, 0xba, 0xf4, 0xde, 0x0f, 0xc3, 0x65, 0x23, 0x9d, 0xad, 0x84, 0x22, 0xa9, 0x8a, 0x9a, 0xa7, 0x14, 0xe1, 0xba, 0xae, 0x4c, 0x18, 0xcb, 0x13, 0x3a, 0x3d, 0x1f, 0xcf, 0x73, 0x30, 0x75, 0x83, 0x30, 0x8c, 0x98, 0x9d, 0x4c, 0xf0, 0xbb, 0x1d, 0xe5, 0x21, 0x24, 0xff, 0xd4, 0x5f, 0x17, 0x9a, 0xe4, 0x1a, 0x28, 0x08, 0x3b, 0x08, 0x02, 0xaa, 0x5c, 0x42, 0xc6, 0x51, 0x14, 0x71, 0x7c, 0x7c, 0xcc, 0xa3, 0xc3, 0x43, 0xc6, 0x97, 0x25, 0xeb, 0xda, 0x76, 0xcc, 0x26, 0x5b, 0x3b, 0xcc, 0x0a, 0x5c, 0xd3, 0xa2, 0x63, 0xbb, 0xa4, 0x5a, 0x1d, 0xce, 0x22, 0x84, 0x6c, 0xcc, 0x5c, 0x0d, 0xc3, 0xf6, 0xd0, 0xbb, 0xb2, 0x89, 0x3c, 0x7a, 0x78, 0xc0, 0x6c, 0x31, 0x65, 0xb6, 0x98, 0x62, 0x7b, 0x06, 0x96, 0x6b, 0xe3, 0xba, 0x72, 0x0f, 0x2c, 0xf2, 0xba, 0xd8, 0xad, 0x56, 0x04, 0x51, 0xd8, 0x0c, 0x30, 0x65, 0xad, 0x5a, 0x8a, 0xd3, 0x84, 0xae, 0xdf, 0xa9, 0xcd, 0x68, 0xaa, 0x35, 0x5b, 0x5b, 0xdd, 0x94, 0x05, 0x2d, 0x5a, 0x05, 0x44, 0xf1, 0xaa, 0x09, 0x56, 0x29, 0x8a, 0x82, 0x7b, 0xf7, 0xee, 0x51, 0x96, 0xd2, 0xb3, 0xfd, 0xfc, 0x85, 0x2b, 0x4d, 0xbd, 0xe9, 0xf7, 0xfb, 0x6b, 0x64, 0xdd, 0x3c, 0xcf, 0x09, 0xe7, 0x73, 0xa6, 0x8b, 0x29, 0xc2, 0x32, 0xd0, 0x4c, 0x03, 0xa1, 0x69, 0xf5, 0x1a, 0x45, 0xe6, 0x6c, 0x74, 0x7d, 0x1f, 0x53, 0xd7, 0xc9, 0xb3, 0x0c, 0x5d, 0x33, 0x10, 0xba, 0x86, 0x8b, 0xcd, 0x78, 0xbc, 0x43, 0xa7, 0xe7, 0x13, 0x57, 0x2b, 0xba, 0x5d, 0x5f, 0xa2, 0x57, 0x5a, 0x45, 0x9c, 0x65, 0x64, 0x59, 0x42, 0xb4, 0x8c, 0x09, 0x83, 0x00, 0xd7, 0xf1, 0xf1, 0x0d, 0x9d, 0x4e, 0xa7, 0x23, 0x79, 0x06, 0x45, 0x8a, 0xe3, 0x58, 0x18, 0x86, 0x46, 0x9a, 0xc5, 0x9c, 0x3b, 0x77, 0x4e, 0xba, 0xb7, 0x59, 0xf5, 0x3a, 0xb3, 0x0e, 0xb0, 0xb2, 0x4c, 0x93, 0x6e, 0xd7, 0xa7, 0x3b, 0x7a, 0x1b, 0x9a, 0x86, 0x44, 0x42, 0x8e, 0x75, 0xf2, 0xbc, 0x4e, 0x7d, 0x33, 0x24, 0x7a, 0xac, 0x08, 0x80, 0x61, 0x9d, 0x83, 0x6e, 0x6a, 0xb2, 0xf9, 0x0b, 0x16, 0x4b, 0x92, 0x24, 0x69, 0x7c, 0xdb, 0xcb, 0x12, 0x9e, 0x78, 0xe2, 0x8a, 0x54, 0x66, 0x64, 0x92, 0x11, 0x1f, 0x45, 0x11, 0x57, 0xae, 0x5c, 0xe1, 0x95, 0x57, 0x5e, 0xe1, 0xc5, 0x17, 0x5f, 0xa3, 0x28, 0x60, 0x3c, 0xf6, 0x31, 0xda, 0x1a, 0xed, 0x33, 0x69, 0x4a, 0x1b, 0xa9, 0x66, 0x9b, 0x85, 0xcd, 0x68, 0xc9, 0xa3, 0x54, 0x01, 0x56, 0xd2, 0x0e, 0x75, 0x00, 0xab, 0x37, 0x51, 0x25, 0x15, 0xa9, 0x29, 0x5c, 0xfe, 0xbe, 0x7c, 0x4d, 0xd6, 0xb1, 0x29, 0x6f, 0x6b, 0xef, 0x43, 0xda, 0x93, 0x6e, 0xf3, 0x7d, 0x65, 0xbe, 0x75, 0x32, 0x6f, 0x17, 0xf4, 0xc7, 0xfd, 0x9b, 0x82, 0xa4, 0x36, 0x93, 0xda, 0xda, 0xd3, 0xb8, 0x82, 0x76, 0xb6, 0xed, 0xef, 0x37, 0x0d, 0x6b, 0xda, 0x53, 0x64, 0x1b, 0x55, 0x78, 0x5c, 0x62, 0x58, 0x55, 0x87, 0x9e, 0x6c, 0xfe, 0x7e, 0x35, 0xf9, 0xb6, 0xa3, 0x66, 0x1f, 0x27, 0xb7, 0x4b, 0xd2, 0xd3, 0x46, 0xa1, 0x2d, 0x59, 0x6b, 0x3f, 0x17, 0x75, 0x10, 0xb5, 0xb9, 0x0e, 0x0d, 0xe4, 0xfe, 0x26, 0xb5, 0xb0, 0x6d, 0x8c, 0xd3, 0x6e, 0x76, 0xd4, 0x7d, 0xe8, 0x65, 0x5b, 0x3f, 0x5e, 0xbf, 0x0e, 0xc6, 0xba, 0x22, 0xe1, 0x8d, 0x26, 0xf4, 0xb2, 0x58, 0xf7, 0xd6, 0x6f, 0xbf, 0x4e, 0x9b, 0x4d, 0xce, 0xd6, 0x54, 0x36, 0x21, 0xd6, 0x58, 0xee, 0x6f, 0xb5, 0xa8, 0x7f, 0x39, 0x3a, 0x24, 0x31, 0x87, 0x58, 0x1d, 0xf9, 0xfe, 0x1a, 0x77, 0x5e, 0xc6, 0xf8, 0xf8, 0xa7, 0xb7, 0x32, 0xe4, 0xb7, 0xe9, 0xd9, 0x07, 0xd7, 0xaf, 0x31, 0x0b, 0x26, 0x7c, 0xe7, 0xdf, 0x78, 0x86, 0x8f, 0x7e, 0xf4, 0x0f, 0xe8, 0xec, 0xbf, 0x83, 0xf3, 0x9d, 0x19, 0x17, 0xfb, 0x0e, 0x9f, 0x7b, 0x79, 0xdd, 0xf3, 0x3d, 0xcf, 0xd6, 0x27, 0xf4, 0x69, 0x66, 0x70, 0xb1, 0xef, 0xf0, 0xe8, 0x91, 0x2c, 0xee, 0xfd, 0x32, 0x40, 0xdc, 0x96, 0x3f, 0xd3, 0xff, 0x9a, 0x6b, 0x44, 0xbb, 0xd7, 0x08, 0xc3, 0x25, 0xfa, 0xc0, 0x45, 0xab, 0x27, 0xf3, 0xaa, 0xd4, 0xb8, 0xf7, 0x95, 0x5f, 0xe5, 0xf9, 0x67, 0xff, 0x06, 0xf8, 0xdb, 0xe1, 0xe8, 0x76, 0x31, 0xff, 0x37, 0xf7, 0x5e, 0x42, 0x37, 0x0c, 0x1c, 0xd7, 0x42, 0xd7, 0x33, 0x20, 0x45, 0xd3, 0xb6, 0x37, 0x6f, 0x17, 0xae, 0xef, 0xf0, 0xb7, 0x87, 0x3f, 0xc0, 0x6a, 0x7a, 0xb4, 0x26, 0x79, 0x03, 0xe8, 0x74, 0x0c, 0xbc, 0x8e, 0x4e, 0x91, 0x97, 0x24, 0x89, 0x46, 0x91, 0x49, 0x81, 0xbc, 0x2e, 0x2a, 0x4c, 0xcd, 0xc0, 0x71, 0x95, 0x24, 0x32, 0x23, 0x49, 0x72, 0xd2, 0x2c, 0xe1, 0xe0, 0x10, 0x34, 0xe3, 0x46, 0x53, 0x90, 0xd3, 0x78, 0xd6, 0x14, 0x76, 0xcb, 0x19, 0x60, 0x31, 0x67, 0x19, 0xc0, 0x17, 0x5f, 0x78, 0x89, 0x9b, 0x37, 0x6f, 0x62, 0x9a, 0x3a, 0xa6, 0x01, 0x61, 0xb0, 0xac, 0x9b, 0xe8, 0x92, 0x77, 0xbc, 0xf3, 0x39, 0x6e, 0xde, 0xbc, 0xb9, 0xe6, 0x06, 0xb7, 0xb9, 0x77, 0xff, 0xc2, 0x5f, 0xfd, 0x55, 0xd3, 0x20, 0x35, 0x76, 0xd2, 0x75, 0xe1, 0x4e, 0x0b, 0x39, 0x80, 0xa8, 0x1d, 0xb4, 0x02, 0xa2, 0x8a, 0xfa, 0x33, 0xa4, 0xeb, 0x3a, 0x26, 0x15, 0x45, 0x9a, 0x35, 0x6b, 0x9d, 0x36, 0x32, 0xa8, 0xae, 0xf3, 0x3c, 0xce, 0xd6, 0x3e, 0x77, 0x9b, 0x8d, 0x36, 0x65, 0xd1, 0x40, 0xee, 0xab, 0x95, 0x0c, 0x43, 0xb1, 0x6d, 0x1b, 0xab, 0x9e, 0xe0, 0x86, 0xe3, 0x61, 0xe3, 0xba, 0x56, 0x54, 0xa5, 0x0c, 0x58, 0xb2, 0xad, 0x53, 0x84, 0x13, 0xb9, 0xaf, 0x2f, 0x13, 0xd9, 0x60, 0x14, 0x45, 0x46, 0x29, 0x2a, 0xf2, 0x1a, 0xba, 0xdd, 0x4c, 0x8a, 0x34, 0x4c, 0x13, 0xab, 0x76, 0xdf, 0x2c, 0xcb, 0x92, 0x0b, 0x4f, 0x5f, 0x60, 0x39, 0x9f, 0xb3, 0x9c, 0x2f, 0xa8, 0xf2, 0xa2, 0x61, 0x92, 0xab, 0x08, 0x56, 0xca, 0x6a, 0x6d, 0xe8, 0x71, 0x2c, 0x8b, 0xac, 0x48, 0x48, 0xa2, 0x15, 0xf1, 0x32, 0xc4, 0xba, 0x32, 0xa4, 0x2a, 0x20, 0x49, 0x33, 0x69, 0x13, 0x9b, 0x15, 0xe8, 0x18, 0x78, 0x96, 0x8b, 0x65, 0x59, 0x9c, 0xbf, 0x28, 0xe3, 0x61, 0xa3, 0x55, 0x40, 0x5e, 0x66, 0x32, 0xf8, 0xc6, 0xac, 0x25, 0xc2, 0x86, 0x49, 0x2e, 0x2a, 0x0c, 0xdb, 0x62, 0x36, 0x9b, 0x71, 0xff, 0xfe, 0x09, 0x42, 0xc0, 0x68, 0x28, 0x7f, 0xff, 0x7c, 0xb9, 0x24, 0x8e, 0x24, 0x77, 0xc1, 0x76, 0x1d, 0xfa, 0xfd, 0xfe, 0x1a, 0xe2, 0x9b, 0x24, 0x09, 0xf3, 0x93, 0x93, 0x9a, 0x45, 0x2e, 0xa7, 0x4c, 0x15, 0x54, 0xa2, 0x78, 0x5c, 0xd3, 0xe9, 0x44, 0x7e, 0x16, 0x74, 0x1d, 0xdb, 0x96, 0x52, 0x40, 0x59, 0x6f, 0xc0, 0x75, 0x6d, 0xf4, 0x4a, 0x97, 0x01, 0x38, 0xa6, 0x8e, 0xed, 0xb9, 0x88, 0x7a, 0x08, 0x03, 0xb0, 0x2d, 0x8b, 0xf9, 0x62, 0x8a, 0xa1, 0xe9, 0x18, 0x86, 0x5c, 0xbd, 0x84, 0x41, 0xc8, 0x2a, 0xcb, 0xd0, 0x4c, 0x9d, 0x9d, 0xd1, 0x80, 0xa4, 0xf2, 0x28, 0xf2, 0x9c, 0x24, 0x5e, 0xe1, 0xda, 0xd2, 0xc8, 0x66, 0x34, 0xdc, 0x61, 0x15, 0x86, 0xa4, 0xb1, 0x34, 0xab, 0x29, 0xcb, 0x9c, 0xa2, 0x80, 0x34, 0x4c, 0xc8, 0x85, 0x44, 0x9d, 0x1d, 0xc7, 0x41, 0x33, 0x74, 0x7c, 0x5b, 0xae, 0x0e, 0x24, 0x14, 0xaf, 0x53, 0xa4, 0x19, 0x8b, 0xe5, 0x8c, 0x2c, 0x91, 0xeb, 0x67, 0xb7, 0xdf, 0xc5, 0xf7, 0x5d, 0x74, 0xcb, 0xac, 0xd3, 0x45, 0x6b, 0x3b, 0xf0, 0x4a, 0x9e, 0xf1, 0xd3, 0xc9, 0x94, 0xe9, 0x74, 0x4e, 0x55, 0xca, 0x68, 0x56, 0x4b, 0x07, 0xdf, 0xb7, 0xb0, 0x4d, 0x69, 0x1e, 0x13, 0xc7, 0x31, 0xe7, 0xcf, 0x9f, 0x6f, 0x4c, 0xd2, 0xa4, 0x2f, 0x81, 0x7c, 0xfd, 0x1f, 0x3c, 0x78, 0xd0, 0xa8, 0xa4, 0x3a, 0x1d, 0x8b, 0x30, 0x4c, 0x99, 0x4c, 0x42, 0xb9, 0x43, 0x6f, 0x6b, 0x97, 0xd5, 0x54, 0xda, 0xd6, 0x2f, 0xb7, 0xa5, 0x5d, 0x9b, 0x21, 0x2c, 0xea, 0x80, 0x57, 0xa4, 0x37, 0x35, 0x51, 0x29, 0xbf, 0xdf, 0x36, 0xd4, 0xdb, 0x0e, 0x5f, 0xc9, 0xb2, 0xac, 0x71, 0x7a, 0x53, 0x0f, 0xb2, 0x2d, 0xcb, 0x51, 0x17, 0xa2, 0xba, 0xbf, 0x4d, 0x1d, 0x77, 0x59, 0x96, 0x54, 0x45, 0xf6, 0x86, 0xe1, 0x18, 0xdb, 0xe4, 0x68, 0x0a, 0x1d, 0xd0, 0x75, 0x1d, 0xcf, 0x71, 0x1b, 0x0d, 0xe9, 0x66, 0x00, 0x4b, 0xdb, 0x69, 0xad, 0xda, 0x70, 0xa4, 0x53, 0x4d, 0x8a, 0x63, 0x3a, 0x18, 0xba, 0x79, 0x0a, 0x43, 0x53, 0x6b, 0x86, 0x35, 0x69, 0xb0, 0x22, 0xef, 0x57, 0x9a, 0x8b, 0x54, 0x55, 0xdd, 0x61, 0x97, 0x2d, 0x3f, 0x72, 0xad, 0x78, 0x8c, 0x43, 0x9f, 0x58, 0xe3, 0x00, 0x6c, 0x06, 0x7d, 0x9c, 0x86, 0xb3, 0x98, 0x5b, 0x25, 0x7d, 0xf2, 0x35, 0x33, 0x5b, 0x4d, 0x85, 0xba, 0x30, 0xd7, 0x1b, 0x1a, 0xc1, 0x5b, 0x8b, 0x0e, 0x6d, 0x17, 0xd1, 0x36, 0x34, 0xb4, 0x35, 0xbc, 0x65, 0x83, 0xef, 0xf0, 0x66, 0x13, 0xfa, 0x36, 0xfb, 0xdc, 0xf6, 0x6b, 0xb0, 0x79, 0x88, 0xb6, 0xaf, 0x85, 0xbc, 0x2a, 0xdf, 0x74, 0x6d, 0xb0, 0xad, 0xa8, 0x7f, 0xea, 0x2f, 0x5f, 0xe5, 0x9d, 0x5f, 0xf7, 0xf4, 0xe9, 0xeb, 0x50, 0x17, 0xd4, 0x71, 0x0d, 0x8f, 0xb7, 0x77, 0xd3, 0xaa, 0x09, 0xd8, 0x76, 0xbb, 0x75, 0xf3, 0x75, 0xba, 0x1d, 0x8b, 0xa7, 0xf6, 0x72, 0x86, 0xa6, 0xc3, 0xe7, 0x5e, 0xbe, 0x73, 0xe6, 0x7b, 0xa2, 0x70, 0x0e, 0x5c, 0x6c, 0xfe, 0xff, 0xf8, 0xf0, 0x11, 0xc3, 0x67, 0x9f, 0x05, 0xee, 0x70, 0x7f, 0x1e, 0x73, 0xd5, 0xb3, 0xf9, 0x37, 0xf7, 0x5e, 0xe2, 0x7b, 0x02, 0x5d, 0xda, 0xb2, 0x7e, 0x2f, 0x14, 0x59, 0x49, 0x55, 0x0a, 0x8a, 0x42, 0xa9, 0x16, 0x0a, 0x7e, 0xf0, 0xef, 0x7e, 0x3f, 0x87, 0x7f, 0xf5, 0x12, 0x00, 0x7b, 0xad, 0xa2, 0xae, 0xbe, 0x6e, 0xff, 0xdd, 0x1f, 0xfc, 0xbf, 0xff, 0x37, 0xe3, 0x73, 0x4f, 0x60, 0x9a, 0x25, 0x9a, 0x16, 0xd7, 0x53, 0x4b, 0xb8, 0xe6, 0x24, 0xb7, 0x6e, 0x40, 0x03, 0x70, 0xb6, 0x51, 0x88, 0xa2, 0x39, 0x65, 0x55, 0x93, 0xc1, 0xaa, 0x0a, 0xd3, 0x74, 0xb0, 0x4d, 0x0b, 0xd3, 0x94, 0xcd, 0x63, 0x99, 0x56, 0xe4, 0xc5, 0xa9, 0xf9, 0x48, 0x96, 0x65, 0x7c, 0xe3, 0xb7, 0xfe, 0xc3, 0x06, 0x6e, 0xb7, 0x98, 0x63, 0xb5, 0xa6, 0x74, 0x15, 0x79, 0x6a, 0x31, 0x67, 0xb4, 0x33, 0xe6, 0xb7, 0xfe, 0xcf, 0x5f, 0x66, 0x38, 0xb4, 0x71, 0x5d, 0x8b, 0xe1, 0xd0, 0x97, 0x53, 0x57, 0xb4, 0x60, 0x77, 0x77, 0x8f, 0xfd, 0xfd, 0x3d, 0x96, 0xaf, 0xde, 0x5b, 0x33, 0x96, 0x51, 0xb7, 0x07, 0x77, 0x6e, 0xf0, 0xa0, 0x7e, 0xa9, 0xaf, 0x3d, 0x73, 0x09, 0xdb, 0x31, 0x71, 0x3d, 0x9b, 0xbc, 0x90, 0x4a, 0x8a, 0x02, 0xe9, 0x56, 0x78, 0xef, 0xde, 0x1d, 0x79, 0xad, 0x18, 0x7a, 0x43, 0x8a, 0x5b, 0x0b, 0x7d, 0x2a, 0x4b, 0x56, 0x35, 0xdc, 0xab, 0xce, 0xae, 0xa4, 0x76, 0x82, 0x2b, 0x8b, 0x82, 0x64, 0x15, 0x9f, 0x49, 0x6a, 0x54, 0x19, 0xd5, 0xb6, 0x6d, 0x73, 0x3c, 0x79, 0x24, 0xe3, 0x52, 0x6b, 0xde, 0x50, 0x29, 0xe4, 0xd9, 0xb4, 0x4a, 0x62, 0x69, 0x30, 0x23, 0x4a, 0x69, 0x48, 0xe2, 0x3b, 0xac, 0x12, 0x19, 0x1c, 0x53, 0xc4, 0x6a, 0x98, 0xb1, 0x1a, 0x97, 0x36, 0xcb, 0x31, 0x71, 0x3b, 0x2e, 0x25, 0x05, 0xf3, 0x60, 0x21, 0xf7, 0xf8, 0x95, 0x2c, 0xd0, 0x95, 0x26, 0xcf, 0x91, 0x78, 0xb5, 0xa2, 0x8a, 0x22, 0x34, 0x4d, 0x97, 0x4e, 0x70, 0x71, 0xcc, 0x6b, 0x2f, 0xbf, 0xa6, 0xd8, 0x3b, 0x3c, 0x71, 0xf9, 0x0a, 0x86, 0x61, 0xd0, 0x75, 0x6c, 0x74, 0x53, 0x4e, 0xb4, 0x85, 0x51, 0x4b, 0x8c, 0xcb, 0x14, 0xb3, 0x4e, 0xbe, 0xf4, 0x74, 0x8b, 0xb0, 0x58, 0x10, 0xae, 0x02, 0x92, 0x70, 0x85, 0xa1, 0x69, 0xe8, 0x18, 0x98, 0xb6, 0x85, 0x69, 0xeb, 0x74, 0x9c, 0x0e, 0xc3, 0x7e, 0x9f, 0x5e, 0xa7, 0xcf, 0xed, 0x57, 0x6f, 0xe2, 0x77, 0x5c, 0x46, 0xe3, 0x21, 0x50, 0x12, 0xae, 0x42, 0xe9, 0x3f, 0x1f, 0x46, 0xa4, 0x2b, 0x0d, 0xad, 0x23, 0x9f, 0x83, 0x4c, 0x1f, 0x0b, 0xd1, 0x2a, 0x1a, 0x1d, 0x7b, 0xbe, 0xc8, 0x9b, 0xb3, 0x48, 0xd9, 0xe2, 0x36, 0xc1, 0x36, 0x69, 0x82, 0x61, 0x18, 0x8c, 0x77, 0x77, 0x1b, 0x49, 0xb4, 0x69, 0xca, 0x69, 0xdf, 0xab, 0xe3, 0x5b, 0xd3, 0x34, 0x25, 0xcd, 0x8a, 0x33, 0xf6, 0xdb, 0x2a, 0x5b, 0x5e, 0x65, 0x1c, 0x98, 0x96, 0x8e, 0x66, 0x99, 0x40, 0x49, 0x96, 0x67, 0x2d, 0x34, 0xb8, 0xac, 0x51, 0x98, 0x8a, 0x2a, 0xaf, 0x1b, 0x23, 0x21, 0x30, 0x75, 0x8d, 0xaa, 0x46, 0x51, 0x3d, 0xdf, 0x63, 0x59, 0x07, 0xca, 0x40, 0x29, 0x49, 0xc4, 0x1d, 0xad, 0x95, 0x30, 0x67, 0x70, 0x32, 0x9d, 0x62, 0xd8, 0x06, 0x71, 0x9a, 0xe1, 0xf5, 0x1d, 0x1c, 0xcf, 0xc4, 0x74, 0x6c, 0xd0, 0x2a, 0x56, 0x81, 0x6c, 0x58, 0x4c, 0xc3, 0x40, 0xd7, 0x05, 0xba, 0x25, 0xe8, 0xf7, 0xfb, 0xd2, 0xbd, 0x41, 0xd7, 0x89, 0x4b, 0x89, 0xdc, 0xa0, 0x6b, 0xf5, 0xba, 0x46, 0x10, 0x44, 0x21, 0x49, 0x5d, 0xf0, 0x75, 0x5d, 0x67, 0x34, 0x1a, 0x32, 0xa8, 0x27, 0x6e, 0xd5, 0x60, 0xc6, 0x91, 0x34, 0x20, 0x0a, 0x82, 0x80, 0xfd, 0xfd, 0xfd, 0x26, 0xc2, 0x55, 0xd5, 0x63, 0x4d, 0xd3, 0xe8, 0xf5, 0x7a, 0x2c, 0x96, 0x2b, 0x6c, 0xdb, 0x66, 0x7f, 0x7f, 0xbf, 0xe1, 0xb1, 0x19, 0xdb, 0x8c, 0x0f, 0xd4, 0xc5, 0xbb, 0x8d, 0xe1, 0xde, 0xde, 0xa5, 0x16, 0xf5, 0x94, 0xab, 0x7e, 0x76, 0x33, 0x77, 0x5b, 0x69, 0x3f, 0x95, 0x65, 0xa2, 0x7a, 0x63, 0x15, 0x6c, 0xa2, 0xb5, 0x0a, 0xa7, 0x9a, 0xc6, 0x95, 0x57, 0xb1, 0xda, 0xdf, 0x2a, 0x6f, 0xe0, 0xcd, 0x09, 0x51, 0x91, 0xa2, 0xda, 0x1d, 0xf4, 0x59, 0x27, 0xb1, 0x72, 0xc3, 0x2e, 0x93, 0x35, 0xc6, 0xb6, 0x22, 0xea, 0xa9, 0xc6, 0xa4, 0x4d, 0x06, 0x54, 0x6c, 0xd9, 0x36, 0x44, 0xbf, 0xb6, 0x7f, 0x2f, 0x0a, 0x74, 0xb1, 0x6e, 0xe4, 0xd2, 0x9e, 0xa6, 0x37, 0x35, 0xe1, 0x9b, 0x8f, 0xa1, 0xaa, 0x2a, 0x92, 0x3c, 0xd9, 0x80, 0xec, 0xcf, 0xee, 0x92, 0x37, 0x8b, 0xe3, 0xfa, 0xf7, 0xae, 0x47, 0xb3, 0xaa, 0x66, 0x4c, 0xe9, 0xf2, 0x15, 0x44, 0xa3, 0x74, 0xf9, 0xaa, 0x41, 0x52, 0xff, 0x9e, 0xf1, 0xc6, 0x84, 0xb2, 0x76, 0x43, 0xd3, 0xe6, 0x0b, 0x34, 0xd0, 0xa3, 0x96, 0xb5, 0x1e, 0xdb, 0xba, 0xf3, 0x9b, 0x7a, 0xdf, 0xde, 0x68, 0x42, 0xb7, 0x6d, 0x6b, 0xed, 0x7a, 0x6a, 0xe7, 0xde, 0x6f, 0xaa, 0x16, 0x36, 0x57, 0x12, 0x2a, 0xa5, 0x48, 0x37, 0xf4, 0x53, 0x7f, 0xf3, 0xb7, 0x7a, 0x53, 0xcd, 0x51, 0x1d, 0x0b, 0xf6, 0xc5, 0x93, 0x13, 0x3e, 0xe0, 0x7a, 0x32, 0x43, 0xbc, 0x2e, 0xec, 0xdb, 0x08, 0x67, 0x8d, 0xdb, 0xd9, 0x6e, 0x7f, 0xcd, 0xae, 0x75, 0x68, 0xe6, 0x4c, 0xb3, 0xed, 0xcd, 0x91, 0x24, 0x8c, 0xb1, 0x55, 0xd7, 0x1e, 0x05, 0x01, 0xf3, 0xd1, 0x3b, 0xf8, 0xc7, 0xdf, 0xfb, 0x77, 0x09, 0x7e, 0xe3, 0x0f, 0x38, 0x5a, 0x45, 0x14, 0x9f, 0xbb, 0x51, 0x17, 0x71, 0x81, 0x21, 0x0c, 0xca, 0xaa, 0x64, 0x76, 0xe7, 0xb7, 0x78, 0xd7, 0x77, 0xfe, 0x18, 0xbf, 0xab, 0xc8, 0x79, 0x55, 0xc6, 0x07, 0xa2, 0x84, 0x3d, 0xbf, 0xc3, 0x61, 0x18, 0xac, 0x15, 0xf3, 0x17, 0x86, 0x5d, 0x1c, 0xb7, 0xc3, 0xfe, 0xa5, 0x67, 0xb0, 0x5d, 0x9d, 0xa2, 0x8c, 0xc8, 0xf3, 0x94, 0x38, 0x5d, 0xf2, 0x95, 0x4f, 0xdd, 0xe2, 0x1b, 0x7f, 0xf0, 0xdd, 0x8f, 0x7d, 0x5e, 0x2a, 0xdc, 0x05, 0xe0, 0xd3, 0x2f, 0x9e, 0xc2, 0xd2, 0xea, 0x40, 0x34, 0x0b, 0x13, 0x8a, 0x92, 0x24, 0x06, 0x8a, 0x0c, 0xd7, 0xb3, 0x9a, 0xcf, 0x9e, 0x72, 0x62, 0x7b, 0xdc, 0xee, 0x7c, 0xd3, 0xf5, 0x6d, 0x67, 0xc7, 0xc1, 0xb6, 0x75, 0xce, 0xed, 0xb9, 0x38, 0x8e, 0xde, 0x90, 0x68, 0xe3, 0xd5, 0x8a, 0x6b, 0xcf, 0xbc, 0x9d, 0x1f, 0xfb, 0x91, 0x31, 0x7f, 0xf6, 0xf9, 0xbf, 0xe4, 0x13, 0x1f, 0xff, 0xe3, 0x35, 0x9b, 0x58, 0x35, 0xed, 0x2b, 0x08, 0x3f, 0x4c, 0x65, 0xf2, 0x59, 0x6c, 0x4b, 0x09, 0xad, 0x22, 0xd8, 0x16, 0x45, 0x41, 0x56, 0x5f, 0xf3, 0xe8, 0xd2, 0x6b, 0xdb, 0xb5, 0xcc, 0xe6, 0xbc, 0xca, 0x8a, 0x82, 0x4a, 0x3f, 0x6d, 0xf0, 0x55, 0x71, 0x6d, 0xbb, 0x4c, 0xf6, 0xbd, 0x5e, 0x73, 0xed, 0xb7, 0xdd, 0x17, 0xd5, 0x67, 0x5b, 0xdd, 0x57, 0x14, 0x45, 0x12, 0x06, 0xae, 0xe4, 0x59, 0x56, 0x54, 0xb2, 0x90, 0xe6, 0x49, 0xce, 0x85, 0x0b, 0x17, 0xb8, 0x72, 0xe5, 0x0a, 0x79, 0x59, 0xd4, 0xc6, 0x29, 0xb3, 0x66, 0xca, 0xdb, 0xe9, 0x0e, 0x38, 0x3c, 0x3c, 0xe4, 0xe1, 0xc3, 0x63, 0x2c, 0xd7, 0xa2, 0xd3, 0xf3, 0x31, 0x0d, 0xe9, 0x4c, 0x87, 0x28, 0x59, 0xc5, 0x31, 0x86, 0x6d, 0x9d, 0x06, 0xbc, 0x18, 0x72, 0xda, 0xb5, 0xea, 0xb3, 0xe4, 0xe9, 0x0b, 0x4f, 0x90, 0x25, 0x09, 0xb3, 0x93, 0x69, 0x3d, 0xd1, 0x4e, 0x29, 0x85, 0x84, 0xc2, 0x35, 0xc3, 0x20, 0xab, 0xf2, 0x35, 0x07, 0xc9, 0xc5, 0x62, 0x41, 0x15, 0x67, 0x90, 0x17, 0x58, 0xa6, 0x49, 0xa6, 0x69, 0xe8, 0xa6, 0x8d, 0x25, 0x74, 0xc8, 0x0b, 0xd2, 0x55, 0xca, 0x34, 0x99, 0x91, 0xac, 0x56, 0xcc, 0xdd, 0x39, 0x65, 0x95, 0x13, 0x04, 0xb2, 0xb0, 0x58, 0x96, 0x81, 0x69, 0x1a, 0x0c, 0x7a, 0x7d, 0x8a, 0x4a, 0x9a, 0x07, 0x95, 0x8e, 0xb6, 0x36, 0xc8, 0xa9, 0xf5, 0xa1, 0xeb, 0xba, 0xec, 0xec, 0xec, 0x50, 0xc6, 0x12, 0xad, 0x9d, 0x4c, 0x4f, 0xa4, 0x57, 0x46, 0x51, 0xb0, 0xbf, 0xbf, 0x5f, 0x7f, 0xf6, 0x6d, 0x56, 0xcb, 0x55, 0x33, 0x20, 0x3d, 0x7a, 0xf4, 0x88, 0xe3, 0xe3, 0x29, 0x9e, 0x27, 0x57, 0x20, 0x72, 0xea, 0xb5, 0x9b, 0x73, 0x33, 0x4d, 0xd3, 0x35, 0x5f, 0x90, 0xaa, 0xaa, 0x58, 0x2c, 0x67, 0x78, 0xdd, 0x0e, 0xa6, 0xa9, 0x91, 0x67, 0x19, 0x69, 0xae, 0x7c, 0xe2, 0x4d, 0x5c, 0xc7, 0x46, 0x54, 0x3a, 0xc7, 0xc7, 0xc7, 0x52, 0x8d, 0xa0, 0x99, 0xf8, 0xbd, 0x2e, 0xb6, 0xe7, 0x53, 0x6a, 0x82, 0x2c, 0xcf, 0x89, 0x13, 0x79, 0x9d, 0x38, 0x8e, 0x83, 0xef, 0xfb, 0x2c, 0x26, 0xf3, 0xe6, 0xb9, 0x98, 0xa6, 0xc9, 0x74, 0x3a, 0xe7, 0xe4, 0xa4, 0x62, 0x30, 0xca, 0x10, 0x82, 0x46, 0xc1, 0x55, 0x96, 0xd2, 0x4d, 0x6e, 0x68, 0x0e, 0x18, 0x0e, 0x87, 0xb8, 0x8e, 0x25, 0xf3, 0xe1, 0xa3, 0xa9, 0x24, 0x4b, 0x7a, 0x3e, 0x8e, 0x63, 0x71, 0x7e, 0x3c, 0xe6, 0xf8, 0xf8, 0x90, 0x28, 0x89, 0x71, 0x74, 0x1d, 0xc7, 0xe9, 0x82, 0x26, 0x10, 0xb1, 0xac, 0x2b, 0x5d, 0xd7, 0xa3, 0x28, 0x0a, 0x7a, 0xdd, 0x2e, 0xb6, 0x6d, 0xd3, 0xef, 0x48, 0x87, 0xc2, 0x07, 0xf7, 0xee, 0x33, 0x9b, 0xcd, 0x30, 0x4d, 0xb3, 0x49, 0xbf, 0xf3, 0x7d, 0x1f, 0xdb, 0xb6, 0xb9, 0x79, 0xf3, 0xa6, 0x94, 0xd7, 0x26, 0x09, 0xe7, 0xf6, 0xaf, 0x34, 0x67, 0xb4, 0xd2, 0xdb, 0xeb, 0x5f, 0xf5, 0xf6, 0xf7, 0xff, 0x54, 0x5b, 0x73, 0xdd, 0x4e, 0x3d, 0x6b, 0x9b, 0xb4, 0x6c, 0x1a, 0xc8, 0x58, 0x75, 0xc6, 0xab, 0x8c, 0x94, 0xcb, 0xf1, 0x3c, 0x0f, 0xd7, 0x75, 0x9b, 0x8b, 0x4f, 0x9a, 0xdd, 0xe7, 0x6b, 0x93, 0x9d, 0xb2, 0x47, 0x54, 0xb2, 0x10, 0x0d, 0x1d, 0x51, 0x55, 0x54, 0x85, 0xa4, 0x84, 0x8b, 0xaa, 0x42, 0x43, 0x20, 0x2a, 0xc9, 0x1b, 0x37, 0x34, 0x9d, 0x22, 0xcb, 0x59, 0x85, 0x21, 0x51, 0x10, 0x10, 0x47, 0x11, 0x59, 0x92, 0x42, 0x29, 0xd9, 0x9d, 0x79, 0xb2, 0xa2, 0xcc, 0x73, 0x44, 0x55, 0x61, 0x68, 0x3a, 0x56, 0xcd, 0x6e, 0xac, 0x8a, 0x92, 0x3c, 0xcd, 0x24, 0xe4, 0x23, 0x34, 0x74, 0x21, 0xa4, 0xef, 0x7a, 0x5e, 0x60, 0x19, 0x26, 0x9e, 0xe3, 0x60, 0x9b, 0x26, 0x45, 0x8b, 0x3b, 0xd0, 0x4e, 0x80, 0x53, 0x8d, 0x84, 0x22, 0x3f, 0x6c, 0x42, 0xea, 0x4d, 0x82, 0x9b, 0xa1, 0x93, 0x97, 0x05, 0x79, 0x29, 0x3f, 0x6c, 0x96, 0x63, 0x63, 0xd4, 0x59, 0xe2, 0x68, 0x02, 0xcb, 0x75, 0x9a, 0xaf, 0x85, 0xa1, 0xa3, 0x5b, 0x26, 0x9a, 0x69, 0x80, 0xae, 0x35, 0x3e, 0xe5, 0x6d, 0xe3, 0x85, 0x76, 0x2a, 0x91, 0x2a, 0xa0, 0xea, 0xf5, 0x6f, 0x52, 0x85, 0xcc, 0xd3, 0xbd, 0x6a, 0xa1, 0x57, 0xe4, 0x75, 0x06, 0x32, 0x9a, 0x40, 0xb7, 0x4c, 0x74, 0xd3, 0x90, 0x5d, 0x7d, 0x55, 0xca, 0x8c, 0x64, 0xa4, 0x56, 0xdf, 0x74, 0x6c, 0x6c, 0xcf, 0xc5, 0x74, 0xec, 0xe6, 0x31, 0xe4, 0xb5, 0x31, 0x50, 0xa5, 0xd0, 0x89, 0xf6, 0xb4, 0x5b, 0x17, 0xd3, 0x4d, 0x39, 0x59, 0xbb, 0xb1, 0xc8, 0xcb, 0xbc, 0x31, 0xea, 0x90, 0xa1, 0x32, 0x60, 0x98, 0x1a, 0x86, 0x05, 0xa6, 0xa5, 0x49, 0xed, 0xb9, 0xa6, 0x2c, 0x60, 0x37, 0xc9, 0x6f, 0x3a, 0x45, 0xdd, 0x6d, 0xab, 0xc6, 0xaa, 0xbd, 0xea, 0xc9, 0x73, 0x69, 0x9a, 0xb0, 0xc9, 0xe9, 0x58, 0x63, 0xc7, 0x97, 0x25, 0x69, 0x1c, 0xf0, 0x75, 0x3d, 0xde, 0x54, 0x87, 0xde, 0xf6, 0x2e, 0xff, 0xcd, 0x87, 0x07, 0xec, 0x9e, 0x7f, 0x02, 0xd7, 0xeb, 0x91, 0xc4, 0x21, 0xbf, 0xf7, 0xe9, 0x4f, 0xf2, 0x83, 0x17, 0xf7, 0x11, 0xb6, 0x03, 0x35, 0x69, 0xc9, 0x2b, 0xcb, 0x26, 0x53, 0xdc, 0xd3, 0x04, 0x9e, 0x26, 0x58, 0x55, 0x95, 0x84, 0xdb, 0x7d, 0xc9, 0x48, 0x7f, 0xfd, 0xf6, 0x5d, 0x7a, 0x1d, 0x8f, 0xd1, 0x85, 0xcb, 0xdc, 0xbb, 0x73, 0x9b, 0x24, 0x5d, 0x87, 0xd7, 0x87, 0xc3, 0x21, 0xaf, 0xbe, 0xfe, 0x90, 0x67, 0x9e, 0xd8, 0x6f, 0xf2, 0xd6, 0x93, 0x34, 0xe3, 0x42, 0xcf, 0x22, 0xae, 0x34, 0x26, 0x27, 0x33, 0x76, 0xcc, 0x02, 0x27, 0xcb, 0xa9, 0x74, 0x1b, 0xed, 0x64, 0x4a, 0x35, 0xda, 0xe1, 0x73, 0x33, 0x13, 0xcf, 0x1e, 0x62, 0xe8, 0x16, 0x54, 0xf0, 0x1d, 0xdf, 0xf6, 0xb5, 0xbc, 0xe7, 0xab, 0xc7, 0x3c, 0xff, 0x8e, 0xe7, 0xb8, 0xf8, 0xc4, 0x75, 0x7c, 0x4b, 0xe3, 0xcf, 0x26, 0x33, 0x5e, 0xa0, 0xa4, 0x73, 0x6e, 0x8f, 0x73, 0x71, 0xca, 0x61, 0x18, 0xe0, 0x5b, 0x16, 0x3f, 0x75, 0xef, 0x26, 0xc7, 0xc7, 0x53, 0x2e, 0x5d, 0xd9, 0x47, 0xab, 0xa6, 0x24, 0xf1, 0x11, 0xab, 0xf0, 0x80, 0x70, 0xf9, 0x88, 0xbf, 0xe9, 0x8d, 0xe9, 0x3e, 0x31, 0xc6, 0xe9, 0x6d, 0x8f, 0x9b, 0x75, 0x7a, 0x0e, 0xf1, 0x52, 0x3e, 0xff, 0xcb, 0xbb, 0x1a, 0x1f, 0xfe, 0xed, 0xdf, 0xc3, 0x37, 0x6d, 0x3c, 0xcb, 0xc5, 0xd6, 0x1d, 0x4c, 0xdd, 0xc1, 0x14, 0x0e, 0xa6, 0x66, 0xa3, 0x09, 0x93, 0x24, 0x3f, 0xc1, 0x34, 0x35, 0x0c, 0x43, 0x1e, 0x72, 0x4f, 0x3f, 0xf5, 0x7e, 0xa0, 0xe4, 0xab, 0xae, 0x5f, 0x23, 0x0a, 0x17, 0xa4, 0x69, 0x41, 0x4a, 0x1f, 0x9d, 0x04, 0x8c, 0x81, 0xfc, 0xaf, 0x42, 0x37, 0x5e, 0xfd, 0x34, 0x87, 0xc7, 0x33, 0xba, 0xbe, 0x20, 0xcb, 0x62, 0xe2, 0x38, 0xa1, 0x28, 0x4a, 0x2a, 0x0c, 0xbe, 0xe5, 0x7d, 0xdf, 0x43, 0x69, 0x0d, 0x78, 0xdb, 0xdb, 0xae, 0x73, 0xe7, 0xf5, 0xd7, 0x38, 0x38, 0x38, 0x5e, 0xdb, 0xc5, 0xa7, 0xb9, 0x2c, 0xec, 0x96, 0x21, 0x58, 0xce, 0x4f, 0x08, 0x97, 0xf7, 0xc8, 0xb3, 0x04, 0xa1, 0x69, 0xf8, 0x7e, 0x07, 0x34, 0x8d, 0x20, 0x08, 0xc9, 0x0b, 0x65, 0x7b, 0xaa, 0xd1, 0xe9, 0x74, 0xe9, 0x76, 0xba, 0x18, 0xba, 0x41, 0x91, 0x97, 0x94, 0x79, 0x81, 0x61, 0x09, 0x2c, 0xdb, 0xc0, 0x76, 0x4c, 0x34, 0xbd, 0x4e, 0x65, 0xcb, 0x53, 0x99, 0x74, 0x67, 0xea, 0x54, 0x45, 0x45, 0x51, 0xf3, 0x02, 0x84, 0x06, 0xae, 0x27, 0x0d, 0x6b, 0xa2, 0x55, 0xc8, 0xe1, 0xd1, 0x01, 0xf3, 0xd5, 0x31, 0xa6, 0x6b, 0xb1, 0x4a, 0x23, 0x4c, 0xc7, 0xc0, 0x71, 0x1d, 0x74, 0x43, 0xc6, 0x8a, 0x46, 0x51, 0x88, 0x6d, 0x5a, 0xdc, 0xbf, 0x7b, 0x8f, 0xd9, 0xc9, 0x14, 0xad, 0x82, 0xe5, 0x7c, 0xc1, 0x6c, 0x72, 0x22, 0x27, 0x59, 0xcb, 0x26, 0x09, 0x53, 0x0e, 0x8f, 0x8f, 0x70, 0x5d, 0x87, 0x5e, 0xbf, 0xc7, 0x32, 0x58, 0xca, 0xc3, 0xdf, 0x93, 0x06, 0x38, 0x31, 0x85, 0x24, 0x92, 0x51, 0x35, 0xeb, 0x29, 0x0d, 0x99, 0x56, 0xa8, 0x09, 0x8d, 0xb0, 0x88, 0x99, 0x2d, 0x66, 0xb8, 0xbe, 0x23, 0xf5, 0xd9, 0x86, 0x8e, 0xe7, 0x3a, 0xcc, 0xa7, 0x27, 0xa4, 0xab, 0x08, 0xdb, 0x37, 0x29, 0xf2, 0x94, 0x52, 0x2b, 0xd1, 0x2d, 0x5d, 0xfa, 0xdb, 0x8b, 0x02, 0xc3, 0x36, 0xf0, 0x87, 0x5d, 0x4a, 0x5d, 0x83, 0xaa, 0x44, 0xd7, 0x35, 0xb2, 0x3c, 0x43, 0xd7, 0x05, 0x8e, 0x63, 0x12, 0xae, 0x02, 0x16, 0xc1, 0x9c, 0xaa, 0xcc, 0xc9, 0xab, 0x8c, 0x38, 0x5b, 0x31, 0x1c, 0xf6, 0xb9, 0x7b, 0xef, 0x0e, 0x9e, 0xe7, 0x52, 0x95, 0xf2, 0x7c, 0xc7, 0xb7, 0x58, 0xa5, 0x49, 0xe3, 0xe8, 0x38, 0xe8, 0xf5, 0x25, 0xe2, 0x91, 0x17, 0x84, 0x41, 0xc8, 0x32, 0x8d, 0xb1, 0x5d, 0x07, 0xdb, 0x75, 0x25, 0xbb, 0x5b, 0xd3, 0x79, 0xf4, 0xe8, 0x11, 0x8f, 0x1e, 0x3e, 0x24, 0x4d, 0x52, 0x2c, 0xc7, 0xc6, 0xf1, 0x3c, 0x6c, 0xc7, 0xc5, 0xb2, 0x1d, 0xfa, 0xc3, 0x01, 0x86, 0x65, 0x11, 0xc5, 0x31, 0xba, 0x61, 0xf2, 0xfa, 0x9d, 0x23, 0x0c, 0xd3, 0xc3, 0x34, 0x1d, 0xc2, 0x55, 0xc2, 0x7c, 0xba, 0x24, 0x4b, 0x73, 0xca, 0xa2, 0x20, 0x0a, 0x23, 0xa6, 0xe1, 0x82, 0x55, 0x92, 0xd0, 0x19, 0xf6, 0xd1, 0x4c, 0xa3, 0x69, 0xa8, 0xc2, 0x20, 0x60, 0x19, 0x04, 0x58, 0xc2, 0x42, 0xa0, 0xe1, 0x39, 0xb2, 0x36, 0x19, 0xba, 0x4e, 0x51, 0x15, 0xb2, 0xd6, 0xe8, 0x82, 0x79, 0x16, 0x82, 0x26, 0x0d, 0x8e, 0x83, 0x30, 0x42, 0x08, 0x8d, 0xb8, 0x76, 0xa3, 0x2b, 0x4a, 0xc8, 0xcb, 0x1c, 0xaf, 0xa7, 0x63, 0x79, 0x36, 0xfd, 0x51, 0x8f, 0xca, 0x80, 0xa4, 0x48, 0xc8, 0x29, 0x70, 0xbb, 0x1e, 0xfb, 0x83, 0x11, 0x49, 0xb2, 0x62, 0x3a, 0x3b, 0xa1, 0xc8, 0x73, 0x5c, 0xcf, 0xc3, 0xd0, 0x75, 0x79, 0x1d, 0x76, 0xba, 0x75, 0x38, 0x8e, 0x87, 0xa6, 0x1b, 0x74, 0xfc, 0x0e, 0x79, 0x51, 0xa1, 0x09, 0x9d, 0x55, 0x10, 0x63, 0xea, 0x36, 0xc1, 0xf1, 0x82, 0xf9, 0x74, 0xc1, 0x62, 0xb6, 0x64, 0x31, 0x5b, 0x62, 0xdb, 0x2e, 0xa6, 0x69, 0x33, 0x39, 0x99, 0x91, 0xa6, 0x39, 0x3b, 0xc3, 0x11, 0xf7, 0xee, 0x3d, 0x40, 0xd4, 0x7c, 0x9a, 0xe3, 0xe3, 0x13, 0x84, 0xd0, 0xe9, 0x74, 0x7a, 0x98, 0xa6, 0xcd, 0x74, 0x7a, 0x82, 0x69, 0x1a, 0x24, 0x49, 0x8c, 0x10, 0x30, 0x18, 0xf4, 0x25, 0x29, 0x4e, 0x1d, 0x98, 0xed, 0x7d, 0xcb, 0xe6, 0x0e, 0xbd, 0xcd, 0xd8, 0x6e, 0x4f, 0x6b, 0x6d, 0xd9, 0x57, 0x1b, 0x8e, 0xde, 0x74, 0x5d, 0xdb, 0xdc, 0x3b, 0x4b, 0x98, 0xa5, 0x3d, 0x81, 0x96, 0x35, 0x59, 0xe5, 0x94, 0x8d, 0xaa, 0x08, 0x76, 0x6d, 0x48, 0x56, 0x25, 0x1e, 0xc9, 0xf0, 0x8a, 0xf2, 0xcc, 0x44, 0xdc, 0xfe, 0x9d, 0xae, 0xeb, 0xae, 0x11, 0xbb, 0xd4, 0x7e, 0x45, 0xfd, 0x57, 0x05, 0xc7, 0xab, 0xa9, 0xd3, 0x30, 0xa4, 0x6d, 0xa1, 0x32, 0xf0, 0x9f, 0xcd, 0x66, 0x6b, 0xbf, 0x7f, 0xd3, 0xeb, 0xbd, 0x12, 0xda, 0x5a, 0xc7, 0xb8, 0xc9, 0x66, 0xdf, 0xdc, 0x0f, 0x6f, 0xb2, 0xde, 0x37, 0xd9, 0xe9, 0x9b, 0xd6, 0xab, 0xed, 0xa9, 0xbe, 0xbd, 0x2e, 0x68, 0x08, 0x8b, 0x45, 0x79, 0x86, 0xb0, 0xd6, 0x9e, 0xe0, 0xdb, 0xc1, 0x37, 0x6a, 0x2d, 0x72, 0xea, 0x1d, 0xad, 0x9d, 0x61, 0x89, 0xb7, 0x7f, 0xdf, 0xe6, 0x54, 0xdc, 0x96, 0xd2, 0xad, 0xb3, 0xcf, 0x59, 0xfb, 0xfa, 0x71, 0xc9, 0x5c, 0x67, 0x82, 0x5c, 0xea, 0x26, 0xc0, 0x34, 0x8d, 0xc6, 0x71, 0x4d, 0x9a, 0xf0, 0x9c, 0x4e, 0xdb, 0x61, 0x18, 0x9c, 0xb1, 0x16, 0x6e, 0x23, 0x17, 0x79, 0x51, 0xb6, 0x9c, 0xea, 0xde, 0xda, 0xed, 0xd1, 0xa5, 0xf3, 0xb8, 0x2f, 0xde, 0xc4, 0xa8, 0x09, 0x8b, 0x4a, 0x56, 0xf8, 0xe8, 0xd2, 0x79, 0xce, 0xbd, 0xf8, 0xd2, 0x5b, 0x9f, 0xf2, 0x6b, 0x72, 0xdb, 0x78, 0x6f, 0x1f, 0x82, 0xc9, 0x63, 0xd3, 0xda, 0x36, 0xe3, 0x63, 0xcf, 0xec, 0xd1, 0x37, 0x6e, 0x5f, 0x3c, 0x39, 0x41, 0x13, 0xbb, 0x35, 0x82, 0x24, 0xef, 0xf3, 0x87, 0xbe, 0xff, 0xb9, 0x35, 0x78, 0xfc, 0xc9, 0xf7, 0xbc, 0x9b, 0x6f, 0xfc, 0xc1, 0x77, 0xf3, 0x95, 0x4f, 0xdc, 0xe2, 0x8f, 0xbf, 0xf0, 0x27, 0x7c, 0xb1, 0xf2, 0x78, 0xd7, 0xa5, 0xf3, 0x3c, 0xbc, 0xba, 0xc7, 0xa7, 0x7f, 0xe6, 0xa3, 0xec, 0xec, 0xee, 0x92, 0xe5, 0x2b, 0xca, 0x64, 0x4e, 0x51, 0xe4, 0x14, 0x65, 0x42, 0x9e, 0x4b, 0x82, 0xdf, 0xef, 0xff, 0xd1, 0x4b, 0x7c, 0xf7, 0x77, 0x5d, 0xdf, 0x0a, 0xbd, 0x6f, 0xde, 0x76, 0x76, 0x86, 0xf4, 0x7b, 0xb5, 0x4b, 0x64, 0x56, 0x36, 0xc9, 0x5e, 0x65, 0x59, 0x42, 0x55, 0xe0, 0xb9, 0xd2, 0xf9, 0x4b, 0x70, 0xea, 0x39, 0xf0, 0xf7, 0xbe, 0xf7, 0xef, 0x30, 0xdc, 0x7f, 0x86, 0x9b, 0xff, 0xdb, 0xbf, 0x68, 0x76, 0xdf, 0x0a, 0x66, 0x6f, 0xf6, 0xf6, 0x57, 0xae, 0xf1, 0x89, 0x3f, 0xfe, 0x1d, 0x06, 0x7d, 0x0b, 0xd7, 0x73, 0xf0, 0x3d, 0xb3, 0xf9, 0xdc, 0x27, 0x49, 0xc6, 0xa7, 0x3e, 0xf9, 0x49, 0xfe, 0xf4, 0xff, 0xfb, 0x0c, 0xdd, 0x8e, 0x45, 0x77, 0xe7, 0xea, 0x9a, 0x6f, 0xfb, 0x26, 0xc9, 0xae, 0xe3, 0x08, 0x4c, 0xd3, 0xc0, 0xb1, 0xa5, 0x2c, 0x29, 0x49, 0x12, 0x10, 0x32, 0xfb, 0x7b, 0xf3, 0xcc, 0x3a, 0x3e, 0x3e, 0x6e, 0xd6, 0x7e, 0x96, 0x65, 0x61, 0x68, 0xa7, 0x59, 0xda, 0xaa, 0x81, 0x77, 0x1c, 0x87, 0x28, 0x8a, 0xa4, 0xf3, 0x57, 0x75, 0xea, 0xdb, 0xa0, 0x50, 0xad, 0x6e, 0xb7, 0x4b, 0xb7, 0xdb, 0x65, 0x77, 0x77, 0x97, 0x59, 0x74, 0xdc, 0x78, 0x9e, 0xc7, 0x71, 0x4c, 0xa6, 0x15, 0xf5, 0xf7, 0x58, 0x8c, 0xc7, 0x63, 0xca, 0xb2, 0xe4, 0xe8, 0xe8, 0xa8, 0x09, 0x99, 0x0a, 0xc3, 0x10, 0xdf, 0xf7, 0x19, 0x0e, 0x87, 0xd2, 0x85, 0xd3, 0xe8, 0x48, 0x6e, 0x91, 0x23, 0xa7, 0xd2, 0x20, 0x08, 0x88, 0xb3, 0x1c, 0xd3, 0xb6, 0x18, 0x0c, 0x7a, 0x24, 0x5a, 0xbd, 0xda, 0x4c, 0x52, 0xa2, 0x48, 0x4e, 0xb3, 0x85, 0x53, 0x34, 0xfb, 0xe6, 0x47, 0x93, 0x43, 0x0c, 0x21, 0x93, 0xe3, 0x74, 0xdb, 0x45, 0xaf, 0xe4, 0xe0, 0xd4, 0xe9, 0x74, 0x30, 0x6c, 0x8b, 0x42, 0x2f, 0x9b, 0xcf, 0x53, 0xfb, 0xb3, 0x9b, 0x96, 0x39, 0x22, 0x8e, 0xa9, 0x1c, 0x0b, 0x53, 0x97, 0xa4, 0x3d, 0x43, 0x48, 0x53, 0x29, 0x45, 0xa4, 0x95, 0x92, 0x55, 0xd1, 0xa0, 0x16, 0x86, 0x61, 0xd0, 0xe9, 0x74, 0x1a, 0xdd, 0xb8, 0x6c, 0xc2, 0xe5, 0x90, 0x61, 0x68, 0x3a, 0x69, 0x21, 0xa5, 0x65, 0xd1, 0x32, 0xc0, 0x77, 0x3d, 0x19, 0x84, 0xe2, 0xbb, 0x68, 0x15, 0x8d, 0xcf, 0xbb, 0x6d, 0xdb, 0xb8, 0xbe, 0xd7, 0x3c, 0x96, 0x83, 0x47, 0x47, 0xc4, 0xab, 0xb4, 0x19, 0xf6, 0x1c, 0xc7, 0xc1, 0x32, 0x65, 0xc0, 0x4a, 0x1c, 0xc7, 0xec, 0xed, 0xed, 0xf1, 0xe0, 0xc1, 0x23, 0x96, 0x73, 0x18, 0x0c, 0xe0, 0xc2, 0xfe, 0x2e, 0x86, 0x21, 0x19, 0x81, 0x96, 0x25, 0x9d, 0x32, 0xcb, 0xaa, 0x62, 0xb9, 0x5c, 0xd6, 0x09, 0x72, 0x19, 0x7e, 0xed, 0x6c, 0xaa, 0xeb, 0x3a, 0x06, 0x06, 0x65, 0x5e, 0x90, 0xa6, 0x59, 0x43, 0xd4, 0x36, 0x5c, 0x9b, 0x38, 0x49, 0x98, 0x47, 0x01, 0x99, 0x96, 0x61, 0x1a, 0x06, 0x86, 0x6e, 0x60, 0xd8, 0x26, 0x9a, 0x21, 0xa8, 0x8a, 0x8a, 0x32, 0xcb, 0x29, 0xf3, 0x8a, 0x38, 0x8e, 0x64, 0x62, 0x62, 0x3d, 0xf4, 0xe9, 0xa6, 0x74, 0xcc, 0x2a, 0x85, 0xac, 0x37, 0x77, 0xef, 0xde, 0x6d, 0xea, 0x85, 0x6b, 0xcb, 0xc7, 0x53, 0x14, 0x85, 0x1c, 0x32, 0x6b, 0x2f, 0x5c, 0xd7, 0x75, 0x89, 0x33, 0xa9, 0xf6, 0x2a, 0xa9, 0xe8, 0x74, 0x3a, 0x75, 0xb0, 0xca, 0x09, 0xd7, 0xaf, 0x3e, 0x43, 0x10, 0x04, 0x44, 0x51, 0xc4, 0xe1, 0xe1, 0x21, 0xb7, 0x6f, 0xdf, 0x96, 0x5e, 0xf0, 0x59, 0xc6, 0x60, 0x30, 0xe0, 0xe8, 0xe8, 0xa8, 0xe1, 0x14, 0xdc, 0xbe, 0x7d, 0x9b, 0x93, 0x93, 0x88, 0x73, 0xe7, 0xfa, 0x38, 0x8e, 0x43, 0x9e, 0xe7, 0xf4, 0xfb, 0x7d, 0x5c, 0xd7, 0x25, 0x08, 0x02, 0x66, 0xb3, 0x99, 0x7c, 0x1f, 0x37, 0xcd, 0x4b, 0xda, 0xd0, 0xe7, 0x66, 0x16, 0x76, 0xbb, 0xd8, 0x6a, 0x9a, 0x46, 0x56, 0x13, 0xe0, 0xda, 0xc5, 0x7f, 0x3d, 0xdf, 0x5b, 0x9c, 0xd1, 0xb0, 0xb7, 0xf7, 0xdc, 0xed, 0x89, 0x6f, 0x1b, 0xe9, 0x4b, 0xfd, 0xfb, 0x66, 0x56, 0xb7, 0xd2, 0x36, 0x56, 0xad, 0xc7, 0xdd, 0x96, 0x4a, 0xa9, 0x22, 0xae, 0x88, 0x78, 0x9b, 0x9e, 0xee, 0xea, 0xcf, 0x60, 0x30, 0x58, 0x83, 0xaa, 0xcb, 0xb2, 0x24, 0xa8, 0x19, 0x87, 0x9b, 0x3e, 0xee, 0x6f, 0xb4, 0x07, 0x6e, 0x17, 0xe0, 0xf6, 0xe3, 0x68, 0xc3, 0xf5, 0xed, 0xd7, 0xe3, 0x54, 0x4a, 0x96, 0x9f, 0xf1, 0x40, 0x6f, 0x17, 0xf4, 0x36, 0x43, 0x7f, 0x9b, 0xb1, 0xcf, 0xe6, 0x7f, 0x37, 0xf7, 0xde, 0x6a, 0x07, 0xaf, 0x20, 0x37, 0x45, 0x58, 0x6c, 0x56, 0x0b, 0xa6, 0xf6, 0xd8, 0xe7, 0xf6, 0x38, 0x49, 0xd8, 0x1a, 0xf4, 0x6d, 0x69, 0xcd, 0xe4, 0x2d, 0x5a, 0xfe, 0xa4, 0x9b, 0x0d, 0xcd, 0xe3, 0xb4, 0xda, 0x7a, 0x4b, 0x86, 0xb8, 0xad, 0x70, 0xb7, 0x1b, 0xc7, 0x76, 0x63, 0xd3, 0x5c, 0x83, 0xa6, 0xc9, 0xbf, 0xcf, 0xed, 0xfc, 0x95, 0x67, 0xb1, 0x1c, 0x7f, 0xcd, 0x97, 0xfc, 0xe7, 0xbe, 0xf0, 0xa7, 0xfc, 0x53, 0x7b, 0xff, 0xcc, 0xf7, 0x6e, 0xee, 0xd5, 0xab, 0xab, 0x7b, 0x10, 0x25, 0xdc, 0x9f, 0xc7, 0x0d, 0xdc, 0xae, 0xbe, 0x7e, 0xab, 0xb7, 0x28, 0x0a, 0x18, 0xd6, 0xc1, 0x2f, 0xea, 0x67, 0x9f, 0xa8, 0x09, 0x78, 0x9f, 0x39, 0xf8, 0x32, 0xc2, 0x7d, 0x1f, 0xa2, 0x2a, 0x30, 0xf5, 0x8a, 0xb1, 0x7f, 0x1f, 0x78, 0xd7, 0xd6, 0xfb, 0x79, 0xee, 0xfd, 0x4f, 0xf2, 0xdc, 0xfb, 0x9f, 0x64, 0x76, 0x7f, 0xce, 0x57, 0x3e, 0x75, 0x8b, 0x3f, 0x7b, 0x38, 0xc7, 0xb4, 0x4c, 0xfc, 0xae, 0x4d, 0x14, 0x4d, 0xb0, 0xf5, 0x40, 0xee, 0xcf, 0xab, 0x94, 0x4a, 0xc8, 0xd7, 0x72, 0xfe, 0xf2, 0x2d, 0x7e, 0x1f, 0xf8, 0xa1, 0x0f, 0xbe, 0x77, 0xbb, 0xe4, 0xad, 0xc5, 0x72, 0x47, 0x28, 0x7f, 0xf0, 0x9c, 0xbc, 0x54, 0x08, 0x96, 0xfc, 0xbb, 0xbc, 0xca, 0x09, 0xe7, 0x52, 0xe5, 0x21, 0xd0, 0x19, 0xec, 0xfc, 0x4d, 0xbc, 0x4e, 0x87, 0x30, 0x8c, 0xe0, 0xd1, 0xab, 0xeb, 0xbc, 0x85, 0xda, 0x7f, 0x5d, 0x15, 0x62, 0xdf, 0x5a, 0xe1, 0x38, 0x06, 0xc3, 0x81, 0x8e, 0x6d, 0x49, 0xbf, 0x04, 0xf5, 0xd9, 0xcc, 0x0b, 0x8d, 0x57, 0x6e, 0x9d, 0x10, 0xc4, 0x15, 0x41, 0x9c, 0xf0, 0xf0, 0xf8, 0x15, 0x2c, 0x67, 0xb0, 0x16, 0xb5, 0xda, 0x86, 0xde, 0x2f, 0x5c, 0xb9, 0xc6, 0x74, 0xf2, 0x19, 0x4c, 0xcb, 0xa6, 0x28, 0x4b, 0xb2, 0x2c, 0x41, 0x33, 0x0d, 0x7c, 0xdf, 0x23, 0x8a, 0xe2, 0xa6, 0xf8, 0x08, 0x21, 0xe8, 0x74, 0x3a, 0xb8, 0xae, 0x4b, 0x51, 0x14, 0xd2, 0xcc, 0xc4, 0x76, 0x71, 0x34, 0x41, 0x29, 0xea, 0x95, 0xa1, 0xa1, 0x4b, 0xe4, 0xaa, 0x26, 0xba, 0x3d, 0xfb, 0xd4, 0xd5, 0x86, 0xd4, 0x16, 0xc7, 0x31, 0xd3, 0xc5, 0x9c, 0x45, 0xed, 0x6f, 0x5e, 0x14, 0x05, 0xfb, 0x17, 0x77, 0x1a, 0x04, 0xcd, 0x34, 0xec, 0x1a, 0x82, 0x97, 0x70, 0xf1, 0x62, 0xb1, 0x40, 0x08, 0x9d, 0x8b, 0x17, 0x65, 0x32, 0xd6, 0x7c, 0x3e, 0xaf, 0xb5, 0xee, 0x5a, 0x13, 0xbb, 0x9a, 0xe7, 0x39, 0x41, 0x14, 0x11, 0xc6, 0x21, 0x5e, 0xc7, 0x95, 0x9c, 0x10, 0x1d, 0xb2, 0x22, 0x27, 0x88, 0x42, 0xe2, 0x22, 0xc3, 0xb3, 0x9d, 0x26, 0x36, 0x34, 0x4f, 0x33, 0x29, 0x0f, 0x2d, 0x4a, 0xb2, 0x22, 0x61, 0x77, 0x6f, 0x0f, 0x51, 0x94, 0x58, 0x8e, 0x4d, 0x1e, 0xa7, 0xc4, 0x71, 0x42, 0x1a, 0xa6, 0xcd, 0x20, 0xb2, 0x7b, 0x79, 0x4f, 0x9e, 0x39, 0x6a, 0xe3, 0xa5, 0x09, 0x84, 0xae, 0x23, 0xea, 0x15, 0x55, 0x1c, 0xad, 0x30, 0xfd, 0x0e, 0xab, 0x30, 0xc2, 0x77, 0x5c, 0xb9, 0xef, 0x2e, 0xd2, 0xa6, 0x88, 0x98, 0x42, 0x43, 0xd3, 0x75, 0x96, 0xcb, 0x25, 0x0f, 0x0f, 0x0f, 0x58, 0x2c, 0x17, 0x8c, 0xe2, 0x91, 0x5c, 0x3b, 0x14, 0x05, 0x9e, 0xed, 0xc8, 0xfd, 0xee, 0x2a, 0xa6, 0xdb, 0xe9, 0x60, 0x8f, 0x46, 0x98, 0xba, 0xc1, 0x62, 0x3a, 0x23, 0x0c, 0x43, 0x7a, 0xa3, 0x61, 0xb3, 0x43, 0xae, 0x4a, 0x41, 0x56, 0x16, 0x64, 0x65, 0x41, 0x5c, 0x64, 0x24, 0xa5, 0x94, 0xe3, 0x19, 0x96, 0x3c, 0xa3, 0x97, 0xcb, 0x25, 0xd1, 0x6c, 0xde, 0x58, 0x66, 0x0f, 0x76, 0x46, 0x4c, 0x8e, 0x17, 0x0c, 0x06, 0x3d, 0xce, 0xed, 0x5a, 0x9c, 0x3b, 0xb7, 0x4b, 0xd7, 0xf7, 0x09, 0xc3, 0x80, 0x60, 0xb1, 0xa4, 0x28, 0xe4, 0x3e, 0x5e, 0x68, 0x1a, 0xc2, 0x32, 0x70, 0x3c, 0x97, 0x34, 0xcf, 0xa1, 0xce, 0x6e, 0x4f, 0x92, 0x04, 0xdd, 0xd6, 0x19, 0x0e, 0x87, 0xa4, 0x4e, 0xcc, 0xc3, 0x87, 0x0f, 0x79, 0xf0, 0xe0, 0x01, 0x9a, 0x6d, 0x32, 0x1a, 0x8f, 0x19, 0x0c, 0x07, 0x64, 0xd9, 0x94, 0xaa, 0x80, 0x3c, 0x4f, 0x11, 0x95, 0x86, 0x89, 0x81, 0x69, 0x58, 0xd8, 0x8e, 0x8b, 0xa1, 0xe9, 0xec, 0x8c, 0xfa, 0x24, 0x69, 0x4a, 0x98, 0x84, 0x05, 0x2d, 0x87, 0x0c, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x24, 0x59, 0x4c, 0x91, 0xca, 0x66, 0x4b, 0x68, 0xf2, 0x1c, 0x37, 0x6b, 0xc4, 0x55, 0x85, 0xd3, 0x54, 0x87, 0x65, 0xb3, 0x82, 0x70, 0x6d, 0x9b, 0x4a, 0xd7, 0xb8, 0x78, 0xf1, 0x62, 0xa3, 0xb4, 0x50, 0xbc, 0x32, 0x5d, 0xd7, 0x65, 0x1a, 0x5c, 0x0d, 0xab, 0x8f, 0xc7, 0x63, 0xba, 0xdd, 0x2e, 0xab, 0xd5, 0x8a, 0xe3, 0xe3, 0x63, 0xee, 0xdd, 0x5b, 0x22, 0xc4, 0x11, 0x9e, 0x4b, 0x43, 0xde, 0x96, 0xfb, 0x76, 0xbf, 0xe1, 0x22, 0xf8, 0xbe, 0x2f, 0xf7, 0xfb, 0x75, 0xa3, 0xe5, 0x79, 0x92, 0x00, 0x6a, 0xa8, 0x9d, 0x53, 0x7b, 0x9a, 0x6c, 0x4f, 0xb4, 0xed, 0x5c, 0xec, 0x76, 0x41, 0x3f, 0x8d, 0xff, 0x64, 0xed, 0xa0, 0xdd, 0x9c, 0xe2, 0xda, 0xfb, 0xd7, 0xf6, 0x24, 0xd9, 0x9e, 0x06, 0xb7, 0xc5, 0x7a, 0x6e, 0xb2, 0xcc, 0x37, 0xa7, 0xfc, 0xaa, 0xaa, 0xb0, 0x5a, 0xf0, 0xf3, 0xb6, 0xa8, 0x53, 0x85, 0x16, 0x6c, 0xcb, 0x7b, 0x6f, 0x17, 0xe0, 0x76, 0xe1, 0xc9, 0xf3, 0xbc, 0xe5, 0x1b, 0x6d, 0x9d, 0x41, 0x29, 0xd6, 0x5c, 0xcb, 0xc4, 0x59, 0x33, 0x98, 0xcd, 0x09, 0x78, 0x5b, 0x38, 0x4b, 0x23, 0xe1, 0xcb, 0xb3, 0xb5, 0x9f, 0x6d, 0x93, 0xc4, 0xda, 0xcf, 0xa3, 0xbd, 0xc3, 0x6f, 0x67, 0xa5, 0xab, 0xb4, 0xb4, 0x6d, 0xa6, 0x34, 0x9b, 0xf0, 0x74, 0x5b, 0x83, 0xaf, 0xd0, 0x88, 0x4a, 0xd4, 0xb0, 0xfa, 0x46, 0xe6, 0x75, 0xdb, 0x63, 0xfd, 0x71, 0x13, 0xbb, 0xfc, 0x37, 0x6d, 0x6b, 0xb1, 0x7e, 0x9c, 0x7f, 0x7b, 0xbb, 0x79, 0xa9, 0x6a, 0xdb, 0xe0, 0xf6, 0xf7, 0xb5, 0x9f, 0xc7, 0x26, 0x09, 0x73, 0x93, 0x44, 0x57, 0xd6, 0x6b, 0x97, 0x7f, 0x9f, 0x9b, 0xb9, 0xfa, 0x12, 0x1f, 0x1c, 0x8c, 0xf9, 0xb9, 0x2f, 0xfc, 0x1e, 0xf6, 0xf8, 0x5b, 0x71, 0xbc, 0x0e, 0x9f, 0x7b, 0xe1, 0x36, 0x07, 0x3f, 0xf2, 0xbe, 0xc7, 0x4e, 0xe9, 0xe3, 0x3c, 0x63, 0x22, 0x4e, 0x9b, 0xbc, 0x28, 0x08, 0xb6, 0x7e, 0xbd, 0xcd, 0x37, 0xfe, 0x0c, 0x4a, 0xf0, 0xe8, 0x90, 0x8b, 0xfd, 0x2b, 0xcd, 0x1e, 0x9d, 0xbe, 0x23, 0x1b, 0x85, 0x97, 0x6e, 0xf0, 0x85, 0x17, 0x03, 0xde, 0xf9, 0xee, 0x54, 0x5e, 0x1b, 0x7a, 0xc1, 0x4f, 0x7c, 0xf0, 0x9b, 0xdf, 0x5c, 0x5b, 0x7f, 0xb1, 0xcf, 0x37, 0xfe, 0xe0, 0xbb, 0xf9, 0xe1, 0xeb, 0x3f, 0x84, 0xe7, 0xd9, 0x58, 0x7a, 0x86, 0x51, 0x45, 0x08, 0x11, 0x02, 0x15, 0xba, 0x56, 0xa2, 0x89, 0x82, 0xd7, 0x77, 0xfb, 0xf4, 0x77, 0xfb, 0xbc, 0xeb, 0xca, 0xde, 0x9b, 0xde, 0xe7, 0xa7, 0x5f, 0xcc, 0x59, 0x2c, 0xe7, 0xe4, 0x79, 0xbd, 0x82, 0x2b, 0xd2, 0xc6, 0x20, 0xa9, 0x28, 0x33, 0xb2, 0x0c, 0x1c, 0xdb, 0xa9, 0x1b, 0xeb, 0x8a, 0x1f, 0xf8, 0x0f, 0xbe, 0x57, 0x06, 0xac, 0x1c, 0x3d, 0xe2, 0xd6, 0xcd, 0xd7, 0x99, 0x04, 0xa7, 0x7a, 0x72, 0x15, 0x77, 0x1a, 0xc4, 0x15, 0xe7, 0xc7, 0x36, 0x3f, 0xff, 0xa1, 0x0f, 0xd1, 0xe9, 0x18, 0x9c, 0xdf, 0x1f, 0x33, 0x1c, 0x7a, 0x6b, 0x19, 0x0c, 0xd5, 0x16, 0xa3, 0xa0, 0x34, 0x9e, 0x9d, 0x05, 0x48, 0x6a, 0xe7, 0x38, 0x91, 0x1e, 0x35, 0x4d, 0xbc, 0xae, 0x14, 0x23, 0x35, 0x8a, 0x55, 0x55, 0x15, 0x17, 0x2e, 0x5c, 0xa0, 0xdb, 0xed, 0x92, 0x24, 0x09, 0xb3, 0xd9, 0xac, 0x29, 0xee, 0xae, 0xeb, 0xb2, 0x0c, 0x03, 0xba, 0xdd, 0x2e, 0xe3, 0x8e, 0x4f, 0x1c, 0xc7, 0x0d, 0x62, 0x67, 0x9b, 0x0e, 0x86, 0x65, 0x72, 0xfb, 0xce, 0x9d, 0x33, 0xee, 0x8f, 0x7a, 0x4d, 0x16, 0x96, 0xd6, 0xb3, 0xb7, 0xa4, 0xc2, 0xc7, 0xb0, 0x6b, 0xa2, 0x9c, 0xd3, 0x58, 0x32, 0xf7, 0x7a, 0x03, 0xb2, 0x4c, 0x9a, 0x91, 0x28, 0x0f, 0xf3, 0xa3, 0xa3, 0x23, 0x1c, 0xc7, 0x61, 0x6f, 0x6f, 0x8f, 0x93, 0x93, 0x13, 0xfc, 0x6e, 0x8f, 0xd1, 0x68, 0x44, 0x56, 0xa4, 0xe8, 0x96, 0xce, 0xd0, 0x35, 0xb1, 0x5d, 0x1b, 0xcb, 0x71, 0x28, 0xca, 0x0c, 0x2b, 0xa9, 0x4e, 0x43, 0x5f, 0xe2, 0xac, 0xe6, 0x1d, 0x49, 0x93, 0x19, 0xdf, 0xf7, 0x29, 0x34, 0x41, 0x14, 0xc5, 0x84, 0xcb, 0x00, 0xb3, 0x12, 0xf8, 0x8e, 0x8b, 0xdf, 0xe9, 0x60, 0x28, 0xc5, 0x51, 0x21, 0x99, 0xff, 0x68, 0x5a, 0x23, 0x7d, 0xd3, 0x4d, 0x03, 0xd3, 0xd2, 0xb0, 0x4d, 0x8b, 0x2c, 0x5a, 0xe1, 0x98, 0x16, 0xcb, 0x6c, 0x8e, 0xe6, 0x9e, 0x9e, 0x6f, 0xc3, 0xd1, 0x0e, 0xb6, 0x6d, 0x33, 0x39, 0x3e, 0xc6, 0xb2, 0x1c, 0x46, 0xa3, 0x51, 0x83, 0x2a, 0xd8, 0xb6, 0xc3, 0xe1, 0xe1, 0x21, 0xcb, 0xe5, 0x92, 0x05, 0x09, 0x8e, 0x69, 0xc9, 0x69, 0x3d, 0xcf, 0x89, 0xa2, 0x88, 0x61, 0x7f, 0xd0, 0xa8, 0x9a, 0x66, 0xb5, 0x93, 0x9e, 0x6d, 0xdb, 0xd2, 0x5c, 0x2c, 0x4d, 0xc8, 0x8a, 0x1c, 0xcd, 0x90, 0x67, 0x98, 0xeb, 0x3b, 0xcd, 0x67, 0x5a, 0xad, 0xd7, 0x82, 0x20, 0x60, 0x32, 0x99, 0xc8, 0x41, 0x30, 0xd7, 0x18, 0x8f, 0xc7, 0xb8, 0xb6, 0xc3, 0xe1, 0xe1, 0x31, 0x77, 0xc2, 0x3b, 0x92, 0x94, 0xe8, 0x38, 0x94, 0xa5, 0x80, 0x42, 0x12, 0xdd, 0x8a, 0xbc, 0x44, 0x20, 0xb9, 0x34, 0xab, 0x68, 0x45, 0x96, 0xe4, 0xcc, 0xe7, 0x73, 0x1e, 0x2e, 0x1e, 0x60, 0xe8, 0xba, 0x34, 0xe4, 0xd1, 0x75, 0xfa, 0xfd, 0x21, 0x95, 0xae, 0x91, 0x24, 0x19, 0xd1, 0xc1, 0x31, 0xc6, 0xae, 0x45, 0x51, 0xe6, 0x0d, 0x86, 0xa6, 0x86, 0xa0, 0x32, 0xcb, 0x31, 0x34, 0x03, 0xb3, 0x6e, 0x34, 0x65, 0xfc, 0x6c, 0x4a, 0x81, 0x6c, 0x68, 0x85, 0x2e, 0xe5, 0xb9, 0x71, 0x1c, 0xe3, 0xfb, 0x3e, 0xa3, 0xbd, 0x3d, 0x7a, 0x7e, 0x87, 0xaa, 0xaa, 0x98, 0x1c, 0x1d, 0xd7, 0x86, 0x3c, 0x52, 0x82, 0x56, 0xe6, 0x52, 0xb2, 0x68, 0x99, 0x26, 0xd3, 0x38, 0x66, 0x3a, 0x9d, 0xb2, 0x4a, 0x62, 0xc6, 0xe3, 0x31, 0x9a, 0xa6, 0xb1, 0x58, 0x2c, 0x38, 0x38, 0x38, 0x90, 0x56, 0xe2, 0x9d, 0x0e, 0xa3, 0xd1, 0xa8, 0x6e, 0xe0, 0x7c, 0x0e, 0x0f, 0x0e, 0x9a, 0x06, 0x74, 0x67, 0x67, 0x87, 0xbd, 0xbd, 0xbd, 0x86, 0x0b, 0xa1, 0xd6, 0xb3, 0xcb, 0xe5, 0xb2, 0x19, 0x70, 0xf3, 0x3c, 0xc7, 0x68, 0x07, 0x70, 0xb4, 0x61, 0xd8, 0x2c, 0xcb, 0x70, 0x5d, 0xb7, 0x29, 0x8a, 0x9b, 0x07, 0xf3, 0xe6, 0x61, 0xa5, 0x20, 0xe1, 0xcd, 0x02, 0xa8, 0x9a, 0x02, 0x25, 0x6d, 0x6b, 0x93, 0xdb, 0xca, 0xb2, 0xd8, 0x2a, 0x17, 0x3b, 0x2d, 0x28, 0xc5, 0x86, 0x66, 0x59, 0xac, 0xe9, 0xe5, 0xab, 0xd6, 0x81, 0xaf, 0xc8, 0x2a, 0x6a, 0x7d, 0xd0, 0x76, 0x1d, 0xdb, 0x74, 0x99, 0x6b, 0x8a, 0x63, 0x8b, 0x00, 0xd7, 0x26, 0x82, 0xb5, 0x8b, 0xd6, 0xb6, 0xc2, 0x74, 0xaa, 0x03, 0x5f, 0x8f, 0x83, 0x6d, 0x37, 0x03, 0x6b, 0xb9, 0xdf, 0x5b, 0xcc, 0x61, 0x0c, 0xc3, 0xa0, 0x7c, 0xcc, 0x84, 0xd9, 0x86, 0xf9, 0xd5, 0x63, 0x6a, 0x43, 0xe7, 0x0d, 0xb4, 0xae, 0x3f, 0x3e, 0xe8, 0x44, 0x11, 0x25, 0x36, 0x9b, 0x88, 0xf6, 0xeb, 0x9b, 0x95, 0xd9, 0x1a, 0x33, 0x9d, 0xb2, 0xda, 0x1a, 0x9e, 0xf2, 0x46, 0x53, 0x3c, 0x54, 0x5b, 0x65, 0x79, 0xdb, 0xae, 0x17, 0xe9, 0x31, 0xaf, 0xde, 0xef, 0x0a, 0x8d, 0x62, 0x8d, 0xfc, 0x66, 0x08, 0x99, 0x92, 0x55, 0x56, 0x25, 0x45, 0x5e, 0x9d, 0x31, 0x14, 0xd2, 0x35, 0x1d, 0x5d, 0xd7, 0x30, 0x4c, 0x49, 0x14, 0xca, 0x4b, 0xf1, 0x86, 0xe8, 0xc9, 0xa4, 0x28, 0x1b, 0x96, 0x7a, 0x5b, 0x8e, 0xb6, 0x3b, 0xde, 0x67, 0xf6, 0xd2, 0x0d, 0x2c, 0xff, 0x1c, 0x7e, 0xb7, 0xcf, 0xc5, 0xab, 0xcf, 0x11, 0x2e, 0x4f, 0xf8, 0x07, 0xbf, 0xf0, 0x8b, 0x7c, 0xe2, 0xbb, 0xfe, 0x56, 0x43, 0x8e, 0xdb, 0x26, 0x57, 0xab, 0x6a, 0x03, 0x9a, 0x45, 0x70, 0x47, 0x06, 0xb6, 0xd4, 0x5f, 0xff, 0xbb, 0xde, 0xee, 0xcf, 0x63, 0xc6, 0x7b, 0xfb, 0xdc, 0xbc, 0x79, 0x53, 0xba, 0xb4, 0x45, 0x09, 0x4f, 0x5c, 0xbf, 0x06, 0x5f, 0xb9, 0x81, 0xa0, 0x44, 0xd3, 0x72, 0x8a, 0x34, 0x78, 0xcb, 0xf7, 0xf7, 0xfb, 0x1f, 0x9f, 0xa0, 0x69, 0x02, 0xc7, 0xd1, 0xe9, 0x75, 0x04, 0xdd, 0xae, 0x49, 0x25, 0x6c, 0x84, 0x56, 0x5f, 0xff, 0x55, 0xca, 0xf7, 0x7c, 0xef, 0x7f, 0x48, 0xb5, 0xfa, 0xc2, 0x5b, 0x82, 0xdb, 0xbf, 0xfc, 0xa5, 0x2f, 0x61, 0xbb, 0x36, 0x5e, 0xd7, 0xa2, 0xaa, 0x0a, 0xb2, 0xdc, 0xa8, 0xfd, 0xe9, 0x0b, 0xaa, 0xac, 0x42, 0x23, 0x6f, 0xa6, 0x82, 0x3c, 0x2b, 0x37, 0xb8, 0x03, 0x7d, 0xce, 0xef, 0x1c, 0x93, 0xa6, 0x8b, 0xa6, 0xb0, 0x4b, 0xf8, 0x7d, 0x86, 0x65, 0xf5, 0xd0, 0x75, 0x81, 0xef, 0x59, 0x64, 0x79, 0x4c, 0x18, 0x9d, 0x26, 0x2c, 0xa6, 0x69, 0x4a, 0x18, 0xe5, 0x24, 0xc1, 0xb4, 0x91, 0xb9, 0x6d, 0x2b, 0xe8, 0x4a, 0xfe, 0xa6, 0xf4, 0xfc, 0x4a, 0x1b, 0x8c, 0x26, 0x77, 0xe2, 0x49, 0x4d, 0x04, 0xf5, 0xbc, 0x0e, 0xb3, 0xd9, 0x8c, 0x83, 0x83, 0x83, 0x86, 0xb0, 0x2b, 0x84, 0x60, 0x3a, 0x9d, 0x72, 0x72, 0x12, 0xd2, 0xdf, 0x73, 0x9a, 0x78, 0x54, 0x75, 0x5d, 0x2a, 0xb2, 0x9b, 0xeb, 0xba, 0xb8, 0x3b, 0x9d, 0xb5, 0xcf, 0xe3, 0x26, 0x97, 0xe3, 0x89, 0xab, 0x4f, 0x35, 0xe4, 0xd3, 0x20, 0x08, 0xeb, 0x42, 0x27, 0xdd, 0x1b, 0x07, 0x83, 0x01, 0xcb, 0x45, 0x48, 0x55, 0xc1, 0x97, 0xbf, 0x74, 0x97, 0x34, 0x85, 0x67, 0x9e, 0xd9, 0xc1, 0xd0, 0x2d, 0xee, 0xdf, 0x7b, 0xc8, 0x60, 0x30, 0x60, 0x3a, 0x9f, 0x61, 0x39, 0x36, 0x5a, 0xa5, 0x73, 0x32, 0x9b, 0x10, 0xc5, 0x11, 0x5e, 0xd7, 0xa3, 0xd3, 0xeb, 0x52, 0x96, 0x79, 0xa3, 0xcd, 0x56, 0x7c, 0x16, 0x43, 0xd3, 0xc8, 0xb3, 0x82, 0xaa, 0x2c, 0x11, 0x40, 0x18, 0xaf, 0x28, 0xf2, 0x9c, 0x3c, 0x4d, 0x30, 0x6d, 0x17, 0xcb, 0x95, 0xc4, 0xa8, 0x51, 0xad, 0x4f, 0x7f, 0xfd, 0xe0, 0x36, 0xd2, 0xed, 0xe6, 0x54, 0xca, 0x8a, 0x00, 0xc3, 0xb2, 0x70, 0x5c, 0x97, 0x6e, 0xb7, 0xdf, 0x38, 0x95, 0x69, 0x9a, 0x06, 0x45, 0xeb, 0x35, 0x70, 0x6c, 0x9e, 0x78, 0xf2, 0x49, 0x82, 0x20, 0x60, 0x3e, 0x9b, 0x31, 0x5b, 0x2e, 0x9a, 0x7f, 0xf7, 0x3a, 0x3e, 0x17, 0x2f, 0x5f, 0xe2, 0xd6, 0xfd, 0xdb, 0xf8, 0xbe, 0xdf, 0x18, 0xa3, 0x80, 0x34, 0x94, 0x89, 0x23, 0x19, 0x02, 0xa3, 0x98, 0xd9, 0x8e, 0x27, 0x57, 0x9f, 0xba, 0x61, 0xe0, 0x77, 0x3a, 0x74, 0xea, 0x82, 0x4e, 0x24, 0xd7, 0x86, 0x79, 0x4d, 0x80, 0x4e, 0xd3, 0xb4, 0x29, 0xe6, 0xe3, 0xf1, 0x18, 0xdb, 0xea, 0xd0, 0xed, 0x76, 0x89, 0xc2, 0x90, 0xf9, 0x7c, 0x89, 0x28, 0x2b, 0xce, 0x9d, 0x1b, 0x32, 0xe8, 0xf5, 0x25, 0xc9, 0x5a, 0x8b, 0x58, 0x25, 0xd2, 0x3f, 0x20, 0x8a, 0x22, 0x19, 0x09, 0x5b, 0x9f, 0x41, 0xbe, 0xef, 0x53, 0xe4, 0x29, 0x45, 0x2e, 0xcd, 0x83, 0x06, 0x83, 0x81, 0x5c, 0xa7, 0xa4, 0x09, 0x69, 0x9e, 0x51, 0x08, 0x58, 0xc6, 0x01, 0x1a, 0x1a, 0xb6, 0x69, 0x62, 0x9b, 0x0e, 0x65, 0x5a, 0x30, 0x9f, 0x2e, 0x98, 0x4f, 0xe6, 0xc4, 0x2b, 0x39, 0x74, 0x0c, 0x47, 0x0e, 0xfd, 0x9d, 0x3e, 0x9e, 0xe7, 0x80, 0xa1, 0xa3, 0x9b, 0x1a, 0x79, 0x55, 0x50, 0x64, 0x25, 0xb6, 0xeb, 0x10, 0x44, 0xa1, 0xd4, 0xf8, 0x77, 0xbb, 0x58, 0xba, 0x41, 0x14, 0xaf, 0xf0, 0x3c, 0x8f, 0xfd, 0xfd, 0xfd, 0xe6, 0x6c, 0x9a, 0xcd, 0x66, 0x58, 0xb6, 0xcd, 0xde, 0x68, 0x4c, 0x56, 0x16, 0xcc, 0xe7, 0x73, 0x5c, 0xdb, 0x21, 0x9e, 0x9d, 0xca, 0xd0, 0x14, 0x7a, 0x34, 0x9d, 0x4e, 0x39, 0x3a, 0x3a, 0xe2, 0xee, 0xdd, 0xfb, 0x5c, 0x38, 0x2f, 0x75, 0xee, 0x07, 0x07, 0x07, 0xdc, 0xbd, 0xfb, 0xa8, 0x8e, 0x4b, 0xf5, 0x98, 0x4c, 0x26, 0xa4, 0x69, 0xca, 0x95, 0xab, 0x57, 0x99, 0xcf, 0xe7, 0xcd, 0xb5, 0x1d, 0xc7, 0xb1, 0x4c, 0x5b, 0x6b, 0x17, 0x39, 0x55, 0xe9, 0xd5, 0x4e, 0x49, 0xf9, 0xae, 0xb7, 0x27, 0xb4, 0xf6, 0x9f, 0xcd, 0xc0, 0x92, 0xb5, 0x40, 0x8c, 0xd5, 0xea, 0x4c, 0x92, 0x5b, 0x5b, 0x17, 0xad, 0xba, 0xe8, 0x6d, 0x2e, 0x70, 0xed, 0x29, 0xf3, 0x71, 0x45, 0x26, 0xdd, 0x88, 0x27, 0x55, 0xce, 0x65, 0x9b, 0xb2, 0xb5, 0xcd, 0xa9, 0xb3, 0x59, 0x19, 0xd4, 0xe4, 0xbc, 0x76, 0x92, 0x5c, 0xbb, 0xa1, 0xd9, 0x5c, 0x3b, 0xb4, 0x6d, 0x68, 0xab, 0xaa, 0xc2, 0xae, 0xf5, 0x8d, 0x9b, 0x08, 0xc5, 0xe3, 0xfe, 0x6c, 0x3e, 0x7e, 0xb5, 0xab, 0x6f, 0xe7, 0xca, 0xb7, 0x65, 0x7e, 0x9b, 0x13, 0x72, 0xfb, 0x77, 0xe8, 0xba, 0x8e, 0x1a, 0x51, 0x37, 0x49, 0x6b, 0x9b, 0x2c, 0xf9, 0xcd, 0x26, 0xa3, 0x99, 0x92, 0xb5, 0x4d, 0xb2, 0x5b, 0xf5, 0x86, 0xe9, 0x72, 0x9b, 0x4e, 0x75, 0x67, 0x33, 0xcf, 0x4f, 0xad, 0x6e, 0xd7, 0x60, 0xfb, 0x56, 0x66, 0x7a, 0x9b, 0xa1, 0x6f, 0x9b, 0xc6, 0x1a, 0xe2, 0xd3, 0xf6, 0x1d, 0xd8, 0xf4, 0xea, 0xdf, 0xd6, 0x18, 0xbd, 0x99, 0xd5, 0xeb, 0xe3, 0x24, 0x67, 0x4b, 0xfd, 0x1a, 0x1f, 0x7b, 0xe6, 0x02, 0xe3, 0x42, 0xd4, 0xf2, 0x95, 0x3e, 0xba, 0x6e, 0x81, 0x10, 0xfc, 0xa3, 0xd7, 0x5e, 0xe0, 0x43, 0x4f, 0x3f, 0xff, 0xd8, 0xa2, 0xbe, 0xe9, 0xf8, 0xf6, 0xb8, 0xdb, 0x53, 0x4f, 0x3d, 0xc5, 0xbf, 0xfa, 0xc5, 0x5f, 0xe1, 0xea, 0x53, 0xcf, 0x6f, 0x87, 0xdd, 0x83, 0xa0, 0xc9, 0x5b, 0xbf, 0x71, 0xff, 0x98, 0x6b, 0x17, 0xc7, 0x54, 0x57, 0xf7, 0x6a, 0xe5, 0x42, 0x0e, 0x22, 0xc1, 0x31, 0x8f, 0xde, 0x52, 0xf1, 0x05, 0xf8, 0x8f, 0x7f, 0xfc, 0xc7, 0xf1, 0x5c, 0x83, 0xfd, 0x3d, 0x1b, 0xc7, 0xcc, 0xa8, 0xf2, 0x92, 0xac, 0x3a, 0xb5, 0xe6, 0x2d, 0x73, 0xe8, 0xef, 0xdc, 0x6a, 0x6c, 0x68, 0x1b, 0x72, 0xda, 0xe7, 0x03, 0x9e, 0x7c, 0xcf, 0xf6, 0xe7, 0x11, 0x04, 0x01, 0x60, 0x36, 0x9f, 0x15, 0xc5, 0x71, 0x91, 0x6f, 0xf4, 0x29, 0x89, 0x73, 0x6f, 0xef, 0xbd, 0x98, 0xb6, 0x4e, 0x96, 0x14, 0x8d, 0x51, 0xce, 0x3b, 0xdf, 0xf9, 0xb4, 0xe4, 0x0b, 0x4c, 0xe7, 0x7c, 0xf6, 0x05, 0x69, 0x86, 0x73, 0xf5, 0xc2, 0x2e, 0xbf, 0xf1, 0xe1, 0x5f, 0xa2, 0xd3, 0x31, 0xd9, 0xdf, 0x77, 0xe8, 0xf5, 0x3c, 0x74, 0x5d, 0xac, 0x9d, 0x35, 0x8e, 0x5b, 0x9c, 0x99, 0xcc, 0xdf, 0xf6, 0xb6, 0xb7, 0x01, 0x34, 0x56, 0xb2, 0x4a, 0xfe, 0x56, 0x9f, 0x32, 0x75, 0xa1, 0x05, 0xd3, 0xb6, 0xe4, 0xce, 0xb7, 0x1e, 0x1c, 0xd4, 0xb0, 0xa2, 0x90, 0x36, 0xa5, 0xc4, 0xd9, 0xdf, 0xdf, 0xe7, 0xe9, 0xa7, 0x7d, 0x0e, 0x17, 0x47, 0x20, 0x04, 0x41, 0x18, 0xca, 0xcf, 0x43, 0x7d, 0xe5, 0x66, 0xb9, 0x9c, 0xda, 0xa6, 0x27, 0x0f, 0xcf, 0xb8, 0x41, 0xb6, 0xd7, 0x7a, 0x87, 0x87, 0xcb, 0x7a, 0x37, 0xec, 0xd4, 0x31, 0xd0, 0x66, 0xc3, 0xe2, 0x76, 0x1d, 0x1f, 0xc7, 0xf6, 0x38, 0x3c, 0x3c, 0xe4, 0xf2, 0xe5, 0xa1, 0xf4, 0xde, 0xae, 0x15, 0x28, 0x32, 0x29, 0xab, 0x00, 0x5d, 0x22, 0x65, 0x69, 0x28, 0x2d, 0x54, 0x2d, 0xd7, 0xa6, 0x37, 0x90, 0x7b, 0xd1, 0x24, 0x4f, 0x28, 0xd3, 0x0c, 0x4d, 0xc8, 0x78, 0x5f, 0xcf, 0xf6, 0x64, 0x26, 0xf8, 0x7c, 0x79, 0xea, 0xe5, 0x61, 0x09, 0x7a, 0x83, 0x3e, 0x65, 0x96, 0xe3, 0x08, 0x69, 0xe6, 0xb2, 0x3c, 0x08, 0xf0, 0x3c, 0x4f, 0xc1, 0x43, 0x72, 0x9a, 0x04, 0xf2, 0xaa, 0xa4, 0xa8, 0x4a, 0x24, 0xe0, 0x5e, 0x91, 0x15, 0x05, 0xc3, 0x8e, 0xb4, 0x55, 0x75, 0x4c, 0x0b, 0xd1, 0x4a, 0x4a, 0x54, 0x86, 0x4e, 0xf3, 0xe5, 0xa2, 0xce, 0x80, 0xaf, 0x70, 0x5c, 0x17, 0xaf, 0x36, 0xae, 0x51, 0x85, 0x7a, 0x38, 0x18, 0xc8, 0xcc, 0x88, 0xba, 0x19, 0x53, 0x4c, 0x6b, 0x21, 0x04, 0x93, 0xc9, 0x04, 0xdf, 0xf7, 0x89, 0xa2, 0x48, 0x26, 0xd6, 0x95, 0x25, 0x05, 0x15, 0xba, 0x6d, 0xd6, 0x13, 0x6f, 0x81, 0x69, 0x59, 0x44, 0xcb, 0x25, 0x61, 0x18, 0x36, 0xd7, 0x92, 0xe3, 0xcb, 0x6c, 0xf2, 0x9d, 0xdd, 0x5d, 0xb4, 0xf2, 0xd4, 0x78, 0x6c, 0x67, 0x38, 0x86, 0xb2, 0x24, 0x5e, 0x65, 0x1c, 0xac, 0x8e, 0x49, 0xd3, 0x94, 0xc1, 0x9e, 0x4b, 0x1c, 0xa7, 0x78, 0xbd, 0xae, 0xf4, 0xe9, 0xd7, 0x0d, 0x2c, 0xd7, 0x20, 0x4b, 0x52, 0xba, 0x1d, 0x8f, 0xdd, 0xbd, 0x21, 0x65, 0x5e, 0x20, 0xea, 0xf3, 0x44, 0x12, 0xb8, 0x25, 0x51, 0xad, 0x33, 0xe8, 0x93, 0x2e, 0xef, 0x50, 0x64, 0xf9, 0x69, 0x12, 0x67, 0x92, 0x11, 0x86, 0x21, 0xcb, 0xa0, 0x24, 0x59, 0xc9, 0xbd, 0xbd, 0x42, 0x33, 0x4d, 0xd3, 0x24, 0x17, 0x05, 0x69, 0x96, 0x90, 0x97, 0x25, 0x45, 0x95, 0xe1, 0x9a, 0x1d, 0xd9, 0xb0, 0xd4, 0x2c, 0x79, 0x21, 0x04, 0x8b, 0xc5, 0x82, 0xc9, 0x64, 0xc2, 0x7c, 0xb9, 0xc0, 0xb3, 0x6c, 0xbc, 0x8e, 0x6c, 0x2a, 0xd3, 0x34, 0xa5, 0xa8, 0x4a, 0x86, 0xc3, 0x61, 0x9d, 0xb4, 0x37, 0xc7, 0x37, 0x24, 0xc9, 0x39, 0xac, 0xaf, 0xbf, 0xb2, 0x2c, 0x1b, 0x8e, 0x85, 0x61, 0x18, 0xa4, 0x89, 0x94, 0xf7, 0xf5, 0x7a, 0xbd, 0x46, 0x1e, 0xd8, 0x9c, 0x3d, 0x9e, 0xc7, 0xe1, 0xd1, 0x11, 0x41, 0x20, 0xdf, 0x6f, 0x55, 0xab, 0x0c, 0xe5, 0x61, 0xdc, 0xde, 0xdb, 0xaa, 0x43, 0x5f, 0x65, 0xad, 0x2a, 0xdc, 0xbf, 0xb1, 0x31, 0x54, 0xf2, 0xa8, 0x1a, 0x4a, 0x69, 0x4f, 0xcd, 0xdb, 0xa6, 0xf8, 0xcd, 0x1d, 0x68, 0x33, 0xa5, 0x9a, 0x3a, 0x65, 0x55, 0x20, 0x4a, 0x99, 0x6b, 0x6d, 0x59, 0x66, 0x73, 0x88, 0xcb, 0x83, 0xfe, 0xac, 0x5b, 0x5a, 0x51, 0xe6, 0x12, 0x26, 0xa9, 0x2a, 0xca, 0x56, 0xb1, 0x56, 0x2f, 0x7a, 0x7b, 0x4f, 0xde, 0x26, 0xf0, 0xa9, 0x09, 0xb5, 0xad, 0x39, 0x3f, 0x3a, 0x3a, 0x92, 0x96, 0x8b, 0x35, 0xe4, 0xa7, 0xf2, 0x79, 0x95, 0xac, 0x4e, 0x3d, 0xfe, 0x36, 0x42, 0xb1, 0x06, 0xfb, 0xc7, 0xf1, 0xd6, 0x29, 0x7c, 0xf3, 0x39, 0x6f, 0xdb, 0xb9, 0xb7, 0x1b, 0x9c, 0x76, 0x11, 0xdb, 0xfc, 0xb9, 0x4d, 0x08, 0xba, 0x0d, 0x43, 0x6b, 0x42, 0x5b, 0xcf, 0x56, 0xdf, 0xd8, 0x37, 0xc7, 0xb5, 0xa6, 0x76, 0xd3, 0x06, 0xb6, 0xe5, 0xfd, 0xba, 0x01, 0xd5, 0xb7, 0x60, 0xfa, 0x2d, 0x13, 0xf6, 0xa6, 0x8c, 0xae, 0x3c, 0xe3, 0x5e, 0x57, 0xad, 0x29, 0xd4, 0x9a, 0x7f, 0xdb, 0xc2, 0x37, 0x00, 0x81, 0x69, 0xca, 0x54, 0xba, 0x75, 0x3e, 0x40, 0xd9, 0xa4, 0xd5, 0x29, 0x8f, 0x78, 0x55, 0xc3, 0x95, 0x1f, 0x7d, 0xf3, 0x5a, 0xe9, 0x4e, 0x6d, 0x39, 0x2b, 0xb6, 0x1a, 0xc1, 0xa8, 0xaf, 0x37, 0xcd, 0x62, 0xe6, 0xd3, 0x63, 0x10, 0x60, 0x1b, 0x1e, 0x8e, 0xd7, 0xc1, 0x30, 0x2c, 0x3c, 0xbf, 0x47, 0xb8, 0x3c, 0xe1, 0xc6, 0x6b, 0x0f, 0x78, 0xff, 0x6b, 0x0f, 0xf8, 0xb5, 0x1f, 0xfd, 0xe0, 0x19, 0xf8, 0x5d, 0xbf, 0xf1, 0x1a, 0x9d, 0xaf, 0xb9, 0xc6, 0xed, 0x3b, 0x52, 0xb7, 0xae, 0x0a, 0xb2, 0x0a, 0x0a, 0xd9, 0xdf, 0xdf, 0xc3, 0xf3, 0x3a, 0x7c, 0xf2, 0x4f, 0x7f, 0x9b, 0x8f, 0x7c, 0xf4, 0x23, 0xf4, 0x87, 0x7b, 0x5b, 0x21, 0xf7, 0xb6, 0xaf, 0xfb, 0xfe, 0xfe, 0x5e, 0x13, 0x05, 0x2a, 0x51, 0x15, 0x17, 0xca, 0x94, 0x2c, 0x59, 0x72, 0xf9, 0xca, 0x1e, 0x1f, 0xfa, 0x6f, 0x7e, 0x83, 0x0f, 0xfc, 0xc0, 0xdf, 0x79, 0x6c, 0xd1, 0x05, 0xf8, 0xf9, 0x7f, 0xf5, 0x39, 0x74, 0x4d, 0xe0, 0x7b, 0x3a, 0x5d, 0x5f, 0x47, 0x23, 0x27, 0x4b, 0x12, 0xa2, 0x58, 0x35, 0xac, 0x3a, 0xab, 0x68, 0xbb, 0x7c, 0xee, 0x71, 0xf7, 0xfb, 0xf6, 0x77, 0xbc, 0x83, 0xcf, 0x7e, 0x7e, 0xd4, 0x40, 0xe2, 0x12, 0xa9, 0xab, 0x6a, 0x42, 0x99, 0xfc, 0xdc, 0x8b, 0x52, 0xee, 0xd0, 0xdf, 0xff, 0x1d, 0xdf, 0x8e, 0xe7, 0x77, 0xb9, 0xf6, 0xec, 0x65, 0xfc, 0x9d, 0x73, 0x7c, 0xe1, 0x85, 0xbf, 0x64, 0x36, 0x95, 0xa6, 0x19, 0xf7, 0xee, 0x1d, 0x37, 0x05, 0x78, 0x72, 0x72, 0x8c, 0x61, 0x68, 0xf4, 0xfb, 0x0e, 0xa3, 0x91, 0x8f, 0xa6, 0xad, 0xcb, 0x2d, 0x65, 0x24, 0x69, 0xb6, 0x36, 0x89, 0x2b, 0xdd, 0x79, 0xb7, 0x63, 0x35, 0x7b, 0xf3, 0xb6, 0xd1, 0x4c, 0xaf, 0xe3, 0x71, 0x2b, 0x8a, 0xf0, 0xdc, 0x4e, 0x33, 0xa9, 0x65, 0xf5, 0xe7, 0xc4, 0xf7, 0x3b, 0xdc, 0xbb, 0x77, 0x8f, 0xe9, 0x34, 0xa0, 0xd3, 0x91, 0x89, 0x5f, 0xa6, 0x69, 0x12, 0xc7, 0x52, 0x27, 0xae, 0x77, 0x25, 0xa1, 0xad, 0xac, 0xf7, 0xae, 0x0a, 0x51, 0x4c, 0x8b, 0x9c, 0x02, 0xc9, 0xb1, 0x69, 0xaf, 0xed, 0xda, 0xc3, 0x80, 0x69, 0x9a, 0xac, 0x96, 0x31, 0x51, 0xb4, 0x22, 0x49, 0x52, 0xb2, 0xac, 0x68, 0xcc, 0x53, 0xa6, 0x27, 0x73, 0xa6, 0x27, 0x73, 0x26, 0x93, 0x29, 0xfb, 0xfb, 0xfb, 0xe4, 0x79, 0xce, 0x72, 0x19, 0xe2, 0xba, 0x2e, 0x07, 0x07, 0x47, 0x72, 0xba, 0xba, 0x72, 0x85, 0x5c, 0x54, 0x2c, 0xc3, 0x80, 0xd9, 0x62, 0x4a, 0x56, 0x16, 0x0c, 0x06, 0x7d, 0x79, 0xbf, 0x69, 0x42, 0x96, 0x25, 0x74, 0x1c, 0x29, 0xc9, 0x4b, 0xa2, 0x15, 0x55, 0x5e, 0x51, 0xe6, 0xa7, 0xc1, 0x31, 0x32, 0x90, 0x64, 0x81, 0x65, 0x98, 0x54, 0x79, 0x4e, 0x61, 0x48, 0xa6, 0x7a, 0x14, 0x86, 0xcd, 0x44, 0xae, 0x79, 0x92, 0x21, 0x9f, 0x57, 0xb2, 0x59, 0x31, 0x64, 0x5e, 0x36, 0x15, 0xb0, 0x4a, 0x24, 0x54, 0x9f, 0xa6, 0xa9, 0x34, 0xa0, 0xa1, 0x6c, 0x64, 0xad, 0x71, 0x1c, 0xe3, 0x79, 0x1e, 0xfd, 0x9d, 0x21, 0xfa, 0x5c, 0x67, 0x9a, 0x4d, 0x09, 0xa2, 0xb0, 0x76, 0x45, 0x93, 0x11, 0xaf, 0x5e, 0xb7, 0x83, 0xd7, 0xf5, 0xf0, 0x3c, 0x8f, 0x70, 0x15, 0xf1, 0xf2, 0xcb, 0x2f, 0x37, 0x50, 0xf3, 0x95, 0xab, 0x57, 0x79, 0xfa, 0x99, 0x67, 0xb8, 0x7d, 0xf3, 0x56, 0x63, 0x71, 0x2d, 0x34, 0x8d, 0x79, 0x14, 0x50, 0xe6, 0x19, 0x59, 0x25, 0x0b, 0x68, 0x5f, 0xf4, 0x48, 0xe2, 0x8c, 0xe5, 0x22, 0x64, 0x38, 0x1c, 0x72, 0xe5, 0xf2, 0x13, 0x68, 0x9a, 0xc6, 0x9d, 0x3b, 0x77, 0x78, 0xf1, 0x2b, 0x2f, 0xd3, 0x71, 0x3b, 0x44, 0x51, 0x44, 0x1c, 0xa5, 0x64, 0x19, 0xa4, 0x2b, 0x48, 0x53, 0xb0, 0x4d, 0xf0, 0x7d, 0x88, 0x4b, 0x8f, 0x93, 0x59, 0xc4, 0xd3, 0x5d, 0xf9, 0xde, 0x67, 0x79, 0x86, 0x56, 0xc1, 0xbd, 0x7b, 0xf7, 0xf0, 0x3c, 0x8f, 0xd4, 0x8e, 0x6a, 0xd5, 0xd4, 0x69, 0x23, 0x35, 0xdc, 0x1d, 0x13, 0xc5, 0x2b, 0x1e, 0x3d, 0x7a, 0x84, 0xbf, 0xe7, 0xcb, 0xd7, 0x60, 0x25, 0x99, 0xeb, 0xe4, 0xd2, 0xba, 0x75, 0x3c, 0x16, 0x68, 0xe8, 0xec, 0xef, 0xef, 0x49, 0x57, 0x3c, 0x43, 0x07, 0x51, 0xaf, 0x3f, 0xb2, 0x84, 0x02, 0xe9, 0x76, 0xa7, 0x6b, 0x7a, 0x23, 0xb1, 0x9b, 0x4c, 0x26, 0xb8, 0xb6, 0xd3, 0x58, 0xb0, 0x6a, 0x9a, 0x86, 0xe7, 0x79, 0x74, 0x7d, 0xbf, 0x51, 0x29, 0xa9, 0xff, 0x1a, 0x42, 0x43, 0x88, 0xaa, 0x69, 0x8c, 0x96, 0xcb, 0x65, 0xdd, 0x10, 0xca, 0xcf, 0x99, 0x6a, 0xfe, 0xba, 0x9d, 0x4e, 0x83, 0xfc, 0x0e, 0x06, 0x03, 0x06, 0x83, 0x41, 0x93, 0x35, 0xe0, 0x79, 0x1e, 0x97, 0x2f, 0x5f, 0x6e, 0x1a, 0x2c, 0x45, 0x02, 0x37, 0xda, 0x7a, 0x6d, 0x55, 0x30, 0x94, 0x1e, 0x5d, 0xe9, 0x2c, 0x95, 0xa1, 0x82, 0xea, 0x74, 0x9b, 0x0f, 0x60, 0xab, 0x38, 0xa9, 0x0e, 0x58, 0x7d, 0x40, 0xd5, 0x87, 0x60, 0x93, 0x30, 0xd6, 0x36, 0x99, 0xd1, 0x0d, 0x6d, 0x4d, 0x87, 0xbc, 0xb9, 0x27, 0xdd, 0x9c, 0xee, 0x37, 0xfd, 0xd2, 0x15, 0x41, 0xa0, 0xed, 0x57, 0xde, 0x2e, 0xe4, 0x6d, 0x62, 0x59, 0xdb, 0x2e, 0x56, 0x7d, 0x7f, 0xaf, 0xd7, 0xa3, 0xdb, 0xed, 0x36, 0xd3, 0x88, 0xba, 0xff, 0x2c, 0x93, 0x9d, 0xda, 0xce, 0xce, 0xce, 0xba, 0xf7, 0xf3, 0x86, 0xf9, 0x8c, 0x32, 0x38, 0xd8, 0xdc, 0xdd, 0xaf, 0x1b, 0xbc, 0x88, 0xc7, 0xfe, 0xa9, 0x5a, 0x05, 0x76, 0xf3, 0x39, 0xb4, 0xef, 0xab, 0x8d, 0xa2, 0xac, 0xf9, 0xbc, 0xeb, 0xd5, 0x99, 0x9c, 0xf2, 0x76, 0xd1, 0x6d, 0x52, 0xa3, 0xea, 0x9f, 0x6f, 0x73, 0x19, 0x0c, 0xc3, 0x60, 0x95, 0xae, 0xe7, 0xcd, 0xcb, 0x08, 0xd6, 0xed, 0x84, 0xbb, 0x4d, 0x82, 0xdb, 0xe9, 0xc4, 0x52, 0x6d, 0xfd, 0x7a, 0xb3, 0xb9, 0x6b, 0xbf, 0x8f, 0xf2, 0x79, 0x69, 0x24, 0xf1, 0x72, 0xcd, 0xbf, 0x5e, 0x21, 0x36, 0xea, 0x31, 0xab, 0x7d, 0x67, 0xfb, 0x39, 0xb4, 0xef, 0x3f, 0x2f, 0xcb, 0xda, 0x5a, 0x55, 0x7f, 0xac, 0xf9, 0x4b, 0x7b, 0x5a, 0xdf, 0x75, 0x3d, 0x1e, 0x01, 0x37, 0x5f, 0xfc, 0x0b, 0x0c, 0xd3, 0xa2, 0xd7, 0x1f, 0x73, 0xed, 0xb9, 0x6f, 0xc0, 0xf3, 0x7b, 0x5c, 0x7e, 0xea, 0x79, 0xf2, 0x3c, 0xe3, 0xe4, 0xf8, 0x1e, 0x45, 0x9e, 0xf1, 0x0f, 0x7e, 0xe1, 0x17, 0xf9, 0xfa, 0xf7, 0x3c, 0xc9, 0xfb, 0xae, 0x3c, 0xcf, 0xbb, 0x76, 0x76, 0x9a, 0xe2, 0x3e, 0x3b, 0x9e, 0x43, 0x67, 0xc4, 0x53, 0x4f, 0x19, 0xd0, 0xe9, 0x37, 0x9a, 0xea, 0x8f, 0x7d, 0xec, 0x8f, 0xf8, 0xc8, 0x47, 0x1f, 0xac, 0xc1, 0x15, 0x42, 0x93, 0xa4, 0xa2, 0xe1, 0xb0, 0xcf, 0xfe, 0xfe, 0xde, 0x99, 0x5d, 0xfb, 0xfd, 0x79, 0xdc, 0xb0, 0xdd, 0x15, 0x39, 0xee, 0xdc, 0xfe, 0x15, 0x84, 0x26, 0x88, 0x57, 0x01, 0xdf, 0x94, 0x6a, 0xcc, 0x0e, 0x27, 0xfc, 0xe1, 0x87, 0x7f, 0x87, 0xfc, 0x4f, 0x22, 0xbe, 0xfd, 0xdd, 0xdf, 0xc6, 0x73, 0xef, 0x7f, 0xf2, 0xcc, 0xf3, 0xfb, 0x67, 0xff, 0xcb, 0x3f, 0xc3, 0xf7, 0x0c, 0x9e, 0xb8, 0xdc, 0x63, 0x7f, 0xdc, 0x05, 0x24, 0x71, 0xb4, 0xd3, 0xdb, 0xad, 0x39, 0x12, 0x60, 0x9a, 0x31, 0xb3, 0xfb, 0xf3, 0xb7, 0x3c, 0xf1, 0x7f, 0xf7, 0x77, 0x8c, 0xf8, 0xf5, 0xdf, 0xb4, 0x6b, 0x29, 0xaa, 0x20, 0xcf, 0x2b, 0xca, 0x22, 0xa7, 0x40, 0x03, 0xd3, 0x42, 0x13, 0x16, 0xb6, 0x53, 0xb1, 0xb3, 0xf3, 0x0d, 0x12, 0x65, 0x78, 0xf9, 0x25, 0x8e, 0x0e, 0x0f, 0xf0, 0x7d, 0x8f, 0x2f, 0xfd, 0xf5, 0x57, 0xf8, 0xec, 0x0b, 0x0f, 0x9b, 0x09, 0xdb, 0x72, 0x06, 0x9c, 0xdf, 0x31, 0xf9, 0x8d, 0x0f, 0xff, 0x0e, 0xbd, 0x9e, 0xcd, 0x85, 0x0b, 0x1e, 0x42, 0x64, 0x94, 0xa5, 0x41, 0x55, 0xcb, 0xa6, 0x14, 0x6a, 0xa7, 0xa2, 0x51, 0xdb, 0xb0, 0x3a, 0xb0, 0xc6, 0x72, 0x6f, 0x1b, 0xd4, 0x54, 0xd6, 0xb5, 0xfa, 0x2c, 0xb0, 0xa8, 0x04, 0x4c, 0xa7, 0x53, 0x96, 0x51, 0x9d, 0xe9, 0x5d, 0xce, 0x99, 0x4c, 0x02, 0x8a, 0x02, 0xbe, 0xed, 0x5b, 0x3f, 0xc8, 0x57, 0x5e, 0xfa, 0xbd, 0x06, 0xde, 0xd7, 0x75, 0x9d, 0xbb, 0x77, 0xef, 0xd6, 0x8e, 0x78, 0xa7, 0xa4, 0x22, 0xa5, 0x04, 0xb1, 0x6d, 0x9b, 0xa4, 0xb6, 0xf2, 0x14, 0x42, 0x60, 0xd5, 0x53, 0x7f, 0xd3, 0xdc, 0x6b, 0xf2, 0x3a, 0x54, 0x3f, 0x7b, 0x74, 0x34, 0x91, 0x3b, 0x63, 0x4d, 0xa2, 0x76, 0xdd, 0x6e, 0x97, 0x30, 0x5c, 0x35, 0xba, 0x78, 0x75, 0x6d, 0xcb, 0x44, 0xaf, 0x21, 0x8e, 0xe3, 0xb0, 0xca, 0x53, 0x69, 0x91, 0xed, 0x5a, 0x18, 0xb6, 0x81, 0x61, 0xe9, 0x2c, 0x23, 0x59, 0x64, 0x5d, 0xdf, 0x25, 0x8e, 0xe4, 0xf9, 0xe2, 0xf9, 0x3e, 0x3b, 0x3b, 0x63, 0xaa, 0xa2, 0xe4, 0xf8, 0x78, 0x22, 0xd9, 0xf0, 0xd1, 0x0a, 0xab, 0xde, 0x41, 0xc7, 0x69, 0x8a, 0x89, 0x6c, 0x32, 0x6c, 0x57, 0x06, 0xcd, 0xac, 0x6a, 0x5b, 0x6a, 0x45, 0xbc, 0x15, 0x8a, 0x24, 0x6c, 0x18, 0x94, 0x99, 0x74, 0xf5, 0x53, 0xa9, 0x66, 0xba, 0xae, 0x53, 0xe5, 0x85, 0x94, 0xd2, 0x6a, 0x1a, 0xcb, 0xa5, 0xf4, 0x4d, 0x4f, 0x83, 0xe5, 0x9a, 0x94, 0xd7, 0xb2, 0x2c, 0x56, 0xab, 0x15, 0x93, 0x93, 0x13, 0x26, 0x93, 0x09, 0x17, 0x2e, 0xec, 0xaf, 0x05, 0xab, 0xf4, 0x7a, 0x3d, 0xca, 0xaa, 0xe2, 0xe1, 0xc3, 0x87, 0x1c, 0x1f, 0x1f, 0x33, 0x1e, 0xee, 0x60, 0x39, 0x36, 0xbd, 0x7e, 0x9f, 0x52, 0x40, 0x90, 0xac, 0x48, 0xe2, 0x18, 0xa3, 0x96, 0xd7, 0x46, 0x8b, 0x88, 0xd1, 0x68, 0x84, 0xeb, 0xba, 0x1c, 0x1e, 0x1e, 0xf2, 0xd9, 0xcf, 0x7e, 0xb6, 0x51, 0x1a, 0xec, 0xed, 0xed, 0x71, 0xf4, 0xe8, 0xa8, 0x7e, 0xaf, 0x34, 0x3c, 0xcf, 0xa1, 0xb3, 0xef, 0x61, 0x9a, 0x36, 0x86, 0x26, 0x51, 0xa3, 0x20, 0x3b, 0x20, 0xcb, 0xa4, 0xa6, 0x3d, 0x4e, 0xa5, 0x1c, 0x5a, 0x47, 0x30, 0x9d, 0x16, 0x94, 0x65, 0x80, 0x53, 0x18, 0x9c, 0xdb, 0xdd, 0xc3, 0xd4, 0xf5, 0x06, 0xca, 0xde, 0x35, 0x74, 0x3c, 0xdf, 0x63, 0x47, 0xc0, 0x24, 0x3b, 0x6a, 0xde, 0x5f, 0xdb, 0x36, 0xb1, 0x84, 0x89, 0xe7, 0xb8, 0x50, 0x50, 0xb3, 0xff, 0x33, 0x8a, 0xa2, 0x44, 0xa3, 0xc0, 0x76, 0x1d, 0x5c, 0xd3, 0xa5, 0x12, 0x15, 0x59, 0x99, 0xa1, 0x1b, 0x06, 0xf3, 0xd9, 0x82, 0x41, 0xbf, 0xdf, 0x38, 0xa0, 0x3a, 0x8e, 0x74, 0xc4, 0xcb, 0xe2, 0xa4, 0xf1, 0xe1, 0xbf, 0x7d, 0xfb, 0x36, 0x87, 0x87, 0x87, 0x0c, 0x6b, 0x1e, 0x82, 0xef, 0x4b, 0xbe, 0x86, 0x5a, 0x71, 0xaa, 0xeb, 0x5e, 0x0d, 0x93, 0x6a, 0xb0, 0x9c, 0xcf, 0xa5, 0x26, 0x5e, 0x71, 0x0b, 0x8e, 0xeb, 0x6c, 0xfb, 0xdd, 0xdd, 0x5d, 0x56, 0xab, 0x15, 0xaf, 0xbe, 0xfa, 0x2a, 0x6e, 0xcb, 0x5e, 0x3d, 0x4d, 0x53, 0x59, 0xd0, 0xa3, 0x28, 0x6a, 0x99, 0x60, 0x9c, 0x76, 0x80, 0xaa, 0x58, 0xb6, 0xa7, 0xc3, 0x30, 0x0c, 0xcf, 0x40, 0xd3, 0x0d, 0x41, 0xa9, 0xee, 0x5a, 0x1d, 0xcb, 0x42, 0xaf, 0x73, 0xc6, 0xa3, 0x28, 0x5a, 0xb3, 0x7f, 0x55, 0xa4, 0x92, 0x22, 0xcb, 0x58, 0x85, 0x61, 0x53, 0xf4, 0xaa, 0xb2, 0x24, 0xaf, 0x0a, 0x32, 0x34, 0x4c, 0xcd, 0x80, 0xb2, 0x22, 0x8b, 0xe5, 0x03, 0x6c, 0x8a, 0x70, 0xa5, 0x0c, 0x68, 0xcc, 0xb5, 0x49, 0x5b, 0xfd, 0xbb, 0xba, 0xb0, 0x94, 0xc1, 0x85, 0xf2, 0x63, 0x6e, 0x7f, 0x4f, 0x9b, 0x5d, 0x2f, 0x0d, 0x20, 0xaa, 0x1a, 0x56, 0x3c, 0xdd, 0xad, 0xab, 0x66, 0xc4, 0xb2, 0x2c, 0xa2, 0x28, 0x5a, 0x7b, 0xbe, 0xea, 0xf7, 0xaa, 0x82, 0xd2, 0xe9, 0x74, 0xd6, 0xa4, 0x7a, 0x50, 0xa1, 0xd5, 0xfa, 0x72, 0x4d, 0x13, 0x54, 0x85, 0x84, 0xee, 0x36, 0xe5, 0x7b, 0x4d, 0xc1, 0xd3, 0x68, 0x24, 0x34, 0x0a, 0x42, 0x17, 0xba, 0xa0, 0x2a, 0x2b, 0x8a, 0x52, 0x4a, 0xce, 0xd2, 0x34, 0xa5, 0xca, 0x4e, 0x1d, 0xf3, 0x2a, 0x51, 0x81, 0x90, 0xdf, 0x97, 0x17, 0x79, 0xf3, 0xba, 0x6f, 0x12, 0x07, 0x65, 0xc4, 0x9e, 0x25, 0x1f, 0x47, 0x95, 0x51, 0x96, 0xf2, 0x31, 0x49, 0xb9, 0x9f, 0x84, 0xc8, 0xb4, 0xaa, 0xa2, 0xca, 0x33, 0x8a, 0xb2, 0x1d, 0xe3, 0x5a, 0x3b, 0xcb, 0x51, 0xd5, 0xef, 0x4d, 0xd5, 0xec, 0xde, 0x64, 0x10, 0x85, 0x90, 0x39, 0xe7, 0x54, 0xc8, 0x5f, 0xbb, 0xb1, 0x8a, 0x41, 0x86, 0xbe, 0xac, 0xf1, 0x2c, 0x44, 0x25, 0xf9, 0x12, 0x45, 0xba, 0x46, 0xce, 0xdb, 0xf4, 0x70, 0x6f, 0x4b, 0x0a, 0x15, 0xfc, 0xd4, 0x76, 0x0c, 0x54, 0x0d, 0xa6, 0xf2, 0x32, 0xd0, 0xb5, 0x02, 0x51, 0xa5, 0x80, 0xfb, 0x96, 0x20, 0xf8, 0x49, 0x10, 0x70, 0xfb, 0xe4, 0xa4, 0xd6, 0xde, 0x57, 0xe4, 0x59, 0x45, 0x1a, 0x83, 0x65, 0x5b, 0x0c, 0x47, 0x97, 0x28, 0x9e, 0x4a, 0x58, 0x45, 0x0b, 0xc2, 0xa5, 0xfc, 0x9e, 0xbf, 0xf8, 0xfc, 0x2d, 0xfe, 0xe2, 0xf3, 0xb7, 0xb8, 0xf6, 0xf4, 0x05, 0x7e, 0xea, 0x5b, 0x3f, 0xc0, 0x17, 0x4f, 0x4e, 0xf8, 0xbf, 0x7e, 0xe5, 0x5f, 0x73, 0xe3, 0xb5, 0x07, 0x6f, 0xfa, 0xfb, 0x0c, 0xdd, 0xc4, 0x76, 0xfa, 0x54, 0xa5, 0xd5, 0xfc, 0xdd, 0xb5, 0x8b, 0xe3, 0x2d, 0xa9, 0x23, 0x23, 0xf6, 0xf7, 0x63, 0x59, 0xec, 0x2f, 0x5e, 0xc4, 0xd2, 0x1e, 0x91, 0xc7, 0x0f, 0x58, 0xad, 0x22, 0xe0, 0xbb, 0xb8, 0xde, 0xe9, 0x30, 0x9a, 0x4c, 0x99, 0x1c, 0x96, 0x7c, 0xf2, 0xe8, 0x33, 0x7c, 0xf2, 0x63, 0x9f, 0xe1, 0xf9, 0xaf, 0xbe, 0xce, 0x73, 0xdf, 0x7c, 0x5a, 0xd8, 0x7f, 0xe9, 0x17, 0x7f, 0x81, 0xff, 0xfe, 0xbf, 0xfb, 0x4f, 0xe9, 0x76, 0x3d, 0x4a, 0x04, 0x9a, 0x66, 0xe2, 0x78, 0x96, 0x84, 0x41, 0x2d, 0x09, 0xeb, 0x65, 0x69, 0xfa, 0x96, 0x8b, 0xb9, 0xba, 0xfd, 0xf4, 0x3f, 0xfe, 0x6f, 0xf9, 0xd9, 0x0f, 0xfd, 0x4c, 0x83, 0xce, 0x75, 0x5c, 0x43, 0x5e, 0x43, 0xac, 0xc8, 0x93, 0x88, 0x32, 0x03, 0xef, 0x52, 0x87, 0x5b, 0x37, 0x5f, 0x67, 0x38, 0xec, 0x33, 0x9b, 0x4e, 0xf9, 0x8b, 0xcf, 0xbf, 0xc6, 0xeb, 0x77, 0x0e, 0xcf, 0xdc, 0xd7, 0xc3, 0x93, 0x8c, 0x7f, 0xf8, 0xc3, 0x3f, 0xcc, 0x1f, 0x7d, 0xe2, 0xff, 0xa1, 0xe3, 0x76, 0xb0, 0x4d, 0x9d, 0x4c, 0xe8, 0xcc, 0x8e, 0x8f, 0x59, 0x2c, 0x16, 0xd2, 0x2a, 0xd3, 0x76, 0xc8, 0x32, 0xc1, 0x33, 0x9d, 0x21, 0xe9, 0x83, 0x57, 0x6a, 0xff, 0x76, 0xb1, 0x55, 0xfa, 0xa6, 0xbe, 0x7e, 0xfd, 0xce, 0x21, 0xdf, 0xf8, 0x4d, 0x3f, 0xc4, 0xc7, 0x3f, 0xfe, 0x21, 0xaa, 0x0a, 0x3c, 0xcf, 0xa6, 0xe3, 0xf9, 0x98, 0xa6, 0xc9, 0xbd, 0x07, 0x87, 0x74, 0x3a, 0x26, 0x51, 0x94, 0x71, 0xf1, 0xe2, 0x45, 0xfe, 0xf0, 0x63, 0x77, 0x49, 0x92, 0x0a, 0xdf, 0x37, 0x39, 0x77, 0xee, 0x1c, 0xe7, 0x76, 0x77, 0x1a, 0xa9, 0x51, 0x96, 0xc7, 0x72, 0xb5, 0x50, 0x48, 0x43, 0xac, 0xc1, 0x4e, 0x8f, 0xd9, 0xc9, 0x82, 0x4a, 0x2b, 0x28, 0xab, 0x0a, 0xdf, 0x97, 0x7b, 0x5b, 0xdf, 0xed, 0x36, 0x83, 0x8b, 0xd9, 0xf3, 0xb8, 0x71, 0xe3, 0x0e, 0x7b, 0x7b, 0x7d, 0xcc, 0x9e, 0x83, 0x25, 0x04, 0x7a, 0xc7, 0x60, 0x7e, 0xb2, 0x20, 0xcd, 0x33, 0xba, 0x23, 0x97, 0x28, 0x0a, 0xd8, 0x3d, 0xb7, 0xcb, 0x72, 0x09, 0xe3, 0xf1, 0x98, 0xfb, 0xf7, 0xef, 0x63, 0x77, 0x7d, 0x52, 0x22, 0x74, 0x47, 0x36, 0xad, 0x95, 0x06, 0x95, 0xa1, 0x93, 0x14, 0x99, 0x9c, 0xa6, 0x35, 0x41, 0x5a, 0x56, 0xa0, 0xe9, 0x18, 0x42, 0x23, 0x4e, 0x73, 0x1e, 0xde, 0x7f, 0x40, 0x95, 0xe6, 0x90, 0x17, 0xb8, 0x08, 0x74, 0x4d, 0x50, 0xe6, 0x19, 0xba, 0x80, 0x8e, 0x6b, 0x52, 0x14, 0x29, 0xba, 0x61, 0x31, 0xdc, 0x93, 0x72, 0x3d, 0xcd, 0x96, 0x2b, 0x07, 0x0b, 0x0d, 0xa3, 0xa8, 0x28, 0xb3, 0x02, 0xf2, 0x18, 0xa1, 0x1b, 0x68, 0x55, 0x85, 0x91, 0x97, 0xcc, 0x93, 0x05, 0xba, 0x69, 0x50, 0x68, 0x25, 0x99, 0x56, 0xfb, 0xad, 0x6b, 0x39, 0x96, 0x61, 0xb2, 0x4c, 0x23, 0xf6, 0xdd, 0x1e, 0xa6, 0xae, 0x73, 0xb2, 0x4a, 0xa9, 0x56, 0x29, 0x44, 0x2b, 0xf4, 0x3c, 0xc3, 0x14, 0xe0, 0xf7, 0x7b, 0x8c, 0x77, 0xfb, 0x08, 0x5d, 0xe3, 0xf0, 0xe8, 0x18, 0xcc, 0x8a, 0x38, 0x4d, 0x28, 0x56, 0x19, 0x45, 0xee, 0xf2, 0xec, 0x33, 0xd7, 0xe4, 0x64, 0xd9, 0xed, 0xd0, 0xeb, 0x76, 0x79, 0xf8, 0xf0, 0x21, 0x1d, 0x4d, 0x60, 0xda, 0x26, 0x49, 0x1a, 0xe1, 0x78, 0x2e, 0x97, 0x2f, 0x49, 0x05, 0x80, 0xe1, 0xd8, 0xf4, 0xaf, 0x5e, 0x21, 0x0c, 0x43, 0x0e, 0x0e, 0x0e, 0x38, 0x99, 0x45, 0x18, 0x06, 0x64, 0x05, 0x74, 0xbb, 0x76, 0x33, 0xb1, 0x1a, 0x06, 0x0c, 0x87, 0x1e, 0xab, 0xd5, 0x8a, 0xd7, 0x5f, 0xbf, 0x47, 0x62, 0xc3, 0xb9, 0x27, 0xfb, 0x94, 0xba, 0x4c, 0x26, 0xec, 0x38, 0x36, 0x55, 0x51, 0x72, 0xe9, 0xa2, 0xcf, 0x13, 0x97, 0xaf, 0x90, 0x26, 0x15, 0xbd, 0x1d, 0x69, 0x67, 0xbc, 0x32, 0x6a, 0x34, 0xb2, 0xeb, 0x32, 0x8d, 0x42, 0xee, 0x3f, 0xb8, 0x0f, 0xfd, 0x14, 0xa1, 0x0b, 0x59, 0x93, 0xa8, 0x48, 0xc9, 0x11, 0x86, 0xf4, 0xe2, 0xcf, 0x28, 0xd1, 0x0d, 0x1b, 0xad, 0x2c, 0x09, 0xc3, 0x90, 0xe3, 0xc9, 0xbc, 0x29, 0xd8, 0x8e, 0x56, 0x11, 0x2e, 0x42, 0x7a, 0x8e, 0xc7, 0xc9, 0xc1, 0x11, 0x96, 0x65, 0xe1, 0x39, 0x3e, 0xb3, 0xa3, 0x29, 0xcb, 0xa3, 0x45, 0x4d, 0x64, 0x2b, 0x59, 0xe6, 0x09, 0xc3, 0xd1, 0x39, 0xce, 0x5f, 0x7a, 0x82, 0x38, 0x89, 0x98, 0xcf, 0xe7, 0x4c, 0x83, 0xc5, 0xe9, 0xb0, 0xd6, 0xb1, 0x89, 0x28, 0xf0, 0x46, 0x03, 0xca, 0xa2, 0x90, 0xd9, 0xf2, 0xa6, 0x45, 0x9a, 0x24, 0xd8, 0x86, 0xc9, 0x83, 0xdb, 0x0f, 0xe8, 0x74, 0x5c, 0x4c, 0xcf, 0xc1, 0xf5, 0x3c, 0xb0, 0x0c, 0x8e, 0xa3, 0x25, 0x99, 0x01, 0xa3, 0xa7, 0x2e, 0x23, 0x62, 0x19, 0x52, 0x93, 0x65, 0x29, 0xbd, 0x7e, 0x8f, 0x9d, 0xfe, 0x00, 0xf1, 0xcd, 0xef, 0xfb, 0xcf, 0x2a, 0x45, 0xec, 0x50, 0x0e, 0x6f, 0x6d, 0xf7, 0xa4, 0x6d, 0x90, 0xee, 0x66, 0x98, 0x4a, 0xbb, 0xc8, 0x6d, 0x5a, 0xc3, 0xb6, 0x61, 0xf0, 0xb6, 0xd7, 0x79, 0x1b, 0x01, 0x48, 0x53, 0x29, 0xe6, 0x57, 0x3a, 0x70, 0x45, 0x90, 0x68, 0xfb, 0x93, 0xb7, 0x59, 0xf8, 0x6a, 0xe7, 0xb1, 0x5d, 0xeb, 0x7c, 0xf6, 0xf1, 0xb5, 0x25, 0x6b, 0x6d, 0xaf, 0xf9, 0xbc, 0x86, 0xda, 0x6c, 0xdb, 0x5e, 0x2b, 0xd6, 0x8d, 0x93, 0x5a, 0x4b, 0x9b, 0xdf, 0x76, 0x84, 0x53, 0x85, 0xaa, 0x31, 0xc8, 0xa9, 0x9f, 0x93, 0x6a, 0x1e, 0x8c, 0x16, 0x13, 0xb6, 0xbd, 0xa3, 0x6e, 0xef, 0xc8, 0xa5, 0x8e, 0xbd, 0x3a, 0xc3, 0x84, 0x6f, 0x4f, 0xc5, 0xca, 0x36, 0x51, 0x75, 0xc7, 0x6a, 0x1d, 0xa1, 0xee, 0x33, 0x88, 0x83, 0xad, 0x84, 0xba, 0x46, 0x6f, 0x9a, 0x46, 0x6b, 0x1c, 0x87, 0x4d, 0xe2, 0xdc, 0xa6, 0xbd, 0xea, 0xe3, 0x88, 0x7c, 0x8f, 0x7b, 0x9d, 0x75, 0x33, 0x7f, 0xac, 0x42, 0xe1, 0x0c, 0x3c, 0xbf, 0x45, 0x9a, 0x47, 0x71, 0x6a, 0x05, 0xdc, 0x7e, 0x7d, 0xda, 0x85, 0x7e, 0x9b, 0xfb, 0xdf, 0x29, 0xcf, 0xa0, 0x60, 0x31, 0x3b, 0xe2, 0x3f, 0x79, 0xd2, 0x6d, 0x42, 0x55, 0xde, 0xec, 0xf6, 0x89, 0xbd, 0x3d, 0x6e, 0xdc, 0x0b, 0xe8, 0xf4, 0x76, 0xd0, 0x35, 0x1f, 0xcf, 0xef, 0xa1, 0x9b, 0x92, 0x21, 0x1b, 0x2e, 0x8f, 0x79, 0xf5, 0xa5, 0xbf, 0x60, 0x31, 0x3d, 0x64, 0x15, 0x2d, 0xb7, 0x26, 0xa5, 0xbd, 0xf9, 0x4d, 0xa0, 0x1b, 0x26, 0xc3, 0x9d, 0x8b, 0x5c, 0x7e, 0xea, 0xdd, 0x98, 0x96, 0xcd, 0xb7, 0x7c, 0xed, 0x25, 0x8e, 0x0f, 0x1f, 0x9d, 0xd1, 0xaa, 0xab, 0x0c, 0x76, 0xc5, 0x7c, 0xff, 0x9a, 0x67, 0xaf, 0xf0, 0xcb, 0xbf, 0xfd, 0xab, 0xb8, 0xae, 0x64, 0xe2, 0xfe, 0x0f, 0xdf, 0xfc, 0x7d, 0xe8, 0x75, 0x54, 0xea, 0xe6, 0x1a, 0xe1, 0xf6, 0x9e, 0x4c, 0x88, 0xfb, 0x96, 0xef, 0x7c, 0x2f, 0xee, 0x70, 0xb7, 0x49, 0x49, 0x7b, 0xdc, 0xed, 0x27, 0xfe, 0xc9, 0xcf, 0xf2, 0x2b, 0xbf, 0xf8, 0x3f, 0xfd, 0x7b, 0xa9, 0x02, 0x7e, 0xff, 0xe3, 0x13, 0x7e, 0xf9, 0x17, 0xfe, 0x67, 0x4c, 0x2b, 0x6a, 0x1a, 0x60, 0xdf, 0xf7, 0x09, 0x82, 0x05, 0xd1, 0xaa, 0xe0, 0x9b, 0xde, 0xf7, 0xe3, 0x24, 0xc1, 0x94, 0x4b, 0x97, 0xc6, 0xdc, 0xbb, 0x77, 0xcc, 0xed, 0x07, 0x47, 0x67, 0x60, 0x73, 0x35, 0xad, 0x5f, 0xbd, 0xb0, 0x8b, 0xdd, 0x91, 0x7b, 0x76, 0x45, 0x7e, 0x53, 0xfe, 0xec, 0x00, 0x9f, 0xfa, 0xd3, 0x0f, 0xf1, 0xcd, 0xef, 0xfb, 0x47, 0x67, 0xc2, 0x5d, 0x80, 0x35, 0x3d, 0x7a, 0xbb, 0xc0, 0xa7, 0xf4, 0x79, 0xe2, 0xca, 0x1e, 0x22, 0x3d, 0xe2, 0xd5, 0xdb, 0xaf, 0xa2, 0x55, 0x37, 0xa5, 0x3b, 0x65, 0x2a, 0x77, 0xf3, 0x27, 0x27, 0x27, 0xcd, 0xf5, 0xd4, 0xeb, 0xf5, 0x9a, 0x09, 0xb6, 0x72, 0x4e, 0x89, 0xb4, 0xb6, 0xe7, 0xca, 0xfd, 0x6f, 0xfd, 0x59, 0x75, 0x1c, 0x07, 0x53, 0xb7, 0x65, 0x78, 0x46, 0x18, 0x32, 0xec, 0x49, 0x5f, 0x76, 0x0d, 0xc1, 0xfd, 0xfb, 0x0f, 0x39, 0x3e, 0x9e, 0x91, 0x0b, 0xc8, 0x73, 0x78, 0xfa, 0xe9, 0xdd, 0xe6, 0x9a, 0x1e, 0x0c, 0x06, 0xac, 0x56, 0x2b, 0x7a, 0xbd, 0x1e, 0xa6, 0xd0, 0x1a, 0xd3, 0x24, 0xf5, 0xb9, 0x55, 0xab, 0x3c, 0x21, 0x04, 0x39, 0x35, 0xca, 0x27, 0x90, 0x86, 0x4f, 0xba, 0x4e, 0x92, 0x49, 0x84, 0x40, 0xb7, 0x4c, 0xb4, 0xbc, 0x44, 0xab, 0xa4, 0xb5, 0xab, 0xad, 0x1b, 0xd8, 0x9a, 0x81, 0xa5, 0xe9, 0xd4, 0x3d, 0x3d, 0xf7, 0xe3, 0x49, 0xd3, 0xe8, 0xb7, 0xcf, 0x39, 0x75, 0xf6, 0x28, 0x09, 0xae, 0xf8, 0xff, 0x39, 0x7b, 0xf3, 0x18, 0xd9, 0xb2, 0xfb, 0xbe, 0xef, 0x73, 0xce, 0x5d, 0x6b, 0xaf, 0xea, 0xed, 0xf5, 0x5b, 0xe6, 0xbd, 0x59, 0x39, 0x43, 0x52, 0x9c, 0x91, 0x48, 0xc9, 0xa2, 0x65, 0x2a, 0xb4, 0x6c, 0x85, 0x8c, 0x1c, 0x41, 0xb2, 0x11, 0xc0, 0x8e, 0xe5, 0x05, 0x70, 0x02, 0x1b, 0x4e, 0x0c, 0x38, 0x4e, 0x8c, 0x18, 0xf9, 0xc3, 0x89, 0x99, 0xc4, 0x06, 0x02, 0x24, 0x7f, 0x64, 0x03, 0x62, 0xe4, 0x8f, 0x04, 0x86, 0xad, 0xd8, 0x4e, 0xe0, 0x4d, 0x96, 0x4d, 0x93, 0xa6, 0x2d, 0x32, 0x22, 0xc5, 0x45, 0x94, 0x2c, 0x0e, 0x87, 0xe4, 0x70, 0xde, 0xcc, 0x90, 0x33, 0xf3, 0x96, 0x7e, 0xbd, 0x56, 0xd7, 0x76, 0xf7, 0x73, 0xf2, 0xc7, 0xb9, 0xe7, 0xd6, 0xa9, 0xdb, 0xf5, 0x66, 0x46, 0xa9, 0x41, 0x63, 0xba, 0xfb, 0x55, 0x57, 0xdd, 0xaa, 0xba, 0xf7, 0xfc, 0xce, 0xef, 0xfb, 0xfb, 0x2e, 0x9a, 0x46, 0x0e, 0x16, 0x7a, 0x3e, 0x79, 0x9e, 0xb3, 0x5a, 0xad, 0x08, 0xe2, 0xc8, 0x84, 0xbd, 0x68, 0x4d, 0x25, 0x9c, 0x35, 0x01, 0x01, 0x4a, 0x93, 0x9f, 0x4c, 0x99, 0x8c, 0x46, 0x14, 0x59, 0x8e, 0xd0, 0xb0, 0x7f, 0xed, 0x00, 0x2f, 0xf0, 0x49, 0xcb, 0x82, 0xfe, 0x68, 0x48, 0x96, 0xcc, 0x90, 0x51, 0xc0, 0x6c, 0x6e, 0x62, 0x5b, 0xa3, 0xd0, 0x48, 0xdf, 0x42, 0xdf, 0x67, 0x32, 0xda, 0x21, 0xf4, 0x03, 0xd2, 0xe5, 0xa2, 0xf6, 0x31, 0xcf, 0x39, 0x9d, 0x9e, 0x72, 0x39, 0x9b, 0xa1, 0x7d, 0xc1, 0xcd, 0x3b, 0xb7, 0x59, 0xbe, 0x3d, 0x6f, 0xdc, 0x38, 0xc7, 0xe3, 0x31, 0xdd, 0x6e, 0xb7, 0x61, 0xf5, 0x6b, 0xad, 0x59, 0xa5, 0x29, 0xbb, 0xbb, 0xbb, 0x46, 0x09, 0x50, 0x2b, 0x06, 0xd2, 0x34, 0xe5, 0xfc, 0xfc, 0x9c, 0x77, 0xde, 0x79, 0xc8, 0xe0, 0x66, 0xbf, 0x8e, 0x2f, 0x0d, 0x29, 0xb3, 0x9c, 0x4e, 0x1c, 0xa3, 0x2b, 0xc5, 0x74, 0x3a, 0x25, 0xf2, 0x03, 0x26, 0xe3, 0x03, 0x92, 0x24, 0x31, 0xb5, 0xa6, 0x13, 0x9b, 0x6e, 0xd7, 0x93, 0x35, 0x29, 0xf2, 0x9c, 0xce, 0x61, 0xed, 0x0f, 0x82, 0x87, 0xd4, 0x1e, 0x52, 0x0b, 0x84, 0x96, 0x48, 0x5d, 0x7b, 0xab, 0x94, 0xba, 0x41, 0x0e, 0xb3, 0x3a, 0xb9, 0xcf, 0x12, 0x8d, 0xcb, 0xb2, 0xa4, 0x1b, 0x9a, 0x91, 0x8d, 0xe7, 0x79, 0x14, 0x59, 0xc9, 0xe9, 0xe9, 0x29, 0x52, 0xfa, 0x5c, 0xdb, 0xdb, 0x37, 0xaf, 0xa5, 0x76, 0x0c, 0x34, 0x46, 0x33, 0xa6, 0xc9, 0x5d, 0xa6, 0xcb, 0x06, 0x21, 0x5a, 0x16, 0x05, 0x93, 0xe1, 0x88, 0x4e, 0x14, 0x93, 0xac, 0x56, 0xac, 0x2e, 0xe7, 0x54, 0xb9, 0x89, 0x7b, 0x55, 0x65, 0xc5, 0x64, 0x38, 0x32, 0xe3, 0x1f, 0xad, 0xe8, 0x0c, 0xfa, 0x8c, 0x26, 0x63, 0xd2, 0xb2, 0x60, 0x3a, 0xbb, 0x24, 0x2b, 0x0b, 0xaa, 0x45, 0x62, 0x64, 0x79, 0x69, 0xc6, 0x7c, 0x3e, 0x67, 0x6f, 0xb2, 0x83, 0x6f, 0x8d, 0x11, 0x6c, 0xa7, 0x6e, 0x8b, 0x6a, 0x1c, 0xc7, 0x8d, 0x8c, 0xc3, 0x5d, 0x88, 0xdb, 0x89, 0x58, 0xae, 0x4e, 0xbc, 0x2d, 0x43, 0xb3, 0x1d, 0xb3, 0x2d, 0x44, 0xee, 0xe3, 0xd8, 0x44, 0xb5, 0xc7, 0x49, 0xa4, 0xdc, 0x4d, 0x80, 0x8d, 0x63, 0x75, 0x7d, 0xde, 0xdd, 0xce, 0xf9, 0x71, 0x45, 0xc9, 0x16, 0x04, 0xfb, 0x9c, 0x96, 0x0b, 0x60, 0x7f, 0xd7, 0xde, 0x6c, 0x6c, 0x32, 0xec, 0xb7, 0x87, 0xbe, 0xd8, 0x0e, 0xd2, 0x16, 0x74, 0x2b, 0xc9, 0x70, 0xdd, 0xf5, 0xda, 0x12, 0xc0, 0x76, 0x68, 0x4a, 0x93, 0xbe, 0x56, 0xa7, 0xee, 0x58, 0x9e, 0x42, 0xbb, 0xf0, 0x2e, 0x97, 0xcb, 0x0d, 0x42, 0x9e, 0xbd, 0x78, 0x5d, 0x85, 0x81, 0xdb, 0x91, 0xbb, 0xe3, 0x0d, 0x97, 0xb0, 0xe8, 0xce, 0xec, 0xb7, 0xe9, 0xea, 0xdb, 0xb1, 0xa5, 0xae, 0x72, 0x60, 0x9b, 0x1d, 0x6b, 0x53, 0xb8, 0x31, 0x51, 0x85, 0x68, 0x1a, 0xb9, 0x91, 0xa8, 0xe1, 0xf4, 0xc6, 0x75, 0xce, 0xe6, 0xa8, 0xd4, 0xff, 0x19, 0x92, 0x9c, 0xd1, 0xa5, 0xa2, 0x45, 0x93, 0x1b, 0x6f, 0x9e, 0x53, 0xd0, 0x30, 0xfd, 0x10, 0xf5, 0xcc, 0xd6, 0x43, 0x08, 0xd9, 0x8c, 0x82, 0x2c, 0x6a, 0x64, 0x63, 0x12, 0x79, 0x9f, 0xe1, 0x6e, 0xbb, 0x9e, 0xa4, 0x7a, 0xee, 0x19, 0x3e, 0xb6, 0x3f, 0xe2, 0xfe, 0xf4, 0x88, 0xfe, 0xf0, 0x00, 0x29, 0xfd, 0x26, 0xa7, 0x5a, 0x08, 0x4d, 0xa7, 0x37, 0xe0, 0xd9, 0x0f, 0xfe, 0x38, 0x8b, 0xd9, 0x19, 0xef, 0xbc, 0xf9, 0x1d, 0x2e, 0x4e, 0x8f, 0x9a, 0x4c, 0xf2, 0xf7, 0x2e, 0xe2, 0x3e, 0x51, 0xdc, 0xc7, 0x93, 0x01, 0x9d, 0xee, 0x90, 0x27, 0x9e, 0x7c, 0x91, 0xf1, 0xee, 0x3e, 0xe9, 0x72, 0xca, 0xe9, 0xf1, 0x91, 0x21, 0x36, 0xb5, 0x48, 0x74, 0xab, 0xc5, 0x62, 0x03, 0x86, 0xff, 0xf6, 0x0f, 0xa6, 0x7c, 0xf4, 0xa3, 0x3f, 0xcf, 0x3b, 0xf7, 0xbe, 0x80, 0xf4, 0xc4, 0x63, 0x5f, 0x07, 0x60, 0xba, 0xf6, 0x4a, 0xf1, 0xd6, 0x2f, 0xff, 0xf3, 0x35, 0x03, 0xff, 0xce, 0x01, 0xe3, 0xbd, 0x11, 0x9d, 0x89, 0x21, 0xcf, 0xb8, 0x45, 0x5e, 0x29, 0xdd, 0x58, 0xbb, 0xfe, 0x6e, 0x3b, 0xf5, 0x9f, 0xfb, 0xd9, 0x5d, 0xee, 0x88, 0x3f, 0xcb, 0xe2, 0xef, 0xfd, 0x0b, 0xf6, 0x6f, 0x74, 0x39, 0xe8, 0xf5, 0xf9, 0xd3, 0x6f, 0x7c, 0x8e, 0xf1, 0x78, 0x42, 0xa5, 0x52, 0xb2, 0xc5, 0x05, 0x6f, 0x3d, 0x38, 0x21, 0xea, 0x4f, 0x78, 0x78, 0x5e, 0x5c, 0xb1, 0x7a, 0x75, 0x67, 0xde, 0xa6, 0xd8, 0x9f, 0x6c, 0x79, 0x96, 0x93, 0xa6, 0x89, 0x00, 0xb8, 0xbe, 0x17, 0x71, 0xb6, 0xe8, 0xd4, 0x1a, 0xf6, 0x9c, 0x97, 0x5e, 0x7c, 0x81, 0xd5, 0x6a, 0xb1, 0xe1, 0xef, 0x6e, 0x8b, 0x7a, 0xc8, 0x25, 0x0f, 0xde, 0x36, 0x3f, 0x7b, 0xd1, 0x33, 0xc0, 0x33, 0x78, 0xc0, 0xed, 0x83, 0x84, 0xb7, 0xef, 0x7d, 0x91, 0x6e, 0xb7, 0x07, 0x78, 0x4c, 0x26, 0x43, 0xca, 0xd2, 0x74, 0x35, 0xf7, 0xee, 0x1d, 0x71, 0xf0, 0xc4, 0x08, 0xe9, 0x7b, 0x4d, 0x92, 0xd7, 0xe9, 0xe9, 0x29, 0x5a, 0x6b, 0xae, 0x1d, 0x1e, 0x32, 0x1c, 0x0e, 0x79, 0xf3, 0xf5, 0x1f, 0xd4, 0x45, 0x38, 0x47, 0x28, 0xcd, 0x62, 0xb1, 0x42, 0x68, 0xb8, 0xb8, 0x98, 0x92, 0x65, 0x30, 0xd8, 0x31, 0x1b, 0x9b, 0xd1, 0x68, 0xc4, 0x7c, 0x3e, 0xa7, 0x28, 0x0a, 0x63, 0x1a, 0x72, 0x71, 0x61, 0xd0, 0xcc, 0x34, 0x6b, 0x36, 0x0f, 0x7b, 0x7b, 0x7b, 0x4c, 0xa7, 0x53, 0x76, 0x76, 0x76, 0x8c, 0xa9, 0x4c, 0xa7, 0x83, 0x10, 0x35, 0x2a, 0x5a, 0xd5, 0x68, 0xa3, 0xb3, 0xf6, 0xd8, 0x1c, 0x74, 0x83, 0x4e, 0x42, 0x28, 0x0d, 0x11, 0x2f, 0x0e, 0x42, 0x74, 0xa5, 0x50, 0x75, 0x01, 0xb7, 0xa3, 0x45, 0x8b, 0xa2, 0xda, 0x62, 0x11, 0x86, 0x26, 0xcc, 0x44, 0x1b, 0x7d, 0x68, 0x23, 0x1f, 0x0b, 0xa4, 0xb7, 0x61, 0xb7, 0x5d, 0x34, 0x90, 0xfc, 0x7a, 0xac, 0x59, 0x95, 0x15, 0x55, 0x51, 0xb2, 0xbb, 0xbb, 0xcb, 0xce, 0x78, 0x4c, 0x91, 0xe5, 0x0d, 0xb9, 0x6d, 0x75, 0x99, 0x91, 0x64, 0x29, 0x17, 0x8b, 0x19, 0xd7, 0xf7, 0x27, 0x1b, 0xd7, 0x5f, 0xa5, 0x15, 0x2a, 0xcf, 0x99, 0x9e, 0x9f, 0x73, 0xff, 0xde, 0x43, 0xf6, 0xf7, 0xf6, 0xf0, 0xa5, 0x69, 0xce, 0x66, 0xb3, 0x19, 0xcb, 0x6c, 0x49, 0x18, 0x47, 0x10, 0x48, 0x92, 0x24, 0xe1, 0xc5, 0x17, 0x5f, 0x34, 0x04, 0xb2, 0x9a, 0xa9, 0xed, 0xfa, 0x9f, 0xa4, 0x69, 0x4a, 0x1c, 0xc7, 0x2c, 0x16, 0x0b, 0x43, 0xaa, 0xab, 0xd7, 0xcd, 0xe1, 0x70, 0xc8, 0xf3, 0xcf, 0x3f, 0xcf, 0x07, 0x3e, 0xf0, 0x01, 0x5e, 0x3b, 0x7a, 0xc3, 0xc0, 0xed, 0xab, 0x04, 0xcf, 0x59, 0xbb, 0xc2, 0x30, 0xe4, 0xf8, 0xe8, 0x98, 0xef, 0xbc, 0x72, 0x62, 0x98, 0xea, 0x13, 0x78, 0xea, 0xd9, 0xa7, 0xcd, 0x78, 0x55, 0x8a, 0xa6, 0x51, 0xab, 0xbc, 0x9a, 0xb4, 0x5d, 0x47, 0xd9, 0x59, 0x02, 0x6f, 0xdb, 0x0f, 0xc3, 0xa2, 0x83, 0x76, 0x7d, 0x6f, 0xa4, 0x6c, 0xaa, 0x34, 0xf3, 0x75, 0x6d, 0x38, 0x09, 0x79, 0xae, 0x89, 0x22, 0x8d, 0x96, 0xe6, 0x73, 0xbc, 0x9c, 0x5e, 0x1a, 0x32, 0x9c, 0x52, 0x2c, 0x96, 0xc6, 0x06, 0xdd, 0x0b, 0xd7, 0xb2, 0xe3, 0x38, 0x8e, 0x29, 0xb5, 0x32, 0x69, 0x75, 0x59, 0x8e, 0x1f, 0x06, 0xa6, 0xc0, 0xd7, 0xaa, 0x81, 0xd5, 0x62, 0xc9, 0x38, 0x32, 0xde, 0xfc, 0x22, 0xf0, 0x0d, 0x1f, 0x22, 0x59, 0x11, 0x78, 0x86, 0x28, 0x27, 0x06, 0x66, 0x96, 0x5e, 0x64, 0x06, 0xcd, 0x0e, 0x3d, 0xdf, 0xc8, 0xd6, 0xec, 0x87, 0x6b, 0x3b, 0x1f, 0xeb, 0x4d, 0xbc, 0xcd, 0xc1, 0xcc, 0x42, 0xe8, 0x96, 0x31, 0xba, 0xcd, 0x3c, 0xa5, 0xcd, 0x46, 0xde, 0x66, 0x2e, 0x63, 0x89, 0x67, 0xb6, 0x9b, 0xb5, 0xcc, 0x4c, 0x97, 0xd4, 0x66, 0xdf, 0x38, 0x0b, 0x85, 0xbb, 0x12, 0x3a, 0xb7, 0x78, 0xbb, 0x66, 0x37, 0x76, 0x26, 0xeb, 0x46, 0xa7, 0xb6, 0x19, 0xf6, 0x0d, 0xc9, 0xc9, 0x71, 0x79, 0xb2, 0x9b, 0x0c, 0x5b, 0xa8, 0x97, 0xcb, 0x65, 0xb3, 0x91, 0x70, 0x8d, 0x73, 0x5c, 0x82, 0x9c, 0xbb, 0x39, 0xd8, 0xf4, 0xef, 0xae, 0x36, 0x9c, 0xe1, 0x5c, 0x52, 0x8d, 0xfb, 0x77, 0x7e, 0xb8, 0xee, 0x4c, 0xdd, 0x51, 0x80, 0x7d, 0x4c, 0x17, 0x21, 0x69, 0x87, 0xb7, 0xd8, 0xdf, 0xb9, 0x23, 0x8f, 0x36, 0xd7, 0xc0, 0x22, 0x0f, 0xdb, 0xba, 0xef, 0xf6, 0x63, 0xb9, 0xfc, 0x04, 0x77, 0x9e, 0xef, 0x92, 0xe6, 0xec, 0x06, 0x62, 0xad, 0x8a, 0xd0, 0xef, 0x2a, 0xcf, 0x7b, 0x9c, 0xdc, 0xaf, 0x91, 0xb1, 0x39, 0x63, 0x90, 0x76, 0x06, 0xba, 0xbb, 0xa9, 0xd8, 0x26, 0x19, 0x6a, 0x48, 0x98, 0xef, 0x11, 0x02, 0x63, 0x0b, 0x5d, 0xbf, 0x2e, 0x74, 0xe3, 0xe1, 0x75, 0xfe, 0xe9, 0x37, 0x7e, 0xb9, 0x7e, 0xaf, 0x14, 0x08, 0xc7, 0xb9, 0xd0, 0x8b, 0xf0, 0x83, 0x5d, 0xba, 0xbd, 0x21, 0x7e, 0x10, 0xe1, 0xfb, 0xdf, 0x65, 0x31, 0x3f, 0x67, 0xb5, 0x9c, 0x51, 0x55, 0x56, 0x0a, 0x19, 0xd0, 0xe9, 0x0c, 0xf0, 0xbc, 0x00, 0xa5, 0xb5, 0xd9, 0xb6, 0x08, 0x88, 0xe3, 0x01, 0x87, 0x37, 0x9e, 0xa7, 0x13, 0xf7, 0x08, 0xc3, 0x88, 0x6e, 0x6f, 0x4c, 0xd4, 0x2d, 0xc8, 0xd3, 0x9c, 0xe7, 0x9e, 0xff, 0x91, 0xc6, 0x59, 0x6e, 0xe3, 0x36, 0x8a, 0xaf, 0xc0, 0xef, 0xdf, 0xfe, 0xf6, 0x1b, 0xe4, 0x45, 0x42, 0x92, 0xa6, 0xef, 0x6b, 0x93, 0xd2, 0x74, 0xee, 0xaf, 0xde, 0x85, 0x57, 0xef, 0xd2, 0xe6, 0xe6, 0xdb, 0x4e, 0xfe, 0xc1, 0x83, 0x07, 0x7c, 0xf6, 0xf3, 0x86, 0x07, 0xf0, 0xd2, 0xed, 0x03, 0x3a, 0x93, 0x7d, 0x92, 0x8b, 0x93, 0x35, 0x2f, 0xa0, 0x96, 0xce, 0xdd, 0xe9, 0x46, 0x7c, 0xe8, 0x13, 0x4f, 0x5d, 0x29, 0xfa, 0x1f, 0xfa, 0x83, 0x4f, 0xf1, 0xd5, 0xdf, 0x7a, 0x86, 0x93, 0xbb, 0x6f, 0x70, 0xd0, 0xeb, 0xb3, 0xb3, 0xb3, 0x43, 0x9a, 0x16, 0x1c, 0x9f, 0xa4, 0x57, 0xbd, 0xda, 0xe3, 0x71, 0x53, 0x88, 0xdb, 0x49, 0x69, 0xef, 0x76, 0xbb, 0x73, 0x63, 0x9f, 0xef, 0x4c, 0x25, 0xbd, 0x30, 0x61, 0x5e, 0x1b, 0xd2, 0x84, 0xe1, 0x90, 0xe7, 0x9e, 0x8d, 0x99, 0x4c, 0x46, 0xbc, 0xf9, 0xe6, 0x9b, 0x0c, 0xfa, 0x61, 0xa3, 0x6d, 0x77, 0x3b, 0xf5, 0xf6, 0xf3, 0xec, 0xf6, 0xd7, 0xd1, 0xb7, 0x79, 0xae, 0x59, 0x2c, 0x72, 0x3a, 0x9d, 0x92, 0x47, 0x8f, 0xee, 0xd3, 0xef, 0xf7, 0x39, 0x3c, 0xdc, 0x23, 0x8c, 0x3d, 0x16, 0x8b, 0x05, 0x12, 0x41, 0xa7, 0xd7, 0xa5, 0x13, 0x46, 0xc6, 0x36, 0xb9, 0x28, 0x78, 0x70, 0xff, 0x3e, 0xe3, 0xf1, 0x98, 0x20, 0x08, 0x4c, 0x46, 0xb7, 0x16, 0xc4, 0x71, 0x48, 0xaf, 0xd3, 0x37, 0x69, 0x5b, 0x52, 0x32, 0xaf, 0x39, 0x20, 0x8b, 0xc5, 0x82, 0x34, 0x4d, 0x4d, 0xcc, 0xa6, 0xe3, 0x4c, 0xd9, 0xed, 0x76, 0xd9, 0xd9, 0xd9, 0x69, 0x66, 0xa1, 0x49, 0x92, 0xb4, 0x1c, 0x19, 0xf5, 0xc6, 0x1a, 0x86, 0xb3, 0x36, 0x56, 0x5a, 0xd7, 0x84, 0xd0, 0x7a, 0x3c, 0x54, 0x77, 0xae, 0x94, 0x15, 0xba, 0x52, 0x54, 0x35, 0x72, 0x67, 0x1b, 0x1b, 0x37, 0xa1, 0xd1, 0xae, 0x19, 0xb6, 0xd3, 0xad, 0x8a, 0x35, 0xf2, 0x18, 0x07, 0xe1, 0x15, 0xa2, 0xb1, 0xeb, 0x29, 0xe1, 0x36, 0x03, 0x27, 0x67, 0xa7, 0x26, 0xda, 0xd4, 0xf7, 0x09, 0x3c, 0x13, 0xe0, 0x12, 0x12, 0x12, 0x74, 0x63, 0xc6, 0x3b, 0x13, 0xf2, 0x64, 0x8e, 0xaa, 0x37, 0x25, 0x1a, 0xa8, 0xd0, 0xf8, 0x52, 0x52, 0x09, 0x58, 0x24, 0x2b, 0xaa, 0xa3, 0x23, 0x7a, 0x3d, 0xb3, 0x86, 0x2d, 0x92, 0x15, 0x0a, 0x45, 0x27, 0x0a, 0x49, 0xcb, 0x9c, 0xf3, 0xe9, 0x05, 0xaf, 0x2f, 0x5f, 0x6f, 0xd6, 0x46, 0xdb, 0x44, 0xba, 0x08, 0xae, 0x1f, 0x86, 0x9c, 0x9d, 0x9d, 0x91, 0x24, 0x49, 0x53, 0x27, 0xb2, 0x2c, 0xe3, 0xe8, 0xe8, 0x88, 0xc5, 0x62, 0x81, 0xea, 0xaf, 0xa5, 0xd1, 0x51, 0xdc, 0xa9, 0x23, 0xa2, 0x8d, 0x76, 0x3d, 0x59, 0x2c, 0xb9, 0x75, 0x73, 0xaf, 0x41, 0x7b, 0xa7, 0xd3, 0x0b, 0xa6, 0xd3, 0x0b, 0xa2, 0x4e, 0xbc, 0x91, 0x53, 0x22, 0x84, 0x78, 0x6c, 0x53, 0xd0, 0x96, 0x59, 0x5b, 0x24, 0xd9, 0xae, 0xe1, 0x95, 0x5e, 0xf3, 0xb4, 0x7c, 0xdf, 0x67, 0xb2, 0x3b, 0xa0, 0xd7, 0xa9, 0xcd, 0x8b, 0xd0, 0xec, 0xec, 0xec, 0x30, 0x1c, 0x0e, 0x49, 0xb3, 0x8c, 0xfb, 0x0f, 0xde, 0xe1, 0xf4, 0xf4, 0x94, 0xc1, 0x78, 0x60, 0x08, 0x7b, 0x79, 0x0e, 0x75, 0xd6, 0x86, 0xa8, 0xe5, 0xbc, 0x81, 0x90, 0xa4, 0x85, 0xc9, 0x34, 0xc8, 0xb3, 0x8c, 0xe5, 0x72, 0xc9, 0xb5, 0x6b, 0xd7, 0xe8, 0xf6, 0x7a, 0xac, 0x96, 0x26, 0x6a, 0x36, 0x2b, 0x0b, 0x3a, 0xdd, 0x2e, 0xbd, 0x4e, 0x97, 0x4c, 0xd5, 0x75, 0xba, 0x34, 0xf3, 0x7b, 0x0f, 0x61, 0x64, 0x6b, 0x71, 0x1c, 0x6f, 0x3a, 0x70, 0xd5, 0x45, 0xc1, 0x0d, 0x18, 0x71, 0xe1, 0x64, 0xbb, 0xc0, 0xda, 0x0f, 0xa0, 0x2d, 0x35, 0x73, 0x4f, 0x0a, 0x4b, 0x0a, 0x69, 0xdb, 0xc4, 0xda, 0x13, 0xce, 0x42, 0xae, 0xdb, 0xba, 0x44, 0xf7, 0xbe, 0xb6, 0x93, 0x75, 0x37, 0x18, 0x6d, 0x56, 0x79, 0xbb, 0x23, 0x75, 0xed, 0x60, 0xdb, 0x79, 0xe4, 0xee, 0x49, 0xed, 0x42, 0xbd, 0xf6, 0x98, 0xad, 0x05, 0x62, 0x1b, 0x99, 0xb0, 0x8f, 0x6f, 0xe3, 0x62, 0x2d, 0x24, 0xb3, 0xcd, 0x4c, 0xc7, 0x7d, 0x0c, 0xf7, 0xb1, 0xdc, 0x24, 0x3b, 0xf7, 0xf8, 0xdd, 0xd9, 0xb2, 0x8b, 0x26, 0x58, 0x58, 0xb0, 0x6d, 0x6e, 0x23, 0xe4, 0x55, 0xe3, 0x9a, 0xcd, 0x0e, 0x5e, 0x6d, 0x2d, 0xe2, 0x6d, 0x1f, 0x01, 0xf7, 0x73, 0x6b, 0x9f, 0x07, 0xdb, 0xec, 0x68, 0x1b, 0x18, 0xdf, 0xb7, 0x9b, 0x11, 0x81, 0xd6, 0xc2, 0x31, 0xb3, 0x11, 0x5b, 0xec, 0x58, 0x45, 0x33, 0x9f, 0x6f, 0x8e, 0xa1, 0xee, 0xd4, 0x35, 0xb6, 0x30, 0xd7, 0x7d, 0xbd, 0x36, 0xf7, 0x97, 0x42, 0xa0, 0x2a, 0x33, 0x7f, 0xaf, 0x2a, 0x63, 0x1e, 0xe1, 0x7b, 0xb5, 0xa2, 0x02, 0x59, 0xa3, 0x01, 0x57, 0x33, 0x60, 0xdf, 0x3a, 0xd8, 0xe5, 0xa5, 0x9d, 0x1d, 0x46, 0x1f, 0x7b, 0x8e, 0xce, 0x64, 0x9f, 0xde, 0xf8, 0x36, 0x59, 0x2f, 0x26, 0x88, 0x77, 0x19, 0x85, 0x3e, 0x52, 0x7a, 0x48, 0xe9, 0xa3, 0x3d, 0x1b, 0x2e, 0x23, 0x41, 0x08, 0x33, 0xff, 0x97, 0x21, 0xbe, 0x17, 0xb2, 0x73, 0xed, 0x0e, 0xbd, 0xce, 0x01, 0x8b, 0xf9, 0x19, 0xf7, 0xde, 0xfa, 0x0e, 0xc9, 0xea, 0x12, 0xd0, 0x74, 0x3a, 0x43, 0x6e, 0xdc, 0x7e, 0x81, 0xb8, 0x33, 0x40, 0x97, 0x86, 0x85, 0x2f, 0x05, 0xf8, 0x81, 0xcf, 0xa0, 0x3f, 0xc4, 0xf3, 0x25, 0x4a, 0x95, 0x08, 0xa5, 0x50, 0xc5, 0x9c, 0xaa, 0x98, 0x6d, 0x2f, 0xe6, 0x5b, 0x66, 0xe9, 0x00, 0xf7, 0x1e, 0xbe, 0x4a, 0x10, 0x08, 0xa2, 0xf8, 0x77, 0xe7, 0x82, 0x67, 0x8b, 0x7b, 0x9b, 0x1c, 0x78, 0xe7, 0xd8, 0x3c, 0xf7, 0x68, 0xb4, 0xc3, 0x93, 0x27, 0x97, 0x4c, 0x5f, 0xbd, 0xcb, 0x5b, 0x4e, 0xa1, 0x6f, 0xdf, 0x5e, 0x86, 0x8d, 0x5c, 0x74, 0xf7, 0x76, 0xf8, 0xb3, 0x3f, 0xc5, 0xe7, 0xce, 0xcf, 0xd9, 0x5f, 0x2e, 0xea, 0x6b, 0xc2, 0xc7, 0xf3, 0x64, 0x0d, 0x97, 0x9f, 0xf0, 0xda, 0x6b, 0xaf, 0x71, 0xe7, 0xc6, 0x7e, 0x5d, 0x44, 0x93, 0xa6, 0xd8, 0x5a, 0x9b, 0xd6, 0x6d, 0x37, 0x0b, 0xc9, 0x03, 0xdc, 0xba, 0xb5, 0xc7, 0xcb, 0xaf, 0x94, 0x74, 0xbb, 0x7d, 0xe0, 0x98, 0xb3, 0x45, 0x87, 0x27, 0x6f, 0x4f, 0xf8, 0x0b, 0x7f, 0xee, 0x3f, 0xe4, 0x87, 0x0f, 0x7e, 0x68, 0x36, 0x3b, 0xf9, 0xec, 0xaa, 0xf1, 0xcc, 0x63, 0x8a, 0xf9, 0xe1, 0xe1, 0x01, 0x6f, 0xfe, 0xb0, 0x24, 0xcf, 0x2b, 0xc0, 0xaf, 0xa5, 0x4b, 0x15, 0xbd, 0x9e, 0x61, 0xb0, 0x5f, 0x2c, 0x4f, 0x1a, 0xbe, 0xcc, 0x68, 0x60, 0xa4, 0x41, 0x59, 0x96, 0x91, 0xd7, 0x1b, 0xfa, 0x67, 0x3e, 0xfa, 0x0c, 0x79, 0x9e, 0x73, 0x7e, 0x7e, 0x4e, 0x9a, 0x65, 0x84, 0x41, 0x44, 0xaf, 0xdf, 0x69, 0xec, 0x62, 0x7f, 0xe4, 0xc5, 0x1f, 0x31, 0x3a, 0xed, 0xcb, 0xcb, 0x66, 0x6d, 0xb4, 0xd9, 0x16, 0x42, 0x08, 0xee, 0xdd, 0x3b, 0xe2, 0xec, 0xec, 0x8c, 0x30, 0x0c, 0x9b, 0x35, 0xd6, 0x2d, 0x14, 0x79, 0xdd, 0x34, 0x99, 0xb5, 0xd6, 0x14, 0x45, 0x3f, 0x0c, 0xea, 0x22, 0x51, 0x21, 0x30, 0x91, 0xa9, 0x12, 0x81, 0x5f, 0x2b, 0x5a, 0x0a, 0x55, 0x18, 0xe6, 0xb6, 0x93, 0x64, 0x66, 0xf9, 0x49, 0xed, 0xd1, 0x55, 0x13, 0x9b, 0x1c, 0xaf, 0xd7, 0xbf, 0x6e, 0x14, 0x37, 0x4d, 0xd2, 0xa3, 0xd3, 0x93, 0xc7, 0x4a, 0x7a, 0x83, 0xc0, 0x67, 0xef, 0xb0, 0x47, 0xb2, 0x5c, 0x35, 0xeb, 0xe8, 0x62, 0xb1, 0xe0, 0xec, 0x72, 0x8a, 0x12, 0xb0, 0x4a, 0x13, 0x86, 0xdd, 0x90, 0x0a, 0x93, 0xa9, 0xd0, 0x78, 0x64, 0x04, 0x1e, 0xdd, 0x41, 0x1f, 0x90, 0x04, 0x48, 0x16, 0x2b, 0x13, 0x7f, 0xda, 0x1b, 0xf4, 0x11, 0x1e, 0x24, 0x79, 0xce, 0x22, 0x5d, 0x32, 0x18, 0x0d, 0x99, 0x5e, 0x4c, 0x9b, 0xb5, 0x69, 0x3e, 0x9f, 0x37, 0xe3, 0x4f, 0x3b, 0x1e, 0x78, 0xfd, 0xcd, 0x37, 0x99, 0x4e, 0x67, 0xf8, 0xbe, 0x29, 0xd2, 0x96, 0xb8, 0x68, 0x1d, 0xd7, 0x8e, 0x8f, 0xcd, 0x63, 0x87, 0xbe, 0x19, 0x91, 0x52, 0x2b, 0x7f, 0x46, 0xa3, 0x11, 0xf2, 0xce, 0x1d, 0xee, 0xdf, 0x7b, 0xc4, 0x60, 0x30, 0x60, 0x34, 0x1a, 0x31, 0x18, 0x8f, 0x0c, 0xba, 0x2a, 0xd7, 0xcd, 0xc2, 0x42, 0xd5, 0xa4, 0x60, 0x6d, 0xec, 0x64, 0xdd, 0x2c, 0x8b, 0xb6, 0x6c, 0xda, 0x8d, 0xa0, 0x2e, 0xcb, 0xd2, 0x8c, 0x84, 0x7d, 0x41, 0x14, 0xc7, 0x54, 0x45, 0x49, 0xd5, 0xd1, 0x44, 0x4a, 0x13, 0x06, 0x51, 0xf3, 0x77, 0x16, 0x65, 0x70, 0x93, 0x3a, 0x6d, 0x9d, 0xf1, 0x3c, 0x0f, 0xd5, 0x20, 0xd1, 0xc6, 0x54, 0x69, 0xba, 0x5a, 0xe1, 0x29, 0xe8, 0xc5, 0x66, 0x73, 0x33, 0x1e, 0x8f, 0xe9, 0xd7, 0xa4, 0x6d, 0x8b, 0x96, 0x5b, 0x3d, 0xbd, 0x14, 0x82, 0x27, 0x9f, 0x7c, 0x12, 0xcf, 0xf3, 0x98, 0x4d, 0x2f, 0x39, 0x39, 0x39, 0x61, 0x78, 0xbc, 0xec, 0x6d, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xb5, 0x5a, 0xe1, 0x5b, 0x96, 0xdc, 0x6a, 0xb5, 0x6a, 0x3a, 0x55, 0xeb, 0x4f, 0x6b, 0xe1, 0x65, 0x0b, 0x71, 0x5b, 0xd8, 0x66, 0x9b, 0x34, 0x6b, 0xdb, 0x9c, 0xdd, 0x9e, 0xdc, 0x16, 0x06, 0x09, 0x82, 0x60, 0x83, 0x0d, 0x6f, 0x9f, 0xbb, 0x6d, 0x04, 0x63, 0x1f, 0xdb, 0x32, 0x35, 0xed, 0xe6, 0xc2, 0xb5, 0x96, 0x75, 0x23, 0x4e, 0x2d, 0xac, 0xef, 0xee, 0x76, 0xdb, 0x66, 0x38, 0x6e, 0x3e, 0x78, 0x03, 0x7f, 0xd7, 0xfa, 0x7a, 0x3b, 0xbb, 0xb1, 0xc7, 0x61, 0xb5, 0x7f, 0x6d, 0x86, 0xb6, 0x5b, 0x58, 0x5d, 0x07, 0xbb, 0xc7, 0xcd, 0x8f, 0x5d, 0x4b, 0x59, 0x77, 0x2e, 0x6e, 0xbf, 0xb7, 0x76, 0x9a, 0x6d, 0xa8, 0xdf, 0x2d, 0xac, 0xf6, 0xb5, 0xdb, 0xe7, 0xb5, 0xbb, 0x4b, 0xa5, 0x14, 0x81, 0x1f, 0x3c, 0x76, 0xd6, 0xbc, 0xad, 0x33, 0x6e, 0x1f, 0x5f, 0xbb, 0xc8, 0xb7, 0x3f, 0x43, 0xf7, 0x24, 0x6e, 0x17, 0x74, 0x73, 0xac, 0xe5, 0x56, 0x08, 0xff, 0x71, 0x66, 0x3c, 0xed, 0xd7, 0xb8, 0xcd, 0xec, 0xa6, 0xbd, 0xf9, 0x71, 0x75, 0xea, 0x6d, 0x4e, 0x85, 0xa6, 0xda, 0x68, 0xd0, 0x6d, 0x37, 0xfe, 0xe9, 0xe7, 0x9e, 0xa5, 0x37, 0xbe, 0x4d, 0x34, 0x1e, 0x91, 0x78, 0x7d, 0x14, 0xd0, 0x0b, 0x7d, 0x3a, 0xba, 0x24, 0x71, 0x8f, 0x51, 0x9b, 0x98, 0x5b, 0x21, 0x54, 0xed, 0x33, 0x2f, 0x8d, 0x9d, 0x96, 0xe9, 0xd9, 0xe8, 0x74, 0xbb, 0x84, 0xd1, 0x90, 0x6e, 0x6f, 0x87, 0x4a, 0x65, 0x80, 0x59, 0xb8, 0x3a, 0xbd, 0x81, 0x31, 0x71, 0x11, 0xbd, 0xfa, 0xb3, 0x2d, 0xf0, 0xa5, 0xc6, 0xf3, 0x35, 0xaa, 0xca, 0xc8, 0xca, 0x15, 0x79, 0x51, 0x90, 0xe5, 0x0f, 0x59, 0xcd, 0xcf, 0xb9, 0xd3, 0x8d, 0x78, 0x4b, 0xf6, 0x61, 0x71, 0xd6, 0x68, 0xce, 0xef, 0x74, 0x23, 0xde, 0x5a, 0x65, 0x9b, 0xde, 0xf0, 0xfd, 0x5d, 0x4e, 0x8e, 0xbf, 0xc7, 0x60, 0xb0, 0xe9, 0x58, 0xf8, 0x38, 0xe7, 0xba, 0xed, 0x6c, 0xbc, 0xa0, 0xf9, 0x77, 0x37, 0x31, 0x2e, 0xa9, 0x63, 0x3b, 0x5f, 0xe8, 0xf7, 0x9b, 0x74, 0xb6, 0xe3, 0xda, 0xc6, 0xf4, 0x24, 0x59, 0xf1, 0xe1, 0x3d, 0xe3, 0x1e, 0xf7, 0xf2, 0x64, 0xc0, 0xe5, 0x6f, 0xdd, 0x65, 0xfa, 0xc2, 0xce, 0x95, 0xa2, 0xfe, 0xd4, 0x47, 0xfb, 0xbc, 0x78, 0xf7, 0x05, 0x8e, 0xde, 0x3a, 0x26, 0x7f, 0xed, 0x15, 0xfc, 0x40, 0x72, 0xe7, 0xf6, 0xce, 0x46, 0x71, 0xb6, 0x66, 0x32, 0x21, 0x39, 0x79, 0x9a, 0xf1, 0x6e, 0x03, 0x0b, 0x5b, 0xcc, 0x6d, 0x01, 0xfe, 0xd6, 0xcb, 0xaf, 0x92, 0xe7, 0x8a, 0xe7, 0x3f, 0xf0, 0x3c, 0xab, 0xd5, 0x82, 0xf0, 0x3c, 0x65, 0x7f, 0xec, 0xf1, 0x9b, 0xdf, 0xfa, 0x06, 0xdd, 0xde, 0xc0, 0x6c, 0x1c, 0x16, 0x90, 0xe7, 0x33, 0x76, 0xfb, 0xc9, 0x86, 0x1b, 0xdd, 0xb6, 0xce, 0xfc, 0xe6, 0xcd, 0x9b, 0x84, 0x61, 0x8c, 0xd6, 0x29, 0xbb, 0xbb, 0x03, 0x76, 0x76, 0x86, 0xf8, 0xfe, 0xad, 0xa6, 0x11, 0x19, 0x8d, 0x46, 0x8c, 0x1c, 0x98, 0x3f, 0x5d, 0x25, 0x2c, 0x93, 0x15, 0x41, 0x60, 0xa0, 0xcf, 0xd5, 0x6a, 0x65, 0xfc, 0xcb, 0x27, 0x43, 0xd2, 0x65, 0xea, 0xb8, 0xc5, 0x09, 0xba, 0xbd, 0x98, 0x93, 0x93, 0x93, 0x26, 0xda, 0xd2, 0x9e, 0xcb, 0xbe, 0xef, 0x73, 0xeb, 0xd6, 0x2d, 0xae, 0x5f, 0xbf, 0xce, 0x13, 0xd7, 0x6f, 0x70, 0x76, 0x76, 0xd6, 0xa0, 0x80, 0xdd, 0x6e, 0xb7, 0x21, 0xda, 0xae, 0x56, 0x2b, 0xc6, 0x7b, 0x66, 0x53, 0x55, 0x54, 0x25, 0xab, 0x2c, 0x6d, 0x9c, 0x37, 0x1b, 0xee, 0x8f, 0x02, 0xe9, 0x19, 0x22, 0xb1, 0x44, 0x40, 0xa5, 0x1b, 0xc6, 0x7a, 0x10, 0x04, 0x78, 0xa2, 0x6c, 0x8a, 0xba, 0x7b, 0xcd, 0xda, 0x35, 0x23, 0x49, 0x12, 0xa3, 0x4e, 0xf2, 0xd7, 0x9e, 0xf4, 0x65, 0x96, 0x37, 0x05, 0xdd, 0xf7, 0x7d, 0x54, 0x79, 0xd5, 0x55, 0x52, 0x0a, 0xf3, 0x3a, 0x55, 0xae, 0x48, 0xf3, 0x0c, 0x5d, 0x19, 0xae, 0x11, 0x75, 0x6d, 0x90, 0x51, 0x40, 0xaf, 0xdf, 0x27, 0x10, 0x8a, 0x3c, 0x4f, 0x91, 0x5e, 0x4d, 0xde, 0x2b, 0x2b, 0x72, 0x0b, 0xf9, 0xc7, 0x31, 0x81, 0x90, 0x28, 0xa1, 0xf0, 0x02, 0x9f, 0xac, 0xc8, 0x41, 0x81, 0xf0, 0x3d, 0xfc, 0x30, 0xa0, 0xd4, 0x8a, 0x40, 0x8b, 0x2b, 0x11, 0xd1, 0xd6, 0x73, 0xbd, 0xd3, 0xe9, 0xb0, 0xb7, 0xb7, 0xd7, 0x14, 0xc4, 0x20, 0x08, 0x0c, 0x9a, 0x52, 0x13, 0xb6, 0xf7, 0xf6, 0xf6, 0x38, 0x7b, 0x38, 0x6f, 0xf8, 0x45, 0x4a, 0x19, 0x83, 0x1a, 0x63, 0x8f, 0xab, 0x08, 0x3d, 0x9f, 0x0f, 0x7e, 0xe8, 0x79, 0xce, 0xce, 0xce, 0x58, 0x2c, 0x66, 0x50, 0x6f, 0x78, 0xf3, 0x5a, 0x63, 0xdf, 0xeb, 0xf5, 0x50, 0xf5, 0xe6, 0xd7, 0x13, 0xf2, 0x4a, 0x21, 0xd7, 0x5a, 0x53, 0xea, 0x72, 0x83, 0x23, 0xe5, 0x8e, 0x7f, 0xf3, 0x3c, 0x47, 0x53, 0xd7, 0x40, 0x4f, 0x36, 0x96, 0xe4, 0x8b, 0xf9, 0x0a, 0xcf, 0xf3, 0x18, 0x0c, 0x06, 0x2c, 0x16, 0x0b, 0x73, 0xcc, 0x35, 0xd2, 0xbc, 0xbb, 0xbb, 0x8b, 0x96, 0xba, 0xa9, 0x7d, 0x85, 0x94, 0x94, 0x55, 0x85, 0x52, 0x95, 0xf1, 0x50, 0x88, 0x22, 0xba, 0x51, 0x4c, 0xbf, 0xdb, 0x33, 0xe1, 0x3d, 0x59, 0xc6, 0x78, 0x3c, 0x26, 0xaf, 0x4a, 0x16, 0xc9, 0x8a, 0x34, 0xcf, 0x8c, 0x42, 0x41, 0x9b, 0xe4, 0xd2, 0xb7, 0x57, 0x49, 0x73, 0xfc, 0xc3, 0xe1, 0x10, 0x6f, 0x38, 0xc2, 0x4f, 0x92, 0xa4, 0xd9, 0x19, 0xb9, 0x89, 0x68, 0xf3, 0xf9, 0xbc, 0xd9, 0x2d, 0xb9, 0xec, 0x6f, 0x0b, 0xc3, 0xba, 0x85, 0xa7, 0xdd, 0x19, 0xda, 0xbf, 0xb1, 0x12, 0x10, 0x77, 0x26, 0xee, 0x4a, 0xda, 0xc2, 0x30, 0xbc, 0x22, 0x55, 0x72, 0x1f, 0xdb, 0x85, 0x5c, 0xed, 0xdf, 0xb8, 0x27, 0xbc, 0xfb, 0x01, 0xb8, 0xb0, 0xb6, 0x5b, 0x04, 0xdc, 0xdf, 0xb9, 0x85, 0xa3, 0xaa, 0x2a, 0x94, 0x03, 0x7f, 0xbb, 0xc5, 0xc4, 0x42, 0xfd, 0xee, 0x49, 0x6e, 0x2f, 0x08, 0x5b, 0xf4, 0x5d, 0x98, 0xab, 0xcd, 0xf8, 0xdf, 0x96, 0x6f, 0xee, 0xbe, 0x9e, 0xe6, 0xfe, 0xa8, 0xc7, 0xce, 0xaf, 0xed, 0x26, 0xc8, 0x9e, 0x4c, 0x2e, 0xe9, 0xc5, 0xa2, 0x02, 0xed, 0xd7, 0xd4, 0x1e, 0x09, 0xb4, 0x8f, 0xa1, 0x4d, 0x56, 0x73, 0xd3, 0xf0, 0xda, 0x16, 0xac, 0x2e, 0x37, 0xc2, 0x1d, 0x97, 0x6c, 0x28, 0x06, 0x28, 0x69, 0x67, 0x01, 0x6c, 0xdb, 0x28, 0x6c, 0x10, 0xe1, 0x5a, 0x05, 0x7b, 0x1b, 0xe1, 0x6e, 0x9b, 0x99, 0xcd, 0x56, 0x82, 0x9e, 0x96, 0xa6, 0xcb, 0xbf, 0x73, 0xc0, 0x9d, 0x8f, 0x3d, 0xc7, 0xde, 0x53, 0x1f, 0x23, 0x1a, 0x9b, 0x22, 0x54, 0x75, 0xc6, 0x54, 0x80, 0x05, 0x18, 0x3b, 0xba, 0x44, 0x85, 0x31, 0x14, 0x25, 0xaa, 0x82, 0xaa, 0x34, 0xef, 0xbf, 0x99, 0x9f, 0xdb, 0x42, 0xae, 0x41, 0xaf, 0x51, 0x86, 0x40, 0x49, 0x84, 0x08, 0xe8, 0x74, 0xc7, 0x08, 0xa9, 0x80, 0xd2, 0xa4, 0xc7, 0x49, 0x33, 0x77, 0xf7, 0x74, 0x85, 0x94, 0x0a, 0x4d, 0x85, 0xaa, 0x32, 0xf2, 0x24, 0xa1, 0xcc, 0x13, 0xb2, 0x6c, 0x49, 0x51, 0x66, 0xe4, 0xf9, 0x39, 0x4f, 0xdf, 0x79, 0x86, 0xcb, 0xcf, 0x7d, 0x85, 0x27, 0x5f, 0x78, 0x8e, 0x3f, 0xf1, 0x7f, 0xfc, 0x9f, 0x86, 0xed, 0xfe, 0xcc, 0x0d, 0xfe, 0xd2, 0xb5, 0xa7, 0x19, 0xb7, 0x60, 0xf1, 0xd1, 0xf3, 0x70, 0xff, 0xfe, 0x25, 0xa3, 0x11, 0x54, 0xef, 0x91, 0x08, 0xdb, 0x8e, 0x77, 0xb5, 0x05, 0xde, 0x2d, 0xf4, 0xee, 0xf7, 0xf3, 0x65, 0xc2, 0x8b, 0x17, 0x73, 0x8e, 0x9d, 0x42, 0xde, 0x38, 0xe7, 0x75, 0xba, 0xcd, 0xf7, 0x2f, 0x5e, 0xcc, 0xf9, 0xce, 0xe9, 0x31, 0x9f, 0xfd, 0xfc, 0x88, 0x9f, 0xfb, 0xd4, 0x0b, 0x57, 0x2c, 0x66, 0x3f, 0xf4, 0x89, 0xa7, 0xf8, 0xde, 0x5b, 0xc7, 0x64, 0x99, 0xe2, 0xe2, 0xe8, 0x3e, 0xd2, 0xeb, 0x6e, 0xc8, 0xcc, 0xe6, 0x0b, 0xde, 0xb3, 0x90, 0xf7, 0x63, 0x41, 0xce, 0xa8, 0x81, 0xd4, 0x21, 0x20, 0xcf, 0x67, 0x0c, 0xfa, 0xc6, 0x01, 0x70, 0xb4, 0x33, 0xe6, 0xf7, 0xff, 0x81, 0x3f, 0xc8, 0xdd, 0xef, 0xbf, 0xca, 0x78, 0x32, 0x61, 0xb9, 0x5c, 0xf1, 0xca, 0xb7, 0xbf, 0xcb, 0xfc, 0xfc, 0xad, 0xfa, 0xfe, 0xef, 0x7d, 0x0b, 0xc3, 0x21, 0xe3, 0xc9, 0x84, 0xf1, 0x78, 0x8f, 0xe9, 0xf4, 0x98, 0x30, 0x94, 0x68, 0xad, 0xb8, 0x75, 0xeb, 0x96, 0xe9, 0xe0, 0xa4, 0xa4, 0xf2, 0x32, 0x1e, 0x3d, 0x7a, 0xc4, 0x83, 0x07, 0x0f, 0xa8, 0x94, 0x62, 0x34, 0x1a, 0xd1, 0xef, 0xf7, 0x9b, 0x02, 0xfc, 0xca, 0x2b, 0xaf, 0xf0, 0x81, 0x0f, 0x7c, 0xa0, 0x6e, 0x00, 0x4a, 0x96, 0xcb, 0x8c, 0x2c, 0x31, 0x71, 0xa2, 0xfd, 0x7e, 0xbf, 0x69, 0x10, 0x2c, 0x51, 0xca, 0xce, 0xd1, 0x85, 0x10, 0x3c, 0x7c, 0xf8, 0x90, 0xc8, 0xf3, 0x9b, 0xe0, 0x17, 0x4b, 0xb4, 0xb5, 0x1c, 0xa5, 0x4e, 0xa7, 0x03, 0xb6, 0x19, 0x51, 0x15, 0x79, 0x55, 0x92, 0x39, 0xaa, 0x1c, 0x73, 0x5d, 0x81, 0x12, 0xf5, 0x5a, 0xa7, 0x81, 0xa2, 0x42, 0x2a, 0x4d, 0x55, 0x27, 0x15, 0xe6, 0x5e, 0xbe, 0xd1, 0x08, 0xb9, 0x66, 0x4c, 0x4a, 0xa9, 0x66, 0x04, 0xe0, 0xd7, 0x73, 0x73, 0x80, 0x38, 0x58, 0xaf, 0xf5, 0x85, 0xaa, 0x98, 0x2f, 0x17, 0x94, 0x35, 0x52, 0xb0, 0xde, 0x28, 0x9b, 0xbf, 0x0f, 0x3b, 0x31, 0xe3, 0x9a, 0x54, 0x67, 0xd7, 0x9c, 0x7e, 0xbf, 0x8f, 0xdf, 0x31, 0x4d, 0xdd, 0x6c, 0x36, 0xe3, 0x72, 0xb5, 0x20, 0xec, 0x74, 0x88, 0x47, 0x03, 0x73, 0x7d, 0x4b, 0x61, 0x12, 0xd6, 0x22, 0xc1, 0x6a, 0x36, 0x6f, 0x6c, 0x6f, 0x2f, 0x2e, 0x2e, 0x40, 0x6a, 0xc6, 0xfb, 0xbb, 0x04, 0xd2, 0x44, 0xc3, 0x3e, 0x73, 0xe3, 0x39, 0x8a, 0xc2, 0x64, 0x80, 0x77, 0xbb, 0x5d, 0xb2, 0x2c, 0xe3, 0xfe, 0xfd, 0xfb, 0x7c, 0xef, 0x7b, 0xdf, 0x63, 0x3e, 0x2f, 0xb8, 0xf9, 0xc4, 0x7e, 0xe3, 0xfa, 0x66, 0xf3, 0xd2, 0xdd, 0xf5, 0xf5, 0xda, 0xb5, 0xbd, 0x26, 0x3c, 0x26, 0xcb, 0x32, 0x44, 0xdd, 0x15, 0x1f, 0x1f, 0x1f, 0x33, 0x19, 0x8e, 0x28, 0x8a, 0xaa, 0x91, 0x88, 0x75, 0x3a, 0x86, 0xb0, 0x97, 0xa4, 0xa9, 0x61, 0xad, 0x9f, 0x9e, 0x22, 0xc6, 0x9b, 0xbc, 0x2d, 0x6a, 0x73, 0x1d, 0x5d, 0x6f, 0x72, 0x94, 0xd0, 0xcd, 0xdf, 0xd9, 0xf5, 0xdb, 0x36, 0xa5, 0xb6, 0x6e, 0x35, 0xcd, 0x56, 0xbd, 0xd9, 0x59, 0xa9, 0x94, 0xaa, 0x8e, 0x1b, 0xbe, 0x7d, 0xfb, 0xb6, 0x21, 0x45, 0x2a, 0x93, 0xdb, 0x6e, 0x46, 0x0f, 0x8b, 0x66, 0x03, 0x96, 0x08, 0x4c, 0xb8, 0x4e, 0x1c, 0xd3, 0xef, 0x74, 0x89, 0x83, 0x10, 0x55, 0x94, 0xac, 0x96, 0x2b, 0xce, 0xcf, 0xcf, 0x8d, 0x52, 0xac, 0x76, 0xc2, 0xb3, 0xd6, 0xc4, 0xa7, 0xab, 0x53, 0x8a, 0xa2, 0x20, 0x8e, 0x8d, 0x25, 0x6f, 0x55, 0x55, 0x0c, 0x7a, 0x7d, 0x26, 0x93, 0x89, 0x99, 0xc3, 0x4b, 0x29, 0x59, 0x2e, 0x97, 0x1b, 0x2c, 0x3e, 0x77, 0x1e, 0x63, 0x8b, 0xb3, 0x3d, 0x69, 0x5c, 0xf7, 0x34, 0xb7, 0xe8, 0xa9, 0x96, 0xa6, 0xda, 0x5a, 0x2a, 0xba, 0x4c, 0x71, 0xcb, 0x16, 0xb4, 0x9d, 0xa6, 0x5b, 0xdc, 0xdd, 0x0c, 0xf6, 0x3c, 0xcf, 0x9b, 0x83, 0x6e, 0x08, 0x22, 0x0e, 0xfc, 0xeb, 0x26, 0x20, 0xb9, 0x29, 0x62, 0x6e, 0xe1, 0xb0, 0x8c, 0xd2, 0x36, 0x0b, 0xd4, 0xed, 0xfc, 0xbc, 0x9a, 0xc9, 0xde, 0x26, 0xa5, 0x59, 0x89, 0x9e, 0x7d, 0x7d, 0x2e, 0xcc, 0x6e, 0x7f, 0xb6, 0xc7, 0x6f, 0xa1, 0x2e, 0xeb, 0x45, 0xdd, 0x7e, 0x1e, 0xb7, 0xcb, 0x77, 0xdf, 0x1f, 0xcb, 0x72, 0x77, 0x09, 0x85, 0x6d, 0x84, 0x63, 0x9b, 0xe5, 0xae, 0x1d, 0x77, 0xd8, 0xf0, 0x81, 0xf6, 0xc8, 0x63, 0xb3, 0x30, 0xb3, 0xd5, 0xeb, 0xfe, 0x71, 0xac, 0xf8, 0xb6, 0x4a, 0x60, 0x1b, 0xe9, 0x6e, 0xc3, 0x9a, 0x56, 0xba, 0x16, 0xb9, 0xb4, 0x60, 0x76, 0xd1, 0x4a, 0x42, 0xab, 0x21, 0x75, 0x21, 0x6a, 0xf3, 0x18, 0xb9, 0x61, 0x1a, 0xd3, 0x3e, 0x26, 0xf3, 0xa5, 0x36, 0x1e, 0xb7, 0xaa, 0x94, 0xb1, 0x8c, 0x6d, 0x8e, 0xcf, 0xdc, 0xef, 0xc3, 0xff, 0xf6, 0x1f, 0x21, 0x8c, 0x4d, 0xd7, 0xa9, 0xc2, 0x98, 0xac, 0x58, 0x77, 0xb7, 0x51, 0x50, 0x73, 0x26, 0xf2, 0xb2, 0xf9, 0xbd, 0xbd, 0x08, 0x15, 0x65, 0x5d, 0xcc, 0x31, 0xe3, 0x09, 0xad, 0xd1, 0xda, 0xab, 0xff, 0x6f, 0x36, 0xf5, 0x42, 0x80, 0xf4, 0x64, 0xd3, 0x9d, 0x0b, 0x4f, 0xd5, 0x33, 0x01, 0x4d, 0x9e, 0x25, 0x08, 0x59, 0x81, 0xae, 0xc8, 0x8b, 0x25, 0x59, 0x32, 0x23, 0x49, 0xe7, 0x94, 0x65, 0x86, 0x56, 0x25, 0xd2, 0xcb, 0x79, 0x96, 0x8a, 0xe7, 0x75, 0xc5, 0x23, 0xe7, 0xf5, 0x7d, 0xe6, 0x93, 0x9f, 0xde, 0x60, 0xe5, 0x5b, 0x58, 0xfc, 0x7f, 0xfc, 0xf6, 0x6f, 0xa2, 0x94, 0xc7, 0xe1, 0xe1, 0x4e, 0xd3, 0x35, 0xbe, 0x6f, 0x6e, 0xfd, 0x60, 0xc4, 0x49, 0xb2, 0x6a, 0x8a, 0xf3, 0xbb, 0x39, 0xdd, 0xb5, 0xff, 0x4d, 0x0c, 0x46, 0x1b, 0xb9, 0xea, 0xfb, 0x9d, 0x2e, 0xbf, 0xfd, 0xfd, 0x1f, 0xf0, 0xe0, 0xf6, 0x01, 0x37, 0x5e, 0xd8, 0xe1, 0xe2, 0x91, 0xc7, 0xe4, 0x5a, 0xd5, 0xe8, 0xd8, 0x3f, 0xf8, 0x27, 0x7e, 0x92, 0xd3, 0x3f, 0xfb, 0x77, 0xd9, 0xdf, 0xdb, 0x61, 0xbe, 0x28, 0x1a, 0x16, 0xfb, 0x7b, 0xd1, 0x07, 0xfb, 0xb1, 0x60, 0xd0, 0x0f, 0x9d, 0xa2, 0x1c, 0x5c, 0x61, 0xfd, 0x0f, 0x06, 0x03, 0xae, 0x5d, 0x3b, 0xe0, 0x07, 0x6f, 0xbe, 0xc1, 0xc1, 0xfe, 0x21, 0x79, 0x99, 0x35, 0x76, 0xb2, 0x06, 0xca, 0x9f, 0x6d, 0xcc, 0xd0, 0x1f, 0xd7, 0x9d, 0xdf, 0xba, 0xb5, 0x47, 0xe8, 0x47, 0xcc, 0xe7, 0x8b, 0xa6, 0xb8, 0xd9, 0xb5, 0xc2, 0x06, 0xa5, 0x5c, 0xcc, 0x1e, 0x91, 0x57, 0x46, 0x89, 0x23, 0xeb, 0x6b, 0x2d, 0x4f, 0x33, 0xb2, 0x3c, 0xa3, 0xdf, 0xef, 0xb3, 0x13, 0x07, 0xec, 0xec, 0xec, 0x18, 0x66, 0x7f, 0xa5, 0x08, 0x82, 0x88, 0xd0, 0x0f, 0xc8, 0xf3, 0xa2, 0x71, 0x43, 0xb3, 0x6b, 0x81, 0x85, 0xd1, 0xfb, 0xfd, 0x7e, 0x93, 0xa8, 0xb5, 0x2a, 0xab, 0x06, 0xd2, 0xb7, 0xdd, 0xf9, 0x6c, 0x36, 0x23, 0xcb, 0x32, 0xa2, 0x28, 0xe2, 0xf2, 0x62, 0x66, 0xb8, 0x43, 0x35, 0x71, 0xac, 0x2c, 0x4b, 0x42, 0xdf, 0xab, 0x83, 0x51, 0xc0, 0x57, 0x06, 0x2b, 0x6a, 0x20, 0xf9, 0xc2, 0xc8, 0xd6, 0xf2, 0x9a, 0xe5, 0xbe, 0x0a, 0x8b, 0x8d, 0x46, 0xcc, 0x5e, 0xa7, 0x76, 0xdd, 0xb2, 0xe7, 0x79, 0xa9, 0x8a, 0x86, 0xb9, 0xdf, 0xeb, 0xf5, 0x0c, 0x33, 0x3c, 0x8a, 0x98, 0xce, 0x67, 0xa4, 0x79, 0xc6, 0x2a, 0x4d, 0xd1, 0x9a, 0x8d, 0x94, 0xcd, 0xa2, 0x28, 0x50, 0x9e, 0x21, 0xd6, 0x79, 0x42, 0x36, 0x9e, 0xe1, 0x61, 0xcf, 0xcc, 0xaa, 0x97, 0xab, 0x15, 0x51, 0xad, 0x5f, 0xb7, 0x75, 0x21, 0xaf, 0x14, 0x79, 0x3d, 0x63, 0x56, 0x0a, 0xfa, 0xdd, 0x2e, 0xf3, 0xfa, 0x5c, 0x1b, 0x0e, 0x87, 0x08, 0xcf, 0x28, 0x9a, 0x92, 0x34, 0xa1, 0xd3, 0x35, 0x2e, 0x75, 0x97, 0x97, 0x97, 0x4d, 0xba, 0x58, 0xb7, 0xdb, 0x6d, 0x90, 0xd1, 0xa2, 0x28, 0xd0, 0xf5, 0xba, 0x9d, 0xe7, 0x79, 0x13, 0xb2, 0xe3, 0x4a, 0x5c, 0xc7, 0xfb, 0xe3, 0xa6, 0xb0, 0x56, 0x55, 0xc5, 0xa0, 0xdf, 0x07, 0xa5, 0x79, 0xf4, 0x68, 0xca, 0xb0, 0x67, 0x50, 0xe5, 0xe1, 0x70, 0x68, 0x9c, 0xd9, 0x16, 0x73, 0xa3, 0xce, 0xe8, 0xf7, 0x19, 0x8d, 0x46, 0x2c, 0x16, 0x0b, 0x72, 0x92, 0x75, 0x93, 0xa3, 0xaf, 0x8e, 0x60, 0x2b, 0x6d, 0xcc, 0x5a, 0xd6, 0x4e, 0x89, 0x9b, 0xa4, 0x6a, 0xbf, 0xae, 0x3f, 0xc6, 0xc4, 0xa8, 0xc7, 0x64, 0x3c, 0x66, 0xb5, 0x4c, 0x99, 0x4f, 0x2f, 0x89, 0xa2, 0x88, 0xd9, 0x6c, 0xd6, 0xa0, 0x21, 0xcb, 0xa5, 0xb1, 0x88, 0x95, 0x81, 0x6c, 0x36, 0x21, 0xc2, 0x37, 0xc8, 0x86, 0x56, 0x26, 0xa9, 0x2e, 0x4b, 0x52, 0x3a, 0x41, 0xc8, 0xb5, 0xfd, 0x03, 0xee, 0xdc, 0xb9, 0xc3, 0x62, 0xb1, 0xe0, 0xfc, 0xfc, 0x9c, 0x2c, 0xcb, 0x1a, 0x3f, 0xfd, 0x8b, 0x4b, 0x63, 0x65, 0x6c, 0xeb, 0xcd, 0xc1, 0xc1, 0x01, 0xbd, 0x4e, 0xd7, 0xf0, 0x38, 0x96, 0x2b, 0x63, 0x2c, 0xb3, 0xe1, 0x92, 0x54, 0xc3, 0x47, 0xed, 0x5c, 0x6e, 0x77, 0xe6, 0x6b, 0x67, 0x1c, 0x2e, 0x59, 0xc9, 0x25, 0x7b, 0xd9, 0x37, 0xc4, 0xce, 0x5e, 0xdc, 0x79, 0xb2, 0x0d, 0x6a, 0xb7, 0xdd, 0xa6, 0x85, 0xac, 0x5c, 0xc2, 0x98, 0x45, 0x04, 0x7c, 0xdf, 0xdf, 0x30, 0xab, 0x69, 0x17, 0x57, 0x17, 0x6a, 0x72, 0x09, 0x71, 0xf6, 0x0d, 0xb7, 0x16, 0x86, 0x76, 0x4c, 0x60, 0x93, 0x91, 0x9a, 0x4d, 0x84, 0x43, 0xc2, 0x6a, 0x27, 0xc6, 0xd9, 0xc2, 0xee, 0x7e, 0x90, 0x6d, 0xaf, 0x7b, 0xcb, 0x03, 0x48, 0x1d, 0xc7, 0x38, 0xd7, 0xd7, 0xdd, 0x7d, 0x2c, 0xf7, 0xbd, 0x69, 0x50, 0x05, 0x5d, 0x35, 0x50, 0x7a, 0x3b, 0x88, 0xc5, 0xed, 0xfa, 0xdb, 0x39, 0xe1, 0x60, 0xcc, 0x14, 0x2a, 0x51, 0x3d, 0x16, 0x46, 0xb7, 0x5e, 0xf9, 0xdb, 0xa0, 0x24, 0x77, 0xb3, 0xb1, 0x2d, 0x1a, 0xd7, 0x7d, 0xaf, 0xdb, 0x84, 0xc8, 0x0d, 0x0b, 0xd5, 0xf9, 0xfc, 0x8a, 0xf5, 0xaf, 0x8b, 0x16, 0xb8, 0x68, 0x4b, 0x9b, 0x18, 0x69, 0x9e, 0x5b, 0x3e, 0x26, 0x92, 0x55, 0x6c, 0x48, 0x04, 0xdb, 0x1b, 0x95, 0x66, 0x63, 0x94, 0xe7, 0x54, 0x79, 0x41, 0x18, 0xf7, 0x4d, 0xf7, 0xdd, 0x2e, 0xe2, 0x8f, 0xbb, 0x95, 0x95, 0xf9, 0x92, 0x06, 0xbe, 0x94, 0xca, 0x47, 0x2b, 0x1f, 0x5d, 0x81, 0x14, 0x1e, 0xbe, 0x2f, 0x09, 0x7d, 0xdf, 0x6c, 0x08, 0x43, 0x8f, 0xd0, 0x93, 0x48, 0x19, 0x90, 0x5f, 0x7e, 0x89, 0x3f, 0x7e, 0xeb, 0x05, 0xfe, 0xce, 0x29, 0x48, 0x14, 0x4a, 0x3f, 0xa2, 0xcc, 0x4b, 0xf2, 0x34, 0xa5, 0xcc, 0x53, 0x43, 0x9c, 0xab, 0x0a, 0xfc, 0x4a, 0xa1, 0x51, 0xac, 0xb2, 0x13, 0x5e, 0xda, 0xf9, 0x38, 0x3c, 0x3a, 0xe6, 0x5b, 0xe7, 0xe7, 0x00, 0xfc, 0xf2, 0x7f, 0xf0, 0x67, 0xf0, 0xee, 0xbe, 0x71, 0xc5, 0x96, 0xf6, 0xad, 0x83, 0x5d, 0xde, 0xfc, 0xfa, 0x57, 0xb8, 0x71, 0x7d, 0xc2, 0x33, 0x4f, 0x3e, 0x4d, 0x9a, 0x15, 0x57, 0xba, 0x67, 0x0b, 0x8f, 0xb7, 0x6f, 0xfb, 0x9d, 0xee, 0x95, 0xdf, 0x8b, 0xc1, 0x26, 0x5c, 0x3e, 0x1a, 0x0c, 0xb7, 0x6e, 0x02, 0xdc, 0x9b, 0x2d, 0xea, 0x07, 0xbd, 0x3e, 0x9f, 0x5e, 0x2e, 0xf8, 0xdc, 0xbf, 0xfc, 0x3a, 0x9f, 0x9e, 0xfc, 0x3c, 0x93, 0x6b, 0x15, 0x17, 0x8f, 0xec, 0x42, 0x6a, 0x8a, 0x7a, 0xbf, 0xd7, 0xc3, 0xf7, 0x63, 0xb2, 0x2c, 0xd9, 0x90, 0x9f, 0x6d, 0x83, 0xd4, 0xaf, 0xef, 0x98, 0xc2, 0x1d, 0x87, 0xe6, 0xbc, 0x4a, 0x73, 0xf3, 0x7d, 0x9a, 0x5f, 0xfd, 0x9c, 0x3c, 0xcf, 0xe3, 0xfa, 0xb5, 0xdb, 0xbc, 0xf8, 0x91, 0x0f, 0xf3, 0xf2, 0xb7, 0xbf, 0xc3, 0x6b, 0xdf, 0x7b, 0x8d, 0xbc, 0xcc, 0x38, 0xd8, 0x3f, 0xe4, 0x63, 0x1f, 0xfb, 0x31, 0x5e, 0xfb, 0xc1, 0x39, 0xf3, 0xf3, 0xb7, 0xae, 0x3e, 0x17, 0x97, 0x40, 0xd8, 0xb8, 0xf6, 0x3d, 0xff, 0x81, 0xe7, 0x19, 0xed, 0x8c, 0x29, 0xaa, 0x0c, 0xe9, 0x6b, 0xb2, 0xc2, 0xb0, 0x83, 0x95, 0xf2, 0xb8, 0xbc, 0xb8, 0x24, 0xef, 0x74, 0x58, 0xcc, 0x4d, 0x81, 0xd5, 0x02, 0x86, 0x93, 0x31, 0x7e, 0x10, 0x90, 0xe5, 0x15, 0x02, 0x9f, 0xbc, 0xd4, 0x54, 0xba, 0xe2, 0xb5, 0xbb, 0x6f, 0x98, 0xd9, 0xa4, 0xef, 0x13, 0xc7, 0x31, 0xb3, 0xd9, 0x94, 0xef, 0xbe, 0xfe, 0x88, 0x97, 0x5e, 0xba, 0x83, 0xf2, 0x25, 0x9d, 0x5e, 0x8f, 0xb2, 0x5e, 0x23, 0xa2, 0x20, 0x40, 0x97, 0x15, 0xe5, 0x2a, 0xc5, 0xcb, 0xcd, 0x22, 0x2f, 0x7b, 0x03, 0x66, 0x4b, 0x23, 0x1f, 0x7b, 0xfa, 0xe9, 0xa7, 0xd9, 0xd9, 0xdb, 0xe5, 0xd1, 0xc9, 0x09, 0xb9, 0xaa, 0xe8, 0x0f, 0x62, 0xce, 0xce, 0x4e, 0xf0, 0x02, 0x9f, 0xb8, 0xdb, 0xa5, 0xd2, 0x39, 0x45, 0x99, 0x20, 0xbd, 0x08, 0xa5, 0x4b, 0x53, 0x14, 0xfb, 0x7d, 0x56, 0x8b, 0x25, 0xa8, 0x8a, 0xf9, 0x6c, 0xca, 0xfe, 0x64, 0x87, 0x2c, 0x49, 0xa9, 0x8a, 0x92, 0xe1, 0xc8, 0xa4, 0x45, 0x2a, 0x5d, 0x21, 0x7d, 0x0f, 0x2d, 0x04, 0xcb, 0x2c, 0x6d, 0x0c, 0x62, 0x14, 0x9a, 0xc0, 0xf7, 0x11, 0x1a, 0x74, 0x51, 0x52, 0xe5, 0x05, 0x69, 0x92, 0xa0, 0x8a, 0x12, 0x2a, 0x45, 0xa6, 0x4a, 0xca, 0xba, 0x43, 0xd6, 0x9e, 0x43, 0x44, 0xd5, 0x86, 0x79, 0xff, 0xfa, 0xeb, 0x6f, 0x70, 0xb8, 0xbf, 0xcf, 0x68, 0x34, 0x32, 0x49, 0x6d, 0x61, 0xcd, 0x8a, 0xaf, 0x3c, 0xfc, 0x5e, 0x87, 0x83, 0x68, 0xc4, 0xee, 0xce, 0x0d, 0x2e, 0x96, 0x73, 0x16, 0x8b, 0x15, 0x61, 0xed, 0xd9, 0x7e, 0x7e, 0x7e, 0xce, 0x7c, 0x3e, 0xe7, 0xc9, 0xdb, 0x77, 0xc0, 0x93, 0x24, 0x59, 0x6a, 0x0c, 0x61, 0xf0, 0xa9, 0xb4, 0x47, 0xe4, 0xf5, 0x29, 0x0b, 0x81, 0xec, 0x09, 0x76, 0x0f, 0x76, 0x4c, 0x04, 0xab, 0xef, 0xf3, 0xce, 0x3b, 0xef, 0x34, 0x86, 0x5e, 0xf3, 0xf9, 0x9c, 0xc3, 0xfd, 0x03, 0x2e, 0x2e, 0x2e, 0x9a, 0x34, 0xb3, 0xeb, 0xd7, 0xf6, 0xb8, 0x77, 0xef, 0x1e, 0xa7, 0xc7, 0x67, 0x3c, 0xf1, 0xc4, 0x35, 0xb4, 0x6f, 0xe2, 0x61, 0xb3, 0xbc, 0x40, 0x04, 0x9a, 0xb4, 0x4a, 0x88, 0x7a, 0x01, 0x2f, 0xfc, 0xc8, 0x1d, 0x74, 0xa5, 0x48, 0xd3, 0x0c, 0x9d, 0x9b, 0x1a, 0x16, 0xf7, 0x8c, 0x3d, 0xef, 0xc5, 0x62, 0x6a, 0xea, 0x41, 0x20, 0x88, 0x42, 0x63, 0x53, 0xbb, 0x9c, 0xad, 0xf0, 0xa4, 0x36, 0xb6, 0xb8, 0x95, 0x26, 0x8e, 0x4d, 0x8a, 0x5c, 0xb2, 0xcc, 0x9b, 0xb5, 0xbd, 0x52, 0xc6, 0xfa, 0xd8, 0x53, 0x02, 0xa5, 0x2b, 0x90, 0x19, 0x99, 0xa7, 0x51, 0x52, 0x51, 0xfa, 0x15, 0x55, 0xb9, 0xa4, 0x9a, 0x29, 0xa8, 0x80, 0x40, 0x50, 0xa0, 0xa8, 0x04, 0xa4, 0xb5, 0x51, 0x12, 0x81, 0x31, 0x27, 0x42, 0x6a, 0x14, 0x05, 0x9a, 0x92, 0x32, 0x07, 0xa4, 0x59, 0xef, 0xe3, 0x5e, 0x48, 0xaf, 0x1f, 0x99, 0x51, 0xb5, 0x4a, 0x78, 0xfb, 0xd1, 0xdb, 0x90, 0xe4, 0xe0, 0x49, 0xf2, 0x62, 0xc5, 0xfd, 0x07, 0x73, 0xd2, 0x7c, 0x59, 0xd7, 0x39, 0xf0, 0x7d, 0x8f, 0x58, 0xfa, 0x9c, 0x1f, 0x3d, 0x40, 0xec, 0xef, 0xf1, 0xd4, 0x53, 0x4f, 0x21, 0x03, 0x1f, 0xdf, 0x16, 0x1e, 0x57, 0x1f, 0x6d, 0x17, 0x76, 0xbb, 0xeb, 0x74, 0x67, 0xc5, 0x2e, 0x51, 0xc0, 0x6e, 0x04, 0x02, 0x27, 0x64, 0xa4, 0xed, 0x76, 0xd6, 0x36, 0x0f, 0x71, 0x61, 0x57, 0x37, 0xb4, 0xc5, 0xee, 0x0a, 0xdd, 0x90, 0x15, 0xeb, 0x58, 0xd4, 0x90, 0x08, 0x9c, 0xe7, 0xb6, 0x50, 0xcc, 0x36, 0xcf, 0x77, 0x5b, 0x00, 0xec, 0x46, 0x61, 0x9b, 0x6b, 0x9c, 0xc9, 0xb7, 0x0d, 0xae, 0x38, 0xd8, 0x6d, 0xdb, 0x18, 0xb4, 0x67, 0xf7, 0x2e, 0xc3, 0xfc, 0xdd, 0xd8, 0xdd, 0xdb, 0x0a, 0x9c, 0xeb, 0x1e, 0xe7, 0x87, 0xfe, 0x15, 0x66, 0xb9, 0xcb, 0x01, 0x78, 0xdc, 0x6c, 0xb9, 0x99, 0xe9, 0xab, 0xf2, 0x3d, 0xbc, 0xce, 0x37, 0xdd, 0xdd, 0xda, 0xc4, 0x3e, 0xab, 0x54, 0x68, 0xeb, 0xe5, 0x5d, 0x96, 0xe7, 0x36, 0x39, 0xa2, 0xcb, 0xa2, 0xdf, 0xe6, 0x80, 0xd7, 0x66, 0xfb, 0xb7, 0xe1, 0xf3, 0xb6, 0x46, 0xbd, 0xfd, 0xfd, 0xb6, 0xd9, 0xfe, 0xd6, 0x39, 0xff, 0xef, 0xa2, 0x83, 0x4d, 0x84, 0x29, 0x1e, 0x9f, 0xfb, 0xd5, 0xff, 0x07, 0x61, 0xd5, 0x04, 0x1e, 0xf8, 0x22, 0x40, 0x7a, 0x01, 0xfe, 0xf2, 0xcb, 0xfc, 0xd2, 0xad, 0x17, 0x1e, 0xfb, 0xf7, 0x46, 0x0f, 0x1e, 0x50, 0x01, 0x45, 0xb6, 0x04, 0xa1, 0x58, 0xcd, 0x4f, 0x90, 0x16, 0x8f, 0xd4, 0x25, 0xaa, 0x2a, 0x28, 0xca, 0x0c, 0x55, 0xe4, 0xf5, 0x75, 0x90, 0x37, 0x85, 0xf3, 0x7f, 0xf8, 0x95, 0x5f, 0xa1, 0x13, 0x7b, 0x1c, 0xde, 0x7b, 0xd8, 0x88, 0xb6, 0x6c, 0x51, 0x7f, 0xeb, 0x60, 0x97, 0x2f, 0xbe, 0xfd, 0x32, 0x1f, 0x7b, 0xe9, 0x49, 0x2e, 0x67, 0x53, 0xee, 0xde, 0x7d, 0x8d, 0xf9, 0x3c, 0xe1, 0xc5, 0xe0, 0x69, 0xe8, 0x3d, 0xde, 0xf2, 0xd5, 0x2d, 0xe2, 0x6e, 0xe1, 0x3f, 0xd8, 0xf2, 0x37, 0xab, 0x64, 0xc5, 0xcb, 0x93, 0x01, 0x87, 0xcb, 0x45, 0x53, 0xc8, 0xdd, 0x59, 0xba, 0xdb, 0xdd, 0xdb, 0x7f, 0xfb, 0xe8, 0xe9, 0x31, 0x47, 0x5f, 0xf8, 0x0d, 0x9e, 0xfa, 0x2b, 0x9f, 0x62, 0x7c, 0xd3, 0x44, 0xaa, 0x9a, 0xc2, 0x7e, 0x59, 0x9b, 0xfe, 0xe4, 0x66, 0x83, 0x5e, 0x93, 0xe2, 0xb6, 0x75, 0xcc, 0x61, 0x38, 0x6c, 0x8a, 0xb7, 0x5b, 0xc0, 0xdd, 0xef, 0x6d, 0xd7, 0xbd, 0x77, 0x70, 0x08, 0xdf, 0x83, 0xdf, 0x79, 0xf9, 0x9b, 0x5c, 0xbb, 0x76, 0xc0, 0xf5, 0x6b, 0xb7, 0x59, 0xcc, 0xe7, 0x3c, 0xb8, 0x67, 0xbc, 0xe0, 0xc7, 0x93, 0x09, 0xff, 0xee, 0xf3, 0x2f, 0x70, 0x79, 0xfe, 0x21, 0xfe, 0xd5, 0xbf, 0xfe, 0x0a, 0x0f, 0xcf, 0x0b, 0xa7, 0x2b, 0x0f, 0x9b, 0xc7, 0x1a, 0xf6, 0xbb, 0x04, 0x91, 0x47, 0xaf, 0xdb, 0xa1, 0xc8, 0x73, 0x3c, 0xbf, 0xe4, 0xe4, 0xe4, 0x84, 0xd0, 0x0f, 0xb8, 0x73, 0xe7, 0x4e, 0x13, 0x3a, 0x65, 0xed, 0x40, 0xf3, 0xd2, 0x20, 0x87, 0x69, 0x9e, 0x81, 0x9d, 0xc9, 0x3a, 0xd7, 0xb9, 0x6d, 0x06, 0xac, 0x17, 0xc4, 0xce, 0x8e, 0x21, 0x88, 0x45, 0xb1, 0x89, 0xfe, 0xd4, 0x4a, 0x21, 0x94, 0x91, 0x6e, 0x96, 0x65, 0x49, 0x2e, 0xf2, 0xa6, 0x08, 0xd9, 0xb1, 0x22, 0x49, 0xc2, 0x62, 0xb1, 0x30, 0xd1, 0x9a, 0x9d, 0x0e, 0xc3, 0xe1, 0x90, 0xc5, 0x72, 0xba, 0xd1, 0x15, 0xb6, 0x89, 0xc0, 0x41, 0x10, 0x36, 0xcd, 0x90, 0x54, 0xba, 0xe9, 0xf4, 0x87, 0xfd, 0x01, 0xbe, 0xf4, 0x78, 0x94, 0xcc, 0x9a, 0x5c, 0x04, 0x21, 0x04, 0x95, 0x52, 0x94, 0x75, 0xc2, 0x9a, 0x09, 0x73, 0xa9, 0xd7, 0x4c, 0xa5, 0x91, 0xac, 0x4d, 0xac, 0xfa, 0xdd, 0x1e, 0x91, 0x1f, 0x70, 0xef, 0xd1, 0xc3, 0xa6, 0x49, 0x70, 0x97, 0x50, 0x0b, 0xd3, 0x17, 0x71, 0xd4, 0x14, 0x34, 0x2b, 0xf1, 0xad, 0xd5, 0xa6, 0x04, 0xbe, 0x4f, 0x1c, 0x45, 0xa6, 0x88, 0xf7, 0x3a, 0xc8, 0xf9, 0x39, 0xab, 0x3c, 0xa3, 0xa8, 0x8c, 0x84, 0xca, 0x22, 0x22, 0x36, 0x44, 0xaa, 0x31, 0xd7, 0xaa, 0x41, 0x3b, 0x89, 0xe0, 0x9d, 0x77, 0xde, 0x69, 0x38, 0x4c, 0x93, 0xc9, 0x84, 0x30, 0x0c, 0x1b, 0x6e, 0x8d, 0xf5, 0x38, 0xb7, 0x6e, 0x9c, 0x96, 0xc3, 0x75, 0x78, 0x78, 0x48, 0xb7, 0x3b, 0xdb, 0x18, 0x19, 0x9a, 0xfa, 0x22, 0x37, 0x9a, 0x32, 0x5d, 0x99, 0xee, 0xda, 0x26, 0xa2, 0xad, 0x92, 0xc4, 0x04, 0xba, 0x68, 0x83, 0x0a, 0x0c, 0x06, 0xc6, 0xff, 0xdd, 0xae, 0xb9, 0x83, 0xc1, 0x80, 0x22, 0xcd, 0x38, 0xbf, 0xbc, 0x20, 0x1a, 0x19, 0x4f, 0xfe, 0xaa, 0x80, 0x38, 0x36, 0x35, 0x2e, 0x49, 0x97, 0x64, 0x59, 0x62, 0xc2, 0x89, 0xaa, 0x7a, 0x3c, 0x81, 0x49, 0x5e, 0xf3, 0x34, 0xe8, 0xd2, 0xd4, 0x9b, 0x2a, 0xaf, 0x28, 0xf3, 0x82, 0x20, 0x88, 0xe8, 0xc6, 0x1d, 0xb2, 0x3c, 0x31, 0x08, 0x78, 0x91, 0x22, 0x84, 0x26, 0xea, 0x84, 0xc4, 0xf5, 0x79, 0xe3, 0x79, 0xd2, 0x04, 0x7c, 0xd5, 0x8d, 0x8d, 0x9b, 0xa4, 0xa9, 0xca, 0x8a, 0x55, 0x96, 0x36, 0x69, 0x6b, 0xd3, 0xe9, 0x94, 0x2c, 0xcb, 0xe8, 0xf5, 0xfb, 0x44, 0x51, 0x44, 0xaf, 0xd7, 0xe3, 0xf4, 0x81, 0x09, 0x6c, 0x59, 0xa5, 0x89, 0x89, 0xeb, 0xf5, 0xbd, 0x75, 0x1e, 0xba, 0x2b, 0x51, 0x6b, 0xcf, 0x7a, 0xdb, 0x1d, 0xe4, 0xda, 0x77, 0x79, 0xb9, 0x8e, 0x2e, 0x74, 0xf4, 0xe9, 0x6d, 0xf8, 0xbb, 0x6d, 0xd9, 0x69, 0xff, 0xdd, 0x42, 0x28, 0x6d, 0xd2, 0x99, 0xfd, 0x50, 0xf3, 0x3c, 0x37, 0x66, 0x08, 0x61, 0xb8, 0xd1, 0xf9, 0xbb, 0x33, 0x79, 0xb7, 0xeb, 0x74, 0x09, 0x5c, 0xf6, 0x43, 0xda, 0xe0, 0x0b, 0x39, 0x24, 0xac, 0xf6, 0xa8, 0xa0, 0x1d, 0xd1, 0xd9, 0x1e, 0x23, 0xb4, 0x6d, 0x67, 0xdb, 0x1d, 0xe8, 0x36, 0x79, 0x98, 0x3b, 0xff, 0x6e, 0x8f, 0x03, 0xdc, 0x13, 0x72, 0x9b, 0x94, 0xcc, 0x1d, 0x13, 0xb8, 0x50, 0xf7, 0x86, 0xb1, 0x4b, 0xfd, 0xde, 0xb5, 0xe3, 0x5b, 0xd7, 0xaf, 0x63, 0xbb, 0xd9, 0xc8, 0xb6, 0xe7, 0x73, 0x3b, 0xa4, 0xf6, 0x26, 0x6c, 0x5b, 0x51, 0x55, 0x4a, 0xd1, 0xe9, 0x46, 0x8f, 0x35, 0x9e, 0x71, 0x0b, 0xfa, 0xb6, 0x39, 0xbe, 0x85, 0xb9, 0xb6, 0x15, 0xf2, 0xb6, 0x0f, 0xff, 0xe3, 0x8c, 0x6e, 0xbc, 0xda, 0xcf, 0x5f, 0x85, 0x31, 0x91, 0xbf, 0xc9, 0x76, 0xcf, 0xea, 0x39, 0x96, 0x0b, 0xbf, 0xe7, 0x79, 0xc9, 0x73, 0xcf, 0xbf, 0x80, 0xf7, 0xf9, 0xef, 0x99, 0x8b, 0xc7, 0x0b, 0x8c, 0x1e, 0x5e, 0x69, 0x7e, 0xe9, 0xd6, 0x0b, 0x8d, 0x89, 0xcb, 0xe3, 0x6c, 0x64, 0x2d, 0x93, 0x7c, 0x36, 0x3b, 0xe6, 0xf7, 0x5f, 0x1b, 0xf1, 0xd2, 0x8d, 0x17, 0xf9, 0x5f, 0xbf, 0xfb, 0x15, 0xb3, 0x28, 0xe6, 0x19, 0x45, 0x99, 0xa3, 0xcb, 0x02, 0x44, 0xed, 0x2c, 0x28, 0xcd, 0xf9, 0x76, 0x74, 0xeb, 0x3a, 0x9d, 0xd8, 0xe7, 0xc3, 0x1f, 0xbc, 0xc9, 0xe7, 0xba, 0x11, 0x9f, 0xae, 0x7f, 0x07, 0xf0, 0xb7, 0x7e, 0xe7, 0x8b, 0x7c, 0xe3, 0x1f, 0x7f, 0xb9, 0xe9, 0xdc, 0xff, 0xda, 0xec, 0x0c, 0x4f, 0x46, 0xf4, 0x7a, 0x7d, 0x5e, 0x9e, 0x0c, 0x78, 0xf1, 0x62, 0xde, 0x90, 0xd5, 0x0e, 0xeb, 0xc2, 0xb6, 0xad, 0x88, 0xbf, 0x5b, 0x31, 0x07, 0xe8, 0x0f, 0xfa, 0xcd, 0xbf, 0xb7, 0x67, 0xe8, 0xf6, 0xb1, 0xf4, 0xfc, 0x92, 0xe3, 0xd6, 0xef, 0x5e, 0x7d, 0xf5, 0x2e, 0x3f, 0xf8, 0xed, 0x9f, 0xe2, 0xa9, 0x8f, 0xf6, 0x6b, 0x92, 0xdc, 0x25, 0x9f, 0xfd, 0xfc, 0xab, 0xa4, 0x69, 0xca, 0x78, 0x34, 0x24, 0x4d, 0x97, 0x88, 0xfc, 0xa4, 0x09, 0x50, 0xb1, 0xee, 0x6d, 0xeb, 0xf9, 0x38, 0x57, 0x3a, 0xf1, 0x3c, 0x9f, 0x5d, 0x99, 0x85, 0x0f, 0xfb, 0x5d, 0x7e, 0xe4, 0x23, 0x1f, 0xe2, 0xef, 0xfc, 0x5f, 0x0f, 0xb9, 0x3c, 0x9f, 0xb2, 0x5a, 0xce, 0x79, 0xf4, 0xe8, 0x98, 0x0f, 0x3f, 0xfb, 0x41, 0x4a, 0x6f, 0xc8, 0x2b, 0xdf, 0xfc, 0x92, 0x09, 0x7a, 0xf9, 0xda, 0xd7, 0xea, 0xc7, 0x58, 0x11, 0x92, 0x3b, 0x2c, 0x89, 0xf5, 0xed, 0x0f, 0xfd, 0xc2, 0x2f, 0xd2, 0xeb, 0x76, 0xf8, 0xb5, 0x7f, 0xfd, 0x45, 0x06, 0x83, 0x01, 0x65, 0xb5, 0x34, 0x16, 0xad, 0x35, 0x7b, 0x38, 0x59, 0x1a, 0x5f, 0xf5, 0xe9, 0xa3, 0x47, 0x74, 0xbb, 0x5d, 0x42, 0x29, 0xb8, 0x5c, 0xcc, 0xa9, 0xb4, 0xa2, 0x5b, 0x87, 0x83, 0x24, 0x79, 0xb6, 0x71, 0x2d, 0x65, 0x59, 0xd6, 0x04, 0x70, 0x1c, 0x1e, 0x1e, 0x9a, 0xf8, 0x53, 0x7f, 0x9d, 0x6d, 0x51, 0xdb, 0xb1, 0x6c, 0xa0, 0x85, 0xbd, 0x5e, 0x8f, 0x6e, 0xb7, 0x8b, 0x1f, 0x85, 0x24, 0x59, 0xca, 0x7c, 0x3e, 0x27, 0xcd, 0x33, 0x92, 0x5a, 0x4e, 0x16, 0x77, 0xea, 0x31, 0xa3, 0x58, 0xaf, 0x4f, 0x8a, 0x4d, 0xa4, 0xca, 0x06, 0xd7, 0xf4, 0xa2, 0x18, 0x0a, 0xd3, 0x64, 0x55, 0x45, 0x49, 0xa9, 0xf4, 0xe3, 0xaf, 0x6d, 0xd6, 0xf3, 0x5e, 0xb7, 0xe8, 0x29, 0xa5, 0x58, 0x2c, 0x16, 0x94, 0x79, 0x41, 0x27, 0x8c, 0x36, 0x7d, 0x44, 0xc4, 0x26, 0x07, 0x08, 0xe9, 0x71, 0xed, 0xda, 0x35, 0x96, 0xcb, 0xb5, 0x11, 0x8a, 0xf4, 0x3d, 0xf2, 0x22, 0xa7, 0xac, 0x0a, 0xfc, 0xb2, 0xe4, 0x9d, 0x93, 0x05, 0x71, 0xaf, 0x4b, 0xa2, 0x4b, 0x96, 0x45, 0x82, 0x0c, 0x03, 0xc2, 0x30, 0x40, 0xd5, 0x45, 0xa9, 0xac, 0xaf, 0x3d, 0xcf, 0x33, 0x66, 0x38, 0x95, 0xaa, 0xa8, 0x2a, 0x0d, 0xfe, 0x5a, 0xdf, 0x9d, 0x65, 0x19, 0xa7, 0xa7, 0xa7, 0xcd, 0x28, 0xd6, 0x8e, 0x0a, 0xec, 0xda, 0x69, 0xe7, 0xeb, 0x52, 0x4a, 0x06, 0x83, 0x01, 0x87, 0x87, 0x87, 0x26, 0xa4, 0x66, 0x3e, 0xe7, 0x5e, 0x76, 0x62, 0xd6, 0xa9, 0xda, 0xf7, 0xc2, 0x64, 0x7d, 0xa8, 0x46, 0x7b, 0x2f, 0x84, 0x60, 0xb5, 0x5a, 0x35, 0xb0, 0xbb, 0xcd, 0x66, 0x5f, 0x2c, 0x32, 0x83, 0x3a, 0xd8, 0xa6, 0xcb, 0x63, 0x83, 0xfc, 0x6d, 0x51, 0x67, 0x5f, 0xae, 0x51, 0x68, 0x8b, 0x14, 0xc3, 0xda, 0xe9, 0xd3, 0x22, 0xc0, 0x52, 0x4a, 0x13, 0x74, 0xa5, 0xad, 0xe1, 0xd6, 0x5a, 0xb7, 0x6e, 0xdf, 0x7f, 0xf3, 0x7a, 0xe5, 0x06, 0xf2, 0x9d, 0xe4, 0xd9, 0xba, 0xb6, 0x15, 0x06, 0x91, 0xee, 0xd5, 0x52, 0xe5, 0x24, 0x49, 0x10, 0x75, 0x53, 0x9b, 0xe7, 0x26, 0xa3, 0xfe, 0x89, 0x27, 0x9e, 0xa0, 0xdf, 0xef, 0x73, 0x7c, 0x7c, 0xcc, 0xfd, 0x7b, 0xf7, 0xe8, 0x47, 0x1d, 0x93, 0x5d, 0x1f, 0x18, 0x75, 0xc5, 0x7c, 0xb5, 0x34, 0x90, 0x7b, 0x5b, 0x3e, 0x65, 0x6f, 0x16, 0x56, 0x76, 0x77, 0x0f, 0x2e, 0x3c, 0xdb, 0x86, 0xda, 0xb7, 0x91, 0xa0, 0xda, 0x52, 0x28, 0x2b, 0xcc, 0x77, 0x0b, 0x5b, 0x9b, 0x29, 0xef, 0x6e, 0x1c, 0xda, 0x1a, 0x77, 0x77, 0x43, 0xd0, 0x8e, 0x6b, 0x6d, 0x77, 0xc5, 0x76, 0x77, 0xe3, 0x16, 0x54, 0xb7, 0x60, 0xb8, 0xaf, 0xaf, 0x0d, 0xbb, 0x6f, 0x84, 0x80, 0xb4, 0xc8, 0x78, 0xae, 0xe1, 0x8d, 0x8b, 0x6c, 0x6c, 0x4b, 0x38, 0x6b, 0xcf, 0xa0, 0x5d, 0x28, 0xbd, 0xac, 0xd3, 0xab, 0xda, 0x79, 0xeb, 0xae, 0xd3, 0x9d, 0x78, 0x0f, 0x9d, 0xf5, 0x36, 0x1d, 0xf8, 0xb6, 0x19, 0xbe, 0x0b, 0x79, 0xb7, 0x19, 0xb1, 0xed, 0x82, 0xec, 0x3e, 0xff, 0xe3, 0xa4, 0x6e, 0x6d, 0x18, 0x7e, 0x5b, 0x51, 0x7f, 0xdc, 0x46, 0xc4, 0x7d, 0x3f, 0xdb, 0x05, 0xbd, 0x2d, 0xa1, 0x6b, 0x3f, 0x66, 0x5b, 0xb3, 0xae, 0xde, 0x67, 0xfa, 0x5a, 0x9e, 0x9b, 0xf7, 0xfa, 0xda, 0xb5, 0x83, 0xf5, 0x7b, 0xac, 0x3d, 0xca, 0xaa, 0xa4, 0x2a, 0xaa, 0x2b, 0x4e, 0x6c, 0xef, 0x76, 0xd3, 0x6a, 0xc6, 0x97, 0x8e, 0x4c, 0x57, 0x99, 0x27, 0xd3, 0xfa, 0x62, 0xcf, 0x01, 0x85, 0x1f, 0x78, 0x84, 0xa1, 0x4f, 0x10, 0xf8, 0x64, 0x99, 0xc7, 0x8b, 0x17, 0x73, 0x5e, 0x9e, 0x0c, 0x9a, 0xf8, 0xd7, 0x2f, 0xbc, 0xf9, 0x3b, 0xfc, 0x2f, 0xaf, 0x3d, 0x20, 0x49, 0x8b, 0x2b, 0x08, 0xc0, 0x59, 0xa5, 0x18, 0xf4, 0x07, 0x48, 0xa9, 0xb8, 0x75, 0xe3, 0x49, 0x3e, 0xf3, 0xa5, 0xcf, 0xbd, 0xab, 0xcd, 0xec, 0x8b, 0x1f, 0xba, 0xc9, 0xbf, 0xf3, 0x81, 0x1f, 0xdf, 0xf8, 0xdd, 0x4b, 0x93, 0xc1, 0x95, 0xfb, 0x7d, 0xeb, 0xfc, 0x9c, 0x8b, 0x8b, 0xf3, 0xc7, 0x16, 0x7d, 0x5b, 0xe4, 0xdb, 0x10, 0xbc, 0x65, 0xc5, 0x7f, 0xed, 0x5b, 0xdf, 0xe1, 0xaf, 0xfd, 0x6f, 0x5f, 0xe3, 0xcb, 0xbf, 0x6e, 0x8a, 0x69, 0x27, 0x96, 0x3c, 0xf7, 0xec, 0x88, 0xe3, 0xe3, 0x53, 0x9e, 0x7b, 0xfe, 0x0f, 0xf0, 0x95, 0xaf, 0xfe, 0xeb, 0x77, 0x3d, 0xce, 0xe7, 0x9e, 0xb9, 0xc1, 0x47, 0x3e, 0xf2, 0xf1, 0x8d, 0xdf, 0xed, 0xec, 0xc4, 0xb5, 0x3c, 0x0d, 0x26, 0x93, 0x67, 0x18, 0x4f, 0x26, 0x7c, 0xe3, 0xeb, 0xdf, 0x60, 0xb9, 0x2c, 0xc9, 0xcb, 0x8c, 0xd1, 0xce, 0x35, 0x56, 0xcb, 0x39, 0xbf, 0xf9, 0xad, 0x6f, 0xf0, 0x8d, 0xaf, 0x7f, 0x83, 0xa3, 0xa3, 0xe3, 0x9a, 0x3d, 0x7f, 0xb9, 0xe1, 0x1c, 0xb7, 0x21, 0xab, 0x3b, 0x3c, 0xe0, 0x9b, 0xdf, 0xf8, 0x1c, 0x7f, 0xf4, 0x8f, 0xfe, 0xc3, 0x7a, 0x5e, 0xea, 0x73, 0xfb, 0x4e, 0x4c, 0x96, 0x19, 0x7f, 0xf4, 0x29, 0x82, 0xa3, 0xa3, 0x23, 0xf2, 0x34, 0x65, 0x32, 0x99, 0x34, 0xeb, 0x97, 0x95, 0x95, 0xe5, 0x65, 0xb1, 0xc9, 0x32, 0xf7, 0x74, 0x13, 0x19, 0x6b, 0x0d, 0x88, 0xec, 0xbc, 0xf7, 0xec, 0xec, 0xa4, 0x59, 0xec, 0xcb, 0xb2, 0xc4, 0x93, 0x7e, 0x93, 0xea, 0x65, 0xaf, 0x0f, 0x6b, 0x98, 0xa2, 0x59, 0xaf, 0x69, 0xbd, 0x5e, 0x0f, 0xbf, 0x46, 0x36, 0x6d, 0xe3, 0x52, 0xd6, 0x31, 0xd2, 0x42, 0x1a, 0xe1, 0x94, 0xdb, 0x44, 0x54, 0x75, 0x51, 0x8b, 0xa2, 0x08, 0xe1, 0x29, 0xf2, 0xcc, 0xa8, 0x07, 0x7c, 0xe9, 0x11, 0x44, 0xb5, 0x9b, 0x65, 0x9d, 0x7a, 0x28, 0xea, 0x22, 0xa9, 0xd0, 0x57, 0xd6, 0x63, 0x3b, 0x42, 0x5c, 0x2d, 0x97, 0x4c, 0xcb, 0x8a, 0xd0, 0xf3, 0x29, 0x50, 0x68, 0x4f, 0xe2, 0x45, 0x21, 0x5e, 0xe8, 0x6f, 0x8e, 0xf5, 0x94, 0x66, 0x7f, 0xb2, 0xd7, 0xa8, 0x8d, 0x74, 0x7d, 0x6c, 0xa6, 0xd1, 0x28, 0x49, 0x57, 0x4b, 0x16, 0xf7, 0x2f, 0xe9, 0x8f, 0x87, 0x88, 0x28, 0x40, 0x07, 0xe0, 0xc7, 0x06, 0xb1, 0xab, 0xac, 0x2d, 0x77, 0xa5, 0x08, 0xa4, 0x67, 0x02, 0x61, 0xb4, 0xa0, 0x2a, 0xea, 0xd7, 0x59, 0x81, 0x92, 0xaa, 0x69, 0xda, 0xac, 0x9b, 0x9e, 0x3d, 0x5e, 0xcb, 0x6b, 0x1a, 0x74, 0x7b, 0x5c, 0xbb, 0x76, 0x8d, 0xa7, 0x9e, 0x7a, 0x8a, 0xef, 0x7f, 0xff, 0xfb, 0xbc, 0xfe, 0xfa, 0xeb, 0x2c, 0x97, 0x4b, 0x76, 0x77, 0x77, 0xcd, 0x46, 0xcd, 0xca, 0x92, 0xa5, 0x09, 0xf7, 0xd2, 0x5a, 0x23, 0xd4, 0x1a, 0xbd, 0x73, 0x13, 0x2d, 0xad, 0xcf, 0x49, 0x56, 0x16, 0x74, 0xea, 0x8d, 0x54, 0x25, 0x95, 0xd9, 0xe0, 0x2d, 0x0c, 0x51, 0x4e, 0x97, 0x26, 0x60, 0x27, 0x0c, 0x43, 0xce, 0xcf, 0xcf, 0x89, 0xc3, 0x5e, 0xc3, 0x43, 0x2a, 0xab, 0x1c, 0xad, 0x2b, 0x3c, 0xcf, 0x7c, 0x9e, 0x42, 0x08, 0x54, 0x5d, 0xdc, 0x2b, 0x8c, 0x29, 0x90, 0x2f, 0x25, 0xc2, 0x07, 0x59, 0x9a, 0xce, 0xbd, 0x2a, 0xd7, 0x84, 0xef, 0x28, 0x88, 0x88, 0xa2, 0x00, 0x3f, 0xf4, 0x10, 0xa2, 0xe6, 0x99, 0x85, 0xc1, 0x06, 0x0f, 0xcd, 0xf7, 0x7d, 0x13, 0xe9, 0x5d, 0xbf, 0x17, 0x7b, 0xfb, 0xfb, 0x0d, 0x21, 0xae, 0xaa, 0x2a, 0xe6, 0x73, 0xe3, 0xac, 0x57, 0x55, 0x15, 0xbb, 0xbb, 0xbb, 0x1c, 0xbd, 0x63, 0xbc, 0x12, 0xba, 0xb5, 0x4d, 0x7b, 0x55, 0x55, 0xf8, 0xdb, 0xd8, 0xcf, 0xae, 0xac, 0xc8, 0x35, 0x2a, 0x70, 0x65, 0x6c, 0x36, 0xf1, 0xc5, 0x2e, 0xfe, 0x6d, 0xf7, 0x36, 0x97, 0xe2, 0xef, 0x26, 0x9c, 0xd9, 0xdf, 0x37, 0xd2, 0x01, 0xe7, 0xa2, 0x70, 0x21, 0x7f, 0xb7, 0xc3, 0xb5, 0x29, 0x35, 0x6e, 0x41, 0x74, 0x21, 0x69, 0x77, 0x4e, 0x6b, 0x8f, 0xcf, 0xee, 0xa0, 0xdc, 0xb9, 0xb8, 0xdd, 0x90, 0xb8, 0xdd, 0x5f, 0x3b, 0x34, 0xc4, 0x2d, 0xc2, 0xdb, 0x66, 0xc8, 0x6e, 0x71, 0x6a, 0xc8, 0x13, 0x5b, 0xd8, 0xe6, 0xee, 0xdc, 0xdd, 0x35, 0xb5, 0x71, 0x8f, 0xbf, 0x1b, 0x77, 0xb7, 0xa2, 0x04, 0xae, 0x4c, 0xab, 0x5d, 0xb0, 0xdb, 0xac, 0xcc, 0xb6, 0x29, 0x8c, 0xbb, 0x39, 0xf1, 0x3c, 0xbd, 0xf1, 0x7a, 0xdc, 0xcd, 0x87, 0xdb, 0x8d, 0xb7, 0xe7, 0xd8, 0x8f, 0x2b, 0xd2, 0xee, 0x06, 0xc2, 0x8d, 0xa6, 0xdd, 0x86, 0x2e, 0x6c, 0x0b, 0x68, 0x69, 0x17, 0x68, 0xd9, 0xea, 0xd0, 0xdd, 0x42, 0xde, 0x9e, 0xa9, 0x6f, 0x4b, 0xf3, 0xd3, 0x75, 0xe7, 0xf0, 0xb8, 0x9b, 0xed, 0xce, 0x6d, 0x31, 0x07, 0x88, 0x96, 0x6b, 0xbe, 0x03, 0x55, 0x05, 0x4a, 0xa1, 0xaa, 0xf4, 0x7d, 0x17, 0x73, 0x80, 0xc5, 0xfc, 0x84, 0x30, 0x14, 0xfc, 0xca, 0xcb, 0xdf, 0xad, 0xf3, 0xe4, 0x35, 0x61, 0x60, 0x66, 0xac, 0x61, 0xe4, 0x23, 0x3c, 0xf3, 0x5a, 0x8a, 0xdc, 0x1c, 0xef, 0xe1, 0xbd, 0x87, 0xfc, 0xa3, 0xdf, 0xfb, 0xfb, 0xd1, 0xf3, 0x4b, 0x3e, 0x7f, 0xf3, 0x80, 0xdf, 0x79, 0x65, 0x9d, 0x9f, 0xfe, 0x7b, 0x3e, 0xfa, 0x14, 0xfb, 0x7b, 0x87, 0x54, 0xb7, 0x9e, 0x61, 0xf7, 0xee, 0x1b, 0x5c, 0xce, 0x35, 0x4f, 0xdd, 0x19, 0xf3, 0x4b, 0xb7, 0x5e, 0xe0, 0x90, 0x11, 0x3c, 0xf3, 0x22, 0x47, 0xb7, 0xae, 0x6f, 0x2d, 0xee, 0x2f, 0x7f, 0xf7, 0x3e, 0x2f, 0x7f, 0xf7, 0xfe, 0x7b, 0x1e, 0xef, 0x68, 0x14, 0xf3, 0xc4, 0x13, 0x7b, 0xef, 0x7a, 0x9f, 0x76, 0xe7, 0x6e, 0x8b, 0xfe, 0x7f, 0xb1, 0xbc, 0xcf, 0x2f, 0x9d, 0x5c, 0xf2, 0xe7, 0x7f, 0xf6, 0x93, 0x4d, 0x41, 0xf7, 0x7c, 0x8f, 0x24, 0x49, 0xb8, 0x7d, 0xeb, 0x36, 0xbf, 0xf0, 0x8b, 0x3f, 0xcf, 0x2f, 0xfc, 0xe2, 0xcf, 0x33, 0x39, 0x7c, 0x96, 0x8b, 0xa3, 0xd7, 0xf9, 0x1b, 0x7f, 0xfd, 0xaf, 0x5e, 0x39, 0xce, 0xbb, 0x6f, 0x3c, 0xe0, 0xee, 0x1b, 0xff, 0xf0, 0x3d, 0x8f, 0xb3, 0xd7, 0x0b, 0xe8, 0xf7, 0x7d, 0xbe, 0xf3, 0xca, 0x2b, 0xdc, 0xbc, 0x69, 0xe6, 0xf2, 0x17, 0x17, 0x97, 0xdc, 0x7d, 0xfd, 0x5e, 0x53, 0xbc, 0xad, 0xe6, 0xdc, 0x42, 0xed, 0xf3, 0x45, 0xce, 0xee, 0xce, 0x1e, 0xf7, 0x1e, 0xbe, 0xca, 0xe1, 0xe1, 0x01, 0x3f, 0xfe, 0x7b, 0x3e, 0xcd, 0x37, 0x7e, 0xfb, 0x6f, 0x36, 0xe7, 0xd3, 0x64, 0x32, 0xa6, 0xdf, 0xdf, 0x37, 0x24, 0xa2, 0xc4, 0x58, 0x89, 0x86, 0xf5, 0xda, 0x73, 0x74, 0x7c, 0x6c, 0xae, 0xc9, 0x7a, 0xc1, 0x97, 0x79, 0x46, 0xe1, 0xb8, 0x81, 0x09, 0x4f, 0x6f, 0x84, 0xb5, 0xd8, 0x62, 0x63, 0x0b, 0x84, 0x25, 0xa4, 0xb9, 0x1b, 0xd4, 0xa2, 0x28, 0xc8, 0xa5, 0x21, 0x8b, 0x59, 0x79, 0x9a, 0x96, 0x26, 0xb2, 0x34, 0x0c, 0x43, 0xe2, 0x28, 0x26, 0xa8, 0x17, 0xe0, 0x2c, 0x5f, 0xd6, 0x06, 0x25, 0xf5, 0x06, 0x02, 0x69, 0xdc, 0xd6, 0x94, 0x42, 0xf8, 0x06, 0xf9, 0xcc, 0x92, 0x84, 0x32, 0x2f, 0x28, 0xd3, 0x8c, 0x50, 0x78, 0x48, 0xa5, 0x19, 0x0d, 0x87, 0x8c, 0x87, 0x23, 0x1e, 0x25, 0x33, 0x93, 0x2e, 0x97, 0xa5, 0xb5, 0x06, 0x5b, 0xe0, 0x7b, 0x7e, 0xf3, 0x18, 0x76, 0x91, 0xb7, 0xba, 0x75, 0x61, 0xd7, 0xb8, 0x3a, 0x36, 0x79, 0xb9, 0x58, 0x82, 0xef, 0x11, 0x68, 0x45, 0x20, 0xa2, 0x8d, 0x6b, 0xdb, 0xa6, 0x80, 0x59, 0xe4, 0xa0, 0x2c, 0xcb, 0xc6, 0xa2, 0x56, 0x55, 0x1e, 0x65, 0x9a, 0x30, 0xee, 0x0f, 0xb8, 0x76, 0x78, 0x9d, 0x68, 0xd8, 0x67, 0x56, 0xae, 0x58, 0xe4, 0x29, 0xab, 0xcc, 0x30, 0xd1, 0xc3, 0x38, 0x32, 0xfc, 0x05, 0xdb, 0x60, 0x29, 0x73, 0xad, 0x07, 0xd2, 0xa3, 0x12, 0x20, 0xea, 0x7a, 0x12, 0x86, 0x21, 0x7b, 0x7b, 0x7b, 0x04, 0x41, 0xd0, 0x28, 0x02, 0xe2, 0x38, 0x6e, 0x4c, 0x5c, 0xbe, 0xfd, 0xed, 0x6f, 0xf3, 0xf6, 0xdb, 0x6f, 0x37, 0x9d, 0xf6, 0xee, 0xee, 0xee, 0x3a, 0xb9, 0xcc, 0x97, 0x57, 0xd6, 0x85, 0x66, 0xbd, 0x40, 0x34, 0x21, 0x39, 0x96, 0xb4, 0x26, 0xa5, 0x24, 0xbf, 0x9c, 0x32, 0x1e, 0x8f, 0x1b, 0x24, 0xa0, 0xbd, 0x1e, 0x7a, 0x35, 0xe7, 0x6a, 0x1d, 0x18, 0xa6, 0x9c, 0xa6, 0xd5, 0xa4, 0xa4, 0x55, 0x75, 0x88, 0x55, 0x18, 0x85, 0x20, 0xcd, 0x46, 0x45, 0x57, 0x86, 0x3c, 0x5b, 0x55, 0x95, 0x41, 0x31, 0x4a, 0xc5, 0xb8, 0x3f, 0x44, 0x63, 0xbb, 0xfe, 0xc2, 0x44, 0xd3, 0xfb, 0x02, 0xbf, 0x26, 0x3e, 0x4a, 0x65, 0x5c, 0xe5, 0x1a, 0x29, 0x70, 0x8d, 0x00, 0x96, 0xca, 0xe8, 0x6f, 0x2e, 0x66, 0x97, 0xcc, 0x66, 0x33, 0x54, 0x61, 0xde, 0x27, 0xdf, 0xf3, 0x08, 0xa4, 0xb1, 0x2f, 0x9e, 0x8c, 0x27, 0x4c, 0xfa, 0x43, 0x73, 0xde, 0xfa, 0x1e, 0x67, 0x67, 0x67, 0x94, 0x5a, 0x99, 0x0e, 0xdd, 0xed, 0xa4, 0xb7, 0xc5, 0x80, 0xb6, 0x17, 0x73, 0xd7, 0x2e, 0xd5, 0x9d, 0xbf, 0xb7, 0x2d, 0x48, 0xdd, 0xc2, 0xe9, 0x42, 0xb9, 0x96, 0x15, 0x6a, 0xdd, 0xe8, 0x5c, 0x23, 0x93, 0xb6, 0xb9, 0x4a, 0xbb, 0xf3, 0x74, 0xa1, 0x76, 0xeb, 0x84, 0xd4, 0x76, 0xb3, 0x73, 0x8d, 0x65, 0x5c, 0xb8, 0xa9, 0xbd, 0x21, 0x89, 0x5a, 0x5e, 0xf5, 0x6d, 0xc8, 0xb7, 0x5d, 0x4c, 0x37, 0x20, 0xa9, 0x2d, 0xdd, 0xa8, 0x3d, 0xf6, 0x76, 0x08, 0x4b, 0xbb, 0x20, 0xb9, 0x1d, 0xf9, 0xe3, 0xe6, 0xc5, 0xed, 0xd0, 0x92, 0x6d, 0x5e, 0xfa, 0x91, 0x1f, 0x5d, 0xd1, 0xd9, 0x6f, 0x92, 0xe8, 0xf2, 0x8d, 0x63, 0xdc, 0x86, 0x8c, 0xb4, 0xd9, 0xf1, 0xed, 0xe7, 0xd9, 0x06, 0xb9, 0x3b, 0x15, 0x78, 0x2b, 0x6c, 0xdf, 0x7e, 0xef, 0x36, 0x22, 0x67, 0x9d, 0xc7, 0x0a, 0x3d, 0x7f, 0xeb, 0x7c, 0xbc, 0x2d, 0x89, 0x74, 0x51, 0x81, 0x4d, 0x69, 0x52, 0xb8, 0xe1, 0xfc, 0xb7, 0x0d, 0x6a, 0xb7, 0xc5, 0xbc, 0x53, 0x2d, 0x78, 0x70, 0x7e, 0x8a, 0x7e, 0xeb, 0xe5, 0xf5, 0xf1, 0x54, 0x25, 0xd2, 0x83, 0xa2, 0x58, 0x00, 0xd1, 0x63, 0xf3, 0xd3, 0xdd, 0xee, 0x7d, 0x0c, 0x2c, 0xe6, 0xc7, 0x14, 0x45, 0xc6, 0x30, 0xec, 0xd0, 0xeb, 0x46, 0xf4, 0x87, 0x5d, 0x7a, 0xbd, 0x2e, 0x41, 0xe8, 0x91, 0x97, 0xc6, 0x46, 0x39, 0x4d, 0x12, 0x7c, 0x7f, 0xc8, 0xcb, 0x93, 0x01, 0xd7, 0x8e, 0xee, 0x37, 0xb3, 0xf4, 0x2f, 0xbe, 0xfd, 0x72, 0xc3, 0xec, 0xff, 0x2b, 0x7f, 0xf8, 0x17, 0xf9, 0xd4, 0xa3, 0x63, 0x98, 0x03, 0xdf, 0x7b, 0x95, 0x53, 0x3f, 0xe0, 0x23, 0x1f, 0xf9, 0x38, 0xf3, 0xcb, 0x57, 0xf8, 0xcc, 0x97, 0x3e, 0xc7, 0x67, 0x3e, 0xf9, 0xe9, 0xe6, 0xb9, 0x3f, 0xf0, 0xcc, 0x9d, 0xf7, 0x15, 0x0a, 0xb3, 0x55, 0x9a, 0xee, 0xfb, 0x74, 0xdf, 0x65, 0x16, 0xdf, 0x66, 0xc0, 0x5b, 0xd6, 0xfb, 0xd1, 0xad, 0xeb, 0xfc, 0xb3, 0x7f, 0xf4, 0x55, 0xf8, 0x14, 0x70, 0xef, 0xd5, 0xe6, 0x73, 0x8e, 0xa2, 0x88, 0xeb, 0xd7, 0xf7, 0x51, 0xaa, 0xe4, 0x6f, 0xfc, 0xf5, 0xbf, 0xca, 0x5f, 0xf9, 0xcf, 0xff, 0x6b, 0xb2, 0xf9, 0x23, 0xba, 0xbd, 0x01, 0x1f, 0xf9, 0xc8, 0xc7, 0xdf, 0x57, 0xf1, 0xde, 0x0e, 0x17, 0x1b, 0x6f, 0x85, 0x65, 0xde, 0xe1, 0xee, 0xf7, 0xbf, 0xcf, 0xde, 0xc1, 0x21, 0xa7, 0xc7, 0x47, 0x5b, 0x59, 0xed, 0x6e, 0xfa, 0x5a, 0xd4, 0x9f, 0x34, 0x9b, 0x8d, 0x51, 0x67, 0x1d, 0x32, 0x64, 0x65, 0x62, 0x96, 0xe5, 0x3e, 0x19, 0x8d, 0xe9, 0xf7, 0xfb, 0xa4, 0x75, 0x97, 0x63, 0xd7, 0xa0, 0x4a, 0x2b, 0x64, 0x50, 0xa7, 0xbd, 0xd9, 0xcd, 0x74, 0x18, 0x90, 0x95, 0x4b, 0xca, 0xa2, 0x00, 0x61, 0x2c, 0x88, 0x2b, 0x55, 0xe0, 0xf9, 0x82, 0x2c, 0x4f, 0xe8, 0x0f, 0xba, 0xe4, 0x95, 0x73, 0x6e, 0x3b, 0xd7, 0x95, 0xb9, 0xce, 0x3c, 0xc6, 0x63, 0x43, 0x5a, 0x4b, 0xf2, 0x8c, 0xdc, 0xf2, 0x2a, 0xb4, 0x82, 0xba, 0x20, 0x05, 0xa1, 0x41, 0x11, 0x65, 0xe1, 0x91, 0x15, 0x85, 0x59, 0xd0, 0x6b, 0x22, 0x6b, 0x18, 0x45, 0x9b, 0x12, 0xd3, 0xa2, 0x24, 0x8e, 0x02, 0x3c, 0x41, 0x23, 0x27, 0x76, 0x7d, 0x22, 0xf4, 0x16, 0xf2, 0xab, 0xe7, 0x7b, 0xcd, 0x3c, 0xb9, 0x28, 0x4c, 0xb4, 0xa8, 0x35, 0x62, 0x09, 0x3d, 0xdf, 0x90, 0xdc, 0xb4, 0x21, 0x6f, 0xb5, 0xd7, 0x25, 0xcf, 0xf3, 0x48, 0x56, 0x29, 0x71, 0x14, 0x99, 0x4c, 0xf5, 0xc2, 0xac, 0xf3, 0x7e, 0x60, 0x43, 0xa2, 0x60, 0xd4, 0xeb, 0xe3, 0x21, 0x48, 0x97, 0x2b, 0x56, 0xc5, 0x92, 0x12, 0x85, 0x14, 0x02, 0x51, 0x43, 0xec, 0x91, 0x6f, 0x4c, 0x71, 0x54, 0x59, 0x52, 0x95, 0xc6, 0x55, 0xd1, 0xf3, 0x7c, 0x84, 0x27, 0xa8, 0xf4, 0x5a, 0xf6, 0x1b, 0x86, 0x86, 0x2b, 0x70, 0x7e, 0x7e, 0xde, 0xcc, 0xd3, 0xf3, 0x3c, 0xc7, 0x43, 0x30, 0x18, 0x0c, 0x18, 0x0c, 0x06, 0xcd, 0xfa, 0x3d, 0x9f, 0x1b, 0x77, 0xbe, 0xc1, 0x60, 0xb0, 0x56, 0x1d, 0x61, 0xa4, 0x75, 0x42, 0x08, 0xa4, 0x5e, 0xbf, 0x07, 0x17, 0x17, 0xa7, 0xf4, 0x7a, 0xbd, 0x86, 0xdd, 0x6e, 0x1b, 0x3b, 0x5b, 0xb0, 0x2d, 0xa9, 0x59, 0x29, 0x4d, 0xb7, 0xd3, 0x21, 0x4f, 0x52, 0x2e, 0x2e, 0x2e, 0xa8, 0x7a, 0xb5, 0xdb, 0x5b, 0xa1, 0x50, 0x35, 0x8a, 0xea, 0xf9, 0x76, 0xdd, 0xd5, 0x8d, 0xa4, 0x54, 0x09, 0x4b, 0x22, 0x54, 0xa0, 0x05, 0x5a, 0x88, 0x86, 0xf9, 0x2e, 0xc5, 0xda, 0x97, 0xa0, 0xd3, 0xe9, 0xa0, 0x45, 0x64, 0xba, 0x7d, 0xb1, 0x0e, 0x2b, 0xab, 0xfc, 0x60, 0xcd, 0x63, 0xaa, 0x1d, 0xf7, 0x56, 0x69, 0x62, 0x8c, 0x6a, 0xaa, 0x8a, 0xf1, 0xfe, 0x6e, 0xe3, 0x0b, 0x73, 0xf3, 0xf0, 0x3a, 0x83, 0x7e, 0x1f, 0xa9, 0xa1, 0xc8, 0x72, 0x96, 0xcb, 0xe5, 0x86, 0xab, 0xa9, 0x35, 0x38, 0xf2, 0xb7, 0xb1, 0xaf, 0xdd, 0x0e, 0xac, 0xdd, 0x29, 0xda, 0x83, 0xb4, 0x73, 0x25, 0x77, 0xce, 0x6c, 0xbb, 0x50, 0xd7, 0x51, 0xc7, 0x9d, 0x29, 0xb9, 0x44, 0x38, 0x29, 0x65, 0x43, 0xb8, 0x68, 0x13, 0xd1, 0xec, 0x97, 0xd5, 0x74, 0xb6, 0x61, 0x79, 0xb7, 0xb0, 0xb7, 0x4f, 0x42, 0x97, 0x74, 0x66, 0xe1, 0x8c, 0xf6, 0x8c, 0xc9, 0xd5, 0x59, 0xbb, 0xcc, 0xee, 0xcd, 0x6c, 0xf0, 0xcd, 0xe2, 0xe3, 0x8e, 0x0c, 0xb6, 0x79, 0xa4, 0xbb, 0xb9, 0xf0, 0xee, 0x0c, 0xc8, 0x45, 0x30, 0xda, 0x9d, 0xbc, 0x65, 0xfe, 0xb7, 0x35, 0xe0, 0xee, 0x26, 0xc0, 0x3d, 0xee, 0xcd, 0x05, 0x43, 0x22, 0x82, 0x4d, 0xe8, 0xda, 0x95, 0xcc, 0x99, 0x82, 0xce, 0x95, 0x4d, 0x40, 0x3b, 0x8e, 0xb6, 0x3d, 0x1e, 0x70, 0xed, 0x5d, 0xb7, 0x15, 0xda, 0x4d, 0xa3, 0x1a, 0xb6, 0x86, 0xcb, 0xb4, 0x1f, 0x63, 0x5b, 0x28, 0xcc, 0xbb, 0x99, 0xda, 0xb8, 0x08, 0x48, 0xdb, 0x97, 0xc0, 0xbd, 0xbf, 0xef, 0x28, 0x2f, 0xdc, 0x62, 0xde, 0x86, 0xd9, 0x01, 0xb2, 0xe9, 0x25, 0x17, 0xbf, 0xf5, 0xeb, 0xbc, 0xfc, 0x6f, 0x5e, 0xa5, 0xaa, 0x0c, 0xe3, 0xd5, 0x17, 0x86, 0x30, 0x54, 0x16, 0x09, 0x10, 0xbd, 0x6b, 0x31, 0xb7, 0xf3, 0xf3, 0x0a, 0x90, 0x52, 0xa3, 0x75, 0xc0, 0x7c, 0x25, 0xd9, 0x19, 0xf7, 0xe8, 0x77, 0x7a, 0x48, 0x20, 0x59, 0xe5, 0x75, 0x8c, 0x63, 0x09, 0xda, 0xa0, 0x5b, 0x7f, 0xee, 0xef, 0xfd, 0x6d, 0xfe, 0xf7, 0x7f, 0xff, 0x4f, 0x71, 0xed, 0x7b, 0xaf, 0x72, 0x74, 0xeb, 0x3a, 0x8f, 0xbe, 0xff, 0xdb, 0x0c, 0x87, 0x31, 0x9f, 0xf8, 0xc9, 0x1f, 0xe5, 0xd3, 0xab, 0x6c, 0xc3, 0x75, 0x72, 0xaf, 0x2c, 0x78, 0x96, 0x8a, 0xaf, 0x24, 0x4b, 0x82, 0x20, 0xe3, 0x3f, 0xfe, 0x07, 0x7f, 0xb7, 0x91, 0xe9, 0x69, 0x5d, 0xd1, 0xef, 0xfb, 0x26, 0x2e, 0x56, 0x1b, 0x6f, 0xf6, 0xa2, 0xc0, 0xcc, 0x24, 0xdf, 0xe3, 0x36, 0x9b, 0x2d, 0xb8, 0x7f, 0xef, 0x01, 0x7c, 0xf8, 0xfd, 0xc9, 0xdf, 0x6c, 0x61, 0xff, 0xcc, 0x97, 0x5e, 0x06, 0xe0, 0x9f, 0x7d, 0xfe, 0xab, 0x48, 0x29, 0xe8, 0x75, 0x03, 0x03, 0x1b, 0x7a, 0x86, 0x5d, 0x5c, 0x54, 0x25, 0x9d, 0x4e, 0xc5, 0x5f, 0xfa, 0xcb, 0xff, 0x11, 0x79, 0x5e, 0xd6, 0x39, 0xf6, 0x3e, 0x83, 0x81, 0xb9, 0xee, 0x54, 0x55, 0xa1, 0x11, 0xe4, 0x99, 0xa2, 0xaa, 0xd4, 0x7b, 0xda, 0xee, 0x0b, 0x04, 0x61, 0xad, 0x48, 0xf9, 0xc1, 0x91, 0x66, 0xef, 0x80, 0x2b, 0x81, 0x36, 0x76, 0x36, 0x7f, 0xb6, 0x9e, 0x20, 0xf0, 0x1b, 0x5f, 0xfa, 0xfb, 0x00, 0x7c, 0xf9, 0xd7, 0xbf, 0x86, 0x94, 0x82, 0x4e, 0xd7, 0x27, 0x08, 0x3d, 0x86, 0xc3, 0x98, 0x24, 0x59, 0xb1, 0x58, 0x24, 0xf4, 0x6b, 0x32, 0xd1, 0x72, 0xb9, 0xe4, 0xf4, 0xf8, 0x98, 0x6e, 0xb7, 0x8b, 0xe7, 0xa4, 0x14, 0x4a, 0x4b, 0xfc, 0xaa, 0x51, 0xc9, 0xca, 0x69, 0x6a, 0xdc, 0xb1, 0xe1, 0x70, 0x38, 0x24, 0xcb, 0x4c, 0x22, 0x5b, 0x5a, 0x07, 0xa9, 0x28, 0xa5, 0x4c, 0xb7, 0x58, 0x3f, 0x46, 0x14, 0x45, 0xf8, 0xc2, 0x14, 0xed, 0x24, 0x49, 0x28, 0x54, 0xd5, 0xc4, 0xad, 0x6a, 0xad, 0x09, 0xeb, 0x42, 0xa6, 0xb4, 0xe1, 0x08, 0x21, 0x4d, 0x14, 0xb0, 0xf0, 0x4c, 0x87, 0x6e, 0x8b, 0x5c, 0x91, 0xe4, 0x8d, 0xdc, 0x4c, 0x7b, 0x25, 0x83, 0xfe, 0x80, 0x7c, 0x65, 0x48, 0x56, 0x17, 0x67, 0xe7, 0x14, 0x9d, 0x75, 0x78, 0x93, 0xa8, 0x33, 0xd0, 0x2b, 0xad, 0xd0, 0x62, 0x3d, 0x12, 0x0b, 0xc3, 0x90, 0xaa, 0x28, 0x51, 0x79, 0x81, 0xaa, 0x54, 0x73, 0xcd, 0xe4, 0x79, 0x4e, 0x7f, 0x34, 0x20, 0x2d, 0x0b, 0xb2, 0xaa, 0x44, 0x49, 0xae, 0xf8, 0x6d, 0xf4, 0xe3, 0xd8, 0x5e, 0xa0, 0x26, 0x95, 0x4d, 0x29, 0xb2, 0x22, 0x27, 0xaf, 0xd3, 0x19, 0x7d, 0x69, 0xfc, 0xc6, 0x67, 0xe9, 0x8a, 0xb9, 0x4a, 0xe9, 0x8c, 0x06, 0x84, 0xfd, 0x88, 0xb2, 0x9e, 0x57, 0x77, 0x82, 0x90, 0x32, 0x2f, 0x48, 0x57, 0x2b, 0xf2, 0xcc, 0xc8, 0x03, 0xe3, 0x5e, 0x1f, 0xa1, 0x05, 0xba, 0x32, 0x23, 0x47, 0x5b, 0x77, 0x16, 0x8b, 0x05, 0xf7, 0xee, 0x5d, 0x72, 0xfd, 0x7a, 0xc5, 0xad, 0x5b, 0xb7, 0x8c, 0xb4, 0xcf, 0x37, 0x23, 0x85, 0xf3, 0xf3, 0x73, 0x66, 0xb3, 0x19, 0x87, 0x87, 0x87, 0x06, 0x21, 0x5b, 0x18, 0x2d, 0x77, 0x78, 0x73, 0x50, 0x1b, 0x44, 0x6d, 0x1a, 0x88, 0xe5, 0x79, 0x6e, 0x78, 0x06, 0x35, 0x42, 0xd2, 0xed, 0x76, 0x99, 0xcf, 0xe7, 0x8d, 0xc5, 0x78, 0xb3, 0xd6, 0x23, 0xaf, 0xf8, 0x9a, 0xb8, 0x51, 0xe0, 0x9e, 0x08, 0xd7, 0x63, 0x4a, 0x21, 0x91, 0xd2, 0xe4, 0x47, 0xb8, 0x63, 0xd9, 0x06, 0xbd, 0x55, 0xf5, 0x7b, 0x2e, 0x24, 0x5e, 0x1c, 0x13, 0x06, 0x31, 0xd9, 0x62, 0x85, 0xf4, 0x8c, 0x06, 0x5e, 0xfa, 0xc2, 0x8c, 0x6c, 0xaa, 0x9c, 0x34, 0x35, 0xaf, 0x3b, 0xee, 0x9b, 0xe3, 0xf7, 0x6a, 0x62, 0xb8, 0x50, 0xa6, 0xd8, 0x0b, 0x4f, 0x36, 0xc4, 0xcd, 0x6e, 0xbf, 0xc7, 0xa0, 0x67, 0x64, 0x90, 0xf7, 0xde, 0x79, 0xc7, 0xe8, 0xd6, 0xa3, 0x98, 0x3c, 0xcb, 0x88, 0x3b, 0x1d, 0x56, 0xab, 0xd5, 0x3a, 0x8f, 0xc0, 0xf7, 0xf0, 0xdd, 0x42, 0xda, 0xee, 0x84, 0x5d, 0x76, 0xb8, 0x1b, 0x2c, 0x62, 0x17, 0xe8, 0x5e, 0xaf, 0xb7, 0x31, 0xf8, 0x6f, 0xcf, 0x9a, 0xdb, 0x70, 0xb3, 0x3d, 0x51, 0x2c, 0x14, 0x64, 0x77, 0x9a, 0xae, 0x47, 0xbc, 0xfd, 0xb7, 0xb6, 0x5b, 0x99, 0x1b, 0xc3, 0x6a, 0x8f, 0xcf, 0xc2, 0x60, 0xee, 0xa2, 0xee, 0xba, 0xb3, 0xb9, 0xdd, 0xaa, 0x5b, 0x84, 0x9b, 0x6e, 0xd9, 0x71, 0xa1, 0x6b, 0x13, 0xd7, 0x5c, 0x94, 0x61, 0x9b, 0xdb, 0x9a, 0x2b, 0xe3, 0xdb, 0x86, 0x0e, 0xb4, 0x49, 0x70, 0x6e, 0xc7, 0xd9, 0xa4, 0xb1, 0xc9, 0x4d, 0x28, 0x7a, 0x5b, 0x91, 0x6b, 0x3f, 0xaf, 0x2b, 0x6d, 0x2b, 0x6a, 0x7d, 0xa9, 0x2b, 0x13, 0x74, 0x21, 0x24, 0xcb, 0x7e, 0x6d, 0x17, 0xd1, 0x77, 0x73, 0xf9, 0xdb, 0x26, 0x73, 0x6b, 0xf3, 0x0c, 0x9a, 0x2f, 0xa9, 0xaf, 0x74, 0xce, 0x6d, 0x84, 0xa7, 0x3d, 0x3f, 0xdf, 0x28, 0xda, 0x88, 0x77, 0x35, 0xb6, 0xb1, 0x84, 0x91, 0x6d, 0x5a, 0x7b, 0xf7, 0x7c, 0xd9, 0x06, 0xb3, 0x9b, 0xbf, 0xf7, 0xf1, 0x92, 0x29, 0xe7, 0x3f, 0xfc, 0x36, 0x0f, 0xef, 0xbe, 0xce, 0xe5, 0xe7, 0xbe, 0xc2, 0x1d, 0x40, 0xab, 0xeb, 0xf5, 0xf9, 0x27, 0x29, 0xab, 0x92, 0xbc, 0x48, 0x80, 0xf1, 0xbb, 0x16, 0x9b, 0xb3, 0x4a, 0xf1, 0x42, 0xbf, 0xcf, 0x9f, 0xff, 0xd2, 0xe7, 0x88, 0x43, 0x49, 0x1c, 0x41, 0x36, 0x0b, 0x40, 0xc1, 0x72, 0x96, 0xb2, 0x58, 0xcd, 0x59, 0x66, 0x4b, 0xa4, 0x84, 0xc1, 0x68, 0xc0, 0x68, 0x34, 0xe1, 0xde, 0xfd, 0x13, 0x40, 0xf3, 0x67, 0xff, 0xee, 0xdf, 0xe6, 0x67, 0x7e, 0xfa, 0x27, 0xb8, 0xfb, 0xeb, 0xff, 0x10, 0xa5, 0x32, 0x3e, 0xf1, 0x93, 0x3f, 0xc6, 0x7f, 0xc6, 0xe8, 0x8a, 0x1e, 0xfc, 0xf3, 0xd7, 0x0e, 0xf8, 0x47, 0xdf, 0xfe, 0x4d, 0xfa, 0xfd, 0x82, 0xcb, 0x59, 0x49, 0x96, 0xe5, 0xec, 0xef, 0x77, 0xe9, 0x76, 0x7d, 0xca, 0xb2, 0x40, 0xc8, 0x02, 0xaf, 0x9e, 0x19, 0x66, 0x99, 0xe2, 0xf2, 0xd2, 0x27, 0xcf, 0x54, 0x13, 0xac, 0xb1, 0x56, 0x8a, 0x18, 0xfd, 0xbe, 0xe7, 0xd9, 0xf3, 0x5b, 0x73, 0x74, 0xbc, 0xe2, 0x5b, 0xe7, 0xe7, 0xbc, 0x28, 0x82, 0x77, 0x85, 0xdd, 0x2d, 0xeb, 0xfd, 0xd1, 0x07, 0x5f, 0xe0, 0xee, 0x57, 0xbf, 0xba, 0x9e, 0x57, 0x0f, 0x3a, 0x3c, 0xfb, 0xf4, 0x0e, 0x93, 0x49, 0x8f, 0xe5, 0x62, 0xce, 0x6a, 0x39, 0x03, 0x02, 0x1e, 0x3c, 0x9c, 0xa1, 0x35, 0xdc, 0xbc, 0x31, 0xa6, 0x13, 0x07, 0x08, 0xa1, 0x09, 0x02, 0x63, 0xdb, 0xbb, 0x5c, 0xce, 0xd1, 0xf8, 0x5c, 0x4c, 0x0b, 0xf2, 0x7c, 0x1d, 0x3e, 0x52, 0x5b, 0xf8, 0x20, 0xea, 0x05, 0xd2, 0xcc, 0xa0, 0x3d, 0x3a, 0x1d, 0x9f, 0x6e, 0xb7, 0xc3, 0xfc, 0xfc, 0x2d, 0xf2, 0x34, 0x03, 0xae, 0x37, 0xb3, 0xf2, 0x30, 0x0c, 0x1a, 0xed, 0xba, 0x6b, 0xff, 0xfa, 0xdc, 0xb3, 0xb7, 0xf8, 0x97, 0x5f, 0xf8, 0xd5, 0x35, 0x43, 0x3b, 0x84, 0xc9, 0xbe, 0x60, 0x30, 0x0a, 0x49, 0x97, 0x33, 0xe2, 0xf8, 0x90, 0x6e, 0xd7, 0x18, 0x94, 0x4c, 0xa7, 0x46, 0xb2, 0x34, 0x1c, 0x0e, 0x0d, 0xc1, 0xad, 0x36, 0x85, 0x29, 0xaa, 0x12, 0x3c, 0x89, 0x17, 0xf8, 0x94, 0x55, 0xc5, 0x6c, 0x36, 0x63, 0xb6, 0x98, 0x13, 0x75, 0x37, 0xc3, 0x42, 0xb4, 0xd6, 0x86, 0x31, 0xbd, 0x32, 0x6e, 0x72, 0xd6, 0x27, 0x43, 0xd5, 0x10, 0x3d, 0xee, 0xc8, 0x48, 0xae, 0x23, 0x93, 0x3d, 0xcf, 0x23, 0x88, 0xc2, 0x8d, 0x14, 0xca, 0xaa, 0xaa, 0x28, 0x6b, 0x46, 0x78, 0x33, 0x2e, 0xd4, 0xaa, 0x19, 0x13, 0xb6, 0xc7, 0x64, 0xca, 0xf1, 0xe2, 0x48, 0xd3, 0x94, 0xf3, 0xd3, 0x33, 0x18, 0x76, 0xcc, 0x5a, 0x10, 0x1a, 0x35, 0x92, 0xb6, 0xa3, 0xc2, 0x1a, 0xae, 0x2f, 0x8a, 0x62, 0xed, 0xd0, 0xa9, 0x01, 0x69, 0x0a, 0xba, 0x2a, 0x2b, 0x8a, 0x22, 0x67, 0x3a, 0x9d, 0x92, 0xab, 0x0a, 0x25, 0x05, 0x7e, 0x1c, 0x6e, 0x34, 0x5d, 0x65, 0x59, 0x12, 0xc4, 0x3d, 0x63, 0xe6, 0x52, 0xa3, 0x19, 0x9e, 0xef, 0x93, 0x94, 0x79, 0xc3, 0x4f, 0xda, 0xe9, 0x8e, 0xf1, 0xba, 0x31, 0xbd, 0x22, 0x25, 0x5c, 0x5d, 0x92, 0xd7, 0x2e, 0x68, 0xaa, 0x26, 0xe4, 0xd9, 0xa6, 0x6c, 0xb9, 0x5c, 0x92, 0xa7, 0x25, 0x51, 0x1c, 0xe1, 0x47, 0x31, 0x42, 0xf8, 0x1b, 0x45, 0xb4, 0xd7, 0xeb, 0xd5, 0xc5, 0xf6, 0x11, 0x93, 0xc9, 0x84, 0xdd, 0xdd, 0x5d, 0xde, 0x79, 0xe7, 0x1d, 0x46, 0xa3, 0x91, 0x31, 0x4c, 0xa9, 0x5d, 0xef, 0xac, 0xda, 0xe0, 0xe2, 0x62, 0x81, 0x10, 0x70, 0x78, 0xa3, 0xdf, 0xb0, 0xf8, 0xad, 0x04, 0xb6, 0x2a, 0x4b, 0xa3, 0x59, 0x5f, 0x25, 0xdc, 0xba, 0xf5, 0x24, 0x69, 0x9d, 0xd8, 0x76, 0x7c, 0x62, 0x6c, 0x7e, 0x47, 0xdd, 0x2e, 0xc7, 0xc7, 0xc7, 0xe6, 0x3d, 0x11, 0xc6, 0x01, 0x2f, 0x4f, 0x4c, 0x60, 0x4f, 0x2f, 0xee, 0x18, 0x77, 0x41, 0xcf, 0xe7, 0xf4, 0xf4, 0x94, 0x9d, 0xdd, 0x11, 0x69, 0xba, 0xaa, 0x13, 0xd3, 0x34, 0x52, 0x8a, 0x8d, 0xb1, 0xa0, 0x10, 0x36, 0xd9, 0xce, 0xf8, 0x04, 0xe4, 0x79, 0x6e, 0x76, 0xfc, 0x80, 0x57, 0x67, 0xb6, 0x6b, 0x6d, 0x7e, 0xaf, 0xf2, 0x9a, 0x87, 0x21, 0x75, 0xb3, 0xe9, 0x4b, 0x2c, 0xff, 0xc2, 0x41, 0x76, 0xd3, 0xda, 0x3c, 0x27, 0x0c, 0x43, 0xde, 0xf8, 0xc1, 0x9b, 0xe8, 0x4a, 0x11, 0x78, 0x3e, 0x42, 0x69, 0x3a, 0x71, 0xcc, 0x53, 0xb7, 0x6e, 0x13, 0x86, 0x21, 0x8f, 0x8e, 0x8e, 0x38, 0xac, 0x03, 0xd4, 0x42, 0x11, 0x99, 0xdc, 0x81, 0x38, 0xc2, 0xb7, 0xf3, 0x69, 0x57, 0x63, 0xee, 0xa6, 0xf7, 0xb8, 0x2e, 0x65, 0xed, 0x59, 0xf2, 0x62, 0xb1, 0xb8, 0xc2, 0x72, 0x77, 0x3f, 0x28, 0xab, 0x69, 0xb7, 0x33, 0x0f, 0xd7, 0xc1, 0xcd, 0x14, 0xdf, 0x82, 0xaa, 0x2a, 0x5b, 0xdd, 0x1b, 0x84, 0xf6, 0x04, 0x6d, 0xba, 0x63, 0xeb, 0x68, 0xa6, 0xeb, 0x37, 0xaf, 0xef, 0xe8, 0x46, 0xc3, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x24, 0xcf, 0x33, 0xe2, 0xee, 0xc0, 0x74, 0x2c, 0xce, 0x8c, 0x48, 0x6b, 0x4d, 0x59, 0x95, 0x94, 0xa5, 0x6a, 0xe6, 0x63, 0x5a, 0x6b, 0x4a, 0x2b, 0xdd, 0x90, 0x92, 0xaa, 0xd2, 0x54, 0x55, 0x49, 0x51, 0x64, 0x8d, 0xbe, 0xd4, 0x6e, 0x06, 0x5c, 0xd2, 0xdb, 0xb6, 0xe8, 0x58, 0x77, 0x03, 0x82, 0xa8, 0xf0, 0x03, 0x5b, 0xe0, 0x14, 0x95, 0xca, 0x51, 0x5a, 0x80, 0xd0, 0x04, 0xa1, 0xf1, 0x43, 0x5e, 0xff, 0xad, 0x34, 0xfe, 0xe1, 0xf5, 0x05, 0x9d, 0x66, 0x29, 0x51, 0x27, 0x46, 0x48, 0x93, 0x6d, 0xbc, 0x59, 0xac, 0xcc, 0xf3, 0x2e, 0x57, 0xcb, 0x46, 0xc2, 0x61, 0x9f, 0x17, 0xb4, 0xd1, 0xa8, 0x96, 0x25, 0x4a, 0x94, 0xad, 0x22, 0x6e, 0x9d, 0xcf, 0xec, 0x86, 0x63, 0xbb, 0xc5, 0x6b, 0xb3, 0x61, 0x92, 0x4e, 0xb1, 0x95, 0x8d, 0xcd, 0x71, 0x6d, 0xd8, 0xa2, 0xb0, 0xc6, 0xea, 0xc6, 0xc3, 0xc5, 0xbc, 0xf7, 0xba, 0x31, 0x8d, 0x81, 0x88, 0x5a, 0xb6, 0xc6, 0x7a, 0xf1, 0x42, 0x1b, 0x82, 0x0a, 0x80, 0x8f, 0x4f, 0x5e, 0xe4, 0x14, 0x79, 0xb1, 0x95, 0xb1, 0x2f, 0xe5, 0x8e, 0x31, 0x6e, 0x91, 0x15, 0xbe, 0xaf, 0x10, 0xb2, 0x42, 0x53, 0x80, 0xa8, 0xd0, 0xba, 0x22, 0x90, 0x35, 0x69, 0x51, 0x09, 0xf3, 0xa5, 0x31, 0xac, 0x74, 0x8c, 0x97, 0xbb, 0xec, 0x49, 0x64, 0xe6, 0x23, 0xf3, 0x94, 0x8c, 0x4d, 0x43, 0x19, 0xa0, 0x29, 0xe6, 0x47, 0x5f, 0xf8, 0x0d, 0x2e, 0x1d, 0x23, 0x97, 0xc8, 0xbb, 0x20, 0x12, 0x25, 0x3a, 0x7f, 0x83, 0x74, 0xb9, 0x64, 0x79, 0x31, 0x05, 0x7e, 0xe1, 0x3d, 0x21, 0xf7, 0x57, 0x17, 0x0b, 0x3e, 0xf3, 0xc9, 0x4f, 0xf3, 0x5f, 0xfe, 0xda, 0xff, 0xcd, 0x78, 0xdc, 0x23, 0x0e, 0x4a, 0x0a, 0x2f, 0x25, 0x2d, 0x4a, 0x32, 0x95, 0xe1, 0x47, 0x06, 0x5e, 0xf3, 0x83, 0x90, 0x55, 0x92, 0xb2, 0xb3, 0xb3, 0x8f, 0x22, 0xe7, 0x8f, 0x7c, 0xe4, 0x27, 0xf8, 0x9f, 0x3f, 0xfb, 0xab, 0x78, 0x9e, 0xa0, 0xd3, 0x09, 0xf8, 0xef, 0x7a, 0x37, 0x79, 0x74, 0x74, 0x75, 0xf6, 0xfd, 0xdf, 0xff, 0xca, 0x3f, 0xa1, 0xdf, 0xf7, 0xd9, 0xa3, 0xc7, 0xe5, 0x3c, 0xa1, 0x2c, 0x61, 0x3a, 0x2d, 0x58, 0x2c, 0x15, 0xbd, 0x5e, 0xc8, 0x9d, 0xa7, 0xf6, 0x40, 0x98, 0xf7, 0x32, 0x8e, 0x3a, 0xe4, 0xa9, 0x20, 0xcf, 0x0a, 0x3c, 0xb3, 0x33, 0x67, 0xb9, 0x58, 0x72, 0x72, 0x7a, 0xc2, 0xd2, 0x8c, 0x46, 0x41, 0x28, 0x3a, 0x9d, 0x80, 0x6e, 0xb7, 0x43, 0x59, 0xaa, 0xf7, 0x0d, 0x7d, 0x1f, 0xf4, 0xfa, 0x1c, 0xd5, 0x1b, 0xc2, 0x28, 0xf2, 0xcd, 0xdf, 0x0a, 0xcd, 0x68, 0x6f, 0xc0, 0x64, 0x6f, 0xc0, 0xad, 0xa7, 0x6f, 0x30, 0x9b, 0xcd, 0xc8, 0xe7, 0x09, 0x6f, 0xfe, 0x70, 0x46, 0x9e, 0x2b, 0xce, 0xce, 0x13, 0x10, 0x2b, 0xa2, 0xc8, 0xe3, 0xfa, 0xad, 0x3e, 0x4a, 0x94, 0x74, 0x77, 0xfa, 0x44, 0x71, 0x44, 0x34, 0x4c, 0x19, 0x0f, 0x47, 0x9c, 0x9e, 0x9d, 0xb0, 0x37, 0x31, 0xf1, 0xa2, 0x42, 0x40, 0x18, 0x8d, 0x50, 0x55, 0xb9, 0xf6, 0x7d, 0x28, 0x0a, 0x2e, 0x2e, 0x66, 0x0d, 0x9c, 0x7e, 0xef, 0xde, 0x29, 0x61, 0x38, 0x64, 0x67, 0x27, 0x66, 0x99, 0x77, 0x10, 0xf9, 0x09, 0xb3, 0xc5, 0x6a, 0x03, 0x6e, 0x5f, 0x2d, 0x16, 0x48, 0x09, 0x7e, 0xe8, 0x51, 0x16, 0x15, 0x5a, 0x68, 0xfc, 0x58, 0x33, 0xd9, 0xef, 0xd1, 0xbb, 0xb5, 0x4b, 0x59, 0x96, 0x2c, 0x92, 0x25, 0xab, 0x2c, 0xe1, 0xfc, 0xfc, 0x9c, 0x9d, 0xd1, 0x18, 0xcf, 0xf3, 0x18, 0xef, 0xed, 0x10, 0x45, 0x91, 0x21, 0xcb, 0xcd, 0x67, 0x4c, 0x2f, 0x2f, 0xcc, 0xc2, 0xed, 0x49, 0x90, 0x92, 0x30, 0x0c, 0x90, 0xa1, 0x71, 0x20, 0x2b, 0x32, 0x13, 0x81, 0xd9, 0xad, 0xcd, 0x42, 0x3a, 0x91, 0x89, 0xe9, 0x0c, 0xca, 0x0a, 0xe9, 0x79, 0x68, 0x4f, 0xd6, 0x71, 0xcf, 0x3e, 0x65, 0xa1, 0xb9, 0xfb, 0xea, 0xdb, 0xcc, 0xa6, 0xf0, 0xd4, 0x61, 0x58, 0x17, 0x38, 0xc5, 0xc1, 0xe1, 0x01, 0x95, 0xd0, 0x28, 0x4c, 0x41, 0xee, 0x0e, 0x07, 0xa8, 0xd0, 0xe3, 0x22, 0x99, 0xa1, 0xcb, 0x0a, 0x89, 0x06, 0x05, 0x5d, 0xdf, 0x07, 0x4f, 0xa2, 0xf3, 0x9c, 0x79, 0x62, 0xe2, 0x31, 0xd3, 0x2c, 0x43, 0x49, 0xc1, 0xe9, 0x6a, 0xc9, 0xd1, 0xfd, 0xfb, 0xac, 0xa6, 0x15, 0xcf, 0xdc, 0xde, 0x47, 0x84, 0x92, 0x4a, 0x9a, 0x1a, 0x52, 0x2a, 0x85, 0xf6, 0x04, 0x9e, 0x67, 0x10, 0x86, 0xc5, 0x62, 0xc1, 0x24, 0xe8, 0xb0, 0x38, 0x3e, 0xe7, 0xc6, 0xb5, 0x43, 0x7a, 0x93, 0x31, 0x79, 0x9e, 0x73, 0x71, 0x39, 0xe5, 0xfc, 0xfc, 0x9c, 0xfd, 0x6b, 0x07, 0x4c, 0xba, 0x03, 0x16, 0x59, 0xc2, 0x32, 0x4d, 0xc8, 0x4a, 0x45, 0x25, 0x2a, 0xf3, 0xdc, 0x5a, 0x50, 0x2a, 0xcd, 0xe9, 0xfc, 0x92, 0x4e, 0x14, 0xe1, 0xf9, 0x21, 0x69, 0xed, 0x62, 0x27, 0x02, 0x1f, 0x5f, 0x98, 0x60, 0xad, 0xbb, 0x6f, 0xbf, 0x8a, 0xec, 0xc5, 0x88, 0x41, 0x87, 0x2c, 0xf6, 0x48, 0xd1, 0x28, 0x65, 0x58, 0xde, 0xbe, 0xef, 0xd1, 0x5f, 0x41, 0xbf, 0x33, 0xa2, 0xa7, 0x7c, 0x2e, 0xaa, 0x0b, 0x2a, 0x21, 0x11, 0x81, 0x44, 0x47, 0x92, 0x55, 0x5a, 0xe2, 0x63, 0x34, 0xdf, 0xf7, 0xa7, 0xc7, 0x2c, 0x2e, 0x67, 0x4c, 0x0e, 0xc7, 0xc4, 0x83, 0x0e, 0x6f, 0x3d, 0x78, 0x9b, 0x30, 0x0e, 0x08, 0x7c, 0x89, 0xe7, 0x09, 0x56, 0xcb, 0x25, 0xcf, 0x7d, 0xe0, 0x29, 0x94, 0x2a, 0x39, 0x9f, 0x1d, 0xb3, 0x73, 0x60, 0xac, 0x7b, 0xd3, 0xbc, 0x0e, 0x16, 0xf3, 0x3c, 0x93, 0x07, 0x51, 0x99, 0x99, 0xb4, 0x25, 0xc2, 0x55, 0x3a, 0x27, 0xee, 0x06, 0x2c, 0x56, 0x97, 0x78, 0x91, 0x59, 0x5f, 0x2f, 0x67, 0x67, 0xc4, 0x5d, 0x23, 0x93, 0x1e, 0x77, 0x8c, 0x69, 0x90, 0xca, 0x2b, 0xc6, 0x3b, 0x3b, 0x54, 0x45, 0xc9, 0xe5, 0xe5, 0x25, 0xe3, 0xf1, 0xb8, 0x4e, 0xc3, 0xd4, 0x48, 0x5f, 0x20, 0x95, 0x40, 0xca, 0xb5, 0xed, 0xb9, 0x5e, 0xad, 0x28, 0x8a, 0x15, 0x81, 0xf4, 0xa0, 0xa8, 0x9b, 0xb4, 0x40, 0xa2, 0x2b, 0x73, 0xfe, 0x09, 0xa5, 0x49, 0xf2, 0x29, 0x7e, 0x6c, 0x3a, 0x7c, 0x6a, 0x99, 0x9b, 0x74, 0x39, 0x40, 0x95, 0x62, 0x5e, 0x99, 0x73, 0xc9, 0xf7, 0x3d, 0xf2, 0x32, 0x05, 0x05, 0xa1, 0x1f, 0x50, 0x64, 0x19, 0x8b, 0x8b, 0x39, 0xf3, 0x47, 0x15, 0x52, 0x42, 0x9e, 0x17, 0x04, 0x01, 0xf4, 0x6e, 0x75, 0x58, 0xe5, 0x9a, 0x55, 0x9e, 0x11, 0x0f, 0x76, 0x38, 0x9e, 0x4f, 0x91, 0x81, 0xc4, 0x0f, 0x3c, 0xa6, 0xc9, 0xd2, 0x8c, 0x23, 0xb6, 0xb9, 0xbd, 0xd9, 0x45, 0x7f, 0x38, 0x1c, 0x36, 0x1d, 0xb8, 0x4b, 0x8e, 0x73, 0x89, 0x66, 0x6d, 0x37, 0xb4, 0x6d, 0x41, 0x26, 0x8f, 0xf3, 0x3e, 0x0f, 0x6a, 0x03, 0x90, 0x6d, 0x90, 0xaa, 0xdb, 0x1d, 0x3f, 0x4e, 0x62, 0xb6, 0x5c, 0x2e, 0x37, 0x20, 0x6f, 0xfb, 0xbd, 0x2d, 0x80, 0x6e, 0xa7, 0xdf, 0x26, 0x8e, 0xb9, 0xf0, 0xf4, 0xe3, 0x58, 0xda, 0x2e, 0x0b, 0x7c, 0x5b, 0x07, 0xab, 0xb5, 0xba, 0x12, 0x49, 0xea, 0xde, 0xb7, 0x1d, 0xf0, 0xd2, 0x0e, 0xba, 0x69, 0x77, 0xe1, 0xed, 0x4e, 0xb6, 0xdf, 0xef, 0x5f, 0x49, 0x95, 0xdb, 0x88, 0x5f, 0x0d, 0xae, 0xda, 0xb2, 0xba, 0x4a, 0x81, 0x36, 0x04, 0xdf, 0x3e, 0xce, 0x36, 0x77, 0xa2, 0xcd, 0x07, 0xd8, 0xec, 0xf6, 0xe5, 0x15, 0xe8, 0xde, 0xc3, 0xdb, 0x40, 0x5d, 0xd6, 0xc1, 0x0e, 0x66, 0x83, 0x37, 0x9b, 0xcd, 0x36, 0xc6, 0x1f, 0x6d, 0x95, 0x41, 0x18, 0xea, 0xb5, 0x8b, 0x9c, 0x7d, 0x0f, 0x44, 0xbd, 0x11, 0x91, 0x12, 0x5d, 0x99, 0xcd, 0x9a, 0x94, 0x26, 0xaa, 0xd5, 0x04, 0xb1, 0x98, 0x62, 0x0e, 0x50, 0x4a, 0x85, 0x2f, 0x7d, 0x2e, 0x0b, 0x08, 0xc5, 0xa6, 0x3c, 0xad, 0x53, 0x2d, 0x9a, 0x62, 0xde, 0xce, 0x4a, 0xbf, 0x98, 0x9e, 0xb0, 0x5c, 0x5d, 0x12, 0xf9, 0x53, 0x23, 0x8d, 0x09, 0x03, 0xfe, 0xcd, 0x78, 0x97, 0x1f, 0xfd, 0xd9, 0x03, 0xc6, 0x6f, 0x1d, 0x6f, 0xd1, 0x9f, 0xaf, 0x09, 0x73, 0xd3, 0x57, 0xef, 0xb2, 0x37, 0x39, 0x20, 0xaf, 0x66, 0xdc, 0xbc, 0x79, 0x8d, 0xcb, 0xcb, 0x4b, 0x8e, 0x8f, 0x2f, 0x49, 0xd3, 0x92, 0x7e, 0x3f, 0x6e, 0x5e, 0x7b, 0x51, 0x14, 0x9c, 0x5d, 0xe4, 0xfc, 0xcd, 0x67, 0x5e, 0xe4, 0x68, 0x67, 0x87, 0x2c, 0xaf, 0xf0, 0x3d, 0x8f, 0xbf, 0xf0, 0xa9, 0x4f, 0x6d, 0x2d, 0xe6, 0x86, 0x3d, 0x6f, 0xec, 0x6c, 0x07, 0xbd, 0x1e, 0xf9, 0x10, 0x7c, 0x2f, 0xaf, 0x03, 0x78, 0xcc, 0xb9, 0xe6, 0x4b, 0x49, 0x50, 0x7b, 0x3c, 0xab, 0xca, 0x74, 0xe2, 0x3b, 0xbb, 0xa3, 0x26, 0xbd, 0xc9, 0xf7, 0x15, 0xfd, 0xc1, 0xcd, 0x66, 0x13, 0x68, 0x11, 0x8e, 0xa2, 0x28, 0x38, 0x3b, 0x9d, 0xf3, 0x2f, 0x5e, 0xfb, 0x26, 0x7f, 0xea, 0xf9, 0xdf, 0xfb, 0xbe, 0x8a, 0xfa, 0xb7, 0xce, 0xcf, 0x09, 0x02, 0xd8, 0xd9, 0xf1, 0x59, 0x25, 0x8a, 0xaa, 0xcc, 0x78, 0xf3, 0xee, 0x5d, 0xa6, 0xe7, 0x03, 0x6e, 0xde, 0xbc, 0xc9, 0x68, 0x34, 0xe2, 0xe2, 0xe8, 0x94, 0x7e, 0x4d, 0x56, 0xab, 0x94, 0xa2, 0x2c, 0x2b, 0x4a, 0xcf, 0x9c, 0x7f, 0xbd, 0xbe, 0xd1, 0x22, 0x1b, 0x24, 0x24, 0xa4, 0xd7, 0x89, 0x50, 0xba, 0x87, 0xd6, 0x29, 0x42, 0x9a, 0xe2, 0x30, 0xd9, 0xb9, 0xc1, 0xc5, 0xd9, 0x19, 0x17, 0x17, 0xa7, 0xe6, 0x5a, 0x55, 0x9a, 0xd5, 0xaa, 0xe4, 0xd7, 0xbf, 0xfc, 0xcf, 0xf9, 0xe9, 0x4f, 0xfc, 0xa1, 0x66, 0x3e, 0xbe, 0x5a, 0x9c, 0x90, 0xe5, 0x29, 0x79, 0xbe, 0x2e, 0xe6, 0x8b, 0x54, 0xd3, 0x8f, 0x05, 0xb3, 0xc5, 0x8a, 0x30, 0xf6, 0xd8, 0xbd, 0xde, 0x61, 0x71, 0x99, 0xa1, 0xb5, 0x22, 0xaa, 0xb5, 0xc3, 0x76, 0xde, 0xda, 0xe9, 0x76, 0xe8, 0xc6, 0x26, 0x9f, 0xa2, 0xdf, 0x31, 0x8e, 0x6d, 0x36, 0x2b, 0xdc, 0xc6, 0x73, 0x5a, 0x79, 0x14, 0x52, 0x90, 0x64, 0x59, 0xc3, 0xcf, 0x71, 0xaf, 0xdb, 0x26, 0xd3, 0xa2, 0xde, 0xb0, 0xea, 0xca, 0x78, 0x97, 0xa7, 0x79, 0x81, 0x14, 0x3e, 0x71, 0x1c, 0x20, 0xba, 0x9a, 0xe1, 0xb8, 0x4b, 0x1c, 0xa7, 0xc8, 0xc0, 0x37, 0x9b, 0x64, 0x65, 0x48, 0x4d, 0xda, 0x13, 0x88, 0x38, 0x40, 0x57, 0x05, 0x5e, 0x18, 0xe0, 0xe9, 0xa2, 0xd9, 0x1c, 0xbb, 0x72, 0x28, 0xed, 0x70, 0x44, 0xec, 0x73, 0xea, 0x4a, 0xa1, 0x3c, 0x43, 0xf2, 0xea, 0xfa, 0x99, 0xc9, 0x18, 0xd7, 0x85, 0x71, 0x3f, 0x16, 0x34, 0x44, 0x38, 0x77, 0xed, 0x9a, 0xcd, 0x66, 0x54, 0x85, 0xe9, 0x6e, 0xf3, 0x34, 0x6b, 0x64, 0x60, 0x07, 0x07, 0x07, 0xec, 0x1f, 0x1c, 0xe0, 0x95, 0x9a, 0x4a, 0xd6, 0xb3, 0xe0, 0xaa, 0xa0, 0x12, 0x1a, 0xed, 0x7a, 0x86, 0x94, 0xba, 0x91, 0xc1, 0x35, 0xa3, 0x43, 0x6d, 0x36, 0xf5, 0xc6, 0x6e, 0xb5, 0x44, 0x78, 0x29, 0x41, 0x27, 0xc0, 0xf7, 0x23, 0x3a, 0xb1, 0x6f, 0x3a, 0x7e, 0xac, 0xaa, 0x66, 0xdd, 0xe0, 0xf9, 0xbe, 0x8f, 0x0c, 0x3c, 0x3c, 0x21, 0xc8, 0x1d, 0xd2, 0xb3, 0x8b, 0x08, 0xdb, 0x35, 0xb3, 0xe1, 0x38, 0x45, 0x11, 0x83, 0x41, 0x8f, 0xd1, 0x64, 0xcc, 0xf1, 0xf1, 0x31, 0xf3, 0xd5, 0x9c, 0x7e, 0xbf, 0xcf, 0x62, 0x31, 0xa7, 0x54, 0x15, 0x91, 0x33, 0x5e, 0x95, 0x42, 0xe2, 0x49, 0xcf, 0x18, 0xe9, 0x84, 0x51, 0xb3, 0xc6, 0xd8, 0x19, 0x75, 0xd8, 0x89, 0x9b, 0x31, 0x71, 0x66, 0x8d, 0xc0, 0x44, 0xda, 0x20, 0xbd, 0x36, 0xce, 0x74, 0x34, 0x1a, 0xd1, 0xe9, 0x74, 0x98, 0x4f, 0x2f, 0x1b, 0x46, 0xb9, 0xad, 0x17, 0x69, 0x9a, 0x6e, 0xaa, 0xa3, 0x94, 0xcd, 0x80, 0x60, 0xa3, 0xa1, 0x94, 0x62, 0x3d, 0x32, 0xb4, 0xe3, 0x9c, 0xab, 0x75, 0x4c, 0xd3, 0xed, 0x75, 0x9b, 0x88, 0x5c, 0x94, 0x40, 0x95, 0x0a, 0x0a, 0x43, 0x6e, 0xec, 0xf5, 0x7a, 0xf4, 0x9e, 0x1c, 0xf0, 0xe8, 0xd1, 0x23, 0xb4, 0xae, 0xb8, 0x73, 0xe7, 0x90, 0x27, 0x9f, 0x7c, 0x92, 0xbc, 0x30, 0x76, 0xc5, 0x45, 0x51, 0x70, 0x36, 0x3b, 0xc1, 0xf3, 0x8c, 0x8f, 0xbb, 0xb5, 0x33, 0xf6, 0xad, 0xfe, 0x6f, 0x9b, 0x97, 0xba, 0xb5, 0x32, 0x75, 0x3b, 0x6b, 0xb7, 0x60, 0xb7, 0x0b, 0x50, 0x3b, 0x1e, 0xd4, 0x1a, 0x05, 0xb8, 0x10, 0xac, 0x65, 0x4c, 0xda, 0x93, 0xab, 0x4d, 0x3a, 0x6b, 0x93, 0xea, 0xb6, 0x99, 0xb5, 0xb8, 0x76, 0xa3, 0x52, 0x9a, 0x05, 0x1f, 0x14, 0x65, 0x99, 0x6f, 0x14, 0xde, 0x28, 0x8a, 0x9c, 0x08, 0x53, 0x7b, 0xac, 0xd4, 0x36, 0x87, 0xb5, 0x7f, 0xa2, 0xd0, 0x28, 0x5d, 0x23, 0x11, 0xaa, 0xaa, 0x25, 0x09, 0xd2, 0xc4, 0x6a, 0x9a, 0x86, 0xb8, 0x4e, 0xe1, 0xd9, 0x92, 0x91, 0xae, 0x78, 0xd7, 0x14, 0xb7, 0xb6, 0x69, 0x8b, 0xbb, 0xd1, 0xd9, 0xb6, 0x41, 0x78, 0x5c, 0x26, 0x7b, 0x1b, 0xf6, 0x5e, 0x8f, 0x28, 0xb2, 0x0d, 0xfe, 0xc2, 0x36, 0xa5, 0xc2, 0x36, 0x2f, 0xf4, 0xe6, 0xb1, 0x5a, 0x6e, 0x71, 0x8f, 0xdb, 0x98, 0x6c, 0x1b, 0x5b, 0x18, 0x02, 0x8a, 0xbc, 0xb2, 0x59, 0x71, 0xc7, 0x2c, 0xf6, 0xfd, 0x6f, 0xcc, 0x12, 0x1c, 0x28, 0xd1, 0xe8, 0x35, 0xf3, 0xc7, 0x68, 0xcc, 0x05, 0x68, 0x0f, 0x54, 0xdc, 0x5c, 0xac, 0x26, 0xbb, 0x5c, 0xac, 0xd3, 0xd1, 0x80, 0xa2, 0x5c, 0x35, 0x01, 0x0b, 0xee, 0xcd, 0x16, 0xf3, 0xaf, 0x7d, 0xeb, 0x3b, 0x8c, 0x5b, 0xc5, 0x7c, 0xfc, 0xc2, 0x73, 0xe4, 0xbf, 0xfe, 0x6b, 0x08, 0xe1, 0x23, 0xb5, 0x61, 0x2c, 0x7b, 0xd2, 0xe3, 0x6b, 0xbf, 0xf9, 0x65, 0x26, 0x3f, 0xf5, 0x71, 0xd8, 0x6f, 0x49, 0xb7, 0xf6, 0x3f, 0xda, 0x7c, 0xfb, 0xe4, 0x89, 0x81, 0xc8, 0xff, 0xe2, 0x9d, 0xdf, 0xc7, 0xff, 0xf4, 0x4f, 0xff, 0x16, 0xb3, 0xd9, 0x8c, 0x28, 0x8a, 0x78, 0xfa, 0xe9, 0xa7, 0x79, 0xf3, 0x87, 0x0b, 0x4a, 0x05, 0xe3, 0xf1, 0xb0, 0x61, 0x46, 0x7f, 0xe6, 0x93, 0x9f, 0xe2, 0x08, 0xf8, 0x8b, 0xff, 0xf8, 0xef, 0x13, 0x04, 0x1e, 0xc3, 0x41, 0xcc, 0x4b, 0x3b, 0x3b, 0xf0, 0xe8, 0xf8, 0xf1, 0xae, 0x6d, 0x42, 0x80, 0x28, 0xe9, 0x74, 0x73, 0x26, 0x3b, 0x81, 0x81, 0x86, 0xa5, 0x34, 0xf2, 0x29, 0x32, 0xaa, 0xca, 0x74, 0x2d, 0x9e, 0xe7, 0x11, 0x85, 0x3d, 0xc6, 0x75, 0x8a, 0xd4, 0xd9, 0xd9, 0x29, 0xf3, 0xf9, 0xbc, 0x51, 0x9e, 0x2c, 0x97, 0xcb, 0x46, 0x7f, 0x6b, 0x08, 0x45, 0x92, 0x1f, 0xde, 0xbb, 0xe4, 0xe5, 0x8f, 0xaf, 0xb5, 0xed, 0xef, 0x75, 0x8b, 0x62, 0x8f, 0xdd, 0xbd, 0x1e, 0x4f, 0x0d, 0x07, 0xf4, 0xfb, 0x3d, 0xa0, 0x24, 0x4d, 0x13, 0x1e, 0x3e, 0x7c, 0xc8, 0xd1, 0xd1, 0x11, 0x14, 0x39, 0xcf, 0x3c, 0x35, 0x46, 0xc8, 0x80, 0x65, 0xb2, 0x22, 0xcf, 0x4b, 0x94, 0xd0, 0x04, 0x75, 0x2c, 0xf0, 0x3b, 0xef, 0xbc, 0x53, 0x47, 0x87, 0xf6, 0x40, 0x0d, 0x98, 0x4c, 0x26, 0xe8, 0xaa, 0x22, 0x08, 0x4c, 0x47, 0xfe, 0xc3, 0xb7, 0x1e, 0x22, 0x81, 0x9d, 0x9d, 0x1d, 0xc3, 0x42, 0x46, 0x70, 0x72, 0x72, 0xc9, 0xf9, 0xc5, 0x71, 0x93, 0x7f, 0xbe, 0x5a, 0x9c, 0x90, 0xe6, 0x3e, 0x67, 0xe7, 0xa7, 0x1b, 0xa9, 0x6d, 0xfd, 0x78, 0x7d, 0xad, 0xc5, 0x7d, 0x9f, 0xe1, 0x6e, 0xc8, 0x78, 0xd7, 0x10, 0x92, 0x3a, 0x9d, 0xa0, 0x09, 0xcd, 0xb0, 0x85, 0x78, 0xbe, 0x5c, 0x90, 0xa7, 0xa6, 0xa3, 0xb3, 0xf9, 0xda, 0xf3, 0xf9, 0xdc, 0x48, 0x82, 0xd0, 0x74, 0x7a, 0x5d, 0xb3, 0xf9, 0x71, 0x5c, 0x29, 0xdd, 0xe2, 0x68, 0xdf, 0xc7, 0xa2, 0x28, 0xd0, 0xd2, 0xac, 0x93, 0x71, 0x27, 0x64, 0x95, 0xe6, 0x28, 0x2a, 0x33, 0x5f, 0xad, 0x4d, 0x86, 0x82, 0x28, 0xa4, 0x1b, 0xc7, 0xc4, 0xd2, 0xa7, 0x2a, 0x0c, 0x12, 0x28, 0x3c, 0x49, 0x56, 0x16, 0xa8, 0xac, 0x62, 0x91, 0xa7, 0xe4, 0xba, 0x22, 0x1a, 0x06, 0x5b, 0x79, 0x05, 0x4a, 0xa9, 0xa6, 0x68, 0x5a, 0x69, 0x9d, 0x5d, 0x0f, 0xbb, 0xdd, 0x2e, 0x32, 0x34, 0x2c, 0x70, 0x02, 0xd1, 0x58, 0x20, 0xb7, 0x25, 0x6a, 0x9e, 0xe7, 0x71, 0xff, 0xf4, 0x84, 0x5e, 0xc7, 0x6c, 0xec, 0x2b, 0x65, 0xb4, 0xd5, 0xd2, 0x37, 0xe6, 0x30, 0x97, 0x97, 0x97, 0xec, 0xf6, 0x47, 0xeb, 0xeb, 0x59, 0xad, 0x1f, 0xc7, 0xbe, 0x66, 0xa1, 0xac, 0x2a, 0x66, 0x5d, 0x7c, 0x4b, 0x55, 0xa7, 0xc2, 0xf9, 0x3e, 0x77, 0x9e, 0xb9, 0x63, 0xe6, 0xe7, 0x14, 0xe4, 0x49, 0x82, 0x56, 0xbe, 0x61, 0xcd, 0x47, 0xc6, 0x2f, 0x5e, 0xe6, 0x19, 0x55, 0x8d, 0x9a, 0x75, 0x3a, 0x1d, 0x88, 0x02, 0x64, 0x10, 0x50, 0x09, 0x65, 0x5c, 0xd3, 0xca, 0x75, 0x73, 0x13, 0x86, 0x21, 0xd2, 0x21, 0x32, 0x37, 0x05, 0xbe, 0x2c, 0x9a, 0x22, 0x1b, 0xf7, 0x62, 0x86, 0xc3, 0x21, 0x0f, 0x1f, 0x3d, 0xc4, 0xf3, 0x3c, 0x1e, 0xa6, 0xf3, 0x5a, 0xda, 0x57, 0xa1, 0x51, 0x20, 0x24, 0x9e, 0x13, 0x41, 0x6d, 0x75, 0xe8, 0x96, 0xc8, 0xd9, 0x04, 0x63, 0xd5, 0xaf, 0xaf, 0xa8, 0x4c, 0x8d, 0x10, 0x5a, 0x9b, 0x64, 0xb4, 0x30, 0x62, 0x30, 0x18, 0x34, 0xc5, 0x78, 0xb5, 0x5a, 0x6d, 0xd4, 0x44, 0x5b, 0x0f, 0xed, 0x9a, 0x5f, 0xd6, 0x9b, 0x9d, 0x2b, 0xe3, 0x58, 0x44, 0xe3, 0xd4, 0xe9, 0x79, 0x5e, 0xf3, 0xb3, 0x74, 0x48, 0xe4, 0x46, 0x0a, 0x69, 0x32, 0x25, 0xa4, 0xd6, 0x78, 0xa2, 0x1e, 0xc3, 0x2a, 0x8d, 0x2f, 0x0c, 0x1f, 0xcb, 0xf7, 0xc2, 0x9a, 0xf8, 0x2b, 0xd9, 0xdd, 0xdd, 0xc5, 0x0f, 0x3c, 0xce, 0x2f, 0x8c, 0x95, 0xf1, 0x78, 0x3c, 0x64, 0xb4, 0xd7, 0x6f, 0x36, 0x4b, 0x61, 0x18, 0x9a, 0x4d, 0x7d, 0x9a, 0xa6, 0xcd, 0x07, 0x18, 0x3a, 0xfa, 0x48, 0x4b, 0x2e, 0x70, 0x3b, 0xbe, 0xf6, 0x82, 0xde, 0xce, 0xf9, 0x6e, 0x17, 0x1e, 0x9b, 0x82, 0xd3, 0x4e, 0xcb, 0xb2, 0xc4, 0x31, 0x17, 0xa6, 0x6f, 0xa7, 0x8e, 0xb5, 0x8d, 0x4d, 0xdc, 0x93, 0xba, 0x29, 0x1e, 0x9a, 0x8d, 0xf4, 0x34, 0xd7, 0x37, 0xde, 0xa6, 0xf2, 0xb4, 0x0b, 0x96, 0x9b, 0x9c, 0xa3, 0x35, 0xad, 0x30, 0x04, 0x75, 0x45, 0x87, 0xdf, 0x66, 0xa9, 0x6f, 0x16, 0xed, 0xed, 0x2e, 0x69, 0xdb, 0x34, 0xdb, 0xdb, 0x1c, 0xd2, 0x8a, 0xaa, 0x7c, 0x2c, 0x83, 0xdd, 0xb2, 0xf4, 0x1f, 0x57, 0xec, 0xdb, 0xba, 0xee, 0x36, 0x12, 0xb2, 0xcd, 0xf9, 0xed, 0x8a, 0x2b, 0x9d, 0x90, 0x1b, 0x23, 0x13, 0x57, 0x0d, 0xb0, 0x4d, 0x23, 0xde, 0x76, 0xea, 0xab, 0x8a, 0x35, 0x9f, 0xc2, 0xba, 0xfd, 0xb9, 0x1a, 0x7f, 0xab, 0xfd, 0x74, 0xd1, 0x05, 0x57, 0xba, 0x58, 0x56, 0xcb, 0xfa, 0x7c, 0x31, 0xf1, 0xab, 0x68, 0x59, 0x4f, 0xd6, 0x4d, 0x37, 0xee, 0xcb, 0x0e, 0xc2, 0xe6, 0x95, 0x23, 0xd0, 0xca, 0xe8, 0xce, 0x55, 0xbd, 0xd0, 0x94, 0x95, 0x49, 0x1f, 0xda, 0x28, 0xe6, 0xba, 0xe4, 0xa8, 0xee, 0xcc, 0xdb, 0xc5, 0x7c, 0xed, 0x84, 0x55, 0xe2, 0x79, 0xf5, 0x6c, 0x4b, 0x29, 0xd2, 0xb4, 0xe2, 0xb5, 0xbb, 0xdf, 0xe4, 0xcf, 0xff, 0xec, 0x27, 0x37, 0x13, 0xd0, 0x5a, 0xb7, 0x1f, 0xda, 0x62, 0xbf, 0xca, 0xf8, 0x89, 0x1f, 0xff, 0xc3, 0xfc, 0xf6, 0x37, 0xff, 0x09, 0x51, 0xe4, 0x11, 0x86, 0x31, 0x7f, 0xed, 0x4f, 0xff, 0x11, 0xde, 0x92, 0x7d, 0xbe, 0xf4, 0x6b, 0x7f, 0x07, 0x29, 0x7d, 0x7a, 0xbd, 0x90, 0x5f, 0xbe, 0xf7, 0x9b, 0xcc, 0xe6, 0x29, 0x3b, 0x93, 0x2e, 0x81, 0x2f, 0x18, 0x8f, 0x42, 0xf4, 0x9d, 0x03, 0x8e, 0xee, 0x1c, 0x20, 0x6a, 0x24, 0xc0, 0x9a, 0xc5, 0x1c, 0xdd, 0xba, 0xce, 0x27, 0x7f, 0xef, 0xb3, 0xbc, 0xf2, 0xda, 0x3b, 0x24, 0xc9, 0x82, 0x24, 0x4d, 0x98, 0x2f, 0x12, 0xb2, 0x7c, 0xe6, 0x18, 0x08, 0x19, 0x99, 0x4a, 0xe3, 0x82, 0xa8, 0xcc, 0x5c, 0xce, 0xcc, 0x5d, 0x4b, 0xae, 0x5d, 0xdb, 0xe7, 0xe6, 0xcd, 0x9b, 0x78, 0x9e, 0xc7, 0xf9, 0xf9, 0x39, 0xa7, 0xa7, 0xa7, 0xa4, 0xe9, 0xaa, 0x9e, 0xe3, 0x76, 0xcc, 0x18, 0x65, 0xcb, 0xcd, 0x35, 0xb0, 0x71, 0x6f, 0xb7, 0x6e, 0x8d, 0x89, 0x22, 0xc9, 0xd1, 0xd1, 0xdb, 0x84, 0x61, 0xc8, 0x62, 0x91, 0x10, 0x86, 0x1e, 0xab, 0x55, 0x85, 0xe7, 0xc1, 0xa4, 0x1f, 0x11, 0xc7, 0xa6, 0xe3, 0x8e, 0x63, 0xc9, 0xde, 0xfe, 0x1e, 0x15, 0xda, 0x40, 0xea, 0x9e, 0xe4, 0xf6, 0xed, 0x5b, 0x6b, 0x72, 0xac, 0xc6, 0x24, 0x8d, 0xe5, 0x79, 0xe3, 0x98, 0x56, 0x56, 0x1e, 0xdd, 0x3a, 0xd8, 0x24, 0x49, 0x12, 0x8a, 0x2c, 0x27, 0xcb, 0x73, 0xbc, 0xfa, 0xbc, 0x5d, 0xe6, 0x1d, 0x1e, 0x1c, 0xdd, 0x6b, 0x3a, 0xf2, 0x3b, 0x37, 0xf6, 0x79, 0xeb, 0xc1, 0x49, 0x53, 0xcc, 0xad, 0x94, 0x6d, 0xef, 0x7a, 0x87, 0xb0, 0x23, 0x09, 0xa4, 0x59, 0x33, 0xac, 0x43, 0x9a, 0x0d, 0x4d, 0x09, 0x7d, 0xe3, 0x3a, 0x56, 0xd5, 0xa3, 0x2c, 0x3f, 0x0a, 0x11, 0x0e, 0x82, 0x14, 0xf7, 0xba, 0x0d, 0xf3, 0xd9, 0x1c, 0xbb, 0x61, 0xa8, 0x4f, 0x93, 0xe9, 0x26, 0x81, 0xd4, 0x5e, 0x37, 0xb2, 0xfe, 0x3c, 0x7c, 0x1f, 0x2f, 0x28, 0x91, 0x85, 0x0f, 0x52, 0x52, 0x6a, 0x45, 0x5e, 0x16, 0xf8, 0x81, 0x64, 0xd0, 0x1b, 0xa1, 0x56, 0x69, 0xe3, 0x48, 0x28, 0x7d, 0x8f, 0xaa, 0xc8, 0x40, 0x98, 0xeb, 0xad, 0xd3, 0xed, 0x52, 0xaa, 0xcc, 0x10, 0x07, 0xab, 0xaa, 0xd1, 0x4f, 0xd7, 0x03, 0x2f, 0x73, 0x9e, 0xd7, 0xa3, 0xac, 0x30, 0x0c, 0x11, 0x1a, 0x8a, 0x34, 0x47, 0xd6, 0xca, 0x90, 0xf3, 0xf3, 0x0b, 0x86, 0xbb, 0x23, 0x94, 0x16, 0x68, 0xcf, 0xfa, 0x2a, 0xe8, 0x8d, 0x98, 0xeb, 0x20, 0x58, 0x37, 0x35, 0x9e, 0x67, 0x3e, 0x87, 0x34, 0x4d, 0x11, 0xbe, 0x19, 0x25, 0x94, 0x71, 0xd9, 0xc8, 0xc3, 0xf2, 0xaa, 0x00, 0x5f, 0x22, 0xe4, 0x7a, 0xcd, 0xf5, 0xa4, 0xa4, 0x2a, 0x0a, 0x34, 0x6b, 0xce, 0x50, 0x55, 0x19, 0x82, 0x9f, 0x27, 0x6a, 0x1b, 0x58, 0x5f, 0x12, 0x87, 0x5d, 0xfa, 0xa3, 0x1e, 0xc4, 0x01, 0xcb, 0x2c, 0x25, 0x59, 0xad, 0x58, 0x5e, 0xce, 0xb8, 0xd1, 0x19, 0x51, 0x54, 0x25, 0x85, 0x13, 0xef, 0x6a, 0xcf, 0xc0, 0xc0, 0xf3, 0x51, 0x79, 0xad, 0xd3, 0xc6, 0x14, 0x5c, 0xd7, 0x98, 0x27, 0xf0, 0x03, 0x8a, 0xaa, 0xe4, 0xfc, 0xe1, 0x19, 0x67, 0x67, 0x67, 0x04, 0x71, 0x44, 0x37, 0x8e, 0x39, 0x9f, 0x5e, 0x70, 0x7a, 0x7a, 0x6a, 0x3e, 0xdb, 0xd8, 0xdb, 0xf0, 0xa3, 0x28, 0xb5, 0x42, 0x09, 0x81, 0x62, 0x33, 0xac, 0x4a, 0x6b, 0xdd, 0x7c, 0xd6, 0x36, 0x48, 0xc5, 0x20, 0x89, 0x71, 0xb3, 0xf6, 0xa7, 0x69, 0xba, 0xce, 0x15, 0xaf, 0xd7, 0xc4, 0x76, 0xfe, 0x45, 0x7b, 0xdd, 0xd5, 0xba, 0x6c, 0x4c, 0x7c, 0xea, 0x0f, 0xce, 0xfd, 0xdf, 0x86, 0x81, 0x96, 0x59, 0x6f, 0xd7, 0x6b, 0xb5, 0x12, 0x8a, 0x3c, 0x2f, 0xf0, 0xa5, 0x45, 0x1e, 0x05, 0x42, 0x48, 0x3c, 0x5f, 0x52, 0x66, 0x39, 0xcb, 0x65, 0x42, 0xb5, 0x28, 0x78, 0xf2, 0xc9, 0x27, 0xd9, 0xd9, 0xd9, 0x21, 0x49, 0x57, 0x4c, 0xa7, 0x53, 0x40, 0x31, 0x99, 0x8c, 0xe8, 0xf5, 0x7a, 0xcc, 0x92, 0xcb, 0x26, 0xf7, 0xc4, 0xa2, 0xa4, 0xbe, 0x4b, 0xee, 0x72, 0x67, 0xe6, 0x56, 0xd6, 0xd1, 0x2e, 0x26, 0x76, 0x06, 0xec, 0x6a, 0xc5, 0xdd, 0x1d, 0x91, 0x5b, 0xd4, 0x5c, 0xa2, 0x96, 0x0b, 0xd9, 0xba, 0xd6, 0xac, 0xed, 0x42, 0xe3, 0x76, 0x79, 0xae, 0x24, 0x69, 0x1b, 0xd1, 0x2a, 0x2f, 0x72, 0x10, 0xf5, 0xee, 0x11, 0x8d, 0xf4, 0x04, 0x42, 0xae, 0xdd, 0xd3, 0xd2, 0x2c, 0xd9, 0xd8, 0x14, 0x48, 0x29, 0x91, 0xba, 0x96, 0xd3, 0xa9, 0xd2, 0x98, 0x04, 0x34, 0x1b, 0x10, 0x6d, 0x74, 0x82, 0x75, 0xc7, 0xef, 0x79, 0xb2, 0xd9, 0x9d, 0x1a, 0x36, 0xf7, 0x7a, 0xc6, 0xbf, 0xcd, 0xec, 0x64, 0x1b, 0x0b, 0xbb, 0xbd, 0xe1, 0xb9, 0x02, 0xb1, 0x8a, 0xed, 0x72, 0x35, 0xfb, 0x5e, 0xb9, 0x9d, 0xc1, 0x36, 0xc7, 0xba, 0x20, 0xf6, 0x1e, 0x6b, 0x9d, 0xda, 0x2e, 0xc8, 0xae, 0x36, 0xdc, 0xbe, 0x87, 0x56, 0x8a, 0xd1, 0x96, 0x9a, 0xb9, 0xf2, 0xb6, 0xf6, 0xf1, 0xb9, 0x1b, 0x1f, 0x55, 0xa8, 0x2b, 0x08, 0x8d, 0x7b, 0xbe, 0xd8, 0xf8, 0x5b, 0xb7, 0x3b, 0x77, 0x37, 0x38, 0x45, 0x51, 0x43, 0x5f, 0x4a, 0xd6, 0x50, 0x7a, 0x80, 0x14, 0x01, 0x08, 0xfb, 0xb3, 0x5f, 0xf3, 0x02, 0x2c, 0xa9, 0xb0, 0xaa, 0x3d, 0xae, 0xeb, 0x63, 0xd0, 0xaa, 0x31, 0x7e, 0xe8, 0xd4, 0x51, 0xae, 0x47, 0xaf, 0x7e, 0x75, 0x2b, 0xcc, 0x6e, 0x6f, 0xff, 0xe0, 0xfc, 0x92, 0x4a, 0x25, 0x78, 0x95, 0xb1, 0xd6, 0xb4, 0x8f, 0x2b, 0x64, 0xf2, 0xae, 0xc5, 0xbc, 0x7d, 0xbb, 0x39, 0x8a, 0x39, 0x7f, 0xfa, 0xd3, 0x4c, 0xcf, 0xbf, 0x4e, 0x59, 0x96, 0xe6, 0x6f, 0xfb, 0x7d, 0x3e, 0xf9, 0x33, 0x7f, 0x12, 0x80, 0xcf, 0x7e, 0xfe, 0x9f, 0xf1, 0xc3, 0xd7, 0x7f, 0x9b, 0xf9, 0xd2, 0xf8, 0x69, 0x3f, 0xfd, 0xd4, 0x35, 0xf6, 0x76, 0x87, 0x7c, 0xe1, 0xee, 0x7d, 0x7e, 0xe2, 0xe3, 0x1f, 0x27, 0xbc, 0xf6, 0x2c, 0x41, 0xe4, 0xf1, 0x8e, 0xf3, 0x98, 0x7f, 0xe6, 0xa7, 0x7f, 0x9a, 0xff, 0xe6, 0xbf, 0xfd, 0x73, 0x84, 0x81, 0x20, 0xaa, 0xe1, 0x56, 0x4b, 0x26, 0x0d, 0xc3, 0x90, 0xc9, 0x68, 0xdc, 0x90, 0xb2, 0x96, 0xcb, 0x25, 0xd2, 0x17, 0xb5, 0x25, 0x65, 0x46, 0x59, 0x15, 0xcc, 0x17, 0x97, 0xbc, 0xf9, 0x83, 0x84, 0xbc, 0x2e, 0x9a, 0xb7, 0x6f, 0xdf, 0xa6, 0x28, 0x33, 0x47, 0x46, 0xa3, 0xb7, 0x16, 0xee, 0x6d, 0xbf, 0xfb, 0x53, 0x22, 0xe0, 0xeb, 0xc3, 0x31, 0x9d, 0x91, 0x64, 0x32, 0x1e, 0xd6, 0x50, 0xa7, 0xe1, 0xcc, 0x3c, 0x7a, 0xf4, 0x88, 0xd5, 0x6a, 0xc5, 0xf3, 0x1f, 0xf8, 0x20, 0x59, 0x96, 0x71, 0x3e, 0xbd, 0xa0, 0x28, 0x0b, 0x2a, 0x7d, 0xc1, 0x74, 0x36, 0x63, 0xb1, 0x58, 0xd1, 0x1f, 0xf6, 0x18, 0x8f, 0xc7, 0xec, 0xee, 0xee, 0x32, 0x9d, 0xae, 0x08, 0xfd, 0x80, 0xd5, 0x2a, 0x65, 0x3c, 0x18, 0x32, 0xbb, 0x5c, 0x20, 0x85, 0xcf, 0x68, 0x34, 0x44, 0xd5, 0x45, 0x26, 0x8a, 0x22, 0x46, 0xa3, 0x11, 0x51, 0x5c, 0xf1, 0xe8, 0x28, 0xe1, 0x64, 0x5a, 0xf1, 0xe0, 0xed, 0xbb, 0x57, 0xb2, 0xd4, 0x6d, 0xc0, 0x0b, 0xc0, 0xb3, 0x54, 0xbc, 0xb4, 0xb3, 0xc3, 0xbd, 0xb7, 0x27, 0xe4, 0x62, 0x56, 0x8f, 0x67, 0xd6, 0x44, 0xd7, 0xa3, 0x07, 0x0f, 0xe9, 0x76, 0x3b, 0x1c, 0x1c, 0x1c, 0x34, 0x5d, 0x1a, 0xf2, 0x6a, 0x4c, 0x71, 0x96, 0x65, 0x86, 0x69, 0x5e, 0x96, 0xc6, 0x77, 0x3c, 0x8a, 0xae, 0x20, 0x86, 0xdb, 0x14, 0x35, 0x49, 0xb6, 0x42, 0x29, 0x23, 0x69, 0x12, 0x35, 0x4a, 0x28, 0x7d, 0x49, 0x27, 0xee, 0xb0, 0x7b, 0xb0, 0x83, 0x48, 0xaa, 0x7a, 0x1d, 0x5a, 0x21, 0x3c, 0x33, 0xe7, 0x2c, 0x8b, 0x82, 0xca, 0xc2, 0xe4, 0x55, 0x85, 0x56, 0x0a, 0xad, 0x14, 0x52, 0xaf, 0xd7, 0x3d, 0xa3, 0x64, 0xd0, 0x9b, 0xb6, 0xd7, 0xa5, 0x81, 0x7c, 0x45, 0x10, 0x12, 0x09, 0xaf, 0x71, 0x2f, 0xd3, 0xbe, 0x44, 0x8a, 0x00, 0xe1, 0xf9, 0x8d, 0xb9, 0x4a, 0xc3, 0x85, 0x38, 0xd8, 0xc5, 0xab, 0x73, 0xd4, 0xc3, 0xda, 0xc4, 0xa4, 0xd2, 0x8a, 0xc1, 0x78, 0xc4, 0xee, 0xfe, 0x1e, 0x2a, 0xc9, 0xd7, 0xeb, 0xb9, 0x56, 0x48, 0x36, 0xe5, 0xc6, 0x3e, 0xde, 0x15, 0x8f, 0x08, 0x97, 0x55, 0xee, 0x45, 0x21, 0x55, 0x92, 0x73, 0x3e, 0x9d, 0x91, 0xce, 0xcf, 0xf1, 0xbb, 0x31, 0x71, 0xaf, 0xcb, 0xa0, 0xdb, 0x23, 0x1c, 0x8e, 0x29, 0xe7, 0x2b, 0xa3, 0xcb, 0xb7, 0x29, 0x72, 0x52, 0x50, 0x2a, 0x49, 0xe5, 0x81, 0x72, 0xbc, 0xe3, 0xb1, 0xe8, 0x5f, 0xbd, 0x71, 0x77, 0x9b, 0x91, 0x20, 0x8e, 0x98, 0x2f, 0x16, 0x1c, 0xf4, 0x7b, 0x68, 0x01, 0x67, 0x67, 0x67, 0xf8, 0x51, 0x48, 0x10, 0x47, 0x64, 0xb2, 0x1e, 0x31, 0x18, 0x40, 0xd5, 0x6c, 0x8a, 0xea, 0xe3, 0xb3, 0xc7, 0x6b, 0xf5, 0xe7, 0xcb, 0x34, 0x31, 0x81, 0x56, 0x75, 0xad, 0x2a, 0xcb, 0x92, 0xc0, 0x5b, 0x67, 0x72, 0xd8, 0x35, 0x6f, 0xb1, 0x58, 0x34, 0xbe, 0x03, 0x16, 0xae, 0x6f, 0x23, 0xcc, 0xdb, 0x82, 0xae, 0x0c, 0x04, 0xaf, 0x1b, 0x84, 0x51, 0x08, 0x81, 0xb2, 0xd0, 0x7b, 0xed, 0x49, 0x20, 0x2d, 0xf2, 0x51, 0x13, 0x18, 0x4d, 0x73, 0x11, 0x21, 0x35, 0xe4, 0x69, 0x8e, 0xc4, 0x23, 0xf0, 0x7c, 0xb4, 0x16, 0xc6, 0x85, 0xb5, 0x30, 0x08, 0x43, 0x59, 0x15, 0xac, 0x56, 0x2b, 0xc2, 0xd0, 0xa7, 0xdf, 0xef, 0x1b, 0x4f, 0xfa, 0x8b, 0x33, 0x26, 0x07, 0x3b, 0x78, 0x9e, 0xd7, 0x44, 0xf2, 0x16, 0x45, 0xb1, 0xdd, 0x58, 0xc6, 0xea, 0xc4, 0xdb, 0x0c, 0x62, 0x37, 0xed, 0xcb, 0xce, 0xa7, 0x5d, 0x12, 0x5d, 0x7b, 0x07, 0x73, 0x85, 0xa9, 0xe9, 0xc8, 0xab, 0x4c, 0xb1, 0xbb, 0x1a, 0x97, 0xb9, 0xcd, 0x62, 0xb5, 0x4d, 0x4e, 0x73, 0x8d, 0x00, 0xda, 0x5d, 0xa9, 0xfb, 0xe5, 0xda, 0xee, 0x3d, 0x6e, 0x4e, 0xbe, 0xad, 0xab, 0x6d, 0x3f, 0xee, 0xe3, 0xe6, 0xec, 0xed, 0x99, 0xf0, 0x36, 0xdf, 0xf2, 0x6d, 0x1d, 0x6e, 0xd3, 0xd5, 0xd6, 0x23, 0x89, 0x6d, 0xc6, 0x2d, 0x6d, 0xed, 0xfe, 0xb6, 0xe7, 0xd3, 0xb2, 0xda, 0xaa, 0xdd, 0x6e, 0x43, 0xfe, 0xdb, 0x24, 0x71, 0x42, 0x08, 0xa4, 0xb7, 0x9e, 0x0b, 0xba, 0xea, 0x01, 0xfb, 0xf9, 0x6f, 0x33, 0xad, 0x71, 0x3f, 0xa3, 0x26, 0x87, 0xd8, 0xe1, 0x58, 0x58, 0x45, 0x43, 0x63, 0x46, 0xe1, 0x78, 0xd8, 0x37, 0x99, 0xcc, 0x36, 0xd0, 0xc7, 0xab, 0x55, 0xa4, 0x42, 0x20, 0x84, 0x8f, 0xc0, 0x43, 0x0a, 0x69, 0xbe, 0x17, 0x02, 0x5d, 0xad, 0x89, 0x90, 0x26, 0x4c, 0xb9, 0x44, 0x50, 0x21, 0x3d, 0x43, 0xa0, 0x93, 0x28, 0xf2, 0xa4, 0x24, 0x0c, 0x7d, 0xd0, 0xe5, 0x7b, 0x16, 0x73, 0x7b, 0xfb, 0xc3, 0x2f, 0x7c, 0x82, 0x2f, 0xde, 0xff, 0x06, 0x51, 0x58, 0xdb, 0x7c, 0x26, 0x25, 0x0f, 0x1f, 0xad, 0xf8, 0xec, 0x6f, 0x7c, 0x8d, 0x9f, 0xfb, 0xa9, 0x8f, 0xbf, 0xef, 0xa2, 0xfe, 0x91, 0xa7, 0xc6, 0xf0, 0x91, 0x5f, 0xaa, 0xdd, 0x66, 0xce, 0xcc, 0x57, 0x7d, 0xfb, 0xf8, 0x4f, 0x7c, 0x82, 0xb7, 0x7f, 0x78, 0x97, 0x2c, 0x9f, 0xd1, 0xeb, 0x45, 0x8c, 0x46, 0x7d, 0x2e, 0x2f, 0xe7, 0xfc, 0xbe, 0x9f, 0x7e, 0x9e, 0xe9, 0xc5, 0x45, 0xe3, 0x4d, 0x1e, 0xfa, 0x11, 0x41, 0xe4, 0xf1, 0x2b, 0xff, 0xe4, 0x57, 0x19, 0xf6, 0xbb, 0x3c, 0xfd, 0xf4, 0x0d, 0x53, 0x58, 0xd2, 0x15, 0x52, 0x4a, 0xfa, 0xfd, 0x7e, 0xb3, 0xc8, 0x96, 0x55, 0xc1, 0xc9, 0xe9, 0x71, 0xd3, 0x7d, 0x2e, 0x96, 0xab, 0x1a, 0xce, 0x8c, 0x1a, 0xa8, 0xdf, 0xd8, 0x31, 0x4b, 0x6e, 0xdc, 0x38, 0x64, 0x3a, 0x3d, 0x47, 0xa9, 0x92, 0xc1, 0x60, 0x40, 0x1c, 0x0f, 0x19, 0x0e, 0x57, 0xbf, 0x2b, 0x5d, 0xf8, 0x4f, 0x5e, 0xfb, 0x30, 0xd3, 0x83, 0x65, 0x23, 0xbf, 0xb2, 0xe7, 0xcd, 0xf5, 0xeb, 0xd7, 0xf1, 0x7d, 0x9f, 0xb3, 0xb3, 0x8b, 0x5a, 0xc7, 0x5d, 0x12, 0x75, 0x62, 0x90, 0xe6, 0xb3, 0xee, 0x0f, 0x62, 0xc6, 0x93, 0x21, 0x61, 0xe8, 0xd3, 0xed, 0xc5, 0x5c, 0x5e, 0x8a, 0x46, 0x33, 0x6b, 0xa2, 0x99, 0x97, 0x74, 0xbb, 0x5d, 0x1e, 0x3d, 0x7a, 0xc4, 0xfe, 0xee, 0x2e, 0x51, 0x14, 0x71, 0x72, 0x72, 0xc2, 0xb7, 0x1f, 0xbc, 0x8d, 0xe7, 0xc1, 0x78, 0xd4, 0x6f, 0xba, 0xf2, 0x0d, 0xa5, 0xc1, 0xf9, 0x69, 0x93, 0xd6, 0x66, 0x99, 0xee, 0xde, 0xdd, 0x37, 0xb8, 0x75, 0xfb, 0xc7, 0xf8, 0xc1, 0xe5, 0xff, 0xbb, 0xe6, 0xa7, 0xd4, 0xdd, 0xee, 0x62, 0x05, 0x79, 0x99, 0xd0, 0xef, 0x1b, 0xa6, 0x72, 0x1c, 0x46, 0x6b, 0x6b, 0x69, 0xe9, 0x99, 0xe0, 0x93, 0xd5, 0xca, 0xa0, 0x03, 0x75, 0xea, 0x9a, 0x65, 0x67, 0x2f, 0x97, 0x4b, 0x33, 0xf9, 0x71, 0x0a, 0x58, 0x1b, 0x69, 0xab, 0xd0, 0x78, 0x81, 0x47, 0x20, 0x43, 0x14, 0xc2, 0x8c, 0xe0, 0xa4, 0x40, 0xf8, 0xb5, 0x2e, 0x5c, 0x0a, 0x84, 0xef, 0xa1, 0x73, 0x41, 0xa5, 0x2a, 0x23, 0x69, 0x14, 0x8a, 0x12, 0x8d, 0xd7, 0x89, 0x08, 0x42, 0xc3, 0x1d, 0xd1, 0x8e, 0x4f, 0x84, 0xd5, 0x52, 0x2b, 0xad, 0x0d, 0xe1, 0xce, 0x59, 0x73, 0xed, 0xfa, 0xd9, 0xe9, 0x74, 0x90, 0xbb, 0xbb, 0x64, 0x2a, 0xaf, 0xfd, 0x14, 0x8c, 0x3e, 0xdc, 0xcd, 0x97, 0x68, 0x92, 0xc1, 0xb4, 0x21, 0xfb, 0xfa, 0x5d, 0x63, 0x5b, 0x9b, 0x15, 0x79, 0x23, 0x99, 0x8d, 0xeb, 0xeb, 0x34, 0x08, 0x02, 0x4a, 0x25, 0x9a, 0x78, 0xc6, 0x66, 0xad, 0x15, 0x6b, 0xdb, 0xd6, 0x8d, 0x26, 0xa1, 0x5e, 0xdb, 0x1f, 0x9e, 0x1e, 0xe3, 0x45, 0x21, 0xdd, 0x41, 0x9f, 0x28, 0x90, 0x88, 0xc0, 0x27, 0x08, 0x8d, 0x54, 0x6d, 0x79, 0x39, 0x67, 0x10, 0xc6, 0x08, 0xdf, 0xdb, 0x88, 0x61, 0x56, 0x1e, 0x4d, 0x7e, 0x3a, 0x6c, 0x46, 0x62, 0x0b, 0x29, 0x11, 0x56, 0xad, 0xa1, 0x0a, 0x8e, 0xa6, 0x97, 0xec, 0xd7, 0xd1, 0xc2, 0xc7, 0x27, 0x27, 0xa4, 0xd9, 0x8a, 0x8b, 0xd9, 0x25, 0x07, 0x07, 0xfb, 0x1b, 0x0d, 0x93, 0x31, 0x7e, 0x75, 0xd0, 0x53, 0x67, 0x2e, 0x6f, 0x9d, 0xdf, 0xbc, 0xf9, 0xac, 0xe1, 0x4d, 0xe8, 0x7a, 0x56, 0x6f, 0x95, 0x32, 0x7e, 0x8d, 0xe6, 0x4a, 0x4c, 0x04, 0xee, 0x6c, 0x36, 0x63, 0x6f, 0xb2, 0xb3, 0x56, 0x31, 0x3c, 0xc6, 0x5f, 0x45, 0x84, 0x2d, 0x0e, 0x96, 0x83, 0x16, 0x08, 0x61, 0x3e, 0x7b, 0xdb, 0x8d, 0x6f, 0xeb, 0xd0, 0x65, 0xbd, 0xce, 0x09, 0x8b, 0x4a, 0x62, 0xd6, 0xde, 0x68, 0x68, 0xec, 0xce, 0xc7, 0xf1, 0x80, 0x24, 0x49, 0x8c, 0xbb, 0x61, 0x5e, 0x7b, 0xd2, 0xaf, 0x16, 0x8d, 0x54, 0x31, 0x3b, 0xca, 0x1b, 0x14, 0xb9, 0xd3, 0xe9, 0x30, 0x1a, 0x8d, 0x4c, 0x38, 0x4b, 0x3b, 0x37, 0xdb, 0xca, 0xaa, 0xb2, 0x3a, 0x0a, 0xaf, 0xdd, 0xa1, 0x6f, 0x8b, 0xd8, 0x6c, 0x93, 0xbf, 0xb6, 0xe9, 0x8e, 0xed, 0x26, 0x60, 0x9b, 0x09, 0xcd, 0xb6, 0x4e, 0xd5, 0x3d, 0x39, 0xb7, 0xed, 0x8a, 0xa2, 0x6e, 0xb4, 0x61, 0xc7, 0x6a, 0xe3, 0x34, 0x8d, 0x6c, 0x47, 0xd7, 0x70, 0xad, 0x76, 0xba, 0x6b, 0xf7, 0x67, 0x55, 0x43, 0xbd, 0x7a, 0xab, 0x39, 0xcc, 0x95, 0x99, 0xd6, 0x16, 0x37, 0x34, 0xb7, 0xe8, 0xb5, 0xe5, 0x6d, 0xed, 0xd9, 0x72, 0x5b, 0x96, 0xd5, 0xd6, 0x68, 0x6f, 0x0b, 0x37, 0xb1, 0x12, 0x16, 0x9c, 0x60, 0x05, 0x8b, 0x5a, 0x28, 0xa5, 0x58, 0x65, 0x8b, 0xc7, 0xda, 0xbd, 0xb6, 0x7d, 0xd8, 0xdb, 0x12, 0x3e, 0xab, 0x5d, 0x6d, 0xa3, 0x23, 0x6e, 0xca, 0x59, 0x7b, 0xa3, 0xd5, 0xde, 0xc8, 0x78, 0xd2, 0xbb, 0xb2, 0x83, 0x75, 0x0b, 0xfa, 0x36, 0x4e, 0x81, 0xbb, 0xd9, 0xf3, 0x44, 0x80, 0x10, 0x06, 0x72, 0x32, 0x27, 0xb4, 0x5f, 0xcf, 0xc7, 0x0d, 0xfc, 0xae, 0xa9, 0xea, 0x8b, 0xc4, 0x14, 0x73, 0x84, 0x65, 0xc1, 0x2b, 0xf3, 0x19, 0x16, 0x2b, 0x8a, 0x62, 0x69, 0x60, 0xf6, 0xf7, 0x59, 0xcc, 0xff, 0xbd, 0x1d, 0x03, 0x9b, 0x7f, 0x73, 0x3a, 0xa4, 0x2c, 0xeb, 0xf3, 0x4b, 0x57, 0x04, 0x81, 0xe4, 0xab, 0x5f, 0xf9, 0x3a, 0x7f, 0xfc, 0x8f, 0xfd, 0xc9, 0xa6, 0xe0, 0xba, 0x05, 0xfa, 0xf1, 0xb6, 0x71, 0xdb, 0xef, 0x33, 0x99, 0x8c, 0xf0, 0xa4, 0xa4, 0xd7, 0xf1, 0x18, 0x0d, 0x3c, 0x8a, 0x3c, 0x61, 0xbe, 0x58, 0x30, 0x9e, 0x4c, 0xd6, 0x8f, 0x0f, 0x4d, 0x31, 0xff, 0xc2, 0xbf, 0xfa, 0xe7, 0xfc, 0xf8, 0xc7, 0x9e, 0xe4, 0xd6, 0xad, 0x1b, 0xe4, 0x79, 0xd2, 0x18, 0x45, 0x50, 0x29, 0xb4, 0xd2, 0xe4, 0x59, 0xc6, 0x62, 0xb1, 0x60, 0x3a, 0x5d, 0xe1, 0x79, 0xa6, 0xfb, 0x0a, 0x02, 0xbf, 0xe6, 0xa2, 0xf8, 0xc4, 0x71, 0x54, 0x2b, 0x37, 0xf2, 0x5a, 0x52, 0x65, 0x7e, 0x8e, 0xa2, 0x88, 0x7e, 0xbf, 0x4f, 0x18, 0x44, 0x3c, 0xf7, 0xbc, 0xd1, 0xf1, 0x7e, 0xeb, 0x47, 0x9f, 0xe1, 0xa5, 0xdf, 0x79, 0xe3, 0xfd, 0xb9, 0xe2, 0x5d, 0x9a, 0xb8, 0xcf, 0xd5, 0x6a, 0x85, 0x04, 0xb2, 0x55, 0x42, 0xaf, 0xd7, 0x23, 0x0e, 0x42, 0x06, 0x37, 0x6e, 0x98, 0x68, 0x51, 0x29, 0xf0, 0x23, 0x9f, 0xf9, 0x72, 0xc6, 0x32, 0x5d, 0xb2, 0x58, 0xa4, 0xdc, 0xbb, 0xf7, 0x90, 0x9b, 0x37, 0x0f, 0x4d, 0xa8, 0x44, 0x9e, 0xe0, 0x09, 0xe3, 0xae, 0x96, 0xa6, 0x39, 0x9e, 0xe7, 0xb1, 0xbb, 0xbb, 0x4b, 0x37, 0xcb, 0xd1, 0x4a, 0xb1, 0x5a, 0xad, 0x18, 0x8d, 0x46, 0xdc, 0xbe, 0xf5, 0x04, 0x41, 0x10, 0x70, 0xef, 0x2d, 0x63, 0x26, 0xf3, 0x63, 0x3f, 0xf2, 0x04, 0xe7, 0xe7, 0x69, 0x53, 0xc8, 0x87, 0xfd, 0x2e, 0xdd, 0x7e, 0x9f, 0xd5, 0x62, 0xc1, 0xed, 0x7c, 0x7d, 0x8e, 0x3e, 0x4b, 0xc5, 0x5b, 0x52, 0x36, 0x04, 0x23, 0x59, 0x43, 0xc4, 0x4f, 0x3e, 0xb9, 0x4f, 0x92, 0x24, 0xf8, 0xf5, 0x7c, 0xd1, 0xc0, 0xde, 0x65, 0x23, 0x39, 0xeb, 0x06, 0x26, 0x24, 0x23, 0xcc, 0x33, 0xb4, 0xa8, 0x8d, 0x8a, 0xc2, 0x00, 0x55, 0x9f, 0xaf, 0x2e, 0x82, 0xa8, 0xb5, 0x6e, 0xc2, 0x80, 0x1a, 0xa4, 0xc9, 0x97, 0xe6, 0xfe, 0x85, 0x71, 0x07, 0x13, 0x5a, 0xa0, 0x85, 0x26, 0xc9, 0x52, 0xce, 0xa6, 0xe7, 0xcc, 0x8f, 0xa7, 0x35, 0xb1, 0xad, 0x20, 0xea, 0x76, 0xa0, 0x8e, 0x57, 0xd5, 0x81, 0x47, 0x6f, 0x34, 0x24, 0x4b, 0x67, 0x4d, 0x31, 0x77, 0x87, 0xe9, 0xeb, 0x82, 0x4c, 0xd3, 0x41, 0xdb, 0x10, 0x93, 0x4e, 0x14, 0x9b, 0xf0, 0x93, 0xa8, 0xc3, 0xd9, 0xec, 0x9c, 0xb4, 0x2a, 0x36, 0x20, 0xde, 0xf6, 0xf1, 0x46, 0x51, 0x44, 0x99, 0xe5, 0x1b, 0xeb, 0x4e, 0x9e, 0xe7, 0x3c, 0x78, 0xf0, 0x80, 0x27, 0x0e, 0xae, 0x37, 0xeb, 0x58, 0x51, 0x41, 0xa1, 0x2b, 0xca, 0xba, 0x40, 0x98, 0x42, 0x6e, 0x9a, 0x0e, 0xd4, 0x66, 0x27, 0x4b, 0x2d, 0xdf, 0xda, 0x3b, 0xd8, 0xc7, 0x8f, 0x23, 0xe6, 0x2a, 0xe7, 0x78, 0x7a, 0x4e, 0x91, 0x98, 0x4c, 0xf9, 0x4e, 0x14, 0x13, 0x22, 0x11, 0x4a, 0x13, 0xc6, 0x91, 0x71, 0x87, 0x2b, 0x4a, 0x90, 0x86, 0x2d, 0x5e, 0x79, 0x9e, 0xd1, 0xcd, 0x5b, 0x62, 0x9c, 0x32, 0x16, 0xb7, 0x9e, 0xcb, 0xb7, 0x29, 0x4a, 0xae, 0x5d, 0xbb, 0xc6, 0xfe, 0xc1, 0x2e, 0xbd, 0x7e, 0x9f, 0x07, 0x0f, 0x1e, 0x50, 0x6a, 0xb5, 0x8e, 0x57, 0xad, 0x4a, 0x94, 0x58, 0x8f, 0x4e, 0x75, 0x4d, 0x2e, 0x14, 0xf5, 0x28, 0xd6, 0x12, 0xec, 0x6c, 0x40, 0x8e, 0x4b, 0xb6, 0x53, 0xf6, 0xfd, 0xad, 0x7f, 0xf6, 0xec, 0x7a, 0xe4, 0x1b, 0x4e, 0x57, 0x92, 0x54, 0xe4, 0xbd, 0x7c, 0x63, 0x64, 0xeb, 0xd6, 0x2d, 0xb5, 0xc5, 0x50, 0xcb, 0x9a, 0xc3, 0xb8, 0xb6, 0xb3, 0xcd, 0x5a, 0x6b, 0xfd, 0x51, 0x58, 0xe7, 0x89, 0xe8, 0x3a, 0x46, 0x3a, 0xcf, 0x73, 0x02, 0x69, 0xd6, 0xcb, 0x22, 0x2b, 0xb9, 0xbc, 0x9c, 0xd3, 0x8b, 0x3b, 0x8c, 0xc7, 0x3b, 0x8c, 0xe3, 0x5e, 0xe3, 0x5a, 0x68, 0x47, 0x01, 0xab, 0xd5, 0x0a, 0xad, 0x35, 0xe3, 0xf1, 0x18, 0x11, 0xac, 0x6b, 0xad, 0xe5, 0xa3, 0x79, 0x37, 0x6e, 0xfd, 0xf8, 0x67, 0xec, 0xc1, 0xba, 0x16, 0xac, 0xb6, 0x0b, 0x70, 0x0b, 0x5c, 0x1b, 0xc2, 0x5d, 0x4b, 0xa9, 0x36, 0x3b, 0xbd, 0xc7, 0xa5, 0x8f, 0xb5, 0xc9, 0x55, 0x36, 0x21, 0xa7, 0x1d, 0x5a, 0xb2, 0xad, 0xbb, 0xdd, 0x5a, 0x58, 0x7c, 0x79, 0x65, 0x36, 0xdb, 0xf6, 0x2f, 0xdf, 0x56, 0x98, 0xd6, 0x11, 0xa1, 0xaa, 0x96, 0x88, 0x59, 0xe2, 0x87, 0xa8, 0x21, 0x75, 0x2b, 0x8f, 0x33, 0xb2, 0x3a, 0xa5, 0xaa, 0xe6, 0x3e, 0x46, 0x66, 0x65, 0x60, 0xf9, 0x20, 0x08, 0xb7, 0x16, 0x66, 0xd7, 0x8b, 0xfe, 0x71, 0xb3, 0x75, 0x93, 0xe0, 0x93, 0x6e, 0xbc, 0x5f, 0xee, 0x09, 0x63, 0x19, 0x9a, 0xae, 0x2c, 0xcd, 0x7d, 0xaf, 0xab, 0xaa, 0x42, 0xc8, 0xab, 0x3e, 0xf0, 0xae, 0xb5, 0x6e, 0x7b, 0x7e, 0xdd, 0xfe, 0xb2, 0xb3, 0x68, 0xd7, 0xac, 0xc6, 0xde, 0xdf, 0x5e, 0xc0, 0xdb, 0xa4, 0x7b, 0x0d, 0x02, 0x92, 0x97, 0x5b, 0x9f, 0xdf, 0x7d, 0x2d, 0xd6, 0xab, 0xd9, 0x5d, 0x10, 0x2c, 0x03, 0x5b, 0x53, 0x22, 0xa5, 0x8f, 0x14, 0x3e, 0x52, 0x7a, 0x26, 0xe0, 0x42, 0xc8, 0x86, 0xf9, 0x5b, 0x0f, 0x03, 0xd0, 0x75, 0xdc, 0xa0, 0x52, 0x39, 0x4a, 0x17, 0x68, 0x8c, 0xaf, 0x72, 0xba, 0x3a, 0x63, 0x31, 0x9f, 0xf2, 0xa9, 0x9f, 0xfc, 0x28, 0xef, 0xfc, 0xea, 0x67, 0xdf, 0xb3, 0x98, 0x03, 0xa4, 0xa7, 0xe7, 0xc4, 0x7b, 0xbb, 0xfc, 0xd6, 0xf1, 0x5b, 0x74, 0x7a, 0xdd, 0xc6, 0xa1, 0x4c, 0xa9, 0x8a, 0xc5, 0x32, 0xe3, 0xfc, 0xe2, 0x94, 0xe7, 0x9e, 0xa9, 0x83, 0x46, 0xc2, 0x2e, 0xe4, 0xc9, 0xff, 0x2f, 0xd7, 0x33, 0xf2, 0x84, 0x8f, 0x7e, 0xfc, 0x67, 0xe8, 0xf7, 0x6f, 0x92, 0x2c, 0x7f, 0xc8, 0xde, 0xde, 0x0e, 0x79, 0x56, 0x31, 0x1c, 0xde, 0xa4, 0xd3, 0x31, 0xb3, 0xbb, 0x34, 0x4d, 0xf9, 0x8b, 0xff, 0xc9, 0x5f, 0xe2, 0x7b, 0xaf, 0x7e, 0x8f, 0x4a, 0x99, 0xb8, 0x47, 0xdf, 0xcb, 0xf1, 0x7d, 0xc1, 0x60, 0xd0, 0x63, 0x32, 0xd9, 0xa9, 0x75, 0xb7, 0x17, 0xb5, 0x85, 0xeb, 0x88, 0x6e, 0x37, 0x32, 0x29, 0x4d, 0x9e, 0xd7, 0x14, 0x2a, 0xd7, 0xf2, 0xd8, 0xc2, 0x84, 0x76, 0x5c, 0xe3, 0x79, 0x1e, 0x8b, 0xc5, 0x82, 0xe3, 0xe3, 0x47, 0x94, 0x45, 0xc5, 0x2f, 0x0e, 0xee, 0x70, 0x78, 0x74, 0xf1, 0xbe, 0x5e, 0xc2, 0xcb, 0x28, 0xbe, 0xfc, 0xdd, 0xaf, 0x72, 0x76, 0x76, 0x8a, 0x52, 0x8a, 0x6b, 0xd7, 0xae, 0x35, 0xdd, 0x40, 0x10, 0x04, 0x24, 0xab, 0x8c, 0x8b, 0x8b, 0x73, 0x92, 0x34, 0x45, 0xa3, 0x89, 0xe2, 0x90, 0x83, 0x6b, 0x07, 0xec, 0xed, 0xed, 0xe1, 0x07, 0xb2, 0xd6, 0x42, 0xd7, 0xf6, 0xa3, 0xc2, 0xa3, 0xdb, 0xed, 0x71, 0x7c, 0x74, 0x4c, 0x9e, 0xe7, 0xec, 0xef, 0x1f, 0x50, 0x56, 0x15, 0xc3, 0xc1, 0xa0, 0x4e, 0x6e, 0xab, 0x58, 0x2e, 0x8c, 0xe3, 0xd5, 0x6a, 0x99, 0xf1, 0xd1, 0x1f, 0xfd, 0x3d, 0x4c, 0x97, 0x1e, 0x55, 0x9e, 0xd2, 0xed, 0x74, 0xe9, 0x8e, 0x0e, 0x11, 0xd5, 0x8a, 0x22, 0xcf, 0x39, 0xa8, 0xb3, 0xad, 0xef, 0x1c, 0x9f, 0xd1, 0x95, 0x82, 0x87, 0xdd, 0x0e, 0x3f, 0xc8, 0xee, 0xe3, 0xd5, 0x85, 0x46, 0x3a, 0x28, 0x63, 0x9a, 0xa6, 0x26, 0x28, 0xa3, 0x28, 0xe8, 0x74, 0x3a, 0x94, 0x55, 0xd9, 0x84, 0x02, 0xa5, 0xcb, 0x55, 0xc3, 0x4e, 0x2e, 0xeb, 0xf7, 0xae, 0xac, 0x17, 0x7c, 0xe3, 0xd1, 0x5d, 0x37, 0x20, 0xb6, 0x41, 0x58, 0x0f, 0xb9, 0x4d, 0xa1, 0x15, 0x25, 0x42, 0x48, 0xf2, 0x32, 0x27, 0xcb, 0x0b, 0x64, 0xad, 0xc0, 0x50, 0xa5, 0xa2, 0x2c, 0x4a, 0x3a, 0x41, 0x5c, 0x2f, 0xb4, 0x9a, 0xa8, 0x13, 0xa3, 0x81, 0xa0, 0x1b, 0x37, 0xe6, 0x2f, 0x50, 0x43, 0xee, 0x95, 0x6a, 0x9c, 0xce, 0x0c, 0xd9, 0xb3, 0xf6, 0xf6, 0x60, 0x9d, 0xa7, 0x10, 0x06, 0x01, 0xbd, 0x4e, 0x97, 0x38, 0x8c, 0x08, 0x3d, 0x9f, 0xc0, 0xf3, 0x29, 0x75, 0x65, 0xe6, 0xc6, 0x68, 0x84, 0xe7, 0x35, 0x30, 0xbe, 0xbd, 0x9e, 0x27, 0xbd, 0x01, 0x83, 0xfe, 0x80, 0x22, 0xcb, 0xcd, 0xac, 0x5e, 0x6b, 0x3c, 0xdf, 0xa7, 0x37, 0xe8, 0x53, 0x94, 0xc6, 0x39, 0xae, 0xd4, 0x86, 0x80, 0x97, 0x57, 0x25, 0x79, 0x59, 0x50, 0xda, 0x68, 0x69, 0xdf, 0xc7, 0x47, 0x1a, 0x13, 0x1c, 0x21, 0xd7, 0x68, 0x9b, 0xef, 0x23, 0x3d, 0x33, 0x16, 0x88, 0x32, 0x45, 0x77, 0xd8, 0xc7, 0x8f, 0x23, 0xb2, 0xb2, 0x40, 0x0b, 0x43, 0x7e, 0x0b, 0xa4, 0x24, 0x4d, 0x12, 0xa8, 0xcd, 0x9f, 0x4c, 0x2c, 0x69, 0x65, 0x46, 0x09, 0x9e, 0x44, 0xd5, 0x4e, 0x71, 0x3a, 0xaf, 0xbd, 0xd8, 0x01, 0x94, 0x31, 0xdc, 0xe9, 0x76, 0xba, 0x4d, 0x82, 0x5d, 0x9a, 0x24, 0x4c, 0x2f, 0xa7, 0x14, 0x45, 0xc1, 0xc5, 0xc5, 0x05, 0x7e, 0xe8, 0xb3, 0xb3, 0xb3, 0xc3, 0x32, 0x31, 0x64, 0x35, 0x42, 0x7f, 0xfd, 0xf7, 0x96, 0xe3, 0xec, 0x14, 0x54, 0x7b, 0x0d, 0x14, 0x45, 0xd1, 0xf0, 0x27, 0x94, 0x52, 0xf8, 0x81, 0x21, 0x9b, 0x26, 0x69, 0x6e, 0xae, 0x97, 0x5a, 0xb2, 0xdc, 0xa9, 0xc3, 0x7b, 0x94, 0x2a, 0xd8, 0xdb, 0xdd, 0x6d, 0xbc, 0x54, 0x5c, 0x7e, 0xd1, 0xc6, 0xf8, 0xd1, 0xc7, 0x8c, 0x09, 0x1c, 0x7f, 0x05, 0x00, 0x4f, 0x98, 0xb5, 0xb0, 0xb4, 0xde, 0x01, 0x35, 0x4a, 0xe2, 0xfa, 0x97, 0x94, 0x79, 0x81, 0x0e, 0x3d, 0xca, 0xbc, 0x34, 0xc6, 0x32, 0x5e, 0xc0, 0xec, 0x72, 0xce, 0x83, 0x7b, 0x67, 0xac, 0x96, 0x0b, 0xa2, 0x28, 0x22, 0x5b, 0x26, 0xf5, 0xd8, 0x12, 0x76, 0x77, 0x77, 0xb9, 0x7e, 0xfd, 0x5a, 0x83, 0xd8, 0x21, 0x14, 0x79, 0x8d, 0xa0, 0xdb, 0x88, 0xf0, 0x30, 0x0c, 0xf1, 0x0e, 0x0e, 0x7f, 0xf4, 0x33, 0x2e, 0x2c, 0xda, 0xf6, 0x26, 0x0e, 0xea, 0x17, 0xdf, 0xed, 0x76, 0x37, 0x8a, 0x84, 0x85, 0xb4, 0x5d, 0x7f, 0xf0, 0xab, 0x9a, 0xe9, 0xed, 0xf3, 0x61, 0xfb, 0x15, 0x45, 0xe1, 0x06, 0x99, 0xad, 0x2d, 0xd1, 0xb2, 0x5d, 0xaa, 0x85, 0x15, 0xda, 0x32, 0x2b, 0xe1, 0x89, 0x06, 0x5a, 0xb2, 0x2c, 0x46, 0x5b, 0x00, 0xed, 0xef, 0xe2, 0xd8, 0xec, 0x68, 0xad, 0x84, 0xc7, 0x16, 0x30, 0xc3, 0xc0, 0x57, 0x57, 0x6c, 0x5a, 0x5d, 0xb7, 0x3b, 0x77, 0xac, 0x60, 0x1f, 0xc3, 0x65, 0x70, 0x97, 0x55, 0x86, 0xa6, 0x6a, 0xe6, 0xef, 0x42, 0x9a, 0xee, 0x5f, 0xeb, 0x0a, 0x4d, 0x65, 0xb4, 0x89, 0x54, 0x28, 0x55, 0x9a, 0x3c, 0x5d, 0x5d, 0xa2, 0xb5, 0x99, 0x03, 0x57, 0x55, 0x81, 0x90, 0x10, 0x04, 0x1e, 0x52, 0x42, 0x59, 0xe6, 0x26, 0x4f, 0x1b, 0x85, 0xd6, 0x15, 0x65, 0x99, 0xd3, 0xeb, 0x75, 0x08, 0x43, 0x1f, 0xdf, 0x37, 0x96, 0x83, 0x65, 0x99, 0x53, 0x14, 0x59, 0x13, 0x18, 0xa1, 0xeb, 0x6e, 0xc4, 0x97, 0x1e, 0xbe, 0x94, 0xe6, 0x44, 0xc2, 0xa4, 0x87, 0xa9, 0x9a, 0x88, 0x84, 0x52, 0xa0, 0x14, 0x42, 0xeb, 0xe6, 0x67, 0x5d, 0x29, 0x93, 0xee, 0x23, 0x6a, 0xcb, 0xc4, 0xfa, 0x4b, 0x22, 0x10, 0x4a, 0x1b, 0x8f, 0xf5, 0xfa, 0x2b, 0x90, 0x66, 0xae, 0xe3, 0x21, 0xd0, 0x65, 0x85, 0x2a, 0x4a, 0xe7, 0xbe, 0xa5, 0xb1, 0xaa, 0xb4, 0x5f, 0xda, 0x7c, 0x09, 0x6d, 0xe6, 0xdb, 0x79, 0x9a, 0xe0, 0x49, 0x88, 0xa3, 0x80, 0x38, 0x0a, 0xf0, 0xa5, 0x00, 0x55, 0x51, 0x95, 0x39, 0x55, 0x91, 0xa3, 0x54, 0x08, 0xda, 0x40, 0xed, 0xba, 0x32, 0x7e, 0x03, 0x55, 0x5e, 0xff, 0x5b, 0x95, 0x23, 0x54, 0x0e, 0x64, 0xf8, 0x72, 0x89, 0x60, 0x8e, 0xd6, 0x17, 0x94, 0xc5, 0x09, 0x59, 0xf2, 0x88, 0x74, 0x75, 0x4c, 0x32, 0xfb, 0x21, 0xb3, 0xe9, 0x43, 0x5e, 0x3a, 0x18, 0x73, 0xf9, 0xf5, 0xdf, 0x79, 0xdf, 0xb5, 0xd6, 0x14, 0xf4, 0x7b, 0xdc, 0x7f, 0x78, 0x8f, 0x30, 0x0c, 0x59, 0x2e, 0x97, 0x2c, 0x97, 0x2b, 0xb2, 0x4c, 0xf3, 0xfa, 0xeb, 0x6f, 0xf1, 0xc7, 0xff, 0xd8, 0x2f, 0xb1, 0x5c, 0x2d, 0x9a, 0xc2, 0xfc, 0xff, 0xfb, 0x96, 0x27, 0x5c, 0x9b, 0xc4, 0x3c, 0xff, 0xe2, 0x27, 0xb9, 0x79, 0xeb, 0x43, 0xfc, 0xda, 0xaf, 0xfd, 0x0a, 0x5f, 0xfc, 0xd2, 0x6f, 0xf0, 0xc9, 0x7f, 0xeb, 0x67, 0x4c, 0x67, 0x9f, 0x27, 0x78, 0x9d, 0x3d, 0xde, 0x7c, 0xf3, 0xb5, 0x5a, 0x1e, 0xa4, 0xe8, 0xf4, 0x34, 0xc3, 0x51, 0x8f, 0x27, 0x9f, 0x7e, 0x92, 0x64, 0x75, 0xc1, 0xc5, 0x85, 0x81, 0x1a, 0x77, 0x76, 0x8d, 0xe1, 0x86, 0x52, 0x1a, 0xa5, 0x34, 0xfd, 0xfe, 0x80, 0xd5, 0x72, 0x4a, 0xaf, 0x13, 0x11, 0x78, 0x02, 0x89, 0xa2, 0xd7, 0x89, 0xe8, 0xc6, 0x21, 0x55, 0x91, 0xb1, 0x98, 0x5f, 0xb2, 0xbb, 0xbf, 0xc7, 0x64, 0x67, 0x5c, 0x33, 0x80, 0x35, 0x51, 0xd4, 0xe3, 0xe7, 0xa2, 0xeb, 0xef, 0xfb, 0xf0, 0x5f, 0x46, 0xf1, 0xdd, 0x93, 0x37, 0xe8, 0xf5, 0x63, 0x3a, 0xbd, 0x0e, 0xd2, 0x97, 0x8c, 0x27, 0x63, 0xfa, 0xc3, 0x3e, 0x5e, 0xe0, 0x31, 0xee, 0xef, 0x32, 0x1c, 0x8c, 0xf0, 0x7c, 0x0f, 0xe1, 0x09, 0xc2, 0x28, 0xa0, 0xa8, 0x72, 0xca, 0x2a, 0x67, 0x3c, 0x1e, 0x21, 0xa5, 0xa8, 0xcf, 0xe5, 0x0a, 0xa1, 0x25, 0x4a, 0xe9, 0x5a, 0x23, 0x25, 0xc9, 0xd2, 0x9c, 0x30, 0x0a, 0x99, 0xcf, 0x66, 0x4d, 0x4c, 0x72, 0x60, 0x59, 0xc8, 0x5a, 0xf2, 0x9f, 0xfe, 0xe5, 0xff, 0x8a, 0xe5, 0xec, 0x98, 0xb2, 0x4c, 0xe8, 0x74, 0x7c, 0x42, 0xaf, 0xdc, 0x28, 0xe6, 0x2f, 0xed, 0xec, 0xd0, 0xbb, 0x30, 0xf1, 0xa3, 0x0f, 0xbb, 0x1d, 0xbe, 0x77, 0xf6, 0x26, 0xd2, 0x33, 0xd7, 0xaa, 0x1f, 0xf8, 0xc6, 0x04, 0x65, 0xb5, 0x6a, 0xcc, 0xaf, 0x54, 0x2d, 0xb7, 0x12, 0x52, 0x52, 0x69, 0x8d, 0x02, 0x7c, 0xcc, 0xa2, 0x9f, 0x15, 0x39, 0x08, 0xe8, 0x76, 0xbb, 0x64, 0x79, 0xce, 0x7c, 0xb1, 0x30, 0xc5, 0xa0, 0x2e, 0xe8, 0x5e, 0xbd, 0x51, 0xf5, 0xec, 0x2c, 0x5d, 0x99, 0x35, 0x28, 0xea, 0x86, 0x68, 0x41, 0x4d, 0xc2, 0x92, 0x20, 0x24, 0xbe, 0xe7, 0x9b, 0xd7, 0xad, 0x34, 0xba, 0x2c, 0x19, 0x4f, 0x4c, 0x96, 0xf8, 0x7c, 0x71, 0x49, 0x5e, 0xe6, 0xe0, 0x69, 0x7a, 0x93, 0x3e, 0xab, 0x6c, 0x45, 0x47, 0x7a, 0x06, 0x2e, 0x17, 0x92, 0x6e, 0x18, 0xe1, 0x4b, 0x49, 0x99, 0xe7, 0xa8, 0x4a, 0x11, 0xf8, 0x3e, 0x9d, 0xb8, 0x47, 0x9e, 0x66, 0x08, 0x0d, 0xb1, 0x1f, 0xa0, 0xaa, 0x8a, 0x2a, 0xcb, 0xc9, 0x17, 0x2b, 0xe6, 0xd3, 0x4b, 0x63, 0x9c, 0x54, 0xaf, 0x57, 0x5a, 0x98, 0x8d, 0x87, 0x44, 0x10, 0xd4, 0x05, 0xbf, 0x13, 0x84, 0xac, 0x92, 0x95, 0xe9, 0x84, 0x85, 0x40, 0x49, 0x81, 0x96, 0x82, 0xb4, 0x2a, 0x90, 0x61, 0xc0, 0x7e, 0x77, 0x68, 0x42, 0x4a, 0xb0, 0xc4, 0x4a, 0x53, 0x80, 0x03, 0xcf, 0xe7, 0xff, 0xa3, 0xec, 0xcd, 0x62, 0x2d, 0x5d, 0xd3, 0xf3, 0xa0, 0xe7, 0x1b, 0xfe, 0x79, 0x8d, 0x7b, 0xae, 0xf1, 0xd4, 0xa9, 0xd3, 0xe7, 0x74, 0x3b, 0x56, 0x12, 0x9b, 0xc6, 0xc1, 0xc2, 0x21, 0x8e, 0x6c, 0x82, 0x04, 0x17, 0x60, 0x02, 0x17, 0x48, 0x58, 0x28, 0xe2, 0x02, 0x59, 0xdc, 0x80, 0xc0, 0xe2, 0x06, 0x59, 0x44, 0x5c, 0x21, 0xd4, 0x84, 0x2b, 0x22, 0x93, 0x28, 0xc1, 0x48, 0x06, 0x22, 0x84, 0xe3, 0x58, 0x44, 0x04, 0x93, 0x04, 0x62, 0x1c, 0x45, 0x10, 0xec, 0xb6, 0xdd, 0x96, 0xdb, 0x1d, 0x77, 0x9f, 0xa9, 0x4e, 0xd5, 0xde, 0xb5, 0x87, 0xb5, 0xd7, 0xf8, 0x8f, 0xdf, 0xc4, 0xc5, 0x37, 0xac, 0x7f, 0xad, 0xbd, 0xea, 0x74, 0xa7, 0xa4, 0xd2, 0x39, 0x55, 0xb5, 0x87, 0xb5, 0xff, 0xf5, 0xff, 0xdf, 0xfb, 0xbe, 0xcf, 0xfb, 0x0c, 0x14, 0x04, 0xb2, 0x6e, 0xf1, 0xf2, 0xf9, 0x0b, 0x50, 0x00, 0x8b, 0xfb, 0x7b, 0xe4, 0x69, 0x66, 0x57, 0x54, 0x55, 0x05, 0x1e, 0x45, 0xa8, 0xba, 0x16, 0x8d, 0x12, 0xd0, 0xc6, 0x60, 0x76, 0x7b, 0x87, 0x47, 0xa7, 0x67, 0x48, 0x18, 0x47, 0x57, 0x37, 0x30, 0x5a, 0x63, 0x9c, 0xe4, 0x68, 0x2a, 0xab, 0x73, 0xd7, 0x8c, 0x40, 0x73, 0x6a, 0x5d, 0xf3, 0x00, 0xe4, 0x71, 0x6a, 0x0b, 0x1e, 0x63, 0x96, 0xb3, 0x14, 0x59, 0xcf, 0x90, 0x75, 0x55, 0x62, 0xb1, 0x5e, 0xd9, 0x2c, 0xf7, 0x34, 0x81, 0x21, 0x06, 0x65, 0x67, 0x95, 0x08, 0x9a, 0xfa, 0x35, 0x07, 0x47, 0xa7, 0x25, 0x68, 0x64, 0xcf, 0x7b, 0x25, 0xa5, 0xb5, 0x95, 0xf5, 0x3c, 0x2d, 0xc7, 0xa5, 0xf0, 0xcd, 0x5c, 0x92, 0x24, 0x96, 0x34, 0x27, 0xb7, 0x9e, 0x27, 0x42, 0x08, 0x3c, 0x79, 0xfa, 0x1c, 0x17, 0x17, 0x17, 0xe0, 0x6e, 0xf2, 0xed, 0x1c, 0x92, 0x91, 0x24, 0x09, 0x64, 0x27, 0x02, 0xb1, 0xb7, 0x4f, 0x0a, 0xf7, 0xb5, 0xa3, 0xae, 0x6b, 0x90, 0x84, 0x05, 0xa8, 0x9f, 0xf4, 0xf7, 0xff, 0x61, 0x54, 0x77, 0x4d, 0x80, 0xda, 0xae, 0x22, 0xd1, 0x23, 0x05, 0x0a, 0xa5, 0xc0, 0x29, 0x85, 0x16, 0x06, 0x45, 0x92, 0x63, 0xb3, 0xdc, 0x80, 0x1a, 0x8d, 0xae, 0x93, 0xa0, 0x20, 0xe8, 0x64, 0x03, 0xa1, 0x25, 0xd2, 0x22, 0xc7, 0xe4, 0x68, 0x8c, 0xb4, 0xc8, 0x01, 0x06, 0x48, 0xa3, 0xd0, 0x3a, 0xd3, 0xa0, 0xb6, 0x6d, 0xd1, 0xb8, 0xb0, 0x21, 0x4b, 0xf8, 0x74, 0x1a, 0xbc, 0x7d, 0x4d, 0x79, 0xbf, 0x98, 0xf6, 0x8d, 0x56, 0xfa, 0x7a, 0xf4, 0xfe, 0x54, 0xdd, 0x27, 0xd3, 0xf9, 0x82, 0xd8, 0x87, 0x71, 0xfb, 0x0e, 0x67, 0x7d, 0xe8, 0x76, 0xff, 0xcf, 0xfb, 0xc1, 0x1e, 0x3e, 0x24, 0xc6, 0x43, 0x31, 0x7e, 0xff, 0xea, 0x1b, 0x01, 0x5f, 0xbc, 0x0f, 0x59, 0x8a, 0x7a, 0x32, 0x46, 0x7f, 0x77, 0xdf, 0x7f, 0xdd, 0x1e, 0xc6, 0xee, 0xbf, 0xfe, 0xfe, 0xd7, 0xf4, 0x7b, 0xdf, 0x3e, 0x1f, 0xc0, 0xef, 0x5e, 0x38, 0xe7, 0xdb, 0x98, 0xcc, 0x03, 0xce, 0x6a, 0xfe, 0xfa, 0x7d, 0x19, 0xda, 0x30, 0x99, 0x4e, 0x83, 0x94, 0xa2, 0xff, 0x7d, 0xf7, 0xbd, 0xe7, 0xfb, 0xd6, 0x93, 0x7d, 0x4e, 0x40, 0xd2, 0xdb, 0xc1, 0xf7, 0xaf, 0x7f, 0x1f, 0x61, 0xd9, 0x67, 0xc0, 0x1f, 0x8a, 0x9d, 0x3d, 0xe4, 0x72, 0xb7, 0x4f, 0x8e, 0xdb, 0xdf, 0xcd, 0x5b, 0x9d, 0xfb, 0xc3, 0x6b, 0xde, 0xff, 0x7c, 0xcf, 0xb0, 0xed, 0x4f, 0xed, 0x3b, 0x8a, 0x05, 0x63, 0x45, 0xb0, 0x5a, 0x2b, 0x7b, 0x2d, 0xb5, 0x02, 0xa8, 0x76, 0x8c, 0x5f, 0x0d, 0x18, 0x01, 0x4a, 0x34, 0x08, 0xd5, 0x80, 0x69, 0x21, 0x65, 0x85, 0xd5, 0xfa, 0x0e, 0xeb, 0xc5, 0x1c, 0x75, 0x5d, 0x63, 0x90, 0x6a, 0x50, 0x6e, 0x40, 0x3e, 0xbf, 0xf9, 0xbe, 0xa6, 0x30, 0x7d, 0xd9, 0xda, 0x67, 0xef, 0xbf, 0xc4, 0xe7, 0x7f, 0xe7, 0x57, 0x70, 0xf2, 0x68, 0x18, 0x12, 0xb0, 0x0c, 0x18, 0xca, 0x72, 0x85, 0xaa, 0xee, 0xf0, 0xdf, 0xff, 0x0f, 0x7f, 0xed, 0x9f, 0x6a, 0x97, 0xfe, 0x83, 0xc0, 0xf2, 0xbf, 0xff, 0xe9, 0x02, 0x20, 0x06, 0xbf, 0xf0, 0x1f, 0xfe, 0x07, 0x01, 0xa6, 0x9f, 0x0b, 0x8e, 0xbf, 0xfb, 0xf7, 0xfe, 0x36, 0x28, 0x05, 0xa2, 0x08, 0xa0, 0x54, 0x62, 0xb5, 0x5a, 0xe0, 0xcd, 0x9b, 0x16, 0xc6, 0x28, 0x88, 0x76, 0x8d, 0x2c, 0xcb, 0x90, 0xe7, 0x03, 0xc4, 0x71, 0x1a, 0x0e, 0x93, 0xb6, 0x6d, 0x70, 0x7b, 0x7b, 0x8b, 0x34, 0x8d, 0xd0, 0xb5, 0x56, 0xe3, 0x3c, 0x1e, 0x8f, 0x11, 0xf1, 0x04, 0xa2, 0x53, 0x88, 0xa3, 0x14, 0x93, 0xf1, 0x11, 0xfe, 0xe8, 0x8f, 0x3e, 0xc6, 0x7b, 0xef, 0x3d, 0xc5, 0x74, 0x3a, 0x45, 0x9e, 0xe7, 0x98, 0xdf, 0xff, 0xd3, 0x37, 0x27, 0x71, 0x9c, 0x60, 0xbd, 0x5e, 0xe3, 0xee, 0x6e, 0x81, 0xc1, 0x60, 0x16, 0xde, 0xd7, 0x67, 0xcf, 0x9e, 0xe1, 0xd1, 0x71, 0x16, 0xd4, 0x24, 0x09, 0x8f, 0x91, 0xe6, 0x09, 0xa4, 0x11, 0xe8, 0x44, 0x03, 0x1e, 0x45, 0xb8, 0xbc, 0xbc, 0xc4, 0xf1, 0xf1, 0x31, 0x8c, 0x21, 0xf8, 0xe2, 0xb3, 0x37, 0x68, 0x1a, 0x81, 0x41, 0x66, 0x7f, 0x16, 0x63, 0x0c, 0xde, 0xbe, 0x7d, 0x8b, 0x88, 0xb1, 0x30, 0xf1, 0x47, 0xcc, 0x3e, 0xe3, 0x5d, 0xd3, 0x60, 0xb3, 0x5e, 0xe3, 0x5f, 0xf9, 0xe9, 0x3f, 0x87, 0xef, 0xbe, 0xfe, 0x02, 0xff, 0xe0, 0xff, 0xfc, 0xfb, 0xb6, 0x08, 0x0c, 0x06, 0xf8, 0x93, 0xf1, 0xd6, 0xe9, 0xae, 0x1f, 0x1f, 0xab, 0xa4, 0x06, 0xa5, 0x56, 0xad, 0x21, 0xa5, 0x44, 0xdb, 0xb6, 0x3b, 0x46, 0x1e, 0x87, 0x43, 0x6b, 0xc6, 0xf6, 0x5c, 0xa9, 0x19, 0x9a, 0xae, 0x0d, 0xbe, 0xd9, 0xde, 0x41, 0xce, 0xc7, 0x7f, 0x7a, 0xb2, 0x93, 0x09, 0xcf, 0x4a, 0x6f, 0xd5, 0x48, 0xfb, 0x88, 0xa2, 0x6d, 0x90, 0xfd, 0xd3, 0x90, 0xe7, 0x39, 0xd2, 0x28, 0x06, 0x94, 0x86, 0xcc, 0x32, 0x98, 0xb6, 0xd9, 0x9e, 0x91, 0x84, 0xf6, 0x34, 0xce, 0x1a, 0xad, 0xd2, 0x0f, 0x64, 0xa7, 0xb5, 0x73, 0x0d, 0x0b, 0xe7, 0x90, 0x1b, 0x2e, 0x52, 0xce, 0x20, 0x29, 0xc3, 0x72, 0xb9, 0x44, 0x36, 0x1c, 0x80, 0xc5, 0x1c, 0x75, 0xd7, 0x40, 0x19, 0x63, 0x5f, 0xbf, 0x73, 0x93, 0x5b, 0x5e, 0xdf, 0xba, 0xa4, 0xaf, 0x18, 0x45, 0x9a, 0x05, 0x63, 0x2b, 0xbb, 0xe3, 0x85, 0x0d, 0xfe, 0xa0, 0x04, 0x8d, 0xe9, 0x1b, 0x54, 0x6d, 0xaf, 0xd9, 0x64, 0x3c, 0xde, 0x59, 0x2f, 0x0a, 0x21, 0x9c, 0xb2, 0x82, 0x38, 0x79, 0xa0, 0xcd, 0xc2, 0xf0, 0x2b, 0x13, 0x7f, 0x86, 0xdd, 0xcf, 0x66, 0x18, 0x8f, 0xc7, 0x58, 0x97, 0x16, 0xee, 0x4e, 0x8b, 0x1c, 0xca, 0x68, 0x48, 0xa5, 0x20, 0x9d, 0x6a, 0xc5, 0x9f, 0x6d, 0x52, 0x4a, 0x50, 0x7f, 0x5d, 0x39, 0x09, 0x2e, 0x7e, 0x69, 0x64, 0xdd, 0xd0, 0x3c, 0x2f, 0x23, 0x8a, 0x22, 0x74, 0xaa, 0x0b, 0xa1, 0x2c, 0x9c, 0x73, 0x54, 0x4e, 0x17, 0x4e, 0x41, 0x40, 0x1d, 0xd3, 0x5f, 0x2b, 0xe5, 0x9a, 0x5e, 0xfd, 0x20, 0xe9, 0x73, 0xdf, 0xa2, 0xfa, 0xf2, 0xf2, 0xd2, 0x2a, 0x71, 0x5c, 0x44, 0x2d, 0xf4, 0x16, 0xd5, 0x2d, 0xb2, 0x0c, 0x6d, 0xdb, 0xda, 0xa4, 0x39, 0x63, 0x70, 0x74, 0x74, 0x04, 0x63, 0x0c, 0x66, 0xb3, 0xd9, 0x76, 0xfa, 0xff, 0x7e, 0x56, 0xc6, 0x3d, 0x8b, 0xec, 0x7d, 0xff, 0x11, 0xa2, 0x0d, 0xe0, 0x42, 0x9c, 0x28, 0xb1, 0x67, 0xf2, 0x78, 0x3c, 0xc6, 0x78, 0x30, 0x46, 0x9a, 0xa6, 0x38, 0x3f, 0x3d, 0xc7, 0xdb, 0xab, 0xd7, 0xe1, 0x1e, 0x59, 0xaf, 0xd7, 0xa8, 0xeb, 0x1a, 0x52, 0x76, 0x3b, 0x19, 0x28, 0x71, 0x1c, 0xe3, 0xec, 0xec, 0x0c, 0xa3, 0x91, 0x25, 0xae, 0xf2, 0x2c, 0xcb, 0x1e, 0x4c, 0xe5, 0xfe, 0x83, 0xb3, 0x2c, 0xdb, 0x39, 0xc4, 0x7d, 0x01, 0xf4, 0x7f, 0xe7, 0x93, 0x87, 0xfc, 0x1b, 0xe3, 0x8b, 0x5d, 0xbf, 0x41, 0xd8, 0x2f, 0x1a, 0xfb, 0x05, 0xf0, 0x50, 0xee, 0x76, 0xbf, 0x20, 0xf6, 0x21, 0x24, 0xdf, 0x28, 0xf8, 0xd7, 0xd0, 0xca, 0x76, 0x27, 0x76, 0x6f, 0x7f, 0xc7, 0xb1, 0x5f, 0x4c, 0xf6, 0xc9, 0x79, 0x6d, 0x5b, 0xdb, 0x84, 0x2c, 0xf7, 0xf5, 0xf6, 0x9b, 0x15, 0x6f, 0x5c, 0xe3, 0x3b, 0x2b, 0xef, 0x8d, 0xec, 0x1b, 0x91, 0xb2, 0x5a, 0x3f, 0xb8, 0x6e, 0x87, 0x52, 0xc2, 0xf6, 0x77, 0xe9, 0xfd, 0xf4, 0xba, 0x7d, 0x85, 0x41, 0xbf, 0x99, 0xf1, 0x2e, 0x7e, 0xfd, 0x34, 0x3b, 0xdf, 0x4c, 0xf4, 0x1f, 0x8a, 0x3e, 0x1b, 0xf6, 0x90, 0x47, 0xc0, 0xa1, 0x00, 0x16, 0x5b, 0xa4, 0xe5, 0x03, 0xad, 0xfc, 0x7e, 0x4c, 0x6d, 0xff, 0x9a, 0xee, 0xf3, 0x1b, 0xde, 0x75, 0x60, 0xfa, 0xaf, 0x19, 0xf6, 0x45, 0x07, 0x94, 0x11, 0x00, 0x40, 0x34, 0x83, 0x86, 0x06, 0x85, 0x06, 0x20, 0x01, 0xaa, 0xc1, 0x88, 0x82, 0xa1, 0x16, 0xc9, 0x88, 0x88, 0x80, 0x90, 0x35, 0xca, 0x6a, 0x89, 0xa6, 0x5e, 0xa2, 0x69, 0xd7, 0x10, 0x5d, 0x05, 0xad, 0x3b, 0x44, 0x91, 0x86, 0xd2, 0x6d, 0x68, 0x9a, 0x7e, 0xd0, 0x62, 0x3e, 0xfe, 0xfa, 0x87, 0xf8, 0xed, 0xbf, 0xfb, 0x5b, 0x38, 0x39, 0xbd, 0xc0, 0xc9, 0x49, 0x16, 0x78, 0x22, 0xc7, 0xc7, 0x53, 0x30, 0x96, 0xa0, 0xaa, 0x3b, 0xfc, 0xc3, 0xdf, 0xfc, 0x7f, 0xf0, 0xe3, 0x3f, 0xf6, 0xa7, 0xf1, 0xc9, 0x57, 0xee, 0x78, 0xf1, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x27, 0x9f, 0x7c, 0xdf, 0xaf, 0xe9, 0xf7, 0xba, 0x08, 0x87, 0xb8, 0x8b, 0x04, 0x8d, 0x7a, 0x84, 0xd2, 0xc1, 0x31, 0xfe, 0x85, 0x3f, 0xf3, 0x15, 0x4b, 0xa2, 0xeb, 0xfd, 0xfa, 0xaf, 0xfe, 0xeb, 0x6f, 0x20, 0x4d, 0x29, 0x86, 0xc3, 0x18, 0xcf, 0x9e, 0x8e, 0x30, 0x1e, 0x25, 0x90, 0xb2, 0xc6, 0xdd, 0xec, 0x0e, 0xbf, 0xff, 0x7b, 0x1f, 0xe3, 0xe2, 0x22, 0xc6, 0x60, 0x30, 0x80, 0xd6, 0x80, 0x10, 0x73, 0xa4, 0x69, 0x8e, 0x24, 0xce, 0x42, 0x30, 0x85, 0x94, 0xf6, 0x61, 0x2f, 0xcb, 0x06, 0x75, 0xdd, 0xa1, 0x28, 0x0a, 0x27, 0x41, 0x8c, 0xc1, 0x79, 0x82, 0x3f, 0xfe, 0xc3, 0x3f, 0x64, 0xf7, 0x88, 0xab, 0xb5, 0x4b, 0x6b, 0xe2, 0x5f, 0x2a, 0x53, 0x3b, 0xf4, 0xab, 0xc8, 0x72, 0xc4, 0x4c, 0x81, 0xa1, 0x46, 0x9e, 0xa4, 0x28, 0xcb, 0x12, 0x9a, 0x4a, 0x4c, 0x47, 0x63, 0x6b, 0x5c, 0xa2, 0x14, 0x9a, 0xae, 0x86, 0x61, 0x1a, 0x52, 0x0b, 0xb4, 0xb2, 0x41, 0x59, 0xad, 0xa1, 0x8d, 0x41, 0x9e, 0xe7, 0x58, 0x2e, 0x97, 0xa8, 0xeb, 0x16, 0x83, 0xc1, 0x00, 0x69, 0xaa, 0xd1, 0xd5, 0x02, 0x51, 0x14, 0xe1, 0xf9, 0xf3, 0xe7, 0x78, 0xf5, 0xe6, 0x95, 0x9d, 0x50, 0xb4, 0xc6, 0x7a, 0xbd, 0x86, 0x68, 0x1d, 0xeb, 0xda, 0xa5, 0xd4, 0xfd, 0xde, 0x3f, 0xf9, 0x36, 0x4e, 0x4f, 0xcf, 0xf0, 0xef, 0xfc, 0xab, 0xff, 0x3a, 0xfe, 0xfe, 0x6f, 0xfc, 0x1d, 0x7b, 0x2f, 0xe5, 0x63, 0x90, 0xcf, 0x6f, 0x70, 0xf1, 0xfa, 0x6a, 0x27, 0x21, 0x4e, 0x69, 0xf5, 0x60, 0xb7, 0x69, 0xbc, 0x92, 0x84, 0x12, 0x37, 0x49, 0xbb, 0x49, 0xd5, 0x6e, 0x5c, 0xc3, 0x7d, 0xee, 0x35, 0xc7, 0x42, 0x08, 0xf0, 0x38, 0x0a, 0xc5, 0x94, 0x44, 0x7b, 0x0a, 0x16, 0x2f, 0xa7, 0x75, 0x3a, 0xf4, 0x56, 0x37, 0xa0, 0xa0, 0x76, 0x07, 0x4b, 0x00, 0x06, 0xeb, 0xe5, 0x0d, 0x65, 0x51, 0x14, 0xee, 0xa0, 0x6a, 0x2f, 0xd1, 0x65, 0x8c, 0xa1, 0x93, 0x1d, 0x54, 0x27, 0x5c, 0xe0, 0x8a, 0xc0, 0x70, 0x30, 0x40, 0x16, 0x27, 0x90, 0x4d, 0x6b, 0x89, 0x78, 0xae, 0x61, 0xe2, 0x71, 0x84, 0xd5, 0xa6, 0x09, 0xab, 0x03, 0x0f, 0xf3, 0xc7, 0x71, 0x8c, 0x94, 0x46, 0x68, 0x94, 0x35, 0x99, 0x61, 0x49, 0x0c, 0xcd, 0x08, 0x22, 0x13, 0x01, 0x3d, 0x55, 0xd1, 0x7e, 0x8e, 0x86, 0xcd, 0x3c, 0xb7, 0xd0, 0xb7, 0x0d, 0x13, 0xd1, 0xa8, 0x9b, 0x0e, 0xe0, 0x0c, 0x9a, 0xf7, 0xf7, 0xbd, 0xdb, 0x06, 0xbe, 0x69, 0x1a, 0x5c, 0x5f, 0x5f, 0x5b, 0xe8, 0x9c, 0x73, 0x5b, 0xb0, 0x61, 0x1c, 0x22, 0x40, 0xd0, 0x39, 0xfe, 0x95, 0xd2, 0x1a, 0xe3, 0xc1, 0x10, 0x5d, 0xd7, 0xa1, 0xc8, 0x73, 0x54, 0xa5, 0xcd, 0x9f, 0x87, 0x50, 0x18, 0x1f, 0x4d, 0xad, 0x87, 0x7e, 0x5d, 0x61, 0xb5, 0x5e, 0x83, 0x68, 0xfb, 0xfd, 0x55, 0x67, 0x77, 0xd4, 0x6d, 0xdb, 0x06, 0x7f, 0x79, 0x6f, 0x55, 0x3b, 0x1e, 0x8f, 0xa1, 0x85, 0x84, 0x90, 0x12, 0x9d, 0x70, 0xb2, 0xea, 0x38, 0x46, 0x1a, 0xa5, 0xe8, 0x5c, 0xd3, 0x40, 0x29, 0xc5, 0x6a, 0xb5, 0x0a, 0x0d, 0x4b, 0xb4, 0x17, 0xf4, 0xd4, 0x47, 0x74, 0xf7, 0x53, 0x26, 0xc3, 0xb9, 0x68, 0xac, 0xd1, 0x0c, 0xf1, 0x31, 0xdd, 0x9c, 0x86, 0x26, 0xaa, 0x9f, 0xf5, 0x71, 0x88, 0x43, 0x45, 0x29, 0x0d, 0x08, 0x4e, 0x38, 0x17, 0x41, 0x0e, 0x72, 0xaf, 0xfc, 0x4e, 0x7f, 0x47, 0x0d, 0xa4, 0x35, 0xd2, 0x22, 0x77, 0x9e, 0xf1, 0xdc, 0x26, 0xcd, 0x49, 0x83, 0x6a, 0x5d, 0xb9, 0x26, 0x87, 0xe2, 0xe4, 0xe4, 0x24, 0xc8, 0xd2, 0x8c, 0x51, 0x56, 0x5e, 0xd8, 0x35, 0x3b, 0xb9, 0x2b, 0x59, 0x96, 0xe1, 0xe8, 0xe8, 0x08, 0x4d, 0xd3, 0x60, 0xb1, 0x58, 0x80, 0x7b, 0x0d, 0x72, 0x08, 0x19, 0xd8, 0x63, 0x4a, 0xf6, 0x8b, 0x6a, 0x9f, 0x05, 0xba, 0x7f, 0x60, 0xf7, 0x0b, 0x5f, 0x3f, 0x36, 0xd4, 0x17, 0xa2, 0x7e, 0xf6, 0xf8, 0xf6, 0xc5, 0xa4, 0x0f, 0x76, 0xb7, 0xfb, 0x30, 0xfe, 0xfe, 0xe7, 0x79, 0x48, 0x9f, 0x73, 0x0e, 0x51, 0x89, 0x9d, 0xdd, 0x46, 0xbf, 0xf0, 0x1f, 0xca, 0x13, 0xdf, 0x77, 0x3b, 0xe3, 0xbc, 0x08, 0xbb, 0x87, 0x3e, 0x09, 0xcd, 0x37, 0x2e, 0xde, 0x12, 0xb6, 0x5f, 0x94, 0xfa, 0x44, 0x35, 0xc6, 0xe9, 0xc1, 0xbc, 0xf2, 0xfe, 0xcf, 0x7f, 0x88, 0xf8, 0xe7, 0x5f, 0xef, 0xbe, 0x71, 0x81, 0x6f, 0x8c, 0xfa, 0xb0, 0x90, 0x3f, 0x08, 0x0e, 0x31, 0xec, 0xfb, 0xb2, 0xc1, 0xfd, 0x00, 0x9d, 0x3e, 0x99, 0xe6, 0xa1, 0xc3, 0xdd, 0x61, 0x0f, 0xf6, 0x7d, 0x62, 0x5f, 0x5f, 0xc6, 0xb8, 0xcf, 0x07, 0x00, 0x80, 0xc4, 0x59, 0xdb, 0xbe, 0x4b, 0x9a, 0xb7, 0x4f, 0x6a, 0xec, 0x37, 0x5f, 0x36, 0x1c, 0xc1, 0x86, 0x8c, 0x68, 0x48, 0x50, 0x22, 0x01, 0x74, 0x30, 0xa6, 0x83, 0x36, 0x76, 0xad, 0x20, 0xc5, 0x1a, 0x6d, 0x57, 0x62, 0x53, 0xce, 0x1d, 0x81, 0x48, 0x22, 0x89, 0x38, 0x46, 0xc3, 0x01, 0x92, 0x24, 0x43, 0x5d, 0xdd, 0x80, 0x57, 0xec, 0x07, 0x2a, 0x4c, 0xbe, 0x98, 0x9f, 0xbc, 0xff, 0x75, 0xfc, 0xfa, 0xff, 0xf1, 0x9f, 0xe3, 0x87, 0x3f, 0x7a, 0x89, 0xa6, 0x69, 0x02, 0xf1, 0x49, 0x08, 0x81, 0xba, 0xda, 0x80, 0x33, 0xcb, 0x91, 0xf8, 0xc6, 0x5f, 0xfa, 0x06, 0xfe, 0xfd, 0x9f, 0xfb, 0x39, 0xbc, 0x7d, 0x7b, 0xf3, 0xe5, 0xc1, 0x27, 0x9b, 0x6a, 0x2f, 0x40, 0xe4, 0x26, 0x14, 0xfa, 0x50, 0xe4, 0x07, 0x0d, 0xde, 0xbc, 0xd9, 0x75, 0x87, 0xfb, 0xcb, 0xbf, 0xf8, 0x8b, 0xc8, 0x32, 0x8e, 0x8f, 0x3e, 0x3c, 0xc3, 0x7b, 0xcf, 0xa7, 0x18, 0x8f, 0x33, 0x30, 0x6e, 0xef, 0x09, 0xca, 0x34, 0xee, 0xee, 0xee, 0x91, 0x66, 0x09, 0xa2, 0x98, 0x83, 0x12, 0xe6, 0x0a, 0x62, 0x0e, 0xd1, 0x29, 0xb4, 0xad, 0x3d, 0xf8, 0x86, 0x03, 0xbb, 0x06, 0x7b, 0xfb, 0xf6, 0x2d, 0x5e, 0xbf, 0x5e, 0x61, 0x34, 0xaa, 0xf1, 0xfe, 0xfb, 0xef, 0x87, 0xac, 0x68, 0xee, 0x58, 0xb6, 0x3e, 0xe6, 0xf3, 0xea, 0x6a, 0xfe, 0x4e, 0x99, 0xda, 0xa1, 0x5f, 0xff, 0xef, 0xf5, 0x1f, 0x40, 0x29, 0x15, 0xa6, 0x13, 0xdf, 0xd0, 0x72, 0xce, 0x9d, 0x6e, 0x97, 0x07, 0x6d, 0xb3, 0xa6, 0x0a, 0xa0, 0x06, 0x42, 0x77, 0x61, 0x17, 0xed, 0xdd, 0xd7, 0x84, 0x50, 0x58, 0xcd, 0x17, 0x48, 0x12, 0x2b, 0x21, 0x53, 0xd2, 0xe0, 0xb3, 0xcf, 0x3e, 0x43, 0x9c, 0xc5, 0x88, 0x18, 0x43, 0x59, 0x96, 0x96, 0x3c, 0x57, 0x03, 0x59, 0x46, 0x10, 0xb1, 0x1c, 0x2f, 0x1e, 0xbf, 0xc0, 0x31, 0x8d, 0xf0, 0x6a, 0xb3, 0x42, 0x89, 0x1a, 0x3f, 0xfd, 0x93, 0xff, 0x32, 0xee, 0x3e, 0xfd, 0x6d, 0x2c, 0x7f, 0xfb, 0xbb, 0x3b, 0xbe, 0xf3, 0x6f, 0x9f, 0x3e, 0xc2, 0x3f, 0xfa, 0xee, 0x1f, 0x22, 0xe2, 0xd1, 0x56, 0x67, 0xec, 0x5c, 0xbf, 0xbc, 0xc7, 0xc6, 0x3e, 0x72, 0xd4, 0x47, 0x90, 0xa2, 0x28, 0xc2, 0xc0, 0x68, 0x48, 0x6d, 0xf7, 0x9d, 0x59, 0x91, 0x43, 0xb9, 0x82, 0xde, 0xa1, 0x7b, 0xa7, 0xcb, 0xa2, 0xbd, 0xb7, 0x35, 0x8c, 0x63, 0x7d, 0x73, 0x07, 0xb9, 0x13, 0xb3, 0x65, 0xad, 0xfb, 0xfb, 0xab, 0x69, 0xac, 0x9b, 0x9a, 0x5d, 0x87, 0x39, 0xe4, 0x8d, 0x33, 0x48, 0xa7, 0x1d, 0x16, 0x84, 0x42, 0xf4, 0xb8, 0x10, 0x42, 0x08, 0x2b, 0x9f, 0x8b, 0xf3, 0x2d, 0x5f, 0xa5, 0xed, 0xc2, 0x6e, 0xd8, 0x37, 0xfb, 0xc5, 0xb8, 0xc0, 0x7c, 0xbd, 0x82, 0x80, 0x46, 0x32, 0x2c, 0x40, 0x39, 0x0f, 0xd2, 0xc2, 0xe9, 0x74, 0x0a, 0x64, 0x5d, 0xf0, 0x00, 0xd8, 0x3a, 0x9b, 0x59, 0xa3, 0x26, 0x6b, 0xba, 0xb3, 0x8b, 0x0a, 0x50, 0x42, 0xb7, 0x7e, 0xfb, 0xce, 0x45, 0xaf, 0x5a, 0x6f, 0x30, 0x1a, 0x0e, 0x91, 0xe7, 0x39, 0xca, 0xb2, 0x84, 0x70, 0xee, 0x98, 0xad, 0x94, 0x80, 0x52, 0x18, 0xe6, 0x43, 0xa4, 0x71, 0x02, 0x2d, 0x24, 0x38, 0xb3, 0xd1, 0x9e, 0x8c, 0xb8, 0x41, 0xca, 0x21, 0x2e, 0x7e, 0x3a, 0x57, 0x4a, 0x41, 0xb8, 0xcc, 0xf9, 0xfe, 0x10, 0xe7, 0x35, 0xdf, 0x4d, 0x55, 0x07, 0x1e, 0xc8, 0xf2, 0x7e, 0x6e, 0xa5, 0x63, 0xa2, 0x81, 0x06, 0x30, 0x1c, 0x0e, 0x51, 0x0c, 0x73, 0xd4, 0x75, 0x8d, 0xaa, 0x2e, 0x21, 0x9d, 0x94, 0x93, 0x52, 0xbb, 0xe6, 0xe8, 0x17, 0x4b, 0xda, 0xab, 0x45, 0x87, 0x48, 0xcd, 0xfe, 0xcc, 0x9a, 0x4c, 0xac, 0x1d, 0x6e, 0xb9, 0x5e, 0xdb, 0x01, 0x36, 0xb1, 0xc3, 0x9d, 0x47, 0xa6, 0x95, 0x52, 0x21, 0xca, 0xd5, 0xcb, 0xd9, 0x3c, 0x07, 0xa8, 0xae, 0x6b, 0x20, 0x26, 0x07, 0xd5, 0x44, 0x0f, 0x95, 0x4f, 0xbb, 0xfc, 0x31, 0x8b, 0xb6, 0xd8, 0xfb, 0x43, 0x4a, 0x89, 0x61, 0x91, 0x42, 0x2a, 0x89, 0xa2, 0xc8, 0x21, 0x5d, 0x88, 0x4d, 0x3f, 0x27, 0xde, 0xdf, 0x6b, 0xfd, 0x1d, 0xbc, 0x47, 0xc2, 0xcb, 0xb2, 0xc4, 0x17, 0x5f, 0x7c, 0x61, 0xa5, 0xab, 0x52, 0x82, 0xf7, 0x09, 0x35, 0xef, 0xd2, 0x8b, 0xf7, 0xcd, 0x5c, 0xf6, 0x0b, 0x43, 0x9f, 0x08, 0xd7, 0x87, 0x68, 0x7d, 0x13, 0xd0, 0x27, 0xdb, 0x1d, 0x62, 0x8a, 0xf7, 0x9d, 0xc4, 0xfa, 0x92, 0x36, 0x29, 0x65, 0x30, 0x26, 0xe9, 0x4f, 0xa5, 0x7d, 0xc7, 0x26, 0x3f, 0x5d, 0xf5, 0x8b, 0x44, 0x1f, 0x9e, 0xf7, 0xf6, 0x8d, 0xfb, 0x93, 0xf2, 0xb6, 0x48, 0xaa, 0x9d, 0x86, 0xa0, 0x4f, 0x22, 0x6b, 0x9a, 0xe6, 0x01, 0x93, 0x7f, 0x7f, 0x15, 0x40, 0x08, 0x7d, 0x70, 0x5d, 0x7c, 0xe3, 0xe3, 0x61, 0xb2, 0xfd, 0x24, 0xb3, 0xfd, 0x8f, 0xdb, 0x0f, 0x82, 0xd9, 0xcf, 0x85, 0x3f, 0x64, 0x8f, 0x18, 0x90, 0x0a, 0xf7, 0xf9, 0xfd, 0x6b, 0xd7, 0x37, 0x19, 0xe8, 0x37, 0x6a, 0xfb, 0x13, 0xfb, 0x96, 0x8f, 0x89, 0x77, 0x76, 0xb1, 0x87, 0x32, 0xe0, 0xf7, 0x61, 0xf9, 0x43, 0x6e, 0x77, 0xef, 0x5a, 0x39, 0x3c, 0xd4, 0xec, 0x77, 0x20, 0x50, 0x30, 0xa6, 0x83, 0xd2, 0x35, 0x94, 0xa8, 0xa0, 0x55, 0x09, 0xa9, 0x2a, 0x28, 0xdd, 0xa1, 0x59, 0xdf, 0x82, 0x51, 0x0d, 0xce, 0x0c, 0xd2, 0x71, 0x82, 0x98, 0xe5, 0x60, 0x8c, 0x83, 0xbb, 0x09, 0x49, 0xc6, 0x0c, 0x03, 0x16, 0x7f, 0x69, 0x42, 0xda, 0x4c, 0x69, 0x4c, 0xbe, 0xf6, 0x21, 0x2e, 0xfe, 0xc5, 0x7f, 0x1e, 0xc5, 0xe4, 0x39, 0xae, 0x89, 0x0d, 0xc3, 0x28, 0x9b, 0x0d, 0xa2, 0x8c, 0xef, 0x44, 0x37, 0xce, 0xe7, 0x73, 0x14, 0x45, 0x0a, 0x21, 0x23, 0x54, 0x55, 0x87, 0x6a, 0xb3, 0x79, 0xe7, 0xd7, 0xbe, 0xb8, 0x38, 0xfb, 0xd2, 0x62, 0xdf, 0x2f, 0xf2, 0xfe, 0xff, 0x2f, 0x2e, 0xce, 0xf0, 0xad, 0x3f, 0xf8, 0x5d, 0xfc, 0xf6, 0x6f, 0xfd, 0x96, 0xf3, 0xc7, 0x27, 0xa8, 0xab, 0x06, 0x77, 0xb7, 0x57, 0xb8, 0x7c, 0xb3, 0x01, 0xe7, 0x14, 0xe7, 0xe7, 0xe7, 0x78, 0xf9, 0xe2, 0x3d, 0x7c, 0xf8, 0x95, 0x17, 0xf8, 0xa3, 0xef, 0xd9, 0xdd, 0x7a, 0x27, 0x3a, 0x28, 0xd5, 0xba, 0x62, 0xc5, 0xd0, 0x34, 0x56, 0x6a, 0x25, 0xc5, 0x1a, 0xd3, 0xe9, 0xd4, 0xd3, 0x24, 0x50, 0xd7, 0xc0, 0x66, 0x53, 0x81, 0x73, 0x7b, 0x4d, 0x06, 0x2c, 0x81, 0x34, 0x12, 0x44, 0x3b, 0xfe, 0x45, 0xd3, 0x02, 0xc5, 0x0f, 0x06, 0xb5, 0xff, 0xf9, 0x6f, 0xfd, 0x23, 0x5c, 0x5e, 0x5d, 0xe3, 0x8f, 0x7d, 0xed, 0x18, 0x93, 0xb1, 0x75, 0xa3, 0xbb, 0xbd, 0xbd, 0x75, 0xa6, 0x1f, 0x1c, 0x9f, 0x7c, 0xfc, 0x31, 0x18, 0xb1, 0xc9, 0x55, 0xeb, 0x72, 0x05, 0xc3, 0x34, 0x26, 0x47, 0x63, 0xc4, 0x59, 0x04, 0xe9, 0x98, 0xd7, 0x7e, 0xda, 0x11, 0x42, 0xd8, 0x08, 0xd7, 0x3c, 0x47, 0x96, 0x65, 0x68, 0x5c, 0x8a, 0xd8, 0x27, 0x9f, 0x7c, 0x81, 0x61, 0x11, 0x87, 0x66, 0x74, 0x30, 0xb0, 0x32, 0x23, 0xe8, 0x08, 0x5d, 0xb3, 0xbd, 0xf6, 0x55, 0xb9, 0xc6, 0xef, 0xdf, 0x2f, 0xf0, 0x72, 0x7a, 0x0a, 0x7c, 0x1d, 0x58, 0xdc, 0x2d, 0xf1, 0x2d, 0xf7, 0x6f, 0x7f, 0xf1, 0x37, 0x7e, 0x1d, 0x57, 0x77, 0x77, 0x78, 0xf9, 0x43, 0xe3, 0x07, 0x56, 0xcd, 0x86, 0xda, 0xc9, 0xb9, 0xff, 0xdb, 0xc0, 0x40, 0x3b, 0x16, 0xd5, 0xf5, 0xf5, 0xb5, 0x95, 0x26, 0xd1, 0xed, 0xb9, 0x93, 0x68, 0x0d, 0xed, 0x27, 0x74, 0x67, 0x60, 0x43, 0xf7, 0x48, 0x4f, 0x41, 0xad, 0x43, 0x34, 0xa8, 0xa6, 0x3e, 0x6a, 0xc6, 0xb9, 0x84, 0x51, 0x18, 0x4a, 0x61, 0x88, 0x86, 0x96, 0x0a, 0x9d, 0x83, 0x6d, 0x79, 0x34, 0x70, 0x76, 0xaf, 0x5b, 0x19, 0x98, 0x45, 0x5f, 0x34, 0x56, 0xab, 0x15, 0x4c, 0x8f, 0x7d, 0x2f, 0x94, 0xc2, 0xa6, 0x2a, 0x77, 0x9e, 0x4d, 0x21, 0x04, 0x22, 0x77, 0xb6, 0x71, 0x27, 0x77, 0x9a, 0xcf, 0xe7, 0x58, 0x96, 0x1b, 0xab, 0x45, 0x4f, 0x63, 0x70, 0xb7, 0x2f, 0xf6, 0x9c, 0x9f, 0xd5, 0xda, 0x7a, 0x14, 0x68, 0xa9, 0x90, 0x46, 0x56, 0xbb, 0x4d, 0x39, 0x03, 0xa7, 0xd6, 0x45, 0x2f, 0x8a, 0x00, 0xc3, 0x28, 0x14, 0xd1, 0xc1, 0x71, 0x0d, 0x66, 0x8b, 0xce, 0x8d, 0xc7, 0x63, 0x34, 0x65, 0x85, 0x38, 0x8e, 0x91, 0x39, 0x08, 0xba, 0xeb, 0xda, 0x70, 0x0d, 0x8a, 0x3c, 0x77, 0xef, 0xdb, 0x00, 0xf3, 0xbb, 0x19, 0x22, 0xce, 0x51, 0x6d, 0x4a, 0x10, 0x6d, 0x50, 0x55, 0x25, 0x36, 0x6d, 0x8d, 0xdb, 0xd9, 0x9d, 0x3d, 0xaf, 0x1c, 0x41, 0x4d, 0x0a, 0x01, 0x1a, 0xd9, 0xfc, 0x8c, 0x5a, 0x74, 0x0f, 0xa2, 0x95, 0x7d, 0x41, 0xaf, 0x6b, 0xbb, 0x7b, 0xef, 0xa4, 0xb4, 0x2b, 0x19, 0x17, 0x6e, 0x53, 0x77, 0x2d, 0x4a, 0x27, 0xa1, 0xf4, 0xb9, 0xe6, 0x9e, 0xef, 0x63, 0x5c, 0xda, 0xa2, 0x0f, 0x3f, 0xf1, 0x81, 0x3a, 0xd6, 0x79, 0xef, 0xa1, 0xf9, 0x99, 0x94, 0x56, 0x05, 0xa2, 0x84, 0xb0, 0xd9, 0x04, 0x0e, 0x35, 0x88, 0xa2, 0x08, 0xd4, 0x20, 0x38, 0xc3, 0xf9, 0x06, 0x64, 0x27, 0x58, 0x47, 0x4a, 0x10, 0xc3, 0x77, 0xa6, 0xf2, 0x2d, 0x42, 0x80, 0x70, 0x4e, 0x7b, 0x78, 0xfd, 0xa1, 0x21, 0x18, 0x90, 0x24, 0x71, 0xa8, 0x99, 0x36, 0x33, 0x40, 0x62, 0x36, 0x9b, 0xb9, 0xe6, 0x06, 0x78, 0xef, 0xf9, 0x71, 0x6f, 0xe5, 0xe1, 0x0d, 0xc0, 0x48, 0x18, 0x94, 0x19, 0xb3, 0x6b, 0x97, 0x2f, 0xbe, 0xb8, 0xc5, 0xd1, 0x51, 0x6e, 0x87, 0x51, 0xdf, 0x89, 0xf8, 0x49, 0x38, 0x8e, 0xe3, 0x07, 0x53, 0xa1, 0x27, 0xb9, 0xf9, 0x69, 0xfe, 0x50, 0xbe, 0x75, 0xbf, 0x98, 0xee, 0xc7, 0xd1, 0x6d, 0x9d, 0xae, 0xe8, 0xde, 0xf4, 0x8a, 0x9d, 0xe9, 0x72, 0xdf, 0xa9, 0xcc, 0x17, 0x84, 0x28, 0x8a, 0x6c, 0xe8, 0x85, 0xfb, 0xda, 0x7d, 0xb3, 0x9a, 0xfd, 0xfd, 0x71, 0xdf, 0x1d, 0x68, 0xe0, 0x32, 0x70, 0xfb, 0xaf, 0xb7, 0x5f, 0x2c, 0xbb, 0xae, 0x79, 0x20, 0xa1, 0xdb, 0xd7, 0xcf, 0xfb, 0xe2, 0xbc, 0xef, 0x49, 0x6e, 0x8c, 0x81, 0x90, 0xed, 0x41, 0x33, 0x97, 0x77, 0x4d, 0xc0, 0xfb, 0xfa, 0xf0, 0xbe, 0x71, 0xcf, 0xbe, 0xc6, 0xbf, 0xcf, 0xae, 0xdc, 0x77, 0x9d, 0xf3, 0xff, 0xef, 0x57, 0x1e, 0x7d, 0x59, 0xa0, 0x77, 0x7e, 0x92, 0x52, 0x06, 0x29, 0x43, 0x9f, 0xaf, 0xb0, 0xdb, 0xa4, 0x98, 0x77, 0x7a, 0xd5, 0xf7, 0x6f, 0xe2, 0x43, 0x05, 0xfc, 0x5d, 0x0e, 0x81, 0xfb, 0xa9, 0x7b, 0x87, 0x22, 0x5b, 0xb7, 0xff, 0xbe, 0x71, 0x84, 0xc1, 0x06, 0xa2, 0x5b, 0xa1, 0xed, 0x56, 0x10, 0x62, 0x0d, 0xa5, 0x6b, 0x18, 0x48, 0xe4, 0xcc, 0x12, 0x0b, 0xe3, 0x38, 0x42, 0xec, 0xf2, 0xaa, 0xa9, 0x21, 0x81, 0x7f, 0x97, 0xa5, 0x43, 0x2c, 0x97, 0xf5, 0x97, 0x26, 0xa4, 0x4d, 0xbe, 0xf6, 0x21, 0x3e, 0xf8, 0x37, 0xff, 0x2d, 0xb4, 0x45, 0x8a, 0x35, 0x86, 0xf8, 0xf5, 0xff, 0xe9, 0xaf, 0x80, 0x32, 0xa0, 0x18, 0xc6, 0x48, 0x12, 0x9b, 0x87, 0x7d, 0x7b, 0x7b, 0x8b, 0xe5, 0x72, 0x8d, 0xf1, 0x78, 0x88, 0xd3, 0xd3, 0x47, 0xf8, 0xfc, 0xd5, 0x3d, 0xba, 0x6e, 0x8e, 0x5f, 0xfa, 0xe5, 0x5f, 0xb6, 0xc5, 0xed, 0x67, 0xfe, 0xfc, 0x83, 0xaf, 0xfd, 0xfd, 0x26, 0xf7, 0xfd, 0x5f, 0x2f, 0x5f, 0xbe, 0xc4, 0xaf, 0xfd, 0xda, 0xff, 0x88, 0x4d, 0xb9, 0x81, 0x10, 0x1a, 0x9c, 0x33, 0x1c, 0x1d, 0xa5, 0x38, 0x3b, 0xcb, 0x70, 0x34, 0x8d, 0x10, 0xc7, 0x47, 0x88, 0xa2, 0x08, 0xd3, 0x23, 0xeb, 0x02, 0xd5, 0x75, 0x1d, 0xbe, 0xfe, 0xf5, 0x1f, 0xc5, 0x68, 0x34, 0xc1, 0x62, 0xb1, 0xc0, 0xab, 0xcf, 0xbf, 0x00, 0xe7, 0x31, 0xc6, 0xe3, 0x29, 0x46, 0xc3, 0x0a, 0x6f, 0xdf, 0xbe, 0xc5, 0xb7, 0xff, 0xe0, 0x16, 0x4a, 0x09, 0x14, 0x45, 0x81, 0x67, 0xcf, 0x86, 0x10, 0x42, 0x60, 0xb9, 0x9c, 0xa3, 0x69, 0x2a, 0x4c, 0x26, 0x13, 0xdc, 0xdd, 0x55, 0x68, 0x5b, 0x0b, 0xe5, 0x0a, 0x21, 0x20, 0x24, 0x07, 0x8e, 0x7f, 0x00, 0x1f, 0xf7, 0x1f, 0xf9, 0x00, 0xdf, 0xfd, 0xd5, 0xff, 0x05, 0x83, 0x82, 0xef, 0x1c, 0xb0, 0xb3, 0xd9, 0x0c, 0xd3, 0xe9, 0x14, 0xc3, 0xa1, 0xd5, 0xc7, 0x8e, 0x5d, 0x4e, 0xb5, 0xd7, 0x26, 0x47, 0x51, 0x64, 0x9f, 0x39, 0xa8, 0xa0, 0xc5, 0xf5, 0x93, 0xcd, 0x60, 0x30, 0x40, 0x5d, 0xd7, 0xf8, 0xf8, 0x8f, 0xae, 0x50, 0x6e, 0x80, 0xf1, 0x18, 0x18, 0x0c, 0x13, 0xc4, 0xee, 0x19, 0xf0, 0x3b, 0x74, 0xc6, 0x18, 0x3a, 0x21, 0x71, 0x79, 0x7f, 0x87, 0xb2, 0xaa, 0x77, 0xe4, 0x7d, 0x9f, 0xac, 0x14, 0x1e, 0x01, 0xf8, 0xca, 0x8f, 0xfd, 0x14, 0xee, 0x4e, 0x7e, 0x1b, 0x8b, 0xbb, 0x25, 0xbe, 0xfb, 0xf1, 0x25, 0x8a, 0x21, 0xb7, 0x13, 0x2b, 0x89, 0x02, 0x34, 0xec, 0xcf, 0x8e, 0x77, 0x35, 0x9e, 0xfd, 0x5f, 0x79, 0x9e, 0x23, 0xc9, 0x52, 0x68, 0xad, 0x51, 0x0c, 0x07, 0x20, 0xee, 0x39, 0xb9, 0x2f, 0xef, 0x77, 0x0f, 0xe1, 0x07, 0xd6, 0xc9, 0xbb, 0x72, 0xb6, 0xc0, 0x54, 0x77, 0xf7, 0x7a, 0x1c, 0x6f, 0x57, 0x63, 0x51, 0x64, 0x6d, 0x4f, 0x23, 0xe3, 0x50, 0x45, 0xf7, 0x1a, 0xe2, 0x38, 0x46, 0xc2, 0x23, 0xc8, 0xa6, 0x0d, 0x8d, 0xf8, 0x60, 0x38, 0xc4, 0xc9, 0xd9, 0x29, 0xbe, 0x78, 0x73, 0x1d, 0x9e, 0x97, 0x28, 0x8a, 0x90, 0xb8, 0xc2, 0x3a, 0x8c, 0x52, 0x10, 0x6d, 0x30, 0x5b, 0xce, 0x70, 0x3e, 0x38, 0x87, 0x66, 0x04, 0x8d, 0xb3, 0x76, 0x8d, 0xa2, 0x08, 0x4a, 0x29, 0x5c, 0x5d, 0x5d, 0x81, 0x4b, 0x97, 0x7a, 0xb9, 0xc7, 0x91, 0xb2, 0xe7, 0x9b, 0xc2, 0x30, 0x4e, 0xa0, 0x29, 0xb1, 0xd6, 0xb5, 0xda, 0x91, 0x59, 0x7b, 0xe7, 0x49, 0x96, 0x65, 0xa1, 0x48, 0x7a, 0xc5, 0x4d, 0x7f, 0xf5, 0xc8, 0xe3, 0x08, 0x77, 0x77, 0x33, 0xab, 0x22, 0x30, 0x1a, 0x31, 0x21, 0xb8, 0xbf, 0xbf, 0x07, 0x27, 0x14, 0x5a, 0x2a, 0x2c, 0xd7, 0xab, 0xe0, 0xc9, 0x3e, 0x1a, 0x8d, 0xb6, 0xe7, 0x99, 0xd2, 0x80, 0xb2, 0x36, 0xb6, 0xfb, 0x92, 0x66, 0x7f, 0xbf, 0x7a, 0xc8, 0x3f, 0x4d, 0x63, 0x8c, 0xa7, 0x13, 0xa4, 0x69, 0x8a, 0x55, 0xb9, 0xc2, 0x62, 0xb1, 0x80, 0x10, 0x1d, 0xf2, 0x41, 0x11, 0xe2, 0xb7, 0x19, 0xb1, 0x84, 0x60, 0xa2, 0xad, 0xbb, 0x9d, 0x97, 0x6a, 0xfa, 0xfb, 0xc0, 0x73, 0x1d, 0xf6, 0x07, 0x8a, 0xae, 0xeb, 0x30, 0x1a, 0x8d, 0x90, 0x3b, 0xbd, 0x79, 0x5b, 0x37, 0xe1, 0x4c, 0x65, 0x94, 0x85, 0x69, 0x9d, 0x31, 0x86, 0xb3, 0xb3, 0x33, 0x18, 0x63, 0xf0, 0xe6, 0xcd, 0x1b, 0x08, 0x21, 0x2c, 0x7a, 0xf0, 0x7d, 0x20, 0xf7, 0x34, 0x4d, 0x6d, 0x2d, 0x92, 0x6a, 0x67, 0x7f, 0xae, 0xb5, 0xe5, 0x09, 0xb5, 0x6e, 0x68, 0x54, 0x4a, 0x59, 0xe2, 0x79, 0x5a, 0xe0, 0xf4, 0xe8, 0xd4, 0xf2, 0x40, 0x3a, 0x89, 0xe5, 0x62, 0xd6, 0x3b, 0xdf, 0xfd, 0xca, 0x75, 0x7b, 0x3f, 0x5a, 0xb3, 0x99, 0x18, 0x79, 0x6e, 0x1b, 0x93, 0xeb, 0xeb, 0xb9, 0x8d, 0x4f, 0xdd, 0x87, 0xd6, 0xfd, 0x1b, 0xef, 0x7d, 0x70, 0xfb, 0x7b, 0xf2, 0xfe, 0x04, 0xe8, 0x77, 0x79, 0xbe, 0xe0, 0xed, 0xef, 0x6f, 0x77, 0x7c, 0x81, 0xf7, 0xa0, 0x67, 0x2f, 0x17, 0xda, 0x4f, 0x60, 0xf3, 0x85, 0xa4, 0x5f, 0xa0, 0x03, 0x79, 0x62, 0xaf, 0xa8, 0x79, 0x1d, 0xe2, 0x7e, 0x96, 0xfb, 0x36, 0xfc, 0x23, 0x0e, 0x07, 0xd2, 0xfe, 0x2e, 0xc4, 0x36, 0x2f, 0xdb, 0xe8, 0xd8, 0xfe, 0xfe, 0x39, 0x84, 0x30, 0x38, 0x78, 0xc5, 0x3f, 0x94, 0xfb, 0x31, 0xb2, 0xce, 0x25, 0x71, 0x67, 0x3d, 0x71, 0xc8, 0x8e, 0xb5, 0x4f, 0xfe, 0xdb, 0x37, 0x6a, 0xf1, 0x37, 0x5c, 0x5f, 0x4e, 0x47, 0xc2, 0x81, 0x10, 0x1f, 0x9c, 0x8e, 0x43, 0xf1, 0xef, 0x7d, 0xbf, 0x5d, 0xfd, 0x2a, 0x3b, 0x68, 0xd8, 0x73, 0x08, 0x12, 0x3f, 0x64, 0x86, 0xd3, 0x9f, 0xf8, 0xf7, 0x13, 0xf6, 0xfc, 0xfb, 0x60, 0x77, 0x72, 0x87, 0xf3, 0xd2, 0x0f, 0x07, 0xd9, 0x3c, 0xcc, 0x3b, 0x6f, 0xba, 0x39, 0x88, 0x56, 0x10, 0xb2, 0x42, 0xdd, 0x2e, 0xd0, 0x36, 0x4b, 0x28, 0xdd, 0x20, 0x8e, 0x34, 0xe2, 0x88, 0x62, 0x54, 0x64, 0x81, 0xfd, 0xad, 0x85, 0x84, 0x91, 0x0a, 0x9c, 0xc6, 0x60, 0x34, 0x01, 0xa5, 0x0c, 0xd1, 0x20, 0xc3, 0x72, 0xd9, 0x1d, 0x84, 0xd7, 0x01, 0xc0, 0xbc, 0x77, 0x86, 0x0f, 0x7e, 0xec, 0xa7, 0xd0, 0x16, 0x29, 0x16, 0x15, 0xc1, 0xfc, 0xed, 0xef, 0xe2, 0x17, 0xff, 0xca, 0x7f, 0x8b, 0xe9, 0x34, 0x85, 0x46, 0x85, 0xa6, 0x49, 0x1c, 0xdc, 0xbb, 0x06, 0xa5, 0xb0, 0xe4, 0x92, 0xf1, 0x00, 0x47, 0x9b, 0x0a, 0xeb, 0x75, 0x84, 0xf5, 0x46, 0x41, 0x6b, 0xe0, 0xf5, 0xab, 0xdf, 0xc1, 0x9f, 0xf9, 0xb3, 0xff, 0x46, 0xf8, 0xfa, 0xfb, 0xbb, 0xf5, 0x8b, 0x8b, 0xb3, 0xb0, 0x3b, 0xaf, 0xaa, 0x4d, 0x28, 0xf6, 0xfe, 0xef, 0xff, 0xef, 0x7f, 0xf0, 0x2b, 0xf8, 0xb5, 0xff, 0xf5, 0x57, 0x91, 0x26, 0x1c, 0x6d, 0x67, 0x0d, 0x95, 0x2e, 0xce, 0x87, 0x78, 0xff, 0x45, 0x81, 0xd1, 0x90, 0x61, 0x3a, 0x1d, 0xe3, 0xf8, 0x64, 0x6a, 0xa5, 0x5b, 0xe5, 0x06, 0x97, 0x97, 0x6f, 0xf0, 0xe6, 0xcd, 0x1b, 0xfc, 0xf4, 0x9f, 0xfb, 0x29, 0x64, 0x59, 0x02, 0x21, 0x0a, 0x17, 0xc0, 0x62, 0xd3, 0xa0, 0xae, 0xae, 0xae, 0xf0, 0xf9, 0x67, 0x4b, 0x9c, 0x9d, 0x73, 0x4c, 0x9c, 0x8b, 0x9b, 0x47, 0x7b, 0x3c, 0x8c, 0x97, 0xa6, 0x31, 0x16, 0xf3, 0x3b, 0xbc, 0x78, 0xf1, 0x02, 0x79, 0x6e, 0x03, 0x49, 0x66, 0xb3, 0x12, 0xdf, 0x9a, 0x0e, 0x0f, 0x16, 0xb9, 0x3e, 0x0c, 0xff, 0x57, 0xff, 0xf7, 0x5f, 0xd9, 0x79, 0xef, 0x9a, 0xa6, 0xd9, 0x39, 0x64, 0xd7, 0xeb, 0x75, 0x38, 0x10, 0x83, 0x13, 0x18, 0xed, 0x35, 0x93, 0xaa, 0x43, 0x27, 0x6c, 0x24, 0xe5, 0xa3, 0x47, 0x8f, 0x70, 0x7e, 0xfe, 0x08, 0xb2, 0xd5, 0xa0, 0x94, 0xe3, 0x6b, 0x1f, 0x26, 0x50, 0xd2, 0xde, 0xa7, 0x65, 0x53, 0xa2, 0x2e, 0x4b, 0xcc, 0xe7, 0xf3, 0xc0, 0xbf, 0xb1, 0x68, 0x9e, 0xc6, 0xef, 0xfe, 0xce, 0xef, 0x60, 0x32, 0x9d, 0x3e, 0x78, 0x9d, 0xd5, 0xd9, 0x87, 0x28, 0x17, 0xaf, 0x70, 0xf2, 0xfe, 0xd7, 0xf1, 0x5f, 0xfc, 0x8d, 0xff, 0xac, 0x67, 0x95, 0xaa, 0x1f, 0xd8, 0x28, 0x6f, 0xbd, 0xf1, 0x49, 0xb0, 0x27, 0xf2, 0xa2, 0x54, 0xed, 0x7e, 0x2e, 0x29, 0x25, 0x8c, 0xdb, 0xb1, 0x37, 0x4d, 0x83, 0x4e, 0x0a, 0xc4, 0x7b, 0x70, 0x7d, 0xb8, 0xaf, 0xfd, 0x80, 0xe2, 0xe0, 0xdc, 0x4e, 0x89, 0x1d, 0x53, 0x11, 0x50, 0xab, 0x81, 0x36, 0xd4, 0x5a, 0x97, 0x31, 0xca, 0xac, 0xc4, 0x8c, 0x32, 0xc4, 0x51, 0x0c, 0x89, 0x5e, 0x3c, 0x35, 0x80, 0xf5, 0x7a, 0x8d, 0x2c, 0x4d, 0x91, 0x27, 0x76, 0xf5, 0xd8, 0x34, 0x8d, 0xd3, 0xf5, 0x53, 0xc4, 0x69, 0xb2, 0xe3, 0xcd, 0xee, 0xd1, 0x34, 0x29, 0x25, 0x48, 0x6c, 0x35, 0xe9, 0x49, 0x91, 0x80, 0x44, 0x1c, 0x9b, 0xb6, 0x46, 0xbb, 0xb8, 0x87, 0xe8, 0xad, 0x8f, 0xaa, 0xaa, 0xc2, 0xa3, 0xe9, 0xb1, 0x1d, 0xb4, 0x28, 0x43, 0x44, 0x19, 0x84, 0x56, 0x68, 0x45, 0x07, 0x69, 0x6c, 0xf6, 0x3a, 0xc8, 0x16, 0x6a, 0x67, 0x8c, 0x81, 0x3b, 0xbe, 0x81, 0xff, 0x99, 0xbc, 0xe7, 0xbd, 0x9d, 0xcc, 0xdd, 0x4a, 0x80, 0x6c, 0xcf, 0xe8, 0xa6, 0x69, 0x9c, 0x51, 0xd0, 0x1a, 0x31, 0xb7, 0x30, 0x74, 0xc2, 0x23, 0x9b, 0xbf, 0xde, 0x93, 0x3d, 0xfb, 0x35, 0x8d, 0x1f, 0x88, 0x88, 0x1b, 0x63, 0x7d, 0xf3, 0xd1, 0x39, 0x68, 0xd9, 0x7b, 0x9f, 0x08, 0x21, 0x40, 0xb4, 0x6d, 0x02, 0x73, 0x17, 0xf2, 0x13, 0xc7, 0x31, 0x62, 0x11, 0xdb, 0x3c, 0x73, 0x6d, 0x1b, 0x9b, 0x37, 0x57, 0x57, 0x56, 0xb2, 0x15, 0xc5, 0xa0, 0x3c, 0x02, 0x0e, 0x70, 0x7e, 0xc2, 0xc0, 0x46, 0x7b, 0xab, 0xcd, 0xde, 0x39, 0xd5, 0x34, 0x0d, 0x88, 0xd9, 0x12, 0xef, 0x02, 0xe7, 0x81, 0x93, 0x9d, 0xec, 0x8d, 0xfd, 0xc0, 0x31, 0x5b, 0x8b, 0xd4, 0x97, 0x42, 0xee, 0xdb, 0x38, 0x5a, 0xfd, 0xc0, 0x6d, 0xcf, 0x13, 0x1c, 0x39, 0xe7, 0x90, 0x42, 0x82, 0x13, 0x0b, 0x9f, 0x17, 0x2e, 0xb2, 0x56, 0xb8, 0xb5, 0x9a, 0x27, 0x8c, 0x76, 0x5d, 0xe3, 0xc2, 0x61, 0xe4, 0xce, 0x99, 0x7f, 0x74, 0x74, 0x84, 0xf3, 0xf3, 0x73, 0x6c, 0x7c, 0xea, 0xa0, 0x87, 0x52, 0xfa, 0x3b, 0x62, 0x5f, 0x10, 0x7c, 0x91, 0xeb, 0x17, 0xed, 0x7e, 0xe1, 0xef, 0x13, 0x9c, 0xfa, 0xb0, 0x7d, 0x7f, 0x0a, 0xde, 0x87, 0xb2, 0x7d, 0xe1, 0x52, 0x4a, 0x21, 0xcf, 0xb3, 0x6d, 0x71, 0x3c, 0x90, 0x46, 0xe6, 0xf7, 0x17, 0xbe, 0xe8, 0xb5, 0x6d, 0xbb, 0x03, 0x99, 0xfb, 0xa2, 0xdb, 0x77, 0x38, 0xf3, 0xfb, 0x42, 0xad, 0x75, 0xb8, 0x21, 0xfb, 0x2e, 0x4b, 0xfd, 0xdd, 0x76, 0x14, 0xf1, 0x07, 0x93, 0xb9, 0x87, 0xf2, 0xa5, 0x83, 0x7a, 0xfa, 0x96, 0x7f, 0xbe, 0x53, 0xf6, 0xc5, 0xae, 0x6e, 0xca, 0x07, 0xa1, 0x23, 0xfb, 0x7a, 0x78, 0xbf, 0xd3, 0x3f, 0xa4, 0xd1, 0xa6, 0xbd, 0x06, 0x22, 0xf8, 0x27, 0xbb, 0x07, 0xc0, 0xbb, 0x14, 0x1d, 0x62, 0x68, 0xfa, 0x49, 0xde, 0x4f, 0xd0, 0xfb, 0x05, 0xf3, 0x50, 0x03, 0x71, 0x08, 0xfa, 0x3f, 0x04, 0xb1, 0xef, 0x3b, 0xe5, 0xf5, 0xd9, 0xfe, 0xfd, 0xe6, 0x8b, 0x38, 0x63, 0x84, 0x2f, 0xf3, 0x09, 0xd8, 0x27, 0x2b, 0xee, 0x13, 0x24, 0x45, 0xbb, 0x01, 0x88, 0x84, 0x10, 0x0d, 0x44, 0x57, 0xa2, 0x13, 0x15, 0x38, 0xb5, 0x1d, 0x7d, 0x5e, 0xa4, 0x90, 0x9d, 0x70, 0x5a, 0x74, 0x97, 0x02, 0xe5, 0x0c, 0x68, 0x18, 0x61, 0xa0, 0x24, 0xc6, 0xdd, 0xdd, 0x5b, 0xb4, 0x8d, 0x78, 0x00, 0xb3, 0x7f, 0xf3, 0xfe, 0x1e, 0x7f, 0xe2, 0x47, 0xbf, 0x86, 0xaf, 0xfc, 0xd8, 0x4f, 0xe1, 0xdf, 0xfb, 0xf9, 0x7f, 0x17, 0x5f, 0xf9, 0xe8, 0x9f, 0xc3, 0x68, 0x90, 0xe3, 0x97, 0x7e, 0xf9, 0x97, 0x91, 0xe7, 0x11, 0x1e, 0x3d, 0x2e, 0x10, 0xc5, 0x0a, 0x50, 0xb6, 0x88, 0x4f, 0x26, 0x13, 0x70, 0xce, 0x31, 0x1c, 0x0e, 0x71, 0x7b, 0x7b, 0x8b, 0xd9, 0xdd, 0x15, 0xe2, 0x88, 0x20, 0x8a, 0x28, 0xda, 0x56, 0xe3, 0x1f, 0x7f, 0xf3, 0x53, 0xfc, 0xe3, 0x6f, 0x7e, 0x23, 0x7c, 0x8f, 0x9f, 0xff, 0x8f, 0x7e, 0x1e, 0x9f, 0x7c, 0xf2, 0x09, 0x5e, 0xbe, 0x7c, 0x89, 0xd7, 0xaf, 0xef, 0xf0, 0x97, 0x7f, 0xf1, 0x17, 0xc3, 0xbf, 0x7d, 0xf8, 0xc1, 0x63, 0x7c, 0xfd, 0xeb, 0xff, 0x12, 0x5e, 0x5f, 0x7d, 0x07, 0x7f, 0xf3, 0x6f, 0xfd, 0xcd, 0x9d, 0xd7, 0x56, 0x56, 0x02, 0x9c, 0x53, 0x5c, 0x5c, 0x8c, 0xf1, 0x23, 0x7f, 0xf2, 0x19, 0xde, 0x7b, 0x3a, 0xc6, 0x6c, 0x76, 0x0b, 0xd1, 0x35, 0x68, 0xeb, 0x06, 0x51, 0xc4, 0x71, 0x34, 0x99, 0xe2, 0x78, 0x7a, 0x84, 0x8b, 0xf3, 0x53, 0x5c, 0x5f, 0x5f, 0xe3, 0xf5, 0xeb, 0xd7, 0xb8, 0xbb, 0xbb, 0xc7, 0xfc, 0x7e, 0x01, 0x4a, 0x79, 0x88, 0xc5, 0x7d, 0xf1, 0xfe, 0x04, 0x5a, 0x51, 0xa4, 0x69, 0x82, 0xba, 0xae, 0x50, 0x96, 0x1a, 0x67, 0x67, 0x67, 0x78, 0xf6, 0xec, 0x29, 0xea, 0xba, 0xc6, 0x72, 0xb9, 0xc4, 0xc5, 0xc5, 0x85, 0x65, 0xb7, 0xcf, 0xe7, 0x56, 0xc7, 0xcb, 0xb7, 0xc5, 0xfc, 0xdf, 0xfe, 0xeb, 0xff, 0x5d, 0xf8, 0xff, 0xff, 0xe4, 0x67, 0xfe, 0x35, 0xe0, 0xe8, 0x08, 0xbf, 0x77, 0x7f, 0x8f, 0x5f, 0xfd, 0xfd, 0xff, 0x0f, 0xdf, 0xfd, 0xf8, 0x12, 0x8c, 0x11, 0x8c, 0x47, 0x39, 0x9e, 0x3f, 0x7d, 0x82, 0xd1, 0x30, 0x45, 0x1a, 0x27, 0x48, 0xa2, 0x18, 0x9b, 0xcd, 0x06, 0xf3, 0xd9, 0xfd, 0x4e, 0xe3, 0x98, 0xa6, 0x29, 0xc0, 0x4d, 0x90, 0xb7, 0xb6, 0x9d, 0x2d, 0xa0, 0xe3, 0xf1, 0x36, 0xe8, 0xc6, 0x7a, 0xcc, 0x47, 0xb8, 0xfc, 0xe2, 0x0a, 0x8b, 0xf9, 0x0a, 0x83, 0xc1, 0x20, 0x34, 0x0a, 0xde, 0x85, 0xae, 0x28, 0x0a, 0x0c, 0x87, 0x43, 0x34, 0x91, 0x0a, 0x06, 0x3c, 0xff, 0xe9, 0x2f, 0xfc, 0x42, 0xf8, 0x1a, 0x7f, 0xe1, 0x67, 0x7f, 0x16, 0x3f, 0xf1, 0xa7, 0x7f, 0x12, 0xff, 0xdb, 0x3f, 0xfc, 0x0d, 0x7c, 0xf3, 0x9b, 0xff, 0x17, 0xbe, 0xf5, 0xed, 0x37, 0x60, 0x8c, 0x20, 0x2f, 0x62, 0x14, 0x45, 0x1e, 0xdc, 0xe8, 0x3c, 0x94, 0x0a, 0xfd, 0xe5, 0x3c, 0x64, 0xab, 0x39, 0xd6, 0x3b, 0x87, 0xbb, 0x32, 0xda, 0x52, 0x34, 0xa5, 0x04, 0xe5, 0xdb, 0x02, 0xd0, 0x5f, 0x47, 0x7a, 0x52, 0x9c, 0xd0, 0x64, 0x57, 0x9f, 0xee, 0x9f, 0x23, 0x10, 0x6b, 0x1c, 0x22, 0x15, 0xb8, 0xe3, 0xe1, 0x30, 0xc6, 0xd0, 0x0a, 0xb7, 0xe7, 0xd4, 0x06, 0x84, 0x53, 0x8c, 0xc7, 0x63, 0xd4, 0x2e, 0xf9, 0x6d, 0x3a, 0x1c, 0xe1, 0xf1, 0xe3, 0xc7, 0x10, 0x42, 0x60, 0x5d, 0x96, 0xb8, 0xba, 0xba, 0x82, 0x94, 0x3d, 0x72, 0x97, 0xd6, 0x68, 0x9b, 0x06, 0x73, 0x43, 0xc0, 0xa5, 0x25, 0xdc, 0xe5, 0xa3, 0x1c, 0xcb, 0x72, 0x83, 0xe5, 0x66, 0x15, 0x10, 0x56, 0x29, 0xad, 0xea, 0xe1, 0xe2, 0xe2, 0x02, 0x05, 0xb7, 0x85, 0x94, 0x53, 0x06, 0x23, 0x15, 0x44, 0x6d, 0xd3, 0xc3, 0x28, 0x67, 0x48, 0xd2, 0x14, 0xed, 0xba, 0x05, 0x38, 0x83, 0xa0, 0xee, 0x9c, 0x31, 0x5b, 0x96, 0xbb, 0xd6, 0x1a, 0x9d, 0xb4, 0x09, 0x7f, 0xbe, 0x10, 0x5a, 0x08, 0xd9, 0xa5, 0x2b, 0x3a, 0x52, 0xe1, 0x70, 0x3c, 0x0a, 0x2b, 0xc0, 0xe5, 0x62, 0x89, 0xf7, 0x1e, 0x3f, 0xc5, 0x7a, 0xb9, 0x42, 0x5d, 0x96, 0x88, 0x06, 0x29, 0xf2, 0x3c, 0x47, 0x44, 0x59, 0x80, 0xaf, 0x53, 0x07, 0x69, 0x6b, 0xad, 0xb1, 0xd9, 0x58, 0xd7, 0x33, 0xe9, 0xbc, 0x13, 0x12, 0xe7, 0xe4, 0xd7, 0x34, 0x8d, 0x45, 0x2d, 0x8c, 0x82, 0x5a, 0x5b, 0xb2, 0x75, 0x9c, 0xa5, 0x56, 0xf2, 0xeb, 0xe2, 0xb3, 0x97, 0xcb, 0x65, 0x28, 0x76, 0x69, 0x9c, 0x80, 0x11, 0xeb, 0x81, 0x2e, 0xba, 0x2e, 0xa4, 0xa4, 0xf5, 0xcf, 0x65, 0x86, 0x2d, 0x4a, 0xac, 0x7b, 0x69, 0x98, 0x57, 0x57, 0x57, 0x68, 0xeb, 0x1a, 0x9c, 0x73, 0x8c, 0x06, 0xc3, 0x20, 0x7d, 0xf6, 0x2b, 0xdb, 0x24, 0xb1, 0xe6, 0x65, 0x77, 0x77, 0x77, 0xe1, 0xba, 0xf8, 0x66, 0x06, 0x9c, 0x7e, 0xe9, 0xfd, 0xf5, 0xc0, 0xc1, 0xb3, 0xc7, 0x43, 0xa2, 0x06, 0x68, 0x5c, 0xad, 0xf5, 0xbb, 0x7a, 0xd1, 0xca, 0xb0, 0x17, 0x17, 0x42, 0x60, 0x31, 0x5f, 0xe2, 0xe4, 0xe4, 0x64, 0xa7, 0x21, 0xf2, 0xdf, 0x9f, 0x52, 0x1b, 0xd8, 0xe2, 0x11, 0xf4, 0xf9, 0x7c, 0x8e, 0xf7, 0xde, 0x7b, 0x02, 0xf2, 0x93, 0x3f, 0xfd, 0x1f, 0x9b, 0xbe, 0x99, 0x88, 0xdf, 0x75, 0x07, 0x93, 0x03, 0x57, 0x4c, 0xd3, 0x34, 0x0d, 0x32, 0x28, 0x5f, 0x20, 0x0f, 0x1d, 0xf4, 0xfd, 0xee, 0x38, 0xe4, 0xc7, 0xee, 0x19, 0xa7, 0xf8, 0x3f, 0x0b, 0xdd, 0x6d, 0x19, 0x98, 0x3d, 0x68, 0xb8, 0x1f, 0xb9, 0xe7, 0x9b, 0x8d, 0x24, 0x49, 0xc2, 0xd7, 0xf3, 0x5d, 0x54, 0x12, 0xb1, 0x83, 0xd3, 0xa5, 0xff, 0x3b, 0xaf, 0x41, 0xf5, 0xff, 0x16, 0x1c, 0xaf, 0x28, 0x45, 0x51, 0x14, 0x00, 0x67, 0xc1, 0xe3, 0xd9, 0x4f, 0xf3, 0xbe, 0x6b, 0xdf, 0x67, 0xa7, 0xf7, 0x25, 0x63, 0xc1, 0x76, 0x10, 0x5b, 0x36, 0x69, 0x3f, 0x13, 0xde, 0x17, 0xe5, 0x43, 0x3f, 0xf3, 0x21, 0x89, 0x5b, 0x1f, 0xaa, 0xee, 0xaf, 0x24, 0x7c, 0xd1, 0xf6, 0xb0, 0x8c, 0x7f, 0x7f, 0xb6, 0x53, 0x3f, 0x79, 0xc0, 0xde, 0xef, 0x5f, 0x0f, 0xff, 0xb9, 0xc1, 0x3f, 0xb8, 0xd7, 0xb4, 0x29, 0xa5, 0x90, 0x91, 0x97, 0x00, 0x91, 0xa0, 0xcc, 0x80, 0x50, 0x09, 0xca, 0x04, 0x08, 0x15, 0x00, 0xb1, 0x7a, 0x78, 0x61, 0xba, 0x9e, 0xe9, 0x3c, 0x0d, 0x81, 0x34, 0x56, 0xca, 0x43, 0xa0, 0xa3, 0x0a, 0x46, 0x33, 0x18, 0xcd, 0xc1, 0x4c, 0x0c, 0x42, 0x22, 0x50, 0x78, 0x74, 0x40, 0x43, 0xb7, 0x56, 0x72, 0x66, 0x74, 0x0d, 0xa9, 0x4b, 0x70, 0x2a, 0xc1, 0x23, 0x02, 0xa5, 0x04, 0x44, 0xdb, 0xe1, 0xe6, 0xf6, 0x37, 0x43, 0x1e, 0xbd, 0x97, 0xb8, 0xf9, 0xc6, 0xcd, 0xff, 0xac, 0x7d, 0xa7, 0xa4, 0x10, 0xf4, 0xe1, 0x3a, 0x7d, 0xa9, 0x1a, 0xcc, 0xe7, 0x1b, 0x5c, 0xbd, 0x29, 0xd1, 0xd4, 0xea, 0x07, 0x82, 0xbe, 0x07, 0x83, 0x04, 0x3f, 0xf2, 0xcf, 0xbc, 0x0f, 0xa5, 0x5b, 0x64, 0x14, 0xf8, 0xde, 0xf7, 0x3e, 0x05, 0x21, 0xc0, 0xa3, 0x47, 0xe7, 0x28, 0xcb, 0x12, 0x97, 0x97, 0x1b, 0x8c, 0x46, 0xc0, 0xe3, 0x27, 0xef, 0xe1, 0xfa, 0xb6, 0xc1, 0xdb, 0xeb, 0x39, 0xaa, 0xaa, 0xc3, 0x81, 0xe0, 0x3f, 0xfc, 0x85, 0x9f, 0xfd, 0x59, 0x34, 0x1d, 0xc7, 0xdf, 0xf8, 0x9f, 0x7f, 0xe9, 0x07, 0xfa, 0xde, 0x51, 0xc4, 0xf0, 0xfc, 0xd9, 0x29, 0x7e, 0xfc, 0x4f, 0x7d, 0x15, 0x8f, 0x1f, 0x4d, 0x41, 0x78, 0x1d, 0xa6, 0xda, 0xfb, 0xfb, 0x7b, 0x5c, 0x5d, 0x5d, 0x41, 0x29, 0x85, 0xc9, 0x64, 0x82, 0xe1, 0x70, 0x88, 0xc5, 0x62, 0x81, 0x28, 0x8a, 0x70, 0x7a, 0x7a, 0x1a, 0xec, 0x51, 0xab, 0xaa, 0x0a, 0xd0, 0x64, 0x53, 0x9b, 0x9d, 0xe7, 0xd2, 0xc3, 0xa2, 0xfd, 0x26, 0x6c, 0x30, 0x18, 0x04, 0x42, 0x53, 0x55, 0x6b, 0xfc, 0x89, 0xec, 0xab, 0x00, 0x80, 0xff, 0xf2, 0x6f, 0xfd, 0xda, 0x3b, 0x5f, 0x27, 0x25, 0xc0, 0x64, 0x92, 0xe0, 0xfc, 0x2c, 0xc2, 0xcb, 0x97, 0x8f, 0x00, 0x58, 0x69, 0x12, 0xe7, 0x96, 0x8d, 0xdb, 0x75, 0x1d, 0x4e, 0x4e, 0x4e, 0xc0, 0x84, 0x46, 0xab, 0x24, 0xe6, 0xe5, 0x1a, 0x1b, 0x51, 0x23, 0x1e, 0xe4, 0x98, 0x9e, 0x4c, 0x41, 0x29, 0xb5, 0x70, 0xa0, 0x21, 0x48, 0xe3, 0x0c, 0x79, 0x94, 0xa0, 0x6b, 0x3a, 0x10, 0x4d, 0x30, 0x5b, 0x2c, 0xf1, 0xc5, 0xeb, 0x5b, 0xc4, 0x19, 0x83, 0xd2, 0x06, 0x2f, 0x9e, 0xbf, 0x17, 0x3c, 0xb4, 0x65, 0xd7, 0xd9, 0xd5, 0x1a, 0xcb, 0xf1, 0xe3, 0x7f, 0xea, 0x67, 0x00, 0x00, 0xdf, 0xf8, 0x4b, 0xdf, 0x78, 0xf7, 0xeb, 0xa4, 0xc0, 0x70, 0x12, 0xe3, 0xfc, 0xc5, 0x00, 0xf9, 0x84, 0x83, 0xb2, 0x5e, 0x20, 0x91, 0x36, 0xc8, 0x9d, 0x4c, 0x6b, 0xbd, 0x5c, 0x61, 0x58, 0x0c, 0xd0, 0xb6, 0x2d, 0xf2, 0xd1, 0x00, 0xab, 0xaa, 0x84, 0x82, 0x41, 0x1a, 0xc5, 0xe8, 0x9a, 0x16, 0x29, 0x8f, 0x30, 0x1d, 0x4f, 0xc0, 0x09, 0xc5, 0xaa, 0xdc, 0xa0, 0x15, 0x9d, 0x95, 0x07, 0x52, 0xcb, 0xea, 0xb6, 0x0e, 0x67, 0xd6, 0xe3, 0x81, 0x19, 0x20, 0x26, 0x76, 0xe2, 0x55, 0x44, 0xa0, 0x11, 0x1d, 0x94, 0x06, 0x48, 0x14, 0x83, 0x92, 0x38, 0x68, 0xee, 0x63, 0xc6, 0x21, 0xaa, 0x0d, 0x1e, 0x9d, 0x5f, 0x58, 0x35, 0x80, 0x16, 0xb8, 0xba, 0xb9, 0x46, 0x3e, 0x2e, 0x10, 0x0f, 0x72, 0x80, 0x51, 0x50, 0x63, 0xa1, 0x67, 0x08, 0x65, 0xe5, 0x7b, 0x49, 0x0a, 0xce, 0xed, 0xfa, 0xa0, 0xac, 0x2b, 0xb4, 0xc6, 0x92, 0xd7, 0xa4, 0x56, 0x6e, 0xd7, 0x2b, 0xc1, 0x34, 0x70, 0x34, 0x1a, 0x43, 0x34, 0xad, 0x65, 0x41, 0x0b, 0x81, 0x75, 0x53, 0x61, 0x59, 0x6e, 0x20, 0x94, 0x2d, 0x08, 0x31, 0x8f, 0xc0, 0x40, 0x30, 0xca, 0xe2, 0x1d, 0x18, 0x19, 0x94, 0x40, 0x18, 0x0d, 0xcd, 0x2c, 0xca, 0x70, 0x9c, 0x8f, 0xd1, 0xb9, 0x33, 0xd1, 0xb2, 0xbd, 0xdd, 0x99, 0xe1, 0xc3, 0x44, 0x62, 0xfb, 0x7e, 0xd3, 0xc8, 0xee, 0xe4, 0x7d, 0xd0, 0x0a, 0xe5, 0xfe, 0xbc, 0xd6, 0x41, 0x9f, 0xef, 0x8b, 0x94, 0x31, 0x06, 0x5a, 0x3a, 0xf9, 0xac, 0xd8, 0x0e, 0x43, 0xb1, 0x23, 0x2d, 0x1a, 0x57, 0x90, 0xa2, 0x28, 0x42, 0x4b, 0xba, 0x80, 0xa0, 0x7a, 0xd7, 0x46, 0xea, 0x52, 0xc7, 0x18, 0x63, 0x78, 0xf1, 0xf4, 0x99, 0x45, 0x08, 0xa4, 0x40, 0x27, 0xed, 0x99, 0xd0, 0x88, 0x06, 0xad, 0xbb, 0xcf, 0x4f, 0xc7, 0xc7, 0x4e, 0xe5, 0x51, 0xa2, 0x93, 0x6d, 0xd0, 0xd4, 0x1b, 0xa3, 0x76, 0x48, 0x91, 0x84, 0xb0, 0xf0, 0xda, 0xa0, 0xb7, 0xb0, 0x3b, 0x87, 0xc1, 0x68, 0x32, 0xc6, 0xfd, 0xfd, 0x3d, 0x0c, 0x21, 0x88, 0x92, 0x18, 0xad, 0x14, 0x88, 0x13, 0x8b, 0xdc, 0xf1, 0x38, 0x82, 0x51, 0xdb, 0x49, 0x3f, 0x18, 0xc7, 0x84, 0xf0, 0x17, 0x9b, 0x1f, 0xcf, 0x78, 0x1c, 0xd4, 0x01, 0xd6, 0x8a, 0xc3, 0x92, 0x5a, 0x06, 0x3c, 0x01, 0x77, 0xfe, 0xfa, 0x9d, 0xea, 0x2c, 0xbb, 0x9f, 0x00, 0x1d, 0x91, 0x50, 0x46, 0x23, 0x66, 0xb6, 0x81, 0x49, 0xe2, 0x18, 0x54, 0xd9, 0x06, 0xf0, 0x78, 0x7a, 0x82, 0xe1, 0x60, 0x80, 0xf5, 0x62, 0xb9, 0x25, 0x86, 0x6b, 0x85, 0xba, 0xb5, 0xec, 0x77, 0x9b, 0x20, 0x6d, 0xef, 0xf1, 0xd3, 0xf1, 0x33, 0x50, 0x18, 0x70, 0x4a, 0xd1, 0xd6, 0x15, 0xd6, 0x9b, 0x15, 0x78, 0xbf, 0x10, 0xef, 0x13, 0xd4, 0xfc, 0xee, 0x67, 0x3f, 0x28, 0xa4, 0x5f, 0x78, 0xf7, 0xa5, 0x5a, 0xfb, 0x44, 0xb2, 0xfd, 0x5d, 0x70, 0xbf, 0x00, 0x55, 0x65, 0xb9, 0xb3, 0x3f, 0xd9, 0x9f, 0xd2, 0x7d, 0xfe, 0x6c, 0x1f, 0x05, 0xf0, 0xac, 0xdd, 0x2c, 0xcb, 0x20, 0xda, 0xfa, 0x60, 0xd1, 0xec, 0x13, 0x2c, 0xfa, 0x90, 0xb9, 0xd7, 0xed, 0x79, 0x78, 0xb2, 0x7d, 0x07, 0x64, 0xdd, 0x6f, 0x00, 0xf6, 0x51, 0x83, 0xbe, 0xa5, 0x69, 0x9e, 0xe7, 0x3b, 0x7b, 0xa5, 0xbe, 0x6d, 0x6a, 0xff, 0xe7, 0xec, 0xaf, 0x0e, 0x76, 0xd8, 0x98, 0x3d, 0x97, 0xb9, 0x7d, 0x27, 0xbb, 0x3e, 0x0c, 0xdf, 0xff, 0xf9, 0xfa, 0x9f, 0xe3, 0xbb, 0xf2, 0xfd, 0xaf, 0xbf, 0x1f, 0x96, 0xb3, 0x9f, 0x33, 0xef, 0x9b, 0x0f, 0xee, 0x0a, 0x37, 0xa1, 0xce, 0x27, 0x9d, 0xaa, 0x1e, 0xf3, 0x95, 0x80, 0xfa, 0x70, 0x06, 0x17, 0x96, 0x62, 0xb4, 0xff, 0x7a, 0xc4, 0xc6, 0xce, 0x2a, 0x1b, 0xbb, 0x48, 0x8c, 0x0d, 0xc5, 0xe1, 0xd4, 0x91, 0xf0, 0x5c, 0x31, 0xa6, 0x06, 0xe0, 0x54, 0x83, 0xc7, 0x06, 0x09, 0x61, 0x50, 0x5a, 0xa0, 0x2a, 0x17, 0xb8, 0x9b, 0x5d, 0xe3, 0xfe, 0xfe, 0x1e, 0xef, 0x3d, 0x29, 0x50, 0x96, 0x25, 0x66, 0xab, 0xdb, 0x60, 0x6d, 0xe9, 0xf5, 0xae, 0x3e, 0xd6, 0x77, 0x38, 0xb4, 0x53, 0xe5, 0x7a, 0xb1, 0x0c, 0x96, 0x87, 0xd6, 0xa5, 0xac, 0x06, 0x88, 0xb4, 0x70, 0x25, 0x6d, 0x00, 0x7c, 0xff, 0x82, 0xce, 0x39, 0xc5, 0x70, 0x98, 0xa1, 0x2e, 0x4b, 0x1c, 0x1d, 0x8d, 0x30, 0x48, 0x23, 0xbc, 0x78, 0xf1, 0x0c, 0x5d, 0x67, 0x99, 0xd9, 0xcb, 0xe5, 0x06, 0x9c, 0xdb, 0xc9, 0x72, 0x34, 0xcc, 0x11, 0xc7, 0x1c, 0xa3, 0x21, 0xc7, 0xb7, 0xff, 0xf0, 0x0a, 0x4d, 0xfb, 0xb0, 0xa2, 0xfb, 0x1d, 0xfb, 0x97, 0x6b, 0x51, 0x81, 0x28, 0xe2, 0x98, 0x8c, 0x0b, 0x4c, 0xa7, 0x03, 0x7c, 0xf8, 0xc1, 0x29, 0x8c, 0xae, 0x70, 0x79, 0x59, 0x62, 0x55, 0xde, 0x60, 0x38, 0x1c, 0x06, 0x89, 0xa4, 0x94, 0x12, 0x65, 0x59, 0x62, 0xb5, 0xda, 0x80, 0x31, 0x82, 0x0f, 0x3e, 0xf8, 0x20, 0x10, 0xf6, 0xfc, 0x3d, 0xd0, 0x97, 0x92, 0xfe, 0xd1, 0x3f, 0xb9, 0xc4, 0xb3, 0x67, 0x47, 0x96, 0x78, 0xb7, 0x5a, 0x21, 0x8a, 0x22, 0x5c, 0x5c, 0x5c, 0x40, 0x4a, 0x89, 0xcb, 0xcb, 0x4b, 0xdc, 0xdc, 0x6c, 0xf0, 0xf2, 0xe5, 0x05, 0x26, 0x93, 0x89, 0x8d, 0x0b, 0xdd, 0xac, 0xf1, 0xd7, 0x7f, 0xf3, 0xef, 0xe1, 0x6e, 0x56, 0x7e, 0xe9, 0x6b, 0x4e, 0x52, 0x06, 0xce, 0x5a, 0x8c, 0x46, 0xb9, 0x75, 0xe4, 0x73, 0x4d, 0xee, 0xd3, 0xa7, 0x4f, 0x71, 0x7c, 0x7c, 0x8c, 0xcb, 0xcb, 0x4b, 0x7c, 0xfa, 0xe9, 0xa7, 0x18, 0xc5, 0x19, 0x68, 0x1c, 0xe1, 0xf8, 0xf8, 0x18, 0x13, 0x0e, 0x94, 0xa2, 0x75, 0x89, 0x50, 0x2e, 0xcb, 0x5b, 0xc3, 0xa2, 0x03, 0x42, 0xa1, 0x6b, 0x3a, 0x4c, 0x86, 0x13, 0x8c, 0x46, 0x23, 0x1c, 0x1f, 0xb7, 0x58, 0x95, 0x1b, 0x3c, 0x7b, 0xf6, 0x0c, 0x69, 0x9e, 0x05, 0x42, 0x92, 0xe7, 0x95, 0x30, 0xc6, 0xf1, 0x57, 0xff, 0xda, 0x7f, 0xf3, 0xa5, 0xfc, 0x08, 0xff, 0x3a, 0xcf, 0x9f, 0xe4, 0x18, 0x4d, 0x63, 0x18, 0x86, 0x07, 0x36, 0xd3, 0x52, 0xc3, 0xed, 0x18, 0xf3, 0x10, 0x45, 0x5a, 0x55, 0x36, 0x7d, 0x2e, 0xc9, 0x52, 0x28, 0x21, 0xc3, 0xc7, 0x56, 0x55, 0x05, 0x28, 0x8d, 0xba, 0x6b, 0x41, 0xb9, 0x2d, 0x38, 0x9d, 0xb6, 0x81, 0x1a, 0x70, 0x16, 0xc9, 0x52, 0x29, 0x8b, 0xac, 0x13, 0x63, 0x73, 0x10, 0x88, 0x97, 0xd4, 0x5a, 0x7b, 0x4f, 0x02, 0x0a, 0xce, 0x09, 0x94, 0xd0, 0xa1, 0x88, 0xae, 0xd7, 0x6b, 0xbb, 0xdf, 0x1f, 0x64, 0xb8, 0xb8, 0xb8, 0x40, 0x2d, 0x1b, 0xe7, 0xcb, 0x2f, 0x91, 0xc5, 0x91, 0x45, 0xe9, 0x34, 0x42, 0x23, 0xeb, 0xdf, 0x67, 0xce, 0x39, 0x94, 0xa1, 0xb0, 0x8f, 0xda, 0x16, 0x15, 0x13, 0xa2, 0xc3, 0x7a, 0xbd, 0xc6, 0x66, 0xb9, 0xc2, 0x7c, 0x3e, 0x07, 0xe3, 0x1c, 0x86, 0x53, 0x28, 0x02, 0x30, 0xbe, 0x45, 0x03, 0x8d, 0xda, 0xfa, 0x6a, 0x78, 0xf9, 0x6b, 0x94, 0x38, 0xfe, 0x0f, 0xb1, 0xdf, 0xef, 0xf6, 0xe6, 0x06, 0x79, 0x9e, 0x63, 0x38, 0x1c, 0x22, 0xcb, 0x32, 0xd4, 0x65, 0xe5, 0x9c, 0x06, 0xed, 0xba, 0x0f, 0x11, 0x03, 0x1b, 0x0e, 0xed, 0x20, 0xc5, 0x28, 0x64, 0xb9, 0x71, 0x5e, 0xf9, 0xc4, 0xf1, 0x1e, 0x6c, 0xe1, 0xf5, 0xb2, 0x33, 0xe3, 0x0a, 0x39, 0xbc, 0xd7, 0x07, 0x23, 0x3b, 0x68, 0x6b, 0x96, 0x65, 0xd0, 0x6e, 0x68, 0x6a, 0x9a, 0x06, 0x3a, 0xde, 0x95, 0x2e, 0x5b, 0x34, 0x64, 0x5b, 0x27, 0x6e, 0x6e, 0x6e, 0xec, 0xdf, 0x53, 0x2b, 0xb1, 0x6d, 0x45, 0x07, 0xa1, 0x85, 0x75, 0x56, 0xcb, 0x32, 0x87, 0x3a, 0xf1, 0x1d, 0xbe, 0x96, 0x11, 0x12, 0x8d, 0xb0, 0xea, 0x82, 0xa2, 0x28, 0xec, 0xf7, 0x57, 0x26, 0xac, 0x4b, 0x68, 0x0f, 0xb9, 0x24, 0xae, 0x01, 0xca, 0xb2, 0x0c, 0x9d, 0x1b, 0x12, 0xbb, 0xae, 0xb3, 0x2b, 0x1a, 0xef, 0x2a, 0xd7, 0x93, 0x4b, 0xc3, 0xa3, 0xcb, 0x9d, 0x70, 0x48, 0x48, 0x64, 0x89, 0x96, 0xc6, 0x40, 0xfb, 0xd7, 0x60, 0x6c, 0xc8, 0x0c, 0xed, 0xf1, 0xc6, 0xc2, 0xaa, 0x56, 0x2b, 0xc0, 0xbd, 0x47, 0xc4, 0x68, 0x28, 0xd9, 0x97, 0x49, 0x33, 0xd0, 0x88, 0x6e, 0x8d, 0x70, 0x8a, 0x02, 0x6f, 0xde, 0xbc, 0xb1, 0xdf, 0xd7, 0xc5, 0x00, 0x47, 0x51, 0x04, 0xca, 0xad, 0xe7, 0xbe, 0xad, 0x2b, 0xc2, 0x2a, 0x2b, 0xd8, 0xd6, 0xae, 0x9d, 0x37, 0xcd, 0xc3, 0xa2, 0x78, 0x68, 0xff, 0x4b, 0x08, 0x20, 0xa5, 0x8b, 0x68, 0xe3, 0x1c, 0x51, 0xc4, 0x77, 0xe2, 0x55, 0xb7, 0x1f, 0xbb, 0x2d, 0xca, 0x5d, 0xd7, 0xb9, 0x29, 0x71, 0x1b, 0xcf, 0x69, 0xdf, 0x6f, 0x0d, 0x63, 0xec, 0x04, 0xdd, 0x97, 0x6d, 0xf5, 0xa1, 0x6a, 0x7f, 0x83, 0xef, 0x1a, 0x99, 0xa8, 0x70, 0xb3, 0x1f, 0xca, 0x14, 0x7f, 0x80, 0x00, 0x38, 0x92, 0x88, 0x9f, 0xea, 0x7d, 0xfa, 0x8e, 0x87, 0x51, 0x6a, 0x17, 0x54, 0xe0, 0x0b, 0xa3, 0xff, 0xb8, 0x3e, 0x24, 0xd7, 0x37, 0x9d, 0xe9, 0x33, 0xcc, 0x0f, 0xc1, 0xe1, 0xfd, 0x46, 0x62, 0x3f, 0x9d, 0xec, 0x50, 0x04, 0x6a, 0xff, 0x67, 0xd8, 0x87, 0xcd, 0xb5, 0x33, 0x3b, 0x38, 0x64, 0x28, 0xb3, 0xff, 0x7d, 0x0e, 0x79, 0xa9, 0xfb, 0xeb, 0x75, 0xc8, 0xad, 0x2f, 0x70, 0x1e, 0x4c, 0x0d, 0x03, 0xff, 0x35, 0xac, 0x0d, 0xa5, 0xcd, 0x80, 0x37, 0x2e, 0xb9, 0xca, 0x4b, 0x3f, 0x28, 0x8c, 0xb6, 0xc1, 0x09, 0x46, 0xf7, 0x0c, 0x16, 0x55, 0x8d, 0x98, 0xa7, 0x88, 0xa2, 0x14, 0x5a, 0x01, 0x5d, 0xdd, 0x41, 0xc8, 0xd6, 0x76, 0x8d, 0x9c, 0x23, 0xa2, 0x0a, 0xda, 0xb4, 0xd8, 0xac, 0xef, 0xb1, 0x5c, 0x5e, 0x63, 0xbd, 0xb9, 0x03, 0x23, 0x1a, 0x69, 0xc6, 0xf1, 0xe4, 0xf1, 0x08, 0xaf, 0xdf, 0x7c, 0x0b, 0x45, 0x91, 0x63, 0x7a, 0x34, 0x0e, 0x39, 0xde, 0xf6, 0x5a, 0xa5, 0x00, 0x86, 0x3b, 0x0f, 0xea, 0x69, 0x76, 0xbc, 0xb5, 0xc1, 0x4c, 0x38, 0x46, 0xe3, 0x53, 0x00, 0x1a, 0xf7, 0xf7, 0x6b, 0x00, 0xdf, 0xdf, 0xca, 0x94, 0x31, 0x82, 0xc1, 0x20, 0xc6, 0xf3, 0xe7, 0x27, 0x98, 0x4c, 0x72, 0xe4, 0x79, 0x86, 0xd9, 0xf5, 0x65, 0x78, 0x5f, 0xec, 0x61, 0x0a, 0x0c, 0x87, 0xf6, 0x90, 0xba, 0xbd, 0xbd, 0x41, 0x14, 0x53, 0xc0, 0x18, 0x4c, 0xa7, 0x39, 0xea, 0x46, 0x41, 0x0a, 0x89, 0xb6, 0x13, 0x50, 0x0a, 0x61, 0x62, 0xa7, 0x94, 0x20, 0x4b, 0x19, 0x38, 0x67, 0xd0, 0xda, 0xa0, 0xaa, 0x05, 0x94, 0x32, 0x60, 0x94, 0x20, 0x4d, 0x19, 0xf2, 0x3c, 0xc3, 0xd1, 0x74, 0x88, 0x67, 0x4f, 0xc7, 0xe0, 0xdc, 0x60, 0x38, 0xe4, 0x50, 0x4a, 0xe0, 0xfa, 0xfa, 0x1a, 0x9a, 0x34, 0x68, 0x5b, 0xcb, 0xb0, 0x2d, 0xcb, 0x12, 0xc3, 0xe1, 0x10, 0xa7, 0xa7, 0xe7, 0x36, 0x6b, 0x3b, 0x4d, 0x31, 0x74, 0x19, 0xe9, 0x9b, 0xcd, 0x06, 0x55, 0x55, 0x59, 0xff, 0xf1, 0xdc, 0x3e, 0x33, 0xc3, 0xe1, 0x18, 0x69, 0x62, 0x83, 0x27, 0xbc, 0x3c, 0xca, 0x23, 0x30, 0x83, 0xc1, 0x00, 0x1f, 0x7d, 0xf4, 0x11, 0x28, 0xfd, 0x1e, 0x96, 0xcb, 0x25, 0xee, 0xef, 0xef, 0x31, 0x1a, 0x8d, 0x60, 0xb4, 0x2d, 0x4a, 0x8c, 0x11, 0xe4, 0x79, 0x04, 0x29, 0x05, 0x8c, 0x21, 0xe8, 0x3a, 0x1d, 0x7e, 0x1e, 0xce, 0x6d, 0x9a, 0xd9, 0xf9, 0x19, 0x05, 0xa5, 0xc0, 0xdd, 0xdd, 0x5d, 0x70, 0x72, 0x9b, 0x4e, 0xad, 0x5b, 0xdd, 0x60, 0x30, 0xb0, 0xa4, 0xa0, 0xb6, 0x03, 0x85, 0xc1, 0x78, 0x3c, 0x44, 0x71, 0x34, 0x42, 0xd2, 0x54, 0x68, 0x6f, 0x2c, 0x51, 0x74, 0x38, 0x1c, 0x82, 0x49, 0x8d, 0xc9, 0x28, 0xc6, 0x28, 0x2b, 0xb0, 0x9c, 0x2f, 0xd1, 0x56, 0x76, 0x8a, 0x3a, 0x39, 0x39, 0x41, 0x36, 0x28, 0x70, 0x72, 0x66, 0x75, 0xb6, 0x6d, 0xd7, 0x40, 0xc1, 0xca, 0x86, 0x68, 0xc4, 0xac, 0x0b, 0x21, 0xb1, 0xef, 0x59, 0x92, 0x59, 0x27, 0x31, 0xa5, 0x34, 0xba, 0x46, 0x43, 0x29, 0x13, 0x7a, 0xcc, 0xac, 0xe0, 0xc8, 0x0a, 0x0e, 0x42, 0x11, 0x48, 0x78, 0x3b, 0x46, 0x7d, 0x5d, 0xb7, 0x45, 0x80, 0x22, 0x8b, 0xc0, 0x69, 0x0a, 0x88, 0x4e, 0x3b, 0x84, 0xcf, 0x11, 0xf1, 0x8c, 0xfd, 0xd8, 0xae, 0x6e, 0x50, 0x77, 0x2d, 0x98, 0x97, 0x63, 0xe6, 0x6c, 0xab, 0x67, 0x0f, 0xcf, 0xa7, 0xdb, 0xd9, 0x6b, 0x6b, 0x63, 0xca, 0x28, 0x83, 0x21, 0x14, 0x52, 0x03, 0x84, 0x58, 0x15, 0x02, 0x63, 0x04, 0xda, 0xd8, 0x35, 0xe2, 0xdd, 0xdd, 0x9d, 0x93, 0xf1, 0x0d, 0x91, 0x0d, 0x0a, 0xd4, 0xeb, 0xda, 0xaa, 0x35, 0xf8, 0xd6, 0x0c, 0x8b, 0xf4, 0x14, 0x2e, 0x7e, 0xcd, 0xc5, 0x18, 0x03, 0xd5, 0x04, 0x52, 0xab, 0x1d, 0xa6, 0x35, 0x73, 0x03, 0x89, 0x9f, 0xe4, 0x41, 0x08, 0x28, 0xa7, 0x3b, 0xa4, 0x57, 0x1f, 0xd8, 0xd2, 0xb6, 0x76, 0xff, 0xdd, 0xb6, 0xad, 0x7d, 0xe6, 0x99, 0x0d, 0x50, 0x51, 0xca, 0x32, 0xf9, 0x1b, 0x67, 0x56, 0x12, 0x45, 0x51, 0x98, 0xa0, 0x23, 0xca, 0x7a, 0x67, 0x27, 0x43, 0x9e, 0x65, 0xc8, 0xf2, 0xdc, 0x5a, 0xbb, 0x7a, 0x14, 0x91, 0x50, 0x28, 0xe8, 0x1d, 0x53, 0x2f, 0xff, 0x39, 0x42, 0x08, 0xeb, 0x24, 0x49, 0x29, 0x92, 0x28, 0x0b, 0xeb, 0x59, 0x29, 0xa5, 0x55, 0x3d, 0x78, 0x2b, 0x56, 0xa5, 0xa0, 0xd5, 0x43, 0x4b, 0x69, 0x1b, 0xa1, 0xbc, 0x5d, 0xdd, 0xad, 0xd7, 0x6b, 0x54, 0x6d, 0x03, 0xc6, 0x08, 0xd2, 0x3c, 0x43, 0xc2, 0x2d, 0x91, 0x75, 0xb9, 0x5e, 0x63, 0x73, 0x67, 0x21, 0xe9, 0x7c, 0x38, 0x00, 0x21, 0x26, 0xd8, 0xbb, 0x26, 0x3c, 0x42, 0x5a, 0xe4, 0x96, 0x18, 0xa9, 0x6c, 0x66, 0x07, 0x75, 0x4e, 0x9a, 0x84, 0x50, 0xdb, 0x78, 0x48, 0x89, 0x3c, 0xb3, 0x83, 0x21, 0xa5, 0x14, 0x65, 0x5d, 0x07, 0x7e, 0x81, 0x77, 0x3c, 0x2d, 0xeb, 0xca, 0xae, 0x4f, 0xf6, 0x24, 0x6f, 0xdb, 0x61, 0x8d, 0x5a, 0xfe, 0x05, 0x7a, 0x89, 0x71, 0x60, 0xce, 0xb1, 0x13, 0x20, 0x86, 0x04, 0xa4, 0x56, 0x68, 0x01, 0x2d, 0x0d, 0x40, 0x29, 0x94, 0x23, 0xb8, 0x45, 0x34, 0xee, 0xc5, 0xbf, 0x5a, 0x29, 0x5b, 0xdb, 0xb6, 0xa8, 0x18, 0x83, 0xe8, 0xba, 0xb0, 0xb2, 0xea, 0x94, 0x44, 0xd3, 0x39, 0xf5, 0x97, 0xb6, 0x96, 0xaf, 0x42, 0x08, 0xe8, 0x86, 0x5b, 0xd4, 0x86, 0x18, 0xc0, 0x68, 0x48, 0xd9, 0xd9, 0x1d, 0xfa, 0xbe, 0x0f, 0x7b, 0xdf, 0xda, 0xb5, 0x3f, 0x19, 0x1e, 0x9a, 0x34, 0x0f, 0xed, 0x60, 0xfb, 0x79, 0xe6, 0xfd, 0x0c, 0xf4, 0x7d, 0x6d, 0xf8, 0xbe, 0x29, 0xcb, 0xbe, 0x5f, 0xb9, 0x27, 0x4d, 0xec, 0x07, 0xa0, 0xf4, 0x43, 0x44, 0xfa, 0x45, 0x6c, 0xbf, 0x31, 0xd9, 0x67, 0x89, 0xf7, 0xdf, 0x0c, 0xb2, 0xa7, 0x55, 0xdc, 0x2f, 0x8e, 0xfd, 0xf8, 0xd8, 0x3e, 0xb1, 0xae, 0xdf, 0x80, 0x18, 0x2d, 0x77, 0x90, 0x8d, 0x7e, 0x13, 0xb4, 0x3f, 0xa5, 0xf7, 0xe1, 0xfa, 0x77, 0x69, 0xc3, 0x0f, 0x39, 0xae, 0xf5, 0x15, 0x08, 0xfd, 0x6b, 0xe8, 0x7f, 0xf6, 0x77, 0x5d, 0xff, 0x43, 0x84, 0xb8, 0x7d, 0xb3, 0x1b, 0xa9, 0x96, 0x8e, 0x74, 0x46, 0xdc, 0xfe, 0xcc, 0xc6, 0xcb, 0xfa, 0xf4, 0x1f, 0xea, 0xc7, 0x1e, 0x57, 0xc0, 0x8d, 0xb6, 0xfb, 0x5b, 0x1f, 0xab, 0x1d, 0x23, 0x06, 0x14, 0x81, 0xd4, 0x12, 0xd0, 0x06, 0x04, 0x12, 0x31, 0x33, 0xce, 0x41, 0xaf, 0x46, 0x59, 0xcd, 0xb0, 0x5c, 0xde, 0x63, 0xb3, 0xbe, 0x05, 0x48, 0x8b, 0xf1, 0x30, 0x42, 0x9a, 0x71, 0x48, 0x29, 0x50, 0x55, 0x77, 0x38, 0x3b, 0x3b, 0x0d, 0x7b, 0x30, 0x4f, 0xb6, 0xb2, 0x84, 0xae, 0x14, 0x83, 0xc1, 0x00, 0xc7, 0xc7, 0xc7, 0x21, 0x8c, 0x20, 0x8a, 0x22, 0x54, 0x55, 0x85, 0xbb, 0xbb, 0x3b, 0x18, 0x63, 0x6c, 0xc1, 0x60, 0x06, 0x84, 0x44, 0x18, 0x8d, 0x72, 0x30, 0xd6, 0xee, 0x34, 0x3a, 0x52, 0x2a, 0x28, 0x05, 0x24, 0x89, 0x25, 0x14, 0x65, 0x19, 0xc7, 0xc5, 0xc5, 0x08, 0xc3, 0x61, 0x84, 0xa3, 0xa3, 0x31, 0x3e, 0xfe, 0xf8, 0x63, 0x24, 0x8c, 0x86, 0xc3, 0xee, 0xd1, 0xa3, 0x47, 0xf8, 0xe0, 0x83, 0x3c, 0xc4, 0x2d, 0x6e, 0x36, 0x1b, 0x68, 0x23, 0xf0, 0xc5, 0x17, 0xaf, 0x71, 0x76, 0x1a, 0xe1, 0xf8, 0xf8, 0x11, 0x60, 0x80, 0xc5, 0xb2, 0xc4, 0x17, 0xaf, 0x17, 0xd8, 0x6c, 0x5a, 0x08, 0x69, 0x90, 0xa5, 0x1c, 0xcf, 0x9e, 0x16, 0x60, 0x44, 0xa1, 0x6e, 0x24, 0x6e, 0xef, 0x24, 0x94, 0x61, 0x38, 0x9e, 0x8e, 0xf0, 0xd1, 0x47, 0x8f, 0xf0, 0xec, 0xe9, 0x05, 0xa4, 0x14, 0x78, 0x7b, 0xf5, 0x05, 0xda, 0xa6, 0x05, 0x25, 0x03, 0x24, 0x59, 0x86, 0x3c, 0xcf, 0xb1, 0xa9, 0x3a, 0x6c, 0xd6, 0x15, 0xee, 0x6e, 0x4b, 0x70, 0x0e, 0x4c, 0x27, 0xc7, 0x61, 0x1f, 0xd6, 0x36, 0x02, 0xb3, 0xbb, 0x79, 0x80, 0x14, 0xe3, 0x38, 0xc6, 0x93, 0x27, 0x4f, 0xa0, 0x15, 0xa0, 0x1c, 0xbf, 0xe3, 0xe9, 0xd3, 0xa7, 0xa1, 0xc1, 0x6c, 0x9a, 0x06, 0xf7, 0xf7, 0xf7, 0x36, 0xf7, 0x5b, 0x29, 0x4c, 0xa7, 0x53, 0xbc, 0xff, 0xfe, 0xfb, 0xf8, 0xce, 0x77, 0xbe, 0x83, 0xeb, 0xeb, 0x6b, 0xcb, 0x52, 0xbf, 0x5f, 0x42, 0x2b, 0x85, 0x3c, 0x8b, 0xf0, 0x43, 0x5f, 0x3b, 0x03, 0xa3, 0x12, 0xb7, 0x77, 0x0b, 0xcc, 0xe7, 0x0a, 0x42, 0xb8, 0x09, 0x8f, 0x19, 0x3c, 0x7b, 0x3a, 0xc0, 0xf3, 0xe7, 0xa7, 0x10, 0xa2, 0x75, 0x8e, 0x74, 0x09, 0x8a, 0xa2, 0xc0, 0x66, 0xb3, 0xc6, 0x1f, 0xfe, 0xe1, 0xb7, 0x91, 0xe7, 0x39, 0x9e, 0x3e, 0x7d, 0x82, 0xa3, 0x7c, 0x84, 0x5a, 0x74, 0x40, 0xcc, 0xc1, 0xf2, 0x18, 0x9a, 0x53, 0x0c, 0x6b, 0xcb, 0x80, 0xef, 0xba, 0x0e, 0x29, 0xb1, 0xab, 0xa7, 0x47, 0x8f, 0x1e, 0x61, 0x3c, 0x1c, 0xe3, 0xcd, 0xab, 0x37, 0x30, 0x4e, 0xe6, 0x34, 0x18, 0x8f, 0xd0, 0x88, 0x06, 0xa2, 0x6b, 0xa1, 0xa1, 0x90, 0xe6, 0x89, 0x75, 0x3e, 0x24, 0xda, 0x6a, 0x95, 0x09, 0x90, 0x15, 0x11, 0xde, 0x7b, 0x7f, 0x8c, 0x38, 0x25, 0x68, 0x1b, 0x85, 0xdb, 0xb7, 0x35, 0x9a, 0xc6, 0x16, 0xbd, 0x28, 0x26, 0x78, 0xfc, 0xb4, 0x40, 0x9a, 0x73, 0x6b, 0xe5, 0x6a, 0x76, 0x95, 0x2a, 0x7e, 0x95, 0x26, 0xa5, 0x84, 0x50, 0x9d, 0xb5, 0x3a, 0xe6, 0x1c, 0x86, 0x11, 0x44, 0x46, 0xa3, 0x95, 0x02, 0x55, 0x27, 0x10, 0xf3, 0x08, 0xd4, 0xb1, 0x5b, 0xe3, 0x38, 0x46, 0x9c, 0xa5, 0x60, 0x2e, 0xb9, 0xac, 0x35, 0xc2, 0x1a, 0xba, 0x60, 0x2b, 0x43, 0xe2, 0x20, 0x20, 0xca, 0x12, 0x02, 0x79, 0xca, 0x41, 0x59, 0x64, 0x3d, 0xd4, 0x9d, 0x67, 0x3d, 0x67, 0x31, 0x22, 0xce, 0x11, 0xb1, 0x04, 0xcd, 0x6a, 0xbd, 0xe3, 0x73, 0x50, 0xb8, 0x62, 0x1b, 0x45, 0x11, 0x08, 0x67, 0x68, 0xaa, 0x12, 0x11, 0x65, 0xe0, 0xc6, 0xc5, 0x69, 0xea, 0xde, 0x10, 0x00, 0x03, 0x96, 0xe4, 0xa1, 0x48, 0x09, 0x21, 0x00, 0x6d, 0x10, 0xc1, 0x22, 0x94, 0x70, 0xc8, 0x8e, 0x01, 0x20, 0xa0, 0xd1, 0x48, 0xb1, 0x1d, 0x3a, 0xa8, 0x5f, 0xd3, 0x89, 0x1d, 0x44, 0xce, 0x7a, 0x80, 0xdb, 0xa7, 0x1b, 0xc6, 0xe0, 0xfc, 0xfc, 0xdc, 0xc9, 0xa5, 0xba, 0x50, 0x08, 0xa3, 0x34, 0x0a, 0x5e, 0xe4, 0xf7, 0xa5, 0x35, 0x6e, 0xe1, 0x42, 0xa0, 0x69, 0x1b, 0x88, 0xb6, 0x03, 0x71, 0x99, 0xf3, 0x46, 0x1a, 0x67, 0xed, 0xfb, 0x70, 0xb0, 0x41, 0x4f, 0xb1, 0xe3, 0xcf, 0x30, 0x8f, 0xc2, 0x50, 0xf7, 0xfe, 0x8f, 0xc7, 0x63, 0xcc, 0xeb, 0xc5, 0x43, 0xd9, 0x6b, 0xef, 0x3c, 0x63, 0x71, 0x04, 0xb4, 0x34, 0x34, 0x52, 0x9e, 0xcd, 0x4e, 0x41, 0xc0, 0x34, 0xf0, 0xc1, 0x07, 0x1f, 0x58, 0x72, 0x65, 0x59, 0x42, 0x41, 0x39, 0xaf, 0x86, 0x14, 0x8b, 0x85, 0x95, 0xa0, 0x7a, 0xff, 0x04, 0xc6, 0x6c, 0xc3, 0x12, 0x45, 0x11, 0xa0, 0x80, 0x46, 0xd8, 0x82, 0xb8, 0x51, 0x02, 0x91, 0xb3, 0x1f, 0xaf, 0xaa, 0xca, 0x7a, 0xd9, 0x6b, 0x05, 0xe5, 0xde, 0x23, 0x3f, 0xb8, 0xf9, 0xb5, 0x98, 0x57, 0x39, 0x50, 0x83, 0x9e, 0x35, 0x38, 0xdd, 0x51, 0x06, 0x28, 0xad, 0x20, 0x95, 0x70, 0xd9, 0xf4, 0xd6, 0x9f, 0x20, 0x4c, 0xcf, 0x30, 0x30, 0x8c, 0x42, 0x18, 0x5b, 0x9c, 0x63, 0x46, 0x76, 0xa4, 0xc5, 0x04, 0x36, 0x72, 0x5a, 0x49, 0xe9, 0x1a, 0x11, 0xc7, 0xc6, 0x77, 0x83, 0xb4, 0xf5, 0x3e, 0x61, 0x48, 0x5d, 0xc3, 0x41, 0x34, 0x81, 0x90, 0x2d, 0x5a, 0x21, 0x61, 0xb4, 0xb5, 0x18, 0xe7, 0xfd, 0x04, 0x32, 0x4a, 0x5d, 0x9c, 0xac, 0x4b, 0x2e, 0x8b, 0x22, 0xe6, 0xde, 0x2c, 0x69, 0x0f, 0x7b, 0x8a, 0xb0, 0x1f, 0x95, 0xb2, 0x73, 0xbe, 0xe5, 0xdb, 0xbc, 0x70, 0x9f, 0x62, 0xe6, 0xc3, 0x35, 0x92, 0x24, 0x0a, 0x56, 0x89, 0xf6, 0x63, 0xb5, 0x83, 0x74, 0xed, 0xf7, 0x92, 0xca, 0x1c, 0x94, 0x73, 0xed, 0x43, 0x67, 0xbe, 0x09, 0xd8, 0x0f, 0x83, 0xd1, 0xbd, 0x7d, 0x4c, 0xff, 0xc2, 0xf4, 0x0b, 0xba, 0x2f, 0x86, 0x7e, 0xa7, 0xe8, 0x27, 0x99, 0x2c, 0xcb, 0x90, 0xf4, 0x72, 0x8f, 0xf7, 0x8b, 0x5e, 0x48, 0x16, 0xea, 0x41, 0xd5, 0xfb, 0xe6, 0x12, 0xfb, 0xcc, 0xfd, 0xfd, 0x95, 0xc3, 0x21, 0x92, 0xe0, 0x7e, 0x23, 0xf3, 0x65, 0x90, 0xb9, 0x0f, 0x35, 0x11, 0xbd, 0x04, 0xa4, 0xbe, 0x6c, 0xb0, 0xaf, 0x1e, 0x38, 0x84, 0x10, 0xbc, 0x4b, 0x3f, 0x1e, 0xae, 0x2b, 0x5a, 0x18, 0x18, 0x97, 0x3a, 0x67, 0x65, 0x84, 0x46, 0x33, 0x9b, 0x29, 0x4f, 0x29, 0xb4, 0xde, 0x76, 0xcc, 0xc0, 0xf6, 0xc1, 0xf2, 0xf7, 0x48, 0xcc, 0x99, 0x63, 0x64, 0x76, 0x88, 0x22, 0x8e, 0x22, 0x8b, 0x40, 0xa8, 0x42, 0x59, 0xcd, 0xb1, 0x59, 0x2f, 0x50, 0x6d, 0x6e, 0x40, 0xa9, 0xc1, 0x68, 0x0c, 0xf0, 0x88, 0x83, 0xc0, 0x42, 0xdb, 0xaa, 0xeb, 0xc0, 0xa0, 0x91, 0x25, 0x39, 0xb4, 0x54, 0x68, 0xa5, 0x02, 0x67, 0x0c, 0xe7, 0xa7, 0x67, 0x41, 0x07, 0xca, 0x18, 0xc3, 0x7c, 0x3e, 0x0f, 0xe4, 0xc0, 0xd5, 0x62, 0x89, 0xb6, 0x6d, 0x31, 0x70, 0x31, 0x90, 0x52, 0x48, 0x9c, 0x9e, 0x9c, 0x00, 0x20, 0x28, 0xf2, 0x02, 0xc6, 0xd8, 0x43, 0xb3, 0x2c, 0x6d, 0xc0, 0x47, 0xdb, 0x36, 0x38, 0x3d, 0x3d, 0x73, 0x5e, 0xed, 0x1b, 0xe4, 0x79, 0x8e, 0xc1, 0x20, 0x05, 0xa3, 0x04, 0x4d, 0x5d, 0x43, 0x0a, 0x81, 0xf5, 0x62, 0x85, 0x9b, 0x9b, 0x16, 0x59, 0x06, 0xbc, 0x7c, 0xf9, 0x14, 0x05, 0xcd, 0x51, 0x56, 0xd6, 0x98, 0x23, 0x49, 0x63, 0xb4, 0xad, 0xc2, 0x8b, 0x17, 0xef, 0xe1, 0xf2, 0xf2, 0x12, 0x6d, 0xb3, 0xc2, 0x87, 0x1f, 0x7e, 0x88, 0xe1, 0x7c, 0x81, 0xc5, 0xfc, 0x06, 0x8c, 0x2a, 0xd4, 0x35, 0x45, 0x92, 0x10, 0x4c, 0xc6, 0x29, 0x8e, 0xa6, 0x03, 0x00, 0x14, 0x47, 0x47, 0xf7, 0xd0, 0xca, 0xe0, 0xfc, 0xe2, 0x0c, 0x3f, 0xfc, 0xc7, 0x3e, 0x42, 0x59, 0xae, 0x71, 0x77, 0xb7, 0x02, 0x63, 0x04, 0x9b, 0x4d, 0x8b, 0x6f, 0x7f, 0xfb, 0xdb, 0x48, 0x92, 0x04, 0xc3, 0xe1, 0x10, 0xcf, 0x9f, 0x3f, 0x0f, 0x91, 0x8e, 0x59, 0x66, 0x4d, 0x57, 0xaa, 0xaa, 0x0a, 0x32, 0xcd, 0xa2, 0x28, 0x30, 0x9b, 0xcd, 0x42, 0xa3, 0xb3, 0x5a, 0xad, 0x70, 0x79, 0x79, 0x89, 0xf9, 0xbc, 0x44, 0x1c, 0x03, 0x3f, 0xfa, 0xa3, 0xff, 0xac, 0x35, 0x10, 0xe9, 0x4d, 0xf1, 0xfe, 0x5e, 0x5c, 0x2c, 0x16, 0x90, 0x52, 0xe2, 0xc9, 0x93, 0x27, 0x56, 0x27, 0x3c, 0x9f, 0x43, 0x49, 0x81, 0xc9, 0x24, 0x07, 0x08, 0x81, 0x94, 0x25, 0x9e, 0xbd, 0x38, 0xc7, 0xb3, 0x67, 0x27, 0xd0, 0xc6, 0x46, 0xa1, 0x02, 0x00, 0x67, 0x14, 0xef, 0xbd, 0xf7, 0x18, 0x49, 0x12, 0xe1, 0xed, 0xdb, 0x1b, 0xc4, 0x71, 0x8c, 0xa2, 0x28, 0x70, 0x72, 0x72, 0x82, 0xaa, 0xb2, 0x72, 0xb9, 0xe5, 0x72, 0x69, 0xc9, 0x84, 0xe9, 0xc0, 0xa2, 0x1b, 0x5d, 0x87, 0xaa, 0x5e, 0xa3, 0x14, 0x5b, 0xdd, 0x6e, 0x55, 0x55, 0xe8, 0x94, 0xc1, 0xab, 0xcf, 0xbe, 0xc0, 0xcd, 0x9b, 0x2b, 0x64, 0x49, 0x06, 0xd5, 0x29, 0x44, 0x69, 0x66, 0x39, 0x1b, 0x9c, 0x61, 0x5e, 0xde, 0xdb, 0x03, 0x9c, 0x01, 0x51, 0x1a, 0x81, 0x52, 0x82, 0x4e, 0xb6, 0x60, 0x00, 0x8a, 0x61, 0x02, 0x02, 0x83, 0xac, 0x60, 0xe0, 0x91, 0x46, 0x96, 0xc7, 0xc8, 0x72, 0x8e, 0xce, 0xa5, 0x76, 0xa5, 0x69, 0x82, 0x34, 0x02, 0x10, 0x51, 0x74, 0x46, 0x85, 0x1d, 0x6c, 0x1f, 0xaa, 0xeb, 0xcf, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x1f, 0x09, 0xb3, 0xe9, 0x6e, 0x0d, 0xda, 0x4e, 0x60, 0x55, 0x59, 0xe2, 0x13, 0x38, 0x05, 0x75, 0xd9, 0xe0, 0x3e, 0xa7, 0xc0, 0x38, 0xe4, 0x25, 0xa2, 0x0c, 0x59, 0x51, 0x40, 0xc3, 0x32, 0xbc, 0x91, 0x20, 0x58, 0xa5, 0x02, 0x00, 0x65, 0xb6, 0xa0, 0x74, 0x4d, 0x8d, 0x7a, 0x53, 0x22, 0x35, 0x39, 0xe2, 0xcc, 0xee, 0x50, 0xc3, 0x73, 0x69, 0x24, 0x8c, 0x61, 0x20, 0xd4, 0x4e, 0xfd, 0x43, 0x67, 0xca, 0xc2, 0x23, 0x8a, 0x2c, 0xcf, 0x91, 0xe7, 0xb9, 0x45, 0x55, 0x44, 0x67, 0xd5, 0x09, 0x94, 0x21, 0x82, 0x9d, 0xe8, 0xbc, 0x21, 0x8b, 0x52, 0x0a, 0x9d, 0x14, 0xa8, 0x15, 0x76, 0xa6, 0xee, 0xae, 0x69, 0xd1, 0x08, 0x05, 0x66, 0x00, 0xd1, 0xb4, 0x18, 0x0e, 0x87, 0xa1, 0x88, 0x28, 0xa5, 0x60, 0x08, 0x1e, 0x84, 0x45, 0x79, 0x94, 0xd1, 0x53, 0x61, 0x34, 0x25, 0x60, 0x0e, 0x15, 0xa8, 0x36, 0xe5, 0x96, 0xe8, 0xab, 0x6d, 0xe3, 0xa8, 0xa5, 0x75, 0x08, 0x1d, 0x0c, 0x06, 0x96, 0x3d, 0x0e, 0xeb, 0x68, 0x27, 0x5b, 0x3f, 0xd0, 0xf0, 0x9e, 0x4a, 0xc8, 0x22, 0x88, 0xa6, 0x97, 0x8f, 0x11, 0x45, 0x51, 0x68, 0x6e, 0xda, 0xa6, 0xdd, 0x49, 0x5f, 0xb4, 0x72, 0x30, 0x9b, 0xba, 0x97, 0xe7, 0x39, 0x96, 0xed, 0xaa, 0x47, 0x5c, 0xdb, 0x6a, 0x10, 0xfc, 0x99, 0xea, 0x51, 0x29, 0x2b, 0x41, 0x6b, 0x21, 0x9a, 0x16, 0xad, 0xb0, 0xc4, 0xba, 0xe9, 0x78, 0x8c, 0xba, 0x6c, 0x10, 0x39, 0x13, 0xb0, 0xba, 0x29, 0xad, 0x81, 0x4f, 0x14, 0x61, 0x3c, 0x1e, 0xe3, 0xf8, 0xf8, 0x38, 0x20, 0xbc, 0xd4, 0x7b, 0x04, 0x10, 0xeb, 0x65, 0xcf, 0xdd, 0x9a, 0x40, 0x6b, 0x19, 0xd6, 0xaa, 0x7d, 0x6e, 0x4e, 0xd7, 0xab, 0x19, 0xde, 0x0e, 0x76, 0x1f, 0x89, 0xb6, 0xd7, 0x59, 0x5b, 0x8f, 0x79, 0x27, 0x03, 0xf4, 0x3b, 0x7a, 0x68, 0x03, 0x0a, 0x80, 0xc3, 0x36, 0xda, 0x8c, 0x31, 0x08, 0x2d, 0x82, 0x6b, 0xa1, 0x57, 0x30, 0xf5, 0xc9, 0xe5, 0x0c, 0x34, 0x34, 0x09, 0xad, 0xd6, 0x48, 0x78, 0x84, 0xb2, 0x2c, 0x9d, 0x9a, 0x6b, 0x57, 0x7d, 0xe4, 0xd3, 0xe2, 0x56, 0xeb, 0x05, 0x44, 0xdb, 0x21, 0xe1, 0x1c, 0x59, 0x96, 0x80, 0x90, 0x18, 0xbc, 0xe9, 0x25, 0x7e, 0xed, 0xef, 0x93, 0xb3, 0x2c, 0x0b, 0xf0, 0xc8, 0xbe, 0x46, 0xdb, 0x17, 0x99, 0x43, 0x1e, 0xde, 0xfb, 0xc4, 0xaf, 0x7d, 0x39, 0x59, 0x5f, 0xfb, 0xdd, 0x67, 0x54, 0xf7, 0xa7, 0xe6, 0x3e, 0xf3, 0xdd, 0x13, 0xa3, 0xf6, 0xe5, 0x6c, 0x7c, 0xcf, 0xf9, 0x6d, 0x1f, 0x7e, 0xee, 0x67, 0x72, 0x7b, 0xe8, 0xdd, 0xef, 0x93, 0x6c, 0x81, 0x57, 0x3b, 0xd3, 0xb4, 0xef, 0x66, 0xfd, 0x03, 0xb4, 0x2f, 0x69, 0xeb, 0x17, 0x76, 0xad, 0x35, 0x94, 0xec, 0x1e, 0x24, 0xa0, 0xf5, 0x27, 0x7c, 0xff, 0xb3, 0xec, 0xe7, 0xc4, 0xf7, 0x25, 0x60, 0x87, 0x3c, 0xce, 0xf7, 0xc3, 0x6f, 0xf6, 0x63, 0x6d, 0xb7, 0x1a, 0x6f, 0xf3, 0x20, 0x32, 0xb1, 0xcf, 0xea, 0x3f, 0x14, 0x05, 0xbb, 0xa3, 0xc5, 0x77, 0x9e, 0x84, 0x86, 0x58, 0xc2, 0x8c, 0x63, 0x5c, 0xc0, 0x80, 0x42, 0x1b, 0x06, 0x2d, 0xfb, 0x26, 0x34, 0xfe, 0x3d, 0x94, 0xf0, 0xf1, 0x46, 0x52, 0x34, 0xc8, 0x63, 0x0e, 0x9a, 0x72, 0x74, 0xa2, 0xc6, 0x72, 0x75, 0x83, 0x4d, 0x39, 0x43, 0xd7, 0x2e, 0x21, 0x65, 0x8b, 0x41, 0x41, 0xac, 0x11, 0x02, 0x53, 0xd0, 0xb2, 0x46, 0xdd, 0x56, 0xd0, 0x52, 0x38, 0x36, 0xf3, 0xd8, 0x85, 0x27, 0x6c, 0x03, 0x81, 0xa4, 0x14, 0x98, 0xcf, 0x37, 0x41, 0x65, 0x70, 0x76, 0x76, 0x86, 0xba, 0x2e, 0xdd, 0xcf, 0x42, 0x50, 0x14, 0x59, 0x20, 0x1c, 0x26, 0x49, 0x82, 0xd9, 0xfd, 0x35, 0xaa, 0xaa, 0x0a, 0x30, 0xf3, 0x74, 0x3a, 0xc5, 0xc9, 0xc9, 0x39, 0x08, 0xb9, 0x80, 0x31, 0x06, 0xd3, 0xe9, 0x14, 0x9f, 0x7d, 0xf6, 0x19, 0x2e, 0x2e, 0x9e, 0x06, 0xdf, 0xe9, 0xba, 0xae, 0xf1, 0xe6, 0xcd, 0x17, 0x18, 0x0e, 0x0b, 0x24, 0x11, 0x45, 0xd7, 0xdd, 0x60, 0x3c, 0x1e, 0xe3, 0xd1, 0xa3, 0x47, 0x50, 0x4a, 0xe1, 0xf2, 0xf2, 0x32, 0x7c, 0xee, 0x7a, 0xbd, 0x0c, 0x48, 0x01, 0x00, 0xdc, 0xdf, 0xdf, 0x63, 0xb3, 0xd9, 0x60, 0x34, 0x4a, 0x31, 0x1c, 0x12, 0x5c, 0x9c, 0x3f, 0x02, 0x08, 0x30, 0x28, 0x52, 0x8c, 0x46, 0x03, 0x14, 0x45, 0x81, 0xe7, 0xcf, 0x9f, 0x86, 0x67, 0x47, 0xca, 0x2e, 0xc8, 0x27, 0xfb, 0x96, 0xc1, 0xa3, 0xd1, 0x08, 0x8f, 0x1e, 0x3d, 0xc2, 0xa6, 0x5a, 0x41, 0x6b, 0x20, 0x49, 0x32, 0x18, 0x43, 0xf0, 0xf6, 0xed, 0x4d, 0x28, 0xde, 0x59, 0x56, 0xe0, 0xfe, 0x7e, 0x01, 0xad, 0x81, 0x93, 0x93, 0xb3, 0x80, 0x40, 0x45, 0x51, 0x82, 0xe7, 0xcf, 0xc7, 0x38, 0x3f, 0x3f, 0x47, 0x9a, 0xa6, 0x98, 0xcd, 0x66, 0xd8, 0x6c, 0x36, 0x81, 0x00, 0xe4, 0x3f, 0xce, 0x5f, 0x53, 0x7b, 0x4d, 0x4e, 0x5c, 0x66, 0x01, 0xc5, 0xa3, 0x47, 0xb1, 0x43, 0x78, 0x1a, 0x5c, 0x5d, 0x5d, 0x61, 0x3a, 0x9d, 0x62, 0x32, 0x99, 0xc0, 0xe8, 0x0a, 0x55, 0x55, 0x21, 0x49, 0x12, 0xac, 0x56, 0x79, 0xe0, 0x30, 0x70, 0x4e, 0x21, 0x44, 0x8b, 0xaa, 0xb2, 0xbe, 0xdc, 0xc7, 0xc7, 0x53, 0x17, 0x08, 0x51, 0xe1, 0xd3, 0x4f, 0x3f, 0x45, 0x3e, 0x1a, 0x82, 0x24, 0x11, 0x96, 0xf5, 0x1a, 0x9b, 0xae, 0x01, 0xe1, 0x5b, 0x82, 0x28, 0x57, 0x06, 0x55, 0xa5, 0xf0, 0xd9, 0xfc, 0x0e, 0x11, 0x03, 0x8a, 0x94, 0x23, 0x2d, 0x06, 0x20, 0x94, 0x23, 0x1b, 0x14, 0x10, 0xca, 0x43, 0xc1, 0x76, 0x20, 0x90, 0x46, 0x42, 0x68, 0x81, 0x62, 0x90, 0xe3, 0xc3, 0xaf, 0x9d, 0xd8, 0x20, 0x21, 0x08, 0x48, 0x37, 0xb1, 0xc7, 0x09, 0x40, 0xb9, 0x3f, 0x10, 0x09, 0x8c, 0x33, 0x42, 0xf1, 0xd3, 0xcf, 0x3e, 0x29, 0xb4, 0x69, 0x1a, 0x70, 0xce, 0x31, 0x3e, 0x3b, 0x43, 0x5d, 0xda, 0xfb, 0x64, 0x59, 0xae, 0xc1, 0x5c, 0x48, 0x89, 0x68, 0x5a, 0x50, 0x10, 0x94, 0xcb, 0x15, 0x56, 0x0b, 0x89, 0x3c, 0x01, 0x4e, 0xce, 0x8f, 0x01, 0x4a, 0xb0, 0x58, 0x2c, 0x30, 0x7d, 0x7c, 0x1c, 0x26, 0xce, 0x70, 0x76, 0x11, 0x04, 0x26, 0xb6, 0xa1, 0x0c, 0x42, 0x1b, 0xa4, 0x19, 0xc0, 0xb3, 0x24, 0xc0, 0xe0, 0x52, 0x76, 0x80, 0xdb, 0x43, 0xe7, 0xa9, 0xf7, 0x3b, 0x6f, 0x50, 0x36, 0xb5, 0xb5, 0x37, 0x75, 0x8d, 0xfe, 0x7a, 0xbd, 0x0e, 0x05, 0x9d, 0xf4, 0x0a, 0x8f, 0x65, 0x98, 0x0b, 0x68, 0x6e, 0x8d, 0x60, 0xfc, 0xd0, 0x22, 0x3b, 0x01, 0xa9, 0xed, 0x4e, 0xbc, 0x71, 0xca, 0x00, 0xbf, 0x43, 0xf7, 0x01, 0x2d, 0x7e, 0x85, 0xa8, 0x85, 0x44, 0x1e, 0x6d, 0x13, 0x2d, 0x95, 0xb3, 0x7c, 0x55, 0x04, 0xd0, 0xcc, 0xae, 0x11, 0xb2, 0xd8, 0xde, 0x0b, 0x69, 0x14, 0x87, 0x02, 0xee, 0xcf, 0xe5, 0x88, 0x31, 0xb4, 0x8e, 0xf4, 0xab, 0x61, 0x9b, 0x9a, 0x4e, 0xd9, 0xa2, 0xc7, 0x19, 0x03, 0xe9, 0x67, 0x48, 0x78, 0x29, 0xab, 0x97, 0x86, 0xb9, 0x33, 0xdb, 0xc3, 0xd9, 0x69, 0x9a, 0x62, 0x34, 0x18, 0xda, 0x22, 0x26, 0x25, 0xaa, 0xaa, 0xc2, 0x7c, 0x3e, 0x3f, 0x58, 0x33, 0xb6, 0x91, 0xe6, 0x66, 0xc7, 0xf3, 0xc3, 0xef, 0xe7, 0xb5, 0x12, 0xf6, 0x3a, 0x19, 0x2b, 0x07, 0x4b, 0x12, 0xeb, 0x65, 0xb0, 0x5a, 0xdb, 0xd5, 0x95, 0x21, 0x04, 0x49, 0x6a, 0x03, 0xc5, 0x7c, 0xd1, 0xf4, 0xd2, 0x38, 0x2d, 0x25, 0x28, 0x58, 0x38, 0x1b, 0xd3, 0x34, 0x0e, 0xf0, 0x7a, 0xe3, 0xe2, 0x75, 0x59, 0x1c, 0xc1, 0x94, 0x65, 0x08, 0xed, 0xf1, 0xef, 0x09, 0xe7, 0x3c, 0xdc, 0x07, 0x46, 0x1b, 0xc7, 0x2f, 0x63, 0x30, 0x5a, 0xdb, 0x15, 0x06, 0x8c, 0x1b, 0x04, 0xbc, 0x22, 0x24, 0x42, 0x4e, 0x23, 0xbb, 0xc6, 0x71, 0x7e, 0xf0, 0x06, 0x80, 0x14, 0x02, 0x8a, 0x1b, 0x57, 0xcb, 0x6c, 0x8d, 0x51, 0x52, 0x42, 0x1b, 0x0d, 0x4d, 0xac, 0x5b, 0x9e, 0x14, 0x02, 0x83, 0x2c, 0xc7, 0x66, 0xb3, 0xb1, 0xa1, 0x60, 0x59, 0x1a, 0x82, 0x81, 0xa4, 0x12, 0x68, 0x1c, 0xe7, 0x47, 0xb4, 0x06, 0xb2, 0xeb, 0x6c, 0xc8, 0x96, 0xe3, 0x72, 0x70, 0x8f, 0xf1, 0xef, 0xfb, 0xaf, 0xef, 0x3b, 0xc4, 0xed, 0x93, 0xc3, 0xf6, 0x27, 0xce, 0xfd, 0x7d, 0x76, 0x9f, 0x54, 0xb6, 0x0f, 0x05, 0xfb, 0x22, 0x2c, 0x95, 0x7c, 0xb0, 0x43, 0xee, 0xcb, 0x2f, 0x7c, 0x78, 0x42, 0xbf, 0xc0, 0xed, 0x14, 0xb9, 0x9e, 0xec, 0xcb, 0xff, 0xee, 0x7b, 0x9a, 0x7b, 0xb8, 0xcb, 0x37, 0x05, 0x7d, 0x36, 0xfa, 0x56, 0xa6, 0x81, 0x07, 0xb6, 0xa4, 0xfe, 0xcf, 0x7d, 0x6b, 0xd6, 0xbe, 0x69, 0x8c, 0x7f, 0x7d, 0x8c, 0x62, 0xa7, 0xc9, 0x39, 0x04, 0xa7, 0xef, 0xff, 0x79, 0x3f, 0x22, 0xb5, 0x4f, 0xa8, 0x3b, 0x64, 0x52, 0xd3, 0x5f, 0x59, 0xec, 0x47, 0xd9, 0x1a, 0xa3, 0x1e, 0xe8, 0x1b, 0xfb, 0xef, 0xe5, 0xbb, 0x42, 0x6b, 0xb6, 0xd7, 0x9b, 0x6d, 0x19, 0xec, 0x86, 0x87, 0x49, 0xdd, 0x0a, 0xcc, 0x01, 0x62, 0x38, 0x8c, 0x43, 0x54, 0x6c, 0xaa, 0xa9, 0x04, 0x21, 0x1a, 0x20, 0x96, 0xf8, 0xc2, 0x94, 0xbd, 0x06, 0x20, 0x12, 0x75, 0x3d, 0xc3, 0xec, 0xee, 0x0b, 0x6c, 0xca, 0x5b, 0x44, 0x91, 0x40, 0x96, 0x47, 0x88, 0x23, 0x86, 0xf9, 0xfc, 0x1e, 0x9d, 0x68, 0xdc, 0x1e, 0xf9, 0x02, 0x69, 0x14, 0x63, 0xb5, 0xda, 0x60, 0x71, 0xbf, 0xc4, 0xf4, 0x68, 0xbc, 0xc3, 0xbe, 0x37, 0x4a, 0xa1, 0xc8, 0x32, 0x9c, 0x9d, 0x9c, 0x38, 0xcb, 0x50, 0x81, 0x9b, 0x9b, 0x1b, 0x08, 0x21, 0x30, 0x74, 0x26, 0x26, 0x77, 0x77, 0x77, 0x50, 0x4a, 0x61, 0x3c, 0x1e, 0x23, 0x4d, 0x63, 0x9c, 0x3d, 0x3b, 0x09, 0xd3, 0xfc, 0xeb, 0xcf, 0x5f, 0x41, 0x29, 0x0b, 0xbd, 0x15, 0x45, 0x81, 0xe5, 0xbd, 0xd5, 0x37, 0x9f, 0x7d, 0x70, 0x82, 0xd1, 0x68, 0x84, 0xd9, 0x6c, 0x86, 0xd5, 0x7c, 0x81, 0xa6, 0xac, 0x10, 0x51, 0xab, 0xff, 0xb6, 0xbb, 0xf5, 0x01, 0xa2, 0xc8, 0x3a, 0xb0, 0x75, 0x5d, 0xe3, 0xba, 0x75, 0x0b, 0xeb, 0xdf, 0xdd, 0xdd, 0x61, 0x32, 0x99, 0xe0, 0xc9, 0x93, 0x27, 0xa0, 0xd4, 0x3a, 0xb9, 0x7d, 0xf0, 0xc1, 0x07, 0x98, 0xcf, 0xe7, 0x88, 0xb8, 0x85, 0xec, 0x19, 0x73, 0x32, 0xc6, 0xba, 0x0e, 0x3b, 0xb3, 0xfb, 0xfb, 0x7b, 0x2c, 0x97, 0xcb, 0x10, 0x5f, 0x7a, 0x75, 0x75, 0x85, 0xb2, 0x6c, 0x30, 0x1a, 0x15, 0x41, 0xbd, 0xd1, 0x75, 0x36, 0xcd, 0x69, 0x32, 0x99, 0x06, 0x12, 0x28, 0x9c, 0x25, 0xe4, 0x6a, 0xb5, 0x46, 0x9e, 0xe7, 0x28, 0x8a, 0x41, 0x70, 0xe9, 0x5a, 0x2c, 0x16, 0x48, 0xd3, 0x0c, 0xc7, 0xc7, 0xc7, 0xc8, 0x32, 0x7b, 0x7d, 0x3c, 0x61, 0xcd, 0xa7, 0x01, 0xf6, 0x95, 0x1a, 0x16, 0x26, 0xdf, 0x84, 0xfb, 0x3f, 0xcb, 0xd2, 0x50, 0x70, 0x86, 0xc3, 0x01, 0xe2, 0x04, 0x68, 0xbb, 0x1a, 0x4d, 0x1b, 0x23, 0x49, 0x23, 0x28, 0x1d, 0xa1, 0xae, 0x4b, 0x2c, 0x57, 0x73, 0x48, 0x29, 0x31, 0x19, 0x1f, 0x61, 0x34, 0x1a, 0x61, 0xb5, 0x5a, 0xed, 0x20, 0x07, 0xde, 0x40, 0x26, 0x45, 0x8c, 0x74, 0x50, 0x40, 0x10, 0x03, 0x41, 0x35, 0x1a, 0x2d, 0x83, 0xbf, 0xb5, 0x9d, 0x0e, 0x13, 0x3c, 0x7e, 0x7c, 0x0c, 0x59, 0xb7, 0x68, 0xeb, 0x16, 0x09, 0x4f, 0xb6, 0x72, 0xa0, 0x3c, 0x03, 0x18, 0x81, 0xa1, 0x80, 0x82, 0x86, 0x32, 0x2a, 0x70, 0x70, 0x0c, 0x33, 0x20, 0x54, 0x83, 0x49, 0x0a, 0x4a, 0x53, 0x50, 0xc2, 0x50, 0xb7, 0x0d, 0x28, 0x65, 0xc8, 0xb2, 0xd4, 0x4a, 0x7a, 0x16, 0x2b, 0x74, 0x6d, 0x85, 0xa4, 0xc8, 0x91, 0x0c, 0xf2, 0x60, 0x1c, 0xd2, 0x7f, 0xee, 0x3c, 0x87, 0x27, 0xcf, 0xf3, 0x40, 0xd8, 0x6c, 0x95, 0xb0, 0x4c, 0x63, 0x65, 0xd9, 0xc5, 0x69, 0x9c, 0x20, 0x61, 0x1c, 0x69, 0x5c, 0xe2, 0xf4, 0xe8, 0x18, 0xef, 0x7f, 0xe5, 0x03, 0x24, 0x59, 0x8a, 0xfb, 0xfb, 0x7b, 0x7c, 0xf7, 0xf5, 0xc7, 0xe0, 0x2c, 0x02, 0xa3, 0x6c, 0xab, 0xb8, 0xa0, 0x08, 0x7b, 0x79, 0xc6, 0x63, 0x54, 0xa5, 0x65, 0x5d, 0x8f, 0xf8, 0x34, 0xe8, 0xae, 0xa5, 0x6a, 0x61, 0x88, 0x6b, 0xea, 0x84, 0xc4, 0xd5, 0xd5, 0x15, 0x40, 0xec, 0x34, 0x97, 0x0e, 0x33, 0x44, 0x5d, 0x07, 0xc2, 0x28, 0x46, 0xa3, 0x11, 0x22, 0xca, 0x40, 0xa4, 0x86, 0x68, 0x5b, 0x28, 0x21, 0x03, 0xe9, 0x37, 0xcd, 0x33, 0x2c, 0xeb, 0x6e, 0xe7, 0x5c, 0x89, 0xa2, 0x08, 0x54, 0x99, 0x30, 0xed, 0xd6, 0x75, 0x8d, 0x24, 0xb5, 0x1c, 0x96, 0x28, 0xe2, 0x21, 0x3e, 0xd5, 0xf3, 0x01, 0xb2, 0x51, 0x11, 0x9a, 0xfb, 0xae, 0xeb, 0xec, 0x04, 0x1f, 0x47, 0x00, 0x61, 0x76, 0xca, 0x13, 0x06, 0xf3, 0xf9, 0x1c, 0x42, 0x08, 0x4c, 0xc7, 0x13, 0x9c, 0x9d, 0x9d, 0x59, 0x09, 0xa2, 0xd6, 0x68, 0xa5, 0x04, 0x8d, 0xa3, 0x70, 0x2e, 0x46, 0x9c, 0x23, 0x66, 0x1c, 0x9d, 0xda, 0xee, 0xf9, 0xfb, 0x2b, 0x59, 0xa5, 0x94, 0x0b, 0x55, 0x02, 0xb4, 0x23, 0x7b, 0x59, 0xd4, 0xc5, 0x16, 0x74, 0x5f, 0x60, 0x6b, 0x27, 0x29, 0xab, 0xaa, 0x0a, 0x34, 0x67, 0x3b, 0xb5, 0xc5, 0x92, 0xe2, 0xb6, 0x75, 0x65, 0x30, 0x1c, 0xa2, 0xdc, 0x6c, 0xac, 0xef, 0x81, 0x74, 0x4e, 0x79, 0x71, 0x0c, 0xd9, 0x09, 0x94, 0xeb, 0x0d, 0x96, 0x6b, 0x8b, 0x6e, 0xd5, 0xb5, 0x02, 0xe7, 0xc0, 0xe3, 0xa7, 0xe7, 0x98, 0x4c, 0x26, 0x68, 0x44, 0x13, 0x1a, 0xfd, 0xfe, 0x0a, 0x82, 0x18, 0x40, 0x9b, 0x7e, 0x88, 0x95, 0x84, 0xd4, 0x5b, 0x43, 0x1b, 0x22, 0x29, 0x62, 0x62, 0x1d, 0x0e, 0x6d, 0x42, 0x9b, 0x0e, 0x0e, 0x80, 0x7e, 0xf1, 0xe8, 0x2d, 0x74, 0x6d, 0x6d, 0xb4, 0x7f, 0xe9, 0xef, 0x5b, 0xce, 0x39, 0xe2, 0x28, 0x0e, 0x35, 0x26, 0x89, 0x13, 0x54, 0xeb, 0x8d, 0xbd, 0x0f, 0x63, 0x06, 0xc6, 0x19, 0x84, 0xb0, 0x32, 0xec, 0x88, 0xc6, 0x0f, 0xea, 0x83, 0x1f, 0x38, 0xaa, 0xb2, 0x04, 0x94, 0xc6, 0x62, 0xb1, 0xb4, 0xe7, 0x19, 0xa3, 0xe0, 0x31, 0x0b, 0x03, 0x27, 0x77, 0x67, 0x0c, 0x9f, 0x24, 0x68, 0xeb, 0x06, 0x9c, 0x02, 0x31, 0x67, 0x10, 0xb2, 0x05, 0xd7, 0xc6, 0xcb, 0xba, 0xa8, 0x33, 0x61, 0x70, 0xba, 0x5f, 0xa3, 0xd1, 0x89, 0xb6, 0xe7, 0x04, 0xe5, 0x7e, 0x18, 0x28, 0x80, 0xd8, 0x49, 0xb5, 0x73, 0x21, 0x03, 0x34, 0x7c, 0xae, 0x06, 0x09, 0x99, 0xe2, 0x70, 0x1f, 0xeb, 0xd9, 0x97, 0x6c, 0x07, 0xc2, 0xd6, 0x5a, 0x23, 0x8f, 0x06, 0x3b, 0x66, 0x2e, 0xfd, 0xd0, 0x12, 0xbf, 0x77, 0xf2, 0xdd, 0x69, 0x9f, 0x45, 0x1e, 0x8c, 0x65, 0x64, 0xb7, 0x53, 0xcc, 0xfa, 0x53, 0x69, 0x14, 0x45, 0x58, 0x2e, 0x97, 0xc1, 0xa7, 0xdd, 0x6b, 0x5d, 0xb3, 0x2c, 0x0b, 0xa6, 0x09, 0x51, 0x96, 0xee, 0x34, 0x0a, 0x7d, 0x7b, 0x5a, 0x6f, 0x57, 0xb9, 0x9f, 0x12, 0xd7, 0xe7, 0x01, 0x28, 0x25, 0x1f, 0x38, 0xab, 0xf9, 0xae, 0xd2, 0xef, 0x76, 0x0e, 0x11, 0xf7, 0xfc, 0x83, 0xe0, 0xa5, 0x58, 0xfb, 0x2e, 0x4e, 0xfd, 0x49, 0x7f, 0xdf, 0x9b, 0xbd, 0x5f, 0xb8, 0xb3, 0x2c, 0x39, 0x28, 0x7d, 0xeb, 0xfb, 0xed, 0xef, 0x13, 0xed, 0x76, 0xd8, 0xef, 0x9a, 0xba, 0x62, 0xee, 0xf5, 0xb6, 0xcc, 0x41, 0x68, 0x76, 0x75, 0x12, 0xd1, 0xc4, 0xdd, 0x17, 0x2a, 0xac, 0x4a, 0x40, 0x34, 0x00, 0x05, 0x42, 0x0d, 0xb2, 0x3c, 0xc6, 0x6c, 0x76, 0x8b, 0xd9, 0xed, 0x15, 0xea, 0x66, 0x81, 0x24, 0xd1, 0x38, 0x3b, 0x1b, 0x81, 0xc7, 0x56, 0xfa, 0x76, 0x73, 0xf5, 0x1a, 0x49, 0xcc, 0x71, 0x7c, 0x34, 0x40, 0x9e, 0xa7, 0xa8, 0x37, 0x6b, 0x54, 0x4e, 0xca, 0xf4, 0xfc, 0xe9, 0x7b, 0xa8, 0xda, 0x75, 0x90, 0xa8, 0x45, 0x51, 0x84, 0xe1, 0x70, 0x08, 0x42, 0x08, 0xca, 0xb2, 0xc4, 0xed, 0xed, 0xed, 0x0e, 0x2b, 0xdf, 0xcb, 0xb1, 0x8e, 0x8e, 0x8e, 0x50, 0x55, 0x15, 0xd6, 0xeb, 0x35, 0xca, 0x52, 0x87, 0x03, 0xd0, 0x17, 0x72, 0xef, 0xbf, 0x5f, 0x96, 0x25, 0x8a, 0xa2, 0xc0, 0xfb, 0xef, 0xbf, 0x6f, 0x99, 0xf4, 0xb3, 0x19, 0x3e, 0xf9, 0xe4, 0x13, 0xac, 0xd7, 0x6b, 0x7c, 0xf5, 0xab, 0x5f, 0xb5, 0x16, 0x99, 0x11, 0x09, 0x8c, 0xfa, 0xb7, 0x6f, 0xdf, 0x42, 0x29, 0x85, 0xd1, 0x68, 0x14, 0x12, 0xf8, 0xe2, 0x38, 0xc6, 0x47, 0x1f, 0x7d, 0x14, 0xae, 0x69, 0x1c, 0xc7, 0x78, 0xf5, 0xea, 0x15, 0x96, 0xcb, 0x25, 0x9e, 0x3d, 0x7b, 0x86, 0xf5, 0x6a, 0x11, 0xe4, 0x91, 0xb1, 0xcb, 0x26, 0xf7, 0x1f, 0x2b, 0xa5, 0xc4, 0x74, 0x3a, 0xc5, 0xed, 0xed, 0x2d, 0x56, 0xab, 0x95, 0x63, 0xd3, 0x5a, 0x02, 0xdb, 0xcd, 0xcd, 0x8d, 0x3b, 0x60, 0xb7, 0x48, 0x57, 0xdb, 0xb6, 0x5b, 0xfd, 0x70, 0x51, 0x84, 0x49, 0xdd, 0x93, 0x9a, 0x7c, 0x83, 0x7b, 0x7e, 0x7e, 0x0e, 0xc6, 0x18, 0x5e, 0xbf, 0x7e, 0x0d, 0xce, 0x39, 0xa6, 0xd3, 0x29, 0x96, 0xcb, 0x25, 0x3e, 0xfe, 0xf8, 0x63, 0x50, 0x4a, 0xf1, 0xf2, 0xe5, 0x4b, 0x9c, 0x9e, 0x9e, 0x06, 0x89, 0x9b, 0xb7, 0x17, 0x2d, 0xcb, 0x12, 0x49, 0x92, 0xe0, 0xe8, 0xe8, 0xc8, 0xee, 0xe8, 0xdb, 0x16, 0x83, 0x81, 0xf5, 0xc6, 0x06, 0xb4, 0x6b, 0x64, 0x3a, 0x50, 0x0a, 0x28, 0x25, 0xb0, 0x58, 0xcc, 0xc1, 0x99, 0x65, 0x88, 0x27, 0x49, 0xe2, 0x54, 0x00, 0x4b, 0xcc, 0x66, 0x33, 0x18, 0x63, 0xf0, 0xf2, 0xe5, 0x4b, 0x8c, 0xc7, 0x43, 0x6b, 0x2c, 0xd2, 0xd6, 0x61, 0x77, 0x6f, 0xe8, 0x16, 0x01, 0x5a, 0x2c, 0x16, 0x88, 0xa3, 0x04, 0x79, 0x94, 0x40, 0xa6, 0x12, 0xd3, 0xd1, 0x14, 0x34, 0x8a, 0x71, 0x7d, 0x73, 0xe7, 0x9c, 0xd6, 0x7a, 0x9c, 0x10, 0x18, 0xc4, 0x9c, 0x43, 0x53, 0xfb, 0x7c, 0x54, 0x55, 0x85, 0xd4, 0x44, 0xc8, 0x07, 0x16, 0xd6, 0x17, 0x6d, 0x87, 0x28, 0x89, 0x91, 0x25, 0xb6, 0xa0, 0xdf, 0xdf, 0xaf, 0x50, 0x6e, 0x80, 0xe1, 0x74, 0x85, 0x31, 0x23, 0x88, 0xdd, 0xb3, 0xdc, 0x1f, 0x1a, 0x7c, 0x53, 0x38, 0x9f, 0xcf, 0xd1, 0x54, 0x35, 0x06, 0x03, 0x7b, 0xde, 0x44, 0x71, 0x04, 0xd3, 0xb5, 0xa8, 0xab, 0x1a, 0x9c, 0xb2, 0x50, 0xf0, 0xca, 0xb2, 0xc4, 0x72, 0xb9, 0x04, 0xd6, 0x2b, 0xbc, 0x7d, 0xfb, 0xd6, 0x12, 0x80, 0xe3, 0xed, 0x00, 0x60, 0xb4, 0xf3, 0xb3, 0x4f, 0x53, 0x4b, 0x1e, 0xa3, 0x11, 0xd6, 0x65, 0x89, 0xaa, 0xa9, 0xc1, 0xd2, 0xd8, 0x3d, 0x77, 0xce, 0xef, 0x9b, 0x73, 0xa0, 0xb3, 0x85, 0x62, 0xb5, 0x52, 0x98, 0x4c, 0x19, 0x08, 0x25, 0x41, 0xa5, 0xe0, 0xef, 0xf3, 0x88, 0x32, 0xe8, 0x56, 0x60, 0xb3, 0x5a, 0xa1, 0xa9, 0x3a, 0x70, 0x6e, 0xf5, 0xf8, 0x59, 0x91, 0x23, 0x2f, 0x46, 0x68, 0x45, 0x87, 0xb6, 0xee, 0x82, 0xb1, 0x4b, 0xff, 0x59, 0xae, 0xeb, 0xda, 0xee, 0xf7, 0x23, 0x06, 0xe6, 0xec, 0x5c, 0xfb, 0x67, 0x61, 0x14, 0x59, 0xd9, 0x95, 0x97, 0x33, 0xfa, 0x69, 0x9f, 0x70, 0x0e, 0xa5, 0x35, 0x62, 0xe7, 0xac, 0x57, 0x55, 0x0d, 0xee, 0xee, 0x66, 0x28, 0xcb, 0x12, 0x83, 0x3c, 0xb7, 0xa9, 0x5f, 0xe3, 0x31, 0xee, 0xee, 0xee, 0x6c, 0xc3, 0x1a, 0x47, 0x60, 0x91, 0xf5, 0xef, 0x6f, 0x44, 0x87, 0x58, 0x27, 0x8e, 0x07, 0xe0, 0x06, 0x07, 0x4f, 0xee, 0x55, 0x7a, 0x27, 0xd8, 0x64, 0xb3, 0xd9, 0x04, 0xb9, 0xb1, 0x37, 0xa1, 0xe9, 0xdc, 0x90, 0x37, 0x1a, 0x8d, 0xb0, 0xea, 0xd6, 0xbd, 0x35, 0xa3, 0x63, 0x83, 0xab, 0x6d, 0x7d, 0xf0, 0xac, 0x7f, 0xce, 0x39, 0x8c, 0x83, 0xe2, 0x39, 0x25, 0xe0, 0x29, 0x43, 0x1a, 0xc5, 0x78, 0xfe, 0xfc, 0x05, 0x9e, 0x3c, 0x7b, 0x8a, 0x34, 0x4d, 0x71, 0x7f, 0x7f, 0x87, 0x9b, 0xbb, 0x5b, 0x9b, 0x09, 0xe0, 0x24, 0x6c, 0x5e, 0x93, 0x5f, 0xa4, 0x36, 0xb4, 0x88, 0x18, 0xa0, 0x6d, 0xad, 0xe1, 0x91, 0x51, 0x1a, 0x86, 0x1a, 0xb0, 0x9e, 0xbc, 0x17, 0x3d, 0x12, 0x78, 0x1c, 0xc7, 0xb6, 0xd8, 0x1f, 0x70, 0xd3, 0xdc, 0xd6, 0x03, 0xed, 0xbc, 0xe4, 0xa3, 0xa0, 0x84, 0xa8, 0xaa, 0x0a, 0xab, 0x6e, 0x09, 0xa3, 0x14, 0x36, 0x49, 0x8e, 0xf9, 0xdd, 0xcc, 0x72, 0x5a, 0x4e, 0xa6, 0xc8, 0xd3, 0x04, 0x44, 0x8a, 0x40, 0xca, 0xf0, 0xf2, 0xe8, 0x90, 0x93, 0x10, 0x6d, 0x09, 0x8f, 0x49, 0x92, 0xe0, 0xf8, 0xf8, 0xc8, 0xca, 0x38, 0x93, 0x18, 0x52, 0xdb, 0xe6, 0x1d, 0xd4, 0x66, 0xd2, 0xfb, 0x7b, 0x92, 0x73, 0x8e, 0xf1, 0xb0, 0xc0, 0x68, 0x50, 0x40, 0xc8, 0x16, 0xec, 0xc5, 0xcb, 0x1f, 0xfb, 0x8b, 0x52, 0x0a, 0x57, 0x9c, 0xec, 0xee, 0x5c, 0x6b, 0x05, 0xff, 0x77, 0x42, 0x74, 0x00, 0x2c, 0x14, 0x62, 0x8c, 0x76, 0x04, 0x99, 0x1c, 0x9c, 0x33, 0x4c, 0xa7, 0x13, 0xc4, 0x71, 0xe4, 0x76, 0xe4, 0x96, 0xf1, 0xcb, 0x98, 0x67, 0xba, 0x13, 0x64, 0x59, 0x8a, 0x34, 0x4d, 0x90, 0x24, 0x71, 0xf8, 0x38, 0xad, 0x95, 0xeb, 0x52, 0x3a, 0xb4, 0xc2, 0x3a, 0xdf, 0x80, 0xd8, 0xdd, 0x93, 0x10, 0x6d, 0xd8, 0xcd, 0xc7, 0x09, 0x47, 0x9a, 0xc5, 0x10, 0xd2, 0x25, 0xcc, 0x68, 0x01, 0xa9, 0x3a, 0xd4, 0x4d, 0x89, 0xb6, 0xab, 0xa1, 0xb4, 0x40, 0x94, 0xa4, 0xf6, 0x87, 0x8b, 0xb8, 0x9d, 0xd6, 0xa9, 0x0d, 0x02, 0xe8, 0xa4, 0x95, 0x38, 0x28, 0xe3, 0x34, 0xa4, 0x9c, 0xdb, 0x87, 0x30, 0x49, 0x40, 0x39, 0x07, 0xe5, 0x3c, 0x78, 0x03, 0xfb, 0x87, 0xd9, 0xfb, 0xc2, 0xf7, 0x51, 0x0a, 0x4f, 0x90, 0x3a, 0x34, 0x6d, 0x5b, 0xd8, 0x7e, 0x6b, 0xec, 0xd2, 0xdf, 0x6f, 0x7b, 0x59, 0x46, 0x3f, 0x7d, 0xae, 0x4f, 0x48, 0xf3, 0xc5, 0xa1, 0xbf, 0x92, 0x38, 0xe4, 0xe4, 0xe6, 0x21, 0xf6, 0x7d, 0x87, 0x3d, 0xff, 0xb5, 0x9a, 0x5a, 0x40, 0x0a, 0xcb, 0xfc, 0x35, 0xda, 0x11, 0xd9, 0x28, 0x07, 0x25, 0xdc, 0x6a, 0x2f, 0x89, 0xfd, 0x7f, 0x4a, 0xed, 0x9f, 0xbd, 0xf4, 0x4c, 0x29, 0x03, 0x29, 0x35, 0x88, 0xce, 0x61, 0x54, 0x02, 0xe8, 0x04, 0x44, 0x26, 0x20, 0xda, 0x32, 0x6b, 0xa9, 0x01, 0xa8, 0xb1, 0x74, 0x1b, 0x42, 0x04, 0x28, 0xa9, 0x00, 0x94, 0x88, 0x68, 0x87, 0x88, 0x2b, 0x50, 0x74, 0x40, 0xd7, 0x40, 0x35, 0x9f, 0x40, 0x76, 0x37, 0xe0, 0x7c, 0x83, 0xc1, 0x40, 0x82, 0xf1, 0x12, 0x9b, 0xcd, 0x5b, 0x2c, 0xe6, 0x6f, 0x51, 0x6e, 0x16, 0x38, 0x1e, 0x27, 0x38, 0x39, 0x1a, 0x63, 0x32, 0x1a, 0x01, 0xda, 0xa0, 0xae, 0x6a, 0x54, 0x9b, 0x0a, 0x9b, 0x8d, 0x75, 0x07, 0xbb, 0x9e, 0x5d, 0x42, 0x19, 0x09, 0x1e, 0x33, 0x80, 0x68, 0x74, 0xa2, 0x81, 0xd4, 0x02, 0x2c, 0xa2, 0x48, 0x73, 0x1b, 0xcc, 0x90, 0x66, 0x31, 0xc6, 0xd3, 0x11, 0x4e, 0x4e, 0x8f, 0x40, 0xa8, 0xc1, 0xcd, 0xed, 0x5b, 0x34, 0x6d, 0x85, 0xb3, 0x8b, 0x53, 0x64, 0x79, 0x86, 0xeb, 0x9b, 0x6b, 0xac, 0xcb, 0x0d, 0x9e, 0x3e, 0x7b, 0x8a, 0x97, 0x1f, 0xbc, 0x04, 0x8b, 0x38, 0xca, 0xba, 0x82, 0x81, 0xc1, 0xf4, 0x68, 0x0a, 0x65, 0x34, 0xda, 0xae, 0xc5, 0x72, 0xb5, 0x84, 0x50, 0xd2, 0x5a, 0x7c, 0x5a, 0xe6, 0x00, 0xa4, 0xe8, 0x02, 0x29, 0xee, 0xec, 0xec, 0x0c, 0x2f, 0x5e, 0xbc, 0xc0, 0xe9, 0xe9, 0x69, 0x98, 0x68, 0x57, 0xeb, 0x7b, 0x64, 0x79, 0x02, 0xc6, 0x08, 0xae, 0xae, 0xde, 0xe0, 0xd3, 0xcf, 0x3e, 0x06, 0x21, 0x06, 0xa7, 0xa7, 0xc7, 0x88, 0x13, 0x8e, 0xe1, 0x60, 0x14, 0x26, 0xa5, 0xb7, 0x6f, 0xdf, 0xe2, 0xf6, 0xf6, 0x36, 0x1c, 0xb6, 0xb3, 0xd9, 0x0c, 0x59, 0x3e, 0x40, 0x92, 0xa4, 0x50, 0xda, 0xfa, 0xfe, 0xa7, 0x69, 0x86, 0xc5, 0x62, 0x85, 0xd9, 0xac, 0x03, 0x8f, 0x80, 0x22, 0x2f, 0x40, 0x40, 0xf1, 0xe4, 0xc9, 0x53, 0x4c, 0x27, 0x47, 0x18, 0x0d, 0xc7, 0xc8, 0xd2, 0x1c, 0xe5, 0xa6, 0xc2, 0x68, 0x38, 0xb6, 0x10, 0xf9, 0xc5, 0x63, 0x54, 0x55, 0x8d, 0xba, 0x6a, 0xf0, 0xec, 0xe9, 0x73, 0x30, 0xc6, 0x71, 0xfd, 0xf6, 0x06, 0x71, 0x94, 0xa0, 0xaa, 0x37, 0x21, 0x11, 0xd0, 0x2a, 0x46, 0x28, 0x84, 0xe8, 0xd0, 0x34, 0x75, 0x38, 0x0c, 0xbd, 0x81, 0x92, 0x6f, 0x52, 0x28, 0x75, 0x1a, 0x7e, 0x29, 0xc1, 0x98, 0x95, 0xc2, 0x14, 0x45, 0x81, 0xe9, 0x74, 0xba, 0xe3, 0x77, 0xc0, 0x18, 0x43, 0x5d, 0xb5, 0xc8, 0xb2, 0x0c, 0x4f, 0x9e, 0x3c, 0x71, 0x93, 0x50, 0x8d, 0xf1, 0x78, 0x8c, 0xa3, 0xa3, 0x23, 0x0c, 0x87, 0x43, 0xac, 0xaa, 0x0a, 0x9f, 0xbc, 0xfa, 0x1c, 0xaf, 0xaf, 0xaf, 0x40, 0x38, 0x45, 0x96, 0xe5, 0x36, 0x5e, 0x53, 0x2a, 0xa4, 0x3c, 0xc2, 0x0f, 0xbd, 0xff, 0x15, 0x14, 0xa9, 0x8d, 0x10, 0x1d, 0x0e, 0x06, 0x00, 0x63, 0xa8, 0x85, 0x00, 0x89, 0x22, 0x90, 0x88, 0xa3, 0xd4, 0x35, 0x36, 0x75, 0x85, 0xd1, 0x68, 0x84, 0xc5, 0x7c, 0x81, 0x61, 0x31, 0xb0, 0x39, 0xd1, 0x6d, 0x8b, 0x2c, 0x4e, 0x1c, 0xd2, 0x60, 0xcf, 0x21, 0xca, 0x29, 0xa2, 0x98, 0x43, 0x43, 0xa3, 0xeb, 0x5a, 0x18, 0x23, 0x11, 0x71, 0x85, 0x34, 0x8f, 0xc1, 0x93, 0x18, 0xb4, 0x67, 0xb2, 0x64, 0x0f, 0x59, 0x06, 0x51, 0xdb, 0x9d, 0xea, 0xfd, 0x6c, 0x86, 0xc5, 0x7c, 0x61, 0x9b, 0xbf, 0x2c, 0x45, 0x59, 0xd7, 0xe8, 0xa4, 0x00, 0x27, 0x29, 0x28, 0x38, 0x88, 0xa1, 0x38, 0x9e, 0x9e, 0xe2, 0xf4, 0xf8, 0x1c, 0xab, 0x75, 0x89, 0xab, 0xb7, 0x37, 0x60, 0x34, 0x82, 0xe1, 0x16, 0xb1, 0x32, 0xc6, 0x6a, 0x99, 0x39, 0x8b, 0x41, 0x0c, 0x45, 0xd7, 0x74, 0xa8, 0xcb, 0x06, 0x5d, 0x55, 0x62, 0x3c, 0x1e, 0xe1, 0x76, 0x56, 0xe2, 0xd1, 0xe3, 0x73, 0xb4, 0x42, 0x20, 0xcb, 0x0a, 0x08, 0x69, 0x40, 0x78, 0x0c, 0x62, 0x80, 0xa6, 0x6d, 0xa0, 0x54, 0x83, 0xa6, 0xd1, 0xc8, 0xd2, 0x08, 0x83, 0xe1, 0x00, 0x79, 0x9a, 0x59, 0xe2, 0x29, 0xb3, 0xbb, 0xd6, 0x88, 0x59, 0x5b, 0x57, 0xcb, 0x54, 0xd6, 0x48, 0x92, 0x14, 0xa3, 0xd1, 0x04, 0x75, 0xd7, 0x6d, 0x33, 0xdc, 0x95, 0x02, 0xa3, 0x14, 0x69, 0x9c, 0x80, 0x02, 0x96, 0xe4, 0x15, 0xc7, 0x98, 0x9e, 0x9d, 0x80, 0x25, 0x31, 0xca, 0xb6, 0xb6, 0xd3, 0x22, 0x63, 0xa8, 0x9a, 0x1a, 0x9b, 0xb2, 0xc4, 0xa0, 0xc8, 0xa1, 0x8d, 0x95, 0xe8, 0x8d, 0xa7, 0x13, 0xe4, 0x45, 0x01, 0xe9, 0x08, 0x81, 0x9a, 0x11, 0x24, 0x2c, 0xc2, 0xa6, 0x2a, 0x41, 0x23, 0x86, 0xe3, 0xb3, 0x13, 0xa4, 0x79, 0x86, 0xf9, 0xda, 0xda, 0xab, 0xd6, 0x6d, 0x03, 0x0a, 0x12, 0x12, 0xfa, 0xee, 0xe7, 0x73, 0xeb, 0x8b, 0xc0, 0x23, 0x8c, 0x0a, 0xc7, 0x9d, 0xd0, 0x22, 0xe4, 0xcc, 0xc3, 0x00, 0x52, 0x6b, 0x67, 0xcc, 0x63, 0x2c, 0x04, 0x6d, 0x28, 0x94, 0x90, 0x38, 0x3e, 0x3a, 0xc6, 0xfc, 0xfe, 0x1e, 0x5f, 0x7c, 0xf6, 0x39, 0xb2, 0x28, 0x41, 0x04, 0x8a, 0x7a, 0xbd, 0x81, 0x20, 0xd6, 0xc6, 0x59, 0x4a, 0x0d, 0xa5, 0x25, 0xa4, 0xd6, 0xd0, 0xc4, 0xa2, 0x3c, 0x1a, 0x0a, 0xf5, 0x7a, 0x65, 0x1b, 0x24, 0x97, 0x49, 0x9b, 0x25, 0x29, 0x86, 0xf9, 0x08, 0x6d, 0xd9, 0xe2, 0xcd, 0xeb, 0x2b, 0x48, 0xa3, 0x70, 0x72, 0x7a, 0x8a, 0xc1, 0x60, 0x80, 0x9b, 0x9b, 0x6b, 0x5c, 0x5e, 0x5d, 0xba, 0x86, 0xcb, 0xe6, 0x84, 0x7b, 0x52, 0x73, 0x91, 0x59, 0xc3, 0xa3, 0xa6, 0x6e, 0xb0, 0xd9, 0xd8, 0x21, 0x2b, 0x89, 0x63, 0x68, 0xa3, 0x11, 0x27, 0x31, 0x4e, 0x4f, 0x4f, 0x51, 0xd5, 0x35, 0x28, 0xa3, 0xa8, 0x9a, 0x1a, 0xdc, 0x7d, 0x9e, 0x1d, 0xc9, 0xb1, 0x33, 0xa1, 0x7b, 0x8b, 0x5f, 0x63, 0x0c, 0x04, 0x94, 0x55, 0xfe, 0x78, 0x04, 0x54, 0x1b, 0x44, 0x84, 0x21, 0x21, 0x0c, 0x1c, 0x04, 0x74, 0xd3, 0x80, 0x68, 0xa0, 0x48, 0x32, 0xe4, 0x99, 0xcd, 0x0c, 0x10, 0xd0, 0x50, 0xd4, 0x58, 0xf9, 0x9a, 0x16, 0x80, 0x91, 0xa0, 0x04, 0xd0, 0xc6, 0x92, 0xf1, 0xe2, 0x34, 0xc1, 0x68, 0x34, 0x04, 0x4f, 0x12, 0xd0, 0x34, 0x06, 0x89, 0x29, 0xa4, 0x51, 0x10, 0x4a, 0xc0, 0x50, 0x05, 0xca, 0x09, 0x08, 0x51, 0x50, 0xaa, 0x43, 0x02, 0x0e, 0xd9, 0x36, 0xe8, 0xea, 0x12, 0x5a, 0x08, 0x28, 0xd9, 0x81, 0xfc, 0xc4, 0x9f, 0xfd, 0x39, 0xb3, 0xef, 0x71, 0xbc, 0xef, 0x48, 0xe6, 0x53, 0xd6, 0xbc, 0x94, 0xca, 0x3b, 0x2c, 0xf5, 0x2d, 0x55, 0xf7, 0x5d, 0xd1, 0xec, 0x04, 0xdf, 0xed, 0x78, 0xb5, 0xf7, 0xbd, 0xca, 0xb5, 0xd6, 0x20, 0x9c, 0x1d, 0x74, 0x13, 0xeb, 0xfb, 0xa6, 0xf7, 0xf5, 0xa9, 0xde, 0xcd, 0xc9, 0x13, 0x16, 0x84, 0xd4, 0xbb, 0x90, 0xad, 0xfb, 0xfb, 0x3e, 0xe1, 0xcd, 0x77, 0xa7, 0x1e, 0x26, 0xf3, 0xaf, 0xcb, 0x6b, 0xdc, 0xfb, 0x90, 0xb9, 0x77, 0x9a, 0xeb, 0xfb, 0xa4, 0xef, 0xdb, 0xfd, 0xf5, 0x21, 0xf9, 0x3c, 0x4b, 0x0e, 0x06, 0xcf, 0xf4, 0x23, 0x13, 0xfb, 0xae, 0x6d, 0xfd, 0x9f, 0xbf, 0xbf, 0x8f, 0xef, 0xa3, 0x00, 0x7d, 0xf8, 0x69, 0x5f, 0x05, 0xb0, 0x2f, 0xcb, 0x4b, 0xe2, 0xec, 0x60, 0x23, 0xd0, 0x27, 0xe5, 0xbd, 0x2b, 0x8f, 0xdd, 0x18, 0x03, 0x29, 0xbc, 0xe9, 0x02, 0xb5, 0x72, 0x1b, 0x02, 0x50, 0x06, 0x50, 0x6a, 0x40, 0x89, 0x41, 0x2b, 0x1a, 0x50, 0xa6, 0x41, 0xa8, 0x04, 0x4c, 0x03, 0x10, 0x01, 0xe2, 0xf2, 0xae, 0x9b, 0xa6, 0x01, 0xda, 0x4b, 0x94, 0xe5, 0xda, 0x42, 0x3d, 0x91, 0x01, 0xe7, 0x04, 0x20, 0x12, 0x71, 0x42, 0x91, 0x65, 0x29, 0x56, 0xb3, 0x1b, 0xeb, 0x1e, 0x96, 0x0d, 0x40, 0x08, 0x87, 0x92, 0x06, 0x52, 0x02, 0x6d, 0x63, 0xa7, 0x62, 0x9a, 0xca, 0x90, 0x6c, 0xe7, 0x7f, 0x7b, 0x42, 0x95, 0x9f, 0x28, 0x77, 0x74, 0xb9, 0x4a, 0x61, 0x36, 0x9b, 0x41, 0x08, 0x8d, 0xe9, 0x74, 0x84, 0xcd, 0x66, 0x83, 0x27, 0x4f, 0x9e, 0xe0, 0xec, 0xec, 0x2c, 0x74, 0xac, 0x9e, 0xe0, 0xd2, 0x34, 0x0d, 0xe6, 0xf3, 0x39, 0x46, 0xa3, 0xd1, 0x8e, 0xb3, 0xd4, 0xc5, 0xc5, 0x05, 0xb4, 0xd6, 0x36, 0x98, 0x23, 0xe6, 0x01, 0xb1, 0xf1, 0xc6, 0x29, 0x5e, 0x96, 0x65, 0xd1, 0x28, 0x61, 0xad, 0x38, 0x81, 0x60, 0xaf, 0xea, 0xef, 0xe9, 0xc1, 0x60, 0x80, 0xeb, 0xab, 0x1b, 0xcc, 0xe7, 0x36, 0x15, 0xea, 0xec, 0xec, 0x0c, 0x00, 0xb0, 0x5c, 0x2e, 0x83, 0xdf, 0xc1, 0x72, 0xb5, 0xc1, 0x74, 0x3a, 0x0d, 0xd1, 0x86, 0xfd, 0xa4, 0x32, 0x8b, 0xd2, 0xc8, 0x60, 0xc0, 0xe4, 0xcd, 0x93, 0xbc, 0x83, 0x9a, 0x9f, 0xdc, 0x3d, 0xca, 0xe4, 0x5f, 0x93, 0xbf, 0x7f, 0x6f, 0x6f, 0x6f, 0xb1, 0x29, 0x57, 0x21, 0x6e, 0xd2, 0xe7, 0x60, 0x7b, 0xbb, 0x48, 0x8f, 0x52, 0x78, 0x02, 0x5e, 0x9a, 0xa6, 0x41, 0x25, 0xd0, 0x39, 0x03, 0x97, 0xc9, 0xb4, 0x08, 0x08, 0x47, 0x9f, 0x18, 0x64, 0x3d, 0xe1, 0x97, 0xa8, 0xab, 0x36, 0x7c, 0x8d, 0xfd, 0xd0, 0xa6, 0xa3, 0xa3, 0x23, 0x7c, 0xf7, 0xbb, 0x9f, 0xa0, 0xe9, 0x3a, 0x5b, 0x1c, 0x8a, 0x14, 0x71, 0x9a, 0x82, 0x32, 0x6b, 0xbc, 0xc1, 0x39, 0xc7, 0xa3, 0xe9, 0x09, 0xd6, 0xeb, 0x12, 0x46, 0x2a, 0x14, 0xc5, 0x00, 0x52, 0x03, 0xb7, 0xf3, 0x05, 0x96, 0x1b, 0x6b, 0xec, 0x42, 0x47, 0x14, 0xaa, 0x13, 0x96, 0x98, 0xa6, 0x35, 0x38, 0xb1, 0x51, 0x98, 0x6d, 0x5d, 0x5b, 0xfe, 0xc4, 0xba, 0x02, 0xe5, 0xdb, 0x09, 0xda, 0xdf, 0xe9, 0xeb, 0xaa, 0xc4, 0x72, 0xb9, 0xc6, 0xf9, 0xf1, 0x14, 0x34, 0x8e, 0x40, 0x62, 0x1e, 0xc8, 0x49, 0xbe, 0x11, 0x8e, 0x79, 0x04, 0x34, 0x36, 0x6c, 0x63, 0xb3, 0x5a, 0xa3, 0x2e, 0x6d, 0xe3, 0xc0, 0xd3, 0x18, 0x65, 0xdb, 0x58, 0xef, 0x71, 0x9a, 0x59, 0x59, 0x92, 0xb0, 0x2a, 0x0d, 0x06, 0x82, 0xb2, 0xa9, 0x43, 0x36, 0x7a, 0x71, 0x3a, 0xb0, 0xba, 0x65, 0x9f, 0x79, 0x6e, 0x00, 0x0e, 0x02, 0x48, 0x05, 0xd5, 0x0a, 0x10, 0xa3, 0x70, 0x7c, 0x7e, 0x86, 0xeb, 0xd9, 0x3d, 0xc6, 0x27, 0x47, 0x28, 0x9b, 0x7a, 0x2b, 0x27, 0x03, 0x90, 0x18, 0xbb, 0x1b, 0xf7, 0x8e, 0x75, 0x84, 0x10, 0x48, 0x62, 0xa0, 0x8c, 0x84, 0x30, 0x1a, 0x69, 0x11, 0x41, 0xb5, 0x02, 0x31, 0x89, 0x30, 0x1a, 0xd8, 0x42, 0x2f, 0xa5, 0x0d, 0x6b, 0xd9, 0x94, 0x25, 0x58, 0x9e, 0x87, 0x21, 0xc5, 0xcb, 0xc1, 0x12, 0xca, 0x11, 0x39, 0xdf, 0xf2, 0x38, 0x49, 0xd0, 0x19, 0x85, 0x65, 0xb9, 0x81, 0x84, 0xb6, 0x10, 0x7e, 0x64, 0xc9, 0x54, 0x5d, 0xd3, 0xe2, 0x64, 0x34, 0xd8, 0xba, 0xb0, 0xb9, 0xf7, 0xb0, 0x16, 0x1d, 0x5a, 0x25, 0xa1, 0x19, 0x01, 0xaf, 0xed, 0x7a, 0x33, 0x8d, 0xdd, 0x14, 0x5d, 0xd5, 0x58, 0x2c, 0x16, 0x20, 0x84, 0x60, 0x3c, 0x18, 0xda, 0x02, 0xe6, 0xde, 0x73, 0x7f, 0x5d, 0x8a, 0xe1, 0x00, 0xf9, 0x60, 0x00, 0x29, 0x25, 0x36, 0xb2, 0xed, 0x45, 0x91, 0x6e, 0x51, 0x56, 0x6f, 0xad, 0x3a, 0x49, 0xc7, 0x58, 0x2d, 0x96, 0xc8, 0xf3, 0x1c, 0xf7, 0xb3, 0x19, 0xaa, 0x75, 0x89, 0x17, 0xcf, 0x9f, 0x63, 0x90, 0x59, 0x2b, 0xe2, 0x26, 0x76, 0xe7, 0x9b, 0xb1, 0xc8, 0x9f, 0x72, 0x08, 0xb0, 0x27, 0x7d, 0xa1, 0x73, 0x1e, 0xf8, 0xb0, 0xd9, 0x0d, 0x79, 0x9a, 0x61, 0x3c, 0x18, 0xc3, 0x28, 0x8d, 0x72, 0xb5, 0x46, 0xcb, 0xb6, 0x76, 0xb1, 0x65, 0xb9, 0x86, 0x21, 0xb0, 0xd7, 0x20, 0x8d, 0xc2, 0x19, 0xdd, 0x34, 0x0d, 0xb4, 0xb0, 0x68, 0xe8, 0x20, 0x2f, 0x60, 0xcc, 0x96, 0x6c, 0x0c, 0x68, 0x70, 0xe7, 0xa3, 0x70, 0xf9, 0xf6, 0x2d, 0x40, 0x09, 0xa4, 0xd1, 0x88, 0x5c, 0x9e, 0x89, 0x9f, 0xd0, 0xfb, 0xf6, 0xbe, 0x9e, 0xe5, 0x6e, 0x8c, 0xe5, 0x7c, 0xf0, 0x38, 0xb2, 0x4a, 0x07, 0xc7, 0x81, 0x60, 0x86, 0x82, 0x48, 0xcb, 0x2b, 0x60, 0x9b, 0x36, 0x44, 0xcc, 0x26, 0x45, 0x02, 0x96, 0xa7, 0x10, 0x0c, 0x68, 0x61, 0x9d, 0xf6, 0xb8, 0x92, 0xee, 0x6b, 0x11, 0x1b, 0x8a, 0xe3, 0xce, 0x61, 0x4b, 0x6d, 0xa2, 0xd6, 0x7c, 0xc8, 0xfb, 0x24, 0x69, 0x09, 0x42, 0x0d, 0x38, 0x67, 0x20, 0xc4, 0xa5, 0x95, 0x9a, 0x1c, 0x77, 0x37, 0xb7, 0xa8, 0xcb, 0x35, 0xc6, 0xc3, 0x11, 0x8e, 0x4f, 0xa6, 0xe0, 0x7d, 0xcf, 0xf0, 0xbe, 0xad, 0xab, 0xbf, 0x31, 0xf7, 0xf5, 0x8d, 0xfd, 0x69, 0xd2, 0xc3, 0xd8, 0x7d, 0x38, 0xbc, 0x6f, 0x09, 0xd9, 0x8f, 0x63, 0xdd, 0x27, 0x8e, 0xf9, 0xa9, 0xa2, 0x1f, 0xa4, 0xb0, 0x4f, 0x6e, 0xeb, 0x1b, 0xcb, 0xec, 0xe7, 0x85, 0xdb, 0x04, 0x1f, 0xba, 0x95, 0x74, 0xec, 0x85, 0xb4, 0x78, 0x32, 0x52, 0xff, 0x73, 0x0e, 0x65, 0xa6, 0xf7, 0x03, 0x57, 0x3c, 0xb4, 0xef, 0xaf, 0x41, 0x9f, 0x5d, 0x7e, 0x68, 0x0f, 0xee, 0xed, 0x0c, 0xfb, 0xbb, 0xfb, 0xb0, 0xe7, 0xe0, 0x7c, 0x87, 0xf0, 0xf7, 0x2e, 0x37, 0xb7, 0xfd, 0x42, 0xdc, 0x87, 0x0c, 0xfb, 0x69, 0x72, 0x87, 0x18, 0xf5, 0xfb, 0x49, 0x3f, 0x7d, 0x38, 0xce, 0x5f, 0xef, 0x43, 0x99, 0xe8, 0xc1, 0x29, 0x89, 0x46, 0x70, 0x4c, 0x1a, 0x50, 0xbb, 0x34, 0xb7, 0x39, 0xd1, 0xd0, 0x00, 0x31, 0x18, 0x8d, 0x62, 0x80, 0x08, 0x48, 0xd5, 0x42, 0xb4, 0x35, 0x3a, 0xb9, 0x86, 0x14, 0x0d, 0x9a, 0xa6, 0x42, 0xd3, 0x34, 0xc8, 0x68, 0x05, 0xc6, 0x04, 0x28, 0x35, 0x88, 0x62, 0x0a, 0x42, 0x2d, 0xfa, 0xd2, 0x36, 0x0a, 0x52, 0x54, 0x38, 0x39, 0x39, 0x01, 0x67, 0x31, 0xb4, 0x06, 0xaa, 0xb2, 0x41, 0x59, 0xd6, 0x50, 0x92, 0x58, 0x13, 0x05, 0xca, 0x71, 0x34, 0xc9, 0x83, 0x73, 0x5d, 0x53, 0x75, 0x20, 0x26, 0xc3, 0x78, 0x3c, 0xc6, 0xc9, 0xd1, 0x24, 0x68, 0x78, 0x9b, 0xc6, 0x92, 0x4a, 0x22, 0x46, 0x70, 0x72, 0x74, 0x8c, 0xa7, 0x8f, 0x2f, 0x82, 0xd3, 0x5f, 0xb0, 0xe0, 0xad, 0x6b, 0x2c, 0x57, 0x0b, 0x74, 0x5d, 0x17, 0x22, 0x3b, 0x87, 0x45, 0x06, 0x68, 0x89, 0xa6, 0xa9, 0x91, 0xe7, 0x39, 0x5e, 0xfc, 0xf1, 0x1f, 0x06, 0xe7, 0x1c, 0x8b, 0xc5, 0x02, 0x4a, 0x09, 0xbc, 0x78, 0x6e, 0x89, 0x72, 0x77, 0x77, 0x77, 0x78, 0xfd, 0xfa, 0x35, 0x9a, 0xa6, 0xc1, 0xa3, 0x47, 0x8f, 0x02, 0xec, 0x7f, 0x7f, 0x7f, 0x8f, 0xe5, 0x6a, 0x86, 0xd3, 0xd3, 0x53, 0xa4, 0x69, 0x1a, 0xb2, 0xaa, 0x87, 0x43, 0x1b, 0x82, 0xf2, 0xbd, 0xef, 0x7d, 0x0f, 0x4d, 0xdd, 0x59, 0x42, 0x99, 0x31, 0xf8, 0xfc, 0xd5, 0x2b, 0xbb, 0x37, 0x73, 0xf0, 0xf4, 0xdd, 0x6c, 0xe6, 0x88, 0x6d, 0xf7, 0x21, 0x91, 0xca, 0x37, 0x2c, 0x81, 0xdc, 0xa9, 0x2d, 0x53, 0xd9, 0xc3, 0xa9, 0x51, 0x14, 0x81, 0x71, 0x82, 0x62, 0x90, 0xe1, 0xf6, 0x76, 0x63, 0x4d, 0x65, 0xe6, 0x77, 0x18, 0x8f, 0xc7, 0x18, 0x8e, 0x0a, 0x34, 0x75, 0x0d, 0xea, 0x58, 0xc2, 0x47, 0xc7, 0x13, 0x8c, 0x27, 0xc3, 0xf0, 0x67, 0xdf, 0x98, 0xf8, 0x26, 0x3b, 0x4d, 0x53, 0x3c, 0x7e, 0xfc, 0xd8, 0x2a, 0x04, 0x56, 0xab, 0xc0, 0x7a, 0xf7, 0x4d, 0xf9, 0xc5, 0xc5, 0x05, 0x66, 0xb3, 0x1b, 0x47, 0x54, 0x32, 0x01, 0x12, 0xf5, 0xd3, 0xbb, 0xbf, 0xf6, 0x52, 0x4a, 0x9c, 0x9e, 0x9e, 0x62, 0x3a, 0x9d, 0x22, 0x8e, 0x63, 0xac, 0x56, 0x2b, 0x7c, 0xfe, 0xf9, 0xe7, 0xf8, 0xec, 0xb3, 0x2f, 0xec, 0xf7, 0x1e, 0x0c, 0x90, 0x0e, 0x0b, 0x80, 0x5b, 0xbb, 0x53, 0x5f, 0xd0, 0xb5, 0xd6, 0x38, 0x3d, 0x3d, 0xc5, 0xcd, 0xcd, 0x1d, 0xde, 0xbe, 0xb9, 0xc4, 0x68, 0x34, 0xc6, 0xd1, 0x89, 0xdd, 0xd1, 0x4a, 0x63, 0xdd, 0xaf, 0xaa, 0x6e, 0x83, 0x88, 0xd9, 0x73, 0x26, 0x75, 0x4e, 0x68, 0xf9, 0x38, 0x87, 0x70, 0x2b, 0x86, 0xba, 0xad, 0xc1, 0xa4, 0x2b, 0xa8, 0x14, 0x36, 0x5d, 0x90, 0x73, 0xb0, 0x98, 0x23, 0x49, 0x62, 0x10, 0x07, 0x87, 0xc2, 0x18, 0xa7, 0xd6, 0x30, 0x3b, 0x21, 0x47, 0x51, 0x9f, 0xe9, 0x6d, 0x76, 0x23, 0x87, 0x39, 0xa1, 0x10, 0xad, 0x25, 0x58, 0xc5, 0x94, 0x41, 0x6b, 0xe5, 0xc2, 0x40, 0x52, 0x1c, 0x9d, 0x58, 0x0f, 0xf4, 0x45, 0xb7, 0xdc, 0x59, 0xb3, 0x39, 0x77, 0x12, 0x3b, 0xb8, 0x24, 0x14, 0x6f, 0x5e, 0xbd, 0x06, 0x73, 0x3e, 0xec, 0xab, 0xd5, 0x0a, 0x84, 0xb3, 0x90, 0xe9, 0xad, 0xb5, 0x46, 0x91, 0x24, 0x68, 0xca, 0x0a, 0x9b, 0x4d, 0xe5, 0x2c, 0x6e, 0x3b, 0x28, 0x0a, 0x8c, 0x27, 0x43, 0x4c, 0xcf, 0x4e, 0xa0, 0x61, 0xd1, 0xa1, 0xae, 0xee, 0x70, 0x79, 0x79, 0x09, 0x2d, 0x15, 0xa2, 0x28, 0x09, 0xce, 0x95, 0xd2, 0x18, 0x1b, 0x75, 0xea, 0x9d, 0xc9, 0x76, 0x06, 0x27, 0x8a, 0xa7, 0x4f, 0x9f, 0x62, 0xb6, 0x5a, 0x58, 0x3f, 0x0d, 0xa3, 0x42, 0x63, 0xea, 0x39, 0x15, 0x8c, 0x31, 0x28, 0xf7, 0x8c, 0xf4, 0xad, 0xa2, 0x83, 0x31, 0x4f, 0x96, 0x41, 0x09, 0x01, 0xa1, 0x24, 0x20, 0x08, 0x92, 0x2c, 0xc5, 0x45, 0xfe, 0x28, 0xc0, 0xcc, 0xd2, 0xc9, 0xd9, 0x0c, 0xb5, 0x1a, 0x70, 0x9e, 0xc6, 0xb6, 0x69, 0xa3, 0x34, 0xec, 0x9e, 0xdf, 0x15, 0x78, 0xe3, 0xc3, 0x43, 0x86, 0xc3, 0x21, 0xce, 0xcf, 0xcf, 0x91, 0x67, 0x19, 0xae, 0x5e, 0xbf, 0xb1, 0x29, 0x96, 0xa1, 0xf8, 0xd3, 0xe0, 0x91, 0x0f, 0x6c, 0xf5, 0xd8, 0xda, 0xbd, 0x8f, 0xa3, 0xf1, 0xc8, 0x4e, 0xc3, 0x4a, 0x01, 0xda, 0x6a, 0xe4, 0x89, 0x9b, 0xd4, 0x07, 0x67, 0x19, 0xf8, 0x38, 0x0b, 0xe7, 0xe4, 0xfd, 0xc2, 0xaa, 0x41, 0x3a, 0x29, 0x21, 0x2a, 0x11, 0x8c, 0xbf, 0x84, 0x10, 0xb8, 0xb9, 0x9e, 0x43, 0x76, 0x4b, 0x3c, 0x7a, 0x34, 0xc1, 0x78, 0x38, 0x09, 0x4d, 0x9f, 0x94, 0x5d, 0xf0, 0xaa, 0xf7, 0xfb, 0xfb, 0xbe, 0xfc, 0xf9, 0xfb, 0x9b, 0x46, 0x6d, 0x1b, 0x3d, 0x0f, 0x53, 0xf8, 0x1d, 0xbb, 0x51, 0x1a, 0xe3, 0xf1, 0x18, 0xca, 0x27, 0xb4, 0x91, 0xde, 0x10, 0xeb, 0x92, 0xdc, 0x3c, 0xef, 0xc1, 0x68, 0xdb, 0x10, 0x69, 0x18, 0x98, 0xb0, 0x56, 0x25, 0x48, 0x59, 0xfa, 0x20, 0x43, 0xdd, 0x96, 0x1a, 0x5b, 0xe7, 0x8e, 0x47, 0x29, 0xce, 0x2f, 0x4e, 0xd1, 0xd5, 0x43, 0x48, 0x61, 0xdd, 0x26, 0x79, 0x1c, 0x73, 0x24, 0x49, 0x14, 0xac, 0x14, 0x85, 0xf0, 0xc5, 0x03, 0x21, 0xaa, 0x8d, 0x73, 0xea, 0xba, 0x02, 0x09, 0x21, 0x2c, 0xe3, 0xd8, 0xee, 0x0e, 0xb3, 0x1d, 0x06, 0xf8, 0xae, 0x1e, 0x11, 0x81, 0xe5, 0xb8, 0x8d, 0x06, 0x25, 0x50, 0x8a, 0xec, 0x18, 0xc5, 0xec, 0x1b, 0xca, 0xec, 0xbb, 0xb6, 0xed, 0xa3, 0x05, 0x7e, 0x6f, 0x60, 0xbb, 0xce, 0x34, 0x30, 0xe0, 0xfb, 0x9a, 0x75, 0xbf, 0x33, 0xf4, 0x85, 0xbf, 0x6f, 0xd0, 0x12, 0xf6, 0x0e, 0xe3, 0x31, 0xea, 0xba, 0x7e, 0xa0, 0x95, 0x0f, 0x04, 0x8f, 0x03, 0x52, 0xaf, 0x7d, 0x9d, 0x78, 0x7f, 0x32, 0xdf, 0xb7, 0x8a, 0xf5, 0x30, 0xbc, 0xff, 0xbe, 0xde, 0x42, 0xd7, 0x77, 0xcb, 0x5e, 0x52, 0x77, 0x28, 0x2c, 0xa5, 0x2f, 0x2d, 0x7b, 0x18, 0xbb, 0xb7, 0xfd, 0x5d, 0x57, 0x5f, 0x9e, 0xf7, 0xbc, 0xdf, 0x88, 0xec, 0xab, 0x0f, 0xa8, 0xd1, 0x41, 0x6e, 0xc8, 0xa8, 0x85, 0x72, 0x28, 0x24, 0x60, 0x14, 0x8c, 0x96, 0xa8, 0xab, 0x0a, 0xda, 0x08, 0x74, 0xdd, 0x0a, 0x75, 0xb3, 0x80, 0x12, 0x25, 0x0c, 0xa4, 0x8d, 0x9d, 0x35, 0x12, 0x75, 0xb3, 0x70, 0x0d, 0x11, 0x47, 0x5e, 0x70, 0x70, 0x9e, 0x40, 0x9b, 0x18, 0x5a, 0x4b, 0x50, 0x6a, 0x59, 0xc6, 0x6d, 0xb3, 0x46, 0xd3, 0x74, 0xd0, 0x8a, 0x20, 0x8e, 0x73, 0x37, 0x4d, 0x16, 0xe0, 0x2c, 0xc6, 0x6c, 0xf5, 0x09, 0x2e, 0x2e, 0x2e, 0xf0, 0xf8, 0xf1, 0x63, 0xe4, 0xb9, 0xdd, 0xe7, 0xce, 0xe7, 0x73, 0x5c, 0x5f, 0x5f, 0x63, 0xbd, 0x5e, 0xe3, 0xf8, 0xf8, 0x38, 0xdc, 0x5b, 0x3e, 0x20, 0xc2, 0x37, 0x2a, 0x55, 0x8f, 0x5c, 0xa3, 0x94, 0xc2, 0x70, 0x38, 0xc4, 0x93, 0x27, 0x4f, 0x30, 0x99, 0x4c, 0x42, 0xc1, 0xbc, 0xbb, 0xbb, 0x0b, 0x07, 0xdb, 0xd5, 0xd5, 0xd5, 0xce, 0x0a, 0x64, 0xb5, 0xb2, 0xd3, 0xed, 0xcd, 0xcd, 0x0d, 0x16, 0x8b, 0x25, 0x92, 0x24, 0x46, 0x59, 0x96, 0x21, 0x78, 0xc5, 0x18, 0x83, 0xa3, 0x63, 0x6b, 0x0b, 0x59, 0x55, 0x55, 0xd8, 0xb5, 0x0b, 0x61, 0x89, 0x6c, 0xe3, 0xf1, 0x38, 0xc0, 0xed, 0x7d, 0x7b, 0x62, 0x9f, 0x2e, 0xf5, 0xf4, 0xe9, 0x53, 0xcc, 0x66, 0x73, 0xac, 0xd7, 0xeb, 0x70, 0x80, 0xd4, 0x75, 0xbd, 0xf3, 0x9e, 0x57, 0xf5, 0x1a, 0x45, 0x51, 0xa0, 0xaa, 0xaa, 0xe0, 0x60, 0x56, 0x14, 0x45, 0x60, 0xb0, 0xfb, 0x78, 0xcf, 0xc5, 0x62, 0x81, 0xbb, 0xbb, 0x7b, 0x10, 0x1b, 0xa7, 0x8d, 0x3c, 0xb7, 0x88, 0xc0, 0xc9, 0xc9, 0xc9, 0xce, 0x3d, 0xd2, 0x75, 0x1d, 0xee, 0xef, 0xef, 0x21, 0x84, 0xc0, 0x68, 0x34, 0x0a, 0xf2, 0xa3, 0x3e, 0x42, 0x91, 0xa6, 0x29, 0x96, 0xcb, 0x25, 0x3e, 0xfd, 0xf4, 0x53, 0xa4, 0x8e, 0xb4, 0xe4, 0xd5, 0x20, 0xab, 0xd5, 0x6a, 0x27, 0xfe, 0xf7, 0xe6, 0xa6, 0x41, 0x9e, 0x03, 0x55, 0xd5, 0x60, 0xbd, 0x7e, 0x15, 0x9e, 0x25, 0xbb, 0xbe, 0x11, 0x41, 0x2a, 0xc6, 0x39, 0x07, 0x4f, 0x23, 0x48, 0xad, 0x21, 0x55, 0x07, 0xe5, 0xee, 0xf3, 0xdb, 0xdb, 0x5b, 0xeb, 0xc3, 0xed, 0x54, 0x09, 0x71, 0x6c, 0x61, 0xe8, 0xb2, 0xb1, 0xbc, 0x00, 0x45, 0x14, 0xb2, 0x28, 0x85, 0x84, 0x84, 0x16, 0x0a, 0x59, 0x66, 0x49, 0x80, 0xaa, 0x93, 0xd8, 0xac, 0xcb, 0x40, 0x04, 0x82, 0x8d, 0xc1, 0x80, 0x34, 0x12, 0x54, 0x1b, 0x68, 0xd8, 0xec, 0xf5, 0xe5, 0x7c, 0x09, 0x9e, 0x26, 0x88, 0x4c, 0x0a, 0x16, 0x47, 0x3b, 0x08, 0x9a, 0xd4, 0x06, 0xcc, 0x90, 0xb0, 0xa7, 0xf4, 0xc8, 0xdb, 0xf6, 0xd9, 0x26, 0x20, 0x9c, 0x02, 0xda, 0xbe, 0xfe, 0xb2, 0xb6, 0x3a, 0xfe, 0x38, 0x4b, 0x03, 0xb9, 0x4c, 0xc6, 0x16, 0x52, 0x65, 0xac, 0x67, 0xe8, 0x04, 0x1f, 0x9b, 0x4c, 0x70, 0x7a, 0x7a, 0x6a, 0xb3, 0xae, 0xa9, 0x9d, 0xfa, 0x26, 0xc7, 0x47, 0xe8, 0x44, 0x63, 0xa7, 0x4d, 0x2d, 0xd0, 0xb6, 0xd6, 0xcd, 0x2b, 0x73, 0xbe, 0x03, 0x6d, 0xdb, 0x62, 0xdd, 0xd8, 0x78, 0x5b, 0xa3, 0x09, 0x84, 0x16, 0xc8, 0xa2, 0x04, 0x86, 0x69, 0x2c, 0x16, 0x1b, 0xdc, 0xdf, 0x01, 0x59, 0x56, 0xe3, 0xc9, 0x93, 0x31, 0x8e, 0x4f, 0x4e, 0xb0, 0xa8, 0x6b, 0xa7, 0x3e, 0xe9, 0xa1, 0x98, 0x64, 0x4b, 0xa4, 0xbd, 0xbe, 0xbe, 0x46, 0x67, 0xec, 0xf9, 0xa7, 0x7b, 0x13, 0x72, 0x51, 0x14, 0x38, 0x9e, 0x1e, 0x61, 0x79, 0x7b, 0x1d, 0xce, 0xa8, 0x10, 0x3b, 0xad, 0xa4, 0x45, 0x47, 0x78, 0x04, 0xad, 0xb4, 0x45, 0x58, 0xb4, 0xb6, 0xd1, 0xab, 0x2e, 0x71, 0xae, 0x2e, 0x6d, 0xc3, 0x6e, 0x11, 0x03, 0x09, 0xc6, 0xad, 0xb1, 0x98, 0x92, 0xb0, 0x90, 0xba, 0xe8, 0x2c, 0xe3, 0x7d, 0x8f, 0x88, 0xb8, 0x1f, 0x8c, 0x13, 0xf6, 0xf8, 0xae, 0xa8, 0x55, 0x55, 0x85, 0xa6, 0xaa, 0xc1, 0x4f, 0x4e, 0x51, 0x14, 0x05, 0x6a, 0xd5, 0x84, 0x09, 0xdd, 0x40, 0xd9, 0x15, 0x29, 0xb1, 0x89, 0x6f, 0xc1, 0x02, 0x5c, 0x48, 0x40, 0x6b, 0xc4, 0xce, 0x84, 0xa5, 0xad, 0x6a, 0x48, 0xda, 0x22, 0x62, 0x1c, 0x75, 0xbb, 0xc6, 0xe3, 0xc7, 0x8f, 0x31, 0x99, 0x4e, 0x51, 0xb7, 0x15, 0x96, 0xeb, 0x75, 0x50, 0x4d, 0xb4, 0x6d, 0x8b, 0xb6, 0xeb, 0x50, 0x0c, 0x06, 0x18, 0x8d, 0x6a, 0xcc, 0xe7, 0xa5, 0x4b, 0xc8, 0x94, 0xc1, 0xeb, 0xdf, 0x18, 0x15, 0x76, 0xdf, 0x71, 0x1c, 0xdb, 0xd9, 0x86, 0x33, 0x34, 0x6e, 0x5d, 0xb5, 0xb5, 0xb8, 0x7d, 0x97, 0xf5, 0x30, 0x0d, 0xc6, 0x33, 0xde, 0x1a, 0x96, 0x13, 0x66, 0x95, 0x07, 0x84, 0xda, 0xb3, 0xc7, 0xd5, 0xa5, 0x75, 0xbd, 0x46, 0x63, 0xd4, 0xc1, 0x06, 0xc8, 0xc7, 0xa9, 0x7a, 0xa3, 0x3c, 0xa3, 0x4d, 0x2f, 0x09, 0xb3, 0x37, 0xe8, 0xed, 0xd5, 0xa2, 0xf9, 0x7c, 0x8e, 0xf1, 0x68, 0x84, 0xf1, 0xa0, 0x40, 0x55, 0x96, 0xb8, 0xbe, 0xbe, 0x06, 0xf7, 0x04, 0xaa, 0xfd, 0xe0, 0x11, 0x00, 0x41, 0xea, 0xe3, 0xf7, 0x6f, 0xfd, 0xe9, 0xd8, 0x3f, 0xc8, 0xfd, 0xe9, 0x7d, 0x9f, 0x71, 0xed, 0x21, 0xbc, 0xfd, 0x68, 0x50, 0x5f, 0x2c, 0x3b, 0x47, 0xdb, 0xdf, 0x9f, 0xcc, 0xfd, 0xbf, 0x7b, 0x82, 0xd3, 0x3e, 0xeb, 0xdb, 0xc3, 0xb4, 0xfd, 0x22, 0xdb, 0x37, 0xb0, 0xf7, 0x76, 0x87, 0xfd, 0x15, 0x40, 0x7f, 0x4a, 0xf7, 0x7f, 0xef, 0x0f, 0xd7, 0xbe, 0xe4, 0xab, 0x2f, 0xa9, 0xf3, 0x6b, 0x86, 0x7e, 0x11, 0xec, 0x5f, 0x87, 0x38, 0x4e, 0x1e, 0x34, 0x21, 0x7d, 0xc6, 0x7d, 0x5f, 0xae, 0xd7, 0x6f, 0x0e, 0x0e, 0x99, 0xbf, 0xf4, 0xe1, 0xff, 0xbe, 0x53, 0xdd, 0xa1, 0x95, 0xc4, 0x76, 0x12, 0x79, 0x98, 0xb3, 0x7b, 0xa8, 0x41, 0xd8, 0xd7, 0xbd, 0x6f, 0xaf, 0x5b, 0x6d, 0x9d, 0x89, 0x1d, 0x17, 0xd2, 0x68, 0x01, 0x69, 0x5a, 0x1b, 0x5f, 0x6a, 0x24, 0xea, 0xea, 0x0e, 0x8c, 0x03, 0x20, 0x0d, 0x28, 0x1a, 0xb0, 0xd8, 0xa6, 0xa0, 0x31, 0x66, 0x1b, 0xc0, 0xd3, 0xc9, 0xb1, 0xbb, 0xd6, 0x16, 0xc2, 0xea, 0x44, 0x0b, 0x29, 0xba, 0x60, 0xb4, 0x7d, 0x7c, 0x74, 0xee, 0x26, 0xc3, 0x35, 0x78, 0x12, 0x63, 0x38, 0x1c, 0x23, 0x8a, 0x12, 0xd4, 0x55, 0x89, 0xcd, 0xe6, 0x1a, 0x69, 0x01, 0x94, 0x9b, 0x15, 0x3e, 0xff, 0xac, 0xd9, 0x41, 0x55, 0x26, 0xe3, 0x21, 0x2e, 0xce, 0x4f, 0xf1, 0xfa, 0xf5, 0x6b, 0x47, 0xba, 0x74, 0x0a, 0x88, 0xae, 0x41, 0xd7, 0xd6, 0xa1, 0xc0, 0xfe, 0xc4, 0x4f, 0xfc, 0x04, 0xe2, 0x38, 0xc6, 0x7c, 0x3e, 0xc7, 0xab, 0x57, 0xaf, 0xf0, 0xe6, 0xf5, 0x2b, 0xc0, 0xa8, 0x10, 0xd5, 0xf9, 0xe8, 0xe2, 0x2c, 0x04, 0x95, 0x78, 0x8d, 0xb6, 0x8d, 0xe1, 0xb5, 0x8d, 0xd6, 0xe5, 0xe5, 0xa5, 0xcb, 0xbd, 0x27, 0x21, 0x93, 0xd8, 0xaf, 0x98, 0xe2, 0x38, 0xc6, 0xeb, 0xd7, 0xaf, 0x31, 0x9f, 0x2f, 0x20, 0x25, 0x30, 0x9d, 0x0e, 0x30, 0x99, 0x4c, 0x76, 0x78, 0x10, 0xc3, 0xf1, 0x14, 0xa3, 0xd1, 0x28, 0x40, 0xea, 0x1e, 0xea, 0x97, 0x52, 0xa2, 0x6a, 0x1b, 0x0c, 0x32, 0x2b, 0xa5, 0x93, 0x52, 0x06, 0x22, 0xda, 0x74, 0x3a, 0x45, 0x96, 0x65, 0x58, 0xaf, 0xd7, 0x61, 0xea, 0xf5, 0xf1, 0xa4, 0xde, 0xea, 0x76, 0x3c, 0x1e, 0x63, 0x30, 0x18, 0x58, 0x88, 0x98, 0x73, 0xac, 0xd7, 0x6b, 0xdc, 0xdc, 0xdc, 0x58, 0x4f, 0x70, 0x17, 0xe4, 0xc0, 0x39, 0xc7, 0x66, 0x5d, 0x6d, 0xa1, 0xf0, 0x8c, 0x23, 0x8e, 0x52, 0x10, 0x30, 0x74, 0x6d, 0x8d, 0xae, 0x95, 0x10, 0x9d, 0xb2, 0x24, 0x23, 0x4d, 0x2c, 0x77, 0x42, 0x1a, 0x74, 0x9d, 0x40, 0x55, 0x36, 0xce, 0xe7, 0x80, 0x40, 0xeb, 0x85, 0x2b, 0xd2, 0x04, 0x6d, 0x2b, 0x5c, 0x23, 0x18, 0x21, 0xcb, 0x0a, 0x7c, 0xf0, 0x01, 0x0b, 0xcf, 0xc1, 0x72, 0xb9, 0x0c, 0xaa, 0x15, 0x9b, 0x6d, 0x9e, 0xe1, 0xe6, 0xc6, 0xa2, 0x36, 0x9d, 0x51, 0x98, 0x9c, 0x4c, 0x41, 0x1c, 0xf3, 0x99, 0x68, 0x13, 0x08, 0x84, 0x45, 0x31, 0xc4, 0x74, 0x34, 0x46, 0xd3, 0x58, 0xe2, 0x61, 0x23, 0x15, 0xc0, 0x9c, 0x2e, 0x99, 0x44, 0x30, 0x4a, 0x21, 0x71, 0x04, 0xa6, 0x24, 0x8a, 0xed, 0xa1, 0xc4, 0x39, 0x68, 0x64, 0xa5, 0x90, 0xcc, 0xd9, 0x0f, 0x6f, 0x9d, 0xe0, 0x5c, 0xd1, 0xe0, 0x6c, 0xe7, 0xfc, 0xe9, 0x0f, 0x05, 0x16, 0xb0, 0x24, 0x60, 0xc6, 0x9e, 0x65, 0x9c, 0xb2, 0x60, 0x29, 0xec, 0xa3, 0x34, 0xed, 0x01, 0x4c, 0x77, 0xd0, 0x2b, 0x29, 0x01, 0x55, 0x37, 0xe0, 0x9b, 0x8d, 0x9d, 0xb4, 0x27, 0x09, 0x28, 0x63, 0xa0, 0x2e, 0xf3, 0xc1, 0xa7, 0x93, 0xf9, 0x67, 0x2f, 0xcf, 0x07, 0x78, 0x7d, 0xfd, 0x06, 0xad, 0x92, 0x90, 0x44, 0x63, 0x7a, 0x72, 0xec, 0x1a, 0xfd, 0x0e, 0x94, 0x12, 0x08, 0xd1, 0x02, 0xc6, 0x0e, 0x3e, 0xe3, 0xd1, 0xd4, 0x22, 0x3f, 0xab, 0x35, 0xaa, 0xa6, 0xb6, 0xc6, 0x47, 0x46, 0x41, 0x33, 0x8b, 0xa6, 0x3c, 0x7d, 0x7a, 0x81, 0x27, 0x8f, 0x34, 0xb8, 0xd3, 0xb4, 0xf7, 0xd1, 0xb9, 0x7d, 0xf4, 0xce, 0x17, 0xf6, 0xe5, 0xfd, 0x3d, 0xe2, 0x22, 0x73, 0xd3, 0xbb, 0xd9, 0x39, 0x43, 0x02, 0x87, 0xa7, 0x27, 0x39, 0x0e, 0x93, 0xa7, 0xbb, 0xdf, 0xb5, 0x92, 0x48, 0x73, 0x1b, 0x6d, 0x7a, 0x7c, 0x74, 0x04, 0x29, 0x25, 0xae, 0xaf, 0xaf, 0x51, 0x35, 0xa5, 0x1d, 0x06, 0xa8, 0x6d, 0x9e, 0xec, 0xbe, 0x9f, 0x41, 0x4b, 0x05, 0xe1, 0x26, 0x7d, 0x8b, 0x0b, 0x93, 0x2f, 0x9d, 0xd0, 0xfd, 0x6b, 0xd9, 0x6c, 0xac, 0xb7, 0xc3, 0xf9, 0xf9, 0x39, 0xb4, 0x54, 0xc1, 0xf0, 0x87, 0xfa, 0x46, 0x49, 0xeb, 0x90, 0x21, 0x4e, 0x29, 0x05, 0x77, 0x0d, 0xa5, 0x6c, 0x3b, 0x18, 0xad, 0x11, 0x73, 0x8e, 0x22, 0x2b, 0x90, 0xf1, 0x18, 0xba, 0x53, 0x10, 0x6d, 0x87, 0xae, 0x6b, 0x50, 0x71, 0x89, 0xcf, 0x5f, 0xbd, 0x42, 0xd7, 0x75, 0x58, 0x39, 0x13, 0x9c, 0xc1, 0x68, 0x68, 0x25, 0x90, 0xce, 0x99, 0x6e, 0x38, 0x1c, 0xe2, 0xe8, 0xe4, 0x18, 0x49, 0x92, 0x58, 0xd5, 0x14, 0xe1, 0x58, 0x76, 0x1d, 0xea, 0xa6, 0x41, 0x1c, 0x31, 0xcb, 0xb9, 0xea, 0x0d, 0x0a, 0x71, 0x1c, 0x3d, 0x08, 0x1d, 0x7b, 0x67, 0x41, 0xf7, 0x9e, 0x2d, 0xc6, 0xae, 0x19, 0xa8, 0x63, 0xb6, 0x27, 0x8c, 0x83, 0x1b, 0x82, 0x66, 0x53, 0xa3, 0x70, 0x67, 0x09, 0xeb, 0x18, 0x74, 0x27, 0xac, 0x97, 0x3d, 0xb7, 0x48, 0x9e, 0x71, 0x52, 0x60, 0x62, 0x00, 0x43, 0x3d, 0x52, 0x6a, 0x05, 0xc2, 0xd4, 0x0d, 0x8c, 0x40, 0x2f, 0xf6, 0xda, 0x71, 0xd4, 0xac, 0x27, 0x0c, 0x05, 0x11, 0x06, 0x52, 0x76, 0x90, 0x8c, 0x22, 0x8a, 0x38, 0xce, 0xce, 0x4e, 0xc1, 0x41, 0xac, 0xb6, 0x2d, 0xbc, 0x11, 0xd4, 0x3e, 0x0c, 0x5a, 0x6b, 0x30, 0x4e, 0x41, 0x34, 0xec, 0x7f, 0x09, 0x41, 0x9c, 0x38, 0x7b, 0xc0, 0xd8, 0xee, 0x33, 0xdb, 0xae, 0x79, 0x78, 0xa3, 0xf5, 0x20, 0x65, 0xd9, 0x88, 0x77, 0x16, 0x23, 0x00, 0xa0, 0x4e, 0xc6, 0xd2, 0xff, 0xdd, 0x9f, 0x76, 0xf7, 0x27, 0xe5, 0xfd, 0x84, 0x37, 0xdf, 0xfd, 0xf5, 0x8b, 0xed, 0xfe, 0x54, 0x5a, 0xd7, 0x75, 0x68, 0x2c, 0x7c, 0x71, 0xf7, 0xc1, 0x1f, 0x7e, 0x82, 0xee, 0x9b, 0xb1, 0xf4, 0xf9, 0x00, 0xfb, 0x10, 0xfb, 0xfe, 0xa1, 0xa1, 0x35, 0x79, 0xd0, 0x90, 0xf4, 0x1b, 0x04, 0xdf, 0x54, 0xf8, 0x89, 0xc7, 0x37, 0x35, 0x1e, 0x16, 0xed, 0x5b, 0xbf, 0xf6, 0xe1, 0xc0, 0x43, 0x3b, 0xef, 0x7d, 0xf9, 0x99, 0x6d, 0x28, 0xa2, 0x83, 0x3b, 0xf2, 0x7e, 0x34, 0xeb, 0xfe, 0xf5, 0xed, 0x7f, 0x7e, 0x96, 0x18, 0x18, 0x23, 0xa0, 0x94, 0x80, 0x94, 0x1d, 0xda, 0x6e, 0x03, 0x29, 0xd6, 0xe8, 0xc4, 0x06, 0x4a, 0x75, 0x88, 0x22, 0x01, 0x16, 0x45, 0x88, 0x62, 0x38, 0x89, 0x1e, 0x45, 0xc4, 0xec, 0xbe, 0x47, 0x6b, 0x8d, 0x57, 0x0e, 0x66, 0x0e, 0xcc, 0xcc, 0x38, 0x47, 0x96, 0x0e, 0xc2, 0x9a, 0xe6, 0xb3, 0xcf, 0x3e, 0x09, 0x30, 0x74, 0x1c, 0xc7, 0xd0, 0xa6, 0x83, 0x36, 0x06, 0x47, 0x27, 0x05, 0x9e, 0xbf, 0x38, 0x03, 0xc8, 0x36, 0x45, 0xcf, 0xfb, 0x21, 0x28, 0xa5, 0x82, 0x5d, 0xa9, 0xef, 0xa4, 0x3d, 0x5c, 0x9d, 0xe7, 0x79, 0xcf, 0x25, 0x8e, 0x61, 0x36, 0x9b, 0x39, 0x69, 0x57, 0x81, 0xaf, 0x7e, 0xf5, 0xab, 0x01, 0x9e, 0x7f, 0xfb, 0xf6, 0x6d, 0x80, 0xb1, 0x97, 0xcb, 0x65, 0x80, 0xca, 0xbd, 0x01, 0x0b, 0xa5, 0x14, 0x93, 0x89, 0xf5, 0x15, 0x3f, 0x3b, 0x3b, 0xb3, 0xfb, 0x40, 0x67, 0xf0, 0x32, 0x1a, 0x8d, 0x6c, 0xf2, 0x91, 0x10, 0x90, 0x2a, 0xc2, 0x7b, 0xef, 0x3d, 0x0f, 0xf7, 0x8c, 0xbf, 0x4f, 0x16, 0x8b, 0x05, 0xee, 0xef, 0x4b, 0x24, 0x19, 0xc7, 0x57, 0xbe, 0xf2, 0x15, 0xab, 0x89, 0x9f, 0xcd, 0xa0, 0xb5, 0xc6, 0xc9, 0xc9, 0x49, 0x60, 0xf5, 0x7a, 0x38, 0xd0, 0x6b, 0xba, 0xfd, 0xeb, 0x37, 0xc6, 0xe0, 0xe4, 0xe4, 0x04, 0x51, 0x6c, 0x7d, 0x11, 0xd2, 0x34, 0x41, 0x14, 0x6d, 0x43, 0x6a, 0x56, 0xab, 0x65, 0x38, 0xd0, 0xab, 0xaa, 0xc4, 0x64, 0x32, 0xc1, 0x60, 0x50, 0xe0, 0xf3, 0xcf, 0x3f, 0xdf, 0x61, 0xfa, 0x8f, 0xc7, 0xe3, 0xf0, 0x0c, 0x24, 0x49, 0x12, 0x92, 0x9a, 0x7c, 0x5a, 0x93, 0x87, 0x3d, 0x3d, 0x07, 0xc0, 0x37, 0x1e, 0x94, 0x52, 0x5c, 0x5c, 0x5c, 0x60, 0xb1, 0xbc, 0xc7, 0x62, 0xb1, 0xc0, 0x66, 0x53, 0x86, 0xa2, 0x6e, 0x21, 0x7a, 0xcb, 0xb0, 0x7f, 0xf6, 0xec, 0x99, 0x8d, 0xc6, 0x8c, 0x13, 0x3c, 0x7f, 0xfe, 0x1e, 0x18, 0x63, 0x58, 0xaf, 0xd7, 0x58, 0xaf, 0x6d, 0xc1, 0x9b, 0x4c, 0x38, 0x64, 0xbf, 0x69, 0x0d, 0xf7, 0xd9, 0xd6, 0xc9, 0xd1, 0x23, 0x59, 0xcb, 0xe5, 0x12, 0xcb, 0x75, 0x89, 0x38, 0x2f, 0xac, 0x7d, 0x6d, 0x1c, 0xa1, 0x69, 0xa5, 0xb5, 0x8f, 0x75, 0x86, 0x23, 0x55, 0x55, 0xe1, 0x3b, 0xdf, 0xb9, 0xc6, 0xe3, 0xc7, 0xff, 0x3f, 0x63, 0x6f, 0xb6, 0x23, 0x49, 0x92, 0xa5, 0xe9, 0x7d, 0x22, 0xba, 0xab, 0xda, 0xee, 0x7b, 0x2c, 0xb9, 0x74, 0x65, 0x57, 0x55, 0x56, 0x77, 0x4f, 0x71, 0xa6, 0xd1, 0x04, 0xe6, 0x6a, 0x78, 0xc5, 0x17, 0xe1, 0x0d, 0x2f, 0xf9, 0x08, 0xf3, 0x58, 0x04, 0xf9, 0x06, 0x0d, 0xf4, 0x05, 0x89, 0xee, 0x41, 0x15, 0x26, 0xb7, 0xc8, 0xc8, 0x88, 0xf0, 0xcd, 0xcc, 0xdc, 0x56, 0x5d, 0x45, 0x84, 0x17, 0xa2, 0x22, 0xa6, 0xee, 0x11, 0x8d, 0x61, 0x00, 0x81, 0xaa, 0x88, 0xf4, 0xb0, 0x55, 0x55, 0xce, 0x39, 0xff, 0xf9, 0x97, 0x8c, 0xb7, 0x6f, 0xdf, 0x72, 0x58, 0x6d, 0xd0, 0x38, 0x66, 0x76, 0x7f, 0xa8, 0x05, 0xce, 0x8a, 0x3a, 0x26, 0x23, 0x42, 0x09, 0xeb, 0x94, 0xd6, 0x0d, 0xdc, 0x13, 0xfd, 0xea, 0x4b, 0xda, 0x70, 0x11, 0xa4, 0x21, 0x4a, 0x7a, 0x83, 0x15, 0xb7, 0xff, 0x54, 0x1d, 0x6d, 0xd9, 0x10, 0x05, 0xd6, 0xfd, 0x2d, 0x8e, 0x63, 0x16, 0x8b, 0x09, 0x04, 0x96, 0x38, 0x27, 0x84, 0xe0, 0x48, 0xf9, 0xac, 0xd9, 0x96, 0x2f, 0x25, 0x46, 0x4d, 0xc9, 0xf2, 0xb1, 0xa1, 0xd6, 0x10, 0xa4, 0xd0, 0xb4, 0x55, 0x5f, 0x4c, 0x14, 0x69, 0x1a, 0x93, 0x04, 0x29, 0x75, 0x69, 0x15, 0x00, 0x5d, 0x6b, 0x79, 0x20, 0x9d, 0xb6, 0xbe, 0xdd, 0x48, 0x81, 0xe8, 0xa7, 0xce, 0x4e, 0xf5, 0x4d, 0x64, 0x16, 0x21, 0xa5, 0x1d, 0x34, 0x54, 0xd3, 0xd8, 0x66, 0xa2, 0xf7, 0x5e, 0x0f, 0x02, 0x0b, 0x37, 0x0b, 0x44, 0x1f, 0x58, 0x72, 0xca, 0xa9, 0x50, 0x03, 0xfe, 0x90, 0x43, 0x27, 0xab, 0x63, 0xc9, 0x28, 0x0e, 0xad, 0xcd, 0xd7, 0xe0, 0xfe, 0x0f, 0x02, 0xcb, 0xb6, 0x97, 0x52, 0x12, 0x67, 0x96, 0x57, 0xb1, 0xd9, 0xef, 0x9e, 0xf9, 0x7f, 0x04, 0xb1, 0x95, 0x27, 0x76, 0x75, 0x43, 0xd3, 0xb5, 0x48, 0x61, 0x88, 0x7a, 0xed, 0xbe, 0x31, 0x06, 0x11, 0xd8, 0xac, 0xf7, 0xa6, 0xee, 0xbe, 0xe8, 0x78, 0xf9, 0xd2, 0xcb, 0x24, 0x4d, 0x53, 0xd2, 0x24, 0xa1, 0xcc, 0x0b, 0xd6, 0xcb, 0x15, 0x46, 0xf7, 0x6b, 0xd2, 0x2c, 0xfc, 0x2c, 0xb0, 0x4a, 0xc8, 0xd3, 0x70, 0x12, 0xa5, 0x09, 0xd2, 0x40, 0x1a, 0x46, 0xa4, 0x49, 0x4a, 0x8c, 0xa4, 0xeb, 0xa0, 0x53, 0x9a, 0xae, 0x6e, 0x38, 0xbf, 0xbe, 0xb4, 0x2a, 0x92, 0x83, 0x65, 0xd3, 0x47, 0x49, 0xdc, 0x37, 0xe5, 0x0d, 0x04, 0x92, 0x28, 0x4d, 0x7c, 0xb3, 0x5c, 0xb7, 0x56, 0x29, 0x40, 0x7c, 0x42, 0xa4, 0x86, 0x99, 0x21, 0xca, 0x18, 0xea, 0xb6, 0x21, 0x4a, 0x13, 0x3f, 0x20, 0xb6, 0x2f, 0x54, 0x4c, 0x5f, 0x8a, 0x9f, 0x96, 0xf4, 0xc5, 0x18, 0x08, 0x85, 0x0d, 0xe5, 0xc9, 0x92, 0x94, 0x50, 0x48, 0xca, 0xde, 0xea, 0x38, 0x8a, 0x22, 0xd2, 0x2e, 0xe5, 0xa8, 0x5a, 0xea, 0xde, 0x7e, 0x58, 0x4a, 0xe9, 0xfd, 0xa3, 0xfb, 0x68, 0x8c, 0xe7, 0x6b, 0xe7, 0xfe, 0x7a, 0x1b, 0x22, 0xbe, 0x5a, 0x39, 0xb2, 0xba, 0xad, 0x5f, 0x8b, 0x6c, 0x7a, 0xe2, 0x69, 0x85, 0x36, 0xc0, 0x2a, 0x7c, 0xe9, 0x54, 0x36, 0x8c, 0xd0, 0x1c, 0x12, 0xb9, 0x86, 0x66, 0x2b, 0x6e, 0xef, 0x39, 0xec, 0xfa, 0x5c, 0xb1, 0x1b, 0x26, 0x7b, 0xb9, 0x9f, 0x7d, 0xa9, 0xb7, 0xf6, 0x96, 0xa8, 0x04, 0xcf, 0xa0, 0xe5, 0x97, 0x3b, 0xe7, 0xb2, 0x8f, 0xb5, 0x1b, 0x12, 0xed, 0x9c, 0xa9, 0x4d, 0x55, 0x55, 0x8c, 0xc6, 0xe1, 0x33, 0x63, 0x7f, 0xb7, 0x8f, 0x1f, 0xee, 0xe0, 0x1d, 0x41, 0xcd, 0xc1, 0x9e, 0xc3, 0x34, 0x37, 0x4f, 0x7e, 0x1a, 0x10, 0xdd, 0xdc, 0x6b, 0x79, 0x99, 0x12, 0x37, 0x6c, 0x38, 0x86, 0x79, 0xc1, 0x43, 0x14, 0x60, 0xd8, 0xa9, 0xbe, 0x6c, 0x42, 0xbe, 0x34, 0xbd, 0x3b, 0x04, 0xe0, 0xdf, 0x83, 0xcc, 0x87, 0xf0, 0xec, 0xf0, 0x86, 0xf4, 0x7b, 0x3d, 0xc5, 0x17, 0x2d, 0x74, 0x87, 0x1c, 0x81, 0x7f, 0x6f, 0xf7, 0x63, 0x8c, 0xa1, 0xd3, 0x3b, 0xeb, 0xd4, 0x56, 0x97, 0xd4, 0xcd, 0x9e, 0xb6, 0xd9, 0xd1, 0xa9, 0x03, 0x5a, 0x1f, 0x31, 0xa6, 0x43, 0x06, 0xd0, 0xb6, 0x21, 0x46, 0x59, 0x52, 0x86, 0x31, 0x86, 0xa0, 0x67, 0xd0, 0x5b, 0xd3, 0x7d, 0xd8, 0xaf, 0xab, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x3f, 0x6b, 0x6c, 0x11, 0x05, 0x31, 0x82, 0x80, 0xb6, 0xee, 0xa8, 0x7b, 0x38, 0xb5, 0x6d, 0x5b, 0x92, 0xb4, 0x60, 0x32, 0x19, 0x31, 0x1a, 0xe7, 0xb4, 0x6d, 0xc3, 0x6a, 0xf5, 0xc8, 0x6e, 0x7f, 0x24, 0x08, 0xcf, 0x59, 0x9c, 0xe5, 0x84, 0x61, 0xda, 0x23, 0x11, 0x31, 0x79, 0x9e, 0x3e, 0xf3, 0x3d, 0x70, 0xc4, 0x35, 0x7b, 0xdd, 0x77, 0xb4, 0xad, 0xe1, 0x78, 0x3c, 0x35, 0x56, 0x59, 0x36, 0xe6, 0xe2, 0xc2, 0x06, 0x85, 0x3c, 0x3e, 0xde, 0x73, 0x76, 0x76, 0x46, 0xd7, 0x75, 0x2c, 0x97, 0x0f, 0x7e, 0x7f, 0xfb, 0xfe, 0xfd, 0x7b, 0xde, 0xbe, 0x7d, 0x4d, 0x1c, 0xc7, 0x1e, 0xfe, 0xbd, 0xbc, 0xb4, 0xba, 0xf5, 0xcd, 0x66, 0xc3, 0x66, 0xb3, 0xa1, 0x28, 0x0a, 0xa6, 0x53, 0xab, 0x87, 0x5f, 0x2e, 0x97, 0xac, 0x56, 0x2b, 0x4f, 0x32, 0x8b, 0xa2, 0x88, 0x8f, 0x1f, 0x3f, 0x02, 0x70, 0x75, 0x65, 0x3d, 0xd6, 0x37, 0x1b, 0x6b, 0x36, 0xf3, 0xf7, 0x7f, 0xff, 0xf7, 0xdc, 0x3e, 0x2e, 0x79, 0xda, 0x5a, 0xd2, 0xcf, 0xab, 0x37, 0xaf, 0xd9, 0x6c, 0x36, 0xfc, 0xf6, 0xf1, 0x03, 0xe3, 0xf1, 0x98, 0x57, 0xaf, 0x5e, 0xd1, 0x95, 0xad, 0x0d, 0xd2, 0xd8, 0xef, 0x99, 0x4e, 0xa7, 0x14, 0x45, 0xc1, 0xe3, 0xe3, 0x23, 0xab, 0xd5, 0x8a, 0x37, 0x6f, 0xde, 0x10, 0x27, 0x29, 0x65, 0x59, 0x32, 0x99, 0x4c, 0x7c, 0xd3, 0xd2, 0x34, 0x0d, 0xeb, 0xf5, 0xda, 0x93, 0xda, 0xdc, 0x9a, 0x60, 0x3c, 0x1e, 0x73, 0x76, 0x76, 0xe6, 0xaf, 0x4f, 0xeb, 0xca, 0x65, 0xe5, 0x43, 0xd6, 0x19, 0xaf, 0xed, 0x11, 0x35, 0x50, 0xca, 0xa0, 0x94, 0xe1, 0xe3, 0xc7, 0x5b, 0xf2, 0x3c, 0x67, 0x32, 0x99, 0x30, 0x9d, 0xa6, 0x74, 0xdd, 0x92, 0xa6, 0xe9, 0xa1, 0xcf, 0xaa, 0xe1, 0xeb, 0xaf, 0xdf, 0x22, 0xc5, 0x29, 0x2e, 0xd2, 0x5d, 0xb7, 0x65, 0x59, 0xb2, 0xdb, 0x1e, 0xf8, 0xf1, 0xc7, 0x1f, 0xd9, 0xef, 0x15, 0x93, 0x49, 0xc4, 0x62, 0xb1, 0x60, 0x36, 0x9b, 0x91, 0xa6, 0x29, 0x97, 0x97, 0x97, 0xa7, 0x8c, 0x04, 0xad, 0x69, 0xd1, 0x68, 0x69, 0xcd, 0x47, 0xc2, 0x30, 0x44, 0xe8, 0x93, 0xec, 0x68, 0xb9, 0x5c, 0x5a, 0xd5, 0x84, 0xb4, 0x13, 0x5a, 0x98, 0x66, 0x1c, 0x6b, 0xbb, 0x1a, 0x48, 0x22, 0x41, 0x9e, 0xe4, 0xb6, 0xa9, 0x89, 0x52, 0x0e, 0x55, 0x49, 0x10, 0xd8, 0x73, 0xae, 0xeb, 0x34, 0xa3, 0x51, 0x8e, 0x91, 0x27, 0x22, 0x5e, 0xd3, 0xb6, 0xa8, 0xfa, 0xe4, 0x88, 0x36, 0x8d, 0xc7, 0xb4, 0x46, 0xd3, 0xa9, 0xd6, 0x4f, 0xa8, 0xfe, 0xde, 0x40, 0xa0, 0x8c, 0xb2, 0xd2, 0xb0, 0x20, 0xf4, 0x3a, 0x74, 0x97, 0x3a, 0x66, 0xba, 0xd6, 0xdf, 0xbb, 0x5d, 0xd7, 0x41, 0xdf, 0x14, 0xed, 0xcb, 0x23, 0x87, 0xb2, 0xd7, 0xdc, 0x9f, 0xe5, 0xcf, 0x7c, 0x39, 0x84, 0x90, 0x36, 0x74, 0x43, 0x5b, 0x66, 0xf7, 0xd9, 0xe2, 0x82, 0xaf, 0x55, 0x47, 0x27, 0x0c, 0xb5, 0x76, 0x9e, 0x1b, 0x70, 0x3c, 0xee, 0x89, 0xa2, 0x80, 0x46, 0x35, 0x84, 0xa1, 0x24, 0x8c, 0x23, 0x1f, 0x6a, 0x64, 0x0f, 0x66, 0x68, 0x95, 0x22, 0x29, 0x42, 0x74, 0x63, 0xcf, 0xd2, 0xba, 0xeb, 0xd8, 0xb6, 0x1d, 0x5a, 0xdb, 0x41, 0x25, 0x1e, 0x24, 0x55, 0x32, 0x40, 0xe0, 0x8c, 0xb6, 0xb0, 0xb1, 0x6e, 0x3b, 0xb4, 0x31, 0xa8, 0x0a, 0x3a, 0x0c, 0x49, 0x91, 0x79, 0xa9, 0x56, 0x51, 0x14, 0xcc, 0x26, 0x53, 0x4c, 0x5d, 0x52, 0xf6, 0xd7, 0x90, 0xe7, 0xf6, 0x88, 0x10, 0xd5, 0x43, 0xf8, 0x75, 0x5b, 0xb3, 0x3f, 0x5a, 0x87, 0xc1, 0xd5, 0x6a, 0x69, 0xd1, 0xab, 0xfe, 0xdc, 0xaa, 0x9a, 0x0a, 0xa1, 0x34, 0xc7, 0x9e, 0xc7, 0x60, 0xfd, 0xe2, 0x7b, 0xcf, 0x0a, 0x89, 0x8f, 0x4e, 0xfe, 0xd2, 0x3a, 0xd2, 0xbd, 0x56, 0xd7, 0x24, 0xae, 0xd7, 0x6b, 0x1b, 0xff, 0x7a, 0x2c, 0xd9, 0x3e, 0x6d, 0x58, 0x4c, 0x67, 0x36, 0x10, 0xc5, 0x34, 0x3e, 0xad, 0x0d, 0x61, 0x63, 0x6b, 0x8d, 0xd1, 0x27, 0xe9, 0xae, 0xd6, 0x44, 0xd2, 0xfa, 0x89, 0x34, 0xc7, 0x86, 0xa0, 0xd3, 0xc8, 0xb6, 0x9f, 0xe8, 0x3b, 0xc5, 0x7a, 0xbb, 0xa1, 0x6a, 0x2d, 0x6f, 0x26, 0xcd, 0x4f, 0x1c, 0x12, 0x85, 0xa2, 0xc8, 0x2c, 0xb7, 0xa1, 0x6c, 0x6a, 0xbf, 0xae, 0x5b, 0x6f, 0x9e, 0x28, 0xb2, 0x91, 0xad, 0x29, 0x49, 0x0c, 0x5a, 0xf9, 0x82, 0x98, 0x44, 0x11, 0xa6, 0xb4, 0x9f, 0x3d, 0x65, 0xf9, 0xff, 0x2b, 0x3d, 0x91, 0x2f, 0x78, 0xbc, 0xb7, 0x6d, 0x4b, 0xa9, 0x2d, 0x71, 0x2e, 0xe9, 0x1b, 0x2e, 0xc7, 0x53, 0x8b, 0xdb, 0x98, 0xba, 0xed, 0x07, 0x17, 0xec, 0x9a, 0xd3, 0xd9, 0xdd, 0xea, 0xde, 0x63, 0x58, 0x39, 0x69, 0x9c, 0x94, 0xcf, 0x6c, 0x70, 0xb5, 0xb6, 0xfc, 0x02, 0x63, 0xb4, 0xaf, 0xbf, 0x77, 0xdb, 0x3b, 0x2e, 0xce, 0xce, 0x08, 0x27, 0x82, 0x56, 0xdb, 0x95, 0x78, 0xf8, 0x25, 0x78, 0x76, 0x38, 0x51, 0x0e, 0x27, 0xd7, 0xe1, 0x34, 0xeb, 0x26, 0x08, 0x57, 0x9c, 0x5c, 0x31, 0x1f, 0x16, 0x74, 0x77, 0x81, 0x0d, 0xb5, 0xe3, 0xcf, 0x26, 0xed, 0x40, 0xfa, 0xa4, 0x2b, 0x37, 0x41, 0xbf, 0x8c, 0x64, 0x1d, 0xe6, 0x9d, 0x3b, 0x38, 0xdd, 0x1b, 0xfd, 0x1b, 0xe1, 0x3b, 0xa0, 0x97, 0x2e, 0x72, 0xae, 0x71, 0x48, 0x92, 0x84, 0x3c, 0xcf, 0xfd, 0x87, 0x6d, 0x8c, 0x8d, 0x9c, 0x74, 0x6b, 0x84, 0xe1, 0x2e, 0x7c, 0x48, 0x70, 0x7b, 0x79, 0x71, 0xbe, 0xdc, 0x8f, 0x0f, 0x3f, 0xb7, 0x21, 0x29, 0xef, 0x25, 0x64, 0xee, 0x56, 0x0f, 0xc3, 0xd7, 0xe6, 0x3e, 0x2b, 0x57, 0xd0, 0x87, 0xa8, 0xc6, 0xd0, 0xc0, 0xc6, 0x75, 0xcd, 0x9f, 0xe5, 0xea, 0xfa, 0x8e, 0x8d, 0x2f, 0xa6, 0xc5, 0x0d, 0x59, 0xfb, 0x43, 0x38, 0xfe, 0x25, 0x29, 0x6e, 0xf9, 0xf8, 0xd1, 0x4a, 0x13, 0xbb, 0x1a, 0xa3, 0x6a, 0x84, 0x6c, 0x88, 0x22, 0x45, 0x96, 0x87, 0x84, 0x51, 0x00, 0x5d, 0x6b, 0x25, 0x12, 0xba, 0xa5, 0x6b, 0x5b, 0xc0, 0x1a, 0x1c, 0x14, 0x69, 0x46, 0x18, 0x24, 0x1c, 0x0e, 0x6b, 0xa4, 0x0c, 0x68, 0x1b, 0x43, 0xdb, 0x96, 0xb4, 0xfd, 0x81, 0x64, 0x8c, 0x24, 0x90, 0x29, 0xa0, 0xa8, 0xeb, 0x96, 0x28, 0xae, 0x19, 0x8d, 0x32, 0x8a, 0xd1, 0x0d, 0x6d, 0x57, 0x21, 0x25, 0x94, 0xd5, 0x86, 0x51, 0xb6, 0xb0, 0x4d, 0x5f, 0xd3, 0xb2, 0x7c, 0x7c, 0xe4, 0xe9, 0xe9, 0x09, 0x63, 0x8c, 0x8f, 0xfc, 0x2c, 0xb2, 0xbc, 0x9f, 0x46, 0x6a, 0x0c, 0x1a, 0x19, 0x09, 0x82, 0x20, 0x24, 0xcf, 0x73, 0x2e, 0x2f, 0x2e, 0x79, 0x5a, 0xad, 0xad, 0xbf, 0x73, 0x9c, 0x58, 0x5b, 0xcc, 0xaa, 0xb2, 0xd2, 0x91, 0xc0, 0x5a, 0x36, 0xfe, 0xe1, 0x6f, 0x7f, 0xcf, 0x6a, 0xb5, 0xe2, 0xfd, 0xbb, 0x5f, 0xd9, 0x6e, 0xb7, 0xd6, 0xf3, 0xbc, 0xb7, 0x00, 0x75, 0xd7, 0xd6, 0x6f, 0xbf, 0xfd, 0x46, 0x14, 0x45, 0xcc, 0xe7, 0x73, 0xbe, 0xfa, 0xea, 0x2b, 0x6f, 0x1f, 0xfb, 0xf8, 0xf8, 0xc8, 0x78, 0x92, 0xf9, 0x62, 0xef, 0x2c, 0x28, 0xa7, 0xd3, 0x29, 0x9b, 0xcd, 0x86, 0xbf, 0xfe, 0xf5, 0xaf, 0xa4, 0x23, 0x4b, 0x4a, 0x73, 0xf6, 0x9e, 0x6e, 0x2f, 0xef, 0x0a, 0xbf, 0x54, 0x76, 0x2a, 0x77, 0x1a, 0x67, 0xf7, 0xbc, 0xab, 0xd5, 0xca, 0x7a, 0x36, 0xeb, 0x8a, 0xc7, 0xc7, 0x8e, 0x8b, 0x8b, 0xc8, 0xc3, 0xeb, 0x2e, 0x71, 0xed, 0xf5, 0xeb, 0xd7, 0x9e, 0xdc, 0xe6, 0x52, 0x97, 0x6e, 0x6e, 0x6e, 0xb8, 0xbf, 0xbf, 0xe7, 0xfe, 0x7e, 0xcd, 0x9b, 0x37, 0x57, 0x74, 0xad, 0xf0, 0xde, 0xef, 0xae, 0xe9, 0x70, 0x4c, 0x7e, 0x6b, 0xbc, 0x93, 0xfa, 0xd7, 0xb3, 0x5e, 0xaf, 0xbd, 0x1e, 0x3e, 0x0c, 0x43, 0x1e, 0x1e, 0x76, 0x1c, 0x0e, 0xff, 0xcd, 0x2b, 0x3b, 0xdc, 0xf5, 0x99, 0xa6, 0x96, 0x97, 0x72, 0x38, 0x68, 0xc2, 0x08, 0x46, 0x23, 0x8b, 0x08, 0xb8, 0x1d, 0xfd, 0x68, 0x34, 0xf2, 0xef, 0xc3, 0x99, 0x3b, 0x1d, 0xdb, 0x9a, 0xa7, 0xfd, 0x86, 0xa6, 0xeb, 0x48, 0xb3, 0x98, 0xa0, 0xbf, 0xaf, 0xa7, 0xd3, 0x29, 0xbb, 0xdd, 0x81, 0xfd, 0xfe, 0x80, 0x10, 0xd2, 0xe6, 0x6b, 0xb7, 0x1d, 0x46, 0xda, 0x69, 0xa2, 0xab, 0x0e, 0x9c, 0xbd, 0x7a, 0xc5, 0x6a, 0xb5, 0xea, 0xc9, 0x72, 0x9a, 0xef, 0xbf, 0x7f, 0xeb, 0x35, 0xda, 0xdb, 0x6a, 0xe5, 0xef, 0x93, 0xc0, 0xdd, 0x0b, 0x02, 0xff, 0x77, 0xed, 0xd1, 0x9a, 0xc4, 0xb8, 0x33, 0xeb, 0xa5, 0xb1, 0x53, 0x5d, 0xd7, 0xec, 0xf7, 0x7b, 0xe2, 0xd0, 0x66, 0x66, 0x4b, 0x29, 0x11, 0xe1, 0x29, 0xfd, 0x51, 0x3a, 0xfe, 0x8f, 0xee, 0xf7, 0xec, 0x79, 0x42, 0xdd, 0xb5, 0x54, 0x4d, 0x7d, 0x5a, 0xeb, 0x01, 0x9d, 0x76, 0xf7, 0xed, 0x73, 0x2e, 0x8b, 0xfd, 0xbe, 0x53, 0xc6, 0xa3, 0x94, 0x5d, 0xb9, 0xef, 0x89, 0x8d, 0x71, 0xef, 0x18, 0x16, 0xa1, 0x0e, 0x3d, 0xdf, 0xc7, 0x58, 0xc9, 0x5f, 0x53, 0x6b, 0x4c, 0x10, 0x10, 0xc5, 0x69, 0x4f, 0x3e, 0xdc, 0xa1, 0xbb, 0x8e, 0x38, 0xb0, 0x2c, 0x77, 0x61, 0xe0, 0x70, 0x28, 0xa9, 0x2a, 0x6b, 0x8c, 0x12, 0xf6, 0x69, 0x61, 0x27, 0x3b, 0xee, 0x7e, 0xc0, 0x6a, 0x1a, 0xda, 0xaa, 0x66, 0x3a, 0x9b, 0x51, 0xeb, 0x8e, 0x30, 0x0c, 0x48, 0xfb, 0xf5, 0xa8, 0x6b, 0x52, 0x67, 0xb3, 0x19, 0xf5, 0x4e, 0xd0, 0xf4, 0xc8, 0xd7, 0x33, 0x53, 0xad, 0xde, 0x2a, 0x56, 0x0a, 0xb8, 0xbe, 0xbe, 0xb6, 0xd7, 0x5d, 0x63, 0x39, 0x22, 0x0c, 0x86, 0x97, 0xb6, 0xeb, 0x23, 0x9b, 0xb5, 0x22, 0x56, 0x8a, 0xb0, 0x47, 0x04, 0x95, 0x52, 0xb4, 0x5a, 0x11, 0x9c, 0xca, 0xc7, 0x17, 0x7f, 0xb5, 0xad, 0x75, 0x6f, 0x73, 0xbb, 0xde, 0xf9, 0x7c, 0x4e, 0x1a, 0x27, 0x3e, 0x1f, 0x3d, 0xcc, 0x7a, 0xe2, 0xb0, 0xb4, 0xce, 0x94, 0xb2, 0xeb, 0xd0, 0xa6, 0xf3, 0x0d, 0x8c, 0x27, 0x1a, 0x1b, 0xe8, 0xda, 0x06, 0xdd, 0x29, 0x46, 0x51, 0xce, 0x38, 0xcb, 0x89, 0xc3, 0x88, 0x5b, 0x69, 0xbd, 0x05, 0x9c, 0x6a, 0x09, 0xe8, 0xfd, 0x08, 0xcc, 0x33, 0x37, 0xd3, 0xc9, 0x7c, 0xc6, 0xb8, 0x53, 0x1e, 0xb9, 0xf2, 0x2b, 0x9a, 0x7e, 0x12, 0x4f, 0xd3, 0x94, 0xac, 0x28, 0x08, 0x76, 0xb6, 0xd0, 0xfb, 0x33, 0x5d, 0x8a, 0xff, 0x21, 0x29, 0xce, 0x31, 0xfc, 0x5b, 0xad, 0x69, 0x54, 0x83, 0x69, 0x34, 0xa5, 0x01, 0x5a, 0xc5, 0x24, 0x4e, 0x51, 0x3d, 0x4a, 0xa1, 0x50, 0x83, 0x1a, 0xa2, 0x3c, 0x92, 0x65, 0x57, 0x0e, 0x76, 0x57, 0xde, 0xa7, 0x00, 0x59, 0xd4, 0x05, 0x83, 0x6e, 0x5a, 0xe2, 0x38, 0x3c, 0xa1, 0xcb, 0x41, 0xd8, 0x4b, 0xbf, 0xed, 0xca, 0xa2, 0x36, 0xd6, 0x1a, 0xb6, 0xaa, 0x2a, 0x0e, 0xbb, 0x3d, 0x55, 0x75, 0x24, 0x78, 0xfb, 0xed, 0x7f, 0xfe, 0xaf, 0x75, 0xa3, 0x68, 0x5a, 0xdd, 0x27, 0xa1, 0x59, 0x0f, 0x6f, 0xa5, 0x20, 0x4e, 0x72, 0xca, 0xaa, 0xa5, 0x69, 0x14, 0x41, 0x10, 0x83, 0x08, 0xd9, 0x1f, 0x2a, 0xca, 0xaa, 0x25, 0x8c, 0x52, 0x9a, 0xae, 0x43, 0x69, 0x17, 0xee, 0x01, 0x6d, 0xa7, 0x68, 0x5a, 0x85, 0x41, 0x12, 0x46, 0x31, 0x51, 0x9c, 0x58, 0x3b, 0x51, 0x61, 0xfd, 0xc1, 0x0d, 0xb2, 0xff, 0x59, 0x81, 0x41, 0x82, 0x08, 0x68, 0x9a, 0x16, 0xa5, 0x0d, 0x61, 0x18, 0x11, 0x46, 0xb1, 0xf7, 0x81, 0x17, 0xd2, 0x12, 0x3d, 0xea, 0xa6, 0xa5, 0xed, 0x94, 0x85, 0xa9, 0x84, 0xec, 0x43, 0x37, 0x34, 0x32, 0x08, 0x71, 0x0a, 0x09, 0xad, 0x0d, 0x4a, 0x59, 0x0b, 0x3e, 0x9b, 0x12, 0x16, 0x10, 0x04, 0x21, 0x51, 0x14, 0xa3, 0x94, 0xa6, 0x6d, 0xbb, 0xde, 0x66, 0x2f, 0xb0, 0x07, 0x4b, 0xd3, 0x72, 0x38, 0x1c, 0x19, 0xe5, 0x39, 0xaa, 0xb3, 0x53, 0xe5, 0xf1, 0x70, 0xa4, 0xae, 0x2a, 0x30, 0x86, 0x30, 0x08, 0xac, 0x3b, 0x54, 0x6b, 0x3b, 0x77, 0x29, 0x04, 0x81, 0x0c, 0xfa, 0xdf, 0x36, 0x1e, 0x4f, 0x00, 0xe5, 0xd1, 0x80, 0x09, 0x11, 0x04, 0xbd, 0x5e, 0x55, 0xf7, 0x5e, 0xc4, 0x10, 0x04, 0xc3, 0x70, 0x04, 0x9b, 0x4e, 0x17, 0x86, 0xb6, 0x51, 0x0a, 0x83, 0x98, 0x40, 0x86, 0x04, 0xc7, 0x0c, 0xa9, 0x63, 0x22, 0x12, 0x42, 0x11, 0x22, 0x85, 0x41, 0x08, 0x8d, 0x94, 0x06, 0xa4, 0xdd, 0x1d, 0x19, 0x40, 0x6b, 0x85, 0xd2, 0x86, 0x0e, 0x81, 0x96, 0x02, 0x23, 0x42, 0x4c, 0x18, 0x22, 0xdb, 0x29, 0x52, 0xa4, 0x60, 0x22, 0xba, 0x56, 0xa0, 0x5b, 0x03, 0x5a, 0x92, 0x84, 0x29, 0x79, 0x92, 0xa3, 0x9a, 0x3d, 0x81, 0x69, 0x88, 0x64, 0x4d, 0x12, 0x1f, 0x48, 0xc2, 0x2d, 0x4a, 0x7d, 0x60, 0xbb, 0xfa, 0x37, 0x96, 0x0f, 0xff, 0x0f, 0xd5, 0xd3, 0x8f, 0x24, 0xc1, 0x81, 0x49, 0xa6, 0x48, 0xc2, 0x12, 0xd4, 0x01, 0xd3, 0x95, 0xd0, 0x75, 0xd0, 0x6a, 0xba, 0xb6, 0x46, 0xb5, 0x0d, 0xa1, 0x0c, 0x49, 0x93, 0x94, 0x24, 0x0a, 0x49, 0x93, 0x08, 0xa5, 0x2b, 0x9e, 0xb6, 0xf7, 0x4c, 0xc7, 0x29, 0x5a, 0xd7, 0x18, 0x53, 0x13, 0x27, 0x50, 0x14, 0x21, 0x49, 0x62, 0x2c, 0xf3, 0x3d, 0x68, 0x90, 0xc1, 0x91, 0x30, 0xec, 0x88, 0x22, 0x88, 0x63, 0x49, 0x96, 0xda, 0x00, 0x0e, 0xad, 0x34, 0x55, 0x59, 0xb3, 0x3f, 0x1c, 0xa8, 0xaa, 0x92, 0xb6, 0x6b, 0x31, 0x46, 0xf7, 0x6e, 0x4b, 0x81, 0x0d, 0x72, 0x53, 0x9d, 0xbd, 0x78, 0x07, 0x7f, 0x6f, 0x35, 0xd4, 0x91, 0x8d, 0x2d, 0xd4, 0x8a, 0xed, 0xbe, 0x62, 0xbb, 0x3f, 0xa0, 0x34, 0x54, 0x75, 0xcb, 0x72, 0xf5, 0x84, 0x08, 0x42, 0xc6, 0x93, 0x19, 0xda, 0x08, 0xee, 0x1e, 0x3f, 0xb1, 0xdd, 0x6f, 0x49, 0xb2, 0x94, 0x62, 0x5c, 0xb0, 0x38, 0x5f, 0x30, 0x9d, 0xcf, 0x68, 0x95, 0xbd, 0x59, 0x47, 0xa3, 0xa9, 0x97, 0x79, 0x39, 0x38, 0xdc, 0x1d, 0x0c, 0x36, 0x7a, 0x11, 0xca, 0x63, 0x8d, 0x56, 0x20, 0x45, 0x88, 0x56, 0x56, 0x81, 0xa4, 0x94, 0xa1, 0x6d, 0x14, 0xbf, 0xfe, 0xfc, 0x89, 0x77, 0x3f, 0xef, 0x48, 0xa2, 0x8e, 0x57, 0x57, 0x37, 0xa0, 0x41, 0x35, 0x1d, 0x28, 0xc3, 0x7a, 0xb9, 0xa6, 0x2c, 0xad, 0x0c, 0x68, 0xbd, 0x5e, 0xb3, 0xdf, 0xef, 0x89, 0xa2, 0x88, 0xb7, 0x6f, 0xdf, 0x72, 0x71, 0x71, 0x61, 0xf7, 0xec, 0x87, 0x06, 0xa5, 0xac, 0x23, 0x5b, 0x51, 0x4c, 0xd9, 0xef, 0x2b, 0x46, 0xa3, 0x19, 0xdf, 0x7d, 0xf7, 0x47, 0xa4, 0x88, 0xd0, 0xa6, 0xb5, 0xd7, 0xb3, 0x88, 0x08, 0x83, 0x04, 0xd5, 0x59, 0xb8, 0x76, 0x34, 0xce, 0x48, 0xd3, 0xc4, 0xfa, 0x85, 0xb7, 0x15, 0xa3, 0x71, 0xce, 0x6c, 0x3e, 0xb1, 0x7e, 0xd7, 0x6d, 0x4d, 0x14, 0x59, 0x9f, 0xea, 0x87, 0x87, 0x8f, 0x94, 0xe5, 0x8e, 0x20, 0x30, 0xa4, 0x69, 0x48, 0xd3, 0x1c, 0x59, 0xaf, 0x1f, 0x88, 0x63, 0xc9, 0xef, 0xbe, 0x7b, 0xc3, 0xab, 0x57, 0x37, 0x64, 0x59, 0xc2, 0xd5, 0xd5, 0x85, 0xd5, 0x01, 0xab, 0x96, 0x57, 0xaf, 0xae, 0x99, 0xcf, 0xa7, 0x2c, 0xce, 0x46, 0x68, 0xdd, 0xfa, 0xe2, 0xea, 0x26, 0xbf, 0x24, 0x49, 0xfc, 0x5a, 0x43, 0x35, 0x01, 0x77, 0x0f, 0x4b, 0x08, 0x0c, 0x32, 0x04, 0x2d, 0x15, 0x32, 0x30, 0xd4, 0x5d, 0x0d, 0x52, 0xf0, 0xc3, 0x5f, 0xef, 0xd0, 0x9d, 0xe1, 0xcd, 0xf5, 0xd7, 0xa4, 0xd1, 0x88, 0x71, 0x3e, 0xe5, 0xf5, 0xf5, 0x0d, 0xfb, 0xdd, 0x8e, 0xdb, 0x8f, 0x1f, 0xe9, 0xf6, 0x35, 0x9f, 0xde, 0xdd, 0x33, 0x9f, 0x16, 0xa4, 0x61, 0x08, 0x5d, 0xc7, 0x2f, 0x3f, 0x7c, 0x20, 0x96, 0x0d, 0x67, 0x8b, 0x29, 0x49, 0x94, 0x22, 0xb5, 0xa4, 0x48, 0x0a, 0x8c, 0x02, 0xa1, 0x05, 0xd2, 0x48, 0x0e, 0xdb, 0x03, 0x5d, 0xdd, 0x71, 0x73, 0x7e, 0xcd, 0x7e, 0xb7, 0x27, 0x08, 0x42, 0x84, 0xb4, 0xd3, 0x6b, 0x10, 0x08, 0x50, 0x8a, 0x34, 0x0c, 0x29, 0x82, 0x90, 0x37, 0x37, 0x37, 0xe4, 0x71, 0xc2, 0xb8, 0x18, 0x11, 0xc8, 0x80, 0xaa, 0x6e, 0x48, 0xd2, 0x14, 0x0c, 0x9c, 0x8d, 0x73, 0x5e, 0xdd, 0x5c, 0x91, 0x65, 0x09, 0xa3, 0x62, 0x84, 0x0c, 0x62, 0x22, 0x19, 0x71, 0x31, 0xbf, 0xa2, 0xad, 0x3a, 0x8a, 0x78, 0x42, 0x26, 0x53, 0x74, 0xad, 0x29, 0x92, 0x94, 0xae, 0xa9, 0xc9, 0x8a, 0x88, 0xb2, 0x39, 0xa0, 0x63, 0x8d, 0xec, 0x5a, 0xf2, 0x34, 0x24, 0x8a, 0x05, 0x69, 0x1c, 0x12, 0x48, 0x81, 0xd2, 0x9a, 0x20, 0x8c, 0xa8, 0x5b, 0x85, 0x11, 0x01, 0x2d, 0x86, 0x4e, 0x82, 0x88, 0x02, 0x5a, 0xd9, 0xd0, 0xe8, 0x12, 0x23, 0x6a, 0xe2, 0x18, 0x5a, 0x03, 0x79, 0x9a, 0x83, 0x31, 0xd4, 0x65, 0x85, 0x90, 0x76, 0x9d, 0x19, 0x84, 0x92, 0x20, 0x0e, 0x31, 0xd2, 0x1a, 0xfe, 0xe4, 0x69, 0x42, 0x1a, 0x04, 0x6c, 0x96, 0x4b, 0x0e, 0xeb, 0x27, 0x64, 0xd3, 0xa0, 0x8e, 0x0d, 0x69, 0xb1, 0x20, 0x0d, 0x73, 0xda, 0x43, 0x4b, 0xd8, 0x09, 0x32, 0x91, 0x90, 0x07, 0x31, 0x8b, 0x62, 0x4a, 0xa8, 0x04, 0xcb, 0xcd, 0x23, 0x6d, 0xd7, 0x41, 0x00, 0x22, 0x0e, 0x50, 0x52, 0xd3, 0x09, 0x05, 0x42, 0x21, 0x43, 0x88, 0xa2, 0xc4, 0xea, 0xaf, 0x85, 0x24, 0x96, 0x21, 0xc7, 0xdd, 0x1e, 0x3a, 0x4d, 0x1e, 0xa7, 0x04, 0x1a, 0x74, 0xd5, 0x50, 0x95, 0x15, 0x74, 0x9a, 0xa8, 0xcf, 0x80, 0xb7, 0x59, 0xeb, 0x12, 0x55, 0xb5, 0x1c, 0xb1, 0xba, 0x69, 0x6d, 0x0c, 0x6d, 0xab, 0x08, 0x83, 0x90, 0x44, 0x26, 0xf6, 0x7b, 0xc2, 0x9e, 0x95, 0xa3, 0xf1, 0x08, 0x21, 0x25, 0xcb, 0xd5, 0x23, 0x0a, 0x4d, 0x90, 0x06, 0xd4, 0xa6, 0x45, 0x87, 0x90, 0xf4, 0x99, 0x0e, 0x87, 0xe3, 0x96, 0xa7, 0xe3, 0x16, 0x12, 0x49, 0x94, 0x27, 0xb4, 0x52, 0xd3, 0x98, 0x8e, 0x31, 0x11, 0x45, 0x52, 0x30, 0x8a, 0x26, 0xec, 0x36, 0x25, 0x45, 0x3a, 0xe5, 0xd0, 0x74, 0xd4, 0x02, 0x56, 0x55, 0x45, 0x3c, 0x95, 0xac, 0x36, 0x4b, 0x94, 0xe9, 0x48, 0xd2, 0x98, 0xa6, 0xad, 0x51, 0xaa, 0xeb, 0x5d, 0xec, 0x5a, 0x12, 0x42, 0x02, 0x23, 0x88, 0x84, 0x44, 0xb5, 0x2d, 0xd5, 0xb1, 0x24, 0x4b, 0x13, 0xb2, 0xd4, 0xf2, 0x78, 0xba, 0x4e, 0x52, 0xa4, 0x63, 0xfe, 0xee, 0x4f, 0x7f, 0xcf, 0x57, 0xaf, 0xdf, 0x50, 0x6f, 0x77, 0x1c, 0x57, 0x4f, 0xdc, 0x4c, 0xa6, 0x2c, 0xb2, 0x82, 0x22, 0x19, 0x21, 0x3b, 0x63, 0xef, 0x69, 0xec, 0xaa, 0xc1, 0x48, 0x41, 0x23, 0x15, 0x3a, 0x14, 0x84, 0xba, 0xf7, 0xd1, 0xc7, 0x9e, 0x51, 0x32, 0x10, 0xc8, 0x10, 0x92, 0x24, 0x24, 0x9f, 0x64, 0x04, 0x5a, 0x61, 0x53, 0x57, 0x3b, 0x1a, 0xd5, 0x50, 0xb6, 0x15, 0x9d, 0xee, 0xd0, 0x12, 0x44, 0x20, 0x89, 0x5a, 0x43, 0x24, 0x42, 0x5e, 0xdf, 0xbc, 0x66, 0xbd, 0x5c, 0x81, 0xe8, 0xcf, 0x3f, 0x69, 0x89, 0x96, 0x42, 0x0a, 0x2b, 0xe5, 0x33, 0x96, 0xef, 0x11, 0x89, 0x88, 0x80, 0x10, 0x69, 0x42, 0x02, 0x13, 0xf2, 0xf5, 0xeb, 0x6f, 0x88, 0xc2, 0x04, 0x43, 0x60, 0x7f, 0x8b, 0x90, 0xd0, 0x4d, 0xbc, 0x0e, 0x16, 0x70, 0x53, 0x9d, 0x83, 0xb0, 0x87, 0x5a, 0xe0, 0x21, 0x04, 0x5c, 0xd7, 0x35, 0x71, 0x12, 0x3d, 0xd3, 0x7e, 0xba, 0x0e, 0xc4, 0x69, 0x8a, 0xcb, 0xb2, 0xfc, 0x6c, 0x6a, 0x75, 0x9a, 0x52, 0x4b, 0x8a, 0x88, 0xfc, 0x3e, 0xf9, 0xe5, 0xf4, 0xe9, 0xa6, 0x22, 0x07, 0x79, 0xb9, 0x29, 0xd7, 0xc1, 0xea, 0x76, 0xfa, 0xce, 0x3e, 0xb3, 0x94, 0x1d, 0x86, 0x01, 0x0c, 0xf3, 0x85, 0x87, 0xab, 0x04, 0x37, 0x19, 0xbb, 0xe4, 0x2e, 0x37, 0x35, 0x3b, 0xad, 0xe6, 0x50, 0x3f, 0x3e, 0x74, 0xaf, 0x73, 0x13, 0xbe, 0x7b, 0xcc, 0x20, 0xc8, 0x7c, 0x60, 0x8d, 0x65, 0x7c, 0x86, 0x36, 0xd8, 0x44, 0x3c, 0x27, 0xe0, 0xf9, 0x0c, 0x71, 0xb4, 0x25, 0x28, 0xf5, 0x70, 0x55, 0x98, 0xf4, 0x93, 0xb3, 0x34, 0x18, 0x09, 0xc2, 0x04, 0x3d, 0x4d, 0xc2, 0x26, 0xef, 0x54, 0x65, 0x8b, 0x11, 0xb6, 0x59, 0xe8, 0x45, 0xa1, 0x76, 0xd7, 0x22, 0x24, 0xc2, 0x08, 0x9a, 0xd6, 0xee, 0x3e, 0x8b, 0x2c, 0x46, 0x88, 0x88, 0xae, 0xad, 0x68, 0xda, 0x0a, 0xad, 0x4b, 0x9a, 0x56, 0x90, 0x26, 0x2e, 0x04, 0xa7, 0x62, 0xf9, 0xf8, 0xc0, 0xe3, 0xf2, 0x03, 0x75, 0xf5, 0x44, 0x10, 0x6a, 0xd2, 0x34, 0xe4, 0xd5, 0x57, 0x5f, 0xf5, 0x70, 0xdb, 0x8a, 0xba, 0x29, 0x7b, 0xbd, 0x73, 0xe1, 0xc9, 0x78, 0xaf, 0xdf, 0xbc, 0xf6, 0xfe, 0xf7, 0x56, 0x1b, 0xbe, 0xb3, 0x36, 0x8c, 0xd8, 0xe9, 0xb6, 0x6e, 0x1a, 0x4f, 0x36, 0x19, 0x8d, 0x46, 0x9e, 0x59, 0xfe, 0xb4, 0xd9, 0xb0, 0xdd, 0xee, 0x89, 0x13, 0x18, 0x8d, 0x0a, 0xc2, 0x48, 0xb1, 0x7e, 0xda, 0x72, 0x7b, 0xf7, 0xe0, 0xe5, 0x24, 0x76, 0x0a, 0x2f, 0x7a, 0x0d, 0xe9, 0xa1, 0x8f, 0xba, 0x8c, 0x98, 0x2f, 0xce, 0x3c, 0xe4, 0xed, 0x90, 0x18, 0x47, 0x18, 0x73, 0x4a, 0x86, 0xdd, 0x7e, 0xcf, 0xdd, 0xfd, 0x03, 0xdf, 0xfd, 0xed, 0xf7, 0xdc, 0xdf, 0xdf, 0xf7, 0xf6, 0xab, 0x81, 0xdf, 0x29, 0x3b, 0x77, 0xb0, 0x34, 0x0b, 0x01, 0x4b, 0x5e, 0x74, 0xbb, 0xf8, 0x34, 0x4d, 0x49, 0x53, 0x7b, 0xdd, 0x60, 0xfa, 0x2c, 0xe4, 0xa6, 0xe1, 0xf6, 0xf6, 0x96, 0xfb, 0xfb, 0xfb, 0x93, 0x7c, 0x2c, 0xb0, 0x53, 0xe4, 0x74, 0x3a, 0xf5, 0x6b, 0x0e, 0x77, 0x6d, 0xbb, 0x6b, 0xe8, 0x70, 0xb0, 0xeb, 0x89, 0xdd, 0x6e, 0xc7, 0x4f, 0x3f, 0xfd, 0x34, 0x20, 0x4b, 0xda, 0x26, 0xa1, 0x2c, 0x4b, 0xeb, 0x63, 0x3d, 0x99, 0x78, 0x25, 0x85, 0x9b, 0xe2, 0x2f, 0x2f, 0x2f, 0x19, 0x8f, 0xa7, 0x36, 0xc4, 0xa4, 0x69, 0xf8, 0xf4, 0xe9, 0x13, 0xdb, 0x6d, 0xe9, 0x35, 0xf7, 0xbb, 0xdd, 0x8e, 0x24, 0x85, 0xaa, 0xaa, 0x39, 0xec, 0x4b, 0xa2, 0x28, 0xf1, 0xaf, 0xc5, 0xea, 0x51, 0x43, 0x56, 0xab, 0x95, 0x77, 0x3f, 0x7b, 0xb9, 0x2e, 0xb3, 0xae, 0x70, 0x7f, 0xe3, 0xaf, 0xdd, 0xed, 0x76, 0x4f, 0xdb, 0x2a, 0x8a, 0xc2, 0x5a, 0xe8, 0x3e, 0x3d, 0x6d, 0x89, 0xe3, 0x9a, 0x9f, 0x7e, 0xfa, 0x44, 0x9e, 0x8b, 0x3e, 0x12, 0x35, 0xe5, 0x70, 0x38, 0x7a, 0x64, 0xe0, 0x1f, 0xfe, 0xe1, 0x1f, 0xf8, 0xf1, 0xc7, 0x1f, 0x29, 0xcb, 0x92, 0xb7, 0x6f, 0xdf, 0xb2, 0x58, 0x2c, 0xfa, 0x9d, 0xbb, 0x0d, 0xbb, 0xa9, 0x8e, 0x56, 0xea, 0x16, 0x35, 0x12, 0x13, 0xe3, 0x13, 0xfb, 0xdc, 0x7d, 0xf8, 0x4f, 0xff, 0xf4, 0x67, 0xaa, 0x43, 0x45, 0x79, 0xb0, 0x0d, 0x40, 0x96, 0x65, 0x10, 0x59, 0x44, 0x2c, 0xcf, 0x33, 0xf2, 0xc0, 0xa6, 0xec, 0x25, 0x49, 0x42, 0x51, 0x8c, 0xad, 0x01, 0xca, 0xf4, 0x91, 0xf2, 0x58, 0xf3, 0xf3, 0xcf, 0xbf, 0x70, 0xf3, 0xe6, 0xd5, 0x33, 0x49, 0x6c, 0xd3, 0xef, 0x95, 0xe3, 0x38, 0xf6, 0x64, 0x44, 0x9f, 0xd3, 0x10, 0x49, 0x4c, 0x5d, 0x63, 0xfa, 0x68, 0xca, 0x4e, 0x48, 0x8c, 0x08, 0x7b, 0x09, 0xe3, 0x08, 0x29, 0x43, 0x1e, 0x97, 0x4b, 0xfb, 0x18, 0x4d, 0xe4, 0xf5, 0xfc, 0x4d, 0x63, 0xad, 0x38, 0xbb, 0x5a, 0x71, 0x3c, 0x56, 0x74, 0xb5, 0x22, 0x4b, 0xad, 0xd1, 0xce, 0xf6, 0xb0, 0xa5, 0x18, 0x8f, 0x68, 0x9a, 0x8a, 0x38, 0xcd, 0x88, 0x93, 0xd0, 0x13, 0xd2, 0x84, 0xb6, 0xf1, 0xc2, 0x0a, 0xeb, 0xa7, 0x5d, 0xab, 0x0e, 0x65, 0x34, 0x22, 0x0a, 0x91, 0xe1, 0xc9, 0x6a, 0xd4, 0xf4, 0x69, 0x69, 0x18, 0x3e, 0x73, 0x85, 0x7c, 0xc9, 0x8f, 0x19, 0xae, 0x38, 0x3b, 0xad, 0x89, 0x8b, 0xcc, 0x9f, 0x3b, 0x7d, 0x6a, 0x2c, 0x69, 0x9a, 0x30, 0x8e, 0x53, 0x44, 0x61, 0xa8, 0x7a, 0x92, 0x65, 0x92, 0x44, 0x1e, 0x56, 0x0e, 0x23, 0xe9, 0x49, 0x93, 0x6e, 0x87, 0xad, 0x51, 0x94, 0x4d, 0xed, 0xdd, 0xe2, 0x84, 0xb0, 0xd3, 0xb3, 0xe9, 0x4e, 0x44, 0xde, 0xaa, 0xe9, 0x7a, 0x2e, 0x86, 0xe5, 0x0f, 0x1c, 0x8e, 0x47, 0xba, 0xa6, 0xa1, 0x2c, 0x3b, 0x92, 0x44, 0xda, 0xeb, 0x2c, 0x0a, 0x39, 0x54, 0x25, 0xba, 0x67, 0x85, 0x97, 0xbd, 0x8f, 0xc2, 0x33, 0xf3, 0xac, 0x01, 0x51, 0xce, 0xf1, 0x85, 0x92, 0x24, 0xe1, 0xf5, 0xeb, 0xd7, 0xa4, 0x69, 0xca, 0xfe, 0xb0, 0xf5, 0x9e, 0x0f, 0x59, 0x10, 0x51, 0xf7, 0x88, 0x58, 0x65, 0x3a, 0xa2, 0xcc, 0xd6, 0x1a, 0x69, 0x40, 0x84, 0x21, 0xed, 0xb1, 0xc5, 0xa4, 0xc6, 0x3b, 0x6e, 0xde, 0xde, 0xde, 0xa2, 0x05, 0x84, 0x71, 0xc0, 0xa4, 0x27, 0xa8, 0x0e, 0x57, 0x90, 0x0e, 0xd1, 0x74, 0xef, 0x3d, 0x09, 0x92, 0xfe, 0x1e, 0xd5, 0xfe, 0x9c, 0x72, 0x6a, 0x95, 0x3c, 0xcf, 0xe9, 0x5a, 0x2b, 0x8d, 0xfd, 0x97, 0x7f, 0xf9, 0x17, 0x8a, 0x3c, 0xa5, 0x3e, 0x96, 0x44, 0xa1, 0xe4, 0x70, 0x38, 0xf0, 0xe9, 0xd3, 0x27, 0x5e, 0x7d, 0xfb, 0xbb, 0xe7, 0x59, 0xeb, 0x7e, 0x05, 0x72, 0x32, 0xfe, 0xd2, 0x5d, 0x4b, 0x37, 0x50, 0x4f, 0x25, 0x69, 0xca, 0x64, 0x3c, 0x61, 0x32, 0x1e, 0x33, 0x0b, 0x52, 0xaf, 0x2c, 0x38, 0x56, 0x25, 0xdd, 0x61, 0x47, 0x75, 0xdc, 0xa3, 0xbb, 0xde, 0x41, 0xb5, 0xbf, 0x96, 0x1d, 0x1a, 0xd4, 0xf6, 0x41, 0x30, 0xbc, 0x50, 0x58, 0x0d, 0xd1, 0x5f, 0x9f, 0xcf, 0x1e, 0x4b, 0xc2, 0x48, 0x92, 0x17, 0xd3, 0xfe, 0xfe, 0x0e, 0x08, 0xa3, 0xde, 0xcb, 0xdd, 0x5d, 0x64, 0x0e, 0x9e, 0x73, 0x45, 0x73, 0xe8, 0x11, 0xed, 0x88, 0x3d, 0xce, 0xb4, 0xa2, 0xeb, 0x2c, 0x54, 0x3b, 0x94, 0xcd, 0x0c, 0x83, 0x4a, 0x5c, 0xd1, 0x7d, 0x19, 0xcd, 0xea, 0x2f, 0xd8, 0xae, 0x23, 0x49, 0x83, 0xcf, 0xd2, 0x78, 0x86, 0x2c, 0x77, 0x47, 0x94, 0x1a, 0xea, 0xc5, 0x5d, 0x0a, 0x95, 0xdd, 0xcf, 0xeb, 0x67, 0xf1, 0xa7, 0xc3, 0x68, 0xd4, 0x2f, 0xe7, 0xd7, 0xea, 0xcf, 0x08, 0x6c, 0x2f, 0xc9, 0x62, 0x43, 0x02, 0xdc, 0x97, 0x08, 0x71, 0x43, 0x13, 0x18, 0x0b, 0xda, 0x58, 0x9a, 0xa2, 0xe8, 0xbf, 0x20, 0xe9, 0xb9, 0x74, 0x9f, 0xef, 0xdd, 0x87, 0xf0, 0x99, 0x31, 0x86, 0x2e, 0x38, 0xf8, 0x38, 0x43, 0xa3, 0x6c, 0x9e, 0xaf, 0x0b, 0x80, 0x00, 0x50, 0x8d, 0x95, 0x0f, 0x8a, 0x3e, 0xf5, 0x07, 0x47, 0x2c, 0x94, 0x16, 0xbe, 0x59, 0xcc, 0x33, 0xea, 0xba, 0xe4, 0x70, 0xd8, 0x00, 0x96, 0x81, 0x9e, 0xe7, 0xa1, 0xdd, 0x73, 0xe9, 0x8e, 0x63, 0xb5, 0xa1, 0xdc, 0x6d, 0xd9, 0x6e, 0xd7, 0xec, 0x0f, 0x2b, 0xba, 0x76, 0x07, 0xa2, 0xc5, 0x68, 0x45, 0x55, 0xc2, 0xa3, 0xb6, 0xd6, 0xa0, 0x57, 0xd7, 0x17, 0x94, 0xe5, 0xb1, 0x2f, 0xac, 0x15, 0x59, 0x66, 0xcd, 0x48, 0xee, 0xee, 0xee, 0xfa, 0x49, 0x55, 0xa3, 0xb5, 0x25, 0xa8, 0x75, 0x3d, 0xea, 0x70, 0x7d, 0x7d, 0x4d, 0x20, 0x4f, 0x2b, 0x0d, 0x6b, 0x21, 0xd9, 0x80, 0xd0, 0xa4, 0x59, 0x8c, 0x0c, 0x46, 0x6c, 0xb7, 0x7b, 0x7f, 0x43, 0xbb, 0xe2, 0xe8, 0xbe, 0xc3, 0x24, 0x49, 0x68, 0xdb, 0xce, 0x37, 0x53, 0x8e, 0x3c, 0x33, 0x34, 0x7a, 0x71, 0xfe, 0xe5, 0xcb, 0xfe, 0x20, 0x76, 0xb0, 0xb7, 0x7b, 0xce, 0xf7, 0xef, 0xdf, 0xb1, 0xd9, 0x6c, 0x10, 0x42, 0x30, 0x9b, 0xcd, 0x98, 0xcd, 0x2c, 0xcc, 0xbc, 0xdf, 0xef, 0xd9, 0x6e, 0xad, 0x96, 0xdc, 0xc9, 0xc8, 0xdc, 0xda, 0xc5, 0x5d, 0xc7, 0x93, 0xc9, 0x84, 0xbb, 0xdb, 0x07, 0xea, 0x9e, 0x35, 0xbf, 0xdd, 0x3e, 0x01, 0x9a, 0xac, 0x0f, 0xd9, 0xe8, 0xba, 0x8e, 0xc5, 0x62, 0x66, 0x0d, 0x62, 0x36, 0x1b, 0xaf, 0x53, 0x9f, 0xcf, 0xe7, 0xbe, 0xc9, 0xb8, 0xb8, 0x38, 0x63, 0x3a, 0xb5, 0xba, 0xf4, 0x63, 0x9f, 0xd2, 0x66, 0x9b, 0x50, 0xc8, 0xb2, 0x84, 0xf9, 0x7c, 0xca, 0xfd, 0xfd, 0x3d, 0xcb, 0xe5, 0x03, 0x69, 0x9a, 0x12, 0x45, 0xa7, 0x83, 0xd7, 0x86, 0xb4, 0xcc, 0xfa, 0xe2, 0x34, 0x62, 0x32, 0x19, 0xf9, 0x02, 0xf3, 0xf1, 0xe3, 0x6f, 0xac, 0xd7, 0x07, 0xce, 0x2f, 0x32, 0xca, 0xb2, 0xa2, 0x6d, 0x0c, 0x67, 0x67, 0x19, 0x93, 0xc9, 0x84, 0x24, 0x89, 0x68, 0xda, 0x8a, 0x30, 0x0c, 0xb8, 0xba, 0xba, 0xf6, 0xf0, 0xfe, 0xdd, 0xdd, 0x9d, 0x3f, 0xb8, 0xdc, 0xee, 0xd2, 0x92, 0xe9, 0x46, 0x3e, 0x4e, 0x36, 0x08, 0x8e, 0x8c, 0xc7, 0x13, 0xdf, 0xa4, 0xcd, 0x66, 0x33, 0xce, 0xce, 0x36, 0x24, 0x49, 0xe2, 0x0d, 0x78, 0x86, 0x7b, 0xfb, 0x40, 0x46, 0x7c, 0xfb, 0xcd, 0xef, 0xfc, 0x7d, 0xf9, 0xf1, 0xc3, 0xad, 0x57, 0x1e, 0x9c, 0x9f, 0x9f, 0x93, 0xa4, 0x29, 0x8d, 0xee, 0x08, 0x22, 0x6b, 0xd9, 0xaa, 0x14, 0x74, 0xc6, 0xdd, 0x2f, 0x9a, 0x5f, 0x7e, 0xf9, 0x85, 0xcb, 0xb3, 0x4b, 0xce, 0xce, 0xce, 0x98, 0x14, 0x13, 0x2b, 0x29, 0x8c, 0x03, 0xca, 0xda, 0xae, 0x3d, 0xc6, 0xa3, 0x71, 0xcf, 0x55, 0x48, 0x6c, 0xc3, 0x58, 0x1e, 0x31, 0x06, 0x8a, 0x62, 0x84, 0x8c, 0x42, 0xd0, 0x92, 0xc3, 0xbe, 0xa2, 0x6d, 0xfa, 0x03, 0xf9, 0x7c, 0x01, 0xc0, 0x87, 0x4f, 0x1f, 0x59, 0xad, 0xde, 0x13, 0xb4, 0x86, 0xa6, 0x83, 0xf3, 0xeb, 0x39, 0xc9, 0x28, 0xeb, 0xa7, 0x63, 0xe1, 0x21, 0xf9, 0x72, 0x67, 0x9b, 0x55, 0x89, 0x20, 0x8e, 0xd3, 0x67, 0x76, 0xcb, 0xad, 0xea, 0x28, 0x9b, 0x9a, 0xfd, 0xde, 0x06, 0xe4, 0xa0, 0x7b, 0xfe, 0x8f, 0x16, 0x74, 0xaa, 0xa1, 0xae, 0x1b, 0xa2, 0x34, 0x22, 0x2f, 0x12, 0xd6, 0xdb, 0x0e, 0xa5, 0x3b, 0xa2, 0x34, 0xa0, 0x6e, 0xaa, 0x93, 0x66, 0x5a, 0xb8, 0x9d, 0x6f, 0x1f, 0x8a, 0x84, 0x21, 0xd0, 0xda, 0x1a, 0x84, 0x68, 0xeb, 0xf0, 0x66, 0x8c, 0x23, 0x4f, 0x9d, 0x8a, 0x8f, 0x1c, 0x28, 0x5f, 0x5c, 0x70, 0x88, 0xaa, 0x4f, 0x41, 0x3e, 0x49, 0x92, 0x90, 0x47, 0x11, 0x87, 0x01, 0xe9, 0x38, 0xec, 0x3d, 0xe9, 0x55, 0x69, 0xcf, 0xdc, 0xae, 0x6e, 0x78, 0xdc, 0x1f, 0x49, 0x92, 0xc8, 0x0f, 0x0d, 0x4d, 0x5b, 0xf1, 0xb8, 0xdc, 0xb2, 0x5c, 0x3e, 0xda, 0xf3, 0xd3, 0x1c, 0xad, 0x92, 0x22, 0xed, 0x25, 0xbd, 0xa2, 0xe7, 0x38, 0x08, 0x43, 0x53, 0x77, 0x28, 0x7d, 0x22, 0x2d, 0xea, 0x5e, 0xe1, 0xe0, 0x8a, 0x61, 0x59, 0x96, 0x98, 0xce, 0x7a, 0xa4, 0xe7, 0x79, 0x6e, 0x57, 0x1a, 0xfd, 0x7a, 0x43, 0x0e, 0x38, 0x52, 0x2f, 0x03, 0xb1, 0xfa, 0x89, 0xa4, 0x27, 0x51, 0x27, 0x9e, 0xd1, 0xae, 0x54, 0xeb, 0xd3, 0xc3, 0x9c, 0x9d, 0x30, 0x65, 0x4d, 0xab, 0x3a, 0xda, 0xde, 0x09, 0xd0, 0x3d, 0xb7, 0x4b, 0x1f, 0x73, 0x66, 0x49, 0xbb, 0xdd, 0x16, 0x29, 0x6d, 0x33, 0x95, 0x16, 0x39, 0x48, 0xcb, 0x29, 0x69, 0xda, 0x3d, 0xa8, 0x5e, 0x4d, 0xa5, 0x4f, 0x46, 0x5a, 0xa8, 0x7e, 0x2d, 0x2c, 0x6b, 0x2f, 0x79, 0x75, 0x03, 0x9b, 0x1b, 0x28, 0x6d, 0x33, 0x10, 0x11, 0x45, 0x41, 0x6f, 0xa4, 0xd4, 0xa2, 0xdb, 0x86, 0xf9, 0x74, 0x46, 0x56, 0x64, 0xcc, 0x66, 0xb5, 0x6f, 0x06, 0xbc, 0xac, 0xec, 0x45, 0x41, 0x6f, 0xdb, 0x0e, 0x10, 0x44, 0x51, 0x7c, 0x32, 0xf3, 0xea, 0x34, 0x75, 0xdd, 0x50, 0x85, 0x35, 0x4c, 0x9c, 0xcf, 0x46, 0x87, 0xea, 0xec, 0x75, 0xa2, 0xb5, 0xe5, 0x44, 0x04, 0x32, 0x44, 0xf6, 0x2b, 0x63, 0x47, 0xc2, 0xeb, 0x6a, 0x4b, 0xe4, 0x15, 0x2f, 0x25, 0xdc, 0x5a, 0x5b, 0x7d, 0x7e, 0x5f, 0xbf, 0xf2, 0x3c, 0x27, 0x8d, 0x13, 0x26, 0x93, 0xc2, 0xcb, 0x52, 0xd3, 0xb4, 0xf7, 0xb8, 0xf8, 0xe3, 0xdf, 0xfd, 0x2f, 0xff, 0xf5, 0x65, 0x51, 0x7d, 0x99, 0xee, 0x35, 0x0c, 0x6a, 0x79, 0x1e, 0x16, 0x22, 0x9f, 0x4d, 0xe5, 0x6e, 0xb2, 0x19, 0x12, 0x6c, 0xbe, 0xe4, 0x8e, 0xe6, 0x3a, 0x92, 0xa8, 0x9f, 0x9c, 0x1c, 0xbb, 0xd7, 0x3d, 0x9f, 0xdb, 0x8b, 0xbf, 0x34, 0x68, 0x79, 0x59, 0xa0, 0x2d, 0x84, 0xfe, 0x65, 0xd3, 0x94, 0x97, 0xc9, 0x62, 0x5f, 0x32, 0x86, 0x19, 0x15, 0xf9, 0x33, 0xf2, 0xdf, 0x4b, 0xd3, 0x17, 0x37, 0x91, 0xbb, 0xcf, 0x62, 0xe8, 0x68, 0x66, 0x59, 0xdb, 0xce, 0x16, 0x41, 0x7b, 0x5f, 0x5f, 0xe1, 0x9d, 0x7d, 0x54, 0xff, 0xd8, 0xa7, 0x9b, 0xda, 0xf9, 0x14, 0x5b, 0x72, 0x0c, 0x28, 0xbd, 0x47, 0x99, 0x0e, 0x65, 0x14, 0x4a, 0x2b, 0xda, 0xde, 0x38, 0x40, 0x6b, 0x81, 0xd6, 0x20, 0x74, 0x6c, 0xdf, 0xa3, 0x91, 0xd6, 0x3d, 0x49, 0xd9, 0x98, 0x3e, 0x1b, 0xb5, 0x68, 0xa8, 0xab, 0x25, 0x52, 0x34, 0xa4, 0xa9, 0x20, 0xcb, 0x05, 0x71, 0xd4, 0xd1, 0xb6, 0x3b, 0xca, 0xc3, 0x8a, 0xfd, 0xfe, 0x91, 0x0f, 0x9f, 0xfe, 0x02, 0xba, 0x24, 0x0c, 0x3b, 0x94, 0xda, 0x73, 0xd8, 0xaf, 0xe8, 0xda, 0x92, 0xc9, 0x38, 0xe3, 0xea, 0xfa, 0x8c, 0x69, 0x51, 0xa0, 0x94, 0x65, 0x20, 0xef, 0xf7, 0x5b, 0xa4, 0xb4, 0xe9, 0x5c, 0xf3, 0xc5, 0x94, 0x62, 0x94, 0x33, 0x1a, 0x15, 0xbd, 0xf9, 0x8f, 0xed, 0xee, 0xc3, 0x28, 0xe8, 0xcd, 0x7e, 0x3a, 0x16, 0x8b, 0x39, 0xb3, 0xe9, 0xc4, 0xc7, 0x33, 0x1e, 0x0e, 0x07, 0xee, 0xef, 0xef, 0xb9, 0xbb, 0xbb, 0x63, 0xb3, 0xd9, 0x51, 0xd7, 0x0d, 0x57, 0x57, 0xd6, 0x75, 0xcd, 0x35, 0x85, 0x52, 0x06, 0xcf, 0x1a, 0x2a, 0x67, 0xe4, 0x93, 0x65, 0xb6, 0x58, 0xb9, 0xa2, 0xeb, 0x8c, 0x50, 0xec, 0xd4, 0x1e, 0x9e, 0x0e, 0x80, 0xc1, 0x34, 0x10, 0x04, 0x01, 0x65, 0xf9, 0x3c, 0x61, 0xec, 0x70, 0x38, 0x70, 0x7b, 0x7b, 0xcb, 0x4f, 0x3f, 0xfd, 0xc4, 0x4f, 0x3f, 0xed, 0x78, 0xfb, 0x76, 0xce, 0x68, 0x34, 0xe2, 0xab, 0xaf, 0xbe, 0xe2, 0xea, 0xea, 0x8a, 0x38, 0x8e, 0xfb, 0xe2, 0xbd, 0x05, 0xe0, 0xcd, 0x9b, 0xb7, 0x7c, 0xfc, 0xf8, 0x91, 0xff, 0xfe, 0xdf, 0x7f, 0xe6, 0xe9, 0xa9, 0x22, 0x8a, 0xf0, 0xcf, 0x23, 0x84, 0xe0, 0xfd, 0xfb, 0x0f, 0x6c, 0x36, 0x4f, 0x7c, 0xfa, 0xb4, 0xa2, 0x69, 0x8e, 0x3e, 0xb5, 0xcc, 0x65, 0x3b, 0x07, 0x41, 0xc0, 0x7c, 0x3e, 0x7f, 0xd6, 0x64, 0x38, 0x32, 0xa7, 0xe3, 0x70, 0x38, 0xce, 0x46, 0x9e, 0xe7, 0xfe, 0xda, 0xbf, 0xbe, 0xbe, 0xe6, 0x0f, 0x7f, 0xf8, 0x03, 0x41, 0x10, 0x7a, 0x14, 0xc8, 0xc9, 0x30, 0x3f, 0x7c, 0xf8, 0xc0, 0xc3, 0x43, 0x4d, 0x9e, 0xc3, 0xeb, 0x37, 0x37, 0xfd, 0x1a, 0xa0, 0xee, 0xf9, 0x09, 0x9a, 0xed, 0x76, 0xc3, 0x6a, 0xb5, 0xf4, 0xc1, 0x2f, 0xce, 0xd3, 0x1b, 0xe0, 0xfc, 0xfc, 0x9c, 0xf9, 0x7c, 0x4e, 0xd3, 0x34, 0x2c, 0x97, 0xcb, 0xde, 0xa3, 0x1f, 0xb4, 0x32, 0xb4, 0x6d, 0x67, 0x55, 0x0a, 0x61, 0x8c, 0xea, 0x34, 0xc7, 0x63, 0xc9, 0xbf, 0xfd, 0xb7, 0x5f, 0x08, 0x02, 0xe5, 0xb5, 0xfb, 0x8e, 0xbf, 0x70, 0x7d, 0x7d, 0xcd, 0xf5, 0xf5, 0x35, 0xf7, 0xf7, 0x4b, 0x7f, 0x68, 0xa5, 0x69, 0xc6, 0x74, 0x3a, 0xe3, 0xe2, 0xe2, 0x92, 0xf9, 0x7c, 0x61, 0xc3, 0x61, 0x9a, 0x8e, 0x46, 0x77, 0x44, 0x69, 0x88, 0x91, 0x86, 0x56, 0x2b, 0x64, 0x20, 0xec, 0xce, 0x19, 0xc1, 0x24, 0x9f, 0x71, 0x7d, 0xf3, 0x8a, 0x50, 0x06, 0x94, 0x47, 0x9b, 0x38, 0x55, 0x56, 0x25, 0x55, 0xd7, 0x30, 0x9d, 0x4f, 0xf9, 0x9b, 0xaf, 0xbe, 0xee, 0x27, 0x48, 0xc3, 0x66, 0xb3, 0xe5, 0xe1, 0xe1, 0x91, 0xba, 0x6a, 0xed, 0xe1, 0x6d, 0x0c, 0xc5, 0x68, 0x4c, 0x18, 0x84, 0x14, 0x79, 0x81, 0xd2, 0x9a, 0xe3, 0xfe, 0x48, 0xdb, 0x29, 0x8a, 0x7c, 0xc4, 0xdf, 0x7c, 0xfb, 0x3b, 0x9a, 0xf2, 0x48, 0x10, 0x0a, 0xc6, 0xd3, 0x29, 0x51, 0x12, 0xf7, 0x05, 0xc9, 0x26, 0x60, 0x09, 0xe0, 0xeb, 0x57, 0x6f, 0xec, 0x21, 0xae, 0xb4, 0x5d, 0xd5, 0x69, 0x8d, 0x11, 0x16, 0xc6, 0x54, 0x5a, 0x11, 0x08, 0x8d, 0xea, 0x74, 0x9f, 0x49, 0x61, 0x53, 0xef, 0xb2, 0xd4, 0x0e, 0x2c, 0x4d, 0xdd, 0x32, 0x3f, 0x9f, 0x33, 0x1e, 0x8f, 0xd8, 0x6c, 0x37, 0x20, 0xed, 0x64, 0xb8, 0x2f, 0x77, 0x76, 0xfd, 0x13, 0x09, 0x68, 0x6d, 0x0c, 0xa9, 0x08, 0x03, 0x44, 0x60, 0x09, 0x73, 0x61, 0x64, 0xd7, 0x64, 0xce, 0x1f, 0xc3, 0xa1, 0x71, 0x02, 0xd1, 0x5b, 0x63, 0x07, 0x9e, 0x2d, 0xaf, 0x85, 0xb0, 0x26, 0x3c, 0x9d, 0xf2, 0x7a, 0x78, 0x77, 0x7f, 0x84, 0x51, 0x44, 0xd3, 0x9d, 0x0c, 0xb7, 0x42, 0x19, 0x20, 0x85, 0xb4, 0x6a, 0x31, 0xa5, 0x2d, 0xe3, 0x3d, 0x4a, 0x7d, 0x93, 0x3a, 0x99, 0x5a, 0xa4, 0xe6, 0xe1, 0xe1, 0x9e, 0xc3, 0xa1, 0xb6, 0x3c, 0x95, 0xa6, 0xf6, 0xc1, 0x4a, 0x32, 0xb4, 0x1e, 0xf6, 0x61, 0x64, 0x53, 0x26, 0x3b, 0xa5, 0x88, 0xc2, 0x3e, 0xcd, 0xac, 0xcf, 0x62, 0x0f, 0xfa, 0xe7, 0x51, 0x5d, 0x67, 0x13, 0xd4, 0x10, 0x8c, 0x27, 0x63, 0xc6, 0xe3, 0xb1, 0x1d, 0xd2, 0xba, 0x8e, 0x34, 0xcf, 0xfc, 0x7d, 0x64, 0xe2, 0x88, 0x40, 0x4a, 0xb4, 0xb2, 0xa6, 0x3b, 0x61, 0x60, 0xf9, 0x02, 0xf4, 0xc8, 0x64, 0x73, 0xac, 0x98, 0x4d, 0x67, 0x68, 0xa5, 0xd9, 0x6c, 0x9e, 0x78, 0x5a, 0xaf, 0x19, 0x15, 0x39, 0x02, 0x38, 0x1e, 0x8e, 0x44, 0xa1, 0x0d, 0x89, 0x31, 0x52, 0x90, 0x8d, 0x0a, 0xf2, 0x51, 0x81, 0xd6, 0x86, 0xb6, 0x69, 0x91, 0x42, 0x62, 0xaa, 0x96, 0xe5, 0xe3, 0x8a, 0x4f, 0xbf, 0x3d, 0xd0, 0xd4, 0x35, 0x61, 0x10, 0x12, 0xc6, 0x11, 0x06, 0x43, 0x18, 0x45, 0x24, 0xa3, 0xf0, 0x59, 0x33, 0x31, 0xac, 0x4d, 0x42, 0x08, 0x84, 0x0e, 0x98, 0x4e, 0x66, 0x44, 0x61, 0x8c, 0xd6, 0x86, 0xf1, 0x78, 0xd2, 0x37, 0xb4, 0x82, 0xae, 0xed, 0x0d, 0xd4, 0x02, 0xdb, 0xfc, 0x35, 0x75, 0xcd, 0xc3, 0xfd, 0x03, 0xcb, 0xc7, 0x15, 0xc7, 0xc3, 0x81, 0xba, 0x6e, 0x9e, 0xb1, 0xfa, 0xe9, 0x13, 0xea, 0xb4, 0x31, 0x18, 0x97, 0x72, 0xd9, 0x74, 0xd6, 0xa7, 0x20, 0x3a, 0x0d, 0xa3, 0x46, 0x69, 0x9b, 0xd9, 0x2e, 0x04, 0xe3, 0x34, 0x3f, 0x0d, 0xc7, 0x4a, 0x51, 0xab, 0x1e, 0x5d, 0x16, 0x10, 0xc5, 0x11, 0x42, 0xe9, 0xfe, 0x1e, 0x36, 0xfd, 0xcf, 0x0c, 0x6b, 0xd5, 0x40, 0x55, 0xd1, 0x23, 0x3c, 0x81, 0x94, 0xa4, 0x3d, 0xd2, 0x38, 0x2a, 0x0a, 0x9a, 0xca, 0x36, 0xdf, 0xdb, 0xed, 0x86, 0xae, 0x6b, 0xad, 0x65, 0xac, 0x83, 0xdb, 0x5d, 0x51, 0x73, 0x70, 0x9d, 0xdb, 0x29, 0x3a, 0x48, 0x70, 0x08, 0xa3, 0x78, 0x92, 0x45, 0xfc, 0x5c, 0xf6, 0xf5, 0x32, 0xc2, 0x74, 0x18, 0xe5, 0x38, 0xfc, 0xed, 0x8a, 0x73, 0xdb, 0x9d, 0x82, 0xe4, 0x87, 0xd0, 0xfc, 0xb0, 0x68, 0x0f, 0x09, 0x6e, 0x2f, 0x9f, 0x43, 0x29, 0xf3, 0xd9, 0xe3, 0x0e, 0x27, 0x6f, 0x47, 0x8a, 0x70, 0x4d, 0xc1, 0xcb, 0xc6, 0xa0, 0xad, 0xab, 0x67, 0xaf, 0x55, 0x0c, 0xcc, 0xf9, 0x5d, 0xf7, 0x3c, 0x34, 0x11, 0x78, 0x39, 0xb5, 0x07, 0x81, 0xcd, 0x79, 0x57, 0xca, 0xf8, 0x30, 0x1a, 0xad, 0x85, 0x37, 0x04, 0xb0, 0x3b, 0xfe, 0xde, 0xe1, 0x4e, 0xbb, 0xd7, 0x26, 0x3d, 0x0c, 0x77, 0x62, 0xc6, 0xc6, 0x60, 0x24, 0xc2, 0x04, 0xbd, 0x2e, 0xdc, 0xa6, 0xa0, 0xf9, 0xf7, 0x23, 0x34, 0x68, 0x6b, 0xe6, 0x12, 0xa2, 0x09, 0x84, 0xb6, 0xfb, 0x3a, 0xb1, 0x23, 0x4d, 0x33, 0xe2, 0x58, 0xd3, 0xd4, 0x07, 0x96, 0x4f, 0x8f, 0x1c, 0x76, 0x6b, 0xc0, 0x10, 0x86, 0x92, 0xab, 0xcb, 0x94, 0x87, 0x87, 0x07, 0x1e, 0x1f, 0xee, 0x00, 0xc3, 0xd9, 0x62, 0xc2, 0x6c, 0x3e, 0xb1, 0xb9, 0xd3, 0xd5, 0x81, 0xdd, 0xfe, 0xd8, 0xe7, 0x5d, 0x67, 0xcc, 0xe7, 0x53, 0x92, 0x34, 0xea, 0x21, 0x6b, 0x1b, 0x97, 0x39, 0x9b, 0x4d, 0xa8, 0xaa, 0x23, 0xf7, 0xf7, 0xf7, 0x74, 0xaa, 0xed, 0x35, 0xd4, 0x89, 0x47, 0x6a, 0x44, 0x00, 0x4d, 0x67, 0xc9, 0x68, 0xbb, 0xdd, 0x8e, 0x63, 0x75, 0x20, 0xc9, 0x62, 0xce, 0x2e, 0x6c, 0x4a, 0xd7, 0x64, 0x3c, 0xf3, 0xc6, 0x2e, 0x2e, 0x50, 0x45, 0x4a, 0xc9, 0xd9, 0xd9, 0x19, 0xe7, 0xe7, 0xe7, 0x6c, 0xb7, 0x5b, 0x96, 0xcb, 0x25, 0xf7, 0xf7, 0xf7, 0xec, 0xf7, 0x7b, 0x6f, 0x99, 0x3a, 0x1a, 0x8d, 0x18, 0x8d, 0xc6, 0x6c, 0x36, 0x1b, 0xd2, 0x34, 0x44, 0x06, 0x11, 0x88, 0x8e, 0x4e, 0x19, 0x50, 0x76, 0x07, 0x68, 0x90, 0x2c, 0x57, 0x0f, 0x7e, 0xda, 0x0f, 0x42, 0x4b, 0x2c, 0xbb, 0x8c, 0xce, 0x79, 0xf5, 0xfa, 0x9a, 0xaa, 0xaa, 0x78, 0xb8, 0x5f, 0x72, 0x7f, 0xf7, 0xc8, 0x7a, 0xb5, 0xf1, 0x3f, 0xe7, 0x26, 0x92, 0x38, 0x4a, 0xf9, 0xbf, 0xfe, 0xef, 0xff, 0x93, 0xa6, 0xd1, 0xe4, 0x45, 0xc8, 0xef, 0xff, 0xf0, 0x86, 0x57, 0xaf, 0x5e, 0x79, 0xb6, 0xfb, 0x7a, 0xbd, 0xa6, 0x68, 0x12, 0xe6, 0xf3, 0x39, 0xd7, 0x37, 0xa1, 0xd5, 0xea, 0x9e, 0xcd, 0x59, 0xaf, 0xd7, 0x3c, 0x3c, 0xde, 0xf9, 0xc2, 0x1f, 0x84, 0xf6, 0x7b, 0x2a, 0x46, 0x99, 0x67, 0xb1, 0x3f, 0x6d, 0x56, 0xb4, 0x5d, 0xc0, 0xe3, 0xe3, 0x9a, 0x38, 0xb6, 0x53, 0x7b, 0x6a, 0x2c, 0x11, 0x2a, 0xcb, 0x73, 0xd2, 0x2c, 0xa6, 0x6e, 0xca, 0x1e, 0x1e, 0x6e, 0xd8, 0x6c, 0x9e, 0xbc, 0x4b, 0xe3, 0x7e, 0xaf, 0x48, 0x12, 0xf8, 0xfa, 0xeb, 0xb7, 0xfe, 0xfa, 0xaf, 0x6b, 0xd8, 0x6e, 0x5b, 0xb4, 0x7e, 0x64, 0x3e, 0xb7, 0xc1, 0x19, 0xe3, 0xb1, 0x85, 0xc8, 0x5f, 0x7a, 0x2a, 0xb8, 0xe6, 0x27, 0x49, 0x12, 0x04, 0x81, 0x0f, 0x82, 0x71, 0xda, 0xfa, 0xb2, 0x2c, 0x79, 0xf7, 0xee, 0x1d, 0xef, 0xdf, 0xb7, 0xcc, 0xe7, 0x70, 0x75, 0x79, 0xc3, 0x62, 0xbe, 0xf0, 0xf7, 0xb0, 0x43, 0x52, 0xec, 0xfa, 0x69, 0xcb, 0xd3, 0xd3, 0x86, 0x38, 0xae, 0x28, 0x8a, 0x31, 0x51, 0x94, 0xf0, 0xf8, 0xb8, 0xf2, 0xc1, 0x39, 0xc8, 0xa0, 0xcf, 0x0d, 0xd7, 0x10, 0xf5, 0x08, 0x54, 0xaf, 0x91, 0x0d, 0x64, 0xc0, 0x5f, 0xfe, 0xed, 0x27, 0xd0, 0x82, 0xe9, 0x68, 0xc2, 0xfc, 0xfc, 0x8c, 0x8b, 0x8b, 0x0b, 0xca, 0xfa, 0x88, 0x78, 0x0c, 0x68, 0x7a, 0xdb, 0x50, 0xad, 0x35, 0x6d, 0xa3, 0x18, 0x8f, 0xa6, 0xa4, 0x59, 0xe1, 0xed, 0x6e, 0x6f, 0x1f, 0xee, 0xb9, 0xb8, 0xb8, 0xa1, 0xae, 0x4b, 0xda, 0x9e, 0x19, 0x1c, 0x46, 0x31, 0xd3, 0x62, 0xca, 0x68, 0x3a, 0xe1, 0xd5, 0xab, 0x57, 0xec, 0x96, 0x4b, 0x76, 0x87, 0xfd, 0x33, 0x35, 0x4d, 0x28, 0x42, 0xff, 0xb8, 0xce, 0xdd, 0xcf, 0xa2, 0x8e, 0x35, 0x87, 0xe3, 0x91, 0x16, 0x83, 0x8c, 0x23, 0xf2, 0x22, 0x47, 0x74, 0x55, 0x2f, 0x6f, 0x34, 0xec, 0xab, 0x86, 0x26, 0xea, 0x28, 0xd2, 0x02, 0x21, 0x02, 0x46, 0x63, 0x6b, 0x04, 0xa3, 0x51, 0x2f, 0x12, 0x0e, 0x85, 0x0d, 0x28, 0x34, 0x06, 0xd3, 0xef, 0x54, 0x11, 0x7d, 0xc1, 0x76, 0x48, 0xa5, 0xb1, 0xc5, 0x7a, 0xe8, 0x5b, 0xe1, 0xd8, 0xcc, 0x43, 0x14, 0xd3, 0x60, 0x89, 0xc1, 0x69, 0x9a, 0x12, 0x24, 0xa9, 0xff, 0x1e, 0xeb, 0xba, 0xb6, 0x2c, 0xf8, 0x3c, 0xf5, 0x7f, 0x76, 0x16, 0xb9, 0x56, 0x02, 0x9a, 0xda, 0xd4, 0xc2, 0xc6, 0x0e, 0x4c, 0xc7, 0x72, 0xdf, 0x4f, 0x82, 0xb6, 0xc9, 0x9c, 0xce, 0x72, 0xae, 0xaf, 0xaf, 0xd9, 0x56, 0xdb, 0x93, 0x0b, 0x61, 0x9a, 0xf8, 0xc7, 0xef, 0xba, 0x53, 0x84, 0xb4, 0xbb, 0xee, 0x92, 0x30, 0xb4, 0xfe, 0xf7, 0x6d, 0x0b, 0xda, 0xc6, 0x07, 0x4b, 0x63, 0x11, 0x17, 0x80, 0xb6, 0x69, 0x50, 0x46, 0xff, 0x0f, 0x48, 0xdf, 0x27, 0x23, 0x94, 0x38, 0x8e, 0x49, 0x64, 0xe8, 0x5d, 0x07, 0xef, 0x1f, 0x1e, 0x58, 0x2e, 0x21, 0x0c, 0x97, 0xde, 0xe5, 0x51, 0x4a, 0x2b, 0x2d, 0xcb, 0x93, 0xd0, 0xae, 0x2a, 0x06, 0x8e, 0xa0, 0x81, 0x10, 0x94, 0xe5, 0xb1, 0x4f, 0x1c, 0x83, 0xfd, 0xbe, 0x62, 0x7a, 0x6d, 0xcd, 0xc0, 0xa2, 0x24, 0xb4, 0x32, 0xd3, 0x2c, 0x45, 0x18, 0x09, 0xda, 0x66, 0x84, 0x07, 0x03, 0x3f, 0xff, 0x40, 0x86, 0x28, 0xad, 0x9e, 0xa1, 0xb3, 0xc3, 0x81, 0xce, 0x42, 0xe4, 0x31, 0xd5, 0xf1, 0xb4, 0xce, 0x9b, 0xcf, 0xe7, 0x1c, 0x76, 0x7b, 0xea, 0x4a, 0x3d, 0x0b, 0x77, 0xb1, 0x99, 0xe4, 0xc6, 0x3b, 0xf5, 0xb9, 0xf7, 0x9a, 0xc4, 0x59, 0x6f, 0xcb, 0x7b, 0xf2, 0x2f, 0x49, 0xc2, 0x88, 0x38, 0x4e, 0x19, 0x8d, 0x26, 0xa4, 0x59, 0x41, 0x10, 0xc6, 0x04, 0x61, 0x8d, 0x2a, 0x8f, 0x44, 0x4d, 0x4b, 0x18, 0xc6, 0xb4, 0xba, 0xa3, 0xad, 0xac, 0x41, 0x57, 0x55, 0x55, 0xec, 0x0f, 0xc7, 0x67, 0x36, 0xe0, 0xb6, 0x21, 0xd4, 0xc8, 0x01, 0x0b, 0xfe, 0x4b, 0xd6, 0xdd, 0x65, 0x59, 0xb1, 0xdb, 0x9d, 0x50, 0xd0, 0xaa, 0xaa, 0x09, 0x5f, 0x16, 0x51, 0xf7, 0xe6, 0xdc, 0x1b, 0x3a, 0x1c, 0x0e, 0x3e, 0x57, 0xd8, 0x45, 0xe6, 0xb9, 0x42, 0xd7, 0x76, 0x27, 0xe7, 0x25, 0xd7, 0x91, 0x0e, 0xd9, 0x89, 0xae, 0x11, 0x18, 0x16, 0x55, 0x9f, 0xcd, 0xab, 0x94, 0x3d, 0xa8, 0x5f, 0x78, 0x9c, 0x0f, 0x5f, 0xb8, 0x9b, 0x82, 0x86, 0x6f, 0x76, 0x08, 0xcd, 0x6b, 0xcd, 0x33, 0x14, 0xc1, 0x35, 0x1c, 0x43, 0xff, 0xef, 0x61, 0x81, 0x1e, 0x16, 0x64, 0x07, 0x3b, 0xba, 0x42, 0x3f, 0xcc, 0x1a, 0x77, 0x8f, 0xe5, 0xe0, 0x90, 0x97, 0x89, 0x67, 0xee, 0xf5, 0xc6, 0x49, 0x48, 0x4f, 0xef, 0x7b, 0x66, 0xf4, 0xf2, 0x6c, 0xc2, 0xd7, 0xc3, 0xe8, 0x52, 0xd9, 0x43, 0x74, 0x96, 0xc8, 0x57, 0x29, 0x45, 0x20, 0x0d, 0x81, 0xd4, 0x16, 0xb2, 0x37, 0xd6, 0x16, 0x30, 0x10, 0x2e, 0xfd, 0xae, 0xc3, 0xd8, 0x3c, 0x41, 0x04, 0x1d, 0x61, 0xa8, 0x11, 0x68, 0x84, 0xb0, 0x07, 0xfd, 0x7c, 0x11, 0xb3, 0xdd, 0x2e, 0xb9, 0xfb, 0xf4, 0xc8, 0x7e, 0xbf, 0x41, 0x88, 0x86, 0x28, 0x92, 0x84, 0x91, 0x25, 0xe5, 0x7d, 0xfc, 0xf8, 0x1b, 0x52, 0x4a, 0xce, 0xcf, 0x0b, 0x8b, 0x7c, 0xc8, 0x00, 0xa3, 0x1a, 0xa2, 0x28, 0x65, 0x94, 0x4e, 0x20, 0x1f, 0x91, 0xa4, 0x91, 0xd7, 0x2b, 0xef, 0x76, 0x9b, 0x7e, 0xf7, 0x3a, 0xe3, 0xea, 0xea, 0x82, 0xed, 0x76, 0x6b, 0x3d, 0x83, 0xf3, 0x14, 0x29, 0x73, 0x46, 0xa3, 0xbc, 0x4f, 0x8f, 0xda, 0xf2, 0xcb, 0x2f, 0x3f, 0xf5, 0xbe, 0xef, 0x27, 0xd6, 0xb0, 0x63, 0x8c, 0x3a, 0x96, 0xfa, 0x64, 0x32, 0x1b, 0x78, 0xdb, 0x6b, 0xea, 0xba, 0xe5, 0x78, 0x3c, 0xb2, 0x5c, 0xae, 0xf9, 0xf1, 0xc7, 0x9f, 0x29, 0xcb, 0x83, 0x67, 0xf3, 0x17, 0x45, 0xe1, 0xf5, 0xe0, 0xce, 0x4f, 0xfa, 0xe6, 0xe6, 0x86, 0xfd, 0x7e, 0xef, 0xaf, 0x41, 0xb7, 0x3b, 0x75, 0xde, 0xe7, 0xae, 0x11, 0x7c, 0x7a, 0x7a, 0xf2, 0x1e, 0xea, 0xe3, 0xf1, 0xd8, 0x5f, 0x4b, 0x57, 0x57, 0x57, 0xcf, 0xb8, 0x0f, 0x79, 0x9e, 0x93, 0xe7, 0xb9, 0x87, 0xd2, 0xe6, 0xf3, 0x39, 0x57, 0x57, 0x57, 0x14, 0x45, 0xe1, 0x35, 0xda, 0x93, 0xc9, 0x84, 0xeb, 0xeb, 0x6b, 0x6f, 0xf9, 0xea, 0x74, 0xaa, 0x1e, 0xd6, 0xec, 0x39, 0x1f, 0xee, 0x7a, 0x1c, 0x36, 0xbc, 0xb3, 0xd9, 0x8c, 0xf1, 0x78, 0xcc, 0xd3, 0xd3, 0x13, 0x55, 0x55, 0x71, 0x7e, 0x3e, 0xf7, 0x72, 0x21, 0x17, 0x80, 0xe2, 0x8c, 0x70, 0x7e, 0xfc, 0xf1, 0x47, 0x04, 0x16, 0x46, 0x0d, 0x02, 0x8b, 0x7c, 0x44, 0x51, 0xc4, 0x57, 0x5f, 0x9d, 0x59, 0x73, 0x9d, 0xd9, 0x8c, 0xa6, 0x2d, 0x49, 0xd3, 0x0c, 0xa3, 0x05, 0xb7, 0xb7, 0x5b, 0xf6, 0x7b, 0x85, 0x52, 0x2b, 0x36, 0xdb, 0x35, 0x51, 0x14, 0x92, 0x65, 0x39, 0x67, 0x67, 0x67, 0xdc, 0xdc, 0xdc, 0x3c, 0x83, 0xde, 0x8f, 0xc7, 0x23, 0xb7, 0xb7, 0xb7, 0x3c, 0x3d, 0x55, 0x34, 0x0d, 0x64, 0x19, 0xbc, 0x7e, 0x7d, 0xc9, 0xcd, 0xcd, 0x0d, 0x67, 0xe7, 0x73, 0x46, 0xe3, 0x9c, 0xdf, 0xff, 0xa1, 0xe5, 0x6c, 0x71, 0xe1, 0xdf, 0xbb, 0x7b, 0x7f, 0x9b, 0xcd, 0xc6, 0xbb, 0xdf, 0x61, 0x04, 0x71, 0x64, 0x27, 0xdc, 0xc7, 0x87, 0xa5, 0xe5, 0x0f, 0xc8, 0x90, 0x9b, 0xeb, 0x57, 0x24, 0x49, 0xc2, 0x2f, 0xef, 0x7f, 0xf5, 0xb2, 0x32, 0x7a, 0x9f, 0x02, 0x21, 0xec, 0xe1, 0x2a, 0xb4, 0x66, 0x3a, 0xcf, 0xd9, 0xec, 0xb6, 0xfc, 0xf6, 0xee, 0x3d, 0x51, 0x10, 0x73, 0x76, 0x76, 0x46, 0xab, 0x1a, 0x36, 0xc7, 0x1d, 0xbb, 0xc3, 0x9e, 0x5f, 0x02, 0xeb, 0x98, 0x18, 0xa7, 0x29, 0x8b, 0xc5, 0x99, 0xd5, 0x3c, 0x4b, 0xd9, 0x87, 0x0e, 0x19, 0xca, 0x63, 0xc3, 0x87, 0x5f, 0x6f, 0xa9, 0x2a, 0x28, 0xc6, 0x41, 0x1f, 0x61, 0x1b, 0xb1, 0xbc, 0x5f, 0xb1, 0x7e, 0x7c, 0xc2, 0xf4, 0xf7, 0x21, 0x75, 0x4d, 0x8b, 0xc2, 0x00, 0x51, 0xef, 0x2e, 0x27, 0x0d, 0xbc, 0x7b, 0xf7, 0xce, 0xfa, 0xd6, 0x27, 0x29, 0x20, 0x89, 0xe2, 0x98, 0xac, 0xc8, 0x29, 0x5b, 0xcb, 0x8a, 0x0e, 0x4d, 0x0d, 0x58, 0x25, 0xc2, 0x71, 0x5f, 0x5a, 0x89, 0xe1, 0x66, 0x4f, 0xd3, 0x74, 0x24, 0x49, 0x4a, 0xd9, 0x47, 0x6c, 0x4e, 0x17, 0x33, 0x22, 0x29, 0x51, 0x26, 0x20, 0x08, 0x63, 0x8c, 0x06, 0x8d, 0x26, 0x8e, 0x4e, 0xda, 0x6d, 0xe7, 0xd9, 0x1d, 0x49, 0x5b, 0x00, 0xc2, 0x41, 0xbe, 0xf7, 0x30, 0x53, 0x7d, 0x78, 0x96, 0x04, 0xbd, 0x13, 0x99, 0x3d, 0x53, 0xcc, 0x33, 0x75, 0x4c, 0x56, 0x14, 0xec, 0xaa, 0xe3, 0x69, 0x10, 0xd1, 0x7d, 0x64, 0x69, 0xd5, 0xd0, 0xd5, 0x2d, 0x26, 0x56, 0x74, 0x44, 0x5c, 0x5e, 0x5e, 0xd2, 0x34, 0x23, 0x8e, 0x47, 0xcb, 0xe0, 0xce, 0x8b, 0x13, 0x67, 0xe3, 0xec, 0xec, 0x8c, 0xe5, 0x72, 0xc9, 0xb1, 0x3a, 0x20, 0x9b, 0x06, 0x23, 0x0c, 0x4d, 0xd7, 0xda, 0xf0, 0xab, 0x38, 0x41, 0x75, 0x03, 0x23, 0xad, 0xc0, 0xa2, 0x07, 0xaa, 0x69, 0xed, 0x74, 0x39, 0x1e, 0x93, 0x84, 0x11, 0x1f, 0x6e, 0x3f, 0x51, 0xd7, 0x35, 0x69, 0x96, 0x21, 0x85, 0x6d, 0xcc, 0xe9, 0xef, 0xf5, 0xf6, 0x0b, 0x49, 0x92, 0x46, 0xd9, 0xa8, 0xd5, 0x34, 0x4d, 0x11, 0xad, 0x62, 0xbd, 0x5a, 0xb1, 0x5a, 0x2e, 0x29, 0xb2, 0x84, 0x2a, 0xab, 0x7d, 0x96, 0xf9, 0x74, 0x32, 0x45, 0xb5, 0x56, 0x4d, 0xd0, 0x29, 0xac, 0x65, 0xab, 0x51, 0xe8, 0xae, 0x23, 0xe8, 0x11, 0xb8, 0x28, 0x8a, 0x98, 0x4c, 0xc6, 0x44, 0xe3, 0x98, 0xea, 0x68, 0xf3, 0x07, 0xf6, 0xe5, 0x91, 0x20, 0xea, 0xc3, 0x93, 0x7a, 0xd5, 0xc6, 0x50, 0x6e, 0xec, 0xea, 0x58, 0x18, 0x86, 0x10, 0x48, 0x96, 0x4b, 0x6b, 0xe8, 0x54, 0x14, 0x05, 0x65, 0x59, 0xd3, 0xb6, 0xfb, 0xfe, 0x7a, 0x0f, 0x31, 0xe6, 0x84, 0x1a, 0x17, 0x45, 0xc1, 0x28, 0x1d, 0x11, 0xca, 0x88, 0xae, 0x97, 0x80, 0x56, 0x54, 0x83, 0x41, 0x51, 0x7f, 0x51, 0x22, 0x6c, 0x9d, 0x03, 0xc5, 0x33, 0x97, 0xd1, 0xb2, 0x2c, 0x09, 0x84, 0xa4, 0xde, 0x59, 0x83, 0x1e, 0xdd, 0x76, 0xec, 0xcb, 0x23, 0x75, 0xd3, 0x60, 0x22, 0x69, 0xa5, 0x78, 0xea, 0x84, 0x5a, 0x6f, 0x77, 0x56, 0xd6, 0x3a, 0x74, 0x85, 0xfb, 0x82, 0x8a, 0xd9, 0xf3, 0xda, 0x76, 0xbb, 0x1d, 0x4d, 0x55, 0x93, 0xc7, 0x11, 0x55, 0xd5, 0x10, 0x45, 0x09, 0x61, 0x18, 0xb3, 0x5a, 0x3d, 0x59, 0x1d, 0xba, 0x2b, 0x52, 0xa7, 0x89, 0xa0, 0x7e, 0xd6, 0x59, 0x0e, 0x33, 0xc9, 0xdd, 0x21, 0xd7, 0xb6, 0xad, 0xdf, 0x57, 0x0d, 0xf5, 0xe7, 0xae, 0x98, 0x47, 0x51, 0xe4, 0xed, 0x2c, 0x87, 0xcf, 0x31, 0xf4, 0x7c, 0x8f, 0xfb, 0xbd, 0x88, 0x7b, 0xa1, 0x2f, 0x77, 0xd7, 0xe3, 0xf1, 0xd8, 0xc3, 0xf6, 0x5f, 0x8a, 0x0f, 0x4c, 0xd3, 0xfc, 0x33, 0xbd, 0xf8, 0xf0, 0xa6, 0x71, 0x5f, 0xc6, 0x10, 0xfe, 0x1c, 0x42, 0xeb, 0x0e, 0x2e, 0x1e, 0xea, 0xe3, 0x87, 0xbf, 0x1d, 0x0c, 0xfa, 0xd2, 0xbb, 0xf7, 0x64, 0x97, 0xd9, 0x0c, 0x9a, 0x21, 0x3e, 0xd3, 0xf2, 0x6b, 0x65, 0xa1, 0x77, 0x7b, 0x63, 0xdb, 0xb8, 0x3d, 0x63, 0x4e, 0x71, 0xad, 0x26, 0x08, 0xd1, 0x58, 0xf2, 0x4c, 0x40, 0x88, 0xc2, 0x42, 0x70, 0x46, 0x58, 0x0d, 0x62, 0x10, 0xd8, 0x14, 0x1e, 0x41, 0x87, 0x14, 0x1a, 0x19, 0x28, 0xd0, 0x0d, 0x4d, 0x73, 0xa4, 0x6b, 0x1b, 0x9a, 0xf2, 0x89, 0xdd, 0x7e, 0x43, 0x79, 0xdc, 0x12, 0x45, 0x92, 0xd1, 0x28, 0x46, 0x06, 0x1d, 0xbb, 0xdd, 0x96, 0xd5, 0xe3, 0x9a, 0x28, 0x91, 0x96, 0xa9, 0x2c, 0x23, 0x26, 0x23, 0x2b, 0x65, 0x89, 0x43, 0x7b, 0x11, 0x1c, 0x0e, 0x07, 0xce, 0x17, 0xb3, 0xfe, 0x35, 0x6b, 0x16, 0x8b, 0x19, 0x59, 0x76, 0x85, 0x10, 0x82, 0xfd, 0x7e, 0xcf, 0xbb, 0x5f, 0x7f, 0xf1, 0x84, 0xa5, 0xc9, 0x64, 0xc2, 0x62, 0x31, 0xf3, 0x4e, 0x69, 0x87, 0xc3, 0xce, 0x92, 0xe9, 0x36, 0x2b, 0x2f, 0x91, 0x29, 0x8a, 0xc2, 0x7a, 0x98, 0x3f, 0x3e, 0xb2, 0x5c, 0x2e, 0xf9, 0x78, 0x7b, 0x8b, 0xea, 0x7e, 0x26, 0x08, 0x02, 0xb2, 0x2c, 0xb3, 0x50, 0xfe, 0xd9, 0x05, 0xe7, 0x97, 0x01, 0x87, 0xc3, 0x81, 0xfd, 0x7e, 0x4f, 0x11, 0x59, 0xe3, 0x8f, 0xaa, 0x69, 0xbc, 0x6b, 0x60, 0x36, 0x1a, 0xb3, 0xb8, 0xb8, 0xb4, 0x07, 0x4a, 0x92, 0xd0, 0xb6, 0x2d, 0xa3, 0x9e, 0x4b, 0xe1, 0xf6, 0xd0, 0xbb, 0xdd, 0x8e, 0xd5, 0x72, 0xe9, 0xcd, 0x66, 0x1c, 0xc9, 0xd1, 0xfd, 0x77, 0x77, 0x93, 0xe6, 0xd9, 0x88, 0xb7, 0x6f, 0xbf, 0xf6, 0x7b, 0x79, 0x67, 0x6f, 0xfa, 0xcb, 0x2f, 0xbf, 0x70, 0x38, 0x74, 0xcc, 0xe6, 0x91, 0x27, 0xe0, 0x0d, 0x11, 0x22, 0x37, 0xcd, 0x6e, 0x36, 0x1b, 0xb6, 0xdb, 0xad, 0x25, 0x02, 0xf6, 0x0d, 0x04, 0xe0, 0x23, 0x56, 0xdd, 0x7e, 0xd0, 0x35, 0x1c, 0x4e, 0x3e, 0xe6, 0x64, 0x5d, 0xce, 0x0d, 0xce, 0xba, 0xd3, 0x85, 0xde, 0xd4, 0x46, 0x08, 0xc1, 0xe5, 0xe5, 0xa5, 0xdf, 0x7f, 0x2d, 0x97, 0x4b, 0xda, 0xae, 0x26, 0x4d, 0x13, 0x5f, 0xe0, 0xb5, 0xe9, 0x7a, 0x48, 0x7f, 0x4a, 0x12, 0x67, 0xc4, 0xf1, 0x7d, 0x7f, 0x48, 0xcf, 0x49, 0xd2, 0x08, 0x63, 0x34, 0x3f, 0xfd, 0xf4, 0x33, 0xf7, 0xf7, 0xf7, 0xbe, 0xc1, 0xfc, 0xed, 0xb7, 0xdf, 0x28, 0x8a, 0x82, 0xeb, 0xeb, 0x6b, 0xce, 0xce, 0xce, 0x18, 0x8f, 0x6b, 0xdf, 0x68, 0xc5, 0x71, 0xcc, 0xe1, 0xb0, 0xe7, 0x70, 0xa0, 0x47, 0x65, 0x72, 0x0e, 0x87, 0x92, 0xb2, 0xb4, 0x1e, 0xd0, 0xf3, 0xf9, 0x9c, 0xc5, 0x62, 0x41, 0xd8, 0xc3, 0xb0, 0x71, 0x1c, 0x13, 0x5e, 0x64, 0xfc, 0xf2, 0xcb, 0x2f, 0xfc, 0xfc, 0xf3, 0xcf, 0x74, 0x9d, 0x61, 0xb1, 0xb0, 0xe4, 0xc7, 0xe3, 0xf1, 0xc8, 0x7a, 0xbd, 0xe6, 0xcd, 0xb7, 0x5f, 0xfb, 0x7d, 0xb5, 0x8a, 0x0c, 0x81, 0xd2, 0xde, 0x4a, 0x53, 0xf5, 0x7e, 0xd3, 0xd6, 0xd4, 0xa3, 0x25, 0xcf, 0x46, 0xd6, 0xb3, 0x20, 0x8b, 0x99, 0x5f, 0x9e, 0xb1, 0xdd, 0x6f, 0xf8, 0xf1, 0xff, 0x7d, 0xcf, 0x64, 0x12, 0x10, 0x44, 0x11, 0x65, 0x59, 0xf2, 0xfe, 0xb7, 0x8f, 0x7d, 0xe3, 0x07, 0x04, 0x50, 0x1e, 0x5b, 0xe2, 0x28, 0x23, 0x0a, 0x0d, 0x75, 0xd3, 0xf0, 0xd3, 0x8f, 0xbf, 0x12, 0x7f, 0xb0, 0xbc, 0x8e, 0xd7, 0xaf, 0x5f, 0x33, 0x9f, 0xcf, 0x6d, 0xbc, 0x69, 0x12, 0x73, 0x68, 0x4a, 0xaa, 0x5e, 0x4a, 0xeb, 0x22, 0x80, 0xad, 0x5f, 0xfd, 0xb2, 0xcf, 0xc3, 0x0e, 0x99, 0x2f, 0x16, 0xe4, 0xd3, 0x09, 0x1f, 0xef, 0xef, 0x38, 0x56, 0x25, 0x42, 0x2a, 0xb4, 0x86, 0x22, 0x0f, 0xfb, 0x73, 0xcd, 0x50, 0x1f, 0x5a, 0x96, 0xcb, 0x03, 0x70, 0x40, 0x26, 0x01, 0xcb, 0x27, 0xc5, 0x3f, 0x5e, 0x5e, 0x10, 0x04, 0xd2, 0x9a, 0xc3, 0x04, 0x29, 0x8a, 0x06, 0x8c, 0xec, 0x75, 0xd3, 0xe6, 0x64, 0xde, 0x12, 0x3c, 0x77, 0xbc, 0xb4, 0xba, 0x7c, 0x77, 0xb6, 0x9c, 0x38, 0x44, 0x62, 0x60, 0xc0, 0xa2, 0x55, 0x3f, 0x41, 0x0e, 0x5c, 0x33, 0x5d, 0x1e, 0xc1, 0xc3, 0xd3, 0x8a, 0x3c, 0xcf, 0xad, 0xc4, 0x56, 0x1b, 0x02, 0x21, 0x39, 0x56, 0x15, 0xbb, 0xc7, 0x2d, 0x91, 0x84, 0xe2, 0xfc, 0xba, 0xbf, 0x2e, 0xed, 0xda, 0x2a, 0x4e, 0x42, 0x9a, 0x26, 0xf7, 0x01, 0x40, 0xa1, 0x0c, 0xfd, 0xe3, 0x3d, 0x8f, 0x97, 0xe6, 0x59, 0x44, 0xb4, 0x51, 0xfd, 0x80, 0xd2, 0xaf, 0xc0, 0xfc, 0x9f, 0x83, 0xf0, 0x94, 0x03, 0x1f, 0x04, 0x68, 0x0c, 0xaa, 0x51, 0xbe, 0xa0, 0xbb, 0x82, 0x68, 0x09, 0x63, 0x3d, 0x4a, 0xab, 0xb0, 0x39, 0xf3, 0x69, 0xca, 0xee, 0x60, 0xb3, 0xd6, 0xb3, 0x2c, 0xe3, 0x9b, 0x6f, 0xbe, 0x62, 0x32, 0x79, 0x64, 0x3a, 0x1d, 0xfb, 0xa6, 0x3d, 0x8c, 0x24, 0xb1, 0x48, 0x3c, 0x71, 0x2c, 0x90, 0xa1, 0x7f, 0x3d, 0xaa, 0xed, 0x3c, 0xff, 0x45, 0xb4, 0xd2, 0x9b, 0x3d, 0x39, 0xb4, 0xaf, 0x6e, 0x5b, 0x26, 0x3d, 0xea, 0xe6, 0x08, 0x8e, 0x43, 0xc3, 0x18, 0x1b, 0xb9, 0x2a, 0x3c, 0xe9, 0xb1, 0x69, 0x1a, 0x76, 0xbd, 0x35, 0xac, 0xb3, 0x24, 0x2f, 0xcb, 0x03, 0x51, 0x1c, 0x60, 0xb4, 0x60, 0xb7, 0x3d, 0xd0, 0x94, 0x15, 0x8f, 0xf7, 0x4b, 0x9a, 0x12, 0xb2, 0x6c, 0xc3, 0xf5, 0xb7, 0x97, 0xb6, 0xf6, 0x49, 0x89, 0xe9, 0x09, 0x80, 0x52, 0x4a, 0x04, 0x83, 0x98, 0x6f, 0x29, 0xbc, 0x6b, 0xa1, 0x94, 0x12, 0xdd, 0x5a, 0x9f, 0x87, 0xb6, 0x6e, 0xd8, 0xad, 0x9e, 0x28, 0x7a, 0xa4, 0xfb, 0x70, 0x38, 0x20, 0xa4, 0x64, 0x72, 0x36, 0x27, 0x48, 0xe2, 0x67, 0x24, 0x6e, 0xef, 0xf3, 0xd2, 0xf6, 0xcf, 0xe1, 0x86, 0xd8, 0x17, 0x91, 0x1f, 0xce, 0xea, 0xfa, 0x78, 0x3c, 0x82, 0x36, 0x5c, 0xcc, 0xce, 0xb9, 0xbb, 0xbb, 0xf7, 0xf1, 0xcd, 0x1f, 0x3f, 0x7e, 0x24, 0x74, 0x04, 0x98, 0x97, 0xe1, 0x28, 0x8e, 0xed, 0xeb, 0xe0, 0x91, 0xb2, 0x2c, 0x7d, 0x11, 0x1c, 0x4e, 0x3d, 0x2f, 0x8b, 0xe9, 0x90, 0x35, 0x3e, 0x9f, 0xcf, 0xa9, 0xeb, 0xda, 0x6a, 0x30, 0xfb, 0x82, 0x3c, 0x9c, 0x88, 0x87, 0xfa, 0x6f, 0xf7, 0x78, 0xee, 0xd0, 0xec, 0xba, 0xce, 0x7f, 0x01, 0xc3, 0xf4, 0x33, 0x77, 0x80, 0x00, 0x6c, 0xb7, 0xbb, 0x67, 0xc6, 0x2e, 0x43, 0x2d, 0xbb, 0x25, 0x69, 0x1d, 0x3f, 0xb3, 0x53, 0x75, 0x08, 0x84, 0x94, 0x92, 0x40, 0x9c, 0xd0, 0x01, 0x6f, 0x0b, 0xf9, 0xc2, 0xa9, 0xee, 0x65, 0x90, 0xcb, 0x10, 0xb2, 0x77, 0x86, 0x0d, 0x27, 0x18, 0xe7, 0xb4, 0xdf, 0x15, 0x04, 0xfe, 0x26, 0x36, 0x5e, 0x64, 0x68, 0xa1, 0x14, 0x57, 0xd0, 0xc3, 0xdc, 0xc9, 0xd5, 0x42, 0x24, 0x81, 0xfd, 0xdd, 0x47, 0x35, 0x4a, 0x02, 0xc2, 0xa0, 0xb4, 0x84, 0x1d, 0x03, 0x52, 0x5a, 0xa8, 0xbd, 0xed, 0x6a, 0xea, 0x7a, 0x67, 0x49, 0x58, 0xf2, 0x89, 0x38, 0x0a, 0x49, 0x17, 0x23, 0xda, 0xa6, 0xe4, 0x69, 0x73, 0x4f, 0x5b, 0xef, 0x11, 0x52, 0x91, 0x66, 0x01, 0x69, 0x7f, 0x18, 0xa4, 0xb1, 0x35, 0x7e, 0xa9, 0x8e, 0x25, 0xb5, 0xa8, 0x88, 0xe3, 0x94, 0xf3, 0xf9, 0x82, 0xb2, 0x3c, 0x50, 0x14, 0x19, 0x59, 0x36, 0x02, 0xf0, 0x46, 0x3c, 0x6d, 0xd7, 0xf8, 0x62, 0xe9, 0x76, 0xd8, 0x2e, 0x49, 0xcc, 0x4a, 0xa2, 0xec, 0x21, 0x14, 0xc5, 0x21, 0xbb, 0xfd, 0x96, 0x87, 0xc7, 0x7b, 0xbf, 0x2b, 0x1a, 0x7e, 0x8f, 0x6d, 0x7d, 0xca, 0x2a, 0xb7, 0x0e, 0x63, 0x3b, 0xaf, 0x19, 0x6d, 0x9a, 0x86, 0xb6, 0xab, 0xbd, 0x8e, 0xfb, 0xfc, 0xfc, 0xfc, 0x99, 0xd1, 0xcf, 0xd0, 0xb9, 0xca, 0xb9, 0x9f, 0xd9, 0x42, 0x54, 0xf8, 0xfd, 0xfb, 0xf6, 0xe9, 0x89, 0xd9, 0x6c, 0xca, 0x68, 0x54, 0xf4, 0xe6, 0x2b, 0xa3, 0x1e, 0x52, 0xb7, 0x7a, 0x75, 0xf7, 0x9d, 0xed, 0x76, 0x3b, 0x7e, 0xfd, 0xf5, 0x57, 0x57, 0xf4, 0x58, 0x0b, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xee, 0xee, 0xf6, 0x84, 0x21, 0x8c, 0xc7, 0x31, 0xbf, 0xff, 0xfd, 0xd7, 0xa4, 0x59, 0xe0, 0x4d, 0x35, 0xdc, 0x63, 0x6e, 0x36, 0x4f, 0xfe, 0x5a, 0xb9, 0xb8, 0xb8, 0xa0, 0x28, 0x72, 0xe6, 0xf3, 0x99, 0x97, 0xa0, 0x49, 0x29, 0x3d, 0x24, 0xed, 0x8a, 0xe5, 0x7e, 0xbf, 0xe7, 0xfe, 0xfe, 0x9e, 0xdb, 0xdb, 0x4f, 0x5e, 0x5d, 0x51, 0x55, 0x25, 0x57, 0x57, 0xd6, 0x7a, 0xf6, 0xd3, 0xa7, 0x8f, 0x3e, 0x15, 0xcd, 0xa5, 0xb6, 0x89, 0xde, 0xd0, 0xc5, 0xe5, 0x96, 0xcf, 0x66, 0x33, 0xe6, 0xf3, 0xb9, 0x85, 0x50, 0x8f, 0xc7, 0xde, 0xe1, 0xb0, 0x45, 0x08, 0xc9, 0xf2, 0x71, 0xcd, 0xfb, 0xf7, 0xf7, 0xc4, 0xb1, 0x25, 0xdb, 0x15, 0xa3, 0x33, 0x82, 0x40, 0xf2, 0xc7, 0x3f, 0xfe, 0x91, 0xe5, 0x72, 0xe9, 0x77, 0x9c, 0x9b, 0xcd, 0x86, 0xb3, 0xb3, 0x33, 0xbe, 0xf9, 0xe6, 0x1b, 0x0e, 0x87, 0x03, 0x75, 0x7d, 0xf4, 0x4c, 0xe3, 0xe1, 0xfd, 0xd7, 0x75, 0x0d, 0xdb, 0x6d, 0x43, 0x9a, 0x4c, 0x7d, 0x53, 0x62, 0x43, 0x6b, 0xec, 0xf7, 0xe4, 0x10, 0xaf, 0xe3, 0xa1, 0xe5, 0x87, 0x1f, 0x7e, 0xa2, 0xaa, 0xe0, 0xcd, 0x9b, 0x33, 0xc2, 0x30, 0xe4, 0xc7, 0x1f, 0x3f, 0x70, 0x3c, 0xc2, 0x7c, 0x6e, 0x51, 0x9d, 0xb2, 0x2e, 0x09, 0x0b, 0x0b, 0xb1, 0x7b, 0xf3, 0x15, 0x29, 0x11, 0x42, 0x72, 0x7f, 0x5f, 0x33, 0x9b, 0xd8, 0x03, 0xdd, 0x35, 0x83, 0x55, 0x55, 0x11, 0x67, 0xf6, 0x40, 0xfb, 0xee, 0xbb, 0x1b, 0xdb, 0x84, 0x25, 0xa9, 0x2d, 0xce, 0x51, 0x02, 0x48, 0xaa, 0xaa, 0xb1, 0x36, 0xb2, 0x4d, 0x43, 0x51, 0x14, 0x8c, 0xc7, 0x63, 0x1b, 0x62, 0xd2, 0xd9, 0x83, 0xd9, 0xfd, 0xef, 0xe3, 0xe3, 0x8e, 0xa6, 0x6b, 0x29, 0xe4, 0xe4, 0xd9, 0xaa, 0x2d, 0x0c, 0x43, 0x42, 0x61, 0x77, 0xbb, 0x51, 0x14, 0x31, 0x19, 0x8d, 0xa1, 0x27, 0x59, 0x15, 0x45, 0xc1, 0xf9, 0xf9, 0x39, 0x32, 0x0c, 0xd8, 0xad, 0x6e, 0x59, 0xaf, 0xd7, 0x1c, 0x8e, 0x3b, 0x50, 0x81, 0xb5, 0x09, 0x9d, 0x46, 0xfd, 0x35, 0xda, 0xd0, 0x12, 0xd3, 0x54, 0x25, 0x69, 0x92, 0xa3, 0x4c, 0x47, 0x5d, 0x1f, 0x88, 0x12, 0x09, 0x46, 0xfa, 0x2c, 0x86, 0xa0, 0xb7, 0x86, 0x0d, 0xa2, 0x93, 0x0d, 0xad, 0xbb, 0x0f, 0x44, 0x6f, 0xd3, 0xf9, 0x59, 0x1e, 0x84, 0x71, 0x56, 0xc6, 0x0d, 0x79, 0x94, 0x58, 0x39, 0x60, 0x60, 0xcf, 0x30, 0x97, 0xc9, 0x7e, 0xac, 0x2a, 0x7f, 0x0e, 0x75, 0xbd, 0x91, 0x8c, 0xe9, 0xb3, 0xdb, 0xed, 0xbe, 0xdf, 0x9a, 0x10, 0xbd, 0x7b, 0xf7, 0x8e, 0xfd, 0xde, 0x36, 0x8e, 0x67, 0xe7, 0xf3, 0xc1, 0xf0, 0x65, 0x7c, 0xaa, 0x5e, 0x56, 0x58, 0x8d, 0xbf, 0x11, 0x36, 0x4e, 0xba, 0xeb, 0x7a, 0xdd, 0xb6, 0xee, 0x0b, 0xb3, 0xd2, 0x74, 0x55, 0xe3, 0xfd, 0x42, 0x9a, 0xc6, 0x4e, 0x81, 0xaa, 0x69, 0x9f, 0x91, 0xc9, 0x34, 0xd6, 0x7c, 0x87, 0x7e, 0x9d, 0x69, 0x24, 0x9f, 0x59, 0x5f, 0xbb, 0xb8, 0xd1, 0x30, 0x0c, 0xf9, 0xbb, 0xbf, 0xfb, 0x3b, 0x3e, 0x7d, 0xfa, 0xc4, 0x5f, 0xff, 0xfa, 0x57, 0x6e, 0x6f, 0x6f, 0xf9, 0xf8, 0x71, 0xcd, 0xef, 0x7f, 0x6f, 0x9b, 0x4b, 0xdb, 0xec, 0x1d, 0x20, 0x90, 0xe8, 0x81, 0x97, 0x40, 0x10, 0x04, 0xd4, 0xa5, 0x3d, 0x1f, 0xd2, 0xd8, 0xc6, 0xd5, 0xee, 0x76, 0x7b, 0x46, 0xf9, 0x04, 0x69, 0x24, 0xe7, 0xe7, 0xe7, 0xdc, 0xde, 0x7f, 0xb2, 0x44, 0xd4, 0x9d, 0x21, 0x92, 0x91, 0xf7, 0x89, 0x77, 0x96, 0xb9, 0x56, 0xb5, 0xd0, 0xd1, 0x34, 0x5d, 0x6f, 0xba, 0x64, 0x58, 0xad, 0x6a, 0x84, 0x80, 0x9b, 0x9b, 0x29, 0xb3, 0xd9, 0x8c, 0xcd, 0x66, 0x43, 0x9e, 0xa7, 0x04, 0x52, 0xd2, 0xd4, 0x76, 0xd8, 0x1c, 0x8d, 0xc6, 0x64, 0x49, 0x46, 0x7d, 0xac, 0x9f, 0xc5, 0x57, 0x6b, 0xf1, 0x22, 0x90, 0xa5, 0x27, 0x36, 0x47, 0x51, 0x6a, 0x49, 0x7d, 0x8d, 0xa2, 0x13, 0xce, 0x8b, 0x25, 0xa6, 0x88, 0xad, 0x33, 0x5e, 0x73, 0xa8, 0x49, 0xb3, 0x82, 0xae, 0x69, 0x51, 0xdd, 0x1e, 0x23, 0x54, 0xaf, 0x76, 0x92, 0xa8, 0x46, 0x11, 0xc6, 0xf2, 0x19, 0x8a, 0xac, 0x7b, 0x62, 0x64, 0x24, 0xad, 0x89, 0x8f, 0x78, 0x61, 0x60, 0xa3, 0xb5, 0xa6, 0x73, 0x2b, 0x99, 0xba, 0x21, 0x0b, 0x73, 0xee, 0xee, 0x1e, 0x19, 0x8d, 0x6c, 0x00, 0xd5, 0x87, 0x0f, 0x07, 0xc4, 0x7f, 0xfa, 0xcf, 0xff, 0x9b, 0x89, 0xe3, 0xd8, 0xe7, 0x21, 0xbb, 0x5d, 0x66, 0x9e, 0xe7, 0xbe, 0xa0, 0x76, 0x5d, 0xe7, 0x93, 0x98, 0x1c, 0x6b, 0xd6, 0xee, 0x43, 0x4f, 0x13, 0xf6, 0x90, 0x82, 0xef, 0x6d, 0xf1, 0x06, 0x85, 0xd1, 0x75, 0x83, 0xce, 0x6c, 0xa5, 0x2c, 0x4b, 0x82, 0x48, 0x7e, 0xe6, 0x3b, 0x3e, 0x4c, 0x2b, 0x73, 0xd6, 0xad, 0xce, 0xbb, 0xdb, 0x3d, 0x87, 0x2b, 0xc8, 0x71, 0x9c, 0x3e, 0x63, 0x0d, 0xbb, 0x49, 0xc8, 0x1d, 0x62, 0xee, 0xdf, 0xb8, 0xdf, 0xde, 0x82, 0xb4, 0x87, 0x51, 0xd1, 0xea, 0x19, 0x27, 0x60, 0x08, 0xbb, 0xbb, 0x9f, 0xf9, 0xd2, 0xf4, 0xee, 0x1b, 0x1f, 0xd4, 0x17, 0x43, 0x5b, 0x3c, 0x47, 0xa0, 0x31, 0xcf, 0x56, 0x0a, 0xf6, 0x3d, 0xea, 0x93, 0x07, 0x75, 0x60, 0xf7, 0xb0, 0xb2, 0x0f, 0xc3, 0x09, 0xe5, 0xc0, 0x00, 0x46, 0x75, 0x44, 0x41, 0x45, 0x18, 0x81, 0xd1, 0x25, 0x65, 0xfd, 0x44, 0x79, 0x7c, 0xa4, 0x69, 0x37, 0x74, 0xaa, 0xc4, 0xe8, 0x06, 0x4a, 0xd8, 0x6e, 0xb7, 0x74, 0x5d, 0xc5, 0x6c, 0x3e, 0xe1, 0xec, 0x6c, 0x46, 0x14, 0x07, 0x54, 0xd5, 0xbe, 0x87, 0xa8, 0xb5, 0x95, 0x3b, 0x4d, 0xe6, 0x4c, 0xa7, 0x0b, 0xba, 0x56, 0xb3, 0x5c, 0x6e, 0xd8, 0x6e, 0xf6, 0x18, 0x03, 0x67, 0x57, 0xe9, 0x49, 0x6e, 0xd1, 0x1f, 0xec, 0xae, 0xe8, 0x3a, 0x8b, 0x51, 0x67, 0x59, 0xea, 0x26, 0xf7, 0x21, 0x72, 0x51, 0xd5, 0x1b, 0x26, 0x93, 0x09, 0x52, 0x86, 0x3c, 0x3c, 0x3c, 0x5a, 0x09, 0x59, 0xd5, 0x11, 0x86, 0xf6, 0xfb, 0x19, 0x8d, 0x72, 0xc6, 0xe3, 0xa9, 0xf7, 0x24, 0x5e, 0xcc, 0xcf, 0xe8, 0x3a, 0xcd, 0xed, 0xed, 0x2d, 0x87, 0x43, 0xc9, 0x78, 0x12, 0x7e, 0xd1, 0x90, 0x68, 0xa8, 0x72, 0xa8, 0xaa, 0x8a, 0xf9, 0x7c, 0xce, 0x78, 0x3c, 0x66, 0xb9, 0x5c, 0xb2, 0xdf, 0xef, 0x3d, 0x81, 0xf2, 0xea, 0xfa, 0x7c, 0x50, 0xac, 0x06, 0xf6, 0xbf, 0xd2, 0x1e, 0x0c, 0xb7, 0x77, 0x1f, 0x51, 0x9d, 0x61, 0xb9, 0xdc, 0xb3, 0xdd, 0xc2, 0xd9, 0x19, 0x7c, 0xfb, 0xed, 0xb7, 0x44, 0x51, 0xc4, 0x72, 0xb9, 0xe4, 0x9b, 0x6f, 0x5f, 0x7b, 0x05, 0x87, 0xb3, 0x48, 0x75, 0x9d, 0x7c, 0xdb, 0xb6, 0x9c, 0x9f, 0x5f, 0x58, 0x46, 0x69, 0x9a, 0xfa, 0x34, 0x32, 0x67, 0xac, 0x62, 0xbd, 0xcd, 0x2b, 0x7f, 0x3d, 0x3b, 0xfb, 0xd5, 0x61, 0x4a, 0xa0, 0x2b, 0xb2, 0xee, 0xda, 0x74, 0x72, 0xb5, 0xc9, 0xc4, 0x46, 0xbf, 0xfe, 0xfc, 0xf3, 0xcf, 0x14, 0x45, 0xe1, 0x11, 0x02, 0xe7, 0x25, 0xef, 0xae, 0x57, 0x07, 0xc3, 0xba, 0xb5, 0xc3, 0x68, 0x34, 0xe2, 0xe6, 0xe6, 0xc6, 0x37, 0x11, 0x60, 0x9b, 0x1d, 0xb7, 0x37, 0x77, 0x5e, 0xef, 0xf3, 0xf9, 0xbc, 0xcf, 0x47, 0xb7, 0xf7, 0xcb, 0xd3, 0xd3, 0x13, 0xbb, 0xdd, 0xee, 0x19, 0xe9, 0x10, 0x40, 0xab, 0x88, 0xdb, 0xdb, 0x5b, 0xff, 0xb3, 0xeb, 0xf5, 0xda, 0x37, 0xed, 0xd3, 0xe9, 0x94, 0xae, 0xb5, 0xb2, 0xa7, 0xba, 0xae, 0xfb, 0xc0, 0x9c, 0x9a, 0x24, 0x39, 0xa1, 0x74, 0xfb, 0xba, 0x26, 0x1f, 0x67, 0x14, 0x8b, 0x8c, 0x64, 0x94, 0x20, 0x02, 0x50, 0xa6, 0xeb, 0x23, 0x27, 0x25, 0xe3, 0x60, 0x82, 0x30, 0x92, 0xba, 0x6c, 0xd0, 0xad, 0xbd, 0xce, 0x3a, 0x63, 0xb3, 0xae, 0x93, 0x2c, 0x66, 0x9e, 0x9e, 0xd9, 0xa8, 0xd0, 0xdd, 0x11, 0x63, 0x7a, 0x19, 0x98, 0x52, 0xa8, 0x3e, 0x16, 0xf9, 0xdf, 0xfe, 0xf2, 0x9e, 0x20, 0x10, 0x1c, 0x8f, 0xa6, 0x57, 0x0e, 0x48, 0x0e, 0x07, 0x4d, 0x1c, 0xc3, 0xd5, 0xd5, 0x39, 0xaa, 0x79, 0xe4, 0xec, 0xba, 0xa0, 0x36, 0x2d, 0x97, 0xaf, 0xaf, 0x79, 0x3a, 0x6c, 0x48, 0x73, 0x8b, 0x72, 0x1c, 0x8f, 0x7b, 0x72, 0x99, 0xd9, 0xc9, 0x16, 0x41, 0x24, 0x22, 0x04, 0x58, 0xdf, 0x0c, 0x29, 0x08, 0xa2, 0x90, 0x7d, 0xbd, 0xed, 0xef, 0xe7, 0x90, 0x48, 0x06, 0x74, 0x9d, 0x0d, 0x26, 0xb1, 0x2b, 0x14, 0xc1, 0xfd, 0x6a, 0xcf, 0x62, 0x31, 0x26, 0xcd, 0x13, 0x46, 0xd3, 0x31, 0x46, 0x68, 0x8e, 0x55, 0x49, 0x14, 0x05, 0x54, 0x6d, 0x73, 0x3a, 0x8c, 0x11, 0x18, 0x65, 0x99, 0xec, 0xb1, 0x33, 0xc0, 0x51, 0x76, 0xea, 0x4c, 0x12, 0x5b, 0x70, 0x5a, 0x6d, 0xed, 0x60, 0x45, 0x9f, 0x59, 0x6f, 0x3f, 0x7f, 0x41, 0x14, 0x86, 0x64, 0x61, 0xcc, 0xb8, 0x28, 0x10, 0x06, 0x1e, 0x57, 0x4b, 0x8e, 0x55, 0xc5, 0x64, 0x36, 0xe5, 0xd0, 0x73, 0x7c, 0xdc, 0x90, 0x10, 0x48, 0x49, 0xd0, 0x69, 0xda, 0xb2, 0x46, 0xd5, 0x0d, 0x51, 0x3a, 0x41, 0x06, 0xa7, 0x10, 0x94, 0xa2, 0xc8, 0x50, 0x4a, 0xb1, 0x5e, 0x2f, 0x39, 0x1c, 0x0e, 0x5c, 0x7d, 0x75, 0x63, 0xcf, 0x1d, 0x63, 0x6c, 0xe1, 0xc4, 0x78, 0x3b, 0x53, 0x11, 0x04, 0x50, 0x36, 0x9f, 0x29, 0x78, 0xdc, 0x04, 0x9b, 0x65, 0x19, 0x6d, 0x59, 0xf9, 0x70, 0xa1, 0x38, 0x8e, 0x7d, 0xec, 0xa8, 0x2b, 0xbc, 0x26, 0xb3, 0xf5, 0x22, 0x20, 0x24, 0x4f, 0x32, 0xe8, 0x0c, 0xc2, 0x48, 0xf2, 0xd4, 0x2a, 0x17, 0x6c, 0xf4, 0xae, 0x43, 0x07, 0x6c, 0xfc, 0x67, 0x5d, 0xdb, 0xb4, 0x46, 0x7b, 0x1e, 0xe7, 0x74, 0x46, 0xd3, 0x68, 0x65, 0x63, 0x65, 0x87, 0x85, 0xd3, 0x18, 0x8a, 0x3a, 0x24, 0x4f, 0x0b, 0xaa, 0xc3, 0x91, 0xc7, 0xfb, 0x25, 0x42, 0x48, 0xa6, 0xb3, 0x05, 0x75, 0xa7, 0xb8, 0xbd, 0xbb, 0xe3, 0xec, 0xca, 0xaa, 0x44, 0x96, 0xeb, 0x15, 0x55, 0x55, 0x73, 0x76, 0x71, 0xe6, 0xcf, 0x8d, 0xac, 0x28, 0x48, 0xa2, 0x88, 0x87, 0x87, 0x07, 0xca, 0xb2, 0xc2, 0x6d, 0x73, 0xcf, 0xcf, 0x67, 0x7e, 0xd0, 0x74, 0x21, 0x63, 0xd5, 0xb1, 0xe4, 0xf6, 0xe3, 0x8a, 0x37, 0x37, 0x17, 0xa4, 0xb1, 0x95, 0xec, 0xae, 0x1f, 0xd7, 0xb4, 0xa2, 0xe6, 0xea, 0xd5, 0x8d, 0xdd, 0x69, 0x1b, 0x9b, 0xd3, 0x7e, 0x6c, 0x6b, 0x9b, 0x97, 0x8e, 0x22, 0x55, 0x91, 0x75, 0xeb, 0x93, 0xa0, 0xc4, 0x69, 0xdd, 0x9b, 0xa7, 0x19, 0x93, 0xd1, 0x88, 0xa2, 0xb3, 0x84, 0x47, 0x37, 0x74, 0x56, 0x4d, 0xcd, 0xea, 0xb0, 0xb3, 0x11, 0xad, 0x69, 0x42, 0x20, 0x5c, 0x94, 0xb8, 0x41, 0x61, 0x30, 0xae, 0x73, 0x90, 0xf6, 0x5e, 0x30, 0xaa, 0x8f, 0x8d, 0x6e, 0x5a, 0xe2, 0x5e, 0xb2, 0x1b, 0x08, 0xc9, 0x38, 0x2f, 0xd8, 0x6e, 0xb7, 0xd4, 0x65, 0xe3, 0x87, 0x8a, 0xed, 0x76, 0xcb, 0xc3, 0x43, 0x69, 0x77, 0xe8, 0xee, 0x30, 0x71, 0x07, 0x9a, 0x9b, 0x3e, 0x19, 0xb0, 0x35, 0xdd, 0xa1, 0xee, 0x0e, 0x2b, 0x4b, 0x78, 0x3b, 0x4d, 0xf3, 0xc3, 0x24, 0x23, 0xf7, 0x77, 0xa7, 0x83, 0x49, 0x3f, 0xf3, 0xf9, 0xf5, 0x5d, 0x64, 0xc0, 0x67, 0x45, 0xd2, 0x3d, 0x8e, 0x9b, 0x62, 0xdd, 0x63, 0xba, 0x43, 0x7c, 0x68, 0xdd, 0x6a, 0x77, 0x07, 0xa7, 0x9d, 0xba, 0x83, 0x56, 0xdc, 0xbf, 0x75, 0x70, 0xec, 0x70, 0xbf, 0xe1, 0x92, 0xb1, 0x94, 0x52, 0x98, 0x7e, 0x8f, 0x31, 0xf4, 0xf5, 0x1d, 0xbe, 0x7e, 0x57, 0xc8, 0x5f, 0x92, 0xfd, 0xdc, 0xfb, 0xb0, 0x46, 0x1f, 0x92, 0x70, 0x40, 0xb6, 0x53, 0x4a, 0xd1, 0xb5, 0xae, 0x78, 0xcb, 0x41, 0xa1, 0x37, 0x36, 0xdd, 0xc7, 0x11, 0x62, 0x8c, 0x41, 0xea, 0x3e, 0xc5, 0x4e, 0x18, 0xa2, 0xc0, 0x42, 0xed, 0x81, 0x94, 0x08, 0x69, 0x30, 0x81, 0x22, 0x0e, 0x3a, 0xca, 0xf2, 0xc0, 0xfa, 0xe9, 0x9e, 0xdd, 0xf6, 0x9e, 0x56, 0x6d, 0x09, 0x83, 0x8e, 0x20, 0x54, 0x18, 0x34, 0xcd, 0xbe, 0x66, 0x34, 0xca, 0x99, 0xcd, 0xae, 0x29, 0x46, 0x99, 0x35, 0x30, 0x68, 0x2b, 0xa2, 0xc8, 0x32, 0x21, 0x45, 0xdf, 0x70, 0x28, 0x65, 0xd8, 0x3c, 0xed, 0xa8, 0xeb, 0x96, 0xed, 0x76, 0xc7, 0xe1, 0x50, 0xa2, 0xb5, 0x61, 0xb9, 0xf9, 0x48, 0x1c, 0x0f, 0xc9, 0x31, 0x86, 0x2c, 0x4b, 0x58, 0x2c, 0x2c, 0xa9, 0x6d, 0xb5, 0x5a, 0x3d, 0xcb, 0xe9, 0x76, 0x8c, 0x75, 0xe7, 0xcd, 0x1d, 0x04, 0x01, 0x87, 0x43, 0xe9, 0x49, 0x72, 0x6f, 0x5e, 0x7f, 0xd5, 0xc3, 0x7a, 0x96, 0x83, 0xf1, 0xe9, 0xd3, 0x27, 0x76, 0xbb, 0x1d, 0x4f, 0x4f, 0x4f, 0xd4, 0xb5, 0xe2, 0x69, 0xbd, 0xf1, 0xc5, 0x6b, 0x34, 0xca, 0xd1, 0xba, 0x7a, 0x16, 0x1a, 0xf3, 0x52, 0xd3, 0xea, 0xd2, 0xbf, 0x9c, 0xe3, 0xd4, 0x6a, 0xb5, 0x7a, 0x26, 0x83, 0xfb, 0xed, 0xb7, 0x0f, 0x6c, 0x36, 0x1b, 0xc2, 0x30, 0xe4, 0xfc, 0xfc, 0x1c, 0x21, 0x04, 0x8f, 0x0f, 0x36, 0x6d, 0x6c, 0x34, 0xb2, 0xa8, 0x43, 0x92, 0x46, 0xbc, 0x7d, 0x7b, 0xf9, 0xac, 0xa8, 0xb6, 0x6d, 0x4b, 0x9a, 0xa6, 0xbc, 0x7e, 0xfd, 0x9a, 0xa6, 0x69, 0xbc, 0x43, 0x9d, 0x3b, 0x38, 0xdd, 0x77, 0xee, 0xb8, 0x23, 0x45, 0x51, 0x58, 0xdd, 0x6a, 0xdf, 0xf0, 0xb8, 0x29, 0xba, 0x28, 0x72, 0xaf, 0x4b, 0x77, 0x48, 0x86, 0x83, 0xda, 0xdb, 0xb6, 0xe5, 0xe3, 0xc7, 0x8f, 0x9e, 0x90, 0xb6, 0xdf, 0xdb, 0x26, 0xeb, 0xf1, 0xf1, 0xd1, 0xff, 0x79, 0x3a, 0x9d, 0xfa, 0x26, 0x69, 0x3c, 0x1e, 0x7b, 0x49, 0xa8, 0xd5, 0x65, 0x17, 0x74, 0x9d, 0x85, 0xd8, 0xb2, 0x2c, 0xe3, 0xe6, 0xe6, 0x86, 0xab, 0xab, 0x2b, 0xef, 0x54, 0x77, 0x38, 0x1c, 0x98, 0xcf, 0x17, 0x7e, 0xdd, 0xe0, 0xa4, 0x78, 0x6e, 0xb2, 0x68, 0x9a, 0x86, 0xba, 0xae, 0x7d, 0x1c, 0x2c, 0xe0, 0x0b, 0xbb, 0x8b, 0x09, 0x9d, 0x8c, 0x2f, 0xfc, 0x7d, 0x55, 0x96, 0x25, 0xfb, 0x7d, 0x8d, 0xd6, 0x78, 0x9e, 0xc0, 0x62, 0x71, 0x0e, 0xc2, 0x90, 0xe5, 0x29, 0x5f, 0x7d, 0xfd, 0xd6, 0x5b, 0x2e, 0xbb, 0x28, 0xd0, 0x30, 0xb4, 0xfa, 0xe4, 0x22, 0x4b, 0xa8, 0x75, 0x6b, 0x4d, 0x3d, 0x22, 0xd9, 0xa3, 0x00, 0x9a, 0xef, 0xbf, 0xff, 0x9e, 0xe3, 0xbe, 0xe4, 0xee, 0xd3, 0x3d, 0xbb, 0xa7, 0x6d, 0x2f, 0x79, 0x92, 0x1e, 0xad, 0xda, 0x6e, 0xb7, 0x56, 0x82, 0x2a, 0x42, 0xde, 0xbf, 0xff, 0xc0, 0x6a, 0xb5, 0xe9, 0x43, 0x4d, 0x0c, 0xbb, 0x2d, 0x4c, 0x67, 0xb6, 0x01, 0xaa, 0xeb, 0xda, 0x7f, 0xa6, 0x64, 0x90, 0xa6, 0x11, 0x79, 0x1a, 0x71, 0xf1, 0xe6, 0x8a, 0xb2, 0x6b, 0x58, 0xaf, 0x0f, 0xd6, 0x79, 0xec, 0x05, 0x9f, 0x46, 0x29, 0x65, 0xcd, 0x50, 0xa2, 0x98, 0x58, 0xc6, 0x68, 0xa5, 0x68, 0xab, 0x9a, 0xb6, 0x53, 0xd0, 0xb5, 0x24, 0x59, 0xe2, 0x49, 0x61, 0xaa, 0x5f, 0x8f, 0x0d, 0xcf, 0xa7, 0xe9, 0x34, 0x27, 0xcb, 0x12, 0x8c, 0x3b, 0x17, 0xfb, 0xc7, 0x74, 0x30, 0xfa, 0x70, 0x62, 0x7b, 0xc6, 0x43, 0xea, 0x55, 0x2d, 0x96, 0x10, 0xea, 0xe4, 0x4c, 0x3d, 0x44, 0xdb, 0x1f, 0xda, 0x51, 0x14, 0x51, 0xab, 0xee, 0x19, 0x01, 0x38, 0xea, 0x19, 0xd7, 0xb2, 0x69, 0x68, 0xeb, 0xe6, 0x39, 0x7c, 0xaf, 0xb5, 0x27, 0xdd, 0x45, 0x51, 0x44, 0x88, 0xa0, 0x98, 0x14, 0xcf, 0x5c, 0x36, 0xdd, 0xf0, 0x63, 0x65, 0x4c, 0xe9, 0x33, 0x92, 0xb1, 0xea, 0x3a, 0x6f, 0x99, 0xeb, 0xe0, 0xe2, 0x6c, 0x70, 0xed, 0x9c, 0x02, 0x6a, 0x3a, 0xaf, 0xef, 0xaf, 0xf6, 0x16, 0x2d, 0x70, 0xd6, 0xc3, 0xd6, 0xc3, 0x21, 0x1d, 0xf8, 0x43, 0xd4, 0xf6, 0xfa, 0x11, 0x92, 0xf2, 0x78, 0x64, 0x3a, 0x9a, 0xf2, 0xf5, 0xdb, 0x6f, 0x08, 0x84, 0xe4, 0xc3, 0xaf, 0x1f, 0x40, 0x69, 0x74, 0xdb, 0xd1, 0xa8, 0xce, 0xda, 0x92, 0x46, 0xf2, 0x44, 0xa2, 0x1e, 0xc4, 0xa4, 0x7e, 0x16, 0x7a, 0xd2, 0x5f, 0x21, 0x8e, 0xcb, 0x25, 0xf3, 0x9c, 0xc9, 0xa4, 0x45, 0xf7, 0xa1, 0x3f, 0x41, 0x6c, 0x65, 0x93, 0x41, 0x68, 0x13, 0x37, 0xe7, 0xd3, 0x39, 0x87, 0xf8, 0x88, 0x30, 0x02, 0x81, 0x64, 0x36, 0xb5, 0xeb, 0xa3, 0xdd, 0x7e, 0xeb, 0xcd, 0x90, 0x9c, 0x36, 0xdf, 0xbd, 0x7f, 0xb7, 0x32, 0xcd, 0xb2, 0x8c, 0x38, 0x8c, 0xd8, 0xac, 0xb7, 0x1c, 0x8f, 0x25, 0x75, 0xdd, 0x30, 0x2e, 0x26, 0x14, 0x93, 0x31, 0x41, 0x34, 0x21, 0x0a, 0x13, 0xf6, 0xc7, 0x1d, 0x41, 0x24, 0xc9, 0xb2, 0x02, 0x13, 0x4a, 0x5a, 0x65, 0x0d, 0x77, 0xf2, 0x24, 0xf1, 0x2e, 0x82, 0x2e, 0x21, 0xce, 0xd5, 0xa1, 0xfd, 0x7e, 0x8f, 0xd0, 0x01, 0xb2, 0x87, 0xfd, 0xeb, 0xba, 0x26, 0x4a, 0x62, 0x26, 0xe3, 0x11, 0xad, 0x30, 0x3d, 0x17, 0xc0, 0xa1, 0xc1, 0x02, 0x81, 0xe9, 0x55, 0x29, 0xc6, 0x17, 0x74, 0x19, 0xda, 0x6b, 0xa5, 0x33, 0xcd, 0xc9, 0x7b, 0x25, 0xcb, 0xbd, 0x1c, 0x55, 0x72, 0x1a, 0x56, 0xcb, 0xb2, 0xe4, 0xf5, 0xeb, 0x3d, 0xa1, 0xf3, 0x90, 0x76, 0x7b, 0x16, 0x77, 0xa8, 0x0c, 0x23, 0x49, 0xdd, 0xc5, 0xeb, 0x2c, 0x09, 0x5d, 0x81, 0x75, 0xf1, 0xa5, 0x0e, 0xaa, 0x19, 0xde, 0x50, 0x43, 0xcb, 0xd6, 0x97, 0xd0, 0xbc, 0x3b, 0x00, 0xcb, 0xfa, 0xf8, 0x2c, 0x0c, 0xc5, 0x4d, 0x69, 0xc3, 0x7d, 0xfe, 0x70, 0x82, 0x1b, 0xa6, 0xc1, 0xb9, 0x42, 0xec, 0xfe, 0x7e, 0x68, 0x3e, 0xe3, 0x76, 0xa0, 0xc3, 0x50, 0x82, 0xe1, 0x9a, 0xc0, 0xef, 0xd8, 0x05, 0x9f, 0xc5, 0x92, 0x0e, 0x49, 0x71, 0x5f, 0xba, 0xd8, 0x86, 0xa4, 0xb7, 0xa1, 0x9d, 0xed, 0x97, 0x2c, 0x5a, 0x4f, 0x3f, 0xab, 0x9f, 0x69, 0xd4, 0x5d, 0x2c, 0x6d, 0x12, 0xc6, 0x56, 0xee, 0x26, 0x34, 0x32, 0xd0, 0x48, 0xa1, 0x30, 0xa6, 0xc2, 0x28, 0x6b, 0x90, 0xf1, 0xf0, 0xf4, 0x09, 0x19, 0x18, 0xa2, 0xa8, 0x22, 0xcd, 0x0d, 0x41, 0x83, 0x35, 0x13, 0xc8, 0x52, 0xa2, 0x38, 0x20, 0xbf, 0xb0, 0x41, 0x28, 0x08, 0x4d, 0x5d, 0x57, 0xec, 0xf7, 0x5b, 0xda, 0xae, 0x26, 0xcb, 0x2c, 0x12, 0xf1, 0xf0, 0xb8, 0x22, 0xcb, 0x32, 0xc6, 0xe3, 0x84, 0x2c, 0xcd, 0x48, 0xd2, 0x11, 0x41, 0x98, 0x12, 0x84, 0x1b, 0x0e, 0x87, 0x23, 0xe7, 0xf3, 0x1b, 0x7b, 0x61, 0xf4, 0x50, 0x9f, 0xf3, 0x1d, 0x70, 0xdc, 0x82, 0xaf, 0xbe, 0xfa, 0xc6, 0x17, 0x54, 0x2b, 0xf7, 0xb2, 0x84, 0x21, 0xcb, 0xb3, 0x68, 0x49, 0x8b, 0xdc, 0x4b, 0xb8, 0xc2, 0x30, 0xee, 0xa1, 0xdb, 0x2d, 0xdb, 0x6d, 0x89, 0x52, 0x70, 0x71, 0x31, 0x26, 0x20, 0x20, 0x4c, 0x62, 0x92, 0x2c, 0x62, 0x7e, 0xb6, 0x60, 0x34, 0x1a, 0xfb, 0xef, 0xfb, 0xe1, 0xf1, 0xd6, 0x4f, 0x91, 0x0e, 0x86, 0xab, 0xeb, 0x9a, 0xba, 0xb3, 0x31, 0x99, 0xa3, 0xe9, 0xcc, 0xda, 0x77, 0x96, 0xb6, 0xf0, 0x07, 0x71, 0xc2, 0x62, 0x3a, 0xa3, 0x18, 0x8d, 0x40, 0x08, 0xa2, 0x30, 0xe1, 0xea, 0xf2, 0xc6, 0xef, 0x22, 0xb5, 0x56, 0x4c, 0x26, 0x13, 0x7f, 0x6d, 0x2c, 0x16, 0x0b, 0x5f, 0x20, 0x9d, 0x6a, 0xa3, 0xeb, 0x3a, 0x26, 0xd3, 0x11, 0xbf, 0x9b, 0xcd, 0xf8, 0xe1, 0x87, 0x1f, 0xfc, 0xb5, 0xef, 0xa4, 0x38, 0xf7, 0xf7, 0xf7, 0x54, 0x55, 0xd5, 0x9b, 0xd4, 0xc4, 0xfe, 0x1a, 0x74, 0x93, 0xb9, 0x2b, 0xf2, 0xf6, 0xba, 0x0b, 0x7d, 0x1e, 0xfa, 0x72, 0xb9, 0xb4, 0x41, 0x11, 0xdb, 0x2d, 0xc6, 0x18, 0x3f, 0x79, 0x3b, 0x0f, 0xf7, 0xb6, 0x6d, 0x79, 0x7c, 0x7c, 0xf4, 0x66, 0x47, 0x4e, 0x41, 0xe2, 0xee, 0x0f, 0x77, 0x6f, 0x01, 0x7c, 0xfd, 0xf5, 0xd7, 0xbc, 0x7e, 0xfd, 0x9a, 0x20, 0x08, 0xf9, 0xf0, 0xe1, 0x03, 0xf7, 0xf7, 0xf7, 0x7e, 0x85, 0xe5, 0x0e, 0xf4, 0x34, 0x4d, 0xf9, 0xd7, 0x7f, 0xfd, 0x57, 0x16, 0x8b, 0x05, 0xf3, 0xf9, 0xdc, 0xef, 0xde, 0x0f, 0x87, 0x83, 0x9f, 0xd4, 0x93, 0x24, 0xe1, 0xdd, 0xbb, 0x77, 0x3c, 0x3c, 0x3c, 0xf8, 0x15, 0x82, 0x0b, 0xb6, 0x71, 0xde, 0x02, 0x55, 0x75, 0x64, 0xbf, 0xb7, 0x3f, 0x3f, 0x9b, 0x65, 0xde, 0xb3, 0xde, 0xde, 0x47, 0xa9, 0x8f, 0xa7, 0x75, 0xe8, 0x96, 0x83, 0x60, 0x85, 0x10, 0xfc, 0xf4, 0xcb, 0xbb, 0x93, 0x0d, 0x6b, 0xdb, 0xd2, 0x28, 0x45, 0x1c, 0xf7, 0x87, 0xa6, 0xea, 0x4e, 0x5c, 0x91, 0x4e, 0xa1, 0x3b, 0x3b, 0x99, 0x57, 0x4d, 0xc5, 0xd3, 0x61, 0x43, 0xab, 0x1a, 0xce, 0x8b, 0x4b, 0x02, 0x19, 0xf5, 0x84, 0x20, 0xcb, 0xdd, 0x59, 0xad, 0x2a, 0xe6, 0xf3, 0x8c, 0xef, 0xbf, 0x7f, 0xc3, 0xf7, 0x7f, 0xfa, 0x13, 0x9b, 0xcd, 0x86, 0x87, 0x87, 0x07, 0xea, 0x7a, 0x4a, 0x5d, 0xd7, 0xfc, 0xfa, 0xeb, 0x7b, 0xea, 0xba, 0x25, 0x8c, 0xac, 0xb6, 0xde, 0xee, 0x68, 0x6d, 0x98, 0x08, 0x3d, 0x6b, 0xdd, 0x15, 0xcc, 0x50, 0xdb, 0x29, 0xa7, 0xae, 0x6b, 0x1b, 0xbd, 0xda, 0x9f, 0x5b, 0xf3, 0xf1, 0x88, 0x7c, 0x54, 0xf0, 0xf0, 0x74, 0x77, 0xb2, 0x76, 0x36, 0x16, 0x19, 0xcc, 0x92, 0xdc, 0x4f, 0xac, 0x97, 0xfd, 0x24, 0xba, 0xdd, 0xef, 0x30, 0x12, 0xeb, 0xba, 0x06, 0x08, 0x11, 0xd8, 0x03, 0xb8, 0x4f, 0xdc, 0x7a, 0x69, 0x11, 0xed, 0x82, 0x36, 0x54, 0xdb, 0x61, 0x13, 0x3a, 0x05, 0x49, 0x18, 0xf5, 0xa1, 0x1a, 0xca, 0x1e, 0xe0, 0x06, 0xb2, 0x34, 0x45, 0xb7, 0x96, 0xd7, 0xb1, 0x7f, 0xda, 0x78, 0xae, 0x47, 0xe4, 0x94, 0x0b, 0xaa, 0xfd, 0xec, 0x5c, 0x11, 0x42, 0x12, 0x84, 0x21, 0x42, 0x48, 0x56, 0xab, 0x95, 0xcf, 0x16, 0x38, 0x3f, 0x5f, 0xf4, 0xff, 0xdd, 0xf8, 0x4c, 0x7b, 0x87, 0xf6, 0xb8, 0x00, 0x17, 0x11, 0x48, 0xc2, 0xc0, 0x2a, 0x8f, 0x9a, 0xae, 0xc3, 0x88, 0xe7, 0x56, 0xd6, 0xc3, 0x15, 0xa3, 0xd6, 0x9a, 0xdd, 0x76, 0xeb, 0x5d, 0x14, 0x5d, 0x83, 0x3b, 0x0c, 0x9c, 0x9a, 0xcf, 0xe7, 0x74, 0x4d, 0x4b, 0x10, 0x44, 0x24, 0x61, 0x4c, 0x1c, 0x26, 0x94, 0x87, 0x23, 0xfb, 0xcd, 0x96, 0xdb, 0xdb, 0xdb, 0xbe, 0xa9, 0xb6, 0x48, 0x85, 0xd6, 0x1d, 0xc8, 0xd0, 0x7a, 0x96, 0x4b, 0xd1, 0xaf, 0x23, 0x6c, 0x7f, 0xa3, 0x7b, 0x4b, 0x5f, 0x39, 0xb0, 0xa8, 0x16, 0xc6, 0xd6, 0x9b, 0xa6, 0x6a, 0x69, 0xca, 0x8a, 0xdd, 0x66, 0x4f, 0xd7, 0x29, 0xaa, 0xba, 0x65, 0xba, 0x38, 0xe3, 0xea, 0xea, 0x8a, 0xd6, 0xd4, 0x5e, 0x63, 0x3e, 0x9b, 0xcd, 0xec, 0x3d, 0xde, 0x67, 0x20, 0xbc, 0x7f, 0xff, 0x9e, 0xc5, 0xd9, 0xdc, 0x47, 0x55, 0xbb, 0xfb, 0xd1, 0xae, 0xa2, 0x6c, 0x23, 0xd2, 0x6a, 0x45, 0xd4, 0x75, 0x18, 0x23, 0xd0, 0xc0, 0xee, 0x50, 0x52, 0xa4, 0x05, 0xc9, 0x22, 0x63, 0x32, 0xce, 0x30, 0xb2, 0x21, 0x88, 0x43, 0xca, 0xba, 0x42, 0x6b, 0x8b, 0x86, 0xed, 0xeb, 0x03, 0x59, 0x61, 0x57, 0x44, 0xfa, 0xd0, 0x0f, 0x4c, 0x3d, 0x31, 0x5a, 0x04, 0x12, 0xe9, 0x8c, 0x7a, 0x94, 0xe2, 0xfe, 0xc3, 0x9a, 0x34, 0x16, 0x04, 0xfd, 0xe7, 0x9c, 0xe9, 0x1c, 0x19, 0x47, 0x74, 0xc2, 0xd0, 0x56, 0x35, 0x51, 0x70, 0xf2, 0x7a, 0x37, 0x18, 0x9f, 0xcd, 0xe1, 0xee, 0x4d, 0x61, 0xf0, 0x6b, 0x1c, 0xa7, 0x40, 0x18, 0x0e, 0xbb, 0x69, 0x10, 0x10, 0xf7, 0xdf, 0x67, 0x9e, 0xa4, 0x4c, 0x8a, 0x11, 0xa1, 0x3b, 0x08, 0x5c, 0x81, 0x72, 0xfb, 0x12, 0x57, 0x2c, 0x87, 0x09, 0x61, 0x2e, 0xc4, 0x61, 0xe8, 0x9f, 0xfe, 0x52, 0x7b, 0xfe, 0xf2, 0xd7, 0xd0, 0xf7, 0xd9, 0x75, 0x2a, 0x6e, 0x22, 0xae, 0x9b, 0xfa, 0xd9, 0xee, 0xde, 0x4d, 0xf5, 0x2f, 0x5d, 0x72, 0x86, 0x0e, 0x70, 0x43, 0x92, 0xc7, 0xe1, 0x50, 0xfe, 0xbb, 0x9e, 0xeb, 0xee, 0xf0, 0x75, 0xd2, 0xb5, 0x61, 0x28, 0xca, 0xe9, 0x43, 0xe4, 0xb3, 0x2c, 0xf3, 0x21, 0xbc, 0xfe, 0x92, 0x75, 0xff, 0xf2, 0x3d, 0x86, 0xa1, 0xf3, 0xfd, 0x55, 0xcf, 0xa6, 0x4c, 0x29, 0x43, 0x82, 0x20, 0xf2, 0x10, 0xbb, 0x31, 0x12, 0x83, 0xea, 0xa1, 0x75, 0x71, 0x7a, 0x8f, 0xda, 0xa6, 0x33, 0x85, 0xc2, 0x20, 0x45, 0x87, 0x14, 0x1d, 0x46, 0x34, 0x28, 0x4a, 0x8c, 0xee, 0x98, 0xcf, 0x05, 0xcb, 0xe5, 0x23, 0x8f, 0x0f, 0x77, 0xb4, 0x5d, 0xc5, 0x6c, 0x5a, 0x70, 0x7e, 0x36, 0x27, 0x49, 0x03, 0x4c, 0xa7, 0xd8, 0x3c, 0xae, 0xfb, 0xe6, 0xc9, 0xc2, 0xe2, 0x2e, 0x39, 0x6c, 0xb7, 0xdf, 0x70, 0x7b, 0x7b, 0xcf, 0xef, 0x7f, 0xff, 0x7b, 0xff, 0xfd, 0x95, 0x47, 0x17, 0xc7, 0x68, 0x3c, 0x89, 0x62, 0x7e, 0x96, 0xfa, 0xf7, 0x6b, 0xa1, 0x73, 0xe9, 0x09, 0x1c, 0x8e, 0x35, 0x3e, 0x1a, 0x8d, 0xbc, 0xd6, 0xd9, 0x21, 0x1e, 0x49, 0x62, 0x8d, 0x67, 0xb6, 0x07, 0x3b, 0x79, 0x1f, 0x8f, 0x35, 0x60, 0x57, 0x32, 0x17, 0x17, 0x17, 0xfc, 0xed, 0xdf, 0xce, 0x98, 0x4e, 0xa7, 0xdc, 0xdd, 0xdd, 0xf9, 0xcf, 0x3c, 0x4d, 0x72, 0x3f, 0xe5, 0x3e, 0x3d, 0x3d, 0xd9, 0xc2, 0xb3, 0x7b, 0xf2, 0x04, 0x20, 0xa7, 0xe1, 0x76, 0xc6, 0x26, 0x42, 0x08, 0xbf, 0x53, 0x76, 0x87, 0xf4, 0x68, 0x64, 0xe3, 0x48, 0x5d, 0x47, 0x7a, 0x75, 0xf5, 0xba, 0x77, 0x64, 0xb3, 0x59, 0xc0, 0x4d, 0xd3, 0x31, 0x9b, 0x4d, 0xbc, 0xfb, 0x9b, 0x23, 0x6d, 0x16, 0x45, 0x41, 0x14, 0x85, 0x3c, 0x3d, 0x3d, 0x79, 0x37, 0xb8, 0xf1, 0x78, 0xec, 0xb3, 0xc8, 0x1d, 0x09, 0xd4, 0x5d, 0x23, 0xd3, 0xe9, 0x94, 0xaf, 0xbf, 0xfe, 0x9a, 0xc7, 0x47, 0x0b, 0xf1, 0x37, 0x4d, 0xc3, 0x78, 0x3c, 0xf6, 0x45, 0xd7, 0xbd, 0xe6, 0xa7, 0xa7, 0x35, 0x8b, 0xc5, 0xc2, 0xbb, 0xc6, 0x39, 0x62, 0xce, 0x68, 0x34, 0x62, 0xb1, 0x58, 0xb0, 0x5c, 0x2e, 0x7b, 0x28, 0xec, 0x81, 0xa2, 0x28, 0xf8, 0xee, 0xbb, 0xef, 0x28, 0x0a, 0x0b, 0x97, 0x39, 0x67, 0xba, 0xf3, 0xf3, 0x73, 0xce, 0xce, 0xce, 0x3c, 0x4a, 0xb6, 0x5a, 0x6d, 0xf8, 0xcb, 0x5f, 0xfe, 0xc2, 0xed, 0xed, 0x2d, 0x9b, 0xcd, 0x96, 0xba, 0x6e, 0x29, 0x4b, 0x88, 0x22, 0x38, 0x1e, 0x8f, 0xec, 0xfb, 0x68, 0xcf, 0xfb, 0xfb, 0x7b, 0xdf, 0x8c, 0x38, 0x8e, 0xc1, 0x64, 0x32, 0xf1, 0xcd, 0x76, 0x14, 0x45, 0xbc, 0x7e, 0xfd, 0x9a, 0xe5, 0x72, 0x49, 0x92, 0x24, 0x3e, 0x3e, 0xd6, 0xfd, 0xfd, 0x78, 0x3c, 0xe6, 0xe1, 0xfe, 0xc9, 0xc3, 0xff, 0xc7, 0x63, 0xe9, 0xbf, 0x57, 0x37, 0x81, 0xb9, 0x86, 0xc3, 0x5d, 0x2f, 0x4e, 0x42, 0xe5, 0xbe, 0x8f, 0x30, 0x0c, 0xd1, 0x6d, 0xe7, 0x25, 0x73, 0x51, 0xcf, 0x5b, 0x70, 0xf2, 0x9e, 0xd5, 0xe3, 0x12, 0xfa, 0x44, 0x42, 0xc7, 0xc7, 0x88, 0x9b, 0x18, 0x85, 0xa2, 0xac, 0x8f, 0x7c, 0xf7, 0xbb, 0xdf, 0xb3, 0xdf, 0xef, 0x79, 0x7c, 0x7c, 0xec, 0xd9, 0xf5, 0xd6, 0xe7, 0xff, 0xfa, 0xfa, 0x9c, 0x3f, 0xff, 0xf9, 0x1f, 0x18, 0x4d, 0x32, 0xea, 0x66, 0x47, 0x5e, 0x84, 0x24, 0xa9, 0x00, 0x52, 0xb4, 0xb1, 0x89, 0x7a, 0xdf, 0x7c, 0xfb, 0x8a, 0xdd, 0xd3, 0x1d, 0x4a, 0x62, 0x63, 0x63, 0x3f, 0x6b, 0xaa, 0xed, 0xc1, 0x1e, 0xc9, 0x80, 0x3c, 0x49, 0xc9, 0xe2, 0x0c, 0x01, 0x54, 0x75, 0x63, 0xaf, 0xcb, 0x5b, 0x4d, 0x31, 0x4b, 0x50, 0xaa, 0xb5, 0x3a, 0x74, 0x6d, 0x2c, 0xb2, 0x14, 0x38, 0x14, 0x10, 0x26, 0x45, 0xde, 0x0f, 0x20, 0x92, 0xce, 0xf4, 0x2b, 0x44, 0x61, 0xad, 0x9e, 0xc1, 0xc6, 0xc4, 0x1a, 0x61, 0x2c, 0x73, 0x1b, 0x41, 0x28, 0xa5, 0xd5, 0x20, 0x07, 0x12, 0x94, 0x55, 0x5f, 0x08, 0x69, 0x48, 0xfb, 0xb5, 0x8d, 0x40, 0x63, 0x3a, 0xbb, 0x43, 0x6f, 0xeb, 0x1a, 0x4d, 0x47, 0x12, 0x46, 0x14, 0x59, 0x86, 0x44, 0x90, 0xa7, 0x56, 0x06, 0x75, 0xac, 0xac, 0xca, 0x40, 0x44, 0xc1, 0xe7, 0xc9, 0x8b, 0xf4, 0xd2, 0x30, 0x8f, 0x16, 0x84, 0x14, 0x45, 0xd6, 0x27, 0xed, 0xed, 0x2c, 0xf4, 0x3e, 0xca, 0xfa, 0xec, 0xf5, 0xd2, 0x7f, 0xee, 0xad, 0xb6, 0x2a, 0x80, 0xa1, 0x04, 0x6f, 0x98, 0x52, 0x39, 0x3c, 0x3f, 0x9d, 0xe7, 0xc6, 0x9b, 0x37, 0x6f, 0xbc, 0x4b, 0xa4, 0x53, 0x89, 0x38, 0x52, 0x64, 0x55, 0x55, 0x9c, 0x05, 0x33, 0xba, 0xae, 0x22, 0x90, 0x11, 0x45, 0x9a, 0xa1, 0x15, 0x94, 0xfb, 0x03, 0x42, 0x08, 0x5e, 0x5d, 0xdf, 0xf0, 0xb0, 0x7c, 0x44, 0x88, 0xf8, 0x99, 0xe9, 0x98, 0xc1, 0x6a, 0xe2, 0xc3, 0x38, 0xf6, 0x99, 0xdf, 0x2f, 0x87, 0x25, 0xd1, 0x53, 0x8e, 0x92, 0x24, 0x21, 0x4b, 0x72, 0x8a, 0xcb, 0x2b, 0x54, 0xab, 0x59, 0x2e, 0x57, 0xdc, 0x3f, 0x2c, 0x6d, 0xca, 0x63, 0x18, 0x12, 0x27, 0xf6, 0xba, 0x9a, 0x9d, 0x2d, 0x6c, 0xa6, 0xc1, 0xe6, 0x89, 0xb2, 0x2c, 0x9f, 0x71, 0x6d, 0xdc, 0x4a, 0xcd, 0x9d, 0x67, 0x43, 0xc3, 0x34, 0x21, 0x04, 0x5a, 0x40, 0x96, 0x58, 0xb4, 0xae, 0xad, 0xac, 0x03, 0xe0, 0xfe, 0x50, 0x71, 0x77, 0xfb, 0xc8, 0x68, 0x9a, 0x92, 0xe4, 0x09, 0x4a, 0x69, 0xb2, 0x22, 0xc5, 0x48, 0xc3, 0xb1, 0xb5, 0xdf, 0x8d, 0x52, 0x8a, 0xa8, 0x0b, 0x7c, 0x14, 0xad, 0xe9, 0x93, 0x7d, 0x7d, 0x6e, 0xb9, 0x10, 0xfc, 0xf9, 0xcf, 0x7f, 0xb2, 0xeb, 0x90, 0x20, 0xe8, 0xf3, 0xdb, 0x2b, 0xd6, 0xbb, 0x2d, 0x08, 0x38, 0x3b, 0x3b, 0xe3, 0x70, 0x7c, 0xf2, 0x08, 0xb2, 0xee, 0x6d, 0xc3, 0x2d, 0x99, 0xb2, 0x97, 0x45, 0x8b, 0x93, 0x91, 0x99, 0x63, 0xf3, 0x0f, 0x11, 0x6d, 0x77, 0xde, 0xb8, 0xe9, 0x7d, 0x34, 0x1a, 0x21, 0xfe, 0xcb, 0xff, 0xfa, 0x7f, 0x18, 0x77, 0x13, 0xb8, 0x49, 0xc5, 0xc1, 0x2e, 0xae, 0x70, 0x3b, 0x88, 0xd1, 0xc1, 0xaf, 0x8e, 0xa8, 0xd1, 0x34, 0x9d, 0xef, 0xe0, 0xdc, 0x13, 0x38, 0xc6, 0x9e, 0x0b, 0x4b, 0x71, 0x53, 0xb7, 0x8b, 0x91, 0x1c, 0x3a, 0xbf, 0xc9, 0x50, 0x3c, 0x93, 0xa5, 0x0d, 0x77, 0xd9, 0xee, 0x0d, 0xbc, 0x2c, 0xb8, 0xc3, 0x9b, 0xb6, 0x6d, 0xd5, 0x67, 0x49, 0x66, 0xc3, 0x0b, 0x73, 0x98, 0x67, 0xfe, 0xd2, 0x74, 0x46, 0x08, 0x81, 0x19, 0xc4, 0xe3, 0x7d, 0x69, 0x42, 0xff, 0xf7, 0xa6, 0xf4, 0xd3, 0x04, 0x1f, 0x7c, 0x96, 0x6e, 0x36, 0x94, 0x71, 0xd9, 0x90, 0x00, 0x1b, 0x38, 0x60, 0x8c, 0x42, 0x08, 0x90, 0x01, 0xbd, 0x7e, 0x5d, 0x30, 0x4f, 0x03, 0xda, 0xae, 0xb4, 0x06, 0x01, 0xed, 0x81, 0xb6, 0xdb, 0xa3, 0x55, 0x89, 0x36, 0x35, 0xda, 0x74, 0xec, 0x0f, 0x0f, 0x8c, 0x46, 0x23, 0xc6, 0xa3, 0x11, 0x41, 0x20, 0xd1, 0x5d, 0x43, 0x55, 0x59, 0x96, 0x63, 0x75, 0x2c, 0x79, 0x7d, 0x73, 0xe3, 0x0f, 0x79, 0xad, 0x35, 0x59, 0x5a, 0xf4, 0xc5, 0xab, 0x27, 0x0d, 0x1e, 0xf6, 0xfe, 0xe0, 0xb5, 0xdf, 0x93, 0x85, 0xcc, 0x4e, 0x8e, 0x55, 0x9d, 0x0f, 0x2c, 0x70, 0x13, 0xd8, 0x30, 0x7d, 0xcf, 0xdd, 0x10, 0x0e, 0xe2, 0x75, 0xec, 0x6e, 0xc7, 0x64, 0x4f, 0x46, 0x19, 0x17, 0x17, 0x17, 0x7e, 0x12, 0x76, 0xe4, 0x47, 0xc7, 0x7e, 0x0d, 0xc3, 0x98, 0xcd, 0x66, 0xfd, 0xcc, 0x07, 0xdc, 0x41, 0xdc, 0x9b, 0xcd, 0x86, 0xe9, 0x74, 0xee, 0x0b, 0x86, 0x83, 0x86, 0x1d, 0xd1, 0x30, 0x4d, 0x53, 0x76, 0xbb, 0x9d, 0x9f, 0x28, 0xdd, 0xdf, 0x0f, 0x63, 0x3e, 0x4d, 0xa3, 0xfc, 0xc4, 0x1b, 0x46, 0x81, 0xdf, 0xd5, 0x65, 0x99, 0xb5, 0x79, 0x74, 0x4c, 0x71, 0x0b, 0xe3, 0xb6, 0x6c, 0xb7, 0x4f, 0x96, 0x00, 0xd5, 0xef, 0x04, 0x8f, 0x87, 0xc6, 0x7f, 0x76, 0xaf, 0x5e, 0xbd, 0xe2, 0xe6, 0xe6, 0xa6, 0x27, 0xb1, 0x7d, 0xea, 0x65, 0x6c, 0x1b, 0x96, 0x4b, 0x4b, 0xa4, 0x3b, 0x3f, 0x9f, 0x7b, 0xd2, 0x8d, 0xfb, 0xae, 0xbf, 0xff, 0xfe, 0x8f, 0x1e, 0xb9, 0x72, 0xa6, 0x2c, 0xc6, 0x18, 0xdf, 0xb0, 0xb8, 0x66, 0x68, 0x98, 0xb3, 0xee, 0x6e, 0x40, 0xc7, 0xf1, 0x70, 0x71, 0xad, 0x0e, 0x09, 0x70, 0x69, 0x67, 0x96, 0x80, 0x17, 0x30, 0x99, 0x4c, 0xfc, 0xde, 0xdb, 0xad, 0x09, 0x4e, 0x93, 0xc6, 0xd1, 0x73, 0x42, 0x46, 0xa3, 0x11, 0x6f, 0xde, 0xbc, 0xa1, 0x6d, 0x5b, 0x7e, 0xf8, 0xe1, 0x07, 0x6e, 0x6f, 0x6f, 0xf9, 0xe6, 0x9b, 0x6f, 0x78, 0x78, 0x78, 0x60, 0xb9, 0x5c, 0x3e, 0x73, 0x7a, 0x74, 0xa8, 0x5c, 0x10, 0xc4, 0x7e, 0xea, 0xbe, 0xbf, 0xbf, 0xf7, 0xab, 0x0a, 0x47, 0x40, 0x7d, 0xfd, 0xea, 0x6b, 0x4f, 0x00, 0x74, 0x92, 0x38, 0x17, 0x33, 0x1b, 0x86, 0x21, 0xe5, 0xb1, 0xa1, 0x45, 0xa1, 0xc3, 0x16, 0x22, 0x30, 0x01, 0x36, 0x5c, 0x03, 0x08, 0x64, 0xc4, 0xee, 0x6e, 0x6f, 0x27, 0xde, 0xce, 0xba, 0x77, 0xe5, 0x79, 0x4e, 0x10, 0x87, 0xb4, 0x74, 0xd6, 0xed, 0x2b, 0x5a, 0xf0, 0xf1, 0xe3, 0x47, 0xde, 0xbf, 0xbf, 0xa3, 0xae, 0xe1, 0xe2, 0x22, 0xe5, 0xe6, 0xd5, 0x95, 0xdf, 0xd7, 0x3e, 0x2e, 0x3f, 0x79, 0x59, 0xe1, 0xa7, 0x4f, 0x9f, 0xfc, 0x24, 0xe6, 0x83, 0x68, 0xe2, 0x88, 0x4f, 0x8f, 0xf7, 0x6c, 0xab, 0x3d, 0xc7, 0xb6, 0x22, 0x48, 0x43, 0xb2, 0x22, 0xed, 0xf9, 0x1e, 0x5b, 0x32, 0x91, 0x22, 0xb4, 0xb1, 0x45, 0x33, 0x29, 0x88, 0xc2, 0x90, 0xa6, 0xb5, 0x59, 0xf5, 0xad, 0xea, 0x18, 0x2f, 0x32, 0xcf, 0x0f, 0x52, 0x4d, 0x7f, 0xd6, 0x70, 0x92, 0xae, 0x46, 0x79, 0x0a, 0x46, 0x5a, 0xad, 0x7b, 0x14, 0x82, 0xb0, 0xa6, 0x39, 0x71, 0x1c, 0x53, 0x36, 0x35, 0x51, 0x60, 0x08, 0x7b, 0x73, 0x2b, 0xa3, 0x34, 0x61, 0x6f, 0xcc, 0x12, 0xf4, 0xf1, 0xd3, 0xdb, 0x8d, 0x75, 0x70, 0x1c, 0x4d, 0xc6, 0xf6, 0x3d, 0xb5, 0x55, 0x3f, 0x9c, 0xd8, 0xef, 0x58, 0xc8, 0x88, 0x24, 0x8a, 0xad, 0x2c, 0x55, 0x19, 0x0f, 0x93, 0x37, 0x9d, 0xcd, 0x1a, 0x68, 0x03, 0xf1, 0xec, 0xfc, 0x91, 0x42, 0x10, 0x2a, 0x83, 0x50, 0x06, 0xa9, 0x0d, 0xf4, 0xd9, 0x10, 0x93, 0xc9, 0x84, 0xdd, 0x6e, 0xc3, 0xfb, 0xf7, 0xef, 0xc9, 0xf2, 0x84, 0xcb, 0xcb, 0x4b, 0xaa, 0xaa, 0x62, 0xb5, 0xdf, 0x5a, 0x65, 0x4b, 0x92, 0x50, 0xb5, 0x0d, 0x9d, 0x56, 0xde, 0x80, 0xa7, 0x6a, 0x1a, 0x32, 0x82, 0xcf, 0xd2, 0x1e, 0xdd, 0x3d, 0x96, 0xa6, 0x29, 0xab, 0xfb, 0x07, 0x0b, 0x6d, 0xf7, 0xb1, 0xb9, 0x0e, 0xc5, 0x9b, 0xcd, 0x66, 0xbc, 0x7d, 0xfb, 0x96, 0x22, 0xee, 0x57, 0x3b, 0x55, 0xcb, 0x6e, 0xb7, 0xe7, 0xb8, 0x2f, 0x09, 0x83, 0xb8, 0x8f, 0xe0, 0xb5, 0x29, 0x6e, 0xc5, 0x38, 0x47, 0x46, 0xa1, 0xcd, 0x55, 0x0f, 0xa0, 0x51, 0x2d, 0x1a, 0x65, 0x57, 0x77, 0x8d, 0x85, 0xdd, 0x3b, 0x61, 0xbc, 0x0b, 0x9d, 0x30, 0x96, 0x7f, 0x60, 0x8c, 0x41, 0x3f, 0xd5, 0x64, 0x49, 0xce, 0xd9, 0x6c, 0xce, 0x28, 0x1f, 0x73, 0x3c, 0x96, 0x3c, 0x2e, 0xd7, 0xb4, 0xda, 0x90, 0xe5, 0x39, 0x9b, 0xed, 0xda, 0x2a, 0x44, 0x5a, 0x45, 0x3e, 0xca, 0x6d, 0x93, 0x3e, 0x1e, 0x9d, 0xce, 0x8b, 0x08, 0xcf, 0x21, 0x71, 0xa1, 0x35, 0x0e, 0x7d, 0xcc, 0xb2, 0x8c, 0xaa, 0xab, 0x51, 0xad, 0xb6, 0x72, 0x4b, 0x2d, 0x38, 0xec, 0x2a, 0xb2, 0x38, 0x23, 0x0e, 0x62, 0xaa, 0xaa, 0xa1, 0x18, 0x85, 0xec, 0x8e, 0x07, 0x6e, 0xef, 0x6f, 0x19, 0xcf, 0x72, 0xce, 0xaf, 0x16, 0x34, 0xc6, 0xbe, 0xfe, 0xa6, 0xa9, 0x49, 0x48, 0x09, 0xa2, 0x10, 0x13, 0x48, 0x3a, 0x7d, 0x72, 0x47, 0x0d, 0x65, 0x40, 0x28, 0x03, 0x5e, 0x8d, 0xe7, 0xa8, 0xd6, 0xca, 0xf0, 0x5c, 0x7a, 0xe2, 0x76, 0xbf, 0xc7, 0x84, 0x92, 0x62, 0x3c, 0xa2, 0xac, 0x77, 0xbd, 0x32, 0x27, 0xa6, 0xd5, 0x0a, 0xd5, 0xf5, 0x48, 0x89, 0xb1, 0x04, 0x6b, 0x2b, 0xb7, 0x84, 0xb6, 0xaa, 0x09, 0xfb, 0xf7, 0x94, 0x25, 0x29, 0xdf, 0x7e, 0xf5, 0xb5, 0xad, 0xc3, 0x1d, 0x3e, 0xfc, 0xc9, 0x21, 0x15, 0xa1, 0x3b, 0xa0, 0x5e, 0xc6, 0x7c, 0x0e, 0xfd, 0xdd, 0x87, 0xc5, 0xd4, 0xed, 0xe7, 0xb6, 0x5b, 0x6b, 0xc7, 0x37, 0x8c, 0x00, 0x75, 0x1d, 0x90, 0x9b, 0xf4, 0x9c, 0x67, 0xef, 0x70, 0xaf, 0xf5, 0xd2, 0x6e, 0x75, 0x08, 0xcb, 0x0f, 0x8b, 0xa2, 0x7b, 0x9e, 0x21, 0xa9, 0xcd, 0x5b, 0xce, 0xf6, 0x5d, 0x96, 0x10, 0x81, 0x7f, 0xad, 0xee, 0x3d, 0xbc, 0x34, 0x8f, 0x19, 0x4e, 0xe5, 0xc3, 0x7d, 0xad, 0x10, 0x03, 0x02, 0xcb, 0x17, 0x64, 0x6f, 0x43, 0xc6, 0xfd, 0xcb, 0xa2, 0xee, 0xa3, 0xf2, 0x9a, 0x53, 0x5e, 0x7b, 0x18, 0x44, 0x03, 0xab, 0xbe, 0xbe, 0x93, 0xa6, 0xd7, 0xe1, 0xcb, 0xbe, 0x49, 0x89, 0x24, 0x61, 0x28, 0xed, 0x5e, 0x4d, 0x18, 0xda, 0xf2, 0xce, 0x16, 0xe8, 0x72, 0x4b, 0x5d, 0xed, 0x50, 0xe6, 0x48, 0x28, 0x15, 0x41, 0x68, 0x08, 0x25, 0x4c, 0xa7, 0x19, 0x61, 0x28, 0x28, 0x0f, 0xdb, 0x1e, 0x5e, 0xdb, 0x11, 0x4a, 0x4b, 0x56, 0x3b, 0x3f, 0xbf, 0xe6, 0xc3, 0x87, 0x77, 0xcc, 0x66, 0x33, 0xae, 0xaf, 0x2f, 0xad, 0x39, 0xc6, 0xee, 0xd8, 0x6b, 0x33, 0x63, 0xa2, 0x28, 0xf6, 0x9f, 0xe3, 0x78, 0x5c, 0x30, 0x9d, 0x8d, 0xfb, 0xbd, 0xf4, 0x13, 0x9b, 0x8d, 0x75, 0x61, 0xbb, 0x58, 0x9c, 0xfb, 0x26, 0xcb, 0x35, 0x5c, 0xc3, 0xa9, 0x4c, 0x29, 0x7b, 0xe3, 0xad, 0xd7, 0x6b, 0xd6, 0xeb, 0xb5, 0xdf, 0x9b, 0xbb, 0xb5, 0x0b, 0x26, 0xa0, 0xa9, 0x15, 0x77, 0x77, 0xf7, 0xac, 0x56, 0x2b, 0xb6, 0xdb, 0x2d, 0x79, 0x9e, 0x79, 0x68, 0xd7, 0x3e, 0x66, 0xeb, 0x77, 0xad, 0x79, 0x61, 0x0b, 0xd7, 0x68, 0x9c, 0x33, 0x9d, 0x15, 0xa8, 0xee, 0xb4, 0xaf, 0x76, 0xe8, 0x8f, 0x6b, 0x2c, 0x47, 0xa3, 0x11, 0x45, 0x51, 0x78, 0xeb, 0x59, 0xc7, 0xf1, 0x70, 0x76, 0xb0, 0x4d, 0xd3, 0xb0, 0x5b, 0x1d, 0x7a, 0xa7, 0xb9, 0x84, 0xd9, 0x6c, 0xc2, 0x78, 0x32, 0x26, 0x0c, 0xa5, 0x57, 0x45, 0x3c, 0x2e, 0xef, 0xfb, 0xe6, 0xb4, 0xa4, 0xaa, 0x8e, 0x84, 0x91, 0x64, 0x3a, 0x1d, 0x33, 0x99, 0xf4, 0x05, 0x4d, 0x26, 0xde, 0x37, 0xdd, 0x9a, 0xd8, 0xa4, 0x9e, 0x20, 0xe8, 0x3e, 0x93, 0x38, 0x86, 0xe9, 0x74, 0xe2, 0x65, 0x66, 0xae, 0xb9, 0x75, 0x99, 0xed, 0x0e, 0x79, 0x72, 0x84, 0x4f, 0xc7, 0xe8, 0x76, 0xf6, 0xc4, 0x0e, 0x65, 0x78, 0x78, 0x78, 0x60, 0xb5, 0xb2, 0xf9, 0xe3, 0x41, 0x10, 0x30, 0x9b, 0xcd, 0x3c, 0x74, 0x5e, 0xd7, 0x35, 0xeb, 0xf5, 0x9a, 0x28, 0x8a, 0xfc, 0xf3, 0xe4, 0x79, 0x4e, 0x5d, 0x37, 0x4c, 0x26, 0x13, 0xbf, 0xf2, 0x70, 0xb9, 0xf1, 0xd6, 0xe4, 0xe6, 0x0c, 0x29, 0x17, 0xfe, 0xb5, 0xb8, 0x09, 0xc4, 0xa1, 0x66, 0xaf, 0x5e, 0xbd, 0xf2, 0x2b, 0x28, 0x27, 0x3d, 0x1c, 0x8f, 0xc7, 0xfe, 0x7b, 0xb9, 0xbb, 0xbb, 0x23, 0x8a, 0xd4, 0xc9, 0x6a, 0xb4, 0x47, 0x48, 0x5c, 0x43, 0x21, 0x84, 0xe8, 0xa1, 0x6e, 0x7b, 0x50, 0xb8, 0x26, 0xce, 0xed, 0xea, 0xe3, 0x38, 0xe6, 0xe2, 0xfc, 0x9a, 0xe5, 0xd3, 0x8a, 0x4d, 0xbd, 0x46, 0xa1, 0x40, 0x6b, 0x9b, 0xed, 0x2d, 0x03, 0xe2, 0x38, 0x64, 0xbd, 0xdc, 0x11, 0x2e, 0x02, 0x8a, 0x6c, 0x44, 0x92, 0x59, 0x42, 0x6d, 0x92, 0xa7, 0x04, 0x91, 0x44, 0x46, 0x92, 0xf6, 0x60, 0xef, 0x9d, 0xc9, 0xc4, 0x16, 0xf2, 0x3f, 0xfc, 0xe1, 0x0f, 0x4c, 0xa7, 0xd6, 0x50, 0x68, 0xbd, 0x5e, 0xf3, 0x9f, 0xfe, 0xf1, 0x7b, 0xbf, 0x3a, 0x4b, 0xd3, 0x13, 0xe2, 0xf6, 0xf3, 0xcf, 0xef, 0xf9, 0xf4, 0xe9, 0x3d, 0x7f, 0xf8, 0xee, 0x0f, 0x94, 0x65, 0x49, 0x96, 0x67, 0x94, 0x5d, 0xfd, 0x19, 0x3c, 0x9d, 0x17, 0x39, 0xf5, 0xb1, 0x27, 0xd5, 0x96, 0x2d, 0x79, 0x96, 0x91, 0xe5, 0x05, 0x97, 0xd3, 0x4b, 0x92, 0x2c, 0xe5, 0xe3, 0xe3, 0x2f, 0x7e, 0xfd, 0x43, 0x68, 0x9d, 0x1c, 0x5d, 0x36, 0x83, 0xd1, 0xbd, 0x27, 0x7d, 0x68, 0xb3, 0xbf, 0x65, 0x64, 0x93, 0xd7, 0x74, 0x8b, 0x0f, 0x90, 0x0a, 0x7a, 0xdd, 0xbd, 0xe8, 0x53, 0xb2, 0x74, 0xa7, 0xd0, 0xc2, 0xd8, 0x40, 0x0d, 0xad, 0x19, 0x17, 0x23, 0x84, 0x30, 0xd6, 0x55, 0xaf, 0x6d, 0xa9, 0x0e, 0x47, 0xf2, 0xdc, 0xee, 0xe5, 0xdb, 0xb6, 0xc5, 0x19, 0x83, 0x45, 0x41, 0x48, 0x9a, 0x25, 0x64, 0x71, 0x42, 0xd9, 0x58, 0x3b, 0x54, 0x6b, 0x1b, 0xab, 0xbf, 0x98, 0x94, 0x28, 0x06, 0xe7, 0x90, 0xd5, 0x63, 0x5b, 0xdf, 0x83, 0xd9, 0x7c, 0xe2, 0x89, 0xac, 0xeb, 0xf5, 0x0a, 0x99, 0xc4, 0xcf, 0x06, 0x1d, 0xb7, 0xdf, 0x3d, 0x19, 0x56, 0x3d, 0xf7, 0x1f, 0x71, 0x4d, 0xa5, 0x1b, 0xc6, 0x46, 0xa3, 0x11, 0x55, 0x55, 0x79, 0x3f, 0x0a, 0xd7, 0x5c, 0xba, 0xb3, 0x7d, 0x7f, 0xbf, 0xef, 0x23, 0xa4, 0x23, 0x8a, 0x7c, 0xc4, 0xe8, 0xcc, 0x9a, 0xf2, 0x94, 0x65, 0x49, 0x53, 0x36, 0x34, 0xa1, 0x3d, 0xbf, 0x9d, 0x6f, 0xaa, 0xd6, 0xda, 0x16, 0x2b, 0xb4, 0xb5, 0x08, 0xee, 0xe1, 0xea, 0x2f, 0xfd, 0x92, 0x06, 0xbe, 0xfd, 0xdd, 0xef, 0x38, 0xec, 0xec, 0x00, 0xb3, 0x7d, 0xda, 0xb1, 0xdf, 0x5b, 0x33, 0xac, 0x28, 0xcd, 0x88, 0xe2, 0x98, 0xba, 0xac, 0x2c, 0xaa, 0x91, 0x58, 0x14, 0xf2, 0xee, 0xee, 0x0e, 0xf5, 0xf1, 0x8e, 0xa2, 0x48, 0x99, 0x2d, 0xe6, 0x84, 0x48, 0x3f, 0xa4, 0xba, 0x3a, 0xe5, 0x6a, 0x49, 0xd3, 0x34, 0xc8, 0x50, 0xd2, 0x98, 0xce, 0xf2, 0x2a, 0x2a, 0xc5, 0xaf, 0x3f, 0xaf, 0xc9, 0x53, 0xc9, 0x74, 0x32, 0x27, 0x0e, 0xe2, 0xde, 0xcc, 0xca, 0xfa, 0x86, 0x54, 0x65, 0xcd, 0x7e, 0x7f, 0x44, 0xc4, 0x10, 0xa7, 0xf6, 0xbe, 0x0d, 0xba, 0x90, 0x28, 0x8e, 0xd1, 0x52, 0xa0, 0x1a, 0xfb, 0x9e, 0x9c, 0x24, 0x51, 0x63, 0xb8, 0x5f, 0x3e, 0x32, 0xea, 0x93, 0xe1, 0xe8, 0x39, 0x15, 0x59, 0x51, 0x70, 0x28, 0x8f, 0xac, 0xd7, 0x4f, 0x74, 0xd4, 0x7d, 0xcd, 0x10, 0xb4, 0x5a, 0xf5, 0xd7, 0x9f, 0x1c, 0x58, 0xcb, 0xb6, 0xcf, 0xbe, 0x17, 0x37, 0xf0, 0xec, 0x76, 0x56, 0x36, 0x3c, 0x2f, 0xa6, 0x0c, 0x55, 0x6a, 0xc7, 0xe3, 0xd1, 0xea, 0xd0, 0xe5, 0x60, 0xa1, 0xef, 0xe0, 0x4e, 0x47, 0x96, 0x19, 0xc6, 0x7e, 0xba, 0xc3, 0xcc, 0xc9, 0xcd, 0xdc, 0xcd, 0xe6, 0x0e, 0xe3, 0xe1, 0x85, 0xe1, 0x60, 0xf5, 0xa1, 0xdb, 0xdb, 0xb0, 0xe0, 0x06, 0x41, 0x40, 0xab, 0x9a, 0x67, 0x13, 0xf3, 0x70, 0xdf, 0x3e, 0xbc, 0x08, 0xdd, 0xc1, 0x34, 0x34, 0xa0, 0xb1, 0xb0, 0x03, 0xcf, 0x26, 0x9b, 0xa1, 0xd3, 0x9b, 0xdb, 0xf9, 0x0c, 0x3f, 0x8c, 0x61, 0xa3, 0xe2, 0x99, 0x9a, 0x5f, 0xd8, 0x79, 0x7f, 0xc9, 0x0b, 0x7e, 0x08, 0x4d, 0x9d, 0xfc, 0xdd, 0xdd, 0x9e, 0x5e, 0x7a, 0xb9, 0xce, 0xb0, 0x01, 0xd0, 0xa6, 0xed, 0x0f, 0x05, 0x43, 0x14, 0x85, 0x04, 0xa1, 0xd5, 0x7c, 0x37, 0xad, 0x95, 0x87, 0x3d, 0xfe, 0xf2, 0x6f, 0x08, 0xa9, 0x88, 0xa4, 0x20, 0x8c, 0x0c, 0x59, 0x6a, 0x0b, 0xbe, 0x0c, 0x0c, 0x81, 0x30, 0x3c, 0xac, 0x9f, 0x58, 0xad, 0x56, 0xac, 0xd7, 0x10, 0x05, 0x70, 0x71, 0x3e, 0x65, 0x31, 0x5d, 0x50, 0xd7, 0x2d, 0x1f, 0xde, 0xdd, 0x93, 0x8d, 0x0c, 0x9d, 0x6a, 0xfb, 0x1b, 0xba, 0xa1, 0x6d, 0x15, 0x59, 0x3a, 0x66, 0x3a, 0xb5, 0x06, 0x27, 0xcb, 0xed, 0x92, 0xba, 0x2e, 0xd9, 0x1d, 0x14, 0x22, 0xb4, 0xce, 0x43, 0x65, 0xb3, 0x23, 0xc9, 0x25, 0x67, 0x97, 0xe7, 0xd4, 0x3b, 0xe5, 0x51, 0x18, 0xb7, 0x9f, 0x71, 0x9f, 0xb7, 0x25, 0x5d, 0xcd, 0x3d, 0xc4, 0xa6, 0x94, 0x66, 0xb7, 0xdb, 0x13, 0x04, 0xd2, 0xdb, 0xa9, 0x2a, 0x11, 0xf6, 0x45, 0xb6, 0x24, 0x89, 0x33, 0xf2, 0xdc, 0xa6, 0x12, 0x1d, 0x0e, 0x87, 0x7e, 0x27, 0x3b, 0xeb, 0xbd, 0xdb, 0x7b, 0x92, 0x9e, 0x34, 0xb4, 0xad, 0x65, 0x97, 0x46, 0x51, 0x44, 0x9a, 0x64, 0x9e, 0xf3, 0xe0, 0x58, 0xf6, 0x4e, 0xf2, 0xe3, 0x9a, 0x46, 0x47, 0xe2, 0x72, 0x44, 0x9f, 0xed, 0x76, 0xdb, 0x4f, 0xd0, 0x35, 0x67, 0xe3, 0x4b, 0x9a, 0xc6, 0x42, 0xa8, 0x61, 0x28, 0xb9, 0xb9, 0xb9, 0xe2, 0xe6, 0xd5, 0x35, 0x42, 0x18, 0x76, 0xbb, 0x0d, 0x65, 0x75, 0xf0, 0x44, 0xa7, 0xc9, 0x74, 0x44, 0x51, 0x64, 0xc4, 0x71, 0x48, 0xdb, 0x35, 0x1c, 0x8e, 0x7b, 0xd0, 0x36, 0x6a, 0xf4, 0xea, 0xea, 0x8a, 0xed, 0x76, 0x4b, 0x55, 0x55, 0xfe, 0xa6, 0x69, 0xdb, 0x96, 0xd7, 0xaf, 0x5f, 0xf7, 0xe6, 0x16, 0x13, 0xbf, 0x8a, 0x72, 0xd7, 0xb4, 0x8b, 0x24, 0x75, 0x85, 0xd0, 0x91, 0xf6, 0x1c, 0x81, 0xd0, 0x15, 0xec, 0xb2, 0x2c, 0x3d, 0x91, 0xee, 0xab, 0xaf, 0xbe, 0xc2, 0x18, 0xc3, 0x7a, 0xbd, 0x3e, 0xe5, 0x19, 0xf4, 0x30, 0xb7, 0xd7, 0xd7, 0xf7, 0x44, 0x44, 0xdb, 0x5c, 0x95, 0x7e, 0xb2, 0x38, 0x3f, 0x3f, 0xf7, 0x05, 0xd9, 0xad, 0x9c, 0xde, 0xbf, 0xff, 0xc5, 0x43, 0xfc, 0x80, 0x35, 0x11, 0x39, 0x1e, 0x3d, 0x34, 0x1a, 0x86, 0xa1, 0x9d, 0xa4, 0xfa, 0x1d, 0xbe, 0x6d, 0xc2, 0xa5, 0x9f, 0xc2, 0xcb, 0xb2, 0xf1, 0xd1, 0xae, 0xee, 0xb5, 0x3b, 0xa7, 0x3c, 0xa5, 0x6c, 0xd2, 0xdc, 0x76, 0xfb, 0xc4, 0x74, 0x3a, 0x65, 0x36, 0x9b, 0x30, 0x9f, 0x4f, 0x4f, 0xb2, 0xa0, 0xae, 0xb1, 0xe9, 0x84, 0x60, 0xed, 0x42, 0x7b, 0x02, 0x66, 0xd8, 0x17, 0x39, 0xbb, 0xbf, 0x3d, 0x69, 0xfa, 0x9d, 0x26, 0x7a, 0x78, 0x8f, 0x5c, 0x5f, 0xbf, 0xe6, 0xd3, 0xa7, 0x4f, 0x36, 0x1c, 0xa8, 0xae, 0xf9, 0xed, 0xb7, 0x5f, 0x79, 0xf7, 0x4e, 0x91, 0x65, 0x29, 0x57, 0x57, 0x57, 0xec, 0xb7, 0x5b, 0xde, 0xbf, 0x7f, 0xef, 0x9b, 0xfc, 0xcb, 0xcb, 0x4b, 0x94, 0x52, 0xac, 0x1e, 0x1f, 0x99, 0xcf, 0xe7, 0xfc, 0xf0, 0xc3, 0x0f, 0xd4, 0xba, 0xe3, 0xeb, 0xbf, 0xfd, 0xd6, 0x07, 0xbf, 0x38, 0xd2, 0xab, 0xfb, 0x3c, 0xa5, 0xb1, 0x53, 0x5a, 0x24, 0x2c, 0xdb, 0x7c, 0xbd, 0x5e, 0x63, 0x36, 0x4f, 0xc8, 0x30, 0x40, 0x05, 0x95, 0x77, 0xb3, 0x74, 0x43, 0x42, 0x20, 0x4e, 0x06, 0x58, 0x45, 0x6a, 0xf9, 0x25, 0x9d, 0x4a, 0x30, 0x32, 0x40, 0x0d, 0xd6, 0x75, 0x76, 0x12, 0x6d, 0x9e, 0x0f, 0x29, 0x9c, 0xbc, 0xce, 0x35, 0x90, 0x46, 0x31, 0x71, 0x66, 0xcd, 0x90, 0xd6, 0xeb, 0x35, 0x6d, 0xdd, 0x40, 0x6a, 0xb5, 0xd3, 0x51, 0x69, 0x75, 0xf3, 0x71, 0x18, 0x31, 0x9b, 0xcf, 0x78, 0x7b, 0xfd, 0x8a, 0xd1, 0x68, 0xc4, 0xed, 0xed, 0x2d, 0x3f, 0xff, 0xfa, 0x8e, 0xc3, 0xe1, 0x08, 0x79, 0xf2, 0xd9, 0x40, 0x21, 0xa5, 0xb4, 0x10, 0xae, 0x90, 0x34, 0x5a, 0xa1, 0xb5, 0xa2, 0x2c, 0x5b, 0x64, 0x00, 0xd7, 0x17, 0xd7, 0x2c, 0x16, 0x0b, 0x8e, 0xc7, 0x83, 0x8d, 0xfd, 0xed, 0xa7, 0xf1, 0xae, 0xeb, 0xd0, 0x18, 0xbf, 0x66, 0x1c, 0x5e, 0xc7, 0x2f, 0xa3, 0x9b, 0x87, 0xea, 0xa4, 0x6a, 0x7f, 0xf0, 0xbb, 0x67, 0x17, 0x8e, 0xe3, 0xf8, 0x18, 0x69, 0x9a, 0x12, 0xd5, 0x0d, 0xaa, 0xed, 0x88, 0x82, 0x98, 0x38, 0x8a, 0x08, 0x64, 0x48, 0xd3, 0x9d, 0x06, 0xa8, 0xe9, 0x74, 0x4a, 0x18, 0x4a, 0x2a, 0xd5, 0xa2, 0x95, 0xc6, 0x84, 0xf6, 0xf5, 0x77, 0x46, 0xd1, 0x69, 0x65, 0x6d, 0x62, 0x5f, 0xf0, 0x98, 0x30, 0xc6, 0xf3, 0x12, 0x3c, 0x93, 0x5b, 0x9b, 0x9e, 0x79, 0x9f, 0x33, 0x1a, 0x37, 0x28, 0x04, 0x51, 0x1c, 0xf3, 0xe6, 0xcd, 0x57, 0x6c, 0x36, 0x1b, 0x3e, 0x7d, 0xfa, 0x44, 0xa7, 0x14, 0x93, 0xf1, 0x84, 0xb2, 0xb1, 0x3c, 0x8c, 0xdd, 0xee, 0x13, 0xbf, 0xfb, 0xe3, 0x5b, 0x4f, 0x96, 0x9c, 0x4e, 0xa7, 0x9e, 0xec, 0xe9, 0x24, 0x87, 0x02, 0x5b, 0x2b, 0x46, 0xf3, 0x11, 0x81, 0x4c, 0x78, 0x7c, 0xd8, 0x50, 0xee, 0x35, 0x4f, 0xeb, 0x25, 0x55, 0x05, 0x97, 0x17, 0x70, 0xf3, 0xfa, 0x82, 0x37, 0x6f, 0x5e, 0x93, 0x8f, 0x12, 0x44, 0x04, 0x4f, 0x87, 0xb5, 0x37, 0xf1, 0x99, 0x15, 0x0b, 0x9b, 0x5f, 0x6e, 0xb0, 0x7b, 0xf4, 0xde, 0x60, 0x09, 0x6c, 0xad, 0x91, 0x61, 0x88, 0xe8, 0x83, 0x7a, 0x86, 0x6b, 0xeb, 0xf5, 0x6e, 0xcb, 0x6a, 0x55, 0x32, 0xbd, 0x8c, 0x9e, 0x21, 0xc3, 0xbe, 0x06, 0x0d, 0xc2, 0xd1, 0x82, 0x20, 0x20, 0xec, 0x15, 0x5a, 0x5a, 0x6b, 0xaa, 0x63, 0xc9, 0x7a, 0xbd, 0xb6, 0xc3, 0xf3, 0xa8, 0xf6, 0xf5, 0xda, 0x49, 0xcb, 0x43, 0x27, 0x27, 0x1b, 0x66, 0x8d, 0xbb, 0x1d, 0xa1, 0x93, 0x6e, 0x0d, 0xc9, 0x64, 0x8e, 0x26, 0x6f, 0x4d, 0x31, 0xf4, 0x33, 0x8b, 0xd5, 0xe1, 0x85, 0xe1, 0x93, 0x7e, 0x5e, 0x5c, 0x30, 0xc3, 0x9d, 0xf9, 0xd0, 0xd8, 0x65, 0x48, 0xcc, 0x70, 0xa8, 0xc1, 0xc9, 0xd8, 0x5f, 0x0d, 0x64, 0x5f, 0x0c, 0xc2, 0x64, 0x42, 0xff, 0x66, 0x86, 0x49, 0x6c, 0x0e, 0x25, 0x18, 0xc2, 0xff, 0x6e, 0xda, 0x76, 0x6b, 0x80, 0x2c, 0xcb, 0x68, 0xaa, 0xf2, 0x8b, 0x45, 0xdb, 0xbd, 0x26, 0xd7, 0xb8, 0x0c, 0xd9, 0xa2, 0xc3, 0x1b, 0x21, 0xcf, 0x52, 0xbf, 0x6b, 0x57, 0x83, 0xc4, 0x1d, 0xef, 0xee, 0x24, 0xdd, 0x4e, 0xc5, 0x16, 0xba, 0xba, 0xae, 0x38, 0x96, 0x3b, 0x76, 0xbb, 0x0d, 0xc7, 0x72, 0xcf, 0xab, 0x71, 0x44, 0x18, 0x26, 0xc4, 0x89, 0x24, 0x0c, 0xa0, 0x69, 0x8e, 0xec, 0x36, 0x2b, 0xd6, 0x4f, 0x0f, 0xec, 0x76, 0x9a, 0x28, 0x87, 0x2c, 0x8d, 0xf9, 0xdd, 0xb7, 0x63, 0xe2, 0x38, 0x27, 0x96, 0x09, 0x51, 0x94, 0x91, 0xa5, 0x92, 0xd9, 0xf8, 0x1c, 0x91, 0x3c, 0xd0, 0x34, 0x1d, 0x65, 0x69, 0xd3, 0xc6, 0x46, 0xa3, 0x09, 0x59, 0x6a, 0xc3, 0x42, 0xde, 0xff, 0xfa, 0x81, 0xd9, 0xe5, 0x08, 0xa5, 0x42, 0xc2, 0x30, 0x20, 0x8e, 0x23, 0xda, 0xae, 0xe4, 0x70, 0xd8, 0xa1, 0x74, 0x83, 0xd2, 0x0d, 0xd4, 0xa7, 0xf5, 0x89, 0x2b, 0x98, 0xd7, 0xd7, 0xd7, 0x7e, 0xed, 0x52, 0x96, 0x65, 0x7f, 0xf0, 0xdb, 0xcf, 0x69, 0x3c, 0x1e, 0xf9, 0xa9, 0x32, 0xcb, 0x32, 0x4c, 0x94, 0x5b, 0x9b, 0xd4, 0xcd, 0xd6, 0xda, 0x49, 0xf6, 0x87, 0x63, 0x67, 0x34, 0x0a, 0xc3, 0xbb, 0xdf, 0xde, 0xf3, 0xf0, 0xf0, 0x44, 0x9a, 0x0a, 0x36, 0xfb, 0x1d, 0xc6, 0x28, 0x64, 0x00, 0x79, 0x6e, 0x8d, 0x1d, 0x1e, 0x3f, 0xad, 0x7d, 0x81, 0x71, 0xbb, 0xdb, 0xcd, 0xc6, 0x4e, 0x03, 0x9b, 0xdd, 0x9e, 0x0f, 0x1f, 0x3e, 0x70, 0x76, 0x76, 0xe6, 0x57, 0x01, 0xc7, 0xca, 0xee, 0xc2, 0x5a, 0xa5, 0x99, 0xce, 0xe7, 0xfc, 0xe3, 0x9f, 0xff, 0x89, 0x7f, 0xfe, 0xe7, 0x7f, 0xe6, 0xb7, 0xf7, 0x2d, 0x59, 0x0e, 0x71, 0xbc, 0x44, 0x1b, 0xc5, 0x78, 0x5c, 0x30, 0x1e, 0x17, 0x94, 0xd5, 0xa1, 0x6f, 0x46, 0x5a, 0x26, 0xc2, 0x16, 0x74, 0x29, 0x25, 0x51, 0x9c, 0xda, 0xf5, 0x43, 0x7c, 0x66, 0x77, 0xc9, 0x0f, 0x0f, 0x7c, 0xf8, 0xf0, 0x81, 0xb6, 0x6d, 0x59, 0x2c, 0x16, 0xcf, 0x12, 0x90, 0x9c, 0x4f, 0xbb, 0xdb, 0x29, 0x3b, 0xc6, 0xfb, 0x62, 0xb1, 0x40, 0xca, 0x33, 0xbf, 0xaf, 0xdf, 0xed, 0x76, 0x1e, 0xed, 0x70, 0x7f, 0x7e, 0x7c, 0x7c, 0xe4, 0xea, 0xea, 0x8a, 0x24, 0x49, 0xd8, 0xef, 0xf7, 0xdc, 0xdd, 0xdd, 0x79, 0x24, 0x23, 0x8e, 0x63, 0x16, 0x8b, 0x85, 0xcf, 0x02, 0x77, 0xd3, 0xb9, 0x5b, 0x89, 0xd8, 0x83, 0x27, 0xf4, 0xc1, 0x34, 0xd3, 0xe9, 0xd4, 0x93, 0xe2, 0x1c, 0xb4, 0x77, 0x7e, 0x7e, 0xee, 0x89, 0x74, 0x8e, 0x7f, 0x50, 0xd7, 0xb5, 0x67, 0xc1, 0x0e, 0x77, 0xde, 0x4e, 0x99, 0x72, 0x7d, 0x7d, 0xed, 0x1b, 0x82, 0xaa, 0xba, 0x47, 0x4a, 0xd1, 0xe7, 0x7c, 0x1b, 0xb4, 0xb6, 0xd3, 0xfc, 0xf9, 0xb9, 0x4d, 0xbc, 0x3b, 0xec, 0xed, 0x74, 0x76, 0x3c, 0x5a, 0x1f, 0x7b, 0xc7, 0x39, 0xd8, 0x6c, 0x36, 0xf6, 0x60, 0x0a, 0x77, 0x44, 0x59, 0x02, 0xb1, 0x41, 0x18, 0x03, 0x12, 0x3f, 0x09, 0x55, 0x55, 0xc5, 0x7f, 0xfc, 0x8f, 0x7f, 0x66, 0x9c, 0x8f, 0x31, 0xad, 0xa6, 0x3c, 0xd8, 0xe4, 0xb9, 0xf1, 0x64, 0x4c, 0x9c, 0x27, 0x24, 0x79, 0x42, 0xb9, 0xd1, 0x5c, 0x5e, 0x5a, 0x05, 0x42, 0x10, 0x8a, 0x3e, 0xd3, 0xc1, 0x7e, 0xf6, 0x4d, 0x5b, 0x11, 0x4a, 0xe1, 0x3d, 0x06, 0xac, 0xfb, 0x5e, 0xd9, 0x07, 0xca, 0x2c, 0x98, 0xcd, 0x66, 0xec, 0x77, 0x47, 0xd6, 0x77, 0x16, 0x4e, 0x35, 0xa1, 0x60, 0x94, 0x8f, 0x51, 0xa6, 0x1b, 0x84, 0x6f, 0x84, 0x04, 0xf4, 0xa4, 0x24, 0xed, 0x56, 0x7a, 0x92, 0xbc, 0x28, 0x18, 0x4d, 0xc6, 0x88, 0xa4, 0xf5, 0x2b, 0x90, 0xc3, 0xd6, 0xf2, 0x10, 0x8c, 0xc2, 0x9f, 0x15, 0x4e, 0x93, 0x7f, 0x2c, 0x6b, 0x44, 0x68, 0xe3, 0x9f, 0x95, 0xd6, 0xbd, 0xd1, 0x8f, 0xa4, 0xab, 0x2b, 0xfb, 0xd8, 0x83, 0x00, 0x95, 0x38, 0x08, 0x7d, 0x78, 0x49, 0x53, 0xd6, 0x8c, 0xc7, 0x85, 0x9f, 0x74, 0xfd, 0x50, 0xd3, 0x37, 0x35, 0x93, 0xc9, 0x84, 0xfa, 0x70, 0xe4, 0xfd, 0xfb, 0xf7, 0x94, 0xdb, 0x3d, 0xb3, 0xd9, 0xcc, 0xaf, 0xc0, 0xb2, 0x2c, 0xe3, 0x68, 0xd4, 0x33, 0xc4, 0x30, 0xec, 0xcf, 0x95, 0x38, 0x8c, 0x49, 0xc3, 0x88, 0xf6, 0x78, 0xf0, 0x68, 0xd2, 0x66, 0xb3, 0xee, 0x8b, 0xdb, 0x47, 0xef, 0xeb, 0xa0, 0x02, 0x4b, 0x76, 0x2d, 0xab, 0x0a, 0x7a, 0xee, 0x8e, 0xa6, 0x1f, 0x5e, 0x86, 0x24, 0xbe, 0xc1, 0x19, 0x3c, 0x54, 0x1c, 0x39, 0x07, 0xc3, 0xe3, 0xf1, 0xe8, 0x1d, 0x20, 0x83, 0x20, 0x60, 0xb9, 0xac, 0xf8, 0xed, 0xb7, 0xdf, 0x48, 0x9a, 0x96, 0x57, 0xaf, 0x5e, 0x91, 0x44, 0x31, 0xef, 0xdf, 0xfd, 0x8a, 0x0c, 0x22, 0xfe, 0xc3, 0x7f, 0xf8, 0x9f, 0xb8, 0xb9, 0xb9, 0x61, 0xb5, 0xde, 0xf0, 0xc3, 0xcf, 0x3f, 0x59, 0xcd, 0xfb, 0xc1, 0x5e, 0xaf, 0x81, 0x0c, 0xad, 0x09, 0x8f, 0xea, 0x50, 0x5a, 0x23, 0x85, 0x7d, 0x3d, 0x88, 0x93, 0xe6, 0x7a, 0x88, 0xde, 0x16, 0x85, 0x8d, 0xcd, 0x6d, 0xab, 0xda, 0x33, 0xd3, 0xb3, 0x2c, 0xa3, 0x33, 0xd6, 0x7c, 0x25, 0xe8, 0xb9, 0x19, 0x71, 0x1c, 0xd3, 0x1c, 0x8e, 0x9e, 0xdf, 0x75, 0x76, 0x16, 0xda, 0xfb, 0x2e, 0xb3, 0xcc, 0x7f, 0x87, 0x9e, 0x39, 0x83, 0x28, 0xb7, 0x32, 0x52, 0x01, 0x54, 0xfb, 0x92, 0xba, 0xea, 0x98, 0x4d, 0x62, 0xc6, 0xe3, 0x31, 0xaf, 0xaf, 0xe7, 0xa4, 0x71, 0x8e, 0xea, 0x0c, 0xe5, 0xf1, 0x91, 0xc9, 0x64, 0xc2, 0xb1, 0x3e, 0xf2, 0xf4, 0xf4, 0x44, 0x94, 0x85, 0xc8, 0x40, 0x92, 0x24, 0xb9, 0x0f, 0x26, 0x33, 0x42, 0xa0, 0x25, 0xcf, 0x2c, 0xce, 0x51, 0x9a, 0x4e, 0xb5, 0x68, 0x63, 0x79, 0x14, 0x81, 0xb6, 0x75, 0xde, 0x91, 0x0a, 0xf3, 0xd1, 0x88, 0x3f, 0xfd, 0xe9, 0x9a, 0xa7, 0x72, 0xdd, 0xfb, 0x52, 0xc4, 0x88, 0xa6, 0xb6, 0x06, 0x62, 0xfd, 0x3e, 0x5e, 0x6b, 0x7b, 0x4e, 0x6a, 0xad, 0xbd, 0xe1, 0x8c, 0x93, 0x5e, 0xbb, 0x06, 0x5e, 0x74, 0xb0, 0xeb, 0xcf, 0x4b, 0xf7, 0x5d, 0x89, 0xff, 0xf9, 0xbf, 0xfc, 0xef, 0xe6, 0x4b, 0xc1, 0x24, 0x6e, 0xcf, 0xe8, 0xbe, 0x6c, 0x47, 0x4e, 0x72, 0x85, 0x7a, 0x34, 0x1a, 0xd1, 0x35, 0x27, 0x06, 0xfc, 0x33, 0x8f, 0xf7, 0x17, 0x53, 0xdf, 0x90, 0x05, 0x3f, 0x24, 0xd1, 0x49, 0xc9, 0xb3, 0x82, 0xf8, 0xf2, 0x75, 0xb8, 0xe7, 0x7b, 0x99, 0x8c, 0xe6, 0x4d, 0x64, 0x82, 0x62, 0xf0, 0x6f, 0x06, 0xfb, 0xf3, 0x7e, 0x47, 0x2d, 0x82, 0x2f, 0x7b, 0xe0, 0x7a, 0xed, 0xbc, 0xb4, 0x0c, 0x47, 0xdb, 0x55, 0x5b, 0x22, 0x9b, 0x10, 0xbd, 0x71, 0x4a, 0xa7, 0x39, 0x98, 0x4d, 0x6f, 0x93, 0xef, 0x02, 0x58, 0x00, 0xa3, 0xfc, 0xff, 0xd7, 0xf5, 0x15, 0x51, 0x60, 0xc9, 0x30, 0xc2, 0xb4, 0x18, 0x53, 0x12, 0xc9, 0x96, 0x34, 0x13, 0xa4, 0xa9, 0xe0, 0x58, 0xae, 0xc0, 0x54, 0x68, 0x75, 0xa4, 0xaa, 0x9e, 0x38, 0xec, 0x1f, 0x31, 0x6d, 0xcd, 0xe8, 0xff, 0xa3, 0xeb, 0xcd, 0x7a, 0x24, 0xc9, 0xb2, 0x33, 0xb1, 0xcf, 0xf6, 0xd5, 0xcd, 0x77, 0xf7, 0xd8, 0x72, 0xad, 0xce, 0xaa, 0x6a, 0x12, 0x33, 0x24, 0x5b, 0xa4, 0x40, 0x4a, 0x1c, 0x11, 0x18, 0x08, 0x82, 0x20, 0x3d, 0xcc, 0x9f, 0x10, 0x24, 0x08, 0x7a, 0x10, 0xe6, 0x1f, 0xe8, 0x7f, 0x11, 0x10, 0x30, 0x2f, 0x04, 0x04, 0xa8, 0xd5, 0xd3, 0x64, 0x77, 0xb3, 0xd6, 0x5c, 0x22, 0x23, 0x63, 0xf1, 0xdd, 0xdd, 0xf6, 0xe5, 0x9a, 0xe9, 0xe1, 0xdc, 0x73, 0xc3, 0x22, 0xb3, 0xa6, 0x80, 0x04, 0xaa, 0x2a, 0x63, 0x71, 0x33, 0xbb, 0x76, 0xef, 0x39, 0xdf, 0xf9, 0x96, 0xc0, 0xc3, 0x70, 0x38, 0x80, 0x37, 0xf2, 0x54, 0x58, 0x08, 0xc1, 0xb1, 0x31, 0xba, 0x8e, 0xb4, 0x92, 0xcb, 0xe5, 0x12, 0x79, 0x26, 0xb0, 0xdb, 0xed, 0xd4, 0xdc, 0x8a, 0x37, 0x69, 0x26, 0x25, 0x9d, 0x4e, 0x07, 0x05, 0x13, 0x73, 0x34, 0xe0, 0x7e, 0xbf, 0x57, 0x52, 0x2a, 0xee, 0xb8, 0x38, 0xe5, 0x68, 0x34, 0x1a, 0xa1, 0xaa, 0x2a, 0x25, 0xf5, 0x72, 0x03, 0x5b, 0x3d, 0x4b, 0x56, 0x37, 0x30, 0xf4, 0xce, 0x5d, 0x3a, 0x1f, 0x52, 0xbc, 0x90, 0x2c, 0xcb, 0x52, 0xe6, 0x30, 0xd7, 0x6f, 0xdf, 0x3e, 0x41, 0x5e, 0xfa, 0xf2, 0x10, 0x3e, 0x78, 0xc2, 0x30, 0x44, 0x92, 0x24, 0x58, 0xaf, 0x37, 0x70, 0x5d, 0xe7, 0x89, 0x79, 0xca, 0xf9, 0xe5, 0x25, 0xe6, 0xf3, 0x39, 0xda, 0xb6, 0xc5, 0x7e, 0xbf, 0x57, 0xb6, 0xb2, 0x69, 0x9a, 0x2a, 0x16, 0x2d, 0x77, 0x90, 0x2c, 0x99, 0x61, 0xa2, 0xdd, 0x9b, 0x37, 0x6f, 0xd0, 0x55, 0x64, 0xcc, 0xd2, 0x81, 0xe0, 0x2c, 0xda, 0xd4, 0x2a, 0x44, 0x91, 0x85, 0xb3, 0xb3, 0x33, 0x54, 0x35, 0x7d, 0x7e, 0xf2, 0x27, 0xa0, 0x0d, 0x2b, 0x4e, 0x8e, 0x28, 0x8a, 0x0a, 0x17, 0x17, 0x67, 0x18, 0x0d, 0x67, 0xb8, 0xb8, 0xb8, 0xc0, 0xed, 0xed, 0x1d, 0x7e, 0xf7, 0xbb, 0x7f, 0x81, 0xe3, 0x18, 0xf8, 0xfa, 0xcd, 0xb7, 0x34, 0x7f, 0x6f, 0x5b, 0xac, 0xd6, 0xf7, 0x4f, 0x7c, 0xa7, 0xb9, 0x0b, 0x2e, 0x8a, 0x02, 0xf3, 0xf9, 0x1c, 0xa6, 0x67, 0x2a, 0x0e, 0x09, 0x5f, 0xc3, 0xf1, 0x78, 0x54, 0x5a, 0x7d, 0x1e, 0x4f, 0x30, 0x03, 0x37, 0xcf, 0x73, 0xec, 0x76, 0x3b, 0x64, 0x59, 0x86, 0xf9, 0x7c, 0x0e, 0x5d, 0x87, 0x92, 0xd0, 0xf1, 0x81, 0xc9, 0x10, 0x27, 0x15, 0xb5, 0x8f, 0x05, 0x74, 0x51, 0x14, 0xaa, 0x7b, 0x1f, 0x8d, 0xc8, 0x23, 0x7f, 0x31, 0x19, 0xe0, 0xfd, 0xfb, 0xf7, 0x0a, 0x6a, 0x2f, 0xcb, 0x12, 0x17, 0x17, 0x17, 0x98, 0xcf, 0xe7, 0x92, 0x51, 0x4f, 0x87, 0xbc, 0x61, 0x18, 0x38, 0x3f, 0x3f, 0xc7, 0x62, 0xb1, 0x50, 0x90, 0x3a, 0x4b, 0xc1, 0x92, 0x24, 0x51, 0xa6, 0x3f, 0x34, 0xca, 0x68, 0x31, 0x99, 0x44, 0x38, 0x3f, 0x3f, 0x87, 0x69, 0xb8, 0x6a, 0xec, 0x05, 0x00, 0xfb, 0xfd, 0x5e, 0xe9, 0x92, 0x01, 0xa0, 0x91, 0x0a, 0x02, 0x8e, 0xdb, 0xe5, 0x74, 0x44, 0x5e, 0x53, 0x80, 0xae, 0xba, 0x8c, 0x56, 0x40, 0x6e, 0xae, 0x8f, 0xf6, 0xbd, 0x5a, 0xd3, 0xe1, 0x78, 0x3c, 0xe2, 0xf6, 0xf6, 0x16, 0xba, 0xae, 0xe3, 0xf9, 0xf3, 0xe7, 0xf0, 0x3c, 0x8f, 0x4c, 0x4d, 0x84, 0xc0, 0x74, 0x36, 0x92, 0xeb, 0x92, 0x36, 0xc6, 0xd5, 0xfa, 0x1e, 0x45, 0x51, 0x20, 0x0c, 0x43, 0x0c, 0x87, 0x11, 0x0e, 0x49, 0x82, 0xdd, 0xf1, 0x00, 0xdb, 0x75, 0xe0, 0xb8, 0x2e, 0x0c, 0xdb, 0x42, 0xd5, 0x0a, 0xa4, 0x39, 0x15, 0x5e, 0x45, 0x49, 0xeb, 0x48, 0xeb, 0x80, 0xb6, 0xaa, 0x61, 0xe9, 0x06, 0x06, 0x41, 0xd3, 0xbf, 0x84, 0x38, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x08, 0xdf, 0xf3, 0xa0, 0x77, 0xc0, 0xeb, 0x67, 0xaf, 0x60, 0xb9, 0x0e, 0xd6, 0x9b, 0x0d, 0xde, 0x5e, 0xbf, 0x45, 0x5a, 0xe4, 0xd0, 0x2d, 0x1d, 0xd0, 0xa9, 0xc3, 0x2e, 0xc5, 0xa3, 0x49, 0x92, 0x69, 0xda, 0xd2, 0x0c, 0xe6, 0x71, 0x8f, 0xd3, 0x35, 0x62, 0xef, 0xeb, 0x92, 0x55, 0xaf, 0x43, 0x03, 0x44, 0x4b, 0x5d, 0xa6, 0xae, 0x43, 0x64, 0x64, 0xaa, 0x15, 0x86, 0x21, 0x7e, 0xfd, 0xeb, 0x5f, 0xa3, 0x69, 0x1a, 0x55, 0xc0, 0xdd, 0xdf, 0xdf, 0x63, 0xfe, 0xec, 0x02, 0x0f, 0x0f, 0x0f, 0x2a, 0xfe, 0x97, 0x12, 0xf8, 0x08, 0xd6, 0xbe, 0xbd, 0xbd, 0x85, 0xe9, 0x19, 0x4f, 0x3c, 0x1a, 0x78, 0xde, 0xcf, 0xef, 0xe7, 0x24, 0x18, 0x28, 0xd2, 0x9b, 0x25, 0x49, 0x8b, 0xef, 0x3e, 0xbc, 0xc7, 0x6e, 0xd7, 0x61, 0x38, 0x04, 0x26, 0xe7, 0x33, 0xb5, 0x87, 0x57, 0x55, 0x05, 0xe8, 0xb4, 0x96, 0x5a, 0x48, 0x55, 0xc5, 0x83, 0x20, 0xcd, 0xb8, 0x06, 0x5c, 0x9d, 0x2d, 0x31, 0x1c, 0x90, 0x8b, 0x9b, 0x61, 0xe9, 0xb0, 0x3d, 0x17, 0xb9, 0xa8, 0x51, 0x35, 0xb4, 0xa7, 0xb0, 0xe1, 0x8b, 0x28, 0x2b, 0xdc, 0x7f, 0x5c, 0xe3, 0x6c, 0x39, 0x46, 0x10, 0x46, 0x2a, 0xab, 0x81, 0x0a, 0xfe, 0x81, 0xe2, 0xd3, 0x24, 0x09, 0xa5, 0x0f, 0xf2, 0xfb, 0x40, 0x96, 0xcf, 0x5b, 0xa9, 0xba, 0xa1, 0xdf, 0x93, 0x8d, 0x73, 0x72, 0xdf, 0xd3, 0x75, 0x78, 0x96, 0x07, 0xad, 0xd5, 0x50, 0xe6, 0x25, 0x20, 0x5a, 0x38, 0x96, 0x0b, 0xcf, 0x1d, 0xa0, 0x2a, 0x4b, 0x68, 0x42, 0x83, 0xef, 0xfa, 0xf0, 0x1d, 0xca, 0x8e, 0x6f, 0x2a, 0x81, 0xb6, 0x6e, 0xb0, 0x3a, 0x1c, 0x70, 0x7b, 0x7b, 0x8b, 0xe1, 0x78, 0x0c, 0x68, 0x2d, 0x36, 0xdb, 0xed, 0x63, 0x48, 0xcd, 0x76, 0x8f, 0x97, 0x6f, 0x2e, 0x95, 0x3f, 0x43, 0x56, 0x66, 0x48, 0xd3, 0x0c, 0xf3, 0xe5, 0x54, 0xdd, 0xeb, 0xba, 0xcb, 0xa0, 0x77, 0x3a, 0x4c, 0xc3, 0x81, 0xa1, 0xd9, 0x28, 0xd2, 0x0a, 0x79, 0x52, 0xc2, 0x73, 0x42, 0x0c, 0x23, 0x32, 0x42, 0x6a, 0xba, 0x06, 0x55, 0x93, 0xa3, 0x6e, 0x2b, 0x34, 0x5a, 0x8d, 0x4e, 0x6f, 0xd0, 0x69, 0x02, 0x02, 0x02, 0x6e, 0xe9, 0x7f, 0xc1, 0xbd, 0xea, 0x9f, 0x5f, 0x8e, 0xe5, 0xe2, 0xe7, 0x1f, 0x6f, 0x00, 0x01, 0xcc, 0xa6, 0x1e, 0x06, 0xae, 0x8f, 0xe5, 0x62, 0x81, 0xd9, 0x78, 0x82, 0x34, 0x4d, 0x71, 0x9b, 0x6d, 0xb0, 0x5d, 0x6f, 0xb0, 0x58, 0x2c, 0xf0, 0xf5, 0x57, 0xbf, 0x42, 0x9e, 0x66, 0x78, 0xb8, 0xbb, 0x83, 0x61, 0xd0, 0x3a, 0xa5, 0x67, 0x41, 0x05, 0x67, 0x9c, 0xa6, 0x10, 0x1d, 0xa5, 0xcd, 0x91, 0x02, 0xa2, 0x81, 0xaf, 0xe9, 0x4f, 0x7c, 0x55, 0xba, 0xae, 0xa3, 0x03, 0x5d, 0xa5, 0xd3, 0x7c, 0xc6, 0xe2, 0xee, 0x33, 0x21, 0xfb, 0xec, 0x48, 0x05, 0x91, 0x56, 0x8f, 0xba, 0x6a, 0x36, 0xf8, 0xe0, 0x0a, 0xaf, 0xef, 0xcf, 0xcd, 0xf0, 0x79, 0xbf, 0x53, 0x66, 0x39, 0x57, 0xbf, 0xf3, 0xfd, 0x1c, 0xf2, 0xee, 0x7b, 0xf3, 0x7e, 0xae, 0x65, 0xa7, 0xbf, 0xb7, 0x7e, 0x41, 0x4e, 0xf6, 0x08, 0x9d, 0x37, 0x6d, 0xfd, 0x84, 0xf9, 0xfe, 0xf9, 0x35, 0x9a, 0x86, 0x64, 0x36, 0x37, 0xfc, 0x20, 0x28, 0xe5, 0x8c, 0x3b, 0x56, 0x3b, 0x74, 0xd1, 0x76, 0xf4, 0xef, 0x6d, 0x53, 0xa3, 0x03, 0x11, 0xdb, 0xd8, 0x00, 0xa6, 0x29, 0x42, 0xa0, 0x13, 0xc4, 0x32, 0x77, 0x4c, 0xb8, 0x8e, 0x06, 0xd3, 0xa8, 0xd0, 0xd4, 0x44, 0x72, 0x13, 0xe2, 0x80, 0xd3, 0x69, 0x8f, 0x34, 0xdd, 0xc2, 0x71, 0x3a, 0xcc, 0xa7, 0x03, 0x8c, 0x86, 0x21, 0xb4, 0x4e, 0xa0, 0x2e, 0x0b, 0xac, 0x0e, 0x3b, 0x75, 0x6f, 0x18, 0xfa, 0x63, 0x33, 0x15, 0xaa, 0xba, 0x1c, 0xf5, 0x02, 0x30, 0x31, 0x85, 0xcd, 0x3f, 0xd8, 0xf8, 0x67, 0x3c, 0x1e, 0xab, 0xeb, 0x67, 0x44, 0x81, 0x9d, 0xc3, 0x76, 0xbb, 0x8d, 0x22, 0xb5, 0xb0, 0xfb, 0x18, 0x1f, 0x8e, 0xcf, 0x9e, 0x3d, 0x83, 0x6e, 0x41, 0xfd, 0x3e, 0xd3, 0x34, 0x9f, 0x1c, 0x3c, 0xec, 0x47, 0xfe, 0x39, 0xba, 0xc1, 0x48, 0x49, 0xd7, 0x75, 0x98, 0x48, 0x28, 0xf1, 0x70, 0x38, 0xc8, 0xca, 0x78, 0xaa, 0x0e, 0xa5, 0x38, 0x8e, 0x31, 0x9d, 0x4e, 0x9f, 0x64, 0xcd, 0x17, 0x45, 0x81, 0x87, 0x87, 0x07, 0x18, 0x86, 0x81, 0xab, 0xab, 0x2b, 0x44, 0xa3, 0x91, 0x7a, 0xd1, 0x59, 0x1b, 0xdd, 0xef, 0x8e, 0xdf, 0xbd, 0x7b, 0xab, 0x60, 0xfb, 0x24, 0x49, 0x54, 0xd5, 0x9e, 0x24, 0x09, 0xde, 0xbf, 0xdf, 0xa1, 0xc9, 0x81, 0xd1, 0x08, 0x18, 0x4f, 0x42, 0x89, 0x8c, 0x50, 0x64, 0x28, 0xbd, 0xc4, 0x07, 0x2c, 0x96, 0x53, 0x35, 0x3f, 0x8b, 0x63, 0x9a, 0x31, 0xb7, 0x5d, 0xa3, 0x0a, 0x9a, 0xe7, 0xcf, 0x5e, 0xcb, 0xb8, 0xd2, 0x3b, 0x64, 0x59, 0x86, 0xc5, 0x62, 0x21, 0x3b, 0x6f, 0x1d, 0x96, 0xe9, 0xc0, 0xb4, 0x74, 0xa5, 0x1d, 0xe7, 0xf8, 0x56, 0x46, 0x61, 0x16, 0x8b, 0x05, 0xd2, 0x2a, 0x55, 0xf7, 0x2a, 0xcb, 0x32, 0xe5, 0x35, 0xcf, 0x08, 0x87, 0x69, 0x9a, 0x2a, 0xc8, 0x84, 0x91, 0x27, 0xf6, 0x7c, 0xff, 0xe6, 0x9b, 0x6f, 0x24, 0x81, 0xcf, 0x93, 0xa1, 0x2c, 0x44, 0x36, 0x0b, 0x82, 0x40, 0x6d, 0x88, 0x9b, 0xcd, 0x4e, 0xc9, 0xb6, 0x56, 0x2b, 0xb2, 0x17, 0x7e, 0xfd, 0x3a, 0xc0, 0x9b, 0x37, 0x6f, 0x10, 0x86, 0x21, 0x76, 0xab, 0x4f, 0xd8, 0xef, 0xf7, 0x58, 0x2c, 0x16, 0x58, 0x2e, 0x97, 0xf8, 0xf8, 0xf1, 0x23, 0xae, 0xaf, 0xaf, 0x15, 0xcb, 0xb7, 0xae, 0x85, 0x62, 0xbc, 0xf3, 0x33, 0x60, 0xf3, 0x1b, 0x2a, 0x74, 0x82, 0x47, 0xb2, 0x8e, 0x9c, 0x93, 0x3e, 0x21, 0xb8, 0xd6, 0x50, 0xfe, 0xf6, 0x2f, 0x5f, 0xbe, 0x84, 0x61, 0x18, 0xb8, 0xbb, 0xbb, 0x53, 0xd9, 0xed, 0x83, 0x71, 0xa8, 0x9e, 0x59, 0xdf, 0x65, 0x92, 0x89, 0x9a, 0x74, 0x2d, 0xba, 0x52, 0x49, 0x34, 0x35, 0xf9, 0xe7, 0x8f, 0xc7, 0xb4, 0x2e, 0xb2, 0x53, 0x8c, 0xfb, 0xfb, 0x7b, 0x94, 0x65, 0x83, 0xf9, 0x7c, 0x02, 0xcf, 0xf3, 0x70, 0x3a, 0x9d, 0xe0, 0x38, 0x0e, 0x5e, 0xbd, 0x7a, 0x85, 0xfd, 0x7e, 0x4b, 0x52, 0x32, 0x19, 0x69, 0x5b, 0x56, 0xb9, 0x1a, 0xc1, 0x74, 0x5d, 0x8b, 0xc5, 0xc5, 0x05, 0x25, 0x8a, 0x19, 0x3a, 0xd2, 0x2c, 0x23, 0xd8, 0xd3, 0xb6, 0x90, 0x64, 0xa9, 0x4c, 0x2c, 0xd3, 0x14, 0x61, 0x4d, 0x97, 0xe4, 0x38, 0xdf, 0xf5, 0xe0, 0xd8, 0x36, 0x0c, 0x68, 0xe4, 0xe4, 0x15, 0xf8, 0xa8, 0xea, 0x1a, 0xfb, 0x78, 0x8f, 0xba, 0x15, 0xd0, 0x4c, 0x0a, 0x5f, 0x11, 0x5d, 0xa7, 0x3a, 0x2f, 0x8e, 0xda, 0x24, 0x3d, 0x77, 0xa7, 0xb8, 0x45, 0x06, 0x24, 0x2a, 0xa7, 0xeb, 0xc8, 0xd3, 0x0c, 0x8e, 0x49, 0xc5, 0xae, 0x65, 0x9a, 0x68, 0xaa, 0x1a, 0x17, 0xf3, 0xa5, 0x22, 0x8a, 0xce, 0xe7, 0x73, 0x35, 0x17, 0x75, 0x1c, 0x07, 0xab, 0xd5, 0x0a, 0x46, 0xe0, 0x22, 0x4d, 0x53, 0xd5, 0x79, 0x52, 0x8e, 0xc2, 0x44, 0x11, 0xb9, 0xee, 0xb7, 0x77, 0x4f, 0x46, 0x9e, 0x8c, 0x9c, 0xb2, 0x67, 0xc1, 0x71, 0xb5, 0x51, 0xf7, 0x56, 0xc8, 0x22, 0xb2, 0x45, 0xa7, 0x90, 0x35, 0x27, 0xf4, 0xa0, 0xc9, 0xb1, 0x22, 0x67, 0xa1, 0x5b, 0x96, 0x85, 0x5a, 0x50, 0xb1, 0x7e, 0xfd, 0xc7, 0x18, 0xbf, 0xfe, 0xe6, 0x0a, 0x81, 0xe3, 0xc2, 0xd2, 0x80, 0xa1, 0xd4, 0x9a, 0xef, 0x8f, 0x3b, 0xfc, 0xf1, 0xbb, 0xef, 0xf1, 0xec, 0xab, 0x17, 0x98, 0xcc, 0xa6, 0x58, 0xad, 0x56, 0x8a, 0x2b, 0x20, 0xca, 0x0a, 0x5a, 0xd3, 0xa2, 0x95, 0x59, 0x1c, 0x3c, 0x6f, 0x67, 0x27, 0x51, 0x76, 0xe3, 0xb3, 0x2c, 0x0b, 0x3f, 0xfe, 0xf8, 0x23, 0xf9, 0x1d, 0x44, 0x8f, 0xca, 0x13, 0xe6, 0xaa, 0x5c, 0x5c, 0x5c, 0x60, 0x63, 0xd2, 0x7b, 0xdf, 0x36, 0x1d, 0x0c, 0x98, 0xd0, 0xdb, 0x0e, 0xa2, 0x6a, 0x60, 0x18, 0x16, 0x3c, 0xc7, 0xc5, 0xed, 0xa7, 0x15, 0x06, 0x61, 0x08, 0xdf, 0xf6, 0xd1, 0x54, 0x0d, 0xda, 0xa6, 0x81, 0x6b, 0x7b, 0x88, 0xc2, 0x01, 0x7c, 0xc7, 0xc7, 0xfa, 0x78, 0xc4, 0x3f, 0xff, 0xf3, 0x0f, 0xe8, 0x74, 0xc0, 0x75, 0x01, 0xdd, 0x84, 0xca, 0x6f, 0xf8, 0x78, 0xbb, 0xc5, 0xc5, 0xf3, 0x21, 0x16, 0x8b, 0x05, 0x1d, 0x88, 0x59, 0x8c, 0xd3, 0xe9, 0x84, 0xc5, 0xd9, 0xfc, 0xd1, 0x67, 0x45, 0xa3, 0x62, 0x53, 0xeb, 0x0c, 0xb4, 0x42, 0x07, 0x84, 0x0e, 0xbd, 0x33, 0xa1, 0xc3, 0x52, 0xef, 0x69, 0x2d, 0x1a, 0x94, 0x75, 0x86, 0x4a, 0x94, 0xa8, 0x51, 0xa9, 0x03, 0xbd, 0xeb, 0x3a, 0xb8, 0x5d, 0xf8, 0x24, 0xf8, 0xa5, 0x1f, 0x10, 0xd6, 0xb6, 0x2d, 0xd2, 0x43, 0x82, 0xd3, 0x21, 0xc3, 0x38, 0xf2, 0x31, 0x9d, 0x4c, 0xd0, 0xd6, 0x0d, 0x3c, 0xdb, 0xc1, 0x68, 0x10, 0xa1, 0xaa, 0x2a, 0xe4, 0x56, 0x83, 0xd5, 0x6a, 0x05, 0xd7, 0xb2, 0x31, 0x9b, 0xcd, 0xd0, 0x89, 0x16, 0xad, 0x44, 0xc8, 0x01, 0xe0, 0xfe, 0xfe, 0x5e, 0xa1, 0x84, 0xa6, 0x6d, 0x23, 0x95, 0x11, 0xd7, 0x8e, 0xef, 0xd1, 0xde, 0x2a, 0x47, 0x91, 0xec, 0xc6, 0x5a, 0x14, 0x05, 0x4c, 0xee, 0xe2, 0xfa, 0x1f, 0x84, 0x17, 0x10, 0x3f, 0xac, 0xbe, 0xb6, 0x9b, 0x5f, 0x5c, 0x9a, 0x91, 0x6b, 0x5f, 0x74, 0xd0, 0xfd, 0xc3, 0x93, 0x2b, 0xf6, 0xcf, 0x25, 0x5f, 0x8f, 0xf6, 0xb0, 0x5f, 0x76, 0xdd, 0xfd, 0x43, 0xb7, 0x4f, 0x9c, 0x7b, 0x62, 0x9d, 0xa8, 0xbc, 0x6d, 0xcb, 0x5e, 0xf7, 0xd4, 0x8f, 0x51, 0x65, 0x6b, 0x3e, 0xa3, 0xf7, 0xb3, 0x20, 0x53, 0xce, 0x7a, 0xd0, 0x79, 0x67, 0xa2, 0x6d, 0x19, 0x42, 0x67, 0xdf, 0xf5, 0x47, 0xab, 0xd8, 0x22, 0x6d, 0x28, 0xe9, 0x0c, 0x3a, 0xf4, 0xce, 0x26, 0x86, 0xba, 0xf6, 0x48, 0x9c, 0x09, 0x06, 0x32, 0xe6, 0x14, 0x1d, 0x4c, 0xa3, 0x06, 0xba, 0x06, 0x45, 0x11, 0x23, 0xcd, 0x0e, 0x28, 0xb2, 0x18, 0xfb, 0xe3, 0x0d, 0x7c, 0xcf, 0xc2, 0x20, 0x72, 0x10, 0x06, 0x36, 0xc2, 0x81, 0x0b, 0xdb, 0xd1, 0xd1, 0x94, 0x15, 0xca, 0xba, 0x40, 0x10, 0x04, 0x38, 0x1e, 0x8f, 0x6a, 0xc6, 0xca, 0xe1, 0x26, 0xe3, 0x31, 0x59, 0x38, 0xc6, 0xa7, 0x12, 0x49, 0x9c, 0x61, 0xb3, 0xde, 0x29, 0xa2, 0xda, 0x30, 0x1a, 0xab, 0xc3, 0x81, 0xbc, 0xb7, 0x89, 0x3c, 0xc8, 0xb3, 0x2e, 0x66, 0x88, 0x97, 0x65, 0x89, 0x28, 0x0a, 0x95, 0xa1, 0xc8, 0x6e, 0xb7, 0x43, 0x1c, 0x97, 0x28, 0x4b, 0x20, 0x0c, 0x6b, 0xec, 0x76, 0x3b, 0xd4, 0x6d, 0xf9, 0x64, 0x8c, 0x52, 0x96, 0xa5, 0xf2, 0x1e, 0x60, 0x88, 0x96, 0xff, 0x7c, 0xee, 0x17, 0x60, 0x59, 0x16, 0xb6, 0x0f, 0x0f, 0xd0, 0x34, 0x0d, 0xd3, 0xe9, 0x54, 0x49, 0x0a, 0x79, 0xc3, 0xea, 0xbb, 0xf6, 0x3d, 0xce, 0x5d, 0x9b, 0x27, 0x9e, 0x06, 0x1f, 0xff, 0xf8, 0x47, 0x55, 0x80, 0xcc, 0xe7, 0x73, 0x85, 0xec, 0x70, 0x57, 0x71, 0x71, 0x71, 0xa1, 0x9c, 0xeb, 0x58, 0xeb, 0x5d, 0x14, 0x85, 0x2c, 0x72, 0x80, 0xda, 0x04, 0x0c, 0x13, 0x8a, 0xf8, 0x47, 0x9c, 0x08, 0x72, 0xca, 0xda, 0xed, 0x76, 0x28, 0xab, 0x4c, 0xa1, 0x0f, 0xa7, 0xd3, 0x81, 0x24, 0x24, 0xb6, 0xa1, 0xc6, 0x4a, 0xbb, 0xdd, 0x5e, 0x15, 0x9c, 0x42, 0x08, 0x75, 0x20, 0xb2, 0x7d, 0x6a, 0x23, 0x3a, 0xd9, 0x3d, 0xe9, 0x88, 0xa2, 0x01, 0xc2, 0x30, 0x54, 0x70, 0xfa, 0xfd, 0xfd, 0x1d, 0x1a, 0xc9, 0xa2, 0xf7, 0x1c, 0x17, 0x81, 0x34, 0x7c, 0x60, 0x19, 0xd8, 0xc3, 0xc3, 0x03, 0x1a, 0xbd, 0x86, 0x0e, 0x0d, 0x9e, 0xec, 0xe0, 0x3b, 0x41, 0xa6, 0x33, 0xb7, 0xc9, 0x2d, 0xbd, 0xbc, 0x6d, 0x83, 0xf9, 0x7c, 0xae, 0x9c, 0x9e, 0xd8, 0x8d, 0x91, 0x8d, 0x7b, 0xd8, 0x38, 0xe9, 0xf2, 0xfc, 0x02, 0xe7, 0x4b, 0x5a, 0x1f, 0xb3, 0xd9, 0x0c, 0x5d, 0xd7, 0xe1, 0xdd, 0xcf, 0x6f, 0xf1, 0x70, 0x77, 0x8b, 0x30, 0x74, 0x54, 0x01, 0x7a, 0x79, 0x79, 0x89, 0xe1, 0x70, 0xa8, 0x36, 0x74, 0x4d, 0x7b, 0x74, 0x47, 0xec, 0xdb, 0x1b, 0x47, 0x51, 0x84, 0xcb, 0xcb, 0x4b, 0xbc, 0x7f, 0x7f, 0xad, 0x0e, 0x08, 0x0e, 0xc6, 0x61, 0xc2, 0xa3, 0x10, 0x02, 0x8b, 0xf9, 0x85, 0xfa, 0x9e, 0x3c, 0xcf, 0x31, 0x18, 0x0c, 0xb0, 0x58, 0x2c, 0x24, 0x1a, 0x72, 0x84, 0x66, 0x98, 0x6a, 0x9d, 0xf0, 0xfa, 0xeb, 0xe7, 0x32, 0xac, 0x56, 0x2b, 0xd9, 0x5d, 0x92, 0x6c, 0xc7, 0x30, 0x2c, 0xf5, 0x19, 0xd3, 0x24, 0x07, 0x1a, 0x22, 0xe5, 0x0d, 0x06, 0x03, 0x3c, 0x7f, 0xfe, 0x1c, 0x55, 0x55, 0x29, 0x04, 0xa3, 0xeb, 0x3a, 0xbc, 0x7c, 0xf9, 0x5c, 0x1a, 0xde, 0xc8, 0x44, 0x35, 0x51, 0x29, 0xb2, 0x56, 0x14, 0x0d, 0x50, 0xcb, 0xc2, 0x16, 0xba, 0x86, 0xc3, 0xf1, 0x88, 0x4a, 0x34, 0x18, 0x78, 0xae, 0x5a, 0xcb, 0x5d, 0x27, 0xc7, 0x6e, 0xd0, 0x60, 0x4a, 0x13, 0x88, 0x3c, 0xcf, 0x51, 0x16, 0x05, 0x4c, 0x4d, 0x07, 0x6a, 0xca, 0x34, 0xd7, 0x65, 0x8e, 0xbd, 0xd6, 0xd4, 0x68, 0x3a, 0x19, 0x88, 0x24, 0x11, 0xca, 0xbe, 0xe2, 0x83, 0xd6, 0xc9, 0xe3, 0x08, 0xae, 0x2e, 0xc8, 0xa5, 0x2f, 0x08, 0x02, 0xa0, 0xed, 0x60, 0x1b, 0x26, 0x3c, 0xd7, 0xc5, 0xf9, 0xf9, 0x39, 0x42, 0x3f, 0x80, 0xd6, 0xd0, 0x7d, 0x63, 0x6f, 0x02, 0xf6, 0xc0, 0xe7, 0xf5, 0xcd, 0x85, 0x3b, 0xdf, 0xdf, 0x24, 0x49, 0x90, 0x24, 0x09, 0x2c, 0xcb, 0xa2, 0x62, 0xda, 0x31, 0x9e, 0xa4, 0x5c, 0x72, 0xc3, 0xc4, 0x66, 0x45, 0x6d, 0x5e, 0x3e, 0x12, 0x2b, 0x25, 0x92, 0x32, 0x9f, 0x51, 0xb1, 0xb4, 0x5e, 0xaf, 0x51, 0x77, 0x14, 0x6b, 0x2a, 0x44, 0x4b, 0x71, 0x9c, 0xa4, 0x96, 0x46, 0x27, 0x3a, 0xb4, 0x4d, 0x8b, 0x7f, 0xf8, 0x87, 0xff, 0x0a, 0x3a, 0x34, 0xa4, 0xc7, 0x83, 0xd4, 0xa7, 0x43, 0x8e, 0x9d, 0x66, 0xf8, 0xcd, 0x6f, 0x02, 0xc0, 0xd6, 0xa1, 0x9b, 0xf4, 0xbe, 0x0c, 0x06, 0x03, 0x74, 0xa2, 0xc5, 0x9f, 0xbe, 0xfb, 0x88, 0xf9, 0xc8, 0xa5, 0xb1, 0x02, 0xe8, 0xbd, 0xb6, 0x6d, 0x0a, 0xde, 0xe1, 0x26, 0xe3, 0xc3, 0x87, 0x0f, 0xd8, 0x6e, 0x5b, 0x7c, 0xf3, 0x0d, 0xc9, 0x68, 0x3f, 0x7d, 0x7a, 0x40, 0xdb, 0x02, 0xe3, 0x71, 0x20, 0xaf, 0x93, 0x9a, 0x0a, 0x11, 0x75, 0xd0, 0x85, 0x09, 0x4b, 0xa7, 0x10, 0xa0, 0xae, 0x6d, 0x51, 0xb5, 0x15, 0xda, 0x86, 0x52, 0xc8, 0xbe, 0x7e, 0xf3, 0x06, 0xe8, 0x48, 0x02, 0x58, 0x95, 0x25, 0xaa, 0xbc, 0x84, 0xa8, 0x49, 0xf6, 0x7a, 0xd2, 0x4f, 0xe8, 0x74, 0x0b, 0xa3, 0x91, 0x8d, 0x20, 0xa2, 0x06, 0xe6, 0xee, 0xe1, 0x80, 0xeb, 0xeb, 0x07, 0x38, 0x0e, 0xe0, 0x38, 0x00, 0xda, 0xc7, 0xa4, 0xce, 0x22, 0xcd, 0x90, 0xa6, 0x35, 0x44, 0xdd, 0xc0, 0xb4, 0x49, 0x1d, 0x20, 0x5a, 0x2a, 0x1e, 0x3a, 0xd1, 0x41, 0x6b, 0x3b, 0xd8, 0x96, 0x8d, 0xd0, 0x8b, 0xd0, 0xb6, 0x40, 0x9e, 0x50, 0x81, 0x42, 0x81, 0x1c, 0x4c, 0x46, 0xe4, 0x95, 0xa1, 0x43, 0xd3, 0x5a, 0x54, 0x65, 0xf5, 0x68, 0xf3, 0xdb, 0xb3, 0xae, 0xe5, 0xb5, 0x32, 0x9b, 0xcd, 0x30, 0x1a, 0x35, 0x98, 0x4f, 0x67, 0x98, 0x0e, 0x47, 0x48, 0x4f, 0x14, 0xaa, 0xd2, 0xe9, 0x8f, 0x99, 0x27, 0x03, 0x3f, 0x50, 0x32, 0xd4, 0x4e, 0x50, 0x1e, 0x85, 0x2f, 0xcd, 0x7b, 0xe6, 0x73, 0x32, 0x7e, 0xf2, 0x24, 0xc1, 0xb6, 0x95, 0xfc, 0xa4, 0xba, 0xa0, 0xac, 0xf6, 0x5c, 0x12, 0x6c, 0x29, 0x08, 0x2b, 0x22, 0x04, 0xec, 0xf3, 0xb9, 0xf7, 0xe7, 0xa6, 0x2e, 0xbf, 0xc4, 0xf0, 0x56, 0x92, 0x26, 0xd3, 0x79, 0xe2, 0xdd, 0xde, 0x37, 0x95, 0x61, 0x1b, 0xd9, 0x7e, 0x57, 0xff, 0xb9, 0x5f, 0xbc, 0xa6, 0x75, 0x5f, 0xcc, 0x4d, 0x7e, 0x89, 0x6d, 0xfe, 0x4b, 0x45, 0x03, 0x00, 0x98, 0x16, 0x09, 0x16, 0xe9, 0xe7, 0x28, 0xee, 0xa7, 0xbc, 0xe1, 0x78, 0xcc, 0x93, 0x95, 0xda, 0xd8, 0xcf, 0xe5, 0x6b, 0x4d, 0xdb, 0x7d, 0x81, 0x00, 0xb0, 0xf7, 0xb2, 0xae, 0xeb, 0x28, 0xf3, 0x5a, 0xb1, 0xd3, 0x6d, 0xcb, 0x80, 0x61, 0xea, 0xd0, 0x3b, 0xfe, 0x39, 0x02, 0xe8, 0x0e, 0x30, 0x74, 0x1a, 0x78, 0xa4, 0x49, 0x8c, 0x24, 0x3e, 0x20, 0xcb, 0x8f, 0xe8, 0xda, 0x1c, 0x9a, 0xd6, 0x42, 0xd7, 0x2a, 0xcc, 0xe6, 0x13, 0x2c, 0xe6, 0x23, 0x34, 0x22, 0x47, 0x9e, 0x1e, 0x91, 0x26, 0x25, 0x84, 0x68, 0x50, 0x55, 0x35, 0xb2, 0xbc, 0x96, 0x5d, 0xb5, 0x26, 0x43, 0x29, 0x52, 0x64, 0x59, 0xf1, 0xb8, 0x09, 0xd7, 0x78, 0x62, 0x43, 0xcb, 0x1a, 0x69, 0x66, 0x26, 0xf7, 0x6d, 0x3c, 0x67, 0xb3, 0x19, 0x74, 0x5d, 0xc7, 0xfd, 0xfd, 0xbd, 0xda, 0x60, 0xd7, 0xeb, 0x07, 0x19, 0x84, 0x52, 0xa3, 0xeb, 0x80, 0x20, 0x30, 0x30, 0x9b, 0x05, 0x4a, 0xf7, 0xed, 0x06, 0x13, 0xb5, 0x49, 0x50, 0x17, 0x67, 0x62, 0xbf, 0x3f, 0xe2, 0x70, 0x38, 0x20, 0x49, 0x12, 0x2c, 0x16, 0x0b, 0xe4, 0x79, 0x89, 0x3c, 0x3f, 0xa8, 0xc3, 0xb8, 0x5f, 0x78, 0x59, 0x1a, 0xd4, 0x58, 0x85, 0x4d, 0x54, 0x38, 0x81, 0x8c, 0x9d, 0xd1, 0x1e, 0xbd, 0xcb, 0x35, 0x35, 0x5f, 0x4d, 0xd3, 0x14, 0x9b, 0xcd, 0x06, 0x86, 0x2c, 0x16, 0xb8, 0x82, 0xcf, 0xf3, 0x5c, 0x3d, 0x8b, 0x2c, 0xcb, 0x30, 0x1c, 0x0e, 0xd5, 0xb8, 0x86, 0xe5, 0x19, 0x94, 0x62, 0x36, 0xc3, 0xd7, 0x5f, 0x7f, 0x8d, 0x3c, 0x4e, 0x70, 0x77, 0x77, 0x87, 0xe3, 0x71, 0x8f, 0x3c, 0x4f, 0xa5, 0x4d, 0xad, 0x8b, 0xc9, 0x64, 0x42, 0x0e, 0x63, 0xd5, 0xe3, 0x5c, 0x8d, 0xec, 0x40, 0xa9, 0xc2, 0xed, 0xba, 0x8e, 0x66, 0x6c, 0xb6, 0xaf, 0xd6, 0x7b, 0x59, 0x16, 0x30, 0x0c, 0x5b, 0x6a, 0xae, 0x0d, 0xdc, 0xdd, 0xdd, 0xe0, 0xec, 0xec, 0x4c, 0x9a, 0x02, 0x69, 0x64, 0x90, 0x51, 0xd3, 0xb3, 0x13, 0x82, 0x66, 0xd3, 0xb3, 0xe5, 0x42, 0xc1, 0x99, 0x9c, 0xc5, 0xbe, 0xdd, 0x6e, 0xd5, 0x3d, 0x62, 0xe6, 0x3a, 0x05, 0xa5, 0x90, 0x8e, 0x9d, 0x3c, 0xdf, 0xef, 0x91, 0x65, 0x19, 0xa6, 0xd3, 0xb1, 0x32, 0x41, 0x39, 0x3b, 0x3b, 0x53, 0x6c, 0xfe, 0x34, 0x4d, 0xd5, 0xbd, 0xf6, 0x7d, 0x5f, 0xa1, 0x14, 0x7c, 0x90, 0x1c, 0x8f, 0x47, 0xd4, 0x75, 0x89, 0x37, 0x6f, 0x5e, 0x2a, 0x16, 0xfc, 0x6a, 0xb5, 0x52, 0x26, 0x33, 0xcc, 0x78, 0x7d, 0xf5, 0xea, 0x39, 0xf6, 0xfb, 0xbd, 0xe2, 0x40, 0x6c, 0x36, 0x1b, 0xdc, 0xdf, 0x6f, 0x10, 0x04, 0x0e, 0x5e, 0xbc, 0x78, 0x81, 0xbf, 0xfe, 0xeb, 0xff, 0x5a, 0xfe, 0xbf, 0x7b, 0x05, 0xc1, 0x6b, 0x9a, 0x86, 0x67, 0xcf, 0x9e, 0xe1, 0xd5, 0xab, 0x57, 0xe8, 0x5a, 0x0d, 0xf3, 0xf9, 0x54, 0x45, 0xdf, 0x6e, 0x36, 0xb9, 0xf4, 0x9c, 0x1f, 0xd2, 0x7d, 0xb1, 0xe9, 0xfd, 0x9f, 0x4e, 0xa7, 0x38, 0x3b, 0x3b, 0x43, 0x59, 0x96, 0xf8, 0xe9, 0xa7, 0x9f, 0xb0, 0x5a, 0xaf, 0x14, 0x84, 0xce, 0x73, 0x7c, 0x7e, 0x67, 0x19, 0xed, 0xd1, 0xf4, 0x0e, 0x51, 0x14, 0x61, 0x36, 0x9b, 0xa9, 0x80, 0x1a, 0xb6, 0xf5, 0x1d, 0x8f, 0xc7, 0xe8, 0xba, 0x0e, 0xff, 0xf4, 0x4f, 0xbf, 0x43, 0x14, 0x59, 0xb8, 0xbc, 0x24, 0x97, 0xbc, 0xae, 0x67, 0x75, 0xbb, 0x58, 0xcc, 0xf1, 0xf3, 0x87, 0x0f, 0x54, 0x60, 0x6b, 0xc6, 0x67, 0x8d, 0x02, 0x87, 0x45, 0xb1, 0x15, 0x30, 0xb9, 0xc5, 0x41, 0xb4, 0x28, 0x8b, 0x02, 0x9a, 0x24, 0xac, 0xcd, 0x46, 0x53, 0x75, 0xa0, 0xeb, 0x42, 0x47, 0x95, 0x34, 0x10, 0x8d, 0x20, 0x83, 0x10, 0x19, 0x52, 0xa2, 0xcb, 0x81, 0x1b, 0x51, 0x04, 0x34, 0xc9, 0x3e, 0xa7, 0xdc, 0x6b, 0xc7, 0x71, 0xa0, 0x4b, 0xf2, 0x96, 0xa9, 0x93, 0xa9, 0x8f, 0x6d, 0x59, 0x38, 0xec, 0xf6, 0xb0, 0x0c, 0x13, 0x81, 0xed, 0x2a, 0x0e, 0x06, 0xfb, 0x8d, 0xef, 0x76, 0x94, 0x94, 0xf7, 0xfc, 0xf9, 0x73, 0xa4, 0xa2, 0x7a, 0xb2, 0x1f, 0xf6, 0x51, 0x50, 0xdf, 0xf7, 0xb1, 0x8b, 0xb7, 0xaa, 0x80, 0xb6, 0x6d, 0xfb, 0x8b, 0xd4, 0x2d, 0x4d, 0x92, 0x84, 0x3f, 0x47, 0x61, 0x4c, 0x93, 0x3c, 0x17, 0x5a, 0xe9, 0x44, 0xd7, 0xf5, 0x88, 0x66, 0x5a, 0xf7, 0x28, 0x4d, 0xfb, 0xa7, 0x7f, 0xfa, 0x2d, 0x2e, 0xce, 0x47, 0x30, 0x5a, 0xa0, 0x29, 0x4a, 0xf8, 0xae, 0x87, 0xe7, 0xcf, 0x9f, 0x63, 0x30, 0x8c, 0xb0, 0x3b, 0x1e, 0xe0, 0xb9, 0x81, 0x0a, 0x68, 0x12, 0x42, 0x50, 0x06, 0xbb, 0x26, 0x4d, 0x7b, 0x0c, 0x03, 0x69, 0x56, 0xa2, 0xae, 0x69, 0x2f, 0x23, 0x7b, 0x55, 0xa1, 0x24, 0x85, 0x7f, 0xf5, 0x57, 0x57, 0xf8, 0xf4, 0xe9, 0x13, 0x3c, 0xcf, 0xc6, 0x78, 0x4c, 0x9f, 0xe3, 0xea, 0xea, 0xea, 0x11, 0x6e, 0xcf, 0x32, 0x92, 0xf2, 0x76, 0xa4, 0xe1, 0xd7, 0x5b, 0x0d, 0x5a, 0x67, 0xa0, 0x33, 0x6c, 0x0a, 0xa4, 0xd2, 0x34, 0x54, 0x59, 0x45, 0x2c, 0x7a, 0xc9, 0xb3, 0x89, 0x02, 0xe2, 0x22, 0xd4, 0x65, 0x05, 0x5d, 0x37, 0x00, 0x8d, 0x08, 0xab, 0x83, 0x11, 0x91, 0xef, 0x2c, 0xc7, 0x94, 0xe6, 0x3d, 0x64, 0xb5, 0x6b, 0x18, 0x06, 0x9a, 0xaa, 0x96, 0x5f, 0xaf, 0xc3, 0x66, 0x67, 0xd2, 0x46, 0xd0, 0x73, 0xd5, 0x65, 0x7e, 0x3b, 0x74, 0x18, 0x86, 0x5c, 0x9b, 0x5a, 0x0b, 0xdb, 0x34, 0xa1, 0x07, 0x1e, 0xba, 0xa6, 0x86, 0x10, 0x35, 0x49, 0x31, 0x5b, 0xf2, 0xc2, 0xd7, 0x3a, 0x72, 0xf7, 0x84, 0x4e, 0xe9, 0x7d, 0xfc, 0x6c, 0xfa, 0x7b, 0xa3, 0xe2, 0x5d, 0xe9, 0x8f, 0xdc, 0x04, 0x4d, 0x66, 0x40, 0xb4, 0x01, 0xf9, 0x91, 0x88, 0xaa, 0x86, 0x70, 0x81, 0xc5, 0x74, 0x46, 0x05, 0x5d, 0x9a, 0x29, 0x94, 0x4c, 0x37, 0x4d, 0xb8, 0xb6, 0x4d, 0xf1, 0xbf, 0xba, 0x0e, 0x21, 0xbd, 0x27, 0x00, 0xa8, 0x88, 0xe7, 0xb2, 0x2c, 0x61, 0x84, 0x91, 0x0a, 0xfe, 0xaa, 0x2a, 0x4a, 0xb4, 0xd4, 0xfe, 0xfa, 0xdf, 0xfd, 0xaf, 0xdd, 0x2f, 0x75, 0xd7, 0xfd, 0x94, 0x32, 0x9e, 0x91, 0xf6, 0x0d, 0x56, 0x4c, 0xd3, 0x84, 0x6d, 0x3a, 0x8a, 0x8c, 0xc6, 0x5d, 0x58, 0x3f, 0x08, 0x85, 0x0f, 0xf8, 0xbe, 0x59, 0x41, 0xdf, 0xeb, 0xbd, 0x6d, 0x9b, 0x2f, 0xe2, 0xf7, 0xfa, 0x7f, 0x18, 0x86, 0xfe, 0x25, 0xe3, 0x18, 0x4d, 0xd3, 0x60, 0x39, 0x8d, 0x4a, 0x3a, 0x6b, 0x05, 0x94, 0x93, 0x12, 0xbb, 0x39, 0xf1, 0x4d, 0xe8, 0x13, 0x3f, 0xfa, 0x48, 0x41, 0x59, 0x74, 0x4f, 0xf2, 0x71, 0xfb, 0x85, 0x84, 0xa6, 0x75, 0x30, 0x0d, 0x0f, 0xa6, 0x0e, 0xa5, 0x65, 0xd6, 0xa5, 0x7d, 0x6b, 0xd7, 0x36, 0x32, 0xfe, 0xf0, 0x9a, 0x66, 0xee, 0x35, 0x59, 0xb4, 0xa6, 0x59, 0x8c, 0xaa, 0x4e, 0xa1, 0x6b, 0x02, 0xa6, 0xa9, 0x61, 0x32, 0x09, 0xe1, 0x79, 0x16, 0x3a, 0x34, 0x48, 0x4e, 0x1b, 0xe4, 0x45, 0x0a, 0x5d, 0xa7, 0xee, 0xa7, 0x2a, 0x2a, 0x38, 0x6e, 0xf4, 0x24, 0x52, 0xb6, 0xcf, 0x34, 0xef, 0xba, 0x0e, 0x9f, 0x6e, 0xb6, 0xf0, 0x7d, 0x4b, 0xcd, 0xa5, 0x19, 0xce, 0xe2, 0xea, 0x7e, 0xbf, 0xdf, 0xa9, 0x67, 0x31, 0x1e, 0x53, 0x56, 0xf7, 0xdb, 0xb7, 0x7b, 0xf8, 0x3e, 0x30, 0x9f, 0x47, 0x80, 0xd6, 0x28, 0x4b, 0x52, 0x2e, 0x00, 0x18, 0xba, 0x33, 0x4d, 0x13, 0x8e, 0xef, 0xe0, 0xee, 0xee, 0x0e, 0x69, 0x9a, 0x62, 0x3e, 0x9f, 0x63, 0xb1, 0x58, 0xa0, 0xeb, 0x3a, 0x19, 0x68, 0x50, 0x2a, 0x8d, 0x76, 0x7f, 0x64, 0xc2, 0x9b, 0x0e, 0x00, 0x44, 0xbe, 0xfb, 0x24, 0xc4, 0x87, 0xe7, 0xeb, 0x7d, 0x73, 0x98, 0xc5, 0x62, 0x81, 0xab, 0xab, 0x2b, 0x22, 0x31, 0x25, 0x09, 0x7e, 0xf8, 0xe1, 0x07, 0xec, 0x76, 0x94, 0xd2, 0x96, 0x48, 0xb3, 0x93, 0xc1, 0x60, 0xa0, 0xd0, 0x9f, 0xc1, 0x80, 0x48, 0x7d, 0x37, 0x37, 0x37, 0x48, 0xd3, 0x13, 0xae, 0xae, 0xae, 0xd4, 0x1c, 0x4c, 0xd9, 0x1f, 0x3a, 0x0e, 0x19, 0x33, 0x1c, 0x4f, 0x4a, 0xa6, 0xc5, 0xda, 0x77, 0xdf, 0xf7, 0x61, 0x98, 0x9a, 0xbc, 0x86, 0x42, 0x11, 0x23, 0xf3, 0x9c, 0xb2, 0xb1, 0x1b, 0x51, 0xa9, 0x62, 0xc1, 0xf7, 0x86, 0x4a, 0x9b, 0x4a, 0x12, 0x21, 0xea, 0x82, 0x1b, 0x41, 0xd0, 0xe0, 0x64, 0x3c, 0x7b, 0x52, 0xe8, 0xf2, 0xf3, 0x61, 0x0b, 0x54, 0xf6, 0x6a, 0x60, 0x22, 0x1b, 0x13, 0xe7, 0x98, 0x79, 0x1e, 0x86, 0xa1, 0x62, 0xa4, 0x72, 0x37, 0x46, 0xc4, 0x2f, 0x47, 0x1e, 0x50, 0xb5, 0xb4, 0xd0, 0xcc, 0xd5, 0x75, 0xf1, 0xe6, 0xc0, 0x1e, 0xe3, 0x9c, 0x71, 0x6e, 0x18, 0x86, 0x32, 0x95, 0x79, 0xb4, 0x33, 0xae, 0x15, 0xca, 0xc3, 0xc5, 0x03, 0xbf, 0xa3, 0x51, 0x14, 0x29, 0x7e, 0x06, 0xfb, 0xf2, 0x73, 0x31, 0xc0, 0xe4, 0x47, 0xd7, 0xf5, 0x95, 0x22, 0x81, 0xfd, 0x25, 0xb8, 0x70, 0x34, 0x4d, 0x13, 0xa7, 0x63, 0xa6, 0x20, 0x75, 0x9e, 0xdb, 0x32, 0x5f, 0x80, 0xe6, 0xa1, 0x81, 0xba, 0x26, 0xcf, 0x23, 0x3e, 0xc8, 0xed, 0xed, 0x2d, 0xf6, 0xfb, 0xfd, 0x13, 0x36, 0xb1, 0x65, 0x11, 0x6c, 0x38, 0x8c, 0xc6, 0xb8, 0xbc, 0xbc, 0xc4, 0x72, 0xb9, 0x84, 0x65, 0x39, 0xf8, 0xed, 0x6f, 0x7f, 0xab, 0x46, 0x74, 0xc7, 0xe3, 0x11, 0xf7, 0xf7, 0xf7, 0x0a, 0x76, 0xe6, 0xc6, 0xc0, 0x71, 0x1c, 0x0c, 0x87, 0xb4, 0x3e, 0x0e, 0xc7, 0x9d, 0x5a, 0x3b, 0x17, 0x17, 0xe7, 0xd8, 0x9d, 0x4e, 0xa8, 0x5b, 0x01, 0xd3, 0xb6, 0x70, 0x8a, 0x63, 0x94, 0x4d, 0x0d, 0xc3, 0xb1, 0x51, 0x54, 0x54, 0x40, 0x18, 0x26, 0x94, 0x41, 0x87, 0x63, 0x98, 0xca, 0xb1, 0xce, 0xf7, 0x3c, 0x8c, 0xa3, 0x21, 0xd2, 0x43, 0x82, 0x4e, 0x27, 0x04, 0xa5, 0x41, 0x83, 0xd5, 0x76, 0x83, 0xa2, 0x2e, 0x60, 0xbb, 0x0e, 0x41, 0xee, 0xe8, 0x7a, 0x7b, 0xa1, 0x2c, 0x44, 0xf0, 0xe8, 0x3d, 0x31, 0xf0, 0x29, 0x5f, 0xfe, 0xb8, 0x3f, 0xe0, 0xe5, 0xb3, 0xe7, 0x38, 0x1d, 0x8f, 0x70, 0x6d, 0x07, 0x87, 0xc3, 0x01, 0x93, 0xe1, 0x08, 0xe7, 0xcb, 0x33, 0x35, 0xe3, 0x3e, 0x9d, 0x4e, 0x58, 0xad, 0x56, 0x4a, 0xb6, 0x78, 0x7e, 0x7e, 0x8e, 0x43, 0x91, 0xaa, 0x8e, 0x9b, 0xd7, 0x69, 0x5f, 0xfe, 0xb8, 0x8b, 0xb7, 0x5f, 0x8c, 0x24, 0xfb, 0xfb, 0xa8, 0x6f, 0x58, 0xaa, 0x58, 0x6b, 0xe4, 0xfe, 0x35, 0x1c, 0xd3, 0xc8, 0x69, 0xbf, 0xdf, 0xa3, 0xac, 0xa5, 0x7d, 0x35, 0x3a, 0x35, 0x8e, 0xd3, 0x4c, 0xe3, 0x91, 0xc5, 0x6f, 0x84, 0xa8, 0xcb, 0x0a, 0x65, 0x92, 0x63, 0x3c, 0x88, 0x30, 0x9b, 0x10, 0x19, 0x32, 0xc9, 0x52, 0xfc, 0xf6, 0x77, 0xbf, 0xc3, 0x3e, 0x3b, 0x60, 0x3a, 0x9f, 0x51, 0x20, 0xca, 0xfd, 0x3d, 0x06, 0x41, 0x88, 0x49, 0x34, 0xc4, 0x28, 0x18, 0x60, 0xbb, 0xd9, 0xe0, 0xfd, 0x87, 0x1b, 0xb5, 0x6e, 0xd9, 0xc8, 0x85, 0xf3, 0x2f, 0x82, 0x20, 0x78, 0x42, 0xcc, 0xdc, 0x6c, 0x36, 0xd8, 0xef, 0x33, 0x4c, 0xa7, 0x21, 0x2e, 0x2f, 0x2f, 0xe9, 0xe0, 0x73, 0x75, 0x55, 0x64, 0x0b, 0x79, 0xfd, 0x24, 0xa1, 0x24, 0xbe, 0x4c, 0xbc, 0x4b, 0xd4, 0x3b, 0x61, 0x9a, 0x26, 0x7c, 0xc7, 0xc5, 0x68, 0x14, 0xa9, 0x26, 0xe1, 0xa7, 0x1f, 0x3f, 0x62, 0xbb, 0x5d, 0xc3, 0x97, 0xda, 0xf3, 0x54, 0xe6, 0xc2, 0x27, 0x49, 0x8c, 0xa2, 0xae, 0x60, 0xd9, 0x06, 0x5c, 0x49, 0xcc, 0xf6, 0x03, 0x17, 0x79, 0x51, 0xc0, 0x71, 0x2d, 0x24, 0x32, 0x05, 0xd4, 0x30, 0xe9, 0x3d, 0x33, 0x65, 0x38, 0x56, 0xd7, 0xe8, 0xe8, 0x1a, 0x4a, 0xf1, 0x0c, 0xfd, 0x00, 0x8d, 0xcc, 0xfa, 0x28, 0x9b, 0x12, 0x55, 0x5b, 0x43, 0xa0, 0x86, 0xd0, 0x5b, 0x65, 0x0f, 0x68, 0x08, 0x5b, 0x8d, 0x24, 0xfb, 0x5e, 0x28, 0x0a, 0x55, 0x96, 0xba, 0xf2, 0x41, 0x10, 0x62, 0x14, 0x0c, 0x68, 0xfe, 0x5f, 0x56, 0x84, 0x1c, 0x00, 0x68, 0xf4, 0xe6, 0x89, 0xf2, 0x23, 0xcb, 0x32, 0xac, 0xb7, 0x1b, 0xa4, 0x69, 0x06, 0xc3, 0xd0, 0x55, 0xe3, 0x66, 0x9a, 0x26, 0x74, 0xd0, 0x38, 0x8e, 0xcd, 0xa3, 0x8a, 0xa2, 0x80, 0x23, 0xc9, 0xad, 0x6c, 0xfe, 0x53, 0x14, 0x05, 0xcc, 0x5f, 0xea, 0xbe, 0x3f, 0xaf, 0x1a, 0xfb, 0x30, 0x7b, 0xdf, 0xa3, 0x9d, 0x13, 0x9c, 0x7e, 0x49, 0x07, 0xae, 0x69, 0x9a, 0xd2, 0xed, 0xf6, 0x03, 0x37, 0xfa, 0x28, 0x00, 0xcf, 0xbb, 0x3f, 0xb7, 0x5a, 0x55, 0x61, 0x04, 0xc6, 0xd3, 0xca, 0xfb, 0xf3, 0x19, 0x38, 0x1f, 0xc2, 0x0c, 0x83, 0x91, 0xb9, 0x3d, 0xf9, 0xe0, 0x6a, 0x5a, 0x07, 0xa3, 0x93, 0xda, 0xf0, 0x96, 0x8d, 0x64, 0x3a, 0x59, 0x6d, 0x77, 0xf2, 0x40, 0x6f, 0x54, 0x15, 0x4f, 0xdf, 0xa7, 0x2b, 0xb2, 0x9e, 0xae, 0xeb, 0xb0, 0x75, 0x26, 0xc3, 0x09, 0x68, 0x52, 0x13, 0x6a, 0x6a, 0x1d, 0x74, 0x39, 0xba, 0x6f, 0x3b, 0x72, 0xf2, 0xaa, 0xaa, 0x1a, 0xa2, 0x15, 0x70, 0xdd, 0x0e, 0xb6, 0xa3, 0xa3, 0xaa, 0x4a, 0x54, 0x75, 0x81, 0xf8, 0x58, 0x22, 0x39, 0xb5, 0x68, 0x04, 0x05, 0x12, 0xb0, 0xd1, 0x49, 0xd3, 0x34, 0x28, 0xf2, 0x0a, 0xcd, 0x36, 0x43, 0x5d, 0x37, 0x28, 0x4b, 0x40, 0x08, 0xc0, 0xb6, 0x81, 0x20, 0xb0, 0x15, 0x99, 0xcd, 0xf3, 0x1e, 0x83, 0x12, 0xfa, 0xd0, 0x37, 0xcb, 0xf7, 0x18, 0x15, 0xe1, 0x38, 0x52, 0x21, 0x04, 0xa2, 0x08, 0x08, 0xa5, 0x53, 0x54, 0x55, 0x97, 0x20, 0x19, 0xa8, 0xa6, 0x48, 0x6a, 0xdc, 0xbd, 0x3b, 0x8e, 0x03, 0xd3, 0xb6, 0x31, 0x1c, 0x8e, 0xe1, 0xfb, 0xa1, 0xca, 0x0b, 0x66, 0x62, 0x17, 0x9b, 0x0b, 0x11, 0xbc, 0x19, 0x29, 0xf8, 0x9c, 0x8b, 0x24, 0x3e, 0xc0, 0xfa, 0x33, 0x33, 0x0e, 0x30, 0xa1, 0x0d, 0xf7, 0x42, 0x11, 0x82, 0x56, 0xab, 0x15, 0xbe, 0xff, 0xfe, 0x7b, 0x15, 0x33, 0xca, 0xc5, 0xc2, 0x8b, 0x57, 0xaf, 0xd4, 0x81, 0xc1, 0x1e, 0xe1, 0x45, 0x6f, 0x2e, 0xf4, 0xe6, 0xcd, 0x1b, 0x4c, 0xa7, 0x53, 0xe5, 0xb5, 0xce, 0x39, 0xcf, 0x7d, 0x99, 0x24, 0x8f, 0x2b, 0x98, 0x60, 0x66, 0xd9, 0x86, 0x4a, 0xe7, 0x62, 0x67, 0x3b, 0x46, 0x83, 0xa2, 0x28, 0xc2, 0x78, 0x32, 0x54, 0x52, 0xa9, 0xed, 0x66, 0x8f, 0xdd, 0x6e, 0x87, 0xe5, 0x72, 0x89, 0xd9, 0x6c, 0x8a, 0xba, 0x2e, 0x91, 0xa4, 0x27, 0x98, 0xa6, 0x8e, 0xd1, 0x28, 0x42, 0x5e, 0xa4, 0xaa, 0x83, 0x16, 0x6d, 0x83, 0xa2, 0x24, 0x97, 0x38, 0xcf, 0x77, 0x00, 0xad, 0x95, 0x06, 0x1a, 0x27, 0x35, 0x27, 0xaf, 0xeb, 0x16, 0x42, 0x10, 0xb4, 0x38, 0x1a, 0x8d, 0x70, 0x7f, 0x7f, 0x8f, 0xb6, 0x6d, 0x15, 0xa1, 0x91, 0xd7, 0x71, 0x9e, 0xe7, 0xd8, 0x6e, 0xb7, 0x78, 0xfe, 0xe2, 0x42, 0x21, 0x59, 0x4c, 0x96, 0xa2, 0x83, 0xd6, 0x95, 0xe4, 0xb8, 0x83, 0xe2, 0x85, 0xd0, 0xff, 0x93, 0x33, 0x34, 0x39, 0xd2, 0x88, 0xe3, 0xa3, 0x62, 0xf9, 0xf2, 0xb3, 0xe1, 0x03, 0x84, 0xff, 0x9b, 0x63, 0x68, 0xd9, 0xc7, 0x7e, 0x38, 0x1c, 0x2a, 0x2d, 0xbf, 0x61, 0xa4, 0x6a, 0x6d, 0xb1, 0xf6, 0x9c, 0x37, 0x50, 0x9a, 0x31, 0xb6, 0x58, 0x6f, 0x1e, 0x14, 0x52, 0xa0, 0x69, 0x1a, 0x4e, 0x31, 0x7d, 0x26, 0xc3, 0xd4, 0x90, 0x65, 0x54, 0x60, 0xdc, 0xdd, 0x7d, 0x52, 0x9e, 0xf3, 0x84, 0x12, 0xd0, 0xef, 0x58, 0xad, 0x36, 0x2a, 0xdb, 0x3d, 0x8a, 0x86, 0x0a, 0x0a, 0xde, 0x6c, 0x36, 0x92, 0x99, 0x1d, 0xab, 0xb9, 0x2b, 0x47, 0x25, 0x33, 0x1a, 0xc0, 0x07, 0x10, 0x75, 0x87, 0xb5, 0x94, 0x40, 0xd1, 0x61, 0x57, 0x55, 0x15, 0xee, 0xef, 0xef, 0x21, 0x34, 0x0d, 0x59, 0x49, 0x07, 0x30, 0x17, 0x00, 0xbc, 0xbf, 0xd8, 0xb6, 0x0d, 0xd1, 0xd2, 0xa8, 0xa6, 0x11, 0x0d, 0xda, 0xaa, 0x86, 0xde, 0x91, 0x2b, 0xd8, 0x60, 0x30, 0x40, 0x14, 0x45, 0x58, 0xdf, 0xae, 0xe0, 0xf8, 0x44, 0x6a, 0x14, 0x9a, 0x80, 0x79, 0x3c, 0xc0, 0x68, 0xe5, 0xde, 0x56, 0x96, 0x30, 0x2c, 0xf3, 0x0b, 0x19, 0x2e, 0xba, 0xf6, 0x31, 0x1d, 0xb2, 0x29, 0xe0, 0x58, 0x04, 0x37, 0x2f, 0x97, 0x4b, 0x42, 0x04, 0xdb, 0x0e, 0xa1, 0xe7, 0x63, 0x38, 0x1c, 0x52, 0x00, 0x94, 0xfc, 0xe7, 0xc3, 0x87, 0x0f, 0xc8, 0xf3, 0x1c, 0x8b, 0xc5, 0x42, 0xe5, 0x14, 0x5c, 0xbe, 0x7a, 0xae, 0x02, 0x7c, 0x98, 0xb8, 0xca, 0x87, 0x76, 0x10, 0x04, 0x88, 0x8b, 0x93, 0x7a, 0xd7, 0xfb, 0x5c, 0x24, 0x1e, 0x6f, 0xe9, 0x01, 0x5d, 0x47, 0x18, 0x86, 0xc8, 0xa4, 0x21, 0xd2, 0xcd, 0xcd, 0x8d, 0x52, 0x4d, 0xb4, 0x2d, 0xc7, 0x7d, 0x42, 0x11, 0x9b, 0x79, 0x4f, 0xb7, 0x2c, 0x0b, 0xa6, 0x66, 0x22, 0x8d, 0x13, 0x92, 0xd4, 0x1a, 0x06, 0x7e, 0xf7, 0xbb, 0xdf, 0xe1, 0xdd, 0xbb, 0x13, 0x06, 0x11, 0x60, 0xb9, 0x26, 0xe2, 0xb2, 0x85, 0x69, 0x1f, 0x31, 0x99, 0x4c, 0xd4, 0x38, 0x8f, 0x79, 0x51, 0x75, 0x5d, 0xe3, 0xab, 0xaf, 0xbe, 0xc2, 0x7a, 0xbd, 0x96, 0xe3, 0x21, 0x42, 0x99, 0xd8, 0xb7, 0x82, 0x15, 0x1d, 0xba, 0xae, 0xe3, 0xe5, 0xcb, 0x97, 0x78, 0xfe, 0xfc, 0x39, 0x6e, 0x6f, 0x6f, 0xd1, 0x34, 0x8d, 0x3a, 0x90, 0x77, 0xa7, 0x23, 0xb4, 0x46, 0x83, 0xd1, 0x1a, 0xd0, 0x00, 0x98, 0xba, 0x49, 0x52, 0x3f, 0xc3, 0x86, 0x01, 0x03, 0xc3, 0x70, 0xa0, 0xc6, 0x3b, 0x1f, 0xdf, 0xbf, 0xa3, 0x6e, 0x3c, 0xfa, 0x16, 0xa2, 0xad, 0xb1, 0xba, 0xbd, 0x27, 0xc5, 0x8e, 0xe4, 0x6f, 0x35, 0x4d, 0x85, 0xb2, 0xae, 0x60, 0x59, 0x92, 0x78, 0x6d, 0x5b, 0x30, 0x2d, 0x89, 0xa6, 0xc8, 0xe6, 0xd0, 0x96, 0x48, 0x21, 0x93, 0x18, 0x3b, 0x4d, 0x83, 0xd6, 0x36, 0xd0, 0x60, 0x40, 0xd7, 0x4c, 0xd4, 0x5d, 0x85, 0xaa, 0xac, 0xc8, 0x96, 0xd7, 0xb1, 0x61, 0x1a, 0x06, 0x3a, 0x43, 0x83, 0xd1, 0xe9, 0x30, 0x69, 0xb0, 0x8a, 0xae, 0x93, 0xb2, 0xe9, 0xae, 0x43, 0x53, 0x95, 0xaa, 0x00, 0x67, 0xd4, 0x84, 0x15, 0x61, 0xba, 0xae, 0xc3, 0x36, 0x1d, 0xf8, 0xac, 0x08, 0xd2, 0x35, 0x94, 0x69, 0x8e, 0xf8, 0x70, 0x04, 0xda, 0x0e, 0xbe, 0xe7, 0xe1, 0xec, 0x8a, 0x0c, 0x80, 0x6a, 0xe9, 0x5c, 0xb9, 0x38, 0x5b, 0xc2, 0xf5, 0x3d, 0x7c, 0xfa, 0xf4, 0x09, 0x4d, 0x47, 0xfb, 0x46, 0xd7, 0x08, 0x85, 0x30, 0xa2, 0x25, 0xb5, 0x87, 0x29, 0xc7, 0xaa, 0x4d, 0x4d, 0xc5, 0xb0, 0xa1, 0x5b, 0x30, 0x0d, 0x1b, 0xa6, 0xd1, 0xc2, 0xec, 0x67, 0x9d, 0x7f, 0x6e, 0x62, 0xd0, 0x3f, 0x80, 0x3f, 0x37, 0x37, 0xe8, 0xba, 0x0e, 0xed, 0x67, 0x84, 0x00, 0xee, 0xfc, 0xb8, 0x93, 0xeb, 0xcf, 0xe0, 0xfb, 0xf2, 0xaf, 0x47, 0xe6, 0x3b, 0x7e, 0xb1, 0x03, 0xff, 0x25, 0x33, 0x85, 0xcf, 0x0f, 0x75, 0x4d, 0xd3, 0x50, 0x49, 0x66, 0x5f, 0xd7, 0x69, 0x50, 0x59, 0x7e, 0xd0, 0xd0, 0xb5, 0xd4, 0xa9, 0x9b, 0x3d, 0xe3, 0x18, 0x21, 0xda, 0x2f, 0x3a, 0xf1, 0xa6, 0xe9, 0xe4, 0xcb, 0x41, 0x19, 0xc1, 0x9a, 0xce, 0x4e, 0x6f, 0xf2, 0x70, 0x17, 0x27, 0x75, 0xe0, 0xeb, 0x20, 0x17, 0xb2, 0xba, 0xae, 0x20, 0x84, 0xec, 0xa4, 0xdb, 0x5b, 0x54, 0x55, 0x83, 0xb2, 0xa8, 0x51, 0xb7, 0x74, 0xf8, 0xb7, 0x6d, 0x83, 0xaa, 0xce, 0x51, 0x55, 0x05, 0x72, 0xdd, 0x86, 0xe3, 0xd8, 0xb0, 0x1d, 0x5d, 0x76, 0x7e, 0x40, 0x5e, 0xd6, 0x12, 0x1e, 0x01, 0xb2, 0xa4, 0x81, 0x65, 0x01, 0xae, 0xab, 0xa9, 0x17, 0xd5, 0x75, 0x3d, 0xd5, 0xf1, 0x2d, 0x16, 0xe7, 0x18, 0x8f, 0xc7, 0xb0, 0x6d, 0x1b, 0x77, 0x77, 0x77, 0xf8, 0xe9, 0xa7, 0x9f, 0x70, 0x3c, 0x76, 0x18, 0x8d, 0x74, 0x49, 0xfe, 0x20, 0x3f, 0xeb, 0xd3, 0xa9, 0x42, 0xd7, 0x01, 0x9e, 0xa7, 0x61, 0x38, 0x1c, 0x28, 0x76, 0xf8, 0xb7, 0xbf, 0xfe, 0x4a, 0xb1, 0x4c, 0x59, 0x2b, 0xcd, 0xc4, 0x9c, 0xb2, 0x2c, 0xb1, 0xda, 0x6e, 0x30, 0x1c, 0x0e, 0x55, 0xd5, 0xc7, 0x36, 0xa7, 0xfc, 0xfc, 0xd8, 0x20, 0x85, 0x35, 0xcd, 0x55, 0x55, 0xa9, 0xf9, 0x6c, 0xd7, 0x91, 0x63, 0xd5, 0xf1, 0x48, 0x10, 0xfd, 0x70, 0x38, 0x54, 0xae, 0x62, 0x6c, 0x1f, 0x7b, 0x79, 0x79, 0x09, 0x5d, 0xd7, 0x71, 0x7d, 0x7d, 0x8d, 0x9b, 0x9b, 0x1b, 0xf5, 0xd2, 0xf3, 0x86, 0xc6, 0x5d, 0x37, 0x57, 0x9c, 0xcc, 0xf6, 0xbd, 0xb8, 0xb8, 0xc0, 0xdf, 0xfc, 0xcd, 0xdf, 0x60, 0xbd, 0xb9, 0xc5, 0xfb, 0x0f, 0x6f, 0xf1, 0xf0, 0x40, 0x87, 0x4a, 0x9a, 0xc5, 0x4a, 0x57, 0x5a, 0xd5, 0x63, 0x58, 0x1a, 0x11, 0xe1, 0x86, 0xc3, 0x21, 0x91, 0x8e, 0xb4, 0x56, 0xca, 0x83, 0x1e, 0x25, 0x1e, 0x8f, 0x1a, 0xda, 0x42, 0x5d, 0x3b, 0x2b, 0x05, 0xe6, 0xf3, 0x2b, 0xfc, 0xf1, 0x4f, 0x3f, 0xe2, 0xfe, 0xfe, 0x88, 0x3f, 0xff, 0xf3, 0x17, 0x38, 0x3b, 0x5f, 0xc0, 0xb2, 0x03, 0x14, 0x45, 0x86, 0xe3, 0x71, 0x0f, 0xdb, 0x76, 0x15, 0xda, 0xc0, 0x9d, 0xeb, 0xd9, 0xd9, 0x99, 0x2c, 0x82, 0x5c, 0x58, 0x0b, 0xf7, 0xc9, 0x7b, 0x12, 0xc7, 0xb1, 0xd2, 0x82, 0xef, 0xb6, 0x5b, 0x6c, 0xb7, 0x7b, 0x08, 0x01, 0xc4, 0xa7, 0x13, 0xaa, 0xaa, 0x41, 0xdb, 0x02, 0x61, 0xe8, 0xc2, 0xf7, 0x7d, 0x0c, 0xa3, 0x08, 0x69, 0x42, 0xd7, 0xef, 0xd8, 0x26, 0xc6, 0x23, 0x2a, 0x9a, 0x34, 0xb4, 0x10, 0x4d, 0x05, 0x43, 0x07, 0x42, 0x9f, 0x66, 0x8e, 0x59, 0x92, 0xaa, 0x14, 0x30, 0xcb, 0x30, 0xa5, 0xbb, 0x58, 0x87, 0x4b, 0xa9, 0x12, 0x60, 0x52, 0x1b, 0x77, 0xd0, 0x45, 0x51, 0xe0, 0xee, 0xee, 0x0e, 0x8b, 0xe5, 0x5c, 0xa9, 0x03, 0xd8, 0x3c, 0x86, 0xdd, 0xfa, 0xd2, 0x34, 0xc5, 0xbb, 0xb7, 0xef, 0x71, 0x79, 0x79, 0xa9, 0xe6, 0xf2, 0x9c, 0xea, 0xc6, 0xfa, 0xff, 0xe7, 0xcf, 0x5f, 0x2b, 0x33, 0x1b, 0xbe, 0x0f, 0x2c, 0x6f, 0x74, 0x1c, 0x87, 0x18, 0xc8, 0x9a, 0x86, 0xd1, 0x70, 0x88, 0xb3, 0xe5, 0x52, 0x6d, 0xfa, 0x65, 0x59, 0x42, 0x34, 0x0d, 0x6c, 0xcb, 0x40, 0xe0, 0x0f, 0x30, 0x1c, 0x44, 0x40, 0xd7, 0xe1, 0x78, 0x38, 0x4a, 0x92, 0x18, 0xcd, 0xeb, 0x0d, 0x29, 0x19, 0xeb, 0xba, 0x4e, 0xc9, 0xf2, 0x46, 0x23, 0xf2, 0xe2, 0x27, 0x1e, 0x48, 0x8d, 0x34, 0x4d, 0x71, 0x77, 0x77, 0x87, 0xb7, 0x6f, 0xdf, 0xa3, 0x11, 0x80, 0x69, 0xd2, 0x3d, 0x0c, 0xc3, 0x00, 0x96, 0xe7, 0x51, 0x81, 0xa9, 0x6b, 0x68, 0x84, 0x80, 0x6e, 0x99, 0xd0, 0x4d, 0x43, 0x15, 0x7b, 0xbc, 0xb6, 0xd0, 0x76, 0x14, 0xa5, 0x2a, 0x23, 0x5e, 0xd3, 0x34, 0x45, 0x99, 0xe5, 0xea, 0xe0, 0x1f, 0x0c, 0x06, 0x28, 0x7b, 0x7c, 0x1c, 0xcb, 0xb2, 0x90, 0x15, 0x85, 0x9a, 0xbb, 0x0b, 0x39, 0x47, 0xd5, 0x25, 0xcc, 0x0a, 0x00, 0x8d, 0x65, 0x01, 0x0d, 0x6d, 0xe8, 0xa3, 0x41, 0x84, 0xe3, 0xe1, 0x80, 0xb6, 0x11, 0xc8, 0x13, 0x62, 0xd6, 0x17, 0xd2, 0x4a, 0xf7, 0xf6, 0xf6, 0x16, 0x9a, 0xa6, 0xc9, 0x60, 0x21, 0xf2, 0x66, 0xe0, 0xc2, 0xe5, 0xfe, 0xfe, 0x5e, 0xbd, 0x77, 0x0c, 0x6d, 0xf7, 0x93, 0x21, 0xd9, 0xe4, 0x89, 0x83, 0x85, 0xfa, 0x7b, 0x9f, 0xa6, 0x69, 0x4a, 0x4e, 0xe8, 0xfb, 0x3e, 0x6a, 0xc9, 0x0b, 0xa9, 0xe3, 0x13, 0xf2, 0x9c, 0x24, 0x82, 0xbe, 0x2f, 0x1b, 0xaa, 0xde, 0xf7, 0xe8, 0xd0, 0xd0, 0x35, 0x02, 0x35, 0x00, 0x51, 0x9d, 0x90, 0x24, 0x27, 0x64, 0xc7, 0x14, 0x7b, 0x8b, 0xf8, 0x3b, 0x7f, 0xff, 0xf7, 0xcf, 0xd0, 0x76, 0x1d, 0xfe, 0x9f, 0xff, 0xf7, 0x4f, 0x78, 0xf6, 0xab, 0x31, 0xa5, 0xd2, 0xc9, 0x20, 0xa1, 0x54, 0x8e, 0xb8, 0xcc, 0x4e, 0xc3, 0xf1, 0x70, 0xc0, 0xfd, 0xbf, 0xbe, 0x93, 0xde, 0x0e, 0x36, 0x9a, 0xba, 0x45, 0x7c, 0x4a, 0x61, 0x5b, 0x2e, 0x86, 0xd1, 0x18, 0x1a, 0x1e, 0x8b, 0xab, 0xb2, 0xa8, 0xb1, 0x29, 0x77, 0x68, 0xea, 0x16, 0x45, 0x51, 0xe1, 0xf6, 0xd3, 0xbd, 0xe2, 0x56, 0x74, 0x1d, 0xb1, 0xc1, 0xe9, 0xfc, 0x30, 0xc8, 0xf1, 0x51, 0x74, 0xc8, 0xea, 0x0c, 0xcb, 0xc9, 0x52, 0x45, 0x50, 0xbb, 0xae, 0x8b, 0x68, 0x1c, 0xc1, 0xf5, 0x7d, 0x54, 0xa2, 0xc2, 0x21, 0x3e, 0x20, 0xcb, 0xa4, 0xc9, 0xd4, 0x76, 0x05, 0x00, 0x58, 0x9c, 0x2d, 0x70, 0x76, 0x76, 0x86, 0xd3, 0xe9, 0x84, 0x7d, 0xbc, 0x7f, 0x62, 0xc6, 0x42, 0x81, 0x42, 0xb9, 0x72, 0x12, 0x54, 0x21, 0x4c, 0x86, 0x21, 0x61, 0x7f, 0x1a, 0xc3, 0xb8, 0x91, 0x0b, 0x43, 0x33, 0x1e, 0xe5, 0xd2, 0xad, 0x80, 0x90, 0x9f, 0x41, 0x07, 0x20, 0x7a, 0x91, 0xa6, 0xb6, 0x64, 0xf8, 0x6b, 0x86, 0x01, 0x74, 0x1d, 0x4c, 0xcd, 0x06, 0x8c, 0x47, 0x04, 0xb3, 0x48, 0x0b, 0xa0, 0xa5, 0x6c, 0x77, 0xc7, 0x22, 0x22, 0xa6, 0x69, 0x9a, 0x30, 0x75, 0x03, 0xa1, 0x2c, 0xb4, 0xdb, 0xb6, 0x45, 0xc5, 0xcf, 0xdf, 0xa3, 0xc3, 0xdf, 0x1f, 0x84, 0x8f, 0x01, 0x32, 0xbd, 0xe6, 0x15, 0x6d, 0x07, 0x43, 0x8e, 0x10, 0x83, 0x20, 0x40, 0x5d, 0xd1, 0x08, 0x2a, 0xcb, 0x32, 0xe5, 0x16, 0xa7, 0xfd, 0xe6, 0xbf, 0xfd, 0x5f, 0xba, 0xbe, 0x9c, 0xac, 0x0f, 0xa9, 0xfe, 0x92, 0xdf, 0x6f, 0x3f, 0x5c, 0x45, 0x87, 0xf1, 0x05, 0xcc, 0xd0, 0x37, 0x76, 0x61, 0x88, 0xb4, 0x6f, 0xe1, 0xfa, 0x94, 0xb9, 0xde, 0x7c, 0xd1, 0x99, 0xf7, 0xa1, 0x71, 0xae, 0xd2, 0x3f, 0x4f, 0xe1, 0x52, 0x7f, 0xdf, 0xc6, 0xf2, 0xbf, 0x4d, 0x68, 0x30, 0x65, 0x68, 0x82, 0xa1, 0x32, 0x67, 0xeb, 0xbc, 0xf9, 0x82, 0xb9, 0xdf, 0x2f, 0x0e, 0x0c, 0xdb, 0x91, 0xd7, 0x4c, 0x5d, 0x50, 0xdb, 0x09, 0xe5, 0xbf, 0xae, 0xeb, 0x3a, 0x3c, 0x3b, 0x96, 0x41, 0x09, 0x3a, 0x05, 0x59, 0xe4, 0xb4, 0xd1, 0x9f, 0x0e, 0x07, 0x64, 0x59, 0x82, 0x67, 0x57, 0x31, 0x65, 0xdb, 0xb6, 0x40, 0x59, 0xca, 0x4d, 0x1f, 0x2d, 0x2c, 0x5b, 0x83, 0xe3, 0x58, 0x70, 0xf5, 0x10, 0x65, 0x55, 0x40, 0x74, 0x95, 0x4a, 0x68, 0xca, 0xab, 0x1a, 0x45, 0x4e, 0x26, 0x30, 0x03, 0xd9, 0x19, 0x33, 0x14, 0xca, 0x0c, 0xdf, 0xf9, 0x7c, 0x2e, 0x35, 0xc7, 0x04, 0x59, 0xa6, 0x69, 0xaa, 0x88, 0x6d, 0x55, 0x25, 0xe0, 0xba, 0xe4, 0xa4, 0x96, 0xe7, 0xa9, 0x0a, 0x1d, 0xd1, 0x75, 0x5d, 0x6a, 0xa1, 0x1b, 0xbc, 0x7e, 0xfd, 0x02, 0x57, 0x57, 0x57, 0xf8, 0x78, 0xf3, 0x56, 0x75, 0x69, 0xba, 0xae, 0x2b, 0x4d, 0x33, 0x27, 0x26, 0x69, 0xa6, 0xa1, 0xe6, 0xde, 0x49, 0x92, 0xa8, 0xcd, 0x9a, 0x37, 0xf7, 0xed, 0x36, 0x86, 0x61, 0x00, 0x9e, 0x67, 0x4b, 0x73, 0x91, 0x91, 0xb2, 0xa7, 0x6c, 0x9a, 0x06, 0xf1, 0x7e, 0xad, 0x46, 0x23, 0xbc, 0x38, 0x99, 0xed, 0xda, 0x97, 0xce, 0x71, 0x85, 0xc9, 0x9d, 0x27, 0x43, 0xd5, 0xd3, 0xf9, 0x5c, 0x21, 0x01, 0x3c, 0x37, 0x7f, 0xff, 0xfe, 0x3d, 0xca, 0xb2, 0xc4, 0xd5, 0xd5, 0x15, 0x86, 0x23, 0x1f, 0xb7, 0xb7, 0xb7, 0xf0, 0x7d, 0x9f, 0x64, 0x68, 0x3d, 0x8b, 0xc3, 0xb2, 0x2c, 0x31, 0x1f, 0x4d, 0x94, 0x04, 0x2a, 0x49, 0x12, 0x88, 0xb6, 0xc6, 0x68, 0x34, 0x42, 0xd3, 0x10, 0x64, 0x3f, 0x1c, 0x0e, 0x15, 0x02, 0xb0, 0xdf, 0x4b, 0xfb, 0x53, 0xbd, 0x53, 0xba, 0xee, 0x1f, 0xbf, 0xbf, 0xc6, 0xbb, 0x77, 0x47, 0x78, 0x3e, 0xf0, 0x67, 0x7f, 0x76, 0x85, 0xc5, 0x72, 0x06, 0x5d, 0x27, 0xa3, 0x9c, 0x53, 0x7c, 0xc4, 0x76, 0x73, 0x50, 0x87, 0x24, 0xff, 0x9c, 0xc5, 0x62, 0x01, 0xdb, 0xb6, 0xb1, 0x5a, 0xad, 0xd0, 0x36, 0x64, 0x21, 0xc9, 0xe8, 0x04, 0x5b, 0x63, 0x72, 0x51, 0xcb, 0xdd, 0xf4, 0x78, 0x3c, 0x56, 0xf0, 0x37, 0x23, 0x2c, 0x51, 0x14, 0xc1, 0x71, 0x35, 0x25, 0x2b, 0x1b, 0x0e, 0x87, 0x8a, 0x71, 0xce, 0x24, 0x23, 0xcb, 0x74, 0x14, 0x6a, 0xc1, 0xf7, 0x74, 0x3c, 0x1e, 0x2b, 0xd3, 0x94, 0x87, 0xf5, 0xbd, 0x42, 0x5d, 0x18, 0x96, 0xe7, 0x99, 0xea, 0x70, 0x38, 0x84, 0x68, 0x9b, 0x27, 0xe3, 0x0f, 0x96, 0x22, 0xb2, 0x8d, 0xae, 0x65, 0xda, 0x0a, 0x49, 0x63, 0xbe, 0xc2, 0xed, 0xed, 0xad, 0x8c, 0xb7, 0x6d, 0x90, 0xe7, 0x40, 0x10, 0x00, 0xd3, 0xe9, 0x44, 0xcd, 0x81, 0x5d, 0xd7, 0x55, 0x36, 0xbd, 0x0f, 0x77, 0x2b, 0xe4, 0x79, 0x8e, 0xc9, 0x64, 0x82, 0x57, 0xaf, 0x5e, 0x01, 0x00, 0x6e, 0x6e, 0x6e, 0x14, 0xa1, 0x87, 0x0f, 0xc7, 0x22, 0xaf, 0xf0, 0xee, 0xdd, 0x3b, 0x7c, 0xfc, 0xb8, 0x91, 0x31, 0xa8, 0x06, 0xca, 0x52, 0x40, 0xb4, 0xc0, 0xc5, 0xc5, 0x42, 0x3d, 0x43, 0xe6, 0x49, 0x54, 0x55, 0x05, 0xdf, 0xf7, 0x71, 0x7d, 0x7d, 0x23, 0x8b, 0x25, 0xe9, 0x31, 0xd1, 0x94, 0xd2, 0x19, 0xd0, 0x83, 0xeb, 0x3a, 0x70, 0xc3, 0x10, 0x79, 0x55, 0x02, 0xba, 0x86, 0x34, 0xcb, 0xd0, 0xe9, 0x1a, 0x2c, 0xcf, 0x45, 0x9a, 0x13, 0xa4, 0xaa, 0xe9, 0xc4, 0x0d, 0x31, 0x34, 0x1d, 0x7a, 0x4b, 0xa6, 0x37, 0x3a, 0x34, 0x64, 0x69, 0x8a, 0xf8, 0x70, 0xc4, 0x28, 0x18, 0x62, 0x32, 0x9f, 0xe1, 0xc5, 0xcb, 0x97, 0x48, 0xcb, 0x14, 0xdf, 0xfd, 0xf8, 0x03, 0x5a, 0xad, 0x45, 0x34, 0x1a, 0xe2, 0x24, 0x55, 0x07, 0x8f, 0x8d, 0x8e, 0x21, 0x79, 0x22, 0x63, 0x25, 0xd3, 0xdb, 0xad, 0x28, 0x4d, 0xd0, 0x36, 0x4c, 0xdc, 0xdf, 0xdd, 0xe1, 0x9b, 0x37, 0x5f, 0x43, 0xef, 0x80, 0x20, 0x08, 0x70, 0x7b, 0xf3, 0x09, 0xb6, 0x6d, 0xe3, 0xc7, 0x1f, 0x3f, 0x62, 0x30, 0xb0, 0xa4, 0x7c, 0xb4, 0x42, 0x14, 0x79, 0x4a, 0xea, 0x68, 0x86, 0x9e, 0x52, 0x70, 0xf0, 0x3b, 0xc1, 0x4a, 0x8e, 0xe7, 0xcf, 0x9f, 0xe3, 0x0f, 0xdf, 0xff, 0xcb, 0x17, 0x64, 0xe0, 0x7e, 0x08, 0xd6, 0x54, 0xca, 0xc6, 0x4e, 0xa7, 0x13, 0x0e, 0xd2, 0x80, 0xa8, 0xd3, 0x80, 0xd5, 0x6a, 0x85, 0xe3, 0x31, 0xc6, 0xf9, 0xd9, 0x25, 0xed, 0xdf, 0xd2, 0xa9, 0x52, 0x05, 0xa2, 0xc8, 0x3d, 0xdd, 0xec, 0x0c, 0xec, 0xb7, 0x3b, 0xa0, 0xee, 0x30, 0x0c, 0x42, 0xe4, 0x69, 0x0e, 0xdf, 0x0f, 0xf1, 0xf2, 0xd5, 0x57, 0xa8, 0x44, 0x83, 0x1f, 0xaf, 0xbf, 0xc3, 0x7c, 0xb9, 0xc0, 0x66, 0xb3, 0xc1, 0x68, 0x34, 0xc2, 0x6e, 0xb3, 0xc5, 0x74, 0x38, 0xc2, 0x72, 0x32, 0xc3, 0xbb, 0xb7, 0x6f, 0x71, 0x3c, 0xe6, 0x6a, 0x2d, 0x30, 0x9a, 0xb7, 0x58, 0x2c, 0xa4, 0x72, 0xe4, 0x16, 0x75, 0x5d, 0xe3, 0xf9, 0xf3, 0xe7, 0x4a, 0xb5, 0xe1, 0xfb, 0xbe, 0xda, 0xeb, 0x84, 0x10, 0xf0, 0x9c, 0x10, 0x4d, 0x2b, 0x28, 0x88, 0x44, 0xeb, 0x60, 0xd8, 0x14, 0xd4, 0xa4, 0x4b, 0xf5, 0x91, 0xa9, 0x19, 0x68, 0xe5, 0x2c, 0xdc, 0xf3, 0x1c, 0x58, 0xae, 0x05, 0xd1, 0xd6, 0x12, 0x5e, 0xce, 0xe0, 0x1a, 0x63, 0xb8, 0x9e, 0x0d, 0xdb, 0x75, 0xb1, 0x5a, 0xad, 0x90, 0xe6, 0x84, 0x38, 0xd5, 0x4d, 0x89, 0x56, 0x03, 0x9a, 0xb2, 0x42, 0x38, 0x8c, 0x14, 0x82, 0x77, 0x4a, 0x62, 0x84, 0xa1, 0x8f, 0xa2, 0x2a, 0x15, 0xa2, 0x6b, 0xc8, 0xc3, 0x58, 0xeb, 0x74, 0x84, 0x9e, 0x8f, 0xd0, 0x27, 0x82, 0x68, 0x16, 0x27, 0xa8, 0x38, 0x0d, 0xaf, 0xeb, 0x24, 0xd4, 0xae, 0xa1, 0x35, 0xa4, 0x13, 0xa0, 0x9c, 0x5d, 0x7f, 0x61, 0x27, 0xde, 0x77, 0x2a, 0xb4, 0x68, 0x0c, 0x15, 0x1f, 0x8f, 0xd0, 0x04, 0x05, 0xa8, 0x88, 0xa6, 0x81, 0xa8, 0x6a, 0xb8, 0xb6, 0x83, 0x97, 0xaf, 0xae, 0xd0, 0x82, 0xba, 0xee, 0xb2, 0xae, 0xe1, 0x05, 0x3e, 0xb2, 0x92, 0xf6, 0x11, 0xdb, 0xa5, 0x77, 0x18, 0x2d, 0x15, 0xa0, 0xe9, 0x89, 0x5c, 0x42, 0xc7, 0xb2, 0x69, 0x6a, 0x1b, 0x81, 0x46, 0x10, 0xda, 0xc7, 0xc8, 0x49, 0x59, 0x96, 0xd0, 0xfe, 0xe6, 0xbf, 0xfb, 0xdf, 0xba, 0x7e, 0xe2, 0x15, 0x57, 0x2e, 0xfd, 0x70, 0x16, 0x5e, 0x44, 0x6c, 0x42, 0xc2, 0x9d, 0x76, 0x2b, 0x6a, 0xf5, 0x02, 0x3e, 0xea, 0x35, 0xcd, 0x2f, 0xec, 0xea, 0xb8, 0x30, 0xe8, 0x7f, 0xaf, 0xa6, 0x69, 0x4a, 0xd3, 0xc9, 0x30, 0x13, 0x17, 0x13, 0x0c, 0x31, 0xf1, 0xcf, 0xea, 0xcf, 0x19, 0xfa, 0x0b, 0xdc, 0xb0, 0x81, 0xae, 0xd5, 0x28, 0xc6, 0x55, 0x80, 0x32, 0x95, 0x3b, 0x4d, 0x42, 0xef, 0xba, 0xd2, 0xc5, 0x6b, 0x68, 0x55, 0xc6, 0xb8, 0x6e, 0x3c, 0x7a, 0xc5, 0x6b, 0x86, 0x0f, 0xa0, 0x45, 0x53, 0x67, 0x48, 0xb3, 0x3d, 0xda, 0x36, 0x83, 0xe7, 0x9b, 0x08, 0x42, 0x0b, 0x8e, 0x65, 0xc2, 0x31, 0x32, 0x34, 0x4d, 0x8d, 0xe3, 0x69, 0x8b, 0xed, 0xee, 0x01, 0x69, 0x76, 0x80, 0x61, 0x00, 0xb6, 0x43, 0x5d, 0x7c, 0x60, 0x36, 0xd8, 0x6e, 0xf7, 0xc8, 0xb2, 0x9c, 0x3a, 0x6b, 0xc7, 0x27, 0x46, 0xaf, 0x65, 0xc1, 0xf7, 0x03, 0xe8, 0x0e, 0xc9, 0x7f, 0x44, 0x43, 0x08, 0x41, 0x9a, 0xe6, 0x88, 0x4f, 0x54, 0xc1, 0x0f, 0x87, 0x43, 0x54, 0x75, 0x86, 0xd5, 0x6a, 0x0d, 0x4d, 0x03, 0x9e, 0x3d, 0x23, 0xc2, 0xc8, 0x29, 0x3e, 0xa8, 0x0d, 0xcd, 0x90, 0xec, 0x5b, 0xbe, 0x27, 0x3c, 0xaf, 0x65, 0x4d, 0x72, 0x1c, 0xc7, 0xf0, 0x3c, 0x4f, 0x41, 0xd1, 0x3c, 0xcf, 0xe6, 0x03, 0x3a, 0x49, 0x0e, 0xca, 0x96, 0x94, 0x9f, 0x6d, 0x7f, 0xde, 0x6b, 0x7b, 0xbe, 0x92, 0xd3, 0x7c, 0xfa, 0xf4, 0x09, 0x49, 0x92, 0xa8, 0x98, 0xc4, 0x7e, 0xb2, 0x12, 0x43, 0x8e, 0x7d, 0x58, 0x53, 0x08, 0x01, 0xa3, 0xab, 0xd5, 0x41, 0xce, 0xe4, 0x33, 0xb2, 0x21, 0x2d, 0x21, 0x3f, 0x36, 0xc6, 0xe3, 0xb1, 0x92, 0xb3, 0xf5, 0xe1, 0xe1, 0xa2, 0x28, 0x70, 0x38, 0xed, 0x15, 0x94, 0xca, 0x73, 0x7b, 0x86, 0xd1, 0xd7, 0xeb, 0x2d, 0xce, 0x2f, 0xe6, 0x2a, 0xab, 0x9b, 0x09, 0x53, 0x7d, 0x6d, 0xb7, 0x63, 0x68, 0xca, 0x62, 0x95, 0xab, 0x54, 0x86, 0x16, 0xf3, 0x3c, 0xc7, 0x6c, 0x36, 0x51, 0x73, 0x61, 0xd6, 0xb9, 0x7b, 0x9e, 0xa7, 0xd2, 0xc9, 0xde, 0xbd, 0xfb, 0x20, 0x37, 0x52, 0x03, 0xcb, 0xb3, 0x39, 0x16, 0x8b, 0x99, 0x84, 0x9b, 0x0b, 0x99, 0x8e, 0x46, 0x8c, 0x6b, 0x26, 0x05, 0x9d, 0x4e, 0x27, 0x69, 0x6c, 0x42, 0x39, 0xde, 0xf7, 0x9f, 0x0e, 0x4f, 0x8c, 0x84, 0x58, 0xab, 0xcf, 0x23, 0x13, 0x1e, 0x03, 0x30, 0xac, 0xcd, 0xe8, 0x02, 0x2b, 0x0f, 0x3e, 0xde, 0xbc, 0x55, 0x87, 0x31, 0x9b, 0x76, 0xf0, 0xc1, 0xdd, 0x1f, 0x57, 0xb1, 0x5c, 0x2e, 0x8a, 0x22, 0x8c, 0x46, 0x23, 0x3c, 0x3c, 0x3c, 0x60, 0xb5, 0x5a, 0x21, 0x1a, 0x8e, 0x31, 0x1c, 0x0e, 0xb1, 0xdd, 0x6e, 0x61, 0xd9, 0xb4, 0xee, 0x58, 0xea, 0x65, 0x9a, 0x26, 0x56, 0xab, 0x95, 0x94, 0xfb, 0xd1, 0xba, 0x68, 0xbb, 0xc7, 0xc2, 0xba, 0xae, 0x4b, 0x84, 0x61, 0xa4, 0x0a, 0xae, 0x3e, 0x21, 0x55, 0x15, 0x4e, 0x9a, 0xa5, 0x90, 0x99, 0xc1, 0x60, 0x88, 0xc3, 0xe1, 0x80, 0xeb, 0xeb, 0x7b, 0x8c, 0x47, 0x04, 0xf5, 0xa6, 0x49, 0xf2, 0x45, 0xac, 0xee, 0x66, 0xb3, 0x41, 0x51, 0x14, 0x8a, 0x0b, 0x11, 0x45, 0x91, 0xd2, 0x5f, 0x73, 0x31, 0xc6, 0xeb, 0xf8, 0xec, 0xfc, 0x4a, 0xc1, 0xb7, 0x79, 0x9e, 0x93, 0x54, 0xd4, 0xb6, 0x95, 0x9f, 0xfe, 0x78, 0x78, 0x86, 0xed, 0x6e, 0x83, 0x20, 0xa0, 0xf1, 0xc2, 0x64, 0x32, 0x41, 0x10, 0x0c, 0xe0, 0x38, 0x1e, 0xca, 0xa2, 0xc2, 0x68, 0x3e, 0xc1, 0x7f, 0xfe, 0x97, 0x7f, 0x46, 0x0b, 0x81, 0xf1, 0x74, 0x04, 0x37, 0x70, 0xa1, 0x3b, 0x26, 0x4a, 0x39, 0x2e, 0x60, 0x36, 0xb8, 0x6d, 0x5a, 0xe8, 0xea, 0x86, 0x64, 0x43, 0x8e, 0x8b, 0x56, 0x08, 0x1c, 0xb6, 0x3b, 0xc4, 0x7b, 0x32, 0xa0, 0xb2, 0x1c, 0x13, 0x6e, 0x68, 0xc3, 0x72, 0x2c, 0x18, 0x96, 0x0e, 0xd3, 0x31, 0xe1, 0x38, 0x16, 0xd2, 0xa4, 0x56, 0xb2, 0x47, 0xad, 0x7d, 0x34, 0xc6, 0xd2, 0x64, 0xcc, 0x65, 0x5b, 0xe6, 0xf0, 0xe4, 0x58, 0x07, 0x00, 0x8a, 0x9a, 0x72, 0x0a, 0xd2, 0x9c, 0x24, 0x8c, 0xd3, 0xd1, 0x12, 0x5d, 0x23, 0xf0, 0x87, 0x3f, 0xbc, 0x45, 0xd3, 0x00, 0x5d, 0x0b, 0x2c, 0x97, 0x0e, 0xa6, 0x23, 0x7a, 0x6e, 0xb5, 0xd5, 0xc8, 0x66, 0x88, 0xf6, 0xa9, 0xba, 0x29, 0x95, 0xea, 0x63, 0x3c, 0x1e, 0x62, 0xb5, 0x23, 0x44, 0x83, 0x1c, 0x07, 0xc9, 0xb5, 0x2d, 0x4d, 0x63, 0xb5, 0x7e, 0xb5, 0x82, 0x9e, 0x6b, 0x96, 0x65, 0x78, 0xf6, 0xec, 0x19, 0x6e, 0x6f, 0x6f, 0x61, 0x18, 0x06, 0xae, 0xaf, 0xaf, 0xa9, 0x5b, 0x6f, 0x05, 0xf6, 0xfb, 0xa3, 0x4c, 0xda, 0x9b, 0xaa, 0x6c, 0x7b, 0x96, 0xa8, 0xae, 0x77, 0x7b, 0x3c, 0xbb, 0xbc, 0x82, 0xd1, 0x01, 0xf9, 0x29, 0x41, 0x24, 0xbb, 0xc6, 0x24, 0x4d, 0x91, 0x95, 0x05, 0x92, 0xaa, 0x40, 0xd5, 0xd4, 0x8f, 0xa3, 0xbe, 0x46, 0xe0, 0x62, 0xb1, 0xc4, 0xd9, 0x74, 0x8e, 0xb2, 0x28, 0xb0, 0xd9, 0x1e, 0x14, 0xfb, 0x9e, 0x3d, 0xf6, 0x99, 0x23, 0xc0, 0xa3, 0xaa, 0x8f, 0x1f, 0x3f, 0x22, 0x8e, 0x63, 0x55, 0x14, 0xf7, 0x47, 0x87, 0xb7, 0xd7, 0xb7, 0x4f, 0xf2, 0x0d, 0x58, 0xd9, 0xb2, 0x5c, 0x2e, 0x01, 0x00, 0x3f, 0x5f, 0x7f, 0xa7, 0x0a, 0xce, 0xc9, 0x64, 0xa2, 0x50, 0x8b, 0xe3, 0xf1, 0x48, 0x23, 0xc5, 0xe6, 0x91, 0xf3, 0xc4, 0x4d, 0x05, 0xf3, 0x36, 0x8a, 0xa2, 0x40, 0x56, 0xe7, 0x4a, 0x91, 0xd3, 0xf7, 0x3f, 0x51, 0x59, 0x20, 0x05, 0x79, 0x40, 0x70, 0xba, 0x60, 0xbf, 0xa8, 0x3c, 0x1c, 0x0e, 0xd8, 0xef, 0x6b, 0xac, 0xd6, 0x3b, 0x98, 0x26, 0x70, 0x7e, 0x31, 0x41, 0x10, 0xba, 0x10, 0x82, 0x72, 0x36, 0xc8, 0x81, 0x32, 0x44, 0xd8, 0x0b, 0x6d, 0x72, 0x7c, 0xf2, 0xf2, 0xc8, 0x4b, 0xc9, 0xad, 0x31, 0x08, 0x0d, 0xbb, 0xb9, 0xbe, 0x85, 0x65, 0x68, 0x78, 0xf5, 0xe2, 0x05, 0x36, 0xab, 0x35, 0x56, 0xab, 0x14, 0x2f, 0x9f, 0x4d, 0xe1, 0x7b, 0xe4, 0x6d, 0x60, 0x39, 0x36, 0xdc, 0xc0, 0x07, 0x34, 0x0d, 0x71, 0x46, 0x48, 0x42, 0xd3, 0x0a, 0xa5, 0x9e, 0xd0, 0x34, 0x0d, 0xae, 0x65, 0x23, 0xf0, 0x7d, 0xd8, 0x86, 0x89, 0xaa, 0x20, 0x8b, 0x6e, 0xd3, 0xb6, 0x9e, 0x20, 0x51, 0x5d, 0xd7, 0xc1, 0xf8, 0xea, 0x9b, 0xbf, 0xff, 0xbf, 0x78, 0xbe, 0xd6, 0x67, 0xb5, 0xf3, 0xe1, 0xdd, 0xf7, 0x42, 0xff, 0x9c, 0x81, 0xde, 0xd4, 0xd5, 0x17, 0x09, 0x66, 0xfd, 0x43, 0x5c, 0x1d, 0xa8, 0xff, 0x05, 0x8d, 0xbb, 0xe3, 0xb8, 0xea, 0xa0, 0xee, 0xeb, 0xcc, 0xfb, 0x04, 0x90, 0xcf, 0x65, 0x6c, 0x4f, 0x62, 0x4b, 0x75, 0x1d, 0x80, 0xfc, 0xcc, 0x9d, 0x8e, 0xae, 0x25, 0xdf, 0x97, 0xb6, 0x7d, 0x64, 0x82, 0xd2, 0x38, 0x80, 0x2c, 0x55, 0x4d, 0xd3, 0x90, 0xb9, 0xe4, 0x0d, 0xda, 0xa6, 0x42, 0x96, 0x67, 0xa8, 0xeb, 0x0c, 0x6d, 0x57, 0x22, 0x0c, 0x6d, 0xcc, 0xe6, 0x11, 0x26, 0x23, 0x1f, 0x5d, 0x57, 0xe3, 0x14, 0x6f, 0xf1, 0x70, 0xf7, 0x16, 0x71, 0xb2, 0x27, 0xaf, 0xf5, 0x2a, 0x45, 0x87, 0x0a, 0xba, 0x21, 0xd0, 0xa1, 0x46, 0xd3, 0x14, 0xb8, 0xbf, 0x59, 0xc3, 0x71, 0x4c, 0x2c, 0x97, 0x67, 0xd4, 0x19, 0xd6, 0x02, 0x45, 0x51, 0xaa, 0x59, 0xe5, 0x74, 0xbe, 0xc0, 0x30, 0x1a, 0xe1, 0x70, 0x38, 0xe2, 0x5f, 0xff, 0xf5, 0x3d, 0xd2, 0x34, 0xc5, 0x57, 0xaf, 0x5f, 0xe3, 0xd9, 0xb3, 0x67, 0x68, 0x9a, 0x16, 0xbb, 0xfd, 0x1a, 0x83, 0x41, 0x88, 0xf1, 0x78, 0xa4, 0xac, 0xfb, 0xda, 0x4e, 0x3c, 0xd9, 0x64, 0x19, 0xe6, 0xa6, 0x8e, 0x79, 0x8b, 0xed, 0x76, 0xab, 0xc2, 0x4e, 0x26, 0x93, 0x11, 0x85, 0xb6, 0xb4, 0x14, 0x16, 0x50, 0x14, 0x39, 0x5a, 0x69, 0x07, 0x59, 0xd7, 0x15, 0xe9, 0x70, 0x75, 0x40, 0x37, 0x34, 0xb4, 0x9d, 0x40, 0x55, 0x97, 0x00, 0x3a, 0x58, 0xb6, 0x09, 0xc3, 0xd4, 0x21, 0xea, 0x06, 0x93, 0xf1, 0x08, 0x83, 0x30, 0x40, 0x99, 0xe7, 0xd8, 0x6e, 0xd6, 0x48, 0xe3, 0x18, 0x68, 0x5b, 0x38, 0x96, 0x85, 0x34, 0x8e, 0x61, 0x1a, 0x3a, 0x3c, 0xd7, 0x41, 0xe0, 0x79, 0xb0, 0x4c, 0x03, 0x6d, 0xd3, 0xa0, 0x2a, 0x0b, 0x34, 0x55, 0xa5, 0x62, 0x61, 0x09, 0xde, 0xf3, 0x15, 0x13, 0xb7, 0x6d, 0x2b, 0x08, 0xd1, 0x61, 0x34, 0x1a, 0x2a, 0x3d, 0xfb, 0x64, 0x32, 0xa1, 0x82, 0xe5, 0x74, 0x52, 0x61, 0x21, 0x9e, 0xef, 0xaa, 0xae, 0x92, 0xbb, 0x48, 0x3e, 0xdc, 0x06, 0x83, 0x10, 0xb6, 0x63, 0x29, 0x0f, 0x72, 0x36, 0x9a, 0x89, 0xa2, 0x48, 0x71, 0x37, 0x42, 0xdf, 0x53, 0xeb, 0xac, 0xef, 0x24, 0xc5, 0xc5, 0x69, 0x55, 0x95, 0xf8, 0xf4, 0x89, 0xb4, 0xda, 0xf3, 0xf9, 0x1c, 0x5f, 0x7f, 0xfd, 0x35, 0xe6, 0xf3, 0xb9, 0xd2, 0x7d, 0x87, 0x61, 0x80, 0xe5, 0x72, 0x81, 0xd1, 0x68, 0x24, 0x95, 0x07, 0xa5, 0x0a, 0xce, 0x29, 0x8a, 0x02, 0xcb, 0xe5, 0x99, 0x62, 0x89, 0x33, 0x53, 0xbf, 0xef, 0xca, 0x96, 0x67, 0xb5, 0x4a, 0x3a, 0x63, 0x42, 0x1f, 0x1f, 0xbe, 0xe4, 0xe0, 0xd6, 0x3d, 0x61, 0xae, 0xb3, 0x6b, 0xdb, 0x6e, 0xb7, 0x23, 0xa7, 0x2d, 0xd7, 0x41, 0xd7, 0x01, 0xa6, 0x49, 0x05, 0xe0, 0x60, 0x10, 0xc1, 0xb6, 0x1d, 0xb4, 0x6d, 0x87, 0x3c, 0x2f, 0x10, 0xc7, 0x09, 0x2c, 0xcb, 0xc6, 0x7c, 0xbe, 0x80, 0xef, 0x07, 0x68, 0xdb, 0x8e, 0xf8, 0x1a, 0xa2, 0xc5, 0x78, 0x3c, 0x81, 0xeb, 0x05, 0x70, 0x1c, 0x17, 0x65, 0x59, 0x40, 0x34, 0x2d, 0x8a, 0x32, 0xc7, 0x6e, 0xb7, 0xc7, 0x6a, 0xb5, 0xc6, 0x0f, 0x3f, 0xfc, 0x0c, 0x43, 0x86, 0x7b, 0x0c, 0x06, 0x11, 0x7c, 0xdf, 0x43, 0x59, 0x94, 0xc8, 0x8b, 0x5c, 0xce, 0xba, 0xa7, 0x78, 0xf3, 0xe6, 0x8d, 0x2a, 0xa2, 0xce, 0xce, 0xce, 0x30, 0x9f, 0xcf, 0x51, 0xd7, 0xb5, 0x7a, 0x66, 0x9c, 0x26, 0x48, 0x70, 0x30, 0x41, 0xf7, 0x81, 0xef, 0xe3, 0xfc, 0xfc, 0x1c, 0x93, 0xc9, 0x44, 0xa1, 0x35, 0x3c, 0x2b, 0xe6, 0x67, 0xc9, 0xf7, 0x62, 0x32, 0x9e, 0xc1, 0x75, 0x3c, 0x14, 0x39, 0xd9, 0xd8, 0x9a, 0xa6, 0x05, 0xdf, 0x0b, 0xe0, 0x3a, 0x1e, 0x6c, 0xcb, 0xc1, 0x29, 0x8e, 0xf1, 0xc3, 0x0f, 0x3f, 0x60, 0x23, 0xad, 0x5c, 0x59, 0xa6, 0xc3, 0x08, 0xc5, 0x76, 0xbb, 0x87, 0xa6, 0x91, 0xfc, 0xb4, 0x83, 0xc0, 0x60, 0x10, 0x61, 0x30, 0x88, 0x50, 0x95, 0x0d, 0x8a, 0xa2, 0xc2, 0xfe, 0xb8, 0x87, 0x68, 0x5b, 0x4c, 0x67, 0x53, 0xf8, 0x81, 0x0f, 0xd1, 0x0a, 0x54, 0x0d, 0x35, 0x19, 0xb6, 0x6d, 0x3d, 0xaa, 0x6f, 0xc8, 0xc1, 0x8a, 0x66, 0xa9, 0x86, 0x81, 0x56, 0x08, 0xa4, 0x49, 0x82, 0x34, 0xee, 0x60, 0xdb, 0x06, 0xc6, 0x93, 0x31, 0x16, 0x67, 0x73, 0x8c, 0xc6, 0x23, 0x98, 0x96, 0x81, 0xba, 0x2c, 0x91, 0xa4, 0x09, 0x1c, 0xdb, 0x7f, 0x94, 0x6e, 0x1a, 0x34, 0xbf, 0x1f, 0x84, 0x21, 0x06, 0x21, 0xcd, 0xad, 0x03, 0x97, 0x4c, 0x75, 0x52, 0x79, 0xc8, 0x68, 0x86, 0xe4, 0x1a, 0x00, 0xc8, 0xf2, 0x1c, 0xa1, 0x1f, 0xc1, 0x73, 0x5d, 0x18, 0x46, 0x0b, 0x4d, 0xab, 0x30, 0x9d, 0x52, 0x51, 0xeb, 0x39, 0x64, 0x61, 0x5c, 0x89, 0x0a, 0x75, 0x55, 0xa3, 0x6b, 0x49, 0xc2, 0x6b, 0x1a, 0x26, 0x34, 0x00, 0x75, 0x55, 0x21, 0x4d, 0x52, 0x24, 0x49, 0x0a, 0x53, 0x37, 0x28, 0xa5, 0x51, 0x7a, 0xbe, 0xb7, 0xa2, 0x41, 0x53, 0xd7, 0xe8, 0xda, 0x16, 0xb6, 0x6e, 0x29, 0x8f, 0x7f, 0xe6, 0x45, 0xdc, 0xdd, 0xdd, 0x61, 0x55, 0x2b, 0xaf, 0xd5, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xb3, 0x21, 0xcf, 0x89, 0xf3, 0xcb, 0x33, 0x8c, 0x46, 0x43, 0x78, 0x9e, 0xab, 0x46, 0x68, 0x97, 0x97, 0x64, 0xb6, 0xb2, 0xdd, 0x6e, 0xf1, 0xf5, 0x37, 0xdf, 0x42, 0xd7, 0x34, 0x54, 0x45, 0x09, 0xcf, 0x76, 0xe0, 0xb9, 0x14, 0x97, 0x5b, 0xd5, 0x35, 0xc6, 0x93, 0x09, 0x0c, 0xdb, 0xc2, 0x51, 0xa2, 0x4a, 0x83, 0xc1, 0x00, 0xba, 0xa6, 0xe1, 0xb8, 0x3f, 0x60, 0xfd, 0xb0, 0xc2, 0x7a, 0xbd, 0x86, 0xa6, 0x1b, 0xea, 0xbd, 0xe0, 0x46, 0xb0, 0x3f, 0x42, 0x63, 0x36, 0xb6, 0x65, 0x59, 0x18, 0x8d, 0x46, 0x8a, 0x4b, 0xc2, 0x7b, 0xdb, 0xb3, 0xcb, 0x4b, 0x09, 0xa9, 0xb7, 0x08, 0x02, 0x1f, 0x96, 0x65, 0x22, 0xcb, 0x52, 0x1c, 0x8f, 0x07, 0xc4, 0xf1, 0x09, 0x5e, 0x48, 0x23, 0xcb, 0x30, 0x0c, 0x10, 0x86, 0x01, 0x0c, 0x43, 0x87, 0x10, 0xe4, 0xba, 0x69, 0xdb, 0x16, 0x8a, 0xb2, 0x56, 0x87, 0x37, 0xab, 0x75, 0xfa, 0x28, 0xee, 0x8b, 0x17, 0xcf, 0x71, 0x3a, 0x1c, 0x71, 0xd8, 0xef, 0x61, 0x49, 0xa8, 0xfb, 0x78, 0x38, 0x20, 0x3e, 0x9e, 0xd0, 0xb5, 0x2d, 0x16, 0x8b, 0xa5, 0x22, 0xf3, 0xb1, 0x85, 0x2c, 0x17, 0xc1, 0x42, 0x08, 0x38, 0xae, 0x0f, 0x4d, 0x6b, 0xe0, 0x07, 0x16, 0x82, 0xc0, 0x87, 0xa6, 0xc9, 0x71, 0x71, 0x23, 0xd0, 0x34, 0x2d, 0x8a, 0xb2, 0x41, 0x59, 0x14, 0x48, 0xd9, 0x23, 0xc3, 0xf7, 0xa1, 0xe9, 0x3a, 0x44, 0x23, 0x60, 0xe8, 0x06, 0xd2, 0x24, 0x45, 0xe0, 0x51, 0xd3, 0x28, 0x1a, 0x01, 0xd3, 0x30, 0x20, 0x9a, 0x06, 0x79, 0x52, 0x21, 0xcb, 0x72, 0x49, 0x9e, 0x36, 0xd1, 0xa1, 0x43, 0x92, 0xc9, 0xf8, 0x6a, 0xc9, 0x81, 0x29, 0x65, 0x73, 0x12, 0xf8, 0xc4, 0xc7, 0xf0, 0x1c, 0x17, 0x75, 0x55, 0x21, 0x89, 0x63, 0xd4, 0xb2, 0xd1, 0x5a, 0x2c, 0xcf, 0x64, 0x71, 0xce, 0xde, 0x20, 0x20, 0x1d, 0x3a, 0x77, 0x14, 0x0c, 0x91, 0xf7, 0x49, 0x69, 0x7d, 0x23, 0x91, 0xcf, 0x23, 0x48, 0xfb, 0x24, 0x8d, 0xcf, 0xe7, 0xf0, 0xdc, 0x29, 0x7d, 0x3e, 0x1f, 0x7f, 0xaa, 0x23, 0x17, 0x4f, 0x3a, 0xf9, 0xcf, 0xf3, 0xc5, 0xf9, 0x40, 0xfe, 0x1c, 0x76, 0xe7, 0x9f, 0x57, 0x96, 0x35, 0xa4, 0x79, 0x2e, 0xa5, 0xf4, 0x74, 0x80, 0x2e, 0x7d, 0xd5, 0x01, 0x60, 0x34, 0x1c, 0xa0, 0x69, 0x2a, 0x34, 0x4d, 0x8d, 0xa6, 0x6e, 0xe8, 0xa5, 0xd1, 0x5b, 0x18, 0x16, 0x7d, 0xcd, 0x78, 0xe0, 0x92, 0x1c, 0xa9, 0x29, 0x50, 0xe6, 0x47, 0xac, 0x57, 0x09, 0xea, 0x2a, 0x45, 0x59, 0xa5, 0xa8, 0xaa, 0x02, 0xa2, 0x21, 0x6b, 0x4c, 0xd2, 0xa2, 0x37, 0x30, 0xad, 0x4e, 0xf9, 0xb1, 0x37, 0xa2, 0xc6, 0x5f, 0xfe, 0xe6, 0xdf, 0x2a, 0xfd, 0xee, 0xc3, 0x7a, 0x2b, 0xdd, 0x91, 0x2c, 0xb8, 0x9d, 0x8f, 0xa2, 0xae, 0xf0, 0xd3, 0x6f, 0xff, 0x3f, 0x08, 0xd1, 0x49, 0x58, 0x15, 0xf0, 0x3d, 0x17, 0xfb, 0xfd, 0x1e, 0xf7, 0xf7, 0x2b, 0x6c, 0xb7, 0x7b, 0x0c, 0x47, 0x0e, 0x4c, 0x36, 0x7b, 0xa8, 0x6b, 0xb2, 0xbb, 0x34, 0x4d, 0x09, 0x31, 0x96, 0x4a, 0x8f, 0xcc, 0xee, 0x60, 0x51, 0x34, 0x53, 0x1d, 0x37, 0x75, 0x2d, 0xb1, 0x72, 0x1a, 0x1b, 0x0e, 0x87, 0x4f, 0xf4, 0xfa, 0x96, 0x65, 0x61, 0xb3, 0xbd, 0x57, 0xc5, 0x05, 0xc3, 0xc2, 0xdc, 0x01, 0x02, 0x40, 0xa5, 0x91, 0xb1, 0x01, 0x17, 0x54, 0xcf, 0x9e, 0x3d, 0x53, 0x84, 0x2a, 0xee, 0xb2, 0xf8, 0xb0, 0xed, 0x47, 0xf8, 0x25, 0x49, 0x8a, 0x3c, 0x07, 0x5e, 0x3c, 0x1f, 0x3f, 0x59, 0x2b, 0xba, 0xae, 0x63, 0x3a, 0x9d, 0x4a, 0x3f, 0xe9, 0x4c, 0x06, 0x37, 0x18, 0x0a, 0x35, 0x48, 0xd3, 0x54, 0xc1, 0xfe, 0xe3, 0xf1, 0x58, 0xbd, 0x0c, 0x7d, 0xe9, 0x9c, 0x26, 0x2b, 0x7b, 0xd7, 0x71, 0x70, 0x73, 0x73, 0x0d, 0xdb, 0xb4, 0x10, 0x78, 0x3e, 0x9a, 0xaa, 0xc6, 0xdd, 0xfe, 0x56, 0xad, 0xd3, 0xd1, 0x68, 0xa4, 0x0c, 0x62, 0x98, 0x0d, 0xca, 0x2e, 0x68, 0xa7, 0xd3, 0x49, 0x1a, 0x9b, 0x78, 0x4f, 0x36, 0x93, 0xbe, 0x89, 0x4a, 0x9a, 0xa6, 0x08, 0x07, 0x3e, 0xa0, 0xd9, 0x00, 0xc8, 0x63, 0xbe, 0x28, 0xc8, 0x24, 0x68, 0x30, 0x18, 0xc8, 0x51, 0x86, 0x86, 0xd9, 0x6c, 0xa1, 0x8a, 0xdb, 0xfb, 0xfb, 0x7b, 0x14, 0x45, 0x85, 0xd1, 0x68, 0x82, 0xf9, 0x7c, 0x09, 0xf3, 0x15, 0x8d, 0x04, 0xf8, 0x1e, 0xb2, 0x7e, 0x9a, 0xef, 0xc5, 0x6a, 0xb5, 0x52, 0x56, 0xab, 0x4c, 0xde, 0xe3, 0x02, 0xe8, 0xfc, 0xfc, 0x1c, 0xc7, 0xd3, 0x4e, 0xc1, 0xdd, 0xcc, 0xf4, 0x07, 0xa0, 0x66, 0xd1, 0x4c, 0x28, 0xbc, 0xb9, 0xb9, 0x79, 0x92, 0xf9, 0xcc, 0x33, 0x41, 0xdd, 0xa0, 0xaf, 0xe7, 0xd0, 0x97, 0xd3, 0xe9, 0x00, 0xdb, 0xb6, 0x95, 0x2b, 0xdc, 0x9f, 0xfe, 0xf4, 0x9d, 0x22, 0x78, 0x92, 0x26, 0x76, 0x82, 0x61, 0x37, 0x54, 0x44, 0xaa, 0xbb, 0xdb, 0x7b, 0xa4, 0x29, 0x75, 0x93, 0x65, 0x51, 0x61, 0xb7, 0xdd, 0xe3, 0xc3, 0x87, 0x0f, 0x48, 0xd3, 0x54, 0x99, 0x13, 0x51, 0x37, 0xed, 0x2b, 0xff, 0x72, 0xdf, 0x67, 0xdf, 0xe8, 0x52, 0x85, 0xe8, 0xb0, 0xb4, 0x30, 0xcb, 0x32, 0x45, 0x78, 0x33, 0x0c, 0x03, 0x59, 0x4a, 0xeb, 0x99, 0xb5, 0xed, 0xc3, 0xe1, 0x10, 0xd3, 0xe9, 0x54, 0xfd, 0x7e, 0xc7, 0xf3, 0xf0, 0xf6, 0xed, 0x5b, 0x65, 0xb9, 0x7b, 0x3a, 0x9d, 0xf0, 0xfe, 0xfd, 0x7b, 0x05, 0xdf, 0x2e, 0x97, 0x53, 0x98, 0x16, 0xfd, 0x5c, 0x3d, 0xa6, 0xfd, 0x60, 0xbf, 0x3b, 0xe1, 0xc7, 0x1f, 0x6f, 0x90, 0xa5, 0x40, 0x5a, 0x03, 0xc3, 0x09, 0xe0, 0x05, 0x2e, 0xa0, 0x77, 0xd0, 0x2d, 0x1d, 0x96, 0x69, 0xa1, 0x96, 0x39, 0xe0, 0xfd, 0x3c, 0x88, 0xfe, 0xfe, 0x44, 0x63, 0xc0, 0x16, 0x75, 0x0d, 0x1c, 0x8f, 0x0d, 0x92, 0x6c, 0x85, 0xed, 0x6e, 0x05, 0x7f, 0xe0, 0xc3, 0xf5, 0x1d, 0xb8, 0xbe, 0x83, 0xc9, 0x68, 0x84, 0x34, 0x13, 0x52, 0xae, 0xd5, 0xa1, 0x12, 0xc4, 0x19, 0x6a, 0x9a, 0x06, 0x59, 0x5a, 0xd0, 0x8c, 0xdc, 0xd4, 0xd4, 0xa8, 0xa2, 0x92, 0x68, 0x84, 0x3f, 0x08, 0x09, 0x61, 0x7a, 0x28, 0x70, 0xdc, 0xfd, 0x84, 0x97, 0xcf, 0xcf, 0x31, 0x9d, 0x8d, 0xa1, 0x1b, 0xc0, 0x7c, 0x3a, 0x03, 0x00, 0x9c, 0xcd, 0x17, 0x48, 0xd3, 0x14, 0x71, 0x9d, 0x2a, 0x8b, 0xe5, 0x47, 0x63, 0x1f, 0x57, 0x25, 0xf0, 0xe9, 0x06, 0x91, 0x30, 0x4f, 0xa7, 0x13, 0x2c, 0xdb, 0xa0, 0xcd, 0x3d, 0xa2, 0x35, 0x11, 0x1f, 0x4f, 0xd0, 0xbc, 0x0e, 0xf7, 0xf7, 0xf7, 0x0a, 0x05, 0xba, 0xb8, 0xb8, 0xc0, 0x70, 0x38, 0xc4, 0xbf, 0xf9, 0x37, 0x04, 0xc5, 0xbf, 0xbb, 0xfe, 0xa0, 0xfc, 0x1d, 0xfa, 0xf6, 0xad, 0xbc, 0x9f, 0x7f, 0xfa, 0xf4, 0x09, 0x45, 0x96, 0xc3, 0x35, 0x2d, 0xbc, 0x79, 0xf9, 0x1a, 0x57, 0x97, 0x97, 0x44, 0xd0, 0xdc, 0xef, 0x61, 0xd8, 0x16, 0x7e, 0xfe, 0xf8, 0x41, 0x19, 0xde, 0x14, 0x45, 0x81, 0xc3, 0x6e, 0x0f, 0xdf, 0x76, 0xb0, 0x9c, 0x2f, 0x11, 0xf8, 0x3e, 0x3a, 0xe8, 0x0a, 0x81, 0xe1, 0xc2, 0x8e, 0xfb, 0x36, 0x21, 0x1a, 0xac, 0x56, 0x0f, 0xd8, 0xef, 0x0f, 0xa8, 0x6b, 0x20, 0x4d, 0x13, 0xc5, 0x93, 0xa0, 0x22, 0x00, 0xd8, 0x1d, 0x76, 0x58, 0x6f, 0xd7, 0x68, 0xdb, 0x0e, 0x8b, 0xc5, 0x1c, 0xa3, 0xc9, 0xe8, 0xc9, 0xc8, 0x36, 0x2d, 0x0e, 0x4a, 0xee, 0xc7, 0xfe, 0x14, 0xcc, 0xe8, 0x2e, 0xcb, 0x12, 0xe3, 0xf1, 0xec, 0x89, 0x43, 0xdb, 0xe7, 0xcd, 0x25, 0x45, 0x2a, 0x57, 0x68, 0x5b, 0x28, 0x49, 0x26, 0x3b, 0xf1, 0xd5, 0x75, 0x8d, 0x0f, 0xef, 0xde, 0xab, 0xce, 0x9d, 0x0d, 0x6e, 0x00, 0xc0, 0xf4, 0xc8, 0xa9, 0xcd, 0x0d, 0x43, 0x38, 0xae, 0xae, 0xd6, 0x51, 0x91, 0x57, 0x32, 0x76, 0x9a, 0x0b, 0x4f, 0x1a, 0x89, 0x6d, 0x76, 0x5b, 0x75, 0x0f, 0xfa, 0x8d, 0x69, 0xe0, 0xd1, 0xe1, 0x3c, 0x8a, 0x86, 0x08, 0xfd, 0x00, 0x51, 0x18, 0x02, 0xd1, 0x10, 0x7a, 0x77, 0x8f, 0xfd, 0x3e, 0x41, 0x9a, 0xe6, 0x8f, 0xb6, 0xd7, 0x5d, 0xab, 0xb2, 0x02, 0x18, 0xa1, 0x0b, 0x82, 0x00, 0xa2, 0xa6, 0xeb, 0xb7, 0x0d, 0x53, 0xfd, 0x9d, 0x0e, 0x4d, 0xfa, 0x68, 0xec, 0x54, 0x16, 0x44, 0x9e, 0x93, 0xc7, 0xbb, 0xf6, 0x0f, 0xff, 0xe3, 0x7f, 0xec, 0xb8, 0x62, 0xea, 0xc3, 0xaa, 0x7c, 0x48, 0xf7, 0x2d, 0x5d, 0xfb, 0x9d, 0xb4, 0xae, 0xeb, 0x40, 0x27, 0x7e, 0x31, 0x76, 0xf4, 0xa9, 0xd6, 0x5c, 0xfb, 0x45, 0xdb, 0x55, 0x00, 0x10, 0xcd, 0xe3, 0xef, 0x62, 0xc8, 0xbd, 0x0f, 0xcd, 0xf3, 0x81, 0xfe, 0x4b, 0x1d, 0x3e, 0x19, 0xc3, 0x30, 0x06, 0xaf, 0x4b, 0x3d, 0x21, 0xa0, 0xb5, 0xfc, 0x75, 0x3a, 0x34, 0xd0, 0xdc, 0x4d, 0xd4, 0x15, 0x49, 0xb8, 0x2c, 0x0d, 0x8e, 0x45, 0xf1, 0x85, 0x9a, 0xd6, 0xa1, 0xd3, 0x48, 0x0b, 0x59, 0x57, 0x39, 0x75, 0xe1, 0x79, 0x02, 0x68, 0x0d, 0x5c, 0x97, 0x0c, 0x22, 0x3a, 0xfd, 0x20, 0x8b, 0x98, 0x1a, 0x9a, 0x2e, 0x48, 0xeb, 0x68, 0x9b, 0x92, 0xcc, 0x27, 0xa0, 0xd5, 0x9e, 0x4a, 0xc2, 0x62, 0x2d, 0xb6, 0xeb, 0xf8, 0xca, 0xc2, 0xd4, 0x75, 0xc9, 0xd5, 0xcc, 0x34, 0x4d, 0x4c, 0xe4, 0xe2, 0x63, 0x48, 0xd2, 0x75, 0x5d, 0x98, 0x56, 0xa7, 0x0e, 0xe8, 0xd1, 0x38, 0x92, 0xf3, 0xf4, 0xc7, 0xeb, 0x77, 0x1c, 0x4b, 0x31, 0xbc, 0xf9, 0x45, 0x60, 0x23, 0x9a, 0xfe, 0x98, 0x62, 0x3c, 0x1e, 0x2b, 0x7d, 0xe7, 0x6e, 0xb7, 0x53, 0xdd, 0xa0, 0xe3, 0x12, 0x5b, 0x96, 0xcd, 0x4b, 0x8e, 0xc7, 0xa3, 0x22, 0xda, 0xd0, 0x4c, 0x2f, 0x53, 0x06, 0x1a, 0xec, 0xab, 0x5f, 0x14, 0x94, 0x37, 0xcd, 0x10, 0x14, 0x57, 0xda, 0xec, 0x20, 0xc6, 0x3e, 0xf9, 0x9e, 0xe7, 0xc1, 0xb5, 0x6d, 0x95, 0xb3, 0xcd, 0x30, 0x77, 0x5f, 0x07, 0xcb, 0xb0, 0x1b, 0x93, 0xa8, 0x78, 0xfd, 0x30, 0x3c, 0x76, 0x38, 0xee, 0x94, 0x1c, 0x8a, 0xff, 0x1f, 0x17, 0x7d, 0x54, 0xc4, 0x44, 0xca, 0xa8, 0x86, 0xe5, 0x31, 0x0c, 0xcf, 0x1b, 0x86, 0x81, 0x6f, 0xde, 0xbc, 0x54, 0x1d, 0xf2, 0xd3, 0xd0, 0x1e, 0x5d, 0x7d, 0xdd, 0x8b, 0x17, 0x2f, 0x30, 0x1e, 0x8f, 0xb1, 0xdd, 0x6e, 0x71, 0x77, 0x77, 0xa7, 0x60, 0x79, 0x4d, 0xd3, 0xd0, 0x76, 0x8d, 0x8a, 0x52, 0x24, 0x14, 0xc0, 0x78, 0x32, 0x3e, 0xd8, 0xac, 0x0f, 0xea, 0x67, 0x31, 0x91, 0x8e, 0x19, 0xf4, 0xfb, 0xfd, 0x1e, 0x45, 0xd6, 0x28, 0x22, 0x21, 0xcf, 0xf5, 0x8f, 0xc7, 0x23, 0xaa, 0x0a, 0x92, 0x7b, 0x60, 0xe2, 0xf5, 0xeb, 0xd7, 0x2a, 0xad, 0x8c, 0x59, 0xe0, 0x8c, 0x86, 0x09, 0xd1, 0x3c, 0x91, 0xbd, 0xf4, 0x25, 0x9e, 0x86, 0x61, 0xe0, 0xd3, 0xa7, 0x4f, 0x0a, 0x72, 0xe4, 0xa2, 0xc7, 0x71, 0x1c, 0x05, 0x9b, 0xae, 0xd6, 0x34, 0x12, 0xe0, 0xf9, 0x72, 0x92, 0x54, 0x18, 0x0e, 0x5d, 0xbc, 0x92, 0xea, 0x81, 0x3f, 0xfe, 0xf1, 0x5f, 0xa8, 0x30, 0x18, 0xf8, 0x92, 0x1b, 0xf1, 0x18, 0x84, 0x23, 0x44, 0x8d, 0xd9, 0x6c, 0xf1, 0x64, 0x83, 0xe4, 0x8d, 0x90, 0xf9, 0x00, 0x80, 0xae, 0x3a, 0x2a, 0x5d, 0x33, 0x95, 0x43, 0x9a, 0xef, 0x87, 0x44, 0xf4, 0xda, 0x6c, 0xd1, 0xdf, 0x3b, 0xd8, 0x21, 0x10, 0x00, 0x86, 0xc3, 0x21, 0x66, 0xb3, 0x39, 0xf6, 0x7b, 0x2a, 0x12, 0x0e, 0x07, 0x81, 0x28, 0x22, 0x27, 0x3f, 0x5e, 0xb7, 0xb3, 0xc5, 0x4c, 0x75, 0x70, 0x2c, 0xed, 0xe2, 0x77, 0xc3, 0x75, 0x5d, 0x5c, 0x5f, 0x5f, 0x2b, 0x1f, 0x74, 0xd3, 0xb4, 0x60, 0x1a, 0x2e, 0x34, 0x98, 0xf8, 0xfe, 0xbb, 0x6b, 0x32, 0xb2, 0x19, 0xea, 0x98, 0x9f, 0x2d, 0x11, 0x0c, 0x7c, 0xec, 0x8f, 0x3b, 0xe8, 0x96, 0x0e, 0xc3, 0xb5, 0xb0, 0x3f, 0x1c, 0x60, 0x98, 0x8f, 0x5d, 0xa3, 0xa9, 0x1b, 0x14, 0x37, 0x2a, 0x5a, 0xd8, 0xa6, 0x85, 0xba, 0xaa, 0xb0, 0xdf, 0x6c, 0x21, 0x72, 0x32, 0x6b, 0x1a, 0x4d, 0x47, 0x88, 0x46, 0x01, 0x3a, 0x1d, 0x48, 0xb2, 0x18, 0x49, 0x16, 0xa3, 0x6e, 0x4a, 0x38, 0xf6, 0xe0, 0xb1, 0xc9, 0xe8, 0x1e, 0xbd, 0x32, 0xaa, 0x9c, 0x46, 0x04, 0x43, 0xcf, 0x41, 0x10, 0x11, 0xe4, 0x9a, 0x24, 0x09, 0x06, 0xb2, 0x50, 0xd9, 0xec, 0x77, 0xb8, 0xbd, 0x5d, 0xc3, 0x73, 0x1d, 0x5c, 0x9e, 0x9f, 0xc3, 0x34, 0x29, 0x29, 0x2e, 0x0a, 0x07, 0xc4, 0x9f, 0x08, 0x42, 0x92, 0xbb, 0x65, 0x27, 0x69, 0xe3, 0x4b, 0x9d, 0xf1, 0x29, 0x3e, 0x28, 0x92, 0x60, 0xdb, 0x36, 0xb8, 0xbe, 0x3d, 0xe0, 0x9b, 0x6f, 0x68, 0x06, 0x5d, 0xd5, 0x85, 0x34, 0xa5, 0x31, 0x95, 0x57, 0x80, 0xd9, 0x19, 0x2a, 0x28, 0x85, 0xd1, 0x29, 0x26, 0x49, 0xf1, 0xbd, 0x64, 0xe3, 0x20, 0x36, 0xfe, 0xe1, 0xd0, 0x93, 0xe3, 0xf1, 0x88, 0xf5, 0x31, 0xa6, 0xc4, 0xb8, 0x86, 0x9c, 0xf4, 0x7c, 0x97, 0x2c, 0x7b, 0x2d, 0xc7, 0x86, 0x66, 0x1a, 0x38, 0x15, 0x09, 0x44, 0xf7, 0x38, 0x82, 0xf1, 0x5d, 0x0f, 0x8b, 0xc9, 0x14, 0x66, 0xa7, 0xe1, 0xb0, 0xdf, 0xe3, 0xee, 0xfe, 0x5e, 0xa5, 0x21, 0xf6, 0x3b, 0x74, 0xdf, 0xf7, 0x15, 0xdf, 0x82, 0xfc, 0x05, 0x52, 0x49, 0x08, 0xf5, 0xb0, 0x5c, 0x2e, 0x95, 0x77, 0xc2, 0x76, 0xbb, 0x55, 0x45, 0x3f, 0x93, 0x6f, 0x79, 0x7c, 0x98, 0x65, 0x19, 0x56, 0xeb, 0x5b, 0x55, 0x0c, 0x32, 0xaf, 0x48, 0x08, 0x81, 0xfd, 0x7e, 0x4f, 0x05, 0x90, 0x1c, 0xab, 0x72, 0x2e, 0xc2, 0x68, 0x34, 0x42, 0xdb, 0xb6, 0x2a, 0x2e, 0x35, 0x2b, 0x72, 0xb5, 0xaf, 0x71, 0x68, 0x0f, 0x17, 0xcd, 0x65, 0x59, 0xa2, 0x2a, 0x1e, 0x6d, 0xb4, 0x19, 0x69, 0xe8, 0xdb, 0x97, 0x9f, 0x5d, 0x2c, 0x15, 0xe9, 0xfa, 0x78, 0x3c, 0x62, 0xbb, 0xd9, 0xc3, 0xb2, 0x6c, 0x4c, 0xa7, 0x73, 0x78, 0x9e, 0x87, 0x37, 0x6f, 0xbe, 0x42, 0x5e, 0x95, 0xca, 0x2d, 0xb3, 0xac, 0x2b, 0x35, 0x73, 0xe7, 0xd1, 0x4c, 0xd3, 0x34, 0xb0, 0x4d, 0x0b, 0xbe, 0xeb, 0x42, 0xd4, 0x0d, 0x8a, 0x94, 0xe4, 0x65, 0x75, 0x55, 0x21, 0x8a, 0xe8, 0x99, 0x8c, 0xa7, 0x13, 0x44, 0xe3, 0x11, 0x3a, 0x00, 0x87, 0x98, 0x9a, 0x8d, 0xa6, 0x25, 0xe6, 0x7b, 0x72, 0xa2, 0xa6, 0x2d, 0xf4, 0x7c, 0x78, 0x2e, 0xc5, 0x01, 0xa3, 0xa5, 0x73, 0xb3, 0x94, 0xfc, 0xaa, 0x3c, 0xcf, 0xc9, 0x74, 0x6c, 0x38, 0xa4, 0xf8, 0x54, 0x86, 0xcc, 0xfa, 0xb2, 0x33, 0x96, 0x0e, 0xf1, 0x21, 0xcf, 0x9b, 0x4c, 0x3f, 0xf3, 0x5b, 0xd7, 0xf4, 0x2f, 0x5c, 0xe6, 0x3e, 0x67, 0xa2, 0xf7, 0x75, 0xbc, 0x9f, 0xc7, 0x9b, 0x5a, 0xe6, 0x97, 0x1d, 0x39, 0x27, 0x5d, 0xf5, 0xb3, 0xd4, 0xfb, 0x30, 0xfe, 0x13, 0x63, 0x1b, 0xfb, 0x31, 0x8d, 0xa8, 0x13, 0xb2, 0xe3, 0x87, 0x50, 0x8c, 0xf6, 0xb6, 0x49, 0x61, 0x18, 0x1a, 0x1c, 0x4f, 0x27, 0x19, 0x82, 0x05, 0x88, 0xb6, 0x40, 0x59, 0x24, 0xa8, 0xaa, 0x02, 0xc7, 0xc3, 0x27, 0x88, 0xb6, 0xa6, 0xae, 0x2c, 0xf4, 0x31, 0x5a, 0x06, 0x30, 0x0d, 0x0d, 0x55, 0x55, 0xa0, 0x28, 0x63, 0xe4, 0x15, 0x1d, 0xe8, 0xd0, 0x5a, 0xf9, 0x59, 0x2c, 0x18, 0xad, 0x0e, 0x5d, 0x37, 0x61, 0x18, 0x26, 0x44, 0x63, 0xc0, 0xb4, 0x0d, 0x38, 0x1d, 0x31, 0x4e, 0xcb, 0x5a, 0xc0, 0xb4, 0xa5, 0xdf, 0xae, 0x63, 0x62, 0x75, 0xb7, 0x55, 0x33, 0xeb, 0xdd, 0x7e, 0x23, 0xe1, 0xa8, 0x0e, 0x96, 0xad, 0xa1, 0xac, 0x52, 0xa4, 0x19, 0x5d, 0xaf, 0x65, 0x1b, 0xb0, 0x1d, 0x13, 0xae, 0x6b, 0x4b, 0x4f, 0xee, 0x5c, 0x49, 0xbe, 0x58, 0x16, 0xc1, 0x3a, 0x43, 0xd6, 0x79, 0xda, 0xb6, 0x8d, 0xe3, 0x69, 0x4f, 0xb0, 0x67, 0x37, 0x40, 0x23, 0x2a, 0x94, 0x55, 0x0e, 0xdd, 0x00, 0x16, 0xcb, 0x99, 0xb4, 0x48, 0x65, 0x1f, 0xe5, 0x04, 0xfb, 0x7d, 0x89, 0xf5, 0x9a, 0xc2, 0x5c, 0x06, 0x03, 0x82, 0xfe, 0x0c, 0xf9, 0x3c, 0x42, 0xe9, 0x34, 0x24, 0x84, 0x40, 0xdb, 0x34, 0x68, 0x2d, 0x0b, 0x86, 0x24, 0xce, 0x71, 0xc4, 0x6c, 0x23, 0x5f, 0xea, 0xae, 0xeb, 0x30, 0x9b, 0xcd, 0x70, 0x79, 0x7e, 0xae, 0x4c, 0x54, 0x78, 0x86, 0xc8, 0x2f, 0xc3, 0xe7, 0x28, 0x0e, 0x6f, 0x32, 0x2c, 0x17, 0x62, 0x43, 0x9c, 0xd0, 0xf3, 0x61, 0x6a, 0xfa, 0x13, 0x0d, 0x76, 0x3f, 0x8f, 0xdd, 0xd4, 0x74, 0x14, 0x55, 0x0d, 0xdb, 0x0f, 0x10, 0x44, 0x81, 0xaa, 0xd6, 0x8b, 0x94, 0x24, 0x52, 0x7f, 0xf8, 0xc3, 0x1f, 0x94, 0xcd, 0xa9, 0x27, 0x19, 0xcf, 0xdc, 0x9d, 0x37, 0x4d, 0x83, 0x6f, 0xbf, 0xfd, 0x16, 0x51, 0x14, 0xa9, 0xf5, 0xc3, 0x5d, 0x30, 0xcf, 0xb3, 0x7f, 0xfe, 0xf9, 0x67, 0x49, 0x22, 0xcb, 0x20, 0x9a, 0xee, 0x89, 0x13, 0x1c, 0xbf, 0x24, 0x51, 0x14, 0x29, 0xed, 0x35, 0x17, 0x0b, 0x69, 0x9a, 0x12, 0xbb, 0x7f, 0x97, 0x3c, 0xc9, 0x69, 0x7f, 0xf4, 0x68, 0xe8, 0xe0, 0x38, 0x16, 0x5e, 0xbf, 0x7e, 0x85, 0x28, 0x8a, 0x94, 0xc3, 0x1d, 0xf3, 0x09, 0x18, 0xf2, 0xdf, 0x6c, 0x36, 0xaa, 0x20, 0x31, 0x4d, 0x13, 0xb3, 0xd9, 0x4c, 0xa2, 0x1b, 0x64, 0x71, 0x7a, 0x79, 0x79, 0xa9, 0xf8, 0x24, 0x79, 0x7e, 0x92, 0x8c, 0xec, 0x08, 0x9a, 0x96, 0xc8, 0x98, 0x5c, 0x17, 0xeb, 0xf5, 0x0d, 0x8a, 0x02, 0xf0, 0x3c, 0x20, 0x0c, 0x5c, 0x8c, 0x86, 0x53, 0x05, 0xd9, 0xcf, 0xe7, 0x4b, 0x29, 0x63, 0xd3, 0xa9, 0x8b, 0x3f, 0xee, 0x64, 0xe1, 0xe2, 0x00, 0xd0, 0x61, 0x59, 0x0e, 0x1c, 0xc7, 0x03, 0xa0, 0x23, 0x49, 0xa8, 0x28, 0x25, 0x5d, 0xbe, 0x8f, 0xba, 0x16, 0x38, 0x3f, 0x3f, 0xa7, 0x67, 0xd8, 0x74, 0xca, 0x7a, 0xd7, 0xb6, 0x5d, 0x55, 0x98, 0x71, 0xd8, 0x05, 0x6b, 0xd9, 0x97, 0xcb, 0x25, 0x7e, 0xf5, 0xab, 0x5f, 0xa9, 0x66, 0xc0, 0x30, 0x6c, 0x54, 0xd5, 0x1a, 0xc7, 0xa3, 0x40, 0x55, 0x01, 0x61, 0x18, 0x61, 0x3e, 0x5f, 0xaa, 0x51, 0xd2, 0xf5, 0xf5, 0xb5, 0x42, 0x66, 0xb8, 0x03, 0x1b, 0x8f, 0xc7, 0x8a, 0xe0, 0xc9, 0xeb, 0x8a, 0x59, 0xde, 0xa2, 0xd1, 0x90, 0x26, 0x19, 0x9a, 0x86, 0x82, 0x4d, 0xfe, 0xfc, 0x2f, 0x7f, 0x05, 0x2f, 0x0c, 0x90, 0x15, 0x29, 0xb6, 0xfb, 0x0d, 0xea, 0xb2, 0x86, 0x6d, 0x6a, 0x5f, 0x44, 0x32, 0xb7, 0x20, 0x76, 0x37, 0xef, 0x33, 0xcc, 0x19, 0x3a, 0x1c, 0x4a, 0x4c, 0xa7, 0x94, 0x31, 0xbf, 0x3c, 0x9f, 0xa1, 0xae, 0x2b, 0x7c, 0xbc, 0xfb, 0x88, 0x38, 0x39, 0x22, 0x8d, 0x73, 0x84, 0x67, 0x13, 0xd6, 0xa7, 0xaa, 0xc2, 0xd7, 0x73, 0x5c, 0x98, 0x63, 0x1a, 0x45, 0x78, 0x52, 0x0d, 0x93, 0x9a, 0xa9, 0x9a, 0xd5, 0x66, 0x59, 0x86, 0xf4, 0x14, 0xa3, 0xad, 0x01, 0x7f, 0xea, 0xc2, 0x75, 0x49, 0x92, 0x19, 0x04, 0x94, 0x35, 0x50, 0x55, 0x15, 0x8e, 0x7b, 0xf2, 0x34, 0x8f, 0xc2, 0x01, 0xda, 0x46, 0x60, 0xfd, 0xb0, 0xc6, 0x66, 0xbb, 0x96, 0x9d, 0xa8, 0xa1, 0xa4, 0x87, 0x81, 0x4f, 0x6c, 0xf2, 0x38, 0x8e, 0x89, 0x64, 0x6b, 0x3b, 0x58, 0x2c, 0x66, 0xb4, 0x0f, 0x64, 0x39, 0x9a, 0xb2, 0xc1, 0x64, 0x32, 0xa1, 0xee, 0x59, 0x92, 0x66, 0x59, 0x91, 0xc2, 0xfb, 0xf4, 0xfd, 0xfd, 0x3d, 0xee, 0xee, 0xee, 0x70, 0x76, 0x76, 0x86, 0xf3, 0xf3, 0x73, 0x25, 0x37, 0x66, 0x18, 0x7d, 0x36, 0x99, 0xc2, 0xd1, 0x4d, 0x3c, 0x7c, 0xba, 0xc5, 0x66, 0xb5, 0x46, 0x55, 0x55, 0x38, 0xbb, 0x38, 0x87, 0xef, 0xfb, 0x78, 0xd8, 0xaf, 0x95, 0x16, 0xdf, 0x71, 0xa8, 0x1b, 0xfd, 0x7e, 0xbd, 0xc1, 0x34, 0x1a, 0xe1, 0xe5, 0x8b, 0x17, 0x88, 0x64, 0xe6, 0x01, 0x17, 0x61, 0xfc, 0xef, 0x8c, 0x24, 0xfd, 0xfe, 0xf7, 0xbf, 0x87, 0x65, 0x59, 0xb8, 0xba, 0xba, 0x54, 0x45, 0x05, 0x07, 0x8b, 0x9c, 0x4e, 0x27, 0x58, 0x9e, 0x01, 0x98, 0x54, 0xc4, 0xd7, 0x6d, 0x89, 0xcd, 0x21, 0xc3, 0x29, 0x3b, 0xa8, 0x4e, 0xdc, 0x71, 0x2c, 0x00, 0xae, 0x44, 0xb5, 0x6c, 0x38, 0x8e, 0x05, 0xc3, 0x70, 0x11, 0x04, 0x1e, 0xba, 0xee, 0x1c, 0x96, 0x13, 0xe0, 0xfe, 0xfe, 0x1e, 0x79, 0x9e, 0x63, 0x3a, 0x9d, 0xe2, 0xd5, 0xab, 0x57, 0xd0, 0x75, 0x1d, 0x6f, 0xdf, 0xbe, 0x45, 0x1c, 0xc7, 0x18, 0x45, 0x43, 0xa4, 0x29, 0x69, 0xfd, 0x6d, 0xe9, 0x91, 0xc1, 0x45, 0xe8, 0x64, 0x32, 0x81, 0x19, 0x98, 0xca, 0x4a, 0xd8, 0xd0, 0x0d, 0xf9, 0x39, 0x24, 0xe1, 0xad, 0xed, 0x90, 0x65, 0x89, 0xdc, 0x5b, 0xa8, 0x40, 0x59, 0xaf, 0x76, 0xd8, 0x6c, 0x4a, 0x6c, 0xb7, 0x37, 0x68, 0x05, 0x10, 0x1f, 0x0f, 0x18, 0x0c, 0xc9, 0xea, 0x59, 0x54, 0x35, 0x32, 0x49, 0x82, 0x75, 0x65, 0xa8, 0x4a, 0x9a, 0xe4, 0x30, 0x34, 0xfd, 0x91, 0x44, 0xb9, 0xdb, 0xa1, 0x48, 0x33, 0x1a, 0xdb, 0x4c, 0x26, 0x98, 0x4c, 0x86, 0xaa, 0x18, 0x84, 0xa1, 0xc3, 0x91, 0xc5, 0x87, 0x10, 0x02, 0x79, 0x41, 0x4d, 0x55, 0x27, 0x5a, 0x75, 0x0e, 0x96, 0x65, 0x89, 0x46, 0xca, 0xea, 0x2c, 0xcb, 0xc2, 0xcd, 0xa7, 0x7b, 0xf9, 0xf9, 0x3b, 0x44, 0x91, 0x83, 0x22, 0xaf, 0xa0, 0xfd, 0xbb, 0xff, 0xe1, 0xff, 0xec, 0x58, 0x63, 0xc9, 0x95, 0x32, 0x77, 0x49, 0xbc, 0x99, 0x7c, 0x1e, 0xb1, 0xaa, 0x64, 0x6a, 0xa6, 0xfe, 0x8b, 0x6e, 0x6e, 0x5f, 0xc8, 0xdb, 0x7a, 0xd2, 0xb6, 0xbe, 0x4e, 0x5d, 0x34, 0x8f, 0x7f, 0xcf, 0x1d, 0x56, 0x9f, 0x2d, 0xff, 0x4b, 0xb6, 0xb0, 0x4f, 0x7e, 0x76, 0x2f, 0x7a, 0x4f, 0x97, 0x4e, 0x71, 0x5a, 0xef, 0xf7, 0x99, 0x7a, 0x89, 0xae, 0x13, 0xa4, 0x47, 0x6d, 0x33, 0xd4, 0x4d, 0x8a, 0xba, 0x4a, 0x51, 0x94, 0x31, 0xea, 0xba, 0xc4, 0x20, 0xd0, 0xe4, 0x8c, 0xce, 0x84, 0xeb, 0x38, 0x68, 0xdb, 0x06, 0x59, 0x72, 0xc2, 0xe1, 0xb0, 0x23, 0x79, 0x16, 0x6a, 0x75, 0x78, 0x86, 0x61, 0xa8, 0x2a, 0x61, 0xbe, 0x17, 0x86, 0x4e, 0xa9, 0x5d, 0xdc, 0xc1, 0x95, 0x55, 0x21, 0xbb, 0x1b, 0xca, 0xab, 0xed, 0xaa, 0x4e, 0xbd, 0x60, 0x42, 0x10, 0xe1, 0x27, 0x08, 0x89, 0x3c, 0x74, 0x3a, 0x9d, 0xd4, 0x81, 0x41, 0x44, 0x31, 0xae, 0x14, 0x0d, 0xd5, 0xe1, 0x3f, 0xac, 0xee, 0x9e, 0xdc, 0x33, 0x86, 0xcc, 0x1e, 0x13, 0xb9, 0x04, 0x49, 0xa0, 0x86, 0x43, 0x69, 0xb1, 0xf8, 0x49, 0x11, 0xe5, 0x7c, 0xdf, 0x87, 0x6e, 0xb4, 0x6a, 0x1e, 0xc4, 0x71, 0xa4, 0x0c, 0xdf, 0x87, 0x61, 0x08, 0xad, 0xe3, 0xbc, 0xf4, 0x81, 0x9a, 0x4d, 0x73, 0xb4, 0x27, 0xbf, 0xa0, 0x87, 0xc3, 0xe1, 0x0b, 0xbf, 0x69, 0x05, 0x7f, 0x95, 0x8d, 0x42, 0x27, 0x98, 0x4c, 0x05, 0x19, 0xd8, 0xa1, 0x69, 0x1a, 0x0e, 0x87, 0xc3, 0x13, 0xa7, 0x36, 0xee, 0xd2, 0xf9, 0x9f, 0xe1, 0x20, 0x50, 0x52, 0x28, 0xde, 0x64, 0x19, 0x9e, 0xa7, 0x71, 0x0f, 0xcd, 0xca, 0xcf, 0xcf, 0xcf, 0x21, 0x84, 0xc0, 0xbb, 0x77, 0xef, 0x54, 0x64, 0xe9, 0xcb, 0x97, 0x2f, 0x11, 0xa7, 0x1b, 0x75, 0x7f, 0xfa, 0x06, 0x1d, 0x6a, 0xd4, 0xd3, 0x3d, 0x8e, 0x72, 0xfa, 0x86, 0x1c, 0x5c, 0xac, 0x3a, 0x0e, 0xfb, 0x4b, 0x4b, 0x08, 0x3e, 0x0c, 0xb1, 0x5c, 0x9c, 0xab, 0x8d, 0x59, 0xb4, 0x95, 0x22, 0x13, 0xf6, 0x0f, 0x7a, 0xcb, 0xb2, 0x68, 0x83, 0xf2, 0x06, 0x2a, 0xe7, 0xbc, 0xcf, 0xec, 0x7f, 0x3c, 0x50, 0xe8, 0xf9, 0xb0, 0x56, 0xdd, 0xf3, 0xa8, 0x43, 0x61, 0xd9, 0x1e, 0xa7, 0x15, 0x72, 0x97, 0x35, 0x9f, 0xcf, 0x31, 0x9d, 0x4e, 0x29, 0x6d, 0x4e, 0x66, 0x9c, 0x4f, 0x26, 0x13, 0x15, 0xab, 0x49, 0x30, 0xe3, 0x58, 0xcd, 0xe4, 0x1f, 0x1e, 0xf6, 0x58, 0xaf, 0x8f, 0xd0, 0x0d, 0xc0, 0xb2, 0x20, 0x73, 0xe1, 0x47, 0xb2, 0x8b, 0x76, 0x31, 0x9d, 0x8d, 0xa5, 0x33, 0x5f, 0x82, 0xd5, 0x6a, 0x85, 0xb2, 0xcc, 0x71, 0x76, 0x76, 0x86, 0xd9, 0x7c, 0x42, 0xb3, 0xf2, 0xfd, 0x49, 0x15, 0xea, 0x7c, 0x7d, 0x2c, 0x9f, 0x0a, 0xc3, 0x10, 0xbf, 0x7a, 0xf3, 0x1a, 0x65, 0x51, 0x2b, 0xd5, 0x83, 0xae, 0xd3, 0x3d, 0x5c, 0xaf, 0x37, 0xa4, 0x9d, 0x8e, 0x13, 0x25, 0x0b, 0x64, 0xc7, 0x38, 0x3e, 0x90, 0xdb, 0xb6, 0xc5, 0x78, 0x34, 0x47, 0x59, 0x96, 0xca, 0xce, 0x95, 0xc9, 0x47, 0x3c, 0xfa, 0x29, 0x9b, 0x58, 0x49, 0xd4, 0x58, 0x96, 0xc5, 0x7b, 0x4c, 0x9e, 0xe7, 0xf0, 0xdc, 0x08, 0x1d, 0xc4, 0xa3, 0x2c, 0xf0, 0x94, 0xe2, 0xe1, 0x7e, 0x87, 0xbb, 0xbb, 0x06, 0xe7, 0x67, 0x3e, 0x74, 0xb7, 0xc5, 0x60, 0x34, 0x44, 0x34, 0x1a, 0x20, 0xcd, 0x13, 0x08, 0x08, 0xd8, 0x01, 0xd9, 0xa0, 0x3a, 0xae, 0xa5, 0xb8, 0x16, 0x96, 0x61, 0x92, 0x8e, 0xb8, 0xa1, 0x7f, 0xd7, 0x00, 0x14, 0x69, 0x86, 0x64, 0x53, 0xc2, 0x0b, 0x7c, 0x0a, 0x4a, 0x0a, 0x1d, 0x74, 0x5a, 0x87, 0x52, 0x94, 0x80, 0xde, 0xc1, 0x34, 0x75, 0xdc, 0x7c, 0x5a, 0xc3, 0xb1, 0x6c, 0xb9, 0x6e, 0x2c, 0x98, 0xba, 0x34, 0x81, 0xaa, 0xe8, 0x7d, 0x0a, 0x6d, 0x0b, 0x2d, 0x68, 0x2f, 0x0a, 0xc3, 0x10, 0xc3, 0x09, 0x3d, 0x9b, 0xd5, 0x7a, 0x4d, 0x8e, 0x76, 0x83, 0x01, 0x8a, 0x34, 0xc3, 0xfb, 0xf7, 0x3b, 0xbc, 0x79, 0xb3, 0xc4, 0xf9, 0xf2, 0x8c, 0xc6, 0x28, 0xf7, 0xf7, 0xd2, 0xc9, 0x8d, 0xc6, 0x34, 0x69, 0x96, 0x43, 0x08, 0x72, 0x72, 0x64, 0x65, 0x46, 0xd7, 0x09, 0xf8, 0xc3, 0x81, 0xd2, 0x94, 0x1b, 0x86, 0x26, 0x7d, 0x1f, 0x1c, 0xc5, 0x11, 0x29, 0x8a, 0x4a, 0xc5, 0x82, 0xb2, 0x6d, 0xac, 0xef, 0xfb, 0x38, 0x1c, 0x0e, 0xd8, 0x6c, 0x36, 0x98, 0x4e, 0xa7, 0xca, 0xb8, 0x88, 0xd7, 0x58, 0xdf, 0xb8, 0xe8, 0x3f, 0xff, 0xf1, 0x13, 0x7c, 0x0f, 0xb8, 0x98, 0xcf, 0x30, 0x0a, 0x07, 0x10, 0xb5, 0x44, 0xb9, 0xd0, 0x21, 0xcd, 0x73, 0xcc, 0xaf, 0x16, 0xaa, 0x43, 0xb7, 0x2c, 0x0b, 0x93, 0xd1, 0x18, 0xb6, 0x6e, 0x00, 0xb5, 0x80, 0x63, 0xdb, 0x28, 0xaa, 0x5c, 0x85, 0x09, 0x71, 0xd1, 0x9b, 0x65, 0x99, 0x42, 0x0c, 0xcf, 0xce, 0xce, 0x94, 0xf7, 0xff, 0x7a, 0xbd, 0x46, 0x9a, 0x16, 0xf0, 0x3c, 0x5b, 0xa1, 0x54, 0x59, 0x9d, 0x2a, 0x95, 0x07, 0xab, 0x28, 0x4c, 0xd3, 0xc4, 0x64, 0x42, 0xea, 0x95, 0xb6, 0x7c, 0x6a, 0x0c, 0xc6, 0xe8, 0x45, 0x14, 0x45, 0x18, 0x8f, 0xc7, 0x68, 0x3a, 0xf2, 0x3b, 0xdf, 0xed, 0x76, 0xaa, 0xe8, 0x63, 0x8e, 0xca, 0xe9, 0x74, 0xc2, 0x64, 0x3c, 0x93, 0xea, 0xa1, 0x0c, 0x6d, 0x0b, 0xb8, 0x2e, 0xb1, 0xc1, 0xd9, 0x4c, 0x6a, 0xbb, 0xda, 0xaa, 0xef, 0x63, 0x75, 0x0f, 0x73, 0x00, 0x1c, 0xc7, 0x01, 0x2c, 0x4d, 0x21, 0x52, 0x55, 0x55, 0x61, 0xbd, 0xda, 0x22, 0xcb, 0x72, 0xb4, 0x2d, 0x05, 0x87, 0xc5, 0xc7, 0x13, 0xa2, 0x88, 0x48, 0xa1, 0x49, 0x96, 0x62, 0xbf, 0x8f, 0x11, 0x86, 0x2e, 0x16, 0xe7, 0x94, 0x58, 0x99, 0x67, 0x84, 0x7a, 0x19, 0x9a, 0x86, 0xba, 0xac, 0xd0, 0xd6, 0x0d, 0x06, 0x72, 0xff, 0x2e, 0xb2, 0x1c, 0x45, 0x45, 0x51, 0xc7, 0xb5, 0x68, 0xb0, 0x3d, 0xec, 0x51, 0x56, 0x15, 0x02, 0x69, 0x31, 0x0d, 0x69, 0x40, 0x56, 0xe6, 0xb2, 0x89, 0xeb, 0x00, 0xcf, 0x75, 0xe1, 0x3b, 0x2e, 0x2c, 0x83, 0x0a, 0xb6, 0x34, 0x2b, 0x15, 0xb2, 0xc0, 0x08, 0xa9, 0xc9, 0x30, 0x67, 0xdf, 0x09, 0x8c, 0xe7, 0x11, 0x7d, 0x57, 0x37, 0xde, 0xa8, 0x3e, 0x8f, 0x43, 0xed, 0x9b, 0xd3, 0x7f, 0xde, 0xad, 0x7f, 0x6e, 0x56, 0xf3, 0xb9, 0x1b, 0x9c, 0x68, 0xba, 0x27, 0x2e, 0x71, 0x3c, 0x8f, 0xe7, 0x8a, 0x9d, 0xc3, 0x2c, 0x3e, 0xd7, 0xa0, 0xf3, 0x03, 0x2e, 0xeb, 0x42, 0xa5, 0xab, 0x19, 0xf2, 0x65, 0x33, 0xa0, 0x93, 0x6c, 0x4d, 0xeb, 0xd0, 0x54, 0x15, 0xaa, 0x32, 0x41, 0x9c, 0xec, 0x70, 0x8a, 0xb7, 0x28, 0x8a, 0x03, 0xda, 0x2e, 0x83, 0x65, 0x00, 0xa6, 0x05, 0xb8, 0x72, 0x71, 0x43, 0x18, 0x28, 0x33, 0x0a, 0x18, 0x28, 0x72, 0x22, 0x38, 0x0d, 0xa3, 0x00, 0xb0, 0x1c, 0xe9, 0x8d, 0xee, 0xcb, 0xb9, 0xa6, 0xf9, 0xe8, 0x73, 0xaf, 0x5b, 0xb0, 0x1d, 0x1d, 0x59, 0x56, 0x48, 0x86, 0x75, 0x01, 0xc3, 0xa4, 0x4e, 0x6d, 0x34, 0x1a, 0x61, 0x32, 0x99, 0xc0, 0x68, 0x75, 0xe4, 0x05, 0x93, 0x1d, 0x5c, 0xe9, 0x2d, 0x2f, 0xe0, 0x07, 0x26, 0xc6, 0x93, 0x73, 0x94, 0x45, 0x27, 0x21, 0x5c, 0x1d, 0xa7, 0x53, 0x8d, 0xc3, 0x61, 0xa7, 0x48, 0x45, 0x9a, 0xa6, 0x61, 0x34, 0x1a, 0xaa, 0x43, 0x8a, 0x0e, 0x54, 0x17, 0xae, 0xeb, 0xa0, 0xeb, 0x5a, 0x64, 0x19, 0x15, 0x0e, 0x65, 0x19, 0x02, 0x68, 0x15, 0x4c, 0xe7, 0x38, 0x16, 0x4c, 0x53, 0x47, 0x55, 0x15, 0x68, 0xbb, 0x0a, 0x45, 0x91, 0xc9, 0x34, 0xb6, 0x01, 0x06, 0x83, 0x40, 0xc1, 0xe5, 0xa6, 0x69, 0xa2, 0x4a, 0x4b, 0xcc, 0x66, 0x33, 0x4c, 0xa7, 0x53, 0xca, 0xa3, 0xfe, 0xf0, 0x1e, 0x1f, 0x3f, 0x7e, 0x44, 0x10, 0x04, 0xe4, 0xd0, 0x66, 0x9a, 0xb0, 0x0d, 0x1d, 0x8d, 0x69, 0x20, 0x0c, 0x03, 0x35, 0xa3, 0x63, 0x68, 0xb5, 0xa9, 0xe9, 0x39, 0x12, 0xcc, 0x9f, 0xa3, 0xaa, 0x80, 0xb2, 0xa4, 0x6e, 0x71, 0x3e, 0x1f, 0xaa, 0x6a, 0x9c, 0x79, 0x1a, 0xac, 0xe7, 0x76, 0x5d, 0x97, 0x4c, 0x13, 0x04, 0xf9, 0x6c, 0xa3, 0xed, 0x50, 0xd5, 0x25, 0xda, 0x46, 0x40, 0xf3, 0x68, 0xe3, 0xd1, 0x41, 0xda, 0xd0, 0xcd, 0x7a, 0x8d, 0xcd, 0x7a, 0xfd, 0x24, 0xbe, 0x54, 0x34, 0x0d, 0xae, 0x3f, 0x7c, 0x80, 0x3f, 0x78, 0x34, 0xc9, 0xe1, 0x51, 0x11, 0x6f, 0x30, 0x71, 0x1c, 0xe3, 0xd9, 0xd5, 0x0b, 0x45, 0xd6, 0x63, 0xfe, 0x07, 0xcf, 0xb0, 0xc3, 0x30, 0x44, 0x9e, 0x35, 0x30, 0x74, 0xa0, 0x2a, 0x5b, 0xdc, 0xdf, 0xed, 0x51, 0xd7, 0x7b, 0xec, 0x36, 0xa9, 0x22, 0x67, 0xd5, 0x22, 0xc7, 0xdd, 0x1d, 0xd9, 0xb9, 0x02, 0xc0, 0x74, 0x3a, 0x55, 0x5a, 0x7b, 0xd3, 0xb4, 0x94, 0x84, 0x8b, 0x8b, 0x51, 0x2e, 0xec, 0x28, 0xc3, 0xbe, 0xc0, 0x7c, 0xee, 0x2b, 0x57, 0x38, 0x76, 0xef, 0x4a, 0x92, 0x44, 0xcd, 0xc8, 0x9b, 0xba, 0x51, 0x1b, 0x78, 0xd3, 0x34, 0x38, 0x1e, 0x62, 0x24, 0x71, 0xa6, 0xae, 0xa1, 0xaa, 0x2a, 0xec, 0xb6, 0x07, 0x9c, 0x9d, 0x9d, 0x61, 0x32, 0x99, 0xe1, 0xd9, 0xb3, 0x67, 0x08, 0xc3, 0x10, 0xbf, 0xff, 0xfd, 0xef, 0xf1, 0xd3, 0x8f, 0x6f, 0x51, 0xd5, 0xc0, 0xaf, 0x7f, 0xfd, 0x06, 0xaf, 0x5f, 0xbf, 0xa4, 0x7b, 0x5b, 0xe6, 0x2a, 0x6a, 0xd4, 0x30, 0x1c, 0xe5, 0xc0, 0xc6, 0x30, 0xb8, 0xe3, 0x50, 0x31, 0xb9, 0xdf, 0x1d, 0x95, 0x6f, 0xfc, 0xc3, 0xc3, 0x03, 0x9a, 0xa6, 0xc1, 0x72, 0xb9, 0xc4, 0xd5, 0xd5, 0x95, 0x2a, 0x16, 0xba, 0xae, 0xc3, 0xfb, 0x77, 0xd7, 0x6a, 0xa4, 0xc3, 0xae, 0x75, 0x75, 0xdd, 0xa8, 0x91, 0x0c, 0xcf, 0xf4, 0xf8, 0x7a, 0x84, 0x10, 0xf8, 0xf0, 0xe1, 0x83, 0x92, 0xfa, 0x5d, 0x7f, 0xb8, 0x57, 0xb2, 0xcc, 0x34, 0xcd, 0x14, 0x52, 0xa3, 0x4b, 0x1b, 0xcc, 0x97, 0xaf, 0x5f, 0xaa, 0x34, 0x3f, 0xb2, 0x45, 0xdd, 0x49, 0x92, 0x5e, 0x87, 0xaa, 0x02, 0xaa, 0x72, 0x0d, 0xdb, 0x06, 0x2e, 0x2f, 0xcf, 0x65, 0xec, 0xae, 0x8f, 0xcb, 0x2b, 0x1b, 0xcb, 0x65, 0x07, 0xcf, 0x0b, 0xf0, 0xdd, 0xcf, 0x3f, 0xa0, 0xa8, 0x2b, 0xd8, 0x52, 0xc6, 0x59, 0xb7, 0x35, 0x84, 0xd6, 0xc9, 0x9f, 0xf7, 0xe8, 0xa8, 0x47, 0x90, 0x39, 0xd0, 0xca, 0x7d, 0xc9, 0x92, 0xc5, 0xdd, 0x57, 0x5f, 0x5d, 0xd1, 0xbe, 0x67, 0xe9, 0x30, 0x6c, 0x0d, 0x9d, 0xd6, 0x41, 0x6f, 0x49, 0xa2, 0x0a, 0xbd, 0x43, 0x1a, 0x67, 0xd0, 0x42, 0x5a, 0xbf, 0xb6, 0x29, 0xdd, 0xf9, 0x1a, 0x81, 0x4a, 0x1a, 0xcb, 0xb4, 0x26, 0xa1, 0x00, 0x65, 0x4d, 0xa8, 0x62, 0xd3, 0x51, 0xea, 0xdf, 0xd5, 0xe5, 0x25, 0x06, 0x51, 0x84, 0xff, 0xfb, 0x3f, 0xfd, 0x27, 0x3c, 0xbb, 0xb8, 0xc4, 0x5f, 0xfc, 0x05, 0x29, 0x39, 0x36, 0x9b, 0x0d, 0x3e, 0x7e, 0xfc, 0x88, 0x28, 0x0c, 0x71, 0x76, 0x76, 0x86, 0x87, 0xbb, 0x15, 0x9a, 0xba, 0x86, 0x34, 0x31, 0x44, 0xe8, 0x6b, 0x08, 0xfd, 0x00, 0x97, 0x97, 0x97, 0x94, 0xf7, 0xfe, 0xe1, 0x67, 0xbc, 0xfb, 0xf9, 0xad, 0xea, 0x50, 0x5d, 0xd7, 0x45, 0x59, 0x70, 0x51, 0xb5, 0xc6, 0x5f, 0xfc, 0xe5, 0x6f, 0xe4, 0x5a, 0xdb, 0x63, 0xb5, 0x5a, 0x29, 0xe9, 0x12, 0x37, 0x11, 0x3a, 0x34, 0x44, 0xe1, 0x40, 0x19, 0x20, 0x6d, 0x36, 0x1b, 0x1c, 0x64, 0x02, 0x22, 0xd9, 0xee, 0xba, 0xd8, 0x6d, 0x0b, 0xdc, 0xdf, 0x6f, 0xa0, 0x2f, 0x3a, 0xb8, 0xb6, 0xb4, 0x93, 0x4e, 0x62, 0x3c, 0xac, 0x53, 0xfc, 0xf6, 0x0f, 0x07, 0xfc, 0xdb, 0xbf, 0x1c, 0x60, 0xb9, 0x5c, 0x22, 0xcb, 0x32, 0xbc, 0xdb, 0x1f, 0xd0, 0x14, 0x25, 0xea, 0xac, 0x80, 0xae, 0x69, 0xf8, 0xd5, 0xd7, 0xaf, 0xe4, 0x7b, 0xa7, 0xc1, 0x30, 0xa8, 0xe1, 0x08, 0x02, 0x4f, 0x79, 0x67, 0xec, 0x76, 0x1b, 0x98, 0xa6, 0x8e, 0x6f, 0xbe, 0x79, 0x83, 0xbf, 0xfa, 0xab, 0xbf, 0x50, 0x08, 0x23, 0xef, 0xe7, 0x0f, 0xc7, 0x35, 0x2c, 0xd7, 0x7e, 0x84, 0xb9, 0x5d, 0x42, 0x68, 0xce, 0xcf, 0xcf, 0xe9, 0xfd, 0x3c, 0x9c, 0x9e, 0x64, 0x3f, 0xec, 0x76, 0x44, 0x0e, 0xae, 0x9b, 0x0a, 0xa2, 0x6d, 0xb0, 0x3f, 0x26, 0x8a, 0xab, 0xd3, 0x77, 0x2b, 0x65, 0xa4, 0xc7, 0x36, 0x4d, 0x4c, 0xc7, 0x63, 0x58, 0x86, 0x81, 0xe3, 0x31, 0x86, 0x6b, 0xdb, 0x98, 0x48, 0x2e, 0xcd, 0x6e, 0xb3, 0x81, 0x06, 0x0d, 0xbe, 0xb4, 0xac, 0x76, 0x1c, 0x47, 0xfd, 0x0c, 0x21, 0x04, 0xd0, 0x75, 0x18, 0x45, 0xc4, 0x05, 0x22, 0x4f, 0x01, 0x7a, 0xae, 0xa6, 0x69, 0x42, 0xd7, 0x0c, 0xc9, 0x5e, 0xbf, 0x26, 0x82, 0xb2, 0xf4, 0xf3, 0xd7, 0x49, 0x4f, 0x05, 0x03, 0x1a, 0x1c, 0xd3, 0x82, 0xe6, 0x1b, 0x0a, 0xd9, 0x34, 0x0c, 0x69, 0x94, 0x23, 0xa1, 0x77, 0xb6, 0x86, 0x06, 0x00, 0xcd, 0xa0, 0x31, 0xd7, 0x29, 0xae, 0x21, 0xd0, 0xc9, 0x7c, 0x00, 0x2a, 0x22, 0x9a, 0x8a, 0x88, 0x7f, 0xa2, 0xaa, 0x61, 0xb3, 0x2b, 0xa5, 0xa6, 0x4b, 0xeb, 0xe8, 0xb9, 0xea, 0xf0, 0x09, 0x45, 0xb7, 0x61, 0xf2, 0xc0, 0xbf, 0x7f, 0xd0, 0x32, 0xe4, 0xfd, 0x68, 0x41, 0xa9, 0x3f, 0xe9, 0x9e, 0xb8, 0x83, 0x2a, 0x8b, 0xec, 0x17, 0x1d, 0x8c, 0x94, 0xac, 0xa9, 0xd7, 0x8d, 0xf7, 0x63, 0x56, 0x19, 0x56, 0x77, 0x6c, 0xef, 0x49, 0x07, 0xda, 0x27, 0xaf, 0xf0, 0xef, 0xed, 0x7f, 0xae, 0x7e, 0x38, 0x88, 0xae, 0xeb, 0xf0, 0x03, 0x57, 0x91, 0x30, 0xe8, 0x85, 0x25, 0x2f, 0x66, 0x2e, 0x32, 0xea, 0xfc, 0x80, 0x46, 0xd4, 0x80, 0xd6, 0xc0, 0x76, 0x00, 0xc3, 0xb4, 0xa0, 0x1b, 0x3e, 0x7c, 0xd7, 0x80, 0xe3, 0x5a, 0xd8, 0xaf, 0x6e, 0xa5, 0x2e, 0xb7, 0x83, 0x63, 0x69, 0x08, 0x43, 0x1f, 0x51, 0x14, 0xc2, 0xe7, 0x04, 0x29, 0x6f, 0xac, 0x18, 0xf4, 0x9a, 0xa6, 0x4b, 0xc6, 0x39, 0xc9, 0xd0, 0x4c, 0xb3, 0xc5, 0xf1, 0x6e, 0x4d, 0x1b, 0x9a, 0xef, 0x20, 0x18, 0x84, 0x80, 0xb4, 0x58, 0x6c, 0x6b, 0xba, 0x76, 0xdf, 0xb4, 0x31, 0x1c, 0x0e, 0x64, 0xe0, 0x49, 0x8d, 0x2c, 0x4f, 0x10, 0x27, 0xb1, 0x82, 0xde, 0x17, 0xf3, 0x17, 0xd8, 0x6e, 0xb7, 0xd0, 0xb4, 0x4e, 0x11, 0xaf, 0x8e, 0x52, 0x4f, 0x7a, 0x76, 0xbe, 0x40, 0x96, 0x99, 0xea, 0x5e, 0x71, 0x05, 0x46, 0xf0, 0x1d, 0x9b, 0xbd, 0xe8, 0x2a, 0x4c, 0x85, 0xc7, 0x23, 0x7c, 0xff, 0x8b, 0xa2, 0x80, 0x65, 0x6b, 0xca, 0x55, 0x8d, 0x2b, 0x51, 0xee, 0x84, 0x35, 0x4d, 0xc3, 0x34, 0x9a, 0x28, 0x43, 0x14, 0xf6, 0x89, 0xef, 0xcb, 0x08, 0xb3, 0x2c, 0x53, 0xbe, 0xef, 0x42, 0x08, 0x3c, 0x3c, 0x3c, 0xa8, 0x03, 0xa0, 0xaa, 0x2a, 0x9c, 0x92, 0x42, 0x92, 0x02, 0x73, 0xe8, 0x3a, 0x30, 0x18, 0x58, 0x30, 0xcd, 0x1a, 0x8e, 0x63, 0xa8, 0x38, 0x50, 0x3e, 0x88, 0x09, 0x22, 0x7e, 0x74, 0x6f, 0xab, 0xaa, 0x0a, 0x96, 0xf6, 0x48, 0x96, 0xe4, 0x71, 0x4b, 0x7f, 0x24, 0x93, 0x66, 0xb1, 0x42, 0x0b, 0xf8, 0xd9, 0x73, 0x07, 0xca, 0xf3, 0x41, 0x96, 0xb4, 0xf1, 0x21, 0xc4, 0x71, 0x9e, 0x7d, 0x14, 0x44, 0x08, 0x81, 0xeb, 0xeb, 0x6b, 0x24, 0x49, 0xa2, 0xd8, 0xf6, 0x75, 0x5d, 0x63, 0x10, 0xce, 0x60, 0x59, 0x1a, 0xa6, 0xd3, 0x39, 0x5a, 0xa1, 0xe1, 0xe3, 0xc7, 0x4f, 0xf8, 0xfe, 0xfb, 0x1d, 0xde, 0xbf, 0xdf, 0x61, 0x32, 0x71, 0x51, 0x54, 0x05, 0xce, 0xce, 0x28, 0x5b, 0xba, 0x6d, 0x29, 0xbb, 0xfb, 0xe5, 0xcb, 0x97, 0x6a, 0xce, 0xd7, 0x4a, 0x98, 0x9e, 0xad, 0x69, 0xd9, 0xa8, 0x84, 0x50, 0x89, 0x13, 0x99, 0x0b, 0xe5, 0xb9, 0x32, 0xef, 0xe1, 0xeb, 0x13, 0x42, 0x20, 0x8e, 0x63, 0x0c, 0xc2, 0xb1, 0xea, 0xea, 0xfb, 0xd2, 0x51, 0x36, 0xdd, 0x89, 0xe3, 0x5c, 0x6d, 0x06, 0xdb, 0xed, 0x16, 0xef, 0xdf, 0xbf, 0x87, 0xa6, 0x69, 0xb8, 0xbb, 0xbb, 0x43, 0x1c, 0x37, 0x28, 0x4a, 0x60, 0xb1, 0xa8, 0x90, 0xe7, 0x64, 0xad, 0x69, 0x9a, 0x3a, 0x26, 0x93, 0x09, 0x7c, 0x9f, 0x90, 0x85, 0x9f, 0x7e, 0x24, 0xc2, 0x59, 0x34, 0x0c, 0x71, 0x7e, 0x7e, 0x21, 0x4d, 0x91, 0x04, 0x5c, 0x97, 0xf2, 0xdc, 0x6f, 0x6e, 0x6e, 0x61, 0x9a, 0x36, 0x5c, 0xd7, 0x97, 0xc4, 0x37, 0x13, 0x86, 0xd1, 0xc2, 0xf7, 0xe9, 0x40, 0x88, 0xe3, 0xa3, 0xec, 0x00, 0x0c, 0xc4, 0x31, 0x41, 0xba, 0x80, 0xa6, 0xae, 0x29, 0xf4, 0x03, 0xd5, 0x1d, 0xb2, 0x25, 0x31, 0x17, 0x6d, 0xb4, 0x5f, 0xf8, 0xd8, 0x6e, 0xb7, 0x58, 0xad, 0xb6, 0x28, 0x0a, 0x60, 0x38, 0x34, 0x15, 0x69, 0x72, 0x32, 0x99, 0x40, 0x20, 0x95, 0xa9, 0x80, 0x3b, 0xe5, 0x36, 0xc6, 0xc4, 0xcc, 0xf5, 0x7a, 0x8d, 0xeb, 0xf7, 0x31, 0x1c, 0xc7, 0x40, 0x18, 0x46, 0x28, 0x8a, 0x4c, 0x1a, 0x05, 0x51, 0x82, 0x5b, 0x12, 0xa7, 0x78, 0xf3, 0xe6, 0x2b, 0x7c, 0xba, 0xbf, 0x23, 0x9e, 0x87, 0x01, 0x08, 0x08, 0x68, 0xb6, 0x44, 0x6c, 0x7a, 0x4d, 0x84, 0xae, 0xeb, 0xd0, 0xda, 0x2f, 0xd1, 0xc2, 0xe3, 0xf1, 0x48, 0xef, 0x45, 0xe0, 0x22, 0xf4, 0x7c, 0x58, 0x8e, 0x05, 0xbd, 0x02, 0x8e, 0x49, 0x8e, 0xa2, 0xc8, 0xf0, 0xf2, 0xe5, 0x73, 0x82, 0x3b, 0x3b, 0xa0, 0xaa, 0x6a, 0xd5, 0x29, 0x69, 0x12, 0x46, 0x65, 0x78, 0x39, 0x08, 0x02, 0x1c, 0x4e, 0x47, 0xdc, 0x7f, 0xba, 0x45, 0x25, 0x58, 0x81, 0x32, 0xc1, 0x8b, 0x17, 0xcf, 0xd1, 0x94, 0x15, 0xd6, 0x6b, 0xd2, 0xeb, 0xff, 0xea, 0xab, 0xaf, 0xe0, 0xb8, 0x36, 0xb4, 0xb6, 0xc3, 0x77, 0xdf, 0xfd, 0x2b, 0xaa, 0x82, 0x48, 0x70, 0xdf, 0x7c, 0xb3, 0xc4, 0x48, 0x1a, 0x0b, 0x91, 0x62, 0x85, 0x78, 0x0d, 0x7c, 0xf0, 0x2e, 0x97, 0x4b, 0x59, 0xa4, 0x57, 0xd0, 0xf4, 0x0e, 0xaf, 0x5f, 0xbf, 0xc6, 0xcb, 0x97, 0x2f, 0xb1, 0xde, 0xec, 0x14, 0xdc, 0xbc, 0xdf, 0x13, 0x9c, 0xff, 0xf6, 0xed, 0x03, 0x5e, 0xbf, 0x5e, 0x92, 0xa7, 0x7f, 0xdb, 0xa9, 0xc2, 0x6d, 0x34, 0x1a, 0xa9, 0x43, 0x84, 0x8b, 0xda, 0xab, 0xab, 0x2b, 0xcc, 0xa6, 0x39, 0x02, 0xdb, 0x85, 0x67, 0xd9, 0xc8, 0x92, 0x54, 0xa5, 0x8c, 0x35, 0x6d, 0x0b, 0x7f, 0x4c, 0xa3, 0x58, 0xd6, 0x94, 0x73, 0x0c, 0xed, 0x64, 0x30, 0xc4, 0xd7, 0x6f, 0xde, 0xa0, 0xd3, 0x1a, 0x45, 0x2a, 0xeb, 0x23, 0x74, 0xac, 0x0c, 0x79, 0x3a, 0x86, 0x32, 0x65, 0x1e, 0xc0, 0x46, 0x8d, 0xee, 0x84, 0x25, 0x00, 0x74, 0x28, 0xcb, 0x1c, 0xbb, 0x5d, 0x0c, 0xd7, 0x35, 0xa4, 0x74, 0x94, 0xd6, 0xde, 0x6c, 0x34, 0x7e, 0xe2, 0x18, 0xc8, 0x7b, 0xff, 0x23, 0x47, 0xc9, 0x57, 0x08, 0x21, 0xbb, 0x08, 0x2a, 0x43, 0x98, 0xa6, 0x81, 0xa5, 0x5b, 0x2a, 0xb8, 0x8a, 0xc9, 0xa9, 0x5c, 0xb0, 0x7a, 0x9e, 0x87, 0x56, 0x22, 0xc4, 0x6c, 0xb8, 0xa5, 0x46, 0xc9, 0x2a, 0x2e, 0xbc, 0xc1, 0xe1, 0x70, 0x82, 0x10, 0x42, 0xa1, 0x0e, 0x00, 0x90, 0xa4, 0x14, 0x35, 0x1c, 0x85, 0x03, 0x24, 0x59, 0x8a, 0xd9, 0x8c, 0x62, 0x98, 0xb7, 0xd2, 0x21, 0x8f, 0x3d, 0xdc, 0xc3, 0xd0, 0x87, 0x26, 0x09, 0xca, 0x9e, 0xe3, 0x22, 0x8b, 0x13, 0xdc, 0x7e, 0xfa, 0x04, 0xad, 0x23, 0x4f, 0xf6, 0x63, 0x4c, 0xb3, 0xf7, 0xa6, 0x15, 0xf0, 0x03, 0x1f, 0xd3, 0x99, 0x0f, 0x4d, 0x16, 0x89, 0x59, 0x96, 0x91, 0x45, 0xf5, 0x80, 0xd0, 0x88, 0x2a, 0x2f, 0x20, 0x24, 0x62, 0x5e, 0xd6, 0xd2, 0x4f, 0xa2, 0xc6, 0x13, 0x0e, 0x4e, 0x51, 0x14, 0xd0, 0xfe, 0xfd, 0xff, 0xf4, 0x1f, 0xbb, 0xfe, 0xbc, 0x93, 0xe5, 0x43, 0xac, 0x17, 0xfe, 0xdc, 0x2e, 0x90, 0x5f, 0x12, 0xb2, 0x54, 0x14, 0xff, 0xc5, 0xf8, 0x53, 0x3a, 0xa0, 0x9f, 0x76, 0xec, 0x9f, 0xc3, 0xf7, 0xba, 0x99, 0xcb, 0xef, 0xd1, 0x15, 0x91, 0xad, 0xef, 0xf8, 0x56, 0x09, 0x03, 0xa2, 0xad, 0x15, 0x99, 0xc7, 0x30, 0x2c, 0xb2, 0xe9, 0xd3, 0x2d, 0x18, 0xba, 0x85, 0x22, 0xde, 0xc2, 0xf3, 0x2d, 0xd8, 0x66, 0x07, 0x51, 0x27, 0xd0, 0xb5, 0x12, 0xba, 0x5e, 0x20, 0x4b, 0xf6, 0x38, 0xec, 0xd7, 0x28, 0xc5, 0x3d, 0xd0, 0x0a, 0x68, 0x9d, 0x80, 0xeb, 0x58, 0x08, 0x5c, 0x07, 0x86, 0xae, 0x21, 0x89, 0x8f, 0x38, 0xed, 0x63, 0x24, 0x95, 0xa1, 0xe6, 0xaf, 0x3c, 0xff, 0xe1, 0x45, 0x69, 0x18, 0x06, 0xfc, 0xc0, 0x51, 0x0c, 0x74, 0x3e, 0x40, 0xd8, 0x55, 0x6b, 0xbf, 0xdf, 0x23, 0x08, 0x02, 0x35, 0x43, 0xe5, 0x84, 0x33, 0x36, 0x06, 0x99, 0x4c, 0x26, 0x70, 0x3d, 0xf3, 0x89, 0x7e, 0x9f, 0x6d, 0x4d, 0x19, 0x02, 0xae, 0xaa, 0x02, 0x6d, 0x4b, 0x1b, 0x5a, 0xdb, 0xb6, 0x98, 0xce, 0x18, 0x4e, 0x25, 0xad, 0xa9, 0xeb, 0xba, 0xca, 0x16, 0x92, 0x0f, 0x43, 0x26, 0x5f, 0x55, 0x55, 0x85, 0xe7, 0xcf, 0xaf, 0xd4, 0x61, 0x97, 0xa6, 0xa9, 0xf2, 0xf9, 0xe6, 0x8d, 0x95, 0x17, 0xf6, 0x76, 0xbb, 0x45, 0x14, 0x45, 0x88, 0xa2, 0x48, 0x1d, 0xac, 0xa3, 0xd1, 0x48, 0x55, 0xcb, 0x6c, 0x4e, 0x73, 0x7f, 0x4f, 0x33, 0x99, 0xe1, 0x70, 0x88, 0xc9, 0x64, 0x82, 0xba, 0xee, 0x94, 0xbe, 0x78, 0xb7, 0xdb, 0xa9, 0x98, 0x55, 0x9e, 0x8b, 0xb7, 0x95, 0x81, 0x38, 0xae, 0xa5, 0x43, 0xdd, 0xf0, 0x89, 0x2d, 0xed, 0xf1, 0x58, 0xc0, 0xb1, 0x48, 0x42, 0xe8, 0x79, 0xa6, 0x8a, 0x35, 0xe5, 0x79, 0x79, 0x18, 0x86, 0x68, 0x1a, 0x9a, 0xef, 0x73, 0xc4, 0xa4, 0x21, 0x59, 0xc3, 0x9a, 0x06, 0xe9, 0x81, 0x5e, 0xcb, 0x22, 0x06, 0x98, 0x4e, 0x09, 0x35, 0x60, 0x36, 0xa7, 0xe3, 0x38, 0xb0, 0x2d, 0x43, 0x75, 0xfe, 0x7c, 0x20, 0x5c, 0x5c, 0x5c, 0xa8, 0x08, 0xd4, 0xc9, 0x64, 0x82, 0x1f, 0x7e, 0xf8, 0x01, 0x87, 0xc3, 0x41, 0x59, 0xa0, 0xf6, 0xd3, 0xd5, 0x34, 0xa3, 0x83, 0x65, 0xd9, 0x48, 0x92, 0x0c, 0xab, 0x87, 0x0d, 0x92, 0x24, 0x47, 0xdb, 0x51, 0x52, 0xd3, 0x60, 0xe0, 0xc3, 0xb2, 0x6c, 0x55, 0x40, 0xb0, 0xce, 0x9d, 0x37, 0xd8, 0x28, 0x8a, 0x70, 0x77, 0x77, 0xf7, 0x24, 0xfa, 0x95, 0xd1, 0x02, 0x82, 0xc3, 0x1f, 0xd4, 0xe8, 0x81, 0xb5, 0xe4, 0x5c, 0x48, 0xf0, 0xe1, 0x6f, 0x99, 0x9e, 0x2a, 0x40, 0xfa, 0xf6, 0xac, 0x8c, 0x80, 0x30, 0x42, 0xc6, 0xcf, 0x91, 0xc9, 0x6a, 0xa7, 0xd3, 0x89, 0x64, 0x2f, 0xd2, 0x30, 0x84, 0xaf, 0x8b, 0x4d, 0x3c, 0xb8, 0xc8, 0xdb, 0xac, 0x8f, 0xa8, 0x9b, 0x02, 0x61, 0xe8, 0xc3, 0x0f, 0xc8, 0x32, 0x15, 0x9d, 0x89, 0x22, 0xaf, 0x71, 0x77, 0xb7, 0x46, 0x51, 0x95, 0xb8, 0xb8, 0x98, 0xa1, 0x03, 0xc5, 0xa6, 0x4e, 0xa7, 0x63, 0x14, 0x45, 0xa1, 0xe0, 0xfe, 0xd0, 0xb3, 0x15, 0xbc, 0xb9, 0x5e, 0xaf, 0x95, 0xcb, 0x1f, 0xaf, 0xb5, 0xbc, 0xaa, 0x95, 0x21, 0xce, 0xf5, 0xf5, 0x35, 0xee, 0xef, 0x13, 0x44, 0x91, 0xae, 0xc6, 0x06, 0x81, 0x67, 0x4b, 0xf4, 0xa6, 0xc4, 0x60, 0xe0, 0x20, 0x8a, 0x22, 0x74, 0x1d, 0x15, 0x8e, 0x2f, 0x5f, 0xbe, 0x44, 0xab, 0x51, 0xd7, 0xda, 0xcf, 0x6e, 0xd0, 0x34, 0x22, 0x20, 0xf1, 0xbe, 0xc2, 0x85, 0x2a, 0xc5, 0xa8, 0x3e, 0xea, 0xf9, 0x8b, 0xa2, 0xc0, 0xb1, 0xc8, 0xb0, 0xdf, 0x1f, 0x10, 0x46, 0x21, 0xdc, 0x30, 0x40, 0x18, 0x0d, 0x70, 0x48, 0x62, 0x18, 0x16, 0x7d, 0x8d, 0x1f, 0xb9, 0x88, 0xe3, 0x18, 0x81, 0xeb, 0x21, 0x70, 0x3c, 0x24, 0xa7, 0x13, 0x44, 0xdd, 0xc0, 0x77, 0x5c, 0x68, 0x00, 0x42, 0x93, 0xf2, 0xbb, 0x4f, 0x87, 0x83, 0x22, 0x7d, 0xb1, 0x15, 0xad, 0xe7, 0xb8, 0x28, 0xb4, 0x0a, 0xcb, 0xe5, 0x12, 0xc7, 0x24, 0xc6, 0x87, 0xeb, 0x6b, 0x94, 0x75, 0x85, 0x4a, 0x90, 0x71, 0xcf, 0xc5, 0xe5, 0x25, 0x26, 0xfa, 0x40, 0x16, 0xe4, 0x1a, 0x2e, 0x2f, 0x2f, 0xb1, 0xdb, 0xed, 0xf0, 0xfd, 0xf7, 0xdf, 0x2b, 0xf7, 0xb9, 0x7d, 0x96, 0x21, 0x0c, 0x7d, 0x1c, 0x4f, 0x7b, 0x9c, 0x4e, 0x47, 0x19, 0xd2, 0x13, 0x91, 0xb3, 0x64, 0x2d, 0xd0, 0x94, 0x27, 0x35, 0x92, 0xe1, 0xe8, 0x5d, 0x3e, 0x50, 0x27, 0x93, 0x89, 0x2a, 0xe6, 0x98, 0x1c, 0xbc, 0xdb, 0xed, 0x30, 0x1a, 0x8d, 0xd4, 0x3a, 0xbf, 0xbe, 0xfb, 0x88, 0x8f, 0x1f, 0x3f, 0x2a, 0xdb, 0xe0, 0x3f, 0xfb, 0xb3, 0x3f, 0x53, 0xd9, 0x0c, 0x5c, 0x44, 0x8e, 0x46, 0x23, 0x45, 0xda, 0xd2, 0x75, 0x1d, 0xeb, 0xf5, 0x1a, 0x71, 0x1c, 0xe3, 0xea, 0xea, 0x0a, 0xd9, 0x8e, 0xbe, 0xae, 0xeb, 0x3a, 0x6c, 0x36, 0xc4, 0xf1, 0xe1, 0xf0, 0xa7, 0x3c, 0xcf, 0x51, 0x56, 0xa9, 0xe2, 0x0e, 0x70, 0x64, 0x2b, 0x3f, 0x93, 0xaa, 0xaa, 0x30, 0x99, 0x0e, 0xc8, 0x00, 0xc9, 0xb2, 0xb0, 0xdd, 0x6e, 0x55, 0x81, 0xc4, 0xfb, 0x14, 0x9f, 0x0b, 0x4c, 0xc6, 0x3b, 0x1c, 0x0e, 0xca, 0xfa, 0xd5, 0xf7, 0x7d, 0x15, 0xfb, 0x99, 0x65, 0xd9, 0x93, 0x83, 0x9b, 0x55, 0x29, 0xf3, 0xf9, 0x5c, 0x15, 0x20, 0xdc, 0x24, 0x32, 0x5f, 0xc0, 0xb6, 0x6d, 0x64, 0x79, 0xa7, 0x72, 0xde, 0x79, 0x9f, 0x3e, 0xc4, 0x27, 0x45, 0x94, 0xe3, 0xc6, 0xd0, 0x71, 0x1c, 0x9c, 0xf6, 0x07, 0x84, 0x61, 0x88, 0xf3, 0xf3, 0x73, 0xdc, 0xdf, 0xd2, 0x08, 0x20, 0x18, 0x84, 0x8a, 0xf0, 0xcb, 0xe8, 0x1e, 0x37, 0xa7, 0x75, 0x5d, 0x63, 0xb7, 0x3d, 0x2a, 0xb5, 0x07, 0xab, 0x4c, 0xf8, 0xb3, 0x44, 0x51, 0x04, 0x4f, 0x72, 0x3c, 0x9a, 0xa6, 0x51, 0x05, 0x3b, 0x3f, 0x8f, 0xc3, 0x21, 0xc1, 0x7f, 0xf8, 0x0f, 0xff, 0x33, 0x2c, 0xcb, 0x92, 0x4e, 0x87, 0x6f, 0x29, 0xff, 0x42, 0xaa, 0x02, 0xe2, 0x38, 0x86, 0x30, 0x0d, 0xe8, 0x1d, 0x50, 0x16, 0x39, 0x00, 0x32, 0x9b, 0x32, 0x3d, 0x0b, 0x2d, 0x04, 0x0c, 0xcb, 0x44, 0x21, 0xf3, 0x29, 0x9a, 0xb2, 0x81, 0xa8, 0x5b, 0x38, 0xba, 0x89, 0x40, 0x77, 0x50, 0xa7, 0x05, 0xe2, 0xdd, 0x01, 0x66, 0x30, 0xa0, 0x4c, 0x0a, 0xdf, 0x57, 0x6a, 0x28, 0x93, 0x59, 0x84, 0x8f, 0x44, 0x16, 0xa3, 0x37, 0xc3, 0x6c, 0xbe, 0x08, 0x36, 0xe9, 0xa7, 0x93, 0x69, 0xc6, 0xa3, 0x0d, 0x5e, 0xd7, 0x71, 0xb4, 0x1c, 0xc9, 0xc7, 0xd0, 0x01, 0xa2, 0xf9, 0x92, 0x1c, 0xd7, 0x97, 0xb1, 0xe5, 0x49, 0x23, 0x21, 0x76, 0x1d, 0xa6, 0x29, 0x59, 0x86, 0x6d, 0xa7, 0xa2, 0x36, 0x85, 0x6e, 0x41, 0xd3, 0x3b, 0x65, 0xd8, 0x4f, 0x2f, 0x73, 0x8d, 0x3c, 0x4f, 0x51, 0x95, 0x0d, 0xce, 0xc6, 0x0e, 0xda, 0xae, 0x46, 0x5d, 0x65, 0x28, 0xcb, 0x23, 0xf4, 0xae, 0x00, 0xda, 0x1c, 0x49, 0xba, 0x43, 0x9a, 0x1d, 0x20, 0x90, 0x63, 0x32, 0x1a, 0x63, 0x38, 0x08, 0xd0, 0x8a, 0x1a, 0xc9, 0xf1, 0x80, 0x3c, 0x4b, 0xd1, 0x54, 0x35, 0x0c, 0x03, 0xaa, 0xea, 0xeb, 0x17, 0x1b, 0xfd, 0x0d, 0xb6, 0xac, 0x32, 0x85, 0x14, 0xf4, 0x0f, 0x7e, 0xde, 0x64, 0x7e, 0xfc, 0xf1, 0x3d, 0x06, 0x03, 0xf2, 0xdf, 0x26, 0x67, 0x37, 0x4d, 0x11, 0xb2, 0x78, 0x0e, 0xc3, 0xe1, 0x03, 0x3c, 0x27, 0xee, 0xe7, 0x07, 0xb7, 0x6d, 0x83, 0xc5, 0x62, 0x8e, 0x30, 0x0c, 0x71, 0x38, 0x1c, 0xd4, 0x42, 0xb4, 0x6d, 0x3a, 0xcc, 0x1f, 0x1e, 0x1e, 0xe0, 0xba, 0x2e, 0x16, 0x8b, 0x85, 0x9a, 0x9b, 0xf7, 0x23, 0x4d, 0x83, 0xc0, 0x53, 0xa4, 0x17, 0x76, 0x84, 0x73, 0x5d, 0x57, 0xb2, 0xdd, 0x0f, 0x98, 0xcf, 0xa7, 0xf2, 0x40, 0x6c, 0x10, 0x45, 0x8f, 0x6c, 0x58, 0x7e, 0x1e, 0x61, 0x48, 0x12, 0x9b, 0xfe, 0x1c, 0x8b, 0x0b, 0xb7, 0x3c, 0xcf, 0x61, 0x9a, 0xae, 0x2a, 0xf0, 0x46, 0xa3, 0xd1, 0x93, 0xb1, 0x07, 0xe5, 0x59, 0x97, 0xea, 0x45, 0xdf, 0xed, 0x76, 0xf8, 0xf0, 0xe1, 0x03, 0xca, 0xb2, 0x45, 0x18, 0x3a, 0x38, 0x3b, 0x1b, 0xc2, 0x77, 0x3d, 0xc5, 0x9a, 0x26, 0x5d, 0x36, 0x94, 0x97, 0xf8, 0x0f, 0x3f, 0xfc, 0xa0, 0xd8, 0xb0, 0x6a, 0xbe, 0x6d, 0xc9, 0x42, 0x4f, 0x27, 0xe6, 0xf9, 0x6a, 0x75, 0x82, 0xe7, 0xb9, 0xf0, 0x3c, 0x5a, 0x7f, 0x87, 0x03, 0xb1, 0x80, 0x15, 0x2b, 0x76, 0xe0, 0x2b, 0x93, 0x0a, 0xc7, 0x73, 0xa5, 0x59, 0xcd, 0x11, 0x71, 0x4a, 0x71, 0x9b, 0xdf, 0xff, 0xf8, 0x03, 0x75, 0x27, 0x13, 0x42, 0x5a, 0x1e, 0xd6, 0x2b, 0xd4, 0x75, 0xad, 0x66, 0x68, 0xeb, 0xf5, 0x3d, 0xc2, 0x70, 0x00, 0xdb, 0x26, 0x62, 0x54, 0xd7, 0x75, 0x48, 0x52, 0xb2, 0xc3, 0x6c, 0x9a, 0x06, 0xe3, 0xf1, 0x44, 0xcd, 0xd7, 0x0c, 0xc3, 0x20, 0x47, 0xae, 0xc3, 0x41, 0x71, 0x03, 0x26, 0x93, 0x09, 0x8e, 0xc7, 0xe3, 0x13, 0x25, 0x00, 0x57, 0xfa, 0x94, 0x79, 0xbd, 0xc1, 0xd9, 0xd9, 0x42, 0xad, 0x0d, 0x2e, 0x5c, 0x26, 0x93, 0x09, 0x2e, 0x2e, 0x2e, 0xd0, 0xd4, 0xc0, 0x7a, 0xbd, 0x56, 0x30, 0x34, 0x17, 0x0e, 0x6c, 0x85, 0xca, 0x55, 0xb7, 0xca, 0xb7, 0x96, 0x0e, 0x70, 0x94, 0x82, 0x97, 0x2b, 0xb9, 0xd3, 0x7e, 0x1f, 0x43, 0xd3, 0x68, 0xc3, 0x64, 0xd8, 0xd1, 0xf7, 0x7d, 0x8c, 0xc6, 0x53, 0x6c, 0xb7, 0x34, 0x53, 0x5c, 0x6f, 0x6a, 0xd4, 0x75, 0x03, 0xd3, 0x70, 0x50, 0x95, 0x02, 0xab, 0x55, 0x03, 0xc3, 0x22, 0x72, 0x52, 0x59, 0x55, 0x00, 0x76, 0x78, 0x78, 0xb8, 0x53, 0xc6, 0x26, 0xb3, 0xd9, 0x04, 0x4d, 0x5d, 0xc2, 0xb4, 0x2d, 0xb8, 0xbe, 0x87, 0xf9, 0x72, 0x01, 0x2f, 0x20, 0x3f, 0xf7, 0xac, 0xc8, 0x51, 0xe5, 0xb5, 0x2a, 0xfa, 0x2d, 0xcb, 0x7a, 0xb2, 0x46, 0x59, 0x8b, 0x1f, 0x84, 0x9e, 0x0a, 0xc7, 0xd0, 0x0d, 0x9a, 0x3b, 0x6e, 0xb7, 0x07, 0x1c, 0xe3, 0x13, 0x05, 0xa8, 0x18, 0x8e, 0x8a, 0x84, 0xe5, 0x4d, 0x8e, 0x09, 0x87, 0x96, 0x65, 0xe1, 0xfc, 0xfc, 0x5c, 0xa1, 0x39, 0x3c, 0xde, 0x63, 0x23, 0x1a, 0x21, 0x04, 0xa6, 0xe3, 0x21, 0x6c, 0xc7, 0x84, 0x27, 0xe7, 0x90, 0x75, 0x5d, 0xa2, 0xae, 0x0a, 0x68, 0xba, 0x03, 0xdd, 0x00, 0xd2, 0x24, 0x47, 0xd7, 0x90, 0x0b, 0x98, 0x61, 0x58, 0x98, 0x8c, 0xa6, 0x70, 0xa5, 0x6d, 0xee, 0x51, 0x3e, 0x43, 0xe6, 0x78, 0x30, 0x3a, 0x16, 0xc7, 0x31, 0x96, 0xcb, 0x25, 0x26, 0xa3, 0x31, 0x4c, 0xd3, 0x56, 0xfb, 0x9d, 0x69, 0x9a, 0xa8, 0x9a, 0x47, 0xd5, 0x4d, 0x5d, 0xd7, 0xd0, 0x3d, 0x5d, 0x15, 0x5f, 0xec, 0x93, 0xf0, 0xb7, 0x7f, 0xfb, 0xb7, 0x68, 0x9a, 0x06, 0xef, 0xde, 0xbd, 0x83, 0xae, 0x59, 0xa8, 0xaa, 0x56, 0xaa, 0x79, 0x4c, 0x79, 0x60, 0xb4, 0x52, 0x62, 0x76, 0x86, 0xf8, 0x60, 0x50, 0xea, 0x5a, 0x9a, 0x62, 0xb5, 0x5a, 0xc9, 0x35, 0x47, 0x7a, 0x7c, 0x76, 0x8c, 0x63, 0x18, 0x38, 0x91, 0x26, 0x3e, 0x5c, 0xd0, 0xbd, 0x7f, 0xff, 0x1e, 0x96, 0x63, 0x62, 0x3e, 0x99, 0xe2, 0xab, 0x97, 0xaf, 0x48, 0xf9, 0xa0, 0xe9, 0xd0, 0x3b, 0xc0, 0x36, 0x4c, 0x34, 0x65, 0x05, 0xbd, 0x03, 0xf2, 0x84, 0x6c, 0x6e, 0x21, 0x5a, 0x38, 0xb6, 0x83, 0xf9, 0x64, 0x4a, 0x8c, 0x69, 0xdb, 0xc1, 0xf2, 0xd5, 0x02, 0xfb, 0xfd, 0x1e, 0x37, 0x37, 0x37, 0xd8, 0x6c, 0x72, 0xf8, 0x3e, 0x94, 0xc1, 0x91, 0xe3, 0x38, 0x58, 0x2c, 0x27, 0x8a, 0x8c, 0xdb, 0x1f, 0x9d, 0xb1, 0xb9, 0x0b, 0x37, 0x1d, 0x7d, 0xfb, 0x63, 0xf6, 0x35, 0x30, 0x4d, 0x13, 0x9f, 0x3e, 0x7d, 0xc2, 0x7c, 0xfe, 0x68, 0x0e, 0xa5, 0x72, 0x2c, 0xe4, 0x7e, 0xc0, 0x48, 0x2a, 0x4b, 0xaf, 0xe2, 0x38, 0x56, 0x1c, 0x20, 0x1e, 0x1b, 0x30, 0x14, 0xce, 0x6b, 0xbb, 0x4f, 0x94, 0x9e, 0xcf, 0x27, 0xb4, 0x2e, 0x3a, 0x4a, 0x70, 0xdc, 0xed, 0x76, 0x78, 0x78, 0x78, 0xa0, 0x62, 0x52, 0xb2, 0xbe, 0xf9, 0x77, 0x70, 0x53, 0xe4, 0x38, 0x0e, 0xde, 0xbc, 0x79, 0x83, 0x37, 0x6f, 0xde, 0xe0, 0x4f, 0xdf, 0xfd, 0xab, 0xe2, 0x89, 0x31, 0x42, 0xd6, 0xe7, 0x70, 0x14, 0x45, 0x05, 0x5d, 0x4f, 0x55, 0x83, 0xcb, 0xe7, 0x1e, 0x17, 0x34, 0xbe, 0xe4, 0x56, 0xe5, 0x79, 0xae, 0x3c, 0xed, 0x4f, 0xa7, 0x93, 0x5c, 0x1f, 0xc0, 0x3f, 0xfe, 0xe3, 0x3f, 0xaa, 0x22, 0x94, 0x9b, 0x38, 0xe6, 0x31, 0x85, 0x61, 0x08, 0x6f, 0x34, 0x44, 0x7c, 0x38, 0xa2, 0xae, 0x4a, 0x85, 0x30, 0xe8, 0x86, 0x86, 0x82, 0xf3, 0x51, 0xa4, 0xed, 0xb8, 0xef, 0xfb, 0xe8, 0x04, 0x70, 0xda, 0xee, 0xb1, 0xdd, 0x3e, 0x20, 0xb0, 0x5c, 0x2c, 0xe6, 0x73, 0x08, 0xcb, 0x41, 0x23, 0x04, 0xf6, 0x87, 0x83, 0x2a, 0x0a, 0xb5, 0xff, 0xe6, 0xdf, 0xff, 0xef, 0x1d, 0x1f, 0xe0, 0xca, 0x33, 0xb6, 0x17, 0xd6, 0xce, 0x07, 0x3c, 0x1f, 0x02, 0x4f, 0x52, 0xc9, 0xf4, 0xf6, 0x17, 0xfd, 0xd6, 0x95, 0xac, 0xac, 0xd1, 0xbf, 0x90, 0x9c, 0xf5, 0xf5, 0xe6, 0x8e, 0xc5, 0x36, 0xa2, 0xed, 0x13, 0xe8, 0x9e, 0xbf, 0x2e, 0x18, 0xf8, 0xd2, 0x92, 0xb5, 0x42, 0x55, 0xa7, 0xc8, 0xf3, 0x54, 0xdd, 0x8c, 0x28, 0x1a, 0xe1, 0xb8, 0xf9, 0x09, 0x71, 0x7c, 0xc4, 0xe9, 0xb0, 0x45, 0x59, 0x25, 0x30, 0xcd, 0x1a, 0x9e, 0xa3, 0xc3, 0x34, 0x00, 0x4d, 0x17, 0x30, 0x0c, 0x19, 0x60, 0xdf, 0x76, 0x68, 0x6a, 0x62, 0x08, 0xb6, 0xa2, 0x96, 0x73, 0x89, 0x16, 0x55, 0x67, 0x28, 0xf6, 0x25, 0x4b, 0x19, 0xf8, 0x4f, 0x5d, 0xd7, 0x38, 0x3f, 0x5f, 0xaa, 0xc5, 0xcc, 0xa4, 0x2e, 0x7e, 0xc1, 0xda, 0xb6, 0xc5, 0x37, 0xdf, 0x7c, 0xa3, 0x36, 0x5d, 0xee, 0x6a, 0xfa, 0x79, 0xe0, 0xc3, 0x51, 0xf0, 0x44, 0x25, 0xd0, 0xef, 0x9e, 0x69, 0x56, 0x53, 0xc3, 0xb2, 0x4c, 0x65, 0xc9, 0xf9, 0x18, 0xde, 0x52, 0x29, 0x72, 0x12, 0x93, 0xa2, 0x98, 0xe1, 0xdd, 0xd7, 0x3b, 0xe6, 0x79, 0xaa, 0x46, 0x1b, 0x4c, 0xf6, 0x10, 0x42, 0x48, 0xd9, 0x46, 0x8e, 0xc5, 0x62, 0xa4, 0x8a, 0x16, 0x46, 0x13, 0x28, 0x27, 0x3d, 0x7a, 0x02, 0xe1, 0xf3, 0x4c, 0x9b, 0x3b, 0x4a, 0xbe, 0x17, 0x9a, 0x74, 0x0a, 0xe3, 0x0d, 0x8f, 0xe7, 0x75, 0x86, 0x41, 0xf7, 0x6d, 0x3e, 0x99, 0xc3, 0x34, 0x4d, 0x1c, 0x8f, 0x47, 0x6c, 0x36, 0x1b, 0x35, 0x76, 0xe1, 0xb9, 0x8e, 0xeb, 0x04, 0x2a, 0xcb, 0x9a, 0xe3, 0x51, 0xf7, 0xfb, 0x0c, 0x61, 0x48, 0xd0, 0x2a, 0x93, 0x78, 0xc8, 0x93, 0x7c, 0x4a, 0x9d, 0xf6, 0xe9, 0xa0, 0xee, 0xe5, 0x6e, 0xb7, 0x51, 0x90, 0x34, 0x17, 0x9c, 0x0c, 0xe7, 0x2e, 0x97, 0x4b, 0xb4, 0xd2, 0x53, 0x9f, 0x5f, 0x46, 0xde, 0x30, 0x78, 0x0e, 0xc6, 0xda, 0x7b, 0xbe, 0x4e, 0x9e, 0x67, 0xd3, 0x7c, 0x6f, 0x07, 0x21, 0x2a, 0x99, 0x01, 0x2d, 0x60, 0xe8, 0xc4, 0xdb, 0xa8, 0xea, 0x02, 0x4d, 0x53, 0xc1, 0xf3, 0x5c, 0x4c, 0x65, 0xb4, 0x61, 0x7f, 0x14, 0xc5, 0x1b, 0x10, 0x15, 0x1c, 0x2b, 0xf5, 0x73, 0xd9, 0x02, 0x93, 0xd1, 0x1a, 0x5d, 0x27, 0x66, 0x39, 0x6f, 0x60, 0x4c, 0xa4, 0x63, 0xb8, 0xbd, 0x6d, 0x5b, 0x2c, 0xe6, 0x14, 0x60, 0xc3, 0x46, 0x2a, 0x9e, 0xe7, 0x91, 0xa4, 0x45, 0x22, 0x2d, 0x61, 0x18, 0x2a, 0xd4, 0x87, 0x47, 0x0f, 0x3c, 0x8b, 0xbd, 0xbd, 0xbd, 0xc5, 0xcf, 0x3f, 0xef, 0xf0, 0xe6, 0xcd, 0x4c, 0x15, 0x78, 0x8b, 0xc5, 0x02, 0x61, 0x18, 0x62, 0xbd, 0x5e, 0xcb, 0x42, 0xc9, 0x96, 0x0e, 0x6c, 0xf4, 0xdc, 0xb3, 0x8c, 0xc8, 0x41, 0x75, 0xd5, 0xe2, 0x78, 0xcc, 0x51, 0xb7, 0xc0, 0xd9, 0x19, 0xad, 0x9b, 0xc5, 0x82, 0x46, 0x24, 0xa7, 0xd3, 0x41, 0xad, 0x31, 0xcf, 0xb5, 0x95, 0xab, 0x21, 0x3b, 0xe5, 0xf1, 0xdc, 0x3d, 0x8e, 0x63, 0x44, 0xa3, 0xa1, 0xda, 0xfc, 0x79, 0x6f, 0xe0, 0x02, 0xa8, 0x2c, 0x4b, 0x74, 0x32, 0x74, 0x82, 0x82, 0x52, 0x6a, 0x39, 0xc7, 0xa5, 0x83, 0x6b, 0x38, 0x1c, 0xa2, 0x28, 0x89, 0x34, 0x38, 0x9f, 0xcf, 0xd5, 0x46, 0xc9, 0x70, 0xa3, 0x69, 0x9a, 0x78, 0xff, 0xfe, 0xfd, 0x13, 0x42, 0x23, 0xcb, 0xd9, 0x98, 0xdc, 0x58, 0x75, 0x34, 0x5f, 0xd4, 0x2d, 0x13, 0xc7, 0x24, 0x86, 0x66, 0x1a, 0x48, 0xd2, 0x14, 0x96, 0xeb, 0xa0, 0x69, 0x05, 0xbc, 0xc0, 0x27, 0x5e, 0x46, 0x07, 0x88, 0xaa, 0x86, 0x26, 0x5a, 0x04, 0x1e, 0x19, 0xbf, 0x1c, 0xb6, 0x3b, 0xe4, 0x09, 0x75, 0xc0, 0x79, 0x9a, 0x13, 0xf7, 0x44, 0x37, 0x90, 0xe7, 0x05, 0xce, 0xce, 0x96, 0x78, 0x76, 0x79, 0x85, 0x8b, 0x57, 0x97, 0xa8, 0x9a, 0x1a, 0x49, 0x92, 0x60, 0x7f, 0x3a, 0x62, 0x7f, 0x38, 0x20, 0xc9, 0x52, 0x74, 0x3a, 0xcd, 0x8b, 0xbf, 0x9a, 0xbd, 0x50, 0xf7, 0x8a, 0x91, 0x33, 0x76, 0x2e, 0xfc, 0xfd, 0xef, 0x7f, 0x8f, 0xdf, 0xfe, 0xf3, 0x09, 0xd0, 0x80, 0xc9, 0x14, 0xf8, 0xcd, 0x6f, 0x7e, 0x85, 0x6f, 0xbe, 0x7d, 0x83, 0x34, 0x4d, 0xf0, 0xf1, 0xe3, 0x0d, 0xb2, 0x2c, 0xc3, 0x62, 0x32, 0xc2, 0x60, 0x30, 0x50, 0xeb, 0xdd, 0x34, 0x4d, 0x5c, 0x5c, 0x5c, 0x20, 0x08, 0x02, 0xbc, 0x7b, 0xf7, 0x0e, 0xdf, 0x7e, 0xfb, 0xad, 0xf2, 0x1d, 0xf8, 0xf4, 0xe9, 0x93, 0x4a, 0x3d, 0xe3, 0xf5, 0x70, 0xf5, 0xfc, 0x52, 0x91, 0x57, 0xef, 0xee, 0xee, 0xd4, 0xc1, 0xea, 0x38, 0x8e, 0xea, 0x7c, 0xfb, 0x1c, 0x29, 0xee, 0x3c, 0x79, 0x8d, 0x35, 0xb9, 0x50, 0xef, 0x0d, 0xaf, 0x33, 0xd3, 0x34, 0xb1, 0x5c, 0x2e, 0x71, 0x7e, 0x7e, 0x0e, 0xdb, 0xd1, 0x9f, 0x28, 0x9e, 0xfa, 0xe6, 0x41, 0x65, 0x59, 0x62, 0x36, 0x1b, 0x3d, 0x69, 0x08, 0xf8, 0xda, 0x93, 0x24, 0x51, 0x6b, 0x85, 0xd9, 0xf4, 0x83, 0xc1, 0x40, 0x75, 0xd9, 0x0c, 0xcf, 0x33, 0xf4, 0xcd, 0xfb, 0xef, 0x7e, 0xbf, 0xa7, 0x51, 0x94, 0x24, 0xd4, 0xf5, 0xc3, 0xa1, 0x28, 0xad, 0x6d, 0xaf, 0xdc, 0xdc, 0x66, 0xb3, 0x19, 0xd2, 0x5c, 0x8e, 0x27, 0x8a, 0x5c, 0x11, 0x4f, 0x77, 0xc7, 0x83, 0x42, 0x05, 0x58, 0xc6, 0x56, 0x96, 0x25, 0xee, 0x6e, 0xd6, 0x00, 0x80, 0xe7, 0xcf, 0xcf, 0x30, 0x8a, 0x86, 0x6a, 0xfc, 0x48, 0x76, 0xd9, 0x65, 0x4f, 0x39, 0xf5, 0x78, 0x3f, 0x46, 0xc3, 0x29, 0x92, 0x24, 0xc1, 0xcd, 0xcd, 0x0d, 0x76, 0xbb, 0x0c, 0xc3, 0x9e, 0x64, 0x18, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0xa6, 0x09, 0x38, 0x8e, 0xa1, 0x10, 0x0b, 0xb4, 0x42, 0x21, 0x78, 0x1c, 0x5a, 0x73, 0x38, 0x1c, 0x14, 0x39, 0x90, 0x83, 0x99, 0x06, 0x83, 0x81, 0x6a, 0x08, 0xae, 0xaf, 0xaf, 0x11, 0xc7, 0x15, 0x82, 0xc0, 0xc4, 0x40, 0x5a, 0x42, 0xeb, 0x1a, 0x30, 0xf0, 0x3d, 0xc0, 0xd0, 0x91, 0x15, 0x29, 0x60, 0x69, 0x88, 0x46, 0x43, 0x94, 0xd2, 0xb8, 0xcb, 0x31, 0x1d, 0x88, 0xba, 0xc5, 0x69, 0xbb, 0x47, 0xb1, 0x4f, 0x10, 0xb9, 0x01, 0xce, 0xa6, 0x73, 0x9c, 0xea, 0xa7, 0x56, 0xd8, 0x9a, 0xa6, 0x41, 0xfb, 0xfb, 0xff, 0xfe, 0xff, 0xe8, 0xfa, 0x33, 0x6c, 0x26, 0x7d, 0x31, 0xd4, 0xc2, 0x07, 0x3a, 0xb3, 0xde, 0xfb, 0x04, 0x38, 0x81, 0xf2, 0x17, 0x59, 0xee, 0xca, 0xa2, 0x55, 0x98, 0x5f, 0xcc, 0xd0, 0xfb, 0xdd, 0x7e, 0x5b, 0xd8, 0xb2, 0xea, 0x26, 0xfd, 0x9e, 0x69, 0x71, 0x7c, 0x1e, 0x41, 0x8f, 0x75, 0x93, 0x23, 0xcb, 0x4e, 0x74, 0x58, 0xdb, 0x02, 0xa6, 0x09, 0x14, 0x25, 0x55, 0xf0, 0x49, 0x92, 0xa0, 0xca, 0x3e, 0xc2, 0x71, 0x2c, 0x0c, 0x22, 0x1f, 0x51, 0xe8, 0xc2, 0xd0, 0x05, 0x8a, 0x32, 0x45, 0x55, 0xa6, 0xe8, 0x3a, 0x81, 0xd1, 0x20, 0xa2, 0xd0, 0x8f, 0xa2, 0x40, 0x2b, 0x00, 0x4f, 0xea, 0x98, 0xcb, 0x9c, 0x0e, 0x1c, 0x6f, 0x30, 0x52, 0x1d, 0x3a, 0xdf, 0x10, 0x9e, 0x19, 0x93, 0x3d, 0x6a, 0xac, 0xe2, 0x2f, 0x19, 0x8a, 0xe2, 0x0e, 0x8a, 0x58, 0x9d, 0x50, 0x1d, 0x04, 0x43, 0xd2, 0x5c, 0x5d, 0x5a, 0x96, 0x85, 0xe3, 0x69, 0xab, 0xe6, 0xdd, 0x7c, 0xd3, 0x99, 0x45, 0xc9, 0xfe, 0xc4, 0x0f, 0x0f, 0xf7, 0xea, 0xfb, 0xa0, 0x31, 0x7f, 0xa1, 0x56, 0xbf, 0x83, 0xa5, 0x6b, 0xbc, 0x69, 0x30, 0xec, 0x95, 0xe7, 0x39, 0xd2, 0x34, 0xc6, 0x6c, 0x36, 0x53, 0x70, 0x37, 0x6b, 0x12, 0xfb, 0x5d, 0x1a, 0xeb, 0x94, 0xd9, 0x87, 0xdd, 0xf7, 0x89, 0xe0, 0xc7, 0xac, 0x69, 0x21, 0x84, 0xba, 0xe6, 0x3e, 0xa3, 0x94, 0xfc, 0x98, 0x57, 0x18, 0x8d, 0x46, 0x58, 0x2c, 0x16, 0x0a, 0x1a, 0xbc, 0x97, 0x0c, 0xdd, 0xa6, 0x69, 0x10, 0x7a, 0xbe, 0x92, 0xc2, 0xb0, 0x9e, 0x94, 0x8d, 0x32, 0x0c, 0xc3, 0x40, 0x53, 0x6b, 0x0a, 0x22, 0x3b, 0x9d, 0x84, 0x0c, 0x90, 0x01, 0x4c, 0x53, 0x83, 0x10, 0x1d, 0xca, 0x92, 0xd8, 0xd9, 0x17, 0x17, 0x33, 0x2c, 0x16, 0x0b, 0xb4, 0x9d, 0x90, 0x07, 0x97, 0x2d, 0xd3, 0xc4, 0x62, 0x55, 0xd1, 0x0e, 0x87, 0x43, 0xf5, 0x02, 0x6a, 0x9a, 0x46, 0x73, 0x6d, 0x51, 0xab, 0x6c, 0x65, 0x3e, 0x78, 0x2c, 0xcb, 0x42, 0x92, 0x24, 0x8a, 0x9d, 0x4f, 0x86, 0x3c, 0x91, 0x5a, 0x9b, 0xfc, 0x02, 0x52, 0x67, 0x9d, 0xe2, 0x70, 0x38, 0xe2, 0xe1, 0x61, 0x8f, 0x2c, 0xa5, 0xe0, 0x0f, 0xc7, 0x05, 0x16, 0x8b, 0x31, 0x5e, 0xbe, 0x7c, 0xa1, 0xe6, 0xc5, 0x2a, 0xbd, 0x4b, 0x1e, 0x6a, 0x9c, 0x4c, 0xc6, 0xe8, 0x02, 0x27, 0x91, 0x31, 0xda, 0xc5, 0x63, 0x90, 0xb2, 0x2c, 0xd5, 0x01, 0xc4, 0xb2, 0x3c, 0xee, 0xb0, 0xba, 0xae, 0xc3, 0x6c, 0x7a, 0xa6, 0x0e, 0x7f, 0xd6, 0x82, 0xf7, 0x3b, 0x05, 0xf6, 0x69, 0xe7, 0xe7, 0xc2, 0xcf, 0xfe, 0xe3, 0xc7, 0x8f, 0xf8, 0xf9, 0xe7, 0x0f, 0xf0, 0x7d, 0x1b, 0x7f, 0xf7, 0x77, 0x7f, 0xa7, 0xe0, 0xcc, 0xd3, 0xe9, 0xa4, 0x0c, 0x27, 0x7c, 0xdf, 0xc7, 0xf3, 0xe7, 0x2f, 0xf1, 0xff, 0xf7, 0xf5, 0x65, 0xcb, 0x91, 0x5d, 0x57, 0x76, 0xeb, 0xce, 0x63, 0xde, 0x9c, 0x33, 0x01, 0x14, 0x0a, 0x35, 0x92, 0x22, 0xc5, 0x90, 0xe4, 0x70, 0x87, 0xa2, 0x5f, 0xec, 0xe8, 0x07, 0xdb, 0x4f, 0xfe, 0x8f, 0x7e, 0xb1, 0x9f, 0xfc, 0x05, 0xfe, 0xb4, 0xfe, 0x00, 0xab, 0x43, 0x96, 0x29, 0x51, 0x06, 0xc9, 0x1a, 0x51, 0x89, 0x9c, 0xa7, 0x3b, 0xcf, 0x7e, 0x38, 0x67, 0x6f, 0xdc, 0xa4, 0xd4, 0x66, 0x04, 0x23, 0x44, 0x0a, 0x28, 0x02, 0x79, 0xef, 0x39, 0x7b, 0xef, 0xb5, 0xd7, 0x10, 0x86, 0x27, 0x66, 0xf4, 0x0b, 0x44, 0x44, 0xf0, 0x09, 0xde, 0xfd, 0xbc, 0x80, 0xdf, 0x17, 0xb1, 0xbb, 0x9e, 0xe7, 0x60, 0x36, 0x9b, 0x49, 0x03, 0x9c, 0x13, 0xaf, 0xd6, 0x32, 0x99, 0x15, 0x40, 0x29, 0x5a, 0xef, 0xde, 0xbd, 0xe3, 0xe9, 0x73, 0xbf, 0x4f, 0x30, 0x9e, 0xfa, 0xfc, 0xf3, 0xd3, 0xc5, 0x48, 0xc4, 0xc1, 0xa2, 0x28, 0xa0, 0x02, 0xdc, 0xe8, 0xa4, 0x59, 0x2c, 0x91, 0xb7, 0x82, 0x11, 0x2f, 0xdd, 0x70, 0x2e, 0x2e, 0x24, 0x6a, 0xdc, 0x48, 0xce, 0x47, 0xfb, 0xf4, 0xee, 0x19, 0xed, 0x46, 0x34, 0x67, 0x44, 0x8a, 0xd5, 0x35, 0x9c, 0xe2, 0x08, 0x5e, 0xcf, 0x47, 0x52, 0xe4, 0x80, 0x26, 0xf6, 0xcd, 0x14, 0xef, 0x5a, 0xe5, 0x05, 0xb2, 0x28, 0x46, 0x9e, 0x96, 0xd0, 0x55, 0x40, 0x57, 0x54, 0xd4, 0x55, 0x83, 0xbb, 0xe7, 0xcf, 0x05, 0x07, 0x44, 0x66, 0x28, 0xa8, 0xf2, 0x79, 0xfb, 0xbe, 0x0f, 0xc7, 0xb2, 0x01, 0x4b, 0xfc, 0xb3, 0xaa, 0x6b, 0x30, 0x6c, 0x0b, 0x65, 0x55, 0x21, 0x2f, 0xa5, 0xbd, 0xb0, 0x02, 0xe8, 0x31, 0x98, 0x01, 0x4e, 0x70, 0x39, 0xa5, 0xea, 0xfd, 0xe1, 0x0f, 0x7f, 0xc4, 0x78, 0xfa, 0x0a, 0x45, 0x99, 0xc2, 0x75, 0x4d, 0x5c, 0xdf, 0x4c, 0x60, 0xd9, 0x1a, 0x0e, 0x87, 0x3d, 0x9b, 0xbc, 0xf4, 0x03, 0xff, 0x82, 0xa5, 0xbc, 0xd9, 0x6c, 0x38, 0x9d, 0xcc, 0x30, 0x0c, 0x3c, 0x3c, 0x3c, 0x60, 0x3e, 0x9f, 0x4b, 0x33, 0xaa, 0x25, 0xa6, 0xd3, 0x29, 0xaf, 0x6b, 0x2c, 0xcb, 0xc2, 0x59, 0xca, 0x52, 0xe9, 0x79, 0x51, 0x32, 0x63, 0xdb, 0xb6, 0x4f, 0x4c, 0xef, 0xd1, 0x08, 0xb7, 0xb7, 0xb7, 0x32, 0xcf, 0xe0, 0xc0, 0x68, 0xcf, 0xf9, 0x7c, 0x86, 0x5a, 0x6b, 0xfc, 0x2c, 0x5c, 0xd7, 0x45, 0x14, 0x45, 0x58, 0x2e, 0x97, 0xec, 0x44, 0x79, 0x7d, 0x33, 0x65, 0x97, 0x46, 0x22, 0xb4, 0xd1, 0x5f, 0xa2, 0x51, 0x8d, 0xd8, 0x96, 0x95, 0x1a, 0x0f, 0x52, 0x81, 0x90, 0x31, 0xca, 0x62, 0xb1, 0x40, 0x2d, 0x1b, 0x3b, 0x42, 0x61, 0xa8, 0xb6, 0x10, 0x8c, 0x4d, 0x6b, 0x16, 0x6a, 0x5a, 0xa9, 0x30, 0x06, 0x41, 0x80, 0xf5, 0x7a, 0xcd, 0xf9, 0x10, 0x93, 0xc9, 0x84, 0xa5, 0x94, 0xba, 0xae, 0xe3, 0x78, 0x16, 0xe4, 0xd1, 0x53, 0x78, 0xe6, 0xa1, 0xa9, 0x55, 0x95, 0x0b, 0xf9, 0x33, 0xa1, 0x03, 0x49, 0x18, 0x3d, 0x11, 0x5b, 0x7b, 0x01, 0x4b, 0x64, 0x69, 0xed, 0xd8, 0xad, 0x01, 0xa4, 0xfa, 0x88, 0xa3, 0x8c, 0x99, 0xef, 0xdd, 0x94, 0x51, 0x52, 0xf9, 0xcc, 0x26, 0x63, 0xe9, 0x9b, 0x7f, 0xe2, 0x1d, 0xfd, 0xc3, 0xc3, 0x03, 0x67, 0x53, 0xa4, 0x69, 0xca, 0x08, 0xc5, 0x2f, 0x63, 0xc1, 0x7d, 0xdf, 0xc7, 0x97, 0xd5, 0x0a, 0x79, 0x9a, 0x21, 0xf0, 0x3d, 0x4c, 0xa7, 0x63, 0xa1, 0xcd, 0x3f, 0x0b, 0x3f, 0x85, 0xfe, 0x70, 0x80, 0x63, 0x2e, 0x3c, 0x43, 0xaa, 0xbc, 0x42, 0x1a, 0x67, 0x30, 0x15, 0x0d, 0x23, 0x27, 0x80, 0x56, 0x03, 0x59, 0x18, 0x43, 0x91, 0xf2, 0x38, 0x72, 0xbb, 0x4b, 0x92, 0x04, 0x7a, 0x37, 0x5d, 0xeb, 0x97, 0x89, 0x67, 0xb4, 0x1f, 0xee, 0x32, 0xda, 0xbb, 0xf2, 0xb3, 0x56, 0x69, 0xff, 0x4d, 0x17, 0x37, 0x71, 0x09, 0x19, 0x7f, 0x63, 0xf7, 0xda, 0x6d, 0x00, 0xca, 0x5c, 0xb8, 0xb7, 0x59, 0xa6, 0x29, 0x99, 0x92, 0x2a, 0x14, 0xb5, 0x45, 0x59, 0x24, 0x28, 0x8b, 0x08, 0x75, 0x11, 0x42, 0xd3, 0x5a, 0xf8, 0x76, 0x8d, 0xba, 0x4d, 0x10, 0x9e, 0xf6, 0xd8, 0xef, 0x37, 0x88, 0x13, 0x31, 0xe1, 0xcc, 0x27, 0x2a, 0x3c, 0xcf, 0x46, 0xd0, 0xf7, 0xa0, 0xab, 0x0a, 0xc2, 0x28, 0x44, 0x9e, 0x1d, 0xa5, 0x7d, 0xaa, 0x81, 0x28, 0x14, 0x04, 0xb3, 0xa0, 0x37, 0x45, 0x91, 0x57, 0x48, 0xa3, 0x54, 0xc0, 0x70, 0xad, 0x02, 0xdb, 0x11, 0xac, 0x6f, 0xda, 0xe7, 0x74, 0x9b, 0x0e, 0xb2, 0x5a, 0xed, 0x92, 0xf1, 0xba, 0x28, 0x03, 0xc1, 0xa3, 0x6d, 0xab, 0xf0, 0x44, 0x42, 0x86, 0x2b, 0xa4, 0x53, 0xce, 0xb2, 0x0c, 0x8e, 0x6b, 0x30, 0x83, 0x37, 0xcf, 0x73, 0x26, 0x9f, 0x79, 0x9e, 0x87, 0x5e, 0xaf, 0x87, 0xed, 0x76, 0x8b, 0xf3, 0x39, 0x42, 0xdb, 0x02, 0x9a, 0x56, 0x48, 0x8f, 0xe0, 0x06, 0x9e, 0xe7, 0x48, 0x3f, 0xe7, 0xe1, 0x85, 0xd1, 0x47, 0x57, 0x0b, 0xad, 0x69, 0x02, 0xae, 0xa3, 0x49, 0x90, 0x4c, 0x53, 0xc4, 0x05, 0xed, 0x31, 0xc1, 0x8a, 0xf4, 0x8b, 0x64, 0xc8, 0x40, 0x61, 0x1a, 0xd4, 0x8d, 0x12, 0x22, 0x41, 0xdc, 0x81, 0xae, 0x84, 0xe3, 0xcd, 0x9b, 0x37, 0x8c, 0xdc, 0x50, 0xb7, 0xff, 0xf2, 0xe5, 0x4b, 0x9e, 0xf6, 0xb6, 0xab, 0x25, 0x76, 0x3b, 0x31, 0x0d, 0xf6, 0x7a, 0x3d, 0x8c, 0xc7, 0x73, 0xa4, 0x69, 0x8a, 0xe3, 0x51, 0x98, 0xdb, 0x78, 0xbd, 0x09, 0xd6, 0xbb, 0x1d, 0xea, 0x1a, 0x78, 0xf9, 0x46, 0x10, 0x75, 0x84, 0x1b, 0x96, 0x8b, 0xd9, 0x6c, 0x86, 0xfb, 0xfb, 0xbf, 0xf2, 0x3e, 0xca, 0xb2, 0x2d, 0x61, 0x06, 0x91, 0x46, 0x80, 0xe6, 0x8b, 0x58, 0xcb, 0x9e, 0x0f, 0xd5, 0xd0, 0x59, 0x72, 0xa3, 0x69, 0x1a, 0x2c, 0x57, 0xa6, 0xa7, 0xd5, 0x15, 0xc2, 0xe3, 0x11, 0x8e, 0xe3, 0x60, 0x22, 0xdd, 0xb0, 0xc8, 0xf4, 0xa5, 0xac, 0x2a, 0x64, 0x79, 0x0e, 0xb9, 0xf9, 0x81, 0x2a, 0xf7, 0x63, 0xeb, 0xf5, 0x1a, 0x9f, 0x1f, 0x1e, 0xf8, 0x90, 0x2b, 0x90, 0xe4, 0x19, 0x43, 0x81, 0x65, 0x11, 0x0f, 0x04, 0xdc, 0x71, 0xf7, 0xfb, 0x03, 0x6c, 0xb7, 0x5b, 0x46, 0x19, 0xe8, 0x1d, 0xa7, 0x1d, 0xfc, 0x68, 0x34, 0xe2, 0x28, 0x4d, 0x82, 0xed, 0x88, 0x08, 0xf8, 0xe5, 0xcb, 0x23, 0xea, 0x1a, 0x18, 0x8f, 0x03, 0xd6, 0xf8, 0x53, 0x83, 0x42, 0x9e, 0xf2, 0xff, 0xf2, 0x2f, 0xff, 0x1b, 0x57, 0x57, 0x16, 0xb3, 0x9a, 0x69, 0xc2, 0xa1, 0xdd, 0x62, 0x37, 0xfb, 0x98, 0x92, 0xdc, 0xd2, 0x34, 0xc5, 0x6a, 0xb5, 0xc2, 0x76, 0x0b, 0x8c, 0xc7, 0x05, 0xee, 0xef, 0xef, 0x19, 0x8a, 0x2f, 0x8a, 0x82, 0xd7, 0x2f, 0xb7, 0xb7, 0xb7, 0x28, 0x8a, 0x4c, 0x7e, 0x6e, 0x82, 0x0c, 0xb4, 0xdb, 0xed, 0x9f, 0x20, 0x6d, 0x13, 0xc8, 0xf3, 0x0a, 0x55, 0x55, 0xa0, 0x69, 0x2c, 0x9c, 0x4e, 0x62, 0xcf, 0x9a, 0xa6, 0x29, 0x5e, 0xbe, 0xba, 0x13, 0x99, 0xe5, 0xb3, 0x31, 0xc2, 0x30, 0xc4, 0x62, 0xf9, 0x88, 0x28, 0x8a, 0xf0, 0xd3, 0x4f, 0x3f, 0x63, 0x3c, 0x1e, 0xa1, 0xd7, 0x0f, 0xf0, 0xec, 0xf9, 0x2d, 0xc3, 0xd5, 0x44, 0x10, 0xdb, 0xed, 0x76, 0xfc, 0x19, 0x89, 0x67, 0xa1, 0x71, 0x13, 0x16, 0xc9, 0xe9, 0xcf, 0x96, 0x76, 0xbd, 0xad, 0xf2, 0xe4, 0x04, 0x49, 0x0d, 0x2b, 0x5d, 0xc4, 0x84, 0x44, 0x91, 0xaa, 0x81, 0x7c, 0xc0, 0xbb, 0xee, 0x92, 0x8a, 0xa2, 0xe0, 0xdd, 0xbb, 0xf7, 0xe8, 0xf9, 0x3d, 0x18, 0x96, 0x85, 0x56, 0x21, 0xe8, 0xfd, 0x8c, 0x56, 0x01, 0x4c, 0x47, 0x48, 0x24, 0xd5, 0x16, 0x30, 0x0d, 0x1b, 0xd3, 0x67, 0x23, 0x51, 0xa4, 0xcb, 0x1a, 0x95, 0xbc, 0xd7, 0x2a, 0x79, 0x19, 0x3a, 0x92, 0x83, 0x10, 0x87, 0x11, 0x23, 0x0e, 0x6d, 0xdb, 0xe2, 0xbc, 0x3f, 0x22, 0x92, 0xbe, 0xec, 0x7e, 0xd0, 0x83, 0xa2, 0x6b, 0x42, 0xf6, 0x26, 0x43, 0x4e, 0x76, 0x87, 0xcd, 0x45, 0x03, 0xb6, 0x5a, 0xad, 0xf0, 0xe3, 0x8f, 0x3f, 0x0a, 0xab, 0x4e, 0xc7, 0xc4, 0x5f, 0xff, 0xfa, 0x1e, 0xae, 0x07, 0x3c, 0xbf, 0x9b, 0x4b, 0x7f, 0x8c, 0x96, 0xd1, 0x06, 0x92, 0x0a, 0x6f, 0xa4, 0x82, 0x83, 0x0a, 0x2e, 0x15, 0x53, 0xda, 0x21, 0x0f, 0x87, 0x43, 0x2c, 0x16, 0x0b, 0xb6, 0x40, 0xa6, 0xa0, 0x1f, 0xc3, 0x30, 0x78, 0xa5, 0x46, 0x28, 0xc6, 0x72, 0xb9, 0xc4, 0xa7, 0x0f, 0x1f, 0x91, 0xe7, 0x2d, 0x0c, 0x03, 0x30, 0x0c, 0x1d, 0xe1, 0xe9, 0x8c, 0xb0, 0x27, 0x76, 0xf5, 0x59, 0x92, 0xa2, 0xa9, 0x6b, 0x98, 0xba, 0x01, 0xcb, 0x30, 0x11, 0xcb, 0xb5, 0x4d, 0x18, 0x86, 0x6c, 0x5c, 0x35, 0x1c, 0x0e, 0xa1, 0xeb, 0xba, 0xd8, 0x09, 0x97, 0x09, 0x37, 0xd0, 0x14, 0xa1, 0x4b, 0x77, 0x9d, 0x20, 0xba, 0x1e, 0x51, 0xd7, 0xc2, 0x78, 0xa5, 0xae, 0x5b, 0x24, 0x49, 0x86, 0xd3, 0xe9, 0x2c, 0x3f, 0x0f, 0x1d, 0x8f, 0x8f, 0x2b, 0x76, 0x6a, 0x14, 0xcd, 0xe2, 0x0e, 0x45, 0x51, 0xc9, 0x01, 0xc2, 0xe7, 0x06, 0x44, 0x98, 0x6b, 0x09, 0x79, 0xd8, 0x60, 0x30, 0x40, 0x92, 0x24, 0x88, 0xa2, 0x04, 0x0f, 0x0f, 0x0b, 0x49, 0x46, 0xbd, 0x62, 0x9f, 0x89, 0xc5, 0x62, 0xc9, 0x04, 0xd5, 0xb2, 0xac, 0xf8, 0x6e, 0x20, 0x8e, 0x0a, 0x34, 0x71, 0x1f, 0x6e, 0x36, 0x9b, 0x0b, 0x34, 0x99, 0x86, 0x8d, 0xfd, 0x7e, 0x8f, 0xf0, 0x24, 0x56, 0x6a, 0x3d, 0x57, 0xac, 0xde, 0xc8, 0xc6, 0x98, 0xf2, 0x04, 0x14, 0x45, 0x41, 0x65, 0x98, 0xc8, 0x93, 0x82, 0x87, 0xb3, 0xf5, 0x7a, 0x8d, 0xf7, 0xef, 0x17, 0x28, 0x4b, 0xe0, 0xee, 0x6e, 0x84, 0xd1, 0xf3, 0xe7, 0xbc, 0x02, 0xa2, 0x1d, 0x3b, 0xa1, 0x48, 0xd4, 0x00, 0xf4, 0xfb, 0x7d, 0x19, 0x2f, 0xfc, 0xc8, 0xc8, 0x22, 0xa1, 0x7b, 0xe4, 0x3b, 0xb1, 0x78, 0x10, 0xd1, 0xc3, 0x79, 0xe6, 0x41, 0x37, 0x84, 0x2b, 0x66, 0x52, 0x8a, 0x2c, 0x03, 0x6f, 0x32, 0xe4, 0x3a, 0x9c, 0x24, 0x09, 0x2a, 0x45, 0x83, 0xaf, 0xd9, 0xb0, 0x14, 0xb1, 0x66, 0x74, 0x1d, 0x31, 0x60, 0xc6, 0xa9, 0x08, 0x12, 0xca, 0x8a, 0x54, 0x4c, 0xe8, 0xbf, 0x74, 0x80, 0xeb, 0x12, 0x1a, 0x7e, 0xa9, 0x25, 0xa7, 0x62, 0xa2, 0x69, 0x1a, 0xaa, 0xa6, 0xf8, 0xff, 0x92, 0xe2, 0x14, 0x45, 0xfd, 0xbb, 0x69, 0x34, 0x54, 0x98, 0x7c, 0x75, 0x24, 0xf2, 0xc6, 0x95, 0x16, 0x40, 0x85, 0xa6, 0x2d, 0xd0, 0xa2, 0x42, 0xd3, 0x54, 0x68, 0xdb, 0x1a, 0xa6, 0x92, 0xa2, 0x6e, 0x72, 0x64, 0x79, 0x88, 0xc3, 0x71, 0x89, 0xc3, 0x69, 0x09, 0xa0, 0xc2, 0xfc, 0x6a, 0x8a, 0xeb, 0xeb, 0x6b, 0x78, 0x76, 0x8a, 0xba, 0x16, 0x5d, 0xdf, 0x72, 0xb9, 0xc4, 0x66, 0x23, 0x8a, 0xe3, 0x78, 0x62, 0x60, 0x3c, 0x1e, 0xc3, 0x52, 0xa5, 0xbe, 0x15, 0x2a, 0x8e, 0xc7, 0x08, 0xfb, 0xdd, 0x11, 0x55, 0xd5, 0xc2, 0x73, 0x85, 0xb5, 0xe7, 0xed, 0xcb, 0x6b, 0xd6, 0xd8, 0x52, 0x87, 0x48, 0x87, 0x39, 0xcf, 0x73, 0x1c, 0x4f, 0xc2, 0xd5, 0x8d, 0x20, 0x66, 0x22, 0x4e, 0x10, 0xc9, 0xc9, 0xf7, 0x06, 0x7c, 0x38, 0x49, 0x3a, 0x40, 0x84, 0x90, 0x2c, 0xcb, 0x90, 0xa4, 0xe7, 0x0b, 0x84, 0x83, 0x25, 0x6f, 0x1a, 0x5d, 0x74, 0x27, 0xc9, 0x6a, 0x6d, 0xd0, 0x34, 0x80, 0xeb, 0xa9, 0xb2, 0x18, 0x5f, 0xca, 0x05, 0x29, 0x71, 0xed, 0x29, 0xb8, 0x61, 0xc8, 0x12, 0x11, 0x32, 0x69, 0xd8, 0xef, 0xf7, 0x0c, 0x97, 0xd1, 0xc4, 0x4e, 0x1e, 0xd9, 0x24, 0x65, 0xfa, 0xf0, 0xe1, 0x03, 0x92, 0xa4, 0xc2, 0x8b, 0x17, 0xd7, 0x08, 0x82, 0x80, 0x57, 0x04, 0xf4, 0x32, 0x12, 0x59, 0x8d, 0xbe, 0xde, 0xb2, 0x3c, 0x76, 0x6d, 0xda, 0x6c, 0x36, 0x0c, 0x91, 0x8f, 0xc7, 0x63, 0xf1, 0x75, 0x55, 0xcd, 0xbf, 0x17, 0x4d, 0xac, 0x04, 0x9b, 0xa9, 0xaa, 0x8a, 0x34, 0x6f, 0xf0, 0xcd, 0x37, 0xdf, 0xc0, 0xf3, 0x3c, 0xac, 0x56, 0x2b, 0xe8, 0xba, 0x8e, 0xaf, 0xbe, 0xfa, 0x0a, 0xb6, 0x6d, 0x63, 0xb9, 0x5c, 0xa2, 0x28, 0x32, 0x69, 0xc7, 0x28, 0x1c, 0xb9, 0x16, 0x8f, 0x0f, 0xbc, 0x03, 0xd3, 0x75, 0x15, 0xbe, 0x1f, 0xb0, 0x49, 0x05, 0x91, 0xd2, 0x68, 0x97, 0xbf, 0x58, 0x2c, 0x50, 0xe5, 0x19, 0xc3, 0xbb, 0xc7, 0xe3, 0x91, 0xc9, 0x42, 0xf4, 0x35, 0x34, 0xa9, 0x50, 0xc2, 0x18, 0x49, 0x5a, 0x88, 0x44, 0x36, 0x19, 0x0f, 0x84, 0x41, 0x50, 0xdd, 0xa2, 0x2c, 0xc4, 0xe1, 0xac, 0xea, 0x02, 0xbd, 0x9e, 0x87, 0xab, 0xab, 0x39, 0x1c, 0xc7, 0xbd, 0xd0, 0xb9, 0x92, 0xeb, 0x14, 0x9d, 0x13, 0x72, 0xac, 0x23, 0x03, 0x14, 0x62, 0x13, 0xd3, 0xb4, 0x45, 0x64, 0xc5, 0xd3, 0xe9, 0x04, 0x55, 0x7d, 0xb2, 0xc9, 0x3c, 0x1e, 0x8f, 0x28, 0x8a, 0x16, 0xaf, 0x5f, 0xbd, 0xc2, 0xe1, 0x70, 0x60, 0x32, 0x12, 0xad, 0x4c, 0xa8, 0x8b, 0x4f, 0x92, 0x84, 0x1b, 0xb3, 0xee, 0xd9, 0xeb, 0x72, 0x52, 0xa8, 0x79, 0xb3, 0x2c, 0x0b, 0xfb, 0xfd, 0x1e, 0xdb, 0xed, 0x96, 0x59, 0xe8, 0xae, 0x67, 0x43, 0x53, 0x0d, 0x1c, 0x0e, 0x27, 0xac, 0x56, 0x6b, 0xa4, 0x49, 0x8e, 0xba, 0x6e, 0xa0, 0x1b, 0x0a, 0x7a, 0x3d, 0x1f, 0x69, 0x9e, 0x30, 0x01, 0xa9, 0xd7, 0xf3, 0x10, 0x86, 0x21, 0x8a, 0x32, 0xc3, 0xf5, 0xf5, 0x35, 0x27, 0xd8, 0x11, 0x4b, 0x3a, 0xcf, 0x05, 0x93, 0x9e, 0xde, 0x47, 0x31, 0x91, 0xe5, 0x32, 0xf8, 0x63, 0x8a, 0x7e, 0xbf, 0x8f, 0xcd, 0x66, 0x83, 0xc7, 0xc7, 0x47, 0x2e, 0x0c, 0x34, 0x39, 0x08, 0x5e, 0x49, 0xc1, 0x3f, 0x13, 0x5d, 0x84, 0x51, 0x98, 0xb1, 0x93, 0x61, 0x14, 0x45, 0x6c, 0xd5, 0x69, 0x59, 0x16, 0x6e, 0x6e, 0x6e, 0x78, 0x7d, 0x45, 0xb0, 0x31, 0x15, 0x12, 0x9a, 0x32, 0x51, 0xeb, 0x08, 0x06, 0x7d, 0xa8, 0x86, 0x8e, 0xd5, 0x7a, 0x0d, 0x68, 0x2a, 0x1e, 0x37, 0x2b, 0x40, 0xca, 0xe2, 0xe2, 0x24, 0x44, 0x7c, 0x0e, 0x91, 0x25, 0x39, 0x46, 0x83, 0x3e, 0x9e, 0x5f, 0xdf, 0x40, 0x83, 0x82, 0x34, 0x49, 0x44, 0x34, 0xaa, 0x29, 0xf7, 0xbe, 0xb2, 0x28, 0xaa, 0x10, 0x8d, 0xc8, 0x74, 0x3a, 0x45, 0x1a, 0x27, 0xd8, 0x1c, 0xd6, 0x82, 0xb5, 0x5f, 0x16, 0x68, 0x15, 0x40, 0xd1, 0x35, 0x76, 0x01, 0x53, 0x75, 0x0d, 0x5a, 0xaa, 0xe0, 0xdd, 0xbb, 0x05, 0xb6, 0x5b, 0xe0, 0xed, 0x5b, 0x1b, 0x2f, 0x5f, 0xbe, 0xe4, 0x01, 0x28, 0x0c, 0x43, 0x18, 0xf6, 0x10, 0xc7, 0xd3, 0x16, 0x4d, 0x53, 0xc2, 0x76, 0x74, 0x98, 0x96, 0xc6, 0x2b, 0xb0, 0x34, 0xc9, 0xf1, 0xea, 0xe5, 0x9d, 0x54, 0x01, 0xac, 0xa5, 0x54, 0xc9, 0xe3, 0xfb, 0x77, 0xb7, 0xdb, 0x61, 0x32, 0x99, 0x60, 0x3a, 0x9d, 0xe2, 0xfe, 0xfe, 0x9e, 0xa5, 0x60, 0x84, 0xfc, 0x08, 0x19, 0xab, 0xc5, 0x9c, 0x0e, 0x5d, 0xd7, 0x59, 0xf6, 0xe7, 0xfb, 0x3e, 0xde, 0xbe, 0x7d, 0xcb, 0x44, 0x3a, 0x82, 0xe1, 0x29, 0xfc, 0x86, 0x20, 0x79, 0x0d, 0x06, 0x0e, 0x87, 0x03, 0xa7, 0x9f, 0xd1, 0xe4, 0x4b, 0x44, 0x48, 0x55, 0xbb, 0xf4, 0x46, 0xff, 0xa5, 0x8f, 0xc8, 0x7e, 0xbf, 0xe5, 0xe6, 0x8b, 0x90, 0x28, 0xba, 0xab, 0x68, 0x40, 0x98, 0xcf, 0xe7, 0x98, 0x4c, 0x26, 0x17, 0xec, 0x72, 0xda, 0xc3, 0xd3, 0x59, 0x21, 0x69, 0x2e, 0xd5, 0x89, 0x6e, 0x63, 0x77, 0x38, 0x1c, 0x10, 0x04, 0x01, 0x93, 0xef, 0x8e, 0xc7, 0x23, 0xd6, 0xeb, 0xb5, 0x60, 0xe9, 0xdf, 0xbd, 0x16, 0xc5, 0xdc, 0x7d, 0xca, 0x22, 0x89, 0xb3, 0x14, 0xcb, 0xe5, 0x92, 0x91, 0x06, 0xd7, 0x75, 0xc5, 0xb9, 0xd7, 0x9e, 0xfc, 0x43, 0x7c, 0x57, 0x70, 0x13, 0x76, 0xeb, 0x0d, 0x37, 0xc3, 0xc4, 0x80, 0xa7, 0xc6, 0x45, 0x34, 0x76, 0x2e, 0x23, 0x04, 0x54, 0xac, 0xc9, 0xa9, 0x71, 0xb7, 0xdb, 0x61, 0xb1, 0x78, 0xc4, 0x70, 0x28, 0xc8, 0x87, 0xb7, 0xb7, 0xb7, 0xfc, 0xfb, 0xd0, 0xf3, 0xff, 0xfc, 0xf9, 0xf3, 0x05, 0x42, 0x4a, 0x16, 0xad, 0x45, 0x21, 0x1a, 0x85, 0xc1, 0x68, 0x8c, 0xed, 0x7a, 0x0d, 0xa5, 0x6d, 0xe1, 0xf9, 0xd2, 0x87, 0xc1, 0xd4, 0xd0, 0x2a, 0x0d, 0xb6, 0xa7, 0x03, 0x72, 0xb5, 0x65, 0x52, 0x5c, 0x74, 0x8e, 0x11, 0xee, 0x43, 0x68, 0x05, 0x30, 0x09, 0x7a, 0x98, 0x0d, 0xc7, 0xd0, 0xfb, 0x1e, 0x0e, 0x87, 0x03, 0x92, 0x24, 0x61, 0x64, 0x46, 0xf9, 0x4f, 0xff, 0xf5, 0x7f, 0xb4, 0x04, 0x37, 0xd0, 0x45, 0x42, 0x05, 0x88, 0xa0, 0xae, 0xae, 0xa5, 0x6b, 0xd7, 0xd9, 0xad, 0x6a, 0xfe, 0x6d, 0xaf, 0x75, 0xfa, 0xfa, 0xee, 0xf7, 0x77, 0x61, 0xfd, 0xba, 0xae, 0xe1, 0x34, 0x26, 0xda, 0xb6, 0x06, 0x94, 0x1a, 0x6d, 0x5b, 0x42, 0x51, 0x1b, 0xa8, 0x5a, 0x03, 0x55, 0x6d, 0xa0, 0x6a, 0x0a, 0x94, 0xf2, 0x84, 0xdd, 0x7e, 0x8d, 0xd3, 0x79, 0x05, 0xcb, 0x56, 0x31, 0x1c, 0xf9, 0xf0, 0x7b, 0x36, 0x00, 0xf1, 0x67, 0x04, 0xae, 0x20, 0x6c, 0xc5, 0xa9, 0xb0, 0xdf, 0xa3, 0x90, 0x0c, 0xc3, 0xb0, 0x00, 0x45, 0xc1, 0xed, 0xd5, 0x35, 0xea, 0xba, 0x45, 0x9a, 0x64, 0x48, 0xd3, 0x12, 0x75, 0xab, 0xc1, 0xb6, 0x3c, 0x58, 0x96, 0x03, 0x4d, 0x35, 0xb0, 0xda, 0x7c, 0xe8, 0x98, 0xb4, 0x34, 0x6c, 0x8b, 0x49, 0x16, 0x9e, 0x59, 0x1e, 0xfd, 0xcd, 0x9a, 0xa0, 0xab, 0x89, 0x6f, 0x6a, 0x15, 0xdd, 0x60, 0x1b, 0x22, 0x6c, 0x84, 0xa1, 0x80, 0xea, 0x35, 0xbd, 0xbd, 0xd0, 0xd5, 0x13, 0x99, 0x86, 0xd8, 0xf4, 0x83, 0x41, 0x00, 0x4d, 0x53, 0xa5, 0xcd, 0x26, 0x30, 0x9e, 0x0c, 0x39, 0x59, 0x89, 0x7c, 0x87, 0x89, 0x40, 0x47, 0xcc, 0x66, 0x45, 0x01, 0xc3, 0x59, 0x41, 0xe0, 0x5f, 0xa0, 0x1e, 0xb4, 0x12, 0xe9, 0xc6, 0xe1, 0x52, 0x51, 0x23, 0x62, 0x07, 0x15, 0x01, 0x22, 0x68, 0xd0, 0x21, 0xa6, 0x49, 0x93, 0x18, 0xd2, 0x87, 0xc3, 0x01, 0xfb, 0x7d, 0x8c, 0xd1, 0x48, 0xf8, 0x6f, 0xd3, 0x0e, 0x88, 0x8a, 0x4c, 0xaf, 0xd7, 0xc3, 0xaf, 0x7f, 0xf5, 0x6b, 0x7c, 0xfe, 0xfc, 0x59, 0x16, 0xe7, 0x82, 0xa1, 0xa8, 0x38, 0x8e, 0xb1, 0xd9, 0x9c, 0xa0, 0xe8, 0x0a, 0xb2, 0xac, 0x45, 0xdb, 0x02, 0xc3, 0xa1, 0x83, 0x17, 0x2f, 0x5e, 0x70, 0x00, 0xc8, 0xe9, 0x74, 0xc2, 0xe1, 0xb8, 0x15, 0x5c, 0x09, 0xcf, 0x83, 0xa6, 0x29, 0x8c, 0x8a, 0xf4, 0x07, 0xa2, 0xe1, 0x5a, 0x3e, 0x8a, 0x83, 0x4b, 0x3b, 0x7f, 0x42, 0x02, 0x9a, 0xa6, 0xc1, 0xc3, 0xc3, 0x03, 0x14, 0x34, 0x2c, 0x27, 0xe9, 0x4e, 0xd0, 0xdd, 0xfc, 0x6e, 0x62, 0xcd, 0xd2, 0x9e, 0x8e, 0xde, 0xef, 0x2c, 0xcb, 0x50, 0xe7, 0x29, 0x54, 0x55, 0x13, 0x5e, 0x02, 0x71, 0x26, 0xb3, 0xaf, 0x4b, 0x00, 0x0d, 0x6c, 0xdb, 0xc2, 0xd5, 0xd5, 0x35, 0xbb, 0xa0, 0x11, 0x47, 0x81, 0x08, 0x3a, 0x61, 0x18, 0xe2, 0xc7, 0x1f, 0xdf, 0xc1, 0xb2, 0x74, 0x6e, 0x70, 0x08, 0xe1, 0x18, 0x0e, 0x87, 0x17, 0x09, 0x6d, 0x9b, 0xcd, 0x86, 0xd7, 0x2a, 0x74, 0xe1, 0x5b, 0x96, 0x85, 0xe5, 0xe3, 0xb6, 0x33, 0x6d, 0x4d, 0x99, 0x05, 0x4f, 0xc8, 0x18, 0x41, 0xfa, 0x9c, 0xe6, 0x25, 0xdf, 0x1b, 0x61, 0x76, 0xe1, 0xe2, 0xe6, 0xe6, 0x86, 0x21, 0xc2, 0xd5, 0x6a, 0x85, 0x38, 0x8e, 0xd9, 0xa4, 0x65, 0xbb, 0xdd, 0xc2, 0x30, 0x15, 0x6c, 0x36, 0x3b, 0xfc, 0x78, 0xbf, 0x46, 0x9e, 0x01, 0x2f, 0x5f, 0x8e, 0x31, 0x1c, 0xf6, 0x11, 0x27, 0x67, 0xa4, 0x69, 0x2c, 0xc9, 0x82, 0xf5, 0x13, 0x54, 0x8c, 0x5a, 0x4e, 0x2c, 0x43, 0xc1, 0x34, 0x57, 0x35, 0xb6, 0x0a, 0xa6, 0xe7, 0x4e, 0x1c, 0x12, 0xcf, 0xf3, 0xb0, 0x5e, 0x3e, 0xb2, 0xeb, 0x96, 0xeb, 0xba, 0x6c, 0xbc, 0x43, 0x3f, 0xf3, 0x31, 0x3c, 0x33, 0x69, 0xd1, 0x34, 0x75, 0x99, 0x98, 0xf5, 0x64, 0xf8, 0x62, 0x6a, 0x36, 0x33, 0x7f, 0xa9, 0xa0, 0x93, 0x54, 0xf2, 0xcd, 0x9b, 0x37, 0x7c, 0x66, 0xa8, 0x98, 0xd0, 0x3b, 0x4e, 0xd0, 0xfb, 0x79, 0x27, 0xd2, 0xc0, 0xf6, 0x87, 0x03, 0x56, 0xdb, 0x2d, 0xfc, 0x41, 0x80, 0xdd, 0x41, 0x4c, 0xe8, 0xfd, 0x51, 0x0f, 0x81, 0xef, 0xa0, 0xa9, 0x6a, 0x84, 0xa7, 0x33, 0x0c, 0x55, 0xc3, 0xcd, 0x6c, 0x0e, 0xcb, 0x30, 0x51, 0x16, 0x05, 0x6c, 0xc3, 0x44, 0xa1, 0x89, 0x89, 0x2d, 0x3a, 0x9f, 0xc5, 0xb3, 0x91, 0x1e, 0xd9, 0xbd, 0x5e, 0x0f, 0xc7, 0xfd, 0x01, 0x8a, 0x21, 0xb8, 0x33, 0x69, 0x91, 0xa3, 0xa8, 0x4a, 0x38, 0xbe, 0x28, 0xb8, 0xb5, 0x24, 0x61, 0x0e, 0x74, 0x71, 0x3e, 0x1f, 0x1f, 0x1f, 0xd9, 0x7b, 0x9f, 0xb2, 0x15, 0x1c, 0xc7, 0xc1, 0x39, 0x4e, 0x10, 0xc7, 0x21, 0x54, 0x4d, 0x78, 0x44, 0x1c, 0x0e, 0x22, 0x8e, 0x78, 0x36, 0x9b, 0xc2, 0xf3, 0x7a, 0xa8, 0xeb, 0x12, 0xe3, 0xf1, 0x98, 0xe1, 0x62, 0x7a, 0x5f, 0x08, 0xe6, 0xa5, 0xe9, 0x76, 0xb7, 0xdb, 0xb1, 0x27, 0xfb, 0x7a, 0xbd, 0x66, 0x46, 0x77, 0x5b, 0x8b, 0xf5, 0xdd, 0x6a, 0xb5, 0x62, 0x53, 0x30, 0xcf, 0xf3, 0x90, 0x65, 0x19, 0xfa, 0xfd, 0x3e, 0xe6, 0xf3, 0x39, 0x1e, 0x1f, 0x1f, 0xff, 0x66, 0x97, 0x4e, 0xa8, 0x9b, 0xef, 0x0d, 0xb0, 0x5c, 0x2e, 0xb1, 0x58, 0x2c, 0xd0, 0x34, 0xc0, 0x64, 0x32, 0xe2, 0xd5, 0x4b, 0x59, 0x96, 0x68, 0xda, 0x82, 0x9b, 0x7d, 0x1a, 0x66, 0xe8, 0x7d, 0x10, 0x9a, 0xf7, 0x94, 0xcf, 0xfc, 0xdf, 0x5b, 0x8b, 0x74, 0x53, 0x08, 0xbb, 0x09, 0x6c, 0x59, 0x96, 0x61, 0xbb, 0xdd, 0xe2, 0xd9, 0xb3, 0x67, 0x7c, 0xae, 0x9f, 0x78, 0x45, 0x35, 0x3f, 0x73, 0x92, 0x34, 0x0a, 0xf8, 0x3a, 0x43, 0x9e, 0x8b, 0xb5, 0xd8, 0x60, 0xe0, 0xe3, 0xf5, 0xeb, 0xd7, 0x68, 0x20, 0x4c, 0xb1, 0x4c, 0xdb, 0x62, 0x84, 0x27, 0xce, 0x52, 0x6c, 0xb7, 0x5b, 0x56, 0x65, 0x50, 0x63, 0xaa, 0x2b, 0x2a, 0xa3, 0x3e, 0x8e, 0x25, 0xa6, 0x71, 0x5b, 0x37, 0x98, 0xf4, 0x4b, 0xf7, 0x07, 0x59, 0xe5, 0x2a, 0x8a, 0x02, 0xd7, 0xe9, 0xf1, 0xfd, 0xbf, 0x5c, 0x2e, 0xf1, 0x97, 0xbf, 0xbc, 0x43, 0x9e, 0x03, 0xd7, 0xd7, 0xc2, 0xcc, 0x6b, 0xbd, 0x5d, 0xf3, 0xca, 0x80, 0x1a, 0x4f, 0xc7, 0x71, 0xf8, 0x99, 0xd2, 0x5d, 0x4f, 0xab, 0x37, 0xdb, 0xb6, 0x19, 0xa5, 0xd3, 0x75, 0x1d, 0x0d, 0x14, 0xc1, 0x33, 0xf1, 0x3c, 0x68, 0xaa, 0x48, 0x69, 0xeb, 0x0f, 0x03, 0x98, 0xae, 0x85, 0xc5, 0x6a, 0x89, 0xa8, 0x15, 0xc3, 0x16, 0x6a, 0x20, 0x4f, 0x0b, 0x24, 0xa7, 0x10, 0x4a, 0x56, 0xc3, 0x37, 0x1d, 0x04, 0x8e, 0x07, 0x25, 0x70, 0x99, 0x23, 0x34, 0x99, 0x08, 0x2e, 0x8d, 0xf2, 0x1f, 0xfe, 0xf3, 0x7f, 0x6b, 0xbb, 0xbe, 0xe9, 0xd4, 0x69, 0x11, 0xbc, 0xd5, 0x9d, 0xdc, 0x7f, 0xb9, 0x6b, 0x57, 0x3b, 0x1e, 0xd4, 0x7f, 0x6f, 0x8f, 0xae, 0xe9, 0xca, 0xdf, 0xd8, 0xc1, 0xd2, 0xf7, 0x56, 0x55, 0x05, 0x0f, 0xba, 0x28, 0xdc, 0x4a, 0x8d, 0xba, 0xc9, 0x90, 0x66, 0x27, 0x84, 0xd1, 0x11, 0x61, 0x74, 0x40, 0x9a, 0x26, 0xb8, 0x9d, 0xb8, 0xf0, 0x7d, 0x1b, 0xbd, 0xbe, 0x09, 0xdd, 0x68, 0xd9, 0xe1, 0xcd, 0xb6, 0x45, 0x41, 0x69, 0xcb, 0x13, 0x1a, 0xb4, 0x48, 0x92, 0x54, 0x14, 0x45, 0x55, 0xe7, 0xbd, 0x59, 0x1c, 0xc7, 0xd8, 0xad, 0x85, 0x4e, 0xdc, 0xb6, 0x3c, 0xd8, 0xb6, 0x0f, 0xcb, 0xe9, 0xc1, 0x34, 0x84, 0x85, 0x64, 0x51, 0x94, 0x18, 0x8c, 0x74, 0x3e, 0x48, 0x94, 0x13, 0x4e, 0xfb, 0xd6, 0x28, 0x8a, 0x70, 0x3c, 0xed, 0xf9, 0x62, 0x25, 0x92, 0x03, 0xf9, 0x89, 0xb7, 0x6d, 0x8b, 0x24, 0x2e, 0x2e, 0x0a, 0x36, 0x65, 0x63, 0xd3, 0x54, 0x26, 0x88, 0x79, 0x1a, 0xef, 0xa4, 0x89, 0x31, 0xfa, 0xe4, 0x99, 0xaf, 0xc0, 0x97, 0x97, 0x84, 0xef, 0xfb, 0x70, 0x3d, 0x91, 0xeb, 0x5b, 0x96, 0x39, 0x5e, 0xbd, 0x7a, 0xc5, 0x7e, 0xcc, 0x5d, 0x16, 0x26, 0x91, 0x42, 0x44, 0x71, 0x00, 0x56, 0xab, 0xd5, 0x45, 0xb4, 0x28, 0xfd, 0x1e, 0x14, 0x90, 0xd2, 0x3d, 0xf0, 0x04, 0xcb, 0xd2, 0x9f, 0xd5, 0xd5, 0x77, 0x92, 0xff, 0x31, 0x4d, 0x28, 0x82, 0xfc, 0xb4, 0x63, 0xb8, 0x99, 0xe2, 0x0b, 0xc9, 0x1c, 0x04, 0x00, 0x02, 0xb7, 0xcf, 0xcf, 0x52, 0x44, 0x7a, 0x9e, 0x10, 0x04, 0x16, 0xae, 0xae, 0xae, 0x44, 0x82, 0x51, 0x2c, 0x20, 0x3b, 0x92, 0xaa, 0x74, 0xad, 0x57, 0x2d, 0xcb, 0x82, 0xa6, 0x83, 0xf7, 0x49, 0x75, 0x5d, 0x0a, 0x78, 0x3b, 0x3e, 0xf3, 0x21, 0xbf, 0x7b, 0xfe, 0x92, 0xa7, 0x17, 0x62, 0x3c, 0xd3, 0x85, 0x7e, 0x3c, 0x1e, 0xa1, 0x6b, 0x0a, 0xaf, 0x33, 0xe8, 0x32, 0xeb, 0xda, 0xc7, 0xd2, 0x64, 0x42, 0x10, 0x3b, 0x4d, 0xd1, 0x82, 0x6d, 0xbd, 0x43, 0x53, 0x08, 0xd6, 0xf1, 0xf9, 0x1c, 0x21, 0x4d, 0x72, 0xc9, 0x32, 0x05, 0xb2, 0x2c, 0x41, 0x5d, 0x57, 0x18, 0x8d, 0xc6, 0xbc, 0x3e, 0x21, 0xf4, 0x82, 0x26, 0x73, 0x42, 0x21, 0x92, 0x24, 0x47, 0xaf, 0xe7, 0x0a, 0x88, 0x5a, 0x16, 0x20, 0x9a, 0x7a, 0x15, 0x45, 0x91, 0x50, 0xdd, 0x7b, 0x84, 0x61, 0xc8, 0xa4, 0x36, 0x6a, 0x1e, 0xdb, 0x46, 0x63, 0xe3, 0x1b, 0x92, 0x8e, 0x52, 0x31, 0xe8, 0x46, 0xc2, 0x12, 0x04, 0x2f, 0x9a, 0xd6, 0x1c, 0x9e, 0x67, 0x61, 0x32, 0x99, 0xf0, 0xe4, 0xfc, 0x5c, 0xc2, 0x7f, 0x5d, 0x86, 0xf8, 0x62, 0xb1, 0x80, 0xa2, 0xd6, 0xf0, 0xbc, 0x1e, 0xf2, 0xac, 0x41, 0x53, 0x03, 0xa3, 0xd1, 0x04, 0x9a, 0xa6, 0xa0, 0xac, 0x32, 0x98, 0xa6, 0x8e, 0xed, 0x7e, 0xc3, 0x9c, 0x0f, 0xdf, 0xf7, 0x91, 0x66, 0xb1, 0x9c, 0x50, 0x1c, 0xd1, 0x20, 0xa4, 0x19, 0x17, 0xef, 0xaa, 0xaa, 0x98, 0xc8, 0x48, 0x84, 0xa7, 0x32, 0x17, 0x3a, 0x6c, 0x92, 0x43, 0xe5, 0x79, 0x8e, 0xab, 0xab, 0x2b, 0xb8, 0xae, 0x8b, 0xed, 0x76, 0x0b, 0xd3, 0xb1, 0xb9, 0x90, 0x98, 0xa6, 0x2e, 0x79, 0x27, 0xd5, 0x93, 0xd5, 0x74, 0xa3, 0xb1, 0xef, 0x02, 0x3d, 0x23, 0xfa, 0x5d, 0x49, 0x0e, 0xd7, 0x25, 0x7a, 0x91, 0x3a, 0x81, 0x06, 0x85, 0x2f, 0xef, 0x85, 0x4f, 0xfc, 0x0f, 0xff, 0x77, 0x81, 0x28, 0x03, 0xde, 0x7c, 0xd5, 0x43, 0x5a, 0x16, 0x28, 0x2a, 0xe2, 0x8f, 0x44, 0xb8, 0xb9, 0x1a, 0xc3, 0x50, 0x45, 0xc2, 0x5a, 0xdf, 0xef, 0xc1, 0x12, 0xfe, 0xcf, 0x42, 0xe5, 0x10, 0x89, 0xf7, 0x5b, 0x91, 0x44, 0xdb, 0xfd, 0x76, 0x87, 0xf3, 0xb9, 0x42, 0xbf, 0x6f, 0xa0, 0xa9, 0x6a, 0x0c, 0xc6, 0x01, 0x66, 0xf3, 0x39, 0xf2, 0x4a, 0xc8, 0x27, 0x5d, 0xdf, 0x43, 0xd9, 0xd4, 0x38, 0x87, 0xa1, 0x70, 0x4c, 0x2c, 0x75, 0x3c, 0x7f, 0xfe, 0x1c, 0xdb, 0xed, 0x56, 0xfa, 0x00, 0xe8, 0xdc, 0x1c, 0x05, 0x41, 0x80, 0x43, 0xb8, 0xc7, 0xe7, 0xcf, 0x1f, 0xd1, 0x34, 0x2d, 0xfa, 0x03, 0xc1, 0x51, 0xd1, 0x54, 0x11, 0x76, 0x53, 0xd7, 0x74, 0xfe, 0x7d, 0x2e, 0xb8, 0x04, 0xbb, 0xd3, 0x7d, 0x40, 0xff, 0xdf, 0x7e, 0xbf, 0xc7, 0x74, 0x2a, 0x50, 0xc9, 0x9f, 0x7e, 0xfa, 0x89, 0x23, 0x52, 0x7b, 0x9e, 0x83, 0xdb, 0xdb, 0x5b, 0x1c, 0x0e, 0x07, 0xd1, 0x08, 0xf7, 0xfb, 0xb8, 0xbb, 0xbb, 0xe3, 0x82, 0x41, 0xac, 0x71, 0x4a, 0xbf, 0x23, 0x15, 0x0e, 0x49, 0xf3, 0xc2, 0x73, 0x7a, 0x11, 0x57, 0x7b, 0x3a, 0x15, 0xb0, 0x6d, 0x60, 0x34, 0x12, 0xf1, 0xac, 0xc2, 0x98, 0x2a, 0x63, 0x99, 0x2b, 0xf1, 0x53, 0xe8, 0xfc, 0x13, 0xef, 0x86, 0x9a, 0x20, 0x22, 0xbe, 0xed, 0x76, 0x3b, 0x49, 0xdc, 0x3c, 0xa0, 0x28, 0x80, 0x67, 0xcf, 0x7c, 0x7c, 0xfb, 0xed, 0xb7, 0xb0, 0x6d, 0x5b, 0x3a, 0x24, 0x56, 0x6c, 0xc2, 0x44, 0x4a, 0x17, 0x92, 0x5d, 0x11, 0x12, 0x4a, 0x3c, 0x15, 0x92, 0xe1, 0x11, 0x91, 0x92, 0x8a, 0xa5, 0x69, 0x9a, 0x50, 0x75, 0x31, 0x48, 0x65, 0x45, 0xce, 0x8d, 0x77, 0xd5, 0x0a, 0x97, 0xc5, 0xdd, 0x2e, 0x85, 0xef, 0xab, 0xac, 0x30, 0x99, 0x0c, 0x47, 0x4c, 0xd8, 0xf5, 0x5d, 0xb1, 0x16, 0xab, 0xb2, 0xfc, 0xc2, 0x4b, 0x9e, 0x56, 0x00, 0x94, 0xdf, 0x5e, 0x95, 0xa2, 0xd1, 0x1a, 0x8f, 0xc7, 0xac, 0xc7, 0x27, 0x0e, 0x40, 0x9a, 0xa6, 0x98, 0x5f, 0x3f, 0xd9, 0x18, 0x13, 0xba, 0x46, 0xe7, 0xaf, 0xab, 0x0c, 0x12, 0x77, 0xe3, 0x06, 0x96, 0x25, 0xc8, 0xaf, 0x64, 0xed, 0xdb, 0x40, 0x01, 0x9a, 0x06, 0x81, 0xef, 0x43, 0xd7, 0x14, 0x40, 0x55, 0x30, 0xbf, 0x9e, 0xa1, 0x68, 0x4a, 0xfc, 0xf1, 0xff, 0xfc, 0x09, 0xa5, 0x29, 0x57, 0xbb, 0x95, 0x58, 0x4f, 0x07, 0x8e, 0x87, 0xb1, 0xdb, 0x47, 0x72, 0x0c, 0xb1, 0xf8, 0xf8, 0x19, 0x89, 0x2e, 0xd6, 0xaf, 0x45, 0x51, 0xe0, 0xea, 0x4a, 0xb8, 0xd3, 0x29, 0xff, 0xf1, 0xbf, 0xfc, 0xf7, 0x96, 0x26, 0x3b, 0xea, 0xf6, 0x69, 0xba, 0xeb, 0x42, 0xee, 0xdd, 0xa9, 0x9b, 0x9d, 0xda, 0x72, 0x61, 0x6f, 0xd9, 0x52, 0x6e, 0x29, 0x1a, 0x68, 0x0a, 0xa5, 0xa7, 0xb5, 0x28, 0x0a, 0x01, 0x9d, 0xea, 0xaa, 0xd0, 0x93, 0x57, 0x32, 0xa7, 0x58, 0xd3, 0x14, 0x18, 0x9a, 0x82, 0x16, 0x1f, 0xd8, 0x65, 0x2d, 0x4d, 0x22, 0x44, 0x51, 0x08, 0x43, 0x57, 0x11, 0x48, 0xb2, 0xc8, 0xc0, 0x02, 0x74, 0x43, 0x43, 0xd3, 0x54, 0x48, 0xb3, 0x10, 0x79, 0x9e, 0x40, 0xd3, 0x45, 0x9c, 0xa2, 0xa6, 0xab, 0xb8, 0x99, 0x7f, 0x2d, 0xd2, 0x9d, 0xa4, 0x56, 0x5d, 0x40, 0xc8, 0xe2, 0xbf, 0x71, 0x3e, 0x87, 0xa8, 0x1a, 0x41, 0x82, 0xa2, 0xcc, 0x6d, 0x22, 0x36, 0x30, 0x79, 0x44, 0x7d, 0x9a, 0x0a, 0x7b, 0xbd, 0x1e, 0x77, 0xd8, 0x34, 0x69, 0x68, 0x9a, 0xc1, 0x72, 0x32, 0x9a, 0xc4, 0x89, 0x09, 0xde, 0x75, 0xb1, 0xa3, 0x83, 0x4c, 0x53, 0x2a, 0xc1, 0x5b, 0x45, 0x91, 0xb2, 0x51, 0x48, 0x9a, 0xa6, 0x17, 0x5a, 0x6c, 0xdb, 0xb6, 0xf1, 0xe1, 0xe3, 0x4f, 0x08, 0xc3, 0x08, 0xfd, 0x7e, 0x80, 0xd7, 0xaf, 0x5f, 0x43, 0x51, 0x14, 0x7c, 0xfe, 0xfc, 0x99, 0x9d, 0xbb, 0xc2, 0xe8, 0xc8, 0x9a, 0x67, 0xb2, 0x73, 0xf4, 0x3c, 0x0f, 0xe3, 0xf1, 0x18, 0x8a, 0xa2, 0xe0, 0xd3, 0xa7, 0x0f, 0x17, 0x19, 0xf1, 0xbf, 0x34, 0x47, 0xe8, 0xb2, 0xa5, 0x09, 0x06, 0xa2, 0xd0, 0x15, 0x92, 0x81, 0x91, 0x4d, 0x2c, 0xed, 0x8a, 0x69, 0x57, 0x37, 0x99, 0x4c, 0x90, 0xa5, 0x62, 0x92, 0xa6, 0x80, 0x10, 0x6a, 0x4c, 0xd8, 0xb5, 0xcd, 0x1f, 0xb0, 0x01, 0x02, 0x4d, 0x5a, 0xdd, 0xdf, 0x31, 0x49, 0x32, 0x7c, 0xfa, 0xf4, 0x09, 0xa7, 0xd3, 0x19, 0xbd, 0x9e, 0xcf, 0x3b, 0x6e, 0x32, 0xde, 0x48, 0xd3, 0x58, 0x66, 0x5c, 0x7b, 0xd8, 0xef, 0xf7, 0xf8, 0xe9, 0xa7, 0x9f, 0xb0, 0xdd, 0x6e, 0xd1, 0xeb, 0x09, 0x77, 0xaa, 0x2c, 0x8f, 0x98, 0x54, 0x48, 0xfa, 0x67, 0x9a, 0x00, 0x1d, 0xc7, 0xc1, 0xf2, 0xf3, 0x23, 0x26, 0x93, 0x09, 0x5f, 0x00, 0x74, 0xe9, 0x53, 0x33, 0x9a, 0xa6, 0xf9, 0x85, 0xaa, 0x80, 0x1a, 0x09, 0x2a, 0x8e, 0xfd, 0xc0, 0xbd, 0xd8, 0xe3, 0x52, 0x43, 0x44, 0x32, 0x29, 0x9a, 0xa4, 0x89, 0x43, 0x10, 0xc7, 0x09, 0xda, 0x56, 0xd8, 0xf3, 0x52, 0x53, 0x47, 0x0c, 0x73, 0x6a, 0xfa, 0x48, 0x93, 0x7c, 0x77, 0x77, 0xc7, 0xf0, 0xe2, 0x72, 0xb9, 0xc4, 0xcf, 0x3f, 0xff, 0x8c, 0xb6, 0x6d, 0x79, 0x25, 0xa2, 0xaa, 0x2a, 0xca, 0xa2, 0xe5, 0xa2, 0xdd, 0x65, 0xfe, 0x12, 0x09, 0x8f, 0xbb, 0x6e, 0xf9, 0xbe, 0xd1, 0x7b, 0x44, 0x53, 0xcf, 0x29, 0x3c, 0xf3, 0x64, 0x41, 0x04, 0xa0, 0xd1, 0x68, 0x84, 0xe3, 0xf1, 0x88, 0xfb, 0xfb, 0x35, 0xda, 0x1a, 0xf8, 0xdd, 0xef, 0x9e, 0x0b, 0x57, 0xb2, 0xd5, 0x8a, 0x3f, 0x5b, 0x2a, 0xc2, 0xcb, 0xdd, 0x06, 0x93, 0xc9, 0x04, 0x2f, 0x5e, 0xbc, 0x10, 0xba, 0x73, 0xdf, 0x67, 0x47, 0xb1, 0x30, 0x0c, 0xb1, 0x5a, 0x6f, 0xe0, 0x79, 0x82, 0x3d, 0x3f, 0x9d, 0x4e, 0x99, 0xaf, 0x41, 0xf1, 0xb7, 0x87, 0x43, 0x09, 0xd7, 0x15, 0x4e, 0x6e, 0xb4, 0x2f, 0xec, 0x42, 0xba, 0xa8, 0x1b, 0xbe, 0x2b, 0xa8, 0x71, 0xa3, 0x22, 0x20, 0xa6, 0xb1, 0xa7, 0x74, 0xaa, 0x38, 0x8e, 0x11, 0x45, 0x21, 0x43, 0x9b, 0x45, 0x91, 0xa1, 0xaa, 0x1a, 0x6e, 0x26, 0x54, 0x55, 0xc5, 0xdd, 0xdd, 0x9d, 0x34, 0xc4, 0x79, 0xc0, 0xfd, 0xfd, 0x3d, 0xbe, 0xff, 0xd3, 0x23, 0xc8, 0x4d, 0xb8, 0xaa, 0x84, 0xb1, 0x11, 0xb9, 0x19, 0x36, 0x4d, 0x83, 0x3c, 0x7b, 0x62, 0x7a, 0x93, 0x87, 0x7e, 0xb7, 0x01, 0x6e, 0x34, 0x41, 0xb6, 0x74, 0x2d, 0x5b, 0x4e, 0xbc, 0x0d, 0x3f, 0xef, 0xb2, 0x28, 0xb0, 0xdc, 0x7e, 0xe1, 0x40, 0x90, 0xaa, 0x6d, 0x84, 0xfb, 0xa3, 0x54, 0x75, 0x14, 0x45, 0x81, 0xbe, 0x23, 0x56, 0x0a, 0xc2, 0xe8, 0x27, 0xc7, 0xd5, 0xd5, 0x08, 0x57, 0x57, 0x57, 0x4f, 0xb0, 0xb4, 0x6a, 0xe1, 0xe1, 0xe1, 0x01, 0x7f, 0xfd, 0xeb, 0x23, 0xb2, 0x0c, 0x98, 0x4e, 0xc1, 0x84, 0xcf, 0xab, 0xab, 0x2b, 0xe8, 0x96, 0xca, 0x93, 0x75, 0xf7, 0x7e, 0xa5, 0xb5, 0x24, 0x49, 0xb8, 0x68, 0x95, 0x95, 0xe5, 0x4f, 0xc4, 0xd3, 0x28, 0x3a, 0x03, 0x35, 0x70, 0x77, 0x77, 0xc7, 0x8d, 0x81, 0x69, 0xe9, 0x8c, 0x98, 0x9c, 0xcf, 0x47, 0x68, 0x86, 0xc7, 0xb2, 0x2c, 0x9a, 0x42, 0x69, 0x75, 0xb2, 0xdd, 0x6e, 0xf1, 0xdd, 0x37, 0xdf, 0xf2, 0xca, 0xee, 0xc3, 0x87, 0x0f, 0x38, 0x9d, 0x32, 0xcc, 0x66, 0xa2, 0x68, 0x8a, 0xbb, 0x4c, 0x63, 0x34, 0x95, 0x0a, 0x39, 0x0d, 0x34, 0x69, 0x9a, 0xc2, 0xb4, 0x74, 0x96, 0x87, 0x91, 0xdc, 0x8d, 0x54, 0x1d, 0xb4, 0xca, 0xa3, 0x3b, 0x88, 0xf9, 0x2d, 0xd2, 0xbe, 0x95, 0x12, 0x08, 0xc9, 0xa8, 0x8a, 0xbe, 0xbf, 0x6b, 0x74, 0x26, 0x56, 0x89, 0x39, 0x8a, 0x02, 0x70, 0x5d, 0x60, 0x34, 0xf2, 0x30, 0x9f, 0xcf, 0x59, 0x0d, 0xa2, 0xb4, 0xa2, 0x51, 0x31, 0x64, 0x63, 0x9b, 0x16, 0x42, 0x4e, 0x9c, 0x64, 0x29, 0xaf, 0x28, 0x27, 0x93, 0x09, 0x7a, 0x32, 0x0c, 0x27, 0x4f, 0xc4, 0x6a, 0xc5, 0xe8, 0x9c, 0x5d, 0x52, 0x54, 0x50, 0x63, 0x4d, 0xc3, 0x2c, 0x21, 0x11, 0xf4, 0x77, 0x14, 0x45, 0x22, 0x9d, 0x4e, 0x22, 0x6d, 0xa6, 0x69, 0x62, 0xe8, 0x89, 0xe6, 0xa2, 0x6e, 0x4a, 0x34, 0x00, 0x0c, 0x53, 0x87, 0x22, 0x7f, 0xe7, 0xbc, 0x48, 0xd1, 0x42, 0x43, 0x9e, 0x67, 0x58, 0xef, 0xb6, 0xc8, 0xf3, 0x1a, 0x83, 0x91, 0x27, 0xe1, 0x7d, 0x0d, 0xaa, 0xa1, 0xc3, 0x6a, 0x2d, 0xe8, 0xaa, 0x06, 0x5d, 0x53, 0x61, 0xdb, 0x02, 0xfd, 0x52, 0x4d, 0x15, 0xa6, 0x63, 0xe2, 0xe1, 0xcb, 0x17, 0x24, 0xba, 0x18, 0xb8, 0xea, 0x4a, 0xc0, 0xee, 0x37, 0xd7, 0xd7, 0xf8, 0xdd, 0x37, 0xbf, 0x41, 0x93, 0x16, 0xf8, 0xe3, 0xff, 0xfa, 0x57, 0x2c, 0x4f, 0x6b, 0x61, 0x3a, 0x23, 0x7d, 0x38, 0x14, 0x45, 0x81, 0xf2, 0x8f, 0xff, 0xf4, 0xcf, 0xed, 0x2f, 0x77, 0x23, 0xdd, 0x22, 0xde, 0x2d, 0x10, 0xbf, 0x74, 0x94, 0x03, 0x6c, 0xb1, 0xfe, 0x56, 0x5a, 0x28, 0x4a, 0x2b, 0x8b, 0x39, 0xa0, 0x2a, 0x2d, 0x14, 0x05, 0x1d, 0xf9, 0x44, 0x84, 0xba, 0x2a, 0xa0, 0xeb, 0x2a, 0x34, 0x05, 0x28, 0x8a, 0x0c, 0x79, 0x91, 0xa2, 0x3f, 0xd8, 0xe3, 0x74, 0x38, 0x22, 0xcd, 0x04, 0x2b, 0x5d, 0x53, 0xc5, 0x8b, 0xd9, 0x73, 0x1d, 0xd4, 0x4d, 0x09, 0xb5, 0x4e, 0xb1, 0x5c, 0x0a, 0x97, 0xa2, 0xeb, 0x9b, 0x39, 0xc6, 0xe3, 0x01, 0x5a, 0x88, 0xa2, 0xec, 0xfb, 0x2e, 0x3e, 0xfc, 0xb4, 0x95, 0x66, 0x06, 0x8a, 0x74, 0x8d, 0x53, 0xe0, 0x38, 0x96, 0xbc, 0x10, 0x72, 0x28, 0x86, 0xc6, 0x17, 0x84, 0x61, 0x18, 0x17, 0x2e, 0x78, 0x00, 0x50, 0xc8, 0x9d, 0x12, 0xc1, 0x3b, 0x5d, 0x33, 0x16, 0x01, 0xfd, 0xe8, 0x17, 0x91, 0x98, 0x5d, 0x49, 0x5b, 0x92, 0x24, 0xb8, 0xba, 0xba, 0x62, 0x1d, 0x2e, 0x4d, 0x86, 0xf4, 0xbf, 0x85, 0x1f, 0xf7, 0xfe, 0xc9, 0x84, 0x61, 0x34, 0xc2, 0x7c, 0x3e, 0xe7, 0xef, 0xf5, 0x3c, 0x0f, 0x8a, 0x5a, 0xf3, 0xc4, 0x4c, 0x2f, 0xb8, 0x98, 0xd0, 0x45, 0xe7, 0x3a, 0x99, 0x0e, 0x79, 0x5a, 0xa5, 0x26, 0xa3, 0x1b, 0x70, 0x62, 0x59, 0x06, 0x9b, 0xc2, 0xec, 0xf7, 0x7b, 0xee, 0xc6, 0xa9, 0x60, 0xf7, 0x7a, 0x3d, 0xc9, 0x70, 0xb6, 0xb8, 0x13, 0xa6, 0xa9, 0x9c, 0x0a, 0x12, 0xed, 0xdf, 0xba, 0x91, 0xb6, 0x79, 0x2e, 0xf4, 0xe5, 0x86, 0x6e, 0xf3, 0x5e, 0x8e, 0x5e, 0xf2, 0xba, 0xae, 0x79, 0x7a, 0x38, 0x9e, 0x62, 0xd6, 0x64, 0xcf, 0xe7, 0x73, 0x0c, 0x06, 0x03, 0x26, 0x88, 0x19, 0x86, 0xd8, 0xdd, 0x12, 0xac, 0x3f, 0x99, 0x4c, 0xb8, 0x61, 0x7a, 0x32, 0xe3, 0x11, 0xd1, 0xae, 0x49, 0x92, 0xe0, 0xdd, 0xbb, 0x77, 0xcc, 0xce, 0x26, 0x73, 0x15, 0x4d, 0x6f, 0x31, 0x1a, 0x8d, 0x30, 0x9d, 0x4e, 0xd9, 0x2b, 0x9a, 0x20, 0xa6, 0xa2, 0x28, 0xf0, 0x6c, 0x76, 0xc3, 0x90, 0x16, 0x35, 0x26, 0x44, 0x1e, 0x13, 0x97, 0xe2, 0x53, 0x94, 0x2c, 0xc9, 0x13, 0xe9, 0xa2, 0x38, 0x9f, 0xcf, 0x68, 0xea, 0x9c, 0x0b, 0x0d, 0xb1, 0xe8, 0xbb, 0x49, 0x55, 0x04, 0xb1, 0x77, 0x0d, 0x91, 0xa8, 0xd1, 0xa5, 0x8b, 0xb0, 0x8b, 0x9c, 0x74, 0xa5, 0x80, 0x55, 0x55, 0xe1, 0xd5, 0xab, 0x57, 0xdc, 0xb9, 0x13, 0x5b, 0x9e, 0xc8, 0xa5, 0xaa, 0xaa, 0xe2, 0xb0, 0x0f, 0xf9, 0x82, 0xeb, 0xba, 0xe5, 0x91, 0xf7, 0x3d, 0x11, 0xc2, 0x08, 0xf5, 0xa1, 0x42, 0x1a, 0x04, 0x81, 0x68, 0x84, 0x64, 0x54, 0x27, 0x69, 0xe1, 0xe9, 0x67, 0xa5, 0x77, 0xc0, 0xb1, 0x6c, 0x5e, 0xa5, 0x51, 0x53, 0xd0, 0x34, 0x0d, 0x6e, 0x6e, 0x6e, 0xf0, 0xea, 0xd5, 0x2b, 0xa4, 0x32, 0x3f, 0x80, 0x54, 0x1a, 0xd4, 0xf0, 0xae, 0xd7, 0x6b, 0x41, 0x3a, 0xbd, 0x1a, 0x5d, 0xf0, 0x06, 0x28, 0x77, 0xe0, 0xc3, 0x87, 0x0f, 0xf8, 0xfe, 0xfb, 0x07, 0x7c, 0xf5, 0xd5, 0x94, 0x73, 0x0e, 0x9e, 0xa0, 0x75, 0x93, 0x7d, 0xd9, 0x3f, 0xbd, 0xff, 0x78, 0x11, 0x6c, 0x43, 0xf6, 0xb2, 0x59, 0x96, 0xe1, 0xe3, 0xc7, 0x8f, 0x08, 0x82, 0x80, 0xd9, 0xed, 0xa2, 0x99, 0xca, 0x19, 0x8d, 0x12, 0x9e, 0x05, 0x03, 0x5e, 0x37, 0xd1, 0x54, 0x49, 0x7c, 0x8e, 0x24, 0x49, 0xa0, 0xab, 0xe2, 0x82, 0xbc, 0xb9, 0xb9, 0xc1, 0x78, 0x3c, 0x96, 0xf6, 0xa0, 0x7b, 0x66, 0x4f, 0x17, 0x79, 0xc6, 0x3e, 0x10, 0xc4, 0x7b, 0xe9, 0xae, 0x0d, 0xf2, 0x46, 0x18, 0x05, 0x59, 0xba, 0x80, 0x98, 0x55, 0x28, 0x4f, 0x9e, 0xe4, 0x71, 0x8c, 0xfd, 0x71, 0x8d, 0xab, 0x9b, 0x6b, 0xf6, 0x77, 0xf0, 0x02, 0x71, 0x9e, 0x76, 0xf2, 0xb3, 0x3a, 0xac, 0x36, 0xfc, 0xd9, 0xd2, 0x99, 0xa3, 0x9d, 0x34, 0x00, 0x6c, 0xb6, 0x67, 0xe8, 0xba, 0x86, 0xaa, 0xaa, 0xe1, 0xba, 0x8e, 0x90, 0x82, 0x49, 0x84, 0xc8, 0x30, 0x0c, 0xa8, 0x06, 0x2e, 0x42, 0xb0, 0xba, 0x89, 0x83, 0xf4, 0xef, 0xc9, 0xbf, 0xe0, 0x7c, 0x3e, 0x03, 0x8a, 0x68, 0x40, 0x68, 0xe7, 0xdb, 0xf7, 0x7b, 0x7c, 0x2f, 0xb4, 0xad, 0x20, 0x69, 0x8e, 0xc6, 0x03, 0xc4, 0xb1, 0x38, 0x97, 0xa6, 0xed, 0xf3, 0x79, 0xa6, 0x75, 0x0d, 0x35, 0x86, 0x61, 0x08, 0x7c, 0xfb, 0xf5, 0x0d, 0xf6, 0xfb, 0x3d, 0x9f, 0xc7, 0x2e, 0x03, 0x5b, 0x4c, 0xee, 0x31, 0xdb, 0xb0, 0x6e, 0x36, 0x1b, 0x36, 0xd3, 0x12, 0x1c, 0x96, 0x35, 0x22, 0x52, 0x86, 0x58, 0x80, 0xeb, 0x6a, 0x8c, 0x9e, 0xd0, 0xfa, 0x8e, 0x3e, 0x6f, 0x42, 0x56, 0xa8, 0x69, 0xa5, 0x62, 0xba, 0xdf, 0xef, 0x79, 0xa0, 0x22, 0x27, 0x52, 0x1a, 0x98, 0xd2, 0x34, 0xc5, 0x7c, 0x3e, 0x67, 0x17, 0x37, 0xca, 0xb0, 0xa0, 0xf5, 0x53, 0x59, 0x96, 0x30, 0x34, 0x81, 0xd4, 0x36, 0x32, 0xcf, 0xbc, 0x6c, 0xc4, 0xdd, 0xd4, 0x2a, 0x62, 0x78, 0x61, 0xc2, 0x22, 0x04, 0x91, 0x55, 0x83, 0x68, 0x2c, 0x5b, 0xb9, 0x1a, 0x20, 0x6d, 0x3f, 0x49, 0x6f, 0x93, 0x24, 0xe1, 0xd4, 0xb6, 0xa2, 0x28, 0xb0, 0x5e, 0xaf, 0x59, 0x92, 0x47, 0x86, 0x46, 0x14, 0x45, 0x3c, 0x1c, 0x0e, 0x61, 0x29, 0x9e, 0x7c, 0x4e, 0x29, 0x92, 0x3c, 0x43, 0x96, 0x25, 0x68, 0xd0, 0x4a, 0xc4, 0xc9, 0x45, 0x18, 0x47, 0x22, 0xf2, 0xf7, 0x7c, 0x42, 0x51, 0x64, 0xe8, 0xf5, 0x03, 0xd8, 0xb6, 0xa8, 0x0d, 0x35, 0x5a, 0xd4, 0x71, 0x8d, 0x38, 0x8c, 0x10, 0x47, 0x21, 0x5c, 0x57, 0x18, 0x53, 0x0d, 0xa7, 0x43, 0xb8, 0x3d, 0x17, 0x0f, 0x5f, 0xbe, 0xa0, 0xb0, 0x65, 0x5d, 0x86, 0x86, 0xa6, 0x6c, 0xa0, 0x6b, 0x1a, 0x46, 0xde, 0x00, 0x6a, 0xd9, 0x60, 0xbd, 0x58, 0xa2, 0x32, 0x9e, 0xf6, 0xf5, 0x61, 0x28, 0xa2, 0x6b, 0x95, 0x7f, 0xfc, 0xa7, 0x7f, 0x6e, 0x69, 0xca, 0xe8, 0x42, 0xe2, 0xc4, 0xa6, 0xee, 0xfe, 0xfd, 0x4b, 0xff, 0x76, 0x43, 0xf3, 0x01, 0xa5, 0x85, 0x86, 0x16, 0x2d, 0x6a, 0x00, 0x15, 0xda, 0xa6, 0x16, 0xa4, 0x36, 0xd4, 0x48, 0x93, 0x10, 0xaa, 0x0a, 0x68, 0x9a, 0x02, 0x15, 0x0d, 0xea, 0xa6, 0x40, 0x53, 0x95, 0x72, 0xa2, 0x6e, 0x11, 0x27, 0xdf, 0x0b, 0x12, 0x46, 0xcf, 0x83, 0x65, 0x99, 0x28, 0xcb, 0x1c, 0xba, 0x0a, 0xee, 0x0c, 0x2d, 0xb5, 0x61, 0x32, 0x13, 0x4d, 0x51, 0xc4, 0xdc, 0x16, 0x2c, 0x79, 0x13, 0x61, 0x74, 0xe2, 0x3d, 0x2c, 0x15, 0x38, 0xcb, 0x12, 0xd0, 0x6c, 0x5a, 0xc4, 0xfc, 0xbd, 0xdd, 0xc9, 0x9a, 0x5e, 0xaa, 0xba, 0x6d, 0x79, 0x42, 0x24, 0xcb, 0x4a, 0x2a, 0xa0, 0xe2, 0x81, 0xa7, 0xcc, 0xca, 0xa6, 0x22, 0x43, 0x5f, 0x43, 0x7f, 0x06, 0x15, 0x4e, 0xf2, 0xcd, 0x26, 0x82, 0x93, 0xef, 0xfb, 0x78, 0x7c, 0x7c, 0xe0, 0x03, 0x4f, 0x96, 0x97, 0xf4, 0xdf, 0x71, 0x5d, 0x17, 0xe7, 0x70, 0xcf, 0x3f, 0x57, 0x17, 0x3a, 0xa6, 0x43, 0x1d, 0xc5, 0x4f, 0x52, 0x8e, 0xae, 0xfd, 0x29, 0x11, 0xf7, 0x9a, 0xa6, 0xc2, 0xed, 0xed, 0x2d, 0x33, 0xe6, 0x29, 0x8b, 0x9a, 0x5e, 0x78, 0x22, 0x61, 0xf8, 0xbe, 0x8f, 0xd9, 0x6c, 0xc6, 0x1d, 0x3a, 0x35, 0x25, 0xbe, 0xef, 0xb3, 0x7e, 0x9c, 0x76, 0x65, 0x4c, 0xe8, 0x31, 0x0c, 0x44, 0xe1, 0x53, 0xea, 0x5b, 0xbf, 0xdf, 0x67, 0xeb, 0x46, 0x32, 0x77, 0x79, 0x7e, 0xf7, 0x9a, 0x09, 0x5f, 0xe4, 0x7f, 0x4e, 0xf2, 0xa9, 0xa6, 0x69, 0x98, 0xb5, 0x4b, 0xbb, 0x40, 0x22, 0xc3, 0x10, 0x9b, 0x9a, 0x3e, 0x27, 0x82, 0xdc, 0x6c, 0xdb, 0xc6, 0xcd, 0xcd, 0x8d, 0x4c, 0xc2, 0x3a, 0x02, 0x4a, 0xc5, 0x61, 0x30, 0x34, 0xe5, 0x51, 0x5c, 0x67, 0x9e, 0xe7, 0x38, 0x1f, 0x43, 0x9e, 0x68, 0x29, 0xd8, 0x84, 0xf6, 0xe7, 0xc2, 0x20, 0xc8, 0xe5, 0x43, 0x48, 0x6c, 0xd5, 0xee, 0xbb, 0xa4, 0xb6, 0x0d, 0x17, 0x41, 0x7a, 0xaf, 0xe9, 0x72, 0xa5, 0x22, 0x74, 0x3c, 0x1e, 0xf9, 0x79, 0x75, 0x91, 0x9e, 0xba, 0xae, 0x39, 0xfc, 0x82, 0x22, 0x54, 0xa9, 0x99, 0x23, 0x47, 0x2b, 0x6a, 0x22, 0xc9, 0x30, 0x88, 0xf6, 0x87, 0x84, 0x66, 0xec, 0xf7, 0x47, 0xce, 0xb2, 0xa7, 0x66, 0x87, 0x24, 0x99, 0xad, 0x7c, 0x37, 0xe9, 0x7d, 0xe5, 0x2c, 0xe4, 0x0e, 0x0b, 0x9e, 0x9e, 0xd9, 0x66, 0xb3, 0xc1, 0x76, 0x7b, 0x82, 0xe7, 0x99, 0x6c, 0x4b, 0x4b, 0xf0, 0x22, 0xd9, 0x62, 0x76, 0x93, 0xcb, 0xae, 0xae, 0xae, 0xf0, 0xec, 0xd9, 0x33, 0xa4, 0x45, 0x8e, 0xd9, 0x4c, 0x64, 0x73, 0xbf, 0x7f, 0xff, 0x9e, 0xcd, 0x7e, 0xbe, 0x7c, 0x59, 0x43, 0x55, 0x81, 0x7f, 0xff, 0x0f, 0xbf, 0xe6, 0x66, 0xb3, 0x2c, 0x4b, 0x6c, 0x36, 0x1b, 0x96, 0x13, 0xd1, 0x73, 0xa2, 0x4b, 0x9c, 0xce, 0x0c, 0xfd, 0xfc, 0x8a, 0xa2, 0x60, 0x3a, 0x99, 0x5d, 0xb0, 0xc0, 0xbb, 0xfb, 0xc4, 0xc1, 0x60, 0x80, 0x4a, 0x4e, 0x16, 0x14, 0xd0, 0xd2, 0x4d, 0x6e, 0xeb, 0x16, 0x36, 0x6a, 0x7a, 0xbb, 0x5a, 0x65, 0xc3, 0x30, 0xf0, 0xea, 0xe5, 0xaf, 0x30, 0x9f, 0xcf, 0x19, 0xb1, 0xa2, 0x66, 0x8a, 0x3e, 0x33, 0x5d, 0x55, 0xf8, 0x5d, 0xa1, 0xcf, 0x9d, 0xd0, 0x39, 0x5d, 0xd7, 0xf1, 0xb0, 0x7a, 0x14, 0xcd, 0x47, 0x23, 0xfe, 0xbb, 0xba, 0xaa, 0x3d, 0xd9, 0x7b, 0x86, 0x21, 0x1a, 0x14, 0xbc, 0xa3, 0x35, 0x4d, 0x13, 0xaa, 0x74, 0xa0, 0xab, 0xeb, 0x1a, 0xae, 0xe7, 0x21, 0x3b, 0x47, 0x0c, 0x15, 0x93, 0x19, 0x13, 0xfd, 0x7c, 0x79, 0x9e, 0xe3, 0xcd, 0xdb, 0x5f, 0x31, 0x8b, 0x9b, 0x1a, 0xeb, 0xee, 0x3b, 0xb8, 0x3d, 0x6c, 0xd9, 0x3a, 0x98, 0x56, 0x72, 0xdd, 0xe7, 0x45, 0x4d, 0x5e, 0xd7, 0x6b, 0x81, 0x9a, 0xef, 0xb6, 0x6d, 0x31, 0x19, 0x0d, 0x99, 0xa1, 0x5e, 0x55, 0xf2, 0xfd, 0xb3, 0x74, 0x4e, 0xb1, 0xab, 0x2b, 0x85, 0x21, 0x61, 0x32, 0x3f, 0xa2, 0xb3, 0xec, 0x38, 0x0e, 0x6b, 0xdf, 0x89, 0x89, 0xbd, 0x5e, 0x1f, 0x31, 0x18, 0xb8, 0x78, 0xfd, 0xfa, 0xb5, 0xbc, 0x17, 0x1d, 0x2c, 0x16, 0x0b, 0x3c, 0x3c, 0x3c, 0x60, 0xb9, 0x3c, 0x20, 0x4d, 0x81, 0xd9, 0xcc, 0xc4, 0xdb, 0xb7, 0x6f, 0x31, 0x9d, 0x4e, 0xb1, 0x5a, 0x3f, 0x72, 0xc3, 0x44, 0x45, 0x99, 0x38, 0x49, 0x80, 0x08, 0x4e, 0x21, 0x9d, 0x39, 0x15, 0xf7, 0xae, 0x8e, 0xbd, 0x2c, 0x4b, 0xfe, 0x2c, 0xc8, 0xd0, 0xaa, 0xcb, 0x38, 0xa7, 0x89, 0x9d, 0x9a, 0x44, 0x92, 0xeb, 0x12, 0xe1, 0x2e, 0x89, 0x04, 0xea, 0xd9, 0x4a, 0xd9, 0x66, 0xa3, 0x00, 0xa3, 0xd1, 0x08, 0x8a, 0xf6, 0x84, 0x3e, 0x8a, 0x70, 0x14, 0xe9, 0x6e, 0x5a, 0x89, 0x46, 0x23, 0x97, 0xcd, 0x2f, 0x35, 0xb8, 0x74, 0x9e, 0x49, 0x7d, 0x43, 0x3f, 0x7b, 0x14, 0x45, 0x58, 0xaf, 0xcf, 0xa8, 0x2a, 0xc0, 0xf3, 0x20, 0x07, 0x04, 0x20, 0x08, 0xc4, 0x5d, 0x60, 0x2b, 0x7d, 0x34, 0xad, 0x78, 0x5e, 0x9a, 0x61, 0x20, 0x2f, 0x52, 0x44, 0x71, 0x0c, 0x55, 0x13, 0x0d, 0x88, 0xeb, 0x8b, 0x26, 0xe6, 0x70, 0x3e, 0x21, 0x49, 0x22, 0x68, 0x86, 0x8e, 0xba, 0x96, 0xa4, 0xc1, 0xba, 0xc2, 0x9b, 0x67, 0x6f, 0x84, 0xad, 0x70, 0x9e, 0x41, 0x55, 0x65, 0x5a, 0xa5, 0xa1, 0xc0, 0xf6, 0x6c, 0xec, 0x0f, 0x07, 0x98, 0x13, 0x61, 0xc2, 0xa5, 0xa9, 0x06, 0xd4, 0x56, 0x45, 0x12, 0xc7, 0x30, 0x5b, 0x1d, 0x57, 0xc3, 0x09, 0x86, 0xbd, 0x3e, 0x3e, 0x6f, 0xbf, 0xb0, 0x4c, 0x99, 0x1a, 0x42, 0xbd, 0x2b, 0x19, 0xe9, 0x32, 0xd4, 0xbb, 0x29, 0x56, 0x34, 0xb5, 0x76, 0x09, 0x62, 0x9a, 0xa6, 0x01, 0x55, 0x09, 0x45, 0x6d, 0xd1, 0x2a, 0x2d, 0x14, 0x88, 0x42, 0xde, 0xd4, 0x39, 0x6a, 0xc9, 0x52, 0xf7, 0x3d, 0x31, 0xb9, 0x2b, 0x68, 0x50, 0x56, 0x19, 0xb2, 0xe4, 0x8c, 0x34, 0x8b, 0xa0, 0x28, 0x2d, 0x4c, 0x43, 0x83, 0xef, 0xab, 0xc2, 0xf4, 0xa2, 0x28, 0x51, 0xe4, 0x0d, 0xca, 0x32, 0x87, 0xef, 0x39, 0x18, 0x0c, 0xa6, 0x70, 0x1c, 0x17, 0x3f, 0xfe, 0xf0, 0x83, 0xdc, 0x69, 0xd0, 0xee, 0x47, 0x81, 0xef, 0x05, 0x30, 0x0c, 0x4b, 0x42, 0x8c, 0x63, 0x18, 0x72, 0x32, 0x56, 0x54, 0x15, 0xaa, 0x26, 0xd2, 0x8f, 0xf2, 0xb2, 0xe2, 0x9d, 0x12, 0xb1, 0x0c, 0xa9, 0x21, 0xa1, 0x2e, 0xd0, 0xb6, 0x6d, 0x8c, 0xa4, 0x8d, 0x6b, 0x57, 0x72, 0x46, 0x13, 0xa0, 0xd8, 0x77, 0xa7, 0xbc, 0xeb, 0x06, 0xc4, 0xcf, 0x07, 0x88, 0x35, 0x82, 0xa6, 0x89, 0x08, 0x4a, 0x9a, 0xe6, 0x5e, 0xbf, 0x7e, 0x8d, 0xef, 0xbe, 0xfb, 0x0e, 0x59, 0x26, 0x60, 0xe6, 0x0f, 0x1f, 0x3e, 0xc0, 0x34, 0x35, 0xbe, 0x60, 0x69, 0x4f, 0x45, 0x2f, 0x36, 0xb9, 0x42, 0x11, 0x79, 0x8a, 0x9a, 0x12, 0xb2, 0xf2, 0x53, 0x14, 0x05, 0xfb, 0xc3, 0x86, 0xbb, 0x53, 0x00, 0x78, 0x78, 0x78, 0xc0, 0xa7, 0x4f, 0x0b, 0xc8, 0xf7, 0x19, 0x6f, 0xde, 0xcc, 0x3b, 0xc5, 0xcb, 0xe6, 0x1d, 0x39, 0x5d, 0x0a, 0x5d, 0x62, 0x0a, 0xcb, 0x31, 0xe4, 0x61, 0x0a, 0xc3, 0x90, 0x8d, 0x3b, 0x4c, 0xd3, 0xe4, 0x4b, 0x92, 0x6c, 0x3b, 0xc9, 0x70, 0x86, 0x3e, 0x3f, 0xc3, 0x30, 0x18, 0x2e, 0x26, 0xb9, 0xd2, 0xe1, 0x18, 0xf1, 0x44, 0x13, 0x45, 0x11, 0x77, 0xe5, 0xb4, 0xff, 0xa5, 0xf8, 0xcf, 0xae, 0xd4, 0x2e, 0x08, 0x82, 0x8b, 0xa8, 0x53, 0x22, 0x41, 0xbd, 0x7d, 0xfb, 0x96, 0xbb, 0xf8, 0xa6, 0x69, 0xc4, 0x25, 0xad, 0xd6, 0x5c, 0xe4, 0xc8, 0x56, 0x72, 0x38, 0x1c, 0x72, 0x57, 0x4d, 0x71, 0x89, 0xf4, 0xbc, 0x4e, 0xa7, 0x13, 0x1f, 0x52, 0x4d, 0xd3, 0xd8, 0x28, 0x83, 0x2e, 0x19, 0x5a, 0x17, 0x50, 0xc1, 0x6b, 0xea, 0x8a, 0x0b, 0x25, 0x5d, 0x92, 0x34, 0x69, 0x93, 0xb6, 0x9b, 0x0a, 0x1a, 0x15, 0x82, 0x6e, 0x66, 0xb2, 0xf0, 0x93, 0xb6, 0xd9, 0x0e, 0x98, 0xbe, 0x96, 0x3e, 0xbf, 0xcd, 0x66, 0xc3, 0xe7, 0xca, 0x75, 0x5d, 0x96, 0xe4, 0x90, 0x74, 0x8d, 0xa0, 0x54, 0x91, 0x73, 0x6d, 0x5e, 0xe4, 0xae, 0x77, 0x2f, 0x71, 0x9a, 0x2a, 0x89, 0x8f, 0x40, 0x7f, 0x1d, 0x8f, 0x47, 0x6e, 0xe8, 0x48, 0x8e, 0x48, 0xa4, 0x26, 0x7a, 0x76, 0x84, 0x2c, 0x51, 0xc3, 0x47, 0xb6, 0xc4, 0x8a, 0xa2, 0xe0, 0xeb, 0xaf, 0xbf, 0x86, 0xe7, 0x79, 0xb8, 0xbf, 0xbf, 0xc7, 0xfd, 0xfd, 0x3d, 0x3e, 0x7c, 0x88, 0xf0, 0x9b, 0xdf, 0xf4, 0xf0, 0xfb, 0xdf, 0xff, 0x3b, 0x4c, 0xa7, 0x53, 0xfc, 0xfc, 0xee, 0x2f, 0x28, 0x4b, 0x41, 0xdc, 0x12, 0x04, 0x23, 0x03, 0x49, 0x12, 0xe1, 0x74, 0x3a, 0xc0, 0xb6, 0x4d, 0x09, 0x93, 0x52, 0x40, 0x8b, 0x05, 0xdf, 0x77, 0xd1, 0xb6, 0x35, 0x72, 0x09, 0x0d, 0x1f, 0x0e, 0x07, 0xcc, 0x66, 0x33, 0xd4, 0x75, 0x8d, 0xe5, 0x72, 0x09, 0x4d, 0xd3, 0x70, 0x7d, 0x7d, 0xcd, 0x56, 0xb1, 0x53, 0x59, 0x88, 0x09, 0x11, 0x34, 0x74, 0x0b, 0xba, 0x56, 0xa2, 0x2a, 0x85, 0x6f, 0xc4, 0x62, 0xf1, 0x70, 0xc1, 0x25, 0x20, 0x85, 0xc7, 0xf5, 0xb5, 0x50, 0x69, 0xe4, 0x59, 0x0d, 0x45, 0x69, 0x71, 0x3a, 0x1d, 0xd8, 0xac, 0x47, 0x10, 0x3e, 0x55, 0xe4, 0x79, 0x8d, 0x38, 0xce, 0x2f, 0xe4, 0x84, 0x24, 0x21, 0x25, 0xab, 0xce, 0xaf, 0xbf, 0xfe, 0x5a, 0x14, 0xef, 0xd3, 0x59, 0xe6, 0x63, 0x3f, 0xed, 0x54, 0xc5, 0x5a, 0xa0, 0x40, 0xdb, 0x86, 0xe8, 0xb5, 0x80, 0x61, 0x98, 0x28, 0xd2, 0x1c, 0xab, 0xf5, 0x5a, 0x34, 0x9b, 0x00, 0x5e, 0x3d, 0x7f, 0xce, 0x93, 0x2d, 0xc5, 0xf6, 0xf6, 0x7a, 0x3d, 0x3c, 0x7f, 0xfe, 0x5c, 0x34, 0x37, 0xe7, 0xf8, 0x62, 0x8d, 0xd9, 0x2d, 0xda, 0x44, 0x7a, 0xa5, 0xe9, 0x9f, 0x02, 0x6f, 0xe8, 0xbc, 0x51, 0x53, 0x48, 0x70, 0xf4, 0xb3, 0x67, 0xcf, 0x30, 0x99, 0xcc, 0xf8, 0x9d, 0x11, 0x93, 0xa3, 0x0e, 0xd3, 0xb4, 0x90, 0x65, 0x99, 0x24, 0xb1, 0x6e, 0x79, 0x12, 0x1f, 0x8d, 0x07, 0x28, 0x0b, 0xd1, 0x14, 0x3e, 0x7b, 0xf6, 0x8c, 0xdf, 0x4b, 0x3a, 0xbb, 0xba, 0xae, 0xb3, 0x79, 0x0b, 0x29, 0x7c, 0xe8, 0xe7, 0x69, 0x9a, 0x06, 0x3f, 0xfc, 0xf0, 0x03, 0x3c, 0xcf, 0x91, 0x2b, 0xc0, 0x16, 0xd7, 0xd7, 0x23, 0x4e, 0xd6, 0x23, 0x8f, 0x07, 0xcf, 0x77, 0x2e, 0x12, 0x28, 0x09, 0xa9, 0xa2, 0xa6, 0x63, 0x34, 0x1a, 0x21, 0x8e, 0x63, 0x0e, 0x25, 0xea, 0xf7, 0xfb, 0x2c, 0x5d, 0xcd, 0xf3, 0x9c, 0xd9, 0xe4, 0x34, 0x44, 0x12, 0x37, 0x86, 0xee, 0x3b, 0x92, 0xf0, 0xd1, 0x74, 0x4c, 0x93, 0x3f, 0x91, 0x5b, 0xa7, 0xd3, 0xa9, 0xf0, 0xe4, 0x97, 0x88, 0x5b, 0x5a, 0x88, 0x26, 0xc1, 0xeb, 0xf9, 0x8c, 0xb6, 0x11, 0x3f, 0x43, 0x51, 0x14, 0x44, 0x27, 0x71, 0xdf, 0xd4, 0x12, 0x99, 0x25, 0x43, 0x19, 0x9a, 0xfe, 0x29, 0x6d, 0xd2, 0xb6, 0x6d, 0x8c, 0xc7, 0x63, 0x69, 0xd5, 0xbb, 0xe7, 0xa6, 0x82, 0xee, 0x0f, 0x4a, 0x43, 0x0c, 0xcb, 0x0a, 0xdb, 0xed, 0x16, 0x59, 0xd6, 0xc2, 0xf1, 0xc5, 0xef, 0x5f, 0xb7, 0xb5, 0x54, 0x56, 0x19, 0xd2, 0x5a, 0x5a, 0x83, 0x69, 0xea, 0x68, 0x5b, 0x07, 0xba, 0xa9, 0x41, 0x55, 0x5d, 0xf4, 0x7a, 0x1e, 0x14, 0x5d, 0x43, 0x9d, 0xd7, 0xe8, 0xf7, 0x02, 0xf8, 0x9e, 0x0b, 0x45, 0x91, 0xfe, 0xed, 0x45, 0x72, 0x61, 0x5d, 0x2b, 0x82, 0x62, 0x54, 0xe6, 0x69, 0xe9, 0x8d, 0xc6, 0xc4, 0xdb, 0xc5, 0x79, 0x09, 0xa3, 0x35, 0x60, 0xd8, 0x86, 0x6c, 0x3e, 0x0e, 0xd0, 0xbb, 0x30, 0x7a, 0x57, 0x52, 0xd5, 0x95, 0xae, 0xfd, 0x3d, 0x97, 0x37, 0x45, 0x51, 0x50, 0xb7, 0x99, 0x50, 0x9d, 0xa9, 0x80, 0xa2, 0xd4, 0x50, 0xd5, 0x0a, 0x9a, 0x52, 0x41, 0x87, 0x28, 0xe8, 0x96, 0x51, 0xe0, 0x78, 0x3c, 0x20, 0x8c, 0x0e, 0x68, 0x9b, 0x02, 0x86, 0xa1, 0xc2, 0x75, 0x00, 0x4d, 0x57, 0xa1, 0x69, 0x35, 0x5c, 0xd7, 0x97, 0x1d, 0x7a, 0x09, 0xdb, 0x36, 0x31, 0x1e, 0x8d, 0x31, 0x08, 0x24, 0x29, 0x22, 0x09, 0x31, 0x1c, 0x0f, 0xe4, 0xd4, 0x5b, 0xa3, 0x3f, 0x1c, 0xc0, 0x73, 0x7b, 0x68, 0x1a, 0x40, 0x51, 0x34, 0x0c, 0x4c, 0x1b, 0xa7, 0x28, 0x84, 0x66, 0x49, 0xd2, 0x8c, 0x6b, 0xc0, 0xef, 0xb9, 0x17, 0x93, 0x88, 0x8a, 0x12, 0x9e, 0xe7, 0xa0, 0x69, 0x2c, 0x9e, 0xaa, 0x9b, 0xa6, 0x85, 0xe3, 0x58, 0x08, 0x82, 0x1e, 0x4c, 0x4b, 0x97, 0x5a, 0xf0, 0x33, 0xaf, 0x1c, 0xca, 0x2a, 0x87, 0xaa, 0x01, 0xfd, 0x41, 0x8f, 0x49, 0x51, 0x74, 0xe1, 0x90, 0xed, 0x24, 0xc1, 0x4a, 0xeb, 0xf5, 0x09, 0xa6, 0x29, 0xc8, 0x0f, 0x79, 0x9e, 0xe3, 0xe1, 0xe1, 0x81, 0xb5, 0x8c, 0x22, 0x9c, 0xc4, 0xfe, 0x9b, 0x9d, 0x3b, 0x4d, 0x63, 0x4d, 0xd3, 0x60, 0xb9, 0x7a, 0xe0, 0xcb, 0x9d, 0x2e, 0x70, 0x2a, 0xa4, 0x86, 0x61, 0xa0, 0xac, 0x32, 0x9e, 0x4c, 0xa9, 0xd1, 0x1a, 0x8d, 0x02, 0x26, 0x98, 0x69, 0x9a, 0xf8, 0x73, 0x57, 0xab, 0x15, 0x17, 0xeb, 0xee, 0x8e, 0x8a, 0xe0, 0x57, 0x82, 0x8f, 0x9a, 0xa6, 0x61, 0xe2, 0x1e, 0x41, 0x67, 0xd4, 0xa9, 0x86, 0x61, 0x06, 0xd3, 0xcc, 0xd9, 0xc6, 0xd6, 0xf3, 0x3c, 0x24, 0x71, 0x7e, 0x21, 0x45, 0xa4, 0x8b, 0x88, 0x20, 0xfc, 0xdd, 0xfe, 0x7c, 0xd1, 0x6d, 0x77, 0xe1, 0xfe, 0xa6, 0x69, 0x50, 0xd5, 0xc5, 0x93, 0x8f, 0x7f, 0xdd, 0xa2, 0x69, 0xc5, 0xee, 0x7b, 0xe0, 0x07, 0x2c, 0x03, 0x13, 0x91, 0x90, 0x0e, 0xeb, 0x5f, 0xbb, 0xf1, 0xad, 0x99, 0xfc, 0xcc, 0x08, 0x9d, 0x20, 0xd2, 0x18, 0x4d, 0xec, 0x3f, 0xbf, 0x7f, 0x77, 0x41, 0x94, 0xeb, 0x7a, 0x47, 0x1b, 0x96, 0x09, 0xb4, 0xb2, 0x49, 0xcb, 0x73, 0xa4, 0x72, 0x42, 0xa1, 0x29, 0x42, 0x37, 0x0c, 0x18, 0x72, 0x7a, 0x22, 0x23, 0x1a, 0xb2, 0xed, 0xed, 0xbe, 0xe3, 0x59, 0x59, 0x01, 0x8a, 0xc8, 0x49, 0x3e, 0x86, 0xd1, 0x05, 0x79, 0x34, 0xcb, 0x32, 0xa8, 0x86, 0x09, 0xc7, 0x7f, 0xba, 0xd4, 0x00, 0xa0, 0xcc, 0x32, 0x94, 0x4d, 0x0b, 0x45, 0x37, 0x50, 0x64, 0x02, 0xe2, 0x8c, 0xd2, 0x0c, 0x79, 0x25, 0x9e, 0x71, 0x2c, 0x0b, 0x07, 0x39, 0x04, 0x96, 0x65, 0x05, 0xdf, 0x17, 0xfb, 0x6f, 0xb7, 0xe7, 0x43, 0x95, 0x6c, 0xe2, 0xbc, 0x2a, 0xa1, 0xe8, 0x1a, 0x94, 0xb6, 0xb9, 0xd8, 0x0b, 0x92, 0xd9, 0x4a, 0x14, 0x45, 0x38, 0x1c, 0x0e, 0xfc, 0x7b, 0x09, 0xfb, 0xdd, 0x25, 0xfa, 0x7d, 0x1b, 0xbf, 0xfd, 0xed, 0x6f, 0x11, 0x0c, 0x85, 0x8c, 0xc6, 0xef, 0x07, 0xf0, 0xfb, 0x01, 0xaa, 0xb6, 0xc1, 0xcf, 0x3f, 0xaf, 0xb0, 0x3d, 0xfc, 0x09, 0x8b, 0xd5, 0x12, 0xcf, 0x1f, 0x3e, 0xb3, 0x11, 0xd0, 0xe9, 0x14, 0x61, 0x32, 0x11, 0xba, 0xe8, 0xe5, 0x72, 0x89, 0xb6, 0x6d, 0x31, 0x9d, 0x05, 0x98, 0xcd, 0x66, 0x82, 0xb1, 0x2d, 0x9b, 0x97, 0xdf, 0x13, 0xb9, 0x73, 0x50, 0x00, 0x00, 0x08, 0xad, 0x49, 0x44, 0x41, 0x54, 0xff, 0xfe, 0xf7, 0x38, 0x1e, 0x8f, 0x78, 0x78, 0x78, 0xe0, 0x15, 0x0d, 0xc1, 0xb4, 0xf4, 0x4e, 0x11, 0x0b, 0x3f, 0xcb, 0x1b, 0x7c, 0x7a, 0xf8, 0xc2, 0x97, 0xaf, 0xaa, 0xaa, 0x78, 0xff, 0xf1, 0x13, 0x3f, 0xf3, 0x77, 0xef, 0x7e, 0x96, 0xaa, 0x8a, 0x06, 0xaa, 0xa2, 0xcb, 0xa2, 0xdb, 0xa2, 0x28, 0x4a, 0xb4, 0xad, 0x86, 0xe1, 0x40, 0x98, 0x6d, 0x14, 0x79, 0x85, 0x46, 0x13, 0x84, 0xb2, 0xaa, 0x6c, 0x90, 0xc4, 0x19, 0xda, 0x46, 0x14, 0xca, 0xcd, 0x66, 0xf5, 0x74, 0x5e, 0xca, 0x12, 0xeb, 0xf5, 0x92, 0x79, 0x26, 0xaa, 0x8c, 0xf0, 0x4d, 0xd3, 0x14, 0x9a, 0xae, 0xc0, 0xf3, 0x7d, 0x78, 0xbe, 0x30, 0xb3, 0x49, 0xd2, 0x08, 0xe1, 0x42, 0x5c, 0x9e, 0xe1, 0x51, 0x38, 0x1d, 0x56, 0x45, 0xc9, 0x3c, 0x10, 0xc7, 0xb6, 0x91, 0x65, 0x11, 0xa2, 0x73, 0xc8, 0xb2, 0xaa, 0xb2, 0xae, 0x70, 0x3e, 0x1e, 0x71, 0x3e, 0x1e, 0x91, 0x15, 0x05, 0x8e, 0xdb, 0x2d, 0xef, 0xe7, 0xbb, 0x4e, 0x9a, 0x24, 0x7d, 0x2a, 0x2a, 0x21, 0xc1, 0x35, 0x34, 0x0d, 0xb6, 0xdc, 0xfb, 0xb6, 0x59, 0x0d, 0x47, 0x1a, 0x39, 0xed, 0x0e, 0x07, 0xd6, 0x28, 0x93, 0xac, 0x71, 0x3e, 0x9f, 0x73, 0x43, 0x78, 0x0e, 0x4f, 0x72, 0x27, 0xad, 0xe3, 0x74, 0x0a, 0x91, 0xe7, 0x25, 0xe2, 0x58, 0xa0, 0x66, 0xaa, 0xa2, 0x23, 0x0e, 0x4f, 0xbc, 0x82, 0x30, 0x4d, 0x43, 0x2a, 0x3c, 0x72, 0xf8, 0xbe, 0x83, 0x28, 0x4c, 0x70, 0x3d, 0xbf, 0x41, 0xbf, 0x17, 0xc0, 0xb1, 0x84, 0x59, 0x4b, 0x91, 0x89, 0x66, 0xb7, 0xb1, 0x2c, 0xb4, 0xa6, 0x89, 0xd2, 0x7e, 0xca, 0xa8, 0x78, 0xfe, 0xfc, 0xb9, 0x1c, 0x18, 0x3e, 0xb1, 0x51, 0xce, 0x72, 0xb9, 0x90, 0xc9, 0x78, 0x0e, 0x33, 0xb8, 0x09, 0x71, 0xd8, 0x6e, 0xb7, 0x88, 0x93, 0x90, 0x09, 0x80, 0x84, 0xb0, 0x90, 0x4b, 0x64, 0x59, 0x96, 0x78, 0xf9, 0xf2, 0x25, 0x7f, 0x1f, 0x00, 0x0c, 0x87, 0x43, 0xce, 0x93, 0xa8, 0xaa, 0x8a, 0x1b, 0x5e, 0x5a, 0x2d, 0x71, 0xa8, 0x94, 0xbc, 0x9f, 0xc2, 0x30, 0x64, 0x5f, 0x87, 0xed, 0x76, 0xcb, 0x0d, 0x37, 0x9b, 0xf1, 0x68, 0x0d, 0xff, 0xbb, 0xe9, 0x74, 0x8a, 0xfd, 0xe9, 0xc8, 0x46, 0x33, 0x5d, 0x24, 0xaf, 0x2e, 0xc5, 0x99, 0x4e, 0x42, 0xc1, 0x03, 0xd0, 0xe5, 0x5d, 0x1f, 0x04, 0x01, 0x9b, 0xd6, 0x10, 0xd2, 0x56, 0xd7, 0x35, 0x82, 0x20, 0x60, 0x5e, 0x11, 0x11, 0xa1, 0xa9, 0xa6, 0x90, 0x7b, 0xe3, 0xf1, 0x78, 0x44, 0x93, 0x2a, 0x48, 0x12, 0x91, 0x0c, 0xa8, 0x1a, 0x0d, 0x9a, 0x26, 0x43, 0x59, 0x83, 0xbf, 0xc7, 0x72, 0x5b, 0xa8, 0xaa, 0x25, 0x1b, 0x91, 0x1c, 0x55, 0xa3, 0x72, 0xa0, 0x96, 0x68, 0x1a, 0xa6, 0xd0, 0x55, 0x0d, 0xe7, 0xd3, 0x91, 0x1b, 0x0b, 0xbd, 0xd2, 0x51, 0xa3, 0x46, 0x51, 0x96, 0xc8, 0x3a, 0x28, 0x30, 0xdd, 0x97, 0x6a, 0x09, 0x21, 0x75, 0x5c, 0x2c, 0xf1, 0x70, 0x5c, 0x40, 0xd3, 0x34, 0x8e, 0x2d, 0xd6, 0x75, 0x5d, 0x18, 0xcb, 0xd0, 0x65, 0xd9, 0x4d, 0xba, 0xea, 0xc2, 0xee, 0x54, 0xe4, 0x69, 0x8a, 0xa1, 0x06, 0xc0, 0xd2, 0x6b, 0xb4, 0x68, 0x44, 0xe6, 0x78, 0x95, 0xa2, 0x69, 0x4b, 0xb4, 0x8d, 0xd0, 0x92, 0xb7, 0x6d, 0x8d, 0xf3, 0x71, 0x85, 0xa6, 0xa9, 0xe0, 0x79, 0x0a, 0x82, 0x5e, 0x1f, 0x8e, 0xab, 0x43, 0x97, 0xd2, 0x34, 0xd3, 0x34, 0x10, 0x9e, 0x42, 0x38, 0x33, 0x07, 0x41, 0xd0, 0xc3, 0xb0, 0xdf, 0x13, 0xdd, 0x7d, 0x96, 0x61, 0xbf, 0xdf, 0x62, 0xbb, 0xde, 0x63, 0x76, 0x35, 0x83, 0xef, 0x0b, 0x82, 0x8b, 0x48, 0x3c, 0xd3, 0xa0, 0x69, 0x06, 0x54, 0x45, 0xfc, 0x9c, 0x83, 0xb1, 0xcb, 0xb0, 0x9c, 0xa2, 0xb4, 0x68, 0xd5, 0x1c, 0x71, 0x9a, 0xb0, 0x7e, 0x35, 0x8f, 0x13, 0x26, 0xf8, 0x75, 0x77, 0x52, 0x44, 0x3e, 0x7a, 0xff, 0xe9, 0xe3, 0x85, 0x25, 0x28, 0x4d, 0x35, 0x54, 0xf8, 0x0e, 0x7b, 0x41, 0xb2, 0xa3, 0xce, 0x56, 0x55, 0x9f, 0xd0, 0x8b, 0xba, 0xae, 0x71, 0x77, 0xf7, 0x92, 0xa1, 0xac, 0xee, 0x7e, 0x9a, 0x5e, 0x26, 0x22, 0x52, 0x10, 0x4b, 0x94, 0x08, 0x2e, 0xf4, 0x12, 0xd1, 0xe1, 0xe8, 0x92, 0xce, 0xa8, 0x38, 0xda, 0xb6, 0x8d, 0xd9, 0xfc, 0x19, 0x43, 0xe8, 0xb4, 0xd7, 0x26, 0x89, 0x94, 0x98, 0xe8, 0x1d, 0x3e, 0x3c, 0x34, 0x91, 0x13, 0xfc, 0x4b, 0x13, 0x70, 0x57, 0x3f, 0x4d, 0x2e, 0x75, 0x04, 0xeb, 0x53, 0x67, 0x3e, 0x1e, 0x8f, 0x2f, 0x52, 0xc4, 0xc8, 0x97, 0xd8, 0x32, 0xc5, 0xc5, 0x13, 0x04, 0x01, 0xc7, 0x7f, 0x12, 0xf9, 0x82, 0x5e, 0xca, 0xc3, 0xe1, 0xc0, 0xb0, 0x76, 0x92, 0x24, 0x78, 0x7c, 0x14, 0x19, 0xee, 0xfd, 0x7e, 0x1f, 0xfd, 0x41, 0x8f, 0xe5, 0x1c, 0xd4, 0x89, 0x13, 0x4a, 0x62, 0x9a, 0x26, 0xfa, 0x7d, 0x85, 0x27, 0x97, 0xed, 0x76, 0xcb, 0xec, 0x7d, 0x9a, 0xda, 0x3e, 0x7c, 0xf8, 0x70, 0xa1, 0x22, 0xe8, 0xc2, 0x95, 0x9a, 0xa6, 0xe1, 0xc5, 0x8b, 0x17, 0x6c, 0x3d, 0x49, 0x8e, 0x56, 0x61, 0x18, 0xb2, 0x6c, 0x66, 0x3e, 0x9b, 0x33, 0xdc, 0x49, 0x3b, 0x54, 0x9a, 0xc0, 0xe3, 0x38, 0xc6, 0x7e, 0xb7, 0xe3, 0x82, 0x1e, 0x86, 0x21, 0x67, 0xc5, 0x93, 0xfb, 0xde, 0xf1, 0x78, 0x64, 0x76, 0x2f, 0xe9, 0xaf, 0xe9, 0x79, 0x53, 0x17, 0x4f, 0x0e, 0x4d, 0xd4, 0xec, 0xd0, 0xbb, 0x40, 0xe4, 0x3a, 0xb1, 0xd7, 0xcd, 0x50, 0xd7, 0x02, 0xe6, 0x23, 0x33, 0x1a, 0x00, 0xb2, 0x59, 0x85, 0x5c, 0x4b, 0x69, 0x7c, 0x51, 0x11, 0x74, 0x4d, 0xbc, 0x0e, 0x9a, 0xde, 0xc9, 0x53, 0x80, 0x78, 0x02, 0x22, 0x02, 0x53, 0x58, 0xb6, 0x12, 0xf4, 0x49, 0x2b, 0x90, 0x30, 0x0c, 0x61, 0xb9, 0x0e, 0xc3, 0xc0, 0x62, 0x07, 0x7a, 0x84, 0xef, 0x83, 0xf7, 0x84, 0x00, 0xb0, 0x5e, 0xaf, 0xe1, 0xfb, 0x3e, 0xbe, 0xfb, 0xee, 0x1b, 0x4c, 0xa7, 0x53, 0x2c, 0x97, 0x4b, 0x18, 0x86, 0x81, 0x17, 0x2f, 0x5e, 0xe0, 0x1c, 0xae, 0x30, 0x9b, 0xcd, 0x90, 0xe7, 0x39, 0x7e, 0xfc, 0xf1, 0x47, 0xc4, 0x71, 0x2c, 0x6d, 0x7a, 0xa7, 0x08, 0x02, 0x1f, 0xbb, 0xdd, 0x4e, 0x16, 0x30, 0xf1, 0x3b, 0xe4, 0x79, 0x8a, 0x34, 0x8d, 0xc5, 0x2e, 0xb1, 0x11, 0x69, 0x70, 0x84, 0xe0, 0x7c, 0xfa, 0xf4, 0x89, 0x3f, 0x3b, 0x5a, 0x1b, 0xf8, 0x72, 0x9f, 0xb8, 0xdf, 0xef, 0x71, 0x3c, 0x64, 0xb0, 0x2c, 0x71, 0xbe, 0x0d, 0xc3, 0xc0, 0x64, 0x3c, 0x45, 0x8b, 0x82, 0xe1, 0x6b, 0xe2, 0xa0, 0x10, 0xf1, 0x71, 0x3e, 0x9f, 0xe3, 0xcb, 0xe2, 0xb3, 0xf8, 0x8c, 0xca, 0x0c, 0x49, 0x1a, 0xf1, 0x40, 0x52, 0x56, 0x39, 0x36, 0xdb, 0x15, 0x9e, 0x5d, 0xdf, 0x62, 0x32, 0x11, 0x99, 0xd8, 0xeb, 0xf5, 0x5a, 0x10, 0x21, 0x25, 0x57, 0x22, 0xcf, 0x73, 0x1c, 0xa3, 0x58, 0xac, 0xa0, 0x92, 0xf4, 0x62, 0x55, 0x45, 0xef, 0xca, 0x62, 0x11, 0xf3, 0x34, 0x4e, 0x8d, 0x93, 0xa2, 0xa9, 0x4c, 0xc4, 0x4c, 0x64, 0x43, 0x45, 0x12, 0xa9, 0xd9, 0x6c, 0x86, 0x24, 0x49, 0xf0, 0xf9, 0xf3, 0x67, 0x71, 0x77, 0xca, 0xdd, 0x2c, 0x9d, 0x39, 0x31, 0x59, 0x37, 0xb0, 0x6d, 0xc0, 0xf3, 0x5c, 0x78, 0xd2, 0x3d, 0x8d, 0x48, 0xb2, 0x5d, 0xfe, 0x81, 0x69, 0x9a, 0x50, 0x35, 0x45, 0x46, 0x35, 0xeb, 0xa8, 0xaa, 0x06, 0xef, 0xdf, 0x7f, 0xc4, 0x97, 0x87, 0x0d, 0xea, 0x1a, 0xe8, 0xf5, 0x2c, 0x14, 0x59, 0x0e, 0xcb, 0x52, 0x90, 0x66, 0x2d, 0x66, 0xb3, 0x21, 0x26, 0x13, 0x81, 0xae, 0x09, 0xf3, 0x99, 0x08, 0x57, 0xb3, 0x6b, 0xbe, 0x07, 0x48, 0x3a, 0xd9, 0xeb, 0xf5, 0x38, 0xc0, 0xa8, 0xa8, 0x4a, 0x6e, 0x64, 0x09, 0xe5, 0x7b, 0xf1, 0xe2, 0x05, 0x13, 0xdb, 0xa8, 0xb1, 0xed, 0x4a, 0x36, 0x49, 0x62, 0xab, 0x69, 0x22, 0xb1, 0xf2, 0x29, 0xf9, 0xf1, 0x69, 0xc7, 0x4c, 0x30, 0xfb, 0x72, 0xb9, 0xe4, 0x7b, 0xa7, 0x2c, 0x4b, 0xde, 0x59, 0x77, 0x49, 0x6f, 0x54, 0xfc, 0x08, 0x41, 0x10, 0xe4, 0xc8, 0x88, 0x1b, 0x45, 0x5a, 0x47, 0xd2, 0x5d, 0xd6, 0x5d, 0x77, 0x6e, 0xd7, 0x3b, 0x41, 0x90, 0x95, 0xb6, 0xdc, 0xe4, 0x57, 0x41, 0x28, 0x1d, 0x11, 0x35, 0x69, 0x98, 0xd1, 0xa0, 0xf0, 0x60, 0x42, 0x0d, 0x2a, 0xad, 0x58, 0xe9, 0x6e, 0x1c, 0x0e, 0x87, 0xd0, 0x34, 0x8d, 0xd7, 0x97, 0xd4, 0x3c, 0x77, 0xef, 0x3c, 0x7a, 0xa7, 0xd7, 0xa7, 0x10, 0xbe, 0x2f, 0x1c, 0x3f, 0x1d, 0x5f, 0x36, 0x1e, 0xfb, 0x08, 0x69, 0x2a, 0x90, 0x96, 0xaf, 0xa7, 0x77, 0xd0, 0x0d, 0x15, 0x51, 0x92, 0x40, 0x51, 0x5a, 0x54, 0x8d, 0xb8, 0x97, 0xca, 0x2a, 0x07, 0x72, 0xa0, 0x71, 0x1a, 0x68, 0x86, 0xc9, 0x79, 0xf7, 0x96, 0x65, 0xa1, 0x4d, 0x5b, 0x64, 0x65, 0x26, 0xc9, 0xb6, 0xca, 0x85, 0x36, 0xdf, 0xd0, 0x75, 0xf4, 0x1c, 0x0f, 0x6d, 0x56, 0x62, 0x77, 0x0a, 0x31, 0x18, 0x89, 0x28, 0xeb, 0x38, 0x8d, 0x50, 0x35, 0xa5, 0x88, 0x01, 0xbe, 0x7d, 0xf9, 0x0f, 0xff, 0x93, 0x34, 0xd4, 0xbf, 0xd4, 0x99, 0xff, 0x72, 0x22, 0xa7, 0x62, 0xce, 0x3b, 0x74, 0xbd, 0x80, 0xd2, 0x96, 0xa8, 0xaa, 0x04, 0x65, 0x1d, 0xa3, 0xaa, 0x12, 0xd4, 0x4d, 0x02, 0xa5, 0xcd, 0x80, 0x36, 0x47, 0x3f, 0xd0, 0x30, 0x1e, 0xf7, 0xf0, 0xf2, 0xee, 0x0a, 0xb7, 0xb7, 0x53, 0xf8, 0xbe, 0x8e, 0xb6, 0x49, 0x01, 0x14, 0xd0, 0xf5, 0x06, 0x9e, 0x33, 0x43, 0xe0, 0xf5, 0x11, 0xf4, 0x02, 0x54, 0x65, 0x8d, 0xdd, 0x66, 0x87, 0xfd, 0xfe, 0x88, 0xa6, 0x14, 0x10, 0xd7, 0xc7, 0x2f, 0x0b, 0xe8, 0x86, 0x05, 0x45, 0x31, 0x71, 0x3a, 0x47, 0x48, 0xd2, 0x0c, 0x8e, 0xeb, 0xc1, 0x76, 0x1c, 0x94, 0x75, 0x05, 0xc3, 0x2b, 0x61, 0xda, 0x2a, 0xaa, 0xba, 0x40, 0x56, 0xa4, 0x28, 0xaa, 0x14, 0xa7, 0xf0, 0x80, 0x73, 0x74, 0x40, 0xd3, 0xd6, 0x18, 0xf6, 0xfa, 0x70, 0x1c, 0x1b, 0xaa, 0xaa, 0xa0, 0x2c, 0x0b, 0x19, 0xfa, 0x61, 0xc3, 0x34, 0x0d, 0xd4, 0x75, 0x85, 0x38, 0x8d, 0x61, 0x18, 0x3a, 0x46, 0xa3, 0x21, 0xa6, 0xd3, 0x09, 0x7a, 0x3d, 0x1f, 0x8a, 0x02, 0x54, 0x55, 0x89, 0xb2, 0x2c, 0xf0, 0xb8, 0x58, 0x09, 0xb6, 0xae, 0xdc, 0xb9, 0x76, 0x3f, 0x0f, 0x91, 0x4e, 0x26, 0x2e, 0xc3, 0xf9, 0x7c, 0xce, 0x11, 0x97, 0x24, 0xf4, 0x4f, 0xd3, 0x14, 0xae, 0xeb, 0xf0, 0xbe, 0x94, 0x76, 0x43, 0x24, 0x13, 0x22, 0xeb, 0x57, 0xf2, 0xfe, 0xa6, 0xe9, 0xa6, 0xbb, 0x43, 0xb4, 0x2c, 0xe3, 0x42, 0x03, 0xda, 0x34, 0x0d, 0x17, 0xd7, 0x28, 0x8a, 0x60, 0x9a, 0x06, 0x43, 0x5d, 0x5d, 0x9b, 0x5e, 0xfa, 0x39, 0xe9, 0xb2, 0xa0, 0xa2, 0x4c, 0xf0, 0x34, 0x4d, 0x11, 0xd7, 0xd7, 0xd7, 0x0c, 0xe5, 0x92, 0xdd, 0x26, 0xfd, 0xe5, 0xba, 0x2e, 0xb2, 0xac, 0xe0, 0x17, 0x99, 0x8a, 0x8b, 0x65, 0x59, 0x9c, 0xa1, 0xbe, 0x5c, 0x6d, 0x18, 0x82, 0x22, 0xfd, 0x77, 0x92, 0x14, 0x50, 0x55, 0x49, 0x62, 0x71, 0x0c, 0xd8, 0xb6, 0x05, 0xdf, 0xf7, 0x60, 0xdb, 0x16, 0xaa, 0xaa, 0x44, 0x14, 0x85, 0xc8, 0xb2, 0x14, 0x4d, 0x23, 0x24, 0x55, 0x44, 0x26, 0xa4, 0x83, 0x48, 0xcd, 0xcb, 0xe9, 0x74, 0x42, 0xd0, 0xf7, 0xf9, 0x10, 0x51, 0x5a, 0x1c, 0x5d, 0x16, 0xfd, 0x7e, 0x1f, 0x55, 0x27, 0x2a, 0x97, 0xfc, 0xd4, 0xe9, 0x72, 0xb0, 0x2c, 0x0b, 0xe1, 0x39, 0x92, 0x2e, 0x54, 0x3a, 0x3b, 0x38, 0xad, 0x56, 0x2b, 0x3c, 0x3c, 0x3c, 0x60, 0xbd, 0x5e, 0x23, 0x08, 0x06, 0xf0, 0xfd, 0x1e, 0x86, 0xa3, 0x31, 0x06, 0xc3, 0x11, 0x82, 0xa0, 0x0f, 0xd7, 0xf5, 0xa0, 0xa8, 0x1a, 0x8a, 0xb2, 0x42, 0x55, 0x37, 0xd0, 0x75, 0x03, 0xba, 0x6e, 0xa0, 0x69, 0x5a, 0x94, 0x55, 0x8d, 0xaa, 0x6e, 0x50, 0xd7, 0x0d, 0x8a, 0xa2, 0x84, 0x6e, 0x98, 0xa8, 0xeb, 0x06, 0x8a, 0xaa, 0xc1, 0x34, 0x2d, 0x40, 0x51, 0x11, 0x27, 0x29, 0x8e, 0xa7, 0x33, 0xce, 0xe7, 0x10, 0x45, 0x51, 0xc2, 0xb6, 0x1d, 0x8c, 0xc7, 0x7d, 0x3c, 0xbb, 0x9d, 0xe1, 0xfa, 0xe6, 0x19, 0x2c, 0xdb, 0x41, 0x59, 0x09, 0x1b, 0xdc, 0xf1, 0x78, 0x04, 0xd3, 0xd4, 0xc5, 0xbb, 0x98, 0xa4, 0x08, 0xa3, 0x10, 0x69, 0x96, 0xa1, 0x91, 0x08, 0xcb, 0x97, 0xc5, 0x19, 0x41, 0x60, 0x63, 0x36, 0x9f, 0xc3, 0x71, 0x5d, 0x14, 0x65, 0x29, 0xfe, 0xff, 0xa6, 0x81, 0x6e, 0x18, 0x70, 0xa4, 0xd7, 0x3f, 0x31, 0x88, 0xc9, 0x17, 0x9d, 0x9a, 0xaf, 0xcf, 0x5f, 0xbe, 0x20, 0x8c, 0x22, 0x6e, 0x58, 0x74, 0x43, 0xc7, 0xf5, 0xf5, 0xb5, 0x28, 0x48, 0x12, 0x72, 0xad, 0xaa, 0x8a, 0x3f, 0xd3, 0xd3, 0xe9, 0x84, 0xfb, 0xfb, 0x7b, 0x7c, 0xf9, 0xb2, 0x86, 0x69, 0xea, 0xf8, 0xed, 0x6f, 0xbf, 0xe5, 0x77, 0x39, 0x08, 0x02, 0x78, 0x9e, 0x27, 0x83, 0x7f, 0xf6, 0x2c, 0xd5, 0xa1, 0xfd, 0x29, 0x35, 0x5b, 0xc4, 0x74, 0xb7, 0x6d, 0x1b, 0x4d, 0xad, 0xe3, 0x5f, 0xff, 0x70, 0x8f, 0x3f, 0xff, 0xf9, 0x00, 0xdb, 0x2e, 0x70, 0x35, 0xbf, 0x86, 0xa6, 0xea, 0xd0, 0x54, 0x1d, 0xe3, 0xf1, 0x04, 0xb7, 0x37, 0x57, 0xcc, 0xb8, 0x57, 0x94, 0x16, 0x8a, 0xa2, 0xe2, 0x74, 0x4a, 0x91, 0xc4, 0x05, 0x3c, 0xcf, 0xc5, 0x37, 0xdf, 0xfe, 0x0a, 0x8e, 0xe3, 0x02, 0x50, 0x50, 0x96, 0x15, 0xb2, 0x2c, 0x47, 0x92, 0xa4, 0xc2, 0x1c, 0x47, 0x37, 0x90, 0x92, 0x43, 0x56, 0x96, 0xe2, 0x78, 0x3c, 0xb2, 0xec, 0xa9, 0x69, 0x04, 0x9b, 0x3d, 0x3c, 0x9f, 0x51, 0x55, 0x25, 0x92, 0x24, 0xc6, 0x62, 0xf1, 0x05, 0x5f, 0xbe, 0x3c, 0xe0, 0x74, 0x3a, 0x22, 0xcf, 0x33, 0x64, 0x59, 0x8a, 0x34, 0x17, 0xef, 0x7e, 0x26, 0xcf, 0x78, 0x29, 0xc9, 0x81, 0x44, 0x00, 0x6b, 0xab, 0x5a, 0xba, 0xc9, 0xf9, 0x70, 0x6c, 0x17, 0x55, 0x5d, 0xc3, 0x34, 0x4c, 0xf4, 0xfb, 0x43, 0xb8, 0xae, 0x87, 0xd7, 0xaf, 0x5e, 0xb2, 0xc2, 0xc1, 0xb6, 0x6d, 0x76, 0x76, 0x24, 0x8e, 0x89, 0x2b, 0x77, 0xc7, 0xf3, 0xf9, 0x1c, 0xb3, 0xd9, 0x4c, 0xae, 0x0c, 0x44, 0x53, 0x6e, 0x59, 0x16, 0x3c, 0x69, 0x9b, 0x4a, 0x52, 0x26, 0x82, 0xdc, 0x49, 0xde, 0xea, 0x38, 0x02, 0xf9, 0x31, 0x0d, 0x13, 0x8a, 0xa2, 0x22, 0xcf, 0x0b, 0x24, 0x71, 0x8c, 0x4a, 0xc6, 0x7e, 0x3a, 0xb6, 0x22, 0x2d, 0x64, 0x3d, 0xd8, 0x8e, 0xc5, 0xfc, 0x1a, 0xc7, 0x71, 0x10, 0x04, 0x7d, 0xa4, 0x49, 0xca, 0x2c, 0x77, 0x1a, 0xce, 0x68, 0xa0, 0x39, 0x9d, 0x4e, 0xf8, 0xfe, 0xcf, 0xdf, 0x73, 0x13, 0x4b, 0xcc, 0x75, 0xfa, 0x7a, 0x91, 0xd8, 0x16, 0x5c, 0xa4, 0x4f, 0x1e, 0x8f, 0x47, 0x2c, 0x97, 0x3b, 0x64, 0x99, 0xb0, 0xae, 0x3d, 0x1e, 0x0f, 0x8c, 0xf0, 0x91, 0x9c, 0xb5, 0x1b, 0x8c, 0x42, 0x21, 0x33, 0xfb, 0xfd, 0x9e, 0x0d, 0x9a, 0x88, 0xcb, 0x40, 0x2a, 0x0e, 0x4a, 0x76, 0x24, 0xd9, 0x22, 0x15, 0x50, 0xda, 0x09, 0x53, 0xe1, 0xa7, 0xd5, 0x03, 0x11, 0x4c, 0x75, 0x5d, 0x87, 0x6d, 0xd9, 0xfc, 0x99, 0x85, 0xa1, 0x38, 0x3b, 0x9a, 0xa6, 0xc1, 0xef, 0xf9, 0x3c, 0x40, 0xd1, 0x73, 0xad, 0xeb, 0x1a, 0xb6, 0x6c, 0x06, 0x89, 0x6f, 0xb1, 0xd9, 0x6c, 0x18, 0x61, 0x21, 0x83, 0x2a, 0x42, 0xf8, 0x48, 0x2d, 0xd3, 0x95, 0x5d, 0xd3, 0x3f, 0x13, 0x4f, 0xc7, 0xb3, 0x7a, 0x30, 0x4d, 0x03, 0x86, 0xa9, 0xa3, 0x45, 0x8b, 0xa2, 0x14, 0xe4, 0xc4, 0x20, 0xb0, 0x31, 0x99, 0x8c, 0xb1, 0x3b, 0x2c, 0x45, 0x78, 0xd2, 0x51, 0x10, 0xbf, 0x15, 0x55, 0x05, 0x94, 0x46, 0x9a, 0x8e, 0xa5, 0x58, 0x7c, 0x5c, 0x22, 0x3c, 0x9f, 0xb1, 0xdd, 0x6e, 0x50, 0xd7, 0xc2, 0x04, 0xa7, 0x55, 0x5a, 0xa8, 0x9a, 0x2a, 0x98, 0xfb, 0x90, 0xd9, 0x26, 0xad, 0x82, 0x56, 0xba, 0x0c, 0x0e, 0x7b, 0x03, 0x8c, 0x82, 0x01, 0x1c, 0xcb, 0x46, 0x6b, 0x82, 0x9b, 0x63, 0x82, 0xe9, 0xff, 0x1f, 0x42, 0xc0, 0x5f, 0x9d, 0xca, 0x09, 0xd0, 0x39, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/select_icon.xpm0000600000176000000410000001063412105760300022474 0ustar buildbotwww-data00000000000000/* XPM */ static const char * select_icon_xpm[] = { "64 64 6 1", " c #FEFFFF", ". c #000000", "+ c #8BE7FF", "@ c #008BAE", "# c #00CCFF", "$ c #FFFFFF", " ", " ", " ........ ............. ............. ............ ........ ", " .+++++@. .++++++++++@. .++++++++++@. .+++++++++@. .+++++@. ", " .+####@. .+#########@. .+#########@. .+########@. .+####@. ", " .+####@. .+#########@. .+#########@. .+########@. .+####@. ", " .+####@. .+#########@. .+#########@. .+########@. .+####@. ", " .+####@. .+#########@. .+#########@. .+########@. .+####@. ", " .+####@. .@@@@@@@@@@@. .@@@@@@@@@@@. .@@@@@@@@@@. .+####@. ", " .+####@. ............. ............. ............ .+####@. ", " .+####@. .+####@. ", " .+####@. .+####@. ", " .+####@. .+####@. ", " .@@@@@@. .@@@@@@. ", " ........ ........ ", "$$$$$$$$$ ", "$$$$$$$$$ $$$$$$$$ ", " ........ ........ ", " .+++++@. $ .+++++@. ", " .+####@. .+####@. ", " .+####@. .+####@. ", " .+####@. .+####@. ", " .+####@. .+####@. ", " .+####@. .+####@. ", " .+####@. .+####@. ", " .+####@. .+####@. ", " .+####@. .+####@. ", " .+####@. .+####@. ", " .@@@@@@. .+####@. ", " ........ .@@@@@@. ", "$$$$$$$$$$$$ ........ ", "$$$$$$$$$$ $$$$$$$$$$", " $$$$$$$$$ $$$$$$$$$$", " ........ $........ ", " .+++++@. $.+++++@. ", " .+####@. $.+####@. ", " .+####@. $.+####@. ", " .+####@. $.+####@. ", " .+####@. $.+####@. ", " .+####@. $.+####@. ", " .+####@. $.+####@. ", " .+####@. $.+####@. ", " .+####@. $.+####@. ", " .+####@. $.+####@. ", " .+####@. $.+####@. ", " .@@@@@@. $.@@@@@@. ", " ........ $........ ", "$$$$$$$$$$$$ $$$$$$$$$$$$", " $ ", " ........ $........ ", " .+++++@. $$ $.+++++@. ", "$.+####@. .+####@. ", "$.+####@. $$.+####@. ", " .+####@. .+####@. ", " .+####@. $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$.+####@. ", " .+####@. ............. ............. ............$.+####@. ", " .+####@. .++++++++++@. .++++++++++@. .+++++++++@.$.+####@. ", " .+####@. .+#########@. .+#########@. .+########@.$.+####@. ", " .+####@. .+#########@. .+#########@. .+########@.$.+####@. ", " .+####@. .+#########@. .+#########@. .+########@.$.+####@. ", " .+####@. .+#########@. .+#########@. .+########@.$.+####@. ", " .@@@@@@. .@@@@@@@@@@@. .@@@@@@@@@@@. .@@@@@@@@@@.$.@@@@@@. ", " ........ ............. ............. ............$........ ", " $$$$$$$$$ $$$$$$$$$$"}; springlobby-0.169/src/images/server.xpm0000600000176000000410000000054312105760300021511 0ustar buildbotwww-data00000000000000/* XPM */ static const char * server_xpm[] = { "12 12 7 1", " c None", ". c #000000", "+ c #F9F9F9", "@ c #A0A0A0", "# c #D3D3D3", "$ c #00B4FF", "% c #00FF2A", "...... ", ".+++@. ", ".+##@. ", ".+##@. ", ".+..@.......", ".+##@.@@@@@.", ".+##@.@$$$@.", ".+##@.@$$$@.", ".+%%@.@$$$@.", ".+%%@.@$$$@.", ".@@@@.+@+@+.", "............"}; springlobby-0.169/src/images/single_player_icon.png.h0000600000176000000410000002622112105760300024257 0ustar buildbotwww-data00000000000000/* single_player_icon.png - 1771 bytes */ static const unsigned char single_player_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x08, 0x06, 0x00, 0x00, 0x00, 0x73, 0x7a, 0x7a, 0xf4, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0d, 0xd7, 0x00, 0x00, 0x0d, 0xd7, 0x01, 0x42, 0x28, 0x9b, 0x78, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x0a, 0x06, 0x16, 0x02, 0x34, 0x56, 0x4b, 0x3a, 0x6a, 0x00, 0x00, 0x06, 0x6b, 0x49, 0x44, 0x41, 0x54, 0x58, 0x47, 0xed, 0x56, 0x4b, 0x6c, 0x5c, 0x57, 0x19, 0xfe, 0xcf, 0x7d, 0xdf, 0x99, 0x3b, 0x9e, 0x19, 0xc7, 0x1e, 0xbf, 0xe2, 0xc4, 0x49, 0x95, 0x3a, 0xb5, 0x1a, 0xea, 0x0a, 0x2b, 0x0a, 0x0f, 0x15, 0x8a, 0x1c, 0x94, 0x80, 0x5a, 0x04, 0x09, 0x6c, 0x2a, 0xa5, 0xca, 0xa6, 0x8b, 0x2c, 0xba, 0xa3, 0x6d, 0xaa, 0xae, 0x50, 0x0a, 0x2a, 0x2b, 0xd2, 0x6e, 0x80, 0x2e, 0x53, 0x81, 0xba, 0x20, 0xa0, 0x0a, 0x89, 0x54, 0x42, 0x54, 0x48, 0x50, 0xa8, 0x12, 0x43, 0x71, 0x94, 0x17, 0x6d, 0x2d, 0x3b, 0x71, 0xdc, 0xf8, 0x31, 0xef, 0x7b, 0xe7, 0x3e, 0xcf, 0x39, 0x7c, 0x67, 0xd2, 0x48, 0x86, 0x0c, 0xa9, 0xd2, 0xb0, 0x23, 0xc7, 0xfe, 0x7d, 0xee, 0x9c, 0x99, 0x39, 0xdf, 0xf7, 0x7f, 0xff, 0xcb, 0x44, 0xf7, 0xd7, 0x7d, 0x05, 0xee, 0x2b, 0xf0, 0xff, 0xae, 0x00, 0xbb, 0x57, 0x01, 0x4e, 0x9f, 0xfe, 0xd5, 0x33, 0x23, 0xa3, 0xc3, 0x47, 0xa4, 0x24, 0x89, 0xbb, 0x24, 0x56, 0x0b, 0x16, 0x09, 0x29, 0x48, 0x08, 0x41, 0x9c, 0xf3, 0x58, 0x0a, 0x69, 0xe2, 0xcc, 0x48, 0x92, 0x84, 0xe6, 0xe7, 0xcf, 0xff, 0xe0, 0xf8, 0x0b, 0xc7, 0xdf, 0xbf, 0x85, 0x6b, 0xdc, 0x2b, 0x81, 0xc1, 0xca, 0xe0, 0xc1, 0x8f, 0x16, 0x3a, 0x0f, 0x2f, 0x7c, 0xb4, 0xd2, 0xe4, 0x5c, 0x72, 0x80, 0x56, 0x61, 0x45, 0x70, 0x51, 0x77, 0x67, 0xe0, 0xb5, 0x96, 0xa5, 0xd2, 0x1d, 0x1a, 0x2e, 0x97, 0x0f, 0x1c, 0xdc, 0x4d, 0x17, 0x2f, 0x5e, 0x9a, 0xc6, 0xf9, 0xff, 0x8e, 0x80, 0x61, 0x18, 0xf6, 0xfa, 0xda, 0x8d, 0x5a, 0xb3, 0xb1, 0x06, 0x6f, 0xa5, 0xf2, 0x18, 0x24, 0x64, 0x1d, 0x24, 0x06, 0xb1, 0xc7, 0x8a, 0x94, 0x94, 0x42, 0x87, 0x91, 0xe0, 0x42, 0xf9, 0x6b, 0x6d, 0x76, 0xfa, 0x9e, 0x15, 0x20, 0x46, 0x76, 0xb3, 0xd5, 0x09, 0x7c, 0x3f, 0x81, 0x02, 0x02, 0x60, 0x92, 0xa9, 0x38, 0x00, 0x5c, 0xe0, 0x75, 0xd8, 0x6a, 0x05, 0x7e, 0xbd, 0xde, 0x72, 0x77, 0x64, 0x76, 0x14, 0x86, 0x91, 0x9d, 0xcf, 0xe5, 0x72, 0x9f, 0x99, 0xc0, 0xf1, 0x27, 0x73, 0x06, 0x2e, 0xd6, 0xbe, 0xf9, 0x88, 0xa5, 0xa5, 0x22, 0x29, 0x33, 0xd2, 0x52, 0xc9, 0xb3, 0x2d, 0xb5, 0xaa, 0x5f, 0x8b, 0xa2, 0x4c, 0x25, 0x00, 0xe2, 0xae, 0xe0, 0xa5, 0xe3, 0xfb, 0x61, 0x72, 0xe3, 0x46, 0x2d, 0x8b, 0xa2, 0x24, 0x06, 0xe0, 0x42, 0xb3, 0x15, 0x95, 0x18, 0x63, 0x03, 0xa6, 0x65, 0x96, 0x3f, 0x13, 0x81, 0x53, 0x2f, 0x7e, 0xd1, 0x70, 0xb2, 0xd5, 0xcf, 0xf7, 0x5b, 0x8d, 0xef, 0x7a, 0x5b, 0x86, 0x1f, 0xb3, 0x9c, 0xfc, 0xb8, 0xc8, 0x92, 0xa8, 0xf3, 0xfe, 0xcb, 0x95, 0x11, 0x3e, 0xf0, 0xf1, 0x46, 0x32, 0xf1, 0x31, 0x17, 0x3a, 0x94, 0x97, 0x5a, 0xab, 0xd5, 0x61, 0xf5, 0x7a, 0xdb, 0x92, 0x52, 0x93, 0xb6, 0x9d, 0x53, 0xc0, 0x51, 0xa7, 0x93, 0x09, 0x80, 0xe7, 0x0c, 0x43, 0x1f, 0xbc, 0x6b, 0x02, 0xaf, 0x1f, 0x1b, 0x37, 0xec, 0xe0, 0x83, 0xef, 0x6d, 0x1d, 0x1b, 0xfc, 0xf1, 0xe8, 0xce, 0xfd, 0xa3, 0xb6, 0xeb, 0x31, 0x99, 0x45, 0x24, 0xd2, 0x0e, 0x95, 0x13, 0x9f, 0x9e, 0x98, 0xfa, 0x60, 0x67, 0xff, 0x95, 0xab, 0xe5, 0xb7, 0x97, 0xbe, 0xb4, 0xd2, 0x0e, 0x32, 0x3b, 0x0c, 0xd3, 0xd8, 0xb2, 0x1c, 0x62, 0x4c, 0xcb, 0x00, 0xae, 0xc3, 0xf2, 0x82, 0x6b, 0x2a, 0x3f, 0x1c, 0x22, 0xd6, 0x77, 0xd7, 0x04, 0xf2, 0x5a, 0x30, 0x3e, 0x52, 0x29, 0x9d, 0xd8, 0xb6, 0x7b, 0xdf, 0x98, 0x61, 0xe5, 0x48, 0x33, 0x1c, 0x92, 0x66, 0x86, 0xbb, 0x6a, 0x24, 0x41, 0xa0, 0xcf, 0xd5, 0xd8, 0x63, 0x53, 0x71, 0xff, 0xf5, 0xc6, 0x3f, 0xe4, 0x9f, 0xdb, 0x7b, 0x5a, 0xf0, 0x7a, 0x0b, 0x40, 0x1b, 0x30, 0x1b, 0x86, 0x10, 0xa8, 0x6a, 0xb7, 0x5c, 0xc8, 0xa3, 0xe1, 0xe1, 0xee, 0x14, 0xf8, 0xe9, 0x33, 0x15, 0xcb, 0x34, 0xe4, 0x8f, 0x46, 0xb6, 0x4f, 0x4d, 0x18, 0x86, 0x45, 0xba, 0x3b, 0x00, 0xdb, 0x42, 0x92, 0xab, 0x7b, 0x35, 0x92, 0x50, 0x81, 0x47, 0x75, 0xca, 0xdb, 0x8c, 0x1e, 0xdf, 0xb5, 0x5c, 0xbe, 0x50, 0x9f, 0x2e, 0xc4, 0xc2, 0x45, 0xa6, 0x6b, 0x16, 0xc0, 0xa1, 0x02, 0x5b, 0x87, 0x69, 0x71, 0xac, 0x0d, 0x41, 0x81, 0xb2, 0x10, 0xbc, 0x74, 0x57, 0x0a, 0x0c, 0x15, 0x0d, 0x51, 0x70, 0xd8, 0x94, 0xe3, 0xe6, 0x99, 0xea, 0x35, 0xcc, 0xb0, 0x49, 0xb3, 0x8b, 0x00, 0xf6, 0x89, 0xe9, 0x26, 0x48, 0x18, 0xe0, 0xa1, 0x93, 0x88, 0x9b, 0x34, 0x3c, 0x50, 0xd4, 0xbe, 0xfd, 0xf5, 0x92, 0xd5, 0xd0, 0x1e, 0xa0, 0x24, 0x49, 0xbd, 0x5c, 0xce, 0xf5, 0xd0, 0x9d, 0x76, 0xe0, 0x6b, 0xa8, 0x08, 0xc9, 0x38, 0xcf, 0x34, 0xa6, 0x31, 0xf3, 0xc0, 0x81, 0x03, 0xc6, 0x99, 0x33, 0x67, 0x20, 0x21, 0xd1, 0xa7, 0x96, 0x61, 0xde, 0x94, 0x64, 0x99, 0x1a, 0xae, 0x48, 0xd0, 0x56, 0x42, 0x6c, 0x2d, 0xe2, 0x81, 0x0e, 0x05, 0x22, 0xc8, 0x1f, 0xdc, 0xdc, 0x79, 0x8a, 0xbe, 0xc3, 0xc9, 0xb4, 0x74, 0x72, 0xe4, 0x2a, 0x95, 0xfa, 0x86, 0x89, 0x0b, 0x55, 0x11, 0x21, 0x65, 0x69, 0x0a, 0x60, 0xc1, 0xa1, 0x62, 0xed, 0xca, 0xa5, 0x6a, 0x78, 0xed, 0xea, 0xb5, 0xbf, 0x5a, 0x96, 0xc5, 0x6f, 0xa9, 0xf0, 0xa9, 0x04, 0xde, 0x85, 0x8a, 0x33, 0x0c, 0xd1, 0x8b, 0x03, 0xca, 0x14, 0x10, 0xe2, 0xc9, 0xa3, 0x26, 0x00, 0x33, 0x12, 0xd8, 0x95, 0xfc, 0x32, 0xeb, 0xe0, 0x5c, 0xa7, 0x38, 0x4e, 0x68, 0x79, 0xb5, 0x41, 0x61, 0x6b, 0xb9, 0x5b, 0x92, 0xaa, 0x37, 0x87, 0x61, 0x48, 0x7e, 0x3b, 0x08, 0xf3, 0x6e, 0xfe, 0x6c, 0xa5, 0x52, 0x79, 0x6f, 0x72, 0xf2, 0xa1, 0xb9, 0x3d, 0x7b, 0x1e, 0x19, 0x3a, 0x7c, 0xf8, 0xf0, 0xc6, 0x91, 0x23, 0x47, 0x32, 0x7d, 0x73, 0x3c, 0x36, 0x3f, 0x1f, 0xfb, 0xbe, 0xcb, 0x26, 0x1f, 0xd6, 0xb5, 0x57, 0x7f, 0xd2, 0xe0, 0xb3, 0x5f, 0xd0, 0x87, 0x87, 0xf2, 0xde, 0x57, 0x4d, 0x8a, 0x49, 0x40, 0x05, 0x95, 0x78, 0x02, 0xc0, 0x3c, 0xaa, 0x76, 0x77, 0x29, 0x52, 0xd2, 0x9d, 0x22, 0xad, 0xac, 0xb7, 0xd2, 0x7f, 0x66, 0xd3, 0xd2, 0x44, 0x95, 0x58, 0x96, 0x49, 0x69, 0x9a, 0x52, 0xa3, 0xd1, 0x4c, 0xce, 0xcf, 0x9f, 0x3f, 0x7b, 0xf9, 0xca, 0xe5, 0x73, 0x6a, 0x36, 0x14, 0x8b, 0xa5, 0x56, 0x5f, 0x5f, 0xdf, 0x5e, 0xf4, 0xa3, 0x27, 0x0f, 0x1d, 0x3a, 0x74, 0x81, 0x3d, 0xfb, 0xa2, 0xcb, 0x5e, 0xfd, 0x61, 0xa8, 0xc8, 0xf6, 0x5c, 0xc7, 0x9e, 0xcb, 0x69, 0xd4, 0x2e, 0xed, 0xfb, 0xda, 0x80, 0xf7, 0xf6, 0xcc, 0x03, 0x15, 0x8f, 0x52, 0xe5, 0x7d, 0x77, 0xee, 0x00, 0x18, 0x61, 0x44, 0x8b, 0x65, 0x66, 0x9e, 0x22, 0x61, 0xd3, 0x7c, 0xe7, 0x73, 0x24, 0xc7, 0x66, 0x55, 0xe2, 0x75, 0xdf, 0xbf, 0xb5, 0x4a, 0xa5, 0x22, 0x75, 0x3a, 0x08, 0x1f, 0xc2, 0x32, 0x37, 0x77, 0xee, 0x8d, 0x7a, 0xb5, 0x71, 0x62, 0x76, 0x76, 0xf6, 0x09, 0xb4, 0xf1, 0xb3, 0xfa, 0x97, 0x1f, 0x37, 0xb5, 0xe9, 0xbd, 0x06, 0x9d, 0x7b, 0xb7, 0x9b, 0x13, 0xb7, 0xaf, 0xad, 0x4f, 0x7b, 0x8b, 0xd1, 0xe1, 0xe7, 0xd6, 0xcd, 0x3d, 0x33, 0x95, 0xec, 0x82, 0x3e, 0x50, 0x74, 0xc8, 0xd0, 0x55, 0xe4, 0x00, 0xac, 0x5b, 0x48, 0xc8, 0x12, 0xf9, 0xb1, 0xa4, 0x3f, 0x2c, 0x8f, 0xd1, 0xa9, 0x0f, 0x67, 0xa8, 0x52, 0xd0, 0xc9, 0xb3, 0x35, 0x64, 0x1d, 0x08, 0xe0, 0xd7, 0x40, 0xa2, 0x2a, 0x42, 0x86, 0xa9, 0x53, 0x1a, 0x67, 0xe4, 0xb8, 0xce, 0xae, 0x76, 0xcb, 0x4f, 0xe3, 0x38, 0xfe, 0xad, 0x6d, 0xdb, 0xef, 0xdd, 0x71, 0x1c, 0x4f, 0x1c, 0x7c, 0xd9, 0x29, 0x16, 0x0b, 0xaf, 0x6d, 0xdb, 0x39, 0x71, 0xb4, 0xda, 0x4e, 0xf4, 0xed, 0xf9, 0x2a, 0x3d, 0xaa, 0xbd, 0x43, 0xfb, 0x06, 0xae, 0x52, 0x5e, 0x0f, 0x41, 0x42, 0xa3, 0x6b, 0x41, 0x81, 0xce, 0x45, 0x33, 0xf4, 0xb7, 0xce, 0xa3, 0x00, 0x32, 0x29, 0x6a, 0xd5, 0xe8, 0xe8, 0xfe, 0x51, 0x1a, 0x1d, 0x00, 0x51, 0x13, 0x61, 0x48, 0x52, 0x54, 0x09, 0xa3, 0xbe, 0xbe, 0x02, 0xb5, 0xdb, 0xa8, 0x1c, 0xa6, 0xc9, 0x5f, 0xbc, 0xf1, 0xcb, 0x43, 0x3f, 0xff, 0xd9, 0xeb, 0xbf, 0xc1, 0x05, 0xdd, 0x91, 0xd9, 0x73, 0x8d, 0xcd, 0xbe, 0xc4, 0x6c, 0x47, 0x7f, 0x6a, 0x7c, 0xdb, 0xd6, 0xa3, 0x55, 0x9f, 0xeb, 0x19, 0x99, 0xd4, 0xd0, 0xc6, 0xe9, 0x9d, 0xec, 0x3b, 0x44, 0x9e, 0x41, 0x7b, 0x77, 0xe8, 0xa4, 0x69, 0x26, 0xbd, 0xf9, 0xfb, 0x0d, 0x12, 0x6e, 0x3f, 0x35, 0x22, 0x9f, 0x92, 0x38, 0xa2, 0x4a, 0xb1, 0x44, 0xaf, 0xfd, 0xfa, 0xf2, 0x87, 0x5f, 0xd9, 0xde, 0x7c, 0xcb, 0x36, 0x48, 0x65, 0x2d, 0xd6, 0x26, 0x3f, 0x19, 0x72, 0x36, 0xe3, 0x2b, 0x38, 0xec, 0xc6, 0xe8, 0xbf, 0x12, 0x18, 0x2c, 0x6c, 0x0c, 0xb9, 0xfd, 0xe3, 0xcf, 0x07, 0xc8, 0x2f, 0x7c, 0xa1, 0xeb, 0x45, 0x23, 0xe0, 0x00, 0xcd, 0xd3, 0x82, 0xef, 0xd2, 0x53, 0x53, 0xbb, 0x69, 0xbd, 0x19, 0xd1, 0xf5, 0x60, 0x8e, 0x84, 0x1f, 0xa1, 0x02, 0x30, 0x8c, 0x30, 0x6e, 0xeb, 0xed, 0x88, 0x6c, 0xaf, 0x7f, 0xc7, 0x9b, 0x7f, 0x17, 0x7f, 0x5c, 0xfa, 0xdd, 0x0b, 0x6f, 0xf5, 0xf4, 0x6e, 0xd3, 0xa1, 0x6a, 0x8d, 0x3d, 0x97, 0x9f, 0xf4, 0x4f, 0x17, 0x3c, 0x6f, 0x57, 0x10, 0x22, 0xf3, 0x91, 0x6c, 0x2a, 0xe1, 0x78, 0x96, 0xaa, 0xba, 0xa6, 0xf9, 0xc5, 0x36, 0xf9, 0x98, 0x7e, 0x0b, 0xab, 0x1d, 0x8a, 0xf0, 0x2f, 0x47, 0x88, 0xf2, 0x53, 0xf3, 0x5e, 0x59, 0x18, 0x25, 0xe4, 0x3a, 0x96, 0xee, 0xba, 0xc6, 0xb7, 0x7a, 0x5e, 0xfc, 0x1f, 0x87, 0x3d, 0x09, 0xbc, 0x72, 0xc2, 0x65, 0x96, 0xed, 0xb9, 0xba, 0x8e, 0x01, 0x02, 0x50, 0x91, 0x60, 0xf0, 0xa0, 0x07, 0x74, 0x2d, 0x4b, 0xd0, 0xe5, 0x22, 0xfa, 0xcb, 0x85, 0x15, 0xba, 0xb4, 0xb8, 0x4e, 0x1c, 0x84, 0x14, 0xb9, 0x9b, 0xc6, 0xf1, 0x99, 0x84, 0xd2, 0x2c, 0xa3, 0x9c, 0x63, 0x4d, 0x8e, 0x7f, 0xe3, 0x95, 0x7f, 0x9b, 0xfd, 0xbd, 0x08, 0xf5, 0x0c, 0xc1, 0xf3, 0x2f, 0x85, 0x72, 0xfb, 0xfe, 0x8e, 0x21, 0x39, 0x2e, 0xcc, 0xe2, 0x9b, 0xc1, 0xc2, 0x34, 0xeb, 0xc6, 0x52, 0x95, 0x18, 0xa2, 0x77, 0x71, 0x71, 0x83, 0xd6, 0x1a, 0x49, 0x97, 0x14, 0xfe, 0xc0, 0x7b, 0x18, 0xf6, 0x2c, 0x6c, 0x93, 0xf0, 0x54, 0x8b, 0x26, 0x07, 0xfd, 0x0b, 0x0f, 0x77, 0x5e, 0xbd, 0x08, 0xa8, 0xe6, 0x64, 0x06, 0xd5, 0xa5, 0xa6, 0x1f, 0x6c, 0x4b, 0x91, 0xc7, 0x66, 0x22, 0x8c, 0xae, 0xe7, 0x0a, 0x5c, 0xfd, 0xa8, 0xb5, 0xb4, 0xea, 0xd3, 0x4a, 0x0d, 0xed, 0x18, 0x1e, 0x2b, 0xe9, 0x11, 0xa7, 0x2e, 0x09, 0x9e, 0x46, 0xc4, 0xd0, 0xac, 0xc2, 0x4e, 0x7a, 0x95, 0x45, 0xb5, 0xf6, 0x9d, 0xe1, 0x55, 0xff, 0xbc, 0x7d, 0x75, 0xb3, 0x33, 0x6b, 0xaf, 0x76, 0xf4, 0xf2, 0xe4, 0xe4, 0xc8, 0x50, 0xf9, 0xc1, 0x98, 0x0b, 0x38, 0x83, 0xf6, 0xad, 0x80, 0x00, 0xa2, 0xac, 0x19, 0xc4, 0x14, 0xa9, 0xd8, 0x2b, 0xef, 0x3f, 0x79, 0x4f, 0x83, 0x48, 0x65, 0xcf, 0x42, 0xb9, 0x45, 0xc9, 0xc6, 0xca, 0xd2, 0xc9, 0xe5, 0x3f, 0x9d, 0xbc, 0x84, 0xab, 0x3e, 0xa9, 0x84, 0xdb, 0x81, 0xd4, 0x49, 0x2f, 0x02, 0xdd, 0x4f, 0xf2, 0x24, 0x30, 0x23, 0xbf, 0x76, 0x99, 0xbb, 0x63, 0x13, 0xa5, 0x42, 0x7e, 0xa4, 0xe4, 0xd9, 0x66, 0x01, 0x53, 0xd6, 0x73, 0x0c, 0xf2, 0x5c, 0x83, 0x72, 0x16, 0x76, 0xc7, 0x24, 0x75, 0x56, 0xc8, 0xe1, 0x1c, 0xbb, 0xa9, 0x6b, 0xb2, 0xd9, 0x0c, 0xd7, 0x56, 0xaf, 0x2f, 0x9e, 0x5c, 0x9d, 0x3b, 0x75, 0x1a, 0xea, 0xb4, 0xd4, 0x55, 0xbd, 0xa1, 0x6f, 0x9e, 0xfe, 0x0b, 0x35, 0x69, 0x71, 0xb4, 0xbf, 0x6f, 0xa5, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/single_player_icon_text.png.h0000600000176000000410000002634012105760300025325 0ustar buildbotwww-data00000000000000/* single_player_icon_text.png - 1782 bytes */ static const unsigned char single_player_icon_text_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x08, 0x06, 0x00, 0x00, 0x00, 0xaa, 0x69, 0x71, 0xde, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0d, 0xd7, 0x00, 0x00, 0x0d, 0xd7, 0x01, 0x42, 0x28, 0x9b, 0x78, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x03, 0x16, 0x14, 0x28, 0x05, 0x36, 0x73, 0x17, 0xf8, 0x00, 0x00, 0x06, 0x76, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0xed, 0x98, 0x5d, 0x68, 0x14, 0x57, 0x14, 0xc7, 0xff, 0xbb, 0xd9, 0xcd, 0x6e, 0x4c, 0x13, 0x4d, 0x5a, 0x62, 0x16, 0x4b, 0x08, 0xa9, 0xeb, 0x43, 0xd6, 0x50, 0xa5, 0x46, 0x4b, 0x45, 0xb0, 0x2f, 0xd6, 0xe2, 0x07, 0x56, 0x51, 0xd0, 0xd0, 0x10, 0x7c, 0x89, 0xd2, 0x48, 0xc5, 0x18, 0x88, 0x5a, 0xa1, 0x8a, 0xa8, 0x25, 0x82, 0x69, 0xad, 0x04, 0x44, 0x2b, 0x58, 0x0b, 0x82, 0x04, 0x8c, 0xd4, 0xe8, 0x96, 0xa5, 0x49, 0x4c, 0xb4, 0x2c, 0x89, 0x8a, 0x84, 0xe6, 0xcb, 0x50, 0x0d, 0x18, 0x25, 0x9a, 0x8d, 0xe6, 0x63, 0x3f, 0x27, 0x33, 0xff, 0xbe, 0xcc, 0x2c, 0xd3, 0x75, 0xd7, 0xac, 0x64, 0x57, 0x2d, 0xde, 0x1f, 0x9c, 0x87, 0x99, 0xb9, 0x73, 0x66, 0xe6, 0x7f, 0xef, 0x39, 0xf7, 0x9c, 0x31, 0x20, 0x71, 0x30, 0xe2, 0xd8, 0x80, 0xc4, 0x92, 0x14, 0xff, 0xc6, 0x38, 0xc7, 0x7d, 0x01, 0xe0, 0x2f, 0x00, 0x41, 0x9d, 0x8d, 0x03, 0xf8, 0x1b, 0xc0, 0x6f, 0xe1, 0x37, 0x24, 0x41, 0x12, 0xc9, 0x22, 0xd9, 0xfe, 0x63, 0xb1, 0xd1, 0x62, 0xb1, 0xf0, 0xc8, 0x91, 0x23, 0x1c, 0x18, 0x18, 0xe0, 0xe4, 0xe4, 0x24, 0x83, 0xc1, 0x20, 0x87, 0x86, 0x86, 0x94, 0xce, 0xce, 0x4e, 0xbf, 0x4e, 0x00, 0x6a, 0x44, 0x99, 0xad, 0x04, 0x7d, 0x7f, 0x52, 0xfd, 0xc7, 0xa4, 0xff, 0xc4, 0x89, 0x13, 0x24, 0xc9, 0xf2, 0xf2, 0x72, 0xa6, 0xa5, 0xa5, 0x05, 0xb3, 0xb2, 0xb2, 0x82, 0xeb, 0xd7, 0xaf, 0xf7, 0xdf, 0xb8, 0x71, 0x63, 0x42, 0x2f, 0xc0, 0x14, 0xf6, 0x4c, 0x67, 0x43, 0x00, 0x0e, 0x03, 0x30, 0xab, 0xf7, 0xe6, 0x03, 0xf8, 0x13, 0x80, 0x57, 0x67, 0x2f, 0xf8, 0x88, 0x22, 0x40, 0x26, 0x80, 0x1f, 0x00, 0x3c, 0x02, 0x30, 0xaa, 0xb3, 0x5f, 0x01, 0x7c, 0x98, 0x28, 0x01, 0x1e, 0x79, 0x3c, 0x1e, 0x92, 0x64, 0x76, 0x76, 0x36, 0x01, 0x5c, 0x04, 0xf0, 0x25, 0x80, 0x63, 0x3a, 0x8b, 0x36, 0x43, 0xe1, 0xe3, 0x0d, 0x1b, 0x36, 0xd0, 0xed, 0x76, 0x4b, 0x7e, 0xbf, 0x5f, 0x99, 0x98, 0x98, 0xa0, 0xd3, 0xe9, 0xa4, 0xdd, 0x6e, 0x27, 0x80, 0x5f, 0x00, 0xcc, 0x06, 0xc0, 0x92, 0x92, 0x12, 0xf6, 0xf7, 0xf7, 0x33, 0x14, 0x0a, 0xb1, 0xab, 0xab, 0x4b, 0x2e, 0x2d, 0x2d, 0x8d, 0xe9, 0x4f, 0x3d, 0x9e, 0x05, 0xc0, 0xbf, 0x6c, 0xd9, 0xb2, 0xa0, 0xcb, 0xe5, 0x92, 0xc7, 0xc6, 0xc6, 0x94, 0x40, 0x20, 0xc0, 0x8e, 0x8e, 0x0e, 0x6e, 0xdc, 0xb8, 0x51, 0x1b, 0xf3, 0x51, 0x42, 0x04, 0x18, 0x1b, 0x1b, 0x23, 0x49, 0xde, 0xbd, 0x7b, 0x97, 0x47, 0x8f, 0x1e, 0xe5, 0xda, 0xb5, 0x6b, 0x99, 0x99, 0x99, 0x49, 0x00, 0x7e, 0x00, 0x55, 0x6a, 0x2e, 0x89, 0xf9, 0xc2, 0xed, 0xed, 0xed, 0x74, 0x38, 0x1c, 0x63, 0x16, 0x8b, 0xe5, 0xd9, 0xee, 0xdd, 0xbb, 0x49, 0x92, 0x6e, 0xb7, 0x9b, 0x6a, 0x2e, 0xa9, 0x5b, 0xbd, 0x7a, 0x35, 0x49, 0xb2, 0xb9, 0xb9, 0x99, 0x36, 0x9b, 0xcd, 0x67, 0xb3, 0xd9, 0x7c, 0xad, 0xad, 0xad, 0x53, 0x09, 0xf0, 0xd3, 0xf2, 0xe5, 0xcb, 0x29, 0x49, 0x12, 0x9b, 0x9b, 0x9b, 0x99, 0x97, 0x97, 0x37, 0x9e, 0x91, 0x91, 0x31, 0x76, 0xfa, 0xf4, 0x69, 0x92, 0x64, 0x69, 0x69, 0x29, 0x01, 0x38, 0x13, 0x22, 0x40, 0x49, 0x49, 0x09, 0x87, 0x87, 0x87, 0xa9, 0x47, 0x92, 0x24, 0xd6, 0xd7, 0xd7, 0xd3, 0x66, 0xb3, 0x51, 0x5d, 0xce, 0x31, 0x5f, 0x78, 0xe1, 0xc2, 0x85, 0x04, 0x70, 0x0e, 0x40, 0x71, 0x7a, 0x7a, 0x3a, 0x49, 0x72, 0x72, 0x72, 0x52, 0x1b, 0xe7, 0x69, 0x6b, 0x6b, 0x23, 0x49, 0x16, 0x17, 0x17, 0x13, 0xc0, 0x8f, 0x00, 0x4e, 0x2e, 0x59, 0xb2, 0x64, 0x2a, 0x01, 0x9e, 0xb6, 0xb4, 0xb4, 0x90, 0x24, 0x8b, 0x8a, 0x8a, 0xc2, 0x63, 0xb2, 0xb3, 0xb3, 0x49, 0x92, 0xbd, 0xbd, 0xbd, 0x9a, 0xc0, 0xd3, 0x26, 0x1f, 0x40, 0x5f, 0x6a, 0x6a, 0x2a, 0x57, 0xac, 0x58, 0xc1, 0xf3, 0xe7, 0xcf, 0x53, 0x0b, 0x09, 0x92, 0x74, 0x3a, 0x9d, 0x54, 0xe3, 0x2e, 0xe6, 0x0b, 0xa7, 0xa4, 0xa4, 0x10, 0x40, 0x5a, 0x8c, 0x50, 0xf1, 0xf8, 0x7c, 0x3e, 0x92, 0xa4, 0xc5, 0x62, 0x21, 0x80, 0x74, 0x00, 0xef, 0x59, 0xad, 0xd6, 0x29, 0x05, 0xf0, 0x7a, 0xbd, 0x8c, 0x85, 0x2a, 0x70, 0x30, 0x91, 0xc9, 0xf0, 0x7d, 0x00, 0xdb, 0x01, 0xf4, 0x1b, 0x8d, 0x46, 0x1e, 0x3b, 0x76, 0x8c, 0x24, 0x19, 0x08, 0x04, 0xa6, 0x14, 0x20, 0x22, 0x6b, 0xc7, 0x14, 0x20, 0x35, 0x35, 0x55, 0x13, 0xea, 0x95, 0x04, 0x98, 0x39, 0x73, 0x66, 0xac, 0xc4, 0x9b, 0x10, 0x01, 0xce, 0xe9, 0xec, 0x63, 0x00, 0x16, 0x00, 0x6b, 0xb2, 0xb2, 0xb2, 0x48, 0x92, 0x4f, 0x9f, 0x3e, 0x9d, 0xb6, 0x00, 0x5a, 0x08, 0xa8, 0xa1, 0x72, 0x18, 0xc0, 0xcf, 0xf1, 0x84, 0x40, 0x53, 0x53, 0x13, 0x49, 0x72, 0xcd, 0x9a, 0x35, 0x04, 0xf0, 0x87, 0x2a, 0xde, 0x47, 0x00, 0xea, 0x74, 0x36, 0x7d, 0x01, 0xba, 0xbb, 0xbb, 0x9f, 0x57, 0x56, 0x56, 0x3e, 0x77, 0x38, 0x1c, 0x93, 0x56, 0xab, 0x55, 0x4a, 0x4f, 0x4f, 0x97, 0xca, 0xcb, 0xcb, 0x49, 0x92, 0xb5, 0xb5, 0xb5, 0x04, 0xd0, 0x3b, 0x0d, 0x01, 0xc2, 0x49, 0xd0, 0xe9, 0x74, 0x32, 0x27, 0x27, 0xc7, 0x97, 0x9b, 0x9b, 0xeb, 0xbb, 0x7e, 0xfd, 0xfa, 0x54, 0xfe, 0x8e, 0x2f, 0x5d, 0xba, 0x94, 0xc1, 0x60, 0x90, 0x7d, 0x7d, 0x7d, 0x5c, 0xb0, 0x60, 0x41, 0xc0, 0x64, 0x32, 0xf9, 0xf3, 0xf2, 0xf2, 0x02, 0x15, 0x15, 0x15, 0x0f, 0x7a, 0x7a, 0x7a, 0x1e, 0x27, 0x4c, 0x80, 0x96, 0x96, 0x96, 0xa1, 0x7b, 0xf7, 0xee, 0x49, 0xa3, 0xa3, 0xa3, 0x94, 0x65, 0x99, 0xc1, 0x60, 0x90, 0x5d, 0x5d, 0x5d, 0xdc, 0xbf, 0x7f, 0x3f, 0xcd, 0x66, 0x33, 0x01, 0x7c, 0x35, 0x0d, 0x01, 0x5e, 0xd8, 0x06, 0x7b, 0x7b, 0x7b, 0xe5, 0xad, 0x5b, 0xb7, 0x46, 0x26, 0xcb, 0xc8, 0xfb, 0x32, 0x01, 0x8c, 0x2f, 0x5e, 0xbc, 0xd8, 0xdb, 0xd0, 0xd0, 0x20, 0x0d, 0x0f, 0x0f, 0x2b, 0x92, 0x24, 0x71, 0x70, 0x70, 0x50, 0xb9, 0x74, 0xe9, 0xd2, 0xc8, 0xe6, 0xcd, 0x9b, 0x2f, 0x25, 0x4a, 0x80, 0x7d, 0x00, 0xae, 0x02, 0x78, 0x08, 0x40, 0xd2, 0xd9, 0x38, 0x80, 0xdf, 0x01, 0x2c, 0x8b, 0xb3, 0x10, 0x42, 0x8c, 0x71, 0x50, 0xb7, 0xd2, 0xff, 0x14, 0x42, 0xf3, 0xe6, 0xcd, 0x23, 0x49, 0xf6, 0xf4, 0xf4, 0x68, 0xb1, 0x1c, 0xed, 0xbe, 0x74, 0x00, 0xd5, 0x00, 0xfa, 0xd4, 0x2d, 0x59, 0xb3, 0xdb, 0x00, 0xbe, 0x01, 0x30, 0x13, 0xff, 0x13, 0xaa, 0xda, 0xda, 0xda, 0x06, 0x16, 0x2d, 0x5a, 0xe4, 0x37, 0x9b, 0xcd, 0xde, 0x82, 0x82, 0x02, 0xdf, 0xb5, 0x6b, 0xd7, 0xf4, 0xfb, 0xf9, 0xd5, 0xb7, 0xfd, 0x03, 0x62, 0xcd, 0x76, 0xdc, 0x02, 0xec, 0xd8, 0xb1, 0xa3, 0xe5, 0xd6, 0xad, 0x5b, 0x72, 0x28, 0x14, 0xe2, 0xe8, 0xe8, 0xa8, 0xd2, 0xd4, 0xd4, 0xc4, 0x75, 0xeb, 0xd6, 0x25, 0xb4, 0xa2, 0x4b, 0xc4, 0x87, 0x69, 0xe6, 0x55, 0xab, 0xac, 0x4f, 0x12, 0xd4, 0xa8, 0xcc, 0x51, 0xeb, 0x77, 0x7d, 0x2f, 0xf0, 0x10, 0xc0, 0x71, 0x00, 0xb6, 0x37, 0x3a, 0xb3, 0x91, 0xa8, 0x49, 0x8a, 0xbb, 0x76, 0xed, 0xa2, 0xc1, 0x60, 0x20, 0x80, 0x4f, 0xdf, 0x64, 0xa7, 0xf6, 0xda, 0x04, 0xd0, 0x66, 0xdf, 0x66, 0xb3, 0xb1, 0xb1, 0xb1, 0x91, 0x24, 0x59, 0x5d, 0x5d, 0x4d, 0x00, 0x37, 0x62, 0x08, 0xb0, 0x30, 0x62, 0xd5, 0x48, 0x00, 0xee, 0x02, 0xf8, 0x5a, 0xad, 0x29, 0xf4, 0xd7, 0xb4, 0xce, 0xed, 0x83, 0x88, 0xf3, 0x17, 0xe3, 0xec, 0xf8, 0x22, 0x57, 0xe8, 0xd0, 0x34, 0x43, 0x32, 0xa6, 0x00, 0x46, 0x00, 0x07, 0xe7, 0xce, 0x9d, 0x4b, 0x92, 0x7c, 0xf0, 0xe0, 0x81, 0x16, 0x0e, 0xd1, 0x04, 0xf8, 0x6c, 0xe7, 0xce, 0x9d, 0x24, 0x49, 0x59, 0x96, 0xf9, 0xf8, 0xf1, 0x63, 0x9e, 0x3a, 0x75, 0x4a, 0x6b, 0xa2, 0xce, 0xb5, 0xb7, 0xb7, 0x93, 0xa4, 0xd6, 0xb9, 0xed, 0x53, 0xef, 0xd9, 0xbc, 0x72, 0xe5, 0xca, 0x70, 0xe3, 0xa5, 0x0a, 0x10, 0x4f, 0xc7, 0x17, 0x7e, 0xfe, 0xa6, 0x4d, 0x9b, 0xe8, 0x76, 0xbb, 0x43, 0x13, 0x13, 0x13, 0x09, 0x59, 0x91, 0xd1, 0x3e, 0xcc, 0x6c, 0x32, 0x99, 0xc2, 0xe1, 0xf0, 0x32, 0x01, 0xf6, 0xee, 0xdd, 0xcb, 0xc2, 0xc2, 0x42, 0x5a, 0xad, 0x56, 0x6a, 0xfb, 0xfa, 0xd9, 0xb3, 0x67, 0x09, 0xa0, 0xb7, 0xac, 0xac, 0x8c, 0x24, 0xd9, 0xd0, 0xd0, 0xa0, 0xf9, 0x30, 0x00, 0xb8, 0x5d, 0x57, 0x57, 0x47, 0x92, 0xac, 0xaa, 0xaa, 0x22, 0x80, 0x8b, 0x71, 0x76, 0x7c, 0xe1, 0xe7, 0xdf, 0xbc, 0x79, 0x93, 0x0e, 0x87, 0x63, 0x58, 0x0d, 0xcf, 0xe4, 0xac, 0x00, 0xbb, 0xdd, 0x3e, 0xd5, 0x0a, 0x30, 0x03, 0xf8, 0x0e, 0xc0, 0x3f, 0x00, 0x64, 0x00, 0x4c, 0x49, 0x49, 0xd1, 0x97, 0xce, 0xb2, 0xd5, 0x6a, 0xa5, 0xc7, 0xe3, 0x61, 0x28, 0x14, 0xd2, 0xfe, 0x33, 0x14, 0x1a, 0x0c, 0x06, 0x0e, 0x0e, 0x0e, 0x52, 0x96, 0x65, 0xce, 0x99, 0x33, 0xe7, 0x55, 0x3a, 0xbe, 0xf0, 0xf3, 0xe7, 0xcf, 0x9f, 0x4f, 0x00, 0xa7, 0x00, 0xa4, 0x26, 0x25, 0x07, 0xe4, 0xe6, 0xe6, 0xc6, 0x93, 0x03, 0xce, 0xd9, 0xed, 0x76, 0x5e, 0xbe, 0x7c, 0x99, 0x23, 0x23, 0x23, 0x54, 0x14, 0x25, 0x7c, 0x5d, 0x51, 0x14, 0x6d, 0x4c, 0x7f, 0x4d, 0x4d, 0x0d, 0x49, 0x72, 0xdb, 0xb6, 0x6d, 0x04, 0x70, 0xb2, 0xb8, 0xb8, 0x98, 0x24, 0xe9, 0x72, 0xb9, 0xb4, 0x9c, 0x11, 0x6f, 0xc7, 0x17, 0x3e, 0x67, 0x34, 0x1a, 0x09, 0xc0, 0x9a, 0xb4, 0x5d, 0x40, 0x92, 0x24, 0xf6, 0xf5, 0xf5, 0xb1, 0xb2, 0xb2, 0xf2, 0x65, 0xbb, 0x80, 0x57, 0x8b, 0xf1, 0x8a, 0x8a, 0x0a, 0x5a, 0x2c, 0x16, 0x1a, 0x8d, 0xc6, 0xc8, 0x31, 0xab, 0x0b, 0x0a, 0x0a, 0xa8, 0x28, 0x0a, 0x5b, 0x5b, 0x5b, 0x09, 0x40, 0x3e, 0x74, 0xe8, 0x10, 0x49, 0xb2, 0xac, 0xac, 0x8c, 0x00, 0x6a, 0x5e, 0xa1, 0xe3, 0x4b, 0xda, 0x2e, 0xf4, 0xc2, 0x0a, 0x50, 0xcd, 0xaf, 0x76, 0x5f, 0x8b, 0x62, 0x8c, 0xf3, 0x86, 0x42, 0x21, 0x92, 0x64, 0x5a, 0x5a, 0x1a, 0x01, 0x7c, 0x5f, 0x58, 0x58, 0x18, 0x2d, 0x4c, 0xe4, 0xc6, 0xc6, 0x46, 0x2a, 0x8a, 0xc2, 0xfc, 0xfc, 0x7c, 0x76, 0x76, 0x76, 0xd2, 0xe7, 0xf3, 0x31, 0x23, 0x23, 0x83, 0x00, 0xe6, 0xbe, 0x42, 0xc7, 0xf7, 0xda, 0x04, 0x88, 0x77, 0x9c, 0xf7, 0xce, 0x9d, 0x3b, 0x24, 0xc9, 0x2d, 0x5b, 0xb6, 0x70, 0xd6, 0xac, 0x59, 0x81, 0x2b, 0x57, 0xae, 0x44, 0xf3, 0x75, 0x50, 0xeb, 0x04, 0xcf, 0x9c, 0x39, 0x43, 0x92, 0xbc, 0x70, 0xe1, 0x02, 0x01, 0x78, 0xd4, 0xa4, 0x18, 0x6f, 0xc7, 0xf7, 0xd6, 0x09, 0x70, 0xa1, 0xa8, 0xa8, 0x88, 0x1d, 0x1d, 0x1d, 0x94, 0x24, 0x89, 0x03, 0x03, 0x03, 0xca, 0xf6, 0xed, 0xdb, 0xa3, 0xf9, 0x9a, 0x6d, 0x34, 0x1a, 0x79, 0xff, 0xfe, 0xfd, 0xf0, 0xb5, 0x55, 0xab, 0x56, 0x11, 0xc0, 0xb7, 0xba, 0xbf, 0xbe, 0xf1, 0x74, 0x7c, 0xc9, 0x13, 0x20, 0xce, 0x82, 0x22, 0x72, 0x9c, 0x55, 0x2d, 0x54, 0xf4, 0x1d, 0x5a, 0x2c, 0x5f, 0xad, 0x7b, 0xf6, 0xec, 0x21, 0x49, 0x3e, 0x79, 0xf2, 0x84, 0x26, 0x93, 0x89, 0x00, 0x72, 0x74, 0xd7, 0xe3, 0xe9, 0xf8, 0x98, 0xa8, 0xc2, 0xe7, 0x75, 0x52, 0x03, 0x80, 0x33, 0x66, 0xcc, 0x60, 0x7d, 0x7d, 0x3d, 0x49, 0xf2, 0xc0, 0x81, 0x03, 0x04, 0xd0, 0x8d, 0x77, 0x84, 0x1a, 0x97, 0xcb, 0x15, 0x9e, 0xf9, 0xda, 0xda, 0x5a, 0x6d, 0xf6, 0x3f, 0x7f, 0x67, 0x04, 0x88, 0x58, 0xb6, 0xdd, 0xea, 0x9f, 0x25, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x81, 0x20, 0x81, 0xfc, 0x0b, 0x31, 0xdb, 0xf0, 0xca, 0x63, 0xe2, 0x06, 0x91, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/spectator.png.h0000600000176000000410000001123012105760300022410 0ustar buildbotwww-data00000000000000/* spectator.png - 731 bytes */ static const unsigned char spectator_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0, 0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x08, 0x16, 0x00, 0x36, 0x1e, 0x04, 0xa8, 0xdb, 0x76, 0x00, 0x00, 0x02, 0x5b, 0x49, 0x44, 0x41, 0x54, 0x38, 0x4f, 0xc5, 0x53, 0xcb, 0x4e, 0x14, 0x41, 0x14, 0x3d, 0x55, 0xd3, 0xd3, 0x03, 0x3d, 0x0d, 0x32, 0x34, 0x28, 0xef, 0x97, 0xb0, 0x30, 0x20, 0x84, 0x68, 0x62, 0xdc, 0x68, 0xdc, 0xb8, 0x30, 0x31, 0x46, 0xb7, 0x2e, 0xdc, 0xbb, 0x31, 0x31, 0x21, 0xee, 0xe4, 0x03, 0x4c, 0xdc, 0x98, 0x90, 0xf8, 0x0f, 0x26, 0xc6, 0x18, 0x43, 0x74, 0xe7, 0xc2, 0xe0, 0x23, 0xca, 0x02, 0x19, 0x85, 0x00, 0xd3, 0xda, 0xbc, 0x06, 0x19, 0x66, 0x98, 0x47, 0x4f, 0x77, 0xd7, 0xcb, 0x9a, 0x5e, 0x10, 0x23, 0x1f, 0x40, 0x25, 0x77, 0x51, 0x95, 0x73, 0x4e, 0x9d, 0xba, 0xf7, 0x14, 0x70, 0xd2, 0x8b, 0xfc, 0x6f, 0x60, 0x33, 0xf7, 0x53, 0x91, 0xfa, 0x41, 0x16, 0x91, 0x2f, 0x89, 0xe4, 0x26, 0x04, 0x2f, 0x42, 0x0a, 0x10, 0x92, 0x00, 0xd2, 0xce, 0xdb, 0xee, 0xf1, 0xcb, 0xb3, 0xff, 0x72, 0x8e, 0x04, 0x3c, 0xcf, 0x53, 0x89, 0xfa, 0x1e, 0x68, 0x58, 0x80, 0x49, 0x0d, 0xb0, 0x28, 0x40, 0xa9, 0x58, 0x04, 0x8f, 0x22, 0xa4, 0x34, 0xb7, 0xb3, 0x25, 0x0d, 0xc1, 0x42, 0xc1, 0xa5, 0xca, 0xaa, 0xde, 0xe9, 0x5f, 0x67, 0x46, 0xcf, 0xdf, 0x6c, 0x08, 0xc5, 0x02, 0x31, 0xb9, 0xb4, 0x0e, 0x13, 0x0c, 0x9b, 0xdb, 0xdb, 0xf0, 0x76, 0x0e, 0x10, 0x10, 0x1b, 0x2c, 0xd5, 0x05, 0x26, 0x08, 0x22, 0x2e, 0x91, 0xe6, 0x79, 0xf4, 0x60, 0x1b, 0x13, 0xfd, 0x0e, 0xa8, 0x76, 0x24, 0x7b, 0x26, 0xd1, 0x31, 0x79, 0x8d, 0x18, 0xae, 0xeb, 0x3e, 0x4f, 0x54, 0x7e, 0xc3, 0x94, 0x75, 0x2c, 0xad, 0xba, 0x30, 0x07, 0xaf, 0xc2, 0x4f, 0x77, 0x83, 0x71, 0x20, 0x64, 0x0a, 0x81, 0xae, 0x90, 0x49, 0xec, 0x45, 0x5a, 0xa4, 0xcf, 0x44, 0xa1, 0xf2, 0x06, 0xe9, 0x6a, 0x0e, 0x76, 0x6e, 0x01, 0xde, 0xd2, 0x82, 0x22, 0x9b, 0x6b, 0x4b, 0x8a, 0x14, 0x57, 0x71, 0xa8, 0xda, 0x30, 0x36, 0x7d, 0x05, 0xf3, 0xdf, 0x7c, 0x94, 0x7c, 0x19, 0x93, 0x67, 0xee, 0x4e, 0x41, 0x29, 0x89, 0x99, 0xb9, 0x45, 0x2d, 0x24, 0xd1, 0x94, 0x24, 0x78, 0x74, 0xbb, 0x1d, 0xfb, 0x3f, 0x3e, 0x41, 0x7e, 0x9f, 0xc7, 0x7e, 0x95, 0xc3, 0x60, 0x07, 0x1b, 0x68, 0xee, 0x9a, 0xc2, 0x70, 0x67, 0x6f, 0xdc, 0x9b, 0x06, 0xd1, 0x0f, 0x05, 0x42, 0xed, 0x40, 0x49, 0x19, 0x0b, 0xf8, 0x91, 0xde, 0x87, 0x12, 0x44, 0xd1, 0x18, 0xd3, 0x36, 0x76, 0x01, 0x35, 0xab, 0x15, 0xec, 0xf5, 0x1c, 0x8c, 0xe4, 0xe9, 0x09, 0x98, 0x76, 0x06, 0x42, 0x08, 0x50, 0x4a, 0xe1, 0xb4, 0xe8, 0x9e, 0x14, 0x04, 0x02, 0x6d, 0xf9, 0xc1, 0xb3, 0xcf, 0x08, 0x23, 0x2d, 0x58, 0xe7, 0xb1, 0x83, 0xf1, 0x01, 0x0b, 0x52, 0x8b, 0xc6, 0xd8, 0xf6, 0x3e, 0x64, 0x46, 0x26, 0xca, 0x54, 0x95, 0xb7, 0xc0, 0xca, 0x79, 0x70, 0xce, 0xc1, 0x18, 0xc3, 0x80, 0x43, 0x61, 0x9b, 0x12, 0x35, 0x9f, 0xa1, 0xa6, 0x89, 0xb5, 0x80, 0xa1, 0xaa, 0xab, 0xc3, 0x26, 0x98, 0x1e, 0xd2, 0xd3, 0xd1, 0x98, 0x06, 0x36, 0xdc, 0x59, 0x07, 0x2d, 0x6d, 0xb9, 0x86, 0x6c, 0x76, 0xa0, 0x76, 0xf5, 0xd8, 0x2b, 0x79, 0x08, 0x67, 0x08, 0x4e, 0xfa, 0x14, 0x2e, 0x9d, 0xa5, 0x48, 0x51, 0x85, 0xac, 0x17, 0x42, 0x3f, 0x02, 0xe7, 0xfa, 0x4d, 0x5c, 0x1c, 0x35, 0xf5, 0x33, 0xf5, 0x44, 0x6a, 0x65, 0x30, 0x77, 0x11, 0xec, 0xeb, 0x2b, 0xec, 0x24, 0x7b, 0xd7, 0xe3, 0x31, 0xae, 0x2c, 0x2e, 0x08, 0xab, 0xb0, 0x4c, 0x9b, 0x0d, 0x02, 0x95, 0x19, 0xd6, 0x81, 0xe9, 0xd4, 0x95, 0x01, 0x8c, 0xd4, 0x51, 0x66, 0x94, 0x52, 0x50, 0x7f, 0x72, 0x90, 0x1b, 0x1f, 0x11, 0x79, 0xcb, 0x58, 0x09, 0x6c, 0x5c, 0x7f, 0xf8, 0x94, 0x1c, 0x05, 0xe9, 0xcb, 0xfb, 0x77, 0xd9, 0x68, 0x77, 0xd5, 0xea, 0x22, 0x87, 0x83, 0xb6, 0xd5, 0x04, 0xa4, 0x5a, 0x21, 0x93, 0x96, 0x6e, 0xa2, 0x0e, 0x8b, 0xe4, 0xe0, 0xd5, 0x22, 0x90, 0x5f, 0xf3, 0xdd, 0xfd, 0xaa, 0x55, 0x69, 0x1b, 0xc1, 0x8d, 0xfb, 0x8f, 0x63, 0xee, 0xb1, 0x28, 0x37, 0x0e, 0x5f, 0xcc, 0xde, 0xfb, 0xa0, 0xcd, 0x14, 0x4c, 0x02, 0x23, 0x01, 0xd1, 0x23, 0xb9, 0x48, 0xd4, 0x83, 0x60, 0xe3, 0xce, 0x93, 0x97, 0xb7, 0x4e, 0xfa, 0xef, 0x1d, 0xbf, 0xff, 0x2f, 0x00, 0x30, 0x39, 0x31, 0x2b, 0xc7, 0x20, 0xa9, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/spectator.xpm0000600000176000000410000000571712105760300022217 0ustar buildbotwww-data00000000000000/* XPM */ static const char * spectator_xpm[] = { "16 16 149 2", " c None", ". c #E4DFD8", "+ c #E5D6C6", "@ c #E5D0BC", "# c #E6CEB8", "$ c #E6CBB4", "% c #E6C9B1", "& c #E7CAB4", "* c #E7D5C7", "= c #E3E3E3", "- c #E6DACD", "; c #E8D3BA", "> c #EED5BE", ", c #E9CFB6", "' c #D9BEA5", ") c #D5B89F", "! c #DCBB9F", "~ c #F1C8AA", "{ c #EEC3A3", "] c #EAC1A2", "^ c #E9DCD3", "/ c #E6D3C0", "( c #ECD3BB", "_ c #D0B9A1", ": c #B3A08F", "< c #ABA19B", "[ c #A6A8B3", "} c #A1A5B4", "| c #9BA1B2", "1 c #A69D9B", "2 c #C09D81", "3 c #ECBA94", "4 c #EEB891", "5 c #ECD2BF", "6 c #E0E0E0", "7 c #E6D6C5", "8 c #ECD1B7", "9 c #BFAB97", "0 c #C5CAD6", "a c #A9C4EF", "b c #A4C0EF", "c c #9DBBEE", "d c #95B6ED", "e c #8EB1EB", "f c #85ABE9", "g c #B1C7EF", "h c #D9BAA4", "i c #E4AC83", "j c #F0B186", "k c #E3D3C7", "l c #E4DCD3", "m c #E5CBAD", "n c #D6CABD", "o c #FBFBFB", "p c #B2C9F1", "q c #A2BFEF", "r c #9BBAEE", "s c #10151D", "t c #0F141B", "u c #84AAEA", "v c #7CA5E8", "w c #84AAE9", "x c #E7D2C4", "y c #E5A67B", "z c #D19A77", "A c #DFCAB1", "B c #E8E2DC", "C c #F7F7F7", "D c #ABC4F0", "E c #98B8EC", "F c #91B4EC", "G c #0F131B", "H c #0E1219", "I c #7AA4E7", "J c #739DE5", "K c #7DA4E7", "L c #ECDCD2", "M c #CC8F68", "N c #E4E0DD", "O c #EEEEEE", "P c #F4F4F4", "Q c #F9F9F9", "R c #BED1F0", "S c #8EB1E9", "T c #86ABE7", "U c #7EA6E5", "V c #77A0E4", "W c #709BE3", "X c #6896E1", "Y c #9EBBEB", "Z c #DDB194", "` c #E3D2C2", " . c #E9E0D7", ".. c #F0F0F0", "+. c #DCE4F2", "@. c #9AB7E7", "#. c #7BA1E2", "$. c #739DE1", "%. c #6C98DF", "&. c #6493DE", "*. c #7CA2E2", "=. c #CFDBEF", "-. c #E7D5CB", ";. c #DFA179", ">. c #E1DBD5", ",. c #E8C8AD", "'. c #EAD3C0", "). c #EDE6E0", "!. c #EFEFEF", "~. c #D1DAE9", "{. c #A1B9E1", "]. c #779CDA", "^. c #7198D9", "/. c #95B0DF", "(. c #C9D4E8", "_. c #EEE9E6", ":. c #E9C9B5", "<. c #E29666", "[. c #C69B81", "}. c #D9CFC7", "|. c #E3BC9C", "1. c #ECC09D", "2. c #EBD1BE", "3. c #EBDCD3", "4. c #EBE7E4", "5. c #EBEBEB", "6. c #EAEAEA", "7. c #E9D5C9", "8. c #E7B391", "9. c #E19666", "0. c #BA8E72", "a. c #CBC1BA", "b. c #C5A994", "c. c #DDAA85", "d. c #E9B48D", "e. c #E9BB9B", "f. c #E7C0A5", "g. c #E6BFA5", "h. c #E7BDA1", "i. c #E3B190", "j. c #E39A6C", "k. c #C38660", "l. c #B69682", "m. c #AC7F5F", "n. c #B0805F", "o. c #B6815F", "p. c #B9815C", "q. c #B77D59", "r. c #AE7551", " ", " ", " . + @ # $ % & * ", " = - ; > , ' ) ! ~ { ] ^ ", " = / ( _ : < [ } | 1 2 3 4 5 ", "6 7 8 9 0 a b c d e f g h i j k ", "l m n o p q r s t u v w o x y z ", "A B C o D E F G H I J K o C L M ", "N O P Q R S T U V W X Y Q P O Z ", "` ...P +.@.#.$.%.&.*.=.P ..-.;.", ">.,.'.).!.~.{.].^./.(..._.:.<.[.", " }.|.1.2.3.4.5.5.5.6.7.8.9.0. ", " a.b.c.d.e.f.g.h.i.j.k.l. ", " m.n.o.p.q.r. ", " ", " "}; springlobby-0.169/src/images/spring.xpm0000600000176000000410000000451412105760300021507 0ustar buildbotwww-data00000000000000/* XPM */ static const char * spring_xpm[] = { "12 12 124 2", " c None", ". c #EB4E17", "+ c #EA4D17", "@ c #E64A17", "# c #E04716", "$ c #DB4416", "% c #D44015", "& c #CE3C15", "* c #C63814", "= c #BF3313", "- c #B72F13", "; c #AF2B12", "> c #A72712", ", c #E94C17", "' c #E84C17", ") c #E44A17", "! c #DA4316", "~ c #CD3C15", "{ c #C63714", "] c #BE3313", "^ c #AF2A12", "/ c #A72612", "( c #E44917", "_ c #E14816", ": c #DD4516", "< c #D84416", "[ c #E16F36", "} c #DB6631", "| c #C53814", "1 c #BD3213", "2 c #B52E13", "3 c #AE2A12", "4 c #A62612", "5 c #DF4716", "6 c #E5662F", "7 c #E87532", "8 c #E2651E", "9 c #FBE0C3", "0 c #F8D4B1", "a c #D3581B", "b c #D66E37", "c c #C14A25", "d c #AC2912", "e c #A42511", "f c #D94316", "g c #EB894A", "h c #FFFDFB", "i c #FAD4A6", "j c #F2BB8D", "k c #F2BC90", "l c #FAD7AD", "m c #FFFEFC", "n c #CD612D", "o c #A92712", "p c #A12411", "q c #D34015", "r c #D74C18", "s c #ED8E3C", "t c #F9D6B5", "u c #D85A1E", "v c #C83D15", "w c #C33B15", "x c #D05C22", "y c #F8D9B8", "z c #D46C26", "A c #AE3214", "B c #9F2311", "C c #D14718", "D c #F5C59E", "E c #FFFBF6", "F c #E07838", "G c #C43714", "H c #C03414", "I c #BA3113", "J c #B63013", "K c #DB824B", "L c #FEF9F3", "M c #EAB997", "N c #A32D14", "O c #C63B15", "P c #E07E42", "Q c #FAE4CF", "R c #CE4F1A", "S c #B93013", "T c #B42E13", "U c #C3501E", "V c #F7E3D1", "W c #C76738", "X c #9A2312", "Y c #BE3614", "Z c #C54418", "` c #BC3514", " . c #B62E13", ".. c #B22C13", "+. c #A92812", "@. c #A82C13", "#. c #AB3516", "$. c #9A2211", "%. c #921D11", "&. c #B42D13", "*. c #B22C12", "=. c #AB2912", "-. c #A32511", ";. c #9E2211", ">. c #992011", ",. c #931D11", "'. c #8D1B10", "). c #AD2912", "!. c #AA2812", "~. c #A42512", "{. c #A12311", "]. c #9C2111", "^. c #981F11", "/. c #8E1B10", "(. c #881A10", "_. c #A52512", ":. c #A22411", "<. c #A02311", "[. c #9D2211", "}. c #9A2011", "|. c #961F11", "1. c #911D11", "2. c #881910", "3. c #851810", ". + @ # $ % & * = - ; > ", ", ' ) # ! % ~ { ] - ^ / ", ") ( _ : < [ } | 1 2 3 4 ", "5 5 6 7 8 9 0 a b c d e ", "f f g h i j k l m n o p ", "q r s t u v w x y z A B ", "C D E F G H I J K L M N ", "O P Q R 1 S T ; U V W X ", "1 Y Z ` ...3 +.@.#.$.%.", "2 2 &.*.; =.> -.;.>.,.'.", ").).d !.> ~.{.].^.,./.(.", "_._.~.:.<.[.}.|.1.'.2.3."}; springlobby-0.169/src/images/springlobby.svg0000600000176000000410000001740012105760300022530 0ustar buildbotwww-data00000000000000 image/svg+xml springlobby-0.169/src/images/springlobby.xpm0000600000176000000410000000250012105760300022530 0ustar buildbotwww-data00000000000000/* XPM */ static const char * springlobby_xpm[] = { "16 16 64 1", " c None", ". c #3C2D00", "+ c #FDB19C", "@ c #FDB19B", "# c #FDB4A2", "$ c #FDAC91", "% c #FDA691", "& c #FDAD93", "* c #FDB49A", "= c #FDBBA5", "- c #FDB099", "; c #FDC7AC", "> c #FDC6A9", ", c #3A2B00", "' c #362700", ") c #FFFFC5", "! c #FFFEAD", "~ c #FFFC00", "{ c #FFFD00", "] c #3F3100", "^ c #403200", "/ c #3F3300", "( c #3D2E00", "_ c #FFFFBE", ": c #FFFF73", "< c #FFF800", "[ c #FFEF8F", "} c #3F3000", "| c #483800", "1 c #FEBDA8", "2 c #403100", "3 c #FFE76B", "4 c #FFE74D", "5 c #3E2F00", "6 c #FFEB00", "7 c #433300", "8 c #FEC6A0", "9 c #4A3A00", "0 c #FEBDA7", "a c #413100", "b c #FFFE00", "c c #FFFE6B", "d c #FFEB73", "e c #FFE200", "f c #FFD500", "g c #FFB700", "h c #FEB15F", "i c #4B3B00", "j c #FFE24D", "k c #FFCD00", "l c #FFA900", "m c #FFC300", "n c #4F3F00", "o c #463700", "p c #584800", "q c #FF9800", "r c #564600", "s c #4C3C00", "t c #534300", "u c #554600", "v c #524200", "w c #FF8300", "x c #504000", "y c #4E3E00", " ", " .. ", " .. .+@. .. ", " .#..$%&*..=. ", " .-&......;>. ", " .,')!~{]^/ ", " .(_:~<[<<<}| ", " .12~<234566789 ", ".0abcdaee5ffg9hi", " 299 WiyX9KHf&Jm%Sd! n~b{8tl q?R7D|L< n4V:\$p^]Q2z=.A'3JJJ0w Muv)mI`w( @A@ysT ;80ÚNJ~rp'%TSP yDBڸ[WľZW{ihg/.LJ3{vjegdP |xi0/ý.-+}|KIdd}}}IHCtp˵&$!b`[pl] |?><pokmkp98][Ryt]uusA?*ROF OL544kgH[XifY?=`^'%njQõvuRPkh31+::9HHxw{EC=ge{v|we~qnUmkc}\[X*(%CAurhtqGDc_Q#"QPLXVTÿ}zpJH:64QN ##cb^r|PMA42[Z;okt10#"!650=<png|zv~y39 9#0931mԜ=bs1||Μq݇/{܄Tx======#6m1) h\w=vuR(( 4 h\NHQ=BffzO"--\Lgᄄ,&$j~+OOkz8ئǒJO=OKFK-nɸQw8.=fXUX-ҖQa.\dwd\KE.fʢ-ҖnM-7wKK-[SwwB8V`?Ŏ*=-8\ؘA8=?ɽ?ӓneᄄ%tSصLio%!t!oAiiA%(0` @>rHFCϩ@>Irmqonmi.-30TP }<:oYV1c_K(&Flg970*(;8/.c` PO|nuqqmU(%__\ҼSRO!  ,+)#"('|ƶ}|UQ[X=ݸPM6ĻFEV<75 HFDB1zvfc97utpTQE id9ig_||ysc^iep)(>=:li86e=qSPtsjh~ fbU^[Svti'%"^[NǿJJqpq21.FC<Ŀ\YC<;'USż~}2064wt KH=\[hgf@>rodz&$}zq876nkMK" BA@>;NLFa]D̻UUû)'?<5;:FDYWP<<<<<<<<r7)@q!?o矟r)νw'A>B鹙W!SwT())ww'rG0wwWՐo[ww'rL{0W!.Ӂ{Bww')rT(0WqlGB7rww{ǴԜ^!^BTwwK{G=?WqчԜG@www)=)gWB{}0q.TwwwGB@.^.矽wwwLԜB}.ћB@үSSwww({loҙG=^ҙ`.սwww(蔝}G=0g.?^?Wwwwwww^=GB@}llWww!gBB=Wwwxg^ԛGѹWwwwq===l^.!ggggg׿!springlobby-0.169/src/images/springsettings.xpm0000600000176000000410000000564412105760300023275 0ustar buildbotwww-data00000000000000/* XPM */ static const char * springsettings_xpm[] = { "16 16 146 2", " c None", ". c #FFFFFF", "+ c #FEFFFF", "@ c #B1B1B1", "# c #222222", "$ c #030303", "% c #121213", "& c #67696A", "* c #F8FEFF", "= c #F7FDFF", "- c #F8FDFF", "; c #FAFEFF", "> c #FCFFFF", ", c #171717", "' c #393A3A", ") c #D4D9DA", "! c #BEC4C6", "~ c #989FA1", "{ c #F0FCFF", "] c #F2FCFF", "^ c #F5FDFF", "/ c #101111", "( c #1B1B1C", "_ c #93999B", ": c #D0DBDF", "< c #EBFBFF", "[ c #E8FBFF", "} c #E8FAFF", "| c #000000", "1 c #303435", "2 c #191A1B", "3 c #141415", "4 c #B5BABB", "5 c #FDFFFF", "6 c #999C9D", "7 c #0D0D0E", "8 c #687275", "9 c #E1F9FF", "0 c #E0F9FF", "a c #212526", "b c #BECDD1", "c c #232526", "d c #262829", "e c #F9FEFF", "f c #FBFFFF", "g c #F4FDFF", "h c #E8F6F9", "i c #AAB8BC", "j c #1E2223", "k c #08090A", "l c #DAF8FF", "m c #D9F7FF", "n c #505A5D", "o c #545B5D", "p c #030304", "q c #FCFEFF", "r c #5E6264", "s c #B2BFC3", "t c #C2D4D9", "u c #2F3537", "v c #171B1C", "w c #D3F6FF", "x c #D1F5FF", "y c #202426", "z c #B5CBD1", "A c #252829", "B c #F2FDFF", "C c #434748", "D c #111213", "E c #020203", "F c #1D2223", "G c #94ADB4", "H c #CCF5FF", "I c #C9F4FF", "J c #30383B", "K c #1D2123", "L c #121415", "M c #AAB7BB", "N c #F7FEFF", "O c #F3AEB1", "P c #FB2122", "Q c #FE0203", "R c #FC1213", "S c #EB656A", "T c #C1F3FF", "U c #505F63", "V c #D8F7FF", "W c #DFF9FF", "X c #E7FAFF", "Y c #EFFCFF", "Z c #F6FDFF", "` c #FFFEFF", " . c #FD1617", ".. c #F9393A", "+. c #E5D4DA", "@. c #E1C0C6", "#. c #E29BA1", "$. c #C8F4FF", "%. c #515F63", "&. c #FE1011", "*. c #FC1B1C", "=. c #ED979B", "-. c #E1D8DF", ";. c #D6F7FF", ">. c #D2F6FF", ",. c #D8C7D0", "'. c #F63133", "). c #FE0405", "!. c #F82F31", "~. c #E8D1D6", "{. c #EAFBFF", "]. c #F1FCFF", "^. c #FBFEFF", "/. c #F89B9D", "(. c #FE0D0E", "_. c #FF0000", ":. c #EE7175", "<. c #F72E30", "[. c #F53D3F", "}. c #E2D0D6", "|. c #F92F31", "1. c #F93739", "2. c #EEFBFF", "3. c #F1F6F9", "4. c #F0B9BC", "5. c #FB2223", "6. c #FD090A", "7. c #FE0304", "8. c #FD0A0B", "9. c #FE6464", "0. c #F8C2C3", "a. c #F3D6D9", "b. c #FB3637", "c. c #FA3031", "d. c #F93738", "e. c #EFB3B7", "f. c #F2ABAE", "g. c #F87778", "h. c #FDFEFF", "i. c #FF4848", "j. c #FE1213", "k. c #FD2223", "l. c #F5B1B4", "m. c #F0D1D4", "n. c #FB393A", "o. c #FD4748", ". . . . . . . . + . . . . . . . ", ". . @ # $ % & * = - ; > . . . . ", ". . , ' ) ! ~ { { { ] ^ * + . . ", ". . / ( _ : < [ } | 1 2 3 4 5 . ", ". . 6 7 | | 8 9 0 | a b c d e . ", ". f g h i j k l m | n 9 o p g q ", ". e r s t u v w x | y z a A B e ", ". = C D E F G H I | J K L M { - ", "+ N O P Q R S I T | U V W X Y Z ", "` = ...+.@.#.H $.| %.l 0 [ { = ", ". e &.*.=.-.;.>.,.'.).!.~.{.].e ", ". ^./.(._._.:.m <.[.}.|.1.2.g ^.", ". . * 3.4.5.6.0 7.).8.7.7.B * . ", ". . 9.0.a.b.*.} c.d.e.f.g.Z h.. ", ". . i.j.Q k.l.Y m.n.).(.o.5 . . ", ". . . . + ^.e = Z N * f + . . . "}; springlobby-0.169/src/images/star_bronze.xpm0000600000176000000410000000131212105760300022526 0ustar buildbotwww-data00000000000000/* XPM */ static const char * star_bronze_xpm[] = { "16 16 22 1", " c None", ". c #000000", "+ c #4A0000", "@ c #B55900", "# c #832200", "$ c #590000", "% c #FFD290", "& c #200000", "* c #C97319", "= c #DB8933", "- c #FFEFB3", "; c #FFFFEA", "> c #680500", ", c #993800", "' c #5D0000", ") c #FFFAC3", "! c #620000", "~ c #A64A00", "{ c #3F0000", "] c #EA9D4A", "^ c #BA6000", "/ c #FFC078", " ....+++.... ", " .@#$%%%$#@. ", " .#&&***&&#. ", " .$&&***&&$. ", " .$&*%*&$. ", " .$%+%$. ", " .+=+. ", " -;> ", " =;. ", " ,';%;,, ", " ==;)--)-;>. ", " ..!=;~{.. ", " .;]-. ", " .;~.^/. ", " .^. >=. ", " .. .. "}; springlobby-0.169/src/images/star_gold.xpm0000600000176000000410000000215412105760300022161 0ustar buildbotwww-data00000000000000/* XPM */ static const char * star_gold_xpm[] = { "16 16 50 1", " c None", ". c #706D34", "+ c #565656", "@ c #2D5C91", "# c #FFFFFF", "$ c #FCFE72", "% c #6CD7FE", "& c #FCFE36", "* c #ACAAAA", "= c #FCFE5A", "- c #E8E8E8", "; c #EEE330", "> c #50A0FA", ", c #939393", "' c #C7C7C7", ") c #FCFE48", "! c #676767", "~ c #87833F", "{ c #CC9E00", "] c #FAD300", "^ c #FCFE4A", "/ c #FF7901", "( c #F4A600", "_ c #FCFF0B", ": c #D62300", "< c #CC8600", "[ c #FEEC24", "} c #FEEF4A", "| c #EBEE00", "1 c #CCBB00", "2 c #FEEE38", "3 c #FFEB0B", "4 c #CC6500", "5 c #D64100", "6 c #B20000", "7 c #CC7800", "8 c #CC9000", "9 c #FEF056", "0 c #941800", "a c #B21D00", "b c #CCA800", "c c #7C1400", "d c #800000", "e c #CCB200", "f c #FF6D01", "g c #680000", "h c #D65B00", "i c #CCA300", "j c #D60000", "k c #940000", " .+.@.+.@.+. ", " .#$%&*&%=-. ", " .#;>;,;>;-. ", " .-;>;,;>;-. ", " .';>;';>;-. ", " +)>)!&>=+ ", " .%~{~%. ", " @]^/@ ", " (_: ", " {<^[}{{ ", " {{^|1213245 ", " :67898<0a ", " a2bbc ", " <[7d c #999999", ", c #4C4C4C", "' c #B2B2B2", ") c #949494", "! c #F7F7F7", "~ c #5B5B5B", "{ c #989797", "] c #D1D0D0", "^ c #B9B8B8", "/ c #8B8A8A", "( c #D8D8D8", "_ c #3F3F3F", ": c #6D6D6D", "< c #353535", "[ c #C2C1C1", "} c #E5E4E4", " ....+++.... ", " .@#$%%%$#@. ", " .#&&***&&#. ", " .$&&***&&$. ", " .$&*%*&$. ", " .$%+%$. ", " .+=+. ", " -;> ", " =;, ", " ');%;'' ", " ==;!--!-;>~ ", " ~,{];^/,, ", " ,;(-_ ", " :;^<[}: ", " ~[< >], ", " ,_ ~, "}; springlobby-0.169/src/images/start_ally.xpm0000600000176000000410000000074712105760300022367 0ustar buildbotwww-data00000000000000/* XPM */ static const char * start_ally_xpm[] = { "16 16 7 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #019A1A", "# c #BFFFCA", "$ c #00FF2A", "% c #00D924", " ...... ", " ..++++++.. ", " .+++@@@@+++. ", " .++@@@##@@@++. ", " .+@@##$$##@@+. ", ".++@#$$$$$$%@++.", ".+@@#$$$$$$%@@+.", ".+@#$$$$$$$$%@+.", ".+@#$$$$$$$$%@+.", ".+@@#$$$$$$%@@+.", ".++@#$$$$$%%@++.", " .+@@%%$$%%@@+. ", " .++@@@%%@@@++. ", " .+++@@@@+++. ", " ..++++++.. ", " ...... "}; springlobby-0.169/src/images/start_enemy.xpm0000600000176000000410000000075012105760300022535 0ustar buildbotwww-data00000000000000/* XPM */ static const char * start_enemy_xpm[] = { "16 16 7 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #A20303", "# c #FFD6D6", "$ c #FF0000", "% c #CB0000", " ...... ", " ..++++++.. ", " .+++@@@@+++. ", " .++@@@##@@@++. ", " .+@@##$$##@@+. ", ".++@#$$$$$$%@++.", ".+@@#$$$$$$%@@+.", ".+@#$$$$$$$$%@+.", ".+@#$$$$$$$$%@+.", ".+@@#$$$$$$%@@+.", ".++@#$$$$$%%@++.", " .+@@%%$$%%@@+. ", " .++@@@%%@@@++. ", " .+++@@@@+++. ", " ..++++++.. ", " ...... "}; springlobby-0.169/src/images/start_unused.xpm0000600000176000000410000000075112105760300022724 0ustar buildbotwww-data00000000000000/* XPM */ static const char * start_unused_xpm[] = { "16 16 7 1", " c None", ". c #000000", "+ c #FFFFFF", "@ c #425A45", "# c #DAE4DB", "$ c #6C9472", "% c #5C7E61", " ...... ", " ..++++++.. ", " .+++@@@@+++. ", " .++@@@##@@@++. ", " .+@@##$$##@@+. ", ".++@#$$$$$$%@++.", ".+@@#$$$$$$%@@+.", ".+@#$$$$$$$$%@+.", ".+@#$$$$$$$$%@+.", ".+@@#$$$$$$%@@+.", ".++@#$$$$$%%@++.", " .+@@%%$$%%@@+. ", " .++@@@%%@@@++. ", " .+++@@@@+++. ", " ..++++++.. ", " ...... "}; springlobby-0.169/src/images/started_game.xpm0000600000176000000410000000100712105760300022636 0ustar buildbotwww-data00000000000000/* XPM */ static const char * started_game_xpm[] = { "16 16 9 1", " c None", ". c #7E7E7E", "+ c #000000", "@ c #FFFFFF", "# c #BCBCBC", "$ c #FFEAAC", "% c #BC8E00", "& c #705400", "* c #FFD75F", " ", " .+++ +++. ", " +.@@+ +@@.+ ", " +#.#@+ +@#.#+ ", " +.#.#@++@#.#.+ ", " +.#.#@+#.#.+ ", " +.#.#@+#.+ ", " ++.#.#@+++ ", " +$++.#.#@+$+ ", " +%$#+.#.#$%+ ", " +%##+.##%+ ", " +&&%*++*%&&+ ", " +&&&+%**%+&&&+ ", " &&&+ ++++ +&&& ", " *&+ +&* ", " "}; springlobby-0.169/src/images/torrentoptionspanel_icon.png.h0000600000176000000410000001146412105760300025556 0ustar buildbotwww-data00000000000000/* torrentoptionspanel_icon.png - 751 bytes */ static const unsigned char torrentoptionspanel_icon_png[] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x56, 0x75, 0x5c, 0xe7, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b, 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45, 0x07, 0xd8, 0x04, 0x1e, 0x14, 0x0b, 0x15, 0xe2, 0xf9, 0x84, 0x02, 0x00, 0x00, 0x00, 0x35, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x00, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x30, 0x34, 0x20, 0x4a, 0x61, 0x6b, 0x75, 0x62, 0x20, 0x53, 0x74, 0x65, 0x69, 0x6e, 0x65, 0x72, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x54, 0x68, 0x65, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x90, 0xd9, 0x8b, 0x6f, 0x00, 0x00, 0x02, 0x2e, 0x49, 0x44, 0x41, 0x54, 0x28, 0xcf, 0x2d, 0xc1, 0x4f, 0x48, 0x53, 0x71, 0x00, 0x07, 0xf0, 0xef, 0xef, 0xfd, 0xf6, 0xe6, 0xe6, 0x7b, 0xfa, 0xe6, 0xd4, 0xb5, 0xcd, 0x81, 0xce, 0x37, 0x54, 0xa8, 0x29, 0x45, 0x99, 0x24, 0x19, 0x23, 0x59, 0x7f, 0x90, 0x3a, 0xd4, 0xa1, 0x6e, 0x8a, 0x05, 0xd2, 0xa5, 0x5b, 0x44, 0x97, 0xfe, 0x5d, 0xba, 0x14, 0xd5, 0xc9, 0xa4, 0x43, 0x97, 0xa4, 0x12, 0x3a, 0xd4, 0x21, 0x08, 0x09, 0x8a, 0x84, 0x0e, 0x81, 0x88, 0x25, 0xce, 0xf6, 0x47, 0xe3, 0xb5, 0x99, 0xce, 0xb7, 0x4d, 0x9f, 0x7b, 0x7b, 0xbf, 0xe7, 0xf6, 0xeb, 0xd2, 0xe7, 0x43, 0xfa, 0x4f, 0xdf, 0x1c, 0xe0, 0x9c, 0xcf, 0x70, 0xce, 0x43, 0x9c, 0xa3, 0x5a, 0x36, 0x2d, 0x9a, 0xcf, 0x97, 0xe0, 0xef, 0x68, 0x43, 0x40, 0x6d, 0xff, 0xb6, 0x94, 0xd0, 0xc6, 0xb5, 0xd9, 0x7b, 0x4b, 0x00, 0xe0, 0x3b, 0x71, 0x0b, 0x84, 0x73, 0x8e, 0xc3, 0xf1, 0x1b, 0x97, 0x41, 0x84, 0x69, 0xcb, 0xb2, 0xd1, 0x15, 0x09, 0xe2, 0xe2, 0xc8, 0x00, 0x64, 0x45, 0x81, 0x6e, 0xda, 0xc6, 0xc2, 0xb2, 0xb6, 0xb4, 0x90, 0xd0, 0x1e, 0x7e, 0x9a, 0xba, 0xf6, 0x06, 0x00, 0x1c, 0x84, 0x10, 0x8c, 0xde, 0x79, 0x95, 0x2c, 0x64, 0x37, 0x30, 0x7c, 0x54, 0xc5, 0xc9, 0xd8, 0x41, 0xd8, 0xb6, 0x05, 0x46, 0x1b, 0xe0, 0x35, 0x8a, 0x72, 0x34, 0xdc, 0xdb, 0xdf, 0xea, 0x91, 0x5e, 0x4b, 0xee, 0xe7, 0xc1, 0xf7, 0x4f, 0xae, 0x3c, 0xa6, 0xa7, 0xc6, 0x1e, 0x1d, 0xd8, 0xd0, 0x72, 0x2f, 0xce, 0xc5, 0xa2, 0xfe, 0xb3, 0xb1, 0x9e, 0x1a, 0x95, 0x9a, 0x89, 0xec, 0x6d, 0x45, 0x49, 0x2f, 0x00, 0xa6, 0xce, 0xa3, 0x5d, 0xa1, 0x5a, 0x24, 0x1c, 0x10, 0xd2, 0xda, 0xd6, 0x90, 0x10, 0x8e, 0xbf, 0xa4, 0xdd, 0x87, 0xe2, 0x2b, 0xb2, 0x93, 0x06, 0xc7, 0x2e, 0x0d, 0x51, 0x22, 0xfb, 0x48, 0x9d, 0xab, 0x1e, 0x84, 0x10, 0x54, 0x99, 0x09, 0xcb, 0xdc, 0x25, 0xc9, 0xec, 0xb6, 0xd0, 0x54, 0x4f, 0x20, 0x38, 0xdd, 0x62, 0x76, 0x2d, 0x6d, 0x08, 0x6b, 0x29, 0x4d, 0xe9, 0x52, 0xdb, 0x44, 0xcd, 0x74, 0x83, 0x51, 0x09, 0x10, 0x08, 0x0c, 0xc3, 0x84, 0x57, 0x72, 0x62, 0xf0, 0x48, 0x1f, 0x06, 0x7a, 0x55, 0xd8, 0x8c, 0x41, 0x71, 0x8b, 0x08, 0xea, 0xab, 0x83, 0x02, 0x75, 0xd6, 0xa1, 0xb9, 0xa5, 0x09, 0x0e, 0x5e, 0x41, 0x36, 0x9b, 0xc3, 0xea, 0xa6, 0x05, 0x6d, 0xa3, 0x88, 0x3d, 0x66, 0x02, 0x00, 0x1a, 0x65, 0x37, 0x28, 0x25, 0x60, 0x6c, 0x0f, 0x2e, 0xcb, 0xf0, 0x38, 0x3a, 0xba, 0x3b, 0x2b, 0x36, 0x48, 0xdd, 0xfe, 0xa0, 0x8b, 0x88, 0x0e, 0x27, 0xe6, 0x92, 0xeb, 0xc8, 0xef, 0x02, 0x99, 0x5c, 0x19, 0x0d, 0x09, 0x1d, 0xe7, 0x8f, 0xa9, 0x28, 0x14, 0x8a, 0x58, 0x2f, 0x55, 0xd1, 0xb8, 0xf3, 0x83, 0x0a, 0xcc, 0xac, 0x8c, 0x6f, 0x6e, 0x57, 0xd2, 0x25, 0x8b, 0xa2, 0xb5, 0xc5, 0x5b, 0x1b, 0x54, 0xeb, 0xf1, 0x37, 0x5f, 0xc0, 0x4a, 0xae, 0x8c, 0xcf, 0xcb, 0x45, 0xfc, 0xd1, 0x7e, 0x63, 0xbb, 0x2a, 0x22, 0xb3, 0xf8, 0x0b, 0xde, 0xdd, 0xef, 0x8c, 0x26, 0xe7, 0x3f, 0x2c, 0xee, 0xeb, 0x19, 0x16, 0xf3, 0x3b, 0x66, 0x3c, 0x1c, 0xf4, 0x90, 0x2f, 0xf3, 0x69, 0x7c, 0x4d, 0x14, 0x91, 0x2f, 0x95, 0x61, 0x31, 0x86, 0x9e, 0x90, 0x8c, 0xf9, 0x34, 0x43, 0x6d, 0xf6, 0x69, 0x2e, 0x40, 0x7f, 0xce, 0x10, 0xfc, 0x77, 0xe1, 0xfa, 0xe4, 0x54, 0x77, 0x24, 0x74, 0x55, 0xf1, 0x28, 0xf0, 0x28, 0x12, 0xe0, 0x94, 0xa0, 0x57, 0x84, 0xaa, 0xb1, 0x96, 0xb1, 0x85, 0xb9, 0xc9, 0x2d, 0xb5, 0xf2, 0xf6, 0xd9, 0xe8, 0x3b, 0xdc, 0x27, 0x6a, 0xfc, 0x36, 0x52, 0x1f, 0xef, 0x02, 0x00, 0xce, 0x8c, 0x3d, 0x38, 0xee, 0xf3, 0xfb, 0x27, 0x44, 0xc9, 0x23, 0xca, 0xe5, 0x54, 0x9f, 0xab, 0x94, 0xf1, 0xb5, 0x27, 0xa6, 0x75, 0x45, 0xd2, 0x3b, 0x6b, 0x02, 0xaa, 0x9c, 0x93, 0x89, 0x7f, 0x38, 0xb8, 0xef, 0x80, 0x19, 0x3b, 0x64, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}; /* End Of File */ springlobby-0.169/src/images/unknown_flag.xpm0000600000176000000410000000311712105760300022673 0ustar buildbotwww-data00000000000000/* XPM */ static const char * unknown_flag_xpm[] = { "16 16 82 1", " c None", ". c #004381", "+ c #003375", "@ c #002D73", "# c #00276D", "$ c #002169", "% c #001963", "& c #00135D", "* c #000D59", "= c #000553", "- c #00004D", "; c #7BB0CA", "> c #7BB0C9", ", c #79AEC9", "' c #6DA7C3", ") c #6AA5C3", "! c #65A1C0", "~ c #619EBE", "{ c #5C9BBB", "] c #5899B9", "^ c #5396B7", "/ c #4E93B4", "( c #000047", "_ c #5896C3", ": c #5C9DBE", "< c #5093AE", "[ c #D9E7ED", "} c #FAFCFC", "| c #F1F6F9", "1 c #95BED3", "2 c #3D86AC", "3 c #3784AB", "4 c #3181A9", "5 c #2C7CA6", "6 c #498FB1", "7 c #000041", "8 c #00417F", "9 c #9CC2D1", "0 c #5E9CBC", "a c #CFE1EB", "b c #F8FAFC", "c c #2B7CA5", "d c #267AA2", "e c #00003B", "f c #629EB6", "g c #EAF2F6", "h c #CFE1EA", "i c #D9E7EF", "j c #D7E6EE", "k c #4A8EB1", "l c #2F7DA4", "m c #93BCCD", "n c #4991B4", "o c #458EB2", "p c #458BAD", "q c #3381A8", "r c #2478A2", "s c #1F70A4", "t c #196CA2", "u c #1469A0", "v c #10659D", "w c #337BAB", "x c #00276F", "y c #448CAF", "z c #3F8AAF", "A c #FFFFFF", "B c #79ACC5", "C c #1E749F", "D c #18709C", "E c #136C99", "F c #0F6A97", "G c #0B6795", "H c #000021", "I c #619FBE", "J c #428AAE", "K c #327FA6", "L c #2C7BA2", "M c #00001F", "N c #000039", "O c #000033", "P c #00002D", "Q c #000025", " ", " ", " ", "....++++@#$%&*=-", ".;;>,,,')!~{]^/(", ".;_:_<[}|1234567", "8,:___90ab34cd6e", "@,:__<. **/ springlobby-0.169/src/infodialog.cpp0000600000176000000410000000767012105760300021037 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include "infodialog.h" #include #include "springunitsync.h" #include "settings.h" #include #include #include #include #include "nonportable.h" #include "utils/conversion.h" #include "utils/debug.h" #include #include "utils/platform.h" #include "updater/updatehelper.h" #include #include #if defined(__unix__) || defined(__APPLE__) # include # define WRITABLE W_OK #elif defined(__WIN32__) || defined(_MSC_VER) # include # define WRITABLE 02 #else # error "os not supported" #endif inline wxString BtS( bool q, std::string y = "yes", std::string n = "no" ) { return q ? TowxString(y) : TowxString(n) ; } InfoDialog::InfoDialog(wxWindow* parent ) :wxDialog(parent,wxID_ANY, _("path shit"), wxDefaultPosition, wxSize(620,400), wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxMAXIMIZE_BOX) { wxBoxSizer* main_sizer = new wxBoxSizer( wxVERTICAL ); typedef std::vector< std::pair< wxString,wxString > > Paths; Paths paths; paths.push_back( std::make_pair( sett().GetLobbyWriteDir(), _T("LobbyWriteDir") ) ); paths.push_back( std::make_pair( sett().GetTempStorage(), _T("TempStorage")) ); paths.push_back( std::make_pair( sett().GetCachePath(), _T("CachePath")) ); paths.push_back( std::make_pair( sett().GetCurrentUsedDataDir(), _T("CurrentUsedDataDir")) ); paths.push_back( std::make_pair( GetExecutableFolder() , _T("ExecutableFolder"))); wxTextCtrl* out = new wxTextCtrl( this, wxNewId(), _T( "" ), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH | wxTE_AUTO_URL ); for ( size_t i =0; i < paths.size(); ++i ) { *out << wxString::Format( _T("%s (%s)\n"), paths[i].second.c_str(), paths[i].first.c_str()); wxString path = paths[i].first; wxString dummy_fn = path + wxFileName::GetPathSeparator() + _T("dummy.txt"); const bool wx = wxFileName::IsDirWritable( path ); const bool posix = access(STD_STRING(path).c_str(), WRITABLE) == 0; bool tried = false; try{ std::ofstream of; of.open( STD_STRING(dummy_fn).c_str() ); if ( of.is_open() ) { of << "fhreuohgeiuhguie"; of.flush(); of.close(); tried = wxRemoveFile(dummy_fn); } } catch (...){} *out << wxString::Format( _T("\tWX: %s POSIX: %s TRY: %s\n"), BtS(wx).c_str(), BtS(posix).c_str(), BtS(tried).c_str() ); } *out << wxString::Format( _T("Global config: %s (%s %s )\n"), sett().GlobalConfigPath().c_str(), BtS(wxFileName::FileExists(sett().GlobalConfigPath()), "exists", "missing").c_str(), BtS(wxFileName::IsFileWritable(sett().GlobalConfigPath()), "writable", "").c_str() ); *out << wxString::Format( _T("Local config: %s (%s writable)\n"), sett().FinalConfigPath().c_str(), BtS(wxFileName::IsFileWritable(sett().FinalConfigPath()), "", "not" ).c_str() ); *out << wxString::Format( _T("Portable mode: %s\n"), BtS(sett().IsPortableMode()).c_str() ); *out << _T( "Version " ) + GetSpringLobbyVersion() << wxString( wxVERSION_STRING ) + _T(" on ") + wxPlatformInfo::Get().GetOperatingSystemIdName() + _T( "\ncl: " ) ; for ( int i = 0; i < wxTheApp->argc; ++i ) *out << wxTheApp->argv[i] << _T(" "); main_sizer->Add( out, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); SetSizer( main_sizer ); Layout(); } springlobby-0.169/src/infodialog.h0000600000176000000410000000150312105760300020471 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef INFODIALOG_H #define INFODIALOG_H #include class InfoDialog : public wxDialog { public: InfoDialog(wxWindow* parent = 0 ); }; #endif // INFODIALOG_H springlobby-0.169/src/introguide.cpp0000600000176000000410000003153612105760300021073 0ustar buildbotwww-data00000000000000#include "introguide.h" #include #include #include #include #if wxUSE_TOGGLEBTN #include #endif #include #include "ui.h" #include "mainwindow.h" #include "uiutils.h" #include "customizations.h" BEGIN_EVENT_TABLE( IntroGuide, wxFrame ) EVT_TEXT_URL ( TEXT_DISPLAY, IntroGuide::OnLinkEvent ) #if wxUSE_TOGGLEBTN EVT_TOGGLEBUTTON ( SPRING_DESC, IntroGuide::OnSpringDesc ) EVT_TOGGLEBUTTON ( INSTALL_DESC, IntroGuide::OnInstallDesc ) EVT_TOGGLEBUTTON ( SINGLE_DESC, IntroGuide::OnSingleDesc ) EVT_TOGGLEBUTTON ( MULTI_DESC, IntroGuide::OnMultiDesc ) EVT_TOGGLEBUTTON ( GRAPHIC_TROUB, IntroGuide::OnGraphicTroubles ) EVT_TOGGLEBUTTON ( HELP_LINKS, IntroGuide::OnWikiLinks ) #else EVT_CHECKBOX ( SPRING_DESC, IntroGuide::OnSpringDesc ) EVT_CHECKBOX ( INSTALL_DESC, IntroGuide::OnInstallDesc ) EVT_CHECKBOX ( SINGLE_DESC, IntroGuide::OnSingleDesc ) EVT_CHECKBOX ( MULTI_DESC, IntroGuide::OnMultiDesc ) EVT_CHECKBOX ( GRAPHIC_TROUB, IntroGuide::OnGraphicTroubles ) EVT_CHECKBOX ( HELP_LINKS, IntroGuide::OnWikiLinks ) #endif END_EVENT_TABLE() IntroGuide::IntroGuide() : wxFrame( (wxFrame*)&ui().mw(), -1, _("Newbies guide"), wxPoint(50, 50), wxSize(800,600) ) { SpringOverview << _("Spring is just an engine, alone it won't do much, games are games that run on the engine.\n"); SpringOverview << _("You will need to install at least a map and a game in order to play.\n\n"); SpringOverview << _("As a user, you can extend functionality downloading small scripts (LuaUI Widgets) and activate them ingame trough the F11-button list.\n\n"); SpringOverview << _("For players with previous RTS experience, one tricky part of spring is that fog of war is present, but not visualized by default ingame until you press the \"L\" button.\n\n"); SpringOverview << _("For developers, spring is highly customizable, with a scripting engine, you'd want to check out the forum/wiki to get started.\n"); // spring overview InstallOverview << _("If you skip the automatic content installer for some reason, you can still download and install content manually.\n"); InstallOverview << _("The most popular download site is http://www.springfiles.com .\n"); InstallOverview << _("The installation directory, differs according to the operative system:\n"); InstallOverview << _("Windows XP: Spring's installation path.\n"); InstallOverview << _("Windows Vista/Windows 7: C:\\Users\\username\\App Data\\local\\spring (This folder is default insibie, change your file manager settings to display it).\n"); InstallOverview << _("Linux: ~/.spring (this folder is default invisible, you might want to create a visible link using \"ln -s ~/.spring ~/spring\").\n"); InstallOverview << _("As obvious as it could be, maps belong to the maps subdirectory, games to the games subdirectory, and widgets to LuaUI\\Widgets subdirectory.\n\n"); InstallOverview << _("In order for the lobby to detect correctly a freshly installed map/game, you'll need to trigger a refresh, to do it click on tools->Reload map/game list."); // installing content SinglePlayer << _("Select in order, first the game, then the map.\n"); SinglePlayer << _("You'll need to add at least one bot to play, if the game ship it's own AI, it's highly recommended to use that since bots are not compatible with all games.\n"); SinglePlayer << _("You can drag both the bot and yourself(the sun icon) anywhere, map's default start positions will snap on.\n"); SinglePlayer << _("You can change alliances (same number equals to allied players) and color by hovering the icon.\n"); SinglePlayer << _("Bonus number is a resource multiplier bonus, if the bot feels too weak, try increasing the number on the bot or add more of them, if it feels too strong, do on yourself.\n"); SinglePlayer << _("EVEN IF THE BOT DOESN'T APPEAR IN THE PLAYER LIST INGAME, HE'LL STILL BE THERE, EXPLORE THE WHOLE MAP TO FIND IT."); MultiPlayer << _("The lobby has an irc-like chat for talk and a battlelist\n"); MultiPlayer << _("You can get a list of available chat commands using /help\n"); MultiPlayer << _("Asking questions such as \"Is anyone here\" or \"Can anyone help me\" is actually considered rude if you don't specify your problem.\n"); MultiPlayer << _("It's also highly recommended to avoid asking questions such as \"what is the best game\" since it's a very touchy subject for many players.\n"); MultiPlayer << _("In order to play online, you'll NEED the latest STABLE OFFICIAL RELEASE, older or newer or development versions won't work.\n\n\n"); MultiPlayer << _("Joining a battle:\n"); MultiPlayer << _("In order to join a battle, simply double click on it on the list, and the lobby will prompt you for downloading the necessary files.\n"); MultiPlayer << _("When you are in a battleroom, focus your attention to the middle bar on the the screen.\n"); MultiPlayer << _("When two or more players have the same team number, they will share controls (also referred as comshare or coop).\n"); MultiPlayer << _("When two or more players have the same ally number, they will be allied together.\n"); MultiPlayer << _("The host has possibility to override your values anytime with the exception of spectator.\n"); MultiPlayer << _("If you are not a spectator, you will have to press the ready button once you're ready to play."); MultiPlayer << _("The unsynced status (the ! status icon) appears when you lack the map or the game, or they are corrupted, you might need a list refresh to update them (tools->reload map/game list).\n"); MultiPlayer << _("If you are insecure about the gameplay of a game, it's suggested that you activate the spectator button at first, so you'll be able to observe other players to learn.\n"); MultiPlayer << _("The game will start when the host decides so, just sit down and wait (don't forget to press ready).\n"); MultiPlayer << _("Some hosts are automatically controlled (autohosts), they can be controlled trough a list of chat commands ( for the list, send !help in the chat).\n\n\n"); MultiPlayer << _("Hosting a battle:\n"); MultiPlayer << _("Almost the totality of the options in the hosting dialog cannot be changed without reopening the battle (sorry this won't change' in the foreseeable future).\n"); MultiPlayer << _("You'll need to open the port indicated in the hosting dialog (default: 8452), type: UDP in your firewall/router in order to let other players to join your game.\n"); MultiPlayer << _("Alternatively, you can enable the option \"Hole punching\"(not recommended) which uses a small hack to bypass the firewall, but it might not work for all the firewalls/routers, and it might not work for all the clients.\n"); MultiPlayer << _("More recommended instead, is to use the option \"Use Relayhost\", which will spawn a bot that your lobby will control, the bot will host for you instead.\n"); // online play GraphicProblems << _("Most of the graphic-related problems come from old or bad video drivers.\n"); GraphicProblems << _("Before considering \"But XYZ game works fine!\", remember that most games on Windows uses DirectX, while Spring uses OpenGL, also the OpenGL spec is rather large, and certain bugs appear only with very specific conditions.\n"); GraphicProblems << _("That being said, the first thing you should do open the Spring settings editor, and lower the graphic detail, some video cards don't work well with some advanced options.\n"); GraphicProblems << _("If the problem persists, try to update your video drivers to the latest version (as weird as it may sound, ATI users might actually want to try older versions too, see the forums for an explanation).\n"); GraphicProblems << _("If your map/gameels are white or generally untextured, and you're using Linux, there's a solution at http://springrts.com/phpbb/viewtopic.php?f=20&t=20809.\n\n"); GraphicProblems << _("If you're using an integrated card, chances are you're simply unable to run smoothly Spring, because of the high requirements which those chips can't provide.\n\n"); GraphicProblems << _("For further help, visit the help section of the forums at http://springrts.com ."); // graphic problems UsefulLinks << _("Main website: http://springrts.com\n"); UsefulLinks << _("Lobby website: http://springlobby.info\n"); UsefulLinks << _("Games page: http://springrts.com/wiki/Games\n"); UsefulLinks << _("General info website: http://springinfo.info\n"); UsefulLinks << _("Wiki: http://springrts.com/wiki\n"); UsefulLinks << _("Frequently Asked Questions: http://springrts.com/wiki/FAQ\n"); UsefulLinks << _("Development infos: http://springrts.com/wiki/Engine_Development\n"); // guides and links wxBoxSizer* MainSizer = new wxBoxSizer(wxVERTICAL); wxFlexGridSizer* ButtonSizer = new wxFlexGridSizer(3,2,2,2); wxBoxSizer* TextSizer = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer* HeaderSizer = new wxBoxSizer(wxHORIZONTAL); wxStaticText* Heading = new wxStaticText( this, -1, _("Introduction to Spring and Frequently Asked Questions\nIt's HIGHLY recommended you read this through completely.\nClick on a button to view the topic."), wxDefaultPosition, wxDefaultSize, wxALIGN_CENTRE ); Heading->SetForegroundColour(wxColour(20,0,200)); wxFont tempfont = Heading->GetFont(); tempfont.SetPointSize(14); Heading->SetFont(tempfont); HeaderSizer->Add(Heading,1,wxALIGN_CENTER_HORIZONTAL | wxEXPAND ); SpringDescription = new ButtonType( this, SPRING_DESC, _( "Spring overview" ) ); InstallingContent = new ButtonType( this, INSTALL_DESC, _( "Installing content" ) ); SingleDescription = new ButtonType( this, SINGLE_DESC, _( "Singleplayer gamee" ) ); MultiDescription = new ButtonType( this, MULTI_DESC, _( "Multiplayer gamee" ) ); GraphicTroubles = new ButtonType( this, GRAPHIC_TROUB, _( "Graphic and performance problems" ) ); WikiLinks = new ButtonType( this, HELP_LINKS, _( "Useful links" ) ); ButtonSizer->Add(SpringDescription,0,wxEXPAND|wxRIGHT); ButtonSizer->Add(InstallingContent,0,wxEXPAND|wxRIGHT); ButtonSizer->Add(SingleDescription,0,wxEXPAND|wxRIGHT); ButtonSizer->Add(MultiDescription,0,wxEXPAND|wxRIGHT); ButtonSizer->Add(GraphicTroubles,0,wxEXPAND|wxRIGHT); ButtonSizer->Add(WikiLinks,0,wxEXPAND|wxRIGHT); m_text_stuff = new wxTextCtrl( this, TEXT_DISPLAY, _T( "" ), wxDefaultPosition, wxSize(-1,-1), wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH | wxTE_AUTO_URL ); TextSizer->Add(m_text_stuff,4,wxALIGN_CENTER| wxEXPAND|wxTOP,2); MainSizer->Add(HeaderSizer, 0, wxALIGN_CENTRE| wxALL, 5 ); MainSizer->Add(ButtonSizer, 0, wxALIGN_CENTRE| wxALL, 5 ); MainSizer->Add(TextSizer, 4, wxALIGN_CENTRE| wxEXPAND| wxALL, 5 ); SpringDescription->SetValue(true); // default activate spring help text m_text_stuff->SetValue(SpringOverview); SetSizer(MainSizer); Layout(); Refresh(); } void IntroGuide::OnLinkEvent( wxTextUrlEvent& event ) { if ( !event.GetMouseEvent().LeftDown() ) return; wxString url = m_text_stuff->GetRange( event.GetURLStart(), event.GetURLEnd()); OpenWebBrowser( url ); } void IntroGuide::OnSpringDesc(wxCommandEvent& /*unused*/) { SpringDescription->SetValue(true); InstallingContent->SetValue(false); SingleDescription->SetValue(false); MultiDescription->SetValue(false); GraphicTroubles->SetValue(false); WikiLinks->SetValue(false); m_text_stuff->SetValue(SpringOverview); } void IntroGuide::OnInstallDesc(wxCommandEvent& /*unused*/) { SpringDescription->SetValue(false); InstallingContent->SetValue(true); SingleDescription->SetValue(false); MultiDescription->SetValue(false); GraphicTroubles->SetValue(false); WikiLinks->SetValue(false); m_text_stuff->SetValue(InstallOverview); } void IntroGuide::OnSingleDesc(wxCommandEvent& /*unused*/) { SpringDescription->SetValue(false); InstallingContent->SetValue(false); SingleDescription->SetValue(true); MultiDescription->SetValue(false); GraphicTroubles->SetValue(false); WikiLinks->SetValue(false); m_text_stuff->SetValue(SinglePlayer); } void IntroGuide::OnMultiDesc(wxCommandEvent& /*unused*/) { SpringDescription->SetValue(false); InstallingContent->SetValue(false); SingleDescription->SetValue(false); MultiDescription->SetValue(true); GraphicTroubles->SetValue(false); WikiLinks->SetValue(false); m_text_stuff->SetValue(MultiPlayer); } void IntroGuide::OnGraphicTroubles(wxCommandEvent& /*unused*/) { SpringDescription->SetValue(false); InstallingContent->SetValue(false); SingleDescription->SetValue(false); MultiDescription->SetValue(false); GraphicTroubles->SetValue(true); WikiLinks->SetValue(false); m_text_stuff->SetValue(GraphicProblems); } void IntroGuide::OnWikiLinks(wxCommandEvent& /*unused*/) { SpringDescription->SetValue(false); InstallingContent->SetValue(false); SingleDescription->SetValue(false); MultiDescription->SetValue(false); GraphicTroubles->SetValue(false); WikiLinks->SetValue(true); m_text_stuff->SetValue(UsefulLinks); } springlobby-0.169/src/introguide.h0000600000176000000410000000231712105760300020533 0ustar buildbotwww-data00000000000000#ifndef INTROGUIDE_H #define INTROGUIDE_H #include #include class wxTextCtrl; class wxToggleButton; class wxCheckBox; class wxTextUrlEvent; class wxCommandEvent; class IntroGuide : public wxFrame { public: IntroGuide(); void OnSpringDesc( wxCommandEvent& event ); void OnInstallDesc( wxCommandEvent& event ); void OnSingleDesc( wxCommandEvent& event ); void OnMultiDesc( wxCommandEvent& event ); void OnGraphicTroubles( wxCommandEvent& event ); void OnWikiLinks( wxCommandEvent& event ); void OnLinkEvent( wxTextUrlEvent& event ); private: wxString SpringOverview; wxString InstallOverview; wxString SinglePlayer; wxString MultiPlayer; wxString GraphicProblems; wxString UsefulLinks; wxTextCtrl* m_text_stuff; #if wxUSE_TOGGLEBTN typedef wxToggleButton ButtonType; #else typedef wxCheckBox ButtonType; #endif ButtonType* SpringDescription; ButtonType* InstallingContent; ButtonType* SingleDescription; ButtonType* MultiDescription; ButtonType* GraphicTroubles; ButtonType* WikiLinks; enum { TEXT_DISPLAY = wxID_HIGHEST, SPRING_DESC, MULTI_DESC, SINGLE_DESC, INSTALL_DESC, GRAPHIC_TROUB, HELP_LINKS }; DECLARE_EVENT_TABLE() }; #endif // INTROGUIDE_H springlobby-0.169/src/iserverevents.cpp0000600000176000000410000000054212105760300021617 0ustar buildbotwww-data00000000000000#include "iserverevents.h" #include "serverevents.h" #include "qt/simpleserverevents.h" IServerEvents* IServerEvents::getInstance( Server& server, ServerEventsMode mode ) { switch (mode) { default: return new ServerEvents( server ); #ifdef SL_QT_MODE case IServerEvents::simple: return new SimpleServerEvents( server ); #endif //SL_QT_MODE } } springlobby-0.169/src/iserverevents.h0000600000176000000410000001575112105760300021274 0ustar buildbotwww-data00000000000000#ifndef ISERVEREVENTS_H #define ISERVEREVENTS_H //almost only needed for NAtType enum def #include "battle.h" struct MessageSpamCheck { time_t lastmessage; unsigned int count; }; class Server; class wxString; struct UserStatus; // FIXME this is defined elsewhere, should use a different kind of type so we could use forward decl typedef int Sockerror; typedef int Protocolerror; #ifdef SL_QT_MODE #include class IServerEvents : public QObject { Q_OBJECT signals: void saidBattle( int battleid, const QString& nick, const QString& msg ); #else class IServerEvents { #endif public: IServerEvents( ) {} virtual ~IServerEvents() {} enum ServerEventsMode { normal = 0, simple = 1 }; static IServerEvents* getInstance( Server& server, ServerEventsMode mode = normal ); // Uicontrol interface virtual void OnConnected( const wxString& server_name, const wxString& server_ver, bool supported, const wxString& server_spring_ver, bool lanmode ) = 0; virtual void OnDisconnected( bool wasonline ) = 0; virtual void OnLogin() = 0; virtual void OnLoginInfoComplete() = 0; virtual void OnLogout() = 0; virtual void OnUnknownCommand( const wxString& command, const wxString& params ) = 0; virtual void OnSocketError( const Sockerror& error ) = 0; virtual void OnProtocolError( const Protocolerror error ) = 0; virtual void OnMotd( const wxString& msg ) = 0; virtual void OnPong( wxLongLong ping_time ) = 0; virtual void OnNewUser( const wxString& nick, const wxString& conutry, int cpu, const wxString& id ) = 0; virtual void OnUserStatus( const wxString& nick, UserStatus status ) = 0; virtual void OnUserQuit( const wxString& nick ) = 0; virtual void OnBattleOpened( int id, BattleType type, NatType nat, const wxString& nick, const wxString& host, int port, int maxplayers, bool haspass, int rank, const wxString& maphash, const wxString& map, const wxString& title, const wxString& mod ) = 0; virtual void OnUserJoinedBattle( int battleid, const wxString& nick, const wxString& userScriptPassword ) = 0; virtual void OnUserLeftBattle( int battleid, const wxString& nick ) = 0; virtual void OnBattleInfoUpdated( int battleid, int spectators, bool locked, const wxString& maphash, const wxString& map ) = 0; virtual void OnSetBattleInfo( int battleid, const wxString& param, const wxString& value ) = 0; virtual void OnBattleInfoUpdated( int battleid ) = 0; virtual void OnBattleClosed( int battleid ) = 0; virtual void OnJoinedBattle( int battleid, const wxString& hash ) = 0; virtual void OnHostedBattle( int battleid ) = 0; virtual void OnStartHostedBattle( int battleid ) = 0; virtual void OnClientBattleStatus( int battleid, const wxString& nick, UserBattleStatus status ) = 0; virtual void OnBattleStartRectAdd( int battleid, int allyno, int left, int top, int right, int bottom ) = 0; virtual void OnBattleStartRectRemove( int battleid, int allyno ) = 0; virtual void OnBattleAddBot( int battleid, const wxString& nick, UserBattleStatus status ) = 0; virtual void OnBattleUpdateBot( int battleid, const wxString& nick, UserBattleStatus status ) = 0; virtual void OnBattleRemoveBot( int battleid, const wxString& nick ) = 0; virtual void OnBattleDisableUnit( int battleid, const wxString& unitname, int count = 0 ) = 0; virtual void OnBattleEnableUnit( int battleid, const wxString& unitname ) = 0; virtual void OnBattleEnableAllUnits( int battleid ) = 0; virtual void OnJoinChannelResult( bool success, const wxString& channel, const wxString& reason ) = 0; virtual void OnChannelSaid( const wxString& channel, const wxString& who, const wxString& message ) = 0; virtual void OnChannelJoin( const wxString& channel, const wxString& who ) = 0; virtual void OnChannelPart( const wxString& channel, const wxString& who, const wxString& message ) = 0; virtual void OnChannelTopic( const wxString& channel, const wxString& who, const wxString& message, int when ) = 0; virtual void OnChannelAction( const wxString& channel, const wxString& who, const wxString& action ) = 0; virtual void OnChannelList( const wxString& channel, const int& numusers, const wxString& topic ) = 0; virtual void OnUserJoinChannel( const wxString& channel, const wxString& who ) = 0; virtual void OnPrivateMessage( const wxString& user, const wxString& message, bool fromme = false ) = 0; virtual void OnPrivateMessageEx( const wxString& user, const wxString& action, bool fromme = false ) = 0; virtual void OnRequestBattleStatus( int battleid ) = 0; virtual void OnSaidBattle( int battleid, const wxString& nick, const wxString& msg ) = 0; virtual void OnBattleAction( int battleid, const wxString& nick, const wxString& msg ) = 0; virtual void OnAcceptAgreement( const wxString& agreement ) = 0; virtual void OnRing( const wxString& from ) = 0; virtual void OnServerMessage( const wxString& message ) = 0; virtual void OnServerBroadcast( const wxString& message ) = 0; virtual void OnServerMessageBox( const wxString& message ) = 0; virtual void OnChannelMessage( const wxString& channel, const wxString& msg ) = 0; virtual void OnHostExternalUdpPort( const unsigned int udpport ) = 0; virtual void OnMyExternalUdpSourcePort( const unsigned int udpport ) = 0; virtual void OnMyInternalUdpSourcePort( const unsigned int udpport ) = 0; virtual void OnClientIPPort( const wxString &username, const wxString &ip, unsigned int udpport ) = 0; virtual void OnKickedFromBattle() = 0; virtual void OnRedirect( const wxString& address, unsigned int port, const wxString& CurrentNick, const wxString& CurrentPassword ) = 0; /// use this function to check spam from clients and autokick from the battle virtual void AutoCheckCommandSpam( Battle& battle, User& nick ) = 0; virtual void OnMutelistBegin( const wxString& channel ) = 0; virtual void OnMutelistItem( const wxString& channel, const wxString& mutee, const wxString& description ) = 0; virtual void OnMutelistEnd( const wxString& channel ) = 0; virtual void OnScriptStart( int battleid ) = 0; virtual void OnScriptLine( int battleid, const wxString& line ) = 0; virtual void OnScriptEnd( int battleid ) = 0; virtual void OnFileDownload( bool autolaunch, bool autoclose, bool disconnectonrefuse, const wxString& FileName, const wxString& url, const wxString& description ) = 0; virtual void OnSpringDownloadEvent( wxCommandEvent& event ) = 0; virtual void OnForceJoinBattle( int battleid, const wxString& line ) = 0; }; /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #endif // ISERVEREVENTS_H springlobby-0.169/src/license.template0000600000176000000410000000122612105760300021366 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ springlobby-0.169/src/mainchattab.cpp0000600000176000000410000002751112105760300021173 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: MainChatTab // #include #include #include #include #include #include #include #include "aui/auimanager.h" #include "mainchattab.h" #include "utils/debug.h" #include "utils/conversion.h" #include #include "utils/controls.h" #include "mainwindow.h" #include "channel/channel.h" #include "user.h" #include "chatpanel.h" #include "ui.h" #include "server.h" #include "settings.h" #include "aui/artprovider.h" #include "aui/slbook.h" #include "images/close.xpm" #include "images/server.xpm" #include "images/channel.xpm" #include "images/userchat.xpm" BEGIN_EVENT_TABLE( MainChatTab, wxPanel ) EVT_AUINOTEBOOK_PAGE_CHANGED ( CHAT_TABS, MainChatTab::OnTabsChanged ) EVT_AUINOTEBOOK_PAGE_CLOSE ( CHAT_TABS, MainChatTab::OnTabClose ) END_EVENT_TABLE() MainChatTab::MainChatTab( wxWindow* parent ) : wxScrolledWindow( parent, -1, wxDefaultPosition, wxDefaultSize, 0, wxPanelNameStr ) { GetAui().manager->AddPane( this, wxLEFT, _T( "mainchattab" ) ); m_newtab_sel = -1; m_server_chat = 0; m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_chat_tabs = new SLChatNotebook( this, CHAT_TABS, wxDefaultPosition, wxDefaultSize, wxAUI_NB_DEFAULT_STYLE | wxAUI_NB_TOP | wxAUI_NB_TAB_EXTERNAL_MOVE | wxAUI_NB_WINDOWLIST_BUTTON ); m_chat_tabs ->SetArtProvider( new SLArtProvider ); wxBitmap userchat ( userchat_xpm ); //*charArr2wxBitmap(userchat_png, sizeof(userchat_png) ); m_imagelist = new wxImageList( 12, 12 ); m_imagelist->Add( wxBitmap( close_xpm ) ); m_imagelist->Add( wxBitmap( server_xpm ) ); m_imagelist->Add( wxBitmap( channel_xpm ) ); m_imagelist->Add( wxBitmap( userchat_xpm ) ); m_imagelist->Add( wxBitmap ( ReplaceChannelStatusColour( wxBitmap( channel_xpm ), sett().GetChatColorJoinPart() ) ) ); m_imagelist->Add( wxBitmap ( ReplaceChannelStatusColour( wxBitmap( userchat_xpm ), sett().GetChatColorJoinPart() ) ) ); m_imagelist->Add( wxBitmap ( ReplaceChannelStatusColour( wxBitmap( channel_xpm ), sett().GetChatColorMine() ) ) ); m_imagelist->Add( wxBitmap ( ReplaceChannelStatusColour( wxBitmap( userchat_xpm ), sett().GetChatColorMine() ) ) ); m_imagelist->Add( wxBitmap ( ReplaceChannelStatusColour( wxBitmap( channel_xpm ), sett().GetChatColorHighlight() ) ) ); m_imagelist->Add( wxBitmap ( ReplaceChannelStatusColour( wxBitmap( userchat_xpm ), sett().GetChatColorHighlight() ) ) ); m_imagelist->Add( wxBitmap ( ReplaceChannelStatusColour( wxBitmap( server_xpm ), sett().GetChatColorError() ) ) ); m_main_sizer->Add( m_chat_tabs, 1, wxEXPAND ); SetSizer( m_main_sizer ); m_main_sizer->SetSizeHints( this ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); Layout(); } MainChatTab::~MainChatTab() { } ChatPanel& MainChatTab::ServerChat() { ASSERT_LOGIC( m_server_chat != 0, _T( "m_server_chat = 0" ) ); return *m_server_chat; } ChatPanel* MainChatTab::GetActiveChatPanel() { int selection = m_chat_tabs->GetSelection(); if ( selection < 0 ) return NULL; else return static_cast< ChatPanel* >( m_chat_tabs->GetPage( selection ) ); } ChatPanel* MainChatTab::GetChannelChatPanel( const wxString& channel ) { for ( unsigned int i = 0; i < m_chat_tabs->GetPageCount(); i++ ) { ChatPanel* tmp = ( ChatPanel* )m_chat_tabs->GetPage( i ); if ( tmp->GetPanelType() == CPT_Channel ) { wxString name = m_chat_tabs->GetPageText( i ); if ( name.Lower() == channel.Lower() ) return ( ChatPanel* )m_chat_tabs->GetPage( i ); } } return 0; } void MainChatTab::UpdateNicklistHighlights() { for ( unsigned int i = 0; i < m_chat_tabs->GetPageCount(); i++ ) { ChatPanel* tmp = ( ChatPanel* )m_chat_tabs->GetPage( i ); if ( tmp->GetPanelType() == CPT_Channel ) { tmp->UpdateNicklistHighlights(); } } if ( m_server_chat != 0 ) { m_server_chat->UpdateNicklistHighlights(); } } ChatPanel* MainChatTab::GetUserChatPanel( const wxString& user ) { for ( unsigned int i = 0; i < m_chat_tabs->GetPageCount(); i++ ) { ChatPanel* tmp = ( ChatPanel* )m_chat_tabs->GetPage( i ); if ( tmp->GetPanelType() == CPT_User ) { wxString name = m_chat_tabs->GetPageText( i ); if ( name.Lower() == user.Lower() ) return ( ChatPanel* )m_chat_tabs->GetPage( i ); } } return 0; } void MainChatTab::OnUserConnected( User& user ) { ChatPanel* panel = GetUserChatPanel( user.GetNick() ); if ( panel != 0 ) { panel->SetUser( &user ); panel->OnUserConnected(); //TODO enable send button (koshi) } if ( m_server_chat != 0 ) { m_server_chat->OnChannelJoin( user ); } } void MainChatTab::OnUserDisconnected( User& user ) { ChatPanel* panel = GetUserChatPanel( user.GetNick() ); if ( panel != 0 ) { panel->OnUserDisconnected(); panel->SetUser( 0 ); //TODO disable send button (koshi) } if ( m_server_chat != 0 ) { m_server_chat->Parted( user, _T("") ); } } void MainChatTab::LeaveChannels() { for ( unsigned int i = 0; i < m_chat_tabs->GetPageCount(); i++ ) { ChatPanel* tmp = ( ChatPanel* )m_chat_tabs->GetPage( i ); if ( tmp->GetPanelType() == CPT_Channel ) { tmp->StatusMessage( _( "Disconnected from server, chat closed." ) ); tmp->SetChannel( 0 ); } else if ( tmp->GetPanelType() == CPT_User ) { tmp->StatusMessage( _( "Disconnected from server, chat closed." ) ); tmp->SetUser( 0 ); } } } void MainChatTab::RejoinChannels() { for ( unsigned int i = 0; i < m_chat_tabs->GetPageCount(); i++ ) { ChatPanel* tmp = ( ChatPanel* )m_chat_tabs->GetPage( i ); if ( tmp->GetPanelType() == CPT_Channel ) { // TODO: This will not rejoin passworded channels. wxString name = m_chat_tabs->GetPageText( i ); bool alreadyin = false; try { serverSelector().GetServer().GetChannel( name ).GetMe(); alreadyin = true; } catch ( ... ) {} if ( !alreadyin ) { serverSelector().GetServer().JoinChannel( name, _T( "" ) ); tmp->SetChannel( &serverSelector().GetServer().GetChannel( name ) ); } } else if ( tmp->GetPanelType() == CPT_User ) { wxString name = m_chat_tabs->GetPageText( i ); if ( serverSelector().GetServer().UserExists( name ) ) tmp->SetUser( &serverSelector().GetServer().GetUser( name ) ); } } } ChatPanel* MainChatTab::AddChatPanel( Channel& channel, bool doFocus ) { for ( unsigned int i = 0; i < m_chat_tabs->GetPageCount(); i++ ) { if ( m_chat_tabs->GetPageText( i ) == channel.GetName() ) { ChatPanel* tmp = ( ChatPanel* )m_chat_tabs->GetPage( i ); if ( tmp->GetPanelType() == CPT_Channel ) { if ( doFocus ) m_chat_tabs->SetSelection( i ); tmp->SetChannel( &channel ); return tmp; } } } ChatPanel* chat = new ChatPanel( m_chat_tabs, channel, m_imagelist ); m_chat_tabs->InsertPage( m_chat_tabs->GetPageCount() - 1, chat, channel.GetName(), doFocus, wxBitmap( channel_xpm ) ); if ( doFocus ) chat->FocusInputBox(); return chat; } ChatPanel* MainChatTab::AddChatPanel( Server& server, const wxString& name ) { for ( unsigned int i = 0; i < m_chat_tabs->GetPageCount(); i++ ) { //if ( m_chat_tabs->GetPageText( i ) == name ) { if ( true ) { // wipe all old server tabs ChatPanel* tmp = ( ChatPanel* )m_chat_tabs->GetPage( i ); if ( tmp->GetPanelType() == CPT_Server ) { m_chat_tabs->DeletePage( i ); i--; } } } ChatPanel* chat = new ChatPanel( m_chat_tabs, server, m_imagelist ); m_server_chat = chat; m_chat_tabs->InsertPage( m_chat_tabs->GetPageCount() - 1, chat, name, true, wxBitmap( server_xpm ) ); return chat; } ChatPanel* MainChatTab::AddChatPanel( const User& user ) { for ( unsigned int i = 0; i < m_chat_tabs->GetPageCount(); i++ ) { if ( m_chat_tabs->GetPageText( i ) == user.GetNick() ) { ChatPanel* tmp = ( ChatPanel* )m_chat_tabs->GetPage( i ); if ( tmp->GetPanelType() == CPT_User ) { m_chat_tabs->SetSelection( i ); tmp->SetUser( &user ); return tmp; } } } int selection = m_chat_tabs->GetSelection(); ChatPanel* chat = new ChatPanel( m_chat_tabs, user, m_imagelist ); m_chat_tabs->InsertPage( m_chat_tabs->GetPageCount() - 1, chat, user.GetNick(), true, wxBitmap( userchat_xpm ) ); if ( selection > 0 ) m_chat_tabs->SetSelection( selection ); return chat; } void MainChatTab::BroadcastMessage( const wxString& message ) { // spam the message in all channels for ( unsigned int i = 0; i < m_chat_tabs->GetPageCount(); i++ ) { ChatPanel* tmp = ( ChatPanel* )m_chat_tabs->GetPage( i ); tmp->StatusMessage( message ); } } ChatPanel* MainChatTab::GetCurrentPanel() { int sel = m_chat_tabs->GetSelection(); if ( sel < 0 ) return 0; return ( ChatPanel* )m_chat_tabs->GetPage( sel ); } void MainChatTab::OnTabClose( wxAuiNotebookEvent& event ) { int selection = event.GetSelection(); ChatPanel* panel = ( ChatPanel* )m_chat_tabs->GetPage( selection ); if ( panel ) { panel->Part(); if( panel->IsServerPanel() ) m_server_chat = 0; } } void MainChatTab::OnTabsChanged( wxAuiNotebookEvent& event ) { wxLogDebugFunc( _T( "" ) ); int oldsel = event.GetOldSelection(); if ( oldsel < 0 ) return; int newsel = event.GetSelection(); if ( newsel < 0 ) return; // change icon to default the icon to show that no new events happened size_t ImageIndex = ( ( ChatPanel* )m_chat_tabs->GetPage( newsel ) )->GetIconIndex(); if ( ImageIndex == 4 || ImageIndex == 6 || ImageIndex == 8 ) { GetActiveChatPanel()->SetIconIndex( 2 ); m_chat_tabs->SetPageBitmap( newsel, wxBitmap( channel_xpm ) ); } else if ( ImageIndex == 5 || ImageIndex == 7 || ImageIndex == 9 ) { GetActiveChatPanel()->SetIconIndex( 3 ); m_chat_tabs->SetPageBitmap( newsel, wxBitmap( userchat_xpm ) ); } else if ( ImageIndex == 10 ) { GetActiveChatPanel()->SetIconIndex( 1 ); m_chat_tabs->SetPageBitmap( newsel, wxBitmap( server_xpm ) ); } wxWindow* newpage = m_chat_tabs->GetPage( newsel ); if ( newpage == 0 ) { // Not sure what to do here wxLogError( _T( "Newpage NULL." ) ); return; } GetActiveChatPanel()->FocusInputBox(); } wxImage MainChatTab::ReplaceChannelStatusColour( wxBitmap img, const wxColour& colour ) { wxImage ret = img.ConvertToImage(); wxImage::HSVValue origcolour = wxImage::RGBtoHSV( wxImage::RGBValue( colour.Red(), colour.Green(), colour.Blue() ) ); double bright = origcolour.value - 0.1 * origcolour.value; bright = LSL::Util::Clamp( bright, 0.0, 1.0 ); wxImage::HSVValue hsvdarker1( origcolour.hue, origcolour.saturation, bright ); bright = origcolour.value - 0.5 * origcolour.value; bright = LSL::Util::Clamp( bright, 0.0, 1.0 ); wxImage::HSVValue hsvdarker2( origcolour.hue, origcolour.saturation, bright ); wxImage::RGBValue rgbdarker1 = wxImage::HSVtoRGB( hsvdarker1 ); wxImage::RGBValue rgbdarker2 = wxImage::HSVtoRGB( hsvdarker2 ); ret.Replace( 164, 147, 0, rgbdarker2.red, rgbdarker2.green, rgbdarker2.blue ); ret.Replace( 255, 228, 0, rgbdarker1.red, rgbdarker1.green, rgbdarker1.blue ); ret.Replace( 255, 253, 234, colour.Red(), colour.Green(), colour.Blue() ); ret.Replace( 255, 228, 0, rgbdarker1.red, rgbdarker1.green, rgbdarker1.blue ); // server icon ret.Replace( 211, 211, 211, rgbdarker2.red, rgbdarker2.green, rgbdarker2.blue ); ret.Replace( 249, 249, 249, rgbdarker1.red, rgbdarker1.green, rgbdarker1.blue ); ret.Replace( 0, 180, 255, colour.Red(), colour.Green(), colour.Blue() ); return ret; } bool MainChatTab::RemoveChatPanel( ChatPanel* panel ) { for ( unsigned int i = 0; i < m_chat_tabs->GetPageCount(); i++ ) { ChatPanel* tmp = ( ChatPanel* )m_chat_tabs->GetPage( i ); if ( tmp == panel && panel != 0 ) { m_chat_tabs->DeletePage( i ); return true; } } return false; } void MainChatTab::LoadPerspective( const wxString& perspective_name ) { LoadNotebookPerspective( m_chat_tabs, perspective_name ); } void MainChatTab::SavePerspective( const wxString& perspective_name ) { SaveNotebookPerspective( m_chat_tabs, perspective_name ); } void MainChatTab::AdvanceSelection( bool forward ) { m_chat_tabs->AdvanceSelection( forward ); } springlobby-0.169/src/mainchattab.h0000600000176000000410000000521712105760300020637 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_MAINCHATTAB_H #define SPRINGLOBBY_HEADERGUARD_MAINCHATTAB_H #include class Ui; class ChatPanel; class Server; class Channel; class User; class wxAuiNotebookEvent; class SLChatNotebook; class wxBoxSizer; class wxImageList; class wxString; //! @brief The main chat tab. class MainChatTab : public wxScrolledWindow { public: MainChatTab( wxWindow* parent ); ~MainChatTab(); ChatPanel* GetActiveChatPanel(); ChatPanel* GetChannelChatPanel( const wxString& channel ); ChatPanel* GetUserChatPanel( const wxString& user ); ChatPanel& ServerChat(); ChatPanel* AddChatPanel( Channel& channel, bool doFocus ); ChatPanel* AddChatPanel( Server& server, const wxString& name ); ChatPanel* AddChatPanel( const User& user ); /** \brief this is only used if channel is left via raw command in server tab */ bool RemoveChatPanel( ChatPanel* panel ); void RejoinChannels(); void LeaveChannels(); void OnTabsChanged( wxAuiNotebookEvent& event ); void OnTabClose( wxAuiNotebookEvent& event ); void OnUserConnected( User& user ); void OnUserDisconnected( User& user ); void BroadcastMessage( const wxString& message ); ChatPanel* GetCurrentPanel(); void ChangeUnreadChannelColour( const wxColour& colour ); void ChangeUnreadPMColour( const wxColour& colour ); void UpdateNicklistHighlights(); wxImage ReplaceChannelStatusColour( wxBitmap img, const wxColour& colour ); void LoadPerspective( const wxString& perspective_name = wxEmptyString ); void SavePerspective( const wxString& perspective_name = wxEmptyString ); void AdvanceSelection( bool forward ); protected: wxWindow* m_close_window; SLChatNotebook* m_chat_tabs; wxBoxSizer* m_main_sizer; wxImageList* m_imagelist; ChatPanel* m_server_chat; ChatPanel* m_main_chat; int m_newtab_sel; enum { CHAT_TABS = wxID_HIGHEST }; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_MAINCHATTAB_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/maindownloadtab.cpp0000600000176000000410000001107312105760300022057 0ustar buildbotwww-data00000000000000#ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include "maindownloadtab.h" #include #include #include #include #include #include "downloader/downloadlistctrl.h" #include "utils/conversion.h" #include "utils/controls.h" #include "Helper/colorbutton.h" //#include "downloader/filelister/filelistdialog.h" #include "downloader/prdownloader.h" #include "widgets/downloaddialog.h" #include "aui/auimanager.h" BEGIN_EVENT_TABLE( MainDownloadTab, wxPanel ) //(*EventTable(MainTorrentTab) //*) EVT_BUTTON ( ID_BUTTON_CANCEL, MainDownloadTab::OnCancelButton ) EVT_BUTTON ( ID_BUTTON_CLEAR, MainDownloadTab::OnClearFinished ) // EVT_BUTTON ( ID_DOWNLOAD_DIALOG, MainDownloadTab::OnDownloadDialog ) EVT_BUTTON ( ID_BUTTON_WIDGETS, MainDownloadTab::OnDLWidgets ) END_EVENT_TABLE() MainDownloadTab::MainDownloadTab( wxWindow* parent ) : wxScrolledWindow( parent ), m_incoming(NULL), m_widgets_dialog( NULL ) { GetAui().manager->AddPane( this, wxLEFT, _T( "maintorrenttab" ) ); m_mainbox = new wxBoxSizer ( wxVERTICAL ); wxBoxSizer* m_listbox = new wxBoxSizer ( wxVERTICAL ); wxBoxSizer* m_totalbox = new wxBoxSizer ( wxHORIZONTAL ); wxBoxSizer* m_buttonbox = new wxBoxSizer ( wxHORIZONTAL ); wxBoxSizer* m_status_box = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* m_firstrow_box = new wxBoxSizer( wxHORIZONTAL ); wxStaticText* m_list_lbl = new wxStaticText( this, ID_OUTGOING_LBL, _( "Transfers in progress: " ) ); m_listbox->Add( m_list_lbl, 0, wxALL, 5 ); m_dl_listctrl = new DownloadListCtrl( this ); m_listbox->Add( m_dl_listctrl, 2, wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL, 5 ); m_mainbox->Add( m_listbox, 2, wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL, 0 ); wxStaticText* t = new wxStaticText( this, wxID_ANY, _( "Download statistics/control currently not available." ), wxDefaultPosition, wxDefaultSize, 0 ); m_mainbox->Add( t, 1, wxALL | wxEXPAND | wxALIGN_CENTER, 15 ); m_incoming_lbl = new wxStaticText( this, ID_INCOMING_LBL, _( "Total Incoming: " ) ); m_totalbox->Add( m_incoming_lbl, 1, wxALL | wxALIGN_CENTER_HORIZONTAL, 10 ); m_firstrow_box->Add( m_totalbox, 0, wxALL, 5 ); m_status_color = new ColorButton( this, wxID_ANY, wxBitmap(), wxDefaultPosition, wxSize( 20, 20 ), 0 ); m_status_color_text = new wxStaticText( this, wxID_ANY, _( "unknown" ) ); m_status_box->Add( m_status_color , 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, 10 ); m_status_box->Add( m_status_color_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 10 ); m_firstrow_box->Add( m_status_box, 1, wxALL, 5 ); m_mainbox->Add( m_firstrow_box, 0, wxALL, 5 ); m_but_cancel = new wxButton( this, ID_BUTTON_CANCEL, _( "Cancel Download" ) ); //m_but_cancel->Disable(); m_buttonbox->Add( m_but_cancel, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_BOTTOM, 5 ); m_but_clear = new wxButton( this, ID_BUTTON_CLEAR, _( "Clear finished" ) ); m_buttonbox->Add( m_but_clear, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_BOTTOM, 5 ); // m_but_download = new wxButton( this, ID_DOWNLOAD_DIALOG, _( "Search file" ) ); // m_buttonbox->Add( m_but_download, 1, wxALL | wxALIGN_CENTER_HORIZONTAL | wxALIGN_BOTTOM, 5 ); // m_but_widgets = new wxButton( this, ID_BUTTON_WIDGETS, _( "Download Lua widgets" ) ); // m_buttonbox->Add( m_but_widgets, 1, wxALL | wxALIGN_RIGHT | wxALIGN_BOTTOM, 5 ); m_mainbox->Add( m_buttonbox, 0, wxALL, 5 ); SetSizer( m_mainbox ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); // info_map = torrent().CollectGuiInfos(); // m_dl_listctrl->Layout(); // for ( map_infos_iter iter = info_map.begin(); iter != info_map.end(); ++iter ) // { // if (iter->first == wxString(_T("global"))) // continue; // m_dl_listctrl->AddTorrentInfo( iter->second ); // } Layout(); Disable(); } MainDownloadTab::~MainDownloadTab() {} void MainDownloadTab::OnClearFinished( wxCommandEvent& /*event*/ ) { prDownloader().ClearFinished(); m_dl_listctrl->Clear(); } void MainDownloadTab::OnUpdate() { } void MainDownloadTab::OnCancelButton( wxCommandEvent& /*unused*/ ) { } void MainDownloadTab::OnDownloadDialog( wxCommandEvent& /*unused*/ ) {} void MainDownloadTab::OnDLWidgets( wxCommandEvent& /*unused*/ ) { if ( m_widgets_dialog && m_widgets_dialog->IsShown() ) { m_widgets_dialog->SetFocus(); } else { m_widgets_dialog = new WidgetDownloadDialog( this, wxID_ANY, _( "Lua widget downloader" ) ); m_widgets_dialog->Show( true ); } } springlobby-0.169/src/maindownloadtab.h0000600000176000000410000000407612105760300021531 0ustar buildbotwww-data00000000000000#ifndef MAINTORRENTTAB_H #define MAINTORRENTTAB_H #include #include class wxStaticText; class wxButton; class DownloadListCtrl; class Ui; struct DownloadInfo; class wxBoxSizer; class ColorButton; class WidgetDownloadDialog; typedef std::map map_infos; typedef map_infos::iterator map_infos_iter; class MainDownloadTab: public wxScrolledWindow { public: MainDownloadTab( wxWindow* parent ); ~MainDownloadTab(); void OnUpdate(); protected: enum { ID_LIST = wxID_HIGHEST, ID_BUTTON_CANCEL, ID_OUTGOING, ID_INCOMING, ID_OUTGOING_LBL, ID_INCOMING_LBL, ID_DOWNLOAD_DIALOG, ID_BUTTON_CLEAR, ID_BUTTON_WIDGETS }; wxStaticText* m_incoming; wxStaticText* m_incoming_lbl; wxStaticText* m_status_color_text; wxButton* m_but_cancel; wxButton* m_but_clear; //wxButton* m_but_download; ColorButton* m_status_color; DownloadListCtrl* m_dl_listctrl; WidgetDownloadDialog* m_widgets_dialog; map_infos info_map; void OnCancelButton( wxCommandEvent& event ); void OnDownloadDialog( wxCommandEvent& event ); void OnDLWidgets( wxCommandEvent& event ); void OnClearFinished( wxCommandEvent& event ); wxBoxSizer* m_mainbox; private: //(*Handlers(MainTorrentTab) //*) DECLARE_EVENT_TABLE() }; #endif /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/mainwindow.cpp0000600000176000000410000005644312105760300021102 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ // // Class: MainWindow // #ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "aui/auimanager.h" #include "aui/slbook.h" #include "aui/artprovider.h" #include "gui/statusbar.h" #include "springlobbyapp.h" #include "mainwindow.h" #include "settings.h" #include "ui.h" #include "introguide.h" #include "server.h" #include "utils/debug.h" #include "utils/platform.h" #include "battlelist/battlelisttab.h" #include "mainchattab.h" #include "hosting/mainjoinbattletab.h" #include "hosting/mainsingleplayertab.h" #include "battlelist/battlelisttab.h" #include "options/mainoptionstab.h" #include "springunitsync.h" #include "uiutils.h" #include "utils/misc.h" #include "chatpanel.h" #include "playback/playbacktraits.h" #include "playback/playbacktab.h" #include "infodialog.h" #include "maindownloadtab.h" #include "user.h" #include "mapselectdialog.h" #include "images/chat_icon.png.h" #include "images/join_icon.png.h" #include "images/single_player_icon.png.h" #include "images/options_icon.png.h" #include "images/downloads_icon.png.h" #include "images/replay_icon.png.h" #include "images/broom_tab_icon.png.h" #include "images/floppy_icon.png.h" #include "springsettings/frame.h" #include "utils/customdialogs.h" #include "utils/platform.h" #include "updater/updatehelper.h" #include "channel/autojoinchanneldialog.h" #include "channel/channelchooserdialog.h" #include "Helper/imageviewer.h" #include "customizations.h" #if defined(__WXMSW__) #include #include #endif #include BEGIN_EVENT_TABLE(MainWindow, wxFrame) EVT_MENU( MENU_JOIN, MainWindow::OnMenuJoin ) EVT_MENU( MENU_CHAT, MainWindow::OnMenuChat ) EVT_MENU( MENU_CONNECT, MainWindow::OnMenuConnect ) EVT_MENU( MENU_DISCONNECT, MainWindow::OnMenuDisconnect ) EVT_MENU( MENU_SAVE_OPTIONS, MainWindow::OnMenuSaveOptions ) EVT_MENU( MENU_QUIT, MainWindow::OnMenuQuit ) EVT_MENU( MENU_USYNC, MainWindow::OnUnitSyncReload ) EVT_MENU( MENU_TRAC, MainWindow::OnReportBug ) EVT_MENU( MENU_DOC, MainWindow::OnShowDocs ) EVT_MENU( MENU_SETTINGSPP, MainWindow::OnShowSettingsPP ) EVT_MENU( MENU_VERSION, MainWindow::OnMenuVersion ) EVT_MENU( MENU_ABOUT, MainWindow::OnMenuAbout ) EVT_MENU( MENU_PATHINFO, MainWindow::OnMenuPathInfo ) EVT_MENU( MENU_SAVE_LAYOUT, MainWindow::OnMenuSaveLayout ) EVT_MENU( MENU_LOAD_LAYOUT, MainWindow::OnMenuLoadLayout ) EVT_MENU( MENU_RESET_LAYOUT, MainWindow::OnMenuResetLayout ) // EVT_MENU( MENU_SHOW_TOOLTIPS, MainWindow::OnShowToolTips ) EVT_MENU( MENU_AUTOJOIN_CHANNELS, MainWindow::OnMenuAutojoinChannels ) EVT_MENU( MENU_SELECT_LOCALE, MainWindow::OnMenuSelectLocale ) EVT_MENU( MENU_CHANNELCHOOSER, MainWindow::OnShowChannelChooser ) EVT_MENU( MENU_SCREENSHOTS, MainWindow::OnShowScreenshots ) EVT_MENU( MENU_PREFERENCES, MainWindow::OnMenuPreferences ) EVT_MENU( MENU_RENAME, MainWindow::OnMenuRename ) EVT_MENU( MENU_GENERAL_HELP, MainWindow::OnMenuFirstStart ) EVT_MENU( MENU_SERVER_TAB, MainWindow::OnMenuServerTab ) EVT_SET_FOCUS( MainWindow::OnSetFocus ) EVT_KILL_FOCUS( MainWindow::OnKillFocus ) EVT_AUINOTEBOOK_PAGE_CHANGED( MAIN_TABS, MainWindow::OnTabsChanged ) EVT_CLOSE( MainWindow::OnClose ) END_EVENT_TABLE() MainWindow::TabNames MainWindow::m_tab_names; MainWindow::MainWindow( ) : wxFrame( (wxFrame*)0, -1, GetAppName(), wxPoint(50, 50) ), WindowAttributesPickle( _T("MAINWINDOW"), this, wxSize(720, 576) ), m_opts_dialog(NULL), m_autojoin_dialog(NULL), se_frame(NULL), m_channel_chooser(NULL), m_log_win(NULL), m_has_focus(true) { SetIcons( SLcustomizations().GetAppIconBundle() ); GetAui().manager = new AuiManagerContainer::ManagerType( this ); wxMenu *menuServer = new wxMenu; menuServer->Append(MENU_CONNECT, _("&Connect...")); menuServer->Append(MENU_DISCONNECT, _("&Disconnect")); menuServer->Append(MENU_SERVER_TAB, _("&Reopen server panel")); menuServer->AppendSeparator(); #ifndef NDEBUG //this is a prime spot to add experimental stuff, or stubs used to test things not really meant to be in mainwindow menuServer->Append(MENU_SAVE_OPTIONS, _("&Save options")); menuServer->AppendSeparator(); #endif menuServer->Append(MENU_QUIT, _("&Quit")); m_menuEdit = new wxMenu; m_menuEdit->Append(MENU_AUTOJOIN_CHANNELS, _("&Autojoin channels")); m_menuEdit->Append(MENU_PREFERENCES, _("&Preferences")); m_settings_menu = new wxMenuItem( m_menuEdit, MENU_SETTINGSPP, _("&Spring settings"), wxEmptyString, wxITEM_NORMAL ); m_menuEdit->Append (m_settings_menu); // loading layouts currently borked wxMenu* menuView = new wxMenu; menuView->Append( MENU_SAVE_LAYOUT, _("&Save layout") ); menuView->Append( MENU_LOAD_LAYOUT, _("&Load layout") ); menuView->Append( MENU_RESET_LAYOUT, _("&Reset layout") ); // menuView->Append( MENU_DEFAULT_LAYOUT, _("&Set &Layout as default") ); m_menuTools = new wxMenu; m_menuTools->Append(MENU_JOIN, _("&Join channel...")); m_menuTools->Append(MENU_CHANNELCHOOSER, _("Channel &list")); m_menuTools->Append(MENU_CHAT, _("Open private &chat...")); m_menuTools->Append(MENU_RENAME, _("Change &username")); m_menuTools->Append(MENU_SCREENSHOTS, _("&View screenshots")); m_menuTools->AppendSeparator(); m_menuTools->Append(MENU_USYNC, _("&Reload maps/games")); m_menuTools->AppendSeparator(); if (!sett().IsSelfUpdateDisabled() ) m_menuTools->Append(MENU_VERSION, _("Check for new Version")); wxMenu *menuHelp = new wxMenu; menuHelp->Append(MENU_GENERAL_HELP, _("&Help, tutorial and FAQ")); menuHelp->Append(MENU_ABOUT, _("&About")); menuHelp->Append(MENU_PATHINFO, _("&System Info")); menuHelp->Append(MENU_SELECT_LOCALE, _("&Change language")); menuHelp->Append(MENU_TRAC, _("&Report a bug...")); menuHelp->Append(MENU_DOC, _("&Documentation")); m_menubar = new wxMenuBar; m_menubar->Append(menuServer, _("&Server")); m_menubar->Append(m_menuEdit, _("&Edit")); m_menubar->Append(menuView, _("&View")); //layout stuff --> disabled m_menubar->Append(m_menuTools, _("&Tools")); m_menubar->Append(menuHelp, _("&Help")); SetMenuBar(m_menubar); m_main_sizer = new wxBoxSizer( wxHORIZONTAL ); m_func_tabs = new SLNotebook( this, _T("mainfunctabs"), MAIN_TABS, wxDefaultPosition, wxDefaultSize, wxAUI_NB_WINDOWLIST_BUTTON | wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_MOVE | wxAUI_NB_TAB_EXTERNAL_MOVE | wxAUI_NB_SCROLL_BUTTONS | wxAUI_NB_LEFT ); m_func_tabs->SetArtProvider(new SLArtProvider); //IMPORTANT: event handling needs to be disabled while constructing, otherwise deadlock occurs SetEvtHandlerEnabled( false ); m_chat_tab = new MainChatTab( m_func_tabs ); m_list_tab = new BattleListTab( m_func_tabs ); m_join_tab = new MainJoinBattleTab( m_func_tabs ); m_sp_tab = new MainSinglePlayerTab( m_func_tabs ); // m_savegame_tab = new SavegameTab( m_func_tabs ); m_replay_tab = new ReplayTab ( m_func_tabs ); m_torrent_tab = new MainDownloadTab( m_func_tabs); //use Insert so no Changepage events are triggered m_func_tabs->InsertPage( PAGE_CHAT, m_chat_tab, m_tab_names[PAGE_CHAT], true ); m_func_tabs->InsertPage( PAGE_LIST, m_list_tab, m_tab_names[PAGE_LIST], false ); m_func_tabs->InsertPage( PAGE_JOIN, m_join_tab, m_tab_names[PAGE_JOIN], false ); m_func_tabs->InsertPage( PAGE_SINGLE, m_sp_tab, m_tab_names[PAGE_SINGLE], false ); // m_func_tabs->InsertPage( PAGE_SAVEGAME, m_savegame_tab, m_tab_names[PAGE_SAVEGAME], false ); m_func_tabs->InsertPage( PAGE_REPLAY, m_replay_tab, m_tab_names[PAGE_REPLAY], false ); m_func_tabs->InsertPage( PAGE_TORRENT, m_torrent_tab, m_tab_names[PAGE_TORRENT], false ); LoadPerspectives(); SetTabIcons(); m_main_sizer->Add( m_func_tabs, 1, wxEXPAND | wxALL, 0 ); SetSizer( m_main_sizer ); Layout(); se_frame_active = false; wxToolTip::Enable(sett().GetShowTooltips()); m_channel_chooser = new ChannelChooserDialog( this, -1, _("Choose channels to join") ); m_statusbar = new Statusbar( this ); SetStatusBar( m_statusbar ); // re-enable eventhandling SetEvtHandlerEnabled( true ); UpdateMainAppHasFocus(m_has_focus); Connect( MainwindowMessageEvent, wxCommandEventHandler( MainWindow::OnMessage ), NULL, this ); } wxBitmap MainWindow::GetTabIcon( const unsigned char* data, size_t size ) const { if ( sett().GetUseTabIcons() ) return charArr2wxBitmap( data , size ); else return wxNullBitmap; } void MainWindow::SetTabIcons() { unsigned int count = 0; m_func_tabs->SetPageBitmap( count++, GetTabIcon( chat_icon_png, sizeof(chat_icon_png) ) ); m_func_tabs->SetPageBitmap( count++, GetTabIcon( join_icon_png, sizeof(join_icon_png) ) ); m_func_tabs->SetPageBitmap( count++, GetTabIcon( broom_tab_icon_png, sizeof(broom_tab_icon_png) ) ); m_func_tabs->SetPageBitmap( count++, GetTabIcon( single_player_icon_png , sizeof (single_player_icon_png) ) ); m_func_tabs->SetPageBitmap( count++, GetTabIcon( floppy_icon_png , sizeof (floppy_icon_png) ) ); m_func_tabs->SetPageBitmap( count++, GetTabIcon( replay_icon_png , sizeof (replay_icon_png) ) ); m_func_tabs->SetPageBitmap( count++, GetTabIcon( downloads_icon_png , sizeof (downloads_icon_png) ) ); m_func_tabs->SetPageBitmap( count++, GetTabIcon( options_icon_png , sizeof (options_icon_png) ) ); Refresh(); } void MainWindow::forceSettingsFrameClose() { #ifndef SL_QT_MODE if (se_frame_active && se_frame != 0) se_frame->handleExternExit(); #endif } void MainWindow::SetLogWin( wxLogWindow* log, wxLogChain* logchain ) { m_log_win = log; m_log_chain = logchain; if ( m_log_win ) m_log_win->GetFrame()->SetParent( this ); } MainWindow::~MainWindow() { SetEvtHandlerEnabled( false ); if ( m_opts_dialog ) { m_opts_dialog->Show(false); m_opts_dialog->Destroy(); } } void MainWindow::OnClose( wxCloseEvent& /*unused*/ ) { GetGlobalEventSender(GlobalEvents::OnQuit).SendEvent( 0 ); SetEvtHandlerEnabled(false); { wxWindowUpdateLocker lock( this ); SavePerspectives(); AuiManagerContainer::ManagerType* manager=GetAui().manager; if(manager){ GetAui().manager=NULL; manager->UnInit(); delete manager; } //interim fix for resize crashes on metacity and kwin #ifndef __WXMSW__ mapSelectDialog().Show( false ); mapSelectDialog().Reparent( &ui().mw() ); mapSelectDialog().Destroy( ); #endif ui().Quit(); forceSettingsFrameClose(); freeStaticBox(); delete m_autojoin_dialog; m_autojoin_dialog = 0; sett().SaveSettings(); if ( m_log_win ) { m_log_win->GetFrame()->Destroy(); if ( m_log_chain ) // if logwin was created, it's the current "top" log m_log_chain->DetachOldLog(); //so we need to tellwx not to delete it on its own //since we absolutely need to destroy the logwin here, set a fallback for the time until app cleanup #if(wxUSE_STD_IOSTREAM) wxLog::SetActiveTarget( new wxLogStream( &std::cout ) ); #endif } } Destroy(); } void MainWindow::OnSetFocus(wxFocusEvent&) { m_has_focus = true; UpdateMainAppHasFocus(m_has_focus); } void MainWindow::OnKillFocus(wxFocusEvent&) { m_has_focus = false; UpdateMainAppHasFocus(m_has_focus); } void MainWindow::OnMessage(wxCommandEvent &event) { customMessageBoxNoModal(SL_MAIN_ICON, event.GetString()); } void MainWindow::AddMessageEvent(const wxString& message) { wxCommandEvent evt(MainwindowMessageEvent, wxNewId()); evt.SetString(message); AddPendingEvent(evt); } bool MainWindow::HasFocus() const { return m_has_focus; } void DrawBmpOnBmp( wxBitmap& canvas, wxBitmap& object, int x, int y ) { wxMemoryDC dc; dc.SelectObject( canvas ); dc.DrawBitmap( object, x, y, true ); dc.SelectObject( wxNullBitmap ); } //void MainWindow::DrawTxtOnBmp( wxBitmap& canvas, wxString text, int x, int y ) //{ // wxMemoryDC dc; // dc.SelectObject( canvas ); // // dc.DrawText( text, x, y); // dc.SelectObject( wxNullBitmap ); //} /* //! @brief Get the ChatPanel dedicated to server output and input ChatPanel& servwin() { return ui().mw().GetChatTab().ServerChat(); } */ //! @brief Returns the curent MainChatTab object MainChatTab& MainWindow::GetChatTab() { ASSERT_EXCEPTION( m_chat_tab != 0, _T("m_chat_tab = 0") ); return *m_chat_tab; } //! @brief Returns the curent BattleListTab object BattleListTab& MainWindow::GetBattleListTab() { ASSERT_EXCEPTION( m_list_tab != 0, _T( "m_list_tab = 0" ) ); return *m_list_tab; } MainJoinBattleTab& MainWindow::GetJoinTab() { ASSERT_EXCEPTION( m_join_tab != 0, _T("m_join_tab = 0") ); return *m_join_tab; } MainSinglePlayerTab& MainWindow::GetSPTab() { ASSERT_EXCEPTION( m_sp_tab != 0, _T("m_sp_tab = 0") ); return *m_sp_tab; } MainWindow::ReplayTab& MainWindow::GetReplayTab() { ASSERT_EXCEPTION( m_replay_tab != 0, _T("m_replay_tab = 0") ); return *m_replay_tab; } //MainWindow::SavegameTab& MainWindow::GetSavegameTab() //{ // ASSERT_EXCEPTION( m_replay_tab != 0, _T("m_replay_tab = 0") ); // return *m_savegame_tab; //} MainDownloadTab& MainWindow::GetDownloadTab() { ASSERT_EXCEPTION( m_torrent_tab != 0, _T("m_torrent_tab = 0") ); return *m_torrent_tab ; } ChatPanel* MainWindow::GetActiveChatPanel() { unsigned int index = m_func_tabs->GetSelection(); if ( index == PAGE_CHAT ) return m_chat_tab->GetActiveChatPanel(); //! TODO (koshi) this doesn't work when in broom an and sending "/help (ShowMessage() ) if ( index == PAGE_JOIN ) return m_join_tab->GetActiveChatPanel(); return 0; } ChatPanel* MainWindow::GetChannelChatPanel( const wxString& channel ) { return m_chat_tab->GetChannelChatPanel( channel ); } //! @brief Open a new chat tab with a channel chat //! //! @param channel The channel name //! @note This does NOT join the chatt. //! @sa Server::JoinChannel OpenPrivateChat void MainWindow::OpenChannelChat( Channel& channel, bool doFocus ) { ASSERT_LOGIC( m_chat_tab != 0, _T("m_chat_tab") ); if ( doFocus ) m_func_tabs->SetSelection( PAGE_CHAT ); m_chat_tab->AddChatPanel( channel, doFocus ); } //! @brief Open a new chat tab with a private chat //! //! @param nick The user to whom the chatwindow should be opened to void MainWindow::OpenPrivateChat( const User& user, bool doFocus ) { ASSERT_LOGIC( m_chat_tab != 0, _T("m_chat_tab") ); m_func_tabs->SetSelection( PAGE_CHAT ); ChatPanel* cp = m_chat_tab->AddChatPanel( user ); if ( doFocus ) cp->FocusInputBox(); } //! @brief Displays the lobby singleplayer tab. void MainWindow::ShowSingleplayer() { ShowTab( PAGE_SINGLE ); } void MainWindow::ShowTab( const unsigned int idx ) { if ( idx < m_tab_names.GetCount() ) m_func_tabs->SetSelection( idx ); else wxLogError( _T("tab selection oob: %d"), idx ); } //! @brief Displays the lobby configuration. void MainWindow::ShowConfigure( const unsigned int page ) { OptionsDialog* opts = new OptionsDialog( this ); //possibly out of bounds is captured by m_opts_tab itslef opts->SetSelection( page ); opts->Show(); } void MainWindow::ShowChannelChooser() { if ( m_channel_chooser && m_channel_chooser->IsShown() ) return; if ( !ui().IsConnected() ) customMessageBox( SL_MAIN_ICON, _("You need to be connected to a server to view the channel list"), _("Not connected") ); else { m_channel_chooser->ClearChannels(); serverSelector().GetServer().RequestChannels(); m_channel_chooser->Show( true ); } } //! @brief Called when join channel menuitem is clicked void MainWindow::OnMenuJoin( wxCommandEvent& /*unused*/ ) { if ( !ui().IsConnected() ) return; wxString answer; if ( ui().AskText( _("Join channel..."), _("Name of channel to join"), answer ) ) { ui().JoinChannel( answer, _T("") ); } } void MainWindow::OnMenuChat( wxCommandEvent& /*unused*/ ) { if ( !ui().IsConnected() ) return; wxString answer; if ( ui().AskText( _("Open Private Chat..."), _("Name of user"), answer ) ) { if (serverSelector().GetServer().UserExists( answer ) ) { //true puts focus on new tab OpenPrivateChat( serverSelector().GetServer().GetUser( answer ), true ); } } } void MainWindow::OnMenuAbout( wxCommandEvent& /*unused*/ ) { wxAboutDialogInfo info; info.SetName( GetAppName() ); info.SetVersion (GetSpringLobbyVersion()); info.SetDescription( IdentityString( _("%s is a cross-plattform lobby client for the Spring RTS engine") ) ); //info.SetCopyright(_T(""); info.SetLicence(_T("GPL")); info.AddDeveloper(_T("BrainDamage")); info.AddDeveloper(_T("dizekat")); info.AddDeveloper(_T("insaneinside")); info.AddDeveloper(_T("Kaot")); info.AddDeveloper(_T("koshi")); info.AddDeveloper(_T("semi_")); info.AddDeveloper(_T("tc-")); info.AddTranslator(_T("chaosch (simplified chinese)")); info.AddTranslator(_T("lejocelyn (french)")); info.AddTranslator(_T("Suprano (german)")); info.AddTranslator(_T("tc- (swedish)")); info.AddTranslator(_("The numerous contributors from launchpad.net")); //! \todo customisations info.SetIcon( SLcustomizations().GetAppIconBundle().GetIcon() ); wxAboutBox(info); } void MainWindow::OnMenuConnect( wxCommandEvent& /*unused*/ ) { ui().ShowConnectWindow(); } void MainWindow::OnMenuDisconnect( wxCommandEvent& /*unused*/ ) { ui().Disconnect(); } void MainWindow::OnMenuServerTab( wxCommandEvent& /*unused*/ ) { ui().ReopenServerTab(); } void MainWindow::OnMenuSaveOptions( wxCommandEvent& /*unused*/ ) { sett().SaveSettings(); } void MainWindow::OnMenuQuit( wxCommandEvent& /*unused*/ ) { Close(); } #include "utils/uievents.h" void MainWindow::OnMenuVersion( wxCommandEvent& /*unused*/ ) { ui().CheckForUpdates(); } void MainWindow::OnUnitSyncReload( wxCommandEvent& /*unused*/ ) { usync().AddReloadEvent(); } void MainWindow::OnShowScreenshots( wxCommandEvent& /*unused*/ ) { wxArrayString ar = usync().GetScreenshotFilenames(); if ( ar.Count() == 0 ) { customMessageBoxNoModal( SL_MAIN_ICON, _("There were no screenshots found in your spring data directory."), _("No files found") ); return; } ar.Sort(); ImageViewerDialog* img = new ImageViewerDialog( ar, true, this, -1, _T("Screenshots") ); img->Show( true ); } void MainWindow::OnReportBug( wxCommandEvent& /*unused*/ ) { OpenWebBrowser( _T("http://projects.springlobby.info/projects/springlobby/issues/new") ); } void MainWindow::OnShowDocs( wxCommandEvent& /*unused*/ ) { OpenWebBrowser( _T("http://springlobby.info") ); } void MainWindow::OnTabsChanged( wxAuiNotebookEvent& event ) { int newsel = event.GetSelection(); if ( newsel == 0 || newsel == 1 ) { if ( !ui().IsConnected() && ui().IsMainWindowCreated() ) ui().Connect(); } } void MainWindow::OnShowSettingsPP( wxCommandEvent& ) { #ifndef SL_QT_MODE if ( se_frame && se_frame_active ) { se_frame->Raise(); return; } se_frame = new settings_frame(this,wxT("SpringSettings")); se_frame_active = true; se_frame->Show(); #endif } void MainWindow::OnMenuAutojoinChannels( wxCommandEvent& /*unused*/ ) { m_autojoin_dialog = new AutojoinChannelDialog (this); m_autojoin_dialog->Show(); } void MainWindow::OnMenuSelectLocale( wxCommandEvent& /*unused*/ ) { #ifndef SL_QT_MODE if ( wxGetApp().SelectLanguage() ) { customMessageBoxNoModal( SL_MAIN_ICON, IdentityString( _("You need to restart %s for the language change to take effect.") ), _("Restart required"), wxICON_EXCLAMATION | wxOK ); } #endif } void MainWindow::OnShowChannelChooser( wxCommandEvent& /*unused*/ ) { ShowChannelChooser(); } void MainWindow::OnChannelList( const wxString& channel, const int& numusers, const wxString& topic ) { m_channel_chooser->AddChannel( channel, numusers, topic ); } void MainWindow::OnChannelListStart( ) { m_channel_chooser->ClearChannels(); } wxString MainWindow::AddPerspectivePostfix( const wxString& pers_name ) const { wxString perspective_name = pers_name.IsEmpty() ? sett().GetLastPerspectiveName() : pers_name; if ( m_join_tab && m_join_tab->UseBattlePerspective() ) perspective_name += BattlePostfix; return perspective_name; } void MainWindow::OnMenuSaveLayout( wxCommandEvent& /*unused*/ ) { wxString answer; if ( !ui().AskText( _("Layout manager"),_("Enter a profile name"), answer ) ) return; while ( answer == _T("SpringLobby-default") ) { customMessageBox( SL_MAIN_ICON, _("This profile is write protected, please choose another name"), _("Error") ); if ( !ui().AskText( _("Layout manager"),_("Enter a profile name"), answer ) ) return; } SavePerspectives( answer ); } void MainWindow::OnMenuLoadLayout( wxCommandEvent& /*unused*/ ) { wxArrayString layouts = sett().GetPerspectives(); unsigned int result = wxGetSingleChoiceIndex( _("Which profile do you want to load?"), _("Layout manager"), layouts ); if ( result > layouts.GetCount() ) return; LoadPerspectives( layouts[result] ); } void MainWindow::OnMenuResetLayout( wxCommandEvent& /*event*/ ) { sett().SetDoResetPerspectives( true ); sett().SaveSettings(); customMessageBoxNoModal( SL_MAIN_ICON, IdentityString( _("Please restart %s now") ), wxEmptyString ); } const MainWindow::TabNames& MainWindow::GetTabNames() { return m_tab_names; } #ifdef __WXMSW__ #include #endif void MainWindow::LoadPerspectives( const wxString& pers_name ) { sett().SetLastPerspectiveName( pers_name ); wxString perspective_name = AddPerspectivePostfix( pers_name ); LoadNotebookPerspective( m_func_tabs, perspective_name ); m_sp_tab->LoadPerspective( perspective_name ); m_join_tab->LoadPerspective( perspective_name ); wxWindow* active_chat_tab = static_cast ( m_chat_tab->GetActiveChatPanel() ); if ( active_chat_tab ) active_chat_tab->Refresh(); //chat tab saving won't work w/o further work // m_chat_tab->LoadPerspective( perspective_name ); } void MainWindow::SavePerspectives( const wxString& pers_name ) { sett().SetLastPerspectiveName( pers_name ); wxString perspective_name = AddPerspectivePostfix( pers_name ); m_sp_tab->SavePerspective( perspective_name ); m_join_tab->SavePerspective( perspective_name ); // m_chat_tab->SavePerspective( perspective_name ); SaveNotebookPerspective( m_func_tabs, perspective_name ); } void MainWindow::FocusBattleRoomTab() { m_func_tabs->SetSelection( PAGE_JOIN ); GetJoinTab().FocusBattleRoomTab(); } void MainWindow::OnMenuPreferences( wxCommandEvent& /*event*/ ) { m_opts_dialog = new OptionsDialog( this ); m_opts_dialog->Show(); } void MainWindow::OnMenuRename( wxCommandEvent& /*event*/ ) { wxString new_username; if ( ui().AskText( _("Rename"), _("Enter new nickname"), new_username ) ) serverSelector().GetServer().ExecuteSayCommand( _T("/rename ") + new_username ); } void MainWindow::OnMenuFirstStart( wxCommandEvent& /*event*/ ) { IntroGuide* intro = new IntroGuide(); intro->Show(); } void MainWindow::OnMenuPathInfo( wxCommandEvent& /*event*/ ) { InfoDialog( this ).ShowModal(); } springlobby-0.169/src/mainwindow.h0000600000176000000410000001653212105760300020542 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_MAINWINDOW_H #define SPRINGLOBBY_HEADERGUARD_MAINWINDOW_H #include #include "gui/windowattributespickle.h" class Ui; class Channel; class User; class wxCommandEvent; class wxListbookEvent; class wxAuiNotebookEvent; class MainChatTab; class BattleListTab; class MainJoinBattleTab; class MainSinglePlayerTab; class MainDownloadTab; class wxBoxSizer; class SLNotebook; class wxListbook; class MainOptionsTab; class wxBitmap; class wxImageList; class ChatPanel; class settings_frame; class wxMenuItem; class wxMenuBar; class wxMenu; class ChannelChooserDialog; class ReplayTab; class AutojoinChannelDialog; class WidgetDownloadDialog; class wxLogWindow; class wxLogChain; class wxCloseEvent; class Statusbar; class OptionsDialog; class ReplayTraits; class wxFocusEvent; template < class Traits > class PlaybackTab; const wxEventType MainwindowMessageEvent = wxNewEventType(); //! @brief wxFrame that contains the main window of the client. class MainWindow : public wxFrame, public WindowAttributesPickle { public: MainWindow( ); virtual ~MainWindow(); typedef PlaybackTab ReplayTab; // typedef PlaybackTab // SavegameTab; // MainWindow interface void OpenChannelChat( Channel& channel, bool doFocus = true ); void OpenPrivateChat( const User& user, bool doFocus = false ); void ShowConfigure( const unsigned int page = OPT_PAGE_SPRING ); void ShowTab( const unsigned int idx ); void ShowSingleplayer(); /** Show the channel list dialog. */ void ShowChannelChooser(); //! cannot be const while using static event tables (function pointer sig don't match) void OnMenuAbout( wxCommandEvent& event ); void OnMenuJoin( wxCommandEvent& event ); void OnMenuChat( wxCommandEvent& event ); void OnMenuConnect( wxCommandEvent& event ); void OnMenuDisconnect( wxCommandEvent& event ); void OnMenuServerTab( wxCommandEvent& event ); void OnMenuSaveOptions( wxCommandEvent& event ); void OnMenuQuit( wxCommandEvent& event ); void OnMenuPathInfo( wxCommandEvent& event ); void OnMenuVersion ( wxCommandEvent& event ); void OnMenuSaveLayout( wxCommandEvent& event ); void OnMenuLoadLayout( wxCommandEvent& event ); void OnMenuResetLayout( wxCommandEvent& event ); void OnMenuPreferences( wxCommandEvent& event ); void OnMenuRename( wxCommandEvent& event ); void OnMenuFirstStart( wxCommandEvent& event ); void OnUnitSyncReload( wxCommandEvent& event ); void OnMenuAutojoinChannels( wxCommandEvent& event ); void OnReportBug( wxCommandEvent& event ); void OnShowDocs( wxCommandEvent& event ); void OnShowSettingsPP( wxCommandEvent& event ); void OnMenuSelectLocale( wxCommandEvent& event ); void OnShowChannelChooser( wxCommandEvent& event ); void OnShowScreenshots( wxCommandEvent& event ); void forceSettingsFrameClose(); void OnUnitSyncReloaded(); void OnChannelList( const wxString& channel, const int& numusers, const wxString& topic ); void OnChannelListStart( ); void OnClose( wxCloseEvent& ); void OnSetFocus(wxFocusEvent&); void OnKillFocus(wxFocusEvent&); void OnMessage( wxCommandEvent& event ); void AddMessageEvent( const wxString& message ); void OnTabsChanged( wxAuiNotebookEvent& event ); MainChatTab& GetChatTab(); BattleListTab& GetBattleListTab(); MainJoinBattleTab& GetJoinTab(); MainSinglePlayerTab& GetSPTab(); ReplayTab& GetReplayTab(); // SavegameTab& GetSavegameTab(); MainDownloadTab& GetDownloadTab(); ChatPanel* GetActiveChatPanel(); ChatPanel* GetChannelChatPanel( const wxString& channel ); void SetTabIcons(); void SetLogWin( wxLogWindow* log, wxLogChain* logchain ); void LoadPerspectives( const wxString& perspective_name = wxEmptyString ); void SavePerspectives( const wxString& perspective_name = wxEmptyString ); void FocusBattleRoomTab(); bool HasFocus() const; protected: wxMenuItem* m_settings_menu; wxMenuBar* m_menubar; wxMenu* m_menuTools; wxMenu* m_menuEdit; Statusbar* m_statusbar; wxBoxSizer* m_main_sizer; SLNotebook* m_func_tabs; MainChatTab* m_chat_tab; BattleListTab* m_list_tab; MainJoinBattleTab* m_join_tab; MainSinglePlayerTab* m_sp_tab; MainDownloadTab* m_torrent_tab; OptionsDialog* m_opts_dialog; AutojoinChannelDialog* m_autojoin_dialog; friend class settings_frame; settings_frame* se_frame; bool se_frame_active; ChannelChooserDialog* m_channel_chooser; ReplayTab* m_replay_tab; wxBitmap GetTabIcon( const unsigned char* data, size_t size ) const; wxString AddPerspectivePostfix( const wxString& pers_name ) const; wxLogWindow* m_log_win; wxLogChain* m_log_chain; bool m_has_focus; enum { MENU_ABOUT = wxID_ABOUT, MENU_QUIT = wxID_EXIT, MENU_CONNECT = wxID_HIGHEST, MENU_SETTINGSPP, MENU_DISCONNECT, MENU_SERVER_TAB, MENU_SAVE_OPTIONS, MENU_JOIN, MENU_USYNC, MENU_TRAC, MENU_DOC, MENU_CHAT, MAIN_TABS, MENU_VERSION, MENU_START_TORRENT, MENU_STOP_TORRENT, MENU_AUTOJOIN_CHANNELS, MENU_SELECT_LOCALE, MENU_CHANNELCHOOSER, MENU_SAVE_LAYOUT, MENU_LOAD_LAYOUT, MENU_RESET_LAYOUT, MENU_DEFAULT_LAYOUT, MENU_SCREENSHOTS, MENU_PREFERENCES, MENU_RENAME, MENU_GENERAL_HELP, MENU_PATHINFO }; class TabNames : public wxArrayString { public: TabNames () { Add( _("Chat") ); Add( _("Battlelist") ); Add( _("Battleroom") ); Add( _("Singleplayer") ); // Add( _("Savegames") ); Add( _("Replays") ); Add( _("Downloads") ); } }; static TabNames m_tab_names; public: // Page indexes static const unsigned int PAGE_CHAT = 0; static const unsigned int PAGE_LIST = 1; static const unsigned int PAGE_JOIN = 2; static const unsigned int PAGE_SINGLE = 3; static const unsigned int PAGE_REPLAY = 4; // static const unsigned int PAGE_SAVEGAME = 4; static const unsigned int PAGE_TORRENT = 5; static const unsigned int OPT_PAGE_SPRING = 0; static const unsigned int OPT_PAGE_CHAT = 1; static const unsigned int OPT_PAGE_TORRENT = 2; static const unsigned int OPT_PAGE_GENERAL = 3; static const unsigned int OPT_PAGE_GROUPS = 4; static const TabNames& GetTabNames(); protected: DECLARE_EVENT_TABLE() }; //ChatPanel& servwin(); // wxWidget IDs #endif // SPRINGLOBBY_HEADERGUARD_MAINWINDOW_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/mapctrl.cpp0000600000176000000410000014060112105760300020356 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include #include #include #include #include #include #include #include #include "utils/debug.h" #include "utils/conversion.h" #include #include "uiutils.h" #include "mapctrl.h" #include "springunitsync.h" #include "user.h" #include "ui.h" #include "server.h" #include "ibattle.h" #include "settings.h" #include "iconimagelist.h" #include "images/close.xpm" #include "images/close_hi.xpm" #include "images/start_ally.xpm" #include "images/start_enemy.xpm" #include "images/start_unused.xpm" #include "images/player.xpm" #include "images/bot.xpm" #include "images/no1_icon.png.h" #include "images/no2_icon.png.h" #include "images/up_down.xpm" #include "images/upsel_down.xpm" #include "images/up_downsel.xpm" #include "images/not_found_icon.xpm" #include "images/download_map.xpm" #include "images/reload_map.xpm" const int USER_BOX_EXPANDED_HEIGHT = 70; const int USER_BOX_EXPANDED_WIDTH = 75; /** How much padding to place around the icon of a user box. */ const int USER_BOX_ICON_PADDING = 2; /** Width of the e.g. player or bot images that mark a player/bot's * chosen start position. */ const int USER_BOX_ICON_WIDTH = 16; /** Height of the e.g. player or bot images that mark a player/bot's * chosen start position. */ const int USER_BOX_ICON_HEIGHT = 16; //int div is indeed wanted here const int USER_BOX_ICON_HALFWIDTH = (USER_BOX_ICON_WIDTH / 2); const int USER_BOX_ICON_HALFHEIGHT = (USER_BOX_ICON_HEIGHT / 2); const wxSize user_box_icon_size ( USER_BOX_ICON_WIDTH + 2 * USER_BOX_ICON_PADDING, USER_BOX_ICON_HEIGHT + 2 * USER_BOX_ICON_PADDING ); const wxSize user_box_expanded_size ( USER_BOX_EXPANDED_WIDTH, USER_BOX_EXPANDED_HEIGHT ); BEGIN_EVENT_TABLE( MapCtrl, wxPanel ) EVT_PAINT( MapCtrl::OnPaint ) EVT_SIZE( MapCtrl::OnResize ) EVT_MOTION( MapCtrl::OnMouseMove ) EVT_LEFT_DOWN( MapCtrl::OnLeftDown ) EVT_LEFT_UP( MapCtrl::OnLeftUp ) // EVT_MOUSEWHEEL( MapCtrl::OnMouseWheel ) EVT_COMMAND( wxID_ANY, UnitSyncAsyncOperationCompletedEvt, MapCtrl::OnGetMapImageAsyncCompleted ) END_EVENT_TABLE() /* Something to do with start box sizes. */ const int boxsize = 8; const int minboxsize = 40; static inline void WriteInt24(unsigned char* p, int i) { p[0] = i & 0xFF; p[1] = (i >> 8) & 0xFF; p[2] = (i >> 16) & 0xFF; } static inline int ReadInt24(const unsigned char* p) { return p[0] | (p[1] << 8) | (p[2] << 16); } MapCtrl::MapCtrl( wxWindow* parent, int size, IBattle* battle, bool readonly, bool fixed_size, bool draw_start_types, bool singleplayer ): wxPanel( parent, -1, wxDefaultPosition, wxSize(size, size), wxSIMPLE_BORDER|wxFULL_REPAINT_ON_RESIZE ), m_async(this), m_minimap(0), m_metalmap(0), m_heightmap(0), m_battle(battle), m_mapname(_T("")), m_draw_start_types(draw_start_types), m_fixed_size(fixed_size), m_ro(readonly), m_sp(singleplayer), m_mover_rect(-2), m_mdown_rect(0), m_rect_area(Main), m_last_rect_area(Main), m_mdown_area(Main), m_maction(None), m_mdown_x(0), m_mdown_y(0), m_lastsize(-1,-1), m_close_img(NULL), m_close_hi_img(NULL), m_start_ally(NULL), m_start_enemy(NULL), m_start_unused(NULL), m_player_img(NULL), m_bot_img(NULL), m_nfound_img(NULL), m_reload_img(NULL), m_dl_img(NULL), m_user_expanded(NULL), m_current_infomap(IM_Minimap) { SetBackgroundStyle( wxBG_STYLE_CUSTOM ); SetBackgroundColour( *wxLIGHT_GREY ); m_close_img = new wxBitmap( close_xpm ); m_close_hi_img = new wxBitmap( close_hi_xpm ); m_tmp_brect.ally = -1; } MapCtrl::~MapCtrl() { FreeMinimap(); delete m_close_img; delete m_close_hi_img; delete m_start_ally; delete m_start_enemy; delete m_start_unused; delete m_nfound_img; delete m_reload_img; delete m_dl_img; } void MapCtrl::SetBattle( IBattle* battle ) { m_battle = battle; UpdateMinimap(); } wxRect MapCtrl::GetDrawableRect() const { int w ( 0 ), h ( 0 ); GetClientSize(&w, &h); return wxRect(0, 0, w, h); } wxRect MapCtrl::GetMinimapRect() const { if ( m_minimap == 0 ) return wxRect(); int cwidth, cheight, top = 0, left = 0; GetClientSize( &cwidth, &cheight ); if ( m_minimap->GetWidth() < cwidth ) { left = (cwidth - m_minimap->GetWidth()) / 2; } else { top = (cheight - m_minimap->GetHeight()) / 2; } return wxRect( left, top, m_minimap->GetWidth(), m_minimap->GetHeight() ); } wxRect MapCtrl::GetStartRect( int index ) const { BattleStartRect sr = m_battle->GetStartRect( index ); if ( !sr.IsOk() ) return wxRect(); return GetStartRect( sr ); } wxRect MapCtrl::GetStartRect( const BattleStartRect& sr ) const { int x1,y1,x2,y2; if ( !sr.exist || sr.todelete ) return wxRect(); wxRect mr = GetMinimapRect(); x1 = int( (mr.x + sr.left * mr.width / 200.0) + 0.5 ); y1 = int( (mr.y + sr.top * mr.height / 200.0) + 0.5 ); x2 = int( (mr.x + sr.right * mr.width / 200.0) + 0.5 ); y2 = int( (mr.y + sr.bottom * mr.height / 200.0) + 0.5 ); return wxRect( x1, y1, x2-x1, y2-y1 ); } void MapCtrl::Accumulate( wxImage& image ) const { if (!image.IsOk()) return; // Even tho GetData() returns a non-const pointer, // it does not unshare the reference counted data, // so we have to make a copy of the image.. image = image.Copy(); const int w = image.GetWidth(); const int h = image.GetHeight(); unsigned char* data = image.GetData(); // sum in vertical direction unsigned char* p = data; for (int x = 0; x < w; ++x, p += 3) { WriteInt24(p, p[0] + p[1] + p[2]); } for (int y = 1; y < h; ++y) { const unsigned char* prev = data + 3*((y-1)*w); unsigned char* curr = data + 3*(y*w); for (int x = 0; x < w; ++x, prev += 3, curr += 3) { WriteInt24(curr, ReadInt24(prev) + curr[0] + curr[1] + curr[2]); } } // sum in horizontal direction for (int x = 1; x < w; ++x) { for (int y = 0; y < h; ++y) { p = data + 3*(y*w+x); WriteInt24(p, ReadInt24(p) + ReadInt24(p - 3)); } } } double MapCtrl::GetStartRectMetalFraction( int index ) const { BattleStartRect sr = m_battle->GetStartRect( index ); if ( !sr.IsOk() ) return 0.0; return GetStartRectMetalFraction( sr ); } double MapCtrl::GetStartRectMetalFraction( const BattleStartRect& sr ) const { // todo: this really is *logic*, not rendering code, so it // should go in some other layer sometime (SpringUnitSync?). if (!m_metalmap_cumulative.IsOk()) return 0.0; int x1,y1,x2,y2,w,h; w = m_metalmap_cumulative.GetWidth(); h = m_metalmap_cumulative.GetHeight(); x1 = std::max(0, std::min(w-1, int( (sr.left * w / 200.0) + 0.5 ))); y1 = std::max(0, std::min(h-1, int( (sr.top * h / 200.0) + 0.5 ))); x2 = std::max(0, std::min(w-1, int( (sr.right * w / 200.0) + 0.5 ))); y2 = std::max(0, std::min(h-1, int( (sr.bottom * h / 200.0) + 0.5 ))); const unsigned char* metalmap = m_metalmap_cumulative.GetData(); const int lefttop = ReadInt24(&metalmap[3*(y1*w+x1)]); const int righttop = ReadInt24(&metalmap[3*(y1*w+x2)]); const int leftbot = ReadInt24(&metalmap[3*(y2*w+x1)]); const int rightbot = ReadInt24(&metalmap[3*(y2*w+x2)]); // in 2d cumulative distribution total is value at bottom right corner const int total = ReadInt24(&metalmap[3*(w*h-1)]); return (double) (lefttop + rightbot - righttop - leftbot) / total; } unsigned int MapCtrl::GetNewRectIndex() const { ASSERT_LOGIC ( m_battle, _T("getting a rectangle index not in a battle")); return m_battle->GetNextFreeRectIdx(); } BattleStartRect MapCtrl::GetBattleRect( int x1, int y1, int x2, int y2, int ally ) const { BattleStartRect br; wxRect mr = GetMinimapRect(); br.ally = ally; br.left = int( (200.0 * ( x1 - mr.x ) / mr.width) + 0.5 ); br.top = int( (200.0 * ( y1 - mr.y ) / mr.height) + 0.5 ); br.right = int( (200.0 * ( x2 - mr.x ) / mr.width) + 0.5 ); br.bottom = int( (200.0 * ( y2 - mr.y ) / mr.height) + 0.5 ); br.exist = true; br.toadd = false; br.toresize = true; int max_sz = 200; if ( br.left < 0 ) br.left = 0; if ( br.left > max_sz ) br.left = max_sz; if ( br.top < 0 ) br.top = 0; if ( br.top > max_sz ) br.top = max_sz; if ( br.right < 0 ) br.right = 0; if ( br.right > max_sz ) br.right = max_sz; if ( br.bottom < 0 ) br.bottom = 0; if ( br.bottom > max_sz ) br.bottom = max_sz; return br; } void MapCtrl::SetMouseOverRect( int index ) { int oldindex = m_mover_rect; m_mover_rect = index; _SetCursor(); if ( (index != oldindex) || (m_rect_area != m_last_rect_area) ) UpdateMinimap(); m_last_rect_area = m_rect_area; } void MapCtrl::_SetCursor() { if ( !m_minimap ) { if ( m_rect_area != Main ) SetCursor( wxCursor( wxCURSOR_HAND ) ); else SetCursor( wxCursor( wxCURSOR_ARROW ) ); return; } if ( m_battle != 0 ) { long longval; m_battle->CustomBattleOptions().getSingleValue( _T("startpostype") , OptionsWrapper::EngineOption ).ToLong( &longval ); if ( longval != IBattle::ST_Choose ) { SetCursor( wxCursor( wxCURSOR_ARROW ) ); return; } else { if ( !m_ro ) SetCursor( wxCursor( wxCURSOR_CROSS ) ); else SetCursor( wxCursor( wxCURSOR_ARROW ) ); return; } } if ( !m_ro ) { if ( m_mover_rect >= 0 ) { if ( m_rect_area == UpLeft ) SetCursor( wxCursor( wxCURSOR_SIZENWSE ) ); else if ( m_rect_area == UpRight ) SetCursor( wxCursor( wxCURSOR_ARROW ) ); else if ( m_rect_area == DownLeft ) SetCursor( wxCursor( wxCURSOR_SIZENESW ) ); else if ( m_rect_area == DownRight ) SetCursor( wxCursor( wxCURSOR_SIZENWSE ) ); else SetCursor( wxCursor( wxCURSOR_SIZING ) ); } else if ( m_mover_rect == -1 ) { SetCursor( wxCursor( wxCURSOR_CROSS ) ); } else { SetCursor( wxCursor( wxCURSOR_ARROW ) ); } } else { if ( m_mover_rect >= 0 ) SetCursor( wxCursor( wxCURSOR_HAND ) ); else SetCursor( wxCursor( wxCURSOR_ARROW ) ); } } void MapCtrl::RelocateUsers() { if ( m_battle == 0 ) return; for ( unsigned int i = 0; i < m_battle->GetNumUsers(); i++ ) { try { User& user = m_battle->GetUser( i ); UserPosition& pos = user.BattleStatus().pos; pos = m_battle->GetFreePosition(); if ( user.BattleStatus().pos.x == -1 ) m_battle->KickPlayer( user ); } catch (...) {} } } void MapCtrl::GetClosestStartPos( int fromx, int fromy, int& index, int& x, int& y, int& range ) { if ( m_battle == 0 ) return; UnitSyncMap map = m_battle->LoadMap(); int newrange; range = -1; index = -1; for ( int i = 0; i < int(map.info.positions.size()); i++ ) { double dx = fromx - map.info.positions[i].x; double dy = fromy - map.info.positions[i].y; newrange = (int)sqrt( dx*dx + dy*dy ); if ( ( range == -1 ) || ( range > newrange )) { range = newrange; index = i; } } if ( index != -1 ) { x = map.info.positions[index].x; y = map.info.positions[index].y; } } int MapCtrl::LoadMinimap() { wxLogDebugFunc( _T("") ); if ( m_battle == 0 ) return -1; if ( m_minimap ) return -1; if ( !m_battle->MapExists() ) return -1; wxString map = m_battle->GetHostMapName(); try { int w, h; GetClientSize( &w, &h ); if ( w * h == 0 ) { m_mapname = _T(""); m_lastsize = wxSize( -1, -1 ); return -2; } // start chain of asynchronous map image fetches // first minimap, then metalmap and heightmap m_async.GetMinimap( map, w, h ); m_mapname = map; m_lastsize = wxSize( w, h ); Refresh(); Update(); } catch (...) { FreeMinimap(); return -3; } return 0; } void MapCtrl::FreeMinimap() { delete m_minimap; m_minimap = 0; delete m_metalmap; m_metalmap = 0; delete m_heightmap; m_heightmap = 0; m_mapname = _T(""); } void MapCtrl::UpdateMinimap() { int w, h; _SetCursor(); if ( m_battle == 0 ) return; GetClientSize( &w, &h ); if ( m_battle ) //needs to be looked into, crahses with replaytab (koshi) { bool just_resize = ( m_lastsize != wxSize(-1,-1) && m_lastsize != wxSize(w, h) ); if ( (m_mapname != m_battle->GetHostMapName() ) || just_resize ) { FreeMinimap(); int loaded_ok = LoadMinimap(); if(!just_resize && loaded_ok == 0) // if a new map is loaded, reset start positions { long longval; m_battle->CustomBattleOptions().getSingleValue( _T("startpostype") , OptionsWrapper::EngineOption ).ToLong( &longval ); if ( longval == IBattle::ST_Pick ) RelocateUsers(); } } } //without this test aborts happen when unit sync is reloaded from torrent complete //if ( IsShownOnScreen() ) //meh, doesn't actually help { Refresh(); Update(); } } void MapCtrl::RequireImages() { if ( !m_start_ally ) m_start_ally = new wxBitmap( start_ally_xpm ); if ( !m_start_enemy ) m_start_enemy = new wxBitmap( start_enemy_xpm ); if ( !m_start_unused ) m_start_unused = new wxBitmap( start_unused_xpm ); if ( !m_player_img ) m_player_img = new wxBitmap( player_xpm ); if ( !m_bot_img ) m_bot_img = new wxBitmap( bot_xpm ); } void MapCtrl::DrawStartRect( wxDC& dc, int index, wxRect& sr, const wxColour& col, bool mouseover, int alphalevel, bool forceInsideMinimap ) { int x1 = sr.x; int y1 = sr.y; int x2 = sr.x + sr.width; int y2 = sr.y + sr.height; wxRect mr = GetMinimapRect(); if ( forceInsideMinimap ) { x1 = std::max( mr.x, x1 ); y1 = std::max( mr.y, y1 ); x2 = std::min( mr.x+mr.width, x2 ); y2 = std::min( mr.y+mr.height, y2 ); } sr.x = x1; sr.y = y1; sr.width = x2 - x1; sr.height = y2 - y1; if ( sr.width < 0 ) { sr.width = 0; } if ( sr.height < 0 ) { sr.height = 0; } if ( sr.width * sr.height <= 0 ) return; dc.SetBrush( wxBrush( *wxLIGHT_GREY, wxTRANSPARENT ) ); wxImage img( sr.width, sr.height ); wxColour light; light.Set( ( ( col.Red() + 100 ) > 200 ) ? 200 : (col.Red() + 100 ), ( ( col.Green() + 100 ) > 200 ) ? 200 : ( col.Green() + 100 ), ( ( col.Blue() + 100 ) > 200 ) ? 200 : ( col.Blue() + 100 ) ); img.SetRGB( wxRect( 0, 0, sr.width, sr.height ), light.Red(), light.Green(), light.Blue() ); img.InitAlpha(); unsigned char *alpha = img.GetAlpha(); for ( int y = 0; y < sr.height; y++ ) { int a; if ( ( y % 3 ) == 0 ) a = alphalevel; else a = ( ( alphalevel - 40 ) < 0 ) ? 0 : ( alphalevel - 40 ); for ( int x = 0; x < sr.width; x++ ) { alpha[ ( y* sr.width )+ x ] = a; } } wxBitmap bmpimg( img ); dc.DrawBitmap( bmpimg, sr.x, sr.y, false ); /* wxFont f( 12, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL|wxFONTFLAG_ANTIALIASED, wxFONTWEIGHT_LIGHT ); dc.SetFont( f );*/ if ( index != -1 ) { int twidth, theight, tx, ty; wxString strIndex = wxFormat( _T("%d") ) % ( index + 1 ); dc.GetTextExtent( strIndex, &twidth, &theight ); dc.SetTextForeground( col ); tx = sr.x + sr.width / 2 - twidth / 2; ty = sr.y + sr.height / 2 - theight / 2 - 1; DrawOutlinedText( dc, strIndex, tx, ty, wxColour( 50, 50, 50), *wxWHITE ); //dc.DrawText( wxFormat( _T("%d"), index+1), sr.x + sr.width / 2 - twidth / 2, sr.y + sr.height / 2 - theight / 2 - 1 ); const double metal = GetStartRectMetalFraction( index ); if ( metal != 0.0 ) { wxString strMetal = wxFormat( _("Metal: %.1f%%") ) % ( std::isnan(metal) ? 0.0 : metal * 100.0 ); dc.GetTextExtent( strMetal, &twidth, &theight ); // don't cramp it in rect, but only display it if it actually fits if (sr.height >= 6 * theight && sr.width > twidth) { tx = sr.x + sr.width / 2 - twidth / 2; ty = sr.y + sr.height / 2 + theight / 2 + theight - 1; DrawOutlinedText( dc, strMetal, tx, ty, wxColour( 50, 50, 50 ), *wxWHITE ); } } } dc.SetPen( wxPen( col ) ); if ( mouseover && !m_ro ) { dc.DrawRectangle( sr.x + 1, sr.y + 1, sr.width - 2, sr.height - 2 ); dc.SetPen( wxPen( *wxBLACK ) ); dc.DrawRectangle( sr.x, sr.y, sr.width, sr.height ); dc.SetBrush( wxBrush( *wxBLACK, wxSOLID ) ); dc.DrawRectangle( sr.x, sr.y, boxsize, boxsize ); dc.DrawRectangle( sr.x + sr.width - boxsize, sr.y + sr.height - boxsize, boxsize, boxsize ); //dc.DrawRectangle( sr.x + sr.width - boxsize, sr.y + 1, boxsize, boxsize ); //dc.DrawRectangle( sr.x, sr.y + sr.height - boxsize, boxsize, boxsize ); if ( m_rect_area != UpRight ) dc.DrawBitmap( *m_close_img, sr.x + sr.width - 16, sr.y + 2, true ); else dc.DrawBitmap( *m_close_hi_img, sr.x + sr.width - 16, sr.y + 2, true ); } else { dc.DrawRectangle( sr.x, sr.y, sr.width, sr.height ); } } wxRect MapCtrl::GetRefreshRect() const { int width, height; GetClientSize( &width, &height ); return wxRect( 5, height - 27, 72, 22 ); } wxRect MapCtrl::GetDownloadRect() const { int width, height; GetClientSize( &width, &height ); return wxRect( 5, height - 52, 87, 22 ); } void MapCtrl::DrawBackground( wxDC& dc ) { int width, height; GetClientSize( &width, &height ); dc.SetPen( wxPen( *wxLIGHT_GREY ) ); dc.SetBrush( wxBrush( *wxLIGHT_GREY, wxSOLID ) ); if ( m_battle == 0 ) { dc.DrawRectangle( 0, 0, width, height ); return; } wxBitmap* img = 0; switch (m_current_infomap) { case IM_Minimap: img = m_minimap; break; case IM_Metalmap: img = m_metalmap; break; case IM_Heightmap: img = m_heightmap; break; default: ASSERT_LOGIC( false, _T("missing InfoMap IM_* enumeration constant in switch") ); break; } // Draw minimap. if ( !img ) { // Draw background. dc.DrawRectangle( 0, 0, width, height ); if ( m_sp ) return; if ( !m_nfound_img ) m_nfound_img = new wxBitmap( not_found_icon_xpm ); if ( !m_reload_img ) m_reload_img = new wxBitmap( reload_map_xpm ); if ( !m_dl_img ) m_dl_img = new wxBitmap( download_map_xpm ); dc.DrawBitmap( *m_nfound_img, width/2 - 32, height/2 - 32, true ); if ( (m_rect_area == Refreshing) && (m_mdown_area != Refreshing) ) dc.DrawBitmap( *m_reload_img, 6, height - 28, true ); else dc.DrawBitmap( *m_reload_img, 5, height - 27, true ); if ( (m_rect_area == Download) && (m_mdown_area != Download) ) dc.DrawBitmap( *m_dl_img, 6, height - 53, true ); else dc.DrawBitmap( *m_dl_img, 5, height - 52, true ); dc.SetFont( wxFont( 9, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL ) ); if ( m_rect_area == Refreshing ) DrawOutlinedText( dc, _("Refresh"), 28, height - 25, wxColour(50,50,50), *wxWHITE ); else DrawOutlinedText( dc, _("Refresh"), 28, height - 25, *wxWHITE, wxColour(50,50,50) ); if ( m_rect_area == Download ) DrawOutlinedText( dc, _("Download"), 28, height - 50, wxColour(50,50,50), *wxWHITE ); else DrawOutlinedText( dc, _("Download"), 28, height - 50, *wxWHITE, wxColour(50,50,50) ); } else { wxRect r = GetMinimapRect(); // Draw background where the minimap is not drawn(to avoid flickering). if ( r.y > 0 ) { dc.DrawRectangle( 0, 0, width, (height - r.height) / 2 ); dc.DrawRectangle( 0, r.y+r.height, width, (height - r.height) / 2 + 1 ); } if ( r.x > 0 ) { dc.DrawRectangle( 0, 0, (width - r.width) / 2, height ); dc.DrawRectangle( r.x+r.width, 0, (width - r.width) / 2 + 1, height ); } // Draw minimap dc.DrawBitmap( *img, r.x, r.y, false ); } } void MapCtrl::DrawStartRects( wxDC& dc ) { for ( int i = 0; i <= int(m_battle->GetLastRectIdx()); i++ ) { wxRect sr = GetStartRect( i ); if ( sr.IsEmpty() ) continue; wxColour col; if ( i == m_battle->GetMe().BattleStatus().ally ) { col.Set( 0, 200, 0 ); } else { col.Set( 200, 0, 0 ); } DrawStartRect( dc, i, sr, col, m_mover_rect == i ); } } void MapCtrl::DrawStartPositions( wxDC& dc ) { wxRect mr = GetMinimapRect(); m_map = m_battle->LoadMap(); RequireImages(); long longval; m_battle->CustomBattleOptions().getSingleValue( _T("startpostype") , OptionsWrapper::EngineOption ).ToLong( &longval ); if ( longval == IBattle::ST_Fixed ) { wxFont f( 7, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT ); dc.SetFont( f ); for ( int i = 0; i < int(m_map.info.positions.size()); i++ ) { int x = (int)( (double)((double)m_map.info.positions[i].x / (double)m_map.info.width) * (double)mr.width ) - 8; int y = (int)( (double)(m_map.info.positions[i].y / (double)m_map.info.height) * (double)mr.height ) - 8; dc.DrawBitmap( *m_start_ally, x+mr.x, y+mr.y, true ); wxCoord w, h; dc.GetTextExtent( wxFormat(_T("%d") ) % ( i+1 ), &w, &h ); dc.DrawText( wxFormat(_T("%d") ) % ( i+1 ), x+mr.x+(8-w/2), y+mr.y+(8-h/2) ); } } else { // Draw startpositions for ( int i = 0; i < int(m_map.info.positions.size()); i++ ) { int x = (int)( (double)((double)m_map.info.positions[i].x / (double)m_map.info.width) * (double)mr.width ) - 8; int y = (int)( (double)(m_map.info.positions[i].y / (double)m_map.info.height) * (double)mr.height ) - 8; dc.DrawBitmap( *m_start_unused, x+mr.x, y+mr.y, true ); } } } wxRealPoint MapCtrl::GetUserMapPositionAsReal(const User& user) const { return wxRealPoint(static_cast(user.BattleStatus().pos.x) / static_cast(m_map.info.width), static_cast(user.BattleStatus().pos.y) / static_cast(m_map.info.height)); } wxPoint MapCtrl::GetTranslatedScaledUserMapPosition(const User& user) const { wxRealPoint rmp ( GetUserMapPositionAsReal(user) ); wxRect mr ( GetMinimapRect() ); return wxPoint(mr.x + static_cast(rmp.x * mr.width), mr.y + static_cast(rmp.y * mr.height)); } /** Try to fit @p what inside @p container. * * @return a wxPoint that can be used with wxRect::Offset. */ inline wxPoint FitInside(const wxRect& what, const wxRect& container) { ASSERT_LOGIC ( what.width <= container.width && what.height <= container.height, _T("Can't fit rect inside target container") ); wxPoint offset ( 0, 0 ); if ( what.x < container.x ) offset.x += container.x - what.x; else if ( what.GetRight() > container.GetRight() ) offset.x += container.GetRight() - what.GetRight(); if ( what.y < container.y ) offset.y += container.y - what.y; else if ( what.GetBottom() > container.GetBottom() ) offset.y += container.GetBottom() - what.GetBottom(); return offset; } wxRect MapCtrl::GetUserRect( const User& user, bool selected ) { ASSERT_LOGIC( m_battle != 0, _T("Bot == 0") ); m_map = m_battle->LoadMap(); wxPoint absolute_position ( GetTranslatedScaledUserMapPosition(user) ); wxPoint box_start ( absolute_position.x - USER_BOX_ICON_HALFWIDTH - USER_BOX_ICON_PADDING, absolute_position.y - USER_BOX_ICON_HALFWIDTH - USER_BOX_ICON_PADDING ); wxRect user_box ( box_start, ( selected && m_sp ) ? user_box_expanded_size : user_box_icon_size ); wxRect cram_into_box ( GetDrawableRect() ); wxPoint offset ( ::FitInside(user_box, cram_into_box) ); user_box.Offset(offset); return user_box; } MapCtrl::RectangleArea MapCtrl::GetUserRectArea( const wxRect& userrect, int x, int y ) const { x = x - userrect.x; y = y - userrect.y; wxRect close = GetUserCloseRect(); if ( close.Contains( x, y ) ) return Close; wxRect side = GetUserSideRect(); if ( side.Contains( x, y ) ) return Side; wxRect AllyUp = GetUserUpAllyButtonRect(); if ( AllyUp.Contains( x, y ) ) return UpAllyButton; wxRect AllyDown = GetUserDownAllyButtonRect(); if ( AllyDown.Contains( x, y ) ) return DownAllyButton; wxRect handicap = GetUserHandicapRect(); if ( handicap.Contains( x, y ) ) return Handicap; wxRect HandicapUp = GetUserUpHandicapButtonRect(); if ( HandicapUp.Contains( x, y ) ) return UpHandicapButton; wxRect HandicapDown = GetUserDownHandicapButtonRect(); if ( HandicapDown.Contains( x, y ) ) return DownHandicapButton; wxRect bot( 0, 0, USER_BOX_ICON_WIDTH, USER_BOX_ICON_HEIGHT ); if ( bot.Contains( x, y ) ) return Move; return Main; } void MapCtrl::DrawOutlinedText( wxDC& dc, const wxString& str, int x, int y, const wxColour& outline, const wxColour& font ) const { dc.SetTextForeground( outline ); dc.DrawText( str, x, y ); dc.DrawText( str, x, y+1 ); dc.DrawText( str, x+1, y ); dc.DrawText( str, x+2, y ); dc.DrawText( str, x, y+2 ); // Hack to get font outline dc.DrawText( str, x+2, y+2 ); dc.SetTextForeground( font ); dc.DrawText( str, x+1, y+1 ); } void MapCtrl::DrawUser( wxDC& dc, User& user, bool selected, bool /*unused*/ ) { wxBitmap* img; if ( !user.BattleStatus().IsBot() ) img = m_player_img; else img = m_bot_img; wxFont f( 9, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT ); dc.SetFont( f ); dc.SetTextForeground( *wxWHITE ); wxRect r = GetUserRect( user, selected ); wxColour col = user.BattleStatus().colour; if ( selected ) { /* Drawing the whole user-battle-settings-box deal */ DrawStartRect( dc, -1, r,ColourDelta( col, -40 ) , false, 180 , false); /* box background */ /* Side selector */ wxRect siderect = GetUserSideRect(); DrawOutlinedText( dc, _("side:"), r.x+3, r.y+siderect.y-1, wxColour(50,50,50), *wxWHITE ); if ( m_rect_area == Side ) { wxRect tmp( r.x+siderect.x-1, r.y+siderect.y-1, siderect.width+2, siderect.height+2 ); DrawStartRect( dc, -1, tmp, col, false ); } wxBitmap bmp = icons().GetBitmap( icons().GetSideIcon( m_battle->GetHostModName(), user.BattleStatus().side ) ); dc.DrawBitmap( bmp, r.x+siderect.x, r.y+siderect.y, true ); /* Draw the Ally Number numeric select */ wxRect updownallyrect = GetUserUpAllyButtonRect(); DrawOutlinedText( dc, wxFormat( _("ally: %d") ) % ( user.BattleStatus().ally + 1 ), r.x+3, r.y+updownallyrect.y, wxColour(50,50,50), *wxWHITE ); //dc.DrawText( wxFormat( _("ally: %d"), bot.BattleStatus().ally + 1 ), r.x+4, r.y+40 ); if ( m_rect_area == UpAllyButton ) dc.DrawBitmap( wxBitmap(upsel_down_xpm), r.x+updownallyrect.x, r.y+updownallyrect.y, true ); else if ( m_rect_area == DownAllyButton ) dc.DrawBitmap( wxBitmap(up_downsel_xpm), r.x+updownallyrect.x, r.y+updownallyrect.y, true ); else dc.DrawBitmap( wxBitmap(up_down_xpm), r.x+updownallyrect.x, r.y+updownallyrect.y, true ); /* Draw the Handicap numeric select */ wxRect updownhandicaprect = GetUserUpHandicapButtonRect(); wxFont b( 6, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT ); dc.SetFont( b ); DrawOutlinedText( dc, wxFormat( _("bonus: %d%%") ) % user.BattleStatus().handicap, r.x+3, r.y+updownhandicaprect.y+2, wxColour(50,50,50), *wxWHITE ); dc.SetFont( f ); if ( m_rect_area == UpHandicapButton ) dc.DrawBitmap( wxBitmap(upsel_down_xpm), r.x+updownhandicaprect.x, r.y+updownhandicaprect.y, true ); else if ( m_rect_area == DownHandicapButton ) dc.DrawBitmap( wxBitmap(up_downsel_xpm), r.x+updownhandicaprect.x, r.y+updownhandicaprect.y, true ); else dc.DrawBitmap( wxBitmap(up_down_xpm), r.x+updownhandicaprect.x, r.y+updownhandicaprect.y, true ); dc.SetPen( wxPen( col ) ); dc.SetBrush( wxBrush( col, wxSOLID ) ); dc.DrawRectangle( r.x+1, r.y+1, r.width-2, 18 ); /* Draw the little 'X' (close button) in the corner... */ if ( &user != &(m_battle->GetMe()) ) { wxRect closerect = GetUserCloseRect(); if ( m_rect_area == Close ) dc.DrawBitmap( *m_close_hi_img, r.x+closerect.x, r.y+closerect.y, true ); else dc.DrawBitmap( *m_close_img, r.x+closerect.x, r.y+closerect.y, true ); } dc.DrawBitmap( *img, r.x+2, r.y+2, true ); } else { /* Just drawing an icon */ dc.SetPen( wxPen( ColourDelta( col, -40 ) ) ); dc.SetBrush( wxBrush( col, wxSOLID ) ); dc.DrawRectangle( r.x, r.y, r.width, r.height ); dc.DrawBitmap( *img, r.x+ USER_BOX_ICON_PADDING, r.y+USER_BOX_ICON_PADDING, true ); int w, h; wxString allystr = wxFormat( _T("%d") ) % ( user.BattleStatus().ally + 1 ); dc.GetTextExtent( allystr, &w, &h ); DrawOutlinedText( dc, allystr, r.width - w - 3 + r.x, r.height - h - 1 + r.y, wxColour(50,50,50), *wxWHITE ); } } void MapCtrl::DrawUserPositions( wxDC& dc ) { wxLogDebugFunc(_T("") ); if ( m_battle == 0 ) return; if ( !m_battle->MapExists() ) return; wxRect mr = GetMinimapRect(); m_map = m_battle->LoadMap(); RequireImages(); for ( int i = 0; i < int(m_map.info.positions.size()); i++ ) { int x = (int)( (double)((double)m_map.info.positions[i].x / (double)m_map.info.width) * (double)mr.width ) - 8; int y = (int)( (double)(m_map.info.positions[i].y / (double)m_map.info.height) * (double)mr.height ) - 8; User* bot = 0; for ( unsigned int bi = 0; bi < m_battle->GetNumUsers(); bi++ ) { User& tbot = m_battle->GetUser(bi); if ( &tbot == 0 ) continue; if ( (tbot.BattleStatus().pos.x == m_map.info.positions[i].x) && (tbot.BattleStatus().pos.y == m_map.info.positions[i].y) ) { bot = &tbot; break; } } if ( bot != 0 ) continue; dc.DrawBitmap( *m_start_ally, x+mr.x, y+mr.y, true ); } int previousteam = -1; for ( unsigned int i = 0; i < m_battle->GetNumUsers(); i++ ) { User& usr = m_battle->GetUser(i); if ( &usr == 0 ) continue; if ( usr.BattleStatus().spectator ) continue; int currentteam = usr.BattleStatus().team; if ( currentteam == previousteam ) continue; else previousteam = currentteam; bool expanded = m_user_expanded; if ( !m_sp ) expanded = false; DrawUser( dc, usr, (m_maction != Moved) && expanded, (m_maction == Moved) && expanded ); } } void MapCtrl::OnPaint( wxPaintEvent& WXUNUSED(event) ) { wxLogDebugFunc( _T("") ); wxPaintDC dc( this ); DrawBackground( dc ); if ( m_battle == 0 ) return; if ( !m_minimap ) return; long longval; m_battle->CustomBattleOptions().getSingleValue( _T("startpostype") , OptionsWrapper::EngineOption ).ToLong( &longval ); if ( m_draw_start_types ) { if ( longval == IBattle::ST_Choose ) { DrawStartRects( dc ); // Draw add rect. if ( m_tmp_brect.ally != -1 ) { wxRect tmp=GetStartRect(m_tmp_brect); DrawStartRect( dc, m_tmp_brect.ally, tmp, *wxWHITE, false ); } } else if ( longval == IBattle::ST_Pick ) { DrawUserPositions( dc ); } else { DrawStartPositions( dc ); } } } void MapCtrl::OnResize( wxSizeEvent& /*unused*/ ) { UpdateMinimap(); } void MapCtrl::OnMouseMove( wxMouseEvent& event ) { wxPoint p = event.GetPosition(); if ( m_battle == 0 ) return; if ( p == wxDefaultPosition ) return; long longval; m_battle->CustomBattleOptions().getSingleValue( _T("startpostype") , OptionsWrapper::EngineOption ).ToLong( &longval ); if ( longval == IBattle::ST_Pick ) { if ( !m_battle->MapExists() ) return; if ( m_maction == Moved ) { User& user = *m_user_expanded; try { ASSERT_LOGIC( &user != 0, _T("MapCtrl::OnMouseMove(): user = 0") ); } catch (...) { return; } m_map = m_battle->LoadMap(); wxRect mr = GetMinimapRect(); wxRect r = GetUserRect( user, false ); user.BattleStatus().pos.x = (int)( ( (double)(event.GetX() - mr.x) / (double)mr.width ) * (double)m_map.info.width ); user.BattleStatus().pos.y = (int)( ( (double)(event.GetY() - mr.y) / (double)mr.height ) * (double)m_map.info.height ); user.BattleStatus().pos.x = LSL::Util::Clamp( user.BattleStatus().pos.x, 0, m_map.info.width ); user.BattleStatus().pos.y = LSL::Util::Clamp( user.BattleStatus().pos.y, 0, m_map.info.height ); int x, y, index, range; GetClosestStartPos( user.BattleStatus().pos.x, user.BattleStatus().pos.y, index, x, y, range ); if ( index != -1 ) { if ( range < (10.0 / (double)mr.width) * (double)m_map.info.width ) { user.BattleStatus().pos.x = x; user.BattleStatus().pos.y = y; } } RefreshRect( r.Union( GetUserRect( user, false ) ), false ); return; } if ( !m_user_expanded || !m_battle->UserExists( m_user_expanded->GetNick() ) ) m_user_expanded = 0; if ( m_user_expanded ) { User& user = *m_user_expanded; try { ASSERT_LOGIC( &user != 0, _T("MapCtrl::OnMouseMove(): user = 0") ); } catch (...) { return; } wxRect r = GetUserRect( user, true ); if ( r.Contains( event.GetX(), event.GetY() ) ) { RectangleArea last = m_rect_area; m_rect_area = GetUserRectArea( r, event.GetX(), event.GetY() ); if ( last != m_rect_area ) RefreshRect( r, false ); } else { m_user_expanded = 0; RefreshRect( r, false ); } } else { for ( unsigned int i = 0; i < m_battle->GetNumUsers(); i++ ) { User& user = m_battle->GetUser(i); if ( &user == 0 ) continue; wxRect r = GetUserRect( user, false ); if ( r.Contains( event.GetX(), event.GetY() ) ) { m_rect_area = GetUserRectArea( r, event.GetX(), event.GetY() ); m_user_expanded = &user; RefreshRect( GetUserRect( user, true ), false ); break; } } } return; } if ( !m_minimap ) { wxRect r = GetRefreshRect(); wxRect d = GetDownloadRect(); RectangleArea old = m_rect_area; if ( r.Contains( event.GetX(), event.GetY() ) ) { m_rect_area = Refreshing; } else if ( d.Contains( event.GetX(), event.GetY() ) ) { m_rect_area = Download; } else { m_rect_area = Main; } _SetCursor(); if ( m_rect_area != old ) { Refresh(); Update(); } return; } if ( !m_draw_start_types ) return; if ( longval != IBattle::ST_Choose ) return; if ( m_maction == Add ) { // We are currently adding a rect. wxRect oldr = GetStartRect( m_tmp_brect ); m_tmp_brect = GetBattleRect(m_mdown_xevent.GetX()?m_mdown_x:event.GetX(), m_mdown_y>event.GetY()?m_mdown_y:event.GetY(), m_tmp_brect.ally ); wxRect newr = GetStartRect( m_tmp_brect ); if ( newr != oldr ) RefreshRect( newr.Union( oldr ), false ); return; } else if ( m_maction == ResizeDownRight ) { wxRect sr = GetStartRect( m_mdown_rect ); wxRect nsr( sr.x, sr.y, event.GetX() - sr.x, event.GetY() - sr.y ); if ( nsr.width < minboxsize ) nsr.SetWidth( minboxsize ); if ( nsr.height < minboxsize ) nsr.SetHeight( minboxsize ); BattleStartRect bsr = GetBattleRect( nsr.x, nsr.y, nsr.x + nsr.width, nsr.y + nsr.height, m_mdown_rect ); m_battle->AddStartRect( m_mdown_rect, bsr.left, bsr.top, bsr.right, bsr.bottom ); m_battle->StartRectAdded( m_mdown_rect ); m_battle->ResizeStartRect( m_mdown_rect ); // ugly fix. nsr = GetStartRect(bsr); if ( sr != nsr ) RefreshRect( sr.Union( nsr ), false ); return; } else if ( m_maction == ResizeUpLeft ) { wxRect sr = GetStartRect( m_mdown_rect ); wxRect nsr( event.GetX(), event.GetY(), (sr.x - event.GetX()) + sr.width, (sr.y - event.GetY()) + sr.height ); if ( nsr.width < minboxsize ) { nsr.SetLeft( event.GetX() - minboxsize + nsr.width ); nsr.SetWidth( minboxsize ); } if ( nsr.height < minboxsize ) { nsr.SetTop( event.GetY() - minboxsize + nsr.height ); nsr.SetHeight( minboxsize ); } BattleStartRect bsr = GetBattleRect( nsr.x, nsr.y, nsr.x + nsr.width, nsr.y + nsr.height, m_mdown_rect ); m_battle->AddStartRect( m_mdown_rect, bsr.left, bsr.top, bsr.right, bsr.bottom ); m_battle->StartRectAdded( m_mdown_rect ); m_battle->ResizeStartRect( m_mdown_rect ); // ugly fix. nsr = GetStartRect(bsr); if ( sr != nsr ) RefreshRect( sr.Union( nsr ), false ); return; } // Make sure point is inside minimap if ( GetMinimapRect().Contains( p ) ) { // Check if point is in a startrect. for ( int i = m_battle->GetLastRectIdx(); i >= 0; i-- ) { wxRect r = GetStartRect( i ); if ( r.IsEmpty() ) continue; if ( r.Contains( p ) ) { if ( !m_ro ) { if ( (wxRect( r.x + r.width - m_close_img->GetWidth(), r.y + 1, m_close_img->GetWidth(), m_close_img->GetWidth() )).Contains( p ) ) m_rect_area = UpRight; else if ( (wxRect( r.x, r.y, boxsize, boxsize )).Contains( p ) ) m_rect_area = UpLeft; else if ( (wxRect( r.x + r.width - boxsize, r.y + r.height - boxsize, boxsize, boxsize )).Contains( p ) ) m_rect_area = DownRight; //else if ( (wxRect( r.x, r.y + r.height - boxsize, boxsize, boxsize )).Contains( p ) ) m_rect_area = DownLeft; else m_rect_area = Main; } SetMouseOverRect( i ); return; } } if ( m_mover_rect != -1 ) SetMouseOverRect( -1 ); } else { if ( m_mover_rect != -2 ) SetMouseOverRect( -2 ); } } void MapCtrl::OnLeftDown( wxMouseEvent& event ) { if ( m_battle == 0 ) return; long longval; m_battle->CustomBattleOptions().getSingleValue( _T("startpostype") , OptionsWrapper::EngineOption ).ToLong( &longval ); if ( !m_ro ) { if ( longval == IBattle::ST_Pick ) { if ( m_user_expanded ) m_mdown_area = m_rect_area; else return; if ( m_mdown_area == Move ) m_maction = Moved; else m_maction = None; User& user = *m_user_expanded; try { ASSERT_LOGIC( &user != 0, _T("MapCtrl::OnLeftDown(): user = 0") ); } catch (...) { return; } RefreshRect( GetUserRect( user, true ), false ); return; } } if ( !m_minimap ) { if ( m_rect_area != Main ) { m_mdown_area = m_rect_area; Refresh(); Update(); } return; } if ( !m_draw_start_types ) return; if ( longval != IBattle::ST_Choose ) return; if ( !m_ro ) { // In edit mode if ( m_mover_rect >= 0 ) { // We are over an existing rect. m_mdown_area = m_rect_area; m_mdown_rect = m_mover_rect; m_mdown_x = event.GetX(); m_mdown_y = event.GetY(); if ( m_mdown_area == UpLeft ) { m_maction = ResizeUpLeft; } else if ( m_mdown_area == UpRight ) { m_maction = Delete; } else if ( m_mdown_area == DownLeft ) { // m_maction = ResizeDownLeft; } else if ( m_mdown_area == DownRight ) { m_maction = ResizeDownRight; } else if ( m_mdown_area == Main ) { m_maction = Moved; } } else if ( m_mover_rect == -1 ) { // We are over empty minimap area. m_maction = Add; // Add new start rect. m_mdown_x = event.GetX(); m_mdown_y = event.GetY(); m_tmp_brect.ally = GetNewRectIndex(); } else if ( m_mover_rect == -2 ) { // We are outside the minimap. } } else { // Readonly. if ( m_mover_rect >= 0 ) { // Join ally rect that user clicked on m_battle->GetMe().BattleStatus().ally = m_mover_rect; } m_maction = None; } } void MapCtrl::OnLeftUp( wxMouseEvent& event ) { if ( m_battle == 0 ) return; long longval; m_battle->CustomBattleOptions().getSingleValue( _T("startpostype") , OptionsWrapper::EngineOption ).ToLong( &longval ); if ( longval == IBattle::ST_Pick ) { if ( !m_user_expanded ) return; if ( m_rect_area != m_mdown_area ) return; User& user = *m_user_expanded; try { ASSERT_LOGIC( &user != 0, _T("MapCtrl::OnLeftUp(): user == 0") ); } catch (...) { return; } if ( ( m_mdown_area == Move ) && ( m_maction == Moved ) ) { m_battle->UserPositionChanged( user ); } else if ( m_mdown_area == UpAllyButton ) { user.BattleStatus().ally = ( user.BattleStatus().ally + 1 ) % SPRING_MAX_ALLIES; RefreshRect( GetUserRect( user, true ), false ); } else if ( m_mdown_area == DownAllyButton ) { user.BattleStatus().ally = (user.BattleStatus().ally - 1) >= 0 ? (user.BattleStatus().ally - 1) : ( SPRING_MAX_ALLIES -1 ); RefreshRect( GetUserRect( user, true ), false ); } else if ( m_mdown_area == UpHandicapButton ) { if ( user.BattleStatus().handicap == 100 ) user.BattleStatus().handicap = 0; else user.BattleStatus().handicap = ( user.BattleStatus().handicap + 5 ); RefreshRect( GetUserRect( user, true ), false ); } else if ( m_mdown_area == DownHandicapButton ) { user.BattleStatus().handicap = (user.BattleStatus().handicap - 5) >= 0 ? (user.BattleStatus().handicap - 5) : 100; RefreshRect( GetUserRect( user, true ), false ); } else if ( m_mdown_area == Side ) { try { wxArrayString sides = usync().GetSides( m_battle->GetHostModName() ); unsigned int sidecount = sides.GetCount(); if ( sidecount > 0 ) user.BattleStatus().side = (user.BattleStatus().side + 1) % sidecount; else user.BattleStatus().side = 0; } catch (...) {} RefreshRect( GetUserRect( user, true ), false ); } else if ( m_mdown_area == Close && m_user_expanded != &m_battle->GetMe() ) { wxRect r = GetUserRect( user, true ); m_battle->KickPlayer( user ); RefreshRect( r, false ); m_user_expanded = 0; } m_mdown_area = Main; m_maction = None; return; } if ( !m_minimap ) { if ( m_mdown_area == m_rect_area ) { if ( m_mdown_area == Refreshing ) { usync().AddReloadEvent(); m_battle->Update( wxFormat( _T("%d_mapname") ) % OptionsWrapper::PrivateOptions ); UpdateMinimap(); } else if ( m_mdown_area == Download ) { ui().DownloadMap( m_battle->GetHostMapHash(), m_battle->GetHostMapName() ); } } m_mdown_area = Main; Refresh(); Update(); return; } if ( !m_draw_start_types ) return; if ( longval != IBattle::ST_Choose ) return; if ( m_maction == Add ) { m_tmp_brect.ally = -1; if ( ( abs( m_mdown_x - event.GetX() ) >= minboxsize ) && ( abs( m_mdown_y - event.GetY() ) >= minboxsize ) ) { BattleStartRect r = GetBattleRect( m_mdown_xevent.GetX()?m_mdown_x:event.GetX(), m_mdown_y>event.GetY()?m_mdown_y:event.GetY() ); m_battle->AddStartRect( GetNewRectIndex(), r.left, r.top, r.right, r.bottom ); } else { BattleStartRect r = GetBattleRect( m_mdown_x, m_mdown_y, m_mdown_x + minboxsize, m_mdown_y + minboxsize ); m_battle->AddStartRect( GetNewRectIndex(), r.left, r.top, r.right, r.bottom ); } m_battle->SendHostInfo( IBattle::HI_StartRects ); UpdateMinimap(); } else if ( m_maction == Delete ) { if ( (m_mdown_area == m_rect_area) && (m_mover_rect == m_mdown_rect) ) { m_battle->RemoveStartRect( m_mdown_rect ); UpdateMinimap(); m_battle->SendHostInfo( IBattle::HI_StartRects ); } } else if ( (m_maction == ResizeDownRight)||(m_maction == ResizeUpLeft) ) { m_battle->ResizeStartRect( m_mdown_rect ); m_battle->SendHostInfo( IBattle::HI_StartRects ); } m_maction = None; } void MapCtrl::OnMouseWheel( wxMouseEvent& event ) { if (m_metalmap) { int idx = (int) m_current_infomap; if (event.m_wheelRotation > 0) { ++idx; if (idx >= IM_Count) idx = IM_Minimap; } else { --idx; if (idx < IM_Minimap) idx = IM_Count - 1; } m_current_infomap = (InfoMap) idx; Refresh(); Update(); } } void MapCtrl::OnGetMapImageAsyncCompleted( wxCommandEvent& event ) { wxLogDebugFunc( _T("") ); wxString mapname = event.GetString(); if ( mapname != m_mapname ) return; const int w = m_lastsize.GetWidth(); const int h = m_lastsize.GetHeight(); if ( m_minimap == NULL ) { m_minimap = new wxBitmap( usync().GetMinimap( m_mapname, w, h ) ); // this ensures metalmap and heightmap aren't loaded in battlelist if (m_draw_start_types && usync().VersionSupports(SpringUnitSync::USYNC_GetInfoMap)) m_async.GetMetalmap( m_mapname, w, h ); } else if ( m_metalmap == NULL ) { m_metalmap = new wxBitmap( usync().GetMetalmap( m_mapname, w, h ) ); // singleplayer mode doesn't allow startboxes anyway m_metalmap_cumulative = usync().GetMetalmap( m_mapname ); Accumulate( m_metalmap_cumulative ); m_async.GetHeightmap( m_mapname, w, h ); } else if ( m_heightmap == NULL ) { m_heightmap = new wxBitmap( usync().GetHeightmap( m_mapname, w, h ) ); } Refresh(); Update(); } springlobby-0.169/src/mapctrl.h0000600000176000000410000001370512105760300020027 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_MAPCTRL_H #define SPRINGLOBBY_HEADERGUARD_MAPCTRL_H #include #include #include #include "ibattle.h" #include "springunitsync.h" class wxPanel; class wxBitmap; class wxDC; class Battle; struct BattleStartRect; class SinglePlayerBattle; class Ui; struct UnitSyncMap; class BattleRoomTab; class MapCtrl : public wxPanel { enum RectangleArea { Main = -1, UpLeft, UpRight, DownRight, DownLeft, UpAllyButton, DownAllyButton, Side, UpHandicapButton, DownHandicapButton, Handicap, Close, Move, Download, Refreshing }; enum MouseAction { None, Add, Delete, Moved, ResizeUpLeft, ResizeUpRight, ResizeDownLeft, ResizeDownRight }; enum UserRectOrientation { TopLeft, BottomLeft, TopRight, BottomRight }; public: MapCtrl( wxWindow* parent, int size, IBattle* battle, bool readonly, bool fixed_size, bool draw_start_types, bool singleplayer ); ~MapCtrl(); void SetBattle( IBattle* battle ); void UpdateMinimap(); void OnPaint( wxPaintEvent& event ); void OnResize( wxSizeEvent& event ); void OnMouseMove( wxMouseEvent& event ); void OnLeftDown( wxMouseEvent& event ); void OnLeftUp( wxMouseEvent& event ); void OnMouseWheel( wxMouseEvent& event ); void OnGetMapImageAsyncCompleted( wxCommandEvent& event ); void SetReadOnly( bool readonly ) { m_ro = readonly; } protected: int LoadMinimap(); void FreeMinimap(); BattleStartRect GetBattleRect( int x1, int y1, int x2, int y2, int ally = -1 ) const; /** Get the rect occupied by the minimap. * * @see GetDrawableRect */ wxRect GetMinimapRect() const; /** Get the widget-drawable area as a wxRect. This is similar to * GetMinimapRect, but includes the area not filled by the minimap. * * @return The wxRect corresponding {0, 0, ClientWidth, ClientHeight}. * * @see GetMinimapRect, wxWindow::GetClientSize */ wxRect GetDrawableRect() const; wxRect GetStartRect( int index ) const; wxRect GetStartRect( const BattleStartRect& sr ) const; void Accumulate( wxImage& image ) const; double GetStartRectMetalFraction( int index ) const; double GetStartRectMetalFraction( const BattleStartRect& sr ) const; void DrawOutlinedText( wxDC& dc, const wxString& str, int x, int y, const wxColour& outline, const wxColour& font ) const; /** Get the relative (range: [0.0,1.0]) x- and y- coordinates of * the user's start position. */ wxRealPoint GetUserMapPositionAsReal(const User& user) const; /** Get an absolute (relative to the client's [*this* MapCtrl * widget's] drawable area) user map position. * * The returned point is as would be used with wxDC methods. */ wxPoint GetTranslatedScaledUserMapPosition(const User& user) const; wxRect GetUserRect( const User& user, bool selected ); RectangleArea GetUserRectArea( const wxRect& userrect, int x, int y ) const; wxRect GetUserSideRect() const { return wxRect( 37, 20, 16, 16 ); } wxRect GetUserHandicapRect()const { return wxRect( 40, 55, 16, 16 ); } wxRect GetUserCloseRect() const { return wxRect( 59, 4, 14, 14 ); } wxRect GetUserUpAllyButtonRect() const { return wxRect( 61, 35, 12, 8 ); } wxRect GetUserDownAllyButtonRect() const { return wxRect( 61, 43, 12, 8 ); } wxRect GetUserUpHandicapButtonRect() const { return wxRect( 61, 52, 12, 8 ); } wxRect GetUserDownHandicapButtonRect() const { return wxRect( 61, 60, 12, 8 ); } wxRect GetRefreshRect() const; wxRect GetDownloadRect() const; unsigned int GetNewRectIndex() const; void RequireImages(); void RelocateUsers(); void GetClosestStartPos( int fromx, int fromy, int& index, int& x, int& y, int& range ); void DrawUser( wxDC& dc, User& user, bool selected, bool moving ); void DrawUserPositions( wxDC& dc ); void DrawBackground( wxDC& dc ); void DrawStartRects( wxDC& dc ); void DrawStartPositions( wxDC& dc ); void DrawStartRect( wxDC& dc, int index, wxRect& sr, const wxColour& col, bool mouseover, int alphalevel = 70, bool forceInsideMinimap = true ); void SetMouseOverRect( int index ); void _SetCursor(); UnitSyncAsyncOps m_async; wxBitmap* m_minimap; wxBitmap* m_metalmap; wxBitmap* m_heightmap; wxImage m_metalmap_cumulative; IBattle* m_battle; wxString m_mapname; bool m_draw_start_types; bool m_fixed_size; bool m_ro; bool m_sp; int m_mover_rect; int m_mdown_rect; RectangleArea m_rect_area; RectangleArea m_last_rect_area; RectangleArea m_mdown_area; BattleStartRect m_tmp_brect; MouseAction m_maction; int m_mdown_x; int m_mdown_y; wxSize m_lastsize; wxBitmap* m_close_img; wxBitmap* m_close_hi_img; wxBitmap* m_start_ally; wxBitmap* m_start_enemy; wxBitmap* m_start_unused; wxBitmap* m_player_img; wxBitmap* m_bot_img; wxBitmap* m_nfound_img; wxBitmap* m_reload_img; wxBitmap* m_dl_img; UnitSyncMap m_map; User* m_user_expanded; enum InfoMap { IM_Minimap, // must be first one IM_Metalmap, // entries must be consecutively numbered (without gaps) IM_Heightmap, IM_Count // must be last one } m_current_infomap; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_MAPCTRL_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/mapgridctrl.cpp0000600000176000000410000004125012105760300021224 0ustar buildbotwww-data00000000000000/* Copyright (C) 2008 The SpringLobby Team. All rights reserved. */ /* Author: Tobi Vollebregt */ #include "mapgridctrl.h" #include "settings.h" #include "uiutils.h" #include "utils/debug.h" #include "utils/conversion.h" #include #include #include #include #include #include "images/map_select_1.png.h" #include "images/map_select_2.png.h" /// Size of the map previews. This should be same as size of map previews in /// battle list and as prefetch size in SpringUnitSync for performance reasons. const int MINIMAP_SIZE = 98; /// Margin between the map previews, in pixels. const int MINIMAP_MARGIN = 1; /// Maximum minimap fetches in WorkerThread queue /// (these will still be executed after control is destroyed) const int MAX_MINIMAP_FETCHES = 2; /// Maximum mapinfo fetches in WorkerThread queue const int MAX_MAPINFO_FETCHES = 5; BEGIN_EVENT_TABLE( MapGridCtrl, wxPanel ) EVT_PAINT( MapGridCtrl::OnPaint ) EVT_SIZE( MapGridCtrl::OnResize ) EVT_MOTION( MapGridCtrl::OnMouseMove ) EVT_LEFT_DOWN( MapGridCtrl::OnLeftDown ) EVT_LEFT_UP( MapGridCtrl::OnLeftUp ) EVT_COMMAND( 2, UnitSyncAsyncOperationCompletedEvt, MapGridCtrl::OnGetMapImageAsyncCompleted ) EVT_COMMAND( 3, UnitSyncAsyncOperationCompletedEvt, MapGridCtrl::OnGetMapExAsyncCompleted ) END_EVENT_TABLE() const wxEventType MapGridCtrl::MapSelectedEvt = wxNewEventType(); const wxEventType MapGridCtrl::LoadingCompletedEvt = wxNewEventType(); MapGridCtrl::MapGridCtrl( wxWindow* parent, wxSize size, wxWindowID id ) : wxPanel( parent, id, wxDefaultPosition, size, wxSIMPLE_BORDER|wxFULL_REPAINT_ON_RESIZE ) , m_async( this ) , m_selection_follows_mouse( sett().GetMapSelectorFollowsMouse() ) , m_size( 0, 0 ) , m_pos( 0, 0 ) , m_in_mouse_drag( false ) , m_async_mapinfo_fetches( 0 ) , m_async_minimap_fetches( 0 ) , m_mouseover_map( NULL ) , m_selected_map( NULL ) { SetBackgroundStyle( wxBG_STYLE_CUSTOM ); SetBackgroundColour( *wxLIGHT_GREY ); m_img_background.Create( MINIMAP_SIZE, MINIMAP_SIZE, false /*don't clear*/ ); wxRect rect( 0, 0, MINIMAP_SIZE, MINIMAP_SIZE ); wxColour color( GetBackgroundColour() ); m_img_background.SetRGB( rect, color.Red(), color.Green(), color.Blue() ); m_img_minimap_alpha = charArr2wxImage( map_select_1_png, sizeof(map_select_1_png) ); m_img_foreground = charArr2wxImage( map_select_2_png, sizeof(map_select_2_png) ); ASSERT_EXCEPTION( m_img_minimap_alpha.HasAlpha(), _T("map_select_1_png must have an alpha channel") ); ASSERT_EXCEPTION( m_img_foreground.HasAlpha(), _T("map_select_2_png must have an alpha channel") ); m_img_minimap_loading = wxBitmap( BlendImage( m_img_foreground, m_img_background, false ) ); } MapGridCtrl::~MapGridCtrl() { } #define CMP( var ) \ if ( a->info.var < b->info.var ) return -1; \ if ( a->info.var > b->info.var ) return 1; \ return 0 #define CMP2( a, b ) \ if ( (a) < (b) ) return -1; \ if ( (a) > (b) ) return 1; \ return 0 inline int MapGridCtrl::CompareName( const MapData* a, const MapData* b ) { return a->name.CmpNoCase( b->name ); } inline int MapGridCtrl::CompareTidalStrength( const MapData* a, const MapData* b ) { CMP( tidalStrength ); } inline int MapGridCtrl::CompareGravity( const MapData* a, const MapData* b ) { CMP( gravity ); } inline int MapGridCtrl::CompareMaxMetal( const MapData* a, const MapData* b ) { CMP( maxMetal ); } inline int MapGridCtrl::CompareExtractorRadius( const MapData* a, const MapData* b ) { CMP( extractorRadius ); } inline int MapGridCtrl::CompareMinWind( const MapData* a, const MapData* b ) { CMP( minWind ); } inline int MapGridCtrl::CompareMaxWind( const MapData* a, const MapData* b ) { CMP( maxWind ); } inline int MapGridCtrl::CompareWind( const MapData* a, const MapData* b ) { CMP2( (a->info.minWind + a->info.maxWind), (b->info.minWind + b->info.maxWind) ); } inline int MapGridCtrl::CompareArea( const MapData* a, const MapData* b ) { CMP2( (a->info.width * a->info.height), (b->info.width * b->info.height) ); } static inline double AspectRatio( const MapInfo& x ) { const int max = std::max( x.width, x.height ); const int min = std::min( x.width, x.height ); return (double) max / (min != 0 ? min : 1); } inline int MapGridCtrl::CompareAspectRatio( const MapData* a, const MapData* b ) { CMP2( AspectRatio( a->info ), AspectRatio( b->info ) ); } inline int MapGridCtrl::ComparePosCount( const MapData* a, const MapData* b ) { CMP( positions.size() ); } #undef CMP2 #undef CMP template< class Compare > inline void MapGridCtrl::_Sort( int dimension, Compare cmp ) { if ( dimension <= 1 ) { // vertical sort (ie. sort entire dataset) std::stable_sort( m_grid.begin(), m_grid.end(), cmp ); } else /*if ( dimension == 2 )*/ { // horizontal sort (ie. sort each row individually) for ( int y = 0; y < m_size.y; ++y ) { const int idx1 = y * m_size.x; const int idx2 = std::min( int(m_grid.size()), idx1 + m_size.x ); std::stable_sort( m_grid.begin() + idx1, m_grid.begin() + idx2, cmp ); } } } void MapGridCtrl::Sort( SortKey vertical, SortKey horizontal, bool vertical_direction, bool horizontal_direction ) { if ( m_maps.empty() ) return; // Always start by sorting on name, to get duplicate maps together. SortKey keys[3] = { SortKey_Name, vertical, horizontal }; bool dirs[3] = { false, vertical_direction, horizontal_direction }; // This looks like common antipattern 'loop switch sequence', however here // it's the best way I found to prevent duplication of the switch statement, // which will probably require most (all?) changes and possibly grow big. for (int i = 0; i < 3; ++i) { // Do nothing if current sortkey is same as previous one. if ( i > 0 && keys[i] == keys[i - 1] && dirs[i] == dirs[i - 1] ) continue; // Sort dimension i on sortkey keys[i]. const bool d = dirs[i]; switch ( keys[i] ) { case SortKey_Name: _Sort( i, _Compare( d, CompareName ) ); break; case SortKey_TidalStrength: _Sort( i, _Compare( d, CompareTidalStrength ) ); break; case SortKey_Gravity: _Sort( i, _Compare( d, CompareGravity ) ); break; case SortKey_MaxMetal: _Sort( i, _Compare( d, CompareMaxMetal ) ); break; case SortKey_ExtractorRadius: _Sort( i, _Compare( d, CompareExtractorRadius ) ); break; case SortKey_MinWind: _Sort( i, _Compare( d, CompareMinWind ) ); break; case SortKey_MaxWind: _Sort( i, _Compare( d, CompareMaxWind ) ); break; case SortKey_Wind: _Sort( i, _Compare( d, CompareWind ) ); break; case SortKey_Area: _Sort( i, _Compare( d, CompareArea ) ); break; case SortKey_AspectRatio: _Sort( i, _Compare( d, CompareAspectRatio ) ); break; case SortKey_PosCount: _Sort( i, _Compare( d, ComparePosCount ) ); break; default: ASSERT_EXCEPTION( false, _T("unimplemented SortKey in MapGridCtrl::Sort") ); break; } } } void MapGridCtrl::Clear() { m_maps_unused.insert( m_maps.begin(), m_maps.end() ); m_maps_unused.insert( m_maps_filtered.begin(), m_maps_filtered.end() ); m_pending_maps.clear(); m_maps.clear(); m_maps_filtered.clear(); m_grid.clear(); m_mouseover_map = NULL; // can't be sure pointer will stay valid m_selected_map = NULL; } void MapGridCtrl::AddMap( const wxString& mapname ) { // no duplicates (would crash because of dangling MapData pointers in m_grid) if ( m_maps.find( mapname ) != m_maps.end() ) return; // check if we still have it in m_maps_unused.. MapMap::iterator it = m_maps_unused.find( mapname ); if ( it != m_maps_unused.end() ) { m_maps.insert( *it ); m_grid.push_back( &m_maps[mapname] ); m_maps_unused.erase( it ); UpdateGridSize(); return; } // if not, get it from unitsync FetchMapInfo( mapname ); } void MapGridCtrl::AddMap( const UnitSyncMap& map ) { // no duplicates (would crash because of dangling MapData pointers in m_grid) if ( m_maps.find( map.name ) != m_maps.end() ) return; // don't want map to exist in both m_maps and m_maps_unused. m_maps_unused.erase( map.name ); m_maps[map.name] = map; m_grid.push_back( &m_maps[map.name] ); UpdateGridSize(); } void MapGridCtrl::UpdateGridSize() { // recalculate grid size (keep it approximately square) const int width = int(sqrt( double(m_maps.size()) ) + 0.5); m_size.x = width; m_size.y = (m_maps.size() + width - 1) / width; CheckInBounds(); } void MapGridCtrl::CheckInBounds() { const int size = MINIMAP_SIZE + MINIMAP_MARGIN; int width, height; GetClientSize( &width, &height ); // this ensures always at least a quarter of the client area contains minimaps //m_pos.x = std::max( -width / 2, std::min( size * m_size.x - width / 2, m_pos.x ) ); //m_pos.y = std::max( -height / 2, std::min( size * m_size.y - height / 2, m_pos.y ) ); // this ensures the maps are centered when they fit on the screen, // otherwise it ensures the entire client area contains minimaps. if ( width / size >= m_size.x ) m_pos.x = -(width - m_size.x * size) / 2; else m_pos.x = std::max( -1, std::min( size * m_size.x - width, m_pos.x ) ); if ( height / size >= m_size.y ) m_pos.y = -(height - m_size.y * size) / 2; else m_pos.y = std::max( -1, std::min( size * m_size.y - height, m_pos.y ) ); } void MapGridCtrl::UpdateAsyncFetches() { while ( m_async_mapinfo_fetches < MAX_MAPINFO_FETCHES && !m_pending_maps.empty() ) { wxString mapname = m_pending_maps.back(); m_pending_maps.pop_back(); FetchMapInfo( mapname ); } // no minimap fetches until all mapinfo fetches are finished if ( m_async_mapinfo_fetches == 0 && m_async_minimap_fetches == 0 ) { for (int y = 0; y < m_size.y; ++y) { for (int x = 0; x < m_size.x; ++x) { const int idx = y * m_size.x + x; if ( idx >= int(m_grid.size()) ) break; if ( m_grid[idx]->state == MapState_NoMinimap ) { FetchMinimap( *m_grid[idx] ); return; } } } } } void MapGridCtrl::FetchMapInfo( const wxString& mapname ) { if ( m_async_mapinfo_fetches < MAX_MAPINFO_FETCHES ) { m_async.GetMapEx( mapname ); ++m_async_mapinfo_fetches; } else { m_pending_maps.push_back( mapname ); } } void MapGridCtrl::FetchMinimap( MapData& map ) { // must be finished fetching mapinfos if ( m_async_mapinfo_fetches == 0 && m_async_minimap_fetches < MAX_MINIMAP_FETCHES ) { m_async.GetMinimap( map.name, MINIMAP_SIZE, MINIMAP_SIZE ); map.state = MapState_GetMinimap; ++m_async_minimap_fetches; } } void MapGridCtrl::DrawMap( wxDC& dc, MapData& map, int x, int y ) { switch ( map.state ) { case MapState_NoMinimap: FetchMinimap( map ); // fall through, both when starting fetch and when waiting // for it to finish, we want to show temporary image case MapState_GetMinimap: // draw temporary image while waiting for async fetch of minimap dc.DrawBitmap( m_img_minimap_loading, x, y ); break; case MapState_GotMinimap: x += (MINIMAP_SIZE - map.minimap.GetWidth()) / 2; y += (MINIMAP_SIZE - map.minimap.GetHeight()) / 2; dc.DrawBitmap( map.minimap, x, y, false ); // draw selection if ( &map == m_selected_map ) { dc.SetPen( wxPen( wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHT ) ) ); dc.SetBrush( wxBrush( wxColour(0, 0, 0), wxTRANSPARENT ) ); dc.DrawRectangle( x - 1, y - 1, map.minimap.GetWidth() + 2, map.minimap.GetHeight() + 2 ); } break; default: wxLogError( _T("unknonw map.state in MapGridCtrl::DrawMap") ); break; } } void MapGridCtrl::DrawBackground( wxDC& dc ) { int width, height; GetClientSize( &width, &height ); dc.SetPen( wxPen( *wxLIGHT_GREY ) ); dc.SetBrush( wxBrush( *wxLIGHT_GREY, wxSOLID ) ); dc.DrawRectangle( 0, 0, width, height ); } void MapGridCtrl::OnPaint( wxPaintEvent& /*unused*/ ) { // This line must come first, to avoid an endless succession of paint messages. // OnPaint handlers must always create a wxPaintDC. wxAutoBufferedPaintDC dc( this ); DrawBackground( dc ); if ( m_maps.empty() ) return; int width, height; GetClientSize( &width, &height ); const int size = MINIMAP_SIZE + MINIMAP_MARGIN; // simple tile mapping algorithm int start_scrn_x = -(m_pos.x % size); int start_scrn_y = -(m_pos.y % size); int start_grid_x = m_pos.x / size; int start_grid_y = m_pos.y / size; int end_grid_x = std::min(start_grid_x + (width + 2 * size - 1) / size, m_size.x); int end_grid_y = std::min(start_grid_y + (height + 2 * size - 1) / size, m_size.y); if ( start_grid_x < 0 ) { start_scrn_x += size * -start_grid_x; start_grid_x = 0; } if ( start_grid_y < 0 ) { start_scrn_y += size * -start_grid_y; start_grid_y = 0; } for (int y = start_grid_y, scrn_y = start_scrn_y; y < end_grid_y; ++y, scrn_y += size) { for (int x = start_grid_x, scrn_x = start_scrn_x; x < end_grid_x; ++x, scrn_x += size) { const int idx = y * m_size.x + x; if ( idx >= int(m_grid.size()) ) break; DrawMap( dc, *m_grid[idx], scrn_x, scrn_y ); } } } void MapGridCtrl::OnResize( wxSizeEvent& ) { CheckInBounds(); } void MapGridCtrl::OnMouseMove( wxMouseEvent& event ) { SetCursor( wxCursor( wxCURSOR_HAND ) ); if ( m_in_mouse_drag ) { // Fix for for not receiving LeftUp event when left button // is released outside the control (happens on Windows.) if ( !event.LeftIsDown() ) { OnLeftUp( event ); return; } m_pos -= (event.GetPosition() - m_last_mouse_pos); m_last_mouse_pos = event.GetPosition(); CheckInBounds(); Refresh(); } else { const wxPoint pos_unscaled = event.GetPosition() + m_pos; const wxPoint pos = wxPoint2DInt(pos_unscaled) / (MINIMAP_SIZE + MINIMAP_MARGIN); const int idx = pos.y * m_size.x + pos.x; MapData* old_mouseover_map = m_mouseover_map; // use pos_unscaled for tests against 0 because negative values lower // than MINIMAP_SIZE get rounded up to 0 when diviving by MINIMAP_SIZE.. if ( pos_unscaled.x >= 0 && pos.x < m_size.x && pos_unscaled.y >= 0 && pos.y <= m_size.y && idx < (int)m_grid.size() ) { m_mouseover_map = m_grid[idx]; } else { m_mouseover_map = NULL; } if ( m_mouseover_map != old_mouseover_map ) { if ( m_selection_follows_mouse && m_mouseover_map != NULL ) { SelectMap( m_mouseover_map ); } } } } void MapGridCtrl::OnLeftDown( wxMouseEvent& event ) { SetCursor( wxCursor( wxCURSOR_HAND ) ); m_first_mouse_pos = event.GetPosition(); m_last_mouse_pos = event.GetPosition(); m_in_mouse_drag = true; } void MapGridCtrl::OnLeftUp( wxMouseEvent& event ) { SetCursor( wxCursor( wxCURSOR_ARROW ) ); m_in_mouse_drag = false; if ( wxPoint2DInt(event.GetPosition() - m_first_mouse_pos).GetVectorLength() <= 3 ) { SelectMap( m_mouseover_map ); } } void MapGridCtrl::SelectMap( MapData* map ) { m_selected_map = map; if ( m_selected_map != NULL ) { wxLogMessage( _T("MapGridCtrl: Selected map: ") + m_selected_map->name ); wxCommandEvent evt( MapSelectedEvt, GetId() ); evt.SetEventObject( this ); evt.SetString( m_selected_map->name ); wxPostEvent( this, evt ); } Refresh(); } void MapGridCtrl::SetMinimap( MapMap& maps, const wxString& mapname, const wxBitmap& minimap ) { MapMap::iterator it = maps.find( mapname ); if ( it != maps.end() ) { it->second.minimap = minimap; it->second.state = MapState_GotMinimap; } } void MapGridCtrl::OnGetMapImageAsyncCompleted( wxCommandEvent& event ) { wxString mapname = event.GetString(); wxLogDebugFunc( mapname ); // if mapname is empty, some error occurred in usync().GetMinimap... if ( !mapname.empty() ) { wxImage minimap( usync().GetMinimap( mapname, MINIMAP_SIZE, MINIMAP_SIZE ) ); const int w = minimap.GetWidth(); const int h = minimap.GetHeight(); wxImage background( BorderInvariantResizeImage( m_img_background, w, h ) ); wxImage minimap_alpha( BorderInvariantResizeImage( m_img_minimap_alpha, w, h ) ); wxImage foreground( BorderInvariantResizeImage( m_img_foreground, w, h ) ); minimap.SetAlpha( minimap_alpha.GetAlpha(), true /* "static data" */ ); minimap = BlendImage( minimap, background, false ); minimap = BlendImage( foreground, minimap, false ); // set the minimap in all MapMaps wxBitmap minimap_bmp( minimap ); SetMinimap( m_maps, mapname, minimap_bmp ); SetMinimap( m_maps_unused, mapname, minimap_bmp ); SetMinimap( m_maps_filtered, mapname, minimap_bmp ); Refresh(); // TODO: use RefreshRect ? } --m_async_minimap_fetches; UpdateAsyncFetches(); } void MapGridCtrl::OnGetMapExAsyncCompleted( wxCommandEvent& event ) { wxString mapname = event.GetString(); wxLogDebugFunc( mapname ); // if mapname is empty, some error occurred in usync().GetMapEx... if ( !mapname.empty() ) { try { AddMap( usync().GetMapEx( mapname ) ); } catch (...) {} Refresh(); } --m_async_mapinfo_fetches; UpdateAsyncFetches(); // UpdateAsyncFetches didn't start a new one, so we finished // and can raise the LoadingCompletedEvt if ( m_async_mapinfo_fetches == 0 ) { wxCommandEvent evt( LoadingCompletedEvt, GetId() ); evt.SetEventObject( this ); wxPostEvent( this, evt ); } } springlobby-0.169/src/mapgridctrl.h0000600000176000000410000001511712105760300020674 0ustar buildbotwww-data00000000000000/* Author: Tobi Vollebregt */ #ifndef SPRINGLOBBY_HEADERGUARD_MAPGRIDCTRL_H #define SPRINGLOBBY_HEADERGUARD_MAPGRIDCTRL_H #include "springunitsync.h" #include #include #include class Ui; class MapGridCtrl : public wxPanel { public: /// this event is raised each time when a new map is selected static const wxEventType MapSelectedEvt; /// this event is raised after the loading of map infos finished static const wxEventType LoadingCompletedEvt; enum SortKey { SortKey_Name, SortKey_TidalStrength, SortKey_Gravity, SortKey_MaxMetal, SortKey_ExtractorRadius, SortKey_MinWind, SortKey_MaxWind, SortKey_Wind, // minWind + maxWind SortKey_Area, // width * height SortKey_AspectRatio, // max(width/height, height/width) SortKey_PosCount }; MapGridCtrl( wxWindow* parent, wxSize size = wxDefaultSize, wxWindowID id = -1 ); ~MapGridCtrl(); void Clear(); void AddMap( const wxString& mapname ); void AddMap( const UnitSyncMap& map ); void CheckInBounds(); /* ===== sorting ===== */ void Sort( SortKey vertical, SortKey horizontal, bool vertical_direction = false, bool horizontal_direction = false ); /* ===== filtering ===== */ template< class Predicate > int Filter( Predicate pred ) { std::vector< wxString > maps; m_maps_filtered.insert( m_maps.begin(), m_maps.end() ); m_maps_unused.insert( m_maps.begin(), m_maps.end() ); m_maps.clear(); m_grid.clear(); m_mouseover_map = NULL; // can't be sure pointer will stay valid m_selected_map = NULL; for (MapMap::const_iterator it = m_maps_filtered.begin(); it != m_maps_filtered.end(); ++it) { if ( pred( it->second ) ) maps.push_back( it->first ); } for (std::vector< wxString >::iterator it = maps.begin(); it != maps.end(); ++it) { AddMap( *it ); m_maps_filtered.erase( *it ); } return m_maps.size(); } UnitSyncMap* GetSelectedMap() const { return m_selected_map; } void OnPaint( wxPaintEvent& event ); void OnResize( wxSizeEvent& event ); void OnMouseMove( wxMouseEvent& event ); void OnLeftDown( wxMouseEvent& event ); void OnLeftUp( wxMouseEvent& event ); void OnGetMapImageAsyncCompleted( wxCommandEvent& event ); void OnGetMapExAsyncCompleted( wxCommandEvent& event ); protected: enum MapState { MapState_NoMinimap, MapState_GetMinimap, MapState_GotMinimap }; struct MapData : UnitSyncMap { MapData() : state( MapState_NoMinimap ) {} void operator=( const UnitSyncMap& other ) { UnitSyncMap::operator=( other ); } wxBitmap minimap; MapState state; }; typedef std::map< wxString, MapData > MapMap; // wrapper around the Compare*() methods below to allow changing sort direction template< class Compare > class _Compare2 { public: _Compare2( bool direction, Compare cmp ) : m_cmp( cmp ), m_direction( direction ? -1 : 1 ) {} bool operator()( const MapData* a, const MapData* b ) { return (m_direction * m_cmp( a, b )) < 0; } private: Compare m_cmp; int m_direction; }; // allow a _Compare2 to be constructed with implicit template arguments template< class Compare > _Compare2< Compare > _Compare( bool direction, Compare cmp ) { return _Compare2< Compare >( direction, cmp ); } // comparison methods returning -1 if a < b, 1 if a > b and 0 if !(a < b) && !(a > b) static int CompareName( const MapData* a, const MapData* b ); static int CompareTidalStrength( const MapData* a, const MapData* b ); static int CompareGravity( const MapData* a, const MapData* b ); static int CompareMaxMetal( const MapData* a, const MapData* b ); static int CompareExtractorRadius( const MapData* a, const MapData* b ); static int CompareMinWind( const MapData* a, const MapData* b ); static int CompareMaxWind( const MapData* a, const MapData* b ); static int CompareWind( const MapData* a, const MapData* b ); static int CompareArea( const MapData* a, const MapData* b ); static int CompareAspectRatio( const MapData* a, const MapData* b ); static int ComparePosCount( const MapData* a, const MapData* b ); template< class Compare > void _Sort( int dimension, Compare cmp ); void UpdateGridSize(); void UpdateAsyncFetches(); void FetchMapInfo( const wxString& mapname ); void FetchMinimap( MapData& map ); void DrawMap( wxDC& dc, MapData& map, int x, int y ); void DrawBackground( wxDC& dc ); void SetMinimap( MapMap& maps, const wxString& mapname, const wxBitmap& minimap ); void SelectMap( MapData* map ); UnitSyncAsyncOps m_async; const bool m_selection_follows_mouse; /// Set of maps which are queued to be fetched asynchronously. std::vector< wxString > m_pending_maps; MapMap m_maps; MapMap m_maps_unused; MapMap m_maps_filtered; std::vector< MapData* > m_grid; wxSize m_size; wxPoint m_pos; wxPoint m_first_mouse_pos; wxPoint m_last_mouse_pos; bool m_in_mouse_drag; /// Number of async minimap fetches still running on behalf of this control. /// This number is limited so SL doesn't keep fetching maps after this /// control is destroyed. int m_async_mapinfo_fetches; /// Number of async minimap fetches still running on behalf of this control. /// This number is limited so the control can adapt (faster) to changes in /// the set of visible maps. (it fetches only visible maps) int m_async_minimap_fetches; /// Map which is currently under the mouse pointer. MapData* m_mouseover_map; /// Map which was last clicked. MapData* m_selected_map; /// solid color background wxImage m_img_background; /// map_select_1_png, alpha channel of this is attached to minimap before /// blending it over m_img_background wxImage m_img_minimap_alpha; /// map_select_2_png, this is alpha blended on top of the minimap wxImage m_img_foreground; /// this is displayed for maps whose minimap has not yet been loaded wxBitmap m_img_minimap_loading; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_MAPGRIDCTRL_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/mapselectdialog.cpp0000600000176000000410000004531412105760300022056 0ustar buildbotwww-data00000000000000/* Author: Tobi Vollebregt */ #include "mapselectdialog.h" #include "battle.h" #include "server.h" #include "settings.h" #include "ui.h" #include "uiutils.h" #include "utils/controls.h" #include "utils/debug.h" #include "settings.h" #include "globalsmanager.h" #include //(*InternalHeaders(MapSelectDialog) #include #include #include #include #include #include "mapgridctrl.h" #include #include #include #include //*) //(*IdInit(MapSelectDialog) const long MapSelectDialog::ID_STATICTEXT2 = wxNewId(); const long MapSelectDialog::ID_VERTICAL_CHOICE = wxNewId(); const long MapSelectDialog::ID_STATICTEXT1 = wxNewId(); const long MapSelectDialog::ID_HORIZONTAL_CHOICE = wxNewId(); const long MapSelectDialog::ID_FILTER_ALL = wxNewId(); const long MapSelectDialog::ID_FILTER_POPULAR = wxNewId(); const long MapSelectDialog::ID_FILTER_RECENT = wxNewId(); const long MapSelectDialog::ID_FILTER_TEXT = wxNewId(); const long MapSelectDialog::ID_MAP_NAME = wxNewId(); const long MapSelectDialog::ID_MAP_OPTS_LIST = wxNewId(); const long MapSelectDialog::ID_MAPGRID = wxNewId(); //*) const long MapSelectDialog::ID_VERTICAL_DIRECTION = wxNewId(); const long MapSelectDialog::ID_HORIZONTAL_DIRECTION = wxNewId(); const wxString MapSelectDialog::m_dialog_name = _T("MapSelector"); BEGIN_EVENT_TABLE(MapSelectDialog,wxDialog) //(*EventTable(MapSelectDialog) //*) END_EVENT_TABLE() MapSelectDialog::MapSelectDialog( wxWindow* parent ) : WindowAttributesPickle( m_dialog_name, this, wxSize( DEFSETT_MW_WIDTH, DEFSETT_MW_HEIGHT ) ), m_horizontal_direction( sett().GetHorizontalSortorder() ), m_vertical_direction( sett().GetVerticalSortorder() ) { //(*Initialize(MapSelectDialog) wxStaticBoxSizer* StaticBoxSizer2; wxStaticText* StaticText2; wxStaticText* StaticText1; wxBoxSizer* BoxSizer2; wxBoxSizer* boxSizerHorizontal; wxBoxSizer* BoxSizer1; wxStaticBoxSizer* StaticBoxSizer1; wxBoxSizer* boxSizerVertical; wxStdDialogButtonSizer* StdDialogButtonSizer1; Create(parent, wxID_ANY, _("Select map (click and drag to scroll)"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxMAXIMIZE_BOX, _T("wxID_ANY")); BoxSizer1 = new wxBoxSizer(wxHORIZONTAL); BoxSizer2 = new wxBoxSizer(wxVERTICAL); StaticText2 = new wxStaticText(this, ID_STATICTEXT2, _("Vertical sort key"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT2")); BoxSizer2->Add(StaticText2, 0, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); boxSizerVertical = new wxBoxSizer(wxHORIZONTAL); m_vertical_choice = new wxChoice(this, ID_VERTICAL_CHOICE, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_VERTICAL_CHOICE")); boxSizerVertical->Add(m_vertical_choice, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); BoxSizer2->Add(boxSizerVertical, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); StaticText1 = new wxStaticText(this, ID_STATICTEXT1, _("Horizontal sort key"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1")); BoxSizer2->Add(StaticText1, 0, wxALL|wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL, 5); boxSizerHorizontal = new wxBoxSizer(wxHORIZONTAL); m_horizontal_choice = new wxChoice(this, ID_HORIZONTAL_CHOICE, wxDefaultPosition, wxDefaultSize, 0, 0, 0, wxDefaultValidator, _T("ID_HORIZONTAL_CHOICE")); boxSizerHorizontal->Add(m_horizontal_choice, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); BoxSizer2->Add(boxSizerHorizontal, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); StaticBoxSizer1 = new wxStaticBoxSizer(wxVERTICAL, this, _("Show")); m_filter_all = new wxRadioButton(this, ID_FILTER_ALL, _("All maps"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_FILTER_ALL")); m_filter_all->SetToolTip(_("Shows all available maps")); StaticBoxSizer1->Add(m_filter_all, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); m_filter_popular = new wxRadioButton(this, ID_FILTER_POPULAR, _("Popular maps"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_FILTER_POPULAR")); m_filter_popular->SetToolTip(_("Shows only maps which are currently being player on the server. You must be online to use this.")); StaticBoxSizer1->Add(m_filter_popular, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); m_filter_recent = new wxRadioButton(this, ID_FILTER_RECENT, _("Recently played maps"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_FILTER_RECENT")); m_filter_recent->SetValue(true); m_filter_recent->SetToolTip(_("Shows only maps you played recently. (Based on your replays.)")); StaticBoxSizer1->Add(m_filter_recent, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); BoxSizer2->Add(StaticBoxSizer1, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); StaticBoxSizer2 = new wxStaticBoxSizer(wxHORIZONTAL, this, _("Filter")); m_filter_text = new wxTextCtrl(this, ID_FILTER_TEXT, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_FILTER_TEXT")); m_filter_text->SetToolTip(_("Shows only maps which contain this text in their name or description.")); StaticBoxSizer2->Add(m_filter_text, 1, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); BoxSizer2->Add(StaticBoxSizer2, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); m_map_details = new wxStaticBoxSizer(wxVERTICAL, this, _("Map details")); m_map_name = new wxStaticText(this, ID_MAP_NAME, wxEmptyString, wxDefaultPosition, wxSize(170,90), wxST_NO_AUTORESIZE, _T("ID_MAP_NAME")); m_map_name->SetLabel( wxEmptyString ); m_map_details->Add(m_map_name, 0, wxTOP|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); m_map_opts_list = new wxListCtrl(this, ID_MAP_OPTS_LIST, wxDefaultPosition, wxSize(170,120), wxLC_REPORT|wxLC_NO_HEADER|wxNO_BORDER, wxDefaultValidator, _T("ID_MAP_OPTS_LIST")); m_map_details->Add(m_map_opts_list, 1, wxBOTTOM|wxLEFT|wxRIGHT|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); BoxSizer2->Add(m_map_details, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); StdDialogButtonSizer1 = new wxStdDialogButtonSizer(); StdDialogButtonSizer1->AddButton(new wxButton(this, wxID_OK, wxEmptyString)); StdDialogButtonSizer1->AddButton(new wxButton(this, wxID_CANCEL, wxEmptyString)); StdDialogButtonSizer1->Realize(); BoxSizer2->Add(StdDialogButtonSizer1, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); BoxSizer1->Add(BoxSizer2, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); m_mapgrid = new MapGridCtrl(this, wxSize(600,400), ID_MAPGRID); BoxSizer1->Add(m_mapgrid, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); SetSizer(BoxSizer1); BoxSizer1->Fit(this); BoxSizer1->SetSizeHints(this); Center(); Connect(ID_VERTICAL_CHOICE,wxEVT_COMMAND_CHOICE_SELECTED,(wxObjectEventFunction)&MapSelectDialog::OnSortKeySelect); Connect(ID_HORIZONTAL_CHOICE,wxEVT_COMMAND_CHOICE_SELECTED,(wxObjectEventFunction)&MapSelectDialog::OnSortKeySelect); Connect(ID_FILTER_ALL,wxEVT_COMMAND_RADIOBUTTON_SELECTED,(wxObjectEventFunction)&MapSelectDialog::OnFilterAllSelect); Connect(ID_FILTER_POPULAR,wxEVT_COMMAND_RADIOBUTTON_SELECTED,(wxObjectEventFunction)&MapSelectDialog::OnFilterPopularSelect); Connect(ID_FILTER_RECENT,wxEVT_COMMAND_RADIOBUTTON_SELECTED,(wxObjectEventFunction)&MapSelectDialog::OnFilterRecentSelect); Connect(ID_FILTER_TEXT,wxEVT_COMMAND_TEXT_UPDATED,(wxObjectEventFunction)&MapSelectDialog::OnFilterTextChanged); m_mapgrid->Connect(ID_MAPGRID,wxEVT_LEFT_DCLICK,(wxObjectEventFunction)&MapSelectDialog::OnMapGridLeftDClick,0,this); Connect(wxID_ANY,wxEVT_INIT_DIALOG,(wxObjectEventFunction)&MapSelectDialog::OnInit); //*) Connect(ID_MAPGRID,MapGridCtrl::MapSelectedEvt,(wxObjectEventFunction)&MapSelectDialog::OnMapSelected,0,this); Connect(ID_MAPGRID,MapGridCtrl::LoadingCompletedEvt,(wxObjectEventFunction)&MapSelectDialog::OnMapLoadingCompleted,0,this); // Ugh.. Can not have these created by generated code because wxSmith doesn't accept a symbolic size, // (ie. wxSize(CONTROL_HEIGHT,CONTROL_HEIGHT)) and all Set*Size() methods don't seem to have any effect. m_vertical_direction_button = new wxButton(this, ID_VERTICAL_DIRECTION, _T("ᴠ"), wxDefaultPosition, wxSize(CONTROL_HEIGHT,CONTROL_HEIGHT), 0, wxDefaultValidator, _T("ID_VERTICAL_DIRECTION")); boxSizerVertical->Add(m_vertical_direction_button, 0, wxALL|wxEXPAND|wxSHAPED|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); m_horizontal_direction_button = new wxButton(this, ID_HORIZONTAL_DIRECTION, _T(">"), wxDefaultPosition, wxSize(CONTROL_HEIGHT,CONTROL_HEIGHT), 0, wxDefaultValidator, _T("ID_HORIZONTAL_DIRECTION")); boxSizerHorizontal->Add(m_horizontal_direction_button, 0, wxALL|wxEXPAND|wxSHAPED|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5); //<>ᴠᴧ Connect(ID_VERTICAL_DIRECTION, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&MapSelectDialog::OnVerticalDirectionClicked); Connect(ID_HORIZONTAL_DIRECTION, wxEVT_COMMAND_BUTTON_CLICKED, (wxObjectEventFunction)&MapSelectDialog::OnHorizontalDirectionClicked); // TODO: refactor, this is copied from battlemaptab.cpp m_map_opts_list->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) ); m_map_opts_list->SetFont( wxFont( 8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT ) ); wxListItem col; col.SetText( _("Option") ); m_map_opts_list->InsertColumn( 0, col ); col.SetText( _("Value") ); m_map_opts_list->InsertColumn( 1, col ); m_map_opts_list->SetColumnWidth( 0, 90 ); m_map_opts_list->SetColumnWidth( 1, 80 ); m_map_opts_list->InsertItem( 0, _("Size") ); m_map_opts_list->InsertItem( 1, _("Windspeed") ); m_map_opts_list->InsertItem( 2, _("Tidal strength") ); m_map_opts_list->InsertItem( 3, _("Gravity") ); m_map_opts_list->InsertItem( 4, _("Extractor radius") ); m_map_opts_list->InsertItem( 5, _("Max metal") ); m_map_opts_list->InsertItem( 6, _("Start positions") ); Layout(); } MapSelectDialog::~MapSelectDialog() { //(*Destroy(MapSelectDialog) //*) sett().SetHorizontalSortkeyIndex( m_horizontal_choice->GetSelection() ); sett().SetVerticalSortkeyIndex( m_vertical_choice->GetSelection() ); sett().SetHorizontalSortorder( m_horizontal_direction ); sett().SetVerticalSortorder( m_vertical_direction ); if ( m_filter_all->GetValue() ) sett().SetMapSelectorFilterRadio( m_filter_all_sett ); else if ( m_filter_recent->GetValue() ) sett().SetMapSelectorFilterRadio( m_filter_recent_sett ); else sett().SetMapSelectorFilterRadio( m_filter_popular_sett ); if ( IsShown() ) EndModal( 0 ); } void MapSelectDialog::OnInit( wxInitDialogEvent& /*unused*/ ) { wxLogDebugFunc( _T("") ); AppendSortKeys( m_horizontal_choice ); AppendSortKeys( m_vertical_choice ); m_horizontal_choice->SetSelection( sett().GetHorizontalSortkeyIndex() ); m_vertical_choice->SetSelection( sett().GetVerticalSortkeyIndex() ); m_horizontal_direction_button->SetLabel( m_horizontal_direction ? _T("<") : _T(">") ); m_vertical_direction_button->SetLabel( m_vertical_direction ? _T("ᴧ") : _T("ᴠ") ); m_maps = usync().GetMapList(); m_replays = usync().GetPlaybackList( true ); //true meaning replays, flase meaning savegames const unsigned int lastFilter = sett().GetMapSelectorFilterRadio(); m_filter_popular->Enable( ui().IsConnected() ); // due to a bug / crappy design in SpringUnitSync / unitsync itself we // get a replay list with one empty item when there are no replays.. bool no_replays = m_replays.empty() || ( m_replays.size() == 1 && m_replays[0] == wxEmptyString ); if ( no_replays ) { m_filter_all->SetValue( true ); m_filter_recent->Enable( false ); } if ( lastFilter == m_filter_popular_sett ) { if ( ui().IsConnected() ) { m_filter_popular->SetValue( true ); LoadPopular(); } else { m_filter_all->SetValue( true ); LoadAll(); } } else if ( lastFilter == m_filter_recent_sett ) { if ( !no_replays ) { m_filter_recent->Enable( true ); m_filter_recent->SetValue( true ); LoadRecent(); } else { m_filter_all->SetValue( true ); LoadAll(); } } else { m_filter_all->SetValue( true ); LoadAll(); } UpdateSortAndFilter(); m_filter_text->SetFocus(); } void MapSelectDialog::OnSortKeySelect( wxCommandEvent& /*unused*/ ) { wxLogDebugFunc( _T("") ); UpdateSortAndFilter(); } void MapSelectDialog::AppendSortKeys( wxChoice* choice ) { // see MapGridCtrl for available SortKeys choice->Append( _("Name"), (void*) MapGridCtrl::SortKey_Name ); choice->Append( _("Tidal strength"), (void*) MapGridCtrl::SortKey_TidalStrength ); choice->Append( _("Gravity"), (void*) MapGridCtrl::SortKey_Gravity ); choice->Append( _("Max metal"), (void*) MapGridCtrl::SortKey_MaxMetal ); choice->Append( _("Extractor radius"), (void*) MapGridCtrl::SortKey_ExtractorRadius ); choice->Append( _("Minimum wind"), (void*) MapGridCtrl::SortKey_MinWind ); choice->Append( _("Maximum wind"), (void*) MapGridCtrl::SortKey_MaxWind ); choice->Append( _("Average wind"), (void*) MapGridCtrl::SortKey_Wind ); choice->Append( _("Size (map area)"), (void*) MapGridCtrl::SortKey_Area ); choice->Append( _("Aspect ratio"), (void*) MapGridCtrl::SortKey_AspectRatio ); choice->Append( _("Number of start positions"), (void*) MapGridCtrl::SortKey_PosCount ); } static MapGridCtrl::SortKey GetSelectedSortKey( wxChoice* choice ) { return (MapGridCtrl::SortKey) (int) (long) choice->GetClientData( choice->GetSelection() ); } namespace { struct FilterPredicate { FilterPredicate( const wxString& _searchText ) : searchText(_searchText.Lower()) {} bool operator () ( const UnitSyncMap& map ) const { return map.name.Lower().Find( searchText ) != wxNOT_FOUND || map.info.description.Lower().Find( searchText ) != wxNOT_FOUND || map.info.author.Lower().Find( searchText ) != wxNOT_FOUND ; } wxString searchText; }; } void MapSelectDialog::UpdateSortAndFilter() { FilterPredicate predicate( m_filter_text->GetValue() ); m_mapgrid->Filter( predicate ); m_mapgrid->Sort( GetSelectedSortKey( m_vertical_choice ), GetSelectedSortKey( m_horizontal_choice ), m_vertical_direction, m_horizontal_direction ); m_mapgrid->CheckInBounds(); m_mapgrid->Refresh(); } UnitSyncMap* MapSelectDialog::GetSelectedMap() const { wxLogDebugFunc( _T("") ); return m_mapgrid->GetSelectedMap(); } void MapSelectDialog::OnMapSelected( wxCommandEvent& event ) { const wxString& mapname = event.GetString(); wxLogDebugFunc( mapname ); const UnitSyncMap* pMap = m_mapgrid->GetSelectedMap(); if ( pMap == NULL) return; const UnitSyncMap& map = *pMap; m_map_name->SetLabel( map.name + _T("\n\n") + map.info.description ); // TODO: refactor, this is copied from battlemaptab.cpp m_map_opts_list->SetItem( 0, 1, wxFormat( _T("%dx%d") ) % (map.info.width/512) % (map.info.height/512) ); m_map_opts_list->SetItem( 1, 1, wxFormat( _T("%d-%d") ) % map.info.minWind % map.info.maxWind ); m_map_opts_list->SetItem( 2, 1, wxFormat( _T("%d") ) % map.info.tidalStrength ); m_map_opts_list->SetItem( 3, 1, wxFormat( _T("%d") ) % map.info.gravity ); m_map_opts_list->SetItem( 4, 1, wxFormat( _T("%d") ) % map.info.extractorRadius ); m_map_opts_list->SetItem( 5, 1, wxFormat( _T("%.3f") ) % map.info.maxMetal ); m_map_opts_list->SetItem( 6, 1, wxFormat( _T("%d") ) % map.info.positions.size() ); } void MapSelectDialog::OnMapLoadingCompleted( wxCommandEvent& /*unused*/ ) { wxLogDebugFunc( _T("") ); // to apply stored sorting settings we need to re-apply sorting after loading finished UpdateSortAndFilter(); } void MapSelectDialog::OnVerticalDirectionClicked( wxCommandEvent& /*unused*/ ) { wxLogDebugFunc( _T("") ); m_vertical_direction = !m_vertical_direction; m_vertical_direction_button->SetLabel( m_vertical_direction ? _T("ᴧ") : _T("ᴠ") ); UpdateSortAndFilter(); } void MapSelectDialog::OnHorizontalDirectionClicked( wxCommandEvent& /*unused*/ ) { wxLogDebugFunc( _T("") ); m_horizontal_direction = !m_horizontal_direction; m_horizontal_direction_button->SetLabel( m_horizontal_direction ? _T("<") : _T(">") ); UpdateSortAndFilter(); } void MapSelectDialog::OnMapGridLeftDClick(wxMouseEvent& /*unused*/) { wxLogDebugFunc( _T("") ); if ( m_mapgrid->GetSelectedMap() ) { EndModal( wxID_OK ); } } void MapSelectDialog::LoadAll() { wxLogDebugFunc( _T("") ); const int count = m_maps.size(); m_mapgrid->Clear(); for ( int i = 0; i < count; ++i ) { m_mapgrid->AddMap( m_maps[i] ); } m_mapgrid->Refresh(); } void MapSelectDialog::LoadPopular() { wxLogDebugFunc( _T("") ); m_mapgrid->Clear(); try { serverSelector().GetServer().battles_iter->IteratorBegin(); while ( !serverSelector().GetServer().battles_iter->EOL() ) { Battle* b = serverSelector().GetServer().battles_iter->GetBattle(); if ( b != NULL ) m_mapgrid->AddMap( b->GetHostMapName() ); } } catch (...) {} // ui().GetServer may throw when disconnected... m_mapgrid->Refresh(); } void MapSelectDialog::LoadRecent() { wxLogDebugFunc( _T("") ); const int count = m_maps.size(); m_mapgrid->Clear(); // just check whether map names are contained in replay names // not the most elegant solution but, hey, it works for ( int i = 0; i < count; ++i ) { // prefix and suffix with underscore to prevent most common partial matches const wxString mapname = _T("_") + m_maps[i].BeforeLast( '.' ) + _T("_"); long replaycount = long(m_replays.GetCount()); for ( int replaynum = 0; replaynum < replaycount; replaynum++ ) { if ( m_replays[replaynum].Find( mapname ) != wxNOT_FOUND ) m_mapgrid->AddMap( m_maps[i] ); } } m_mapgrid->Refresh(); } // filter event handlers void MapSelectDialog::OnFilterAllSelect(wxCommandEvent& /*unused*/) { wxLogDebugFunc( _T("") ); LoadAll(); } void MapSelectDialog::OnFilterPopularSelect(wxCommandEvent& /*unused*/) { wxLogDebugFunc( _T("") ); LoadPopular(); } void MapSelectDialog::OnFilterRecentSelect(wxCommandEvent& /*unused*/) { wxLogDebugFunc( _T("") ); LoadRecent(); } void MapSelectDialog::OnFilterTextChanged(wxCommandEvent& /*unused*/) { wxLogDebugFunc( _T("") ); UpdateSortAndFilter(); } #ifdef __WXMSW__ #include "ui.h" #include "mainwindow.h" #endif MapSelectDialog& mapSelectDialog() { #ifdef __WXMSW__ static MapSelectDialog* m = new MapSelectDialog( &ui().mw() ); return *m; #else /* either a globals handled or directly on stack created dialog would result in sigsegv / sigabrt in dtor, no idea why */ static MapSelectDialog* m = new MapSelectDialog( 0 ); return *m; #endif } void MapSelectDialog::OnUnitsyncReloaded( GlobalEvents::GlobalEventData /*data*/ ) { wxInitDialogEvent dummy; AddPendingEvent( dummy ); } springlobby-0.169/src/mapselectdialog.h0000600000176000000410000000672512105760300021526 0ustar buildbotwww-data00000000000000/* Author: Tobi Vollebregt */ #ifndef MAPSELECTDIALOG_H #define MAPSELECTDIALOG_H #include #include "gui/windowattributespickle.h" #include "utils/isink.h" //(*Headers(MapSelectDialog) #include class wxStdDialogButtonSizer; class wxTextCtrl; class MapGridCtrl; class wxRadioButton; class wxStaticText; class wxListCtrl; class wxBoxSizer; class wxStaticBoxSizer; class wxChoice; //*) class wxButton; class Ui; struct UnitSyncMap; class MapSelectDialog: public wxDialog, public WindowAttributesPickle, public UnitsyncReloadedSink { public: MapSelectDialog( wxWindow* parent = 0 ); virtual ~MapSelectDialog(); UnitSyncMap* GetSelectedMap() const; void OnUnitsyncReloaded( GlobalEvents::GlobalEventData data ); protected: //(*Declarations(MapSelectDialog) wxRadioButton* m_filter_recent; wxStaticText* m_map_name; wxRadioButton* m_filter_all; MapGridCtrl* m_mapgrid; wxChoice* m_vertical_choice; wxChoice* m_horizontal_choice; wxTextCtrl* m_filter_text; wxListCtrl* m_map_opts_list; wxRadioButton* m_filter_popular; wxStaticBoxSizer* m_map_details; //*) wxButton* m_vertical_direction_button; wxButton* m_horizontal_direction_button; //(*Identifiers(MapSelectDialog) static const long ID_STATICTEXT2; static const long ID_VERTICAL_CHOICE; static const long ID_STATICTEXT1; static const long ID_HORIZONTAL_CHOICE; static const long ID_FILTER_ALL; static const long ID_FILTER_POPULAR; static const long ID_FILTER_RECENT; static const long ID_FILTER_TEXT; static const long ID_MAP_NAME; static const long ID_MAP_OPTS_LIST; static const long ID_MAPGRID; //*) static const long ID_VERTICAL_DIRECTION; static const long ID_HORIZONTAL_DIRECTION; //(*Handlers(MapSelectDialog) void OnInit(wxInitDialogEvent& event); void OnSortKeySelect(wxCommandEvent& event); void OnMapGridLeftDClick(wxMouseEvent& event); void OnFilterAllSelect(wxCommandEvent& event); void OnFilterPopularSelect(wxCommandEvent& event); void OnFilterRecentSelect(wxCommandEvent& event); void OnFilterTextChanged(wxCommandEvent& event); //*) void OnMapSelected( wxCommandEvent& event ); void OnMapLoadingCompleted( wxCommandEvent& event ); void OnVerticalDirectionClicked( wxCommandEvent& event ); void OnHorizontalDirectionClicked( wxCommandEvent& event ); void AppendSortKeys( wxChoice* choice ); void UpdateSortAndFilter(); void LoadAll(); void LoadPopular(); void LoadRecent(); bool m_horizontal_direction; bool m_vertical_direction; wxArrayString m_maps; wxArrayString m_replays; static const wxString m_dialog_name; static const unsigned int m_filter_all_sett = 0; static const unsigned int m_filter_recent_sett = 1; static const unsigned int m_filter_popular_sett = 2; DECLARE_EVENT_TABLE() }; MapSelectDialog& mapSelectDialog(); #endif /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/mmoptionmodel.cpp0000600000176000000410000000652612105760300021606 0ustar buildbotwww-data00000000000000#include "mmoptionmodel.h" mmOptionModel::mmOptionModel(wxString name_, wxString key_, wxString description_, OptionType type_, wxString section_ , wxString style_ ) : name(name_),key(key_),description(description_),type(type_), section(section_),ct_type_string(style_) { //set style according to input string if ( style_ == _T("yaadda") ) ct_type = ct_someothers; else ct_type = ct_undefined; //lobby will chooose best fit if ( section == wxEmptyString ) section = SLGlobals::nosection_name; if ( ct_type_string == wxEmptyString ) ct_type_string = SLGlobals::nostyle_name; } mmOptionModel::mmOptionModel(wxString name_, wxString key_, wxString description_, OptionType type_, wxString section_ , ControlType style_ ) : name(name_),key(key_),description(description_),type(type_), ct_type(style_), section(section_) { } mmOptionModel::~mmOptionModel() {} mmOptionModel::mmOptionModel() { type = opt_undefined; name = _T(""); key = name; description = name; section = SLGlobals::nosection_name; ct_type = ct_undefined; } mmOptionBool::mmOptionBool(wxString name_, wxString key_, wxString description_, bool def_, wxString section_ , wxString style_): mmOptionModel(name_,key_,description_,opt_bool,section_,style_), def(def_),value(def_) {} mmOptionBool::mmOptionBool():mmOptionModel() { value = false; def = value; } mmOptionFloat::mmOptionFloat(wxString name_, wxString key_, wxString description_, float def_, float stepping_, float min_, float max_, wxString section_ , wxString style_): mmOptionModel(name_,key_,description_,opt_float,section_,style_), def(def_),value(def_),stepping(stepping_),min(min_),max(max_) {} mmOptionFloat::mmOptionFloat() : mmOptionModel(), def(0.0), value(0.0), stepping(0.0), min(0.0), max(0.0) {} mmOptionString::mmOptionString(wxString name_, wxString key_, wxString description_, wxString def_, unsigned int max_len_, wxString section_ , wxString style_): mmOptionModel(name_,key_,description_,opt_string,section_,style_), def(def_),value(def_),max_len(max_len_) {} mmOptionString::mmOptionString():mmOptionModel() { def = _T(""); value = def; max_len = 0; } mmOptionList::mmOptionList(wxString name_, wxString key_, wxString description_, wxString def_, wxString section_ , wxString style_): mmOptionModel(name_,key_,description_,opt_list,section_,style_), def(def_), value(def_), cur_choice_index(0) { } mmOptionList::mmOptionList(): mmOptionModel(), def(_T("")), value(_T("")), cur_choice_index(0) { } void mmOptionList::addItem(wxString key_, wxString name_, wxString desc_) { listitems.push_back(listItem(key_,name_,desc_)); //make sure current choice is set to default if ( this->def == key_ ) this->cur_choice_index = listitems.size() - 1; cbx_choices.Add(name_); } listItem::listItem(wxString key_, wxString name_,wxString desc_): key(key_),name(name_),desc(desc_) { } mmOptionSection::mmOptionSection():mmOptionModel() { key = SLGlobals::nosection_name; } mmOptionSection::mmOptionSection(wxString name_, wxString key_, wxString description_,wxString section_, wxString style_ ) :mmOptionModel( name_, key_, description_, opt_section,section_, style_ ) { } springlobby-0.169/src/mmoptionmodel.h0000600000176000000410000001365412105760300021253 0ustar buildbotwww-data00000000000000#ifndef MMOPTIONMODEL_H_ #define MMOPTIONMODEL_H_ #include #include #include namespace SLGlobals { const wxString nosection_name = _T("none"); const wxString nostyle_name = _T("none"); } //! enum that lets us differentiate option types at runtime /*! opt_undefined will be returned/set if the type could not be determined, others respectively */ enum OptionType { opt_undefined = 0, opt_bool = 1, opt_list = 2, opt_float = 3, opt_string = 4, opt_section = 5 }; //! used to hold an item in an option list /*! An option list is made of a variable number of theses items. * Each item itself (should) contain a key, name and description. */ struct listItem { listItem(wxString key_, wxString name_,wxString desc_); wxString key; wxString name; wxString desc; }; //! Used in option list typedef std::vector ListItemVec; //! The base class for all option types /*! All members and functions are public (also in derived classes). * Therefore no sanity checks whatsoever are performed when changing a member. * Default constructors are mostly provided for compability with stl containers. */ struct mmOptionModel { enum ControlType{ ct_undefined, ct_someothers }; //! sets members accordingly ///* this ctor sets controltype enum according to string */// mmOptionModel(wxString name_, wxString key_, wxString description_, OptionType type_ = opt_undefined, wxString section_ = SLGlobals::nosection_name, wxString style_ = SLGlobals::nostyle_name); mmOptionModel(wxString name_, wxString key_, wxString description_, OptionType type_ = opt_undefined, wxString section_ = SLGlobals::nosection_name, ControlType style_ = ct_undefined); virtual ~mmOptionModel(); //! all members are set to empty strings, type to opt_undefined mmOptionModel(); wxString name, key, description; OptionType type; ControlType ct_type; wxString section; //! control style string, as of yet undefined wxString ct_type_string; }; //! Holds a bool option /*! difference from parent: members def and value are bool */ struct mmOptionBool : public mmOptionModel { //! sets members accordingly mmOptionBool(wxString name_, wxString key_, wxString description_, bool def_, wxString section_ = SLGlobals::nosection_name, wxString style_ = SLGlobals::nostyle_name); //! sets wxstring member to "" and bool members to false mmOptionBool(); bool def; //! this will always represent the current value, also the only member that should change after creation bool value; }; //! Holds a float option struct mmOptionFloat : public mmOptionModel { //! sets members accordingly mmOptionFloat(wxString name_, wxString key_, wxString description_, float def_, float stepping_, float min_, float max_, wxString section_ = SLGlobals::nosection_name, wxString style_ = SLGlobals::nostyle_name); //! sets wxstring member to "" and float members to 0.0 mmOptionFloat(); float def; //! this will always represent the current value, also the only member that should change after creation float value; //! the increment with that value may change in min,max boundaries float stepping; float min, max; }; //! Holds a string option struct mmOptionString : public mmOptionModel { //! sets members accordingly mmOptionString(wxString name_, wxString key_, wxString description_, wxString def_, unsigned int max_len_, wxString section_ = SLGlobals::nosection_name, wxString style_ = SLGlobals::nostyle_name); //! sets wxstring member to "" and max_len to 0 mmOptionString(); //! should not exceed max length (not ensured) wxString def; //! this will always represent the current value, /*! the only member that should change after creation, before set check if new value exceeds max_len*/ wxString value; //! the maximum lentgh the value string may have unsigned int max_len; }; //! Holds a an option list (a vector of listItems) /*! Most complex of option types. A convenience method for adding new Listitems is provided, * as well as a wxArrayString that contains the names of the added Listitems (useful for comboboxes) */ struct mmOptionList : public mmOptionModel { //! sets members accordingly; listitems,cbx_choices remain empty mmOptionList(wxString name_, wxString key_, wxString description_, wxString def_, wxString section_ = SLGlobals::nosection_name, wxString style_ = SLGlobals::nostyle_name); //! def, value are set to ""; listitems,cbx_choices remain empty mmOptionList(); //! creates a new listitem from params, pushes it on the vector and adds name_ to cbx_choices void addItem(wxString key_, wxString name_, wxString desc_); wxString def; //! will always reflect the name of the currently "selected" listitem wxString value; //! index of current value in cbx_choices, so one can assign new combox value int cur_choice_index; //! holds a variable amount of ListItems ListItemVec listitems; //! for easy mapping to a combobox wxArrayString cbx_choices; }; struct mmOptionSection : public mmOptionModel{ mmOptionSection (wxString name_, wxString key_, wxString description_, wxString section_ = SLGlobals::nosection_name, wxString style_ = SLGlobals::nostyle_name ); mmOptionSection (); }; #endif /*MMOPTIONMODEL_H_*/ /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/mmoptionswrapper.cpp0000600000176000000410000005110012105760300022335 0ustar buildbotwww-data00000000000000#include "mmoptionswrapper.h" #include "springunitsync.h" #include "utils/conversion.h" #include "utils/customdialogs.h" #include "utils/debug.h" #include #include #include #include #include #include OptionsWrapper::OptionsWrapper() { unLoadOptions(); loadOptions( EngineOption, _T("") ); loadOptions( PrivateOptions,_T("") ); } void OptionsWrapper::unLoadOptions() { for (int i = 0; i < LastOption; ++i) { unLoadOptions( (GameOption)i ); } } void OptionsWrapper::unLoadOptions(GameOption i) { GameOptions empty; m_opts[i] = empty; mmSectionTreeMap::iterator itor = m_sections.find( i ); if ( itor != m_sections.end() ) m_sections.erase( itor ); } OptionsWrapper::~OptionsWrapper() { } bool OptionsWrapper::loadMapOptions( const wxString& mapname) { return loadOptions(MapOption,mapname); } OptionType OptionsWrapper::GetSingleOptionType ( const wxString& key) const { OptionType type = opt_undefined; for ( int g = 0; g < LastOption; g++ ) { if (keyExists(key,(GameOption)g,false,type)) return type; } return opt_undefined; } bool OptionsWrapper::loadAIOptions( const wxString& modname, int aiindex,const wxString& ainame ) { int mapindex = m_ais_indexes[ainame]; if ( mapindex == 0 ) mapindex = m_ais_indexes.size() + LastOption; m_ais_indexes[ainame] = mapindex; wxLogDebugFunc( _T("bot name: ") + ainame + _T(" option index: ") + TowxString( mapindex ) ); unLoadOptions((GameOption)mapindex); try { GameOptions opt = usync().GetAIOptions( modname, aiindex ); ParseSectionMap( m_sections[mapindex], opt.section_map ); m_opts[mapindex] = opt; } catch (...) { return false; } return true; } int OptionsWrapper::GetAIOptionIndex( const wxString& nick ) const { std::map::const_iterator itor = m_ais_indexes.find(nick); int pos = -1; if ( itor != m_ais_indexes.end() ) pos = itor->second; wxLogDebugFunc( _T("bot name: ") + nick + _T(" option index: ") + TowxString( pos ) ); return pos; } bool OptionsWrapper::loadOptions( GameOption modmapFlag, const wxString& name, const wxString& extra_filename ) { unLoadOptions(modmapFlag); GameOptions opt; switch (modmapFlag) { default: break; case MapOption: try { opt = usync().GetMapOptions(name); ParseSectionMap( m_sections[modmapFlag], opt.section_map ); } catch(...) { wxLogError(_T("Could not load map options")); return false; } break; case ModOption: try { opt = usync().GetModOptions(name); ParseSectionMap( m_sections[modmapFlag], opt.section_map ); } catch(...) { wxLogError(_T("Could not load game options")); return false; } break; case EngineOption: { mmOptionList startpos( _("Start Position Type"),_T("startpostype"), _("How players will select where to be spawned in the map\n0: fixed map positions\n1: random map positions\n2: choose in game\n3: choose in the lobby before starting"), _T("0") ); startpos.addItem( _T("0"), _("Fixed"), _T("Use the start positions defined in the map, the positions will be assigned incrementally from the team with lowest number to highest") ); startpos.addItem( _T("1"), _("Random"), _T("Use the start positions defined in the map, the positions will be assigned randomly") ); startpos.addItem( _T("2"), _("Choose in-game"), _T("Players will be able to pick their own starting point right before the game starts, optionally limited by a bounding box defined by the host") ); startpos.addItem( _T("3"), _("Choose before game"), _T("The host will place each player's start position in the map preview before the game is launched") ); opt.list_map[_T("startpostype")] = startpos; break; } case PrivateOptions: { opt.string_map[_T("restrictions")] = mmOptionString(_("List of restricted units"), _T("restrictedunits"), _T("Units in this list won't be available in game"), _T(""), 0 ); // tab separated list opt.string_map[_T("mapname")] = mmOptionString(_("Map name"), _T("mapname"), _T("Map name"), _T(""), 0 ); break; } case ModCustomizations: { try { opt = usync().GetModCustomizations( name ); } catch(...) { wxLogError(_T("Could not load mod customizations")); return false; } break; } case SkirmishOptions: { try { opt = usync().GetSkirmishOptions( name, extra_filename ); } catch(...) { wxLogError(_T("Could not load skirmish options")); return false; } break; } } m_opts[modmapFlag] = opt; return true; } OptionsWrapper::GameOption OptionsWrapper::GetSection( const wxString& key ) const { GameOption ret = LastOption; bool found = false; for ( int flag = 0; flag < PrivateOptions; flag++ ) { OptionType optType = opt_undefined; found = keyExists( key, (GameOption)flag, false, optType ); if ( found ) { ret = (GameOption)flag; break; } } return ret; } bool OptionsWrapper::keyExists( const wxString& key ) const { bool found = false; for ( int flag = 0; flag < PrivateOptions; flag++ ) { OptionType optType = opt_undefined; found = keyExists( key, (GameOption)flag, false, optType ); if ( found ) break; } return found; } bool OptionsWrapper::keyExists( const wxString& key, const GameOption modmapFlag, bool showError, OptionType& optType ) const { wxString duplicateKeyError = _T("Please contact the game's author and tell him\n\ to use unique keys in his ModOptions.lua"); bool exists = false; optType = opt_undefined; GameOptionsMap::const_iterator optIt = m_opts.find((int)modmapFlag); if ( optIt == m_opts.end() ) return false; const GameOptions& gameoptions = optIt->second; if ( gameoptions.list_map.find(key) != gameoptions.list_map.end()) { optType = opt_list; exists = true; } else if ( gameoptions.string_map.find(key) != gameoptions.string_map.end()) { optType = opt_string; exists = true; } else if ( gameoptions.bool_map.find(key) != gameoptions.bool_map.end()) { optType = opt_bool; exists = true; } else if ( gameoptions.float_map.find(key)!= gameoptions.float_map.end()) { optType = opt_float; exists = true; } else if ( gameoptions.section_map.find(key)!= gameoptions.section_map.end()) { optType = opt_section; exists = true; } if (exists && showError) { customMessageBoxNoModal(SL_MAIN_ICON,duplicateKeyError,_T("Mod/map option error"),wxOK); wxLogWarning(_T("duplicate key in mapmodoptions")); return false; } else if ( exists && !showError ) { return true; } else return false; } bool OptionsWrapper::setOptions(wxStringPairVec* options, GameOption modmapFlag) { for (wxStringPairVec::const_iterator it = options->begin(); it != options->end(); ++it) { wxString key = it->first; wxString value = it->second; //we don't want to add a key that doesn't already exists OptionType optType = opt_undefined; if(!keyExists(key,modmapFlag,false,optType)) return false; else { if ( !setSingleOptionTypeSwitch( key, value, modmapFlag, optType) ) return false; } } return true; } OptionsWrapper::wxStringTripleVec OptionsWrapper::getOptions( GameOption modmapFlag) const { wxStringTripleVec list; GameOptionsMapCIter optIt = m_opts.find((int)modmapFlag); if ( optIt != m_opts.end() ) { const GameOptions& gameoptions = optIt->second; for (SpringUnitSync::OptionMapBoolConstIter it = gameoptions.bool_map.begin(); it != gameoptions.bool_map.end(); ++it) { list.push_back( wxStringTriple( (*it).first, wxStringPair ( it->second.name , TowxString(it->second.value) ) ) ); } for (SpringUnitSync::OptionMapStringConstIter it = gameoptions.string_map.begin(); it != gameoptions.string_map.end(); ++it) { list.push_back( wxStringTriple( (*it).first, wxStringPair ( it->second.name, it->second.value) ) ); } for (SpringUnitSync::OptionMapFloatConstIter it = gameoptions.float_map.begin(); it != gameoptions.float_map.end(); ++it) { list.push_back( wxStringTriple( (*it).first, wxStringPair ( it->second.name, TowxString(it->second.value) ) ) ); } for (SpringUnitSync::OptionMapListConstIter it = gameoptions.list_map.begin(); it != gameoptions.list_map.end(); ++it) { list.push_back( wxStringTriple( (*it).first, wxStringPair ( it->second.name, it->second.value ) ) ); } } return list; } std::map OptionsWrapper::getOptionsMap( GameOption modmapFlag ) const { std::map map; GameOptionsMapCIter optIt = m_opts.find((int)modmapFlag); if ( optIt != m_opts.end() ) { const GameOptions& gameoptions = optIt->second; for (SpringUnitSync::OptionMapBoolConstIter it = gameoptions.bool_map.begin(); it != gameoptions.bool_map.end(); ++it) { map[it->first] = TowxString(it->second.value); } for (SpringUnitSync::OptionMapStringConstIter it = gameoptions.string_map.begin(); it != gameoptions.string_map.end(); ++it) { map[it->first] = it->second.value; } for (SpringUnitSync::OptionMapFloatConstIter it = gameoptions.float_map.begin(); it != gameoptions.float_map.end(); ++it) { map[it->first] = TowxString(it->second.value); } for (SpringUnitSync::OptionMapListConstIter it = gameoptions.list_map.begin(); it != gameoptions.list_map.end(); ++it) { map[it->first] = it->second.value; } } return map; } bool OptionsWrapper::setSingleOption( const wxString& key, const wxString& value,GameOption modmapFlag) { OptionType optType = opt_undefined; keyExists( key, modmapFlag, false, optType ); return setSingleOptionTypeSwitch(key,value,modmapFlag,optType); } bool OptionsWrapper::setSingleOption( const wxString& key, const wxString& value ) { OptionType optType = opt_undefined; if (keyExists(key,ModOption,false,optType)) return setSingleOptionTypeSwitch(key,value,ModOption,optType); else if (keyExists(key,MapOption,false,optType)) return setSingleOptionTypeSwitch(key,value,MapOption,optType); else return false; } wxString OptionsWrapper::getSingleValue( const wxString& key) const { for ( int g = 0; g < LastOption; g++ ) { const wxString tmp = getSingleValue(key, (GameOption)g); if (tmp != wxEmptyString) return tmp; } return wxEmptyString; } template < class MapType > static inline typename MapType::mapped_type GetItem( const MapType& map, const typename MapType::key_type& key ) { typename MapType::const_iterator mapIt = map.find(key); if ( mapIt != map.end() ) return mapIt->second; else return typename MapType::mapped_type(); } wxString OptionsWrapper::getSingleValue( const wxString& key, GameOption modmapFlag) const { OptionType optType = opt_undefined; if ( keyExists(key,modmapFlag,false,optType) ) { GameOptionsMapCIter optIt = m_opts.find((int)modmapFlag); if ( optIt == m_opts.end() ) return wxEmptyString; const GameOptions& tempOpt = optIt->second; switch (optType) { case opt_float: return TowxString( GetItem( tempOpt.float_map, key ).value ); case opt_bool: return TowxString( GetItem( tempOpt.bool_map, key ).value ); case opt_string: return GetItem( tempOpt.string_map, key ).value ; case opt_list: return GetItem( tempOpt.list_map, key ).value; case opt_undefined: default: return wxEmptyString; } } return wxEmptyString; } wxString OptionsWrapper::getDefaultValue( const wxString& key, GameOption modmapFlag) const { OptionType optType = opt_undefined; wxString ret; if ( keyExists(key,modmapFlag,false,optType) ) { //purposefully create a copy, no better idea GameOptionsMapCIter optIt = m_opts.find((int)modmapFlag); if ( optIt == m_opts.end() ) return wxEmptyString; const GameOptions& tempOpt = optIt->second; switch ( optType ) { { case opt_bool: ret = TowxString( GetItem( tempOpt.bool_map, key ).def ); break; } case opt_float: { ret = TowxString( GetItem( tempOpt.float_map, key ).def ); break; } case opt_string: { ret = GetItem( tempOpt.string_map, key ).def; break; } case opt_list: { ret = GetItem( tempOpt.list_map, key ).def; break; } default: { break; } } } return ret; } bool OptionsWrapper::setSingleOptionTypeSwitch( const wxString& key, const wxString& value, GameOption modmapFlag, OptionType optType) { GameOptions& gameoptions = m_opts[modmapFlag]; switch (optType) { case opt_float : { //test if min < val < max double d_val; //temp set to C locale cause we get '.' as decimal seperator over the net const char* old_locale = std::setlocale(LC_NUMERIC, "C"); bool d_conv_ok = value.ToDouble(&d_val); std::setlocale(LC_NUMERIC, old_locale); if( !d_conv_ok || d_val < (gameoptions.float_map)[key].min || d_val > (gameoptions.float_map)[key].max ) { wxLogWarning(_T("recieved number option exceeds boundaries")); return false; } else (gameoptions.float_map)[key].value = d_val; break; } case opt_bool : { long l_val; bool l_conv_ok = value.ToLong(&l_val); if( !l_conv_ok || ( l_val != 1 && l_val != 0 ) ) { wxLogWarning(_T("recieved bool option that is neither 0 or 1")); return false; } else (gameoptions.bool_map)[key].value = bool(l_val); break; } case opt_string : { // test if maxlength isn't exceeded unsigned int max_lenght = (gameoptions.string_map)[key].max_len; if ( ( max_lenght != 0 ) && ( value.Len() > max_lenght ) ) { wxLogWarning(_T("recieved string option exceeds max_len")); return false; } else (gameoptions.string_map)[key].value = value; break; } case opt_list : { // test if valid value, aka is in list int listitemcount = (gameoptions.list_map)[key].listitems.size(); bool valid_string = false; int j = 0; for (; j < listitemcount; ++j) { if ( (gameoptions.list_map)[key].listitems[j].key == value) { valid_string = true; break; } } if (valid_string) { //LOOKATME (koshi) if there's a problem with list modoption look here first (gameoptions.list_map)[key].value = (gameoptions.list_map)[key].listitems[j].key; (gameoptions.list_map)[key].cur_choice_index = j; } else { wxLogWarning(_T("recieved list option is not valid")); return false; } break; } default: return false; } //if we made it here, all is good return true; } wxString OptionsWrapper::GetNameListOptValue( const wxString& key, GameOption flag) const { OptionType optType; if ( keyExists(key,flag,false, optType) ) { if ( optType == opt_list) { GameOptionsMapCIter optIt = m_opts.find((int)flag); if ( optIt == m_opts.end() ) return wxEmptyString; GameOptions tempOpt = optIt->second; return ( (tempOpt.list_map)[key].cbx_choices[ (tempOpt.list_map)[key].cur_choice_index ] ); } } // at this point retrieval failed return wxEmptyString; } wxString OptionsWrapper::GetNameListOptItemKey( const wxString& optkey, const wxString& itemname, GameOption flag) const { OptionType optType; if ( keyExists(optkey,flag,false, optType) ) { if ( optType == opt_list) { GameOptionsMapCIter optIt = m_opts.find((int)flag); if ( optIt == m_opts.end() ) return wxEmptyString; GameOptions tempOpt = optIt->second; for (ListItemVec::const_iterator it = (tempOpt.list_map)[optkey].listitems.begin(); it != (tempOpt.list_map)[optkey].listitems.end(); ++it) { if (it->name == itemname) return it->key; } } } // at this point retrieval failed return wxEmptyString; } bool OptionsWrapper::MergeOptions( const OptionsWrapper& other, GameOption merge_into ) { GameOptionsMapCIter other_it = other.m_opts.begin(); for ( ; other_it != other.m_opts.end(); ++other_it ) { const GameOptions& other_opts = other_it->second; //const GameOption other_id = (const GameOption)other_it->first; //TODO (koshi) what was this supposed to be used for? for (SpringUnitSync::OptionMapBoolConstIter it = other_opts.bool_map.begin(); it != other_opts.bool_map.end();++it ) { m_opts[merge_into].bool_map[it->first] = it->second; } for ( SpringUnitSync::OptionMapFloatConstIter it = other_opts.float_map.begin(); it != other_opts.float_map.end(); ++it ) { m_opts[merge_into].float_map[it->first] = it->second; } for ( SpringUnitSync::OptionMapListConstIter it = other_opts.list_map.begin(); it != other_opts.list_map.end(); ++it ){ m_opts[merge_into].list_map[it->first] = it->second; } for ( SpringUnitSync::OptionMapStringConstIter it = other_opts.string_map.begin(); it != other_opts.string_map.end(); ++it ) { m_opts[merge_into].string_map[it->first] = it->second; } } return true; } void OptionsWrapper::ParseSectionMap( mmSectionTree& section_tree, const SpringUnitSync::OptionMapSection& section_map ) { // map child-key <-> parent-key typedef std::map RelationMap; typedef std::map::iterator RelationMapIter; RelationMap relation_map; //setup relation map for ( SpringUnitSync::OptionMapSectionConstIter it = section_map.begin(); it != section_map.end(); ++it ) { relation_map[it->second.key] = it->second.section; } RelationMapIter rit = relation_map.begin(); // no more items in the map means we've added them all while ( !relation_map.empty()) { RelationMapIter rit_next = rit; // in case we need to delete ++rit_next; if ( relation_map.find(rit->second) == relation_map.end() ) { //either we already added this sections parent or it's a root section SpringUnitSync::OptionMapSectionConstIter section = section_map.find(rit->first); assert ( section != section_map.end() ); section_tree.AddSection( section->second ); //we're done with this section, so remove it relation_map.erase(rit); } rit = rit_next; //we've reached the end of the map, restart at beginning if ( rit == relation_map.end() ) rit = relation_map.begin(); } } mmSectionTree::mmSectionTree() : m_tree ( new wxFileConfig( _T("SL-temp"), wxEmptyString, wxFileName::CreateTempFileName( _T("springlobby-tree_") ) ) ) {} mmSectionTree::~mmSectionTree() { if (m_tree!=NULL) { #ifndef NDEBUG m_tree->Flush(); #else //no need to clutter tempfile directory if we're not debugging m_tree->DeleteAll(); #endif } } void mmSectionTree::AddSection ( const wxString& parentpath, const mmOptionSection& section ) { wxString fullpath = parentpath + _T("/") + section.key + _T("/"); m_tree->Write( fullpath + _T("key") ,section.key ); #ifndef NDEBUG m_tree->Flush(); #endif } bool mmSectionTree::FindRecursive( const wxString& parent_key, wxString& path ) { wxString current; long cur_index; //search current level first before recursing bool cont = m_tree->GetFirstGroup( current, cur_index ); while ( cont ) { if ( current.EndsWith( parent_key ) ) { path = current; return true; } cont = m_tree->GetNextGroup( current, cur_index ); } //we need to recurse into sub-paths cont = m_tree->GetFirstGroup( current, cur_index ); while ( cont ) { wxString old_path = m_tree->GetPath(); m_tree->SetPath( old_path + _T("/") + current ); if ( FindRecursive( parent_key, path ) ) return true; m_tree->SetPath( old_path ); cont = m_tree->GetNextGroup( current, cur_index ); } return false; } wxString mmSectionTree::FindParentpath ( const wxString& parent_key ) { wxString path = _T("/"); if ( FindRecursive( parent_key, path ) ) return path; else return _T(""); } void mmSectionTree::AddSection( const mmOptionSection& section) { m_section_map[section.key] = section; wxString name = section.section; if ( section.section == SLGlobals::nosection_name ) { AddSection( _T("/"), section ); } else { wxString parent = FindParentpath( section.section ); AddSection( parent , section ); } } //mmSectionTree::SectionVector mmSectionTree::GetSectionVector() //{ // //} void mmSectionTree::Clear() { m_section_map.clear(); m_tree->DeleteAll(); } springlobby-0.169/src/mmoptionswrapper.h0000600000176000000410000001642612105760300022016 0ustar buildbotwww-data00000000000000#ifndef MMOPTIONSORAPPER_H_ #define MMOPTIONSORAPPER_H_ #include "springunitsync.h" #include #include #include #include struct GameOptions; class wxFileConfig; //! \todo needs deep copy class mmSectionTree { public: mmSectionTree(); ~mmSectionTree(); void AddSection( const mmOptionSection& section ); mmOptionSection GetSection( const wxString& key ); typedef std::vector< mmOptionSection > SectionVector; // SectionVector GetSectionVector(); void Clear(); protected: //map key -> option typedef std::map< wxString, mmOptionSection > SectionMap; SectionMap m_section_map; typedef wxFileConfig ConfigType; boost::shared_ptr m_tree; void AddSection ( const wxString& path, const mmOptionSection& section ); wxString FindParentpath ( const wxString& parent_key ); bool FindRecursive( const wxString& parent_key, wxString& path ); }; class OptionsWrapper { public: //! public types typedef std::pair < wxString,wxString> wxStringPair; typedef std::pair < wxString, wxStringPair> wxStringTriple; typedef std::vector wxStringPairVec; typedef std::vector wxStringTripleVec; typedef std::map wxStringMap; typedef std::map GameOptionsMap; typedef std::map mmSectionTreeMap; //! enum to differentiate option category easily at runtime enum GameOption{ PrivateOptions = 3, EngineOption = 2, MapOption = 1, ModOption = 0, ModCustomizations = 4, SkirmishOptions = 5, LastOption = 6 };// should reflect: optionCategoriesCount //does nothing OptionsWrapper(); virtual ~OptionsWrapper(); //! just calls loadOptions(MapOption,mapname) bool loadMapOptions(const wxString& mapname); bool loadAIOptions( const wxString& modname, int aiindex, const wxString& ainick ); int GetAIOptionIndex( const wxString& nick ) const; //! load corresponding options through unitsync calls /*! * the containers for corresponding flag are recreated and then gets the number of options from unitsync * and adds them one by one to the appropiate container * \param flag decides which type of option to load * \param name Mod/Mapname * \param extra_filename used for loading arbitrary lua tables from inside the given mod/map * \return true if load successful, false otherwise */ bool loadOptions(GameOption flag, const wxString& name, const wxString& extra_filename = _T("") ); //! checks if given key can be found in specified container /*! * \param key the key that should be checked for existance in containers * \param flag which GameOption conatiner should be searched * \param showError if true displays a messagebox if duplicate key is found * \param optType will contain the corresponding OptionType if key is found, opt_undefined otherwise * \return true if key is found, false otherwise */ bool keyExists(const wxString& key, const GameOption flag, const bool showError, OptionType& optType) const; //! checks if given key can be found in all containers /*! * \param key the key that should be checked for existance in containers * \return true if key is found, false otherwise */ bool keyExists(const wxString& key ) const; //! checks which container this key belongs to /*! * \param key the key that should be checked for existance in containers * \return they container section */ GameOption GetSection( const wxString& key ) const; //! given a vector of key/value pairs sets the appropiate options to new values /*! Every new value is tested for meeting boundary conditions, type, etc. * If test fails error is logged and false is returned. * \param values the wxStringPairVec containing key / new value pairs * \param flag which OptionType is to be processed * \return false if ANY error occured, true otherwise */ bool setOptions(wxStringPairVec* values,GameOption flag); //! get all options of one GameOption /*! the output has the following format: < wxString , Pair < wxString , wxString > > * meaning < key , < name , value > > * \param triples this will contain the options after the function * \param flag which OptionType is to be processed */ wxStringTripleVec getOptions( GameOption flag ) const; //! similar to getOptions, instead of vector a map is used and the name is not stored std::map getOptionsMap(GameOption) const; //! recreates ALL containers void unLoadOptions(); //! recreates the containers of corresponding flag void unLoadOptions(GameOption flag); //! returns value of specified key /*! searches all containers for key * \return value of key if key found, "" otherwise */ wxString getSingleValue(const wxString& key) const; //! returns value of specified key /*! searches containers of type flag for key * \return value of key if key found, "" otherwise */ wxString getSingleValue(const wxString& key, GameOption flag) const; wxString getDefaultValue(const wxString& key, GameOption flag) const; //! sets a single option in specified container /*! \return true if success, false otherwise */ bool setSingleOption(const wxString& key, const wxString& value, GameOption modmapFlag); //! same as before, but tries all containers bool setSingleOption(const wxString& key, const wxString& value); //! returns the option type of specified key (all containers are tried) OptionType GetSingleOptionType (const wxString& key) const; //!returns the cbx_choice associated w current listoption wxString GetNameListOptValue(const wxString& key, GameOption flag) const; //! returns the listitem key associated with listitem name wxString GetNameListOptItemKey(const wxString& optkey, const wxString& itemname, GameOption flag) const; GameOptionsMap m_opts; //! after loading sections into map, parse them into tree void ParseSectionMap( mmSectionTree& section_tree, const SpringUnitSync::OptionMapSection& section_map ); //! Merge this another wrapper's options into this one, with the other'soptions taking precendence bool MergeOptions( const OptionsWrapper& other, GameOption merge_into ); protected: //! used for code clarity in setOptions() bool setSingleOptionTypeSwitch(const wxString& key, const wxString& value, GameOption modmapFlag, OptionType optType); mmSectionTreeMap m_sections; //! a map that connects the ai nick with it's set of options std::map m_ais_indexes; typedef GameOptionsMap::const_iterator GameOptionsMapCIter; }; #endif /*MMOPTIONSORAPPER_H_*/ /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/mru_cache.h0000600000176000000410000000610412105760300020306 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef SPRINGLOBBY_HEADERGUARD_MRU_CACHE_H #define SPRINGLOBBY_HEADERGUARD_MRU_CACHE_H #include "utils/conversion.h" #include "utils/debug.h" #include #include #include #include #include #include #include #include /// Thread safe MRU cache (works like a std::map but has maximum size) template class MostRecentlyUsedCache { public: //! name parameter might be used to identify stats in dgb output MostRecentlyUsedCache(int max_size, const wxString& name = _T("") ) : m_size(0), m_max_size(max_size), m_cache_hits(0), m_cache_misses(0), m_name(name) { } ~MostRecentlyUsedCache() { wxLogDebugFunc( m_name + _T("cache hits: ") + TowxString( m_cache_hits ) ); wxLogDebugFunc( m_name + _T("cache misses: ") + TowxString( m_cache_misses ) ); } void Add( const TKey& name, const TValue& img ) { wxCriticalSectionLocker lock(m_lock); while ( m_size >= m_max_size ) { --m_size; m_iterator_map.erase( m_items.back().first ); m_items.pop_back(); } ++m_size; m_items.push_front( CacheItem( name, img ) ); m_iterator_map[name] = m_items.begin(); } bool TryGet( const TKey& name, TValue& img ) { wxCriticalSectionLocker lock(m_lock); typename IteratorMap::iterator it = m_iterator_map.find( name ); if ( it == m_iterator_map.end() ) { ++m_cache_misses; return false; } // reinsert at front, so that most recently used items are always at front m_items.push_front( *it->second ); m_items.erase( it->second ); it->second = m_items.begin(); // return image img = it->second->second; ++m_cache_hits; return true; } void Clear() { wxCriticalSectionLocker lock(m_lock); m_size = 0; m_items.clear(); m_iterator_map.clear(); } private: typedef std::pair CacheItem; typedef std::list CacheItemList; typedef std::map IteratorMap; mutable wxCriticalSection m_lock; CacheItemList m_items; IteratorMap m_iterator_map; int m_size; const int m_max_size; int m_cache_hits; int m_cache_misses; const wxString m_name; }; typedef MostRecentlyUsedCache MostRecentlyUsedImageCache; typedef MostRecentlyUsedCache MostRecentlyUsedMapInfoCache; typedef MostRecentlyUsedCache MostRecentlyUsedArrayStringCache; #endif // MRU_CACHE_H springlobby-0.169/src/mutexwrapper.h0000600000176000000410000000452412105760300021127 0ustar buildbotwww-data00000000000000#ifndef MUTEXWRAPPER_H #define MUTEXWRAPPER_H #include #include template class MutexWrapper; class AbstractMutexWrapper{ public: virtual ~AbstractMutexWrapper(){} virtual void Lock()=0; virtual void UnLock()=0; }; template class ScopedLocker { private: MutexWrapper &mw; ScopedLocker(const ScopedLocker &/*other*/){}/// prevent copying ScopedLocker& operator= (const ScopedLocker& /*other*/){}/// and assignment public: explicit ScopedLocker(MutexWrapper &mw_):mw(mw_){ mw.Lock(); } ~ScopedLocker(){ mw.UnLock(); } T &Get(){ return mw.GetData(); } }; /* class ScopedLocker { private: AbstractMutexWrapper *mw; ScopedLocker(const ScopedLocker &other){}/// prevent copying ScopedLocker& operator= (const ScopedLocker& other){}/// and assignment public: explicit ScopedLocker(AbstractMutexWrapper &mw_):mw(*mw_){ mw.Lock(); } ~ScopedLocker(){ mw.UnLock(); } };*/ template class MutexWrapper: public AbstractMutexWrapper { wxCriticalSection mutex;/// critical section is same as mutex except on windows it only works within one process (i.e. program). I'm gonna call it mutex. T data; bool locked; public: MutexWrapper(): locked(false) { } virtual ~MutexWrapper(){ } virtual void Lock(){ mutex.Enter(); locked=true; } virtual void UnLock(){ locked=false; mutex.Leave(); } protected: T &GetData(){ if(!locked) { wxLogError(_T("serious error in MutexWrapper usage : not locked, but Get() is called!")); } return data; } friend class ScopedLocker; }; #endif // MUTEXWRAPPER_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/nicklistctrl.cpp0000600000176000000410000001706212105760300021425 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007, 2008 The SpringLobby Team. All rights reserved. */ // // Class: NickListCtrl // #include #include #include #include #include #include #include #include #include "nicklistctrl.h" #include #include "utils/debug.h" #include "utils/conversion.h" #include "iconimagelist.h" #include "user.h" #include "settings.h" #include "ui.h" #include "mainwindow.h" #include "countrycodes.h" #include "chatpanel.h" #include "chatpanelmenu.h" #include "userlist.h" #include "usermenu.h" #include "Helper/sortutil.h" BEGIN_EVENT_TABLE( NickListCtrl, NickListCtrl::BaseType ) EVT_LIST_ITEM_ACTIVATED ( NICK_LIST, NickListCtrl::OnActivateItem ) EVT_CONTEXT_MENU ( NickListCtrl::OnShowMenu ) #if wxUSE_TIPWINDOW #ifndef __WXMSW__ //disables tooltips on win and mac EVT_MOTION ( NickListCtrl::OnMouseMotion ) #endif #endif END_EVENT_TABLE() template<> SortOrder NickListCtrl::BaseType::m_sortorder = SortOrder( ) ; NickListCtrl::NickListCtrl( wxWindow* parent, bool show_header, NickListCtrl::UserMenu* popup, bool singleSelectList, const wxString& name, bool highlight ) : NickListCtrl::BaseType( parent, NICK_LIST, wxDefaultPosition, wxDefaultSize, wxLC_VIRTUAL | wxSUNKEN_BORDER | wxLC_REPORT | ( int )( !show_header ) * wxLC_NO_HEADER | ( int )( singleSelectList ) * wxLC_SINGLE_SEL, name, 3, &NickListCtrl::CompareOneCrit, highlight, UserActions::ActHighlight, true /*periodic sort*/ ), m_menu( popup ) { #if defined(__WXMAC__) const int widths [4] = { 20, 20, 20, 120 }; #else const int widths [4] = { 20, 20, 20, 120 }; #endif AddColumn( 0, widths[0], _( "s" ), _T( "Status" ) ); AddColumn( 1, widths[1], _( "c" ), _T( "Country" ) ); AddColumn( 2, widths[2], _( "r" ), _T( "Rank" ) ); AddColumn( 3, widths[3], _( "Nickname" ), _T( "Nickname" ) ); if ( m_sortorder.size() == 0 ) { m_sortorder[0].col = 0; m_sortorder[0].direction = -1; m_sortorder[1].col = 3; m_sortorder[1].direction = 1; m_sortorder[2].col = 2; m_sortorder[2].direction = 1; m_sortorder[3].col = 1; m_sortorder[3].direction = 1; } } NickListCtrl::~NickListCtrl() { } void NickListCtrl::AddUser( const User& user ) { if ( AddItem( &user ) ) return; wxLogWarning( _T( "Useralready in list." ) ); } void NickListCtrl::RemoveUser( const User& user ) { if ( RemoveItem( &user ) ) return; wxLogError( _T( "Didn't find the user to remove." ) ); } void NickListCtrl::UserUpdated( const User& user ) { int index = GetIndexFromData( &user ); if ( index != -1 ) { m_data[index] = &user; MarkDirtySort(); RefreshItem( index ); } else { wxLogWarning( _T( "NickListCtrl::UserUpdated error, index == -1 ." ) ); } } void NickListCtrl::ClearUsers() { Clear(); } void NickListCtrl::OnActivateItem( wxListEvent& event ) { int index = event.GetIndex(); if ( index == -1 ) return; const User* user = m_data[index]; if ( user ) { ui().mw().OpenPrivateChat( *user, true ); //true --> setfoucs } SetSelectedIndex( index ); } void NickListCtrl::OnShowMenu( wxContextMenuEvent& /*unused*/ ) { wxLogDebugFunc( _T( "" ) ); if ( m_menu != 0 ) { //no need to popup the menu when there's no user selected int selected = GetSelectedIndex(); if ( selected != -1 && m_data[selected] ) { const User& user = *m_data[selected]; wxString nick = user.GetNick(); m_menu->EnableItems( ( selected != -1 ), nick ); PopupMenu( m_menu ); } } } void NickListCtrl::SetTipWindowText( const long item_hit, const wxPoint& position ) { int column = getColumnFromPosition( position ); if ( column > ( int )m_colinfovec.size() || column < 0 || item_hit < 0 || item_hit > ( long ) m_data.size() || m_data[item_hit] == NULL ) { m_tiptext = _T( "" ); } else { const User& user = *m_data[item_hit]; { switch ( column ) { case 0: // status m_tiptext = _T( "This " ); if ( user.GetStatus().bot ) m_tiptext << _T( "bot " ); else if ( user.GetStatus().moderator ) m_tiptext << _T( "moderator " ); else m_tiptext << _T( "player " ); if ( user.GetStatus().in_game ) m_tiptext << _T( "is ingame" ); else if ( user.GetStatus().away ) m_tiptext << _T( "is away" ); else m_tiptext << _T( "is available" ); break; case 1: // country m_tiptext = GetFlagNameFromCountryCode( user.GetCountry().Upper() ); break; case 2: // rank m_tiptext = user.GetRankName( user.GetStatus().rank ); break; case 3: // nickname m_tiptext = user.GetNick(); break; default: m_tiptext = m_colinfovec[column].tip; break; } } } } wxListItemAttr* NickListCtrl::GetItemAttr( long item ) const { if ( item > -1 && item < ( long ) m_data.size() && m_data[item] ) { const User& u = *m_data[item]; wxString name = u.GetNick(); return HighlightItemUser( name ); } return NULL; } void NickListCtrl::HighlightItem( long /*unused*/ ) { } int NickListCtrl::GetIndexFromData( const DataType& data ) const { const User* user = data; static long seekpos; seekpos = LSL::Util::Clamp( seekpos, 0l , ( long )m_data.size() ); int index = seekpos; for ( DataCIter f_idx = m_data.begin() + seekpos; f_idx != m_data.end() ; ++f_idx ) { if ( user == *f_idx ) { seekpos = index; return seekpos; } index++; } //it's ok to init with seekpos, if it had changed this would not be reached int r_index = seekpos - 1; for ( DataRevCIter r_idx = m_data.rbegin() + ( m_data.size() - seekpos ); r_idx != m_data.rend() ; ++r_idx ) { if ( user == *r_idx ) { seekpos = r_index; return seekpos; } r_index--; } return -1; } void NickListCtrl::Sort() { if ( m_data.size() > 0 ) { SaveSelection(); SLInsertionSort( m_data, m_comparator ); RestoreSelection(); } } wxString NickListCtrl::GetItemText( long item, long column ) const { switch ( column ) { case 0: case 1: case 2: default: return wxEmptyString; case 3: { if ( m_data[item] ) return m_data[item]->GetNick(); else return wxEmptyString; } } return wxEmptyString; } int NickListCtrl::GetItemColumnImage( long item, long column ) const { if ( m_data[item] ) { const User& user = *m_data[item]; switch ( column ) { case 0: return user.GetStatusIconIndex(); case 1: return user.GetFlagIconIndex(); case 2: return user.GetRankIconIndex(); case 3: default: return -1; } } return -1; } int NickListCtrl::CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const { if ( ! ( u1 && u2 ) ) return 0; switch ( col ) { case 0: return dir * CompareUserStatus( u1, u2 ); case 1: return dir * u2->GetCountry().CmpNoCase( u1->GetCountry() ); case 2: return dir * compareSimple( u2->GetStatus().rank, u1->GetStatus().rank ); case 3: return dir * u2->GetNick().CmpNoCase( u1->GetNick() ) ; default: return 0; } } int NickListCtrl::CompareUserStatus( DataType user1, DataType user2 ) { ASSERT_LOGIC( user1 != 0, _T( "user1 = 0" ) ); ASSERT_LOGIC( user2 != 0, _T( "user2 = 0" ) ); int u1 = 0, u2 = 0; if ( user1->GetStatus().bot ) u1 += 1000; if ( user2->GetStatus().bot ) u2 += 1000; if ( user1->GetStatus().moderator ) u1 += 100; if ( user2->GetStatus().moderator ) u2 += 100; if ( user1->GetStatus().in_game ) u1 += -10; if ( user2->GetStatus().in_game ) u2 += -10; // inverse the order if ( u1 < u2 ) return -1; if ( u1 > u2 ) return 1; return 0; } springlobby-0.169/src/nicklistctrl.h0000600000176000000410000000503612105760300021070 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_NICKLISTCTRL_H #define SPRINGLOBBY_HEADERGUARD_NICKLISTCTRL_H #include "customvirtlistctrl.h" #include "usermenu.h" #include "utils/mixins.hh" class User; class UserList; class Ui; class ChatPanelMenu; class UserMenu; class NickListCtrl : public CustomVirtListCtrl< const User* ,NickListCtrl > { protected: typedef SL_GENERIC::UserMenu UserMenu; public: NickListCtrl( wxWindow* parent, bool show_header = true, UserMenu* popup = 0, bool singleSelectList = true, const wxString& name = _T("NickListCtrl"), bool highlight = true ); virtual ~NickListCtrl(); virtual void AddUser( const User& user ); void RemoveUser( const User& user ); void UserUpdated( const User& user ); void ClearUsers(); void OnActivateItem( wxListEvent& event ); void OnShowMenu( wxContextMenuEvent& event ); virtual void SetTipWindowText( const long item_hit, const wxPoint& position); void HighlightItem( long item ); //these are overloaded to use list in virtual style wxString GetItemText(long item, long column) const; int GetItemColumnImage(long item, long column) const; wxListItemAttr * GetItemAttr(long item) const; protected: //! passed as callback to generic ItemComparator, returns -1,0,1 as per defined ordering int CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const; //! utils func for comparing user status, so the CompareOneCrit doesn't get too crowded static int CompareUserStatus( DataType u1, DataType u2 ); //! required per base clase virtual void Sort( ); int GetIndexFromData( const DataType& data ) const; UserMenu* m_menu; enum { NICK_LIST = 31765 //wxID_HIGHEST //wxID_HIGHEST is used by BattleListCTRL. The cant be in the same Tab like BattleTab }; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_NICKLISTCTRL_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/nonportable.h0000600000176000000410000000270412105760300020705 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_NONPORTABLE_H #define SPRINGLOBBY_HEADERGUARD_NONPORTABLE_H #if defined(__WXMSW__) #define SPRING_VERSION_PARAM _T("/V") #define CHOOSE_EXE _("Executables (*.exe)|*.exe|Any File (*.*)|*.*") #define USYNC_CALL_CONV __stdcall #define SPRING_BIN _T("spring.exe") #define DOS_TXT true #elif defined(__WXGTK__) || defined(__WXX11__) #define SPRING_VERSION_PARAM _T("-V") #define CHOOSE_EXE _("Any file (*)|*") #define USYNC_CALL_CONV #define SPRING_BIN _T("spring") #define DOS_TXT false #elif defined(__WXMAC__) #define SPRING_VERSION_PARAM _T("-V") #define CHOOSE_EXE _("App Bundles (*.app)|*.app|Any File (*.*)|*.*") #define USYNC_CALL_CONV #define SPRING_BIN _T("Spring.app") #define DOS_TXT false #endif #endif // SPRINGLOBBY_HEADERGUARD_NONPORTABLE_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/offlinebattle.cpp0000600000176000000410000000421312105760300021530 0ustar buildbotwww-data00000000000000#include "offlinebattle.h" #include "spring.h" #include "ui.h" #include OfflineBattle::OfflineBattle( const int id ): m_id( id ), m_me( User(_T("Spectator")) ) { m_opts.founder = m_me.GetNick(); OnUserAdded( m_me ); UserBattleStatus& newstatus = m_me.BattleStatus(); newstatus.spectator = true; newstatus.sync = true; } OfflineBattle::OfflineBattle(): m_id( 0 ), m_me( User(_T("Spectator")) ) { m_opts.founder = m_me.GetNick(); OnUserAdded( m_me ); UserBattleStatus& newstatus = m_me.BattleStatus(); newstatus.spectator = true; newstatus.sync = true; } void OfflineBattle::StartSpring() { spring().Run(*this); ui().OnSpringStarting(); } OfflineBattle::OfflineBattle ( const OfflineBattle& other ) : IBattle() { *this = other; } OfflineBattle& OfflineBattle::operator = ( const OfflineBattle& other ) { m_map_loaded = other.m_map_loaded; m_map_loaded = other.m_map_loaded; m_mod_loaded = other.m_mod_loaded; m_map_exists = other.m_map_exists; m_mod_exists = other.m_mod_exists; m_local_map = other.m_local_map; m_local_mod = other.m_local_mod; m_host_map = other.m_host_map; m_host_mod = other.m_host_mod; m_restricted_units = other.m_restricted_units; m_opt_wrap = other.m_opt_wrap; m_opts = other.m_opts; m_ingame = other.m_ingame; m_generating_script = other.m_generating_script; m_rects = other.m_rects; m_ready_up_map = other.m_ready_up_map; // player name -> time counting from join/unspect m_players_ready = other.m_players_ready; m_players_sync = other.m_players_sync; m_teams_sizes = other.m_teams_sizes; // controlteam -> number of people in m_ally_sizes = other.m_ally_sizes; // allyteam -> number of people in m_preset = other.m_preset; m_is_self_in = other.m_is_self_in; m_internal_bot_list = other.m_internal_bot_list; m_script = other.m_script; m_playback_file_path = other.m_playback_file_path; m_parsed_teams = other.m_parsed_teams; m_parsed_allies = other.m_parsed_allies; m_internal_user_list = other.m_internal_user_list; m_timer = new wxTimer( other.m_timer ); //!no idea if this is proper return *this; } springlobby-0.169/src/offlinebattle.h0000600000176000000410000000227512105760300021203 0ustar buildbotwww-data00000000000000#ifndef OFFLINEBATTLE_H_INCLUDED #define OFFLINEBATTLE_H_INCLUDED #include "ibattle.h" class OfflineBattle : public IBattle { public: OfflineBattle ( const int id ); OfflineBattle ( ); OfflineBattle ( const OfflineBattle& ); OfflineBattle& operator = ( const OfflineBattle& ); ~OfflineBattle (){} User& GetMe() { return m_me; } const User& GetMe() const { return m_me; } bool IsFounderMe() const { return true; } void StartSpring(); protected: int m_id; User m_me; }; #endif // OFFLINEBATTLE_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/options/CMakeLists.txt0000600000176000000410000000024012105760300022435 0ustar buildbotwww-data00000000000000add_sources(springlobbySrc downloadoptionspanel.cpp mainoptionstab.cpp springoptionstab.cpp groupoptionspanel.cpp lobbyoptionstab.cpp chatoptionstab.cpp )springlobby-0.169/src/options/chatoptionstab.cpp0000600000176000000410000005414412105760300023437 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: ChatOptionsTab // #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef __WXMSW__ #include #endif #include "nonportable.h" #include "chatoptionstab.h" #include "springunitsync.h" #include "utils/controls.h" #include "uiutils.h" #include "settings.h" #include "spring.h" #include "mainwindow.h" #include "Helper/colorbutton.h" #include "aui/auimanager.h" BEGIN_EVENT_TABLE( ChatOptionsTab, wxPanel ) EVT_BUTTON( ID_SELFONT, ChatOptionsTab::OnSelectFont ) EVT_CHECKBOX( ID_SYSCOLS, ChatOptionsTab::OnUseSystemColors ) EVT_BUTTON( ID_NORMAL, ChatOptionsTab::OnNormalSelect ) EVT_BUTTON( ID_BG, ChatOptionsTab::OnBGSelect ) EVT_BUTTON( ID_ACTION, ChatOptionsTab::OnActionSelect ) EVT_BUTTON( ID_HIGHLIGHT, ChatOptionsTab::OnHighlightSelect ) EVT_BUTTON( ID_JOINLEAVE, ChatOptionsTab::OnJoinLeaveSelect ) EVT_BUTTON( ID_NOTIFICATION, ChatOptionsTab::OnNotificationSelect ) EVT_BUTTON( ID_MYMESS, ChatOptionsTab::OnMyMessSelect ) EVT_BUTTON( ID_SERVER, ChatOptionsTab::OnServerSelect ) EVT_BUTTON( ID_CLIENT, ChatOptionsTab::OnClientSelect ) EVT_BUTTON( ID_ERROR, ChatOptionsTab::OnErrorSelect ) EVT_BUTTON( ID_TIMESTAMP, ChatOptionsTab::OnTimestampSelect ) END_EVENT_TABLE() ChatOptionsTab::ChatOptionsTab( wxWindow* parent ) : wxScrolledWindow( parent, -1 ) { GetAui().manager->AddPane( this, wxLEFT, _T( "chatoptionstab" ) ); wxBoxSizer* bMainSizerV; bMainSizerV = new wxBoxSizer( wxVERTICAL ); wxStaticBoxSizer* sbColorsSizer; sbColorsSizer = new wxStaticBoxSizer( new wxStaticBox( this, -1, _( "Colors and font" ) ), wxHORIZONTAL ); wxBoxSizer* bColorsVSizer; bColorsVSizer = new wxBoxSizer( wxVERTICAL ); m_use_sys_colors = new wxCheckBox( this, ID_SYSCOLS, _( "Use system colors" ), wxDefaultPosition, wxDefaultSize, 0 ); m_use_sys_colors->Enable( false ); bColorsVSizer->Add( m_use_sys_colors, 0, wxALL, 5 ); m_custom_colors = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER | wxTAB_TRAVERSAL ); m_custom_colors->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_MENU ) ); wxBoxSizer* bCustomColorsSizer; bCustomColorsSizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* bColorSizer; bColorSizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* bColorsSizer1; bColorsSizer1 = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* bNormlColorSizer; bNormlColorSizer = new wxBoxSizer( wxHORIZONTAL ); m_normal_color = new ColorButton( m_custom_colors, ID_NORMAL, wxBitmap(), wxDefaultPosition, wxSize( 20, 20 ), 0 ); m_normal_color->SetColor( wxColour( 0, 0, 0 ) ); bNormlColorSizer->Add( m_normal_color, 0, wxALL, 5 ); m_normal_label = new wxStaticText( m_custom_colors, wxID_ANY, _( "Normal" ), wxDefaultPosition, wxDefaultSize, 0 ); m_normal_label->Wrap( -1 ); bNormlColorSizer->Add( m_normal_label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); bColorsSizer1->Add( bNormlColorSizer, 0, wxEXPAND, 5 ); wxBoxSizer* bBGColorSizer; bBGColorSizer = new wxBoxSizer( wxHORIZONTAL ); m_bg_color = new ColorButton( m_custom_colors, ID_BG, wxBitmap(), wxDefaultPosition, wxSize( 20, 20 ), 0 ); m_bg_color->SetColor( wxColour( 255, 255, 255 ) ); bBGColorSizer->Add( m_bg_color, 0, wxALL, 5 ); m_bg_label = new wxStaticText( m_custom_colors, wxID_ANY, _( "Background" ), wxDefaultPosition, wxDefaultSize, 0 ); m_bg_label->Wrap( -1 ); bBGColorSizer->Add( m_bg_label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); bColorsSizer1->Add( bBGColorSizer, 0, wxEXPAND, 5 ); wxBoxSizer* bActionColorSizer; bActionColorSizer = new wxBoxSizer( wxHORIZONTAL ); m_action_color = new ColorButton( m_custom_colors, ID_ACTION, wxBitmap(), wxDefaultPosition, wxSize( 20, 20 ), 0 ); m_action_color->SetColor( wxColour( 255, 0, 249 ) ); bActionColorSizer->Add( m_action_color, 0, wxALL, 5 ); m_action_label = new wxStaticText( m_custom_colors, wxID_ANY, _( "Action" ), wxDefaultPosition, wxDefaultSize, 0 ); m_action_label->Wrap( -1 ); bActionColorSizer->Add( m_action_label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); bColorsSizer1->Add( bActionColorSizer, 0, wxEXPAND, 5 ); wxBoxSizer* bHighlightColorSizer; bHighlightColorSizer = new wxBoxSizer( wxHORIZONTAL ); m_highlight_color = new ColorButton( m_custom_colors, ID_HIGHLIGHT, wxBitmap(), wxDefaultPosition, wxSize( 20, 20 ), 0 ); m_highlight_color->SetColor( wxColour( 255, 0, 44 ) ); bHighlightColorSizer->Add( m_highlight_color, 0, wxALL, 5 ); m_highlight_label = new wxStaticText( m_custom_colors, wxID_ANY, _( "Highlight" ), wxDefaultPosition, wxDefaultSize, 0 ); m_highlight_label->Wrap( -1 ); bHighlightColorSizer->Add( m_highlight_label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); bColorsSizer1->Add( bHighlightColorSizer, 0, wxEXPAND, 5 ); wxBoxSizer* bJoinLeaveColorSizer; bJoinLeaveColorSizer = new wxBoxSizer( wxHORIZONTAL ); m_joinleave_color = new ColorButton( m_custom_colors, ID_JOINLEAVE, wxBitmap(), wxDefaultPosition, wxSize( 20, 20 ), 0 ); m_joinleave_color->SetColor( wxColour( 24, 255, 0 ) ); bJoinLeaveColorSizer->Add( m_joinleave_color, 0, wxALL, 5 ); m_joinleave_label = new wxStaticText( m_custom_colors, wxID_ANY, _( "Join/Leave" ), wxDefaultPosition, wxDefaultSize, 0 ); m_joinleave_label->Wrap( -1 ); bJoinLeaveColorSizer->Add( m_joinleave_label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); bColorsSizer1->Add( bJoinLeaveColorSizer, 0, wxEXPAND, 5 ); wxBoxSizer* bMyColorSizer; bMyColorSizer = new wxBoxSizer( wxHORIZONTAL ); m_my_color = new ColorButton( m_custom_colors, ID_MYMESS, wxBitmap(), wxDefaultPosition, wxSize( 20, 20 ), 0 ); m_my_color->SetColor( wxColour( 160, 160, 160 ) ); bMyColorSizer->Add( m_my_color, 0, wxALL, 5 ); m_my_label = new wxStaticText( m_custom_colors, wxID_ANY, _( "My messages" ), wxDefaultPosition, wxDefaultSize, 0 ); m_my_label->Wrap( -1 ); bMyColorSizer->Add( m_my_label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); bColorsSizer1->Add( bMyColorSizer, 1, wxEXPAND, 5 ); bColorSizer->Add( bColorsSizer1, 1, wxEXPAND, 5 ); wxBoxSizer* bColorSizer2; bColorSizer2 = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* bServerColorSizer; bServerColorSizer = new wxBoxSizer( wxHORIZONTAL ); m_server_color = new ColorButton( m_custom_colors, ID_SERVER, wxBitmap(), wxDefaultPosition, wxSize( 20, 20 ), 0 ); m_server_color->SetColor( wxColour( 255, 189, 0 ) ); bServerColorSizer->Add( m_server_color, 0, wxALL, 5 ); m_server_label = new wxStaticText( m_custom_colors, wxID_ANY, _( "Server" ), wxDefaultPosition, wxDefaultSize, 0 ); m_server_label->Wrap( -1 ); bServerColorSizer->Add( m_server_label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); bColorSizer2->Add( bServerColorSizer, 0, wxEXPAND, 5 ); wxBoxSizer* bClientolorSizer; bClientolorSizer = new wxBoxSizer( wxHORIZONTAL ); m_client_color = new ColorButton( m_custom_colors, ID_CLIENT, wxBitmap(), wxDefaultPosition, wxSize( 20, 20 ), 0 ); m_client_color->SetColor( wxColour( 255, 189, 0 ) ); bClientolorSizer->Add( m_client_color, 0, wxALL, 5 ); m_client_label = new wxStaticText( m_custom_colors, wxID_ANY, _( "Client" ), wxDefaultPosition, wxDefaultSize, 0 ); m_client_label->Wrap( -1 ); bClientolorSizer->Add( m_client_label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); bColorSizer2->Add( bClientolorSizer, 0, wxEXPAND, 5 ); wxBoxSizer* bErrorColorSizer; bErrorColorSizer = new wxBoxSizer( wxHORIZONTAL ); m_error_color = new ColorButton( m_custom_colors, ID_ERROR, wxBitmap(), wxDefaultPosition, wxSize( 20, 20 ), 0 ); m_error_color->SetColor( wxColour( 255, 0, 0 ) ); bErrorColorSizer->Add( m_error_color, 0, wxALL, 5 ); m_error_label = new wxStaticText( m_custom_colors, wxID_ANY, _( "Error" ), wxDefaultPosition, wxDefaultSize, 0 ); m_error_label->Wrap( -1 ); bErrorColorSizer->Add( m_error_label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); bColorSizer2->Add( bErrorColorSizer, 0, wxEXPAND, 5 ); wxBoxSizer* bTSColorSizer; bTSColorSizer = new wxBoxSizer( wxHORIZONTAL ); m_ts_color = new ColorButton( m_custom_colors, ID_TIMESTAMP, wxBitmap(), wxDefaultPosition, wxSize( 20, 20 ), 0 ); m_ts_color->SetColor( wxColour( 160, 160, 160 ) ); bTSColorSizer->Add( m_ts_color, 0, wxALL, 5 ); m_ts_label = new wxStaticText( m_custom_colors, wxID_ANY, _( "Timestamp" ), wxDefaultPosition, wxDefaultSize, 0 ); m_ts_label->Wrap( -1 ); bTSColorSizer->Add( m_ts_label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); bColorSizer2->Add( bTSColorSizer, 0, wxEXPAND, 5 ); wxBoxSizer* bNoteColorSizer; bNoteColorSizer = new wxBoxSizer( wxHORIZONTAL ); m_note_color = new ColorButton( m_custom_colors, ID_NOTIFICATION, wxBitmap(), wxDefaultPosition, wxSize( 20, 20 ), 0 ); m_note_color->SetColor( wxColour( 255, 191, 0 ) ); bNoteColorSizer->Add( m_note_color, 0, wxALL, 5 ); m_note_label = new wxStaticText( m_custom_colors, wxID_ANY, _( "Notification" ), wxDefaultPosition, wxDefaultSize, 0 ); m_note_label->Wrap( -1 ); bNoteColorSizer->Add( m_note_label, 1, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); bColorSizer2->Add( bNoteColorSizer, 0, wxEXPAND, 5 ); bColorSizer->Add( bColorSizer2, 1, wxEXPAND, 5 ); bCustomColorsSizer->Add( bColorSizer, 1, wxEXPAND, 5 ); m_test_text = new wxTextCtrl( m_custom_colors, wxID_ANY, _( "[19:35] ** Server ** Connected to Server.\n[22:30] hi everyone\n[22:30] ** Dude2 joined the channel.\n[22:30] * Dude2 thinks his colors looks nice\n[22:45] Dude2: orl?\n[22:46] But could be better, should tweak them some more...\n" ), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH ); bCustomColorsSizer->Add( m_test_text, 1, wxALL | wxEXPAND, 5 ); m_custom_colors->SetSizer( bCustomColorsSizer ); m_custom_colors->Layout(); bCustomColorsSizer->Fit( m_custom_colors ); bColorsVSizer->Add( m_custom_colors, 1, wxEXPAND | wxALL, 0 ); wxBoxSizer* bFontNameSizer; bFontNameSizer = new wxBoxSizer( wxHORIZONTAL ); m_font_label = new wxStaticText( this, wxID_ANY, _( "Font:" ), wxDefaultPosition, wxDefaultSize, 0 ); m_font_label->Wrap( -1 ); bFontNameSizer->Add( m_font_label, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_fontname = new wxStaticText( this, wxID_ANY, _( "default" ), wxDefaultPosition, wxDefaultSize, 0 ); m_fontname->Wrap( -1 ); bFontNameSizer->Add( m_fontname, 0, wxALL | wxALIGN_CENTER_VERTICAL, 5 ); m_select_font = new wxButton( this, ID_SELFONT, _( "Select..." ), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); bFontNameSizer->Add( m_select_font, 0, wxALL, 5 ); bColorsVSizer->Add( bFontNameSizer, 0, wxEXPAND, 5 ); sbColorsSizer->Add( bColorsVSizer, 1, wxEXPAND, 5 ); bMainSizerV->Add( sbColorsSizer, 0, wxEXPAND | wxBOTTOM | wxRIGHT | wxLEFT | wxTOP, 5 ); wxStaticBoxSizer* sbBehaviorSizer; sbBehaviorSizer = new wxStaticBoxSizer( new wxStaticBox( this, -1, _( "Behavior" ) ), wxHORIZONTAL ); m_irc_colors = new wxCheckBox( this, wxID_ANY, _( "Enable Irc colors in chat messages" ), wxDefaultPosition, wxDefaultSize, 0 ); m_irc_colors->SetValue( sett().GetUseIrcColors() ); sbBehaviorSizer->Add( m_irc_colors, 0, wxALL, 5 ); #ifndef DISABLE_SOUND m_play_sounds = new wxCheckBox( this, ID_PLAY_SOUNDS, _( "Play notification sounds" ), wxDefaultPosition, wxDefaultSize, 0 ); m_play_sounds->SetValue( sett().GetChatPMSoundNotificationEnabled() ); sbBehaviorSizer->Add( m_play_sounds, 0, wxALL, 5 ); #endif m_broadcast_check = new wxCheckBox( this, wxID_ANY, _( "Copy server messages in current channel" ), wxDefaultPosition, wxDefaultSize, 0 ); m_broadcast_check->SetValue( sett().GetBroadcastEverywhere() ); sbBehaviorSizer->Add( m_broadcast_check, 0, wxALL, 5 ); bMainSizerV->Add( sbBehaviorSizer, 0, wxEXPAND | wxBOTTOM | wxRIGHT | wxLEFT, 5 ); wxBoxSizer* bBotomSizer; bBotomSizer = new wxBoxSizer( wxHORIZONTAL ); wxStaticBoxSizer* sbChatLogSizer; wxStaticBox* sbChatLog = new wxStaticBox( this, -1, _( "Chat logs" ) ); sbChatLogSizer = new wxStaticBoxSizer( sbChatLog, wxVERTICAL ); m_save_logs = new wxCheckBox( this, wxID_ANY, _( "Save chat logs" ), wxDefaultPosition, wxDefaultSize, 0 ); m_save_logs->SetValue( sett().GetChatLogEnable() ); sbChatLogSizer->Add( m_save_logs, 0, wxALL, 5 ); wxBoxSizer* m_num_lines_sizer = new wxBoxSizer( wxHORIZONTAL ); m_num_lines = new wxSpinCtrl( this, wxID_ANY ); m_num_lines_lbl = new wxStaticText( this, wxID_ANY, _( "approx. number of lines loaded from log into chat" ), wxDefaultPosition, wxDefaultSize, 0 ); m_num_lines_sizer->Add( m_num_lines ); m_num_lines_sizer->Add( m_num_lines_lbl, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 5 ); sbChatLogSizer->Add( m_num_lines_sizer, 0, wxALL, 5 ); bBotomSizer->Add( sbChatLogSizer, 1, wxEXPAND | wxRIGHT, 5 ); wxStaticBoxSizer* sbHighlightSizer; sbHighlightSizer = new wxStaticBoxSizer( new wxStaticBox( this, -1, _( "Highlight words" ) ), wxVERTICAL ); m_hilight_words_label = new wxStaticText( this, wxID_ANY, _( "Words to highlight in chat:" ), wxDefaultPosition, wxDefaultSize, 0 ); m_hilight_words_label->Wrap( -1 ); sbHighlightSizer->Add( m_hilight_words_label, 0, wxALL, 5 ); sbHighlightSizer->Add( 0, 0, 1, wxEXPAND, 5 ); m_highlight_words = new wxTextCtrl( this, ID_HIWORDS, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_highlight_words->SetToolTip ( TE( _( "enter a ; seperated list" ) ) ); sbHighlightSizer->Add( m_highlight_words, 0, wxALL | wxEXPAND, 5 ); m_highlight_req = new wxCheckBox( this, ID_HL_REQ, _( "Additionally play sound/flash titlebar " ), wxDefaultPosition, wxDefaultSize, 0 ); sbHighlightSizer->Add( m_highlight_req , 0, wxALL | wxEXPAND, 5 ); bBotomSizer->Add( sbHighlightSizer, 1, wxEXPAND, 5 ); bMainSizerV->Add( bBotomSizer, 0, wxEXPAND | wxBOTTOM | wxRIGHT | wxLEFT, 5 ); bMainSizerV->Add( 0, 0, 1, wxEXPAND | wxALL, 5 ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); SetSizer( bMainSizerV ); Layout(); if ( sett().IsPortableMode() ) sbChatLog->Disable(); DoRestore(); UpdateTextSample(); } ChatOptionsTab::~ChatOptionsTab() { } void ChatOptionsTab::UpdateTextSample() { m_test_text->Clear(); m_test_text->SetFont( m_chat_font ); m_test_text->SetBackgroundColour( m_bg_color->GetColor() ); m_test_text->SetDefaultStyle( wxTextAttr( m_ts_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( "[19:35]" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_server_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( " ** Server ** Connected to Server.\n" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_ts_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( "[22:30]" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_normal_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( " hi everyone\n" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_ts_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( "[22:30]" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_joinleave_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( " ** Dude2 joined the channel.\n" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_ts_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( "[22:31]" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_action_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( " * Dude2 thinks his colors looks nice\n" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_ts_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( "[22:33]" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_note_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( " Dude2: orl?\n" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_ts_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( "[22:33]" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_my_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( " Yeah, but could be better, should tweak them some more...\n" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_ts_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( "[22:33]" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_highlight_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( " bla bla bla Highlighted word bla bla.\n" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_ts_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( "[22:33]" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_error_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( " !! Error error.\n" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_ts_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( "[22:33]" ) ); m_test_text->SetDefaultStyle( wxTextAttr( m_client_color->GetColor(), m_bg_color->GetColor(), m_chat_font ) ); m_test_text->AppendText( _T( " ** Client message." ) ); } void ChatOptionsTab::DoRestore() { m_normal_color->SetColor( sett().GetChatColorNormal() ); m_bg_color->SetColor( sett().GetChatColorBackground() ); m_action_color->SetColor( sett().GetChatColorAction() ); m_highlight_color->SetColor( sett().GetChatColorHighlight() ); m_joinleave_color->SetColor( sett().GetChatColorJoinPart() ); m_note_color->SetColor( sett().GetChatColorNotification() ); m_my_color->SetColor( sett().GetChatColorMine() ); m_server_color->SetColor( sett().GetChatColorServer() ); m_client_color->SetColor( sett().GetChatColorClient() ); m_error_color->SetColor( sett().GetChatColorError() ); m_ts_color->SetColor( sett().GetChatColorTime() ); m_chat_font = sett().GetChatFont(); m_fontname->SetLabel( m_chat_font.GetFaceName() ); m_save_logs->SetValue( sett().GetChatLogEnable() ); m_irc_colors->SetValue( sett().GetUseIrcColors() ); wxString highlightstring; wxArrayString highlights = sett().GetHighlightedWords(); for ( unsigned int i = 0; i < highlights.GetCount(); i++ ) highlightstring << highlights[i] << _T( ";" ); m_highlight_words->SetValue( highlightstring ); m_highlight_req->SetValue( sett().GetRequestAttOnHighlight() ); #ifndef DISABLE_SOUND m_play_sounds->SetValue( sett().GetChatPMSoundNotificationEnabled() ); #endif m_num_lines->SetValue( sett().GetAutoloadedChatlogLinesCount() ); m_broadcast_check->SetValue(sett().GetBroadcastEverywhere() ); } void ChatOptionsTab::OnApply( wxCommandEvent& /*unused*/ ) { sett().SetChatColorNormal ( m_normal_color->GetColor() ); sett().SetChatColorBackground( m_bg_color->GetColor() ); sett().SetChatColorAction( m_action_color->GetColor() ); sett().SetChatColorHighlight( m_highlight_color->GetColor() ); sett().SetChatColorJoinPart( m_joinleave_color->GetColor() ); sett().SetChatColorNotification( m_note_color->GetColor() ); sett().SetChatColorMine( m_my_color->GetColor() ); sett().SetChatColorServer( m_server_color->GetColor() ); sett().SetChatColorClient( m_client_color->GetColor() ); sett().SetChatColorError( m_error_color->GetColor() ); sett().SetChatColorTime( m_ts_color->GetColor() ); sett().SetChatFont( m_chat_font ); sett().SetUseIrcColors( m_irc_colors->IsChecked() ); //m_ui.mw().GetChatTab().ChangeUnreadChannelColour( m_note_color->GetBackgroundColour() ); //m_ui.mw().GetChatTab().ChangeUnreadPMColour( m_note_color->GetBackgroundColour() ); sett().SetHighlightedWords( wxStringTokenize( m_highlight_words->GetValue(), _T( ";" ) ) ); sett().SetRequestAttOnHighlight( m_highlight_req->IsChecked() ); //Chat Log sett().SetChatLogEnable( m_save_logs->GetValue() ); sett().SetBroadcastEverywhere( m_broadcast_check->GetValue() ); // Behavior #ifndef DISABLE_SOUND sett().SetChatPMSoundNotificationEnabled( m_play_sounds->IsChecked() ); #endif sett().SetAutoloadedChatlogLinesCount( m_num_lines->GetValue() ); } void ChatOptionsTab::OnRestore( wxCommandEvent& /*unused*/ ) { DoRestore(); } void ChatOptionsTab::OnSelectFont( wxCommandEvent& /*unused*/ ) { wxFontData data; data.SetChosenFont( m_chat_font ); wxFontDialog dlg( this->GetParent(), data ); if ( dlg.ShowModal() == wxID_OK ) { m_chat_font = dlg.GetFontData().GetChosenFont(); m_fontname->SetLabel( m_chat_font.GetFaceName() ); this->Layout(); UpdateTextSample(); } } void ChatOptionsTab::OnUseSystemColors( wxCommandEvent& /*unused*/ ) { } void ChatOptionsTab::OnColorChange( ColorButton* button ) { wxColour c = GetColourFromUser( this, button->GetColor() ); if ( c.IsOk() ) { button->SetColor( c ); } UpdateTextSample(); } void ChatOptionsTab::OnNormalSelect( wxCommandEvent& /*unused*/ ) { OnColorChange( m_normal_color ); } void ChatOptionsTab::OnBGSelect( wxCommandEvent& /*unused*/ ) { OnColorChange( m_bg_color ); } void ChatOptionsTab::OnActionSelect( wxCommandEvent& /*unused*/ ) { OnColorChange( m_action_color ); } void ChatOptionsTab::OnHighlightSelect( wxCommandEvent& /*unused*/ ) { OnColorChange( m_highlight_color ); } void ChatOptionsTab::OnJoinLeaveSelect( wxCommandEvent& /*unused*/ ) { OnColorChange( m_joinleave_color ); } void ChatOptionsTab::OnNotificationSelect( wxCommandEvent& /*unused*/ ) { OnColorChange( m_note_color ); } void ChatOptionsTab::OnMyMessSelect( wxCommandEvent& /*unused*/ ) { OnColorChange( m_my_color ); } void ChatOptionsTab::OnServerSelect( wxCommandEvent& /*unused*/ ) { OnColorChange( m_server_color ); } void ChatOptionsTab::OnClientSelect( wxCommandEvent& /*unused*/ ) { OnColorChange( m_client_color ); } void ChatOptionsTab::OnErrorSelect( wxCommandEvent& /*unused*/ ) { OnColorChange( m_error_color ); } void ChatOptionsTab::OnTimestampSelect( wxCommandEvent& /*unused*/ ) { OnColorChange( m_ts_color ); } springlobby-0.169/src/options/chatoptionstab.h0000600000176000000410000001010512105760300023071 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_CHATOPTIONSTAB_H #define SPRINGLOBBY_HEADERGUARD_CHATOPTIONSTAB_H #include class wxStaticBoxSizer; class wxStaticBox; class wxStaticText; class wxRadioButton; class wxButton; class wxTextCtrl; class wxBoxSizer; class wxCheckBox; class Ui; class ColorButton; class wxSpinCtrl; class ChatOptionsTab : public wxScrolledWindow { public: ChatOptionsTab( wxWindow* parent ); ~ChatOptionsTab(); void UpdateTextSample(); void DoRestore(); void OnApply( wxCommandEvent& event ); void OnRestore( wxCommandEvent& event ); void OnSelectFont( wxCommandEvent& event ); void OnUseSystemColors( wxCommandEvent& event ); void OnNormalSelect( wxCommandEvent& event ); void OnBGSelect( wxCommandEvent& event ); void OnActionSelect( wxCommandEvent& event ); void OnHighlightSelect( wxCommandEvent& event ); void OnJoinLeaveSelect( wxCommandEvent& event ); void OnNotificationSelect( wxCommandEvent& event ); void OnMyMessSelect( wxCommandEvent& event ); void OnServerSelect( wxCommandEvent& event ); void OnClientSelect( wxCommandEvent& event ); void OnErrorSelect( wxCommandEvent& event ); void OnTimestampSelect( wxCommandEvent& event ); void OnSaveLogs( wxCommandEvent& event ); protected: enum { ID_SELFONT = 1000, ID_SYSCOLS, ID_NORMAL, ID_BG, ID_ACTION, ID_HIGHLIGHT, ID_JOINLEAVE, ID_NOTIFICATION, ID_MYMESS, ID_SERVER, ID_CLIENT, ID_ERROR, ID_TIMESTAMP, ID_HIWORDS, ID_PLAY_SOUNDS, ID_HL_REQ }; wxStaticText* m_text_sample; wxStaticText* m_fontname; wxStaticText* m_font_label; wxButton* m_select_font; wxCheckBox* m_use_sys_colors; wxPanel* m_custom_colors; ColorButton* m_normal_color; wxStaticText* m_normal_label; ColorButton* m_bg_color; wxStaticText* m_bg_label; ColorButton* m_action_color; wxStaticText* m_action_label; ColorButton* m_highlight_color; wxStaticText* m_highlight_label; ColorButton* m_joinleave_color; wxStaticText* m_joinleave_label; ColorButton* m_note_color; wxStaticText* m_note_label; ColorButton* m_my_color; wxStaticText* m_my_label; ColorButton* m_server_color; wxStaticText* m_server_label; ColorButton* m_client_color; wxStaticText* m_client_label; ColorButton* m_error_color; wxStaticText* m_error_label; ColorButton* m_ts_color; wxStaticText* m_ts_label; wxTextCtrl* m_test_text; wxCheckBox* m_save_logs; wxStaticText* m_chat_save_label; wxTextCtrl* m_log_save; wxButton* m_browse_log; wxStaticText* m_hilight_words_label; wxCheckBox* m_play_sounds; wxCheckBox* m_highlight_req; wxCheckBox* m_broadcast_check; wxTextCtrl* m_highlight_words; wxCheckBox* m_irc_colors; wxStaticText* m_num_lines_lbl; wxSpinCtrl* m_num_lines; wxFont m_chat_font; /// generic func used in all handlers void OnColorChange( ColorButton* button ); DECLARE_EVENT_TABLE() }; // enum // { // SPRING_DIRBROWSE = wxID_HIGHEST, // SPRING_EXECBROWSE, // SPRING_SYNCBROWSE, // SPRING_WEBBROWSE, // SPRING_DEFEXE, // SPRING_DEFUSYNC, // SPRING_DEFWEB, // SPRING_AUTOCONF, // SPRING_DIRFIND, // SPRING_EXECFIND, // SPRING_SYNCFIND, // // //Chat Log // CHATLOG_ENABLE, // // }; #endif // SPRINGLOBBY_HEADERGUARD_CHATOPTIONSTAB_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/options/downloadoptionspanel.cpp0000600000176000000410000001405312105760300024653 0ustar buildbotwww-data00000000000000#ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include #include #include #include #include #include #include #include #include "downloadoptionspanel.h" #include "aui/auimanager.h" #include "settings.h" #include "downloader/prdownloader.h" #include "utils/conversion.h" #include "utils/controls.h" BEGIN_EVENT_TABLE( TorrentOptionsPanel, wxScrolledWindow ) END_EVENT_TABLE() TorrentOptionsPanel::TorrentOptionsPanel( wxWindow* parent ) : wxScrolledWindow( parent, -1) { GetAui().manager->AddPane( this, wxLEFT, _T("torrentoptionspanel") ); wxBoxSizer* mainboxsizer = new wxBoxSizer( wxVERTICAL ); m_gamestart_box = new wxStaticBox(this, -1, _("At game start suspend mode") ); wxStaticBoxSizer* m_gamestart_box_sizer = new wxStaticBoxSizer(m_gamestart_box , wxVERTICAL ); m_gamestart_pause = new wxRadioButton(this, ID_GAMESTART_RADIO, _("Pause all torrents"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); m_gamestart_throttle = new wxRadioButton(this, ID_GAMESTART_RADIO, _("Throttle speeds:") ); wxBoxSizer* m_gamestart_input_box1 = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* m_gamestart_input_box2 = new wxBoxSizer( wxHORIZONTAL ); m_gamestart_throttle_up_lbl = new wxStaticText( this, wxID_ANY, _("upload (KB/s)") ); m_gamestart_throttle_up = new wxTextCtrl(this, ID_INGAME_UP, TowxString(2)); m_gamestart_throttle_down_lbl = new wxStaticText( this, wxID_ANY, _("download (KB/s)") ); m_gamestart_throttle_down = new wxTextCtrl(this, ID_INGAME_DOWN, TowxString(2)); m_gamestart_box_sizer->Add(m_gamestart_pause, 0, wxALL, 5 ); m_gamestart_box_sizer->Add(m_gamestart_throttle, 0, wxALL, 5 ); m_gamestart_input_box1->Add(m_gamestart_throttle_up_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); m_gamestart_input_box1->Add(m_gamestart_throttle_up, 0, wxALL, 5); m_gamestart_input_box2->Add(m_gamestart_throttle_down_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5); m_gamestart_input_box2->Add(m_gamestart_throttle_down, 0, wxALL, 5); m_gamestart_box_sizer->Add(m_gamestart_input_box1, 0, wxALL, 5); m_gamestart_box_sizer->Add(m_gamestart_input_box2, 0, wxALL, 5); mainboxsizer->Add( m_gamestart_box_sizer, 0, wxALL, 5 ); wxStaticBox* m_numbers_box = new wxStaticBox(this, -1, _("Numbers") ); wxStaticBoxSizer* m_numbers_box_sizer = new wxStaticBoxSizer( m_numbers_box , wxVERTICAL ); wxBoxSizer* up_siter = new wxBoxSizer( wxHORIZONTAL ); m_maxUp = new wxTextCtrl( this, ID_MAXUP, TowxString( sett().GetTorrentUploadRate() ) ); wxStaticText* m_maxUp_lbl = new wxStaticText( this, wxID_ANY, _("maximum upload speed in KB/sec(-1 for infinite)") ); up_siter->Add( m_maxUp, 0, wxALL, 5 ); up_siter->Add( m_maxUp_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); m_numbers_box_sizer->Add( up_siter, 0, wxALL, 5 ); wxBoxSizer* down_siter = new wxBoxSizer( wxHORIZONTAL ); m_maxDown = new wxTextCtrl( this, ID_MAXDOWN, TowxString( sett().GetTorrentDownloadRate() ) ); wxStaticText* m_maxDown_lbl = new wxStaticText( this, wxID_ANY, _("maximum download speed in KB/sec (-1 for infinite)") ); down_siter->Add( m_maxDown, 0, wxALL, 5 ); down_siter->Add( m_maxDown_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); m_numbers_box_sizer->Add( down_siter, 0, wxALL, 5 ); wxBoxSizer* port_siter = new wxBoxSizer( wxHORIZONTAL ); m_p2pport = new wxTextCtrl( this, ID_P2PPORT, TowxString( sett().GetTorrentPort() ) ); wxStaticText* m_p2pport_lbl = new wxStaticText( this, wxID_ANY, _("port used for torrent connections") ); port_siter->Add( m_p2pport, 0, wxALL, 5 ); port_siter->Add( m_p2pport_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); m_numbers_box_sizer->Add( port_siter, 0, wxALL, 5 ); wxBoxSizer* con_siter = new wxBoxSizer( wxHORIZONTAL ); m_maxConnections = new wxTextCtrl( this, ID_MAXUP, TowxString( sett().GetTorrentMaxConnections() ) ); wxStaticText* m_maxConnections_lbl = new wxStaticText( this, wxID_ANY, _("maximum number of concurrent connections") ); con_siter->Add( m_maxConnections, 0, wxALL, 5 ); con_siter->Add( m_maxConnections_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); m_numbers_box_sizer->Add( con_siter, 0, wxALL, 5 ); mainboxsizer->Add( m_numbers_box_sizer, 0, wxALL, 5 ); //the lazy man's solution to options not being set correctly at panel creation wxCommandEvent dummy; OnRestore( dummy ); SetSizer( mainboxsizer ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); Layout(); } TorrentOptionsPanel::~TorrentOptionsPanel() { } void TorrentOptionsPanel::OnApply( wxCommandEvent& /*unused*/ ) { sett().SetTorrentUploadRate( FromwxString( m_maxUp->GetValue() ) ); sett().SetTorrentDownloadRate( FromwxString( m_maxDown->GetValue() ) ); sett().SetTorrentPort( FromwxString( m_p2pport->GetValue() ) ); sett().SetTorrentMaxConnections( FromwxString( m_maxConnections->GetValue() ) ); sett().SetTorrentThrottledUploadRate( FromwxString( m_gamestart_throttle_up->GetValue() ) ); sett().SetTorrentThrottledDownloadRate( FromwxString( m_gamestart_throttle_down->GetValue() ) ); // if mode == pause selected --> m_gamestart_throttle->GetValue() == 0 sett().SetTorrentSystemSuspendMode( m_gamestart_throttle->GetValue() ); prDownloader().UpdateSettings(); } void TorrentOptionsPanel::OnRestore( wxCommandEvent& /*unused*/ ) { m_maxConnections->SetValue( TowxString( sett().GetTorrentMaxConnections() ) ); m_p2pport->SetValue( TowxString( sett().GetTorrentPort() ) ); m_maxDown->SetValue( TowxString( sett().GetTorrentDownloadRate() ) ); m_maxUp->SetValue( TowxString( sett().GetTorrentUploadRate() ) ); m_gamestart_throttle_up->SetValue( TowxString( sett().GetTorrentThrottledUploadRate() ) ); m_gamestart_throttle_down->SetValue( TowxString( sett().GetTorrentThrottledDownloadRate( ) ) ); m_gamestart_throttle->SetValue( sett().GetTorrentSystemSuspendMode() ); } springlobby-0.169/src/options/downloadoptionspanel.h0000600000176000000410000000412312105760300024315 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADER_GUARD_TORRENTOPTIONSPANEL_H_INCLUDED #define SPRINGLOBBY_HEADER_GUARD_TORRENTOPTIONSPANEL_H_INCLUDED #include class wxCheckBox; class wxTextCtrl; class Ui; class wxStaticBox; class wxRadioButton; class wxButton; class wxStaticText; class TorrentOptionsPanel: public wxScrolledWindow { public: TorrentOptionsPanel( wxWindow* parent ); ~TorrentOptionsPanel(); void OnApply( wxCommandEvent& event ); void OnRestore( wxCommandEvent& event ); private: wxTextCtrl* m_maxUp; wxTextCtrl* m_maxDown; wxTextCtrl* m_p2pport; wxTextCtrl* m_maxConnections; wxStaticBox* m_gamestart_box; wxRadioButton* m_gamestart_pause; wxRadioButton* m_gamestart_throttle; wxTextCtrl* m_gamestart_throttle_up; wxTextCtrl* m_gamestart_throttle_down; wxStaticText* m_gamestart_throttle_up_lbl; wxStaticText* m_gamestart_throttle_down_lbl; void EnableSettings( bool enable); void SetStatusDisplay(); enum { ID_ENABLEP2P = wxID_HIGHEST, ID_MAXUP, ID_MAXDOWN, ID_P2PPORT, ID_MAXCONNECTIONS, ID_APPLY, ID_RESTORE, ID_GAMESTART_RADIO, ID_INGAME_UP, ID_INGAME_DOWN }; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADER_GUARD_TORRENTOPTIONSPANEL_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/options/groupoptionspanel.cpp0000600000176000000410000003141012105760300024174 0ustar buildbotwww-data00000000000000 #include "groupoptionspanel.h" #include #include #include #include #include #include #include #include #include #include #include #include "useractions.h" #include "settings.h" #include "uiutils.h" #include "utils/controls.h" #include "Helper/colorbutton.h" #include "selectusersdialog.h" BEGIN_EVENT_TABLE( GroupOptionsPanel, wxPanel ) EVT_BUTTON( REMOVE_GROUP, GroupOptionsPanel::OnRemoveGroup ) EVT_BUTTON( RENAME_GROUP, GroupOptionsPanel::OnRenameGroup ) EVT_BUTTON( ADD_GROUP, GroupOptionsPanel::OnAddNewGroup ) EVT_LISTBOX( GROUPS_LIST, GroupOptionsPanel::OnGroupListSelectionChange ) EVT_CHECKBOX( NOTIFY_LOGIN, GroupOptionsPanel::OnGroupActionsChange ) EVT_CHECKBOX( IGNORE_CHAT, GroupOptionsPanel::OnGroupActionsChange ) EVT_CHECKBOX( NOTIFY_HOST, GroupOptionsPanel::OnGroupActionsChange ) EVT_CHECKBOX( IGNORE_PM, GroupOptionsPanel::OnGroupActionsChange ) EVT_CHECKBOX( NOTIFY_STATUS, GroupOptionsPanel::OnGroupActionsChange ) EVT_CHECKBOX( AUTOCKICK, GroupOptionsPanel::OnGroupActionsChange ) EVT_CHECKBOX( NOTIFY_HIGHLIGHT, GroupOptionsPanel::OnGroupActionsChange ) EVT_BUTTON( HIGHLIGHT_COLOR, GroupOptionsPanel::OnHighlightColorClick ) EVT_LISTBOX( USERS_LIST, GroupOptionsPanel::OnUsersListSelectionChange ) EVT_BUTTON( ADD_USER, GroupOptionsPanel::OnAddUsers ) EVT_BUTTON( REMOVE_USER, GroupOptionsPanel::OnRemoveUser ) END_EVENT_TABLE() GroupOptionsPanel::GroupOptionsPanel( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) { wxBoxSizer* mainSizer; mainSizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* groupListSizer; groupListSizer = new wxBoxSizer( wxVERTICAL ); m_group_list = new wxListBox( this, GROUPS_LIST, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_ALWAYS_SB|wxLB_SINGLE|wxLB_SORT ); groupListSizer->Add( m_group_list, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); wxBoxSizer* groupListButtonsSizer; groupListButtonsSizer = new wxBoxSizer( wxHORIZONTAL ); m_remove_group_button = new wxButton( this, REMOVE_GROUP, _("Remove"), wxDefaultPosition, wxSize( -1,-1 ), wxBU_EXACTFIT ); m_remove_group_button->Enable( false ); m_remove_group_button->SetToolTip( _("Remove an existing group") ); groupListButtonsSizer->Add( m_remove_group_button, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); m_rename_group_button = new wxButton( this, RENAME_GROUP, _("Rename.."), wxDefaultPosition, wxSize( -1,-1 ), wxBU_EXACTFIT ); m_rename_group_button->Enable( false ); m_rename_group_button->SetToolTip( _("Rename an existing group") ); groupListButtonsSizer->Add( m_rename_group_button, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); groupListButtonsSizer->Add( 0, 0, 1, wxEXPAND, 5 ); m_add_group_button = new wxButton( this, ADD_GROUP, _("Add New.."), wxDefaultPosition, wxSize( -1,-1 ), wxBU_EXACTFIT ); m_add_group_button->SetToolTip( _("Add new group") ); groupListButtonsSizer->Add( m_add_group_button, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); groupListSizer->Add( groupListButtonsSizer, 0, wxEXPAND|wxBOTTOM, 5 ); mainSizer->Add( groupListSizer, 2, wxEXPAND, 5 ); m_group_panel = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL ); wxBoxSizer* mainGroupPanelSizer; mainGroupPanelSizer = new wxBoxSizer( wxVERTICAL ); wxStaticBoxSizer* actionsSizer; actionsSizer = new wxStaticBoxSizer( new wxStaticBox( m_group_panel, wxID_ANY, _("Group Actions") ), wxVERTICAL ); wxGridSizer* actionCheckSizer; actionCheckSizer = new wxGridSizer( 2, 2, 0, 0 ); m_login_notify_check = new wxCheckBox( m_group_panel, NOTIFY_LOGIN, _("Notify login/logout"), wxDefaultPosition, wxDefaultSize, 0 ); m_login_notify_check->SetToolTip( _("Notify when users of this group go online or offline") ); actionCheckSizer->Add( m_login_notify_check, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); m_ignore_chat_check = new wxCheckBox( m_group_panel, IGNORE_CHAT, _("Ignore Chat"), wxDefaultPosition, wxDefaultSize, 0 ); m_ignore_chat_check->SetToolTip( _("Ignore anything said in channel by any of the users in this group") ); actionCheckSizer->Add( m_ignore_chat_check, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); m_notify_host_check = new wxCheckBox( m_group_panel, NOTIFY_HOST, _("Notify Hosted Battles"), wxDefaultPosition, wxDefaultSize, 0 ); m_notify_host_check->SetToolTip( _("Notify when users of this group hosts a battle") ); actionCheckSizer->Add( m_notify_host_check, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); m_ignore_pm_check = new wxCheckBox( m_group_panel, IGNORE_PM, _("Ignore PM"), wxDefaultPosition, wxDefaultSize, 0 ); m_ignore_pm_check->SetToolTip( _("Ignore anything said in private chat by any of the users in this group") ); actionCheckSizer->Add( m_ignore_pm_check, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); m_notify_status_check = new wxCheckBox( m_group_panel, NOTIFY_STATUS, _("Notify Status Change"), wxDefaultPosition, wxDefaultSize, 0 ); m_notify_status_check->SetToolTip( _("Notify when the status of a users in this group changes") ); actionCheckSizer->Add( m_notify_status_check, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); m_autokick_check = new wxCheckBox( m_group_panel, AUTOCKICK, _("Autokick"), wxDefaultPosition, wxDefaultSize, 0 ); m_autokick_check->SetToolTip( _("Auto kick any of the users in this group from battles hosted") ); actionCheckSizer->Add( m_autokick_check, 0, wxALL, 5 ); m_highlight_check = new wxCheckBox( m_group_panel, NOTIFY_HIGHLIGHT, _("Highlight"), wxDefaultPosition, wxDefaultSize, 0 ); m_highlight_check->SetToolTip( _("Highlight battles and the names of users in this group") ); actionCheckSizer->Add( m_highlight_check, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); wxBoxSizer* colorSizer; colorSizer = new wxBoxSizer( wxHORIZONTAL ); m_highlight_colorstaticText = new wxStaticText( m_group_panel, wxID_ANY, _("Highlight Color"), wxDefaultPosition, wxDefaultSize, 0 ); m_highlight_colorstaticText->Wrap( -1 ); colorSizer->Add( m_highlight_colorstaticText, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); m_highlight_color_button = new ColorButton( m_group_panel, HIGHLIGHT_COLOR, wxColour(0,0,0), wxDefaultPosition, wxSize( 20,20 ) ); m_highlight_color_button->SetToolTip( _("Select highlight color") ); m_highlight_color_button->SetToolTip( _("Select highlight color") ); colorSizer->Add( m_highlight_color_button, 0, wxALL, 5 ); actionCheckSizer->Add( colorSizer, 1, wxEXPAND, 5 ); actionsSizer->Add( actionCheckSizer, 1, wxEXPAND, 5 ); mainGroupPanelSizer->Add( actionsSizer, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); wxStaticBoxSizer* usersSizer; usersSizer = new wxStaticBoxSizer( new wxStaticBox( m_group_panel, wxID_ANY, _("Users in group") ), wxVERTICAL ); wxBoxSizer* userListSizer; userListSizer = new wxBoxSizer( wxHORIZONTAL ); m_user_list = new wxListBox( m_group_panel, USERS_LIST, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_MULTIPLE ); userListSizer->Add( m_user_list, 1, wxALL|wxEXPAND, 5 ); wxBoxSizer* userButtonSizer; userButtonSizer = new wxBoxSizer( wxVERTICAL ); m_add_user_button = new wxButton( m_group_panel, ADD_USER, _("Add.."), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); m_add_user_button->SetToolTip( _("Add users to group") ); userButtonSizer->Add( m_add_user_button, 0, wxEXPAND|wxTOP|wxRIGHT, 5 ); m_remove_user_button = new wxButton( m_group_panel, REMOVE_USER, _("Remove"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); m_remove_user_button->Enable( false ); m_remove_user_button->SetToolTip( _("Remove users from group") ); userButtonSizer->Add( m_remove_user_button, 0, wxEXPAND|wxTOP|wxRIGHT, 5 ); userListSizer->Add( userButtonSizer, 0, wxEXPAND, 5 ); usersSizer->Add( userListSizer, 1, wxEXPAND, 5 ); mainGroupPanelSizer->Add( usersSizer, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_group_panel->SetSizer( mainGroupPanelSizer ); m_group_panel->Layout(); mainGroupPanelSizer->Fit( m_group_panel ); mainSizer->Add( m_group_panel, 3, wxALL|wxEXPAND, 5 ); this->SetSizer( mainSizer ); this->Layout(); Initialize(); } void GroupOptionsPanel::Initialize() { m_user_dialog = 0; ReloadGroupsList(); ShowGroup( wxEmptyString ); } GroupOptionsPanel::~GroupOptionsPanel() { } void GroupOptionsPanel::ShowGroup( const wxString& group ) { if ( group == wxEmptyString ) m_current_group = GetFirstGroupName(); else m_current_group = group; m_group_list->SetStringSelection(m_current_group); UserActions::ActionType act = useractions().GetGroupAction( m_current_group ); m_login_notify_check->SetValue( (act & UserActions::ActNotifLogin) != 0 ); m_ignore_chat_check->SetValue( (act & UserActions::ActIgnoreChat) != 0 ); m_notify_host_check->SetValue( (act & UserActions::ActNotifBattle) != 0 ); m_ignore_pm_check->SetValue( (act & UserActions::ActIgnorePM) != 0 ); m_notify_status_check->SetValue( (act & UserActions::ActNotifStatus) != 0 ); m_autokick_check->SetValue( (act & UserActions::ActAutokick) != 0 ); m_highlight_check->SetValue( (act & UserActions::ActHighlight) != 0 ); m_highlight_color_button->SetColor( useractions().GetGroupColor(m_current_group) ); ReloadUsersList(); m_remove_group_button->Enable( m_group_list->GetStringSelection() != wxEmptyString ); } void GroupOptionsPanel::ReloadUsersList() { wxArrayString groupuser = sett().GetPeopleList( m_current_group ); m_user_list->Clear(); m_user_list->InsertItems(groupuser, 0); m_remove_user_button->Enable( false ); } void GroupOptionsPanel::ReloadGroupsList() { wxArrayString groupnames = useractions().GetGroupNames(); m_group_list->Clear(); m_group_list->InsertItems(groupnames, 0); m_group_list->SetStringSelection(m_current_group); } wxString GroupOptionsPanel::GetFirstGroupName() { wxSortedArrayString groupnames = useractions().GetGroupNames(); if (groupnames.Count() <= 0) return wxEmptyString; return groupnames[0]; } void GroupOptionsPanel::OnRemoveGroup( wxCommandEvent& /*unused*/ ) { if (m_current_group == _T("Default")) return; useractions().DeleteGroup( m_current_group ); ReloadGroupsList(); ShowGroup(wxEmptyString); } void GroupOptionsPanel::OnRenameGroup( wxCommandEvent& /*unused*/ ) { } void GroupOptionsPanel::OnAddNewGroup( wxCommandEvent& /*unused*/ ) { wxTextEntryDialog* ted = new wxTextEntryDialog(this, _("Name of new group:"), _("Add New Group")); if ( ted->ShowModal() == wxID_OK ) { wxString newgroup = ted->GetValue(); //!TODO: Check if group exists already. if ( newgroup != wxEmptyString ) useractions().AddGroup( newgroup ); ReloadGroupsList(); ShowGroup(newgroup); } delete ted; } void GroupOptionsPanel::OnGroupListSelectionChange( wxCommandEvent& /*unused*/ ) { wxString newgroup = m_group_list->GetStringSelection(); wxSortedArrayString groupnames = useractions().GetGroupNames(); if ( groupnames.Index(newgroup) == wxNOT_FOUND ) { return; } ShowGroup(newgroup); } void GroupOptionsPanel::OnGroupActionsChange( wxCommandEvent& ) { useractions().ChangeAction( m_current_group, UserActions::ActNotifLogin, m_login_notify_check->GetValue() ); useractions().ChangeAction( m_current_group, UserActions::ActIgnoreChat, m_ignore_chat_check->GetValue() ); useractions().ChangeAction( m_current_group, UserActions::ActNotifBattle, m_notify_host_check->GetValue() ); useractions().ChangeAction( m_current_group, UserActions::ActIgnorePM, m_ignore_pm_check->GetValue() ); useractions().ChangeAction( m_current_group, UserActions::ActNotifStatus, m_notify_status_check->GetValue() ); useractions().ChangeAction( m_current_group, UserActions::ActAutokick, m_autokick_check->GetValue() ); useractions().ChangeAction( m_current_group, UserActions::ActHighlight, m_highlight_check->GetValue() ); } void GroupOptionsPanel::OnHighlightColorClick( wxCommandEvent& event ) { ColorButton* origin = (ColorButton*) event.GetEventObject(); wxColour c = GetColourFromUser( this, origin->GetColor(), m_current_group ); if ( c.IsOk() ) { origin->SetColor( c ); useractions().SetGroupColor( m_current_group, c ); } } void GroupOptionsPanel::OnUsersListSelectionChange( wxCommandEvent& /*unused*/ ) { wxArrayInt sel; m_user_list->GetSelections( sel ); m_remove_user_button->Enable( sel.Count() > 0 ); } void GroupOptionsPanel::OnAddUsers( wxCommandEvent& /*unused*/ ) { wxSortedArrayString users = SelectUsersDialog::GetUsers(this); for ( unsigned int i = 0; i < users.Count(); i++ ) { useractions().AddUserToGroup( m_current_group, users[i] ); } if ( users.Count() > 0 ) ReloadUsersList(); } void GroupOptionsPanel::OnRemoveUser( wxCommandEvent& /*unused*/ ) { wxArrayInt sel; int num = m_user_list->GetSelections( sel ); for ( int i = 0; i < num; i++ ) { wxString name = m_user_list->GetString(sel[i]); useractions().RemoveUser( name ); } ReloadUsersList(); } void GroupOptionsPanel::Update() { ReloadGroupsList(); ReloadUsersList(); } springlobby-0.169/src/options/groupoptionspanel.h0000600000176000000410000000550412105760300023646 0ustar buildbotwww-data00000000000000 #ifndef SPRINGLOBBY_HEADERGUARD_GROUPOPTIONSPANEL_H #define SPRINGLOBBY_HEADERGUARD_GROUPOPTIONSPANEL_H #include #include class ColorButton; class GroupUserDialog; class wxCheckBox; class wxStaticText; class wxListBox; class wxButton; class GroupOptionsPanel : public wxPanel { DECLARE_EVENT_TABLE() protected: enum { REMOVE_GROUP = 1000, RENAME_GROUP, ADD_GROUP, GROUPS_LIST, NOTIFY_LOGIN, IGNORE_CHAT, NOTIFY_HOST, IGNORE_PM, NOTIFY_STATUS, AUTOCKICK, NOTIFY_HIGHLIGHT, HIGHLIGHT_COLOR, USERS_LIST, ADD_USER, REMOVE_USER }; wxListBox* m_group_list; wxButton* m_remove_group_button; wxButton* m_rename_group_button; wxButton* m_add_group_button; wxPanel* m_group_panel; wxCheckBox* m_login_notify_check; wxCheckBox* m_ignore_chat_check; wxCheckBox* m_notify_host_check; wxCheckBox* m_ignore_pm_check; wxCheckBox* m_notify_status_check; wxCheckBox* m_autokick_check; wxCheckBox* m_highlight_check; wxStaticText* m_highlight_colorstaticText; ColorButton* m_highlight_color_button; wxListBox* m_user_list; wxButton* m_add_user_button; wxButton* m_remove_user_button; wxString m_current_group; GroupUserDialog* m_user_dialog; void OnRemoveGroup( wxCommandEvent& event ); void OnRenameGroup( wxCommandEvent& event ); void OnAddNewGroup( wxCommandEvent& event ); void OnGroupListSelectionChange( wxCommandEvent& event ); void OnGroupActionsChange( wxCommandEvent& event ); void OnHighlightColorClick( wxCommandEvent& event ); void OnUsersListSelectionChange( wxCommandEvent& event ); void OnAddUsers( wxCommandEvent& event ); void OnRemoveUser( wxCommandEvent& event ); void Initialize(); void ShowGroup( const wxString& group ); void ReloadUsersList(); void ReloadGroupsList(); wxString GetFirstGroupName(); public: GroupOptionsPanel( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 656,537 ), long style = wxTAB_TRAVERSAL ); ~GroupOptionsPanel(); void Update(); }; #endif /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/options/lobbyoptionstab.cpp0000600000176000000410000003204012105760300023616 0ustar buildbotwww-data00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include "lobbyoptionstab.h" #include "nonportable.h" #include "settings.h" #include "utils/customdialogs.h" #include "utils/controls.h" #include "utils/platform.h" #include "aui/auimanager.h" #include "ui.h" #include "mainwindow.h" BEGIN_EVENT_TABLE(LobbyOptionsTab, wxPanel) EVT_BUTTON ( SPRING_WEBBROWSE, LobbyOptionsTab::OnBrowseWeb ) EVT_BUTTON ( ID_BUT_EDITOR, LobbyOptionsTab::OnBrowseEditor ) EVT_RADIOBUTTON( SPRING_DEFWEB, LobbyOptionsTab::OnDefaultWeb ) END_EVENT_TABLE() LobbyOptionsTab::LobbyOptionsTab(wxWindow* parent) : wxScrolledWindow( parent, -1 ), m_show_tooltips_label( 0 ) { GetAui().manager->AddPane( this, wxLEFT, _T("lobbyoptionstab") ); m_main_sizer = new wxBoxSizer ( wxVERTICAL ); /* ================================ * Web browser */ wxStaticBox* m_web_box = new wxStaticBox( this , -1, _("Web Browser") ); m_web_loc_text = new wxStaticText( this, -1, _("Web Browser") ); m_web_def_radio = new wxRadioButton( this, SPRING_DEFWEB, _("Default Browser."), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); m_web_def_radio->SetToolTip(TE(_("Use your system-wide browser preference"))); m_web_spec_radio = new wxRadioButton( this, SPRING_DEFWEB, _("Specify:") ); m_web_spec_radio->SetToolTip(TE(_("Specify the web browser you want to use"))); m_web_edit = new wxTextCtrl( this, -1, sett().GetWebBrowserPath() ); m_web_browse_btn = new wxButton( this, SPRING_WEBBROWSE, _("Browse") ); m_web_browse_btn->SetToolTip(TE(_("Use a file dialog to find the web browser"))); if ( sett().GetWebBrowserUseDefault() ) m_web_def_radio->SetValue( true ); else m_web_spec_radio->SetValue( true ); m_web_loc_sizer = new wxBoxSizer( wxHORIZONTAL ); m_web_loc_sizer->Add( m_web_loc_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2 ); m_web_loc_sizer->Add( m_web_edit, 1, wxEXPAND ); m_web_loc_sizer->Add( m_web_browse_btn ); m_web_box_sizer = new wxStaticBoxSizer( m_web_box, wxVERTICAL ); m_web_box_sizer->Add( m_web_def_radio, 0, wxALL, 2 ); m_web_box_sizer->Add( m_web_spec_radio, 0, wxALL, 2 ); m_web_box_sizer->Add( m_web_loc_sizer, 0, wxEXPAND | wxALL, 2 ); ///// wxStaticBox* m_editor_box = new wxStaticBox( this , -1, _("External text editor") ); m_editor_loc_text = new wxStaticText( this, -1, _("Path") ); m_editor_edit = new wxTextCtrl( this, -1, sett().GetEditorPath() ); m_editor_browse_btn = new wxButton( this, ID_BUT_EDITOR, _("Browse") ); m_editor_browse_btn->SetToolTip(TE(_("Use a file dialog to find the editor binary"))); m_editor_loc_sizer = new wxBoxSizer( wxHORIZONTAL ); m_editor_loc_sizer->Add( m_editor_loc_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2 ); m_editor_loc_sizer->Add( m_editor_edit, 1, wxEXPAND ); m_editor_loc_sizer->Add( m_editor_browse_btn ); m_editor_box_sizer = new wxStaticBoxSizer( m_editor_box, wxVERTICAL ); m_editor_box_sizer->Add( m_editor_loc_sizer, 0, wxEXPAND | wxALL, 2 ); //////// wxStaticBoxSizer* m_autojoin_sizer= new wxStaticBoxSizer ( wxVERTICAL, this, _("Autoconnect") ); m_autoconnect_label = new wxStaticText ( this, -1, IdentityString( _("If checked, %s will automatically log on to the last used server") ) ); m_autojoin = new wxCheckBox( this, -1, _("Autoconnect on lobby start"), wxDefaultPosition, wxDefaultSize, 0 ); m_autojoin->SetValue( sett().GetAutoConnect() ); m_autojoin_sizer->Add( m_autoconnect_label, 1, wxEXPAND | wxALL, 5 ); m_autojoin_sizer->Add( m_autojoin, 0, wxEXPAND | wxALL, 5 ); wxStaticBoxSizer* m_reportstats_sizer = new wxStaticBoxSizer ( wxVERTICAL, this, _("Report statistics") ); m_reportstats_label = new wxStaticText ( this, -1, IdentityString( _("By default %s will send some statistics (OS,lobby version) to server,\nto both make helping you in case of problems easier and inform of critical updates.\nUncheck to disable.") ) ); m_reportstats = new wxCheckBox( this, -1, _("report statistics"), wxDefaultPosition, wxDefaultSize, 0 ); m_reportstats->SetValue( sett().GetReportStats() ); m_reportstats_sizer->Add( m_reportstats_label, 1, wxEXPAND|wxALL, 5); m_reportstats_sizer->Add( m_reportstats, 0, wxEXPAND|wxALL, 5); m_main_sizer->Add( m_web_box_sizer, 0, wxEXPAND | wxALL, 5 ); m_main_sizer->Add( m_editor_box_sizer, 0, wxEXPAND | wxALL, 5 ); m_main_sizer->Add( m_autojoin_sizer, 0, wxALL, 5 ); m_main_sizer->Add( m_reportstats_sizer, 0, wxALL, 5 ); #ifdef __WXMSW__ wxStaticBoxSizer* m_updater_sizer = new wxStaticBoxSizer ( wxVERTICAL, this, _("Automatic updates") ); m_updater_label = new wxStaticText ( this, -1, IdentityString( _("%s can check at startup if a newer version is available and automatically download it for you.") ) ); m_updater = new wxCheckBox( this, -1, _("automatically check for updates"), wxDefaultPosition, wxDefaultSize, 0 ); m_updater->SetValue( sett().GetAutoUpdate() ); m_updater_sizer->Add( m_updater_label, 1, wxEXPAND|wxALL, 5); m_updater_sizer->Add( m_updater, 0, wxEXPAND|wxALL, 5); m_main_sizer->Add( m_updater_sizer, 0, wxALL, 5 ); #endif wxStaticBoxSizer* m_show_tooltips_sizer = new wxStaticBoxSizer ( wxVERTICAL, this, _("Tooltips") ); m_show_tooltips = new wxCheckBox( this, -1, _("Show Tooltips?"), wxDefaultPosition, wxDefaultSize, 0 ); m_show_tooltips->SetValue( sett().GetShowTooltips() ); #ifndef __WXMSW__ // on windows this change is immediate m_show_tooltips_label = new wxStaticText ( this, -1, IdentityString( _("Requires %s restart to take effect.") ) ); m_show_tooltips_sizer->Add( m_show_tooltips_label, 1, wxEXPAND|wxALL, 5); #endif m_show_tooltips_sizer->Add( m_show_tooltips, 0, wxEXPAND|wxALL, 5); m_main_sizer->Add( m_show_tooltips_sizer, 0, wxALL, 5 ); wxStaticBoxSizer* m_complete_method_sizer = new wxStaticBoxSizer ( wxVERTICAL, this, _("Tab completion method") ); m_complete_method_label = new wxStaticText ( this, -1, _("\"Match exact\" will complete a word if there is one and only one match.\n" "\"Match nearest\" will select the (first) match that has closest Levenshtein distance") ); m_complete_method_old = new wxRadioButton( this, -1, _("Match exact"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); m_complete_method_new = new wxRadioButton( this, -1, _("Match nearest"), wxDefaultPosition, wxDefaultSize ); m_complete_method_old->SetValue( sett().GetCompletionMethod() == Settings::MatchExact ); m_complete_method_new->SetValue( sett().GetCompletionMethod() == Settings::MatchNearest ); m_complete_method_sizer->Add( m_complete_method_label, 1, wxEXPAND|wxALL, 5); m_complete_method_sizer->Add( m_complete_method_old, 0, wxEXPAND|wxALL, 5); m_complete_method_sizer->Add( m_complete_method_new, 0, wxEXPAND|wxALL, 5); m_main_sizer->Add( m_complete_method_sizer, 0, wxALL, 5 ); wxStaticBoxSizer* m_misc_gui_sizer = new wxStaticBoxSizer ( wxVERTICAL, this, _("Misc GUI") ); m_use_tabicons = new wxCheckBox( this, -1, _("Show big icons in mainwindow tabs?"), wxDefaultPosition, wxDefaultSize, 0 ); m_use_tabicons->SetValue( sett().GetUseTabIcons() ); m_misc_gui_sizer->Add( m_use_tabicons , 0, wxEXPAND | wxALL, 5 ); m_use_notif_popups = new wxCheckBox( this, -1, _("Use notification popups?"), wxDefaultPosition, wxDefaultSize, 0 ); m_misc_gui_sizer->Add( m_use_notif_popups, 0, wxEXPAND | wxALL, 5 ); m_notif_popup_pos_sizer = new wxBoxSizer( wxHORIZONTAL ); m_notif_popup_pos_label = new wxStaticText( this, -1, _("Screen position for notification popups") ); m_notif_popup_pos = new wxChoice( this, -1, wxDefaultPosition, wxDefaultSize, ScreenPosition() ); m_notif_popup_pos_sizer->Add( m_notif_popup_pos_label, 0, wxALL| wxALIGN_CENTER_VERTICAL, 5 ); m_notif_popup_pos_sizer->Add( m_notif_popup_pos, 0, wxALL| wxALIGN_CENTER_VERTICAL, 5 ); m_misc_gui_sizer->Add( m_notif_popup_pos_sizer, 0, wxEXPAND | wxALL, 0 ); m_notif_popup_time_sizer = new wxBoxSizer( wxHORIZONTAL ); m_notif_popup_time = new wxSpinCtrl( this, wxID_ANY ); m_notif_popup_time_label = new wxStaticText( this, -1, _("Display time for popup notifications in seconds") ); m_notif_popup_time_sizer->Add( m_notif_popup_time_label, 0, wxALL| wxALIGN_CENTER_VERTICAL, 5 ); m_notif_popup_time_sizer->Add( m_notif_popup_time, 0, wxALL| wxALIGN_CENTER_VERTICAL, 5 ); m_misc_gui_sizer->Add( m_notif_popup_time_sizer, 0, wxEXPAND | wxALL, 0 ); m_x_on_all_tabs = new wxCheckBox( this, -1, _("Show close button on all tabs? (needs restart to take effect)"), wxDefaultPosition, wxDefaultSize, 0 ); m_x_on_all_tabs->SetValue( sett().GetShowXallTabs() ); m_misc_gui_sizer->Add( m_x_on_all_tabs , 1, wxEXPAND | wxALL, 5 ); m_main_sizer->Add( m_misc_gui_sizer , 0, wxALL, 5 ); wxStaticBoxSizer* m_start_tab_sizer = new wxStaticBoxSizer ( wxHORIZONTAL, this, _("Start tab") ); m_start_tab = new wxChoice( this, -1, wxDefaultPosition, wxDefaultSize, MainWindow::GetTabNames() ); m_start_tab->SetSelection( sett().GetStartTab() ); wxStaticText* m_start_tab_label = new wxStaticText ( this, -1, _("Select which tab to show at startup") ); m_start_tab_sizer->Add( m_start_tab_label , 0, wxALIGN_CENTER_VERTICAL | wxEXPAND | wxALL, 5 ); m_start_tab_sizer->Add( m_start_tab , 0, wxALIGN_CENTER_VERTICAL , 5 ); m_main_sizer->Add( m_start_tab_sizer, 0, wxALL, 5 ); //dummy event that updates controls to correct state wxCommandEvent evt; OnRestore( evt ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); SetSizer( m_main_sizer ); Layout(); } LobbyOptionsTab::~LobbyOptionsTab() { //dtor } void LobbyOptionsTab::OnApply(wxCommandEvent& /*unused*/) { if ( !m_web_def_radio->GetValue() ) sett().SetWebBrowserPath( m_web_edit->GetValue() ); sett().SetWebBrowserUseDefault( m_web_def_radio->GetValue() ); sett().SetAutoConnect( m_autojoin->IsChecked() ); sett().SetReportStats( m_reportstats->GetValue() ); #ifdef __WXMSW__ sett().SetAutoUpdate( m_updater->IsChecked() ); #endif bool show = m_show_tooltips->IsChecked(); wxToolTip::Enable(show); sett().SetShowTooltips(show); sett().SetCompletionMethod( m_complete_method_new->GetValue() ? Settings::MatchNearest: Settings::MatchExact ); sett().SetUseTabIcons( m_use_tabicons->IsChecked() ); ui().mw().SetTabIcons(); sett().SetStartTab( m_start_tab->GetSelection() ); sett().SetEditorPath( m_editor_edit->GetValue() ); sett().SetShowXallTabs( m_x_on_all_tabs->IsChecked() ); sett().SetUseNotificationPopups( m_use_notif_popups->IsChecked() ); sett().SetNotificationPopupPosition( m_notif_popup_pos->GetSelection() ); sett().SetNotificationPopupDisplayTime( m_notif_popup_time->GetValue() ); } void LobbyOptionsTab::OnRestore(wxCommandEvent& /*unused*/) { m_autojoin->SetValue( sett().GetAutoConnect() ); m_reportstats->SetValue( sett().GetReportStats() ); #ifdef __WXMSW__ m_updater->SetValue( sett().GetAutoUpdate() ); #endif bool show = sett().GetShowTooltips(); m_show_tooltips->SetValue(show); wxToolTip::Enable(show); m_complete_method_old->SetValue( sett().GetCompletionMethod() == Settings::MatchExact ); m_complete_method_new->SetValue( sett().GetCompletionMethod() == Settings::MatchNearest ); HandleWebloc( sett().GetWebBrowserUseDefault() ); m_use_tabicons->SetValue( sett().GetUseTabIcons() ); m_start_tab->SetSelection( sett().GetStartTab() ); m_editor_edit->SetValue( sett().GetEditorPath() ); m_x_on_all_tabs->SetValue( sett().GetShowXallTabs() ); m_use_notif_popups->SetValue( sett().GetUseNotificationPopups() ); m_notif_popup_pos->SetSelection( sett().GetNotificationPopupPosition() ); m_notif_popup_time->SetValue( sett().GetNotificationPopupDisplayTime() ); } void LobbyOptionsTab::HandleWebloc( bool defloc ) { m_web_def_radio->SetValue( defloc ); m_web_spec_radio->SetValue( !defloc ); if ( defloc ) { m_web_edit->Enable( false ); m_web_browse_btn->Enable( false ); //m_sync_find_btn->Enable( false ); m_web_edit->SetValue( _T("") ); } else { m_web_edit->Enable( true ); m_web_browse_btn->Enable( true ); //m_sync_find_btn->Enable( true ); m_web_edit->SetValue( sett().GetWebBrowserPath() ); } } void LobbyOptionsTab::OnBrowseWeb( wxCommandEvent& /*unused*/ ) { wxFileDialog pick( this, _("Choose a web browser executable"), _T(""), _T("*"), CHOOSE_EXE ); if ( pick.ShowModal() == wxID_OK ) m_web_edit->SetValue( pick.GetPath() ); } void LobbyOptionsTab::OnBrowseEditor( wxCommandEvent& /*unused*/ ) { wxFileDialog pick( this, _("Choose a editor browser executable"), _T(""), _T("*"), CHOOSE_EXE ); if ( pick.ShowModal() == wxID_OK ) m_editor_edit->SetValue( pick.GetPath() ); } void LobbyOptionsTab::OnDefaultWeb( wxCommandEvent& /*unused*/ ) { HandleWebloc( m_web_def_radio->GetValue() ); } springlobby-0.169/src/options/lobbyoptionstab.h0000600000176000000410000000550212105760300023266 0ustar buildbotwww-data00000000000000#ifndef LOBBYOPTIONSTAB_H #define LOBBYOPTIONSTAB_H #include class wxCheckBox; class wxBoxSizer; class wxStaticText; class wxRadioButton; class wxTextCtrl; class wxButton; class wxStaticBoxSizer; class wxChoice; class wxSpinCtrl; class LobbyOptionsTab : public wxScrolledWindow { public: LobbyOptionsTab(wxWindow* parent); virtual ~LobbyOptionsTab(); void OnApply( wxCommandEvent& event ); void OnRestore( wxCommandEvent& event ); void OnBrowseWeb( wxCommandEvent& event ); void OnBrowseEditor( wxCommandEvent& event ); void OnDefaultWeb( wxCommandEvent& event ); void HandleWebloc( bool defloc ); protected: wxCheckBox* m_autojoin; wxCheckBox* m_reportstats; wxCheckBox* m_updater; wxCheckBox* m_show_tooltips; wxCheckBox* m_use_tabicons; wxCheckBox* m_x_on_all_tabs; wxCheckBox* m_use_notif_popups; wxStaticText* m_autoconnect_label; wxStaticText* m_reportstats_label; wxStaticText* m_updater_label; wxStaticText* m_show_tooltips_label; wxStaticText* m_web_loc_text; wxStaticText* m_editor_loc_text; wxTextCtrl* m_web_edit; wxTextCtrl* m_editor_edit; wxStaticText* m_complete_method_label; wxStaticText* m_notif_popup_pos_label; wxStaticText* m_notif_popup_time_label; wxRadioButton* m_complete_method_old; wxRadioButton* m_complete_method_new; wxButton* m_web_browse_btn; wxButton* m_editor_browse_btn; wxButton* m_select_locale; wxRadioButton* m_web_def_radio; wxRadioButton* m_web_spec_radio; wxBoxSizer* m_main_sizer; wxStaticBoxSizer* m_web_box_sizer; wxStaticBoxSizer* m_editor_box_sizer; wxBoxSizer* m_web_loc_sizer; wxBoxSizer* m_editor_loc_sizer; wxBoxSizer* m_notif_popup_pos_sizer; wxBoxSizer* m_notif_popup_time_sizer; wxChoice* m_start_tab; wxChoice* m_notif_popup_pos; wxSpinCtrl* m_notif_popup_time; enum { SPRING_WEBBROWSE = wxID_HIGHEST, SPRING_DEFWEB, ID_BUT_EDITOR }; DECLARE_EVENT_TABLE() }; #endif // LOBBYOPTIONSTAB_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/options/mainoptionstab.cpp0000600000176000000410000001233212105760300023435 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: MainOptionsTab // #include "mainoptionstab.h" #include #include #include #include #include #include #include #include "aui/auimanager.h" #include "aui/artprovider.h" #include "aui/slbook.h" #include "springoptionstab.h" #include "chatoptionstab.h" #include "groupoptionspanel.h" #include "downloadoptionspanel.h" #include "lobbyoptionstab.h" #include "settings.h" #include "uiutils.h" #include "utils/debug.h" #include "utils/controls.h" #include "utils/conversion.h" #include "utils/platform.h" #include "images/torrentoptionspanel_icon.png.h" #include "images/spring.xpm" #include "images/userchat.xpm" #include "images/springlobby.xpm" BEGIN_EVENT_TABLE( MainOptionsTab, wxPanel ) EVT_BUTTON ( wxID_APPLY, MainOptionsTab::OnApply ) EVT_BUTTON ( wxID_REVERT, MainOptionsTab::OnRestore ) END_EVENT_TABLE() /** \brief A container for the various option panels * Contains a notebook holding the real option panels as pages. Handles "apply" and "restore" events for those pages, * rather then those having to implement (and duplicate) this functionality. \n * See SpringOptionsTab, TorrentOptionsPanel, ChatOptionsTab */ MainOptionsTab::MainOptionsTab( wxWindow* parent ) : wxScrolledWindow( parent, -1 ) { GetAui().manager->AddPane( this, wxLEFT, _T("mainoptionstab") ); m_tabs = new SLNotebook( this, _T("mainoptionstab"), OPTIONS_TABS, wxDefaultPosition, wxDefaultSize, wxAUI_NB_TAB_SPLIT | wxAUI_NB_TAB_MOVE | wxAUI_NB_SCROLL_BUTTONS | wxAUI_NB_TOP | wxAUI_NB_TAB_EXTERNAL_MOVE ); m_tabs->SetArtProvider(new SLArtProvider); m_imagelist = new wxImageList( 12, 12 ); m_imagelist->Add( wxIcon(spring_xpm) ); m_imagelist->Add( charArr2wxBitmap( torrentoptionspanel_icon_png, sizeof(torrentoptionspanel_icon_png) ) ); m_imagelist->Add( wxIcon(userchat_xpm) ); m_imagelist->Add( wxIcon(userchat_xpm) ); m_imagelist->Add( wxIcon(springlobby_xpm) ); //!TODO this is non-square ?!!? m_spring_opts = new SpringOptionsTab( m_tabs ); m_tabs->AddPage( m_spring_opts, _("Spring"), true, wxIcon(spring_xpm) ); m_torrent_opts = new TorrentOptionsPanel( m_tabs ); m_tabs->AddPage( m_torrent_opts, _("Downloads"), true, charArr2wxBitmap( torrentoptionspanel_icon_png, sizeof(torrentoptionspanel_icon_png) ) ); m_chat_opts = new ChatOptionsTab( m_tabs ); m_tabs->AddPage( m_chat_opts, _("Chat"), true, wxIcon(userchat_xpm) ); m_lobby_opts = new LobbyOptionsTab( m_tabs ); m_tabs->AddPage ( m_lobby_opts, _( "General" ), true, wxIcon( springlobby_xpm ) ); m_groups_opts = new GroupOptionsPanel( m_tabs ); m_tabs->AddPage ( m_groups_opts, _( "Groups" ), true, wxIcon( userchat_xpm ) ); m_restore_btn = new wxButton( this, wxID_REVERT, _( "Restore" ) ); m_apply_btn = new wxButton( this, wxID_APPLY, _( "Apply" ) ); m_button_sizer = new wxBoxSizer( wxHORIZONTAL ); m_button_sizer->AddStretchSpacer(); m_button_sizer->Add( m_restore_btn, 0, wxALL, 2 ); m_button_sizer->Add( m_apply_btn, 0, wxALL, 2 ); m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_main_sizer->Add( m_tabs, 1, wxEXPAND ); m_main_sizer->Add( m_button_sizer, 0, wxEXPAND ); SetSizer( m_main_sizer ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); Layout(); Refresh(); } MainOptionsTab::~MainOptionsTab() { // if ( sett().GetAutosavePerspective() ) // SavePerspective(); } GroupOptionsPanel& MainOptionsTab::GetGroupOptionsPanel() { ASSERT_EXCEPTION( m_groups_opts != 0, _T( "m_groups_opts == 0" ) ); return *m_groups_opts; } void MainOptionsTab::OnApply( wxCommandEvent& event ) { m_spring_opts->OnApply( event ); m_chat_opts->OnApply( event ); m_torrent_opts->OnApply( event ); m_lobby_opts->OnApply( event ); sett().SaveSettings(); } void MainOptionsTab::OnRestore( wxCommandEvent& event ) { m_spring_opts->OnRestore( event ); m_chat_opts->OnRestore( event ); m_torrent_opts->OnRestore( event ); m_lobby_opts->OnRestore ( event ); } void MainOptionsTab::OnOpenGroupsTab() { //m_groups_opts->ReloadGroupSizer(); } void MainOptionsTab::SetSelection( const unsigned int page ) { if ( page < m_tabs->GetPageCount() ) { m_tabs->SetSelection( page ); //m_groups_opts->ReloadGroupSizer(); } else m_tabs->SetSelection( 0 ); } void MainOptionsTab::LoadPerspective( const wxString& perspective_name ) { LoadNotebookPerspective( m_tabs, perspective_name ); } void MainOptionsTab::SavePerspective( const wxString& perspective_name ) { SaveNotebookPerspective( m_tabs, perspective_name ); } OptionsDialog::OptionsDialog( wxWindow* parent ) : wxDialog( parent, -1, IdentityString(_("%s Preferences") ), wxDefaultPosition, wxSize( 700,430 ), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMAXIMIZE_BOX ), WindowAttributesPickle( _T("preferences"), this, wxSize( 700,430 ) ) { m_options = new MainOptionsTab( this ); m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_main_sizer->Add( m_options, 1, wxEXPAND | wxALL, 0 ); SetSizer( m_main_sizer ); Layout(); } void OptionsDialog::SetSelection( const unsigned int page ) { m_options->SetSelection( page ); } bool OptionsDialog::Show( bool show ) { if( !show ) SaveAttributes(); return wxDialog::Show( show ); } springlobby-0.169/src/options/mainoptionstab.h0000600000176000000410000000525212105760300023105 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_MAINOPTIONSTAB_H #define SPRINGLOBBY_HEADERGUARD_MAINOPTIONSTAB_H #include #include #include class Ui; class wxCommandEvent; class wxBoxSizer; class wxImageList; class wxNotebook; class SLNotebook; class SpringOptionsTab; class ChatOptionsTab; class wxButton; class wxBoxSizer; class TorrentOptionsPanel; class GroupOptionsPanel; class LobbyOptionsTab; /** \brief A container for the various option panels * Contains a notebook holding the real option panels as pages. Handles "apply" and "restore" events for those pages, * rather then those having to implement (and duplicate) this functionality. \n * See SpringOptionsTab, TorrentOptionsPanel, ChatOptionsTab, LobbyOptionsTab */ class MainOptionsTab : public wxScrolledWindow { public: MainOptionsTab( wxWindow* parent ); ~MainOptionsTab(); /** \brief delegate the data setting to memeber panels */ void OnApply( wxCommandEvent& event ); void OnRestore( wxCommandEvent& event ); void OnOpenGroupsTab(); void SetSelection( const unsigned int page ); GroupOptionsPanel& GetGroupOptionsPanel(); void LoadPerspective( const wxString& perspective_name = wxEmptyString ); void SavePerspective( const wxString& perspective_name = wxEmptyString ); protected: wxBoxSizer* m_main_sizer; wxImageList* m_imagelist; SLNotebook* m_tabs; SpringOptionsTab* m_spring_opts; ChatOptionsTab* m_chat_opts; TorrentOptionsPanel* m_torrent_opts; GroupOptionsPanel* m_groups_opts; LobbyOptionsTab* m_lobby_opts; wxButton* m_restore_btn; wxButton* m_apply_btn; wxBoxSizer* m_button_sizer; enum { OPTIONS_TABS = wxID_HIGHEST }; DECLARE_EVENT_TABLE() }; class OptionsDialog : public wxDialog, public WindowAttributesPickle { public: OptionsDialog( wxWindow* parent ); void SetSelection( const unsigned int page ); bool Show( bool show = true ); private: MainOptionsTab* m_options; wxBoxSizer* m_main_sizer; }; #endif // SPRINGLOBBY_HEADERGUARD_MAINOPTIONSTAB_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/options/springoptionstab.cpp0000600000176000000410000003232312105760300024015 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007, 2008 The SpringLobby Team. All rights reserved. */ // // Class: SpringOptionsTab // #include "springoptionstab.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include // added for scroll bar powers #include #ifdef __WXMSW__ #include #endif #include "nonportable.h" #include "ui.h" #include "springunitsync.h" #include "utils/controls.h" #include "utils/platform.h" #include "utils/uievents.h" #include "utils/misc.h" #include "uiutils.h" #include "settings.h" #include "mainwindow.h" #include "utils/customdialogs.h" BEGIN_EVENT_TABLE( SpringOptionsTab, wxPanel ) EVT_BUTTON ( SPRING_EXECBROWSE, SpringOptionsTab::OnBrowseExec ) EVT_BUTTON ( SPRING_SYNCBROWSE, SpringOptionsTab::OnBrowseSync ) EVT_BUTTON ( SPRING_BUNDLEBROWSE,SpringOptionsTab::OnBrowseBundle) EVT_BUTTON ( SPRING_AUTOCONF, SpringOptionsTab::OnAutoConf ) EVT_BUTTON ( SPRING_EXECFIND, SpringOptionsTab::OnFindExec ) EVT_BUTTON ( SPRING_SYNCFIND, SpringOptionsTab::OnFindSync ) EVT_BUTTON ( SPRING_BUNDLEFIND, SpringOptionsTab::OnFindBundle ) EVT_BUTTON ( SPRING_DATADIR, SpringOptionsTab::OnDataDir ) EVT_CHECKBOX( SPRING_DONTSEARCH, SpringOptionsTab::OnDontSearch ) EVT_CHECKBOX( SPRING_FORCEBUNDLE, SpringOptionsTab::OnForceBundle ) END_EVENT_TABLE() SpringOptionsTab::SpringOptionsTab( wxWindow* parent ) : wxScrolledWindow( parent, -1 ) { m_dontsearch_chkbox = new wxCheckBox( this, SPRING_DONTSEARCH, _("Search only in current installed path"), wxDefaultPosition, wxSize(-1,CONTROL_HEIGHT) ); m_dontsearch_chkbox->SetValue( sett().GetSearchSpringOnlyInSLPath() ); m_oldlaunch_chkbox = new wxCheckBox( this, SPRING_DONTSEARCH, _("Use alternative launch method (DO NOT TOUCH THIS UNLESS YOU KNOW WHAT YOU'RE DOING)"), wxDefaultPosition, wxSize(-1,CONTROL_HEIGHT) ); m_oldlaunch_chkbox->SetValue( sett().UseOldSpringLaunchMethod() ); m_forcebundle_chkbox = new wxCheckBox( this, SPRING_FORCEBUNDLE, _("Use the Spring version in the current bundle"), wxDefaultPosition, wxSize(-1,CONTROL_HEIGHT) ); m_forcebundle_chkbox->SetValue( sett().GetUseSpringPathFromBundle() ); if (!sett().IsInsideSpringBundle()) m_forcebundle_chkbox->Disable(); #ifndef __WXMSW__ m_dontsearch_chkbox->Disable(); m_oldlaunch_chkbox->Disable(); #endif if (!sett().GetBundleMode()) m_forcebundle_chkbox->Disable(); /* ================================ * Spring executable */ m_exec_box = new wxStaticBox( this, -1, _( "Spring executable" ) ); m_exec_loc_text = new wxStaticText( this, -1, _( "Location" ) ); m_exec_edit = new wxTextCtrl( this, -1, sett().GetCurrentUsedSpringBinary() ); m_exec_browse_btn = new wxButton( this, SPRING_EXECBROWSE, _( "Browse" ) ); m_exec_find_btn = new wxButton( this, SPRING_EXECFIND, _( "Find" ) ); /* ================================ * UnitSync */ m_sync_box = new wxStaticBox( this, -1, _( "UnitSync library" ) ); m_sync_edit = new wxTextCtrl( this, -1, sett().GetCurrentUsedUnitSync() ); m_sync_loc_text = new wxStaticText( this, -1, _( "Location" ) ); m_sync_browse_btn = new wxButton( this, SPRING_SYNCBROWSE, _( "Browse" ) ); m_sync_find_btn = new wxButton( this, SPRING_SYNCFIND, _( "Find" ) ); /* ================================ * Spring Bundle */ m_bundle_box = new wxStaticBox( this, -1, _( "Spring App Bundle" ) ); m_bundle_edit = new wxTextCtrl( this, -1, sett().GetCurrentUsedBundle() ); m_bundle_loc_text = new wxStaticText( this, -1, _( "Location" ) ); m_bundle_browse_btn = new wxButton( this, SPRING_BUNDLEBROWSE, _( "Browse" ) ); m_bundle_find_btn = new wxButton( this, SPRING_BUNDLEFIND, _( "Find" ) ); if (sett().GetBundleMode()) { EnableSpringBox(false); EnableUnitsyncBox(false); } else { EnableBundleBox(false); } m_auto_btn = new wxButton( this, SPRING_AUTOCONF, _( "Auto Configure" ) ); m_datadir_btn = new wxButton( this, SPRING_DATADIR, _( "Change Datadir path" ) ); m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_aconf_sizer = new wxBoxSizer( wxVERTICAL ); m_exec_loc_sizer = new wxBoxSizer( wxHORIZONTAL ); m_sync_loc_sizer = new wxBoxSizer( wxHORIZONTAL ); m_bundle_loc_sizer = new wxBoxSizer( wxHORIZONTAL ); m_exec_loc_sizer->Add( m_exec_loc_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2 ); m_exec_loc_sizer->Add( m_exec_edit, 1, wxEXPAND ); m_exec_loc_sizer->Add( m_exec_browse_btn ); m_exec_loc_sizer->Add( m_exec_find_btn ); m_sync_loc_sizer->Add( m_sync_loc_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2 ); m_sync_loc_sizer->Add( m_sync_edit, 1, wxEXPAND ); m_sync_loc_sizer->Add( m_sync_browse_btn ); m_sync_loc_sizer->Add( m_sync_find_btn ); m_bundle_loc_sizer->Add( m_bundle_loc_text, 0, wxALL | wxALIGN_CENTER_VERTICAL, 2 ); m_bundle_loc_sizer->Add( m_bundle_edit, 1, wxEXPAND ); m_bundle_loc_sizer->Add( m_bundle_browse_btn ); m_bundle_loc_sizer->Add( m_bundle_find_btn ); m_exec_box_sizer = new wxStaticBoxSizer( m_exec_box, wxVERTICAL ); m_sync_box_sizer = new wxStaticBoxSizer( m_sync_box, wxVERTICAL ); m_bundle_box_sizer = new wxStaticBoxSizer( m_bundle_box, wxVERTICAL ); m_exec_box_sizer->Add( m_exec_loc_sizer, 0, wxEXPAND | wxALL, 2 ); m_sync_box_sizer->Add( m_sync_loc_sizer, 0, wxEXPAND | wxALL, 2 ); m_bundle_box_sizer->Add( m_bundle_loc_sizer, 0, wxEXPAND | wxALL, 2 ); m_aconf_sizer->AddStretchSpacer(); m_aconf_sizer->Add( m_auto_btn ); m_aconf_sizer->Add( m_datadir_btn ); m_main_sizer->Add( m_dontsearch_chkbox, 0, wxEXPAND | wxALL, 5 ); m_main_sizer->Add( m_forcebundle_chkbox, 0, wxEXPAND | wxALL, 5 ); m_main_sizer->Add( m_exec_box_sizer, 0, wxEXPAND | wxALL, 5 ); m_main_sizer->Add( m_sync_box_sizer, 0, wxEXPAND | wxALL, 5 ); m_main_sizer->Add( m_bundle_box_sizer, 0, wxEXPAND | wxALL, 5 ); m_main_sizer->Add( m_oldlaunch_chkbox, 0, wxEXPAND | wxALL, 5 ); m_main_sizer->Add( m_aconf_sizer, 0, wxEXPAND | wxALL, 5 ); m_main_sizer->AddStretchSpacer(); SetSizer( m_main_sizer ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); Layout(); DoRestore(); if ( sett().IsPortableMode() || sett().GetSearchSpringOnlyInSLPath() ) { EnableSpringBox(false); EnableUnitsyncBox(false); m_auto_btn->Disable(); m_bundle_box->Disable(); m_datadir_btn->Disable(); } if ( sett().GetUseSpringPathFromBundle() ) { m_bundle_box->Disable(); } if ( sett().IsFirstRun() ) { sett().SetSpringBinary( sett().GetCurrentUsedSpringIndex(), m_exec_edit->GetValue() ); sett().SetUnitSync( sett().GetCurrentUsedSpringIndex(), m_sync_edit->GetValue() ); sett().SetBundle( sett().GetCurrentUsedSpringIndex(), m_bundle_edit->GetValue() ); sett().SetSearchSpringOnlyInSLPath( m_dontsearch_chkbox->IsChecked() ); } } SpringOptionsTab::~SpringOptionsTab() { } void SpringOptionsTab::EnableSpringBox(bool enabled) { m_exec_box->Enable(enabled); m_exec_loc_text->Enable(enabled); m_exec_edit->Enable(enabled); m_exec_browse_btn->Enable(enabled); m_exec_find_btn->Enable(enabled); } void SpringOptionsTab::EnableUnitsyncBox(bool enabled) { m_sync_box->Enable(enabled); m_sync_loc_text->Enable(enabled); m_sync_edit->Enable(enabled); m_sync_browse_btn->Enable(enabled); m_sync_find_btn->Enable(enabled); } void SpringOptionsTab::EnableBundleBox(bool enabled) { m_bundle_box->Enable(enabled); m_bundle_edit->Enable(enabled); m_bundle_loc_text->Enable(enabled); m_bundle_browse_btn->Enable(enabled); m_bundle_find_btn->Enable(enabled); } void SpringOptionsTab::DoRestore() { m_dontsearch_chkbox->SetValue( sett().GetSearchSpringOnlyInSLPath() ); m_oldlaunch_chkbox->SetValue( sett().UseOldSpringLaunchMethod() ); m_sync_edit->SetValue( sett().GetCurrentUsedUnitSync() ); m_exec_edit->SetValue( sett().GetCurrentUsedSpringBinary() ); m_bundle_edit->SetValue( sett().GetCurrentUsedBundle() ); } void SpringOptionsTab::OnAutoConf( wxCommandEvent& event ) { OnFindExec( event ); OnFindSync( event ); OnFindBundle( event ); } void SpringOptionsTab::OnFindExec( wxCommandEvent& /*unused*/ ) { wxString found = sett().AutoFindSpringBin(); if ( !found.IsEmpty() ) m_exec_edit->SetValue( found ); } void SpringOptionsTab::OnFindSync( wxCommandEvent& /*unused*/ ) { wxString found = sett().AutoFindUnitSync(); if ( !found.IsEmpty() ) m_sync_edit->SetValue( found ); } void SpringOptionsTab::OnFindBundle( wxCommandEvent& /*unused*/ ) { wxString found = sett().AutoFindBundle(); if ( !found.IsEmpty() ) m_bundle_edit->SetValue( found ); } void SpringOptionsTab::OnBrowseExec( wxCommandEvent& /*unused*/ ) { wxFileDialog pick( this, _( "Choose a Spring executable" ), wxPathOnly( sett().GetCurrentUsedSpringBinary() ), wxString( SPRING_BIN ), CHOOSE_EXE ); if ( pick.ShowModal() == wxID_OK ) m_exec_edit->SetValue( pick.GetPath() ); } void SpringOptionsTab::OnBrowseSync( wxCommandEvent& /*unused*/ ) { wxString filefilter = wxString( _( "Library" ) ) << _T( "(*" ) << GetLibExtension() << _T( ")|*" ) + GetLibExtension(); #ifdef __WXMAC__ filefilter << _T( "|" ) << _( "Library" ) << _T( "(*.dylib)|*.dylib" ); #endif filefilter << _T( "|" ) << wxString( _( "Any File" ) ) << _T( " (*.*)|*.*" ); wxFileDialog pick( this, _( "Choose UnitSync library" ), wxPathOnly( sett().GetCurrentUsedSpringBinary() ), _T( "unitsync" ) + GetLibExtension(), wxString( _( "Library" ) ) + _T( "(*" ) + GetLibExtension() + _T( ")|*" ) + GetLibExtension() + _T( "|" ) + wxString( _( "Any File" ) ) + _T( " (*.*)|*.*" ) ); if ( pick.ShowModal() == wxID_OK ) m_sync_edit->SetValue( pick.GetPath() ); } void SpringOptionsTab::OnBrowseBundle( wxCommandEvent& /*unused*/ ) { wxFileDialog pick( this, _( "Choose a Spring executable" ), wxPathOnly( sett().GetCurrentUsedBundle() ), _T("Spring.App"), wxString(_("App bundle")) + _T("(*.App)||.App") ); if ( pick.ShowModal() == wxID_OK ) m_bundle_edit->SetValue( pick.GetPath() ); } void SpringOptionsTab::OnApply( wxCommandEvent& /*unused*/ ) { const bool reload_usync = sett().GetUnitSync( sett().GetCurrentUsedSpringIndex() ) != m_sync_edit->GetValue(); sett().SetSpringBinary( sett().GetCurrentUsedSpringIndex(), m_exec_edit->GetValue() ); sett().SetUnitSync( sett().GetCurrentUsedSpringIndex(), m_sync_edit->GetValue() ); sett().SetBundle( sett().GetCurrentUsedSpringIndex(), m_bundle_edit->GetValue() ); sett().SetSearchSpringOnlyInSLPath( m_dontsearch_chkbox->IsChecked() ); sett().SetOldSpringLaunchMethod( m_oldlaunch_chkbox->IsChecked() ); sett().SetUseSpringPathFromBundle( m_forcebundle_chkbox->IsChecked() ); if ( sett().IsFirstRun() ) return; UiEvents::ScopedStatusMessage( _("Reloading unitsync"), 0 ); sett().RefreshSpringVersionList(); if ( reload_usync && !usync().LoadUnitSyncLib( sett().GetCurrentUsedUnitSync() ) ) { wxLogWarning( _T( "Cannot load UnitSync" ) ); customMessageBox( SL_MAIN_ICON, IdentityString( _( "%s is unable to load your UnitSync library.\n\nYou might want to take another look at your unitsync setting." ) ), _( "Spring error" ), wxOK ); } } void SpringOptionsTab::OnRestore( wxCommandEvent& /*unused*/ ) { DoRestore(); } void SpringOptionsTab::OnDataDir( wxCommandEvent& /*unused*/ ) { SetupUserFolders(); } void SpringOptionsTab::OnDontSearch( wxCommandEvent& /*unused*/ ) { if ( m_dontsearch_chkbox->IsChecked() ) { EnableSpringBox(false); EnableUnitsyncBox(false); m_datadir_btn->Disable(); } else { EnableSpringBox(true); EnableUnitsyncBox(true); m_datadir_btn->Enable(); } } void SpringOptionsTab::OnForceBundle( wxCommandEvent& /*unused*/ ) { EnableBundleBox(!m_forcebundle_chkbox->IsChecked()); } void SpringOptionsTab::SetupUserFolders() { wxString sep = wxFileName::GetPathSeparator(); wxString defaultdir = wxFileName::GetHomeDir() + sep + _T( ".spring" ); int result = wxMessageBox( _( "Do you want to change spring's datadir location? (select yes only if you know what you're doing)" ), _( "Data dir wizard" ), wxICON_QUESTION | wxYES_NO, &ui().mw() ); if ( result != wxYES ) return; wxString dir = wxDirSelector( _( "Choose a folder" ), defaultdir ); if ( dir.IsEmpty() || ( !tryCreateDirectory( dir, 0775 ) || ( !tryCreateDirectory( dir + sep + _T( "mods" ), 0775 ) || !tryCreateDirectory( dir + sep + _T( "games" ), 0775 ) || !tryCreateDirectory( dir + sep + _T( "maps" ), 0775 ) || !tryCreateDirectory( dir + sep + _T( "base" ), 0775 ) || !tryCreateDirectory( dir + sep + _T( "demos" ), 0775 ) || !tryCreateDirectory( dir + sep + _T( "screenshots" ), 0775 ) ) ) ) { if ( dir.IsEmpty() ) dir = defaultdir; wxMessageBox( _( "Something went wrong when creating the directories\nPlease create manually the following folders:" ) + wxString( _T( "\n" ) ) + dir + _T( "\n" ) + dir + sep + _T( "mods\n" ) + dir + sep + _T( "maps\n" ) + dir + sep + _T( "base\n" ) ); return; } if ( usync().IsLoaded() ) { usync().SetSpringDataPath( dir ); } CopyUikeys( sett().GetCurrentUsedDataDir() ); } springlobby-0.169/src/options/springoptionstab.h0000600000176000000410000000672512105760300023471 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SPRINGOPTIONSTAB_H #define SPRINGLOBBY_HEADERGUARD_SPRINGOPTIONSTAB_H #include class wxStaticBoxSizer; class wxStaticBox; class wxStaticText; class wxRadioButton; class wxButton; class wxTextCtrl; class wxBoxSizer; class Ui; class wxCheckBox; class SpringOptionsTab : public wxScrolledWindow { public: SpringOptionsTab( wxWindow* parent ); ~SpringOptionsTab(); void DoRestore(); void OnBrowseExec( wxCommandEvent& event ); void OnBrowseSync( wxCommandEvent& event ); void OnBrowseBundle( wxCommandEvent& event ); void OnApply( wxCommandEvent& event ); void OnRestore( wxCommandEvent& event ); void OnAutoConf( wxCommandEvent& event ); void OnFindExec( wxCommandEvent& event ); void OnFindSync( wxCommandEvent& event ); void OnFindBundle( wxCommandEvent& event ); void OnDataDir( wxCommandEvent& event ); void OnDontSearch( wxCommandEvent& event ); void OnForceBundle( wxCommandEvent& event ); void EnableSpringBox(bool enabled); void EnableUnitsyncBox(bool enabled); void EnableBundleBox(bool enabled); protected: void SetupUserFolders(); wxStaticText* m_exec_loc_text; wxStaticText* m_sync_loc_text; wxStaticText* m_bundle_loc_text; wxButton* m_exec_browse_btn; wxButton* m_exec_find_btn; wxButton* m_sync_browse_btn; wxButton* m_sync_find_btn; wxButton* m_bundle_browse_btn; wxButton* m_bundle_find_btn; wxButton* m_datadir_btn; wxButton* m_auto_btn; wxRadioButton* m_exec_def_radio; wxRadioButton* m_exec_spec_radio; wxRadioButton* m_sync_def_radio; wxRadioButton* m_sync_spec_radio; wxRadioButton* m_bundle_def_radio; wxRadioButton* m_bundle_spec_radio; wxTextCtrl* m_exec_edit; wxTextCtrl* m_sync_edit; wxTextCtrl* m_bundle_edit; wxStaticBox* m_exec_box; wxStaticBox* m_sync_box; wxStaticBox* m_bundle_box; wxStaticBox* m_web_box; wxStaticBoxSizer* m_exec_box_sizer; wxStaticBoxSizer* m_sync_box_sizer; wxStaticBoxSizer* m_bundle_box_sizer; wxBoxSizer* m_main_sizer; wxBoxSizer* m_aconf_sizer; wxBoxSizer* m_exec_loc_sizer; wxBoxSizer* m_sync_loc_sizer; wxBoxSizer* m_bundle_loc_sizer; wxCheckBox* m_dontsearch_chkbox; wxCheckBox* m_forcebundle_chkbox; wxCheckBox* m_oldlaunch_chkbox; enum { SPRING_EXECBROWSE = wxID_HIGHEST, SPRING_SYNCBROWSE, SPRING_BUNDLEBROWSE, SPRING_WEBBROWSE, SPRING_DEFEXE, SPRING_DEFUSYNC, SPRING_DEFBUNDLE, SPRING_DEFWEB, SPRING_AUTOCONF, SPRING_EXECFIND, SPRING_SYNCFIND, SPRING_BUNDLEFIND, SPRING_DATADIR, SPRING_DONTSEARCH, SPRING_FORCEBUNDLE }; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_SPRINGOPTIONSTAB_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/orphaned/sectiontree.cpp0000700000176000000410000000016012105760300023034 0ustar buildbotwww-data00000000000000#include "sectiontree.h" SectionTree::SectionTree() { //ctor } SectionTree::~SectionTree() { //dtor } springlobby-0.169/src/orphaned/sectiontree.h0000700000176000000410000000234012105760300022503 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_SECTIONTREE_H_INCLUDED #define SPRINGLOBBY_SECTIONTREE_H_INCLUDED #include #include #include class SectionTree { public: typedef std::set KeySet; struct Node; typedef std::vector ChildVec; struct Node { ChildVec m_children; KeySet m_keys; wxString name,key,descr; }; public: SectionTree(); virtual ~SectionTree(); //bool Add protected: private: }; #endif // SPRINGLOBBY_SECTIONTREE_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/pingthread.cpp0000600000176000000410000000065012105760300021040 0ustar buildbotwww-data00000000000000#include "pingthread.h" #include PingThread::PingThread( iNetClass& parent, unsigned int interval ): m_parent(parent), m_interval(interval) { } void PingThread::Init() { Create(); SetPriority( WXTHREAD_MAX_PRIORITY ); Run(); } void* PingThread::Entry() { while ( !TestDestroy() ) { m_parent.Ping(); // break if woken if(!Sleep(m_interval))break; } return 0; } void PingThread::OnExit() { } springlobby-0.169/src/pingthread.h0000600000176000000410000000107712105760300020511 0ustar buildbotwww-data00000000000000#ifndef PINGTHREAD_H #define PINGTHREAD_H #include "inetclass.h" #include "thread.h" /** A thread class that sends pings to socket. * Implemented as joinable thread. * When you want it started, construct it then call Init() * When you want it killed, call Wait() method. * Dont call other methods, especially the Destroy() method. */ class PingThread: public Thread { public: PingThread( iNetClass& parent, unsigned int interval ); void Init(); private: void* Entry(); void OnExit(); iNetClass& m_parent; unsigned int m_interval; }; #endif // PINGTHREAD_H springlobby-0.169/src/playback/playbackfilter.cpp0000600000176000000410000004177012105760300023505 0ustar buildbotwww-data00000000000000 #if wxUSE_TOGGLEBTN #include #endif #include #include #include #include #include #include #include #include #include #include #include #include "playbacktab.h" #include "replaylist.h" //#include "PlaybackListFiltervalues.h" #include "playbackfiltervalues.h" #include "../battlelist/battlelistctrl.h" #include "../battle.h" #include "../uiutils.h" #include "../utils/tasutil.h" #include "../utils/conversion.h" #include "../settings.h" /////////////////////////////////////////////////////////////////////////// BEGIN_EVENT_TABLE_TEMPLATE1(PlaybackListFilter, wxPanel, PlaybackTabType) EVT_BUTTON ( PLAYBACK_FILTER_PLAYER_BUTTON , PlaybackListFilter::OnPlayerButton ) EVT_BUTTON ( PLAYBACK_FILTER_DURATION_BUTTON , PlaybackListFilter::OnDurationButton ) EVT_BUTTON ( PLAYBACK_FILTER_FILESIZE_BUTTON , PlaybackListFilter::OnFilesizeButton ) EVT_CHOICE ( PLAYBACK_FILTER_PLAYER_CHOICE , PlaybackListFilter::OnPlayerChange ) EVT_TEXT ( PLAYBACK_FILTER_DURATION_EDIT , PlaybackListFilter::OnChangeDuration ) EVT_TEXT ( PLAYBACK_FILTER_FILESIZE_EDIT , PlaybackListFilter::OnChangeFilesize ) EVT_TEXT ( PLAYBACK_FILTER_MAP_EDIT , PlaybackListFilter::OnChangeMap ) EVT_TEXT ( PLAYBACK_FILTER_MOD_EDIT , PlaybackListFilter::OnChangeMod ) EVT_CHECKBOX ( PLAYBACK_FILTER_MAP_SHOW , PlaybackListFilter::OnChange ) EVT_CHECKBOX ( PLAYBACK_FILTER_MOD_SHOW , PlaybackListFilter::OnChange ) END_EVENT_TABLE() template PlaybackListFilter::PlaybackListFilter( wxWindow* parent, wxWindowID id, PlaybackTabType* parentTab, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ), m_parent_tab( parentTab ), m_filter_map_edit(0), m_filter_map_expression(0), m_filter_mod_edit(0),m_filter_mod_expression(0) { PlaybackListFilterValues f_values = sett().GetReplayFilterValues( sett().GetLastReplayFilterProfileName() ); wxBoxSizer* m_filter_sizer; m_filter_sizer = new wxBoxSizer( wxHORIZONTAL ); wxStaticBoxSizer* m_filter_body_sizer; m_filter_body_sizer = new wxStaticBoxSizer( new wxStaticBox( this, -1, _("Filter settings") ), wxVERTICAL ); wxBoxSizer* m_filter_body_row2_sizer; m_filter_body_row2_sizer = new wxBoxSizer( wxHORIZONTAL ); // wxBoxSizer* m_filter_player_sizer; // m_filter_player_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_player_text = new wxStaticText( this, wxID_ANY, _("Player:"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); m_filter_player_text->Wrap( -1 ); m_filter_player_text->SetMinSize( wxSize( 90,-1 ) ); m_filter_body_row2_sizer ->Add( m_filter_player_text, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); wxArrayString m_filter_player_choiceChoices; m_filter_player_choiceChoices.Add( _("All") ); for (wxLongLong i = 0;i <= 32;i++) m_filter_player_choiceChoices.Add( i.ToString() ); m_filter_player_choice = new wxChoice( this, PLAYBACK_FILTER_PLAYER_CHOICE, wxDefaultPosition, wxSize( -1,-1 ), m_filter_player_choiceChoices, 0 ); m_filter_player_choice->SetSelection( GetIntParam( f_values.player_num ) ); m_filter_player_choice->SetMinSize( wxSize( 140,-1 ) ); m_filter_body_row2_sizer ->Add( m_filter_player_choice, 0, wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_filter_player_button = new wxButton( this, PLAYBACK_FILTER_PLAYER_BUTTON, f_values.player_mode, wxDefaultPosition, wxSize( 25, 25 ), 0 ); m_filter_body_row2_sizer ->Add( m_filter_player_button, 0, wxALIGN_LEFT|wxALL|wxALIGN_CENTER_VERTICAL, 5 ); ////map wxBoxSizer* m_filter_body_row3_sizer; m_filter_body_row3_sizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* m_filter_map_sizer; m_filter_map_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_map_text = new wxStaticText( this, wxID_ANY, _("Map:"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); m_filter_map_text->Wrap( -1 ); m_filter_map_text->SetMinSize( wxSize( 90,-1 ) ); m_filter_map_sizer->Add( m_filter_map_text, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_filter_map_edit = new wxTextCtrl( this, PLAYBACK_FILTER_MAP_EDIT, f_values.map, wxDefaultPosition, wxSize( -1,-1 ), 0|wxSIMPLE_BORDER ); m_filter_map_edit->SetMinSize( wxSize( 140,-1 ) ); m_filter_map_expression = new wxRegEx(m_filter_map_edit->GetValue(),wxRE_ICASE); m_filter_map_sizer->Add( m_filter_map_edit, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row3_sizer->Add( m_filter_map_sizer, 0, wxEXPAND, 5 ); wxBoxSizer* m_filter_only_map_sizer; m_filter_only_map_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_map_show = new wxCheckBox( this, PLAYBACK_FILTER_MAP_SHOW, _("Only maps I have"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); m_filter_map_show->SetValue(f_values.map_show); m_filter_map_show->SetMinSize( wxSize( 140,-1 ) ); m_filter_only_map_sizer->Add( m_filter_map_show, 0, wxEXPAND|wxALIGN_LEFT|wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row3_sizer->Add( m_filter_only_map_sizer, 0, wxEXPAND, 5 ); //// mod wxBoxSizer* m_filter_body_row4_sizer; m_filter_body_row4_sizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* m_filter_mod_sizer; m_filter_mod_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_mod_text = new wxStaticText( this, wxID_ANY, _("Game:"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); m_filter_mod_text->Wrap( -1 ); m_filter_mod_text->SetMinSize( wxSize( 90,-1 ) ); m_filter_mod_sizer->Add( m_filter_mod_text, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_filter_mod_edit = new wxTextCtrl( this, PLAYBACK_FILTER_MOD_EDIT, f_values.mod, wxDefaultPosition, wxSize( -1,-1 ), 0|wxSIMPLE_BORDER ); m_filter_mod_edit->SetMinSize( wxSize( 140,-1 ) ); m_filter_mod_expression = new wxRegEx(m_filter_mod_edit->GetValue(), wxRE_ICASE); m_filter_mod_sizer->Add( m_filter_mod_edit, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row4_sizer->Add( m_filter_mod_sizer, 0, wxEXPAND, 5 ); wxBoxSizer* m_filter_only_mod_sizer; m_filter_only_mod_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_mod_show = new wxCheckBox( this, PLAYBACK_FILTER_MOD_SHOW, _("Only games I have"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); m_filter_mod_show->SetValue(f_values.mod_show); m_filter_mod_show->SetMinSize( wxSize( 140,-1 ) ); m_filter_only_mod_sizer->Add( m_filter_mod_show, 0, wxALIGN_LEFT|wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); m_filter_body_row4_sizer->Add( m_filter_only_mod_sizer, 0, wxALIGN_LEFT|wxEXPAND, 5 ); ///// ///// filesize wxBoxSizer* m_filter_body_row5_sizer; m_filter_body_row5_sizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* m_filter_filesize_sizer; m_filter_filesize_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_filesize_text = new wxStaticText( this, wxID_ANY, _("Filesize in KB:"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); m_filter_filesize_text->Wrap( -1 ); m_filter_filesize_text->SetMinSize( wxSize( 90,-1 ) ); m_filter_filesize_sizer->Add( m_filter_filesize_text, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_filter_filesize_edit = new wxTextCtrl( this, PLAYBACK_FILTER_FILESIZE_EDIT, f_values.filesize, wxDefaultPosition, wxSize( -1,-1 ), 0|wxSIMPLE_BORDER ); m_filter_filesize_edit->SetMinSize( wxSize( 140,-1 ) ); m_filter_filesize_sizer->Add( m_filter_filesize_edit, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row5_sizer->Add( m_filter_filesize_sizer, 0, wxEXPAND, 5 ); //button here m_filter_filesize_button= new wxButton( this, PLAYBACK_FILTER_FILESIZE_BUTTON, f_values.filesize_mode, wxDefaultPosition, wxSize( 25, 25 ), 0 ); m_filter_body_row5_sizer->Add( m_filter_filesize_button, 0, wxALIGN_LEFT|wxALL|wxALIGN_CENTER_VERTICAL, 5 ); ///// ///// duration wxBoxSizer* m_filter_body_row6_sizer; m_filter_body_row6_sizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* m_filter_duration_sizer; m_filter_duration_sizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_duration_text = new wxStaticText( this, wxID_ANY, _("Duration (hh:mm:ss):"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); m_filter_duration_text->Wrap( -1 ); m_filter_duration_text->SetMinSize( wxSize( 90,-1 ) ); m_filter_duration_sizer->Add( m_filter_duration_text, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_filter_duration_edit = new wxTextCtrl( this, PLAYBACK_FILTER_DURATION_EDIT, f_values.duration, wxDefaultPosition, wxSize( -1,-1 ), 0|wxSIMPLE_BORDER ); m_filter_duration_edit->SetMinSize( wxSize( 140,-1 ) ); m_filter_duration_sizer->Add( m_filter_duration_edit, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_filter_body_row6_sizer->Add( m_filter_duration_sizer, 0, wxEXPAND, 5 ); m_filter_duration_button = new wxButton( this, PLAYBACK_FILTER_DURATION_BUTTON, f_values.duration_mode, wxDefaultPosition, wxSize( 25, 25 ), 0 ); m_filter_body_row6_sizer->Add( m_filter_duration_button, 0, wxALIGN_LEFT|wxALL|wxALIGN_CENTER_VERTICAL, 5 ); ///// //bring all sizers together wxBoxSizer* m_col1_sizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* m_col2_sizer = new wxBoxSizer( wxVERTICAL ); m_col1_sizer->Add( m_filter_body_row2_sizer, 1, wxEXPAND, 5 ); m_col1_sizer->Add( m_filter_body_row3_sizer, 1, wxEXPAND, 5 ); m_col1_sizer->Add( m_filter_body_row4_sizer, 1, wxEXPAND, 5 ); m_col2_sizer->Add( m_filter_body_row5_sizer, 1, wxEXPAND, 5 ); m_col2_sizer->Add( m_filter_body_row6_sizer, 1, wxEXPAND, 5 ); m_filter_sizer->Add( m_col1_sizer, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); m_filter_sizer->Add( m_col2_sizer, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); m_activ = false; m_filter_player_mode = _GetButtonMode(f_values.player_mode); m_filter_duration_mode = _GetButtonMode(f_values.duration_mode); m_filter_filesize_mode = _GetButtonMode(f_values.filesize_mode); m_filter_player_choice_value = m_filter_player_choice->GetSelection()-1; m_filter_body_sizer->Add( m_filter_sizer ); this->SetSizer( m_filter_body_sizer ); this->Layout(); m_filter_sizer->Fit( this ); delete m_filter_map_expression; m_filter_map_expression = new wxRegEx(m_filter_map_edit->GetValue(),wxRE_ICASE); delete m_filter_mod_expression; m_filter_mod_expression = new wxRegEx(m_filter_mod_edit->GetValue(),wxRE_ICASE); wxCommandEvent dummy; OnChange(dummy); } template typename PlaybackListFilter::m_button_mode PlaybackListFilter::_GetButtonMode(wxString sign) { if ( sign == _T("<") ) return m_smaller; if ( sign == _T(">") ) return m_bigger; return m_equal; } template wxString PlaybackListFilter::_GetButtonSign(m_button_mode value) { switch (value) { case m_equal : return _T("="); case m_smaller : return _T("<"); case m_bigger : default : return _T(">"); } } template typename PlaybackListFilter::m_button_mode PlaybackListFilter::_GetNextMode(m_button_mode value) { switch (value) { case m_equal : return m_smaller; case m_smaller : return m_bigger; case m_bigger : default : return m_equal; } } template void PlaybackListFilter::OnPlayerButton ( wxCommandEvent& event ) { m_filter_player_mode = _GetNextMode(m_filter_player_mode); m_filter_player_button->SetLabel( _GetButtonSign( m_filter_player_mode ) ); OnChange(event); } template void PlaybackListFilter::SetActiv( bool state ) { m_activ = state; if (m_parent_tab != 0) { m_parent_tab->UpdateList(); } } template bool PlaybackListFilter::_IntCompare(int a,int b,m_button_mode mode) { switch (mode) { case m_equal : return (a == b); case m_smaller : return (a < b); case m_bigger : return (a > b); default : return false; } } template bool PlaybackListFilter::FilterPlayback( const typename PlaybackListFilter::PlaybackType& playback ) { if (!m_activ) return true; const OfflineBattle& battle = playback.battle; //Player Check if ( (m_filter_player_choice_value != -1) && !_IntCompare( battle.GetNumUsers() - battle.GetSpectators() , m_filter_player_choice_value , m_filter_player_mode ) ) return false; //Only Maps i have Check if (m_filter_map_show->GetValue() && !battle.MapExists()) return false; //Only Mods i have Check if (m_filter_mod_show->GetValue() && !battle.ModExists()) return false; //Strings Plain Text & RegEx Check (Case insensitiv) //Map: if ( !battle.GetHostMapName().Upper().Contains( m_filter_map_edit->GetValue().Upper() ) && !m_filter_map_expression->Matches(battle.GetHostMapName()) ) return false; //Mod: if ( !battle.GetHostModName().Upper().Contains( m_filter_mod_edit->GetValue().Upper() ) && !battle.GetHostModName().Upper().Contains( m_filter_mod_edit->GetValue().Upper() ) && !m_filter_mod_expression->Matches(battle.GetHostModName()) ) return false; if ( (!m_filter_filesize_edit->GetValue().IsEmpty() ) && !_IntCompare( playback.size , 1024 * s2l( m_filter_filesize_edit->GetValue()) , m_filter_filesize_mode) ) return false; //duration if ( (!m_filter_duration_edit->GetValue().IsEmpty() ) && !_IntCompare( playback.duration , m_duration_value , m_filter_duration_mode) ) return false; return true; } template void PlaybackListFilter::OnChange ( wxCommandEvent& /*unused*/ ) { if (!m_activ) return; m_parent_tab->UpdateList(); } template void PlaybackListFilter::OnChangeMap ( wxCommandEvent& event ) { if ( m_filter_map_edit == NULL ) return; delete m_filter_map_expression; m_filter_map_expression = new wxRegEx(m_filter_map_edit->GetValue(),wxRE_ICASE); OnChange(event); } template void PlaybackListFilter::OnChangeMod ( wxCommandEvent& event ) { if ( m_filter_mod_edit == NULL ) return; delete m_filter_mod_expression; m_filter_mod_expression = new wxRegEx(m_filter_mod_edit->GetValue(),wxRE_ICASE); OnChange(event); } template void PlaybackListFilter::OnPlayerChange( wxCommandEvent& event ) { m_filter_player_choice_value = m_filter_player_choice->GetSelection()-1; OnChange(event); } template void PlaybackListFilter::OnChangeDuration(wxCommandEvent& event) { SetDurationValue(); OnChange(event); } template void PlaybackListFilter::OnChangeFilesize(wxCommandEvent& event) { OnChange(event); } template void PlaybackListFilter::OnDurationButton(wxCommandEvent& event) { m_filter_duration_mode = _GetNextMode(m_filter_duration_mode); m_filter_duration_button->SetLabel( _GetButtonSign( m_filter_duration_mode ) ); OnChange(event); } template void PlaybackListFilter::OnFilesizeButton(wxCommandEvent& event) { m_filter_filesize_mode = _GetNextMode(m_filter_filesize_mode); m_filter_filesize_button->SetLabel( _GetButtonSign( m_filter_filesize_mode ) ); OnChange(event); } template bool PlaybackListFilter::GetActiv() const { return m_activ; } template void PlaybackListFilter::SaveFilterValues() { PlaybackListFilterValues filtervalues; filtervalues.duration = m_filter_duration_edit->GetValue() ; filtervalues.map = m_filter_map_edit->GetValue(); filtervalues.map_show = m_filter_map_show->GetValue(); filtervalues.map = m_filter_map_edit->GetValue(); filtervalues.mod = m_filter_mod_edit->GetValue(); filtervalues.mod_show = m_filter_mod_show->GetValue(); filtervalues.player_mode = _GetButtonSign(m_filter_player_mode); filtervalues.player_num = wxFormat(_("%d") ) % m_filter_player_choice->GetSelection(); filtervalues.duration_mode = _GetButtonSign(m_filter_duration_mode); filtervalues.filesize = m_filter_filesize_edit->GetValue(); filtervalues.filesize_mode= _GetButtonSign(m_filter_filesize_mode); sett().SetReplayFilterValues(filtervalues); } template void PlaybackListFilter::SetDurationValue() { wxString dur = m_filter_duration_edit->GetValue(); const wxChar* mysep = _T(":"); int sep_count = dur.Replace(mysep,mysep); //i know, i know switch ( sep_count ) { default: break; case 0: m_duration_value = s2l( dur ); break; case 1: m_duration_value = s2l( dur.AfterFirst(*mysep) ) + ( s2l( dur.BeforeFirst(*mysep) ) * 60 ); break; case 2: m_duration_value = s2l( dur.AfterLast(*mysep) ) + ( s2l( dur.AfterFirst(*mysep).BeforeFirst(*mysep) ) * 60 ) + ( s2l( dur.BeforeFirst(*mysep) ) * 3600 ); break; } } springlobby-0.169/src/playback/playbackfilter.h0000600000176000000410000000775412105760300023156 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_PLAYBACKFILTER_H_INCLUDED #define SPRINGLOBBY_PLAYBACKFILTER_H_INCLUDED #include /////////////////////////////////////////////////////////////////////////// class ReplayTab; class wxToggleButton; class wxCheckBox; class wxStaticText; class wxTextCtrl; class wxChoice; class wxButton; class wxRegEx; class wxStaticText; /** \brief The panel contained in BattleListTab used to filter for diff info of battles * \todo DOCMEMORE */ template class PlaybackListFilter : public wxPanel { protected: typedef typename PlaybackTabType::PlaybackType PlaybackType; public: PlaybackListFilter ( wxWindow* parent, wxWindowID id, PlaybackTabType* parentTab, const wxPoint& pos, const wxSize& size, long style ); void OnPlayerButton ( wxCommandEvent& event ); void OnFilesizeButton ( wxCommandEvent& event ); void OnDurationButton ( wxCommandEvent& event ); void OnActivate ( wxCommandEvent& event ); void SetActiv ( bool state ); void OnChange ( wxCommandEvent& event ); void OnChangeMap ( wxCommandEvent& event ); void OnChangeMod ( wxCommandEvent& event ); void OnChangeFilesize ( wxCommandEvent& event ); void OnChangeDuration ( wxCommandEvent& event ); void OnPlayerChange ( wxCommandEvent& event ); bool FilterPlayback( const PlaybackType& playback ); bool GetActiv() const; void SetFilterHighlighted( bool state ); void SaveFilterValues(); protected: enum m_button_mode {m_equal,m_bigger,m_smaller}; wxString _GetButtonSign(m_button_mode value); m_button_mode _GetNextMode(m_button_mode value); m_button_mode _GetButtonMode(wxString sign); bool _IntCompare(int a,int b,m_button_mode mode); bool m_activ; PlaybackTabType* m_parent_tab; #if wxUSE_TOGGLEBTN wxToggleButton* m_filter_show; #else wxCheckBox* m_filter_show; #endif wxStaticText* m_filter_text; wxCheckBox* m_filter_activ; //Player wxStaticText* m_filter_player_text; wxButton* m_filter_player_button; m_button_mode m_filter_player_mode; wxChoice* m_filter_player_choice; int m_filter_player_choice_value; //Filesize wxStaticText* m_filter_filesize_text; wxButton* m_filter_filesize_button; m_button_mode m_filter_filesize_mode; wxTextCtrl* m_filter_filesize_edit; //Duration wxStaticText* m_filter_duration_text; wxButton* m_filter_duration_button; m_button_mode m_filter_duration_mode; wxTextCtrl* m_filter_duration_edit; long m_duration_value; void SetDurationValue(); //Map wxStaticText* m_filter_map_text; wxTextCtrl* m_filter_map_edit; wxCheckBox* m_filter_map_show; wxRegEx* m_filter_map_expression; //Mod wxStaticText* m_filter_mod_text; wxTextCtrl* m_filter_mod_edit; wxCheckBox* m_filter_mod_show; wxRegEx* m_filter_mod_expression; DECLARE_EVENT_TABLE() }; enum { PLAYBACK_FILTER_MAP_EDIT, PLAYBACK_FILTER_MOD_EDIT, PLAYBACK_FILTER_FILESIZE_EDIT, PLAYBACK_FILTER_DURATION_EDIT, PLAYBACK_FILTER_PLAYER_CHOICE, PLAYBACK_FILTER_MAP_SHOW, PLAYBACK_FILTER_MOD_SHOW, PLAYBACK_FILTER_PLAYER_BUTTON, PLAYBACK_FILTER_DURATION_BUTTON, PLAYBACK_FILTER_FILESIZE_BUTTON }; #include "playbackfilter.cpp" #endif // SPRINGLOBBY_PLAYBACKFILTER_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/playback/playbackfiltervalues.h0000600000176000000410000000225112105760300024361 0ustar buildbotwww-data00000000000000#ifndef PlaybackListFilterValues_H_INCLUDED #define PlaybackListFilterValues_H_INCLUDED #include struct PlaybackListFilterValues { // checkboxes bool map_show; bool mod_show; //text fields wxString map; wxString mod; wxString filesize; wxString duration; //choices wxString player_num; //modifiers wxString player_mode; wxString filesize_mode; wxString duration_mode; }; #endif // PlaybackListFilterValues_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/playback/playbacklist.cpp0000600000176000000410000000374612105760300023174 0ustar buildbotwww-data00000000000000 #include "../tdfcontainer.h" #include "../offlinebattle.h" #include "../globalsmanager.h" template ListImp& playbacklist() { static LineInfo m( AT ); static GlobalObjectHolder > m_replay_list( m ); return m_replay_list; } template typename PlaybackList::PlaybackType& PlaybackList::AddPlayback( const size_t index ) { m_replays[index] = PlaybackType( index ); return m_replays[index]; } template void PlaybackList::RemovePlayback( playback_id_t const& id ) { m_replays.erase(id); } template typename PlaybackList::playback_map_t::size_type PlaybackList::GetNumPlaybacks() const { return m_replays.size(); } template typename PlaybackList::PlaybackType& PlaybackList::GetPlaybackById( playback_id_t const& id ) { //TODO catch playback_iter_t b = m_replays.find(id); if (b == m_replays.end()) throw std::runtime_error("PlaybackList_Iter::GetPlayback(): no such replay"); return b->second; } template bool PlaybackList::PlaybackExists( playback_id_t const& id ) const { return m_replays.find(id) != m_replays.end(); } template bool PlaybackList::DeletePlayback( playback_id_t const& id ) { PlaybackType rep = m_replays[id]; if ( wxRemoveFile( rep.Filename ) ) { //m_filenames.resize(std::remove(m_filenames.begin(), m_filenames.end(), rep.Filename)-m_filenames.begin()); m_replays.erase(id); return true; } return false; } template void PlaybackList::RemoveAll() { // m_filenames.clear(); m_replays.clear(); m_fails = 0; } template const typename PlaybackList::playback_map_t& PlaybackList::GetPlaybacksMap() const { return m_replays; } springlobby-0.169/src/playback/playbacklist.h0000600000176000000410000000316512105760300022634 0ustar buildbotwww-data00000000000000#ifndef SL_PLAYBACKLIST_H_INCLUDED #define SL_PLAYBACKLIST_H_INCLUDED #include #include class wxArrayString; template class PlaybackList : public wxEvtHandler { public: typedef PlaybackImp PlaybackType; typedef unsigned int playback_id_t; //! @brief mapping from playback id number to playback object typedef std::map playback_map_t; //! @brief iterator for playback map typedef typename playback_map_t::iterator playback_iter_t; //! @brief const iterator for playback map typedef typename playback_map_t::const_iterator playback_const_iter_t; virtual void LoadPlaybacks( const wxArrayString& filenames ) = 0; //!loads replays between two indices // virtual void LoadPlaybacks( const unsigned int from, const unsigned int to) = 0; PlaybackType& AddPlayback( const size_t index ); void AddPlayback( PlaybackType* replay ); void RemovePlayback( playback_id_t const& id ); PlaybackType &GetPlaybackById( playback_id_t const& id ); ///Playback& GetPlayback( int const index ) ; bool PlaybackExists( playback_id_t const& id ) const; bool DeletePlayback( playback_id_t const& id ); typename playback_map_t::size_type GetNumPlaybacks() const; void RemoveAll(); const playback_map_t& GetPlaybacksMap() const; protected: PlaybackList() : m_fails(0) {} playback_map_t m_replays; unsigned long m_fails; }; template ListImp& playbacklist(); #include "playbacklist.cpp" #endif // SL_PLAYBACKLIST_H_INCLUDED springlobby-0.169/src/playback/playbacklistctrl.cpp0000600000176000000410000002347112105760300024056 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include #include #include #include #include "playbackstructs.h" //#include "../utils.h" #include "../user.h" #include "../iconimagelist.h" #include "../uiutils.h" #include "../ui.h" BEGIN_EVENT_TABLE_TEMPLATE1(PlaybackListCtrl, PlaybackListCtrl::BaseType, PlaybackType ) EVT_LIST_ITEM_RIGHT_CLICK( RLIST_LIST, PlaybackListCtrl::OnListRightClick ) EVT_MENU ( RLIST_DLMAP, PlaybackListCtrl::OnDLMap ) EVT_MENU ( RLIST_DLMOD, PlaybackListCtrl::OnDLMod ) EVT_LIST_COL_CLICK ( RLIST_LIST, ParentType::OnColClick ) EVT_KEY_DOWN ( PlaybackListCtrl::OnChar ) END_EVENT_TABLE() template SortOrder CustomVirtListCtrl::m_sortorder = SortOrder(); template PlaybackListCtrl::PlaybackListCtrl( wxWindow* parent ): PlaybackListCtrl::BaseType(parent, RLIST_LIST, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER | wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_ALIGN_LEFT, _T("PlaybackListCtrl"), 4, &PlaybackListCtrl::CompareOneCrit ) { #ifdef __WXMSW__ const int hd = wxLIST_AUTOSIZE_USEHEADER; const int widths[8] = {80,140,141,hd,160,hd,70,180}; #else const int widths[8] = {80,140,141,50,160,50,70,180}; #endif AddColumn( 0, widths[0], _("Date"), _("Date of recording") ); AddColumn( 1, widths[1], _("Game"), _("Game name") ); AddColumn( 2, widths[2], _("Map"), _("Mapname") ); AddColumn( 3, widths[3], _("Players"), _("Number of players") ); AddColumn( 4, widths[4], _("Duration"), _T("Duration") ); AddColumn( 5, widths[5], _("Spring Version"), _("Spring Version") ); AddColumn( 6, widths[6], _("Filesize"), _("Filesize in kilobyte") ); AddColumn( 7, widths[7], _("File"), _T("Filename") ); if ( m_sortorder.size() == 0 ) { m_sortorder[0].col = 0; m_sortorder[0].direction = true; m_sortorder[1].col = 1; m_sortorder[1].direction = true; m_sortorder[2].col = 2; m_sortorder[2].direction = true; m_sortorder[3].col = 3; m_sortorder[3].direction = true; Sort( ); } m_popup = new wxMenu( _T("") ); // &m enables shortcout "alt + m" and underlines m m_popup->Append( RLIST_DLMAP, _("Download &map") ); m_popup->Append( RLIST_DLMOD, _("Download m&od") ); } template PlaybackListCtrl::~PlaybackListCtrl() { delete m_popup; } template void PlaybackListCtrl::OnListRightClick( wxListEvent& /*unused*/ ) { PopupMenu( m_popup ); } template void PlaybackListCtrl::AddPlayback( const PlaybackType& replay ) { if ( AddItem( &replay ) ) return; wxLogWarning( _T("Replay already in list.") ); } template void PlaybackListCtrl::RemovePlayback( const PlaybackType& replay ) { if ( RemoveItem( &replay) ) return; wxLogError( _T("Didn't find the replay to remove.") ); } template void PlaybackListCtrl::OnDLMap( wxCommandEvent& /*unused*/ ) { if ( m_selected_index > 0 && (long)m_data.size() > m_selected_index ) { OfflineBattle battle = m_data[m_selected_index]->battle; ui().DownloadMap( battle.GetHostMapHash(), battle.GetHostMapName() ); } } template void PlaybackListCtrl::OnDLMod( wxCommandEvent& /*unused*/ ) { if ( m_selected_index > 0 && (long)m_data.size() > m_selected_index ) { OfflineBattle battle = m_data[m_selected_index]->battle; ui().DownloadMod( battle.GetHostModHash(), battle.GetHostModName() ); } } template void PlaybackListCtrl::Sort() { if ( m_data.size() > 0 ) { SaveSelection(); SLInsertionSort( m_data, m_comparator ); RestoreSelection(); } } template int PlaybackListCtrl::CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const { switch ( col ) { case 0: return dir * compareSimple( u1->date, u2->date ); case 1: return dir * u1->battle.GetHostModName().CmpNoCase( u2->battle.GetHostModName() ); case 2: return dir * u1->battle.GetHostMapName().CmpNoCase( u2->battle.GetHostMapName() ); case 3: return dir * compareSimple( u1->battle.GetNumUsers() - u1->battle.GetSpectators(), u2->battle.GetNumUsers() - u2->battle.GetSpectators() ); case 4: return dir * compareSimple( u1->duration,u2->duration ); case 5: return dir * u1->SpringVersion.CmpNoCase( u2->SpringVersion ) ; case 6: return dir * compareSimple( u1->size, u2->size ) ; case 7: return dir * u1->Filename.AfterLast( wxFileName::GetPathSeparator() ).CmpNoCase( u2->Filename.AfterLast( wxFileName::GetPathSeparator() ) ); default: return 0; } } template void PlaybackListCtrl::SetTipWindowText( const long item_hit, const wxPoint& position) { if ( item_hit < 0 || item_hit >= (long)m_data.size() ) return; const PlaybackType& replay = *GetDataFromIndex( item_hit ); int column = getColumnFromPosition( position ); if (column > (int)m_colinfovec.size() || column < 0) { m_tiptext = _T(""); } else { switch (column) { case 0: // date m_tiptext = replay.date_string; break; case 1: // modname m_tiptext = replay.ModName; break; case 2: // mapname m_tiptext = replay.MapName; break; case 3: //playernum m_tiptext = replay.ModName; break; case 4: // spring version m_tiptext = replay.SpringVersion; break; case 5: // filenam m_tiptext = replay.Filename; break; default: m_tiptext = _T(""); break; } } } template wxString PlaybackListCtrl::GetItemText(long item, long column) const { if ( m_data[item] == NULL ) return wxEmptyString; const PlaybackType& replay = *m_data[item]; wxString duration = wxFormat(_T("%02ld:%02ld:%02ld") ) % (replay.duration / 3600) % ((replay.duration%3600)/60) % ((replay.duration%60)/60 ) ; switch ( column ) { case 0: return replay.date_string; case 1: return replay.battle.GetHostModName(); case 2: return replay.battle.GetHostMapName(); case 3: return wxFormat(_T("%d") ) % ( replay.battle.GetNumUsers() - replay.battle.GetSpectators() ); case 4: return duration; case 5: return replay.SpringVersion; case 6: return wxFormat( _T("%d KB") ) % ( replay.size/1024 ); case 7: return replay.Filename.AfterLast( wxFileName::GetPathSeparator() ); default: return wxEmptyString; } } template int PlaybackListCtrl::GetItemImage(long item) const { if ( m_data[item] == NULL ) return -1; return -1;//icons().GetBattleStatusIcon( *m_data[item] ); } template int PlaybackListCtrl::GetItemColumnImage(long /*item*/, long /*column*/) const { //nothing's been done here atm return -1; // if ( m_data[item] == NULL ) // return -1; // // const PlaybackType& replay = *m_data[item]; // // switch ( column ) { // default: return -1; // } } template wxListItemAttr* PlaybackListCtrl::GetItemAttr(long /*unused*/) const { //not neded atm // if ( item < m_data.size() && item > -1 ) { // const Replay& replay = *m_data[item]; // } return NULL; } template void PlaybackListCtrl::RemovePlayback( const int index ) { if ( index != -1 && index < long(m_data.size()) ) { m_data.erase( m_data.begin() + index ); SetItemCount( m_data.size() ); RefreshVisibleItems( ); return; } wxLogError( _T("Didn't find the replay to remove.") ); } template int PlaybackListCtrl::GetIndexFromData( const DataType& data ) const { DataCIter it = m_data.begin(); for ( int i = 0; it != m_data.end(); ++it, ++i ) { if ( *it != 0 && data->Equals( *(*it) ) ) return i; } wxLogError( _T("didn't find the battle.") ); return -1; } template void PlaybackListCtrl::OnChar(wxKeyEvent & event) { const int keyCode = event.GetKeyCode(); if ( keyCode == WXK_DELETE ) RemovePlayback( ParentType::GetSelectedIndex() ); else event.Skip(); } /////!TODO get rid of this in favor of the functionality in base class //template //void PlaybackListCtrl::OnColClick( wxListEvent& event ) //{ // int click_col=event.GetColumn(); // wxLogMessage(_T("click col: %d"),click_col); // if ( click_col == -1 ) return; // wxListItem col; // GetColumn( m_sortorder[0].col, col ); // col.SetImage( icons().ICON_NONE ); // SetColumn( m_sortorder[0].col, col ); // // if(click_col==m_sortorder[0].col){ // m_sortorder[0].direction *= -1; // } // else{ // int order_remove=3; // for(int i=0;i<4;++i){ // if(m_sortorder[i].col==click_col){ // order_remove=i; // } // } // for(int i=order_remove;i>0;--i){ // m_sortorder[i]=m_sortorder[i-1]; // } // m_sortorder[0].col=click_col; // m_sortorder[0].direction=true; // } // // for(int i=0;i<4;++i){ // wxLogMessage(_T("sorting level%d by %d direction %d"),i,m_sortorder[i].col,m_sortorder[i].direction); // } // // GetColumn( m_sortorder[0].col, col ); // col.SetImage( ( m_sortorder[0].direction > 0 )?icons().ICON_UP:icons().ICON_DOWN ); // SetColumn( m_sortorder[0].col, col ); // // SortList( true ); //} springlobby-0.169/src/playback/playbacklistctrl.h0000600000176000000410000000673012105760300023522 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_PlaybackListCtrl_H_INCLUDED #define SPRINGLOBBY_PlaybackListCtrl_H_INCLUDED #include "../customvirtlistctrl.h" class wxMenu; class wxListEvent; class wxCommandEvent; template class PlaybackListCtrl : public CustomVirtListCtrl< const PlaybackImp*, PlaybackListCtrl > { protected: typedef PlaybackListCtrl ThisType; typedef CustomVirtListCtrl< const PlaybackImp*,PlaybackListCtrl > ParentType; typedef typename ParentType::DataType DataType; typedef PlaybackImp PlaybackType; using ParentType::AddColumn; using ParentType::m_sortorder; using ParentType::PopupMenu; using ParentType::m_data; using ParentType::m_selected_data; using ParentType::m_selected_index; using ParentType::SaveSelection; using ParentType::RestoreSelection; using ParentType::HitTest; using ParentType::m_comparator; using ParentType::m_tiptimer; using ParentType::m_tiptext; using ParentType::m_colinfovec; using ParentType::m_tooltip_delay; using ParentType::m_tooltip_duration; using ParentType::RemoveItem; using ParentType::AddItem; using ParentType::compareSimple; using ParentType::SetItemCount; // using ParentType::DataVector; typedef typename ParentType::DataVector::const_iterator DataCIter; //! TODO (koshi) i'd be mighty thankful if some could explain to me why the import with using ParentType::DataCIter doesn't work here; using ParentType::getColumnFromPosition; public: PlaybackListCtrl( wxWindow* parent ); ~PlaybackListCtrl(); void AddPlayback( const PlaybackType& replay ); void RemovePlayback( const PlaybackType& replay ); void RemovePlayback( const int index ); void OnListRightClick( wxListEvent& event ); void OnDLMap( wxCommandEvent& event ); void OnDLMod( wxCommandEvent& event ); void OnColClick( wxListEvent& event ); virtual void SetTipWindowText( const long item_hit, const wxPoint& position); virtual void HighlightItem( long /*unused*/ ){} //these are overloaded to use list in virtual style wxString GetItemText(long item, long column) const; int GetItemImage(long item) const; int GetItemColumnImage(long item, long column) const; wxListItemAttr * GetItemAttr(long item) const; int GetIndexFromData( const DataType& data ) const; using ParentType::RefreshVisibleItems; using ParentType::GetDataFromIndex; protected: int CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const; void OnChar(wxKeyEvent & event); virtual void Sort(); wxMenu* m_popup; DECLARE_EVENT_TABLE() }; enum { RLIST_LIST, RLIST_DLMOD, RLIST_DLMAP }; #include "playbacklistctrl.cpp" #endif // SPRINGLOBBY_PlaybackListCtrl_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/playback/playbackstructs.h0000600000176000000410000000215512105760300023366 0ustar buildbotwww-data00000000000000#ifndef PLAYBACKSTRUCTS_H_INCLUDED #define PLAYBACKSTRUCTS_H_INCLUDED #include "../offlinebattle.h" struct Replay { int id; int playernum; bool can_watch; int duration; //in seconds int size; //in bytes wxString MapName; wxString ModName; wxString SpringVersion; wxString Filename; time_t date; wxString date_string; OfflineBattle battle; Replay( const size_t idx = 0):id(idx),playernum(0),can_watch(false),duration(0),size(0){} bool Equals( const Replay& other ) const { return Filename == other.Filename; } }; struct Savegame { int id; int playernum; bool can_watch; int duration; //in seconds unsigned long size; //in bytes wxString MapName; wxString ModName; wxString SpringVersion; wxString Filename; time_t date; wxString date_string; OfflineBattle battle; Savegame(const size_t idx = 0):id(idx),playernum(0),can_watch(false),duration(0),size(0){} bool Equals( const Savegame& other ) const { return Filename == other.Filename; } }; #endif // PLAYBACKSTRUCTS_H_INCLUDED springlobby-0.169/src/playback/playbacktab.cpp0000600000176000000410000003730512105760300022765 0ustar buildbotwww-data00000000000000#include #include #include #include #include #include #include #include #include #include #if wxUSE_TOGGLEBTN #include #endif #include "playbacklistctrl.h" #include "replaylist.h" #include "playbackthread.h" #include "../ui.h" #include "../chatpanel.h" #include "../utils/debug.h" #include "../uiutils.h" #include "../settings.h" #include "../springunitsync.h" #include "../mapctrl.h" #include #include "playbackfilter.h" #include "../iconimagelist.h" #include "../utils/customdialogs.h" BEGIN_EVENT_TABLE_TEMPLATE1( PlaybackTab, wxPanel, PlaybackTraits ) EVT_BUTTON ( PLAYBACK_WATCH , PlaybackTab::OnWatch ) EVT_BUTTON ( PLAYBACK_RELOAD , PlaybackTab::OnReload ) EVT_BUTTON ( PLAYBACK_DELETE , PlaybackTab::OnDelete ) EVT_LIST_ITEM_SELECTED ( RLIST_LIST , PlaybackTab::OnSelect ) // this doesn't get triggered (?) EVT_LIST_ITEM_DESELECTED( wxID_ANY , PlaybackTab::OnDeselect ) EVT_CHECKBOX ( PLAYBACK_LIST_FILTER_ACTIV , PlaybackTab::OnFilterActiv ) EVT_COMMAND ( wxID_ANY, PlaybacksLoadedEvt , PlaybackTab::AddAllPlaybacks ) #if wxUSE_TOGGLEBTN EVT_TOGGLEBUTTON ( PLAYBACK_LIST_FILTER_BUTTON , PlaybackTab::OnFilter ) #else EVT_CHECKBOX ( PLAYBACK_LIST_FILTER_BUTTON , PlaybackTab::OnFilter ) #endif END_EVENT_TABLE() template < class PlaybackTraits > PlaybackTab::PlaybackTab( wxWindow* parent ) : wxScrolledWindow( parent, -1 ), m_replay_loader ( 0 ), OnUsync_reload( this, &GetGlobalEventSender( GlobalEvents::OnUnitsyncReloaded ) ) { wxLogMessage( _T( "PlaybackTab::PlaybackTab()" ) ); m_replay_loader = new LoaderType( this ); wxBoxSizer* m_main_sizer; m_main_sizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* m_filter_sizer; m_filter_sizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* m_replaylist_sizer; m_replaylist_sizer = new wxBoxSizer( wxVERTICAL ); m_replay_listctrl = new ListCtrlType( this ); m_replaylist_sizer->Add( m_replay_listctrl, 1, wxALL | wxEXPAND, 5 ); m_main_sizer->Add( m_replaylist_sizer, 1, wxEXPAND, 5 );; wxBoxSizer* m_info_sizer; m_info_sizer = new wxBoxSizer( wxHORIZONTAL ); m_minimap = new MapCtrl( this, 100, 0, true, true, false, false ); m_info_sizer->Add( m_minimap, 0, wxALL, 5 ); wxFlexGridSizer* m_data_sizer; m_data_sizer = new wxFlexGridSizer( 4, 2, 0, 0 ); m_map_lbl = new wxStaticText( this, wxID_ANY, _( "Map:" ), wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_map_lbl, 1, wxALL | wxEXPAND, 5 ); m_map_text = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_map_text, 1, wxALL | wxEXPAND, 5 ); m_mod_lbl = new wxStaticText( this, wxID_ANY, _( "Game:" ), wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_mod_lbl, 1, wxALL | wxEXPAND, 5 ); m_mod_text = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_mod_text, 1, wxALL | wxEXPAND, 5 ); m_players_lbl = new wxStaticText( this, wxID_ANY, _( "Players:" ), wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_players_lbl, 1, wxALL | wxEXPAND, 5 ); m_players_text = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_data_sizer->Add( m_players_text, 1, wxALL | wxEXPAND, 5 ); m_info_sizer->Add( m_data_sizer, 1, wxEXPAND | wxALL, 0 ); m_players = new BattleroomListCtrl( this, 0, true, false ); m_info_sizer->Add( m_players , 2, wxALL | wxEXPAND, 0 ); m_main_sizer->Add( m_info_sizer, 0, wxEXPAND, 5 ); m_filter = new PlaybackListFilter( this , wxID_ANY, this , wxDefaultPosition, wxSize( -1, -1 ), wxEXPAND ); m_filter_sizer->Add( m_filter, 0, wxEXPAND, 5 ); m_main_sizer->Add( m_filter_sizer, 0, wxEXPAND, 5 ); m_buttons_sep = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); m_main_sizer->Add( m_buttons_sep, 0, wxALL | wxEXPAND, 5 ); wxBoxSizer* m_buttons_sizer; m_buttons_sizer = new wxBoxSizer( wxHORIZONTAL ); #if wxUSE_TOGGLEBTN m_filter_show = new wxToggleButton( this, PLAYBACK_LIST_FILTER_BUTTON , wxT( " Filter " ), wxDefaultPosition , wxSize( -1, 28 ), 0 ); #else m_filter_show = new wxCheckBox( this, PLAYBACK_LIST_FILTER_BUTTON , wxT( " Filter " ), wxDefaultPosition , wxSize( -1, 28 ), 0 ); #endif m_buttons_sizer->Add( m_filter_show, 0, 0, 5 ); m_filter_activ = new wxCheckBox( this, PLAYBACK_LIST_FILTER_ACTIV , wxT( "Activated" ), wxDefaultPosition, wxDefaultSize, 0 ); m_buttons_sizer->Add( m_filter_activ, 1, wxALL | wxEXPAND, 5 ); m_buttons_sizer->Add( 0, 0, 1, wxEXPAND, 0 ); m_watch_btn = new wxButton( this, PLAYBACK_WATCH, PlaybackTraits::IsReplayType ? _( "Watch" ) : _( "Load" ), wxDefaultPosition, wxSize( -1, 28 ), 0 ); m_buttons_sizer->Add( m_watch_btn, 0, wxBOTTOM | wxLEFT | wxRIGHT, 5 ); m_delete_btn = new wxButton( this, PLAYBACK_DELETE, _( "Delete" ), wxDefaultPosition, wxSize( -1, 28 ), 0 ); m_buttons_sizer->Add( m_delete_btn, 0, wxBOTTOM | wxRIGHT, 5 ); m_reload_btn = new wxButton( this, PLAYBACK_RELOAD, _( "Reload list" ), wxDefaultPosition, wxSize( -1, 28 ), 0 ); m_buttons_sizer->Add( m_reload_btn, 0, wxBOTTOM | wxRIGHT, 5 ); m_main_sizer->Add( m_buttons_sizer, 0, wxEXPAND, 5 ); m_filter->Hide(); SetSizer( m_main_sizer ); ReloadList(); //none selected --> shouldn't watch/delete that Deselect(); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); Layout(); } template < class PlaybackTraits > PlaybackTab::~PlaybackTab() { m_minimap->SetBattle( NULL ); if ( m_filter != 0 ) m_filter->SaveFilterValues(); wxLogDebugFunc( _T( "" ) ); } template < class PlaybackTraits > void PlaybackTab::AddAllPlaybacks( wxCommandEvent& /*unused*/ ) { const typename ListType::playback_map_t& replays = playbacklist().GetPlaybacksMap(); for ( typename ListType::playback_const_iter_t i = replays.begin();i != replays.end();++i ) { AddPlayback( i->second ); } m_replay_listctrl->SortList( true ); } template < class PlaybackTraits > void PlaybackTab::AddPlayback( const PlaybackType& replay ) { if ( m_filter->GetActiv() && !m_filter->FilterPlayback( replay ) ) { return; } m_replay_listctrl->AddPlayback( replay ); } template < class PlaybackTraits > void PlaybackTab::RemovePlayback( const PlaybackType& replay ) { int index = m_replay_listctrl->GetIndexFromData( &replay ); if ( index == -1 ) return; if ( index == m_replay_listctrl->GetSelectedIndex() ) Deselect(); m_replay_listctrl->RemovePlayback( replay ); } template < class PlaybackTraits > void PlaybackTab::RemovePlayback( const int index ) { if ( index == -1 ) return; if ( index == m_replay_listctrl->GetSelectedIndex() ) Deselect(); m_replay_listctrl->RemovePlayback( index ); } template < class PlaybackTraits > void PlaybackTab::UpdatePlayback( const PlaybackType& replay ) { if ( m_filter->GetActiv() && !m_filter->FilterPlayback( replay ) ) { RemovePlayback( replay ); return; } int index = m_replay_listctrl->GetIndexFromData( &replay ); if ( index != -1 ) m_replay_listctrl->RefreshItem( index ); else AddPlayback( replay ); } template < class PlaybackTraits > void PlaybackTab::RemoveAllPlaybacks() { m_replay_listctrl->Clear(); //shouldn't list be cleared too here? (koshi) } template < class PlaybackTraits > void PlaybackTab::UpdateList() { const typename ListType::playback_map_t& replays = playbacklist().GetPlaybacksMap(); for ( typename ListType::playback_const_iter_t i = replays.begin(); i != replays.end(); ++i ) { UpdatePlayback( i->second ); } m_replay_listctrl->RefreshVisibleItems(); } template < class PlaybackTraits > void PlaybackTab::SetFilterActiv( bool activ ) { m_filter->SetActiv( activ ); m_filter_activ->SetValue( activ ); } template < class PlaybackTraits > void PlaybackTab::OnFilter( wxCommandEvent& /*unused*/ ) { if ( m_filter_show->GetValue() ) { m_filter->Show( ); this->Layout(); } else { m_filter->Hide( ); this->Layout(); } } template < class PlaybackTraits > void PlaybackTab::OnWatch( wxCommandEvent& /*unused*/ ) { if ( m_replay_listctrl->GetSelectedIndex() != -1 ) { int m_sel_replay_id = m_replay_listctrl->GetSelectedData()->id; wxString type = PlaybackTraits::IsReplayType ? _( "replay" ) : _( "savegame" ) ; wxLogMessage( _T( "Watching %s %d " ), type.c_str(), m_sel_replay_id ); try { PlaybackType& rep = playbacklist().GetPlaybackById( m_sel_replay_id ); std::map versionlist = sett().GetSpringVersionList(); if ( versionlist.empty()) { wxLogWarning( _T( "can't get spring version from any unitsync" ) ); customMessageBox( SL_MAIN_ICON, _( "Couldn't get your spring versions from any unitsync library." ), _( "Spring error" ), wxICON_EXCLAMATION | wxOK ); AskForceWatch( rep ); return; } bool versionfound = false; for ( std::map::const_iterator itor = versionlist.begin(); itor != versionlist.end(); ++itor ) { if ( itor->second == rep.SpringVersion ) { if ( sett().GetCurrentUsedSpringIndex() != itor->first ) { wxLogMessage( _T( "%s requires version: %s, switching to profile: %s" ), type.c_str(), rep.SpringVersion.c_str(), itor->first.c_str() ); sett().SetUsedSpringIndex( itor->first ); usync().AddReloadEvent(); // request an unitsync reload } versionfound = true; } } if ( !ReplayTraits::IsReplayType ) versionfound = true; // quick hack to bypass spring version check if ( !versionfound ) { wxString message = wxFormat( _( "No compatible installed spring version has been found, this %s requires version: %s\n" ) ) % type% rep.SpringVersion; message << _( "Your current installed versions are:" ); for ( std::map::const_iterator itor = versionlist.begin(); itor != versionlist.end(); ++itor ) message << _T( " " ) << itor->second; customMessageBox( SL_MAIN_ICON, message, _( "Spring error" ), wxICON_EXCLAMATION | wxOK ); wxLogWarning ( _T( "no spring version supported by this replay found" ) ); AskForceWatch( rep ); return; } rep.battle.GetMe().SetNick( usync().GetDefaultNick() ); bool watchable = rep.battle.MapExists() && rep.battle.ModExists(); if ( watchable ) rep.battle.StartSpring(); else { wxString downloadProc = _( "Should i try to download it for you?\nYou can see the progress in the \"Download Manager\" tab." ); OfflineBattle& battle = rep.battle; if ( !battle.ModExists() ) { if ( customMessageBox( SL_MAIN_ICON, _( "You need to download the game before you can watch this replay.\n\n" ) + downloadProc, _( "Game not available" ), wxYES_NO | wxICON_QUESTION ) == wxYES ) { wxString modhash = battle.GetHostModHash(); wxString modname = battle.GetHostModName(); ui().DownloadMod ( modhash, modname ); } else { AskForceWatch( rep ); } return; } if ( !battle.MapExists() ) { if ( customMessageBox( SL_MAIN_ICON, _( " I couldn't find the map to be able to watch this replay\nThis can be caused by tasclient writing broken map hash value\nIf you're sure you have the map, press no\nYou need to download the map to be able to watch this replay.\n\n" ) + downloadProc, _( "Map not available" ), wxYES_NO | wxICON_QUESTION ) == wxYES ) { wxString maphash = battle.GetHostMapHash(); wxString mapname = battle.GetHostMapName(); ui().DownloadMap ( maphash, mapname ); } else { AskForceWatch( rep ); } } } } catch ( std::runtime_error ) { return; } } else { Deselected(); } } template < class PlaybackTraits > void PlaybackTab::AskForceWatch( typename PlaybackTab::PlaybackType& rep ) const { if ( customMessageBox( SL_MAIN_ICON, _( "I don't think you will be able to watch this replay.\nTry anyways? (MIGHT CRASH!)" ) , _( "Invalid replay" ), wxYES_NO | wxICON_QUESTION ) == wxYES ) { rep.battle.StartSpring(); } } template < class PlaybackTraits > void PlaybackTab::OnDelete( wxCommandEvent& /*unused*/ ) { int sel_index = m_replay_listctrl->GetSelectedIndex(); if ( sel_index >= 0 ) { try { const PlaybackType& rep = *m_replay_listctrl->GetSelectedData(); int m_sel_replay_id = rep.id; int index = m_replay_listctrl->GetIndexFromData( &rep ); wxLogMessage( _T( "Deleting replay %d " ), m_sel_replay_id ); wxString fn = rep.Filename; if ( !playbacklist().DeletePlayback( m_sel_replay_id ) ) customMessageBoxNoModal( SL_MAIN_ICON, _( "Could not delete Replay: " ) + fn, _( "Error" ) ); else { RemovePlayback( index ); // Deselect is called in there too } } catch ( std::runtime_error ) { return; } } else { Deselected(); } } template < class PlaybackTraits > void PlaybackTab::OnFilterActiv( wxCommandEvent& /*unused*/ ) { m_filter->SetActiv( m_filter_activ->GetValue() ); } template < class PlaybackTraits > void PlaybackTab::OnSelect( wxListEvent& event ) { wxLogDebugFunc( _T( "" ) ); if ( event.GetIndex() == -1 ) { Deselect(); } else { try { m_watch_btn->Enable( true ); m_delete_btn->Enable( true ); int index = event.GetIndex(); m_replay_listctrl->SetSelectedIndex( index ); //this might seem a bit backwards, but it's currently the only way that doesn't involve casting away constness int m_sel_replay_id = m_replay_listctrl->GetDataFromIndex( index )->id; PlaybackType& rep = playbacklist().GetPlaybackById( m_sel_replay_id ); wxLogMessage( _T( "Selected replay %d " ), m_sel_replay_id ); m_players_text->SetLabel( _T( "" ) ); m_map_text->SetLabel( rep.battle.GetHostMapName() ); m_mod_text->SetLabel( rep.battle.GetHostModName() ); m_minimap->SetBattle( &( rep.battle ) ); m_minimap->UpdateMinimap(); m_players->Clear(); m_players->SetBattle( ( IBattle* )&rep.battle ); for ( size_t i = 0; i < rep.battle.GetNumUsers(); ++i ) { try { User& usr = rep.battle.GetUser( i ); m_players->AddUser( usr ); } catch ( ... ) {} } } catch ( ... ) { Deselect(); } event.Skip(); } } template < class PlaybackTraits > void PlaybackTab::OnDeselect( wxListEvent& /*unused*/ ) { Deselected(); } template < class PlaybackTraits > void PlaybackTab::Deselect() { m_replay_listctrl->SelectNone(); Deselected(); } template < class PlaybackTraits > void PlaybackTab::Deselected() { m_watch_btn->Enable( false ); m_delete_btn->Enable( false ); m_players_text->SetLabel( _T( "" ) ); m_map_text->SetLabel( _T( "" ) ); m_mod_text->SetLabel( _T( "" ) ); m_minimap->SetBattle( NULL ); m_minimap->UpdateMinimap(); m_minimap->Refresh(); m_players->Clear(); m_players->SetBattle( NULL ); } template < class PlaybackTraits > void PlaybackTab::ReloadList() { Deselect(); m_replay_listctrl->Clear(); m_replay_loader->Run(); } template < class PlaybackTraits > void PlaybackTab::OnReload( wxCommandEvent& /*unused*/ ) { ReloadList(); } template < class PlaybackTraits > void PlaybackTab::OnSpringTerminated( GlobalEvents::GlobalEventData /*data*/ ) { ReloadList(); } template < class PlaybackTraits > void PlaybackTab::OnUnitsyncReloaded( GlobalEvents::GlobalEventData /*data*/ ) { ReloadList(); } springlobby-0.169/src/playback/playbacktab.h0000600000176000000410000001043612105760300022426 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_PlaybackTab_H_INCLUDED #define SPRINGLOBBY_PlaybackTab_H_INCLUDED #include #include #include "../utils/isink.h" class Ui; class MapCtrl; class BattleroomListCtrl; class wxCommandEvent; class wxListEvent; class wxStaticText; class wxComboBox; class wxButton; class wxBoxSizer; class wxStaticText; class wxStaticLine; class wxCheckBox; class wxToggleButton; template class PlaybackListFilter; template class PlaybackListCtrl; template class PlaybackLoader; template class PlaybackTab : public wxScrolledWindow, public SpringTerminatedSink< PlaybackTab > { protected: friend class BattleListFilter; //! WTF? public: typedef PlaybackTraitsImp PlaybackTraits; typedef typename PlaybackTraits::PlaybackType PlaybackType; typedef PlaybackTab ThisType; typedef typename PlaybackTraits::ListType ListType; typedef PlaybackListCtrl ListCtrlType; typedef PlaybackLoader LoaderType; static const bool IsReplayType = PlaybackTraits::IsReplayType; public: //! loads all replays into list and adds them to listctrl PlaybackTab( wxWindow* parent ); ~PlaybackTab(); //! adds a single replay to listctrl void AddPlayback( const PlaybackType& Replay ); void RemovePlayback( const PlaybackType& Replay ); void RemovePlayback( const int index ); void UpdatePlayback( const PlaybackType& Replay ); //! add all replays in m_replays to listctrl void AddAllPlaybacks( wxCommandEvent& evt ); void RemoveAllPlaybacks(); void ReloadList(); void UpdateList(); //! calls ui::watch which executes spring void OnWatch( wxCommandEvent& event ); //! clears list and parses all replays anew void OnReload( wxCommandEvent& event ); //! does nothing yet void OnDelete( wxCommandEvent& event ); //! does nothing yet void OnFilter( wxCommandEvent& event ); //! does nothing yet void OnFilterActiv( wxCommandEvent& event ); //! sets m_sel_replay_id according to selected listitem void OnSelect( wxListEvent& event ); //! does nothing yet void SetFilterActiv(bool activ); void Deselect(); void Deselected(); void OnDeselect( wxListEvent& event ); void OnSpringTerminated( GlobalEvents::GlobalEventData data ); void OnUnitsyncReloaded( GlobalEvents::GlobalEventData data ); protected: PlaybackListFilter* m_filter; ListCtrlType* m_replay_listctrl; LoaderType* m_replay_loader; MapCtrl* m_minimap; wxStaticText* m_map_lbl; wxStaticText* m_map_text; wxStaticText* m_mod_lbl; wxStaticText* m_mod_text; wxStaticText* m_players_lbl; wxStaticText* m_players_text; wxStaticLine* m_buttons_sep; wxButton* m_watch_btn; wxButton* m_delete_btn; wxButton* m_reload_btn; BattleroomListCtrl* m_players; wxCheckBox* m_filter_activ; #if wxUSE_TOGGLEBTN wxToggleButton* m_filter_show; #else wxCheckBox* m_filter_show; #endif void AskForceWatch( PlaybackType& rep ) const; EventReceiverFunc OnUsync_reload; DECLARE_EVENT_TABLE() }; enum { PLAYBACK_WATCH = wxID_HIGHEST, PLAYBACK_DELETE, PLAYBACK_RELOAD, PLAYBACK_LIST, PLAYBACK_LIST_FILTER_BUTTON, PLAYBACK_LIST_FILTER_ACTIV, PLAYBACK_TIMER, PLAYBACK_USER_LIST }; #include "playbacktab.cpp" #endif // SPRINGLOBBY_PlaybackTab_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/playback/playbackthread.cpp0000600000176000000410000000347012105760300023462 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // #include #include //#include "../utils.h" #include "replaylist.h" #include "savegamelist.h" #include "../springunitsync.h" template PlaybackLoader::PlaybackLoader( ParentType* parent ) : m_parent( parent ), m_thread_loader( 0 ) { } template PlaybackLoader::~PlaybackLoader() { } template void PlaybackLoader::Run() { if ( !usync().IsLoaded() ) return; if ( m_thread_loader ) return; // a thread is already running m_filenames = usync().GetPlaybackList( IsReplayType ); playbacklist().RemoveAll(); m_thread_loader = new ThreadType(); m_thread_loader->SetParent( this ); m_thread_loader->Create(); m_thread_loader->Run(); } template void PlaybackLoader::OnComplete() { if ( !m_parent ) return; wxCommandEvent notice( PlaybacksLoadedEvt, 1 ); ((wxEvtHandler*)m_parent)->ProcessEvent( notice ); m_thread_loader = 0; // the thread object deleted itself } template wxArrayString PlaybackLoader::GetPlaybackFilenames() { return m_filenames; } template PlaybackLoader::PlaybackLoaderThread::PlaybackLoaderThread(): m_parent(0) { } template void* PlaybackLoader::ThreadType::Entry() { if( m_parent ) { playbacklist().LoadPlaybacks( m_parent->GetPlaybackFilenames() ); m_parent->OnComplete(); } return NULL; } template void PlaybackLoader::PlaybackLoaderThread::SetParent( ParentType* parent ) { m_parent = parent; } springlobby-0.169/src/playback/playbackthread.h0000600000176000000410000000416312105760300023127 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_PLAYBACKTHREAD #define SPRINGLOBBY_HEADERGUARD_PLAYBACKTHREAD #include #include #include #include "../defines.h" static const wxEventType PlaybacksLoadedEvt = wxNewEventType(); #ifdef HAVE_WX29 #include template class PlaybackLoader : public wxEvtHandler #else template class PlaybackLoader #endif { protected: class PlaybackLoaderThread : public wxThread { protected: typedef PlaybackLoader ParentType; public: PlaybackLoaderThread(); void SetParent( ParentType* parent ); void* Entry(); protected: ParentType* m_parent; }; public: typedef PlaybackTabImp ParentType; typedef typename ParentType::PlaybackType PlaybackType; typedef typename ParentType::ListType ListType; typedef PlaybackLoader ThisType; typedef PlaybackLoaderThread ThreadType; static const bool IsReplayType = ParentType::IsReplayType; PlaybackLoader( ParentType* parent ); ~PlaybackLoader(); void OnComplete(); void Run(); wxArrayString GetPlaybackFilenames(); protected: wxArrayString m_filenames; ParentType* m_parent; ThreadType* m_thread_loader; }; #include "playbackthread.cpp" #endif // SPRINGLOBBY_HEADERGUARD_PLAYBACKTHREAD /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/playback/playbacktraits.h0000600000176000000410000000111012105760300023153 0ustar buildbotwww-data00000000000000#ifndef PLAYBACKTRAITS_H_INCLUDED #define PLAYBACKTRAITS_H_INCLUDED struct Replay; class ReplayList; class ReplayTraits { public: typedef Replay PlaybackType; typedef ReplayList ListType; static const bool IsReplayType = true; }; struct Savegame; class SavegameList; class SavegameTraits { public: typedef Savegame PlaybackType; typedef SavegameList ListType; static const bool IsReplayType = false; }; #endif // PLAYBACKTRAITS_H_INCLUDED springlobby-0.169/src/playback/replaylist.cpp0000600000176000000410000001063312105760300022673 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include #include #include #include #include "replaylist.h" #include #include "../utils/conversion.h" #include "../utils/customdialogs.h" #include "playbacktab.h" #include "playbackstructs.h" #include "../uiutils.h" #include "../globalsmanager.h" ReplayList::ReplayList() { } void ReplayList::LoadPlaybacks( const wxArrayString& filenames ) { m_fails = 0; m_replays.clear(); size_t size = filenames.GetCount(); for ( size_t i = 0; i < size; ++i) { Replay& rep_ref = AddPlayback( i ); // don't touch this reference, since elements inside this data structure are filled using pointers, adding & not fecthing the new addresses would screw up references when rep gets destroyed if ( !GetReplayInfos( filenames[i] , rep_ref ) ) { RemovePlayback( rep_ref.id ); m_fails++; } } } #define SEEK(x) if(replay.Seek(x)==wxInvalidOffset)return 0; int replayVersion( const wxString& ReplayPath ) { wxFile replay( ReplayPath, wxFile::read ); if ( !replay.IsOpened() ) return 0; SEEK( 16 ); int version = 0; replay.Read( &version, 4); return version; } #undef SEEK bool ReplayList::GetReplayInfos (const wxString& ReplayPath, Replay& ret ) const { //wxLogMessage(_T("GetReplayInfos %s"), ReplayPath.c_str()); //wxLOG_Info ( STD_STRING( ReplayPath ) ); //TODO extract moar info ret.Filename = ReplayPath; ret.battle.SetPlayBackFilePath( ReplayPath ); wxString FileName = ReplayPath.AfterLast( wxFileName::GetPathSeparator() ); // strips file path FileName = FileName.BeforeLast( _T('.') ); //strips the file extension; wxString date_string = FileName.BeforeFirst(_T('_')); FileName = FileName.AfterFirst(_T('_')); FileName = FileName.AfterFirst(_T('_')); // strips hours minutes seconds informatiom ret.SpringVersion = FileName.AfterLast(_T('_')); ret.MapName = FileName.BeforeLast(_T('_')); const int replay_version = replayVersion( ReplayPath ); ret.battle.SetScript( GetScriptFromReplay( ReplayPath, replay_version ) ); //wxLogMessage(_T("Script: %s"), script.c_str()); if ( ret.battle.GetScript().IsEmpty() ) return false; GetHeaderInfo( ret, ReplayPath, replay_version ); ret.battle.GetBattleFromScript( false ); ret.ModName = ret.battle.GetHostModName(); ret.battle.SetBattleType( BT_Replay ); //getting this from filename seems more reliable than from demoheader wxFormat date_format(_T("%s-%s-%s")); ret.date_string = date_format % date_string.SubString(0,3) % date_string.SubString(4,5) % date_string.SubString(6,7); return true; } #define SEEK(x) if(replay.Seek(x)==wxInvalidOffset)return script; wxString ReplayList::GetScriptFromReplay (const wxString& ReplayPath , const int version) const { wxString script; try { wxFile replay( ReplayPath, wxFile::read ); if ( !replay.IsOpened() ) return script; SEEK( 20 ); int headerSize=0 ; replay.Read( &headerSize, 4); const int seek = 64 + (version < 5 ? 0 : 240); SEEK( seek ); wxFileOffset scriptSize=0; replay.Read( &scriptSize, 4); scriptSize = LSL::Util::Clamp( wxFileOffset(scriptSize), wxFileOffset(0), replay.Length() ); SEEK( headerSize ); std::string script_a(scriptSize,0); replay.Read( &script_a[0], scriptSize ); script = TowxString( script_a ) ;//(script_a,scriptSize); } catch (...) { } return script; } #undef SEEK #define SEEK(x) if(replay.Seek(x)==wxInvalidOffset)return; void ReplayList::GetHeaderInfo(Replay& rep, const wxString& ReplayPath , const int version) const { try { wxFile replay( ReplayPath, wxFile::read ); const int seek = 72 + (version < 5 ? 0 : 240); SEEK( seek ); int gametime = 0 ; replay.Read( &gametime, 4); rep.duration = gametime; rep.size = replay.Length(); //! \todo don't use long long? (pedantic) wxLongLong_t unixtime = 0; SEEK( 56 ); replay.Read( &unixtime, 8 ); wxDateTime dt; dt.Set( (time_t) unixtime ); // todo: add 2 strings one for date other for time? wxString date_string = dt.FormatISODate()+_T(" ")+dt.FormatISOTime(); rep.date = (time_t) unixtime ; rep.date_string = date_string; } catch (...){ } } #undef SEEK springlobby-0.169/src/playback/replaylist.h0000600000176000000410000000631412105760300022341 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_REPLAYLIST_H_INCLUDED #define SPRINGLOBBY_REPLAYLIST_H_INCLUDED #include #include #include #include "playbacklist.h" #include "playbacktraits.h" //copied from spring sources for reference //struct DemoFileHeader //{ // char magic[16]; ///< DEMOFILE_MAGIC // int version; ///< DEMOFILE_VERSION // int headerSize; ///< Size of the DemoFileHeader, minor version number. // char versionString[16]; ///< Spring version string, e.g. "0.75b2", "0.75b2+svn4123" // Uint8 gameID[16]; ///< Unique game identifier. Identical for each player of the game. // Uint64 unixTime; ///< Unix time when game was started. // int scriptSize; ///< Size of startscript. // int demoStreamSize; ///< Size of the demo stream. // int gameTime; ///< Total number of seconds game time. // int wallclockTime; ///< Total number of seconds wallclock time. // int maxPlayerNum; ///< Maximum player number which was used in this game. // int numPlayers; ///< Number of players for which stats are saved. // int playerStatSize; ///< Size of the entire player statistics chunk. // int playerStatElemSize; ///< sizeof(CPlayer::Statistics) // int numTeams; ///< Number of teams for which stats are saved. // int teamStatSize; ///< Size of the entire team statistics chunk. // int teamStatElemSize; ///< sizeof(CTeam::Statistics) // int teamStatPeriod; ///< Interval (in seconds) between team stats. // int winningAllyTeam; ///< The ally team that won the game, -1 if unknown. //}; struct Replay; template class GlobalObjectHolder; class ReplayList : public PlaybackList { public: typedef Replay PlaybackType; virtual void LoadPlaybacks( const wxArrayString& filenames ); protected: ReplayList(); template friend class GlobalObjectHolder; bool GetReplayInfos ( const wxString& ReplayPath, Replay& ret ) const; wxString GetScriptFromReplay ( const wxString& ReplayPath, const int version ) const; BattleOptions GetBattleOptsFromScript( const wxString& script_ ) const; //! load mod/map options void LoadMMOpts( const wxString& sectionname, IBattle& battle, const SL::PDataList& node ); //! load engine options void LoadMMOpts( IBattle& battle, const SL::PDataList& node ); //! saves relevant infos from header into replay struct void GetHeaderInfo( Replay& rep, const wxString& ReplayPath, const int version ) const; }; #endif // SPRINGLOBBY_REPLAYLIST_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/playback/savegamelist.cpp0000600000176000000410000000425712105760300023174 0ustar buildbotwww-data00000000000000#include "savegamelist.h" /* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include #include #include #include #include //#include "replaylist.h" //#include "../utils/.h" #include "../utils/customdialogs.h" #include "playbacktab.h" #include "playbackstructs.h" #include "../uiutils.h" #include "../globalsmanager.h" SavegameList::SavegameList() { } void SavegameList::LoadPlaybacks( const wxArrayString& filenames ) { m_fails = 0; m_replays.clear(); size_t size = filenames.GetCount(); for ( size_t i = 0; i < size; ++i) { wxString fn = filenames[i]; Savegame& rep_ref = AddPlayback( i ); // don't touch this reference, since elements inside this data structure are filled using pointers, adding & not fecthing the new addresses would screw up references when rep gets destroyed if ( !GetSavegameInfos( filenames[i] , rep_ref ) ) { RemovePlayback( rep_ref.id ); m_fails++; } } } bool SavegameList::GetSavegameInfos ( const wxString& SavegamePath, Savegame& ret ) const { //wxLogMessage(_T("GetSavegameInfos %s"), SavegamePath.c_str()); //wxLOG_Info ( STD_STRING( SavegamePath ) ); //TODO extract moar info ret.Filename = SavegamePath; ret.battle.SetPlayBackFilePath( SavegamePath ); if ( SavegamePath.IsEmpty() ) return false; ret.battle.SetScript( GetScriptFromSavegame( SavegamePath ) ); //wxLogMessage(_T("Script: %s"), script.c_str()); if ( ret.battle.GetScript().IsEmpty() ) return false; ret.battle.GetBattleFromScript( true ); ret.ModName = ret.battle.GetHostModName(); ret.battle.SetBattleType( BT_Savegame ); ret.size = wxFileName::GetSize( SavegamePath ).ToULong(); return true; } wxString SavegameList::GetScriptFromSavegame ( const wxString& SavegamePath ) const { // blatantly copied from spring source std::ifstream file(SavegamePath.mb_str(), std::ios::in|std::ios::binary); std::string script; char c; if ( file.is_open() ) { do { file.read(&c,sizeof(char)); if (c) script += c; } while ( ( c != 0 ) && !file.fail() ); } return TowxString( script ); } springlobby-0.169/src/playback/savegamelist.h0000600000176000000410000000324112105760300022631 0ustar buildbotwww-data00000000000000#ifndef SAVEGAMELIST_H #define SAVEGAMELIST_H #include "playbacklist.h" struct Savegame; template class GlobalObjectHolder; class SavegameList : public PlaybackList { public: typedef Savegame PlaybackType; virtual void LoadPlaybacks( const wxArrayString& filenames ); protected: SavegameList(); template friend class GlobalObjectHolder; bool GetSavegameInfos ( const wxString& SavegamePath, Savegame& ret ) const; wxString GetScriptFromSavegame ( const wxString& SavegamePath ) const; BattleOptions GetBattleOptsFromScript( const wxString& script_ ); //! load mod/map options void LoadMMOpts( const wxString& sectionname, OfflineBattle& battle, const SL::PDataList& node ); //! load engine options void LoadMMOpts( OfflineBattle& battle, const SL::PDataList& node ); //! saves relevant infos from header into replay struct void GetHeaderInfo( Savegame& rep, const wxString& SavegamePath ); }; #endif // SAVEGAMELIST_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/poolmanager.cpp0000600000176000000410000000003112105760300021210 0ustar buildbotwww-data00000000000000#include "poolmanager.h" springlobby-0.169/src/poolmanager.h0000600000176000000410000000031512105760300020662 0ustar buildbotwww-data00000000000000#ifndef POOLMANAGER_CPP_INCLUDED #define POOLMANAGER_CPP_INCLUDED #include "thread.h" class poolmanager { public: poolmanager(){} ~poolmanager(){} private: }; #endif // POOLMANAGER_CPP_INCLUDED springlobby-0.169/src/prof.cpp0000600000176000000410000000550512105760300017665 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007, 2008 The SpringLobby Team. All rights reserved. */ // // Class: SpringLobbyApp // #ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include class SpringLobbyApp : public wxApp { public: SpringLobbyApp(); ~SpringLobbyApp(); virtual bool OnInit(); virtual int OnExit(); void SelectLanguage(); protected: DECLARE_EVENT_TABLE() }; DECLARE_APP(SpringLobbyApp) #include #include #include #include #include #include #include #include #include #include #include #include #include //filesystem zip handler #include #ifdef __WXMSW__ #include #endif #include #include #include #include "useractions.h" #include "mainwindow.h" #include "settings.h" #include "crashreport.h" #include "utils/controls.h" #include "utils/platform.h" #include "ui.h" #include "springunitsync.h" #include "channel/channel.h" #include "utils/customdialogs.h" #include "utils/downloader.h" #include "settings++/se_utils.h" #ifndef NO_TORRENT_SYSTEM #include "torrentwrapper.h" #endif #include "updater/updater.h" #include "globalsmanager.h" #include "gui/notificationmanager.h" #include "Helper/wxTranslationHelper.h" #include "playback/playbacktraits.h" #include "playback/playbacktab.h" #include "defines.h" #include "customizations.h" #include "alsound.h" #include "mapselectdialog.h" #include #include "utils/misc.h" const unsigned int TIMER_ID = 101; const unsigned int TIMER_INTERVAL = 100; IMPLEMENT_APP(SpringLobbyApp) BEGIN_EVENT_TABLE(SpringLobbyApp, wxApp) END_EVENT_TABLE() SpringLobbyApp::SpringLobbyApp() { } SpringLobbyApp::~SpringLobbyApp() { } void SpringLobbyApp::SelectLanguage(){} //! @brief Initializes the application. //! //! It will open the main window and connect default to server or open the connect window. bool SpringLobbyApp::OnInit() { wxLogNull logNo; //this needs to called _before_ mainwindow instance is created wxInitAllImageHandlers(); wxFileSystem::AddHandler(new wxZipFSHandler); wxSocketBase::Initialize(); sett().SetSpringBinary( sett().GetCurrentUsedSpringIndex(), sett().GetCurrentUsedSpringBinary() ); sett().SetUnitSync( sett().GetCurrentUsedSpringIndex(), sett().GetCurrentUsedUnitSync() ); bool usync_loaded = false; //unitsync first load, NEEDS to be blocking { boost::timer::auto_cpu_timer t; usync_loaded = usync().ReloadUnitSyncLib(); } DestroyGlobals(); return false; } //! @brief Finalizes the application int SpringLobbyApp::OnExit() { return 0; } springlobby-0.169/src/qt/FileHandler.cpp0000600000176000000410000000635012105760300021517 0ustar buildbotwww-data00000000000000/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */ #include "FileHandler.h" #include #include #include #include #include #include #include #include #include using std::string; /******************************************************************************/ /******************************************************************************/ CFileHandler::CFileHandler(const char* filename, const char* modes) : ifs(NULL), filePos(0), fileSize(-1) { Init(filename, modes); } CFileHandler::CFileHandler(const string& filename, const string& modes) : ifs(NULL), filePos(0), fileSize(-1) { Init(filename, modes); } CFileHandler::~CFileHandler(void) { delete ifs; } /******************************************************************************/ bool CFileHandler::TryRawFS(const string& filename) { const string rawpath = filename;//filesystem.LocateFile(filename); ifs = new std::ifstream(rawpath.c_str(), std::ios::in | std::ios::binary); if (ifs && !ifs->bad() && ifs->is_open()) { ifs->seekg(0, std::ios_base::end); fileSize = ifs->tellg(); ifs->seekg(0, std::ios_base::beg); return true; } delete ifs; ifs = NULL; return false; } void CFileHandler::Init(const string& _filename, const string& /*modes*/) { filename = _filename; if (TryRawFS(filename)){ return; } } /******************************************************************************/ bool CFileHandler::FileExists() const { return (fileSize >= 0); } int CFileHandler::Read(void* buf,int length) { if (ifs) { ifs->read((char*)buf, length); return ifs->gcount (); } else if (!fileBuffer.empty()) { if ((length + filePos) > fileSize) { length = fileSize - filePos; } if (length > 0) { assert(int(fileBuffer.size()) >= filePos+length); memcpy(buf, &fileBuffer[filePos], length); filePos += length; } return length; } return 0; } void CFileHandler::Seek(int length, std::ios_base::seekdir where) { if (ifs) { // on some machines, EOF bit does not get reset when seeking to another pos ifs->clear(); ifs->seekg(length, where); } else if (!fileBuffer.empty()) { if (where == std::ios_base::beg) { filePos = length; } else if (where == std::ios_base::cur) { filePos += length; } else if (where == std::ios_base::end) { filePos = fileSize + length; } } } int CFileHandler::Peek() const { if (ifs) { return ifs->peek(); } else if (!fileBuffer.empty()){ if (filePos < fileSize) { return fileBuffer.at(filePos); } else { return EOF; } } return EOF; } bool CFileHandler::Eof() const { if (ifs) { return ifs->eof(); } if (!fileBuffer.empty()) { return (filePos >= fileSize); } return true; } int CFileHandler::FileSize() const { return fileSize; } int CFileHandler::GetPos() const { if (ifs) { return ifs->tellg(); } else { return filePos; } } bool CFileHandler::LoadStringData(string& data) { if (!FileExists()) { return false; } char* buf = new char[fileSize]; Read(buf, fileSize); data.append(buf, fileSize); delete[] buf; return true; } std::string CFileHandler::GetFileExt() const { return QFileInfo( QString(filename.c_str()) ).suffix().toStdString(); } springlobby-0.169/src/qt/FileHandler.h0000600000176000000410000000631212105760300021162 0ustar buildbotwww-data00000000000000/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */ #ifndef __FILE_HANDLER_H__ #define __FILE_HANDLER_H__ #include #include #include #include #include static const char* SPRING_VFS_RAW_FIRST = ""; /** * This is for direct file system access. * If you need data-dir related file and dir handling methods, * have a look at the FileSystem class. * * This class should be threadsafe (multiple threads can use multiple CFileHandler simulatneously) * as long as there are no new Archives added to the VFS (should not happen after PreGame). */ class CFileHandler { public: CFileHandler(const char* filename, const char* modes = SPRING_VFS_RAW_FIRST); CFileHandler(const std::string& filename, const std::string& modes = SPRING_VFS_RAW_FIRST); ~CFileHandler(void); int Read(void* buf,int length); void Seek(int pos, std::ios_base::seekdir where = std::ios_base::beg); bool FileExists() const; bool Eof() const; int Peek() const; int GetPos() const; int FileSize() const; bool LoadStringData(std::string& data); std::string GetFileExt() const; static bool InReadDir(const std::string& path); static bool InWriteDir(const std::string& path); // static std::vector FindFiles(const std::string& path, const std::string& pattern); // static std::vector DirList(const std::string& path, const std::string& pattern, const std::string& modes); // static std::vector SubDirs(const std::string& path, const std::string& pattern, const std::string& modes); // static std::string AllowModes(const std::string& modes, const std::string& allowed); // static std::string ForbidModes(const std::string& modes, const std::string& forbidden); private: void Init(const std::string& filename, const std::string& modes); bool TryRawFS(const std::string& filename); // bool TryModFS(const std::string& filename); // bool TryMapFS(const std::string& filename); // bool TryBaseFS(const std::string& filename); // static bool InsertRawFiles(std::set& fileSet, // const std::string& path, // const std::string& pattern); // static bool InsertModFiles(std::set& fileSet, // const std::string& path, // const std::string& pattern); // static bool InsertMapFiles(std::set& fileSet, // const std::string& path, // const std::string& pattern); // static bool InsertBaseFiles(std::set& fileSet, // const std::string& path, // const std::string& pattern); // static bool InsertRawDirs(std::set& dirSet, // const std::string& path, // const std::string& pattern); // static bool InsertModDirs(std::set& dirSet, // const std::string& path, // const std::string& pattern); // static bool InsertMapDirs(std::set& dirSet, // const std::string& path, // const std::string& pattern); // static bool InsertBaseDirs(std::set& dirSet, // const std::string& path, // const std::string& pattern); std::string filename; std::ifstream* ifs; std::vector fileBuffer; int filePos; int fileSize; }; #endif // __FILE_HANDLER_H__ springlobby-0.169/src/qt/audio/ALShared.cpp0000600000176000000410000000045312105760300022064 0ustar buildbotwww-data00000000000000/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */ #include "ALShared.h" #include bool CheckError(const char* msg) { ALenum e = alGetError(); if (e != AL_NO_ERROR) { qDebug() << msg << ": " << (char*)alGetString(e); return false; } return true; } springlobby-0.169/src/qt/audio/ALShared.h0000600000176000000410000000031612105760300021527 0ustar buildbotwww-data00000000000000/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */ #ifndef _AL_SHARED_H_ #define _AL_SHARED_H_ #include bool CheckError(const char* msg); #endif // _AL_SHARED_H_ springlobby-0.169/src/qt/audio/OggStream.cpp0000600000176000000410000001607612105760300022341 0ustar buildbotwww-data00000000000000/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */ #include "OggStream.h" #include #include "../FileHandler.h" #include "ALShared.h" #include "VorbisShared.h" #include namespace VorbisCallbacks { size_t VorbisStreamRead(void* ptr, size_t size, size_t nmemb, void* datasource) { CFileHandler* buffer = (CFileHandler*)datasource; return buffer->Read(ptr, size * nmemb); } int VorbisStreamClose(void* datasource) { CFileHandler* buffer = (CFileHandler*)datasource; delete buffer; return 0; } int VorbisStreamSeek(void* datasource, ogg_int64_t offset, int whence) { CFileHandler* buffer = (CFileHandler*)datasource; if (whence == SEEK_SET) { buffer->Seek(offset, std::ios_base::beg); } else if (whence == SEEK_CUR) { buffer->Seek(offset, std::ios_base::cur); } else if (whence == SEEK_END) { buffer->Seek(offset, std::ios_base::end); } return 0; } long VorbisStreamTell(void* datasource) { CFileHandler* buffer = (CFileHandler*)datasource; return buffer->GetPos(); } } COggStream::COggStream(ALuint _source) : vorbisInfo(NULL) , source(_source) , format(AL_FORMAT_MONO16) , stopped(true) , paused(false) , msecsPlayed(0) , lastTick(0) { for (unsigned i = 0; i < NUM_BUFFERS; ++i) { buffers[i] = 0; } } COggStream::~COggStream() { Stop(); } // open an Ogg stream from a given file and start playing it void COggStream::Play(const std::string& path, float /*volume*/) { if (!stopped) { // we're already playing another stream return; } vorbisTags.clear(); int result = 0; ov_callbacks vorbisCallbacks; vorbisCallbacks.read_func = VorbisCallbacks::VorbisStreamRead; vorbisCallbacks.close_func = VorbisCallbacks::VorbisStreamClose; vorbisCallbacks.seek_func = VorbisCallbacks::VorbisStreamSeek; vorbisCallbacks.tell_func = VorbisCallbacks::VorbisStreamTell; CFileHandler* buf = new CFileHandler(path); if ((result = ov_open_callbacks(buf, &oggStream, NULL, 0, vorbisCallbacks)) < 0) { qDebug() << "Could not open Ogg stream (reason: %s)." << ErrorString(result).c_str() ; qDebug() << path.c_str(); return; } vorbisInfo = ov_info(&oggStream, -1); { vorbis_comment* vorbisComment; vorbisComment = ov_comment(&oggStream, -1); vorbisTags.resize(vorbisComment->comments); for (int i = 0; i < vorbisComment->comments; ++i) { vorbisTags[i] = std::string(vorbisComment->user_comments[i], vorbisComment->comment_lengths[i]); } vendor = std::string(vorbisComment->vendor); // DisplayInfo(); } if (vorbisInfo->channels == 1) { format = AL_FORMAT_MONO16; } else { format = AL_FORMAT_STEREO16; } alGenBuffers(2, buffers); CheckError("COggStream::Play"); if (!StartPlaying()) { ReleaseBuffers(); } else { stopped = false; paused = false; } CheckError("COggStream::Play"); } float COggStream::GetPlayTime() const { return (msecsPlayed / 1000.0f); } float COggStream::GetTotalTime() { return ov_time_total(&oggStream, -1); } bool COggStream::Valid() const { return (vorbisInfo != 0); } bool COggStream::IsFinished() { return !Valid() || (GetPlayTime() >= GetTotalTime()); } const COggStream::TagVector& COggStream::VorbisTags() const { return vorbisTags; } // display Ogg info and comments void COggStream::DisplayInfo() { // logOutput.Print("version: %d", vorbisInfo->version); // logOutput.Print("channels: %d", vorbisInfo->channels); // logOutput.Print("time (sec): %lf", ov_time_total(&oggStream,-1)); // logOutput.Print("rate (Hz): %ld", vorbisInfo->rate); // logOutput.Print("bitrate (upper): %ld", vorbisInfo->bitrate_upper); // logOutput.Print("bitrate (nominal): %ld", vorbisInfo->bitrate_nominal); // logOutput.Print("bitrate (lower): %ld", vorbisInfo->bitrate_lower); // logOutput.Print("bitrate (window): %ld", vorbisInfo->bitrate_window); // logOutput.Print("vendor: %s", vendor.c_str()); // for (TagVector::const_iterator it = vorbisTags.begin(); it != vorbisTags.end(); ++it) { // logOutput.Print("%s", it->c_str()); // } } // clean up the OpenAL resources void COggStream::ReleaseBuffers() { stopped = true; paused = false; EmptyBuffers(); alDeleteBuffers(2, buffers); CheckError("COggStream::ReleaseBuffers"); ov_clear(&oggStream); } // returns true if both buffers were // filled with data from the stream bool COggStream::StartPlaying() { msecsPlayed = 0; lastTick = SDL_GetTicks(); if (!DecodeStream(buffers[0])) { return false; } if (!DecodeStream(buffers[1])) { return false; } alSourceQueueBuffers(source, 2, buffers); CheckError("COggStream::StartPlaying"); alSourcePlay(source); CheckError("COggStream::StartPlaying"); return true; } // returns true if we're still playing bool COggStream::IsPlaying() { ALenum state = 0; alGetSourcei(source, AL_SOURCE_STATE, &state); return (state == AL_PLAYING); } // stops the currently playing stream void COggStream::Stop() { if (stopped) { return; } ReleaseBuffers(); msecsPlayed = 0; vorbisInfo = NULL; lastTick = SDL_GetTicks(); } bool COggStream::TogglePause() { if (!stopped) { paused = !paused; } return paused; } // pop the processed buffers from the queue, // refill them, and push them back in line bool COggStream::UpdateBuffers() { int buffersProcessed = 0; bool active = true; alGetSourcei(source, AL_BUFFERS_PROCESSED, &buffersProcessed); while (buffersProcessed-- > 0) { ALuint buffer; alSourceUnqueueBuffers(source, 1, &buffer); CheckError("COggStream::UpdateBuffers"); // false if we've reached end of stream active = DecodeStream(buffer); if (active) alSourceQueueBuffers(source, 1, &buffer); CheckError("COggStream::UpdateBuffers"); } return active; } void COggStream::Update() { if (stopped) { return; } unsigned tick = SDL_GetTicks(); if (!paused) { if (UpdateBuffers()) { if (!IsPlaying()) { // source state changed if (!StartPlaying()) { // stream stopped ReleaseBuffers(); } else { // stream interrupted ReleaseBuffers(); } } } else if (!IsPlaying()) { // EOS and all chunks processed by OpenALs ReleaseBuffers(); } msecsPlayed += (tick - lastTick); } lastTick = tick; } // read decoded data from audio stream into PCM buffer bool COggStream::DecodeStream(ALuint buffer) { char pcm[BUFFER_SIZE]; int size = 0; int section = 0; int result = 0; while (size < int(BUFFER_SIZE) ) { result = ov_read(&oggStream, pcm + size, BUFFER_SIZE - size, 0, 2, 1, §ion); if (result > 0) { size += result; } else { if (result < 0) { qDebug() << "Error reading Ogg stream " << ErrorString(result).c_str(); } else { break; } } } if (size == 0) { return false; } alBufferData(buffer, format, pcm, size, vorbisInfo->rate); CheckError("COggStream::DecodeStream"); return true; } // dequeue any buffers pending on source void COggStream::EmptyBuffers() { int queuedBuffers = 0; alGetSourcei(source, AL_BUFFERS_QUEUED, &queuedBuffers); CheckError("COggStream::EmptyBuffers"); while (queuedBuffers-- > 0) { ALuint buffer; alSourceUnqueueBuffers(source, 1, &buffer); CheckError("COggStream::EmptyBuffers"); } } springlobby-0.169/src/qt/audio/OggStream.h0000600000176000000410000000244312105760300021777 0ustar buildbotwww-data00000000000000/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */ #ifndef OGGSTREAM_H #define OGGSTREAM_H #include #include #include #include #include class COggStream { public: typedef std::vector TagVector; COggStream(ALuint _source); ~COggStream(); void Play(const std::string& path, float volume); void Stop(); bool TogglePause(); void Update(); float GetPlayTime() const; float GetTotalTime(); bool Valid() const; bool IsFinished(); const TagVector& VorbisTags() const; private: void DisplayInfo(); bool IsPlaying(); bool StartPlaying(); bool DecodeStream(ALuint buffer); void EmptyBuffers(); void ReleaseBuffers(); /** @brief Decode next part of the stream and queue it for playing @return wheter it is the end of the stream (check for IsPlaying() wheter the complete stream was played) */ bool UpdateBuffers(); OggVorbis_File oggStream; vorbis_info* vorbisInfo; static const unsigned int BUFFER_SIZE = (512 * 1024); // 512KB static const unsigned int NUM_BUFFERS = 2; ALuint buffers[NUM_BUFFERS]; ALuint source; ALenum format; bool stopped; bool paused; unsigned msecsPlayed; unsigned lastTick; std::vector vorbisTags; std::string vendor; }; #endif springlobby-0.169/src/qt/audio/SoundBuffer.cpp0000600000176000000410000001731712105760300022672 0ustar buildbotwww-data00000000000000/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */ #include "SoundBuffer.h" #include #include #include "ALShared.h" #include "VorbisShared.h" //#include "System/Platform/errorhandler.h" #include "byteorder.h" #include namespace { struct VorbisInputBuffer { boost::uint8_t* data; size_t pos; size_t size; }; size_t VorbisRead(void* ptr, size_t size, size_t nmemb, void* datasource) { VorbisInputBuffer* buffer = (VorbisInputBuffer*)datasource; const size_t maxRead = std::min(size * nmemb, buffer->size - buffer->pos); memcpy(ptr, buffer->data + buffer->pos, maxRead); buffer->pos += maxRead; return maxRead; }; int VorbisClose(void* /*datasource*/) { return 0; // nothing to be done here }; } SoundBuffer::bufferMapT SoundBuffer::bufferMap; // filename, index into Buffers SoundBuffer::bufferVecT SoundBuffer::buffers; SoundBuffer::SoundBuffer() : id(0), channels(0) { } SoundBuffer::~SoundBuffer() { } #pragma pack(push, 1) // Header copied from WavLib by Michael McTernan struct WAVHeader { boost::uint8_t riff[4]; // "RIFF" boost::int32_t totalLength; boost::uint8_t wavefmt[8]; // WAVEfmt " boost::int32_t length; // Remaining length 4 bytes boost::int16_t format_tag; boost::int16_t channels; // Mono=1 Stereo=2 boost::int32_t SamplesPerSec; boost::int32_t AvgBytesPerSec; boost::int16_t BlockAlign; boost::int16_t BitsPerSample; boost::uint8_t data[4]; // "data" boost::int32_t datalen; // Raw data length 4 bytes }; #pragma pack(pop) bool SoundBuffer::LoadWAV(const std::string& file, std::vector buffer, bool strict) { WAVHeader* header = (WAVHeader*)(&buffer[0]); if (memcmp(header->riff, "RIFF", 4) || memcmp(header->wavefmt, "WAVEfmt", 7)) { if (strict) { qDebug() << "ReadWAV: invalid header." << file.c_str(); } return false; } #define hswabword(c) header->c = swabword(header->c) #define hswabdword(c) header->c = swabdword(header->c) hswabword(format_tag); hswabword(channels); hswabword(BlockAlign); hswabword(BitsPerSample); hswabdword(totalLength); hswabdword(length); hswabdword(SamplesPerSec); hswabdword(AvgBytesPerSec); hswabdword(datalen); #undef hswabword #undef hswabdword if (header->format_tag != 1) { // Microsoft PCM format? if (strict) { qDebug() << "ReadWAV: invalid format tag." << file.c_str(); } return false; } ALenum format; if (header->channels == 1) { if (header->BitsPerSample == 8) format = AL_FORMAT_MONO8; else if (header->BitsPerSample == 16) format = AL_FORMAT_MONO16; else { if (strict) { qDebug() << "ReadWAV: invalid number of bits per sample (mono). " << file.c_str(); } return false; } } else if (header->channels == 2) { if (header->BitsPerSample == 8) format = AL_FORMAT_STEREO8; else if (header->BitsPerSample == 16) format = AL_FORMAT_STEREO16; else { if (strict) { qDebug() << "ReadWAV: invalid number of bits per sample (stereo). " << file.c_str(); } return false; } } else { if (strict) { qDebug() << "ReadWAV (%s): invalid number of channels. "<< file.c_str(); } return false; } if (static_cast(header->datalen) > buffer.size() - sizeof(WAVHeader)) { qDebug() << "WAV file " << file.c_str() << " has data length " << header->datalen << " greater than actual data length " << buffer.size() - sizeof(WAVHeader); // logOutput.Print("OpenAL: size %d\n", size); // logOutput.Print("OpenAL: sizeof(WAVHeader) %d\n", sizeof(WAVHeader)); // logOutput.Print("OpenAL: format_tag %d\n", header->format_tag); // logOutput.Print("OpenAL: channels %d\n", header->channels); // logOutput.Print("OpenAL: BlockAlign %d\n", header->BlockAlign); // logOutput.Print("OpenAL: BitsPerSample %d\n", header->BitsPerSample); // logOutput.Print("OpenAL: totalLength %d\n", header->totalLength); // logOutput.Print("OpenAL: length %d\n", header->length); // logOutput.Print("OpenAL: SamplesPerSec %d\n", header->SamplesPerSec); // logOutput.Print("OpenAL: AvgBytesPerSec %d\n", header->AvgBytesPerSec); header->datalen = boost::uint32_t(buffer.size() - sizeof(WAVHeader))&(~boost::uint32_t((header->BitsPerSample*header->channels)/8 -1)); } if (!AlGenBuffer(file, format, &buffer[sizeof(WAVHeader)], header->datalen, header->SamplesPerSec)) qDebug() << "Loading audio failed for " << file.c_str(); filename = file; channels = header->channels; return true; } bool SoundBuffer::LoadVorbis(const std::string& file, std::vector buffer, bool strict) { VorbisInputBuffer buf; buf.data = &buffer[0]; buf.pos = 0; buf.size = buffer.size(); ov_callbacks vorbisCallbacks; vorbisCallbacks.read_func = VorbisRead; vorbisCallbacks.close_func = VorbisClose; vorbisCallbacks.seek_func = NULL; vorbisCallbacks.tell_func = NULL; OggVorbis_File oggStream; int result = 0; if ((result = ov_open_callbacks(&buf, &oggStream, NULL, 0, vorbisCallbacks)) < 0) { qDebug() << "Could not open Ogg stream (reason: %s). " << ErrorString(result).c_str(); return false; } vorbis_info* vorbisInfo = ov_info(&oggStream, -1); // vorbis_comment* vorbisComment = ov_comment(&oggStream, -1); ALenum format; if (vorbisInfo->channels == 1) { format = AL_FORMAT_MONO16; } else if (vorbisInfo->channels == 2) { format = AL_FORMAT_STEREO16; } else { if (strict) qDebug() << "SoundBuffer::LoadVorbis (%s): invalid number of channels. " << file.c_str(); else qDebug() << "File " << file.c_str() << ": invalid number of channels: " << vorbisInfo->channels; return false; } size_t pos = 0; std::vector decodeBuffer(512*1024); // 512kb read buffer int section = 0; long read = 0; do { if (4*pos > 3*decodeBuffer.size()) // enlarge buffer so ov_read has enough space decodeBuffer.resize(decodeBuffer.size()*2); read = ov_read(&oggStream, (char*)&decodeBuffer[pos], decodeBuffer.size() - pos, 0, 2, 1, §ion); switch(read) { case OV_HOLE: qDebug() << file.c_str() << ": garbage or corrupt page in stream (non-fatal)"; continue; // read next case OV_EBADLINK: qDebug() << file.c_str() << ": corrupted stream"; return false; // abort case OV_EINVAL: qDebug() << file.c_str() << ": corrupted headers"; return false; // abort default: break; // all good }; pos += read; } while (read > 0); // read == 0 indicated EOF, read < 0 is error AlGenBuffer(file, format, &decodeBuffer[0], pos, vorbisInfo->rate); filename = file; channels = vorbisInfo->channels; return true; } int SoundBuffer::BufferSize() const { ALint size; alGetBufferi(id, AL_SIZE, &size); return static_cast(size); } void SoundBuffer::Initialise() { buffers.resize(1); // empty ("zero") buffer }; void SoundBuffer::Deinitialise() { buffers.resize(0); }; size_t SoundBuffer::GetId(const std::string& name) { bufferMapT::const_iterator it = bufferMap.find(name); if (it != bufferMap.end()) return it->second; else return 0; }; boost::shared_ptr SoundBuffer::GetById(const size_t id) { assert(id < buffers.size()); return buffers.at(id); }; size_t SoundBuffer::Count() { return buffers.size(); }; size_t SoundBuffer::AllocedSize() { int numBytes = 0; for (bufferVecT::const_iterator it = ++buffers.begin(); it != buffers.end(); ++it) numBytes += (*it)->BufferSize(); return numBytes; }; size_t SoundBuffer::Insert(boost::shared_ptr buffer) { size_t bufId = buffers.size(); buffers.push_back(buffer); bufferMap[buffer->GetFilename()] = bufId; return bufId; }; bool SoundBuffer::AlGenBuffer(const std::string& /*file*/, ALenum format, const boost::uint8_t* data, size_t datalength, int rate) { alGenBuffers(1, &id); alBufferData(id, format, (ALvoid*) data, datalength, rate); return CheckError("SoundBuffer::AlGenBuffer"); } springlobby-0.169/src/qt/audio/SoundBuffer.h0000600000176000000410000000330112105760300022323 0ustar buildbotwww-data00000000000000/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */ #ifndef SOUNDBUFFER_H #define SOUNDBUFFER_H #include #include #include #include #include #include #include /** * @brief A buffer holding a sound * * One of this will be created for each wav-file used. * They are loaded on demand and unloaded when game ends. * They can be shared among multiple SoundItem */ class SoundBuffer : boost::noncopyable { public: /// Construct an "empty" buffer /// can be played, but you won't hear anything SoundBuffer(); ~SoundBuffer(); bool LoadWAV(const std::string& file, std::vector buffer, bool strict); bool LoadVorbis(const std::string& file, std::vector buffer, bool strict); const std::string& GetFilename() const { return filename; }; ALuint GetId() const { return id; }; ALuint GetChannels() const { return channels; }; int BufferSize() const; static void Initialise(); static void Deinitialise(); static size_t GetId(const std::string& name); static boost::shared_ptr GetById(const size_t id); static size_t Count(); static size_t AllocedSize(); static size_t Insert(boost::shared_ptr buffer); private: bool AlGenBuffer(const std::string& file, ALenum format, const boost::uint8_t* data, size_t datalength, int rate); std::string filename; ALuint id; ALuint channels; typedef std::map bufferMapT; typedef std::vector< boost::shared_ptr > bufferVecT; static bufferMapT bufferMap; // filename, index into Buffers static bufferVecT buffers; }; #endif springlobby-0.169/src/qt/audio/VorbisShared.cpp0000600000176000000410000000117712105760300023040 0ustar buildbotwww-data00000000000000/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */ #include "VorbisShared.h" #include #include std::string ErrorString(int code) { switch (code) { case OV_EREAD: return std::string("Read from media."); case OV_ENOTVORBIS: return std::string("Not Vorbis data."); case OV_EVERSION: return std::string("Vorbis version mismatch."); case OV_EBADHEADER: return std::string("Invalid Vorbis header."); case OV_EFAULT: return std::string("Internal logic fault (bug or heap/stack corruption."); default: return std::string("Unknown Ogg error."); } }; springlobby-0.169/src/qt/audio/VorbisShared.h0000600000176000000410000000027512105760300022503 0ustar buildbotwww-data00000000000000/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */ #ifndef VORBIS_SHARED #define VORBIS_SHARED #include std::string ErrorString(int code); #endif springlobby-0.169/src/qt/audio/audiomanager.cpp0000600000176000000410000001476212105760300023105 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include "audiomanager.h" #include "OggStream.h" #include "ALShared.h" #include "SoundBuffer.h" #include "../FileHandler.h" #include #include #include #include #include #include #include /* some pieces cobbled together from spring's SoundSource.cpp */ AudioManager::AudioManager(QObject *parent) : QThread(parent), ogg_stream_( 0 ), no_busy_sources_( 0 ), master_volume_( 0.5f ), device_( 0 ), active_( sett().Get( _T("sasi/audio_enabled"), true ) ), quitting_time_( false ) { SoundBuffer::Initialise(); qDebug() << "AudioManager ctor"; alGetError(); device_ = alcOpenDevice(0);//default device if (device_ == NULL) { qDebug() << "Could not open a sound device, disabling sounds"; CheckError("CSound::InitAL"); } else { ALCcontext *context = alcCreateContext(device_, NULL); if (context != NULL) { alcMakeContextCurrent(context); CheckError("CSound::CreateContext"); } else { alcCloseDevice(device_); qDebug() << "Could not create OpenAL audio context"; } } alGenSources(8, sources_); ogg_stream_id_ = sources_[0]; if (!CheckError("CSoundSource::CSoundSource")) { ogg_stream_id_ = 0; } setupAlSource( ogg_stream_id_, master_volume_*1 ); for ( int i = 1; i < int(max_sounds_); ++i ) setupAlSource( sources_[i], master_volume_*0.3 ); alListenerf(AL_GAIN, master_volume_ ); loadAllSounds(); getMusicFilenames(); if ( music_filenames.size() == 0 ) { qDebug() << "no music found"; return; } ogg_stream_ = new COggStream(ogg_stream_id_); assert( ogg_stream_ ); } AudioManager::~AudioManager() { alDeleteSources(1, &ogg_stream_id_); alcCloseDevice( device_ ); CheckError("CSoundSource::~CSoundSource"); sett().Set( _T("sasi/audio_enabled"), active_ ); } void AudioManager::setupAlSource( const ALuint id, const float volume ) { alSourcef(id, AL_REFERENCE_DISTANCE, 2.f ); alSource3f(id, AL_POSITION, 0.0f, 0.0f, 0.0f); alSourcef(id, AL_GAIN, volume); alSource3f(id, AL_VELOCITY, 0.0f, 0.0f, 0.0f); alSource3f(id, AL_DIRECTION, 0.0f, 0.0f, 0.0f); alSourcef(id, AL_ROLLOFF_FACTOR, 0.0f); alSourcei(id, AL_SOURCE_RELATIVE, AL_TRUE); alSourcei(id, AL_BUFFER, AL_NONE); } void AudioManager::run() { if ( active_ && ogg_stream_ ) { ogg_stream_->Play( music_filenames[0].toStdString(), master_volume_ /*this has no effect actually*/ ); no_busy_sources_++; music_filenames.pop_front(); ogg_stream_->Update(); CheckError("AudioManager::play"); } while( !quitting_time_ ) { if ( !active_ )// no need to update that often if we're nto active { sleep( 1 ); continue; } msleep( 50 ); if( ogg_stream_ ) ogg_stream_->Update(); if ( ogg_stream_ && ogg_stream_->IsFinished() ) { if ( music_filenames.size() == 0 ) //meaning we've played all music once getMusicFilenames();//refill queue if ( music_filenames.size() == 0 ) //someone removed music at runtime, bad { no_busy_sources_--; return; } ogg_stream_->Play( music_filenames[0].toStdString(), master_volume_ ); music_filenames.pop_front(); } } no_busy_sources_--; qDebug() << "playback finished"; } void AudioManager::getMusicFilenames() { music_filenames.clear(); QDir music_dir ( SLcustomizations().MusicDir() ); QFileInfo current_file; QStringList nameFilter; nameFilter << "*.ogg" ; foreach( current_file, music_dir.entryInfoList( nameFilter, QDir::Files ) ) { qDebug() << current_file.absoluteFilePath() ; music_filenames.append( current_file.absoluteFilePath() ); } } size_t AudioManager:: loadSound( const QString& q_path ) { const std::string path = q_path.toStdString(); const size_t id = SoundBuffer::GetId(path); if (id > 0) { return id; // file is loaded already } CFileHandler file(path); if (!file.FileExists()) { qDebug() << "Unable to open audio file: " << path.c_str(); return 0; } std::vector buf(file.FileSize()); file.Read(&buf[0], file.FileSize()); boost::shared_ptr buffer(new SoundBuffer()); bool success = false; const std::string ending = file.GetFileExt(); if (ending == "wav") success = buffer->LoadWAV(path, buf, false); else if (ending == "ogg") success = buffer->LoadVorbis(path, buf, false); else qDebug() << "CSound::LoadALBuffer: unknown audio format: " << ending.c_str(); CheckError("CSound::LoadALBuffer"); if (!success) { qDebug() << "Failed to load file: " << path.c_str(); return 0; } return SoundBuffer::Insert(buffer); } void AudioManager::playSound( const QString filename ) { if ( !active_ || no_busy_sources_ >= max_sounds_ ) return; no_busy_sources_++; ALuint tmp_id2 = sources_[1]; BufferIdMapType::const_iterator buffer_it = fn_to_bufferID_map.find( filename ); if ( buffer_it == fn_to_bufferID_map.end() ) { qDebug() << "cannot find (maybe not loaded?) sound: " << filename; return; } boost::shared_ptr buffer = SoundBuffer::GetById( buffer_it->second ); alSourcei(tmp_id2, AL_BUFFER, buffer->GetId()); alSourcePlay(tmp_id2); CheckError("alSourcePlay(tmp_id)"); no_busy_sources_--; } void AudioManager::loadAllSounds() { QDir sound_dir( SLcustomizations().SoundsDir() ); QStringList nameFilter; nameFilter << "*.wav" << "*.raw"; QFileInfo current_file; foreach( current_file, sound_dir.entryInfoList( nameFilter, QDir::Files ) ) { fn_to_bufferID_map[current_file.fileName()] = loadSound( current_file.absoluteFilePath() ); } } void AudioManager::pause() { if ( active_ && ogg_stream_ ) ogg_stream_->TogglePause(); for ( int i = 0; i < int(max_sounds_); ++i ) alSourcePause(i); active_ = false; } void AudioManager::resume() { if ( !active_ && ogg_stream_ ) ogg_stream_->TogglePause(); for ( int i = 0; i < int(max_sounds_); ++i ) alSourcePlay(i); active_ = true; } bool AudioManager::toggleActive() { if ( active_ ) pause(); else resume(); return active_; } springlobby-0.169/src/qt/audio/audiomanager.h0000600000176000000410000000327312105760300022545 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef AUDIOMANAGER_H #define AUDIOMANAGER_H #include #include #include #include #include class COggStream; class AudioManager : public QThread { Q_OBJECT public: explicit AudioManager(QObject *parent = 0); ~AudioManager(); void run(); signals: public slots: void playSound( const QString filename ) ; bool toggleActive(); void pause(); void resume(); bool isActive() const { return active_; } void doQuit() { quitting_time_ = true; } private: size_t loadSound( const QString& path ); void loadAllSounds(); void getMusicFilenames(); void setupAlSource( const ALuint id, const float volume ); COggStream* ogg_stream_; ALuint ogg_stream_id_; static const size_t max_sounds_ = 8; ALuint sources_[max_sounds_]; size_t no_busy_sources_; ALuint tmp_id; QList music_filenames; float master_volume_; typedef std::map BufferIdMapType; BufferIdMapType fn_to_bufferID_map; ALCdevice* device_; bool active_; bool quitting_time_; }; #endif // AUDIOMANAGER_H springlobby-0.169/src/qt/audio/byteorder.h0000600000176000000410000000364612105760300022114 0ustar buildbotwww-data00000000000000/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */ /** * @brief byte order handling * * Mac PPC: BIG Endian * Mac X86: little Endian * * Win X86: little Endian * * BSD X86: BIG Endian * Linux X86: BIG Endian * * Um... all x86 machines are little endian. * - cfh */ #ifndef BYTEORDER_H #define BYTEORDER_H #include /* * The swabbing stuff looks backwards, but the files * are _originally_ little endian (win32 x86). * So in this case little endian is the standard while * big endian is the exception. */ #if defined(__linux__) #include #if __BYTE_ORDER == __BIG_ENDIAN #define swabword(w) (bswap_16(w)) #define swabdword(w) (bswap_32(w)) /* My brother tells me that a C compiler must store floats in memory by a particular standard, except for the endianness; hence, this will work on all C compilers. */ static inline float swabfloat(float w) { char octets[4]; char ret_octets[4]; float ret; memcpy(octets, &w, 4); ret_octets[0] = octets[3]; ret_octets[1] = octets[2]; ret_octets[2] = octets[1]; ret_octets[3] = octets[0]; memcpy(&ret, ret_octets, 4); return ret; } #else #define swabword(w) (w) #define swabdword(w) (w) #define swabfloat(w) (w) #endif #elif defined(__FreeBSD__) #include #define swabword(w) (htole16(w)) #define swabdword(w) (htole32(w)) static inline float swabfloat(float w) { /* compile time assertion to validate sizeof(int) == sizeof(float) */ typedef int sizeof_long_equals_sizeof_float[sizeof(int) == sizeof(float) ? 1 : -1]; int l = swabdword(*(int*)&w); return *(float*)&l; } #elif defined(__APPLE__) && defined(_BIG_ENDIAN) #include #define swabword(w) CFSwapInt32(w) #define swabdword(w) CFSwapInt64(w) #define swabfloat(w) (w) #else // empty versions for win32 #define swabword(w) (w) #define swabdword(w) (w) #define swabfloat(w) (w) #endif #endif springlobby-0.169/src/qt/battlelistmodel.cpp0000600000176000000410000000540112105760300022526 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include "battlelistmodel.h" #include #include #include BattlelistModel::BattlelistModel(const wxString& modname, QObject *parent) : QAbstractListModel(parent), m_modname( modname ) { QHash roles; roles[Description] = "description"; roles[Mapname] = "mapname"; roles[Founder] = "founder"; roles[PlayerCurrent] = "playerCurrent"; roles[PlayerMax] = "playerMax"; roles[BattleId] = "battleId"; setRoleNames(roles); } BattlelistModel::~BattlelistModel() {} int BattlelistModel::rowCount(const QModelIndex&/*parent*/ ) const { return m_battles.size(); } QVariant BattlelistModel::data(const QModelIndex &index, int role ) const { int row = index.row(); if ( !index.isValid() || row >= m_battles.size() || !(m_battles[row]) ) return QVariant(); const Battle& battle = *m_battles[row]; switch ( role ) { case Mapname:{ return FromwxString( battle.GetHostMapName() ); } case Founder: return FromwxString( battle.GetFounder().GetNick() ); case PlayerMax: return QVariant::fromValue( battle.GetMaxPlayers() ); case PlayerCurrent: return QVariant::fromValue( battle.GetNumPlayers() ); case BattleId: return QVariant::fromValue( battle.GetID() ); case Description: default: { return FromwxString( battle.GetDescription() ); } } } void BattlelistModel::reload() { m_battles.clear(); reset(); BattleList_Iter* iter = (serverSelector().GetServer().battles_iter); if ( !iter ) return; iter->IteratorBegin(); while( !(iter->EOL()) ) { Battle* battle = iter->GetBattle(); if ( battle && battle->GetHostModName().Contains( _T("Evolu") ) ) m_battles.append( battle ); } beginInsertRows(QModelIndex(), 0, m_battles.size() ); endInsertRows(); } int BattlelistModel::battle_count() { BattleList_Iter* iter = (serverSelector().GetServer().battles_iter); return iter ? iter->GetNumBattles() : -1; } springlobby-0.169/src/qt/battlelistmodel.h0000600000176000000410000000267712105760300022207 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #ifndef BATTLELISTMODEL_H #define BATTLELISTMODEL_H #ifdef SL_QT_MODE #include #include class wxString; class Battle; class BattlelistModel : public QAbstractListModel { Q_OBJECT public: explicit BattlelistModel( const wxString& modname, QObject *parent = 0); virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; void reload(); ~BattlelistModel(); enum Roles { Description = Qt::UserRole + 1, Mapname,Founder,PlayerMax,PlayerCurrent,BattleId }; public slots: int battle_count(); private: const wxString& m_modname; QList m_battles; }; #endif // #ifdef SL_QT_MODE #endif // BATTLELISTMODEL_H springlobby-0.169/src/qt/converters.cpp0000600000176000000410000001106212105760300021530 0ustar buildbotwww-data00000000000000#include "converters.h" #include #include #include #include #include #include "wx/gdicmn.h" #include "wx/gdicmn.h" #include "wx/window.h" #include #include #include #include #if wxUSE_DATETIME #include "wx/datetime.h" #include #endif // wxUSE_DATETIME wxPoint wxQtConvertPoint( const QPoint &point ) { if (point.isNull()) return wxDefaultPosition; return wxPoint( point.x(), point.y() ); } QPoint wxQtConvertPoint( const wxPoint &point ) { if (point == wxDefaultPosition) return QPoint(); return QPoint( point.x, point.y ); } QRect wxQtConvertRect( const wxRect &rect ) { return QRect( rect.GetX(), rect.GetY(), rect.GetWidth(), rect.GetHeight() ); } wxRect wxQtConvertRect( const QRect &rect ) { return wxRect( rect.x(), rect.y(), rect.width(), rect.height() ); } //wxString wxQtConvertString( const QString &str ) //{ // return wxString( qPrintable( str )); //} QString wxQtConvertString( const wxString &str ) { return QString( str.mb_str() ); } #if wxUSE_DATETIME wxDateTime wxQtConvertDate(const QDate& date) { if ( date.isNull() ) return wxDateTime(date.day(), static_cast(date.month() - 1), date.year(), 0, 0, 0, 0); else return wxDateTime(); } QDate wxQtConvertDate(const wxDateTime& date) { if ( date.IsValid() ) return QDate(date.GetYear(), date.GetMonth() + 1, date.GetDay()); else return QDate(); } #endif // wxUSE_DATETIME wxSize wxQtConvertSize( const QSize &size ) { if (size.isNull()) return wxDefaultSize; return wxSize(size.width(), size.height()); } QSize wxQtConvertSize( const wxSize &size ) { if (size == wxDefaultSize) return QSize(); return QSize(size.GetWidth(), size.GetHeight()); } Qt::Orientation wxQtConvertOrientation( long style, wxOrientation defaultOrientation ) { if (( style & ( wxHORIZONTAL | wxVERTICAL )) == 0 ) style |= defaultOrientation; switch ( style & ( wxHORIZONTAL | wxVERTICAL )) { case wxHORIZONTAL: return Qt::Horizontal; case wxVERTICAL: return Qt::Vertical; } wxFAIL_MSG( "Unreachable code!" ); return static_cast< Qt::Orientation >( -1 ); } wxOrientation wxQtConvertOrientation( Qt::Orientation qtOrientation ) { switch ( qtOrientation ) { case Qt::Horizontal: return wxHORIZONTAL; case Qt::Vertical: return wxVERTICAL; } wxFAIL_MSG( "Unreachable code!" ); return static_cast< wxOrientation >( -1 ); } #include "wx/bitmap.h" #include "wx/image.h" #include #include #include wxImage wxQtConvertImage( QImage qtImage ) { bool hasAlpha = qtImage.hasAlphaChannel(); int numPixels = qtImage.height() * qtImage.width(); //Convert to ARGB32 for scanLine qtImage = qtImage.convertToFormat(QImage::Format_ARGB32); unsigned char *data = (unsigned char *)malloc(sizeof(char) * 3 * numPixels); unsigned char *startData = data; unsigned char *alpha = NULL; if (hasAlpha) alpha = (unsigned char *)malloc(sizeof(char) * numPixels); unsigned char *startAlpha = alpha; for (int y = 0; y < qtImage.height(); y++) { QRgb *line = (QRgb*)qtImage.scanLine(y); for (int x = 0; x < qtImage.width(); x++) { QRgb colour = line[x]; data[0] = qRed(colour); data[1] = qGreen(colour); data[2] = qBlue(colour); if (hasAlpha) { alpha[0] = qAlpha(colour); alpha++; } data += 3; } } if (hasAlpha) return wxImage(qtImage.width(), qtImage.height(), startData, startAlpha); else return wxImage(qtImage.width(), qtImage.height(), startData); } QImage wxQtConvertImage( const wxImage &image ) { bool hasAlpha = image.HasAlpha(); bool hasMask = image.HasMask(); wxSize size ( image.GetWidth(), image.GetHeight() ); QImage qtImage( wxQtConvertSize( size ), ( (hasAlpha || hasMask ) ? QImage::Format_ARGB32 : QImage::Format_RGB32 ) ); unsigned char *data = image.GetData(); unsigned char *alpha = hasAlpha ? image.GetAlpha() : NULL; QRgb colour; QRgb maskedColour; if ( hasMask ) { unsigned char r, g, b; image.GetOrFindMaskColour( &r, &g, &b ); maskedColour = ( r << 16 ) + ( g << 8 ) + b; } for (int y = 0; y < image.GetHeight(); y++) { for (int x = 0; x < image.GetWidth(); x++) { if (hasAlpha) { colour = alpha[0] << 24; alpha++; } else colour = 0; colour += (data[0] << 16) + (data[1] << 8) + data[2]; if ( hasMask && colour != maskedColour ) colour += 0xFF000000; // 255 << 24 qtImage.setPixel(x, y, colour); data += 3; } } return qtImage; } springlobby-0.169/src/qt/converters.h0000600000176000000410000000414612105760300021202 0ustar buildbotwww-data00000000000000#ifndef CONVERTERS_H #define CONVERTERS_H /** this code was copied from the wxQT branch of wxWidgets **/ #ifdef SL_QT_MODE /////////////////////////////////////////////////////////////////////////////// // Name: wx/qt/converter.h // Purpose: Converter utility classes and functions // Author: Peter Most, Kolya Kosenko // Created: 02/28/10 // RCS-ID: $Id$ // Copyright: (c) Peter Most // (c) 2010 Kolya Kosenko // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// #include "wx/defs.h" #include // Rely on overloading and let the compiler pick the correct version, which makes // them easier to use then to write wxQtConvertQtRectToWxRect() or wxQtConvertWxRectToQtRect() class WXDLLIMPEXP_FWD_CORE wxPoint; class QPoint; wxPoint wxQtConvertPoint( const QPoint &point ); QPoint wxQtConvertPoint( const wxPoint &point ); class WXDLLIMPEXP_FWD_CORE wxRect; class QRect; wxRect wxQtConvertRect( const QRect &rect ); QRect wxQtConvertRect( const wxRect &rect ); class WXDLLIMPEXP_FWD_BASE wxString; class QString; wxString wxQtConvertString( const QString &str ); QString wxQtConvertString( const wxString &str ); #if wxUSE_DATETIME class WXDLLIMPEXP_FWD_BASE wxDateTime; class QDate; wxDateTime wxQtConvertDate(const QDate& date); QDate wxQtConvertDate(const wxDateTime& date); #endif // wxUSE_DATETIME class WXDLLIMPEXP_FWD_BASE wxSize; class QSize; wxSize wxQtConvertSize( const QSize &size ); QSize wxQtConvertSize( const wxSize &size ); Qt::Orientation wxQtConvertOrientation( long style, wxOrientation defaultOrientation ); wxOrientation wxQtConvertOrientation( Qt::Orientation ); void wxMissingImplementation( const char fileName[], unsigned lineNumber, const char feature[] ); #define wxMISSING_IMPLEMENTATION( feature )\ wxMissingImplementation( __FILE__, __LINE__, feature ) class QImage; class wxImage; QImage wxQtConvertImage( const wxImage &image ); wxImage wxQtConvertImage( QImage qtImage ); /** ****************************************************** **/ #endif //#ifdef SL_QT_MODE #endif // CONVERTERS_H springlobby-0.169/src/qt/engineconfig.cpp0000600000176000000410000001574212105760300022002 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include "engineconfig.h" #include #include #include #include #include #include "../settings++/presets.h" /** * @brief POSIX file locking class */ class ScopedFileLock { public: ScopedFileLock(int fd, bool write); ~ScopedFileLock(); private: int filedes; }; /** * @brief lock fd * * Lock file descriptor fd for reading (write == false) or writing * (write == true). */ ScopedFileLock::ScopedFileLock(int fd, bool write) : filedes(fd) { #ifndef _WIN32 struct flock lock; lock.l_type = write ? F_WRLCK : F_RDLCK; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len = 0; if (fcntl(filedes, F_SETLKW, &lock)) { // not a fatal error //handleerror(0, "Could not lock config file", "DotfileHandler", 0); } #endif } /** * @brief unlock fd */ ScopedFileLock::~ScopedFileLock() { #ifndef _WIN32 struct flock lock; lock.l_type = F_UNLCK; lock.l_whence = SEEK_SET; lock.l_start = 0; lock.l_len = 0; if (fcntl(filedes, F_SETLKW, &lock)) { // not a fatal error //handleerror(0, "Could not unlock config file", "DotfileHandler", 0); } #endif } EngineConfig::EngineConfig() { } EngineConfig::EngineConfig( const QString& filename, const QString& id ) { load( filename, id ); } bool EngineConfig::load( const QString& filename, const QString& id ) { data_.clear(); filename_ = filename; id_ = id; FILE* file; if ((file = fopen(filename_.toStdString().c_str(), "r"))) { ScopedFileLock scoped_lock(fileno(file), false); Read(file); } else { if (!(file = fopen(filename_.toStdString().c_str(), "a"))) throw std::runtime_error("DotfileHandler: Could not write to config file"); return false; } fclose(file); return true; } void EngineConfig::commit() const { foreach( DataContainerType::value_type entry, data_ ) { susynclib().SetSpringConfigString( TowxString( entry.first ), TowxString( entry.second ) ); } wxString id = TowxString( id_ ); wxString key = _T("sasi/last_used_preset"); sett().Set( key, id ); } char* Strip(char* begin, char* end) { while (isspace(*begin)) ++begin; while (end >= begin && isspace(*end)) --end; *(end + 1) = '\0'; return begin; } void EngineConfig::Read(FILE* file) { char buf[500]; rewind(file); while (fgets(buf, sizeof(buf), file)) AppendLine(buf); } void EngineConfig::AppendLine(char* line) { char* line_stripped = Strip(line, strchr(line, '\0')); if (*line_stripped != '\0') { // line is not empty if (line_stripped[0] == '#') { // a comment line return; } char* eq = strchr(line_stripped, '='); if (eq) { // a "key=value" line char* key = Strip(line_stripped, eq - 1); char* value = Strip(eq + 1, strchr(eq + 1, 0) - 1); data_[key] = value; } } } PresetModel::PresetModel(QObject *parent ) :QAbstractListModel( parent ) { reload( ); } void PresetModel::reload() { wxString key = _T("sasi/last_used_preset"); QString last_id = ToQString( sett().Get( key, wxEmptyString ) ); presets_.clear(); QDir preset_dir( SLcustomizations().DataBasePath() + "/presets/" ); QStringList nameFilter; nameFilter << "*.conf"; QFileInfo current_file; foreach( current_file, preset_dir.entryInfoList( nameFilter, QDir::Files ) ) { QString id = current_file.fileName().replace(".conf",""); presets_.append( std::make_pair( EngineConfig( current_file.absoluteFilePath(), id ), id ) ); if ( id == last_id ) last_sessions_index_ = presets_.size() - 1; } } int PresetModel::lastSessionIndex() const { return last_sessions_index_; } int PresetModel::rowCount(const QModelIndex &/*parent*/ ) const { return presets_.size(); } QVariant PresetModel::data(const QModelIndex &index, int /*role*/ ) const { int row = index.row(); if ( !index.isValid() || row >= presets_.size() ) return QVariant(); return QVariant::fromValue(presets_[row].second); } QString PresetModel::name(int index) const { if ( index < presets_.size() ) return presets_[index].second; return QString(); } void PresetModel::use(int index) const { static bool first_use = true; if ( first_use ) { first_use = false; return;// we don't want to commit when the model is first loaded } if ( index > -1 && index < presets_.size() ) { const EngineConfig& config = presets_[index].first; config.commit(); } else qDebug() << "void PresetModel::use(int index) const OOB " << index; } ScreenResolutionModel::ScreenResolutionModel(QObject *parent ) :QAbstractListModel( parent ) { reload( ); } void ScreenResolutionModel::reload() { wxString key = _T("sasi/last_used_resolution"); QString last_id = ToQString( sett().Get( key, wxEmptyString ) ); resolutions_.clear(); for ( int i = 0; i < vl_Resolution_Str_size; ++i ) { const ScreenResolution res( vl_Resolution_X[i], vl_Resolution_Y[i], i > vl_Resolution_startOfDualScreenRes); QString id = res.toString(); resolutions_.append( res ); if ( id == last_id ) last_sessions_index_ = resolutions_.size() - 1; } } int ScreenResolutionModel::lastSessionIndex() const { return last_sessions_index_; } int ScreenResolutionModel::rowCount(const QModelIndex &/*parent*/ ) const { return resolutions_.size(); } QVariant ScreenResolutionModel::data(const QModelIndex &index, int /*role*/ ) const { int row = index.row(); if ( !index.isValid() || row >= resolutions_.size() ) return QVariant(); return QVariant::fromValue(resolutions_[row].toString()); } QString ScreenResolutionModel::name(int index) const { if ( index < resolutions_.size() ) return resolutions_[index].toString(); return QString(); } QString ScreenResolutionModel::ScreenResolution::toString() const { return QString( "%1 x %2").arg( width ).arg( height ); } void ScreenResolutionModel::use(int index) const { static bool first_use = true; if ( first_use ) { first_use = false; return;// we don't want to commit when the model is first loaded } if ( index > 0 && index < resolutions_.size() ) { const ScreenResolution& res = resolutions_[index]; susynclib().SetSpringConfigInt( _T("XResolution"), res.width ); susynclib().SetSpringConfigInt( _T("YResolution"), res.height ); susynclib().SetSpringConfigInt( _T("DualScreenMode"), res.dualscreen ); wxString id = TowxString( res.toString() ); wxString key = _T("sasi/last_used_resolution"); sett().Set( key, id ); } else qDebug() << "void ScreenResolutionModel::use(int index) const OOB " << index; } springlobby-0.169/src/qt/engineconfig.h0000600000176000000410000000525712105760300021447 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef SPRINGLOBBY_HEADERGUARD_ENGINECONFIG_H #define SPRINGLOBBY_HEADERGUARD_ENGINECONFIG_H #ifdef SL_QT_MODE #include #include #include #include #include class EngineConfig; class PresetModel : public QAbstractListModel { Q_OBJECT public: explicit PresetModel(QObject *parent = 0); virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; public slots: QString name(int index) const; void use(int index) const; int lastSessionIndex() const; private: void reload(); typedef QList > ContainerType; ContainerType presets_; int last_sessions_index_; }; //! essential config read stuff from engine class EngineConfig { public: EngineConfig(); EngineConfig( const QString& filename, const QString& id ); bool load( const QString& filename, const QString& id ); void commit() const; QString filename(); private: // helper functions void Read(FILE* file); void AppendLine(char* line); QString filename_; QString id_; typedef std::map DataContainerType; DataContainerType data_; }; class ScreenResolutionModel : public QAbstractListModel { Q_OBJECT public: explicit ScreenResolutionModel(QObject *parent = 0); virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; public slots: QString name(int index) const; void use(int index) const; int lastSessionIndex() const; private: struct ScreenResolution { ScreenResolution( const int w, const int h, const bool dual ) :width(w),height(h),dualscreen(dual) {} /*const */int width; /*const */int height; /*const */bool dualscreen; QString toString() const; }; void reload(); typedef QList ContainerType; ContainerType resolutions_; int last_sessions_index_; }; #endif // #ifdef SL_QT_MODE #endif // SPRINGLOBBY_HEADERGUARD_ENGINECONFIG_H springlobby-0.169/src/qt/exceptions.cpp0000600000176000000410000000041612105760300021520 0ustar buildbotwww-data00000000000000#include "exceptions.h" content_exception::content_exception(const std::string &missing_file) :m_missing_file(missing_file) {} const char* content_exception::what() const throw() { std::string msg = "Missing file: " + m_missing_file; return msg.c_str(); } springlobby-0.169/src/qt/exceptions.h0000600000176000000410000000053412105760300021166 0ustar buildbotwww-data00000000000000#ifndef EXCEPTIONS_H #define EXCEPTIONS_H #include #include class content_exception : public std::exception { const std::string m_missing_file; public: content_exception( const std::string& missing_file ); const char* what() const throw() ; virtual ~content_exception() throw() {} }; #endif // EXCEPTIONS_H springlobby-0.169/src/qt/imageprovider.cpp0000600000176000000410000000571612105760300022204 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include "imageprovider.h" #include #include #include #include #include #include QImage GraphicsProvider::requestImage ( const QString & id, QSize * size, const QSize & requestedSize ) { QImage img( SLcustomizations().GraphicsDir() + "/" + id );//.scaled( requestedSize ); int width = requestedSize.width() > 0 ? requestedSize.width() : img.width(); int height = requestedSize.height() > 0 ? requestedSize.height() : img.height(); if (size) *size = QSize(width,height); return img.scaled( width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); } QImage MinimapImageProvider::requestImage ( const QString & id, QSize * size, const QSize & requestedSize ) { int width = requestedSize.width() > 0 ? requestedSize.width() : 1024; int height = requestedSize.height() > 0 ? requestedSize.height() : 1024; const wxImage h = usync().GetMinimap( TowxString( id ), width, height ); if (size) *size = QSize(width,height); const QImage q = wxQtConvertImage( h ); assert( !q.isNull() ); return q.scaled( width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); } QImage SideImageProvider::requestImage ( const QString & id, QSize * size, const QSize & requestedSize ) { int width = requestedSize.width() > 0 ? requestedSize.width() : 16; int height = requestedSize.height() > 0 ? requestedSize.height() : 16; if (size) *size = QSize(width,height); QImage img; if ( !img.load( SLcustomizations().GraphicsDir() + "/sidepics/" + id + ".png" ) ) img.load( SLcustomizations().GraphicsDir() + "/sidepics/" + id.toLower() + ".png" ); return img.scaled( width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); } QImage VfsImageProvider::requestImage ( const QString & id, QSize * size, const QSize & requestedSize ) { int width = requestedSize.width() > 0 ? requestedSize.width() : 1024; int height = requestedSize.height() > 0 ? requestedSize.height() : 1024; wxImage h; try { h = usync().GetImage( SLcustomizations().GetModname(), TowxString( id ), false ); } catch ( std::exception& e ) { } if (size) *size = QSize(width,height); const QImage q = wxQtConvertImage( h ); return q.scaled( width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); } springlobby-0.169/src/qt/imageprovider.h0000600000176000000410000000440412105760300021642 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef IMAGEPROVIDER_H #define IMAGEPROVIDER_H #ifdef SL_QT_MODE #include class GraphicsProvider : public QDeclarativeImageProvider { public: GraphicsProvider() : QDeclarativeImageProvider(QDeclarativeImageProvider::Image) { } virtual QImage requestImage ( const QString & id, QSize * size, const QSize & requestedSize ); QDeclarativeImageProvider::ImageType imageType () const { return QDeclarativeImageProvider::Image; } }; class MinimapImageProvider : public QDeclarativeImageProvider { public: MinimapImageProvider() : QDeclarativeImageProvider(QDeclarativeImageProvider::Image) { } virtual QImage requestImage ( const QString & id, QSize * size, const QSize & requestedSize ); QDeclarativeImageProvider::ImageType imageType () const { return QDeclarativeImageProvider::Image; } }; class SideImageProvider : public QDeclarativeImageProvider { public: SideImageProvider() : QDeclarativeImageProvider(QDeclarativeImageProvider::Image) { } virtual QImage requestImage ( const QString & id, QSize * size, const QSize & requestedSize ); QDeclarativeImageProvider::ImageType imageType () const { return QDeclarativeImageProvider::Image; } }; class VfsImageProvider : public QDeclarativeImageProvider { public: VfsImageProvider() : QDeclarativeImageProvider(QDeclarativeImageProvider::Image) { } virtual QImage requestImage ( const QString & id, QSize * size, const QSize & requestedSize ); QDeclarativeImageProvider::ImageType imageType () const { return QDeclarativeImageProvider::Image; } }; #endif //#ifdef SL_QT_MODE #endif // IMAGEPROVIDER_H springlobby-0.169/src/qt/maplistmodel.cpp0000600000176000000410000000272512105760300022036 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include "maplistmodel.h" #include MaplistModel::MaplistModel(const wxArrayString& map_names, QObject *parent ) :QAbstractListModel( parent ) { reload( map_names ); } void MaplistModel::reload( const wxArrayString& map_names ) { m_map_names.clear(); wxString mapname; foreach (mapname, map_names ) { m_map_names.append( QString(mapname.mb_str()) ); } } int MaplistModel::rowCount(const QModelIndex &parent ) const { return m_map_names.size(); } QVariant MaplistModel::data(const QModelIndex &index, int role ) const { int row = index.row(); if ( !index.isValid() || row >= m_map_names.size() ) return QVariant(); return QVariant::fromValue(m_map_names[row]); } QString MaplistModel::name(int index) const { if ( index < m_map_names.size() ) return m_map_names[index]; return QString(); } springlobby-0.169/src/qt/maplistmodel.h0000600000176000000410000000250512105760300021477 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef MAPLISTMODEL_H #define MAPLISTMODEL_H #ifdef SL_QT_MODE #include #include #include class wxArrayString; class MaplistModel : public QAbstractListModel { Q_OBJECT public: explicit MaplistModel(const wxArrayString& map_names, QObject *parent = 0); virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; void reload( const wxArrayString& map_names ); public slots: QString name(int index) const; private: typedef QStringList ContainerType; ContainerType m_map_names; }; #endif // #ifdef SL_QT_MODE #endif // MAPLISTMODEL_H springlobby-0.169/src/qt/missionmodel.cpp0000600000176000000410000000612712105760300022046 0ustar buildbotwww-data00000000000000#include "missionmodel.h" #include "springunitsynclib.h" #include "customizations.h" #include "exceptions.h" #include #include MissionModel::MissionModel(QObject *parent) : QAbstractListModel(parent) { wxString mission_dir; std::string md = SLcustomizations().DataBasePath().append( "/missions/" ).toStdString(); wxArrayString mission_dirs = susynclib().SubDirsVFS( TowxString(md), _T("*"), _T("r") );//only raw vfs part foreach( mission_dir, mission_dirs ) { // try { const wxArrayString mission_pics = susynclib().DirListVFS( mission_dir, _T("*.png"), _T("r") ); if ( mission_pics.size() < 1 ) throw content_exception( QString( "mission pic in ").append(ToQString(mission_dir)).toStdString() ); const wxString image = mission_pics[0]; const wxArrayString mission_scripts = susynclib().DirListVFS( mission_dir, _T("*.script"), _T("r") ); if ( mission_scripts.size() < 1 ) throw content_exception( QString( "mission script in ").append(ToQString(mission_dir)).toStdString() ); const wxString script = mission_scripts[0]; const wxArrayString mission_txt = susynclib().DirListVFS( mission_dir, _T("*.txt"), _T("r") ); if ( mission_txt.size() < 1 ) throw content_exception( QString( "mission description in ").append(ToQString(mission_dir)).toStdString() ); const wxString content = usync().GetTextfileAsString( SLcustomizations().GetModname(), mission_txt[0] ); const wxString title = content.BeforeFirst( '\n' ); const wxString intro = content.AfterFirst( '\n' ); Mission m; m.intro = ToQString( intro ); m.title = ToQString( title ); m.script = ToQString( script ); m.image = ToQString( image ); qDebug() << m.title << " " << m.script << " " << ToQString( mission_dir ); m_missions.append( m ); } // catch ( std::exception& e ) { continue; } } QHash roles; roles[Intro] = "intro"; roles[Script] = "script"; roles[Image] = "image"; roles[Title] = "title"; setRoleNames(roles); } int MissionModel::rowCount(const QModelIndex &/*parent*/) const { return m_missions.size(); } QVariant MissionModel::data(const QModelIndex &index, int role) const { int row = index.row(); if ( /*!index.isValid() || */row >= m_missions.size()/* || !(m_missions[row])*/ ) return QVariant(); const Mission& mission = m_missions[row]; switch ( role ) { case Intro: return QVariant::fromValue( mission.intro ); case Image: return QVariant::fromValue( mission.image ); default: case Title: return QVariant::fromValue( mission.title ); case Script: return QVariant::fromValue( mission.script ); } } //QString MissionModel::title(int index) const //{ //} //QString MissionModel::script(int index) const //{ //} //QString MissionModel::intro(int index) const //{ //} springlobby-0.169/src/qt/missionmodel.h0000600000176000000410000000163112105760300021506 0ustar buildbotwww-data00000000000000#ifndef MISSIONMODEL_H #define MISSIONMODEL_H #ifdef SL_QT_MODE #include #include struct Mission //: public QObject { QString title; QString script; QString intro; QString image; }; class MissionModel : public QAbstractListModel { Q_OBJECT public: explicit MissionModel(QObject *parent = 0); virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; enum Roles { Intro = Qt::UserRole + 1, Script,Image,Title }; signals: public slots: // QString title(int index) const; // QString script(int index) const; // QString intro(int index) const; private: typedef QList ContainerType; ContainerType m_missions; }; #endif //#ifdef SL_QT_MODE #endif // MISSIONMODEL_H springlobby-0.169/src/qt/noguisingleplayerbattle.cpp0000600000176000000410000000412512105760300024274 0ustar buildbotwww-data00000000000000#include "noguisingleplayerbattle.h" #include "settings.h" #include "spring.h" #include "springunitsynclib.h" /** @brief StartSpring * * @todo: document this function */ void NoGuiSinglePlayerBattle::StartSpring() { spring().Run( *this ); // ui().OnSpringStarting(); //stops torrent system } /** @brief NoGuiSinglePlayerBattle * * @todo: document this function */ NoGuiSinglePlayerBattle::NoGuiSinglePlayerBattle() : m_me( User( usync().IsLoaded() ? usync().GetDefaultNick() : _T("invalid") ) ) { OnUserAdded( m_me ); m_me.BattleStatus().colour = sett().GetBattleLastColour(); SetFounder( m_me.GetNick() ); } int NoGuiSinglePlayerBattle::GetAiIndex( const wxString& name ) { int total = susynclib().GetSkirmishAICount( m_host_mod.name ); for ( int i = 0; i < total; i++ ) { wxArrayString infos = susynclib().GetAIInfo( i ); int namepos = infos.Index( _T("shortName") ); // int versionpos = infos.Index( _T("version") ); wxString ainame; if ( namepos != wxNOT_FOUND ) ainame += infos[namepos +1]; if ( ainame == name ) return i; // if ( versionpos != wxNOT_FOUND ) ainame += _T(" ") + infos[versionpos +1]; } return -1; } int NoGuiSinglePlayerBattle::GetSideIndex( const wxString& name ) { wxArrayString sides = usync().GetSides( m_host_mod.name ); for ( int i = 0; i < (int)sides.Count(); ++i ) { if ( name.CmpNoCase( sides[i] ) == 0 ) return i; } return -1; } bool NoGuiSinglePlayerBattle::AddBot( const wxString& name, int ai_team_id, const wxString& side ) { int ai_id = GetAiIndex( name ); if ( ai_id > -1 ) { UserBattleStatus bs; bs.owner = GetMe().GetNick(); bs.aishortname = name; bs.aitype = ai_id; bs.team = ai_team_id; bs.ally = GetFreeAlly(); bs.colour = GetNewColour(); bs.side = GetSideIndex( side ); //first arg is nick User& bot = OnBotAdded( name + _T("_") + TowxString( bs.team ), bs ); return true; } return false; } springlobby-0.169/src/qt/noguisingleplayerbattle.h0000600000176000000410000000315112105760300023737 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef NOGUISINGLEPLAYERBATTLE_H #define NOGUISINGLEPLAYERBATTLE_H #include "../ibattle.h" #include "../user.h" class wxString; /** A derivative used in the Simple interface Has no GUI tie-ins like SingelPlayerBattle and provides some functions to translate from the mod customization settings to our IBattle logic. **/ class NoGuiSinglePlayerBattle : public IBattle { public: NoGuiSinglePlayerBattle (); virtual ~NoGuiSinglePlayerBattle () {} void StartSpring(); bool IsFounderMe() const { return true; } User& GetMe() { return m_me; } const User& GetMe() const { return m_me; } bool AddBot( const wxString& name, int team_id, const wxString& side ); //! returns -1 on fail, otherwise usnyc index that matches the given name int GetSideIndex( const wxString& name ); protected: //! returns -1 on fail, otherwise usnyc index that matches the given name int GetAiIndex( const wxString& name ); User m_me; }; #endif // NOGUISINGLEPLAYERBATTLE_H springlobby-0.169/src/qt/qbattleroom.cpp0000600000176000000410000000434012105760300021670 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include "qbattleroom.h" #include #include #include #include QBattleroom::QBattleroom(QDeclarativeItem *parent) : QDeclarativeItem(parent), m_battle(0), m_battle_id(-1) { const IServerEvents* events = serverSelector().GetServer().serverEvents(); assert( events ); if ( events ) { connect( events, SIGNAL(saidBattle( int, const QString&, const QString& )), this, SLOT(onSaidBattle( int, const QString&, const QString& ))); } } void QBattleroom::setBattleId( int id ) { if ( id == m_battle_id ) return; m_battle_id = id; //find and set battle and stuff try { m_battle = &serverSelector().GetServer().GetBattle( id ); Battle* my_battle = serverSelector().GetServer().GetMe().GetBattle(); if ( my_battle && m_battle != my_battle ) my_battle->Leave(); } catch ( ... ) {} m_battle->Join(); emit battleIdChanged(); emit descriptionChanged(); } int QBattleroom::battleId() const { return m_battle_id; } QString QBattleroom::description()const { return m_battle ? FromwxString( m_battle->GetDescription() ) : "none" ; } void QBattleroom::say(const QString& text ) { if (!m_battle) return; m_battle->Say( TowxString( text ) ); } void QBattleroom::onSaidBattle( int battleid, const QString& nick, const QString& msg ) { m_chats[battleid] << QString( "<%1> %2" ).arg( nick, msg ); emit chatTextChanged(); } QString QBattleroom::chatText() const { const ChatMapType::const_iterator it = m_chats.find( m_battle_id ); return m_battle && (it!=m_chats.end()) ? it->second.join("\n") : QString(); } springlobby-0.169/src/qt/qbattleroom.h0000600000176000000410000000316312105760300021337 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #ifndef QBATTLEROOM_H #define QBATTLEROOM_H #ifdef SL_QT_MODE #include #include #include class Battle; class QBattleroom : public QDeclarativeItem { Q_OBJECT Q_PROPERTY(int battleId READ battleId WRITE setBattleId NOTIFY battleIdChanged) Q_PROPERTY(QString description READ description NOTIFY descriptionChanged) Q_PROPERTY(QString chatText READ chatText NOTIFY chatTextChanged) public: explicit QBattleroom(QDeclarativeItem *parent = 0); int battleId() const; void setBattleId( int id ); QString description()const; QString chatText()const; signals: void battleIdChanged(); void descriptionChanged(); void chatTextChanged(); public slots: void say(const QString& text ); void onSaidBattle( int battleid, const QString& nick, const QString& msg ); private: Battle* m_battle; int m_battle_id; typedef std::map< int, QStringList > ChatMapType; ChatMapType m_chats; }; #endif //#ifdef SL_QT_MODE #endif // QBATTLEROOM_H springlobby-0.169/src/qt/qerrorwindow.h0000600000176000000410000000324612105760300021552 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef SPRINGLOBBY_HEADERGUARD_QERRORWINDOW_H #define SPRINGLOBBY_HEADERGUARD_QERRORWINDOW_H #ifdef SL_QT_MODE #include #include #include #include class QErrorWindow : public QDialog { Q_OBJECT public: template explicit QErrorWindow(const QList& errors, QWidget *parent = 0); }; namespace { template void appendErrorToTextEdit( const T& error, QTextEdit* text ) { text->append( error.toString() ); } template <> void appendErrorToTextEdit( const QString& error, QTextEdit* text ) { QString f = error; text->append( f ); } } template QErrorWindow::QErrorWindow(const QList& errors, QWidget *parent) : QDialog(parent) { setFixedSize(800,600); QVBoxLayout* layout = new QVBoxLayout(this); QTextEdit* text = new QTextEdit(this); T error; foreach( error, errors ) { appendErrorToTextEdit( error, text ); } layout->addWidget(text,1); setLayout(layout); } #endif // #ifdef SL_QT_MODE #endif // SPRINGLOBBY_HEADERGUARD_QERRORWINDOW_H springlobby-0.169/src/qt/qminimap.cpp0000600000176000000410000000667512105760300021167 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include "qminimap.h" #include #include #include #include QMinimap::QMinimap(QDeclarativeItem *parent) : QDeclarativeItem(parent), m_battle(0), m_battle_id(-1) { setFlag(QGraphicsItem::ItemHasNoContents, false); } void QMinimap::paint(QPainter* painter, const QStyleOptionGraphicsItem* /*option*/, QWidget* /*widget*/ ) { painter->setRenderHints(QPainter::Antialiasing, true); const QRectF bounds = boundingRect(); painter->drawImage( bounds ,m_minimap_image ); if (!m_battle) return; const IBattle::StartType position_type = IBattle::StartType(s2l( m_battle->CustomBattleOptions().getSingleValue( _T("startpostype"), OptionsWrapper::EngineOption ) )); switch ( position_type ) { case IBattle::ST_Fixed: case IBattle::ST_Pick: drawStartRects( painter ); break; case IBattle::ST_Choose: default: drawStartPos( painter ); } } void QMinimap::drawStartRects(QPainter* painter) { for ( int i = 0; i <= int(m_battle->GetLastRectIdx()); ++i ) { QRect sr = transformStartRect( m_battle->GetStartRect(i) ); if ( sr.isEmpty() ) continue; QColor col; if ( i == m_battle->GetMe().BattleStatus().ally ) col.setRgb( 0, 200, 0 ); else col.setRgb( 200, 0, 0 ); painter->setPen(QPen (col, 2)); painter->setBrush(QBrush(col, Qt::BDiagPattern)); painter->drawRect( sr ); painter->drawText( sr.center(), QString( "Ally: %1" ).arg( i ) ); } } void QMinimap::drawStartPos(QPainter* painter) { if (!m_battle) return; const QRectF mr = boundingRect(); } void QMinimap::setBattleId( int id ) { if ( id == m_battle_id ) return; m_battle_id = id; try { m_battle = &serverSelector().GetServer().GetBattle( id ); } catch ( ... ) {} if (!m_battle) { emit battleIdChanged(); return; } const wxString mapname = m_battle->GetHostMapName(); m_battle->LoadMap(); const QRectF bounds = boundingRect(); const int width = bounds.width(); const int height = bounds.height(); const wxImage h = usync().GetMinimap( mapname, width, height ); const QImage q = wxQtConvertImage( h ); assert( !q.isNull() ); m_minimap_image = q.scaled( width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); update(); emit battleIdChanged(); } int QMinimap::battleId() const { return m_battle_id; } void QMinimap::onBattleinfoUpdated( int id ) { if ( id == m_battle_id ) return; update(); } QRect QMinimap::transformStartRect( const BattleStartRect& sr ) const { int x1,y1,x2,y2; if ( !sr.exist || sr.todelete ) return QRect(); QRectF mr = boundingRect(); x1 = int( (mr.x() + sr.left * mr.width() / 200.0) + 0.5 ); y1 = int( (mr.y() + sr.top * mr.height() / 200.0) + 0.5 ); x2 = int( (mr.x() + sr.right * mr.width() / 200.0) + 0.5 ); y2 = int( (mr.y() + sr.bottom * mr.height() / 200.0) + 0.5 ); return QRect( x1, y1, x2-x1, y2-y1 ); } springlobby-0.169/src/qt/qminimap.h0000600000176000000410000000321712105760300020621 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #ifndef QMINIMAP_H #define QMINIMAP_H #ifdef SL_QT_MODE #include class Battle; class BattleStartRect; class QMinimap : public QDeclarativeItem { Q_OBJECT Q_PROPERTY(int battleId READ battleId WRITE setBattleId NOTIFY battleIdChanged) public: explicit QMinimap(QDeclarativeItem *parent = 0); int battleId() const; void setBattleId( int id ); signals: void battleIdChanged(); public slots: void onBattleinfoUpdated( int battleId ); protected: // void mousePressEvent(QGraphicsSceneMouseEvent* event); // void mouseMoveEvent(QGraphicsSceneMouseEvent* event); // void mouseReleaseEvent(QGraphicsSceneMouseEvent* event); void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0); QRect transformStartRect( const BattleStartRect& sr ) const; void drawStartRects(QPainter* painter); void drawStartPos(QPainter* painter); Battle* m_battle; int m_battle_id; QImage m_minimap_image; }; #endif // #ifdef SL_QT_MODE #endif // QMINIMAP_H springlobby-0.169/src/qt/qml.local.pri0000600000176000000410000000170012105760300021226 0ustar buildbotwww-data00000000000000QML_IMPORT_PATH += "/opt/spring/lobby/SpringLobby/customizations/EvoRTS/qml" OTHER_FILES += /opt/spring/lobby/SpringLobby/customizations/EvoRTS/qml/*.qml \ /opt/spring/lobby/SpringLobby/customizations/EvoRTS/qml/views/*.qml \ /opt/spring/lobby/SpringLobby/customizations/EvoRTS/qml/web/*.qml \ /opt/spring/data/lobby/SpringLobby/customizations/EvoRTS/qml/views/Settings.qml \ /opt/spring/data/lobby/SpringLobby/customizations/EvoRTS/qml/views/BattleListDelegate.qml \ /opt/spring/data/lobby/SpringLobby/customizations/EvoRTS/qml/views/SubView.qml \ /opt/spring/data/lobby/SpringLobby/customizations/EvoRTS/qml/views/MultiplayerMenu.qml \ /opt/spring/data/lobby/SpringLobby/customizations/EvoRTS/qml/views/Quickmatch.qml \ ../../../../../../../opt/spring/lobby/SpringLobby/customizations/EvoRTS/qml/views/MissionDelegate.qml \ ../../../../../../../opt/spring/lobby/SpringLobby/customizations/EvoRTS/qml/views/MissionView.qml springlobby-0.169/src/qt/qml.local.pri.s440000600000176000000410000000062312105760300021642 0ustar buildbotwww-data00000000000000QML_IMPORT_PATH += "/share/spring/data/lobby/SpringLobby/customizations/S44/qml" OTHER_FILES += /share/spring/data/lobby/SpringLobby/customizations/S44/qml/*.qml \ /share/spring/data/lobby/SpringLobby/customizations/S44/qml/views/*.qml \ /share/spring/data/lobby/SpringLobby/customizations/S44/qml/web/*.qml \ ../../../../../spring/data/lobby/SpringLobby/customizations/S44/qml/views/Settings.qml springlobby-0.169/src/qt/qmlapplicationviewer.pri0000600000176000000410000001342512105760300023612 0ustar buildbotwww-data00000000000000# checksum 0x8396 version 0x3000a # This file was generated by the Qt Quick Application wizard of Qt Creator. # The code below adds the QmlApplicationViewer to the project and handles the # activation of QML debugging. # It is recommended not to modify this file, since newer versions of Qt Creator # may offer an updated version of it. QT += declarative INCLUDEPATH += $$PWD defineTest(minQtVersion) { maj = $$1 min = $$2 patch = $$3 isEqual(QT_MAJOR_VERSION, $$maj) { isEqual(QT_MINOR_VERSION, $$min) { isEqual(QT_PATCH_VERSION, $$patch) { return(true) } greaterThan(QT_PATCH_VERSION, $$patch) { return(true) } } greaterThan(QT_MINOR_VERSION, $$min) { return(true) } } return(false) } contains(DEFINES, QMLJSDEBUGGER) { CONFIG(debug, debug|release) { !minQtVersion(4, 7, 1) { warning() warning("Disabling QML debugging:") warning() warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") warning("This library requires Qt 4.7.1 or newer.") warning() DEFINES -= QMLJSDEBUGGER } else:isEmpty(QMLJSDEBUGGER_PATH) { warning() warning("Disabling QML debugging:") warning() warning("Debugging QML requires the qmljsdebugger library that ships with Qt Creator.") warning("Please specify its location on the qmake command line, eg") warning(" qmake -r QMLJSDEBUGGER_PATH=$CREATORDIR/share/qtcreator/qmljsdebugger") warning() DEFINES -= QMLJSDEBUGGER } else { include($$QMLJSDEBUGGER_PATH/qmljsdebugger-lib.pri) } } else { DEFINES -= QMLJSDEBUGGER } } # This file was generated by an application wizard of Qt Creator. # The code below handles deployment to Symbian and Maemo, aswell as copying # of the application data to shadow build directories on desktop. # It is recommended not to modify this file, since newer versions of Qt Creator # may offer an updated version of it. defineTest(qtcAddDeployment) { for(deploymentfolder, DEPLOYMENTFOLDERS) { item = item$${deploymentfolder} itemsources = $${item}.sources $$itemsources = $$eval($${deploymentfolder}.source) itempath = $${item}.path $$itempath= $$eval($${deploymentfolder}.target) export($$itemsources) export($$itempath) DEPLOYMENT += $$item } MAINPROFILEPWD = $$PWD symbian { isEmpty(ICON):exists($${TARGET}.svg):ICON = $${TARGET}.svg isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x20000 0x2000000 } else:win32 { copyCommand = for(deploymentfolder, DEPLOYMENTFOLDERS) { source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) source = $$replace(source, /, \\) sourcePathSegments = $$split(source, \\) target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments) target = $$replace(target, /, \\) !isEqual(source,$$target) { !isEmpty(copyCommand):copyCommand += && copyCommand += $(COPY_DIR) \"$$source\" \"$$target\" } } !isEmpty(copyCommand) { copyCommand = @echo Copying application data... && $$copyCommand copydeploymentfolders.commands = $$copyCommand first.depends = $(first) copydeploymentfolders export(first.depends) export(copydeploymentfolders.commands) QMAKE_EXTRA_TARGETS += first copydeploymentfolders } } else:unix { maemo5 { installPrefix = /opt/usr desktopfile.path = /usr/share/applications/hildon } else { installPrefix = /usr/local desktopfile.path = /usr/share/applications copyCommand = for(deploymentfolder, DEPLOYMENTFOLDERS) { source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source) source = $$replace(source, \\, /) macx { target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target) } else { target = $$OUT_PWD/$$eval($${deploymentfolder}.target) } target = $$replace(target, \\, /) sourcePathSegments = $$split(source, /) targetFullPath = $$target/$$last(sourcePathSegments) !isEqual(source,$$targetFullPath) { !isEmpty(copyCommand):copyCommand += && copyCommand += $(MKDIR) \"$$target\" copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\" } } !isEmpty(copyCommand) { copyCommand = @echo Copying application data... && $$copyCommand copydeploymentfolders.commands = $$copyCommand first.depends = $(first) copydeploymentfolders export(first.depends) export(copydeploymentfolders.commands) QMAKE_EXTRA_TARGETS += first copydeploymentfolders } } for(deploymentfolder, DEPLOYMENTFOLDERS) { item = item$${deploymentfolder} itemfiles = $${item}.files $$itemfiles = $$eval($${deploymentfolder}.source) itempath = $${item}.path $$itempath = $${installPrefix}/share/$${TARGET}/$$eval($${deploymentfolder}.target) export($$itemfiles) export($$itempath) INSTALLS += $$item } icon.files = $${TARGET}.png icon.path = /usr/share/icons/hicolor/64x64/apps desktopfile.files = $${TARGET}.desktop target.path = $${installPrefix}/bin export(icon.files) export(icon.path) export(desktopfile.files) export(desktopfile.path) export(target.path) INSTALLS += desktopfile icon target } export (ICON) export (DEPLOYMENT) export (TARGET.EPOCHEAPSIZE) export (TARGET.CAPABILITY) export (LIBS) } springlobby-0.169/src/qt/sasi.pro0000600000176000000410000001771212105760300020323 0ustar buildbotwww-data00000000000000#include(qmlapplicationviewer.pri) # Additional import path used to resolve QML modules in Creator's code model include(qml.local.pri) # Avoid auto screen rotation #DEFINES += ORIENTATIONLOCK # Needs to be defined for Symbian DEFINES += NETWORKACCESS symbian:TARGET.UID3 = 0xE1BC102A # Define QMLJSDEBUGGER to allow debugging of QML in debug builds # (This might significantly increase build time) DEFINES += QMLJSDEBUGGER # If your application uses the Qt Mobility libraries, uncomment # the following lines and add the respective components to the # MOBILITY variable. # CONFIG += mobility # MOBILITY += QT += network opengl webkit declarative # PKGCONFIG += vorbis vorbisfile # LIBS += -lvorbisfile -lvorbis -logg # The .cpp file which was generated for your project. Feel free to hack it. SOURCES += sasi_main.cpp \ imageprovider.cpp \ converters.cpp \ skirmishmodel.cpp \ noguisingleplayerbattle.cpp \ ../Helper/TextCompletionDatabase.cpp \ ../utils/activitynotice.cpp \ ../chatpanelmenu.cpp \ ../gui/gradientpanel.cpp \ ../gui/toasternotification.cpp \ ../gui/wxgradientbutton.cpp \ ../gui/wxbackgroundimage.cpp \ ../gui/statusbar.cpp \ ../aui/slbook.cpp \ ../utils/math.cpp \ ../utils/misc.cpp \ ../gui/pastedialog.cpp \ ../utils/tasutil.cpp \ ../utils/networkevents.cpp \ ../utils/md5.c \ ../Helper/imageviewer.cpp \ ../Helper/slhtmlwindow.cpp \ ../channel/channelchooser.cpp \ ../channel/channelchooserdialog.cpp \ ../Helper/wxtextctrlhist.cpp \ ../Helper/colorbutton.cpp \ ../filelister/filelistctrl.cpp \ ../filelister/filelistdialog.cpp \ ../filelister/filelistfilter.cpp \ ../aui/auimanager.cpp \ ../aui/artprovider.cpp \ ../autobalancedialog.cpp \ ../autohost.cpp \ ../channel/autojoinchanneldialog.cpp \ ../addbotdialog.cpp \ ../agreementdialog.cpp \ ../base64.cpp \ ../battle.cpp \ ../battlelist.cpp \ ../battlelistctrl.cpp \ ../battlelistfilter.cpp \ ../battlelisttab.cpp \ ../battlemaptab.cpp \ ../battleoptionstab.cpp \ ../battleroomlistctrl.cpp \ ../battleroomtab.cpp \ ../crc.cpp \ ../channel/channel.cpp \ ../channel/channellist.cpp \ ../channel/channellistctrl.cpp \ ../chatlog.cpp \ ../chatoptionstab.cpp \ ../chatpanel.cpp \ ../connectwindow.cpp \ ../countrycodes.cpp \ ../customlistctrl.cpp \ ../flagimages.cpp \ ../groupoptionspanel.cpp \ ../hostbattledialog.cpp \ ../ibattle.cpp \ ../iconimagelist.cpp \ ../introguide.cpp \ ../lobbyoptionstab.cpp \ ../mainchattab.cpp \ ../mainjoinbattletab.cpp \ ../mainoptionstab.cpp \ ../mainsingleplayertab.cpp \ ../maintorrenttab.cpp \ ../mainwindow.cpp \ ../mapctrl.cpp \ ../mapgridctrl.cpp \ ../mapselectdialog.cpp \ ../mmoptionwindows.cpp \ ../nicklistctrl.cpp \ ../offlinebattle.cpp \ ../playback/replaylist.cpp \ ../playback/savegamelist.cpp \ ../alsound.cpp \ ../selectusersdialog.cpp \ ../server.cpp \ ../reconnectdialog.cpp \ ../serverevents.cpp \ ../singleplayerbattle.cpp \ ../singleplayertab.cpp \ ../socket.cpp \ ../spring.cpp \ ../springoptionstab.cpp \ ../springprocess.cpp \ ../tasserver.cpp \ ../tdfcontainer.cpp \ ../torrentlistctrl.cpp \ ../torrentoptionspanel.cpp \ ../torrentwrapper.cpp \ ../ui.cpp \ ../user.cpp \ ../useractions.cpp \ ../userlist.cpp \ ../utils/downloader.cpp \ ../utils/plasmaresourceinfo.cpp \ ../utils/battleevents.cpp \ ../utils/pathlistfactory.cpp \ ../Helper/tasclientimport.cpp \ simpleserverevents.cpp \ ../toasterbox/ToasterBox.cpp \ ../toasterbox/ToasterBoxWindow.cpp \ ../toasterbox/ToasterBoxWindowList.cpp \ ../gui/notificationmanager.cpp \ ../pingthread.cpp \ ../iserverevents.cpp \ ../utils/curlhelper.cpp \ ../customizations.cpp \ ../uiutils.cpp \ ../updater/versionchecker.cpp \ ../updater/updatehelper.cpp \ ../utils/controls.cpp \ ../utils/conversion.cpp \ ../utils/customdialogs.cpp \ ../utils/debug.cpp \ ../utils/globalevents.cpp \ ../utils/platform.cpp \ ../utils/sltipwin.cpp \ ../utils/uievents.cpp \ ../crashreport.cpp \ ../globalsmanager.cpp \ ../mmoptionmodel.cpp \ ../mmoptionswrapper.cpp \ ../settings.cpp \ ../springunitsynclib.cpp \ ../springunitsync.cpp \ ../thread.cpp \ ../gui/windowattributespickle.cpp \ ../gui/spinctl/generic/spinctlg.cpp \ ../Helper/slconfig.cpp \ maplistmodel.cpp \ sidemodel.cpp \ audio/audiomanager.cpp \ audio/VorbisShared.cpp \ audio/OggStream.cpp \ audio/ALShared.cpp \ FileHandler.cpp \ sasi_app.cpp \ audio/SoundBuffer.cpp \ engineconfig.cpp \ ../infodialog.cpp \ battlelistmodel.cpp \ qbattleroom.cpp \ qminimap.cpp \ missionmodel.cpp \ exceptions.cpp HEADERS += \ ../springunitsynclib.h \ ../globalsmanager.h \ ../settings.h \ ../Helper/slconfig.h \ ../utils/platform.h \ ../utils/misc.h \ ../utils/curlhelper.h \ ../springunitsync.h \ ../springprocess.h \ ../iunitsync.h \ ../thread.h \ ../utils/uievents.h \ ../utils/globalevents.h \ ../mmoptionswrapper.h \ ../mmoptionmodel.h \ ../uiutils.h \ ../utils/customdialogs.h \ ../customizations.h \ ../utils/conversion.h \ ../Helper/qtargparser/QtArg/xorarg.hpp \ ../Helper/qtargparser/QtArg/visitor.hpp \ ../Helper/qtargparser/QtArg/multiarg.hpp \ ../Helper/qtargparser/QtArg/helpiface.hpp \ ../Helper/qtargparser/QtArg/help.hpp \ ../Helper/qtargparser/QtArg/exceptions.hpp \ ../Helper/qtargparser/QtArg/cmdlineiface.hpp \ ../Helper/qtargparser/QtArg/cmdlinecontext.hpp \ ../Helper/qtargparser/QtArg/cmdline.hpp \ ../Helper/qtargparser/QtArg/argconstraint.hpp \ ../Helper/qtargparser/QtArg/arg.hpp \ imageprovider.h \ converters.h \ skirmishmodel.h \ simpleserverevents.h \ ../user.h \ ../ibattle.h \ ../iconimagelist.h \ ../userlist.h \ ../chatpanel.h \ ../spring.h \ ../ui.h \ ../tdfcontainer.h \ noguisingleplayerbattle.h \ ../battle.h \ ../Helper/TextCompletionDatabase.hpp \ ../channel/channel.h \ ../chatlog.h \ ../aui/auimanager.h \ ../flagimages.h \ ../flagimagedata.h \ ../server.h \ ../mainwindow.h \ ../chatpanelmenu.h \ ../nicklistctrl.h \ ../tasserver.h \ ../utils/battleevents.h \ ../battlelisttab.h \ ../autohost.h \ ../gui/pastedialog.h \ ../Helper/wxtextctrlhist.h \ ../mainchattab.h \ ../reconnectdialog.h \ ../mainjoinbattletab.h \ ../battleroomtab.h \ maplistmodel.h \ qerrorwindow.h \ sidemodel.h \ audio/audiomanager.h \ audio/VorbisShared.h \ audio/OggStream.h \ audio/ALShared.h \ FileHandler.h \ sasi_app.h \ audio/SoundBuffer.h \ engineconfig.h \ battlelistmodel.h \ ../socket.h \ qbattleroom.h \ ../iserverevents.h \ qminimap.h \ missionmodel.h \ exceptions.h INCLUDEPATH += .. INCLUDEPATH += . INCLUDEPATH += ../Helper/qtargparser DEFINES += SL_QT_MODE NO_TORRENT_SYSTEM DISABLE_SOUND PKGCONFIG += openal sdl vorbis ogg vorbisfile unix { CONFIG += link_pkgconfig PKGCONFIG += libcurl libsdl LIBS += $$system(wx-config --libs --unicode=yes) QMAKE_CXXFLAGS += $$system(wx-config --cxxflags) } win32 { CONFIG += release CONFIG += exceptions LIBS += $$system(i686-pc-mingw32-wx-config --libs) QMAKE_CXXFLAGS += $$system(i686-pc-mingw32-wx-config --cxxflags) QMAKE_CXXFLAGS += -DAL_LIBTYPE_STATIC LIBS += -lz -lgnutls -lws2_32 -liphlpapi -lgcrypt -liconv -lgpg-error LIBS += -lOpenAL32 -lidn -lwldap32 -lSDL -lSDL_sound -lvorbisenc -lvorbisfile -luuid -lvorbis -logg } OTHER_FILES += \ ../Helper/qtargparser/QtArg/XorArg \ ../Helper/qtargparser/QtArg/Visitor \ ../Helper/qtargparser/QtArg/MultiArg \ ../Helper/qtargparser/QtArg/Help \ ../Helper/qtargparser/QtArg/Exceptions \ ../Helper/qtargparser/QtArg/CmdLineContext \ ../Helper/qtargparser/QtArg/CmdLine \ ../Helper/qtargparser/QtArg/ArgConstraint \ ../Helper/qtargparser/QtArg/Arg CONFIG(debug, debug|release) { DESTDIR = ../qt-build/debug } else { DESTDIR = ../qt-build/release } INSTALLS += sasi sasi.path = $(DESTDIR)/sasi springlobby-0.169/src/qt/sasi.pro.user.2.2pre50000600000176000000410000004643012105760300022373 0ustar buildbotwww-data00000000000000 ProjectExplorer.Project.ActiveTarget 0 ProjectExplorer.Project.EditorSettings true false System false false 4 true 2 false false false 0 4 true 1 true true true false ProjectExplorer.Project.Target.0 Desktop Desktop Qt4ProjectManager.Target.DesktopTarget 1 0 0 ProjectExplorer.ToolChain.Gcc:/home/kosh/local/bin/g++.x86-linux-generic-elf-64bit. qmake QtProjectManager.QMakeBuildStep false false Make Qt4ProjectManager.MakeStep false 2 Build ProjectExplorer.BuildSteps.Build Make Qt4ProjectManager.MakeStep true 1 Clean ProjectExplorer.BuildSteps.Clean 2 false 4.7.2 Release Qt4ProjectManager.Qt4BuildConfiguration 0 /share/projekte/spring/settings/src/qt 9 ProjectExplorer.ToolChain.Gcc:/home/kosh/local/bin/g++.x86-linux-generic-elf-64bit. false ProjectExplorer.ToolChain.Gcc:/home/kosh/local/bin/g++.x86-linux-generic-elf-64bit. qmake QtProjectManager.QMakeBuildStep false false Make Qt4ProjectManager.MakeStep false 2 Build ProjectExplorer.BuildSteps.Build Make Qt4ProjectManager.MakeStep true 1 Clean ProjectExplorer.BuildSteps.Clean 2 false Qt in PATH Release Qt4ProjectManager.Qt4BuildConfiguration 0 /share/projekte/spring/settings/src/qt 2 ProjectExplorer.ToolChain.Gcc:/home/kosh/local/bin/g++.x86-linux-generic-elf-64bit. false ProjectExplorer.ToolChain.Gcc:/home/kosh/local/bin/g++.x86-linux-generic-elf-64bit. qmake QtProjectManager.QMakeBuildStep false false Make Qt4ProjectManager.MakeStep false 2 Build ProjectExplorer.BuildSteps.Build Make Qt4ProjectManager.MakeStep true 1 Clean ProjectExplorer.BuildSteps.Clean 2 false Qt in PATH Debug Qt4ProjectManager.Qt4BuildConfiguration 2 /share/projekte/spring/settings/src/qt 2 ProjectExplorer.ToolChain.Gcc:/home/kosh/local/bin/g++.x86-linux-generic-elf-64bit. false 3 0 Deploy ProjectExplorer.BuildSteps.Deploy 1 No deployment ProjectExplorer.DefaultDeployConfiguration 1 true 25 true valgrind 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 sasi Qt4ProjectManager.Qt4RunConfiguration 2 sasi.pro false false 3768 true false 1 ProjectExplorer.Project.TargetCount 1 ProjectExplorer.Project.Updater.EnvironmentId {d8f6d1f1-a46f-4df4-8902-d6cdae451153} ProjectExplorer.Project.Updater.FileVersion 9 springlobby-0.169/src/qt/sasi.pro.user.2.3pre10000600000176000000410000004664012105760300022373 0ustar buildbotwww-data00000000000000 ProjectExplorer.Project.ActiveTarget 0 ProjectExplorer.Project.EditorSettings true false System false false 4 true 2 false false false 0 4 true 1 true true true false ProjectExplorer.Project.Target.0 Desktop Desktop Qt4ProjectManager.Target.DesktopTarget 0 0 0 ProjectExplorer.ToolChain.Gcc:/home/kosh/local/bin/g++.x86-linux-generic-elf-64bit. qmake QtProjectManager.QMakeBuildStep false false Make Qt4ProjectManager.MakeStep false 2 Build ProjectExplorer.BuildSteps.Build Make Qt4ProjectManager.MakeStep true clean 1 Clean ProjectExplorer.BuildSteps.Clean 2 false Qt in PATH Release Qt4ProjectManager.Qt4BuildConfiguration 0 /share/projekte/spring/settings/src/qt 2 ProjectExplorer.ToolChain.Gcc:/home/kosh/local/bin/g++.x86-linux-generic-elf-64bit. false ProjectExplorer.ToolChain.Gcc:/home/kosh/local/bin/g++.x86-linux-generic-elf-64bit. qmake QtProjectManager.QMakeBuildStep false false Make Qt4ProjectManager.MakeStep false 2 Build ProjectExplorer.BuildSteps.Build Make Qt4ProjectManager.MakeStep true clean 1 Clean ProjectExplorer.BuildSteps.Clean 2 false Qt in PATH Release Qt in PATH Release2 Qt4ProjectManager.Qt4BuildConfiguration 0 /share/projekte/spring/settings/src/qt 2 ProjectExplorer.ToolChain.Gcc:/home/kosh/local/bin/g++.x86-linux-generic-elf-64bit. false ProjectExplorer.ToolChain.Gcc:/home/kosh/local/bin/g++.x86-linux-generic-elf-64bit. qmake QtProjectManager.QMakeBuildStep false false Make Qt4ProjectManager.MakeStep false 2 Build ProjectExplorer.BuildSteps.Build Make Qt4ProjectManager.MakeStep true clean 1 Clean ProjectExplorer.BuildSteps.Clean 2 false Qt in PATH Debug Qt4ProjectManager.Qt4BuildConfiguration 2 /share/projekte/spring/settings/src/qt 2 ProjectExplorer.ToolChain.Gcc:/home/kosh/local/bin/g++.x86-linux-generic-elf-64bit. false 3 0 Deploy ProjectExplorer.BuildSteps.Deploy 1 No deployment ProjectExplorer.DefaultDeployConfiguration 1 true 25 true valgrind 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 sasi Qt4ProjectManager.Qt4RunConfiguration 2 -f /home/kosh/.springlobby/testing.conf -c evo_custom-sl.sdd -s EvoRTS -r "\$VERSION" -n EvoLobby sasi.pro false false 3768 true false 1 ProjectExplorer.Project.TargetCount 1 ProjectExplorer.Project.Updater.EnvironmentId {d8f6d1f1-a46f-4df4-8902-d6cdae451153} ProjectExplorer.Project.Updater.FileVersion 9 springlobby-0.169/src/qt/sasi.pro.user.2.5pre10000600000176000000410000005161612105760300022374 0ustar buildbotwww-data00000000000000 ProjectExplorer.Project.ActiveTarget 0 ProjectExplorer.Project.EditorSettings true false true Cpp CppGlobal QmlJS QmlJSGlobal 2 System false 4 false true 2 false 0 false 0 4 true 1 true true true false ProjectExplorer.Project.PluginSettings ProjectExplorer.Project.Target.0 Desktop Desktop Qt4ProjectManager.Target.DesktopTarget 2 0 0 ProjectExplorer.ToolChain.Gcc:/usr/local/bin/g++.x86-linux-generic-elf-64bit./usr/bin/gdb qmake QtProjectManager.QMakeBuildStep false false false Make Qt4ProjectManager.MakeStep false -j3 2 Build ProjectExplorer.BuildSteps.Build Make Qt4ProjectManager.MakeStep true clean 1 Clean ProjectExplorer.BuildSteps.Clean 2 false Qt in PATH Release Qt4ProjectManager.Qt4BuildConfiguration 2 /share/projekte/spring/settings/src/qt 2 false ProjectExplorer.ToolChain.Gcc:/usr/local/bin/g++.x86-linux-generic-elf-64bit./usr/bin/gdb qmake QtProjectManager.QMakeBuildStep false false false Make Qt4ProjectManager.MakeStep false 2 Build ProjectExplorer.BuildSteps.Build Make Qt4ProjectManager.MakeStep true clean 1 Clean ProjectExplorer.BuildSteps.Clean 2 false Qt in PATH Release Qt in PATH Release2 Qt4ProjectManager.Qt4BuildConfiguration 0 /share/projekte/spring/settings/src/qt 2 false ProjectExplorer.ToolChain.Gcc:/usr/local/bin/g++.x86-linux-generic-elf-64bit./usr/bin/gdb qmake QtProjectManager.QMakeBuildStep false false false Make Qt4ProjectManager.MakeStep false 2 Build ProjectExplorer.BuildSteps.Build Make Qt4ProjectManager.MakeStep true clean 1 Clean ProjectExplorer.BuildSteps.Clean 2 false Qt in PATH Debug Qt4ProjectManager.Qt4BuildConfiguration 2 /share/projekte/spring/settings/src/qt 2 false 3 0 Deploy ProjectExplorer.BuildSteps.Deploy 1 No deployment ProjectExplorer.DefaultDeployConfiguration 1 true false false false false true 0.01 10 true 25 true valgrind 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 sasi Qt4ProjectManager.Qt4RunConfiguration 2 -f /home/kosh/.springlobby/testing.conf -c evo_custom-sl.sdd -s EvoRTS -r "\$VERSION" -n EvoLobby sasi.pro false false 3768 true false false 1 ProjectExplorer.Project.TargetCount 1 ProjectExplorer.Project.Updater.EnvironmentId {d8f6d1f1-a46f-4df4-8902-d6cdae451153} ProjectExplorer.Project.Updater.FileVersion 10 springlobby-0.169/src/qt/sasi_app.cpp0000600000176000000410000002546612105760300021152 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include "sasi_app.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //filesystem zip handler #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "audio/audiomanager.h" #include "imageprovider.h" #include "converters.h" #include "maplistmodel.h" #include "skirmishmodel.h" #include "sidemodel.h" #include "qerrorwindow.h" #include "engineconfig.h" #include #include "battlelistmodel.h" #include "server.h" #include #include #include "qbattleroom.h" #include "qminimap.h" #include "missionmodel.h" #ifdef __WXMSW__ #include void sleep(int n) { Sleep(1000 * n); } #endif #if defined(Q_WS_X11) && !defined(QT_NO_DEBUG) //QGlWidget segfaults in debug builds.. #define USE_OPENGL 0 #else #define USE_OPENGL 1 #endif SasiApp::SasiApp(int argc, char *argv[]) : QApplication(argc,argv) { QCoreApplication::addLibraryPath( QCoreApplication::applicationDirPath() ); setOrganizationName("SpringLobby"); setOrganizationDomain("SpringLobby.info"); qmlRegisterType("Sasi", 1, 0, "Battleroom"); qmlRegisterType("Sasi", 1, 0, "ExtendedMinimap"); // QIcon icon( wxBitmap(SLcustomizations().GetAppIcon()) ); // setWindowIcon( icon ); } SasiApp::~SasiApp() { // delete bl_model; // delete m_server; } int SasiApp::exec() { QSplashScreen* splash = 0; QPixmap splash_pixmap; QWidget* show_screen = desktop()->screen( 0 ); QString qmldir; try { qmldir = SLcustomizations().QmlDir(); } catch ( Customizations::DataException& e ) { //for some fucked up reason the strings get internally fucked up w/o the hardcopy QList copy = e.errors_; QErrorWindow error_win ( copy ); return error_win.exec(); } if ( splash_pixmap.load( SLcustomizations().GraphicsDir() + "/splash.png" ) ) { splash = new QSplashScreen(show_screen,splash_pixmap); splash->show(); } // usync().FastLoadUnitSyncLibInit( ); usync().ReloadUnitSyncLib( ); QDeclarativeView view(show_screen); AudioManager audio_manager (this); audio_manager.start(); view.engine()->addImportPath( qmldir ); #ifdef __WXMSW__ //for webkit declarative plugin view.engine()->addImportPath( QDir( QCoreApplication::applicationDirPath() + "/imports").absolutePath() ); #endif // Visual initialization view.engine()->addImageProvider("minimaps", new MinimapImageProvider); view.engine()->addImageProvider("graphics", new GraphicsProvider); view.engine()->addImageProvider("sides", new SideImageProvider); view.engine()->addImageProvider("vfs", new VfsImageProvider); #if USE_OPENGL QGLFormat format = QGLFormat::defaultFormat(); #ifdef Q_WS_MAC format.setSampleBuffers(true); #else format.setSampleBuffers(false); #endif QGLWidget *glWidget = new QGLWidget(format, &view); view.setViewport(glWidget); view.setViewportUpdateMode(QGraphicsView::MinimalViewportUpdate); #endif view.setAttribute(Qt::WA_OpaquePaintEvent); view.setAttribute(Qt::WA_NoSystemBackground); view.setResizeMode(QDeclarativeView::SizeRootObjectToView); // m_server = new TASServer( IServerEvents::simple ); // serverSelector().SetCurrentServer( m_server ); // const wxString servername = sett().GetDefaultServer(); // const wxString username = sett().GetServerAccountNick( servername ); // const wxString password = sett().GetServerAccountPass( servername ); // serverSelector().GetServer().SetUsername( username ); // serverSelector().GetServer().SetPassword( password ); // if ( sett().GetServerAccountSavePass( servername ) ) // { // if ( serverSelector().GetServer().IsPasswordHash(password) ) sett().SetServerAccountPass( servername, password ); // else sett().SetServerAccountPass( servername, serverSelector().GetServer().GetPasswordHash( password ) ); // } // else // { // sett().SetServerAccountPass( servername, _T("") ); // } // const wxString host = sett().GetServerHost( servername ); // const int port = sett().GetServerPort( servername ); // serverSelector().GetServer().Connect( servername, host, port ); UnitSyncMod mod = usync().GetMod( SLcustomizations().Archive() ); usync().GetSides(SLcustomizations().Archive() ); //reordering will prolly break stuff like sides list MaplistModel maplist_model( usync().GetMapList() ); MissionModel mission_model(this); SkirmishModel skirmish_model; PresetModel preset_model(this); ScreenResolutionModel screenres_model(this); SideModel side_model( SLcustomizations().GetModname() ); // //! TODO switch bakc to modname // wxString modname = SLcustomizations().GetModname(); // bl_model = new BattlelistModel( modname.SubString(0,10), this ); // serverSelector().GetServer().Update( 100 ); spring().connect( &spring(), SIGNAL(springStarted()), &audio_manager, SLOT(pause())); spring().connect( &spring(), SIGNAL(springStopped()), &audio_manager, SLOT(resume())); QObject::connect((QObject*)view.engine(), SIGNAL(quit()), this, SLOT(quit())); QObject::connect((QObject*)view.engine(), SIGNAL(quit()), &audio_manager, SLOT(doQuit())); QDeclarativeContext* ctxt = view.rootContext(); ctxt->setContextProperty("maplistModel", &maplist_model ); ctxt->setContextProperty("skirmishModel", &skirmish_model ); ctxt->setContextProperty("sideModel", &side_model ); ctxt->setContextProperty("audioManager", &audio_manager ); ctxt->setContextProperty("presetModel", &preset_model ); ctxt->setContextProperty("screenresModel", &screenres_model ); ctxt->setContextProperty("missionModel", &mission_model ); // ctxt->setContextProperty("battlelistModel", bl_model); const int sleep_seconds = -1; for ( int i = sleep_seconds; splash && i > 0; i-- ) { splash->showMessage( QString("sleeping for %1 seconds, just to show you this").arg( i ), Qt::AlignHCenter | Qt::AlignBottom ); processEvents(); sleep( 1 ); } // view.showFullScreen(); if ( splash ) splash->finish(&view); view.setSource(QUrl(qmldir + "/main.qml")); QObject::connect(this, SIGNAL(appLoaded()), (QObject*)view.rootObject(), SLOT(onAppLoaded())); QList errors = view.errors(); if ( errors.size() ) { QErrorWindow error_window ( errors ); return error_window.exec(); } // QTimer *timer = new QTimer(this); // connect(timer, SIGNAL(timeout()), this, SLOT(Update())); // timer->start(100); // bl_model->reload(); view.show(); view.setFocus(); emit appLoaded(); int ret = QApplication::exec(); // serverSelector().GetServer().Disconnect(); audio_manager.wait( 5 /*seconds*/ ); sett().SaveSettings(); return ret; } bool SasiApp::CmdInit() { PwdGuard pwd_guard;//makes us invulnerabel to cwd changes in usync loading QtArgCmdLine cmd; QtArg config_file( 'f', "config-file", "absolute path to config file", false, true ); QtArg shortname( 's', "shortname", "shortname.", true, true ); QtArg version( 'r', "revision", "revision.", true, true ); QtArg appname( 'n', "name", "name", true, true ); cmd.addArg( config_file ); cmd.addArg( shortname ); cmd.addArg( version ); cmd.addArg( appname ); QtArgDefaultHelpPrinter helpPrinter( "Testing help printing.\n" ); QtArgHelp help( &cmd ); help.setPrinter( &helpPrinter ); try { cmd.parse(); } catch( const QtHelpHasPrintedEx & x ) { } catch( const QtArgBaseException & x ) { qDebug() << x.what(); QMessageBox::critical( 0, "Fatal error", QString("Parsing command line failed:\n").append(x.what()) ); return false; } Settings::m_user_defined_config = config_file.isPresent(); if ( Settings::m_user_defined_config ) { Settings::m_user_defined_config_path = TowxString( config_file.value().toString() ); qDebug() << ToQString( Settings::m_user_defined_config_path ); } #ifdef __WXMSW__ sett().SetSearchSpringOnlyInSLPath( false ); #endif QString shortname_value = shortname.value().toString(); QString version_value = version.value().toString(); setApplicationName(appname.value().toString()); //must go BEFORE usync loading sett().SetForcedSpringConfigFilePath( GetCustomizedEngineConfigFilePath() ); // sett().SetSpringBinary( sett().GetCurrentUsedSpringIndex(), sett().GetCurrentUsedSpringBinary() ); // sett().SetUnitSync( sett().GetCurrentUsedSpringIndex(), sett().GetCurrentUsedUnitSync() ); qDebug() << "current used usync path" << ToQString(sett().GetCurrentUsedUnitSync()) ; if ( !wxDirExists( GetConfigfileDir() ) ) wxMkdir( GetConfigfileDir() ); wxLogChain* logchain = 0; wxLog::SetActiveTarget( new wxLogChain( new wxLogStream( &std::cout ) ) ); //this needs to called _before_ mainwindow instance is created wxInitAllImageHandlers(); wxFileSystem::AddHandler(new wxZipFSHandler); wxSocketBase::Initialize(); usync().FastLoadUnitSyncLib( sett().GetCurrentUsedUnitSync() ); qDebug() << QString( "shortname: %1").arg( shortname_value ); if ( !SLcustomizations().Init( shortname_value, version_value ) ) { qDebug() << "init false"; QMessageBox::critical( 0, "Fatal error", QString("loading customizations failed for ").append( shortname_value ) ); return false; } return true; } //void SasiApp::Update() //{ // static unsigned int count = 0; // serverSelector().GetServer().Update( 100 ); // count++; // if ( count % 113 == 0 ) // bl_model->reload(); //} springlobby-0.169/src/qt/sasi_app.h0000600000176000000410000000212312105760300020600 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef SASI_APP_H #define SASI_APP_H #ifdef SL_QT_MODE #include class BattlelistModel; class TASServer; class SasiApp : public QApplication { Q_OBJECT public: explicit SasiApp(int argc, char *argv[]); bool CmdInit(); ~SasiApp(); int exec(); signals: void appLoaded(); public slots: // void Update(); private: // BattlelistModel* bl_model; // TASServer* m_server; }; #endif // #ifdef SL_QT_MODE #endif // SASI_APP_H springlobby-0.169/src/qt/sasi_main.cpp0000600000176000000410000000032312105760300021277 0ustar buildbotwww-data00000000000000#include "sasi_app.h" #include int main(int argc, char *argv[]) { SasiApp app(argc, argv); if ( !app.CmdInit() ) return 1; const int ret = app.exec(); DestroyGlobals(); return ret; } springlobby-0.169/src/qt/sidemodel.cpp0000600000176000000410000000232412105760300021304 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include "sidemodel.h" #include SideModel::SideModel(const wxString& modname, QObject *parent) : QAbstractListModel(parent) { wxString name; foreach( name, usync().GetSides( modname ) ) m_sidenames.append( ToQString( name ) ); } int SideModel::rowCount(const QModelIndex &parent ) const { return m_sidenames.size(); } QVariant SideModel::data(const QModelIndex &index, int role ) const { int row = index.row(); if ( !index.isValid() || row >= m_sidenames.size() ) return QVariant(); return QVariant::fromValue( m_sidenames[row] ); } springlobby-0.169/src/qt/sidemodel.h0000600000176000000410000000225012105760300020747 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef SIDEMODEL_H #define SIDEMODEL_H #ifdef SL_QT_MODE #include #include class wxString; class SideModel : public QAbstractListModel { Q_OBJECT public: explicit SideModel( const wxString& modname, QObject *parent = 0); virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; signals: public slots: private: QList m_sidenames; }; #endif //#ifdef SL_QT_MODE #endif // SIDEMODEL_H springlobby-0.169/src/qt/simpleserverevents.cpp0000600000176000000410000007016112105760300023310 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: SimpleSimpleServerEvents // #ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include #include #include "../channel/channel.h" #include "../user.h" #include "../utils/debug.h" #include "../utils/battleevents.h" #include "../server.h" #include "../battle.h" #include "../httpdownloader.h" #include "../settings.h" #include "../utils/customdialogs.h" #include "../utils/tasutil.h" #include "../utils/uievents.h" #include "../globalsmanager.h" #include "simpleserverevents.h" BEGIN_EVENT_TABLE(SimpleServerEvents, wxEvtHandler) EVT_COMMAND(wxID_ANY, httpDownloadEvtComplete, SimpleServerEvents::OnSpringDownloadEvent) EVT_COMMAND(wxID_ANY, httpDownloadEvtFailed, SimpleServerEvents::OnSpringDownloadEvent) END_EVENT_TABLE() void SimpleServerEvents::OnConnected( const wxString& /*server_name*/, const wxString& server_ver, bool /*supported*/, const wxString& server_spring_ver, bool /*unused*/ ) { //wxLogDebugFunc( server_ver + _T(" ") + server_spring_ver ); m_serv.SetRequiredSpring( server_spring_ver ); // ui().OnConnected( m_serv, server_name, server_ver, supported ); m_serv.Login(); } void SimpleServerEvents::OnDisconnected( bool /*wasonline*/ ) { m_serv.SetRequiredSpring (_T("")); // ui().OnDisconnected( m_serv, wasonline ); } void SimpleServerEvents::OnLogin() { } void SimpleServerEvents::OnLoginInfoComplete() { wxString nick = m_serv.GetMe().GetNick(); wxArrayString highlights = sett().GetHighlightedWords(); if ( highlights.Index( nick ) == -1 ) { highlights.Add( nick ); sett().SetHighlightedWords( highlights ); } // ui().OnLoggedIn( ); } void SimpleServerEvents::OnLogout() {} void SimpleServerEvents::OnUnknownCommand( const wxString& /*command*/, const wxString& /*params*/ ) {} void SimpleServerEvents::OnSocketError( const Sockerror& /*unused*/ ) {} void SimpleServerEvents::OnProtocolError( const Protocolerror /*unused*/ ) {} void SimpleServerEvents::OnMotd( const wxString& /*msg*/ ) {} void SimpleServerEvents::OnPong( wxLongLong /*ping_time*/ ) {} void SimpleServerEvents::OnNewUser( const wxString& nick, const wxString& country, int cpu, const wxString& id ) { try { ASSERT_LOGIC( !m_serv.UserExists( nick ), _T("New user from server, but already exists!") ); } catch (...) { return; } User& user = m_serv._AddUser( nick ); user.SetCountry( country ); user.SetCpu( cpu ); user.SetID( id ); // ui().OnUserOnline( user ); } void SimpleServerEvents::OnUserStatus( const wxString& nick, UserStatus status ) { try { User& user = m_serv.GetUser( nick ); // UserStatus oldStatus = user.GetStatus(); user.SetStatus( status ); if ( user.GetBattle() != 0 ) { Battle& battle = *user.GetBattle(); try { if ( battle.GetFounder().GetNick() == user.GetNick() ) { if ( status.in_game != battle.GetInGame() ) { battle.SetInGame( status.in_game ); // if ( status.in_game ) // battle.StartSpring(); // else // */ui().OnBattleInfoUpdated( battle ); } } } catch(...){} } } catch (...) { //wxLogWarning( _("OnUserStatus() failed ! (exception)") ); } } void SimpleServerEvents::OnUserQuit( const wxString& nick ) { try { User &user=m_serv.GetUser( nick ); Battle* userbattle = user.GetBattle(); if ( userbattle ) { int battleid = userbattle->GetID(); try { if ( &userbattle->GetFounder() == &user ) { for ( int i = 0; i < int(userbattle->GetNumUsers()); i ++ ) { User& battleuser = userbattle->GetUser( i ); OnUserLeftBattle( battleid, battleuser.GetNick() ); } OnBattleClosed( battleid ); } else OnUserLeftBattle( battleid, user.GetNick() ); }catch(...){} } // ui().OnUserOffline( user ); m_serv._RemoveUser( nick ); } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnBattleOpened( int id, BattleType type, NatType nat, const wxString& nick, const wxString& host, int port, int maxplayers, bool haspass, int rank, const wxString& maphash, const wxString& map, const wxString& title, const wxString& mod ) { try { ASSERT_EXCEPTION( !m_serv.BattleExists( id ), _T("New battle from server, but already exists!") ); Battle& battle = m_serv._AddBattle( id ); User& user = m_serv.GetUser( nick ); battle.OnUserAdded( user ); battle.SetBattleType( type ); battle.SetNatType( nat ); battle.SetFounder( nick ); battle.SetHostIp( host ); battle.SetHostPort( port ); battle.SetMaxPlayers( maxplayers ); battle.SetIsPassworded( haspass ); battle.SetRankNeeded( rank ); battle.SetHostMap( map, maphash ); battle.SetDescription( title ); battle.SetHostMod( mod, wxEmptyString ); BattleEvents::GetBattleEventSender( BattleEvents::AddBattle ).SendEvent( std::make_pair(&battle,wxString()) ); if ( user.Status().in_game ) { battle.SetInGame( true ); battle.StartSpring(); } } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnPrivateMessageEx( const wxString& /*user*/, const wxString& /*action*/, bool /*fromme*/ ) { } void SimpleServerEvents::OnJoinedBattle( int battleid, const wxString& hash ) { try { Battle& battle = m_serv.GetBattle( battleid ); battle.SetHostMod( battle.GetHostModName(), hash ); UserBattleStatus& bs = m_serv.GetMe().BattleStatus(); bs.spectator = false; if ( !battle.IsFounderMe() || battle.IsProxy() ) { battle.CustomBattleOptions().loadOptions( OptionsWrapper::MapOption, battle.GetHostMapName() ); battle.CustomBattleOptions().loadOptions( OptionsWrapper::ModOption, battle.GetHostModName() ); } // ui().OnJoinedBattle( battle ); } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnHostedBattle( int battleid ) { try { Battle& battle = m_serv.GetBattle( battleid ); if ( battle.GetBattleType() == BT_Played ) { battle.CustomBattleOptions().loadOptions( OptionsWrapper::MapOption, battle.GetHostMapName() ); battle.CustomBattleOptions().loadOptions( OptionsWrapper::ModOption, battle.GetHostModName() ); } else { battle.GetBattleFromScript( true ); } wxString presetname = sett().GetModDefaultPresetName( battle.GetHostModName() ); if ( !presetname.IsEmpty() ) { battle.LoadOptionsPreset( presetname ); } battle.LoadMapDefaults( battle.GetHostMapName() ); m_serv.SendHostInfo( IBattle::HI_Send_All_opts ); // ui().OnHostedBattle( battle ); } catch (assert_exception) {} } void SimpleServerEvents::OnStartHostedBattle( int battleid ) { Battle& battle = m_serv.GetBattle( battleid ); battle.SetInGame( true ); battle.StartSpring(); } void SimpleServerEvents::OnClientBattleStatus( int battleid, const wxString& nick, UserBattleStatus status ) { try { Battle& battle = m_serv.GetBattle( battleid ); User& user = battle.GetUser( nick ); if ( battle.IsFounderMe() ) AutoCheckCommandSpam( battle, user ); status.color_index = user.BattleStatus().color_index; battle.OnUserBattleStatusUpdated( user, status ); } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnUserJoinedBattle( int battleid, const wxString& nick, const wxString& userScriptPassword ) { try { User& user = m_serv.GetUser( nick ); Battle& battle = m_serv.GetBattle( battleid ); battle.OnUserAdded( user ); user.BattleStatus().scriptPassword = userScriptPassword; try { if ( &user == &battle.GetFounder() ) { if ( user.Status().in_game ) { battle.SetInGame( true ); battle.StartSpring(); } } } catch(...){} } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnUserLeftBattle( int battleid, const wxString& nick ) { try { Battle& battle = m_serv.GetBattle( battleid ); User& user = battle.GetUser( nick ); user.BattleStatus().scriptPassword.Empty(); battle.OnUserRemoved( user ); // ui().OnUserLeftBattle( battle, user ); } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnBattleInfoUpdated( int battleid, int spectators, bool locked, const wxString& maphash, const wxString& map ) { try { Battle& battle = m_serv.GetBattle( battleid ); battle.SetSpectators( spectators ); battle.SetIsLocked( locked ); wxString oldmap = battle.GetHostMapName(); battle.SetHostMap( map, maphash ); if ( (oldmap != map) && (battle.UserExists( m_serv.GetMe().GetNick())) ) { battle.SendMyBattleStatus(); battle.CustomBattleOptions().loadOptions( OptionsWrapper::MapOption, map ); battle.Update( wxString::Format( _T("%d_mapname"), OptionsWrapper::PrivateOptions ) ); } // ui().OnBattleInfoUpdated( battle ); } catch (assert_exception) {} } void SimpleServerEvents::OnSetBattleInfo( int battleid, const wxString& param, const wxString& value ) { //wxLogDebugFunc( param + _T(", ") + value ); try { Battle& battle = m_serv.GetBattle( battleid ); battle.m_script_tags[param] = value; wxString key = param; if ( key.Left( 5 ) == _T("game/") ) { key = key.AfterFirst( '/' ); if ( key.Left( 11 ) == _T( "mapoptions/" ) ) { key = key.AfterFirst( '/' ); battle.CustomBattleOptions().setSingleOption( key, value, OptionsWrapper::MapOption ); battle.Update( wxString::Format(_T("%d_%s"), OptionsWrapper::MapOption, key.c_str() ) ); } else if ( key.Left( 11 ) == _T( "modoptions/" ) ) { key = key.AfterFirst( '/' ); battle.CustomBattleOptions().setSingleOption( key, value, OptionsWrapper::ModOption ); battle.Update( wxString::Format(_T("%d_%s"), OptionsWrapper::ModOption, key.c_str() ) ); } else if ( key.Left( 8 ) == _T( "restrict" ) ) { OnBattleDisableUnit( battleid, key.AfterFirst(_T('/')), s2l(value) ); } else if ( key.Left( 4 ) == _T( "team" ) && key.Find( _T("startpos") ) != wxNOT_FOUND ) { int team = s2l( key.BeforeFirst(_T('/')).Mid( 4 ) ); if ( key.Find( _T("startposx") ) != wxNOT_FOUND ) { int numusers = battle.GetNumUsers(); for ( int i = 0; i < numusers; i++ ) { User& usr = battle.GetUser( i ); UserBattleStatus& status = usr.BattleStatus(); if ( status.team == team ) { status.pos.x = s2l( value ); battle.OnUserBattleStatusUpdated( usr, status ); } } } else if ( key.Find( _T("startposy") ) != wxNOT_FOUND ) { int numusers = battle.GetNumUsers(); for ( int i = 0; i < numusers; i++ ) { User& usr = battle.GetUser( i ); UserBattleStatus& status = usr.BattleStatus(); if ( status.team == team ) { status.pos.y = s2l( value ); battle.OnUserBattleStatusUpdated( usr, status ); } } } } else { battle.CustomBattleOptions().setSingleOption( key, value, OptionsWrapper::EngineOption ); battle.Update( wxString::Format(_T("%d_%s"), OptionsWrapper::EngineOption, key.c_str() ) ); } } } catch (assert_exception) {} } void SimpleServerEvents::OnBattleInfoUpdated( int /*battleid*/ ) { try { // Battle& battle = m_serv.GetBattle( battleid ); // ui().OnBattleInfoUpdated( battle ); } catch ( assert_exception ) {} } void SimpleServerEvents::OnBattleClosed( int battleid ) { try { // Battle& battle = m_serv.GetBattle( battleid ); // ui().OnBattleClosed( battle ); m_serv._RemoveBattle( battleid ); } catch ( assert_exception ) {} } void SimpleServerEvents::OnBattleDisableUnit( int battleid, const wxString& unitname, int count ) { try { Battle& battle = m_serv.GetBattle( battleid ); battle.RestrictUnit( unitname, count ); battle.Update( wxString::Format( _T("%d_restrictions"), OptionsWrapper::PrivateOptions ) ); } catch ( assert_exception ) {} } void SimpleServerEvents::OnBattleEnableUnit( int battleid, const wxString& unitname ) { try { Battle& battle = m_serv.GetBattle( battleid ); battle.UnrestrictUnit( unitname ); battle.Update( wxString::Format( _T("%d_restrictions"), OptionsWrapper::PrivateOptions ) ); } catch ( assert_exception ) {} } void SimpleServerEvents::OnBattleEnableAllUnits( int battleid ) { try { Battle& battle = m_serv.GetBattle( battleid ); battle.UnrestrictAllUnits(); battle.Update( wxString::Format( _T("%d_restrictions"), OptionsWrapper::PrivateOptions ) ); } catch ( assert_exception ) {} } void SimpleServerEvents::OnJoinChannelResult( bool success, const wxString& channel, const wxString& /*reason*/ ) { if ( success ) { Channel& chan = m_serv._AddChannel( channel ); chan.SetPassword( m_serv.m_channel_pw[channel] ); // ui().OnJoinedChannelSuccessful( chan ); } else { // ui().ShowMessage( _("Join channel failed"), _("Could not join channel ") + channel + _(" because: ") + reason ); } } void SimpleServerEvents::OnChannelSaid( const wxString& channel, const wxString& who, const wxString& message ) { try { if ( ( m_serv.GetMe().GetNick() == who ) || !useractions().DoActionOnUser( UserActions::ActIgnoreChat, who ) ) m_serv.GetChannel( channel ).Said( m_serv.GetUser( who ), message ); } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnChannelJoin( const wxString& channel, const wxString& who ) { try { m_serv.GetChannel( channel ).OnChannelJoin( m_serv.GetUser( who ) ); } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnChannelPart( const wxString& channel, const wxString& who, const wxString& message ) { try { m_serv.GetChannel( channel ).Left( m_serv.GetUser( who ), message ); } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnChannelTopic( const wxString& channel, const wxString& who, const wxString& message, int /*unused*/ ) { try { m_serv.GetChannel( channel ).SetTopic( message, who ); } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnChannelAction( const wxString& channel, const wxString& who, const wxString& action ) { try { m_serv.GetChannel( channel ).DidAction( m_serv.GetUser( who ), action ); } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnPrivateMessage( const wxString& /*user*/, const wxString& /*message*/, bool /*fromme*/ ) { try { // User& who = m_serv.GetUser( user ); // if (!useractions().DoActionOnUser( UserActions::ActIgnorePM, who.GetNick() ) ) // ui().OnUserSaid( who, message, fromme ); } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnChannelList( const wxString& /*channel*/, const int& /*numusers*/, const wxString& /*topic*/ ) { // ui().mw().OnChannelList( channel, numusers, topic ); } void SimpleServerEvents::OnUserJoinChannel( const wxString& channel, const wxString& who ) { try { m_serv.GetChannel( channel ).Joined( m_serv.GetUser( who ) ); } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnRequestBattleStatus( int /*battleid*/ ) { try { // Battle& battle = m_serv.GetBattle( battleid ); // ui().OnRequestBattleStatus( battle ); } catch (assert_exception) {} } void SimpleServerEvents::OnSaidBattle( int battleid, const wxString& nick, const wxString& msg ) { try { Battle& battle = m_serv.GetBattle( battleid ); // ui().OnSaidBattle( battle, nick, msg ); emit saidBattle( battleid, FromwxString( nick ), FromwxString( msg ) ); battle.GetAutoHost().OnSaidBattle( nick, msg ); } catch (assert_exception) {} } void SimpleServerEvents::OnBattleAction( int /*battleid*/, const wxString& /*nick*/, const wxString& /*msg*/ ) { try { // Battle& battle = m_serv.GetBattle( battleid ); // ui().OnBattleAction( battle, nick, msg ); } catch (assert_exception) {} } void SimpleServerEvents::OnBattleStartRectAdd( int battleid, int allyno, int left, int top, int right, int bottom ) { try { Battle& battle = m_serv.GetBattle( battleid ); battle.AddStartRect( allyno, left, top, right, bottom ); battle.StartRectAdded( allyno ); battle.Update( wxString::Format( _T("%d_mapname"), OptionsWrapper::PrivateOptions ) ); } catch (assert_exception) {} } void SimpleServerEvents::OnBattleStartRectRemove( int battleid, int allyno ) { try { Battle& battle = m_serv.GetBattle( battleid ); battle.RemoveStartRect( allyno ); battle.StartRectRemoved( allyno ); battle.Update( wxString::Format( _T("%d_mapname"), OptionsWrapper::PrivateOptions ) ); } catch (assert_exception) {} } void SimpleServerEvents::OnBattleAddBot( int battleid, const wxString& nick, UserBattleStatus status ) { try { Battle& battle = m_serv.GetBattle( battleid ); battle.OnBotAdded( nick, status ); User& bot = battle.GetUser( nick ); ASSERT_LOGIC( &bot != 0, _T("Bot null after add.") ); // ui().OnUserJoinedBattle( battle, bot ); } catch (assert_exception) {} } void SimpleServerEvents::OnBattleUpdateBot( int battleid, const wxString& nick, UserBattleStatus status ) { OnClientBattleStatus( battleid, nick, status ); } void SimpleServerEvents::OnBattleRemoveBot( int battleid, const wxString& nick ) { try { Battle& battle = m_serv.GetBattle( battleid ); User& user = battle.GetUser( nick ); // ui().OnUserLeftBattle( battle, user ); battle.OnUserRemoved( user ); } catch (std::runtime_error &except) { } } void SimpleServerEvents::OnAcceptAgreement( const wxString& /*agreement*/ ) { // ui().OnAcceptAgreement( agreement ); } void SimpleServerEvents::OnRing( const wxString& /*from*/ ) { // ui().OnRing( from ); } void SimpleServerEvents::OnServerBroadcast( const wxString& /*message*/ ) { // ui().OnServerBroadcast( m_serv, message ); } void SimpleServerEvents::OnServerMessage( const wxString& /*message*/ ) { // ui().OnServerMessage( m_serv, message ); } void SimpleServerEvents::OnServerMessageBox( const wxString& /*message*/ ) { // ui().ShowMessage( _("Server Message"), message ); } void SimpleServerEvents::OnChannelMessage( const wxString& /*channel*/, const wxString& /*msg*/ ) { // ui().OnChannelMessage( channel, msg ); } void SimpleServerEvents::OnHostExternalUdpPort( const unsigned int udpport ) { if ( !m_serv.GetCurrentBattle() ) return; if ( m_serv.GetCurrentBattle()->GetNatType() == NAT_Hole_punching || m_serv.GetCurrentBattle()->GetNatType() == NAT_Fixed_source_ports ) m_serv.GetCurrentBattle()->SetHostPort( udpport ); } void SimpleServerEvents::OnMyInternalUdpSourcePort( const unsigned int udpport ) { if ( !m_serv.GetCurrentBattle() ) return; m_serv.GetCurrentBattle()->SetMyInternalUdpSourcePort(udpport); } void SimpleServerEvents::OnMyExternalUdpSourcePort( const unsigned int udpport ) { if ( !m_serv.GetCurrentBattle() ) return; m_serv.GetCurrentBattle()->SetMyExternalUdpSourcePort(udpport); } void SimpleServerEvents::OnClientIPPort( const wxString &username, const wxString &ip, unsigned int udpport ) { //wxLogMessage(_T("OnClientIPPort(%s,%s,%d)"),username.c_str(),ip.c_str(),udpport); if ( !m_serv.GetCurrentBattle() ) { //wxLogMessage(_T("GetCurrentBattle() returned null")); return; } try { User &user=m_serv.GetCurrentBattle()->GetUser( username ); user.BattleStatus().ip=ip; user.BattleStatus().udpport=udpport; //wxLogMessage(_T("set to %s %d "),user.BattleStatus().ip.c_str(),user.BattleStatus().udpport); // if (sett().GetShowIPAddresses()) // ui().OnBattleAction(*m_serv.GetCurrentBattle(),username,wxFormat(_(" has ip=%s"),ip.c_str())); if (m_serv.GetCurrentBattle()->GetNatType() != NAT_None && (udpport==0)) { // todo: better warning message //something.OutputLine( _T(" ** ") + who.GetNick() + _(" does not support nat traversal! ") + GetChatTypeStr() + _T("."), sett().GetChatColorJoinPart(), sett().GetChatFont() ); // ui().OnBattleAction(*m_serv.GetCurrentBattle(),username,_(" does not really support nat traversal")); } m_serv.GetCurrentBattle()->CheckBan(user); } catch (std::runtime_error) { //wxLogMessage(_T("runtime_error inside OnClientIPPort()")); } } void SimpleServerEvents::OnKickedFromBattle() { customMessageBoxNoModal(SL_MAIN_ICON,_("You were kicked from the battle!"),_("Kicked by Host")); } void SimpleServerEvents::OnRedirect( const wxString& address, unsigned int port, const wxString& /*CurrentNick*/, const wxString& /*CurrentPassword*/ ) { wxString name = address + _T(":") + TowxString(port); sett().SetServer( name, address, port ); // ui().DoConnect( name, CurrentNick, CurrentPassword ); } void SimpleServerEvents::AutoCheckCommandSpam( Battle& battle, User& user ) { wxString nick = user.GetNick(); MessageSpamCheck info = m_spam_check[nick]; time_t now = time( 0 ); if ( info.lastmessage == now ) info.count++; else info.count = 0; info.lastmessage = now; m_spam_check[nick] = info; if ( info.count == 7 ) { battle.DoAction( _T("is autokicking ") + nick + _T(" due to command spam.") ); battle.KickPlayer( user ); } } void SimpleServerEvents::OnMutelistBegin( const wxString& /*channel*/ ) { // mutelistWindow( _("Begin mutelist for ") + channel, wxFormat( _("%s mutelist"), channel.c_str() ) ); } void SimpleServerEvents::OnMutelistItem( const wxString& /*unused*/, const wxString& mutee, const wxString& description ) { wxString message = mutee; wxString desc = description; wxString mutetime = GetWordParam( desc ); long time; if ( mutetime == _T("indefinite") ) message << _(" indefinite time remaining"); else if ( mutetime.ToLong(&time) ) message << wxString::Format( _(" %d minutes remaining"), time/60 + 1 ); else message << mutetime; if ( !desc.IsEmpty() ) message << _T(", ") << desc; // mutelistWindow( message ); } void SimpleServerEvents::OnMutelistEnd( const wxString& /*channel*/ ) { // mutelistWindow( _("End mutelist for ") + channel ); } void SimpleServerEvents::OnScriptStart( int battleid ) { if ( !m_serv.BattleExists( battleid ) ) { return; } m_serv.GetBattle( battleid ).ClearScript(); } void SimpleServerEvents::OnScriptLine( int battleid, const wxString& line ) { if ( !m_serv.BattleExists( battleid ) ) { return; } m_serv.GetBattle( battleid ).AppendScriptLine( line ); } void SimpleServerEvents::OnScriptEnd( int battleid ) { if ( !m_serv.BattleExists( battleid ) ) { return; } m_serv.GetBattle( battleid ).GetBattleFromScript( true ); } void SimpleServerEvents::OnFileDownload( bool /*autolaunch*/, bool /*autoclose*/, bool /*disconnectonrefuse*/, const wxString& /*FileName*/, const wxString& /*url*/, const wxString& /*description*/ ) { // wxString refinedurl; // if ( url.Find(_T("http://")) != wxNOT_FOUND ) refinedurl = url.AfterFirst(_T('/')).AfterFirst(_T('/')); // else refinedurl = url; // bool result = ui().Ask( _("Download update"), wxFormat( _("Would you like to download %s ? The file offers the following updates:\n\n%s\n\nThe download will be started in the background, you will be notified on operation completed."), url.c_str(), description.c_str() ) ); // if ( result ) // { // m_autoclose = autoclose; // m_autolaunch = autolaunch; // wxString filename; // if ( FileName != _T("*") ) filename = FileName; // else filename = _T("Spring installer.exe"); // m_savepath = sett().GetCurrentUsedDataDir() + filename; // //wxLogMessage(_T("downloading update in: %s, from: %s"),m_savepath.c_str(),refinedurl.c_str()); // // OpenWebBrowser( url ); // //new HttpDownloaderThread( refinedurl, m_savepath, *this, wxID_HIGHEST + 100, true, false ); // } } void SimpleServerEvents::OnSpringDownloadEvent( wxCommandEvent& event ) { int code = event.GetInt(); //wxLogMessage(event.GetString()); if ( code != 0) { customMessageBox(SL_MAIN_ICON, _("There was an error downloading for the latest version.\n"), _("Error")); wxString err; switch (code) { case wxPROTO_NETERR: err = _("Network Error"); break; case wxPROTO_PROTERR: err = _("Negotiation error"); break; case wxPROTO_CONNERR: err = _T("Failed to connect to server"); break; case wxPROTO_INVVAL: err = _("Invalid Value"); break; case wxPROTO_NOHNDLR: err = _("No Handler"); break; case wxPROTO_NOFILE: err = _("File doesn't exit"); break; case wxPROTO_ABRT: err = _("Action Aborted"); break; case wxPROTO_RCNCT: err = _("Reconnection Error"); break; default: err = _("Unknown Error"); break; } //wxLogDebugFunc(_T("Error connecting! Error is: ") + err); customMessageBoxNoModal(SL_MAIN_ICON, _T("Error connecting! (") + err + _T(")\nPlease update manually from http://springrts.com"), _T("")); } else { wxString text = _("Download complete, location is: ") + m_savepath; if ( m_autoclose ) text += _("\nlobby will get closed now."); customMessageBox(SL_MAIN_ICON, text, _("Download complete.") ); if ( m_autolaunch ) { if ( !wxExecute( _T("\"") + m_savepath + _T("\""), wxEXEC_ASYNC ) ) { customMessageBoxNoModal(SL_MAIN_ICON, _("Couldn't launch installer. File location is: ") + m_savepath, _("Couldn't launch installer.") ); } } if ( m_autoclose ) { // ui().mw().Close(); } } } springlobby-0.169/src/qt/simpleserverevents.h0000600000176000000410000001415312105760300022754 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SIMPLESERVEREVENTS_H #define SPRINGLOBBY_HEADERGUARD_SIMPLESERVEREVENTS_H #include "../iserverevents.h" #include #include class Ui; struct UserStatus; struct UserBattleStatus; class Battle; //! @brief Class that implements server event behaviour. class SimpleServerEvents : public IServerEvents, public wxEvtHandler { public: SimpleServerEvents( Server& serv) : m_serv(serv), m_autolaunch(false), m_autoclose(false) {} ~SimpleServerEvents() {} // Uicontrol interface void OnConnected( const wxString& server_name, const wxString& server_ver, bool supported, const wxString& server_spring_ver, bool lanmode ); void OnDisconnected( bool wasonline ); void OnLogin(); void OnLoginInfoComplete(); void OnLogout(); void OnUnknownCommand( const wxString& command, const wxString& params ); void OnSocketError( const Sockerror& error ); void OnProtocolError( const Protocolerror error ); void OnMotd( const wxString& msg ); void OnPong( wxLongLong ping_time ); void OnNewUser( const wxString& nick, const wxString& conutry, int cpu, const wxString& id ); void OnUserStatus( const wxString& nick, UserStatus status ); void OnUserQuit( const wxString& nick ); void OnBattleOpened( int id, BattleType type, NatType nat, const wxString& nick, const wxString& host, int port, int maxplayers, bool haspass, int rank, const wxString& maphash, const wxString& map, const wxString& title, const wxString& mod ); void OnUserJoinedBattle( int battleid, const wxString& nick, const wxString& userScriptPassword ); void OnUserLeftBattle( int battleid, const wxString& nick ); void OnBattleInfoUpdated( int battleid, int spectators, bool locked, const wxString& maphash, const wxString& map ); void OnSetBattleInfo( int battleid, const wxString& param, const wxString& value ); void OnBattleInfoUpdated( int battleid ); void OnBattleClosed( int battleid ); void OnJoinedBattle( int battleid, const wxString& hash ); void OnHostedBattle( int battleid ); void OnStartHostedBattle( int battleid ); void OnClientBattleStatus( int battleid, const wxString& nick, UserBattleStatus status ); void OnBattleStartRectAdd( int battleid, int allyno, int left, int top, int right, int bottom ); void OnBattleStartRectRemove( int battleid, int allyno ); void OnBattleAddBot( int battleid, const wxString& nick, UserBattleStatus status ); void OnBattleUpdateBot( int battleid, const wxString& nick, UserBattleStatus status ); void OnBattleRemoveBot( int battleid, const wxString& nick ); void OnBattleDisableUnit( int battleid, const wxString& unitname, int count = 0 ); void OnBattleEnableUnit( int battleid, const wxString& unitname ); void OnBattleEnableAllUnits( int battleid ); void OnJoinChannelResult( bool success, const wxString& channel, const wxString& reason ); void OnChannelSaid( const wxString& channel, const wxString& who, const wxString& message ); void OnChannelJoin( const wxString& channel, const wxString& who ); void OnChannelPart( const wxString& channel, const wxString& who, const wxString& message ); void OnChannelTopic( const wxString& channel, const wxString& who, const wxString& message, int when ); void OnChannelAction( const wxString& channel, const wxString& who, const wxString& action ); void OnChannelList( const wxString& channel, const int& numusers, const wxString& topic ); void OnUserJoinChannel( const wxString& channel, const wxString& who ); void OnPrivateMessage( const wxString& user, const wxString& message, bool fromme = false ); void OnPrivateMessageEx( const wxString& user, const wxString& action, bool fromme = false ); void OnRequestBattleStatus( int battleid ); void OnSaidBattle( int battleid, const wxString& nick, const wxString& msg ); void OnBattleAction( int battleid, const wxString& nick, const wxString& msg ); void OnAcceptAgreement( const wxString& agreement ); void OnRing( const wxString& from ); void OnServerMessage( const wxString& message ); void OnServerBroadcast( const wxString& message ); void OnServerMessageBox( const wxString& message ); void OnChannelMessage( const wxString& channel, const wxString& msg ); void OnHostExternalUdpPort( const unsigned int udpport ); void OnMyExternalUdpSourcePort( const unsigned int udpport ); void OnMyInternalUdpSourcePort( const unsigned int udpport ); void OnClientIPPort( const wxString &username, const wxString &ip, unsigned int udpport ); void OnKickedFromBattle(); void OnRedirect( const wxString& address, unsigned int port, const wxString& CurrentNick, const wxString& CurrentPassword ); /// use this function to check spam from clients and autokick from the battle void AutoCheckCommandSpam( Battle& battle, User& nick ); void OnMutelistBegin( const wxString& channel ); void OnMutelistItem( const wxString& channel, const wxString& mutee, const wxString& description ); void OnMutelistEnd( const wxString& channel ); void OnScriptStart( int battleid ); void OnScriptLine( int battleid, const wxString& line ); void OnScriptEnd( int battleid ); void OnFileDownload( bool autolaunch, bool autoclose, bool disconnectonrefuse, const wxString& FileName, const wxString& url, const wxString& description ); void OnSpringDownloadEvent( wxCommandEvent& event ); protected: Server& m_serv; std::map m_spam_check; DECLARE_EVENT_TABLE() /// spring autoupdate stuff bool m_autolaunch; bool m_autoclose; wxString m_savepath; }; #endif // SPRINGLOBBY_HEADERGUARD_SIMPLESERVEREVENTS_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/qt/skirmishmodel.cpp0000600000176000000410000001222512105760300022212 0ustar buildbotwww-data00000000000000#include "skirmishmodel.h" #include "../customizations.h" #include "../springunitsync.h" #include "../springunitsynclib.h" #include SkirmishModel::SkirmishModel(QObject *parent) : QAbstractListModel(parent), m_mod_customs( SLcustomizations().GetCustomizations() ) { m_battle.SetHostMod( SLcustomizations().Archive(), wxEmptyString ); bool loaded = m_battle.CustomBattleOptions().loadOptions( OptionsWrapper::ModOption, SLcustomizations().Archive() ); assert ( loaded ); //this block populates the radiobox and loads the skirmish options into the map std::string md = SLcustomizations().DataBasePath().append( "/skirmish/" ).toStdString(); wxArrayString skirmishes = susynclib().DirListVFS( TowxString(md), _T("*.lua"), _T("r") );//only raw vfs part foreach ( const wxString skirmish_file, skirmishes ) { wxString skirmish_name = skirmish_file.AfterLast('/').BeforeLast('.'); OptionsWrapper temp; loaded = temp.loadOptions( OptionsWrapper::SkirmishOptions, SLcustomizations().Archive(), wxString(_T("skirmish/")) + skirmish_name + wxString(_T(".lua")) ); assert( loaded ); m_skirmishes.push_back( std::make_pair( skirmish_name, temp ) ); } // { // mmOptionList suggested_maps; // mmOptionList suggested_sides; // OptionsWrapper map_op = m_skirmishes.begin()->second; // for ( SpringUnitSync::OptionMapListConstIter it = map_op.m_opts[optFlag].list_map.begin(); // it != map_op.m_opts[optFlag].list_map.end(); ++it) { // mmOptionList current = it->second; // if ( _T("suggested_maps") == current.key ) { // suggested_maps = current; // } // else if ( _T("suggested_sides") == current.key ) { // suggested_sides = current; // } // } // } std::srand(time(NULL)); QHash roles; roles[Description] = "description"; roles[Name] = "skirmish_name"; setRoleNames(roles); } int SkirmishModel::rowCount(const QModelIndex &/*parent*/ ) const { return m_skirmishes.size(); } QVariant SkirmishModel::data(const QModelIndex &index, int role ) const { int row = index.row(); if ( !index.isValid() || row >= int(m_skirmishes.size()) ) return QVariant(); const OptionsWrapper& opts = m_skirmishes[row].second; switch ( role ) { case Description: { const wxString desc = opts.getSingleValue( _T("description") ); return QVariant::fromValue( QString(desc.mb_str()) ); } case Name: default: { return FromwxString( m_skirmishes[row].first ); } } } void SkirmishModel::run( const int id, const int side, const int map ) { assert( id < int(m_skirmishes.size()) ); OptionsWrapper& opts = m_skirmishes.at(id).second; // this overwrites any modoptions with those found in the skirmish definition m_battle.CustomBattleOptions().MergeOptions( opts, OptionsWrapper::ModOption ); //now add AIs OptionsWrapper::GameOption optFlag = OptionsWrapper::SkirmishOptions; // we need to store Sides for AIs first, so we can later add them in batch w/o needing to remember a mapping std::vector ai_sides; for ( SpringUnitSync::OptionMapListConstIter it = opts.m_opts[optFlag].list_map.begin(); it != opts.m_opts[optFlag].list_map.end(); ++it) { const mmOptionList current = it->second; if ( current.key == _T("ai_sides") ) { for ( ListItemVec::const_iterator itor = current.listitems.begin(); itor != current.listitems.end(); ++itor ) { ai_sides.push_back( itor->name ); } break; } } wxString default_ai = m_mod_customs.getSingleValue( _T("default_ai" ) ); std::vector ai_names ( ai_sides.size(), default_ai ); for ( SpringUnitSync::OptionMapListConstIter it = opts.m_opts[optFlag].list_map.begin(); it != opts.m_opts[optFlag].list_map.end(); ++it) { const mmOptionList current = it->second; if ( current.key == _T("ai_names") ) { for ( ListItemVec::const_iterator itor = current.listitems.begin(); itor != current.listitems.end(); ++itor) { const size_t idx = FromwxString( itor->key ); if ( idx < ai_sides.size() ) ai_names[idx] = itor->name; } break; } } for ( SpringUnitSync::OptionMapListConstIter it = opts.m_opts[optFlag].list_map.begin(); it != opts.m_opts[optFlag].list_map.end(); ++it) { const mmOptionList current = it->second; if ( current.key == _T("ai_team_ids") ) { size_t i = 0; for ( ListItemVec::const_iterator itor = current.listitems.begin(); itor != current.listitems.end(); ++itor, ++i ) { ASSERT_EXCEPTION( i < ai_sides.size(), _T("The setup is listing more AI opponents than AI sides") ); const wxString ai = ai_names.size() > i ? ai_names[i] : default_ai; m_battle.AddBot( ai, FromwxString( itor->name ), ai_sides[i] ); } break; } } User& me = m_battle.GetMe(); me.BattleStatus().side = side; // if ( m_map_random->IsChecked() ) // m_map->SetSelection( std::rand() % ( m_map->GetCount() ) ); //if anyone complains about this not being a uniform distribution imma invoke stab-over-tcp ((c) BD ) UnitSyncMap mapname = usync().GetMap( map ); m_battle.SetHostMap( mapname.name, mapname.hash ); m_battle.StartSpring(); } springlobby-0.169/src/qt/skirmishmodel.h0000600000176000000410000000274012105760300021660 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef SKIRMISHMODEL_H #define SKIRMISHMODEL_H #ifdef SL_QT_MODE #include #include "../mmoptionswrapper.h" #include class SkirmishModel : public QAbstractListModel { Q_OBJECT public: explicit SkirmishModel(QObject *parent = 0); virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; enum SkirmishRoles { Description = Qt::UserRole + 1, Name }; signals: public slots: void run( const int id, const int side, const int map ); private: OptionsWrapper m_mod_customs; NoGuiSinglePlayerBattle m_battle; typedef std::vector< std::pair > SkirmishMap; SkirmishMap m_skirmishes; }; #endif //#ifdef SL_QT_MODE #endif // SKIRMISHMODEL_H springlobby-0.169/src/qt/switch.local0000700000176000000410000000011412105760300021144 0ustar buildbotwww-data00000000000000#!/bin/bash set -e rm qml.local.pri ln -s qml.local.pri.${1} qml.local.pri springlobby-0.169/src/qt/zip_upload.sh0000700000176000000410000000033112105760300021332 0ustar buildbotwww-data00000000000000#!/bin/bash set -e make cp ../qt-build/release/sasi.exe . /opt/mingw_head/usr/bin/i686-pc-mingw32-strip sasi.exe fn=$(git describe --tags) 7za a -l sasi_${fn}.7z sasi.exe scp sasi_${fn}.7z ro:springlobby.info/sasi/ springlobby-0.169/src/reconnectdialog.cpp0000600000176000000410000000464412105760300022062 0ustar buildbotwww-data00000000000000#include "reconnectdialog.h" #include #include #include #include #include #include "ui.h" #include "mainwindow.h" #include "uiutils.h" #include "utils/controls.h" #include "utils/customdialogs.h" BEGIN_EVENT_TABLE( ReconnectDialog, wxDialog ) EVT_BUTTON ( CONNECT_RECONNECT, ReconnectDialog::OnReconnect ) EVT_BUTTON ( CONNECT_CANCEL, ReconnectDialog::OnCancel ) EVT_BUTTON ( CONNECT_NEXT, ReconnectDialog::OnTryNext ) END_EVENT_TABLE() ReconnectDialog::ReconnectDialog() : wxDialog( (wxFrame*)&ui().mw(), -1, _( "Reconnect Dialog" ), wxDefaultPosition, wxSize( 400, 150 ), wxRESIZE_BORDER | wxDEFAULT_DIALOG_STYLE ), WindowAttributesPickle( _T("reconnectdialog"), this, wxSize( 400, 150 ) ) { this->SetSizeHints( wxDefaultSize, wxDefaultSize ); SetSizeHints( wxDefaultSize, wxDefaultSize ); wxBoxSizer* m_main_sizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* m_buttons_sizer; m_buttons_sizer = new wxBoxSizer( wxHORIZONTAL ); wxButton* m_retry_btn = new wxButton( this, CONNECT_RECONNECT, _( "Try Reconnecting" ), wxDefaultPosition, wxDefaultSize, 0 ); m_retry_btn->SetToolTip( TE( _( "Tries to connect to the next server in the list." ) ) ); m_buttons_sizer->Add( m_retry_btn, 0, wxALL, 5 ); wxButton* m_next_btn = new wxButton( this, CONNECT_NEXT, _( "Try Next Server" ), wxDefaultPosition, wxDefaultSize, 0 ); m_next_btn->SetToolTip( TE( _( "Tries to connect to the next server in the list." ) ) ); m_buttons_sizer->Add( m_next_btn, 0, wxALL, 5 ); wxButton* m_cancel_btn = new wxButton( this, CONNECT_CANCEL, _( "Do nothing" ), wxDefaultPosition, wxDefaultSize, 0 ); m_buttons_sizer->Add( m_cancel_btn, 0, wxALL, 5 ); m_main_sizer->Add( CreateTextSizer( _( "Couldn't estabilish a connection with the server\nWhat would you like to do?" ) ), 1, wxALL | wxEXPAND | wxCENTER, 10 ); m_main_sizer->Add( m_buttons_sizer, 1, wxALL | wxEXPAND | wxCENTER, 10 ); SetSizer( m_main_sizer ); SetAutoLayout( true ); Raise(); m_next_btn->SetFocus(); } void ReconnectDialog::OnReconnect ( wxCommandEvent& /*event*/ ) { EndModal( wxID_YES ); } void ReconnectDialog::OnCancel ( wxCommandEvent& /*event*/ ) { EndModal( wxID_CANCEL ); } void ReconnectDialog::OnTryNext ( wxCommandEvent& /*event*/ ) { EndModal( wxID_NO ); } void ReconnectDialog::OnQuit(GlobalEvents::GlobalEventData /*data*/) { EndModal( wxID_CANCEL ); } springlobby-0.169/src/reconnectdialog.h0000600000176000000410000000121612105760300021517 0ustar buildbotwww-data00000000000000#ifndef RECONNECTDIALOG_H #define RECONNECTDIALOG_H #include #include "gui/windowattributespickle.h" #include "utils/isink.h" class wxCommandEvent; class ReconnectDialog : public wxDialog, public WindowAttributesPickle, public OnQuitSink { public: ReconnectDialog(); void OnQuit( GlobalEvents::GlobalEventData data ); private: void OnReconnect ( wxCommandEvent& event ); void OnCancel ( wxCommandEvent& event ); void OnTryNext ( wxCommandEvent& event ); enum { CONNECT_RECONNECT = wxID_HIGHEST, CONNECT_NEXT, CONNECT_CANCEL }; DECLARE_EVENT_TABLE() }; #endif // RECONNECTDIALOG_H springlobby-0.169/src/selectusersdialog.cpp0000600000176000000410000002271512105760300022442 0ustar buildbotwww-data00000000000000 #include "selectusersdialog.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "iconimagelist.h" #include "ui.h" #include "userlist.h" #include "server.h" #include "user.h" #include "utils/conversion.h" #include "useractions.h" BEGIN_EVENT_TABLE( SelectUsersDialog, wxDialog ) EVT_TEXT( FILTER_TEXT, SelectUsersDialog::OnNameFilterChange ) EVT_LIST_ITEM_ACTIVATED( NICK_LIST, SelectUsersDialog::OnNameActivated ) EVT_LIST_ITEM_DESELECTED( NICK_LIST, SelectUsersDialog::OnNameDeselected ) EVT_LIST_ITEM_SELECTED( NICK_LIST, SelectUsersDialog::OnNameSelected ) EVT_BUTTON( wxID_CANCEL, SelectUsersDialog::OnCancel ) EVT_BUTTON( wxID_OK, SelectUsersDialog::OnOk ) END_EVENT_TABLE() SelectUsersDialog::SelectUsersDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { this->SetSizeHints( wxDefaultSize, wxDefaultSize ); wxBoxSizer* mainSizer; mainSizer = new wxBoxSizer( wxVERTICAL ); m_users_panel = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxSize( -1,-1 ), wxTAB_TRAVERSAL ); wxBoxSizer* bUsersListSizer; bUsersListSizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* filterSizer; filterSizer = new wxBoxSizer( wxHORIZONTAL ); m_filter_names_staticText = new wxStaticText( m_users_panel, wxID_ANY, _("Filter names"), wxDefaultPosition, wxDefaultSize, 0 ); m_filter_names_staticText->Wrap( -1 ); filterSizer->Add( m_filter_names_staticText, 0, wxALL|wxALIGN_BOTTOM, 5 ); m_name_filter_text = new wxTextCtrl( m_users_panel, FILTER_TEXT, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_name_filter_text->SetToolTip( _("Enter text filter to filter the online users list") ); filterSizer->Add( m_name_filter_text, 1, wxLEFT|wxRIGHT|wxTOP, 5 ); bUsersListSizer->Add( filterSizer, 0, wxEXPAND, 5 ); m_user_list = new wxListCtrl( m_users_panel, NICK_LIST, wxDefaultPosition, wxDefaultSize, wxLC_REPORT|wxSUNKEN_BORDER|wxLC_SORT_ASCENDING ); bUsersListSizer->Add( m_user_list, 1, wxALL|wxEXPAND, 5 ); m_users_panel->SetSizer( bUsersListSizer ); m_users_panel->Layout(); bUsersListSizer->Fit( m_users_panel ); mainSizer->Add( m_users_panel, 1, wxEXPAND, 5 ); wxBoxSizer* bNameSizer; bNameSizer = new wxBoxSizer( wxHORIZONTAL ); m_name_staticText = new wxStaticText( this, wxID_ANY, _("Name"), wxDefaultPosition, wxDefaultSize, 0 ); m_name_staticText->Wrap( -1 ); bNameSizer->Add( m_name_staticText, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_selection_text = new wxTextCtrl( this, NAME_TEXT, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); bNameSizer->Add( m_selection_text, 1, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); mainSizer->Add( bNameSizer, 0, wxEXPAND, 5 ); m_buttons_hr = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); mainSizer->Add( m_buttons_hr, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); m_dialog_buttons = new wxStdDialogButtonSizer(); m_dialog_buttonsOK = new wxButton( this, wxID_OK ); m_dialog_buttons->AddButton( m_dialog_buttonsOK ); m_dialog_buttonsCancel = new wxButton( this, wxID_CANCEL ); m_dialog_buttons->AddButton( m_dialog_buttonsCancel ); m_dialog_buttons->Realize(); mainSizer->Add( m_dialog_buttons, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 ); this->SetSizer( mainSizer ); this->Layout(); Initialize(); } SelectUsersDialog::~SelectUsersDialog() { ClearList(); } void SelectUsersDialog::Initialize() { m_user_list->InsertColumn(0, _("Nickname"), wxLIST_FORMAT_LEFT, 300); m_user_list->SetImageList( &icons(), wxIMAGE_LIST_SMALL ); m_user_list->SetImageList( &icons(), wxIMAGE_LIST_NORMAL ); m_user_list->SetImageList( &icons(), wxIMAGE_LIST_STATE ); PopulateUsersList(); } void SelectUsersDialog::PopulateUsersList() { ClearList(); if ( ui().IsConnected() ) { const UserList& userlist = serverSelector().GetServer().GetUserList(); wxWindowUpdateLocker noUpdates(m_user_list); for ( unsigned int i = 0; i < userlist.GetNumUsers(); ++i) { wxString name = userlist.GetUser( i ).GetNick(); if ( !useractions().IsKnown( name ) && !ui().IsThisMe( name ) ) { wxString country = userlist.GetUser( i ).GetCountry(); AddUserToList( name, country ); } } Sort(); } } void SelectUsersDialog::ClearList() { wxWindowUpdateLocker noUpdates(m_user_list); long item = -1; while ( true ) { item = m_user_list->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_DONTCARE); if ( item == -1 ) break; RemoveUserFromList( item ); item = -1; } } long SelectUsersDialog::AddUserToList( const wxString& nick, const wxString& flag ) { return AddUserToList(nick, icons().GetFlagIcon(flag) ); } long SelectUsersDialog::AddUserToList( const wxString& nick, const int& flag ) { long item = m_user_list->InsertItem(0, nick, flag ); m_user_list->SetItemData(item, (wxUIntPtr)(new wxString(nick))); return item; } void SelectUsersDialog::RemoveUserFromList( long item ) { delete (wxString*)m_user_list->GetItemData(item); m_user_list->DeleteItem(item); } void SelectUsersDialog::UpdateUsersList() { } void SelectUsersDialog::UpdateSelection() { wxArrayString text = GetSelectionFromText(); for ( unsigned int i = 0; i < m_selection.Count(); i++ ) { if ( text.Index(m_selection[i], false) == wxNOT_FOUND ) text.Insert( m_selection[i], 0 ); } m_selection_text->SetValue(BuildSelectionText( text )); } wxString SelectUsersDialog::BuildSelectionText( const wxSortedArrayString& sel ) { wxString str; for ( unsigned int i = 0; i < sel.Count(); i++ ) { if ( str != wxEmptyString ) str += _T(";"); str += sel[i]; } return str; } wxArrayString SelectUsersDialog::GetSelectionFromText() { wxArrayString s; wxStringTokenizer st(m_selection_text->GetValue(), _T(";, "), wxTOKEN_DEFAULT); while ( st.HasMoreTokens() ) { s.Add(st.GetNextToken()); } s.Sort(); return s; } wxArrayString SelectUsersDialog::GetUsers(wxWindow* parent) { wxArrayString s; SelectUsersDialog dlg(parent); if ( dlg.ShowModal() == wxID_OK ) { s = dlg.GetSelection(); s.Sort(); } return s; } int SelectUsersDialog::ShowModal() { m_selection.Clear(); return wxDialog::ShowModal(); } void SelectUsersDialog::OnNameFilterChange( wxCommandEvent& /*unused*/ ) { long item = -1; wxString filter = m_name_filter_text->GetValue(); wxArrayString del; wxWindowUpdateLocker noUpdates(m_user_list); while ( true ) { item = m_user_list->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_DONTCARE); if ( item == -1 ) break; wxString name = m_user_list->GetItemText(item); if ( name == wxEmptyString ) continue; filter.MakeLower(); name.MakeLower(); if ( (filter != wxEmptyString) && (name.Find(filter) == wxNOT_FOUND) ) { wxListItem listItem; listItem.SetId(item); m_user_list->GetItem(listItem); int flag = listItem.GetImage(); name = m_user_list->GetItemText(item); // Preserve case del.Add(name); m_filtered_users.Add( name +_T(" ") + TowxString(flag) ); } } if ( del.Count() == (size_t)m_user_list->GetItemCount() ) { m_user_list->DeleteAllItems(); } else { for ( unsigned int i = 0; i < del.Count(); i++ ) { long item1 = m_user_list->FindItem(-1, del[i]); RemoveUserFromList(item1); } } wxSortedArrayString sel = GetSelection(); for ( int i = m_filtered_users.Count() - 1; i >= 0; i-- ) { wxString line = m_filtered_users[i]; int sep = line.Find(' '); wxString name = line.Mid(0, sep); if ( name.Find(filter) != wxNOT_FOUND || (filter == wxEmptyString) ) { int flag = (int)FromwxString( line.Mid(sep+1) ); // Flag is never < 0 or > intmax AddUserToList( name, flag ); m_filtered_users.RemoveAt(i); } } Sort(); for ( unsigned int i = 0; i < sel.Count(); i++ ) { long item1 = m_user_list->FindItem(-1, sel[i]); if ( item1 != -1 ) m_user_list->SetItemState(item1, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED); } } void SelectUsersDialog::OnNameActivated( wxListEvent& event ) { m_selection.Clear(); m_selection.Add(event.GetText()); EndModal(wxID_OK); } void SelectUsersDialog::OnNameDeselected( wxListEvent& event ) { m_selection.Remove(event.GetText()); wxSortedArrayString text = GetSelectionFromText(); text.Remove(event.GetText()); m_selection_text->SetValue(BuildSelectionText( text )); UpdateSelection(); } void SelectUsersDialog::OnNameSelected( wxListEvent& event ) { m_selection.Remove(event.GetText()); m_selection.Add(event.GetText()); UpdateSelection(); } void SelectUsersDialog::OnCancel( wxCommandEvent& /*unused*/ ) { EndModal(wxID_CANCEL); } void SelectUsersDialog::OnOk( wxCommandEvent& /*unused*/ ) { EndModal(wxID_OK); } wxArrayString SelectUsersDialog::GetSelection() { return GetSelectionFromText(); } int wxCALLBACK SelectUsersDialog::CompareName(long item1, long item2, long /*unused*/ ) { //wxListCtrl* user_list = (wxListCtrl*)sortData; wxString* s1 = (wxString*)item1; wxString* s2 = (wxString*)item2; return (*s1).CmpNoCase(*s2); } void SelectUsersDialog::Sort() { wxWindowUpdateLocker noUpdates(m_user_list); m_user_list->SortItems(CompareName, (wxUIntPtr)m_user_list); } springlobby-0.169/src/selectusersdialog.h0000600000176000000410000000534212105760300022104 0ustar buildbotwww-data00000000000000 #ifndef SPRINGLOBBY_HEADERGUARD_SELECTUSERSDIALOG_H #define SPRINGLOBBY_HEADERGUARD_SELECTUSERSDIALOG_H #include class wxPanel; class wxStaticText; class wxTextCtrl; class wxListCtrl; class wxStaticLine; class wxStdDialogButtonSizer; class wxButton; class wxListEvent; class SelectUsersDialog : public wxDialog { DECLARE_EVENT_TABLE() protected: enum { FILTER_TEXT = 1000, NICK_LIST, NAME_TEXT }; wxPanel* m_users_panel; wxStaticText* m_filter_names_staticText; wxTextCtrl* m_name_filter_text; wxListCtrl* m_user_list; wxStaticText* m_name_staticText; wxTextCtrl* m_selection_text; wxStaticLine* m_buttons_hr; wxStdDialogButtonSizer* m_dialog_buttons; wxButton* m_dialog_buttonsOK; wxButton* m_dialog_buttonsCancel; void OnNameFilterChange( wxCommandEvent& event ); void OnNameActivated( wxListEvent& event ); void OnNameDeselected( wxListEvent& event ); void OnNameSelected( wxListEvent& event ); void OnCancel( wxCommandEvent& event ); void OnOk( wxCommandEvent& event ); wxSortedArrayString m_selection; wxSortedArrayString m_filtered_users; void Initialize(); void PopulateUsersList(); void ClearList(); void UpdateUsersList(); void UpdateSelection(); wxArrayString GetSelectionFromText(); wxString BuildSelectionText( const wxSortedArrayString& sel ); long AddUserToList( const wxString& nick, const wxString& flag ); long AddUserToList( const wxString& nick, const int& flag ); void RemoveUserFromList( long item ); static int wxCALLBACK CompareName(long item1, long item2, long sortData ); void Sort(); public: SelectUsersDialog( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Select Users"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 358,518 ), long style = wxDEFAULT_DIALOG_STYLE ); ~SelectUsersDialog(); static wxArrayString GetUsers(wxWindow* parent = 0); int ShowModal(); wxArrayString GetSelection(); }; #endif // SPRINGLOBBY_HEADERGUARD_SELECTUSERSDIALOG_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/server.cpp0000600000176000000410000001144712105760300020227 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: Server // #include #include #include "server.h" #include "socket.h" #include "battle.h" #include "channel/channel.h" #include "user.h" #include "ui.h" #include "utils/debug.h" #include "utils/conversion.h" #include "chatpanel.h" Server::Server(): battles_iter(new BattleList_Iter(&m_battles)), m_keepalive(15), m_pass_hash(false) { m_sock = new Socket( *this, false, false ); } Server::~Server() { delete battles_iter; if(uidata.panel)uidata.panel->SetServer(NULL); delete m_sock; } User& Server::GetUser( const wxString& nickname ) const { return m_users.GetUser( nickname ); } bool Server::UserExists( const wxString& nickname ) const { return m_users.UserExists( nickname ); } Channel& Server::GetChannel( const wxString& name ) { return m_channels.GetChannel( name ); } int Server::GetNumChannels() const { return m_channels.GetNumChannels(); } Channel& Server::GetChannel( const int& index ) { return m_channels.GetChannel( index ); } bool Server::ChannelExists( const wxString& name ) const { return m_channels.ChannelExists( name ); } Battle& Server::GetBattle( const int& battleid ) { return battles_iter->GetBattle( battleid ); } bool Server::BattleExists( const int& battleid ) const { return battles_iter->BattleExists( battleid ); } User& Server::_AddUser( const wxString& user ) { if ( m_users.UserExists( user ) ) return m_users.GetUser( user ); User* u = new User( user, *this ); m_users.AddUser( *u ); return *u; } void Server::_RemoveUser( const wxString& nickname ) { try{ User* u = &m_users.GetUser( nickname ); m_users.RemoveUser( nickname ); int numchannels = m_channels.GetNumChannels(); for ( int i = 0; i < numchannels; i++ ) { Channel& chan = m_channels.GetChannel( i ); if ( chan.UserExists( nickname ) ) chan.Left( *u, _T("server idiocy") ); } delete u; }catch(std::runtime_error){ } } Channel& Server::_AddChannel( const wxString& chan ) { if ( m_channels.ChannelExists( chan ) ) return m_channels.GetChannel( chan ); Channel* c = new Channel( *this ); c->SetName( chan ); m_channels.AddChannel( *c ); return *c; } void Server::_RemoveChannel( const wxString& name ) { Channel* c = &m_channels.GetChannel( name ); m_channels.RemoveChannel( name ); ASSERT_LOGIC( c != 0, _T("Server::_RemoveChannel(\"") + name + _T("\"): GetChannel returned NULL pointer")); delete c; } Battle& Server::_AddBattle( const int& id ) { if ( battles_iter->BattleExists( id ) ) return battles_iter->GetBattle( id ); Battle* b = new Battle( *this, id ); m_battles.AddBattle( *b ); return *b; } void Server::_RemoveBattle( const int& id ) { Battle* b = &battles_iter->GetBattle( id ); m_battles.RemoveBattle( id ); ASSERT_LOGIC( b != 0, _T("Server::_RemoveBattle(): GetBattle returned NULL pointer")); delete b; } void Server::OnDisconnected() { while ( battles_iter->GetNumBattles() > 0 ) { battles_iter->IteratorBegin(); Battle* b = battles_iter->GetBattle(); if (b!=0) { m_battles.RemoveBattle( b->GetBattleId() ); delete b; } } while ( m_users.GetNumUsers() > 0 ) { try { User* u = &m_users.GetUser( 0 ); m_users.RemoveUser( u->GetNick() ); delete u; } catch(std::runtime_error) { } } while ( m_channels.GetNumChannels() > 0 ) { Channel* c = &m_channels.GetChannel( 0 ); m_channels.RemoveChannel( c->GetName() ); delete c; } } void Server::RequestSpringUpdate() { } wxArrayString Server::GetRelayHostList() { if ( UserExists( _T("RelayHostManagerList") ) ) SayPrivate( _T("RelayHostManagerList"), _T("!listmanagers") ); wxArrayString ret; for ( unsigned int i = 0; i < m_relay_host_manager_list.GetCount(); i++ ) { try { User& manager = GetUser( m_relay_host_manager_list[i] ); if ( manager.Status().in_game ) continue; // skip the manager is not connected or reports it's ingame ( no slots available ), or it's away ( functionality disabled ) if ( manager.Status().away ) continue; ret.Add( m_relay_host_manager_list[i] ); } catch(...){} } return ret; } ServerSelector::ServerSelector() : m_serv(0) {} bool ServerSelector::GetServerStatus() const { return (bool)(m_serv); } Server& ServerSelector::GetServer() { ASSERT_LOGIC( m_serv != 0, _T("m_serv NULL!") ); return *m_serv; } const Server& ServerSelector::GetServer() const { ASSERT_LOGIC( m_serv != 0, _T("m_serv NULL!") ); return *m_serv; } void ServerSelector::SetCurrentServer(Server* server) { m_serv = server; ASSERT_LOGIC( m_serv != 0, _T("m_serv NULL!") ); } ServerSelector& serverSelector() { static LineInfo m( AT ); static GlobalObjectHolder > m_selector( m ); return m_selector; } springlobby-0.169/src/server.h0000600000176000000410000002144212105760300017670 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SERVER_H #define SPRINGLOBBY_HEADERGUARD_SERVER_H #include #include #include "channel/channellist.h" #include "userlist.h" #include "battlelist/battlelist.h" #include "inetclass.h" #include "utils/mixins.hh" class ServerEvents; class SimpleServerEvents; class IServerEvents; class Channel; class Ui; struct BattleOptions; class User; struct UserBattleStatus; class ChatPanel; class wxString; typedef int ServerError; class wxColour; typedef int HostInfo; //! @brief Abstract baseclass that is used to implement a server protocol. class Server : public iNetClass, public SL::NonCopyable { public: friend class ServerEvents; friend class SimpleServerEvents; enum PortTestCode { porttest_pass_WX26 = 0, porttest_pass = 1, porttest_timeout = 2, porttest_socketNotOk = 3, porttest_socketError = 4, porttest_unreachable = 5 }; struct UiServerData { UiServerData(): panel(0) {} ChatPanel* panel; }; UiServerData uidata; Server(); virtual ~Server( ); // Server interface virtual bool ExecuteSayCommand( const wxString& cmd ) = 0; virtual bool Register( const wxString& addr, const int port, const wxString& nick, const wxString& password,wxString& reason ) = 0; virtual void AcceptAgreement() = 0; virtual void Connect( const wxString& servername, const wxString& addr, const int port ) = 0; virtual void Disconnect() = 0; virtual bool IsConnected() = 0; virtual void Login() = 0; virtual void Logout() = 0; virtual bool IsOnline() const = 0; virtual void Update( int mselapsed ) = 0; virtual void JoinChannel( const wxString& channel, const wxString& key ) = 0; virtual void PartChannel( const wxString& channel ) = 0; virtual void DoActionChannel( const wxString& channel, const wxString& msg ) = 0; virtual void SayChannel( const wxString& channel, const wxString& msg ) = 0; virtual void SayPrivate( const wxString& nick, const wxString& msg ) = 0; virtual void DoActionPrivate( const wxString& nick, const wxString& msg ) = 0; virtual void SayBattle( int battleid, const wxString& msg ) = 0; virtual void DoActionBattle( int battleid, const wxString& msg ) = 0; virtual void Ring( const wxString& nick ) = 0; virtual void ModeratorSetChannelTopic( const wxString& channel, const wxString& topic ) = 0; virtual void ModeratorSetChannelKey( const wxString& channel, const wxString& key ) = 0; virtual void ModeratorMute( const wxString& channel, const wxString& nick, int duration, bool byip ) = 0; virtual void ModeratorUnmute( const wxString& channel, const wxString& nick ) = 0; virtual void ModeratorKick( const wxString& channel, const wxString& reason ) = 0; virtual void ModeratorBan( const wxString& nick, bool byip ) = 0; virtual void ModeratorUnban( const wxString& nick ) = 0; virtual void ModeratorGetIP( const wxString& nick ) = 0; virtual void ModeratorGetLastLogin( const wxString& nick ) = 0; virtual void ModeratorGetLastIP( const wxString& nick ) = 0; virtual void ModeratorFindByIP( const wxString& ipadress ) = 0; virtual void AdminGetAccountAccess( const wxString& nick ) = 0; virtual void AdminChangeAccountAccess( const wxString& nick, const wxString& accesscode ) = 0; virtual void AdminSetBotMode( const wxString& nick, bool isbot ) = 0; virtual void HostBattle( BattleOptions bo, const wxString& password = _T("") ) = 0; virtual void JoinBattle( const int& battleid, const wxString& password = _T("") ) = 0; virtual void LeaveBattle( const int& battleid ) = 0; virtual void StartHostedBattle() = 0; virtual void ForceSide( int battleid, User& user, int side ) = 0; virtual void ForceTeam( int battleid, User& user, int team ) = 0; virtual void ForceAlly( int battleid, User& user, int ally ) = 0; virtual void ForceColour( int battleid, User& user, const wxColour& col ) = 0; virtual void ForceSpectator( int battleid, User& user, bool spectator ) = 0; virtual void BattleKickPlayer( int battleid, User& user ) = 0; virtual void SetHandicap( int battleid, User& user, int handicap) = 0; virtual void AddBot( int battleid, const wxString& nick, UserBattleStatus& status ) = 0; virtual void RemoveBot( int battleid, User& user ) = 0; virtual void UpdateBot( int battleid, User& user, UserBattleStatus& status ) = 0; virtual void SendHostInfo( HostInfo update ) = 0; virtual void SendHostInfo( const wxString& Tag ) = 0; virtual void SendRaw( const wxString& raw ) = 0; virtual void SendUserPosition( const User& usr ) = 0; virtual void RequestInGameTime( const wxString& nick ) = 0; virtual Battle* GetCurrentBattle() = 0; virtual void RequestChannels() = 0; virtual void SendMyBattleStatus( UserBattleStatus& bs ) = 0; virtual void SendMyUserStatus() = 0; virtual void SetKeepaliveInterval( int seconds ) { m_keepalive = seconds; } virtual int GetKeepaliveInterval() { return m_keepalive; } virtual void SetUsername( const wxString& username ) { m_user = username; } virtual void SetPassword( const wxString& password ) { m_pass = password; } virtual bool IsPasswordHash( const wxString& pass ) const = 0; virtual wxString GetPasswordHash( const wxString& pass ) const = 0; wxString GetRequiredSpring() const { return m_required_spring_ver; } void SetRequiredSpring( const wxString& version ) { m_required_spring_ver = version; } virtual void OnConnected( Socket* sock ) = 0; virtual void OnDisconnected( Socket* sock ) = 0; virtual void OnDataReceived( Socket* sock ) = 0; virtual void OnDisconnected(); BattleList_Iter* const battles_iter; virtual const User& GetMe() const = 0; virtual User& GetMe() = 0; User& GetUser( const wxString& nickname ) const; bool UserExists( const wxString& nickname ) const; Channel& GetChannel( const wxString& name ); int GetNumChannels() const; Channel& GetChannel( const int& index ); bool ChannelExists( const wxString& name ) const; Battle& GetBattle( const int& battleid ); bool BattleExists( const int& battleid ) const; virtual int TestOpenPort( unsigned int port ) const = 0; virtual void SendScriptToProxy( const wxString& script ) = 0; virtual void SendScriptToClients( const wxString& script ) = 0; std::map m_channel_pw; /// channel name -> password, filled on channel join ///used to fill userlist in groupuserdialog const UserList& GetUserList() const {return m_users;} unsigned int GetNumUsers() const { return m_users.GetNumUsers(); } wxString GetServerName() const { return m_server_name; } virtual void RequestSpringUpdate(); virtual void SetRelayIngamePassword( const User& user ) = 0; virtual wxArrayString GetRelayHostList(); virtual const IServerEvents* serverEvents() const = 0; protected: Socket* m_sock; int m_keepalive; wxString m_user; wxString m_pass; wxString m_server_name; bool m_pass_hash; wxString m_required_spring_ver; ChannelList m_channels; UserList m_users; BattleList m_battles; wxString m_relay_host_bot; wxString m_relay_host_manager; wxArrayString m_relay_host_manager_list; User& _AddUser( const wxString& user ); void _RemoveUser( const wxString& nickname ); Channel& _AddChannel( const wxString& chan ); void _RemoveChannel( const wxString& name ); Battle& _AddBattle( const int& id ); void _RemoveBattle( const int& id ); static const unsigned int PING_TIMEOUT = 40; virtual void SendCmd( const wxString& command, const wxString& param ) = 0; virtual void RelayCmd( const wxString& command, const wxString& param ) = 0; }; class ServerSelector; ServerSelector& serverSelector(); #include "globalsmanager.h" class ServerSelector { public: Server& GetServer(); const Server& GetServer() const; void SetCurrentServer(Server* server); bool GetServerStatus() const; protected: ServerSelector(); Server* m_serv; friend class GlobalObjectHolder >; }; #endif // SPRINGLOBBY_HEADERGUARD_SERVER_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/serverevents.cpp0000600000176000000410000007475412105760300021466 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: ServerEvents // #ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include #include #include "serverevents.h" #include "mainwindow.h" #include "ui.h" #include "channel/channel.h" #include "user.h" #include "utils/debug.h" #include "uiutils.h" #include "server.h" #include "battle.h" #include #include "settings.h" #include "utils/customdialogs.h" #include "utils/tasutil.h" #include "utils/uievents.h" #include "globalsmanager.h" BEGIN_EVENT_TABLE(ServerEvents, wxEvtHandler) EVT_COMMAND(wxID_ANY, httpDownloadEvtComplete, ServerEvents::OnSpringDownloadEvent) EVT_COMMAND(wxID_ANY, httpDownloadEvtFailed, ServerEvents::OnSpringDownloadEvent) END_EVENT_TABLE() void ServerEvents::OnConnected( const wxString& server_name, const wxString& server_ver, bool supported, const wxString& server_spring_ver, bool /*unused*/ ) { wxLogDebugFunc( server_ver + _T(" ") + server_spring_ver ); //Server version will include patchlevel from release 89 onwards m_serv.SetRequiredSpring( server_spring_ver.BeforeFirst('.') ); ui().OnConnected( m_serv, server_name, server_ver, supported ); m_serv.Login(); } void ServerEvents::OnDisconnected( bool wasonline ) { wxLogDebugFunc( _T("") ); m_serv.SetRequiredSpring (_T("")); ui().OnDisconnected( m_serv, wasonline ); } void ServerEvents::OnLogin() { } void ServerEvents::OnLoginInfoComplete() { wxLogDebugFunc( _T("") ); wxString nick = m_serv.GetMe().GetNick(); wxArrayString highlights = sett().GetHighlightedWords(); if ( highlights.Index( nick ) == -1 ) { highlights.Add( nick ); sett().SetHighlightedWords( highlights ); } //m_serv.RequestChannels(); GetGlobalEventSender(GlobalEvents::OnLogin).SendEvent( 0 ); std::vector autojoin = sett().GetChannelsJoin(); for ( std::vector::const_iterator itor = autojoin.begin(); itor != autojoin.end(); ++itor ) { if ( itor->name.IsEmpty() ) continue; Channel& chan = m_serv._AddChannel( itor->name ); chan.SetPassword( itor->password ); ui().OnJoinedChannelSuccessful( chan, itor == autojoin.begin() ); } for ( std::vector::const_iterator itor = autojoin.begin(); itor != autojoin.end(); ++itor ) m_serv.JoinChannel( itor->name, itor->password ); ui().OnLoggedIn( ); } void ServerEvents::OnLogout() { //wxLogDebugFunc( _T("") ); } void ServerEvents::OnUnknownCommand( const wxString& command, const wxString& params ) { wxLogDebugFunc( _T("") ); ui().OnUnknownCommand( m_serv, command, params ); } void ServerEvents::OnSocketError( const Sockerror& /*unused*/ ) { //wxLogDebugFunc( _T("") ); } void ServerEvents::OnProtocolError( const Protocolerror /*unused*/ ) { //wxLogDebugFunc( _T("") ); } void ServerEvents::OnMotd( const wxString& msg ) { wxLogDebugFunc( _T("") ); ui().OnMotd( m_serv, msg ); } void ServerEvents::OnPong( wxLongLong ping_time ) { //wxLongLong is non-POD and cannot be passed to wxFormat as such. use c-string rep instead. converting to long might loose precision UiEvents::StatusData data( wxString::Format( _("ping: %s ms"), ping_time.ToString().c_str() ), 2 ); UiEvents::GetStatusEventSender( UiEvents::addStatusMessage ).SendEvent( data ); } void ServerEvents::OnNewUser( const wxString& nick, const wxString& country, int cpu, const wxString& id ) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( !m_serv.UserExists( nick ), _T("New user from server, but already exists!") ); } catch (...) { return; } User& user = m_serv._AddUser( nick ); if ( useractions().DoActionOnUser( UserActions::ActNotifLogin, nick ) ) actNotifBox( SL_MAIN_ICON, nick + _(" is online") ); user.SetCountry( country ); user.SetCpu( cpu ); user.SetID( id ); ui().OnUserOnline( user ); } void ServerEvents::OnUserStatus( const wxString& nick, UserStatus status ) { wxLogDebugFunc( _T("") ); try { wxLogMessage( _T("calling m_serv.GetUser( nick ) ") ); User& user = m_serv.GetUser( nick ); wxLogMessage( _T("calling user.SetStatus( status ) ") ); UserStatus oldStatus = user.GetStatus(); user.SetStatus( status ); if ( useractions().DoActionOnUser( UserActions::ActNotifStatus, nick ) ) { wxString diffString = status.GetDiffString( oldStatus ) ; if ( diffString != wxEmptyString ) actNotifBox( SL_MAIN_ICON, nick + _(" is now ") + diffString ); } wxLogMessage( _T("calling ui().OnUserStatusChanged( user ) ") ); ui().OnUserStatusChanged( user ); wxLogMessage( _T("updating battles ") ); if ( user.GetBattle() != 0 ) { Battle& battle = *user.GetBattle(); try { if ( battle.GetFounder().GetNick() == user.GetNick() ) { if ( status.in_game != battle.GetInGame() ) { battle.SetInGame( status.in_game ); if ( status.in_game ) battle.StartSpring(); else BattleEvents::GetBattleEventSender( BattleEvents::BattleInfoUpdate ).SendEvent( std::make_pair(user.GetBattle(),wxString()) ); } } }catch(...){} } } catch (...) { wxLogWarning( _("OnUserStatus() failed ! (exception)") ); } } void ServerEvents::OnUserQuit( const wxString& nick ) { wxLogDebugFunc( _T("") ); try { User &user=m_serv.GetUser( nick ); Battle* userbattle = user.GetBattle(); if ( userbattle ) { int battleid = userbattle->GetID(); try { if ( &userbattle->GetFounder() == &user ) { for ( int i = 0; i < int(userbattle->GetNumUsers()); i ++ ) { User& battleuser = userbattle->GetUser( i ); OnUserLeftBattle( battleid, battleuser.GetNick() ); } OnBattleClosed( battleid ); } else OnUserLeftBattle( battleid, user.GetNick() ); }catch(...){} } ui().OnUserOffline( user ); m_serv._RemoveUser( nick ); if ( useractions().DoActionOnUser( UserActions::ActNotifLogin, nick ) ) actNotifBox( SL_MAIN_ICON, nick + _(" just went offline") ); } catch (std::runtime_error &except) { } } void ServerEvents::OnBattleOpened( int id, BattleType type, NatType nat, const wxString& nick, const wxString& host, int port, int maxplayers, bool haspass, int rank, const wxString& maphash, const wxString& map, const wxString& title, const wxString& mod ) { wxLogDebugFunc( _T("") ); try { ASSERT_EXCEPTION( !m_serv.BattleExists( id ), _T("New battle from server, but already exists!") ); Battle& battle = m_serv._AddBattle( id ); User& user = m_serv.GetUser( nick ); battle.OnUserAdded( user ); battle.SetBattleType( type ); battle.SetNatType( nat ); battle.SetFounder( nick ); battle.SetHostIp( host ); battle.SetHostPort( port ); battle.SetMaxPlayers( maxplayers ); battle.SetIsPassworded( haspass ); battle.SetRankNeeded( rank ); battle.SetHostMap( map, maphash ); battle.SetDescription( title ); battle.SetHostMod( mod, wxEmptyString ); if ( useractions().DoActionOnUser( UserActions::ActNotifBattle, user.GetNick() ) ) actNotifBox( SL_MAIN_ICON, user.GetNick() + _(" opened battle ") + title ); ui().OnBattleOpened( battle ); if ( user.Status().in_game ) { battle.SetInGame( true ); battle.StartSpring(); } } catch (std::runtime_error &except) { } } void ServerEvents::OnJoinedBattle( int battleid, const wxString& hash ) { wxLogDebugFunc( _T("") ); try { Battle& battle = m_serv.GetBattle( battleid ); battle.SetHostMod( battle.GetHostModName(), hash ); UserBattleStatus& bs = m_serv.GetMe().BattleStatus(); bs.spectator = false; if ( !battle.IsFounderMe() || battle.IsProxy() ) { battle.CustomBattleOptions().loadOptions( OptionsWrapper::MapOption, battle.GetHostMapName() ); battle.CustomBattleOptions().loadOptions( OptionsWrapper::ModOption, battle.GetHostModName() ); } ui().OnJoinedBattle( battle ); } catch (std::runtime_error &except) { } } void ServerEvents::OnHostedBattle( int battleid ) { wxLogDebugFunc( _T("") ); try { Battle& battle = m_serv.GetBattle( battleid ); if ( battle.GetBattleType() == BT_Played ) { battle.CustomBattleOptions().loadOptions( OptionsWrapper::MapOption, battle.GetHostMapName() ); battle.CustomBattleOptions().loadOptions( OptionsWrapper::ModOption, battle.GetHostModName() ); } else { battle.GetBattleFromScript( true ); } wxString presetname = sett().GetModDefaultPresetName( battle.GetHostModName() ); if ( !presetname.IsEmpty() ) { battle.LoadOptionsPreset( presetname ); } battle.LoadMapDefaults( battle.GetHostMapName() ); m_serv.SendHostInfo( IBattle::HI_Send_All_opts ); ui().OnHostedBattle( battle ); } catch (assert_exception) {} } void ServerEvents::OnStartHostedBattle( int battleid ) { wxLogDebugFunc( _T("") ); Battle& battle = m_serv.GetBattle( battleid ); battle.SetInGame( true ); battle.StartSpring(); } void ServerEvents::OnClientBattleStatus( int battleid, const wxString& nick, UserBattleStatus status ) { try { Battle& battle = m_serv.GetBattle( battleid ); User& user = battle.GetUser( nick ); //if ( battle.IsFounderMe() ) AutoCheckCommandSpam( battle, user ); status.color_index = user.BattleStatus().color_index; battle.OnUserBattleStatusUpdated( user, status ); } catch (std::runtime_error &except) { } } void ServerEvents::OnUserJoinedBattle( int battleid, const wxString& nick, const wxString& userScriptPassword ) { try { wxLogDebugFunc( _T("") ); User& user = m_serv.GetUser( nick ); Battle& battle = m_serv.GetBattle( battleid ); battle.OnUserAdded( user ); user.BattleStatus().scriptPassword = userScriptPassword; ui().OnUserJoinedBattle( battle, user ); try { if ( &user == &battle.GetFounder() ) { if ( user.Status().in_game ) { battle.SetInGame( true ); battle.StartSpring(); } } }catch(...){} } catch (std::runtime_error &except) { } } void ServerEvents::OnUserLeftBattle( int battleid, const wxString& nick ) { wxLogDebugFunc( _T("") ); try { Battle& battle = m_serv.GetBattle( battleid ); User& user = battle.GetUser( nick ); // this is necessary since the user will be deleted when the gui function is called bool isbot = user.BattleStatus().IsBot(); user.BattleStatus().scriptPassword.Clear(); battle.OnUserRemoved( user ); ui().OnUserLeftBattle( battle, user, isbot ); } catch (std::runtime_error &except) { } } void ServerEvents::OnBattleInfoUpdated( int battleid, int spectators, bool locked, const wxString& maphash, const wxString& map ) { wxLogDebugFunc( _T("") ); try { Battle& battle = m_serv.GetBattle( battleid ); battle.SetSpectators( spectators ); battle.SetIsLocked( locked ); wxString oldmap = battle.GetHostMapName(); battle.SetHostMap( map, maphash ); if ( (oldmap != map) && (battle.UserExists( m_serv.GetMe().GetNick())) ) { battle.SendMyBattleStatus(); battle.CustomBattleOptions().loadOptions( OptionsWrapper::MapOption, map ); battle.Update( wxString::Format( _T("%d_mapname"), OptionsWrapper::PrivateOptions ) ); } BattleEvents::GetBattleEventSender( BattleEvents::BattleInfoUpdate ).SendEvent( std::make_pair(&battle,wxString()) ); } catch (assert_exception) {} } void ServerEvents::OnSetBattleInfo( int battleid, const wxString& param, const wxString& value ) { wxLogDebugFunc( param + _T(", ") + value ); try { Battle& battle = m_serv.GetBattle( battleid ); battle.m_script_tags[param] = value; wxString key = param; if ( key.Left( 5 ) == _T("game/") ) { key = key.AfterFirst( '/' ); if ( key.Left( 11 ) == _T( "mapoptions/" ) ) { key = key.AfterFirst( '/' ); battle.CustomBattleOptions().setSingleOption( key, value, OptionsWrapper::MapOption ); battle.Update( wxString::Format(_T("%d_%s"), OptionsWrapper::MapOption, key.c_str() ) ); } else if ( key.Left( 11 ) == _T( "modoptions/" ) ) { key = key.AfterFirst( '/' ); battle.CustomBattleOptions().setSingleOption( key, value, OptionsWrapper::ModOption ); battle.Update( wxString::Format(_T("%d_%s"), OptionsWrapper::ModOption, key.c_str() ) ); } else if ( key.Left( 8 ) == _T( "restrict" ) ) { OnBattleDisableUnit( battleid, key.AfterFirst(_T('/')), s2l(value) ); } else if ( key.Left( 4 ) == _T( "team" ) && key.Find( _T("startpos") ) != wxNOT_FOUND ) { int team = s2l( key.BeforeFirst(_T('/')).Mid( 4 ) ); if ( key.Find( _T("startposx") ) != wxNOT_FOUND ) { int numusers = battle.GetNumUsers(); for ( int i = 0; i < numusers; i++ ) { User& usr = battle.GetUser( i ); UserBattleStatus& status = usr.BattleStatus(); if ( status.team == team ) { status.pos.x = s2l( value ); battle.OnUserBattleStatusUpdated( usr, status ); } } } else if ( key.Find( _T("startposy") ) != wxNOT_FOUND ) { int numusers = battle.GetNumUsers(); for ( int i = 0; i < numusers; i++ ) { User& usr = battle.GetUser( i ); UserBattleStatus& status = usr.BattleStatus(); if ( status.team == team ) { status.pos.y = s2l( value ); battle.OnUserBattleStatusUpdated( usr, status ); } } } } else { battle.CustomBattleOptions().setSingleOption( key, value, OptionsWrapper::EngineOption ); battle.Update( wxString::Format(_T("%d_%s"), OptionsWrapper::EngineOption, key.c_str() ) ); } } } catch (assert_exception) {} } void ServerEvents::OnBattleInfoUpdated( int battleid ) { wxLogDebugFunc( _T("") ); try { Battle& battle = m_serv.GetBattle( battleid ); BattleEvents::GetBattleEventSender( BattleEvents::BattleInfoUpdate ).SendEvent( std::make_pair(&battle,wxString()) ); } catch ( assert_exception ) {} } void ServerEvents::OnBattleClosed( int battleid ) { wxLogDebugFunc( _T("") ); try { Battle& battle = m_serv.GetBattle( battleid ); ui().OnBattleClosed( battle ); m_serv._RemoveBattle( battleid ); } catch ( assert_exception ) {} } void ServerEvents::OnBattleDisableUnit( int battleid, const wxString& unitname, int count ) { wxLogDebugFunc( _T("") ); try { Battle& battle = m_serv.GetBattle( battleid ); battle.RestrictUnit( unitname, count ); battle.Update( wxString::Format( _T("%d_restrictions"), OptionsWrapper::PrivateOptions ) ); } catch ( assert_exception ) {} } void ServerEvents::OnBattleEnableUnit( int battleid, const wxString& unitname ) { wxLogDebugFunc( _T("") ); try { Battle& battle = m_serv.GetBattle( battleid ); battle.UnrestrictUnit( unitname ); battle.Update( wxString::Format( _T("%d_restrictions"), OptionsWrapper::PrivateOptions ) ); } catch ( assert_exception ) {} } void ServerEvents::OnBattleEnableAllUnits( int battleid ) { wxLogDebugFunc( _T("") ); try { Battle& battle = m_serv.GetBattle( battleid ); battle.UnrestrictAllUnits(); battle.Update( wxString::Format( _T("%d_restrictions"), OptionsWrapper::PrivateOptions ) ); } catch ( assert_exception ) {} } void ServerEvents::OnJoinChannelResult( bool success, const wxString& channel, const wxString& reason ) { wxLogDebugFunc( _T("") ); if ( success ) { Channel& chan = m_serv._AddChannel( channel ); chan.SetPassword( m_serv.m_channel_pw[channel] ); ui().OnJoinedChannelSuccessful( chan ); } else { ui().ShowMessage( _("Join channel failed"), _("Could not join channel ") + channel + _(" because: ") + reason ); } } void ServerEvents::OnChannelSaid( const wxString& channel, const wxString& who, const wxString& message ) { wxLogDebugFunc( _T("") ); try { if ( ( m_serv.GetMe().GetNick() == who ) || !useractions().DoActionOnUser( UserActions::ActIgnoreChat, who ) ) m_serv.GetChannel( channel ).Said( m_serv.GetUser( who ), message ); } catch (std::runtime_error &except) { } } void ServerEvents::OnChannelJoin( const wxString& channel, const wxString& who ) { wxLogDebugFunc( _T("") ); try { m_serv.GetChannel( channel ).OnChannelJoin( m_serv.GetUser( who ) ); } catch (std::runtime_error &except) { } } void ServerEvents::OnChannelPart( const wxString& channel, const wxString& who, const wxString& message ) { wxLogDebugFunc( _T("") ); try { m_serv.GetChannel( channel ).Left( m_serv.GetUser( who ), message ); } catch (std::runtime_error &except) { } } void ServerEvents::OnChannelTopic( const wxString& channel, const wxString& who, const wxString& message, int /*unused*/ ) { wxLogDebugFunc( _T("") ); try { m_serv.GetChannel( channel ).SetTopic( message, who ); } catch (std::runtime_error &except) { } } void ServerEvents::OnChannelAction( const wxString& channel, const wxString& who, const wxString& action ) { wxLogDebugFunc( _T("") ); try { if ( ( m_serv.GetMe().GetNick() == who ) || !useractions().DoActionOnUser( UserActions::ActIgnoreChat, who ) ) m_serv.GetChannel( channel ).DidAction( m_serv.GetUser( who ), action ); } catch (std::runtime_error &except) { } } void ServerEvents::OnPrivateMessage( const wxString& user, const wxString& message, bool fromme ) { wxLogDebugFunc( _T("") ); try { User& who = m_serv.GetUser( user ); if (!useractions().DoActionOnUser( UserActions::ActIgnorePM, who.GetNick() ) ) ui().OnUserSaid( who, message, fromme ); } catch (std::runtime_error &except) { } } void ServerEvents::OnPrivateMessageEx( const wxString& user, const wxString& action, bool fromme ) { wxLogDebugFunc( _T("") ); try { User& who = m_serv.GetUser( user ); if (!useractions().DoActionOnUser( UserActions::ActIgnorePM, who.GetNick() ) ) ui().OnUserSaidEx( who, action, fromme ); } catch (std::runtime_error &except) { } } void ServerEvents::OnChannelList( const wxString& channel, const int& numusers, const wxString& topic ) { ui().mw().OnChannelList( channel, numusers, topic ); } void ServerEvents::OnUserJoinChannel( const wxString& channel, const wxString& who ) { wxLogDebugFunc( _T("") ); try { m_serv.GetChannel( channel ).Joined( m_serv.GetUser( who ) ); } catch (std::runtime_error &except) { } } void ServerEvents::OnRequestBattleStatus( int battleid ) { try { Battle& battle = m_serv.GetBattle( battleid ); ui().OnRequestBattleStatus( battle ); } catch (assert_exception) {} } void ServerEvents::OnSaidBattle( int battleid, const wxString& nick, const wxString& msg ) { try { Battle& battle = m_serv.GetBattle( battleid ); if ( ( m_serv.GetMe().GetNick() == nick ) || !useractions().DoActionOnUser( UserActions::ActIgnoreChat, nick ) ) { ui().OnSaidBattle( battle, nick, msg ); } battle.GetAutoHost().OnSaidBattle( nick, msg ); } catch (assert_exception) {} } void ServerEvents::OnBattleAction( int /*battleid*/, const wxString& nick, const wxString& msg ) { try { UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( nick, msg ) ); } catch (assert_exception) {} } void ServerEvents::OnBattleStartRectAdd( int battleid, int allyno, int left, int top, int right, int bottom ) { try { Battle& battle = m_serv.GetBattle( battleid ); battle.AddStartRect( allyno, left, top, right, bottom ); battle.StartRectAdded( allyno ); battle.Update( wxString::Format( _T("%d_mapname"), OptionsWrapper::PrivateOptions ) ); } catch (assert_exception) {} } void ServerEvents::OnBattleStartRectRemove( int battleid, int allyno ) { try { Battle& battle = m_serv.GetBattle( battleid ); battle.RemoveStartRect( allyno ); battle.StartRectRemoved( allyno ); battle.Update( wxString::Format( _T("%d_mapname"), OptionsWrapper::PrivateOptions ) ); } catch (assert_exception) {} } void ServerEvents::OnBattleAddBot( int battleid, const wxString& nick, UserBattleStatus status ) { wxLogDebugFunc( _T("") ); try { Battle& battle = m_serv.GetBattle( battleid ); battle.OnBotAdded( nick, status ); User& bot = battle.GetUser( nick ); ASSERT_LOGIC( &bot != 0, _T("Bot null after add.") ); ui().OnUserJoinedBattle( battle, bot ); } catch (assert_exception) {} } void ServerEvents::OnBattleUpdateBot( int battleid, const wxString& nick, UserBattleStatus status ) { OnClientBattleStatus( battleid, nick, status ); } void ServerEvents::OnBattleRemoveBot( int battleid, const wxString& nick ) { wxLogDebugFunc( _T("") ); try { Battle& battle = m_serv.GetBattle( battleid ); User& user = battle.GetUser( nick ); bool isbot = user.BattleStatus().IsBot(); ui().OnUserLeftBattle( battle, user, isbot ); battle.OnUserRemoved( user ); } catch (std::runtime_error &except) { } } void ServerEvents::OnAcceptAgreement( const wxString& agreement ) { ui().OnAcceptAgreement( agreement ); } void ServerEvents::OnRing( const wxString& from ) { ui().OnRing( from ); } void ServerEvents::OnServerBroadcast( const wxString& message ) { ui().OnServerBroadcast( m_serv, message ); } void ServerEvents::OnServerMessage( const wxString& message ) { ui().OnServerMessage( m_serv, message ); } void ServerEvents::OnServerMessageBox( const wxString& message ) { ui().ShowMessage( _("Server Message"), message ); } void ServerEvents::OnChannelMessage( const wxString& channel, const wxString& msg ) { ui().OnChannelMessage( channel, msg ); } void ServerEvents::OnHostExternalUdpPort( const unsigned int udpport ) { if ( !m_serv.GetCurrentBattle() ) return; if ( m_serv.GetCurrentBattle()->GetNatType() == NAT_Hole_punching || m_serv.GetCurrentBattle()->GetNatType() == NAT_Fixed_source_ports ) m_serv.GetCurrentBattle()->SetHostPort( udpport ); } void ServerEvents::OnMyInternalUdpSourcePort( const unsigned int udpport ) { if ( !m_serv.GetCurrentBattle() ) return; m_serv.GetCurrentBattle()->SetMyInternalUdpSourcePort(udpport); } void ServerEvents::OnMyExternalUdpSourcePort( const unsigned int udpport ) { if ( !m_serv.GetCurrentBattle() ) return; m_serv.GetCurrentBattle()->SetMyExternalUdpSourcePort(udpport); } void ServerEvents::OnClientIPPort( const wxString &username, const wxString &ip, unsigned int udpport ) { wxLogMessage(_T("OnClientIPPort(%s,%s,%d)"),username.c_str(),ip.c_str(),udpport); if ( !m_serv.GetCurrentBattle() ) { wxLogMessage(_T("GetCurrentBattle() returned null")); return; } try { User &user=m_serv.GetCurrentBattle()->GetUser( username ); user.BattleStatus().ip=ip; user.BattleStatus().udpport=udpport; wxLogMessage(_T("set to %s %d "),user.BattleStatus().ip.c_str(),user.BattleStatus().udpport); if (sett().GetShowIPAddresses()) { UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( username,wxString::Format(_(" has ip=%s"),ip.c_str()) ) ); } if (m_serv.GetCurrentBattle()->GetNatType() != NAT_None && (udpport==0)) { // todo: better warning message //something.OutputLine( _T(" ** ") + who.GetNick() + _(" does not support nat traversal! ") + GetChatTypeStr() + _T("."), sett().GetChatColorJoinPart(), sett().GetChatFont() ); UiEvents::GetUiEventSender( UiEvents::OnBattleActionEvent ).SendEvent( UiEvents::OnBattleActionData( username,_(" does not really support nat traversal") ) ); } m_serv.GetCurrentBattle()->CheckBan(user); } catch (std::runtime_error) { wxLogMessage(_T("runtime_error inside OnClientIPPort()")); } } void ServerEvents::OnKickedFromBattle() { customMessageBoxNoModal(SL_MAIN_ICON,_("You were kicked from the battle!"),_("Kicked by Host")); } void ServerEvents::OnRedirect( const wxString& address, unsigned int port, const wxString& CurrentNick, const wxString& CurrentPassword ) { wxString name = address + _T(":") + TowxString(port); sett().SetServer( name, address, port ); ui().DoConnect( name, CurrentNick, CurrentPassword ); } void ServerEvents::AutoCheckCommandSpam( Battle& battle, User& user ) { wxString nick = user.GetNick(); MessageSpamCheck info = m_spam_check[nick]; time_t now = time( 0 ); if ( info.lastmessage == now ) info.count++; else info.count = 0; info.lastmessage = now; m_spam_check[nick] = info; if ( info.count == 7 ) { battle.DoAction( _T("is autokicking ") + nick + _T(" due to command spam.") ); battle.KickPlayer( user ); } } void ServerEvents::OnMutelistBegin( const wxString& channel ) { mutelistWindow( _("Begin mutelist for ") + channel, wxString::Format( _("%s mutelist"), channel.c_str() ) ); } void ServerEvents::OnMutelistItem( const wxString& /*unused*/, const wxString& mutee, const wxString& description ) { wxString message = mutee; wxString desc = description; wxString mutetime = GetWordParam( desc ); long time; if ( mutetime == _T("indefinite") ) message << _(" indefinite time remaining"); else if ( mutetime.ToLong(&time) ) message << wxString::Format( _(" %d minutes remaining"), time/60 + 1 ); else message << mutetime; if ( !desc.IsEmpty() ) message << _T(", ") << desc; mutelistWindow( message ); } void ServerEvents::OnMutelistEnd( const wxString& channel ) { mutelistWindow( _("End mutelist for ") + channel ); } void ServerEvents::OnScriptStart( int battleid ) { if ( !m_serv.BattleExists( battleid ) ) { return; } m_serv.GetBattle( battleid ).ClearScript(); } void ServerEvents::OnScriptLine( int battleid, const wxString& line ) { if ( !m_serv.BattleExists( battleid ) ) { return; } m_serv.GetBattle( battleid ).AppendScriptLine( line ); } void ServerEvents::OnScriptEnd( int battleid ) { if ( !m_serv.BattleExists( battleid ) ) { return; } m_serv.GetBattle( battleid ).GetBattleFromScript( true ); } void ServerEvents::OnFileDownload( bool autolaunch, bool autoclose, bool /*disconnectonrefuse*/, const wxString& FileName, const wxString& url, const wxString& description ) { if ( sett().IgnoreOfferfile() ) return; wxString refinedurl; if ( url.Find(_T("http://")) != wxNOT_FOUND ) refinedurl = url.AfterFirst(_T('/')).AfterFirst(_T('/')); else refinedurl = url; bool result = ui().Ask( _("Download update"), wxString::Format( _("Would you like to download %s ? The file offers the following updates:\n\n%s\n\nThe download will be started in the background, you will be notified on operation completed."), url.c_str(), description.c_str() ) ); if ( result ) { m_autoclose = autoclose; m_autolaunch = autolaunch; wxString filename; if ( FileName != _T("*") ) filename = FileName; else filename = _T("Spring installer.exe"); m_savepath = sett().GetCurrentUsedDataDir() + filename; wxLogMessage(_T("downloading update in: %s, from: %s"),m_savepath.c_str(),refinedurl.c_str()); OpenWebBrowser( url ); //new HttpDownloaderThread( refinedurl, m_savepath, *this, wxID_HIGHEST + 100, true, false ); } } void ServerEvents::OnSpringDownloadEvent( wxCommandEvent& event ) { int code = event.GetInt(); wxLogMessage(event.GetString()); if ( code != 0) { customMessageBox(SL_MAIN_ICON, _("There was an error downloading for the latest version.\n"), _("Error")); wxString err; switch (code) { case wxPROTO_NETERR: err = _("Network Error"); break; case wxPROTO_PROTERR: err = _("Negotiation error"); break; case wxPROTO_CONNERR: err = _T("Failed to connect to server"); break; case wxPROTO_INVVAL: err = _("Invalid Value"); break; case wxPROTO_NOHNDLR: err = _("No Handler"); break; case wxPROTO_NOFILE: err = _("File doesn't exit"); break; case wxPROTO_ABRT: err = _("Action Aborted"); break; case wxPROTO_RCNCT: err = _("Reconnection Error"); break; default: err = _("Unknown Error"); break; } wxLogDebugFunc(_T("Error connecting! Error is: ") + err); customMessageBoxNoModal(SL_MAIN_ICON, _T("Error connecting! (") + err + _T(")\nPlease update manually from http://springrts.com"), _T("")); } else { wxString text = _("Download complete, location is: ") + m_savepath; if ( m_autoclose ) text += _("\nlobby will get closed now."); customMessageBox(SL_MAIN_ICON, text, _("Download complete.") ); if ( m_autolaunch ) { if ( !wxExecute( _T("\"") + m_savepath + _T("\""), wxEXEC_ASYNC ) ) { customMessageBoxNoModal(SL_MAIN_ICON, _("Couldn't launch installer. File location is: ") + m_savepath, _("Couldn't launch installer.") ); } } if ( m_autoclose ) { ui().mw().Close(); } } } void ServerEvents::OnForceJoinBattle(int battleid, const wxString &scriptPW) { if ( m_serv.GetCurrentBattle() ) m_serv.GetCurrentBattle()->Leave(); m_serv.JoinBattle( battleid, scriptPW ); UiEvents::GetStatusEventSender( UiEvents::addStatusMessage ).SendEvent( UiEvents::StatusData( _("Automatically moved to new battle"), 1 ) ); } springlobby-0.169/src/serverevents.h0000600000176000000410000001462112105760300021116 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SERVEREVENTS_H #define SPRINGLOBBY_HEADERGUARD_SERVEREVENTS_H #include "iserverevents.h" #include #include class Ui; struct UserStatus; struct UserBattleStatus; class Battle; //! @brief Class that implements server event behaviour. class ServerEvents : public IServerEvents, public wxEvtHandler { public: ServerEvents( Server& serv) : m_serv(serv), m_autolaunch(false), m_autoclose(false) {} ~ServerEvents() {} // Uicontrol interface void OnConnected( const wxString& server_name, const wxString& server_ver, bool supported, const wxString& server_spring_ver, bool lanmode ); void OnDisconnected( bool wasonline ); void OnLogin(); void OnLoginInfoComplete(); void OnLogout(); void OnUnknownCommand( const wxString& command, const wxString& params ); void OnSocketError( const Sockerror& error ); void OnProtocolError( const Protocolerror error ); void OnMotd( const wxString& msg ); void OnPong( wxLongLong ping_time ); void OnNewUser( const wxString& nick, const wxString& conutry, int cpu, const wxString& id ); void OnUserStatus( const wxString& nick, UserStatus status ); void OnUserQuit( const wxString& nick ); void OnBattleOpened( int id, BattleType type, NatType nat, const wxString& nick, const wxString& host, int port, int maxplayers, bool haspass, int rank, const wxString& maphash, const wxString& map, const wxString& title, const wxString& mod ); void OnUserJoinedBattle( int battleid, const wxString& nick, const wxString& userScriptPassword ); void OnUserLeftBattle( int battleid, const wxString& nick ); void OnBattleInfoUpdated( int battleid, int spectators, bool locked, const wxString& maphash, const wxString& map ); void OnSetBattleInfo( int battleid, const wxString& param, const wxString& value ); void OnBattleInfoUpdated( int battleid ); void OnBattleClosed( int battleid ); void OnJoinedBattle( int battleid, const wxString& hash ); void OnHostedBattle( int battleid ); void OnStartHostedBattle( int battleid ); void OnClientBattleStatus( int battleid, const wxString& nick, UserBattleStatus status ); void OnBattleStartRectAdd( int battleid, int allyno, int left, int top, int right, int bottom ); void OnBattleStartRectRemove( int battleid, int allyno ); void OnBattleAddBot( int battleid, const wxString& nick, UserBattleStatus status ); void OnBattleUpdateBot( int battleid, const wxString& nick, UserBattleStatus status ); void OnBattleRemoveBot( int battleid, const wxString& nick ); void OnBattleDisableUnit( int battleid, const wxString& unitname, int count = 0 ); void OnBattleEnableUnit( int battleid, const wxString& unitname ); void OnBattleEnableAllUnits( int battleid ); void OnJoinChannelResult( bool success, const wxString& channel, const wxString& reason ); void OnChannelSaid( const wxString& channel, const wxString& who, const wxString& message ); void OnChannelJoin( const wxString& channel, const wxString& who ); void OnChannelPart( const wxString& channel, const wxString& who, const wxString& message ); void OnChannelTopic( const wxString& channel, const wxString& who, const wxString& message, int when ); void OnChannelAction( const wxString& channel, const wxString& who, const wxString& action ); void OnChannelList( const wxString& channel, const int& numusers, const wxString& topic ); void OnUserJoinChannel( const wxString& channel, const wxString& who ); void OnPrivateMessage( const wxString& user, const wxString& message, bool fromme = false ); void OnPrivateMessageEx( const wxString& user, const wxString& action, bool fromme = false ); void OnRequestBattleStatus( int battleid ); void OnSaidBattle( int battleid, const wxString& nick, const wxString& msg ); void OnBattleAction( int battleid, const wxString& nick, const wxString& msg ); void OnAcceptAgreement( const wxString& agreement ); void OnRing( const wxString& from ); void OnServerMessage( const wxString& message ); void OnServerBroadcast( const wxString& message ); void OnServerMessageBox( const wxString& message ); void OnChannelMessage( const wxString& channel, const wxString& msg ); void OnHostExternalUdpPort( const unsigned int udpport ); void OnMyExternalUdpSourcePort( const unsigned int udpport ); void OnMyInternalUdpSourcePort( const unsigned int udpport ); void OnClientIPPort( const wxString &username, const wxString &ip, unsigned int udpport ); void OnKickedFromBattle(); void OnRedirect( const wxString& address, unsigned int port, const wxString& CurrentNick, const wxString& CurrentPassword ); /// use this function to check spam from clients and autokick from the battle void AutoCheckCommandSpam( Battle& battle, User& nick ); void OnMutelistBegin( const wxString& channel ); void OnMutelistItem( const wxString& channel, const wxString& mutee, const wxString& description ); void OnMutelistEnd( const wxString& channel ); void OnScriptStart( int battleid ); void OnScriptLine( int battleid, const wxString& line ); void OnScriptEnd( int battleid ); void OnFileDownload( bool autolaunch, bool autoclose, bool disconnectonrefuse, const wxString& FileName, const wxString& url, const wxString& description ); void OnSpringDownloadEvent( wxCommandEvent& event ); void OnForceJoinBattle( int battleid, const wxString& line ); protected: Server& m_serv; std::map m_spam_check; DECLARE_EVENT_TABLE() /// spring autoupdate stuff bool m_autolaunch; bool m_autoclose; wxString m_savepath; }; #endif // SPRINGLOBBY_HEADERGUARD_SERVEREVENTS_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/settings.cpp0000600000176000000410000023240412105760300020557 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007, 2008 The SpringLobby Team. All rights reserved. */ // // Class: Settings // #include "settings.h" #ifdef __WXMSW__ #include #endif #include "Helper/slconfig.h" #include "defines.h" //to get HAVEWX?? #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_WX29 #include #endif #include #include "nonportable.h" #include "utils/conversion.h" #include "utils/debug.h" #include #include "utils/platform.h" #include "uiutils.h" #include "battlelist/battlelistfiltervalues.h" #include "playback/playbackfiltervalues.h" #include "globalsmanager.h" #include "springunitsynclib.h" #include "customlistctrl.h" #include "springsettings/presets.h" #include "Helper/sortutil.h" #include "mainwindow.h" #ifdef SL_DUMMY_COL #include "utils/customdialogs.h" #endif #include "utils/pathlistfactory.h" #ifdef __WXMSW__ #define BIN_EXT _T(".exe") #else #define BIN_EXT _T("") #endif bool Settings::m_user_defined_config = false; wxString Settings::m_user_defined_config_path = wxEmptyString; const wxChar sep = wxFileName::GetPathSeparator(); const wxString sepstring = wxString(sep); const wxColour defaultHLcolor ( 255, 0, 0 ); Settings& sett() { static LineInfo m( AT ); static GlobalObjectHolder > m_sett( m ); return m_sett; } Settings::Settings() :m_forced_springconfig_path(wxEmptyString) { wxString userfilepath = IdentityString( GetConfigfileDir() + sepstring + _T( "%s.conf" ), true ); wxString localfilepath = IdentityString( GetExecutableFolder() + sepstring + _T( "%s.conf" ), true ); if ( m_user_defined_config && wxFileName::IsFileWritable( m_user_defined_config_path ) ) { m_chosen_path = m_user_defined_config_path; SetPortableMode( false ); } else { if ( !wxFileName::FileExists( localfilepath ) || !wxFileName::IsFileWritable( localfilepath ) ) { //either local conf file does not exist, or it exists but is not writable m_chosen_path = userfilepath; SetPortableMode( false ); } else { m_chosen_path = localfilepath; // portable mode, use only current app paths SetPortableMode ( true ); } } // if it doesn't exist, try to create it if ( !wxFileName::FileExists( m_chosen_path ) ) { // if directory doesn't exist, try to create it if ( !IsPortableMode() && !wxFileName::DirExists( GetUserDataDir() ) ) wxFileName::Mkdir( GetUserDataDir(), 0755 ); wxFileOutputStream outstream( m_chosen_path ); if ( !outstream.IsOk() ) { if ( m_user_defined_config ) { wxLogError( _T( "unable to use specified config file" ) ); exit( -1 ); } } } wxFileInputStream instream( m_chosen_path ); if ( !instream.IsOk() ) { if ( m_user_defined_config ) { wxLogError( _T( "unable to use specified config file" ) ); exit( -1 ); } } m_final_config_path = m_chosen_path; m_config = new slConfig( instream ); m_config->SetRecordDefaults( true ); } Settings::~Settings() { } //! @brief Saves the settings to file void Settings::SaveSettings() { m_config->Write( _T( "/General/firstrun" ), false ); SetCacheVersion(); SetSettingsVersion(); m_config->Flush(); wxFileOutputStream outstream( m_chosen_path ); if ( !outstream.IsOk() ) { // TODO: error handling } m_config->Save( outstream ); } wxArrayString Settings::GetGroupList( const wxString& base_key ) { slConfig::PathGuard pathGuard ( m_config, base_key ); wxString groupname; long dummy; wxArrayString ret; bool groupexist = m_config->GetFirstGroup( groupname, dummy ); while ( groupexist ) { ret.Add( groupname ); groupexist = m_config->GetNextGroup( groupname, dummy ); } return ret; } wxArrayString Settings::GetEntryList( const wxString& base_key ) { slConfig::PathGuard pathGuard ( m_config, base_key ); wxString entryname; long dummy; wxArrayString ret; bool entryexist = m_config->GetFirstEntry( entryname, dummy ); while ( entryexist ) { ret.Add( entryname ); entryexist = m_config->GetNextEntry( entryname, dummy ); } return ret; } unsigned int Settings::GetGroupCount( const wxString& base_key ) { slConfig::PathGuard pathGuard ( m_config, base_key ); return m_config->GetNumberOfGroups( false ); } bool Settings::IsPortableMode() const { return m_portable_mode; } void Settings::SetPortableMode( bool mode ) { m_portable_mode = mode; } bool Settings::IsFirstRun() { return m_config->Read( _T( "/General/firstrun" ), true ); } void Settings::SetSettingsVersion() { m_config->Write( _T( "/General/SettingsVersion" ), SETTINGS_VERSION ); } int Settings::GetSettingsVersion() { return m_config->Read( _T( "/General/SettingsVersion" ), SETTINGS_VERSION ); } wxString Settings::GetLobbyWriteDir() { wxString path = GetCurrentUsedDataDir() + sepstring + _T( "lobby" ); if ( !wxFileName::DirExists( path ) ) { if ( !wxFileName::Mkdir( path, 0755 ) ) return wxEmptyString; } path += sepstring + _T( "SpringLobby" ) + sepstring; if ( !wxFileName::DirExists( path ) ) { if ( !wxFileName::Mkdir( path, 0755 ) ) return wxEmptyString; } return path; } bool Settings::UseOldSpringLaunchMethod() { return m_config->Read( _T( "/Spring/UseOldLaunchMethod" ), 0l ); } bool Settings::GetNoUDP() { return m_config->Read( _T( "/General/NoUDP" ), 0l ); } void Settings::SetNoUDP( bool value ) { m_config->Write( _T( "/General/NoUDP" ), value ); } int Settings::GetClientPort() { return m_config->Read( _T( "/General/ClientPort" ), 0l ); } void Settings::SetClientPort( int value ) { m_config->Write( _T( "/General/ClientPort" ), value ); } bool Settings::GetShowIPAddresses() { return m_config->Read( _T( "/General/ShowIP" ), 0l ); } void Settings::SetShowIPAddresses( bool value ) { m_config->Write( _T( "/General/ShowIP" ), value ); } void Settings::SetOldSpringLaunchMethod( bool value ) { m_config->Write( _T( "/Spring/UseOldLaunchMethod" ), value ); } bool Settings::GetWebBrowserUseDefault() { // See note on ambiguities, in wx/confbase.h near line 180. bool useDefault; m_config->Read( _T( "/General/WebBrowserUseDefault" ), &useDefault, DEFSETT_WEB_BROWSER_USE_DEFAULT ); return useDefault; } void Settings::SetWebBrowserUseDefault( bool useDefault ) { m_config->Write( _T( "/General/WebBrowserUseDefault" ), useDefault ); } wxString Settings::GetWebBrowserPath() { return m_config->Read( _T( "/General/WebBrowserPath" ), wxEmptyString ); } void Settings::SetWebBrowserPath( const wxString& path ) { m_config->Write( _T( "/General/WebBrowserPath" ), path ); } wxString Settings::GetCachePath() { wxString path = GetCurrentUsedDataDir() + sepstring + _T( "cache" ) + sep; if ( !wxFileName::DirExists( path ) ) { if ( !wxFileName::Mkdir( path, 0755 ) ) return wxEmptyString; } path += _T( "SpringLobby" ) + sepstring; if ( !wxFileName::DirExists( path ) ) { if ( !wxFileName::Mkdir( path, 0755 ) ) return wxEmptyString; } return path; } //! @brief sets version number for the cache, needed to nuke it in case it becomes obsolete & incompatible with new versions void Settings::SetCacheVersion() { m_config->Write( _T( "/General/CacheVersion" ), CACHE_VERSION ); } //! @brief returns the cache versioning number, do decide whenever to delete if becomes obsolete & incompatible with new versions int Settings::GetCacheVersion() { return m_config->Read( _T( "/General/CacheVersion" ), 0l ); } void Settings::SetMapCachingThreadProgress( unsigned int index ) { m_config->Write( _T( "/General/LastMapCachingThreadIndex" ), ( int )index ); } unsigned int Settings::GetMapCachingThreadProgress() { return m_config->Read( _T( "/General/LastMapCachingThreadIndex" ), 0l ); } void Settings::SetModCachingThreadProgress( unsigned int index ) { m_config->Write( _T( "/General/LastModCachingThreadIndex" ), ( int )index ); } unsigned int Settings::GetModCachingThreadProgress() { return m_config->Read( _T( "/General/LastModCachingThreadIndex" ), 0l ); } bool Settings::ShouldAddDefaultServerSettings() { return !m_config->HasSection( _T( "/Server" ) ); } //! @brief Restores default settings void Settings::SetDefaultServerSettings() { SetServer( DEFSETT_DEFAULT_SERVER_NAME, DEFSETT_DEFAULT_SERVER_HOST, DEFSETT_DEFAULT_SERVER_PORT ); SetServer( _T( "Backup server 1" ), _T( "lobby1.springlobby.info" ), 8200 ); SetServer( _T( "Backup server 2" ), _T( "lobby2.springlobby.info" ), 8200 ); // SetServer( _T( "Test server" ), _T( "taspringmaster.servegame.com" ), 8300 ); SetDefaultServer( DEFSETT_DEFAULT_SERVER_NAME ); } //! @brief convert old server settings format void Settings::ConvertOldServerSettings() { wxArrayString servers; std::map m_autosave_pass; std::map m_saved_nicks; std::map m_saved_pass; std::map m_saved_hosts; std::map m_saved_ports; int count = m_config->Read( _T( "/Servers/Count" ), 0l ); for ( int i = 0; i < count; i++ ) { wxString server_name = m_config->Read( wxFormat( _T( "/Servers/Server%d" ) ) % i, _T( "" ) ); if ( server_name == _T( "TAS Server" ) ) server_name = DEFSETT_DEFAULT_SERVER_NAME; servers.Add( server_name ); m_saved_nicks[server_name] = m_config->Read( _T( "/Server/" ) + server_name + _T( "/nick" ), _T( "" ) ); m_saved_pass[server_name] = m_config->Read( _T( "/Server/" ) + server_name + _T( "/pass" ), _T( "" ) ); m_autosave_pass[server_name] = m_config->Read( _T( "/Server/" ) + server_name + _T( "/savepass" ), 0l ); m_saved_ports[server_name] = m_config->Read( _T( "/Server/" ) + server_name + _T( "/port" ), DEFSETT_DEFAULT_SERVER_PORT ); m_saved_hosts[server_name] = m_config->Read( _T( "/Server/" ) + server_name + _T( "/host" ), DEFSETT_DEFAULT_SERVER_HOST ); } m_config->DeleteGroup( _T( "/Server" ) ); m_config->DeleteGroup( _T( "/Servers" ) ); SetDefaultServerSettings(); count = servers.GetCount(); for ( int i = 0; i < count; i++ ) { wxString server_name = servers[i]; SetServer( server_name, m_saved_hosts[server_name], m_saved_ports[server_name] ); SetServerAccountNick( server_name, m_saved_nicks[server_name] ); SetServerAccountPass( server_name, m_saved_pass[server_name] ); SetServerAccountSavePass( server_name, m_autosave_pass[server_name] ); } } //! @brief Checks if the server name/alias exists in the settings bool Settings::ServerExists( const wxString& server_name ) { return m_config->Exists( _T( "/Server/Servers/" ) + server_name ); } //! @brief Get the name/alias of the default server. //! //! @note Normally this will be the previously selected server. But at first run it will be a server that is set as the default. wxString Settings::GetDefaultServer() { wxString serv = DEFSETT_DEFAULT_SERVER_NAME; return m_config->Read( _T("/Server/Default"), serv ); } void Settings::SetAutoConnect( bool do_autoconnect ) { m_config->Write( _T( "/Server/Autoconnect" ), do_autoconnect ); } bool Settings::GetAutoConnect( ) { return m_config->Read( _T( "/Server/Autoconnect" ), 0l ); } //! @brief Set the name/alias of the default server. //! //! @param server_name the server name/alias //! @see GetDefaultServer() void Settings::SetDefaultServer( const wxString& server_name ) { m_config->Write( _T( "/Server/Default" ), server_name ); } //! @brief Get hostname of a server. //! //! @param server_name the server name/alias wxString Settings::GetServerHost( const wxString& server_name ) { wxString host = DEFSETT_DEFAULT_SERVER_HOST; return m_config->Read( _T("/Server/Servers/")+ server_name +_T("/Host"), host ); } //! @brief Set hostname of a server. //! //! @param server_name the server name/alias //! @param the host url address //! @param the port where the service is run void Settings::SetServer( const wxString& server_name, const wxString& url, int port ) { m_config->Write( _T( "/Server/Servers/" ) + server_name + _T( "/Host" ), url ); m_config->Write( _T( "/Server/Servers/" ) + server_name + _T( "/Port" ), port ); } //! @brief Deletes a server from the list. //! //! @param server_name the server name/alias void Settings::DeleteServer( const wxString& server_name ) { m_config->DeleteGroup( _T( "/Server/Servers/" ) + server_name ); } //! @brief Get port number of a server. //! //! @param server_name the server name/alias int Settings::GetServerPort( const wxString& server_name ) { return m_config->Read( _T( "/Server/Servers/" ) + server_name + _T( "/Port" ), DEFSETT_DEFAULT_SERVER_PORT ); } //! @brief Get list of server aliases wxArrayString Settings::GetServers() { return GetGroupList( _T( "/Server/Servers/" ) ); } //! @brief Get nickname of the default account for a server. //! //! @param server_name the server name/alias wxString Settings::GetServerAccountNick( const wxString& server_name ) { return m_config->Read( _T( "/Server/Servers/" ) + server_name + _T( "/Nick" ), _T( "" ) ) ; } //! @brief Set nickname of the default account for a server. //! //! @param server_name the server name/alias //! @param value the vaule to be set void Settings::SetServerAccountNick( const wxString& server_name, const wxString& value ) { m_config->Write( _T( "/Server/Servers/" ) + server_name + _T( "/Nick" ), value ); } //! @brief Get password of the default account for a server. //! //! @param server_name the server name/alias //! @todo Implement wxString Settings::GetServerAccountPass( const wxString& server_name ) { return m_config->Read( _T( "/Server/Servers/" ) + server_name + _T( "/Pass" ), _T( "" ) ); } //! @brief Set password of the default account for a server. //! //! @param server_name the server name/alias //! @param value the vaule to be set //! @todo Implement void Settings::SetServerAccountPass( const wxString& server_name, const wxString& value ) { m_config->Write( _T( "/Server/Servers/" ) + server_name + _T( "/Pass" ), value ); } //! @brief Get if the password should be saved for a default server account. //! //! @param server_name the server name/alias //! @todo Implement bool Settings::GetServerAccountSavePass( const wxString& server_name ) { return m_config->Read( _T( "/Server/Servers/" ) + server_name + _T( "/savepass" ), ( long int )false ); } //! @brief Set if the password should be saved for a default server account. //! //! @param server_name the server name/alias //! @param value the vaule to be set //! @todo Implement void Settings::SetServerAccountSavePass( const wxString& server_name, const bool value ) { m_config->Write( _T( "/Server/Servers/" ) + server_name + _T( "/savepass" ), ( long int )value ); } int Settings::GetNumChannelsJoin() { return GetGroupCount( _T( "/Channels/AutoJoin" ) ); } void Settings::AddChannelJoin( const wxString& channel , const wxString& key ) { int index = GetNumChannelsJoin(); m_config->Write( wxFormat( _T( "/Channels/AutoJoin/Channel%d/Name" ) ) % index, channel ); m_config->Write( wxFormat( _T( "/Channels/AutoJoin/Channel%d/Password" ) ) % index, key ); } void Settings::RemoveChannelJoin( const wxString& channel ) { int index = GetChannelJoinIndex( channel ); if ( index == -1 ) return; int total = GetNumChannelsJoin(); m_config->DeleteGroup( _T( "/Channels/AutoJoin/Channel" ) + TowxString( index ) ); m_config->RenameGroup( _T( "/Channels/AutoJoin/Channel" ) + TowxString( total - 1 ), _T( "/Channels/AutoJoin/Channel" ) + TowxString( index ) ); } void Settings::RemoveAllChannelsJoin() { m_config->DeleteGroup( _T( "/Channels/AutoJoin" ) ); } int Settings::GetChannelJoinIndex( const wxString& name ) { int numchannels = GetNumChannelsJoin(); int ret = -1; for ( int i = 0; i < numchannels; i++ ) { if ( m_config->Read( wxFormat( _T( "/Channels/AutoJoin/Channel%d/Name" ) ) % i, _T( "" ) ) == name ) ret = i; } return ret; } std::vector Settings::GetChannelsJoin() { std::vector ret; // int num = GetNumChannelsJoin(); wxArrayString channels = GetGroupList( _T("/Channels/AutoJoin/") ); slConfig::PathGuard pathguard( m_config, _T("/Channels/AutoJoin/") ); for ( size_t i = 0; i < channels.Count(); ++i ) { if( !channels[i].StartsWith( _T("Channel") ) ) continue; ChannelJoinInfo info; info.name = m_config->Read( channels[i] + _T("/Name" ) ); info.password = m_config->Read( channels[i] + _T("/Password" ) ); ret.push_back( info ); } return ret; } void Settings::ConvertOldChannelSettings() { int numchannels = m_config->Read( _T( "/Channels/Count" ), 0l ); m_config->DeleteEntry( _T( "/Channels/Count" ) ); for ( int i = 0; i < numchannels; i++ ) { wxString channelinfo = m_config->Read( _T( "/Channels/Channel" ) + TowxString( i ), _T( "" ) ); m_config->DeleteEntry( _T( "/Channels/Channel" ) + TowxString( i ) ); if ( channelinfo.Find( _T( " " ) ) != wxNOT_FOUND ) AddChannelJoin( channelinfo.BeforeFirst( _T( ' ' ) ), channelinfo.AfterLast( _T( ' ' ) ) ); else AddChannelJoin( channelinfo, _T( "" ) ); } } bool Settings::ShouldAddDefaultChannelSettings() { return !m_config->HasSection( _T( "/Channels" ) ); } /************* SPRINGLOBBY WINDOW POS/SIZE ******************/ //! @brief Get width of MainWindow. int Settings::GetWindowWidth( const wxString& window ) { return m_config->Read( _T( "/GUI/" ) + window + _T( "/width" ), DEFSETT_MW_WIDTH ); } //! @brief Set width position of MainWindow void Settings::SetWindowWidth( const wxString& window, const int value ) { m_config->Write( _T( "/GUI/" ) + window + _T( "/width" ), LSL::Util::Clamp( value, wxSystemSettings::GetMetric( wxSYS_WINDOWMIN_X ), wxSystemSettings::GetMetric( wxSYS_SCREEN_X ) ) ); } //! @brief Get height of MainWindow. int Settings::GetWindowHeight( const wxString& window ) { return m_config->Read( _T( "/GUI/" ) + window + _T( "/height" ), DEFSETT_MW_HEIGHT ); } //! @brief Set height position of MainWindow void Settings::SetWindowHeight( const wxString& window, const int value ) { m_config->Write( _T( "/GUI/" ) + window + _T( "/height" ), LSL::Util::Clamp( value, wxSystemSettings::GetMetric( wxSYS_WINDOWMIN_Y ), wxSystemSettings::GetMetric( wxSYS_SCREEN_Y ) ) ); } //! @brief Get top position of MainWindow. int Settings::GetWindowTop( const wxString& window ) { return m_config->Read( _T( "/GUI/" ) + window + _T( "/top" ), DEFSETT_MW_TOP ); } //! @brief Set top position of MainWindow void Settings::SetWindowTop( const wxString& window, const int value ) { m_config->Write( _T( "/GUI/" ) + window + _T( "/top" ), LSL::Util::Clamp( value, 0, wxSystemSettings::GetMetric( wxSYS_SCREEN_Y ) - 20 ) ); } //! @brief Get left position of MainWindow. int Settings::GetWindowLeft( const wxString& window ) { return m_config->Read( _T( "/GUI/" ) + window + _T( "/left" ), DEFSETT_MW_LEFT ); } //! @brief Set left position of MainWindow void Settings::SetWindowLeft( const wxString& window, const int value ) { m_config->Write( _T( "/GUI/" ) + window + _T( "/left" ), LSL::Util::Clamp( value, 0, wxSystemSettings::GetMetric( wxSYS_SCREEN_X ) - 20 ) ); } //some code duplication necessary to be able to simply use wx defaults wxSize Settings::GetWindowSize( const wxString& window, const wxSize& def ) { wxSize ret = def; ret.SetHeight( m_config->Read( _T( "/GUI/" ) + window + _T( "/height" ), ret.GetHeight() ) ); ret.SetWidth( m_config->Read( _T( "/GUI/" ) + window + _T( "/width" ), ret.GetWidth() ) ); return ret; } void Settings::SetWindowSize( const wxString& window, const wxSize& size ) { SetWindowWidth( window, size.GetWidth() ); SetWindowHeight( window, size.GetHeight() ); } //some code duplication necessary to be able to simply use wx defaults wxPoint Settings::GetWindowPos( const wxString& window, const wxPoint& def ) { wxPoint ret = def; ret.x = m_config->Read( _T( "/GUI/" ) + window + _T( "/left" ), ret.x ); ret.y = m_config->Read( _T( "/GUI/" ) + window + _T( "/top" ), ret.y ); return ret; } void Settings::SetWindowPos( const wxString& window, const wxPoint& pos ) { SetWindowLeft( window, pos.x ); SetWindowTop( window, pos.y ); } // ======================================================== wxString Settings::AutoFindSpringBin() { wxPathList pl; pl.AddEnvList( _T( "%ProgramFiles%" ) ); pl.AddEnvList( _T( "PATH" ) ); pl = PathlistFactory::AdditionalSearchPaths( pl ); return pl.FindValidPath( SPRING_BIN ); } wxString Settings::AutoFindUnitSync(wxPathList pl) const { wxString retpath = pl.FindValidPath( _T( "unitsync" ) + GetLibExtension() ); if ( retpath.IsEmpty() ) retpath = pl.FindValidPath( _T( "libunitsync" ) + GetLibExtension() ); return retpath; } wxString Settings::AutoFindBundle() { wxPathList pl = PathlistFactory::ConfigFileSearchPaths(); return pl.FindValidPath( _T( "Spring.app" ) ); } wxString Settings::AutoFindUikeys() { wxPathList pl = PathlistFactory::ConfigFileSearchPaths(); return pl.FindValidPath( _T( "uikeys.txt" ) ); } void Settings::ConvertOldSpringDirsOptions() { SetUnitSync( _T( "default" ), m_config->Read( _T( "/Spring/unitsync_loc" ), _T( "" ) ) ); SetSpringBinary( _T( "default" ), m_config->Read( _T( "/Spring/exec_loc" ), _T( "" ) ) ); SetUsedSpringIndex( _T( "default" ) ); m_config->DeleteEntry( _T( "/Spring/unitsync_loc" ) ); m_config->DeleteEntry( _T( "/Spring/use_spring_def_loc" ) ); m_config->DeleteEntry( _T( "/Spring/use_unitsync_def_loc" ) ); m_config->DeleteEntry( _T( "/Spring/dir" ) ); m_config->DeleteEntry( _T( "/Spring/exec_loc" ) ); } std::map Settings::GetSpringVersionList() const { return m_spring_versions; } void Settings::RefreshSpringVersionList() { wxLogDebugFunc( _T( "" ) ); wxArrayString list = GetGroupList( _T( "/Spring/Paths" ) ); int count = list.GetCount(); std::map usync_paths; for ( int i = 0; i < count; i++ ) { wxString groupname = list[i]; usync_paths[groupname] = GetUnitSync( groupname ); } if ( sett().GetSearchSpringOnlyInSLPath() || sett().GetUseSpringPathFromBundle() ) { usync_paths.clear(); usync_paths[sett().GetCurrentUsedSpringIndex()] = sett().GetCurrentUsedUnitSync(); } m_spring_versions = susynclib().GetSpringVersionList( usync_paths ); } wxString Settings::GetCurrentUsedSpringIndex() { return m_config->Read( _T( "/Spring/CurrentIndex" ), _T( "default" ) ); } void Settings::SetUsedSpringIndex( const wxString& index ) { m_config->Write( _T( "/Spring/CurrentIndex" ), index ); } bool Settings::GetSearchSpringOnlyInSLPath() { #ifndef __WXMSW__ return false; #endif return m_config->Read( _T( "/Spring/SearchSpringOnlyInSLPath" ), true ); } void Settings::SetSearchSpringOnlyInSLPath( bool value ) { m_config->Write( _T( "/Spring/SearchSpringOnlyInSLPath" ), value ); } void Settings::DeleteSpringVersionbyIndex( const wxString& index ) { m_config->DeleteGroup( _T( "/Spring/Path/" ) + index ); if ( GetCurrentUsedSpringIndex() == index ) SetUsedSpringIndex( _T( "" ) ); } bool Settings::IsInsideSpringBundle() { return wxFileName::FileExists(GetExecutableFolder() + sepstring + _T("spring") + BIN_EXT) && wxFileName::FileExists(GetExecutableFolder() + sepstring + _T("unitsync") + GetLibExtension()); } bool Settings::GetBundleMode() { #ifndef __WXMAC__ return false; #endif return m_config->Read(_T("/Spring/EnableBundleMode"), true); } bool Settings::GetUseSpringPathFromBundle() { #ifndef __WXMAC__ return false; #endif if ( !GetBundleMode() ) return false; return m_config->Read(_T("/Spring/UseSpringPathFromBundle"), IsInsideSpringBundle()); } void Settings::SetUseSpringPathFromBundle( bool value ) { m_config->Write(_T("/Spring/UseSpringPathFromBundle"), value ); } wxString Settings::GetCurrentUsedDataDir() { wxString dir; if ( susynclib().IsLoaded() ) { if ( susynclib().VersionSupports( SpringUnitSync::USYNC_GetDataDir ) ) dir = susynclib().GetSpringDataDir(); else dir = susynclib().GetSpringConfigString( _T( "SpringData" ), _T( "" ) ); } #ifdef __WXMSW__ if ( dir.IsEmpty() ) dir = GetExecutableFolder(); // fallback #else if ( IsPortableMode() ) dir = GetExecutableFolder(); if ( dir.IsEmpty() ) dir = wxFileName::GetHomeDir() + sepstring + _T( ".spring" ); // fallback #endif wxString stripped; if ( dir.EndsWith(sepstring,&stripped) ) return stripped; return dir; } wxString Settings::GetCurrentUsedSpringBinary() { if ( IsPortableMode() ) return GetCurrentUsedDataDir() + sepstring + _T( "spring" ) + BIN_EXT; else if ( GetSearchSpringOnlyInSLPath() ) return GetExecutableFolder() + sepstring + _T( "spring" ) + + BIN_EXT; else if ( GetUseSpringPathFromBundle() ) return GetExecutableFolder() + sepstring + _T("spring") + BIN_EXT; else return GetSpringBinary( GetCurrentUsedSpringIndex() ); } wxString Settings::GetCurrentUsedUnitSync() { if ( IsPortableMode() ) return AutoFindUnitSync( PathlistFactory::fromSinglePath( GetCurrentUsedDataDir() ) ); else if ( GetSearchSpringOnlyInSLPath() ) return GetExecutableFolder() + sepstring + _T( "unitsync" ) + GetLibExtension(); else if ( GetUseSpringPathFromBundle() ) return GetExecutableFolder() + sepstring + _T("unitsync") + GetLibExtension(); else return GetUnitSync( GetCurrentUsedSpringIndex() ); } wxString Settings::GetCurrentUsedBundle() { return GetBundle( GetCurrentUsedSpringIndex() ); } wxString Settings::GetCurrentUsedUikeys() { if ( IsPortableMode() ) return GetCurrentUsedDataDir() + sepstring + _T( "uikeys.txt" ); else if ( GetSearchSpringOnlyInSLPath() ) return GetExecutableFolder() + sepstring + _T( "uikeys.txt" ); else return GetUikeys( GetCurrentUsedSpringIndex() ); } wxString Settings::GetCurrentUsedSpringConfigFilePath() { wxString path; try { path = susynclib().GetConfigFilePath(); } catch ( unitsync_assert ) {} return path; } wxString Settings::GetUnitSync( const wxString& index ) { if ( GetBundleMode() ) return GetBundle( index )+ sepstring + _T("Contents") + sepstring + _T("MacOS") + sepstring + _T("libunitsync") + GetLibExtension(); return m_config->Read( _T( "/Spring/Paths/" ) + index + _T( "/UnitSyncPath" ), AutoFindUnitSync() ); } wxString Settings::GetSpringBinary( const wxString& index ) { if ( GetBundleMode() ) return GetBundle( index )+ sepstring + _T("Contents") + sepstring + _T("MacOS") + sepstring + _T("spring"); return m_config->Read( _T( "/Spring/Paths/" ) + index + _T( "/SpringBinPath" ), AutoFindSpringBin() ); } wxString Settings::GetBundle( const wxString& index ) { return m_config->Read( _T( "/Spring/Paths/" ) + index + _T( "/SpringBundlePath" ), AutoFindBundle() ); } void Settings::SetUnitSync( const wxString& index, const wxString& path ) { m_config->Write( _T( "/Spring/Paths/" ) + index + _T( "/UnitSyncPath" ), path ); } void Settings::SetSpringBinary( const wxString& index, const wxString& path ) { m_config->Write( _T( "/Spring/Paths/" ) + index + _T( "/SpringBinPath" ), path ); } void Settings::SetBundle( const wxString& index, const wxString& path ) { m_config->Write( _T( "/Spring/Paths/" ) + index + _T( "/SpringBundlePath" ), path ); } void Settings::SetForcedSpringConfigFilePath( const wxString& path ) { m_forced_springconfig_path = path; } wxString Settings::GetForcedSpringConfigFilePath() { if ( IsPortableMode() ) return GetCurrentUsedDataDir() + sepstring + _T( "springsettings.cfg" ); else return m_forced_springconfig_path; } // =================================================== bool Settings::GetChatLogEnable() { if ( !m_config->Exists( _T( "/ChatLog/chatlog_enable" ) ) ) SetChatLogEnable( true ); return m_config->Read( _T( "/ChatLog/chatlog_enable" ), true ); } void Settings::SetChatLogEnable( const bool value ) { m_config->Write( _T( "/ChatLog/chatlog_enable" ), value ); } wxString Settings::GetChatLogLoc() { wxString path = GetLobbyWriteDir() + _T( "chatlog" ); if ( !wxFileName::DirExists( path ) ) { if ( !wxFileName::Mkdir( path, 0755 ) ) return wxEmptyString; } return path; } wxString Settings::GetLastHostDescription() { return m_config->Read( _T( "/Hosting/LastDescription" ), _T( "" ) ); } wxString Settings::GetLastHostMod() { return m_config->Read( _T( "/Hosting/LastMod" ), _T( "" ) ); } wxString Settings::GetLastHostPassword() { return m_config->Read( _T( "/Hosting/LastPassword" ), _T( "" ) ); } int Settings::GetLastHostPort() { return m_config->Read( _T( "/Hosting/LastPort" ), DEFSETT_SPRING_PORT ); } int Settings::GetLastHostPlayerNum() { return m_config->Read( _T( "/Hosting/LastPlayerNum" ), 4 ); } int Settings::GetLastHostNATSetting() { return m_config->Read( _T( "/Hosting/LastNATSetting" ), ( long )0 ); } wxString Settings::GetLastHostMap() { return m_config->Read( _T( "/Hosting/LastMap" ), _T( "" ) ); } int Settings::GetLastRankLimit() { return m_config->Read( _T( "/Hosting/LastRank" ), 0l ); } bool Settings::GetTestHostPort() { return m_config->Read( _T( "/Hosting/TestHostPort" ), 0l ); } bool Settings::GetLastAutolockStatus() { return m_config->Read( _T( "/Hosting/LastAutoLock" ), true ); } bool Settings::GetLastHostRelayedMode() { return m_config->Read( _T( "/Hosting/LastRelayedMode" ), 0l ); } wxColour Settings::GetBattleLastColour() { return wxColour( m_config->Read( _T( "/Hosting/MyLastColour" ), _T( "#FFFF00" ) ) ); } void Settings::SetBattleLastColour( const wxColour& col ) { m_config->Write( _T( "/Hosting/MyLastColour" ), col.GetAsString( wxC2S_HTML_SYNTAX ) ); } void Settings::SetLastHostDescription( const wxString& value ) { m_config->Write( _T( "/Hosting/LastDescription" ), value ); } void Settings::SetLastHostMod( const wxString& value ) { m_config->Write( _T( "/Hosting/LastMod" ), value ); } void Settings::SetLastHostPassword( const wxString& value ) { m_config->Write( _T( "/Hosting/LastPassword" ), value ); } void Settings::SetLastHostPort( int value ) { m_config->Write( _T( "/Hosting/LastPort" ), value ); } void Settings::SetLastHostPlayerNum( int value ) { m_config->Write( _T( "/Hosting/LastPlayerNum" ), value ); } void Settings::SetLastHostNATSetting( int value ) { m_config->Write( _T( "/Hosting/LastNATSetting" ), value ); } void Settings::SetLastHostMap( const wxString& value ) { m_config->Write( _T( "/Hosting/LastMap" ), value ); } void Settings::SetLastRankLimit( int rank ) { m_config->Write( _T( "/Hosting/LastRank" ), rank ); } void Settings::SetLastAI( const wxString& ai ) { m_config->Write( _T( "/SinglePlayer/LastAI" ), ai ); } void Settings::SetTestHostPort( bool value ) { m_config->Write( _T( "/Hosting/TestHostPort" ), value ); } void Settings::SetLastAutolockStatus( bool value ) { m_config->Write( _T( "/Hosting/LastAutoLock" ), value ); } void Settings::SetLastHostRelayedMode( bool value ) { m_config->Write( _T( "/Hosting/LastRelayedMode" ), value ); } void Settings::SetHostingPreset( const wxString& name, int optiontype, std::map options ) { m_config->DeleteGroup( _T( "/Hosting/Preset/" ) + name + _T( "/" ) + TowxString( optiontype ) ); for ( std::map::const_iterator it = options.begin(); it != options.end(); ++it ) { m_config->Write( _T( "/Hosting/Preset/" ) + name + _T( "/" ) + TowxString( optiontype ) + _T( "/" ) + it->first , it->second ); } } std::map Settings::GetHostingPreset( const wxString& name, int optiontype ) { wxString path_base = _T( "/Hosting/Preset/" ) + name + _T( "/" ) + TowxString( optiontype ); std::map ret; wxArrayString list = GetEntryList( path_base ); slConfig::PathGuard pathGuard ( m_config, path_base ); int count = list.GetCount(); for ( int i = 0; i < count; i ++ ) { wxString keyname = list[i]; wxString val = m_config->Read( keyname ); ret[keyname] = val; } return ret; } wxArrayString Settings::GetPresetList() { return GetGroupList( _T( "/Hosting/Preset" ) ); } void Settings::DeletePreset( const wxString& name ) { m_config->DeleteGroup( _T( "/Hosting/Preset/" ) + name ); //delete mod default preset associated wxArrayString list = GetEntryList( _T( "/Hosting/ModDefaultPreset" ) ); int count = list.GetCount(); for ( int i = 0; i < count; i ++ ) { wxString keyname = list[i]; if ( m_config->Read( keyname ) == name ) m_config->DeleteEntry( keyname ); } } wxString Settings::GetModDefaultPresetName( const wxString& modname ) { return m_config->Read( _T( "/Hosting/ModDefaultPreset/" ) + modname ); } void Settings::SetModDefaultPresetName( const wxString& modname, const wxString& presetname ) { m_config->Write( _T( "/Hosting/ModDefaultPreset/" ) + modname, presetname ); } void Settings::SetBalanceMethod( int value ) { m_config->Write( _T( "/Hosting/BalanceMethod" ), value ); } int Settings::GetBalanceMethod() { return m_config->Read( _T( "/Hosting/BalanceMethod" ), 1l ); } void Settings::SetBalanceClans( bool value ) { m_config->Write( _T( "/Hosting/BalanceClans" ), value ); } bool Settings::GetBalanceClans() { return m_config->Read( _T( "/Hosting/BalanceClans" ), true ); } void Settings::SetBalanceStrongClans( bool value ) { m_config->Write( _T( "/Hosting/BalanceStrongClans" ), value ); } bool Settings::GetBalanceStrongClans() { return m_config->Read( _T( "/Hosting/BalanceStrongClans" ), 0l ); } void Settings::SetBalanceGrouping( int value ) { m_config->Write( _T( "/Hosting/BalanceGroupingSize" ), value ); } int Settings::GetBalanceGrouping() { return m_config->Read( _T( "/Hosting/BalanceGroupingSize" ), 0l ); } void Settings::SetFixIDMethod( int value ) { m_config->Write( _T( "/Hosting/FixIDMethod" ), value ); } int Settings::GetFixIDMethod() { return m_config->Read( _T( "/Hosting/FixIDMethod" ), 1l ); } void Settings::SetFixIDClans( bool value ) { m_config->Write( _T( "/Hosting/FixIDClans" ), value ); } bool Settings::GetFixIDClans() { return m_config->Read( _T( "/Hosting/FixIDClans" ), true ); } void Settings::SetFixIDStrongClans( bool value ) { m_config->Write( _T( "/Hosting/FixIDStrongClans" ), value ); } bool Settings::GetFixIDStrongClans() { return m_config->Read( _T( "/Hosting/FixIDStrongClans" ), 0l ); } void Settings::SetFixIDGrouping( int value ) { m_config->Write( _T( "/Hosting/FixIDGroupingSize" ), value ); } int Settings::GetFixIDGrouping() { return m_config->Read( _T( "/Hosting/FixIDGroupingSize" ), 0l ); } wxString Settings::GetLastAI() { return m_config->Read( _T( "/SinglePlayer/LastAI" ), wxEmptyString ); } void Settings::SetDisplayJoinLeave( bool display, const wxString& channel ) { m_config->Write( _T( "/Channels/DisplayJoinLeave/" ) + channel, display ); } bool Settings::GetDisplayJoinLeave( const wxString& channel ) { return m_config->Read( _T( "/Channels/DisplayJoinLeave/" ) + channel, 0l ); } void Settings::SetChatHistoryLenght( int historylines ) { m_config->Write( _T( "/Chat/HistoryLinesLenght" ), historylines ); } int Settings::GetChatHistoryLenght() { return m_config->Read( _T( "/Chat/HistoryLinesLenght" ), 1000l ); } void Settings::SetChatPMSoundNotificationEnabled( bool enabled ) { m_config->Write( _T( "/Chat/PMSound" ), enabled ); } bool Settings::GetChatPMSoundNotificationEnabled() { return m_config->Read( _T( "/Chat/PMSound" ), 1l ); } wxColour ConvertOldRGBFormat( wxString color ) { long R = 0, G = 0, B = 0; color.BeforeFirst( _T( ' ' ) ).ToLong( &R ); color = color.AfterFirst( _T( ' ' ) ); color.BeforeFirst( _T( ' ' ) ).ToLong( &G ); color = color.AfterFirst( _T( ' ' ) ); color.BeforeFirst( _T( ' ' ) ).ToLong( &B ); return wxColour( R % 256, G % 256, B % 256 ); } void Settings::ConvertOldColorSettings() { SetChatColorNormal( ConvertOldRGBFormat( m_config->Read( _T( "/Chat/Colour/Normal" ), _T( "0 0 0" ) ) ) ); SetChatColorBackground( ConvertOldRGBFormat( m_config->Read( _T( "/Chat/Colour/Background" ), _T( "255 255 255" ) ) ) ); SetChatColorHighlight( ConvertOldRGBFormat( m_config->Read( _T( "/Chat/Colour/Highlight" ), _T( "255 0 0" ) ) ) ); SetChatColorMine( ConvertOldRGBFormat( m_config->Read( _T( "/Chat/Colour/Mine" ), _T( "138 138 138" ) ) ) ); SetChatColorNotification( ConvertOldRGBFormat( m_config->Read( _T( "/Chat/Colour/Notification" ), _T( "255 40 40" ) ) ) ); SetChatColorServer( ConvertOldRGBFormat( m_config->Read( _T( "/Chat/Colour/Server" ), _T( "0 80 128" ) ) ) ); SetChatColorClient( ConvertOldRGBFormat( m_config->Read( _T( "/Chat/Colour/Client" ), _T( "20 200 25" ) ) ) ); SetChatColorJoinPart( ConvertOldRGBFormat( m_config->Read( _T( "/Chat/Colour/JoinPart" ), _T( "66 204 66" ) ) ) ); SetChatColorError( ConvertOldRGBFormat( m_config->Read( _T( "/Chat/Colour/Error" ), _T( "128 0 0" ) ) ) ); SetChatColorTime( ConvertOldRGBFormat( m_config->Read( _T( "/Chat/Colour/Time" ), _T( "100 100 140" ) ) ) ); SetChatColorAction( ConvertOldRGBFormat( m_config->Read( _T( "/Chat/Colour/Action" ), _T( "230 0 255" ) ) ) ); SetBattleLastColour( ConvertOldRGBFormat( m_config->Read( _T( "/Hosting/MyLastColour" ), _T( "255 255 0" ) ) ) ); //convert custom color palette, note 16 colors is wx limit wxArrayString palettes = GetGroupList( _T( "/CustomColors" ) ); for ( unsigned int j = 0; j < palettes.GetCount(); j++ ) { wxString paletteName = palettes[j]; for ( int i = 0; i < 16; ++i ) { wxColour col( ConvertOldRGBFormat( m_config->Read( _T( "/CustomColors/" ) + paletteName + _T( "/" ) + TowxString( i ), _T( "255 255 255" ) ) ) ); m_config->Write( _T( "/CustomColors/" ) + paletteName + _T( "/" ) + TowxString( i ), col.GetAsString( wxC2S_HTML_SYNTAX ) ); } } wxArrayString groups = GetGroupList( _T( "/Groups" ) ); for ( unsigned int j = 0; j < groups.GetCount(); j++ ) { wxString group = groups[j]; wxColour col( ConvertOldRGBFormat ( m_config->Read( _T( "/Groups/" ) + group + _T( "/Opts/HLColor" ) , _T( "100 100 140" ) ) ) ); m_config->Write( _T( "/Groups/" ) + group + _T( "/Opts/HLColor" ), col.GetAsString( wxC2S_HTML_SYNTAX ) ); } } wxColour Settings::GetChatColorNormal() { return wxColour( m_config->Read( _T( "/Chat/Colour/Normal" ), _T( "#000000" ) ) ); } void Settings::SetChatColorNormal( wxColour value ) { m_config->Write( _T( "/Chat/Colour/Normal" ), value.GetAsString( wxC2S_CSS_SYNTAX ) ); } wxColour Settings::GetChatColorBackground() { return wxColour( m_config->Read( _T( "/Chat/Colour/Background" ), _T( "#FFFFFF" ) ) ); } void Settings::SetChatColorBackground( wxColour value ) { m_config->Write( _T( "/Chat/Colour/Background" ), value.GetAsString( wxC2S_CSS_SYNTAX ) ); } wxColour Settings::GetChatColorHighlight() { return wxColour( m_config->Read( _T( "/Chat/Colour/Highlight" ), _T( "#FF0000" ) ) ); } void Settings::SetChatColorHighlight( wxColour value ) { m_config->Write( _T( "/Chat/Colour/Highlight" ), value.GetAsString( wxC2S_CSS_SYNTAX ) ); } wxColour Settings::GetChatColorMine() { return wxColour( m_config->Read( _T( "/Chat/Colour/Mine" ), _T( "#8A8A8A" ) ) ); } void Settings::SetChatColorMine( wxColour value ) { m_config->Write( _T( "/Chat/Colour/Mine" ), value.GetAsString( wxC2S_CSS_SYNTAX ) ); } wxColour Settings::GetChatColorNotification() { return wxColour( m_config->Read( _T( "/Chat/Colour/Notification" ), _T( "#FF2828" ) ) ); } void Settings::SetChatColorNotification( wxColour value ) { m_config->Write( _T( "/Chat/Colour/Notification" ), value.GetAsString( wxC2S_CSS_SYNTAX ) ); } wxColour Settings::GetChatColorAction() { return wxColour( m_config->Read( _T( "/Chat/Colour/Action" ), _T( "#E600FF" ) ) ); } void Settings::SetChatColorAction( wxColour value ) { m_config->Write( _T( "/Chat/Colour/Action" ), value.GetAsString( wxC2S_CSS_SYNTAX ) ); } wxColour Settings::GetChatColorServer() { return wxColour( m_config->Read( _T( "/Chat/Colour/Server" ), _T( "#005080" ) ) ); } void Settings::SetChatColorServer( wxColour value ) { m_config->Write( _T( "/Chat/Colour/Server" ), value.GetAsString( wxC2S_CSS_SYNTAX ) ); } wxColour Settings::GetChatColorClient() { return wxColour( m_config->Read( _T( "/Chat/Colour/Client" ), _T( "#14C819" ) ) ); } void Settings::SetChatColorClient( wxColour value ) { m_config->Write( _T( "/Chat/Colour/Client" ), value.GetAsString( wxC2S_CSS_SYNTAX ) ); } wxColour Settings::GetChatColorJoinPart() { return wxColour( m_config->Read( _T( "/Chat/Colour/JoinPart" ), _T( "#42CC42" ) ) ); } void Settings::SetChatColorJoinPart( wxColour value ) { m_config->Write( _T( "/Chat/Colour/JoinPart" ), value.GetAsString( wxC2S_CSS_SYNTAX ) ); } wxColour Settings::GetChatColorError() { return wxColour( m_config->Read( _T( "/Chat/Colour/Error" ), _T( "#800000" ) ) ); } void Settings::SetChatColorError( wxColour value ) { m_config->Write( _T( "/Chat/Colour/Error" ), value.GetAsString( wxC2S_CSS_SYNTAX ) ); } wxColour Settings::GetChatColorTime() { return wxColour( m_config->Read( _T( "/Chat/Colour/Time" ), _T( "#64648C" ) ) ); } void Settings::SetChatColorTime( wxColour value ) { m_config->Write( _T( "/Chat/Colour/Time" ), value.GetAsString( wxC2S_CSS_SYNTAX ) ); } wxFont Settings::GetChatFont() { wxString info = m_config->Read( _T( "/Chat/Font" ), wxEmptyString ); if ( info != wxEmptyString ) { wxFont f; f.SetNativeFontInfo( info ); return f; } else { wxFont f( 8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL ); return f; } } void Settings::SetChatFont( wxFont value ) { m_config->Write( _T( "/Chat/Font" ), value.GetNativeFontInfoDesc() ); } bool Settings::GetSmartScrollEnabled() { return m_config->Read( _T( "/Chat/SmartScrollEnabled" ), true ); } void Settings::SetSmartScrollEnabled( bool value ) { m_config->Write( _T( "/Chat/SmartScrollEnabled" ), value ); } bool Settings::GetAlwaysAutoScrollOnFocusLost() { return m_config->Read( _T( "/Chat/AlwaysAutoScrollOnFocusLost" ), true ); } void Settings::SetAlwaysAutoScrollOnFocusLost( bool value ) { m_config->Write( _T( "/Chat/AlwaysAutoScrollOnFocusLost" ), value ); } void Settings::ConvertOldHiglightSettings() { SetHighlightedWords( wxStringTokenize( m_config->Read( _T( "/Chat/HighlightedWords" ), _T( "" ) ), _T( ";" ) ) ); } void Settings::SetUseIrcColors( bool value ) { m_config->Write( _T( "/Chat/UseIrcColors" ), value ); } bool Settings::GetUseIrcColors() { return m_config->Read( _T( "/Chat/UseIrcColors" ), true ); } void Settings::setFromList(const wxArrayString& list, const wxString& path) { wxString string; for ( unsigned int i = 0; i < list.GetCount(); i++ ) string << list[i] << _T( ";" ); m_config->Write( path, string ); } wxArrayString Settings::getFromList(const wxString& path) { return wxStringTokenize( m_config->Read( path, wxString() ), _T(";") ); } void Settings::SetHighlightedWords( const wxArrayString& words ) { setFromList( words, _T("/Chat/HighlightedWords") ); } wxArrayString Settings::GetHighlightedWords() { return getFromList( _T("/Chat/HighlightedWords") ); } void Settings::ConvertLists() { const wxArrayString current_hl = GetEntryList( _T( "/Chat/HighlightedWords" ) ); m_config->DeleteGroup( _T( "/Chat/HighlightedWords" ) ); SaveSettings(); SetHighlightedWords( current_hl ); SaveSettings(); } void Settings::SetRequestAttOnHighlight( const bool req ) { m_config->Write( _T( "/Chat/ReqAttOnHighlight" ), req ); } bool Settings::GetRequestAttOnHighlight( ) { return m_config->Read( _T( "/Chat/ReqAttOnHighlight" ), 0l ); } BattleListFilterValues Settings::GetBattleFilterValues( const wxString& profile_name ) { BattleListFilterValues filtervalues; filtervalues.description = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/description" ), _T( "" ) ); filtervalues.host = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/host" ), _T( "" ) ); filtervalues.map = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/map" ), _T( "" ) ); filtervalues.map_show = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/map_show" ), 0L ); filtervalues.maxplayer = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/maxplayer" ), _T( "All" ) ); filtervalues.maxplayer_mode = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/maxplayer_mode" ), _T( "=" ) ); filtervalues.mod = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/mod" ), _T( "" ) ); filtervalues.mod_show = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/mod_show" ), 0L ); filtervalues.player_mode = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/player_mode" ), _T( "=" ) ); filtervalues.player_num = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/player_num" ), _T( "All" ) ); filtervalues.rank = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/rank" ), _T( "All" ) ); filtervalues.rank_mode = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/rank_mode" ), _T( "<" ) ); filtervalues.spectator = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/spectator" ), _T( "All" ) ); filtervalues.spectator_mode = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/spectator_mode" ), _T( "=" ) ); filtervalues.status_full = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/status_full" ), true ); filtervalues.status_locked = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/status_locked" ), true ); filtervalues.status_open = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/status_open" ), true ); filtervalues.status_passworded = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/status_passworded" ), true ); filtervalues.status_start = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/status_start" ), true ); filtervalues.highlighted_only = m_config->Read( _T( "/BattleFilter/" ) + profile_name + _T( "/highlighted_only" ), 0l ); return filtervalues; } void Settings::SetBattleFilterValues( const BattleListFilterValues& filtervalues, const wxString& profile_name ) { m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/description" ), filtervalues.description ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/host" ), filtervalues.host ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/map" ), filtervalues.map ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/map_show" ), filtervalues.map_show ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/maxplayer" ), filtervalues.maxplayer ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/maxplayer_mode" ), filtervalues.maxplayer_mode ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/mod" ), filtervalues.mod ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/mod_show" ), filtervalues.mod_show ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/player_mode" ), filtervalues.player_mode ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/player_num" ), filtervalues.player_num ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/rank" ), filtervalues.rank ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/rank_mode" ), filtervalues.rank_mode ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/spectator" ), filtervalues.spectator ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/spectator_mode" ), filtervalues.spectator_mode ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/status_full" ), filtervalues.status_full ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/status_locked" ), filtervalues.status_locked ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/status_open" ), filtervalues.status_open ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/status_passworded" ), filtervalues.status_passworded ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/status_start" ), filtervalues.status_start ); m_config->Write( _T( "/BattleFilter/" ) + profile_name + _T( "/highlighted_only" ), filtervalues.highlighted_only ); m_config->Write( _T( "/BattleFilter/lastprofile" ), profile_name ); } bool Settings::GetBattleFilterActivState() const { return m_config->Read( _T( "/BattleFilter/Active" ) , 0l ); } void Settings::SetBattleFilterActivState( const bool state ) { m_config->Write( _T( "/BattleFilter/Active" ) , state ); } bool Settings::GetBattleLastAutoStartState() { return m_config->Read( _T( "/Hosting/AutoStart" ) , 0l ); } void Settings::SetBattleLastAutoStartState( bool value ) { m_config->Write( _T( "/Hosting/AutoStart" ), value ); } bool Settings::GetBattleLastAutoControlState() { return m_config->Read( _T( "/Hosting/AutoControl" ) , 0l ); } void Settings::SetBattleLastAutoControlState( bool value ) { m_config->Write( _T( "/Hosting/AutoControl" ), value ); } int Settings::GetBattleLastAutoSpectTime() { return m_config->Read( _T( "/Hosting/AutoSpectTime" ) , 0l ); } void Settings::SetBattleLastAutoSpectTime( int value ) { m_config->Write( _T( "/Hosting/AutoSpectTime" ) , value ); } bool Settings::GetBattleLastAutoAnnounceDescription() { return m_config->Read( _T( "/Hosting/AutoAnnounceDescription" ) , 0l ); } void Settings::SetBattleLastAutoAnnounceDescription( bool value ) { m_config->Write( _T( "/Hosting/AutoAnnounceDescription" ) , value ); } void Settings::SetBattleLastSideSel( const wxString& modname, int sidenum ) { m_config->Write(_T("/Battle/Sides/" + modname), sidenum); } int Settings::GetBattleLastSideSel( const wxString& modname ) { return m_config->Read( _T("/Battle/Sides/" + modname), 0l ); } void Settings::SetMapLastStartPosType( const wxString& mapname, const wxString& startpostype ) { m_config->Write( _T( "/Hosting/MapLastValues/" ) + mapname + _T( "/startpostype" ), startpostype ); } void Settings::SetMapLastRectPreset( const wxString& mapname, std::vector rects ) { wxString basepath = _T( "/Hosting/MapLastValues/" ) + mapname + _T( "/Rects" ); m_config->DeleteGroup( basepath ); for ( std::vector::const_iterator itor = rects.begin(); itor != rects.end(); ++itor ) { SettStartBox box = *itor; wxString additionalpath = basepath + _T( "/Rect" ) + TowxString( box.ally ) + _T( "/" ); m_config->Write( additionalpath + _T( "TopLeftX" ), box.topx ); m_config->Write( additionalpath + _T( "TopLeftY" ), box.topy ); m_config->Write( additionalpath + _T( "BottomRightX" ), box.bottomx ); m_config->Write( additionalpath + _T( "BottomRightY" ), box.bottomy ); m_config->Write( additionalpath + _T( "AllyTeam" ), box.ally ); } } wxString Settings::GetMapLastStartPosType( const wxString& mapname ) { return m_config->Read( _T( "/Hosting/MapLastValues/" ) + mapname + _T( "/startpostype" ), _T( "" ) ); } std::vector Settings::GetMapLastRectPreset( const wxString& mapname ) { wxString basepath = _T( "/Hosting/MapLastValues/" ) + mapname + _T( "/Rects" ); wxArrayString boxes = GetGroupList( basepath ); std::vector ret; for ( unsigned int i = 0; i < boxes.GetCount(); i++ ) { wxString additionalpath = basepath + _T( "/" ) + boxes[i] + _T( "/" ); SettStartBox box; box.topx = m_config->Read( additionalpath + _T( "TopLeftX" ), -1 ); box.topy = m_config->Read( additionalpath + _T( "TopLeftY" ), -1 ); box.bottomx = m_config->Read( additionalpath + _T( "BottomRightX" ), -1 ); box.bottomy = m_config->Read( additionalpath + _T( "BottomRightY" ), -1 ); box.ally = m_config->Read( additionalpath + _T( "AllyTeam" ), -1 ); ret.push_back( box ); } return ret; } bool Settings::GetDisableSpringVersionCheck() { bool ret; m_config->Read( _T( "/Spring/DisableVersionCheck" ), &ret, false ); return ret; } wxString Settings::GetLastBattleFilterProfileName() { return m_config->Read( _T( "/BattleFilter/lastprofile" ), _T( "default" ) ); } unsigned int Settings::GetTorrentPort() { return ( unsigned int )m_config->Read( _T( "/Torrent/Port" ), DEFSETT_SPRING_PORT + 1 ); } void Settings::SetTorrentPort( unsigned int port ) { m_config->Write( _T( "/Torrent/port" ), ( int )port ); } int Settings::GetTorrentUploadRate() { return m_config->Read( _T( "/Torrent/UploadRate" ), -1 ); } void Settings::SetTorrentUploadRate( int speed ) { m_config->Write( _T( "/Torrent/UploadRate" ), speed ); } int Settings::GetTorrentDownloadRate() { return m_config->Read( _T( "/Torrent/DownloadRate" ), -1 ); } void Settings::SetTorrentDownloadRate( int speed ) { m_config->Write( _T( "/Torrent/DownloadRate" ), speed ); } int Settings::GetTorrentSystemSuspendMode() { return m_config->Read( _T( "/Torrent/SuspendMode" ), 0l ); } void Settings::SetTorrentSystemSuspendMode( int mode ) { m_config->Write( _T( "/Torrent/SuspendMode" ), mode ); } int Settings::GetTorrentThrottledUploadRate() { return m_config->Read( _T( "/Torrent/ThrottledUploadRate" ), 0l ); } void Settings::SetTorrentThrottledUploadRate( int speed ) { m_config->Write( _T( "/Torrent/ThrottledUploadRate" ), speed ); } int Settings::GetTorrentThrottledDownloadRate() { return m_config->Read( _T( "/Torrent/ThrottledDownloadRate" ), 0l ); } void Settings::SetTorrentThrottledDownloadRate( int speed ) { m_config->Write( _T( "/Torrent/ThrottledDownloadRate" ), speed ); } void Settings::SetTorrentMaxConnections( int connections ) { m_config->Write( _T( "/Torrent/MaxConnections" ), connections ); } int Settings::GetTorrentMaxConnections() { return m_config->Read( _T( "/Torrent/MaxConnections" ), 250 ); } void Settings::SetTorrentListToResume( const std::vector& list ) { unsigned int TorrentCount = list.size(); m_config->DeleteGroup( _T( "/Torrent/ResumeList" ) ); for ( unsigned int i = 0; i < TorrentCount; i++ ) { m_config->Write( _T( "/Torrent/ResumeList/" ) + TowxString( i ), list[i] ); } } std::vector Settings::GetTorrentListToResume() { std::vector list; slConfig::PathGuard pathGuard ( m_config, _T( "/Torrent/ResumeList" ) ); wxArrayString entries = GetEntryList( _T( "/Torrent/ResumeList" ) ); for ( size_t i = 0; i < entries.Count(); ++i ) { wxString ToAdd; if ( m_config->Read( entries[i], &ToAdd ) ) list.push_back( ToAdd ); } return list; } void Settings::ClearTorrentListToResume() { m_config->DeleteGroup( _T("/Torrent/ResumeList") ); } wxFileName Settings::GetTorrentDir() { wxFileName torrentDir( GetLobbyWriteDir() ); torrentDir.AppendDir( _T( "torrents" ) ); /* if ( !torrentDir.DirExists() ) { if ( !torrentDir.Mkdir( 0755 ) ) torrentDir.Clear(); } */ return torrentDir; } wxFileName Settings::GetTorrentDataDir() { wxFileName torrentDir( GetLobbyWriteDir() ); torrentDir.AppendDir( _T( "downloads" ) ); /* if ( !torrentDir.DirExists() ) { if ( !torrentDir.Mkdir( 0755 ) ) torrentDir.Clear(); } */ return torrentDir; } wxString Settings::GetTempStorage() { return wxFileName::GetTempDir(); } void Settings::SetShowTooltips( bool show ) { m_config->Write( _T( "/GUI/ShowTooltips" ), show ); } bool Settings::GetShowTooltips() { return m_config->Read( _T( "/GUI/ShowTooltips" ), 1l ); } void Settings::RemoveLayouts() { m_config->DeleteEntry(_T("/GUI/DefaultLayout")); m_config->DeleteGroup(_T("/Layout")); m_config->DeleteGroup(_T("/GUI/AUI")); } void Settings::SetColumnWidth( const wxString& list_name, const int column_ind, const int column_width ) { m_config->Write( _T( "GUI/ColumnWidths/" ) + list_name + _T( "/" ) + TowxString( column_ind ), column_width ); } int Settings::GetColumnWidth( const wxString& list_name, const int column ) { const int orgwidth = m_config->Read( _T( "/GUI/ColumnWidths/" ) + list_name + _T( "/" ) + TowxString( column ), columnWidthUnset ); int width = orgwidth; if ( orgwidth > -1 ) //-3 is unset, -2 and -1 used for auto size by wx width = std::max ( width, int( Settings::columnWidthMinimum ) ); //removing the temporary creation here gives me undefined ref error (koshi) return width; } void Settings::NukeColumnWidths() { m_config->DeleteGroup(_T("/GUI/ColumnWidths/")); } void Settings::SetPeopleList( const wxArrayString& friends, const wxString& group ) { unsigned int friendsCount = friends.GetCount(); m_config->DeleteGroup( _T( "/Groups/" ) + group + _T( "/Members/" ) ); for ( unsigned int i = 0; i < friendsCount ; i++ ) { m_config->Write( _T( "/Groups/" ) + group + _T( "/Members/" ) + TowxString( i ), friends[i] ); } } wxArrayString Settings::GetPeopleList( const wxString& group ) const { wxArrayString list; slConfig::PathGuard pathGuard ( m_config, _T( "/Groups/" ) + group + _T( "/Members/" ) ); unsigned int friendsCount = m_config->GetNumberOfEntries( false ); for ( unsigned int i = 0; i < friendsCount ; i++ ) { wxString ToAdd; if ( m_config->Read( _T( "/Groups/" ) + group + _T( "/Members/" ) + TowxString( i ), &ToAdd ) ) list.Add( ToAdd ); } return list; } void Settings::SetGroupHLColor( const wxColour& color, const wxString& group ) { m_config->Write( _T( "/Groups/" ) + group + _T( "/Opts/HLColor" ), color.GetAsString( wxC2S_HTML_SYNTAX ) ); } wxColour Settings::GetGroupHLColor( const wxString& group ) const { return wxColour( m_config->Read( _T( "/Groups/" ) + group + _T( "/Opts/HLColor" ) , _T( "#64648C" ) ) ); } wxArrayString Settings::GetGroups( ) { return GetGroupList( _T( "/Groups/" ) ); } void Settings::AddGroup( const wxString& group ) { if ( !m_config->Exists( _T( "/Groups/" ) + group ) ) { m_config->Write( _T( "/Groups/" ) , group ); //set defaults SetGroupActions( group, UserActions::ActNone ); SetGroupHLColor( defaultHLcolor, group ); } } void Settings::DeleteGroup( const wxString& group ) { if ( m_config->Exists( _T( "/Groups/" ) + group ) ) { m_config->DeleteGroup( _T( "/Groups/" ) + group ); } } void Settings::SetGroupActions( const wxString& group, UserActions::ActionType action ) { //m_config->Write( _T("/Groups/") + group + _T("/Opts/Actions"), action ); wxString key = _T( "/Groups/" ) + group + _T( "/Opts/ActionsList" ); m_config->DeleteGroup( key ); key += _T( "/" ); unsigned int tmp = action & ( ( UserActions::ActLast << 1 ) - 1 ); int i = 0; while ( tmp != 0 ) { if ( tmp&1 )m_config->Write( key + m_configActionNames[i], true ); i++; tmp >>= 1; } } UserActions::ActionType Settings::GetGroupActions( const wxString& group ) const { wxString key = _T( "/Groups/" ) + group + _T( "/Opts/Actions" ); if ( m_config->HasEntry( key ) )// Backward compatibility. { wxLogMessage( _T( "loading deprecated group actions and updating config" ) ); UserActions::ActionType action = ( UserActions::ActionType )m_config->Read( key, ( long )UserActions::ActNone ) ; m_config->DeleteEntry( key ); // a bit ugly, but i want to update options Settings *this_nonconst = const_cast( this ); this_nonconst->SetGroupActions( group, action ); return action; } key = _T( "/Groups/" ) + group + _T( "/Opts/ActionsList" ); if ( !m_config->Exists( key ) ) return UserActions::ActNone; key += _T( "/" ); int i = 0; int mask = 1; int result = 0; while ( mask <= UserActions::ActLast ) { if ( m_config->Read( key + m_configActionNames[i], 0l ) ) { result |= mask; } i++; mask <<= 1; } if ( result == 0 ) return UserActions::ActNone; return ( UserActions::ActionType )result; } bool Settings::ShouldAddDefaultGroupSettings() { return !m_config->Exists( _T( "/Groups" ) ); } void Settings::SaveCustomColors( const wxColourData& _cdata, const wxString& paletteName ) { //note 16 colors is wx limit wxColourData cdata = _cdata; for ( int i = 0; i < 16; ++i ) { wxColour col = cdata.GetCustomColour( i ); if ( !col.IsOk() ) col = wxColour ( 255, 255, 255 ); m_config->Write( _T( "/CustomColors/" ) + paletteName + _T( "/" ) + TowxString( i ), col.GetAsString( wxC2S_HTML_SYNTAX ) ) ; } } wxColourData Settings::GetCustomColors( const wxString& paletteName ) { wxColourData cdata; //note 16 colors is wx limit for ( int i = 0; i < 16; ++i ) { wxColour col( m_config->Read( _T( "/CustomColors/" ) + paletteName + _T( "/" ) + TowxString( i ), wxColour ( 255, 255, 255 ).GetAsString( wxC2S_HTML_SYNTAX ) ) ); cdata.SetCustomColour( i, col ); } return cdata; } bool Settings::GetReportStats() { return m_config->Read( _T( "/General/reportstats" ), 1l ); } void Settings::SetReportStats( const bool value ) { m_config->Write( _T( "/General/reportstats" ), value ); } void Settings::SetAutoUpdate( const bool value ) { m_config->Write( _T( "/General/AutoUpdate" ), value ); } bool Settings::GetAutoUpdate() { return m_config->Read( _T( "/General/AutoUpdate" ), true ); } PlaybackListFilterValues Settings::GetReplayFilterValues( const wxString& profile_name ) { PlaybackListFilterValues filtervalues; filtervalues.duration = m_config->Read( _T( "/ReplayFilter/" ) + profile_name + _T( "/duration" ), _T( "" ) ); filtervalues.map = m_config->Read( _T( "/ReplayFilter/" ) + profile_name + _T( "/map" ), _T( "" ) ); filtervalues.map_show = m_config->Read( _T( "/ReplayFilter/" ) + profile_name + _T( "/map_show" ), 0L ); filtervalues.filesize = m_config->Read( _T( "/ReplayFilter/" ) + profile_name + _T( "/filesize" ), _T( "" ) ); filtervalues.filesize_mode = m_config->Read( _T( "/ReplayFilter/" ) + profile_name + _T( "/filesize_mode" ), _T( ">" ) ); filtervalues.duration_mode = m_config->Read( _T( "/ReplayFilter/" ) + profile_name + _T( "/duration_mode" ), _T( ">" ) ); filtervalues.mod = m_config->Read( _T( "/ReplayFilter/" ) + profile_name + _T( "/mod" ), _T( "" ) ); filtervalues.mod_show = m_config->Read( _T( "/ReplayFilter/" ) + profile_name + _T( "/mod_show" ), 0L ); filtervalues.player_mode = m_config->Read( _T( "/ReplayFilter/" ) + profile_name + _T( "/player_mode" ), _T( "=" ) ); filtervalues.player_num = m_config->Read( _T( "/ReplayFilter/" ) + profile_name + _T( "/player_num" ), _T( "All" ) ); return filtervalues; } void Settings::SetReplayFilterValues( const PlaybackListFilterValues& filtervalues, const wxString& profile_name ) { m_config->Write( _T( "/ReplayFilter/" ) + profile_name + _T( "/duration" ), filtervalues.duration ); m_config->Write( _T( "/ReplayFilter/" ) + profile_name + _T( "/map" ), filtervalues.map ); m_config->Write( _T( "/ReplayFilter/" ) + profile_name + _T( "/map_show" ), filtervalues.map_show ); m_config->Write( _T( "/ReplayFilter/" ) + profile_name + _T( "/filesize" ), filtervalues.filesize ); m_config->Write( _T( "/ReplayFilter/" ) + profile_name + _T( "/filesize_mode" ), filtervalues.filesize_mode ); m_config->Write( _T( "/ReplayFilter/" ) + profile_name + _T( "/duration_mode" ), filtervalues.duration_mode ); m_config->Write( _T( "/ReplayFilter/" ) + profile_name + _T( "/mod" ), filtervalues.mod ); m_config->Write( _T( "/ReplayFilter/" ) + profile_name + _T( "/mod_show" ), filtervalues.mod_show ); m_config->Write( _T( "/ReplayFilter/" ) + profile_name + _T( "/player_mode" ), filtervalues.player_mode ); m_config->Write( _T( "/ReplayFilter/" ) + profile_name + _T( "/player_num" ), filtervalues.player_num ); m_config->Write( _T( "/ReplayFilter/lastprofile" ), profile_name ); } bool Settings::GetReplayFilterActivState() const { return m_config->Read( _T( "/ReplayFilter/Active" ) , 0l ); } void Settings::SetReplayFilterActivState( const bool state ) { m_config->Write( _T( "/ReplayFilter/Active" ) , state ); } wxString Settings::GetLastReplayFilterProfileName() { return m_config->Read( _T( "/ReplayFilter/lastprofile" ), _T( "default" ) ); } wxString Settings::GetLastRelayedHost() { return m_config->Read(_T("/General/RelayHost"),_T("")); } void Settings::SetLastRelayedHost(wxString relhost) { m_config->Write(_T("/General/RelayHost"),relhost); } void Settings::SetCompletionMethod( CompletionMethod method ) { m_config->Write( _T( "/General/CompletionMethod" ), ( int )method ); } Settings::CompletionMethod Settings::GetCompletionMethod( ) const { return ( CompletionMethod )m_config->Read( _T( "/General/CompletionMethod" ), ( int )MatchExact ); } unsigned int Settings::GetHorizontalSortkeyIndex() { return m_config->Read( _T( "/GUI/MapSelector/HorizontalSortkeyIndex" ), 0l ); } void Settings::SetHorizontalSortkeyIndex( const unsigned int idx ) { m_config->Write( _T( "/GUI/MapSelector/HorizontalSortkeyIndex" ), ( int ) idx ); } unsigned int Settings::GetVerticalSortkeyIndex() { return m_config->Read( _T( "/GUI/MapSelector/VerticalSortkeyIndex" ), 0l ); } void Settings::SetVerticalSortkeyIndex( const unsigned int idx ) { m_config->Write( _T( "/GUI/MapSelector/VerticalSortkeyIndex" ), ( int ) idx ); } bool Settings::GetHorizontalSortorder() { return m_config->Read( _T( "/GUI/MapSelector/HorizontalSortorder" ), 0l ); } void Settings::SetHorizontalSortorder( const bool order ) { m_config->Write( _T( "/GUI/MapSelector/HorizontalSortorder" ), order ); } bool Settings::GetVerticalSortorder() { return m_config->Read( _T( "/GUI/MapSelector/VerticalSortorder" ), 0l ); } void Settings::SetVerticalSortorder( const bool order ) { m_config->Write( _T( "/GUI/MapSelector/VerticalSortorder" ), order ); } void Settings::SetMapSelectorFollowsMouse( bool value ) { m_config->Write( _T( "/GUI/MapSelector/SelectionFollowsMouse" ), value ); } bool Settings::GetMapSelectorFollowsMouse() { return m_config->Read( _T( "/GUI/MapSelector/SelectionFollowsMouse" ), 0l ); } unsigned int Settings::GetMapSelectorFilterRadio() { return m_config->Read( _T( "/GUI/MapSelector/FilterRadio" ), 0l ); } void Settings::SetMapSelectorFilterRadio( const unsigned int val ) { m_config->Write( _T( "/GUI/MapSelector/FilterRadio" ), ( int ) val ); } ////////////////////////////////////////////////////////////////////////////// /// SpringSettings /// ////////////////////////////////////////////////////////////////////////////// long Settings::getMode() { return m_config->Read( _T( "/SpringSettings/mode" ), SET_MODE_SIMPLE ); } void Settings::setMode( long mode ) { m_config->Write( _T( "/SpringSettings/mode" ), mode ); } bool Settings::getDisableWarning() { return m_config->Read( _T( "/SpringSettings/disableWarning" ), 0l ); } void Settings::setDisableWarning( bool disable ) { m_config->Write( _T( "/SpringSettings/disableWarning" ), disable ); } wxString Settings::getSimpleRes() { wxString def = vl_Resolution_Str[1]; m_config->Read( _T( "/SpringSettings/SimpleRes" ), &def ); return def; } void Settings::setSimpleRes( wxString res ) { m_config->Write( _T( "/SpringSettings/SimpleRes" ), res ); } wxString Settings::getSimpleQuality() { wxString def = wxT( "medium" ); m_config->Read( _T( "/SpringSettings/SimpleQuality" ), &def ); return def; } void Settings::setSimpleQuality( wxString qual ) { m_config->Write( _T( "/SpringSettings/SimpleQuality" ), qual ); } wxString Settings::getSimpleDetail() { wxString def = wxT( "medium" ); m_config->Read( _T( "/SpringSettings/SimpleDetail" ), &def ); return def; } void Settings::setSimpleDetail( wxString det ) { m_config->Write( _T( "/SpringSettings/SimpleDetail" ), det ); } bool Settings::IsSpringBin( const wxString& path ) { if ( !wxFile::Exists( path ) ) return false; if ( !wxFileName::IsFileExecutable( path ) ) return false; return true; } void Settings::SetLanguageID ( const long id ) { m_config->Write( _T( "/General/LanguageID" ) , id ); } long Settings::GetLanguageID ( ) { return m_config->Read( _T( "/General/LanguageID" ) , wxLANGUAGE_DEFAULT ); } SortOrder Settings::GetSortOrder( const wxString& list_name ) { SortOrder order; slConfig::PathGuard pathGuard ( m_config, _T( "/UI/SortOrder/" ) + list_name + _T( "/" ) ); unsigned int entries = m_config->GetNumberOfGroups( false ); //do not recurse for ( unsigned int i = 0; i < entries ; i++ ) { SortOrderItem it; it.direction = m_config->Read( TowxString( i ) + _T( "/dir" ), 1 ); it.col = m_config->Read( TowxString( i ) + _T( "/col" ), i ); order[i] = it; } return order; } void Settings::SetSortOrder( const wxString& list_name, const SortOrder& order ) { SortOrder::const_iterator it = order.begin(); for ( ; it != order.end(); ++it ) { m_config->Write( _T( "/UI/SortOrder/" ) + list_name + _T( "/" ) + TowxString( it->first ) + _T( "/dir" ), it->second.direction ); m_config->Write( _T( "/UI/SortOrder/" ) + list_name + _T( "/" ) + TowxString( it->first ) + _T( "/col" ), it->second.col ); } } bool Settings::GetUseTabIcons() { return m_config->Read( _T( "/GUI/UseTabIcons" ), 1l ); } void Settings::SetUseTabIcons( bool use ) { m_config->Write( _T( "/GUI/UseTabIcons" ), use ); } int Settings::GetSashPosition( const wxString& window_name ) { return m_config->Read( _T( "/GUI/SashPostion/" ) + window_name , 200l ); } void Settings::SetSashPosition( const wxString& window_name, const int pos ) { m_config->Write( _T( "/GUI/SashPostion/" ) + window_name , pos ); } bool Settings::GetSplitBRoomHorizontally() { return m_config->Read( _T( "/GUI/SplitBRoomHorizontally" ) , 1l ); } void Settings::SetSplitBRoomHorizontally( const bool vertical ) { m_config->Write( _T( "/GUI/SplitBRoomHorizontally" ) , vertical ); } void Settings::SetStartTab( const int idx ) { m_config->Write( _T( "/GUI/StartTab" ) , idx ); } unsigned int Settings::GetStartTab( ) { return m_config->Read( _T( "/GUI/StartTab" ) , MainWindow::PAGE_SINGLE ); //default is SP tab } //! simply move saved col size +1 to account for dummy col, force dummy col width to 0 void Settings::TranslateSavedColumWidths() { #ifdef SL_DUMMY_COL wxString old_path = m_config->GetPath(); bool old_record = m_config->IsRecordingDefaults( ); m_config->SetRecordDefaults( false ); std::vector ctrls; ctrls.push_back( _T( "NickListCtrl" ) ); ctrls.push_back( _T( "BattleroomListCtrl" ) ); ctrls.push_back( _T( "BattleListCtrl" ) ); ctrls.push_back( _T( "WidgetDownloadListCtrl" ) ); ctrls.push_back( _T( "ChannelListCtrl" ) ); ctrls.push_back( _T( "PlaybackListCtrl" ) ); for ( std::vector::const_iterator it = ctrls.begin(); it != ctrls.end(); ++it ) { m_config->SetPath( _T( "/GUI/ColumnWidths/" ) + *it ); unsigned int entries = m_config->GetNumberOfEntries( false ); //do not recurse for ( unsigned int i = entries; i > 0 ; --i ) { m_config->Write( TowxString( i ), m_config->Read( TowxString( i - 1 ) , -1 ) ); } m_config->Write( TowxString( 0 ), 0 ); } m_config->SetPath( old_path ); m_config->SetRecordDefaults( old_record ); customMessageBoxNoModal( SL_MAIN_ICON, _( "The way column widths are saved has changed, you may need to re-adjust your col widths manually once." ), _( "Important" ) ); #endif } wxString Settings::GetEditorPath( ) { #if defined(__WXMSW__) wxString def = wxGetOSDirectory() + sepstring + _T("system32") + sepstring + _T("notepad.exe"); if ( !wxFile::Exists( def ) ) def = wxEmptyString; #else wxString def = wxEmptyString; #endif return m_config->Read( _T( "/GUI/Editor" ) , def ); } void Settings::SetEditorPath( const wxString& path ) { m_config->Write( _T( "/GUI/Editor" ) , path ); } bool Settings::GetShowXallTabs() { return m_config->Read( _T( "/GUI/CloseOnAll" ) , 0l ); } void Settings::SetShowXallTabs( bool show ) { m_config->Write( _T( "/GUI/CloseOnAll" ) , show ); } void Settings::SavePerspective( const wxString& notebook_name, const wxString& perspective_name, const wxString& layout_string ) { wxString entry = wxFormat( _T( "/GUI/AUI/%s/%s" ) ) % perspective_name % notebook_name; m_config->Write( entry, layout_string ); } wxString Settings::LoadPerspective( const wxString& notebook_name, const wxString& perspective_name ) { wxString entry = wxFormat( _T( "/GUI/AUI/%s/%s" ) ) % perspective_name % notebook_name; return m_config->Read( entry , _T("") ); } wxString Settings::GetLastPerspectiveName( ) { return m_config->Read( _T( "/GUI/AUI/lastperspective_name" ), _T("default") ); } void Settings::SetLastPerspectiveName( const wxString& name ) { m_config->Write( _T( "/GUI/AUI/lastperspective_name" ), name ); } void Settings::SetAutosavePerspective( bool autosave ) { m_config->Write( _T( "/GUI/AUI/autosave" ), autosave ); } bool Settings::GetAutosavePerspective( ) { return m_config->Read( _T( "/GUI/AUI/autosave" ), 1l ); } wxArrayString Settings::GetPerspectives() { wxArrayString list = GetGroupList( _T( "/GUI/AUI" ) ); wxArrayString ret; for ( size_t i = 0; i < list.GetCount(); ++i) { if ( !list[i].EndsWith( BattlePostfix ) ) ret.Add( list[i] ); else { wxString stripped = list[i].Left( list[i].Len() - BattlePostfix.Len() ); if ( !PerspectiveExists( stripped ) ) ret.Add( stripped ); } } return ret; } bool Settings::PerspectiveExists( const wxString& perspective_name ) { wxArrayString list = GetGroupList( _T( "/GUI/AUI" ) ); for ( size_t i = 0; i < list.GetCount(); ++i) { if ( list[i] == perspective_name ) return true; } return false; } void Settings::SetAutoloadedChatlogLinesCount( const int count ) { m_config->Write( _T( "/GUI/AutoloadedChatlogLinesCount" ), std::abs( count ) ); } int Settings::GetAutoloadedChatlogLinesCount( ) { return m_config->Read( _T( "/GUI/AutoloadedChatlogLinesCount" ), 10l ); } void Settings::SetUseNotificationPopups( const bool use ) { m_config->Write( _T("/GUI/UseNotificationPopups"), use ); } bool Settings::GetUseNotificationPopups() { return m_config->Read( _T("/GUI/UseNotificationPopups"), true ); } void Settings::SetNotificationPopupPosition( const size_t index ) { m_config->Write( _T("/GUI/NotificationPopupPosition"), (long)index ); } size_t Settings::GetNotificationPopupPosition() { return m_config->Read( _T("/GUI/NotificationPopupPosition"), (long)ScreenPosition::bottom_right ); } bool Settings::GetWindowMaximized( const wxString& window ) { return m_config->Read(_T( "/GUI/" ) + window + _T( "/maximized" ), 0l ); } void Settings::GetWindowMaximized( const wxString& window, bool maximized ) { m_config->Write(_T( "/GUI/" ) + window + _T( "/maximized" ), maximized ); } void Settings::SetNotificationPopupDisplayTime( const unsigned int seconds ) { m_config->Write( _T("/GUI/NotificationPopupDisplayTime"), (long)seconds ); } unsigned int Settings::GetNotificationPopupDisplayTime( ) { return m_config->Read( _T("/GUI/NotificationPopupDisplayTime"), 5l ); } bool Settings::DoResetPerspectives() { return m_config->Read(_T( "/reset_perspectives" ) , 0l ); } void Settings::SetDoResetPerspectives( bool do_it ) { m_config->Write(_T( "/reset_perspectives" ) , (long)do_it ); } bool Settings::GetBroadcastEverywhere() { return m_config->Read( _T("/Chat/BroadcastEverywhere") ,true); } void Settings::SetBroadcastEverywhere(bool value) { m_config->Write( _T("/Chat/BroadcastEverywhere"), value); } //Hotkeys stuff (for springsettings) void Settings::SetHotkeyMeta( const wxString& profileName, const wxString& keyStr ) { m_config->Write(_T( "/HotkeyProfiles/") + profileName + _T("/Meta"), keyStr); } wxString Settings::GetHotkeyMeta( const wxString& profileName ) { return m_config->Read(_T( "/HotkeyProfiles/") + profileName + _T("/Meta"), _T("") ); } void Settings::SetHotkeyKeySymSet( const wxString& profileName, const wxString& setName, const wxString& keyStr ) { m_config->Write(_T( "/HotkeyProfiles/") + profileName + _T("/KeySets/") + setName, keyStr); } wxString Settings::GetHotkeyKeySymSet( const wxString& profileName, const wxString& setName ) { return m_config->Read( _T( "/HotkeyProfiles/") + profileName + _T("/KeySets/") + setName, _T("") ); } wxArrayString Settings::GetHotkeyKeySymSetNames( const wxString& profileName ) { return GetEntryList( _T( "/HotkeyProfiles/" ) + profileName + _T("/KeySets/") ); } void Settings::SetHotkeyKeySym( const wxString& profileName, const wxString& symName, const wxString& keyStr ) { m_config->Write(_T( "/HotkeyProfiles/") + profileName + _T("/KeySyms/") + symName, keyStr); } wxString Settings::GetHotkeyKeySym( const wxString& profileName, const wxString& symName ) { return m_config->Read( _T( "/HotkeyProfiles/") + profileName + _T("/KeySyms/") + symName, _T("") ); } wxArrayString Settings::GetHotkeyKeySymNames( const wxString& profileName ) { return GetEntryList( _T( "/HotkeyProfiles/" ) + profileName + _T("/KeySyms/") ); } // oderidx == -1 means unbind void Settings::SetHotkey( const wxString& profileName, const wxString& command, const wxString& key, int orderIdx ) { m_config->Write(_T( "/HotkeyProfiles/") + profileName + _T("/Bindings/") + (wxFormat(wxT("%i") ) % orderIdx) + _T("/") + key, command ); } wxString Settings::GetHotkey( const wxString& profileName, const wxString& orderIdx, const wxString& key ) { return m_config->Read( _T( "/HotkeyProfiles/") + profileName + _T("/Bindings/") + orderIdx + _T("/") + key, _T("") ); } wxArrayString Settings::GetHotkeyProfiles() { return GetGroupList( _T( "/HotkeyProfiles/" ) ); } wxArrayString Settings::GetHotkeyProfileOrderIndices( const wxString& profileName ) { return GetGroupList( _T( "/HotkeyProfiles/" ) + profileName + _T("/Bindings/") ); } wxArrayString Settings::GetHotkeyProfileCommandKeys( const wxString& profileName, const wxString& orderIdx ) { return GetEntryList( _T( "/HotkeyProfiles/" ) + profileName + _T("/Bindings/") + orderIdx + _T("/") ); } void Settings::DeleteHotkeyProfiles() { m_config->DeleteGroup( _T( "/HotkeyProfiles/" ) ); } wxString Settings::GetUikeys( const wxString& index ) { return m_config->Read( _T( "/Spring/Paths/" ) + index + _T( "/Uikeys" ), AutoFindUikeys() ); } //END OF Hotkeys stuff (for springsettings) bool Settings::IgnoreOfferfile() { return m_config->Read( _T("/IgnoreOfferfile"), 0l); } bool Settings::IsSelfUpdateDisabled() { return m_config->Read( _T( "/General/SelfUpdateDisabled" ), 0l ); } std::set Settings::KnownMatchmakerCPU() { const wxArrayString cpus = getFromList(_T("/Hosting/KnownMatchmakerCPU")); std::set ret; for ( unsigned int i = 0; i < cpus.GetCount(); i++ ) ret.insert( FromwxString(cpus[i]) ); return ret; } void Settings::AddKnownMatchmakerCPU(int cpu) { std::set current = KnownMatchmakerCPU(); current.insert(cpu); wxArrayString new_cpus; for (std::set::const_iterator it = current.begin(); it != current.end(); ++it) { new_cpus.Add( TowxString(*it) ); } setFromList( new_cpus, _T("/Hosting/KnownMatchmakerCPU") ); } springlobby-0.169/src/settings.h0000600000176000000410000006616112105760300020231 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SETTINGS_H #define SPRINGLOBBY_HEADERGUARD_SETTINGS_H #include #include #include #include "utils/mixins.hh" #include "utils/pathlistfactory.h" #include "useractions.h" #include "Helper/sortutil.h" #include "Helper/slconfig.h" const int CACHE_VERSION = 11; const int SETTINGS_VERSION = 23; const wxString DEFSETT_DEFAULT_SERVER_NAME= _T("Official server"); const wxString DEFSETT_DEFAULT_SERVER_HOST = _T("lobby.springrts.com"); const wxString widgetDownloader_baseUrl = _T("widgetdb.springrts.de"); const wxString BattlePostfix = _T("_battle"); const int DEFSETT_DEFAULT_SERVER_PORT = 8200; const bool DEFSETT_SAVE_PASSWORD = false; const unsigned int DEFSETT_MW_WIDTH = 880; const unsigned int DEFSETT_MW_HEIGHT = 600; const unsigned int DEFSETT_MW_TOP = 50; const unsigned int DEFSETT_MW_LEFT = 50; const unsigned int DEFSETT_SPRING_PORT = 8452; const long SET_MODE_EXPERT = 5000; const long SET_MODE_SIMPLE = 5001; const unsigned int DEFSETT_SW_WIDTH = 770; const unsigned int DEFSETT_SW_HEIGHT = 580; const unsigned int DEFSETT_SW_TOP = 50; const unsigned int DEFSETT_SW_LEFT = 50; const unsigned int SPRING_MAX_USERS = 64; const unsigned int SPRING_MAX_TEAMS = 16; const unsigned int SPRING_MAX_ALLIES = 16; /** Default value for config path /General/WebBrowserUseDefault. */ const bool DEFSETT_WEB_BROWSER_USE_DEFAULT = true; class wxWindow; class wxConfigBase; class wxFileConfig; class wxFont; struct BattleListFilterValues; struct PlaybackListFilterValues; class wxFileInputStream; class wxFileName; class wxColour; class wxColour; class wxColourData; class wxSize; class wxPoint; class wxPathList; typedef std::map ColumnMap; struct ChannelJoinInfo { wxString name; wxString password; }; //!convenience class for saving and displaying a choice of discrete screen pos class ScreenPosition : public wxArrayString { public: ScreenPosition(){ Add(_("Bottom right"));Add(_("Bottom left"));Add(_("Top right"));Add(_("Top left"));} static const size_t bottom_right = 0; static const size_t bottom_left = 1; static const size_t top_right = 2; static const size_t top_left = 3; }; //! @brief Class used to store and restore application settings. class Settings : public SL::NonCopyable { public: /** Default constructor. */ Settings(); ~Settings(); //! used for passing config file at command line static bool m_user_defined_config; static wxString m_user_defined_config_path; /// list all entries subkeys of a parent group wxArrayString GetGroupList( const wxString& base_key ); /// list all groups subkeys of a parent group wxArrayString GetEntryList( const wxString& base_key ); /// counts all groups subkeys of a parent group unsigned int GetGroupCount( const wxString& base_key ); bool IsPortableMode() const; void SetPortableMode( bool mode ); /** Initialize all settings to default. */ void SetDefaultServerSettings(); void SaveSettings(); bool IsFirstRun(); //! Sets/Gets settings revision number void SetSettingsVersion(); int GetSettingsVersion(); //! should we sayex/pm bot? void SetReportStats(const bool value); bool GetReportStats(); void SetAutoUpdate( const bool value ); bool GetAutoUpdate(); bool IsSelfUpdateDisabled(); wxString GetLobbyWriteDir(); wxString GetTempStorage(); /* ================================================================ */ /** @name Network * @{ */ bool GetNoUDP(); void SetNoUDP(bool value); int GetClientPort();/// use zero to pick port automatically, nonzero to override. This allows to play if you have broken router, by setting SourcePort to some forwarded port. void SetClientPort(int value); bool GetShowIPAddresses(); void SetShowIPAddresses(bool value); /**@}*/ /* ================================================================ */ /** @name Web Browser * * Web browser preferences. * *@{ */ /** Fetch the "Use Default" setting for the web browser. * * @returns the current setting. */ bool GetWebBrowserUseDefault(); /** Set the "Use Default" setting for the web browser. If @c true, we use * wxLaunchDefaultBrowser when we want to open a web browser. * * @param useDefault Whether or not to use the system-default browser. * * @sa Ui::OpenWebBrowser */ void SetWebBrowserUseDefault(bool useDefault); /** Get the path to the user-configured browser. * * @returns The user-defined browser path, if set, otherwise an empty string * (wxEmptyString). */ wxString GetWebBrowserPath(); /** Set the path to the user-configured browser. * * @param path A path to a web browser */ void SetWebBrowserPath( const wxString& path ); /**@}*/ /* ================================================================ */ /** @name Cache * * Information about the directory tree used to cache infomation about maps * and mods. * * @{ */ wxString GetCachePath(); void SetCacheVersion(); int GetCacheVersion(); void SetMapCachingThreadProgress( unsigned int index ); unsigned int GetMapCachingThreadProgress(); void SetModCachingThreadProgress( unsigned int index ); unsigned int GetModCachingThreadProgress(); /**@}*/ /* ================================================================ */ /** @name Servers * @{ */ void ConvertOldServerSettings(); wxString GetDefaultServer(); void SetDefaultServer( const wxString& server_name ); void SetAutoConnect( bool do_autoconnect ); bool GetAutoConnect( ); wxString GetServerHost( const wxString& server_name ); int GetServerPort( const wxString& server_name ); wxArrayString GetServers(); bool ServerExists( const wxString& server_name ); void SetServer( const wxString& server_name, const wxString& url, int port ); void DeleteServer( const wxString& server_name ); bool ShouldAddDefaultServerSettings(); /**@}*/ /* ================================================================ */ /** @name Accounts * @{ */ wxString GetServerAccountNick( const wxString& server_name ); void SetServerAccountNick( const wxString& server_name, const wxString& value ); wxString GetServerAccountPass( const wxString& server_name ); void SetServerAccountPass( const wxString& server_name, const wxString& value ); bool GetServerAccountSavePass( const wxString& server_name ); void SetServerAccountSavePass( const wxString& server_name, const bool value ); /**@}*/ /* ================================================================ */ /** @name Automatic channel join list * * These functions are used to manipulate the list of channels that * SpringLobby should join upon connecting to a server. * * @{ */ /** Fetch the number of channels in the autojoin list. */ int GetNumChannelsJoin(); /** Add a channel to the autojoin list. */ void AddChannelJoin( const wxString& channel , const wxString& key ); /** Remove a channel from the autojoin list. * * @param channel The name of the channel to remove */ void RemoveChannelJoin( const wxString& channel ); /** Returns the list of channels to autojoin * * @returns std::vector of ChannelJoinInfo struct, don't break ordering index! */ std::vector GetChannelsJoin(); /** Deletes all autojoined channels * */ void RemoveAllChannelsJoin(); /** Returns the join order of a channel * * @returns the order of the channel during autojoin or -1 if not found */ int GetChannelJoinIndex( const wxString& name ); void ConvertOldChannelSettings(); bool ShouldAddDefaultChannelSettings(); /**@}*/ /* ================================================================ */ /** @name UI * @{ */ void SetStartTab( const int idx ); unsigned int GetStartTab( ); void SaveCustomColors( const wxColourData& cdata, const wxString& paletteName = _T("Default") ); wxColourData GetCustomColors( const wxString& paletteName = _T("Default") ); int GetWindowWidth( const wxString& window ); void SetWindowWidth( const wxString& window, const int value ); int GetWindowHeight( const wxString& window ); void SetWindowHeight( const wxString& window, const int value ); int GetWindowTop( const wxString& window ); void SetWindowTop( const wxString& window, const int value ); int GetWindowLeft( const wxString& window ); void SetWindowLeft( const wxString& window, const int value ); wxSize GetWindowSize( const wxString& window, const wxSize& def ); void SetWindowSize( const wxString& window, const wxSize& size ); wxPoint GetWindowPos( const wxString& window, const wxPoint& def ); void SetWindowPos( const wxString& window, const wxPoint& pos ); bool GetWindowMaximized( const wxString& window ); void GetWindowMaximized( const wxString& window, bool maximized ); bool UseOldSpringLaunchMethod(); void SetOldSpringLaunchMethod( bool value ); void SetShowTooltips( bool show); bool GetShowTooltips(); ColumnMap GetColumnMap( const wxString& name ); void GetColumnMap( const wxString& name, const ColumnMap& map ); SortOrder GetSortOrder( const wxString& list_name ); void SetSortOrder( const wxString& list_name, const SortOrder& order ); void SetColumnWidth( const wxString& list_name, const int column_ind, const int column_width ); int GetColumnWidth( const wxString& list_name, const int column ); void NukeColumnWidths(); //! used to signal unset column width in Get... static const int columnWidthUnset = -3; static const int columnWidthMinimum = 5; void SetLanguageID ( const long id ); long GetLanguageID ( ); int GetSashPosition( const wxString& window_name ); void SetSashPosition( const wxString& window_name, const int pos ); bool GetSplitBRoomHorizontally(); void SetSplitBRoomHorizontally( const bool vertical ); bool GetShowXallTabs(); void SetShowXallTabs( bool show ); void TranslateSavedColumWidths(); wxString GetEditorPath(); void SetEditorPath( const wxString& path ); void SetAutoloadedChatlogLinesCount( const int count ); int GetAutoloadedChatlogLinesCount(); void SetUseNotificationPopups( const bool use ); bool GetUseNotificationPopups(); void SetNotificationPopupPosition( const size_t index ); size_t GetNotificationPopupPosition(); void SetNotificationPopupDisplayTime( const unsigned int seconds ); unsigned int GetNotificationPopupDisplayTime( ); /*@}*/ /* ================================================================ */ /** @name People/Group management * @{ */ void SetPeopleList( const wxArrayString& friends, const wxString& group = _T("default") ); wxArrayString GetPeopleList( const wxString& group = _T("default") ) const; wxArrayString GetGroups( ); void AddGroup( const wxString& group ) ; void DeleteGroup( const wxString& group ) ; void SetGroupHLColor( const wxColour& color, const wxString& group = _T("default") ); wxColour GetGroupHLColor( const wxString& group = _T("default") ) const; void SetGroupActions( const wxString& group, UserActions::ActionType action ); UserActions::ActionType GetGroupActions( const wxString& group ) const; bool ShouldAddDefaultGroupSettings(); /*@}*/ /* ================================================================ */ /** @name Spring locations * @{ */ void ConvertOldSpringDirsOptions(); void RefreshSpringVersionList(); std::map GetSpringVersionList() const; /// index -> version wxString GetCurrentUsedSpringIndex(); void SetUsedSpringIndex( const wxString& index ); void DeleteSpringVersionbyIndex( const wxString& index ); /// when this mode is enabled in windows SL will search for spring files only in the current executable folder void SetSearchSpringOnlyInSLPath( bool value ); bool GetSearchSpringOnlyInSLPath(); //!@brief if false, lobby tries to load spring & unitsync as sep paths, otherwise, searches for a bundle containing both bool GetBundleMode(); bool IsInsideSpringBundle(); // enable-disable loading the spring exec from same bundle bool GetUseSpringPathFromBundle(); void SetUseSpringPathFromBundle( bool value ); /// convenience wrappers to get current used version paths wxString GetCurrentUsedUikeys(); wxString GetCurrentUsedDataDir(); wxString GetCurrentUsedUnitSync(); wxString GetCurrentUsedBundle(); wxString GetCurrentUsedSpringBinary(); //!@brief returns config file path unitsync uses, returns empty if unitsync isn't loaded wxString GetCurrentUsedSpringConfigFilePath(); wxString GetUnitSync( const wxString& index ); wxString GetSpringBinary( const wxString& index ); //!@brief meaningful only on mac wxString GetBundle(const wxString& index ); void SetUnitSync( const wxString& index, const wxString& path ); void SetSpringBinary( const wxString& index, const wxString& path ); //!@brief meaningful only on mac void SetBundle( const wxString& index, const wxString& path ); wxString AutoFindSpringBin(); wxString AutoFindUnitSync( wxPathList pl = PathlistFactory::ConfigFileSearchPaths() ) const; wxString AutoFindBundle(); wxString AutoFindUikeys(); //!@brief returns config file path spring should use, returns empty for default wxString GetForcedSpringConfigFilePath(); //! use in game customized mode or externally forced via cli arg void SetForcedSpringConfigFilePath( const wxString& path ); /*@}*/ /* ================================================================ */ /** @name Chat * @{ */ bool GetChatLogEnable(); void SetChatLogEnable( const bool value ); wxString GetChatLogLoc(); void SetChatLogLoc( const wxString& loc ); //!@brief sets how many lines can stay in a chat panel before the old will start getting erased, 0 to disable void SetChatHistoryLenght( int historylines ); int GetChatHistoryLenght(); void SetChatPMSoundNotificationEnabled( bool enabled ); bool GetChatPMSoundNotificationEnabled(); void ConvertOldColorSettings(); wxColour GetChatColorNormal(); void SetChatColorNormal( wxColour value ); wxColour GetChatColorBackground(); void SetChatColorBackground( wxColour value ); wxColour GetChatColorHighlight(); void SetChatColorHighlight( wxColour value ); wxColour GetChatColorMine(); void SetChatColorMine( wxColour value ); wxColour GetChatColorNotification(); void SetChatColorNotification( wxColour value ); wxColour GetChatColorAction(); void SetChatColorAction( wxColour value ); wxColour GetChatColorServer(); void SetChatColorServer( wxColour value ); wxColour GetChatColorClient(); void SetChatColorClient( wxColour value ); wxColour GetChatColorJoinPart(); void SetChatColorJoinPart( wxColour value ); wxColour GetChatColorError(); void SetChatColorError( wxColour value ); wxColour GetChatColorTime(); void SetChatColorTime( wxColour value ); wxFont GetChatFont(); void SetChatFont( wxFont value ); void SetDisplayJoinLeave( bool display, const wxString& channel ); bool GetDisplayJoinLeave( const wxString& channel ); void SetHighlightedWords( const wxArrayString& words ); wxArrayString GetHighlightedWords( ); //!\brief controls if user attention is requested when highlighting a line void SetRequestAttOnHighlight( const bool req ); bool GetRequestAttOnHighlight( ); /**@}*/ /* Do these go in Chat? */ bool GetSmartScrollEnabled(); void SetSmartScrollEnabled(bool value); bool GetAlwaysAutoScrollOnFocusLost(); void SetAlwaysAutoScrollOnFocusLost(bool value); void ConvertOldHiglightSettings(); void SetUseIrcColors( bool value ); bool GetUseIrcColors(); /* ================================================================ */ /** @name Hosting * * %Settings to use when hosting games. Includes "sticky" settings from the * last time a game was hosted. * * @{ */ wxString GetLastHostDescription(); wxString GetLastHostMod(); wxString GetLastHostPassword(); int GetLastHostPort(); int GetLastHostPlayerNum(); int GetLastHostNATSetting(); wxString GetLastHostMap(); int GetLastRankLimit(); bool GetTestHostPort(); bool GetLastAutolockStatus(); bool GetLastHostRelayedMode(); void SetLastHostDescription( const wxString& value ); void SetLastHostMod( const wxString& value ); void SetLastHostPassword( const wxString& value ); void SetLastHostPort( int value ); void SetLastHostPlayerNum( int value ); void SetLastHostNATSetting( int value ); void SetLastHostMap( const wxString& value ); void SetLastRankLimit( int rank ); void SetTestHostPort( bool value ); void SetLastAutolockStatus( bool value ); void SetLastHostRelayedMode( bool value ); void SetHostingPreset( const wxString& name, int optiontype, std::map options ); std::map GetHostingPreset( const wxString& name, int optiontype ); wxArrayString GetPresetList(); void DeletePreset( const wxString& name ); wxString GetModDefaultPresetName( const wxString& modname ); void SetModDefaultPresetName( const wxString& modname, const wxString& presetname ); /**@}*/ /* ================================================================ */ wxColour GetBattleLastColour(); void SetBattleLastColour( const wxColour& col ); void SetLastAI( const wxString& ai ); wxString GetLastAI(); void SetBalanceMethod(int value); int GetBalanceMethod(); void SetBalanceClans(bool value); bool GetBalanceClans(); void SetBalanceStrongClans(bool value); bool GetBalanceStrongClans(); void SetBalanceGrouping( int value ); int GetBalanceGrouping(); void SetFixIDMethod(int value); int GetFixIDMethod(); void SetFixIDClans(bool value); bool GetFixIDClans(); void SetFixIDStrongClans(bool value); bool GetFixIDStrongClans(); void SetFixIDGrouping( int value ); int GetFixIDGrouping(); /** @name Battle filters * @{ */ BattleListFilterValues GetBattleFilterValues(const wxString& profile_name = (_T("default"))); void SetBattleFilterValues(const BattleListFilterValues& blfValues, const wxString& profile_name = _T("default")); wxString GetLastBattleFilterProfileName(); void SetBattleFilterActivState( const bool state ); bool GetBattleFilterActivState( ) const; bool GetBattleLastAutoStartState(); void SetBattleLastAutoStartState( bool value ); bool GetBattleLastAutoControlState(); void SetBattleLastAutoControlState( bool value ); int GetBattleLastAutoSpectTime(); void SetBattleLastAutoSpectTime( int value ); bool GetBattleLastAutoAnnounceDescription(); void SetBattleLastAutoAnnounceDescription( bool value ); void SetBattleLastSideSel( const wxString& modname, int sidenum ); int GetBattleLastSideSel( const wxString& modname ); struct SettStartBox { int ally; int topx; int topy; int bottomx; int bottomy; }; void SetMapLastStartPosType( const wxString& mapname, const wxString& startpostype ); void SetMapLastRectPreset( const wxString& mapname, std::vector rects ); wxString GetMapLastStartPosType( const wxString& mapname ); std::vector GetMapLastRectPreset( const wxString& mapname ); /**@}*/ /** @name Replay filters * @{ */ PlaybackListFilterValues GetReplayFilterValues(const wxString& profile_name = (_T("default"))); void SetReplayFilterValues(const PlaybackListFilterValues& blfValues, const wxString& profile_name = _T("default")); wxString GetLastReplayFilterProfileName(); void SetReplayFilterActivState( const bool state ); bool GetReplayFilterActivState( ) const; /**@}*/ bool GetDisableSpringVersionCheck(); bool IgnoreOfferfile(); /* ================================================================ */ /** @name Torrent System * @{ */ unsigned int GetTorrentPort(); void SetTorrentPort( unsigned int port ); int GetTorrentUploadRate(); void SetTorrentUploadRate( int speed ); int GetTorrentDownloadRate(); void SetTorrentDownloadRate( int speed ); int GetTorrentSystemSuspendMode(); void SetTorrentSystemSuspendMode( int mode ); int GetTorrentThrottledUploadRate(); void SetTorrentThrottledUploadRate( int speed ); int GetTorrentThrottledDownloadRate(); void SetTorrentThrottledDownloadRate( int speed ); void SetTorrentMaxConnections( int connections ); int GetTorrentMaxConnections(); void SetTorrentListToResume( const std::vector& list ); std::vector GetTorrentListToResume(); void ClearTorrentListToResume(); /** Get the path to the directory where *.torrent files are stored. * @deprecated isn't used any more! */ wxFileName GetTorrentDir(); /** Get the path to the directory where partially-downloaded * torrented files are stored. * @deprecated isn't used any more! * @sa GetTorrentsFolder */ wxFileName GetTorrentDataDir(); /**@}*/ /** @name Aui * * Functions used to store and retrieve the current SpringLobby * interface layout. * * @{ */ void SaveLayout( wxString& layout_name, wxString& layout_string ); wxString GetLayout( wxString& layout_name ); void SavePerspective( const wxString& notebook_name, const wxString& perspective_name, const wxString& layout_string ); wxString LoadPerspective( const wxString& notebook_name, const wxString& perspective_name ); wxString GetLastPerspectiveName( ); void SetLastPerspectiveName( const wxString& name ); void SetAutosavePerspective( bool autosave ); bool GetAutosavePerspective( ); wxArrayString GetPerspectives(); bool PerspectiveExists( const wxString& perspective_name ); bool DoResetPerspectives(); void SetDoResetPerspectives( bool do_it ); void RemoveLayouts(); //! icons for mainwindow tabs?? bool GetUseTabIcons(); void SetUseTabIcons( bool use ); /**@}*/ enum CompletionMethod { MatchNearest = 1, MatchExact = 2 }; void SetCompletionMethod( CompletionMethod method ); CompletionMethod GetCompletionMethod( ) const; /** @name SpringSettings * @{ */ long getMode(); void setMode( long ); bool getDisableWarning(); void setDisableWarning( bool ); wxString getSimpleRes(); void setSimpleRes( wxString ); wxString getSimpleQuality(); void setSimpleQuality( wxString ); wxString getSimpleDetail(); void setSimpleDetail( wxString ); /**@}*/ /* ================================================================ */ /** @name Map selection dialog * @{ */ unsigned int GetVerticalSortkeyIndex( ); void SetVerticalSortkeyIndex( const unsigned int idx ); unsigned int GetHorizontalSortkeyIndex( ); void SetHorizontalSortkeyIndex( const unsigned int idx ); /** \return true for "<" false for ">" */ bool GetHorizontalSortorder(); void SetHorizontalSortorder( const bool order ); /** \return true for "ᴧ", false for "ᴠ" */ bool GetVerticalSortorder(); void SetVerticalSortorder( const bool order ); void SetMapSelectorFollowsMouse( bool value ); bool GetMapSelectorFollowsMouse(); /** \return m_filter_all_sett = 0; (default) m_filter_recent_sett = 1; m_filter_popular_sett = 2; */ unsigned int GetMapSelectorFilterRadio(); void SetMapSelectorFilterRadio( const unsigned int val ); /**@}*/ /* ============================================================== */ /** @name Relay Hosts * @{ */ wxString GetLastRelayedHost(void); void SetLastRelayedHost(wxString relhost); /**@}*/ /* ============================================================== */ /** @name Hotkeys * @{ */ void SetHotkeyMeta( const wxString& profileName, const wxString& keyStr ); wxString GetHotkeyMeta( const wxString& profileName ); void SetHotkeyKeySymSet( const wxString& profileName, const wxString& symName, const wxString& keyStr ); wxString GetHotkeyKeySymSet( const wxString& profileName, const wxString& symName ); wxArrayString GetHotkeyKeySymSetNames( const wxString& profileName ); void SetHotkeyKeySym( const wxString& profileName, const wxString& symName, const wxString& keyStr ); wxString GetHotkeyKeySym( const wxString& profileName, const wxString& symName ); wxArrayString GetHotkeyKeySymNames( const wxString& profileName ); void SetHotkey( const wxString& profileName, const wxString& command, const wxString& key, int orderIdx ); wxString GetHotkey( const wxString& profileName, const wxString& orderIdx, const wxString& key ); wxArrayString GetHotkeyProfiles(); wxArrayString GetHotkeyProfileOrderIndices( const wxString& profileName ); wxArrayString GetHotkeyProfileCommandKeys( const wxString& profileName, const wxString& orderIdx ); void DeleteHotkeyProfiles(); wxString GetUikeys( const wxString& index ); /**@}*/ //! you are absolutely forbidden to use this template < class T > T Get( wxString setting, const T def ) { return m_config->Read( setting, def ); } template < class T > bool Set( wxString setting, const T val ) { return m_config->Write( setting, val ); } //setting to spam the server messages in all channels bool GetBroadcastEverywhere(); void SetBroadcastEverywhere(bool value); wxString GlobalConfigPath() const { return m_config ? m_config->GlobalConfigPath() : wxString(); } wxString FinalConfigPath() const { return m_final_config_path; } //! move weirdly saved lists to sane form void ConvertLists(); std::set KnownMatchmakerCPU(); void AddKnownMatchmakerCPU(int cpu); protected: bool IsSpringBin( const wxString& path ); slConfig* m_config; //!< wxConfig object to store and restore all settings in. wxString m_chosen_path; wxString m_forced_springconfig_path; bool m_portable_mode; std::map m_spring_versions; wxString m_final_config_path; void setFromList(const wxArrayString& list, const wxString& path); wxArrayString getFromList(const wxString& path); }; Settings& sett(); #endif // SPRINGLOBBY_HEADERGUARD_SETTINGS_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/singleplayerbattle.cpp0000600000176000000410000000532212105760300022606 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include #include #include "singleplayerbattle.h" #include "hosting/mainsingleplayertab.h" #include "server.h" #include "ui.h" #include "settings.h" #include "spring.h" #include "springunitsynclib.h" #include "utils/conversion.h" SinglePlayerBattle::SinglePlayerBattle( MainSinglePlayerTab& msptab ): m_sptab(msptab), m_me( User( usync().IsLoaded() ? usync().GetDefaultNick() : _T("invalid") ) ) { OnUserAdded( m_me ); m_me.BattleStatus().side = sett().GetBattleLastSideSel( GetHostModName() ); m_me.BattleStatus().colour = sett().GetBattleLastColour(); CustomBattleOptions().setSingleOption( _T("startpostype"), wxFormat(_T("%d") ) % ST_Pick, OptionsWrapper::EngineOption ); } SinglePlayerBattle::~SinglePlayerBattle() { } void SinglePlayerBattle::SendHostInfo( HostInfo update ) { if ( (update & HI_StartType) != 0 ) m_sptab.UpdateMinimap(); if ( (update & HI_Restrictions) != 0 ) m_sptab.ReloadRestrictions(); if ( (update & HI_Map_Changed) != 0 ) { LoadMap(); m_sptab.ReloadMapOptContrls(); Update( wxFormat(_T("%d_%s") ) % OptionsWrapper::PrivateOptions % _T("mapname") ); } if ( (update & HI_Mod_Changed) != 0 ) { RemoveUnfittingBots(); LoadMod(); wxString presetname = sett().GetModDefaultPresetName( GetHostModName() ); if ( !presetname.IsEmpty() ) { LoadOptionsPreset( presetname ); SendHostInfo( HI_Send_All_opts ); } m_sptab.ReloadModOptContrls(); Update( wxFormat(_T("%d_%s") ) % OptionsWrapper::PrivateOptions % _T("modname") ); } if ( (update & HI_Send_All_opts) != 0 ) { for ( int i = 0; i < (int)OptionsWrapper::LastOption; i++) { const std::map& options = CustomBattleOptions().getOptionsMap( (OptionsWrapper::GameOption)i ); for ( std::map::const_iterator itor = options.begin(); itor != options.end(); ++itor ) { Update( wxFormat(_T("%d_%s") ) % i % itor->first ); } } } } void SinglePlayerBattle::RemoveUnfittingBots() { wxArrayString old_ais = usync().GetAIList( m_previous_local_mod_name ); wxArrayString new_ais = usync().GetAIList( m_local_mod.name ); for ( size_t i = 0; i < old_ais.GetCount(); ++i) { if ( new_ais.Index(old_ais[i]) == wxNOT_FOUND ) { for( size_t j = 0; j < GetNumUsers(); ++j ) { User& u = GetUser( j ); if ( u.GetBattleStatus().airawname == old_ais[i] ) KickPlayer( u ); } } } } void SinglePlayerBattle::Update( const wxString& Tag ) { m_sptab.UpdateTag( Tag ); } void SinglePlayerBattle::StartSpring() { spring().Run( *this ); ui().OnSpringStarting(); } springlobby-0.169/src/singleplayerbattle.h0000600000176000000410000000324712105760300022257 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SINGLEPLAYERBATTLE_H #define SPRINGLOBBY_HEADERGUARD_SINGLEPLAYERBATTLE_H #include "ibattle.h" #include "user.h" class Ui; class BattleBot; class MainSinglePlayerTab; class wxColour; class wxString; class SinglePlayerBattle: public IBattle { public: SinglePlayerBattle( MainSinglePlayerTab& msptab ); virtual ~SinglePlayerBattle(); // (koshi) these are never called // unsigned int AddBot( int ally, int posx, int posy, int handicap, const wxString& aidll ); // void UpdateBot( unsigned int index, int ally, int posx, int posy, int side ); bool IsFounderMe() const { return true; } User& GetMe() { return m_me; } const User& GetMe() const { return m_me; } void SendHostInfo( HostInfo update ); void SendHostInfo( const wxString& /*unused*/ ){ } void Update( const wxString& Tag ); void StartSpring(); protected: void RemoveUnfittingBots(); MainSinglePlayerTab& m_sptab; User m_me; }; #endif // SPRINGLOBBY_HEADERGUARD_SINGLEPLAYERBATTLE_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/singleplayertab.cpp0000600000176000000410000003140612105760300022103 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include #include #include #include #include #include #include #include #include #include "singleplayertab.h" #include "mapctrl.h" #include "mapselectdialog.h" #include "utils/controls.h" #include "utils/debug.h" #include "utils/conversion.h" #include "uiutils.h" #include "ui.h" #include "springunitsync.h" #include "hosting/addbotdialog.h" #include "server.h" #include "settings.h" #include "Helper/colorbutton.h" #include "aui/auimanager.h" #include "utils/customdialogs.h" #include "springunitsynclib.h" BEGIN_EVENT_TABLE(SinglePlayerTab, wxPanel) EVT_CHOICE( SP_MAP_PICK, SinglePlayerTab::OnMapSelect ) EVT_CHOICE( SP_MOD_PICK, SinglePlayerTab::OnModSelect ) EVT_BUTTON( SP_BROWSE_MAP, SinglePlayerTab::OnMapBrowse ) EVT_BUTTON( SP_ADD_BOT, SinglePlayerTab::OnAddBot ) EVT_BUTTON( SP_RESET, SinglePlayerTab::OnReset ) EVT_BUTTON( SP_START, SinglePlayerTab::OnStart ) EVT_CHECKBOX( SP_RANDOM, SinglePlayerTab::OnRandomCheck ) EVT_CHECKBOX( SP_SPECTATE, SinglePlayerTab::OnSpectatorCheck ) EVT_BUTTON( SP_COLOUR, SinglePlayerTab::OnColorButton ) EVT_MOUSEWHEEL( SinglePlayerTab::OnMouseWheel ) END_EVENT_TABLE() SinglePlayerTab::SinglePlayerTab(wxWindow* parent, MainSinglePlayerTab& msptab): wxScrolledWindow( parent, -1 ), m_battle( msptab ) { GetAui().manager->AddPane( this, wxLEFT, _T("singleplayertab") ); wxBoxSizer* m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_minimap = new MapCtrl( this, 100, &m_battle, false, false, true, true ); m_minimap->SetToolTip( TE(_("You can drag the sun/bot icon around to define start position.\n " "Hover over the icon for a popup that lets you change side, ally and bonus." )) ); m_main_sizer->Add( m_minimap, 1, wxALL|wxEXPAND, 5 ); wxBoxSizer* m_ctrl_sizer = new wxBoxSizer( wxHORIZONTAL ); m_map_lbl = new wxStaticText( this, -1, _("Map:") ); m_ctrl_sizer->Add( m_map_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); m_map_pick = new wxChoice( this, SP_MAP_PICK ); m_ctrl_sizer->Add( m_map_pick, 1, wxALL, 5 ); m_select_btn = new wxButton( this, SP_BROWSE_MAP, _T("..."), wxDefaultPosition, wxSize(CONTROL_HEIGHT, CONTROL_HEIGHT), wxBU_EXACTFIT ); m_ctrl_sizer->Add( m_select_btn, 0, wxBOTTOM|wxRIGHT|wxTOP, 5 ); m_mod_lbl = new wxStaticText( this, -1, _("Game:") ); m_ctrl_sizer->Add( m_mod_lbl, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5 ); m_mod_pick = new wxChoice( this, SP_MOD_PICK ); m_ctrl_sizer->Add( m_mod_pick, 1, wxALL, 5 ); // m_ctrl_sizer->Add( 0, 0, 1, wxEXPAND, 0 ); m_addbot_btn = new wxButton( this, SP_ADD_BOT, _("Add bot..."), wxDefaultPosition, wxSize(80, CONTROL_HEIGHT), 0 ); m_ctrl_sizer->Add( m_addbot_btn, 0, wxALL, 5 ); m_main_sizer->Add( m_ctrl_sizer, 0, wxEXPAND, 5 ); m_buttons_sep = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); m_main_sizer->Add( m_buttons_sep, 0, wxLEFT|wxRIGHT|wxEXPAND, 5 ); wxBoxSizer* m_buttons_sizer = new wxBoxSizer( wxHORIZONTAL ); // see http://projects.springlobby.info/issues/show/649 // m_reset_btn = new wxButton( this, SP_RESET, _("Reset"), wxDefaultPosition, wxSize(80, CONTROL_HEIGHT), 0 ); // m_buttons_sizer->Add( m_reset_btn, 0, wxALL, 5 ); m_buttons_sizer->Add( 0, 0, 1, wxEXPAND, 0 ); m_color_btn = new ColorButton( this, SP_COLOUR, sett().GetBattleLastColour(), wxDefaultPosition, wxSize(30, CONTROL_HEIGHT) ); m_buttons_sizer->Add( m_color_btn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 0 ); m_spectator_check = new wxCheckBox( this, SP_SPECTATE, _("Spectate only") ); m_buttons_sizer->Add( m_spectator_check, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_random_check = new wxCheckBox( this, SP_RANDOM, _("Random start positions") ); m_buttons_sizer->Add( m_random_check, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_start_btn = new wxButton( this, SP_START, _("Start"), wxDefaultPosition, wxSize(80, CONTROL_HEIGHT), 0 ); m_buttons_sizer->Add( m_start_btn, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_main_sizer->Add( m_buttons_sizer, 0, wxEXPAND, 5 ); SetScrollRate( SCROLL_RATE, SCROLL_RATE ); this->SetSizer( m_main_sizer ); this->Layout(); ReloadMaplist(); ReloadModlist(); } SinglePlayerTab::~SinglePlayerTab() { } void SinglePlayerTab::UpdateMinimap() { m_minimap->UpdateMinimap(); } void SinglePlayerTab::ReloadMaplist() { m_map_pick->Clear(); m_map_pick->Append( usync().GetMapList() ); m_map_pick->Insert( _("-- Select one --"), m_map_pick->GetCount() ); if ( m_battle.GetHostMapName() != wxEmptyString ) { m_map_pick->SetStringSelection( m_battle.GetHostMapName()); if ( m_map_pick->GetStringSelection() == wxEmptyString ) SetMap( m_mod_pick->GetCount()-1 ); } else { m_map_pick->SetSelection( m_map_pick->GetCount()-1 ); m_addbot_btn->Enable(false); } } void SinglePlayerTab::ReloadModlist() { m_mod_pick->Clear(); wxArrayString modlist= usync().GetModList(); //modlist.Sort(CompareStringIgnoreCase); size_t nummods = modlist.Count(); for ( size_t i = 0; i < nummods; i++ ) m_mod_pick->Insert( modlist[i], i ); m_mod_pick->Insert( _("-- Select one --"), m_mod_pick->GetCount() ); if ( !m_battle.GetHostModName().IsEmpty() ) { m_mod_pick->SetStringSelection( m_battle.GetHostModName() ); if ( m_mod_pick->GetStringSelection() == wxEmptyString ) SetMod( m_mod_pick->GetCount()-1 ); } else { m_mod_pick->SetSelection( m_mod_pick->GetCount()-1 ); } } void SinglePlayerTab::SetMap( unsigned int index ) { //ui().ReloadUnitSync(); m_addbot_btn->Enable( false ); if ( index >= m_map_pick->GetCount()-1 ) { m_battle.SetHostMap( wxEmptyString, wxEmptyString ); } else { try { UnitSyncMap map = usync().GetMapEx( index ); m_battle.SetHostMap( map.name, map.hash ); m_addbot_btn->Enable( true ); } catch (...) {} } m_minimap->UpdateMinimap(); m_battle.SendHostInfo( IBattle::HI_Map_Changed ); // reload map options m_map_pick->SetSelection( index ); } void SinglePlayerTab::ResetUsername() { m_battle.GetMe().SetNick( usync().GetDefaultNick() ); } void SinglePlayerTab::SetMod( unsigned int index ) { //ui().ReloadUnitSync(); if ( index >= m_mod_pick->GetCount()-1 ) { m_battle.SetHostMod( wxEmptyString, wxEmptyString ); } else { try { UnitSyncMod mod = usync().GetMod( index ); m_battle.SetLocalMod( mod ); m_battle.SetHostMod( mod.name, mod.hash ); } catch (...) {} } m_minimap->UpdateMinimap(); m_battle.SendHostInfo( IBattle::HI_Restrictions ); // Update restrictions in options. m_battle.SendHostInfo( IBattle::HI_Mod_Changed ); // reload mod options m_mod_pick->SetSelection( index ); } bool SinglePlayerTab::ValidSetup() const { if ( (unsigned int)m_mod_pick->GetSelection() >= m_mod_pick->GetCount()-1 ) { wxLogWarning( _T("no game selected") ); customMessageBox(SL_MAIN_ICON, _("You have to select a game first."), _("Game setup error") ); return false; } if ( (unsigned int)m_map_pick->GetSelection() >= m_map_pick->GetCount()-1 ) { wxLogWarning( _T("no map selected") ); customMessageBox(SL_MAIN_ICON, _("You have to select a map first."), _("Game setup error") ); return false; } if ( m_battle.GetNumUsers() == 1 ) { wxLogWarning(_T("trying to start sp game without bot")); if ( customMessageBox(SL_MAIN_ICON, _("Continue without adding a bot first?.\n The game will be over pretty fast.\n "), _("No Bot added"), wxYES_NO) == wxNO ) return false; } return true; } void SinglePlayerTab::OnMapSelect( wxCommandEvent& /*unused*/ ) { unsigned int index = (unsigned int)m_map_pick->GetCurrentSelection(); SetMap( index ); } void SinglePlayerTab::OnModSelect( wxCommandEvent& /*unused*/ ) { unsigned int index = (unsigned int)m_mod_pick->GetCurrentSelection(); size_t num_bots = m_battle.GetNumBots(); SetMod( index ); if( num_bots != m_battle.GetNumBots() ) customMessageBoxNoModal( SL_MAIN_ICON, _("Incompatible bots have been removed after game selection changed."), _("Bots removed") ); } void SinglePlayerTab::OnMapBrowse( wxCommandEvent& /*unused*/ ) { wxLogDebugFunc( _T("") ); if ( mapSelectDialog().ShowModal() == wxID_OK && mapSelectDialog().GetSelectedMap() != NULL ) { wxLogDebugFunc( mapSelectDialog().GetSelectedMap()->name ); const wxString mapname = mapSelectDialog().GetSelectedMap()->name; const int idx = m_map_pick->FindString( mapname, true /*case sensitive*/ ); if ( idx != wxNOT_FOUND ) SetMap( idx ); } } void SinglePlayerTab::OnAddBot( wxCommandEvent& /*unused*/ ) { AddBotDialog dlg( this, m_battle, true ); if ( dlg.ShowModal() == wxID_OK ) { UserBattleStatus bs; bs.owner = m_battle.GetMe().GetNick(); bs.aishortname = dlg.GetAIShortName(); bs.airawname = dlg.GetAiRawName(); bs.aiversion = dlg.GetAIVersion(); bs.aitype = dlg.GetAIType(); bs.team = m_battle.GetFreeTeam(); bs.ally = m_battle.GetFreeAlly(); bs.colour = m_battle.GetNewColour(); User& bot = m_battle.OnBotAdded( dlg.GetNick(), bs ); ASSERT_LOGIC( &bot != 0, _T("bot == 0") ); m_minimap->UpdateMinimap(); } } void SinglePlayerTab::OnUnitsyncReloaded( GlobalEvents::GlobalEventData /*data*/ ) { try { ReloadMaplist(); ReloadModlist(); UpdateMinimap(); } catch ( ... ) { wxLogDebugFunc( _T("") ); wxLogError( _T("unitsync reload sink failed") ); } } void SinglePlayerTab::OnStart( wxCommandEvent& /*unused*/ ) { wxLogDebugFunc( _T("SP: ") ); if ( ui().IsSpringRunning() ) { wxLogWarning(_T("trying to start spring while another instance is running") ); customMessageBoxNoModal(SL_MAIN_ICON, _("You cannot start a spring instance while another is already running"), _("Spring error"), wxICON_EXCLAMATION ); return; } if ( ValidSetup() ) m_battle.StartSpring(); } void SinglePlayerTab::OnRandomCheck( wxCommandEvent& /*unused*/ ) { if ( m_random_check->IsChecked() ) m_battle.CustomBattleOptions().setSingleOption( _T("startpostype"), TowxString(IBattle::ST_Random), OptionsWrapper::EngineOption ); else m_battle.CustomBattleOptions().setSingleOption( _T("startpostype"), TowxString(IBattle::ST_Pick), OptionsWrapper::EngineOption ); m_battle.SendHostInfo( IBattle::HI_StartType ); } void SinglePlayerTab::OnSpectatorCheck( wxCommandEvent& /*unused*/ ) { m_battle.GetMe().BattleStatus().spectator = m_spectator_check->IsChecked(); UpdateMinimap(); } void SinglePlayerTab::OnColorButton( wxCommandEvent& /*unused*/ ) { User& u = m_battle.GetMe(); wxColour CurrentColour = u.BattleStatus().colour; CurrentColour = GetColourFromUser(this, CurrentColour); if ( !CurrentColour.IsOk() ) return; sett().SetBattleLastColour( CurrentColour ); m_battle.ForceColour( u, CurrentColour ); UpdateMinimap(); } void SinglePlayerTab::UpdateTag( const wxString& Tag ) { long type; Tag.BeforeFirst( '_' ).ToLong( &type ); wxString key = Tag.AfterFirst( '_' ); wxString value = m_battle.CustomBattleOptions().getSingleValue( key, (OptionsWrapper::GameOption)type); long longval; value.ToLong( &longval ); if ( type == OptionsWrapper::PrivateOptions ) { if ( key == _T("mapname") ) { m_addbot_btn->Enable( false ); try { m_map_pick->SetSelection( usync().GetMapIndex( m_battle.GetHostMapName() ) ); UpdateMinimap(); m_addbot_btn->Enable( true ); } catch (...) {} } else if ( key == _T("modname") ) { try { // int pln = m_battle.GetNumUsers(); // int botn = m_battle.GetNumBots(); UpdateMinimap(); // pln -= m_battle.GetNumUsers(); // botn -= m_battle.GetNumBots(); // assert( pln == 0 ); // assert( botn == 0 ); } catch (...) {} } } } void SinglePlayerTab::UpdatePresetList() { } void SinglePlayerTab::OnReset( wxCommandEvent& /*unused*/ ) { } void SinglePlayerTab::OnMouseWheel( wxMouseEvent& event ) { if ( m_minimap ) { wxRect map_rect = m_minimap->GetRect(); if ( map_rect.Contains( event.GetPosition() ) ) { m_minimap->OnMouseWheel( event ); return; } } event.Skip(); } springlobby-0.169/src/singleplayertab.h0000600000176000000410000000540712105760300021552 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SINGLEPLAYERTAB_H #define SPRINGLOBBY_HEADERGUARD_SINGLEPLAYERTAB_H #include #include "singleplayerbattle.h" class Ui; class MapCtrl; class SinglePlayerBattle; class wxWindow; class wxButton; class wxStaticLine; class wxChoice; class wxStaticText; class wxCommandEvent; class wxCheckBox; class wxMouseEvent; class ColorButton; class SinglePlayerTab: public wxScrolledWindow , public UnitsyncReloadedSink< SinglePlayerTab > { public: SinglePlayerTab( wxWindow* parent, MainSinglePlayerTab& msptab ); ~SinglePlayerTab(); void UpdateMinimap(); void ReloadMaplist(); void ReloadModlist(); void UpdateTag( const wxString& Tag ); void UpdatePresetList(); SinglePlayerBattle& GetBattle() { return m_battle; } bool ValidSetup() const; void OnMapSelect( wxCommandEvent& event ); void OnModSelect( wxCommandEvent& event ); void OnMapBrowse( wxCommandEvent& event ); void OnAddBot( wxCommandEvent& event ); void OnStart( wxCommandEvent& event ); void OnRandomCheck( wxCommandEvent& event ); void OnSpectatorCheck( wxCommandEvent& event ); void OnColorButton( wxCommandEvent& event ); void OnReset( wxCommandEvent& event ); void OnMouseWheel( wxMouseEvent& event ); void OnUnitsyncReloaded( GlobalEvents::GlobalEventData /*data*/ ); void ResetUsername(); void SetMap( unsigned int index ); void SetMod( unsigned int index ); protected: SinglePlayerBattle m_battle; MapCtrl* m_minimap; wxChoice* m_map_pick; wxChoice* m_mod_pick; wxStaticText* m_map_lbl; wxStaticText* m_mod_lbl; wxButton* m_select_btn; wxButton* m_addbot_btn; wxStaticLine* m_buttons_sep; wxButton* m_reset_btn; wxCheckBox* m_random_check; wxCheckBox* m_spectator_check; wxButton* m_start_btn; ColorButton* m_color_btn; enum { SP_MAP_PICK = wxID_HIGHEST, SP_MOD_PICK, SP_BROWSE_MAP, SP_ADD_BOT, SP_RESET, SP_START, SP_RANDOM, SP_SPECTATE, SP_COLOUR }; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_SINGLEPLAYERTAB_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/socket.cpp0000600000176000000410000002577212105760300020217 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include #include #include #include #include #include "socket.h" #include "server.h" #include "utils/debug.h" #include "utils/conversion.h" #ifdef __WXMSW__ #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #include #include #include #pragma comment(lib, "iphlpapi.lib") #elif defined(linux) #include #include #endif #define LOCK_SOCKET wxCriticalSectionLocker criticalsection_lock(m_lock) wxString _GetHandle() { wxString handle; #ifdef __WXMSW__ IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information for 16 cards DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer DWORD dwStatus = GetAdaptersInfo ( AdapterInfo, &dwBufLen); // Get info if (dwStatus != NO_ERROR) return _T(""); // Check status for (unsigned int i=0; iDestroy(); delete m_events; } //! @brief Creates an TCP socket and sets it up. wxSocketClient* Socket::_CreateSocket() { wxSocketClient* sock = new wxSocketClient(); sock->SetClientData( (void*)this ); if ( !m_blocking ) { if ( m_events == 0 ) m_events = new SocketEvents( m_net_class ); sock->SetFlags( wxSOCKET_NOWAIT ); sock->SetEventHandler(*m_events, SOCKET_ID); sock->SetNotify( wxSOCKET_CONNECTION_FLAG | wxSOCKET_INPUT_FLAG | wxSOCKET_LOST_FLAG ); sock->Notify(true); } else { // blocking mode _must_ block, and end blocking as soon as data arrives otherwise other blocking but no gui block // mode will wait for timeout before unlocking sock->SetFlags( wxSOCKET_BLOCK ); delete m_events; m_events = 0; } return sock; } //! @brief Connect to remote host. void Socket::Connect( const wxString& addr, const int port ) { LOCK_SOCKET; wxIPV4address wxaddr; m_connecting = true; m_buffer = ""; wxaddr.Hostname( addr ); wxaddr.Service( port ); if ( m_sock != 0 ) m_sock->Destroy(); m_sock = _CreateSocket(); m_sock->Connect( wxaddr, m_wait_on_connect ); m_sock->SetTimeout( 40 ); } void Socket::SetTimeout( const int seconds ) { if ( m_sock != 0 ) m_sock->SetTimeout( seconds ); } //! @brief Disconnect from remote host if connected. void Socket::Disconnect( ) { if ( m_sock ) m_sock->SetTimeout( 0 ); m_net_class.OnDisconnected( this ); m_buffer = ""; if ( m_sock ) { m_sock->Destroy(); m_sock = 0; } } //! @brief Send data over connection. bool Socket::Send( const wxString& data ) { LOCK_SOCKET; return _Send( data ); } //! @brief Internal send function. //! @note Does not lock the criticalsection. bool Socket::_Send( const wxString& data ) { if ( !m_sock ) { wxLogError( _T("Socket NULL") ); return false; } m_buffer += (const char*)data.mb_str(wxConvUTF8); int crop = m_buffer.length(); if ( m_rate > 0 ) { int max = m_rate - m_sent; if ( crop > 0 ) crop = max; } std::string send = m_buffer.substr( 0, crop ); //wxLogMessage( _T("send: %d sent: %d max: %d : buff: %d"), send.length() , m_sent, max, m_buffer.length() ); m_sock->Write( send.c_str(), send.length() ); if ( !m_sock->Error() ) { wxUint32 sentdata = m_sock->LastCount(); m_buffer.erase( 0, sentdata ); m_sent += sentdata; } return !m_sock->Error(); } //! @brief Receive data from connection wxString Socket::Receive() { wxString ret; if ( m_sock == 0 ) { wxLogError( _T("Socket NULL") ); return ret; } LOCK_SOCKET; const int chunk_size = 1337; std::vector buff; int readnum = 0; int totalbytes = 0; do { buff.resize( totalbytes + chunk_size ); // increase buffer capacity to fit incoming chunk m_sock->Read( &buff[totalbytes], chunk_size ); readnum = m_sock->LastCount(); totalbytes += readnum; } while ( readnum >= chunk_size ); if ( totalbytes > 0 ) { ret = wxString( &buff[0], wxConvUTF8, totalbytes ); if ( ret.IsEmpty() ) { ret = wxString( &buff[0], wxConvLocal, totalbytes ); if ( ret.IsEmpty() ) { ret = wxString( &buff[0], wxCSConv(_T("latin-1")), totalbytes ); } } } return ret; } //! @brief Get curent socket state SockState Socket::State( ) { if ( m_sock == 0 ) return SS_Closed; LOCK_SOCKET; if ( m_sock->IsConnected() ) { m_connecting = false; return SS_Open; } else { if ( m_connecting ) { return SS_Connecting; } else { return SS_Closed; } } } //! @brief Get socket error code //! @todo Implement SockError Socket::Error( ) const { return (SockError)-1; } //! @brief used to retrieve local ip address behind NAT to communicate to the server on login wxString Socket::GetLocalAddress() const { if ( !m_sock || !m_sock->IsConnected() ) return wxEmptyString; wxIPV4address localaddr; m_sock->GetLocal( localaddr ); return localaddr.IPAddress(); } //! @brief Set the maximum upload ratio. void Socket::SetSendRateLimit( int Bps ) { m_rate = Bps; } void Socket::OnTimer( int mselapsed ) { LOCK_SOCKET; if ( m_rate > 0 ) { m_sent -= int( ( mselapsed / 1000.0 ) * m_rate ); if ( m_sent < 0 ) m_sent = 0; if ( m_buffer.length() > 0 ) _Send(_T("")); } else { m_sent = 0; } } #else #include // Socket interface void Socket::Connect( const wxString& _addr, const int port ) { const QString address = FromwxString( _addr ); if ( m_sock ) m_sock->abort(); delete m_sock; m_sock = _CreateSocket(); connect( m_sock, SIGNAL( readyRead() ), this, SLOT( OnDataIncoming() ) ); connect( m_sock, SIGNAL( connected() ), this, SLOT( OnConnected() ) ); connect( m_sock, SIGNAL( disconnected() ), this, SLOT( OnDisconnected() ) ); m_sock->connectToHost( address, port ); if (m_wait_on_connect) { m_sock->waitForConnected( 40000 /*40sec*/ ); } } void Socket::Disconnect( ) { m_net_class.OnDisconnected( this ); if(m_sock) m_sock->disconnect(); } bool Socket::Send( const wxString& _data ) { const QString data = FromwxString( _data ); m_sock->write( data.toUtf8() ); return true;//!TODO } wxString Socket::Receive() { LOCK_SOCKET; QString ret; while ( m_sock->canReadLine() ) ret += QString::fromUtf8( m_sock->readLine() ); return TowxString( ret ); } //! used in plasmaservice, otherwise getting garbeld responses wxString Socket::ReceiveSpecial() { return Receive(); } wxString Socket::GetLocalAddress() const { if ( m_sock && ( m_sock->state() == QAbstractSocket::ConnectedState ) ) return TowxString( m_sock->localAddress().toString() ); else return wxString(); } SockState Socket::State( ) { if ( m_sock == 0 ) return SS_Closed; if ( m_sock->state() == QAbstractSocket::ConnectedState ) { return SS_Open; } else { if ( m_sock->state() == QAbstractSocket::ConnectingState ) { return SS_Connecting; } else { return SS_Closed; } } } SockError Socket::Error( ) const { return (SockError)-1; } //!is there an equiv on qtsocket?? void Socket::SetSendRateLimit( int /*Bps*/ ){} void Socket::OnTimer( int mselapsed ){} void Socket::SetTimeout( const int /*seconds*/ ){} QTcpSocket* Socket::_CreateSocket() const { return new QTcpSocket(); } Socket::Socket( iNetClass& netclass, bool wait_on_connect, bool blocking) : QObject( 0 ), m_sock(0), m_handle( _GetHandle() ), m_wait_on_connect( wait_on_connect ), m_blocking(blocking), m_net_class(netclass), m_udp_private_port(0), m_rate(-1), m_sent(0), m_blockSize(0) { } Socket::~Socket() { if (m_sock) m_sock->disconnect(); delete m_sock; } void Socket::OnDataIncoming() { if (!m_sock) return; m_net_class.OnDataReceived( this ); } void Socket::OnDisconnected() { if (!m_sock) return; m_net_class.OnDisconnected( this ); } void Socket::OnConnected() { if (!m_sock) return; m_net_class.OnConnected( this ); } #endif springlobby-0.169/src/socket.h0000600000176000000410000000752712105760300017662 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SOCKET_H #define SPRINGLOBBY_HEADERGUARD_SOCKET_H #include #include class iNetClass; class wxCriticalSection; class PingThread; enum SockState { SS_Closed, SS_Connecting, SS_Open }; enum SockError { SE_No_Error, SE_NotConnected, SE_Resolve_Host_Failed, SE_Connect_Host_Failed }; const int SOCKET_ID = 100; #ifndef SL_QT_MODE class SocketEvents; class wxSocketEvent; class wxSocketClient; //! @brief Class that implements a TCP client socket. class Socket { public: Socket( iNetClass& netclass, bool wait_on_connect = false, bool blocking = false ); ~Socket(); // Socket interface void Connect( const wxString& addr, const int port ); void Disconnect( ); bool Send( const wxString& data ); wxString Receive(); //! used in plasmaservice, otherwise getting garbeld responses wxString ReceiveSpecial(); wxString GetLocalAddress() const; wxString GetHandle() const {return m_handle;} SockState State( ); SockError Error( ) const; void SetSendRateLimit( int Bps = -1 ); int GetSendRateLimit() {return m_rate;} void OnTimer( int mselapsed ); void SetTimeout( const int seconds ); protected: // Socket variables wxSocketClient* m_sock; SocketEvents* m_events; wxCriticalSection m_lock; wxString m_ping_msg,m_handle; bool m_connecting; bool m_wait_on_connect; bool m_blocking; iNetClass& m_net_class; unsigned int m_udp_private_port; int m_rate; int m_sent; std::string m_buffer; wxSocketClient* _CreateSocket(); bool _Send( const wxString& data ); }; class SocketEvents: public wxEvtHandler { public: SocketEvents( iNetClass& netclass ): m_net_class(netclass) {} void OnSocketEvent(wxSocketEvent& event); protected: iNetClass& m_net_class; DECLARE_EVENT_TABLE() }; typedef void (*socket_callback)(Socket*); #else #include //! @brief Class that implements a TCP client socket. class Socket : public QObject { Q_OBJECT public: Socket( iNetClass& netclass, bool wait_on_connect = false, bool blocking = false ); ~Socket(); // Socket interface void Connect( const wxString& addr, const int port ); void Disconnect( ); bool Send( const wxString& data ); //! used in plasmaservice, otherwise getting garbeld responses wxString ReceiveSpecial(); wxString GetLocalAddress() const; wxString GetHandle() const {return m_handle;} SockState State( ); SockError Error( ) const; void SetSendRateLimit( int Bps = -1 ); int GetSendRateLimit() {return m_rate;} void OnTimer( int mselapsed ); void SetTimeout( const int seconds ); wxString Receive(); private slots: void OnDataIncoming(); void OnConnected(); void OnDisconnected(); protected: // Socket variables QTcpSocket* m_sock; wxCriticalSection m_lock; wxString m_ping_msg,m_handle; bool m_wait_on_connect; bool m_blocking; iNetClass& m_net_class; unsigned int m_udp_private_port; int m_rate; int m_sent; quint16 m_blockSize; QTcpSocket* _CreateSocket() const; }; #endif #endif // SPRINGLOBBY_HEADERGUARD_SOCKET_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/sound/alsound.cpp0000600000176000000410000000421712105760300021513 0ustar buildbotwww-data00000000000000#ifndef DISABLE_SOUND #include "alsound.h" #ifdef WIN32 //win32 compile uses static libs #define ALURE_STATIC_LIBRARY #endif #include #include "sound/ring_sound.h" #include "sound/pm_sound.h" #include #include "utils/debug.h" #include "utils/conversion.h" #include "globalsmanager.h" #include ALsound& sound() { static LineInfo m( AT ); static GlobalObjectHolder > m_sound( m ); return m_sound; } //volatile int isdone = 0; //static void eos_callback(void *unused, ALuint unused2) //{ // isdone = 1; // (void)unused; // (void)unused2; //} ALsound::ALsound() { //Init alGetError(); //* //set up 3d sound ALfloat alpos[3]; ALfloat alvel[3]; ALfloat alori[6]; alpos[0] = 0; alpos[1] = 0; alpos[2] = 0; alvel[0] = 0; alvel[1] = 0; alvel[2] = 0; alori[0] = 0; alori[1] = 0; alori[2] = -1; alori[3] = 0; alori[4] = 1; alori[5] = 0; alListenerfv(AL_POSITION,alpos); alListenerfv(AL_VELOCITY,alvel); alListenerfv(AL_ORIENTATION,alori); alureInitDevice(0, 0); //* alGenSources(m_num_sources,m_sources); if(alGetError()!=AL_NO_ERROR) { wxLogError( TowxString(alureGetErrorString()) ); return; } m_buffers[0] = alureCreateBufferFromMemory( pm_sound_data, sizeof(pm_sound_data)/sizeof(pm_sound_data[0]) ); m_buffers[1] = alureCreateBufferFromMemory( ring_sound_data, sizeof(ring_sound_data)/sizeof(ring_sound_data[0]) ); if ( alGetError()!=AL_NO_ERROR ) { wxLogError( TowxString(alureGetErrorString()) ); return; } alSourcei(m_sources[0], AL_BUFFER, m_buffers[0] ); alSourcei(m_sources[1], AL_BUFFER, m_buffers[1] ); if ( alGetError()!=AL_NO_ERROR ) { wxLogError( TowxString(alureGetErrorString()) ); return; } } ALsound::~ALsound() { alureStopSource(m_sources[0], AL_FALSE); alureStopSource(m_sources[1], AL_FALSE); alDeleteSources(m_num_sources, m_sources); alureShutdownDevice(); } void ALsound::ring() const { if (alurePlaySource(m_sources[1], 0, 0) == AL_FALSE) { wxLogError( TowxString(alureGetErrorString()) ); } } void ALsound::pm() const { if (alurePlaySource(m_sources[0], 0, 0) == AL_FALSE) { wxLogError( TowxString(alureGetErrorString()) ); } } #endif springlobby-0.169/src/sound/alsound.h0000600000176000000410000000220512105760300021153 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SDLSOUND_H #define SPRINGLOBBY_HEADERGUARD_SDLSOUND_H #ifndef DISABLE_SOUND #ifdef __WXMAC__ #include #else #include #endif class ALsound { public: ALsound(); ~ALsound(); void ring() const; void pm() const; private: static const int m_num_buffer = 2; static const int m_num_sources = 2; ALuint m_sources[m_num_sources]; ALuint m_buffers[m_num_buffer]; }; ALsound& sound(); #endif #endif // SPRINGLOBBY_HEADERGUARD_SDLSOUND_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/sound/pm_sound.h0000600000176000000410000073054112105760300021345 0ustar buildbotwww-data00000000000000/* receive.wav - 55008 bytes */ static const unsigned char pm_sound_data[] = { 82, 73, 70, 70, 216, 214, 0, 0, 87, 65, 86, 69, 102, 109, 116, 32, 16, 0, 0, 0, 1, 0, 2, 0, 34, 86, 0, 0, 136, 88, 1, 0, 4, 0, 16, 0, 100, 97, 116, 97, 76, 214, 0, 0, 0, 0, 0, 0, 12, 0, 12, 0, 124, 0, 124, 0, 181, 1, 181, 1, 162, 3, 162, 3, 183, 6, 183, 6, 230, 10, 230, 10, 163, 15, 163, 15, 188, 20, 187, 20, 25, 26, 25, 26, 74, 31, 74, 31, 5, 36, 5, 36, 13, 40, 13, 40, 39, 43, 38, 43, 58, 45, 58, 45, 62, 46, 62, 46, 78, 46, 77, 46, 103, 45, 102, 45, 146, 43, 145, 43, 216, 40, 215, 40, 88, 37, 88, 37, 69, 33, 68, 33, 221, 28, 221, 28, 104, 24, 104, 24, 48, 20, 48, 20, 115, 16, 114, 16, 97, 13, 96, 13, 25, 11, 25, 11, 164, 9, 164, 9, 250, 8, 249, 8, 255, 8, 255, 8, 142, 9, 142, 9, 123, 10, 123, 10, 151, 11, 151, 11, 183, 12, 183, 12, 181, 13, 181, 13, 117, 14, 119, 14, 230, 14, 237, 14, 255, 14, 17, 15, 192, 14, 246, 14, 52, 14, 215, 14, 104, 13, 233, 14, 111, 12, 60, 15, 89, 11, 193, 15, 59, 10, 93, 16, 36, 9, 13, 17, 17, 8, 152, 17, 239, 6, 204, 17, 156, 5, 106, 17, 245, 3, 71, 16, 227, 1, 80, 14, 97, 255, 128, 11, 114, 252, 225, 7, 45, 249, 144, 3, 182, 245, 202, 254, 57, 242, 212, 249, 225, 238, 2, 245, 218, 235, 162, 240, 73, 233, 252, 236, 73, 231, 57, 234, 237, 229, 116, 232, 57, 229, 167, 231, 38, 229, 189, 231, 167, 229, 144, 232, 162, 230, 237, 233, 252, 231, 164, 235, 152, 233, 131, 237, 84, 235, 96, 239, 28, 237, 27, 241, 243, 238, 173, 242, 242, 240, 29, 244, 10, 243, 107, 245, 84, 245, 177, 246, 2, 248, 34, 248, 5, 251, 207, 249, 88, 254, 183, 251, 15, 2, 216, 253, 2, 6, 4, 0, 3, 10, 18, 2, 222, 13, 218, 3, 82, 17, 56, 5, 57, 20, 25, 6, 108, 22, 120, 6, 211, 23, 87, 6, 112, 24, 207, 5, 75, 24, 241, 4, 122, 23, 218, 3, 28, 22, 163, 2, 65, 20, 90, 1, 21, 18, 20, 0, 173, 15, 216, 254, 39, 13, 170, 253, 164, 10, 145, 252, 46, 8, 141, 251, 227, 5, 158, 250, 201, 3, 204, 249, 232, 1, 38, 249, 71, 0, 184, 248, 229, 254, 133, 248, 186, 253, 127, 248, 194, 252, 145, 248, 228, 251, 142, 248, 243, 250, 57, 248, 203, 249, 99, 247, 71, 248, 230, 245, 98, 246, 196, 243, 40, 244, 20, 241, 173, 241, 1, 238, 30, 239, 201, 234, 157, 236, 164, 231, 86, 234, 207, 228, 105, 232, 114, 226, 234, 230, 171, 224, 224, 229, 117, 223, 74, 229, 204, 222, 23, 229, 155, 222, 48, 229, 189, 222, 126, 229, 25, 223, 225, 229, 142, 223, 68, 230, 254, 223, 137, 230, 70, 224, 164, 230, 69, 224, 146, 230, 232, 223, 71, 230, 33, 223, 187, 229, 241, 221, 234, 228, 100, 220, 214, 227, 146, 218, 128, 226, 153, 216, 242, 224, 152, 214, 62, 223, 178, 212, 115, 221, 1, 211, 169, 219, 161, 209, 247, 217, 161, 208, 111, 216, 10, 208, 42, 215, 229, 207, 49, 214, 36, 208, 135, 213, 183, 208, 51, 213, 148, 209, 51, 213, 162, 210, 129, 213, 211, 211, 24, 214, 23, 213, 236, 214, 93, 214, 242, 215, 156, 215, 33, 217, 204, 216, 105, 218, 232, 217, 198, 219, 240, 218, 42, 221, 231, 219, 145, 222, 212, 220, 247, 223, 199, 221, 92, 225, 207, 222, 199, 226, 242, 223, 62, 228, 53, 225, 201, 229, 152, 226, 106, 231, 26, 228, 32, 233, 179, 229, 235, 234, 95, 231, 227, 236, 49, 233, 60, 239, 89, 235, 46, 242, 17, 238, 222, 245, 123, 241, 87, 250, 167, 245, 133, 255, 135, 250, 56, 5, 242, 255, 51, 11, 166, 5, 39, 17, 101, 11, 198, 22, 227, 16, 203, 27, 216, 21, 252, 31, 16, 26, 49, 35, 100, 29, 90, 37, 193, 31, 121, 38, 38, 33, 158, 38, 165, 33, 239, 37, 94, 33, 150, 36, 124, 32, 195, 34, 54, 31, 169, 32, 202, 29, 118, 30, 109, 28, 80, 28, 70, 27, 84, 26, 110, 26, 142, 24, 237, 25, 4, 23, 197, 25, 182, 21, 236, 25, 160, 20, 84, 26, 188, 19, 233, 26, 4, 19, 150, 27, 106, 18, 62, 28, 207, 17, 183, 28, 16, 17, 210, 28, 15, 16, 112, 28, 190, 14, 128, 27, 30, 13, 6, 26, 59, 11, 24, 24, 45, 9, 214, 21, 13, 7, 109, 19, 248, 4, 10, 17, 3, 3, 212, 14, 68, 1, 233, 12, 201, 255, 96, 11, 147, 254, 65, 10, 163, 253, 140, 9, 240, 252, 54, 9, 111, 252, 44, 9, 20, 252, 89, 9, 207, 251, 160, 9, 148, 251, 228, 9, 86, 251, 11, 10, 17, 251, 0, 10, 190, 250, 182, 9, 93, 250, 44, 9, 238, 249, 106, 8, 119, 249, 124, 7, 253, 248, 113, 6, 133, 248, 95, 5, 20, 248, 85, 4, 171, 247, 97, 3, 62, 247, 127, 2, 181, 246, 154, 1, 242, 245, 155, 0, 220, 244, 103, 255, 103, 243, 234, 253, 142, 241, 29, 252, 89, 239, 4, 250, 223, 236, 171, 247, 58, 234, 41, 245, 140, 231, 156, 242, 250, 228, 33, 240, 166, 226, 219, 237, 173, 224, 229, 235, 39, 223, 91, 234, 36, 222, 74, 233, 171, 221, 193, 232, 188, 221, 204, 232, 77, 222, 112, 233, 84, 223, 172, 234, 199, 224, 104, 236, 158, 226, 133, 238, 207, 228, 223, 240, 72, 231, 73, 243, 243, 233, 157, 245, 185, 236, 185, 247, 129, 239, 134, 249, 64, 242, 4, 251, 248, 244, 73, 252, 168, 247, 105, 253, 74, 250, 116, 254, 207, 252, 118, 255, 37, 255, 109, 0, 52, 1, 88, 1, 232, 2, 43, 2, 49, 4, 217, 2, 4, 5, 87, 3, 93, 5, 156, 3, 68, 5, 166, 3, 199, 4, 118, 3, 251, 3, 19, 3, 247, 2, 134, 2, 214, 1, 222, 1, 178, 0, 40, 1, 162, 255, 116, 0, 185, 254, 212, 255, 4, 254, 81, 255, 146, 253, 237, 254, 105, 253, 164, 254, 135, 253, 113, 254, 226, 253, 71, 254, 106, 254, 32, 254, 14, 255, 238, 253, 187, 255, 172, 253, 101, 0, 84, 253, 247, 0, 219, 252, 89, 1, 46, 252, 104, 1, 49, 251, 10, 1, 210, 249, 54, 0, 11, 248, 240, 254, 227, 245, 67, 253, 110, 243, 79, 251, 205, 240, 58, 249, 37, 238, 31, 247, 154, 235, 41, 245, 80, 233, 106, 243, 97, 231, 249, 241, 221, 229, 226, 240, 203, 228, 30, 240, 40, 228, 174, 239, 232, 227, 127, 239, 248, 227, 129, 239, 64, 228, 163, 239, 167, 228, 208, 239, 15, 229, 252, 239, 89, 229, 23, 240, 102, 229, 29, 240, 35, 229, 6, 240, 133, 228, 208, 239, 138, 227, 115, 239, 62, 226, 243, 238, 184, 224, 79, 238, 15, 223, 139, 237, 95, 221, 175, 236, 200, 219, 194, 235, 102, 218, 206, 234, 74, 217, 217, 233, 125, 216, 241, 232, 12, 216, 31, 232, 242, 215, 109, 231, 45, 216, 225, 230, 179, 216, 132, 230, 115, 217, 88, 230, 100, 218, 94, 230, 113, 219, 150, 230, 141, 220, 252, 230, 173, 221, 139, 231, 199, 222, 62, 232, 211, 223, 16, 233, 206, 224, 249, 233, 187, 225, 241, 234, 158, 226, 242, 235, 128, 227, 244, 236, 107, 228, 250, 237, 101, 229, 0, 239, 111, 230, 16, 240, 139, 231, 45, 241, 182, 232, 92, 242, 240, 233, 159, 243, 52, 235, 253, 244, 134, 236, 144, 246, 7, 238, 132, 248, 226, 239, 253, 250, 62, 242, 9, 254, 54, 245, 168, 1, 204, 248, 198, 5, 240, 252, 61, 10, 126, 1, 217, 14, 72, 6, 95, 19, 19, 11, 153, 23, 166, 15, 82, 27, 204, 19, 97, 30, 89, 23, 166, 32, 46, 26, 21, 34, 59, 28, 174, 34, 128, 29, 127, 34, 10, 30, 160, 33, 238, 29, 53, 32, 76, 29, 94, 30, 80, 28, 71, 28, 34, 27, 18, 26, 234, 25, 227, 23, 203, 24, 213, 21, 222, 23, 247, 19, 50, 23, 79, 18, 208, 22, 226, 16, 184, 22, 173, 15, 225, 22, 173, 14, 64, 23, 221, 13, 194, 23, 41, 13, 72, 24, 126, 12, 169, 24, 193, 11, 194, 24, 225, 10, 120, 24, 217, 9, 190, 23, 166, 8, 153, 22, 83, 7, 24, 21, 241, 5, 84, 19, 149, 4, 112, 17, 82, 3, 138, 15, 61, 2, 195, 13, 107, 1, 51, 12, 231, 0, 235, 10, 180, 0, 243, 9, 204, 0, 77, 9, 35, 1, 241, 8, 163, 1, 211, 8, 54, 2, 227, 8, 199, 2, 12, 9, 63, 3, 55, 9, 142, 3, 80, 9, 173, 3, 69, 9, 147, 3, 13, 9, 66, 3, 163, 8, 193, 2, 12, 8, 26, 2, 81, 7, 90, 1, 126, 6, 141, 0, 161, 5, 195, 255, 198, 4, 251, 254, 242, 3, 46, 254, 32, 3, 77, 253, 61, 2, 69, 252, 58, 1, 8, 251, 6, 0, 143, 249, 155, 254, 213, 247, 243, 252, 228, 245, 21, 251, 201, 243, 15, 249, 149, 241, 240, 246, 93, 239, 210, 244, 48, 237, 203, 242, 33, 235, 244, 240, 64, 233, 97, 239, 158, 231, 38, 238, 74, 230, 86, 237, 80, 229, 0, 237, 184, 228, 50, 237, 135, 228, 238, 237, 186, 228, 39, 239, 84, 229, 200, 240, 85, 230, 179, 242, 184, 231, 195, 244, 115, 233, 211, 246, 119, 235, 197, 248, 175, 237, 125, 250, 15, 240, 247, 251, 145, 242, 55, 253, 43, 245, 78, 254, 209, 247, 73, 255, 113, 250, 49, 0, 242, 252, 15, 1, 59, 255, 224, 1, 52, 1, 159, 2, 201, 2, 65, 3, 235, 3, 192, 3, 145, 4, 20, 4, 189, 4, 55, 4, 120, 4, 38, 4, 207, 3, 231, 3, 217, 2, 126, 3, 174, 1, 244, 2, 106, 0, 84, 2, 35, 255, 170, 1, 238, 253, 1, 1, 221, 252, 99, 0, 253, 251, 215, 255, 84, 251, 94, 255, 227, 250, 250, 254, 164, 250, 171, 254, 139, 250, 108, 254, 135, 250, 55, 254, 134, 250, 9, 254, 123, 250, 217, 253, 89, 250, 160, 253, 15, 250, 77, 253, 136, 249, 200, 252, 176, 248, 251, 251, 128, 247, 213, 250, 246, 245, 82, 249, 36, 244, 121, 247, 31, 242, 94, 245, 6, 240, 26, 243, 251, 237, 205, 240, 30, 236, 150, 238, 147, 234, 145, 236, 124, 233, 213, 234, 236, 232, 113, 233, 236, 232, 107, 232, 121, 233, 197, 231, 129, 234, 115, 231, 230, 235, 106, 231, 137, 237, 150, 231, 68, 239, 225, 231, 245, 240, 47, 232, 125, 242, 98, 232, 195, 243, 96, 232, 184, 244, 25, 232, 82, 245, 132, 231, 142, 245, 166, 230, 112, 245, 135, 229, 254, 244, 60, 228, 67, 244, 216, 226, 78, 243, 113, 225, 50, 242, 33, 224, 1, 241, 249, 222, 208, 239, 11, 222, 176, 238, 99, 221, 177, 237, 7, 221, 223, 236, 246, 220, 68, 236, 45, 221, 227, 235, 164, 221, 191, 235, 81, 222, 211, 235, 36, 223, 22, 236, 19, 224, 124, 236, 20, 225, 251, 236, 29, 226, 131, 237, 34, 227, 13, 238, 27, 228, 147, 238, 11, 229, 21, 239, 242, 229, 148, 239, 216, 230, 20, 240, 193, 231, 152, 240, 174, 232, 35, 241, 163, 233, 189, 241, 156, 234, 115, 242, 156, 235, 71, 243, 158, 236, 63, 244, 163, 237, 94, 245, 172, 238, 175, 246, 200, 239, 81, 248, 28, 241, 94, 250, 204, 242, 234, 252, 249, 244, 247, 255, 175, 247, 120, 3, 237, 250, 88, 7, 161, 254, 110, 11, 170, 2, 142, 15, 224, 6, 137, 19, 17, 11, 52, 23, 17, 15, 105, 26, 177, 18, 10, 29, 207, 21, 3, 31, 82, 24, 72, 32, 46, 26, 215, 32, 96, 27, 182, 32, 239, 27, 250, 31, 238, 27, 185, 30, 115, 27, 22, 29, 157, 26, 46, 27, 144, 25, 36, 25, 107, 24, 22, 23, 83, 23, 31, 21, 92, 22, 82, 19, 156, 21, 186, 17, 30, 21, 90, 16, 228, 20, 54, 15, 236, 20, 72, 14, 43, 21, 132, 13, 141, 21, 214, 12, 242, 21, 35, 12, 54, 22, 90, 11, 62, 22, 109, 10, 244, 21, 91, 9, 80, 21, 38, 8, 87, 20, 223, 6, 21, 19, 147, 5, 160, 17, 87, 4, 17, 16, 68, 3, 129, 14, 104, 2, 8, 13, 212, 1, 186, 11, 136, 1, 164, 10, 132, 1, 207, 9, 188, 1, 57, 9, 31, 2, 224, 8, 157, 2, 187, 8, 31, 3, 189, 8, 149, 3, 213, 8, 236, 3, 238, 8, 27, 4, 249, 8, 28, 4, 234, 8, 234, 3, 182, 8, 139, 3, 92, 8, 3, 3, 222, 7, 94, 2, 65, 7, 165, 1, 144, 6, 229, 0, 212, 5, 36, 0, 21, 5, 97, 255, 83, 4, 145, 254, 132, 3, 167, 253, 155, 2, 151, 252, 143, 1, 87, 251, 87, 0, 229, 249, 242, 254, 66, 248, 93, 253, 119, 246, 162, 251, 141, 244, 206, 249, 143, 242, 241, 247, 139, 240, 29, 246, 143, 238, 100, 244, 173, 236, 218, 242, 245, 234, 144, 241, 121, 233, 156, 240, 70, 232, 15, 240, 104, 231, 248, 239, 230, 230, 91, 240, 196, 230, 51, 241, 255, 230, 112, 242, 145, 231, 249, 243, 122, 232, 178, 245, 180, 233, 125, 247, 55, 235, 61, 249, 249, 236, 219, 250, 241, 238, 71, 252, 28, 241, 133, 253, 116, 243, 156, 254, 240, 245, 150, 255, 129, 248, 125, 0, 20, 251, 87, 1, 143, 253, 37, 2, 216, 255, 227, 2, 211, 1, 139, 3, 115, 3, 21, 4, 163, 4, 123, 4, 94, 5, 182, 4, 161, 5, 194, 4, 118, 5, 161, 4, 235, 4, 84, 4, 16, 4, 227, 3, 253, 2, 86, 3, 201, 1, 180, 2, 139, 0, 6, 2, 89, 255, 83, 1, 66, 254, 163, 0, 82, 253, 1, 0, 147, 252, 115, 255, 8, 252, 250, 254, 173, 251, 155, 254, 125, 251, 84, 254, 105, 251, 32, 254, 97, 251, 253, 253, 90, 251, 226, 253, 67, 251, 194, 253, 7, 251, 136, 253, 142, 250, 28, 253, 202, 249, 106, 252, 180, 248, 102, 251, 80, 247, 15, 250, 173, 245, 105, 248, 224, 243, 137, 246, 6, 242, 133, 244, 64, 240, 117, 242, 180, 238, 118, 240, 129, 237, 161, 238, 189, 236, 8, 237, 117, 236, 185, 235, 167, 236, 185, 234, 73, 237, 10, 234, 72, 238, 169, 233, 137, 239, 137, 233, 241, 240, 153, 233, 96, 242, 195, 233, 186, 243, 236, 233, 234, 244, 253, 233, 223, 245, 226, 233, 139, 246, 145, 233, 237, 246, 4, 233, 4, 247, 58, 232, 211, 246, 65, 231, 97, 246, 37, 230, 184, 245, 247, 228, 227, 244, 203, 227, 239, 243, 179, 226, 237, 242, 191, 225, 232, 241, 252, 224, 241, 240, 117, 224, 18, 240, 45, 224, 85, 239, 38, 224, 194, 238, 92, 224, 92, 238, 203, 224, 38, 238, 109, 225, 23, 238, 53, 226, 38, 238, 20, 227, 76, 238, 3, 228, 133, 238, 247, 228, 204, 238, 235, 229, 31, 239, 222, 230, 126, 239, 207, 231, 234, 239, 192, 232, 99, 240, 178, 233, 235, 240, 164, 234, 131, 241, 150, 235, 42, 242, 132, 236, 226, 242, 111, 237, 177, 243, 84, 238, 153, 244, 53, 239, 155, 245, 17, 240, 195, 246, 244, 240, 37, 248, 249, 241, 217, 249, 64, 243, 247, 251, 232, 244, 133, 254, 6, 247, 130, 1, 160, 249, 225, 4, 178, 252, 133, 8, 36, 0, 77, 12, 217, 3, 16, 16, 174, 7, 168, 19, 120, 11, 238, 22, 14, 15, 196, 25, 79, 18, 17, 28, 29, 21, 190, 29, 101, 23, 196, 30, 25, 25, 35, 31, 56, 26, 231, 30, 196, 26, 33, 30, 205, 26, 234, 28, 99, 26, 95, 27, 159, 25, 159, 25, 165, 24, 195, 23, 146, 23, 235, 21, 130, 22, 44, 20, 146, 21, 149, 18, 209, 20, 50, 17, 76, 20, 5, 16, 7, 20, 11, 15, 254, 19, 63, 14, 41, 20, 143, 13, 112, 20, 228, 12, 180, 20, 43, 12, 220, 20, 86, 11, 206, 20, 91, 10, 122, 20, 63, 9, 221, 19, 7, 8, 250, 18, 196, 6, 222, 17, 136, 5, 153, 16, 105, 4, 65, 15, 122, 3, 232, 13, 197, 2, 163, 12, 84, 2, 130, 11, 38, 2, 144, 10, 50, 2, 211, 9, 111, 2, 76, 9, 203, 2, 248, 8, 57, 3, 208, 8, 165, 3, 200, 8, 0, 4, 212, 8, 63, 4, 226, 8, 90, 4, 229, 8, 75, 4, 211, 8, 18, 4, 164, 8, 178, 3, 84, 8, 47, 3, 230, 7, 147, 2, 95, 7, 232, 1, 197, 6, 52, 1, 30, 6, 122, 0, 111, 5, 184, 255, 179, 4, 224, 254, 225, 3, 234, 253, 242, 2, 206, 252, 221, 1, 135, 251, 162, 0, 22, 250, 64, 255, 124, 248, 184, 253, 190, 246, 22, 252, 227, 244, 100, 250, 245, 242, 177, 248, 3, 241, 13, 247, 27, 239, 134, 245, 79, 237, 50, 244, 177, 235, 38, 243, 79, 234, 114, 242, 57, 233, 36, 242, 117, 232, 67, 242, 10, 232, 203, 242, 249, 231, 180, 243, 61, 232, 233, 244, 209, 232, 85, 246, 176, 233, 222, 247, 210, 234, 109, 249, 52, 236, 233, 250, 206, 237, 67, 252, 159, 239, 118, 253, 167, 241, 136, 254, 227, 243, 128, 255, 72, 246, 100, 0, 199, 248, 61, 1, 77, 251, 14, 2, 193, 253, 211, 2, 8, 0, 135, 3, 11, 2, 36, 4, 184, 3, 164, 4, 255, 4, 255, 4, 215, 5, 48, 5, 61, 6, 54, 5, 56, 6, 15, 5, 210, 5, 191, 4, 28, 5, 76, 4, 40, 4, 186, 3, 12, 3, 15, 3, 220, 1, 80, 2, 173, 0, 136, 1, 144, 255, 194, 0, 145, 254, 8, 0, 185, 253, 100, 255, 16, 253, 217, 254, 149, 252, 110, 254, 68, 252, 33, 254, 21, 252, 241, 253, 251, 251, 215, 253, 233, 251, 200, 253, 200, 251, 180, 253, 131, 251, 130, 253, 4, 251, 29, 253, 64, 250, 115, 252, 54, 249, 126, 251, 233, 247, 61, 250, 105, 246, 184, 248, 207, 244, 2, 247, 58, 243, 44, 245, 202, 241, 78, 243, 155, 240, 126, 241, 195, 239, 208, 239, 79, 239, 87, 238, 66, 239, 28, 237, 153, 239, 41, 236, 67, 240, 125, 235, 47, 241, 18, 235, 70, 242, 223, 234, 112, 243, 210, 234, 150, 244, 216, 234, 164, 245, 221, 234, 136, 246, 204, 234, 54, 247, 152, 234, 168, 247, 57, 234, 221, 247, 173, 233, 215, 247, 245, 232, 155, 247, 27, 232, 46, 247, 41, 231, 152, 246, 47, 230, 225, 245, 57, 229, 19, 245, 86, 228, 58, 244, 148, 227, 96, 243, 251, 226, 143, 242, 150, 226, 208, 241, 106, 226, 44, 241, 118, 226, 164, 240, 180, 226, 55, 240, 34, 227, 229, 239, 181, 227, 170, 239, 105, 228, 133, 239, 51, 229, 116, 239, 14, 230, 122, 239, 242, 230, 148, 239, 223, 231, 197, 239, 212, 232, 13, 240, 203, 233, 110, 240, 197, 234, 231, 240, 191, 235, 119, 241, 181, 236, 29, 242, 164, 237, 215, 242, 139, 238, 163, 243, 102, 239, 130, 244, 55, 240, 117, 245, 254, 240, 131, 246, 194, 241, 188, 247, 154, 242, 55, 249, 161, 243, 11, 251, 244, 244, 70, 253, 171, 246, 231, 255, 208, 248, 233, 2, 101, 251, 58, 6, 95, 254, 190, 9, 166, 1, 85, 13, 33, 5, 221, 16, 174, 8, 49, 20, 42, 12, 47, 23, 112, 15, 185, 25, 101, 18, 184, 27, 241, 20, 31, 29, 2, 23, 234, 29, 141, 24, 28, 30, 143, 25, 195, 29, 9, 26, 242, 28, 6, 26, 193, 27, 153, 25, 74, 26, 221, 24, 167, 24, 238, 23, 242, 22, 235, 22, 66, 21, 238, 21, 170, 19, 10, 21, 55, 18, 83, 20, 247, 16, 213, 19, 233, 15, 144, 19, 10, 15, 131, 19, 77, 14, 159, 19, 161, 13, 205, 19, 240, 12, 244, 19, 43, 12, 251, 19, 72, 11, 210, 19, 68, 10, 111, 19, 33, 9, 206, 18, 239, 7, 245, 17, 188, 6, 239, 16, 155, 5, 202, 15, 157, 4, 152, 14, 206, 3, 106, 13, 55, 3, 78, 12, 217, 2, 81, 11, 179, 2, 123, 10, 190, 2, 212, 9, 238, 2, 90, 9, 57, 3, 12, 9, 141, 3, 229, 8, 222, 3, 217, 8, 35, 4, 222, 8, 80, 4, 229, 8, 93, 4, 227, 8, 72, 4, 207, 8, 17, 4, 163, 8, 185, 3, 94, 8, 68, 3, 252, 7, 185, 2, 132, 7, 30, 2, 251, 6, 118, 1, 97, 6, 191, 0, 184, 5, 245, 255, 247, 4, 14, 255, 26, 4, 3, 254, 27, 3, 210, 252, 248, 1, 120, 251, 178, 0, 245, 249, 75, 255, 76, 248, 200, 253, 130, 246, 52, 252, 159, 244, 155, 250, 178, 242, 9, 249, 202, 240, 143, 247, 246, 238, 66, 246, 73, 237, 50, 245, 208, 235, 112, 244, 152, 234, 7, 244, 173, 233, 252, 243, 18, 233, 79, 244, 205, 232, 248, 244, 217, 232, 234, 245, 49, 233, 17, 247, 208, 233, 91, 248, 173, 234, 178, 249, 196, 235, 2, 251, 15, 237, 60, 252, 143, 238, 90, 253, 73, 240, 94, 254, 58, 242, 77, 255, 95, 244, 45, 0, 177, 246, 5, 1, 31, 249, 215, 1, 147, 251, 162, 2, 250, 253, 98, 3, 55, 0, 16, 4, 55, 2, 167, 4, 231, 3, 31, 5, 57, 5, 113, 5, 35, 6, 155, 5, 164, 6, 154, 5, 189, 6, 110, 5, 122, 6, 24, 5, 230, 5, 156, 4, 18, 5, 253, 3, 17, 4, 63, 3, 244, 2, 109, 2, 209, 1, 146, 1, 181, 0, 186, 0, 176, 255, 244, 255, 202, 254, 68, 255, 10, 254, 180, 254, 117, 253, 70, 254, 7, 253, 253, 253, 189, 252, 209, 253, 139, 252, 191, 253, 99, 252, 183, 253, 47, 252, 165, 253, 217, 251, 115, 253, 82, 251, 15, 253, 143, 250, 108, 252, 144, 249, 130, 251, 97, 248, 85, 250, 18, 247, 236, 248, 187, 245, 87, 247, 120, 244, 165, 245, 96, 243, 236, 243, 133, 242, 63, 242, 245, 241, 176, 240, 182, 241, 76, 239, 197, 241, 33, 238, 30, 242, 50, 237, 180, 242, 127, 236, 117, 243, 3, 236, 82, 244, 178, 235, 55, 245, 129, 235, 20, 246, 95, 235, 218, 246, 60, 235, 124, 247, 12, 235, 244, 247, 196, 234, 61, 248, 94, 234, 87, 248, 216, 233, 67, 248, 53, 233, 6, 248, 125, 232, 164, 247, 181, 231, 34, 247, 234, 230, 137, 246, 38, 230, 221, 245, 120, 229, 40, 245, 229, 228, 113, 244, 116, 228, 190, 243, 47, 228, 21, 243, 21, 228, 121, 242, 40, 228, 234, 241, 101, 228, 106, 241, 203, 228, 249, 240, 82, 229, 154, 240, 246, 229, 79, 240, 177, 230, 27, 240, 128, 231, 2, 240, 98, 232, 3, 240, 81, 233, 36, 240, 74, 234, 100, 240, 77, 235, 198, 240, 79, 236, 68, 241, 76, 237, 221, 241, 66, 238, 142, 242, 42, 239, 85, 243, 4, 240, 44, 244, 207, 240, 21, 245, 140, 241, 18, 246, 63, 242, 42, 247, 246, 242, 117, 248, 203, 243, 8, 250, 217, 244, 242, 251, 54, 246, 60, 254, 244, 247, 228, 0, 26, 250, 226, 3, 164, 252, 36, 7, 134, 255, 141, 10, 169, 2, 255, 13, 247, 5, 88, 17, 79, 9, 116, 20, 146, 12, 54, 23, 162, 15, 133, 25, 102, 18, 78, 27, 201, 20, 136, 28, 185, 22, 51, 29, 42, 24, 82, 29, 25, 25, 246, 28, 136, 25, 46, 28, 130, 25, 17, 27, 26, 25, 179, 25, 103, 24, 47, 24, 134, 23, 156, 22, 148, 22, 15, 21, 167, 21, 152, 19, 212, 20, 68, 18, 41, 20, 27, 17, 175, 19, 32, 16, 105, 19, 74, 15, 80, 19, 138, 14, 83, 19, 207, 13, 93, 19, 11, 13, 92, 19, 48, 12, 62, 19, 57, 11, 245, 18, 41, 10, 124, 18, 7, 9, 211, 17, 226, 7, 1, 17, 198, 6, 14, 16, 192, 5, 4, 15, 223, 4, 245, 13, 40, 4, 235, 12, 162, 3, 245, 11, 77, 3, 28, 11, 37, 3, 101, 10, 37, 3, 214, 9, 66, 3, 110, 9, 117, 3, 43, 9, 176, 3, 8, 9, 235, 3, 252, 8, 27, 4, 251, 8, 57, 4, 253, 8, 63, 4, 246, 8, 42, 4, 224, 8, 249, 3, 180, 8, 173, 3, 112, 8, 73, 3, 22, 8, 208, 2, 169, 7, 70, 2, 42, 7, 168, 1, 151, 6, 244, 0, 238, 5, 34, 0, 40, 5, 47, 255, 66, 4, 20, 254, 57, 3, 207, 252, 14, 2, 94, 251, 194, 0, 195, 249, 92, 255, 3, 248, 225, 253, 41, 246, 93, 252, 62, 244, 219, 250, 83, 242, 108, 249, 119, 240, 34, 248, 186, 238, 13, 247, 42, 237, 60, 246, 211, 235, 183, 245, 194, 234, 133, 245, 251, 233, 166, 245, 131, 233, 20, 246, 89, 233, 196, 246, 121, 233, 171, 247, 223, 233, 183, 248, 131, 234, 216, 249, 91, 235, 253, 250, 100, 236, 22, 252, 156, 237, 28, 253, 9, 239, 16, 254, 174, 240, 246, 254, 140, 242, 209, 255, 159, 244, 166, 0, 221, 246, 122, 1, 55, 249, 75, 2, 154, 251, 21, 3, 242, 253, 212, 3, 39, 0, 129, 4, 38, 2, 21, 5, 221, 3, 136, 5, 63, 5, 214, 5, 64, 6, 252, 5, 224, 6, 244, 5, 30, 7, 193, 5, 2, 7, 96, 5, 149, 6, 211, 4, 230, 5, 32, 4, 5, 5, 80, 3, 3, 4, 108, 2, 239, 2, 129, 1, 219, 1, 159, 0, 210, 0, 209, 255, 225, 255, 30, 255, 14, 255, 141, 254, 95, 254, 34, 254, 212, 253, 219, 253, 106, 253, 180, 253, 24, 253, 163, 253, 205, 252, 151, 253, 116, 252, 125, 253, 255, 251, 63, 253, 96, 251, 209, 252, 148, 250, 39, 252, 161, 249, 63, 251, 147, 248, 30, 250, 124, 247, 202, 248, 110, 246, 81, 247, 123, 245, 193, 245, 177, 244, 46, 244, 28, 244, 166, 242, 194, 243, 56, 241, 166, 243, 241, 239, 196, 243, 215, 238, 21, 244, 238, 237, 145, 244, 51, 237, 40, 245, 163, 236, 208, 245, 54, 236, 123, 246, 226, 235, 28, 247, 155, 235, 170, 247, 86, 235, 28, 248, 10, 235, 107, 248, 175, 234, 151, 248, 65, 234, 159, 248, 192, 233, 131, 248, 46, 233, 74, 248, 145, 232, 244, 247, 240, 231, 134, 247, 78, 231, 6, 247, 182, 230, 117, 246, 49, 230, 220, 245, 196, 229, 62, 245, 117, 229, 156, 244, 73, 229, 250, 243, 65, 229, 89, 243, 95, 229, 188, 242, 160, 229, 39, 242, 4, 230, 159, 241, 133, 230, 39, 241, 35, 231, 198, 240, 220, 231, 129, 240, 176, 232, 91, 240, 152, 233, 85, 240, 141, 234, 115, 240, 141, 235, 180, 240, 143, 236, 22, 241, 142, 237, 152, 241, 135, 238, 55, 242, 114, 239, 238, 242, 77, 240, 185, 243, 24, 241, 149, 244, 211, 241, 130, 245, 127, 242, 134, 246, 41, 243, 178, 247, 231, 243, 26, 249, 207, 244, 207, 250, 247, 245, 220, 252, 115, 247, 68, 255, 77, 249, 2, 2, 133, 251, 10, 5, 21, 254, 69, 8, 236, 0, 153, 11, 249, 3, 231, 14, 32, 7, 12, 18, 71, 10, 237, 20, 83, 13, 113, 23, 42, 16, 131, 25, 180, 18, 22, 27, 222, 20, 38, 28, 154, 22, 176, 28, 221, 23, 189, 28, 164, 24, 90, 28, 247, 24, 154, 27, 226, 24, 143, 26, 123, 24, 77, 25, 216, 23, 235, 23, 16, 23, 122, 22, 61, 22, 13, 21, 112, 21, 180, 19, 187, 20, 120, 18, 41, 20, 98, 17, 193, 19, 111, 16, 130, 19, 152, 15, 98, 19, 207, 14, 83, 19, 2, 14, 65, 19, 42, 13, 30, 19, 62, 12, 222, 18, 63, 11, 120, 18, 49, 10, 234, 17, 28, 9, 54, 17, 10, 8, 97, 16, 4, 7, 116, 15, 21, 6, 122, 14, 68, 5, 127, 13, 152, 4, 142, 12, 19, 4, 175, 11, 183, 3, 236, 10, 128, 3, 75, 10, 105, 3, 204, 9, 110, 3, 113, 9, 133, 3, 57, 9, 167, 3, 28, 9, 203, 3, 18, 9, 234, 3, 17, 9, 253, 3, 17, 9, 1, 4, 10, 9, 240, 3, 244, 8, 201, 3, 204, 8, 140, 3, 145, 8, 59, 3, 64, 8, 214, 2, 220, 7, 90, 2, 99, 7, 196, 1, 209, 6, 14, 1, 35, 6, 50, 0, 82, 5, 46, 255, 95, 4, 249, 253, 71, 3, 148, 252, 14, 2, 1, 251, 186, 0, 71, 249, 82, 255, 110, 247, 220, 253, 130, 245, 102, 252, 147, 243, 4, 251, 174, 241, 194, 249, 227, 239, 175, 248, 62, 238, 215, 247, 207, 236, 67, 247, 158, 235, 247, 246, 179, 234, 241, 246, 17, 234, 49, 247, 185, 233, 174, 247, 171, 233, 93, 248, 223, 233, 49, 249, 83, 234, 30, 250, 252, 234, 20, 251, 211, 235, 6, 252, 216, 236, 239, 252, 11, 238, 204, 253, 115, 239, 160, 254, 18, 241, 112, 255, 233, 242, 61, 0, 242, 244, 13, 1, 35, 247, 223, 1, 110, 249, 175, 2, 193, 251, 121, 3, 9, 254, 55, 4, 50, 0, 226, 4, 40, 2, 114, 5, 221, 3, 226, 5, 69, 5, 44, 6, 84, 6, 74, 6, 8, 7, 57, 6, 96, 7, 248, 5, 99, 7, 134, 5, 23, 7, 232, 4, 138, 6, 37, 4, 200, 5, 71, 3, 225, 4, 90, 2, 226, 3, 108, 1, 219, 2, 137, 0, 215, 1, 188, 255, 226, 0, 13, 255, 5, 0, 128, 254, 70, 255, 24, 254, 164, 254, 212, 253, 32, 254, 173, 253, 174, 253, 151, 253, 64, 253, 127, 253, 199, 252, 85, 253, 56, 252, 9, 253, 143, 251, 142, 252, 206, 250, 224, 251, 249, 249, 251, 250, 28, 249, 227, 249, 64, 248, 160, 248, 114, 247, 62, 247, 188, 246, 203, 245, 39, 246, 83, 244, 185, 245, 231, 242, 120, 245, 145, 241, 96, 245, 89, 240, 113, 245, 68, 239, 166, 245, 84, 238, 248, 245, 139, 237, 93, 246, 228, 236, 205, 246, 91, 236, 65, 247, 232, 235, 173, 247, 133, 235, 13, 248, 40, 235, 89, 248, 202, 234, 142, 248, 105, 234, 169, 248, 0, 234, 170, 248, 141, 233, 146, 248, 18, 233, 98, 248, 147, 232, 30, 248, 18, 232, 198, 247, 151, 231, 93, 247, 37, 231, 231, 246, 195, 230, 99, 246, 120, 230, 210, 245, 70, 230, 55, 245, 48, 230, 148, 244, 57, 230, 236, 243, 95, 230, 71, 243, 166, 230, 167, 242, 15, 231, 22, 242, 150, 231, 149, 241, 59, 232, 45, 241, 251, 232, 226, 240, 210, 233, 184, 240, 187, 234, 176, 240, 176, 235, 205, 240, 171, 236, 13, 241, 166, 237, 112, 241, 156, 238, 242, 241, 134, 239, 143, 242, 98, 240, 68, 243, 45, 241, 13, 244, 231, 241, 232, 244, 145, 242, 214, 245, 51, 243, 228, 246, 224, 243, 36, 248, 169, 244, 164, 249, 167, 245, 117, 251, 234, 246, 154, 253, 127, 248, 19, 0, 108, 250, 216, 2, 173, 252, 218, 5, 56, 255, 0, 9, 0, 2, 49, 12, 240, 4, 80, 15, 243, 7, 65, 18, 237, 10, 237, 20, 201, 13, 63, 23, 110, 16, 39, 25, 199, 18, 156, 26, 194, 20, 152, 27, 83, 22, 31, 28, 118, 23, 54, 28, 41, 24, 232, 27, 117, 24, 70, 27, 102, 24, 94, 26, 15, 24, 67, 25, 132, 23, 6, 24, 221, 22, 187, 22, 42, 22, 108, 21, 124, 21, 43, 20, 226, 20, 0, 19, 100, 20, 241, 17, 6, 20, 251, 16, 195, 19, 20, 16, 145, 19, 51, 15, 100, 19, 78, 14, 47, 19, 97, 13, 231, 18, 102, 12, 132, 18, 99, 11, 1, 18, 87, 10, 93, 17, 74, 9, 156, 16, 69, 8, 198, 15, 74, 7, 223, 14, 101, 6, 243, 13, 153, 5, 12, 13, 237, 4, 48, 12, 98, 4, 106, 11, 248, 3, 193, 10, 175, 3, 53, 10, 130, 3, 201, 9, 111, 3, 125, 9, 110, 3, 78, 9, 123, 3, 54, 9, 142, 3, 47, 9, 161, 3, 46, 9, 175, 3, 46, 9, 178, 3, 39, 9, 167, 3, 17, 9, 141, 3, 237, 8, 97, 3, 182, 8, 34, 3, 108, 8, 206, 2, 15, 8, 95, 2, 152, 7, 208, 1, 7, 7, 24, 1, 83, 6, 51, 0, 124, 5, 30, 255, 131, 4, 210, 253, 101, 3, 83, 252, 42, 2, 169, 250, 214, 0, 219, 248, 117, 255, 246, 246, 17, 254, 5, 245, 186, 252, 25, 243, 126, 251, 62, 241, 105, 250, 131, 239, 134, 249, 244, 237, 220, 248, 156, 236, 111, 248, 132, 235, 65, 248, 175, 234, 77, 248, 33, 234, 145, 248, 217, 233, 5, 249, 213, 233, 161, 249, 17, 234, 86, 250, 131, 234, 27, 251, 42, 235, 229, 251, 252, 235, 173, 252, 251, 236, 111, 253, 42, 238, 46, 254, 141, 239, 237, 254, 40, 241, 176, 255, 247, 242, 120, 0, 246, 244, 70, 1, 29, 247, 24, 2, 90, 249, 234, 2, 161, 251, 183, 3, 223, 253, 119, 4, 0, 0, 36, 5, 244, 1, 180, 5, 176, 3, 35, 6, 35, 5, 104, 6, 71, 6, 126, 6, 20, 7, 98, 6, 142, 7, 19, 6, 181, 7, 148, 5, 144, 7, 236, 4, 42, 7, 31, 4, 139, 6, 60, 3, 195, 5, 77, 2, 220, 4, 96, 1, 230, 3, 128, 0, 234, 2, 184, 255, 245, 1, 13, 255, 15, 1, 131, 254, 62, 0, 28, 254, 134, 255, 212, 253, 226, 254, 164, 253, 74, 254, 124, 253, 179, 253, 78, 253, 24, 253, 9, 253, 115, 252, 165, 252, 196, 251, 23, 252, 13, 251, 90, 251, 81, 250, 113, 250, 151, 249, 95, 249, 230, 248, 44, 248, 67, 248, 224, 246, 181, 247, 137, 245, 66, 247, 50, 244, 236, 246, 226, 242, 181, 246, 163, 241, 155, 246, 124, 240, 160, 246, 113, 239, 190, 246, 131, 238, 240, 246, 178, 237, 48, 247, 255, 236, 122, 247, 102, 236, 198, 247, 226, 235, 15, 248, 110, 235, 78, 248, 1, 235, 129, 248, 152, 234, 164, 248, 48, 234, 180, 248, 198, 233, 177, 248, 91, 233, 155, 248, 238, 232, 115, 248, 129, 232, 59, 248, 25, 232, 243, 247, 183, 231, 155, 247, 98, 231, 48, 247, 29, 231, 180, 246, 236, 230, 40, 246, 209, 230, 143, 245, 208, 230, 237, 244, 235, 230, 68, 244, 34, 231, 158, 243, 118, 231, 253, 242, 234, 231, 107, 242, 122, 232, 236, 241, 39, 233, 134, 241, 235, 233, 61, 241, 196, 234, 20, 241, 171, 235, 14, 241, 155, 236, 43, 241, 142, 237, 105, 241, 124, 238, 200, 241, 99, 239, 68, 242, 61, 240, 218, 242, 9, 241, 136, 243, 196, 241, 74, 244, 112, 242, 31, 245, 18, 243, 16, 246, 181, 243, 43, 247, 110, 244, 127, 248, 79, 245, 24, 250, 105, 246, 255, 251, 202, 247, 56, 254, 122, 249, 188, 0, 121, 251, 127, 3, 193, 253, 114, 6, 73, 0, 126, 9, 1, 3, 138, 12, 216, 5, 129, 15, 183, 8, 74, 18, 136, 11, 207, 20, 53, 14, 1, 23, 167, 16, 209, 24, 204, 18, 57, 26, 153, 20, 51, 27, 3, 22, 195, 27, 8, 23, 237, 27, 171, 23, 187, 27, 243, 23, 58, 27, 238, 23, 118, 26, 173, 23, 128, 25, 64, 23, 103, 24, 185, 22, 57, 23, 40, 22, 2, 22, 152, 21, 208, 20, 24, 21, 173, 19, 172, 20, 153, 18, 84, 20, 148, 17, 11, 20, 150, 16, 198, 19, 153, 15, 125, 19, 155, 14, 38, 19, 152, 13, 185, 18, 143, 12, 52, 18, 128, 11, 149, 17, 113, 10, 220, 16, 101, 9, 16, 16, 97, 8, 53, 15, 106, 7, 83, 14, 135, 6, 114, 13, 189, 5, 155, 12, 12, 5, 213, 11, 122, 4, 36, 11, 6, 4, 141, 10, 175, 3, 20, 10, 116, 3, 184, 9, 80, 3, 122, 9, 64, 3, 85, 9, 63, 3, 67, 9, 72, 3, 63, 9, 84, 3, 63, 9, 95, 3, 64, 9, 100, 3, 55, 9, 96, 3, 37, 9, 81, 3, 3, 9, 50, 3, 209, 8, 0, 3, 141, 8, 181, 2, 49, 8, 72, 2, 185, 7, 177, 1, 33, 7, 235, 0, 102, 6, 241, 255, 134, 5, 191, 254, 131, 4, 88, 253, 95, 3, 195, 251, 34, 2, 7, 250, 215, 0, 47, 248, 136, 255, 72, 246, 66, 254, 93, 244, 17, 253, 127, 242, 0, 252, 186, 240, 23, 251, 24, 239, 94, 250, 166, 237, 216, 249, 108, 236, 136, 249, 110, 235, 108, 249, 178, 234, 129, 249, 57, 234, 193, 249, 1, 234, 39, 250, 7, 234, 169, 250, 72, 234, 62, 251, 188, 234, 222, 251, 96, 235, 130, 252, 48, 236, 39, 253, 47, 237, 207, 253, 96, 238, 126, 254, 197, 239, 51, 255, 96, 241, 243, 255, 45, 243, 186, 0, 37, 245, 141, 1, 64, 247, 100, 2, 112, 249, 57, 3, 168, 251, 7, 4, 213, 253, 200, 4, 233, 255, 112, 5, 211, 1, 249, 5, 137, 3, 92, 6, 254, 4, 146, 6, 43, 6, 151, 6, 10, 7, 104, 6, 153, 7, 9, 6, 220, 7, 126, 5, 215, 7, 203, 4, 147, 7, 252, 3, 22, 7, 27, 3, 109, 6, 51, 2, 164, 5, 80, 1, 196, 4, 123, 0, 217, 3, 191, 255, 237, 2, 29, 255, 8, 2, 155, 254, 51, 1, 55, 254, 107, 0, 236, 253, 179, 255, 176, 253, 3, 255, 117, 253, 88, 254, 48, 253, 176, 253, 212, 252, 9, 253, 89, 252, 96, 252, 187, 251, 185, 251, 245, 250, 18, 251, 10, 250, 112, 250, 255, 248, 215, 249, 217, 247, 73, 249, 161, 246, 203, 248, 97, 245, 95, 248, 30, 244, 9, 248, 226, 242, 201, 247, 178, 241, 159, 247, 148, 240, 140, 247, 140, 239, 140, 247, 156, 238, 157, 247, 200, 237, 187, 247, 12, 237, 225, 247, 105, 236, 13, 248, 218, 235, 58, 248, 89, 235, 98, 248, 229, 234, 132, 248, 121, 234, 156, 248, 18, 234, 169, 248, 175, 233, 168, 248, 78, 233, 153, 248, 242, 232, 125, 248, 154, 232, 81, 248, 73, 232, 18, 248, 1, 232, 193, 247, 200, 231, 92, 247, 158, 231, 228, 246, 132, 231, 91, 246, 126, 231, 197, 245, 142, 231, 37, 245, 185, 231, 131, 244, 254, 231, 227, 243, 97, 232, 74, 243, 224, 232, 193, 242, 121, 233, 75, 242, 43, 234, 238, 241, 240, 234, 172, 241, 197, 235, 136, 241, 164, 236, 132, 241, 135, 237, 162, 241, 106, 238, 223, 241, 73, 239, 57, 242, 29, 240, 173, 242, 228, 240, 58, 243, 156, 241, 221, 243, 71, 242, 149, 244, 231, 242, 104, 245, 134, 243, 98, 246, 53, 244, 142, 247, 5, 245, 249, 248, 3, 246, 171, 250, 64, 247, 168, 252, 193, 248, 237, 254, 139, 250, 111, 1, 155, 252, 40, 4, 234, 254, 3, 7, 109, 1, 236, 9, 20, 4, 209, 12, 206, 6, 156, 15, 133, 9, 57, 18, 37, 12, 151, 20, 154, 14, 168, 22, 211, 16, 98, 24, 195, 18, 189, 25, 94, 20, 181, 26, 162, 21, 77, 27, 139, 22, 139, 27, 31, 23, 117, 27, 102, 23, 19, 27, 109, 23, 114, 26, 63, 23, 159, 25, 237, 22, 167, 24, 132, 22, 152, 23, 18, 22, 126, 22, 164, 21, 98, 21, 62, 21, 74, 20, 228, 20, 58, 19, 146, 20, 46, 18, 68, 20, 40, 17, 241, 19, 34, 16, 147, 19, 25, 15, 35, 19, 13, 14, 159, 18, 252, 12, 3, 18, 232, 11, 79, 17, 211, 10, 138, 16, 194, 9, 180, 15, 182, 8, 214, 14, 183, 7, 246, 13, 201, 6, 26, 13, 240, 5, 75, 12, 47, 5, 142, 11, 137, 4, 231, 10, 0, 4, 92, 10, 148, 3, 235, 9, 66, 3, 151, 9, 10, 3, 96, 9, 233, 2, 61, 9, 216, 2, 45, 9, 213, 2, 41, 9, 220, 2, 43, 9, 230, 2, 45, 9, 240, 2, 40, 9, 244, 2, 26, 9, 240, 2, 0, 9, 222, 2, 213, 8, 182, 2, 150, 8, 111, 2, 61, 8, 0, 2, 196, 7, 96, 1, 41, 7, 140, 0, 106, 6, 132, 255, 136, 5, 68, 254, 133, 4, 211, 252, 103, 3, 57, 251, 59, 2, 126, 249, 7, 1, 173, 247, 218, 255, 210, 245, 186, 254, 251, 243, 178, 253, 51, 242, 201, 252, 134, 240, 5, 252, 254, 238, 106, 251, 164, 237, 252, 250, 128, 236, 184, 250, 150, 235, 158, 250, 233, 234, 172, 250, 121, 234, 219, 250, 69, 234, 39, 251, 75, 234, 136, 251, 135, 234, 248, 251, 244, 234, 113, 252, 146, 235, 241, 252, 94, 236, 121, 253, 92, 237, 11, 254, 141, 238, 170, 254, 243, 239, 87, 255, 139, 241, 18, 0, 83, 243, 218, 0, 66, 245, 172, 1, 82, 247, 132, 2, 115, 249, 90, 3, 154, 251, 39, 4, 185, 253, 227, 4, 192, 255, 133, 5, 160, 1, 5, 6, 81, 3, 91, 6, 201, 4, 132, 6, 253, 5, 126, 6, 235, 6, 71, 6, 143, 7, 227, 5, 237, 7, 86, 5, 7, 8, 168, 4, 228, 7, 226, 3, 137, 7, 12, 3, 0, 7, 51, 2, 84, 6, 95, 1, 142, 5, 151, 0, 182, 4, 230, 255, 217, 3, 78, 255, 252, 2, 207, 254, 39, 2, 105, 254, 92, 1, 20, 254, 156, 0, 197, 253, 234, 255, 115, 253, 63, 255, 21, 253, 154, 254, 160, 252, 247, 253, 15, 252, 86, 253, 95, 251, 183, 252, 142, 250, 25, 252, 161, 249, 127, 251, 153, 248, 235, 250, 125, 247, 92, 250, 82, 246, 217, 249, 30, 245, 99, 249, 231, 243, 252, 248, 182, 242, 165, 248, 142, 241, 96, 248, 117, 240, 45, 248, 112, 239, 11, 248, 128, 238, 250, 247, 169, 237, 246, 247, 234, 236, 254, 247, 65, 236, 15, 248, 173, 235, 35, 248, 41, 235, 59, 248, 179, 234, 81, 248, 72, 234, 100, 248, 230, 233, 112, 248, 139, 233, 116, 248, 55, 233, 110, 248, 236, 232, 89, 248, 169, 232, 52, 248, 110, 232, 253, 247, 62, 232, 178, 247, 23, 232, 84, 247, 0, 232, 229, 246, 250, 231, 101, 246, 6, 232, 218, 245, 42, 232, 73, 245, 103, 232, 182, 244, 190, 232, 38, 244, 46, 233, 158, 243, 183, 233, 35, 243, 87, 234, 186, 242, 10, 235, 104, 242, 206, 235, 47, 242, 157, 236, 17, 242, 112, 237, 15, 242, 69, 238, 41, 242, 23, 239, 94, 242, 225, 239, 173, 242, 163, 240, 21, 243, 87, 241, 147, 243, 0, 242, 39, 244, 158, 242, 214, 244, 58, 243, 170, 245, 224, 243, 169, 246, 159, 244, 225, 247, 133, 245, 88, 249, 159, 246, 19, 251, 246, 247, 18, 253, 142, 249, 80, 255, 105, 251, 196, 1, 129, 253, 101, 4, 208, 255, 34, 7, 69, 2, 234, 9, 215, 4, 170, 12, 111, 7, 83, 15, 253, 9, 210, 17, 111, 12, 24, 20, 181, 14, 27, 22, 192, 16, 207, 23, 136, 18, 47, 25, 3, 20, 54, 26, 48, 21, 231, 26, 14, 22, 68, 27, 162, 22, 82, 27, 243, 22, 26, 27, 13, 23, 165, 26, 251, 22, 253, 25, 200, 22, 44, 25, 129, 22, 65, 24, 49, 22, 66, 23, 221, 21, 59, 22, 140, 21, 47, 21, 60, 21, 33, 20, 235, 20, 18, 19, 147, 20, 2, 18, 47, 20, 239, 16, 187, 19, 212, 15, 50, 19, 179, 14, 147, 18, 143, 13, 224, 17, 104, 12, 26, 17, 64, 11, 70, 16, 27, 10, 105, 15, 253, 8, 136, 14, 237, 7, 169, 13, 237, 6, 212, 12, 0, 6, 12, 12, 46, 5, 88, 11, 117, 4, 187, 10, 218, 3, 57, 10, 92, 3, 210, 9, 250, 2, 133, 9, 179, 2, 83, 9, 132, 2, 54, 9, 106, 2, 39, 9, 97, 2, 36, 9, 101, 2, 38, 9, 110, 2, 40, 9, 124, 2, 38, 9, 135, 2, 27, 9, 138, 2, 4, 9, 126, 2, 221, 8, 86, 2, 160, 8, 10, 2, 70, 8, 146, 1, 205, 7, 234, 0, 51, 7, 13, 0, 118, 6, 254, 254, 154, 5, 189, 253, 164, 4, 78, 252, 157, 3, 186, 250, 140, 2, 12, 249, 122, 1, 76, 247, 111, 0, 134, 245, 117, 255, 197, 243, 143, 254, 19, 242, 195, 253, 125, 240, 23, 253, 10, 239, 140, 252, 194, 237, 35, 252, 171, 236, 220, 251, 200, 235, 183, 251, 30, 235, 178, 251, 173, 234, 198, 251, 114, 234, 241, 251, 110, 234, 47, 252, 157, 234, 121, 252, 252, 234, 207, 252, 143, 235, 48, 253, 83, 236, 161, 253, 76, 237, 34, 254, 121, 238, 181, 254, 217, 239, 91, 255, 108, 241, 18, 0, 43, 243, 216, 0, 18, 245, 170, 1, 21, 247, 131, 2, 43, 249, 87, 3, 70, 251, 33, 4, 90, 253, 215, 4, 90, 255, 112, 5, 55, 1, 230, 5, 236, 2, 53, 6, 108, 4, 87, 6, 175, 5, 76, 6, 179, 6, 22, 6, 115, 7, 181, 5, 241, 7, 48, 5, 46, 8, 142, 4, 47, 8, 214, 3, 249, 7, 17, 3, 149, 7, 73, 2, 10, 7, 133, 1, 96, 6, 205, 0, 162, 5, 37, 0, 215, 4, 147, 255, 10, 4, 20, 255, 63, 3, 163, 254, 122, 2, 60, 254, 189, 1, 214, 253, 8, 1, 103, 253, 88, 0, 232, 252, 175, 255, 86, 252, 7, 255, 171, 251, 93, 254, 231, 250, 181, 253, 10, 250, 14, 253, 20, 249, 103, 252, 10, 248, 198, 251, 241, 246, 42, 251, 203, 245, 149, 250, 160, 244, 12, 250, 114, 243, 144, 249, 75, 242, 35, 249, 46, 241, 199, 248, 30, 240, 123, 248, 33, 239, 65, 248, 57, 238, 24, 248, 104, 237, 254, 247, 173, 236, 241, 247, 7, 236, 239, 247, 118, 235, 247, 247, 243, 234, 4, 248, 129, 234, 21, 248, 28, 234, 38, 248, 195, 233, 49, 248, 114, 233, 52, 248, 42, 233, 45, 248, 235, 232, 24, 248, 179, 232, 242, 247, 133, 232, 188, 247, 98, 232, 118, 247, 76, 232, 31, 247, 68, 232, 187, 246, 79, 232, 74, 246, 112, 232, 209, 245, 165, 232, 84, 245, 243, 232, 214, 244, 89, 233, 92, 244, 214, 233, 235, 243, 106, 234, 133, 243, 14, 235, 47, 243, 192, 235, 235, 242, 126, 236, 188, 242, 65, 237, 162, 242, 7, 238, 160, 242, 204, 238, 181, 242, 140, 239, 226, 242, 70, 240, 37, 243, 245, 240, 126, 243, 154, 241, 235, 243, 55, 242, 114, 244, 207, 242, 25, 245, 111, 243, 233, 245, 32, 244, 234, 246, 241, 244, 35, 248, 238, 245, 155, 249, 33, 247, 82, 251, 143, 248, 71, 253, 58, 250, 118, 255, 33, 252, 213, 1, 61, 254, 91, 4, 131, 0, 251, 6, 231, 2, 163, 9, 94, 5, 72, 12, 210, 7, 215, 14, 57, 10, 66, 17, 129, 12, 125, 19, 158, 14, 122, 21, 134, 16, 53, 23, 49, 18, 163, 24, 151, 19, 195, 25, 185, 20, 147, 26, 149, 21, 21, 27, 49, 22, 77, 27, 148, 22, 66, 27, 198, 22, 249, 26, 210, 22, 124, 26, 192, 22, 213, 25, 154, 22, 13, 25, 102, 22, 46, 24, 43, 22, 61, 23, 233, 21, 62, 22, 159, 21, 50, 21, 72, 21, 28, 20, 224, 20, 255, 18, 105, 20, 215, 17, 221, 19, 166, 16, 61, 19, 110, 15, 137, 18, 47, 14, 194, 17, 237, 12, 238, 16, 170, 11, 15, 16, 108, 10, 42, 15, 54, 9, 71, 14, 14, 8, 106, 13, 248, 6, 151, 12, 248, 5, 215, 11, 19, 5, 43, 11, 73, 4, 151, 10, 157, 3, 30, 10, 17, 3, 190, 9, 162, 2, 120, 9, 79, 2, 72, 9, 23, 2, 45, 9, 245, 1, 31, 9, 232, 1, 27, 9, 232, 1, 28, 9, 242, 1, 30, 9, 1, 2, 28, 9, 13, 2, 19, 9, 14, 2, 254, 8, 250, 1, 216, 8, 201, 1, 153, 8, 114, 1, 63, 8, 241, 0, 199, 7, 65, 0, 48, 7, 97, 255, 124, 6, 81, 254, 175, 5, 20, 253, 208, 4, 178, 251, 230, 3, 48, 250, 245, 2, 150, 248, 5, 2, 239, 246, 28, 1, 69, 245, 64, 0, 159, 243, 118, 255, 9, 242, 192, 254, 141, 240, 33, 254, 47, 239, 157, 253, 248, 237, 51, 253, 237, 236, 228, 252, 18, 236, 175, 252, 104, 235, 146, 252, 242, 234, 140, 252, 175, 234, 152, 252, 158, 234, 179, 252, 191, 234, 221, 252, 18, 235, 22, 253, 154, 235, 96, 253, 86, 236, 192, 253, 72, 237, 53, 254, 110, 238, 191, 254, 199, 239, 97, 255, 81, 241, 21, 0, 6, 243, 218, 0, 224, 244, 170, 1, 212, 246, 125, 2, 219, 248, 74, 3, 232, 250, 10, 4, 239, 252, 180, 4, 229, 254, 66, 5, 188, 0, 174, 5, 112, 2, 243, 5, 245, 3, 17, 6, 69, 5, 5, 6, 91, 6, 210, 5, 51, 7, 121, 5, 206, 7, 1, 5, 46, 8, 111, 4, 82, 8, 202, 3, 66, 8, 26, 3, 3, 8, 102, 2, 156, 7, 181, 1, 21, 7, 12, 1, 122, 6, 113, 0, 209, 5, 230, 255, 35, 5, 100, 255, 113, 4, 233, 254, 191, 3, 112, 254, 15, 3, 241, 253, 96, 2, 105, 253, 175, 1, 209, 252, 254, 0, 36, 252, 75, 0, 99, 251, 149, 255, 140, 250, 221, 254, 160, 249, 33, 254, 160, 248, 101, 253, 142, 247, 171, 252, 112, 246, 245, 251, 75, 245, 70, 251, 31, 244, 161, 250, 247, 242, 10, 250, 213, 241, 129, 249, 189, 240, 10, 249, 181, 239, 164, 248, 192, 238, 80, 248, 224, 237, 16, 248, 22, 237, 225, 247, 97, 236, 195, 247, 195, 235, 180, 247, 56, 235, 176, 247, 190, 234, 181, 247, 84, 234, 189, 247, 246, 233, 199, 247, 164, 233, 204, 247, 93, 233, 201, 247, 32, 233, 189, 247, 235, 232, 166, 247, 192, 232, 130, 247, 159, 232, 80, 247, 139, 232, 18, 247, 133, 232, 202, 246, 144, 232, 119, 246, 174, 232, 27, 246, 226, 232, 186, 245, 43, 233, 87, 245, 137, 233, 243, 244, 250, 233, 148, 244, 126, 234, 59, 244, 18, 235, 235, 243, 180, 235, 166, 243, 95, 236, 113, 243, 17, 237, 74, 243, 198, 237, 54, 243, 124, 238, 52, 243, 47, 239, 69, 243, 222, 239, 105, 243, 133, 240, 159, 243, 37, 241, 233, 243, 189, 241, 74, 244, 81, 242, 198, 244, 233, 242, 103, 245, 146, 243, 54, 246, 86, 244, 53, 247, 63, 245, 110, 248, 87, 246, 224, 249, 163, 247, 143, 251, 40, 249, 119, 253, 228, 250, 147, 255, 212, 252, 218, 1, 238, 254, 70, 4, 39, 1, 201, 6, 118, 3, 86, 9, 206, 5, 222, 11, 33, 8, 85, 14, 97, 10, 174, 16, 132, 12, 221, 18, 126, 14, 216, 20, 72, 16, 150, 22, 218, 17, 17, 24, 49, 19, 71, 25, 74, 20, 51, 26, 40, 21, 216, 26, 205, 21, 55, 27, 66, 22, 86, 27, 140, 22, 57, 27, 178, 22, 232, 26, 189, 22, 109, 26, 178, 22, 205, 25, 150, 22, 15, 25, 108, 22, 58, 24, 53, 22, 78, 23, 238, 21, 79, 22, 148, 21, 63, 21, 39, 21, 27, 20, 164, 20, 234, 18, 12, 20, 169, 17, 95, 19, 92, 16, 157, 18, 7, 15, 204, 17, 171, 13, 238, 16, 78, 12, 7, 16, 245, 10, 31, 15, 164, 9, 58, 14, 96, 8, 93, 13, 48, 7, 140, 12, 22, 6, 204, 11, 23, 5, 34, 11, 53, 4, 143, 10, 114, 3, 22, 10, 208, 2, 181, 9, 76, 2, 109, 9, 232, 1, 59, 9, 161, 1, 26, 9, 115, 1, 7, 9, 90, 1, 0, 9, 82, 1, 254, 8, 85, 1, 254, 8, 91, 1, 252, 8, 95, 1, 244, 8, 86, 1, 222, 8, 54, 1, 182, 8, 252, 0, 119, 8, 156, 0, 30, 8, 22, 0, 173, 7, 103, 255, 34, 7, 139, 254, 128, 6, 133, 253, 205, 5, 90, 252, 11, 5, 14, 251, 64, 4, 166, 249, 113, 3, 44, 248, 162, 2, 165, 246, 215, 1, 28, 245, 20, 1, 152, 243, 94, 0, 32, 242, 184, 255, 190, 240, 34, 255, 119, 239, 159, 254, 82, 238, 47, 254, 84, 237, 212, 253, 127, 236, 141, 253, 213, 235, 89, 253, 90, 235, 56, 253, 14, 235, 39, 253, 240, 234, 36, 253, 4, 235, 51, 253, 75, 235, 85, 253, 200, 235, 142, 253, 122, 236, 221, 253, 98, 237, 72, 254, 126, 238, 203, 254, 205, 239, 101, 255, 73, 241, 19, 0, 239, 242, 209, 0, 184, 244, 151, 1, 154, 246, 94, 2, 142, 248, 30, 3, 135, 250, 209, 3, 125, 252, 110, 4, 102, 254, 240, 4, 53, 0, 84, 5, 228, 1, 149, 5, 107, 3, 179, 5, 195, 4, 172, 5, 230, 5, 130, 5, 211, 6, 56, 5, 136, 7, 209, 4, 5, 8, 83, 4, 76, 8, 196, 3, 97, 8, 42, 3, 73, 8, 141, 2, 13, 8, 240, 1, 180, 7, 87, 1, 71, 7, 199, 0, 204, 6, 63, 0, 70, 6, 189, 255, 183, 5, 59, 255, 33, 5, 179, 254, 132, 4, 36, 254, 225, 3, 134, 253, 54, 3, 217, 252, 130, 2, 27, 252, 198, 1, 72, 251, 2, 1, 98, 250, 55, 0, 105, 249, 103, 255, 94, 248, 147, 254, 68, 247, 189, 253, 33, 246, 233, 252, 247, 244, 28, 252, 204, 243, 88, 251, 164, 242, 160, 250, 133, 241, 247, 249, 114, 240, 94, 249, 112, 239, 219, 248, 130, 238, 108, 248, 170, 237, 16, 248, 232, 236, 202, 247, 60, 236, 149, 247, 164, 235, 114, 247, 32, 235, 93, 247, 173, 234, 81, 247, 75, 234, 75, 247, 246, 233, 71, 247, 173, 233, 66, 247, 113, 233, 57, 247, 63, 233, 41, 247, 23, 233, 19, 247, 250, 232, 246, 246, 233, 232, 209, 246, 234, 232, 163, 246, 249, 232, 111, 246, 25, 233, 52, 246, 75, 233, 244, 245, 143, 233, 176, 245, 229, 233, 105, 245, 75, 234, 36, 245, 194, 234, 224, 244, 69, 235, 160, 244, 212, 235, 103, 244, 109, 236, 53, 244, 12, 237, 13, 244, 173, 237, 241, 243, 81, 238, 226, 243, 244, 238, 224, 243, 148, 239, 237, 243, 48, 240, 8, 244, 198, 240, 52, 244, 86, 241, 112, 244, 227, 241, 197, 244, 116, 242, 56, 245, 17, 243, 208, 245, 196, 243, 148, 246, 152, 244, 139, 247, 150, 245, 183, 248, 192, 246, 27, 250, 31, 248, 183, 251, 176, 249, 135, 253, 112, 251, 137, 255, 92, 253, 179, 1, 105, 255, 254, 3, 142, 1, 97, 6, 196, 3, 207, 8, 253, 5, 59, 11, 45, 8, 154, 13, 76, 10, 225, 15, 79, 12, 5, 18, 45, 14, 253, 19, 224, 15, 192, 21, 97, 17, 72, 23, 173, 18, 145, 24, 195, 19, 153, 25, 165, 20, 95, 26, 87, 21, 229, 26, 220, 21, 46, 27, 58, 22, 63, 27, 119, 22, 30, 27, 155, 22, 213, 26, 167, 22, 101, 26, 160, 22, 209, 25, 136, 22, 29, 25, 90, 22, 75, 24, 23, 22, 94, 23, 189, 21, 85, 22, 77, 21, 51, 21, 196, 20, 251, 19, 37, 20, 175, 18, 112, 19, 84, 17, 168, 18, 234, 15, 209, 17, 120, 14, 239, 16, 3, 13, 5, 16, 144, 11, 27, 15, 38, 10, 53, 14, 201, 8, 88, 13, 126, 7, 136, 12, 74, 6, 202, 11, 49, 5, 32, 11, 54, 4, 140, 10, 91, 3, 17, 10, 161, 2, 174, 9, 8, 2, 97, 9, 143, 1, 42, 9, 52, 1, 4, 9, 245, 0, 236, 8, 203, 0, 223, 8, 178, 0, 218, 8, 165, 0, 214, 8, 156, 0, 210, 8, 144, 0, 199, 8, 121, 0, 175, 8, 79, 0, 136, 8, 12, 0, 77, 8, 172, 255, 254, 7, 40, 255, 156, 7, 128, 254, 38, 7, 180, 253, 159, 6, 196, 252, 10, 6, 180, 251, 104, 5, 135, 250, 190, 4, 66, 249, 15, 4, 236, 247, 93, 3, 139, 246, 173, 2, 39, 245, 255, 1, 198, 243, 89, 1, 110, 242, 186, 0, 39, 241, 39, 0, 246, 239, 162, 255, 225, 238, 43, 255, 236, 237, 193, 254, 27, 237, 103, 254, 111, 236, 28, 254, 235, 235, 224, 253, 146, 235, 178, 253, 102, 235, 148, 253, 106, 235, 137, 253, 160, 235, 149, 253, 11, 236, 184, 253, 172, 236, 247, 253, 129, 237, 81, 254, 137, 238, 197, 254, 194, 239, 80, 255, 39, 241, 239, 255, 181, 242, 154, 0, 101, 244, 78, 1, 46, 246, 3, 2, 9, 248, 178, 2, 238, 249, 86, 3, 210, 251, 231, 3, 172, 253, 100, 4, 116, 255, 197, 4, 31, 1, 8, 5, 169, 2, 45, 5, 12, 4, 51, 5, 64, 5, 27, 5, 68, 6, 229, 4, 22, 7, 151, 4, 181, 7, 51, 4, 36, 8, 191, 3, 102, 8, 64, 3, 128, 8, 187, 2, 123, 8, 50, 2, 91, 8, 172, 1, 36, 8, 39, 1, 218, 7, 162, 0, 127, 7, 27, 0, 19, 7, 143, 255, 150, 6, 250, 254, 9, 6, 87, 254, 108, 5, 166, 253, 192, 4, 229, 252, 6, 4, 16, 252, 61, 3, 40, 251, 103, 2, 47, 250, 133, 1, 36, 249, 154, 0, 12, 248, 171, 255, 233, 246, 184, 254, 190, 245, 199, 253, 145, 244, 219, 252, 103, 243, 248, 251, 65, 242, 34, 251, 39, 241, 91, 250, 27, 240, 167, 249, 32, 239, 8, 249, 58, 238, 125, 248, 105, 237, 8, 248, 174, 236, 170, 247, 8, 236, 94, 247, 118, 235, 36, 247, 249, 234, 248, 246, 140, 234, 215, 246, 47, 234, 190, 246, 225, 233, 170, 246, 160, 233, 151, 246, 107, 233, 134, 246, 68, 233, 118, 246, 42, 233, 98, 246, 29, 233, 75, 246, 30, 233, 50, 246, 46, 233, 22, 246, 77, 233, 246, 245, 125, 233, 212, 245, 189, 233, 174, 245, 13, 234, 135, 245, 106, 234, 95, 245, 214, 234, 55, 245, 77, 235, 15, 245, 207, 235, 234, 244, 88, 236, 200, 244, 231, 236, 172, 244, 123, 237, 148, 244, 17, 238, 133, 244, 168, 238, 126, 244, 60, 239, 128, 244, 205, 239, 140, 244, 91, 240, 162, 244, 227, 240, 196, 244, 106, 241, 247, 244, 241, 241, 64, 245, 131, 242, 166, 245, 38, 243, 50, 246, 228, 243, 233, 246, 197, 244, 207, 247, 206, 245, 232, 248, 4, 247, 54, 250, 105, 248, 184, 251, 250, 249, 108, 253, 181, 251, 79, 255, 146, 253, 87, 1, 141, 255, 130, 3, 154, 1, 196, 5, 181, 3, 19, 8, 209, 5, 101, 10, 230, 7, 175, 12, 235, 9, 231, 14, 215, 11, 3, 17, 164, 13, 251, 18, 74, 15, 199, 20, 196, 16, 96, 22, 18, 18, 193, 23, 47, 19, 233, 24, 31, 20, 214, 25, 227, 20, 138, 26, 128, 21, 6, 27, 249, 21, 79, 27, 84, 22, 103, 27, 146, 22, 83, 27, 184, 22, 20, 27, 197, 22, 170, 26, 185, 22, 24, 26, 148, 22, 94, 25, 84, 22, 128, 24, 251, 21, 128, 23, 135, 21, 94, 22, 248, 20, 31, 21, 79, 20, 197, 19, 145, 19, 87, 18, 194, 18, 219, 16, 228, 17, 84, 15, 253, 16, 201, 13, 18, 16, 64, 12, 40, 15, 190, 10, 65, 14, 73, 9, 101, 13, 230, 7, 151, 12, 154, 6, 218, 11, 106, 5, 48, 11, 86, 4, 156, 10, 100, 3, 32, 10, 147, 2, 186, 9, 227, 1, 106, 9, 84, 1, 46, 9, 226, 0, 3, 9, 137, 0, 229, 8, 71, 0, 210, 8, 21, 0, 198, 8, 243, 255, 189, 8, 213, 255, 179, 8, 179, 255, 165, 8, 140, 255, 139, 8, 84, 255, 103, 8, 10, 255, 52, 8, 166, 254, 242, 7, 40, 254, 161, 7, 139, 253, 65, 7, 208, 252, 211, 6, 248, 251, 90, 6, 5, 251, 213, 5, 249, 249, 70, 5, 217, 248, 177, 4, 170, 247, 22, 4, 111, 246, 121, 3, 48, 245, 220, 2, 242, 243, 63, 2, 186, 242, 167, 1, 143, 241, 21, 1, 117, 240, 138, 0, 113, 239, 10, 0, 134, 238, 150, 255, 185, 237, 43, 255, 12, 237, 203, 254, 131, 236, 121, 254, 31, 236, 53, 254, 231, 235, 2, 254, 220, 235, 228, 253, 3, 236, 222, 253, 94, 236, 242, 253, 237, 236, 34, 254, 174, 237, 108, 254, 161, 238, 208, 254, 194, 239, 73, 255, 14, 241, 212, 255, 128, 242, 106, 0, 20, 244, 10, 1, 193, 245, 171, 1, 129, 247, 72, 2, 76, 249, 221, 2, 25, 251, 98, 3, 225, 252, 215, 3, 155, 254, 53, 4, 63, 0, 123, 4, 200, 1, 167, 4, 48, 3, 185, 4, 113, 4, 175, 4, 137, 5, 141, 4, 117, 6, 85, 4, 56, 7, 10, 4, 209, 7, 177, 3, 69, 8, 75, 3, 152, 8, 222, 2, 205, 8, 107, 2, 232, 8, 245, 1, 233, 8, 123, 1, 209, 8, 251, 0, 160, 8, 115, 0, 87, 8, 226, 255, 246, 7, 67, 255, 124, 7, 148, 254, 235, 6, 211, 253, 66, 6, 0, 253, 131, 5, 25, 252, 177, 4, 32, 251, 203, 3, 22, 250, 215, 2, 253, 248, 215, 1, 216, 247, 206, 0, 171, 246, 195, 255, 121, 245, 182, 254, 71, 244, 174, 253, 25, 243, 174, 252, 245, 241, 186, 251, 219, 240, 214, 250, 210, 239, 5, 250, 219, 238, 72, 249, 249, 237, 162, 248, 44, 237, 16, 248, 116, 236, 148, 247, 211, 235, 42, 247, 69, 235, 211, 246, 204, 234, 139, 246, 100, 234, 80, 246, 13, 234, 34, 246, 199, 233, 251, 245, 143, 233, 219, 245, 101, 233, 193, 245, 73, 233, 170, 245, 59, 233, 152, 245, 61, 233, 136, 245, 76, 233, 122, 245, 108, 233, 110, 245, 153, 233, 99, 245, 214, 233, 88, 245, 32, 234, 78, 245, 119, 234, 66, 245, 219, 234, 55, 245, 72, 235, 45, 245, 191, 235, 34, 245, 62, 236, 25, 245, 194, 236, 17, 245, 72, 237, 9, 245, 209, 237, 6, 245, 90, 238, 5, 245, 227, 238, 7, 245, 106, 239, 16, 245, 237, 239, 29, 245, 110, 240, 48, 245, 236, 240, 77, 245, 107, 241, 120, 245, 242, 241, 186, 245, 135, 242, 26, 246, 52, 243, 157, 246, 253, 243, 73, 247, 234, 244, 35, 248, 0, 246, 44, 249, 61, 247, 104, 250, 165, 248, 212, 251, 50, 250, 110, 253, 229, 251, 53, 255, 182, 253, 32, 1, 159, 255, 43, 3, 151, 1, 77, 5, 155, 3, 126, 7, 160, 5, 181, 9, 156, 7, 232, 11, 140, 9, 13, 14, 102, 11, 30, 16, 36, 13, 17, 18, 191, 14, 221, 19, 53, 16, 127, 21, 131, 17, 243, 22, 168, 18, 53, 24, 164, 19, 68, 25, 121, 20, 33, 26, 43, 21, 204, 26, 187, 21, 71, 27, 45, 22, 147, 27, 132, 22, 176, 27, 191, 22, 158, 27, 222, 22, 94, 27, 225, 22, 239, 26, 199, 22, 79, 26, 142, 22, 133, 25, 54, 22, 146, 24, 195, 21, 122, 23, 54, 21, 63, 22, 144, 20, 232, 20, 212, 19, 121, 19, 6, 19, 245, 17, 43, 18, 101, 16, 70, 17, 205, 14, 91, 16, 52, 13, 113, 15, 160, 11, 139, 14, 23, 10, 174, 13, 157, 8, 222, 12, 58, 7, 29, 12, 238, 5, 111, 11, 192, 4, 214, 10, 177, 3, 82, 10, 193, 2, 228, 9, 241, 1, 137, 9, 63, 1, 65, 9, 170, 0, 10, 9, 47, 0, 225, 8, 204, 255, 195, 8, 123, 255, 173, 8, 55, 255, 157, 8, 251, 254, 139, 8, 194, 254, 120, 8, 133, 254, 95, 8, 62, 254, 63, 8, 234, 253, 22, 8, 131, 253, 226, 7, 8, 253, 163, 7, 117, 252, 88, 7, 204, 251, 0, 7, 11, 251, 156, 6, 53, 250, 47, 6, 74, 249, 181, 5, 78, 248, 53, 5, 68, 247, 172, 4, 49, 246, 30, 4, 24, 245, 141, 3, 255, 243, 249, 2, 235, 242, 102, 2, 221, 241, 213, 1, 221, 240, 71, 1, 239, 239, 193, 0, 20, 239, 65, 0, 81, 238, 204, 255, 169, 237, 94, 255, 33, 237, 252, 254, 187, 236, 168, 254, 125, 236, 102, 254, 107, 236, 57, 254, 135, 236, 38, 254, 212, 236, 43, 254, 82, 237, 75, 254, 0, 238, 132, 254, 220, 238, 213, 254, 227, 239, 58, 255, 19, 241, 176, 255, 104, 242, 50, 0, 221, 243, 187, 0, 107, 245, 74, 1, 12, 247, 214, 1, 187, 248, 93, 2, 111, 250, 217, 2, 32, 252, 71, 3, 200, 253, 164, 3, 98, 255, 238, 3, 227, 0, 34, 4, 75, 2, 63, 4, 149, 3, 70, 4, 189, 4, 56, 4, 196, 5, 21, 4, 170, 6, 226, 3, 110, 7, 160, 3, 20, 8, 82, 3, 157, 8, 250, 2, 10, 9, 154, 2, 92, 9, 53, 2, 145, 9, 197, 1, 168, 9, 75, 1, 159, 9, 196, 0, 120, 9, 49, 0, 49, 9, 140, 255, 203, 8, 212, 254, 70, 8, 8, 254, 165, 7, 42, 253, 232, 6, 55, 252, 19, 6, 51, 251, 40, 5, 31, 250, 41, 4, 253, 248, 28, 3, 210, 247, 4, 2, 161, 246, 231, 0, 110, 245, 201, 255, 59, 244, 172, 254, 13, 243, 149, 253, 233, 241, 138, 252, 210, 240, 140, 251, 204, 239, 160, 250, 216, 238, 200, 249, 250, 237, 2, 249, 48, 237, 81, 248, 124, 236, 180, 247, 223, 235, 43, 247, 87, 235, 179, 246, 226, 234, 76, 246, 127, 234, 246, 245, 45, 234, 173, 245, 236, 233, 113, 245, 187, 233, 65, 245, 154, 233, 27, 245, 136, 233, 254, 244, 134, 233, 234, 244, 148, 233, 222, 244, 176, 233, 216, 244, 218, 233, 216, 244, 19, 234, 221, 244, 88, 234, 230, 244, 170, 234, 242, 244, 7, 235, 255, 244, 107, 235, 12, 245, 216, 235, 27, 245, 74, 236, 41, 245, 194, 236, 55, 245, 60, 237, 69, 245, 184, 237, 83, 245, 53, 238, 95, 245, 178, 238, 109, 245, 45, 239, 123, 245, 166, 239, 137, 245, 29, 240, 153, 245, 146, 240, 171, 245, 7, 241, 197, 245, 129, 241, 237, 245, 7, 242, 42, 246, 157, 242, 131, 246, 77, 243, 251, 246, 27, 244, 155, 247, 9, 245, 102, 248, 29, 246, 93, 249, 87, 247, 130, 250, 181, 248, 212, 251, 54, 250, 81, 253, 215, 251, 247, 254, 147, 253, 193, 0, 102, 255, 169, 2, 70, 1, 170, 4, 49, 3, 186, 6, 31, 5, 212, 8, 6, 7, 237, 10, 227, 8, 254, 12, 175, 10, 0, 15, 97, 12, 233, 16, 248, 13, 182, 18, 109, 15, 98, 20, 191, 16, 231, 21, 238, 17, 66, 23, 248, 18, 114, 24, 223, 19, 119, 25, 165, 20, 77, 26, 76, 21, 246, 26, 212, 21, 112, 27, 63, 22, 184, 27, 139, 22, 206, 27, 183, 22, 177, 27, 198, 22, 98, 27, 181, 22, 225, 26, 132, 22, 47, 26, 53, 22, 81, 25, 201, 21, 74, 24, 65, 21, 28, 23, 160, 20, 206, 21, 234, 19, 100, 20, 34, 19, 229, 18, 77, 18, 84, 17, 109, 17, 186, 15, 137, 16, 28, 14, 164, 15, 127, 12, 195, 14, 235, 10, 232, 13, 99, 9, 25, 13, 239, 7, 89, 12, 145, 6, 169, 11, 77, 5, 13, 11, 37, 4, 132, 10, 25, 3, 14, 10, 41, 2, 171, 9, 86, 1, 90, 9, 158, 0, 24, 9, 1, 0, 229, 8, 123, 255, 189, 8, 9, 255, 158, 8, 165, 254, 133, 8, 78, 254, 114, 8, 252, 253, 95, 8, 170, 253, 74, 8, 85, 253, 50, 8, 248, 252, 19, 8, 143, 252, 238, 7, 24, 252, 190, 7, 145, 251, 133, 7, 249, 250, 65, 7, 80, 250, 242, 6, 149, 249, 152, 6, 201, 248, 51, 6, 240, 247, 195, 5, 11, 247, 76, 5, 29, 246, 203, 4, 42, 245, 68, 4, 51, 244, 185, 3, 63, 243, 44, 3, 80, 242, 156, 2, 105, 241, 14, 2, 143, 240, 131, 1, 196, 239, 251, 0, 12, 239, 123, 0, 107, 238, 1, 0, 229, 237, 148, 255, 125, 237, 52, 255, 59, 237, 228, 254, 33, 237, 169, 254, 48, 237, 134, 254, 109, 237, 121, 254, 215, 237, 133, 254, 109, 238, 168, 254, 47, 239, 225, 254, 25, 240, 45, 255, 42, 241, 138, 255, 92, 242, 244, 255, 174, 243, 101, 0, 23, 245, 221, 0, 149, 246, 87, 1, 33, 248, 206, 1, 183, 249, 63, 2, 77, 251, 166, 2, 222, 252, 1, 3, 102, 254, 77, 3, 223, 255, 136, 3, 67, 1, 176, 3, 149, 2, 198, 3, 206, 3, 202, 3, 239, 4, 189, 3, 247, 5, 160, 3, 229, 6, 118, 3, 185, 7, 63, 3, 116, 8, 254, 2, 19, 9, 178, 2, 148, 9, 92, 2, 246, 9, 249, 1, 55, 10, 136, 1, 85, 10, 6, 1, 77, 10, 114, 0, 34, 10, 203, 255, 210, 9, 15, 255, 96, 9, 62, 254, 203, 8, 88, 253, 24, 8, 94, 252, 72, 7, 84, 251, 94, 6, 60, 250, 95, 5, 21, 249, 78, 4, 229, 247, 48, 3, 177, 246, 10, 2, 124, 245, 222, 0, 73, 244, 180, 255, 30, 243, 142, 254, 252, 241, 111, 253, 232, 240, 93, 252, 228, 239, 87, 251, 243, 238, 99, 250, 23, 238, 127, 249, 79, 237, 173, 248, 157, 236, 238, 247, 254, 235, 65, 247, 117, 235, 169, 246, 254, 234, 34, 246, 154, 234, 173, 245, 73, 234, 73, 245, 10, 234, 246, 244, 221, 233, 178, 244, 192, 233, 126, 244, 181, 233, 87, 244, 186, 233, 60, 244, 206, 233, 48, 244, 242, 233, 46, 244, 37, 234, 53, 244, 99, 234, 70, 244, 174, 234, 92, 244, 1, 235, 121, 244, 93, 235, 153, 244, 193, 235, 187, 244, 42, 236, 223, 244, 151, 236, 4, 245, 8, 237, 39, 245, 123, 237, 74, 245, 239, 237, 109, 245, 98, 238, 140, 245, 213, 238, 169, 245, 71, 239, 195, 245, 182, 239, 218, 245, 37, 240, 240, 245, 148, 240, 7, 246, 5, 241, 38, 246, 127, 241, 81, 246, 7, 242, 144, 246, 163, 242, 233, 246, 86, 243, 97, 247, 39, 244, 251, 247, 23, 245, 190, 248, 40, 246, 168, 249, 92, 247, 187, 250, 177, 248, 248, 251, 37, 250, 93, 253, 182, 251, 231, 254, 96, 253, 144, 0, 29, 255, 87, 2, 232, 0, 54, 4, 189, 2, 38, 6, 150, 4, 31, 8, 106, 6, 27, 10, 54, 8, 19, 12, 243, 9, 0, 14, 156, 11, 222, 15, 45, 13, 166, 17, 161, 14, 84, 19, 248, 15, 228, 20, 46, 17, 82, 22, 70, 18, 155, 23, 61, 19, 190, 24, 22, 20, 184, 25, 210, 20, 135, 26, 112, 21, 40, 27, 240, 21, 152, 27, 81, 22, 215, 27, 147, 22, 225, 27, 179, 22, 182, 27, 179, 22, 87, 27, 147, 22, 199, 26, 83, 22, 6, 26, 245, 21, 24, 25, 123, 21, 3, 24, 231, 20, 201, 22, 61, 20, 110, 21, 128, 19, 250, 19, 178, 18, 112, 18, 216, 17, 218, 16, 249, 16, 60, 15, 24, 16, 157, 13, 57, 15, 2, 12, 95, 14, 113, 10, 143, 13, 238, 8, 203, 12, 126, 7, 22, 12, 33, 6, 114, 11, 220, 4, 223, 10, 176, 3, 94, 10, 157, 2, 239, 9, 164, 1, 144, 9, 198, 0, 65, 9, 0, 0, 1, 9, 85, 255, 207, 8, 187, 254, 168, 8, 51, 254, 137, 8, 185, 253, 112, 8, 71, 253, 92, 8, 220, 252, 72, 8, 114, 252, 52, 8, 5, 252, 27, 8, 146, 251, 252, 7, 24, 251, 215, 7, 149, 250, 169, 7, 5, 250, 113, 7, 106, 249, 46, 7, 195, 248, 224, 6, 16, 248, 135, 6, 82, 247, 35, 6, 139, 246, 181, 5, 189, 245, 62, 5, 234, 244, 191, 4, 20, 244, 59, 4, 63, 243, 177, 3, 109, 242, 37, 3, 161, 241, 151, 2, 223, 240, 10, 2, 40, 240, 128, 1, 130, 239, 250, 0, 238, 238, 122, 0, 114, 238, 5, 0, 17, 238, 159, 255, 209, 237, 71, 255, 182, 237, 2, 255, 192, 237, 210, 254, 244, 237, 183, 254, 80, 238, 177, 254, 213, 238, 194, 254, 129, 239, 231, 254, 83, 240, 31, 255, 72, 241, 102, 255, 93, 242, 187, 255, 143, 243, 26, 0, 217, 244, 128, 0, 54, 246, 235, 0, 163, 247, 85, 1, 26, 249, 189, 1, 149, 250, 30, 2, 18, 252, 119, 2, 137, 253, 198, 2, 249, 254, 6, 3, 93, 0, 56, 3, 181, 1, 91, 3, 254, 2, 110, 3, 53, 4, 113, 3, 90, 5, 103, 3, 105, 6, 81, 3, 99, 7, 46, 3, 69, 8, 255, 2, 11, 9, 197, 2, 180, 9, 123, 2, 59, 10, 34, 2, 158, 10, 183, 1, 219, 10, 56, 1, 241, 10, 165, 0, 223, 10, 253, 255, 165, 10, 63, 255, 70, 10, 107, 254, 195, 9, 128, 253, 30, 9, 131, 252, 91, 8, 117, 251, 122, 7, 88, 250, 129, 6, 47, 249, 115, 5, 254, 247, 86, 4, 201, 246, 45, 3, 148, 245, 252, 1, 97, 244, 202, 0, 55, 243, 154, 255, 22, 242, 109, 254, 2, 241, 72, 253, 255, 239, 44, 252, 14, 239, 30, 251, 47, 238, 29, 250, 101, 237, 45, 249, 175, 236, 79, 248, 14, 236, 129, 247, 129, 235, 200, 246, 8, 235, 33, 246, 163, 234, 142, 245, 81, 234, 15, 245, 18, 234, 162, 244, 232, 233, 74, 244, 209, 233, 4, 244, 204, 233, 208, 243, 215, 233, 172, 243, 241, 233, 151, 243, 25, 234, 145, 243, 79, 234, 151, 243, 143, 234, 169, 243, 217, 234, 197, 243, 45, 235, 233, 243, 135, 235, 19, 244, 231, 235, 65, 244, 76, 236, 115, 244, 180, 236, 165, 244, 30, 237, 216, 244, 137, 237, 11, 245, 246, 237, 59, 245, 98, 238, 104, 245, 205, 238, 145, 245, 56, 239, 181, 245, 161, 239, 211, 245, 10, 240, 240, 245, 116, 240, 15, 246, 228, 240, 52, 246, 94, 241, 102, 246, 230, 241, 170, 246, 131, 242, 5, 247, 54, 243, 126, 247, 5, 244, 22, 248, 242, 244, 211, 248, 252, 245, 181, 249, 38, 247, 188, 250, 111, 248, 232, 251, 214, 249, 57, 253, 87, 251, 172, 254, 238, 252, 61, 0, 155, 254, 234, 1, 83, 0, 173, 3, 22, 2, 129, 5, 223, 3, 96, 7, 165, 5, 68, 9, 100, 7, 40, 11, 23, 9, 8, 13, 186, 10, 221, 14, 73, 12, 162, 16, 192, 13, 84, 18, 28, 15, 238, 19, 94, 16, 108, 21, 130, 17, 202, 22, 138, 18, 7, 24, 119, 19, 30, 25, 69, 20, 12, 26, 246, 20, 205, 26, 138, 21, 93, 27, 252, 21, 187, 27, 78, 22, 228, 27, 128, 22, 216, 27, 143, 22, 151, 27, 126, 22, 35, 27, 76, 22, 126, 26, 251, 21, 167, 25, 139, 21, 165, 24, 1, 21, 128, 23, 98, 20, 57, 22, 174, 19, 214, 20, 236, 18, 94, 19, 30, 18, 213, 17, 74, 17, 65, 16, 113, 16, 170, 14, 154, 15, 18, 13, 198, 14, 127, 11, 249, 13, 244, 9, 55, 13, 119, 8, 129, 12, 10, 7, 217, 11, 173, 5, 64, 11, 103, 4, 184, 10, 54, 3, 64, 10, 27, 2, 215, 9, 27, 1, 127, 9, 49, 0, 52, 9, 97, 255, 248, 8, 164, 254, 200, 8, 249, 253, 163, 8, 93, 253, 134, 8, 206, 252, 111, 8, 73, 252, 91, 8, 201, 251, 72, 8, 75, 251, 51, 8, 207, 250, 27, 8, 80, 250, 252, 7, 204, 249, 215, 7, 67, 249, 170, 7, 179, 248, 114, 7, 27, 248, 49, 7, 125, 247, 228, 6, 215, 246, 141, 6, 43, 246, 43, 6, 122, 245, 191, 5, 198, 244, 75, 5, 15, 244, 208, 4, 88, 243, 78, 4, 163, 242, 200, 3, 244, 241, 63, 3, 75, 241, 181, 2, 170, 240, 44, 2, 21, 240, 165, 1, 146, 239, 36, 1, 35, 239, 172, 0, 205, 238, 63, 0, 147, 238, 225, 255, 120, 238, 146, 255, 127, 238, 85, 255, 170, 238, 42, 255, 249, 238, 19, 255, 109, 239, 14, 255, 2, 240, 29, 255, 185, 240, 60, 255, 144, 241, 107, 255, 131, 242, 168, 255, 145, 243, 240, 255, 181, 244, 62, 0, 237, 245, 149, 0, 51, 247, 238, 0, 134, 248, 71, 1, 226, 249, 157, 1, 66, 251, 238, 1, 165, 252, 56, 2, 7, 254, 120, 2, 102, 255, 174, 2, 188, 0, 216, 2, 12, 2, 245, 2, 82, 3, 6, 3, 138, 4, 13, 3, 180, 5, 7, 3, 203, 6, 246, 2, 204, 7, 218, 2, 180, 8, 175, 2, 126, 9, 117, 2, 41, 10, 43, 2, 176, 10, 205, 1, 19, 11, 92, 1, 78, 11, 215, 0, 104, 11, 65, 0, 104, 11, 165, 255, 84, 11, 8, 255, 65, 11, 121, 254, 129, 11, 80, 254, 155, 12, 19, 255, 131, 14, 176, 0, 26, 17, 14, 3, 5, 20, 207, 5, 112, 22, 32, 8, 66, 24, 229, 9, 22, 25, 186, 10, 163, 24, 86, 10, 7, 23, 214, 8, 91, 20, 79, 6, 251, 16, 34, 3, 56, 13, 158, 255, 116, 9, 32, 252, 243, 5, 237, 248, 234, 2, 57, 246, 119, 0, 29, 244, 154, 254, 154, 242, 66, 253, 162, 241, 85, 252, 21, 241, 181, 251, 217, 240, 63, 251, 205, 240, 219, 250, 217, 240, 115, 250, 251, 240, 233, 249, 55, 241, 21, 249, 105, 241, 209, 247, 96, 241, 15, 246, 251, 240, 213, 243, 6, 240, 66, 241, 140, 238, 131, 238, 163, 236, 202, 235, 100, 234, 79, 233, 11, 232, 61, 231, 202, 229, 185, 229, 218, 227, 211, 228, 100, 226, 143, 228, 135, 225, 224, 228, 75, 225, 174, 229, 168, 225, 215, 230, 135, 226, 62, 232, 203, 227, 203, 233, 93, 229, 129, 235, 53, 231, 107, 237, 88, 233, 131, 239, 185, 235, 183, 241, 57, 238, 229, 243, 178, 240, 226, 245, 242, 242, 140, 247, 199, 244, 198, 248, 12, 246, 134, 249, 175, 246, 210, 249, 182, 246, 194, 249, 63, 246, 119, 249, 124, 245, 26, 249, 162, 244, 210, 248, 237, 243, 191, 248, 167, 243, 246, 248, 14, 244, 129, 249, 42, 245, 96, 250, 241, 246, 129, 251, 45, 249, 191, 252, 124, 251, 222, 253, 146, 253, 171, 254, 20, 255, 14, 255, 213, 255, 11, 255, 221, 255, 190, 254, 87, 255, 82, 254, 136, 254, 246, 253, 180, 253, 211, 253, 20, 253, 4, 254, 207, 252, 148, 254, 240, 252, 124, 255, 112, 253, 166, 0, 53, 254, 244, 1, 31, 255, 69, 3, 9, 0, 120, 4, 210, 0, 114, 5, 104, 1, 35, 6, 189, 1, 129, 6, 202, 1, 142, 6, 147, 1, 85, 6, 23, 1, 226, 5, 94, 0, 69, 5, 117, 255, 144, 4, 99, 254, 204, 3, 49, 253, 5, 3, 234, 251, 66, 2, 153, 250, 136, 1, 80, 249, 214, 0, 35, 248, 45, 0, 38, 247, 142, 255, 103, 246, 245, 254, 242, 245, 101, 254, 203, 245, 231, 253, 245, 245, 130, 253, 105, 246, 81, 253, 36, 247, 145, 253, 48, 248, 129, 254, 193, 249, 100, 0, 29, 252, 86, 3, 96, 255, 42, 7, 128, 3, 197, 11, 70, 8, 220, 16, 86, 13, 236, 21, 74, 18, 142, 26, 187, 22, 71, 30, 88, 26, 196, 32, 238, 28, 248, 33, 106, 30, 214, 33, 217, 30, 137, 32, 97, 30, 83, 30, 59, 29, 128, 27, 161, 27, 98, 24, 210, 25, 65, 21, 254, 23, 87, 18, 77, 22, 197, 15, 210, 20, 147, 13, 129, 19, 156, 11, 45, 18, 180, 9, 168, 16, 180, 7, 221, 14, 133, 5, 215, 12, 33, 3, 200, 10, 151, 0, 231, 8, 7, 254, 107, 7, 137, 251, 118, 6, 58, 249, 17, 6, 36, 247, 48, 6, 77, 245, 176, 6, 183, 243, 101, 7, 92, 242, 32, 8, 59, 241, 181, 8, 75, 240, 4, 9, 138, 239, 253, 8, 250, 238, 156, 8, 152, 238, 236, 7, 96, 238, 247, 6, 57, 238, 191, 5, 5, 238, 58, 4, 176, 237, 99, 2, 49, 237, 64, 0, 136, 236, 222, 253, 199, 235, 79, 251, 6, 235, 179, 248, 105, 234, 54, 246, 16, 234, 0, 244, 19, 234, 57, 242, 126, 234, 254, 240, 81, 235, 98, 240, 132, 236, 103, 240, 9, 238, 3, 241, 204, 239, 33, 242, 183, 241, 162, 243, 186, 243, 114, 245, 212, 245, 149, 247, 22, 248, 25, 250, 136, 250, 249, 252, 25, 253, 24, 0, 164, 255, 69, 3, 243, 1, 60, 6, 212, 3, 180, 8, 28, 5, 105, 10, 173, 5, 45, 11, 123, 5, 234, 10, 142, 4, 173, 9, 3, 3, 154, 7, 4, 1, 231, 4, 198, 254, 213, 1, 120, 252, 166, 254, 67, 250, 142, 251, 69, 248, 184, 248, 141, 246, 64, 246, 24, 245, 42, 244, 211, 243, 97, 242, 140, 242, 173, 240, 11, 241, 210, 238, 44, 239, 167, 236, 222, 236, 39, 234, 52, 234, 107, 231, 80, 231, 160, 228, 99, 228, 253, 225, 160, 225, 176, 223, 50, 223, 213, 221, 57, 221, 123, 220, 197, 219, 160, 219, 212, 218, 43, 219, 84, 218, 251, 218, 46, 218, 246, 218, 73, 218, 251, 218, 136, 218, 248, 218, 218, 218, 224, 218, 48, 219, 173, 218, 132, 219, 93, 218, 216, 219, 241, 217, 60, 220, 113, 217, 203, 220, 227, 216, 162, 221, 86, 216, 214, 222, 212, 215, 112, 224, 100, 215, 123, 226, 16, 215, 241, 228, 219, 214, 190, 231, 202, 214, 198, 234, 237, 214, 226, 237, 72, 215, 232, 240, 228, 215, 179, 243, 194, 216, 37, 246, 223, 217, 49, 248, 57, 219, 214, 249, 200, 220, 34, 251, 143, 222, 75, 252, 171, 224, 163, 253, 84, 227, 121, 255, 182, 230, 251, 1, 217, 234, 45, 5, 163, 239, 227, 8, 212, 244, 216, 12, 28, 250, 189, 16, 38, 255, 64, 20, 162, 3, 34, 23, 93, 7, 55, 25, 55, 10, 120, 26, 45, 12, 243, 26, 84, 13, 208, 26, 210, 13, 68, 26, 217, 13, 133, 25, 157, 13, 199, 24, 75, 13, 51, 24, 16, 13, 228, 23, 3, 13, 227, 23, 39, 13, 27, 24, 99, 13, 95, 24, 142, 13, 144, 24, 143, 13, 149, 24, 96, 13, 102, 24, 27, 13, 9, 24, 236, 12, 143, 23, 255, 12, 14, 23, 122, 13, 147, 22, 106, 14, 44, 22, 206, 15, 223, 21, 140, 17, 172, 21, 126, 19, 144, 21, 118, 21, 133, 21, 72, 23, 129, 21, 205, 24, 127, 21, 231, 25, 116, 21, 136, 26, 92, 21, 175, 26, 48, 21, 101, 26, 223, 20, 172, 25, 72, 20, 127, 24, 85, 19, 220, 22, 250, 17, 197, 20, 57, 16, 73, 18, 32, 14, 122, 15, 204, 11, 117, 12, 98, 9, 94, 9, 255, 6, 93, 6, 190, 4, 157, 3, 177, 2, 65, 1, 225, 0, 104, 255, 80, 255, 29, 254, 251, 253, 101, 253, 220, 252, 59, 253, 237, 251, 144, 253, 37, 251, 86, 254, 136, 250, 139, 255, 38, 250, 52, 1, 15, 250, 84, 3, 70, 250, 210, 5, 182, 250, 133, 8, 59, 251, 53, 11, 165, 251, 164, 13, 198, 251, 149, 15, 117, 251, 215, 16, 151, 250, 74, 17, 39, 249, 236, 16, 54, 247, 205, 15, 233, 244, 21, 14, 107, 242, 246, 11, 236, 239, 166, 9, 150, 237, 89, 7, 137, 235, 57, 5, 216, 233, 101, 3, 135, 232, 233, 1, 138, 231, 187, 0, 190, 230, 187, 255, 240, 229, 180, 254, 239, 228, 123, 253, 161, 227, 253, 251, 0, 226, 61, 250, 31, 224, 87, 248, 26, 222, 113, 246, 28, 220, 178, 244, 78, 218, 57, 243, 208, 216, 21, 242, 183, 215, 75, 241, 13, 215, 206, 240, 207, 214, 143, 240, 240, 214, 115, 240, 93, 215, 102, 240, 2, 216, 82, 240, 201, 216, 43, 240, 167, 217, 235, 239, 148, 218, 142, 239, 139, 219, 17, 239, 134, 220, 120, 238, 149, 221, 205, 237, 204, 222, 32, 237, 69, 224, 126, 236, 25, 226, 241, 235, 93, 228, 126, 235, 25, 231, 43, 235, 69, 234, 254, 234, 198, 237, 251, 234, 119, 241, 41, 235, 46, 245, 136, 235, 192, 248, 30, 236, 11, 252, 232, 236, 250, 254, 224, 237, 131, 1, 5, 239, 174, 3, 87, 240, 150, 5, 228, 241, 122, 7, 208, 243, 165, 9, 73, 246, 77, 12, 96, 249, 137, 15, 9, 253, 71, 19, 26, 1, 85, 23, 84, 5, 105, 27, 108, 9, 48, 31, 24, 13, 96, 34, 27, 16, 193, 36, 74, 18, 55, 38, 145, 19, 192, 38, 243, 19, 117, 38, 134, 19, 125, 37, 111, 18, 7, 36, 216, 16, 65, 34, 238, 14, 91, 32, 222, 12, 115, 30, 198, 10, 159, 28, 185, 8, 223, 26, 181, 6, 24, 25, 166, 4, 53, 23, 126, 2, 32, 21, 54, 0, 216, 18, 225, 253, 100, 16, 160, 251, 209, 13, 160, 249, 51, 11, 9, 248, 152, 8, 245, 246, 18, 6, 107, 246, 172, 3, 95, 246, 114, 1, 187, 246, 107, 255, 89, 247, 154, 253, 16, 248, 255, 251, 189, 248, 154, 250, 65, 249, 104, 249, 133, 249, 100, 248, 130, 249, 140, 247, 54, 249, 212, 246, 167, 248, 37, 246, 209, 247, 99, 245, 171, 246, 117, 244, 53, 245, 87, 243, 116, 243, 18, 242, 117, 241, 186, 240, 77, 239, 102, 239, 20, 237, 46, 238, 232, 234, 35, 237, 236, 232, 79, 236, 63, 231, 183, 235, 252, 229, 91, 235, 53, 229, 57, 235, 245, 228, 74, 235, 57, 229, 136, 235, 250, 229, 236, 235, 49, 231, 114, 236, 218, 232, 40, 237, 246, 234, 26, 238, 127, 237, 78, 239, 99, 240, 192, 240, 131, 243, 86, 242, 174, 246, 237, 243, 177, 249, 88, 245, 87, 252, 106, 246, 114, 254, 1, 247, 226, 255, 16, 247, 153, 0, 156, 246, 164, 0, 192, 245, 26, 0, 166, 244, 41, 255, 120, 243, 251, 253, 100, 242, 195, 252, 142, 241, 174, 251, 15, 241, 219, 250, 247, 240, 93, 250, 66, 241, 55, 250, 221, 241, 88, 250, 160, 242, 155, 250, 91, 243, 218, 250, 236, 243, 250, 250, 62, 244, 237, 250, 81, 244, 191, 250, 55, 244, 133, 250, 8, 244, 91, 250, 228, 243, 92, 250, 232, 243, 150, 250, 39, 244, 15, 251, 174, 244, 192, 251, 124, 245, 154, 252, 136, 246, 138, 253, 192, 247, 118, 254, 13, 249, 76, 255, 93, 250, 250, 255, 153, 251, 112, 0, 177, 252, 168, 0, 157, 253, 156, 0, 88, 254, 77, 0, 229, 254, 199, 255, 79, 255, 19, 255, 174, 255, 70, 254, 32, 0, 109, 253, 202, 0, 148, 252, 193, 1, 194, 251, 8, 3, 255, 250, 147, 4, 83, 250, 70, 6, 195, 249, 253, 7, 88, 249, 148, 9, 21, 249, 230, 10, 253, 248, 224, 11, 17, 249, 114, 12, 84, 249, 160, 12, 202, 249, 122, 12, 122, 250, 47, 12, 125, 251, 7, 12, 252, 252, 68, 12, 19, 255, 17, 13, 200, 1, 122, 14, 7, 5, 105, 16, 163, 8, 171, 18, 95, 12, 247, 20, 250, 15, 5, 23, 54, 19, 153, 24, 226, 21, 139, 25, 222, 23, 204, 25, 29, 25, 98, 25, 163, 25, 103, 24, 133, 25, 253, 22, 225, 24, 78, 21, 219, 23, 125, 19, 152, 22, 175, 17, 53, 21, 250, 15, 200, 19, 103, 14, 89, 18, 232, 12, 225, 16, 103, 11, 81, 15, 205, 9, 160, 13, 16, 8, 213, 11, 50, 6, 8, 10, 62, 4, 94, 8, 60, 2, 250, 6, 56, 0, 253, 5, 63, 254, 118, 5, 89, 252, 100, 5, 150, 250, 183, 5, 253, 248, 84, 6, 152, 247, 25, 7, 106, 246, 225, 7, 115, 245, 142, 8, 181, 244, 6, 9, 43, 244, 55, 9, 211, 243, 30, 9, 164, 243, 187, 8, 143, 243, 13, 8, 120, 243, 13, 7, 67, 243, 184, 5, 228, 242, 18, 4, 93, 242, 37, 2, 190, 241, 3, 0, 26, 241, 193, 253, 137, 240, 121, 251, 24, 240, 74, 249, 215, 239, 86, 247, 202, 239, 183, 245, 246, 239, 133, 244, 90, 240, 208, 243, 242, 240, 158, 243, 189, 241, 237, 243, 179, 242, 193, 244, 211, 243, 18, 246, 32, 245, 220, 247, 171, 246, 25, 250, 124, 248, 186, 252, 141, 250, 159, 255, 206, 252, 152, 2, 28, 255, 115, 5, 70, 1, 248, 7, 27, 3, 244, 9, 104, 4, 60, 11, 16, 5, 184, 11, 9, 5, 99, 11, 93, 4, 74, 10, 42, 3, 141, 8, 151, 1, 85, 6, 209, 255, 208, 3, 0, 254, 46, 1, 70, 252, 155, 254, 187, 250, 46, 252, 107, 249, 248, 249, 78, 248, 250, 247, 80, 247, 37, 246, 71, 246, 93, 244, 17, 245, 136, 242, 153, 243, 153, 240, 216, 241, 150, 238, 219, 239, 146, 236, 182, 237, 165, 234, 139, 235, 235, 232, 120, 233, 117, 231, 154, 231, 78, 230, 3, 230, 120, 229, 193, 228, 232, 228, 214, 227, 144, 228, 57, 227, 93, 228, 224, 226, 59, 228, 187, 226, 25, 228, 185, 226, 232, 227, 206, 226, 156, 227, 241, 226, 49, 227, 27, 227, 164, 226, 68, 227, 246, 225, 118, 227, 57, 225, 186, 227, 121, 224, 47, 228, 199, 223, 247, 228, 47, 223, 42, 230, 185, 222, 213, 231, 102, 222, 238, 233, 59, 222, 94, 236, 61, 222, 2, 239, 109, 222, 179, 241, 203, 222, 73, 244, 88, 223, 164, 246, 21, 224, 172, 248, 3, 225, 86, 250, 35, 226, 164, 251, 119, 227, 178, 252, 11, 229, 186, 253, 254, 230, 252, 254, 114, 233, 169, 0, 115, 236, 221, 2, 251, 239, 149, 5, 233, 243, 174, 8, 15, 248, 238, 11, 54, 252, 21, 15, 33, 0, 229, 17, 163, 3, 50, 20, 153, 6, 231, 21, 237, 8, 254, 22, 154, 10, 134, 23, 173, 11, 153, 23, 61, 12, 91, 23, 103, 12, 238, 22, 76, 12, 118, 22, 7, 12, 15, 22, 177, 11, 200, 21, 88, 11, 161, 21, 3, 11, 135, 21, 166, 10, 101, 21, 58, 10, 44, 21, 191, 9, 216, 20, 62, 9, 108, 20, 213, 8, 238, 19, 160, 8, 102, 19, 193, 8, 217, 18, 72, 9, 81, 18, 57, 10, 217, 17, 141, 11, 117, 17, 46, 13, 44, 17, 255, 14, 255, 16, 217, 16, 235, 16, 155, 18, 237, 16, 38, 20, 1, 17, 99, 21, 28, 17, 65, 22, 55, 17, 187, 22, 68, 17, 207, 22, 45, 17, 114, 22, 214, 16, 160, 21, 45, 16, 88, 20, 48, 15, 165, 18, 236, 13, 149, 16, 114, 12, 61, 14, 216, 10, 184, 11, 46, 9, 37, 9, 135, 7, 164, 6, 239, 5, 85, 4, 107, 4, 86, 2, 3, 3, 187, 0, 186, 1, 150, 255, 143, 0, 241, 254, 132, 255, 213, 254, 153, 254, 66, 255, 209, 253, 50, 0, 63, 253, 162, 1, 242, 252, 134, 3, 243, 252, 198, 5, 56, 253, 62, 8, 176, 253, 191, 10, 55, 254, 25, 13, 160, 254, 28, 15, 191, 254, 155, 16, 114, 254, 121, 17, 167, 253, 168, 17, 93, 252, 42, 17, 164, 250, 15, 16, 155, 248, 119, 14, 101, 246, 138, 12, 40, 244, 111, 10, 5, 242, 78, 8, 24, 240, 69, 6, 113, 238, 102, 4, 20, 237, 187, 2, 246, 235, 64, 1, 247, 234, 226, 255, 245, 233, 137, 254, 216, 232, 38, 253, 147, 231, 179, 251, 37, 230, 59, 250, 154, 228, 205, 248, 8, 227, 128, 247, 135, 225, 98, 246, 47, 224, 126, 245, 20, 223, 218, 244, 70, 222, 111, 244, 200, 221, 50, 244, 152, 221, 18, 244, 174, 221, 1, 244, 253, 221, 236, 243, 120, 222, 195, 243, 18, 223, 123, 243, 191, 223, 11, 243, 117, 224, 113, 242, 50, 225, 180, 241, 246, 225, 223, 240, 204, 226, 3, 240, 199, 227, 48, 239, 255, 228, 118, 238, 143, 230, 220, 237, 134, 232, 107, 237, 226, 234, 36, 237, 150, 237, 9, 237, 136, 240, 26, 237, 153, 243, 88, 237, 171, 246, 193, 237, 156, 249, 86, 238, 84, 252, 21, 239, 194, 254, 0, 240, 225, 0, 24, 241, 191, 2, 99, 242, 130, 4, 246, 243, 97, 6, 239, 245, 138, 8, 94, 248, 28, 11, 68, 251, 25, 14, 140, 254, 110, 17, 14, 2, 235, 20, 158, 5, 89, 24, 3, 9, 123, 27, 14, 12, 36, 30, 149, 14, 46, 32, 123, 16, 138, 33, 178, 17, 55, 34, 58, 18, 70, 34, 33, 18, 207, 33, 125, 17, 241, 32, 105, 16, 205, 31, 254, 14, 127, 30, 84, 13, 30, 29, 132, 11, 177, 27, 158, 9, 52, 26, 163, 7, 156, 24, 148, 5, 221, 22, 115, 3, 245, 20, 76, 1, 227, 18, 53, 255, 180, 16, 74, 253, 109, 14, 173, 251, 29, 12, 116, 250, 211, 9, 173, 249, 154, 7, 89, 249, 126, 5, 108, 249, 136, 3, 208, 249, 193, 1, 106, 250, 41, 0, 27, 251, 197, 254, 197, 251, 141, 253, 81, 252, 130, 252, 173, 252, 156, 251, 206, 252, 212, 250, 173, 252, 24, 250, 65, 252, 81, 249, 128, 251, 109, 248, 103, 250, 100, 247, 248, 248, 60, 246, 64, 247, 252, 244, 78, 245, 181, 243, 55, 243, 120, 242, 22, 241, 83, 241, 4, 239, 81, 240, 30, 237, 122, 239, 125, 235, 210, 238, 57, 234, 90, 238, 100, 233, 18, 238, 14, 233, 247, 237, 65, 233, 4, 238, 0, 234, 58, 238, 67, 235, 158, 238, 0, 237, 64, 239, 45, 239, 39, 240, 183, 241, 81, 241, 128, 244, 175, 242, 96, 247, 38, 244, 45, 250, 147, 245, 189, 252, 209, 246, 231, 254, 191, 247, 140, 0, 75, 248, 155, 1, 102, 248, 15, 2, 26, 248, 241, 1, 122, 247, 88, 1, 161, 246, 100, 0, 173, 245, 59, 255, 191, 244, 253, 253, 244, 243, 200, 252, 96, 243, 182, 251, 17, 243, 215, 250, 5, 243, 52, 250, 42, 243, 194, 249, 101, 243, 112, 249, 155, 243, 45, 249, 186, 243, 238, 248, 189, 243, 182, 248, 166, 243, 137, 248, 128, 243, 118, 248, 94, 243, 138, 248, 80, 243, 206, 248, 104, 243, 70, 249, 177, 243, 236, 249, 48, 244, 185, 250, 228, 244, 158, 251, 198, 245, 137, 252, 202, 246, 104, 253, 228, 247, 40, 254, 2, 249, 183, 254, 25, 250, 11, 255, 28, 251, 31, 255, 3, 252, 245, 254, 206, 252, 150, 254, 132, 253, 15, 254, 52, 254, 112, 253, 240, 254, 202, 252, 199, 255, 41, 252, 199, 0, 148, 251, 249, 1, 19, 251, 89, 3, 167, 250, 218, 4, 83, 250, 104, 6, 26, 250, 236, 7, 254, 249, 80, 9, 1, 250, 127, 10, 38, 250, 103, 11, 116, 250, 4, 12, 234, 250, 88, 12, 138, 251, 126, 12, 101, 252, 165, 12, 149, 253, 0, 13, 52, 255, 180, 13, 75, 1, 209, 14, 213, 3, 78, 16, 188, 6, 18, 18, 215, 9, 244, 19, 252, 12, 200, 21, 251, 15, 95, 23, 169, 18, 147, 24, 229, 20, 76, 25, 151, 22, 124, 25, 178, 23, 41, 25, 58, 24, 100, 24, 61, 24, 66, 23, 203, 23, 224, 21, 249, 22, 86, 20, 220, 21, 189, 18, 138, 20, 39, 17, 24, 19, 147, 15, 142, 17, 248, 13, 237, 15, 79, 12, 54, 14, 142, 10, 113, 12, 181, 8, 173, 10, 199, 6, 4, 9, 208, 4, 147, 7, 217, 2, 114, 6, 241, 0, 181, 5, 36, 255, 96, 5, 121, 253, 109, 5, 250, 251, 208, 5, 171, 250, 112, 6, 145, 249, 50, 7, 170, 248, 250, 7, 245, 247, 174, 8, 109, 247, 56, 9, 12, 247, 139, 9, 205, 246, 159, 9, 161, 246, 104, 9, 117, 246, 221, 8, 55, 246, 245, 7, 220, 245, 177, 6, 95, 245, 25, 5, 196, 244, 59, 3, 22, 244, 42, 1, 97, 243, 252, 254, 184, 242, 203, 252, 39, 242, 177, 250, 188, 241, 204, 248, 127, 241, 53, 247, 118, 241, 3, 246, 163, 241, 77, 245, 4, 242, 32, 245, 151, 242, 133, 245, 91, 243, 116, 246, 81, 244, 230, 247, 133, 245, 207, 249, 254, 246, 31, 252, 186, 248, 185, 254, 172, 250, 119, 1, 181, 252, 48, 4, 183, 254, 183, 6, 139, 0, 225, 8, 18, 2, 136, 10, 49, 3, 146, 11, 212, 3, 239, 11, 244, 3, 159, 11, 155, 3, 174, 10, 215, 2, 53, 9, 193, 1, 83, 7, 119, 0, 40, 5, 23, 255, 212, 2, 179, 253, 114, 0, 99, 252, 30, 254, 48, 251, 233, 251, 18, 250, 215, 249, 249, 248, 226, 247, 208, 247, 255, 245, 134, 246, 38, 244, 21, 245, 87, 242, 127, 243, 153, 240, 206, 241, 248, 238, 18, 240, 131, 237, 95, 238, 69, 236, 198, 236, 68, 235, 87, 235, 131, 234, 32, 234, 252, 233, 37, 233, 163, 233, 99, 232, 107, 233, 218, 231, 68, 233, 128, 231, 24, 233, 75, 231, 217, 232, 48, 231, 123, 232, 39, 231, 245, 231, 41, 231, 74, 231, 55, 231, 129, 230, 89, 231, 163, 229, 154, 231, 192, 228, 6, 232, 234, 227, 166, 232, 42, 227, 130, 233, 141, 226, 161, 234, 26, 226, 5, 236, 209, 225, 162, 237, 177, 225, 110, 239, 187, 225, 87, 241, 239, 225, 71, 243, 79, 226, 43, 245, 222, 226, 240, 246, 158, 227, 137, 248, 140, 228, 238, 249, 165, 229, 42, 251, 238, 230, 93, 252, 125, 232, 181, 253, 106, 234, 83, 255, 196, 236, 73, 1, 142, 239, 154, 3, 187, 242, 52, 6, 44, 246, 250, 8, 189, 249, 201, 11, 68, 253, 123, 14, 152, 0, 230, 16, 150, 3, 238, 18, 36, 6, 133, 20, 51, 8, 162, 21, 188, 9, 76, 22, 198, 10, 145, 22, 90, 11, 135, 22, 136, 11, 72, 22, 103, 11, 235, 21, 10, 11, 133, 21, 138, 10, 32, 21, 246, 9, 184, 20, 84, 9, 67, 20, 163, 8, 187, 19, 234, 7, 27, 19, 51, 7, 99, 18, 142, 6, 157, 17, 22, 6, 211, 16, 226, 5, 21, 16, 5, 6, 108, 15, 139, 6, 224, 14, 116, 7, 122, 14, 181, 8, 58, 14, 60, 10, 32, 14, 241, 11, 40, 14, 180, 13, 76, 14, 109, 15, 131, 14, 1, 17, 200, 14, 89, 18, 14, 15, 106, 19, 75, 15, 35, 20, 110, 15, 120, 20, 102, 15, 90, 20, 37, 15, 199, 19, 162, 14, 192, 18, 216, 13, 79, 17, 206, 12, 133, 15, 140, 11, 121, 13, 38, 10, 66, 11, 172, 8, 253, 8, 47, 7, 198, 6, 190, 5, 186, 4, 101, 4, 249, 2, 43, 3, 157, 1, 21, 2, 189, 0, 37, 1, 101, 0, 91, 0, 149, 0, 185, 255, 69, 1, 72, 255, 111, 2, 17, 255, 8, 4, 27, 255, 251, 5, 93, 255, 46, 8, 197, 255, 121, 10, 57, 0, 184, 12, 160, 0, 193, 14, 224, 0, 113, 16, 224, 0, 169, 17, 141, 0, 83, 18, 222, 255, 103, 18, 207, 254, 232, 17, 104, 253, 227, 16, 187, 251, 112, 15, 222, 249, 168, 13, 234, 247, 166, 11, 246, 245, 135, 9, 25, 244, 103, 7, 97, 242, 92, 5, 208, 240, 115, 3, 93, 239, 171, 1, 247, 237, 255, 255, 143, 236, 102, 254, 32, 235, 222, 252, 165, 233, 103, 251, 38, 232, 13, 250, 172, 230, 217, 248, 70, 229, 213, 247, 1, 228, 6, 247, 235, 226, 111, 246, 12, 226, 12, 246, 106, 225, 210, 245, 6, 225, 183, 245, 220, 224, 168, 245, 231, 224, 150, 245, 30, 225, 109, 245, 118, 225, 35, 245, 233, 225, 176, 244, 115, 226, 21, 244, 17, 227, 87, 243, 203, 227, 126, 242, 168, 228, 153, 241, 172, 229, 183, 240, 222, 230, 230, 239, 59, 232, 50, 239, 199, 233, 160, 238, 130, 235, 55, 238, 109, 237, 247, 237, 129, 239, 223, 237, 181, 241, 243, 237, 0, 244, 51, 238, 80, 246, 162, 238, 151, 248, 65, 239, 202, 250, 14, 240, 222, 252, 5, 241, 212, 254, 38, 242, 189, 0, 125, 243, 191, 2, 34, 245, 248, 4, 37, 247, 117, 7, 141, 249, 56, 10, 78, 252, 55, 13, 85, 255, 90, 16, 128, 2, 130, 19, 171, 5, 141, 22, 174, 8, 90, 25, 99, 11, 196, 27, 171, 13, 182, 29, 115, 15, 33, 31, 172, 16, 1, 32, 86, 17, 91, 32, 114, 17, 62, 32, 12, 17, 190, 31, 53, 16, 240, 30, 3, 15, 235, 29, 142, 13, 190, 28, 235, 11, 108, 27, 35, 10, 242, 25, 62, 8, 77, 24, 68, 6, 124, 22, 63, 4, 128, 20, 63, 2, 102, 18, 92, 0, 58, 16, 178, 254, 14, 14, 84, 253, 241, 11, 83, 252, 242, 9, 185, 251, 27, 8, 128, 251, 111, 6, 159, 251, 240, 4, 5, 252, 159, 3, 154, 252, 118, 2, 70, 253, 113, 1, 241, 253, 137, 0, 135, 254, 187, 255, 247, 254, 253, 254, 52, 255, 66, 254, 46, 255, 127, 253, 214, 254, 166, 252, 36, 254, 174, 251, 20, 253, 144, 250, 175, 251, 75, 249, 255, 249, 230, 247, 22, 248, 110, 246, 9, 246, 243, 244, 239, 243, 136, 243, 226, 241, 60, 242, 254, 239, 29, 241, 98, 238, 53, 240, 40, 237, 137, 239, 105, 236, 25, 239, 46, 236, 228, 238, 121, 236, 232, 238, 69, 237, 37, 239, 136, 238, 167, 239, 57, 240, 104, 240, 72, 242, 102, 241, 159, 244, 144, 242, 30, 247, 209, 243, 166, 249, 21, 245, 17, 252, 68, 246, 61, 254, 74, 247, 14, 0, 22, 248, 109, 1, 154, 248, 75, 2, 208, 248, 168, 2, 185, 248, 135, 2, 93, 248, 250, 1, 204, 247, 18, 1, 23, 247, 234, 255, 83, 246, 155, 254, 152, 245, 65, 253, 243, 244, 245, 251, 113, 244, 204, 250, 12, 244, 202, 249, 187, 243, 240, 248, 115, 243, 54, 248, 42, 243, 153, 247, 222, 242, 24, 247, 143, 242, 182, 246, 69, 242, 122, 246, 10, 242, 109, 246, 232, 241, 148, 246, 232, 241, 241, 246, 19, 242, 127, 247, 108, 242, 57, 248, 243, 242, 16, 249, 164, 243, 244, 249, 121, 244, 210, 250, 103, 245, 152, 251, 103, 246, 56, 252, 107, 247, 168, 252, 111, 248, 227, 252, 116, 249, 234, 252, 125, 250, 194, 252, 141, 251, 119, 252, 164, 252, 20, 252, 195, 253, 166, 251, 229, 254, 56, 251, 7, 0, 212, 250, 39, 1, 126, 250, 73, 2, 58, 250, 110, 3, 10, 250, 146, 4, 242, 249, 181, 5, 243, 249, 208, 6, 22, 250, 219, 7, 92, 250, 209, 8, 197, 250, 169, 9, 79, 251, 97, 10, 247, 251, 3, 11, 197, 252, 171, 11, 208, 253, 119, 12, 44, 255, 118, 13, 227, 0, 181, 14, 251, 2, 49, 16, 105, 5, 221, 17, 21, 8, 166, 19, 225, 10, 112, 21, 170, 13, 33, 23, 79, 16, 155, 24, 172, 18, 194, 25, 170, 20, 132, 26, 54, 22, 214, 26, 69, 23, 182, 26, 209, 23, 43, 26, 225, 23, 67, 25, 126, 23, 16, 24, 185, 22, 168, 22, 169, 21, 27, 21, 98, 20, 111, 19, 238, 18, 166, 17, 89, 17, 191, 15, 170, 15, 185, 13, 234, 13, 152, 11, 37, 12, 101, 9, 110, 10, 48, 7, 221, 8, 9, 5, 137, 7, 0, 3, 130, 6, 35, 1, 214, 5, 125, 255, 136, 5, 17, 254, 145, 5, 226, 252, 230, 5, 235, 251, 115, 6, 40, 251, 37, 7, 146, 250, 228, 7, 34, 250, 152, 8, 206, 249, 50, 9, 146, 249, 162, 9, 102, 249, 215, 9, 58, 249, 193, 9, 255, 248, 83, 9, 171, 248, 135, 8, 49, 248, 94, 7, 142, 247, 225, 5, 195, 246, 30, 4, 216, 245, 39, 2, 221, 244, 18, 0, 227, 243, 248, 253, 1, 243, 244, 251, 68, 242, 38, 250, 188, 241, 174, 248, 115, 241, 165, 247, 108, 241, 23, 247, 168, 241, 12, 247, 37, 242, 128, 247, 228, 242, 109, 248, 230, 243, 202, 249, 45, 245, 141, 251, 176, 246, 161, 253, 96, 248, 237, 255, 45, 250, 81, 2, 255, 251, 171, 4, 191, 253, 214, 6, 87, 255, 179, 8, 179, 0, 38, 10, 196, 1, 24, 11, 126, 2, 126, 11, 218, 2, 87, 11, 214, 2, 167, 10, 121, 2, 123, 9, 209, 1, 230, 7, 238, 0, 0, 6, 227, 255, 229, 3, 193, 254, 179, 1, 151, 253, 131, 255, 104, 252, 94, 253, 48, 251, 76, 251, 233, 249, 77, 249, 144, 248, 99, 247, 36, 247, 143, 245, 171, 245, 214, 243, 43, 244, 68, 242, 175, 242, 223, 240, 67, 241, 176, 239, 242, 239, 189, 238, 198, 238, 6, 238, 195, 237, 136, 237, 238, 236, 53, 237, 69, 236, 1, 237, 199, 235, 220, 236, 110, 235, 178, 236, 48, 235, 121, 236, 10, 235, 36, 236, 251, 234, 174, 235, 5, 235, 24, 235, 44, 235, 99, 234, 113, 235, 153, 233, 213, 235, 197, 232, 87, 236, 241, 231, 242, 236, 42, 231, 159, 237, 120, 230, 91, 238, 226, 229, 37, 239, 108, 229, 253, 239, 25, 229, 232, 240, 235, 228, 231, 241, 233, 228, 248, 242, 20, 229, 26, 244, 113, 229, 71, 245, 252, 229, 122, 246, 179, 230, 172, 247, 147, 231, 225, 248, 152, 232, 43, 250, 212, 233, 156, 251, 89, 235, 71, 253, 55, 237, 51, 255, 113, 239, 96, 1, 4, 242, 198, 3, 220, 244, 84, 6, 229, 247, 244, 8, 253, 250, 140, 11, 6, 254, 3, 14, 224, 0, 62, 16, 114, 3, 40, 18, 169, 5, 180, 19, 116, 7, 216, 20, 202, 8, 148, 21, 170, 9, 241, 21, 31, 10, 254, 21, 54, 10, 204, 21, 2, 10, 107, 21, 154, 9, 232, 20, 11, 9, 68, 20, 95, 8, 125, 19, 157, 7, 149, 18, 202, 6, 145, 17, 244, 5, 121, 16, 39, 5, 90, 15, 120, 4, 68, 14, 250, 3, 71, 13, 193, 3, 116, 12, 219, 3, 213, 11, 79, 4, 110, 11, 26, 5, 63, 11, 52, 6, 68, 11, 143, 7, 116, 11, 21, 9, 198, 11, 179, 10, 45, 12, 79, 12, 162, 12, 213, 13, 27, 13, 53, 15, 142, 13, 88, 16, 237, 13, 47, 17, 38, 14, 165, 17, 43, 14, 178, 17, 237, 13, 79, 17, 101, 13, 130, 16, 149, 12, 85, 15, 129, 11, 216, 13, 52, 10, 29, 12, 193, 8, 59, 10, 61, 7, 80, 8, 191, 5, 126, 6, 86, 4, 226, 4, 19, 3, 151, 3, 255, 1, 176, 2, 32, 1, 54, 2, 118, 0, 42, 2, 3, 0, 138, 2, 200, 255, 81, 3, 196, 255, 125, 4, 246, 255, 254, 5, 82, 0, 194, 7, 208, 0, 177, 9, 93, 1, 173, 11, 231, 1, 152, 13, 92, 2, 82, 15, 169, 2, 192, 16, 194, 2, 204, 17, 153, 2, 99, 18, 38, 2, 125, 18, 102, 1, 25, 18, 90, 0, 58, 17, 13, 255, 240, 15, 134, 253, 80, 14, 217, 251, 111, 12, 24, 250, 107, 10, 81, 248, 92, 8, 143, 246, 85, 6, 209, 244, 95, 4, 21, 243, 122, 2, 87, 241, 172, 0, 153, 239, 245, 254, 222, 237, 86, 253, 44, 236, 217, 251, 142, 234, 131, 250, 12, 233, 94, 249, 176, 231, 111, 248, 132, 230, 185, 247, 139, 229, 56, 247, 202, 228, 229, 246, 65, 228, 178, 246, 238, 227, 144, 246, 201, 227, 111, 246, 206, 227, 68, 246, 247, 227, 2, 246, 70, 228, 163, 245, 186, 228, 37, 245, 85, 229, 138, 244, 22, 230, 214, 243, 249, 230, 18, 243, 250, 231, 73, 242, 20, 233, 133, 241, 63, 234, 207, 240, 117, 235, 49, 240, 179, 236, 175, 239, 246, 237, 77, 239, 67, 239, 13, 239, 158, 240, 247, 238, 12, 242, 14, 239, 143, 243, 82, 239, 36, 245, 197, 239, 204, 246, 97, 240, 129, 248, 32, 241, 66, 250, 3, 242, 25, 252, 18, 243, 21, 254, 95, 244, 66, 0, 250, 245, 174, 2, 235, 247, 89, 5, 49, 250, 60, 8, 192, 252, 72, 11, 133, 255, 105, 14, 101, 2, 132, 17, 66, 5, 129, 20, 254, 7, 67, 23, 121, 10, 180, 25, 156, 12, 190, 27, 81, 14, 81, 29, 137, 15, 104, 30, 63, 16, 3, 31, 119, 16, 43, 31, 56, 16, 236, 30, 150, 15, 87, 30, 164, 14, 120, 29, 112, 13, 79, 28, 5, 12, 225, 26, 110, 10, 55, 25, 181, 8, 86, 23, 229, 6, 75, 21, 12, 5, 39, 19, 62, 3, 253, 16, 142, 1, 222, 14, 21, 0, 220, 12, 229, 254, 8, 11, 7, 254, 107, 9, 129, 253, 7, 8, 82, 253, 218, 6, 111, 253, 225, 5, 204, 253, 18, 5, 85, 254, 100, 4, 248, 254, 208, 3, 161, 255, 78, 3, 60, 0, 215, 2, 187, 0, 95, 2, 11, 1, 214, 1, 23, 1, 43, 1, 211, 0, 82, 0, 53, 0, 69, 255, 62, 255, 253, 253, 242, 253, 128, 252, 95, 252, 216, 250, 146, 250, 19, 249, 161, 248, 70, 247, 166, 246, 134, 245, 193, 244, 231, 243, 14, 243, 124, 242, 166, 241, 80, 241, 158, 240, 109, 240, 254, 239, 211, 239, 203, 239, 132, 239, 4, 240, 127, 239, 166, 240, 196, 239, 174, 241, 78, 240, 19, 243, 23, 241, 201, 244, 19, 242, 186, 246, 51, 243, 206, 248, 100, 244, 233, 250, 150, 245, 239, 252, 183, 246, 199, 254, 181, 247, 85, 0, 135, 248, 136, 1, 31, 249, 83, 2, 120, 249, 172, 2, 143, 249, 149, 2, 102, 249, 21, 2, 3, 249, 59, 1, 118, 248, 29, 0, 203, 247, 214, 254, 16, 247, 123, 253, 81, 246, 34, 252, 143, 245, 214, 250, 208, 244, 158, 249, 14, 244, 125, 248, 78, 243, 118, 247, 146, 242, 141, 246, 226, 241, 201, 245, 70, 241, 49, 245, 199, 240, 205, 244, 109, 240, 163, 244, 62, 240, 182, 244, 65, 240, 3, 245, 116, 240, 131, 245, 216, 240, 40, 246, 105, 241, 227, 246, 31, 242, 168, 247, 244, 242, 100, 248, 227, 243, 13, 249, 235, 244, 153, 249, 10, 246, 1, 250, 60, 247, 68, 250, 126, 248, 99, 250, 203, 249, 99, 250, 28, 251, 72, 250, 103, 252, 30, 250, 165, 253, 235, 249, 208, 254, 183, 249, 226, 255, 137, 249, 215, 0, 100, 249, 180, 1, 78, 249, 127, 2, 80, 249, 62, 3, 107, 249, 249, 3, 164, 249, 182, 4, 251, 249, 119, 5, 111, 250, 59, 6, 252, 250, 4, 7, 161, 251, 217, 7, 103, 252, 200, 8, 92, 253, 223, 9, 146, 254, 42, 11, 19, 0, 177, 12, 231, 1, 113, 14, 8, 4, 92, 16, 103, 6, 102, 18, 241, 8, 121, 20, 139, 11, 124, 22, 25, 14, 90, 24, 128, 16, 250, 25, 166, 18, 73, 27, 114, 20, 51, 28, 209, 21, 175, 28, 186, 22, 189, 28, 48, 23, 96, 28, 55, 23, 161, 27, 220, 22, 143, 26, 47, 22, 53, 25, 64, 21, 152, 23, 26, 20, 190, 21, 197, 18, 172, 19, 74, 17, 107, 17, 176, 15, 8, 15, 5, 14, 148, 12, 87, 12, 33, 10, 187, 10, 194, 7, 68, 9, 138, 5, 5, 8, 137, 3, 13, 7, 203, 1, 100, 6, 85, 0, 12, 6, 41, 255, 2, 6, 64, 254, 60, 6, 147, 253, 169, 6, 23, 253, 60, 7, 198, 252, 225, 7, 150, 252, 135, 8, 126, 252, 30, 9, 112, 252, 143, 9, 91, 252, 202, 9, 44, 252, 189, 9, 213, 251, 91, 9, 76, 251, 163, 8, 139, 250, 149, 7, 150, 249, 57, 6, 114, 248, 157, 4, 43, 247, 211, 2, 212, 245, 244, 0, 128, 244, 30, 255, 71, 243, 106, 253, 59, 242, 241, 251, 107, 241, 199, 250, 229, 240, 248, 249, 172, 240, 139, 249, 194, 240, 127, 249, 37, 241, 215, 249, 213, 241, 145, 250, 207, 242, 168, 251, 14, 244, 20, 253, 135, 245, 196, 254, 43, 247, 163, 0, 234, 248, 152, 2, 175, 250, 138, 4, 102, 252, 91, 6, 254, 253, 244, 7, 101, 255, 57, 9, 139, 0, 25, 10, 106, 1, 133, 10, 249, 1, 120, 10, 52, 2, 242, 9, 29, 2, 254, 8, 187, 1, 173, 7, 26, 1, 18, 6, 71, 0, 72, 4, 79, 255, 99, 2, 53, 254, 112, 0, 255, 252, 123, 254, 174, 251, 135, 252, 71, 250, 154, 250, 207, 248, 187, 248, 79, 247, 243, 246, 207, 245, 74, 245, 92, 244, 201, 243, 255, 242, 123, 242, 194, 241, 100, 241, 172, 240, 135, 240, 193, 239, 222, 239, 2, 239, 99, 239, 111, 238, 11, 239, 4, 238, 201, 238, 192, 237, 144, 238, 161, 237, 87, 238, 167, 237, 20, 238, 208, 237, 192, 237, 27, 238, 88, 237, 128, 238, 218, 236, 253, 238, 75, 236, 135, 239, 173, 235, 24, 240, 8, 235, 169, 240, 100, 234, 51, 241, 198, 233, 177, 241, 53, 233, 35, 242, 183, 232, 134, 242, 82, 232, 224, 242, 11, 232, 60, 243, 232, 231, 160, 243, 235, 231, 21, 244, 20, 232, 162, 244, 95, 232, 72, 245, 205, 232, 8, 246, 89, 233, 230, 246, 6, 234, 238, 247, 228, 234, 45, 249, 2, 236, 176, 250, 107, 237, 125, 252, 40, 239, 149, 254, 58, 241, 236, 0, 149, 243, 119, 3, 43, 246, 35, 6, 229, 248, 215, 8, 171, 251, 123, 11, 96, 254, 250, 13, 234, 0, 60, 16, 49, 3, 48, 18, 34, 5, 200, 19, 177, 6, 250, 20, 216, 7, 199, 21, 154, 8, 50, 22, 255, 8, 69, 22, 23, 9, 7, 22, 237, 8, 127, 21, 141, 8, 178, 20, 255, 7, 168, 19, 74, 7, 106, 18, 120, 6, 4, 17, 146, 5, 136, 15, 167, 4, 9, 14, 200, 3, 156, 12, 7, 3, 81, 11, 119, 2, 57, 10, 41, 2, 99, 9, 40, 2, 209, 8, 121, 2, 138, 8, 26, 3, 136, 8, 4, 4, 193, 8, 45, 5, 43, 9, 132, 6, 188, 9, 247, 7, 106, 10, 116, 9, 39, 11, 233, 10, 228, 11, 66, 12, 140, 12, 105, 13, 12, 13, 74, 14, 80, 13, 214, 14, 75, 13, 1, 15, 246, 12, 204, 14, 80, 12, 56, 14, 92, 11, 80, 13, 38, 10, 34, 12, 187, 8, 199, 10, 48, 7, 85, 9, 155, 5, 233, 7, 16, 4, 153, 6, 163, 2, 121, 5, 101, 1, 152, 4, 95, 0, 1, 4, 151, 255, 183, 3, 11, 255, 190, 3, 193, 254, 27, 4, 187, 254, 206, 4, 244, 254, 210, 5, 105, 255, 31, 7, 12, 0, 164, 8, 211, 0, 79, 10, 170, 1, 6, 12, 127, 2, 179, 13, 63, 3, 60, 15, 218, 3, 136, 16, 64, 4, 130, 17, 105, 4, 25, 18, 75, 4, 63, 18, 225, 3, 245, 17, 43, 3, 64, 17, 44, 2, 41, 16, 238, 0, 196, 14, 125, 255, 36, 13, 226, 253, 93, 11, 38, 252, 128, 9, 81, 250, 148, 7, 99, 248, 164, 5, 100, 246, 181, 3, 92, 244, 205, 1, 84, 242, 247, 255, 87, 240, 58, 254, 113, 238, 160, 252, 172, 236, 52, 251, 20, 235, 254, 249, 177, 233, 254, 248, 132, 232, 52, 248, 147, 231, 154, 247, 220, 230, 40, 247, 93, 230, 210, 246, 22, 230, 142, 246, 4, 230, 81, 246, 39, 230, 17, 246, 124, 230, 200, 245, 255, 230, 111, 245, 168, 231, 6, 245, 112, 232, 138, 244, 76, 233, 0, 244, 53, 234, 106, 243, 33, 235, 209, 242, 9, 236, 58, 242, 236, 236, 170, 241, 193, 237, 41, 241, 140, 238, 190, 240, 78, 239, 109, 240, 11, 240, 60, 240, 207, 240, 45, 240, 163, 241, 67, 240, 144, 242, 123, 240, 153, 243, 211, 240, 192, 244, 73, 241, 10, 246, 223, 241, 131, 247, 161, 242, 55, 249, 157, 243, 51, 251, 227, 244, 127, 253, 120, 246, 24, 0, 96, 248, 250, 2, 148, 250, 21, 6, 5, 253, 86, 9, 163, 255, 163, 12, 80, 2, 229, 15, 247, 4, 0, 19, 122, 7, 222, 21, 190, 9, 107, 24, 174, 11, 145, 26, 58, 13, 71, 28, 90, 14, 133, 29, 13, 15, 74, 30, 87, 15, 154, 30, 65, 15, 123, 30, 217, 14, 243, 29, 40, 14, 8, 29, 53, 13, 192, 27, 9, 12, 37, 26, 170, 10, 72, 24, 35, 9, 60, 22, 131, 7, 17, 20, 215, 5, 224, 17, 53, 4, 190, 15, 177, 2, 187, 13, 92, 1, 232, 11, 71, 0, 84, 10, 126, 255, 3, 9, 255, 254, 245, 7, 204, 254, 40, 7, 223, 254, 147, 6, 43, 255, 49, 6, 163, 255, 244, 5, 55, 0, 209, 5, 216, 0, 186, 5, 115, 1, 155, 5, 244, 1, 95, 5, 69, 2, 245, 4, 86, 2, 77, 4, 28, 2, 97, 3, 142, 1, 44, 2, 177, 0, 177, 0, 138, 255, 253, 254, 37, 254, 26, 253, 150, 252, 26, 251, 241, 250, 18, 249, 80, 249, 24, 247, 197, 247, 65, 245, 101, 246, 159, 243, 62, 245, 62, 242, 91, 244, 38, 241, 193, 243, 88, 240, 117, 243, 220, 239, 126, 243, 182, 239, 221, 243, 227, 239, 146, 244, 98, 240, 154, 245, 42, 241, 232, 246, 44, 242, 107, 248, 90, 243, 18, 250, 159, 244, 198, 251, 232, 245, 114, 253, 36, 247, 250, 254, 65, 248, 71, 0, 48, 249, 73, 1, 233, 249, 240, 1, 101, 250, 54, 2, 157, 250, 29, 2, 148, 250, 171, 1, 78, 250, 236, 0, 211, 249, 245, 255, 45, 249, 213, 254, 102, 248, 155, 253, 130, 247, 82, 252, 134, 246, 3, 251, 119, 245, 181, 249, 92, 244, 109, 248, 63, 243, 53, 247, 42, 242, 21, 246, 41, 241, 23, 245, 70, 240, 69, 244, 140, 239, 166, 243, 3, 239, 65, 243, 175, 238, 20, 243, 149, 238, 27, 243, 179, 238, 81, 243, 10, 239, 173, 243, 152, 239, 36, 244, 92, 240, 174, 244, 83, 241, 62, 245, 117, 242, 203, 245, 186, 243, 80, 246, 25, 245, 196, 246, 135, 246, 38, 247, 249, 247, 114, 247, 99, 249, 171, 247, 187, 250, 212, 247, 251, 251, 239, 247, 27, 253, 3, 248, 25, 254, 21, 248, 243, 254, 41, 248, 172, 255, 72, 248, 69, 0, 112, 248, 202, 0, 169, 248, 69, 1, 242, 248, 190, 1, 76, 249, 61, 2, 182, 249, 199, 2, 48, 250, 96, 3, 187, 250, 22, 4, 97, 251, 249, 4, 51, 252, 22, 6, 63, 253, 123, 7, 144, 254, 41, 9, 44, 0, 31, 11, 18, 2, 84, 13, 61, 4, 183, 15, 155, 6, 51, 18, 25, 9, 176, 20, 159, 11, 23, 23, 19, 14, 78, 25, 90, 16, 66, 27, 94, 18, 225, 28, 15, 20, 27, 30, 97, 21, 230, 30, 79, 22, 61, 31, 216, 22, 32, 31, 3, 23, 147, 30, 219, 22, 154, 29, 102, 22, 58, 28, 170, 21, 118, 26, 171, 20, 92, 24, 112, 19, 1, 22, 9, 18, 118, 19, 125, 16, 207, 16, 220, 14, 36, 14, 57, 13, 138, 11, 166, 11, 22, 9, 54, 10, 217, 6, 250, 8, 225, 4, 254, 7, 53, 3, 74, 7, 219, 1, 224, 6, 211, 0, 188, 6, 22, 0, 216, 6, 159, 255, 40, 7, 96, 255, 159, 7, 78, 255, 46, 8, 89, 255, 197, 8, 108, 255, 80, 9, 116, 255, 186, 9, 93, 255, 240, 9, 19, 255, 230, 9, 142, 254, 144, 9, 199, 253, 235, 8, 190, 252, 255, 7, 122, 251, 210, 6, 6, 250, 119, 5, 114, 248, 254, 3, 208, 246, 123, 2, 51, 245, 1, 1, 176, 243, 162, 255, 91, 242, 108, 254, 64, 241, 107, 253, 105, 240, 166, 252, 220, 239, 38, 252, 162, 239, 239, 251, 192, 239, 9, 252, 57, 240, 121, 252, 13, 241, 58, 253, 53, 242, 70, 254, 164, 243, 144, 255, 72, 245, 8, 1, 17, 247, 155, 2, 234, 248, 52, 4, 186, 250, 182, 5, 112, 252, 12, 7, 249, 253, 31, 8, 74, 255, 223, 8, 84, 0, 64, 9, 19, 1, 62, 9, 131, 1, 219, 8, 164, 1, 33, 8, 119, 1, 26, 7, 7, 1, 214, 5, 89, 0, 98, 4, 117, 255, 201, 2, 92, 254, 18, 1, 19, 253, 71, 255, 166, 251, 108, 253, 28, 250, 140, 251, 131, 248, 179, 249, 234, 246, 234, 247, 91, 245, 62, 246, 229, 243, 185, 244, 146, 242, 97, 243, 105, 241, 60, 242, 113, 240, 73, 241, 172, 239, 133, 240, 31, 239, 237, 239, 201, 238, 119, 239, 172, 238, 29, 239, 197, 238, 214, 238, 14, 239, 154, 238, 126, 239, 97, 238, 13, 240, 37, 238, 178, 240, 226, 237, 93, 241, 148, 237, 7, 242, 61, 237, 167, 242, 220, 236, 53, 243, 117, 236, 173, 243, 12, 236, 9, 244, 165, 235, 75, 244, 72, 235, 118, 244, 248, 234, 139, 244, 184, 234, 146, 244, 138, 234, 148, 244, 116, 234, 155, 244, 114, 234, 175, 244, 134, 234, 213, 244, 175, 234, 24, 245, 240, 234, 130, 245, 79, 235, 38, 246, 219, 235, 20, 247, 163, 236, 86, 248, 178, 237, 244, 249, 15, 239, 236, 251, 188, 240, 55, 254, 182, 242, 198, 0, 238, 244, 134, 3, 84, 247, 96, 6, 211, 249, 59, 9, 82, 252, 254, 11, 184, 254, 148, 14, 240, 0, 234, 16, 235, 2, 238, 18, 156, 4, 149, 20, 251, 5, 214, 21, 6, 7, 171, 22, 192, 7, 21, 23, 47, 8, 24, 23, 91, 8, 182, 22, 71, 8, 246, 21, 249, 7, 225, 20, 117, 7, 133, 19, 196, 6, 242, 17, 239, 5, 61, 16, 1, 5, 122, 14, 11, 4, 193, 12, 30, 3, 37, 11, 77, 2, 183, 9, 171, 1, 137, 8, 65, 1, 162, 7, 30, 1, 10, 7, 68, 1, 196, 6, 179, 1, 206, 6, 103, 2, 31, 7, 85, 3, 174, 7, 117, 4, 106, 8, 183, 5, 68, 9, 10, 7, 37, 10, 92, 8, 248, 10, 151, 9, 164, 11, 168, 10, 23, 12, 125, 11, 66, 12, 10, 12, 28, 12, 73, 12, 163, 11, 59, 12, 216, 10, 229, 11, 196, 9, 84, 11, 116, 8, 148, 10, 249, 6, 181, 9, 100, 5, 200, 8, 200, 3, 218, 7, 57, 2, 251, 6, 197, 0, 54, 6, 122, 255, 149, 5, 98, 254, 35, 5, 135, 253, 228, 4, 246, 252, 229, 4, 180, 252, 44, 5, 197, 252, 188, 5, 40, 253, 146, 6, 211, 253, 167, 7, 186, 254, 241, 8, 204, 255, 92, 10, 243, 0, 215, 11, 31, 2, 76, 13, 58, 3, 163, 14, 49, 4, 198, 15, 245, 4, 164, 16, 122, 5, 48, 17, 183, 5, 99, 17, 167, 5, 59, 17, 72, 5, 186, 16, 157, 4, 236, 15, 170, 3, 219, 14, 118, 2, 145, 13, 8, 1, 28, 12, 101, 255, 130, 10, 146, 253, 200, 8, 149, 251, 246, 6, 125, 249, 22, 5, 83, 247, 50, 3, 37, 245, 82, 1, 6, 243, 133, 255, 254, 240, 212, 253, 28, 239, 71, 252, 107, 237, 228, 250, 240, 235, 176, 249, 182, 234, 170, 248, 192, 233, 210, 247, 20, 233, 35, 247, 176, 232, 150, 246, 146, 232, 38, 246, 181, 232, 203, 245, 15, 233, 124, 245, 150, 233, 52, 245, 62, 234, 239, 244, 251, 234, 165, 244, 194, 235, 87, 244, 135, 236, 1, 244, 67, 237, 165, 243, 240, 237, 74, 243, 139, 238, 242, 242, 18, 239, 160, 242, 133, 239, 89, 242, 234, 239, 29, 242, 67, 240, 241, 241, 150, 240, 213, 241, 236, 240, 201, 241, 77, 241, 206, 241, 193, 241, 229, 241, 79, 242, 14, 242, 3, 243, 80, 242, 240, 243, 185, 242, 39, 245, 87, 243, 184, 246, 57, 244, 170, 248, 103, 245, 253, 250, 231, 246, 174, 253, 181, 248, 174, 0, 201, 250, 238, 3, 18, 253, 83, 7, 126, 255, 196, 10, 243, 1, 41, 14, 93, 4, 103, 17, 164, 6, 103, 20, 180, 8, 21, 23, 128, 10, 99, 25, 250, 11, 63, 27, 29, 13, 160, 28, 232, 13, 134, 29, 94, 14, 239, 29, 131, 14, 220, 29, 91, 14, 82, 29, 230, 13, 84, 28, 42, 13, 241, 26, 44, 12, 61, 25, 248, 10, 73, 23, 151, 9, 45, 21, 24, 8, 0, 19, 142, 6, 215, 16, 11, 5, 200, 14, 162, 3, 228, 12, 99, 2, 55, 11, 93, 1, 208, 9, 152, 0, 181, 8, 24, 0, 229, 7, 222, 255, 96, 7, 225, 255, 28, 7, 26, 0, 12, 7, 130, 0, 34, 7, 9, 1, 73, 7, 159, 1, 110, 7, 50, 2, 121, 7, 173, 2, 86, 7, 254, 2, 245, 6, 22, 3, 74, 6, 238, 2, 83, 5, 134, 2, 14, 4, 223, 1, 132, 2, 3, 1, 189, 0, 252, 255, 205, 254, 212, 254, 190, 252, 153, 253, 165, 250, 88, 252, 148, 248, 31, 251, 156, 246, 248, 249, 202, 244, 241, 248, 46, 243, 15, 248, 213, 241, 93, 247, 202, 240, 232, 246, 27, 240, 181, 246, 205, 239, 207, 246, 226, 239, 50, 247, 84, 240, 224, 247, 26, 241, 205, 248, 36, 242, 237, 249, 96, 243, 49, 251, 186, 244, 131, 252, 31, 246, 208, 253, 122, 247, 3, 255, 184, 248, 7, 0, 205, 249, 208, 0, 172, 250, 85, 1, 78, 251, 145, 1, 176, 251, 132, 1, 205, 251, 50, 1, 170, 251, 163, 0, 76, 251, 227, 255, 180, 250, 246, 254, 229, 249, 228, 253, 230, 248, 177, 252, 188, 247, 102, 251, 113, 246, 11, 250, 17, 245, 168, 248, 171, 243, 73, 247, 76, 242, 249, 245, 2, 241, 194, 244, 218, 239, 175, 243, 225, 238, 199, 242, 30, 238, 15, 242, 156, 237, 139, 241, 98, 237, 59, 241, 116, 237, 27, 241, 209, 237, 41, 241, 115, 238, 93, 241, 87, 239, 174, 241, 114, 240, 24, 242, 182, 241, 145, 242, 21, 243, 17, 243, 131, 244, 146, 243, 243, 245, 15, 244, 88, 247, 133, 244, 167, 248, 242, 244, 217, 249, 88, 245, 234, 250, 185, 245, 214, 251, 21, 246, 158, 252, 112, 246, 68, 253, 202, 246, 203, 253, 35, 247, 55, 254, 126, 247, 141, 254, 219, 247, 214, 254, 57, 248, 24, 255, 155, 248, 95, 255, 2, 249, 183, 255, 115, 249, 50, 0, 251, 249, 230, 0, 171, 250, 227, 1, 146, 251, 54, 3, 184, 252, 228, 4, 38, 254, 233, 6, 219, 255, 63, 9, 210, 1, 213, 11, 0, 4, 151, 14, 85, 6, 113, 17, 188, 8, 70, 20, 31, 11, 255, 22, 107, 13, 134, 25, 141, 15, 197, 27, 118, 17, 169, 29, 23, 19, 36, 31, 106, 20, 44, 32, 107, 21, 187, 32, 27, 22, 207, 32, 125, 22, 105, 32, 145, 22, 139, 31, 88, 22, 57, 30, 213, 21, 129, 28, 11, 21, 113, 26, 3, 20, 26, 24, 198, 18, 147, 21, 96, 17, 241, 18, 224, 15, 78, 16, 89, 14, 190, 13, 222, 12, 83, 11, 125, 11, 32, 9, 72, 10, 52, 7, 75, 9, 151, 5, 140, 8, 80, 4, 14, 8, 93, 3, 207, 7, 186, 2, 202, 7, 92, 2, 248, 7, 52, 2, 77, 8, 50, 2, 188, 8, 64, 2, 50, 9, 72, 2, 158, 9, 54, 2, 237, 9, 248, 1, 18, 10, 128, 1, 3, 10, 201, 0, 190, 9, 208, 255, 68, 9, 151, 254, 151, 8, 37, 253, 190, 7, 136, 251, 194, 6, 206, 249, 173, 5, 3, 248, 136, 4, 57, 246, 97, 3, 129, 244, 64, 2, 232, 242, 50, 1, 125, 241, 63, 0, 80, 240, 113, 255, 112, 239, 210, 254, 234, 238, 110, 254, 201, 238, 78, 254, 14, 239, 118, 254, 184, 239, 229, 254, 191, 240, 151, 255, 23, 242, 128, 0, 175, 243, 147, 1, 113, 245, 193, 2, 73, 247, 243, 3, 33, 249, 23, 5, 230, 250, 27, 6, 134, 252, 238, 6, 240, 253, 131, 7, 30, 255, 214, 7, 4, 0, 226, 7, 160, 0, 165, 7, 241, 0, 39, 7, 247, 0, 107, 6, 181, 0, 121, 5, 43, 0, 84, 4, 93, 255, 1, 3, 80, 254, 134, 1, 10, 253, 234, 255, 153, 251, 53, 254, 8, 250, 110, 252, 103, 248, 160, 250, 195, 246, 218, 248, 44, 245, 36, 247, 175, 243, 137, 245, 89, 242, 17, 244, 55, 241, 193, 242, 82, 240, 158, 241, 177, 239, 170, 240, 84, 239, 227, 239, 60, 239, 69, 239, 100, 239, 203, 238, 191, 239, 114, 238, 71, 240, 48, 238, 239, 240, 0, 238, 169, 241, 219, 237, 105, 242, 188, 237, 34, 243, 160, 237, 205, 243, 133, 237, 98, 244, 105, 237, 218, 244, 79, 237, 52, 245, 54, 237, 112, 245, 31, 237, 143, 245, 11, 237, 148, 245, 248, 236, 130, 245, 232, 236, 94, 245, 218, 236, 45, 245, 208, 236, 249, 244, 200, 236, 202, 244, 197, 236, 173, 244, 204, 236, 183, 244, 232, 236, 250, 244, 39, 237, 138, 245, 155, 237, 117, 246, 78, 238, 194, 247, 72, 239, 117, 249, 141, 240, 136, 251, 28, 242, 239, 253, 235, 243, 151, 0, 238, 245, 111, 3, 20, 248, 96, 6, 74, 250, 81, 9, 127, 252, 40, 12, 160, 254, 211, 14, 157, 0, 59, 17, 107, 2, 81, 19, 0, 4, 6, 21, 86, 5, 84, 22, 105, 6, 54, 23, 58, 7, 167, 23, 200, 7, 171, 23, 19, 8, 65, 23, 27, 8, 114, 22, 227, 7, 74, 21, 110, 7, 217, 19, 197, 6, 48, 18, 242, 5, 102, 16, 2, 5, 143, 14, 5, 4, 193, 12, 14, 3, 17, 11, 44, 2, 143, 9, 112, 1, 76, 8, 232, 0, 85, 7, 155, 0, 175, 6, 143, 0, 91, 6, 198, 0, 87, 6, 61, 1, 155, 6, 236, 1, 26, 7, 206, 2, 195, 7, 214, 3, 131, 8, 242, 4, 68, 9, 18, 6, 239, 9, 35, 7, 114, 10, 23, 8, 188, 10, 224, 8, 194, 10, 120, 9, 126, 10, 221, 9, 237, 9, 15, 10, 22, 9, 16, 10, 0, 8, 227, 9, 181, 6, 143, 9, 65, 5, 27, 9, 178, 3, 144, 8, 22, 2, 249, 7, 126, 0, 92, 7, 248, 254, 198, 6, 148, 253, 62, 6, 99, 252, 208, 5, 118, 251, 138, 5, 218, 250, 119, 5, 151, 250, 159, 5, 176, 250, 3, 6, 33, 251, 165, 6, 226, 251, 126, 7, 230, 252, 131, 8, 28, 254, 167, 9, 112, 255, 217, 10, 206, 0, 8, 12, 35, 2, 37, 13, 93, 3, 30, 14, 108, 4, 231, 14, 67, 5, 117, 15, 217, 5, 196, 15, 40, 6, 207, 15, 44, 6, 152, 15, 229, 5, 34, 15, 82, 5, 113, 14, 116, 4, 136, 13, 77, 3, 103, 12, 222, 1, 20, 11, 49, 0, 148, 9, 81, 254, 239, 7, 69, 252, 46, 6, 33, 250, 89, 4, 243, 247, 124, 2, 204, 245, 163, 0, 187, 243, 219, 254, 207, 241, 43, 253, 26, 240, 157, 251, 166, 238, 56, 250, 122, 237, 254, 248, 156, 236, 242, 247, 12, 236, 20, 247, 197, 235, 96, 246, 193, 235, 208, 245, 246, 235, 98, 245, 88, 236, 13, 245, 219, 236, 203, 244, 114, 237, 152, 244, 18, 238, 110, 244, 175, 238, 74, 244, 68, 239, 42, 244, 199, 239, 15, 244, 52, 240, 246, 243, 140, 240, 226, 243, 206, 240, 206, 243, 251, 240, 186, 243, 22, 241, 166, 243, 34, 241, 145, 243, 35, 241, 125, 243, 32, 241, 105, 243, 34, 241, 87, 243, 54, 241, 77, 243, 108, 241, 82, 243, 218, 241, 117, 243, 148, 242, 199, 243, 170, 243, 84, 244, 38, 245, 38, 245, 13, 247, 66, 246, 93, 249, 168, 247, 11, 252, 81, 249, 10, 255, 50, 251, 67, 2, 61, 253, 163, 5, 98, 255, 17, 9, 140, 1, 114, 12, 175, 3, 175, 15, 184, 5, 176, 18, 153, 7, 98, 21, 70, 9, 180, 23, 183, 10, 156, 25, 230, 11, 19, 27, 208, 12, 17, 28, 114, 13, 147, 28, 202, 13, 154, 28, 214, 13, 42, 28, 149, 13, 74, 27, 13, 13, 10, 26, 65, 12, 120, 24, 58, 11, 168, 22, 4, 10, 178, 20, 174, 8, 169, 18, 73, 7, 163, 16, 230, 5, 181, 14, 151, 4, 241, 12, 107, 3, 105, 11, 110, 2, 35, 10, 168, 1, 39, 9, 30, 1, 115, 8, 208, 0, 5, 8, 189, 0, 212, 7, 223, 0, 209, 7, 43, 1, 237, 7, 150, 1, 18, 8, 15, 2, 45, 8, 135, 2, 41, 8, 237, 2, 246, 7, 56, 3, 137, 7, 96, 3, 216, 6, 95, 3, 226, 5, 52, 3, 166, 4, 222, 2, 43, 3, 93, 2, 121, 1, 183, 1, 156, 255, 239, 0, 157, 253, 15, 0, 140, 251, 29, 255, 119, 249, 31, 254, 112, 247, 33, 253, 135, 245, 43, 252, 207, 243, 73, 251, 90, 242, 137, 250, 56, 241, 248, 249, 117, 240, 160, 249, 22, 240, 133, 249, 29, 240, 169, 249, 130, 240, 11, 250, 62, 241, 161, 250, 65, 242, 98, 251, 120, 243, 63, 252, 211, 244, 44, 253, 60, 246, 23, 254, 160, 247, 245, 254, 241, 248, 183, 255, 30, 250, 81, 0, 29, 251, 189, 0, 228, 251, 248, 0, 111, 252, 254, 0, 189, 252, 209, 0, 200, 252, 115, 0, 146, 252, 230, 255, 24, 252, 40, 255, 93, 251, 60, 254, 101, 250, 39, 253, 56, 249, 239, 251, 224, 247, 153, 250, 107, 246, 46, 249, 230, 244, 185, 247, 97, 243, 68, 246, 238, 241, 219, 244, 158, 240, 136, 243, 127, 239, 87, 242, 160, 238, 80, 241, 9, 238, 119, 240, 190, 237, 209, 239, 193, 237, 94, 239, 14, 238, 29, 239, 159, 238, 12, 239, 106, 239, 36, 239, 100, 240, 96, 239, 128, 241, 184, 239, 178, 242, 41, 240, 236, 243, 170, 240, 35, 245, 55, 241, 78, 246, 205, 241, 99, 247, 105, 242, 95, 248, 9, 243, 60, 249, 169, 243, 249, 249, 70, 244, 150, 250, 220, 244, 17, 251, 107, 245, 111, 251, 239, 245, 177, 251, 105, 246, 223, 251, 215, 246, 254, 251, 62, 247, 26, 252, 157, 247, 67, 252, 253, 247, 140, 252, 108, 248, 11, 253, 247, 248, 208, 253, 174, 249, 234, 254, 158, 250, 96, 0, 202, 251, 53, 2, 57, 253, 100, 4, 227, 254, 227, 6, 196, 0, 161, 9, 210, 2, 138, 12, 255, 4, 139, 15, 60, 7, 138, 18, 120, 9, 112, 21, 167, 11, 37, 24, 184, 13, 150, 26, 159, 15, 177, 28, 81, 17, 105, 30, 201, 18, 183, 31, 0, 20, 146, 32, 243, 20, 247, 32, 156, 21, 225, 32, 250, 21, 81, 32, 8, 22, 72, 31, 195, 21, 211, 29, 51, 21, 8, 28, 97, 20, 244, 25, 83, 19, 173, 23, 26, 18, 71, 21, 194, 16, 219, 18, 95, 15, 124, 16, 255, 13, 63, 14, 180, 12, 52, 12, 139, 11, 102, 10, 142, 10, 223, 8, 197, 9, 161, 7, 51, 9, 172, 6, 218, 8, 249, 5, 182, 8, 131, 5, 193, 8, 58, 5, 243, 8, 13, 5, 61, 9, 233, 4, 146, 9, 188, 4, 230, 9, 117, 4, 42, 10, 7, 4, 88, 10, 103, 3, 104, 10, 144, 2, 86, 10, 129, 1, 32, 10, 57, 0, 195, 9, 195, 254, 63, 9, 30, 253, 152, 8, 88, 251, 210, 7, 127, 249, 244, 6, 156, 247, 2, 6, 194, 245, 6, 5, 254, 243, 9, 4, 98, 242, 21, 3, 1, 241, 54, 2, 236, 239, 123, 1, 49, 239, 238, 0, 216, 238, 152, 0, 230, 238, 126, 0, 87, 239, 157, 0, 37, 240, 243, 0, 70, 241, 119, 1, 168, 242, 33, 2, 59, 244, 227, 2, 236, 245, 177, 3, 167, 247, 124, 4, 89, 249, 56, 5, 243, 250, 218, 5, 103, 252, 86, 6, 169, 253, 166, 6, 177, 254, 199, 6, 122, 255, 180, 6, 255, 255, 111, 6, 59, 0, 244, 5, 45, 0, 69, 5, 212, 255, 94, 4, 47, 255, 67, 3, 67, 254, 248, 1, 26, 253, 130, 0, 192, 251, 231, 254, 63, 250, 48, 253, 169, 248, 103, 251, 16, 247, 153, 249, 133, 245, 210, 247, 24, 244, 29, 246, 216, 242, 134, 244, 209, 241, 17, 243, 6, 241, 200, 241, 126, 240, 172, 240, 57, 240, 192, 239, 48, 240, 2, 239, 94, 240, 111, 238, 186, 240, 5, 238, 57, 241, 187, 237, 207, 241, 143, 237, 114, 242, 122, 237, 25, 243, 121, 237, 183, 243, 135, 237, 70, 244, 162, 237, 193, 244, 196, 237, 35, 245, 235, 237, 104, 245, 19, 238, 144, 245, 56, 238, 155, 245, 87, 238, 137, 245, 110, 238, 95, 245, 122, 238, 34, 245, 125, 238, 214, 244, 120, 238, 136, 244, 108, 238, 67, 244, 94, 238, 26, 244, 92, 238, 33, 244, 114, 238, 108, 244, 177, 238, 11, 245, 34, 239, 5, 246, 207, 239, 99, 247, 188, 240, 34, 249, 232, 241, 58, 251, 78, 243, 162, 253, 232, 244, 70, 0, 172, 246, 22, 3, 141, 248, 252, 5, 127, 250, 226, 8, 114, 252, 176, 11, 93, 254, 80, 14, 47, 0, 181, 16, 224, 1, 206, 18, 106, 3, 146, 20, 196, 4, 247, 21, 232, 5, 249, 22, 211, 6, 145, 23, 127, 7, 188, 23, 232, 7, 127, 23, 12, 8, 222, 22, 239, 7, 229, 21, 146, 7, 160, 20, 254, 6, 32, 19, 61, 6, 123, 17, 92, 5, 196, 15, 105, 4, 16, 14, 117, 3, 115, 12, 144, 2, 251, 10, 200, 1, 184, 9, 38, 1, 179, 8, 184, 0, 241, 7, 128, 0, 116, 7, 129, 0, 58, 7, 188, 0, 61, 7, 44, 1, 114, 7, 204, 1, 202, 7, 141, 2, 52, 8, 103, 3, 159, 8, 76, 4, 248, 8, 48, 5, 49, 9, 11, 6, 61, 9, 210, 6, 21, 9, 126, 7, 179, 8, 11, 8, 17, 8, 115, 8, 54, 7, 181, 8, 33, 6, 206, 8, 219, 4, 194, 8, 111, 3, 147, 8, 231, 1, 70, 8, 81, 0, 225, 7, 188, 254, 107, 7, 54, 253, 238, 6, 211, 251, 118, 6, 163, 250, 15, 6, 185, 249, 200, 5, 31, 249, 169, 5, 221, 248, 184, 5, 243, 248, 248, 5, 95, 249, 104, 6, 26, 250, 2, 7, 24, 251, 193, 7, 75, 252, 154, 8, 161, 253, 132, 9, 9, 255, 115, 10, 113, 0, 92, 11, 201, 1, 49, 12, 4, 3, 235, 12, 19, 4, 127, 13, 237, 4, 232, 13, 139, 5, 35, 14, 233, 5, 42, 14, 0, 6, 254, 13, 204, 5, 155, 13, 75, 5, 254, 12, 123, 4, 41, 12, 95, 3, 26, 11, 254, 1, 214, 9, 97, 0, 99, 8, 149, 254, 199, 6, 165, 252, 11, 5, 168, 250, 59, 3, 174, 248, 99, 1, 201, 246, 146, 255, 8, 245, 208, 253, 120, 243, 39, 252, 34, 242, 162, 250, 11, 241, 69, 249, 55, 240, 21, 248, 163, 239, 18, 247, 76, 239, 61, 246, 41, 239, 147, 245, 53, 239, 17, 245, 102, 239, 178, 244, 176, 239, 113, 244, 10, 240, 77, 244, 107, 240, 64, 244, 203, 240, 67, 244, 35, 241, 85, 244, 111, 241, 112, 244, 168, 241, 145, 244, 204, 241, 176, 244, 218, 241, 203, 244, 212, 241, 223, 244, 186, 241, 232, 244, 146, 241, 230, 244, 97, 241, 216, 244, 43, 241, 193, 244, 255, 240, 164, 244, 235, 240, 139, 244, 1, 241, 132, 244, 89, 241, 158, 244, 255, 241, 228, 244, 3, 243, 98, 245, 108, 244, 28, 246, 58, 246, 22, 247, 107, 248, 78, 248, 246, 250, 189, 249, 204, 253, 95, 251, 218, 0, 38, 253, 14, 4, 8, 255, 80, 7, 245, 0, 138, 10, 229, 2, 164, 13, 200, 4, 140, 16, 145, 6, 49, 19, 56, 8, 134, 21, 179, 9, 129, 23, 253, 10, 23, 25, 11, 12, 66, 26, 217, 12, 252, 26, 98, 13, 66, 27, 159, 13, 21, 27, 144, 13, 128, 26, 55, 13, 139, 25, 155, 12, 71, 24, 194, 11, 197, 22, 185, 10, 24, 21, 141, 9, 86, 19, 77, 8, 146, 17, 11, 7, 222, 15, 214, 5, 72, 14, 185, 4, 222, 12, 194, 3, 166, 11, 246, 2, 167, 10, 94, 2, 225, 9, 250, 1, 82, 9, 201, 1, 244, 8, 200, 1, 189, 8, 239, 1, 157, 8, 52, 2, 134, 8, 142, 2, 104, 8, 242, 2, 49, 8, 84, 3, 217, 7, 172, 3, 82, 7, 242, 3, 151, 6, 31, 4, 163, 5, 44, 4, 116, 4, 22, 4, 12, 3, 218, 3, 114, 1, 119, 3, 175, 255, 239, 2, 202, 253, 70, 2, 207, 251, 128, 1, 208, 249, 164, 0, 216, 247, 188, 255, 249, 245, 208, 254, 72, 244, 239, 253, 213, 242, 38, 253, 175, 241, 129, 252, 225, 240, 6, 252, 112, 240, 187, 251, 92, 240, 161, 251, 161, 240, 183, 251, 56, 241, 249, 251, 21, 242, 98, 252, 42, 243, 229, 252, 102, 244, 126, 253, 186, 245, 32, 254, 20, 247, 192, 254, 102, 248, 84, 255, 162, 249, 211, 255, 186, 250, 53, 0, 169, 251, 119, 0, 103, 252, 148, 0, 235, 252, 137, 0, 51, 253, 79, 0, 55, 253, 232, 255, 244, 252, 77, 255, 106, 252, 126, 254, 156, 251, 126, 253, 145, 250, 79, 252, 84, 249, 249, 250, 243, 247, 130, 249, 125, 246, 247, 247, 5, 245, 98, 246, 156, 243, 207, 244, 81, 242, 78, 243, 50, 241, 230, 241, 71, 240, 161, 240, 154, 239, 138, 239, 44, 239, 160, 238, 1, 239, 235, 237, 17, 239, 105, 237, 92, 239, 25, 237, 218, 239, 249, 236, 127, 240, 6, 237, 68, 241, 59, 237, 30, 242, 150, 237, 5, 243, 17, 238, 238, 243, 163, 238, 208, 244, 74, 239, 165, 245, 255, 239, 103, 246, 186, 240, 15, 247, 120, 241, 156, 247, 47, 242, 13, 248, 223, 242, 97, 248, 130, 243, 157, 248, 22, 244, 197, 248, 154, 244, 222, 248, 14, 245, 240, 248, 117, 245, 8, 249, 215, 245, 55, 249, 64, 246, 146, 249, 189, 246, 42, 250, 92, 247, 13, 251, 38, 248, 71, 252, 35, 249, 218, 253, 86, 250, 201, 255, 194, 251, 11, 2, 99, 253, 153, 4, 51, 255, 101, 7, 42, 1, 89, 10, 64, 3, 99, 13, 106, 5, 110, 16, 153, 7, 99, 19, 194, 9, 49, 22, 218, 11, 197, 24, 212, 13, 16, 27, 169, 15, 8, 29, 80, 17, 162, 30, 191, 18, 215, 31, 240, 19, 158, 32, 221, 20, 241, 32, 126, 21, 212, 32, 209, 21, 70, 32, 213, 21, 81, 31, 141, 21, 255, 29, 254, 20, 97, 28, 51, 20, 139, 26, 55, 19, 141, 24, 25, 18, 124, 22, 232, 16, 103, 20, 177, 15, 96, 18, 132, 14, 121, 16, 112, 13, 187, 14, 124, 12, 46, 13, 177, 11, 214, 11, 19, 11, 181, 10, 165, 10, 201, 9, 100, 10, 11, 9, 77, 10, 114, 8, 89, 10, 240, 7, 128, 10, 118, 7, 185, 10, 249, 6, 252, 10, 106, 6, 61, 11, 191, 5, 116, 11, 240, 4, 156, 11, 244, 3, 171, 11, 201, 2, 156, 11, 110, 1, 106, 11, 230, 255, 18, 11, 55, 254, 149, 10, 105, 252, 244, 9, 134, 250, 51, 9, 154, 248, 88, 8, 180, 246, 104, 7, 225, 244, 110, 6, 51, 243, 119, 5, 189, 241, 144, 4, 141, 240, 194, 3, 176, 239, 24, 3, 44, 239, 154, 2, 7, 239, 72, 2, 64, 239, 38, 2, 208, 239, 48, 2, 175, 240, 100, 2, 209, 241, 187, 2, 38, 243, 45, 3, 161, 244, 177, 3, 49, 246, 60, 4, 197, 247, 195, 4, 79, 249, 63, 5, 194, 250, 167, 5, 18, 252, 244, 5, 56, 253, 31, 6, 42, 254, 36, 6, 225, 254, 0, 6, 85, 255, 172, 5, 129, 255, 35, 5, 97, 255, 99, 4, 246, 254, 109, 3, 67, 254, 63, 2, 81, 253, 223, 0, 44, 252, 86, 255, 224, 250, 168, 253, 127, 249, 227, 251, 25, 248, 20, 250, 188, 246, 69, 248, 117, 245, 131, 246, 80, 244, 215, 244, 84, 243, 75, 243, 137, 242, 229, 241, 241, 241, 170, 240, 140, 241, 157, 239, 87, 241, 190, 238, 79, 241, 12, 238, 109, 241, 135, 237, 170, 241, 43, 237, 253, 241, 246, 236, 95, 242, 227, 236, 200, 242, 236, 236, 48, 243, 14, 237, 144, 243, 65, 237, 225, 243, 129, 237, 32, 244, 196, 237, 71, 244, 7, 238, 84, 244, 69, 238, 74, 244, 120, 238, 43, 244, 157, 238, 249, 243, 181, 238, 185, 243, 190, 238, 114, 243, 186, 238, 44, 243, 173, 238, 247, 242, 162, 238, 229, 242, 166, 238, 7, 243, 197, 238, 108, 243, 11, 239, 34, 244, 125, 239, 48, 245, 36, 240, 151, 246, 2, 241, 87, 248, 22, 242, 107, 250, 95, 243, 197, 252, 215, 244, 87, 255, 119, 246, 15, 2, 52, 248, 223, 4, 6, 250, 177, 7, 225, 251, 114, 10, 187, 253, 18, 13, 136, 255, 131, 15, 63, 1, 183, 17, 216, 2, 164, 19, 76, 4, 65, 21, 146, 5, 133, 22, 160, 6, 103, 23, 112, 7, 229, 23, 255, 7, 255, 23, 72, 8, 184, 23, 78, 8, 25, 23, 18, 8, 48, 22, 158, 7, 9, 21, 252, 6, 182, 19, 54, 6, 71, 18, 93, 5, 205, 16, 126, 4, 90, 15, 166, 3, 247, 13, 226, 2, 180, 12, 59, 2, 152, 11, 189, 1, 168, 10, 105, 1, 235, 9, 69, 1, 94, 9, 82, 1, 0, 9, 142, 1, 202, 8, 244, 1, 176, 8, 127, 2, 168, 8, 39, 3, 164, 8, 224, 3, 152, 8, 164, 4, 119, 8, 106, 5, 56, 8, 38, 6, 209, 7, 208, 6, 61, 7, 99, 7, 121, 6, 214, 7, 133, 5, 38, 8, 100, 4, 81, 8, 28, 3, 86, 8, 181, 1, 56, 8, 56, 0, 251, 7, 179, 254, 162, 7, 45, 253, 52, 7, 185, 251, 192, 6, 101, 250, 78, 6, 67, 249, 234, 5, 96, 248, 156, 5, 196, 247, 111, 5, 119, 247, 101, 5, 124, 247, 130, 5, 207, 247, 198, 5, 108, 248, 47, 6, 73, 249, 187, 6, 92, 250, 98, 7, 152, 251, 27, 8, 237, 252, 226, 8, 78, 254, 169, 9, 174, 255, 105, 10, 252, 0, 27, 11, 48, 2, 180, 11, 64, 3, 50, 12, 34, 4, 141, 12, 207, 4, 192, 12, 62, 5, 195, 12, 104, 5, 148, 12, 71, 5, 43, 12, 216, 4, 134, 11, 31, 4, 166, 10, 31, 3, 140, 9, 229, 1, 61, 8, 123, 0, 191, 6, 239, 254, 31, 5, 80, 253, 104, 3, 171, 251, 164, 1, 15, 250, 225, 255, 134, 248, 40, 254, 28, 247, 130, 252, 216, 245, 249, 250, 192, 244, 147, 249, 214, 243, 83, 248, 27, 243, 62, 247, 141, 242, 85, 246, 40, 242, 152, 245, 232, 241, 6, 245, 198, 241, 156, 244, 189, 241, 88, 244, 199, 241, 54, 244, 218, 241, 47, 244, 241, 241, 62, 244, 4, 242, 95, 244, 15, 242, 136, 244, 12, 242, 181, 244, 251, 241, 223, 244, 219, 241, 2, 245, 172, 241, 25, 245, 113, 241, 35, 245, 47, 241, 30, 245, 233, 240, 12, 245, 167, 240, 240, 244, 116, 240, 209, 244, 97, 240, 187, 244, 124, 240, 186, 244, 214, 240, 216, 244, 125, 241, 31, 245, 122, 242, 151, 245, 210, 243, 67, 246, 134, 245, 39, 247, 146, 247, 65, 248, 237, 249, 143, 249, 140, 252, 11, 251, 95, 255, 172, 252, 85, 2, 106, 254, 93, 5, 58, 0, 102, 8, 18, 2, 92, 11, 233, 3, 49, 14, 178, 5, 213, 16, 101, 7, 61, 19, 247, 8, 94, 21, 97, 10, 44, 23, 152, 11, 158, 24, 147, 12, 173, 25, 77, 13, 84, 26, 191, 13, 149, 26, 232, 13, 115, 26, 201, 13, 249, 25, 103, 13, 48, 25, 200, 12, 39, 24, 250, 11, 237, 22, 7, 11, 142, 21, 253, 9, 28, 20, 233, 8, 163, 18, 217, 7, 52, 17, 217, 6, 215, 15, 242, 5, 149, 14, 44, 5, 118, 13, 140, 4, 123, 12, 22, 4, 167, 11, 203, 3, 246, 10, 172, 3, 98, 10, 177, 3, 225, 9, 215, 3, 106, 9, 21, 4, 241, 8, 100, 4, 108, 8, 185, 4, 207, 7, 11, 5, 16, 7, 84, 5, 43, 6, 136, 5, 26, 5, 162, 5, 220, 3, 155, 5, 114, 2, 112, 5, 226, 0, 31, 5, 50, 255, 170, 4, 103, 253, 17, 4, 140, 251, 89, 3, 173, 249, 135, 2, 215, 247, 165, 1, 26, 246, 191, 0, 134, 244, 224, 255, 39, 243, 16, 255, 11, 242, 89, 254, 58, 241, 194, 253, 184, 240, 80, 253, 137, 240, 4, 253, 169, 240, 226, 252, 19, 241, 231, 252, 191, 241, 14, 253, 162, 242, 83, 253, 175, 243, 174, 253, 219, 244, 25, 254, 24, 246, 137, 254, 89, 247, 249, 254, 146, 248, 95, 255, 184, 249, 182, 255, 194, 250, 248, 255, 167, 251, 28, 0, 95, 252, 33, 0, 224, 252, 254, 255, 35, 253, 171, 255, 38, 253, 37, 255, 229, 252, 106, 254, 102, 252, 123, 253, 176, 251, 91, 252, 201, 250, 16, 251, 191, 249, 163, 249, 157, 248, 31, 248, 114, 247, 142, 246, 72, 246, 251, 244, 43, 245, 114, 243, 36, 244, 252, 241, 61, 243, 162, 240, 125, 242, 109, 239, 230, 241, 98, 238, 122, 241, 132, 237, 58, 241, 214, 236, 37, 241, 89, 236, 53, 241, 14, 236, 104, 241, 243, 235, 183, 241, 4, 236, 28, 242, 63, 236, 144, 242, 158, 236, 11, 243, 25, 237, 136, 243, 173, 237, 255, 243, 80, 238, 108, 244, 253, 238, 205, 244, 171, 239, 29, 245, 87, 240, 95, 245, 251, 240, 145, 245, 147, 241, 184, 245, 29, 242, 214, 245, 152, 242, 238, 245, 7, 243, 11, 246, 109, 243, 55, 246, 212, 243, 129, 246, 69, 244, 247, 246, 205, 244, 167, 247, 114, 245, 155, 248, 62, 246, 219, 249, 54, 247, 106, 251, 94, 248, 71, 253, 183, 249, 107, 255, 64, 251, 205, 1, 245, 252, 103, 4, 208, 254, 39, 7, 201, 0, 255, 9, 217, 2, 223, 12, 247, 4, 183, 15, 24, 7, 119, 18, 49, 9, 19, 21, 57, 11, 123, 23, 39, 13, 167, 25, 243, 14, 140, 27, 145, 16, 28, 29, 249, 17, 82, 30, 32, 19, 37, 31, 4, 20, 145, 31, 156, 20, 153, 31, 231, 20, 70, 31, 235, 20, 156, 30, 171, 20, 169, 29, 49, 20, 119, 28, 136, 19, 20, 27, 187, 18, 141, 25, 215, 17, 240, 23, 231, 16, 76, 22, 250, 15, 169, 20, 23, 15, 19, 19, 69, 14, 145, 17, 144, 13, 44, 16, 251, 12, 229, 14, 137, 12, 189, 13, 61, 12, 179, 12, 20, 12, 193, 11, 13, 12, 224, 10, 33, 12, 9, 10, 73, 12, 49, 9, 124, 12, 78, 8, 180, 12, 88, 7, 230, 12, 73, 6, 10, 13, 27, 5, 26, 13, 205, 3, 16, 13, 93, 2, 230, 12, 206, 0, 152, 12, 40, 255, 40, 12, 107, 253, 150, 11, 160, 251, 228, 10, 208, 249, 23, 10, 5, 248, 53, 9, 78, 246, 70, 8, 183, 244, 86, 7, 78, 243, 109, 6, 30, 242, 151, 5, 50, 241, 216, 4, 145, 240, 56, 4, 61, 240, 189, 3, 54, 240, 102, 3, 125, 240, 54, 3, 9, 241, 43, 3, 212, 241, 63, 3, 209, 242, 112, 3, 248, 243, 181, 3, 60, 245, 9, 4, 144, 246, 98, 4, 233, 247, 185, 4, 60, 249, 9, 5, 126, 250, 74, 5, 165, 251, 119, 5, 169, 252, 135, 5, 127, 253, 116, 5, 32, 254, 55, 5, 132, 254, 200, 4, 170, 254, 37, 4, 144, 254, 76, 3, 59, 254, 63, 2, 176, 253, 1, 1, 247, 252, 154, 255, 25, 252, 16, 254, 32, 251, 109, 252, 23, 250, 188, 250, 9, 249, 7, 249, 254, 247, 89, 247, 255, 246, 187, 245, 20, 246, 53, 244, 66, 245, 204, 242, 141, 244, 136, 241, 247, 243, 108, 240, 130, 243, 123, 239, 42, 243, 182, 238, 240, 242, 31, 238, 207, 242, 178, 237, 194, 242, 109, 237, 198, 242, 76, 237, 210, 242, 74, 237, 227, 242, 98, 237, 243, 242, 143, 237, 253, 242, 198, 237, 0, 243, 5, 238, 247, 242, 65, 238, 228, 242, 123, 238, 197, 242, 169, 238, 155, 242, 205, 238, 108, 242, 228, 238, 56, 242, 238, 238, 7, 242, 238, 238, 224, 241, 233, 238, 209, 241, 235, 238, 228, 241, 250, 238, 40, 242, 33, 239, 168, 242, 105, 239, 107, 243, 216, 239, 120, 244, 114, 240, 206, 245, 59, 241, 109, 247, 52, 242, 79, 249, 91, 243, 109, 251, 173, 244, 188, 253, 36, 246, 46, 0, 188, 247, 185, 2, 106, 249, 79, 5, 39, 251, 227, 7, 235, 252, 102, 10, 170, 254, 205, 12, 94, 0, 12, 15, 254, 1, 25, 17, 129, 3, 233, 18, 221, 4, 113, 20, 8, 6, 171, 21, 253, 6, 148, 22, 181, 7, 38, 23, 46, 8, 104, 23, 104, 8, 90, 23, 100, 8, 4, 23, 43, 8, 112, 22, 196, 7, 166, 21, 57, 7, 179, 20, 149, 6, 160, 19, 228, 5, 124, 18, 47, 5, 80, 17, 131, 4, 38, 16, 231, 3, 9, 15, 98, 3, 252, 13, 253, 2, 8, 13, 189, 2, 47, 12, 165, 2, 113, 11, 180, 2, 204, 10, 234, 2, 59, 10, 66, 3, 183, 9, 182, 3, 55, 9, 63, 4, 179, 8, 213, 4, 37, 8, 112, 5, 132, 7, 7, 6, 202, 6, 147, 6, 244, 5, 10, 7, 0, 5, 105, 7, 239, 3, 171, 7, 193, 2, 204, 7, 124, 1, 205, 7, 35, 0, 173, 7, 192, 254, 112, 7, 88, 253, 26, 7, 245, 251, 178, 6, 165, 250, 63, 6, 113, 249, 204, 5, 104, 248, 97, 5, 145, 247, 4, 5, 244, 246, 192, 4, 151, 246, 152, 4, 125, 246, 143, 4, 166, 246, 167, 4, 15, 247, 224, 4, 178, 247, 57, 5, 137, 248, 173, 5, 139, 249, 56, 6, 173, 250, 209, 6, 229, 251, 118, 7, 40, 253, 28, 8, 106, 254, 191, 8, 162, 255, 86, 9, 199, 0, 220, 9, 209, 1, 75, 10, 179, 2, 154, 10, 103, 3, 193, 10, 228, 3, 184, 10, 39, 4, 123, 10, 46, 4, 6, 10, 247, 3, 88, 9, 135, 3, 116, 8, 227, 2, 93, 7, 17, 2, 27, 6, 25, 1, 182, 4, 4, 0, 54, 3, 219, 254, 166, 1, 167, 253, 16, 0, 112, 252, 125, 254, 64, 251, 246, 252, 27, 250, 130, 251, 9, 249, 39, 250, 13, 248, 237, 248, 42, 247, 216, 247, 98, 246, 234, 246, 180, 245, 38, 246, 32, 245, 138, 245, 163, 244, 23, 245, 58, 244, 200, 244, 224, 243, 154, 244, 145, 243, 137, 244, 73, 243, 143, 244, 3, 243, 164, 244, 191, 242, 196, 244, 122, 242, 232, 244, 49, 242, 10, 245, 230, 241, 39, 245, 153, 241, 58, 245, 74, 241, 66, 245, 254, 240, 62, 245, 184, 240, 47, 245, 126, 240, 25, 245, 89, 240, 3, 245, 86, 240, 247, 244, 128, 240, 252, 244, 225, 240, 28, 245, 132, 241, 96, 245, 109, 242, 205, 245, 161, 243, 103, 246, 31, 245, 50, 247, 230, 246, 46, 248, 239, 248, 88, 249, 50, 251, 171, 250, 165, 253, 36, 252, 59, 0, 190, 253, 233, 2, 108, 255, 163, 5, 40, 1, 92, 8, 234, 2, 4, 11, 168, 4, 148, 13, 90, 6, 251, 15, 245, 7, 49, 18, 113, 9, 41, 20, 193, 10, 219, 21, 223, 11, 63, 23, 194, 12, 80, 24, 101, 13, 15, 25, 198, 13, 122, 25, 231, 13, 149, 25, 202, 13, 103, 25, 117, 13, 246, 24, 241, 12, 75, 24, 73, 12, 112, 23, 135, 11, 113, 22, 181, 10, 86, 21, 221, 9, 43, 20, 8, 9, 248, 18, 64, 8, 199, 17, 140, 7, 157, 16, 243, 6, 130, 15, 123, 6, 118, 14, 39, 6, 122, 13, 246, 5, 142, 12, 229, 5, 172, 11, 243, 5, 207, 10, 21, 6, 239, 9, 71, 6, 6, 9, 129, 6, 15, 8, 186, 6, 3, 7, 235, 6, 224, 5, 13, 7, 160, 4, 24, 7, 71, 3, 8, 7, 213, 1, 216, 6, 75, 0, 135, 6, 175, 254, 22, 6, 4, 253, 133, 5, 81, 251, 215, 4, 160, 249, 17, 4, 251, 247, 59, 3, 109, 246, 93, 2, 0, 245, 128, 1, 193, 243, 171, 0, 181, 242, 234, 255, 231, 241, 64, 255, 88, 241, 178, 254, 13, 241, 68, 254, 3, 241, 248, 253, 55, 241, 206, 253, 167, 241, 196, 253, 74, 242, 214, 253, 26, 243, 0, 254, 11, 244, 59, 254, 21, 245, 131, 254, 47, 246, 208, 254, 78, 247, 29, 255, 106, 248, 101, 255, 120, 249, 159, 255, 112, 250, 197, 255, 72, 251, 207, 255, 250, 251, 181, 255, 128, 252, 112, 255, 213, 252, 251, 254, 248, 252, 87, 254, 235, 252, 130, 253, 173, 252, 126, 252, 69, 252, 83, 251, 183, 251, 6, 250, 10, 251, 159, 248, 69, 250, 39, 247, 112, 249, 170, 245, 147, 248, 45, 244, 181, 247, 188, 242, 222, 246, 94, 241, 19, 246, 26, 240, 87, 245, 249, 238, 178, 244, 253, 237, 36, 244, 44, 237, 175, 243, 137, 236, 82, 243, 19, 236, 12, 243, 202, 235, 219, 242, 172, 235, 189, 242, 181, 235, 173, 242, 227, 235, 167, 242, 46, 236, 169, 242, 147, 236, 177, 242, 8, 237, 186, 242, 137, 237, 196, 242, 16, 238, 207, 242, 151, 238, 217, 242, 27, 239, 229, 242, 153, 239, 241, 242, 13, 240, 255, 242, 119, 240, 22, 243, 218, 240, 60, 243, 57, 241, 121, 243, 155, 241, 215, 243, 11, 242, 95, 244, 143, 242, 26, 245, 45, 243, 15, 246, 239, 243, 65, 247, 216, 244, 179, 248, 237, 245, 99, 250, 45, 247, 82, 252, 154, 248, 118, 254, 50, 250, 200, 0, 238, 251, 66, 3, 204, 253, 217, 5, 195, 255, 128, 8, 203, 1, 46, 11, 224, 3, 214, 13, 246, 5, 110, 16, 6, 8, 233, 18, 6, 10, 60, 21, 237, 11, 94, 23, 175, 13, 67, 25, 69, 15, 228, 26, 166, 16, 59, 28, 201, 17, 67, 29, 172, 18, 251, 29, 77, 19, 99, 30, 173, 19, 122, 30, 207, 19, 73, 30, 186, 19, 214, 29, 117, 19, 36, 29, 10, 19, 58, 28, 127, 18, 37, 27, 223, 17, 241, 25, 54, 17, 166, 24, 140, 16, 78, 23, 233, 15, 241, 21, 86, 15, 150, 20, 218, 14, 65, 19, 121, 14, 246, 17, 52, 14, 181, 16, 13, 14, 125, 15, 255, 13, 74, 14, 7, 14, 25, 13, 30, 14, 227, 11, 65, 14, 166, 10, 101, 14, 93, 9, 135, 14, 5, 8, 157, 14, 156, 6, 161, 14, 33, 5, 141, 14, 147, 3, 94, 14, 246, 1, 17, 14, 74, 0, 165, 13, 150, 254, 25, 13, 220, 252, 112, 12, 35, 251, 173, 11, 116, 249, 213, 10, 216, 247, 239, 9, 90, 246, 4, 9, 2, 245, 28, 8, 217, 243, 62, 7, 228, 242, 114, 6, 42, 242, 190, 5, 175, 241, 37, 5, 117, 241, 171, 4, 120, 241, 81, 4, 184, 241, 24, 4, 48, 242, 251, 3, 216, 242, 247, 3, 170, 243, 12, 4, 158, 244, 48, 4, 171, 245, 96, 4, 200, 246, 150, 4, 235, 247, 203, 4, 13, 249, 251, 4, 36, 250, 28, 5, 38, 251, 40, 5, 12, 252, 23, 5, 208, 252, 225, 4, 109, 253, 129, 4, 222, 253, 242, 3, 33, 254, 52, 3, 55, 254, 71, 2, 31, 254, 47, 1, 223, 253, 242, 255, 119, 253, 147, 254, 238, 252, 28, 253, 75, 252, 149, 251, 146, 251, 4, 250, 202, 250, 116, 248, 249, 249, 237, 246, 39, 249, 118, 245, 87, 248, 21, 244, 143, 247, 210, 242, 210, 246, 176, 241, 35, 246, 180, 240, 132, 245, 223, 239, 243, 244, 50, 239, 115, 244, 171, 238, 255, 243, 73, 238, 150, 243, 10, 238, 56, 243, 232, 237, 226, 242, 224, 237, 145, 242, 233, 237, 69, 242, 1, 238, 252, 241, 32, 238, 182, 241, 68, 238, 115, 241, 103, 238, 49, 241, 132, 238, 243, 240, 154, 238, 185, 240, 168, 238, 135, 240, 172, 238, 97, 240, 171, 238, 78, 240, 169, 238, 87, 240, 173, 238, 132, 240, 190, 238, 219, 240, 230, 238, 100, 241, 43, 239, 36, 242, 145, 239, 30, 243, 32, 240, 84, 244, 215, 240, 197, 245, 186, 241, 109, 247, 199, 242, 73, 249, 252, 243, 83, 251, 87, 245, 130, 253, 209, 246, 206, 255, 101, 248, 43, 2, 12, 250, 147, 4, 192, 251, 251, 6, 119, 253, 89, 9, 43, 255, 162, 11, 210, 0, 205, 13, 101, 2, 206, 15, 217, 3, 159, 17, 38, 5, 56, 19, 69, 6, 147, 20, 46, 7, 172, 21, 224, 7, 127, 22, 90, 8, 15, 23, 157, 8, 90, 23, 174, 8, 102, 23, 146, 8, 55, 23, 81, 8, 210, 22, 241, 7, 62, 22, 125, 7, 133, 21, 252, 6, 173, 20, 118, 6, 191, 19, 246, 5, 195, 18, 130, 5, 191, 17, 34, 5, 187, 16, 220, 4, 185, 15, 179, 4, 188, 14, 169, 4, 197, 13, 188, 4, 209, 12, 234, 4, 223, 11, 46, 5, 236, 10, 132, 5, 245, 9, 228, 5, 245, 8, 72, 6, 236, 7, 170, 6, 213, 6, 4, 7, 177, 5, 77, 7, 125, 4, 132, 7, 61, 3, 163, 7, 239, 1, 168, 7, 151, 0, 146, 7, 58, 255, 97, 7, 217, 253, 24, 7, 123, 252, 183, 6, 40, 251, 69, 6, 233, 249, 201, 5, 196, 248, 74, 5, 196, 247, 207, 4, 237, 246, 96, 4, 69, 246, 2, 4, 211, 245, 187, 3, 151, 245, 142, 3, 146, 245, 125, 3, 197, 245, 138, 3, 43, 246, 180, 3, 193, 246, 248, 3, 130, 247, 84, 4, 102, 248, 194, 4, 101, 249, 64, 5, 121, 250, 198, 5, 155, 251, 80, 6, 192, 252, 216, 6, 226, 253, 87, 7, 248, 254, 197, 7, 250, 255, 26, 8, 222, 0, 78, 8, 164, 1, 91, 8, 66, 2, 60, 8, 184, 2, 237, 7, 2, 3, 109, 7, 29, 3, 191, 6, 12, 3, 229, 5, 207, 2, 227, 4, 106, 2, 192, 3, 225, 1, 132, 2, 56, 1, 51, 1, 117, 0, 217, 255, 160, 255, 124, 254, 187, 254, 35, 253, 205, 253, 214, 251, 218, 252, 155, 250, 233, 251, 122, 249, 253, 250, 118, 248, 23, 250, 145, 247, 60, 249, 206, 246, 105, 248, 46, 246, 161, 247, 177, 245, 227, 246, 82, 245, 47, 246, 17, 245, 132, 245, 233, 244, 227, 244, 214, 244, 73, 244, 211, 244, 182, 243, 217, 244, 43, 243, 230, 244, 167, 242, 244, 244, 44, 242, 1, 245, 184, 241, 8, 245, 78, 241, 8, 245, 239, 240, 0, 245, 158, 240, 239, 244, 97, 240, 220, 244, 65, 240, 202, 244, 67, 240, 194, 244, 109, 240, 203, 244, 200, 240, 236, 244, 86, 241, 43, 245, 29, 242, 143, 245, 33, 243, 27, 246, 95, 244, 208, 246, 217, 245, 178, 247, 139, 247, 189, 248, 113, 249, 240, 249, 132, 251, 72, 251, 190, 253, 191, 252, 19, 0, 80, 254, 127, 2, 243, 255, 247, 4, 162, 1, 114, 7, 85, 3, 229, 9, 5, 5, 71, 12, 167, 6, 141, 14, 51, 8, 174, 16, 159, 9, 160, 18, 226, 10, 93, 20, 245, 11, 224, 21, 211, 12, 32, 23, 121, 13, 29, 24, 231, 13, 214, 24, 31, 14, 74, 25, 35, 14, 124, 25, 251, 13, 112, 25, 171, 13, 39, 25, 60, 13, 170, 24, 182, 12, 3, 24, 30, 12, 52, 23, 130, 11, 72, 22, 232, 10, 71, 21, 87, 10, 53, 20, 215, 9, 26, 19, 109, 9, 248, 17, 27, 9, 209, 16, 226, 8, 164, 15, 192, 8, 117, 14, 179, 8, 62, 13, 181, 8, 0, 12, 196, 8, 186, 10, 216, 8, 105, 9, 234, 8, 11, 8, 245, 8, 160, 6, 245, 8, 40, 5, 226, 8, 163, 3, 185, 8, 18, 2, 118, 8, 120, 0, 25, 8, 216, 254, 159, 7, 50, 253, 10, 7, 142, 251, 90, 6, 241, 249, 149, 5, 98, 248, 190, 4, 236, 246, 224, 3, 146, 245, 255, 2, 93, 244, 35, 2, 84, 243, 84, 1, 123, 242, 150, 0, 212, 241, 241, 255, 102, 241, 102, 255, 46, 241, 247, 254, 45, 241, 164, 254, 95, 241, 111, 254, 193, 241, 84, 254, 78, 242, 81, 254, 0, 243, 98, 254, 209, 243, 131, 254, 187, 244, 176, 254, 180, 245, 226, 254, 183, 246, 20, 255, 188, 247, 63, 255, 187, 248, 91, 255, 173, 249, 97, 255, 139, 250, 74, 255, 80, 251, 15, 255, 247, 251, 174, 254, 124, 252, 35, 254, 220, 252, 111, 253, 22, 253, 146, 252, 41, 253, 146, 251, 23, 253, 113, 250, 225, 252, 55, 249, 138, 252, 236, 247, 23, 252, 148, 246, 141, 251, 56, 245, 239, 250, 225, 243, 67, 250, 148, 242, 143, 249, 90, 241, 215, 248, 57, 240, 30, 248, 53, 239, 104, 247, 82, 238, 184, 246, 147, 237, 15, 246, 249, 236, 110, 245, 133, 236, 214, 244, 53, 236, 72, 244, 7, 236, 196, 243, 250, 235, 75, 243, 7, 236, 220, 242, 44, 236, 118, 242, 98, 236, 28, 242, 166, 236, 203, 241, 243, 236, 132, 241, 70, 237, 73, 241, 153, 237, 24, 241, 235, 237, 244, 240, 57, 238, 221, 240, 131, 238, 216, 240, 202, 238, 233, 240, 18, 239, 23, 241, 96, 239, 105, 241, 189, 239, 226, 241, 47, 240, 136, 242, 187, 240, 93, 243, 104, 241, 103, 244, 56, 242, 166, 245, 50, 243, 27, 247, 85, 244, 195, 248, 160, 245, 157, 250, 20, 247, 164, 252, 172, 248, 211, 254, 104, 250, 31, 1, 63, 252, 135, 3, 45, 254, 2, 6, 43, 0, 133, 8, 50, 2, 8, 11, 60, 4, 131, 13, 64, 6, 237, 15, 52, 8, 59, 18, 15, 10, 99, 20, 200, 11, 96, 22, 87, 13, 41, 24, 182, 14, 183, 25, 224, 15, 7, 27, 210, 16, 21, 28, 141, 17, 224, 28, 18, 18, 101, 29, 101, 18, 168, 29, 139, 18, 173, 29, 137, 18, 118, 29, 102, 18, 8, 29, 42, 18, 107, 28, 221, 17, 163, 27, 133, 17, 185, 26, 44, 17, 179, 25, 217, 16, 149, 24, 145, 16, 98, 23, 84, 16, 32, 22, 41, 16, 210, 20, 15, 16, 121, 19, 4, 16, 23, 18, 6, 16, 169, 16, 18, 16, 51, 15, 34, 16, 179, 13, 50, 16, 40, 12, 60, 16, 147, 10, 59, 16, 243, 8, 41, 16, 75, 7, 4, 16, 154, 5, 200, 15, 227, 3, 114, 15, 40, 2, 2, 15, 108, 0, 120, 14, 179, 254, 211, 13, 254, 252, 21, 13, 88, 251, 67, 12, 196, 249, 99, 11, 75, 248, 124, 10, 243, 246, 148, 9, 192, 245, 179, 8, 186, 244, 222, 7, 227, 243, 27, 7, 64, 243, 109, 6, 207, 242, 218, 5, 149, 242, 97, 5, 142, 242, 2, 5, 183, 242, 190, 4, 15, 243, 147, 4, 144, 243, 125, 4, 53, 244, 123, 4, 249, 244, 135, 4, 214, 245, 157, 4, 195, 246, 183, 4, 189, 247, 208, 4, 188, 248, 223, 4, 184, 249, 225, 4, 172, 250, 205, 4, 143, 251, 155, 4, 93, 252, 71, 4, 17, 253, 206, 3, 166, 253, 46, 3, 25, 254, 103, 2, 104, 254, 124, 1, 146, 254, 110, 0, 151, 254, 69, 255, 121, 254, 1, 254, 56, 254, 172, 252, 218, 253, 75, 251, 95, 253, 231, 249, 207, 252, 132, 248, 42, 252, 42, 247, 120, 251, 224, 245, 186, 250, 170, 244, 246, 249, 141, 243, 44, 249, 140, 242, 96, 248, 170, 241, 148, 247, 231, 240, 202, 246, 68, 240, 5, 246, 191, 239, 68, 245, 86, 239, 138, 244, 8, 239, 214, 243, 207, 238, 43, 243, 169, 238, 137, 242, 145, 238, 241, 241, 132, 238, 98, 241, 125, 238, 223, 240, 121, 238, 103, 240, 117, 238, 252, 239, 112, 238, 157, 239, 100, 238, 79, 239, 84, 238, 21, 239, 67, 238, 244, 238, 53, 238, 241, 238, 48, 238, 17, 239, 58, 238, 90, 239, 90, 238, 205, 239, 148, 238, 112, 240, 237, 238, 69, 241, 107, 239, 74, 242, 16, 240, 131, 243, 219, 240, 237, 244, 205, 241, 133, 246, 230, 242, 74, 248, 35, 244, 52, 250, 128, 245, 64, 252, 249, 246, 102, 254, 137, 248, 158, 0, 42, 250, 229, 2, 213, 251, 49, 5, 132, 253, 122, 7, 46, 255, 184, 9, 201, 0, 226, 11, 81, 2, 240, 13, 188, 3, 217, 15, 3, 5, 151, 17, 32, 6, 36, 19, 15, 7, 123, 20, 206, 7, 154, 21, 95, 8, 125, 22, 195, 8, 36, 23, 253, 8, 145, 23, 19, 9, 196, 23, 7, 9, 192, 23, 225, 8, 139, 23, 168, 8, 41, 23, 100, 8, 160, 22, 28, 8, 245, 21, 215, 7, 46, 21, 154, 7, 81, 20, 107, 7, 94, 19, 76, 7, 89, 18, 63, 7, 70, 17, 67, 7, 37, 16, 87, 7, 247, 14, 119, 7, 188, 13, 162, 7, 120, 12, 210, 7, 40, 11, 2, 8, 207, 9, 46, 8, 109, 8, 81, 8, 2, 7, 103, 8, 144, 5, 110, 8, 24, 4, 97, 8, 156, 2, 63, 8, 29, 1, 5, 8, 161, 255, 180, 7, 41, 254, 77, 7, 184, 252, 209, 6, 86, 251, 72, 6, 10, 250, 180, 5, 214, 248, 30, 5, 197, 247, 139, 4, 214, 246, 1, 4, 15, 246, 134, 3, 116, 245, 28, 3, 8, 245, 202, 2, 203, 244, 144, 2, 188, 244, 112, 2, 222, 244, 105, 2, 43, 245, 124, 2, 162, 245, 166, 2, 63, 246, 229, 2, 252, 246, 52, 3, 213, 247, 145, 3, 196, 248, 246, 3, 197, 249, 94, 4, 210, 250, 195, 4, 228, 251, 31, 5, 244, 252, 105, 5, 251, 253, 157, 5, 244, 254, 179, 5, 217, 255, 166, 5, 162, 0, 118, 5, 79, 1, 32, 5, 219, 1, 163, 4, 66, 2, 2, 4, 132, 2, 63, 3, 159, 2, 95, 2, 150, 2, 101, 1, 103, 2, 90, 0, 23, 2, 66, 255, 169, 1, 34, 254, 31, 1, 1, 253, 125, 0, 230, 251, 201, 255, 215, 250, 1, 255, 216, 249, 44, 254, 236, 248, 76, 253, 24, 248, 99, 252, 91, 247, 118, 251, 184, 246, 134, 250, 48, 246, 150, 249, 193, 245, 168, 248, 105, 245, 189, 247, 38, 245, 216, 246, 244, 244, 252, 245, 209, 244, 41, 245, 184, 244, 96, 244, 168, 244, 163, 243, 156, 244, 242, 242, 144, 244, 80, 242, 132, 244, 189, 241, 115, 244, 59, 241, 94, 244, 205, 240, 68, 244, 118, 240, 43, 244, 61, 240, 23, 244, 38, 240, 13, 244, 53, 240, 21, 244, 111, 240, 52, 244, 214, 240, 110, 244, 110, 241, 201, 244, 56, 242, 72, 245, 54, 243, 237, 245, 103, 244, 186, 246, 202, 245, 174, 247, 93, 247, 199, 248, 27, 249, 3, 250, 1, 251, 95, 251, 11, 253, 214, 252, 48, 255, 99, 254, 106, 1, 0, 0, 182, 3, 166, 1, 11, 6, 81, 3, 95, 8, 248, 4, 171, 10, 143, 6, 231, 12, 18, 8, 7, 15, 118, 9, 6, 17, 182, 10, 222, 18, 205, 11, 133, 20, 182, 12, 248, 21, 113, 13, 52, 23, 254, 13, 52, 24, 94, 14, 249, 24, 148, 14, 129, 25, 166, 14, 208, 25, 150, 14, 229, 25, 108, 14, 198, 25, 45, 14, 118, 25, 226, 13, 249, 24, 145, 13, 85, 24, 64, 13, 141, 23, 244, 12, 163, 22, 175, 12, 156, 21, 116, 12, 125, 20, 70, 12, 69, 19, 34, 12, 250, 17, 8, 12, 157, 16, 246, 11, 46, 15, 232, 11, 178, 13, 216, 11, 38, 12, 197, 11, 141, 10, 170, 11, 234, 8, 129, 11, 62, 7, 73, 11, 139, 5, 253, 10, 210, 3, 156, 10, 22, 2, 35, 10, 90, 0, 147, 9, 160, 254, 233, 8, 235, 252, 41, 8, 64, 251, 85, 7, 167, 249, 117, 6, 37, 248, 138, 5, 191, 246, 158, 4, 122, 245, 181, 3, 89, 244, 213, 2, 98, 243, 4, 2, 151, 242, 69, 1, 250, 241, 157, 0, 141, 241, 13, 0, 78, 241, 152, 255, 61, 241, 58, 255, 90, 241, 244, 254, 160, 241, 198, 254, 13, 242, 173, 254, 157, 242, 165, 254, 74, 243, 170, 254, 19, 244, 185, 254, 242, 244, 203, 254, 225, 245, 219, 254, 218, 246, 228, 254, 214, 247, 222, 254, 208, 248, 195, 254, 192, 249, 142, 254, 160, 250, 61, 254, 109, 251, 203, 253, 32, 252, 57, 253, 184, 252, 136, 252, 48, 253, 183, 251, 135, 253, 204, 250, 188, 253, 200, 249, 207, 253, 178, 248, 194, 253, 144, 247, 148, 253, 102, 246, 73, 253, 58, 245, 228, 252, 20, 244, 104, 252, 248, 242, 215, 251, 234, 241, 52, 251, 240, 240, 129, 250, 12, 240, 195, 249, 65, 239, 252, 248, 144, 238, 47, 248, 251, 237, 94, 247, 131, 237, 143, 246, 37, 237, 192, 245, 223, 236, 246, 244, 176, 236, 51, 244, 150, 236, 122, 243, 139, 236, 202, 242, 143, 236, 39, 242, 158, 236, 146, 241, 178, 236, 11, 241, 203, 236, 148, 240, 232, 236, 46, 240, 3, 237, 219, 239, 30, 237, 158, 239, 60, 237, 123, 239, 94, 237, 119, 239, 139, 237, 149, 239, 199, 237, 219, 239, 25, 238, 72, 240, 133, 238, 227, 240, 16, 239, 171, 241, 189, 239, 164, 242, 141, 240, 204, 243, 135, 241, 35, 245, 166, 242, 170, 246, 236, 243, 92, 248, 88, 245, 56, 250, 229, 246, 56, 252, 146, 248, 88, 254, 88, 250, 147, 0, 53, 252, 227, 2, 32, 254, 70, 5, 20, 0, 176, 7, 11, 2, 26, 10, 252, 3, 124, 12, 223, 5, 206, 14, 173, 7, 7, 17, 93, 9, 31, 19, 233, 10, 15, 21, 77, 12, 209, 22, 134, 13, 98, 24, 146, 14, 187, 25, 114, 15, 219, 26, 38, 16, 192, 27, 177, 16, 104, 28, 23, 17, 211, 28, 92, 17, 7, 29, 134, 17, 5, 29, 155, 17, 206, 28, 162, 17, 105, 28, 159, 17, 216, 27, 153, 17, 31, 27, 147, 17, 66, 26, 145, 17, 67, 25, 148, 17, 39, 24, 154, 17, 237, 22, 167, 17, 154, 21, 181, 17, 49, 20, 196, 17, 179, 18, 208, 17, 32, 17, 214, 17, 125, 15, 208, 17, 206, 13, 192, 17, 19, 12, 158, 17, 80, 10, 105, 17, 133, 8, 31, 17, 182, 6, 190, 16, 231, 4, 68, 16, 23, 3, 177, 15, 77, 1, 4, 15, 140, 255, 66, 14, 217, 253, 111, 13, 57, 252, 143, 12, 176, 250, 167, 11, 70, 249, 190, 10, 252, 247, 219, 9, 214, 246, 2, 9, 217, 245, 53, 8, 7, 245, 121, 7, 97, 244, 210, 6, 231, 243, 65, 6, 155, 243, 199, 5, 124, 243, 100, 5, 135, 243, 23, 5, 187, 243, 223, 4, 20, 244, 185, 4, 144, 244, 162, 4, 44, 245, 150, 4, 227, 245, 146, 4, 179, 246, 145, 4, 148, 247, 141, 4, 129, 248, 128, 4, 116, 249, 101, 4, 102, 250, 54, 4, 80, 251, 238, 3, 46, 252, 139, 3, 250, 252, 11, 3, 176, 253, 108, 2, 75, 254, 176, 1, 201, 254, 217, 0, 39, 255, 233, 255, 102, 255, 227, 254, 130, 255, 203, 253, 125, 255, 166, 252, 89, 255, 122, 251, 22, 255, 76, 250, 180, 254, 33, 249, 57, 254, 252, 247, 164, 253, 228, 246, 250, 252, 218, 245, 60, 252, 227, 244, 110, 251, 255, 243, 146, 250, 49, 243, 173, 249, 122, 242, 193, 248, 217, 241, 209, 247, 78, 241, 223, 246, 213, 240, 239, 245, 111, 240, 3, 245, 25, 240, 31, 244, 208, 239, 67, 243, 146, 239, 113, 242, 91, 239, 173, 241, 40, 239, 246, 240, 248, 238, 78, 240, 201, 238, 183, 239, 152, 238, 51, 239, 104, 238, 197, 238, 58, 238, 114, 238, 18, 238, 61, 238, 246, 237, 43, 238, 235, 237, 63, 238, 245, 237, 125, 238, 24, 238, 228, 238, 90, 238, 120, 239, 187, 238, 58, 240, 66, 239, 43, 241, 236, 239, 73, 242, 188, 240, 149, 243, 177, 241, 12, 245, 200, 242, 170, 246, 1, 244, 111, 248, 87, 245, 83, 250, 198, 246, 85, 252, 73, 248, 113, 254, 222, 249, 157, 0, 125, 251, 215, 2, 31, 253, 21, 5, 189, 254, 79, 7, 77, 0, 126, 9, 204, 1, 155, 11, 51, 3, 156, 13, 122, 4, 124, 15, 160, 5, 55, 17, 160, 6, 197, 18, 123, 7, 36, 20, 48, 8, 81, 21, 192, 8, 73, 22, 47, 9, 12, 23, 127, 9, 154, 23, 182, 9, 244, 23, 215, 9, 27, 24, 233, 9, 19, 24, 240, 9, 221, 23, 241, 9, 124, 23, 240, 9, 242, 22, 241, 9, 67, 22, 245, 9, 114, 21, 254, 9, 129, 20, 12, 10, 115, 19, 31, 10, 76, 18, 52, 10, 11, 17, 73, 10, 182, 15, 93, 10, 78, 14, 108, 10, 215, 12, 114, 10, 81, 11, 109, 10, 193, 9, 90, 10, 40, 8, 55, 10, 136, 6, 1, 10, 228, 4, 181, 9, 62, 3, 86, 9, 155, 1, 224, 8, 254, 255, 86, 8, 106, 254, 187, 7, 227, 252, 18, 7, 111, 251, 96, 6, 20, 250, 172, 5, 213, 248, 248, 4, 183, 247, 75, 4, 188, 246, 170, 3, 231, 245, 25, 3, 59, 245, 155, 2, 184, 244, 48, 2, 96, 244, 221, 1, 52, 244, 161, 1, 47, 244, 125, 1, 84, 244, 111, 1, 160, 244, 116, 1, 16, 245, 140, 1, 163, 245, 179, 1, 86, 246, 230, 1, 37, 247, 30, 2, 12, 248, 91, 2, 4, 249, 150, 2, 9, 250, 199, 2, 21, 251, 236, 2, 32, 252, 252, 2, 37, 253, 247, 2, 28, 254, 216, 2, 4, 255, 158, 2, 214, 255, 72, 2, 140, 0, 214, 1, 41, 1, 74, 1, 165, 1, 166, 0, 1, 2, 238, 255, 60, 2, 37, 255, 85, 2, 79, 254, 76, 2, 113, 253, 33, 2, 143, 252, 215, 1, 174, 251, 110, 1, 208, 250, 234, 0, 251, 249, 75, 0, 50, 249, 152, 255, 118, 248, 208, 254, 202, 247, 245, 253, 46, 247, 14, 253, 164, 246, 28, 252, 43, 246, 35, 251, 195, 245, 40, 250, 108, 245, 43, 249, 32, 245, 49, 248, 226, 244, 60, 247, 172, 244, 79, 246, 127, 244, 107, 245, 86, 244, 148, 244, 47, 244, 200, 243, 9, 244, 12, 243, 225, 243, 97, 242, 185, 243, 202, 241, 144, 243, 73, 241, 108, 243, 228, 240, 78, 243, 158, 240, 61, 243, 123, 240, 60, 243, 127, 240, 80, 243, 171, 240, 127, 243, 1, 241, 200, 243, 130, 241, 49, 244, 49, 242, 189, 244, 13, 243, 107, 245, 23, 244, 62, 246, 77, 245, 51, 247, 175, 246, 74, 248, 56, 248, 128, 249, 232, 249, 209, 250, 187, 251, 60, 252, 171, 253, 186, 253, 183, 255, 72, 255, 214, 1, 222, 0, 4, 4, 120, 2, 57, 6, 13, 4, 108, 8, 151, 5, 151, 10, 15, 7, 176, 12, 112, 8, 178, 14, 179, 9, 149, 16, 214, 10, 85, 18, 214, 11, 236, 19, 179, 12, 86, 21, 107, 13, 144, 22, 0, 14, 152, 23, 118, 14, 105, 24, 204, 14, 7, 25, 10, 15, 113, 25, 50, 15, 169, 25, 73, 15, 173, 25, 84, 15, 129, 25, 87, 15, 40, 25, 84, 15, 165, 24, 79, 15, 249, 23, 73, 15, 38, 23, 66, 15, 47, 22, 59, 15, 23, 21, 51, 15, 224, 19, 40, 15, 141, 18, 24, 15, 31, 17, 1, 15, 156, 15, 223, 14, 7, 14, 176, 14, 97, 12, 115, 14, 173, 10, 36, 14, 239, 8, 194, 13, 42, 7, 75, 13, 95, 5, 189, 12, 147, 3, 24, 12, 199, 1, 93, 11, 0, 0, 141, 10, 68, 254, 172, 9, 149, 252, 190, 8, 249, 250, 199, 7, 116, 249, 204, 6, 10, 248, 211, 5, 193, 246, 224, 4, 153, 245, 249, 3, 151, 244, 31, 3, 187, 243, 86, 2, 9, 243, 162, 1, 126, 242, 2, 1, 31, 242, 120, 0, 233, 241, 4, 0, 218, 241, 168, 255, 244, 241, 92, 255, 51, 242, 34, 255, 151, 242, 247, 254, 30, 243, 215, 254, 196, 243, 192, 254, 132, 244, 172, 254, 89, 245, 151, 254, 62, 246, 124, 254, 44, 247, 84, 254, 30, 248, 30, 254, 13, 249, 213, 253, 245, 249, 119, 253, 209, 250, 2, 253, 155, 251, 119, 252, 81, 252, 212, 251, 238, 252, 30, 251, 113, 253, 84, 250, 216, 253, 122, 249, 32, 254, 149, 248, 73, 254, 168, 247, 84, 254, 182, 246, 64, 254, 196, 245, 13, 254, 212, 244, 189, 253, 236, 243, 83, 253, 14, 243, 207, 252, 60, 242, 53, 252, 122, 241, 134, 251, 199, 240, 199, 250, 39, 240, 251, 249, 153, 239, 36, 249, 28, 239, 70, 248, 178, 238, 100, 247, 87, 238, 131, 246, 12, 238, 162, 245, 205, 237, 198, 244, 154, 237, 242, 243, 111, 237, 41, 243, 75, 237, 106, 242, 45, 237, 185, 241, 17, 237, 22, 241, 247, 236, 132, 240, 224, 236, 6, 240, 206, 236, 160, 239, 197, 236, 86, 239, 198, 236, 43, 239, 216, 236, 35, 239, 254, 236, 65, 239, 61, 237, 136, 239, 151, 237, 249, 239, 18, 238, 149, 240, 173, 238, 93, 241, 108, 239, 79, 242, 80, 240, 112, 243, 87, 241, 186, 244, 129, 242, 45, 246, 206, 243, 201, 247, 57, 245, 137, 249, 193, 246, 108, 251, 96, 248, 109, 253, 21, 250, 137, 255, 217, 251, 184, 1, 168, 253, 246, 3, 121, 255, 61, 6, 70, 1, 131, 8, 11, 3, 192, 10, 191, 4, 239, 12, 94, 6, 8, 15, 226, 7, 7, 17, 74, 9, 228, 18, 146, 10, 152, 20, 184, 11, 37, 22, 189, 12, 132, 23, 162, 13, 177, 24, 105, 14, 173, 25, 20, 15, 117, 26, 167, 15, 10, 27, 37, 16, 107, 27, 144, 16, 153, 27, 238, 16, 149, 27, 64, 17, 94, 27, 135, 17, 249, 26, 200, 17, 105, 26, 3, 18, 176, 25, 57, 18, 208, 24, 106, 18, 205, 23, 148, 18, 168, 22, 182, 18, 100, 21, 207, 18, 6, 20, 221, 18, 143, 18, 221, 18, 2, 17, 205, 18, 100, 15, 171, 18, 184, 13, 117, 18, 254, 11, 40, 18, 59, 10, 196, 17, 115, 8, 73, 17, 167, 6, 180, 16, 220, 4, 10, 16, 21, 3, 75, 15, 87, 1, 123, 14, 170, 255, 157, 13, 13, 254, 183, 12, 135, 252, 206, 11, 28, 251, 228, 10, 207, 249, 1, 10, 163, 248, 40, 9, 155, 247, 92, 8, 184, 246, 158, 7, 251, 245, 242, 6, 101, 245, 90, 6, 246, 244, 212, 5, 175, 244, 99, 5, 144, 244, 3, 5, 150, 244, 182, 4, 195, 244, 119, 4, 21, 245, 69, 4, 136, 245, 29, 4, 27, 246, 252, 3, 201, 246, 222, 3, 140, 247, 190, 3, 95, 248, 151, 3, 62, 249, 100, 3, 32, 250, 36, 3, 1, 251, 210, 2, 221, 251, 110, 2, 173, 252, 244, 1, 110, 253, 102, 1, 29, 254, 196, 0, 181, 254, 14, 0, 53, 255, 74, 255, 155, 255, 117, 254, 227, 255, 148, 253, 11, 0, 173, 252, 21, 0, 191, 251, 2, 0, 209, 250, 209, 255, 227, 249, 128, 255, 250, 248, 19, 255, 24, 248, 139, 254, 62, 247, 235, 253, 113, 246, 54, 253, 176, 245, 110, 252, 251, 244, 150, 251, 85, 244, 178, 250, 190, 243, 195, 249, 50, 243, 208, 248, 179, 242, 216, 247, 63, 242, 224, 246, 213, 241, 235, 245, 112, 241, 251, 244, 19, 241, 17, 244, 186, 240, 49, 243, 98, 240, 92, 242, 14, 240, 147, 241, 185, 239, 218, 240, 104, 239, 52, 240, 27, 239, 164, 239, 213, 238, 47, 239, 156, 238, 215, 238, 113, 238, 162, 238, 91, 238, 145, 238, 93, 238, 168, 238, 121, 238, 231, 238, 180, 238, 80, 239, 15, 239, 228, 239, 138, 239, 162, 240, 41, 240, 140, 241, 234, 240, 158, 242, 203, 241, 219, 243, 206, 242, 63, 245, 238, 243, 202, 246, 42, 245, 120, 248, 127, 246, 70, 250, 232, 247, 48, 252, 96, 249, 48, 254, 227, 250, 64, 0, 107, 252, 90, 2, 240, 253, 120, 4, 110, 255, 146, 6, 221, 0, 161, 8, 59, 2, 159, 10, 133, 3, 134, 12, 180, 4, 81, 14, 202, 5, 252, 15, 195, 6, 130, 17, 161, 7, 224, 18, 100, 8, 19, 20, 13, 9, 26, 21, 160, 9, 241, 21, 32, 10, 154, 22, 140, 10, 18, 23, 234, 10, 91, 23, 60, 11, 116, 23, 133, 11, 98, 23, 199, 11, 34, 23, 3, 12, 185, 22, 57, 12, 40, 22, 105, 12, 111, 21, 148, 12, 147, 20, 185, 12, 148, 19, 214, 12, 117, 18, 232, 12, 60, 17, 240, 12, 232, 15, 234, 12, 127, 14, 212, 12, 4, 13, 174, 12, 121, 11, 116, 12, 225, 9, 39, 12, 64, 8, 197, 11, 152, 6, 77, 11, 236, 4, 193, 10, 65, 3, 32, 10, 153, 1, 110, 9, 253, 255, 176, 8, 109, 254, 232, 7, 238, 252, 26, 7, 134, 251, 77, 6, 54, 250, 130, 5, 3, 249, 190, 4, 241, 247, 6, 4, 0, 247, 91, 3, 50, 246, 193, 2, 137, 245, 58, 2, 5, 245, 197, 1, 168, 244, 100, 1, 113, 244, 23, 1, 97, 244, 218, 0, 119, 244, 177, 0, 179, 244, 150, 0, 20, 245, 136, 0, 151, 245, 134, 0, 56, 246, 140, 0, 244, 246, 148, 0, 198, 247, 156, 0, 168, 248, 159, 0, 150, 249, 153, 0, 137, 250, 135, 0, 123, 251, 102, 0, 105, 252, 53, 0, 78, 253, 243, 255, 37, 254, 160, 255, 234, 254, 56, 255, 156, 255, 193, 254, 51, 0, 60, 254, 178, 0, 169, 253, 21, 1, 13, 253, 90, 1, 106, 252, 129, 1, 192, 251, 135, 1, 21, 251, 110, 1, 104, 250, 55, 1, 192, 249, 227, 0, 27, 249, 116, 0, 125, 248, 236, 255, 233, 247, 76, 255, 92, 247, 151, 254, 218, 246, 209, 253, 98, 246, 252, 252, 245, 245, 27, 252, 146, 245, 52, 251, 56, 245, 70, 250, 228, 244, 87, 249, 152, 244, 103, 248, 81, 244, 123, 247, 13, 244, 148, 246, 203, 243, 180, 245, 138, 243, 220, 244, 74, 243, 16, 244, 10, 243, 83, 243, 205, 242, 167, 242, 149, 242, 16, 242, 100, 242, 148, 241, 64, 242, 53, 241, 43, 242, 248, 240, 41, 242, 222, 240, 63, 242, 234, 240, 111, 242, 31, 241, 187, 242, 123, 241, 38, 243, 0, 242, 177, 243, 177, 242, 93, 244, 138, 243, 42, 245, 142, 244, 22, 246, 186, 245, 31, 247, 13, 247, 70, 248, 135, 248, 134, 249, 37, 250, 223, 250, 228, 251, 74, 252, 191, 253, 197, 253, 177, 255, 73, 255, 179, 1, 208, 0, 193, 3, 87, 2, 212, 5, 216, 3, 229, 7, 75, 5, 237, 9, 175, 6, 230, 11, 254, 7, 204, 13, 54, 9, 151, 15, 85, 10, 67, 17, 90, 11, 207, 18, 71, 12, 53, 20, 25, 13, 112, 21, 212, 13, 130, 22, 121, 14, 101, 23, 10, 15, 25, 24, 137, 15, 158, 24, 247, 15, 243, 24, 87, 16, 23, 25, 171, 16, 12, 25, 243, 16, 213, 24, 51, 17, 114, 24, 104, 17, 227, 23, 149, 17, 45, 23, 184, 17, 81, 22, 208, 17, 80, 21, 220, 17, 47, 20, 218, 17, 239, 18, 200, 17, 147, 17, 166, 17, 32, 16, 112, 17, 151, 14, 38, 17, 252, 12, 198, 16, 82, 11, 79, 16, 154, 9, 191, 15, 219, 7, 25, 15, 21, 6, 92, 14, 79, 4, 138, 13, 140, 2, 166, 12, 207, 0, 180, 11, 33, 255, 183, 10, 128, 253, 181, 9, 244, 251, 176, 8, 128, 250, 173, 7, 40, 249, 177, 6, 237, 247, 190, 5, 210, 246, 215, 4, 216, 245, 1, 4, 2, 245, 57, 3, 80, 244, 132, 2, 196, 243, 224, 1, 95, 243, 79, 1, 34, 243, 207, 0, 11, 243, 95, 0, 27, 243, 0, 0, 81, 243, 173, 255, 170, 243, 100, 255, 37, 244, 34, 255, 186, 244, 229, 254, 104, 245, 169, 254, 40, 246, 105, 254, 245, 246, 34, 254, 203, 247, 210, 253, 163, 248, 118, 253, 122, 249, 13, 253, 74, 250, 151, 252, 16, 251, 18, 252, 201, 251, 126, 251, 112, 252, 223, 250, 2, 253, 52, 250, 126, 253, 126, 249, 223, 253, 194, 248, 38, 254, 0, 248, 79, 254, 59, 247, 91, 254, 119, 246, 74, 254, 179, 245, 28, 254, 242, 244, 210, 253, 55, 244, 110, 253, 132, 243, 241, 252, 218, 242, 93, 252, 57, 242, 183, 251, 163, 241, 255, 250, 24, 241, 58, 250, 152, 240, 107, 249, 34, 240, 146, 248, 183, 239, 180, 247, 84, 239, 213, 246, 249, 238, 245, 245, 164, 238, 23, 245, 85, 238, 63, 244, 11, 238, 109, 243, 196, 237, 163, 242, 128, 237, 230, 241, 65, 237, 55, 241, 7, 237, 152, 240, 214, 236, 17, 240, 178, 236, 163, 239, 156, 236, 83, 239, 152, 236, 36, 239, 170, 236, 24, 239, 214, 236, 50, 239, 29, 237, 115, 239, 130, 237, 220, 239, 7, 238, 111, 240, 172, 238, 43, 241, 115, 239, 18, 242, 90, 240, 35, 243, 98, 241, 93, 244, 136, 242, 193, 245, 204, 243, 75, 247, 42, 245, 249, 248, 160, 246, 201, 250, 42, 248, 181, 252, 195, 249, 185, 254, 103, 251, 206, 0, 16, 253, 239, 2, 185, 254, 22, 5, 92, 0, 60, 7, 246, 1, 89, 9, 131, 3, 107, 11, 255, 4, 104, 13, 101, 6, 77, 15, 181, 7, 22, 17, 239, 8, 190, 18, 17, 10, 66, 20, 28, 11, 156, 21, 17, 12, 204, 22, 240, 12, 206, 23, 188, 13, 160, 24, 117, 14, 67, 25, 30, 15, 183, 25, 184, 15, 251, 25, 69, 16, 17, 26, 197, 16, 247, 25, 58, 17, 178, 25, 164, 17, 65, 25, 2, 18, 166, 24, 83, 18, 227, 23, 152, 18, 249, 22, 203, 18, 235, 21, 239, 18, 191, 20, 3, 19, 118, 19, 4, 19, 20, 18, 242, 18, 156, 16, 202, 18, 16, 15, 141, 18, 116, 13, 58, 18, 203, 11, 208, 17, 25, 10, 78, 17, 96, 8, 184, 16, 164, 6, 13, 16, 234, 4, 82, 15, 55, 3, 136, 14, 141, 1, 180, 13, 244, 255, 219, 12, 109, 254, 255, 11, 252, 252, 35, 11, 163, 251, 76, 10, 104, 250, 124, 9, 74, 249, 182, 8, 78, 248, 252, 7, 116, 247, 79, 7, 190, 246, 177, 6, 46, 246, 34, 6, 196, 245, 162, 5, 131, 245, 48, 5, 105, 245, 205, 4, 117, 245, 118, 4, 167, 245, 43, 4, 250, 245, 233, 3, 111, 246, 172, 3, 254, 246, 115, 3, 165, 247, 58, 3, 94, 248, 251, 2, 35, 249, 182, 2, 241, 249, 105, 2, 194, 250, 15, 2, 145, 251, 171, 1, 91, 252, 55, 1, 27, 253, 181, 0, 206, 253, 39, 0, 110, 254, 142, 255, 250, 254, 231, 254, 110, 255, 53, 254, 200, 255, 125, 253, 5, 0, 188, 252, 37, 0, 248, 251, 42, 0, 50, 251, 16, 0, 107, 250, 218, 255, 166, 249, 136, 255, 228, 248, 26, 255, 40, 248, 148, 254, 113, 247, 248, 253, 194, 246, 71, 253, 28, 246, 133, 252, 125, 245, 180, 251, 231, 244, 216, 250, 90, 244, 242, 249, 212, 243, 6, 249, 85, 243, 23, 248, 222, 242, 38, 247, 107, 242, 55, 246, 253, 241, 74, 245, 147, 241, 99, 244, 43, 241, 130, 243, 198, 240, 171, 242, 102, 240, 226, 241, 12, 240, 43, 241, 186, 239, 136, 240, 114, 239, 253, 239, 57, 239, 143, 239, 19, 239, 64, 239, 0, 239, 19, 239, 5, 239, 10, 239, 34, 239, 39, 239, 92, 239, 109, 239, 180, 239, 219, 239, 41, 240, 115, 240, 188, 240, 54, 241, 110, 241, 35, 242, 63, 242, 58, 243, 45, 243, 123, 244, 53, 244, 229, 245, 86, 245, 114, 247, 141, 246, 34, 249, 217, 247, 239, 250, 51, 249, 213, 252, 152, 250, 206, 254, 1, 252, 209, 0, 109, 253, 221, 2, 212, 254, 234, 4, 51, 0, 240, 6, 134, 1, 236, 8, 204, 2, 215, 10, 0, 4, 173, 12, 33, 5, 106, 14, 47, 6, 6, 16, 39, 7, 129, 17, 11, 8, 212, 18, 220, 8, 255, 19, 152, 9, 254, 20, 67, 10, 208, 21, 222, 10, 116, 22, 106, 11, 234, 22, 232, 11, 50, 23, 88, 12, 76, 23, 190, 12, 58, 23, 25, 13, 253, 22, 105, 13, 149, 22, 173, 13, 6, 22, 231, 13, 80, 21, 21, 14, 119, 20, 52, 14, 124, 19, 71, 14, 98, 18, 75, 14, 44, 17, 62, 14, 221, 15, 31, 14, 120, 14, 240, 13, 255, 12, 172, 13, 118, 11, 84, 13, 223, 9, 234, 12, 61, 8, 107, 12, 149, 6, 218, 11, 234, 4, 57, 11, 65, 3, 137, 10, 157, 1, 207, 9, 3, 0, 13, 9, 122, 254, 69, 8, 0, 253, 126, 7, 156, 251, 184, 6, 81, 250, 247, 5, 33, 249, 63, 5, 15, 248, 142, 4, 30, 247, 235, 3, 79, 246, 84, 3, 164, 245, 204, 2, 31, 245, 83, 2, 193, 244, 231, 1, 140, 244, 139, 1, 126, 244, 60, 1, 150, 244, 249, 0, 212, 244, 194, 0, 53, 245, 148, 0, 181, 245, 109, 0, 81, 246, 73, 0, 5, 247, 37, 0, 203, 247, 0, 0, 158, 248, 214, 255, 122, 249, 164, 255, 91, 250, 105, 255, 58, 251, 33, 255, 20, 252, 207, 254, 229, 252, 112, 254, 168, 253, 4, 254, 89, 254, 143, 253, 246, 254, 13, 253, 123, 255, 130, 252, 230, 255, 239, 251, 51, 0, 86, 251, 100, 0, 183, 250, 120, 0, 23, 250, 110, 0, 116, 249, 72, 0, 211, 248, 6, 0, 52, 248, 170, 255, 153, 247, 50, 255, 3, 247, 165, 254, 114, 246, 3, 254, 233, 245, 79, 253, 103, 245, 139, 252, 236, 244, 187, 251, 120, 244, 225, 250, 12, 244, 255, 249, 166, 243, 26, 249, 70, 243, 48, 248, 235, 242, 72, 247, 150, 242, 96, 246, 68, 242, 125, 245, 246, 241, 160, 244, 171, 241, 204, 243, 103, 241, 5, 243, 40, 241, 80, 242, 243, 240, 174, 241, 202, 240, 36, 241, 175, 240, 184, 240, 166, 240, 106, 240, 176, 240, 60, 240, 210, 240, 52, 240, 13, 241, 81, 240, 99, 241, 151, 240, 214, 241, 8, 241, 101, 242, 163, 241, 18, 243, 106, 242, 220, 243, 93, 243, 194, 244, 125, 244, 198, 245, 199, 245, 227, 246, 58, 247, 24, 248, 211, 248, 99, 249, 142, 250, 193, 250, 104, 252, 45, 252, 91, 254, 163, 253, 97, 0, 31, 255, 116, 2, 154, 0, 144, 4, 19, 2, 172, 6, 134, 3, 195, 8, 237, 4, 208, 10, 70, 6, 205, 12, 143, 7, 179, 14, 198, 8, 128, 16, 233, 9, 44, 18, 248, 10, 181, 19, 242, 11, 23, 21, 215, 12, 78, 22, 168, 13, 89, 23, 103, 14, 54, 24, 19, 15, 227, 24, 176, 15, 97, 25, 61, 16, 176, 25, 187, 16, 209, 25, 44, 17, 195, 25, 143, 17, 136, 25, 229, 17, 31, 25, 45, 18, 142, 24, 103, 18, 209, 23, 144, 18, 236, 22, 168, 18, 229, 21, 176, 18, 189, 20, 167, 18, 120, 19, 141, 18, 24, 18, 94, 18, 159, 16, 29, 18, 17, 15, 200, 17, 112, 13, 93, 17, 193, 11, 223, 16, 5, 10, 76, 16, 64, 8, 165, 15, 120, 6, 237, 14, 175, 4, 38, 14, 235, 2, 84, 13, 49, 1, 120, 12, 133, 255, 151, 11, 232, 253, 180, 10, 94, 252, 208, 9, 237, 250, 239, 8, 151, 249, 20, 8, 94, 248, 64, 7, 72, 247, 118, 6, 85, 246, 182, 5, 134, 245, 3, 5, 224, 244, 92, 4, 97, 244, 195, 3, 12, 244, 54, 3, 223, 243, 181, 2, 217, 243, 64, 2, 250, 243, 214, 1, 64, 244, 115, 1, 165, 244, 23, 1, 39, 245, 189, 0, 193, 245, 101, 0, 111, 246, 11, 0, 44, 247, 173, 255, 242, 247, 72, 255, 189, 248, 218, 254, 137, 249, 98, 254, 81, 250, 225, 253, 17, 251, 85, 253, 195, 251, 189, 252, 102, 252, 27, 252, 244, 252, 113, 251, 108, 253, 189, 250, 203, 253, 3, 250, 15, 254, 67, 249, 55, 254, 127, 248, 67, 254, 186, 247, 50, 254, 244, 246, 6, 254, 48, 246, 191, 253, 111, 245, 95, 253, 178, 244, 231, 252, 252, 243, 89, 252, 75, 243, 184, 251, 162, 242, 6, 251, 2, 242, 70, 250, 106, 241, 122, 249, 218, 240, 164, 248, 81, 240, 200, 247, 210, 239, 230, 246, 90, 239, 3, 246, 234, 238, 32, 245, 129, 238, 63, 244, 30, 238, 97, 243, 194, 237, 138, 242, 107, 237, 190, 241, 29, 237, 255, 240, 216, 236, 79, 240, 158, 236, 183, 239, 116, 236, 53, 239, 90, 236, 208, 238, 84, 236, 137, 238, 99, 236, 99, 238, 139, 236, 98, 238, 205, 236, 136, 238, 42, 237, 215, 238, 164, 237, 79, 239, 59, 238, 243, 239, 239, 238, 196, 240, 194, 239, 192, 241, 177, 240, 233, 242, 187, 241, 60, 244, 225, 242, 184, 245, 30, 244, 90, 247, 113, 245, 31, 249, 215, 246, 2, 251, 76, 248, 253, 252, 205, 249, 13, 255, 85, 251, 41, 1, 222, 252, 78, 3, 104, 254, 117, 5, 235, 255, 152, 7, 100, 1, 178, 9, 212, 2, 188, 11, 55, 4, 178, 13, 137, 5, 142, 15, 202, 6, 74, 17, 248, 7, 228, 18, 20, 9, 88, 20, 28, 10, 161, 21, 18, 11, 192, 22, 246, 11, 177, 23, 200, 12, 116, 24, 138, 13, 9, 25, 61, 14, 111, 25, 225, 14, 166, 25, 117, 15, 177, 25, 254, 15, 142, 25, 118, 16, 64, 25, 225, 16, 200, 24, 61, 17, 40, 24, 137, 17, 97, 23, 198, 17, 120, 22, 242, 17, 109, 21, 12, 18, 67, 20, 20, 18, 254, 18, 9, 18, 159, 17, 235, 17, 40, 16, 184, 17, 157, 14, 112, 17, 2, 13, 21, 17, 90, 11, 166, 16, 169, 9, 38, 16, 242, 7, 148, 15, 59, 6, 246, 14, 135, 4, 75, 14, 219, 2, 152, 13, 58, 1, 222, 12, 171, 255, 34, 12, 45, 254, 102, 11, 198, 252, 171, 10, 121, 251, 244, 9, 73, 250, 67, 9, 58, 249, 154, 8, 75, 248, 251, 7, 130, 247, 101, 7, 223, 246, 217, 6, 99, 246, 89, 6, 16, 246, 227, 5, 227, 245, 120, 5, 221, 245, 22, 5, 252, 245, 189, 4, 61, 246, 106, 4, 158, 246, 29, 4, 26, 247, 208, 3, 173, 247, 133, 3, 84, 248, 54, 3, 9, 249, 227, 2, 199, 249, 139, 2, 139, 250, 41, 2, 79, 251, 190, 1, 14, 252, 74, 1, 198, 252, 202, 0, 112, 253, 63, 0, 11, 254, 173, 255, 146, 254, 15, 255, 2, 255, 103, 254, 91, 255, 185, 253, 153, 255, 4, 253, 187, 255, 73, 252, 195, 255, 140, 251, 175, 255, 205, 250, 127, 255, 13, 250, 53, 255, 79, 249, 210, 254, 147, 248, 87, 254, 219, 247, 199, 253, 40, 247, 36, 253, 122, 246, 111, 252, 209, 245, 171, 251, 47, 245, 220, 250, 147, 244, 1, 250, 254, 243, 31, 249, 112, 243, 55, 248, 233, 242, 76, 247, 103, 242, 95, 246, 235, 241, 115, 245, 117, 241, 138, 244, 6, 241, 166, 243, 156, 240, 203, 242, 58, 240, 253, 241, 225, 239, 62, 241, 147, 239, 148, 240, 84, 239, 0, 240, 36, 239, 135, 239, 7, 239, 43, 239, 255, 238, 240, 238, 14, 239, 216, 238, 53, 239, 231, 238, 117, 239, 29, 239, 208, 239, 126, 239, 70, 240, 10, 240, 216, 240, 193, 240, 135, 241, 165, 241, 79, 242, 180, 242, 50, 243, 237, 243, 45, 244, 79, 245, 64, 245, 215, 246, 102, 246, 128, 248, 160, 247, 72, 250, 231, 248, 40, 252, 57, 250, 29, 254, 146, 251, 31, 0, 238, 252, 42, 2, 74, 254, 57, 4, 162, 255, 70, 6, 242, 0, 75, 8, 59, 2, 65, 10, 118, 3, 38, 12, 165, 4, 241, 13, 196, 5, 160, 15, 211, 6, 47, 17, 209, 7, 153, 18, 189, 8, 219, 19, 152, 9, 245, 20, 98, 10, 228, 21, 29, 11, 167, 22, 200, 11, 61, 23, 101, 12, 167, 23, 243, 12, 229, 23, 115, 13, 246, 23, 230, 13, 220, 23, 74, 14, 151, 23, 161, 14, 39, 23, 231, 14, 144, 22, 30, 15, 212, 21, 70, 15, 246, 20, 93, 15, 245, 19, 100, 15, 214, 18, 90, 15, 155, 17, 63, 15, 71, 16, 18, 15, 220, 14, 211, 14, 93, 13, 129, 14, 205, 11, 30, 14, 48, 10, 169, 13, 136, 8, 37, 13, 219, 6, 146, 12, 43, 5, 242, 11, 128, 3, 73, 11, 218, 1, 152, 10, 63, 0, 228, 9, 180, 254, 45, 9, 58, 253, 117, 8, 213, 251, 192, 7, 140, 250, 15, 7, 93, 249, 99, 6, 80, 248, 191, 5, 102, 247, 36, 5, 159, 246, 146, 4, 255, 245, 11, 4, 134, 245, 143, 3, 53, 245, 29, 3, 10, 245, 181, 2, 7, 245, 87, 2, 39, 245, 3, 2, 106, 245, 181, 1, 204, 245, 109, 1, 73, 246, 39, 1, 221, 246, 225, 0, 133, 247, 154, 0, 59, 248, 81, 0, 251, 248, 1, 0, 193, 249, 174, 255, 136, 250, 81, 255, 75, 251, 235, 254, 6, 252, 124, 254, 180, 252, 3, 254, 84, 253, 129, 253, 223, 253, 247, 252, 86, 254, 100, 252, 182, 254, 203, 251, 251, 254, 43, 251, 40, 255, 134, 250, 58, 255, 223, 249, 49, 255, 54, 249, 13, 255, 139, 248, 208, 254, 226, 247, 123, 254, 59, 247, 15, 254, 150, 246, 141, 253, 247, 245, 248, 252, 92, 245, 83, 252, 197, 244, 158, 251, 53, 244, 220, 250, 170, 243, 16, 250, 38, 243, 60, 249, 169, 242, 97, 248, 50, 242, 130, 247, 194, 241, 161, 246, 88, 241, 192, 245, 245, 240, 225, 244, 152, 240, 6, 244, 66, 240, 53, 243, 244, 239, 112, 242, 177, 239, 187, 241, 123, 239, 24, 241, 83, 239, 141, 240, 59, 239, 26, 240, 55, 239, 197, 239, 71, 239, 146, 239, 109, 239, 129, 239, 173, 239, 149, 239, 3, 240, 210, 239, 117, 240, 56, 240, 1, 241, 202, 240, 166, 241, 134, 241, 103, 242, 110, 242, 66, 243, 129, 243, 53, 244, 190, 244, 64, 245, 35, 246, 98, 246, 174, 247, 152, 247, 91, 249, 224, 248, 38, 251, 53, 250, 10, 253, 149, 251, 3, 255, 252, 252, 7, 1, 102, 254, 22, 3, 209, 255, 42, 5, 56, 1, 59, 7, 153, 2, 68, 9, 243, 3, 64, 11, 66, 5, 40, 13, 131, 6, 248, 14, 183, 7, 173, 16, 217, 8, 65, 18, 235, 9, 176, 19, 236, 10, 249, 20, 220, 11, 25, 22, 186, 12, 15, 23, 136, 13, 218, 23, 69, 14, 120, 24, 243, 14, 233, 24, 144, 15, 46, 25, 31, 16, 71, 25, 158, 16, 52, 25, 13, 17, 248, 24, 108, 17, 146, 24, 187, 17, 4, 24, 250, 17, 81, 23, 40, 18, 122, 22, 68, 18, 128, 21, 78, 18, 103, 20, 70, 18, 49, 19, 44, 18, 222, 17, 254, 17, 115, 16, 188, 17, 242, 14, 105, 17, 96, 13, 2, 17, 192, 11, 139, 16, 21, 10, 3, 16, 98, 8, 108, 15, 174, 6, 202, 14, 250, 4, 29, 14, 76, 3, 105, 13, 169, 1, 174, 12, 17, 0, 240, 11, 141, 254, 49, 11, 29, 253, 115, 10, 198, 251, 184, 9, 140, 250, 1, 9, 112, 249, 79, 8, 117, 248, 164, 7, 159, 247, 1, 7, 236, 246, 102, 6, 96, 246, 211, 5, 251, 245, 74, 5, 187, 245, 202, 4, 161, 245, 80, 4, 170, 245, 222, 3, 212, 245, 114, 3, 28, 246, 11, 3, 127, 246, 164, 2, 249, 246, 62, 2, 134, 247, 214, 1, 33, 248, 107, 1, 199, 248, 252, 0, 114, 249, 134, 0, 30, 250, 10, 0, 200, 250, 136, 255, 107, 251, 250, 254, 2, 252, 101, 254, 139, 252, 200, 253, 3, 253, 34, 253, 103, 253, 117, 252, 181, 253, 194, 251, 237, 253, 8, 251, 11, 254, 75, 250, 18, 254, 139, 249, 0, 254, 201, 248, 213, 253, 7, 248, 147, 253, 69, 247, 58, 253, 133, 246, 204, 252, 201, 245, 74, 252, 16, 245, 181, 251, 92, 244, 17, 251, 173, 243, 94, 250, 4, 243, 160, 249, 98, 242, 215, 248, 198, 241, 6, 248, 49, 241, 46, 247, 163, 240, 81, 246, 29, 240, 116, 245, 158, 239, 151, 244, 39, 239, 187, 243, 184, 238, 228, 242, 81, 238, 23, 242, 245, 237, 85, 241, 165, 237, 163, 240, 99, 237, 3, 240, 47, 237, 121, 239, 14, 237, 10, 239, 1, 237, 183, 238, 8, 237, 132, 238, 39, 237, 117, 238, 93, 237, 139, 238, 174, 237, 200, 238, 23, 238, 48, 239, 154, 238, 193, 239, 57, 239, 125, 240, 241, 239, 99, 241, 195, 240, 116, 242, 174, 241, 174, 243, 176, 242, 14, 245, 200, 243, 147, 246, 244, 244, 56, 248, 48, 246, 251, 249, 123, 247, 213, 251, 208, 248, 196, 253, 45, 250, 192, 255, 143, 251, 197, 1, 242, 252, 206, 3, 85, 254, 214, 5, 179, 255, 214, 7, 8, 1, 202, 9, 87, 2, 172, 11, 155, 3, 120, 13, 210, 4, 41, 15, 250, 5, 187, 16, 22, 7, 44, 18, 33, 8, 121, 19, 28, 9, 159, 20, 8, 10, 158, 21, 228, 10, 115, 22, 176, 11, 29, 23, 111, 12, 159, 23, 29, 13, 245, 23, 190, 13, 34, 24, 79, 14, 35, 24, 209, 14, 252, 23, 66, 15, 171, 23, 162, 15, 52, 23, 243, 15, 152, 22, 51, 16, 217, 21, 98, 16, 249, 20, 127, 16, 250, 19, 140, 16, 222, 18, 135, 16, 168, 17, 111, 16, 89, 16, 71, 16, 245, 14, 13, 16, 127, 13, 194, 15, 250, 11, 104, 15, 106, 10, 254, 14, 210, 8, 135, 14, 55, 7, 6, 14, 156, 5, 121, 13, 5, 4, 230, 12, 120, 2, 78, 12, 247, 0, 178, 11, 135, 255, 22, 11, 44, 254, 121, 10, 231, 252, 222, 9, 190, 251, 70, 9, 179, 250, 179, 8, 199, 249, 37, 8, 255, 248, 159, 7, 90, 248, 31, 7, 215, 247, 166, 6, 122, 247, 54, 6, 65, 247, 205, 5, 42, 247, 106, 5, 53, 247, 14, 5, 96, 247, 182, 4, 166, 247, 98, 4, 7, 248, 15, 4, 124, 248, 187, 3, 4, 249, 102, 3, 153, 249, 14, 3, 55, 250, 177, 2, 218, 250, 78, 2, 126, 251, 228, 1, 31, 252, 115, 1, 184, 252, 250, 0, 70, 253, 120, 0, 199, 253, 239, 255, 54, 254, 94, 255, 147, 254, 196, 254, 219, 254, 35, 254, 13, 255, 124, 253, 40, 255, 208, 252, 44, 255, 32, 252, 23, 255, 109, 251, 236, 254, 185, 250, 169, 254, 3, 250, 81, 254, 79, 249, 228, 253, 155, 248, 100, 253, 235, 247, 210, 252, 61, 247, 49, 252, 146, 246, 128, 251, 236, 245, 196, 250, 75, 245, 253, 249, 175, 244, 45, 249, 24, 244, 86, 248, 136, 243, 123, 247, 254, 242, 157, 246, 123, 242, 190, 245, 255, 241, 225, 244, 137, 241, 9, 244, 28, 241, 57, 243, 185, 240, 116, 242, 97, 240, 189, 241, 23, 240, 25, 241, 219, 239, 137, 240, 176, 239, 19, 240, 152, 239, 185, 239, 148, 239, 126, 239, 165, 239, 101, 239, 204, 239, 112, 239, 11, 240, 162, 239, 98, 240, 252, 239, 210, 240, 126, 240, 89, 241, 42, 241, 250, 241, 255, 241, 178, 242, 251, 242, 128, 243, 31, 244, 100, 244, 105, 245, 92, 245, 214, 246, 104, 246, 97, 248, 131, 247, 9, 250, 171, 248, 200, 251, 222, 249, 154, 253, 23, 251, 121, 255, 86, 252, 96, 1, 151, 253, 77, 3, 215, 254, 56, 5, 18, 0, 28, 7, 72, 1, 245, 8, 121, 2, 188, 10, 158, 3, 111, 12, 185, 4, 10, 14, 200, 5, 135, 15, 200, 6, 229, 16, 187, 7, 33, 18, 160, 8, 58, 19, 117, 9, 44, 20, 59, 10, 248, 20, 244, 10, 157, 21, 158, 11, 25, 22, 57, 12, 109, 22, 198, 12, 154, 22, 67, 13, 159, 22, 178, 13, 125, 22, 18, 14, 53, 22, 98, 14, 199, 21, 162, 14, 54, 21, 209, 14, 131, 20, 241, 14, 176, 19, 0, 15, 190, 18, 254, 14, 174, 17, 235, 14, 133, 16, 199, 14, 69, 15, 148, 14, 240, 13, 80, 14, 136, 12, 253, 13, 17, 11, 155, 13, 144, 9, 45, 13, 7, 8, 179, 12, 122, 6, 45, 12, 238, 4, 160, 11, 101, 3, 13, 11, 229, 1, 118, 10, 113, 0, 220, 9, 15, 255, 64, 9, 191, 253, 166, 8, 134, 252, 14, 8, 103, 251, 120, 7, 100, 250, 232, 6, 129, 249, 93, 6, 190, 248, 215, 5, 29, 248, 88, 5, 159, 247, 225, 4, 67, 247, 114, 4, 10, 247, 10, 4, 242, 246, 167, 3, 251, 246, 75, 3, 33, 247, 243, 2, 98, 247, 159, 2, 188, 247, 77, 2, 41, 248, 250, 1, 167, 248, 167, 1, 50, 249, 80, 1, 198, 249, 246, 0, 95, 250, 152, 0, 249, 250, 51, 0, 144, 251, 202, 255, 32, 252, 88, 255, 167, 252, 222, 254, 32, 253, 93, 254, 138, 253, 212, 253, 228, 253, 68, 253, 41, 254, 174, 252, 90, 254, 18, 252, 118, 254, 113, 251, 124, 254, 204, 250, 108, 254, 37, 250, 69, 254, 124, 249, 10, 254, 210, 248, 185, 253, 40, 248, 85, 253, 127, 247, 222, 252, 215, 246, 86, 252, 50, 246, 190, 251, 144, 245, 25, 251, 242, 244, 102, 250, 88, 244, 168, 249, 195, 243, 227, 248, 52, 243, 22, 248, 170, 242, 68, 247, 38, 242, 112, 246, 171, 241, 153, 245, 53, 241, 196, 244, 200, 240, 245, 243, 99, 240, 45, 243, 9, 240, 111, 242, 187, 239, 192, 241, 123, 239, 34, 241, 74, 239, 154, 240, 42, 239, 42, 240, 29, 239, 215, 239, 36, 239, 163, 239, 65, 239, 144, 239, 116, 239, 161, 239, 191, 239, 217, 239, 34, 240, 57, 240, 157, 240, 194, 240, 49, 241, 116, 241, 221, 241, 78, 242, 161, 242, 80, 243, 123, 243, 121, 244, 107, 244, 198, 245, 111, 245, 53, 247, 133, 246, 197, 248, 171, 247, 110, 250, 222, 248, 48, 252, 28, 250, 4, 254, 98, 251, 229, 255, 172, 252, 206, 1, 249, 253, 188, 3, 71, 255, 167, 5, 144, 0, 142, 7, 213, 1, 104, 9, 22, 3, 49, 11, 75, 4, 232, 12, 120, 5, 133, 14, 152, 6, 7, 16, 172, 7, 107, 17, 178, 8, 172, 18, 168, 9, 204, 19, 145, 10, 199, 20, 105, 11, 155, 21, 52, 12, 74, 22, 240, 12, 207, 22, 155, 13, 47, 23, 57, 14, 101, 23, 197, 14, 115, 23, 64, 15, 89, 23, 172, 15, 25, 23, 6, 16, 180, 22, 79, 16, 43, 22, 135, 16, 127, 21, 174, 16, 179, 20, 195, 16, 199, 19, 199, 16, 190, 18, 185, 16, 155, 17, 154, 16, 96, 16, 108, 16, 15, 15, 43, 16, 171, 13, 220, 15, 56, 12, 126, 15, 185, 10, 19, 15, 49, 9, 155, 14, 165, 7, 25, 14, 25, 6, 143, 13, 143, 4, 254, 12, 14, 3, 105, 12, 152, 1, 207, 11, 51, 0, 52, 11, 227, 254, 153, 10, 166, 253, 255, 9, 132, 252, 103, 9, 125, 251, 210, 8, 148, 250, 66, 8, 204, 249, 183, 7, 35, 249, 49, 7, 156, 248, 177, 6, 55, 248, 56, 6, 243, 247, 197, 5, 208, 247, 87, 5, 204, 247, 238, 4, 227, 247, 138, 4, 21, 248, 39, 4, 95, 248, 198, 3, 189, 248, 100, 3, 42, 249, 2, 3, 163, 249, 156, 2, 37, 250, 50, 2, 172, 250, 197, 1, 51, 251, 81, 1, 182, 251, 216, 0, 52, 252, 87, 0, 168, 252, 208, 255, 17, 253, 66, 255, 106, 253, 172, 254, 179, 253, 14, 254, 235, 253, 107, 253, 14, 254, 193, 252, 29, 254, 19, 252, 25, 254, 97, 251, 254, 253, 171, 250, 207, 253, 244, 249, 140, 253, 59, 249, 53, 253, 129, 248, 203, 252, 201, 247, 79, 252, 17, 247, 196, 251, 92, 246, 41, 251, 169, 245, 129, 250, 249, 244, 204, 249, 78, 244, 13, 249, 167, 243, 70, 248, 6, 243, 121, 247, 106, 242, 166, 246, 214, 241, 209, 245, 72, 241, 251, 244, 194, 240, 38, 244, 69, 240, 88, 243, 208, 239, 144, 242, 104, 239, 212, 241, 12, 239, 39, 241, 190, 238, 139, 240, 130, 238, 4, 240, 86, 238, 152, 239, 60, 238, 70, 239, 56, 238, 20, 239, 73, 238, 3, 239, 113, 238, 22, 239, 175, 238, 78, 239, 6, 239, 173, 239, 116, 239, 51, 240, 251, 239, 224, 240, 153, 240, 181, 241, 78, 241, 177, 242, 25, 242, 209, 243, 250, 242, 23, 245, 238, 243, 124, 246, 245, 244, 255, 247, 11, 246, 157, 249, 47, 247, 80, 251, 94, 248, 22, 253, 148, 249, 234, 254, 210, 250, 196, 0, 18, 252, 162, 2, 83, 253, 128, 4, 148, 254, 87, 6, 209, 255, 36, 8, 7, 1, 226, 9, 56, 2, 141, 11, 97, 3, 34, 13, 127, 4, 156, 14, 144, 5, 251, 15, 149, 6, 58, 17, 143, 7, 89, 18, 122, 8, 85, 19, 88, 9, 46, 20, 40, 10, 227, 20, 233, 10, 114, 21, 157, 11, 219, 21, 64, 12, 30, 22, 213, 12, 59, 22, 89, 13, 50, 22, 207, 13, 5, 22, 52, 14, 179, 21, 135, 14, 64, 21, 203, 14, 170, 20, 254, 14, 243, 19, 32, 15, 29, 19, 47, 15, 42, 18, 47, 15, 30, 17, 31, 15, 250, 15, 254, 14, 192, 14, 205, 14, 114, 13, 142, 14, 22, 12, 64, 14, 174, 10, 231, 13, 61, 9, 130, 13, 199, 7, 21, 13, 81, 6, 159, 12, 222, 4, 35, 12, 114, 3, 162, 11, 17, 2, 30, 11, 191, 0, 153, 10, 129, 255, 19, 10, 87, 254, 142, 9, 68, 253, 11, 9, 75, 252, 138, 8, 111, 251, 14, 8, 177, 250, 149, 7, 17, 250, 35, 7, 146, 249, 181, 6, 50, 249, 77, 6, 241, 248, 234, 5, 208, 248, 141, 5, 203, 248, 52, 5, 225, 248, 220, 4, 15, 249, 137, 4, 83, 249, 54, 4, 170, 249, 226, 3, 15, 250, 141, 3, 128, 250, 54, 3, 248, 250, 220, 2, 116, 251, 125, 2, 241, 251, 24, 2, 107, 252, 173, 1, 223, 252, 60, 1, 75, 253, 195, 0, 172, 253, 68, 0, 255, 253, 190, 255, 67, 254, 48, 255, 117, 254, 156, 254, 150, 254, 1, 254, 164, 254, 98, 253, 157, 254, 189, 252, 132, 254, 19, 252, 86, 254, 104, 251, 21, 254, 185, 250, 193, 253, 10, 250, 90, 253, 89, 249, 226, 252, 169, 248, 90, 252, 249, 247, 195, 251, 76, 247, 30, 251, 160, 246, 109, 250, 246, 245, 177, 249, 81, 245, 235, 248, 176, 244, 31, 248, 20, 244, 79, 247, 125, 243, 122, 246, 236, 242, 164, 245, 98, 242, 207, 244, 224, 241, 255, 243, 103, 241, 54, 243, 250, 240, 119, 242, 153, 240, 200, 241, 70, 240, 41, 241, 3, 240, 159, 240, 208, 239, 46, 240, 175, 239, 217, 239, 163, 239, 162, 239, 173, 239, 140, 239, 202, 239, 153, 239, 0, 240, 203, 239, 76, 240, 34, 240, 175, 240, 161, 240, 42, 241, 69, 241, 187, 241, 17, 242, 100, 242, 2, 243, 34, 243, 24, 244, 244, 243, 82, 245, 219, 244, 172, 246, 211, 245, 35, 248, 218, 246, 179, 249, 238, 247, 90, 251, 14, 249, 18, 253, 55, 250, 217, 254, 101, 251, 165, 0, 152, 252, 118, 2, 204, 253, 71, 4, 1, 255, 19, 6, 49, 0, 212, 7, 93, 1, 136, 9, 133, 2, 43, 11, 164, 3, 184, 12, 186, 4, 44, 14, 196, 5, 132, 15, 195, 6, 193, 16, 182, 7, 221, 17, 155, 8, 217, 18, 115, 9, 178, 19, 62, 10, 103, 20, 249, 10, 249, 20, 165, 11, 100, 21, 67, 12, 171, 21, 209, 12, 202, 21, 77, 13, 198, 21, 186, 13, 157, 21, 22, 14, 80, 21, 98, 14, 225, 20, 156, 14, 80, 20, 196, 14, 159, 19, 221, 14, 209, 18, 228, 14, 229, 17, 219, 14, 221, 16, 195, 14, 192, 15, 153, 14, 140, 14, 97, 14, 69, 13, 27, 14, 238, 11, 199, 13, 139, 10, 103, 13, 32, 9, 253, 12, 174, 7, 139, 12, 62, 6, 16, 12, 208, 4, 144, 11, 105, 3, 12, 11, 14, 2, 133, 10, 192, 0, 253, 9, 133, 255, 116, 9, 95, 254, 235, 8, 79, 253, 102, 8, 89, 252, 226, 7, 126, 251, 98, 7, 193, 250, 232, 6, 33, 250, 114, 6, 159, 249, 1, 6, 61, 249, 149, 5, 249, 248, 48, 5, 211, 248, 206, 4, 199, 248, 113, 4, 215, 248, 23, 4, 254, 248, 192, 3, 58, 249, 105, 3, 136, 249, 19, 3, 228, 249, 188, 2, 75, 250, 98, 2, 186, 250, 5, 2, 44, 251, 165, 1, 159, 251, 64, 1, 16, 252, 213, 0, 123, 252, 101, 0, 223, 252, 239, 255, 56, 253, 115, 255, 132, 253, 238, 254, 195, 253, 99, 254, 241, 253, 211, 253, 15, 254, 59, 253, 26, 254, 158, 252, 18, 254, 253, 251, 248, 253, 88, 251, 203, 253, 175, 250, 139, 253, 4, 250, 57, 253, 88, 249, 213, 252, 170, 248, 96, 252, 251, 247, 219, 251, 78, 247, 71, 251, 160, 246, 166, 250, 244, 245, 249, 249, 76, 245, 65, 249, 166, 244, 128, 248, 5, 244, 183, 247, 104, 243, 235, 246, 209, 242, 26, 246, 64, 242, 72, 245, 182, 241, 119, 244, 52, 241, 171, 243, 188, 240, 230, 242, 79, 240, 45, 242, 240, 239, 129, 241, 158, 239, 232, 240, 94, 239, 100, 240, 45, 239, 249, 239, 16, 239, 170, 239, 7, 239, 121, 239, 19, 239, 104, 239, 52, 239, 122, 239, 109, 239, 176, 239, 188, 239, 11, 240, 34, 240, 140, 240, 160, 240, 51, 241, 53, 241, 1, 242, 223, 241, 244, 242, 161, 242, 10, 244, 119, 243, 68, 245, 95, 244, 157, 246, 90, 245, 18, 248, 101, 246, 162, 249, 125, 247, 71, 251, 161, 248, 252, 252, 207, 249, 191, 254, 2, 251, 136, 0, 58, 252, 87, 2, 118, 253, 37, 4, 178, 254, 239, 5, 236, 255, 175, 7, 33, 1, 97, 9, 82, 2, 3, 11, 125, 3, 145, 12, 158, 4, 8, 14, 182, 5, 102, 15, 194, 6, 167, 16, 195, 7, 201, 17, 182, 8, 204, 18, 157, 9, 175, 19, 118, 10, 110, 20, 64, 11, 10, 21, 252, 11, 130, 21, 168, 12, 214, 21, 69, 13, 5, 22, 208, 13, 15, 22, 76, 14, 246, 21, 182, 14, 184, 21, 15, 15, 88, 21, 86, 15, 213, 20, 139, 15, 49, 20, 174, 15, 111, 19, 191, 15, 143, 18, 192, 15, 148, 17, 176, 15, 129, 16, 142, 15, 87, 15, 95, 15, 26, 14, 33, 15, 205, 12, 213, 14, 115, 11, 125, 14, 15, 10, 27, 14, 167, 8, 175, 13, 61, 7, 59, 13, 214, 5, 194, 12, 117, 4, 67, 12, 29, 3, 193, 11, 213, 1, 60, 11, 156, 0, 183, 10, 120, 255, 51, 10, 106, 254, 175, 9, 114, 253, 45, 9, 150, 252, 174, 8, 213, 251, 50, 8, 48, 251, 186, 7, 169, 250, 71, 7, 63, 250, 217, 6, 243, 249, 111, 6, 195, 249, 9, 6, 173, 249, 167, 5, 176, 249, 71, 5, 201, 249, 233, 4, 246, 249, 141, 4, 51, 250, 48, 4, 127, 250, 210, 3, 212, 250, 114, 3, 48, 251, 14, 3, 145, 251, 167, 2, 243, 251, 59, 2, 83, 252, 202, 1, 174, 252, 83, 1, 2, 253, 214, 0, 76, 253, 83, 0, 138, 253, 201, 255, 188, 253, 57, 255, 223, 253, 162, 254, 242, 253, 4, 254, 244, 253, 98, 253, 228, 253, 186, 252, 195, 253, 14, 252, 144, 253, 94, 251, 75, 253, 170, 250, 245, 252, 244, 249, 141, 252, 61, 249, 21, 252, 132, 248, 141, 251, 204, 247, 247, 250, 19, 247, 85, 250, 92, 246, 166, 249, 167, 245, 236, 248, 245, 244, 42, 248, 71, 244, 97, 247, 156, 243, 147, 246, 246, 242, 192, 245, 87, 242, 237, 244, 191, 241, 27, 244, 48, 241, 78, 243, 170, 240, 137, 242, 48, 240, 207, 241, 195, 239, 36, 241, 101, 239, 139, 240, 22, 239, 7, 240, 218, 238, 155, 239, 175, 238, 75, 239, 153, 238, 26, 239, 153, 238, 8, 239, 174, 238, 23, 239, 218, 238, 76, 239, 28, 239, 165, 239, 119, 239, 35, 240, 233, 239, 199, 240, 113, 240, 144, 241, 16, 241, 125, 242, 197, 241, 143, 243, 143, 242, 192, 244, 109, 243, 17, 246, 91, 244, 126, 247, 91, 245, 4, 249, 104, 246, 159, 250, 130, 247, 75, 252, 165, 248, 3, 254, 208, 249, 196, 255, 1, 251, 136, 1, 54, 252, 77, 3, 107, 253, 15, 5, 162, 254, 200, 6, 213, 255, 117, 8, 2, 1, 18, 10, 44, 2, 158, 11, 79, 3, 19, 13, 104, 4, 112, 14, 119, 5, 178, 15, 122, 6, 216, 16, 115, 7, 224, 17, 95, 8, 199, 18, 61, 9, 141, 19, 12, 10, 50, 20, 206, 10, 179, 20, 128, 11, 16, 21, 34, 12, 74, 21, 180, 12, 96, 21, 53, 13, 81, 21, 165, 13, 33, 21, 3, 14, 206, 20, 80, 14, 90, 20, 139, 14, 198, 19, 181, 14, 20, 19, 207, 14, 68, 18, 214, 14, 90, 17, 206, 14, 87, 16, 182, 14, 61, 15, 143, 14, 16, 14, 89, 14, 210, 12, 22, 14, 135, 11, 200, 13, 52, 10, 110, 13, 218, 8, 13, 13, 128, 7, 164, 12, 39, 6, 52, 12, 212, 4, 192, 11, 139, 3, 73, 11, 78, 2, 208, 10, 34, 1, 86, 10, 7, 0, 219, 9, 4, 255, 97, 9, 21, 254, 234, 8, 64, 253, 117, 8, 133, 252, 3, 8, 228, 251, 150, 7, 95, 251, 45, 7, 247, 250, 199, 6, 170, 250, 103, 6, 120, 250, 9, 6, 95, 250, 176, 5, 93, 250, 88, 5, 113, 250, 2, 5, 151, 250, 174, 4, 205, 250, 88, 4, 15, 251, 3, 4, 92, 251, 170, 3, 174, 251, 80, 3, 5, 252, 242, 2, 94, 252, 143, 2, 180, 252, 39, 2, 6, 253, 187, 1, 82, 253, 72, 1, 150, 253, 207, 0, 206, 253, 78, 0, 250, 253, 202, 255, 24, 254, 62, 255, 39, 254, 170, 254, 39, 254, 18, 254, 22, 254, 117, 253, 245, 253, 210, 252, 194, 253, 43, 252, 126, 253, 129, 251, 41, 253, 211, 250, 196, 252, 35, 250, 78, 252, 113, 249, 200, 251, 189, 248, 54, 251, 10, 248, 150, 250, 87, 247, 235, 249, 165, 246, 52, 249, 244, 245, 118, 248, 71, 245, 175, 247, 157, 244, 226, 246, 248, 243, 19, 246, 88, 243, 66, 245, 191, 242, 115, 244, 45, 242, 169, 243, 165, 241, 230, 242, 41, 241, 46, 242, 184, 240, 133, 241, 86, 240, 238, 240, 4, 240, 107, 240, 195, 239, 2, 240, 148, 239, 178, 239, 120, 239, 128, 239, 114, 239, 109, 239, 127, 239, 123, 239, 164, 239, 171, 239, 222, 239, 0, 240, 47, 240, 120, 240, 151, 240, 20, 241, 22, 241, 214, 241, 170, 241, 186, 242, 83, 242, 192, 243, 18, 243, 232, 244, 228, 243, 46, 246, 199, 244, 142, 247, 186, 245, 7, 249, 188, 246, 147, 250, 201, 247, 49, 252, 225, 248, 219, 253, 2, 250, 141, 255, 40, 251, 66, 1, 84, 252, 249, 2, 128, 253, 173, 4, 174, 254, 90, 6, 218, 255, 252, 7, 1, 1, 144, 9, 36, 2, 18, 11, 65, 3, 129, 12, 86, 4, 218, 13, 98, 5, 24, 15, 100, 6, 61, 16, 91, 7, 68, 17, 69, 8, 46, 18, 34, 9, 248, 18, 242, 9, 160, 19, 179, 10, 40, 20, 101, 11, 141, 20, 7, 12, 207, 20, 153, 12, 238, 20, 27, 13, 235, 20, 139, 13, 197, 20, 234, 13, 126, 20, 55, 14, 20, 20, 114, 14, 139, 19, 156, 14, 227, 18, 179, 14, 32, 18, 187, 14, 65, 17, 177, 14, 73, 16, 152, 14, 59, 15, 112, 14, 25, 14, 58, 14, 231, 12, 247, 13, 169, 11, 169, 13, 98, 10, 81, 13, 19, 9, 238, 12, 196, 7, 134, 12, 118, 6, 23, 12, 46, 5, 163, 11, 239, 3, 44, 11, 186, 2, 179, 10, 148, 1, 56, 10, 127, 0, 189, 9, 129, 255, 67, 9, 150, 254, 202, 8, 194, 253, 84, 8, 8, 253, 226, 7, 103, 252, 114, 7, 224, 251, 5, 7, 115, 251, 158, 6, 33, 251, 58, 6, 232, 250, 218, 5, 199, 250, 124, 5, 187, 250, 34, 5, 195, 250, 201, 4, 221, 250, 114, 4, 5, 251, 26, 4, 58, 251, 193, 3, 120, 251, 103, 3, 189, 251, 11, 3, 5, 252, 171, 2, 80, 252, 71, 2, 153, 252, 223, 1, 223, 252, 115, 1, 31, 253, 1, 1, 86, 253, 137, 0, 134, 253, 10, 0, 169, 253, 136, 255, 191, 253, 253, 254, 201, 253, 109, 254, 195, 253, 214, 253, 174, 253, 59, 253, 137, 253, 155, 252, 85, 253, 245, 251, 16, 253, 76, 251, 187, 252, 160, 250, 87, 252, 241, 249, 226, 251, 63, 249, 96, 251, 141, 248, 207, 250, 217, 247, 50, 250, 38, 247, 139, 249, 115, 246, 216, 248, 193, 245, 29, 248, 19, 245, 91, 247, 103, 244, 147, 246, 192, 243, 201, 245, 29, 243, 253, 244, 129, 242, 50, 244, 237, 241, 110, 243, 99, 241, 177, 242, 227, 240, 255, 241, 112, 240, 92, 241, 12, 240, 203, 240, 183, 239, 79, 240, 115, 239, 234, 239, 66, 239, 159, 239, 35, 239, 113, 239, 24, 239, 97, 239, 36, 239, 114, 239, 69, 239, 165, 239, 124, 239, 249, 239, 202, 239, 113, 240, 46, 240, 13, 241, 169, 240, 203, 241, 57, 241, 172, 242, 223, 241, 174, 243, 153, 242, 208, 244, 102, 243, 14, 246, 69, 244, 102, 247, 52, 245, 213, 248, 50, 246, 88, 250, 61, 247, 236, 251, 82, 248, 139, 253, 112, 249, 52, 255, 150, 250, 223, 0, 192, 251, 142, 2, 238, 252, 57, 4, 29, 254, 222, 5, 75, 255, 123, 7, 118, 0, 11, 9, 157, 1, 137, 10, 193, 2, 246, 11, 220, 3, 78, 13, 240, 4, 142, 14, 249, 5, 181, 15, 248, 6, 193, 16, 237, 7, 177, 17, 211, 8, 129, 18, 173, 9, 50, 19, 120, 10, 194, 19, 54, 11, 50, 20, 226, 11, 127, 20, 126, 12, 171, 20, 10, 13, 182, 20, 132, 13, 157, 20, 238, 13, 101, 20, 69, 14, 11, 20, 139, 14, 148, 19, 192, 14, 254, 18, 226, 14, 74, 18, 244, 14, 125, 17, 245, 14, 150, 16, 230, 14, 153, 15, 199, 14, 137, 14, 154, 14, 102, 13, 96, 14, 55, 12, 26, 14, 255, 10, 203, 13, 193, 9, 113, 13, 129, 8, 16, 13, 65, 7, 169, 12, 6, 6, 61, 12, 210, 4, 203, 11, 169, 3, 88, 11, 141, 2, 227, 10, 128, 1, 108, 10, 134, 0, 247, 9, 160, 255, 130, 9, 208, 254, 15, 9, 22, 254, 158, 8, 115, 253, 48, 8, 234, 252, 198, 7, 121, 252, 95, 7, 32, 252, 251, 6, 222, 251, 155, 6, 179, 251, 61, 6, 156, 251, 225, 5, 151, 251, 134, 5, 162, 251, 43, 5, 187, 251, 209, 4, 224, 251, 118, 4, 13, 252, 25, 4, 64, 252, 187, 3, 121, 252, 89, 3, 177, 252, 243, 2, 235, 252, 138, 2, 32, 253, 27, 2, 81, 253, 168, 1, 123, 253, 46, 1, 156, 253, 175, 0, 180, 253, 42, 0, 191, 253, 160, 255, 190, 253, 16, 255, 176, 253, 121, 254, 148, 253, 221, 253, 106, 253, 60, 253, 47, 253, 150, 252, 230, 252, 236, 251, 141, 252, 61, 251, 38, 252, 140, 250, 177, 251, 216, 249, 46, 251, 33, 249, 157, 250, 106, 248, 0, 250, 178, 247, 89, 249, 249, 246, 168, 248, 67, 246, 238, 247, 142, 245, 46, 247, 220, 244, 104, 246, 45, 244, 160, 245, 131, 243, 215, 244, 224, 242, 16, 244, 68, 242, 79, 243, 178, 241, 150, 242, 42, 241, 232, 241, 174, 240, 73, 241, 66, 240, 188, 240, 227, 239, 67, 240, 150, 239, 224, 239, 91, 239, 152, 239, 50, 239, 107, 239, 30, 239, 92, 239, 30, 239, 108, 239, 52, 239, 156, 239, 95, 239, 239, 239, 161, 239, 98, 240, 249, 239, 248, 240, 103, 240, 175, 241, 235, 240, 136, 242, 131, 241, 129, 243, 49, 242, 152, 244, 242, 242, 203, 245, 195, 243, 23, 247, 167, 244, 121, 248, 152, 245, 238, 249, 150, 246, 114, 251, 161, 247, 4, 253, 180, 248, 158, 254, 208, 249, 60, 0, 242, 250, 219, 1, 23, 252, 122, 3, 62, 253, 20, 5, 103, 254, 165, 6, 141, 255, 43, 8, 176, 0, 162, 9, 207, 1, 8, 11, 232, 2, 91, 12, 251, 3, 153, 13, 5, 5, 191, 14, 5, 6, 204, 15, 251, 6, 189, 16, 228, 7, 146, 17, 193, 8, 73, 18, 144, 9, 225, 18, 80, 10, 89, 19, 2, 11, 176, 19, 163, 11, 230, 19, 52, 12, 253, 19, 181, 12, 242, 19, 35, 13, 199, 19, 129, 13, 124, 19, 203, 13, 19, 19, 5, 14, 140, 18, 46, 14, 232, 17, 70, 14, 43, 17, 77, 14, 86, 16, 69, 14, 107, 15, 46, 14, 108, 14, 9, 14, 93, 13, 215, 13, 66, 12, 153, 13, 29, 11, 81, 13, 243, 9, 1, 13, 197, 8, 168, 12, 151, 7, 73, 12, 109, 6, 230, 11, 73, 5, 126, 11, 47, 4, 18, 11, 33, 3, 165, 10, 32, 2, 53, 10, 50, 1, 200, 9, 84, 0, 91, 9, 141, 255, 238, 8, 217, 254, 132, 8, 58, 254, 28, 8, 180, 253, 183, 7, 67, 253, 86, 7, 232, 252, 247, 6, 164, 252, 154, 6, 115, 252, 65, 6, 85, 252, 233, 5, 71, 252, 147, 5, 72, 252, 61, 5, 87, 252, 232, 4, 112, 252, 146, 4, 145, 252, 57, 4, 184, 252, 224, 3, 227, 252, 131, 3, 17, 253, 35, 3, 61, 253, 192, 2, 103, 253, 88, 2, 141, 253, 234, 1, 172, 253, 120, 1, 196, 253, 0, 1, 211, 253, 130, 0, 215, 253, 0, 0, 208, 253, 120, 255, 188, 253, 233, 254, 156, 253, 84, 254, 110, 253, 187, 253, 49, 253, 28, 253, 230, 252, 120, 252, 142, 252, 209, 251, 39, 252, 38, 251, 178, 251, 119, 250, 49, 251, 199, 249, 163, 250, 19, 249, 10, 250, 95, 248, 101, 249, 171, 247, 184, 248, 247, 246, 3, 248, 68, 246, 71, 247, 147, 245, 134, 246, 229, 244, 195, 245, 60, 244, 0, 245, 152, 243, 63, 244, 252, 242, 131, 243, 105, 242, 209, 242, 223, 241, 41, 242, 98, 241, 144, 241, 242, 240, 8, 241, 144, 240, 148, 240, 63, 240, 54, 240, 255, 239, 240, 239, 209, 239, 198, 239, 182, 239, 184, 239, 175, 239, 199, 239, 189, 239, 245, 239, 225, 239, 69, 240, 26, 240, 181, 240, 104, 240, 69, 241, 204, 240, 245, 241, 70, 241, 197, 242, 211, 241, 179, 243, 117, 242, 190, 244, 41, 243, 228, 245, 239, 243, 32, 247, 199, 244, 116, 248, 172, 245, 216, 249, 158, 246, 76, 251, 156, 247, 205, 252, 165, 248, 86, 254, 182, 249, 228, 255, 205, 250, 115, 1, 233, 251, 3, 3, 8, 253, 143, 4, 40, 254, 19, 6, 73, 255, 141, 7, 102, 0, 250, 8, 127, 1, 89, 10, 150, 2, 165, 11, 165, 3, 221, 12, 173, 4, 0, 14, 172, 5, 10, 15, 160, 6, 252, 15, 138, 7, 209, 16, 103, 8, 139, 17, 55, 9, 40, 18, 251, 9, 165, 18, 173, 10, 4, 19, 81, 11, 68, 19, 229, 11, 100, 19, 104, 12, 101, 19, 218, 12, 70, 19, 59, 13, 10, 19, 139, 13, 174, 18, 202, 13, 55, 18, 247, 13, 164, 17, 20, 14, 247, 16, 33, 14, 52, 16, 29, 14, 89, 15, 10, 14, 108, 14, 234, 13, 113, 13, 189, 13, 103, 12, 132, 13, 84, 11, 66, 13, 59, 10, 246, 12, 31, 9, 162, 12, 2, 8, 72, 12, 231, 6, 231, 11, 211, 5, 131, 11, 198, 4, 27, 11, 196, 3, 177, 10, 206, 2, 70, 10, 232, 1, 218, 9, 18, 1, 109, 9, 79, 0, 3, 9, 160, 255, 155, 8, 4, 255, 52, 8, 124, 254, 207, 7, 9, 254, 109, 7, 170, 253, 14, 7, 94, 253, 176, 6, 38, 253, 86, 6, 253, 252, 253, 5, 228, 252, 165, 5, 217, 252, 78, 5, 218, 252, 246, 4, 228, 252, 158, 4, 246, 252, 68, 4, 14, 253, 234, 3, 42, 253, 141, 3, 71, 253, 44, 3, 100, 253, 200, 2, 128, 253, 96, 2, 151, 253, 243, 1, 169, 253, 130, 1, 181, 253, 10, 1, 185, 253, 142, 0, 179, 253, 13, 0, 162, 253, 135, 255, 135, 253, 250, 254, 95, 253, 103, 254, 42, 253, 208, 253, 232, 252, 51, 253, 155, 252, 146, 252, 63, 252, 236, 251, 214, 251, 66, 251, 98, 251, 149, 250, 224, 250, 230, 249, 83, 250, 52, 249, 187, 249, 128, 248, 25, 249, 204, 247, 111, 248, 24, 247, 190, 247, 101, 246, 5, 247, 178, 245, 74, 246, 3, 245, 140, 245, 89, 244, 208, 244, 179, 243, 22, 244, 21, 243, 98, 243, 127, 242, 182, 242, 243, 241, 22, 242, 115, 241, 132, 241, 0, 241, 3, 241, 155, 240, 150, 240, 69, 240, 62, 240, 1, 240, 253, 239, 205, 239, 215, 239, 174, 239, 204, 239, 161, 239, 222, 239, 169, 239, 13, 240, 199, 239, 92, 240, 248, 239, 201, 240, 63, 240, 86, 241, 155, 240, 1, 242, 13, 241, 203, 242, 145, 241, 177, 243, 43, 242, 178, 244, 215, 242, 206, 245, 148, 243, 255, 246, 98, 244, 69, 248, 63, 245, 156, 249, 41, 246, 2, 251, 31, 247, 116, 252, 33, 248, 239, 253, 43, 249, 112, 255, 61, 250, 242, 0, 83, 251, 116, 2, 109, 252, 243, 3, 138, 253, 108, 5, 167, 254, 221, 6, 195, 255, 66, 8, 220, 0, 154, 9, 242, 1, 224, 10, 2, 3, 21, 12, 12, 4, 54, 13, 13, 5, 64, 14, 7, 6, 50, 15, 245, 6, 11, 16, 216, 7, 202, 16, 174, 8, 108, 17, 119, 9, 241, 17, 49, 10, 89, 18, 220, 10, 164, 18, 120, 11, 208, 18, 3, 12, 221, 18, 126, 12, 205, 18, 232, 12, 159, 18, 64, 13, 84, 18, 136, 13, 238, 17, 191, 13, 108, 17, 229, 13, 210, 16, 252, 13, 34, 16, 1, 14, 93, 15, 250, 13, 134, 14, 228, 13, 160, 13, 193, 13, 172, 12, 147, 13, 175, 11, 90, 13, 171, 10, 25, 13, 163, 9, 206, 12, 154, 8, 125, 12, 146, 7, 38, 12, 143, 6, 202, 11, 146, 5, 107, 11, 158, 4, 7, 11, 182, 3, 163, 10, 218, 2, 61, 10, 13, 2, 215, 9, 81, 1, 113, 9, 166, 0, 12, 9, 14, 0, 169, 8, 136, 255, 70, 8, 20, 255, 231, 7, 176, 254, 137, 7, 96, 254, 46, 7, 31, 254, 211, 6, 237, 253, 122, 6, 201, 253, 35, 6, 177, 253, 203, 5, 163, 253, 115, 5, 158, 253, 27, 5, 161, 253, 193, 4, 170, 253, 102, 4, 181, 253, 8, 4, 193, 253, 167, 3, 207, 253, 67, 3, 219, 253, 219, 2, 227, 253, 110, 2, 231, 253, 253, 1, 228, 253, 135, 1, 219, 253, 13, 1, 200, 253, 140, 0, 173, 253, 6, 0, 135, 253, 124, 255, 86, 253, 235, 254, 26, 253, 85, 254, 210, 252, 186, 253, 126, 252, 25, 253, 30, 252, 118, 252, 178, 251, 204, 251, 58, 251, 32, 251, 183, 250, 113, 250, 42, 250, 190, 249, 146, 249, 11, 249, 242, 248, 86, 248, 73, 248, 161, 247, 154, 247, 236, 246, 230, 246, 56, 246, 46, 246, 134, 245, 118, 245, 217, 244, 191, 244, 49, 244, 11, 244, 144, 243, 94, 243, 246, 242, 186, 242, 102, 242, 32, 242, 225, 241, 149, 241, 106, 241, 27, 241, 254, 240, 179, 240, 163, 240, 96, 240, 88, 240, 35, 240, 30, 240, 0, 240, 246, 239, 247, 239, 224, 239, 9, 240, 224, 239, 56, 240, 242, 239, 132, 240, 26, 240, 238, 240, 85, 240, 118, 241, 166, 240, 26, 242, 11, 241, 219, 242, 132, 241, 183, 243, 16, 242, 173, 244, 175, 242, 186, 245, 95, 243, 221, 246, 31, 244, 20, 248, 238, 244, 91, 249, 203, 245, 176, 250, 182, 246, 17, 252, 169, 247, 123, 253, 168, 248, 234, 254, 173, 249, 91, 0, 185, 250, 205, 1, 202, 251, 62, 3, 221, 252, 168, 4, 242, 253, 11, 6, 8, 255, 101, 7, 25, 0, 177, 8, 41, 1, 240, 9, 52, 2, 29, 11, 59, 3, 56, 12, 59, 4, 63, 13, 50, 5, 47, 14, 31, 6, 8, 15, 1, 7, 199, 15, 216, 7, 109, 16, 162, 8, 248, 16, 95, 9, 102, 17, 13, 10, 184, 17, 172, 10, 237, 17, 60, 11, 6, 18, 187, 11, 1, 18, 42, 12, 226, 17, 137, 12, 166, 17, 214, 12, 80, 17, 21, 13, 225, 16, 66, 13, 90, 16, 95, 13, 189, 15, 110, 13, 13, 15, 110, 13, 75, 14, 97, 13, 122, 13, 70, 13, 157, 12, 34, 13, 183, 11, 242, 12, 201, 10, 185, 12, 215, 9, 120, 12, 227, 8, 47, 12, 239, 7, 225, 11, 0, 7, 142, 11, 22, 6, 54, 11, 51, 5, 219, 10, 90, 4, 126, 10, 140, 3, 31, 10, 204, 2, 192, 9, 25, 2, 97, 9, 118, 1, 3, 9, 227, 0, 165, 8, 95, 0, 72, 8, 238, 255, 237, 7, 139, 255, 148, 7, 55, 255, 59, 7, 242, 254, 229, 6, 184, 254, 144, 6, 141, 254, 59, 6, 107, 254, 229, 5, 83, 254, 145, 5, 67, 254, 59, 5, 57, 254, 228, 4, 52, 254, 139, 4, 51, 254, 49, 4, 50, 254, 210, 3, 50, 254, 114, 3, 48, 254, 14, 3, 44, 254, 166, 2, 36, 254, 56, 2, 21, 254, 199, 1, 1, 254, 81, 1, 228, 253, 213, 0, 191, 253, 85, 0, 146, 253, 208, 255, 90, 253, 69, 255, 23, 253, 180, 254, 202, 252, 31, 254, 114, 252, 131, 253, 15, 252, 228, 252, 160, 251, 65, 252, 39, 251, 153, 251, 164, 250, 238, 250, 23, 250, 65, 250, 129, 249, 145, 249, 227, 248, 224, 248, 62, 248, 45, 248, 146, 247, 124, 247, 227, 246, 202, 246, 50, 246, 27, 246, 128, 245, 112, 245, 208, 244, 201, 244, 36, 244, 40, 244, 126, 243, 143, 243, 226, 242, 255, 242, 81, 242, 121, 242, 206, 241, 0, 242, 91, 241, 147, 241, 249, 240, 53, 241, 172, 240, 230, 240, 118, 240, 168, 240, 86, 240, 123, 240, 80, 240, 97, 240, 99, 240, 89, 240, 146, 240, 100, 240, 221, 240, 132, 240, 67, 241, 183, 240, 198, 241, 255, 240, 99, 242, 89, 241, 28, 243, 200, 241, 238, 243, 73, 242, 216, 244, 220, 242, 216, 245, 128, 243, 237, 246, 52, 244, 20, 248, 247, 244, 75, 249, 200, 245, 143, 250, 166, 246, 223, 251, 142, 247, 55, 253, 129, 248, 150, 254, 122, 249, 246, 255, 124, 250, 87, 1, 130, 251, 183, 2, 141, 252, 19, 4, 153, 253, 105, 5, 166, 254, 181, 6, 178, 255, 246, 7, 186, 0, 42, 9, 193, 1, 80, 10, 195, 2, 100, 11, 190, 3, 100, 12, 179, 4, 81, 13, 158, 5, 39, 14, 128, 6, 230, 14, 85, 7, 141, 15, 31, 8, 25, 16, 220, 8, 140, 16, 140, 9, 228, 16, 44, 10, 33, 17, 190, 10, 67, 17, 65, 11, 73, 17, 180, 11, 53, 17, 23, 12, 7, 17, 105, 12, 192, 16, 172, 12, 97, 16, 222, 12, 236, 15, 2, 13, 98, 15, 23, 13, 197, 14, 30, 13, 23, 14, 24, 13, 91, 13, 5, 13, 147, 12, 231, 12, 194, 11, 191, 12, 234, 10, 141, 12, 13, 10, 84, 12, 46, 9, 19, 12, 79, 8, 203, 11, 114, 7, 127, 11, 153, 6, 45, 11, 199, 5, 217, 10, 253, 4, 129, 10, 61, 4, 40, 10, 136, 3, 206, 9, 223, 2, 115, 9, 67, 2, 24, 9, 181, 1, 189, 8, 54, 1, 100, 8, 196, 0, 11, 8, 95, 0, 180, 7, 9, 0, 94, 7, 192, 255, 8, 7, 129, 255, 179, 6, 77, 255, 95, 6, 34, 255, 10, 6, 255, 254, 181, 5, 227, 254, 95, 5, 204, 254, 8, 5, 186, 254, 175, 4, 170, 254, 85, 4, 156, 254, 247, 3, 142, 254, 151, 3, 126, 254, 51, 3, 108, 254, 203, 2, 86, 254, 96, 2, 59, 254, 240, 1, 27, 254, 123, 1, 243, 253, 2, 1, 196, 253, 131, 0, 140, 253, 0, 0, 75, 253, 120, 255, 0, 253, 235, 254, 172, 252, 86, 254, 79, 252, 190, 253, 231, 251, 33, 253, 116, 251, 129, 252, 249, 250, 220, 251, 116, 250, 51, 251, 230, 249, 136, 250, 81, 249, 219, 249, 180, 248, 43, 249, 17, 248, 123, 248, 106, 247, 202, 247, 191, 246, 27, 247, 19, 246, 109, 246, 103, 245, 195, 245, 190, 244, 28, 245, 25, 244, 124, 244, 124, 243, 227, 243, 232, 242, 82, 243, 94, 242, 204, 242, 228, 241, 81, 242, 120, 241, 227, 241, 30, 241, 130, 241, 216, 240, 49, 241, 166, 240, 239, 240, 140, 240, 190, 240, 137, 240, 159, 240, 158, 240, 145, 240, 205, 240, 150, 240, 23, 241, 175, 240, 124, 241, 218, 240, 250, 241, 25, 241, 146, 242, 107, 241, 68, 243, 207, 241, 12, 244, 70, 242, 235, 244, 207, 242, 224, 245, 104, 243, 231, 246, 17, 244, 0, 248, 202, 244, 40, 249, 144, 245, 93, 250, 98, 246, 156, 251, 64, 247, 227, 252, 40, 248, 49, 254, 23, 249, 130, 255, 14, 250, 211, 0, 12, 251, 35, 2, 13, 252, 113, 3, 18, 253, 185, 4, 23, 254, 249, 5, 30, 255, 47, 7, 33, 0, 89, 8, 34, 1, 117, 9, 32, 2, 131, 10, 24, 3, 126, 11, 10, 4, 102, 12, 245, 4, 59, 13, 213, 5, 248, 13, 172, 6, 160, 14, 119, 7, 47, 15, 54, 8, 166, 15, 232, 8, 4, 16, 140, 9, 72, 16, 34, 10, 116, 16, 169, 10, 134, 16, 33, 11, 126, 16, 138, 11, 94, 16, 228, 11, 39, 16, 45, 12, 217, 15, 104, 12, 118, 15, 148, 12, 255, 14, 179, 12, 119, 14, 193, 12, 223, 13, 197, 12, 58, 13, 189, 12, 137, 12, 169, 12, 207, 11, 139, 12, 14, 11, 100, 12, 72, 10, 51, 12, 127, 9, 252, 11, 181, 8, 191, 11, 237, 7, 124, 11, 40, 7, 52, 11, 104, 6, 232, 10, 174, 5, 153, 10, 254, 4, 72, 10, 86, 4, 245, 9, 185, 3, 161, 9, 38, 3, 77, 9, 159, 2, 248, 8, 37, 2, 164, 8, 182, 1, 80, 8, 82, 1, 253, 7, 250, 0, 170, 7, 172, 0, 88, 7, 104, 0, 5, 7, 45, 0, 178, 6, 252, 255, 96, 6, 207, 255, 13, 6, 169, 255, 184, 5, 134, 255, 98, 5, 104, 255, 11, 5, 76, 255, 177, 4, 48, 255, 85, 4, 21, 255, 247, 3, 248, 254, 148, 3, 215, 254, 45, 3, 180, 254, 196, 2, 141, 254, 85, 2, 95, 254, 226, 1, 44, 254, 107, 1, 241, 253, 238, 0, 176, 253, 108, 0, 100, 253, 232, 255, 18, 253, 92, 255, 182, 252, 202, 254, 81, 252, 53, 254, 227, 251, 155, 253, 108, 251, 252, 252, 237, 250, 90, 252, 101, 250, 179, 251, 214, 249, 10, 251, 64, 249, 95, 250, 164, 248, 177, 249, 4, 248, 2, 249, 95, 247, 84, 248, 183, 246, 165, 247, 15, 246, 248, 246, 106, 245, 78, 246, 199, 244, 169, 245, 41, 244, 9, 245, 146, 243, 111, 244, 5, 243, 222, 243, 132, 242, 87, 243, 16, 242, 218, 242, 171, 241, 105, 242, 88, 241, 5, 242, 23, 241, 175, 241, 234, 240, 105, 241, 211, 240, 49, 241, 210, 240, 12, 241, 234, 240, 248, 240, 25, 241, 245, 240, 96, 241, 5, 241, 192, 241, 39, 241, 58, 242, 92, 241, 202, 242, 162, 241, 114, 243, 252, 241, 49, 244, 102, 242, 4, 245, 226, 242, 235, 245, 111, 243, 227, 246, 10, 244, 236, 247, 180, 244, 3, 249, 109, 245, 38, 250, 49, 246, 84, 251, 1, 247, 137, 252, 219, 247, 197, 253, 190, 248, 4, 255, 168, 249, 67, 0, 153, 250, 130, 1, 142, 251, 192, 2, 135, 252, 249, 3, 130, 253, 43, 5, 127, 254, 84, 6, 122, 255, 114, 7, 114, 0, 132, 8, 104, 1, 135, 9, 91, 2, 123, 10, 71, 3, 93, 11, 44, 4, 44, 12, 10, 5, 232, 12, 222, 5, 143, 13, 166, 6, 31, 14, 100, 7, 152, 14, 22, 8, 251, 14, 187, 8, 70, 15, 83, 9, 121, 15, 221, 9, 148, 15, 88, 10, 153, 15, 198, 10, 134, 15, 36, 11, 94, 15, 115, 11, 33, 15, 181, 11, 209, 14, 232, 11, 110, 14, 14, 12, 251, 13, 38, 12, 122, 13, 51, 12, 234, 12, 51, 12, 81, 12, 41, 12, 174, 11, 21, 12, 4, 11, 247, 11, 86, 10, 210, 11, 164, 9, 165, 11, 240, 8, 113, 11, 62, 8, 56, 11, 142, 7, 250, 10, 226, 6, 184, 10, 59, 6, 114, 10, 154, 5, 42, 10, 1, 5, 224, 9, 113, 4, 147, 9, 234, 3, 71, 9, 108, 3, 249, 8, 248, 2, 172, 8, 142, 2, 94, 8, 45, 2, 16, 8, 213, 1, 194, 7, 135, 1, 116, 7, 63, 1, 38, 7, 0, 1, 215, 6, 199, 0, 136, 6, 147, 0, 57, 6, 100, 0, 232, 5, 57, 0, 149, 5, 16, 0, 65, 5, 234, 255, 233, 4, 196, 255, 144, 4, 156, 255, 52, 4, 115, 255, 212, 3, 71, 255, 114, 3, 24, 255, 10, 3, 229, 254, 159, 2, 173, 254, 48, 2, 111, 254, 188, 1, 42, 254, 67, 1, 222, 253, 197, 0, 139, 253, 65, 0, 47, 253, 187, 255, 205, 252, 47, 255, 97, 252, 157, 254, 238, 251, 7, 254, 116, 251, 108, 253, 241, 250, 205, 252, 103, 250, 43, 252, 215, 249, 134, 251, 65, 249, 222, 250, 166, 248, 52, 250, 6, 248, 136, 249, 102, 247, 220, 248, 194, 246, 48, 248, 32, 246, 134, 247, 127, 245, 223, 246, 227, 244, 59, 246, 76, 244, 157, 245, 189, 243, 5, 245, 55, 243, 117, 244, 189, 242, 238, 243, 81, 242, 113, 243, 242, 241, 255, 242, 165, 241, 154, 242, 105, 241, 66, 242, 65, 241, 248, 241, 45, 241, 190, 241, 47, 241, 147, 241, 71, 241, 122, 241, 117, 241, 113, 241, 186, 241, 121, 241, 23, 242, 147, 241, 138, 242, 191, 241, 20, 243, 253, 241, 180, 243, 76, 242, 104, 244, 172, 242, 47, 245, 28, 243, 8, 246, 156, 243, 243, 246, 44, 244, 237, 247, 201, 244, 244, 248, 116, 245, 6, 250, 44, 246, 34, 251, 239, 246, 69, 252, 188, 247, 111, 253, 146, 248, 157, 254, 111, 249, 203, 255, 83, 250, 249, 0, 61, 251, 37, 2, 42, 252, 78, 3, 27, 253, 113, 4, 13, 254, 140, 5, 255, 254, 157, 6, 240, 255, 164, 7, 220, 0, 158, 8, 199, 1, 136, 9, 173, 2, 100, 10, 140, 3, 46, 11, 100, 4, 229, 11, 51, 5, 137, 12, 250, 5, 25, 13, 181, 6, 148, 13, 101, 7, 250, 13, 10, 8, 74, 14, 161, 8, 131, 14, 44, 9, 168, 14, 171, 9, 183, 14, 27, 10, 177, 14, 125, 10, 150, 14, 209, 10, 105, 14, 23, 11, 41, 14, 81, 11, 217, 13, 124, 11, 122, 13, 156, 11, 12, 13, 176, 11, 148, 12, 185, 11, 16, 12, 183, 11, 132, 11, 172, 11, 242, 10, 152, 11, 89, 10, 123, 11, 190, 9, 87, 11, 33, 9, 46, 11, 132, 8, 253, 10, 231, 7, 200, 10, 78, 7, 143, 10, 185, 6, 82, 10, 41, 6, 18, 10, 158, 5, 207, 9, 27, 5, 139, 9, 158, 4, 69, 9, 42, 4, 254, 8, 189, 3, 183, 8, 89, 3, 111, 8, 251, 2, 38, 8, 164, 2, 221, 7, 86, 2, 148, 7, 12, 2, 73, 7, 201, 1, 254, 6, 139, 1, 178, 6, 81, 1, 100, 6, 26, 1, 22, 6, 230, 0, 198, 5, 181, 0, 115, 5, 131, 0, 30, 5, 82, 0, 199, 4, 32, 0, 109, 4, 237, 255, 15, 4, 183, 255, 174, 3, 125, 255, 72, 3, 62, 255, 223, 2, 251, 254, 114, 2, 177, 254, 0, 2, 99, 254, 138, 1, 14, 254, 14, 1, 177, 253, 142, 0, 79, 253, 10, 0, 229, 252, 129, 255, 115, 252, 242, 254, 251, 251, 94, 254, 123, 251, 199, 253, 244, 250, 43, 253, 104, 250, 140, 252, 214, 249, 235, 251, 64, 249, 69, 251, 166, 248, 158, 250, 8, 248, 246, 249, 105, 247, 76, 249, 203, 246, 163, 248, 45, 246, 253, 247, 146, 245, 88, 247, 251, 244, 183, 246, 107, 244, 26, 246, 227, 243, 132, 245, 101, 243, 245, 244, 242, 242, 111, 244, 140, 242, 243, 243, 51, 242, 128, 243, 236, 241, 26, 243, 182, 241, 193, 242, 145, 241, 117, 242, 129, 241, 55, 242, 133, 241, 8, 242, 156, 241, 234, 241, 203, 241, 220, 241, 14, 242, 222, 241, 103, 242, 241, 241, 213, 242, 21, 242, 87, 243, 74, 242, 238, 243, 143, 242, 152, 244, 229, 242, 84, 245, 75, 243, 33, 246, 192, 243, 253, 246, 67, 244, 232, 247, 213, 244, 222, 248, 115, 245, 225, 249, 29, 246, 236, 250, 211, 246, 255, 251, 147, 247, 23, 253, 92, 248, 51, 254, 46, 249, 81, 255, 6, 250, 109, 0, 227, 250, 137, 1, 197, 251, 162, 2, 170, 252, 182, 3, 145, 253, 195, 4, 121, 254, 199, 5, 96, 255, 194, 6, 68, 0, 177, 7, 39, 1, 146, 8, 6, 2, 101, 9, 223, 2, 41, 10, 177, 3, 220, 10, 124, 4, 125, 11, 61, 5, 11, 12, 247, 5, 136, 12, 165, 6, 239, 12, 72, 7, 67, 13, 224, 7, 132, 13, 108, 8, 176, 13, 235, 8, 201, 13, 94, 9, 206, 13, 196, 9, 193, 13, 27, 10, 164, 13, 103, 10, 117, 13, 167, 10, 55, 13, 218, 10, 235, 12, 1, 11, 147, 12, 29, 11, 47, 12, 47, 11, 193, 11, 54, 11, 75, 11, 53, 11, 207, 10, 42, 11, 77, 10, 24, 11, 200, 9, 254, 10, 65, 9, 222, 10, 185, 8, 184, 10, 50, 8, 141, 10, 172, 7, 93, 10, 41, 7, 42, 10, 170, 6, 243, 9, 46, 6, 186, 9, 185, 5, 126, 9, 72, 5, 65, 9, 222, 4, 2, 9, 121, 4, 194, 8, 27, 4, 129, 8, 194, 3, 62, 8, 111, 3, 251, 7, 32, 3, 182, 7, 215, 2, 113, 7, 147, 2, 43, 7, 81, 2, 226, 6, 18, 2, 153, 6, 214, 1, 79, 6, 156, 1, 2, 6, 98, 1, 178, 5, 41, 1, 97, 5, 239, 0, 13, 5, 179, 0, 180, 4, 118, 0, 90, 4, 53, 0, 253, 3, 243, 255, 154, 3, 171, 255, 52, 3, 93, 255, 201, 2, 11, 255, 90, 2, 180, 254, 231, 1, 86, 254, 111, 1, 242, 253, 241, 0, 136, 253, 111, 0, 23, 253, 234, 255, 159, 252, 95, 255, 33, 252, 207, 254, 158, 251, 58, 254, 20, 251, 163, 253, 133, 250, 8, 253, 242, 249, 104, 252, 91, 249, 198, 251, 194, 248, 35, 251, 39, 248, 125, 250, 138, 247, 216, 249, 238, 246, 50, 249, 85, 246, 141, 248, 191, 245, 236, 247, 46, 245, 77, 247, 164, 244, 179, 246, 34, 244, 31, 246, 170, 243, 145, 245, 60, 243, 12, 245, 221, 242, 144, 244, 139, 242, 30, 244, 72, 242, 183, 243, 21, 242, 92, 243, 244, 241, 13, 243, 230, 241, 205, 242, 234, 241, 155, 242, 2, 242, 119, 242, 46, 242, 99, 242, 110, 242, 95, 242, 194, 242, 106, 242, 41, 243, 134, 242, 164, 243, 178, 242, 50, 244, 238, 242, 209, 244, 57, 243, 129, 245, 147, 243, 65, 246, 252, 243, 15, 247, 115, 244, 233, 247, 247, 244, 208, 248, 136, 245, 193, 249, 36, 246, 187, 250, 205, 246, 187, 251, 128, 247, 193, 252, 58, 248, 203, 253, 253, 248, 215, 254, 199, 249, 227, 255, 152, 250, 236, 0, 109, 251, 245, 1, 68, 252, 250, 2, 32, 253, 247, 3, 252, 253, 238, 4, 216, 254, 220, 5, 179, 255, 191, 6, 139, 0, 150, 7, 95, 1, 96, 8, 49, 2, 29, 9, 251, 2, 202, 9, 192, 3, 103, 10, 124, 4, 243, 10, 47, 5, 110, 11, 218, 5, 215, 11, 123, 6, 47, 12, 16, 7, 116, 12, 155, 7, 167, 12, 26, 8, 202, 12, 142, 8, 218, 12, 246, 8, 218, 12, 81, 9, 202, 12, 161, 9, 171, 12, 229, 9, 126, 12, 29, 10, 69, 12, 75, 10, 255, 11, 110, 10, 175, 11, 136, 10, 87, 11, 151, 10, 247, 10, 158, 10, 144, 10, 156, 10, 37, 10, 147, 10, 181, 9, 131, 10, 67, 9, 109, 10, 208, 8, 80, 10, 92, 8, 46, 10, 233, 7, 9, 10, 120, 7, 224, 9, 10, 7, 178, 9, 158, 6, 130, 9, 55, 6, 80, 9, 210, 5, 27, 9, 114, 5, 228, 8, 23, 5, 172, 8, 192, 4, 114, 8, 109, 4, 55, 8, 31, 4, 251, 7, 211, 3, 188, 7, 139, 3, 125, 7, 71, 3, 60, 7, 3, 3, 249, 6, 194, 2, 181, 6, 131, 2, 111, 6, 68, 2, 38, 6, 5, 2, 219, 5, 197, 1, 142, 5, 133, 1, 61, 5, 66, 1, 234, 4, 252, 0, 147, 4, 179, 0, 57, 4, 103, 0, 217, 3, 23, 0, 120, 3, 196, 255, 17, 3, 106, 255, 166, 2, 10, 255, 54, 2, 166, 254, 193, 1, 58, 254, 72, 1, 203, 253, 202, 0, 84, 253, 72, 0, 216, 252, 194, 255, 86, 252, 54, 255, 207, 251, 166, 254, 67, 251, 19, 254, 179, 250, 123, 253, 31, 250, 224, 252, 137, 249, 67, 252, 241, 248, 163, 251, 86, 248, 2, 251, 190, 247, 96, 250, 38, 247, 190, 249, 144, 246, 30, 249, 0, 246, 128, 248, 116, 245, 229, 247, 240, 244, 78, 247, 116, 244, 189, 246, 1, 244, 50, 246, 154, 243, 175, 245, 63, 243, 52, 245, 242, 242, 195, 244, 179, 242, 92, 244, 132, 242, 1, 244, 102, 242, 177, 243, 89, 242, 111, 243, 94, 242, 57, 243, 117, 242, 18, 243, 158, 242, 250, 242, 219, 242, 240, 242, 41, 243, 245, 242, 139, 243, 10, 243, 254, 243, 45, 243, 129, 244, 96, 243, 22, 245, 161, 243, 185, 245, 241, 243, 107, 246, 79, 244, 43, 247, 186, 244, 246, 247, 51, 245, 205, 248, 183, 245, 174, 249, 71, 246, 150, 250, 226, 246, 133, 251, 134, 247, 121, 252, 52, 248, 114, 253, 234, 248, 108, 254, 165, 249, 103, 255, 104, 250, 96, 0, 48, 251, 87, 1, 251, 251, 75, 2, 202, 252, 58, 3, 153, 253, 34, 4, 106, 254, 2, 5, 59, 255, 217, 5, 7, 0, 166, 6, 210, 0, 103, 7, 153, 1, 26, 8, 91, 2, 193, 8, 23, 3, 88, 9, 205, 3, 225, 9, 123, 4, 91, 10, 32, 5, 197, 10, 188, 5, 30, 11, 79, 6, 103, 11, 215, 6, 161, 11, 85, 7, 203, 11, 200, 7, 229, 11, 48, 8, 239, 11, 142, 8, 236, 11, 223, 8, 219, 11, 39, 9, 191, 11, 100, 9, 150, 11, 151, 9, 98, 11, 192, 9, 38, 11, 223, 9, 224, 10, 247, 9, 148, 10, 5, 10, 66, 10, 12, 10, 235, 9, 10, 10, 144, 9, 3, 10, 50, 9, 246, 9, 211, 8, 227, 9, 114, 8, 203, 9, 17, 8, 174, 9, 178, 7, 141, 9, 82, 7, 105, 9, 247, 6, 66, 9, 156, 6, 23, 9, 68, 6, 235, 8, 240, 5, 189, 8, 157, 5, 140, 8, 78, 5, 90, 8, 2, 5, 37, 8, 184, 4, 240, 7, 113, 4, 184, 7, 43, 4, 126, 7, 231, 3, 67, 7, 165, 3, 7, 7, 99, 3, 199, 6, 33, 3, 133, 6, 222, 2, 65, 6, 155, 2, 251, 5, 87, 2, 178, 5, 17, 2, 102, 5, 200, 1, 22, 5, 124, 1, 195, 4, 46, 1, 108, 4, 219, 0, 18, 4, 132, 0, 180, 3, 40, 0, 81, 3, 202, 255, 233, 2, 101, 255, 125, 2, 249, 254, 13, 2, 136, 254, 151, 1, 20, 254, 29, 1, 152, 253, 159, 0, 24, 253, 28, 0, 148, 252, 150, 255, 10, 252, 10, 255, 125, 251, 122, 254, 236, 250, 231, 253, 88, 250, 81, 253, 195, 249, 184, 252, 44, 249, 28, 252, 148, 248, 127, 251, 254, 247, 226, 250, 106, 247, 69, 250, 218, 246, 169, 249, 77, 246, 15, 249, 199, 245, 120, 248, 71, 245, 229, 247, 209, 244, 87, 247, 100, 244, 207, 246, 2, 244, 78, 246, 172, 243, 214, 245, 98, 243, 101, 245, 40, 243, 0, 245, 253, 242, 164, 244, 223, 242, 84, 244, 211, 242, 16, 244, 216, 242, 216, 243, 237, 242, 174, 243, 20, 243, 146, 243, 75, 243, 131, 243, 149, 243, 130, 243, 239, 243, 144, 243, 89, 244, 172, 243, 211, 244, 214, 243, 92, 245, 14, 244, 244, 245, 84, 244, 153, 246, 167, 244, 74, 247, 7, 245, 6, 248, 115, 245, 206, 248, 235, 245, 156, 249, 111, 246, 116, 250, 252, 246, 82, 251, 147, 247, 51, 252, 51, 248, 26, 253, 218, 248, 2, 254, 137, 249, 236, 254, 62, 250, 212, 255, 247, 250, 186, 0, 182, 251, 157, 1, 119, 252, 124, 2, 58, 253, 86, 3, 254, 253, 41, 4, 194, 254, 243, 4, 133, 255, 180, 5, 67, 0, 106, 6, 0, 1, 22, 7, 184, 1, 181, 7, 108, 2, 71, 8, 26, 3, 204, 8, 192, 3, 68, 9, 96, 4, 173, 9, 248, 4, 8, 10, 134, 5, 85, 10, 11, 6, 147, 10, 134, 6, 195, 10, 249, 6, 230, 10, 97, 7, 252, 10, 191, 7, 4, 11, 19, 8, 1, 11, 93, 8, 243, 10, 158, 8, 218, 10, 214, 8, 184, 10, 5, 9, 141, 10, 42, 9, 91, 10, 72, 9, 34, 10, 93, 9, 226, 9, 108, 9, 160, 9, 116, 9, 88, 9, 117, 9, 13, 9, 113, 9, 193, 8, 103, 9, 115, 8, 88, 9, 36, 8, 69, 9, 214, 7, 46, 9, 135, 7, 19, 9, 57, 7, 245, 8, 237, 6, 213, 8, 162, 6, 176, 8, 89, 6, 139, 8, 16, 6, 99, 8, 202, 5, 57, 8, 133, 5, 12, 8, 66, 5, 222, 7, 255, 4, 173, 7, 189, 4, 122, 7, 124, 4, 70, 7, 58, 4, 15, 7, 249, 3, 215, 6, 182, 3, 155, 6, 115, 3, 93, 6, 46, 3, 28, 6, 231, 2, 216, 5, 157, 2, 144, 5, 80, 2, 70, 5, 0, 2, 248, 4, 173, 1, 165, 4, 85, 1, 79, 4, 249, 0, 245, 3, 152, 0, 151, 3, 51, 0, 52, 3, 202, 255, 204, 2, 92, 255, 96, 2, 231, 254, 239, 1, 109, 254, 122, 1, 239, 253, 255, 0, 108, 253, 129, 0, 230, 252, 255, 255, 90, 252, 121, 255, 204, 251, 238, 254, 59, 251, 94, 254, 168, 250, 205, 253, 19, 250, 56, 253, 126, 249, 162, 252, 233, 248, 9, 252, 86, 248, 113, 251, 198, 247, 216, 250, 58, 247, 64, 250, 178, 246, 170, 249, 48, 246, 23, 249, 181, 245, 135, 248, 67, 245, 252, 247, 218, 244, 119, 247, 124, 244, 249, 246, 42, 244, 130, 246, 228, 243, 19, 246, 171, 243, 174, 245, 128, 243, 82, 245, 100, 243, 1, 245, 88, 243, 187, 244, 91, 243, 129, 244, 109, 243, 84, 244, 144, 243, 51, 244, 195, 243, 32, 244, 5, 244, 25, 244, 87, 244, 32, 244, 184, 244, 52, 244, 39, 245, 85, 244, 165, 245, 132, 244, 47, 246, 192, 244, 198, 246, 9, 245, 104, 247, 93, 245, 21, 248, 189, 245, 204, 248, 41, 246, 139, 249, 159, 246, 81, 250, 31, 247, 29, 251, 168, 247, 237, 251, 57, 248, 193, 252, 212, 248, 152, 253, 117, 249, 112, 254, 27, 250, 72, 255, 199, 250, 29, 0, 119, 251, 240, 0, 43, 252, 191, 1, 225, 252, 139, 2, 152, 253, 79, 3, 79, 254, 12, 4, 5, 255, 194, 4, 186, 255, 110, 5, 107, 0, 17, 6, 25, 1, 168, 6, 196, 1, 54, 7, 106, 2, 183, 7, 8, 3, 44, 8, 161, 3, 149, 8, 50, 4, 240, 8, 188, 4, 64, 9, 62, 5, 132, 9, 183, 5, 186, 9, 38, 6, 229, 9, 142, 6, 4, 10, 236, 6, 24, 10, 65, 7, 33, 10, 142, 7, 32, 10, 210, 7, 22, 10, 14, 8, 3, 10, 64, 8, 234, 9, 108, 8, 201, 9, 144, 8, 162, 9, 172, 8, 118, 9, 194, 8, 68, 9, 209, 8, 15, 9, 219, 8, 215, 8, 223, 8, 156, 8, 221, 8, 96, 8, 216, 8, 35, 8, 207, 8, 228, 7, 192, 8, 165, 7, 174, 8, 103, 7, 154, 8, 40, 7, 131, 8, 233, 6, 104, 8, 171, 6, 74, 8, 109, 6, 44, 8, 49, 6, 9, 8, 243, 5, 229, 7, 183, 5, 191, 7, 122, 5, 149, 7, 60, 5, 107, 7, 255, 4, 62, 7, 192, 4, 14, 7, 128, 4, 219, 6, 63, 4, 166, 6, 251, 3, 109, 6, 182, 3, 50, 6, 110, 3, 244, 5, 34, 3, 178, 5, 211, 2, 110, 5, 128, 2, 37, 5, 41, 2, 216, 4, 207, 1, 135, 4, 112, 1, 49, 4, 12, 1, 216, 3, 163, 0, 122, 3, 54, 0, 23, 3, 197, 255, 176, 2, 78, 255, 68, 2, 210, 254, 210, 1, 81, 254, 93, 1, 205, 253, 228, 0, 69, 253, 101, 0, 186, 252, 229, 255, 43, 252, 96, 255, 155, 251, 213, 254, 9, 251, 72, 254, 119, 250, 185, 253, 228, 249, 39, 253, 82, 249, 148, 252, 194, 248, 0, 252, 53, 248, 109, 251, 172, 247, 217, 250, 41, 247, 71, 250, 171, 246, 185, 249, 53, 246, 45, 249, 199, 245, 166, 248, 98, 245, 37, 248, 8, 245, 169, 247, 184, 244, 53, 247, 116, 244, 200, 246, 61, 244, 99, 246, 19, 244, 7, 246, 246, 243, 182, 245, 233, 243, 111, 245, 233, 243, 52, 245, 248, 243, 3, 245, 22, 244, 224, 244, 67, 244, 198, 244, 127, 244, 187, 244, 199, 244, 189, 244, 31, 245, 201, 244, 132, 245, 226, 244, 245, 245, 9, 245, 115, 246, 60, 245, 252, 246, 121, 245, 144, 247, 195, 245, 46, 248, 24, 246, 212, 248, 119, 246, 131, 249, 225, 246, 56, 250, 84, 247, 242, 250, 208, 247, 176, 251, 84, 248, 116, 252, 224, 248, 57, 253, 115, 249, 255, 253, 11, 250, 197, 254, 169, 250, 139, 255, 76, 251, 77, 0, 241, 251, 12, 1, 153, 252, 201, 1, 67, 253, 128, 2, 237, 253, 48, 3, 151, 254, 218, 3, 64, 255, 124, 4, 230, 255, 22, 5, 137, 0, 166, 5, 42, 1, 44, 6, 197, 1, 169, 6, 92, 2, 27, 7, 237, 2, 131, 7, 118, 3, 223, 7, 250, 3, 48, 8, 120, 4, 119, 8, 236, 4, 179, 8, 90, 5, 229, 8, 191, 5, 12, 9, 28, 6, 42, 9, 113, 6, 61, 9, 191, 6, 73, 9, 5, 7, 76, 9, 67, 7, 72, 9, 122, 7, 62, 9, 169, 7, 44, 9, 210, 7, 21, 9, 245, 7, 250, 8, 17, 8, 217, 8, 38, 8, 182, 8, 55, 8, 142, 8, 67, 8, 101, 8, 74, 8, 57, 8, 76, 8, 11, 8, 75, 8, 220, 7, 69, 8, 172, 7, 61, 8, 122, 7, 49, 8, 72, 7, 34, 8, 23, 7, 16, 8, 227, 6, 252, 7, 176, 6, 229, 7, 124, 6, 203, 7, 72, 6, 174, 7, 18, 6, 144, 7, 219, 5, 111, 7, 164, 5, 75, 7, 106, 5, 37, 7, 47, 5, 251, 6, 242, 4, 208, 6, 179, 4, 160, 6, 112, 4, 110, 6, 43, 4, 58, 6, 226, 3, 1, 6, 151, 3, 197, 5, 71, 3, 134, 5, 242, 2, 66, 5, 155, 2, 251, 4, 62, 2, 176, 4, 221, 1, 96, 4, 119, 1, 12, 4, 12, 1, 179, 3, 157, 0, 85, 3, 41, 0, 243, 2, 178, 255, 140, 2, 54, 255, 33, 2, 181, 254, 176, 1, 48, 254, 60, 1, 169, 253, 195, 0, 30, 253, 70, 0, 146, 252, 199, 255, 4, 252, 67, 255, 115, 251, 188, 254, 228, 250, 50, 254, 85, 250, 165, 253, 198, 249, 24, 253, 58, 249, 138, 252, 178, 248, 252, 251, 45, 248, 110, 251, 174, 247, 226, 250, 53, 247, 89, 250, 196, 246, 210, 249, 90, 246, 80, 249, 249, 245, 210, 248, 162, 245, 91, 248, 85, 245, 233, 247, 20, 245, 126, 247, 222, 244, 28, 247, 181, 244, 194, 246, 152, 244, 113, 246, 137, 244, 43, 246, 134, 244, 238, 245, 147, 244, 188, 245, 171, 244, 149, 245, 210, 244, 122, 245, 7, 245, 105, 245, 71, 245, 101, 245, 150, 245, 108, 245, 240, 245, 127, 245, 85, 246, 157, 245, 198, 246, 199, 245, 66, 247, 252, 245, 199, 247, 58, 246, 86, 248, 133, 246, 237, 248, 217, 246, 138, 249, 55, 247, 46, 250, 158, 247, 216, 250, 13, 248, 134, 251, 132, 248, 55, 252, 2, 249, 235, 252, 136, 249, 160, 253, 19, 250, 85, 254, 163, 250, 10, 255, 55, 251, 189, 255, 208, 251, 109, 0, 106, 252, 25, 1, 6, 253, 195, 1, 163, 253, 102, 2, 64, 254, 4, 3, 220, 254, 155, 3, 119, 255, 43, 4, 15, 0, 179, 4, 163, 0, 51, 5, 52, 1, 170, 5, 194, 1, 24, 6, 74, 2, 126, 6, 204, 2, 217, 6, 73, 3, 44, 7, 192, 3, 116, 7, 48, 4, 179, 7, 152, 4, 234, 7, 250, 4, 25, 8, 86, 5, 62, 8, 170, 5, 91, 8, 247, 5, 113, 8, 61, 6, 128, 8, 124, 6, 136, 8, 181, 6, 138, 8, 231, 6, 134, 8, 19, 7, 126, 8, 58, 7, 112, 8, 90, 7, 95, 8, 118, 7, 74, 8, 140, 7, 49, 8, 158, 7, 22, 8, 172, 7, 249, 7, 181, 7, 217, 7, 187, 7, 183, 7, 189, 7, 148, 7, 187, 7, 111, 7, 183, 7, 73, 7, 175, 7, 34, 7, 165, 7, 250, 6, 152, 7, 208, 6, 136, 7, 164, 6, 118, 7, 121, 6, 97, 7, 74, 6, 74, 7, 26, 6, 48, 7, 232, 5, 19, 7, 179, 5, 244, 6, 124, 5, 209, 6, 66, 5, 172, 6, 6, 5, 131, 6, 199, 4, 88, 6, 131, 4, 41, 6, 60, 4, 247, 5, 241, 3, 193, 5, 162, 3, 135, 5, 78, 3, 75, 5, 246, 2, 9, 5, 154, 2, 195, 4, 57, 2, 122, 4, 211, 1, 43, 4, 104, 1, 216, 3, 250, 0, 129, 3, 134, 0, 36, 3, 14, 0, 196, 2, 149, 255, 93, 2, 22, 255, 243, 1, 146, 254, 134, 1, 13, 254, 18, 1, 133, 253, 156, 0, 251, 252, 34, 0, 112, 252, 165, 255, 228, 251, 36, 255, 88, 251, 160, 254, 205, 250, 27, 254, 68, 250, 148, 253, 189, 249, 12, 253, 58, 249, 132, 252, 186, 248, 253, 251, 64, 248, 119, 251, 204, 247, 243, 250, 96, 247, 115, 250, 250, 246, 245, 249, 158, 246, 125, 249, 74, 246, 10, 249, 0, 246, 155, 248, 192, 245, 53, 248, 140, 245, 214, 247, 99, 245, 125, 247, 69, 245, 46, 247, 53, 245, 232, 246, 48, 245, 172, 246, 56, 245, 121, 246, 76, 245, 80, 246, 108, 245, 50, 246, 153, 245, 30, 246, 211, 245, 21, 246, 23, 246, 23, 246, 103, 246, 35, 246, 194, 246, 59, 246, 38, 247, 93, 246, 149, 247, 138, 246, 13, 248, 192, 246, 140, 248, 0, 247, 20, 249, 74, 247, 161, 249, 156, 247, 53, 250, 247, 247, 206, 250, 91, 248, 107, 251, 197, 248, 11, 252, 55, 249, 173, 252, 175, 249, 82, 253, 44, 250, 247, 253, 175, 250, 154, 254, 54, 251, 61, 255, 192, 251, 223, 255, 76, 252, 124, 0, 219, 252, 22, 1, 106, 253, 172, 1, 251, 253, 62, 2, 138, 254, 202, 2, 24, 255, 80, 3, 164, 255, 207, 3, 45, 0, 72, 4, 179, 0, 185, 4, 54, 1, 34, 5, 180, 1, 131, 5, 47, 2, 221, 5, 165, 2, 47, 6, 20, 3, 120, 6, 125, 3, 187, 6, 225, 3, 245, 6, 62, 4, 39, 7, 150, 4, 83, 7, 232, 4, 120, 7, 51, 5, 150, 7, 121, 5, 175, 7, 184, 5, 193, 7, 240, 5, 205, 7, 37, 6, 213, 7, 84, 6, 217, 7, 125, 6, 216, 7, 161, 6, 211, 7, 192, 6, 203, 7, 220, 6, 192, 7, 243, 6, 178, 7, 5, 7, 161, 7, 20, 7, 142, 7, 33, 7, 121, 7, 41, 7, 98, 7, 47, 7, 73, 7, 49, 7, 46, 7, 48, 7, 18, 7, 46, 7, 243, 6, 40, 7, 211, 6, 32, 7, 176, 6, 21, 7, 140, 6, 7, 7, 101, 6, 247, 6, 60, 6, 227, 6, 16, 6, 205, 6, 225, 5, 181, 6, 175, 5, 153, 6, 122, 5, 123, 6, 66, 5, 90, 6, 5, 5, 53, 6, 197, 4, 12, 6, 129, 4, 226, 5, 57, 4, 178, 5, 236, 3, 127, 5, 155, 3, 72, 5, 69, 3, 14, 5, 234, 2, 206, 4, 139, 2, 139, 4, 39, 2, 66, 4, 191, 1, 246, 3, 82, 1, 165, 3, 225, 0, 78, 3, 108, 0, 243, 2, 244, 255, 149, 2, 121, 255, 50, 2, 250, 254, 202, 1, 119, 254, 94, 1, 243, 253, 238, 0, 110, 253, 122, 0, 231, 252, 3, 0, 96, 252, 139, 255, 217, 251, 14, 255, 84, 251, 143, 254, 208, 250, 15, 254, 78, 250, 143, 253, 209, 249, 13, 253, 88, 249, 140, 252, 226, 248, 13, 252, 115, 248, 143, 251, 11, 248, 21, 251, 170, 247, 157, 250, 80, 247, 42, 250, 0, 247, 187, 249, 185, 246, 81, 249, 122, 246, 239, 248, 71, 246, 145, 248, 30, 246, 60, 248, 0, 246, 238, 247, 236, 245, 169, 247, 228, 245, 108, 247, 232, 245, 56, 247, 246, 245, 14, 247, 17, 246, 238, 246, 54, 246, 215, 246, 103, 246, 202, 246, 162, 246, 198, 246, 231, 246, 205, 246, 54, 247, 222, 246, 142, 247, 248, 246, 239, 247, 28, 247, 88, 248, 74, 247, 201, 248, 128, 247, 64, 249, 192, 247, 190, 249, 7, 248, 66, 250, 86, 248, 201, 250, 173, 248, 86, 251, 12, 249, 229, 251, 112, 249, 118, 252, 219, 249, 9, 253, 75, 250, 158, 253, 192, 250, 49, 254, 57, 251, 196, 254, 181, 251, 86, 255, 52, 252, 229, 255, 181, 252, 112, 0, 55, 253, 248, 0, 185, 253, 127, 1, 60, 254, 255, 1, 190, 254, 123, 2, 62, 255, 241, 2, 189, 255, 97, 3, 54, 0, 205, 3, 175, 0, 49, 4, 36, 1, 143, 4, 150, 1, 230, 4, 3, 2, 55, 5, 106, 2, 129, 5, 206, 2, 196, 5, 44, 3, 2, 6, 133, 3, 56, 6, 217, 3, 105, 6, 39, 4, 148, 6, 112, 4, 187, 6, 181, 4, 219, 6, 243, 4, 245, 6, 45, 5, 13, 7, 98, 5, 31, 7, 147, 5, 45, 7, 191, 5, 56, 7, 230, 5, 63, 7, 10, 6, 67, 7, 41, 6, 67, 7, 69, 6, 65, 7, 94, 6, 60, 7, 114, 6, 52, 7, 132, 6, 43, 7, 147, 6, 31, 7, 158, 6, 17, 7, 167, 6, 1, 7, 174, 6, 238, 6, 177, 6, 217, 6, 179, 6, 194, 6, 177, 6, 168, 6, 173, 6, 139, 6, 166, 6, 108, 6, 156, 6, 74, 6, 144, 6, 37, 6, 129, 6, 252, 5, 112, 6, 207, 5, 91, 6, 160, 5, 68, 6, 108, 5, 41, 6, 52, 5, 11, 6, 248, 4, 233, 5, 184, 4, 195, 5, 115, 4, 155, 5, 41, 4, 110, 5, 220, 3, 61, 5, 137, 3, 9, 5, 49, 3, 208, 4, 213, 2, 147, 4, 117, 2, 80, 4, 15, 2, 11, 4, 166, 1, 193, 3, 56, 1, 113, 3, 199, 0, 29, 3, 82, 0, 196, 2, 219, 255, 104, 2, 98, 255, 7, 2, 228, 254, 161, 1, 101, 254, 57, 1, 229, 253, 204, 0, 99, 253, 92, 0, 225, 252, 234, 255, 97, 252, 117, 255, 225, 251, 254, 254, 99, 251, 133, 254, 232, 250, 11, 254, 112, 250, 145, 253, 252, 249, 23, 253, 140, 249, 159, 252, 35, 249, 40, 252, 191, 248, 179, 251, 99, 248, 65, 251, 13, 248, 212, 250, 191, 247, 106, 250, 122, 247, 6, 250, 62, 247, 166, 249, 11, 247, 77, 249, 225, 246, 250, 248, 194, 246, 175, 248, 172, 246, 107, 248, 161, 246, 47, 248, 161, 246, 251, 247, 171, 246, 208, 247, 190, 246, 174, 247, 219, 246, 149, 247, 4, 247, 132, 247, 54, 247, 125, 247, 112, 247, 127, 247, 179, 247, 137, 247, 0, 248, 157, 247, 84, 248, 186, 247, 175, 248, 223, 247, 18, 249, 12, 248, 123, 249, 67, 248, 234, 249, 128, 248, 94, 250, 197, 248, 213, 250, 18, 249, 81, 251, 100, 249, 208, 251, 189, 249, 81, 252, 27, 250, 212, 252, 127, 250, 88, 253, 231, 250, 219, 253, 83, 251, 95, 254, 194, 251, 227, 254, 52, 252, 100, 255, 168, 252, 227, 255, 28, 253, 93, 0, 146, 253, 214, 0, 7, 254, 77, 1, 125, 254, 191, 1, 242, 254, 44, 2, 100, 255, 149, 2, 213, 255, 249, 2, 66, 0, 88, 3, 173, 0, 177, 3, 21, 1, 5, 4, 120, 1, 84, 4, 216, 1, 157, 4, 53, 2, 226, 4, 141, 2, 32, 5, 224, 2, 90, 5, 47, 3, 143, 5, 123, 3, 190, 5, 192, 3, 233, 5, 2, 4, 16, 6, 63, 4, 50, 6, 119, 4, 81, 6, 172, 4, 107, 6, 221, 4, 130, 6, 10, 5, 148, 6, 51, 5, 165, 6, 88, 5, 177, 6, 121, 5, 188, 6, 153, 5, 195, 6, 181, 5, 200, 6, 205, 5, 203, 6, 227, 5, 203, 6, 246, 5, 200, 6, 7, 6, 195, 6, 21, 6, 188, 6, 32, 6, 178, 6, 42, 6, 165, 6, 48, 6, 150, 6, 51, 6, 131, 6, 54, 6, 110, 6, 52, 6, 86, 6, 48, 6, 57, 6, 43, 6, 27, 6, 34, 6, 247, 5, 21, 6, 209, 5, 7, 6, 166, 5, 245, 5, 119, 5, 225, 5, 69, 5, 201, 5, 12, 5, 174, 5, 208, 4, 143, 5, 145, 4, 108, 5, 75, 4, 69, 5, 1, 4, 27, 5, 178, 3, 237, 4, 95, 3, 185, 4, 8, 3, 131, 4, 171, 2, 72, 4, 75, 2, 9, 4, 229, 1, 197, 3, 125, 1, 124, 3, 18, 1, 47, 3, 162, 0, 222, 2, 47, 0, 136, 2, 189, 255, 46, 2, 70, 255, 209, 1, 205, 254, 111, 1, 83, 254, 10, 1, 216, 253, 161, 0, 94, 253, 55, 0, 228, 252, 202, 255, 107, 252, 91, 255, 244, 251, 235, 254, 127, 251, 121, 254, 14, 251, 7, 254, 161, 250, 149, 253, 56, 250, 35, 253, 212, 249, 181, 252, 118, 249, 71, 252, 29, 249, 220, 251, 203, 248, 118, 251, 129, 248, 17, 251, 63, 248, 178, 250, 5, 248, 88, 250, 211, 247, 3, 250, 170, 247, 180, 249, 138, 247, 108, 249, 114, 247, 43, 249, 101, 247, 241, 248, 96, 247, 189, 248, 101, 247, 147, 248, 116, 247, 112, 248, 139, 247, 85, 248, 171, 247, 66, 248, 212, 247, 55, 248, 5, 248, 54, 248, 62, 248, 59, 248, 127, 248, 74, 248, 199, 248, 96, 248, 21, 249, 126, 248, 107, 249, 163, 248, 198, 249, 208, 248, 38, 250, 6, 249, 138, 250, 64, 249, 243, 250, 130, 249, 95, 251, 202, 249, 206, 251, 24, 250, 64, 252, 106, 250, 179, 252, 193, 250, 39, 253, 29, 251, 155, 253, 124, 251, 17, 254, 222, 251, 133, 254, 67, 252, 248, 254, 170, 252, 106, 255, 18, 253, 218, 255, 123, 253, 70, 0, 227, 253, 176, 0, 77, 254, 23, 1, 181, 254, 124, 1, 28, 255, 221, 1, 130, 255, 57, 2, 228, 255, 146, 2, 68, 0, 231, 2, 162, 0, 54, 3, 253, 0, 130, 3, 86, 1, 202, 3, 170, 1, 12, 4, 251, 1, 75, 4, 72, 2, 134, 4, 146, 2, 188, 4, 216, 2, 239, 4, 26, 3, 30, 5, 88, 3, 72, 5, 147, 3, 112, 5, 202, 3, 148, 5, 253, 3, 181, 5, 46, 4, 210, 5, 91, 4, 236, 5, 132, 4, 4, 6, 171, 4, 25, 6, 206, 4, 44, 6, 240, 4, 59, 6, 13, 5, 72, 6, 41, 5, 82, 6, 67, 5, 90, 6, 89, 5, 96, 6, 111, 5, 99, 6, 128, 5, 100, 6, 144, 5, 98, 6, 158, 5, 92, 6, 170, 5, 83, 6, 179, 5, 72, 6, 185, 5, 58, 6, 190, 5, 40, 6, 192, 5, 18, 6, 191, 5, 249, 5, 187, 5, 220, 5, 182, 5, 187, 5, 172, 5, 150, 5, 161, 5, 109, 5, 146, 5, 63, 5, 128, 5, 13, 5, 107, 5, 214, 4, 82, 5, 154, 4, 53, 5, 90, 4, 21, 5, 22, 4, 241, 4, 204, 3, 200, 4, 127, 3, 156, 4, 44, 3, 108, 4, 214, 2, 55, 4, 123, 2, 254, 3, 29, 2, 194, 3, 187, 1, 128, 3, 85, 1, 58, 3, 236, 0, 240, 2, 128, 0, 162, 2, 19, 0, 79, 2, 165, 255, 249, 1, 52, 255, 159, 1, 192, 254, 66, 1, 78, 254, 226, 0, 219, 253, 127, 0, 105, 253, 25, 0, 248, 252, 180, 255, 136, 252, 75, 255, 27, 252, 225, 254, 177, 251, 119, 254, 73, 251, 14, 254, 231, 250, 165, 253, 137, 250, 60, 253, 48, 250, 214, 252, 221, 249, 115, 252, 144, 249, 17, 252, 74, 249, 180, 251, 9, 249, 90, 251, 210, 248, 5, 251, 161, 248, 181, 250, 120, 248, 106, 250, 87, 248, 37, 250, 62, 248, 231, 249, 46, 248, 174, 249, 38, 248, 125, 249, 38, 248, 83, 249, 46, 248, 46, 249, 63, 248, 18, 249, 88, 248, 253, 248, 120, 248, 240, 248, 160, 248, 235, 248, 207, 248, 237, 248, 4, 249, 246, 248, 64, 249, 5, 249, 131, 249, 29, 249, 203, 249, 60, 249, 25, 250, 97, 249, 106, 250, 140, 249, 193, 250, 191, 249, 26, 251, 246, 249, 120, 251, 52, 250, 216, 251, 118, 250, 58, 252, 190, 250, 159, 252, 10, 251, 4, 253, 90, 251, 106, 253, 173, 251, 208, 253, 3, 252, 54, 254, 92, 252, 156, 254, 181, 252, 1, 255, 17, 253, 100, 255, 110, 253, 199, 255, 203, 253, 37, 0, 40, 254, 130, 0, 133, 254, 221, 0, 225, 254, 53, 1, 59, 255, 139, 1, 148, 255, 221, 1, 235, 255, 44, 2, 62, 0, 119, 2, 144, 0, 191, 2, 224, 0, 4, 3, 44, 1, 69, 3, 119, 1, 132, 3, 189, 1, 190, 3, 1, 2, 245, 3, 66, 2, 42, 4, 128, 2, 91, 4, 187, 2, 136, 4, 242, 2, 179, 4, 38, 3, 220, 4, 87, 3, 1, 5, 135, 3, 36, 5, 180, 3, 68, 5, 221, 3, 97, 5, 4, 4, 124, 5, 41, 4, 148, 5, 75, 4, 171, 5, 106, 4, 191, 5, 137, 4, 208, 5, 164, 4, 223, 5, 190, 4, 235, 5, 214, 4, 244, 5, 235, 4, 252, 5, 254, 4, 255, 5, 15, 5, 0, 6, 30, 5, 254, 5, 44, 5, 249, 5, 55, 5, 241, 5, 64, 5, 228, 5, 70, 5, 213, 5, 74, 5, 193, 5, 75, 5, 170, 5, 74, 5, 142, 5, 71, 5, 110, 5, 63, 5, 75, 5, 54, 5, 34, 5, 41, 5, 245, 4, 25, 5, 195, 4, 5, 5, 141, 4, 238, 4, 83, 4, 212, 4, 19, 4, 180, 4, 209, 3, 146, 4, 137, 3, 108, 4, 60, 3, 66, 4, 236, 2, 20, 4, 153, 2, 226, 3, 64, 2, 171, 3, 229, 1, 112, 3, 135, 1, 49, 3, 38, 1, 239, 2, 194, 0, 168, 2, 92, 0, 92, 2, 245, 255, 14, 2, 140, 255, 188, 1, 34, 255, 103, 1, 183, 254, 14, 1, 76, 254, 179, 0, 226, 253, 86, 0, 121, 253, 249, 255, 18, 253, 153, 255, 173, 252, 56, 255, 75, 252, 215, 254, 235, 251, 117, 254, 143, 251, 20, 254, 56, 251, 180, 253, 229, 250, 86, 253, 151, 250, 250, 252, 78, 250, 160, 252, 12, 250, 74, 252, 208, 249, 247, 251, 154, 249, 168, 251, 107, 249, 93, 251, 68, 249, 23, 251, 35, 249, 215, 250, 9, 249, 156, 250, 247, 248, 103, 250, 236, 248, 55, 250, 232, 248, 14, 250, 236, 248, 235, 249, 248, 248, 206, 249, 10, 249, 186, 249, 34, 249, 170, 249, 66, 249, 163, 249, 104, 249, 161, 249, 147, 249, 166, 249, 197, 249, 178, 249, 253, 249, 196, 249, 58, 250, 221, 249, 122, 250, 251, 249, 191, 250, 31, 250, 9, 251, 74, 250, 85, 251, 122, 250, 165, 251, 174, 250, 246, 251, 231, 250, 75, 252, 37, 251, 162, 252, 101, 251, 249, 252, 171, 251, 82, 253, 243, 251, 171, 253, 62, 252, 5, 254, 138, 252, 94, 254, 217, 252, 182, 254, 41, 253, 14, 255, 123, 253, 101, 255, 204, 253, 186, 255, 30, 254, 13, 0, 112, 254, 94, 0, 192, 254, 174, 0, 16, 255, 252, 0, 95, 255, 71, 1, 171, 255, 145, 1, 246, 255, 215, 1, 62, 0, 26, 2, 133, 0, 92, 2, 202, 0, 155, 2, 13, 1, 215, 2, 77, 1, 16, 3, 139, 1, 70, 3, 198, 1, 123, 3, 254, 1, 173, 3, 52, 2, 219, 3, 104, 2, 8, 4, 154, 2, 51, 4, 200, 2, 90, 4, 245, 2, 128, 4, 32, 3, 164, 4, 71, 3, 197, 4, 110, 3, 229, 4, 147, 3, 1, 5, 180, 3, 27, 5, 212, 3, 52, 5, 243, 3, 74, 5, 16, 4, 93, 5, 43, 4, 110, 5, 68, 4, 125, 5, 91, 4, 138, 5, 113, 4, 146, 5, 133, 4, 152, 5, 151, 4, 156, 5, 167, 4, 155, 5, 181, 4, 151, 5, 193, 4, 144, 5, 203, 4, 133, 5, 210, 4, 119, 5, 216, 4, 101, 5, 219, 4, 78, 5, 218, 4, 51, 5, 216, 4, 20, 5, 211, 4, 241, 4, 203, 4, 202, 4, 191, 4, 157, 4, 176, 4, 109, 4, 159, 4, 56, 4, 137, 4, 255, 3, 113, 4, 194, 3, 83, 4, 128, 3, 51, 4, 60, 3, 14, 4, 243, 2, 230, 3, 165, 2, 186, 3, 85, 2, 138, 3, 2, 2, 86, 3, 171, 1, 30, 3, 81, 1, 226, 2, 246, 0, 162, 2, 152, 0, 95, 2, 57, 0, 23, 2, 218, 255, 205, 1, 122, 255, 128, 1, 23, 255, 48, 1, 181, 254, 221, 0, 83, 254, 136, 0, 243, 253, 50, 0, 149, 253, 219, 255, 55, 253, 132, 255, 221, 252, 42, 255, 133, 252, 208, 254, 48, 252, 120, 254, 223, 251, 32, 254, 146, 251, 202, 253, 74, 251, 117, 253, 7, 251, 34, 253, 200, 250, 211, 252, 143, 250, 134, 252, 92, 250, 60, 252, 47, 250, 248, 251, 8, 250, 182, 251, 232, 249, 122, 251, 206, 249, 66, 251, 186, 249, 17, 251, 172, 249, 228, 250, 165, 249, 187, 250, 165, 249, 154, 250, 172, 249, 125, 250, 184, 249, 104, 250, 202, 249, 88, 250, 226, 249, 78, 250, 255, 249, 74, 250, 35, 250, 75, 250, 74, 250, 83, 250, 119, 250, 97, 250, 169, 250, 116, 250, 222, 250, 140, 250, 24, 251, 170, 250, 85, 251, 205, 250, 149, 251, 244, 250, 215, 251, 32, 251, 29, 252, 82, 251, 101, 252, 134, 251, 175, 252, 189, 251, 249, 252, 249, 251, 69, 253, 55, 252, 145, 253, 119, 252, 223, 253, 186, 252, 44, 254, 253, 252, 122, 254, 67, 253, 199, 254, 137, 253, 19, 255, 207, 253, 95, 255, 23, 254, 170, 255, 94, 254, 242, 255, 165, 254, 56, 0, 234, 254, 126, 0, 47, 255, 195, 0, 115, 255, 6, 1, 182, 255, 71, 1, 246, 255, 134, 1, 52, 0, 195, 1, 114, 0, 253, 1, 173, 0, 55, 2, 230, 0, 110, 2, 31, 1, 164, 2, 84, 1, 215, 2, 135, 1, 9, 3, 185, 1, 56, 3, 232, 1, 101, 3, 22, 2, 145, 3, 66, 2, 186, 3, 109, 2, 226, 3, 149, 2, 7, 4, 188, 2, 43, 4, 225, 2, 77, 4, 4, 3, 109, 4, 38, 3, 139, 4, 70, 3, 167, 4, 101, 3, 192, 4, 130, 3, 215, 4, 158, 3, 236, 4, 185, 3, 254, 4, 210, 3, 15, 5, 233, 3, 28, 5, 254, 3, 38, 5, 19, 4, 44, 5, 37, 4, 48, 5, 53, 4, 49, 5, 67, 4, 46, 5, 79, 4, 40, 5, 90, 4, 29, 5, 98, 4, 15, 5, 104, 4, 253, 4, 107, 4, 231, 4, 109, 4, 205, 4, 107, 4, 175, 4, 102, 4, 141, 4, 95, 4, 102, 4, 84, 4, 60, 4, 71, 4, 12, 4, 54, 4, 218, 3, 33, 4, 163, 3, 10, 4, 104, 3, 238, 3, 42, 3, 208, 3, 231, 2, 173, 3, 163, 2, 135, 3, 90, 2, 93, 3, 14, 2, 46, 3, 192, 1, 253, 2, 111, 1, 200, 2, 28, 1, 143, 2, 199, 0, 83, 2, 113, 0, 19, 2, 25, 0, 208, 1, 195, 255, 139, 1, 105, 255, 66, 1, 16, 255, 248, 0, 185, 254, 172, 0, 97, 254, 94, 0, 11, 254, 15, 0, 183, 253, 193, 255, 100, 253, 112, 255, 21, 253, 31, 255, 199, 252, 207, 254, 125, 252, 128, 254, 55, 252, 50, 254, 245, 251, 229, 253, 183, 251, 154, 253, 125, 251, 81, 253, 72, 251, 12, 253, 25, 251, 202, 252, 238, 250, 139, 252, 201, 250, 79, 252, 170, 250, 24, 252, 144, 250, 229, 251, 123, 250, 183, 251, 109, 250, 141, 251, 99, 250, 104, 251, 95, 250, 72, 251, 97, 250, 45, 251, 105, 250, 24, 251, 118, 250, 7, 251, 136, 250, 252, 250, 158, 250, 247, 250, 185, 250, 247, 250, 217, 250, 252, 250, 253, 250, 5, 251, 37, 251, 20, 251, 80, 251, 40, 251, 128, 251, 64, 251, 177, 251, 93, 251, 231, 251, 126, 251, 30, 252, 163, 251, 89, 252, 204, 251, 149, 252, 248, 251, 210, 252, 39, 252, 17, 253, 89, 252, 82, 253, 141, 252, 147, 253, 196, 252, 213, 253, 254, 252, 23, 254, 54, 253, 90, 254, 114, 253, 157, 254, 174, 253, 223, 254, 236, 253, 34, 255, 41, 254, 99, 255, 102, 254, 164, 255, 162, 254, 227, 255, 223, 254, 32, 0, 27, 255, 94, 0, 85, 255, 154, 0, 143, 255, 214, 0, 199, 255, 15, 1, 254, 255, 72, 1, 50, 0, 127, 1, 103, 0, 181, 1, 153, 0, 233, 1, 202, 0, 27, 2, 250, 0, 77, 2, 40, 1, 124, 2, 86, 1, 170, 2, 128, 1, 214, 2, 170, 1, 2, 3, 210, 1, 43, 3, 249, 1, 83, 3, 30, 2, 121, 3, 67, 2, 157, 3, 101, 2, 193, 3, 134, 2, 226, 3, 167, 2, 1, 4, 199, 2, 31, 4, 228, 2, 58, 4, 1, 3, 83, 4, 29, 3, 105, 4, 55, 3, 127, 4, 80, 3, 145, 4, 104, 3, 160, 4, 126, 3, 173, 4, 147, 3, 183, 4, 166, 3, 190, 4, 184, 3, 193, 4, 200, 3, 193, 4, 214, 3, 190, 4, 227, 3, 184, 4, 237, 3, 173, 4, 245, 3, 160, 4, 252, 3, 142, 4, 255, 3, 120, 4, 1, 4, 95, 4, 255, 3, 66, 4, 251, 3, 32, 4, 244, 3, 252, 3, 234, 3, 210, 3, 221, 3, 166, 3, 205, 3, 117, 3, 186, 3, 65, 3, 163, 3, 10, 3, 136, 3, 207, 2, 107, 3, 145, 2, 74, 3, 81, 2, 37, 3, 12, 2, 253, 2, 199, 1, 210, 2, 126, 1, 162, 2, 52, 1, 113, 2, 231, 0, 59, 2, 154, 0, 2, 2, 76, 0, 199, 1, 253, 255, 137, 1, 175, 255, 72, 1, 95, 255, 5, 1, 16, 255, 193, 0, 192, 254, 123, 0, 115, 254, 53, 0, 39, 254, 238, 255, 220, 253, 166, 255, 148, 253, 94, 255, 78, 253, 21, 255, 11, 253, 206, 254, 203, 252, 135, 254, 143, 252, 65, 254, 86, 252, 254, 253, 33, 252, 189, 253, 241, 251, 125, 253, 196, 251, 65, 253, 156, 251, 7, 253, 121, 251, 209, 252, 90, 251, 158, 252, 65, 251, 113, 252, 44, 251, 70, 252, 29, 251, 31, 252, 18, 251, 253, 251, 11, 251, 223, 251, 10, 251, 197, 251, 12, 251, 177, 251, 20, 251, 160, 251, 32, 251, 149, 251, 49, 251, 142, 251, 69, 251, 140, 251, 93, 251, 142, 251, 122, 251, 149, 251, 153, 251, 161, 251, 188, 251, 176, 251, 226, 251, 195, 251, 10, 252, 219, 251, 53, 252, 246, 251, 100, 252, 21, 252, 147, 252, 55, 252, 197, 252, 92, 252, 249, 252, 132, 252, 46, 253, 174, 252, 100, 253, 219, 252, 155, 253, 9, 253, 211, 253, 57, 253, 12, 254, 107, 253, 70, 254, 158, 253, 126, 254, 209, 253, 184, 254, 5, 254, 242, 254, 57, 254, 42, 255, 110, 254, 99, 255, 162, 254, 155, 255, 214, 254, 211, 255, 9, 255, 8, 0, 60, 255, 63, 0, 110, 255, 117, 0, 159, 255, 169, 0, 208, 255, 221, 0, 254, 255, 15, 1, 42, 0, 65, 1, 87, 0, 114, 1, 131, 0, 162, 1, 173, 0, 208, 1, 214, 0, 253, 1, 254, 0, 42, 2, 37, 1, 85, 2, 75, 1, 127, 2, 112, 1, 168, 2, 147, 1, 207, 2, 182, 1, 245, 2, 215, 1, 25, 3, 248, 1, 60, 3, 24, 2, 94, 3, 55, 2, 126, 3, 84, 2, 156, 3, 113, 2, 185, 3, 141, 2, 211, 3, 169, 2, 235, 3, 194, 2, 1, 4, 219, 2, 21, 4, 243, 2, 38, 4, 8, 3, 52, 4, 30, 3, 65, 4, 50, 3, 74, 4, 68, 3, 80, 4, 85, 3, 82, 4, 100, 3, 82, 4, 114, 3, 79, 4, 127, 3, 72, 4, 135, 3, 61, 4, 144, 3, 47, 4, 149, 3, 29, 4, 152, 3, 8, 4, 154, 3, 239, 3, 152, 3, 210, 3, 147, 3, 179, 3, 141, 3, 143, 3, 131, 3, 104, 3, 118, 3, 61, 3, 102, 3, 16, 3, 84, 3, 223, 2, 62, 3, 171, 2, 36, 3, 117, 2, 8, 3, 60, 2, 233, 2, 255, 1, 197, 2, 193, 1, 159, 2, 129, 1, 118, 2, 62, 1, 74, 2, 251, 0, 27, 2, 182, 0, 232, 1, 112, 0, 180, 1, 42, 0, 125, 1, 229, 255, 68, 1, 159, 255, 9, 1, 87, 255, 204, 0, 17, 255, 142, 0, 204, 254, 79, 0, 136, 254, 15, 0, 70, 254, 209, 255, 5, 254, 144, 255, 199, 253, 80, 255, 139, 253, 16, 255, 81, 253, 209, 254, 27, 253, 148, 254, 232, 252, 87, 254, 184, 252, 29, 254, 140, 252, 228, 253, 100, 252, 175, 253, 62, 252, 124, 253, 29, 252, 75, 253, 2, 252, 30, 253, 233, 251, 245, 252, 212, 251, 206, 252, 196, 251, 171, 252, 184, 251, 140, 252, 176, 251, 113, 252, 172, 251, 90, 252, 172, 251, 70, 252, 176, 251, 56, 252, 184, 251, 45, 252, 196, 251, 37, 252, 211, 251, 34, 252, 229, 251, 35, 252, 251, 251, 39, 252, 19, 252, 48, 252, 46, 252, 60, 252, 77, 252, 76, 252, 110, 252, 96, 252, 145, 252, 118, 252, 182, 252, 144, 252, 222, 252, 171, 252, 6, 253, 202, 252, 49, 253, 236, 252, 94, 253, 15, 253, 138, 253, 53, 253, 184, 253, 92, 253, 232, 253, 133, 253, 23, 254, 174, 253, 72, 254, 217, 253, 121, 254, 4, 254, 170, 254, 48, 254, 220, 254, 93, 254, 13, 255, 136, 254, 63, 255, 180, 254, 112, 255, 225, 254, 160, 255, 12, 255, 209, 255, 55, 255, 0, 0, 97, 255, 47, 0, 140, 255, 94, 0, 181, 255, 142, 0, 221, 255, 187, 0, 3, 0, 233, 0, 42, 0, 21, 1, 79, 0, 65, 1, 116, 0, 108, 1, 151, 0, 150, 1, 187, 0, 191, 1, 222, 0, 232, 1, 255, 0, 16, 2, 31, 1, 55, 2, 63, 1, 92, 2, 94, 1, 128, 2, 125, 1, 163, 2, 155, 1, 197, 2, 183, 1, 230, 2, 213, 1, 5, 3, 240, 1, 35, 3, 11, 2, 63, 3, 38, 2, 88, 3, 62, 2, 113, 3, 87, 2, 135, 3, 111, 2, 155, 3, 133, 2, 173, 3, 155, 2, 189, 3, 176, 2, 201, 3, 196, 2, 211, 3, 214, 2, 218, 3, 231, 2, 224, 3, 247, 2, 225, 3, 6, 3, 223, 3, 18, 3, 219, 3, 28, 3, 211, 3, 37, 3, 200, 3, 44, 3, 185, 3, 48, 3, 168, 3, 52, 3, 147, 3, 52, 3, 123, 3, 50, 3, 95, 3, 45, 3, 65, 3, 38, 3, 31, 3, 29, 3, 250, 2, 16, 3, 211, 2, 1, 3, 169, 2, 238, 2, 123, 2, 217, 2, 76, 2, 194, 2, 26, 2, 166, 2, 229, 1, 136, 2, 175, 1, 103, 2, 119, 1, 67, 2, 61, 1, 28, 2, 2, 1, 243, 1, 198, 0, 199, 1, 136, 0, 153, 1, 74, 0, 104, 1, 12, 0, 54, 1, 207, 255, 2, 1, 145, 255, 204, 0, 83, 255, 150, 0, 22, 255, 94, 0, 219, 254, 38, 0, 161, 254, 239, 255, 103, 254, 182, 255, 47, 254, 125, 255, 250, 253, 69, 255, 199, 253, 12, 255, 150, 253, 214, 254, 105, 253, 161, 254, 62, 253, 109, 254, 22, 253, 59, 254, 241, 252, 12, 254, 208, 252, 222, 253, 177, 252, 179, 253, 151, 252, 139, 253, 127, 252, 101, 253, 107, 252, 67, 253, 91, 252, 35, 253, 79, 252, 7, 253, 70, 252, 239, 252, 64, 252, 217, 252, 62, 252, 199, 252, 62, 252, 185, 252, 66, 252, 175, 252, 74, 252, 167, 252, 84, 252, 163, 252, 98, 252, 163, 252, 113, 252, 166, 252, 132, 252, 172, 252, 154, 252, 182, 252, 177, 252, 194, 252, 203, 252, 211, 252, 231, 252, 229, 252, 5, 253, 249, 252, 36, 253, 17, 253, 69, 253, 43, 253, 105, 253, 71, 253, 141, 253, 99, 253, 178, 253, 131, 253, 216, 253, 163, 253, 0, 254, 197, 253, 40, 254, 233, 253, 81, 254, 12, 254, 123, 254, 49, 254, 165, 254, 86, 254, 207, 254, 123, 254, 249, 254, 160, 254, 36, 255, 198, 254, 79, 255, 236, 254, 121, 255, 16, 255, 165, 255, 53, 255, 207, 255, 89, 255, 248, 255, 125, 255, 33, 0, 160, 255, 75, 0, 195, 255, 117, 0, 229, 255, 157, 0, 5, 0, 198, 0, 36, 0, 238, 0, 69, 0, 21, 1, 101, 0, 61, 1, 131, 0, 100, 1, 162, 0, 136, 1, 192, 0, 175, 1, 220, 0, 211, 1, 250, 0, 245, 1, 22, 1, 25, 2, 49, 1, 58, 2, 76, 1, 90, 2, 103, 1, 121, 2, 129, 1, 151, 2, 155, 1, 180, 2, 180, 1, 207, 2, 205, 1, 232, 2, 229, 1, 0, 3, 252, 1, 22, 3, 18, 2, 42, 3, 40, 2, 59, 3, 60, 2, 75, 3, 81, 2, 88, 3, 100, 2, 99, 3, 118, 2, 107, 3, 134, 2, 113, 3, 150, 2, 116, 3, 164, 2, 116, 3, 176, 2, 113, 3, 188, 2, 108, 3, 197, 2, 99, 3, 204, 2, 88, 3, 211, 2, 74, 3, 214, 2, 56, 3, 216, 2, 36, 3, 215, 2, 13, 3, 213, 2, 244, 2, 208, 2, 215, 2, 201, 2, 183, 2, 190, 2, 150, 2, 177, 2, 113, 2, 162, 2, 73, 2, 144, 2, 32, 2, 123, 2, 245, 1, 100, 2, 200, 1, 74, 2, 152, 1, 46, 2, 103, 1, 14, 2, 53, 1, 236, 1, 1, 1, 200, 1, 205, 0, 162, 1, 151, 0, 121, 1, 97, 0, 79, 1, 43, 0, 36, 1, 245, 255, 245, 0, 192, 255, 199, 0, 138, 255, 151, 0, 84, 255, 102, 0, 32, 255, 52, 0, 236, 254, 2, 0, 186, 254, 210, 255, 137, 254, 160, 255, 90, 254, 111, 255, 45, 254, 62, 255, 2, 254, 14, 255, 217, 253, 224, 254, 180, 253, 178, 254, 144, 253, 134, 254, 110, 253, 93, 254, 81, 253, 52, 254, 53, 253, 14, 254, 29, 253, 235, 253, 7, 253, 203, 253, 244, 252, 173, 253, 229, 252, 145, 253, 216, 252, 120, 253, 207, 252, 98, 253, 200, 252, 79, 253, 195, 252, 64, 253, 194, 252, 50, 253, 195, 252, 40, 253, 200, 252, 33, 253, 206, 252, 29, 253, 216, 252, 28, 253, 227, 252, 30, 253, 241, 252, 36, 253, 2, 253, 43, 253, 20, 253, 52, 253, 40, 253, 66, 253, 62, 253, 81, 253, 86, 253, 98, 253, 111, 253, 118, 253, 138, 253, 138, 253, 167, 253, 161, 253, 197, 253, 186, 253, 228, 253, 212, 253, 4, 254, 239, 253, 36, 254, 12, 254, 70, 254, 41, 254, 105, 254, 70, 254, 140, 254, 101, 254, 175, 254, 131, 254, 212, 254, 163, 254, 248, 254, 194, 254, 29, 255, 225, 254, 66, 255, 1, 255, 103, 255, 32, 255, 140, 255, 62, 255, 177, 255, 93, 255, 215, 255, 122, 255, 252, 255, 153, 255, 30, 0, 182, 255, 67, 0, 211, 255, 103, 0, 240, 255, 139, 0, 10, 0, 176, 0, 37, 0, 210, 0, 65, 0, 246, 0, 92, 0, 25, 1, 117, 0, 59, 1, 143, 0, 93, 1, 169, 0, 126, 1, 195, 0, 158, 1, 219, 0, 189, 1, 244, 0, 221, 1, 12, 1, 249, 1, 37, 1, 22, 2, 60, 1, 51, 2, 83, 1, 77, 2, 105, 1, 102, 2, 128, 1, 126, 2, 150, 1, 148, 2, 172, 1, 168, 2, 193, 1, 187, 2, 213, 1, 204, 2, 232, 1, 219, 2, 250, 1, 232, 2, 13, 2, 242, 2, 30, 2, 250, 2, 46, 2, 0, 3, 60, 2, 4, 3, 74, 2, 6, 3, 87, 2, 4, 3, 97, 2, 0, 3, 107, 2, 250, 2, 116, 2, 241, 2, 122, 2, 229, 2, 126, 2, 215, 2, 129, 2, 198, 2, 128, 2, 179, 2, 127, 2, 156, 2, 124, 2, 133, 2, 118, 2, 106, 2, 110, 2, 77, 2, 99, 2, 46, 2, 87, 2, 12, 2, 72, 2, 233, 1, 54, 2, 195, 1, 34, 2, 157, 1, 12, 2, 116, 1, 243, 1, 74, 1, 216, 1, 32, 1, 187, 1, 243, 0, 156, 1, 197, 0, 122, 1, 151, 0, 87, 1, 105, 0, 51, 1, 58, 0, 12, 1, 11, 0, 229, 0, 223, 255, 187, 0, 176, 255, 145, 0, 130, 255, 103, 0, 85, 255, 60, 0, 40, 255, 16, 0, 254, 254, 230, 255, 211, 254, 187, 255, 171, 254, 144, 255, 133, 254, 102, 255, 95, 254, 60, 255, 60, 254, 19, 255, 27, 254, 236, 254, 252, 253, 197, 254, 223, 253, 161, 254, 198, 253, 126, 254, 174, 253, 93, 254, 152, 253, 62, 254, 133, 253, 33, 254, 117, 253, 7, 254, 103, 253, 238, 253, 91, 253, 216, 253, 82, 253, 197, 253, 75, 253, 180, 253, 71, 253, 166, 253, 70, 253, 155, 253, 70, 253, 146, 253, 72, 253, 140, 253, 76, 253, 136, 253, 83, 253, 134, 253, 92, 253, 135, 253, 103, 253, 139, 253, 116, 253, 145, 253, 130, 253, 153, 253, 146, 253, 163, 253, 164, 253, 175, 253, 182, 253, 190, 253, 203, 253, 205, 253, 224, 253, 223, 253, 248, 253, 242, 253, 16, 254, 6, 254, 41, 254, 28, 254, 66, 254, 50, 254, 93, 254, 74, 254, 121, 254, 98, 254, 149, 254, 122, 254, 177, 254, 148, 254, 207, 254, 174, 254, 236, 254, 199, 254, 10, 255, 226, 254, 41, 255, 252, 254, 71, 255, 22, 255, 102, 255, 47, 255, 133, 255, 73, 255, 164, 255, 98, 255, 196, 255, 124, 255, 226, 255, 149, 255, 0, 0, 174, 255, 31, 0, 198, 255, 61, 0, 222, 255, 93, 0, 246, 255, 123, 0, 12, 0, 154, 0, 35, 0, 185, 0, 58, 0, 215, 0, 81, 0, 244, 0, 103, 0, 18, 1, 125, 0, 47, 1, 148, 0, 76, 1, 170, 0, 104, 1, 192, 0, 131, 1, 213, 0, 157, 1, 235, 0, 183, 1, 1, 1, 208, 1, 21, 1, 232, 1, 41, 1, 254, 1, 62, 1, 20, 2, 82, 1, 40, 2, 101, 1, 59, 2, 120, 1, 76, 2, 139, 1, 92, 2, 157, 1, 106, 2, 174, 1, 118, 2, 191, 1, 129, 2, 207, 1, 137, 2, 222, 1, 143, 2, 235, 1, 147, 2, 248, 1, 150, 2, 5, 2, 149, 2, 15, 2, 147, 2, 24, 2, 143, 2, 33, 2, 136, 2, 39, 2, 126, 2, 43, 2, 115, 2, 46, 2, 101, 2, 46, 2, 85, 2, 46, 2, 67, 2, 45, 2, 47, 2, 41, 2, 25, 2, 34, 2, 1, 2, 26, 2, 230, 1, 15, 2, 203, 1, 2, 2, 173, 1, 243, 1, 141, 1, 226, 1, 109, 1, 207, 1, 74, 1, 186, 1, 38, 1, 163, 1, 1, 1, 137, 1, 220, 0, 110, 1, 182, 0, 81, 1, 143, 0, 51, 1, 104, 0, 19, 1, 64, 0, 242, 0, 24, 0, 207, 0, 241, 255, 172, 0, 203, 255, 136, 0, 164, 255, 99, 0, 126, 255, 61, 0, 88, 255, 24, 0, 51, 255, 244, 255, 15, 255, 207, 255, 237, 254, 169, 255, 204, 254, 133, 255, 173, 254, 96, 255, 144, 254, 62, 255, 115, 254, 28, 255, 88, 254, 250, 254, 64, 254, 219, 254, 42, 254, 189, 254, 22, 254, 160, 254, 3, 254, 133, 254, 243, 253, 109, 254, 229, 253, 85, 254, 216, 253, 65, 254, 206, 253, 45, 254, 197, 253, 29, 254, 191, 253, 15, 254, 188, 253, 2, 254, 185, 253, 248, 253, 186, 253, 240, 253, 187, 253, 235, 253, 189, 253, 231, 253, 194, 253, 229, 253, 200, 253, 230, 253, 209, 253, 233, 253, 218, 253, 237, 253, 230, 253, 243, 253, 243, 253, 252, 253, 0, 254, 7, 254, 15, 254, 17, 254, 31, 254, 31, 254, 49, 254, 45, 254, 66, 254, 61, 254, 86, 254, 77, 254, 107, 254, 95, 254, 127, 254, 114, 254, 149, 254, 133, 254, 170, 254, 153, 254, 194, 254, 173, 254, 217, 254, 195, 254, 241, 254, 216, 254, 9, 255, 237, 254, 34, 255, 3, 255, 59, 255, 25, 255, 84, 255, 45, 255, 109, 255, 67, 255, 135, 255, 89, 255, 161, 255, 110, 255, 187, 255, 131, 255, 214, 255, 152, 255, 239, 255, 173, 255, 9, 0, 194, 255, 34, 0, 214, 255, 61, 0, 234, 255, 87, 0, 255, 255, 113, 0, 17, 0, 140, 0, 37, 0, 165, 0, 56, 0, 191, 0, 76, 0, 217, 0, 95, 0, 242, 0, 114, 0, 11, 1, 133, 0, 35, 1, 153, 0, 59, 1, 172, 0, 82, 1, 191, 0, 105, 1, 210, 0, 128, 1, 228, 0, 149, 1, 247, 0, 169, 1, 9, 1, 188, 1, 27, 1, 207, 1, 45, 1, 224, 1, 63, 1, 239, 1, 79, 1, 253, 1, 95, 1, 10, 2, 111, 1, 21, 2, 126, 1, 30, 2, 141, 1, 39, 2, 155, 1, 45, 2, 167, 1, 49, 2, 179, 1, 51, 2, 190, 1, 52, 2, 200, 1, 51, 2, 209, 1, 47, 2, 217, 1, 43, 2, 222, 1, 35, 2, 227, 1, 26, 2, 231, 1, 14, 2, 232, 1, 2, 2, 232, 1, 243, 1, 231, 1, 226, 1, 227, 1, 208, 1, 222, 1, 187, 1, 215, 1, 166, 1, 207, 1, 143, 1, 195, 1, 117, 1, 182, 1, 90, 1, 168, 1, 63, 1, 151, 1, 34, 1, 133, 1, 4, 1, 113, 1, 229, 0, 91, 1, 197, 0, 68, 1, 164, 0, 44, 1, 132, 0, 17, 1, 98, 0, 245, 0, 64, 0, 216, 0, 31, 0, 187, 0, 254, 255, 156, 0, 221, 255, 125, 0, 189, 255, 92, 0, 156, 255, 60, 0, 125, 255, 28, 0, 94, 255, 253, 255, 64, 255, 220, 255, 35, 255, 189, 255, 7, 255, 157, 255, 236, 254, 126, 255, 212, 254, 95, 255, 188, 254, 66, 255, 166, 254, 38, 255, 145, 254, 11, 255, 126, 254, 241, 254, 108, 254, 216, 254, 92, 254, 193, 254, 79, 254, 171, 254, 66, 254, 151, 254, 55, 254, 134, 254, 46, 254, 117, 254, 39, 254, 103, 254, 34, 254, 90, 254, 30, 254, 79, 254, 27, 254, 70, 254, 26, 254, 64, 254, 27, 254, 59, 254, 30, 254, 55, 254, 33, 254, 54, 254, 38, 254, 54, 254, 44, 254, 56, 254, 51, 254, 60, 254, 60, 254, 65, 254, 69, 254, 72, 254, 80, 254, 80, 254, 92, 254, 90, 254, 105, 254, 100, 254, 119, 254, 112, 254, 133, 254, 125, 254, 149, 254, 139, 254, 165, 254, 154, 254, 181, 254, 169, 254, 199, 254, 185, 254, 217, 254, 202, 254, 235, 254, 219, 254, 254, 254, 236, 254, 17, 255, 253, 254, 37, 255, 14, 255, 57, 255, 33, 255, 78, 255, 50, 255, 98, 255, 68, 255, 119, 255, 87, 255, 141, 255, 104, 255, 162, 255, 122, 255, 184, 255, 140, 255, 205, 255, 158, 255, 228, 255, 175, 255, 250, 255, 192, 255, 14, 0, 209, 255, 36, 0, 226, 255, 59, 0, 244, 255, 81, 0, 3, 0, 103, 0, 19, 0, 126, 0, 36, 0, 148, 0, 53, 0, 170, 0, 70, 0, 192, 0, 86, 0, 213, 0, 103, 0, 234, 0, 120, 0, 255, 0, 136, 0, 20, 1, 153, 0, 40, 1, 170, 0, 59, 1, 186, 0, 78, 1, 203, 0, 95, 1, 219, 0, 112, 1, 235, 0, 128, 1, 251, 0, 143, 1, 10, 1, 157, 1, 25, 1, 170, 1, 40, 1, 181, 1, 53, 1, 191, 1, 67, 1, 199, 1, 81, 1, 207, 1, 93, 1, 213, 1, 104, 1, 217, 1, 115, 1, 219, 1, 125, 1, 220, 1, 135, 1, 219, 1, 142, 1, 217, 1, 149, 1, 213, 1, 155, 1, 207, 1, 159, 1, 201, 1, 163, 1, 191, 1, 164, 1, 180, 1, 165, 1, 168, 1, 164, 1, 154, 1, 162, 1, 138, 1, 157, 1, 122, 1, 152, 1, 103, 1, 143, 1, 84, 1, 134, 1, 63, 1, 124, 1, 41, 1, 111, 1, 17, 1, 98, 1, 249, 0, 82, 1, 223, 0, 64, 1, 198, 0, 45, 1, 171, 0, 25, 1, 144, 0, 4, 1, 116, 0, 237, 0, 88, 0, 214, 0, 60, 0, 189, 0, 32, 0, 164, 0, 4, 0, 138, 0, 234, 255, 111, 0, 207, 255, 84, 0, 179, 255, 56, 0, 153, 255, 28, 0, 127, 255, 1, 0, 102, 255, 231, 255, 78, 255, 203, 255, 55, 255, 176, 255, 33, 255, 151, 255, 12, 255, 124, 255, 248, 254, 99, 255, 230, 254, 76, 255, 213, 254, 52, 255, 197, 254, 29, 255, 182, 254, 9, 255, 169, 254, 245, 254, 157, 254, 227, 254, 146, 254, 210, 254, 137, 254, 195, 254, 130, 254, 182, 254, 124, 254, 169, 254, 119, 254, 158, 254, 116, 254, 149, 254, 114, 254, 141, 254, 112, 254, 135, 254, 113, 254, 131, 254, 114, 254, 129, 254, 117, 254, 127, 254, 120, 254, 127, 254, 125, 254, 129, 254, 131, 254, 132, 254, 137, 254, 137, 254, 146, 254, 142, 254, 153, 254, 149, 254, 162, 254, 156, 254, 173, 254, 165, 254, 183, 254, 175, 254, 195, 254, 185, 254, 208, 254, 197, 254, 220, 254, 209, 254, 233, 254, 221, 254, 248, 254, 234, 254, 6, 255, 248, 254, 21, 255, 7, 255, 35, 255, 20, 255, 51, 255, 35, 255, 67, 255, 49, 255, 84, 255, 64, 255, 100, 255, 78, 255, 117, 255, 93, 255, 134, 255, 107, 255, 152, 255, 122, 255, 170, 255, 137, 255, 187, 255, 151, 255, 205, 255, 166, 255, 224, 255, 181, 255, 242, 255, 195, 255, 3, 0, 210, 255, 21, 0, 224, 255, 40, 0, 238, 255, 60, 0, 253, 255, 78, 0, 9, 0, 97, 0, 23, 0, 116, 0, 37, 0, 135, 0, 52, 0, 153, 0, 67, 0, 171, 0, 81, 0, 190, 0, 96, 0, 208, 0, 110, 0, 225, 0, 125, 0, 243, 0, 139, 0, 4, 1, 154, 0, 20, 1, 168, 0, 35, 1, 183, 0, 49, 1, 197, 0, 63, 1, 211, 0, 77, 1, 224, 0, 89, 1, 237, 0, 99, 1, 250, 0, 110, 1, 7, 1, 119, 1, 19, 1, 127, 1, 31, 1, 133, 1, 42, 1, 138, 1, 53, 1, 142, 1, 63, 1, 145, 1, 71, 1, 146, 1, 80, 1, 146, 1, 87, 1, 143, 1, 93, 1, 140, 1, 98, 1, 136, 1, 103, 1, 130, 1, 106, 1, 122, 1, 107, 1, 114, 1, 108, 1, 104, 1, 107, 1, 92, 1, 105, 1, 80, 1, 102, 1, 66, 1, 97, 1, 50, 1, 91, 1, 33, 1, 83, 1, 16, 1, 73, 1, 253, 0, 63, 1, 234, 0, 50, 1, 213, 0, 37, 1, 192, 0, 22, 1, 171, 0, 6, 1, 148, 0, 245, 0, 125, 0, 226, 0, 102, 0, 207, 0, 79, 0, 187, 0, 55, 0, 166, 0, 31, 0, 143, 0, 8, 0, 121, 0, 243, 255, 98, 0, 219, 255, 74, 0, 197, 255, 51, 0, 174, 255, 26, 0, 153, 255, 2, 0, 133, 255, 236, 255, 112, 255, 214, 255, 93, 255, 190, 255, 74, 255, 167, 255, 57, 255, 145, 255, 41, 255, 123, 255, 25, 255, 103, 255, 11, 255, 84, 255, 253, 254, 65, 255, 241, 254, 47, 255, 230, 254, 31, 255, 219, 254, 15, 255, 211, 254, 1, 255, 204, 254, 244, 254, 197, 254, 232, 254, 192, 254, 222, 254, 188, 254, 212, 254, 184, 254, 204, 254, 182, 254, 199, 254, 181, 254, 193, 254, 180, 254, 190, 254, 182, 254, 187, 254, 184, 254, 186, 254, 186, 254, 185, 254, 190, 254, 187, 254, 194, 254, 190, 254, 200, 254, 193, 254, 206, 254, 198, 254, 212, 254, 203, 254, 218, 254, 209, 254, 227, 254, 216, 254, 236, 254, 225, 254, 245, 254, 233, 254, 255, 254, 243, 254, 9, 255, 253, 254, 20, 255, 7, 255, 31, 255, 18, 255, 42, 255, 29, 255, 55, 255, 41, 255, 67, 255, 52, 255, 80, 255, 64, 255, 93, 255, 76, 255, 106, 255, 89, 255, 119, 255, 101, 255, 133, 255, 112, 255, 148, 255, 125, 255, 162, 255, 137, 255, 176, 255, 149, 255, 191, 255, 161, 255, 207, 255, 174, 255, 222, 255, 186, 255, 236, 255, 198, 255, 253, 255, 210, 255, 11, 0, 222, 255, 26, 0, 234, 255, 42, 0, 246, 255, 58, 0, 2, 0, 74, 0, 13, 0, 90, 0, 26, 0, 106, 0, 38, 0, 121, 0, 50, 0, 137, 0, 63, 0, 153, 0, 75, 0, 169, 0, 88, 0, 184, 0, 100, 0, 198, 0, 113, 0, 213, 0, 126, 0, 226, 0, 139, 0, 239, 0, 151, 0, 253, 0, 164, 0, 8, 1, 176, 0, 19, 1, 188, 0, 31, 1, 199, 0, 40, 1, 211, 0, 49, 1, 222, 0, 57, 1, 232, 0, 63, 1, 243, 0, 68, 1, 253, 0, 73, 1, 6, 1, 77, 1, 16, 1, 79, 1, 24, 1, 80, 1, 31, 1, 81, 1, 37, 1, 79, 1, 43, 1, 76, 1, 48, 1, 73, 1, 51, 1, 68, 1, 54, 1, 62, 1, 56, 1, 55, 1, 57, 1, 46, 1, 56, 1, 37, 1, 54, 1, 26, 1, 50, 1, 14, 1, 47, 1, 1, 1, 41, 1, 243, 0, 35, 1, 229, 0, 26, 1, 213, 0, 18, 1, 197, 0, 8, 1, 180, 0, 251, 0, 163, 0, 239, 0, 144, 0, 225, 0, 125, 0, 210, 0, 107, 0, 194, 0, 87, 0, 178, 0, 68, 0, 161, 0, 48, 0, 143, 0, 29, 0, 124, 0, 9, 0, 104, 0, 247, 255, 85, 0, 229, 255, 65, 0, 209, 255, 44, 0, 191, 255, 24, 0, 174, 255, 4, 0, 157, 255, 242, 255, 140, 255, 222, 255, 124, 255, 202, 255, 108, 255, 183, 255, 94, 255, 164, 255, 81, 255, 146, 255, 68, 255, 128, 255, 56, 255, 112, 255, 46, 255, 96, 255, 35, 255, 82, 255, 26, 255, 68, 255, 18, 255, 55, 255, 11, 255, 43, 255, 4, 255, 32, 255, 0, 255, 22, 255, 251, 254, 13, 255, 248, 254, 6, 255, 245, 254, 0, 255, 243, 254, 250, 254, 241, 254, 246, 254, 241, 254, 243, 254, 242, 254, 241, 254, 243, 254, 241, 254, 246, 254, 240, 254, 249, 254, 241, 254, 252, 254, 243, 254, 1, 255, 246, 254, 5, 255, 250, 254, 10, 255, 255, 254, 16, 255, 4, 255, 23, 255, 10, 255, 29, 255, 16, 255, 36, 255, 23, 255, 45, 255, 32, 255, 53, 255, 40, 255, 61, 255, 48, 255, 69, 255, 57, 255, 79, 255, 66, 255, 89, 255, 76, 255, 99, 255, 86, 255, 108, 255, 95, 255, 119, 255, 104, 255, 130, 255, 115, 255, 141, 255, 124, 255, 153, 255, 134, 255, 163, 255, 145, 255, 176, 255, 154, 255, 187, 255, 165, 255, 200, 255, 174, 255, 212, 255, 184, 255, 224, 255, 195, 255, 237, 255, 204, 255, 249, 255, 215, 255, 5, 0, 224, 255, 18, 0, 235, 255, 31, 0, 246, 255, 44, 0, 255, 255, 58, 0, 7, 0, 71, 0, 17, 0, 85, 0, 29, 0, 99, 0, 38, 0, 112, 0, 50, 0, 125, 0, 61, 0, 138, 0, 72, 0, 150, 0, 82, 0, 162, 0, 93, 0, 175, 0, 104, 0, 186, 0, 115, 0, 198, 0, 126, 0, 208, 0, 136, 0, 219, 0, 147, 0, 227, 0, 158, 0, 237, 0, 168, 0, 246, 0, 178, 0, 253, 0, 187, 0, 3, 1, 197, 0, 9, 1, 205, 0, 14, 1, 215, 0, 18, 1, 223, 0, 20, 1, 230, 0, 23, 1, 237, 0, 24, 1, 243, 0, 23, 1, 249, 0, 23, 1, 254, 0, 21, 1, 2, 1, 18, 1, 6, 1, 14, 1, 8, 1, 8, 1, 10, 1, 2, 1, 11, 1, 252, 0, 10, 1, 244, 0, 9, 1, 235, 0, 6, 1, 225, 0, 3, 1, 215, 0, 254, 0, 203, 0, 248, 0, 191, 0, 241, 0, 178, 0, 233, 0, 164, 0, 224, 0, 150, 0, 214, 0, 135, 0, 203, 0, 120, 0, 192, 0, 105, 0, 179, 0, 89, 0, 165, 0, 73, 0, 152, 0, 57, 0, 136, 0, 41, 0, 120, 0, 24, 0, 105, 0, 8, 0, 89, 0, 250, 255, 72, 0, 235, 255, 55, 0, 219, 255, 37, 0, 204, 255, 20, 0, 190, 255, 3, 0, 175, 255, 244, 255, 161, 255, 228, 255, 148, 255, 211, 255, 136, 255, 194, 255, 124, 255, 178, 255, 113, 255, 164, 255, 103, 255, 149, 255, 92, 255, 134, 255, 83, 255, 121, 255, 75, 255, 109, 255, 67, 255, 97, 255, 61, 255, 85, 255, 55, 255, 76, 255, 50, 255, 67, 255, 46, 255, 58, 255, 42, 255, 51, 255, 39, 255, 45, 255, 37, 255, 39, 255, 35, 255, 34, 255, 35, 255, 32, 255, 34, 255, 29, 255, 35, 255, 27, 255, 35, 255, 26, 255, 36, 255, 27, 255, 39, 255, 27, 255, 41, 255, 29, 255, 45, 255, 32, 255, 49, 255, 35, 255, 53, 255, 38, 255, 57, 255, 43, 255, 62, 255, 48, 255, 68, 255, 54, 255, 74, 255, 59, 255, 80, 255, 65, 255, 86, 255, 72, 255, 93, 255, 79, 255, 100, 255, 86, 255, 107, 255, 95, 255, 115, 255, 102, 255, 123, 255, 110, 255, 132, 255, 118, 255, 140, 255, 125, 255, 149, 255, 134, 255, 158, 255, 143, 255, 166, 255, 150, 255, 176, 255, 158, 255, 186, 255, 167, 255, 195, 255, 175, 255, 206, 255, 183, 255, 216, 255, 193, 255, 225, 255, 201, 255, 236, 255, 209, 255, 247, 255, 218, 255, 1, 0, 226, 255, 11, 0, 235, 255, 22, 0, 243, 255, 34, 0, 252, 255, 45, 0, 3, 0, 56, 0, 11, 0, 67, 0, 21, 0, 79, 0, 31, 0, 90, 0, 40, 0, 101, 0, 49, 0, 112, 0, 58, 0, 123, 0, 67, 0, 134, 0, 77, 0, 144, 0, 86, 0, 153, 0, 96, 0, 163, 0, 106, 0, 172, 0, 114, 0, 181, 0, 124, 0, 189, 0, 133, 0, 196, 0, 143, 0, 204, 0, 151, 0, 210, 0, 160, 0, 216, 0, 168, 0, 221, 0, 176, 0, 224, 0, 184, 0, 229, 0, 191, 0, 231, 0, 197, 0, 232, 0, 203, 0, 234, 0, 209, 0, 233, 0, 214, 0, 233, 0, 218, 0, 232, 0, 222, 0, 229, 0, 225, 0, 226, 0, 227, 0, 221, 0, 228, 0, 217, 0, 229, 0, 211, 0, 228, 0, 204, 0, 227, 0, 197, 0, 225, 0, 189, 0, 222, 0, 180, 0, 218, 0, 170, 0, 213, 0, 160, 0, 207, 0, 149, 0, 200, 0, 138, 0, 192, 0, 126, 0, 184, 0, 114, 0, 174, 0, 101, 0, 165, 0, 88, 0, 154, 0, 75, 0, 142, 0, 62, 0, 130, 0, 48, 0, 117, 0, 35, 0, 104, 0, 22, 0, 90, 0, 8, 0, 76, 0, 252, 255, 62, 0, 240, 255, 47, 0, 227, 255, 33, 0, 215, 255, 18, 0, 202, 255, 4, 0, 191, 255, 247, 255, 180, 255, 233, 255, 169, 255, 219, 255, 158, 255, 205, 255, 149, 255, 192, 255, 140, 255, 179, 255, 131, 255, 166, 255, 122, 255, 155, 255, 116, 255, 143, 255, 110, 255, 133, 255, 103, 255, 124, 255, 98, 255, 114, 255, 93, 255, 105, 255, 88, 255, 97, 255, 85, 255, 91, 255, 81, 255, 85, 255, 79, 255, 80, 255, 78, 255, 75, 255, 76, 255, 72, 255, 76, 255, 69, 255, 75, 255, 67, 255, 76, 255, 65, 255, 76, 255, 64, 255, 78, 255, 65, 255, 79, 255, 65, 255, 81, 255, 67, 255, 83, 255, 69, 255, 87, 255, 71, 255, 90, 255, 75, 255, 93, 255, 79, 255, 98, 255, 83, 255, 102, 255, 88, 255, 107, 255, 93, 255, 112, 255, 97, 255, 117, 255, 103, 255, 117, 255, 103, 255, 122, 255, 109, 255, 128, 255, 114, 255, 135, 255, 121, 255, 140, 255, 127, 255, 147, 255, 134, 255, 153, 255, 140, 255, 160, 255, 147, 255, 168, 255, 153, 255, 175, 255, 160, 255, 182, 255, 167, 255, 190, 255, 173, 255, 198, 255, 181, 255, 206, 255, 187, 255, 214, 255, 194, 255, 222, 255, 201, 255, 231, 255, 207, 255, 239, 255, 215, 255, 248, 255, 222, 255, 76, 73, 83, 84, 96, 0, 0, 0, 73, 78, 70, 79, 73, 83, 70, 84, 53, 0, 0, 0, 71, 111, 108, 100, 87, 97, 118, 101, 32, 40, 67, 41, 32, 67, 104, 114, 105, 115, 32, 83, 46, 32, 67, 114, 97, 105, 103, 44, 32, 104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 103, 111, 108, 100, 119, 97, 118, 101, 46, 99, 111, 109, 0, 0, 73, 69, 78, 71, 2, 0, 0, 0, 32, 0, 73, 67, 82, 68, 11, 0, 0, 0, 50, 48, 48, 52, 45, 48, 56, 45, 49, 57, 0, 0}; /* End Of File */ springlobby-0.169/src/sound/ring_sound.h0000600000176000000410000202020412105760300021656 0ustar buildbotwww-data00000000000000/* ring_sound - 106502 bytes */ static const unsigned char ring_sound_data[] = { 0x52,0x49,0x46,0x46,0xfe,0x9f,0x01,0x00,0x57,0x41,0x56,0x45,0x66,0x6d,0x74,0x20,0x10,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x44,0xac,0x00,0x00,0x44,0xac,0x00,0x00,0x01,0x00,0x08,0x00,0x64,0x61,0x74,0x61,0xda,0x9f,0x01,0x00,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x84,0x84,0x82,0x81,0x7f,0x7d,0x7c,0x7c,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x81,0x81,0x82,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x83,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x80,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x7f,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x7b,0x7b,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x82,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x81,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7f,0x80,0x82,0x83,0x83,0x83,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x83,0x85,0x87,0x88,0x88,0x86,0x84,0x82,0x80,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7a,0x7c,0x7d,0x7e,0x7d,0x7c,0x7a,0x79,0x77,0x77,0x77,0x79,0x7b,0x7e,0x81,0x83,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x86,0x87,0x87,0x86,0x84,0x82,0x80,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x86,0x85,0x85,0x84,0x84,0x83,0x83,0x84,0x84,0x85,0x87,0x87,0x87,0x87,0x85,0x83,0x80,0x7d,0x7a,0x78,0x76,0x76,0x77,0x78,0x79,0x7b,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7e,0x81,0x83,0x85,0x85,0x84,0x82,0x7f,0x7c,0x79,0x78,0x77,0x78,0x7b,0x7d,0x80,0x82,0x83,0x83,0x81,0x80,0x7d,0x7c,0x7b,0x7c,0x7d,0x7f,0x82,0x83,0x84,0x84,0x83,0x80,0x7e,0x7b,0x79,0x78,0x78,0x7a,0x7d,0x80,0x83,0x85,0x87,0x87,0x87,0x86,0x85,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x85,0x83,0x82,0x7f,0x7d,0x7a,0x78,0x77,0x77,0x77,0x78,0x7a,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x83,0x83,0x82,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x78,0x77,0x77,0x76,0x77,0x77,0x78,0x79,0x7a,0x7b,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82,0x83,0x84,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x83,0x85,0x86,0x88,0x89,0x8a,0x89,0x88,0x86,0x84,0x83,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7d,0x7e,0x80,0x82,0x85,0x87,0x88,0x87,0x86,0x84,0x81,0x7f,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7b,0x7a,0x79,0x77,0x75,0x73,0x72,0x72,0x73,0x75,0x78,0x7c,0x7f,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7f,0x81,0x83,0x85,0x86,0x87,0x87,0x86,0x86,0x86,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x82,0x85,0x88,0x8a,0x8c,0x8d,0x8d,0x8c,0x8a,0x88,0x87,0x85,0x84,0x83,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x80,0x82,0x84,0x85,0x85,0x85,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7a,0x78,0x77,0x76,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x7f,0x80,0x81,0x82,0x84,0x86,0x89,0x8a,0x8c,0x8c,0x8c,0x8b,0x89,0x87,0x85,0x83,0x82,0x81,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x7c,0x7d,0x7f,0x82,0x84,0x86,0x87,0x88,0x88,0x87,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7a,0x78,0x77,0x75,0x74,0x72,0x71,0x71,0x72,0x73,0x75,0x78,0x7b,0x7f,0x82,0x84,0x85,0x86,0x86,0x86,0x85,0x85,0x84,0x84,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x82,0x85,0x87,0x88,0x89,0x89,0x88,0x86,0x84,0x83,0x82,0x82,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x83,0x85,0x85,0x85,0x85,0x83,0x81,0x7e,0x7b,0x79,0x77,0x76,0x76,0x76,0x76,0x76,0x77,0x77,0x77,0x77,0x77,0x78,0x79,0x7b,0x7d,0x80,0x83,0x86,0x88,0x8a,0x8b,0x8b,0x89,0x88,0x86,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7d,0x7e,0x80,0x83,0x86,0x89,0x8c,0x8d,0x8e,0x8e,0x8c,0x8b,0x89,0x87,0x85,0x84,0x83,0x83,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x76,0x76,0x76,0x78,0x79,0x7b,0x7d,0x7e,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x87,0x89,0x8a,0x8a,0x89,0x87,0x85,0x83,0x82,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x85,0x88,0x8a,0x8b,0x8c,0x8c,0x8b,0x89,0x87,0x84,0x81,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x77,0x76,0x75,0x74,0x74,0x73,0x74,0x75,0x77,0x79,0x7d,0x80,0x83,0x86,0x88,0x88,0x88,0x88,0x86,0x85,0x84,0x82,0x82,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7a,0x7a,0x7a,0x7a,0x7b,0x7d,0x80,0x82,0x84,0x85,0x86,0x86,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x80,0x82,0x84,0x86,0x88,0x89,0x8a,0x89,0x88,0x87,0x84,0x82,0x7f,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x79,0x7a,0x7a,0x7b,0x7d,0x80,0x83,0x86,0x88,0x8a,0x8b,0x8b,0x8b,0x8a,0x88,0x86,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x81,0x83,0x85,0x86,0x87,0x87,0x86,0x85,0x84,0x82,0x82,0x81,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x81,0x83,0x84,0x86,0x88,0x89,0x8a,0x8b,0x8a,0x89,0x87,0x85,0x82,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x79,0x79,0x79,0x7a,0x7a,0x7c,0x7d,0x7f,0x82,0x85,0x87,0x89,0x8b,0x8c,0x8c,0x8b,0x89,0x87,0x85,0x82,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7a,0x79,0x78,0x78,0x77,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x81,0x83,0x84,0x85,0x86,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x84,0x86,0x87,0x88,0x89,0x88,0x86,0x84,0x81,0x7e,0x7b,0x79,0x77,0x75,0x75,0x75,0x76,0x76,0x77,0x77,0x78,0x79,0x79,0x7a,0x7c,0x7e,0x81,0x84,0x87,0x89,0x8b,0x8b,0x8b,0x89,0x87,0x84,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x79,0x79,0x79,0x79,0x78,0x78,0x78,0x78,0x79,0x7a,0x7c,0x7f,0x81,0x83,0x85,0x86,0x87,0x86,0x85,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7f,0x7c,0x7b,0x79,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x87,0x88,0x88,0x88,0x86,0x85,0x82,0x7f,0x7c,0x79,0x77,0x75,0x74,0x74,0x74,0x76,0x77,0x78,0x7a,0x7b,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x88,0x8a,0x8c,0x8e,0x8e,0x8e,0x8d,0x8b,0x88,0x85,0x82,0x80,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x85,0x85,0x85,0x85,0x84,0x84,0x83,0x83,0x84,0x84,0x84,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7a,0x78,0x77,0x76,0x76,0x77,0x78,0x7a,0x7b,0x7d,0x7f,0x80,0x81,0x82,0x83,0x85,0x86,0x87,0x89,0x8a,0x8a,0x8a,0x8a,0x89,0x87,0x85,0x82,0x80,0x7d,0x7c,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x84,0x86,0x87,0x88,0x88,0x88,0x87,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x85,0x85,0x86,0x86,0x85,0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x85,0x85,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x78,0x78,0x7a,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x87,0x86,0x86,0x84,0x82,0x80,0x7d,0x7a,0x77,0x75,0x74,0x73,0x73,0x74,0x75,0x76,0x78,0x79,0x79,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x82,0x85,0x88,0x8a,0x8c,0x8c,0x8a,0x88,0x85,0x81,0x7e,0x7c,0x7c,0x7c,0x7e,0x80,0x81,0x83,0x83,0x82,0x7f,0x7d,0x7a,0x79,0x78,0x79,0x7c,0x80,0x84,0x87,0x89,0x89,0x88,0x85,0x81,0x7d,0x79,0x77,0x77,0x79,0x7c,0x81,0x85,0x88,0x8a,0x8a,0x88,0x85,0x82,0x7f,0x7d,0x7c,0x7c,0x7e,0x7f,0x81,0x82,0x81,0x7f,0x7b,0x77,0x73,0x70,0x6e,0x6e,0x6f,0x72,0x76,0x79,0x7d,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x84,0x86,0x88,0x89,0x88,0x86,0x83,0x80,0x7c,0x79,0x77,0x77,0x77,0x79,0x7c,0x7e,0x81,0x83,0x84,0x84,0x83,0x82,0x82,0x82,0x83,0x84,0x87,0x8a,0x8c,0x8f,0x90,0x90,0x8f,0x8c,0x8a,0x87,0x84,0x81,0x80,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7e,0x7d,0x7b,0x79,0x77,0x77,0x77,0x78,0x7a,0x7c,0x7d,0x7e,0x7f,0x7e,0x7d,0x7b,0x79,0x77,0x76,0x77,0x78,0x7a,0x7d,0x80,0x82,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x78,0x78,0x7a,0x7c,0x7e,0x81,0x84,0x86,0x87,0x88,0x88,0x88,0x88,0x88,0x89,0x8a,0x8b,0x8c,0x8c,0x8b,0x89,0x86,0x82,0x7e,0x79,0x75,0x73,0x71,0x71,0x72,0x73,0x75,0x77,0x78,0x78,0x78,0x77,0x76,0x76,0x76,0x78,0x7b,0x7e,0x82,0x86,0x88,0x89,0x89,0x87,0x83,0x80,0x7c,0x79,0x78,0x77,0x78,0x7a,0x7c,0x7d,0x7e,0x7e,0x7c,0x7a,0x78,0x76,0x76,0x76,0x78,0x7a,0x7e,0x81,0x84,0x85,0x86,0x85,0x83,0x81,0x7f,0x7e,0x7e,0x7f,0x80,0x83,0x86,0x88,0x89,0x8a,0x89,0x87,0x85,0x83,0x81,0x80,0x80,0x81,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x7e,0x7b,0x79,0x77,0x77,0x77,0x78,0x7b,0x7d,0x80,0x82,0x84,0x86,0x86,0x86,0x86,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x83,0x82,0x7f,0x7c,0x79,0x75,0x73,0x71,0x70,0x70,0x72,0x73,0x76,0x78,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x81,0x83,0x85,0x88,0x8a,0x8b,0x8b,0x8a,0x88,0x85,0x81,0x7e,0x7c,0x7a,0x7a,0x7a,0x7b,0x7d,0x7e,0x7f,0x7f,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7c,0x7d,0x80,0x82,0x84,0x85,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7c,0x7c,0x7e,0x80,0x83,0x85,0x87,0x87,0x86,0x84,0x81,0x7e,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7b,0x79,0x76,0x74,0x72,0x71,0x72,0x74,0x78,0x7c,0x80,0x84,0x87,0x88,0x89,0x88,0x87,0x85,0x84,0x84,0x84,0x85,0x86,0x87,0x87,0x86,0x84,0x81,0x7d,0x79,0x75,0x73,0x71,0x71,0x73,0x76,0x79,0x7c,0x7f,0x81,0x83,0x83,0x82,0x82,0x81,0x81,0x82,0x84,0x86,0x88,0x8a,0x8b,0x8b,0x89,0x86,0x83,0x7f,0x7b,0x79,0x77,0x76,0x76,0x78,0x79,0x7b,0x7c,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x86,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x85,0x84,0x82,0x7f,0x7c,0x79,0x78,0x77,0x77,0x79,0x7b,0x7d,0x7e,0x7f,0x7e,0x7c,0x7a,0x78,0x76,0x75,0x76,0x78,0x7b,0x7f,0x83,0x86,0x89,0x8a,0x89,0x88,0x86,0x83,0x82,0x80,0x80,0x81,0x82,0x83,0x84,0x83,0x81,0x7f,0x7b,0x77,0x74,0x71,0x70,0x71,0x73,0x77,0x7b,0x7f,0x82,0x85,0x86,0x86,0x85,0x84,0x83,0x83,0x84,0x86,0x88,0x8b,0x8d,0x8d,0x8d,0x8a,0x87,0x82,0x7d,0x79,0x76,0x74,0x73,0x74,0x76,0x78,0x7a,0x7b,0x7b,0x7a,0x79,0x77,0x75,0x75,0x75,0x77,0x79,0x7d,0x80,0x82,0x83,0x83,0x81,0x7f,0x7c,0x79,0x77,0x77,0x77,0x79,0x7c,0x7f,0x81,0x83,0x83,0x81,0x7f,0x7c,0x79,0x77,0x76,0x77,0x79,0x7c,0x7e,0x81,0x82,0x83,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7d,0x80,0x84,0x89,0x8d,0x90,0x92,0x92,0x90,0x8d,0x89,0x86,0x83,0x82,0x81,0x82,0x83,0x83,0x84,0x83,0x80,0x7d,0x78,0x74,0x70,0x6d,0x6c,0x6c,0x6f,0x72,0x77,0x7b,0x7e,0x80,0x81,0x81,0x7f,0x7e,0x7d,0x7c,0x7d,0x7e,0x81,0x83,0x84,0x85,0x84,0x81,0x7d,0x78,0x73,0x6f,0x6d,0x6c,0x6d,0x6f,0x72,0x76,0x79,0x7c,0x7d,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7e,0x82,0x86,0x8a,0x8e,0x90,0x90,0x8f,0x8c,0x89,0x85,0x82,0x80,0x80,0x81,0x83,0x85,0x87,0x88,0x87,0x86,0x83,0x80,0x7d,0x7a,0x79,0x79,0x7a,0x7b,0x7e,0x80,0x81,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x79,0x7a,0x7c,0x7f,0x82,0x85,0x87,0x87,0x86,0x84,0x80,0x7c,0x78,0x75,0x74,0x73,0x74,0x75,0x77,0x78,0x78,0x77,0x75,0x72,0x6f,0x6c,0x6b,0x6b,0x6d,0x70,0x75,0x7a,0x7f,0x83,0x86,0x88,0x88,0x87,0x86,0x85,0x85,0x85,0x86,0x88,0x89,0x8a,0x8a,0x89,0x86,0x83,0x7f,0x7b,0x77,0x75,0x75,0x76,0x78,0x7b,0x7e,0x81,0x83,0x84,0x85,0x84,0x83,0x82,0x82,0x83,0x84,0x86,0x89,0x8b,0x8d,0x8d,0x8c,0x8a,0x87,0x83,0x7f,0x7c,0x79,0x78,0x79,0x7a,0x7b,0x7d,0x7e,0x7e,0x7d,0x7b,0x78,0x75,0x73,0x71,0x71,0x71,0x73,0x75,0x78,0x7a,0x7b,0x7b,0x7a,0x78,0x77,0x76,0x76,0x77,0x7a,0x7e,0x82,0x85,0x88,0x8a,0x8a,0x88,0x85,0x81,0x7e,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x81,0x80,0x7e,0x7b,0x79,0x78,0x78,0x7a,0x7d,0x81,0x85,0x89,0x8b,0x8d,0x8d,0x8b,0x8a,0x88,0x87,0x86,0x86,0x87,0x88,0x89,0x88,0x87,0x84,0x81,0x7c,0x78,0x74,0x72,0x71,0x72,0x75,0x78,0x7b,0x7e,0x80,0x80,0x7e,0x7b,0x77,0x74,0x71,0x70,0x71,0x74,0x78,0x7c,0x80,0x83,0x84,0x84,0x81,0x7e,0x79,0x76,0x73,0x72,0x73,0x76,0x79,0x7c,0x7f,0x80,0x80,0x7e,0x7b,0x77,0x73,0x71,0x70,0x70,0x73,0x77,0x7b,0x7f,0x82,0x83,0x83,0x83,0x81,0x80,0x80,0x80,0x83,0x86,0x8a,0x8e,0x91,0x93,0x93,0x90,0x8c,0x87,0x82,0x7d,0x7a,0x78,0x78,0x79,0x7c,0x7e,0x80,0x80,0x80,0x7e,0x7b,0x79,0x76,0x75,0x76,0x78,0x7b,0x7f,0x83,0x86,0x87,0x87,0x85,0x81,0x7d,0x78,0x75,0x73,0x74,0x75,0x78,0x7c,0x7f,0x81,0x81,0x80,0x7d,0x79,0x76,0x72,0x71,0x71,0x72,0x76,0x7a,0x7e,0x81,0x82,0x82,0x80,0x7d,0x7a,0x78,0x76,0x77,0x7a,0x7e,0x84,0x89,0x8e,0x92,0x93,0x93,0x90,0x8d,0x89,0x85,0x83,0x81,0x81,0x81,0x82,0x82,0x82,0x80,0x7e,0x7b,0x78,0x76,0x74,0x75,0x77,0x7a,0x7d,0x81,0x84,0x86,0x87,0x87,0x85,0x84,0x82,0x81,0x81,0x82,0x83,0x85,0x86,0x87,0x86,0x85,0x81,0x7d,0x79,0x76,0x73,0x71,0x72,0x73,0x76,0x79,0x7c,0x7f,0x80,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x78,0x7a,0x7d,0x80,0x82,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x80,0x81,0x82,0x84,0x86,0x88,0x88,0x87,0x85,0x82,0x7e,0x7a,0x76,0x74,0x73,0x74,0x76,0x78,0x7b,0x7d,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7e,0x80,0x83,0x87,0x8b,0x8f,0x91,0x92,0x90,0x8d,0x89,0x84,0x7f,0x7b,0x78,0x76,0x76,0x76,0x77,0x77,0x77,0x76,0x75,0x73,0x72,0x71,0x72,0x73,0x77,0x7b,0x80,0x84,0x88,0x8a,0x8b,0x8b,0x89,0x86,0x84,0x82,0x80,0x80,0x80,0x81,0x82,0x82,0x81,0x80,0x7d,0x7a,0x77,0x74,0x72,0x71,0x72,0x74,0x77,0x7b,0x7f,0x82,0x84,0x85,0x86,0x85,0x84,0x82,0x82,0x82,0x83,0x85,0x87,0x89,0x8b,0x8c,0x8c,0x8b,0x89,0x87,0x84,0x82,0x81,0x80,0x80,0x81,0x82,0x82,0x82,0x81,0x7f,0x7d,0x79,0x76,0x73,0x71,0x70,0x71,0x73,0x75,0x78,0x7a,0x7c,0x7d,0x7d,0x7d,0x7c,0x7c,0x7d,0x7f,0x81,0x84,0x87,0x8a,0x8c,0x8c,0x8b,0x88,0x84,0x80,0x7c,0x78,0x76,0x75,0x75,0x76,0x77,0x79,0x7a,0x7b,0x7b,0x7a,0x79,0x79,0x79,0x7b,0x7e,0x82,0x86,0x8b,0x8f,0x92,0x93,0x93,0x92,0x8f,0x8b,0x88,0x84,0x82,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7b,0x78,0x75,0x73,0x71,0x70,0x71,0x73,0x76,0x7a,0x7e,0x81,0x83,0x84,0x84,0x82,0x81,0x7f,0x7d,0x7d,0x7d,0x7e,0x80,0x82,0x84,0x84,0x84,0x82,0x80,0x7d,0x7b,0x79,0x78,0x79,0x7a,0x7d,0x7f,0x82,0x83,0x83,0x82,0x80,0x7d,0x7b,0x79,0x77,0x77,0x78,0x7b,0x7d,0x80,0x83,0x85,0x85,0x85,0x85,0x84,0x84,0x84,0x85,0x87,0x89,0x8b,0x8d,0x8d,0x8d,0x8b,0x88,0x84,0x7f,0x7b,0x77,0x75,0x73,0x73,0x73,0x75,0x76,0x77,0x78,0x78,0x78,0x78,0x78,0x7a,0x7c,0x7e,0x82,0x86,0x8a,0x8d,0x90,0x91,0x90,0x8f,0x8c,0x88,0x85,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7c,0x7c,0x7b,0x79,0x77,0x76,0x76,0x76,0x77,0x7a,0x7e,0x82,0x86,0x89,0x8b,0x8c,0x8c,0x8a,0x89,0x87,0x85,0x84,0x84,0x85,0x86,0x87,0x88,0x88,0x87,0x86,0x83,0x80,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x80,0x7e,0x7c,0x79,0x78,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x82,0x82,0x82,0x81,0x81,0x82,0x83,0x85,0x87,0x89,0x8b,0x8b,0x8b,0x89,0x86,0x82,0x7f,0x7b,0x78,0x76,0x75,0x75,0x76,0x77,0x79,0x7a,0x7b,0x7b,0x7c,0x7c,0x7c,0x7e,0x7f,0x82,0x85,0x89,0x8c,0x8f,0x90,0x91,0x8f,0x8d,0x8a,0x86,0x82,0x7f,0x7c,0x7a,0x79,0x79,0x78,0x78,0x77,0x76,0x74,0x73,0x72,0x71,0x72,0x74,0x77,0x7a,0x7f,0x82,0x86,0x88,0x89,0x88,0x87,0x86,0x84,0x82,0x82,0x82,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x80,0x7e,0x7b,0x7a,0x79,0x7a,0x7b,0x7d,0x80,0x82,0x83,0x83,0x83,0x81,0x7f,0x7e,0x7c,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x87,0x87,0x86,0x85,0x84,0x83,0x83,0x83,0x84,0x85,0x86,0x87,0x87,0x86,0x84,0x81,0x7d,0x79,0x75,0x72,0x70,0x70,0x70,0x72,0x74,0x76,0x78,0x7a,0x7b,0x7c,0x7c,0x7d,0x7e,0x80,0x83,0x87,0x8a,0x8e,0x91,0x92,0x93,0x91,0x8f,0x8b,0x87,0x83,0x7f,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7b,0x7a,0x79,0x78,0x78,0x78,0x79,0x7b,0x7e,0x81,0x85,0x89,0x8c,0x8d,0x8e,0x8d,0x8b,0x88,0x86,0x83,0x82,0x81,0x80,0x81,0x81,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x76,0x74,0x74,0x75,0x77,0x79,0x7b,0x7e,0x7f,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x7a,0x7b,0x7e,0x80,0x83,0x85,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x83,0x84,0x85,0x86,0x87,0x87,0x87,0x85,0x82,0x7f,0x7c,0x79,0x76,0x75,0x75,0x76,0x78,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x82,0x83,0x84,0x85,0x87,0x8a,0x8c,0x8e,0x8f,0x90,0x8e,0x8c,0x88,0x84,0x7f,0x7b,0x78,0x75,0x74,0x73,0x74,0x74,0x75,0x76,0x76,0x76,0x76,0x76,0x77,0x78,0x7b,0x7e,0x82,0x86,0x89,0x8c,0x8e,0x8e,0x8d,0x8c,0x89,0x87,0x84,0x83,0x81,0x81,0x81,0x80,0x80,0x80,0x7e,0x7d,0x7b,0x79,0x78,0x77,0x78,0x79,0x7b,0x7d,0x80,0x82,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x81,0x82,0x83,0x85,0x87,0x88,0x89,0x88,0x88,0x86,0x85,0x83,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x82,0x80,0x7e,0x7b,0x78,0x76,0x74,0x73,0x73,0x75,0x77,0x79,0x7c,0x7e,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x88,0x8a,0x8b,0x8d,0x8d,0x8d,0x8b,0x89,0x85,0x81,0x7d,0x79,0x76,0x74,0x73,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7e,0x81,0x84,0x88,0x8c,0x8f,0x91,0x92,0x92,0x90,0x8e,0x8b,0x88,0x86,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7d,0x7b,0x79,0x78,0x77,0x77,0x77,0x78,0x7a,0x7d,0x7f,0x82,0x83,0x84,0x84,0x84,0x82,0x81,0x80,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7b,0x79,0x77,0x76,0x75,0x75,0x76,0x77,0x7a,0x7c,0x7f,0x81,0x83,0x84,0x85,0x86,0x87,0x87,0x89,0x8a,0x8b,0x8c,0x8d,0x8d,0x8c,0x8b,0x88,0x85,0x81,0x7d,0x7a,0x77,0x75,0x74,0x74,0x75,0x76,0x77,0x78,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x84,0x87,0x89,0x8c,0x8e,0x8f,0x8f,0x8e,0x8d,0x8a,0x87,0x84,0x81,0x7e,0x7c,0x7a,0x79,0x78,0x77,0x77,0x76,0x75,0x74,0x74,0x74,0x74,0x75,0x77,0x79,0x7c,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7c,0x7d,0x80,0x82,0x85,0x87,0x88,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x8a,0x8a,0x89,0x88,0x85,0x82,0x7f,0x7b,0x77,0x74,0x71,0x70,0x6f,0x70,0x71,0x72,0x74,0x76,0x77,0x78,0x7a,0x7b,0x7d,0x7f,0x82,0x85,0x87,0x8a,0x8c,0x8d,0x8c,0x8b,0x89,0x86,0x83,0x80,0x7e,0x7b,0x7a,0x79,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x82,0x85,0x88,0x8a,0x8c,0x8d,0x8d,0x8c,0x8c,0x8b,0x89,0x88,0x88,0x87,0x87,0x86,0x86,0x85,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x84,0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x85,0x84,0x82,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x75,0x75,0x76,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90,0x91,0x92,0x92,0x90,0x8e,0x8c,0x89,0x85,0x82,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x84,0x86,0x88,0x89,0x89,0x89,0x88,0x87,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x85,0x86,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x86,0x86,0x85,0x83,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x76,0x76,0x76,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x84,0x86,0x87,0x89,0x8b,0x8c,0x8d,0x8e,0x8e,0x8e,0x8d,0x8b,0x89,0x86,0x83,0x80,0x7c,0x79,0x77,0x75,0x73,0x73,0x73,0x73,0x74,0x75,0x76,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x83,0x85,0x87,0x89,0x8a,0x8b,0x8b,0x8a,0x89,0x87,0x85,0x83,0x82,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7b,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x84,0x84,0x85,0x86,0x86,0x87,0x87,0x87,0x87,0x87,0x86,0x86,0x85,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7a,0x79,0x78,0x76,0x76,0x75,0x75,0x76,0x77,0x78,0x7b,0x7d,0x7f,0x82,0x84,0x86,0x88,0x89,0x8a,0x8b,0x8b,0x8b,0x8b,0x8a,0x88,0x87,0x84,0x82,0x7f,0x7c,0x7a,0x77,0x75,0x74,0x73,0x73,0x74,0x74,0x75,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x84,0x86,0x88,0x8a,0x8b,0x8c,0x8c,0x8c,0x8b,0x8a,0x89,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x82,0x84,0x86,0x87,0x88,0x88,0x87,0x84,0x81,0x7e,0x7b,0x79,0x79,0x79,0x7a,0x7c,0x7d,0x7d,0x7c,0x7a,0x77,0x74,0x72,0x70,0x71,0x73,0x78,0x7d,0x83,0x89,0x8d,0x90,0x90,0x8e,0x8c,0x88,0x85,0x84,0x83,0x84,0x86,0x88,0x89,0x8a,0x88,0x85,0x80,0x7b,0x76,0x72,0x70,0x70,0x72,0x76,0x7a,0x7f,0x83,0x85,0x86,0x86,0x85,0x83,0x82,0x83,0x84,0x86,0x89,0x8b,0x8c,0x8c,0x8b,0x88,0x83,0x7e,0x79,0x75,0x73,0x72,0x73,0x75,0x77,0x79,0x7b,0x7b,0x7a,0x79,0x77,0x76,0x76,0x77,0x79,0x7c,0x80,0x85,0x88,0x8a,0x8b,0x8a,0x87,0x85,0x82,0x80,0x7f,0x7f,0x80,0x82,0x85,0x87,0x88,0x89,0x87,0x85,0x82,0x7f,0x7d,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x78,0x77,0x77,0x79,0x7c,0x7f,0x83,0x86,0x88,0x89,0x89,0x87,0x85,0x83,0x81,0x80,0x80,0x81,0x82,0x84,0x85,0x85,0x83,0x80,0x7c,0x78,0x73,0x70,0x6e,0x6e,0x70,0x73,0x77,0x7c,0x80,0x83,0x84,0x84,0x83,0x82,0x81,0x81,0x82,0x84,0x87,0x8a,0x8d,0x8e,0x8e,0x8c,0x88,0x82,0x7d,0x77,0x74,0x72,0x72,0x73,0x76,0x79,0x7c,0x7e,0x7e,0x7d,0x7b,0x79,0x77,0x76,0x77,0x79,0x7d,0x81,0x85,0x88,0x8a,0x89,0x87,0x83,0x7f,0x7b,0x79,0x78,0x78,0x7a,0x7d,0x80,0x83,0x84,0x84,0x82,0x7f,0x7c,0x79,0x77,0x77,0x78,0x7a,0x7d,0x80,0x82,0x83,0x83,0x81,0x7f,0x7b,0x79,0x77,0x76,0x77,0x7a,0x7e,0x82,0x86,0x89,0x8a,0x8a,0x89,0x87,0x84,0x81,0x80,0x7f,0x80,0x82,0x84,0x85,0x86,0x85,0x83,0x80,0x7b,0x77,0x73,0x70,0x70,0x71,0x74,0x79,0x7e,0x83,0x86,0x88,0x89,0x87,0x85,0x83,0x81,0x80,0x81,0x83,0x86,0x89,0x8b,0x8c,0x8b,0x89,0x84,0x7e,0x79,0x74,0x71,0x70,0x71,0x74,0x79,0x7d,0x81,0x83,0x83,0x82,0x7f,0x7c,0x7a,0x78,0x78,0x7b,0x7e,0x82,0x87,0x8a,0x8b,0x8a,0x88,0x83,0x7f,0x7a,0x77,0x76,0x76,0x79,0x7c,0x80,0x83,0x85,0x86,0x84,0x82,0x7e,0x7b,0x78,0x77,0x78,0x7a,0x7e,0x81,0x84,0x86,0x87,0x85,0x82,0x7e,0x7b,0x78,0x76,0x76,0x78,0x7b,0x7f,0x83,0x86,0x87,0x87,0x85,0x82,0x7f,0x7c,0x7a,0x79,0x7a,0x7c,0x7e,0x81,0x82,0x82,0x80,0x7d,0x79,0x75,0x72,0x70,0x70,0x72,0x75,0x79,0x7e,0x82,0x85,0x86,0x86,0x84,0x82,0x80,0x7f,0x7f,0x81,0x83,0x86,0x89,0x8b,0x8b,0x8a,0x87,0x83,0x7e,0x79,0x76,0x74,0x74,0x75,0x78,0x7c,0x7f,0x82,0x84,0x85,0x84,0x82,0x81,0x7f,0x7f,0x80,0x81,0x84,0x87,0x89,0x8b,0x8b,0x89,0x86,0x82,0x7d,0x79,0x76,0x74,0x74,0x75,0x78,0x7b,0x7d,0x7f,0x80,0x7f,0x7d,0x7a,0x78,0x76,0x76,0x77,0x79,0x7c,0x80,0x83,0x85,0x86,0x85,0x83,0x80,0x7c,0x7a,0x78,0x78,0x7a,0x7e,0x82,0x86,0x89,0x8a,0x8a,0x88,0x85,0x82,0x7e,0x7c,0x7c,0x7d,0x7f,0x82,0x84,0x86,0x86,0x85,0x82,0x7e,0x79,0x76,0x74,0x74,0x76,0x7a,0x7f,0x85,0x89,0x8c,0x8c,0x8b,0x89,0x85,0x82,0x7f,0x7d,0x7d,0x7e,0x80,0x81,0x83,0x82,0x81,0x7e,0x7a,0x76,0x72,0x70,0x6f,0x6f,0x71,0x75,0x78,0x7c,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7f,0x80,0x81,0x84,0x86,0x89,0x8b,0x8c,0x8c,0x8a,0x87,0x83,0x7f,0x7c,0x79,0x78,0x78,0x79,0x7c,0x7f,0x82,0x84,0x84,0x84,0x83,0x80,0x7e,0x7d,0x7c,0x7c,0x7e,0x81,0x84,0x86,0x88,0x88,0x86,0x83,0x7f,0x7b,0x77,0x75,0x74,0x76,0x79,0x7c,0x80,0x82,0x83,0x83,0x80,0x7d,0x79,0x75,0x73,0x72,0x73,0x76,0x79,0x7c,0x7f,0x80,0x7f,0x7d,0x7a,0x76,0x74,0x73,0x74,0x77,0x7c,0x81,0x87,0x8b,0x8d,0x8e,0x8c,0x89,0x85,0x81,0x7f,0x7e,0x7f,0x81,0x85,0x88,0x8b,0x8c,0x8b,0x88,0x83,0x7f,0x7a,0x77,0x76,0x77,0x7a,0x7e,0x83,0x87,0x8a,0x8b,0x8b,0x88,0x85,0x82,0x7f,0x7e,0x7f,0x81,0x84,0x87,0x89,0x8a,0x89,0x86,0x81,0x7b,0x75,0x6f,0x6c,0x6b,0x6c,0x6f,0x73,0x77,0x7b,0x7d,0x7e,0x7d,0x7a,0x78,0x76,0x75,0x76,0x79,0x7d,0x81,0x86,0x89,0x8a,0x89,0x86,0x81,0x7c,0x78,0x75,0x74,0x76,0x79,0x7e,0x83,0x87,0x89,0x89,0x88,0x84,0x81,0x7d,0x7b,0x7b,0x7d,0x81,0x86,0x8a,0x8e,0x90,0x8f,0x8d,0x88,0x83,0x7f,0x7b,0x7a,0x7a,0x7d,0x81,0x85,0x89,0x8c,0x8c,0x8a,0x87,0x82,0x7d,0x79,0x77,0x76,0x78,0x7a,0x7e,0x81,0x82,0x82,0x80,0x7d,0x78,0x73,0x6f,0x6c,0x6b,0x6c,0x6f,0x73,0x78,0x7b,0x7e,0x7e,0x7d,0x7b,0x79,0x77,0x75,0x76,0x78,0x7b,0x7f,0x83,0x86,0x88,0x87,0x84,0x80,0x7c,0x77,0x74,0x72,0x73,0x75,0x79,0x7d,0x82,0x85,0x87,0x87,0x86,0x85,0x83,0x82,0x82,0x84,0x86,0x89,0x8d,0x8f,0x90,0x8f,0x8d,0x89,0x84,0x7f,0x7a,0x77,0x75,0x76,0x77,0x79,0x7c,0x7e,0x80,0x80,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7f,0x82,0x84,0x85,0x85,0x83,0x80,0x7c,0x78,0x74,0x71,0x70,0x70,0x71,0x74,0x77,0x79,0x7c,0x7d,0x7d,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7f,0x81,0x84,0x86,0x86,0x85,0x83,0x80,0x7d,0x7b,0x7a,0x7b,0x7d,0x81,0x85,0x89,0x8c,0x8e,0x8e,0x8c,0x8a,0x87,0x84,0x83,0x83,0x84,0x86,0x89,0x8a,0x8b,0x8a,0x87,0x82,0x7d,0x78,0x74,0x73,0x73,0x75,0x7a,0x7f,0x84,0x88,0x8a,0x8a,0x89,0x87,0x84,0x81,0x80,0x80,0x81,0x82,0x84,0x86,0x86,0x84,0x81,0x7d,0x77,0x72,0x6e,0x6b,0x6a,0x6a,0x6d,0x70,0x73,0x76,0x78,0x7a,0x7a,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x82,0x84,0x85,0x86,0x85,0x83,0x81,0x7e,0x7b,0x79,0x78,0x78,0x79,0x7c,0x7e,0x81,0x84,0x86,0x87,0x87,0x87,0x86,0x84,0x83,0x82,0x82,0x83,0x83,0x84,0x85,0x85,0x84,0x83,0x80,0x7d,0x7a,0x78,0x77,0x77,0x78,0x7b,0x7e,0x82,0x85,0x87,0x87,0x87,0x85,0x82,0x80,0x7d,0x7c,0x7b,0x7b,0x7c,0x7c,0x7c,0x7b,0x79,0x76,0x72,0x6e,0x6a,0x68,0x67,0x69,0x6b,0x70,0x75,0x79,0x7d,0x80,0x82,0x82,0x81,0x80,0x7f,0x7f,0x80,0x82,0x84,0x87,0x88,0x89,0x88,0x86,0x82,0x7e,0x7b,0x77,0x76,0x76,0x77,0x7a,0x7e,0x82,0x86,0x88,0x8a,0x8a,0x89,0x88,0x87,0x86,0x86,0x87,0x88,0x8a,0x8b,0x8b,0x8a,0x88,0x85,0x81,0x7d,0x79,0x76,0x75,0x76,0x77,0x7a,0x7d,0x7f,0x81,0x81,0x81,0x80,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x80,0x81,0x80,0x7e,0x7b,0x78,0x75,0x74,0x73,0x74,0x76,0x79,0x7c,0x7f,0x82,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x80,0x7e,0x7b,0x79,0x77,0x76,0x77,0x79,0x7d,0x81,0x85,0x89,0x8c,0x8e,0x8e,0x8d,0x8c,0x8a,0x88,0x86,0x85,0x85,0x85,0x85,0x84,0x83,0x81,0x7e,0x7a,0x76,0x72,0x6e,0x6d,0x6d,0x6f,0x72,0x76,0x7b,0x7f,0x83,0x85,0x85,0x85,0x83,0x82,0x81,0x81,0x81,0x83,0x84,0x86,0x86,0x85,0x83,0x7f,0x7b,0x76,0x71,0x6e,0x6d,0x6d,0x6f,0x72,0x76,0x7a,0x7d,0x7f,0x7f,0x7e,0x7d,0x7b,0x7a,0x7a,0x7c,0x7e,0x81,0x85,0x87,0x88,0x88,0x86,0x83,0x7f,0x7c,0x7a,0x79,0x7a,0x7c,0x7f,0x83,0x87,0x89,0x8a,0x8a,0x88,0x86,0x83,0x80,0x7f,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x7f,0x7c,0x79,0x76,0x74,0x74,0x75,0x77,0x7b,0x80,0x84,0x87,0x8a,0x8b,0x8a,0x89,0x86,0x84,0x82,0x80,0x80,0x7f,0x80,0x80,0x7f,0x7e,0x7c,0x79,0x76,0x72,0x6f,0x6d,0x6d,0x6e,0x70,0x74,0x78,0x7d,0x81,0x85,0x87,0x88,0x88,0x88,0x87,0x86,0x86,0x87,0x87,0x88,0x89,0x88,0x87,0x85,0x82,0x7e,0x7a,0x77,0x75,0x74,0x75,0x77,0x7a,0x7e,0x81,0x84,0x86,0x86,0x86,0x85,0x84,0x83,0x83,0x83,0x85,0x87,0x88,0x89,0x8a,0x88,0x86,0x83,0x7f,0x7b,0x78,0x76,0x76,0x77,0x79,0x7c,0x7e,0x81,0x82,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x78,0x78,0x7a,0x7b,0x7d,0x7e,0x7e,0x7d,0x7b,0x79,0x77,0x75,0x74,0x75,0x77,0x7a,0x7e,0x81,0x85,0x87,0x88,0x88,0x87,0x84,0x82,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7e,0x7d,0x7b,0x79,0x76,0x74,0x73,0x73,0x75,0x78,0x7c,0x81,0x85,0x89,0x8c,0x8d,0x8d,0x8c,0x8a,0x89,0x87,0x86,0x85,0x85,0x85,0x85,0x84,0x82,0x7f,0x7c,0x78,0x74,0x71,0x6e,0x6e,0x6f,0x71,0x74,0x78,0x7b,0x7e,0x80,0x81,0x82,0x81,0x81,0x80,0x81,0x81,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x80,0x7d,0x7a,0x78,0x76,0x76,0x77,0x79,0x7c,0x7f,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x80,0x7f,0x80,0x81,0x83,0x84,0x85,0x86,0x86,0x84,0x83,0x81,0x7f,0x7e,0x7e,0x7f,0x81,0x84,0x87,0x8a,0x8b,0x8c,0x8b,0x89,0x86,0x83,0x80,0x7e,0x7c,0x7c,0x7b,0x7c,0x7c,0x7b,0x7a,0x79,0x77,0x75,0x73,0x72,0x72,0x74,0x77,0x7c,0x80,0x85,0x89,0x8b,0x8d,0x8d,0x8c,0x8a,0x88,0x86,0x85,0x84,0x84,0x84,0x83,0x82,0x81,0x7e,0x7b,0x78,0x75,0x72,0x71,0x71,0x73,0x75,0x79,0x7d,0x81,0x85,0x87,0x89,0x89,0x88,0x88,0x87,0x87,0x87,0x87,0x88,0x89,0x89,0x88,0x87,0x84,0x81,0x7d,0x7a,0x77,0x75,0x75,0x76,0x77,0x7a,0x7d,0x7f,0x80,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7e,0x80,0x83,0x86,0x88,0x89,0x8a,0x89,0x87,0x85,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x79,0x78,0x78,0x78,0x7a,0x7d,0x80,0x84,0x87,0x8a,0x8d,0x8d,0x8d,0x8b,0x89,0x87,0x84,0x82,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x78,0x75,0x73,0x71,0x6f,0x6f,0x70,0x72,0x75,0x79,0x7d,0x82,0x85,0x88,0x8a,0x8b,0x8b,0x8a,0x8a,0x89,0x89,0x89,0x89,0x89,0x89,0x88,0x86,0x84,0x81,0x7e,0x7b,0x79,0x77,0x77,0x77,0x79,0x7c,0x7e,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x82,0x81,0x82,0x82,0x84,0x85,0x85,0x86,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x83,0x82,0x81,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x77,0x78,0x79,0x7a,0x7b,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7d,0x80,0x83,0x87,0x8a,0x8d,0x8f,0x8f,0x8f,0x8d,0x8b,0x88,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7a,0x78,0x76,0x75,0x74,0x74,0x75,0x77,0x7a,0x7e,0x83,0x87,0x8a,0x8d,0x8e,0x8e,0x8e,0x8c,0x8b,0x89,0x88,0x87,0x86,0x85,0x84,0x82,0x80,0x7d,0x7a,0x77,0x74,0x72,0x70,0x70,0x71,0x73,0x75,0x78,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x80,0x82,0x83,0x85,0x85,0x85,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x83,0x83,0x83,0x83,0x83,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x8f,0x8e,0x8d,0x8b,0x88,0x84,0x81,0x7e,0x7b,0x7a,0x78,0x77,0x76,0x76,0x75,0x74,0x73,0x72,0x72,0x73,0x74,0x77,0x7a,0x7e,0x82,0x86,0x89,0x8c,0x8d,0x8e,0x8d,0x8c,0x8a,0x88,0x86,0x85,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7a,0x78,0x77,0x75,0x75,0x76,0x77,0x7a,0x7d,0x81,0x84,0x87,0x89,0x8b,0x8c,0x8c,0x8c,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8a,0x89,0x87,0x84,0x82,0x7f,0x7d,0x7c,0x7b,0x7c,0x7c,0x7d,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x81,0x82,0x84,0x86,0x87,0x88,0x88,0x87,0x85,0x83,0x80,0x7d,0x7b,0x79,0x78,0x78,0x78,0x78,0x78,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x82,0x86,0x89,0x8d,0x90,0x92,0x93,0x93,0x92,0x90,0x8d,0x8a,0x88,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7a,0x78,0x76,0x74,0x73,0x72,0x73,0x75,0x77,0x7a,0x7e,0x82,0x85,0x87,0x89,0x8a,0x8a,0x89,0x89,0x88,0x87,0x87,0x87,0x86,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x77,0x78,0x7a,0x7b,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x86,0x87,0x88,0x89,0x89,0x89,0x88,0x86,0x83,0x81,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7a,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x85,0x87,0x8a,0x8d,0x8f,0x90,0x90,0x8f,0x8d,0x8b,0x88,0x84,0x81,0x7e,0x7b,0x79,0x77,0x75,0x74,0x72,0x71,0x70,0x70,0x6f,0x70,0x71,0x74,0x76,0x7a,0x7e,0x82,0x85,0x88,0x8a,0x8b,0x8b,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x81,0x80,0x7e,0x7c,0x7b,0x79,0x78,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x85,0x86,0x86,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x78,0x77,0x75,0x74,0x74,0x75,0x76,0x78,0x79,0x7a,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x86,0x88,0x8a,0x8d,0x8e,0x8f,0x8f,0x8e,0x8c,0x89,0x86,0x83,0x80,0x7d,0x7b,0x79,0x78,0x77,0x77,0x76,0x76,0x77,0x77,0x78,0x79,0x7b,0x7e,0x80,0x83,0x87,0x8a,0x8d,0x90,0x92,0x92,0x92,0x91,0x8f,0x8d,0x8b,0x88,0x86,0x84,0x82,0x80,0x7f,0x7d,0x7b,0x7a,0x78,0x76,0x75,0x75,0x75,0x77,0x79,0x7b,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x85,0x85,0x86,0x86,0x85,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x82,0x82,0x83,0x82,0x81,0x7f,0x7d,0x7a,0x78,0x77,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x85,0x87,0x8a,0x8d,0x90,0x91,0x92,0x91,0x8f,0x8c,0x88,0x83,0x7e,0x7b,0x78,0x76,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7b,0x7a,0x7a,0x79,0x79,0x7a,0x7d,0x80,0x84,0x88,0x8c,0x8f,0x91,0x91,0x90,0x8e,0x8a,0x86,0x83,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7c,0x7a,0x78,0x76,0x73,0x70,0x6f,0x6f,0x70,0x73,0x77,0x7b,0x7f,0x83,0x85,0x86,0x87,0x87,0x86,0x85,0x85,0x86,0x87,0x88,0x8a,0x8b,0x8b,0x8a,0x88,0x85,0x82,0x7f,0x7d,0x7c,0x7c,0x7c,0x7e,0x80,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x85,0x86,0x85,0x85,0x84,0x84,0x84,0x84,0x85,0x86,0x87,0x88,0x88,0x87,0x85,0x82,0x7f,0x7c,0x78,0x75,0x73,0x72,0x72,0x73,0x74,0x76,0x77,0x78,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x83,0x86,0x8a,0x8d,0x90,0x91,0x90,0x8e,0x8c,0x88,0x84,0x81,0x7e,0x7c,0x7a,0x7a,0x79,0x79,0x78,0x78,0x77,0x76,0x75,0x74,0x75,0x76,0x78,0x7b,0x7f,0x82,0x85,0x87,0x89,0x89,0x89,0x89,0x88,0x87,0x87,0x86,0x85,0x85,0x83,0x82,0x80,0x7e,0x7c,0x79,0x77,0x76,0x76,0x76,0x77,0x78,0x7a,0x7b,0x7c,0x7c,0x7c,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x84,0x84,0x84,0x84,0x83,0x83,0x83,0x83,0x84,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x74,0x74,0x75,0x77,0x78,0x7a,0x7c,0x7e,0x7f,0x81,0x82,0x84,0x85,0x88,0x8a,0x8c,0x8e,0x90,0x91,0x91,0x90,0x8d,0x8a,0x87,0x83,0x80,0x7d,0x7b,0x79,0x78,0x78,0x78,0x78,0x78,0x78,0x78,0x77,0x77,0x78,0x7a,0x7c,0x7f,0x82,0x86,0x89,0x8c,0x8d,0x8d,0x8d,0x8b,0x89,0x87,0x85,0x83,0x82,0x80,0x80,0x7f,0x7e,0x7c,0x7b,0x79,0x78,0x76,0x75,0x75,0x76,0x77,0x79,0x7b,0x7c,0x7e,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x84,0x85,0x85,0x86,0x86,0x86,0x86,0x85,0x84,0x83,0x82,0x82,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7a,0x78,0x77,0x76,0x76,0x77,0x78,0x7a,0x7c,0x7e,0x81,0x82,0x84,0x85,0x86,0x86,0x87,0x88,0x89,0x8a,0x8a,0x8b,0x8a,0x89,0x86,0x83,0x80,0x7c,0x78,0x75,0x73,0x72,0x73,0x73,0x74,0x76,0x77,0x77,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x82,0x86,0x89,0x8c,0x8e,0x8f,0x8f,0x8e,0x8c,0x89,0x86,0x84,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x78,0x76,0x75,0x74,0x73,0x73,0x75,0x76,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x84,0x85,0x85,0x86,0x86,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x84,0x85,0x85,0x85,0x86,0x86,0x87,0x87,0x88,0x89,0x89,0x89,0x88,0x86,0x83,0x80,0x7c,0x79,0x76,0x74,0x73,0x72,0x72,0x72,0x73,0x74,0x74,0x75,0x76,0x78,0x79,0x7b,0x7e,0x81,0x84,0x87,0x8a,0x8c,0x8e,0x8e,0x8e,0x8d,0x8c,0x8a,0x87,0x85,0x83,0x80,0x7e,0x7d,0x7b,0x7a,0x79,0x78,0x78,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7d,0x7f,0x82,0x85,0x88,0x8a,0x8c,0x8c,0x8c,0x8b,0x89,0x87,0x85,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7c,0x79,0x77,0x75,0x74,0x74,0x74,0x75,0x76,0x77,0x77,0x77,0x76,0x75,0x74,0x74,0x74,0x75,0x77,0x7a,0x7d,0x81,0x83,0x85,0x86,0x85,0x85,0x84,0x83,0x83,0x83,0x84,0x85,0x86,0x87,0x86,0x85,0x83,0x80,0x7d,0x7a,0x78,0x77,0x76,0x77,0x78,0x7a,0x7c,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x85,0x87,0x8a,0x8d,0x8f,0x91,0x91,0x90,0x8f,0x8d,0x8a,0x87,0x84,0x81,0x7e,0x7b,0x79,0x77,0x76,0x74,0x73,0x72,0x71,0x71,0x71,0x72,0x73,0x75,0x77,0x7a,0x7d,0x80,0x82,0x85,0x86,0x87,0x87,0x86,0x84,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7b,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7e,0x80,0x82,0x84,0x84,0x84,0x83,0x81,0x81,0x80,0x81,0x83,0x86,0x89,0x8c,0x8f,0x90,0x90,0x8e,0x8b,0x88,0x85,0x83,0x81,0x81,0x82,0x84,0x85,0x86,0x85,0x83,0x80,0x7c,0x77,0x73,0x71,0x6f,0x70,0x71,0x74,0x78,0x7b,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7d,0x7e,0x80,0x84,0x87,0x89,0x8b,0x8a,0x88,0x84,0x7f,0x7a,0x75,0x71,0x6e,0x6d,0x6d,0x6e,0x6f,0x71,0x72,0x72,0x72,0x72,0x72,0x73,0x75,0x79,0x7d,0x82,0x86,0x8a,0x8d,0x8e,0x8f,0x8e,0x8d,0x8c,0x8b,0x8a,0x8a,0x8a,0x89,0x89,0x88,0x86,0x84,0x81,0x7f,0x7e,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x86,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7b,0x79,0x77,0x75,0x72,0x70,0x6f,0x6d,0x6c,0x6c,0x6b,0x6b,0x6c,0x6d,0x6f,0x71,0x74,0x77,0x7b,0x7e,0x82,0x85,0x89,0x8c,0x8e,0x90,0x91,0x92,0x91,0x90,0x8e,0x8b,0x87,0x84,0x80,0x7d,0x7a,0x78,0x77,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x86,0x87,0x87,0x87,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x78,0x78,0x77,0x77,0x78,0x79,0x7a,0x7b,0x7b,0x7b,0x7b,0x7a,0x79,0x78,0x78,0x78,0x79,0x7b,0x7e,0x81,0x84,0x87,0x8a,0x8c,0x8d,0x8c,0x8b,0x89,0x87,0x85,0x82,0x80,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x78,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x86,0x88,0x8a,0x8b,0x8d,0x8e,0x8e,0x8e,0x8e,0x8c,0x8a,0x88,0x85,0x81,0x7e,0x7b,0x78,0x76,0x74,0x73,0x73,0x73,0x73,0x74,0x75,0x76,0x77,0x79,0x7b,0x7d,0x7e,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x79,0x78,0x76,0x75,0x75,0x76,0x76,0x77,0x78,0x78,0x78,0x78,0x77,0x77,0x76,0x77,0x78,0x7a,0x7d,0x80,0x82,0x85,0x87,0x88,0x89,0x89,0x89,0x8a,0x8a,0x8b,0x8c,0x8c,0x8c,0x8c,0x8a,0x87,0x83,0x7f,0x7b,0x77,0x74,0x72,0x71,0x71,0x72,0x73,0x74,0x75,0x77,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x83,0x86,0x88,0x8a,0x8c,0x8c,0x8c,0x8a,0x88,0x85,0x82,0x7f,0x7c,0x7a,0x77,0x76,0x74,0x72,0x71,0x70,0x6f,0x6e,0x6e,0x6f,0x71,0x73,0x76,0x79,0x7d,0x80,0x83,0x86,0x88,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8b,0x89,0x87,0x85,0x83,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x76,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x82,0x80,0x7d,0x7a,0x77,0x73,0x70,0x6e,0x6d,0x6d,0x6e,0x70,0x73,0x76,0x78,0x7b,0x7d,0x7e,0x80,0x81,0x83,0x85,0x88,0x8b,0x8e,0x90,0x92,0x92,0x92,0x90,0x8c,0x88,0x84,0x80,0x7c,0x79,0x77,0x76,0x76,0x76,0x77,0x77,0x77,0x76,0x76,0x76,0x77,0x78,0x7a,0x7d,0x81,0x84,0x87,0x8a,0x8b,0x8b,0x8a,0x88,0x86,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x79,0x77,0x75,0x73,0x73,0x73,0x74,0x76,0x79,0x7b,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7c,0x7d,0x80,0x82,0x84,0x86,0x88,0x88,0x88,0x88,0x87,0x86,0x85,0x84,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7e,0x7b,0x78,0x75,0x73,0x72,0x72,0x72,0x74,0x76,0x79,0x7c,0x7f,0x81,0x83,0x85,0x86,0x87,0x89,0x8a,0x8c,0x8d,0x8f,0x8f,0x8f,0x8e,0x8b,0x88,0x84,0x7f,0x7a,0x75,0x72,0x6f,0x6e,0x6e,0x6f,0x70,0x72,0x73,0x74,0x76,0x76,0x78,0x79,0x7b,0x7e,0x81,0x85,0x88,0x8b,0x8d,0x8f,0x8e,0x8d,0x8b,0x88,0x85,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x79,0x77,0x76,0x75,0x76,0x77,0x79,0x7b,0x7e,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x82,0x85,0x87,0x88,0x88,0x88,0x87,0x85,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7a,0x77,0x75,0x72,0x71,0x70,0x70,0x72,0x74,0x77,0x7a,0x7d,0x80,0x82,0x84,0x85,0x86,0x87,0x87,0x88,0x89,0x8b,0x8c,0x8c,0x8c,0x8a,0x88,0x85,0x81,0x7c,0x78,0x74,0x71,0x70,0x6f,0x70,0x71,0x73,0x74,0x76,0x78,0x79,0x7b,0x7c,0x7d,0x7f,0x82,0x85,0x88,0x8a,0x8d,0x8e,0x8f,0x8e,0x8c,0x8a,0x87,0x84,0x81,0x7f,0x7d,0x7c,0x7c,0x7c,0x7b,0x7b,0x7a,0x79,0x78,0x78,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x81,0x83,0x84,0x85,0x85,0x84,0x82,0x81,0x80,0x80,0x80,0x81,0x82,0x84,0x85,0x86,0x86,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7c,0x7b,0x7c,0x7c,0x7d,0x7d,0x7c,0x7b,0x7a,0x78,0x77,0x75,0x75,0x76,0x77,0x7a,0x7d,0x80,0x84,0x87,0x89,0x8b,0x8c,0x8c,0x8c,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8a,0x88,0x86,0x82,0x7e,0x79,0x75,0x72,0x70,0x6f,0x6f,0x71,0x73,0x76,0x79,0x7b,0x7d,0x7f,0x80,0x81,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x8e,0x8d,0x8b,0x88,0x84,0x80,0x7c,0x78,0x76,0x74,0x73,0x74,0x74,0x75,0x76,0x76,0x76,0x76,0x76,0x76,0x77,0x78,0x7a,0x7d,0x80,0x83,0x85,0x87,0x88,0x88,0x87,0x85,0x83,0x82,0x81,0x81,0x82,0x82,0x84,0x85,0x85,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7a,0x7b,0x7b,0x7a,0x79,0x78,0x76,0x76,0x76,0x77,0x79,0x7c,0x7f,0x83,0x86,0x89,0x8b,0x8b,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x85,0x84,0x83,0x81,0x7f,0x7c,0x78,0x74,0x71,0x6e,0x6d,0x6d,0x6f,0x72,0x75,0x79,0x7d,0x80,0x82,0x84,0x85,0x86,0x87,0x88,0x8a,0x8c,0x8d,0x8f,0x90,0x8f,0x8e,0x8c,0x88,0x84,0x7f,0x7b,0x77,0x74,0x73,0x73,0x73,0x74,0x75,0x76,0x77,0x77,0x77,0x77,0x78,0x79,0x7a,0x7d,0x80,0x83,0x86,0x88,0x89,0x8a,0x8a,0x88,0x86,0x84,0x83,0x81,0x81,0x81,0x82,0x82,0x83,0x84,0x83,0x82,0x81,0x7f,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7a,0x7b,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x7b,0x7b,0x7d,0x80,0x83,0x86,0x89,0x8b,0x8c,0x8c,0x8b,0x8a,0x88,0x86,0x84,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7a,0x77,0x74,0x71,0x6f,0x6d,0x6d,0x6e,0x70,0x73,0x77,0x7c,0x80,0x83,0x86,0x88,0x89,0x8a,0x8a,0x8a,0x8b,0x8b,0x8c,0x8d,0x8d,0x8c,0x8a,0x87,0x84,0x7f,0x7b,0x77,0x73,0x71,0x70,0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x88,0x8a,0x8c,0x8d,0x8d,0x8b,0x89,0x86,0x83,0x81,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7e,0x7d,0x7b,0x79,0x77,0x76,0x76,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7f,0x81,0x84,0x87,0x89,0x8b,0x8b,0x8b,0x89,0x87,0x84,0x82,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x79,0x78,0x76,0x74,0x72,0x71,0x71,0x73,0x76,0x7a,0x7e,0x83,0x88,0x8c,0x8e,0x90,0x91,0x90,0x90,0x8f,0x8e,0x8e,0x8d,0x8d,0x8c,0x8b,0x89,0x86,0x82,0x7d,0x79,0x75,0x72,0x70,0x6f,0x70,0x72,0x75,0x78,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x82,0x83,0x84,0x86,0x88,0x8a,0x8b,0x8b,0x8a,0x89,0x86,0x82,0x7f,0x7b,0x78,0x77,0x76,0x76,0x77,0x78,0x79,0x7a,0x7a,0x79,0x78,0x77,0x76,0x76,0x77,0x78,0x7a,0x7d,0x7f,0x82,0x83,0x85,0x85,0x84,0x84,0x83,0x83,0x83,0x84,0x86,0x89,0x8b,0x8d,0x8e,0x8e,0x8d,0x8b,0x88,0x85,0x82,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7a,0x79,0x78,0x77,0x75,0x73,0x73,0x73,0x75,0x77,0x7b,0x7f,0x83,0x87,0x8a,0x8c,0x8c,0x8c,0x8b,0x89,0x87,0x85,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7a,0x77,0x73,0x70,0x6d,0x6b,0x6a,0x6b,0x6d,0x71,0x75,0x79,0x7d,0x80,0x83,0x85,0x86,0x87,0x88,0x88,0x8a,0x8b,0x8d,0x8f,0x90,0x90,0x8f,0x8d,0x89,0x86,0x82,0x7e,0x7b,0x79,0x79,0x79,0x7a,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x82,0x84,0x86,0x88,0x88,0x87,0x86,0x84,0x82,0x81,0x80,0x81,0x82,0x83,0x85,0x86,0x86,0x86,0x84,0x82,0x7f,0x7c,0x79,0x77,0x75,0x75,0x75,0x76,0x77,0x78,0x78,0x78,0x78,0x77,0x76,0x76,0x77,0x79,0x7c,0x80,0x84,0x89,0x8c,0x8f,0x91,0x91,0x90,0x8e,0x8b,0x89,0x86,0x85,0x83,0x82,0x81,0x7f,0x7e,0x7b,0x79,0x76,0x73,0x71,0x6f,0x6f,0x71,0x74,0x78,0x7c,0x81,0x85,0x88,0x8a,0x8b,0x8c,0x8b,0x8b,0x8b,0x8b,0x8c,0x8c,0x8d,0x8d,0x8c,0x8a,0x87,0x84,0x7f,0x7b,0x77,0x73,0x72,0x71,0x72,0x74,0x76,0x78,0x7a,0x7b,0x7c,0x7b,0x7b,0x7a,0x7a,0x7b,0x7c,0x7f,0x81,0x84,0x86,0x87,0x87,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x77,0x77,0x78,0x7a,0x7b,0x7d,0x7d,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x83,0x86,0x8a,0x8e,0x91,0x93,0x93,0x92,0x90,0x8d,0x8a,0x87,0x84,0x81,0x7f,0x7e,0x7d,0x7c,0x7a,0x78,0x75,0x72,0x70,0x6e,0x6d,0x6e,0x70,0x73,0x77,0x7c,0x81,0x85,0x88,0x8b,0x8c,0x8c,0x8b,0x8b,0x8a,0x8a,0x89,0x89,0x89,0x88,0x87,0x84,0x81,0x7e,0x7a,0x76,0x73,0x71,0x70,0x71,0x73,0x75,0x78,0x7b,0x7e,0x7f,0x81,0x81,0x82,0x82,0x83,0x84,0x86,0x88,0x8a,0x8c,0x8d,0x8e,0x8d,0x8b,0x89,0x87,0x84,0x82,0x80,0x80,0x80,0x81,0x82,0x83,0x84,0x83,0x82,0x80,0x7d,0x7b,0x78,0x77,0x76,0x76,0x77,0x79,0x7b,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7f,0x80,0x82,0x85,0x88,0x8b,0x8e,0x8f,0x8f,0x8d,0x8a,0x87,0x83,0x7f,0x7c,0x7a,0x79,0x78,0x77,0x77,0x76,0x75,0x73,0x72,0x71,0x71,0x72,0x74,0x77,0x7c,0x81,0x86,0x8b,0x8e,0x90,0x91,0x90,0x8f,0x8d,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x82,0x7f,0x7b,0x77,0x74,0x72,0x71,0x71,0x72,0x75,0x78,0x7a,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x83,0x86,0x89,0x8d,0x8f,0x90,0x91,0x8f,0x8d,0x89,0x86,0x82,0x80,0x7e,0x7e,0x7e,0x7e,0x7f,0x7e,0x7d,0x7c,0x7a,0x77,0x75,0x74,0x73,0x74,0x75,0x77,0x78,0x7a,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x82,0x84,0x87,0x89,0x8a,0x8a,0x8a,0x8a,0x89,0x88,0x87,0x87,0x86,0x85,0x84,0x82,0x7f,0x7d,0x79,0x76,0x74,0x72,0x71,0x71,0x72,0x74,0x77,0x7a,0x7e,0x81,0x85,0x88,0x8b,0x8d,0x8f,0x91,0x92,0x93,0x93,0x92,0x90,0x8e,0x8b,0x88,0x84,0x81,0x7e,0x7a,0x78,0x75,0x73,0x71,0x6f,0x6e,0x6d,0x6c,0x6d,0x6e,0x70,0x73,0x76,0x7a,0x7e,0x81,0x85,0x87,0x89,0x8a,0x8b,0x8a,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7a,0x78,0x77,0x76,0x75,0x75,0x76,0x78,0x79,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x86,0x85,0x84,0x84,0x83,0x82,0x82,0x82,0x83,0x83,0x83,0x82,0x80,0x7e,0x7a,0x77,0x74,0x71,0x6e,0x6d,0x6d,0x6e,0x6f,0x71,0x73,0x75,0x77,0x7a,0x7c,0x7e,0x81,0x83,0x87,0x8a,0x8d,0x8f,0x91,0x92,0x91,0x90,0x8e,0x8b,0x87,0x83,0x80,0x7c,0x79,0x77,0x74,0x73,0x71,0x70,0x70,0x70,0x71,0x72,0x74,0x76,0x79,0x7c,0x7f,0x82,0x85,0x88,0x8a,0x8c,0x8d,0x8e,0x8e,0x8e,0x8c,0x8b,0x89,0x87,0x85,0x84,0x82,0x80,0x7f,0x7d,0x7c,0x7a,0x78,0x77,0x76,0x75,0x75,0x76,0x77,0x79,0x7b,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x81,0x82,0x83,0x85,0x87,0x89,0x8a,0x8b,0x8b,0x89,0x88,0x85,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7b,0x78,0x75,0x72,0x70,0x6e,0x6e,0x6f,0x70,0x73,0x76,0x7a,0x7d,0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x8f,0x91,0x91,0x91,0x8f,0x8d,0x89,0x85,0x80,0x7c,0x78,0x74,0x71,0x6f,0x6d,0x6d,0x6c,0x6d,0x6d,0x6e,0x70,0x71,0x74,0x76,0x79,0x7d,0x80,0x84,0x87,0x8b,0x8d,0x8f,0x8f,0x8f,0x8d,0x8b,0x89,0x86,0x83,0x81,0x7e,0x7d,0x7b,0x7a,0x79,0x77,0x76,0x74,0x72,0x71,0x70,0x71,0x72,0x74,0x77,0x7a,0x7e,0x81,0x83,0x84,0x85,0x85,0x84,0x84,0x84,0x85,0x87,0x88,0x8a,0x8c,0x8d,0x8d,0x8b,0x89,0x87,0x84,0x81,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7d,0x7a,0x77,0x73,0x70,0x6d,0x6c,0x6d,0x6e,0x71,0x75,0x79,0x7c,0x7f,0x81,0x82,0x83,0x84,0x84,0x85,0x87,0x89,0x8a,0x8c,0x8c,0x8c,0x8a,0x87,0x83,0x7f,0x7b,0x77,0x74,0x72,0x71,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x7a,0x7d,0x80,0x84,0x89,0x8d,0x91,0x93,0x95,0x95,0x93,0x91,0x8e,0x8a,0x86,0x83,0x81,0x7f,0x7d,0x7c,0x7a,0x79,0x77,0x75,0x72,0x70,0x6e,0x6e,0x6e,0x6f,0x71,0x74,0x78,0x7b,0x7e,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x81,0x83,0x85,0x87,0x89,0x8a,0x8a,0x88,0x86,0x84,0x81,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7c,0x7a,0x78,0x75,0x74,0x74,0x75,0x77,0x7b,0x7f,0x83,0x87,0x8a,0x8c,0x8d,0x8d,0x8e,0x8e,0x8e,0x8e,0x8f,0x90,0x90,0x8f,0x8e,0x8b,0x87,0x82,0x7c,0x77,0x72,0x6d,0x6a,0x68,0x67,0x68,0x69,0x6a,0x6b,0x6d,0x6e,0x6f,0x71,0x73,0x76,0x7a,0x7e,0x82,0x87,0x8b,0x8e,0x90,0x91,0x90,0x8e,0x8c,0x88,0x85,0x81,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x77,0x75,0x74,0x73,0x72,0x72,0x73,0x75,0x77,0x7b,0x7f,0x83,0x87,0x8b,0x8d,0x8e,0x8f,0x8e,0x8e,0x8d,0x8d,0x8d,0x8d,0x8e,0x8f,0x8f,0x8e,0x8d,0x8a,0x86,0x82,0x7e,0x7a,0x76,0x74,0x73,0x72,0x72,0x73,0x74,0x74,0x73,0x72,0x71,0x70,0x6f,0x6f,0x70,0x73,0x76,0x7b,0x80,0x85,0x8a,0x8d,0x90,0x91,0x90,0x8f,0x8d,0x8b,0x88,0x86,0x84,0x81,0x7f,0x7d,0x7b,0x78,0x75,0x72,0x6f,0x6d,0x6b,0x6a,0x6a,0x6c,0x6f,0x72,0x77,0x7c,0x81,0x85,0x8a,0x8d,0x90,0x91,0x93,0x94,0x94,0x94,0x94,0x94,0x93,0x91,0x8f,0x8b,0x87,0x83,0x7e,0x79,0x75,0x72,0x70,0x70,0x70,0x71,0x73,0x74,0x75,0x76,0x76,0x76,0x76,0x77,0x77,0x79,0x7c,0x7e,0x82,0x84,0x87,0x88,0x89,0x89,0x88,0x87,0x86,0x85,0x84,0x84,0x84,0x83,0x82,0x80,0x7d,0x7a,0x75,0x70,0x6c,0x68,0x66,0x64,0x65,0x66,0x68,0x6b,0x6e,0x70,0x73,0x75,0x78,0x7b,0x7f,0x84,0x89,0x8e,0x94,0x99,0x9c,0x9e,0x9e,0x9c,0x99,0x95,0x91,0x8d,0x89,0x85,0x83,0x81,0x7f,0x7c,0x7a,0x77,0x74,0x72,0x70,0x6f,0x6f,0x71,0x74,0x78,0x7d,0x82,0x86,0x8a,0x8c,0x8d,0x8d,0x8d,0x8c,0x8c,0x8c,0x8d,0x8d,0x8e,0x8e,0x8d,0x8c,0x89,0x85,0x80,0x7c,0x77,0x73,0x70,0x6e,0x6d,0x6d,0x6d,0x6e,0x6e,0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x72,0x75,0x79,0x7d,0x82,0x86,0x8a,0x8e,0x90,0x91,0x92,0x92,0x91,0x91,0x90,0x8f,0x8e,0x8d,0x8b,0x89,0x86,0x83,0x7f,0x7b,0x77,0x73,0x70,0x6e,0x6e,0x6e,0x70,0x73,0x76,0x7a,0x7d,0x80,0x82,0x84,0x85,0x87,0x88,0x8a,0x8c,0x8e,0x8f,0x91,0x91,0x90,0x8e,0x8b,0x87,0x82,0x7d,0x78,0x75,0x72,0x70,0x6f,0x6e,0x6e,0x6e,0x6d,0x6c,0x6b,0x69,0x69,0x69,0x6a,0x6d,0x71,0x75,0x7b,0x7f,0x83,0x86,0x88,0x88,0x87,0x86,0x85,0x84,0x85,0x86,0x88,0x8a,0x8b,0x8c,0x8b,0x88,0x85,0x80,0x7c,0x78,0x75,0x74,0x74,0x75,0x76,0x78,0x7a,0x7b,0x7a,0x7a,0x79,0x78,0x79,0x7a,0x7d,0x80,0x85,0x8a,0x8f,0x92,0x95,0x95,0x94,0x92,0x90,0x8d,0x8b,0x89,0x88,0x87,0x86,0x84,0x82,0x80,0x7c,0x78,0x73,0x6f,0x6c,0x6a,0x69,0x6a,0x6c,0x70,0x73,0x77,0x7a,0x7d,0x7f,0x81,0x82,0x83,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x8f,0x8e,0x8c,0x89,0x85,0x80,0x7b,0x77,0x74,0x71,0x70,0x6f,0x70,0x71,0x72,0x72,0x73,0x73,0x73,0x73,0x74,0x76,0x78,0x7c,0x80,0x85,0x8a,0x8e,0x91,0x93,0x93,0x93,0x92,0x91,0x8f,0x8e,0x8e,0x8e,0x8e,0x8d,0x8d,0x8b,0x89,0x86,0x81,0x7d,0x78,0x75,0x72,0x70,0x70,0x70,0x72,0x73,0x75,0x76,0x77,0x77,0x77,0x77,0x77,0x79,0x7b,0x7f,0x83,0x87,0x8b,0x8f,0x90,0x91,0x90,0x8e,0x8a,0x87,0x83,0x81,0x7e,0x7d,0x7b,0x7a,0x78,0x76,0x73,0x70,0x6c,0x69,0x66,0x65,0x66,0x68,0x6c,0x72,0x77,0x7d,0x83,0x87,0x8b,0x8d,0x8f,0x90,0x92,0x94,0x96,0x98,0x99,0x9b,0x9b,0x99,0x96,0x91,0x8c,0x85,0x7f,0x79,0x75,0x72,0x70,0x70,0x71,0x72,0x72,0x73,0x73,0x73,0x73,0x73,0x74,0x75,0x78,0x7c,0x80,0x84,0x88,0x8b,0x8d,0x8e,0x8d,0x8b,0x88,0x85,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7a,0x78,0x75,0x72,0x6f,0x6c,0x6a,0x69,0x6a,0x6b,0x6e,0x71,0x74,0x77,0x7a,0x7c,0x7d,0x7f,0x80,0x82,0x84,0x87,0x8b,0x8f,0x93,0x97,0x99,0x9a,0x9a,0x98,0x95,0x91,0x8d,0x89,0x86,0x83,0x81,0x80,0x7e,0x7d,0x7b,0x78,0x76,0x73,0x71,0x6f,0x6f,0x70,0x72,0x76,0x7a,0x80,0x85,0x89,0x8c,0x8f,0x90,0x90,0x90,0x8f,0x8f,0x8e,0x8e,0x8d,0x8d,0x8b,0x88,0x85,0x80,0x7a,0x75,0x6f,0x6a,0x67,0x65,0x64,0x65,0x67,0x6a,0x6d,0x70,0x72,0x74,0x76,0x78,0x7a,0x7d,0x81,0x85,0x89,0x8e,0x92,0x95,0x97,0x98,0x97,0x95,0x93,0x8f,0x8c,0x89,0x87,0x85,0x84,0x83,0x82,0x81,0x7f,0x7c,0x79,0x76,0x74,0x72,0x71,0x72,0x74,0x77,0x7a,0x7e,0x81,0x83,0x85,0x86,0x87,0x87,0x87,0x87,0x88,0x89,0x8b,0x8d,0x8e,0x8f,0x8e,0x8c,0x88,0x84,0x7f,0x7a,0x75,0x72,0x6f,0x6d,0x6c,0x6c,0x6c,0x6c,0x6c,0x6b,0x6a,0x6a,0x6a,0x6b,0x6e,0x71,0x76,0x7c,0x81,0x87,0x8c,0x90,0x93,0x94,0x94,0x93,0x92,0x91,0x90,0x8f,0x8e,0x8d,0x8b,0x89,0x86,0x82,0x7d,0x78,0x73,0x6f,0x6c,0x6b,0x6b,0x6d,0x6f,0x73,0x77,0x7a,0x7e,0x80,0x82,0x84,0x85,0x87,0x89,0x8c,0x8e,0x91,0x94,0x95,0x95,0x94,0x91,0x8d,0x88,0x83,0x7e,0x7a,0x77,0x75,0x74,0x73,0x73,0x73,0x72,0x71,0x70,0x6e,0x6d,0x6d,0x6d,0x6f,0x73,0x77,0x7b,0x80,0x84,0x88,0x8a,0x8b,0x8c,0x8c,0x8b,0x8b,0x8c,0x8c,0x8e,0x8f,0x8f,0x8f,0x8e,0x8c,0x89,0x85,0x80,0x7b,0x78,0x75,0x73,0x72,0x72,0x72,0x73,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x79,0x7c,0x80,0x85,0x8a,0x8f,0x93,0x95,0x96,0x96,0x95,0x92,0x8f,0x8d,0x8a,0x87,0x85,0x83,0x81,0x7f,0x7c,0x78,0x74,0x70,0x6c,0x69,0x67,0x67,0x68,0x6b,0x6f,0x73,0x78,0x7d,0x81,0x84,0x86,0x88,0x89,0x8b,0x8c,0x8e,0x90,0x92,0x94,0x94,0x94,0x92,0x8f,0x8b,0x85,0x80,0x7b,0x76,0x73,0x71,0x71,0x71,0x72,0x72,0x73,0x73,0x72,0x72,0x72,0x73,0x74,0x77,0x7b,0x7f,0x84,0x88,0x8c,0x8f,0x90,0x91,0x90,0x8f,0x8d,0x8c,0x8b,0x8b,0x8c,0x8c,0x8c,0x8c,0x8a,0x87,0x83,0x7f,0x7a,0x76,0x72,0x6f,0x6e,0x6e,0x6f,0x71,0x73,0x74,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7e,0x81,0x86,0x8a,0x8e,0x92,0x95,0x97,0x97,0x96,0x94,0x91,0x8e,0x8b,0x88,0x85,0x82,0x7f,0x7c,0x79,0x75,0x71,0x6e,0x6a,0x68,0x67,0x67,0x69,0x6d,0x71,0x76,0x7b,0x80,0x84,0x88,0x8b,0x8d,0x8e,0x8f,0x91,0x92,0x94,0x95,0x95,0x94,0x92,0x8f,0x8b,0x86,0x80,0x7b,0x75,0x71,0x6e,0x6c,0x6c,0x6c,0x6d,0x6f,0x70,0x71,0x72,0x74,0x75,0x77,0x79,0x7c,0x7f,0x83,0x87,0x8a,0x8d,0x8f,0x91,0x91,0x90,0x8f,0x8d,0x8c,0x8a,0x89,0x88,0x88,0x87,0x87,0x85,0x84,0x81,0x7e,0x7b,0x77,0x73,0x71,0x6f,0x6e,0x6e,0x6f,0x71,0x73,0x75,0x77,0x79,0x7b,0x7c,0x7d,0x7f,0x82,0x85,0x8a,0x8e,0x92,0x96,0x99,0x99,0x99,0x96,0x92,0x8d,0x87,0x82,0x7d,0x79,0x76,0x74,0x72,0x70,0x6e,0x6c,0x69,0x67,0x65,0x65,0x66,0x68,0x6d,0x73,0x7a,0x81,0x88,0x8e,0x92,0x95,0x96,0x96,0x95,0x94,0x93,0x91,0x90,0x90,0x8e,0x8d,0x8a,0x86,0x82,0x7c,0x77,0x72,0x6e,0x6c,0x6a,0x6a,0x6c,0x6e,0x71,0x74,0x76,0x78,0x7a,0x7b,0x7c,0x7e,0x80,0x83,0x86,0x89,0x8d,0x90,0x92,0x93,0x92,0x91,0x8f,0x8c,0x89,0x87,0x85,0x83,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x78,0x74,0x71,0x6e,0x6b,0x6a,0x6b,0x6c,0x6f,0x72,0x76,0x7a,0x7d,0x80,0x83,0x85,0x86,0x88,0x8a,0x8d,0x8f,0x92,0x94,0x96,0x96,0x95,0x93,0x8f,0x8a,0x85,0x7f,0x7a,0x75,0x72,0x6f,0x6e,0x6d,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6e,0x70,0x74,0x79,0x7e,0x85,0x8b,0x90,0x94,0x97,0x99,0x99,0x97,0x95,0x92,0x90,0x8d,0x8b,0x88,0x86,0x84,0x81,0x7e,0x7b,0x77,0x73,0x6f,0x6d,0x6b,0x6b,0x6d,0x6f,0x73,0x77,0x7a,0x7e,0x80,0x82,0x83,0x84,0x84,0x85,0x87,0x88,0x8a,0x8c,0x8e,0x8f,0x8f,0x8e,0x8b,0x88,0x84,0x80,0x7d,0x7a,0x79,0x78,0x78,0x78,0x78,0x78,0x78,0x76,0x74,0x72,0x71,0x6f,0x70,0x71,0x74,0x77,0x7c,0x80,0x85,0x88,0x8b,0x8d,0x8e,0x8e,0x8f,0x8f,0x90,0x92,0x93,0x94,0x95,0x95,0x93,0x90,0x8c,0x86,0x81,0x7b,0x76,0x72,0x6f,0x6e,0x6e,0x6f,0x70,0x71,0x72,0x73,0x73,0x74,0x75,0x77,0x7a,0x7e,0x83,0x88,0x8d,0x92,0x95,0x97,0x97,0x95,0x92,0x8e,0x8a,0x86,0x83,0x80,0x7e,0x7c,0x7a,0x77,0x75,0x72,0x6f,0x6c,0x69,0x68,0x67,0x68,0x6b,0x6f,0x74,0x79,0x7e,0x82,0x86,0x88,0x8a,0x8b,0x8b,0x8c,0x8d,0x8e,0x90,0x92,0x94,0x94,0x94,0x93,0x91,0x8d,0x89,0x85,0x81,0x7e,0x7c,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x78,0x77,0x75,0x74,0x73,0x73,0x74,0x77,0x7b,0x7f,0x83,0x87,0x8a,0x8c,0x8d,0x8d,0x8d,0x8c,0x8b,0x8b,0x8b,0x8c,0x8c,0x8c,0x8b,0x89,0x85,0x81,0x7b,0x75,0x6f,0x6a,0x67,0x66,0x66,0x67,0x6a,0x6d,0x70,0x72,0x75,0x77,0x79,0x7b,0x7e,0x81,0x86,0x8b,0x90,0x95,0x99,0x9b,0x9c,0x9b,0x98,0x94,0x8f,0x8a,0x85,0x81,0x7e,0x7c,0x7a,0x79,0x77,0x75,0x73,0x71,0x6f,0x6d,0x6c,0x6d,0x6e,0x72,0x76,0x7b,0x81,0x85,0x89,0x8c,0x8e,0x8e,0x8e,0x8d,0x8c,0x8c,0x8b,0x8c,0x8c,0x8c,0x8c,0x8b,0x88,0x85,0x81,0x7d,0x79,0x75,0x73,0x71,0x70,0x71,0x72,0x73,0x74,0x75,0x75,0x75,0x74,0x74,0x74,0x75,0x78,0x7b,0x7f,0x84,0x88,0x8c,0x8f,0x90,0x91,0x90,0x8f,0x8d,0x8c,0x8a,0x8a,0x89,0x89,0x88,0x87,0x84,0x81,0x7d,0x78,0x73,0x6f,0x6c,0x6a,0x69,0x6a,0x6d,0x70,0x73,0x77,0x7a,0x7d,0x80,0x82,0x84,0x87,0x8a,0x8d,0x90,0x93,0x96,0x97,0x98,0x97,0x95,0x92,0x8e,0x8a,0x86,0x82,0x7f,0x7b,0x79,0x76,0x74,0x71,0x6f,0x6e,0x6c,0x6b,0x6c,0x6d,0x6f,0x72,0x76,0x7a,0x7e,0x82,0x85,0x88,0x8a,0x8c,0x8d,0x8e,0x8f,0x8f,0x8f,0x8f,0x8e,0x8d,0x8a,0x87,0x84,0x80,0x7d,0x7a,0x77,0x76,0x75,0x75,0x75,0x76,0x77,0x77,0x78,0x78,0x78,0x79,0x79,0x7b,0x7d,0x7f,0x82,0x85,0x87,0x8a,0x8c,0x8d,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8e,0x8d,0x8c,0x8a,0x88,0x86,0x83,0x7f,0x7c,0x78,0x75,0x73,0x71,0x6f,0x6e,0x6e,0x6e,0x6f,0x71,0x73,0x76,0x79,0x7d,0x81,0x85,0x89,0x8d,0x90,0x93,0x94,0x95,0x95,0x95,0x93,0x92,0x8f,0x8d,0x8a,0x87,0x83,0x80,0x7c,0x79,0x76,0x73,0x71,0x70,0x6f,0x6f,0x70,0x71,0x73,0x76,0x79,0x7c,0x7f,0x82,0x85,0x88,0x8b,0x8d,0x90,0x91,0x92,0x93,0x93,0x92,0x90,0x8e,0x8c,0x89,0x86,0x83,0x80,0x7d,0x7a,0x78,0x77,0x75,0x75,0x74,0x74,0x74,0x74,0x75,0x76,0x76,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x84,0x86,0x88,0x8a,0x8b,0x8c,0x8c,0x8c,0x8b,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7a,0x78,0x75,0x73,0x72,0x71,0x70,0x71,0x72,0x74,0x77,0x7a,0x7c,0x7f,0x82,0x84,0x87,0x88,0x8a,0x8c,0x8d,0x8e,0x8f,0x8f,0x8f,0x8e,0x8d,0x8a,0x88,0x84,0x81,0x7d,0x7a,0x77,0x75,0x73,0x72,0x71,0x70,0x6f,0x6f,0x6f,0x70,0x71,0x73,0x76,0x79,0x7d,0x81,0x85,0x89,0x8c,0x8e,0x90,0x90,0x90,0x90,0x8f,0x8e,0x8d,0x8c,0x8b,0x89,0x87,0x84,0x81,0x7d,0x7a,0x76,0x74,0x72,0x71,0x72,0x73,0x74,0x75,0x77,0x79,0x7a,0x7c,0x7d,0x7f,0x81,0x84,0x87,0x8a,0x8c,0x8e,0x8f,0x90,0x8f,0x8e,0x8c,0x8a,0x89,0x88,0x87,0x86,0x86,0x85,0x85,0x83,0x81,0x7e,0x7b,0x78,0x75,0x72,0x71,0x70,0x70,0x71,0x73,0x76,0x78,0x7a,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x87,0x89,0x8b,0x8e,0x8f,0x90,0x90,0x8f,0x8d,0x8a,0x87,0x84,0x80,0x7d,0x7b,0x79,0x77,0x76,0x75,0x75,0x74,0x72,0x72,0x71,0x71,0x72,0x74,0x76,0x7a,0x7f,0x83,0x88,0x8c,0x8f,0x90,0x91,0x91,0x90,0x8f,0x8d,0x8c,0x8b,0x8a,0x89,0x87,0x85,0x83,0x7f,0x7c,0x78,0x74,0x71,0x6f,0x6e,0x6e,0x6f,0x70,0x72,0x74,0x76,0x78,0x7a,0x7b,0x7d,0x7e,0x80,0x82,0x85,0x88,0x8a,0x8c,0x8d,0x8e,0x8d,0x8c,0x8a,0x88,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7c,0x7a,0x78,0x76,0x74,0x72,0x71,0x71,0x72,0x74,0x77,0x7a,0x7d,0x80,0x83,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8d,0x8e,0x8f,0x90,0x8f,0x8e,0x8b,0x88,0x84,0x7f,0x7b,0x77,0x73,0x71,0x70,0x6f,0x6f,0x70,0x70,0x70,0x70,0x71,0x71,0x72,0x74,0x76,0x7a,0x7e,0x83,0x88,0x8d,0x90,0x93,0x94,0x94,0x92,0x90,0x8e,0x8c,0x8a,0x88,0x87,0x85,0x84,0x82,0x7f,0x7c,0x79,0x75,0x72,0x70,0x6e,0x6e,0x6f,0x72,0x74,0x78,0x7b,0x7d,0x80,0x81,0x82,0x83,0x84,0x86,0x87,0x89,0x8b,0x8d,0x8e,0x8e,0x8e,0x8c,0x8a,0x87,0x83,0x7f,0x7c,0x7a,0x78,0x77,0x76,0x76,0x76,0x76,0x75,0x74,0x73,0x72,0x71,0x71,0x72,0x74,0x78,0x7b,0x80,0x84,0x87,0x8a,0x8c,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8e,0x8e,0x8f,0x8f,0x8f,0x8d,0x8a,0x86,0x82,0x7d,0x78,0x74,0x72,0x70,0x6f,0x70,0x71,0x73,0x74,0x75,0x76,0x76,0x76,0x77,0x79,0x7b,0x7e,0x82,0x87,0x8b,0x8e,0x90,0x91,0x90,0x8d,0x8a,0x86,0x83,0x7f,0x7d,0x7b,0x7a,0x79,0x78,0x77,0x75,0x72,0x6f,0x6c,0x6a,0x69,0x69,0x6b,0x6f,0x74,0x79,0x7e,0x82,0x86,0x88,0x89,0x89,0x89,0x8a,0x8b,0x8c,0x8e,0x91,0x93,0x94,0x94,0x93,0x90,0x8c,0x87,0x83,0x7e,0x7b,0x78,0x77,0x76,0x77,0x77,0x78,0x78,0x78,0x77,0x77,0x76,0x76,0x77,0x79,0x7b,0x7e,0x81,0x84,0x86,0x88,0x89,0x89,0x89,0x88,0x87,0x86,0x86,0x85,0x85,0x84,0x83,0x82,0x80,0x7d,0x7a,0x76,0x72,0x6f,0x6c,0x6b,0x6a,0x6a,0x6b,0x6d,0x6f,0x71,0x74,0x76,0x78,0x79,0x7b,0x7d,0x7f,0x82,0x85,0x89,0x8c,0x8f,0x91,0x93,0x93,0x92,0x90,0x8c,0x89,0x85,0x82,0x7f,0x7c,0x7b,0x7a,0x79,0x79,0x78,0x77,0x76,0x75,0x74,0x74,0x75,0x77,0x7a,0x7d,0x81,0x85,0x88,0x8b,0x8c,0x8d,0x8c,0x8c,0x8b,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8a,0x88,0x85,0x80,0x7c,0x77,0x73,0x70,0x6e,0x6e,0x6e,0x6f,0x71,0x72,0x73,0x73,0x73,0x73,0x72,0x73,0x74,0x77,0x7a,0x7e,0x82,0x86,0x88,0x8a,0x8a,0x89,0x88,0x86,0x84,0x83,0x82,0x82,0x82,0x83,0x83,0x82,0x81,0x7f,0x7b,0x78,0x74,0x71,0x6f,0x6e,0x6f,0x71,0x74,0x78,0x7b,0x7e,0x80,0x82,0x82,0x83,0x84,0x85,0x87,0x8a,0x8d,0x90,0x93,0x94,0x95,0x94,0x91,0x8e,0x89,0x84,0x80,0x7c,0x79,0x78,0x77,0x76,0x76,0x76,0x74,0x73,0x71,0x6f,0x6e,0x6e,0x6f,0x72,0x75,0x7a,0x7f,0x84,0x88,0x8a,0x8c,0x8c,0x8b,0x8a,0x88,0x87,0x86,0x86,0x86,0x87,0x87,0x86,0x84,0x82,0x7e,0x7a,0x75,0x71,0x6d,0x6b,0x6b,0x6b,0x6d,0x70,0x73,0x76,0x78,0x79,0x7a,0x7a,0x7b,0x7b,0x7c,0x7f,0x82,0x85,0x89,0x8c,0x8f,0x90,0x90,0x8e,0x8c,0x88,0x85,0x82,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7c,0x79,0x76,0x72,0x6e,0x6c,0x6b,0x6c,0x6f,0x73,0x78,0x7d,0x82,0x86,0x88,0x88,0x88,0x87,0x87,0x86,0x87,0x89,0x8b,0x8e,0x90,0x91,0x90,0x8e,0x8a,0x84,0x7e,0x78,0x72,0x6e,0x6b,0x6a,0x6a,0x6b,0x6c,0x6d,0x6e,0x6e,0x6e,0x6f,0x6f,0x70,0x73,0x76,0x7b,0x80,0x85,0x8a,0x8e,0x90,0x91,0x90,0x8e,0x8c,0x89,0x86,0x84,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7a,0x77,0x74,0x71,0x6f,0x6e,0x6e,0x71,0x74,0x78,0x7d,0x81,0x85,0x87,0x88,0x88,0x88,0x87,0x87,0x88,0x89,0x8b,0x8d,0x8f,0x91,0x92,0x91,0x8f,0x8b,0x87,0x83,0x80,0x7d,0x7b,0x7b,0x7a,0x7b,0x7a,0x79,0x77,0x74,0x71,0x6d,0x6a,0x68,0x68,0x69,0x6c,0x70,0x75,0x7a,0x7e,0x81,0x84,0x85,0x86,0x86,0x87,0x88,0x8a,0x8c,0x8e,0x8f,0x8f,0x8e,0x8b,0x87,0x82,0x7c,0x76,0x71,0x6d,0x6b,0x6b,0x6c,0x6d,0x6f,0x71,0x73,0x75,0x76,0x77,0x79,0x7b,0x7f,0x83,0x88,0x8e,0x93,0x96,0x99,0x99,0x98,0x95,0x91,0x8c,0x87,0x83,0x80,0x7d,0x7c,0x7b,0x7b,0x7a,0x79,0x77,0x74,0x71,0x6e,0x6c,0x6b,0x6b,0x6d,0x70,0x74,0x78,0x7d,0x80,0x82,0x83,0x83,0x82,0x81,0x80,0x80,0x81,0x83,0x85,0x88,0x8a,0x8c,0x8c,0x8a,0x87,0x84,0x7f,0x7b,0x78,0x76,0x75,0x75,0x76,0x76,0x77,0x77,0x75,0x73,0x71,0x6e,0x6c,0x6c,0x6e,0x71,0x76,0x7c,0x82,0x87,0x8c,0x8f,0x90,0x90,0x8f,0x8d,0x8c,0x8b,0x8a,0x8b,0x8b,0x8b,0x8a,0x88,0x84,0x7f,0x79,0x73,0x6e,0x69,0x67,0x66,0x68,0x6b,0x6f,0x74,0x78,0x7b,0x7e,0x7f,0x80,0x81,0x82,0x84,0x87,0x8a,0x8e,0x91,0x94,0x95,0x94,0x91,0x8c,0x87,0x81,0x7c,0x77,0x74,0x73,0x73,0x74,0x75,0x76,0x77,0x76,0x75,0x73,0x72,0x71,0x70,0x72,0x74,0x78,0x7c,0x81,0x84,0x87,0x88,0x88,0x87,0x85,0x82,0x81,0x80,0x80,0x82,0x84,0x86,0x88,0x88,0x88,0x87,0x84,0x81,0x7d,0x7a,0x78,0x77,0x77,0x78,0x79,0x7a,0x7b,0x7b,0x7a,0x78,0x76,0x74,0x73,0x73,0x75,0x78,0x7d,0x82,0x87,0x8b,0x8f,0x90,0x90,0x8f,0x8d,0x8b,0x88,0x87,0x85,0x85,0x84,0x83,0x82,0x7f,0x7c,0x77,0x71,0x6c,0x68,0x65,0x63,0x64,0x67,0x6c,0x71,0x76,0x7b,0x7f,0x82,0x84,0x85,0x86,0x87,0x88,0x8a,0x8d,0x90,0x92,0x94,0x94,0x92,0x8f,0x8a,0x84,0x7e,0x79,0x74,0x72,0x71,0x72,0x74,0x76,0x78,0x79,0x7a,0x79,0x78,0x77,0x76,0x77,0x79,0x7c,0x80,0x84,0x88,0x8b,0x8c,0x8c,0x8b,0x88,0x84,0x81,0x7f,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x86,0x85,0x83,0x7f,0x7b,0x77,0x74,0x72,0x72,0x72,0x74,0x76,0x78,0x7a,0x7a,0x79,0x78,0x76,0x74,0x74,0x75,0x77,0x7b,0x80,0x86,0x8b,0x8f,0x92,0x93,0x92,0x90,0x8d,0x8a,0x88,0x86,0x85,0x84,0x84,0x83,0x82,0x80,0x7d,0x78,0x73,0x6f,0x6b,0x68,0x68,0x6a,0x6e,0x73,0x78,0x7e,0x83,0x86,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8c,0x8d,0x8f,0x91,0x91,0x90,0x8e,0x8a,0x84,0x7e,0x77,0x72,0x6e,0x6c,0x6c,0x6e,0x70,0x73,0x77,0x79,0x7a,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x80,0x84,0x88,0x8c,0x8f,0x91,0x90,0x8e,0x8b,0x87,0x83,0x80,0x7e,0x7e,0x7f,0x81,0x83,0x85,0x85,0x85,0x83,0x7f,0x7c,0x78,0x75,0x73,0x73,0x74,0x77,0x7a,0x7c,0x7f,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x7b,0x7d,0x80,0x85,0x89,0x8e,0x91,0x93,0x93,0x91,0x8e,0x8a,0x86,0x83,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x78,0x74,0x70,0x6c,0x6a,0x69,0x6a,0x6d,0x71,0x77,0x7e,0x84,0x89,0x8d,0x8f,0x90,0x8f,0x8e,0x8d,0x8c,0x8c,0x8d,0x8e,0x8e,0x8e,0x8c,0x89,0x84,0x7e,0x78,0x72,0x6d,0x6a,0x69,0x6a,0x6c,0x70,0x74,0x78,0x7b,0x7d,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x84,0x88,0x8c,0x8f,0x91,0x91,0x90,0x8d,0x88,0x84,0x7f,0x7c,0x7a,0x79,0x7a,0x7c,0x7e,0x80,0x80,0x80,0x7e,0x7b,0x78,0x75,0x73,0x73,0x74,0x76,0x79,0x7d,0x80,0x83,0x84,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x80,0x83,0x87,0x8b,0x8f,0x91,0x92,0x91,0x8e,0x8a,0x86,0x81,0x7e,0x7b,0x7a,0x79,0x79,0x79,0x79,0x78,0x76,0x73,0x6f,0x6d,0x6b,0x6b,0x6d,0x71,0x76,0x7d,0x83,0x89,0x8e,0x90,0x91,0x91,0x8f,0x8d,0x8b,0x89,0x88,0x88,0x89,0x89,0x88,0x86,0x83,0x7e,0x78,0x73,0x6d,0x6a,0x68,0x69,0x6b,0x6f,0x75,0x7a,0x7f,0x82,0x85,0x86,0x86,0x86,0x86,0x87,0x89,0x8b,0x8f,0x92,0x94,0x95,0x94,0x91,0x8d,0x88,0x83,0x7e,0x7a,0x78,0x78,0x78,0x7a,0x7c,0x7e,0x7f,0x7e,0x7c,0x7a,0x77,0x75,0x73,0x73,0x74,0x77,0x7b,0x7e,0x82,0x84,0x84,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x81,0x84,0x88,0x8b,0x8d,0x8d,0x8b,0x88,0x84,0x7f,0x7b,0x77,0x75,0x75,0x75,0x76,0x78,0x79,0x79,0x78,0x76,0x75,0x73,0x72,0x73,0x76,0x7a,0x80,0x86,0x8d,0x92,0x97,0x99,0x99,0x97,0x94,0x91,0x8e,0x8b,0x89,0x88,0x88,0x87,0x86,0x83,0x80,0x7b,0x76,0x71,0x6c,0x69,0x68,0x69,0x6c,0x71,0x76,0x7c,0x81,0x85,0x87,0x88,0x88,0x87,0x86,0x86,0x87,0x89,0x8b,0x8d,0x8e,0x8e,0x8d,0x8a,0x85,0x80,0x7a,0x75,0x72,0x70,0x70,0x72,0x74,0x77,0x7a,0x7c,0x7c,0x7c,0x7a,0x79,0x77,0x77,0x78,0x7a,0x7d,0x81,0x85,0x88,0x8a,0x8b,0x8a,0x88,0x85,0x83,0x81,0x80,0x81,0x83,0x86,0x89,0x8c,0x8d,0x8d,0x8a,0x87,0x82,0x7e,0x7a,0x77,0x75,0x75,0x76,0x78,0x7a,0x7b,0x7c,0x7b,0x7a,0x78,0x76,0x76,0x76,0x79,0x7d,0x83,0x88,0x8e,0x92,0x95,0x96,0x95,0x92,0x8d,0x89,0x85,0x82,0x80,0x7e,0x7e,0x7d,0x7c,0x7a,0x77,0x74,0x6f,0x6b,0x68,0x66,0x67,0x69,0x6e,0x74,0x7a,0x81,0x86,0x8a,0x8c,0x8d,0x8c,0x8b,0x89,0x89,0x89,0x8a,0x8b,0x8d,0x8d,0x8d,0x8b,0x87,0x82,0x7d,0x78,0x73,0x70,0x70,0x71,0x73,0x77,0x7b,0x7f,0x81,0x82,0x82,0x81,0x80,0x7e,0x7e,0x7f,0x81,0x84,0x88,0x8b,0x8e,0x8f,0x8f,0x8d,0x8a,0x86,0x83,0x80,0x7f,0x7f,0x81,0x83,0x86,0x88,0x88,0x87,0x85,0x81,0x7d,0x78,0x74,0x72,0x71,0x71,0x73,0x76,0x78,0x7a,0x7b,0x7b,0x7a,0x78,0x77,0x77,0x78,0x7a,0x7e,0x83,0x89,0x8e,0x92,0x93,0x93,0x91,0x8e,0x89,0x85,0x81,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x79,0x77,0x75,0x71,0x6e,0x6c,0x6c,0x6e,0x71,0x76,0x7d,0x84,0x8a,0x8f,0x92,0x94,0x94,0x92,0x90,0x8e,0x8c,0x8c,0x8b,0x8c,0x8c,0x8b,0x8a,0x87,0x83,0x7e,0x78,0x73,0x6f,0x6d,0x6c,0x6e,0x71,0x75,0x7a,0x7d,0x80,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7f,0x81,0x84,0x87,0x89,0x8b,0x8b,0x8a,0x88,0x84,0x80,0x7d,0x7a,0x79,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x80,0x7d,0x7a,0x76,0x73,0x72,0x72,0x74,0x76,0x79,0x7d,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7e,0x81,0x84,0x89,0x8d,0x92,0x94,0x95,0x94,0x91,0x8d,0x88,0x83,0x7f,0x7c,0x7a,0x79,0x79,0x7a,0x7a,0x7a,0x78,0x76,0x74,0x72,0x71,0x71,0x73,0x77,0x7d,0x83,0x89,0x8e,0x93,0x95,0x95,0x94,0x91,0x8e,0x8a,0x88,0x86,0x85,0x84,0x84,0x83,0x81,0x7e,0x7a,0x75,0x70,0x6c,0x69,0x68,0x69,0x6c,0x70,0x75,0x7a,0x7f,0x82,0x84,0x85,0x84,0x83,0x82,0x82,0x82,0x84,0x86,0x89,0x8b,0x8c,0x8c,0x8a,0x87,0x83,0x7f,0x7c,0x79,0x78,0x79,0x7b,0x7e,0x81,0x83,0x85,0x85,0x83,0x81,0x7e,0x7b,0x79,0x78,0x79,0x7b,0x7d,0x81,0x84,0x86,0x87,0x86,0x85,0x83,0x82,0x81,0x81,0x82,0x85,0x88,0x8c,0x8f,0x91,0x90,0x8f,0x8b,0x86,0x81,0x7c,0x77,0x75,0x73,0x73,0x74,0x75,0x75,0x76,0x75,0x74,0x72,0x71,0x70,0x71,0x74,0x78,0x7e,0x84,0x8a,0x8f,0x93,0x95,0x94,0x92,0x8f,0x8b,0x88,0x85,0x83,0x81,0x81,0x81,0x80,0x7f,0x7c,0x79,0x75,0x72,0x6f,0x6d,0x6d,0x6f,0x72,0x77,0x7d,0x83,0x87,0x8b,0x8c,0x8d,0x8c,0x8a,0x89,0x87,0x87,0x88,0x89,0x8b,0x8c,0x8c,0x8b,0x88,0x85,0x80,0x7c,0x78,0x76,0x75,0x76,0x78,0x7b,0x7e,0x81,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x78,0x78,0x79,0x7b,0x7d,0x81,0x83,0x85,0x86,0x85,0x84,0x82,0x80,0x7f,0x7f,0x80,0x83,0x86,0x89,0x8b,0x8c,0x8c,0x8a,0x86,0x81,0x7c,0x78,0x74,0x72,0x72,0x72,0x74,0x76,0x77,0x78,0x78,0x78,0x77,0x76,0x77,0x78,0x7b,0x7f,0x84,0x8a,0x8f,0x94,0x96,0x97,0x95,0x92,0x8e,0x89,0x85,0x82,0x7f,0x7e,0x7d,0x7d,0x7c,0x7b,0x79,0x77,0x74,0x71,0x6f,0x6e,0x6f,0x72,0x76,0x7c,0x82,0x87,0x8c,0x8f,0x90,0x90,0x8e,0x8c,0x89,0x88,0x87,0x86,0x87,0x87,0x88,0x87,0x85,0x82,0x7f,0x7a,0x76,0x73,0x71,0x70,0x72,0x74,0x78,0x7c,0x7f,0x81,0x81,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x80,0x83,0x85,0x87,0x87,0x86,0x85,0x82,0x80,0x7f,0x7f,0x80,0x82,0x85,0x88,0x8a,0x8b,0x8a,0x88,0x85,0x80,0x7c,0x78,0x75,0x74,0x74,0x76,0x78,0x7a,0x7c,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x81,0x84,0x89,0x8e,0x92,0x95,0x96,0x95,0x93,0x8e,0x89,0x84,0x7f,0x7c,0x79,0x78,0x78,0x78,0x77,0x77,0x75,0x73,0x71,0x6f,0x6e,0x6e,0x70,0x74,0x79,0x7f,0x84,0x8a,0x8e,0x90,0x91,0x90,0x8d,0x8a,0x88,0x85,0x84,0x83,0x83,0x83,0x83,0x82,0x81,0x7e,0x7b,0x77,0x74,0x72,0x71,0x71,0x74,0x77,0x7b,0x7f,0x82,0x85,0x86,0x86,0x85,0x83,0x82,0x80,0x80,0x81,0x82,0x84,0x86,0x88,0x89,0x89,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7f,0x81,0x83,0x85,0x87,0x88,0x88,0x86,0x82,0x7f,0x7a,0x77,0x75,0x74,0x74,0x76,0x79,0x7c,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7e,0x7f,0x82,0x85,0x89,0x8d,0x90,0x92,0x92,0x90,0x8c,0x87,0x82,0x7d,0x79,0x77,0x76,0x76,0x77,0x77,0x78,0x77,0x75,0x73,0x71,0x70,0x70,0x72,0x76,0x7c,0x83,0x89,0x8f,0x92,0x94,0x93,0x90,0x8c,0x88,0x84,0x82,0x81,0x82,0x84,0x86,0x87,0x87,0x85,0x81,0x7c,0x76,0x71,0x6e,0x6d,0x6f,0x73,0x79,0x80,0x86,0x8c,0x8f,0x8f,0x8d,0x8a,0x86,0x83,0x80,0x7f,0x80,0x82,0x85,0x88,0x8a,0x8a,0x88,0x85,0x81,0x7c,0x78,0x76,0x75,0x76,0x78,0x7b,0x7e,0x81,0x82,0x82,0x80,0x7d,0x7a,0x76,0x74,0x73,0x73,0x74,0x77,0x7a,0x7c,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7e,0x80,0x83,0x86,0x8b,0x8f,0x92,0x93,0x93,0x91,0x8e,0x89,0x84,0x7f,0x7b,0x79,0x78,0x78,0x79,0x7a,0x7b,0x7b,0x7b,0x7a,0x78,0x77,0x77,0x78,0x7b,0x7f,0x83,0x89,0x8e,0x92,0x95,0x95,0x94,0x91,0x8d,0x89,0x85,0x82,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x77,0x75,0x71,0x6e,0x6c,0x6b,0x6c,0x6f,0x73,0x78,0x7e,0x83,0x86,0x89,0x89,0x89,0x88,0x87,0x86,0x85,0x86,0x86,0x87,0x88,0x88,0x86,0x84,0x81,0x7d,0x79,0x77,0x76,0x76,0x78,0x7b,0x7e,0x81,0x82,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x79,0x7a,0x7d,0x80,0x83,0x85,0x85,0x84,0x82,0x7f,0x7c,0x7a,0x79,0x79,0x7c,0x80,0x84,0x89,0x8c,0x8e,0x8d,0x8b,0x87,0x82,0x7d,0x79,0x76,0x74,0x74,0x75,0x76,0x77,0x77,0x77,0x75,0x74,0x72,0x71,0x71,0x72,0x76,0x7b,0x80,0x86,0x8b,0x8e,0x90,0x90,0x8f,0x8c,0x89,0x86,0x83,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7c,0x79,0x75,0x72,0x6f,0x6d,0x6c,0x6e,0x71,0x76,0x7c,0x81,0x86,0x89,0x8b,0x8b,0x8a,0x89,0x87,0x86,0x86,0x87,0x88,0x8a,0x8b,0x8c,0x8b,0x89,0x85,0x80,0x7c,0x78,0x75,0x74,0x75,0x77,0x7b,0x7e,0x81,0x83,0x83,0x82,0x80,0x7e,0x7c,0x7a,0x7b,0x7c,0x7f,0x81,0x84,0x85,0x85,0x84,0x82,0x7f,0x7c,0x7a,0x79,0x7a,0x7d,0x80,0x84,0x88,0x8a,0x8a,0x89,0x86,0x82,0x7e,0x7a,0x77,0x76,0x76,0x76,0x78,0x79,0x7a,0x7a,0x79,0x78,0x76,0x74,0x74,0x74,0x77,0x7a,0x7f,0x85,0x8a,0x8f,0x92,0x94,0x94,0x93,0x90,0x8c,0x88,0x84,0x81,0x7f,0x7d,0x7c,0x7b,0x79,0x77,0x75,0x72,0x6f,0x6c,0x6a,0x69,0x6a,0x6d,0x70,0x76,0x7b,0x81,0x86,0x89,0x8b,0x8b,0x8b,0x89,0x87,0x86,0x85,0x85,0x86,0x86,0x87,0x86,0x84,0x81,0x7c,0x77,0x73,0x6f,0x6d,0x6d,0x6f,0x73,0x78,0x7d,0x81,0x83,0x84,0x84,0x82,0x80,0x7e,0x7d,0x7e,0x80,0x83,0x86,0x89,0x8b,0x8c,0x8a,0x88,0x84,0x81,0x7e,0x7c,0x7c,0x7e,0x81,0x84,0x86,0x88,0x88,0x87,0x84,0x80,0x7b,0x78,0x75,0x73,0x73,0x74,0x76,0x78,0x79,0x79,0x79,0x78,0x76,0x75,0x75,0x76,0x79,0x7d,0x82,0x87,0x8b,0x8f,0x91,0x91,0x90,0x8d,0x8a,0x87,0x83,0x81,0x7f,0x7d,0x7c,0x7c,0x7b,0x79,0x77,0x75,0x72,0x70,0x6e,0x6d,0x6e,0x70,0x74,0x79,0x7f,0x85,0x8a,0x8e,0x90,0x92,0x91,0x90,0x8e,0x8c,0x8a,0x88,0x87,0x86,0x85,0x84,0x82,0x7f,0x7c,0x78,0x74,0x70,0x6e,0x6d,0x6d,0x6f,0x72,0x76,0x7a,0x7d,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x80,0x82,0x85,0x87,0x88,0x88,0x87,0x85,0x82,0x7e,0x7c,0x7a,0x79,0x7a,0x7d,0x7f,0x82,0x84,0x85,0x85,0x83,0x80,0x7d,0x79,0x77,0x75,0x76,0x77,0x79,0x7c,0x7e,0x80,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7f,0x82,0x86,0x8a,0x8f,0x92,0x94,0x93,0x91,0x8d,0x88,0x82,0x7d,0x79,0x77,0x75,0x74,0x74,0x74,0x73,0x72,0x70,0x6d,0x6b,0x6a,0x6a,0x6b,0x6f,0x74,0x7b,0x81,0x87,0x8c,0x8f,0x91,0x91,0x8f,0x8d,0x8b,0x89,0x87,0x86,0x85,0x84,0x83,0x81,0x7d,0x79,0x75,0x71,0x6e,0x6c,0x6b,0x6d,0x70,0x74,0x79,0x7e,0x83,0x86,0x88,0x89,0x89,0x89,0x88,0x88,0x88,0x89,0x89,0x8a,0x8b,0x8c,0x8b,0x8a,0x88,0x85,0x82,0x7f,0x7d,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x81,0x82,0x81,0x80,0x7e,0x7c,0x79,0x77,0x75,0x74,0x74,0x74,0x75,0x76,0x77,0x78,0x78,0x78,0x78,0x79,0x7a,0x7c,0x7f,0x82,0x86,0x89,0x8b,0x8d,0x8c,0x8a,0x87,0x84,0x80,0x7c,0x79,0x77,0x76,0x76,0x75,0x75,0x74,0x73,0x71,0x70,0x6f,0x6f,0x71,0x75,0x7b,0x81,0x88,0x8f,0x95,0x99,0x9b,0x9a,0x99,0x96,0x92,0x8f,0x8c,0x8a,0x89,0x88,0x86,0x84,0x81,0x7e,0x79,0x74,0x70,0x6d,0x6b,0x6b,0x6d,0x71,0x75,0x7b,0x7f,0x83,0x85,0x86,0x85,0x83,0x80,0x7e,0x7c,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7c,0x7a,0x77,0x73,0x70,0x6e,0x6d,0x6d,0x70,0x73,0x77,0x7b,0x7e,0x80,0x81,0x7f,0x7d,0x7a,0x76,0x74,0x73,0x74,0x76,0x7a,0x7e,0x81,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x83,0x86,0x8a,0x8f,0x94,0x99,0x9b,0x9b,0x99,0x94,0x8d,0x86,0x7f,0x7a,0x76,0x75,0x75,0x77,0x79,0x7b,0x7c,0x7c,0x7a,0x79,0x77,0x76,0x77,0x7a,0x7e,0x84,0x8a,0x90,0x94,0x96,0x96,0x93,0x8f,0x89,0x83,0x7d,0x79,0x76,0x74,0x74,0x73,0x73,0x72,0x70,0x6e,0x6b,0x68,0x66,0x65,0x67,0x6a,0x70,0x76,0x7d,0x84,0x89,0x8c,0x8e,0x8d,0x8b,0x89,0x86,0x85,0x84,0x85,0x86,0x88,0x8a,0x8b,0x8b,0x89,0x86,0x82,0x7e,0x7b,0x79,0x79,0x7a,0x7d,0x81,0x84,0x87,0x89,0x89,0x87,0x84,0x81,0x7d,0x7b,0x7a,0x7a,0x7d,0x80,0x83,0x86,0x88,0x89,0x88,0x86,0x84,0x81,0x7f,0x7f,0x80,0x82,0x84,0x87,0x88,0x88,0x86,0x82,0x7c,0x76,0x6f,0x69,0x64,0x62,0x61,0x63,0x66,0x69,0x6c,0x6f,0x70,0x71,0x71,0x71,0x72,0x74,0x78,0x7d,0x84,0x8a,0x90,0x94,0x97,0x96,0x94,0x8f,0x89,0x83,0x7e,0x79,0x77,0x76,0x76,0x77,0x78,0x78,0x77,0x75,0x73,0x71,0x70,0x71,0x73,0x78,0x7e,0x86,0x8e,0x95,0x9a,0x9d,0x9d,0x9b,0x97,0x92,0x8e,0x8a,0x88,0x87,0x88,0x89,0x89,0x89,0x87,0x84,0x7f,0x7a,0x75,0x70,0x6e,0x6e,0x70,0x74,0x78,0x7c,0x7f,0x81,0x81,0x7e,0x7a,0x76,0x73,0x70,0x70,0x71,0x74,0x78,0x7c,0x7f,0x81,0x82,0x81,0x7e,0x7c,0x79,0x78,0x78,0x7a,0x7e,0x82,0x85,0x88,0x89,0x88,0x85,0x80,0x7b,0x75,0x71,0x6f,0x6e,0x70,0x74,0x78,0x7c,0x80,0x83,0x85,0x85,0x85,0x85,0x86,0x88,0x8b,0x90,0x95,0x9b,0x9f,0xa1,0xa1,0x9f,0x9a,0x93,0x8b,0x83,0x7c,0x77,0x74,0x73,0x73,0x74,0x75,0x75,0x75,0x73,0x71,0x6f,0x6e,0x6e,0x71,0x75,0x7a,0x81,0x87,0x8d,0x91,0x92,0x90,0x8d,0x88,0x82,0x7d,0x79,0x77,0x76,0x76,0x77,0x78,0x79,0x77,0x75,0x72,0x6e,0x6b,0x69,0x68,0x6a,0x6f,0x75,0x7b,0x81,0x87,0x8a,0x8b,0x8a,0x87,0x84,0x81,0x7f,0x7f,0x81,0x84,0x88,0x8c,0x8f,0x91,0x92,0x90,0x8d,0x8a,0x86,0x84,0x83,0x84,0x86,0x89,0x8c,0x8e,0x8e,0x8b,0x87,0x82,0x7b,0x75,0x70,0x6d,0x6c,0x6d,0x70,0x74,0x79,0x7c,0x7e,0x7f,0x7e,0x7d,0x7c,0x7b,0x7c,0x7f,0x82,0x87,0x8c,0x8f,0x91,0x90,0x8d,0x87,0x7f,0x77,0x70,0x69,0x65,0x64,0x64,0x67,0x6a,0x6d,0x6f,0x71,0x71,0x71,0x71,0x71,0x73,0x77,0x7d,0x84,0x8c,0x94,0x9a,0x9e,0xa0,0x9e,0x9a,0x95,0x8f,0x8a,0x85,0x83,0x82,0x83,0x84,0x85,0x85,0x84,0x81,0x7e,0x7a,0x76,0x74,0x74,0x75,0x79,0x7f,0x84,0x8a,0x8e,0x8f,0x8f,0x8c,0x88,0x83,0x7f,0x7c,0x7b,0x7c,0x7e,0x81,0x84,0x86,0x86,0x85,0x82,0x7e,0x7a,0x76,0x74,0x73,0x74,0x77,0x7b,0x7e,0x81,0x82,0x80,0x7d,0x79,0x73,0x6e,0x6b,0x6a,0x6b,0x6e,0x73,0x79,0x7e,0x83,0x86,0x87,0x87,0x86,0x86,0x85,0x87,0x89,0x8d,0x92,0x97,0x9a,0x9b,0x9a,0x96,0x8f,0x88,0x7f,0x78,0x72,0x6f,0x6e,0x6f,0x72,0x76,0x79,0x7b,0x7c,0x7b,0x7a,0x7a,0x79,0x7b,0x7e,0x84,0x8a,0x91,0x97,0x9c,0x9d,0x9c,0x98,0x92,0x8a,0x82,0x7c,0x76,0x73,0x72,0x73,0x74,0x75,0x76,0x75,0x72,0x6f,0x6b,0x69,0x68,0x69,0x6c,0x72,0x79,0x80,0x87,0x8b,0x8e,0x8d,0x8b,0x87,0x82,0x7e,0x7c,0x7b,0x7d,0x7f,0x83,0x86,0x88,0x89,0x88,0x85,0x80,0x7c,0x79,0x77,0x77,0x79,0x7d,0x81,0x85,0x88,0x89,0x88,0x84,0x80,0x7a,0x75,0x72,0x71,0x73,0x76,0x7c,0x81,0x87,0x8b,0x8d,0x8e,0x8c,0x8a,0x88,0x86,0x86,0x88,0x8b,0x8e,0x91,0x93,0x93,0x91,0x8b,0x84,0x7c,0x73,0x6c,0x67,0x64,0x65,0x67,0x6c,0x70,0x75,0x78,0x7a,0x7a,0x79,0x79,0x79,0x7a,0x7e,0x83,0x8a,0x91,0x97,0x9b,0x9c,0x9a,0x95,0x8e,0x85,0x7d,0x76,0x72,0x6f,0x6f,0x71,0x74,0x76,0x78,0x78,0x76,0x74,0x72,0x70,0x70,0x72,0x76,0x7d,0x84,0x8c,0x92,0x97,0x99,0x98,0x94,0x90,0x8a,0x86,0x82,0x81,0x82,0x84,0x87,0x89,0x8a,0x8a,0x88,0x84,0x7f,0x7a,0x76,0x74,0x74,0x76,0x7a,0x7e,0x82,0x85,0x87,0x85,0x82,0x7e,0x78,0x74,0x71,0x70,0x72,0x75,0x7b,0x80,0x85,0x89,0x8a,0x8a,0x88,0x85,0x82,0x80,0x7f,0x80,0x83,0x86,0x89,0x8b,0x8c,0x89,0x85,0x7f,0x77,0x70,0x6a,0x66,0x65,0x67,0x6c,0x71,0x77,0x7d,0x81,0x84,0x84,0x84,0x84,0x84,0x85,0x88,0x8d,0x93,0x99,0x9d,0xa0,0xa0,0x9d,0x96,0x8e,0x85,0x7c,0x75,0x70,0x6e,0x6f,0x71,0x73,0x76,0x78,0x78,0x76,0x74,0x72,0x71,0x71,0x74,0x79,0x7f,0x87,0x8e,0x94,0x98,0x98,0x96,0x91,0x8b,0x84,0x7f,0x7b,0x79,0x7a,0x7c,0x7e,0x81,0x82,0x81,0x7f,0x7b,0x76,0x72,0x6f,0x6e,0x6f,0x73,0x78,0x7e,0x83,0x87,0x88,0x88,0x85,0x81,0x7c,0x79,0x76,0x76,0x79,0x7d,0x82,0x87,0x8c,0x8e,0x8f,0x8e,0x8b,0x87,0x84,0x82,0x81,0x82,0x84,0x87,0x89,0x8b,0x8a,0x88,0x83,0x7c,0x75,0x6e,0x69,0x66,0x66,0x69,0x6e,0x74,0x7b,0x80,0x84,0x86,0x86,0x85,0x85,0x84,0x85,0x87,0x8b,0x90,0x95,0x98,0x99,0x98,0x94,0x8d,0x84,0x7b,0x72,0x6c,0x67,0x66,0x67,0x6a,0x6e,0x71,0x74,0x76,0x76,0x75,0x74,0x74,0x75,0x78,0x7e,0x84,0x8c,0x93,0x98,0x9b,0x9b,0x98,0x93,0x8c,0x84,0x7e,0x79,0x77,0x77,0x78,0x7b,0x7d,0x7e,0x7e,0x7c,0x79,0x74,0x71,0x6e,0x6e,0x6f,0x74,0x79,0x80,0x85,0x89,0x8b,0x8b,0x87,0x83,0x7e,0x79,0x76,0x76,0x78,0x7c,0x80,0x85,0x89,0x8c,0x8c,0x89,0x86,0x81,0x7d,0x7a,0x7a,0x7b,0x7d,0x81,0x84,0x86,0x86,0x84,0x7f,0x79,0x73,0x6d,0x69,0x67,0x68,0x6c,0x72,0x79,0x7f,0x85,0x88,0x8a,0x8a,0x89,0x88,0x87,0x88,0x8a,0x8d,0x91,0x95,0x97,0x98,0x95,0x90,0x88,0x7f,0x76,0x6e,0x68,0x65,0x65,0x67,0x6b,0x6f,0x73,0x77,0x78,0x79,0x78,0x77,0x77,0x79,0x7c,0x81,0x87,0x8e,0x94,0x98,0x9a,0x99,0x94,0x8e,0x86,0x7e,0x78,0x73,0x71,0x71,0x73,0x75,0x78,0x7a,0x7a,0x79,0x76,0x73,0x70,0x6f,0x70,0x73,0x78,0x7e,0x85,0x8b,0x8f,0x91,0x90,0x8d,0x89,0x84,0x7f,0x7d,0x7c,0x7e,0x81,0x86,0x8a,0x8d,0x8f,0x8e,0x8b,0x87,0x82,0x7e,0x7b,0x7a,0x7a,0x7d,0x80,0x83,0x85,0x85,0x83,0x7e,0x79,0x72,0x6d,0x69,0x68,0x6a,0x6e,0x74,0x7b,0x81,0x86,0x89,0x8a,0x89,0x86,0x84,0x83,0x82,0x84,0x86,0x8a,0x8d,0x8f,0x8e,0x8b,0x86,0x7e,0x75,0x6d,0x66,0x61,0x60,0x62,0x66,0x6c,0x72,0x78,0x7d,0x80,0x81,0x82,0x82,0x82,0x84,0x87,0x8c,0x92,0x99,0x9e,0xa1,0xa1,0x9f,0x99,0x91,0x88,0x80,0x79,0x74,0x71,0x72,0x73,0x76,0x79,0x7b,0x7b,0x79,0x77,0x74,0x71,0x70,0x72,0x75,0x7a,0x81,0x87,0x8d,0x90,0x91,0x8f,0x8a,0x85,0x7f,0x79,0x76,0x75,0x76,0x79,0x7c,0x80,0x83,0x83,0x82,0x7f,0x7a,0x76,0x72,0x70,0x70,0x72,0x76,0x7b,0x7f,0x82,0x84,0x82,0x7f,0x7b,0x76,0x72,0x70,0x70,0x73,0x78,0x7f,0x86,0x8c,0x91,0x94,0x94,0x92,0x8f,0x8c,0x8a,0x89,0x8a,0x8c,0x8e,0x91,0x92,0x91,0x8d,0x88,0x80,0x78,0x70,0x69,0x65,0x64,0x66,0x6b,0x71,0x77,0x7d,0x81,0x83,0x84,0x83,0x83,0x82,0x83,0x85,0x89,0x8e,0x92,0x96,0x98,0x96,0x92,0x8b,0x83,0x7a,0x71,0x6a,0x66,0x65,0x66,0x69,0x6d,0x71,0x74,0x75,0x75,0x74,0x72,0x71,0x71,0x74,0x78,0x7e,0x86,0x8d,0x92,0x96,0x96,0x94,0x8f,0x89,0x83,0x7e,0x7a,0x79,0x7a,0x7d,0x81,0x84,0x87,0x87,0x86,0x83,0x7f,0x7b,0x77,0x76,0x76,0x79,0x7d,0x81,0x86,0x89,0x8a,0x88,0x85,0x80,0x7b,0x76,0x73,0x73,0x75,0x79,0x7f,0x85,0x8a,0x8e,0x8f,0x8e,0x8b,0x88,0x84,0x80,0x7f,0x7f,0x80,0x82,0x84,0x85,0x84,0x81,0x7b,0x74,0x6d,0x66,0x61,0x5e,0x5f,0x62,0x68,0x6f,0x77,0x7d,0x82,0x84,0x85,0x85,0x84,0x84,0x85,0x87,0x8b,0x90,0x94,0x97,0x98,0x96,0x91,0x8a,0x81,0x79,0x71,0x6b,0x68,0x68,0x6b,0x6f,0x74,0x79,0x7c,0x7e,0x7e,0x7e,0x7d,0x7c,0x7d,0x80,0x84,0x8a,0x90,0x96,0x9a,0x9c,0x9a,0x97,0x91,0x89,0x82,0x7d,0x79,0x77,0x78,0x7a,0x7d,0x7f,0x81,0x81,0x7f,0x7c,0x78,0x74,0x71,0x70,0x71,0x74,0x79,0x7e,0x82,0x85,0x86,0x84,0x81,0x7c,0x78,0x74,0x72,0x72,0x75,0x7a,0x80,0x86,0x8b,0x8e,0x8f,0x8d,0x8a,0x86,0x82,0x7f,0x7e,0x7f,0x81,0x84,0x86,0x88,0x87,0x84,0x80,0x79,0x73,0x6d,0x6a,0x69,0x6b,0x70,0x76,0x7e,0x85,0x8b,0x8e,0x90,0x90,0x8f,0x8d,0x8c,0x8d,0x8e,0x91,0x94,0x97,0x98,0x97,0x94,0x8e,0x86,0x7d,0x74,0x6d,0x68,0x65,0x66,0x68,0x6c,0x70,0x74,0x77,0x79,0x7a,0x7a,0x7b,0x7c,0x7f,0x82,0x87,0x8c,0x91,0x95,0x96,0x96,0x93,0x8d,0x87,0x80,0x7a,0x76,0x73,0x72,0x72,0x74,0x77,0x79,0x7a,0x7a,0x7a,0x78,0x77,0x76,0x76,0x77,0x7a,0x7d,0x81,0x85,0x88,0x89,0x89,0x88,0x85,0x82,0x7f,0x7d,0x7d,0x7e,0x80,0x84,0x88,0x8b,0x8e,0x8f,0x8f,0x8d,0x8a,0x87,0x85,0x83,0x81,0x81,0x81,0x82,0x82,0x81,0x7f,0x7c,0x78,0x74,0x70,0x6d,0x6c,0x6c,0x6f,0x73,0x78,0x7d,0x82,0x86,0x89,0x8b,0x8b,0x8b,0x8a,0x8a,0x8a,0x8a,0x8b,0x8c,0x8c,0x8c,0x8a,0x87,0x82,0x7d,0x76,0x71,0x6c,0x69,0x67,0x68,0x6a,0x6e,0x72,0x76,0x7a,0x7d,0x80,0x82,0x84,0x86,0x89,0x8c,0x90,0x94,0x98,0x9b,0x9c,0x9b,0x98,0x93,0x8d,0x86,0x80,0x7a,0x77,0x75,0x75,0x77,0x79,0x7b,0x7d,0x7d,0x7d,0x7b,0x79,0x77,0x77,0x77,0x7a,0x7d,0x82,0x86,0x8a,0x8c,0x8d,0x8b,0x88,0x84,0x80,0x7d,0x7b,0x7c,0x7d,0x80,0x84,0x87,0x89,0x89,0x88,0x85,0x81,0x7e,0x7a,0x78,0x78,0x79,0x7b,0x7d,0x7e,0x7f,0x7e,0x7b,0x78,0x74,0x70,0x6d,0x6c,0x6d,0x71,0x76,0x7c,0x82,0x87,0x8c,0x8e,0x8f,0x8f,0x8e,0x8d,0x8c,0x8b,0x8b,0x8b,0x8c,0x8c,0x8a,0x88,0x84,0x7f,0x78,0x72,0x6c,0x68,0x65,0x64,0x65,0x68,0x6c,0x71,0x76,0x7a,0x7e,0x81,0x84,0x86,0x89,0x8b,0x8e,0x90,0x92,0x94,0x95,0x94,0x92,0x8e,0x89,0x83,0x7d,0x77,0x73,0x70,0x6e,0x6e,0x6f,0x71,0x72,0x74,0x75,0x76,0x76,0x76,0x77,0x79,0x7b,0x7e,0x82,0x85,0x89,0x8c,0x8d,0x8d,0x8b,0x89,0x85,0x82,0x80,0x7e,0x7e,0x7f,0x81,0x83,0x85,0x87,0x87,0x86,0x85,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x82,0x80,0x7d,0x7a,0x77,0x75,0x75,0x76,0x79,0x7d,0x82,0x88,0x8c,0x90,0x92,0x92,0x91,0x8f,0x8d,0x8b,0x8a,0x89,0x89,0x88,0x87,0x85,0x82,0x7e,0x79,0x73,0x6d,0x68,0x65,0x64,0x65,0x68,0x6d,0x73,0x79,0x7f,0x83,0x87,0x89,0x8a,0x8b,0x8c,0x8e,0x90,0x92,0x95,0x96,0x97,0x96,0x93,0x8e,0x88,0x81,0x7a,0x74,0x6f,0x6d,0x6d,0x6e,0x70,0x73,0x76,0x78,0x7a,0x7a,0x7b,0x7b,0x7b,0x7d,0x7f,0x83,0x87,0x8b,0x8e,0x90,0x91,0x8f,0x8c,0x88,0x83,0x7f,0x7b,0x7a,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x81,0x7f,0x7d,0x7b,0x78,0x77,0x76,0x77,0x78,0x7a,0x7c,0x7e,0x7e,0x7e,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7e,0x82,0x87,0x8b,0x8e,0x90,0x91,0x91,0x90,0x8f,0x8d,0x8c,0x8a,0x89,0x88,0x87,0x85,0x82,0x7f,0x7b,0x77,0x72,0x6e,0x6b,0x6a,0x6a,0x6b,0x6e,0x73,0x77,0x7d,0x81,0x85,0x89,0x8b,0x8c,0x8d,0x8e,0x8e,0x8e,0x8f,0x8f,0x8e,0x8d,0x8b,0x88,0x83,0x7e,0x79,0x73,0x6e,0x6b,0x69,0x68,0x69,0x6c,0x6f,0x73,0x76,0x79,0x7c,0x7e,0x80,0x82,0x84,0x86,0x89,0x8d,0x90,0x92,0x94,0x94,0x92,0x8f,0x8c,0x87,0x83,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x81,0x81,0x7f,0x7d,0x7c,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x80,0x83,0x86,0x89,0x8b,0x8b,0x8b,0x89,0x87,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7b,0x79,0x76,0x73,0x70,0x6d,0x6c,0x6b,0x6c,0x6f,0x73,0x78,0x7e,0x83,0x88,0x8d,0x90,0x92,0x93,0x93,0x93,0x93,0x93,0x92,0x91,0x90,0x8e,0x8b,0x87,0x82,0x7d,0x77,0x72,0x6d,0x6a,0x69,0x69,0x6a,0x6d,0x71,0x74,0x78,0x7b,0x7e,0x80,0x81,0x83,0x84,0x86,0x88,0x89,0x8b,0x8c,0x8c,0x8b,0x89,0x86,0x82,0x7e,0x7a,0x76,0x74,0x72,0x72,0x72,0x74,0x75,0x77,0x78,0x79,0x79,0x79,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x86,0x86,0x86,0x85,0x83,0x82,0x82,0x82,0x83,0x86,0x88,0x8b,0x8d,0x8f,0x90,0x8f,0x8d,0x8b,0x88,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x75,0x72,0x6f,0x6d,0x6d,0x6e,0x71,0x76,0x7c,0x81,0x87,0x8b,0x8e,0x8f,0x8f,0x8e,0x8c,0x8b,0x89,0x88,0x88,0x87,0x86,0x84,0x80,0x7c,0x76,0x71,0x6b,0x66,0x63,0x62,0x63,0x66,0x6a,0x6f,0x74,0x79,0x7d,0x80,0x82,0x84,0x85,0x87,0x8a,0x8d,0x90,0x94,0x96,0x97,0x96,0x94,0x90,0x8b,0x86,0x81,0x7e,0x7b,0x7a,0x7b,0x7c,0x7e,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7e,0x81,0x84,0x87,0x89,0x8a,0x8a,0x88,0x85,0x82,0x7f,0x7c,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x83,0x83,0x82,0x80,0x7d,0x7b,0x79,0x78,0x77,0x76,0x76,0x75,0x74,0x72,0x70,0x6e,0x6c,0x6a,0x6a,0x6b,0x6d,0x70,0x75,0x7a,0x7f,0x84,0x88,0x8c,0x8e,0x90,0x91,0x91,0x91,0x91,0x90,0x8f,0x8e,0x8c,0x89,0x86,0x82,0x7e,0x7a,0x76,0x73,0x70,0x6f,0x6f,0x70,0x72,0x76,0x7a,0x7e,0x82,0x87,0x8a,0x8e,0x90,0x92,0x93,0x94,0x94,0x94,0x93,0x92,0x90,0x8d,0x8a,0x86,0x81,0x7d,0x78,0x74,0x71,0x6f,0x6e,0x6f,0x70,0x71,0x73,0x74,0x75,0x76,0x76,0x76,0x76,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x82,0x83,0x83,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x83,0x82,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7c,0x80,0x85,0x8b,0x90,0x95,0x99,0x9a,0x9a,0x98,0x95,0x92,0x8e,0x8b,0x88,0x86,0x84,0x82,0x80,0x7e,0x7b,0x77,0x73,0x6f,0x6c,0x69,0x68,0x68,0x69,0x6c,0x70,0x74,0x79,0x7c,0x80,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x82,0x82,0x81,0x80,0x7e,0x7c,0x79,0x76,0x72,0x6f,0x6d,0x6c,0x6c,0x6d,0x70,0x74,0x77,0x7a,0x7d,0x7f,0x7f,0x7f,0x7f,0x7e,0x7f,0x80,0x81,0x84,0x86,0x89,0x8b,0x8c,0x8c,0x8c,0x8b,0x89,0x88,0x87,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x89,0x87,0x84,0x80,0x7d,0x79,0x77,0x75,0x74,0x74,0x74,0x75,0x76,0x77,0x78,0x78,0x79,0x7a,0x7c,0x7d,0x7f,0x82,0x84,0x86,0x88,0x8a,0x8a,0x8a,0x89,0x88,0x86,0x83,0x81,0x7e,0x7b,0x78,0x76,0x74,0x72,0x71,0x71,0x71,0x72,0x72,0x73,0x74,0x75,0x76,0x77,0x79,0x7b,0x7e,0x80,0x83,0x86,0x88,0x8b,0x8c,0x8d,0x8e,0x8e,0x8e,0x8e,0x8e,0x8d,0x8d,0x8b,0x8a,0x88,0x85,0x82,0x7e,0x7c,0x79,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x81,0x83,0x87,0x8a,0x8d,0x8f,0x90,0x90,0x8f,0x8c,0x8a,0x87,0x84,0x82,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x75,0x72,0x70,0x6d,0x6c,0x6c,0x6d,0x6f,0x71,0x74,0x76,0x78,0x7a,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x81,0x84,0x86,0x87,0x88,0x89,0x88,0x87,0x86,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7a,0x79,0x78,0x78,0x78,0x78,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x84,0x85,0x86,0x88,0x89,0x8a,0x8c,0x8d,0x8d,0x8e,0x8d,0x8c,0x8a,0x88,0x84,0x81,0x7d,0x7a,0x77,0x74,0x72,0x71,0x70,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x71,0x73,0x76,0x79,0x7d,0x80,0x84,0x86,0x89,0x8a,0x8b,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x87,0x87,0x87,0x87,0x88,0x88,0x89,0x89,0x8a,0x8a,0x89,0x89,0x87,0x85,0x83,0x81,0x7e,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x79,0x79,0x78,0x78,0x77,0x77,0x76,0x76,0x76,0x76,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x83,0x83,0x84,0x84,0x85,0x86,0x87,0x89,0x8a,0x8a,0x89,0x88,0x85,0x83,0x80,0x7d,0x7a,0x79,0x78,0x77,0x78,0x78,0x79,0x79,0x79,0x79,0x7a,0x7a,0x7b,0x7d,0x7f,0x82,0x86,0x89,0x8d,0x8f,0x90,0x91,0x90,0x8e,0x8c,0x8a,0x88,0x86,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x78,0x75,0x73,0x71,0x6f,0x6f,0x6f,0x70,0x73,0x75,0x78,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x89,0x89,0x88,0x87,0x85,0x83,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x78,0x78,0x77,0x77,0x78,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x83,0x83,0x83,0x84,0x85,0x86,0x87,0x88,0x88,0x86,0x84,0x81,0x7e,0x7a,0x77,0x75,0x73,0x73,0x73,0x74,0x75,0x76,0x77,0x77,0x78,0x78,0x78,0x79,0x7b,0x7e,0x82,0x86,0x8a,0x8e,0x90,0x92,0x92,0x91,0x8f,0x8d,0x8a,0x87,0x85,0x84,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x76,0x74,0x73,0x73,0x74,0x77,0x7a,0x7d,0x81,0x84,0x86,0x88,0x89,0x89,0x88,0x88,0x88,0x87,0x87,0x88,0x88,0x88,0x87,0x86,0x84,0x81,0x7e,0x7b,0x78,0x76,0x75,0x75,0x75,0x76,0x78,0x7a,0x7b,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x82,0x84,0x87,0x89,0x8a,0x8b,0x8a,0x8a,0x89,0x88,0x87,0x87,0x87,0x87,0x88,0x88,0x88,0x87,0x85,0x83,0x80,0x7d,0x7a,0x78,0x77,0x76,0x77,0x78,0x79,0x7a,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x83,0x86,0x88,0x8a,0x8c,0x8c,0x8b,0x88,0x85,0x82,0x7f,0x7c,0x7a,0x79,0x78,0x77,0x77,0x76,0x76,0x75,0x73,0x72,0x71,0x71,0x72,0x74,0x77,0x7b,0x7f,0x83,0x87,0x89,0x8b,0x8c,0x8c,0x8b,0x8a,0x8a,0x89,0x8a,0x8a,0x8b,0x8b,0x8a,0x89,0x87,0x84,0x80,0x7d,0x7a,0x77,0x76,0x77,0x78,0x7a,0x7c,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7e,0x7f,0x81,0x83,0x86,0x88,0x89,0x89,0x88,0x87,0x85,0x82,0x81,0x80,0x80,0x80,0x81,0x83,0x83,0x84,0x83,0x81,0x7e,0x7c,0x79,0x77,0x75,0x75,0x76,0x78,0x7a,0x7c,0x7e,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x85,0x88,0x8b,0x8e,0x8f,0x90,0x8f,0x8d,0x89,0x86,0x82,0x7f,0x7c,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x79,0x78,0x76,0x75,0x74,0x74,0x75,0x77,0x7b,0x7f,0x83,0x88,0x8b,0x8d,0x8e,0x8e,0x8c,0x8a,0x88,0x86,0x85,0x85,0x85,0x85,0x85,0x85,0x83,0x81,0x7e,0x7a,0x77,0x74,0x72,0x72,0x73,0x75,0x79,0x7c,0x7f,0x81,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7f,0x82,0x85,0x87,0x88,0x88,0x86,0x84,0x81,0x7e,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x80,0x80,0x7e,0x7c,0x79,0x76,0x74,0x73,0x74,0x76,0x79,0x7c,0x7f,0x81,0x83,0x84,0x84,0x83,0x83,0x83,0x84,0x87,0x8a,0x8d,0x90,0x93,0x94,0x93,0x91,0x8d,0x88,0x83,0x7e,0x7b,0x79,0x78,0x79,0x7a,0x7b,0x7c,0x7c,0x7b,0x79,0x77,0x75,0x74,0x74,0x76,0x7a,0x7e,0x83,0x88,0x8b,0x8d,0x8e,0x8c,0x8a,0x86,0x83,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x7e,0x7d,0x7a,0x77,0x74,0x72,0x71,0x71,0x72,0x75,0x79,0x7d,0x80,0x83,0x84,0x85,0x84,0x83,0x81,0x80,0x81,0x82,0x84,0x87,0x89,0x8c,0x8e,0x8e,0x8d,0x8b,0x88,0x85,0x82,0x80,0x7f,0x7f,0x80,0x81,0x83,0x83,0x83,0x82,0x7f,0x7c,0x79,0x76,0x74,0x73,0x74,0x77,0x7a,0x7e,0x82,0x85,0x87,0x88,0x87,0x86,0x84,0x82,0x82,0x82,0x83,0x85,0x88,0x89,0x8a,0x89,0x87,0x84,0x7f,0x7a,0x76,0x73,0x72,0x72,0x73,0x76,0x79,0x7b,0x7d,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7e,0x82,0x86,0x8a,0x8d,0x8f,0x8f,0x8d,0x8b,0x87,0x84,0x81,0x80,0x7f,0x80,0x82,0x83,0x84,0x84,0x82,0x7f,0x7c,0x79,0x76,0x74,0x74,0x75,0x78,0x7c,0x80,0x84,0x86,0x87,0x87,0x86,0x84,0x82,0x81,0x81,0x82,0x84,0x87,0x89,0x8b,0x8c,0x8c,0x8a,0x86,0x82,0x7e,0x7a,0x78,0x77,0x76,0x77,0x79,0x7a,0x7b,0x7c,0x7b,0x79,0x76,0x74,0x72,0x72,0x72,0x74,0x77,0x7b,0x7f,0x82,0x85,0x86,0x85,0x84,0x82,0x80,0x7f,0x7f,0x80,0x82,0x84,0x87,0x88,0x89,0x88,0x86,0x83,0x7f,0x7b,0x78,0x76,0x76,0x77,0x7a,0x7d,0x80,0x82,0x84,0x84,0x82,0x81,0x7f,0x7d,0x7d,0x7e,0x81,0x85,0x89,0x8c,0x8f,0x90,0x8f,0x8d,0x89,0x85,0x82,0x7f,0x7d,0x7c,0x7d,0x7e,0x7f,0x80,0x7f,0x7d,0x7a,0x76,0x72,0x6f,0x6d,0x6d,0x6e,0x71,0x75,0x79,0x7d,0x7f,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7e,0x80,0x83,0x87,0x89,0x8b,0x8b,0x89,0x86,0x82,0x7e,0x7b,0x79,0x78,0x79,0x7b,0x7e,0x80,0x82,0x84,0x83,0x82,0x80,0x7d,0x7c,0x7b,0x7c,0x7e,0x81,0x85,0x89,0x8c,0x8e,0x8f,0x8d,0x8a,0x87,0x83,0x80,0x7f,0x7e,0x7f,0x81,0x82,0x84,0x84,0x83,0x80,0x7c,0x78,0x74,0x71,0x6f,0x6f,0x71,0x74,0x78,0x7b,0x7e,0x7f,0x7f,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x80,0x84,0x88,0x8a,0x8b,0x8a,0x88,0x85,0x81,0x7d,0x7b,0x7a,0x7b,0x7c,0x7f,0x81,0x83,0x83,0x82,0x80,0x7d,0x79,0x77,0x75,0x75,0x77,0x7a,0x7e,0x83,0x86,0x89,0x8a,0x8a,0x88,0x85,0x83,0x81,0x80,0x80,0x82,0x85,0x88,0x8a,0x8b,0x8b,0x88,0x84,0x7f,0x7a,0x76,0x73,0x72,0x73,0x75,0x78,0x7b,0x7d,0x7e,0x7e,0x7d,0x7a,0x78,0x76,0x75,0x77,0x79,0x7d,0x82,0x87,0x8a,0x8d,0x8d,0x8c,0x89,0x85,0x82,0x7f,0x7e,0x7e,0x80,0x82,0x84,0x86,0x86,0x85,0x83,0x7f,0x7b,0x77,0x74,0x73,0x74,0x76,0x7a,0x7e,0x82,0x85,0x86,0x86,0x85,0x83,0x80,0x7f,0x7e,0x7f,0x81,0x84,0x88,0x8b,0x8d,0x8e,0x8c,0x89,0x85,0x81,0x7d,0x7a,0x78,0x78,0x7a,0x7c,0x7f,0x80,0x81,0x80,0x7e,0x7b,0x78,0x75,0x73,0x74,0x76,0x79,0x7e,0x83,0x87,0x8a,0x8b,0x8b,0x89,0x86,0x83,0x81,0x80,0x80,0x82,0x85,0x88,0x8a,0x8a,0x89,0x86,0x81,0x7c,0x78,0x74,0x72,0x72,0x73,0x76,0x7a,0x7d,0x7f,0x80,0x7f,0x7d,0x7b,0x7a,0x79,0x7a,0x7d,0x81,0x85,0x89,0x8c,0x8d,0x8c,0x89,0x85,0x81,0x7d,0x7a,0x78,0x79,0x7b,0x7e,0x80,0x82,0x83,0x82,0x7f,0x7c,0x78,0x75,0x73,0x74,0x76,0x79,0x7d,0x81,0x85,0x87,0x87,0x85,0x82,0x7f,0x7c,0x7b,0x7b,0x7e,0x81,0x86,0x8b,0x8e,0x90,0x90,0x8d,0x89,0x84,0x7e,0x7a,0x77,0x77,0x78,0x7a,0x7e,0x81,0x82,0x83,0x82,0x7f,0x7c,0x78,0x76,0x74,0x75,0x77,0x7b,0x80,0x84,0x88,0x8a,0x8a,0x88,0x85,0x81,0x7e,0x7b,0x7a,0x7b,0x7d,0x80,0x83,0x85,0x86,0x86,0x83,0x80,0x7c,0x78,0x75,0x74,0x75,0x77,0x7b,0x7e,0x82,0x84,0x84,0x84,0x82,0x7f,0x7d,0x7c,0x7c,0x7f,0x82,0x87,0x8c,0x90,0x93,0x94,0x93,0x90,0x8b,0x86,0x82,0x7f,0x7d,0x7d,0x7f,0x81,0x84,0x85,0x85,0x84,0x81,0x7d,0x7a,0x76,0x74,0x74,0x76,0x79,0x7d,0x81,0x84,0x86,0x87,0x86,0x83,0x81,0x7e,0x7d,0x7c,0x7e,0x80,0x83,0x87,0x89,0x8a,0x89,0x87,0x83,0x7e,0x79,0x76,0x74,0x74,0x75,0x79,0x7c,0x80,0x82,0x83,0x82,0x80,0x7d,0x79,0x77,0x76,0x76,0x79,0x7d,0x82,0x86,0x8a,0x8c,0x8c,0x8a,0x87,0x83,0x7f,0x7c,0x7b,0x7c,0x7e,0x80,0x83,0x85,0x86,0x85,0x83,0x7f,0x7b,0x77,0x73,0x72,0x72,0x74,0x77,0x7b,0x7e,0x80,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x78,0x7a,0x7d,0x81,0x85,0x89,0x8b,0x8b,0x89,0x85,0x81,0x7c,0x78,0x76,0x75,0x76,0x79,0x7c,0x7f,0x81,0x81,0x80,0x7e,0x7b,0x77,0x75,0x74,0x74,0x77,0x7a,0x7f,0x83,0x87,0x89,0x89,0x87,0x84,0x81,0x7e,0x7c,0x7b,0x7d,0x7f,0x83,0x86,0x89,0x8a,0x8a,0x87,0x84,0x7f,0x7b,0x78,0x76,0x77,0x79,0x7c,0x80,0x83,0x85,0x86,0x85,0x83,0x80,0x7d,0x7b,0x7a,0x7b,0x7e,0x81,0x85,0x89,0x8b,0x8c,0x8b,0x89,0x85,0x82,0x7f,0x7d,0x7d,0x7e,0x80,0x82,0x85,0x86,0x86,0x84,0x82,0x7e,0x7a,0x76,0x74,0x73,0x73,0x76,0x79,0x7c,0x7f,0x81,0x81,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7f,0x82,0x86,0x89,0x8a,0x8a,0x89,0x86,0x82,0x7e,0x7b,0x79,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x81,0x80,0x7e,0x7b,0x78,0x76,0x76,0x77,0x79,0x7d,0x81,0x85,0x88,0x8a,0x8a,0x88,0x86,0x82,0x7f,0x7d,0x7d,0x7d,0x7f,0x82,0x84,0x86,0x86,0x85,0x82,0x7e,0x7a,0x77,0x74,0x73,0x74,0x77,0x7a,0x7d,0x80,0x82,0x82,0x80,0x7e,0x7b,0x79,0x78,0x78,0x7a,0x7d,0x81,0x85,0x88,0x8a,0x8b,0x89,0x86,0x83,0x7f,0x7c,0x7b,0x7b,0x7c,0x7f,0x81,0x84,0x85,0x85,0x83,0x80,0x7d,0x79,0x76,0x74,0x74,0x76,0x79,0x7d,0x80,0x83,0x85,0x85,0x84,0x81,0x7f,0x7d,0x7c,0x7c,0x7d,0x80,0x84,0x87,0x89,0x8a,0x89,0x86,0x82,0x7e,0x7a,0x77,0x75,0x75,0x77,0x7a,0x7d,0x7f,0x81,0x81,0x80,0x7e,0x7b,0x78,0x77,0x77,0x78,0x7c,0x80,0x85,0x89,0x8c,0x8d,0x8c,0x8a,0x86,0x83,0x7f,0x7d,0x7d,0x7e,0x80,0x83,0x85,0x87,0x87,0x85,0x82,0x7e,0x79,0x75,0x73,0x72,0x73,0x76,0x79,0x7d,0x80,0x82,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x78,0x79,0x7c,0x80,0x84,0x87,0x89,0x88,0x87,0x83,0x7f,0x7b,0x78,0x77,0x77,0x79,0x7c,0x7f,0x82,0x84,0x84,0x83,0x80,0x7d,0x79,0x77,0x75,0x76,0x79,0x7c,0x81,0x85,0x88,0x8a,0x8a,0x88,0x85,0x82,0x80,0x7e,0x7e,0x80,0x83,0x86,0x89,0x8b,0x8c,0x8a,0x87,0x83,0x7e,0x7a,0x76,0x75,0x75,0x76,0x79,0x7b,0x7e,0x7f,0x7f,0x7d,0x7a,0x77,0x75,0x73,0x73,0x75,0x78,0x7c,0x80,0x84,0x86,0x87,0x86,0x83,0x7f,0x7b,0x78,0x76,0x76,0x77,0x79,0x7c,0x7f,0x81,0x81,0x80,0x7e,0x7b,0x77,0x75,0x73,0x73,0x75,0x79,0x7e,0x82,0x86,0x89,0x8a,0x89,0x86,0x84,0x81,0x7f,0x7f,0x80,0x83,0x86,0x8a,0x8d,0x8f,0x8e,0x8c,0x89,0x84,0x80,0x7d,0x7b,0x7b,0x7d,0x7f,0x83,0x85,0x87,0x87,0x85,0x81,0x7d,0x79,0x77,0x75,0x76,0x78,0x7c,0x80,0x83,0x86,0x87,0x86,0x83,0x80,0x7d,0x7a,0x79,0x79,0x7a,0x7c,0x7f,0x82,0x83,0x83,0x81,0x7e,0x7a,0x76,0x73,0x71,0x71,0x72,0x75,0x78,0x7b,0x7e,0x80,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7d,0x7f,0x82,0x86,0x8a,0x8c,0x8e,0x8e,0x8d,0x8a,0x87,0x83,0x81,0x7f,0x7f,0x80,0x82,0x84,0x86,0x87,0x87,0x85,0x83,0x80,0x7c,0x7a,0x78,0x78,0x7a,0x7d,0x81,0x85,0x88,0x8a,0x8a,0x88,0x86,0x82,0x7f,0x7c,0x7a,0x7a,0x7b,0x7e,0x80,0x82,0x83,0x83,0x81,0x7d,0x79,0x75,0x72,0x70,0x70,0x72,0x74,0x78,0x7b,0x7d,0x7e,0x7d,0x7b,0x78,0x75,0x73,0x72,0x72,0x75,0x79,0x7d,0x82,0x85,0x87,0x87,0x85,0x82,0x7f,0x7c,0x7b,0x7b,0x7c,0x7f,0x83,0x87,0x8a,0x8b,0x8a,0x87,0x83,0x7e,0x7a,0x77,0x76,0x77,0x7a,0x7f,0x83,0x87,0x89,0x8a,0x88,0x86,0x82,0x7f,0x7d,0x7d,0x7e,0x82,0x86,0x8a,0x8d,0x8f,0x8e,0x8c,0x87,0x83,0x7e,0x7a,0x78,0x78,0x79,0x7c,0x7f,0x81,0x82,0x82,0x80,0x7c,0x78,0x74,0x72,0x71,0x72,0x75,0x78,0x7d,0x80,0x83,0x84,0x83,0x81,0x7e,0x7b,0x79,0x77,0x78,0x79,0x7c,0x7f,0x81,0x83,0x84,0x83,0x81,0x7e,0x7b,0x79,0x77,0x77,0x78,0x7b,0x7e,0x81,0x84,0x86,0x87,0x86,0x84,0x81,0x7f,0x7d,0x7c,0x7d,0x7f,0x83,0x87,0x8a,0x8d,0x8f,0x8f,0x8d,0x89,0x85,0x82,0x7f,0x7d,0x7d,0x7f,0x81,0x84,0x86,0x87,0x87,0x84,0x80,0x7c,0x77,0x74,0x72,0x72,0x74,0x78,0x7c,0x7f,0x81,0x81,0x80,0x7c,0x78,0x74,0x71,0x71,0x73,0x77,0x7c,0x81,0x86,0x88,0x88,0x85,0x80,0x7a,0x75,0x71,0x6f,0x70,0x74,0x79,0x80,0x85,0x89,0x8a,0x88,0x83,0x7d,0x77,0x71,0x6f,0x6f,0x72,0x77,0x7e,0x85,0x8b,0x8e,0x8f,0x8d,0x89,0x85,0x81,0x7f,0x7e,0x80,0x84,0x89,0x8d,0x90,0x91,0x90,0x8c,0x86,0x7f,0x79,0x74,0x72,0x72,0x75,0x79,0x7d,0x81,0x82,0x82,0x7f,0x7b,0x76,0x72,0x6f,0x6f,0x72,0x77,0x7d,0x84,0x89,0x8c,0x8c,0x8a,0x85,0x7f,0x78,0x74,0x71,0x71,0x73,0x77,0x7b,0x7f,0x82,0x83,0x81,0x7e,0x79,0x75,0x72,0x71,0x72,0x75,0x79,0x7e,0x82,0x84,0x84,0x83,0x7f,0x7b,0x77,0x74,0x73,0x74,0x76,0x7b,0x80,0x85,0x89,0x8b,0x8c,0x8c,0x8a,0x88,0x86,0x84,0x84,0x85,0x86,0x88,0x8a,0x8b,0x8a,0x89,0x86,0x83,0x7f,0x7c,0x79,0x77,0x76,0x77,0x79,0x7c,0x80,0x83,0x86,0x88,0x89,0x89,0x88,0x88,0x87,0x86,0x86,0x86,0x86,0x86,0x86,0x84,0x81,0x7e,0x79,0x75,0x71,0x6f,0x6e,0x6f,0x72,0x76,0x7a,0x7e,0x80,0x82,0x81,0x7f,0x7c,0x7a,0x78,0x78,0x79,0x7c,0x80,0x84,0x88,0x8a,0x89,0x87,0x82,0x7d,0x79,0x75,0x74,0x75,0x79,0x7e,0x84,0x8a,0x8e,0x90,0x8f,0x8d,0x89,0x85,0x82,0x80,0x80,0x81,0x83,0x86,0x88,0x89,0x88,0x85,0x81,0x7c,0x78,0x75,0x75,0x76,0x7a,0x7f,0x84,0x88,0x8b,0x8c,0x8a,0x87,0x83,0x7e,0x7a,0x78,0x76,0x77,0x78,0x79,0x7b,0x7b,0x7a,0x78,0x75,0x71,0x6d,0x6a,0x69,0x6a,0x6d,0x72,0x77,0x7d,0x82,0x86,0x88,0x88,0x87,0x85,0x83,0x81,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x81,0x7f,0x7d,0x7a,0x76,0x73,0x72,0x71,0x73,0x77,0x7c,0x81,0x87,0x8b,0x8e,0x90,0x8f,0x8d,0x8a,0x88,0x86,0x85,0x85,0x86,0x87,0x89,0x89,0x88,0x86,0x82,0x7e,0x79,0x75,0x72,0x71,0x72,0x75,0x79,0x7e,0x82,0x85,0x87,0x87,0x85,0x83,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x83,0x81,0x7f,0x7b,0x79,0x77,0x76,0x77,0x7a,0x7e,0x82,0x86,0x89,0x8a,0x8a,0x88,0x85,0x82,0x7e,0x7c,0x7a,0x7a,0x7b,0x7d,0x7e,0x7f,0x7f,0x7d,0x7b,0x78,0x75,0x73,0x72,0x73,0x76,0x7b,0x81,0x87,0x8c,0x8f,0x91,0x91,0x8f,0x8b,0x88,0x85,0x83,0x82,0x83,0x84,0x85,0x86,0x85,0x83,0x80,0x7c,0x78,0x74,0x72,0x71,0x73,0x76,0x7b,0x80,0x84,0x88,0x8a,0x8a,0x88,0x86,0x83,0x80,0x7e,0x7e,0x7e,0x80,0x81,0x83,0x83,0x81,0x7e,0x7b,0x76,0x72,0x6f,0x6e,0x6e,0x71,0x75,0x7a,0x7f,0x82,0x85,0x86,0x85,0x83,0x80,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x80,0x81,0x80,0x7e,0x7b,0x78,0x76,0x75,0x75,0x77,0x7b,0x80,0x85,0x89,0x8d,0x8f,0x8f,0x8e,0x8b,0x88,0x85,0x82,0x81,0x80,0x81,0x82,0x82,0x82,0x81,0x7f,0x7c,0x79,0x76,0x73,0x73,0x74,0x76,0x7a,0x7f,0x84,0x88,0x8b,0x8c,0x8c,0x8a,0x87,0x83,0x81,0x7f,0x7e,0x7d,0x7e,0x7e,0x7e,0x7d,0x7b,0x78,0x74,0x70,0x6d,0x6c,0x6c,0x6e,0x72,0x78,0x7d,0x82,0x87,0x89,0x8a,0x89,0x87,0x85,0x83,0x82,0x81,0x82,0x84,0x86,0x87,0x87,0x86,0x84,0x80,0x7c,0x79,0x76,0x76,0x77,0x79,0x7d,0x82,0x87,0x8b,0x8d,0x8e,0x8d,0x8b,0x88,0x85,0x82,0x81,0x81,0x82,0x83,0x84,0x85,0x85,0x84,0x81,0x7e,0x7b,0x79,0x78,0x78,0x7a,0x7d,0x81,0x85,0x88,0x8a,0x8b,0x8a,0x88,0x85,0x81,0x7e,0x7b,0x7a,0x79,0x7a,0x7b,0x7b,0x7b,0x7a,0x78,0x76,0x73,0x71,0x70,0x71,0x73,0x77,0x7c,0x82,0x87,0x8b,0x8e,0x8f,0x8e,0x8c,0x89,0x86,0x83,0x82,0x81,0x81,0x82,0x83,0x83,0x82,0x80,0x7d,0x7a,0x77,0x74,0x73,0x74,0x76,0x79,0x7e,0x83,0x88,0x8b,0x8d,0x8d,0x8c,0x8a,0x88,0x85,0x83,0x83,0x83,0x83,0x84,0x84,0x84,0x82,0x80,0x7c,0x78,0x75,0x72,0x71,0x72,0x74,0x77,0x7b,0x7f,0x82,0x84,0x85,0x84,0x82,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x78,0x78,0x7a,0x7d,0x81,0x85,0x89,0x8b,0x8c,0x8b,0x89,0x86,0x83,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7d,0x7b,0x78,0x76,0x76,0x76,0x79,0x7c,0x81,0x86,0x8a,0x8e,0x8f,0x90,0x8e,0x8b,0x87,0x84,0x81,0x7f,0x7e,0x7d,0x7e,0x7e,0x7e,0x7d,0x7b,0x79,0x76,0x73,0x71,0x71,0x72,0x75,0x79,0x7e,0x84,0x88,0x8b,0x8d,0x8d,0x8c,0x8a,0x87,0x85,0x83,0x82,0x82,0x83,0x83,0x83,0x83,0x81,0x7f,0x7c,0x79,0x76,0x75,0x74,0x76,0x78,0x7c,0x80,0x84,0x86,0x88,0x88,0x86,0x84,0x81,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7c,0x7a,0x77,0x76,0x76,0x77,0x79,0x7c,0x80,0x84,0x87,0x89,0x8a,0x89,0x87,0x84,0x81,0x7e,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7d,0x7b,0x79,0x78,0x78,0x78,0x7b,0x7e,0x82,0x87,0x8b,0x8e,0x8f,0x8f,0x8d,0x8a,0x87,0x83,0x81,0x7e,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x79,0x77,0x75,0x72,0x71,0x71,0x72,0x75,0x79,0x7e,0x83,0x87,0x89,0x8a,0x8a,0x88,0x86,0x83,0x81,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x7f,0x7e,0x7d,0x7a,0x78,0x76,0x75,0x75,0x77,0x7a,0x7e,0x83,0x86,0x89,0x8b,0x8b,0x8a,0x88,0x85,0x83,0x81,0x81,0x81,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x7e,0x7c,0x7a,0x7a,0x7b,0x7e,0x81,0x84,0x88,0x8a,0x8c,0x8b,0x8a,0x87,0x84,0x80,0x7d,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7d,0x7c,0x7b,0x79,0x78,0x77,0x77,0x79,0x7b,0x7f,0x83,0x87,0x8b,0x8d,0x8e,0x8d,0x8b,0x87,0x84,0x81,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x79,0x77,0x75,0x74,0x74,0x75,0x77,0x7a,0x7f,0x84,0x88,0x8c,0x8e,0x8f,0x8f,0x8d,0x8a,0x87,0x85,0x84,0x83,0x82,0x83,0x83,0x82,0x82,0x80,0x7e,0x7b,0x79,0x77,0x77,0x78,0x7a,0x7d,0x81,0x85,0x88,0x8a,0x8b,0x8a,0x89,0x86,0x84,0x81,0x80,0x7f,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x78,0x7a,0x7d,0x80,0x83,0x85,0x86,0x85,0x84,0x81,0x7e,0x7b,0x79,0x77,0x77,0x77,0x77,0x78,0x79,0x79,0x79,0x79,0x78,0x77,0x77,0x78,0x7a,0x7d,0x81,0x85,0x8a,0x8d,0x8f,0x90,0x8f,0x8d,0x8a,0x86,0x83,0x81,0x7f,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7c,0x7b,0x79,0x78,0x77,0x78,0x7a,0x7e,0x82,0x86,0x8a,0x8d,0x8e,0x8e,0x8d,0x8a,0x87,0x84,0x81,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x79,0x77,0x75,0x73,0x71,0x71,0x72,0x75,0x78,0x7c,0x80,0x83,0x85,0x86,0x86,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7c,0x7e,0x80,0x83,0x86,0x89,0x8b,0x8b,0x8b,0x89,0x86,0x83,0x81,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x80,0x83,0x87,0x8a,0x8c,0x8d,0x8d,0x8b,0x88,0x84,0x81,0x7e,0x7b,0x79,0x78,0x78,0x78,0x78,0x78,0x77,0x76,0x74,0x73,0x73,0x74,0x75,0x78,0x7c,0x81,0x85,0x89,0x8c,0x8d,0x8d,0x8b,0x89,0x86,0x84,0x82,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7a,0x78,0x76,0x74,0x73,0x74,0x76,0x78,0x7c,0x80,0x84,0x87,0x89,0x89,0x89,0x88,0x86,0x84,0x82,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x7b,0x7c,0x7d,0x80,0x82,0x85,0x87,0x89,0x89,0x88,0x86,0x84,0x81,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7b,0x7b,0x7b,0x7b,0x7d,0x80,0x83,0x86,0x88,0x8a,0x8a,0x8a,0x88,0x85,0x82,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x79,0x79,0x79,0x78,0x78,0x77,0x77,0x77,0x78,0x7b,0x7e,0x82,0x86,0x8a,0x8d,0x8f,0x90,0x8f,0x8e,0x8c,0x89,0x87,0x85,0x84,0x83,0x83,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x82,0x85,0x88,0x8a,0x8b,0x8b,0x8a,0x88,0x86,0x84,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7c,0x7a,0x78,0x77,0x77,0x78,0x7a,0x7d,0x7f,0x82,0x84,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x83,0x86,0x89,0x8b,0x8d,0x8e,0x8e,0x8d,0x8a,0x87,0x84,0x81,0x7f,0x7d,0x7c,0x7c,0x7c,0x7b,0x7b,0x7a,0x79,0x79,0x78,0x78,0x79,0x7b,0x7d,0x80,0x84,0x88,0x8b,0x8d,0x8e,0x8d,0x8c,0x8a,0x87,0x84,0x82,0x80,0x7e,0x7d,0x7c,0x7b,0x7a,0x78,0x77,0x75,0x74,0x73,0x73,0x74,0x76,0x78,0x7c,0x7f,0x83,0x86,0x88,0x89,0x89,0x88,0x87,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7b,0x7a,0x7a,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x87,0x87,0x86,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x84,0x87,0x89,0x8b,0x8c,0x8c,0x8b,0x89,0x86,0x83,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x79,0x79,0x79,0x78,0x78,0x79,0x7a,0x7c,0x7f,0x82,0x86,0x89,0x8b,0x8d,0x8d,0x8c,0x8a,0x88,0x85,0x82,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7a,0x79,0x77,0x76,0x75,0x74,0x75,0x76,0x79,0x7c,0x80,0x84,0x88,0x8a,0x8c,0x8c,0x8b,0x8a,0x88,0x86,0x84,0x84,0x83,0x84,0x84,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x83,0x85,0x86,0x87,0x86,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x83,0x83,0x83,0x83,0x83,0x82,0x80,0x7e,0x7a,0x77,0x74,0x72,0x71,0x72,0x74,0x78,0x7c,0x80,0x84,0x87,0x88,0x88,0x87,0x86,0x85,0x85,0x87,0x89,0x8b,0x8e,0x90,0x90,0x8f,0x8b,0x87,0x81,0x7c,0x77,0x75,0x74,0x75,0x77,0x7a,0x7d,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x80,0x83,0x87,0x8a,0x8b,0x8b,0x89,0x86,0x81,0x7d,0x79,0x76,0x75,0x76,0x78,0x7b,0x7d,0x7f,0x7f,0x7e,0x7d,0x7b,0x79,0x79,0x79,0x7b,0x7f,0x83,0x87,0x8a,0x8b,0x8b,0x89,0x86,0x82,0x7e,0x7b,0x7a,0x7a,0x7b,0x7e,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x83,0x82,0x82,0x83,0x84,0x86,0x88,0x8a,0x8a,0x89,0x87,0x83,0x7f,0x7b,0x77,0x74,0x73,0x73,0x74,0x76,0x79,0x7b,0x7d,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x83,0x86,0x89,0x8c,0x8d,0x8c,0x8a,0x87,0x82,0x7d,0x79,0x75,0x74,0x74,0x75,0x78,0x7b,0x7d,0x7f,0x7f,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x81,0x86,0x8a,0x8d,0x8f,0x8e,0x8b,0x87,0x82,0x7d,0x79,0x76,0x76,0x77,0x7a,0x7d,0x80,0x82,0x82,0x81,0x7e,0x7b,0x78,0x75,0x75,0x76,0x79,0x7d,0x82,0x85,0x87,0x87,0x85,0x81,0x7c,0x77,0x74,0x72,0x72,0x74,0x78,0x7d,0x82,0x85,0x87,0x86,0x84,0x81,0x7e,0x7c,0x7b,0x7c,0x7e,0x82,0x86,0x89,0x8b,0x8a,0x87,0x82,0x7c,0x75,0x70,0x6c,0x6b,0x6d,0x71,0x76,0x7c,0x81,0x84,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7e,0x81,0x85,0x8a,0x8e,0x91,0x92,0x90,0x8b,0x85,0x7f,0x78,0x73,0x70,0x70,0x72,0x75,0x7a,0x7e,0x81,0x82,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7e,0x82,0x86,0x8b,0x8f,0x91,0x91,0x8e,0x8a,0x85,0x7f,0x7a,0x77,0x76,0x77,0x79,0x7d,0x80,0x82,0x83,0x83,0x80,0x7d,0x79,0x77,0x75,0x76,0x78,0x7c,0x80,0x85,0x88,0x89,0x88,0x85,0x80,0x7b,0x76,0x73,0x72,0x73,0x76,0x7b,0x81,0x85,0x89,0x8a,0x89,0x86,0x82,0x7e,0x7c,0x7b,0x7c,0x7f,0x83,0x88,0x8b,0x8d,0x8c,0x89,0x83,0x7c,0x76,0x70,0x6d,0x6c,0x6f,0x73,0x78,0x7e,0x82,0x84,0x84,0x83,0x80,0x7d,0x7b,0x7a,0x7b,0x7e,0x82,0x87,0x8a,0x8c,0x8c,0x89,0x84,0x7d,0x76,0x70,0x6d,0x6b,0x6c,0x70,0x74,0x79,0x7d,0x80,0x80,0x7f,0x7d,0x7a,0x78,0x77,0x78,0x7c,0x81,0x87,0x8d,0x91,0x93,0x92,0x8f,0x89,0x83,0x7c,0x77,0x74,0x74,0x76,0x7a,0x7f,0x84,0x87,0x88,0x87,0x84,0x80,0x7c,0x79,0x77,0x78,0x7b,0x80,0x85,0x8a,0x8d,0x8d,0x8b,0x87,0x81,0x7a,0x75,0x71,0x70,0x72,0x76,0x7b,0x81,0x85,0x87,0x86,0x84,0x80,0x7b,0x77,0x75,0x76,0x78,0x7d,0x82,0x87,0x8a,0x8b,0x8a,0x86,0x80,0x79,0x73,0x6f,0x6e,0x6f,0x73,0x78,0x7e,0x83,0x87,0x88,0x88,0x87,0x84,0x82,0x80,0x80,0x82,0x85,0x89,0x8d,0x8f,0x90,0x8e,0x8b,0x85,0x7f,0x79,0x74,0x70,0x6f,0x71,0x74,0x78,0x7c,0x80,0x83,0x83,0x82,0x80,0x7e,0x7b,0x7a,0x7a,0x7c,0x7f,0x83,0x87,0x8a,0x8b,0x8a,0x86,0x81,0x7c,0x76,0x71,0x6f,0x6f,0x71,0x75,0x7a,0x7f,0x83,0x85,0x84,0x83,0x7f,0x7c,0x7a,0x79,0x79,0x7c,0x80,0x85,0x89,0x8b,0x8c,0x8a,0x85,0x80,0x7b,0x77,0x74,0x74,0x77,0x7b,0x80,0x85,0x89,0x8b,0x8a,0x88,0x84,0x80,0x7d,0x7b,0x7b,0x7d,0x81,0x84,0x88,0x89,0x89,0x87,0x82,0x7d,0x77,0x72,0x6f,0x6e,0x6f,0x72,0x77,0x7b,0x80,0x83,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x79,0x7a,0x7c,0x7f,0x82,0x85,0x86,0x85,0x83,0x7f,0x79,0x74,0x70,0x6d,0x6d,0x6e,0x72,0x77,0x7d,0x82,0x85,0x86,0x85,0x83,0x80,0x7c,0x7a,0x7a,0x7c,0x80,0x85,0x8a,0x8e,0x91,0x91,0x8e,0x89,0x83,0x7d,0x78,0x75,0x76,0x78,0x7e,0x84,0x8a,0x8f,0x92,0x92,0x8f,0x8a,0x85,0x7f,0x7b,0x78,0x78,0x7a,0x7d,0x80,0x83,0x84,0x83,0x81,0x7c,0x78,0x74,0x71,0x70,0x71,0x74,0x79,0x7e,0x83,0x86,0x87,0x86,0x84,0x80,0x7c,0x78,0x75,0x75,0x75,0x77,0x79,0x7b,0x7c,0x7c,0x7a,0x76,0x72,0x6e,0x6b,0x6b,0x6c,0x70,0x76,0x7e,0x85,0x8b,0x90,0x92,0x92,0x90,0x8c,0x88,0x85,0x84,0x84,0x86,0x89,0x8d,0x8f,0x90,0x8f,0x8b,0x86,0x81,0x7c,0x78,0x76,0x77,0x7b,0x7f,0x84,0x89,0x8b,0x8b,0x89,0x85,0x7f,0x7a,0x76,0x73,0x73,0x74,0x77,0x7b,0x7e,0x7f,0x7f,0x7d,0x79,0x75,0x72,0x6f,0x6f,0x70,0x74,0x78,0x7c,0x80,0x81,0x81,0x7f,0x7b,0x76,0x72,0x6f,0x6d,0x6d,0x6f,0x72,0x76,0x79,0x7b,0x7c,0x7b,0x7a,0x78,0x77,0x77,0x79,0x7c,0x80,0x86,0x8b,0x90,0x93,0x93,0x92,0x8f,0x8a,0x85,0x81,0x7e,0x7c,0x7d,0x7f,0x83,0x86,0x8a,0x8b,0x8b,0x8a,0x86,0x82,0x7e,0x7c,0x7b,0x7c,0x7e,0x83,0x88,0x8c,0x8f,0x8f,0x8e,0x8a,0x84,0x7f,0x7a,0x76,0x75,0x76,0x79,0x7d,0x80,0x83,0x84,0x83,0x80,0x7c,0x77,0x73,0x71,0x71,0x73,0x77,0x7b,0x7f,0x82,0x83,0x82,0x7e,0x79,0x74,0x70,0x6e,0x6e,0x70,0x75,0x7a,0x80,0x84,0x87,0x87,0x85,0x82,0x7e,0x7a,0x78,0x78,0x7a,0x7d,0x82,0x86,0x89,0x8b,0x8a,0x88,0x84,0x7f,0x7b,0x78,0x77,0x78,0x7c,0x80,0x85,0x8a,0x8d,0x8e,0x8d,0x8b,0x88,0x84,0x81,0x7f,0x7f,0x81,0x84,0x87,0x8a,0x8b,0x8b,0x88,0x84,0x7e,0x79,0x73,0x70,0x6e,0x6f,0x72,0x75,0x7a,0x7d,0x7f,0x7f,0x7d,0x7a,0x76,0x72,0x70,0x6f,0x71,0x74,0x78,0x7d,0x81,0x83,0x83,0x80,0x7c,0x77,0x72,0x6e,0x6c,0x6d,0x6f,0x73,0x77,0x7b,0x7e,0x80,0x7f,0x7d,0x7a,0x77,0x76,0x76,0x78,0x7b,0x80,0x86,0x8a,0x8e,0x8f,0x8e,0x8c,0x88,0x84,0x81,0x80,0x80,0x82,0x86,0x8a,0x8e,0x90,0x91,0x90,0x8e,0x8a,0x86,0x82,0x7f,0x7e,0x7e,0x80,0x82,0x84,0x85,0x85,0x84,0x80,0x7c,0x77,0x72,0x6f,0x6e,0x6e,0x70,0x73,0x77,0x7b,0x7e,0x80,0x80,0x7e,0x7c,0x79,0x77,0x76,0x76,0x77,0x7a,0x7d,0x7f,0x81,0x81,0x80,0x7d,0x79,0x75,0x71,0x6f,0x6f,0x71,0x74,0x79,0x7d,0x82,0x84,0x86,0x85,0x83,0x81,0x7f,0x7e,0x7e,0x80,0x83,0x87,0x8b,0x8e,0x90,0x90,0x8d,0x89,0x84,0x80,0x7c,0x7a,0x7a,0x7c,0x80,0x84,0x88,0x8b,0x8c,0x8b,0x88,0x85,0x81,0x7e,0x7c,0x7c,0x7d,0x7f,0x82,0x85,0x86,0x86,0x84,0x80,0x7c,0x77,0x73,0x71,0x70,0x72,0x74,0x78,0x7c,0x7f,0x81,0x81,0x80,0x7d,0x7a,0x78,0x76,0x76,0x77,0x7a,0x7e,0x81,0x83,0x84,0x84,0x81,0x7d,0x79,0x75,0x73,0x72,0x73,0x76,0x7a,0x7e,0x83,0x86,0x87,0x87,0x86,0x83,0x81,0x7f,0x7e,0x7e,0x80,0x83,0x87,0x89,0x8b,0x8b,0x89,0x86,0x81,0x7d,0x79,0x76,0x76,0x77,0x7a,0x7e,0x82,0x85,0x87,0x88,0x87,0x84,0x81,0x7f,0x7d,0x7c,0x7d,0x80,0x82,0x85,0x87,0x87,0x86,0x83,0x7f,0x7a,0x76,0x72,0x71,0x71,0x73,0x76,0x7a,0x7e,0x81,0x82,0x82,0x80,0x7e,0x7b,0x78,0x77,0x77,0x79,0x7b,0x7f,0x82,0x84,0x85,0x84,0x81,0x7e,0x7b,0x78,0x76,0x76,0x78,0x7b,0x7f,0x83,0x87,0x89,0x8a,0x89,0x87,0x84,0x81,0x7f,0x7e,0x7f,0x80,0x83,0x86,0x88,0x89,0x88,0x85,0x82,0x7e,0x7a,0x77,0x75,0x76,0x79,0x7d,0x82,0x86,0x89,0x8b,0x8b,0x8a,0x87,0x84,0x81,0x80,0x7f,0x81,0x83,0x85,0x87,0x88,0x88,0x86,0x82,0x7d,0x78,0x74,0x71,0x70,0x71,0x74,0x78,0x7c,0x7f,0x81,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7e,0x81,0x85,0x87,0x88,0x87,0x85,0x82,0x7e,0x7a,0x77,0x76,0x76,0x78,0x7b,0x7f,0x82,0x84,0x86,0x85,0x84,0x81,0x7f,0x7d,0x7c,0x7c,0x7e,0x81,0x84,0x87,0x88,0x89,0x88,0x86,0x83,0x80,0x7d,0x7b,0x7b,0x7c,0x7f,0x82,0x86,0x88,0x8a,0x8a,0x89,0x86,0x83,0x80,0x7e,0x7c,0x7c,0x7d,0x7f,0x81,0x82,0x82,0x81,0x7e,0x7a,0x76,0x73,0x70,0x6f,0x70,0x72,0x76,0x7a,0x7f,0x82,0x84,0x84,0x83,0x81,0x7e,0x7c,0x7b,0x7b,0x7d,0x7f,0x82,0x84,0x85,0x85,0x83,0x80,0x7c,0x78,0x74,0x72,0x72,0x74,0x77,0x7b,0x80,0x84,0x87,0x88,0x88,0x87,0x85,0x83,0x82,0x82,0x83,0x86,0x88,0x8b,0x8d,0x8e,0x8d,0x8a,0x86,0x82,0x7e,0x7a,0x79,0x79,0x7a,0x7d,0x80,0x83,0x85,0x85,0x84,0x82,0x7f,0x7c,0x7a,0x78,0x78,0x79,0x7b,0x7e,0x80,0x82,0x82,0x81,0x7e,0x7b,0x77,0x75,0x73,0x73,0x75,0x78,0x7c,0x80,0x84,0x86,0x86,0x86,0x84,0x81,0x7e,0x7d,0x7c,0x7d,0x7e,0x81,0x83,0x85,0x85,0x85,0x83,0x80,0x7d,0x7a,0x78,0x78,0x7a,0x7d,0x81,0x86,0x8a,0x8d,0x8f,0x8f,0x8d,0x8b,0x89,0x86,0x84,0x84,0x84,0x85,0x87,0x88,0x88,0x86,0x84,0x80,0x7c,0x78,0x74,0x72,0x72,0x73,0x76,0x7a,0x7e,0x81,0x83,0x84,0x84,0x83,0x81,0x7f,0x7e,0x7e,0x7f,0x81,0x83,0x85,0x86,0x87,0x86,0x83,0x80,0x7c,0x79,0x77,0x76,0x76,0x78,0x7b,0x7f,0x82,0x85,0x86,0x86,0x85,0x83,0x81,0x7f,0x7f,0x7f,0x81,0x83,0x86,0x89,0x8a,0x8a,0x89,0x87,0x83,0x80,0x7d,0x7c,0x7c,0x7d,0x7f,0x82,0x85,0x87,0x89,0x88,0x87,0x85,0x82,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x81,0x81,0x7f,0x7c,0x7a,0x77,0x76,0x76,0x77,0x79,0x7d,0x81,0x85,0x87,0x89,0x89,0x87,0x85,0x83,0x81,0x7f,0x7f,0x7f,0x80,0x82,0x83,0x84,0x83,0x81,0x7f,0x7c,0x79,0x76,0x75,0x75,0x77,0x7a,0x7e,0x82,0x86,0x88,0x8a,0x8a,0x89,0x87,0x86,0x84,0x84,0x84,0x85,0x86,0x87,0x88,0x87,0x86,0x83,0x80,0x7c,0x79,0x77,0x75,0x75,0x77,0x7a,0x7d,0x80,0x82,0x83,0x83,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x79,0x78,0x7a,0x7c,0x7f,0x82,0x84,0x86,0x86,0x86,0x84,0x82,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x80,0x83,0x86,0x89,0x8a,0x8a,0x89,0x87,0x85,0x83,0x82,0x81,0x81,0x81,0x81,0x82,0x81,0x80,0x7e,0x7b,0x78,0x75,0x73,0x72,0x72,0x74,0x76,0x7a,0x7d,0x80,0x82,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x81,0x7e,0x7b,0x79,0x77,0x76,0x77,0x79,0x7b,0x7e,0x81,0x84,0x85,0x86,0x86,0x85,0x83,0x82,0x82,0x82,0x83,0x84,0x86,0x87,0x88,0x88,0x86,0x84,0x82,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x83,0x85,0x86,0x86,0x85,0x83,0x81,0x7e,0x7d,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7d,0x7c,0x7a,0x78,0x76,0x75,0x76,0x77,0x79,0x7d,0x80,0x83,0x86,0x87,0x87,0x87,0x85,0x83,0x82,0x81,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x7a,0x7c,0x7f,0x82,0x86,0x89,0x8c,0x8d,0x8d,0x8d,0x8c,0x8a,0x89,0x88,0x87,0x87,0x87,0x87,0x87,0x86,0x84,0x82,0x7f,0x7c,0x79,0x77,0x76,0x76,0x77,0x78,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x80,0x81,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x80,0x82,0x84,0x87,0x89,0x8b,0x8c,0x8c,0x8b,0x89,0x87,0x85,0x83,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7c,0x7a,0x78,0x77,0x75,0x75,0x75,0x77,0x79,0x7c,0x80,0x82,0x85,0x86,0x87,0x87,0x86,0x85,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7c,0x79,0x78,0x76,0x76,0x76,0x78,0x7a,0x7d,0x7f,0x82,0x84,0x85,0x85,0x85,0x85,0x84,0x84,0x84,0x85,0x86,0x86,0x87,0x87,0x87,0x86,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,0x79,0x78,0x77,0x76,0x76,0x75,0x76,0x77,0x79,0x7c,0x7f,0x82,0x85,0x87,0x89,0x8a,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x84,0x83,0x83,0x82,0x80,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x80,0x82,0x85,0x86,0x88,0x88,0x88,0x88,0x87,0x87,0x86,0x86,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x77,0x78,0x79,0x7a,0x7c,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x80,0x82,0x83,0x85,0x87,0x88,0x88,0x88,0x87,0x86,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x84,0x86,0x88,0x8a,0x8b,0x8b,0x8b,0x8a,0x88,0x87,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7c,0x7a,0x79,0x77,0x76,0x75,0x75,0x75,0x76,0x77,0x79,0x7c,0x7e,0x81,0x83,0x84,0x86,0x86,0x86,0x86,0x85,0x84,0x83,0x83,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x83,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x82,0x83,0x84,0x85,0x86,0x86,0x86,0x86,0x85,0x83,0x82,0x80,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x78,0x78,0x78,0x78,0x7a,0x7b,0x7d,0x80,0x82,0x84,0x86,0x88,0x89,0x89,0x88,0x87,0x86,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7a,0x79,0x78,0x76,0x76,0x75,0x76,0x77,0x78,0x7b,0x7d,0x80,0x82,0x84,0x86,0x86,0x87,0x87,0x87,0x87,0x87,0x87,0x88,0x89,0x8a,0x8a,0x89,0x88,0x86,0x84,0x81,0x7e,0x7c,0x7a,0x79,0x7a,0x7b,0x7d,0x7e,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7c,0x7d,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7d,0x7c,0x7a,0x7a,0x7a,0x7c,0x7e,0x81,0x85,0x88,0x8b,0x8d,0x8f,0x8f,0x8f,0x8e,0x8c,0x8b,0x89,0x87,0x86,0x84,0x83,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x77,0x76,0x76,0x76,0x76,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x75,0x75,0x76,0x78,0x7a,0x7c,0x7d,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x75,0x75,0x75,0x76,0x78,0x7a,0x7c,0x7e,0x81,0x83,0x84,0x85,0x86,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7b,0x79,0x77,0x75,0x74,0x72,0x72,0x73,0x75,0x77,0x7a,0x7d,0x80,0x83,0x85,0x86,0x87,0x87,0x88,0x88,0x89,0x89,0x8a,0x8a,0x8a,0x89,0x88,0x85,0x82,0x7f,0x7b,0x79,0x77,0x77,0x77,0x79,0x7a,0x7c,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x82,0x84,0x85,0x87,0x87,0x87,0x86,0x84,0x82,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x78,0x79,0x7a,0x7c,0x7f,0x81,0x84,0x86,0x88,0x89,0x8a,0x8a,0x8a,0x89,0x89,0x88,0x88,0x87,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x76,0x74,0x73,0x73,0x73,0x74,0x75,0x77,0x7a,0x7c,0x7e,0x81,0x83,0x84,0x86,0x87,0x87,0x87,0x87,0x87,0x86,0x86,0x84,0x83,0x80,0x7e,0x7b,0x79,0x76,0x74,0x73,0x73,0x73,0x74,0x75,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7c,0x7e,0x7f,0x81,0x83,0x85,0x87,0x88,0x88,0x88,0x86,0x85,0x83,0x81,0x80,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7d,0x7b,0x79,0x78,0x77,0x77,0x78,0x7a,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x80,0x80,0x7e,0x7c,0x7a,0x78,0x75,0x73,0x72,0x71,0x72,0x73,0x76,0x78,0x7b,0x7e,0x80,0x83,0x85,0x86,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8d,0x8c,0x8b,0x8a,0x87,0x85,0x82,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x84,0x85,0x86,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x86,0x89,0x8b,0x8c,0x8c,0x8b,0x8a,0x88,0x86,0x85,0x84,0x83,0x83,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x77,0x73,0x71,0x6f,0x6d,0x6d,0x6f,0x71,0x74,0x77,0x7a,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7c,0x79,0x75,0x72,0x70,0x6e,0x6e,0x6f,0x71,0x73,0x76,0x79,0x7b,0x7d,0x7e,0x80,0x81,0x82,0x83,0x85,0x87,0x89,0x8b,0x8c,0x8d,0x8c,0x8b,0x89,0x86,0x84,0x82,0x81,0x80,0x81,0x82,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7c,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x7e,0x7e,0x7d,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7b,0x79,0x77,0x75,0x73,0x71,0x70,0x70,0x71,0x73,0x76,0x79,0x7d,0x80,0x83,0x86,0x88,0x8a,0x8c,0x8d,0x8e,0x8f,0x90,0x90,0x90,0x90,0x8f,0x8d,0x8b,0x87,0x84,0x80,0x7d,0x7a,0x78,0x77,0x77,0x78,0x79,0x7a,0x7c,0x7e,0x7f,0x80,0x81,0x81,0x82,0x83,0x84,0x85,0x87,0x88,0x89,0x89,0x88,0x86,0x83,0x80,0x7c,0x79,0x77,0x75,0x74,0x75,0x75,0x77,0x78,0x78,0x78,0x77,0x75,0x73,0x71,0x70,0x70,0x70,0x71,0x73,0x76,0x78,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x81,0x84,0x88,0x8b,0x8d,0x8d,0x8d,0x8b,0x89,0x86,0x84,0x82,0x82,0x82,0x83,0x85,0x86,0x86,0x86,0x84,0x81,0x7d,0x7a,0x77,0x76,0x76,0x79,0x7d,0x83,0x88,0x8d,0x91,0x94,0x94,0x93,0x91,0x8e,0x8b,0x88,0x87,0x86,0x85,0x84,0x83,0x81,0x7e,0x7a,0x76,0x71,0x6c,0x69,0x67,0x67,0x69,0x6c,0x70,0x74,0x77,0x7a,0x7b,0x7c,0x7c,0x7b,0x7b,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x81,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x74,0x74,0x75,0x77,0x7a,0x7d,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x81,0x81,0x82,0x84,0x85,0x87,0x88,0x89,0x88,0x88,0x86,0x85,0x84,0x84,0x84,0x85,0x87,0x89,0x8b,0x8c,0x8c,0x8b,0x89,0x85,0x81,0x7d,0x79,0x76,0x74,0x73,0x73,0x73,0x74,0x74,0x74,0x73,0x72,0x71,0x71,0x72,0x74,0x77,0x7b,0x7f,0x84,0x88,0x8a,0x8c,0x8b,0x89,0x86,0x83,0x80,0x7d,0x7b,0x79,0x79,0x79,0x79,0x78,0x78,0x76,0x75,0x74,0x73,0x73,0x74,0x77,0x7a,0x7f,0x83,0x87,0x89,0x8b,0x8c,0x8b,0x8a,0x89,0x88,0x87,0x88,0x89,0x8b,0x8d,0x8e,0x8f,0x8e,0x8c,0x89,0x86,0x82,0x7f,0x7d,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x82,0x80,0x7d,0x7a,0x78,0x76,0x75,0x76,0x77,0x7a,0x7d,0x7f,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x84,0x83,0x81,0x7d,0x79,0x75,0x71,0x6f,0x6e,0x6e,0x70,0x72,0x74,0x77,0x78,0x78,0x78,0x77,0x77,0x77,0x78,0x7a,0x7d,0x82,0x86,0x8a,0x8e,0x8f,0x90,0x8f,0x8c,0x89,0x86,0x84,0x83,0x82,0x83,0x84,0x85,0x86,0x85,0x84,0x82,0x7f,0x7c,0x79,0x77,0x77,0x77,0x79,0x7c,0x7e,0x81,0x82,0x83,0x82,0x81,0x7f,0x7e,0x7c,0x7c,0x7d,0x7f,0x82,0x84,0x87,0x88,0x88,0x87,0x85,0x81,0x7e,0x7b,0x79,0x78,0x77,0x78,0x7a,0x7b,0x7b,0x7b,0x7a,0x78,0x75,0x72,0x70,0x6f,0x6f,0x70,0x73,0x77,0x7b,0x7f,0x82,0x84,0x86,0x86,0x86,0x85,0x86,0x87,0x88,0x8b,0x8d,0x90,0x91,0x91,0x90,0x8e,0x8a,0x86,0x82,0x7e,0x7c,0x7b,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7e,0x81,0x84,0x87,0x8a,0x8c,0x8c,0x8b,0x88,0x85,0x80,0x7c,0x79,0x77,0x76,0x76,0x77,0x78,0x79,0x79,0x78,0x77,0x74,0x71,0x6f,0x6e,0x6e,0x70,0x73,0x77,0x7b,0x7e,0x81,0x83,0x83,0x83,0x81,0x80,0x7f,0x7e,0x7f,0x81,0x84,0x87,0x8a,0x8b,0x8b,0x8a,0x88,0x85,0x81,0x7f,0x7d,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x83,0x82,0x80,0x7d,0x7a,0x78,0x77,0x78,0x7a,0x7d,0x81,0x85,0x89,0x8c,0x8d,0x8c,0x8b,0x88,0x86,0x84,0x83,0x83,0x84,0x85,0x85,0x85,0x84,0x82,0x7e,0x79,0x74,0x70,0x6c,0x6a,0x6a,0x6b,0x6e,0x71,0x74,0x77,0x79,0x7a,0x7a,0x7a,0x7a,0x7b,0x7d,0x80,0x83,0x87,0x8c,0x8f,0x91,0x92,0x90,0x8d,0x89,0x85,0x81,0x7d,0x7b,0x7a,0x7b,0x7c,0x7e,0x7f,0x7f,0x7e,0x7c,0x7a,0x77,0x75,0x75,0x76,0x78,0x7c,0x80,0x84,0x88,0x8b,0x8c,0x8b,0x89,0x87,0x84,0x82,0x81,0x81,0x83,0x85,0x88,0x89,0x8a,0x89,0x87,0x83,0x7f,0x7b,0x77,0x75,0x74,0x75,0x76,0x79,0x7a,0x7c,0x7b,0x7a,0x78,0x75,0x72,0x71,0x71,0x73,0x76,0x7b,0x81,0x86,0x8a,0x8d,0x8e,0x8d,0x8c,0x89,0x86,0x84,0x83,0x83,0x85,0x86,0x87,0x88,0x87,0x85,0x81,0x7c,0x77,0x73,0x70,0x6f,0x6f,0x72,0x76,0x7a,0x7e,0x82,0x84,0x85,0x84,0x83,0x82,0x82,0x82,0x84,0x86,0x8a,0x8d,0x8f,0x90,0x8f,0x8d,0x89,0x83,0x7e,0x79,0x75,0x73,0x72,0x73,0x75,0x77,0x79,0x79,0x79,0x78,0x76,0x74,0x72,0x72,0x73,0x76,0x7a,0x7f,0x84,0x88,0x8b,0x8c,0x8c,0x8a,0x87,0x84,0x82,0x81,0x81,0x82,0x84,0x86,0x87,0x88,0x87,0x84,0x81,0x7c,0x78,0x75,0x73,0x73,0x75,0x78,0x7b,0x7e,0x80,0x81,0x81,0x7f,0x7d,0x7b,0x79,0x79,0x7a,0x7d,0x81,0x85,0x89,0x8d,0x8e,0x8e,0x8c,0x89,0x85,0x82,0x7f,0x7d,0x7d,0x7d,0x7f,0x80,0x81,0x81,0x7f,0x7c,0x79,0x74,0x71,0x6e,0x6e,0x6f,0x72,0x76,0x7b,0x80,0x84,0x86,0x87,0x87,0x86,0x85,0x84,0x85,0x86,0x89,0x8c,0x8f,0x91,0x91,0x90,0x8d,0x88,0x83,0x7e,0x79,0x76,0x74,0x74,0x76,0x78,0x7a,0x7c,0x7d,0x7d,0x7b,0x7a,0x78,0x77,0x77,0x79,0x7c,0x81,0x86,0x8a,0x8e,0x90,0x90,0x8e,0x8b,0x87,0x84,0x81,0x7f,0x7f,0x81,0x83,0x84,0x86,0x86,0x85,0x82,0x7e,0x7a,0x76,0x74,0x72,0x73,0x75,0x78,0x7c,0x7f,0x81,0x82,0x82,0x80,0x7e,0x7c,0x7a,0x7a,0x7c,0x7f,0x83,0x88,0x8c,0x8f,0x90,0x8f,0x8c,0x89,0x84,0x80,0x7e,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x80,0x7e,0x7a,0x76,0x72,0x6f,0x6d,0x6e,0x70,0x74,0x79,0x7f,0x84,0x88,0x8a,0x8a,0x89,0x87,0x85,0x84,0x84,0x85,0x87,0x8a,0x8c,0x8e,0x8e,0x8c,0x88,0x82,0x7c,0x77,0x72,0x6f,0x6e,0x6f,0x72,0x75,0x78,0x7b,0x7c,0x7c,0x7b,0x79,0x78,0x77,0x77,0x79,0x7d,0x81,0x86,0x8b,0x8e,0x8f,0x8f,0x8d,0x89,0x85,0x81,0x7e,0x7d,0x7d,0x7e,0x80,0x82,0x83,0x83,0x82,0x7f,0x7b,0x77,0x74,0x72,0x71,0x72,0x75,0x79,0x7d,0x81,0x84,0x85,0x85,0x84,0x82,0x7f,0x7e,0x7e,0x7f,0x82,0x86,0x8a,0x8e,0x90,0x91,0x8f,0x8c,0x88,0x84,0x7f,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x81,0x81,0x7f,0x7c,0x78,0x74,0x70,0x6e,0x6e,0x70,0x74,0x79,0x7e,0x83,0x87,0x89,0x8a,0x89,0x87,0x85,0x83,0x83,0x83,0x85,0x87,0x89,0x8b,0x8b,0x8a,0x87,0x82,0x7c,0x76,0x71,0x6e,0x6c,0x6d,0x6f,0x73,0x77,0x7a,0x7d,0x7e,0x7e,0x7d,0x7c,0x7c,0x7d,0x7f,0x82,0x87,0x8c,0x90,0x94,0x95,0x94,0x91,0x8d,0x87,0x82,0x7e,0x7b,0x7a,0x7b,0x7c,0x7f,0x81,0x81,0x81,0x7f,0x7b,0x78,0x74,0x72,0x72,0x73,0x76,0x7a,0x7f,0x83,0x85,0x86,0x85,0x82,0x7f,0x7c,0x7a,0x79,0x7a,0x7d,0x80,0x85,0x88,0x8a,0x8b,0x8a,0x87,0x83,0x7f,0x7b,0x79,0x79,0x79,0x7b,0x7d,0x7f,0x80,0x7f,0x7d,0x7a,0x76,0x73,0x70,0x70,0x71,0x74,0x79,0x7f,0x85,0x8a,0x8d,0x8f,0x90,0x8f,0x8d,0x8b,0x8a,0x89,0x8a,0x8b,0x8d,0x8e,0x8e,0x8c,0x89,0x84,0x7e,0x78,0x72,0x6e,0x6b,0x6b,0x6c,0x70,0x74,0x79,0x7d,0x80,0x82,0x82,0x81,0x80,0x80,0x80,0x82,0x85,0x88,0x8c,0x8f,0x91,0x91,0x8f,0x8b,0x85,0x7f,0x7a,0x76,0x73,0x73,0x74,0x77,0x7a,0x7c,0x7e,0x7e,0x7c,0x7a,0x77,0x74,0x73,0x73,0x76,0x79,0x7e,0x83,0x88,0x8a,0x8b,0x8a,0x88,0x85,0x82,0x80,0x7f,0x80,0x83,0x88,0x8c,0x90,0x92,0x92,0x90,0x8c,0x87,0x82,0x7e,0x7b,0x79,0x79,0x7b,0x7d,0x7f,0x80,0x80,0x7e,0x7b,0x78,0x74,0x72,0x72,0x74,0x77,0x7d,0x83,0x89,0x8d,0x90,0x91,0x90,0x8e,0x8a,0x87,0x84,0x82,0x81,0x81,0x82,0x82,0x82,0x80,0x7d,0x78,0x72,0x6d,0x68,0x65,0x64,0x66,0x6a,0x6f,0x75,0x7b,0x80,0x83,0x85,0x86,0x85,0x85,0x84,0x85,0x86,0x89,0x8c,0x8f,0x92,0x93,0x92,0x8f,0x8a,0x85,0x7f,0x7a,0x76,0x75,0x75,0x77,0x7a,0x7d,0x80,0x82,0x82,0x81,0x7f,0x7c,0x7b,0x7a,0x7b,0x7d,0x81,0x85,0x89,0x8c,0x8e,0x8d,0x8b,0x88,0x84,0x81,0x7e,0x7d,0x7d,0x7f,0x81,0x84,0x86,0x87,0x86,0x84,0x80,0x7b,0x76,0x72,0x70,0x6f,0x70,0x72,0x74,0x77,0x79,0x7a,0x79,0x77,0x75,0x73,0x71,0x72,0x75,0x79,0x7f,0x85,0x8b,0x90,0x93,0x94,0x93,0x90,0x8d,0x89,0x86,0x85,0x84,0x84,0x85,0x86,0x86,0x85,0x82,0x7e,0x79,0x74,0x6f,0x6d,0x6d,0x6f,0x73,0x79,0x7f,0x85,0x89,0x8c,0x8e,0x8d,0x8c,0x8a,0x89,0x88,0x89,0x8b,0x8d,0x8f,0x90,0x8f,0x8d,0x89,0x83,0x7d,0x76,0x71,0x6e,0x6c,0x6d,0x70,0x73,0x77,0x7a,0x7c,0x7c,0x7b,0x7a,0x78,0x76,0x76,0x77,0x7a,0x7e,0x83,0x87,0x8a,0x8c,0x8c,0x8a,0x87,0x83,0x7f,0x7d,0x7c,0x7d,0x7f,0x82,0x86,0x88,0x89,0x89,0x87,0x83,0x7f,0x7b,0x77,0x76,0x76,0x77,0x7a,0x7e,0x80,0x82,0x83,0x82,0x80,0x7d,0x7b,0x7a,0x7a,0x7c,0x80,0x86,0x8b,0x90,0x94,0x96,0x96,0x93,0x8f,0x8b,0x86,0x82,0x7f,0x7e,0x7e,0x7e,0x7f,0x7e,0x7d,0x7a,0x76,0x71,0x6d,0x6a,0x69,0x69,0x6c,0x71,0x77,0x7e,0x83,0x88,0x8b,0x8c,0x8b,0x8a,0x88,0x86,0x86,0x86,0x87,0x89,0x8a,0x8b,0x8a,0x88,0x84,0x7f,0x79,0x74,0x6f,0x6d,0x6c,0x6d,0x70,0x75,0x79,0x7d,0x80,0x82,0x82,0x82,0x81,0x81,0x81,0x82,0x84,0x87,0x8b,0x8e,0x8f,0x90,0x8f,0x8c,0x89,0x85,0x82,0x80,0x7f,0x80,0x82,0x84,0x86,0x87,0x87,0x86,0x83,0x7f,0x7b,0x77,0x74,0x72,0x73,0x74,0x77,0x79,0x7c,0x7d,0x7d,0x7c,0x7b,0x79,0x78,0x79,0x7b,0x7e,0x83,0x88,0x8d,0x90,0x92,0x92,0x90,0x8c,0x88,0x83,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x7e,0x7d,0x7b,0x78,0x75,0x71,0x6f,0x6e,0x6f,0x71,0x76,0x7b,0x81,0x86,0x8a,0x8d,0x8e,0x8e,0x8d,0x8c,0x8b,0x8a,0x8a,0x8b,0x8c,0x8c,0x8c,0x8b,0x89,0x85,0x81,0x7c,0x78,0x74,0x72,0x71,0x71,0x72,0x74,0x77,0x79,0x7c,0x7d,0x7f,0x7f,0x80,0x82,0x83,0x85,0x87,0x8a,0x8c,0x8e,0x8e,0x8e,0x8d,0x8b,0x89,0x86,0x84,0x82,0x81,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x77,0x78,0x79,0x7b,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x81,0x83,0x85,0x88,0x8a,0x8c,0x8d,0x8e,0x8d,0x8b,0x89,0x86,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7a,0x78,0x76,0x73,0x71,0x6f,0x6f,0x6f,0x72,0x76,0x7a,0x80,0x84,0x89,0x8c,0x8d,0x8e,0x8d,0x8c,0x8b,0x8a,0x8a,0x8a,0x8b,0x8c,0x8c,0x8b,0x89,0x85,0x81,0x7c,0x76,0x72,0x6e,0x6c,0x6c,0x6d,0x6f,0x72,0x75,0x77,0x79,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x83,0x85,0x88,0x8a,0x8b,0x8b,0x8a,0x87,0x85,0x82,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7d,0x7c,0x7a,0x78,0x76,0x75,0x74,0x75,0x76,0x78,0x7b,0x7d,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x84,0x87,0x8b,0x8e,0x90,0x91,0x91,0x8f,0x8d,0x8a,0x87,0x84,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7b,0x7a,0x78,0x76,0x74,0x73,0x72,0x73,0x75,0x78,0x7c,0x80,0x84,0x88,0x8b,0x8d,0x8e,0x8e,0x8e,0x8d,0x8c,0x8b,0x8b,0x8a,0x89,0x88,0x86,0x84,0x81,0x7d,0x79,0x75,0x71,0x6e,0x6d,0x6d,0x6e,0x70,0x72,0x76,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x85,0x87,0x89,0x8b,0x8d,0x8f,0x8f,0x8f,0x8d,0x8a,0x87,0x84,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7b,0x7a,0x78,0x77,0x77,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x82,0x82,0x81,0x81,0x81,0x82,0x83,0x85,0x87,0x88,0x89,0x89,0x88,0x86,0x84,0x81,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x76,0x76,0x75,0x74,0x73,0x72,0x72,0x72,0x73,0x76,0x79,0x7d,0x81,0x85,0x89,0x8c,0x8d,0x8f,0x8f,0x8f,0x8e,0x8e,0x8d,0x8d,0x8c,0x8b,0x8a,0x88,0x85,0x81,0x7d,0x79,0x76,0x72,0x70,0x6f,0x6f,0x70,0x73,0x75,0x78,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x85,0x86,0x87,0x89,0x8a,0x8c,0x8c,0x8c,0x8b,0x89,0x87,0x84,0x81,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x79,0x79,0x79,0x78,0x78,0x77,0x76,0x76,0x77,0x78,0x7a,0x7c,0x7f,0x82,0x84,0x85,0x86,0x86,0x86,0x85,0x85,0x84,0x85,0x86,0x87,0x88,0x8a,0x8a,0x8a,0x89,0x87,0x84,0x81,0x7e,0x7b,0x79,0x77,0x76,0x76,0x76,0x77,0x77,0x76,0x76,0x75,0x74,0x74,0x74,0x76,0x78,0x7b,0x7f,0x83,0x86,0x89,0x8b,0x8c,0x8c,0x8c,0x8a,0x89,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x7e,0x7b,0x78,0x75,0x72,0x70,0x70,0x70,0x72,0x74,0x77,0x7b,0x7e,0x81,0x83,0x85,0x87,0x88,0x89,0x8a,0x8c,0x8d,0x8f,0x90,0x90,0x90,0x8e,0x8c,0x88,0x84,0x81,0x7d,0x7a,0x78,0x77,0x76,0x76,0x76,0x76,0x76,0x75,0x74,0x74,0x73,0x73,0x74,0x75,0x77,0x79,0x7b,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x79,0x79,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x83,0x86,0x8a,0x8d,0x90,0x92,0x93,0x94,0x93,0x92,0x90,0x8e,0x8b,0x89,0x88,0x86,0x84,0x82,0x7f,0x7c,0x79,0x75,0x72,0x70,0x6e,0x6d,0x6e,0x70,0x72,0x76,0x79,0x7c,0x7e,0x80,0x81,0x82,0x82,0x83,0x83,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x7f,0x7b,0x78,0x75,0x72,0x71,0x70,0x70,0x71,0x72,0x74,0x75,0x76,0x76,0x77,0x77,0x78,0x7a,0x7c,0x7f,0x82,0x85,0x88,0x8a,0x8c,0x8c,0x8c,0x8c,0x8b,0x8a,0x89,0x89,0x89,0x8a,0x8a,0x8b,0x8b,0x8a,0x89,0x87,0x85,0x83,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x82,0x7f,0x7d,0x7a,0x79,0x77,0x76,0x75,0x73,0x72,0x70,0x6e,0x6c,0x6b,0x6a,0x6a,0x6b,0x6d,0x71,0x75,0x7a,0x7e,0x82,0x86,0x88,0x8a,0x8a,0x8b,0x8b,0x8c,0x8c,0x8d,0x8f,0x8f,0x8f,0x8f,0x8d,0x8a,0x86,0x82,0x7f,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x81,0x82,0x84,0x86,0x88,0x8a,0x8b,0x8b,0x8a,0x88,0x86,0x83,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7d,0x7a,0x78,0x75,0x73,0x71,0x70,0x70,0x71,0x72,0x74,0x76,0x77,0x78,0x78,0x78,0x78,0x79,0x79,0x7b,0x7d,0x7f,0x82,0x85,0x88,0x8a,0x8a,0x8a,0x89,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7a,0x78,0x77,0x75,0x75,0x75,0x77,0x79,0x7d,0x80,0x85,0x88,0x8b,0x8d,0x8e,0x8e,0x8e,0x8d,0x8b,0x8b,0x8a,0x89,0x89,0x88,0x87,0x85,0x82,0x7e,0x7a,0x76,0x73,0x70,0x6f,0x6f,0x70,0x72,0x74,0x76,0x78,0x79,0x79,0x78,0x77,0x77,0x77,0x78,0x79,0x7c,0x7f,0x81,0x83,0x84,0x84,0x83,0x81,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7b,0x7b,0x7a,0x79,0x77,0x76,0x75,0x75,0x76,0x78,0x7a,0x7d,0x7f,0x81,0x82,0x82,0x82,0x82,0x82,0x84,0x86,0x89,0x8d,0x91,0x94,0x96,0x96,0x95,0x92,0x8e,0x8a,0x85,0x81,0x7e,0x7c,0x7b,0x7c,0x7d,0x7d,0x7d,0x7d,0x7b,0x79,0x76,0x73,0x71,0x71,0x71,0x73,0x76,0x7a,0x7e,0x81,0x84,0x85,0x85,0x84,0x82,0x80,0x7d,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7a,0x79,0x77,0x75,0x72,0x70,0x6f,0x6f,0x70,0x72,0x75,0x78,0x7b,0x7d,0x7e,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x80,0x83,0x86,0x8b,0x8f,0x92,0x94,0x95,0x94,0x92,0x8e,0x8b,0x88,0x85,0x84,0x83,0x83,0x83,0x83,0x81,0x7f,0x7c,0x78,0x73,0x70,0x6e,0x6d,0x6e,0x72,0x76,0x7c,0x81,0x86,0x89,0x8a,0x8a,0x89,0x87,0x85,0x84,0x84,0x85,0x87,0x89,0x8a,0x8a,0x89,0x86,0x81,0x7b,0x75,0x70,0x6c,0x6b,0x6b,0x6e,0x71,0x76,0x79,0x7c,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x7a,0x7c,0x7f,0x83,0x86,0x89,0x8a,0x8b,0x8a,0x88,0x86,0x85,0x84,0x83,0x84,0x86,0x87,0x88,0x88,0x87,0x85,0x82,0x7e,0x7b,0x78,0x76,0x75,0x76,0x78,0x7a,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x84,0x88,0x8b,0x8f,0x91,0x92,0x91,0x8f,0x8d,0x89,0x85,0x81,0x7d,0x7a,0x78,0x76,0x75,0x74,0x73,0x72,0x71,0x70,0x6f,0x6e,0x6e,0x6e,0x70,0x73,0x76,0x7a,0x7e,0x82,0x85,0x87,0x88,0x88,0x86,0x85,0x83,0x81,0x81,0x80,0x81,0x81,0x82,0x82,0x82,0x80,0x7e,0x7b,0x79,0x76,0x75,0x75,0x77,0x7a,0x7d,0x80,0x83,0x85,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7e,0x7f,0x82,0x85,0x88,0x8b,0x8c,0x8d,0x8c,0x8a,0x87,0x85,0x83,0x83,0x83,0x85,0x86,0x88,0x88,0x87,0x85,0x81,0x7c,0x77,0x73,0x70,0x6e,0x6e,0x6f,0x71,0x73,0x76,0x77,0x78,0x78,0x77,0x77,0x77,0x78,0x7b,0x7e,0x83,0x87,0x8b,0x8f,0x90,0x90,0x8f,0x8c,0x88,0x84,0x80,0x7d,0x7b,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x79,0x79,0x78,0x77,0x78,0x79,0x7b,0x7f,0x83,0x87,0x8c,0x8f,0x92,0x93,0x92,0x91,0x8e,0x8b,0x88,0x86,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7b,0x78,0x75,0x73,0x71,0x70,0x71,0x73,0x76,0x79,0x7c,0x7f,0x81,0x81,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x84,0x82,0x80,0x7d,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x83,0x81,0x7e,0x7a,0x77,0x75,0x73,0x74,0x75,0x78,0x7b,0x7e,0x80,0x81,0x82,0x82,0x81,0x81,0x81,0x83,0x85,0x88,0x8c,0x8f,0x91,0x92,0x91,0x8e,0x8a,0x84,0x7f,0x7a,0x76,0x74,0x73,0x73,0x74,0x75,0x76,0x76,0x76,0x75,0x73,0x72,0x72,0x74,0x77,0x7b,0x80,0x86,0x8b,0x8f,0x91,0x92,0x91,0x8f,0x8b,0x88,0x85,0x83,0x81,0x81,0x81,0x81,0x81,0x80,0x7e,0x7b,0x78,0x75,0x73,0x72,0x72,0x74,0x77,0x7b,0x80,0x83,0x86,0x87,0x87,0x86,0x84,0x82,0x80,0x7f,0x7f,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x80,0x7e,0x7c,0x7c,0x7c,0x7e,0x80,0x82,0x84,0x86,0x86,0x84,0x82,0x7e,0x7b,0x78,0x76,0x75,0x76,0x78,0x7b,0x7e,0x80,0x82,0x83,0x83,0x83,0x83,0x82,0x83,0x85,0x87,0x8a,0x8e,0x90,0x92,0x93,0x91,0x8e,0x8a,0x84,0x7f,0x7a,0x77,0x75,0x75,0x75,0x76,0x78,0x79,0x7a,0x79,0x78,0x77,0x77,0x77,0x78,0x7b,0x7f,0x84,0x89,0x8d,0x90,0x92,0x91,0x8f,0x8c,0x88,0x83,0x80,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7a,0x79,0x77,0x74,0x72,0x71,0x70,0x72,0x75,0x79,0x7d,0x82,0x86,0x89,0x8a,0x89,0x88,0x86,0x84,0x82,0x82,0x82,0x84,0x86,0x88,0x8a,0x8a,0x89,0x87,0x85,0x81,0x7e,0x7c,0x7a,0x7b,0x7c,0x7e,0x81,0x83,0x84,0x84,0x83,0x81,0x7e,0x7a,0x78,0x76,0x76,0x77,0x79,0x7b,0x7e,0x81,0x82,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7f,0x81,0x83,0x86,0x88,0x8a,0x8a,0x88,0x85,0x81,0x7c,0x77,0x73,0x70,0x6f,0x70,0x71,0x74,0x76,0x79,0x7a,0x7a,0x7a,0x79,0x79,0x7a,0x7c,0x7f,0x83,0x88,0x8d,0x92,0x95,0x96,0x96,0x93,0x8f,0x8b,0x86,0x82,0x7f,0x7d,0x7d,0x7d,0x7e,0x7e,0x7d,0x7c,0x7a,0x77,0x75,0x73,0x73,0x74,0x77,0x7b,0x80,0x84,0x88,0x8b,0x8c,0x8b,0x8a,0x87,0x84,0x81,0x80,0x80,0x80,0x82,0x83,0x84,0x85,0x84,0x82,0x7f,0x7b,0x78,0x76,0x76,0x76,0x78,0x7b,0x7e,0x81,0x83,0x84,0x83,0x80,0x7d,0x7a,0x78,0x76,0x76,0x78,0x7b,0x7e,0x82,0x84,0x86,0x87,0x86,0x84,0x83,0x81,0x81,0x81,0x83,0x85,0x88,0x8a,0x8c,0x8b,0x8a,0x86,0x82,0x7d,0x78,0x74,0x71,0x70,0x71,0x73,0x76,0x79,0x7b,0x7c,0x7d,0x7c,0x7c,0x7b,0x7c,0x7d,0x80,0x84,0x88,0x8d,0x90,0x93,0x93,0x91,0x8e,0x89,0x84,0x80,0x7c,0x79,0x78,0x78,0x79,0x7a,0x7b,0x7a,0x79,0x77,0x75,0x73,0x72,0x72,0x74,0x77,0x7c,0x81,0x86,0x8a,0x8c,0x8d,0x8b,0x89,0x86,0x82,0x7f,0x7e,0x7d,0x7e,0x80,0x82,0x83,0x83,0x82,0x80,0x7d,0x79,0x76,0x74,0x73,0x74,0x77,0x7a,0x7e,0x82,0x84,0x85,0x84,0x82,0x7f,0x7c,0x7a,0x79,0x7a,0x7c,0x7f,0x83,0x86,0x89,0x8a,0x8a,0x89,0x87,0x85,0x83,0x82,0x83,0x85,0x87,0x8a,0x8c,0x8d,0x8d,0x8b,0x87,0x82,0x7d,0x78,0x75,0x73,0x73,0x74,0x77,0x7a,0x7c,0x7e,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x81,0x85,0x89,0x8d,0x90,0x91,0x90,0x8d,0x89,0x83,0x7e,0x79,0x75,0x73,0x72,0x73,0x75,0x76,0x78,0x78,0x78,0x76,0x75,0x73,0x73,0x74,0x76,0x7a,0x80,0x85,0x8a,0x8e,0x91,0x91,0x90,0x8d,0x89,0x86,0x83,0x81,0x81,0x82,0x83,0x85,0x87,0x87,0x86,0x83,0x80,0x7d,0x7a,0x78,0x78,0x79,0x7c,0x7f,0x83,0x87,0x89,0x89,0x88,0x85,0x82,0x7e,0x7c,0x7a,0x7a,0x7c,0x7f,0x82,0x84,0x86,0x87,0x86,0x84,0x81,0x7e,0x7b,0x7a,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x84,0x82,0x7f,0x7a,0x75,0x71,0x6e,0x6d,0x6e,0x71,0x74,0x78,0x7b,0x7d,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7f,0x82,0x86,0x8a,0x8e,0x91,0x93,0x92,0x8f,0x8b,0x86,0x80,0x7c,0x78,0x77,0x77,0x78,0x79,0x7b,0x7d,0x7d,0x7d,0x7b,0x7a,0x78,0x78,0x79,0x7b,0x7f,0x84,0x89,0x8e,0x91,0x92,0x92,0x8f,0x8b,0x87,0x82,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7c,0x7a,0x76,0x73,0x70,0x6f,0x6f,0x71,0x74,0x78,0x7d,0x80,0x83,0x83,0x82,0x80,0x7d,0x7a,0x78,0x77,0x77,0x7a,0x7d,0x80,0x83,0x86,0x86,0x86,0x84,0x81,0x7f,0x7d,0x7c,0x7d,0x7f,0x81,0x85,0x87,0x89,0x89,0x87,0x84,0x80,0x7c,0x78,0x76,0x75,0x77,0x79,0x7d,0x80,0x84,0x86,0x86,0x86,0x84,0x83,0x82,0x81,0x82,0x84,0x87,0x8b,0x8e,0x90,0x90,0x8e,0x8a,0x85,0x7f,0x79,0x74,0x71,0x6f,0x6f,0x71,0x73,0x75,0x76,0x77,0x76,0x75,0x74,0x73,0x73,0x74,0x77,0x7b,0x80,0x85,0x8a,0x8d,0x8e,0x8d,0x8b,0x87,0x82,0x7e,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x7f,0x7e,0x7c,0x7a,0x77,0x75,0x75,0x76,0x79,0x7d,0x82,0x86,0x8a,0x8c,0x8d,0x8c,0x89,0x86,0x83,0x80,0x7f,0x7f,0x80,0x82,0x85,0x87,0x88,0x88,0x86,0x83,0x7f,0x7c,0x7a,0x79,0x79,0x7b,0x7e,0x81,0x83,0x84,0x84,0x82,0x7f,0x7b,0x76,0x73,0x71,0x71,0x72,0x75,0x79,0x7d,0x80,0x82,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7f,0x82,0x85,0x89,0x8c,0x8e,0x8e,0x8d,0x89,0x84,0x7f,0x7a,0x75,0x73,0x72,0x73,0x76,0x78,0x7b,0x7d,0x7e,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7e,0x83,0x88,0x8d,0x91,0x93,0x94,0x92,0x8e,0x8a,0x85,0x80,0x7d,0x7b,0x7a,0x7b,0x7c,0x7e,0x7f,0x7f,0x7d,0x7b,0x78,0x75,0x74,0x73,0x74,0x77,0x7c,0x81,0x85,0x89,0x8b,0x8c,0x8a,0x88,0x84,0x81,0x7f,0x7e,0x7e,0x80,0x82,0x84,0x87,0x87,0x87,0x85,0x82,0x7f,0x7b,0x79,0x78,0x79,0x7b,0x7e,0x81,0x84,0x85,0x85,0x83,0x81,0x7d,0x79,0x76,0x75,0x75,0x77,0x7a,0x7d,0x81,0x84,0x86,0x86,0x85,0x83,0x82,0x80,0x80,0x81,0x83,0x86,0x89,0x8c,0x8d,0x8d,0x8b,0x87,0x82,0x7d,0x78,0x74,0x72,0x72,0x74,0x77,0x7a,0x7d,0x7f,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7e,0x81,0x85,0x89,0x8e,0x91,0x92,0x92,0x90,0x8b,0x86,0x81,0x7d,0x79,0x78,0x77,0x78,0x7a,0x7b,0x7c,0x7c,0x7b,0x79,0x76,0x74,0x73,0x73,0x75,0x78,0x7d,0x81,0x86,0x89,0x8b,0x8b,0x8a,0x87,0x83,0x80,0x7d,0x7c,0x7d,0x7e,0x80,0x83,0x84,0x85,0x85,0x83,0x80,0x7d,0x7a,0x79,0x78,0x79,0x7c,0x7f,0x83,0x86,0x87,0x87,0x86,0x83,0x7f,0x7c,0x79,0x78,0x78,0x7a,0x7d,0x81,0x84,0x86,0x87,0x87,0x85,0x83,0x80,0x7f,0x7e,0x7f,0x81,0x84,0x87,0x89,0x8b,0x8a,0x88,0x84,0x7f,0x7a,0x75,0x73,0x71,0x72,0x74,0x77,0x7a,0x7d,0x7f,0x80,0x7f,0x7e,0x7d,0x7c,0x7d,0x7e,0x81,0x85,0x8a,0x8d,0x90,0x91,0x90,0x8e,0x89,0x84,0x80,0x7b,0x78,0x77,0x77,0x79,0x7a,0x7c,0x7d,0x7d,0x7c,0x7a,0x78,0x76,0x75,0x75,0x77,0x7b,0x80,0x84,0x89,0x8c,0x8d,0x8d,0x8b,0x88,0x84,0x80,0x7e,0x7c,0x7d,0x7e,0x81,0x83,0x85,0x85,0x84,0x82,0x7f,0x7b,0x79,0x77,0x77,0x79,0x7c,0x80,0x84,0x86,0x88,0x88,0x86,0x83,0x7f,0x7c,0x79,0x79,0x79,0x7c,0x7f,0x83,0x86,0x88,0x89,0x88,0x85,0x83,0x80,0x7f,0x7e,0x7f,0x81,0x84,0x86,0x88,0x89,0x88,0x85,0x81,0x7d,0x78,0x74,0x72,0x71,0x72,0x74,0x76,0x79,0x7c,0x7e,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x85,0x87,0x8a,0x8c,0x8d,0x8d,0x8c,0x89,0x86,0x82,0x7f,0x7c,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7b,0x7d,0x7f,0x81,0x85,0x87,0x8a,0x8b,0x8b,0x8b,0x89,0x87,0x85,0x83,0x82,0x82,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x78,0x79,0x7b,0x7e,0x80,0x83,0x84,0x84,0x83,0x82,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x82,0x83,0x84,0x86,0x88,0x8a,0x8d,0x8e,0x8f,0x8f,0x8e,0x8c,0x89,0x86,0x82,0x7f,0x7c,0x7a,0x79,0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7c,0x7f,0x81,0x84,0x86,0x87,0x88,0x87,0x86,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x79,0x78,0x77,0x76,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7e,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x85,0x84,0x81,0x7e,0x7b,0x78,0x76,0x75,0x75,0x75,0x77,0x78,0x79,0x7b,0x7b,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x86,0x86,0x86,0x85,0x83,0x80,0x7d,0x7b,0x79,0x77,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x75,0x75,0x75,0x76,0x77,0x7a,0x7c,0x7f,0x82,0x84,0x86,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x84,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x74,0x74,0x75,0x77,0x78,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x85,0x87,0x89,0x8a,0x8a,0x89,0x87,0x85,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x83,0x85,0x87,0x89,0x89,0x89,0x87,0x86,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x77,0x76,0x76,0x75,0x76,0x77,0x78,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x84,0x85,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x83,0x84,0x85,0x86,0x87,0x87,0x86,0x84,0x82,0x80,0x7d,0x7b,0x79,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x77,0x78,0x78,0x7a,0x7c,0x7e,0x81,0x83,0x86,0x88,0x89,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x78,0x79,0x79,0x7b,0x7c,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x84,0x86,0x87,0x88,0x89,0x88,0x87,0x85,0x83,0x80,0x7e,0x7c,0x7a,0x7a,0x79,0x79,0x79,0x78,0x78,0x77,0x76,0x75,0x75,0x75,0x77,0x79,0x7c,0x7f,0x82,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7d,0x7b,0x78,0x76,0x74,0x74,0x74,0x76,0x79,0x7c,0x7f,0x81,0x83,0x84,0x85,0x84,0x84,0x83,0x83,0x83,0x84,0x86,0x87,0x88,0x89,0x89,0x88,0x87,0x85,0x83,0x81,0x80,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x79,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x81,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x78,0x77,0x77,0x78,0x78,0x79,0x78,0x78,0x77,0x76,0x75,0x75,0x75,0x76,0x77,0x7a,0x7c,0x7f,0x82,0x84,0x86,0x87,0x87,0x88,0x88,0x88,0x88,0x88,0x88,0x87,0x87,0x87,0x86,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7c,0x7c,0x7b,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x85,0x85,0x86,0x86,0x85,0x85,0x84,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7a,0x78,0x76,0x74,0x72,0x72,0x72,0x73,0x75,0x76,0x77,0x78,0x78,0x78,0x77,0x76,0x75,0x75,0x76,0x77,0x79,0x7b,0x7d,0x7f,0x80,0x7f,0x7e,0x7c,0x7a,0x79,0x78,0x79,0x7a,0x7d,0x81,0x84,0x87,0x89,0x8a,0x8a,0x89,0x88,0x87,0x86,0x85,0x85,0x86,0x87,0x87,0x87,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7c,0x7d,0x7f,0x82,0x85,0x88,0x8b,0x8c,0x8c,0x8c,0x8a,0x88,0x86,0x85,0x83,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7a,0x77,0x74,0x71,0x6e,0x6d,0x6c,0x6d,0x6f,0x72,0x75,0x78,0x7b,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x78,0x76,0x75,0x74,0x75,0x77,0x79,0x7c,0x7f,0x82,0x84,0x86,0x86,0x87,0x86,0x86,0x86,0x86,0x87,0x88,0x89,0x89,0x8a,0x89,0x88,0x86,0x83,0x81,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x75,0x74,0x74,0x74,0x75,0x77,0x79,0x7c,0x7e,0x80,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x78,0x75,0x73,0x71,0x6f,0x6e,0x6f,0x71,0x74,0x78,0x7c,0x80,0x84,0x87,0x89,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8c,0x8d,0x8d,0x8d,0x8c,0x8a,0x87,0x84,0x81,0x7e,0x7c,0x7b,0x7b,0x7d,0x7e,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x81,0x81,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x77,0x74,0x72,0x71,0x72,0x73,0x75,0x78,0x7b,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7a,0x7b,0x7b,0x7c,0x7c,0x7c,0x7b,0x7a,0x78,0x76,0x74,0x74,0x74,0x75,0x77,0x7a,0x7e,0x82,0x86,0x8a,0x8c,0x8e,0x8e,0x8e,0x8e,0x8d,0x8d,0x8c,0x8c,0x8c,0x8b,0x8a,0x89,0x87,0x84,0x81,0x7e,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7e,0x81,0x83,0x86,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x76,0x72,0x6f,0x6d,0x6c,0x6c,0x6d,0x70,0x73,0x76,0x78,0x7a,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x84,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x7a,0x7b,0x7d,0x80,0x83,0x86,0x89,0x8b,0x8b,0x8b,0x8a,0x89,0x88,0x87,0x86,0x86,0x87,0x87,0x87,0x87,0x86,0x84,0x82,0x7f,0x7d,0x7b,0x7b,0x7b,0x7c,0x7f,0x82,0x85,0x87,0x89,0x89,0x89,0x87,0x86,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7c,0x7b,0x79,0x77,0x74,0x70,0x6d,0x6b,0x69,0x69,0x6a,0x6d,0x71,0x75,0x7a,0x7e,0x81,0x83,0x84,0x85,0x85,0x84,0x84,0x85,0x85,0x86,0x87,0x88,0x88,0x87,0x85,0x82,0x7f,0x7c,0x79,0x78,0x77,0x78,0x7a,0x7d,0x81,0x84,0x87,0x88,0x89,0x89,0x89,0x88,0x88,0x88,0x89,0x8a,0x8b,0x8c,0x8c,0x8c,0x8a,0x88,0x85,0x81,0x7e,0x7b,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x78,0x79,0x79,0x7a,0x79,0x78,0x77,0x75,0x73,0x72,0x72,0x74,0x76,0x7a,0x7e,0x82,0x85,0x88,0x89,0x89,0x88,0x87,0x85,0x84,0x83,0x83,0x84,0x84,0x84,0x84,0x83,0x81,0x7e,0x7b,0x78,0x76,0x76,0x76,0x78,0x7c,0x80,0x84,0x88,0x8b,0x8e,0x8f,0x8f,0x8e,0x8d,0x8c,0x8b,0x8b,0x8a,0x8a,0x8a,0x89,0x87,0x84,0x80,0x7c,0x77,0x74,0x71,0x6f,0x6f,0x70,0x72,0x75,0x78,0x7b,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x83,0x83,0x84,0x83,0x81,0x7f,0x7c,0x79,0x76,0x74,0x74,0x74,0x76,0x79,0x7c,0x7f,0x81,0x83,0x83,0x82,0x81,0x80,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x7a,0x7c,0x80,0x84,0x88,0x8b,0x8c,0x8d,0x8c,0x8a,0x87,0x85,0x82,0x81,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7b,0x78,0x75,0x72,0x70,0x70,0x71,0x73,0x77,0x7b,0x80,0x84,0x87,0x89,0x8a,0x8a,0x89,0x87,0x86,0x85,0x85,0x85,0x84,0x84,0x83,0x82,0x7f,0x7c,0x78,0x75,0x72,0x70,0x6f,0x70,0x72,0x75,0x79,0x7d,0x81,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x88,0x85,0x82,0x7e,0x7c,0x7a,0x79,0x7a,0x7c,0x7f,0x82,0x85,0x87,0x88,0x88,0x87,0x85,0x84,0x82,0x81,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x78,0x79,0x7b,0x7e,0x82,0x86,0x89,0x8a,0x8a,0x89,0x87,0x85,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7a,0x77,0x75,0x73,0x71,0x71,0x73,0x76,0x7a,0x7f,0x84,0x89,0x8c,0x8e,0x8f,0x8f,0x8e,0x8c,0x8a,0x89,0x88,0x87,0x87,0x86,0x85,0x83,0x80,0x7d,0x79,0x75,0x73,0x71,0x71,0x72,0x75,0x79,0x7d,0x81,0x84,0x87,0x88,0x88,0x88,0x86,0x85,0x85,0x85,0x85,0x86,0x87,0x87,0x87,0x86,0x83,0x80,0x7d,0x79,0x76,0x75,0x75,0x76,0x79,0x7c,0x80,0x83,0x86,0x87,0x87,0x86,0x84,0x81,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x81,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x7a,0x7c,0x7f,0x84,0x88,0x8b,0x8e,0x8e,0x8d,0x8a,0x87,0x82,0x7e,0x7b,0x79,0x78,0x77,0x78,0x78,0x78,0x77,0x76,0x74,0x72,0x71,0x71,0x72,0x75,0x7a,0x80,0x86,0x8c,0x90,0x92,0x93,0x91,0x8e,0x8b,0x87,0x84,0x82,0x81,0x81,0x81,0x81,0x81,0x7f,0x7d,0x79,0x76,0x72,0x70,0x70,0x71,0x74,0x79,0x7e,0x82,0x86,0x89,0x89,0x89,0x87,0x84,0x82,0x80,0x80,0x80,0x81,0x82,0x83,0x83,0x82,0x80,0x7e,0x7b,0x79,0x77,0x76,0x77,0x79,0x7c,0x7f,0x82,0x85,0x86,0x85,0x84,0x81,0x7f,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7e,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7f,0x82,0x86,0x8a,0x8c,0x8e,0x8e,0x8d,0x8a,0x86,0x82,0x7e,0x7b,0x79,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7b,0x7a,0x79,0x77,0x76,0x76,0x78,0x7b,0x80,0x85,0x8a,0x8e,0x91,0x92,0x91,0x8f,0x8c,0x88,0x84,0x82,0x80,0x80,0x80,0x81,0x81,0x81,0x7f,0x7d,0x7a,0x76,0x73,0x72,0x72,0x73,0x76,0x7b,0x80,0x85,0x88,0x8a,0x8b,0x8a,0x87,0x85,0x82,0x81,0x80,0x81,0x83,0x85,0x86,0x87,0x86,0x84,0x81,0x7d,0x79,0x75,0x73,0x73,0x75,0x77,0x7b,0x7e,0x81,0x83,0x83,0x82,0x80,0x7d,0x7b,0x7a,0x7a,0x7b,0x7e,0x81,0x84,0x87,0x88,0x88,0x87,0x86,0x83,0x81,0x80,0x80,0x82,0x84,0x87,0x8a,0x8c,0x8d,0x8c,0x8a,0x86,0x82,0x7e,0x7a,0x78,0x77,0x78,0x79,0x7c,0x7e,0x7f,0x80,0x7f,0x7e,0x7c,0x7a,0x7a,0x7a,0x7c,0x7f,0x83,0x87,0x8a,0x8d,0x8e,0x8d,0x8a,0x86,0x82,0x7e,0x7a,0x78,0x77,0x77,0x78,0x79,0x79,0x79,0x78,0x76,0x74,0x72,0x71,0x71,0x73,0x76,0x7b,0x80,0x86,0x8a,0x8e,0x90,0x90,0x8f,0x8c,0x8a,0x88,0x86,0x86,0x87,0x88,0x8a,0x8b,0x8b,0x8a,0x88,0x85,0x81,0x7d,0x7a,0x78,0x78,0x79,0x7c,0x7f,0x82,0x85,0x86,0x86,0x84,0x82,0x7f,0x7d,0x7b,0x7b,0x7c,0x7f,0x81,0x84,0x86,0x87,0x86,0x84,0x81,0x7e,0x7b,0x79,0x79,0x7a,0x7d,0x80,0x83,0x85,0x86,0x85,0x82,0x7e,0x7a,0x75,0x72,0x71,0x71,0x73,0x75,0x79,0x7c,0x7e,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7d,0x7f,0x83,0x88,0x8d,0x90,0x93,0x93,0x92,0x8e,0x8b,0x86,0x82,0x7f,0x7e,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7c,0x79,0x77,0x75,0x75,0x77,0x7a,0x7e,0x83,0x87,0x8b,0x8d,0x8e,0x8d,0x8b,0x88,0x84,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7c,0x79,0x76,0x73,0x71,0x70,0x71,0x73,0x76,0x7a,0x7e,0x81,0x82,0x82,0x81,0x80,0x7d,0x7c,0x7b,0x7b,0x7c,0x7f,0x82,0x85,0x86,0x87,0x86,0x84,0x81,0x7e,0x7b,0x7a,0x7a,0x7c,0x7f,0x83,0x86,0x89,0x8a,0x89,0x86,0x82,0x7e,0x7a,0x77,0x76,0x77,0x79,0x7c,0x80,0x83,0x85,0x85,0x83,0x81,0x7e,0x7b,0x7a,0x7b,0x7e,0x83,0x88,0x8e,0x92,0x94,0x93,0x90,0x8b,0x85,0x7e,0x78,0x75,0x73,0x74,0x76,0x79,0x7c,0x7e,0x7f,0x7d,0x7b,0x77,0x74,0x72,0x72,0x74,0x78,0x7d,0x83,0x89,0x8d,0x8f,0x8f,0x8c,0x88,0x83,0x7f,0x7b,0x7a,0x7a,0x7c,0x7e,0x81,0x82,0x82,0x81,0x7d,0x79,0x75,0x72,0x70,0x71,0x73,0x77,0x7c,0x81,0x85,0x88,0x88,0x87,0x84,0x81,0x7e,0x7c,0x7c,0x7e,0x82,0x86,0x8a,0x8d,0x8f,0x8e,0x8c,0x88,0x83,0x7f,0x7c,0x7b,0x7c,0x7e,0x82,0x86,0x89,0x8b,0x8b,0x89,0x85,0x81,0x7d,0x7a,0x78,0x78,0x7a,0x7e,0x81,0x84,0x86,0x86,0x84,0x81,0x7e,0x7b,0x79,0x78,0x7a,0x7e,0x83,0x88,0x8c,0x8e,0x8e,0x8b,0x86,0x80,0x7b,0x76,0x72,0x72,0x73,0x76,0x79,0x7c,0x7f,0x7f,0x7e,0x7b,0x77,0x74,0x72,0x72,0x74,0x79,0x7f,0x85,0x8c,0x90,0x93,0x93,0x90,0x8c,0x88,0x83,0x81,0x80,0x81,0x83,0x86,0x89,0x8b,0x8b,0x89,0x85,0x7f,0x7a,0x76,0x73,0x73,0x75,0x79,0x7e,0x83,0x87,0x8a,0x8a,0x88,0x85,0x81,0x7d,0x7a,0x78,0x79,0x7b,0x7f,0x82,0x85,0x87,0x86,0x84,0x80,0x7b,0x77,0x73,0x71,0x71,0x73,0x77,0x7b,0x7f,0x82,0x83,0x82,0x80,0x7c,0x79,0x76,0x74,0x74,0x76,0x79,0x7d,0x80,0x83,0x85,0x84,0x83,0x80,0x7e,0x7c,0x7b,0x7c,0x7f,0x84,0x88,0x8d,0x90,0x92,0x91,0x8e,0x8a,0x84,0x7f,0x7b,0x78,0x78,0x79,0x7c,0x7f,0x81,0x83,0x83,0x81,0x7d,0x7a,0x77,0x75,0x75,0x77,0x7b,0x81,0x87,0x8c,0x90,0x91,0x90,0x8d,0x89,0x84,0x7f,0x7c,0x7b,0x7c,0x7e,0x81,0x83,0x84,0x84,0x81,0x7d,0x78,0x73,0x6f,0x6e,0x6f,0x72,0x78,0x7e,0x84,0x88,0x8a,0x8a,0x88,0x84,0x80,0x7c,0x7a,0x7a,0x7c,0x7f,0x84,0x88,0x8a,0x8b,0x89,0x86,0x81,0x7c,0x77,0x75,0x75,0x77,0x7b,0x80,0x84,0x88,0x89,0x89,0x86,0x82,0x7d,0x79,0x77,0x77,0x78,0x7c,0x80,0x83,0x86,0x87,0x87,0x85,0x81,0x7e,0x7c,0x7b,0x7b,0x7e,0x81,0x86,0x89,0x8b,0x8c,0x8a,0x86,0x82,0x7d,0x78,0x76,0x74,0x75,0x77,0x7a,0x7c,0x7e,0x7e,0x7d,0x7b,0x78,0x75,0x73,0x72,0x74,0x77,0x7b,0x80,0x85,0x89,0x8b,0x8b,0x8a,0x87,0x84,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x80,0x7e,0x7b,0x77,0x74,0x72,0x72,0x73,0x76,0x7a,0x7f,0x83,0x86,0x88,0x89,0x89,0x87,0x85,0x84,0x83,0x83,0x83,0x85,0x87,0x88,0x89,0x88,0x86,0x84,0x80,0x7d,0x79,0x77,0x76,0x76,0x78,0x7a,0x7d,0x7f,0x80,0x81,0x80,0x7f,0x7d,0x7b,0x7a,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7c,0x7d,0x7f,0x81,0x84,0x86,0x87,0x88,0x86,0x84,0x81,0x7e,0x7c,0x7a,0x7a,0x7a,0x7b,0x7d,0x7e,0x7f,0x7f,0x7e,0x7c,0x7a,0x79,0x78,0x79,0x7b,0x7e,0x81,0x85,0x89,0x8b,0x8c,0x8b,0x89,0x86,0x83,0x80,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7e,0x7d,0x7b,0x78,0x75,0x73,0x71,0x71,0x72,0x75,0x79,0x7d,0x81,0x85,0x87,0x87,0x87,0x86,0x84,0x82,0x82,0x81,0x82,0x83,0x85,0x86,0x87,0x86,0x85,0x82,0x7f,0x7c,0x7a,0x78,0x78,0x79,0x7a,0x7d,0x7f,0x82,0x83,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x78,0x79,0x7b,0x7d,0x7f,0x7f,0x7f,0x7e,0x7c,0x79,0x77,0x76,0x75,0x75,0x76,0x78,0x7a,0x7b,0x7c,0x7d,0x7c,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x80,0x84,0x87,0x8a,0x8c,0x8c,0x8b,0x8a,0x87,0x85,0x82,0x81,0x80,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7e,0x81,0x84,0x87,0x88,0x88,0x88,0x86,0x84,0x82,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x7f,0x7e,0x7d,0x7a,0x78,0x75,0x73,0x71,0x71,0x72,0x74,0x76,0x79,0x7b,0x7d,0x7e,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7f,0x81,0x84,0x86,0x88,0x88,0x88,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7b,0x7b,0x7b,0x7d,0x7f,0x81,0x84,0x86,0x87,0x87,0x86,0x84,0x82,0x7f,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,0x7a,0x78,0x77,0x75,0x73,0x72,0x72,0x72,0x74,0x76,0x79,0x7c,0x7f,0x81,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7c,0x7a,0x78,0x77,0x76,0x77,0x78,0x7b,0x7d,0x80,0x83,0x84,0x85,0x86,0x85,0x84,0x83,0x83,0x82,0x82,0x83,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7e,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x83,0x82,0x80,0x7f,0x7d,0x7c,0x7b,0x7c,0x7c,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7f,0x81,0x83,0x84,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7c,0x7c,0x7c,0x7b,0x7a,0x78,0x78,0x78,0x79,0x7b,0x7d,0x81,0x84,0x87,0x88,0x89,0x89,0x88,0x86,0x84,0x82,0x81,0x80,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7d,0x7b,0x79,0x77,0x77,0x78,0x7b,0x7e,0x81,0x84,0x86,0x87,0x86,0x85,0x84,0x82,0x80,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x7f,0x7d,0x7a,0x77,0x75,0x74,0x73,0x74,0x76,0x79,0x7c,0x7e,0x80,0x81,0x80,0x7f,0x7e,0x7d,0x7b,0x7b,0x7a,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7e,0x80,0x81,0x82,0x83,0x84,0x84,0x85,0x85,0x85,0x86,0x86,0x87,0x87,0x87,0x86,0x85,0x84,0x82,0x80,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x83,0x85,0x87,0x88,0x87,0x86,0x84,0x81,0x7f,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x7e,0x7d,0x7b,0x78,0x75,0x72,0x71,0x71,0x72,0x75,0x79,0x7c,0x7f,0x81,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x81,0x82,0x80,0x7e,0x7b,0x79,0x76,0x75,0x76,0x78,0x7b,0x7e,0x82,0x86,0x88,0x8a,0x8a,0x89,0x88,0x86,0x85,0x84,0x84,0x85,0x86,0x87,0x87,0x86,0x85,0x83,0x81,0x7e,0x7c,0x7a,0x7a,0x7a,0x7c,0x7e,0x81,0x84,0x86,0x87,0x87,0x86,0x85,0x83,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7d,0x7b,0x79,0x77,0x76,0x76,0x78,0x7a,0x7e,0x81,0x85,0x88,0x89,0x8a,0x89,0x86,0x84,0x81,0x7e,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7e,0x80,0x82,0x84,0x86,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x82,0x82,0x82,0x83,0x83,0x82,0x82,0x80,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x82,0x84,0x86,0x88,0x88,0x88,0x87,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7a,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x82,0x84,0x86,0x87,0x87,0x86,0x84,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x86,0x87,0x88,0x88,0x87,0x86,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7a,0x79,0x77,0x76,0x75,0x75,0x76,0x77,0x79,0x7c,0x7f,0x82,0x84,0x86,0x87,0x87,0x87,0x85,0x83,0x82,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7c,0x7d,0x80,0x82,0x85,0x87,0x88,0x89,0x88,0x87,0x85,0x83,0x82,0x81,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x80,0x7e,0x7c,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x82,0x84,0x86,0x87,0x88,0x87,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7c,0x7c,0x7c,0x7d,0x7d,0x7c,0x7b,0x7a,0x7a,0x79,0x7a,0x7b,0x7d,0x80,0x83,0x86,0x88,0x89,0x89,0x88,0x87,0x85,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x79,0x78,0x78,0x78,0x79,0x7c,0x7f,0x82,0x85,0x87,0x88,0x88,0x88,0x86,0x84,0x83,0x82,0x81,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7d,0x7e,0x81,0x83,0x84,0x85,0x85,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7c,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x88,0x87,0x85,0x83,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x83,0x86,0x88,0x8b,0x8d,0x8e,0x8d,0x8c,0x89,0x87,0x84,0x82,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x78,0x79,0x7a,0x7d,0x80,0x83,0x86,0x88,0x89,0x88,0x87,0x85,0x82,0x80,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x78,0x79,0x7c,0x7e,0x81,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x83,0x85,0x86,0x86,0x86,0x84,0x83,0x81,0x7f,0x7f,0x7f,0x80,0x82,0x84,0x86,0x87,0x88,0x87,0x86,0x83,0x80,0x7e,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7e,0x7f,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x7a,0x7b,0x7e,0x81,0x83,0x86,0x87,0x88,0x87,0x85,0x82,0x7f,0x7d,0x7b,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7c,0x7c,0x7a,0x79,0x78,0x77,0x78,0x79,0x7c,0x7f,0x83,0x87,0x8a,0x8c,0x8c,0x8c,0x8a,0x88,0x86,0x84,0x83,0x83,0x84,0x85,0x85,0x86,0x85,0x84,0x82,0x7f,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x85,0x85,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x82,0x80,0x7e,0x7c,0x7b,0x7a,0x7b,0x7c,0x7e,0x81,0x83,0x84,0x85,0x84,0x83,0x80,0x7e,0x7b,0x7a,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x80,0x82,0x85,0x88,0x8a,0x8b,0x8b,0x89,0x87,0x84,0x80,0x7e,0x7b,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,0x7c,0x7b,0x7a,0x78,0x77,0x76,0x77,0x79,0x7b,0x7f,0x83,0x86,0x88,0x89,0x89,0x88,0x86,0x84,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7e,0x7c,0x7a,0x77,0x76,0x75,0x76,0x77,0x7a,0x7d,0x80,0x83,0x85,0x85,0x85,0x84,0x83,0x81,0x80,0x80,0x80,0x81,0x83,0x84,0x85,0x86,0x85,0x84,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x82,0x81,0x7f,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x80,0x80,0x81,0x82,0x84,0x87,0x89,0x8b,0x8b,0x8b,0x89,0x86,0x82,0x7f,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7e,0x7e,0x7e,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7f,0x83,0x87,0x8a,0x8c,0x8d,0x8c,0x8a,0x87,0x84,0x82,0x80,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7a,0x78,0x76,0x74,0x74,0x76,0x78,0x7b,0x7f,0x83,0x86,0x88,0x89,0x88,0x87,0x85,0x84,0x83,0x82,0x83,0x84,0x85,0x86,0x87,0x86,0x85,0x83,0x80,0x7d,0x7b,0x7a,0x79,0x7a,0x7b,0x7e,0x80,0x82,0x83,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x82,0x80,0x7f,0x7d,0x7d,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x85,0x85,0x84,0x82,0x7f,0x7c,0x7a,0x78,0x77,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7c,0x7b,0x7a,0x7a,0x79,0x7a,0x7b,0x7d,0x80,0x84,0x87,0x8a,0x8c,0x8c,0x8c,0x8a,0x87,0x85,0x82,0x80,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7a,0x78,0x76,0x76,0x76,0x77,0x7a,0x7d,0x81,0x85,0x88,0x8a,0x8a,0x8a,0x88,0x86,0x84,0x82,0x81,0x80,0x80,0x81,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x77,0x75,0x74,0x74,0x75,0x78,0x7b,0x7e,0x81,0x82,0x83,0x82,0x80,0x7e,0x7c,0x7a,0x7a,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7d,0x7d,0x7f,0x81,0x84,0x87,0x89,0x8b,0x8a,0x89,0x86,0x82,0x7f,0x7c,0x7a,0x79,0x79,0x7b,0x7c,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x82,0x85,0x88,0x8b,0x8d,0x8e,0x8d,0x8b,0x88,0x84,0x80,0x7d,0x7a,0x79,0x78,0x78,0x78,0x78,0x78,0x77,0x75,0x74,0x72,0x72,0x72,0x73,0x75,0x79,0x7d,0x81,0x85,0x88,0x89,0x8a,0x89,0x87,0x85,0x83,0x81,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x80,0x7e,0x7b,0x79,0x77,0x77,0x77,0x79,0x7c,0x7f,0x82,0x85,0x87,0x87,0x86,0x85,0x83,0x81,0x80,0x7f,0x80,0x81,0x83,0x85,0x87,0x87,0x87,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x84,0x83,0x81,0x7e,0x7b,0x77,0x74,0x73,0x73,0x74,0x76,0x79,0x7b,0x7e,0x7f,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x80,0x83,0x86,0x8a,0x8c,0x8e,0x8e,0x8d,0x8a,0x86,0x82,0x7e,0x7b,0x79,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x77,0x79,0x7c,0x81,0x85,0x8a,0x8e,0x90,0x91,0x90,0x8e,0x8a,0x87,0x84,0x82,0x81,0x80,0x81,0x81,0x82,0x81,0x80,0x7d,0x7b,0x78,0x75,0x73,0x73,0x74,0x77,0x7a,0x7e,0x82,0x85,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7f,0x80,0x82,0x84,0x86,0x88,0x88,0x87,0x85,0x82,0x7f,0x7d,0x7c,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x84,0x83,0x81,0x7e,0x7b,0x78,0x76,0x76,0x76,0x78,0x7b,0x7e,0x80,0x82,0x83,0x83,0x82,0x81,0x80,0x80,0x81,0x82,0x85,0x88,0x8b,0x8d,0x8e,0x8d,0x8b,0x87,0x83,0x7e,0x7a,0x77,0x76,0x75,0x76,0x77,0x79,0x7b,0x7c,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7f,0x83,0x88,0x8c,0x8f,0x91,0x91,0x8f,0x8c,0x88,0x84,0x81,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7c,0x7b,0x79,0x76,0x73,0x71,0x70,0x70,0x72,0x75,0x7a,0x7e,0x82,0x85,0x87,0x87,0x87,0x85,0x83,0x81,0x80,0x80,0x80,0x82,0x84,0x86,0x87,0x86,0x85,0x83,0x80,0x7d,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x84,0x83,0x82,0x80,0x7d,0x7b,0x79,0x79,0x7a,0x7c,0x7f,0x82,0x85,0x86,0x87,0x87,0x85,0x84,0x82,0x81,0x82,0x83,0x84,0x87,0x89,0x8a,0x8a,0x89,0x87,0x83,0x7f,0x7a,0x77,0x74,0x73,0x73,0x74,0x76,0x78,0x79,0x7a,0x7b,0x7b,0x7a,0x7a,0x7a,0x7c,0x7e,0x81,0x85,0x89,0x8d,0x8f,0x90,0x8f,0x8d,0x8a,0x86,0x82,0x7f,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7b,0x7a,0x79,0x78,0x77,0x77,0x77,0x77,0x79,0x7c,0x7e,0x81,0x84,0x86,0x87,0x87,0x87,0x86,0x86,0x85,0x85,0x85,0x85,0x85,0x86,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x84,0x84,0x83,0x83,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7a,0x79,0x78,0x76,0x76,0x75,0x74,0x74,0x75,0x75,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x85,0x87,0x89,0x8a,0x8b,0x8c,0x8c,0x8c,0x8b,0x8a,0x88,0x85,0x82,0x7f,0x7c,0x7a,0x78,0x77,0x77,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8c,0x8d,0x8d,0x8e,0x8d,0x8c,0x8a,0x88,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x76,0x76,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x84,0x86,0x88,0x88,0x88,0x88,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7e,0x81,0x84,0x87,0x89,0x8b,0x8c,0x8c,0x8b,0x8a,0x89,0x87,0x84,0x82,0x80,0x7d,0x7b,0x79,0x76,0x74,0x71,0x6f,0x6e,0x6d,0x6e,0x6f,0x71,0x73,0x76,0x79,0x7b,0x7d,0x7f,0x7f,0x80,0x81,0x82,0x83,0x85,0x87,0x89,0x8a,0x8b,0x8a,0x89,0x86,0x83,0x7f,0x7c,0x79,0x77,0x76,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7b,0x7a,0x79,0x79,0x79,0x79,0x7b,0x7e,0x81,0x84,0x87,0x89,0x8a,0x8a,0x89,0x87,0x86,0x84,0x83,0x83,0x84,0x85,0x86,0x87,0x87,0x87,0x86,0x84,0x82,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7b,0x7b,0x7b,0x7a,0x7b,0x7b,0x7c,0x7e,0x80,0x83,0x85,0x87,0x89,0x8a,0x8b,0x8b,0x8a,0x89,0x88,0x87,0x85,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x75,0x73,0x72,0x71,0x71,0x71,0x72,0x74,0x76,0x78,0x7b,0x7e,0x81,0x83,0x86,0x87,0x88,0x89,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x89,0x88,0x87,0x85,0x82,0x7f,0x7b,0x78,0x76,0x75,0x74,0x75,0x77,0x78,0x7a,0x7c,0x7d,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x82,0x85,0x87,0x89,0x89,0x88,0x87,0x84,0x82,0x7f,0x7e,0x7d,0x7d,0x7e,0x80,0x81,0x81,0x80,0x7f,0x7c,0x79,0x76,0x73,0x72,0x72,0x74,0x76,0x79,0x7c,0x7d,0x7e,0x7e,0x7d,0x7c,0x7a,0x7a,0x7b,0x7d,0x80,0x84,0x88,0x8b,0x8e,0x8f,0x8e,0x8c,0x8a,0x87,0x85,0x83,0x82,0x81,0x81,0x80,0x80,0x7e,0x7c,0x7a,0x77,0x74,0x72,0x71,0x71,0x71,0x73,0x76,0x79,0x7c,0x7f,0x81,0x83,0x84,0x85,0x86,0x86,0x87,0x87,0x88,0x88,0x88,0x88,0x87,0x85,0x83,0x81,0x7e,0x7b,0x78,0x75,0x73,0x72,0x72,0x73,0x74,0x76,0x78,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x86,0x89,0x8a,0x8b,0x8b,0x8a,0x88,0x86,0x83,0x80,0x7f,0x7e,0x7d,0x7e,0x7f,0x7f,0x80,0x7f,0x7e,0x7c,0x7a,0x77,0x76,0x75,0x75,0x76,0x78,0x7b,0x7d,0x7e,0x7f,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7d,0x7f,0x82,0x86,0x88,0x8a,0x8b,0x8a,0x88,0x86,0x83,0x81,0x7f,0x7d,0x7d,0x7d,0x7e,0x7e,0x7d,0x7c,0x7a,0x78,0x76,0x74,0x73,0x73,0x75,0x78,0x7b,0x7f,0x84,0x87,0x89,0x8b,0x8b,0x8b,0x8a,0x89,0x89,0x88,0x88,0x89,0x89,0x88,0x87,0x85,0x82,0x7e,0x79,0x75,0x71,0x6f,0x6d,0x6d,0x6e,0x70,0x72,0x74,0x76,0x77,0x78,0x78,0x78,0x79,0x79,0x7b,0x7d,0x7f,0x82,0x85,0x87,0x88,0x88,0x87,0x85,0x83,0x80,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x79,0x78,0x78,0x78,0x7a,0x7c,0x7e,0x81,0x84,0x86,0x87,0x87,0x87,0x86,0x85,0x85,0x85,0x86,0x88,0x8a,0x8c,0x8e,0x8f,0x8f,0x8d,0x8a,0x87,0x83,0x7f,0x7b,0x78,0x77,0x76,0x76,0x76,0x77,0x77,0x76,0x75,0x73,0x71,0x70,0x6f,0x70,0x72,0x75,0x79,0x7d,0x81,0x84,0x85,0x86,0x86,0x85,0x83,0x82,0x82,0x81,0x82,0x82,0x82,0x82,0x80,0x7d,0x7a,0x75,0x71,0x6e,0x6c,0x6c,0x6d,0x6f,0x73,0x77,0x7b,0x7e,0x80,0x81,0x82,0x82,0x83,0x84,0x86,0x89,0x8c,0x8f,0x92,0x93,0x94,0x92,0x8f,0x8c,0x87,0x83,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7b,0x79,0x78,0x77,0x78,0x78,0x7a,0x7c,0x7e,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x82,0x83,0x82,0x80,0x7e,0x7b,0x78,0x74,0x72,0x70,0x6f,0x6f,0x70,0x71,0x73,0x74,0x75,0x76,0x76,0x76,0x75,0x75,0x76,0x78,0x7b,0x7f,0x83,0x88,0x8c,0x8f,0x91,0x91,0x91,0x8f,0x8c,0x8a,0x88,0x87,0x87,0x87,0x87,0x87,0x86,0x83,0x80,0x7c,0x78,0x74,0x72,0x71,0x72,0x74,0x78,0x7c,0x81,0x84,0x87,0x88,0x88,0x87,0x86,0x85,0x85,0x86,0x88,0x8a,0x8c,0x8d,0x8d,0x8b,0x87,0x82,0x7d,0x77,0x72,0x6f,0x6d,0x6c,0x6d,0x6f,0x71,0x72,0x73,0x73,0x73,0x72,0x71,0x70,0x70,0x72,0x74,0x78,0x7b,0x7f,0x82,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x82,0x84,0x86,0x88,0x88,0x88,0x87,0x85,0x82,0x7f,0x7c,0x7a,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x80,0x81,0x82,0x81,0x81,0x80,0x80,0x81,0x83,0x86,0x89,0x8c,0x8f,0x90,0x91,0x8f,0x8c,0x89,0x84,0x80,0x7d,0x7a,0x79,0x79,0x79,0x79,0x79,0x77,0x75,0x71,0x6e,0x6a,0x67,0x66,0x67,0x6a,0x6f,0x76,0x7c,0x82,0x87,0x89,0x8a,0x88,0x85,0x81,0x7e,0x7b,0x79,0x79,0x7b,0x7d,0x7e,0x80,0x80,0x7f,0x7d,0x79,0x76,0x73,0x71,0x71,0x72,0x75,0x79,0x7d,0x81,0x83,0x85,0x85,0x84,0x82,0x80,0x7f,0x7f,0x80,0x82,0x85,0x88,0x8a,0x8b,0x8b,0x89,0x86,0x83,0x80,0x7d,0x7c,0x7d,0x7e,0x81,0x84,0x86,0x87,0x87,0x85,0x81,0x7c,0x78,0x74,0x71,0x70,0x71,0x73,0x75,0x79,0x7b,0x7d,0x7e,0x7d,0x7d,0x7c,0x7b,0x7c,0x7e,0x80,0x84,0x87,0x89,0x8b,0x8a,0x88,0x84,0x7f,0x7a,0x75,0x70,0x6e,0x6d,0x6d,0x6e,0x70,0x72,0x73,0x74,0x74,0x74,0x75,0x76,0x77,0x7a,0x7e,0x83,0x88,0x8d,0x91,0x93,0x94,0x94,0x92,0x8f,0x8c,0x89,0x87,0x85,0x84,0x84,0x84,0x84,0x83,0x83,0x82,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x79,0x7a,0x7d,0x80,0x83,0x86,0x88,0x88,0x88,0x86,0x83,0x80,0x7c,0x7a,0x79,0x79,0x79,0x7b,0x7c,0x7c,0x7b,0x79,0x76,0x72,0x6e,0x6b,0x69,0x69,0x6b,0x6f,0x74,0x7a,0x7f,0x84,0x87,0x89,0x8a,0x8a,0x89,0x89,0x89,0x8b,0x8d,0x8f,0x90,0x91,0x91,0x8e,0x8a,0x85,0x7f,0x7a,0x76,0x73,0x72,0x73,0x75,0x77,0x7a,0x7c,0x7d,0x7d,0x7c,0x7b,0x79,0x79,0x79,0x7b,0x7d,0x81,0x85,0x88,0x8a,0x8b,0x8a,0x88,0x84,0x81,0x7d,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x7e,0x7c,0x79,0x75,0x72,0x70,0x6f,0x6f,0x71,0x74,0x77,0x7a,0x7c,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x7a,0x7c,0x80,0x85,0x89,0x8e,0x90,0x92,0x91,0x8f,0x8b,0x87,0x84,0x81,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7e,0x7b,0x78,0x74,0x70,0x6e,0x6d,0x6e,0x71,0x76,0x7c,0x81,0x86,0x8a,0x8c,0x8c,0x8c,0x8b,0x8a,0x89,0x89,0x8a,0x8c,0x8d,0x8d,0x8d,0x8b,0x88,0x83,0x7e,0x78,0x74,0x70,0x6e,0x6e,0x70,0x72,0x75,0x77,0x79,0x7b,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x82,0x85,0x87,0x89,0x88,0x87,0x84,0x81,0x7e,0x7b,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x7f,0x80,0x7f,0x7e,0x7d,0x7b,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x82,0x83,0x85,0x87,0x8a,0x8d,0x8f,0x90,0x90,0x8e,0x8c,0x88,0x84,0x81,0x7e,0x7c,0x7b,0x7a,0x7a,0x79,0x78,0x76,0x74,0x71,0x6e,0x6b,0x6a,0x6b,0x6d,0x70,0x75,0x7a,0x7f,0x84,0x87,0x89,0x8a,0x89,0x88,0x86,0x85,0x84,0x84,0x84,0x85,0x84,0x84,0x82,0x7f,0x7a,0x76,0x71,0x6e,0x6b,0x6a,0x6b,0x6d,0x71,0x76,0x7a,0x7e,0x81,0x83,0x84,0x84,0x85,0x85,0x86,0x88,0x8a,0x8d,0x8f,0x91,0x91,0x90,0x8e,0x8b,0x87,0x82,0x7e,0x7b,0x7a,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x7e,0x7c,0x7a,0x77,0x75,0x73,0x73,0x74,0x76,0x78,0x7b,0x7e,0x7f,0x80,0x80,0x7e,0x7d,0x7b,0x7b,0x7b,0x7d,0x80,0x83,0x87,0x8a,0x8c,0x8c,0x8b,0x88,0x84,0x80,0x7d,0x7a,0x78,0x78,0x78,0x79,0x7a,0x7a,0x7a,0x79,0x77,0x75,0x73,0x73,0x74,0x77,0x7b,0x81,0x87,0x8d,0x91,0x95,0x96,0x96,0x94,0x92,0x8f,0x8c,0x8a,0x89,0x88,0x88,0x87,0x86,0x84,0x80,0x7c,0x77,0x72,0x6e,0x6c,0x6b,0x6c,0x6f,0x73,0x78,0x7c,0x80,0x83,0x85,0x85,0x85,0x85,0x85,0x85,0x86,0x87,0x89,0x8b,0x8c,0x8c,0x8a,0x87,0x83,0x7e,0x79,0x75,0x73,0x72,0x73,0x75,0x77,0x7a,0x7d,0x7e,0x7e,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x7f,0x83,0x86,0x89,0x8b,0x8c,0x8b,0x89,0x86,0x84,0x82,0x82,0x82,0x84,0x87,0x89,0x8b,0x8c,0x8b,0x89,0x85,0x81,0x7d,0x79,0x76,0x75,0x75,0x76,0x77,0x79,0x7a,0x7a,0x7a,0x78,0x76,0x75,0x74,0x75,0x77,0x7b,0x7f,0x84,0x89,0x8d,0x90,0x90,0x8f,0x8d,0x89,0x86,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7a,0x78,0x74,0x71,0x6e,0x6d,0x6d,0x6f,0x73,0x78,0x7e,0x83,0x88,0x8b,0x8d,0x8d,0x8d,0x8c,0x8b,0x8a,0x8a,0x8b,0x8c,0x8d,0x8d,0x8d,0x8b,0x87,0x83,0x7e,0x79,0x75,0x72,0x71,0x72,0x74,0x77,0x7a,0x7c,0x7e,0x7e,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x7a,0x7d,0x80,0x83,0x86,0x88,0x88,0x87,0x84,0x82,0x7f,0x7e,0x7d,0x7e,0x80,0x83,0x86,0x88,0x89,0x89,0x87,0x84,0x80,0x7c,0x79,0x77,0x76,0x76,0x78,0x7a,0x7c,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x82,0x86,0x8b,0x8f,0x92,0x94,0x94,0x92,0x8e,0x8a,0x86,0x81,0x7e,0x7c,0x7a,0x7a,0x79,0x78,0x77,0x75,0x72,0x6f,0x6c,0x6a,0x6a,0x6b,0x6e,0x72,0x78,0x7d,0x83,0x88,0x8b,0x8c,0x8c,0x8b,0x8a,0x88,0x87,0x86,0x86,0x87,0x87,0x88,0x87,0x85,0x82,0x7f,0x7a,0x76,0x72,0x70,0x70,0x71,0x74,0x77,0x7b,0x7f,0x81,0x83,0x83,0x82,0x81,0x80,0x7f,0x80,0x81,0x84,0x87,0x8a,0x8c,0x8d,0x8c,0x8a,0x87,0x84,0x81,0x7e,0x7d,0x7d,0x7e,0x80,0x82,0x84,0x85,0x84,0x81,0x7e,0x7a,0x76,0x73,0x71,0x71,0x72,0x74,0x77,0x7a,0x7c,0x7d,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7f,0x83,0x87,0x8b,0x8f,0x91,0x92,0x91,0x8f,0x8b,0x87,0x82,0x7e,0x7b,0x79,0x79,0x78,0x79,0x79,0x78,0x77,0x76,0x74,0x72,0x72,0x72,0x74,0x78,0x7c,0x82,0x88,0x8d,0x91,0x93,0x94,0x93,0x91,0x8e,0x8c,0x8a,0x88,0x87,0x87,0x87,0x86,0x85,0x82,0x7f,0x7b,0x77,0x73,0x70,0x6f,0x6f,0x71,0x74,0x78,0x7c,0x80,0x83,0x84,0x84,0x84,0x82,0x81,0x81,0x81,0x82,0x84,0x86,0x88,0x8a,0x8a,0x89,0x87,0x84,0x81,0x7e,0x7b,0x7a,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x81,0x7f,0x7c,0x79,0x76,0x75,0x75,0x77,0x79,0x7d,0x80,0x82,0x84,0x85,0x85,0x84,0x83,0x83,0x83,0x85,0x88,0x8b,0x8f,0x92,0x94,0x94,0x92,0x8f,0x8b,0x86,0x81,0x7d,0x7a,0x78,0x78,0x78,0x79,0x79,0x7a,0x79,0x78,0x76,0x74,0x73,0x74,0x75,0x79,0x7d,0x83,0x88,0x8d,0x90,0x92,0x92,0x90,0x8d,0x89,0x86,0x83,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7b,0x78,0x74,0x70,0x6d,0x6b,0x6b,0x6c,0x6f,0x73,0x78,0x7e,0x82,0x86,0x88,0x88,0x88,0x87,0x85,0x84,0x84,0x85,0x87,0x89,0x8b,0x8c,0x8d,0x8b,0x89,0x86,0x82,0x7e,0x7c,0x7a,0x7a,0x7b,0x7e,0x80,0x82,0x83,0x83,0x82,0x80,0x7d,0x7a,0x78,0x76,0x77,0x78,0x7b,0x7e,0x81,0x84,0x85,0x86,0x85,0x84,0x82,0x81,0x81,0x82,0x84,0x86,0x89,0x8b,0x8c,0x8c,0x8a,0x86,0x82,0x7d,0x78,0x73,0x71,0x6f,0x70,0x71,0x73,0x75,0x76,0x77,0x77,0x77,0x76,0x76,0x77,0x79,0x7d,0x82,0x87,0x8c,0x91,0x94,0x95,0x94,0x92,0x8e,0x8a,0x85,0x82,0x7f,0x7e,0x7d,0x7d,0x7d,0x7c,0x7b,0x79,0x76,0x73,0x71,0x70,0x70,0x72,0x75,0x7a,0x7f,0x84,0x89,0x8c,0x8d,0x8e,0x8d,0x8b,0x89,0x87,0x86,0x86,0x87,0x88,0x89,0x89,0x88,0x86,0x83,0x7f,0x7c,0x78,0x75,0x74,0x74,0x76,0x78,0x7b,0x7e,0x7f,0x80,0x7f,0x7e,0x7b,0x79,0x78,0x77,0x77,0x79,0x7c,0x7f,0x82,0x84,0x85,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7f,0x80,0x83,0x85,0x87,0x89,0x89,0x87,0x84,0x80,0x7b,0x77,0x74,0x72,0x71,0x72,0x74,0x77,0x7a,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x85,0x89,0x8d,0x91,0x95,0x97,0x97,0x95,0x92,0x8d,0x88,0x84,0x80,0x7d,0x7b,0x7a,0x7a,0x7a,0x79,0x78,0x77,0x74,0x72,0x70,0x70,0x70,0x72,0x75,0x7a,0x7f,0x84,0x88,0x8b,0x8c,0x8b,0x8a,0x87,0x85,0x83,0x81,0x81,0x81,0x82,0x83,0x83,0x83,0x81,0x7e,0x7b,0x78,0x75,0x73,0x73,0x74,0x76,0x7a,0x7d,0x81,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7f,0x81,0x84,0x87,0x8a,0x8c,0x8d,0x8d,0x8b,0x8a,0x87,0x86,0x85,0x85,0x85,0x87,0x89,0x8a,0x8b,0x8a,0x87,0x84,0x7f,0x7b,0x76,0x73,0x71,0x71,0x72,0x74,0x77,0x79,0x7b,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x80,0x83,0x86,0x8a,0x8e,0x90,0x91,0x90,0x8e,0x8a,0x86,0x81,0x7c,0x78,0x76,0x74,0x74,0x75,0x75,0x76,0x76,0x76,0x75,0x74,0x74,0x74,0x75,0x78,0x7c,0x81,0x86,0x8b,0x8f,0x92,0x93,0x92,0x90,0x8d,0x8a,0x87,0x85,0x83,0x83,0x83,0x83,0x83,0x82,0x80,0x7e,0x7b,0x77,0x75,0x73,0x73,0x74,0x77,0x7a,0x7e,0x81,0x84,0x85,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7f,0x81,0x84,0x86,0x88,0x88,0x88,0x86,0x83,0x81,0x7f,0x7e,0x7e,0x7e,0x80,0x82,0x83,0x84,0x84,0x82,0x7f,0x7c,0x78,0x75,0x72,0x71,0x72,0x74,0x76,0x79,0x7c,0x7f,0x81,0x81,0x82,0x82,0x82,0x82,0x84,0x86,0x89,0x8c,0x8f,0x91,0x91,0x90,0x8d,0x89,0x84,0x7f,0x7b,0x77,0x75,0x74,0x74,0x75,0x76,0x77,0x78,0x78,0x78,0x78,0x78,0x79,0x7a,0x7d,0x81,0x86,0x8b,0x8f,0x92,0x93,0x93,0x91,0x8e,0x8b,0x87,0x84,0x82,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7a,0x77,0x74,0x73,0x72,0x72,0x74,0x77,0x7a,0x7e,0x81,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x84,0x86,0x87,0x87,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7f,0x80,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x77,0x75,0x74,0x75,0x77,0x7a,0x7d,0x80,0x84,0x86,0x87,0x88,0x88,0x88,0x87,0x88,0x89,0x8a,0x8c,0x8d,0x8e,0x8e,0x8c,0x89,0x84,0x7f,0x79,0x75,0x71,0x6f,0x6f,0x70,0x73,0x75,0x78,0x79,0x7a,0x7a,0x7a,0x79,0x79,0x7a,0x7d,0x80,0x85,0x8a,0x8e,0x91,0x92,0x91,0x8f,0x8c,0x88,0x84,0x81,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7c,0x7a,0x77,0x74,0x73,0x72,0x74,0x77,0x7a,0x7f,0x82,0x85,0x87,0x88,0x87,0x85,0x83,0x82,0x81,0x81,0x81,0x82,0x84,0x85,0x85,0x85,0x83,0x81,0x7f,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7e,0x80,0x81,0x81,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x89,0x8a,0x8c,0x8e,0x8f,0x90,0x8f,0x8e,0x8c,0x89,0x85,0x81,0x7d,0x7a,0x77,0x75,0x74,0x74,0x74,0x75,0x76,0x76,0x77,0x77,0x78,0x79,0x7a,0x7c,0x7e,0x81,0x84,0x88,0x8a,0x8d,0x8e,0x8e,0x8c,0x8a,0x87,0x84,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x78,0x77,0x75,0x74,0x73,0x73,0x74,0x75,0x78,0x7c,0x7f,0x83,0x86,0x88,0x89,0x89,0x88,0x86,0x85,0x83,0x83,0x83,0x84,0x86,0x87,0x88,0x88,0x86,0x84,0x81,0x7e,0x7b,0x79,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x80,0x7d,0x7a,0x77,0x75,0x73,0x73,0x74,0x76,0x79,0x7c,0x7e,0x80,0x81,0x82,0x82,0x81,0x82,0x82,0x83,0x85,0x86,0x87,0x88,0x87,0x85,0x83,0x7f,0x7c,0x79,0x76,0x74,0x73,0x73,0x73,0x74,0x75,0x76,0x76,0x77,0x77,0x78,0x79,0x7b,0x7e,0x81,0x85,0x89,0x8c,0x8f,0x91,0x91,0x91,0x8f,0x8d,0x8a,0x87,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x77,0x77,0x76,0x76,0x78,0x7a,0x7d,0x81,0x85,0x88,0x8b,0x8c,0x8d,0x8c,0x8a,0x87,0x85,0x83,0x82,0x82,0x82,0x84,0x85,0x85,0x85,0x84,0x81,0x7e,0x7b,0x78,0x76,0x76,0x77,0x79,0x7c,0x7f,0x81,0x82,0x82,0x80,0x7d,0x79,0x77,0x75,0x75,0x76,0x79,0x7d,0x81,0x84,0x85,0x86,0x85,0x83,0x81,0x80,0x80,0x81,0x84,0x87,0x8a,0x8c,0x8d,0x8c,0x8a,0x86,0x81,0x7c,0x78,0x76,0x74,0x75,0x76,0x78,0x7a,0x7b,0x7c,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d,0x80,0x84,0x88,0x8b,0x8e,0x90,0x90,0x8e,0x8c,0x89,0x85,0x82,0x7f,0x7c,0x7a,0x79,0x78,0x77,0x76,0x74,0x73,0x72,0x71,0x71,0x71,0x72,0x74,0x76,0x79,0x7c,0x7f,0x81,0x83,0x85,0x86,0x86,0x86,0x86,0x85,0x85,0x84,0x84,0x83,0x83,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x82,0x82,0x83,0x84,0x84,0x85,0x85,0x84,0x83,0x80,0x7e,0x7a,0x78,0x75,0x74,0x73,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x85,0x88,0x8b,0x8e,0x90,0x91,0x90,0x8f,0x8d,0x8a,0x86,0x83,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x78,0x78,0x77,0x77,0x76,0x76,0x77,0x78,0x7a,0x7d,0x80,0x84,0x87,0x89,0x8b,0x8b,0x8a,0x88,0x86,0x84,0x82,0x81,0x80,0x80,0x81,0x81,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x78,0x7a,0x7d,0x80,0x82,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7c,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x84,0x84,0x83,0x82,0x82,0x83,0x84,0x86,0x87,0x88,0x89,0x88,0x86,0x84,0x80,0x7d,0x7a,0x78,0x76,0x75,0x75,0x75,0x76,0x76,0x77,0x77,0x78,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x86,0x87,0x89,0x89,0x89,0x88,0x87,0x85,0x82,0x7f,0x7c,0x79,0x77,0x75,0x74,0x73,0x73,0x73,0x74,0x74,0x75,0x76,0x78,0x79,0x7b,0x7d,0x80,0x83,0x86,0x89,0x8c,0x8e,0x8f,0x8e,0x8d,0x8b,0x89,0x86,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x76,0x74,0x72,0x71,0x71,0x72,0x74,0x77,0x79,0x7b,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x84,0x87,0x8b,0x8f,0x92,0x95,0x97,0x96,0x94,0x90,0x8b,0x86,0x80,0x7c,0x79,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x81,0x81,0x81,0x82,0x82,0x83,0x85,0x87,0x8a,0x8c,0x8e,0x8e,0x8e,0x8c,0x89,0x85,0x81,0x7e,0x7b,0x79,0x78,0x77,0x77,0x77,0x76,0x75,0x74,0x73,0x72,0x72,0x72,0x74,0x76,0x79,0x7c,0x7e,0x80,0x80,0x80,0x7e,0x7c,0x79,0x77,0x76,0x75,0x76,0x77,0x79,0x7c,0x7e,0x7f,0x81,0x81,0x82,0x82,0x82,0x83,0x84,0x85,0x87,0x88,0x89,0x89,0x88,0x86,0x84,0x81,0x7e,0x7b,0x78,0x76,0x76,0x76,0x77,0x79,0x7c,0x7f,0x82,0x84,0x86,0x88,0x89,0x8a,0x8b,0x8c,0x8c,0x8d,0x8d,0x8d,0x8c,0x8a,0x87,0x83,0x7f,0x7a,0x76,0x72,0x6f,0x6e,0x6d,0x6e,0x70,0x72,0x74,0x76,0x78,0x79,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x86,0x88,0x89,0x89,0x88,0x86,0x83,0x7f,0x7c,0x7a,0x78,0x77,0x78,0x7a,0x7c,0x7e,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7f,0x81,0x83,0x85,0x87,0x89,0x89,0x88,0x86,0x84,0x82,0x80,0x80,0x80,0x81,0x83,0x86,0x88,0x8a,0x8b,0x8c,0x8c,0x8b,0x89,0x88,0x87,0x86,0x86,0x86,0x85,0x85,0x83,0x82,0x7f,0x7c,0x79,0x76,0x73,0x72,0x72,0x72,0x74,0x76,0x79,0x7b,0x7d,0x7f,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7d,0x7a,0x76,0x73,0x71,0x6f,0x6f,0x70,0x71,0x73,0x76,0x78,0x7a,0x7c,0x7d,0x7e,0x7e,0x7f,0x81,0x83,0x85,0x87,0x89,0x8a,0x8b,0x8b,0x8a,0x88,0x85,0x83,0x81,0x7f,0x7f,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x7e,0x7b,0x79,0x77,0x75,0x74,0x75,0x76,0x78,0x7b,0x7d,0x7f,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x78,0x76,0x74,0x73,0x73,0x73,0x75,0x78,0x7b,0x7e,0x82,0x84,0x86,0x88,0x88,0x89,0x89,0x89,0x89,0x8a,0x8b,0x8b,0x8c,0x8c,0x8b,0x88,0x86,0x82,0x7e,0x7b,0x79,0x77,0x77,0x78,0x7a,0x7d,0x7f,0x82,0x84,0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x85,0x86,0x87,0x88,0x88,0x87,0x85,0x83,0x7f,0x7c,0x79,0x77,0x76,0x77,0x78,0x7a,0x7c,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x7b,0x7b,0x7b,0x7d,0x7e,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x7a,0x7c,0x7f,0x83,0x86,0x88,0x8a,0x8a,0x89,0x88,0x86,0x84,0x83,0x82,0x82,0x82,0x83,0x83,0x83,0x82,0x80,0x7d,0x7b,0x78,0x76,0x76,0x76,0x78,0x7b,0x7f,0x82,0x86,0x88,0x8a,0x8b,0x8b,0x8a,0x89,0x88,0x88,0x87,0x87,0x87,0x87,0x85,0x83,0x80,0x7c,0x78,0x74,0x71,0x6e,0x6d,0x6d,0x6f,0x72,0x75,0x78,0x7b,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7f,0x80,0x81,0x83,0x84,0x85,0x86,0x85,0x82,0x80,0x7c,0x79,0x76,0x75,0x74,0x75,0x77,0x7a,0x7d,0x7f,0x81,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x81,0x83,0x85,0x86,0x87,0x87,0x86,0x84,0x82,0x7f,0x7d,0x7c,0x7c,0x7d,0x80,0x83,0x86,0x89,0x8a,0x8b,0x8a,0x88,0x86,0x84,0x82,0x81,0x80,0x80,0x81,0x81,0x81,0x80,0x7f,0x7c,0x79,0x76,0x74,0x73,0x73,0x74,0x76,0x7a,0x7d,0x81,0x84,0x86,0x87,0x87,0x86,0x85,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x84,0x82,0x80,0x7d,0x7a,0x77,0x74,0x73,0x73,0x74,0x77,0x7a,0x7e,0x82,0x85,0x87,0x88,0x88,0x88,0x88,0x87,0x87,0x88,0x89,0x8a,0x8b,0x8b,0x8b,0x89,0x87,0x84,0x80,0x7d,0x7a,0x79,0x79,0x79,0x7b,0x7e,0x80,0x82,0x83,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x83,0x81,0x7e,0x7b,0x78,0x75,0x74,0x74,0x75,0x77,0x7a,0x7e,0x81,0x83,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7d,0x7a,0x77,0x75,0x74,0x73,0x75,0x77,0x7b,0x7f,0x84,0x87,0x8a,0x8b,0x8b,0x8a,0x89,0x87,0x86,0x86,0x86,0x86,0x87,0x87,0x86,0x84,0x82,0x7e,0x7a,0x76,0x73,0x72,0x72,0x74,0x77,0x7a,0x7e,0x82,0x84,0x86,0x86,0x86,0x85,0x84,0x83,0x83,0x84,0x85,0x86,0x87,0x87,0x86,0x84,0x81,0x7d,0x7a,0x77,0x74,0x74,0x74,0x76,0x79,0x7c,0x80,0x82,0x84,0x85,0x84,0x83,0x82,0x81,0x81,0x82,0x83,0x84,0x86,0x87,0x87,0x86,0x85,0x82,0x80,0x7d,0x7c,0x7b,0x7b,0x7d,0x80,0x83,0x87,0x89,0x8b,0x8b,0x8a,0x88,0x86,0x84,0x82,0x81,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7e,0x7b,0x78,0x75,0x74,0x75,0x76,0x7a,0x7d,0x82,0x85,0x88,0x89,0x8a,0x89,0x87,0x85,0x84,0x83,0x83,0x83,0x84,0x85,0x85,0x84,0x82,0x7f,0x7b,0x78,0x75,0x72,0x72,0x73,0x75,0x79,0x7c,0x80,0x84,0x86,0x87,0x87,0x87,0x86,0x85,0x85,0x85,0x86,0x87,0x89,0x89,0x89,0x88,0x85,0x82,0x7f,0x7b,0x78,0x76,0x75,0x76,0x78,0x7b,0x7e,0x81,0x83,0x84,0x85,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x80,0x7e,0x7c,0x79,0x78,0x77,0x78,0x7a,0x7d,0x80,0x84,0x87,0x89,0x89,0x88,0x86,0x84,0x81,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x80,0x7e,0x7b,0x79,0x76,0x75,0x76,0x78,0x7c,0x80,0x85,0x8a,0x8e,0x90,0x90,0x8e,0x8b,0x88,0x84,0x81,0x7f,0x7e,0x7e,0x7f,0x80,0x80,0x7f,0x7d,0x7b,0x77,0x74,0x71,0x70,0x70,0x73,0x77,0x7c,0x81,0x86,0x8a,0x8b,0x8b,0x89,0x86,0x83,0x81,0x7f,0x7e,0x7f,0x81,0x82,0x83,0x83,0x82,0x80,0x7c,0x78,0x75,0x73,0x73,0x75,0x79,0x7d,0x83,0x87,0x8b,0x8c,0x8c,0x89,0x86,0x83,0x80,0x7f,0x7e,0x80,0x82,0x85,0x87,0x88,0x87,0x85,0x82,0x7e,0x7b,0x79,0x79,0x7a,0x7d,0x81,0x85,0x88,0x8a,0x8a,0x88,0x85,0x81,0x7d,0x7a,0x78,0x77,0x77,0x79,0x7a,0x7c,0x7d,0x7d,0x7c,0x7a,0x78,0x77,0x77,0x77,0x7a,0x7d,0x81,0x85,0x88,0x8b,0x8c,0x8b,0x8a,0x88,0x85,0x83,0x81,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x79,0x78,0x77,0x77,0x78,0x7b,0x7e,0x82,0x85,0x89,0x8b,0x8c,0x8c,0x8b,0x88,0x86,0x84,0x82,0x82,0x82,0x83,0x84,0x85,0x85,0x85,0x83,0x81,0x7d,0x7a,0x77,0x75,0x75,0x76,0x79,0x7c,0x7f,0x82,0x84,0x85,0x84,0x81,0x7e,0x7c,0x7a,0x79,0x7a,0x7c,0x7e,0x81,0x84,0x85,0x85,0x83,0x81,0x7e,0x7b,0x79,0x79,0x7a,0x7c,0x80,0x83,0x86,0x88,0x88,0x86,0x83,0x80,0x7c,0x79,0x78,0x78,0x79,0x7c,0x7f,0x81,0x83,0x83,0x82,0x80,0x7d,0x7b,0x7a,0x7a,0x7c,0x7f,0x83,0x87,0x8b,0x8d,0x8e,0x8d,0x8b,0x88,0x85,0x81,0x7f,0x7e,0x7e,0x80,0x81,0x82,0x83,0x82,0x81,0x7e,0x7b,0x78,0x75,0x74,0x74,0x76,0x78,0x7c,0x80,0x83,0x85,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7c,0x7e,0x80,0x82,0x84,0x85,0x84,0x82,0x80,0x7d,0x7a,0x77,0x76,0x77,0x78,0x7b,0x7e,0x81,0x83,0x84,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7c,0x7f,0x81,0x84,0x86,0x87,0x87,0x86,0x84,0x81,0x80,0x7f,0x7f,0x80,0x83,0x86,0x89,0x8b,0x8b,0x8b,0x89,0x86,0x82,0x7f,0x7c,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x80,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x78,0x7a,0x7d,0x81,0x84,0x86,0x87,0x87,0x85,0x82,0x7f,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x7d,0x7e,0x7e,0x7e,0x7c,0x79,0x77,0x75,0x74,0x74,0x76,0x79,0x7e,0x82,0x85,0x88,0x89,0x89,0x87,0x85,0x83,0x81,0x80,0x81,0x82,0x85,0x87,0x88,0x89,0x88,0x86,0x83,0x7f,0x7c,0x79,0x78,0x79,0x7b,0x7d,0x81,0x84,0x85,0x86,0x85,0x84,0x81,0x7f,0x7d,0x7c,0x7c,0x7e,0x81,0x84,0x86,0x88,0x88,0x87,0x85,0x82,0x7f,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x83,0x84,0x85,0x84,0x82,0x7f,0x7b,0x78,0x76,0x75,0x75,0x77,0x79,0x7c,0x7e,0x7f,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x7b,0x7d,0x7f,0x83,0x87,0x8a,0x8c,0x8d,0x8c,0x8a,0x86,0x83,0x80,0x7d,0x7c,0x7c,0x7e,0x7f,0x81,0x83,0x83,0x82,0x80,0x7d,0x7a,0x78,0x77,0x78,0x7a,0x7e,0x82,0x86,0x89,0x8b,0x8c,0x8b,0x88,0x86,0x83,0x81,0x80,0x80,0x81,0x83,0x84,0x85,0x85,0x83,0x80,0x7d,0x79,0x76,0x74,0x73,0x73,0x75,0x77,0x7a,0x7c,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x81,0x82,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x80,0x81,0x83,0x84,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7e,0x80,0x83,0x86,0x88,0x8a,0x8b,0x8a,0x89,0x86,0x83,0x80,0x7e,0x7c,0x7b,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x78,0x77,0x75,0x74,0x74,0x75,0x77,0x79,0x7c,0x7f,0x82,0x84,0x85,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x83,0x83,0x84,0x86,0x87,0x88,0x89,0x89,0x88,0x87,0x85,0x83,0x82,0x81,0x81,0x81,0x82,0x83,0x83,0x84,0x84,0x84,0x82,0x81,0x7f,0x7e,0x7c,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x83,0x84,0x85,0x87,0x88,0x88,0x87,0x87,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x78,0x77,0x77,0x77,0x77,0x79,0x7c,0x7e,0x81,0x84,0x86,0x87,0x87,0x87,0x86,0x85,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7a,0x7b,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x84,0x86,0x88,0x89,0x8a,0x8a,0x89,0x88,0x86,0x85,0x83,0x82,0x82,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x87,0x87,0x88,0x88,0x87,0x87,0x86,0x85,0x85,0x85,0x84,0x84,0x83,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x76,0x75,0x75,0x75,0x76,0x77,0x78,0x79,0x7b,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x84,0x85,0x86,0x87,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7b,0x7a,0x79,0x79,0x78,0x78,0x77,0x76,0x76,0x75,0x75,0x76,0x77,0x79,0x7c,0x7e,0x81,0x84,0x86,0x87,0x88,0x89,0x89,0x89,0x89,0x8a,0x8a,0x8a,0x89,0x89,0x88,0x86,0x84,0x81,0x7e,0x7c,0x7a,0x79,0x78,0x79,0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x81,0x82,0x84,0x86,0x87,0x88,0x89,0x88,0x87,0x86,0x84,0x83,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7c,0x7b,0x79,0x77,0x76,0x76,0x76,0x77,0x78,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x79,0x78,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x85,0x86,0x88,0x89,0x89,0x89,0x88,0x87,0x85,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x79,0x78,0x77,0x77,0x77,0x79,0x7a,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7a,0x79,0x78,0x77,0x76,0x76,0x77,0x78,0x7a,0x7d,0x7f,0x81,0x83,0x84,0x86,0x86,0x87,0x88,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x89,0x88,0x87,0x86,0x84,0x82,0x81,0x7f,0x7d,0x7c,0x7a,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7d,0x7a,0x77,0x74,0x73,0x72,0x73,0x75,0x77,0x79,0x7a,0x79,0x78,0x76,0x74,0x72,0x72,0x73,0x76,0x7a,0x80,0x84,0x88,0x8a,0x8a,0x88,0x85,0x82,0x7f,0x7e,0x7f,0x81,0x85,0x8a,0x8e,0x91,0x91,0x8f,0x8b,0x87,0x82,0x7e,0x7c,0x7c,0x7e,0x82,0x85,0x88,0x89,0x88,0x85,0x81,0x7c,0x78,0x75,0x75,0x76,0x7a,0x7e,0x83,0x86,0x87,0x87,0x85,0x81,0x7d,0x7a,0x78,0x78,0x79,0x7c,0x7f,0x82,0x83,0x82,0x7f,0x7a,0x74,0x6f,0x6b,0x69,0x69,0x6b,0x6f,0x73,0x77,0x7a,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x79,0x7b,0x7e,0x82,0x85,0x88,0x8a,0x8a,0x89,0x87,0x84,0x82,0x80,0x7f,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7e,0x80,0x82,0x84,0x86,0x87,0x88,0x88,0x87,0x86,0x84,0x83,0x83,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7b,0x7a,0x7a,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x78,0x78,0x77,0x76,0x76,0x77,0x78,0x7a,0x7d,0x7f,0x81,0x83,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7f,0x80,0x81,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x76,0x79,0x7d,0x81,0x85,0x89,0x8b,0x8b,0x8a,0x88,0x87,0x85,0x86,0x87,0x89,0x8c,0x8f,0x91,0x91,0x8f,0x8b,0x86,0x80,0x7c,0x78,0x76,0x76,0x78,0x7a,0x7c,0x7e,0x7e,0x7c,0x7a,0x76,0x73,0x72,0x72,0x73,0x77,0x7b,0x80,0x84,0x86,0x87,0x86,0x83,0x7f,0x7c,0x79,0x77,0x77,0x78,0x7a,0x7b,0x7c,0x7c,0x7b,0x79,0x76,0x73,0x71,0x71,0x71,0x73,0x76,0x79,0x7d,0x7f,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x82,0x84,0x86,0x88,0x89,0x89,0x89,0x88,0x87,0x85,0x84,0x83,0x82,0x82,0x83,0x83,0x84,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7a,0x79,0x78,0x77,0x77,0x78,0x7a,0x7b,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x81,0x81,0x80,0x7e,0x7b,0x77,0x73,0x70,0x6e,0x6d,0x6e,0x6f,0x72,0x74,0x76,0x78,0x79,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x83,0x87,0x8a,0x8d,0x8f,0x90,0x8f,0x8c,0x89,0x86,0x83,0x81,0x81,0x81,0x82,0x83,0x85,0x86,0x86,0x86,0x85,0x84,0x83,0x83,0x83,0x85,0x86,0x89,0x8b,0x8c,0x8c,0x8b,0x89,0x86,0x83,0x80,0x7d,0x7c,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x7e,0x7e,0x7c,0x7a,0x77,0x74,0x71,0x6f,0x6e,0x6f,0x70,0x72,0x75,0x78,0x7b,0x7e,0x80,0x81,0x83,0x84,0x85,0x86,0x88,0x8a,0x8c,0x8e,0x8e,0x8e,0x8d,0x8b,0x87,0x84,0x80,0x7d,0x7a,0x79,0x79,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x83,0x84,0x85,0x87,0x89,0x8a,0x8b,0x8b,0x89,0x87,0x83,0x7f,0x7a,0x77,0x74,0x72,0x72,0x73,0x74,0x76,0x77,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x73,0x74,0x76,0x78,0x7a,0x7b,0x7c,0x7b,0x79,0x76,0x74,0x72,0x71,0x71,0x73,0x76,0x79,0x7d,0x81,0x83,0x85,0x86,0x86,0x85,0x85,0x84,0x85,0x85,0x87,0x88,0x89,0x8a,0x89,0x87,0x85,0x81,0x7d,0x7a,0x77,0x76,0x76,0x78,0x7a,0x7e,0x81,0x85,0x87,0x89,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8d,0x8d,0x8e,0x8d,0x8b,0x88,0x84,0x80,0x7c,0x78,0x74,0x73,0x72,0x73,0x74,0x76,0x78,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x84,0x83,0x81,0x7e,0x7b,0x77,0x75,0x73,0x73,0x74,0x75,0x78,0x7a,0x7c,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x83,0x85,0x87,0x89,0x8a,0x8a,0x89,0x87,0x85,0x82,0x80,0x7f,0x7f,0x7f,0x81,0x84,0x86,0x89,0x8b,0x8b,0x8b,0x8a,0x88,0x87,0x85,0x84,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7c,0x79,0x75,0x71,0x6e,0x6d,0x6d,0x6f,0x72,0x75,0x78,0x7b,0x7d,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x80,0x81,0x82,0x82,0x82,0x80,0x7d,0x79,0x75,0x70,0x6d,0x6b,0x6a,0x6b,0x6d,0x71,0x75,0x78,0x7c,0x7e,0x80,0x81,0x82,0x83,0x84,0x86,0x89,0x8c,0x8e,0x90,0x91,0x91,0x90,0x8d,0x89,0x85,0x81,0x7e,0x7c,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x82,0x7f,0x7c,0x78,0x76,0x74,0x73,0x73,0x75,0x77,0x7a,0x7c,0x7e,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x7e,0x7c,0x7a,0x77,0x75,0x74,0x74,0x75,0x78,0x7c,0x80,0x84,0x88,0x8b,0x8d,0x8e,0x8e,0x8d,0x8d,0x8c,0x8c,0x8d,0x8d,0x8e,0x8e,0x8e,0x8c,0x89,0x85,0x81,0x7c,0x78,0x76,0x74,0x75,0x76,0x79,0x7c,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x84,0x85,0x85,0x87,0x88,0x89,0x89,0x88,0x86,0x82,0x7e,0x79,0x75,0x71,0x6f,0x6e,0x6f,0x71,0x73,0x76,0x79,0x7b,0x7c,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x82,0x85,0x87,0x88,0x88,0x87,0x85,0x82,0x7f,0x7c,0x7a,0x79,0x7a,0x7c,0x7f,0x82,0x84,0x86,0x87,0x86,0x85,0x84,0x82,0x81,0x81,0x81,0x82,0x83,0x84,0x85,0x85,0x83,0x81,0x7e,0x7a,0x77,0x75,0x74,0x74,0x76,0x7a,0x7d,0x81,0x84,0x85,0x86,0x86,0x85,0x83,0x81,0x80,0x80,0x80,0x81,0x81,0x82,0x81,0x80,0x7d,0x79,0x76,0x72,0x6f,0x6d,0x6d,0x6e,0x71,0x75,0x7a,0x7e,0x81,0x84,0x85,0x86,0x85,0x85,0x85,0x85,0x86,0x88,0x89,0x8b,0x8b,0x8b,0x89,0x85,0x81,0x7d,0x78,0x75,0x73,0x73,0x74,0x76,0x7a,0x7d,0x80,0x82,0x83,0x83,0x82,0x81,0x81,0x81,0x82,0x83,0x85,0x87,0x89,0x89,0x89,0x87,0x84,0x80,0x7c,0x79,0x77,0x76,0x77,0x79,0x7c,0x7f,0x82,0x84,0x85,0x84,0x83,0x82,0x80,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x82,0x80,0x7d,0x7a,0x78,0x76,0x75,0x76,0x78,0x7c,0x7f,0x83,0x85,0x87,0x88,0x87,0x86,0x85,0x83,0x82,0x82,0x82,0x82,0x83,0x83,0x82,0x80,0x7e,0x7a,0x76,0x73,0x70,0x6e,0x6f,0x70,0x73,0x77,0x7c,0x80,0x83,0x86,0x87,0x87,0x86,0x86,0x85,0x85,0x86,0x87,0x88,0x89,0x89,0x88,0x86,0x82,0x7e,0x7a,0x76,0x73,0x72,0x72,0x73,0x76,0x7a,0x7d,0x80,0x82,0x83,0x84,0x83,0x83,0x82,0x82,0x83,0x84,0x86,0x87,0x88,0x89,0x88,0x85,0x82,0x7e,0x7b,0x78,0x75,0x75,0x75,0x77,0x7a,0x7d,0x7f,0x81,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x81,0x80,0x7e,0x7c,0x79,0x77,0x75,0x75,0x76,0x79,0x7d,0x80,0x84,0x87,0x8a,0x8a,0x8a,0x89,0x87,0x85,0x84,0x83,0x83,0x83,0x84,0x84,0x84,0x82,0x80,0x7d,0x79,0x76,0x74,0x73,0x73,0x75,0x78,0x7c,0x81,0x85,0x88,0x8b,0x8c,0x8b,0x8b,0x89,0x88,0x88,0x87,0x87,0x88,0x88,0x88,0x86,0x84,0x80,0x7c,0x78,0x74,0x71,0x70,0x70,0x72,0x75,0x79,0x7c,0x80,0x82,0x84,0x84,0x84,0x83,0x82,0x82,0x82,0x83,0x85,0x86,0x87,0x88,0x87,0x85,0x82,0x7e,0x7a,0x77,0x75,0x75,0x76,0x78,0x7b,0x7f,0x82,0x85,0x86,0x86,0x85,0x83,0x82,0x81,0x80,0x81,0x82,0x83,0x85,0x85,0x85,0x84,0x82,0x80,0x7d,0x7a,0x79,0x78,0x79,0x7c,0x7f,0x83,0x87,0x8a,0x8c,0x8c,0x8b,0x89,0x87,0x85,0x83,0x82,0x82,0x83,0x83,0x83,0x83,0x81,0x7e,0x7b,0x77,0x74,0x71,0x70,0x71,0x73,0x76,0x7a,0x7f,0x83,0x86,0x88,0x88,0x87,0x86,0x85,0x84,0x83,0x83,0x83,0x84,0x84,0x84,0x83,0x80,0x7d,0x78,0x74,0x71,0x6e,0x6d,0x6e,0x71,0x74,0x79,0x7d,0x81,0x83,0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x85,0x87,0x88,0x89,0x89,0x88,0x85,0x82,0x7e,0x7a,0x77,0x75,0x75,0x76,0x78,0x7b,0x7f,0x82,0x84,0x85,0x85,0x84,0x82,0x81,0x80,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x83,0x81,0x7e,0x7b,0x78,0x76,0x76,0x77,0x7a,0x7d,0x81,0x85,0x87,0x89,0x89,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7d,0x7a,0x77,0x74,0x72,0x72,0x73,0x75,0x79,0x7d,0x82,0x86,0x89,0x8a,0x8a,0x89,0x88,0x86,0x84,0x83,0x83,0x83,0x84,0x84,0x83,0x82,0x7f,0x7c,0x78,0x74,0x71,0x6f,0x6f,0x71,0x74,0x78,0x7c,0x81,0x85,0x87,0x88,0x89,0x88,0x87,0x86,0x86,0x86,0x87,0x88,0x89,0x89,0x89,0x87,0x84,0x81,0x7d,0x79,0x76,0x74,0x74,0x75,0x78,0x7b,0x7e,0x81,0x83,0x84,0x84,0x83,0x81,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x82,0x82,0x80,0x7d,0x7a,0x77,0x74,0x73,0x72,0x73,0x76,0x79,0x7d,0x80,0x83,0x84,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x78,0x76,0x75,0x75,0x77,0x79,0x7d,0x82,0x87,0x8b,0x8d,0x8f,0x8f,0x8e,0x8d,0x8b,0x89,0x88,0x87,0x87,0x87,0x86,0x86,0x84,0x82,0x7e,0x7a,0x77,0x74,0x72,0x71,0x72,0x75,0x79,0x7d,0x81,0x84,0x86,0x87,0x87,0x86,0x84,0x83,0x82,0x81,0x82,0x82,0x83,0x83,0x82,0x80,0x7e,0x7a,0x76,0x73,0x70,0x6f,0x70,0x72,0x75,0x79,0x7d,0x80,0x83,0x84,0x85,0x84,0x83,0x82,0x81,0x82,0x82,0x84,0x86,0x87,0x88,0x89,0x88,0x86,0x83,0x80,0x7e,0x7c,0x7c,0x7e,0x80,0x83,0x87,0x8a,0x8c,0x8d,0x8d,0x8b,0x89,0x87,0x84,0x83,0x82,0x81,0x82,0x82,0x82,0x82,0x81,0x7f,0x7c,0x79,0x76,0x75,0x74,0x75,0x77,0x7b,0x7f,0x83,0x87,0x89,0x8a,0x89,0x88,0x85,0x83,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7b,0x78,0x75,0x72,0x70,0x6f,0x6f,0x72,0x75,0x7a,0x7f,0x83,0x87,0x89,0x8b,0x8b,0x8a,0x89,0x87,0x87,0x86,0x87,0x87,0x88,0x88,0x87,0x85,0x83,0x7f,0x7c,0x78,0x76,0x75,0x75,0x77,0x7a,0x7d,0x81,0x85,0x87,0x89,0x89,0x88,0x87,0x85,0x84,0x83,0x83,0x83,0x84,0x84,0x84,0x83,0x82,0x7f,0x7c,0x79,0x77,0x75,0x75,0x76,0x79,0x7c,0x80,0x83,0x85,0x87,0x86,0x85,0x83,0x80,0x7e,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7e,0x7c,0x7a,0x78,0x76,0x75,0x75,0x76,0x79,0x7d,0x82,0x86,0x89,0x8c,0x8c,0x8c,0x8a,0x88,0x86,0x84,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7c,0x79,0x77,0x75,0x75,0x76,0x78,0x7c,0x80,0x85,0x89,0x8c,0x8e,0x8f,0x8e,0x8c,0x8a,0x89,0x87,0x86,0x86,0x86,0x86,0x86,0x84,0x82,0x80,0x7c,0x79,0x75,0x73,0x72,0x73,0x75,0x77,0x7b,0x7f,0x82,0x84,0x85,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x80,0x81,0x82,0x83,0x82,0x80,0x7e,0x7b,0x79,0x77,0x75,0x76,0x77,0x7a,0x7e,0x81,0x85,0x87,0x88,0x88,0x87,0x85,0x83,0x81,0x80,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7d,0x7f,0x82,0x85,0x88,0x8a,0x8b,0x8b,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x82,0x80,0x7d,0x7a,0x77,0x75,0x73,0x71,0x71,0x72,0x74,0x77,0x79,0x7c,0x7f,0x81,0x83,0x84,0x85,0x86,0x87,0x88,0x88,0x88,0x87,0x85,0x83,0x80,0x7d,0x79,0x77,0x75,0x74,0x74,0x75,0x77,0x79,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x85,0x86,0x87,0x88,0x88,0x89,0x88,0x87,0x85,0x83,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x85,0x86,0x87,0x88,0x88,0x87,0x87,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x79,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x84,0x86,0x87,0x88,0x89,0x88,0x88,0x86,0x85,0x83,0x81,0x80,0x7e,0x7d,0x7b,0x7a,0x79,0x79,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7e,0x80,0x81,0x83,0x85,0x86,0x87,0x87,0x88,0x87,0x87,0x86,0x84,0x83,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x86,0x85,0x84,0x81,0x7f,0x7c,0x7a,0x78,0x77,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x81,0x82,0x84,0x87,0x88,0x89,0x8a,0x89,0x87,0x84,0x81,0x7e,0x7b,0x79,0x78,0x78,0x79,0x79,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x80,0x83,0x87,0x8a,0x8d,0x8f,0x8f,0x8d,0x8a,0x86,0x81,0x7d,0x7a,0x79,0x78,0x79,0x7b,0x7c,0x7d,0x7d,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7d,0x81,0x85,0x89,0x8c,0x8d,0x8c,0x8a,0x87,0x83,0x7f,0x7d,0x7b,0x7b,0x7c,0x7d,0x7f,0x7f,0x7f,0x7e,0x7c,0x79,0x78,0x77,0x77,0x79,0x7d,0x81,0x85,0x88,0x8a,0x8b,0x89,0x86,0x83,0x7f,0x7d,0x7b,0x7b,0x7b,0x7d,0x7e,0x7f,0x7f,0x7e,0x7d,0x7a,0x78,0x77,0x77,0x78,0x7b,0x7f,0x82,0x86,0x88,0x89,0x89,0x87,0x85,0x82,0x80,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7b,0x79,0x77,0x75,0x74,0x75,0x76,0x79,0x7c,0x7f,0x83,0x85,0x87,0x88,0x88,0x87,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x79,0x79,0x79,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x85,0x87,0x89,0x8a,0x89,0x88,0x86,0x83,0x81,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7d,0x7b,0x78,0x77,0x77,0x79,0x7c,0x80,0x84,0x88,0x8b,0x8b,0x8a,0x87,0x83,0x7e,0x7a,0x77,0x76,0x76,0x78,0x7b,0x7d,0x7f,0x7f,0x7e,0x7c,0x79,0x76,0x75,0x75,0x77,0x7b,0x7f,0x83,0x87,0x8a,0x8a,0x89,0x87,0x84,0x81,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x7e,0x7d,0x7c,0x7a,0x78,0x78,0x78,0x7a,0x7d,0x81,0x85,0x88,0x8b,0x8c,0x8c,0x8b,0x89,0x87,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7a,0x79,0x77,0x76,0x75,0x75,0x75,0x77,0x79,0x7c,0x7f,0x82,0x85,0x87,0x88,0x88,0x87,0x84,0x81,0x7e,0x7c,0x7a,0x7a,0x7a,0x7c,0x7e,0x80,0x81,0x81,0x80,0x7f,0x7c,0x7b,0x79,0x7a,0x7c,0x7f,0x83,0x87,0x8b,0x8d,0x8d,0x8b,0x88,0x83,0x7e,0x7a,0x78,0x78,0x79,0x7b,0x7e,0x81,0x82,0x82,0x80,0x7d,0x79,0x76,0x75,0x75,0x76,0x7a,0x7e,0x83,0x87,0x88,0x88,0x86,0x83,0x7e,0x79,0x76,0x73,0x72,0x73,0x75,0x77,0x79,0x7a,0x7b,0x7a,0x79,0x77,0x76,0x75,0x76,0x78,0x7c,0x80,0x85,0x89,0x8c,0x8e,0x8f,0x8d,0x8b,0x88,0x84,0x81,0x7e,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x83,0x87,0x8b,0x8d,0x8e,0x8d,0x8b,0x87,0x83,0x7f,0x7c,0x7a,0x79,0x7a,0x7b,0x7d,0x7e,0x7e,0x7d,0x7b,0x79,0x76,0x74,0x73,0x74,0x77,0x7b,0x7f,0x84,0x87,0x88,0x87,0x85,0x81,0x7d,0x79,0x77,0x76,0x77,0x79,0x7b,0x7e,0x80,0x81,0x81,0x80,0x7e,0x7d,0x7b,0x7b,0x7c,0x7f,0x82,0x85,0x88,0x8a,0x8b,0x8a,0x87,0x85,0x81,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x81,0x86,0x8b,0x8f,0x91,0x92,0x91,0x8e,0x89,0x83,0x7d,0x79,0x75,0x74,0x74,0x76,0x79,0x7b,0x7d,0x7e,0x7d,0x7c,0x79,0x77,0x76,0x77,0x79,0x7d,0x82,0x87,0x8b,0x8d,0x8e,0x8b,0x87,0x81,0x7b,0x76,0x72,0x71,0x71,0x72,0x75,0x77,0x79,0x79,0x78,0x76,0x73,0x71,0x71,0x72,0x75,0x7a,0x80,0x86,0x8b,0x8e,0x8f,0x8e,0x8a,0x86,0x81,0x7d,0x7a,0x79,0x7a,0x7c,0x7e,0x81,0x82,0x83,0x82,0x81,0x80,0x7e,0x7e,0x7e,0x7f,0x82,0x84,0x87,0x8a,0x8b,0x8b,0x89,0x87,0x83,0x7f,0x7b,0x78,0x75,0x74,0x74,0x75,0x77,0x79,0x7c,0x7e,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x81,0x82,0x84,0x85,0x87,0x87,0x86,0x83,0x7f,0x7a,0x74,0x6f,0x6b,0x69,0x68,0x6a,0x6e,0x72,0x77,0x7b,0x7e,0x81,0x82,0x82,0x81,0x81,0x82,0x83,0x86,0x88,0x8a,0x8c,0x8c,0x8b,0x88,0x85,0x81,0x7e,0x7b,0x7a,0x7b,0x7c,0x7e,0x81,0x82,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7f,0x81,0x84,0x88,0x8b,0x8d,0x8e,0x8e,0x8c,0x89,0x85,0x81,0x7e,0x7c,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7d,0x7b,0x78,0x76,0x73,0x72,0x71,0x71,0x72,0x73,0x75,0x77,0x79,0x7b,0x7c,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x82,0x83,0x83,0x82,0x80,0x7e,0x7b,0x79,0x77,0x76,0x77,0x78,0x7a,0x7d,0x80,0x82,0x84,0x84,0x84,0x84,0x83,0x82,0x82,0x82,0x83,0x85,0x87,0x88,0x89,0x89,0x87,0x85,0x82,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7e,0x7d,0x7a,0x77,0x74,0x71,0x6f,0x6e,0x6e,0x70,0x73,0x76,0x79,0x7c,0x7e,0x7f,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x85,0x86,0x86,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x80,0x83,0x85,0x88,0x89,0x8a,0x8a,0x89,0x88,0x87,0x86,0x85,0x85,0x86,0x86,0x87,0x87,0x87,0x85,0x83,0x80,0x7e,0x7b,0x7a,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x83,0x82,0x81,0x82,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x7e,0x7b,0x79,0x76,0x75,0x74,0x75,0x77,0x79,0x7b,0x7e,0x7f,0x80,0x81,0x81,0x80,0x80,0x7f,0x80,0x80,0x81,0x82,0x83,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x80,0x82,0x85,0x86,0x87,0x87,0x87,0x85,0x84,0x82,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7b,0x79,0x77,0x76,0x77,0x78,0x7a,0x7d,0x80,0x83,0x85,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7c,0x79,0x76,0x73,0x71,0x70,0x70,0x72,0x74,0x77,0x7a,0x7c,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x82,0x81,0x7f,0x7d,0x7a,0x79,0x78,0x78,0x7a,0x7c,0x7f,0x81,0x84,0x86,0x87,0x86,0x86,0x84,0x83,0x82,0x82,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7c,0x7d,0x7f,0x82,0x84,0x87,0x88,0x88,0x88,0x87,0x85,0x83,0x81,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7c,0x7a,0x78,0x76,0x74,0x74,0x74,0x76,0x79,0x7c,0x7f,0x82,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x7f,0x7e,0x7c,0x7b,0x79,0x79,0x79,0x7b,0x7d,0x80,0x82,0x85,0x87,0x88,0x89,0x89,0x88,0x88,0x87,0x87,0x87,0x87,0x88,0x88,0x88,0x87,0x85,0x83,0x81,0x7e,0x7c,0x7a,0x79,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x79,0x77,0x76,0x75,0x74,0x75,0x76,0x78,0x7b,0x7d,0x7e,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x82,0x84,0x87,0x89,0x8a,0x8a,0x89,0x88,0x87,0x85,0x84,0x83,0x83,0x82,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7a,0x7d,0x7f,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7a,0x79,0x77,0x77,0x78,0x79,0x7b,0x7e,0x80,0x83,0x85,0x86,0x86,0x86,0x86,0x85,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x85,0x87,0x87,0x87,0x87,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x86,0x86,0x86,0x86,0x85,0x84,0x82,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x82,0x84,0x85,0x86,0x86,0x86,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7f,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x7a,0x7a,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x84,0x86,0x87,0x88,0x89,0x89,0x88,0x87,0x87,0x86,0x85,0x84,0x84,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x80,0x82,0x84,0x85,0x87,0x88,0x88,0x88,0x87,0x86,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x83,0x85,0x86,0x88,0x88,0x88,0x87,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x77,0x77,0x77,0x77,0x78,0x79,0x7b,0x7d,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x85,0x86,0x88,0x89,0x89,0x89,0x88,0x87,0x85,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x77,0x77,0x77,0x77,0x78,0x78,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x87,0x88,0x88,0x88,0x87,0x86,0x85,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x84,0x86,0x88,0x8a,0x8b,0x8b,0x8b,0x8b,0x8a,0x88,0x86,0x85,0x83,0x81,0x80,0x7f,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x87,0x87,0x86,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x87,0x87,0x87,0x86,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x86,0x86,0x85,0x84,0x83,0x82,0x80,0x7e,0x7c,0x7b,0x79,0x78,0x78,0x77,0x77,0x77,0x78,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x84,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x79,0x78,0x78,0x77,0x78,0x78,0x79,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x84,0x85,0x85,0x86,0x86,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x84,0x85,0x86,0x87,0x88,0x88,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x81,0x82,0x83,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7f,0x82,0x85,0x88,0x8a,0x8b,0x8a,0x88,0x86,0x82,0x7f,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7e,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x82,0x85,0x88,0x89,0x8a,0x8a,0x88,0x85,0x82,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x82,0x85,0x88,0x8a,0x8b,0x8b,0x8b,0x89,0x86,0x83,0x80,0x7e,0x7d,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x83,0x85,0x86,0x87,0x86,0x85,0x83,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7f,0x81,0x84,0x87,0x8a,0x8b,0x8c,0x8b,0x89,0x86,0x83,0x80,0x7d,0x7b,0x7a,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x85,0x87,0x89,0x8a,0x8a,0x89,0x87,0x84,0x82,0x7f,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x81,0x81,0x81,0x7f,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7f,0x81,0x84,0x86,0x88,0x89,0x89,0x88,0x85,0x82,0x7f,0x7c,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x81,0x83,0x86,0x88,0x89,0x8a,0x89,0x87,0x84,0x81,0x7d,0x7b,0x79,0x79,0x79,0x7b,0x7c,0x7e,0x7f,0x80,0x7f,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x84,0x86,0x88,0x88,0x87,0x86,0x83,0x80,0x7d,0x7b,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x80,0x7e,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x82,0x81,0x81,0x82,0x84,0x85,0x87,0x88,0x88,0x87,0x86,0x84,0x81,0x7f,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7b,0x7b,0x7a,0x7a,0x79,0x79,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x85,0x87,0x88,0x8a,0x8a,0x8a,0x89,0x88,0x86,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x82,0x81,0x81,0x7f,0x7e,0x7c,0x7b,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x88,0x88,0x88,0x87,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x79,0x78,0x77,0x76,0x76,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x86,0x87,0x88,0x88,0x88,0x88,0x87,0x87,0x86,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7a,0x79,0x78,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x86,0x87,0x87,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x87,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x83,0x82,0x7f,0x7d,0x7b,0x7a,0x78,0x78,0x77,0x77,0x76,0x76,0x75,0x75,0x74,0x74,0x75,0x76,0x78,0x7a,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x83,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x84,0x84,0x83,0x82,0x82,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x84,0x84,0x84,0x84,0x83,0x83,0x82,0x81,0x81,0x80,0x80,0x7e,0x7d,0x7b,0x79,0x77,0x75,0x74,0x73,0x72,0x73,0x74,0x76,0x78,0x7a,0x7b,0x7d,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x83,0x84,0x85,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x85,0x86,0x87,0x87,0x87,0x88,0x88,0x87,0x87,0x86,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x78,0x78,0x76,0x76,0x75,0x76,0x77,0x79,0x7c,0x7f,0x83,0x85,0x87,0x88,0x88,0x87,0x84,0x81,0x7d,0x7a,0x77,0x75,0x74,0x74,0x74,0x75,0x76,0x77,0x77,0x78,0x78,0x78,0x78,0x79,0x7b,0x7d,0x80,0x83,0x87,0x8a,0x8d,0x8f,0x8f,0x8f,0x8d,0x8b,0x89,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7b,0x7a,0x78,0x76,0x75,0x74,0x74,0x75,0x77,0x7a,0x7d,0x80,0x83,0x85,0x86,0x86,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7d,0x7c,0x7b,0x79,0x78,0x76,0x75,0x75,0x75,0x75,0x76,0x76,0x78,0x79,0x7b,0x7d,0x7f,0x82,0x85,0x87,0x89,0x8b,0x8c,0x8d,0x8c,0x8c,0x8b,0x89,0x88,0x87,0x85,0x84,0x82,0x80,0x7e,0x7c,0x79,0x78,0x76,0x76,0x77,0x79,0x7c,0x7f,0x82,0x85,0x87,0x89,0x8a,0x8a,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x81,0x80,0x7e,0x7c,0x7b,0x79,0x78,0x77,0x77,0x77,0x77,0x77,0x77,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x87,0x87,0x87,0x87,0x86,0x86,0x85,0x84,0x84,0x83,0x81,0x80,0x7e,0x7c,0x7b,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7c,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x85,0x85,0x86,0x86,0x86,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x76,0x75,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x77,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x84,0x85,0x86,0x86,0x87,0x87,0x87,0x86,0x86,0x85,0x83,0x82,0x80,0x7e,0x7d,0x7b,0x7a,0x79,0x78,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x85,0x86,0x86,0x86,0x86,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7a,0x78,0x77,0x75,0x74,0x74,0x74,0x74,0x74,0x75,0x77,0x79,0x7b,0x7d,0x7f,0x82,0x84,0x85,0x87,0x88,0x88,0x89,0x89,0x88,0x88,0x87,0x86,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7a,0x79,0x78,0x77,0x75,0x74,0x74,0x73,0x73,0x74,0x75,0x76,0x77,0x79,0x7b,0x7e,0x80,0x83,0x85,0x88,0x8a,0x8b,0x8d,0x8d,0x8d,0x8c,0x8b,0x89,0x87,0x84,0x82,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x76,0x76,0x76,0x77,0x78,0x79,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x87,0x87,0x87,0x86,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7b,0x7a,0x78,0x77,0x77,0x76,0x76,0x76,0x77,0x78,0x79,0x7a,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x84,0x84,0x85,0x85,0x86,0x87,0x87,0x87,0x87,0x87,0x86,0x85,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x85,0x87,0x89,0x8a,0x8a,0x8a,0x89,0x88,0x86,0x84,0x82,0x7f,0x7d,0x7b,0x79,0x77,0x75,0x74,0x73,0x72,0x72,0x72,0x73,0x75,0x77,0x79,0x7c,0x7f,0x82,0x84,0x87,0x89,0x8a,0x8b,0x8b,0x8b,0x8b,0x8a,0x89,0x88,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7a,0x79,0x78,0x78,0x78,0x78,0x79,0x7b,0x7c,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x85,0x86,0x88,0x8a,0x8b,0x8c,0x8c,0x8c,0x8b,0x89,0x87,0x84,0x82,0x7f,0x7d,0x7a,0x78,0x77,0x75,0x74,0x74,0x74,0x74,0x75,0x76,0x77,0x79,0x7c,0x7f,0x81,0x84,0x87,0x88,0x8a,0x8b,0x8b,0x8a,0x89,0x88,0x86,0x85,0x83,0x81,0x7f,0x7e,0x7c,0x7b,0x79,0x78,0x77,0x77,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x87,0x87,0x87,0x87,0x87,0x86,0x86,0x86,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x79,0x78,0x77,0x77,0x77,0x77,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x85,0x86,0x87,0x88,0x89,0x88,0x87,0x86,0x84,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x76,0x76,0x77,0x77,0x78,0x79,0x7b,0x7c,0x7f,0x81,0x84,0x87,0x89,0x8b,0x8d,0x8e,0x8e,0x8e,0x8d,0x8b,0x89,0x86,0x84,0x82,0x7f,0x7d,0x7b,0x7a,0x78,0x76,0x75,0x74,0x73,0x73,0x73,0x74,0x75,0x77,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x86,0x86,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x8a,0x88,0x86,0x83,0x80,0x7d,0x7a,0x78,0x76,0x74,0x74,0x73,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7b,0x7e,0x80,0x83,0x86,0x88,0x8b,0x8c,0x8d,0x8c,0x8b,0x89,0x87,0x84,0x82,0x7f,0x7d,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x75,0x75,0x76,0x77,0x79,0x7b,0x7e,0x81,0x84,0x87,0x89,0x8b,0x8b,0x8c,0x8b,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x78,0x76,0x74,0x73,0x72,0x72,0x73,0x74,0x75,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x85,0x88,0x8b,0x8d,0x8f,0x90,0x90,0x8f,0x8e,0x8c,0x89,0x86,0x83,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x77,0x76,0x75,0x75,0x75,0x76,0x77,0x79,0x7c,0x7f,0x82,0x84,0x87,0x89,0x8a,0x8a,0x89,0x88,0x87,0x85,0x84,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x79,0x78,0x77,0x76,0x76,0x76,0x76,0x77,0x79,0x7a,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x77,0x76,0x75,0x76,0x77,0x78,0x79,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x85,0x87,0x89,0x8b,0x8c,0x8d,0x8d,0x8d,0x8b,0x89,0x86,0x83,0x7f,0x7c,0x79,0x77,0x75,0x74,0x73,0x73,0x73,0x73,0x73,0x74,0x75,0x76,0x78,0x7b,0x7e,0x81,0x84,0x87,0x8a,0x8b,0x8c,0x8c,0x8b,0x8a,0x88,0x86,0x84,0x82,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x78,0x76,0x75,0x75,0x75,0x75,0x76,0x78,0x7a,0x7c,0x7f,0x80,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x82,0x82,0x83,0x84,0x84,0x85,0x85,0x85,0x84,0x84,0x84,0x83,0x83,0x84,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x78,0x78,0x79,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x83,0x84,0x86,0x87,0x88,0x8a,0x8a,0x8a,0x89,0x87,0x84,0x81,0x7e,0x7b,0x78,0x75,0x73,0x72,0x72,0x72,0x72,0x73,0x73,0x74,0x76,0x77,0x79,0x7c,0x7e,0x82,0x85,0x89,0x8c,0x8f,0x90,0x91,0x91,0x90,0x8e,0x8c,0x8a,0x87,0x85,0x84,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x86,0x86,0x86,0x86,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7a,0x79,0x77,0x76,0x76,0x76,0x77,0x79,0x7a,0x7d,0x7f,0x81,0x82,0x84,0x85,0x86,0x87,0x88,0x89,0x8b,0x8c,0x8c,0x8c,0x8c,0x8a,0x88,0x85,0x82,0x7e,0x7b,0x78,0x76,0x74,0x74,0x73,0x74,0x75,0x76,0x77,0x78,0x7a,0x7b,0x7d,0x80,0x82,0x85,0x88,0x8b,0x8d,0x8f,0x90,0x8f,0x8e,0x8c,0x89,0x86,0x83,0x80,0x7d,0x7b,0x79,0x78,0x77,0x76,0x75,0x75,0x74,0x74,0x74,0x74,0x76,0x78,0x7a,0x7d,0x80,0x83,0x85,0x86,0x87,0x87,0x87,0x86,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x85,0x86,0x87,0x87,0x88,0x88,0x89,0x8a,0x8a,0x8b,0x8b,0x8b,0x8a,0x88,0x86,0x83,0x7f,0x7c,0x79,0x76,0x75,0x74,0x73,0x74,0x75,0x76,0x77,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x86,0x88,0x8a,0x8c,0x8d,0x8d,0x8c,0x8b,0x88,0x85,0x81,0x7e,0x7b,0x79,0x77,0x76,0x75,0x75,0x74,0x74,0x74,0x74,0x74,0x75,0x76,0x78,0x7b,0x7e,0x81,0x85,0x87,0x8a,0x8b,0x8b,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x85,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x85,0x86,0x87,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x75,0x73,0x71,0x70,0x70,0x71,0x72,0x74,0x77,0x7a,0x7e,0x81,0x85,0x88,0x8a,0x8c,0x8d,0x8e,0x8d,0x8d,0x8c,0x8c,0x8b,0x8a,0x89,0x87,0x86,0x84,0x81,0x7f,0x7c,0x79,0x77,0x75,0x75,0x74,0x75,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x85,0x86,0x87,0x87,0x88,0x88,0x87,0x86,0x84,0x82,0x80,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x80,0x81,0x83,0x84,0x86,0x87,0x88,0x88,0x88,0x88,0x87,0x86,0x85,0x83,0x82,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x76,0x76,0x76,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x89,0x8a,0x8a,0x8a,0x89,0x88,0x87,0x86,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x78,0x76,0x74,0x72,0x71,0x71,0x72,0x74,0x76,0x79,0x7c,0x7e,0x80,0x82,0x83,0x84,0x85,0x85,0x86,0x86,0x87,0x87,0x87,0x86,0x84,0x82,0x80,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7a,0x7a,0x79,0x79,0x78,0x78,0x78,0x79,0x7b,0x7d,0x80,0x83,0x84,0x85,0x84,0x82,0x7f,0x7c,0x79,0x78,0x78,0x7a,0x7d,0x80,0x84,0x87,0x88,0x89,0x87,0x85,0x82,0x7f,0x7e,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x81,0x7f,0x7b,0x77,0x74,0x71,0x70,0x70,0x72,0x76,0x7b,0x7f,0x83,0x86,0x87,0x87,0x87,0x86,0x85,0x85,0x86,0x87,0x88,0x8a,0x8a,0x89,0x87,0x84,0x7f,0x7b,0x76,0x72,0x6f,0x6e,0x6e,0x70,0x73,0x76,0x79,0x7b,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x84,0x86,0x89,0x8c,0x8e,0x8f,0x8f,0x8e,0x8c,0x89,0x86,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7e,0x7d,0x7b,0x7a,0x78,0x78,0x78,0x79,0x7c,0x7e,0x81,0x84,0x86,0x86,0x85,0x83,0x81,0x7e,0x7c,0x7b,0x7b,0x7c,0x7e,0x81,0x83,0x85,0x85,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7e,0x7b,0x78,0x75,0x73,0x72,0x73,0x75,0x78,0x7b,0x7f,0x82,0x84,0x85,0x85,0x84,0x83,0x82,0x82,0x83,0x84,0x85,0x87,0x88,0x88,0x87,0x84,0x81,0x7c,0x77,0x73,0x6f,0x6d,0x6d,0x6e,0x70,0x73,0x76,0x79,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x80,0x83,0x86,0x89,0x8c,0x8f,0x8f,0x8f,0x8d,0x89,0x86,0x81,0x7e,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7d,0x7d,0x7c,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7e,0x82,0x85,0x87,0x88,0x87,0x85,0x81,0x7e,0x7a,0x78,0x77,0x78,0x7b,0x7e,0x81,0x83,0x85,0x84,0x82,0x7f,0x7b,0x78,0x75,0x74,0x75,0x77,0x79,0x7c,0x7f,0x80,0x80,0x7e,0x7b,0x78,0x75,0x73,0x72,0x74,0x77,0x7c,0x81,0x85,0x89,0x8b,0x8c,0x8c,0x8a,0x88,0x87,0x86,0x87,0x88,0x8a,0x8c,0x8d,0x8d,0x8b,0x87,0x82,0x7d,0x77,0x72,0x6f,0x6f,0x70,0x72,0x76,0x7a,0x7d,0x7f,0x80,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x80,0x84,0x88,0x8b,0x8d,0x8e,0x8c,0x88,0x83,0x7d,0x78,0x73,0x70,0x6f,0x70,0x72,0x74,0x77,0x79,0x7a,0x7a,0x79,0x78,0x77,0x77,0x78,0x7b,0x7f,0x83,0x88,0x8c,0x8e,0x8f,0x8e,0x8b,0x88,0x84,0x81,0x7f,0x7f,0x80,0x83,0x86,0x89,0x8b,0x8b,0x8a,0x87,0x84,0x7f,0x7c,0x79,0x78,0x78,0x79,0x7c,0x7e,0x80,0x80,0x7f,0x7c,0x79,0x76,0x72,0x71,0x70,0x72,0x75,0x79,0x7d,0x80,0x83,0x83,0x83,0x81,0x7e,0x7b,0x79,0x79,0x79,0x7b,0x7e,0x81,0x83,0x83,0x82,0x7f,0x7b,0x76,0x72,0x6e,0x6d,0x6e,0x71,0x76,0x7c,0x82,0x86,0x89,0x8a,0x89,0x87,0x84,0x81,0x80,0x81,0x83,0x86,0x8a,0x8e,0x91,0x92,0x91,0x8e,0x89,0x84,0x7f,0x7b,0x78,0x78,0x7a,0x7c,0x80,0x83,0x84,0x85,0x83,0x81,0x7d,0x7a,0x78,0x77,0x78,0x7a,0x7d,0x80,0x82,0x83,0x83,0x81,0x7e,0x7b,0x78,0x76,0x75,0x76,0x78,0x7c,0x7f,0x82,0x84,0x84,0x83,0x80,0x7d,0x79,0x76,0x75,0x74,0x75,0x77,0x7a,0x7d,0x7f,0x80,0x80,0x7e,0x7d,0x7b,0x7a,0x79,0x7a,0x7c,0x7f,0x83,0x86,0x88,0x89,0x89,0x87,0x84,0x81,0x7f,0x7d,0x7c,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x83,0x82,0x80,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x80,0x83,0x86,0x87,0x88,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x84,0x84,0x83,0x81,0x7e,0x7c,0x79,0x78,0x77,0x78,0x79,0x7a,0x7b,0x7b,0x7a,0x79,0x77,0x75,0x73,0x73,0x73,0x75,0x78,0x7c,0x80,0x83,0x86,0x88,0x88,0x87,0x85,0x83,0x81,0x80,0x7f,0x80,0x81,0x83,0x84,0x84,0x83,0x81,0x7e,0x7b,0x78,0x75,0x74,0x74,0x76,0x79,0x7d,0x82,0x86,0x89,0x8b,0x8b,0x8b,0x89,0x87,0x86,0x85,0x85,0x86,0x88,0x8a,0x8b,0x8c,0x8b,0x89,0x85,0x82,0x7e,0x7b,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x82,0x80,0x7e,0x7a,0x77,0x74,0x73,0x72,0x73,0x76,0x78,0x7b,0x7e,0x7f,0x7f,0x7e,0x7c,0x7a,0x78,0x78,0x78,0x7a,0x7d,0x81,0x84,0x87,0x89,0x89,0x87,0x85,0x81,0x7e,0x7b,0x78,0x77,0x77,0x77,0x78,0x79,0x7a,0x7a,0x79,0x78,0x77,0x76,0x76,0x77,0x79,0x7c,0x81,0x85,0x89,0x8d,0x8f,0x8f,0x8f,0x8d,0x8a,0x87,0x84,0x82,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7d,0x7b,0x78,0x75,0x72,0x70,0x70,0x71,0x73,0x77,0x7a,0x7e,0x81,0x83,0x84,0x84,0x83,0x81,0x80,0x7f,0x7f,0x80,0x82,0x84,0x86,0x87,0x87,0x86,0x83,0x80,0x7d,0x7a,0x78,0x78,0x79,0x7b,0x7d,0x80,0x82,0x83,0x82,0x80,0x7e,0x7b,0x78,0x77,0x76,0x77,0x78,0x7b,0x7d,0x7f,0x80,0x80,0x7f,0x7d,0x7c,0x7a,0x7a,0x7b,0x7e,0x81,0x85,0x88,0x8b,0x8d,0x8d,0x8b,0x89,0x85,0x82,0x7e,0x7c,0x7b,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7e,0x80,0x84,0x87,0x8a,0x8d,0x8e,0x8f,0x8d,0x8b,0x88,0x84,0x81,0x7f,0x7d,0x7c,0x7c,0x7b,0x7b,0x7a,0x79,0x77,0x74,0x72,0x70,0x6f,0x6f,0x71,0x74,0x79,0x7e,0x82,0x86,0x89,0x8a,0x8a,0x88,0x86,0x84,0x82,0x81,0x81,0x81,0x82,0x83,0x83,0x82,0x81,0x7e,0x7b,0x78,0x75,0x74,0x74,0x76,0x79,0x7d,0x81,0x84,0x86,0x88,0x87,0x86,0x84,0x82,0x80,0x80,0x80,0x82,0x84,0x86,0x88,0x89,0x89,0x87,0x85,0x82,0x80,0x7e,0x7d,0x7e,0x7f,0x82,0x85,0x87,0x88,0x87,0x85,0x82,0x7e,0x7a,0x77,0x74,0x73,0x73,0x74,0x76,0x78,0x7a,0x7b,0x7a,0x79,0x78,0x76,0x76,0x76,0x78,0x7c,0x80,0x85,0x89,0x8c,0x8e,0x8e,0x8c,0x89,0x85,0x81,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7c,0x7b,0x79,0x76,0x74,0x72,0x72,0x74,0x77,0x7b,0x81,0x86,0x8b,0x8e,0x8f,0x8f,0x8d,0x8b,0x88,0x86,0x84,0x84,0x84,0x85,0x86,0x87,0x86,0x85,0x82,0x7f,0x7b,0x78,0x76,0x75,0x75,0x77,0x7a,0x7e,0x81,0x83,0x85,0x85,0x84,0x82,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x81,0x7f,0x7e,0x7c,0x7a,0x79,0x7a,0x7b,0x7e,0x81,0x84,0x86,0x87,0x87,0x86,0x84,0x81,0x7d,0x7b,0x79,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7d,0x7e,0x7f,0x82,0x86,0x8a,0x8e,0x90,0x92,0x91,0x8f,0x8b,0x87,0x83,0x80,0x7d,0x7c,0x7b,0x7c,0x7c,0x7d,0x7c,0x7b,0x79,0x77,0x75,0x73,0x73,0x74,0x76,0x7a,0x7e,0x83,0x87,0x89,0x8a,0x8a,0x88,0x85,0x83,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7d,0x7a,0x78,0x75,0x74,0x74,0x75,0x78,0x7b,0x7f,0x82,0x85,0x87,0x87,0x87,0x86,0x84,0x83,0x82,0x82,0x83,0x84,0x86,0x87,0x88,0x87,0x86,0x85,0x82,0x80,0x7e,0x7d,0x7e,0x7f,0x81,0x83,0x86,0x87,0x88,0x87,0x85,0x82,0x7e,0x7b,0x79,0x77,0x77,0x77,0x79,0x7b,0x7d,0x7e,0x7f,0x7e,0x7d,0x7b,0x7a,0x7a,0x7a,0x7c,0x7f,0x83,0x87,0x8b,0x8d,0x8e,0x8d,0x8b,0x87,0x83,0x7f,0x7c,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7c,0x7b,0x7a,0x78,0x77,0x76,0x77,0x79,0x7c,0x80,0x85,0x89,0x8d,0x8f,0x90,0x8f,0x8d,0x8a,0x86,0x83,0x81,0x7f,0x7f,0x7e,0x7f,0x7e,0x7e,0x7c,0x7a,0x78,0x75,0x73,0x72,0x72,0x73,0x76,0x7a,0x7e,0x81,0x84,0x86,0x86,0x86,0x84,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x84,0x85,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7d,0x7f,0x82,0x85,0x88,0x89,0x89,0x88,0x85,0x82,0x7f,0x7c,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x82,0x80,0x7e,0x7d,0x7c,0x7d,0x7e,0x81,0x84,0x88,0x8b,0x8c,0x8c,0x8b,0x88,0x84,0x80,0x7c,0x78,0x77,0x76,0x77,0x78,0x79,0x7a,0x7a,0x7a,0x79,0x78,0x77,0x77,0x78,0x7b,0x7e,0x83,0x87,0x8c,0x8f,0x91,0x91,0x90,0x8e,0x8b,0x87,0x84,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x7e,0x7b,0x79,0x77,0x76,0x77,0x79,0x7c,0x80,0x83,0x87,0x89,0x8b,0x8a,0x89,0x87,0x84,0x82,0x80,0x7f,0x7f,0x80,0x81,0x82,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x84,0x84,0x82,0x80,0x7d,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x80,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x80,0x83,0x86,0x89,0x8c,0x8d,0x8d,0x8b,0x89,0x85,0x81,0x7e,0x7b,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7e,0x80,0x83,0x87,0x8a,0x8d,0x8e,0x8e,0x8d,0x8a,0x87,0x83,0x80,0x7d,0x7b,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7a,0x78,0x76,0x75,0x74,0x74,0x76,0x78,0x7b,0x7e,0x82,0x84,0x86,0x86,0x85,0x84,0x81,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x7b,0x7c,0x7f,0x81,0x84,0x87,0x88,0x88,0x87,0x86,0x83,0x81,0x7f,0x7e,0x7e,0x7e,0x80,0x82,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7e,0x80,0x82,0x84,0x86,0x87,0x87,0x85,0x83,0x80,0x7c,0x79,0x77,0x76,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7a,0x79,0x78,0x78,0x77,0x78,0x7a,0x7d,0x80,0x84,0x87,0x89,0x8a,0x8a,0x88,0x86,0x84,0x81,0x7f,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7c,0x7b,0x7a,0x79,0x78,0x79,0x7b,0x7e,0x81,0x85,0x88,0x8a,0x8b,0x8b,0x8a,0x88,0x86,0x84,0x83,0x82,0x82,0x82,0x82,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7e,0x80,0x82,0x84,0x84,0x83,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7f,0x81,0x84,0x86,0x87,0x87,0x86,0x83,0x80,0x7d,0x7a,0x78,0x77,0x77,0x79,0x7a,0x7c,0x7d,0x7e,0x7d,0x7d,0x7c,0x7b,0x7a,0x7b,0x7d,0x80,0x84,0x87,0x8b,0x8d,0x8e,0x8d,0x8b,0x89,0x85,0x82,0x7f,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7d,0x7c,0x7b,0x79,0x77,0x76,0x77,0x78,0x7a,0x7e,0x81,0x85,0x88,0x8a,0x8b,0x8b,0x89,0x87,0x84,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x74,0x75,0x77,0x7a,0x7d,0x80,0x82,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x85,0x87,0x89,0x8a,0x89,0x88,0x86,0x83,0x80,0x7e,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7f,0x81,0x84,0x87,0x89,0x8b,0x8b,0x8a,0x88,0x85,0x81,0x7e,0x7b,0x79,0x78,0x78,0x79,0x79,0x7a,0x79,0x79,0x77,0x76,0x75,0x75,0x75,0x77,0x79,0x7d,0x81,0x84,0x87,0x89,0x8a,0x8a,0x88,0x86,0x84,0x82,0x81,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x79,0x79,0x7a,0x7d,0x7f,0x82,0x85,0x87,0x88,0x88,0x87,0x85,0x83,0x81,0x80,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x80,0x7e,0x7d,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x83,0x82,0x80,0x7d,0x7b,0x79,0x78,0x78,0x78,0x79,0x7b,0x7c,0x7d,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x81,0x84,0x86,0x89,0x8a,0x8a,0x88,0x86,0x83,0x80,0x7e,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7e,0x81,0x84,0x88,0x8a,0x8c,0x8c,0x8b,0x89,0x87,0x85,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7b,0x79,0x79,0x79,0x7a,0x7d,0x7f,0x82,0x85,0x86,0x87,0x87,0x86,0x84,0x83,0x81,0x80,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7d,0x7e,0x80,0x82,0x84,0x84,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7f,0x81,0x84,0x87,0x8a,0x8c,0x8d,0x8d,0x8c,0x89,0x86,0x83,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x80,0x84,0x88,0x8b,0x8e,0x8f,0x8e,0x8c,0x89,0x86,0x82,0x80,0x7e,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7c,0x7a,0x78,0x76,0x76,0x78,0x7a,0x7e,0x81,0x84,0x86,0x87,0x86,0x84,0x81,0x7e,0x7b,0x7a,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x82,0x82,0x80,0x7f,0x7d,0x7c,0x7c,0x7d,0x7f,0x81,0x84,0x87,0x88,0x88,0x88,0x86,0x83,0x81,0x7f,0x7d,0x7d,0x7e,0x80,0x82,0x84,0x86,0x86,0x86,0x84,0x82,0x80,0x7f,0x7f,0x7f,0x81,0x84,0x87,0x8a,0x8c,0x8d,0x8d,0x8b,0x88,0x85,0x81,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7d,0x7c,0x7b,0x79,0x79,0x78,0x79,0x7b,0x7d,0x81,0x84,0x87,0x89,0x8a,0x8a,0x88,0x86,0x83,0x81,0x7f,0x7e,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x80,0x83,0x86,0x88,0x89,0x89,0x88,0x86,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x83,0x81,0x7e,0x7c,0x7a,0x79,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x87,0x89,0x8a,0x8a,0x89,0x87,0x84,0x81,0x7e,0x7b,0x79,0x78,0x78,0x78,0x79,0x7a,0x7a,0x7a,0x7a,0x79,0x79,0x79,0x79,0x7b,0x7d,0x80,0x83,0x86,0x89,0x8a,0x8b,0x8a,0x88,0x85,0x83,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x83,0x83,0x83,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7f,0x82,0x85,0x88,0x8a,0x8c,0x8c,0x8b,0x89,0x87,0x84,0x81,0x80,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7f,0x80,0x82,0x84,0x85,0x85,0x83,0x81,0x7e,0x7b,0x78,0x76,0x75,0x75,0x76,0x77,0x79,0x7b,0x7c,0x7d,0x7e,0x7d,0x7d,0x7d,0x7d,0x7f,0x81,0x84,0x87,0x89,0x8c,0x8d,0x8d,0x8c,0x89,0x86,0x83,0x80,0x7e,0x7d,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7e,0x80,0x82,0x85,0x87,0x89,0x8a,0x8a,0x88,0x86,0x83,0x81,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x83,0x84,0x84,0x85,0x86,0x87,0x87,0x87,0x87,0x85,0x84,0x81,0x7f,0x7c,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x80,0x81,0x82,0x84,0x86,0x87,0x87,0x86,0x84,0x81,0x7e,0x7a,0x78,0x76,0x76,0x76,0x78,0x7a,0x7c,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7e,0x7f,0x81,0x84,0x87,0x8a,0x8d,0x8e,0x8e,0x8c,0x89,0x85,0x81,0x7e,0x7b,0x7a,0x7a,0x7a,0x7c,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7e,0x80,0x83,0x85,0x87,0x87,0x87,0x85,0x82,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x86,0x87,0x86,0x85,0x82,0x7f,0x7c,0x79,0x78,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x83,0x82,0x83,0x83,0x85,0x86,0x88,0x88,0x88,0x87,0x85,0x81,0x7e,0x7a,0x77,0x75,0x74,0x74,0x75,0x77,0x78,0x7a,0x7b,0x7c,0x7c,0x7c,0x7c,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x87,0x87,0x86,0x84,0x81,0x7d,0x7a,0x77,0x76,0x76,0x77,0x79,0x7c,0x7e,0x80,0x81,0x81,0x7f,0x7e,0x7c,0x7b,0x7b,0x7c,0x7e,0x81,0x84,0x87,0x89,0x89,0x87,0x85,0x81,0x7e,0x7b,0x7a,0x7a,0x7c,0x7f,0x83,0x86,0x88,0x89,0x89,0x87,0x85,0x83,0x81,0x80,0x81,0x83,0x86,0x89,0x8b,0x8b,0x89,0x86,0x82,0x7d,0x78,0x74,0x72,0x72,0x74,0x76,0x7a,0x7d,0x80,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x81,0x7f,0x7d,0x7b,0x78,0x76,0x75,0x75,0x75,0x76,0x77,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x85,0x86,0x87,0x89,0x89,0x8a,0x8a,0x8a,0x89,0x88,0x86,0x85,0x83,0x82,0x81,0x80,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x82,0x83,0x84,0x85,0x86,0x86,0x86,0x84,0x81,0x7e,0x7b,0x78,0x77,0x76,0x76,0x77,0x79,0x7b,0x7c,0x7c,0x7c,0x7b,0x7a,0x78,0x78,0x78,0x78,0x79,0x7b,0x7c,0x7c,0x7c,0x7a,0x77,0x74,0x72,0x70,0x6f,0x70,0x73,0x77,0x7b,0x80,0x83,0x86,0x87,0x87,0x86,0x85,0x84,0x84,0x85,0x87,0x8a,0x8c,0x8e,0x8f,0x8e,0x8c,0x89,0x85,0x81,0x7e,0x7c,0x7c,0x7c,0x7e,0x81,0x84,0x85,0x86,0x86,0x86,0x84,0x83,0x82,0x82,0x83,0x85,0x87,0x8a,0x8b,0x8c,0x8b,0x89,0x86,0x82,0x7e,0x7a,0x77,0x75,0x74,0x75,0x75,0x76,0x77,0x78,0x78,0x77,0x76,0x74,0x73,0x73,0x74,0x75,0x77,0x7a,0x7c,0x7e,0x80,0x80,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x76,0x77,0x79,0x7b,0x7e,0x80,0x83,0x84,0x85,0x85,0x85,0x84,0x84,0x83,0x84,0x85,0x86,0x87,0x89,0x8a,0x8a,0x89,0x87,0x84,0x82,0x7f,0x7d,0x7d,0x7d,0x7f,0x82,0x85,0x88,0x8a,0x8b,0x8a,0x88,0x86,0x83,0x80,0x7e,0x7e,0x7e,0x80,0x82,0x83,0x84,0x83,0x81,0x7d,0x79,0x74,0x70,0x6e,0x6e,0x70,0x74,0x79,0x7e,0x82,0x85,0x85,0x84,0x81,0x7c,0x78,0x74,0x72,0x72,0x74,0x78,0x7c,0x80,0x82,0x83,0x82,0x7f,0x7b,0x77,0x74,0x72,0x72,0x74,0x78,0x7c,0x81,0x85,0x87,0x88,0x87,0x85,0x82,0x7f,0x7e,0x7d,0x7e,0x80,0x82,0x85,0x86,0x87,0x86,0x84,0x81,0x7e,0x7c,0x7a,0x7a,0x7c,0x7f,0x83,0x86,0x89,0x8b,0x8b,0x89,0x86,0x82,0x7e,0x7b,0x78,0x77,0x77,0x79,0x7b,0x7d,0x7e,0x7e,0x7e,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7f,0x82,0x84,0x86,0x86,0x85,0x82,0x7f,0x7b,0x78,0x75,0x74,0x74,0x75,0x77,0x7a,0x7b,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x7b,0x7d,0x80,0x84,0x87,0x8a,0x8b,0x8b,0x8a,0x88,0x86,0x83,0x82,0x81,0x81,0x82,0x84,0x86,0x88,0x89,0x89,0x88,0x86,0x84,0x83,0x81,0x81,0x81,0x82,0x83,0x85,0x85,0x85,0x84,0x82,0x7f,0x7c,0x7a,0x78,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x83,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7d,0x7e,0x80,0x81,0x82,0x81,0x7f,0x7c,0x79,0x75,0x73,0x71,0x72,0x73,0x76,0x7a,0x7e,0x81,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x80,0x81,0x82,0x84,0x85,0x86,0x87,0x86,0x84,0x81,0x7e,0x7c,0x7a,0x79,0x7a,0x7b,0x7d,0x80,0x82,0x83,0x83,0x82,0x81,0x7f,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x82,0x81,0x7f,0x7c,0x7a,0x77,0x76,0x76,0x76,0x77,0x78,0x79,0x79,0x79,0x78,0x77,0x76,0x76,0x76,0x77,0x79,0x7c,0x80,0x83,0x87,0x8a,0x8b,0x8c,0x8b,0x89,0x87,0x85,0x83,0x81,0x81,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7b,0x79,0x77,0x75,0x75,0x75,0x77,0x7a,0x7d,0x81,0x84,0x87,0x89,0x8a,0x8a,0x89,0x88,0x87,0x87,0x87,0x87,0x88,0x88,0x89,0x88,0x87,0x85,0x82,0x7f,0x7c,0x7a,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7c,0x7e,0x7f,0x7f,0x7f,0x7e,0x7c,0x7b,0x79,0x79,0x7a,0x7b,0x7d,0x80,0x82,0x84,0x86,0x86,0x85,0x84,0x82,0x7f,0x7d,0x7c,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7f,0x80,0x81,0x83,0x86,0x88,0x8b,0x8c,0x8d,0x8c,0x8b,0x88,0x86,0x83,0x80,0x7f,0x7d,0x7d,0x7c,0x7c,0x7b,0x79,0x77,0x75,0x73,0x70,0x6f,0x6e,0x6f,0x71,0x74,0x77,0x7b,0x7e,0x81,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7a,0x78,0x76,0x74,0x73,0x74,0x75,0x78,0x7b,0x7e,0x81,0x84,0x85,0x85,0x85,0x85,0x84,0x83,0x83,0x84,0x85,0x86,0x88,0x88,0x88,0x88,0x86,0x84,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x80,0x81,0x83,0x84,0x83,0x82,0x80,0x7d,0x7a,0x78,0x76,0x75,0x75,0x76,0x77,0x78,0x79,0x7a,0x7a,0x79,0x78,0x77,0x77,0x77,0x79,0x7b,0x7e,0x81,0x85,0x87,0x88,0x88,0x87,0x85,0x83,0x80,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x79,0x7a,0x7d,0x80,0x84,0x89,0x8c,0x8f,0x91,0x92,0x91,0x8f,0x8d,0x8b,0x89,0x87,0x86,0x86,0x86,0x85,0x85,0x84,0x82,0x80,0x7d,0x7b,0x78,0x77,0x76,0x77,0x78,0x7a,0x7d,0x7f,0x80,0x81,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x79,0x78,0x78,0x78,0x7a,0x7b,0x7e,0x80,0x81,0x81,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x81,0x81,0x83,0x84,0x86,0x89,0x8b,0x8c,0x8c,0x8b,0x8a,0x87,0x84,0x81,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x79,0x79,0x78,0x77,0x75,0x74,0x74,0x74,0x75,0x77,0x79,0x7c,0x7f,0x82,0x84,0x85,0x85,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b,0x7a,0x79,0x77,0x75,0x75,0x74,0x75,0x77,0x7a,0x7d,0x80,0x83,0x85,0x87,0x88,0x87,0x87,0x86,0x85,0x85,0x85,0x86,0x87,0x88,0x89,0x89,0x88,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7f,0x80,0x82,0x82,0x82,0x81,0x80,0x7e,0x7b,0x79,0x78,0x77,0x77,0x79,0x7a,0x7c,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x84,0x86,0x88,0x89,0x89,0x87,0x85,0x82,0x7f,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7b,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7d,0x7f,0x82,0x85,0x88,0x8c,0x8e,0x8f,0x8f,0x8e,0x8c,0x89,0x86,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x77,0x75,0x74,0x73,0x72,0x73,0x74,0x77,0x7a,0x7d,0x80,0x82,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x86,0x85,0x85,0x83,0x82,0x81,0x80,0x81,0x82,0x83,0x85,0x87,0x87,0x87,0x85,0x83,0x7f,0x7c,0x79,0x76,0x75,0x74,0x75,0x76,0x78,0x79,0x7b,0x7b,0x7b,0x7b,0x7a,0x7a,0x7b,0x7d,0x80,0x83,0x87,0x8a,0x8c,0x8d,0x8d,0x8b,0x88,0x85,0x81,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7c,0x7c,0x7a,0x78,0x76,0x75,0x74,0x75,0x77,0x7b,0x7f,0x83,0x87,0x8a,0x8c,0x8c,0x8b,0x89,0x87,0x84,0x83,0x82,0x82,0x83,0x84,0x85,0x86,0x85,0x84,0x81,0x7e,0x7b,0x79,0x77,0x77,0x78,0x7a,0x7d,0x7f,0x81,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x82,0x84,0x85,0x85,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x85,0x83,0x81,0x7d,0x7a,0x77,0x76,0x75,0x75,0x76,0x78,0x7a,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7d,0x7f,0x82,0x85,0x88,0x8b,0x8e,0x8f,0x90,0x8f,0x8c,0x89,0x86,0x83,0x80,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7a,0x79,0x78,0x76,0x75,0x75,0x75,0x77,0x79,0x7d,0x80,0x84,0x87,0x8a,0x8b,0x8b,0x8a,0x89,0x87,0x85,0x83,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x75,0x73,0x72,0x71,0x72,0x75,0x77,0x7a,0x7d,0x7f,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x81,0x83,0x84,0x86,0x87,0x87,0x86,0x85,0x83,0x81,0x80,0x7f,0x7f,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x79,0x79,0x7a,0x7c,0x7d,0x7f,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x83,0x85,0x87,0x89,0x8a,0x8b,0x8b,0x8a,0x88,0x85,0x82,0x7e,0x7b,0x78,0x76,0x75,0x74,0x74,0x74,0x75,0x75,0x75,0x74,0x74,0x75,0x76,0x77,0x7a,0x7d,0x81,0x85,0x88,0x8b,0x8d,0x8d,0x8d,0x8b,0x89,0x86,0x83,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7c,0x7a,0x79,0x77,0x75,0x74,0x74,0x75,0x77,0x7a,0x7e,0x81,0x84,0x87,0x88,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x84,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x7e,0x7c,0x7a,0x7a,0x7a,0x7a,0x7c,0x7d,0x7f,0x80,0x80,0x80,0x7e,0x7d,0x7b,0x79,0x78,0x77,0x78,0x78,0x7a,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x81,0x82,0x84,0x86,0x87,0x87,0x87,0x85,0x83,0x80,0x7c,0x79,0x77,0x75,0x75,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x83,0x86,0x8a,0x8e,0x90,0x92,0x92,0x91,0x8e,0x8b,0x88,0x84,0x82,0x80,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x79,0x77,0x76,0x75,0x74,0x75,0x76,0x79,0x7c,0x7f,0x82,0x85,0x86,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x7a,0x7a,0x7c,0x7d,0x7f,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x85,0x86,0x87,0x87,0x86,0x86,0x85,0x85,0x85,0x85,0x86,0x88,0x89,0x89,0x89,0x88,0x85,0x82,0x7f,0x7b,0x78,0x76,0x75,0x75,0x76,0x77,0x79,0x7a,0x7b,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x81,0x84,0x87,0x8a,0x8d,0x8e,0x8e,0x8c,0x8a,0x86,0x82,0x7f,0x7c,0x7a,0x78,0x78,0x77,0x78,0x77,0x77,0x77,0x76,0x75,0x75,0x75,0x77,0x79,0x7c,0x7f,0x83,0x86,0x88,0x8a,0x8b,0x8b,0x8a,0x88,0x87,0x85,0x83,0x82,0x82,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x82,0x83,0x84,0x85,0x85,0x85,0x83,0x80,0x7c,0x78,0x75,0x73,0x72,0x73,0x74,0x77,0x79,0x7b,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7f,0x83,0x88,0x8d,0x90,0x92,0x92,0x90,0x8c,0x87,0x82,0x7d,0x7b,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x7e,0x7b,0x78,0x75,0x72,0x71,0x72,0x76,0x7b,0x81,0x88,0x8d,0x91,0x93,0x93,0x91,0x8d,0x89,0x86,0x83,0x82,0x82,0x83,0x84,0x85,0x85,0x83,0x80,0x7d,0x78,0x75,0x72,0x71,0x71,0x73,0x76,0x7a,0x7d,0x7f,0x80,0x80,0x7f,0x7d,0x7b,0x79,0x79,0x79,0x7b,0x7d,0x7f,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x81,0x82,0x84,0x87,0x88,0x89,0x89,0x88,0x86,0x83,0x80,0x7c,0x7a,0x79,0x79,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x82,0x82,0x82,0x83,0x84,0x86,0x88,0x8b,0x8d,0x8e,0x8f,0x8e,0x8c,0x8a,0x86,0x82,0x7e,0x7b,0x79,0x77,0x76,0x75,0x75,0x74,0x74,0x73,0x72,0x71,0x70,0x71,0x73,0x76,0x7a,0x7e,0x83,0x87,0x8b,0x8d,0x8e,0x8d,0x8c,0x8a,0x88,0x86,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x81,0x7e,0x7b,0x78,0x75,0x74,0x74,0x76,0x78,0x7c,0x7f,0x82,0x84,0x85,0x85,0x84,0x82,0x80,0x7f,0x7f,0x7f,0x81,0x83,0x85,0x86,0x86,0x86,0x84,0x82,0x7f,0x7d,0x7b,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x81,0x80,0x7e,0x7b,0x77,0x74,0x72,0x71,0x71,0x72,0x74,0x77,0x7a,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x82,0x85,0x88,0x8c,0x8f,0x91,0x91,0x90,0x8d,0x89,0x85,0x80,0x7c,0x7a,0x78,0x77,0x77,0x78,0x78,0x78,0x78,0x77,0x75,0x74,0x74,0x75,0x77,0x7a,0x7e,0x83,0x88,0x8d,0x90,0x91,0x90,0x8e,0x8c,0x88,0x85,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0x7e,0x7c,0x79,0x76,0x74,0x72,0x72,0x74,0x76,0x7a,0x7d,0x81,0x83,0x85,0x85,0x85,0x84,0x83,0x82,0x82,0x82,0x83,0x85,0x86,0x88,0x88,0x88,0x87,0x85,0x83,0x81,0x80,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x76,0x75,0x76,0x76,0x78,0x7a,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x81,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8c,0x8c,0x8b,0x89,0x86,0x83,0x7f,0x7c,0x79,0x77,0x76,0x75,0x75,0x75,0x75,0x75,0x74,0x74,0x74,0x75,0x76,0x77,0x7a,0x7d,0x81,0x85,0x89,0x8c,0x8e,0x8e,0x8e,0x8c,0x8a,0x87,0x85,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x79,0x77,0x74,0x72,0x71,0x70,0x70,0x72,0x75,0x79,0x7d,0x81,0x84,0x87,0x89,0x89,0x89,0x88,0x87,0x87,0x86,0x86,0x87,0x87,0x88,0x88,0x87,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7c,0x7a,0x79,0x78,0x77,0x78,0x79,0x7a,0x7c,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x85,0x86,0x86,0x86,0x86,0x84,0x82,0x7f,0x7c,0x79,0x76,0x74,0x73,0x72,0x73,0x73,0x75,0x76,0x77,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x84,0x86,0x89,0x8b,0x8d,0x8f,0x8f,0x8e,0x8d,0x8b,0x88,0x85,0x82,0x7f,0x7d,0x7b,0x79,0x77,0x76,0x74,0x73,0x72,0x71,0x71,0x71,0x73,0x75,0x77,0x7a,0x7d,0x80,0x82,0x84,0x84,0x85,0x84,0x83,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x84,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x85,0x84,0x82,0x80,0x7e,0x7b,0x79,0x76,0x74,0x72,0x71,0x71,0x71,0x72,0x73,0x74,0x76,0x77,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x86,0x87,0x88,0x89,0x89,0x88,0x87,0x85,0x82,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x76,0x76,0x76,0x76,0x76,0x77,0x77,0x79,0x7a,0x7c,0x7f,0x82,0x84,0x87,0x89,0x8b,0x8c,0x8c,0x8c,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,0x7d,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x7a,0x78,0x77,0x76,0x75,0x75,0x75,0x76,0x76,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x84,0x86,0x88,0x8b,0x8c,0x8e,0x8f,0x8f,0x8f,0x8e,0x8d,0x8b,0x88,0x85,0x83,0x80,0x7e,0x7c,0x7b,0x79,0x79,0x78,0x78,0x78,0x78,0x79,0x79,0x7a,0x7a,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x86,0x87,0x87,0x87,0x85,0x84,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x71,0x70,0x71,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x87,0x88,0x89,0x89,0x89,0x88,0x87,0x87,0x86,0x86,0x87,0x87,0x87,0x87,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x80,0x82,0x83,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x89,0x89,0x89,0x87,0x86,0x83,0x80,0x7d,0x7a,0x76,0x74,0x71,0x6f,0x6e,0x6d,0x6d,0x6d,0x6e,0x6f,0x70,0x72,0x73,0x75,0x78,0x7a,0x7d,0x7f,0x82,0x84,0x86,0x87,0x88,0x88,0x88,0x87,0x86,0x85,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x84,0x85,0x86,0x87,0x87,0x87,0x86,0x86,0x85,0x85,0x85,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7a,0x7a,0x78,0x77,0x75,0x74,0x73,0x72,0x71,0x71,0x71,0x71,0x72,0x73,0x74,0x76,0x77,0x7a,0x7c,0x7f,0x82,0x84,0x86,0x87,0x87,0x87,0x86,0x84,0x83,0x82,0x81,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7a,0x78,0x76,0x76,0x76,0x78,0x7c,0x81,0x86,0x8b,0x8f,0x92,0x93,0x93,0x91,0x8f,0x8c,0x89,0x87,0x85,0x85,0x85,0x85,0x85,0x85,0x83,0x7f,0x7b,0x77,0x73,0x6f,0x6d,0x6c,0x6d,0x70,0x73,0x76,0x79,0x7b,0x7b,0x7b,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x80,0x82,0x84,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x82,0x83,0x84,0x85,0x87,0x88,0x8a,0x8b,0x8c,0x8d,0x8d,0x8d,0x8b,0x89,0x86,0x82,0x7e,0x7b,0x78,0x76,0x74,0x74,0x75,0x76,0x77,0x78,0x78,0x78,0x78,0x78,0x78,0x7a,0x7c,0x7f,0x83,0x87,0x8b,0x8e,0x8f,0x8f,0x8e,0x8b,0x87,0x83,0x7f,0x7c,0x7a,0x78,0x77,0x76,0x75,0x74,0x73,0x72,0x72,0x72,0x74,0x76,0x79,0x7c,0x7f,0x82,0x84,0x86,0x86,0x86,0x85,0x85,0x85,0x85,0x86,0x87,0x88,0x89,0x89,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x86,0x86,0x86,0x85,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x85,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x79,0x78,0x77,0x76,0x75,0x73,0x71,0x6f,0x6e,0x6d,0x6e,0x6f,0x71,0x73,0x76,0x7a,0x7d,0x81,0x83,0x86,0x88,0x89,0x8b,0x8b,0x8c,0x8c,0x8b,0x8a,0x89,0x87,0x84,0x82,0x7f,0x7c,0x7a,0x79,0x78,0x77,0x77,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x89,0x8a,0x8b,0x8b,0x8a,0x8a,0x89,0x87,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x79,0x77,0x76,0x76,0x75,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x82,0x83,0x83,0x85,0x86,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x89,0x87,0x86,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x79,0x79,0x78,0x77,0x77,0x77,0x78,0x79,0x7a,0x7c,0x7f,0x82,0x85,0x87,0x8a,0x8b,0x8c,0x8c,0x8c,0x8b,0x8a,0x88,0x86,0x84,0x82,0x7f,0x7d,0x7a,0x78,0x75,0x73,0x71,0x70,0x70,0x71,0x72,0x74,0x76,0x78,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x86,0x87,0x88,0x88,0x89,0x88,0x87,0x86,0x84,0x81,0x7f,0x7c,0x7b,0x79,0x78,0x78,0x78,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x84,0x84,0x85,0x85,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x85,0x87,0x89,0x8b,0x8c,0x8c,0x8b,0x8a,0x88,0x86,0x83,0x81,0x7e,0x7c,0x7a,0x78,0x76,0x75,0x73,0x72,0x71,0x70,0x70,0x71,0x73,0x76,0x79,0x7d,0x80,0x83,0x86,0x88,0x8a,0x8a,0x8b,0x8b,0x8b,0x8a,0x8a,0x89,0x88,0x87,0x85,0x83,0x81,0x7f,0x7c,0x7b,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x85,0x85,0x84,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x79,0x79,0x79,0x78,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x83,0x86,0x89,0x8b,0x8c,0x8d,0x8c,0x8c,0x8a,0x88,0x86,0x84,0x82,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x77,0x78,0x79,0x7c,0x7e,0x82,0x85,0x88,0x8a,0x8c,0x8d,0x8d,0x8d,0x8c,0x8b,0x89,0x88,0x87,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x76,0x75,0x75,0x75,0x76,0x78,0x7a,0x7c,0x7e,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8c,0x8d,0x8c,0x8a,0x88,0x86,0x84,0x81,0x7f,0x7d,0x7b,0x7a,0x78,0x77,0x76,0x76,0x75,0x75,0x76,0x76,0x78,0x7a,0x7d,0x7f,0x82,0x85,0x88,0x8a,0x8c,0x8d,0x8d,0x8c,0x8b,0x89,0x88,0x86,0x84,0x82,0x81,0x7f,0x7e,0x7c,0x7b,0x79,0x78,0x77,0x76,0x77,0x77,0x79,0x7b,0x7d,0x80,0x82,0x84,0x85,0x86,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7b,0x7b,0x7a,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x84,0x87,0x89,0x8c,0x8f,0x90,0x91,0x90,0x8e,0x8a,0x86,0x82,0x7d,0x7a,0x77,0x76,0x75,0x75,0x76,0x76,0x77,0x78,0x78,0x78,0x78,0x79,0x7a,0x7c,0x7f,0x82,0x86,0x8a,0x8c,0x8e,0x8e,0x8d,0x8a,0x87,0x83,0x7f,0x7c,0x7a,0x78,0x77,0x77,0x77,0x77,0x77,0x76,0x75,0x75,0x74,0x75,0x76,0x79,0x7c,0x81,0x85,0x89,0x8c,0x8e,0x8f,0x8e,0x8c,0x8a,0x88,0x87,0x86,0x85,0x86,0x86,0x87,0x88,0x87,0x87,0x85,0x84,0x82,0x81,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x82,0x80,0x7e,0x7b,0x78,0x76,0x75,0x75,0x76,0x77,0x79,0x7c,0x7e,0x7f,0x81,0x82,0x82,0x83,0x83,0x84,0x85,0x86,0x87,0x88,0x88,0x88,0x87,0x85,0x82,0x7f,0x7b,0x78,0x75,0x73,0x72,0x72,0x73,0x75,0x77,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x84,0x86,0x88,0x8b,0x8d,0x8f,0x91,0x91,0x91,0x8f,0x8c,0x88,0x85,0x82,0x80,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x7a,0x7c,0x7e,0x81,0x84,0x86,0x87,0x87,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7f,0x80,0x81,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7e,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7e,0x7d,0x7b,0x79,0x77,0x76,0x76,0x77,0x79,0x7b,0x7d,0x80,0x82,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x86,0x87,0x88,0x88,0x88,0x87,0x85,0x82,0x7f,0x7d,0x7a,0x78,0x77,0x77,0x77,0x79,0x7b,0x7d,0x7e,0x80,0x81,0x81,0x81,0x81,0x82,0x82,0x84,0x85,0x87,0x89,0x8a,0x8a,0x89,0x87,0x84,0x81,0x7e,0x7b,0x79,0x77,0x77,0x77,0x78,0x79,0x79,0x7a,0x79,0x78,0x78,0x77,0x76,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x84,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x80,0x81,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7e,0x7e,0x7f,0x81,0x82,0x84,0x86,0x87,0x87,0x86,0x85,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7d,0x7b,0x78,0x75,0x72,0x71,0x70,0x71,0x73,0x75,0x79,0x7c,0x7f,0x81,0x82,0x82,0x82,0x82,0x82,0x83,0x84,0x85,0x87,0x89,0x8a,0x8a,0x8a,0x88,0x86,0x83,0x80,0x7d,0x7c,0x7b,0x7b,0x7b,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x83,0x85,0x86,0x87,0x87,0x87,0x85,0x84,0x82,0x80,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x82,0x82,0x83,0x82,0x81,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x7e,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7c,0x7e,0x80,0x83,0x86,0x88,0x89,0x89,0x89,0x88,0x86,0x85,0x84,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7c,0x7a,0x78,0x76,0x76,0x76,0x78,0x7a,0x7d,0x7f,0x82,0x84,0x85,0x85,0x85,0x85,0x84,0x85,0x85,0x86,0x87,0x88,0x88,0x88,0x87,0x85,0x82,0x7f,0x7c,0x7a,0x78,0x78,0x78,0x79,0x7a,0x7c,0x7d,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x83,0x85,0x86,0x88,0x88,0x88,0x87,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7f,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7c,0x7c,0x7e,0x80,0x83,0x86,0x87,0x88,0x88,0x86,0x84,0x82,0x81,0x80,0x80,0x81,0x82,0x83,0x84,0x83,0x81,0x7e,0x7a,0x77,0x74,0x73,0x73,0x75,0x78,0x7c,0x80,0x83,0x85,0x85,0x84,0x82,0x80,0x7f,0x7e,0x80,0x82,0x85,0x89,0x8b,0x8d,0x8c,0x8a,0x86,0x81,0x7b,0x77,0x74,0x74,0x75,0x78,0x7b,0x7f,0x82,0x84,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7e,0x7f,0x82,0x85,0x88,0x89,0x8a,0x89,0x86,0x82,0x7f,0x7b,0x79,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x7f,0x7e,0x7d,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x81,0x7f,0x7e,0x7c,0x7c,0x7c,0x7e,0x80,0x82,0x85,0x87,0x88,0x89,0x89,0x88,0x87,0x85,0x84,0x83,0x83,0x84,0x85,0x86,0x86,0x86,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x83,0x82,0x82,0x83,0x83,0x84,0x85,0x85,0x84,0x82,0x7f,0x7c,0x79,0x77,0x75,0x74,0x75,0x76,0x78,0x7b,0x7d,0x7f,0x81,0x81,0x81,0x80,0x80,0x80,0x81,0x82,0x84,0x87,0x89,0x8b,0x8b,0x8a,0x88,0x85,0x82,0x7e,0x7c,0x7a,0x7a,0x7b,0x7d,0x80,0x82,0x83,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7b,0x7c,0x7e,0x81,0x83,0x86,0x87,0x86,0x84,0x81,0x7e,0x7b,0x79,0x78,0x79,0x7b,0x7e,0x81,0x83,0x85,0x85,0x83,0x81,0x7e,0x7b,0x79,0x78,0x78,0x7a,0x7d,0x80,0x83,0x84,0x83,0x81,0x7e,0x7a,0x77,0x75,0x74,0x75,0x78,0x7c,0x80,0x84,0x86,0x88,0x87,0x85,0x83,0x80,0x7e,0x7e,0x7f,0x81,0x84,0x87,0x89,0x8a,0x89,0x87,0x83,0x7f,0x7b,0x77,0x75,0x75,0x77,0x7a,0x7d,0x80,0x83,0x84,0x84,0x83,0x81,0x7f,0x7e,0x7e,0x7f,0x82,0x85,0x88,0x8b,0x8c,0x8d,0x8b,0x89,0x85,0x81,0x7e,0x7c,0x7b,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7f,0x80,0x82,0x85,0x87,0x89,0x89,0x88,0x86,0x83,0x80,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x80,0x82,0x83,0x83,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7c,0x7e,0x80,0x83,0x85,0x86,0x85,0x84,0x81,0x7e,0x7c,0x79,0x79,0x79,0x7b,0x7e,0x81,0x84,0x86,0x87,0x87,0x85,0x83,0x81,0x7f,0x7f,0x7f,0x81,0x83,0x86,0x87,0x88,0x87,0x84,0x80,0x7c,0x78,0x75,0x74,0x74,0x76,0x79,0x7c,0x80,0x82,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x81,0x84,0x87,0x8a,0x8b,0x8b,0x88,0x84,0x80,0x7b,0x77,0x75,0x74,0x76,0x78,0x7b,0x7f,0x81,0x83,0x83,0x81,0x80,0x7e,0x7c,0x7c,0x7d,0x7f,0x82,0x85,0x88,0x8a,0x8b,0x8a,0x88,0x84,0x81,0x7e,0x7d,0x7c,0x7d,0x7f,0x81,0x84,0x85,0x86,0x85,0x83,0x81,0x7e,0x7b,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x82,0x80,0x7d,0x7a,0x78,0x76,0x76,0x77,0x79,0x7c,0x80,0x83,0x85,0x86,0x86,0x85,0x83,0x81,0x7f,0x7e,0x7f,0x80,0x82,0x85,0x87,0x88,0x88,0x87,0x84,0x81,0x7d,0x7a,0x78,0x78,0x79,0x7b,0x7e,0x80,0x83,0x84,0x85,0x84,0x83,0x81,0x80,0x7f,0x7f,0x81,0x83,0x85,0x87,0x88,0x89,0x87,0x85,0x81,0x7d,0x7a,0x77,0x75,0x75,0x76,0x78,0x7b,0x7d,0x7e,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7e,0x81,0x84,0x87,0x88,0x89,0x88,0x86,0x83,0x80,0x7e,0x7d,0x7d,0x7d,0x7f,0x81,0x83,0x84,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7d,0x7d,0x7f,0x81,0x83,0x85,0x87,0x87,0x86,0x83,0x80,0x7d,0x7a,0x78,0x78,0x79,0x7a,0x7d,0x7f,0x81,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x79,0x78,0x79,0x7b,0x7d,0x7f,0x80,0x80,0x7f,0x7d,0x7a,0x77,0x74,0x72,0x71,0x72,0x74,0x77,0x7a,0x7e,0x80,0x82,0x82,0x82,0x81,0x80,0x80,0x81,0x82,0x84,0x87,0x89,0x8b,0x8b,0x8b,0x89,0x86,0x82,0x7f,0x7c,0x7a,0x7a,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x83,0x85,0x87,0x89,0x89,0x88,0x86,0x84,0x81,0x7e,0x7c,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x7e,0x7e,0x7e,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x86,0x86,0x84,0x82,0x7f,0x7c,0x79,0x77,0x77,0x78,0x7a,0x7d,0x81,0x84,0x87,0x88,0x89,0x88,0x87,0x85,0x84,0x83,0x84,0x84,0x86,0x87,0x88,0x88,0x87,0x85,0x82,0x7f,0x7c,0x79,0x77,0x76,0x76,0x77,0x79,0x7b,0x7d,0x7e,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x84,0x82,0x7f,0x7c,0x79,0x76,0x74,0x74,0x74,0x76,0x79,0x7b,0x7e,0x7f,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x79,0x7b,0x7d,0x80,0x83,0x86,0x88,0x88,0x87,0x85,0x82,0x7f,0x7e,0x7d,0x7d,0x7f,0x81,0x84,0x86,0x87,0x87,0x86,0x85,0x82,0x80,0x7f,0x7f,0x80,0x81,0x83,0x85,0x87,0x87,0x85,0x83,0x7f,0x7c,0x79,0x76,0x75,0x76,0x77,0x7a,0x7d,0x80,0x82,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7c,0x7a,0x78,0x75,0x73,0x72,0x71,0x72,0x74,0x77,0x7a,0x7d,0x7f,0x81,0x82,0x82,0x82,0x81,0x81,0x81,0x81,0x82,0x84,0x86,0x87,0x88,0x88,0x87,0x85,0x82,0x7f,0x7c,0x79,0x79,0x79,0x7a,0x7d,0x7f,0x81,0x83,0x83,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7f,0x81,0x84,0x86,0x88,0x88,0x87,0x84,0x80,0x7c,0x79,0x77,0x76,0x77,0x79,0x7c,0x7e,0x80,0x81,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7e,0x7e,0x7e,0x7c,0x79,0x76,0x74,0x73,0x73,0x75,0x78,0x7c,0x7f,0x82,0x84,0x84,0x83,0x82,0x80,0x7f,0x7f,0x80,0x81,0x84,0x87,0x8a,0x8b,0x8b,0x89,0x85,0x80,0x7b,0x76,0x72,0x70,0x6f,0x71,0x74,0x79,0x7d,0x81,0x84,0x86,0x86,0x85,0x83,0x82,0x81,0x80,0x81,0x82,0x84,0x86,0x88,0x88,0x87,0x84,0x80,0x7c,0x77,0x73,0x70,0x6f,0x6f,0x71,0x73,0x76,0x79,0x7a,0x7b,0x7a,0x79,0x78,0x78,0x78,0x79,0x7c,0x7f,0x83,0x86,0x87,0x88,0x86,0x83,0x7f,0x7a,0x76,0x74,0x73,0x74,0x77,0x7b,0x7f,0x82,0x85,0x86,0x86,0x85,0x83,0x81,0x80,0x80,0x81,0x82,0x84,0x85,0x86,0x85,0x84,0x81,0x7d,0x79,0x76,0x74,0x73,0x74,0x77,0x7b,0x7f,0x84,0x87,0x8a,0x8b,0x8b,0x8a,0x88,0x87,0x85,0x84,0x84,0x84,0x85,0x85,0x85,0x84,0x82,0x7e,0x7a,0x76,0x72,0x70,0x6e,0x6f,0x71,0x74,0x79,0x7d,0x82,0x85,0x88,0x89,0x89,0x89,0x88,0x87,0x86,0x85,0x85,0x84,0x84,0x82,0x80,0x7d,0x7a,0x77,0x74,0x73,0x72,0x73,0x75,0x78,0x7b,0x7e,0x80,0x82,0x83,0x82,0x81,0x81,0x80,0x80,0x81,0x82,0x84,0x86,0x86,0x86,0x85,0x82,0x7f,0x7b,0x78,0x76,0x75,0x75,0x77,0x7a,0x7e,0x81,0x85,0x87,0x88,0x87,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7a,0x79,0x77,0x75,0x73,0x73,0x73,0x74,0x76,0x7a,0x7d,0x81,0x84,0x86,0x87,0x86,0x85,0x83,0x81,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x78,0x76,0x74,0x72,0x70,0x70,0x71,0x73,0x77,0x7c,0x81,0x86,0x8a,0x8c,0x8d,0x8c,0x8a,0x88,0x85,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x80,0x7e,0x7b,0x78,0x75,0x74,0x74,0x75,0x78,0x7b,0x7f,0x83,0x86,0x88,0x88,0x88,0x86,0x84,0x82,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7c,0x7a,0x77,0x74,0x72,0x71,0x72,0x74,0x77,0x7a,0x7e,0x82,0x84,0x86,0x86,0x86,0x85,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x80,0x83,0x87,0x8a,0x8c,0x8d,0x8c,0x8b,0x89,0x86,0x83,0x80,0x7f,0x7d,0x7d,0x7c,0x7c,0x7b,0x7a,0x78,0x76,0x74,0x73,0x72,0x73,0x75,0x78,0x7d,0x81,0x86,0x89,0x8b,0x8c,0x8b,0x89,0x86,0x83,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7b,0x79,0x77,0x75,0x72,0x71,0x71,0x72,0x75,0x79,0x7e,0x82,0x86,0x89,0x8a,0x8a,0x89,0x87,0x85,0x83,0x81,0x81,0x80,0x81,0x80,0x80,0x7f,0x7d,0x7b,0x78,0x76,0x74,0x74,0x75,0x77,0x7b,0x7f,0x83,0x86,0x88,0x89,0x89,0x87,0x85,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7a,0x78,0x76,0x74,0x73,0x74,0x76,0x79,0x7c,0x81,0x84,0x88,0x8a,0x8a,0x89,0x88,0x85,0x83,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7b,0x79,0x78,0x76,0x75,0x75,0x77,0x7a,0x7d,0x82,0x86,0x8a,0x8c,0x8d,0x8d,0x8c,0x89,0x86,0x83,0x81,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x79,0x77,0x75,0x74,0x74,0x75,0x77,0x7b,0x7f,0x84,0x88,0x8b,0x8d,0x8e,0x8d,0x8b,0x89,0x86,0x84,0x82,0x81,0x81,0x81,0x80,0x80,0x7f,0x7d,0x7b,0x79,0x77,0x76,0x76,0x77,0x7a,0x7e,0x82,0x86,0x8a,0x8c,0x8d,0x8c,0x8b,0x88,0x85,0x83,0x81,0x80,0x7f,0x7f,0x80,0x80,0x80,0x7e,0x7d,0x7a,0x78,0x77,0x76,0x77,0x78,0x7c,0x80,0x84,0x87,0x8a,0x8c,0x8c,0x8a,0x87,0x84,0x81,0x7e,0x7d,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x78,0x77,0x75,0x75,0x76,0x78,0x7b,0x7f,0x84,0x88,0x8b,0x8d,0x8e,0x8d,0x8b,0x88,0x85,0x82,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7a,0x78,0x76,0x74,0x73,0x72,0x73,0x76,0x79,0x7d,0x82,0x86,0x89,0x8b,0x8c,0x8b,0x89,0x86,0x83,0x81,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7c,0x7a,0x78,0x76,0x74,0x73,0x73,0x75,0x77,0x7b,0x80,0x84,0x87,0x8a,0x8a,0x8a,0x88,0x86,0x83,0x81,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x78,0x77,0x77,0x77,0x79,0x7d,0x81,0x85,0x88,0x8b,0x8c,0x8c,0x8a,0x88,0x85,0x82,0x7f,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x77,0x79,0x7d,0x80,0x85,0x88,0x8c,0x8d,0x8e,0x8d,0x8b,0x88,0x85,0x82,0x80,0x7e,0x7e,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x78,0x77,0x76,0x76,0x78,0x7b,0x7f,0x83,0x88,0x8c,0x8e,0x90,0x90,0x8e,0x8c,0x89,0x86,0x83,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x78,0x76,0x75,0x74,0x75,0x76,0x79,0x7d,0x81,0x85,0x88,0x8a,0x8a,0x89,0x87,0x84,0x81,0x7f,0x7d,0x7c,0x7b,0x7c,0x7c,0x7c,0x7c,0x7b,0x79,0x78,0x76,0x76,0x76,0x77,0x7a,0x7e,0x82,0x86,0x89,0x8b,0x8c,0x8b,0x8a,0x87,0x84,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7d,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7f,0x83,0x87,0x8a,0x8c,0x8e,0x8d,0x8b,0x89,0x85,0x82,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x79,0x78,0x77,0x76,0x75,0x74,0x74,0x75,0x76,0x79,0x7d,0x81,0x85,0x89,0x8b,0x8c,0x8b,0x89,0x86,0x83,0x80,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x78,0x79,0x7c,0x80,0x84,0x88,0x8c,0x8f,0x91,0x91,0x90,0x8d,0x8b,0x88,0x85,0x83,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x7a,0x7b,0x7d,0x81,0x84,0x87,0x8a,0x8b,0x8c,0x8a,0x88,0x85,0x81,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7a,0x79,0x79,0x78,0x77,0x76,0x76,0x77,0x79,0x7d,0x80,0x84,0x87,0x89,0x8a,0x8a,0x88,0x86,0x83,0x80,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7b,0x7c,0x7f,0x82,0x86,0x8a,0x8d,0x90,0x92,0x92,0x91,0x8e,0x8b,0x87,0x84,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7b,0x7a,0x79,0x77,0x77,0x77,0x78,0x7a,0x7d,0x81,0x85,0x88,0x8a,0x8b,0x8b,0x89,0x86,0x83,0x7f,0x7c,0x7a,0x79,0x78,0x78,0x78,0x78,0x77,0x76,0x75,0x74,0x73,0x73,0x74,0x76,0x79,0x7d,0x81,0x85,0x88,0x8a,0x8b,0x8a,0x88,0x85,0x83,0x80,0x7e,0x7d,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x80,0x83,0x86,0x8a,0x8d,0x8f,0x8f,0x8e,0x8c,0x89,0x85,0x82,0x7f,0x7d,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x79,0x78,0x78,0x78,0x78,0x7a,0x7d,0x80,0x84,0x87,0x8a,0x8b,0x8a,0x89,0x86,0x83,0x7f,0x7c,0x79,0x77,0x77,0x76,0x77,0x77,0x77,0x77,0x77,0x76,0x76,0x76,0x77,0x79,0x7c,0x80,0x84,0x88,0x8b,0x8d,0x8e,0x8e,0x8c,0x89,0x86,0x83,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7d,0x7f,0x83,0x86,0x8a,0x8c,0x8d,0x8d,0x8b,0x88,0x85,0x82,0x7f,0x7d,0x7b,0x7a,0x7a,0x7a,0x7b,0x7a,0x7a,0x79,0x78,0x77,0x77,0x77,0x79,0x7b,0x7f,0x82,0x85,0x88,0x89,0x89,0x88,0x86,0x83,0x80,0x7d,0x7a,0x79,0x78,0x78,0x79,0x7a,0x7a,0x7a,0x7a,0x79,0x79,0x79,0x79,0x7b,0x7d,0x80,0x84,0x87,0x8a,0x8c,0x8d,0x8c,0x8a,0x87,0x84,0x80,0x7d,0x7b,0x79,0x79,0x79,0x79,0x79,0x79,0x79,0x78,0x78,0x77,0x78,0x79,0x7b,0x7e,0x82,0x86,0x89,0x8c,0x8d,0x8d,0x8c,0x8a,0x86,0x83,0x80,0x7d,0x7b,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x79,0x79,0x78,0x78,0x78,0x7a,0x7c,0x80,0x83,0x87,0x8a,0x8c,0x8d,0x8d,0x8b,0x88,0x85,0x82,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x81,0x84,0x87,0x89,0x8b,0x8b,0x89,0x87,0x84,0x81,0x7e,0x7c,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x80,0x83,0x86,0x89,0x8c,0x8d,0x8e,0x8d,0x8b,0x88,0x84,0x81,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7d,0x7f,0x81,0x85,0x88,0x8b,0x8d,0x8e,0x8d,0x8b,0x89,0x85,0x82,0x7e,0x7b,0x79,0x78,0x78,0x78,0x78,0x78,0x78,0x77,0x77,0x77,0x77,0x78,0x7a,0x7d,0x80,0x84,0x87,0x8a,0x8c,0x8c,0x8b,0x89,0x86,0x83,0x80,0x7d,0x7b,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x80,0x83,0x86,0x89,0x8a,0x8b,0x8b,0x89,0x86,0x83,0x80,0x7e,0x7b,0x7a,0x7a,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x82,0x85,0x88,0x8a,0x8b,0x8b,0x89,0x87,0x84,0x81,0x7e,0x7b,0x79,0x78,0x78,0x78,0x78,0x79,0x79,0x7a,0x7a,0x7a,0x7b,0x7c,0x7d,0x80,0x82,0x85,0x88,0x8b,0x8c,0x8c,0x8c,0x8a,0x87,0x84,0x80,0x7d,0x7b,0x79,0x78,0x77,0x77,0x77,0x77,0x78,0x78,0x78,0x78,0x79,0x7b,0x7d,0x80,0x83,0x86,0x89,0x8b,0x8c,0x8c,0x8b,0x89,0x86,0x84,0x81,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7c,0x7d,0x80,0x83,0x86,0x88,0x8a,0x8c,0x8c,0x8c,0x8a,0x88,0x85,0x82,0x80,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x87,0x88,0x89,0x88,0x87,0x85,0x82,0x7f,0x7c,0x7a,0x78,0x77,0x77,0x77,0x77,0x78,0x79,0x79,0x7a,0x7b,0x7b,0x7d,0x7e,0x81,0x84,0x86,0x89,0x8b,0x8c,0x8c,0x8b,0x88,0x85,0x82,0x7f,0x7c,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x81,0x83,0x86,0x89,0x8c,0x8d,0x8d,0x8c,0x8a,0x88,0x85,0x81,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x77,0x77,0x77,0x77,0x77,0x78,0x79,0x7a,0x7c,0x7f,0x81,0x83,0x86,0x88,0x89,0x89,0x88,0x87,0x85,0x82,0x7f,0x7c,0x7a,0x78,0x77,0x76,0x77,0x78,0x79,0x7b,0x7c,0x7e,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x85,0x86,0x87,0x87,0x87,0x86,0x84,0x81,0x7e,0x7b,0x79,0x78,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x84,0x86,0x88,0x8a,0x8b,0x8a,0x89,0x87,0x83,0x80,0x7c,0x79,0x77,0x76,0x76,0x76,0x78,0x7a,0x7b,0x7d,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x85,0x87,0x88,0x89,0x89,0x87,0x85,0x82,0x7f,0x7b,0x77,0x75,0x73,0x72,0x71,0x72,0x74,0x75,0x77,0x78,0x7a,0x7b,0x7d,0x7e,0x80,0x83,0x85,0x88,0x8a,0x8c,0x8c,0x8c,0x8a,0x88,0x84,0x80,0x7d,0x7a,0x78,0x77,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x86,0x87,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x89,0x87,0x84,0x81,0x7e,0x7c,0x79,0x78,0x77,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7f,0x80,0x82,0x84,0x85,0x86,0x85,0x84,0x82,0x80,0x7d,0x7a,0x77,0x75,0x74,0x73,0x74,0x75,0x76,0x78,0x7a,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x86,0x88,0x89,0x8a,0x8a,0x8a,0x88,0x87,0x84,0x82,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,0x7e,0x7f,0x81,0x84,0x86,0x88,0x8a,0x8b,0x8b,0x8a,0x87,0x84,0x80,0x7b,0x78,0x75,0x73,0x72,0x72,0x73,0x75,0x76,0x78,0x79,0x7a,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x84,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7a,0x78,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7d,0x7e,0x80,0x81,0x82,0x84,0x85,0x86,0x86,0x87,0x87,0x87,0x87,0x86,0x84,0x83,0x80,0x7e,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x85,0x86,0x86,0x87,0x87,0x88,0x88,0x89,0x89,0x88,0x87,0x85,0x82,0x7f,0x7c,0x79,0x76,0x75,0x74,0x75,0x76,0x78,0x7a,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x85,0x87,0x88,0x89,0x89,0x87,0x85,0x82,0x7e,0x7a,0x77,0x74,0x73,0x73,0x74,0x76,0x78,0x7a,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x81,0x83,0x85,0x88,0x89,0x8b,0x8b,0x8a,0x88,0x85,0x82,0x7f,0x7c,0x7a,0x78,0x78,0x78,0x79,0x7a,0x7a,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x86,0x88,0x88,0x88,0x87,0x85,0x83,0x80,0x7d,0x7a,0x78,0x76,0x75,0x75,0x76,0x76,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x85,0x86,0x86,0x86,0x84,0x83,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x83,0x84,0x86,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x89,0x88,0x85,0x83,0x80,0x7d,0x7a,0x78,0x76,0x76,0x76,0x77,0x78,0x79,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x87,0x86,0x84,0x82,0x80,0x7d,0x7a,0x77,0x75,0x74,0x73,0x74,0x75,0x77,0x79,0x7c,0x7e,0x80,0x81,0x83,0x84,0x85,0x86,0x88,0x89,0x8a,0x8b,0x8b,0x8a,0x88,0x86,0x83,0x80,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x83,0x84,0x85,0x86,0x86,0x86,0x84,0x82,0x7f,0x7c,0x79,0x77,0x76,0x75,0x76,0x77,0x79,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x86,0x87,0x88,0x88,0x86,0x84,0x81,0x7d,0x7b,0x78,0x77,0x77,0x78,0x79,0x7a,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x84,0x86,0x89,0x8b,0x8c,0x8c,0x8c,0x8a,0x87,0x84,0x81,0x7d,0x7b,0x79,0x77,0x77,0x76,0x76,0x76,0x76,0x76,0x76,0x76,0x77,0x79,0x7b,0x7e,0x80,0x82,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x74,0x75,0x76,0x78,0x7b,0x7e,0x82,0x84,0x87,0x88,0x89,0x89,0x89,0x89,0x88,0x88,0x88,0x88,0x87,0x86,0x84,0x82,0x7f,0x7d,0x7b,0x7a,0x7b,0x7c,0x7e,0x81,0x83,0x85,0x87,0x87,0x87,0x87,0x86,0x86,0x85,0x85,0x86,0x86,0x86,0x85,0x83,0x80,0x7d,0x79,0x76,0x73,0x72,0x71,0x72,0x74,0x76,0x78,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x81,0x7e,0x7b,0x77,0x74,0x72,0x70,0x70,0x71,0x73,0x75,0x78,0x7a,0x7c,0x7e,0x7f,0x81,0x83,0x85,0x88,0x8b,0x8e,0x91,0x93,0x93,0x93,0x91,0x8d,0x89,0x85,0x81,0x7d,0x7a,0x79,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x88,0x86,0x83,0x7f,0x7a,0x76,0x73,0x70,0x6e,0x6d,0x6d,0x6e,0x70,0x72,0x74,0x76,0x78,0x79,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x82,0x83,0x83,0x82,0x80,0x7d,0x7a,0x77,0x75,0x73,0x72,0x71,0x72,0x74,0x76,0x79,0x7c,0x80,0x82,0x85,0x87,0x89,0x8b,0x8c,0x8d,0x8d,0x8d,0x8c,0x8b,0x89,0x87,0x84,0x80,0x7d,0x7a,0x77,0x75,0x74,0x74,0x76,0x78,0x7b,0x7e,0x82,0x85,0x88,0x8a,0x8b,0x8c,0x8c,0x8c,0x8b,0x8a,0x89,0x87,0x85,0x82,0x7f,0x7b,0x77,0x73,0x70,0x6e,0x6c,0x6c,0x6d,0x6f,0x72,0x76,0x7a,0x7d,0x80,0x83,0x85,0x86,0x88,0x88,0x89,0x89,0x88,0x87,0x86,0x83,0x80,0x7d,0x79,0x76,0x73,0x72,0x72,0x73,0x74,0x77,0x79,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90,0x90,0x8f,0x8d,0x8b,0x87,0x83,0x7f,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x86,0x87,0x89,0x8a,0x8c,0x8d,0x8d,0x8d,0x8b,0x88,0x85,0x81,0x7c,0x78,0x75,0x72,0x70,0x6f,0x6e,0x6e,0x6f,0x70,0x71,0x73,0x74,0x77,0x79,0x7c,0x7f,0x82,0x84,0x86,0x87,0x87,0x86,0x84,0x82,0x80,0x7d,0x7a,0x78,0x76,0x74,0x72,0x71,0x71,0x71,0x72,0x73,0x75,0x78,0x7b,0x7e,0x81,0x84,0x86,0x89,0x8a,0x8b,0x8c,0x8c,0x8c,0x8b,0x8a,0x88,0x86,0x83,0x81,0x7e,0x7c,0x7a,0x7a,0x7a,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x87,0x88,0x88,0x88,0x87,0x87,0x86,0x84,0x81,0x7e,0x7b,0x77,0x73,0x70,0x6e,0x6c,0x6c,0x6c,0x6e,0x70,0x72,0x75,0x77,0x7a,0x7d,0x7f,0x81,0x84,0x86,0x88,0x89,0x8a,0x89,0x89,0x87,0x84,0x81,0x7e,0x7b,0x78,0x76,0x74,0x74,0x74,0x75,0x76,0x78,0x7a,0x7c,0x7f,0x82,0x85,0x87,0x8a,0x8d,0x8f,0x91,0x91,0x91,0x90,0x8e,0x8b,0x88,0x85,0x81,0x7e,0x7b,0x79,0x78,0x77,0x77,0x78,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x87,0x89,0x8a,0x8b,0x8b,0x8a,0x88,0x86,0x83,0x7f,0x7c,0x79,0x76,0x75,0x74,0x74,0x74,0x74,0x75,0x76,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x84,0x86,0x88,0x89,0x89,0x88,0x87,0x84,0x81,0x7e,0x7b,0x78,0x77,0x75,0x75,0x75,0x76,0x77,0x79,0x7a,0x7c,0x7e,0x80,0x83,0x85,0x88,0x8b,0x8d,0x8f,0x8f,0x8f,0x8e,0x8c,0x89,0x86,0x82,0x7f,0x7b,0x79,0x76,0x75,0x74,0x74,0x74,0x75,0x76,0x78,0x7a,0x7d,0x80,0x84,0x87,0x8a,0x8d,0x8f,0x90,0x90,0x8f,0x8d,0x8b,0x87,0x84,0x80,0x7c,0x78,0x75,0x72,0x70,0x6f,0x6e,0x6e,0x6f,0x70,0x72,0x74,0x76,0x79,0x7c,0x7e,0x81,0x84,0x86,0x88,0x88,0x89,0x88,0x87,0x85,0x82,0x7f,0x7d,0x7a,0x78,0x77,0x76,0x76,0x77,0x77,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x8a,0x8b,0x8c,0x8c,0x8b,0x8a,0x87,0x84,0x81,0x7f,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7e,0x80,0x82,0x83,0x85,0x86,0x88,0x89,0x8b,0x8c,0x8c,0x8c,0x8b,0x8a,0x87,0x84,0x80,0x7c,0x78,0x75,0x72,0x70,0x6f,0x6f,0x6f,0x70,0x72,0x74,0x77,0x79,0x7c,0x7f,0x82,0x85,0x88,0x8b,0x8d,0x8f,0x8f,0x8f,0x8d,0x8b,0x87,0x84,0x80,0x7c,0x79,0x77,0x75,0x74,0x74,0x74,0x75,0x76,0x78,0x7a,0x7d,0x7f,0x82,0x85,0x88,0x8b,0x8e,0x90,0x91,0x91,0x91,0x8f,0x8d,0x8a,0x87,0x84,0x81,0x7e,0x7c,0x7a,0x78,0x78,0x77,0x78,0x78,0x79,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x84,0x85,0x86,0x87,0x86,0x85,0x83,0x81,0x7e,0x7c,0x79,0x77,0x75,0x74,0x74,0x74,0x75,0x76,0x78,0x7a,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x86,0x87,0x88,0x88,0x87,0x86,0x84,0x82,0x7f,0x7d,0x7a,0x77,0x75,0x74,0x74,0x74,0x76,0x78,0x7a,0x7c,0x7f,0x82,0x84,0x87,0x89,0x8b,0x8d,0x8e,0x8f,0x90,0x8f,0x8e,0x8c,0x89,0x86,0x81,0x7d,0x79,0x75,0x73,0x71,0x70,0x70,0x71,0x72,0x74,0x76,0x79,0x7b,0x7d,0x80,0x82,0x85,0x88,0x8a,0x8c,0x8d,0x8d,0x8c,0x8b,0x88,0x85,0x81,0x7e,0x7a,0x78,0x76,0x75,0x75,0x75,0x76,0x78,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x87,0x89,0x8b,0x8c,0x8d,0x8d,0x8c,0x8a,0x87,0x84,0x81,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x85,0x87,0x88,0x89,0x8a,0x8a,0x8a,0x89,0x87,0x84,0x81,0x7d,0x7a,0x76,0x74,0x72,0x71,0x72,0x73,0x75,0x78,0x7a,0x7d,0x7f,0x82,0x84,0x86,0x88,0x8a,0x8b,0x8d,0x8e,0x8e,0x8e,0x8c,0x8a,0x87,0x83,0x7f,0x7b,0x77,0x74,0x72,0x72,0x72,0x73,0x75,0x77,0x79,0x7b,0x7e,0x80,0x82,0x85,0x87,0x8a,0x8d,0x8f,0x91,0x91,0x91,0x90,0x8d,0x8a,0x86,0x81,0x7d,0x7a,0x77,0x75,0x74,0x74,0x75,0x76,0x77,0x78,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x89,0x8a,0x8a,0x89,0x87,0x84,0x81,0x7f,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x89,0x88,0x86,0x84,0x81,0x7e,0x7b,0x78,0x76,0x75,0x75,0x76,0x77,0x79,0x7c,0x7e,0x81,0x83,0x85,0x86,0x87,0x89,0x8a,0x8b,0x8c,0x8c,0x8c,0x8a,0x88,0x85,0x82,0x7d,0x79,0x75,0x72,0x6f,0x6e,0x6e,0x6f,0x71,0x74,0x76,0x79,0x7c,0x7f,0x81,0x83,0x85,0x88,0x8a,0x8c,0x8e,0x8f,0x90,0x8f,0x8e,0x8b,0x88,0x83,0x7f,0x7b,0x78,0x75,0x74,0x74,0x74,0x75,0x77,0x79,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x85,0x87,0x88,0x8a,0x8b,0x8c,0x8b,0x8a,0x87,0x84,0x81,0x7e,0x7b,0x78,0x77,0x77,0x77,0x78,0x7a,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x82,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x7e,0x7b,0x78,0x76,0x74,0x73,0x73,0x75,0x77,0x79,0x7c,0x7f,0x81,0x84,0x85,0x86,0x88,0x89,0x8a,0x8a,0x8b,0x8b,0x8b,0x8a,0x88,0x85,0x82,0x7e,0x79,0x76,0x73,0x71,0x70,0x70,0x72,0x74,0x77,0x7a,0x7e,0x81,0x83,0x85,0x88,0x89,0x8b,0x8d,0x8e,0x8f,0x90,0x90,0x8e,0x8c,0x89,0x84,0x80,0x7b,0x77,0x73,0x70,0x6f,0x6f,0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7e,0x7f,0x81,0x83,0x85,0x87,0x89,0x8a,0x8b,0x8a,0x89,0x86,0x83,0x7f,0x7c,0x79,0x77,0x75,0x75,0x76,0x78,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x82,0x83,0x83,0x84,0x85,0x87,0x87,0x88,0x88,0x87,0x85,0x83,0x80,0x7d,0x7b,0x79,0x79,0x79,0x7a,0x7d,0x7f,0x82,0x84,0x86,0x88,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x88,0x87,0x85,0x82,0x7e,0x7a,0x76,0x72,0x70,0x6e,0x6e,0x6f,0x71,0x74,0x77,0x7b,0x7e,0x81,0x84,0x86,0x87,0x89,0x8a,0x8b,0x8c,0x8d,0x8d,0x8d,0x8b,0x89,0x85,0x81,0x7d,0x78,0x75,0x72,0x70,0x70,0x70,0x72,0x75,0x78,0x7b,0x7e,0x80,0x82,0x84,0x86,0x88,0x89,0x8b,0x8d,0x8f,0x90,0x90,0x8f,0x8d,0x8a,0x86,0x82,0x7e,0x7b,0x79,0x77,0x77,0x78,0x79,0x7b,0x7d,0x7f,0x80,0x80,0x81,0x81,0x81,0x82,0x83,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x7f,0x7c,0x79,0x76,0x75,0x74,0x75,0x77,0x79,0x7c,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x83,0x82,0x7f,0x7c,0x78,0x75,0x72,0x70,0x6f,0x6f,0x71,0x74,0x78,0x7b,0x7f,0x83,0x85,0x87,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8e,0x8e,0x8d,0x8b,0x88,0x85,0x80,0x7c,0x77,0x74,0x71,0x70,0x70,0x72,0x74,0x77,0x7a,0x7d,0x80,0x82,0x84,0x85,0x86,0x88,0x8a,0x8b,0x8d,0x8e,0x8e,0x8e,0x8d,0x8a,0x86,0x82,0x7e,0x7a,0x77,0x74,0x73,0x73,0x74,0x76,0x78,0x7a,0x7b,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x7f,0x7c,0x79,0x77,0x76,0x76,0x77,0x79,0x7b,0x7e,0x81,0x84,0x86,0x87,0x87,0x87,0x87,0x86,0x86,0x86,0x86,0x86,0x86,0x85,0x84,0x81,0x7e,0x7b,0x78,0x75,0x74,0x73,0x74,0x76,0x7a,0x7e,0x82,0x85,0x88,0x8a,0x8c,0x8c,0x8d,0x8d,0x8c,0x8c,0x8c,0x8c,0x8b,0x89,0x87,0x83,0x7f,0x7a,0x75,0x71,0x6d,0x6b,0x6a,0x6b,0x6c,0x6f,0x73,0x76,0x7a,0x7d,0x80,0x82,0x83,0x85,0x86,0x87,0x89,0x8a,0x8b,0x8b,0x8a,0x89,0x86,0x83,0x7f,0x7b,0x78,0x75,0x73,0x72,0x73,0x75,0x77,0x7a,0x7c,0x7f,0x80,0x82,0x83,0x83,0x84,0x85,0x86,0x87,0x89,0x8a,0x8a,0x8a,0x89,0x87,0x84,0x81,0x7e,0x7b,0x7a,0x79,0x7a,0x7c,0x7e,0x80,0x83,0x84,0x85,0x86,0x85,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x77,0x74,0x72,0x71,0x71,0x73,0x75,0x79,0x7d,0x81,0x85,0x87,0x89,0x8b,0x8b,0x8b,0x8b,0x8a,0x8a,0x8a,0x89,0x89,0x87,0x85,0x82,0x7e,0x7a,0x76,0x73,0x70,0x6f,0x6f,0x71,0x73,0x77,0x7b,0x7f,0x83,0x86,0x88,0x8a,0x8b,0x8c,0x8d,0x8e,0x8e,0x8f,0x8f,0x8f,0x8e,0x8c,0x89,0x85,0x80,0x7b,0x77,0x74,0x73,0x72,0x73,0x75,0x78,0x7b,0x7e,0x80,0x81,0x82,0x82,0x83,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x88,0x87,0x85,0x82,0x7e,0x7c,0x79,0x78,0x78,0x79,0x7a,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x77,0x75,0x74,0x75,0x76,0x79,0x7c,0x80,0x84,0x88,0x8b,0x8d,0x8d,0x8d,0x8c,0x8b,0x8a,0x89,0x87,0x87,0x86,0x84,0x83,0x80,0x7d,0x79,0x75,0x72,0x6f,0x6e,0x6f,0x71,0x75,0x79,0x7e,0x83,0x87,0x8a,0x8c,0x8d,0x8d,0x8c,0x8c,0x8c,0x8d,0x8d,0x8d,0x8d,0x8b,0x88,0x84,0x7e,0x79,0x74,0x70,0x6e,0x6e,0x6f,0x72,0x76,0x7a,0x7d,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x85,0x88,0x8b,0x8c,0x8b,0x89,0x85,0x81,0x7c,0x78,0x76,0x75,0x77,0x7a,0x7e,0x82,0x85,0x87,0x86,0x84,0x82,0x7f,0x7d,0x7c,0x7c,0x7e,0x81,0x85,0x87,0x89,0x89,0x87,0x84,0x81,0x7d,0x79,0x77,0x77,0x78,0x7b,0x7e,0x82,0x85,0x87,0x88,0x89,0x88,0x88,0x87,0x86,0x86,0x87,0x87,0x87,0x87,0x85,0x83,0x80,0x7c,0x78,0x74,0x71,0x6f,0x6e,0x6e,0x6f,0x70,0x73,0x75,0x78,0x7b,0x7e,0x81,0x84,0x86,0x88,0x8a,0x8b,0x8c,0x8d,0x8c,0x8c,0x8a,0x88,0x86,0x83,0x7f,0x7c,0x78,0x75,0x73,0x71,0x71,0x71,0x73,0x76,0x79,0x7d,0x81,0x84,0x87,0x89,0x8a,0x8b,0x8b,0x8b,0x8b,0x8a,0x8a,0x8a,0x89,0x88,0x86,0x84,0x81,0x7f,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x80,0x82,0x84,0x85,0x86,0x87,0x87,0x86,0x86,0x86,0x85,0x84,0x83,0x82,0x80,0x7d,0x7a,0x78,0x75,0x73,0x72,0x72,0x73,0x75,0x77,0x79,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x8e,0x8f,0x8d,0x8b,0x88,0x84,0x7f,0x7a,0x76,0x73,0x71,0x6f,0x6f,0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x88,0x8a,0x8b,0x8c,0x8c,0x8b,0x89,0x86,0x84,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x79,0x78,0x78,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x83,0x84,0x85,0x86,0x87,0x89,0x89,0x89,0x88,0x86,0x83,0x80,0x7d,0x7a,0x78,0x77,0x76,0x77,0x78,0x79,0x7a,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x86,0x88,0x8b,0x8d,0x8f,0x90,0x90,0x8e,0x8c,0x88,0x84,0x80,0x7c,0x79,0x76,0x74,0x73,0x72,0x72,0x72,0x72,0x72,0x73,0x74,0x76,0x79,0x7b,0x7f,0x82,0x86,0x89,0x8b,0x8d,0x8d,0x8d,0x8c,0x8a,0x89,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7c,0x7a,0x78,0x77,0x76,0x75,0x76,0x76,0x78,0x79,0x7c,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x79,0x78,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x83,0x85,0x87,0x88,0x8a,0x8c,0x8d,0x8e,0x8e,0x8e,0x8d,0x8a,0x87,0x83,0x7f,0x7b,0x78,0x75,0x73,0x72,0x71,0x71,0x72,0x73,0x74,0x75,0x77,0x78,0x7a,0x7d,0x80,0x84,0x87,0x8a,0x8c,0x8e,0x8e,0x8d,0x8b,0x88,0x85,0x81,0x7f,0x7c,0x7b,0x79,0x79,0x78,0x77,0x77,0x76,0x76,0x76,0x77,0x79,0x7b,0x7e,0x81,0x85,0x88,0x8b,0x8c,0x8d,0x8c,0x8b,0x89,0x87,0x85,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x77,0x77,0x79,0x7a,0x7c,0x7f,0x81,0x83,0x85,0x86,0x87,0x87,0x87,0x87,0x87,0x87,0x86,0x86,0x84,0x82,0x7f,0x7c,0x78,0x75,0x73,0x72,0x72,0x73,0x75,0x79,0x7c,0x80,0x83,0x85,0x87,0x88,0x88,0x89,0x8a,0x8b,0x8c,0x8e,0x8f,0x8f,0x8e,0x8c,0x89,0x85,0x80,0x7b,0x77,0x74,0x72,0x71,0x72,0x73,0x75,0x77,0x78,0x78,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x83,0x85,0x86,0x86,0x85,0x83,0x80,0x7c,0x7a,0x78,0x77,0x77,0x79,0x7b,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7e,0x7f,0x80,0x83,0x85,0x88,0x89,0x89,0x88,0x86,0x83,0x80,0x7d,0x7b,0x7b,0x7c,0x7d,0x80,0x82,0x85,0x86,0x86,0x86,0x86,0x85,0x85,0x86,0x87,0x8a,0x8c,0x8d,0x8e,0x8d,0x8b,0x87,0x82,0x7e,0x79,0x76,0x73,0x73,0x73,0x74,0x75,0x76,0x77,0x77,0x77,0x77,0x78,0x79,0x7b,0x7f,0x83,0x87,0x8c,0x8f,0x91,0x91,0x8e,0x8b,0x86,0x80,0x7a,0x75,0x71,0x6f,0x6d,0x6d,0x6e,0x6f,0x71,0x72,0x73,0x74,0x76,0x77,0x79,0x7c,0x7f,0x83,0x87,0x8b,0x8f,0x92,0x93,0x93,0x92,0x8f,0x8c,0x88,0x84,0x81,0x7e,0x7c,0x7b,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x86,0x88,0x8a,0x8a,0x89,0x86,0x83,0x7e,0x7a,0x77,0x74,0x73,0x73,0x75,0x77,0x7a,0x7c,0x7e,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x78,0x74,0x6f,0x6b,0x67,0x65,0x64,0x64,0x67,0x6b,0x6f,0x74,0x79,0x7e,0x82,0x85,0x87,0x8a,0x8c,0x8e,0x90,0x91,0x93,0x94,0x94,0x92,0x90,0x8b,0x86,0x81,0x7b,0x76,0x73,0x71,0x71,0x72,0x74,0x77,0x7b,0x7e,0x80,0x82,0x84,0x85,0x86,0x88,0x89,0x8b,0x8d,0x8e,0x8e,0x8d,0x8b,0x88,0x84,0x80,0x7c,0x79,0x77,0x76,0x76,0x77,0x79,0x7a,0x7b,0x7b,0x7b,0x7a,0x7a,0x79,0x7a,0x7b,0x7c,0x7e,0x80,0x81,0x81,0x81,0x7f,0x7c,0x79,0x76,0x74,0x72,0x72,0x73,0x76,0x79,0x7c,0x7f,0x82,0x85,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8c,0x8d,0x8c,0x8c,0x8a,0x88,0x85,0x82,0x7f,0x7b,0x78,0x76,0x75,0x75,0x75,0x76,0x78,0x7b,0x7d,0x80,0x83,0x85,0x88,0x8a,0x8b,0x8c,0x8d,0x8d,0x8d,0x8d,0x8b,0x8a,0x87,0x85,0x81,0x7d,0x79,0x76,0x72,0x70,0x6e,0x6d,0x6d,0x6f,0x71,0x73,0x75,0x77,0x79,0x7a,0x7c,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x83,0x82,0x81,0x7f,0x7d,0x7a,0x77,0x75,0x74,0x73,0x74,0x75,0x77,0x78,0x7a,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7d,0x7f,0x82,0x84,0x86,0x88,0x8a,0x8b,0x8b,0x8b,0x8b,0x8a,0x89,0x88,0x86,0x84,0x82,0x80,0x7e,0x7b,0x79,0x76,0x74,0x72,0x71,0x70,0x70,0x71,0x73,0x76,0x79,0x7d,0x80,0x83,0x85,0x87,0x88,0x88,0x88,0x87,0x86,0x84,0x82,0x80,0x7e,0x7b,0x77,0x74,0x71,0x6e,0x6c,0x6a,0x6a,0x6b,0x6c,0x6f,0x73,0x77,0x7b,0x7e,0x82,0x85,0x87,0x89,0x8b,0x8c,0x8d,0x8e,0x8e,0x8e,0x8e,0x8d,0x8c,0x8a,0x87,0x85,0x82,0x80,0x7e,0x7d,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x85,0x85,0x85,0x85,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x79,0x77,0x76,0x75,0x73,0x72,0x70,0x6f,0x6e,0x6e,0x6f,0x71,0x74,0x78,0x7d,0x82,0x87,0x8c,0x8f,0x92,0x93,0x93,0x92,0x91,0x8f,0x8e,0x8c,0x8a,0x89,0x86,0x84,0x80,0x7d,0x79,0x76,0x73,0x71,0x71,0x72,0x74,0x77,0x7a,0x7e,0x81,0x85,0x87,0x88,0x89,0x89,0x89,0x88,0x88,0x87,0x86,0x85,0x84,0x82,0x7f,0x7c,0x79,0x76,0x73,0x71,0x6f,0x6f,0x6f,0x71,0x73,0x75,0x78,0x7a,0x7b,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7e,0x80,0x82,0x85,0x88,0x8a,0x8c,0x8c,0x8c,0x8b,0x89,0x87,0x85,0x84,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7d,0x80,0x84,0x87,0x8b,0x8d,0x8f,0x8f,0x8f,0x8d,0x8b,0x88,0x85,0x82,0x80,0x7d,0x7b,0x79,0x76,0x73,0x70,0x6e,0x6b,0x69,0x69,0x6a,0x6c,0x6f,0x73,0x78,0x7c,0x81,0x85,0x88,0x8a,0x8b,0x8b,0x8b,0x8b,0x8b,0x8b,0x8a,0x8a,0x88,0x87,0x85,0x82,0x7e,0x7b,0x78,0x76,0x75,0x75,0x76,0x78,0x7b,0x7e,0x81,0x84,0x86,0x87,0x88,0x88,0x88,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x83,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x77,0x77,0x76,0x76,0x75,0x75,0x74,0x73,0x73,0x74,0x75,0x77,0x7a,0x7e,0x82,0x86,0x89,0x8c,0x8d,0x8e,0x8d,0x8c,0x8a,0x87,0x85,0x83,0x80,0x7e,0x7c,0x7a,0x78,0x76,0x74,0x72,0x71,0x70,0x70,0x72,0x74,0x77,0x7c,0x80,0x85,0x89,0x8c,0x8e,0x8f,0x8f,0x8f,0x8d,0x8c,0x8a,0x88,0x86,0x85,0x83,0x80,0x7e,0x7b,0x78,0x75,0x73,0x71,0x70,0x71,0x72,0x75,0x78,0x7b,0x7e,0x81,0x83,0x85,0x85,0x85,0x85,0x84,0x84,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x83,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,0x7c,0x7e,0x80,0x84,0x88,0x8b,0x8e,0x90,0x91,0x90,0x8f,0x8c,0x8a,0x86,0x83,0x81,0x7e,0x7d,0x7b,0x7a,0x78,0x76,0x75,0x73,0x72,0x72,0x73,0x74,0x77,0x7b,0x7f,0x84,0x88,0x8c,0x8f,0x90,0x90,0x90,0x8e,0x8c,0x8a,0x88,0x86,0x84,0x82,0x80,0x7d,0x7b,0x78,0x76,0x73,0x71,0x70,0x70,0x71,0x73,0x76,0x7a,0x7d,0x81,0x84,0x87,0x88,0x89,0x88,0x88,0x87,0x86,0x86,0x86,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x84,0x86,0x87,0x87,0x86,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x81,0x84,0x87,0x8a,0x8c,0x8d,0x8d,0x8c,0x8a,0x87,0x84,0x80,0x7e,0x7b,0x79,0x78,0x77,0x76,0x75,0x75,0x74,0x73,0x73,0x73,0x74,0x77,0x7a,0x7e,0x82,0x87,0x8b,0x8e,0x90,0x91,0x91,0x90,0x8e,0x8b,0x89,0x86,0x84,0x81,0x7f,0x7d,0x7b,0x79,0x76,0x74,0x72,0x71,0x71,0x71,0x73,0x76,0x79,0x7d,0x81,0x85,0x88,0x8a,0x8b,0x8c,0x8b,0x8a,0x88,0x87,0x86,0x85,0x84,0x84,0x83,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x82,0x84,0x85,0x85,0x85,0x84,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x81,0x83,0x86,0x89,0x8b,0x8c,0x8b,0x8a,0x87,0x84,0x80,0x7d,0x7a,0x77,0x76,0x75,0x74,0x74,0x73,0x73,0x73,0x73,0x73,0x74,0x76,0x78,0x7c,0x80,0x85,0x89,0x8d,0x90,0x91,0x92,0x91,0x8e,0x8c,0x88,0x85,0x82,0x7f,0x7d,0x7b,0x79,0x77,0x76,0x74,0x72,0x71,0x70,0x70,0x71,0x73,0x77,0x7b,0x7f,0x84,0x88,0x8b,0x8d,0x8d,0x8d,0x8c,0x8b,0x89,0x87,0x85,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x76,0x75,0x76,0x77,0x79,0x7c,0x7f,0x81,0x83,0x85,0x85,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x82,0x84,0x86,0x88,0x89,0x88,0x87,0x84,0x81,0x7e,0x7b,0x78,0x77,0x76,0x75,0x75,0x76,0x76,0x77,0x78,0x78,0x79,0x7a,0x7c,0x7f,0x82,0x86,0x8a,0x8e,0x91,0x93,0x94,0x93,0x91,0x8f,0x8b,0x87,0x84,0x81,0x7e,0x7c,0x7a,0x79,0x78,0x76,0x75,0x74,0x73,0x73,0x73,0x75,0x77,0x7b,0x7f,0x84,0x88,0x8b,0x8e,0x8f,0x8e,0x8d,0x8b,0x88,0x86,0x83,0x81,0x7f,0x7e,0x7d,0x7b,0x7a,0x78,0x76,0x74,0x72,0x71,0x71,0x71,0x73,0x76,0x7a,0x7e,0x81,0x84,0x86,0x86,0x86,0x85,0x83,0x82,0x80,0x80,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x81,0x82,0x84,0x86,0x88,0x8a,0x8b,0x8c,0x8b,0x89,0x87,0x83,0x80,0x7d,0x7a,0x79,0x77,0x77,0x77,0x77,0x78,0x78,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x80,0x83,0x86,0x89,0x8c,0x8d,0x8d,0x8c,0x89,0x86,0x82,0x7d,0x79,0x76,0x73,0x72,0x70,0x70,0x6f,0x6f,0x6f,0x6f,0x6f,0x70,0x71,0x74,0x77,0x7b,0x80,0x85,0x8a,0x8e,0x90,0x92,0x92,0x90,0x8e,0x8c,0x89,0x86,0x84,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x78,0x77,0x77,0x78,0x7a,0x7d,0x80,0x84,0x87,0x89,0x8a,0x8b,0x8a,0x88,0x86,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x83,0x83,0x82,0x81,0x7e,0x7c,0x79,0x77,0x75,0x74,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x81,0x83,0x86,0x8a,0x8d,0x8f,0x90,0x90,0x8e,0x8b,0x88,0x84,0x7f,0x7c,0x79,0x76,0x75,0x74,0x74,0x74,0x75,0x75,0x75,0x76,0x77,0x79,0x7c,0x7f,0x83,0x87,0x8b,0x8f,0x92,0x93,0x93,0x92,0x8f,0x8c,0x88,0x84,0x81,0x7e,0x7b,0x79,0x78,0x76,0x75,0x74,0x73,0x72,0x71,0x71,0x72,0x74,0x76,0x79,0x7d,0x80,0x83,0x85,0x86,0x87,0x86,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b,0x7a,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x80,0x82,0x84,0x86,0x86,0x86,0x85,0x83,0x80,0x7e,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x80,0x81,0x81,0x82,0x83,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x8f,0x8f,0x8e,0x8b,0x88,0x84,0x7f,0x7b,0x77,0x75,0x73,0x72,0x72,0x72,0x73,0x73,0x74,0x75,0x76,0x77,0x79,0x7c,0x7f,0x83,0x87,0x8a,0x8d,0x8f,0x90,0x8f,0x8e,0x8b,0x87,0x84,0x80,0x7d,0x7a,0x78,0x76,0x75,0x75,0x74,0x74,0x74,0x74,0x75,0x76,0x78,0x7a,0x7d,0x81,0x85,0x88,0x8b,0x8d,0x8e,0x8f,0x8e,0x8c,0x8a,0x88,0x86,0x84,0x83,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x81,0x7e,0x7c,0x7a,0x79,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x80,0x81,0x83,0x86,0x88,0x89,0x8a,0x89,0x87,0x84,0x81,0x7d,0x7a,0x77,0x75,0x74,0x74,0x75,0x76,0x76,0x77,0x78,0x78,0x79,0x7a,0x7b,0x7d,0x81,0x84,0x88,0x8c,0x8f,0x92,0x92,0x92,0x90,0x8d,0x8a,0x86,0x83,0x80,0x7d,0x7b,0x79,0x78,0x77,0x76,0x74,0x73,0x73,0x72,0x73,0x75,0x77,0x7b,0x7f,0x84,0x89,0x8d,0x8f,0x91,0x91,0x8f,0x8d,0x89,0x86,0x83,0x80,0x7e,0x7d,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x75,0x75,0x76,0x79,0x7b,0x7f,0x82,0x84,0x85,0x85,0x84,0x82,0x7f,0x7d,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x81,0x82,0x84,0x87,0x8a,0x8c,0x8e,0x8e,0x8d,0x8a,0x86,0x82,0x7d,0x79,0x76,0x75,0x74,0x75,0x77,0x7a,0x7c,0x7e,0x7f,0x80,0x81,0x81,0x82,0x84,0x86,0x88,0x8b,0x8e,0x91,0x92,0x92,0x91,0x8e,0x8b,0x86,0x81,0x7c,0x78,0x75,0x73,0x71,0x71,0x71,0x71,0x71,0x71,0x72,0x72,0x74,0x75,0x78,0x7b,0x7f,0x83,0x87,0x8b,0x8d,0x8f,0x8f,0x8d,0x8b,0x88,0x84,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7a,0x7a,0x79,0x78,0x78,0x77,0x76,0x77,0x78,0x79,0x7c,0x7f,0x82,0x85,0x87,0x88,0x88,0x86,0x84,0x82,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x81,0x80,0x7d,0x7a,0x77,0x74,0x72,0x70,0x70,0x71,0x72,0x74,0x76,0x78,0x7a,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x85,0x88,0x8b,0x8e,0x90,0x90,0x8e,0x8b,0x87,0x81,0x7c,0x77,0x73,0x71,0x70,0x70,0x71,0x72,0x74,0x75,0x76,0x76,0x77,0x79,0x7b,0x7e,0x81,0x86,0x8a,0x8f,0x92,0x94,0x94,0x93,0x90,0x8c,0x88,0x84,0x81,0x7e,0x7c,0x7b,0x7b,0x7a,0x7a,0x79,0x79,0x78,0x77,0x77,0x77,0x79,0x7a,0x7d,0x80,0x83,0x85,0x87,0x88,0x89,0x88,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x79,0x77,0x75,0x75,0x75,0x76,0x79,0x7c,0x7f,0x83,0x85,0x87,0x88,0x88,0x88,0x88,0x89,0x8a,0x8b,0x8c,0x8c,0x8c,0x8a,0x87,0x83,0x7e,0x78,0x73,0x6f,0x6c,0x6b,0x6c,0x6e,0x71,0x74,0x76,0x79,0x7a,0x7c,0x7d,0x7f,0x81,0x83,0x86,0x8a,0x8d,0x8f,0x91,0x90,0x8e,0x8b,0x87,0x82,0x7d,0x79,0x76,0x74,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x73,0x74,0x75,0x77,0x7a,0x7e,0x82,0x85,0x89,0x8b,0x8c,0x8c,0x8a,0x88,0x86,0x83,0x81,0x80,0x7f,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7a,0x78,0x76,0x74,0x74,0x74,0x76,0x78,0x7a,0x7c,0x7f,0x81,0x82,0x83,0x84,0x84,0x85,0x86,0x87,0x88,0x89,0x89,0x88,0x87,0x84,0x81,0x7e,0x7a,0x76,0x73,0x71,0x70,0x71,0x72,0x74,0x76,0x79,0x7b,0x7e,0x80,0x83,0x85,0x87,0x89,0x8b,0x8e,0x8f,0x91,0x92,0x92,0x91,0x8e,0x8b,0x87,0x82,0x7e,0x79,0x75,0x73,0x71,0x70,0x70,0x71,0x73,0x74,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7d,0x80,0x83,0x86,0x88,0x8a,0x8a,0x8a,0x88,0x85,0x81,0x7e,0x7b,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x83,0x85,0x85,0x85,0x83,0x81,0x7e,0x7c,0x7a,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x87,0x87,0x87,0x87,0x87,0x87,0x88,0x89,0x8a,0x8b,0x8b,0x8a,0x87,0x83,0x7f,0x7a,0x75,0x70,0x6d,0x6b,0x6a,0x6a,0x6b,0x6d,0x6f,0x71,0x73,0x76,0x78,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x87,0x88,0x89,0x8a,0x8a,0x89,0x88,0x85,0x82,0x7e,0x7a,0x76,0x72,0x70,0x6e,0x6e,0x70,0x72,0x75,0x78,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x85,0x88,0x8b,0x8e,0x91,0x93,0x94,0x93,0x91,0x8d,0x89,0x84,0x81,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x79,0x7b,0x7d,0x80,0x81,0x82,0x81,0x7f,0x7c,0x78,0x75,0x73,0x71,0x72,0x73,0x76,0x79,0x7c,0x7e,0x80,0x80,0x81,0x81,0x81,0x81,0x82,0x83,0x84,0x84,0x84,0x82,0x80,0x7d,0x7a,0x77,0x75,0x73,0x72,0x72,0x73,0x75,0x77,0x79,0x7b,0x7e,0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x94,0x95,0x96,0x96,0x95,0x93,0x91,0x8f,0x8c,0x89,0x85,0x82,0x7e,0x7a,0x77,0x74,0x72,0x70,0x70,0x71,0x72,0x74,0x77,0x7a,0x7c,0x7f,0x81,0x82,0x84,0x85,0x86,0x87,0x88,0x88,0x87,0x86,0x84,0x81,0x7e,0x7a,0x77,0x74,0x72,0x70,0x6f,0x6f,0x70,0x70,0x71,0x72,0x74,0x75,0x76,0x77,0x79,0x7a,0x7c,0x7d,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x84,0x86,0x88,0x89,0x8a,0x8b,0x8c,0x8c,0x8b,0x8b,0x8a,0x89,0x88,0x86,0x84,0x82,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x75,0x76,0x78,0x7b,0x7e,0x81,0x85,0x87,0x89,0x8a,0x8b,0x8a,0x8a,0x89,0x89,0x88,0x87,0x86,0x85,0x83,0x80,0x7d,0x79,0x76,0x72,0x6f,0x6c,0x69,0x68,0x67,0x67,0x68,0x6a,0x6d,0x70,0x74,0x78,0x7d,0x82,0x86,0x89,0x8c,0x8e,0x8e,0x8e,0x8c,0x8a,0x88,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x76,0x75,0x75,0x76,0x78,0x7a,0x7c,0x7f,0x81,0x82,0x83,0x84,0x84,0x85,0x85,0x86,0x87,0x88,0x89,0x89,0x88,0x87,0x86,0x84,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x7e,0x7c,0x7b,0x79,0x78,0x77,0x76,0x75,0x74,0x73,0x71,0x6f,0x6e,0x6d,0x6d,0x6e,0x71,0x74,0x78,0x7b,0x7f,0x82,0x84,0x86,0x87,0x88,0x8a,0x8b,0x8c,0x8c,0x8c,0x8b,0x89,0x86,0x81,0x7c,0x78,0x73,0x70,0x6e,0x6e,0x6f,0x71,0x74,0x77,0x7a,0x7d,0x7f,0x82,0x85,0x88,0x8c,0x91,0x95,0x99,0x9c,0x9e,0x9f,0x9d,0x9a,0x95,0x8f,0x89,0x82,0x7d,0x78,0x74,0x72,0x70,0x70,0x70,0x71,0x72,0x73,0x74,0x76,0x78,0x79,0x7b,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x76,0x75,0x75,0x76,0x77,0x79,0x7b,0x7c,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7a,0x78,0x77,0x76,0x76,0x78,0x7a,0x7d,0x81,0x85,0x89,0x8c,0x8e,0x8f,0x90,0x90,0x90,0x8f,0x8f,0x8e,0x8c,0x8a,0x87,0x84,0x80,0x7b,0x77,0x72,0x6f,0x6c,0x6a,0x6a,0x6b,0x6d,0x70,0x73,0x76,0x7a,0x7e,0x81,0x85,0x88,0x8a,0x8c,0x8e,0x8f,0x8f,0x8e,0x8c,0x8a,0x86,0x82,0x7e,0x79,0x75,0x71,0x6d,0x6b,0x69,0x69,0x69,0x6b,0x6e,0x71,0x74,0x78,0x7c,0x7f,0x82,0x84,0x87,0x89,0x8a,0x8c,0x8c,0x8d,0x8d,0x8c,0x8b,0x89,0x86,0x83,0x81,0x7e,0x7c,0x7b,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x84,0x84,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x79,0x79,0x7a,0x7d,0x80,0x83,0x86,0x89,0x8b,0x8c,0x8c,0x8c,0x8a,0x89,0x88,0x86,0x85,0x83,0x81,0x7e,0x7a,0x76,0x72,0x6d,0x69,0x66,0x64,0x64,0x65,0x67,0x6b,0x6f,0x74,0x79,0x7d,0x82,0x86,0x89,0x8d,0x8f,0x92,0x94,0x95,0x95,0x94,0x92,0x8f,0x8b,0x86,0x80,0x7b,0x76,0x73,0x70,0x6e,0x6e,0x6f,0x71,0x73,0x76,0x79,0x7c,0x7f,0x82,0x85,0x89,0x8b,0x8e,0x90,0x92,0x93,0x93,0x92,0x90,0x8d,0x8a,0x86,0x82,0x7e,0x7b,0x79,0x77,0x75,0x75,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x79,0x78,0x77,0x76,0x76,0x76,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x84,0x86,0x88,0x8a,0x8b,0x8b,0x8b,0x8b,0x8a,0x88,0x87,0x85,0x82,0x80,0x7d,0x7a,0x77,0x74,0x73,0x72,0x72,0x73,0x76,0x79,0x7d,0x81,0x85,0x89,0x8d,0x8f,0x91,0x92,0x93,0x93,0x92,0x91,0x8f,0x8d,0x8a,0x86,0x81,0x7c,0x77,0x72,0x6e,0x6a,0x67,0x66,0x66,0x68,0x6a,0x6d,0x71,0x74,0x78,0x7b,0x7e,0x82,0x84,0x87,0x89,0x8b,0x8d,0x8d,0x8d,0x8c,0x89,0x86,0x82,0x7f,0x7b,0x78,0x75,0x74,0x73,0x74,0x75,0x76,0x78,0x79,0x7b,0x7d,0x7e,0x80,0x82,0x83,0x85,0x86,0x88,0x88,0x89,0x88,0x87,0x86,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x83,0x84,0x86,0x87,0x87,0x88,0x88,0x88,0x87,0x86,0x85,0x83,0x81,0x7f,0x7c,0x79,0x76,0x74,0x71,0x6f,0x6d,0x6c,0x6d,0x6d,0x6f,0x72,0x75,0x79,0x7d,0x81,0x85,0x89,0x8c,0x8e,0x90,0x90,0x90,0x8f,0x8e,0x8c,0x89,0x86,0x82,0x7f,0x7b,0x77,0x74,0x71,0x6f,0x6e,0x6d,0x6e,0x70,0x73,0x76,0x7a,0x7e,0x82,0x86,0x89,0x8c,0x8f,0x91,0x92,0x93,0x94,0x93,0x92,0x90,0x8d,0x89,0x85,0x81,0x7d,0x79,0x76,0x74,0x73,0x72,0x73,0x74,0x75,0x77,0x79,0x7a,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x85,0x86,0x87,0x87,0x87,0x87,0x86,0x85,0x84,0x82,0x80,0x7e,0x7b,0x79,0x77,0x75,0x74,0x74,0x75,0x77,0x79,0x7c,0x7f,0x83,0x86,0x8a,0x8d,0x90,0x92,0x93,0x94,0x94,0x93,0x91,0x8f,0x8b,0x87,0x83,0x7e,0x79,0x74,0x70,0x6d,0x6a,0x69,0x69,0x6a,0x6c,0x6e,0x71,0x75,0x79,0x7e,0x82,0x86,0x8a,0x8d,0x90,0x92,0x93,0x93,0x93,0x91,0x8f,0x8c,0x89,0x85,0x81,0x7d,0x79,0x76,0x74,0x73,0x72,0x72,0x72,0x74,0x76,0x78,0x7b,0x7d,0x80,0x82,0x84,0x86,0x88,0x89,0x89,0x89,0x89,0x88,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7b,0x7c,0x7c,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7a,0x78,0x77,0x75,0x74,0x73,0x73,0x73,0x75,0x77,0x79,0x7d,0x81,0x84,0x88,0x8b,0x8e,0x90,0x91,0x91,0x91,0x90,0x8f,0x8d,0x8a,0x87,0x83,0x7f,0x7b,0x77,0x73,0x70,0x6d,0x6c,0x6c,0x6c,0x6e,0x71,0x74,0x78,0x7d,0x81,0x85,0x89,0x8c,0x8f,0x92,0x93,0x94,0x94,0x93,0x91,0x8f,0x8b,0x87,0x82,0x7e,0x79,0x76,0x73,0x70,0x6f,0x6e,0x6f,0x70,0x71,0x73,0x76,0x79,0x7c,0x7f,0x82,0x85,0x87,0x89,0x8a,0x8b,0x8b,0x8a,0x89,0x87,0x85,0x83,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x78,0x79,0x7b,0x7d,0x80,0x84,0x87,0x8b,0x8e,0x90,0x92,0x93,0x93,0x91,0x8f,0x8c,0x88,0x84,0x80,0x7c,0x79,0x75,0x72,0x70,0x6e,0x6c,0x6c,0x6b,0x6c,0x6e,0x70,0x73,0x77,0x7c,0x81,0x86,0x8b,0x8f,0x92,0x94,0x95,0x94,0x92,0x90,0x8d,0x89,0x86,0x82,0x7e,0x7a,0x77,0x74,0x71,0x6f,0x6d,0x6d,0x6d,0x6f,0x71,0x75,0x78,0x7c,0x80,0x84,0x87,0x89,0x8b,0x8c,0x8d,0x8e,0x8e,0x8d,0x8d,0x8c,0x8b,0x89,0x87,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x76,0x76,0x78,0x79,0x7c,0x7e,0x81,0x84,0x86,0x88,0x8a,0x8a,0x8b,0x8b,0x8b,0x8b,0x8a,0x89,0x88,0x86,0x84,0x80,0x7d,0x79,0x75,0x72,0x70,0x6f,0x6e,0x6f,0x71,0x74,0x78,0x7b,0x7f,0x82,0x86,0x89,0x8c,0x8f,0x91,0x93,0x95,0x96,0x96,0x95,0x93,0x90,0x8d,0x89,0x85,0x81,0x7d,0x7a,0x77,0x75,0x73,0x71,0x70,0x70,0x71,0x72,0x74,0x76,0x7a,0x7d,0x80,0x84,0x86,0x88,0x8a,0x8b,0x8b,0x8b,0x8b,0x8a,0x89,0x88,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,0x7c,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x84,0x86,0x87,0x88,0x89,0x89,0x89,0x88,0x88,0x87,0x85,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x76,0x74,0x73,0x73,0x74,0x76,0x78,0x7b,0x7e,0x81,0x83,0x86,0x88,0x8a,0x8c,0x8d,0x8e,0x8f,0x8f,0x8f,0x8e,0x8c,0x89,0x86,0x82,0x7e,0x7a,0x77,0x74,0x72,0x70,0x6f,0x6f,0x70,0x71,0x72,0x74,0x75,0x77,0x79,0x7c,0x7e,0x81,0x83,0x85,0x87,0x89,0x89,0x89,0x88,0x87,0x85,0x83,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x86,0x85,0x85,0x84,0x83,0x82,0x82,0x82,0x83,0x84,0x85,0x86,0x87,0x87,0x88,0x87,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7c,0x7a,0x77,0x75,0x73,0x72,0x70,0x70,0x70,0x71,0x72,0x74,0x77,0x7a,0x7d,0x80,0x83,0x86,0x88,0x8a,0x8b,0x8c,0x8c,0x8c,0x8c,0x8b,0x8a,0x88,0x86,0x83,0x80,0x7d,0x7a,0x77,0x75,0x73,0x72,0x73,0x74,0x76,0x79,0x7c,0x7f,0x82,0x84,0x86,0x88,0x8a,0x8b,0x8d,0x8e,0x90,0x91,0x92,0x91,0x90,0x8f,0x8c,0x89,0x85,0x82,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x81,0x84,0x86,0x87,0x87,0x85,0x84,0x81,0x80,0x7f,0x7f,0x80,0x82,0x84,0x85,0x85,0x84,0x81,0x7d,0x79,0x75,0x72,0x70,0x71,0x73,0x77,0x7c,0x81,0x85,0x88,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8c,0x8e,0x90,0x92,0x93,0x92,0x8f,0x8b,0x86,0x80,0x7b,0x76,0x72,0x70,0x6f,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x79,0x7c,0x80,0x83,0x87,0x8b,0x8d,0x8e,0x8e,0x8d,0x8b,0x88,0x85,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x79,0x79,0x78,0x79,0x7b,0x7d,0x80,0x83,0x85,0x87,0x89,0x89,0x89,0x88,0x87,0x86,0x86,0x86,0x87,0x88,0x88,0x89,0x88,0x87,0x86,0x84,0x83,0x82,0x81,0x82,0x83,0x84,0x86,0x86,0x86,0x85,0x82,0x7e,0x7a,0x76,0x73,0x71,0x70,0x72,0x74,0x78,0x7b,0x7e,0x81,0x82,0x82,0x82,0x82,0x82,0x83,0x86,0x89,0x8e,0x91,0x95,0x96,0x95,0x93,0x8e,0x88,0x82,0x7c,0x77,0x74,0x73,0x74,0x76,0x78,0x79,0x7a,0x7b,0x7a,0x78,0x77,0x77,0x77,0x79,0x7d,0x82,0x87,0x8c,0x8f,0x91,0x91,0x90,0x8c,0x88,0x84,0x81,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x7a,0x79,0x77,0x75,0x73,0x71,0x71,0x72,0x74,0x77,0x7b,0x7f,0x82,0x85,0x87,0x88,0x88,0x87,0x86,0x85,0x85,0x85,0x86,0x87,0x88,0x89,0x89,0x88,0x87,0x85,0x83,0x81,0x80,0x7f,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x84,0x82,0x7f,0x7c,0x79,0x77,0x75,0x75,0x77,0x79,0x7b,0x7e,0x80,0x82,0x82,0x83,0x82,0x82,0x82,0x83,0x85,0x87,0x8a,0x8c,0x8e,0x8f,0x8e,0x8b,0x87,0x82,0x7d,0x79,0x76,0x74,0x74,0x75,0x77,0x79,0x7b,0x7c,0x7d,0x7c,0x7c,0x7b,0x7c,0x7d,0x81,0x85,0x8a,0x90,0x94,0x97,0x98,0x97,0x94,0x8f,0x89,0x84,0x80,0x7d,0x7b,0x7b,0x7c,0x7d,0x7d,0x7c,0x7a,0x78,0x74,0x71,0x6f,0x6f,0x70,0x73,0x78,0x7d,0x82,0x87,0x89,0x8a,0x8a,0x88,0x85,0x82,0x80,0x7f,0x7f,0x80,0x82,0x84,0x85,0x86,0x85,0x84,0x81,0x7e,0x7b,0x7a,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x84,0x83,0x82,0x7f,0x7b,0x78,0x75,0x73,0x73,0x75,0x77,0x7b,0x7e,0x81,0x82,0x83,0x83,0x82,0x80,0x80,0x80,0x81,0x84,0x87,0x8a,0x8c,0x8e,0x8d,0x8a,0x86,0x81,0x7b,0x76,0x71,0x6f,0x6e,0x6f,0x72,0x75,0x78,0x7a,0x7c,0x7d,0x7d,0x7c,0x7d,0x7e,0x81,0x85,0x8a,0x8f,0x94,0x98,0x9a,0x9a,0x97,0x93,0x8d,0x88,0x83,0x7f,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7e,0x7b,0x78,0x75,0x73,0x71,0x72,0x74,0x78,0x7c,0x81,0x86,0x89,0x8a,0x8a,0x88,0x85,0x81,0x7e,0x7c,0x7c,0x7d,0x7e,0x81,0x82,0x83,0x83,0x82,0x7f,0x7c,0x79,0x77,0x76,0x77,0x79,0x7c,0x80,0x83,0x85,0x87,0x86,0x84,0x82,0x7f,0x7c,0x7b,0x7b,0x7c,0x7f,0x82,0x85,0x88,0x8a,0x8b,0x8a,0x89,0x87,0x85,0x84,0x84,0x85,0x87,0x89,0x8b,0x8c,0x8b,0x89,0x86,0x81,0x7b,0x76,0x71,0x6e,0x6d,0x6d,0x6f,0x72,0x74,0x77,0x79,0x7a,0x7a,0x7a,0x79,0x7a,0x7c,0x7f,0x83,0x88,0x8c,0x90,0x93,0x93,0x92,0x8e,0x8a,0x84,0x7f,0x7a,0x78,0x76,0x76,0x78,0x79,0x7a,0x7b,0x7b,0x7a,0x78,0x76,0x75,0x76,0x78,0x7b,0x80,0x86,0x8b,0x90,0x93,0x94,0x93,0x90,0x8d,0x88,0x85,0x82,0x81,0x80,0x81,0x82,0x83,0x82,0x81,0x7e,0x7b,0x77,0x74,0x71,0x70,0x71,0x73,0x76,0x79,0x7c,0x7e,0x7f,0x7f,0x7d,0x7a,0x77,0x75,0x74,0x74,0x76,0x79,0x7d,0x80,0x84,0x86,0x86,0x85,0x84,0x82,0x80,0x7f,0x7f,0x80,0x82,0x85,0x87,0x88,0x88,0x86,0x83,0x7f,0x7a,0x75,0x72,0x6f,0x6f,0x71,0x74,0x78,0x7b,0x7f,0x81,0x82,0x83,0x82,0x82,0x82,0x83,0x86,0x89,0x8d,0x91,0x93,0x95,0x94,0x91,0x8d,0x87,0x81,0x7b,0x76,0x73,0x72,0x72,0x74,0x76,0x78,0x78,0x78,0x77,0x76,0x74,0x74,0x74,0x77,0x7b,0x80,0x85,0x8a,0x8e,0x91,0x91,0x8f,0x8b,0x87,0x82,0x7e,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7d,0x7c,0x7a,0x78,0x75,0x73,0x72,0x72,0x74,0x78,0x7c,0x80,0x84,0x86,0x87,0x86,0x83,0x80,0x7d,0x7b,0x7a,0x7b,0x7d,0x80,0x83,0x86,0x88,0x89,0x88,0x86,0x84,0x81,0x7f,0x7e,0x7f,0x81,0x83,0x86,0x88,0x88,0x88,0x85,0x81,0x7d,0x78,0x74,0x71,0x70,0x71,0x74,0x77,0x7b,0x7f,0x82,0x83,0x83,0x83,0x82,0x81,0x82,0x83,0x85,0x87,0x8a,0x8c,0x8e,0x8d,0x8b,0x87,0x81,0x7c,0x76,0x72,0x6f,0x6e,0x6e,0x6f,0x71,0x73,0x75,0x75,0x75,0x75,0x74,0x74,0x75,0x77,0x7a,0x7e,0x83,0x89,0x8d,0x90,0x92,0x92,0x90,0x8d,0x89,0x85,0x81,0x7f,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x7f,0x7e,0x7c,0x7a,0x79,0x78,0x79,0x7b,0x7e,0x81,0x85,0x89,0x8b,0x8c,0x8c,0x89,0x86,0x83,0x80,0x7e,0x7d,0x7d,0x7f,0x81,0x84,0x86,0x87,0x86,0x84,0x81,0x7e,0x7c,0x7a,0x79,0x7a,0x7c,0x7e,0x81,0x82,0x82,0x81,0x7e,0x79,0x75,0x71,0x6f,0x6e,0x6f,0x72,0x76,0x7a,0x7e,0x82,0x84,0x84,0x84,0x83,0x82,0x82,0x83,0x85,0x87,0x8a,0x8d,0x8e,0x8e,0x8c,0x88,0x83,0x7e,0x78,0x74,0x71,0x70,0x71,0x73,0x76,0x79,0x7c,0x7e,0x7f,0x7f,0x7e,0x7e,0x7f,0x80,0x83,0x86,0x8a,0x8e,0x91,0x93,0x93,0x91,0x8d,0x88,0x83,0x7e,0x79,0x76,0x75,0x74,0x75,0x76,0x78,0x78,0x78,0x77,0x75,0x73,0x72,0x72,0x73,0x75,0x79,0x7d,0x81,0x85,0x87,0x88,0x87,0x85,0x81,0x7e,0x7a,0x78,0x78,0x79,0x7b,0x7e,0x81,0x83,0x84,0x84,0x82,0x80,0x7d,0x7a,0x79,0x78,0x7a,0x7c,0x7e,0x81,0x83,0x83,0x82,0x7f,0x7c,0x79,0x76,0x74,0x74,0x76,0x79,0x7d,0x81,0x85,0x87,0x89,0x89,0x88,0x86,0x84,0x83,0x83,0x84,0x85,0x87,0x89,0x89,0x88,0x86,0x81,0x7c,0x76,0x71,0x6d,0x6a,0x6a,0x6c,0x6f,0x74,0x78,0x7c,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7f,0x81,0x85,0x89,0x8d,0x90,0x90,0x8f,0x8b,0x86,0x81,0x7b,0x77,0x74,0x73,0x74,0x77,0x7a,0x7d,0x7f,0x7f,0x7f,0x7d,0x7a,0x78,0x77,0x77,0x78,0x7c,0x80,0x84,0x88,0x8a,0x8b,0x89,0x87,0x83,0x80,0x7d,0x7c,0x7d,0x7f,0x83,0x86,0x89,0x8b,0x8b,0x89,0x85,0x80,0x7b,0x77,0x75,0x75,0x76,0x79,0x7c,0x7f,0x81,0x82,0x81,0x7f,0x7c,0x78,0x76,0x75,0x76,0x78,0x7c,0x80,0x84,0x87,0x89,0x88,0x86,0x83,0x80,0x7d,0x7a,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x81,0x80,0x7e,0x7b,0x78,0x75,0x73,0x72,0x74,0x76,0x7a,0x7e,0x81,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x80,0x81,0x83,0x86,0x89,0x8c,0x8e,0x8d,0x8c,0x89,0x84,0x80,0x7c,0x79,0x77,0x76,0x77,0x79,0x7a,0x7c,0x7c,0x7c,0x7b,0x79,0x77,0x76,0x75,0x77,0x79,0x7d,0x82,0x86,0x8a,0x8c,0x8c,0x8b,0x88,0x84,0x80,0x7d,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x80,0x7f,0x7d,0x7a,0x76,0x73,0x71,0x71,0x72,0x75,0x79,0x7e,0x82,0x86,0x88,0x88,0x87,0x85,0x83,0x81,0x7f,0x7f,0x81,0x83,0x86,0x89,0x8b,0x8c,0x8b,0x89,0x86,0x83,0x7f,0x7d,0x7c,0x7d,0x7f,0x81,0x84,0x86,0x86,0x85,0x83,0x7f,0x7b,0x78,0x75,0x73,0x74,0x76,0x79,0x7c,0x80,0x82,0x83,0x83,0x82,0x81,0x7f,0x7f,0x7f,0x81,0x83,0x87,0x8a,0x8c,0x8d,0x8d,0x8a,0x86,0x80,0x7b,0x77,0x73,0x71,0x71,0x72,0x73,0x75,0x76,0x77,0x77,0x76,0x74,0x74,0x74,0x76,0x79,0x7d,0x82,0x88,0x8c,0x90,0x91,0x91,0x8f,0x8c,0x88,0x84,0x81,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7d,0x7a,0x77,0x74,0x72,0x71,0x71,0x73,0x76,0x7a,0x7f,0x82,0x85,0x86,0x87,0x86,0x84,0x82,0x81,0x80,0x81,0x82,0x84,0x87,0x89,0x89,0x89,0x88,0x85,0x82,0x7f,0x7c,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x81,0x81,0x80,0x7e,0x7b,0x77,0x74,0x72,0x72,0x73,0x75,0x78,0x7c,0x7f,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7f,0x80,0x83,0x86,0x88,0x8a,0x8b,0x8a,0x87,0x84,0x7f,0x7a,0x76,0x73,0x72,0x73,0x74,0x77,0x79,0x7c,0x7d,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x80,0x83,0x87,0x8c,0x8f,0x92,0x93,0x92,0x90,0x8c,0x87,0x82,0x7e,0x7b,0x79,0x79,0x79,0x7a,0x7a,0x7a,0x79,0x77,0x74,0x72,0x70,0x70,0x71,0x73,0x77,0x7c,0x81,0x85,0x88,0x8a,0x8a,0x89,0x86,0x84,0x81,0x80,0x7f,0x80,0x81,0x83,0x85,0x85,0x85,0x83,0x80,0x7d,0x7a,0x78,0x76,0x76,0x78,0x7b,0x7e,0x81,0x84,0x85,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x81,0x84,0x87,0x89,0x8b,0x8b,0x8b,0x89,0x87,0x85,0x83,0x83,0x83,0x84,0x86,0x87,0x88,0x88,0x86,0x83,0x7f,0x7a,0x76,0x72,0x70,0x6f,0x6f,0x71,0x73,0x76,0x78,0x7a,0x7b,0x7b,0x7a,0x7a,0x7a,0x7c,0x7e,0x81,0x85,0x89,0x8d,0x8f,0x90,0x8f,0x8c,0x88,0x83,0x7f,0x7b,0x79,0x77,0x77,0x78,0x79,0x7a,0x7b,0x7b,0x7a,0x78,0x77,0x77,0x77,0x79,0x7c,0x80,0x85,0x8a,0x8e,0x91,0x92,0x92,0x90,0x8d,0x89,0x86,0x84,0x83,0x83,0x84,0x85,0x85,0x85,0x84,0x82,0x7f,0x7c,0x79,0x76,0x75,0x75,0x76,0x78,0x7b,0x7e,0x80,0x81,0x80,0x7f,0x7d,0x7a,0x78,0x76,0x76,0x77,0x7a,0x7c,0x80,0x82,0x84,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7f,0x82,0x84,0x85,0x86,0x85,0x83,0x7f,0x7c,0x78,0x76,0x74,0x75,0x77,0x7a,0x7d,0x81,0x84,0x86,0x87,0x87,0x86,0x86,0x85,0x86,0x87,0x8a,0x8d,0x90,0x92,0x93,0x92,0x90,0x8c,0x86,0x81,0x7c,0x78,0x75,0x74,0x74,0x75,0x76,0x78,0x78,0x78,0x77,0x76,0x75,0x74,0x75,0x77,0x7a,0x7d,0x82,0x86,0x89,0x8b,0x8c,0x8b,0x88,0x85,0x81,0x7e,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x7e,0x7c,0x79,0x77,0x76,0x76,0x77,0x7a,0x7d,0x81,0x84,0x87,0x88,0x89,0x88,0x86,0x84,0x82,0x81,0x81,0x82,0x84,0x86,0x89,0x8a,0x8b,0x8b,0x89,0x87,0x84,0x81,0x7f,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x83,0x81,0x7f,0x7b,0x77,0x74,0x71,0x70,0x71,0x72,0x75,0x79,0x7c,0x7f,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x81,0x83,0x86,0x89,0x8b,0x8b,0x8b,0x89,0x85,0x81,0x7d,0x79,0x76,0x74,0x74,0x74,0x76,0x78,0x7a,0x7c,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x82,0x85,0x89,0x8d,0x8f,0x90,0x90,0x8e,0x8b,0x87,0x84,0x80,0x7e,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7c,0x7b,0x78,0x76,0x75,0x74,0x74,0x75,0x77,0x7a,0x7e,0x81,0x83,0x84,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x80,0x82,0x84,0x86,0x86,0x86,0x84,0x82,0x7f,0x7d,0x7c,0x7c,0x7c,0x7e,0x80,0x81,0x82,0x82,0x82,0x80,0x7d,0x7a,0x78,0x76,0x76,0x77,0x79,0x7c,0x80,0x83,0x86,0x87,0x88,0x87,0x86,0x85,0x84,0x84,0x85,0x86,0x88,0x8a,0x8a,0x8a,0x88,0x85,0x81,0x7d,0x78,0x74,0x72,0x70,0x70,0x72,0x74,0x77,0x79,0x7b,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x81,0x84,0x87,0x8b,0x8e,0x90,0x90,0x8f,0x8d,0x89,0x85,0x81,0x7e,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7c,0x7c,0x7b,0x79,0x78,0x77,0x76,0x77,0x79,0x7c,0x80,0x84,0x87,0x89,0x8a,0x8a,0x88,0x86,0x84,0x82,0x80,0x80,0x81,0x82,0x83,0x85,0x86,0x86,0x84,0x82,0x80,0x7d,0x7b,0x7a,0x7a,0x7a,0x7c,0x7e,0x7f,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7e,0x81,0x84,0x86,0x87,0x87,0x86,0x85,0x84,0x83,0x83,0x83,0x84,0x85,0x86,0x87,0x86,0x85,0x82,0x7e,0x7a,0x76,0x73,0x71,0x71,0x72,0x74,0x76,0x79,0x7c,0x7e,0x7f,0x80,0x80,0x80,0x81,0x82,0x84,0x86,0x89,0x8b,0x8e,0x8f,0x8e,0x8d,0x8a,0x86,0x82,0x7e,0x7b,0x79,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7b,0x7a,0x79,0x78,0x78,0x78,0x79,0x7c,0x7e,0x82,0x85,0x88,0x89,0x8a,0x89,0x87,0x85,0x82,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x78,0x79,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x7b,0x7d,0x80,0x83,0x85,0x87,0x87,0x87,0x86,0x84,0x83,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x82,0x80,0x7e,0x7a,0x77,0x74,0x71,0x70,0x70,0x72,0x75,0x78,0x7b,0x7e,0x80,0x82,0x82,0x82,0x83,0x83,0x84,0x85,0x87,0x89,0x8a,0x8b,0x8b,0x8a,0x88,0x84,0x80,0x7c,0x78,0x75,0x73,0x73,0x73,0x75,0x76,0x78,0x79,0x7a,0x7a,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x81,0x84,0x87,0x89,0x89,0x89,0x88,0x86,0x83,0x80,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x79,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x82,0x84,0x86,0x88,0x88,0x88,0x87,0x85,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7c,0x7a,0x77,0x75,0x73,0x73,0x74,0x75,0x78,0x7b,0x7e,0x80,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x84,0x85,0x86,0x87,0x87,0x87,0x85,0x83,0x7f,0x7c,0x78,0x75,0x73,0x73,0x73,0x74,0x76,0x78,0x7a,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x86,0x89,0x8b,0x8c,0x8c,0x8b,0x89,0x87,0x84,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7d,0x7f,0x81,0x82,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7b,0x79,0x78,0x77,0x76,0x77,0x79,0x7c,0x7f,0x82,0x85,0x87,0x89,0x89,0x89,0x89,0x89,0x88,0x88,0x88,0x88,0x89,0x88,0x88,0x86,0x84,0x80,0x7d,0x79,0x76,0x74,0x72,0x72,0x72,0x74,0x76,0x78,0x7a,0x7b,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x86,0x87,0x89,0x89,0x88,0x87,0x84,0x82,0x7f,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x83,0x81,0x80,0x80,0x80,0x81,0x82,0x83,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x78,0x77,0x76,0x76,0x77,0x78,0x7b,0x7e,0x80,0x83,0x85,0x86,0x86,0x86,0x86,0x85,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7a,0x77,0x75,0x74,0x73,0x74,0x75,0x77,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x82,0x83,0x83,0x84,0x85,0x86,0x88,0x88,0x89,0x88,0x87,0x85,0x82,0x7f,0x7d,0x7a,0x79,0x78,0x78,0x78,0x79,0x7a,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x82,0x84,0x86,0x88,0x88,0x88,0x88,0x87,0x86,0x85,0x84,0x84,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x76,0x75,0x76,0x77,0x79,0x7b,0x7e,0x80,0x83,0x84,0x86,0x86,0x87,0x87,0x87,0x88,0x88,0x89,0x89,0x89,0x89,0x87,0x86,0x83,0x80,0x7d,0x7b,0x78,0x77,0x76,0x77,0x77,0x78,0x7a,0x7b,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x87,0x87,0x86,0x85,0x84,0x83,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x79,0x77,0x76,0x74,0x74,0x74,0x75,0x76,0x79,0x7b,0x7e,0x80,0x82,0x84,0x85,0x85,0x86,0x86,0x86,0x86,0x86,0x87,0x86,0x86,0x85,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x77,0x76,0x76,0x77,0x78,0x7a,0x7b,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x86,0x86,0x85,0x84,0x82,0x80,0x7f,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x83,0x85,0x86,0x86,0x86,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7a,0x79,0x78,0x77,0x76,0x77,0x78,0x79,0x7b,0x7e,0x80,0x82,0x84,0x85,0x86,0x87,0x87,0x87,0x87,0x87,0x87,0x87,0x86,0x85,0x84,0x82,0x7f,0x7d,0x7b,0x78,0x77,0x75,0x75,0x75,0x76,0x78,0x79,0x7b,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x84,0x84,0x85,0x85,0x85,0x85,0x85,0x84,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x79,0x78,0x78,0x77,0x77,0x77,0x77,0x79,0x7b,0x7d,0x7f,0x82,0x84,0x86,0x87,0x87,0x88,0x87,0x87,0x86,0x86,0x85,0x85,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x74,0x74,0x75,0x77,0x79,0x7c,0x7e,0x80,0x82,0x84,0x84,0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x86,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7b,0x7a,0x7a,0x7a,0x79,0x78,0x78,0x78,0x79,0x7b,0x7d,0x80,0x82,0x85,0x87,0x88,0x89,0x88,0x88,0x87,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x79,0x77,0x75,0x74,0x73,0x72,0x73,0x74,0x76,0x79,0x7b,0x7e,0x80,0x81,0x83,0x84,0x84,0x85,0x85,0x85,0x86,0x86,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x79,0x7a,0x7a,0x7a,0x7b,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7a,0x7a,0x79,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x80,0x82,0x85,0x88,0x89,0x89,0x88,0x87,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7a,0x77,0x75,0x73,0x72,0x72,0x74,0x77,0x7b,0x80,0x84,0x88,0x8a,0x8b,0x8a,0x89,0x87,0x85,0x85,0x85,0x86,0x87,0x88,0x88,0x88,0x86,0x84,0x80,0x7c,0x79,0x76,0x75,0x74,0x75,0x77,0x79,0x7a,0x7b,0x7c,0x7c,0x7c,0x7b,0x7c,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7b,0x7a,0x7a,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x85,0x86,0x88,0x8a,0x8b,0x8d,0x8d,0x8d,0x8c,0x8a,0x87,0x83,0x80,0x7d,0x7a,0x78,0x77,0x77,0x76,0x76,0x76,0x75,0x75,0x75,0x75,0x76,0x78,0x7a,0x7e,0x81,0x84,0x86,0x87,0x88,0x87,0x85,0x84,0x82,0x82,0x81,0x82,0x83,0x83,0x84,0x83,0x81,0x7e,0x7b,0x78,0x75,0x74,0x74,0x76,0x79,0x7e,0x82,0x86,0x89,0x8a,0x8a,0x89,0x86,0x83,0x81,0x7f,0x7e,0x7e,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7f,0x81,0x82,0x84,0x85,0x85,0x84,0x82,0x80,0x7d,0x7b,0x79,0x78,0x77,0x77,0x78,0x78,0x79,0x79,0x78,0x78,0x77,0x77,0x78,0x7a,0x7c,0x80,0x84,0x87,0x8b,0x8d,0x8e,0x8e,0x8c,0x8a,0x86,0x83,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x79,0x78,0x78,0x77,0x77,0x78,0x79,0x7b,0x7e,0x82,0x85,0x88,0x8a,0x8b,0x8b,0x8b,0x89,0x87,0x85,0x82,0x80,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x76,0x76,0x76,0x77,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x86,0x86,0x87,0x87,0x87,0x87,0x86,0x85,0x83,0x81,0x7e,0x7c,0x7a,0x78,0x78,0x78,0x79,0x7b,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x85,0x87,0x89,0x8b,0x8d,0x8f,0x8f,0x8d,0x8a,0x86,0x82,0x7d,0x79,0x76,0x74,0x74,0x74,0x75,0x77,0x78,0x78,0x79,0x79,0x79,0x79,0x7b,0x7d,0x80,0x83,0x86,0x89,0x8b,0x8c,0x8b,0x89,0x87,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x79,0x78,0x76,0x76,0x76,0x77,0x79,0x7b,0x7d,0x80,0x81,0x82,0x83,0x82,0x82,0x81,0x80,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x85,0x85,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x76,0x75,0x75,0x76,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x83,0x83,0x84,0x84,0x85,0x85,0x86,0x86,0x86,0x85,0x84,0x82,0x7e,0x7b,0x77,0x74,0x72,0x70,0x6f,0x6f,0x70,0x72,0x74,0x76,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x88,0x8b,0x8d,0x8f,0x91,0x91,0x91,0x8f,0x8d,0x8a,0x87,0x85,0x83,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7c,0x7b,0x7b,0x7a,0x7b,0x7c,0x7e,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7d,0x7c,0x7a,0x78,0x77,0x76,0x77,0x79,0x7b,0x7d,0x80,0x82,0x84,0x85,0x86,0x86,0x87,0x87,0x88,0x89,0x8b,0x8c,0x8d,0x8d,0x8c,0x8a,0x87,0x83,0x7f,0x7b,0x77,0x74,0x73,0x72,0x73,0x74,0x76,0x78,0x79,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x85,0x87,0x89,0x8b,0x8c,0x8c,0x8c,0x8a,0x87,0x84,0x81,0x7e,0x7b,0x79,0x77,0x76,0x76,0x76,0x76,0x76,0x77,0x77,0x77,0x77,0x78,0x79,0x7b,0x7d,0x7f,0x82,0x84,0x86,0x87,0x87,0x87,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x79,0x78,0x77,0x78,0x79,0x7c,0x7f,0x82,0x84,0x86,0x87,0x88,0x88,0x87,0x87,0x87,0x87,0x87,0x88,0x89,0x89,0x88,0x86,0x83,0x7f,0x7b,0x77,0x74,0x71,0x70,0x70,0x71,0x73,0x76,0x79,0x7b,0x7d,0x7e,0x80,0x80,0x81,0x83,0x85,0x87,0x89,0x8b,0x8d,0x8e,0x8e,0x8c,0x89,0x86,0x82,0x7e,0x7b,0x78,0x77,0x76,0x76,0x76,0x77,0x78,0x78,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x82,0x85,0x88,0x8a,0x8b,0x8b,0x8b,0x89,0x87,0x85,0x83,0x82,0x81,0x81,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x84,0x83,0x83,0x84,0x84,0x85,0x84,0x84,0x82,0x7f,0x7b,0x78,0x74,0x71,0x6f,0x6e,0x6f,0x71,0x73,0x76,0x79,0x7c,0x7e,0x80,0x81,0x82,0x83,0x85,0x87,0x89,0x8b,0x8e,0x8f,0x90,0x8f,0x8d,0x8a,0x86,0x82,0x7e,0x7a,0x77,0x76,0x75,0x75,0x76,0x78,0x79,0x79,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x85,0x88,0x8b,0x8d,0x8e,0x8e,0x8d,0x8a,0x87,0x84,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7a,0x79,0x78,0x78,0x78,0x7a,0x7c,0x7e,0x7f,0x81,0x81,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x7c,0x7e,0x80,0x83,0x85,0x87,0x88,0x89,0x89,0x88,0x87,0x87,0x86,0x87,0x87,0x88,0x88,0x88,0x87,0x85,0x82,0x7f,0x7b,0x78,0x76,0x74,0x74,0x76,0x78,0x7b,0x7e,0x80,0x83,0x84,0x85,0x86,0x86,0x87,0x87,0x89,0x8a,0x8b,0x8c,0x8d,0x8c,0x8a,0x87,0x83,0x7e,0x7a,0x75,0x72,0x70,0x6f,0x6f,0x70,0x72,0x73,0x75,0x76,0x77,0x78,0x79,0x7a,0x7c,0x7f,0x82,0x85,0x88,0x8b,0x8d,0x8e,0x8e,0x8c,0x89,0x86,0x83,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7e,0x7f,0x82,0x84,0x85,0x86,0x86,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7f,0x7f,0x7f,0x80,0x7f,0x7e,0x7d,0x7a,0x77,0x75,0x72,0x71,0x71,0x72,0x74,0x77,0x7a,0x7e,0x81,0x83,0x85,0x86,0x87,0x87,0x88,0x89,0x8a,0x8b,0x8d,0x8d,0x8e,0x8d,0x8a,0x87,0x83,0x7f,0x7a,0x76,0x74,0x72,0x72,0x73,0x74,0x77,0x79,0x7b,0x7c,0x7e,0x7f,0x7f,0x81,0x82,0x84,0x87,0x89,0x8c,0x8e,0x8f,0x8f,0x8e,0x8b,0x88,0x84,0x80,0x7d,0x7a,0x79,0x78,0x78,0x79,0x7a,0x7a,0x7a,0x7a,0x79,0x78,0x78,0x78,0x79,0x7a,0x7d,0x7f,0x82,0x84,0x86,0x86,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x80,0x80,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x80,0x7e,0x7b,0x79,0x77,0x75,0x75,0x76,0x79,0x7c,0x7f,0x83,0x86,0x88,0x89,0x89,0x89,0x89,0x89,0x89,0x89,0x8a,0x8b,0x8b,0x8b,0x8a,0x87,0x84,0x7f,0x7b,0x76,0x72,0x70,0x6f,0x6f,0x70,0x72,0x75,0x78,0x7a,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x84,0x87,0x89,0x8c,0x8d,0x8e,0x8d,0x8b,0x88,0x84,0x7f,0x7b,0x78,0x76,0x75,0x75,0x75,0x77,0x78,0x79,0x7a,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x81,0x84,0x87,0x89,0x8a,0x8a,0x89,0x87,0x84,0x82,0x80,0x7e,0x7e,0x7e,0x7f,0x81,0x82,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x75,0x76,0x79,0x7c,0x7f,0x82,0x85,0x87,0x88,0x88,0x87,0x87,0x86,0x86,0x87,0x88,0x88,0x88,0x88,0x86,0x84,0x80,0x7c,0x78,0x74,0x71,0x6f,0x6f,0x70,0x72,0x75,0x78,0x7b,0x7e,0x80,0x82,0x83,0x84,0x85,0x86,0x88,0x8b,0x8d,0x8f,0x90,0x8f,0x8e,0x8b,0x87,0x83,0x7e,0x7a,0x76,0x74,0x73,0x73,0x75,0x76,0x78,0x79,0x7a,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x83,0x86,0x89,0x8b,0x8c,0x8c,0x8a,0x88,0x85,0x82,0x7f,0x7e,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x81,0x81,0x80,0x7d,0x7b,0x78,0x77,0x76,0x76,0x77,0x7a,0x7d,0x80,0x83,0x85,0x86,0x87,0x86,0x85,0x84,0x83,0x83,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x7d,0x79,0x75,0x72,0x70,0x6f,0x6f,0x71,0x75,0x78,0x7c,0x80,0x82,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8c,0x8e,0x90,0x90,0x90,0x8e,0x8a,0x86,0x81,0x7c,0x77,0x74,0x72,0x71,0x71,0x73,0x75,0x77,0x78,0x79,0x7a,0x7a,0x7b,0x7b,0x7d,0x7f,0x81,0x84,0x88,0x8a,0x8c,0x8c,0x8b,0x89,0x86,0x82,0x7f,0x7c,0x7a,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x84,0x83,0x80,0x7e,0x7c,0x7b,0x7b,0x7d,0x7f,0x82,0x85,0x87,0x89,0x89,0x89,0x88,0x86,0x85,0x84,0x83,0x83,0x83,0x84,0x84,0x84,0x82,0x80,0x7d,0x79,0x75,0x72,0x70,0x6f,0x70,0x72,0x76,0x7a,0x7d,0x81,0x84,0x85,0x86,0x87,0x87,0x87,0x88,0x89,0x8b,0x8c,0x8d,0x8d,0x8c,0x8a,0x86,0x82,0x7d,0x78,0x74,0x71,0x70,0x70,0x71,0x73,0x76,0x78,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x80,0x82,0x85,0x88,0x8a,0x8c,0x8e,0x8d,0x8c,0x89,0x85,0x81,0x7d,0x7a,0x78,0x77,0x77,0x78,0x7a,0x7b,0x7c,0x7d,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x83,0x85,0x86,0x86,0x84,0x82,0x80,0x7d,0x7c,0x7b,0x7b,0x7c,0x7f,0x81,0x84,0x86,0x88,0x88,0x87,0x86,0x84,0x83,0x82,0x81,0x81,0x81,0x82,0x82,0x82,0x80,0x7e,0x7b,0x78,0x75,0x72,0x70,0x70,0x71,0x74,0x77,0x7b,0x7f,0x83,0x85,0x87,0x87,0x87,0x87,0x87,0x87,0x88,0x88,0x89,0x8a,0x8a,0x89,0x86,0x83,0x7e,0x79,0x75,0x71,0x6f,0x6e,0x6f,0x71,0x75,0x78,0x7c,0x7f,0x81,0x82,0x83,0x84,0x84,0x86,0x88,0x8a,0x8d,0x8f,0x91,0x92,0x91,0x8f,0x8b,0x87,0x82,0x7e,0x7a,0x78,0x77,0x78,0x79,0x7b,0x7d,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x82,0x85,0x87,0x87,0x87,0x85,0x82,0x7f,0x7c,0x7a,0x79,0x7a,0x7b,0x7e,0x80,0x83,0x84,0x85,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x82,0x82,0x82,0x81,0x7f,0x7c,0x79,0x77,0x75,0x74,0x75,0x77,0x7a,0x7e,0x82,0x85,0x88,0x8a,0x8b,0x8b,0x8a,0x8a,0x8a,0x8a,0x8a,0x8b,0x8b,0x8b,0x8a,0x88,0x85,0x81,0x7c,0x78,0x73,0x70,0x6f,0x6f,0x70,0x73,0x76,0x79,0x7d,0x7f,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x89,0x8b,0x8d,0x8d,0x8d,0x8c,0x89,0x85,0x81,0x7c,0x78,0x75,0x73,0x73,0x73,0x75,0x77,0x79,0x7b,0x7c,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x82,0x85,0x87,0x89,0x8a,0x89,0x87,0x84,0x81,0x7e,0x7c,0x7a,0x7a,0x7c,0x7e,0x80,0x83,0x84,0x85,0x85,0x84,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x80,0x7e,0x7b,0x78,0x76,0x75,0x76,0x78,0x7b,0x7f,0x83,0x86,0x89,0x8a,0x8a,0x8a,0x89,0x87,0x86,0x86,0x86,0x87,0x87,0x87,0x86,0x84,0x80,0x7c,0x78,0x73,0x70,0x6d,0x6c,0x6d,0x70,0x73,0x77,0x7b,0x7e,0x81,0x83,0x84,0x85,0x85,0x86,0x87,0x88,0x8a,0x8c,0x8d,0x8e,0x8d,0x8b,0x87,0x83,0x7e,0x7a,0x76,0x73,0x72,0x72,0x74,0x76,0x79,0x7b,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x82,0x84,0x86,0x89,0x8b,0x8c,0x8c,0x8b,0x88,0x85,0x82,0x7e,0x7c,0x7b,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x7f,0x7c,0x7a,0x77,0x76,0x75,0x76,0x78,0x7b,0x7f,0x82,0x86,0x88,0x89,0x89,0x88,0x87,0x85,0x84,0x84,0x84,0x84,0x85,0x85,0x84,0x82,0x80,0x7c,0x78,0x74,0x71,0x6f,0x6f,0x70,0x73,0x76,0x7b,0x7f,0x82,0x85,0x87,0x88,0x88,0x88,0x88,0x89,0x8a,0x8b,0x8d,0x8d,0x8d,0x8c,0x89,0x86,0x81,0x7c,0x77,0x73,0x71,0x70,0x70,0x72,0x75,0x78,0x7a,0x7c,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x82,0x84,0x87,0x89,0x8b,0x8c,0x8b,0x89,0x87,0x83,0x7f,0x7c,0x7a,0x78,0x78,0x7a,0x7b,0x7e,0x80,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x84,0x83,0x82,0x7f,0x7d,0x7a,0x79,0x78,0x79,0x7b,0x7f,0x82,0x85,0x88,0x89,0x8a,0x89,0x88,0x86,0x85,0x84,0x83,0x83,0x83,0x84,0x84,0x83,0x81,0x7e,0x7b,0x77,0x74,0x72,0x70,0x71,0x73,0x76,0x7a,0x7e,0x82,0x85,0x88,0x89,0x89,0x89,0x89,0x89,0x89,0x8a,0x8a,0x8b,0x8b,0x8a,0x89,0x86,0x81,0x7d,0x78,0x73,0x70,0x6e,0x6e,0x6f,0x71,0x75,0x78,0x7b,0x7d,0x7f,0x80,0x80,0x81,0x81,0x82,0x84,0x86,0x88,0x8a,0x8b,0x8c,0x8b,0x88,0x85,0x81,0x7d,0x7a,0x77,0x76,0x76,0x77,0x79,0x7c,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x86,0x86,0x85,0x83,0x81,0x7e,0x7c,0x7a,0x7a,0x7b,0x7d,0x7f,0x82,0x85,0x87,0x88,0x88,0x87,0x85,0x84,0x82,0x81,0x80,0x80,0x81,0x81,0x81,0x80,0x7f,0x7c,0x79,0x76,0x73,0x71,0x71,0x71,0x74,0x77,0x7b,0x7f,0x83,0x86,0x88,0x89,0x89,0x89,0x88,0x88,0x88,0x88,0x88,0x89,0x89,0x88,0x86,0x83,0x7f,0x7a,0x76,0x72,0x6f,0x6e,0x6f,0x71,0x74,0x77,0x7b,0x7e,0x81,0x83,0x84,0x84,0x85,0x85,0x86,0x87,0x89,0x8b,0x8c,0x8d,0x8c,0x8b,0x88,0x84,0x80,0x7c,0x78,0x76,0x75,0x75,0x76,0x79,0x7b,0x7d,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x80,0x7d,0x7b,0x79,0x79,0x7a,0x7b,0x7e,0x81,0x83,0x85,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x80,0x7f,0x7c,0x7a,0x77,0x75,0x73,0x73,0x74,0x76,0x7a,0x7e,0x82,0x85,0x88,0x8a,0x8a,0x8a,0x89,0x88,0x87,0x87,0x87,0x87,0x87,0x86,0x85,0x83,0x80,0x7c,0x78,0x74,0x71,0x6f,0x6e,0x6f,0x72,0x75,0x79,0x7d,0x80,0x83,0x85,0x86,0x86,0x86,0x87,0x87,0x88,0x8a,0x8b,0x8c,0x8c,0x8b,0x88,0x85,0x81,0x7d,0x79,0x75,0x73,0x72,0x73,0x75,0x77,0x7a,0x7c,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x83,0x85,0x87,0x87,0x87,0x85,0x83,0x80,0x7d,0x7b,0x79,0x79,0x79,0x7b,0x7e,0x80,0x83,0x84,0x85,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x7e,0x7c,0x79,0x77,0x76,0x76,0x77,0x7a,0x7d,0x81,0x85,0x88,0x8a,0x8b,0x8b,0x8a,0x89,0x88,0x87,0x86,0x85,0x85,0x85,0x84,0x83,0x81,0x7e,0x7a,0x77,0x73,0x71,0x6f,0x6f,0x71,0x73,0x77,0x7b,0x7f,0x82,0x85,0x86,0x87,0x87,0x87,0x87,0x88,0x88,0x89,0x8a,0x8a,0x8a,0x88,0x86,0x82,0x7e,0x7a,0x76,0x74,0x72,0x72,0x73,0x75,0x77,0x7a,0x7d,0x7f,0x80,0x81,0x81,0x81,0x81,0x82,0x83,0x84,0x86,0x88,0x89,0x89,0x88,0x86,0x84,0x81,0x7d,0x7b,0x79,0x79,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x78,0x7a,0x7e,0x81,0x84,0x87,0x89,0x8a,0x89,0x88,0x87,0x86,0x84,0x84,0x83,0x83,0x83,0x82,0x81,0x7f,0x7c,0x79,0x75,0x73,0x71,0x70,0x71,0x73,0x76,0x7a,0x7e,0x82,0x85,0x87,0x88,0x89,0x89,0x89,0x88,0x88,0x89,0x89,0x89,0x89,0x88,0x86,0x83,0x80,0x7c,0x78,0x74,0x72,0x71,0x71,0x73,0x75,0x78,0x7b,0x7e,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x84,0x86,0x87,0x88,0x89,0x89,0x87,0x85,0x82,0x7f,0x7c,0x7a,0x78,0x78,0x78,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x78,0x79,0x7b,0x7e,0x81,0x84,0x87,0x88,0x88,0x88,0x87,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7b,0x78,0x76,0x73,0x72,0x71,0x72,0x75,0x78,0x7c,0x80,0x84,0x86,0x88,0x89,0x89,0x89,0x88,0x88,0x88,0x88,0x88,0x88,0x87,0x86,0x83,0x80,0x7c,0x79,0x75,0x72,0x70,0x70,0x70,0x73,0x76,0x79,0x7c,0x7f,0x81,0x83,0x83,0x84,0x84,0x84,0x85,0x86,0x87,0x88,0x88,0x88,0x88,0x86,0x83,0x80,0x7c,0x79,0x77,0x76,0x76,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x7f,0x7c,0x7a,0x79,0x78,0x78,0x7a,0x7c,0x7f,0x81,0x84,0x86,0x87,0x87,0x86,0x85,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7a,0x78,0x75,0x74,0x73,0x73,0x74,0x77,0x7a,0x7e,0x82,0x85,0x88,0x89,0x8a,0x8a,0x89,0x88,0x87,0x87,0x87,0x86,0x86,0x85,0x83,0x81,0x7e,0x7b,0x77,0x74,0x71,0x70,0x70,0x71,0x74,0x77,0x7b,0x7e,0x81,0x83,0x84,0x85,0x85,0x85,0x86,0x86,0x87,0x88,0x88,0x88,0x88,0x87,0x84,0x81,0x7e,0x7b,0x78,0x76,0x75,0x75,0x76,0x78,0x7a,0x7d,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x81,0x82,0x82,0x83,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7c,0x7a,0x78,0x76,0x74,0x74,0x74,0x76,0x79,0x7c,0x80,0x83,0x86,0x88,0x89,0x89,0x88,0x87,0x86,0x85,0x85,0x84,0x84,0x83,0x82,0x81,0x7e,0x7c,0x78,0x75,0x73,0x71,0x70,0x71,0x73,0x76,0x79,0x7c,0x80,0x82,0x84,0x86,0x86,0x86,0x86,0x86,0x87,0x87,0x87,0x88,0x87,0x86,0x85,0x82,0x7f,0x7c,0x79,0x76,0x74,0x73,0x74,0x75,0x77,0x7a,0x7c,0x7e,0x80,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x79,0x78,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x77,0x75,0x75,0x76,0x78,0x7b,0x7e,0x81,0x84,0x86,0x88,0x89,0x88,0x88,0x87,0x86,0x85,0x84,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7a,0x77,0x75,0x73,0x71,0x71,0x73,0x75,0x78,0x7b,0x7f,0x82,0x84,0x86,0x87,0x88,0x88,0x88,0x87,0x87,0x87,0x87,0x87,0x86,0x85,0x83,0x80,0x7d,0x7a,0x77,0x75,0x73,0x73,0x74,0x76,0x78,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x84,0x84,0x85,0x84,0x83,0x82,0x80,0x7d,0x7b,0x79,0x78,0x77,0x78,0x79,0x7b,0x7d,0x80,0x81,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7e,0x7d,0x7b,0x79,0x78,0x77,0x77,0x78,0x7a,0x7c,0x7f,0x82,0x85,0x87,0x88,0x88,0x88,0x87,0x86,0x85,0x84,0x83,0x83,0x82,0x81,0x80,0x7e,0x7c,0x79,0x77,0x74,0x73,0x72,0x73,0x74,0x77,0x7a,0x7d,0x81,0x83,0x86,0x87,0x88,0x88,0x88,0x88,0x87,0x87,0x87,0x86,0x86,0x84,0x83,0x80,0x7e,0x7b,0x78,0x76,0x74,0x73,0x74,0x75,0x77,0x7a,0x7c,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x85,0x85,0x86,0x86,0x86,0x85,0x84,0x82,0x7f,0x7d,0x7a,0x79,0x78,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x81,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x7a,0x78,0x78,0x78,0x79,0x7b,0x7d,0x80,0x83,0x85,0x87,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7b,0x78,0x76,0x75,0x74,0x73,0x74,0x76,0x79,0x7c,0x7f,0x82,0x85,0x87,0x88,0x88,0x88,0x88,0x87,0x87,0x86,0x86,0x85,0x84,0x83,0x81,0x7e,0x7c,0x79,0x76,0x74,0x73,0x73,0x73,0x75,0x78,0x7b,0x7d,0x80,0x82,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x86,0x85,0x84,0x82,0x80,0x7e,0x7b,0x79,0x78,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7b,0x79,0x78,0x78,0x78,0x7a,0x7c,0x7e,0x80,0x83,0x84,0x85,0x86,0x86,0x85,0x84,0x84,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x76,0x75,0x75,0x75,0x76,0x78,0x7b,0x7e,0x81,0x84,0x86,0x87,0x88,0x88,0x88,0x88,0x87,0x87,0x86,0x85,0x84,0x83,0x82,0x7f,0x7d,0x7a,0x78,0x75,0x74,0x73,0x74,0x75,0x77,0x79,0x7c,0x7f,0x81,0x83,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x85,0x84,0x83,0x80,0x7e,0x7b,0x79,0x77,0x76,0x76,0x76,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x84,0x83,0x82,0x82,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x78,0x76,0x75,0x75,0x76,0x77,0x7a,0x7c,0x7f,0x82,0x84,0x86,0x87,0x87,0x87,0x87,0x86,0x85,0x85,0x84,0x83,0x83,0x81,0x7f,0x7d,0x7b,0x78,0x76,0x74,0x73,0x73,0x74,0x76,0x78,0x7b,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x85,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x76,0x75,0x76,0x77,0x78,0x7a,0x7d,0x7f,0x80,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x84,0x84,0x84,0x83,0x83,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x84,0x84,0x85,0x84,0x84,0x83,0x83,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x77,0x76,0x76,0x77,0x79,0x7b,0x7e,0x81,0x83,0x85,0x86,0x87,0x87,0x87,0x86,0x86,0x85,0x85,0x84,0x83,0x82,0x81,0x7f,0x7c,0x7a,0x78,0x76,0x74,0x74,0x74,0x76,0x78,0x7a,0x7d,0x80,0x82,0x84,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x85,0x84,0x82,0x80,0x7e,0x7b,0x79,0x77,0x76,0x75,0x76,0x77,0x79,0x7b,0x7d,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x83,0x83,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x77,0x76,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x85,0x86,0x86,0x86,0x86,0x85,0x85,0x84,0x84,0x83,0x83,0x81,0x80,0x7e,0x7c,0x79,0x77,0x76,0x75,0x75,0x76,0x77,0x7a,0x7c,0x7f,0x81,0x83,0x85,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x86,0x85,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x76,0x75,0x76,0x77,0x78,0x7a,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x83,0x84,0x83,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x77,0x77,0x79,0x7b,0x7d,0x80,0x82,0x84,0x85,0x85,0x86,0x85,0x85,0x85,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x76,0x75,0x75,0x76,0x78,0x7b,0x7d,0x80,0x82,0x84,0x85,0x85,0x86,0x86,0x85,0x85,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x75,0x75,0x77,0x79,0x7b,0x7e,0x80,0x81,0x83,0x83,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x77,0x77,0x78,0x79,0x7c,0x7e,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x84,0x84,0x84,0x83,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x75,0x76,0x77,0x7a,0x7c,0x7f,0x81,0x83,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x76,0x77,0x78,0x7b,0x7d,0x80,0x82,0x83,0x84,0x85,0x85,0x85,0x85,0x84,0x85,0x85,0x85,0x84,0x84,0x82,0x81,0x7e,0x7c,0x7a,0x78,0x76,0x76,0x77,0x78,0x7a,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x76,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7a,0x78,0x77,0x76,0x76,0x77,0x79,0x7b,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x84,0x82,0x81,0x7e,0x7c,0x79,0x77,0x76,0x76,0x76,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x84,0x84,0x85,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7d,0x7b,0x79,0x77,0x76,0x76,0x77,0x79,0x7b,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7e,0x7c,0x79,0x77,0x76,0x76,0x77,0x79,0x7b,0x7d,0x80,0x82,0x84,0x85,0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x76,0x75,0x76,0x77,0x79,0x7c,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7e,0x7b,0x79,0x77,0x76,0x75,0x76,0x78,0x7a,0x7d,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x83,0x83,0x84,0x84,0x84,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x76,0x76,0x76,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x84,0x84,0x84,0x84,0x84,0x83,0x83,0x83,0x84,0x84,0x83,0x83,0x81,0x7f,0x7d,0x7a,0x78,0x77,0x76,0x76,0x77,0x79,0x7c,0x7e,0x81,0x83,0x84,0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7e,0x7b,0x79,0x77,0x76,0x75,0x76,0x78,0x7a,0x7d,0x7f,0x82,0x83,0x84,0x85,0x85,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7d,0x7a,0x78,0x76,0x75,0x75,0x77,0x79,0x7b,0x7e,0x81,0x83,0x84,0x84,0x84,0x84,0x84,0x83,0x83,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x7e,0x7c,0x79,0x77,0x76,0x76,0x77,0x79,0x7b,0x7e,0x80,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x7e,0x7c,0x79,0x77,0x76,0x75,0x76,0x77,0x79,0x7c,0x7f,0x82,0x84,0x85,0x85,0x85,0x85,0x84,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x75,0x76,0x78,0x7a,0x7d,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x83,0x83,0x84,0x84,0x84,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x77,0x76,0x75,0x76,0x77,0x79,0x7c,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x83,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x80,0x7d,0x7b,0x78,0x77,0x76,0x76,0x77,0x79,0x7c,0x7f,0x81,0x83,0x84,0x85,0x84,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x78,0x76,0x75,0x75,0x76,0x78,0x7a,0x7d,0x80,0x83,0x85,0x86,0x86,0x85,0x85,0x84,0x83,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7c,0x79,0x77,0x75,0x74,0x75,0x76,0x78,0x7b,0x7e,0x81,0x83,0x85,0x85,0x85,0x85,0x84,0x83,0x83,0x83,0x83,0x84,0x84,0x84,0x83,0x81,0x7f,0x7c,0x79,0x77,0x75,0x75,0x76,0x77,0x7a,0x7d,0x7f,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x81,0x80,0x7d,0x7b,0x78,0x77,0x76,0x76,0x78,0x7a,0x7d,0x80,0x82,0x84,0x85,0x85,0x84,0x84,0x83,0x82,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x78,0x76,0x75,0x75,0x77,0x79,0x7c,0x7f,0x82,0x84,0x86,0x86,0x86,0x85,0x84,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x82,0x80,0x7e,0x7b,0x78,0x76,0x74,0x74,0x74,0x76,0x79,0x7c,0x7f,0x82,0x84,0x85,0x86,0x85,0x85,0x84,0x83,0x83,0x83,0x84,0x84,0x84,0x84,0x83,0x81,0x7e,0x7b,0x78,0x76,0x75,0x75,0x76,0x78,0x7a,0x7d,0x80,0x82,0x84,0x84,0x84,0x84,0x83,0x82,0x82,0x82,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7d,0x7b,0x79,0x77,0x76,0x77,0x79,0x7b,0x7e,0x81,0x83,0x85,0x85,0x85,0x85,0x83,0x82,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x78,0x77,0x76,0x76,0x78,0x7a,0x7d,0x80,0x83,0x86,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x82,0x82,0x83,0x83,0x82,0x82,0x80,0x7d,0x7b,0x78,0x76,0x74,0x74,0x75,0x77,0x7a,0x7e,0x81,0x84,0x86,0x87,0x87,0x86,0x85,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x84,0x83,0x81,0x7e,0x7b,0x78,0x76,0x75,0x75,0x76,0x78,0x7b,0x7e,0x81,0x83,0x85,0x85,0x85,0x84,0x83,0x82,0x82,0x82,0x83,0x84,0x84,0x84,0x84,0x82,0x80,0x7e,0x7b,0x79,0x77,0x77,0x78,0x79,0x7c,0x7f,0x82,0x84,0x85,0x86,0x85,0x84,0x83,0x81,0x81,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x76,0x77,0x79,0x7c,0x7f,0x82,0x85,0x87,0x88,0x88,0x87,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x78,0x75,0x74,0x74,0x76,0x78,0x7c,0x7f,0x83,0x85,0x87,0x88,0x88,0x87,0x86,0x85,0x84,0x83,0x84,0x84,0x85,0x85,0x84,0x83,0x80,0x7d,0x7a,0x77,0x75,0x74,0x75,0x76,0x79,0x7c,0x7f,0x82,0x84,0x86,0x86,0x85,0x84,0x83,0x82,0x82,0x83,0x83,0x84,0x85,0x85,0x84,0x83,0x80,0x7e,0x7b,0x79,0x77,0x77,0x78,0x7a,0x7d,0x80,0x82,0x84,0x85,0x86,0x85,0x83,0x82,0x80,0x80,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7b,0x79,0x78,0x77,0x78,0x7a,0x7d,0x80,0x83,0x86,0x88,0x88,0x88,0x87,0x85,0x83,0x82,0x81,0x81,0x81,0x81,0x82,0x81,0x80,0x7f,0x7c,0x7a,0x78,0x76,0x75,0x75,0x77,0x7a,0x7d,0x81,0x84,0x87,0x88,0x89,0x88,0x87,0x86,0x84,0x84,0x83,0x83,0x84,0x84,0x84,0x83,0x81,0x7f,0x7c,0x79,0x76,0x74,0x74,0x74,0x76,0x79,0x7d,0x80,0x83,0x85,0x86,0x85,0x85,0x84,0x83,0x82,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x82,0x80,0x7d,0x7a,0x78,0x76,0x76,0x78,0x7a,0x7d,0x80,0x82,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7e,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7e,0x81,0x84,0x87,0x88,0x88,0x87,0x86,0x84,0x82,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x7e,0x7c,0x79,0x77,0x75,0x75,0x76,0x78,0x7b,0x7e,0x82,0x86,0x88,0x89,0x89,0x88,0x87,0x85,0x84,0x83,0x82,0x82,0x83,0x83,0x83,0x82,0x80,0x7e,0x7b,0x78,0x75,0x74,0x73,0x74,0x77,0x7a,0x7e,0x81,0x84,0x86,0x87,0x87,0x86,0x85,0x83,0x83,0x83,0x83,0x84,0x85,0x86,0x85,0x84,0x82,0x80,0x7c,0x79,0x77,0x76,0x76,0x77,0x79,0x7c,0x7f,0x82,0x84,0x85,0x85,0x83,0x82,0x81,0x7f,0x7f,0x7f,0x80,0x81,0x83,0x83,0x83,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x78,0x79,0x7b,0x7e,0x81,0x84,0x86,0x87,0x87,0x86,0x84,0x82,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x76,0x76,0x77,0x79,0x7d,0x80,0x84,0x87,0x89,0x8a,0x8a,0x89,0x87,0x85,0x83,0x82,0x81,0x81,0x82,0x82,0x82,0x81,0x7f,0x7c,0x7a,0x77,0x75,0x74,0x74,0x75,0x78,0x7b,0x7f,0x83,0x85,0x87,0x88,0x87,0x86,0x85,0x84,0x83,0x83,0x83,0x84,0x85,0x85,0x85,0x83,0x81,0x7e,0x7b,0x79,0x76,0x75,0x76,0x77,0x7a,0x7d,0x80,0x82,0x84,0x85,0x85,0x84,0x82,0x81,0x80,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x81,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x7f,0x82,0x85,0x86,0x87,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x79,0x7b,0x7e,0x82,0x85,0x88,0x8a,0x8a,0x8a,0x88,0x86,0x84,0x82,0x81,0x80,0x80,0x81,0x81,0x81,0x80,0x7e,0x7c,0x79,0x76,0x74,0x74,0x74,0x76,0x79,0x7c,0x80,0x84,0x87,0x88,0x89,0x88,0x87,0x86,0x84,0x83,0x83,0x84,0x84,0x85,0x85,0x84,0x82,0x80,0x7d,0x7a,0x77,0x75,0x75,0x75,0x77,0x7a,0x7d,0x80,0x82,0x84,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x81,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x7f,0x82,0x84,0x86,0x86,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x79,0x79,0x7a,0x7d,0x80,0x83,0x86,0x89,0x8a,0x8a,0x89,0x87,0x85,0x83,0x81,0x7f,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7d,0x7b,0x78,0x76,0x75,0x74,0x75,0x77,0x7b,0x7e,0x82,0x86,0x88,0x89,0x8a,0x89,0x87,0x86,0x84,0x83,0x83,0x83,0x84,0x84,0x84,0x83,0x81,0x7f,0x7c,0x79,0x76,0x75,0x74,0x75,0x77,0x7a,0x7d,0x81,0x83,0x85,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x82,0x83,0x84,0x85,0x85,0x85,0x83,0x81,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x7f,0x81,0x84,0x85,0x85,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x7f,0x7e,0x7c,0x7a,0x79,0x7a,0x7b,0x7e,0x81,0x84,0x87,0x89,0x8a,0x8a,0x88,0x86,0x83,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7d,0x7b,0x78,0x76,0x75,0x75,0x76,0x79,0x7c,0x80,0x84,0x87,0x89,0x8a,0x8a,0x89,0x87,0x86,0x84,0x83,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7d,0x7a,0x78,0x75,0x74,0x74,0x75,0x77,0x7a,0x7e,0x81,0x84,0x85,0x86,0x86,0x85,0x83,0x82,0x82,0x82,0x82,0x83,0x84,0x85,0x85,0x84,0x82,0x80,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7e,0x80,0x83,0x84,0x84,0x84,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x82,0x80,0x7f,0x7d,0x7b,0x7a,0x7b,0x7c,0x7e,0x81,0x84,0x87,0x88,0x89,0x88,0x87,0x84,0x82,0x7f,0x7e,0x7d,0x7c,0x7d,0x7d,0x7e,0x7e,0x7d,0x7c,0x7b,0x79,0x77,0x76,0x77,0x78,0x7b,0x7e,0x82,0x85,0x88,0x8a,0x8b,0x8a,0x89,0x87,0x85,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x80,0x7e,0x7c,0x79,0x76,0x74,0x73,0x74,0x75,0x78,0x7b,0x7f,0x82,0x85,0x87,0x87,0x87,0x86,0x84,0x83,0x82,0x82,0x83,0x84,0x84,0x85,0x85,0x84,0x82,0x7f,0x7c,0x7a,0x78,0x77,0x77,0x78,0x7b,0x7d,0x80,0x82,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x81,0x84,0x86,0x87,0x88,0x87,0x85,0x83,0x80,0x7e,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7c,0x7b,0x79,0x78,0x78,0x78,0x7a,0x7c,0x80,0x84,0x87,0x89,0x8b,0x8b,0x8a,0x88,0x86,0x84,0x82,0x80,0x80,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7a,0x78,0x76,0x74,0x74,0x74,0x76,0x79,0x7d,0x81,0x84,0x87,0x88,0x88,0x88,0x87,0x85,0x84,0x83,0x83,0x83,0x84,0x84,0x84,0x84,0x83,0x81,0x7e,0x7b,0x79,0x77,0x76,0x77,0x78,0x7b,0x7e,0x80,0x82,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7e,0x7c,0x7b,0x7c,0x7d,0x7f,0x81,0x84,0x85,0x86,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7c,0x7c,0x7e,0x7e,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x7a,0x7c,0x7e,0x82,0x85,0x88,0x8a,0x8b,0x8b,0x89,0x87,0x85,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7a,0x77,0x76,0x75,0x75,0x76,0x78,0x7b,0x7f,0x83,0x86,0x88,0x89,0x89,0x88,0x87,0x86,0x84,0x83,0x83,0x83,0x84,0x84,0x84,0x83,0x81,0x7f,0x7c,0x79,0x77,0x76,0x75,0x76,0x78,0x7b,0x7e,0x80,0x82,0x84,0x84,0x84,0x82,0x81,0x80,0x7f,0x80,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x7f,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x80,0x83,0x86,0x88,0x8a,0x8a,0x8a,0x88,0x86,0x83,0x81,0x7f,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x79,0x77,0x76,0x75,0x76,0x77,0x7a,0x7d,0x81,0x84,0x87,0x89,0x8a,0x8a,0x89,0x87,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x74,0x76,0x78,0x7b,0x7e,0x80,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x82,0x84,0x84,0x85,0x84,0x83,0x81,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x83,0x83,0x82,0x80,0x7e,0x7d,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x81,0x83,0x86,0x88,0x89,0x89,0x88,0x86,0x83,0x81,0x7e,0x7d,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x77,0x79,0x7b,0x7f,0x82,0x86,0x88,0x8a,0x8a,0x8a,0x88,0x87,0x85,0x83,0x82,0x81,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x77,0x75,0x74,0x75,0x76,0x79,0x7b,0x7f,0x81,0x83,0x85,0x85,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7f,0x81,0x83,0x85,0x87,0x88,0x87,0x86,0x84,0x82,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7c,0x7c,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7e,0x81,0x84,0x87,0x8a,0x8b,0x8b,0x8a,0x88,0x86,0x84,0x82,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7c,0x7a,0x78,0x76,0x75,0x74,0x75,0x77,0x7a,0x7d,0x80,0x83,0x85,0x86,0x87,0x86,0x85,0x84,0x83,0x82,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7e,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x86,0x86,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x7a,0x7a,0x7b,0x7c,0x7c,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7b,0x7d,0x80,0x83,0x86,0x88,0x8a,0x8b,0x8b,0x89,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x79,0x77,0x76,0x75,0x75,0x77,0x79,0x7c,0x7f,0x82,0x85,0x87,0x88,0x88,0x87,0x86,0x85,0x84,0x83,0x83,0x83,0x83,0x84,0x83,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x82,0x84,0x87,0x89,0x8a,0x8a,0x89,0x88,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7c,0x7c,0x7b,0x7a,0x78,0x77,0x76,0x76,0x77,0x78,0x7b,0x7e,0x81,0x84,0x86,0x88,0x89,0x89,0x88,0x87,0x85,0x84,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x77,0x78,0x79,0x7c,0x7e,0x80,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7a,0x7b,0x7b,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x83,0x85,0x87,0x88,0x89,0x89,0x87,0x86,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7b,0x7a,0x7a,0x79,0x78,0x77,0x78,0x79,0x7b,0x7d,0x80,0x83,0x86,0x88,0x89,0x89,0x89,0x88,0x87,0x85,0x84,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x76,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x84,0x84,0x84,0x84,0x82,0x81,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x82,0x84,0x85,0x87,0x88,0x88,0x87,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x79,0x79,0x79,0x79,0x7b,0x7d,0x7f,0x82,0x85,0x87,0x89,0x89,0x89,0x89,0x87,0x86,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x7f,0x7d,0x7b,0x7a,0x78,0x77,0x76,0x76,0x77,0x79,0x7b,0x7d,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x83,0x83,0x83,0x84,0x84,0x85,0x84,0x84,0x83,0x81,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x82,0x81,0x81,0x80,0x80,0x7f,0x80,0x80,0x82,0x83,0x84,0x85,0x86,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x84,0x86,0x88,0x89,0x89,0x89,0x88,0x86,0x84,0x83,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7b,0x7a,0x78,0x77,0x76,0x76,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7a,0x7a,0x79,0x7a,0x7b,0x7c,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x87,0x88,0x89,0x89,0x88,0x86,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x77,0x78,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x86,0x86,0x86,0x86,0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7c,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7d,0x7d,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x86,0x87,0x88,0x88,0x88,0x86,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x77,0x77,0x78,0x79,0x7b,0x7e,0x80,0x83,0x85,0x86,0x87,0x87,0x87,0x86,0x86,0x85,0x85,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x78,0x78,0x78,0x78,0x7a,0x7b,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x81,0x81,0x82,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x82,0x83,0x85,0x86,0x87,0x87,0x87,0x86,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7a,0x79,0x79,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x86,0x87,0x88,0x87,0x87,0x86,0x85,0x85,0x84,0x84,0x83,0x82,0x82,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x77,0x77,0x78,0x7a,0x7c,0x7d,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x83,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x83,0x84,0x85,0x86,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7d,0x7d,0x7c,0x7c,0x7c,0x7b,0x7b,0x7b,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x86,0x87,0x88,0x87,0x87,0x86,0x85,0x84,0x84,0x83,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x77,0x77,0x78,0x79,0x7b,0x7d,0x7f,0x80,0x81,0x82,0x82,0x82,0x83,0x83,0x83,0x84,0x85,0x85,0x86,0x86,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x86,0x87,0x88,0x88,0x87,0x86,0x85,0x84,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x78,0x77,0x77,0x77,0x78,0x79,0x7b,0x7d,0x7f,0x80,0x82,0x83,0x83,0x83,0x83,0x84,0x84,0x84,0x85,0x85,0x85,0x85,0x85,0x84,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x80,0x7f,0x7e,0x7c,0x7c,0x7b,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7c,0x7c,0x7e,0x7f,0x81,0x83,0x85,0x86,0x87,0x87,0x87,0x86,0x85,0x83,0x82,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x78,0x77,0x76,0x76,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x86,0x87,0x87,0x86,0x85,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x79,0x78,0x77,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x84,0x85,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x78,0x79,0x7a,0x7b,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7c,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x84,0x86,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x79,0x78,0x78,0x77,0x78,0x79,0x7b,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x85,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x77,0x77,0x77,0x79,0x7a,0x7c,0x7d,0x7f,0x7f,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x84,0x85,0x86,0x86,0x86,0x85,0x83,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x82,0x83,0x84,0x85,0x85,0x85,0x83,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x80,0x82,0x84,0x86,0x86,0x86,0x86,0x85,0x84,0x83,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7c,0x79,0x77,0x76,0x76,0x76,0x78,0x79,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x85,0x86,0x86,0x87,0x86,0x84,0x83,0x80,0x7e,0x7c,0x7b,0x7a,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x84,0x85,0x86,0x87,0x86,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7a,0x78,0x77,0x76,0x76,0x77,0x78,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x84,0x85,0x86,0x87,0x86,0x85,0x83,0x81,0x7f,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x83,0x85,0x86,0x87,0x87,0x86,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x77,0x76,0x76,0x76,0x78,0x7a,0x7c,0x7f,0x81,0x82,0x83,0x84,0x83,0x83,0x83,0x83,0x83,0x83,0x84,0x85,0x86,0x86,0x86,0x84,0x82,0x7f,0x7d,0x7a,0x79,0x78,0x78,0x78,0x7a,0x7b,0x7d,0x7e,0x7e,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7f,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x76,0x77,0x79,0x7b,0x7e,0x80,0x83,0x84,0x85,0x85,0x84,0x84,0x83,0x83,0x83,0x84,0x84,0x85,0x86,0x85,0x84,0x83,0x80,0x7e,0x7b,0x79,0x77,0x77,0x77,0x78,0x7a,0x7c,0x7d,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x85,0x86,0x87,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7c,0x7c,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x82,0x80,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x7f,0x7f,0x7d,0x7b,0x7a,0x78,0x77,0x77,0x78,0x7a,0x7d,0x80,0x82,0x84,0x85,0x86,0x85,0x84,0x83,0x83,0x82,0x82,0x83,0x83,0x84,0x84,0x84,0x83,0x81,0x7f,0x7c,0x79,0x77,0x76,0x76,0x76,0x78,0x7a,0x7c,0x7e,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x80,0x81,0x83,0x85,0x86,0x87,0x87,0x86,0x84,0x82,0x80,0x7d,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x83,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x82,0x83,0x85,0x85,0x85,0x83,0x82,0x80,0x7e,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7d,0x7b,0x7a,0x78,0x78,0x78,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x86,0x86,0x86,0x84,0x83,0x82,0x82,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x80,0x7d,0x7b,0x78,0x76,0x75,0x76,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x81,0x82,0x81,0x81,0x80,0x80,0x81,0x82,0x84,0x85,0x87,0x87,0x87,0x86,0x84,0x81,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7c,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7b,0x79,0x79,0x79,0x7b,0x7d,0x80,0x82,0x85,0x86,0x87,0x86,0x85,0x84,0x82,0x81,0x81,0x81,0x81,0x82,0x82,0x83,0x82,0x81,0x7f,0x7d,0x7a,0x78,0x76,0x75,0x76,0x77,0x7a,0x7c,0x7f,0x81,0x83,0x83,0x83,0x83,0x82,0x81,0x81,0x82,0x83,0x84,0x86,0x87,0x87,0x86,0x85,0x82,0x80,0x7d,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7e,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x84,0x83,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7c,0x7b,0x7b,0x7c,0x7e,0x7f,0x80,0x81,0x81,0x81,0x7f,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7e,0x81,0x83,0x85,0x86,0x87,0x86,0x85,0x83,0x81,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7c,0x79,0x77,0x76,0x76,0x77,0x78,0x7b,0x7e,0x80,0x82,0x84,0x84,0x84,0x83,0x82,0x82,0x82,0x82,0x83,0x84,0x86,0x86,0x86,0x85,0x83,0x81,0x7e,0x7b,0x79,0x77,0x77,0x77,0x79,0x7b,0x7d,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x80,0x81,0x83,0x85,0x86,0x86,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7d,0x7e,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x7b,0x7c,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7c,0x79,0x77,0x76,0x76,0x77,0x79,0x7c,0x7f,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x82,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x82,0x7f,0x7c,0x7a,0x77,0x76,0x76,0x77,0x79,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x81,0x82,0x84,0x86,0x87,0x87,0x86,0x84,0x81,0x7f,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7c,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x83,0x83,0x82,0x80,0x7f,0x7d,0x7b,0x7b,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x85,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7c,0x79,0x78,0x77,0x77,0x78,0x7b,0x7d,0x80,0x83,0x85,0x86,0x86,0x85,0x84,0x82,0x81,0x81,0x81,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x7e,0x7b,0x78,0x76,0x75,0x76,0x77,0x79,0x7b,0x7e,0x80,0x81,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x82,0x83,0x85,0x86,0x87,0x87,0x85,0x83,0x80,0x7d,0x7b,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7b,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x78,0x78,0x7a,0x7c,0x7f,0x81,0x84,0x85,0x86,0x86,0x85,0x83,0x82,0x81,0x81,0x81,0x82,0x83,0x83,0x84,0x83,0x82,0x80,0x7d,0x7a,0x78,0x76,0x75,0x76,0x77,0x7a,0x7c,0x7f,0x81,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x81,0x82,0x84,0x85,0x86,0x87,0x86,0x84,0x82,0x7f,0x7c,0x7a,0x78,0x78,0x78,0x7a,0x7c,0x7e,0x7f,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x82,0x83,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x79,0x7a,0x7d,0x7f,0x82,0x84,0x86,0x86,0x85,0x84,0x83,0x81,0x80,0x80,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x7f,0x7c,0x79,0x77,0x76,0x75,0x76,0x78,0x7b,0x7d,0x80,0x82,0x83,0x84,0x83,0x83,0x82,0x81,0x81,0x82,0x83,0x84,0x85,0x86,0x86,0x85,0x83,0x81,0x7e,0x7b,0x79,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x83,0x81,0x7e,0x7c,0x7b,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x79,0x7a,0x7b,0x7d,0x80,0x83,0x85,0x86,0x86,0x85,0x84,0x82,0x81,0x80,0x80,0x80,0x81,0x82,0x82,0x83,0x82,0x81,0x7e,0x7c,0x7a,0x78,0x76,0x76,0x77,0x79,0x7c,0x7f,0x81,0x83,0x84,0x85,0x84,0x83,0x82,0x81,0x81,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x82,0x7f,0x7c,0x7a,0x78,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x81,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x80,0x7e,0x7b,0x7a,0x7a,0x7a,0x7c,0x7e,0x80,0x81,0x83,0x83,0x82,0x81,0x80,0x7e,0x7e,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x7a,0x7c,0x7e,0x80,0x83,0x85,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7c,0x79,0x78,0x77,0x77,0x78,0x7a,0x7d,0x80,0x83,0x84,0x85,0x85,0x85,0x84,0x82,0x82,0x81,0x82,0x83,0x84,0x84,0x85,0x84,0x83,0x81,0x7e,0x7c,0x79,0x77,0x76,0x77,0x78,0x7a,0x7d,0x7f,0x81,0x82,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x81,0x83,0x84,0x85,0x86,0x85,0x84,0x82,0x7f,0x7d,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x7a,0x7c,0x7e,0x80,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7b,0x79,0x78,0x77,0x78,0x79,0x7b,0x7e,0x81,0x83,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7d,0x7a,0x78,0x77,0x76,0x77,0x78,0x7b,0x7d,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x85,0x83,0x81,0x7e,0x7c,0x7a,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7b,0x79,0x78,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x84,0x85,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7c,0x7a,0x78,0x76,0x76,0x77,0x79,0x7b,0x7e,0x81,0x82,0x83,0x84,0x83,0x82,0x82,0x81,0x81,0x81,0x82,0x83,0x84,0x85,0x85,0x84,0x82,0x7f,0x7d,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x83,0x82,0x81,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7a,0x7d,0x7f,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x81,0x80,0x81,0x81,0x82,0x83,0x82,0x82,0x80,0x7e,0x7c,0x79,0x77,0x76,0x76,0x78,0x79,0x7c,0x7f,0x81,0x83,0x84,0x84,0x83,0x83,0x82,0x81,0x81,0x81,0x82,0x83,0x84,0x84,0x84,0x82,0x81,0x7e,0x7c,0x79,0x78,0x77,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x81,0x82,0x83,0x83,0x84,0x83,0x82,0x80,0x7e,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x82,0x83,0x84,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x77,0x77,0x78,0x7a,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x77,0x77,0x78,0x79,0x7b,0x7d,0x80,0x81,0x82,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x79,0x7a,0x7b,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7d,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x77,0x77,0x77,0x79,0x7b,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x81,0x81,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x84,0x84,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x78,0x78,0x79,0x7a,0x7d,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x84,0x84,0x84,0x83,0x82,0x82,0x81,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7a,0x7c,0x7f,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x83,0x82,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x78,0x79,0x7b,0x7d,0x80,0x81,0x83,0x84,0x84,0x83,0x83,0x82,0x82,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x80,0x7f,0x7d,0x7b,0x79,0x79,0x79,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x84,0x83,0x83,0x82,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7f,0x81,0x82,0x84,0x84,0x84,0x84,0x83,0x82,0x82,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7b,0x79,0x78,0x78,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x83,0x84,0x84,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x7e,0x7c,0x7b,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x83,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x79,0x79,0x7b,0x7d,0x7f,0x80,0x82,0x83,0x83,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x84,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x81,0x81,0x7f,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x78,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x84,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x7f,0x7e,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x84,0x84,0x85,0x84,0x84,0x84,0x83,0x83,0x83,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7b,0x79,0x78,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x79,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x83,0x82,0x80,0x7f,0x7d,0x7c,0x7a,0x7a,0x79,0x7a,0x7b,0x7c,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x7e,0x7d,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x84,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x7f,0x7e,0x7c,0x7b,0x79,0x78,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x84,0x84,0x85,0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x83,0x83,0x81,0x80,0x7e,0x7c,0x7b,0x79,0x78,0x78,0x78,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x83,0x83,0x83,0x83,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7b,0x7a,0x7a,0x7a,0x7a,0x7c,0x7d,0x7f,0x80,0x82,0x82,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x84,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x81,0x7f,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7a,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7b,0x79,0x78,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x84,0x84,0x83,0x83,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x77,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x84,0x84,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x79,0x79,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x77,0x78,0x79,0x7b,0x7d,0x80,0x81,0x83,0x84,0x84,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7c,0x7e,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7e,0x80,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x86,0x85,0x85,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x76,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x85,0x85,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x78,0x79,0x7b,0x7d,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7e,0x80,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x7b,0x7c,0x7f,0x81,0x83,0x84,0x85,0x86,0x85,0x85,0x84,0x84,0x83,0x83,0x83,0x83,0x82,0x82,0x80,0x7f,0x7d,0x7b,0x79,0x77,0x76,0x76,0x77,0x79,0x7b,0x7d,0x80,0x82,0x84,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x82,0x80,0x7e,0x7b,0x79,0x77,0x76,0x76,0x77,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x84,0x84,0x85,0x85,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x82,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7c,0x7a,0x78,0x77,0x76,0x76,0x78,0x7a,0x7c,0x7f,0x82,0x84,0x85,0x86,0x86,0x86,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x78,0x76,0x76,0x76,0x77,0x79,0x7c,0x7e,0x80,0x82,0x83,0x83,0x83,0x83,0x83,0x83,0x84,0x84,0x85,0x85,0x86,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x82,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7c,0x7a,0x7a,0x7a,0x7b,0x7c,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x7f,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x77,0x79,0x7b,0x7e,0x81,0x83,0x85,0x86,0x87,0x87,0x86,0x86,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x82,0x80,0x7e,0x7b,0x79,0x77,0x76,0x75,0x76,0x78,0x7a,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x86,0x86,0x86,0x85,0x84,0x82,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x83,0x83,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x77,0x78,0x7a,0x7d,0x7f,0x82,0x85,0x86,0x87,0x87,0x87,0x86,0x85,0x85,0x84,0x84,0x84,0x84,0x83,0x83,0x81,0x7f,0x7c,0x7a,0x77,0x76,0x75,0x75,0x76,0x78,0x7b,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x84,0x84,0x85,0x85,0x86,0x86,0x86,0x85,0x83,0x81,0x7e,0x7b,0x79,0x78,0x77,0x77,0x78,0x7a,0x7c,0x7f,0x80,0x82,0x82,0x82,0x82,0x81,0x81,0x81,0x81,0x82,0x82,0x83,0x84,0x84,0x83,0x81,0x80,0x7d,0x7c,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x78,0x79,0x7b,0x7e,0x81,0x84,0x86,0x87,0x88,0x87,0x86,0x85,0x84,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7b,0x79,0x76,0x75,0x74,0x75,0x77,0x79,0x7c,0x7f,0x82,0x84,0x85,0x86,0x86,0x85,0x85,0x85,0x85,0x85,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7d,0x7a,0x78,0x76,0x76,0x76,0x78,0x7a,0x7d,0x7f,0x81,0x82,0x83,0x83,0x82,0x82,0x81,0x81,0x82,0x82,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7d,0x7b,0x7a,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x7a,0x78,0x78,0x79,0x7a,0x7c,0x7f,0x82,0x85,0x87,0x88,0x88,0x87,0x86,0x85,0x83,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x76,0x75,0x74,0x75,0x78,0x7a,0x7e,0x81,0x83,0x85,0x87,0x87,0x87,0x86,0x85,0x85,0x85,0x85,0x85,0x85,0x85,0x84,0x83,0x81,0x7e,0x7b,0x79,0x76,0x75,0x75,0x76,0x78,0x7a,0x7d,0x7f,0x81,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x79,0x79,0x7a,0x7c,0x7f,0x81,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7b,0x7a,0x79,0x78,0x79,0x7b,0x7d,0x80,0x83,0x85,0x87,0x88,0x87,0x86,0x85,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7b,0x79,0x77,0x75,0x74,0x75,0x76,0x78,0x7c,0x7f,0x82,0x85,0x87,0x87,0x88,0x87,0x86,0x85,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x81,0x7f,0x7c,0x7a,0x77,0x75,0x74,0x74,0x75,0x78,0x7b,0x7d,0x80,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x82,0x83,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x7e,0x7c,0x7a,0x78,0x78,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x7f,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x87,0x87,0x87,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x79,0x77,0x76,0x75,0x76,0x77,0x7a,0x7d,0x81,0x84,0x86,0x88,0x88,0x88,0x87,0x86,0x85,0x84,0x83,0x83,0x83,0x83,0x83,0x82,0x80,0x7e,0x7b,0x78,0x76,0x74,0x73,0x74,0x76,0x78,0x7b,0x7e,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x83,0x83,0x83,0x84,0x85,0x85,0x85,0x84,0x82,0x80,0x7d,0x7b,0x78,0x77,0x77,0x78,0x79,0x7c,0x7e,0x80,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x79,0x7a,0x7c,0x7f,0x81,0x84,0x86,0x87,0x87,0x86,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x79,0x77,0x76,0x76,0x77,0x79,0x7c,0x7f,0x83,0x86,0x88,0x89,0x89,0x89,0x87,0x86,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x81,0x7f,0x7d,0x7a,0x77,0x75,0x74,0x74,0x75,0x77,0x7a,0x7d,0x80,0x83,0x85,0x86,0x86,0x86,0x85,0x84,0x84,0x84,0x84,0x84,0x85,0x85,0x85,0x84,0x82,0x7f,0x7d,0x7a,0x78,0x77,0x76,0x77,0x79,0x7c,0x7e,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7c,0x7f,0x81,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7d,0x7c,0x7a,0x78,0x77,0x77,0x78,0x7b,0x7d,0x81,0x84,0x87,0x89,0x8a,0x8a,0x89,0x87,0x85,0x83,0x82,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7b,0x79,0x77,0x75,0x74,0x74,0x75,0x78,0x7b,0x7f,0x82,0x85,0x87,0x88,0x88,0x87,0x86,0x85,0x84,0x84,0x84,0x84,0x85,0x85,0x84,0x83,0x80,0x7e,0x7b,0x78,0x76,0x75,0x76,0x77,0x79,0x7c,0x7f,0x81,0x83,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x81,0x82,0x83,0x83,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7b,0x7a,0x7a,0x7b,0x7c,0x7f,0x81,0x84,0x85,0x86,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x7a,0x7c,0x7f,0x82,0x85,0x88,0x89,0x8a,0x89,0x88,0x86,0x84,0x82,0x81,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x78,0x76,0x75,0x74,0x75,0x76,0x79,0x7d,0x80,0x84,0x86,0x88,0x89,0x88,0x88,0x86,0x85,0x84,0x84,0x84,0x84,0x84,0x84,0x83,0x81,0x7f,0x7c,0x79,0x77,0x75,0x74,0x75,0x76,0x79,0x7c,0x7f,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x7e,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x79,0x79,0x7b,0x7d,0x80,0x83,0x86,0x88,0x89,0x89,0x88,0x87,0x84,0x82,0x81,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7a,0x78,0x76,0x75,0x75,0x76,0x78,0x7b,0x7e,0x82,0x85,0x88,0x89,0x8a,0x89,0x88,0x86,0x85,0x84,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7d,0x7b,0x78,0x76,0x74,0x74,0x75,0x77,0x7a,0x7d,0x80,0x83,0x84,0x85,0x85,0x85,0x83,0x83,0x82,0x82,0x82,0x83,0x84,0x84,0x84,0x84,0x82,0x80,0x7e,0x7b,0x79,0x78,0x78,0x7a,0x7b,0x7e,0x80,0x82,0x84,0x84,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7e,0x80,0x83,0x86,0x88,0x89,0x88,0x87,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7d,0x7d,0x7b,0x7a,0x78,0x77,0x76,0x76,0x77,0x7a,0x7d,0x80,0x84,0x87,0x89,0x8a,0x8a,0x89,0x88,0x86,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x80,0x7e,0x7c,0x79,0x77,0x75,0x74,0x74,0x75,0x77,0x7b,0x7e,0x81,0x84,0x86,0x86,0x86,0x86,0x84,0x83,0x83,0x82,0x83,0x83,0x84,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7a,0x78,0x77,0x78,0x79,0x7b,0x7d,0x80,0x82,0x83,0x84,0x84,0x83,0x81,0x80,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x7b,0x7c,0x7e,0x81,0x83,0x86,0x87,0x88,0x87,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7a,0x79,0x77,0x77,0x77,0x79,0x7b,0x7e,0x82,0x85,0x88,0x8a,0x8b,0x8a,0x89,0x87,0x85,0x83,0x82,0x81,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x76,0x75,0x74,0x74,0x76,0x79,0x7c,0x7f,0x83,0x85,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x80,0x7e,0x7b,0x79,0x77,0x76,0x77,0x78,0x7a,0x7d,0x80,0x82,0x83,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x7b,0x7c,0x7e,0x80,0x83,0x85,0x86,0x86,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x79,0x7a,0x7d,0x80,0x83,0x86,0x89,0x8a,0x8a,0x89,0x88,0x86,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7b,0x79,0x77,0x76,0x75,0x74,0x75,0x77,0x7a,0x7d,0x81,0x84,0x87,0x88,0x88,0x88,0x87,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x76,0x76,0x76,0x78,0x7a,0x7d,0x80,0x82,0x83,0x84,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x85,0x83,0x81,0x7f,0x7e,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7c,0x7e,0x81,0x84,0x87,0x89,0x8a,0x8a,0x89,0x87,0x85,0x82,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7c,0x7b,0x79,0x77,0x76,0x75,0x76,0x77,0x79,0x7c,0x80,0x83,0x86,0x88,0x89,0x89,0x89,0x87,0x86,0x84,0x83,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7b,0x79,0x77,0x76,0x76,0x77,0x79,0x7b,0x7e,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x80,0x82,0x85,0x87,0x89,0x8a,0x89,0x88,0x86,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x77,0x76,0x77,0x79,0x7b,0x7e,0x81,0x85,0x87,0x89,0x8a,0x8a,0x89,0x87,0x86,0x84,0x82,0x81,0x81,0x81,0x80,0x80,0x7f,0x7d,0x7b,0x79,0x77,0x76,0x75,0x76,0x77,0x79,0x7c,0x7f,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x82,0x82,0x81,0x81,0x82,0x82,0x83,0x82,0x82,0x80,0x7f,0x7d,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x83,0x85,0x87,0x88,0x89,0x88,0x86,0x84,0x82,0x7f,0x7e,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x78,0x78,0x7a,0x7d,0x80,0x83,0x86,0x89,0x8a,0x8b,0x8a,0x89,0x87,0x85,0x83,0x82,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7a,0x78,0x77,0x76,0x75,0x76,0x78,0x7a,0x7d,0x80,0x83,0x85,0x86,0x87,0x86,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7c,0x7a,0x79,0x79,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x83,0x85,0x86,0x87,0x87,0x86,0x84,0x82,0x80,0x7e,0x7c,0x7c,0x7b,0x7b,0x7b,0x7c,0x7c,0x7b,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x81,0x84,0x87,0x89,0x8a,0x8a,0x89,0x88,0x86,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x79,0x78,0x76,0x76,0x76,0x77,0x79,0x7c,0x7f,0x82,0x84,0x86,0x87,0x87,0x87,0x86,0x85,0x83,0x82,0x82,0x82,0x82,0x81,0x81,0x81,0x7f,0x7e,0x7c,0x7a,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,0x7c,0x7e,0x80,0x83,0x85,0x88,0x89,0x8a,0x89,0x88,0x86,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x79,0x78,0x77,0x76,0x76,0x77,0x78,0x7a,0x7d,0x80,0x83,0x85,0x87,0x88,0x88,0x87,0x86,0x85,0x83,0x82,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7c,0x7b,0x79,0x78,0x77,0x78,0x79,0x7a,0x7d,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7d,0x7e,0x81,0x83,0x86,0x87,0x89,0x89,0x88,0x87,0x85,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7a,0x7a,0x79,0x78,0x77,0x77,0x77,0x78,0x7a,0x7c,0x7f,0x82,0x84,0x87,0x88,0x88,0x88,0x87,0x86,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7c,0x7b,0x79,0x78,0x77,0x77,0x78,0x79,0x7b,0x7d,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7c,0x7c,0x7b,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x86,0x87,0x88,0x88,0x87,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7a,0x7a,0x7a,0x79,0x78,0x78,0x78,0x78,0x7a,0x7c,0x7e,0x81,0x83,0x86,0x88,0x89,0x89,0x88,0x87,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x78,0x77,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x86,0x87,0x87,0x87,0x86,0x84,0x82,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7a,0x7a,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x83,0x85,0x87,0x88,0x89,0x89,0x88,0x86,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x78,0x78,0x7a,0x7b,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x80,0x81,0x83,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x89,0x89,0x88,0x87,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x82,0x84,0x85,0x86,0x86,0x86,0x85,0x84,0x83,0x83,0x82,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x87,0x88,0x88,0x88,0x87,0x86,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x79,0x78,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x86,0x87,0x87,0x86,0x85,0x84,0x83,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7f,0x80,0x82,0x84,0x86,0x87,0x87,0x87,0x87,0x86,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7a,0x79,0x79,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x86,0x87,0x87,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x85,0x86,0x87,0x86,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7a,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x86,0x87,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x79,0x79,0x7a,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x83,0x84,0x85,0x86,0x85,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7b,0x7a,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x86,0x86,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x78,0x79,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7b,0x7b,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x87,0x87,0x86,0x85,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x78,0x78,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x84,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x85,0x86,0x87,0x87,0x86,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7c,0x7d,0x80,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x80,0x80,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x83,0x84,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x84,0x85,0x86,0x86,0x86,0x85,0x84,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x86,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7e,0x80,0x81,0x82,0x83,0x82,0x82,0x81,0x81,0x80,0x80,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x85,0x85,0x86,0x85,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x85,0x85,0x85,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x86,0x87,0x86,0x86,0x85,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x7d,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x86,0x87,0x86,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x81,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x82,0x84,0x85,0x86,0x87,0x86,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x83,0x81,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x86,0x86,0x86,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7c,0x7d,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7c,0x7d,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7c,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x7b,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x86,0x86,0x86,0x85,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x84,0x84,0x84,0x82,0x81,0x80,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x85,0x84,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x7b,0x7a,0x7b,0x7c,0x7e,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7c,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x81,0x83,0x84,0x85,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7c,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x83,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7d,0x7f,0x81,0x84,0x85,0x86,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7c,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x82,0x84,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x84,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x80,0x82,0x84,0x85,0x86,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x81,0x83,0x84,0x85,0x85,0x85,0x83,0x81,0x80,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x81,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7c,0x7d,0x7e,0x80,0x83,0x84,0x85,0x85,0x85,0x83,0x82,0x80,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7e,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x81,0x81,0x7f,0x7e,0x7d,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x83,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x85,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7c,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x83,0x82,0x81,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7f,0x80,0x82,0x84,0x84,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x84,0x85,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7d,0x7d,0x7f,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7c,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x85,0x85,0x84,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x82,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x84,0x85,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7a,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x84,0x83,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x80,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7a,0x7a,0x79,0x79,0x7a,0x7b,0x7c,0x7d,0x7f,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7a,0x7b,0x7b,0x7d,0x7e,0x80,0x81,0x83,0x83,0x84,0x84,0x83,0x82,0x82,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x78,0x79,0x79,0x7b,0x7c,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x81,0x82,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7b,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7a,0x79,0x79,0x78,0x79,0x7a,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7a,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x79,0x79,0x79,0x7a,0x7b,0x7c,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x78,0x79,0x7b,0x7c,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x81,0x81,0x82,0x83,0x83,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x80,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x84,0x83,0x83,0x82,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x79,0x79,0x79,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x82,0x81,0x81,0x81,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7a,0x78,0x77,0x77,0x78,0x79,0x7b,0x7d,0x7f,0x80,0x81,0x82,0x82,0x81,0x81,0x81,0x81,0x81,0x82,0x83,0x83,0x84,0x83,0x83,0x81,0x7f,0x7e,0x7c,0x7a,0x7a,0x7a,0x7a,0x7b,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7b,0x79,0x78,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x84,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x77,0x79,0x7a,0x7d,0x7f,0x81,0x83,0x84,0x84,0x83,0x83,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x83,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x81,0x80,0x7e,0x7d,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x7a,0x7a,0x7c,0x7d,0x7f,0x82,0x83,0x85,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x7a,0x78,0x77,0x77,0x78,0x79,0x7c,0x7e,0x80,0x82,0x84,0x85,0x84,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x82,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x81,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x82,0x81,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x7a,0x78,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x82,0x84,0x85,0x86,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7b,0x79,0x78,0x77,0x77,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x80,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x81,0x81,0x7f,0x7e,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x7a,0x79,0x78,0x79,0x7a,0x7c,0x7e,0x81,0x83,0x85,0x86,0x86,0x86,0x85,0x83,0x82,0x81,0x81,0x81,0x81,0x82,0x82,0x81,0x80,0x7f,0x7c,0x7a,0x78,0x77,0x77,0x77,0x78,0x7a,0x7d,0x7f,0x81,0x83,0x84,0x84,0x83,0x82,0x82,0x81,0x81,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7c,0x7b,0x79,0x79,0x7a,0x7b,0x7d,0x7e,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7a,0x79,0x79,0x79,0x7b,0x7d,0x7f,0x82,0x84,0x86,0x87,0x87,0x86,0x85,0x83,0x82,0x81,0x80,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x77,0x79,0x7b,0x7e,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x82,0x81,0x82,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7e,0x7b,0x7a,0x79,0x78,0x79,0x7b,0x7c,0x7f,0x80,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7e,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7c,0x7e,0x80,0x83,0x85,0x86,0x87,0x87,0x86,0x84,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7b,0x79,0x78,0x77,0x77,0x78,0x7a,0x7c,0x7f,0x82,0x84,0x85,0x86,0x85,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x81,0x80,0x7e,0x7c,0x7b,0x7b,0x7b,0x7d,0x7e,0x80,0x82,0x84,0x84,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7d,0x7f,0x81,0x84,0x86,0x87,0x87,0x86,0x85,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x79,0x78,0x78,0x78,0x79,0x7b,0x7e,0x81,0x83,0x85,0x86,0x87,0x86,0x85,0x84,0x83,0x82,0x82,0x82,0x82,0x82,0x83,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x78,0x77,0x78,0x79,0x7b,0x7d,0x80,0x82,0x83,0x84,0x83,0x83,0x82,0x81,0x80,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x82,0x84,0x86,0x86,0x86,0x86,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7c,0x7b,0x79,0x78,0x78,0x78,0x7a,0x7c,0x7f,0x82,0x84,0x86,0x87,0x87,0x86,0x85,0x84,0x82,0x81,0x81,0x81,0x81,0x82,0x82,0x81,0x80,0x7e,0x7c,0x7a,0x79,0x77,0x77,0x78,0x79,0x7b,0x7e,0x80,0x82,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7e,0x7c,0x7b,0x7a,0x7a,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x79,0x79,0x7b,0x7d,0x80,0x83,0x85,0x87,0x87,0x87,0x86,0x85,0x83,0x82,0x81,0x80,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7a,0x78,0x77,0x77,0x78,0x7a,0x7c,0x7f,0x81,0x83,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7c,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7a,0x7a,0x7a,0x7b,0x7c,0x7f,0x81,0x84,0x86,0x87,0x88,0x87,0x86,0x85,0x83,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7b,0x79,0x78,0x78,0x78,0x79,0x7b,0x7d,0x80,0x83,0x85,0x86,0x86,0x86,0x85,0x84,0x82,0x82,0x81,0x81,0x82,0x82,0x83,0x82,0x82,0x80,0x7f,0x7d,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x83,0x84,0x83,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7c,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7d,0x80,0x82,0x85,0x86,0x87,0x88,0x87,0x86,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7c,0x7b,0x79,0x78,0x78,0x78,0x7a,0x7c,0x7f,0x81,0x84,0x85,0x86,0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x82,0x82,0x81,0x81,0x7f,0x7d,0x7c,0x7a,0x79,0x79,0x79,0x7a,0x7c,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x83,0x85,0x86,0x87,0x87,0x86,0x85,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x79,0x79,0x78,0x79,0x7b,0x7d,0x80,0x82,0x85,0x86,0x87,0x87,0x86,0x85,0x84,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x79,0x78,0x78,0x79,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x81,0x81,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x86,0x87,0x87,0x86,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7c,0x7e,0x81,0x84,0x86,0x87,0x88,0x87,0x86,0x85,0x84,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x7f,0x7d,0x7c,0x7a,0x79,0x78,0x79,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x86,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7c,0x7d,0x80,0x82,0x84,0x86,0x87,0x88,0x87,0x86,0x85,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7c,0x7b,0x7a,0x79,0x78,0x79,0x7a,0x7c,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x81,0x83,0x85,0x86,0x87,0x87,0x87,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x79,0x79,0x7a,0x7b,0x7d,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x83,0x82,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x84,0x85,0x87,0x87,0x87,0x86,0x85,0x83,0x82,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x79,0x7a,0x7b,0x7c,0x7e,0x81,0x83,0x85,0x86,0x87,0x86,0x86,0x85,0x83,0x82,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x84,0x84,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x84,0x86,0x87,0x87,0x87,0x86,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x87,0x87,0x87,0x86,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x85,0x86,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7a,0x7b,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x86,0x87,0x87,0x86,0x85,0x84,0x83,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x87,0x86,0x86,0x85,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7c,0x7c,0x7c,0x7b,0x7c,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x86,0x86,0x87,0x86,0x85,0x84,0x83,0x82,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7a,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x84,0x85,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7b,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x85,0x86,0x86,0x86,0x86,0x85,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x85,0x86,0x86,0x85,0x84,0x83,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7c,0x7c,0x7d,0x7f,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x85,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x85,0x86,0x86,0x86,0x85,0x84,0x83,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x85,0x85,0x86,0x85,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7c,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7f,0x80,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x85,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7a,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x83,0x82,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x84,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7b,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x83,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x81,0x83,0x83,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x81,0x83,0x83,0x84,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x84,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7a,0x7b,0x7d,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x86,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x84,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x85,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x86,0x85,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x86,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x85,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7e,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x86,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x86,0x86,0x86,0x85,0x84,0x82,0x81,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x85,0x85,0x85,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x86,0x86,0x86,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7b,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7c,0x7b,0x7b,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x85,0x85,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7a,0x7b,0x7c,0x7d,0x7f,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7c,0x7c,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x83,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x85,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7b,0x7d,0x7e,0x81,0x83,0x85,0x86,0x86,0x86,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x7f,0x7e,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x86,0x84,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7a,0x7b,0x7b,0x7d,0x7f,0x81,0x83,0x85,0x86,0x85,0x85,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x84,0x85,0x84,0x82,0x81,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x83,0x82,0x7f,0x7e,0x7c,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7a,0x7b,0x7c,0x7d,0x80,0x82,0x84,0x85,0x86,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x85,0x86,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7d,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x82,0x80,0x7e,0x7d,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x86,0x86,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7c,0x7b,0x7c,0x7c,0x7e,0x7e,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x83,0x85,0x85,0x86,0x85,0x84,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x85,0x85,0x85,0x85,0x83,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x86,0x86,0x86,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x84,0x85,0x85,0x84,0x82,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x80,0x81,0x83,0x85,0x86,0x86,0x86,0x85,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x86,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x83,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x85,0x85,0x85,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7c,0x7b,0x7b,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7d,0x7d,0x7d,0x7c,0x7d,0x7d,0x7f,0x80,0x82,0x84,0x85,0x86,0x85,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x84,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x80,0x81,0x83,0x84,0x85,0x86,0x85,0x84,0x83,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x85,0x85,0x85,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x85,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x84,0x84,0x85,0x84,0x84,0x83,0x82,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x83,0x84,0x85,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x84,0x84,0x83,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x83,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x81,0x81,0x81,0x82,0x83,0x83,0x84,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x84,0x84,0x83,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x82,0x83,0x83,0x82,0x81,0x81,0x80,0x80,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x83,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x81,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x83,0x82,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x84,0x84,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7b,0x7b,0x7d,0x7e,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x82,0x81,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x83,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x83,0x82,0x82,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x81,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7e,0x7e,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x80,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7f,0x81,0x82,0x84,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x82,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x80,0x7f,0x7d,0x7d,0x7c,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x84,0x84,0x84,0x82,0x81,0x80,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x80,0x7e,0x7d,0x7d,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7a,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x82,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x7f,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x80,0x7f,0x7e,0x7d,0x7b,0x7b,0x7a,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7d,0x7c,0x7b,0x7a,0x7a,0x7b,0x7c,0x7e,0x80,0x81,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7d,0x7e,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x80,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7c,0x7c,0x7b,0x7b,0x7b,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7f,0x80,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x83,0x84,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x83,0x84,0x84,0x83,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x84,0x83,0x83,0x82,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x82,0x83,0x82,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x83,0x84,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x84,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7c,0x7c,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x80,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x81,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x85,0x84,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x84,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x81,0x83,0x84,0x85,0x85,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x84,0x85,0x86,0x85,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7b,0x7d,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x84,0x82,0x81,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7c,0x7c,0x7d,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x83,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x86,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x85,0x84,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x83,0x81,0x80,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x85,0x85,0x85,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7d,0x7e,0x80,0x82,0x83,0x84,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x84,0x85,0x86,0x85,0x85,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x85,0x86,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x85,0x86,0x86,0x86,0x85,0x83,0x81,0x80,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0x7f,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x85,0x85,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7f,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x86,0x86,0x86,0x85,0x84,0x82,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x81,0x83,0x84,0x86,0x86,0x86,0x85,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x84,0x84,0x84,0x82,0x81,0x80,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x80,0x81,0x83,0x84,0x85,0x86,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x83,0x85,0x86,0x86,0x85,0x84,0x83,0x81,0x80,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7b,0x7b,0x7c,0x7d,0x7f,0x81,0x82,0x84,0x84,0x84,0x84,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x85,0x83,0x82,0x80,0x7e,0x7d,0x7c,0x7b,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x82,0x84,0x85,0x86,0x86,0x85,0x84,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7e,0x7f,0x81,0x83,0x84,0x85,0x84,0x84,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x83,0x83,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x84,0x84,0x84,0x84,0x82,0x81,0x7f,0x7d,0x7c,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7d,0x7d,0x7d,0x7c,0x7d,0x7d,0x7f,0x80,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7b,0x7b,0x7c,0x7c,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x85,0x85,0x85,0x84,0x82,0x81,0x7f,0x7d,0x7c,0x7c,0x7b,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7c,0x7b,0x7b,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7c,0x7c,0x7b,0x7b,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x7f,0x7e,0x7c,0x7c,0x7b,0x7b,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x84,0x85,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7d,0x7c,0x7c,0x7b,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x85,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7b,0x7b,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7b,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x84,0x84,0x83,0x81,0x80,0x7f,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x84,0x84,0x84,0x83,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x83,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x85,0x84,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x85,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7d,0x7d,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x82,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x83,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x83,0x84,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x82,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x83,0x83,0x83,0x82,0x80,0x7f,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x82,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x81,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x82,0x82,0x83,0x83,0x82,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x81,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x81,0x82,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x81,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7b,0x7c,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7b,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7f,0x80,0x81,0x83,0x83,0x84,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7c,0x7d,0x7f,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x83,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x82,0x83,0x84,0x85,0x84,0x84,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x80,0x81,0x83,0x83,0x84,0x83,0x83,0x81,0x80,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x85,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x80,0x81,0x82,0x84,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x80,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7f,0x80,0x81,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x85,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x81,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x81,0x82,0x83,0x84,0x85,0x85,0x84,0x83,0x82,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x85,0x85,0x84,0x83,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x84,0x84,0x84,0x83,0x82,0x81,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x84,0x84,0x83,0x83,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x83,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x84,0x84,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x81,0x82,0x83,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x7f,0x81,0x81,0x82,0x83,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7e,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x82,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x82,0x82,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7d,0x7c,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x83,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x83,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x83,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x83,0x82,0x82,0x81,0x80,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7c,0x7c,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7c,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7c,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7d,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7d,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x82,0x82,0x82,0x82,0x82,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7d,0x7d,0x7e,0x7e,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x81,0x81,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7d,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x82,0x82,0x82,0x82,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x80,0x80,0x81,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x82,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x82,0x81,0x81,0x81,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7e,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x81,0x81,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f,0x7f,0x7f}; /* End Of File */ springlobby-0.169/src/spring.cpp0000600000176000000410000004706412105760300020227 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: Spring // #ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include #include #include #include #include #include #include #include #include #include #include "spring.h" #include "springprocess.h" #include "ui.h" #include "mainwindow.h" #include "utils/customdialogs.h" #include "utils/debug.h" #include "utils/conversion.h" #include "settings.h" #include "userlist.h" #include "battle.h" #include "singleplayerbattle.h" #include "qt/noguisingleplayerbattle.h" #include "offlinebattle.h" #include "user.h" #include "springunitsync.h" #include "nonportable.h" #include "tdfcontainer.h" #include "globalsmanager.h" #ifdef SL_QT_MODE #include #include #endif BEGIN_EVENT_TABLE( Spring, wxEvtHandler ) EVT_COMMAND ( PROC_SPRING, wxEVT_SPRING_EXIT, Spring::OnTerminated ) END_EVENT_TABLE() #define FIRST_UDP_SOURCEPORT 8300 Spring& spring() { static LineInfo m( AT ); static GlobalObjectHolder > m_spring( m ); return m_spring; } Spring::Spring() : #ifdef SL_QT_MODE qt_process_( 0 ), #endif m_process(0), m_wx_process(0), m_running(false) { } Spring::~Spring() { delete m_process; } bool Spring::IsRunning() const { return m_running; } bool Spring::RunReplay ( const wxString& filename ) { wxLogMessage( _T("launching spring with replay: ") + filename ); return LaunchSpring( _T("\"") + filename + _T("\"") ); } bool Spring::Run( Battle& battle ) { wxString path = sett().GetCurrentUsedDataDir() + wxFileName::GetPathSeparator() + _T("script.txt"); try { if ( !wxFile::Access( path , wxFile::write ) ) { wxLogError( _T("Access denied to script.txt.") ); } wxFile f( path, wxFile::write ); battle.DisableHostStatusInProxyMode( true ); f.Write( WriteScriptTxt(battle) ); battle.DisableHostStatusInProxyMode( false ); f.Close(); } catch ( std::exception& e ) { wxLogError( wxString::Format( _T("Couldn't write script.txt, exception caught:\n %s"), TowxString( e.what() ).c_str() ) ); return false; } catch (...) { wxLogError( _T("Couldn't write script.txt") ); return false; } #if 0 //TODO: BD, isn't this SUPER obsolete wxString CommandForAutomaticTeamSpeak = _T("SCRIPT|") + battle.GetFounder().GetNick() + _T("|"); for ( UserList::user_map_t::size_type i = 0; i < battle.GetNumUsers(); i++ ) { CommandForAutomaticTeamSpeak << TowxString( battle.GetUser(i).BattleStatus().ally) << _T("|") << battle.GetUser(i).GetNick() << _T("|"); } // torrent().SendMessageToCoordinator(CommandForAutomaticTeamSpeak); //this is gone too now, right? #endif wxString cmd; if ( battle.GetAutoHost().GetEnabled() ) { // -m, --minimise Start minimised // -q [T], --quit=[T] Quit immediately on game over or after T seconds cmd = _T("--minimise"); } cmd += _T(" \"") + path + _T("\""); return LaunchSpring( cmd ); } bool Spring::Run( SinglePlayerBattle& battle ) { wxString path = sett().GetCurrentUsedDataDir() + wxFileName::GetPathSeparator() + _T("script.txt"); try { if ( !wxFile::Access( path, wxFile::write ) ) { wxLogError( _T("Access denied to script.txt.") ); } wxFile f( path, wxFile::write ); f.Write( WriteScriptTxt(battle) ); f.Close(); } catch ( std::exception& e ) { wxLogError( wxString::Format( _T("Couldn't write script.txt, exception caught:\n %s"), TowxString( e.what() ).c_str() ) ); return false; } catch (...) { wxLogError( _T("Couldn't write script.txt") ); return false; } return LaunchSpring( _T("\"") + path + _T("\"") ); } bool Spring::Run( NoGuiSinglePlayerBattle& battle ) { wxString path = sett().GetCurrentUsedDataDir() + wxFileName::GetPathSeparator() + _T("script.txt"); wxString cmd = _T("\"") + path + _T("\""); try { if ( !wxFile::Access( path, wxFile::write ) ) { wxLogError( _T("Access denied to script.txt.") ); } wxFile f( path, wxFile::write ); f.Write( WriteScriptTxt(battle) ); f.Close(); } catch (...) { wxLogError( _T("Couldn't write script.txt") ); return false; } return LaunchSpring( cmd ); } bool Spring::Run( OfflineBattle& battle ) { wxString path = battle.GetPlayBackFilePath(); return LaunchSpring( _T("\"") + path + _T("\"") ); } bool Spring::LaunchSpring( const wxString& params ) { if ( m_running ) { wxLogError( _T("Spring already running!") ); return false; } if ( !wxFile::Exists( sett().GetCurrentUsedSpringBinary() ) ) { customMessageBoxNoModal( SL_MAIN_ICON, _T("The spring executable was not found at the set location, please re-check."), _T("Executable not found") ); ui().mw().ShowConfigure( MainWindow::OPT_PAGE_SPRING ); return false; } wxString configfileflags = sett().GetCurrentUsedSpringConfigFilePath(); if ( !configfileflags.IsEmpty() ) { configfileflags = _T("--config=\"") + configfileflags + _T("\" "); #ifdef __WXMSW__ if ( usync().GetSpringVersion().Find(_T("0.78.") ) != wxNOT_FOUND ) configfileflags = _T(""); #endif } wxString cmd = _T("\"") + sett().GetCurrentUsedSpringBinary(); #ifdef __WXMAC__ wxChar sep = wxFileName::GetPathSeparator(); if ( sett().GetCurrentUsedSpringBinary().AfterLast(_T('.')) == _T("app") ) cmd += sep + wxString(_T("Contents")) + sep + wxString(_T("MacOS")) + sep + wxString(_T("spring")); // append app bundle inner path #endif cmd += _T("\" ") + configfileflags + params; wxLogMessage( _T("spring call params: %s"), cmd.c_str() ); #ifdef SL_QT_MODE QMessageBox:: warning ( NULL, "CMD", QString(cmd.mb_str())); qt_process_ = new QProcess; qt_process_->setWorkingDirectory(QString(sett().GetCurrentUsedDataDir().mb_str())); qt_process_->start(QString(cmd.mb_str())); connect( qt_process_, SIGNAL(finished(int, QProcess::ExitStatus )), this, SLOT( OnStopped(int, QProcess::ExitStatus ) ) ); connect( qt_process_, SIGNAL(started()), this, SLOT( OnStarted() ) ); #else wxSetWorkingDirectory( sett().GetCurrentUsedDataDir() ); if ( sett().UseOldSpringLaunchMethod() ) { if ( m_wx_process == 0 ) m_wx_process = new wxSpringProcess( *this ); if ( wxExecute( cmd , wxEXEC_ASYNC, m_wx_process ) == 0 ) return false; } else { if ( m_process == 0 ) m_process = new SpringProcess( *this ); m_process->Create(); m_process->SetCommand( cmd ); m_process->Run(); } #endif m_running = true; return true; } #ifdef SL_QT_MODE void Spring::OnStopped( int /*exitCode*/, QProcess::ExitStatus /*exitStatus*/ ) { m_running = false; emit springStopped( ); } void Spring::OnStarted() { m_running = true; emit springStarted(); } #endif void Spring::OnTerminated( wxCommandEvent& event ) { wxLogDebugFunc( _T("") ); m_running = false; m_process = 0; // NOTE I'm not sure if this should be deleted or not, according to wx docs it shouldn't. m_wx_process = 0; ui().OnSpringTerminated( event.GetExtraLong() ); GetGlobalEventSender(GlobalEvents::OnSpringTerminated).SendEvent( event.GetExtraLong() ); } wxString Spring::WriteScriptTxt( IBattle& battle ) const { wxLogMessage(_T("0 WriteScriptTxt called ")); wxString ret; TDFWriter tdf(ret); // Start generating the script. tdf.EnterSection( _T("GAME") ); tdf.Append( _T("HostIP"), battle.GetHostIp() ); if ( battle.IsFounderMe() ) { if ( battle.GetNatType() == NAT_Hole_punching ) tdf.Append( _T("HostPort"), battle.GetMyInternalUdpSourcePort() ); else tdf.Append(_T("HostPort"), battle.GetHostPort() ); } else { tdf.Append( _T("HostPort"), battle.GetHostPort() ); if ( battle.GetNatType() == NAT_Hole_punching ) { tdf.Append( _T("SourcePort"), battle.GetMyInternalUdpSourcePort() ); } else if ( sett().GetClientPort() != 0) { tdf.Append( _T("SourcePort"), sett().GetClientPort() ); /// this allows to play with broken router by setting SourcePort to some forwarded port. } } tdf.Append( _T("IsHost"), battle.IsFounderMe() ); User& me = battle.GetMe(); tdf.Append(_T("MyPlayerName"), me.GetNick() ); if ( !me.BattleStatus().scriptPassword.IsEmpty() ) { tdf.Append( _T("MyPasswd"), me.BattleStatus().scriptPassword ); } if ( !battle.IsFounderMe() ) { tdf.LeaveSection(); return ret; } /********************************************************************************** Host-only section **********************************************************************************/ tdf.AppendLineBreak(); tdf.Append(_T("ModHash"), battle.LoadMod().hash ); tdf.Append(_T("MapHash"), battle.LoadMap().hash ); tdf.Append( _T("Mapname"), battle.GetHostMapName() ); tdf.Append( _T("GameType"), battle.GetHostModName() ); tdf.AppendLineBreak(); switch ( battle.GetBattleType() ) { case BT_Played: break; case BT_Replay: { wxString path = battle.GetPlayBackFilePath(); if ( path.Find(_T("/")) != wxNOT_FOUND ) path.BeforeLast(_T('/')); tdf.Append( _T("DemoFile"), path ); tdf.AppendLineBreak(); break; } case BT_Savegame: { wxString path = battle.GetPlayBackFilePath(); if ( path.Find(_T("/")) != wxNOT_FOUND ) path.BeforeLast(_T('/')); tdf.Append( _T("Savefile"), path ); tdf.AppendLineBreak(); break; } default: wxLogDebugFunc( _T("") ); break; } long startpostype; battle.CustomBattleOptions().getSingleValue( _T("startpostype"), OptionsWrapper::EngineOption ).ToLong( &startpostype ); std::vector remap_positions; if ( battle.IsProxy() && ( startpostype != IBattle::ST_Pick ) && ( startpostype != IBattle::ST_Choose ) ) { std::set parsedteams; unsigned int NumUsers = battle.GetNumUsers(); unsigned int NumTeams = 0; for ( unsigned int i = 0; i < NumUsers; i++ ) { User& usr = battle.GetUser( i ); UserBattleStatus& status = usr.BattleStatus(); if ( status.spectator ) continue; if ( parsedteams.find( status.team ) != parsedteams.end() ) continue; // skip duplicates parsedteams.insert( status.team ); NumTeams++; } MapInfo infos = battle.LoadMap().info; unsigned int nummapstartpositions = infos.positions.size(); unsigned int copysize = std::min( nummapstartpositions, NumTeams ); remap_positions = std::vector ( infos.positions.begin(), infos.positions.begin() + copysize ); // only add the first x positions if ( startpostype == IBattle::ST_Random ) { random_shuffle( remap_positions.begin(), remap_positions.end() ); // shuffle the positions } } if ( battle.IsProxy() ) { if ( ( startpostype == IBattle::ST_Random ) || ( startpostype == IBattle::ST_Fixed ) ) { tdf.Append( _T("startpostype"), IBattle::ST_Pick ); } else tdf.Append( _T("startpostype"), startpostype ); } else tdf.Append( _T("startpostype"), startpostype ); tdf.EnterSection( _T("mapoptions") ); OptionsWrapper::wxStringTripleVec optlistMap = battle.CustomBattleOptions().getOptions( OptionsWrapper::MapOption ); for (OptionsWrapper::wxStringTripleVec::const_iterator it = optlistMap.begin(); it != optlistMap.end(); ++it) { tdf.Append(it->first,it->second.second); } tdf.LeaveSection(); tdf.EnterSection(_T("modoptions")); tdf.Append( _T("relayhoststartpostype"), startpostype ); // also save the original wanted setting OptionsWrapper::wxStringTripleVec optlistMod = battle.CustomBattleOptions().getOptions( OptionsWrapper::ModOption ); for (OptionsWrapper::wxStringTripleVec::const_iterator it = optlistMod.begin(); it != optlistMod.end(); ++it) { tdf.Append(it->first,it->second.second); } tdf.LeaveSection(); std::map units = battle.RestrictedUnits(); tdf.Append( _T("NumRestrictions"), units.size()); tdf.EnterSection( _T("RESTRICT") ); int restrictcount = 0; for ( std::map::const_iterator itor = units.begin(); itor != units.end(); ++itor ) { tdf.Append(_T("Unit") + TowxString( restrictcount ), itor->first ); tdf.Append(_T("Limit") + TowxString( restrictcount ), itor->second ); restrictcount++; } tdf.LeaveSection(); tdf.AppendLineBreak(); if ( battle.IsProxy() ) { tdf.Append( _T("NumPlayers"), battle.GetNumPlayers() -1 ); tdf.Append( _T("NumUsers"), battle.GetNumUsers() -1 ); } else { tdf.Append( _T("NumPlayers"), battle.GetNumPlayers() ); tdf.Append( _T("NumUsers"), battle.GetNumUsers() ); } tdf.AppendLineBreak(); unsigned int NumUsers = battle.GetNumUsers(); typedef std::map ProgressiveTeamsVec; typedef ProgressiveTeamsVec::iterator ProgressiveTeamsVecIter; ProgressiveTeamsVec teams_to_sorted_teams; // original team -> progressive team int free_team = 0; std::map player_to_number; // player -> ordernumber srand ( time(NULL) ); for ( unsigned int i = 0; i < NumUsers; i++ ) { User& user = battle.GetUser( i ); UserBattleStatus& status = user.BattleStatus(); if ( !status.spectator ) { ProgressiveTeamsVecIter itor = teams_to_sorted_teams.find ( status.team ); if ( itor == teams_to_sorted_teams.end() ) { teams_to_sorted_teams[status.team] = free_team; free_team++; } } if ( battle.IsProxy() && ( user.GetNick() == battle.GetFounder().GetNick() ) ) continue; if ( status.IsBot() ) continue; tdf.EnterSection( _T("PLAYER") + TowxString( i ) ); tdf.Append( _T("Name"), user.GetNick() ); tdf.Append( _T("CountryCode"), user.GetCountry().Lower()); tdf.Append( _T("Spectator"), status.spectator ); tdf.Append( _T("Rank"), (int)user.GetRank() ); tdf.Append( _T("IsFromDemo"), int(status.isfromdemo) ); if ( !status.scriptPassword.IsEmpty() ) { tdf.Append( _T("Password"), status.scriptPassword ); } if ( !status.spectator ) { tdf.Append( _T("Team"), teams_to_sorted_teams[status.team] ); } else { int speccteam = 0; if ( teams_to_sorted_teams.size() != 0 ) speccteam = rand() % teams_to_sorted_teams.size(); tdf.Append( _T("Team"), speccteam ); } tdf.LeaveSection(); player_to_number[&user] = i; } if ( usync().VersionSupports( SpringUnitSync::USYNC_GetSkirmishAI ) ) { for ( unsigned int i = 0; i < NumUsers; i++ ) { User& user = battle.GetUser( i ); UserBattleStatus& status = user.BattleStatus(); if ( !status.IsBot() ) continue; tdf.EnterSection( _T("AI") + TowxString( i ) ); tdf.Append( _T("Name"), user.GetNick() ); // AI's nick; tdf.Append( _T("ShortName"), status.aishortname ); // AI libtype tdf.Append( _T("Version"), status.aiversion ); // AI libtype version tdf.Append( _T("Team"), teams_to_sorted_teams[status.team] ); tdf.Append( _T("IsFromDemo"), int(status.isfromdemo) ); tdf.Append( _T("Host"), player_to_number[&battle.GetUser( status.owner )] ); tdf.EnterSection( _T("Options") ); int optionmapindex = battle.CustomBattleOptions().GetAIOptionIndex( user.GetNick() ); if ( optionmapindex > 0 ) { OptionsWrapper::wxStringTripleVec optlistMod_ = battle.CustomBattleOptions().getOptions( (OptionsWrapper::GameOption)optionmapindex ); for (OptionsWrapper::wxStringTripleVec::const_iterator it = optlistMod_.begin(); it != optlistMod_.end(); ++it) { tdf.Append(it->first,it->second.second); } } tdf.LeaveSection(); tdf.LeaveSection(); player_to_number[&user] = i; } } tdf.AppendLineBreak(); std::set parsedteams; wxArrayString sides = usync().GetSides( battle.GetHostModName() ); for ( unsigned int i = 0; i < NumUsers; i++ ) { User& usr = battle.GetUser( i ); UserBattleStatus& status = usr.BattleStatus(); if ( status.spectator ) continue; if ( parsedteams.find( status.team ) != parsedteams.end() ) continue; // skip duplicates parsedteams.insert( status.team ); tdf.EnterSection( _T("TEAM") + TowxString( teams_to_sorted_teams[status.team] ) ); if ( !usync().VersionSupports( SpringUnitSync::USYNC_GetSkirmishAI ) && status.IsBot() ) { tdf.Append( _T("AIDLL"), status.aishortname ); tdf.Append( _T("TeamLeader"), player_to_number[&battle.GetUser( status.owner )] ); // bot owner is the team leader } else { if ( status.IsBot() ) { tdf.Append( _T("TeamLeader"), player_to_number[&battle.GetUser( status.owner )] ); } else { tdf.Append( _T("TeamLeader"), player_to_number[&usr] ); } } if ( battle.IsProxy() ) { if ( startpostype == IBattle::ST_Pick ) { tdf.Append(_T("StartPosX"), status.pos.x ); tdf.Append(_T("StartPosZ"), status.pos.y ); } else if ( ( startpostype == IBattle::ST_Fixed ) || ( startpostype == IBattle::ST_Random ) ) { int teamnumber = teams_to_sorted_teams[status.team]; if ( teamnumber < int(remap_positions.size()) ) // don't overflow { StartPos position = remap_positions[teamnumber]; tdf.Append(_T("StartPosX"), position.x ); tdf.Append(_T("StartPosZ"), position.y ); } } } else { if ( startpostype == IBattle::ST_Pick ) { tdf.Append(_T("StartPosX"), status.pos.x ); tdf.Append(_T("StartPosZ"), status.pos.y ); } } tdf.Append( _T("AllyTeam"),status.ally ); wxString colourstring = TowxString( status.colour.Red()/255.0 ) + _T(' ') + TowxString( status.colour.Green()/255.0 ) + _T(' ') + TowxString( status.colour.Blue()/255.0 ); tdf.Append( _T("RGBColor"), colourstring); unsigned int side = status.side; if ( side < sides.GetCount() ) tdf.Append( _T("Side"), sides[side] ); tdf.Append( _T("Handicap"), status.handicap ); tdf.LeaveSection(); } tdf.AppendLineBreak(); unsigned int maxiter = std::max( NumUsers, battle.GetLastRectIdx() + 1 ); std::set parsedallys; for ( unsigned int i = 0; i < maxiter; i++ ) { User& usr = battle.GetUser( i ); UserBattleStatus& status = usr.BattleStatus(); BattleStartRect sr = battle.GetStartRect( i ); if ( status.spectator && !sr.IsOk() ) continue; int ally = status.ally; if ( status.spectator ) ally = i; if ( parsedallys.find( ally ) != parsedallys.end() ) continue; // skip duplicates sr = battle.GetStartRect( ally ); parsedallys.insert( ally ); tdf.EnterSection( _T("ALLYTEAM") + TowxString( ally ) ); tdf.Append( _T("NumAllies"), 0 ); if ( startpostype == IBattle::ST_Choose ) { if ( sr.IsOk() ) { const char* old_locale = std::setlocale(LC_NUMERIC, "C"); tdf.Append( _T("StartRectLeft"), wxFormat( _T("%.3f") ) % ( sr.left / 200.0 ) ); tdf.Append( _T("StartRectTop"), wxFormat( _T("%.3f") ) % ( sr.top / 200.0 ) ); tdf.Append( _T("StartRectRight"), wxFormat( _T("%.3f") ) % ( sr.right / 200.0 ) ); tdf.Append( _T("StartRectBottom"), wxFormat( _T("%.3f") ) % ( sr.bottom / 200.0 ) ); std::setlocale(LC_NUMERIC, old_locale); } } tdf.LeaveSection(); } tdf.LeaveSection(); return ret; } springlobby-0.169/src/spring.h0000600000176000000410000000407512105760300017667 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SPRING_H #define SPRINGLOBBY_HEADERGUARD_SPRING_H #include #ifdef SL_QT_MODE #include #include #else #define Q_OBJECT #endif class wxCommandEvent; class IBattle; class SinglePlayerBattle; class NoGuiSinglePlayerBattle; class OfflineBattle; class Battle; class SpringProcess; class wxSpringProcess; class wxString; class Spring: #ifdef SL_QT_MODE public QObject, #endif public wxEvtHandler { Q_OBJECT public: explicit Spring(); ~Spring(); bool IsRunning() const; bool Run( Battle& battle ); bool Run( SinglePlayerBattle& battle ); bool Run( NoGuiSinglePlayerBattle& battle ); bool Run( OfflineBattle& battle ); //! executes spring with replay as parameter /*! * \param filename the full path for the replayfile */ bool RunReplay ( const wxString& filename ); wxString WriteScriptTxt( IBattle& battle ) const; void OnTerminated( wxCommandEvent& event ); #ifdef SL_QT_MODE public slots: void OnStopped( int exitCode, QProcess::ExitStatus exitStatus ); void OnStarted(); signals: void springStarted(); void springStopped(); private: QProcess* qt_process_; #endif protected: bool LaunchSpring( const wxString& params ); SpringProcess* m_process; wxSpringProcess* m_wx_process; bool m_running; DECLARE_EVENT_TABLE() }; Spring& spring(); #endif // SPRINGLOBBY_HEADERGUARD_SPRING_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/springlobby.desktop0000600000176000000410000000034612105760300022136 0ustar buildbotwww-data00000000000000[Desktop Entry] Name=SpringLobby Comment=Play real-time strategy games using the Spring engine Exec=springlobby Icon=springlobby.svg Terminal=false Type=Application Categories=Application;Game;StrategyGame; X-SuSE-translate=false springlobby-0.169/src/springlobby.exe.manifest0000600000176000000410000000157312105760300023056 0ustar buildbotwww-data00000000000000 A free cross platform client for the Spring engine springlobby-0.169/src/springlobby.rc0000600000176000000410000000041312105760300021064 0ustar buildbotwww-data00000000000000#include springlobby ICON "images/SpringLobby.ico" #ifndef _RC_MSVC //don't use this on visual studio - it enables all the UAC rights and XP style management on its own. CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "springlobby.exe.manifest" #endif springlobby-0.169/src/springlobbyapp.cpp0000600000176000000410000004352412105760300021755 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007, 2008 The SpringLobby Team. All rights reserved. */ // // Class: SpringLobbyApp // #ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include #include #include #include #include #include #include #include #include #include #include #include #include #include //filesystem zip handler #include #ifdef __WXMSW__ #include #endif #include #include #include "useractions.h" #include "springlobbyapp.h" #include "mainwindow.h" #include "settings.h" #include "crashreport.h" #include "utils/controls.h" #include "utils/platform.h" #include "ui.h" #include "springunitsync.h" #include "channel/channel.h" #include "utils/customdialogs.h" #include "springsettings/se_utils.h" #include "downloader/prdownloader.h" #include "updater/updater.h" #include "globalsmanager.h" #include "gui/notificationmanager.h" #include "Helper/wxTranslationHelper.h" #include "playback/playbacktraits.h" #include "playback/playbacktab.h" #include "defines.h" #include "customizations.h" #include "sound/alsound.h" #include "mapselectdialog.h" #ifdef HAVE_CONFIG_H #include "springlobby_config.h" #else #define VERSION "unknown" #endif #include #include "utils/misc.h" #if wxUSE_UNIX #include #endif const unsigned int TIMER_ID = 101; const unsigned int TIMER_INTERVAL = 100; IMPLEMENT_APP(SpringLobbyApp) BEGIN_EVENT_TABLE(SpringLobbyApp, wxApp) EVT_TIMER(TIMER_ID, SpringLobbyApp::OnTimer) END_EVENT_TABLE() SpringLobbyApp::SpringLobbyApp() : m_timer ( new wxTimer(this, TIMER_ID) ), quit_called( false ), m_translationhelper( NULL ), m_log_verbosity( 3 ), m_log_console( true ), m_log_file( false ), m_log_window_show( false ), m_crash_handle_disable( false ), m_appname( _T("SpringLobby") ) { #if wxUSE_UNIX XInitThreads(); #endif } SpringLobbyApp::~SpringLobbyApp() { delete m_timer; } #if defined(__WXMSW__) && defined(ENABLE_DEBUG_REPORT) LONG __stdcall filter(EXCEPTION_POINTERS* p){ #if wxUSE_STACKWALKER CrashReport::instance().GenerateReport(); #else CrashReport::instance().GenerateReport(p); #endif return 0; //must return 0 here or we'll end in an inf loop of dbg reports } #endif //! @brief Initializes the application. //! //! It will open the main window and connect default to server or open the connect window. bool SpringLobbyApp::OnInit() { wxSetEnv( _T("UBUNTU_MENUPROXY"), _T("0") ); //this triggers the Cli Parser amongst other stuff if (!wxApp::OnInit()) return false; SetAppName( m_appname ); if (!m_crash_handle_disable) { #if wxUSE_ON_FATAL_EXCEPTION wxHandleFatalExceptions( true ); #endif #if defined(__WXMSW__) && defined(ENABLE_DEBUG_REPORT) //this undocumented function acts as a workaround for the dysfunctional // wxUSE_ON_FATAL_EXCEPTION on msw when mingw is used (or any other non SEH-capable compiler ) SetUnhandledExceptionFilter(filter); #endif } //initialize all loggers, we'll use the returned pointer to set correct parent window later wxLogChain* logchain = 0; wxLogWindow *loggerwin = InitializeLoggingTargets( 0, m_log_console, m_log_file_path, m_log_window_show, !m_crash_handle_disable, m_log_verbosity, logchain ); wxLogMessage( _T("SpringLobby %s started"), _T(VERSION)); //this needs to called _before_ mainwindow instance is created wxInitAllImageHandlers(); wxFileSystem::AddHandler(new wxZipFSHandler); wxSocketBase::Initialize(); #ifdef __WXMSW__ wxString path = wxPathOnly( wxStandardPaths::Get().GetExecutablePath() ) + wxFileName::GetPathSeparator() + _T("locale"); #else #if defined(LOCALE_INSTALL_DIR) wxString path ( _T(LOCALE_INSTALL_DIR) ); #else // use a dummy name here, we're only interested in the base path wxString path = wxStandardPaths::Get().GetLocalizedResourcesDir(_T("noneWH"),wxStandardPaths::ResourceCat_Messages); path = path.Left( path.First(_T("noneWH") ) ); #endif #endif m_translationhelper = new wxTranslationHelper( *( (wxApp*)this ), path ); m_translationhelper->Load(); if ( !wxDirExists( GetConfigfileDir() ) ) wxMkdir( GetConfigfileDir() ); #ifdef __WXMSW__ sett().SetSearchSpringOnlyInSLPath( sett().GetSearchSpringOnlyInSLPath() ); #endif sett().SetSpringBinary( sett().GetCurrentUsedSpringIndex(), sett().GetCurrentUsedSpringBinary() ); sett().SetUnitSync( sett().GetCurrentUsedSpringIndex(), sett().GetCurrentUsedUnitSync() ); if ( sett().DoResetPerspectives() ) { //we do this early on and reset the config var a little later so we can save a def. perps once mw is created sett().RemoveLayouts(); sett().SetDoResetPerspectives( false ); ui().mw().SavePerspectives( _T("SpringLobby-default") ); } sett().RefreshSpringVersionList(); //this should take off the firstload time considerably *ie nil it :P ) mapSelectDialog(); if ( !m_customizer_archive_name.IsEmpty() ) {//this needsto happen before usync load sett().SetForcedSpringConfigFilePath( GetCustomizedEngineConfigFilePath() ); } //unitsync first load, NEEDS to be blocking const bool usync_loaded = usync().ReloadUnitSyncLib(); if ( !sett().IsFirstRun() && !usync_loaded ) { customMessageBox( SL_MAIN_ICON, _("Please check that the file given in Preferences->Spring is a proper, readable unitsync library"), _("Coulnd't load required unitsync library"), wxOK ); } #ifndef DISABLE_SOUND //sound sources/buffer init sound(); #endif CacheAndSettingsSetup(); if ( !m_customizer_archive_name.IsEmpty() ) { if ( SLcustomizations().Init( m_customizer_archive_name ) ) { ui().mw().SetIcons( SLcustomizations().GetAppIconBundle() ); } else { customMessageBox( SL_MAIN_ICON, _("Couldn't load customizations for ") + m_customizer_archive_name + _("\nPlease check that that is the correct name, passed in qoutation"), _("Fatal error"), wxOK ); // wxLogError( _("Couldn't load customizations for ") + m_customizer_archive_name + _("\nPlease check that that is the correct name, passed in qoutation"), _("Fatal error") ); exit( OnExit() );//for some twisted reason returning false here does not terminate the app } } notificationManager(); //needs to be initialized too ui().ShowMainWindow(); SetTopWindow( &ui().mw() ); if ( sett().DoResetPerspectives() ) { //now that mainwindow is shown, we can save what is the default layout and remove the flag to reset sett().SetDoResetPerspectives( false ); ui().mw().SavePerspectives( _T("SpringLobby-default") ); } //interim fix for resize crashes on metacity and kwin #ifdef __WXMSW__ mapSelectDialog().Reparent( &ui().mw() ); #endif ui().FirstRunWelcome(); m_timer->Start( TIMER_INTERVAL ); ui().mw().SetLogWin( loggerwin, logchain ); return true; } //! @brief Finalizes the application int SpringLobbyApp::OnExit() { if ( quit_called ) return 0; quit_called = true; wxLogDebugFunc( _T("") ); if(m_translationhelper) { wxDELETE(m_translationhelper); } m_timer->Stop(); sett().SaveSettings(); // to make sure that cache path gets saved before destroying unitsync SetEvtHandlerEnabled(false); UiEvents::GetNotificationEventSender().Enable( false ); DestroyGlobals(); return 0; } //! @brief is called when the app crashes void SpringLobbyApp::OnFatalException() { #if wxUSE_DEBUGREPORT && defined(ENABLE_DEBUG_REPORT) #if wxUSE_STACKWALKER CrashReport::instance().GenerateReport(); #else EXCEPTION_POINTERS* p = new EXCEPTION_POINTERS; //lets hope this'll never get called CrashReport::instance().GenerateReport(p); #endif #else wxMessageBox( _("The application has generated a fatal error and will be terminated\nGenerating a bug report is not possible\n\nplease get a wxWidgets library that supports wxUSE_DEBUGREPORT"),_("Critical error"), wxICON_ERROR | wxOK ); #endif } //! @brief Is called every 1/10 seconds to update statuses void SpringLobbyApp::OnTimer( wxTimerEvent& event ) { ui().OnUpdate( event.GetInterval() ); } bool SpringLobbyApp::SelectLanguage() { wxArrayString names; wxArrayLong identifiers; int current_selection_index; m_translationhelper->GetInstalledLanguages( names, identifiers, current_selection_index ); bool ret = m_translationhelper->AskUserForLanguage( names, identifiers, current_selection_index ); if ( ret ) m_translationhelper->Save(); return ret; } void SpringLobbyApp::OnInitCmdLine(wxCmdLineParser& parser) { #ifndef HAVE_WX29 #define STR _T #else #define STR #endif #ifndef HAVE_WX29 #define CSTR #else #define CSTR .c_str() #endif static const wxCmdLineEntryDesc cmdLineDesc[] = { { wxCMD_LINE_SWITCH, STR("h"), STR("help"), wxString(_("show this help message"))CSTR, wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP }, { wxCMD_LINE_SWITCH, STR("nc"), STR("no-crash-handler"), wxString(_("don't use the crash handler (useful for debugging)"))CSTR, wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_OPTION, STR("fl"), STR("file-logging"), wxString(_("dumps application log to a file ( enter path )"))CSTR, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_NEEDS_SEPARATOR }, { wxCMD_LINE_SWITCH, STR("cl"), STR("console-logging"), wxString(_("shows application log to the console(if available)"))CSTR, wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_SWITCH, STR("gl"), STR("gui-logging"), wxString(_("enables application log window"))CSTR, wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_OPTION, STR("f"), STR("config-file"), wxString(_("override default choice for config-file"))CSTR, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_NEEDS_SEPARATOR }, { wxCMD_LINE_OPTION, STR("l"), STR("log-verbosity"), wxString(_("overrides default logging verbosity, can be:\n 0: no log\n 1: critical errors\n 2: errors\n 3: warnings (default)\n 4: messages\n 5: function trace"))CSTR, wxCMD_LINE_VAL_NUMBER, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_OPTION, STR("c"), STR("customize"), wxString(_("load lobby customizations from game archive. Expects the shortname."))CSTR, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_OPTION, STR("n"), STR("name"), wxString(_("overrides default application name"))CSTR, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_NONE, NULL, NULL, NULL, wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL } //this is mandatory according to http://docs.wxwidgets.org/stable/wx_wxcmdlineparser.html }; parser.SetDesc( cmdLineDesc ); parser.SetSwitchChars (_T("-")); #undef STR #undef CSTR } //! @brief parses the command line and sets global app options like log verbosity or log target bool SpringLobbyApp::OnCmdLineParsed(wxCmdLineParser& parser) { #if wxUSE_CMDLINE_PARSER if ( !parser.Parse(true) ) { m_log_console = parser.Found(_T("console-logging")); m_log_window_show = parser.Found(_T("gui-logging")); m_log_file = parser.Found(_T("file-logging"), &m_log_file_path); m_crash_handle_disable = parser.Found(_T("no-crash-handler")); Settings::m_user_defined_config = parser.Found( _T("config-file"), &Settings::m_user_defined_config_path ); if ( Settings::m_user_defined_config ) { wxFileName fn ( Settings::m_user_defined_config_path ); if ( ! fn.IsAbsolute() ) { wxLogError ( _T("path for parameter \"config-file\" must be absolute") ); return false; } if ( ! fn.IsFileWritable() ) { wxLogError ( _T("path for parameter \"config-file\" must be writeable") ); return false; } } if ( !parser.Found(_T("log-verbosity"), &m_log_verbosity ) ) m_log_verbosity = m_log_window_show ? 3 : 5; if ( !parser.Found(_T("customize"), &m_customizer_archive_name ) ) m_customizer_archive_name = _T(""); if ( !parser.Found(_T("name"), &m_appname ) ) m_appname = _T("SpringLobby"); if ( parser.Found(_T("help")) ) return false; // not a syntax error, but program should stop if user asked for command line usage return true; } else { return false; } #else // wxUSE_CMDLINE_PARSER return true; #endif } void SpringLobbyApp::CacheAndSettingsSetup() { SetSettingsStandAlone( false ); const wxString userConfigDir = GetConfigfileDir(); if ( sett().IsFirstRun() && !wxDirExists( userConfigDir ) ) { wxMkdir( userConfigDir ); } if ( (sett().GetCacheVersion() < CACHE_VERSION) && !sett().IsFirstRun() ) { sett().SetMapCachingThreadProgress( 0 ); // reset map cache thread sett().SetModCachingThreadProgress( 0 ); // reset mod cache thread if ( wxDirExists( sett().GetCachePath() ) ) { wxLogWarning( _T("erasing old cache ver %d (app cache ver %d)"), sett().GetCacheVersion(), CACHE_VERSION ); wxString file = wxFindFirstFile( sett().GetCachePath() + wxFILE_SEP_PATH + _T("*") ); while ( !file.empty() ) { wxRemoveFile( file ); file = wxFindNextFile(); } } } if ( !sett().IsFirstRun() ) { int settversion = sett().GetSettingsVersion(); if ( settversion < 3 ) { sett().ConvertOldSpringDirsOptions(); } if ( settversion < 4 ) { if ( sett().GetTorrentPort() == DEFSETT_SPRING_PORT ) sett().SetTorrentPort( DEFSETT_SPRING_PORT + 1 ); } if ( settversion < 5 ) { wxArrayString list = sett().GetServers(); int count = list.GetCount(); wxArrayString wordlist = sett().GetHighlightedWords(); for ( int i= 0; i < count; i++ ) { wxString nick = sett().GetServerAccountNick( list[i] ); if ( wordlist.Index( nick ) == -1 ) { wordlist.Add( nick ); } } sett().SetHighlightedWords( wordlist ); } if ( settversion < 6 ) { sett().ConvertOldServerSettings(); } if ( settversion < 7 ) { sett().AddChannelJoin( _T("springlobby"), _T("") ); } if ( settversion < 8 ) { sett().DeleteServer( _T("Backup server") ); sett().SetServer( _T("Backup server 1"), _T("springbackup1.servegame.com"), 8200 ); sett().SetServer( _T("Backup server 2"), _T("springbackup2.servegame.org"), 8200 ); sett().SetServer( _T("Test server"), _T("taspringmaster.servegame.com"), 8300 ); } if ( settversion < 10 ) { sett().ConvertOldColorSettings(); } if ( settversion < 11 ) { if( IsUACenabled() ) { usync().ReloadUnitSyncLib(); if ( usync().IsLoaded() ) usync().SetSpringDataPath(_T("")); // UAC is on, fix the spring data path } } if ( settversion < 12 ) { sett().ConvertOldChannelSettings(); } if ( settversion < 13 ) { sett().ConvertOldHiglightSettings(); } if ( settversion < 15 ) { sett().TranslateSavedColumWidths(); } if ( settversion < 21 ) { sett().RemoveLayouts(); } if ( settversion < 18 ) { //new downloader was introduced sett().ClearTorrentListToResume(); } if( settversion < 19 ) { //the dummy column hack was removed on win sett().NukeColumnWidths(); } if ( settversion < 22 ) { if ( m_translationhelper ) { // add locale's language code to autojoin if ( m_translationhelper->GetLocale() ) { wxString localecode = m_translationhelper->GetLocale()->GetCanonicalName(); if ( localecode.Find(_T("_")) != -1 ) localecode = localecode.BeforeFirst(_T('_')); if ( localecode == _T("en") ) // we'll skip en for now, maybe in the future we'll reactivate it sett().AddChannelJoin( localecode, _T("") ); } } } if ( settversion < 23 ) { sett().ConvertLists(); sett().AddKnownMatchmakerCPU(6667); } } if ( sett().ShouldAddDefaultServerSettings() || ( sett().GetSettingsVersion() < 14 && sett().GetServers().Count() < 2 ) ) sett().SetDefaultServerSettings(); if ( sett().ShouldAddDefaultChannelSettings() ) { sett().AddChannelJoin( _T("main"), _T("") ); sett().AddChannelJoin( _T("newbies"), _T("") ); if ( m_translationhelper ) { if ( m_translationhelper->GetLocale() ) { wxString localecode = m_translationhelper->GetLocale()->GetCanonicalName(); if ( localecode.Find(_T("_")) != -1 ) localecode = localecode.BeforeFirst(_T('_')); sett().AddChannelJoin( localecode, _T("") ); // add locale's language code to autojoin } } } if ( sett().ShouldAddDefaultGroupSettings() ) { sett().AddGroup( _("Default") ); sett().AddGroup( _("Ignore PM") ); useractions().ChangeAction( _("Ignore PM"), UserActions::ActIgnorePM ); sett().AddGroup( _("Ignore chat") ); useractions().ChangeAction( _("Ignore chat"), UserActions::ActIgnoreChat ); sett().AddGroup( _("Battle Autokick") ); useractions().ChangeAction( _("Battle Autokick"), UserActions::ActAutokick ); sett().AddGroup( _("Friends") ); useractions().ChangeAction( _("Friends"), UserActions::ActNotifBattle ); useractions().ChangeAction( _("Friends"), UserActions::ActHighlight ); useractions().ChangeAction( _("Friends"), UserActions::ActNotifLogin ); useractions().SetGroupColor( _("Friends"), wxColour( 0, 0, 255 ) ); } } void SpringLobbyApp::OnQuit( GlobalEvents::GlobalEventData /*data*/ ) { m_timer->Stop(); } springlobby-0.169/src/springlobbyapp.h0000600000176000000410000000352212105760300021414 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SPRINGLOBBYAPP_H #define SPRINGLOBBY_HEADERGUARD_SPRINGLOBBYAPP_H #include #include "utils/isink.h" class wxTimer; class wxTimerEvent; class wxIcon; class wxLocale; class wxTranslationHelper; //! @brief SpringLobby wxApp class SpringLobbyApp : public wxApp, public OnQuitSink { public: SpringLobbyApp(); ~SpringLobbyApp(); virtual bool OnInit(); virtual int OnExit(); virtual void OnFatalException(); // System Events void OnTimer( wxTimerEvent& event ); bool SelectLanguage(); virtual void OnInitCmdLine(wxCmdLineParser& parser); virtual bool OnCmdLineParsed(wxCmdLineParser& parser); void OnQuit( GlobalEvents::GlobalEventData data ); protected: void CacheAndSettingsSetup(); wxTimer* m_timer; bool quit_called; wxTranslationHelper* m_translationhelper; long m_log_verbosity; bool m_log_console; bool m_log_file; wxString m_log_file_path; bool m_log_window_show; bool m_crash_handle_disable; wxString m_customizer_archive_name; wxString m_appname; DECLARE_EVENT_TABLE() }; DECLARE_APP(SpringLobbyApp) #endif // SPRINGLOBBY_HEADERGUARD_SPRINGLOBBYAPP_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/springprocess.cpp0000600000176000000410000000226212105760300021615 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include "springprocess.h" #include "spring.h" #include "utils/debug.h" #include "utils/conversion.h" #include DEFINE_LOCAL_EVENT_TYPE( wxEVT_SPRING_EXIT ) SpringProcess::SpringProcess( Spring& sp ) : m_sp( sp ), m_exit_code( 0 ) { wxLogDebugFunc( _T( "" ) ); } SpringProcess::~SpringProcess() { wxLogDebugFunc( _T( "" ) ); } void SpringProcess::SetCommand( const wxString& cmd ) { m_cmd = cmd; } void SpringProcess::OnExit() { wxLogDebugFunc( _T( "" ) ); wxCommandEvent event( wxEVT_SPRING_EXIT, PROC_SPRING ); event.SetExtraLong( m_exit_code ); m_sp.AddPendingEvent( event ); } void* SpringProcess::Entry() { wxLogDebugFunc( _T( "" ) ); m_exit_code = system( m_cmd.mb_str( wxConvUTF8 ) ); wxLogMessage( _T( "Spring closed." ) ); return 0; } wxSpringProcess::wxSpringProcess( Spring& sp ) : m_sp( sp ) { wxLogDebugFunc( _T( "" ) ); } wxSpringProcess::~wxSpringProcess() { wxLogDebugFunc( _T( "" ) ); } void wxSpringProcess::OnTerminate( int /*pid*/, int status ) { wxCommandEvent event( wxEVT_SPRING_EXIT, PROC_SPRING ); event.SetExtraLong( status ); m_sp.AddPendingEvent( event ); } springlobby-0.169/src/springprocess.h0000600000176000000410000000322212105760300021257 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SPRINGPROCESS_H #define SPRINGLOBBY_HEADERGUARD_SPRINGPROCESS_H #ifdef SL_QT_MODE #include "thread.h" typedef Thread SpringProcessBase; //wxThread segfaults in mutex when used from qt.. #else #include #include typedef wxThread SpringProcessBase; #endif #include BEGIN_DECLARE_EVENT_TYPES() DECLARE_LOCAL_EVENT_TYPE( wxEVT_SPRING_EXIT, 1 ) END_DECLARE_EVENT_TYPES() class Spring; class SpringProcess: public SpringProcessBase { public: SpringProcess( Spring& sp ); ~SpringProcess(); void OnExit(); void SetCommand( const wxString& cmd ); void* Entry(); protected: Spring& m_sp; wxString m_cmd; int m_exit_code; }; class wxSpringProcess: public wxProcess { public: wxSpringProcess( Spring& sp ); ~wxSpringProcess(); void OnTerminate( int pid, int status ); protected: Spring& m_sp; }; const int PROC_SPRING = wxID_HIGHEST; #endif // SPRINGLOBBY_HEADERGUARD_SPRINGPROCESS_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/springsettings/CMakeLists.txt0000600000176000000410000000161412105760300024033 0ustar buildbotwww-data00000000000000add_sources(SettingsSrc helpmenufunctions.cpp panel_pathoption.cpp se_utils.cpp tab_abstract.cpp tab_audio.cpp tab_quality_video.cpp tab_render_detail.cpp tab_simple.cpp tab_ui.cpp ) add_subdirectory(hotkeys) add_sources(springlobbySrc frame.cpp) ADD_LIBRARY(libsettings STATIC ${SettingsSrc}) ADD_EXECUTABLE(springsettings WIN32 MACOSX_BUNDLE frame.cpp main.cpp ${SpringSettings_RC_FILE} ) IF(WIN32) CreateResourceCompileCommand(springsettings_RC_FILE ${springlobby_SOURCE_DIR}/src settings.rc ss_icon.o ) install(TARGETS springsettings RUNTIME DESTINATION .) ELSE(WIN32) install(TARGETS springsettings RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin ) ENDIF (WIN32) TARGET_LINK_LIBRARIES(springsettings libsettings slcommon lsl-utils ${wxWidgets_LIBRARIES} ${CURL_LINKFLAGS} ) set_target_properties(springsettings PROPERTIES COMPILE_FLAGS -DSPRINGSETTINGS_STANDALONE ) springlobby-0.169/src/springsettings/ctrlconstants.h0000600000176000000410000005474712105760300024364 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007-09 springsettings is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 springsettings. If not, see . **/ // Autohost // LODScale=1.000 // LODScaleReflection=1.000 // LODScaleRefraction=1.000 // LODScaleShadow=1.000 // MapArchives=1 // multiple maps per archive? // MetalMapPalette=0 // // FIXME: VSync Off=-1? #include #ifndef DEFS_HPP #define DEFS_HPP const unsigned int PWIN_SIZE_X = 895; const unsigned int PWIN_SIZE_Y = 830; const unsigned int CWIN_SIZE_X = 580; const unsigned int CWIN_SIZE_Y = 360; // ParentWin menu-item IDs const int ID_MENUITEM_SAVE = 50; const int ID_MENUITEM_RESET = 51; const int ID_MENUITEM_QUIT = 52; const int ID_MENUITEM_DISABLE_WARN = 53; const int ID_MENUITEM_MODE = 60; const int ID_MENUITEM_EXPERT = 62; const int ID_MENUITEM_SIMPLE = 61; const int ID_MENUITEM_HELP = 70; const int ID_MENUITEM_ABOUT = 71; const int ID_MENUITEM_CONTACT = 72; const int ID_MENUITEM_CREDITS = 73; const int ID_MENUITEM_BUGREPORT = 74; // ParentWin TextInput IDs const int ID_RES_CHOICES_LBOX_X = 1111; const int ID_RES_CHOICES_LBOX_Y = 1112; // ParentWin Rendering Options slider IDs const int ID_RO_SLI_0 = 100; const int ID_RO_SLI_1 = 101; const int ID_RO_SLI_2 = 102; const int ID_RO_SLI_3 = 103; const int ID_RO_SLI_4 = 104; const int ID_RO_SLI_5 = 105; const int ID_RO_SLI_6 = 106; const int ID_RO_SLI_7 = 107; const int ID_RO_SLI_8 = 108; // ParentWin Video Options checkbox IDs const int ID_WINDOWP_VO_CBOX_0 = 250; const int ID_WINDOWP_VO_CBOX_1 = 251; const int ID_WINDOWP_VO_CBOX_2 = 252; // ParentWin Video Options radiobutton IDs const int ID_WINDOWP_VO_RBUT_0 = 280; const int ID_WINDOWP_VO_RBUT_1 = 281; // ParentWin Video Options slider IDs const int ID_VO_SLI_0 = 200; // tab_simple controls const int ID_SIMPLE_QUAL_CBX = 390; const int ID_SIMPLE_DETAIL_CBX = 391; const int ID_SIMPLE_MODE_CBX = 392; const int ID_SIMPLE_GOEXPERT_BUT = 393; // UI Options checkbox IDs const int ID_WINDOWP_UI_CBOX_1 = 360; const int ID_WINDOWP_UI_CBOX_2 = 361; const int ID_WINDOWP_UI_CBOX_3 = 362; const int ID_WINDOWP_UI_CBOX_4 = 363; const int ID_WINDOWP_UI_CBOX_5 = 364; const int ID_WINDOWP_UI_CBOX_6 = 365; const int ID_WINDOWP_UI_CBOX_7 = 366; const int ID_WINDOWP_UI_CBOX_8 = 367; const int ID_WINDOWP_UI_CBOX_9 = 368; const int ID_WINDOWP_UI_CBOX_10 = 369; const int ID_WINDOWP_UI_CBOX_11 = 370; const int ID_WINDOWP_UI_CBOX_12 = 371; const int ID_WINDOWP_UI_CBOX_13 = 372; const int ID_WINDOWP_UI_CBOX_14 = 373; const int ID_WINDOWP_UI_CBOX_15 = 374; const int ID_WINDOWP_UI_CBOX_16 = 375; const int ID_WINDOWP_UI_CBOX_17 = 376; const int ID_WINDOWP_UI_CBOX_18 = 377; //Zoom opt const int ID_WINDOWP_UI_MW_SPD = 385; //QUALITY OPTIONS checkbox IDs const int ID_WINDOWP_QA_CBOX_0 = 300; const int ID_WINDOWP_QA_CBOX_1 = 301; const int ID_WINDOWP_QA_CBOX_2 = 302; const int ID_WINDOWP_QA_CBOX_3 = 303; const int ID_WINDOWP_QA_CBOX_4 = 304; const int ID_WINDOWP_QA_CBOX_5 = 305; const int ID_WINDOWP_QA_CBOX_6 = 306; const int ID_WINDOWP_QA_CBOX_7 = 307; const int ID_WINDOWP_QA_CBOX_8 = 308; const int ID_WINDOWP_QA_CBOX_9 = 309; const int ID_WINDOWP_QA_CBOX_10 = 310; const int ID_WINDOWP_QA_CBOX_11 = 311; const int ID_WINDOWP_WR_COMBOX = 320; // ParentWin Audio Options slider IDs const int ID_AO_SLI_0 = 400; const int ID_AO_SLI_1 = 401; const int ID_AO_SLI_2 = 402; const int ID_AO_SLI_3 = 403; const int ID_AO_SLI_4 = 404; const int ID_AO_SLI_5 = 405; const int ID_AO_SLI_6 = 406; // ParentWin Debug Options checkbox IDs const int ID_WINDOWP_DO_CBOX_0 = 540; // ParentWin Debug Options slider IDs const int ID_DO_SLI_0 = 500; // ParentWin Water Rendering radiobutton IDs const int ID_WINDOWP_WR_RBUT_0 = 550; const int ID_WINDOWP_WR_RBUT_1 = 551; const int ID_WINDOWP_WR_RBUT_2 = 552; const int ID_WINDOWP_WR_RBUT_3 = 553; // ChildWin Mouse Options checkbox IDs const int ID_WINDOWC_MO_CBOX_0 = 650; const int ID_WINDOWC_MO_CBOX_1 = 651; // ChildWin Mouse Options radiobutton IDs const int ID_WINDOWC_MO_RBUT_0 = 680; const int ID_WINDOWC_MO_RBUT_1 = 681; const int ID_WINDOWC_MO_RBUT_2 = 682; const int ID_WINDOWC_MO_RBUT_3 = 683; const int ID_WINDOWC_MO_RBUT_4 = 684; // ChildWin Mouse Options slider IDs const int ID_MO_SLI_0 = 660; const int ID_MO_SLI_1 = 661; const int ID_MO_SLI_2 = 662; const int ID_MO_SLI_3 = 663; const int ID_MO_SLI_4 = 664; // panel_paths ids const int ID_PATH_USYNC_BTN = 701; const int ID_PATH_OK_BTN = 702; //water 4 specific options const int ID_W4_BumpWaterBlurReflection = 720; const int ID_W4_BumpWaterUseDepthTexture = 721; const int ID_W4_BumpWaterShoreWaves = 722; const int ID_W4_BumpWaterReflection = 723; const int ID_W4_BumpWaterTexSizeReflection = 724; const int ID_W4_BumpWaterRefraction = 725; const int ID_W4_BumpWaterAnisotropy = 726; const int ID_SHADOW_CHOICES = 740; #define SLI_STYLE (wxSL_LABELS ) #define WX_DEF_V wxDefaultValidator const wxPoint WX_DEF_P(-1, -1); const wxSize WX_DEF_S(-1, -1); const wxSize WX_SLI_S(200, -1); const int UPDATE_W4_CONTROLS = 2003; const int UPDATE_VIDEO_MODE = 2002; const int UPDATE_QA_BOXES = 2001; const int UPDATE_ALL = 2000; const int UPDATE_EXPERTMODE_WARNING_ON_SIMPLETAB = 2003; #define configHandler (susynclib()) const wxSize TAB_SIZE (700,500); //#include #include //#include #include struct Control { const wxString lbl; const wxString key; int id; const wxString def; //default value for confighandler, not control const wxString tTip [1]; }; const int Control_size = sizeof(Control); typedef std::map category_sizes_map ; typedef category_sizes_map::value_type category_sizes_map_type; const Control UI_ZOOM[] = { {_("Scrollwheel speed"), _T("ScrollWheelSpeed"), ID_WINDOWP_UI_MW_SPD, _T("25.0"), {_("Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!")} } }; const category_sizes_map_type UI_ZOOM_entry ( _T("UI_ZOOM"), sizeof(UI_ZOOM) / Control_size ); //TODO is max_texture stages obsolte? const Control RO_SLI[] = { {_("Shadow-map size"), _T("ShadowMapSize"), ID_RO_SLI_0, _T("2048"), {_("higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192")} }, {_("Tree view-distance"), _T("TreeRadius"), ID_RO_SLI_1, _T("1408"), {_("sets the maximum distance at which trees will still be rendered")} }, {_("Terrain detail"), _T("GroundDetail"), ID_RO_SLI_2, _T("40"), {_("higher value = more terrain details")} }, {_("Unit LOD distance"), _T("UnitLodDist"), ID_RO_SLI_3, _T("1000"), {_("higher value = units will remain detailed even when zooming out")} }, {_("Grass detail"), _T("GrassDetail"), ID_RO_SLI_4, _T("3"), {_("higher value = more detailed grass")} }, {_("Ground decals"), _T("GroundDecals"), ID_RO_SLI_5, _T("1"), {_("settings higher than 1 might have unwelcome side-effects / be very resource hungry")} }, {_("Unit icon distance"), _T("UnitIconDist"), ID_RO_SLI_6, _T("10000"), {_("determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time")} }, {_("Max simultaneous particles"), _T("MaxParticles"), ID_RO_SLI_7, _T("1000") , {_("limits how many particles are displayed at the same time")}}, {_("Max nano simultaneous particles"), _T("MaxNanoParticles"), ID_RO_SLI_8, _T("2500") , {_("limits how many particles are displayed at the same time")}} // not needed atm {_("Max texture stages (SM3)"), _T("SM3MaxTextureStages"), ID_RO_SLI_8, "6" , {_("Decrease this if you are having bad perfomance on maps in sm3 format,\nincrease if sm3 maps look ugly.")}} }; const category_sizes_map_type RO_SLI_entry ( _T("RO_SLI"), sizeof(RO_SLI) / Control_size ); const Control VO_CBOX[] = { {_("Run full-screen"), _T("Fullscreen"), ID_WINDOWP_VO_CBOX_0, _T("1"), {_("run fullscreen or in a window?")}}, {_("Dual-screen mode"), _T("DualScreenMode"), ID_WINDOWP_VO_CBOX_1, _T("0"), {_("if you have two monitors you can use both")}}, {_("Enable v-sync"), _T("VSync"), ID_WINDOWP_VO_CBOX_2, _T("-1"), {_("V-Sync on/off")}} }; const category_sizes_map_type VO_CBOX_entry ( _T("VO_BOX"), sizeof(VO_CBOX) / Control_size ); const Control VO_RBUT[] = { {_("16-bit Z-buffer"), _T("DepthBufferBits"), ID_WINDOWP_VO_RBUT_0, _T("24"), {_("placeholder")}}, {_("24-bit Z-buffer"), _T("DepthBufferBits"), ID_WINDOWP_VO_RBUT_1, _T("24"), {_("placeholder")}} }; const category_sizes_map_type VO_RBUT_entry ( _T("VO_RBUT"), sizeof(VO_RBUT) / Control_size ); const Control VO_SLI[] = { {_("Full-scene anti-aliasing samples"), _T("FSAALevel"), ID_VO_SLI_0, _T("0"), {_("how much anti-aliasing should be applied")}} }; const category_sizes_map_type VO_SLI_entry ( _T("VO_SLI"), sizeof(VO_SLI) / Control_size ); const Control VO_SLI_EXT[] = { {_T(""), _T("FSAA"), -1, _T("0"), {_T("")}} }; const category_sizes_map_type VO_SLI_EXT_entry ( _T("VO_SLI_EXT"), sizeof(VO_SLI_EXT) / Control_size ); const Control AO_SLI[] = { {_("Maximum simultaneous sounds"), _T("MaxSounds"), ID_AO_SLI_0, _T("128") , {_("maximum different sounds played at the same time\n" "Set this to zero to disable sound completely.")}}, {_("Master sound volume"), _T("snd_volmaster"), ID_AO_SLI_1, _T("60"), {_("master sound volume")}}, {_("General sound volume"), _T("snd_general"), ID_AO_SLI_2, _T(""), {_("general volume relative to master volume")}}, {_("Unit reply volume"), _T("snd_volunitreply"), ID_AO_SLI_3, _T("100") , {_("reply volume relative to master volume")}}, {_("Battle volume"), _T("snd_volbattle"), ID_AO_SLI_4, _T("100") , {_("battle volume relative to global volume")}}, {_("User interface volume"), _T("snd_volui"), ID_AO_SLI_5, _T("100") , {_("ui volume relative to global volume")}}, {_("Air Absorbtion factor"), _T("snd_airAbsorption"), ID_AO_SLI_6, _T("0.0") , {_("How far sounds will have high frequencies dampened")}} }; const category_sizes_map_type AO_SLI_entry ( _T("AO_SLI"), sizeof(AO_SLI) / Control_size ); const Control QA_CBOX[] = { {_("Shadows (slow)"), _T("Shadows"), ID_WINDOWP_QA_CBOX_0, _T("0"), {_("enable shadows?")}}, {_("3D trees"), _T("3DTrees"), ID_WINDOWP_QA_CBOX_1, _T("1"), {_("want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card")}}, {_("High-resolution clouds"), _T("AdvSky"), ID_WINDOWP_QA_CBOX_2, _T("1"), {_("want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card")}}, {_("Dynamic clouds (slow)"), _T("DynamicSky"), ID_WINDOWP_QA_CBOX_3, _T("0"), {_("want moving clouds in the sky?")}}, {_("Reflective units"), _T("AdvUnitShading"), ID_WINDOWP_QA_CBOX_4, _T("1"), {_("shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card")}}, {_("Never use shaders when rendering SM3 maps"), _T("SM3ForceFallbackTex"), ID_WINDOWP_QA_CBOX_5, _T("0"), {_("problems with sm3 maps? enable this")}}, {_("Enable LuaShaders support"), _T("LuaShaders"), ID_WINDOWP_QA_CBOX_6, _T("1"), {_("makes for some cool effects")}}, {_("Use Pixelbuffer objects"), _T("UsePBO"), ID_WINDOWP_QA_CBOX_7, _T("1"), {_("If supported, it speeds up the dynamic loading of terrain textures -> smoother camera movement")}}, {_("Compress textures"), _T("CompressTextures"),ID_WINDOWP_QA_CBOX_8, _T("0"), {_("Runtime texture compression. (Ideal for graphic cards with small amount of vram)")}}, {_("High-resolution LOS textures"), _T("HighResLos"), ID_WINDOWP_QA_CBOX_9, _T("0"), {_("smoother Line of Sight overlays")}}, {_("Draw smooth points"), _T("SmoothPoints"), ID_WINDOWP_QA_CBOX_10, _T("0"), {_("should points be anti-aliased")}}, {_("Draw smooth lines"), _T("SmoothLines"), ID_WINDOWP_QA_CBOX_11, _T("0"), {_("should lines be anti-aliased")}}, }; const category_sizes_map_type QA_CBOX_entry ( _T("QA_CBOX"), sizeof(QA_CBOX) / Control_size ); const Control UI_CBOX[] = { {_("Issue commands on mini-map"), _T("MiniMapFullProxy"), ID_WINDOWP_UI_CBOX_2, _T("1"), {_("Issue orders on the mini-map like you would ")}}, {_("Show commands on mini-map"), _T("MiniMapDrawCommands"), ID_WINDOWP_UI_CBOX_3, _T("1"), {_("default value is \"on\"")}}, {_("Draw icons on mini-map"), _T("MiniMapIcons"), ID_WINDOWP_UI_CBOX_4, _T("1"), {_("default value is \"on\"")}}, {_("Draw markers on mini-map"), _T("MiniMapMarker"), ID_WINDOWP_UI_CBOX_5, _T("1"), {_("default value is \"on\"")}}, {_("Mini-map on left (single screen)"), _T("MinimapOnLeft"), ID_WINDOWP_UI_CBOX_6, _T(""), {_("left is the default")}}, {_("Mini-map on left (dual screen)"), _T("DualScreenMiniMapOnLeft"), ID_WINDOWP_UI_CBOX_7,_T("0"), {_("left is the default")}}, {_("Simplified mini-map colors"), _T("SimpleMiniMapColors"), ID_WINDOWP_UI_CBOX_8, _T("0"), {_("Use less colors")}}, {_("Team-colored nanospray"), _T("TeamNanoSpray"), ID_WINDOWP_UI_CBOX_9, _T("1"), {_("Should nano particels be the color of your team?")}}, {_("Colorized elevation map"), _T("ColorElev"), ID_WINDOWP_UI_CBOX_10, _T("1"), {_("makes differences in height clearer")}}, {_("Show in-game clock"), _T("ShowClock"), ID_WINDOWP_UI_CBOX_11, _T("1"), {_("requires \"Enable LuaWidgets\" to be set.\nWill be displayed in the bottom right corner")}}, {_("Show in-game player information"), _T("ShowPlayerInfo"), ID_WINDOWP_UI_CBOX_12, _T("1"), {_("requires \"Enable LuaWidgets\" to be set.\nWill be displayed in the bottom right corner")}}, {_("Show in-game framerate"), _T("ShowFPS"), ID_WINDOWP_UI_CBOX_13, _T("0"), {_("requires \"Enable LuaWidgets\" to be set.\nWill be displayed in the bottom right corner")}}, //TODO is there even a reason that it should be disabled? {_("Fix rendering on alt-tab"), _T("FixAltTab"), ID_WINDOWP_UI_CBOX_14, _T("0"), {_("Do not change if not needed")}}, {_("Disallow helper AI's"), _T("NoHelperAIs"), ID_WINDOWP_UI_CBOX_15, _T("0"), {_("Disables Economy AI, etc.\nIf enabled might screw with LuaUi.")}}, {_("Enable scroll on window edge"), _T("WindowedEdgeMove"), ID_WINDOWP_UI_CBOX_16, _T("1"), {_("Scroll the screen when mouse reaches the screen's edge.")}}, {_("Invert Mouse"), _T("InvertMouse"), ID_WINDOWP_UI_CBOX_17, _T("0"), {_("Inverts the Mouse Y-axis in FPS mode")}}, {_("Use Hardware Cursor"), _T("HardwareCursor"), ID_WINDOWP_UI_CBOX_18, _T("0"), {_("Use native OS mouse cursor (hardware accelerated)")}}, }; const category_sizes_map_type UI_CBOX_entry ( _T("UI_CBOX"), sizeof(UI_CBOX) / Control_size ); const Control MO_SLI[] = { {_("Overhead camera"), _T("OverheadScrollSpeed"), ID_MO_SLI_0, _T("10"), {_("set the scroll speed (mouse + keyboard) for this mode")}}, {_("Rotatable overhead camera"), _T("RotOverheadScrollSpeed"), ID_MO_SLI_1, _T("10") , {_("set the scroll speed (mouse + keyboard) for this mode")}}, {_("Total war camera"), _T("TWScrollSpeed"), ID_MO_SLI_2, _T("10") , {_("set the scroll speed (mouse + keyboard) for this mode")}}, {_("First person camera"), _T("FPSScrollSpeed"), ID_MO_SLI_3, _T("10") , {_("set the scroll speed (mouse + keyboard) for this mode")}}, {_("Free camera"), _T("CamFreeScrollSpeed"), ID_MO_SLI_4, _T("500.0") , {_("set the scroll speed (mouse + keyboard) for this mode")}} }; const category_sizes_map_type MO_SLI_entry ( _T("MO_SLI"), sizeof(MO_SLI) / Control_size ); const Control MO_SLI_EXT[] = { {_T(""), _T("OverheadEnabled"), -1, _T("1"), {_("Make this the default view when startins Spring.\n" "Can be changed ingame.")}}, {_T(""), _T("RotOverheadEnabled"), -1, _T("1"), {_("Make this the default view when startins Spring.\n" "Can be changed ingame.")}}, {_T(""), _T("TWEnabled"), -1, _T("1"), {_("Make this the default view when startins Spring.\n" "Can be changed ingame.")}}, {_T(""), _T("FPSEnabled"), -1, _T("1"), {_("Make this the default view when startins Spring.\n" "Can be changed ingame.")}}, {_T(""), _T("CamFreeEnabled"), -1, _T("0"), {_("Make this the default view when startins Spring.\n" "Can be changed ingame.")}}, }; const category_sizes_map_type MO_SLI_EXT_entry ( _T("MO_SLI_EXT"), sizeof(MO_SLI_EXT) / Control_size ); const Control DO_SLI[] = { {_("Console verbose level (0=min,10=max)"), _T("VerboseLevel"), ID_DO_SLI_0, _T(""), {_("How much information should be outputted?")}} }; const category_sizes_map_type DO_SLI_entry ( _T("DO_SLI"), sizeof(DO_SLI) / Control_size ); const Control DO_CBOX[] = { {_("Catch AI exceptions"), _T("CatchAIExceptions"), ID_WINDOWP_DO_CBOX_0, _T("1"), {_("disable for AI debugging")}} }; const category_sizes_map_type DO_CBOX_entry ( _T("DO_CBOX"), sizeof(DO_CBOX) / Control_size ); const Control WR_COMBOX[] = { {_("Basic"), _T("ReflectiveWater"), ID_WINDOWP_WR_COMBOX, _T("1"), {_("Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n")}} /*{_("reflective", "ReflectiveWater", ID_WINDOWP_WR_COMBOX_1, "1"}, {_("reflective + refractive", "ReflectiveWater", ID_WINDOWP_WR_COMBOX_2, "1"}, {_("dynamic", "ReflectiveWater", ID_WINDOWP_WR_COMBOX_3, "1"}*/ }; const category_sizes_map_type WR_COMBOX_entry ( _T("WR_COMBOX"), sizeof(WR_COMBOX) / Control_size ); const wxString WR_COMBOX_CHOICES[] = { _("Basic"), _("Reflective"), _("Reflective + refractive"), _("Dynamic"), _("Bump-mapped") }; const Control MO_CBOX[] = { {_("Invert mouse y-axis"), _T("InvertMouse"), ID_WINDOWC_MO_CBOX_0, _T("0"), {_("swap up/down with down/up")}}, {_("Mini-map 3-button mouse support"), _T("MiniMapFullProxy"), ID_WINDOWC_MO_CBOX_1, _T("1"), {_("if you don't want to able to use that button, disable it here")}} }; const category_sizes_map_type MO_CBOX_entry ( _T("MO_CBOX"), sizeof(MO_CBOX) / Control_size ); const Control MO_RBUT[] = { {_("Overhead"), _T("CamMode"), ID_WINDOWC_MO_RBUT_0, _T("5"), {_("Static bird's eye view")}}, {_("Rotatable overhead"), _T("CamMode"), ID_WINDOWC_MO_RBUT_1, _T("5"), {_("Same as overhead, but you can rotate around the z-axis")}}, {_("Total war"), _T("CamMode"), ID_WINDOWC_MO_RBUT_2, _T("5"), {_("top-view camera, which can be tilted on the X axis")}}, {_("First person"), _T("CamMode"), ID_WINDOWC_MO_RBUT_3, _T("5"), {_("Camera from unit's point of view")}}, {_("Free camera"), _T("CamMode"), ID_WINDOWC_MO_RBUT_4, _T("5"), {_("Modify the view anyway you want")}} }; const category_sizes_map_type MO_RBUT_entry ( _T("MO_RBUT"), sizeof(MO_RBUT) / Control_size ); const Control RC_TEXT[] = { {_T(""), _T("XResolution"), -1, _T(""), {_("screen width")}}, {_T(""), _T("YResolution"), -1, _T("") , {_("screen height")}} }; const category_sizes_map_type RC_TEXT_entry ( _T("RC_TEXT"), sizeof(RC_TEXT) / Control_size ); const Control W4_CONTROLS[] = { //booleans = checkboxes {_("Blur reflection"), _T("BumpWaterBlurReflection"), ID_W4_BumpWaterBlurReflection , _T("0"), {_T("")}}, {_("Use depth texture"), _T("BumpWaterUseDepthTexture"), ID_W4_BumpWaterUseDepthTexture , _T("1"), {_("enables smoother blending on coastlines")}}, {_("Shore waves"), _T("BumpWaterShoreWaves"), ID_W4_BumpWaterShoreWaves , _T("1"), {_("Enables shorewaves")}}, {_("Reflection"), _T("BumpWaterReflection"), ID_W4_BumpWaterReflection , _T("1"), {_("Turn on water reflections")}}, // select boxes {_("Reflection texture size"), _T("BumpWaterTexSizeReflection"), ID_W4_BumpWaterTexSizeReflection , _T("512"), {_T("")}}, {_("Refraction"), _T("BumpWaterRefraction"), ID_W4_BumpWaterRefraction , _T("1"), {_("Turn on water refractions.\n(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow)).")}}, // spin control {_("Anisotropy"), _T("BumpWaterAnisotropy"), ID_W4_BumpWaterAnisotropy , _T("0.0"), {_T("")}}, // {_T(""), _T(""), ID_W4_ , _T(""), {_T("")}}, // {_T(""), _T(""), ID_W4_ , _T(""), {_T("")}}, // {_T(""), _T(""), ID_W4_ , _T(""), {_T("")}}, // {_T(""), _T(""), ID_W4_ , _T(""), {_T("")}}, }; const wxString W4_REFRACTION_CHOICES[] = { _("off"), _("screencopy(fast)"), _("own rendering pass(slow)") }; const wxString W4_TEXSIZE_CHOICES[] = { _T("128"), _T("256"), _T("512"), _T("1024") }; const wxString SHADOW_CHOICES[] = { _T("disabled"), _T("off"), _T("on") }; const category_sizes_map_type W4_CONTROLS_entry ( _T("W4_CONTROLS"), sizeof(W4_CONTROLS) / Control_size ); const category_sizes_map_type entries_[] = { RC_TEXT_entry, MO_RBUT_entry, MO_CBOX_entry, WR_COMBOX_entry, DO_CBOX_entry, DO_SLI_entry, MO_SLI_EXT_entry, MO_SLI_entry, UI_CBOX_entry, QA_CBOX_entry, AO_SLI_entry, AO_SLI_entry, VO_SLI_EXT_entry, VO_SLI_entry, VO_RBUT_entry, VO_CBOX_entry, RO_SLI_entry, UI_ZOOM_entry, W4_CONTROLS_entry}; static category_sizes_map s_category_sizes ( entries_ , entries_ + sizeof(entries_) / sizeof(entries_[0]) ); #endif springlobby-0.169/src/springsettings/ctrlconstants.h.jinja0000600000176000000410000006121312105760300025440 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007-09 springsettings is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 springsettings. If not, see . **/ // Autohost // LODScale=1.000 // LODScaleReflection=1.000 // LODScaleRefraction=1.000 // LODScaleShadow=1.000 // MapArchives=1 // multiple maps per archive? // MetalMapPalette=0 // // FIXME: VSync Off=-1? #ifndef DEFS_HPP #define DEFS_HPP const unsigned int PWIN_SIZE_X = 895; const unsigned int PWIN_SIZE_Y = 830; const unsigned int CWIN_SIZE_X = 580; const unsigned int CWIN_SIZE_Y = 360; // ParentWin menu-item IDs const int ID_MENUITEM_SAVE = 50; const int ID_MENUITEM_RESET = 51; const int ID_MENUITEM_QUIT = 52; const int ID_MENUITEM_DISABLE_WARN = 53; const int ID_MENUITEM_MODE = 60; const int ID_MENUITEM_EXPERT = 62; const int ID_MENUITEM_SIMPLE = 61; const int ID_MENUITEM_HELP = 70; const int ID_MENUITEM_ABOUT = 71; const int ID_MENUITEM_CONTACT = 72; const int ID_MENUITEM_CREDITS = 73; const int ID_MENUITEM_BUGREPORT = 74; // ParentWin TextInput IDs const int ID_RES_CHOICES_LBOX_X = 1111; const int ID_RES_CHOICES_LBOX_Y = 1112; // ParentWin Rendering Options slider IDs const int ID_RO_SLI_0 = 100; const int ID_RO_SLI_1 = 101; const int ID_RO_SLI_2 = 102; const int ID_RO_SLI_3 = 103; const int ID_RO_SLI_4 = 104; const int ID_RO_SLI_5 = 105; const int ID_RO_SLI_6 = 106; const int ID_RO_SLI_7 = 107; const int ID_RO_SLI_8 = 108; // ParentWin Video Options checkbox IDs const int ID_WINDOWP_VO_CBOX_0 = 250; const int ID_WINDOWP_VO_CBOX_1 = 251; const int ID_WINDOWP_VO_CBOX_2 = 252; // ParentWin Video Options radiobutton IDs const int ID_WINDOWP_VO_RBUT_0 = 280; const int ID_WINDOWP_VO_RBUT_1 = 281; // ParentWin Video Options slider IDs const int ID_VO_SLI_0 = 200; // tab_simple controls const int ID_SIMPLE_QUAL_CBX = 390; const int ID_SIMPLE_DETAIL_CBX = 391; const int ID_SIMPLE_MODE_CBX = 392; const int ID_SIMPLE_GOEXPERT_BUT = 393; // UI Options checkbox IDs const int ID_WINDOWP_UI_CBOX_1 = 360; const int ID_WINDOWP_UI_CBOX_2 = 361; const int ID_WINDOWP_UI_CBOX_3 = 362; const int ID_WINDOWP_UI_CBOX_4 = 363; const int ID_WINDOWP_UI_CBOX_5 = 364; const int ID_WINDOWP_UI_CBOX_6 = 365; const int ID_WINDOWP_UI_CBOX_7 = 366; const int ID_WINDOWP_UI_CBOX_8 = 367; const int ID_WINDOWP_UI_CBOX_9 = 368; const int ID_WINDOWP_UI_CBOX_10 = 369; const int ID_WINDOWP_UI_CBOX_11 = 370; const int ID_WINDOWP_UI_CBOX_12 = 371; const int ID_WINDOWP_UI_CBOX_13 = 372; const int ID_WINDOWP_UI_CBOX_14 = 373; const int ID_WINDOWP_UI_CBOX_15 = 374; const int ID_WINDOWP_UI_CBOX_16 = 375; const int ID_WINDOWP_UI_CBOX_17 = 376; const int ID_WINDOWP_UI_CBOX_18 = 377; //Zoom opt const int ID_WINDOWP_UI_MW_SPD = 385; //QUALITY OPTIONS checkbox IDs const int ID_WINDOWP_QA_CBOX_0 = 300; const int ID_WINDOWP_QA_CBOX_1 = 301; const int ID_WINDOWP_QA_CBOX_2 = 302; const int ID_WINDOWP_QA_CBOX_3 = 303; const int ID_WINDOWP_QA_CBOX_4 = 304; const int ID_WINDOWP_QA_CBOX_5 = 305; const int ID_WINDOWP_QA_CBOX_6 = 306; const int ID_WINDOWP_QA_CBOX_7 = 307; const int ID_WINDOWP_QA_CBOX_8 = 308; const int ID_WINDOWP_QA_CBOX_9 = 309; const int ID_WINDOWP_QA_CBOX_10 = 310; const int ID_WINDOWP_QA_CBOX_11 = 311; const int ID_WINDOWP_WR_COMBOX = 320; // ParentWin Audio Options slider IDs const int ID_AO_SLI_0 = 400; const int ID_AO_SLI_1 = 401; const int ID_AO_SLI_2 = 402; const int ID_AO_SLI_3 = 403; const int ID_AO_SLI_4 = 404; const int ID_AO_SLI_5 = 405; const int ID_AO_SLI_6 = 406; // ParentWin Debug Options checkbox IDs const int ID_WINDOWP_DO_CBOX_0 = 540; // ParentWin Debug Options slider IDs const int ID_DO_SLI_0 = 500; // ParentWin Water Rendering radiobutton IDs const int ID_WINDOWP_WR_RBUT_0 = 550; const int ID_WINDOWP_WR_RBUT_1 = 551; const int ID_WINDOWP_WR_RBUT_2 = 552; const int ID_WINDOWP_WR_RBUT_3 = 553; // ChildWin Mouse Options checkbox IDs const int ID_WINDOWC_MO_CBOX_0 = 650; const int ID_WINDOWC_MO_CBOX_1 = 651; // ChildWin Mouse Options radiobutton IDs const int ID_WINDOWC_MO_RBUT_0 = 680; const int ID_WINDOWC_MO_RBUT_1 = 681; const int ID_WINDOWC_MO_RBUT_2 = 682; const int ID_WINDOWC_MO_RBUT_3 = 683; const int ID_WINDOWC_MO_RBUT_4 = 684; // ChildWin Mouse Options slider IDs const int ID_MO_SLI_0 = 660; const int ID_MO_SLI_1 = 661; const int ID_MO_SLI_2 = 662; const int ID_MO_SLI_3 = 663; const int ID_MO_SLI_4 = 664; // panel_paths ids const int ID_PATH_USYNC_BTN = 701; const int ID_PATH_OK_BTN = 702; //water 4 specific options const int ID_W4_BumpWaterBlurReflection = 720; const int ID_W4_BumpWaterUseDepthTexture = 721; const int ID_W4_BumpWaterShoreWaves = 722; const int ID_W4_BumpWaterReflection = 723; const int ID_W4_BumpWaterTexSizeReflection = 724; const int ID_W4_BumpWaterRefraction = 725; const int ID_W4_BumpWaterAnisotropy = 726; const int ID_SHADOW_CHOICES = 740; #define SLI_STYLE (wxSL_LABELS ) #define WX_DEF_V wxDefaultValidator const wxPoint WX_DEF_P(-1, -1); const wxSize WX_DEF_S(-1, -1); const wxSize WX_SLI_S(200, -1); const int UPDATE_W4_CONTROLS = 2003; const int UPDATE_VIDEO_MODE = 2002; const int UPDATE_QA_BOXES = 2001; const int UPDATE_ALL = 2000; const int UPDATE_EXPERTMODE_WARNING_ON_SIMPLETAB = 2003; #define configHandler (susynclib()) const wxSize TAB_SIZE (700,500); //#include #include //#include #include struct Control { const wxString lbl; const wxString key; int id; const wxString def; //default value for confighandler, not control const wxString tTip [1]; }; const int Control_size = sizeof(Control); typedef std::map category_sizes_map ; typedef category_sizes_map::value_type category_sizes_map_type; const Control UI_ZOOM[] = { {_("Scrollwheel speed"), _T("ScrollWheelSpeed"), ID_WINDOWP_UI_MW_SPD, _T("{{defaults['ScrollWheelSpeed']}}"), {_("Higher values mean faster zoom with mouse wheel.\n" "Negative values will invert zoom direction.\n" "Results may vary depending on camera mode!")} } }; const category_sizes_map_type UI_ZOOM_entry ( _T("UI_ZOOM"), sizeof(UI_ZOOM) / Control_size ); //TODO is max_texture stages obsolte? const Control RO_SLI[] = { {_("Shadow-map size"), _T("ShadowMapSize"), ID_RO_SLI_0, _T("{{defaults['ShadowMapSize']}}"), {_("higher value = better looking shadows\n" "possible values: 1024, 2048, 4096, 8192")} }, {_("Tree view-distance"), _T("TreeRadius"), ID_RO_SLI_1, _T("{{defaults['TreeRadius']}}"), {_("sets the maximum distance at which trees will still be rendered")} }, {_("Terrain detail"), _T("GroundDetail"), ID_RO_SLI_2, _T("{{defaults['GroundDetail']}}"), {_("higher value = more terrain details")} }, {_("Unit LOD distance"), _T("UnitLodDist"), ID_RO_SLI_3, _T("{{defaults['UnitLodDist']}}"), {_("higher value = units will remain detailed even when zooming out")} }, {_("Grass detail"), _T("GrassDetail"), ID_RO_SLI_4, _T("{{defaults['GrassDetail']}}"), {_("higher value = more detailed grass")} }, {_("Ground decals"), _T("GroundDecals"), ID_RO_SLI_5, _T("{{defaults['GroundDecals']}}"), {_("settings higher than 1 might have unwelcome side-effects / be very resource hungry")} }, {_("Unit icon distance"), _T("UnitIconDist"), ID_RO_SLI_6, _T("{{defaults['UnitIconDist']}}"), {_("determines at which range units are still fully rendered\n" "higher value = greater range = more units rendered at the same time")} }, {_("Max simultaneous particles"), _T("MaxParticles"), ID_RO_SLI_7, _T("{{defaults['MaxParticles']}}") , {_("limits how many particles are displayed at the same time")}}, {_("Max nano simultaneous particles"), _T("MaxNanoParticles"), ID_RO_SLI_8, _T("{{defaults['MaxNanoParticles']}}") , {_("limits how many particles are displayed at the same time")}} // not needed atm {_("Max texture stages (SM3)"), _T("SM3MaxTextureStages"), ID_RO_SLI_8, "6" , {_("Decrease this if you are having bad perfomance on maps in sm3 format,\nincrease if sm3 maps look ugly.")}} }; const category_sizes_map_type RO_SLI_entry ( _T("RO_SLI"), sizeof(RO_SLI) / Control_size ); const Control VO_CBOX[] = { {_("Run full-screen"), _T("Fullscreen"), ID_WINDOWP_VO_CBOX_0, _T("{{defaults['Fullscreen']}}"), {_("run fullscreen or in a window?")}}, {_("Dual-screen mode"), _T("DualScreenMode"), ID_WINDOWP_VO_CBOX_1, _T("{{defaults['DualScreenMode']}}"), {_("if you have two monitors you can use both")}}, {_("Enable v-sync"), _T("VSync"), ID_WINDOWP_VO_CBOX_2, _T("{{defaults['VSync']}}"), {_("V-Sync on/off")}} }; const category_sizes_map_type VO_CBOX_entry ( _T("VO_BOX"), sizeof(VO_CBOX) / Control_size ); const Control VO_RBUT[] = { {_("16-bit Z-buffer"), _T("DepthBufferBits"), ID_WINDOWP_VO_RBUT_0, _T("{{defaults['DepthBufferBits']}}"), {_("placeholder")}}, {_("24-bit Z-buffer"), _T("DepthBufferBits"), ID_WINDOWP_VO_RBUT_1, _T("{{defaults['DepthBufferBits']}}"), {_("placeholder")}} }; const category_sizes_map_type VO_RBUT_entry ( _T("VO_RBUT"), sizeof(VO_RBUT) / Control_size ); const Control VO_SLI[] = { {_("Full-scene anti-aliasing samples"), _T("FSAALevel"), ID_VO_SLI_0, _T("{{defaults['FSAALevel']}}"), {_("how much anti-aliasing should be applied")}} }; const category_sizes_map_type VO_SLI_entry ( _T("VO_SLI"), sizeof(VO_SLI) / Control_size ); const Control VO_SLI_EXT[] = { {_T(""), _T("FSAA"), -1, _T("{{defaults['FSAA']}}"), {_T("")}} }; const category_sizes_map_type VO_SLI_EXT_entry ( _T("VO_SLI_EXT"), sizeof(VO_SLI_EXT) / Control_size ); const Control AO_SLI[] = { {_("Maximum simultaneous sounds"), _T("MaxSounds"), ID_AO_SLI_0, _T("{{defaults['MaxSounds']}}") , {_("maximum different sounds played at the same time\n" "Set this to zero to disable sound completely.")}}, {_("Master sound volume"), _T("snd_volmaster"), ID_AO_SLI_1, _T("{{defaults['snd_volmaster']}}"), {_("master sound volume")}}, {_("General sound volume"), _T("snd_general"), ID_AO_SLI_2, _T("{{defaults['snd_general']}}"), {_("general volume relative to master volume")}}, {_("Unit reply volume"), _T("snd_volunitreply"), ID_AO_SLI_3, _T("{{defaults['snd_volunitreply']}}") , {_("reply volume relative to master volume")}}, {_("Battle volume"), _T("snd_volbattle"), ID_AO_SLI_4, _T("{{defaults['snd_volbattle']}}") , {_("battle volume relative to global volume")}}, {_("User interface volume"), _T("snd_volui"), ID_AO_SLI_5, _T("{{defaults['snd_volui']}}") , {_("ui volume relative to global volume")}}, {_("Air Absorbtion factor"), _T("snd_airAbsorption"), ID_AO_SLI_6, _T("{{defaults['snd_airAbsorption']}}") , {_("How far sounds will have high frequencies dampened")}} }; const category_sizes_map_type AO_SLI_entry ( _T("AO_SLI"), sizeof(AO_SLI) / Control_size ); const Control QA_CBOX[] = { {_("Shadows (slow)"), _T("Shadows"), ID_WINDOWP_QA_CBOX_0, _T("{{defaults['Shadows']}}"), {_("enable shadows?")}}, {_("3D trees"), _T("3DTrees"), ID_WINDOWP_QA_CBOX_1, _T("{{defaults['3DTrees']}}"), {_("want better looking trees?\n" "needs Geforce 2/Radeon 8500/Intel 830 or later class graphic card")}}, {_("High-resolution clouds"), _T("AdvSky"), ID_WINDOWP_QA_CBOX_2, _T("{{defaults['AdvSky']}}"), {_("want better looking sky?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card")}}, {_("Dynamic clouds (slow)"), _T("DynamicSky"), ID_WINDOWP_QA_CBOX_3, _T("{{defaults['DynamicSky']}}"), {_("want moving clouds in the sky?")}}, {_("Reflective units"), _T("AdvUnitShading"), ID_WINDOWP_QA_CBOX_4, _T("{{defaults['AdvUnitShading']}}"), {_("shiny units?\n" "needs Geforce 5/Radeon 9500/Intel 915 or later class graphic card")}}, {_("Never use shaders when rendering SM3 maps"), _T("SM3ForceFallbackTex"), ID_WINDOWP_QA_CBOX_5, _T("{{defaults['SM3ForceFallbackTex']}}"), {_("problems with sm3 maps? enable this")}}, {_("Enable LuaShaders support"), _T("LuaShaders"), ID_WINDOWP_QA_CBOX_6, _T("{{defaults['LuaShaders']}}"), {_("makes for some cool effects")}}, {_("Use Pixelbuffer objects"), _T("UsePBO"), ID_WINDOWP_QA_CBOX_7, _T("{{defaults['UsePBO']}}"), {_("If supported, it speeds up the dynamic loading of terrain textures -> smoother camera movement")}}, {_("Compress textures"), _T("CompressTextures"),ID_WINDOWP_QA_CBOX_8, _T("{{defaults['CompressTextures']}}"), {_("Runtime texture compression. (Ideal for graphic cards with small amount of vram)")}}, {_("High-resolution LOS textures"), _T("HighResLos"), ID_WINDOWP_QA_CBOX_9, _T("{{defaults['HighResLos']}}"), {_("smoother Line of Sight overlays")}}, {_("Draw smooth points"), _T("SmoothPoints"), ID_WINDOWP_QA_CBOX_10, _T("{{defaults['SmoothPoints']}}"), {_("should points be anti-aliased")}}, {_("Draw smooth lines"), _T("SmoothLines"), ID_WINDOWP_QA_CBOX_11, _T("{{defaults['SmoothLines']}}"), {_("should lines be anti-aliased")}}, }; const category_sizes_map_type QA_CBOX_entry ( _T("QA_CBOX"), sizeof(QA_CBOX) / Control_size ); const Control UI_CBOX[] = { {_("Issue commands on mini-map"), _T("MiniMapFullProxy"), ID_WINDOWP_UI_CBOX_2, _T("{{defaults['MiniMapFullProxy']}}"), {_("Issue orders on the mini-map like you would ")}}, {_("Show commands on mini-map"), _T("MiniMapDrawCommands"), ID_WINDOWP_UI_CBOX_3, _T("{{defaults['MiniMapDrawCommands']}}"), {_("default value is \"on\"")}}, {_("Draw icons on mini-map"), _T("MiniMapIcons"), ID_WINDOWP_UI_CBOX_4, _T("{{defaults['MiniMapIcons']}}"), {_("default value is \"on\"")}}, {_("Draw markers on mini-map"), _T("MiniMapMarker"), ID_WINDOWP_UI_CBOX_5, _T("{{defaults['MiniMapMarker']}}"), {_("default value is \"on\"")}}, {_("Mini-map on left (single screen)"), _T("MinimapOnLeft"), ID_WINDOWP_UI_CBOX_6, _T("{{defaults['MinimapOnLeft']}}"), {_("left is the default")}}, {_("Mini-map on left (dual screen)"), _T("DualScreenMiniMapOnLeft"), ID_WINDOWP_UI_CBOX_7,_T("{{defaults['DualScreenMiniMapOnLeft']}}"), {_("left is the default")}}, {_("Simplified mini-map colors"), _T("SimpleMiniMapColors"), ID_WINDOWP_UI_CBOX_8, _T("{{defaults['SimpleMiniMapColors']}}"), {_("Use less colors")}}, {_("Team-colored nanospray"), _T("TeamNanoSpray"), ID_WINDOWP_UI_CBOX_9, _T("{{defaults['TeamNanoSpray']}}"), {_("Should nano particels be the color of your team?")}}, {_("Colorized elevation map"), _T("ColorElev"), ID_WINDOWP_UI_CBOX_10, _T("{{defaults['ColorElev']}}"), {_("makes differences in height clearer")}}, {_("Show in-game clock"), _T("ShowClock"), ID_WINDOWP_UI_CBOX_11, _T("{{defaults['ShowClock']}}"), {_("requires \"Enable LuaWidgets\" to be set.\nWill be displayed in the bottom right corner")}}, {_("Show in-game player information"), _T("ShowPlayerInfo"), ID_WINDOWP_UI_CBOX_12, _T("{{defaults['ShowPlayerInfo']}}"), {_("requires \"Enable LuaWidgets\" to be set.\nWill be displayed in the bottom right corner")}}, {_("Show in-game framerate"), _T("ShowFPS"), ID_WINDOWP_UI_CBOX_13, _T("{{defaults['ShowFPS']}}"), {_("requires \"Enable LuaWidgets\" to be set.\nWill be displayed in the bottom right corner")}}, //TODO is there even a reason that it should be disabled? {_("Fix rendering on alt-tab"), _T("FixAltTab"), ID_WINDOWP_UI_CBOX_14, _T("{{defaults['FixAltTab']}}"), {_("Do not change if not needed")}}, {_("Disallow helper AI's"), _T("NoHelperAIs"), ID_WINDOWP_UI_CBOX_15, _T("{{defaults['NoHelperAIs']}}"), {_("Disables Economy AI, etc.\nIf enabled might screw with LuaUi.")}}, {_("Enable scroll on window edge"), _T("WindowedEdgeMove"), ID_WINDOWP_UI_CBOX_16, _T("{{defaults['WindowedEdgeMove']}}"), {_("Scroll the screen when mouse reaches the screen's edge.")}}, {_("Invert Mouse"), _T("InvertMouse"), ID_WINDOWP_UI_CBOX_17, _T("{{defaults['InvertMouse']}}"), {_("Inverts the Mouse Y-axis in FPS mode")}}, {_("Use Hardware Cursor"), _T("HardwareCursor"), ID_WINDOWP_UI_CBOX_18, _T("{{defaults['HardwareCursor']}}"), {_("Use native OS mouse cursor (hardware accelerated)")}}, }; const category_sizes_map_type UI_CBOX_entry ( _T("UI_CBOX"), sizeof(UI_CBOX) / Control_size ); const Control MO_SLI[] = { {_("Overhead camera"), _T("OverheadScrollSpeed"), ID_MO_SLI_0, _T("{{defaults['OverheadScrollSpeed']}}"), {_("set the scroll speed (mouse + keyboard) for this mode")}}, {_("Rotatable overhead camera"), _T("RotOverheadScrollSpeed"), ID_MO_SLI_1, _T("{{defaults['RotOverheadScrollSpeed']}}") , {_("set the scroll speed (mouse + keyboard) for this mode")}}, {_("Total war camera"), _T("TWScrollSpeed"), ID_MO_SLI_2, _T("{{defaults['TWScrollSpeed']}}") , {_("set the scroll speed (mouse + keyboard) for this mode")}}, {_("First person camera"), _T("FPSScrollSpeed"), ID_MO_SLI_3, _T("{{defaults['FPSScrollSpeed']}}") , {_("set the scroll speed (mouse + keyboard) for this mode")}}, {_("Free camera"), _T("CamFreeScrollSpeed"), ID_MO_SLI_4, _T("{{defaults['CamFreeScrollSpeed']}}") , {_("set the scroll speed (mouse + keyboard) for this mode")}} }; const category_sizes_map_type MO_SLI_entry ( _T("MO_SLI"), sizeof(MO_SLI) / Control_size ); const Control MO_SLI_EXT[] = { {_T(""), _T("OverheadEnabled"), -1, _T("{{defaults['OverheadEnabled']}}"), {_("Make this the default view when startins Spring.\n" "Can be changed ingame.")}}, {_T(""), _T("RotOverheadEnabled"), -1, _T("{{defaults['RotOverheadEnabled']}}"), {_("Make this the default view when startins Spring.\n" "Can be changed ingame.")}}, {_T(""), _T("TWEnabled"), -1, _T("{{defaults['TWEnabled']}}"), {_("Make this the default view when startins Spring.\n" "Can be changed ingame.")}}, {_T(""), _T("FPSEnabled"), -1, _T("{{defaults['FPSEnabled']}}"), {_("Make this the default view when startins Spring.\n" "Can be changed ingame.")}}, {_T(""), _T("CamFreeEnabled"), -1, _T("{{defaults['CamFreeEnabled']}}"), {_("Make this the default view when startins Spring.\n" "Can be changed ingame.")}}, }; const category_sizes_map_type MO_SLI_EXT_entry ( _T("MO_SLI_EXT"), sizeof(MO_SLI_EXT) / Control_size ); const Control DO_SLI[] = { {_("Console verbose level (0=min,10=max)"), _T("VerboseLevel"), ID_DO_SLI_0, _T("{{defaults['VerboseLevel']}}"), {_("How much information should be outputted?")}} }; const category_sizes_map_type DO_SLI_entry ( _T("DO_SLI"), sizeof(DO_SLI) / Control_size ); const Control DO_CBOX[] = { {_("Catch AI exceptions"), _T("CatchAIExceptions"), ID_WINDOWP_DO_CBOX_0, _T("{{defaults['CatchAIExceptions']}}"), {_("disable for AI debugging")}} }; const category_sizes_map_type DO_CBOX_entry ( _T("DO_CBOX"), sizeof(DO_CBOX) / Control_size ); const Control WR_COMBOX[] = { {_("Basic"), _T("ReflectiveWater"), ID_WINDOWP_WR_COMBOX, _T("{{defaults['ReflectiveWater']}}"), {_("Depending on the power of your graphics card,\n" "selecting higher quality than basic can have a\n" "major impact on Spring's performance.\n")}} /*{_("reflective", "ReflectiveWater", ID_WINDOWP_WR_COMBOX_1, "1"}, {_("reflective + refractive", "ReflectiveWater", ID_WINDOWP_WR_COMBOX_2, "1"}, {_("dynamic", "ReflectiveWater", ID_WINDOWP_WR_COMBOX_3, "1"}*/ }; const category_sizes_map_type WR_COMBOX_entry ( _T("WR_COMBOX"), sizeof(WR_COMBOX) / Control_size ); const wxString WR_COMBOX_CHOICES[] = { _("Basic"), _("Reflective"), _("Reflective + refractive"), _("Dynamic"), _("Bump-mapped") }; const Control MO_CBOX[] = { {_("Invert mouse y-axis"), _T("InvertMouse"), ID_WINDOWC_MO_CBOX_0, _T("{{defaults['InvertMouse']}}"), {_("swap up/down with down/up")}}, {_("Mini-map 3-button mouse support"), _T("MiniMapFullProxy"), ID_WINDOWC_MO_CBOX_1, _T("{{defaults['MiniMapFullProxy']}}"), {_("if you don't want to able to use that button, disable it here")}} }; const category_sizes_map_type MO_CBOX_entry ( _T("MO_CBOX"), sizeof(MO_CBOX) / Control_size ); const Control MO_RBUT[] = { {_("Overhead"), _T("CamMode"), ID_WINDOWC_MO_RBUT_0, _T("{{defaults['CamMode']}}"), {_("Static bird's eye view")}}, {_("Rotatable overhead"), _T("CamMode"), ID_WINDOWC_MO_RBUT_1, _T("{{defaults['CamMode']}}"), {_("Same as overhead, but you can rotate around the z-axis")}}, {_("Total war"), _T("CamMode"), ID_WINDOWC_MO_RBUT_2, _T("{{defaults['CamMode']}}"), {_("top-view camera, which can be tilted on the X axis")}}, {_("First person"), _T("CamMode"), ID_WINDOWC_MO_RBUT_3, _T("{{defaults['CamMode']}}"), {_("Camera from unit's point of view")}}, {_("Free camera"), _T("CamMode"), ID_WINDOWC_MO_RBUT_4, _T("{{defaults['CamMode']}}"), {_("Modify the view anyway you want")}} }; const category_sizes_map_type MO_RBUT_entry ( _T("MO_RBUT"), sizeof(MO_RBUT) / Control_size ); const Control RC_TEXT[] = { {_T(""), _T("XResolution"), -1, _T("{{defaults['']}}"), {_("screen width")}}, {_T(""), _T("YResolution"), -1, _T("{{defaults['']}}") , {_("screen height")}} }; const category_sizes_map_type RC_TEXT_entry ( _T("RC_TEXT"), sizeof(RC_TEXT) / Control_size ); const Control W4_CONTROLS[] = { //booleans = checkboxes {_("Blur reflection"), _T("BumpWaterBlurReflection"), ID_W4_BumpWaterBlurReflection , _T("{{defaults['BumpWaterBlurReflection']}}"), {_T("")}}, {_("Use depth texture"), _T("BumpWaterUseDepthTexture"), ID_W4_BumpWaterUseDepthTexture , _T("{{defaults['BumpWaterUseDepthTexture']}}"), {_("enables smoother blending on coastlines")}}, {_("Shore waves"), _T("BumpWaterShoreWaves"), ID_W4_BumpWaterShoreWaves , _T("{{defaults['BumpWaterShoreWaves']}}"), {_("Enables shorewaves")}}, {_("Reflection"), _T("BumpWaterReflection"), ID_W4_BumpWaterReflection , _T("{{defaults['BumpWaterReflection']}}"), {_("Turn on water reflections")}}, // select boxes {_("Reflection texture size"), _T("BumpWaterTexSizeReflection"), ID_W4_BumpWaterTexSizeReflection , _T("{{defaults['BumpWaterTexSizeReflection']}}"), {_T("")}}, {_("Refraction"), _T("BumpWaterRefraction"), ID_W4_BumpWaterRefraction , _T("{{defaults['BumpWaterRefraction']}}"), {_("Turn on water refractions.\n(0:=off, 1:=screencopy(fast), 2:=own rendering pass(slow)).")}}, // spin control {_("Anisotropy"), _T("BumpWaterAnisotropy"), ID_W4_BumpWaterAnisotropy , _T("{{defaults['BumpWaterAnisotropy']}}"), {_T("")}}, // {_T(""), _T(""), ID_W4_ , _T(""), {_T("")}}, // {_T(""), _T(""), ID_W4_ , _T(""), {_T("")}}, // {_T(""), _T(""), ID_W4_ , _T(""), {_T("")}}, // {_T(""), _T(""), ID_W4_ , _T(""), {_T("")}}, }; const wxString W4_REFRACTION_CHOICES[] = { _("off"), _("screencopy(fast)"), _("own rendering pass(slow)") }; const wxString W4_TEXSIZE_CHOICES[] = { _T("128"), _T("256"), _T("512"), _T("1024") }; const wxString SHADOW_CHOICES[] = { _T("disabled"), _T("off"), _T("on") }; const category_sizes_map_type W4_CONTROLS_entry ( _T("W4_CONTROLS"), sizeof(W4_CONTROLS) / Control_size ); const category_sizes_map_type entries_[] = { RC_TEXT_entry, MO_RBUT_entry, MO_CBOX_entry, WR_COMBOX_entry, DO_CBOX_entry, DO_SLI_entry, MO_SLI_EXT_entry, MO_SLI_entry, UI_CBOX_entry, QA_CBOX_entry, AO_SLI_entry, AO_SLI_entry, VO_SLI_EXT_entry, VO_SLI_entry, VO_RBUT_entry, VO_CBOX_entry, RO_SLI_entry, UI_ZOOM_entry, W4_CONTROLS_entry}; static category_sizes_map s_category_sizes ( entries_ , entries_ + sizeof(entries_) / sizeof(entries_[0]) ); #endif springlobby-0.169/src/springsettings/frame.cpp0000600000176000000410000002562712105760300023103 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007 Original work by Kloot cross-plattform/UI adaptation and currently maintained by koshi (Ren� Milk) visit http://springrts.com/phpbb/viewtopic.php?t=12104 for more info/help SpringLobby 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. springsettings 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 springsettings. If not, see . **/ #include #include #include #include "frame.h" #include "../settings.h" #include "../springunitsync.h" #include "../mainwindow.h" #include "tab_render_detail.h" #include "tab_quality_video.h" #include "tab_abstract.h" #include "tab_audio.h" #include "hotkeys/hotkey_panel.h" #include "tab_ui.h" #include "tab_simple.h" #include "ctrlconstants.h" #include "panel_pathoption.h" #include "../utils/customdialogs.h" #include "../utils/controls.h" #include "../images/springsettings.xpm" #include "helpmenufunctions.h" #include "se_utils.h" #include "../customizations.h" #include "../utils/platform.h" #ifndef SPRINGSETTINGS_STANDALONE #include "../mainwindow.h" #endif const wxString simpleTabCap= _("Combined Options"); const wxString qualityTabCap= _("Render quality / Video mode"); const wxString detailTabCap = _("Render detail"); const wxString uiTabCap= _("UI options"); const wxString audioTabCap = _("Audio"); const wxString hotkeyTabCap = _("Hotkeys"); const wxString expertModeWarning = _("Changes made on Quality/Detail tab in expert mode\n" "will be lost if you change simple options again.\n" "Also these changes WILL NOT be reflected by the \n" "selected choices on the Combined options tab.\n" "(this message can be disabled in the \"File\" menu)"); BEGIN_EVENT_TABLE(settings_frame,wxFrame) EVT_CLOSE(settings_frame::OnClose) EVT_MENU(wxID_ANY,settings_frame::OnMenuChoice) EVT_SET_FOCUS( settings_frame::OnSetFocus) EVT_KILL_FOCUS( settings_frame::OnKillFocus ) END_EVENT_TABLE() settings_frame::settings_frame(wxWindow *parent, const wxString &title, wxWindowID id) : wxFrame(parent, id, title ), WindowAttributesPickle( _T("SETTINGSFRAME"), this, wxSize( DEFSETT_SW_WIDTH, DEFSETT_SW_HEIGHT ) ), simpleTab(0), uiTab(0), audioTab(0), detailTab(0), qualityTab(0), hotkeyTab(0), settingsIcon( new wxIcon(springsettings_xpm) ), m_has_focus(true) { SetIcons( SLcustomizations().GetAppIconBundle() ); alreadyCalled = false; parentWindow = parent; if ( !usync().IsLoaded() ) usync().ReloadUnitSyncLib(); notebook = new wxNotebook(this, ID_OPTIONS); // notebook->SetFont(wxFont(8, wxSWISS, wxNORMAL,wxNORMAL, false, _T("Tahoma"))); if (abstract_panel::loadValuesIntoMap()) { CreateGUIControls(); initMenuBar(); } else { notebook->AddPage(new PathOptionPanel(notebook,this),_("Error!")); } Layout(); Center(); if ( !parentWindow ) UpdateMainAppHasFocus(m_has_focus); // only do if not being a slave of main SL app } void settings_frame::buildGuiFromErrorPanel() { notebook->DeletePage(0); //to be safe we'll try again if (abstract_panel::loadValuesIntoMap()) { CreateGUIControls(); initMenuBar(); } else { notebook->AddPage(new PathOptionPanel(notebook,this),_("Error!")); } } settings_frame::~settings_frame() { } void settings_frame::OnSetFocus(wxFocusEvent&) { m_has_focus = true; UpdateMainAppHasFocus(m_has_focus); } void settings_frame::OnKillFocus(wxFocusEvent&) { m_has_focus = false; UpdateMainAppHasFocus(m_has_focus); } void settings_frame::handleExternExit() { if ( !alreadyCalled){ alreadyCalled = true; if (settingsChangedAbstract()) { int choice = customMessageBox(SS_MAIN_ICON,_("Save Spring settings before exiting?"), _("Confirmation needed"), wxYES|wxNO |wxICON_QUESTION); if ( choice == wxYES) { saveSettingsAbstract(); if (simpleTab!=0) simpleTab->saveCbxChoices(); } } } sett().SaveSettings(); } void settings_frame::doQuit() { sett().SaveSettings(); Destroy(); #ifndef SPRINGSETTINGS_STANDALONE //we can only compile this in non-standalone MainWindow* m = dynamic_cast(m_parent); if (m) { m->se_frame_active = false; } #endif } void settings_frame::handleExit() { if (settingsChangedAbstract()) { int action = customMessageBox(SS_MAIN_ICON,_("Save Spring settings before exiting?"), _("Confirmation needed"),wxYES_NO|wxCANCEL|wxICON_QUESTION ); switch (action) { case wxYES: if (saveSettingsAbstract()) (abstract_panel::settingsChanged) = false; if (simpleTab!=0) simpleTab->saveCbxChoices(); case wxNO: doQuit(); return; case wxCANCEL: default: return; } } else { doQuit(); return; } } void settings_frame::CreateGUIControls() { switch(sett().getMode()){ case SET_MODE_EXPERT: qualityTab = new tab_quality_video(notebook,ID_QUALITY_VIDEO); detailTab = new tab_render_detail(notebook,ID_RENDER_DETAIL); uiTab = new tab_ui(notebook,ID_UI); audioTab = new audio_panel(notebook,ID_AUDIO); hotkeyTab = new hotkey_panel(notebook, ID_HOTKEY); simpleTab = 0; notebook->AddPage(uiTab, uiTabCap); notebook->AddPage(qualityTab, qualityTabCap); notebook->AddPage(detailTab, detailTabCap); notebook->AddPage(audioTab,audioTabCap); notebook->AddPage(hotkeyTab,hotkeyTabCap); break; default: case SET_MODE_SIMPLE: simpleTab = new tab_simple(this,notebook,ID_SIMPLE); uiTab = new tab_ui(notebook,ID_UI); notebook->AddPage(simpleTab,simpleTabCap); notebook->AddPage(uiTab, uiTabCap); SetTitle(_("SpringSettings (simple mode)")); break; } notebook->SetSelection(0); abstract_panel::settingsChanged = false; } void settings_frame::initMenuBar() { menuFile = new wxMenu(); menuFile->Append(ID_MENUITEM_SAVE, _("Save settings")); menuFile->Append(ID_MENUITEM_RESET, _("Reset settings to default values")); menuFile->AppendCheckItem(ID_MENUITEM_DISABLE_WARN, _("Disable expert mode warning")); menuFile->AppendSeparator(); menuFile->Append(ID_MENUITEM_QUIT, _("Quit")); menuFile->Check(ID_MENUITEM_DISABLE_WARN,sett().getDisableWarning()); menuMode = new wxMenu(); menuMode->AppendRadioItem(ID_MENUITEM_SIMPLE,_("Simple (few options)")); menuMode->AppendRadioItem(ID_MENUITEM_EXPERT,_("Expert (all options")); menuHelp = new wxMenu(); menuHelp->Append(ID_MENUITEM_ABOUT,_("About")); menuHelp->Append(ID_MENUITEM_CONTACT, _("Contact")); menuHelp->Append(ID_MENUITEM_CREDITS, _("Credits")); menuHelp->Append(ID_MENUITEM_BUGREPORT, _("Report a bug")); switch(sett().getMode()){ case SET_MODE_EXPERT: { menuMode->Check(ID_MENUITEM_EXPERT,true); } break; default: case SET_MODE_SIMPLE: { menuMode->Check(ID_MENUITEM_SIMPLE,true); } break; } wxMenuBar* menuBar = new wxMenuBar(); menuBar->Append(menuFile, _("File")); menuBar->Append(menuMode, _("Mode")); menuBar->Append(menuHelp, _("Info/Help")); //TODO PROFILES!!! SetMenuBar(menuBar); } void settings_frame::OnMenuChoice(wxCommandEvent& event) { switch (event.GetId()) { case ID_MENUITEM_SAVE: if (saveSettingsAbstract()) (abstract_panel::settingsChanged) = false; if (simpleTab!=0) simpleTab->saveCbxChoices(); break; case ID_MENUITEM_QUIT: handleExit(); break; case ID_MENUITEM_RESET: if ((customMessageBox(SS_MAIN_ICON,_("Reset ALL settings to default values?"), _("Confirmation needed"), wxYES_NO)) == wxYES) { resetSettings(); } break; case ID_MENUITEM_SIMPLE: if (sett().getMode()==SET_MODE_EXPERT) { sett().setMode(SET_MODE_SIMPLE); simpleTab = new tab_simple(this,notebook,ID_SIMPLE); notebook->InsertPage(0,simpleTab,simpleTabCap); simpleTab->updateControls(UPDATE_ALL); //if not on ui page goto simple if (notebook->GetSelection()!=1) notebook->SetSelection(0); notebook->DeletePage(5); notebook->DeletePage(4); notebook->DeletePage(3); notebook->DeletePage(2); qualityTab = 0; detailTab = 0; audioTab = 0; hotkeyTab = 0; SetTitle(GetAppName() + _("(simple mode)")); if (!sett().getDisableWarning()){ customMessageBox(SS_MAIN_ICON,expertModeWarning, _("Hint"), wxOK); } } break; case ID_MENUITEM_EXPERT: if (sett().getMode()==SET_MODE_SIMPLE) { switchToExpertMode(); } break; case ID_MENUITEM_DISABLE_WARN: sett().setDisableWarning(menuFile->IsChecked(ID_MENUITEM_DISABLE_WARN)); break; case ID_MENUITEM_ABOUT: showAbout(); break; case ID_MENUITEM_CREDITS: showCredits(); break; case ID_MENUITEM_CONTACT: openContactPage(); break; case ID_MENUITEM_BUGREPORT: openNewTicket(); break; } } void settings_frame::resetSettings() { abstract_panel::loadDefaults(); updateAllControls(); } void settings_frame::switchToExpertMode() { sett().setMode(SET_MODE_EXPERT); menuMode->Check(ID_MENUITEM_EXPERT,true); qualityTab = new tab_quality_video(notebook,ID_QUALITY_VIDEO); detailTab = new tab_render_detail(notebook,ID_RENDER_DETAIL); audioTab = new audio_panel(notebook,ID_AUDIO); hotkeyTab = new hotkey_panel(notebook,ID_HOTKEY); notebook->AddPage(qualityTab, qualityTabCap); notebook->AddPage(detailTab, detailTabCap); notebook->AddPage(audioTab,audioTabCap); notebook->AddPage(hotkeyTab,hotkeyTabCap); notebook->DeletePage(0); simpleTab = 0; SetTitle(GetAppName() + _("(expert mode)")); /*uiTab->updateControls(UPDATE_ALL); detailTab->updateControls(UPDATE_ALL); qualityTab->updateControls(UPDATE_ALL); audioTab->updateControls(UPDATE_ALL); hotkeyTab->UpdateControls(UPDATE_ALL);*/ } void settings_frame::updateAllControls() { if (uiTab) uiTab->updateControls(UPDATE_ALL); if (simpleTab!=0) simpleTab->updateControls(UPDATE_ALL); if (detailTab) detailTab->updateControls(UPDATE_ALL); if (qualityTab) qualityTab->updateControls(UPDATE_ALL); if (audioTab) audioTab->updateControls(UPDATE_ALL); if (hotkeyTab) hotkeyTab->UpdateControls(UPDATE_ALL); } void settings_frame::OnClose(wxCloseEvent& /*unused*/) { if ( !alreadyCalled ){ handleExit(); } } bool settings_frame::saveSettingsAbstract() { if ( hotkeyTab ) hotkeyTab->SaveSettings(); return abstract_panel::saveSettings(); } bool settings_frame::settingsChangedAbstract() { bool rc = false; rc |= ( hotkeyTab && hotkeyTab->HasProfileBeenModifiedOrSelected() ); rc |= abstract_panel::settingsChanged; return rc; } springlobby-0.169/src/springsettings/frame.h0000600000176000000410000000551612105760300022543 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 springsettings. If not, see . **/ #ifndef __SETTINGS_FRAME_h__ #define __SETTINGS_FRAME_h__ #include #include "../gui/windowattributespickle.h" class wxNotebook; class tab_simple; class tab_ui; class tab_render_detail; class tab_quality_video; class audio_panel; class hotkey_panel; class abstract_panel; class wxMenu; class wxCommanEvent; class wxCloseEvent; class wxString; class wxWindow; class wxPoint; class wxSize; class wxFlexGridSizer; class wxNotebookEvent; class PathOptionPanel; class wxIcon; class settings_frame : public wxFrame, public WindowAttributesPickle { private: DECLARE_EVENT_TABLE() public: settings_frame(wxWindow *parent, const wxString &title, wxWindowID id = wxNewId()); virtual ~settings_frame(); void handleExternExit(); void switchToExpertMode(); void buildGuiFromErrorPanel(); void OnSetFocus(wxFocusEvent&); void OnKillFocus(wxFocusEvent&); private: tab_simple* simpleTab; tab_ui* uiTab; audio_panel* audioTab; tab_render_detail* detailTab; tab_quality_video* qualityTab; hotkey_panel* hotkeyTab; wxMenu* menuFile; wxMenu* menuMode; wxMenu* menuHelp; wxWindow* parentWindow; wxNotebook *notebook; wxFlexGridSizer *book_sizer; wxFlexGridSizer* book_sizer2; PathOptionPanel* pathOpt_panel; wxIcon* settingsIcon; void OnNBchange(wxNotebookEvent&); void initMenuBar(); void handleExit(); bool alreadyCalled; bool m_has_focus; enum { ////GUI Enum Control ID Start ID_HOTKEY = 1014, ID_UI = 1013, ID_QUALITY_VIDEO = 1012, ID_RENDER_DETAIL = 1011, ID_SIMPLE = 1010, //ID_DEBUG = 1009, ID_MOUSE = 1008, ID_AUDIO = 1007, ID_GENERAL = 1006, ID_VIDEO = 1005, ID_RENDERING = 1004, ID_OPTIONS = 1003, ////GUI Enum Control ID End ID_DUMMY_VALUE_ //don't remove this value unless you have other enum values }; void OnClose(wxCloseEvent& event); void OnMenuChoice(wxCommandEvent& event); void CreateGUIControls(); void resetSettings(); void updateAllControls(); bool saveSettingsAbstract(); //do not call abstract_panel::SaveSettings directly, call this instead! bool settingsChangedAbstract(); //do not query abstract_panel::settingschanged directly, use this instead! void doQuit(); }; #endif springlobby-0.169/src/springsettings/header_from_spring_config.py0000700000176000000410000000204612105760300027030 0ustar buildbotwww-data00000000000000#!/usr/bin/env python try: import simplejson as json except: import json import sys from jinja2 import Environment, FileSystemLoader conversion_map = { 'bool':int, 'int':int, 'std::string':str, 'float':float } def spring_default_config(input_fn): inputdata = json.load(open(input_fn)) filtered_data = dict() for key,value in inputdata.iteritems(): try: dtype = value['type'] default = value['defaultValue'] try: filtered_data[key] = conversion_map[dtype](default) except KeyError: print 'No conversion found for "%s" with type "%s"'%(key,dtype) except KeyError,k: print 'missing key %s in data for "%s" in file %s:%d'%(k,key,value['declarationFile'],value['declarationLine']) return filtered_data def output(defaults,output_fn): env = Environment(loader=FileSystemLoader('.')) template = env.get_template('ctrlconstants.h.jinja') with open(output_fn,'wb') as outfile: outfile.write( template.render(defaults=defaults ) ) if __name__ == '__main__': d = spring_default_config( sys.argv[1] ) output(d,'ctrlconstants.h')springlobby-0.169/src/springsettings/helpmenufunctions.cpp0000600000176000000410000000303312105760300025542 0ustar buildbotwww-data00000000000000#include "helpmenufunctions.h" #include #include "../images/springsettings.xpm" #include "../utils/customdialogs.h" #include "../utils/platform.h" #include "../updater/updatehelper.h" #include #include "se_utils.h" #include #include void showAbout() { wxAboutDialogInfo info; if ( IsSettingsStandAlone() ) { wxString name ( GetAppName() ); if ( GetAppName() != _T("SpringSettings") ) name += _T(" (SpringSettings)"); info.SetName(name); info.SetVersion(_T("0.2.2")); } else { info.SetName( GetAppName() ); info.SetVersion(GetSpringLobbyVersion()); } info.SetDescription(_("SpringSettings is a graphical frontend to the Settings of the Spring engine")); info.SetCopyright(_T("(C) 2007-2011 koshi ")); info.SetIcon(wxIcon(springsettings_xpm)); wxAboutBox(info); } void showCredits() { CreditsDialog dlg(CustomMessageBoxBase::getSettingspointer(),_T("Credits"),SS_MAIN_ICON); dlg.AddCredit(_("koshi"),_T("Principal Author")); dlg.AddCredit(_("Very Bad Soldier"),_T("wrote the excellent hotkey editor")); dlg.AddCredit(_("Kloot"),_T("wrote Settings++ from which SpringSettings originated")); dlg.AddCredit(_("The SpringLobby team"),_T("")); dlg.AddCredit(_("everyone reporting bugs/suggestions"),_T("")); dlg.ShowModal(); } void openNewTicket() { openUrl(_T("http://projects.springlobby.info/projects/springlobby/issues/new")); } void openContactPage() { openUrl(_T("http://projects.springlobby.info/projects/springlobby/wiki/Contact")); } springlobby-0.169/src/springsettings/helpmenufunctions.h0000600000176000000410000000207212105760300025211 0ustar buildbotwww-data00000000000000#ifndef HELPMENUFUNCTIONS_H_ #define HELPMENUFUNCTIONS_H_ /** \brief shows the about dialog in non-modal mode */ void showAbout(); /** \brief shows the credits dialog in modal mode */ void showCredits(); /** \brief opens trac in browser, presets owner and component */ void openNewTicket(); /** \brief opens http://trac.springlobby.info/wiki/Contact in browser */ void openContactPage(); #endif /*HELPMENUFUNCTIONS_H_*/ /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/springsettings/hotkeys/AddSelectionCmdDlg.cpp0000600000176000000410000003426112105760300027102 0ustar buildbotwww-data00000000000000#include "AddSelectionCmdDlg.h" #include "../../utils/customdialogs.h" AddSelectionCmdDlg::AddSelectionCmdDlg( wxWindow* parent ) : AddSelectionCmdDlgBase( parent ) { } wxString AddSelectionCmdDlg::validateInputFields() { long dummy = 0; if ( this->m_radioBtnSrcMouse->GetValue() ) { if ( this->m_textCtrlSrcMouseDist->GetLabel().ToLong( &dummy ) == false || dummy < 0 ) { return _("Invalid value for distance from mouse!"); } } if ( this->m_radioBtnSelCount->GetValue() ) { if ( this->m_textCtrlSelCount->GetLabel().ToLong( &dummy ) == false || dummy < 0 ) { return _("Invalid value for selection count!"); } } else if ( this->m_radioBtnSelPerc->GetValue() ) { if ( this->m_textCtrlSelPerc->GetLabel().ToLong( &dummy ) == false || dummy < 0 || dummy > 100 ) { return _("Invalid value for selection percentage!"); } } if ( this->m_textCtrlAbsHealth->IsEnabled() ) { if ( this->m_textCtrlAbsHealth->GetLabel().ToLong( &dummy ) == false || dummy < 0 ) { return _("Invalid value for absolute health!"); } } if ( this->m_textCtrlRelHealth->IsEnabled() ) { if ( this->m_textCtrlRelHealth->GetLabel().ToLong( &dummy ) == false || dummy < 0 ) { return _("Invalid value for relative health!"); } } if ( this->m_textCtrlWeapRange->IsEnabled() ) { if ( this->m_textCtrlWeapRange->GetLabel().ToLong( &dummy ) == false || dummy < 0 ) { return _("Invalid value for weapon range!"); } } if ( this->m_textCtrlAbsHealth->IsEnabled() ) { if ( this->m_textCtrlAbsHealth->GetLabel().ToLong( &dummy ) == false || dummy < 0 ) { return _("Invalid value for absolute health!"); } } return wxT(""); } wxString AddSelectionCmdDlg::getSourceString() const { wxString str; if ( this->m_radioBtnSrcMap->GetValue() ) { str += wxT("AllMap+"); } else if ( this->m_radioBtnSrcView->GetValue() ) { str += wxT("Visible+"); } else if ( this->m_radioBtnSrcSel->GetValue() ) { str += wxT("PrevSelection+"); } else if ( this->m_radioBtnSrcMouse->GetValue() ) { if ( this->m_checkBoxSrcDistCyl->GetValue() ) { str += wxT("FromMouseC_"); } else { str += wxT("FromMouse_"); } str += this->m_textCtrlSrcMouseDist->GetLabel(); str += wxT("+"); } return str; } wxString AddSelectionCmdDlg::getConditionsAndSelectString() const { wxString str; //Conditions if ( this->m_checkBoxBuilderInc->GetValue() ) { str += wxT("_Builder"); } else if ( this->m_checkBoxBuilderEx->GetValue() ) { str += wxT("_Not_Builder"); } if ( this->m_checkBoxBuildingInc->GetValue() ) { str += wxT("_Building"); } else if ( this->m_checkBoxBuildingEx->GetValue() ) { str += wxT("_Not_Building"); } if ( this->m_checkBoxComInc->GetValue() ) { str += wxT("_ManualFireUnit"); } else if ( this->m_checkBoxComEx->GetValue() ) { str += wxT("_Not_ManualFireUnit"); } if ( this->m_checkBoxTransInc->GetValue() ) { str += wxT("_Transport"); } else if ( this->m_checkBoxTransEx->GetValue() ) { str += wxT("_Not_Transport"); } if ( this->m_checkBoxAirInc->GetValue() ) { str += wxT("_Aircraft"); } else if ( this->m_checkBoxAirEx->GetValue() ) { str += wxT("_Not_Aircraft"); } if ( this->m_checkBoxWeaponsInc->GetValue() ) { str += wxT("_Weapons"); } else if ( this->m_checkBoxWeaponsEx->GetValue() ) { str += wxT("_Not_Weapons"); } if ( this->m_checkBoxWeapRangeEx->GetValue() ) { str += wxT("_Not"); } if ( this->m_checkBoxWeapRangeInc->GetValue() || this->m_checkBoxWeapRangeEx->GetValue() ) { str += wxT("_WeaponRange_"); str += this->m_textCtrlWeapRange->GetLabel(); } if ( this->m_checkBoxAbsHealthEx->GetValue() ) { str += wxT("_Not"); } if ( this->m_checkBoxAbsHealthInc->GetValue() || this->m_checkBoxAbsHealthEx->GetValue() ) { str += wxT("_AbsoluteHealth_"); str += this->m_textCtrlAbsHealth->GetLabel(); } if ( this->m_checkBoxRelHealthEx->GetValue() ) { str += wxT("_Not"); } if ( this->m_checkBoxRelHealthInc->GetValue() || this->m_checkBoxRelHealthEx->GetValue() ) { str += wxT("_RelativeHealth_"); str += this->m_textCtrlRelHealth->GetLabel(); } if ( this->m_checkBoxNameEx->GetValue() ) { str += wxT("_Not"); } if ( this->m_checkBoxNameInc->GetValue() || this->m_checkBoxNameEx->GetValue() ) { str += wxT("_NameContain_"); str += this->m_textCtrlName->GetLabel(); } if ( this->m_checkBoxCategoryEx->GetValue() ) { str += wxT("_Not"); } if ( this->m_checkBoxCategoryInc->GetValue() || this->m_checkBoxCategoryEx->GetValue() ) { str += wxT("_Category_"); str += this->m_textCtrlCategory->GetLabel(); } if ( this->m_checkBoxTypeSelInc->GetValue() ) { str += wxT("_InPrevSel"); } else if ( this->m_checkBoxTypeSelEx->GetValue() ) { str += wxT("_Not_InPrevSel"); } if ( this->m_checkBoxIdleInc->GetValue() ) { str += wxT("_Idle"); } else if ( this->m_checkBoxIdleEx->GetValue() ) { str += wxT("_Not_Idle"); } if ( this->m_checkBoxRadarInc->GetValue() ) { str += wxT("_Radar"); } else if ( this->m_checkBoxRadarEx->GetValue() ) { str += wxT("_Not_Radar"); } if ( this->m_checkBoxHotkeyInc->GetValue() ) { str += wxT("_InHotkeyGroup"); } else if ( this->m_checkBoxHotkeyEx->GetValue() ) { str += wxT("_Not_InHotkeyGroup"); } if ( this->m_checkBoxWaitingInc->GetValue() ) { str += wxT("_Waiting"); } else if ( this->m_checkBoxWaitingEx->GetValue() ) { str += wxT("_Not_Waiting"); } str += wxT("+"); if ( this->m_checkBoxClearPrevSel->GetValue() ) { str += wxT("_ClearSelection"); } //Source filter if ( this->m_radioBtnSelAll->GetValue() ) { str += wxT("_SelectAll"); } else if ( this->m_radioBtnSelOne->GetValue() ) { str += wxT("_SelectOne"); } else if ( this->m_radioBtnSelCount->GetValue() ) { str += wxT("_SelectNum_"); str += this->m_textCtrlSelCount->GetLabel(); } else if ( this->m_radioBtnSelPerc->GetValue() ) { str += wxT("_SelectPart_"); str += this->m_textCtrlSelPerc->GetLabel(); } str += wxT("+"); return str; } wxString AddSelectionCmdDlg::getCommandString() const { return this->getSourceString() + this->getConditionsAndSelectString(); } void AddSelectionCmdDlg::OnButtonAddClick( wxCommandEvent& /*event*/ ) { const wxString valResult = this->validateInputFields(); if ( valResult.size() == 0 ) { this->EndModal( wxID_OK ); } else { customMessageBox( SS_MAIN_ICON, valResult, _("Invalid input"), wxOK | wxICON_HAND ); } } void AddSelectionCmdDlg::controlCheckBoxEnable( wxCheckBox* pCheckbClicked, wxCheckBox* pCheckbSibling, wxTextCtrl* pTextCtrl ) { if ( pCheckbClicked->GetValue() ) { pCheckbSibling->SetValue( false ); if ( pTextCtrl ) { pTextCtrl->Enable( true ); } } else if ( pTextCtrl && !pCheckbSibling->GetValue() ) { pTextCtrl->Enable( false ); } } void AddSelectionCmdDlg::OnRadioBtnSrcMapClick( wxCommandEvent& /*event*/ ) { this->m_textCtrlSrcMouseDist->Enable( false ); this->m_checkBoxSrcDistCyl->Enable( false ); } void AddSelectionCmdDlg::OnRadioBtnSrcViewClick( wxCommandEvent& /*event*/ ) { this->m_textCtrlSrcMouseDist->Enable( false ); this->m_checkBoxSrcDistCyl->Enable( false ); } void AddSelectionCmdDlg::OnRadioBtnSrcSelClick( wxCommandEvent& /*event*/ ) { this->m_textCtrlSrcMouseDist->Enable( false ); this->m_checkBoxSrcDistCyl->Enable( false ); } void AddSelectionCmdDlg::OnRadioBtnSrcDistClick( wxCommandEvent& /*event*/ ) { this->m_textCtrlSrcMouseDist->Enable( true ); this->m_checkBoxSrcDistCyl->Enable( true ); } void AddSelectionCmdDlg::OnRadioBtnSelAllClick( wxCommandEvent& /*event*/ ) { this->m_textCtrlSelCount->Enable( false ); this->m_textCtrlSelPerc->Enable( false ); } void AddSelectionCmdDlg::OnRadioBtnSelCountClick( wxCommandEvent& /*event*/ ) { this->m_textCtrlSelCount->Enable( true ); this->m_textCtrlSelPerc->Enable( false ); } void AddSelectionCmdDlg::OnRadioBtnSelOneClick( wxCommandEvent& /*event*/ ) { this->m_textCtrlSelCount->Enable( false ); this->m_textCtrlSelPerc->Enable( false ); } void AddSelectionCmdDlg::OnRadioBtnSelPercClick( wxCommandEvent& /*event*/ ) { this->m_textCtrlSelCount->Enable( false ); this->m_textCtrlSelPerc->Enable( true ); } void AddSelectionCmdDlg::OnCheckBoxCondRelHealthIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxRelHealthInc, this->m_checkBoxRelHealthEx, m_textCtrlRelHealth ); } void AddSelectionCmdDlg::OnCheckBoxCondRelHealthExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxRelHealthEx, this->m_checkBoxRelHealthInc, m_textCtrlRelHealth ); } void AddSelectionCmdDlg::OnCheckBoxCondWeapRangeIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxWeapRangeInc, this->m_checkBoxWeapRangeEx, m_textCtrlWeapRange ); } void AddSelectionCmdDlg::OnCheckBoxCondWeapRangeExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxWeapRangeEx, this->m_checkBoxWeapRangeInc, m_textCtrlWeapRange ); } void AddSelectionCmdDlg::OnCheckBoxCondAbsHealthIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxAbsHealthInc, this->m_checkBoxAbsHealthEx, m_textCtrlAbsHealth ); } void AddSelectionCmdDlg::OnCheckBoxCondAbsHealthExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxAbsHealthEx, this->m_checkBoxAbsHealthInc, m_textCtrlAbsHealth ); } void AddSelectionCmdDlg::OnCheckBoxCondNameIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxNameInc, this->m_checkBoxNameEx, m_textCtrlName ); } void AddSelectionCmdDlg::OnCheckBoxCondNameExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxNameEx, this->m_checkBoxNameInc, m_textCtrlName ); } void AddSelectionCmdDlg::OnCheckBoxCondCategoryIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxCategoryInc, this->m_checkBoxCategoryEx, m_textCtrlCategory ); } void AddSelectionCmdDlg::OnCheckBoxCondCategoryExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxCategoryEx, this->m_checkBoxCategoryInc, m_textCtrlCategory ); } void AddSelectionCmdDlg::OnCheckBoxCondBuilderIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxBuilderInc, this->m_checkBoxBuilderEx, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondBuilderExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxBuilderEx, this->m_checkBoxBuilderInc, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondBuildingIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxBuildingInc, this->m_checkBoxBuildingEx, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondBuildingExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxBuildingEx, this->m_checkBoxBuildingInc, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondComIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxComInc, this->m_checkBoxComEx, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondComExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxComEx, this->m_checkBoxComInc, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondTypeSelIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxTypeSelInc, this->m_checkBoxTypeSelEx, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondTypeSelExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxTypeSelEx, this->m_checkBoxTypeSelInc, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondAirIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxAirInc, this->m_checkBoxAirEx, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondAirExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxAirEx, this->m_checkBoxAirInc, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondWeaponsIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxWeaponsInc, this->m_checkBoxWeaponsEx, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondWeaponsExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxWeaponsEx, this->m_checkBoxWeaponsInc, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondIdleIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxIdleInc, this->m_checkBoxIdleEx, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondIdleExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxIdleEx, this->m_checkBoxIdleInc, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondRadarIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxRadarInc, this->m_checkBoxRadarEx, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondRadarExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxRadarEx, this->m_checkBoxRadarInc, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondTransIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxTransInc, this->m_checkBoxTransEx, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondTransExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxTransEx, this->m_checkBoxTransInc, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondHotkeyIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxHotkeyInc, this->m_checkBoxHotkeyEx, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondHotkeyExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxHotkeyEx, this->m_checkBoxHotkeyInc, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondWaitingIncClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxWaitingInc, this->m_checkBoxWaitingEx, NULL ); } void AddSelectionCmdDlg::OnCheckBoxCondWaitingExClick( wxCommandEvent& /*event*/ ) { AddSelectionCmdDlg::controlCheckBoxEnable( this->m_checkBoxWaitingEx, this->m_checkBoxWaitingInc, NULL ); } springlobby-0.169/src/springsettings/hotkeys/AddSelectionCmdDlg.h0000600000176000000410000000633012105760300026543 0ustar buildbotwww-data00000000000000#ifndef __AddSelectionPanelDlg__ #define __AddSelectionPanelDlg__ #include "HotkeyForms.h" class AddSelectionCmdDlg : public AddSelectionCmdDlgBase { public: AddSelectionCmdDlg( wxWindow* parent ); wxString getCommandString() const; protected: wxString getSourceString() const; wxString getConditionsAndSelectString() const; wxString validateInputFields(); static void controlCheckBoxEnable( wxCheckBox* pCheckbClicked, wxCheckBox* pCheckbSibling, wxTextCtrl* pTextCtrl ); virtual void OnCheckBoxCondBuilderIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondBuilderExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondBuildingIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondBuildingExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondComIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondComExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondTypeSelIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondTypeSelExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondAirIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondAirExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondWeaponsIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondWeaponsExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondIdleIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondIdleExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondRadarIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondRadarExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondTransIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondTransExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondHotkeyIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondHotkeyExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondWaitingIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondWaitingExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondRelHealthIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondRelHealthExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondWeapRangeIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondWeapRangeExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondAbsHealthIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondAbsHealthExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondNameIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondNameExClick( wxCommandEvent& event ); virtual void OnCheckBoxCondCategoryIncClick( wxCommandEvent& event ); virtual void OnCheckBoxCondCategoryExClick( wxCommandEvent& event ); virtual void OnRadioBtnSrcMapClick( wxCommandEvent& event ); virtual void OnRadioBtnSrcViewClick( wxCommandEvent& event ); virtual void OnRadioBtnSrcSelClick( wxCommandEvent& event ); virtual void OnRadioBtnSrcDistClick( wxCommandEvent& event ); virtual void OnRadioBtnSelAllClick( wxCommandEvent& event ); virtual void OnRadioBtnSelCountClick( wxCommandEvent& event ); virtual void OnRadioBtnSelOneClick( wxCommandEvent& event ); virtual void OnRadioBtnSelPercClick( wxCommandEvent& event ); virtual void OnButtonAddClick( wxCommandEvent& event ); }; #endif //__AddSelectionPanelBase__ springlobby-0.169/src/springsettings/hotkeys/CMakeLists.txt0000600000176000000410000000036612105760300025524 0ustar buildbotwww-data00000000000000add_sources(SettingsSrc HotkeyForms.cpp AddSelectionCmdDlg.cpp commandlist.cpp hotkey_panel.cpp hotkey_parser.cpp KeynameConverter.cpp wxSpringCommand.cpp SpringDefaultProfile.cpp HotkeyTypes.cpp CommandOrderDlg.cpp ChangeMetaDlg.cpp )springlobby-0.169/src/springsettings/hotkeys/ChangeMetaDlg.cpp0000600000176000000410000000164212105760300026111 0ustar buildbotwww-data00000000000000#include "ChangeMetaDlg.h" #include "../../utils/customdialogs.h" #include "../../wxkeybinder/keybinder.h" ChangeMetaDlg::ChangeMetaDlg( const wxString& curMeta, wxWindow* parent ) : ChangeMetaDlgBase( parent ), m_curMetaKey( curMeta ), m_newMetaKey( curMeta ) { } void ChangeMetaDlg::OnInitDialog( wxInitDialogEvent& ) { m_buttonOk->Enable( false ); m_textCtrlCurKey->SetValue( m_curMetaKey ); m_ctrlNewKey->Connect( wxEVT_KEY_UP, wxCharEventHandler(ChangeMetaDlg::OnKeyPressed), NULL, this ); } void ChangeMetaDlg::OnKeyPressed(wxKeyEvent &) { bool enableOk = false; m_newMetaKey = m_curMetaKey; if ( m_ctrlNewKey->IsValidKeyComb() && ( m_ctrlNewKey->GetValue() != m_curMetaKey ) ) { m_newMetaKey = m_ctrlNewKey->GetValue(); enableOk = true; } m_buttonOk->Enable( enableOk ); } const wxString& ChangeMetaDlg::GetNewMetaKey() const { return m_newMetaKey; } springlobby-0.169/src/springsettings/hotkeys/ChangeMetaDlg.h0000600000176000000410000000105512105760300025554 0ustar buildbotwww-data00000000000000#ifndef __ChangeMetaDlg__ #define __ChangeMetaDlg__ #include "HotkeyForms.h" #include "HotkeyTypes.h" #include #define CHANGEMETADLG_KEY_PRESSED_ID 40001 class ChangeMetaDlg : public ChangeMetaDlgBase { public: ChangeMetaDlg( const wxString& curMeta, wxWindow* parent ); const wxString& GetNewMetaKey() const; protected: virtual void OnInitDialog( wxInitDialogEvent& event ); virtual void OnKeyPressed(wxKeyEvent &); wxString m_curMetaKey; wxString m_newMetaKey; }; #endif //__AddSelectionPanelBase__ springlobby-0.169/src/springsettings/hotkeys/CommandOrderDlg.cpp0000600000176000000410000000712412105760300026470 0ustar buildbotwww-data00000000000000#include "CommandOrderDlg.h" #include "../../utils/customdialogs.h" #include "../../wxkeybinder/keybinder.h" CommandOrderDlg::CommandOrderDlg( const wxString& key, const CmdSet& cmds, wxWindow* parent ) : CommandOrderDlgBase( parent ), m_key( key ), m_cmds( cmds ), m_normKeyCount(0) { } void CommandOrderDlg::OnInitDialog( wxInitDialogEvent& ) { this->updateOrderMap(); this->fillCommandList(); this->SetTitle( this->GetTitle() + wxT(" - Configure Key: ") + this->m_key ); } const CommandOrderDlg::ListIndexCmdMap& CommandOrderDlg::getOrderedCommands() const { return this->m_prioCmdMap; } void CommandOrderDlg::fillCommandList() { this->m_listBoxCommands->Clear(); for( size_t i=0; i < this->m_prioCmdMap.size(); ++i ) { wxString text = this->m_prioCmdMap[i].command; if ( this->m_prioCmdMap[i].any ) { text = wxT("(Any) ") + text; } this->m_listBoxCommands->Append( text ); } } void CommandOrderDlg::updateOrderMap() { typedef std::map SortedCmds; size_t listIdx = 0; m_normKeyCount = 0; { //add "normal"-keys first (do not show normal keys when user clicked an ANY-key) if ( !this->m_key.StartsWith( wxT("Any+") ) ) { SortedCmds tmp; for ( CmdSet::const_iterator iter = m_cmds.begin(); iter != m_cmds.end(); ++iter ) { for( int i = 0; i < (*iter)->GetShortcutCount(); ++i ) { const wxKeyBind* pKb = (*iter)->GetShortcut( i ); if ( !pKb->HasAnyModifier() && pKb->Match(this->m_key ) ) { tmp[pKb->GetOrderIndex()] = (*iter)->GetName(); ++m_normKeyCount; } } } for( SortedCmds::const_iterator iter = tmp.begin(); iter != tmp.end(); ++iter ) { this->m_prioCmdMap[listIdx++] = CmdInfo( iter->second, false, iter->first ); } } } { //add "any"-keys SortedCmds tmp; for ( CmdSet::const_iterator iter = m_cmds.begin(); iter != m_cmds.end(); ++iter ) { for( int i = 0; i < (*iter)->GetShortcutCount(); ++i ) { const wxKeyBind* pKb = (*iter)->GetShortcut( i ); if ( pKb->HasAnyModifier() && pKb->Match( this->m_key ) ) { tmp[pKb->GetOrderIndex()] = (*iter)->GetName(); } } } for( SortedCmds::const_iterator iter = tmp.begin(); iter != tmp.end(); ++iter ) { this->m_prioCmdMap[listIdx++] = CmdInfo( iter->second, true, iter->first ); } } } void CommandOrderDlg::OnButtonUpClick( wxCommandEvent& ) { const int selIdx = this->m_listBoxCommands->GetSelection(); if ( selIdx == wxNOT_FOUND || selIdx <= 0 ) { return; } if ( selIdx == static_cast( m_normKeyCount ) ) { //we cant move up the command into "normal"-area return; } assert( selIdx > 0 ); const CmdInfo tmp = this->m_prioCmdMap[selIdx-1]; this->m_prioCmdMap[selIdx-1] = this->m_prioCmdMap[selIdx]; this->m_prioCmdMap[selIdx] = tmp; this->fillCommandList(); this->m_listBoxCommands->Select( selIdx - 1 ); } void CommandOrderDlg::OnButtonDownClick( wxCommandEvent& ) { const int selIdx = this->m_listBoxCommands->GetSelection(); if ( selIdx == wxNOT_FOUND || static_cast( selIdx+2 ) > this->m_listBoxCommands->GetCount() ) { return; } if ( ( selIdx + 1) == static_cast( m_normKeyCount ) ) { //we cant move up the any-command into "any"-area return; } //remember to convert to 1-based order indices const CmdInfo tmp = this->m_prioCmdMap[selIdx]; this->m_prioCmdMap[selIdx] = this->m_prioCmdMap[selIdx+1]; this->m_prioCmdMap[selIdx+1] = tmp; this->fillCommandList(); this->m_listBoxCommands->Select( selIdx + 1 ); } springlobby-0.169/src/springsettings/hotkeys/CommandOrderDlg.h0000600000176000000410000000235612105760300026137 0ustar buildbotwww-data00000000000000#ifndef __CommandOrderDlg__ #define __CommandOrderDlg__ #include "HotkeyForms.h" #include "HotkeyTypes.h" #include class CommandOrderDlg : public CommandOrderDlgBase { public: CommandOrderDlg( const wxString& command, const CmdSet& cmds, wxWindow* parent ); struct CmdInfo { CmdInfo() : globalSortIdx(0), any(false) {} CmdInfo(const wxString& cmdIn, bool anyIn, size_t globSortIdxIn ) : command(cmdIn), globalSortIdx(globSortIdxIn), any(anyIn) { } wxString command; size_t globalSortIdx; bool any; }; typedef std::pair PrioCommandPair; //couples the order index with the command typedef std::map ListIndexCmdMap; const ListIndexCmdMap& getOrderedCommands() const; protected: void updateOrderMap(); void fillCommandList(); virtual void OnInitDialog( wxInitDialogEvent& event ); virtual void OnButtonUpClick( wxCommandEvent& event ); virtual void OnButtonDownClick( wxCommandEvent& event ); const wxString m_key; const CmdSet& m_cmds; size_t m_normKeyCount; //track any count to know how the list can be modified ListIndexCmdMap m_prioCmdMap; }; #endif //__AddSelectionPanelBase__ springlobby-0.169/src/springsettings/hotkeys/HotkeyException.h0000600000176000000410000000100312105760300026244 0ustar buildbotwww-data00000000000000#ifndef __HOTKEYEXCEPTION_h__ #define __HOTKEYEXCEPTION_h__ #include #include #include "../../utils/conversion.h" class HotkeyException : public std::exception { public: HotkeyException( const wxString& message ) : m_message( message ) {} virtual ~HotkeyException() throw() {} const char* what() const throw() { return "Use HotkeyException::getMessage() instead"; } const wxString& getMessage() const { return this->m_message; } private: const wxString m_message; }; #endif springlobby-0.169/src/springsettings/hotkeys/HotkeyForms.cpp0000600000176000000410000010462212105760300025742 0ustar buildbotwww-data00000000000000/////////////////////////////////////////////////////////////////////////// // C++ code generated with wxFormBuilder (version Apr 16 2008) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// #include "HotkeyForms.h" /////////////////////////////////////////////////////////////////////////// AddSelectionCmdDlgBase::AddSelectionCmdDlgBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { this->SetSizeHints( wxDefaultSize, wxDefaultSize ); wxFlexGridSizer* fgSizer5; fgSizer5 = new wxFlexGridSizer( 2, 1, 0, 0 ); fgSizer5->SetFlexibleDirection( wxBOTH ); fgSizer5->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); wxFlexGridSizer* fgSizer2; fgSizer2 = new wxFlexGridSizer( 2, 3, 0, 0 ); fgSizer2->SetFlexibleDirection( wxBOTH ); fgSizer2->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); wxStaticBoxSizer* sbSizer8; sbSizer8 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxT("Source") ), wxVERTICAL ); wxFlexGridSizer* fgSizer51; fgSizer51 = new wxFlexGridSizer( 2, 2, 0, 0 ); fgSizer51->SetFlexibleDirection( wxBOTH ); fgSizer51->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); m_radioBtnSrcMap = new wxRadioButton( this, wxID_ANY, wxT("Complete map"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); m_radioBtnSrcMap->SetValue( true ); fgSizer51->Add( m_radioBtnSrcMap, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_radioBtnSrcView = new wxRadioButton( this, wxID_ANY, wxT("All in view"), wxDefaultPosition, wxDefaultSize, 0 ); fgSizer51->Add( m_radioBtnSrcView, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_radioBtnSrcSel = new wxRadioButton( this, wxID_ANY, wxT("Previous selection"), wxDefaultPosition, wxDefaultSize, 0 ); fgSizer51->Add( m_radioBtnSrcSel, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); wxBoxSizer* bSizer3; bSizer3 = new wxBoxSizer( wxHORIZONTAL ); m_radioBtnSrcMouse = new wxRadioButton( this, wxID_ANY, wxT("Max. distance from mouse"), wxDefaultPosition, wxDefaultSize, 0 ); bSizer3->Add( m_radioBtnSrcMouse, 0, wxALIGN_CENTER|wxALL, 5 ); m_textCtrlSrcMouseDist = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 40,-1 ), wxTE_RIGHT ); m_textCtrlSrcMouseDist->Enable( false ); bSizer3->Add( m_textCtrlSrcMouseDist, 0, wxALL, 5 ); fgSizer51->Add( bSizer3, 1, wxEXPAND, 5 ); fgSizer51->Add( 0, 0, 1, wxEXPAND, 5 ); m_checkBoxSrcDistCyl = new wxCheckBox( this, wxID_ANY, wxT("Use Distance cylinder"), wxDefaultPosition, wxDefaultSize, 0 ); m_checkBoxSrcDistCyl->Enable( false ); fgSizer51->Add( m_checkBoxSrcDistCyl, 0, wxALL, 5 ); sbSizer8->Add( fgSizer51, 1, wxEXPAND, 5 ); fgSizer2->Add( sbSizer8, 1, wxALL|wxEXPAND, 5 ); wxStaticBoxSizer* sbSizer7; sbSizer7 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxT("Select") ), wxVERTICAL ); wxFlexGridSizer* fgSizer3; fgSizer3 = new wxFlexGridSizer( 2, 2, 0, 0 ); fgSizer3->SetFlexibleDirection( wxBOTH ); fgSizer3->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); m_radioBtnSelAll = new wxRadioButton( this, wxID_ANY, wxT("All"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); m_radioBtnSelAll->SetValue( true ); fgSizer3->Add( m_radioBtnSelAll, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); wxBoxSizer* bSizer1; bSizer1 = new wxBoxSizer( wxHORIZONTAL ); m_radioBtnSelCount = new wxRadioButton( this, wxID_ANY, wxT("Max. count"), wxDefaultPosition, wxDefaultSize, 0 ); bSizer1->Add( m_radioBtnSelCount, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_textCtrlSelCount = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 30,-1 ), wxTE_RIGHT ); m_textCtrlSelCount->Enable( false ); bSizer1->Add( m_textCtrlSelCount, 0, wxALL, 5 ); fgSizer3->Add( bSizer1, 1, wxEXPAND, 5 ); m_radioBtnSelOne = new wxRadioButton( this, wxID_ANY, wxT("One (go to)"), wxDefaultPosition, wxDefaultSize, 0 ); fgSizer3->Add( m_radioBtnSelOne, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); wxBoxSizer* bSizer2; bSizer2 = new wxBoxSizer( wxHORIZONTAL ); m_radioBtnSelPerc = new wxRadioButton( this, wxID_ANY, wxT("Percentage"), wxDefaultPosition, wxDefaultSize, 0 ); bSizer2->Add( m_radioBtnSelPerc, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_textCtrlSelPerc = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 30,-1 ), wxTE_RIGHT ); m_textCtrlSelPerc->Enable( false ); bSizer2->Add( m_textCtrlSelPerc, 0, wxALL, 5 ); m_staticText20 = new wxStaticText( this, wxID_ANY, wxT("%"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText20->Wrap( -1 ); bSizer2->Add( m_staticText20, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); fgSizer3->Add( bSizer2, 1, wxEXPAND, 5 ); m_checkBoxClearPrevSel = new wxCheckBox( this, wxID_ANY, wxT("Clear previous selection"), wxDefaultPosition, wxSize( -1,-1 ), 0 ); m_checkBoxClearPrevSel->SetValue(true); fgSizer3->Add( m_checkBoxClearPrevSel, 0, wxALL, 5 ); sbSizer7->Add( fgSizer3, 1, wxEXPAND, 5 ); fgSizer2->Add( sbSizer7, 1, wxALL|wxEXPAND, 5 ); fgSizer5->Add( fgSizer2, 1, wxEXPAND, 5 ); wxStaticBoxSizer* sbSizer9; sbSizer9 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxT("Conditions") ), wxVERTICAL ); wxFlexGridSizer* fgSizer6; fgSizer6 = new wxFlexGridSizer( 2, 7, 7, 0 ); fgSizer6->SetFlexibleDirection( wxBOTH ); fgSizer6->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); m_staticText9 = new wxStaticText( this, wxID_ANY, wxT("Include"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText9->Wrap( -1 ); fgSizer6->Add( m_staticText9, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); m_staticText11 = new wxStaticText( this, wxID_ANY, wxT("Exclude"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText11->Wrap( -1 ); fgSizer6->Add( m_staticText11, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); fgSizer6->Add( 255, 0, 1, wxEXPAND, 5 ); m_staticText12 = new wxStaticText( this, wxID_ANY, wxT("Include"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText12->Wrap( -1 ); fgSizer6->Add( m_staticText12, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); m_staticText13 = new wxStaticText( this, wxID_ANY, wxT("Exclude"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText13->Wrap( -1 ); fgSizer6->Add( m_staticText13, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); fgSizer6->Add( 0, 0, 1, wxEXPAND, 5 ); fgSizer6->Add( 0, 0, 1, wxEXPAND, 5 ); m_checkBoxBuilderInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxBuilderInc, 0, wxALIGN_CENTER|wxALL|wxALIGN_CENTER_VERTICAL, 5 ); m_checkBoxBuilderEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxBuilderEx, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); m_staticText14 = new wxStaticText( this, wxID_ANY, wxT("Builder"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText14->Wrap( -1 ); fgSizer6->Add( m_staticText14, 0, wxALL, 5 ); m_checkBoxBuildingInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxBuildingInc, 0, wxALIGN_CENTER|wxALL, 5 ); m_checkBoxBuildingEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxBuildingEx, 0, wxALIGN_CENTER|wxALL, 5 ); m_staticText15 = new wxStaticText( this, wxID_ANY, wxT("Building"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText15->Wrap( -1 ); fgSizer6->Add( m_staticText15, 0, wxALL, 5 ); fgSizer6->Add( 0, 0, 1, wxEXPAND, 5 ); m_checkBoxComInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxComInc, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); m_checkBoxComEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxComEx, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); m_staticText17 = new wxStaticText( this, wxID_ANY, wxT("Manual Fire Unit"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText17->Wrap( -1 ); fgSizer6->Add( m_staticText17, 0, wxALL, 5 ); m_checkBoxTypeSelInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxTypeSelInc, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); m_checkBoxTypeSelEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxTypeSelEx, 0, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_staticText18 = new wxStaticText( this, wxID_ANY, wxT("Type in selection"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText18->Wrap( -1 ); fgSizer6->Add( m_staticText18, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); fgSizer6->Add( 0, 0, 1, wxEXPAND, 5 ); m_checkBoxAirInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxAirInc, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); m_checkBoxAirEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxAirEx, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); m_staticText19 = new wxStaticText( this, wxID_ANY, wxT("Aircraft"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText19->Wrap( -1 ); fgSizer6->Add( m_staticText19, 0, wxALL, 5 ); m_checkBoxWaitingInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxWaitingInc, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); m_checkBoxWaitingEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxWaitingEx, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); m_staticText231 = new wxStaticText( this, wxID_ANY, wxT("Waiting"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText231->Wrap( -1 ); fgSizer6->Add( m_staticText231, 0, wxALL, 5 ); fgSizer6->Add( 0, 0, 1, wxEXPAND, 5 ); m_checkBoxWeaponsInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxWeaponsInc, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); m_checkBoxWeaponsEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxWeaponsEx, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); m_staticText21 = new wxStaticText( this, wxID_ANY, wxT("Weapons"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText21->Wrap( -1 ); fgSizer6->Add( m_staticText21, 0, wxALL, 5 ); m_checkBoxWeapRangeInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxWeapRangeInc, 0, wxALIGN_CENTER|wxALL, 5 ); m_checkBoxWeapRangeEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxWeapRangeEx, 0, wxALIGN_CENTER|wxALL, 5 ); m_staticText22 = new wxStaticText( this, wxID_ANY, wxT("Weapon range >"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText22->Wrap( -1 ); fgSizer6->Add( m_staticText22, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_textCtrlWeapRange = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), 0 ); m_textCtrlWeapRange->Enable( false ); fgSizer6->Add( m_textCtrlWeapRange, 0, wxALL, 5 ); m_checkBoxIdleInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxIdleInc, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); m_checkBoxIdleEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxIdleEx, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); m_staticText23 = new wxStaticText( this, wxID_ANY, wxT("Idle"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText23->Wrap( -1 ); fgSizer6->Add( m_staticText23, 0, wxALL, 5 ); m_checkBoxAbsHealthInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxAbsHealthInc, 0, wxALIGN_CENTER|wxALL, 5 ); m_checkBoxAbsHealthEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxAbsHealthEx, 0, wxALIGN_CENTER|wxALL, 5 ); m_staticText24 = new wxStaticText( this, wxID_ANY, wxT("Aboslute health >"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText24->Wrap( -1 ); fgSizer6->Add( m_staticText24, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_textCtrlAbsHealth = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), 0 ); m_textCtrlAbsHealth->Enable( false ); fgSizer6->Add( m_textCtrlAbsHealth, 0, wxALL, 5 ); m_checkBoxRadarInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxRadarInc, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); m_checkBoxRadarEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxRadarEx, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); m_staticText25 = new wxStaticText( this, wxID_ANY, wxT("Radar, Sonar, Jammer"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText25->Wrap( -1 ); fgSizer6->Add( m_staticText25, 0, wxALL, 5 ); m_checkBoxNameInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxNameInc, 0, wxALIGN_CENTER|wxALL, 5 ); m_checkBoxNameEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxNameEx, 0, wxALIGN_CENTER|wxALL, 5 ); m_staticText26 = new wxStaticText( this, wxID_ANY, wxT("Name contains"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText26->Wrap( -1 ); fgSizer6->Add( m_staticText26, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_textCtrlName = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), 0 ); m_textCtrlName->Enable( false ); fgSizer6->Add( m_textCtrlName, 0, wxALL, 5 ); m_checkBoxTransInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxTransInc, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); m_checkBoxTransEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxTransEx, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); m_staticText27 = new wxStaticText( this, wxID_ANY, wxT("Transport"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText27->Wrap( -1 ); fgSizer6->Add( m_staticText27, 0, wxALL, 5 ); m_checkBoxCategoryInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxCategoryInc, 0, wxALIGN_CENTER|wxALL, 5 ); m_checkBoxCategoryEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxCategoryEx, 0, wxALIGN_CENTER|wxALL, 5 ); m_staticText29 = new wxStaticText( this, wxID_ANY, wxT("Category"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText29->Wrap( -1 ); fgSizer6->Add( m_staticText29, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_textCtrlCategory = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), 0 ); m_textCtrlCategory->Enable( false ); fgSizer6->Add( m_textCtrlCategory, 0, wxALL, 5 ); m_checkBoxHotkeyInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxHotkeyInc, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); m_checkBoxHotkeyEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxHotkeyEx, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); m_staticText221 = new wxStaticText( this, wxID_ANY, wxT("In hotkey group"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText221->Wrap( -1 ); fgSizer6->Add( m_staticText221, 0, wxALL, 5 ); m_checkBoxRelHealthInc = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxRelHealthInc, 0, wxALIGN_CENTER|wxALL, 5 ); m_checkBoxRelHealthEx = new wxCheckBox( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); fgSizer6->Add( m_checkBoxRelHealthEx, 0, wxALIGN_CENTER|wxALL, 5 ); m_staticText32 = new wxStaticText( this, wxID_ANY, wxT("Relative health"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText32->Wrap( -1 ); fgSizer6->Add( m_staticText32, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); m_textCtrlRelHealth = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize( 60,-1 ), 0 ); m_textCtrlRelHealth->Enable( false ); fgSizer6->Add( m_textCtrlRelHealth, 0, wxALL, 5 ); sbSizer9->Add( fgSizer6, 1, wxEXPAND, 5 ); fgSizer5->Add( sbSizer9, 1, wxALL|wxEXPAND, 5 ); wxBoxSizer* bSizer24; bSizer24 = new wxBoxSizer( wxHORIZONTAL ); bSizer24->Add( 0, 0, 1, wxEXPAND, 5 ); m_buttonOk = new wxButton( this, wxID_ANY, wxT("Add"), wxDefaultPosition, wxDefaultSize, 0 ); bSizer24->Add( m_buttonOk, 0, wxALL, 5 ); m_buttonCancel = new wxButton( this, wxID_CANCEL, wxT("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); bSizer24->Add( m_buttonCancel, 0, wxALL, 5 ); fgSizer5->Add( bSizer24, 1, wxALL|wxEXPAND, 5 ); this->SetSizer( fgSizer5 ); this->Layout(); fgSizer5->Fit( this ); this->Centre( wxBOTH ); // Connect Events m_radioBtnSrcMap->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSrcMapClick ), NULL, this ); m_radioBtnSrcView->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSrcViewClick ), NULL, this ); m_radioBtnSrcSel->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSrcSelClick ), NULL, this ); m_radioBtnSrcMouse->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSrcDistClick ), NULL, this ); m_radioBtnSelAll->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSelAllClick ), NULL, this ); m_radioBtnSelCount->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSelCountClick ), NULL, this ); m_radioBtnSelOne->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSelOneClick ), NULL, this ); m_radioBtnSelPerc->Connect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSelPercClick ), NULL, this ); m_checkBoxBuilderInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondBuilderIncClick ), NULL, this ); m_checkBoxBuilderEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondBuilderExClick ), NULL, this ); m_checkBoxBuildingInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondBuildingIncClick ), NULL, this ); m_checkBoxBuildingEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondBuildingExClick ), NULL, this ); m_checkBoxComInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondComIncClick ), NULL, this ); m_checkBoxComEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondComExClick ), NULL, this ); m_checkBoxTypeSelInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondTypeSelIncClick ), NULL, this ); m_checkBoxTypeSelEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondTypeSelExClick ), NULL, this ); m_checkBoxAirInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondAirIncClick ), NULL, this ); m_checkBoxAirEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondAirExClick ), NULL, this ); m_checkBoxWaitingInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondWaitingIncClick ), NULL, this ); m_checkBoxWaitingEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondWaitingExClick ), NULL, this ); m_checkBoxWeaponsInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondWeaponsIncClick ), NULL, this ); m_checkBoxWeaponsEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondWeaponsExClick ), NULL, this ); m_checkBoxWeapRangeInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondWeapRangeIncClick ), NULL, this ); m_checkBoxWeapRangeEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondWeapRangeExClick ), NULL, this ); m_checkBoxIdleInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondIdleIncClick ), NULL, this ); m_checkBoxIdleEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondIdleExClick ), NULL, this ); m_checkBoxAbsHealthInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondAbsHealthIncClick ), NULL, this ); m_checkBoxAbsHealthEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondAbsHealthExClick ), NULL, this ); m_checkBoxRadarInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondRadarIncClick ), NULL, this ); m_checkBoxRadarEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondRadarExClick ), NULL, this ); m_checkBoxNameInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondNameIncClick ), NULL, this ); m_checkBoxNameEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondNameExClick ), NULL, this ); m_checkBoxTransInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondTransIncClick ), NULL, this ); m_checkBoxTransEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondTransExClick ), NULL, this ); m_checkBoxCategoryInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondCategoryIncClick ), NULL, this ); m_checkBoxCategoryEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondCategoryExClick ), NULL, this ); m_checkBoxHotkeyInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondHotkeyIncClick ), NULL, this ); m_checkBoxHotkeyEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondHotkeyExClick ), NULL, this ); m_checkBoxRelHealthInc->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondRelHealthIncClick ), NULL, this ); m_checkBoxRelHealthEx->Connect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondRelHealthExClick ), NULL, this ); m_buttonOk->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnButtonAddClick ), NULL, this ); } AddSelectionCmdDlgBase::~AddSelectionCmdDlgBase() { // Disconnect Events m_radioBtnSrcMap->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSrcMapClick ), NULL, this ); m_radioBtnSrcView->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSrcViewClick ), NULL, this ); m_radioBtnSrcSel->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSrcSelClick ), NULL, this ); m_radioBtnSrcMouse->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSrcDistClick ), NULL, this ); m_radioBtnSelAll->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSelAllClick ), NULL, this ); m_radioBtnSelCount->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSelCountClick ), NULL, this ); m_radioBtnSelOne->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSelOneClick ), NULL, this ); m_radioBtnSelPerc->Disconnect( wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnRadioBtnSelPercClick ), NULL, this ); m_checkBoxBuilderInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondBuilderIncClick ), NULL, this ); m_checkBoxBuilderEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondBuilderExClick ), NULL, this ); m_checkBoxBuildingInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondBuildingIncClick ), NULL, this ); m_checkBoxBuildingEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondBuildingExClick ), NULL, this ); m_checkBoxComInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondComIncClick ), NULL, this ); m_checkBoxComEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondComExClick ), NULL, this ); m_checkBoxTypeSelInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondTypeSelIncClick ), NULL, this ); m_checkBoxTypeSelEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondTypeSelExClick ), NULL, this ); m_checkBoxAirInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondAirIncClick ), NULL, this ); m_checkBoxAirEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondAirExClick ), NULL, this ); m_checkBoxWaitingInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondWaitingIncClick ), NULL, this ); m_checkBoxWaitingEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondWaitingExClick ), NULL, this ); m_checkBoxWeaponsInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondWeaponsIncClick ), NULL, this ); m_checkBoxWeaponsEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondWeaponsExClick ), NULL, this ); m_checkBoxWeapRangeInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondWeapRangeIncClick ), NULL, this ); m_checkBoxWeapRangeEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondWeapRangeExClick ), NULL, this ); m_checkBoxIdleInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondIdleIncClick ), NULL, this ); m_checkBoxIdleEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondIdleExClick ), NULL, this ); m_checkBoxAbsHealthInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondAbsHealthIncClick ), NULL, this ); m_checkBoxAbsHealthEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondAbsHealthExClick ), NULL, this ); m_checkBoxRadarInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondRadarIncClick ), NULL, this ); m_checkBoxRadarEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondRadarExClick ), NULL, this ); m_checkBoxNameInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondNameIncClick ), NULL, this ); m_checkBoxNameEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondNameExClick ), NULL, this ); m_checkBoxTransInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondTransIncClick ), NULL, this ); m_checkBoxTransEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondTransExClick ), NULL, this ); m_checkBoxCategoryInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondCategoryIncClick ), NULL, this ); m_checkBoxCategoryEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondCategoryExClick ), NULL, this ); m_checkBoxHotkeyInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondHotkeyIncClick ), NULL, this ); m_checkBoxHotkeyEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondHotkeyExClick ), NULL, this ); m_checkBoxRelHealthInc->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondRelHealthIncClick ), NULL, this ); m_checkBoxRelHealthEx->Disconnect( wxEVT_COMMAND_CHECKBOX_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnCheckBoxCondRelHealthExClick ), NULL, this ); m_buttonOk->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( AddSelectionCmdDlgBase::OnButtonAddClick ), NULL, this ); } CommandOrderDlgBase::CommandOrderDlgBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { this->SetSizeHints( wxDefaultSize, wxDefaultSize ); wxFlexGridSizer* fgSizer7; fgSizer7 = new wxFlexGridSizer( 2, 2, 0, 0 ); fgSizer7->SetFlexibleDirection( wxBOTH ); fgSizer7->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); m_staticText22 = new wxStaticText( this, wxID_ANY, wxT("Command execution order:"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText22->Wrap( -1 ); fgSizer7->Add( m_staticText22, 0, wxALL, 5 ); fgSizer7->Add( 0, 0, 1, wxEXPAND, 5 ); m_listBoxCommands = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxSize( 200,150 ), 0, NULL, 0 ); fgSizer7->Add( m_listBoxCommands, 0, wxALL, 5 ); wxBoxSizer* bSizer5; bSizer5 = new wxBoxSizer( wxVERTICAL ); m_buttonUp = new wxButton( this, wxID_ANY, wxT("Up"), wxDefaultPosition, wxDefaultSize, 0 ); bSizer5->Add( m_buttonUp, 0, wxALL, 5 ); m_buttonDown = new wxButton( this, wxID_ANY, wxT("Down"), wxDefaultPosition, wxDefaultSize, 0 ); bSizer5->Add( m_buttonDown, 0, wxALL, 5 ); fgSizer7->Add( bSizer5, 1, wxEXPAND, 5 ); m_buttonOk = new wxButton( this, wxID_OK, wxT("OK"), wxDefaultPosition, wxDefaultSize, 0 ); fgSizer7->Add( m_buttonOk, 0, wxALIGN_RIGHT|wxALL, 5 ); m_buttonCancel = new wxButton( this, wxID_CANCEL, wxT("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); fgSizer7->Add( m_buttonCancel, 0, wxALL, 5 ); this->SetSizer( fgSizer7 ); this->Layout(); fgSizer7->Fit( this ); // Connect Events this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( CommandOrderDlgBase::OnInitDialog ) ); m_buttonUp->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CommandOrderDlgBase::OnButtonUpClick ), NULL, this ); m_buttonDown->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CommandOrderDlgBase::OnButtonDownClick ), NULL, this ); } CommandOrderDlgBase::~CommandOrderDlgBase() { // Disconnect Events this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( CommandOrderDlgBase::OnInitDialog ) ); m_buttonUp->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CommandOrderDlgBase::OnButtonUpClick ), NULL, this ); m_buttonDown->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( CommandOrderDlgBase::OnButtonDownClick ), NULL, this ); } ChangeMetaDlgBase::ChangeMetaDlgBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { this->SetSizeHints( wxDefaultSize, wxDefaultSize ); wxFlexGridSizer* fgSizer7; fgSizer7 = new wxFlexGridSizer( 2, 2, 0, 0 ); fgSizer7->SetFlexibleDirection( wxBOTH ); fgSizer7->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); m_staticText24 = new wxStaticText( this, wxID_ANY, wxT("Current key:"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText24->Wrap( -1 ); fgSizer7->Add( m_staticText24, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); m_textCtrlCurKey = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); fgSizer7->Add( m_textCtrlCurKey, 0, wxALL, 5 ); m_staticText23 = new wxStaticText( this, wxID_ANY, wxT("New key:"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText23->Wrap( -1 ); fgSizer7->Add( m_staticText23, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL, 5 ); m_ctrlNewKey = new wxKeyMonitorTextCtrl( this, wxID_ANY ); fgSizer7->Add( m_ctrlNewKey, 0, wxALL, 5 ); m_buttonOk = new wxButton( this, wxID_OK, wxT("Assign"), wxDefaultPosition, wxDefaultSize, 0 ); fgSizer7->Add( m_buttonOk, 0, wxALL, 5 ); m_buttonCancel = new wxButton( this, wxID_CANCEL, wxT("Cancel"), wxDefaultPosition, wxDefaultSize, 0 ); fgSizer7->Add( m_buttonCancel, 0, wxALIGN_RIGHT|wxALL, 5 ); this->SetSizer( fgSizer7 ); this->Layout(); fgSizer7->Fit( this ); // Connect Events this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( ChangeMetaDlgBase::OnInitDialog ) ); } ChangeMetaDlgBase::~ChangeMetaDlgBase() { // Disconnect Events this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( ChangeMetaDlgBase::OnInitDialog ) ); } springlobby-0.169/src/springsettings/hotkeys/HotkeyForms.h0000600000176000000410000002234412105760300025407 0ustar buildbotwww-data00000000000000/////////////////////////////////////////////////////////////////////////// // C++ code generated with wxFormBuilder (version Apr 16 2008) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// #ifndef __HotkeyForms__ #define __HotkeyForms__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../../wxkeybinder/wxKeyMonitorTextCtrl.h" /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /// Class AddSelectionCmdDlgBase /////////////////////////////////////////////////////////////////////////////// class AddSelectionCmdDlgBase : public wxDialog { private: protected: wxRadioButton* m_radioBtnSrcMap; wxRadioButton* m_radioBtnSrcView; wxRadioButton* m_radioBtnSrcSel; wxRadioButton* m_radioBtnSrcMouse; wxTextCtrl* m_textCtrlSrcMouseDist; wxCheckBox* m_checkBoxSrcDistCyl; wxRadioButton* m_radioBtnSelAll; wxRadioButton* m_radioBtnSelCount; wxTextCtrl* m_textCtrlSelCount; wxRadioButton* m_radioBtnSelOne; wxRadioButton* m_radioBtnSelPerc; wxTextCtrl* m_textCtrlSelPerc; wxStaticText* m_staticText20; wxCheckBox* m_checkBoxClearPrevSel; wxStaticText* m_staticText9; wxStaticText* m_staticText11; wxStaticText* m_staticText12; wxStaticText* m_staticText13; wxCheckBox* m_checkBoxBuilderInc; wxCheckBox* m_checkBoxBuilderEx; wxStaticText* m_staticText14; wxCheckBox* m_checkBoxBuildingInc; wxCheckBox* m_checkBoxBuildingEx; wxStaticText* m_staticText15; wxCheckBox* m_checkBoxComInc; wxCheckBox* m_checkBoxComEx; wxStaticText* m_staticText17; wxCheckBox* m_checkBoxTypeSelInc; wxCheckBox* m_checkBoxTypeSelEx; wxStaticText* m_staticText18; wxCheckBox* m_checkBoxAirInc; wxCheckBox* m_checkBoxAirEx; wxStaticText* m_staticText19; wxCheckBox* m_checkBoxWaitingInc; wxCheckBox* m_checkBoxWaitingEx; wxStaticText* m_staticText231; wxCheckBox* m_checkBoxWeaponsInc; wxCheckBox* m_checkBoxWeaponsEx; wxStaticText* m_staticText21; wxCheckBox* m_checkBoxWeapRangeInc; wxCheckBox* m_checkBoxWeapRangeEx; wxStaticText* m_staticText22; wxTextCtrl* m_textCtrlWeapRange; wxCheckBox* m_checkBoxIdleInc; wxCheckBox* m_checkBoxIdleEx; wxStaticText* m_staticText23; wxCheckBox* m_checkBoxAbsHealthInc; wxCheckBox* m_checkBoxAbsHealthEx; wxStaticText* m_staticText24; wxTextCtrl* m_textCtrlAbsHealth; wxCheckBox* m_checkBoxRadarInc; wxCheckBox* m_checkBoxRadarEx; wxStaticText* m_staticText25; wxCheckBox* m_checkBoxNameInc; wxCheckBox* m_checkBoxNameEx; wxStaticText* m_staticText26; wxTextCtrl* m_textCtrlName; wxCheckBox* m_checkBoxTransInc; wxCheckBox* m_checkBoxTransEx; wxStaticText* m_staticText27; wxCheckBox* m_checkBoxCategoryInc; wxCheckBox* m_checkBoxCategoryEx; wxStaticText* m_staticText29; wxTextCtrl* m_textCtrlCategory; wxCheckBox* m_checkBoxHotkeyInc; wxCheckBox* m_checkBoxHotkeyEx; wxStaticText* m_staticText221; wxCheckBox* m_checkBoxRelHealthInc; wxCheckBox* m_checkBoxRelHealthEx; wxStaticText* m_staticText32; wxTextCtrl* m_textCtrlRelHealth; wxButton* m_buttonOk; wxButton* m_buttonCancel; // Virtual event handlers, overide them in your derived class virtual void OnRadioBtnSrcMapClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnRadioBtnSrcViewClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnRadioBtnSrcSelClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnRadioBtnSrcDistClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnRadioBtnSelAllClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnRadioBtnSelCountClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnRadioBtnSelOneClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnRadioBtnSelPercClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondBuilderIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondBuilderExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondBuildingIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondBuildingExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondComIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondComExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondTypeSelIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondTypeSelExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondAirIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondAirExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondWaitingIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondWaitingExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondWeaponsIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondWeaponsExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondWeapRangeIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondWeapRangeExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondIdleIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondIdleExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondAbsHealthIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondAbsHealthExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondRadarIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondRadarExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondNameIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondNameExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondTransIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondTransExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondCategoryIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondCategoryExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondHotkeyIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondHotkeyExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondRelHealthIncClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnCheckBoxCondRelHealthExClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnButtonAddClick( wxCommandEvent& event ){ event.Skip(); } public: AddSelectionCmdDlgBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("Add Selection Command"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxCAPTION ); ~AddSelectionCmdDlgBase(); }; /////////////////////////////////////////////////////////////////////////////// /// Class CommandOrderDlgBase /////////////////////////////////////////////////////////////////////////////// class CommandOrderDlgBase : public wxDialog { private: protected: wxStaticText* m_staticText22; wxListBox* m_listBoxCommands; wxButton* m_buttonUp; wxButton* m_buttonDown; wxButton* m_buttonOk; wxButton* m_buttonCancel; // Virtual event handlers, overide them in your derived class virtual void OnInitDialog( wxInitDialogEvent& event ){ event.Skip(); } virtual void OnButtonUpClick( wxCommandEvent& event ){ event.Skip(); } virtual void OnButtonDownClick( wxCommandEvent& event ){ event.Skip(); } public: CommandOrderDlgBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("Change Order"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxCAPTION ); ~CommandOrderDlgBase(); }; /////////////////////////////////////////////////////////////////////////////// /// Class ChangeMetaDlgBase /////////////////////////////////////////////////////////////////////////////// class ChangeMetaDlgBase : public wxDialog { private: protected: wxStaticText* m_staticText24; wxTextCtrl* m_textCtrlCurKey; wxStaticText* m_staticText23; wxKeyMonitorTextCtrl* m_ctrlNewKey; wxButton* m_buttonOk; wxButton* m_buttonCancel; // Virtual event handlers, overide them in your derived class virtual void OnInitDialog( wxInitDialogEvent& event ){ event.Skip(); } public: ChangeMetaDlgBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("Change Meta key"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); ~ChangeMetaDlgBase(); }; #endif //__HotkeyForms__ springlobby-0.169/src/springsettings/hotkeys/HotkeyTypes.cpp0000600000176000000410000002616212105760300025762 0ustar buildbotwww-data00000000000000#include #include #include "HotkeyTypes.h" #include "HotkeyException.h" key_binding::key_binding() //: m_nextOrderIdx(1) { } void key_binding::setMetaKey( const wxString& key ) { this->m_meta = key; } const wxString& key_binding::getMetaKey() const { return this->m_meta; } void key_binding::bind( const wxString& cmd, const wxString& keyString ) { if ( this->exists( cmd, keyString ) ) { return; } wxString normKey; if ( keyString.StartsWith( wxT("&") ) ) { //key set normKey = resolveKeySymSetName( KeynameConverter::normalizeSpringKey( keyString.SubString( 1, keyString.size() + 1 ) ) ); } else { //normal key normKey = resolveKeySymName( KeynameConverter::normalizeSpringKey( keyString ) ); } if ( normKey.StartsWith( wxT("Any+") ) ) { m_groupsAny[ normKey ].push_back( cmd ); m_keyCmdSetAny.insert( std::make_pair( normKey, cmd ) ); } else { m_groups[ normKey ].push_back( cmd ); m_keyCmdSet.insert( std::make_pair( normKey, cmd ) ); } } void key_binding::addKeySymSet( const wxString& name, const wxString& keyString ) { const wxString normName = name.Lower(); const wxString normKey = this->resolveKeySymName( KeynameConverter::normalizeSpringKey( keyString ) ); this->m_keySymsSet[normName] = normKey; this->m_keySymsSetRev[normKey] = normName; } void key_binding::addKeySym( const wxString& name, const wxString& keyString ) { const wxString normName = name.Lower(); const wxString normKey = KeynameConverter::normalizeSpringKey( keyString ); this->m_keySyms[normName] = normKey; this->m_keySymsRev[KeynameConverter::convertHexValueToKey( keyString )] = normName; } const wxString key_binding::resolveKeySymSetName( const wxString& symName ) const { key_sym_set_map::const_iterator iter = this->m_keySymsSet.find( symName ); if ( iter == this->m_keySymsSet.end() ) { return symName; } return iter->second; } const wxString key_binding::resolveKeySymSetKey( const wxString& key ) const { key_sym_set_map::const_iterator iter = this->m_keySymsSetRev.find( key ); if ( iter == this->m_keySymsSetRev.end() ) { return key; } return wxT("&") + iter->second; } const wxString key_binding::resolveKeySymName( const wxString& symName ) const { key_sym_map::const_iterator iter = this->m_keySyms.find( KeynameConverter::discardModifier( symName ) ); if ( iter == this->m_keySyms.end() ) { return symName; } KeynameConverter::ModifierList modList = KeynameConverter::stringToKeyModifier( symName ); return KeynameConverter::modifier2String( modList ) + KeynameConverter::convertHexValueToKey( iter->second ); } wxString key_binding::resolveKeySymKeyAndSet( const wxString& key ) const { wxString res = resolveKeySymSetKey( key ); return resolveKeySymKey(res); } wxString key_binding::resolveKeySymKey( const wxString& key ) const { key_sym_map::const_iterator iter = this->m_keySymsRev.find( KeynameConverter::discardModifier( key ) ); if ( iter == this->m_keySymsRev.end() ) { return key; } KeynameConverter::ModifierList modList = KeynameConverter::stringToKeyModifier( key ); return KeynameConverter::modifier2String( modList ) + iter->second; } void key_binding::setKeySymsSet( const key_sym_set_map& keySymsSet ) { this->m_keySymsSet = keySymsSet; //update reverse map for( key_sym_set_map::const_iterator iter = m_keySymsSet.begin(); iter != m_keySymsSet.end(); ++iter ) { this->m_keySymsSetRev[iter->second] = iter->first; } } void key_binding::setKeySyms( const key_sym_map& keySyms ) { this->m_keySyms = keySyms; //update reverse map for( key_sym_map::const_iterator iter = m_keySyms.begin(); iter != m_keySyms.end(); ++iter ) { //hex convert is needed here (data could come from wxProfile which stores raw keys (0x62 etc)) this->m_keySymsRev[KeynameConverter::convertHexValueToKey( iter->second )] = iter->first; } } const key_sym_map& key_binding::getKeySyms() const { return this->m_keySyms; } const key_sym_map& key_binding::getKeySymsSet() const { return this->m_keySymsSet; } key_commands_sorted key_binding::getBinds() const { key_commands_sorted sortKeys; //any keys for( KeyGroupMap::const_iterator iter = m_groupsAny.begin(); iter != m_groupsAny.end(); ++iter ) { for( size_t idx = 0; idx < iter->second.size(); ++idx ) { sortKeys.push_back( key_command( iter->first, iter->second[ idx ] ) ); } } //normal keys for( KeyGroupMap::const_iterator iter = m_groups.begin(); iter != m_groups.end(); ++iter ) { for( size_t idx = 0; idx < iter->second.size(); ++idx ) { sortKeys.push_back( key_command( iter->first, iter->second[ idx ] ) ); } } return sortKeys; } bool key_binding::isEmpty() const { if ( m_keyCmdSet.empty() && m_keyCmdSetAny.empty() ) { return true; } return false; } void key_binding::unbindAllCmds( const wxString& cmd ) { key_command_set keyCmdSetCopy = m_keyCmdSet; key_command_set keyCmdSetAnyCopy = m_keyCmdSetAny; for ( key_command_set::const_iterator iter = keyCmdSetCopy.begin(); iter != keyCmdSetCopy.end(); ++iter ) { if ( key_binding::isCmd1MatchingCmd2( cmd, iter->second ) ) { this->unbind( iter->second, iter->first ); } } for ( key_command_set::const_iterator iter = keyCmdSetAnyCopy.begin(); iter != keyCmdSetAnyCopy.end(); ++iter ) { if ( key_binding::isCmd1MatchingCmd2( cmd, iter->second ) ) { this->unbind( iter->second, iter->first ); } } } void key_binding::unbindAllKeys( const wxString& key ) { if ( !key.StartsWith( wxT("Any+") ) ) { key_command_set keyCmdSetCopy = m_keyCmdSet; for ( key_command_set::const_iterator iter = keyCmdSetCopy.begin(); iter != keyCmdSetCopy.end(); ++iter ) { if ( iter->first == key ) { this->unbind( iter->second, iter->first ); } } } else { key_command_set keyCmdSetAnyCopy = m_keyCmdSetAny; for ( key_command_set::const_iterator iter = keyCmdSetAnyCopy.begin(); iter != keyCmdSetAnyCopy.end(); ++iter ) { if ( iter->first == key ) { this->unbind( iter->second, iter->first ); } } } } void key_binding::unbind( const wxString& cmd, const wxString& keyString ) { if ( !this->exists( cmd, keyString ) ) { return; } const wxString normKey = KeynameConverter::normalizeSpringKey( keyString ); if ( normKey.StartsWith( wxT("Any+") ) ) { m_keyCmdSetAny.erase( std::make_pair( normKey, cmd ) ); key_binding::KeyGroupMap::iterator iter = m_groupsAny.find( normKey ); assert( iter != m_groupsAny.end() ); //we can assert this, since we checked for exists() at the beginning iter->second.erase( std::find(iter->second.begin(), iter->second.end(), cmd) ); if ( iter->second.size() == 0 ) m_groupsAny.erase( iter->first ); } else { m_keyCmdSet.erase( std::make_pair( normKey, cmd ) ); key_binding::KeyGroupMap::iterator iter = m_groups.find( normKey ); assert( iter != m_groups.end() ); //we can assert this, since we checked for exists() at the beginning iter->second.erase( std::find(iter->second.begin(), iter->second.end(), cmd) ); if ( iter->second.size() == 0 ) m_groups.erase( iter->first ); } } bool key_binding::exists( const wxString& command, const wxString& key ) { const wxString& normKey = resolveKeySymName( KeynameConverter::normalizeSpringKey( key ) ); bool found = false; if ( normKey.StartsWith( wxT("Any+") ) ) { if ( m_keyCmdSetAny.find( std::make_pair( normKey, command ) ) != m_keyCmdSetAny.end() ) { found = true; } } else { if ( m_keyCmdSet.find( std::make_pair( normKey, command ) ) != m_keyCmdSet.end() ) { found = true; } } return found; } void key_binding::clear() { this->m_groups.clear(); this->m_groupsAny.clear(); this->m_keyCmdSetAny.clear(); this->m_keyCmdSet.clear(); this->m_keySyms.clear(); this->m_keySymsSet.clear(); this->m_meta.clear(); } bool key_binding::operator==(const key_binding& other) const { const bool groups = this->m_groups == other.m_groups; const bool groupsAny = this->m_groupsAny == other.m_groupsAny; const bool keySyms = this->m_keySyms == other.m_keySyms; const bool keySymsSet = this->m_keySymsSet == other.m_keySymsSet; const bool meta = this->m_meta == other.m_meta; #ifdef __WXDEBUG__ if ( !groups ) { for( key_binding::KeyGroupMap::const_iterator iter = this->m_groups.begin(); iter != this->m_groups.end(); ++iter ) { key_binding::KeyGroupMap::const_iterator fiter = other.m_groups.find( iter->first ); if ( fiter != other.m_groups.end() ) { if ( iter->second != fiter->second ) { wxLogWarning( wxT("Difference in hotkey group: ") + iter->first ); const std::vector cmdsA = iter->second; const std::vector cmdsB = fiter->second; int i=0; ++i; } } else wxLogWarning( wxT("Group ") + iter->first + wxT(" not found in other group!") ); } } if ( !groupsAny ) { for( key_binding::KeyGroupMap::const_iterator iter = this->m_groupsAny.begin(); iter != this->m_groupsAny.end(); ++iter ) { key_binding::KeyGroupMap::const_iterator fiter = other.m_groupsAny.find( iter->first ); if ( fiter != other.m_groupsAny.end() ) { if ( iter->second != fiter->second ) { wxLogWarning( wxT("Difference in hotkey groupAny: ") + iter->first ); const std::vector cmdsA = iter->second; const std::vector cmdsB = fiter->second; int i=0; ++i; } } else wxLogWarning( wxT("GroupAny ") + iter->first + wxT(" not found in other group!") ); } } #endif return groups && groupsAny && keySyms && keySymsSet && meta; } const key_binding key_binding::operator-(const key_binding& other) const { key_binding resBind = (*this); resBind.m_groups.clear(); resBind.m_groupsAny.clear(); resBind.m_keyCmdSet.clear(); resBind.m_keyCmdSetAny.clear(); //normal keys for( KeyGroupMap::const_iterator iter = m_groups.begin(); iter != m_groups.end(); ++iter ) { bool diffs = false; for( size_t idx = 0; idx < iter->second.size(); ++idx ) { KeyGroupMap::const_iterator findIter = other.m_groups.find( iter->first ); if ( ( diffs ) || ( findIter == other.m_groups.end() ) || ( iter->second.empty() ) || ( findIter->second.size() < (idx + 1) ) || ( findIter->second[idx] != iter->second[idx] ) ) { resBind.bind( iter->second[ idx ], iter->first ); diffs = true; } } } //any-keys for( KeyGroupMap::const_iterator iter = m_groupsAny.begin(); iter != m_groupsAny.end(); ++iter ) { bool diffs = false; for( size_t idx = 0; idx < iter->second.size(); ++idx ) { KeyGroupMap::const_iterator findIter = other.m_groupsAny.find( iter->first ); if ( ( diffs ) || ( findIter == other.m_groupsAny.end() ) || ( findIter->second.size() < (idx + 1) ) || ( findIter->second[idx] != iter->second[idx] ) ) { resBind.bind( iter->second[ idx ], iter->first ); diffs = true; } } } return resBind; } bool key_binding::isCmd1MatchingCmd2( const wxString& cmd1, const wxString& cmd2 ) { int cmd1SepPos = cmd1.Find( _T(' ') ); int cmd2SepPos = cmd2.Find( _T(' ') ); if ( (cmd1SepPos != wxNOT_FOUND) || ((cmd1SepPos == wxNOT_FOUND) && (cmd2SepPos == wxNOT_FOUND)) ) return cmd1 == cmd2; //simple compare //cmd1 has no params, cmd2 has params. like "specteam" and "specteam 5" return ( cmd2.substr(0, cmd2SepPos) == cmd1 ); //just compare "specteam" and "specteam" } springlobby-0.169/src/springsettings/hotkeys/HotkeyTypes.h0000600000176000000410000000603512105760300025424 0ustar buildbotwww-data00000000000000#ifndef __TAB_HOTKEY_TYPES_h__ #define __TAB_HOTKEY_TYPES_h__ #include #include #include #include #include #include #include "KeynameConverter.h" class wxCmd; //added by vbs WX_DECLARE_HASH_SET(int, wxIntegerHash, wxIntegerEqual, IdSet); WX_DECLARE_HASH_SET(wxCmd*, wxPointerHash, wxPointerEqual, CmdSet); typedef std::pair key_command; typedef std::set key_command_set; typedef std::vector key_commands_sorted; typedef std::set key_set; typedef std::map key_binding_c2k; typedef std::vector command_list_sorted; typedef std::map key_sym_map; typedef std::map key_sym_set_map; class key_binding { public: key_binding(); typedef std::map key_binding_map; void bind( const wxString& cmd, const wxString& keyString ); void unbindAllCmds( const wxString& cmd ); void unbindAllKeys( const wxString& key ); void unbind( const wxString& cmd, const wxString& keyString ); void clear(); void setMetaKey( const wxString& key ); const wxString& getMetaKey() const; void addKeySym( const wxString& name, const wxString& keyString ); void addKeySymSet( const wxString& name, const wxString& keyString ); bool exists( const wxString& command, const wxString& key ); bool isEmpty() const; const key_binding operator-(const key_binding &other) const; void setKeySymsSet( const key_sym_set_map& keySyms ); void setKeySyms( const key_sym_map& keySyms ); const key_sym_map& getKeySyms() const; const key_sym_map& getKeySymsSet() const; key_commands_sorted getBinds() const; //const key_binding_k2c& getK2C() const; wxString resolveKeySymKeyAndSet( const wxString& key ) const; wxString resolveKeySymKey( const wxString& key ) const; bool operator==( const key_binding& other ) const; bool isCmd1MatchingCmd2( const wxString& cmd1, const wxString& cmd2 ); private: const wxString resolveKeySymSetName( const wxString& symName ) const; const wxString resolveKeySymSetKey( const wxString& key ) const; const wxString resolveKeySymName( const wxString& symName ) const; //define different "views" onto the bindings typedef std::map KeyGroupMap; KeyGroupMap m_groups; KeyGroupMap m_groupsAny; key_command_set m_keyCmdSet; key_command_set m_keyCmdSetAny; key_sym_map m_keySyms; key_sym_map m_keySymsRev; key_sym_set_map m_keySymsSet; key_sym_set_map m_keySymsSetRev; wxString m_meta; //key_binding_map m_binds; //key_binding_c2k m_c2k; //for faster lookups. keep this in sync with m_binds //unsigned m_nextOrderIdx; //bool m_isNormalized; }; //typedef std::set key_set; //typedef std::map key_binding_c2k; //typedef std::map key_binding_k2c; typedef std::map key_binding_collection; #endif springlobby-0.169/src/springsettings/hotkeys/KeynameConverter.cpp0000600000176000000410000001355012105760300026750 0ustar buildbotwww-data00000000000000#include "KeynameConverter.h" #include #include "../../wxkeybinder/keybinder.h" KeynameConverter::KeyMap KeynameConverter::m_spring2keybinder; KeynameConverter::KeyMap KeynameConverter::m_keybinder2spring; void KeynameConverter::initialize() { KeynameConverter::addMapping( wxT("backspace"), wxT("BACK") ); KeynameConverter::addMapping( wxT("esc"), wxT("ESCAPE") ); KeynameConverter::addMapping( wxT("enter"), wxT("RETURN") ); KeynameConverter::addMapping( wxT("numpad*"), wxT("* (numpad)") ); KeynameConverter::addMapping( wxT("numpad+"), wxT("+ (numpad)") ); KeynameConverter::addMapping( wxT("numpad-"), wxT("- (numpad)") ); KeynameConverter::addMapping( wxT("numpad."), wxT(". (numpad)") ); KeynameConverter::addMapping( wxT("numpad/"), wxT("/ (numpad)") ); KeynameConverter::addMapping( wxT("numpad0"), wxT("0 (numpad)") ); KeynameConverter::addMapping( wxT("numpad1"), wxT("1 (numpad)") ); KeynameConverter::addMapping( wxT("numpad2"), wxT("2 (numpad)") ); KeynameConverter::addMapping( wxT("numpad3"), wxT("3 (numpad)") ); KeynameConverter::addMapping( wxT("numpad4"), wxT("4 (numpad)") ); KeynameConverter::addMapping( wxT("numpad5"), wxT("5 (numpad)") ); KeynameConverter::addMapping( wxT("numpad6"), wxT("6 (numpad)") ); KeynameConverter::addMapping( wxT("numpad7"), wxT("7 (numpad)") ); KeynameConverter::addMapping( wxT("numpad8"), wxT("8 (numpad)") ); KeynameConverter::addMapping( wxT("numpad9"), wxT("9 (numpad)") ); KeynameConverter::addMapping( wxT("numpad="), wxT("= (numpad)") ); KeynameConverter::addMapping( wxT("numpad_enter"), wxT("ENTER (numpad)") ); } void KeynameConverter::addMapping( const wxString& springKey, const wxString& keybinderKey ) { KeynameConverter::m_keybinder2spring[keybinderKey] = springKey; KeynameConverter::m_spring2keybinder[springKey] = keybinderKey; } wxString KeynameConverter::discardModifier( const wxString& keystring ) { wxString result; if ( keystring.EndsWith(wxT("+")) ) //handle stuff like numpad+ or ctrl++ { wxString tmp = keystring; result = tmp.RemoveLast().AfterLast(wxT('+')) + wxT('+'); } else if ( keystring.StartsWith(wxT("+")) ) //handle stuff like "+ (numpad)" { result = keystring; } else { size_t lastAdd = keystring.find_last_of(wxT('+')); if ( ( lastAdd != keystring.npos ) && ( keystring.GetChar(lastAdd - 1) == wxT('+') ) ) { assert( (lastAdd > 0) && "character '+' found in unexcepted location!" ); result = keystring.substr( lastAdd ); } else { result = keystring.AfterLast(wxT('+')); } } return result; } wxString KeynameConverter::convertHexValueToKey( const wxString& hexStr ) { wxString res = hexStr; if ( hexStr.StartsWith( wxT("0x") ) ) { long value = 0; if ( hexStr.ToLong( &value, 16 ) ) { res = wxChar( value ); res.MakeLower(); } } return res; } wxString KeynameConverter::normalizeSpringKey( const wxString& springKey ) { //get modifiers KeynameConverter::ModifierList modifiers = stringToKeyModifier( springKey ); wxString key = KeynameConverter::discardModifier( springKey ); if ( key.StartsWith( wxT("0x") ) ) { key = KeynameConverter::convertHexValueToKey( key ); } else { key.MakeLower(); } if ( key == wxT("escape") ) { key = wxT("esc"); } return KeynameConverter::modifier2String( modifiers ) + key; } wxString KeynameConverter::spring2wxKeybinder( const wxString& keystring, bool reverse ) { //get modifiers KeynameConverter::ModifierList modifiers = stringToKeyModifier( keystring ); //set conversion direction const KeynameConverter::KeyMap* pCurKeyMap = &KeynameConverter::m_spring2keybinder; if ( reverse ) { pCurKeyMap = &KeynameConverter::m_keybinder2spring; } //find the correct key wxString key = KeynameConverter::discardModifier( keystring ); wxString kbKey; if ( pCurKeyMap->find( key ) != pCurKeyMap->end() ) { kbKey = pCurKeyMap->find( key )->second; } else if ( key.StartsWith( wxT("0x") ) ) { kbKey = key; } else { #ifdef __WXMSW__ if ( reverse ) { if ( key.EndsWith( wxKeyBind::m_usMarker ) ) kbKey = key[0]; else if ( key.size() > 1 ) kbKey = key; else { kbKey = wxMswKeyConverter::ConvertLocalToUs( key[0] ); if ( kbKey[0] == 0x00 ) { //when this happens its bad. it means we were able to translate us->local but the reverse ways fails for whatever reason kbKey = key[0]; } } } else { if ( key.size() == 1 ) { kbKey = wxMswKeyConverter::ConvertUsToLocal( key[0] ); if ( kbKey[0] == 0x00 ) { //we could not convert this key to local layout. so take the us-key and mark it as such kbKey = key[0]; kbKey += wxKeyBind::m_usMarker; } } else kbKey = key; } #else kbKey = key; #endif if ( reverse ) kbKey.MakeLower(); else kbKey.MakeUpper(); } return KeynameConverter::modifier2String( modifiers ) + kbKey; } wxString KeynameConverter::modifier2String( const KeynameConverter::ModifierList& mod ) { wxString modString; if ( mod.find( ANY ) != mod.end() ) { modString += wxT("Any+"); } else { if ( mod.find( CTRL ) != mod.end() ) { modString += wxT("Ctrl+"); } if ( mod.find( SHIFT ) != mod.end() ) { modString += wxT("Shift+"); } if ( mod.find( ALT ) != mod.end() ) { modString += wxT("Alt+"); } if ( mod.find( META ) != mod.end() ) { modString += wxT("Meta+"); } } return modString; } KeynameConverter::ModifierList KeynameConverter::stringToKeyModifier(const wxString &keyModifier) { ModifierList modifiers; // this search must be case-insensitive const wxString str = keyModifier.Upper(); if (str.Contains(wxT("ALT+"))) { modifiers.insert( ALT ); } if (str.Contains(wxT("CTRL+"))) { modifiers.insert( CTRL ); } if (str.Contains(wxT("SHIFT+"))) { modifiers.insert( SHIFT ); } if (str.Contains(wxT("ANY+"))) { modifiers.insert( ANY ); } if (str.Contains(wxT("META+"))) { modifiers.insert( META ); } return modifiers; } springlobby-0.169/src/springsettings/hotkeys/KeynameConverter.h0000600000176000000410000000225012105760300026410 0ustar buildbotwww-data00000000000000#ifndef _H_KEYNAME_CONVERTER #define _H_KEYNAME_CONVERTER #include #include #include #include "HotkeyTypes.h" /* * This class converts spring's keystrings to wxKeybinder keystrings and back */ class KeynameConverter { public: enum Modifier { CTRL, ALT, SHIFT, ANY, META }; typedef std::set ModifierList; static void initialize(); static wxString spring2wxKeybinder( const wxString& keystring, bool reverse = false ); static wxString normalizeSpringKey( const wxString& springKey ); static wxString convertHexValueToKey( const wxString& hexStr ); static wxString modifier2String( const KeynameConverter::ModifierList& mod ); static ModifierList stringToKeyModifier(const wxString &keyModifier); static wxString discardModifier( const wxString& keystring ); private: typedef std::map KeyMap; KeynameConverter(); static wxString convert( const wxString& keystring, bool reverse = false ); static void addMapping( const wxString& springKey, const wxString& keybinderKey ); static KeynameConverter::KeyMap m_spring2keybinder; static KeynameConverter::KeyMap m_keybinder2spring; }; #endif springlobby-0.169/src/springsettings/hotkeys/SpringDefaultProfile.cpp0000600000176000000410000002613612105760300027563 0ustar buildbotwww-data00000000000000#include "SpringDefaultProfile.h" #include "KeynameConverter.h" key_binding SpringDefaultProfile::m_bindings; void SpringDefaultProfile::initialize() { if ( SpringDefaultProfile::m_bindings.isEmpty() == false ) { //is already initialized return; } SpringDefaultProfile::addBinding( _T("LastMsgPos"), _T("Any+f3") ); SpringDefaultProfile::addBinding( _T("NoSound"), _T("Any+f6") ); SpringDefaultProfile::addBinding( _T("ShowMetalMap"), _T("Any+f4") ); SpringDefaultProfile::addBinding( _T("ShowPathMap"), _T("Any+f2") ); SpringDefaultProfile::addBinding( _T("aiselect"), _T("Ctrl+q") ); SpringDefaultProfile::addBinding( _T("areaattack"), _T("Alt+Shift+a") ); SpringDefaultProfile::addBinding( _T("areaattack"), _T("Alt+a") ); SpringDefaultProfile::addBinding( _T("attack"), _T("Shift+a") ); SpringDefaultProfile::addBinding( _T("attack"), _T("a") ); SpringDefaultProfile::addBinding( _T("buildfacing dec"), _T("Shift+]") ); SpringDefaultProfile::addBinding( _T("buildfacing dec"), _T("]") ); SpringDefaultProfile::addBinding( _T("buildfacing inc"), _T("Shift+[") ); SpringDefaultProfile::addBinding( _T("buildfacing inc"), _T("[") ); SpringDefaultProfile::addBinding( _T("buildspacing dec"), _T("Any+x") ); SpringDefaultProfile::addBinding( _T("buildspacing inc"), _T("Any+z") ); SpringDefaultProfile::addBinding( _T("chat"), _T("Any+enter") ); SpringDefaultProfile::addBinding( _T("chatall"), _T("Ctrl+enter") ); SpringDefaultProfile::addBinding( _T("chatally"), _T("Alt+enter") ); SpringDefaultProfile::addBinding( _T("chatspec"), _T("Shift+enter") ); SpringDefaultProfile::addBinding( _T("chatswitchall"), _T("Ctrl+enter") ); SpringDefaultProfile::addBinding( _T("chatswitchally"), _T("Alt+enter") ); SpringDefaultProfile::addBinding( _T("chatswitchspec"), _T("Shift+enter") ); SpringDefaultProfile::addBinding( _T("cloak"), _T("Shift+k") ); SpringDefaultProfile::addBinding( _T("cloak"), _T("k") ); SpringDefaultProfile::addBinding( _T("controlunit"), _T("Any+c") ); SpringDefaultProfile::addBinding( _T("createvideo"), _T("Ctrl+Shift+f10") ); SpringDefaultProfile::addBinding( _T("debug"), _T("Alt+b") ); SpringDefaultProfile::addBinding( _T("decguiopacity"), _T("Shift+,") ); SpringDefaultProfile::addBinding( _T("decreaseViewRadius"), _T("Any+end") ); SpringDefaultProfile::addBinding( _T("dgun"), _T("Shift+d") ); SpringDefaultProfile::addBinding( _T("dgun"), _T("d") ); SpringDefaultProfile::addBinding( _T("drawinmap"), _T("Any+\\") ); SpringDefaultProfile::addBinding( _T("drawinmap"), _T("Any+`") ); //SpringDefaultProfile::addBinding( _T("drawinmap"), _T("Any+0xa7") ); what key is this?? SpringDefaultProfile::addBinding( _T("dynamicSky"), _T("Any+f7") ); SpringDefaultProfile::addBinding( _T("edit_backspace"), _T("Any+backspace") ); SpringDefaultProfile::addBinding( _T("edit_complete"), _T("Any+tab") ); SpringDefaultProfile::addBinding( _T("edit_delete"), _T("Any+delete") ); SpringDefaultProfile::addBinding( _T("edit_end"), _T("Alt+right") ); SpringDefaultProfile::addBinding( _T("edit_end"), _T("Any+end") ); SpringDefaultProfile::addBinding( _T("edit_escape"), _T("Any+escape") ); SpringDefaultProfile::addBinding( _T("edit_home"), _T("Alt+left") ); SpringDefaultProfile::addBinding( _T("edit_home"), _T("Any+home") ); SpringDefaultProfile::addBinding( _T("edit_next_char"), _T("Any+right") ); SpringDefaultProfile::addBinding( _T("edit_next_line"), _T("Any+down") ); SpringDefaultProfile::addBinding( _T("edit_next_word"), _T("Ctrl+right") ); SpringDefaultProfile::addBinding( _T("edit_prev_char"), _T("Any+left") ); SpringDefaultProfile::addBinding( _T("edit_prev_line"), _T("Any+up") ); SpringDefaultProfile::addBinding( _T("edit_prev_word"), _T("Ctrl+left") ); SpringDefaultProfile::addBinding( _T("edit_return"), _T("Any+enter") ); SpringDefaultProfile::addBinding( _T("fakemeta"), _T("space") ); SpringDefaultProfile::addBinding( _T("fight"), _T("Shift+f") ); SpringDefaultProfile::addBinding( _T("fight"), _T("f") ); SpringDefaultProfile::addBinding( _T("forcestart"), _T("Alt+f") ); SpringDefaultProfile::addBinding( _T("gameinfo"), _T("Any+i") ); SpringDefaultProfile::addBinding( _T("group0"), _T("Any+0") ); SpringDefaultProfile::addBinding( _T("group1"), _T("Any+1") ); SpringDefaultProfile::addBinding( _T("group2"), _T("Any+2") ); SpringDefaultProfile::addBinding( _T("group3"), _T("Any+3") ); SpringDefaultProfile::addBinding( _T("group4"), _T("Any+4") ); SpringDefaultProfile::addBinding( _T("group5"), _T("Any+5") ); SpringDefaultProfile::addBinding( _T("group6"), _T("Any+6") ); SpringDefaultProfile::addBinding( _T("group7"), _T("Any+7") ); SpringDefaultProfile::addBinding( _T("group8"), _T("Any+8") ); SpringDefaultProfile::addBinding( _T("group9"), _T("Any+9") ); SpringDefaultProfile::addBinding( _T("groupadd"), _T("q") ); SpringDefaultProfile::addBinding( _T("groupclear"), _T("Shift+q") ); SpringDefaultProfile::addBinding( _T("groupselect"), _T("q") ); SpringDefaultProfile::addBinding( _T("guard"), _T("Shift+g") ); SpringDefaultProfile::addBinding( _T("guard"), _T("g") ); SpringDefaultProfile::addBinding( _T("hideinterface"), _T("Any+f5") ); SpringDefaultProfile::addBinding( _T("hotbind"), _T("Ctrl+insert") ); SpringDefaultProfile::addBinding( _T("hotunbind"), _T("Ctrl+delete") ); SpringDefaultProfile::addBinding( _T("incguiopacity"), _T("Shift+.") ); SpringDefaultProfile::addBinding( _T("increaseViewRadius"), _T("Any+home") ); SpringDefaultProfile::addBinding( _T("loadunits"), _T("Shift+l") ); SpringDefaultProfile::addBinding( _T("loadunits"), _T("l") ); SpringDefaultProfile::addBinding( _T("mouse2"), _T("Any+j") ); SpringDefaultProfile::addBinding( _T("mousestate"), _T("backspace") ); SpringDefaultProfile::addBinding( _T("move"), _T("Shift+m") ); SpringDefaultProfile::addBinding( _T("move"), _T("m") ); SpringDefaultProfile::addBinding( _T("moveback"), _T("Any+down") ); SpringDefaultProfile::addBinding( _T("movedown"), _T("Any+pagedown") ); SpringDefaultProfile::addBinding( _T("movefast"), _T("Any+shift") ); SpringDefaultProfile::addBinding( _T("moveforward"), _T("Any+up") ); SpringDefaultProfile::addBinding( _T("moveleft"), _T("Any+left") ); SpringDefaultProfile::addBinding( _T("moveright"), _T("Any+right") ); SpringDefaultProfile::addBinding( _T("moveslow"), _T("Any+ctrl") ); SpringDefaultProfile::addBinding( _T("moveup"), _T("Any+pageup") ); SpringDefaultProfile::addBinding( _T("nextmenu"), _T(".") ); SpringDefaultProfile::addBinding( _T("onoff"), _T("Shift+x") ); SpringDefaultProfile::addBinding( _T("onoff"), _T("x") ); SpringDefaultProfile::addBinding( _T("pastetext"), _T("Ctrl+v") ); SpringDefaultProfile::addBinding( _T("patrol"), _T("Shift+p") ); SpringDefaultProfile::addBinding( _T("patrol"), _T("p") ); SpringDefaultProfile::addBinding( _T("pause"), _T("Any+pause") ); SpringDefaultProfile::addBinding( _T("prevmenu"), _T(",") ); SpringDefaultProfile::addBinding( _T("quitforce"), _T("Ctrl+Shift+esc") ); SpringDefaultProfile::addBinding( _T("quitmenu"), _T("esc") ); SpringDefaultProfile::addBinding( _T("reclaim"), _T("Shift+e") ); SpringDefaultProfile::addBinding( _T("reclaim"), _T("e") ); SpringDefaultProfile::addBinding( _T("repair"), _T("Shift+r") ); SpringDefaultProfile::addBinding( _T("repair"), _T("r") ); SpringDefaultProfile::addBinding( _T("savegame"), _T("Ctrl+Shift+f8") ); SpringDefaultProfile::addBinding( _T("screenshot"), _T("Any+f11") ); SpringDefaultProfile::addBinding( _T("screenshot"), _T("Any+f12") ); SpringDefaultProfile::addBinding( _T("selfd"), _T("Ctrl+d") ); SpringDefaultProfile::addBinding( _T("selfd queued"), _T("Ctrl+Shift+d") ); SpringDefaultProfile::addBinding( _T("sharedialog"), _T("Any+h") ); SpringDefaultProfile::addBinding( _T("showElevation"), _T("Any+f1") ); SpringDefaultProfile::addBinding( _T("showhealthbars"), _T("Any+f9") ); SpringDefaultProfile::addBinding( _T("singlestep"), _T("Alt+o") ); SpringDefaultProfile::addBinding( _T("slowdown"), _T("Any+-") ); SpringDefaultProfile::addBinding( _T("slowdown"), _T("Any+delete") ); SpringDefaultProfile::addBinding( _T("slowdown"), _T("Any+numpad-") ); SpringDefaultProfile::addBinding( _T("specteam 0"), _T("1") ); SpringDefaultProfile::addBinding( _T("specteam 1"), _T("2") ); SpringDefaultProfile::addBinding( _T("specteam 10"), _T("Ctrl+1") ); SpringDefaultProfile::addBinding( _T("specteam 11"), _T("Ctrl+2") ); SpringDefaultProfile::addBinding( _T("specteam 12"), _T("Ctrl+3") ); SpringDefaultProfile::addBinding( _T("specteam 13"), _T("Ctrl+4") ); SpringDefaultProfile::addBinding( _T("specteam 14"), _T("Ctrl+5") ); SpringDefaultProfile::addBinding( _T("specteam 15"), _T("Ctrl+6") ); SpringDefaultProfile::addBinding( _T("specteam 16"), _T("Ctrl+7") ); SpringDefaultProfile::addBinding( _T("specteam 17"), _T("Ctrl+8") ); SpringDefaultProfile::addBinding( _T("specteam 18"), _T("Ctrl+9") ); SpringDefaultProfile::addBinding( _T("specteam 19"), _T("Ctrl+0") ); SpringDefaultProfile::addBinding( _T("specteam 2"), _T("3") ); SpringDefaultProfile::addBinding( _T("specteam 3"), _T("4") ); SpringDefaultProfile::addBinding( _T("specteam 4"), _T("5") ); SpringDefaultProfile::addBinding( _T("specteam 5"), _T("6") ); SpringDefaultProfile::addBinding( _T("specteam 6"), _T("7") ); SpringDefaultProfile::addBinding( _T("specteam 7"), _T("8") ); SpringDefaultProfile::addBinding( _T("specteam 8"), _T("9") ); SpringDefaultProfile::addBinding( _T("specteam 9"), _T("0") ); //SpringDefaultProfile::addBinding( _T("speedup"), _T("Any++") ); makes no sense for me. its the same as Any+= effectively SpringDefaultProfile::addBinding( _T("speedup"), _T("Any+=") ); SpringDefaultProfile::addBinding( _T("speedup"), _T("Any+insert") ); SpringDefaultProfile::addBinding( _T("speedup"), _T("Any+numpad+") ); SpringDefaultProfile::addBinding( _T("stop"), _T("Shift+s") ); SpringDefaultProfile::addBinding( _T("stop"), _T("s") ); SpringDefaultProfile::addBinding( _T("togglecammode"), _T("Ctrl+backspace") ); SpringDefaultProfile::addBinding( _T("togglecammode"), _T("Shift+backspace") ); SpringDefaultProfile::addBinding( _T("togglelos"), _T("Any+l") ); SpringDefaultProfile::addBinding( _T("toggleoverview"), _T("Any+tab") ); SpringDefaultProfile::addBinding( _T("toggleradarandjammer"), _T("Any+;") ); SpringDefaultProfile::addBinding( _T("track"), _T("Any+t") ); SpringDefaultProfile::addBinding( _T("trackmode"), _T("Ctrl+t") ); SpringDefaultProfile::addBinding( _T("unloadunits"), _T("Shift+u") ); SpringDefaultProfile::addBinding( _T("unloadunits"), _T("u") ); SpringDefaultProfile::addBinding( _T("viewfps"), _T("Ctrl+f1") ); SpringDefaultProfile::addBinding( _T("viewrot"), _T("Ctrl+f4") ); SpringDefaultProfile::addBinding( _T("viewta"), _T("Ctrl+f2") ); SpringDefaultProfile::addBinding( _T("viewtw"), _T("Ctrl+f3") ); SpringDefaultProfile::addBinding( _T("wait"), _T("w") ); SpringDefaultProfile::addBinding( _T("wait queued"), _T("Shift+w") ); SpringDefaultProfile::m_bindings.setMetaKey( _T("space") ); } void SpringDefaultProfile::addBinding( const wxString& command, const wxString& key ) { SpringDefaultProfile::m_bindings.bind( command, key ); } const key_binding& SpringDefaultProfile::getBindings() { SpringDefaultProfile::initialize(); return SpringDefaultProfile::m_bindings; } springlobby-0.169/src/springsettings/hotkeys/SpringDefaultProfile.h0000600000176000000410000000067512105760300027230 0ustar buildbotwww-data00000000000000#ifndef __SPRING_DEFAULT_PROFILE_h__ #define __SPRING_DEFAULT_PROFILE_h__ #include #include #include #include "hotkey_parser.h" class SpringDefaultProfile : public key_binding { public: static void initialize(); static const key_binding& getBindings(); private: SpringDefaultProfile(); static void addBinding( const wxString& key, const wxString& command ); static key_binding m_bindings; }; #endif springlobby-0.169/src/springsettings/hotkeys/commandlist.cpp0000600000176000000410000002751512105760300026007 0ustar buildbotwww-data00000000000000#include "commandlist.h" CommandList::CommandMap CommandList::m_commands; CommandList::CommandMap CommandList::m_customCommands; unsigned CommandList::m_nextCmdId = 1; void CommandList::InitializeCommandList() { if ( !CommandList::m_commands.empty() ) { return; } CommandList::addCommand(wxT("General"), wxT("fakemeta"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("quitmenu"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("quitforce"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("chat"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("chatally"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("chatswitchally"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("chatall"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("chatswitchall"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("chatspec"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("chatswitchspec"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("edit_return"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_escape"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_complete"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_backspace"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_delete"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_home"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_home"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_end"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_end"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_prev_char"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_next_char"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_prev_word"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_next_word"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_prev_line"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("edit_next_line"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("pastetext"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("pause"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("mouse2"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("mousestate"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("togglecammode"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("togglecammode"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("gameinfo"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("togglelos"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("toggleradarandjammer"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("toggleoverview"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("prevmenu"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("nextmenu"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("decguiopacity"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("incguiopacity"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("hotbind"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("hotunbind"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("speedup"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("speedup"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("slowdown"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("speedup"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("slowdown"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("speedup"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("slowdown"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("debug"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("singlestep"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("sharedialog"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("controlunit"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("trackmode"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("track"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("drawinmap"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("drawinmap"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("drawinmap"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("increaseViewRadius"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("decreaseViewRadius"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("moveforward"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("moveback"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("moveright"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("moveleft"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("moveup"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("movedown"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("movefast"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("moveslow"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("specteam 0"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 1"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 2"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 3"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 4"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 5"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 6"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 7"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 8"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 9"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 10"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 11"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 12"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 13"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 14"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 15"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 16"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 17"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 18"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("specteam 19"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("group0"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("group1"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("group2"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("group3"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("group4"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("group5"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("group6"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("group7"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("group8"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("group9"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("buildspacing inc"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("buildspacing dec"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("buildfacing inc"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("buildfacing inc"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("buildfacing dec"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("buildfacing dec"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("attack"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("areaattack"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("dgun"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("selfd"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("selfd queued"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("reclaim"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("fight"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("forcestart"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("guard"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("cloak"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("loadunits"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("move"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("patrol"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("repair"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("stop"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("unloadunits"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("unloadunits"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("wait"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("wait queued"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("onoff"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("onoff"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("groupselect"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("groupadd"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("aiselect"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("groupclear"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("viewfps"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("viewta"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("viewtw"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("viewrot"), wxT("Nice command")); // CommandList::addCommand(wxT("General"), wxT("showElevation"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("ShowPathMap"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("LastMsgPos"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("ShowMetalMap"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("hideinterface"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("NoSound"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("dynamicSky"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("savegame"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("showhealthbars"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("createvideo"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("screenshot"), wxT("Nice command")); CommandList::addCommand(wxT("General"), wxT("screenshot"), wxT("Nice command")); } springlobby-0.169/src/springsettings/hotkeys/commandlist.h0000600000176000000410000000523712105760300025451 0ustar buildbotwww-data00000000000000#ifndef __COMMANDLIST_h__ #define __COMMANDLIST_h__ #include #include #include #include #include #include "HotkeyException.h" class CommandList { private: static void InitializeCommandList(); public: struct Command { Command() : m_id(0) {} wxString m_command; wxString m_category; wxString m_description; unsigned m_id; }; typedef std::map CommandMap; static CommandList::CommandMap getCommands() { CommandList::InitializeCommandList(); CommandList::CommandMap merged = m_commands; for ( CommandList::CommandMap::const_iterator iter = CommandList::m_customCommands.begin(); iter != CommandList::m_customCommands.end(); ++iter ) { merged[ iter->first ] = iter->second; } return merged; } static const CommandList::Command& getCommandByName(const wxString& command) { CommandList::InitializeCommandList(); if ( m_commands.find( command ) == m_commands.end() ) { if ( m_customCommands.find( command ) == m_customCommands.end() ) { //add the command CommandList::addCustomCommand( command ); } return m_customCommands[command]; } return m_commands[command]; } static void addCustomCommand(const wxString& command) { wxString category = wxT("Custom"); wxString descr = wxT("Custom command"); if ( command.StartsWith( wxT("select ") ) ) { category = wxT("Selection"); descr = wxT("User-defined selection command"); } CommandList::addCustomCommand( category, command, descr ); } static void addCustomCommand(const wxString& category, const wxString& command, const wxString& description ) { if ( CommandList::m_customCommands.find( command ) != CommandList::m_customCommands.end() ) { throw HotkeyException( _("Command already exists! Not added!") ); } //put new command to command list CommandList::m_customCommands[command] = Command(); //fill it Command& cmd = CommandList::m_customCommands[command]; cmd.m_category = category; cmd.m_command = command; cmd.m_description = description; cmd.m_id = CommandList::m_nextCmdId++; } private: CommandList(); static void addCommand(const wxString& category, const wxString& command, const wxString& description ) { //put new command to command list CommandList::m_commands[command] = Command(); //fill it Command& cmd = CommandList::m_commands[command]; cmd.m_category = category; cmd.m_command = command; cmd.m_description = description; cmd.m_id = CommandList::m_nextCmdId++; } static unsigned m_nextCmdId; static CommandMap m_commands; static CommandMap m_customCommands; }; #endif springlobby-0.169/src/springsettings/hotkeys/hotkey_panel.cpp0000600000176000000410000004310112105760300026144 0ustar buildbotwww-data00000000000000#include "hotkey_panel.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "../../utils/customdialogs.h" #include "../../utils/conversion.h" #include "hotkey_parser.h" #include "wxSpringCommand.h" #include "commandlist.h" #include "../../settings.h" #include "KeynameConverter.h" #include "SpringDefaultProfile.h" #include "HotkeyException.h" #include "AddSelectionCmdDlg.h" hotkey_panel::hotkey_panel(wxWindow *parent, wxWindowID id , const wxString &title , const wxPoint& pos , const wxSize& size, long style) try : wxScrolledWindow(parent, id, pos, size, style|wxTAB_TRAVERSAL|wxHSCROLL,title), m_uikeys_manager(sett().GetCurrentUsedUikeys() ) { try { m_pKeyConfigPanel = new wxKeyConfigPanel( this, -1, wxDefaultPosition, wxDefaultSize, (wxKEYBINDER_DEFAULT_STYLE & ~wxKEYBINDER_SHOW_APPLYBUTTON), wxT("HotkeyPanel"), wxT("Selection"), wxCommandEventHandler(hotkey_panel::ButtonAddSelectionCommandClicked), wxT("Custom"), wxCommandEventHandler(hotkey_panel::ButtonAddCustomCommandClicked), wxT("Add Command:") ); KeynameConverter::initialize(); UpdateControls(); //group box wxStaticBoxSizer* sbSizer1 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxT("Hotkey Configuration") ), wxVERTICAL ); sbSizer1->Add( m_pKeyConfigPanel ); //borders wxSizer * parentSizer = new wxBoxSizer(wxHORIZONTAL); wxSizer * childLSizer = new wxBoxSizer(wxVERTICAL); childLSizer->Add(0, 5, 0); childLSizer->Add(sbSizer1,0,wxEXPAND|wxALL,5); parentSizer->Add(10, 0, 0); parentSizer->Add(childLSizer,0,wxEXPAND|wxTOP,5); //content wxFlexGridSizer* fgSizer1; fgSizer1 = new wxFlexGridSizer( 1, 1, 0, 0 ); fgSizer1->SetFlexibleDirection( wxBOTH ); fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); fgSizer1->Add( parentSizer, 1, wxEXPAND, 5 ); this->SetSizer( fgSizer1 ); this->Layout(); } catch( const HotkeyException& ex ) { customMessageBox(SS_MAIN_ICON, ex.getMessage(), _("Hotkey Error"), wxOK | wxICON_HAND ); throw; } } catch( const HotkeyException& ex ) { customMessageBox(SS_MAIN_ICON, ex.getMessage(), _("Hotkey Error"), wxOK | wxICON_HAND ); throw; } hotkey_panel::~hotkey_panel(void) { } void hotkey_panel::ButtonAddSelectionCommandClicked( wxCommandEvent& ) { AddSelectionCmdDlg dlg( this ); if ( dlg.ShowModal() == wxID_OK ) { wxString cmd = wxT("select ") + dlg.getCommandString(); this->OnAddCommand( cmd ); } } void hotkey_panel::ButtonAddCustomCommandClicked( wxCommandEvent& ) { wxString str = wxGetTextFromUser( _("Enter new command:"), _("Add Custom Command") ); if ( str.size() > 0 ) { this->OnAddCommand( str ); } } void hotkey_panel::OnAddCommand( const wxString& cmd ) { try { CommandList::addCustomCommand( cmd ); //refresh view this->updateTreeView(); this->addCommandToAllPanelProfiles( CommandList::getCommandByName( cmd ) ); } catch( const HotkeyException& ex ) { customMessageBox(SS_MAIN_ICON, ex.getMessage(), _("Add Command Error"), wxOK | wxICON_HAND ); } //auto-select new command (even try after exception) this->m_pKeyConfigPanel->SelectCommand( cmd ); } /* bool hotkey_panel::isBindingInProfile( const key_binding_k2c& springprofile, const wxString& command, const wxString& springkey ) { key_binding::const_iterator citer = springprofile.find( command ); if ( citer == springprofile.end() ) { return false; } key_set::const_iterator kiter = citer->second.find( springkey ); if ( kiter == citer->second.end() ) { return false; } return true; } */ key_binding hotkey_panel::getBindingsFromProfile( const wxKeyProfile& profile ) { //sort the stuff typedef std::map > SortedKeyCommands; SortedKeyCommands tmpSorted; key_binding binding; { //add non-any keys const wxCmdArray* pCmdArr = profile.GetArray(); for( size_t j=0; j < pCmdArr->GetCount(); ++j ) { const wxCmd& cmd = *pCmdArr->Item(j); for( int k=0; k < cmd.GetShortcutCount(); ++k ) { const wxKeyBind* keys = cmd.GetShortcut( k ); if ( keys->HasAnyModifier() ) continue; tmpSorted[ keys->GetOrderIndex() ] = std::make_pair( KeynameConverter::spring2wxKeybinder( keys->GetStr(), true ), cmd.GetName() ); } } for( SortedKeyCommands::const_iterator iter = tmpSorted.begin(); iter != tmpSorted.end(); ++iter ) { binding.bind( iter->second.second, iter->second.first ); } } tmpSorted.clear(); { //add any-keys const wxCmdArray* pCmdArr = profile.GetArray(); for( size_t j=0; j < pCmdArr->GetCount(); ++j ) { const wxCmd& cmd = *pCmdArr->Item(j); for( int k=0; k < cmd.GetShortcutCount(); ++k ) { const wxKeyBind* keys = cmd.GetShortcut( k ); if ( !keys->HasAnyModifier() ) continue; tmpSorted[ keys->GetOrderIndex() ] = std::make_pair( KeynameConverter::spring2wxKeybinder( keys->GetStr(),true ), cmd.GetName() ); } } for( SortedKeyCommands::const_iterator iter = tmpSorted.begin(); iter != tmpSorted.end(); ++iter ) { binding.bind( iter->second.second, iter->second.first ); } } //add keysyms binding.setKeySyms( profile.GetKeySyms() ); binding.setKeySymsSet( profile.GetKeySymsSet() ); binding.setMetaKey( KeynameConverter::spring2wxKeybinder( profile.GetMetaKey(), true ) ); return binding; } /* bool hotkey_panel::isDefaultBinding( const wxString& command, const wxString& springKey ) { const key_binding& defBindings = SpringDefaultProfile::getAllBindingsC2K(); return hotkey_panel::isBindingInProfile( defBindings, command, springKey ); }*/ /* * We do only save the bindings that differ from the standard spring keybindings */ void hotkey_panel::SaveSettings() { if ( this->m_uikeys_manager.isDontTouchMode() ) return; try { sett().DeleteHotkeyProfiles(); wxKeyProfileArray profileArr = m_pKeyConfigPanel->GetProfiles(); for( size_t i=0; i < profileArr.GetCount(); ++i ) { const wxKeyProfile& profile = *profileArr.Item(i); if ( profile.IsNotEditable() ) { //skip build-in profiles continue; } const key_binding profileBinds = hotkey_panel::getBindingsFromProfile( profile ); const key_binding defaultBinds = SpringDefaultProfile::getBindings(); //check if any bindings from the default bindings have been unbind. and save that info to the settings { const key_binding removedBinds = defaultBinds - profileBinds; const key_commands_sorted& delCmds = removedBinds.getBinds(); int orderIdx = -1; for( key_commands_sorted::const_iterator iter = delCmds.begin(); iter != delCmds.end(); ++iter ) { //check now if this default key binding has been deleted from this profile sett().SetHotkey( profile.GetName(), iter->second, iter->first, orderIdx-- ); } } //add bindings { const key_binding addedBinds = profileBinds - defaultBinds; const key_commands_sorted& addCmds = addedBinds.getBinds(); int orderIdx = 1; for( key_commands_sorted::const_iterator iter = addCmds.begin(); iter != addCmds.end(); ++iter ) { //only write non-default bindings to settings sett().SetHotkey( profile.GetName(), iter->second, iter->first, orderIdx++ ); } } //add key symbols { for( key_sym_map::const_iterator iter = profileBinds.getKeySyms().begin(); iter != profileBinds.getKeySyms().end(); ++iter ) { sett().SetHotkeyKeySym( profile.GetName(), iter->first, iter->second ); } } //add key set symbols { for( key_sym_set_map::const_iterator iter = profileBinds.getKeySymsSet().begin(); iter != profileBinds.getKeySymsSet().end(); ++iter ) { sett().SetHotkeyKeySymSet( profile.GetName(), iter->first, iter->second ); } } //add meta if ( defaultBinds.getMetaKey() != profileBinds.getMetaKey() ) { sett().SetHotkeyMeta( profile.GetName(), profileBinds.getMetaKey() ); } } sett().SaveSettings(); //Write bindings to file const wxKeyProfile& selProfile = *this->m_pKeyConfigPanel->GetSelProfile(); key_binding bindings = hotkey_panel::getBindingsFromProfile( selProfile ); this->m_uikeys_manager.writeBindingsToFile( bindings ); this->m_pKeyConfigPanel->ResetProfileBeenModifiedOrSelected(); } catch( const HotkeyException& ex ) { customMessageBox(SS_MAIN_ICON, ex.getMessage(), _("Hotkey SaveSettings error"), wxOK | wxICON_HAND ); } } wxKeyProfile hotkey_panel::buildNewProfile( const wxString& name, const wxString& description, bool readOnly ) { wxKeyProfile profile( name, description, readOnly, readOnly ); const CommandList::CommandMap& commands = CommandList::getCommands(); for( CommandList::CommandMap::const_iterator iter = commands.begin(); iter != commands.end(); ++iter ) { const CommandList::Command& cmd = iter->second; wxSpringCommand* pCmd = new wxSpringCommand( cmd.m_command, cmd.m_description, cmd.m_id ); profile.AddCmd( pCmd ); } return profile; } void hotkey_panel::addCommandToAllPanelProfiles( const CommandList::Command& cmd ) { //backup current selected profile id int curProfId = this->m_pKeyConfigPanel->GetSelProfileIdx(); wxKeyProfileArray profileArr = this->m_pKeyConfigPanel->GetProfiles(); this->m_pKeyConfigPanel->RemoveAllProfiles(); for( size_t i=0; i < profileArr.GetCount(); ++i ) { wxKeyProfile& profile = *profileArr.Item(i); wxSpringCommand* pCmd = new wxSpringCommand( cmd.m_command, cmd.m_description, cmd.m_id ); profile.AddCmd( pCmd ); this->m_pKeyConfigPanel->AddProfile( profile ); } //selected the previously selected profile this->m_pKeyConfigPanel->SetSelProfile( curProfId ); } void hotkey_panel::putKeybindingsToProfile( wxKeyProfile& profile, const key_binding& bindings ) { const key_commands_sorted& keys = bindings.getBinds(); for( key_commands_sorted::const_iterator iter = keys.begin(); iter != keys.end(); ++iter ) { profile.AddShortcut( CommandList::getCommandByName(iter->second).m_id, KeynameConverter::spring2wxKeybinder( iter->first ) ); } profile.SetKeySyms( bindings.getKeySyms() ); profile.SetKeySymsSet( bindings.getKeySymsSet() ); profile.SetMetaKey( KeynameConverter::spring2wxKeybinder( bindings.getMetaKey() ) ); } wxString hotkey_panel::getNextFreeProfileName() { const wxString profNameTempl = wxT("UserProfile "); wxString curProfTryName; const wxKeyProfileArray profileArr = this->m_pKeyConfigPanel->GetProfiles(); for( unsigned k=1; k < 99999u; ++k ) { bool found = false; curProfTryName = profNameTempl; curProfTryName << k; for( size_t i=0; i < profileArr.GetCount(); ++i ) { const wxKeyProfile& profile = *profileArr.Item(i); if ( profile.GetName() == curProfTryName ) { found = true; break; } } if ( found == false ) { break; } } return curProfTryName; } void hotkey_panel::selectProfileFromUikeys() { const key_binding& curBinding = this->m_uikeys_manager.getBindings(); const wxKeyProfileArray profileArr = this->m_pKeyConfigPanel->GetProfiles(); static int noProfileFound = -1; int foundIdx = noProfileFound; for( size_t i=0; i < profileArr.GetCount(); ++i ) { const wxKeyProfile& profile = *profileArr.Item(i); const key_binding proBinds = hotkey_panel::getBindingsFromProfile( profile ); if ( curBinding == proBinds ) { foundIdx = i; break; } } if ( foundIdx == noProfileFound ) { if ( !this->m_uikeys_manager.isDontTouchMode() ) { const wxString profName = this->getNextFreeProfileName(); wxKeyProfile profile = buildNewProfile( profName, wxT("User hotkey profile"), false ); this->putKeybindingsToProfile( profile, curBinding ); this->m_pKeyConfigPanel->AddProfile( profile, true ); customMessageBox(SS_MAIN_ICON, _("Your current hotkey configuration does not match any known profile.\n A new profile with the name '" + profName + _("' has been created.")), _("New hotkey profile found"), wxOK ); foundIdx = this->m_pKeyConfigPanel->GetProfiles().GetCount() - 1; } else { foundIdx = 0; } } this->m_pKeyConfigPanel->SetSelProfile( foundIdx ); } wxArrayString hotkey_panel::sortArrayStringNumerical( const wxArrayString& arr ) { //we get the array here ordered as strings. e.g. "1","10","2","3","4" //but we actually do want it ordered as numbers "1","2","3",..."9","10","11","12" std::list sortList; for( size_t k=0; k < arr.GetCount(); ++k ) { wxString idx = arr.Item(k); long v = 0; idx.ToLong( &v ); sortList.push_back( v ); } sortList.sort(); //sort it numerically wxArrayString sortArr; for( std::list::const_iterator iter = sortList.begin(); iter != sortList.end(); ++iter ) { sortArr.Add( wxString::Format(wxT("%i"),(*iter)) ); } return sortArr; } key_binding_collection hotkey_panel::getProfilesFromSettings() { key_binding_collection coll; wxArrayString profiles = sett().GetHotkeyProfiles(); for( size_t i=0; i < profiles.GetCount(); ++i) { wxString profName = profiles.Item(i); //fill with the default bindings coll[profName] = SpringDefaultProfile::getBindings(); //add keybindings wxArrayString orderIdxs = hotkey_panel::sortArrayStringNumerical( sett().GetHotkeyProfileOrderIndices( profName ) ); for( size_t k=0; k < orderIdxs.GetCount(); ++k ) { wxString idx = orderIdxs.Item(k); wxArrayString keys = sett().GetHotkeyProfileCommandKeys( profName, idx ); for( size_t j=0; j < keys.GetCount(); ++j ) { const wxString& cmd = sett().GetHotkey( profName, idx, keys.Item(j) ); const wxString& springKey = keys.Item(j); //KeynameConverter::spring2wxKeybinder( keys.Item(j), true ); long lIdx = 0; if ( idx.ToLong( &lIdx ) == false ) { throw HotkeyException( _("Error parsing springsettings hotkey profile. Invalid order index: ") + idx ); } if ( lIdx < 0 ) { coll[profName].unbind( cmd, springKey ); } else { coll[profName].bind( cmd, springKey ); } } } //add keySyms wxArrayString keySyms = sett().GetHotkeyKeySymNames( profName ); for( size_t k=0; k < keySyms.GetCount(); ++k ) { const wxString& value = sett().GetHotkeyKeySym( profName, keySyms.Item(k) ); coll[profName].addKeySym( keySyms.Item(k), value ); } //add keySets wxArrayString keySymsSet = sett().GetHotkeyKeySymSetNames( profName ); for( size_t k=0; k < keySymsSet.GetCount(); ++k ) { const wxString& value = sett().GetHotkeyKeySymSet( profName, keySymsSet.Item(k) ); coll[profName].addKeySymSet( keySymsSet.Item(k), value ); } //add meta wxString meta = sett().GetHotkeyMeta( profName ); if ( meta.size() > 0 ) { coll[profName].setMetaKey( meta ); } } return coll; } void hotkey_panel::UpdateControls(int /*unused*/) { this->updateTreeView(); //Fetch the profiles this->m_pKeyConfigPanel->RemoveAllProfiles(); //put default profile wxKeyProfile defProf = this->buildNewProfile( wxT("Spring default"), wxT("Spring's default keyprofile"),true); const key_binding defBinds = SpringDefaultProfile::getBindings(); this->putKeybindingsToProfile( defProf, defBinds ); this->m_pKeyConfigPanel->AddProfile( defProf ); //put user profiles from springsettings configuration { key_binding_collection profiles = hotkey_panel::getProfilesFromSettings(); for( key_binding_collection::const_iterator piter = profiles.begin(); piter != profiles.end(); ++piter ) { wxString profName = piter->first; //create profile and add bindings wxKeyProfile profile = buildNewProfile(profName, wxT("User hotkey profile"),false); this->putKeybindingsToProfile( profile, piter->second ); this->m_pKeyConfigPanel->AddProfile( profile ); getBindingsFromProfile( *this->m_pKeyConfigPanel->GetProfile(1) ); } } this->m_pKeyConfigPanel->ResetProfileBeenModifiedOrSelected(); selectProfileFromUikeys(); } void hotkey_panel::updateTreeView() { wxKeyConfigPanel::ControlMap ctrlMap; { //1. import control map const CommandList::CommandMap& commands = CommandList::getCommands(); for( CommandList::CommandMap::const_iterator iter = commands.begin(); iter != commands.end(); ++iter ) { const CommandList::Command& cmd = iter->second; ctrlMap[ cmd.m_category ][ cmd.m_command ] = cmd.m_id; } } { //2. import springsettings-config-profiles key_binding_collection profiles = hotkey_panel::getProfilesFromSettings(); for( key_binding_collection::const_iterator piter = profiles.begin(); piter != profiles.end(); ++piter ) { const wxString profName = piter->first; //add keybindings const key_commands_sorted& cmds = piter->second.getBinds(); for( key_commands_sorted::const_iterator iter = cmds.begin(); iter != cmds.end(); ++iter ) { const CommandList::Command& cmd = CommandList::getCommandByName( iter->second ); ctrlMap[ cmd.m_category ][ cmd.m_command ] = cmd.m_id; } } } { //3. from uikeys.txt const key_commands_sorted& uikeys = this->m_uikeys_manager.getBindings().getBinds(); //key_binding_collection profiles = hotkey_panel::getProfilesFromSettings(); for( key_commands_sorted::const_iterator iter = uikeys.begin(); iter != uikeys.end(); ++iter ) { const CommandList::Command& cmd = CommandList::getCommandByName( iter->second ); ctrlMap[ cmd.m_category ][ cmd.m_command ] = cmd.m_id; } } this->m_pKeyConfigPanel->ImportRawList( ctrlMap, wxT("Commands") ); } bool hotkey_panel::HasProfileBeenModifiedOrSelected() const { if ( this->m_uikeys_manager.isDontTouchMode() ) return false; return this->m_pKeyConfigPanel && this->m_pKeyConfigPanel ->HasProfileBeenModifiedOrSelected(); } void hotkey_panel::ResetProfileBeenModifiedOrSelected() { this->m_pKeyConfigPanel->ResetProfileBeenModifiedOrSelected(); } springlobby-0.169/src/springsettings/hotkeys/hotkey_panel.h0000600000176000000410000000361612105760300025620 0ustar buildbotwww-data00000000000000 #ifndef __TAB_HOTKEY_h__ #define __TAB_HOTKEY_h__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../../wxkeybinder/keybinder.h" #include "hotkey_parser.h" #include "HotkeyTypes.h" #include "commandlist.h" class hotkey_panel : public wxScrolledWindow { public: hotkey_panel(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Hotkeys"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); ~hotkey_panel(void); void SaveSettings(); void UpdateControls(int=0/*unused*/); //static bool isDefaultBinding( const wxString& command, const wxString& springKey ); bool HasProfileBeenModifiedOrSelected() const; void ResetProfileBeenModifiedOrSelected(); //static bool isBindingInProfile( const key_binding& springprofile, const wxString& command, const wxString& springkey ); private: void selectProfileFromUikeys(); wxString getNextFreeProfileName(); void updateTreeView(); static key_binding_collection getProfilesFromSettings(); static key_binding getBindingsFromProfile( const wxKeyProfile& profile ); static wxArrayString sortArrayStringNumerical( const wxArrayString& arr ); wxKeyProfile buildNewProfile( const wxString& name, const wxString& description, bool readOnly ); void putKeybindingsToProfile( wxKeyProfile& profile, const key_binding& bindings ); void addCommandToAllPanelProfiles( const CommandList::Command& cmd ); wxKeyConfigPanel* m_pKeyConfigPanel; hotkey_parser m_uikeys_manager; void ButtonAddSelectionCommandClicked( wxCommandEvent& event ); void ButtonAddCustomCommandClicked( wxCommandEvent& event ); void OnAddCommand( const wxString& cmd ); }; #endif springlobby-0.169/src/springsettings/hotkeys/hotkey_parser.cpp0000600000176000000410000001517412105760300026352 0ustar buildbotwww-data00000000000000#include "hotkey_parser.h" #include #include #include #include #include #include #include #include #include "KeynameConverter.h" #include "SpringDefaultProfile.h" #include "hotkey_panel.h" #include "HotkeyException.h" #include "../../utils/conversion.h" hotkey_parser::hotkey_parser(const wxString& uikeys_filename) : m_filename( uikeys_filename ), m_dontTouch( false ) { //we will read the uikeys.txt now to get the key profile //1. Fill the profile with spring's default bindings KeynameConverter::initialize(); this->m_bindings = SpringDefaultProfile::getBindings(); //2. now read uikeys.txt and modify the default profile wxTextFile uiFile( this->m_filename ); if ( !uiFile.Open() ) { wxLogWarning( _( "can't open " ) + uikeys_filename ); return; } wxString line; for ( line = uiFile.GetFirstLine(); !uiFile.Eof(); line = uiFile.GetNextLine() ) { if ( line.Trim().StartsWith( wxT("//SPRINGSETTINGS DO NOT TOUCH") ) ) { this->m_dontTouch = true; } //look for comments int cmtPos = line.Find(wxT("//")); if (cmtPos != -1) { line.Truncate(cmtPos); //comment found. cut it. } line = line.Trim(); if ( line.size() == 0 ) continue; this->processLine( line ); } } bool hotkey_parser::processLine( const wxString& line ) { //tokenize line std::vector tokLine = hotkey_parser::tokenize_uikeys_line( line.c_str() ); if ( tokLine.size() == 1 ) { //unbindall? if ( tokLine[0] == wxT("unbindall") ) { this->m_bindings.clear(); } else { wxLogWarning( wxT( "skipping uikeys.txt line: " ) + line ); return false; } return true; } else if ( tokLine.size() == 2 ) { //fakemeta= const wxString& cmd = tokLine[0]; const wxString& key = tokLine[1]; if ( cmd == wxT("fakemeta") ) { this->m_bindings.setMetaKey( key ); } else if ( cmd == wxT("unbindkeyset") ) { this->m_bindings.unbindAllKeys( key ); } else if ( cmd == wxT("unbindaction") ) { this->m_bindings.unbindAllCmds( key ); } else { wxLogWarning( wxT( "skipping uikeys.txt line: " ) + line ); return false; } return true; } const wxString& cmd = tokLine[0]; const wxString& key = tokLine[1]; //append all following tokens to the action string for stuff like "buildspacing inc" wxString action; for( unsigned i=2; i < tokLine.size(); ++i ) { action.append( tokLine[i] + wxT(" ") ); } action.Trim(); if ( cmd == wxT("bind") ) { this->m_bindings.bind( action, KeynameConverter::normalizeSpringKey( key ) ); return true; } else if ( cmd == wxT("unbind") ) { this->m_bindings.unbind( action, KeynameConverter::normalizeSpringKey( key ) ); } else if ( cmd == wxT("keysym") ) { this->m_bindings.addKeySym( key, action ); } else if ( cmd == wxT("keyset") ) { this->m_bindings.addKeySymSet( key, action ); } else { wxLogWarning( _( "skipping uikeys.txt line (unknown token '" ) + cmd + wxT("'): ") + line ); return false; } return true; } hotkey_parser::~hotkey_parser(void) { } std::vector hotkey_parser::tokenize_uikeys_line( const wxString& line ) { wxStringTokenizer tkz( line, wxT(" \t") ); std::vector data; while ( tkz.HasMoreTokens() ) { data.push_back( tkz.GetNextToken() ); } return data; } const key_binding& hotkey_parser::getBindings() const { return this->m_bindings; } void hotkey_parser::writeBindingsToFile( const key_binding& springbindings ) { const wxString newTmpFilename = wxFileName::CreateTempFileName( _T("uikeys.")); wxTextFile newFile( newTmpFilename ); //open new file for writing if ( ( !newFile.Exists() && !newFile.Create() ) || ( newFile.Exists() && !newFile.Open() ) ) { throw HotkeyException( _("Error opening file for writing: ") + newTmpFilename ); } //now read the old uikeys.txt line after line and copy all comments to the new file wxTextFile oldFile( this->m_filename ); if ( !oldFile.Open() ) { throw HotkeyException( _("Error opening file for reading: ") + m_filename ); } for( size_t i = 0; i < oldFile.GetLineCount(); ++i ) { wxString line = oldFile.GetLine( i ); line.Trim(); if ( line.StartsWith(wxT("//")) ) { newFile.AddLine( line ); } } oldFile.Close(); //add keysyms key_sym_map keySymRev; for( key_sym_map::const_iterator iter = springbindings.getKeySyms().begin(); iter != springbindings.getKeySyms().end(); ++iter ) { newFile.AddLine( wxT("keysym\t\t") + iter->first + wxT("\t\t") + iter->second ); keySymRev[ KeynameConverter::convertHexValueToKey( iter->second ) ] = iter->first; } //add keysyms key_sym_map keySymSetRev; for( key_sym_set_map::const_iterator iter = springbindings.getKeySymsSet().begin(); iter != springbindings.getKeySymsSet().end(); ++iter ) { newFile.AddLine( wxT("keyset\t\t") + iter->first + wxT("\t\t") + springbindings.resolveKeySymKey(iter->second ) ); keySymSetRev[ iter->second ] = iter->first; } //add fakemeta if ( SpringDefaultProfile::getBindings().getMetaKey() != springbindings.getMetaKey() ) { newFile.AddLine( wxT("fakemeta\t\t") + springbindings.getMetaKey() ); } //check all default bindings if they still exist in current profile //do unbind if not const key_commands_sorted unbinds = (SpringDefaultProfile::getBindings() - springbindings).getBinds(); for( key_commands_sorted::const_iterator iter = unbinds.begin(); iter != unbinds.end(); ++iter ) { newFile.AddLine( wxT("unbind\t\t") + springbindings.resolveKeySymKeyAndSet( iter->first ) + wxT("\t\t") + iter->second ); } //add binds, should be ordered const key_commands_sorted dobinds = (springbindings - SpringDefaultProfile::getBindings()).getBinds(); for( key_commands_sorted::const_iterator iter = dobinds.begin(); iter != dobinds.end(); ++iter ) { newFile.AddLine( wxT("bind\t\t") + springbindings.resolveKeySymKeyAndSet( iter->first ) + wxT("\t\t") + iter->second ); } newFile.Write(); const wxString prevFilenameBak = this->m_filename + wxT(".bak"); //backup our current uikeys.txt { if ( wxRenameFile( this->m_filename, prevFilenameBak ) == false ) { throw HotkeyException( (wxFormat(_("Error renaming %s to %s")) % m_filename % prevFilenameBak ) ); } } //rename our new tmp file to uikeys.txt. restore backup if failed { if ( wxRenameFile( newTmpFilename, this->m_filename ) == false ) { wxString msg = _("Error renaming uikeys.txt.tmp to uikeys.txt."); //restore backup if ( wxRenameFile( prevFilenameBak, this->m_filename ) == false ) { msg += _(" Restoring backup failed also. Good luck!"); } throw HotkeyException( msg ); } } } bool hotkey_parser::isDontTouchMode() const { return this->m_dontTouch; } springlobby-0.169/src/springsettings/hotkeys/hotkey_parser.h0000600000176000000410000000144712105760300026015 0ustar buildbotwww-data00000000000000#ifndef __TAB_PARSER_h__ #define __TAB_PARSER_h__ #include #include #include #include #include "HotkeyTypes.h" class hotkey_parser { public: hotkey_parser( const wxString& filename ); ~hotkey_parser(); const key_binding& getBindings() const; void writeBindingsToFile( const key_binding& springbindings ); bool isDontTouchMode() const; //void dumpIncludeSourceCode( const wxString& filename ); private: //static bool isKeyInProfile( const key_binding& binding, const wxString& command, const wxString& keystring ); static std::vector< wxString > tokenize_uikeys_line( const wxString& line ); bool processLine( const wxString& line ); void updateBindsC2K(); key_binding m_bindings; const wxString m_filename; bool m_dontTouch; }; #endif springlobby-0.169/src/springsettings/hotkeys/hotkeypanel.fbp0000600000176000000410000131734212105760300026006 0ustar buildbotwww-data00000000000000 C++ 1 UTF-8 connect HotkeyForms 1000 none 0 hotkey_panels . 1 0 0 wxBOTH 1 0 wxID_ANY AddSelectionCmdDlgBase wxCAPTION Add Selection Command 1 wxBOTH 0 fgSizer5 wxFLEX_GROWMODE_SPECIFIED none 2 0 5 wxEXPAND 1 3 wxBOTH 0 fgSizer2 wxFLEX_GROWMODE_SPECIFIED none 2 0 5 wxALL|wxEXPAND 1 wxID_ANY Source sbSizer8 wxVERTICAL none 5 wxEXPAND 1 2 wxBOTH 0 fgSizer51 wxFLEX_GROWMODE_SPECIFIED none 2 0 5 wxALL|wxALIGN_CENTER_VERTICAL 0 1 0 wxID_ANY Complete map m_radioBtnSrcMap protected wxRB_GROUP 1 OnRadioBtnSrcMapClick 5 wxALL|wxALIGN_CENTER_VERTICAL 0 1 0 wxID_ANY All in view m_radioBtnSrcView protected 0 OnRadioBtnSrcViewClick 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 0 wxID_ANY Previous selection m_radioBtnSrcSel protected 0 OnRadioBtnSrcSelClick 5 wxEXPAND 1 bSizer3 wxHORIZONTAL none 5 wxALIGN_CENTER|wxALL 0 1 0 wxID_ANY Max. distance from mouse m_radioBtnSrcMouse protected 0 OnRadioBtnSrcDistClick 5 wxALL 0 0 0 wxID_ANY 0 m_textCtrlSrcMouseDist protected 40,-1 wxTE_RIGHT 5 wxEXPAND 1 0 protected 0 5 wxALL 0 0 0 0 wxID_ANY Use Distance cylinder m_checkBoxSrcDistCyl protected 5 wxALL|wxEXPAND 1 wxID_ANY Select sbSizer7 wxVERTICAL none 5 wxEXPAND 1 2 wxBOTH 0 fgSizer3 wxFLEX_GROWMODE_SPECIFIED none 2 0 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 0 wxID_ANY All m_radioBtnSelAll protected wxRB_GROUP 1 OnRadioBtnSelAllClick 5 wxEXPAND 1 bSizer1 wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 0 wxID_ANY Max. count m_radioBtnSelCount protected 0 OnRadioBtnSelCountClick 5 wxALL 0 0 0 wxID_ANY 0 m_textCtrlSelCount protected 30,-1 wxTE_RIGHT 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 0 wxID_ANY One (go to) m_radioBtnSelOne protected 0 OnRadioBtnSelOneClick 5 wxEXPAND 1 bSizer2 wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 0 wxID_ANY Percentage m_radioBtnSelPerc protected 0 OnRadioBtnSelPercClick 5 wxALL 0 0 0 wxID_ANY 0 m_textCtrlSelPerc protected 30,-1 wxTE_RIGHT 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 0 wxID_ANY % m_staticText20 protected -1 5 wxALL 0 1 1 0 wxID_ANY Clear previous selection m_checkBoxClearPrevSel protected -1,-1 5 wxALL|wxEXPAND 1 wxID_ANY Conditions sbSizer9 wxVERTICAL none 5 wxEXPAND 1 7 wxBOTH 0 fgSizer6 wxFLEX_GROWMODE_SPECIFIED none 2 7 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 1 0 wxID_ANY Include m_staticText9 protected -1 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 1 0 wxID_ANY Exclude m_staticText11 protected -1 5 wxEXPAND 1 0 protected 255 5 wxALL|wxALIGN_CENTER_HORIZONTAL 0 1 0 wxID_ANY Include m_staticText12 protected -1 5 wxALL|wxALIGN_CENTER_HORIZONTAL 0 1 0 wxID_ANY Exclude m_staticText13 protected -1 5 wxEXPAND 1 0 protected 0 5 wxEXPAND 1 0 protected 0 5 wxALIGN_CENTER|wxALL|wxALIGN_CENTER_VERTICAL 0 0 1 0 wxID_ANY m_checkBoxBuilderInc protected OnCheckBoxCondBuilderIncClick 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 0 1 0 wxID_ANY m_checkBoxBuilderEx protected OnCheckBoxCondBuilderExClick 5 wxALL 0 1 0 wxID_ANY Builder m_staticText14 protected -1 5 wxALIGN_CENTER|wxALL 0 0 1 0 wxID_ANY m_checkBoxBuildingInc protected OnCheckBoxCondBuildingIncClick 5 wxALIGN_CENTER|wxALL 0 0 1 0 wxID_ANY m_checkBoxBuildingEx protected OnCheckBoxCondBuildingExClick 5 wxALL 0 1 0 wxID_ANY Building m_staticText15 protected -1 5 wxEXPAND 1 0 protected 0 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 0 1 0 wxID_ANY m_checkBoxComInc protected OnCheckBoxCondComIncClick 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 0 1 0 wxID_ANY m_checkBoxComEx protected OnCheckBoxCondComExClick 5 wxALL 0 1 0 wxID_ANY Manual Fire Unit m_staticText17 protected -1 5 wxALL|wxALIGN_CENTER_HORIZONTAL 0 0 1 0 wxID_ANY m_checkBoxTypeSelInc protected OnCheckBoxCondTypeSelIncClick 5 wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL|wxALL 0 0 1 0 wxID_ANY m_checkBoxTypeSelEx protected OnCheckBoxCondTypeSelExClick 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 0 wxID_ANY Type in selection m_staticText18 protected -1 5 wxEXPAND 1 0 protected 0 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 0 1 0 wxID_ANY m_checkBoxAirInc protected OnCheckBoxCondAirIncClick 5 wxALL|wxALIGN_CENTER_HORIZONTAL 0 0 1 0 wxID_ANY m_checkBoxAirEx protected OnCheckBoxCondAirExClick 5 wxALL 0 1 0 wxID_ANY Aircraft m_staticText19 protected -1 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 0 1 0 wxID_ANY m_checkBoxWaitingInc protected OnCheckBoxCondWaitingIncClick 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 0 1 0 wxID_ANY m_checkBoxWaitingEx protected OnCheckBoxCondWaitingExClick 5 wxALL 0 1 0 wxID_ANY Waiting m_staticText231 protected -1 5 wxEXPAND 1 0 protected 0 5 wxALL|wxALIGN_CENTER_HORIZONTAL 0 0 1 0 wxID_ANY m_checkBoxWeaponsInc protected OnCheckBoxCondWeaponsIncClick 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 0 1 0 wxID_ANY m_checkBoxWeaponsEx protected OnCheckBoxCondWeaponsExClick 5 wxALL 0 1 0 wxID_ANY Weapons m_staticText21 protected -1 5 wxALIGN_CENTER|wxALL 0 0 1 0 wxID_ANY m_checkBoxWeapRangeInc protected OnCheckBoxCondWeapRangeIncClick 5 wxALIGN_CENTER|wxALL 0 0 1 0 wxID_ANY m_checkBoxWeapRangeEx protected OnCheckBoxCondWeapRangeExClick 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 0 wxID_ANY Weapon range > m_staticText22 protected -1 5 wxALL 0 0 0 wxID_ANY 0 m_textCtrlWeapRange protected 60,-1 5 wxALL|wxALIGN_CENTER_HORIZONTAL 0 0 1 0 wxID_ANY m_checkBoxIdleInc protected OnCheckBoxCondIdleIncClick 5 wxALL|wxALIGN_CENTER_HORIZONTAL 0 0 1 0 wxID_ANY m_checkBoxIdleEx protected OnCheckBoxCondIdleExClick 5 wxALL 0 1 0 wxID_ANY Idle m_staticText23 protected -1 5 wxALIGN_CENTER|wxALL 0 0 1 0 wxID_ANY m_checkBoxAbsHealthInc protected OnCheckBoxCondAbsHealthIncClick 5 wxALIGN_CENTER|wxALL 0 0 1 0 wxID_ANY m_checkBoxAbsHealthEx protected OnCheckBoxCondAbsHealthExClick 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 0 wxID_ANY Aboslute health > m_staticText24 protected -1 5 wxALL 0 0 0 wxID_ANY 0 m_textCtrlAbsHealth protected 60,-1 5 wxALL|wxALIGN_CENTER_HORIZONTAL 0 0 1 0 wxID_ANY m_checkBoxRadarInc protected OnCheckBoxCondRadarIncClick 5 wxALL|wxALIGN_CENTER_HORIZONTAL 0 0 1 0 wxID_ANY m_checkBoxRadarEx protected OnCheckBoxCondRadarExClick 5 wxALL 0 1 0 wxID_ANY Radar, Sonar, Jammer m_staticText25 protected -1 5 wxALIGN_CENTER|wxALL 0 0 1 0 wxID_ANY m_checkBoxNameInc protected OnCheckBoxCondNameIncClick 5 wxALIGN_CENTER|wxALL 0 0 1 0 wxID_ANY m_checkBoxNameEx protected OnCheckBoxCondNameExClick 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 0 wxID_ANY Name contains m_staticText26 protected -1 5 wxALL 0 0 0 wxID_ANY 0 m_textCtrlName protected 60,-1 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 0 1 0 wxID_ANY m_checkBoxTransInc protected OnCheckBoxCondTransIncClick 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 0 1 0 wxID_ANY m_checkBoxTransEx protected OnCheckBoxCondTransExClick 5 wxALL 0 1 0 wxID_ANY Transport m_staticText27 protected -1 5 wxALIGN_CENTER|wxALL 0 0 1 0 wxID_ANY m_checkBoxCategoryInc protected OnCheckBoxCondCategoryIncClick 5 wxALIGN_CENTER|wxALL 0 0 1 0 wxID_ANY m_checkBoxCategoryEx protected OnCheckBoxCondCategoryExClick 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 0 wxID_ANY Category m_staticText29 protected -1 5 wxALL 0 0 0 wxID_ANY 0 m_textCtrlCategory protected 60,-1 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 0 1 0 wxID_ANY m_checkBoxHotkeyInc protected OnCheckBoxCondHotkeyIncClick 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 0 1 0 wxID_ANY m_checkBoxHotkeyEx protected OnCheckBoxCondHotkeyExClick 5 wxALL 0 1 0 wxID_ANY In hotkey group m_staticText221 protected -1 5 wxALIGN_CENTER|wxALL 0 0 1 0 wxID_ANY m_checkBoxRelHealthInc protected OnCheckBoxCondRelHealthIncClick 5 wxALIGN_CENTER|wxALL 0 0 1 0 wxID_ANY m_checkBoxRelHealthEx protected OnCheckBoxCondRelHealthExClick 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 0 wxID_ANY Relative health m_staticText32 protected -1 5 wxALL 0 0 0 wxID_ANY 0 m_textCtrlRelHealth protected 60,-1 5 wxALL|wxEXPAND 1 -1,-1 bSizer24 wxHORIZONTAL none 5 wxEXPAND 1 0 protected 0 5 wxALL 0 0 1 0 wxID_ANY Add m_buttonOk protected OnButtonAddClick 5 wxALL 0 0 1 0 wxID_CANCEL Cancel m_buttonCancel protected 1 0 wxID_ANY CommandOrderDlgBase -1,-1 wxCAPTION Change Order OnInitDialog 2 wxBOTH 0 fgSizer7 wxFLEX_GROWMODE_SPECIFIED none 2 0 5 wxALL 0 1 0 wxID_ANY Command execution order: m_staticText22 protected -1 5 wxEXPAND 1 0 protected 0 5 wxALL 0 1 0 wxID_ANY m_listBoxCommands protected 200,150 5 wxEXPAND 1 bSizer5 wxVERTICAL none 5 wxALL 0 0 1 0 wxID_ANY Up m_buttonUp protected OnButtonUpClick 5 wxALL 0 0 1 0 wxID_ANY Down m_buttonDown protected OnButtonDownClick 5 wxALIGN_RIGHT|wxALL 0 0 1 0 wxID_OK OK m_buttonOk protected 5 wxALL 0 0 1 0 wxID_CANCEL Cancel m_buttonCancel protected 1 0 wxID_ANY ChangeMetaDlgBase wxDEFAULT_DIALOG_STYLE Change Meta key OnInitDialog 2 wxBOTH 0 fgSizer7 wxFLEX_GROWMODE_SPECIFIED none 2 0 5 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL 0 1 0 wxID_ANY Current key: m_staticText24 protected -1 5 wxALL 0 1 0 wxID_ANY 0 m_textCtrlCurKey protected wxTE_READONLY 5 wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxALL 0 1 0 wxID_ANY New key: m_staticText23 protected -1 5 wxALL 0 wxKeyMonitorTextCtrl m_ctrlNewKey = new wxKeyMonitorTextCtrl( this, wxID_ANY ); wxKeyMonitorTextCtrl* m_ctrlNewKey; 1 0 wxID_ANY #include "../../wxkeybinder/wxKeyMonitorTextCtrl.h" m_ctrlNewKey protected 5 wxALL 0 0 1 0 wxID_OK Assign m_buttonOk protected 5 wxALIGN_RIGHT|wxALL 0 0 1 0 wxID_CANCEL Cancel m_buttonCancel protected springlobby-0.169/src/springsettings/hotkeys/todo.txt0000600000176000000410000000063412105760300024470 0ustar buildbotwww-data00000000000000-commandline options to switch profiles -check for duplicates when adding/removing any/meta. (OnAnyModifier / OnMetaModifier) -save profile to springsettings.conf even when same as spring default (?) -save custom commands to springsettings.conf to keep them even when not used in any profile -keysymb editor -> context menu? -unify spelling - doesnt work http://projects.springlobby.info/issues/1443springlobby-0.169/src/springsettings/hotkeys/wxSpringCommand.cpp0000600000176000000410000000110012105760300026573 0ustar buildbotwww-data00000000000000#include "wxSpringCommand.h" unsigned short wxSpringCommand::type_id = 0x2345u; wxSpringCommand::wxSpringCommand( const wxString& name, const wxString& descr, int id ) : wxCmd( id /*wxID_INVALID*/, name, descr ) { } wxSpringCommand::~wxSpringCommand(void) { } wxCmd* wxSpringCommand::Clone() const { wxCmd* pNewCmd = new wxSpringCommand( this->GetName(), this->GetDescription(), this->GetId() ); pNewCmd->DeepCopy(this); return pNewCmd; } int wxSpringCommand::GetType() const { return this->type_id; } void wxSpringCommand::Exec(wxObject*, wxEvtHandler*) { } springlobby-0.169/src/springsettings/hotkeys/wxSpringCommand.h0000600000176000000410000000065512105760300026256 0ustar buildbotwww-data00000000000000#ifndef __SPRING_COMMAND_h__ #define __SPRING_COMMAND_h__ #include "../../wxkeybinder/keybinder.h" class wxSpringCommand : public wxCmd { public: wxSpringCommand( const wxString& name, const wxString& description, int id ); ~wxSpringCommand(void); virtual wxCmd* Clone() const; virtual int GetType() const; static unsigned short type_id; protected: virtual void Exec (wxObject *obj, wxEvtHandler *client); }; #endif springlobby-0.169/src/springsettings/main.cpp0000600000176000000410000002525512105760300022732 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007 Original work by Kloot cross-plattform/UI adaptation and currently maintained by koshi (Ren� Milk) visit http://springrts.com/phpbb/viewtopic.php?t=12104 for more info/help SpringLobby 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. springsettings 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 springsettings. If not, see . **/ #include "main.h" #include "frame.h" #include "../crashreport.h" #include "../utils/conversion.h" #include "../utils/platform.h" #include "../settings.h" #include "se_utils.h" #include "../defines.h" #include #include #include #include #include #include #include #include #include "../utils/customdialogs.h" #include "../globalsmanager.h" #include "../springunitsynclib.h" #include "../customizations.h" #include "../Helper/wxTranslationHelper.h" IMPLEMENT_APP(Springsettings) Springsettings::Springsettings() : m_translationhelper(NULL), m_log_verbosity( 3 ), m_log_console( true ), m_log_file( false ), m_log_window_show( false ), m_crash_handle_disable( false ), m_appname( _T("SpringSettings") ), m_engine_config_filepath(wxEmptyString) {} Springsettings::~Springsettings() {} #if defined(__WXMSW__) && defined(ENABLE_DEBUG_REPORT) LONG __stdcall filter(EXCEPTION_POINTERS* p){ #if wxUSE_STACKWALKER CrashReport::instance().GenerateReport(); #else CrashReport::instance().GenerateReport(p); #endif return 0; //must return 0 here or we'll end in an inf loop of dbg reports } #endif void Springsettings::OnFatalException() { #if wxUSE_DEBUGREPORT && defined(ENABLE_DEBUG_REPORT) #if wxUSE_STACKWALKER CrashReport::instance().GenerateReport(); #else EXCEPTION_POINTERS* p = new EXCEPTION_POINTERS; //lets hope this'll never get called CrashReport::instance().GenerateReport(p); #endif #else wxMessageBox( _("The application has generated a fatal error and will be terminated\nGenerating a bug report is not possible\n\nplease get a wxWidgets library that supports wxUSE_DEBUGREPORT"),_("Critical error"), wxICON_ERROR | wxOK ); #endif } bool Springsettings::OnInit() { wxSetEnv( _T("UBUNTU_MENUPROXY"), _T("0") ); //this triggers the Cli Parser amongst other stuff if (!wxApp::OnInit()) return false; SetAppName( m_appname ); if ( !wxDirExists( GetConfigfileDir() ) ) wxMkdir( GetConfigfileDir() ); if (!m_crash_handle_disable) { #if wxUSE_ON_FATAL_EXCEPTION wxHandleFatalExceptions( true ); #endif #if defined(__WXMSW__) && defined(ENABLE_DEBUG_REPORT) //this undocumented function acts as a workaround for the dysfunctional // wxUSE_ON_FATAL_EXCEPTION on msw when mingw is used (or any other non SEH-capable compiler ) SetUnhandledExceptionFilter(filter); #endif } //initialize all loggers //TODO non-constant parameters wxLogChain* logchain = 0; wxLogWindow* loggerwin = InitializeLoggingTargets( 0, m_log_console, m_log_file_path, m_log_window_show, !m_crash_handle_disable, m_log_verbosity, logchain ); //this needs to called _before_ mainwindow instance is created wxInitAllImageHandlers(); #ifdef __WXMSW__ wxString path = wxPathOnly( wxStandardPaths::Get().GetExecutablePath() ) + wxFileName::GetPathSeparator() + _T("locale"); #else #if defined(LOCALE_INSTALL_DIR) wxString path ( _T(LOCALE_INSTALL_DIR) ); #else // use a dummy name here, we're only interested in the base path wxString path = wxStandardPaths::Get().GetLocalizedResourcesDir(_T("noneWH"),wxStandardPaths::ResourceCat_Messages); path = path.Left( path.First(_T("noneWH") ) ); #endif #endif m_translationhelper = new wxTranslationHelper( *( (wxApp*)this ), path ); m_translationhelper->Load(); SetSettingsStandAlone( true ); if ( !m_customizer_archive_name.IsEmpty() ) {//this needsto happen before usync load sett().SetForcedSpringConfigFilePath( GetCustomizedEngineConfigFilePath() ); } else if ( !m_engine_config_filepath.IsEmpty() ) { if ( !wxFileName( m_engine_config_filepath ).IsAbsolute() ) { customMessageBox( SS_MAIN_ICON, wxString::Format( _T(" custom engine config filename is not an sbolute path"), m_engine_config_filepath.c_str() ) ); return false; } if ( !wxFile::Exists( m_engine_config_filepath ) ) { if ( !wxFile(m_engine_config_filepath,wxFile::write).Write(wxString()) ) { customMessageBox( SS_MAIN_ICON, wxString::Format( _T("cannot open custom engine config filename for wrtiting"), m_engine_config_filepath.c_str() ) ); return false; } } if( !wxFileName::IsFileWritable( m_engine_config_filepath ) ) { customMessageBox( SS_MAIN_ICON, wxString::Format( _T("given custom engine config filename is not writeable"), m_engine_config_filepath.c_str() ) ); return false; } sett().SetForcedSpringConfigFilePath( m_engine_config_filepath ); } //unitsync first load, NEEDS to be blocking usync().ReloadUnitSyncLib(); if ( !m_customizer_archive_name.IsEmpty() ) { if ( !SLcustomizations().Init( m_customizer_archive_name ) ) { customMessageBox( SL_MAIN_ICON, _("Couldn't load customizations for ") + m_customizer_archive_name + _("\nPlease check that that is the correct name, passed in qoutation"), _("Fatal error"), wxOK ); // wxLogError( _("Couldn't load customizations for ") + m_customizer_archive_name + _("\nPlease check that that is the correct name, passed in qoutation"), _("Fatal error") ); exit( OnExit() );//for some twisted reason returning false here does not terminate the app } } settings_frame* frame = new settings_frame(NULL,GetAppName()); SetTopWindow(frame); frame->Show(); if ( loggerwin ) { // we got a logwindow, lets set proper parent win loggerwin->GetFrame()->SetParent( frame ); } return true; } int Springsettings::OnExit() { if(m_translationhelper) { wxDELETE(m_translationhelper); } sett().SaveSettings(); // to make sure that cache path gets saved before destroying unitsync SetEvtHandlerEnabled(false); DestroyGlobals(); return 0; } void Springsettings::OnInitCmdLine(wxCmdLineParser& parser) { #ifndef HAVE_WX29 #define STR _T #else #define STR #endif #ifndef HAVE_WX29 #define CSTR #else #define CSTR .c_str() #endif static const wxCmdLineEntryDesc cmdLineDesc[] = { { wxCMD_LINE_SWITCH, STR("h"), STR("help"), wxString(_("show this help message"))CSTR, wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP }, { wxCMD_LINE_SWITCH, STR("nc"), STR("no-crash-handler"), wxString(_("don't use the crash handler (useful for debugging)"))CSTR, wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_SWITCH, STR("cl"), STR("console-logging"), wxString(_("shows application log to the console(if available)"))CSTR, wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_OPTION, STR("fl"), STR("file-logging"), wxString(_("dumps application log to a file ( enter path )"))CSTR, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_SWITCH, STR("gl"), STR("gui-logging"), wxString(_("enables application log window"))CSTR, wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_OPTION, STR("f"), STR("config-file"), wxString(_("override default choice for config-file"))CSTR, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_NEEDS_SEPARATOR }, { wxCMD_LINE_OPTION, STR("e"), STR("engine-config"), wxString(_("override default choice for engine config-file, needs absolute path"))CSTR, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL | wxCMD_LINE_NEEDS_SEPARATOR }, { wxCMD_LINE_OPTION, STR("c"), STR("customize"), wxString(_("load lobby customizations from given archive. Expects the archive filename."))CSTR, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_OPTION, STR("n"), STR("name"), wxString(_("overrides default application name"))CSTR, wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_OPTION, STR("l"), STR("log-verbosity"), wxString(_("overrides default logging verbosity, can be:\n 0: no log\n 1: critical errors\n 2: errors\n 3: warnings (default)\n 4: messages\n 5: function trace"))CSTR, wxCMD_LINE_VAL_NUMBER, wxCMD_LINE_PARAM_OPTIONAL }, { wxCMD_LINE_NONE, NULL, NULL, NULL, wxCMD_LINE_VAL_NONE, wxCMD_LINE_PARAM_OPTIONAL } //this is mandatory according to http://docs.wxwidgets.org/stable/wx_wxcmdlineparser.html }; parser.SetDesc( cmdLineDesc ); parser.SetSwitchChars (_T("-")); #undef STR #undef CSTR } //! @brief parses the command line and sets global app options like log verbosity or log target bool Springsettings::OnCmdLineParsed(wxCmdLineParser& parser) { #if wxUSE_CMDLINE_PARSER if ( !parser.Parse(true) ) { #if wxUSE_STD_IOSTREAM m_log_console = parser.Found(_T("console-logging")); #endif m_log_file = parser.Found(_T("file-logging"), &m_log_file_path); m_log_window_show = parser.Found(_T("gui-logging")); m_crash_handle_disable = parser.Found(_T("no-crash-handler")); Settings::m_user_defined_config = parser.Found( _T("config-file"), &Settings::m_user_defined_config_path ); if ( Settings::m_user_defined_config ) { wxFileName fn ( Settings::m_user_defined_config_path ); if ( ! fn.IsAbsolute() ) { wxLogError ( _T("path for parameter \"config-file\" must be absolute") ); return false; } if ( ! fn.IsFileWritable() ) { wxLogError ( _T("path for parameter \"config-file\" must be writeable") ); return false; } } if ( !parser.Found(_T("log-verbosity"), &m_log_verbosity ) ) m_log_verbosity = m_log_window_show ? 3 : 5; const bool do_custom = parser.Found(_T("customize"), &m_customizer_archive_name ); if ( !do_custom ) m_customizer_archive_name = _T(""); const bool do_appname = parser.Found(_T("name"), &m_appname ); if ( !do_appname ) m_appname = _T("SpringSettings"); if ( parser.Found(_T("engine-config"), &m_engine_config_filepath) && ( do_appname || do_custom ) ) { wxLogError( _T("cannot mix -n/-c and -e parameters") ); return false; } return true; } else { return false; } #else // wxUSE_CMDLINE_PARSER return true; #endif } springlobby-0.169/src/springsettings/main.h0000600000176000000410000000321312105760300022365 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007 Original work by Kloot cross-plattform/UI adaptation and currently maintained by koshi (Ren� Milk) visit http://springrts.com/phpbb/viewtopic.php?t=12104 for more info/help SpringLobby 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. SpringLobby 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 springsettings. If not, see . **/ #ifndef SPRINGSETTINGS_MAIN_h #define SPRINGSETTINGS_MAIN_h #include class wxLocale; class wxTranslationHelper; class Springsettings : public wxApp { public: Springsettings(); ~Springsettings(); bool OnInit(); int OnExit(); virtual void OnFatalException(); virtual void OnInitCmdLine(wxCmdLineParser& parser); virtual bool OnCmdLineParsed(wxCmdLineParser& parser); protected: wxTranslationHelper* m_translationhelper; long m_log_verbosity; bool m_log_console; bool m_log_file; wxString m_log_file_path; bool m_log_window_show; bool m_crash_handle_disable; wxString m_customizer_archive_name; wxString m_appname; wxString m_engine_config_filepath; }; #endif springlobby-0.169/src/springsettings/panel_pathoption.cpp0000600000176000000410000000706612105760300025352 0ustar buildbotwww-data00000000000000#include "panel_pathoption.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "se_utils.h" #include "ctrlconstants.h" #include "frame.h" #include "../settings.h" #include "../nonportable.h" #include "../springunitsynclib.h" #include "se_utils.h" #include "../utils/customdialogs.h" PathOptionPanel::PathOptionPanel(wxWindow* parent,settings_frame* _origin) : wxPanel(parent,-1),origin(_origin) { usync_loc_lbl = new wxStaticText (this, -1 , _("Path to unitsync shared library")); explanation_text = new wxStaticText (this, -1 , _("There was a problem retrieving your settings.\n\ Please check that the path below is correct.\n\ When you have corrected it, click\n\ the \"Use this Path\" button to try again."), wxDefaultPosition,wxSize(450,-1)); paths_ok_btn = new wxButton(this,ID_PATH_OK_BTN,_("Use this path"),wxDefaultPosition ,wxSize(-1,-1), wxBU_EXACTFIT); usync_browse_btn = new wxButton(this, ID_PATH_USYNC_BTN, _("Browse") ); usync_ctrl = new wxTextCtrl(this,-1, sett().GetCurrentUsedUnitSync(), wxDefaultPosition,wxSize(400,-1)); usync_ctrl->SetToolTip(_("libunitsync.so on linux, unitsync.dll on windows")); usync_sizer = new wxFlexGridSizer(1,5,5); parentSizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer* subSizerB = new wxBoxSizer(wxHORIZONTAL); main_sizer = new wxStaticBoxSizer(wxVERTICAL ,this,_("Path settings")) ; usync_sizer->Add(usync_loc_lbl,1,wxEXPAND); subSizerB->Add(usync_ctrl,1,wxEXPAND); subSizerB->Add(usync_browse_btn,0,wxEXPAND); usync_sizer->Add(subSizerB,1,wxEXPAND); usync_sizer->SetSizeHints(this); usync_sizer->Fit(this); main_sizer->Add(explanation_text,1,wxALL|wxEXPAND,15); main_sizer->Add(usync_sizer,1,wxALL|wxEXPAND,10); main_sizer->Add(paths_ok_btn,0,wxALL|wxEXPAND,10); parentSizer->Add(main_sizer,0,wxALL,10); SetSizer(parentSizer); } void PathOptionPanel::SetUsyncPath(wxCommandEvent& /*unused*/) { wxString lib_ext = wxDynamicLibrary::CanonicalizeName(_T(""), wxDL_MODULE); #if defined(__WXGTK__) wxString lib_pre = _T("lib"); #else wxString lib_pre = _T(""); #endif wxFileDialog pic( this, _("Choose an unitsync library"), wxPathOnly( sett().AutoFindSpringBin() ), lib_pre + _T("unitsync") + lib_ext, wxString(_T("Library")) + _T("(*") + lib_ext + _T(")|*") + lib_ext + _T("|") + wxString(_("Any File")) + _T(" (*.*)|*.*") ); if ( pic.ShowModal() == wxID_OK ) usync_ctrl->SetValue( pic.GetPath() ); } void PathOptionPanel::UsePaths(wxCommandEvent& /*unused*/) { sett().SetUnitSync( sett().GetCurrentUsedSpringIndex(), usync_ctrl->GetValue() ); usync().ReloadUnitSyncLib(); if ( !(susynclib().IsLoaded()) ) { customMessageBox(SS_MAIN_ICON, _("SpringSettings is unable to load your unitsync library.\n\ You might want to take another look at your unitsync setting.\n\ Your Spring version has to be 0.76 or newer, otherwise \n\ this will fail in any case."), _("Spring error"), wxOK ); } else { origin->buildGuiFromErrorPanel(); sett().SaveSettings(); } } PathOptionPanel::~PathOptionPanel() { } BEGIN_EVENT_TABLE(PathOptionPanel, wxPanel) EVT_BUTTON ( ID_PATH_USYNC_BTN, PathOptionPanel::SetUsyncPath ) EVT_BUTTON ( ID_PATH_OK_BTN, PathOptionPanel::UsePaths ) END_EVENT_TABLE() springlobby-0.169/src/springsettings/panel_pathoption.h0000600000176000000410000000302312105760300025004 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 springsettings. If not, see . **/ #ifndef PANEL_PATHOPTION_H_ #define PANEL_PATHOPTION_H_ #include class wxWindow; class wxButton; class wxBoxSizer; class wxStaticBoxSizer; class wxTextCtrl; class wxStaticText; class wxFlexGridSizer; class settings_frame; /** \brief only used in standalone mode to get usync location if not immediately found */ class PathOptionPanel : public wxPanel { public: PathOptionPanel(wxWindow*,settings_frame*); virtual ~PathOptionPanel(); void SetUsyncPath(wxCommandEvent& ); void UsePaths(wxCommandEvent& ); private: wxStaticText* usync_loc_lbl; wxStaticText* explanation_text; wxButton* paths_ok_btn; wxButton* usync_browse_btn; wxTextCtrl* usync_ctrl; settings_frame* origin; wxFlexGridSizer* usync_sizer; wxBoxSizer* parentSizer; wxStaticBoxSizer* main_sizer; DECLARE_EVENT_TABLE() }; #endif /*PANEL_PATHOPTION_H_*/ springlobby-0.169/src/springsettings/presets.h0000600000176000000410000002156412105760300023137 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 springsettings. If not, see . **/ #ifndef SETTINGS_PRESETS_H_ #define SETTINGS_PRESETS_H_ #include #include #include /** \brief Presets for tab_simple go here * presets are only used for performance relevant (render detail + AA) settings * and screen resolutions */ template class presetValues { public: std::map values; wxString key; //levelLabels and values_arg MUST have same length presetValues ( wxString key_arg,const wxString* levelLabels,const T* values_arg) { for(int i = 0; i< valueCount;++i) { values[levelLabels[i]]=values_arg[i]; } key = key_arg; } }; const int levels_low_To_High_size = 3; const int levels_vlow_To_vHigh_size =5; const wxString levels_low_To_High[levels_low_To_High_size] = { _("low"),_("medium"),_("high")}; const wxString levels_vlow_To_vHigh[levels_vlow_To_vHigh_size] = { _("very low"),_("low"),_("medium"),_("high"),_("very high")}; //TODO generally rethink preset values /** RENDER_DETAIL ***************************************************************/ const int vl_ShadowMapSize[3] = { 1024, 4096, 8192 }; //shadowmapsize const int vl_TreeRadius[3] = { 600, 1900, 3000 }; //tree view distance const int vl_GroundDetail[3] = { 20, 70, 120 }; //terrain detail const int vl_UnitLodDist[3] = { 100, 350, 1000 }; //unit LOD distance const int vl_GrassDetail[3] = { 0, 15, 30 }; //grass detail const int vl_GroundDecals[3] = { 0, 0, 1 }; // ground decals const int vl_UnitIconDist[3] = { 100, 550, 1000 }; // unit icon distance const int vl_MaxParticles[3] = { 100, 4000, 20000 }; const int vl_MaxNanoParticles[3] = { 100, 6000, 20000 }; //const int vl_SM3MaxTextureStages[3] = { 1, 6, 20 }; const presetValues pr_ShadowMapSize = presetValues(_T("ShadowMapSize"),levels_low_To_High,vl_ShadowMapSize); const presetValues pr_TreeRadius = presetValues(_T("TreeRadius"),levels_low_To_High,vl_TreeRadius); const presetValues pr_GroundDetail = presetValues(_T("GroundDetail"),levels_low_To_High,vl_GroundDetail); const presetValues pr_UnitLodDist = presetValues(_T("UnitLodDist"),levels_low_To_High,vl_UnitLodDist); const presetValues pr_GrassDetail = presetValues(_T("GrassDetail"),levels_low_To_High,vl_GrassDetail); const presetValues pr_GroundDecals = presetValues(_T("GroundDecals"),levels_low_To_High,vl_GroundDecals); const presetValues pr_UnitIconDist = presetValues(_T("UnitIconDist"),levels_low_To_High,vl_UnitIconDist); const presetValues pr_MaxParticles = presetValues(_T("MaxParticles"),levels_low_To_High,vl_MaxParticles); const presetValues pr_MaxNanoParticles = presetValues(_T("MaxNanoParticles"),levels_low_To_High,vl_MaxNanoParticles); //const presetValues pr_SM3MaxTextureStages = presetValues(wxT("SM3MaxTextureStages"),levels_low_To_High,vl_SM3MaxTextureStages); const int prVal_RenderDetail_size = 9; const presetValues prVal_RenderDetail[prVal_RenderDetail_size] = {pr_ShadowMapSize, pr_TreeRadius, pr_GroundDetail, pr_UnitLodDist, pr_GrassDetail, pr_GroundDecals, pr_UnitIconDist, pr_MaxParticles,pr_MaxNanoParticles}; /** RENDER QUALITY **********************************************************/ const int vl_DepthBufferBits[5] = {16,16,16,24,24}; const int vl_ReflectiveWater[5] = {0,0,1,3,2}; const int vl_Shadows[5] = {0,0,0,0,1}; const int vl_3DTrees[5] = {0,1,1,1,1}; const int vl_AdvSky[5] = {0,0,0,0,1};//high-res clouds const int vl_DynamicSky[5] = {0,0,0,0,1};//dynamic clouds const int vl_SmoothPoints[5] = {0,1,1,1,1}; const int vl_SmoothLines[5] = {0,0,1,1,1}; const int vl_FSAA[5] = {0,0,0,0,1};//fullscreen aa enable/disable const int vl_FSAALevel[5] = {0,0,0,0,1};//fullscene aa samples const int vl_AdvUnitShading[5] = {0,0,0,1,1}; //refl. units const presetValues pr_DepthBufferBits = presetValues(wxT("DepthBufferBits"),levels_vlow_To_vHigh,vl_DepthBufferBits); const presetValues pr_ReflectiveWater = presetValues(_T("ReflectiveWater"),levels_vlow_To_vHigh,vl_ReflectiveWater); const presetValues pr_Shadows = presetValues(_T("Shadows"),levels_vlow_To_vHigh,vl_Shadows); const presetValues pr_3DTrees = presetValues(_T("3DTrees"),levels_vlow_To_vHigh,vl_3DTrees); const presetValues pr_AdvSky = presetValues(_T("AdvSky"),levels_vlow_To_vHigh,vl_AdvSky); const presetValues pr_DynamicSky = presetValues(_T("DynamicSky"),levels_vlow_To_vHigh,vl_DynamicSky); const presetValues pr_SmoothPoints = presetValues(_T("SmoothPoints"),levels_vlow_To_vHigh,vl_SmoothPoints); const presetValues pr_SmoothLines = presetValues(_T("SmoothLines"),levels_vlow_To_vHigh,vl_SmoothLines); const presetValues pr_FSAA = presetValues(_T("FSAA"),levels_vlow_To_vHigh,vl_FSAA); const presetValues pr_FSAALevel = presetValues(_T("FSAALevel"),levels_vlow_To_vHigh,vl_FSAALevel); const presetValues pr_AdvUnitShading = presetValues(_T("AdvUnitShading"),levels_vlow_To_vHigh,vl_AdvUnitShading); const int prVal_RenderQuality_size = 11; const presetValues prVal_RenderQuality[prVal_RenderQuality_size] = { pr_DepthBufferBits, pr_ReflectiveWater, pr_Shadows, pr_3DTrees, pr_AdvSky, pr_DynamicSky, pr_SmoothPoints, pr_SmoothLines,pr_FSAA, pr_FSAALevel, pr_AdvUnitShading }; /** VIDEO MODES ********************************************************/ const int vl_Resolution_Str_size = 13; const int vl_Resolution_X[vl_Resolution_Str_size] = { 800, 1024, 1152, 1280, 1280, 1600, 1280, 1440, 1680, 1920, 2048, 2560, 3200}; const int vl_Resolution_Y[vl_Resolution_Str_size] = { 600, 768, 864, 960, 1024, 1200, 800, 900, 1050, 1200, 768, 1024, 1200}; const int vl_Resolution_startOfDualScreenRes = 9; //must be same order const wxString vl_Resolution_Str[vl_Resolution_Str_size] = { _T("800 x 600"), _T("1024 x 768"), _T("1152 x 864"), _T("1280 x 960"), _T("1280 x 1024"), _T("1600 x 1200"), _T("1280 x 800 (widescreen)"), _T("1440 x 900 (widescreen)"), _T("1680 x 1050 (widescreen)") , _T("1920 x 1200 (widescreen)"), _T("2048 x 768 (dual-screen)"), _T("2560 x 1024 (dual-screen)"), _T("3200 x 1200 (dual-screen)")}; /*** Water 4 (bump water) presets ***********************************************/ const int vl_w4_BumpWaterReflection[5] = { 0, 0, 1, 1, 1 }; const int vl_w4_BumpWaterRefraction[5] = { 0, 1, 1, 1, 2 }; const int vl_w4_BumpWaterShoreWaves[5] = { 0, 0, 0, 1, 1 }; const float vl_w4_BumpWaterAnisotropy[5] = { 0.f, 0.f, 2.f, 4.f, 6.f }; const int vl_w4_BumpWaterUseDepthTexture[5] = { 0, 1, 1, 1, 1 }; const int vl_w4_BumpWaterTexSizeReflection[5] = { 0, 0,128,256,512 }; const int vl_w4_BumpWaterBlurReflection[5] = { 0, 0, 0, 0, 1 }; const presetValues pr_w4_BumpWaterReflection = presetValues(_T("BumpWaterReflection"),levels_vlow_To_vHigh,vl_w4_BumpWaterReflection); const presetValues pr_w4_BumpWaterRefraction = presetValues(_T("BumpWaterRefraction"),levels_vlow_To_vHigh,vl_w4_BumpWaterRefraction); const presetValues pr_w4_BumpWaterShoreWaves = presetValues(_T("BumpWaterShoreWaves"),levels_vlow_To_vHigh,vl_w4_BumpWaterShoreWaves); const presetValues pr_w4_BumpWaterAnisotropy = presetValues(_T("BumpWaterAnisotropy"),levels_vlow_To_vHigh,vl_w4_BumpWaterAnisotropy ); const presetValues pr_w4_BumpWaterUseDepthTexture = presetValues(_T("BumpWaterUseDepthTexture"),levels_vlow_To_vHigh,vl_w4_BumpWaterUseDepthTexture ); const presetValues pr_w4_BumpWaterTexSizeReflection = presetValues(_T("BumpWaterTexSizeReflection"),levels_vlow_To_vHigh,vl_w4_BumpWaterTexSizeReflection ); const presetValues pr_w4_BumpWaterBlurReflection = presetValues(_T("BumpWaterBlurReflection"),levels_vlow_To_vHigh,vl_w4_BumpWaterBlurReflection ); const int prVal_W4_size = 6; const presetValues prVal_W4[prVal_W4_size] = { pr_w4_BumpWaterReflection, pr_w4_BumpWaterRefraction, pr_w4_BumpWaterShoreWaves, pr_w4_BumpWaterUseDepthTexture, pr_w4_BumpWaterTexSizeReflection, pr_w4_BumpWaterBlurReflection }; #endif /*PRESETS_H_*/ springlobby-0.169/src/springsettings/se_utils.cpp0000600000176000000410000000146212105760300023627 0ustar buildbotwww-data00000000000000#include #include #include #include #include #include #include #include #include "se_utils.h" #include "../utils/customdialogs.h" #include "../settings.h" #include "../springunitsynclib.h" static bool standalonemode = true; bool IsSettingsStandAlone() { return standalonemode; } void SetSettingsStandAlone( bool value ) { standalonemode = value; } int fromString( const wxString& s ) { long temp = 0; s.ToLong( &temp ); return int( temp ); } void openUrl( const wxString& url ) { if ( !wxLaunchDefaultBrowser( url ) ) { wxLogWarning( _( "can't launch default browser" ) ); customMessageBox( SS_MAIN_ICON, _( "Couldn't launch browser. URL is: " ) + url, _( "Couldn't launch browser." ) ); } } springlobby-0.169/src/springsettings/se_utils.h0000600000176000000410000000230212105760300023266 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 springsettings. If not, see . **/ #ifndef SE_UTILS_H_ #define SE_UTILS_H_ #include #include /** \name SPringSettings Utils * these are necessary duplications for standalone mode atm * \todo can prolly be avoided if properly use code from SL * @{ */ int fromString(const wxString& s); void openUrl(const wxString& url); template wxString towxString(T arg){ std::stringstream s; s << arg; return wxString(s.str().c_str(),wxConvUTF8); } /** @} */ bool IsSettingsStandAlone(); void SetSettingsStandAlone( bool value ); #endif /*SE_UTILS_H_*/ springlobby-0.169/src/springsettings/settings.rc0000600000176000000410000000011012105760300023447 0ustar buildbotwww-data00000000000000springsettings ICON "images/springsettings.ico" #include springlobby-0.169/src/springsettings/tab_abstract.cpp0000600000176000000410000004505012105760300024432 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007 Original work by Kloot cross-plattform/UI adaptation and currently maintained by koshi (Rene Milk) visit http://springrts.com/phpbb/viewtopic.php?t=12104 for more info/help SpringLobby 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. springsettings 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 springsettings. If not, see . **/ #include "tab_abstract.h" #include #include #include #include #include #include #include "../gui/spinctl/spinctrl.h" #include #include #include #include #include #include "../utils/customdialogs.h" #include "../springunitsynclib.h" #include "ctrlconstants.h" #include "se_utils.h" #include "../settings.h" #include "presets.h" #include "../utils/debug.h" intMap abstract_panel::intSettings; //stringMap abstract_panel::stringSettings; floatMap abstract_panel::floatSettings; bool abstract_panel::settingsChanged = false; //const category_sizes_map s_category_sizes ( entries_ , entries_ + sizeof(entries_[0]) ); const Control intControls[] = { // RO_SLI[8] RO_SLI[0],RO_SLI[1],RO_SLI[2],RO_SLI[3],RO_SLI[4],RO_SLI[5],RO_SLI[6],RO_SLI[7],RO_SLI[8], // VO_CBOX[3] VO_CBOX[0],VO_CBOX[1],VO_CBOX[2], //VO_RBUT[2] <- only one key VO_RBUT[0], // VO_SLI[1] VO_SLI[0], //VO_SLI_EXT[1] VO_SLI_EXT[0], // AO_SLI[3] AO_SLI[0],AO_SLI[1],AO_SLI[2],AO_SLI[3],AO_SLI[4],AO_SLI[5], // QA_CBOX[10] QA_CBOX[0],QA_CBOX[1],QA_CBOX[2],QA_CBOX[3],QA_CBOX[4],QA_CBOX[5],QA_CBOX[6],QA_CBOX[7],QA_CBOX[8], QA_CBOX[9],QA_CBOX[10],QA_CBOX[11], //UI_CBOX[16] UI_CBOX[0],UI_CBOX[1],UI_CBOX[2],UI_CBOX[3],UI_CBOX[4],UI_CBOX[5],UI_CBOX[6],UI_CBOX[7],UI_CBOX[8], UI_CBOX[9],UI_CBOX[10],UI_CBOX[11],UI_CBOX[12],UI_CBOX[13],UI_CBOX[14],UI_CBOX[15],UI_CBOX[16], //MO_SLI[5] MO_SLI[0],MO_SLI[1],MO_SLI[2],MO_SLI[3],MO_SLI[4], //MO_SLI_EXT[5] MO_SLI_EXT[0],MO_SLI_EXT[1],MO_SLI_EXT[2],MO_SLI_EXT[3],MO_SLI_EXT[4], //DO_SLI[1] DO_SLI[0], //DO_CBOX[1] DO_CBOX[0], //WR_COMBOX[1] WR_COMBOX[0], //MO_CBOX[2] MO_CBOX[0],MO_CBOX[1], //MO_RBUT[5] <- only first MO_RBUT[0], //RC_TEXT[2] RC_TEXT[0],RC_TEXT[1], //UI_ZOOM[1] UI_ZOOM[0], //W4_CONTROLS[7] W4_CONTROLS[0],W4_CONTROLS[1],W4_CONTROLS[2],W4_CONTROLS[3], W4_CONTROLS[4],W4_CONTROLS[5] }; const Control floatControls[] = { W4_CONTROLS[6] }; const int intControls_size = sizeof(intControls) / sizeof(intControls[0] ) ; const int floatControls_size = sizeof(floatControls) / sizeof(floatControls[0] ) ; const int allControls_size = intControls_size + floatControls_size; abstract_panel::abstract_panel(wxWindow *parent, wxWindowID id , const wxString &title , const wxPoint& pos , const wxSize& size, long style) : wxScrolledWindow(parent, id, pos, size, style|wxTAB_TRAVERSAL|wxHSCROLL,title) { // abstract_panel::expertModeEnadbled = false; SetScrollbars( 10, 10, 62, 62 ); Layout(); } abstract_panel::~abstract_panel(void) { } bool abstract_panel::loadValuesIntoMap() { try { //special treatment for resolution that'll set proper defaults for res wxDisplay display(0); wxRect display_rect ( display.GetGeometry() ); // const int current_x_res = configHandler.GetSpringConfigInt(RC_TEXT[0].key,display_rect.width); // const int current_y_res = configHandler.GetSpringConfigInt(RC_TEXT[1].key,display_rect.height); for (int i = 0; i< intControls_size;++i) { intSettings[intControls[i].key] = configHandler.GetSpringConfigInt(intControls[i].key,fromString(intControls[i].def)); } for (int i = 0; i< floatControls_size;++i) { float tmp = configHandler.GetSpringConfigFloat(floatControls[i].key,fromString(floatControls[i].def)); floatSettings[floatControls[i].key] = tmp; } } catch (...) { customMessageBox(SS_MAIN_ICON,_("Could not access your settings.\n"), _("Error"), wxOK|wxICON_HAND, 0); abstract_panel::settingsChanged = false; return false; } return true; // SUCCESS! } void abstract_panel::loadDefaults() { //const Control RO_SLI[9] for (int i = 0;i< s_category_sizes[_T("RO_SLI")]; ++i) intSettings[RO_SLI[i].key] = fromString( RO_SLI[i].def); //const Control VO_CBOX[3] for (int i = 0;i< s_category_sizes[_T("VO_CBOX")]; ++i) intSettings[VO_CBOX[i].key] = fromString( VO_CBOX[i].def); //const Control VO_RBUT[2] for (int i = 0;i< s_category_sizes[_T("VO_RBUT")]; ++i) intSettings[VO_RBUT[i].key] = fromString( VO_RBUT[i].def); // const Control VO_SLI[1] for (int i = 0;i< s_category_sizes[_T("VO_SLI")]; ++i) intSettings[VO_SLI[i].key] = fromString( VO_SLI[i].def); // const Control VO_SLI_EXT[1] for (int i = 0;i< s_category_sizes[_T("VO_SLI_EXT")]; ++i) intSettings[VO_SLI_EXT[i].key] = fromString( VO_SLI_EXT[i].def); // const Control AO_SLI[3] for (int i = 0;i< s_category_sizes[_T("AO_SLI")]; ++i) intSettings[AO_SLI[i].key] = fromString( AO_SLI[i].def); // const Control QA_CBOX[10] for (int i = 0;i< s_category_sizes[_T("QA_CBOX")]; ++i) intSettings[QA_CBOX[i].key] = fromString( QA_CBOX[i].def); // const Control UI_CBOX[17] for (int i = 0;i< s_category_sizes[_T("UI_CBOX")]; ++i) intSettings[UI_CBOX[i].key] = fromString(UI_CBOX [i].def); // const Control MO_SLI[5] for (int i = 0;i< s_category_sizes[_T("MO_SLI")]; ++i) intSettings[MO_SLI[i].key] = fromString( MO_SLI[i].def); // const Control MO_SLI_EXT[5] for (int i = 0;i< s_category_sizes[_T("MO_SLI_EXT")]; ++i) intSettings[MO_SLI_EXT[i].key] = fromString( MO_SLI_EXT[i].def); // const Control DO_SLI[1] for (int i = 0;i< s_category_sizes[_T("DO_SLI")]; ++i) intSettings[DO_SLI[i].key] = fromString( DO_SLI[i].def); // const Control DO_CBOX[2] for (int i = 0;i< s_category_sizes[_T("DO_CBOX")]; ++i) intSettings[DO_CBOX[i].key] = fromString( DO_CBOX[i].def); // const Control WR_COMBOX[4] for (int i = 0;i< s_category_sizes[_T("WR_COMBOX")]; ++i) intSettings[WR_COMBOX[i].key] = fromString( WR_COMBOX[i].def); // const Control MO_CBOX[2] for (int i = 0;i< s_category_sizes[_T("MO_CBOX")]; ++i) intSettings[MO_CBOX[i].key] = fromString( MO_CBOX[i].def); // const Control MO_RBUT[5] for (int i = 0;i< s_category_sizes[_T("MO_RBUT")]; ++i) intSettings[MO_RBUT[i].key] = fromString(MO_RBUT [i].def); // const Control RC_TEXT[2] for (int i = 0;i< s_category_sizes[_T("RC_TEXT")]; ++i) intSettings[RC_TEXT[i].key] = fromString( RC_TEXT[i].def); // const Control UI_ZOOM[1] for (int i = 0;i< s_category_sizes[_T("UI_ZOOM")]; ++i) intSettings[UI_ZOOM[i].key] = fromString( UI_ZOOM[i].def); for (int i = 0;i< s_category_sizes[_T("W4_CONTROLS")] - 1; ++i) intSettings[W4_CONTROLS[i].key] = fromString( W4_CONTROLS[i].def); floatSettings[W4_CONTROLS[ s_category_sizes[_T("W4_CONTROLS")] ].key] = fromString( W4_CONTROLS[ s_category_sizes[_T("W4_CONTROLS")] ].def); } void abstract_panel::OnSliderMove(wxCommandEvent& event) { settingsChanged = true; wxSlider* slider = (wxSlider*) event.GetEventObject(); int value = slider->GetValue(); int id = event.GetId(); switch (event.GetId()) { case ID_RO_SLI_0: { // shadow-map sizes int val = slider->GetValue(); if (val < 1536) { slider->SetValue(1024); (intSettings)[RO_SLI[0].key]=1024; } if (val > 1536 && val < 3072) { slider->SetValue(2048); (intSettings)[RO_SLI[0].key]=2048; } if (val > 3072 && val < 6144) { slider->SetValue(4096); (intSettings)[RO_SLI[0].key]=4096; } if (val > 6144) { slider->SetValue(8192); (intSettings)[RO_SLI[0].key]=8192; } } break; case ID_RO_SLI_1: case ID_RO_SLI_2: case ID_RO_SLI_3: case ID_RO_SLI_4: case ID_RO_SLI_5: case ID_RO_SLI_6: case ID_RO_SLI_7: case ID_RO_SLI_8: { int i = id - RO_SLI[0].id; (intSettings)[RO_SLI[i].key]= value; } break; case ID_VO_SLI_0: { (intSettings)[VO_SLI_EXT[0].key]= (value > 0)? 1: 0; (intSettings)[VO_SLI[0].key]= value; } break; case ID_AO_SLI_0: case ID_AO_SLI_1: case ID_AO_SLI_2: case ID_AO_SLI_3: case ID_AO_SLI_4: case ID_AO_SLI_5: { int i = id - AO_SLI[0].id; (intSettings)[AO_SLI[i].key]= value; } break; case ID_DO_SLI_0: { (intSettings)[DO_SLI[0].key]= value; } break; case ID_MO_SLI_0: { (intSettings)[MO_SLI[0].key]= value; (intSettings)[MO_SLI_EXT[0].key]= ( value > 0 ? 1 : 0); } break; case ID_MO_SLI_1: { (intSettings)[MO_SLI[1].key]= value; (intSettings)[MO_SLI_EXT[1].key]= ( value > 0 ? 1 : 0); } break; case ID_MO_SLI_2: { (intSettings)[MO_SLI[2].key]= value; (intSettings)[MO_SLI_EXT[2].key]= ( value > 0 ? 1 : 0); } break; case ID_MO_SLI_3: { (intSettings)[MO_SLI[3].key]= value; (intSettings)[MO_SLI_EXT[3].key]= ( value > 0 ? 1 : 0); } break; case ID_MO_SLI_4: { (intSettings)[MO_SLI[4].key]= value; (intSettings)[MO_SLI_EXT[4].key]= ( value > 0 ? 1 : 0); } break; default: wxLogDebugFunc( _T("unhandled case val") ); break; } } void abstract_panel::OnTextUpdate(wxCommandEvent& event) { settingsChanged = true; int eventID = event.GetId(); if (eventID == ID_RES_CHOICES_LBOX_X || eventID == ID_RES_CHOICES_LBOX_Y) { wxTextCtrl* textField = (wxTextCtrl*) event.GetEventObject(); wxString wxStr = textField->GetValue(); long* res = new long; bool success = (wxStr.ToLong(res)); switch (eventID) { case ID_RES_CHOICES_LBOX_X: { // TODO: input validation? if (success) (intSettings)[RC_TEXT[0].key]= int((*res)); } break; case ID_RES_CHOICES_LBOX_Y: { // TODO: input validation? if (success) (intSettings)[RC_TEXT[1].key]= int((*res)); } break; default: wxLogDebugFunc( _T("unhandled case val") ); break; } } } void abstract_panel::OnCheckBoxTick(wxCommandEvent& event) { settingsChanged = true; wxCheckBox* checkBox = (wxCheckBox*) event.GetEventObject(); int checked = checkBox->IsChecked(); int id = event.GetId(); switch (id) { case ID_WINDOWP_VO_CBOX_0: case ID_WINDOWP_VO_CBOX_1: case ID_WINDOWP_VO_CBOX_2: { int i = id - VO_CBOX[0].id; (intSettings)[VO_CBOX[i].key]= checked; } break; case ID_WINDOWP_QA_CBOX_0: case ID_WINDOWP_QA_CBOX_1: case ID_WINDOWP_QA_CBOX_2: case ID_WINDOWP_QA_CBOX_3: case ID_WINDOWP_QA_CBOX_4: case ID_WINDOWP_QA_CBOX_5: case ID_WINDOWP_QA_CBOX_6: case ID_WINDOWP_QA_CBOX_7: case ID_WINDOWP_QA_CBOX_8: case ID_WINDOWP_QA_CBOX_9: case ID_WINDOWP_QA_CBOX_10: case ID_WINDOWP_QA_CBOX_11:{ int i = id - QA_CBOX[0].id; (intSettings)[QA_CBOX[i].key]= checked; } break; //case ID_WINDOWP_UI_CBOX_0: case ID_WINDOWP_UI_CBOX_1: case ID_WINDOWP_UI_CBOX_2: case ID_WINDOWP_UI_CBOX_3: case ID_WINDOWP_UI_CBOX_4: case ID_WINDOWP_UI_CBOX_5: case ID_WINDOWP_UI_CBOX_6: case ID_WINDOWP_UI_CBOX_7: case ID_WINDOWP_UI_CBOX_8: case ID_WINDOWP_UI_CBOX_9: case ID_WINDOWP_UI_CBOX_10: case ID_WINDOWP_UI_CBOX_11: case ID_WINDOWP_UI_CBOX_12: case ID_WINDOWP_UI_CBOX_13: case ID_WINDOWP_UI_CBOX_14: case ID_WINDOWP_UI_CBOX_15: case ID_WINDOWP_UI_CBOX_16: case ID_WINDOWP_UI_CBOX_17: case ID_WINDOWP_UI_CBOX_18:{ int i = id - UI_CBOX[0].id; (intSettings)[UI_CBOX[i].key]= checked; } break; case ID_W4_BumpWaterBlurReflection: case ID_W4_BumpWaterReflection: case ID_W4_BumpWaterShoreWaves: case ID_W4_BumpWaterUseDepthTexture:{ int i = id - W4_CONTROLS[0].id; (intSettings)[W4_CONTROLS[i].key]= checked; } break; case ID_WINDOWP_DO_CBOX_0: { (intSettings)[DO_CBOX[0].key]= checked; } break; case ID_WINDOWC_MO_CBOX_0: { (intSettings)[MO_CBOX[0].key]= checked; } break; case ID_WINDOWC_MO_CBOX_1: { (intSettings)[MO_CBOX[1].key]= checked; } break; default: wxLogDebugFunc( _T("unhandled case val") ); break; } } void abstract_panel::OnRadioButtonToggle(wxCommandEvent& event) { settingsChanged = true; wxRadioButton* radioButton = (wxRadioButton*) event.GetEventObject(); radioButton->GetValue(); switch (event.GetId()) { case ID_WINDOWP_VO_RBUT_0: { (intSettings)[VO_RBUT[0].key]= 16; } break; case ID_WINDOWP_VO_RBUT_1: { (intSettings)[VO_RBUT[0].key]= 24; } break; case ID_WINDOWC_MO_RBUT_0: { (intSettings)[MO_RBUT[0].key]= 1; } break; // OH button (CamMode 1) case ID_WINDOWC_MO_RBUT_1: { (intSettings)[MO_RBUT[1].key]= 3; } break; // ROH button (CamMode 2) case ID_WINDOWC_MO_RBUT_2: { (intSettings)[MO_RBUT[2].key]= 2; } break; // TW button (CamMode 3) case ID_WINDOWC_MO_RBUT_3: { (intSettings)[MO_RBUT[3].key]= 0; } break; // FPS button (CamMode 0) case ID_WINDOWC_MO_RBUT_4: { (intSettings)[MO_RBUT[4].key]= 4; } break; // FC button (CamMode 4) default: wxLogDebugFunc( _T("unhandled case val") ); break; } } void abstract_panel::OnComboBoxChange(wxCommandEvent& event) { settingsChanged = true; wxComboBox* comboBox = (wxComboBox*) event.GetEventObject(); const wxString choice = comboBox->GetValue(); switch (event.GetId()) { case ID_WINDOWP_WR_COMBOX: { int choiceIndex=0; for (unsigned int i =1; iGetCurrentSelection(); //really off = -1, off = 0, on = 1 //const wxString SHADOW_CHOICES[] = { _T("disabled"), _T("off"), _T("on") }; (intSettings)[QA_CBOX[0].key] = choiceIndex - 1; break; } case ID_SIMPLE_QUAL_CBX: { for (int i=0; i pop = prVal_RenderQuality[i]; int k = (pop.values[choice]); (intSettings)[prVal_RenderQuality[i].key]= k; } for (int i=0; i pop = prVal_W4[i]; int k = (pop.values[choice]); (intSettings)[prVal_W4[i].key]= k; } presetValues pop = pr_w4_BumpWaterAnisotropy; float k = (pop.values[choice]); wxString key = pr_w4_BumpWaterAnisotropy.key; (floatSettings)[key] = k; //float debug = (floatSettings)[key] break; } case ID_SIMPLE_DETAIL_CBX: { for (int i=0; i pop = prVal_RenderDetail[i]; int k = (pop.values[choice]); (intSettings)[prVal_RenderDetail[i].key]= k; } break; } case ID_SIMPLE_MODE_CBX: { int modeIndex=-1; for (int i=0; i vl_Resolution_startOfDualScreenRes) (intSettings)[_T("DualScreenMode")] = 1; else (intSettings)[_T("DualScreenMode")] = 0; } break; } default: wxLogDebugFunc( _T("unhandled case val") ); break; } } void abstract_panel::OnSpinCtrlDoubleChange(SlSpinDoubleEvent& event) { if (event.GetId()==ID_W4_BumpWaterAnisotropy) { SlSpinCtrlDouble* aniso = (SlSpinCtrlDouble*) event.GetEventObject(); (floatSettings)[W4_CONTROLS[6].key] = aniso->GetValue(); settingsChanged = true; } } void abstract_panel::OnSpinControlChange(wxSpinEvent& event) { if (event.GetId()==ID_WINDOWP_UI_MW_SPD) { wxSpinCtrl* zoom = (wxSpinCtrl*) event.GetEventObject(); (intSettings)[UI_ZOOM[0].key] = zoom->GetValue(); settingsChanged = true; } } //TODO inquire about floatsettings bool abstract_panel::saveSettings() { try { for (intMap::const_iterator i = intSettings.begin(); i != intSettings.end();++i) { configHandler.SetSpringConfigInt(i->first,i->second); } // for (stringMap::const_iterator s = stringSettings.begin(); s != stringSettings.end();++s) // { // //not used // //configHandler.SetSpringConfigString(s->first,s->second); // } for (floatMap::const_iterator f = floatSettings.begin(); f != floatSettings.end();++f) { configHandler.SetSpringConfigFloat(f->first,f->second); } } catch (...) { customMessageBox(SS_MAIN_ICON,_("Could not save, unitsync not properly loaded"), _("SpringSettings Error"), wxOK|wxICON_HAND, 0); return false; } return true; } void abstract_panel::updateControls(int /*unused*/) {} // note that the SpinCtrlDouble change is hadnled explicitly via the control calling the right handler BEGIN_EVENT_TABLE(abstract_panel, wxPanel) EVT_SLIDER (wxID_ANY, abstract_panel::OnSliderMove) EVT_TEXT (wxID_ANY, abstract_panel::OnTextUpdate) EVT_CHECKBOX (wxID_ANY, abstract_panel::OnCheckBoxTick) EVT_RADIOBUTTON (wxID_ANY, abstract_panel::OnRadioButtonToggle) // EVT_IDLE( abstract_panel::update) EVT_SPINCTRL (wxID_ANY, abstract_panel::OnSpinControlChange) EVT_COMBOBOX (wxID_ANY, abstract_panel::OnComboBoxChange) END_EVENT_TABLE() springlobby-0.169/src/springsettings/tab_abstract.h0000600000176000000410000000507612105760300024103 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 springsettings. If not, see . **/ #ifndef __TAB_ABSTRACT_h__ #define __TAB_ABSTRACT_h__ #include #include class wxString; class wxCommandEvent; class wxWindow; class wxPoint; class wxSize; class wxCloseEvent; class wxSpinEvent; class SlSpinDoubleEvent; typedef std::map intMap; typedef std::map stringMap; typedef std::map floatMap; template class Scaler { private: public: template < typename T > static T Up( const T val ) { const double fac = denominator != 0 ? numerator/(double)denominator : numerator; return (T) ( fac * val ); } template < typename T > static T Down ( const T val ) { const double fac = denominator != 0 ? numerator/(double)denominator : numerator; return (T) ( val / fac ); } }; class abstract_panel : public wxScrolledWindow { public: abstract_panel(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Project2"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); virtual ~abstract_panel(); void OnSliderMove(wxCommandEvent&); void OnTextUpdate(wxCommandEvent&); void OnCheckBoxTick(wxCommandEvent&); void OnRadioButtonToggle(wxCommandEvent&); //void update(wxIdleEvent&); virtual void OnComboBoxChange(wxCommandEvent& event); static intMap intSettings; //static stringMap stringSettings; static floatMap floatSettings; static bool settingsChanged; static bool saveSettings(); static void loadDefaults(); virtual void updateControls(int what_to_update); static bool loadValuesIntoMap(); void OnSpinControlChange(wxSpinEvent& event); void OnSpinCtrlDoubleChange(SlSpinDoubleEvent& event); protected: void OnClose(wxCloseEvent& event); void CreateGUIControls(); private: DECLARE_EVENT_TABLE() }; #endif springlobby-0.169/src/springsettings/tab_audio.cpp0000600000176000000410000000663012105760300023731 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007 Original work by Kloot cross-plattform/UI adaptation and currently maintained by koshi (Ren� Milk) visit http://springrts.com/phpbb/viewtopic.php?t=12104 for more info/help SpringLobby 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. springsettings 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 springsettings. If not, see . **/ #include "tab_audio.h" #include "se_utils.h" #include #include #include #include #include #include #include #include #include "ctrlconstants.h" void audio_panel::initAudioSizer(wxStaticBoxSizer* sizer) { for (int i = 0; i < ctrl_audio_sliders_size; ++i ) { ctrl_audio_sliders[i] = new wxSlider(this, AO_SLI[i].id, 1, 0, i == 0 ? 128 : 100, WX_DEF_P, WX_SLI_S, SLI_STYLE, WX_DEF_V); ctrl_audio_sliders[i]->SetToolTip(AO_SLI[i].tTip[0]); #if wxCHECK_VERSION(2,9,2) ctrl_audio_sliders[i]->SetTickFreq( 10 ); #else ctrl_audio_sliders[i]->SetTickFreq( 10, 1 ); #endif sizer->Add( new wxStaticText(this, -1, (AO_SLI[i].lbl)), 0, wxTOP, 15 ); sizer->Add( ctrl_audio_sliders[i], 0, wxALIGN_LEFT, 0 ); } #if wxCHECK_VERSION(2,9,2) ctrl_audio_sliders[0]->SetTickFreq( (128 / 10) ); #else ctrl_audio_sliders[0]->SetTickFreq( (128 / 10), 1 ); #endif } audio_panel::audio_panel(wxWindow *parent, wxWindowID id , const wxString &title , const wxPoint& pos , const wxSize& size, long style) : abstract_panel(parent, id , title , pos , size, style) { ctrl_audio_sliders = new wxSlider*[ctrl_audio_sliders_size]; parentSizer = new wxBoxSizer(wxHORIZONTAL); // main window sizer (three columns) childLSizer = new wxBoxSizer(wxVERTICAL); // main window left column sizer // sizers for static boxes containing sliders, checkboxes, radiobuttons audioSizer = new wxStaticBoxSizer(new wxStaticBox(this, -1, _("Audio Options"), WX_DEF_P, wxSize(230, 100), 0, wxEmptyString), wxVERTICAL); initAudioSizer(audioSizer); childLSizer->Add(0, 5, 0); childLSizer->Add(audioSizer,0,wxEXPAND|wxALL,5); parentSizer->Add(10, 0, 0); parentSizer->Add(childLSizer,0,wxEXPAND|wxTOP,5); updateControls(UPDATE_ALL); SetSizer(parentSizer); // true --> delete old sizer if present } void audio_panel::updateControls(int /*unused*/) { for (int i = 0; i < ctrl_audio_sliders_size; ++i ) { ctrl_audio_sliders[i]->SetValue(intSettings[AO_SLI[i].key]); } } audio_panel::~audio_panel(void) { } BEGIN_EVENT_TABLE(audio_panel, wxPanel) EVT_SLIDER(wxID_ANY, audio_panel::OnSliderMove) // EVT_TEXT(wxID_ANY, audio_panel::OnTextUpdate) // EVT_CHECKBOX(wxID_ANY, audio_panel::OnCheckBoxTick) EVT_RADIOBUTTON(wxID_ANY, audio_panel::OnRadioButtonToggle) // EVT_IDLE( audio_panel::update) END_EVENT_TABLE() springlobby-0.169/src/springsettings/tab_audio.h0000600000176000000410000000300512105760300023367 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 springsettings. If not, see . **/ #ifndef __TAB_AUDIO_h__ #define __TAB_AUDIO_h__ #include "tab_abstract.h" class wxSlider; class wxStaticBoxSizer; class wxString; class wxWindow; class wxPoint; class wxSize; class wxCloseEvent; class audio_panel : public abstract_panel { public: audio_panel(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Project2"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); virtual ~audio_panel(); void initAudioSizer(wxStaticBoxSizer*); void updateControls(int); protected: void OnClose(wxCloseEvent& event); void CreateGUIControls(); wxSlider** ctrl_audio_sliders; static const int ctrl_audio_sliders_size = 6; wxSizer* parentSizer ; // main window sizer (three columns) wxSizer* childLSizer; wxStaticBoxSizer* audioSizer; DECLARE_EVENT_TABLE() }; #endif springlobby-0.169/src/springsettings/tab_quality_video.cpp0000600000176000000410000003270712105760300025512 0ustar buildbotwww-data00000000000000/** c This file is part of springsettings, Copyright (C) 2007 Original work by Kloot cross-plattform/UI adaptation and currently maintained by koshi (Ren� Milk) visit http://springrts.com/phpbb/viewtopic.php?t=12104 for more info/help SpringLobby 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. springsettings 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 springsettings. If not, see . **/ #include "tab_quality_video.h" #include "se_utils.h" #include #include #include #include #include #include #include #include #include #include #include #include "../gui/spinctl/spinctrl.h" #include "../utils/conversion.h" #include "ctrlconstants.h" void tab_quality_video::initVideoSizer(wxFlexGridSizer* sizer) { // i < "sizeof"(VO_CBOX) for (int i = 0; i < ctrl_vo_Boxes_size; i++) { ctrl_vo_Boxes[i] = new wxCheckBox(this, VO_CBOX[i].id, (VO_CBOX[i].lbl)); ctrl_vo_Boxes[i]->SetToolTip(VO_CBOX[i].tTip[0]); sizer->Add(ctrl_vo_Boxes[i], 0, wxTOP, (i == 0)? 5 : 0); } ctrl_x_res = new wxTextCtrl(this, ID_RES_CHOICES_LBOX_X,_T(""), WX_DEF_P, wxSize(60, 20), 0); ctrl_y_res = new wxTextCtrl(this, ID_RES_CHOICES_LBOX_Y, _T(""), WX_DEF_P, wxSize(60, 20), 0); ctrl_x_res->SetToolTip(RC_TEXT[0].tTip[0]); ctrl_y_res->SetToolTip(RC_TEXT[1].tTip[0]); wxSizer* subSizer = new wxBoxSizer(wxHORIZONTAL); subSizer->Add(ctrl_x_res, 0, wxALIGN_LEFT, 10); subSizer->Add(5, 0, 0); subSizer->Add(new wxStaticText(this, -1, wxT("x")), 0, wxTOP | wxBOTTOM, 0); subSizer->Add(5, 0, 0); subSizer->Add(ctrl_y_res, 0, wxALIGN_RIGHT, 10); wxSizer* subSizer2 = new wxBoxSizer(wxVERTICAL); subSizer2->Add(new wxStaticText(this, -1, _("Screen Resolution")), 1, wxTOP|wxEXPAND , 10); subSizer2->Add(subSizer); sizer->Add(subSizer2); sizer->Add(0,5,0); } void tab_quality_video::updateControls(int what_to_update) { if (what_to_update == UPDATE_ALL) { //the rest for (int i = 5; i < 7; i++) { ctrl_qa_Boxes[i]->SetValue(intSettings[QA_CBOX[i].key]); } for (int i = 0; i < ctrl_vo_Boxes_size; i++) { ctrl_vo_Boxes[i]->SetValue(intSettings[VO_CBOX[i].key]); } } if (what_to_update == UPDATE_VIDEO_MODE || what_to_update == UPDATE_ALL) { ctrl_x_res->SetValue(wxFormat( _("%d") ) % intSettings[RC_TEXT[0].key]); ctrl_y_res->SetValue(wxFormat( _("%d") ) % intSettings[RC_TEXT[1].key]); } if (what_to_update == UPDATE_QA_BOXES || what_to_update == UPDATE_ALL) { //option 7-9 are not on presets //skip 0 == shadows for (int i = 1; i < 9; i++) { ctrl_qa_Boxes[i]->SetValue(intSettings[QA_CBOX[i].key]); } for (int i = 10; i < ctrl_qa_Boxes_size; i++) { ctrl_qa_Boxes[i]->SetValue(intSettings[QA_CBOX[i].key]); } ctrl_shadows_CBox->SetValue( SHADOW_CHOICES[ intSettings[ QA_CBOX[0].key] +1 ] ); m_enable_w4 = false; int waterOptIndex = 0; const int waterSetting = intSettings[WR_COMBOX[0].key]; switch (waterSetting) { case 0: case 1: waterOptIndex = waterSetting; break; case 2: waterOptIndex = 3; break; case 3: waterOptIndex = 2; break; case 4: waterOptIndex = 4; m_enable_w4 = true; break; } ctrl_waterQ_CBox->SetValue(WR_COMBOX_CHOICES[waterOptIndex]); int useFSAA = intSettings[VO_SLI_EXT[0].key]; int FSAALev = intSettings[VO_SLI[0].key]; ctrl_fsaa_slider->SetValue((useFSAA == 1)? FSAALev: 0); switch (intSettings[VO_RBUT[0].key]) { case 16: { ctrl_z_radio1->SetValue(1); } break; case 24: { ctrl_z_radio2->SetValue(1); } break; } } if (what_to_update == UPDATE_W4_CONTROLS || what_to_update == UPDATE_ALL) { for ( unsigned int i = 0; i < m_w4_controls.size(); ++i ) { wxControl* tmp = m_w4_controls[i]; tmp->Enable( m_enable_w4 ); switch ( i ) { case 0: case 1: case 2: case 3: ( (wxCheckBox*)tmp )->SetValue( intSettings[W4_CONTROLS[i].key ] ); break; case 4:{ int val = intSettings[W4_CONTROLS[i].key ]; for ( unsigned int j = 0; j < sizeof(W4_TEXSIZE_CHOICES)/sizeof(W4_TEXSIZE_CHOICES[0]); ++j){ if ( W4_TEXSIZE_CHOICES[j] == towxString( val ) ) ( (wxComboBox*)tmp)->SetValue( W4_TEXSIZE_CHOICES[ j ] ); } } break; case 5: ( (wxComboBox*)tmp)->SetValue( W4_REFRACTION_CHOICES[ intSettings[W4_CONTROLS[i].key ] ] ); break; case 6: //doesn't work if catsed from wxControl like the others double tmpval = double(floatSettings[W4_CONTROLS[i].key ]) ; m_aniso_spin->SetValue(tmpval); break; } } } } void tab_quality_video::initQualitySizer(wxFlexGridSizer* sizer) { sizer->Add(new wxStaticText(this, -1, _("If an option needs special hardware to work\n\ it will be mentioned in the tooltip.")), 1, wxTOP|wxEXPAND , 10); // i < 8 with High resolution LOS textures // i < 7 without //skip first == shadows for (int i = 1; i < ctrl_qa_Boxes_size-3; i++) { ctrl_qa_Boxes[i] = new wxCheckBox(this, QA_CBOX[i].id, (QA_CBOX[i].lbl)); //ctrl_qa_Boxes[i]->SetValue(configHandler.GetSpringConfigInt(QA_CBOX[i].key,fromString(QA_CBOX[i].def))); ctrl_qa_Boxes[i]->SetToolTip(QA_CBOX[i].tTip[0]); sizer->Add(ctrl_qa_Boxes[i], 0, wxTOP, (i == 0)? 5: 0); } wxSizer* subSizer_shadows = new wxBoxSizer(wxVERTICAL); subSizer_shadows->Add(new wxStaticText(this, -1, _("Shadows (slow)")), 0, wxTOP| wxEXPAND, 10); ctrl_shadows_CBox = new wxComboBox(this, ID_SHADOW_CHOICES, SHADOW_CHOICES[0], wxDefaultPosition, wxSize(220,21), 3,SHADOW_CHOICES,wxCB_DROPDOWN|wxCB_READONLY); ctrl_shadows_CBox->SetToolTip(QA_CBOX[0].tTip[0]); subSizer_shadows->Add(ctrl_shadows_CBox, 0, wxBOTTOM, 5); sizer->Add(subSizer_shadows,0, wxBOTTOM, 5); wxSizer* subSizer = new wxBoxSizer(wxVERTICAL); subSizer->Add(new wxStaticText(this, -1, _("Water Quality")), 0, wxTOP| wxEXPAND, 10); ctrl_waterQ_CBox = new wxComboBox(this, ID_WINDOWP_WR_COMBOX, WR_COMBOX_CHOICES[0], wxDefaultPosition, wxSize(220,21), 5,WR_COMBOX_CHOICES,wxCB_DROPDOWN|wxCB_READONLY); ctrl_waterQ_CBox->SetToolTip(WR_COMBOX[0].tTip[0]); subSizer->Add(ctrl_waterQ_CBox, 0, wxBOTTOM, 5); sizer->Add(subSizer,0, wxBOTTOM, 5); } void tab_quality_video::initAASizer(wxFlexGridSizer* sizer){ for (int i = 10; i < ctrl_qa_Boxes_size; i++) { ctrl_qa_Boxes[i] = new wxCheckBox(this, QA_CBOX[i].id, (QA_CBOX[i].lbl)); //ctrl_qa_Boxes[i]->SetValue(configHandler.GetSpringConfigInt(QA_CBOX[i].key,fromString(QA_CBOX[i].def))); ctrl_qa_Boxes[i]->SetToolTip(QA_CBOX[i].tTip[0]); sizer->Add(ctrl_qa_Boxes[i], 0, wxTOP, (i == 10)? 5: 0); } wxSizer* subsizer = new wxBoxSizer(wxVERTICAL); ctrl_fsaa_slider = new wxSlider(this, VO_SLI[0].id, 0, 0, 16, WX_DEF_P, WX_SLI_S, SLI_STYLE, WX_DEF_V); ctrl_fsaa_slider->SetToolTip(VO_SLI[0].tTip[0]); subsizer->Add(new wxStaticText(this, -1, (VO_SLI[0].lbl)), 0, wxTOP|wxEXPAND, 10); subsizer->Add(ctrl_fsaa_slider, 0, wxALIGN_LEFT|wxBOTTOM|wxEXPAND, 5); sizer->Add(subsizer); } void tab_quality_video::initZBufferSizer(wxFlexGridSizer* sizer) { //z-buffer sizer->Add(new wxStaticText(this, -1, _("Resolution in bit")), 0, wxTOP ,15); ctrl_z_radio1 = new wxRadioButton(this, VO_RBUT[0].id, (VO_RBUT[0].lbl), WX_DEF_P, WX_DEF_S, wxRB_GROUP, WX_DEF_V); ctrl_z_radio2 = new wxRadioButton(this, VO_RBUT[1].id, (VO_RBUT[1].lbl), WX_DEF_P, WX_DEF_S, 0, WX_DEF_V); ctrl_z_radio1->SetToolTip(VO_RBUT[0].tTip[0]); ctrl_z_radio2->SetToolTip(VO_RBUT[1].tTip[0]); sizer->Add(ctrl_z_radio1, 0, wxTOP, 0); sizer->Add(ctrl_z_radio2, 0, wxBOTTOM, 10); } void tab_quality_video::initW4Sizer(wxSizer* sizer) { for ( int i = 0; i < 4; ++i ) { wxCheckBox* blurChk = new wxCheckBox( this, W4_CONTROLS[i].id, W4_CONTROLS[i].lbl ); m_w4_controls.push_back( (wxControl*) blurChk ); blurChk->SetToolTip( W4_CONTROLS[i].tTip[0] ); sizer->Add( blurChk, 0, wxEXPAND|wxALL, 4 ); } sizer->Add(new wxStaticText(this, -1, (W4_CONTROLS[4].lbl)) , 0, wxTOP|wxEXPAND, 5); wxComboBox* texsizeCom = new wxComboBox(this, W4_CONTROLS[4].id, W4_TEXSIZE_CHOICES[0], wxDefaultPosition, wxSize(220,21), 4,W4_TEXSIZE_CHOICES,wxCB_DROPDOWN|wxCB_READONLY); texsizeCom->SetToolTip(W4_CONTROLS[4].tTip[0]); m_w4_controls.push_back( (wxControl*) texsizeCom ); sizer->Add( texsizeCom, 0, wxEXPAND|wxALL, 4 ); sizer->Add(new wxStaticText(this, -1, (W4_CONTROLS[5].lbl)) , 0, wxTOP|wxEXPAND, 5); wxComboBox* refractionCom = new wxComboBox(this, W4_CONTROLS[5].id, W4_REFRACTION_CHOICES[0], wxDefaultPosition, wxSize(220,21), 3,W4_REFRACTION_CHOICES,wxCB_DROPDOWN|wxCB_READONLY); refractionCom->SetToolTip(W4_CONTROLS[5].tTip[0]); m_w4_controls.push_back( (wxControl*) refractionCom ); sizer->Add( refractionCom, 0, wxEXPAND|wxALL, 4 ); sizer->Add(new wxStaticText(this, -1, (W4_CONTROLS[6].lbl)) , 0, wxTOP|wxEXPAND, 5); m_aniso_spin = new SlSpinCtrlDouble(); m_aniso_spin->Create(this, W4_CONTROLS[6].id, _T(""), wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0.f, 6.f, 0.f,0.25f, _T("")); m_aniso_spin->SetToolTip(W4_CONTROLS[6].tTip[0]); m_w4_controls.push_back( (wxControl*) m_aniso_spin ); sizer->Add( m_aniso_spin, 0, wxEXPAND|wxALL, 4 ); } tab_quality_video::tab_quality_video(wxWindow *parent, wxWindowID id , const wxString &title , const wxPoint& pos , const wxSize& size, long style) : abstract_panel(parent, id , title , pos , size, style) { ctrl_qa_Boxes = new wxCheckBox*[ctrl_qa_Boxes_size]; ctrl_vo_Boxes = new wxCheckBox*[ctrl_vo_Boxes_size]; parentSizer = new wxFlexGridSizer(3,0,0); leftSizer = new wxFlexGridSizer(1,15,0); middleSizer = new wxFlexGridSizer(1,15,0); rightSizer = new wxFlexGridSizer(1,15,0);//for info SizerA = new wxFlexGridSizer(1,15,10); SizerB = new wxFlexGridSizer(1,15,10); SizerC = new wxFlexGridSizer(1,15,10); SizerD = new wxFlexGridSizer(1,5,10); SizerE = new wxBoxSizer(wxVERTICAL); boxA = new wxStaticBoxSizer(wxVERTICAL ,this,_("Render Quality Options")); boxB = new wxStaticBoxSizer(wxVERTICAL ,this,_("Video Mode Options")); boxC = new wxStaticBoxSizer(wxVERTICAL ,this,_("Anti-Aliasing Options")); boxD = new wxStaticBoxSizer(wxVERTICAL ,this,_("Z-/Depth-Buffer")); boxE = new wxStaticBoxSizer(wxVERTICAL ,this,_("Bump-mapped Water")); SizerA->AddGrowableCol(0); SizerB->AddGrowableCol(0); SizerC->AddGrowableCol(0); SizerD->AddGrowableCol(0); initVideoSizer(SizerB); initZBufferSizer(SizerD); initQualitySizer(SizerA); initAASizer(SizerC); initW4Sizer(SizerE); SizerA->Fit(this); SizerA->SetSizeHints(this); SizerB->Fit(this); SizerB->SetSizeHints(this); SizerC->Fit(this); SizerC->SetSizeHints(this); SizerD->Fit(this); SizerD->SetSizeHints(this); SizerE->Fit(this); SizerE->SetSizeHints(this); boxA->Add(SizerA,1,wxEXPAND); boxB->Add(SizerB,1,wxEXPAND); boxC->Add(SizerC,1,wxEXPAND); boxD->Add(SizerD,1,wxEXPAND); boxE->Add(SizerE,1,wxEXPAND); leftSizer->Add(boxB,1,wxEXPAND|wxALL,5); rightSizer->Add(boxC,1,wxEXPAND|wxALL,5); rightSizer->Add(boxE,1,wxEXPAND|wxALL,5); middleSizer->Add(boxA,1,wxEXPAND|wxALL,5); leftSizer->Add(boxD,1,wxEXPAND|wxALL,5); parentSizer->Add(leftSizer,0,wxALL|wxEXPAND,10); parentSizer->Add(middleSizer,0,wxALL|wxEXPAND,10); parentSizer->Add(rightSizer,0,wxALL|wxEXPAND,10); updateControls(UPDATE_ALL); SetSizer(parentSizer, true); // true --> delete old sizer if present } tab_quality_video::~tab_quality_video(void) { } void tab_quality_video::OnComboBoxChange(wxCommandEvent& event) { if ( event.GetId() == ID_WINDOWP_WR_COMBOX ) { wxComboBox* comboBox = (wxComboBox*) event.GetEventObject(); const wxString choice = comboBox->GetValue(); m_enable_w4 = ( choice == WR_COMBOX_CHOICES[4] ); updateControls( UPDATE_W4_CONTROLS ); } abstract_panel::OnComboBoxChange( event ); } //! this just forwards the direct event receivier from the control to base class void tab_quality_video::OnSpinCtrlDoubleChange(SlSpinDoubleEvent& event) { abstract_panel::OnSpinCtrlDoubleChange( event ); } BEGIN_EVENT_TABLE(tab_quality_video, abstract_panel) EVT_SLIDER (wxID_ANY, tab_quality_video::OnSliderMove) EVT_TEXT (ID_RES_CHOICES_LBOX_X, tab_quality_video::OnTextUpdate) EVT_TEXT (ID_RES_CHOICES_LBOX_Y, tab_quality_video::OnTextUpdate) EVT_CHECKBOX (wxID_ANY, tab_quality_video::OnCheckBoxTick) EVT_SPINCTRL (wxID_ANY, tab_quality_video::OnSpinControlChange) EVT_RADIOBUTTON (wxID_ANY , tab_quality_video::OnRadioButtonToggle) //EVT_IDLE( tab_quality_video::update) EVT_COMBOBOX (wxID_ANY, tab_quality_video::OnComboBoxChange) END_EVENT_TABLE() springlobby-0.169/src/springsettings/tab_quality_video.h0000600000176000000410000000531712105760300025154 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 springsettings. If not, see . **/ #ifndef __TAB_QUALITY_VIDEO_h__ #define __TAB_QUALITY_VIDEO_h__ #include "tab_abstract.h" #include class wxComboBox; class wxCheckBox; class wxBoxSizer; class wxTextCtrl; class wxFlexGridSizer; class wxRadioButton; class wxString; class wxWindow; class wxPoint; class wxSize; class wxCloseEvent; class wxSlider; class wxStaticBoxSizer; template class SlSpinCtrlDouble; class SlSpinDoubleEvent; class tab_quality_video : public abstract_panel { public: tab_quality_video(wxWindow *parent, wxWindowID id, const wxString &title = wxT("Project2"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); virtual ~tab_quality_video(); void initVideoSizer(wxFlexGridSizer*); void initQualitySizer(wxFlexGridSizer* ); void initAASizer(wxFlexGridSizer* ); void initZBufferSizer(wxFlexGridSizer* ); void initW4Sizer(wxSizer* ); void updateControls(int); virtual void OnComboBoxChange(wxCommandEvent& event); void OnSpinCtrlDoubleChange(SlSpinDoubleEvent& event); private: void OnClose(wxCloseEvent& event); void CreateGUIControls(); wxComboBox* ctrl_waterQ_CBox; wxComboBox* ctrl_shadows_CBox; wxCheckBox** ctrl_vo_Boxes; static const int ctrl_vo_Boxes_size = 3; wxTextCtrl* ctrl_x_res; wxTextCtrl* ctrl_y_res; wxCheckBox** ctrl_qa_Boxes; static const int ctrl_qa_Boxes_size = 12; wxSlider* ctrl_fsaa_slider; wxRadioButton* ctrl_z_radio1; wxRadioButton* ctrl_z_radio2; wxSizer* parentSizer ; wxSizer* leftSizer ; wxSizer* middleSizer; wxSizer* rightSizer; wxFlexGridSizer* SizerA ; wxFlexGridSizer* SizerB ; wxFlexGridSizer* SizerC ; wxFlexGridSizer* SizerD ; wxBoxSizer* SizerE ; wxStaticBoxSizer* boxA ; wxStaticBoxSizer* boxB ; wxStaticBoxSizer* boxC ; wxStaticBoxSizer* boxD ; wxStaticBoxSizer* boxE ; bool m_enable_w4; std::vector m_w4_controls; SlSpinCtrlDouble* m_aniso_spin; protected: DECLARE_EVENT_TABLE() }; #endif springlobby-0.169/src/springsettings/tab_render_detail.cpp0000600000176000000410000001024412105760300025425 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007 Original work by Kloot cross-plattform/UI adaptation and currently maintained by koshi (Ren� Milk) visit http://springrts.com/phpbb/viewtopic.php?t=12104 for more info/help SpringLobby 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. springsettings 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 springsettings. If not, see . **/ #include "tab_render_detail.h" #include "se_utils.h" #include #include #include #include #include #include #include "ctrlconstants.h" void tab_render_detail::initRendererSizer(wxFlexGridSizer* sizerL,wxFlexGridSizer* sizerR ) { const int extrema[] = { 1024, 8192, 600, 3000, 20, 120, 100, 600, 0, 30, 0, 5, 100, 1000, 0, 20000, 0, 20000 }; for (int i = 0; i < ctrl_detail_sliders_size/2; i++) { ctrl_detail_sliders[i] = new wxSlider( this, RO_SLI[i].id, 0, extrema[i * 2], extrema[(i * 2) + 1], WX_DEF_P, wxSize(180, -1), SLI_STYLE, WX_DEF_V ); //ctrl_detail_sliders[i]->SetTickFreq((extrema[(i*2)+1] - extrema[i * 2]) / 10 ,1); ctrl_detail_sliders[i]->SetToolTip(RO_SLI[i].tTip[0]); sizerL->Add(new wxStaticText(this, -1, (RO_SLI[i].lbl)), 1,wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND); sizerL->Add(ctrl_detail_sliders[i], 0,wxALIGN_CENTER_VERTICAL|wxALL); } for (int i = ctrl_detail_sliders_size/2; i < ctrl_detail_sliders_size; i++) { ctrl_detail_sliders[i] = new wxSlider( this, RO_SLI[i].id, 0, extrema[i * 2], extrema[(i * 2) + 1], WX_DEF_P, wxSize(180, -1), SLI_STYLE, WX_DEF_V); //ctrl_detail_sliders[i]->SetTickFreq((extrema[(i*2)+1] - extrema[i * 2]) / 10 ,1); ctrl_detail_sliders[i]->SetToolTip(RO_SLI[i].tTip[0]); sizerR->Add(new wxStaticText(this, -1, (RO_SLI[i].lbl)), 1,wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND); sizerR->Add(ctrl_detail_sliders[i], 0,wxALIGN_CENTER_VERTICAL|wxALL); } } tab_render_detail::tab_render_detail(wxWindow *parent, wxWindowID id , const wxString &title , const wxPoint& pos , const wxSize& size, long style) : abstract_panel(parent, id , title , pos , size, style) { ctrl_detail_sliders = new wxSlider*[ctrl_detail_sliders_size]; renderSizer = new wxGridSizer(2,15,5); parentSizer = new wxGridSizer(1,0,0); rendererSizerA = new wxFlexGridSizer(2,35,10); rendererSizerB = new wxFlexGridSizer(2,35,10); box = new wxStaticBoxSizer(wxVERTICAL ,this,_("Rendering detail levels")); rendererSizerA->AddGrowableCol(0); rendererSizerA->AddGrowableCol(1); rendererSizerB->AddGrowableCol(0); rendererSizerB->AddGrowableCol(1); initRendererSizer(rendererSizerA,rendererSizerB); rendererSizerA->Fit(this); rendererSizerA->SetSizeHints(this); rendererSizerB->Fit(this); rendererSizerB->SetSizeHints(this); renderSizer->Add(rendererSizerA,0,wxALIGN_LEFT|wxALL,5); renderSizer->Add(rendererSizerB,0,wxALIGN_RIGHT|wxALL,5); box->Add(renderSizer,0,wxALL,5); parentSizer->Add(box,0,wxALL,15); updateControls(UPDATE_ALL); SetSizer(parentSizer); // true --> delete old sizer if present } void tab_render_detail::updateControls(int /*what_to_update*/) { for (int i = 0; i < ctrl_detail_sliders_size; i++) { ctrl_detail_sliders[i]->SetValue(intSettings[RO_SLI[i].key]); } } tab_render_detail::~tab_render_detail(void) { } BEGIN_EVENT_TABLE(tab_render_detail, abstract_panel) EVT_SLIDER(wxID_ANY, tab_render_detail::OnSliderMove) // EVT_TEXT(wxID_ANY, tab_render_detail::OnTextUpdate) //EVT_CHECKBOX(wxID_ANY, tab_render_detail::OnCheckBoxTick) // EVT_RADIOBUTTON(wxID_ANY, tab_render_detail::OnRadioButtonToggle) // EVT_IDLE( tab_render_detail::update) END_EVENT_TABLE() springlobby-0.169/src/springsettings/tab_render_detail.h0000600000176000000410000000317112105760300025073 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 springsettings. If not, see . **/ #ifndef __TAB_RENDER_DETAIL_h__ #define __TAB_RENDER_DETAIL_h__ #include "tab_abstract.h" class wxSlider; class wxFlexGridSizer; class wxString; class wxWindow; class wxPoint; class wxSize; class wxCloseEvent; class wxStaticBoxSizer; class tab_render_detail : public abstract_panel { public: tab_render_detail(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Project2"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); virtual ~tab_render_detail(); void initRendererSizer(wxFlexGridSizer*,wxFlexGridSizer*); void updateControls(int what_to_update); protected: void OnClose(wxCloseEvent& event); void CreateGUIControls(); wxSlider** ctrl_detail_sliders; static const int ctrl_detail_sliders_size = 9; wxSizer* renderSizer ; wxSizer* parentSizer ; wxFlexGridSizer* rendererSizerA ; wxFlexGridSizer* rendererSizerB ; wxStaticBoxSizer* box ; DECLARE_EVENT_TABLE() }; #endif springlobby-0.169/src/springsettings/tab_simple.cpp0000600000176000000410000001615412105760300024123 0ustar buildbotwww-data00000000000000/** d This file is part of springsettings, Copyright (C) 2007 Original work by Kloot cross-plattform/UI adaptation and currently maintained by koshi (Ren� Milk) visit http://springrts.com/phpbb/viewtopic.php?t=12104 for more info/help SpringLobby 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. springsettings 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 springsettings. If not, see . **/ #include "tab_simple.h" #include "se_utils.h" #include #include #include #include #include #include #include #include #include "ctrlconstants.h" #include "presets.h" #include "frame.h" #include "../settings.h" #include "../springunitsynclib.h" const wxString infoTextContent= _("These options let you roughly control Spring's rendering.\n\ For more speed try lowering the settings.\n\ Full control over all settings is available in the\n\ \"Expert mode\", either click on the button on the\n\ right or use the \"Mode\" menu in the top menubar.\n\ You can go back to this mode at any time by choosing\n\ \"Simple mode\" from the \"Mode\" menu.\n\ If you encounter error messages concerning graphics\n\ when running Spring it might be necessary to disable\n \ some options in expert mode.\n"); const wxString renderQuality_CBX_lbl = _("Graphics quality"); const wxString renderDetail_CBX_lbl = _("Graphics detail"); const wxString videoMode_CBX_lbl = _("Screen resolution"); const wxString button_lbl = _("Switch to expert mode"); void tab_simple::getSetUpResolutionCBX() { int x_res = 0; int y_res = 0; if (abstract_panel::settingsChanged) { x_res = intSettings[RC_TEXT[0].key]; y_res = intSettings[RC_TEXT[1].key]; } else { try{ x_res = susynclib().GetSpringConfigInt(RC_TEXT[0].key,fromString(RC_TEXT[0].def)); y_res = susynclib().GetSpringConfigInt(RC_TEXT[1].key,fromString(RC_TEXT[1].def)); } catch (...) {} } wxString currentRes; currentRes << x_res << _T(" x ") << y_res; wxArrayString choices(vl_Resolution_Str_size,vl_Resolution_Str); choices.Add((currentRes + _(" (current)"))); videoMode_CBX = new wxComboBox(this, ID_SIMPLE_MODE_CBX,choices.Last() , wxDefaultPosition, wxSize(220,21), choices,wxCB_DROPDOWN|wxCB_READONLY); } void tab_simple::initOptSizer(wxFlexGridSizer* sizer ) { sizer->Add(new wxStaticText(this, -1, renderQuality_CBX_lbl) , 0,wxTOP|wxBOTTOM,15); renderQuality_CBX = new wxComboBox(this, ID_SIMPLE_QUAL_CBX, sett().getSimpleQuality(), wxDefaultPosition, wxSize(220,21), levels_vlow_To_vHigh_size,levels_vlow_To_vHigh,wxCB_DROPDOWN|wxCB_READONLY); renderQuality_CBX->SetToolTip(_("Sets all quality options to predefined values according to your choice.")); sizer->Add(renderQuality_CBX, 0, wxTOP|wxBOTTOM, 15); sizer->Add(new wxStaticText(this, -1,renderDetail_CBX_lbl ), 0,wxALL); renderDetail_CBX = new wxComboBox(this, ID_SIMPLE_DETAIL_CBX, sett().getSimpleDetail(), wxDefaultPosition, wxSize(220,21), levels_low_To_High_size,levels_low_To_High,wxCB_DROPDOWN|wxCB_READONLY); renderDetail_CBX->SetToolTip(_("Sets all detail options to predefined values according to your choice.")); sizer->Add(renderDetail_CBX, 0, wxBOTTOM, 15); sizer->Add(new wxStaticText(this, -1, videoMode_CBX_lbl ), 0,wxALL); getSetUpResolutionCBX(); videoMode_CBX->SetToolTip(_("Select the resolution fitting your monitor(s).\n\ Selecting a dual screen resolution will automatically enable dual screen mode.\n\ If the appropiate resolution is not available you can set it manually in expert mode.\n\ Please also contact the author so it can be added in future releases.")); sizer->Add(videoMode_CBX, 0, wxBOTTOM, 15); sizer->Add(new wxStaticText(this, -1, (AO_SLI[1].lbl)), 0, wxTOP, 15); audioVolume_SLI = new wxSlider(this, AO_SLI[1].id,0, 0, 100, WX_DEF_P, WX_SLI_S, SLI_STYLE, WX_DEF_V); audioVolume_SLI->SetToolTip(AO_SLI[1].tTip[0]); sizer->Add(audioVolume_SLI, 0, wxBOTTOM, 15); } void tab_simple::initInfoSizer(wxFlexGridSizer* sizer) { infoText = new wxStaticText(this,-1,infoTextContent); sizer->Add(infoText,0,wxALL,10); } void tab_simple::initButSizer(wxSizer* sizer) { goExpert_BUT = new wxButton(this, ID_SIMPLE_GOEXPERT_BUT,button_lbl ,wxPoint(-1,-1) ,wxSize(-1,-1), wxBU_EXACTFIT); sizer->Add(goExpert_BUT,0,wxALIGN_CENTER_VERTICAL); } tab_simple::tab_simple(settings_frame* _origin, wxWindow *parent, wxWindowID id , const wxString &title , const wxPoint& pos , const wxSize& size, long style) : abstract_panel(parent, id , title , pos , size, style) { origin = _origin; parentSizer = new wxFlexGridSizer(2,1,1); leftSizer = new wxFlexGridSizer(1,15,1); rightSizer = new wxFlexGridSizer(1,15,1); Sizer_CBX = new wxFlexGridSizer(2,10,10); Sizer_info = new wxFlexGridSizer(1,15,10); Sizer_BUT = new wxBoxSizer(wxVERTICAL); boxA = new wxStaticBoxSizer(wxVERTICAL ,this,_("Options")); boxB = new wxStaticBoxSizer(wxVERTICAL ,this,_("Info")); initOptSizer(Sizer_CBX); initInfoSizer(Sizer_info); initButSizer(Sizer_BUT); Sizer_CBX->Fit(this); Sizer_CBX->SetSizeHints(this); Sizer_info->Fit(this); Sizer_info->SetSizeHints(this); Sizer_BUT->Fit(this); Sizer_BUT->SetSizeHints(this); boxA->Add(Sizer_CBX,1,wxEXPAND); boxB->Add(Sizer_info,1,wxEXPAND); leftSizer->Add(boxA,1,wxEXPAND); leftSizer->Add(boxB,1,wxEXPAND); rightSizer->Add(Sizer_BUT,1,wxEXPAND|wxALIGN_CENTER); parentSizer->Add(leftSizer,1,wxALL|wxEXPAND,15); parentSizer->Add(goExpert_BUT,0,wxLEFT|wxALIGN_CENTER,35); updateControls(UPDATE_ALL); SetSizer(parentSizer); // true --> delete old sizer if present } void tab_simple::updateControls(int /*what_to_update*/) { audioVolume_SLI->SetValue(intSettings[AO_SLI[1].key]); } tab_simple::~tab_simple(void) { } void tab_simple::OnComboBoxChange(wxCommandEvent& event) { abstract_panel::OnComboBoxChange(event); } void tab_simple::OnButtonClick(wxCommandEvent& ) { origin->switchToExpertMode(); } void tab_simple::saveCbxChoices() { sett().setSimpleDetail(renderDetail_CBX->GetValue()); sett().setSimpleRes(videoMode_CBX->GetValue()); sett().setSimpleQuality(renderQuality_CBX->GetValue()); } BEGIN_EVENT_TABLE(tab_simple, abstract_panel) EVT_SLIDER(wxID_ANY, tab_simple::OnSliderMove) // EVT_TEXT(wxID_ANY, tab_simple::OnTextUpdate) EVT_CHECKBOX(wxID_ANY, tab_simple::OnCheckBoxTick) // EVT_RADIOBUTTON(wxID_ANY, tab_simple::OnRadioButtonToggle) // EVT_IDLE( tab_simple::update) EVT_COMBOBOX(wxID_ANY, tab_simple::OnComboBoxChange) EVT_BUTTON(ID_SIMPLE_GOEXPERT_BUT, tab_simple::OnButtonClick) END_EVENT_TABLE() springlobby-0.169/src/springsettings/tab_simple.h0000600000176000000410000000441312105760300023563 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 springsettings. If not, see . **/ #ifndef __TAB_SIMPLE_h__ #define __TAB_SIMPLE_h__ #include "tab_abstract.h" class wxComboBox; //class wxCheckBox; //class wxTextCtrl; class wxSlider; class wxFlexGridSizer; //class wxRadioButton; class wxString; //class wxCommandEvent; class wxWindow; class wxPoint; class wxSize; class wxCloseEvent; class wxStaticText; class wxStaticBoxSizer; class wxButton; class settings_frame; class tab_simple : public abstract_panel { public: tab_simple(settings_frame* _origin, wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Project2"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); virtual ~tab_simple(); void updateControls(int); void saveCbxChoices(); void setTabs(abstract_panel* ,abstract_panel* ); void OnComboBoxChange(wxCommandEvent& event); protected: void getSetUpResolutionCBX(); void OnClose(wxCloseEvent& event); void OnButtonClick(wxCommandEvent& event); void CreateGUIControls(); void initOptSizer(wxFlexGridSizer*); void initInfoSizer(wxFlexGridSizer*); void initButSizer(wxSizer* ); wxComboBox* renderQuality_CBX; wxComboBox* renderDetail_CBX; wxComboBox* videoMode_CBX; wxSlider* audioVolume_SLI; wxButton* goExpert_BUT; wxStaticText* infoText; //dirty abstract_panel* detailTab; abstract_panel* qualityTab; wxSizer* parentSizer; wxFlexGridSizer* leftSizer ; wxFlexGridSizer* rightSizer; wxFlexGridSizer* Sizer_CBX ; wxFlexGridSizer* Sizer_info; wxSizer* Sizer_BUT; wxStaticBoxSizer* boxA ; wxStaticBoxSizer* boxB ; settings_frame* origin; DECLARE_EVENT_TABLE() }; #endif springlobby-0.169/src/springsettings/tab_ui.cpp0000600000176000000410000001513612105760300023246 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007 Original work by Kloot cross-plattform/UI adaptation and currently maintained by koshi (Ren� Milk) visit http://springrts.com/phpbb/viewtopic.php?t=12104 for more info/help SpringLobby 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. springsettings 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 springsettings. If not, see . **/ #include "tab_ui.h" #include #include #include #include "ctrlconstants.h" #include "../utils/debug.h" #include "se_utils.h" //TODO maybe use only one chkbox for minimap on left void tab_ui::initScrollSpeedSizer(wxStaticBoxSizer* sizer) { // i < "sizeof"(MO_SLI) sizer->Add(5,10,0); sizer->Add(new wxStaticText(this, -1, _("Setting a slider to 0 will exclude that\n\ mode from being cycled through ingame.")) , 0,wxBOTTOM,15); for (int i = 0; i < ctrl_scroll_slider_size; i++) { //set to dummy value ctrl_scroll_slider[i] = new wxSlider(this, MO_SLI[i].id, 0, 0, 100, WX_DEF_P, WX_SLI_S, SLI_STYLE, WX_DEF_V); ctrl_scroll_slider[i]->SetToolTip(MO_SLI[i].tTip[0]); if (i > 0) sizer->Add(5,23,0); sizer->Add(new wxStaticText(this, wxID_ANY, (MO_SLI[i].lbl), wxDefaultPosition, wxDefaultSize, 10),1,wxEXPAND); sizer->Add(ctrl_scroll_slider[i], 0, wxTOP, 0); } sizer->Add(5,10,0); } void tab_ui::initCameraSizer(wxStaticBoxSizer* sizer) { ctrl_cam_radio0 = new wxRadioButton(this, MO_RBUT[0].id, (MO_RBUT[0].lbl), WX_DEF_P, WX_DEF_S, wxRB_GROUP, WX_DEF_V); ctrl_cam_radio1 = new wxRadioButton(this, MO_RBUT[1].id, (MO_RBUT[1].lbl), WX_DEF_P, WX_DEF_S, 0, WX_DEF_V); ctrl_cam_radio2 = new wxRadioButton(this, MO_RBUT[2].id, (MO_RBUT[2].lbl), WX_DEF_P, WX_DEF_S, 0, WX_DEF_V); ctrl_cam_radio3 = new wxRadioButton(this, MO_RBUT[3].id, (MO_RBUT[3].lbl), WX_DEF_P, WX_DEF_S, 0, WX_DEF_V); ctrl_cam_radio4 = new wxRadioButton(this, MO_RBUT[4].id, (MO_RBUT[4].lbl), WX_DEF_P, WX_DEF_S, 0, WX_DEF_V); ctrl_cam_radio0->SetToolTip(MO_RBUT[0].tTip[0]); ctrl_cam_radio1->SetToolTip(MO_RBUT[1].tTip[0]); ctrl_cam_radio2->SetToolTip(MO_RBUT[2].tTip[0]); ctrl_cam_radio3->SetToolTip(MO_RBUT[3].tTip[0]); ctrl_cam_radio4->SetToolTip(MO_RBUT[4].tTip[0]); sizer->Add(ctrl_cam_radio0, 0, wxTOP, 10); sizer->Add(ctrl_cam_radio1, 0, wxTOP, 5); sizer->Add(ctrl_cam_radio2, 0, wxTOP, 5); sizer->Add(ctrl_cam_radio3, 0, wxTOP, 5); sizer->Add(ctrl_cam_radio4, 0, wxTOP|wxBOTTOM, 5); } void tab_ui::initUiOptSizer(wxStaticBoxSizer* sizer) { wxBoxSizer* subSizer = new wxBoxSizer(wxVERTICAL); for (int i = 0; i < ctrl_ui_chkb_size; i++) { ctrl_ui_chkb[i] = new wxCheckBox(this, UI_CBOX[i].id, (UI_CBOX[i].lbl)); subSizer->Add(ctrl_ui_chkb[i], 0, wxTOP, 5); ctrl_ui_chkb[i]->SetToolTip(UI_CBOX[i].tTip[0]); } sizer->Add(subSizer); sizer->Add(0,5,0); } void tab_ui::initZoomSizer(wxStaticBoxSizer* sizer) { wxBoxSizer* subSizer = new wxBoxSizer(wxVERTICAL); ctrl_zoom_spin = new wxSpinCtrl(this,UI_ZOOM[0].id,_T(""),wxDefaultPosition,wxDefaultSize,wxSP_ARROW_KEYS,-255,255); ctrl_zoom_spin->SetToolTip(UI_ZOOM[0].tTip[0]); subSizer->Add(new wxStaticText(this, -1, UI_ZOOM[0].lbl) , 0,wxTOP,10); subSizer->Add(ctrl_zoom_spin,0,wxALIGN_RIGHT|wxALL,5); sizer->Add(subSizer,5,wxALL); sizer->Add(0,5,0); } void tab_ui::updateControls(int /*what_to_update*/) { for (int i = 0; i < ctrl_ui_chkb_size; i++) { ctrl_ui_chkb[i]->SetValue(intSettings[UI_CBOX[i].key]); } switch (intSettings[MO_RBUT[0].key]) { case 0: { ctrl_cam_radio3->SetValue(1); } break; // CamMode 0: FPS case 1: { ctrl_cam_radio0->SetValue(1); } break; // CamMode 1: OH case 3: { ctrl_cam_radio1->SetValue(1); } break; // CamMode 2: ROH case 2: { ctrl_cam_radio2->SetValue(1); } break; // CamMode 3: TW case 4: { ctrl_cam_radio4->SetValue(1); } break; // CamMode 4: FC default: wxLogDebugFunc( _T("unhandled case val") ); break; } for (int i = 0; i < ctrl_scroll_slider_size; i++) { ctrl_scroll_slider[i]->SetValue(intSettings[MO_SLI[i].key]); } ctrl_zoom_spin->SetValue(intSettings[UI_ZOOM[0].key]); } tab_ui::tab_ui(wxWindow *parent, wxWindowID id , const wxString &title , const wxPoint& pos , const wxSize& size, long style) : abstract_panel(parent, id , title , pos , size, style) { ctrl_scroll_slider = new wxSlider*[ctrl_scroll_slider_size]; ctrl_ui_chkb = new wxCheckBox*[ctrl_ui_chkb_size]; pSizer = new wxFlexGridSizer(3,15,15); cSizerL = new wxFlexGridSizer(1,10,10); cSizerR = new wxFlexGridSizer(1,10,10); cSizerM = new wxFlexGridSizer(1,10,10); scrollSpeedSizer = new wxStaticBoxSizer(new wxStaticBox(this, -1, _("Scroll Speeds (mouse + keyboard)"), WX_DEF_P, wxSize(-1, -1), 0, wxEmptyString), wxVERTICAL); cameraSizer = new wxStaticBoxSizer(new wxStaticBox(this, -1, _("Default Camera Mode"), WX_DEF_P, wxSize(-1, -1), 0, wxEmptyString), wxVERTICAL); uiOptSizer = new wxStaticBoxSizer(new wxStaticBox(this, -1, _("Misc. UI Options"), WX_DEF_P, wxSize(-1, -1), 0, wxEmptyString), wxVERTICAL); zoomSizer = new wxStaticBoxSizer(new wxStaticBox(this, -1, _("Zoom"), WX_DEF_P, wxSize(-1, -1), 0, wxEmptyString), wxVERTICAL); initScrollSpeedSizer(scrollSpeedSizer); initUiOptSizer(uiOptSizer); initCameraSizer(cameraSizer); initZoomSizer(zoomSizer); cSizerM->Add(uiOptSizer,0,wxALL,5); cSizerL->Add(scrollSpeedSizer,0,wxALL,5); cSizerR->Add(cameraSizer,0,wxALL,5); cSizerR->Add(zoomSizer,1,wxALL|wxEXPAND,5); cSizerL->Fit(this); cSizerL->SetSizeHints(this); cSizerM->Fit(this); cSizerM->SetSizeHints(this); cSizerR->Fit(this); cSizerR->SetSizeHints(this); pSizer->Add(cSizerL,0,wxALL|wxEXPAND,10); pSizer->Add(cSizerM,0,wxALL|wxEXPAND,10); pSizer->Add(cSizerR,0,wxALL|wxEXPAND,10); updateControls(UPDATE_ALL); SetSizer(pSizer); // true --> delete old sizer if present } tab_ui::~tab_ui(void) { } BEGIN_EVENT_TABLE(tab_ui, abstract_panel) EVT_SLIDER(wxID_ANY, tab_ui::OnSliderMove) EVT_TEXT(wxID_ANY, tab_ui::OnTextUpdate) EVT_CHECKBOX(wxID_ANY, tab_ui::OnCheckBoxTick) EVT_RADIOBUTTON(wxID_ANY, tab_ui::OnRadioButtonToggle) // EVT_IDLE( tab_ui::update) END_EVENT_TABLE() springlobby-0.169/src/springsettings/tab_ui.h0000600000176000000410000000416312105760300022711 0ustar buildbotwww-data00000000000000/** This file is part of springsettings, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 springsettings. If not, see . **/ #ifndef __TAB_UI_h__ #define __TAB_UI_h__ #include "tab_abstract.h" class wxCheckBox; class wxStaticBoxSizer; class wxRadioButton; class wxString; class wxWindow; class wxPoint; class wxSize; class wxCloseEvent; class wxSlider; class wxStaticBoxSizer; class wxFlexGridSizer; class wxSpinCtrl; class tab_ui : public abstract_panel { public: tab_ui(wxWindow *parent, wxWindowID id = 1, const wxString &title = wxT("Project2"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); virtual ~tab_ui(); void initCameraSizer(wxStaticBoxSizer*); void initScrollSpeedSizer(wxStaticBoxSizer* ); void initUiOptSizer(wxStaticBoxSizer* ); void initZoomSizer(wxStaticBoxSizer* ); void updateControls(int what_to_update); protected: void OnClose(wxCloseEvent& event); void CreateGUIControls(); wxSlider** ctrl_scroll_slider; static const int ctrl_scroll_slider_size = 5; wxRadioButton* ctrl_cam_radio0; wxRadioButton* ctrl_cam_radio1; wxRadioButton* ctrl_cam_radio2; wxRadioButton* ctrl_cam_radio3; wxRadioButton* ctrl_cam_radio4; wxCheckBox** ctrl_ui_chkb; wxSpinCtrl* ctrl_zoom_spin; static const int ctrl_ui_chkb_size = 17; wxFlexGridSizer* pSizer; wxFlexGridSizer* cSizerL ; wxFlexGridSizer* cSizerR; wxFlexGridSizer* cSizerM; wxStaticBoxSizer* zoomSizer; wxStaticBoxSizer* scrollSpeedSizer ; wxStaticBoxSizer* cameraSizer; wxStaticBoxSizer* uiOptSizer; DECLARE_EVENT_TABLE() }; #endif springlobby-0.169/src/springunitsync.cpp0000600000176000000410000011237512105760300022022 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include "springunitsync.h" #include #include #include #include #include #include #include #include #include #include #include #include #include //#include //#include #include #include #include #include #include #include "settings.h" #include "springunitsynclib.h" #include "utils/customdialogs.h" #include "globalsmanager.h" #include "uiutils.h" #include "utils/debug.h" #include "utils/conversion.h" #include "utils/misc.h" #include #include "utils/globalevents.h" #include "utils/uievents.h" #define LOCK_UNITSYNC wxCriticalSectionLocker lock_criticalsection(m_lock) const wxEventType UnitSyncAsyncOperationCompletedEvt = wxNewEventType(); const wxEventType wxUnitsyncReloadEvent = wxNewEventType(); SpringUnitSync& usync() { static LineInfo m( AT ); static GlobalObjectHolder > m_sync( m ); return m_sync; } SpringUnitSync::SpringUnitSync() : m_cache_thread( NULL ) , m_map_image_cache( 3, _T("m_map_image_cache") ) // may take about 3M per image ( 1024x1024 24 bpp minimap ) , m_tiny_minimap_cache( 200, _T("m_tiny_minimap_cache") ) // takes at most 30k per image ( 100x100 24 bpp minimap ) , m_mapinfo_cache( 1000000, _T("m_mapinfo_cache") ) // this one is just misused as thread safe std::map ... , m_sides_cache( 200, _T("m_sides_cache") ) // another misuse { Connect( wxUnitsyncReloadEvent, wxCommandEventHandler( SpringUnitSync::OnReload ), NULL, this ); } SpringUnitSync::~SpringUnitSync() { Disconnect( wxUnitsyncReloadEvent, wxCommandEventHandler( SpringUnitSync::OnReload ), NULL, this ); if ( m_cache_thread ) m_cache_thread->Wait(); delete m_cache_thread; } static int CompareStringNoCase(const wxString& first, const wxString& second) { return first.CmpNoCase(second); } bool SpringUnitSync::FastLoadUnitSyncLib( const wxString& unitsyncloc ) { LOCK_UNITSYNC; if (!_LoadUnitSyncLib( unitsyncloc )) return false; m_mods_list.clear(); m_mod_array.Clear(); m_unsorted_mod_array.Clear(); m_mods_unchained_hash.clear(); const int numMods = susynclib().GetPrimaryModCount(); wxString name; for ( int i = 0; i < numMods; i++ ) { try { name = susynclib().GetPrimaryModName( i ); m_mods_list[name] = _T("fakehash"); m_mod_array.Add( name ); m_shortname_to_name_map[ std::make_pair(susynclib().GetPrimaryModShortName( i ), susynclib().GetPrimaryModVersion( i )) ] = name; } catch (...) { continue; } } m_unsorted_mod_array = m_mod_array; return true; } bool SpringUnitSync::FastLoadUnitSyncLibInit() { LOCK_UNITSYNC; m_cache_thread = new WorkerThread(); m_cache_thread->Create(); m_cache_thread->SetPriority( WXTHREAD_MIN_PRIORITY ); m_cache_thread->Run(); UiEvents::ScopedStatusMessage staus(_("loading unitsync"), 0); wxLogDebugFunc( _T("") ); if ( IsLoaded() ) { m_cache_path = sett().GetCachePath(); PopulateArchiveList(); } return true; } bool SpringUnitSync::LoadUnitSyncLib( const wxString& unitsyncloc ) { LOCK_UNITSYNC; m_cache_thread = new WorkerThread(); m_cache_thread->Create(); m_cache_thread->SetPriority( WXTHREAD_MIN_PRIORITY ); m_cache_thread->Run(); UiEvents::ScopedStatusMessage staus(_("loading unitsync"), 0); wxLogDebugFunc( _T("") ); bool ret = _LoadUnitSyncLib( unitsyncloc ); if (ret) { m_cache_path = sett().GetCachePath(); PopulateArchiveList(); GetGlobalEventSender(GlobalEvents::OnUnitsyncReloaded).SendEvent( 0 ); } return ret; } void SpringUnitSync::PopulateArchiveList() { m_maps_list.clear(); m_mods_list.clear(); m_mod_array.Clear(); m_map_array.Clear(); m_unsorted_mod_array.Clear(); m_unsorted_map_array.Clear(); m_map_image_cache.Clear(); m_mapinfo_cache.Clear(); m_maps_unchained_hash.clear(); m_mods_unchained_hash.clear(); m_shortname_to_name_map.clear(); m_mapinfo_cache.Clear(); m_sides_cache.Clear(); m_maps_archive_name.clear(); m_mods_archive_name.clear(); int numMaps = susynclib().GetMapCount(); for ( int i = 0; i < numMaps; i++ ) { wxString name, hash, archivename, unchainedhash; try { name = susynclib().GetMapName( i ); hash = susynclib().GetMapChecksum( i ); int count = susynclib().GetMapArchiveCount( i ); if ( count > 0 ) { archivename = susynclib().GetMapArchiveName( 0 ); unchainedhash = susynclib().GetArchiveChecksum( archivename ); } //PrefetchMap( name ); // DEBUG } catch (...) { continue; } try { m_maps_list[name] = hash; if ( !unchainedhash.IsEmpty() ) m_maps_unchained_hash[name] = unchainedhash; if ( !archivename.IsEmpty() ) m_maps_archive_name[name] = archivename; m_map_array.Add( name ); } catch (...) { wxLogError( _T("Found map with hash collision: ") + name + _T(" hash: ") + hash ); } } int numMods = susynclib().GetPrimaryModCount(); for ( int i = 0; i < numMods; i++ ) { wxString name, hash, archivename, unchainedhash; try { name = susynclib().GetPrimaryModName( i ); hash = susynclib().GetPrimaryModChecksum( i ); int count = susynclib().GetPrimaryModArchiveCount( i ); if ( count > 0 ) { archivename = susynclib().GetPrimaryModArchive( i ); unchainedhash = susynclib().GetArchiveChecksum( archivename ); } } catch (...) { continue; } try { m_mods_list[name] = hash; if ( !unchainedhash.IsEmpty() ) m_mods_unchained_hash[name] = unchainedhash; if ( !archivename.IsEmpty() ) m_mods_archive_name[name] = archivename; m_mod_array.Add( name ); m_shortname_to_name_map[ std::make_pair(susynclib().GetPrimaryModShortName( i ), susynclib().GetPrimaryModVersion( i )) ] = name; } catch (...) { wxLogError( _T("Found game with hash collision: ") + name + _T(" hash: ") + hash ); } } m_unsorted_mod_array = m_mod_array; m_unsorted_map_array = m_map_array; m_map_array.Sort(CompareStringNoCase); m_mod_array.Sort(CompareStringNoCase); } bool SpringUnitSync::_LoadUnitSyncLib( const wxString& unitsyncloc ) { try { susynclib().Load( unitsyncloc, sett().GetForcedSpringConfigFilePath() ); } catch (...) { return false; } return true; } void SpringUnitSync::FreeUnitSyncLib() { LOCK_UNITSYNC; wxLogDebugFunc( _T("") ); susynclib().Unload(); } bool SpringUnitSync::IsLoaded() const { return susynclib().IsLoaded(); } wxString SpringUnitSync::GetSpringVersion() const { wxLogDebugFunc( _T("") ); wxString ret; try { ret = susynclib().GetSpringVersion(); } catch (...){} return ret; } bool SpringUnitSync::VersionSupports( GameFeature feature ) const { return susynclib().VersionSupports( feature ); } int SpringUnitSync::GetNumMods() const { wxLogDebugFunc( _T("") ); return m_mod_array.GetCount(); } wxArrayString SpringUnitSync::GetModList() const { return m_mod_array; } int SpringUnitSync::GetModIndex( const wxString& name ) const { int result = m_mod_array.Index( name ); if ( result == wxNOT_FOUND ) result = -1; return result; } bool SpringUnitSync::ModExists( const wxString& modname ) const { return (m_mods_list.find(modname) != m_mods_list.end()); } bool SpringUnitSync::ModExists( const wxString& modname, const wxString& hash ) const { const LocalArchivesVector::const_iterator itor = m_mods_list.find(modname); if ( itor == m_mods_list.end() ) return false; return itor->second == hash; } bool SpringUnitSync::ModExistsCheckHash( const wxString& hash ) const { LocalArchivesVector::const_iterator itor = m_mods_list.begin(); for ( ; itor != m_mods_list.end(); ++itor ) { if ( itor->second == hash ) return true; } return false; } UnitSyncMod SpringUnitSync::GetMod( const wxString& modname ) { wxLogDebugFunc( _T("modname = \"") + modname + _T("\"") ); UnitSyncMod m; m.name = modname; m.hash = m_mods_list[modname]; return m; } UnitSyncMod SpringUnitSync::GetMod( int index ) { wxLogDebugFunc( _T("") ); UnitSyncMod m; m.name = m_mod_array[index]; m.hash = m_mods_list[m.name]; return m; } int SpringUnitSync::GetNumMaps() const { wxLogDebugFunc( _T("") ); return m_map_array.GetCount(); } wxArrayString SpringUnitSync::GetMapList() const { return m_map_array; } wxArrayString SpringUnitSync::GetModValidMapList( const wxString& modname ) const { wxArrayString ret; try { unsigned int mapcount = susynclib().GetValidMapCount( modname ); for ( unsigned int i = 0; i < mapcount; i++ ) ret.Add( susynclib().GetValidMapName( i ) ); } catch ( assert_exception& e ) {} return ret; } bool SpringUnitSync::MapExists( const wxString& mapname ) const { return (m_maps_list.find(mapname) != m_maps_list.end()); } bool SpringUnitSync::MapExists( const wxString& mapname, const wxString& hash ) const { const LocalArchivesVector::const_iterator itor = m_maps_list.find(mapname); if ( itor == m_maps_list.end() ) return false; return itor->second == hash; } UnitSyncMap SpringUnitSync::GetMap( const wxString& mapname ) { wxLogDebugFunc( _T("") ); UnitSyncMap m; m.name = mapname; m.hash = m_maps_list[mapname]; return m; } UnitSyncMap SpringUnitSync::GetMap( int index ) { wxLogDebugFunc( _T("") ); UnitSyncMap m; m.name = m_map_array[index]; m.hash = m_maps_list[m.name]; return m; } UnitSyncMap SpringUnitSync::GetMapEx( int index ) { UnitSyncMap m; if ( index < 0 ) return m; m.name = m_map_array[index]; m.hash = m_maps_list[m.name]; m.info = _GetMapInfoEx( m.name ); return m; } void GetOptionEntry( const int i, GameOptions& ret) { //all section values for options are converted to lower case //since usync returns the key of section type keys lower case //otherwise comapring would be a real hassle wxString key = susynclib().GetOptionKey(i); wxString name = susynclib().GetOptionName(i); switch (susynclib().GetOptionType(i)) { case opt_float: { ret.float_map[key] = mmOptionFloat( name, key, susynclib().GetOptionDesc(i), susynclib().GetOptionNumberDef(i), susynclib().GetOptionNumberStep(i), susynclib().GetOptionNumberMin(i), susynclib().GetOptionNumberMax(i), susynclib().GetOptionSection(i).Lower(), susynclib().GetOptionStyle(i) ); break; } case opt_bool: { ret.bool_map[key] = mmOptionBool( name, key, susynclib().GetOptionDesc(i), susynclib().GetOptionBoolDef(i), susynclib().GetOptionSection(i).Lower(), susynclib().GetOptionStyle(i) ); break; } case opt_string: { ret.string_map[key] = mmOptionString( name, key, susynclib().GetOptionDesc(i), susynclib().GetOptionStringDef(i), susynclib().GetOptionStringMaxLen(i), susynclib().GetOptionSection(i).Lower(), susynclib().GetOptionStyle(i) ); break; } case opt_list: { ret.list_map[key] = mmOptionList(name,key, susynclib().GetOptionDesc(i),susynclib().GetOptionListDef(i), susynclib().GetOptionSection(i).Lower(),susynclib().GetOptionStyle(i)); int listItemCount = susynclib().GetOptionListCount(i); for (int j = 0; j < listItemCount; ++j) { wxString descr = susynclib().GetOptionListItemDesc(i,j); ret.list_map[key].addItem(susynclib().GetOptionListItemKey(i,j),susynclib().GetOptionListItemName(i,j), descr); } break; } case opt_section: { ret.section_map[key] = mmOptionSection( name, key, susynclib().GetOptionDesc(i), susynclib().GetOptionSection(i).Lower(), susynclib().GetOptionStyle(i) ); } } } GameOptions SpringUnitSync::GetMapOptions( const wxString& name ) { wxLogDebugFunc( name ); GameOptions ret; int count = susynclib().GetMapOptionCount(name); for (int i = 0; i < count; ++i) { GetOptionEntry( i, ret ); } return ret; } wxArrayString SpringUnitSync::GetMapDeps( const wxString& mapname ) { wxArrayString ret; try { ret = susynclib().GetMapDeps( m_unsorted_map_array.Index( mapname ) ); } catch( unitsync_assert ) {} return ret; } UnitSyncMap SpringUnitSync::GetMapEx( const wxString& mapname ) { wxLogDebugFunc( _T("") ); int i = GetMapIndex( mapname ); ASSERT_LOGIC( i >= 0, _T("Map does not exist") ); return GetMapEx( i ); } int SpringUnitSync::GetMapIndex( const wxString& name ) const { int result = m_map_array.Index( name ); if ( result == wxNOT_FOUND ) result = -1; return result; } GameOptions SpringUnitSync::GetModOptions( const wxString& name ) { wxLogDebugFunc( name ); GameOptions ret; int count = susynclib().GetModOptionCount(name); for (int i = 0; i < count; ++i) { GetOptionEntry( i, ret ); } return ret; } GameOptions SpringUnitSync::GetModCustomizations( const wxString& modname ) { wxLogDebugFunc( modname ); GameOptions ret; int count = susynclib().GetCustomOptionCount( modname, _T("LobbyOptions.lua") ); for (int i = 0; i < count; ++i) { GetOptionEntry( i, ret ); } return ret; } GameOptions SpringUnitSync::GetSkirmishOptions( const wxString& modname, const wxString& skirmish_name ) { wxLogDebugFunc( modname ); GameOptions ret; int count = susynclib().GetCustomOptionCount( modname, skirmish_name ); for (int i = 0; i < count; ++i) { GetOptionEntry( i, ret ); } return ret; } wxArrayString SpringUnitSync::GetModDeps( const wxString& modname ) const { wxArrayString ret; try { ret = susynclib().GetModDeps( m_unsorted_mod_array.Index( modname ) ); } catch( unitsync_assert ) {} return ret; } wxArrayString SpringUnitSync::GetSides( const wxString& modname ) { wxArrayString ret; if ( ! m_sides_cache.TryGet( modname, ret ) ) { try { ret = susynclib().GetSides( modname ); m_sides_cache.Add( modname, ret ); } catch( unitsync_assert ) {} } return ret; } wxImage SpringUnitSync::GetSidePicture( const wxString& modname, const wxString& SideName ) const { wxLogDebugFunc( _T("") ); wxLogDebugFunc( _T("SideName = \"") + SideName + _T("\"") ); wxString ImgName = _T("SidePics"); ImgName += _T("/"); ImgName += SideName.Upper(); try { return GetImage( modname, ImgName + _T(".png"), false ); } catch ( assert_exception& e){} return GetImage( modname, ImgName + _T(".bmp"), true ); } wxImage SpringUnitSync::GetImage( const wxString& modname, const wxString& image_path, bool useWhiteAsTransparent ) const { wxLogDebugFunc( _T("") ); wxImage cache; susynclib().SetCurrentMod( modname ); int ini = susynclib().OpenFileVFS ( image_path ); ASSERT_EXCEPTION( ini, _T("cannot find side image") ); int FileSize = susynclib().FileSizeVFS(ini); if (FileSize == 0) { susynclib().CloseFileVFS(ini); ASSERT_EXCEPTION( FileSize, _T("image has size 0") ); } LSL::Util::uninitialized_array FileContent(FileSize); susynclib().ReadFileVFS(ini, FileContent, FileSize); wxMemoryInputStream FileContentStream( FileContent, FileSize ); cache.LoadFile( FileContentStream, wxBITMAP_TYPE_ANY, -1); cache.InitAlpha(); if ( useWhiteAsTransparent ) { for ( int x = 0; x < cache.GetWidth(); x++ ) for ( int y = 0; y < cache.GetHeight(); y++ ) if ( cache.GetBlue( x, y ) == 255 && cache.GetGreen( x, y ) == 255 && cache.GetRed( x, y ) == 255 ) cache.SetAlpha( x, y, 0 ); // set pixel to be transparent } return cache; } #ifdef SL_QT_MODE #include QImage SpringUnitSync::GetQImage( const wxString& modname, const wxString& image_path, bool /*useWhiteAsTransparent*/ ) const { QImage cache; susynclib().SetCurrentMod( modname ); int ini = susynclib().OpenFileVFS ( image_path ); ASSERT_EXCEPTION( ini, _T("cannot find side image") ); int FileSize = susynclib().FileSizeVFS(ini); if (FileSize == 0) { susynclib().CloseFileVFS(ini); ASSERT_EXCEPTION( FileSize, _T("image has size 0") ); } QByteArray cache_data; cache_data.resize(FileSize); susynclib().ReadFileVFS(ini, cache_data.data(), FileSize); bool hu = cache.loadFromData( cache_data ); assert( hu ); return cache; } #endif wxArrayString SpringUnitSync::GetAIList( const wxString& modname ) const { wxLogDebugFunc( _T("") ); wxArrayString ret; if ( usync().VersionSupports( USYNC_GetSkirmishAI ) ) { int total = susynclib().GetSkirmishAICount( modname ); for ( int i = 0; i < total; i++ ) { wxArrayString infos = susynclib().GetAIInfo( i ); int namepos = infos.Index( _T("shortName") ); int versionpos = infos.Index( _T("version") ); wxString ainame; if ( namepos != wxNOT_FOUND ) ainame += infos[namepos +1]; if ( versionpos != wxNOT_FOUND ) ainame += _T(" ") + infos[versionpos +1]; ret.Add( ainame ); } } else { // list dynamic link libraries wxArrayString dlllist = susynclib().FindFilesVFS( wxDynamicLibrary::CanonicalizeName(_T("AI/Bot-libs/*"), wxDL_MODULE) ); for( int i = 0; i < long(dlllist.GetCount()); i++ ) { if ( ret.Index( dlllist[i].BeforeLast( '/') ) == wxNOT_FOUND ) ret.Add ( dlllist[i] ); // don't add duplicates } // list jar files (java AIs) wxArrayString jarlist = susynclib().FindFilesVFS( _T("AI/Bot-libs/*.jar") ); for( int i = 0; i < long(jarlist.GetCount()); i++ ) { if ( ret.Index( jarlist[i].BeforeLast( '/') ) == wxNOT_FOUND ) ret.Add ( jarlist[i] ); // don't add duplicates } } return ret; } void SpringUnitSync::UnSetCurrentMod() { try { susynclib().UnSetCurrentMod(); } catch( unitsync_assert ) {} } wxArrayString SpringUnitSync::GetAIInfos( int index ) const { wxArrayString ret; try { ret = susynclib().GetAIInfo( index ); } catch ( unitsync_assert ) {} return ret; } GameOptions SpringUnitSync::GetAIOptions( const wxString& modname, int index ) { wxLogDebugFunc( TowxString(index) ); GameOptions ret; int count = susynclib().GetAIOptionCount(modname, index); for (int i = 0; i < count; ++i) { GetOptionEntry( i, ret ); } return ret; } int SpringUnitSync::GetNumUnits( const wxString& modname ) const { wxLogDebugFunc( _T("") ); susynclib().AddAllArchives( susynclib().GetPrimaryModArchive( m_unsorted_mod_array.Index( modname ) ) ); susynclib().ProcessUnitsNoChecksum(); return susynclib().GetUnitCount(); } wxArrayString SpringUnitSync::GetUnitsList( const wxString& modname ) { wxLogDebugFunc( modname ); wxArrayString cache; try { cache = GetCacheFile( GetFileCachePath( modname, _T(""), true ) + _T(".units") ); } catch(...) { susynclib().SetCurrentMod( modname ); while ( susynclib().ProcessUnitsNoChecksum() > 0 ) {} unsigned int unitcount = susynclib().GetUnitCount(); for ( unsigned int i = 0; i < unitcount; i++ ) { cache.Add( susynclib().GetFullUnitName(i) << _T(" (") << susynclib().GetUnitName(i) << _T(")") ); } SetCacheFile( GetFileCachePath( modname, _T(""), true ) + _T(".units"), cache ); } return cache; } wxImage SpringUnitSync::GetMinimap( const wxString& mapname ) { wxLogDebugFunc( mapname ); return _GetMapImage( mapname, _T(".minimap.png"), &SpringUnitSyncLib::GetMinimap ); } wxImage SpringUnitSync::GetMinimap( const wxString& mapname, int width, int height ) { wxLogDebugFunc( mapname + _T(" size: ") + TowxString( width ) + _T("x") + TowxString( height ) ); const bool tiny = ( width <= 100 && height <= 100 ); wxImage img; if ( tiny && m_tiny_minimap_cache.TryGet( mapname, img ) ) { wxSize image_size = MakeFit(wxSize(img.GetWidth(), img.GetHeight()), wxSize(width, height)); if ( image_size.GetWidth() != img.GetWidth() || image_size.GetHeight() != img.GetHeight() ) img.Rescale( image_size.GetWidth(), image_size.GetHeight() ); return img; } img = GetMinimap( mapname ); // special resizing code because minimap is always square, // and we need to resize it to the correct aspect ratio. if (img.GetWidth() > 1 && img.GetHeight() > 1) { try { MapInfo mapinfo = _GetMapInfoEx( mapname ); wxSize image_size = MakeFit(wxSize(mapinfo.width, mapinfo.height), wxSize(width, height)); img.Rescale( image_size.GetWidth(), image_size.GetHeight() ); } catch (...) { img = wxImage( 1, 1 ); } } if ( tiny ) m_tiny_minimap_cache.Add( mapname, img ); return img; } wxImage SpringUnitSync::GetMetalmap( const wxString& mapname ) { wxLogDebugFunc( mapname ); return _GetMapImage( mapname, _T(".metalmap.png"), &SpringUnitSyncLib::GetMetalmap ); } wxImage SpringUnitSync::GetMetalmap( const wxString& mapname, int width, int height ) { wxLogDebugFunc( mapname + _T(" size: ") + TowxString( width ) + _T("x") + TowxString( height ) ); return _GetScaledMapImage( mapname, &SpringUnitSync::GetMetalmap, width, height ); } wxImage SpringUnitSync::GetHeightmap( const wxString& mapname ) { wxLogDebugFunc( mapname ); return _GetMapImage( mapname, _T(".heightmap.png"), &SpringUnitSyncLib::GetHeightmap ); } wxImage SpringUnitSync::GetHeightmap( const wxString& mapname, int width, int height ) { wxLogDebugFunc( mapname + _T(" size: ") + TowxString( width ) + _T("x") + TowxString( height ) ); return _GetScaledMapImage( mapname, &SpringUnitSync::GetHeightmap, width, height ); } wxImage SpringUnitSync::_GetMapImage( const wxString& mapname, const wxString& imagename, wxImage (SpringUnitSyncLib::*loadMethod)(const wxString&) ) { wxImage img; if ( m_map_image_cache.TryGet( mapname + imagename, img ) ) return img; wxString originalsizepath = GetFileCachePath( mapname, m_maps_unchained_hash[mapname], false ) + imagename; try { ASSERT_EXCEPTION( wxFileExists( originalsizepath ), _T("File cached image does not exist") ); img = wxImage( originalsizepath, wxBITMAP_TYPE_PNG ); ASSERT_EXCEPTION( img.Ok(), _T("Failed to load cache image") ); } catch (...) { try { img = (susynclib().*loadMethod)( mapname ); img.SaveFile( originalsizepath, wxBITMAP_TYPE_PNG ); } catch (...) { img = wxImage( 1, 1 ); } } m_map_image_cache.Add( mapname + imagename, img ); return img; } wxImage SpringUnitSync::_GetScaledMapImage( const wxString& mapname, wxImage (SpringUnitSync::*loadMethod)(const wxString&), int width, int height ) { wxImage img = (this->*loadMethod) ( mapname ); if (img.GetWidth() > 1 && img.GetHeight() > 1) { wxSize image_size = MakeFit(wxSize(img.GetWidth(), img.GetHeight()), wxSize(width, height)); img.Rescale( image_size.GetWidth(), image_size.GetHeight() ); } return img; } MapInfo SpringUnitSync::_GetMapInfoEx( const wxString& mapname ) { MapInfo info; if ( m_mapinfo_cache.TryGet( mapname, info ) ) return info; wxArrayString cache; try { try { cache = GetCacheFile( GetFileCachePath( mapname, m_maps_unchained_hash[mapname], false ) + _T(".infoex") ); ASSERT_EXCEPTION( cache.GetCount() >= 11, _T("not enough lines found in cache info ex") ); info.author = cache[0]; info.tidalStrength = s2l( cache[1] ); info.gravity = s2l( cache[2] ); info.maxMetal = s2d( cache[3] ); info.extractorRadius = s2d( cache[4] ); info.minWind = s2l( cache[5] ); info.maxWind = s2l( cache[6] ); info.width = s2l( cache[7] ); info.height = s2l( cache[8] ); wxArrayString posinfo = wxStringTokenize( cache[9], _T(' '), wxTOKEN_RET_EMPTY ); for ( unsigned int i = 0; i < posinfo.GetCount(); i++) { StartPos position; position.x = s2l( posinfo[i].BeforeFirst( _T('-') ) ); position.y = s2l( posinfo[i].AfterFirst( _T('-') ) ); info.positions.push_back( position ); } unsigned int LineCount = cache.GetCount(); for ( unsigned int i = 10; i < LineCount; i++ ) info.description << cache[i] << _T('\n'); } catch (...) { info = susynclib().GetMapInfoEx( m_unsorted_map_array.Index(mapname), 1 ); cache.Add ( info.author ); cache.Add( TowxString( info.tidalStrength ) ); cache.Add( TowxString( info.gravity ) ); cache.Add( TowxString( info.maxMetal ) ); cache.Add( TowxString( info.extractorRadius ) ); cache.Add( TowxString( info.minWind ) ); cache.Add( TowxString( info.maxWind ) ); cache.Add( TowxString( info.width ) ); cache.Add( TowxString( info.height ) ); wxString postring; for ( unsigned int i = 0; i < info.positions.size(); i++) { postring << TowxString( info.positions[i].x ) << _T('-') << TowxString( info.positions[i].y ) << _T(' '); } cache.Add( postring ); wxArrayString descrtoken = wxStringTokenize( info.description, _T('\n') ); unsigned int desclinecount = descrtoken.GetCount(); for ( unsigned int count = 0; count < desclinecount; count++ ) cache.Add( descrtoken[count] ); SetCacheFile( GetFileCachePath( mapname, m_maps_unchained_hash[mapname], false ) + _T(".infoex"), cache ); } } catch ( ... ) { info.width = 1; info.height = 1; } m_mapinfo_cache.Add( mapname, info ); return info; } void SpringUnitSync::OnReload( wxCommandEvent& /*event*/ ) { ReloadUnitSyncLib(); } void SpringUnitSync::AddReloadEvent( ) { wxCommandEvent evt( wxUnitsyncReloadEvent, wxNewId() ); AddPendingEvent( evt ); } wxArrayString SpringUnitSync::FindFilesVFS( const wxString& pattern ) const { return susynclib().FindFilesVFS( pattern ); } bool SpringUnitSync::ReloadUnitSyncLib() { return LoadUnitSyncLib( sett().GetCurrentUsedUnitSync() ); } void SpringUnitSync::SetSpringDataPath( const wxString& path ) { susynclib().SetSpringConfigString( _T("SpringData"), path ); } bool SpringUnitSync::GetSpringDataPath(wxString& path) { path = susynclib().GetSpringDataDir(); return true; } wxString SpringUnitSync::GetFileCachePath( const wxString& name, const wxString& hash, bool IsMod ) { // LOCK_UNITSYNC; wxString ret = m_cache_path; if ( !name.IsEmpty() ) ret << name; else return wxEmptyString; if ( !hash.IsEmpty() ) ret << _T("-") << hash; else { if ( IsMod ) ret << _T("-") << m_mods_list[name]; else { ret << _T("-") << m_maps_list[name]; } } return ret; } wxArrayString SpringUnitSync::GetCacheFile( const wxString& path ) const { wxArrayString ret; wxTextFile file( path ); file.Open(); ASSERT_EXCEPTION( file.IsOpened() , wxFormat( _T("cache file( %s ) not found") ) % path ); unsigned int linecount = file.GetLineCount(); for ( unsigned int count = 0; count < linecount; count ++ ) { ret.Add( file[count] ); } return ret; } void SpringUnitSync::SetCacheFile( const wxString& path, const wxArrayString& data ) { wxTextFile file( path ); unsigned int arraycount = data.GetCount(); for ( unsigned int count = 0; count < arraycount; count++ ) { file.AddLine( data[count] ); } file.Write(); file.Close(); } wxArrayString SpringUnitSync::GetPlaybackList( bool ReplayType ) const { wxArrayString ret; if ( !IsLoaded() ) return ret; if ( ReplayType ) return susynclib().FindFilesVFS( _T("demos/*.sdf") ); else return susynclib().FindFilesVFS( _T("Saves/*.ssf") ); } bool SpringUnitSync::FileExists( const wxString& name ) const { int handle = susynclib().OpenFileVFS(name); if ( handle == 0 ) return false; susynclib().CloseFileVFS(handle); return true; } wxString SpringUnitSync::GetArchivePath( const wxString& name ) const { wxLogDebugFunc( name ); return susynclib().GetArchivePath( name ); } wxArrayString SpringUnitSync::GetScreenshotFilenames() const { wxArrayString ret; if ( !IsLoaded() ) return ret; ret = susynclib().FindFilesVFS( _T("screenshots/*.*") ); for ( int i = 0; i < long(ret.Count() - 1); ++i ) { if ( ret[i] == ret[i+1] ) ret.RemoveAt( i+1 ); } ret.Sort(); return ret; } wxString SpringUnitSync::GetDefaultNick() { wxString name = susynclib().GetSpringConfigString( _T("name"), _T("Player") ); if ( name.IsEmpty() ) { susynclib().SetSpringConfigString( _T("name"), _T("Player") ); return _T("Player"); } return name; } void SpringUnitSync::SetDefaultNick( const wxString& nick ) { susynclib().SetSpringConfigString( _T("name"), nick ); } //////////////////////////////////////////////////////////////////////////////// ////////////////////////////// Unitsync prefetch/background thread code namespace { typedef wxImage (SpringUnitSync::*LoadMethodPtr)(const wxString&); typedef wxImage (SpringUnitSync::*ScaledLoadMethodPtr)(const wxString&, int, int); class CacheMapWorkItem : public WorkItem { public: SpringUnitSync* m_usync; wxString m_mapname; LoadMethodPtr m_loadMethod; void Run() { (m_usync->*m_loadMethod)( m_mapname ); } CacheMapWorkItem( SpringUnitSync* usync, const wxString& mapname, LoadMethodPtr loadMethod ) : m_usync(usync), m_mapname(mapname.c_str()), m_loadMethod(loadMethod) {} }; class CacheMinimapWorkItem : public WorkItem { public: wxString m_mapname; void Run() { // Fetch rescaled minimap using this specialized class instead of // CacheMapWorkItem with a pointer to SpringUnitSync::GetMinimap, // to ensure SpringUnitSync::_GetMapInfoEx will be called too, and // hence it's data cached. // This reduces main thread blocking while waiting for WorkerThread // to release it's lock while e.g. scrolling through battle list. // 98x98 because battle list map preview is 98x98 usync().GetMinimap( m_mapname, 98, 98 ); } CacheMinimapWorkItem( const wxString& mapname ) : m_mapname(mapname.c_str()) {} }; class GetMapImageAsyncResult : public WorkItem // TODO: rename { public: void Run() { try { RunCore(); } catch (...) { // Event without mapname means some async job failed. // This is sufficient for now, we just need symmetry between // number of initiated async jobs and number of finished/failed // async jobs. m_mapname = wxEmptyString; } PostEvent(); } protected: SpringUnitSync* m_usync; wxString m_mapname; int m_evtHandlerId; int m_evtId; void PostEvent() { wxCommandEvent evt( UnitSyncAsyncOperationCompletedEvt, m_evtId ); evt.SetString( m_mapname ); m_usync->PostEvent( m_evtHandlerId, evt ); } virtual void RunCore() = 0; GetMapImageAsyncResult( SpringUnitSync* usync, const wxString& mapname, int evtHandlerId, int evtId ) : m_usync(usync), m_mapname(mapname.c_str()), m_evtHandlerId(evtHandlerId), m_evtId(evtId) {} }; class GetMapImageAsyncWorkItem : public GetMapImageAsyncResult { public: void RunCore() { (m_usync->*m_loadMethod)( m_mapname ); } LoadMethodPtr m_loadMethod; GetMapImageAsyncWorkItem( SpringUnitSync* usync, const wxString& mapname, int evtHandlerId, LoadMethodPtr loadMethod ) : GetMapImageAsyncResult( usync, mapname, evtHandlerId, 1 ), m_loadMethod(loadMethod) {} }; class GetScaledMapImageAsyncWorkItem : public GetMapImageAsyncResult { public: void RunCore() { (m_usync->*m_loadMethod)( m_mapname, m_width, m_height ); } int m_width; int m_height; ScaledLoadMethodPtr m_loadMethod; GetScaledMapImageAsyncWorkItem( SpringUnitSync* usync, const wxString& mapname, int w, int h, int evtHandlerId, ScaledLoadMethodPtr loadMethod ) : GetMapImageAsyncResult( usync, mapname, evtHandlerId, 2 ), m_width(w), m_height(h), m_loadMethod(loadMethod) {} }; class GetMapExAsyncWorkItem : public GetMapImageAsyncResult { public: void RunCore() { m_usync->GetMapEx( m_mapname ); } GetMapExAsyncWorkItem( SpringUnitSync* usync, const wxString& mapname, int evtHandlerId ) : GetMapImageAsyncResult( usync, mapname, evtHandlerId, 3 ) {} }; } void SpringUnitSync::PrefetchMap( const wxString& mapname ) { wxLogDebugFunc( mapname ); // Use a simple hash based on 3 characters from the mapname // (without '.smf') as negative priority for the WorkItems. // This ensures WorkItems for the same map are put together, // which improves caching performance. // Measured improvement: 60% more cache hits while populating replay tab. // 50% hits without, 80% hits with this code. (cache size 20 images) const int length = std::max(0, int(mapname.length()) - 4); const int hash = ( wxChar(mapname[length * 1/4]) << 16 ) | ( wxChar(mapname[length * 2/4]) << 8 ) | wxChar(mapname[length * 3/4]); const int priority = -hash; if (! m_cache_thread ) { wxLogError( _T("cache thread not initialised") ); return; } { CacheMinimapWorkItem* work; work = new CacheMinimapWorkItem( mapname ); m_cache_thread->DoWork( work, priority ); } { CacheMapWorkItem* work; work = new CacheMapWorkItem( this, mapname, &SpringUnitSync::GetMetalmap ); m_cache_thread->DoWork( work, priority ); work = new CacheMapWorkItem( this, mapname, &SpringUnitSync::GetHeightmap ); m_cache_thread->DoWork( work, priority ); } } int SpringUnitSync::RegisterEvtHandler( wxEvtHandler* evtHandler ) { return m_evt_handlers.Add( evtHandler ); } void SpringUnitSync::UnregisterEvtHandler( int evtHandlerId ) { m_evt_handlers.Remove( evtHandlerId ); } void SpringUnitSync::PostEvent( int evtHandlerId, wxEvent& evt ) { m_evt_handlers.PostEvent( evtHandlerId, evt ); } void SpringUnitSync::_GetMapImageAsync( const wxString& mapname, wxImage (SpringUnitSync::*loadMethod)(const wxString&), int evtHandlerId ) { if (! m_cache_thread ) { wxLogError( _T("cache thread not initialised") ); return; } GetMapImageAsyncWorkItem* work; work = new GetMapImageAsyncWorkItem( this, mapname, evtHandlerId, loadMethod ); m_cache_thread->DoWork( work, 100 ); } void SpringUnitSync::GetMinimapAsync( const wxString& mapname, int evtHandlerId ) { wxLogDebugFunc( mapname ); _GetMapImageAsync( mapname, &SpringUnitSync::GetMinimap, evtHandlerId ); } void SpringUnitSync::GetMinimapAsync( const wxString& mapname, int width, int height, int evtHandlerId ) { wxLogDebugFunc( mapname + _T(" size: ") + TowxString(width) + _T("x") + TowxString(height) ); if (! m_cache_thread ) { wxLogError( _T("cache thread not initialised") ); return; } GetScaledMapImageAsyncWorkItem* work; work = new GetScaledMapImageAsyncWorkItem( this, mapname, width, height, evtHandlerId, &SpringUnitSync::GetMinimap ); m_cache_thread->DoWork( work, 100 ); } void SpringUnitSync::GetMetalmapAsync( const wxString& mapname, int evtHandlerId ) { wxLogDebugFunc( mapname ); _GetMapImageAsync( mapname, &SpringUnitSync::GetMetalmap, evtHandlerId ); } void SpringUnitSync::GetMetalmapAsync( const wxString& mapname, int /*width*/, int /*height*/, int evtHandlerId ) { GetMetalmapAsync( mapname, evtHandlerId ); } void SpringUnitSync::GetHeightmapAsync( const wxString& mapname, int evtHandlerId ) { wxLogDebugFunc( mapname ); _GetMapImageAsync( mapname, &SpringUnitSync::GetHeightmap, evtHandlerId ); } void SpringUnitSync::GetHeightmapAsync( const wxString& mapname, int /*width*/, int /*height*/, int evtHandlerId ) { GetHeightmapAsync( mapname, evtHandlerId ); } void SpringUnitSync::GetMapExAsync( const wxString& mapname, int evtHandlerId ) { wxLogDebugFunc( mapname ); if (! m_cache_thread ) { wxLogError( _T("cache thread not initialised") ); return; } GetMapExAsyncWorkItem* work; work = new GetMapExAsyncWorkItem( this, mapname, evtHandlerId ); m_cache_thread->DoWork( work, 200 /* higher prio then GetMinimapAsync */ ); } wxString SpringUnitSync::GetTextfileAsString( const wxString& modname, const wxString& file_path ) { susynclib().SetCurrentMod( modname ); int ini = susynclib().OpenFileVFS ( file_path ); if ( !ini ) return wxEmptyString; int FileSize = susynclib().FileSizeVFS(ini); if (FileSize == 0) { susynclib().CloseFileVFS(ini); return wxEmptyString; } LSL::Util::uninitialized_array FileContent(FileSize); susynclib().ReadFileVFS(ini, FileContent, FileSize); return wxString( FileContent, wxConvAuto(), size_t( FileSize ) ); } //////////////////////////////////////////////////////////////////////////////// ////////////////////////////// EvtHandlerCollection code int EvtHandlerCollection::Add( wxEvtHandler* evtHandler ) { wxCriticalSectionLocker lock(m_lock); ++m_last_id; m_items[m_last_id] = evtHandler; return m_last_id; } void EvtHandlerCollection::Remove( int evtHandlerId ) { wxCriticalSectionLocker lock(m_lock); EvtHandlerMap::iterator it = m_items.find( evtHandlerId ); if ( it != m_items.end() ) m_items.erase( it ); } void EvtHandlerCollection::PostEvent( int evtHandlerId, wxEvent& evt ) { wxCriticalSectionLocker lock(m_lock); EvtHandlerMap::iterator it = m_items.find( evtHandlerId ); if ( it != m_items.end() ) wxPostEvent( it->second, evt ); } wxString SpringUnitSync::GetNameForShortname( const wxString& shortname, const wxString& version) const { ShortnameVersionToNameMap::const_iterator it = m_shortname_to_name_map.find( std::make_pair(shortname,version) ); if ( it != m_shortname_to_name_map.end() ) return it->second; assert( false ); return wxEmptyString; } springlobby-0.169/src/springunitsync.h0000600000176000000410000003051212105760300021457 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SPRINGUNITSYNC_H #define SPRINGLOBBY_HEADERGUARD_SPRINGUNITSYNC_H #include "globalsmanager.h" #include "thread.h" #include "mmoptionmodel.h" #include "utils/globalevents.h" #include "springunitsync_data.h" #include "mru_cache.h" #include #include #include #ifdef SL_QT_MODE class QImage; #endif class wxImage; extern const wxEventType UnitSyncAsyncOperationCompletedEvt; struct GameOptions; class wxDynamicLibrary; class wxImage; struct CachedMapInfo; struct SpringMapInfo; class SpringUnitSyncLib; #ifdef SL_QT_MODE class QImage; #endif /// Thread safe mapping from evtHandlerId to wxEvtHandler* class EvtHandlerCollection { public: EvtHandlerCollection() : m_last_id(0) {} int Add( wxEvtHandler* evtHandler ); void Remove( int evtHandlerId ); void PostEvent( int evtHandlerId, wxEvent& evt ); private: typedef std::map EvtHandlerMap; mutable wxCriticalSection m_lock; EvtHandlerMap m_items; int m_last_id; }; class SpringUnitSync : public wxEvtHandler { private: SpringUnitSync(); friend class GlobalObjectHolder >; public: virtual ~SpringUnitSync(); enum GameFeature { USYNC_Sett_Handler, USYNC_GetInfoMap, USYNC_GetDataDir, USYNC_GetSkirmishAI }; enum MediaType { map, mod }; typedef std::map OptionMapBool; typedef std::map OptionMapFloat; typedef std::map OptionMapString; typedef std::map OptionMapList; typedef std::map OptionMapSection; typedef std::map::iterator OptionMapBoolIter; typedef std::map::iterator OptionMapFloatIter; typedef std::map::iterator OptionMapStringIter; typedef std::map::iterator OptionMapListIter; typedef std::map::iterator OptionMapSectionIter; typedef std::map::const_iterator OptionMapBoolConstIter; typedef std::map::const_iterator OptionMapFloatConstIter; typedef std::map::const_iterator OptionMapStringConstIter; typedef std::map::const_iterator OptionMapListConstIter; typedef std::map::const_iterator OptionMapSectionConstIter; int GetNumMods() const; wxArrayString GetModList() const; bool ModExists( const wxString& modname ) const; bool ModExists( const wxString& modname, const wxString& hash ) const; bool ModExistsCheckHash( const wxString& hash ) const; UnitSyncMod GetMod( const wxString& modname ); UnitSyncMod GetMod( int index ); //! this functions returns index CUSTOM ALPHBETICALLY SORTED, DO NOT USE TO ACCESS UNITSYNC DIRECTLY //! use m_unsorted_mod_array for real unitsync index int GetModIndex( const wxString& name ) const; GameOptions GetModOptions( const wxString& name ); wxArrayString GetModDeps( const wxString& name ) const; int GetNumMaps() const; wxArrayString GetMapList() const; wxArrayString GetModValidMapList( const wxString& modname ) const; bool MapExists( const wxString& mapname ) const; bool MapExists( const wxString& mapname, const wxString& hash ) const; UnitSyncMap GetMap( const wxString& mapname ); UnitSyncMap GetMap( int index ); UnitSyncMap GetMapEx( const wxString& mapname ); UnitSyncMap GetMapEx( int index ); GameOptions GetMapOptions( const wxString& name ); wxArrayString GetMapDeps( const wxString& name ); //! function to fetch default singplayer/replay/savegame's default nick wxString GetDefaultNick(); //! function to set default singplayer/replay/savegame's default nick void SetDefaultNick( const wxString& nick ); //! this functions returns index CUSTOM ALPHBETICALLY SORTED, DO NOT USE TO ACCESS UNITSYNC DIRECTLY //! use m_unsorted_map_array for real unitsync index int GetMapIndex( const wxString& name ) const; wxArrayString GetSides( const wxString& modname ); wxImage GetSidePicture( const wxString& modname, const wxString& SideName ) const; wxImage GetImage( const wxString& modname, const wxString& image_path, bool useWhiteAsTransparent = true ) const; #ifdef SL_QT_MODE QImage GetQImage( const wxString& modname, const wxString& image_path, bool useWhiteAsTransparent = true ) const; #endif bool LoadUnitSyncLib( const wxString& unitsyncloc ); void FreeUnitSyncLib(); bool IsLoaded() const; wxString GetSpringVersion() const; //! function wich checks if the version returned from unitsync matches a table of supported feature bool VersionSupports( GameFeature feature ) const; void UnSetCurrentMod(); wxArrayString GetAIList( const wxString& modname ) const; wxArrayString GetAIInfos( int index ) const; GameOptions GetAIOptions( const wxString& modname, int index ); int GetNumUnits( const wxString& modname ) const; wxArrayString GetUnitsList( const wxString& modname ); /// get minimap with native width x height wxImage GetMinimap( const wxString& mapname ); /// get minimap rescaled to given width x height wxImage GetMinimap( const wxString& mapname, int width, int height ); /// get metalmap with native width x height wxImage GetMetalmap( const wxString& mapname ); /// get metalmap rescaled to given width x height wxImage GetMetalmap( const wxString& mapname, int width, int height ); /// get heightmap with native width x height wxImage GetHeightmap( const wxString& mapname ); /// get heightmap rescaled to given width x height wxImage GetHeightmap( const wxString& mapname, int width, int height ); wxString GetTextfileAsString( const wxString& modname, const wxString& file_path ); bool ReloadUnitSyncLib( ); void ReloadUnitSyncLib( GlobalEvents::GlobalEventData /*data*/ ) { ReloadUnitSyncLib(); } bool FastLoadUnitSyncLib( const wxString& unitsyncloc ); bool FastLoadUnitSyncLibInit(); void SetSpringDataPath( const wxString& path ); bool GetSpringDataPath( wxString& path); wxArrayString GetPlaybackList( bool ReplayType = true ) const; //savegames otehrwise bool FileExists( const wxString& name ) const; wxString GetArchivePath( const wxString& name ) const; /// schedule a map for prefetching void PrefetchMap( const wxString& mapname ); int RegisterEvtHandler( wxEvtHandler* evtHandler ); void UnregisterEvtHandler( int evtHandlerId ); void PostEvent( int evtHandlerId, wxEvent& evt ); // helper for WorkItems void GetMinimapAsync( const wxString& mapname, int evtHandlerId ); void GetMinimapAsync( const wxString& mapname, int width, int height, int evtHandlerId ); void GetMetalmapAsync( const wxString& mapname, int evtHandlerId ); void GetMetalmapAsync( const wxString& mapname, int width, int height, int evtHandlerId ); void GetHeightmapAsync( const wxString& mapname, int evtHandlerId ); void GetHeightmapAsync( const wxString& mapname, int width, int height, int evtHandlerId ); void GetMapExAsync( const wxString& mapname, int evtHandlerId ); wxArrayString GetScreenshotFilenames() const; virtual GameOptions GetModCustomizations( const wxString& modname ); virtual GameOptions GetSkirmishOptions( const wxString& modname, const wxString& skirmish_name ); virtual void OnReload( wxCommandEvent& event ); virtual void AddReloadEvent( ); wxArrayString FindFilesVFS( const wxString& pattern ) const; private: typedef std::map< std::pair, wxString> ShortnameVersionToNameMap; ShortnameVersionToNameMap m_shortname_to_name_map; LocalArchivesVector m_maps_list; /// mapname -> hash LocalArchivesVector m_mods_list; /// modname -> hash LocalArchivesVector m_mods_unchained_hash; /// modname -> unchained hash LocalArchivesVector m_maps_unchained_hash; /// mapname -> unchained hash LocalArchivesVector m_mods_archive_name; /// modname -> archive name LocalArchivesVector m_maps_archive_name; /// mapname -> archive name wxArrayString m_map_array; // this vector is CUSTOM SORTED ALPHABETICALLY, DON'T USE TO ACCESS UNITSYNC DIRECTLY wxArrayString m_mod_array; // this vector is CUSTOM SORTED ALPHABETICALLY, DON'T USE TO ACCESS UNITSYNC DIRECTLY wxArrayString m_unsorted_map_array; // this is because unitsync doesn't have a search map index by name .. wxArrayString m_unsorted_mod_array; // this isn't necessary but makes things more symmetrical :P /// caches sett().GetCachePath(), because that method calls back into /// susynclib(), there's a good chance main thread blocks on some /// WorkerThread operation... cache is invalidated on reload. wxString m_cache_path; mutable wxCriticalSection m_lock; WorkerThread* m_cache_thread; EvtHandlerCollection m_evt_handlers; /// this cache facilitates async image fetching (image is stored in cache /// in background thread, then main thread gets it from cache) MostRecentlyUsedImageCache m_map_image_cache; /// this cache is a real cache, it stores minimaps with max size 100x100 MostRecentlyUsedImageCache m_tiny_minimap_cache; /// this caches MapInfo to facilitate GetMapExAsync MostRecentlyUsedMapInfoCache m_mapinfo_cache; MostRecentlyUsedArrayStringCache m_sides_cache; //! this function returns only the cache path without the file extension, //! the extension itself would be added in the function as needed wxString GetFileCachePath( const wxString& name, const wxString& hash, bool IsMod ); //! returns an array where each element is a line of the file wxArrayString GetCacheFile( const wxString& path ) const; //! write a file where each element of the array is a line void SetCacheFile( const wxString& path, const wxArrayString& data ); bool _LoadUnitSyncLib( const wxString& unitsyncloc ); void _FreeUnitSyncLib(); MapInfo _GetMapInfoEx( const wxString& mapname ); void PopulateArchiveList(); wxImage _GetMapImage( const wxString& mapname, const wxString& imagename, wxImage (SpringUnitSyncLib::*loadMethod)(const wxString&) ); wxImage _GetScaledMapImage( const wxString& mapname, wxImage (SpringUnitSync::*loadMethod)(const wxString&), int width, int height ); void _GetMapImageAsync( const wxString& mapname, wxImage (SpringUnitSync::*loadMethod)(const wxString&), int evtHandlerId ); public: wxString GetNameForShortname( const wxString& shortname, const wxString& version ) const; }; SpringUnitSync& usync(); struct GameOptions { SpringUnitSync::OptionMapBool bool_map; SpringUnitSync::OptionMapFloat float_map; SpringUnitSync::OptionMapString string_map; SpringUnitSync::OptionMapList list_map; SpringUnitSync::OptionMapSection section_map; }; /// Helper class for managing async operations safely class UnitSyncAsyncOps { public: UnitSyncAsyncOps( wxEvtHandler* evtHandler ) : m_id( usync().RegisterEvtHandler( evtHandler ) ) {} ~UnitSyncAsyncOps() { usync().UnregisterEvtHandler( m_id ); } void GetMinimap( const wxString& mapname ) { usync().GetMinimapAsync( mapname, m_id ); } void GetMinimap( const wxString& mapname, int w, int h ) { usync().GetMinimapAsync( mapname, w, h, m_id ); } void GetMetalmap( const wxString& mapname ) { usync().GetMetalmapAsync( mapname, m_id ); } void GetMetalmap( const wxString& mapname, int w, int h ) { usync().GetMetalmapAsync( mapname, w, h, m_id ); } void GetHeightmap( const wxString& mapname ) { usync().GetHeightmapAsync( mapname, m_id ); } void GetHeightmap( const wxString& mapname, int w, int h ) { usync().GetHeightmapAsync( mapname, w, h, m_id ); } void GetMapEx( const wxString& mapname ) { usync().GetMapExAsync( mapname, m_id ); } private: int m_id; }; #endif // SPRINGLOBBY_HEADERGUARD_SPRINGUNITSYNC_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/springunitsync_data.h0000600000176000000410000000321512105760300022450 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ #ifndef SPRINGLOBBY_HEADERGUARD_SPRINGUNITSYNC_DATA_H #define SPRINGLOBBY_HEADERGUARD_SPRINGUNITSYNC_DATA_H #include #include #include struct UnitSyncMod { UnitSyncMod() : name(_T("")),hash(_T("")) { } wxString name; wxString hash; }; struct StartPos { StartPos () : x(0), y(0) {} int x; int y; }; struct MapInfo { MapInfo () : description(_T("")), tidalStrength(0), gravity(0), maxMetal(0.0f), extractorRadius(0), minWind(0), maxWind(0), width(0), height(0), author(_T("")) {} wxString description; int tidalStrength; int gravity; float maxMetal; int extractorRadius; int minWind; int maxWind; int width; int height; std::vector positions; wxString author; }; struct UnitSyncMap { UnitSyncMap() : name(_T("")),hash(_T("")) { } wxString name; wxString hash; MapInfo info; }; typedef std::map LocalArchivesVector; #endif // SPRINGLOBBY_HEADERGUARD_SPRINGUNITSYNC_DATA_H springlobby-0.169/src/springunitsynclib.cpp0000600000176000000410000015424512105760300022513 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include #include #include #include #include #include #include #include "springunitsynclib.h" #include "utils/debug.h" #include "utils/conversion.h" #include "utils/misc.h" #include #include "globalsmanager.h" #define LOCK_UNITSYNC wxCriticalSectionLocker lock_criticalsection(m_lock) //! Macro that checks if a function is present/loaded, unitsync is loaded, and locks it on call. #define InitLib( arg ) \ LOCK_UNITSYNC; \ UNITSYNC_EXCEPTION( m_loaded, _T("Unitsync not loaded.") ); \ UNITSYNC_EXCEPTION( arg, _T("Function was not in unitsync library.") ); SpringUnitSyncLib::SpringUnitSyncLib(): m_loaded(false), m_libhandle(NULL), m_path(wxEmptyString), m_init(NULL), m_uninit(NULL), m_get_next_error(NULL), m_get_writeable_data_dir(NULL), m_get_data_dir_by_index(NULL), m_get_data_dir_count(NULL), m_get_map_count(NULL), m_get_map_checksum(NULL), m_get_map_name(NULL), m_get_map_description(NULL), m_get_map_author(NULL), m_get_map_width(NULL), m_get_map_height(NULL), m_get_map_tidalStrength(NULL), m_get_map_windMin(NULL), m_get_map_windMax(NULL), m_get_map_gravity(NULL), m_get_map_resource_count(NULL), m_get_map_resource_name(NULL), m_get_map_resource_max(NULL), m_get_map_resource_extractorRadius(NULL), m_get_map_pos_count(NULL), m_get_map_pos_x(NULL), m_get_map_pos_z(NULL), m_get_map_info_ex(NULL), m_get_minimap(NULL), m_get_infomap_size(NULL), m_get_infomap(NULL), m_get_mod_checksum(NULL), m_get_mod_index(NULL), m_get_mod_name(NULL), m_get_mod_count(NULL), m_get_mod_archive(NULL), m_get_side_count(NULL), m_get_side_name(NULL), m_add_all_archives(NULL), m_remove_all_archives(NULL), m_get_unit_count(NULL), m_get_unit_name(NULL), m_get_unit_full_name(NULL), m_proc_units_nocheck(NULL), m_init_find_vfs(NULL), m_find_files_vfs(NULL), m_open_file_vfs(NULL), m_file_size_vfs(NULL), m_read_file_vfs(NULL), m_close_file_vfs(NULL), m_init_dirlist_vfs(NULL), m_init_subdirs_vfs(NULL), m_get_spring_version(NULL), m_process_units(NULL), m_add_archive(NULL), m_get_archive_checksum(NULL), m_get_archive_path(NULL), m_get_map_archive_count(NULL), m_get_map_archive_name(NULL), m_get_map_checksum_from_name(NULL), m_get_primary_mod_short_name(NULL), m_get_primary_mod_version(NULL), m_get_primary_mod_mutator(NULL), m_get_primary_mod_game(NULL), m_get_primary_mod_short_game(NULL), m_get_primary_mod_description(NULL), m_get_primary_mod_archive(NULL), m_get_primary_mod_archive_count(NULL), m_get_primary_mod_archive_list(NULL), m_get_primary_mod_checksum_from_name(NULL), m_get_mod_valid_map_count(NULL), m_get_valid_map(NULL), m_get_luaai_count(NULL), m_get_luaai_name(NULL), m_get_luaai_desc(NULL), m_get_map_option_count(NULL), m_get_custom_option_count(NULL), m_get_mod_option_count(NULL), m_get_skirmish_ai_option_count(NULL), m_get_option_key(NULL), m_get_option_name(NULL), m_get_option_desc(NULL), m_get_option_type(NULL), m_get_option_section(NULL), m_get_option_style(NULL), m_get_option_bool_def(NULL), m_get_option_number_def(NULL), m_get_option_number_min(NULL), m_get_option_number_max(NULL), m_get_option_number_step(NULL), m_get_option_string_def(NULL), m_get_option_string_max_len(NULL), m_get_option_list_count(NULL), m_get_option_list_def(NULL), m_get_option_list_item_key(NULL), m_get_option_list_item_name(NULL), m_get_option_list_item_desc(NULL), m_open_archive(NULL), m_close_archive(NULL), m_find_Files_archive(NULL), m_open_archive_file(NULL), m_read_archive_file(NULL), m_close_archive_file(NULL), m_size_archive_file(NULL), m_set_spring_config_file_path(NULL), m_get_spring_config_file_path(NULL), m_set_spring_config_float(NULL), m_get_spring_config_float(NULL), m_get_spring_config_int(NULL), m_get_spring_config_string(NULL), m_set_spring_config_string(NULL), m_set_spring_config_int(NULL), m_get_skirmish_ai_count(NULL), m_get_skirmish_ai_info_count(NULL), m_get_skirmish_ai_info_key(NULL), m_get_skirmish_ai_info_value(NULL), m_get_skirmish_ai_info_description(NULL), m_parser_close(NULL), m_parser_open_file(NULL), m_parser_open_source(NULL), m_parser_execute(NULL), m_parser_error_log(NULL), m_parser_add_table_int(NULL), m_parser_add_table_string(NULL), m_parser_end_table(NULL), m_parser_add_int_key_int_value(NULL), m_parser_add_string_key_int_value(NULL), m_parser_add_int_key_bool_value(NULL), m_parser_add_string_key_bool_value(NULL), m_parser_add_int_key_float_value(NULL), m_parser_add_string_key_float_value(NULL), m_parser_add_int_key_string_value(NULL), m_parser_add_string_key_string_value(NULL), m_parser_root_table(NULL), m_parser_root_table_expression(NULL), m_parser_sub_table_int(NULL), m_parser_sub_table_string(NULL), m_parser_sub_table_expression(NULL), m_parser_pop_table(NULL), m_parser_key_int_exists(NULL), m_parser_key_string_exists(NULL), m_parser_int_key_get_type(NULL), m_parser_string_key_get_type(NULL), m_parser_int_key_get_list_count(NULL), m_parser_int_key_get_list_entry(NULL), m_parser_string_key_get_list_count(NULL), m_parser_string_key_get_list_entry(NULL), m_parser_int_key_get_int_value(NULL), m_parser_string_key_get_int_value(NULL), m_parser_int_key_get_bool_value(NULL), m_parser_string_key_get_bool_value(NULL), m_parser_int_key_get_float_value(NULL), m_parser_string_key_get_float_value(NULL), m_parser_int_key_get_string_value(NULL), m_parser_string_key_get_string_value(NULL) { } SpringUnitSyncLib::~SpringUnitSyncLib() { Unload(); } SpringUnitSyncLib& susynclib() { static LineInfo m( AT ); static GlobalObjectHolder > lib( m ); return lib.GetInstance(); } void SpringUnitSyncLib::Load( const wxString& path, const wxString& ForceConfigFilePath ) { LOCK_UNITSYNC; #ifdef __WXMSW__ //Dirty Hack to make the first character upper char //unitsync failed to initialize for me given a path like //"d:\Games\Spring\unitsync.dll" //but worked for "D:\Games\Spring\unitsync.dll" wxString g = path; if ( g.find( wxT( ":\\" ) ) == 1 ) { g.SetChar( 0, wxToupper( g.at(0) ) ); } _Load( g ); #else _Load( path ); #endif if ( !ForceConfigFilePath.IsEmpty() ) { if ( m_set_spring_config_file_path ) { m_set_spring_config_file_path( ForceConfigFilePath.mb_str() ); } } _Init(); } template < class FunctionPointerType > void GetLibFuncPtr( const wxDynamicLibrary* libhandle, const wxString& name, FunctionPointerType& p ) { ASSERT_LOGIC( libhandle != 0, _T("Unitsync not loaded") ); if ( libhandle->HasSymbol( name ) ){ //see http://www.mr-edd.co.uk/blog/supressing_gcc_warnings #if defined(__GNUC__) || defined (__clang__) __extension__ #endif p = reinterpret_cast( libhandle->GetSymbol( name ) ); if ( !p ) { wxLogMessage( _T("Couldn't load %s from unitsync library"),name.c_str() ); } } else { p = NULL; wxLogMessage( _T("Couldn't load %s from unitsync library"), name.c_str() ); } } void SpringUnitSyncLib::_Load( const wxString& path ) { #ifdef SL_QT_MODE wxLogNull nullLog; #endif if ( _IsLoaded() && path == m_path ) return; _Unload(); m_path = path; // Load the library. wxLogMessage( _T("Loading from: %s"), path.c_str() ); // Check if library exists if ( !wxFileName::FileExists( path ) ) { wxLogError( _T("File not found: %s"), path.c_str() ); ASSERT_EXCEPTION( false, _T("Failed to load Unitsync lib.") ); } // Check if library readable if ( !wxFile().Open( path ) ) { wxLogError( _T("couldn read unitsync from %s"), path.c_str() ); ASSERT_EXCEPTION( false, _T("Unitsync lib at given location is present, but not readable.") ); } { wxLog *currentarget = wxLog::GetActiveTarget(); wxLog *templogger = new wxLogGui(); wxLog::SetActiveTarget( templogger ); try { #ifdef __WXMSW__ wxSetWorkingDirectory( path.BeforeLast('\\') ); #endif m_libhandle = new wxDynamicLibrary( path ); if ( !m_libhandle->IsLoaded() ) { delete m_libhandle; m_libhandle = 0; } } catch(...) { m_libhandle = 0; } wxLog::SetActiveTarget( currentarget ); delete templogger; } ASSERT_EXCEPTION( m_libhandle != 0, _T("Couldn't load the unitsync library") ); // Load all function from library. try { GetLibFuncPtr( m_libhandle, _T("Init"), m_init ); GetLibFuncPtr( m_libhandle, _T("UnInit"), m_uninit ); GetLibFuncPtr( m_libhandle, _T("GetNextError"), m_get_next_error ); GetLibFuncPtr( m_libhandle, _T("GetWritableDataDirectory"), m_get_writeable_data_dir ); GetLibFuncPtr( m_libhandle, _T("GetDataDirectory"), m_get_data_dir_by_index ); GetLibFuncPtr( m_libhandle, _T("GetDataDirectoryCount"), m_get_data_dir_count ); GetLibFuncPtr( m_libhandle, _T("GetMapCount"), m_get_map_count ); GetLibFuncPtr( m_libhandle, _T("GetMapChecksum"), m_get_map_checksum ); GetLibFuncPtr( m_libhandle, _T("GetMapName"), m_get_map_name ); try { GetLibFuncPtr( m_libhandle, _T("GetMapDescription"), m_get_map_description ); GetLibFuncPtr( m_libhandle, _T("GetMapAuthor"), m_get_map_author ); GetLibFuncPtr( m_libhandle, _T("GetMapWidth"), m_get_map_width ); GetLibFuncPtr( m_libhandle, _T("GetMapHeight"), m_get_map_height ); GetLibFuncPtr( m_libhandle, _T("GetMapTidalStrength"), m_get_map_tidalStrength ); GetLibFuncPtr( m_libhandle, _T("GetMapWindMin"), m_get_map_windMin ); GetLibFuncPtr( m_libhandle, _T("GetMapWindMax"), m_get_map_windMax ); GetLibFuncPtr( m_libhandle, _T("GetMapGravity"), m_get_map_gravity ); GetLibFuncPtr( m_libhandle, _T("GetMapResourceCount"), m_get_map_resource_count ); GetLibFuncPtr( m_libhandle, _T("GetMapResourceName"), m_get_map_resource_name ); GetLibFuncPtr( m_libhandle, _T("GetMapResourceMax"), m_get_map_resource_max ); GetLibFuncPtr( m_libhandle, _T("GetMapResourceExtractorRadius"),m_get_map_resource_extractorRadius ); GetLibFuncPtr( m_libhandle, _T("GetMapPosCount"), m_get_map_pos_count ); GetLibFuncPtr( m_libhandle, _T("GetMapPosX"), m_get_map_pos_x ); GetLibFuncPtr( m_libhandle, _T("GetMapPosZ"), m_get_map_pos_z ); wxLogMessage(_T("Using new style map-info fetching (GetMap*() functions).")); } catch ( ... ) { m_get_map_name = NULL; wxLogMessage(_T("Using old style map-info fetching (GetMapInfoEx()).")); } GetLibFuncPtr( m_libhandle, _T("GetMapInfoEx"), m_get_map_info_ex ); GetLibFuncPtr( m_libhandle, _T("GetMinimap"), m_get_minimap ); GetLibFuncPtr( m_libhandle, _T("GetInfoMapSize"), m_get_infomap_size ); GetLibFuncPtr( m_libhandle, _T("GetInfoMap"), m_get_infomap ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModChecksum"), m_get_mod_checksum ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModIndex"), m_get_mod_index ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModName"), m_get_mod_name ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModCount"), m_get_mod_count ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModArchive"), m_get_mod_archive ); GetLibFuncPtr( m_libhandle, _T("GetSideCount"), m_get_side_count ); GetLibFuncPtr( m_libhandle, _T("GetSideName"), m_get_side_name ); GetLibFuncPtr( m_libhandle, _T("AddAllArchives"), m_add_all_archives ); GetLibFuncPtr( m_libhandle, _T("RemoveAllArchives"), m_remove_all_archives ); GetLibFuncPtr( m_libhandle, _T("GetUnitCount"), m_get_unit_count ); GetLibFuncPtr( m_libhandle, _T("GetUnitName"), m_get_unit_name ); GetLibFuncPtr( m_libhandle, _T("GetFullUnitName"), m_get_unit_full_name ); GetLibFuncPtr( m_libhandle, _T("ProcessUnitsNoChecksum"), m_proc_units_nocheck ); GetLibFuncPtr( m_libhandle, _T("InitFindVFS"), m_init_find_vfs ); GetLibFuncPtr( m_libhandle, _T("FindFilesVFS"), m_find_files_vfs ); GetLibFuncPtr( m_libhandle, _T("OpenFileVFS"), m_open_file_vfs ); GetLibFuncPtr( m_libhandle, _T("FileSizeVFS"), m_file_size_vfs ); GetLibFuncPtr( m_libhandle, _T("ReadFileVFS"), m_read_file_vfs ); GetLibFuncPtr( m_libhandle, _T("CloseFileVFS"), m_close_file_vfs ); GetLibFuncPtr( m_libhandle, _T("InitDirListVFS"), m_init_dirlist_vfs ); GetLibFuncPtr( m_libhandle, _T("InitSubDirsVFS"), m_init_subdirs_vfs ); GetLibFuncPtr( m_libhandle, _T("GetSpringVersion"), m_get_spring_version ); GetLibFuncPtr( m_libhandle, _T("ProcessUnits"), m_process_units ); GetLibFuncPtr( m_libhandle, _T("AddArchive"), m_add_archive ); GetLibFuncPtr( m_libhandle, _T("GetArchiveChecksum"), m_get_archive_checksum ); GetLibFuncPtr( m_libhandle, _T("GetArchivePath"), m_get_archive_path ); GetLibFuncPtr( m_libhandle, _T("GetMapArchiveCount"), m_get_map_archive_count ); GetLibFuncPtr( m_libhandle, _T("GetMapArchiveName"), m_get_map_archive_name ); GetLibFuncPtr( m_libhandle, _T("GetMapChecksum"), m_get_map_checksum ); GetLibFuncPtr( m_libhandle, _T("GetMapChecksumFromName"), m_get_map_checksum_from_name ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModShortName"), m_get_primary_mod_short_name ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModVersion"), m_get_primary_mod_version ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModMutator"), m_get_primary_mod_mutator ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModGame"), m_get_primary_mod_game ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModShortGame"), m_get_primary_mod_short_game ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModDescription"), m_get_primary_mod_description ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModArchive"), m_get_primary_mod_archive ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModArchiveCount"), m_get_primary_mod_archive_count ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModArchiveList"), m_get_primary_mod_archive_list ); GetLibFuncPtr( m_libhandle, _T("GetPrimaryModChecksumFromName"), m_get_primary_mod_checksum_from_name ); GetLibFuncPtr( m_libhandle, _T("GetModValidMapCount"), m_get_mod_valid_map_count ); GetLibFuncPtr( m_libhandle, _T("GetModValidMap"), m_get_valid_map ); GetLibFuncPtr( m_libhandle, _T("GetMapOptionCount"), m_get_map_option_count ); GetLibFuncPtr( m_libhandle, _T("GetCustomOptionCount"), m_get_custom_option_count ); GetLibFuncPtr( m_libhandle, _T("GetModOptionCount"), m_get_mod_option_count ); GetLibFuncPtr( m_libhandle, _T("GetSkirmishAIOptionCount"), m_get_skirmish_ai_option_count ); GetLibFuncPtr( m_libhandle, _T("GetOptionKey"), m_get_option_key ); GetLibFuncPtr( m_libhandle, _T("GetOptionName"), m_get_option_name ); GetLibFuncPtr( m_libhandle, _T("GetOptionDesc"), m_get_option_desc ); GetLibFuncPtr( m_libhandle, _T("GetOptionType"), m_get_option_type ); GetLibFuncPtr( m_libhandle, _T("GetOptionSection"), m_get_option_section ); GetLibFuncPtr( m_libhandle, _T("GetOptionStyle"), m_get_option_style ); GetLibFuncPtr( m_libhandle, _T("GetOptionBoolDef"), m_get_option_bool_def ); GetLibFuncPtr( m_libhandle, _T("GetOptionNumberDef"), m_get_option_number_def ); GetLibFuncPtr( m_libhandle, _T("GetOptionNumberMin"), m_get_option_number_min ); GetLibFuncPtr( m_libhandle, _T("GetOptionNumberMax"), m_get_option_number_max ); GetLibFuncPtr( m_libhandle, _T("GetOptionNumberStep"), m_get_option_number_step ); GetLibFuncPtr( m_libhandle, _T("GetOptionStringDef"), m_get_option_string_def ); GetLibFuncPtr( m_libhandle, _T("GetOptionStringMaxLen"), m_get_option_string_max_len ); GetLibFuncPtr( m_libhandle, _T("GetOptionListCount"), m_get_option_list_count ); GetLibFuncPtr( m_libhandle, _T("GetOptionListDef"), m_get_option_list_def ); GetLibFuncPtr( m_libhandle, _T("GetOptionListItemKey"), m_get_option_list_item_key ); GetLibFuncPtr( m_libhandle, _T("GetOptionListItemName"), m_get_option_list_item_name ); GetLibFuncPtr( m_libhandle, _T("GetOptionListItemDesc"), m_get_option_list_item_desc ); GetLibFuncPtr( m_libhandle, _T("SetSpringConfigFile"), m_set_spring_config_file_path ); GetLibFuncPtr( m_libhandle, _T("GetSpringConfigFile"), m_get_spring_config_file_path ); GetLibFuncPtr( m_libhandle, _T("OpenArchive"), m_open_archive ); GetLibFuncPtr( m_libhandle, _T("CloseArchive"), m_close_archive ); GetLibFuncPtr( m_libhandle, _T("FindFilesArchive"), m_find_Files_archive ); GetLibFuncPtr( m_libhandle, _T("OpenArchiveFile"), m_open_archive_file ); GetLibFuncPtr( m_libhandle, _T("ReadArchiveFile"), m_read_archive_file ); GetLibFuncPtr( m_libhandle, _T("CloseArchiveFile"), m_close_archive_file ); GetLibFuncPtr( m_libhandle, _T("SizeArchiveFile"), m_size_archive_file ); GetLibFuncPtr( m_libhandle, _T("SetSpringConfigFloat"), m_set_spring_config_float ); GetLibFuncPtr( m_libhandle, _T("GetSpringConfigFloat"), m_get_spring_config_float ); GetLibFuncPtr( m_libhandle, _T("GetSpringConfigInt"), m_get_spring_config_int ); GetLibFuncPtr( m_libhandle, _T("GetSpringConfigString"), m_get_spring_config_string ); GetLibFuncPtr( m_libhandle, _T("SetSpringConfigString"), m_set_spring_config_string ); GetLibFuncPtr( m_libhandle, _T("SetSpringConfigInt"), m_set_spring_config_int ); GetLibFuncPtr( m_libhandle, _T("GetSkirmishAICount"), m_get_skirmish_ai_count ); GetLibFuncPtr( m_libhandle, _T("GetSkirmishAIInfoCount"), m_get_skirmish_ai_info_count ); GetLibFuncPtr( m_libhandle, _T("GetInfoKey"), m_get_skirmish_ai_info_key ); GetLibFuncPtr( m_libhandle, _T("GetInfoValue"), m_get_skirmish_ai_info_value ); GetLibFuncPtr( m_libhandle, _T("GetInfoDescription"), m_get_skirmish_ai_info_description ); // begin lua parser calls GetLibFuncPtr( m_libhandle, _T("lpClose"), m_parser_close ); GetLibFuncPtr( m_libhandle, _T("lpOpenFile"), m_parser_open_file ); GetLibFuncPtr( m_libhandle, _T("lpOpenSource"), m_parser_open_source ); GetLibFuncPtr( m_libhandle, _T("lpExecute"), m_parser_execute ); GetLibFuncPtr( m_libhandle, _T("lpErrorLog"), m_parser_error_log ); GetLibFuncPtr( m_libhandle, _T("lpAddTableInt"), m_parser_add_table_int ); GetLibFuncPtr( m_libhandle, _T("lpAddTableStr"), m_parser_add_table_string ); GetLibFuncPtr( m_libhandle, _T("lpEndTable"), m_parser_end_table ); GetLibFuncPtr( m_libhandle, _T("lpAddIntKeyIntVal"), m_parser_add_int_key_int_value ); GetLibFuncPtr( m_libhandle, _T("lpAddStrKeyIntVal"), m_parser_add_string_key_int_value ); GetLibFuncPtr( m_libhandle, _T("lpAddIntKeyBoolVal"), m_parser_add_int_key_bool_value ); GetLibFuncPtr( m_libhandle, _T("lpAddStrKeyBoolVal"), m_parser_add_string_key_bool_value ); GetLibFuncPtr( m_libhandle, _T("lpAddIntKeyFloatVal"), m_parser_add_int_key_float_value ); GetLibFuncPtr( m_libhandle, _T("lpAddStrKeyFloatVal"), m_parser_add_string_key_float_value ); GetLibFuncPtr( m_libhandle, _T("lpAddIntKeyStrVal"), m_parser_add_int_key_string_value ); GetLibFuncPtr( m_libhandle, _T("lpAddStrKeyStrVal"), m_parser_add_string_key_string_value ); GetLibFuncPtr( m_libhandle, _T("lpRootTable"), m_parser_root_table ); GetLibFuncPtr( m_libhandle, _T("lpRootTableExpr"), m_parser_root_table_expression ); GetLibFuncPtr( m_libhandle, _T("lpSubTableInt"), m_parser_sub_table_int ); GetLibFuncPtr( m_libhandle, _T("lpSubTableStr"), m_parser_sub_table_string ); GetLibFuncPtr( m_libhandle, _T("lpSubTableExpr"), m_parser_sub_table_expression ); GetLibFuncPtr( m_libhandle, _T("lpPopTable"), m_parser_pop_table ); GetLibFuncPtr( m_libhandle, _T("lpGetKeyExistsInt"), m_parser_key_int_exists ); GetLibFuncPtr( m_libhandle, _T("lpGetKeyExistsStr"), m_parser_key_string_exists ); GetLibFuncPtr( m_libhandle, _T("lpGetIntKeyType"), m_parser_int_key_get_type ); GetLibFuncPtr( m_libhandle, _T("lpGetStrKeyType"), m_parser_string_key_get_type ); GetLibFuncPtr( m_libhandle, _T("lpGetIntKeyListCount"), m_parser_int_key_get_list_count ); GetLibFuncPtr( m_libhandle, _T("lpGetIntKeyListEntry"), m_parser_int_key_get_list_entry ); GetLibFuncPtr( m_libhandle, _T("lpGetStrKeyListCount"), m_parser_string_key_get_list_count ); GetLibFuncPtr( m_libhandle, _T("lpGetStrKeyListEntry"), m_parser_string_key_get_list_entry ); GetLibFuncPtr( m_libhandle, _T("lpGetIntKeyIntVal"), m_parser_int_key_get_int_value ); GetLibFuncPtr( m_libhandle, _T("lpGetStrKeyIntVal"), m_parser_string_key_get_int_value ); GetLibFuncPtr( m_libhandle, _T("lpGetIntKeyBoolVal"), m_parser_int_key_get_bool_value ); GetLibFuncPtr( m_libhandle, _T("lpGetStrKeyBoolVal"), m_parser_string_key_get_bool_value ); GetLibFuncPtr( m_libhandle, _T("lpGetIntKeyFloatVal"), m_parser_int_key_get_float_value ); GetLibFuncPtr( m_libhandle, _T("lpGetStrKeyFloatVal"), m_parser_string_key_get_float_value ); GetLibFuncPtr( m_libhandle, _T("lpGetIntKeyStrVal"), m_parser_int_key_get_string_value ); GetLibFuncPtr( m_libhandle, _T("lpGetStrKeyStrVal"), m_parser_string_key_get_string_value ); // only when we end up here unitsync was succesfully loaded. m_loaded = true; } catch ( ... ) { // don't uninit unitsync in _Unload -- it hasn't been init'ed yet m_uninit = NULL; _Unload(); ASSERT_EXCEPTION( false, _T("Failed to load Unitsync lib.") ); } } void SpringUnitSyncLib::_Init() { if ( _IsLoaded() && m_init != NULL ) { #ifndef SL_QT_MODE //log stuff segfaults otherwise wxLog *currentarget = wxLog::GetActiveTarget(); wxLog *templogger = new wxLogGui(); wxLog::SetActiveTarget( templogger ); #endif m_current_mod = wxEmptyString; m_init( true, 1 ); wxArrayString errors = GetUnitsyncErrors(); for ( unsigned int i = 0; i < errors.GetCount(); i++ ) { wxLogError( _T("%s"), errors[i].c_str() ); } #ifndef SL_QT_MODE wxLog::SetActiveTarget( currentarget ); delete templogger; #endif } } void SpringUnitSyncLib::_RemoveAllArchives() { if (m_remove_all_archives) m_remove_all_archives(); else _Init(); } void SpringUnitSyncLib::Unload() { if ( !_IsLoaded() ) return;// dont even lock anything if unloaded. LOCK_UNITSYNC; _Unload(); } void SpringUnitSyncLib::_Unload() { // as soon as we enter m_uninit unitsync technically isn't loaded anymore. m_loaded = false; m_path = wxEmptyString; // can't call UnSetCurrentMod() because it takes the unitsync lock m_current_mod = wxEmptyString; if (m_uninit) m_uninit(); delete m_libhandle; m_libhandle = NULL; m_init = NULL; m_uninit = NULL; } bool SpringUnitSyncLib::IsLoaded() const { return m_loaded; } bool SpringUnitSyncLib::_IsLoaded() const { return m_loaded; } void SpringUnitSyncLib::AssertUnitsyncOk() const { UNITSYNC_EXCEPTION( m_loaded, _T("Unitsync not loaded.") ); UNITSYNC_EXCEPTION( m_get_next_error, _T("Function was not in unitsync library.") ); UNITSYNC_EXCEPTION( false, WX_STRINGC( m_get_next_error() ) ); } wxArrayString SpringUnitSyncLib::GetUnitsyncErrors() const { wxArrayString ret; try { UNITSYNC_EXCEPTION( m_loaded, _T("Unitsync not loaded.") ); UNITSYNC_EXCEPTION( m_get_next_error, _T("Function was not in unitsync library.") ); wxString msg = WX_STRINGC( m_get_next_error() ); while ( !msg.IsEmpty() ) { ret.Add( msg ); msg = WX_STRINGC( m_get_next_error() ); } } catch ( unitsync_assert &e ) { ret.Add( WX_STRINGC( e.what() ) ); } return ret; } bool SpringUnitSyncLib::VersionSupports( SpringUnitSync::GameFeature feature ) const { LOCK_UNITSYNC; switch (feature) { case SpringUnitSync::USYNC_Sett_Handler: return m_set_spring_config_string; case SpringUnitSync::USYNC_GetInfoMap: return m_get_infomap_size; case SpringUnitSync::USYNC_GetDataDir: return m_get_writeable_data_dir; case SpringUnitSync::USYNC_GetSkirmishAI: return m_get_skirmish_ai_count; default: return false; } } void SpringUnitSyncLib::_ConvertSpringMapInfo( const SpringMapInfo& in, MapInfo& out ) { out.author = WX_STRINGC(in.author); out.description = WX_STRINGC(in.description); out.extractorRadius = in.extractorRadius; out.gravity = in.gravity; out.tidalStrength = in.tidalStrength; out.maxMetal = in.maxMetal; out.minWind = in.minWind; out.maxWind = in.maxWind; out.width = in.width; out.height = in.height; out.positions = std::vector( in.positions, in.positions + in.posCount ); } void SpringUnitSyncLib::SetCurrentMod( const wxString& modname ) { InitLib( m_init ); // assumes the others are fine // (m_add_all_archives, m_get_mod_archive, m_get_mod_index) _SetCurrentMod( modname ); } void SpringUnitSyncLib::_SetCurrentMod( const wxString& modname ) { if ( m_current_mod != modname ) { wxLogDebugFunc( modname ); if ( !m_current_mod.IsEmpty() ) _RemoveAllArchives(); m_add_all_archives( m_get_mod_archive( m_get_mod_index( modname.mb_str( wxConvUTF8 ) ) ) ); m_current_mod = modname; } } void SpringUnitSyncLib::UnSetCurrentMod( ) { LOCK_UNITSYNC; if ( !m_current_mod.IsEmpty() ) _RemoveAllArchives(); m_current_mod = wxEmptyString; } int SpringUnitSyncLib::GetModIndex( const wxString& name ) { return GetPrimaryModIndex( name ); } std::map SpringUnitSyncLib::GetSpringVersionList(const std::map& usync_paths) { LOCK_UNITSYNC; wxLogDebugFunc(_T("")); std::map ret; for (std::map::const_iterator it = usync_paths.begin(); it != usync_paths.end(); ++it) { wxString path = it->second; try { if ( !wxFileName::FileExists( path ) ) { wxLogError( _T("File not found: %s"), path.c_str() ); ASSERT_EXCEPTION( false, _T("Failed to load Unitsync lib.") ); } #ifdef __WXMSW__ wxSetWorkingDirectory( path.BeforeLast('\\') ); #endif wxDynamicLibrary temphandle( path ); ASSERT_EXCEPTION( temphandle.IsLoaded(), _T("Couldn't load the unitsync library") ); GetSpringVersionPtr getspringversion = 0; wxString functionname = _T("GetSpringVersion"); if ( temphandle.HasSymbol( functionname ) ) { getspringversion = (GetSpringVersionPtr)temphandle.GetSymbol( functionname ); } UNITSYNC_EXCEPTION( getspringversion, _T("getspringversion: function not found") ); wxString version = WX_STRINGC( getspringversion() ); wxLogMessage( _T("Found spring version: %s"), version.c_str() ); ret[it->first] = version; } catch(...){} } return ret; } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // -- The UnitSync functions -- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// wxString SpringUnitSyncLib::GetSpringVersion() { InitLib( m_get_spring_version ); return WX_STRINGC( m_get_spring_version() ); } wxString SpringUnitSyncLib::GetSpringDataDir() { InitLib( m_get_writeable_data_dir ); return WX_STRINGC( m_get_writeable_data_dir() ); } int SpringUnitSyncLib::GetSpringDataDirCount() { InitLib( m_get_data_dir_count); return m_get_data_dir_count(); } wxString SpringUnitSyncLib::GetSpringDataDirByIndex( const int index ) { InitLib( m_get_data_dir_by_index ); return WX_STRINGC( m_get_data_dir_by_index( index ) ); } wxString SpringUnitSyncLib::GetConfigFilePath() { InitLib( m_get_spring_config_file_path ); return WX_STRINGC( m_get_spring_config_file_path() ); } int SpringUnitSyncLib::GetMapCount() { InitLib( m_get_map_count ); return m_get_map_count(); } wxString SpringUnitSyncLib::GetMapChecksum( int index ) { InitLib( m_get_map_checksum ); return TowxString( (unsigned int)m_get_map_checksum( index ) ); } wxString SpringUnitSyncLib::GetMapName( int index ) { InitLib( m_get_map_name ); return WX_STRINGC( m_get_map_name( index ) ); } int SpringUnitSyncLib::GetMapArchiveCount( int index ) { InitLib( m_get_map_archive_count ); return m_get_map_archive_count( m_get_map_name( index ) ); } wxString SpringUnitSyncLib::GetMapArchiveName( int arnr ) { InitLib( m_get_map_archive_name ); return WX_STRINGC( m_get_map_archive_name( arnr ) ); } wxArrayString SpringUnitSyncLib::GetMapDeps( int index ) { int count = GetMapArchiveCount( index ); wxArrayString ret; for ( int i = 0; i < count; i++ ) { ret.Add( GetMapArchiveName( i ) ); } return ret; } MapInfo SpringUnitSyncLib::GetMapInfoEx( int index, int version ) { if (m_get_map_description == NULL) { // old fetch method InitLib( m_get_map_info_ex ); const wxString& mapName = WX_STRINGC( m_get_map_name( index ) ); char tmpdesc[256]; char tmpauth[256]; MapInfo info; SpringMapInfo tm; tm.description = &tmpdesc[0]; tm.author = &tmpauth[0]; bool result = m_get_map_info_ex( mapName.mb_str( wxConvUTF8 ), &tm, version ); ASSERT_EXCEPTION( result, _T("Failed to get map infos") ); _ConvertSpringMapInfo( tm, info ); return info; } else { // new fetch method InitLib( m_get_map_description ) MapInfo info; info.description = WX_STRINGC(m_get_map_description( index)); info.tidalStrength = m_get_map_tidalStrength(index); info.gravity = m_get_map_gravity(index); const int resCount = m_get_map_resource_count(index); if (resCount > 0) { const int resourceIndex = 0; info.maxMetal = m_get_map_resource_max(index, resourceIndex); info.extractorRadius = m_get_map_resource_extractorRadius(index, resourceIndex); } else { info.maxMetal = 0.0f; info.extractorRadius = 0.0f; } info.minWind = m_get_map_windMin(index); info.maxWind = m_get_map_windMax(index); info.width = m_get_map_width(index); info.height = m_get_map_height(index); const int posCount = m_get_map_pos_count(index); for (int p = 0; p < posCount; ++p) { StartPos sp; sp.x = m_get_map_pos_x(index, p); sp.y = m_get_map_pos_z(index, p); info.positions.push_back(sp); } info.author = WX_STRINGC(m_get_map_author(index)); return info; } } wxImage SpringUnitSyncLib::GetMinimap( const wxString& mapFileName ) { InitLib( m_get_minimap ); const int miplevel = 0; // miplevel should not be 10 ffs const int width = 1024 >> miplevel; const int height = 1024 >> miplevel; wxLogMessage( _T("Minimap: %s"), mapFileName.c_str() ); // this unitsync call returns a pointer to a static buffer unsigned short* colours = (unsigned short*)m_get_minimap( mapFileName.mb_str(wxConvUTF8), miplevel ); ASSERT_EXCEPTION( colours, _T("Get minimap failed") ); typedef unsigned char uchar; wxImage minimap(width, height, false); uchar* true_colours = minimap.GetData(); for ( int i = 0; i < width*height; i++ ) { true_colours[(i*3) ] = uchar( (( colours[i] >> 11 )/31.0)*255.0 ); true_colours[(i*3)+1] = uchar( (( (colours[i] >> 5) & 63 )/63.0)*255.0 ); true_colours[(i*3)+2] = uchar( (( colours[i] & 31 )/31.0)*255.0 ); } return minimap; } wxImage SpringUnitSyncLib::GetMetalmap( const wxString& mapFileName ) { InitLib( m_get_infomap_size ); // assume GetInfoMap is available too wxLogMessage( _T("Metalmap: %s"), mapFileName.c_str() ); int width = 0, height = 0, retval; retval = m_get_infomap_size(mapFileName.mb_str(wxConvUTF8), "metal", &width, &height); ASSERT_EXCEPTION( retval != 0 && width * height != 0, _T("Get metalmap size failed") ); typedef unsigned char uchar; wxImage metalmap(width, height, false); LSL::Util::uninitialized_array grayscale(width * height); uchar* true_colours = metalmap.GetData(); retval = m_get_infomap(mapFileName.mb_str(wxConvUTF8), "metal", grayscale, 1 /*byte per pixel*/); ASSERT_EXCEPTION( retval != 0, _T("Get metalmap failed") ); for ( int i = 0; i < width*height; i++ ) { true_colours[(i*3) ] = 0; true_colours[(i*3)+1] = grayscale[i]; true_colours[(i*3)+2] = 0; } return metalmap; } wxImage SpringUnitSyncLib::GetHeightmap( const wxString& mapFileName ) { InitLib( m_get_infomap_size ); // assume GetInfoMap is available too wxLogMessage( _T("Heightmap: %s"), mapFileName.c_str() ); int width = 0, height = 0, retval; retval = m_get_infomap_size(mapFileName.mb_str(wxConvUTF8), "height", &width, &height); ASSERT_EXCEPTION( retval != 0 && width * height != 0, _T("Get heightmap size failed") ); typedef unsigned char uchar; typedef unsigned short ushort; wxImage heightmap(width, height, false); LSL::Util::uninitialized_array grayscale(width * height); uchar* true_colours = heightmap.GetData(); retval = m_get_infomap(mapFileName.mb_str(wxConvUTF8), "height", grayscale, 2 /*byte per pixel*/); ASSERT_EXCEPTION( retval != 0, _T("Get heightmap failed") ); // the height is mapped to this "palette" of colors // the colors are linearly interpolated const uchar points[][3] = { { 0, 0, 0 }, { 0, 0, 255 }, { 0, 255, 255 }, { 0, 255, 0 }, { 255, 255, 0 }, { 255, 0, 0 }, }; const int numPoints = sizeof(points) / sizeof(points[0]); // find range of values present in the height data returned by unitsync int min = 65536; int max = 0; for ( int i = 0; i < width*height; i++ ) { if (grayscale[i] < min) min = grayscale[i]; if (grayscale[i] > max) max = grayscale[i]; } // prevent division by zero -- heightmap wouldn't contain any information anyway if (min == max) return wxImage( 1, 1 ); // perform the mapping from 16 bit grayscale to 24 bit true colour const double range = max - min + 1; for ( int i = 0; i < width*height; i++ ) { const double value = (grayscale[i] - min) / (range / (numPoints - 1)); const int idx1 = int(value); const int idx2 = idx1 + 1; const int t = int(256.0 * (value - std::floor(value))); //assert(idx1 >= 0 && idx1 < numPoints-1); //assert(idx2 >= 1 && idx2 < numPoints); //assert(t >= 0 && t <= 255); for ( int j = 0; j < 3; ++j) true_colours[(i*3)+j] = (points[idx1][j] * (255 - t) + points[idx2][j] * t) / 255; } return heightmap; } wxString SpringUnitSyncLib::GetPrimaryModChecksum( int index ) { InitLib( m_get_mod_checksum ); return TowxString( (unsigned int)m_get_mod_checksum( index ) ); } int SpringUnitSyncLib::GetPrimaryModIndex( const wxString& modName ) { InitLib( m_get_mod_index ); return m_get_mod_index( modName.mb_str( wxConvUTF8 ) ); } wxString SpringUnitSyncLib::GetPrimaryModName( int index ) { InitLib( m_get_mod_name ); return WX_STRINGC( m_get_mod_name( index ) ); } int SpringUnitSyncLib::GetPrimaryModCount() { InitLib( m_get_mod_count ); return m_get_mod_count(); } wxString SpringUnitSyncLib::GetPrimaryModArchive( int index ) { InitLib( m_get_mod_archive ); UNITSYNC_EXCEPTION( m_get_mod_count, _T("Function was not in unitsync library.") ); int count = m_get_mod_count(); UNITSYNC_EXCEPTION( index < count, _T("index out of bounds") ); return WX_STRINGC( m_get_mod_archive( index ) ); } wxString SpringUnitSyncLib::GetPrimaryModShortName( int index ) { InitLib( m_get_primary_mod_short_name ); return WX_STRINGC( m_get_primary_mod_short_name( index ) ); } wxString SpringUnitSyncLib::GetPrimaryModVersion( int index ) { InitLib( m_get_primary_mod_version ); return WX_STRINGC( m_get_primary_mod_version( index ) ); } wxString SpringUnitSyncLib::GetPrimaryModMutator( int index ) { InitLib( m_get_primary_mod_mutator ); return WX_STRINGC( m_get_primary_mod_mutator( index ) ); } wxString SpringUnitSyncLib::GetPrimaryModGame( int index ) { InitLib( m_get_primary_mod_game ); return WX_STRINGC( m_get_primary_mod_game( index ) ); } wxString SpringUnitSyncLib::GetPrimaryModShortGame( int index ) { InitLib( m_get_primary_mod_short_game ); return WX_STRINGC( m_get_primary_mod_short_game( index ) ); } wxString SpringUnitSyncLib::GetPrimaryModDescription( int index ) { InitLib( m_get_primary_mod_description ); return WX_STRINGC( m_get_primary_mod_description( index ) ); } int SpringUnitSyncLib::GetPrimaryModArchiveCount( int index ) { InitLib( m_get_primary_mod_archive_count ); return m_get_primary_mod_archive_count( index ); } wxString SpringUnitSyncLib::GetPrimaryModArchiveList( int arnr ) { InitLib( m_get_primary_mod_archive_list ); return WX_STRINGC( m_get_primary_mod_archive_list( arnr ) ); } wxString SpringUnitSyncLib::GetPrimaryModChecksumFromName( const wxString& name ) { InitLib( m_get_primary_mod_checksum_from_name ); return TowxString( (unsigned int)m_get_primary_mod_checksum_from_name( name.mb_str( wxConvUTF8 ) ) ); } wxArrayString SpringUnitSyncLib::GetModDeps( int index ) { int count = GetPrimaryModArchiveCount( index ); wxArrayString ret; for ( int i = 0; i < count; i++ ) { ret.Add( GetPrimaryModArchiveList( i ) ); } return ret; } wxArrayString SpringUnitSyncLib::GetSides( const wxString& modName ) { InitLib( m_get_side_count ); UNITSYNC_EXCEPTION( m_get_side_name, _T("Function was not in unitsync library.") ) _SetCurrentMod( modName ); int count = m_get_side_count(); wxArrayString ret; for ( int i = 0; i < count; i ++ ) ret.Add( WX_STRINGC( m_get_side_name( i ) ) ); return ret; } void SpringUnitSyncLib::AddAllArchives( const wxString& root ) { InitLib( m_add_all_archives ); m_add_all_archives( root.mb_str() ); } wxString SpringUnitSyncLib::GetFullUnitName( int index ) { InitLib( m_get_unit_full_name ); return WX_STRINGC( m_get_unit_full_name( index ) ); } wxString SpringUnitSyncLib::GetUnitName( int index ) { InitLib( m_get_unit_name ); return WX_STRINGC( m_get_unit_name( index ) ); } int SpringUnitSyncLib::GetUnitCount() { InitLib( m_get_unit_count ); return m_get_unit_count(); } int SpringUnitSyncLib::ProcessUnitsNoChecksum() { InitLib( m_proc_units_nocheck ); return m_proc_units_nocheck(); } wxArrayString SpringUnitSyncLib::FindVFSCommon( int handle) { wxArrayString ret; //thanks to assbars awesome edit we now get different invalid values from init and find //error in init is -1, error in find 0 if ( handle != -1 ) { do { char buffer[1025]; handle = m_find_files_vfs( handle, &buffer[0], 1024 ); buffer[1024] = 0; ret.Add( WX_STRINGC( &buffer[0] ) ); }while ( handle ); } return ret; } wxArrayString SpringUnitSyncLib::DirListVFS( const wxString& path, const wxString& patterns, const wxString& modes ) { InitLib( m_find_files_vfs ); UNITSYNC_EXCEPTION( m_init_dirlist_vfs, _T("Function was not in unitsync library.") ); int handle = m_init_dirlist_vfs( path.mb_str(wxConvUTF8), patterns.mb_str(wxConvUTF8), modes.mb_str(wxConvUTF8) ); return FindVFSCommon(handle); } wxArrayString SpringUnitSyncLib::SubDirsVFS( const wxString& path, const wxString& patterns, const wxString& modes ) { InitLib( m_find_files_vfs ); UNITSYNC_EXCEPTION( m_init_subdirs_vfs, _T("Function was not in unitsync library.") ); int handle = m_init_subdirs_vfs( path.mb_str(wxConvUTF8), patterns.mb_str(wxConvUTF8), modes.mb_str(wxConvUTF8) ); return FindVFSCommon(handle); } wxArrayString SpringUnitSyncLib::FindFilesVFS( const wxString& name ) { InitLib( m_find_files_vfs ); UNITSYNC_EXCEPTION( m_init_find_vfs, _T("Function was not in unitsync library.") ); int handle = m_init_find_vfs( name.mb_str(wxConvUTF8) ); return FindVFSCommon(handle); } int SpringUnitSyncLib::OpenFileVFS( const wxString& name ) { InitLib( m_open_file_vfs ); return m_open_file_vfs( name.mb_str( wxConvUTF8 ) ); } int SpringUnitSyncLib::FileSizeVFS( int handle ) { InitLib( m_file_size_vfs ); return m_file_size_vfs( handle ); } int SpringUnitSyncLib::ReadFileVFS( int handle, void* buffer, int bufferLength ) { InitLib( m_read_file_vfs ); return m_read_file_vfs( handle, buffer, bufferLength ); } void SpringUnitSyncLib::CloseFileVFS( int handle ) { InitLib( m_close_file_vfs ); m_close_file_vfs( handle ); } unsigned int SpringUnitSyncLib::GetValidMapCount( const wxString& modname ) { InitLib( m_get_mod_valid_map_count ); _SetCurrentMod( modname ); return m_get_mod_valid_map_count(); } wxString SpringUnitSyncLib::GetValidMapName( unsigned int MapIndex ) { InitLib( m_get_valid_map ); return WX_STRINGC( m_get_valid_map( MapIndex ) ); } int SpringUnitSyncLib::GetMapOptionCount( const wxString& name ) { InitLib( m_get_map_option_count ); ASSERT_EXCEPTION( !name.IsEmpty(), _T("passing void mapname to unitsync") ); return m_get_map_option_count( name.mb_str( wxConvUTF8 ) ); } int SpringUnitSyncLib::GetCustomOptionCount( const wxString& archive_name, const wxString& filename ) { InitLib( m_get_custom_option_count ); ASSERT_EXCEPTION( !archive_name.IsEmpty(), _T("passing void archive_name to unitsync") ); _RemoveAllArchives(); m_add_all_archives( archive_name.mb_str( wxConvUTF8 ) ); return m_get_custom_option_count( filename.mb_str( wxConvUTF8 ) ); } int SpringUnitSyncLib::GetModOptionCount( const wxString& name ) { InitLib( m_get_mod_option_count ); ASSERT_EXCEPTION( !name.IsEmpty(), _T("passing void modname to unitsync") ); _SetCurrentMod( name ); return m_get_mod_option_count(); } int SpringUnitSyncLib::GetAIOptionCount( const wxString& modname, int aiIndex ) { InitLib( m_get_skirmish_ai_option_count ); _SetCurrentMod( modname ); ASSERT_EXCEPTION( m_get_skirmish_ai_count , _T("Function was not in unitsync library.") ); UNITSYNC_EXCEPTION( ( aiIndex >= 0 ) && ( aiIndex < m_get_skirmish_ai_count() ), _T("aiIndex out of bounds") ); return m_get_skirmish_ai_option_count( aiIndex ); } wxString SpringUnitSyncLib::GetOptionKey( int optIndex ) { InitLib( m_get_option_key ); return WX_STRINGC( m_get_option_key( optIndex ) ); } wxString SpringUnitSyncLib::GetOptionName( int optIndex ) { InitLib( m_get_option_name ); return WX_STRINGC( m_get_option_name( optIndex ) ); } wxString SpringUnitSyncLib::GetOptionDesc( int optIndex ) { InitLib( m_get_option_desc ); return WX_STRINGC( m_get_option_desc( optIndex ) ); } wxString SpringUnitSyncLib::GetOptionSection( int optIndex ) { InitLib( m_get_option_section ); return WX_STRINGC( m_get_option_section( optIndex ) ); } wxString SpringUnitSyncLib::GetOptionStyle( int optIndex ) { InitLib( m_get_option_style ); return WX_STRINGC( m_get_option_style( optIndex ) ); } int SpringUnitSyncLib::GetOptionType( int optIndex ) { InitLib( m_get_option_type ); return m_get_option_type( optIndex ); } int SpringUnitSyncLib::GetOptionBoolDef( int optIndex ) { InitLib( m_get_option_bool_def ); return m_get_option_bool_def( optIndex ); } float SpringUnitSyncLib::GetOptionNumberDef( int optIndex ) { InitLib( m_get_option_number_def ); return m_get_option_number_def( optIndex ); } float SpringUnitSyncLib::GetOptionNumberMin( int optIndex ) { InitLib( m_get_option_number_min ); return m_get_option_number_min( optIndex ); } float SpringUnitSyncLib::GetOptionNumberMax( int optIndex ) { InitLib( m_get_option_number_max ); return m_get_option_number_max( optIndex ); } float SpringUnitSyncLib::GetOptionNumberStep( int optIndex ) { InitLib( m_get_option_number_step ); return m_get_option_number_step( optIndex ); } wxString SpringUnitSyncLib::GetOptionStringDef( int optIndex ) { InitLib( m_get_option_string_def ); return WX_STRINGC( m_get_option_string_def( optIndex ) ); } int SpringUnitSyncLib::GetOptionStringMaxLen( int optIndex ) { InitLib( m_get_option_string_max_len ); return m_get_option_string_max_len( optIndex ); } int SpringUnitSyncLib::GetOptionListCount( int optIndex ) { InitLib( m_get_option_list_count ); return m_get_option_list_count( optIndex ); } wxString SpringUnitSyncLib::GetOptionListDef( int optIndex ) { InitLib( m_get_option_list_def ); return WX_STRINGC( m_get_option_list_def( optIndex ) ); } wxString SpringUnitSyncLib::GetOptionListItemKey( int optIndex, int itemIndex ) { InitLib( m_get_option_list_item_key ); return WX_STRINGC( m_get_option_list_item_key( optIndex, itemIndex ) ); } wxString SpringUnitSyncLib::GetOptionListItemName( int optIndex, int itemIndex ) { InitLib( m_get_option_list_item_name ); return WX_STRINGC( m_get_option_list_item_name( optIndex, itemIndex ) ); } wxString SpringUnitSyncLib::GetOptionListItemDesc( int optIndex, int itemIndex ) { InitLib( m_get_option_list_item_desc ); return WX_STRINGC( m_get_option_list_item_desc( optIndex, itemIndex ) ); } int SpringUnitSyncLib::OpenArchive( const wxString& name ) { InitLib( m_open_archive ); return m_open_archive( name.mb_str( wxConvUTF8 ) ); } void SpringUnitSyncLib::AddArchive(const wxString &name) { InitLib( m_add_archive ); m_add_archive( name.mb_str( wxConvUTF8 ) ); } void SpringUnitSyncLib::CloseArchive( int archive ) { InitLib( m_close_archive ); m_close_archive( archive ); } int SpringUnitSyncLib::FindFilesArchive( int archive, int cur, wxString& nameBuf ) { InitLib( m_find_Files_archive ); char buffer[1025]; int size = 1024; bool ret = m_find_Files_archive( archive, cur, &buffer[0], &size ); buffer[1024] = 0; nameBuf = WX_STRINGC( &buffer[0] ); return ret; } int SpringUnitSyncLib::OpenArchiveFile( int archive, const wxString& name ) { InitLib( m_open_archive_file ); return m_open_archive_file( archive, name.mb_str( wxConvUTF8 ) ); } int SpringUnitSyncLib::ReadArchiveFile( int archive, int handle, void* buffer, int numBytes) { InitLib( m_read_archive_file ); return m_read_archive_file( archive, handle, buffer, numBytes ); } void SpringUnitSyncLib::CloseArchiveFile( int archive, int handle ) { InitLib( m_close_archive_file ); m_close_archive_file( archive, handle ); } int SpringUnitSyncLib::SizeArchiveFile( int archive, int handle ) { InitLib( m_size_archive_file ); return m_size_archive_file( archive, handle ); } wxString SpringUnitSyncLib::GetArchivePath( const wxString& name ) { InitLib( m_get_archive_path ); return WX_STRINGC( m_get_archive_path( name.mb_str( wxConvUTF8 ) ) ); } int SpringUnitSyncLib::GetSpringConfigInt( const wxString& key, int defValue ) { InitLib( m_get_spring_config_int ); return m_get_spring_config_int( key.mb_str( wxConvUTF8 ), defValue ); } wxString SpringUnitSyncLib::GetSpringConfigString( const wxString& key, const wxString& defValue ) { InitLib( m_get_spring_config_string ); return WX_STRINGC( m_get_spring_config_string( key.mb_str( wxConvUTF8 ), defValue.mb_str( wxConvUTF8 ) ) ); } float SpringUnitSyncLib::GetSpringConfigFloat( const wxString& key, const float defValue ) { InitLib( m_get_spring_config_float ); return m_get_spring_config_float( key.mb_str( wxConvUTF8 ), defValue ); } void SpringUnitSyncLib::SetSpringConfigString( const wxString& key, const wxString& value ) { InitLib( m_set_spring_config_string ); m_set_spring_config_string( key.mb_str( wxConvUTF8 ), value.mb_str( wxConvUTF8 ) ); } void SpringUnitSyncLib::SetSpringConfigInt( const wxString& key, int value ) { InitLib( m_set_spring_config_int ); m_set_spring_config_int( key.mb_str( wxConvUTF8 ), value ); } void SpringUnitSyncLib::SetSpringConfigFloat( const wxString& key, const float value ) { InitLib( m_set_spring_config_float ); m_set_spring_config_float( key.mb_str( wxConvUTF8 ), value ); } int SpringUnitSyncLib::GetSkirmishAICount( const wxString& modname ) { InitLib( m_get_skirmish_ai_count ); _SetCurrentMod( modname ); return m_get_skirmish_ai_count(); } wxArrayString SpringUnitSyncLib::GetAIInfo( int aiIndex ) { InitLib( m_get_skirmish_ai_count ); UNITSYNC_EXCEPTION( m_get_skirmish_ai_info_count, _T("Function was not in unitsync library.") ); UNITSYNC_EXCEPTION( m_get_skirmish_ai_info_description, _T("Function was not in unitsync library.") ); UNITSYNC_EXCEPTION( m_get_skirmish_ai_info_key, _T("Function was not in unitsync library.") ); UNITSYNC_EXCEPTION( m_get_skirmish_ai_info_value, _T("Function was not in unitsync library.") ); wxArrayString ret; UNITSYNC_EXCEPTION( ( aiIndex >= 0 ) && ( aiIndex < m_get_skirmish_ai_count() ), _T("aiIndex out of bounds") ); int infoCount = m_get_skirmish_ai_info_count( aiIndex ); for( int i = 0; i < infoCount; i++ ) { ret.Add( WX_STRINGC( m_get_skirmish_ai_info_key( i ) ) ); ret.Add( WX_STRINGC( m_get_skirmish_ai_info_value( i ) ) ); ret.Add( WX_STRINGC( m_get_skirmish_ai_info_description( i ) ) ); } return ret; } wxString SpringUnitSyncLib::GetArchiveChecksum( const wxString& VFSPath ) { InitLib( m_get_archive_checksum ); return TowxString( m_get_archive_checksum( VFSPath.mb_str() ) ); } /// lua parser void SpringUnitSyncLib::CloseParser() { InitLib( m_parser_close ); m_parser_close(); } bool SpringUnitSyncLib::OpenParserFile( const wxString& filename, const wxString& filemodes, const wxString& accessModes ) { InitLib( m_parser_open_file ); return m_parser_open_file( filename.mb_str(), filemodes.mb_str(), accessModes.mb_str() ); } bool SpringUnitSyncLib::OpenParserSource( const wxString& source, const wxString& accessModes ) { InitLib( m_parser_open_source ); return m_parser_open_source( source.mb_str(), accessModes.mb_str() ); } bool SpringUnitSyncLib::ParserExecute() { InitLib( m_parser_execute ); return m_parser_execute(); } wxString SpringUnitSyncLib::ParserErrorLog() { InitLib( m_parser_error_log ); return WX_STRINGC( m_parser_error_log() ); } void SpringUnitSyncLib::ParserAddTable( int key, bool override ) { InitLib( m_parser_add_table_int ); m_parser_add_table_int( key, override ); } void SpringUnitSyncLib::ParserAddTable( const wxString& key, bool override ) { InitLib( m_parser_add_table_string ); m_parser_add_table_string( key.mb_str(), override ); } void SpringUnitSyncLib::ParserEndTable() { InitLib( m_parser_end_table ); m_parser_end_table(); } void SpringUnitSyncLib::ParserAddTableValue( int key, int val ) { InitLib( m_parser_add_int_key_int_value ); m_parser_add_int_key_int_value( key, val ); } void SpringUnitSyncLib::ParserAddTableValue( const wxString& key, int val ) { InitLib( m_parser_add_string_key_int_value ); m_parser_add_string_key_int_value( key.mb_str(), val ); } void SpringUnitSyncLib::ParserAddTableValue( int key, bool val ) { InitLib( m_parser_add_int_key_int_value ); m_parser_add_int_key_int_value( key, val ); } void SpringUnitSyncLib::ParserAddTableValue( const wxString& key, bool val ) { InitLib( m_parser_add_string_key_int_value ); m_parser_add_string_key_int_value( key.mb_str(), val ); } void SpringUnitSyncLib::ParserAddTableValue( int key, const wxString& val ) { InitLib( m_parser_add_int_key_string_value ); m_parser_add_int_key_string_value( key, val.mb_str() ); } void SpringUnitSyncLib::ParserAddTableValue( const wxString& key, const wxString& val ) { InitLib( m_parser_add_string_key_string_value ); m_parser_add_string_key_string_value( key.mb_str(), val.mb_str() ); } void SpringUnitSyncLib::ParserAddTableValue( int key, float val ) { InitLib( m_parser_add_int_key_float_value ); m_parser_add_int_key_float_value( key, val ); } void SpringUnitSyncLib::ParserAddTableValue( const wxString& key, float val ) { InitLib( m_parser_add_string_key_float_value ); m_parser_add_string_key_float_value( key.mb_str(), val ); } bool SpringUnitSyncLib::ParserGetRootTable() { InitLib( m_parser_root_table ); return m_parser_root_table(); } bool SpringUnitSyncLib::ParserGetRootTableExpression( const wxString& exp ) { InitLib( m_parser_root_table_expression ); return m_parser_root_table_expression( exp.mb_str() ); } bool SpringUnitSyncLib::ParserGetSubTableInt( int key ) { InitLib( m_parser_sub_table_int ); return m_parser_sub_table_int( key ); } bool SpringUnitSyncLib::ParserGetSubTableString( const wxString& key ) { InitLib( m_parser_sub_table_string ); return m_parser_sub_table_string( key.mb_str() ); } bool SpringUnitSyncLib::ParserGetSubTableInt( const wxString& exp ) { InitLib( m_parser_sub_table_expression ); return m_parser_sub_table_expression( exp.mb_str() ); } void SpringUnitSyncLib::ParserPopTable() { InitLib( m_parser_pop_table ); m_parser_pop_table(); } bool SpringUnitSyncLib::ParserKeyExists( int key ) { InitLib( m_parser_key_int_exists ); return m_parser_key_int_exists( key ); } bool SpringUnitSyncLib::ParserKeyExists( const wxString& key ) { InitLib( m_parser_key_string_exists ); return m_parser_key_string_exists( key.mb_str() ); } int SpringUnitSyncLib::ParserGetKeyType( int key ) { InitLib( m_parser_int_key_get_type ); return m_parser_int_key_get_type( key ); } int SpringUnitSyncLib::ParserGetKeyType( const wxString& key ) { InitLib( m_parser_string_key_get_type ); return m_parser_string_key_get_type( key.mb_str() ); } int SpringUnitSyncLib::ParserGetIntKeyListCount() { InitLib( m_parser_int_key_get_list_count ); return m_parser_int_key_get_list_count(); } int SpringUnitSyncLib::ParserGetIntKeyListEntry( int index ) { InitLib( m_parser_int_key_get_list_entry ); return m_parser_int_key_get_list_entry( index ); } int SpringUnitSyncLib::ParserGetStringKeyListCount() { InitLib( m_parser_string_key_get_list_count ); return m_parser_string_key_get_list_count(); } int SpringUnitSyncLib::ParserGetStringKeyListEntry( int index ) { InitLib( m_parser_int_key_get_list_entry ); return m_parser_int_key_get_list_entry( index ); } int SpringUnitSyncLib::GetKeyValue( int key, int defval ) { InitLib( m_parser_int_key_get_int_value ); return m_parser_int_key_get_int_value( key, defval ); } bool SpringUnitSyncLib::GetKeyValue( int key, bool defval ) { InitLib( m_parser_int_key_get_bool_value ); return m_parser_int_key_get_bool_value( key, defval ); } wxString SpringUnitSyncLib::GetKeyValue( int key, const wxString& defval ) { InitLib( m_parser_int_key_get_string_value ); return WX_STRINGC( m_parser_int_key_get_string_value( key, defval.mb_str() ) ); } float SpringUnitSyncLib::GetKeyValue( int key, float defval ) { InitLib( m_parser_int_key_get_float_value ); return m_parser_int_key_get_float_value( key, defval ); } int SpringUnitSyncLib::GetKeyValue( const wxString& key, int defval ) { InitLib( m_parser_string_key_get_int_value ); return m_parser_string_key_get_int_value( key.mb_str(), defval ); } bool SpringUnitSyncLib::GetKeyValue( const wxString& key, bool defval ) { InitLib( m_parser_string_key_get_bool_value ); return m_parser_string_key_get_bool_value( key.mb_str(), defval ); } wxString SpringUnitSyncLib::GetKeyValue( const wxString& key, const wxString& defval ) { InitLib( m_parser_string_key_get_string_value ); return WX_STRINGC( m_parser_string_key_get_string_value( key.mb_str(), defval.mb_str() ) ); } float SpringUnitSyncLib::GetKeyValue( const wxString& key, float defval ) { InitLib( m_parser_string_key_get_float_value ); return m_parser_string_key_get_float_value( key.mb_str(), defval ); } springlobby-0.169/src/springunitsynclib.h0000600000176000000410000007452512105760300022162 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SPRINGUNITSYNCLIB_H #define SPRINGLOBBY_HEADERGUARD_SPRINGUNITSYNCLIB_H #include #include #include #include "nonportable.h" #include "springunitsync.h" #include "utils/mixins.hh" class wxString; class wxImage; struct SpringMapInfo; class wxDynamicLibrary; class unitsync_assert : public std::runtime_error { public: unitsync_assert(std::string msg) : std::runtime_error(msg) {} }; #define UNITSYNC_EXCEPTION(cond,msg) if(!(cond))\ {wxLogMessage(_T("unitsync runtime assertion ( %s:%d ): %s"), TowxString(__FILE__).c_str(),__LINE__ , wxString(msg).c_str() );throw unitsync_assert(std::string(wxString(msg).mb_str()));} struct SpringMapInfo { char* description; int tidalStrength; int gravity; float maxMetal; int extractorRadius; int minWind; int maxWind; int width; int height; int posCount; StartPos positions[16]; char* author; }; /** * \defgroup DllPointerTypes Pointer types used with the unitsync library. * \TODO move from global namespace */ /** @{ */ typedef const char* (USYNC_CALL_CONV *GetSpringVersionPtr)(); typedef int (USYNC_CALL_CONV *InitPtr)(bool, int); typedef void (USYNC_CALL_CONV *UnInitPtr)(); typedef const char* (USYNC_CALL_CONV *GetNextErrorPtr)(); typedef const char* (USYNC_CALL_CONV *GetWritableDataDirectoryPtr)(); typedef const char* (USYNC_CALL_CONV *GetDataDirectoryPtr)(int); typedef int (USYNC_CALL_CONV *GetDataDirectoryCountPtr)(); typedef int (USYNC_CALL_CONV *GetMapCountPtr)(); typedef unsigned int (USYNC_CALL_CONV *GetMapChecksumPtr)(int); typedef const char* (USYNC_CALL_CONV *GetMapNamePtr)(int); typedef const char* (USYNC_CALL_CONV *GetMapDescriptionPtr)(int); typedef const char* (USYNC_CALL_CONV *GetMapAuthorPtr)(int); typedef int (USYNC_CALL_CONV *GetMapWidthPtr)(int); typedef int (USYNC_CALL_CONV *GetMapHeightPtr)(int); typedef int (USYNC_CALL_CONV *GetMapTidalStrengthPtr)(int); typedef int (USYNC_CALL_CONV *GetMapWindMinPtr)(int); typedef int (USYNC_CALL_CONV *GetMapWindMaxPtr)(int); typedef int (USYNC_CALL_CONV *GetMapGravityPtr)(int); typedef int (USYNC_CALL_CONV *GetMapResourceCountPtr)(int); typedef const char* (USYNC_CALL_CONV *GetMapResourceNamePtr)(int, int); typedef float (USYNC_CALL_CONV *GetMapResourceMaxPtr)(int, int); typedef int (USYNC_CALL_CONV *GetMapResourceExtractorRadiusPtr)(int, int); typedef int (USYNC_CALL_CONV *GetMapPosCountPtr)(int); typedef float (USYNC_CALL_CONV *GetMapPosXPtr)(int, int); typedef float (USYNC_CALL_CONV *GetMapPosZPtr)(int, int); typedef int (USYNC_CALL_CONV *GetMapInfoExPtr)(const char*, SpringMapInfo*, int); typedef void* (USYNC_CALL_CONV *GetMinimapPtr)(const char*, int); typedef int (USYNC_CALL_CONV *GetInfoMapSizePtr)(const char*, const char*, int*, int*); typedef int (USYNC_CALL_CONV *GetInfoMapPtr)(const char*, const char*, void*, int); typedef unsigned int (USYNC_CALL_CONV *GetPrimaryModChecksumPtr)(int); typedef int (USYNC_CALL_CONV *GetPrimaryModIndexPtr)(const char*); typedef const char* (USYNC_CALL_CONV *GetPrimaryModNamePtr)(int); typedef int (USYNC_CALL_CONV *GetPrimaryModCountPtr)(); typedef const char* (USYNC_CALL_CONV *GetPrimaryModArchivePtr)(int); typedef int (USYNC_CALL_CONV *GetSideCountPtr)(); typedef const char* (USYNC_CALL_CONV *GetSideNamePtr)(int); typedef void (USYNC_CALL_CONV *AddAllArchivesPtr)(const char*); typedef void (USYNC_CALL_CONV *RemoveAllArchivesPtr)(); typedef const char * (USYNC_CALL_CONV *GetFullUnitNamePtr)(int); typedef const char * (USYNC_CALL_CONV *GetUnitNamePtr)(int); typedef int (USYNC_CALL_CONV *GetUnitCountPtr)(); typedef int (USYNC_CALL_CONV *ProcessUnitsNoChecksumPtr)(); typedef int (USYNC_CALL_CONV *InitFindVFSPtr)(const char*); typedef int (USYNC_CALL_CONV *FindFilesVFSPtr)(int, char*, int); typedef int (USYNC_CALL_CONV *OpenFileVFSPtr)(const char*); typedef int (USYNC_CALL_CONV *FileSizeVFSPtr)(int); typedef int (USYNC_CALL_CONV *ReadFileVFSPtr)(int, void*, int); typedef void (USYNC_CALL_CONV *CloseFileVFSPtr)(int); typedef int (USYNC_CALL_CONV *InitDirListVFSPtr)(const char*, const char*, const char*); typedef int (USYNC_CALL_CONV *InitSubDirsVFSPtr)(const char*, const char*, const char*); typedef void (USYNC_CALL_CONV *SetSpringConfigFilePtr)(const char*); typedef const char * (USYNC_CALL_CONV *GetSpringConfigFilePtr)(); typedef int (USYNC_CALL_CONV *GetSpringConfigIntPtr)(const char*, int ); typedef const char* (USYNC_CALL_CONV *GetSpringConfigStringPtr)(const char*, const char* ); typedef float (USYNC_CALL_CONV *GetSpringConfigFloatPtr)(const char*, float ); typedef void (USYNC_CALL_CONV *SetSpringConfigStringPtr)(const char*, const char* ); typedef void (USYNC_CALL_CONV *SetSpringConfigIntPtr)(const char*, int ); typedef void (USYNC_CALL_CONV *SetSpringConfigFloatPtr)(const char*, float ); typedef int (USYNC_CALL_CONV *ProcessUnitsPtr)(void); typedef void (USYNC_CALL_CONV *AddArchivePtr)(const char* name); typedef unsigned int (USYNC_CALL_CONV *GetArchiveChecksumPtr)(const char* arname); typedef const char* (USYNC_CALL_CONV *GetArchivePathPtr)(const char* arname); typedef int (USYNC_CALL_CONV *GetMapArchiveCountPtr)(const char* mapName); typedef const char* (USYNC_CALL_CONV *GetMapArchiveNamePtr)(int index); typedef unsigned int (USYNC_CALL_CONV *GetMapChecksumPtr)(int index); typedef int (USYNC_CALL_CONV *GetMapChecksumFromNamePtr)(const char* mapName); typedef const char* (USYNC_CALL_CONV *GetPrimaryModShortNamePtr)(int index); typedef const char* (USYNC_CALL_CONV *GetPrimaryModVersionPtr)(int index); typedef const char* (USYNC_CALL_CONV *GetPrimaryModMutatorPtr)(int index); typedef const char* (USYNC_CALL_CONV *GetPrimaryModGamePtr)(int index); typedef const char* (USYNC_CALL_CONV *GetPrimaryModShortGamePtr)(int index); typedef const char* (USYNC_CALL_CONV *GetPrimaryModDescriptionPtr)(int index); typedef const char* (USYNC_CALL_CONV *GetPrimaryModArchivePtr)(int index); typedef int (USYNC_CALL_CONV *GetPrimaryModArchiveCountPtr)(int index); typedef const char* (USYNC_CALL_CONV *GetPrimaryModArchiveListPtr)(int arnr); typedef unsigned int (USYNC_CALL_CONV *GetPrimaryModChecksumFromNamePtr)(const char* name); typedef unsigned int (USYNC_CALL_CONV *GetModValidMapCountPtr)(); typedef const char* (USYNC_CALL_CONV *GetModValidMapPtr)(int index); typedef int (USYNC_CALL_CONV *GetLuaAICountPtr)(); typedef const char* (USYNC_CALL_CONV *GetLuaAINamePtr)(int aiIndex); typedef const char* (USYNC_CALL_CONV *GetLuaAIDescPtr)(int aiIndex); typedef int (USYNC_CALL_CONV *GetMapOptionCountPtr)(const char* name); typedef int (USYNC_CALL_CONV *GetCustomOptionCountPtr)(const char* name); typedef int (USYNC_CALL_CONV *GetModOptionCountPtr)(); typedef int (USYNC_CALL_CONV *GetSkirmishAIOptionCountPtr)(int index); typedef const char* (USYNC_CALL_CONV *GetOptionKeyPtr)(int optIndex); typedef const char* (USYNC_CALL_CONV *GetOptionNamePtr)(int optIndex); typedef const char* (USYNC_CALL_CONV *GetOptionDescPtr)(int optIndex); typedef const char* (USYNC_CALL_CONV *GetOptionSectionPtr)(int optIndex); typedef const char* (USYNC_CALL_CONV *GetOptionStylePtr)(int optIndex); typedef int (USYNC_CALL_CONV *GetOptionTypePtr)(int optIndex); typedef int (USYNC_CALL_CONV *GetOptionBoolDefPtr)(int optIndex); typedef float (USYNC_CALL_CONV *GetOptionNumberDefPtr)(int optIndex); typedef float (USYNC_CALL_CONV *GetOptionNumberMinPtr)(int optIndex); typedef float (USYNC_CALL_CONV *GetOptionNumberMaxPtr)(int optIndex); typedef float (USYNC_CALL_CONV *GetOptionNumberStepPtr)(int optIndex); typedef const char* (USYNC_CALL_CONV *GetOptionStringDefPtr)(int optIndex); typedef int (USYNC_CALL_CONV *GetOptionStringMaxLenPtr)(int optIndex); typedef int (USYNC_CALL_CONV *GetOptionListCountPtr)(int optIndex); typedef const char* (USYNC_CALL_CONV *GetOptionListDefPtr)(int optIndex); typedef const char* (USYNC_CALL_CONV *GetOptionListItemKeyPtr)(int optIndex, int itemIndex); typedef const char* (USYNC_CALL_CONV *GetOptionListItemNamePtr)(int optIndex, int itemIndex); typedef const char* (USYNC_CALL_CONV *GetOptionListItemDescPtr)(int optIndex, int itemIndex); typedef int (USYNC_CALL_CONV *OpenArchivePtr)(const char* name); typedef void (USYNC_CALL_CONV *CloseArchivePtr)(int archive); typedef int (USYNC_CALL_CONV *FindFilesArchivePtr)(int archive, int cur, char* nameBuf, int* size); typedef int (USYNC_CALL_CONV *OpenArchiveFilePtr)(int archive, const char* name); typedef int (USYNC_CALL_CONV *ReadArchiveFilePtr)(int archive, int handle, void* buffer, int numBytes); typedef void (USYNC_CALL_CONV *CloseArchiveFilePtr)(int archive, int handle); typedef int (USYNC_CALL_CONV *SizeArchiveFilePtr)(int archive, int handle); typedef int (USYNC_CALL_CONV *GetSkirmishAICountPtr)(); typedef int (USYNC_CALL_CONV *GetSkirmishAIInfoCountPtr)(int index); typedef const char* (USYNC_CALL_CONV *GetInfoKeyPtr)(int index); typedef const char* (USYNC_CALL_CONV *GetInfoValuePtr)(int index); typedef const char* (USYNC_CALL_CONV *GetInfoDescriptionPtr)(int index); /// Unitsync functions wrapping lua parser typedef void (USYNC_CALL_CONV *lpClosePtr)(); typedef int (USYNC_CALL_CONV *lpOpenFilePtr)(const char* filename, const char* fileModes, const char* accessModes); typedef int (USYNC_CALL_CONV *lpOpenSourcePtr)(const char* source, const char* accessModes); typedef int (USYNC_CALL_CONV *lpExecutePtr)(); typedef const char* (USYNC_CALL_CONV *lpErrorLogPtr)(); typedef void (USYNC_CALL_CONV *lpAddTableIntPtr)(int key, int override); typedef void (USYNC_CALL_CONV *lpAddTableStrPtr)(const char* key, int override); typedef void (USYNC_CALL_CONV *lpEndTablePtr)(); typedef void (USYNC_CALL_CONV *lpAddIntKeyIntValPtr)(int key, int val); typedef void (USYNC_CALL_CONV *lpAddStrKeyIntValPtr)(const char* key, int val); typedef void (USYNC_CALL_CONV *lpAddIntKeyBoolValPtr)(int key, int val); typedef void (USYNC_CALL_CONV *lpAddStrKeyBoolValPtr)(const char* key, int val); typedef void (USYNC_CALL_CONV *lpAddIntKeyFloatValPtr)(int key, float val); typedef void (USYNC_CALL_CONV *lpAddStrKeyFloatValPtr)(const char* key, float val); typedef void (USYNC_CALL_CONV *lpAddIntKeyStrValPtr)(int key, const char* val); typedef void (USYNC_CALL_CONV *lpAddStrKeyStrValPtr)(const char* key, const char* val); typedef int (USYNC_CALL_CONV *lpRootTablePtr)(); typedef int (USYNC_CALL_CONV *lpRootTableExprPtr)(const char* expr); typedef int (USYNC_CALL_CONV *lpSubTableIntPtr)(int key); typedef int (USYNC_CALL_CONV *lpSubTableStrPtr)(const char* key); typedef int (USYNC_CALL_CONV *lpSubTableExprPtr)(const char* expr); typedef void (USYNC_CALL_CONV *lpPopTablePtr)(); typedef int (USYNC_CALL_CONV *lpGetKeyExistsIntPtr)(int key); typedef int (USYNC_CALL_CONV *lpGetKeyExistsStrPtr)(const char* key); typedef int (USYNC_CALL_CONV *lpGetIntKeyTypePtr)(int key); typedef int (USYNC_CALL_CONV *lpGetStrKeyTypePtr)(const char* key); typedef int (USYNC_CALL_CONV *lpGetIntKeyListCountPtr)(); typedef int (USYNC_CALL_CONV *lpGetIntKeyListEntryPtr)(int index); typedef int (USYNC_CALL_CONV *lpGetStrKeyListCountPtr)(); typedef const char* (USYNC_CALL_CONV *lpGetStrKeyListEntryPtr)(int index); typedef int (USYNC_CALL_CONV *lpGetIntKeyIntValPtr)(int key, int defVal); typedef int (USYNC_CALL_CONV *lpGetStrKeyIntValPtr)(const char* key, int defVal); typedef int (USYNC_CALL_CONV *lpGetIntKeyBoolValPtr)(int key, int defVal); typedef int (USYNC_CALL_CONV *lpGetStrKeyBoolValPtr)(const char* key, int defVal); typedef float (USYNC_CALL_CONV *lpGetIntKeyFloatValPtr)(int key, float defVal); typedef float (USYNC_CALL_CONV *lpGetStrKeyFloatValPtr)(const char* key, float defVal); typedef const char* (USYNC_CALL_CONV *lpGetIntKeyStrValPtr)(int key, const char* defVal); typedef const char* (USYNC_CALL_CONV *lpGetStrKeyStrValPtr)(const char* key, const char* defVal); /** @} */ /** * Primitive class handeling the unitsync library. * * This class is - in a limited way - thread safe but may block execution * in case two threads use it at the same time. The thread safety ensures * there can never be multiple threads executing unitsync functions at the * same time. However, many unitsync functions use (hidden) global state, * so often there is a need for running multiple unitsync methods while * holding a single lock continuously. */ class SpringUnitSyncLib : public SL::NonCopyable { public: /** * Constructor. */ SpringUnitSyncLib(); /** * Destructor, unloads unitsync if loaded. */ ~SpringUnitSyncLib(); /** * Loads the unitsync library from path. * @param path path to the unitsync lib. * @param ForceConfigFilePath if set forces unitsync to use pointed config file, if empty leaves to spring's default * @see Unload(). * @note Throws runtime_error if load failed. */ void Load( const wxString& path, const wxString& ForceConfigFilePath ); /** * Unload the unitsync library. Does nothing if not loaded. * @see Load(). */ void Unload(); /** * Returns true if the library is loaded. */ bool IsLoaded() const; /** * Gets last error from unitsync library * @note throws unitsync_assert in case of error * @note this method should only be used after using directly an unitsync call to catch it's errors */ void AssertUnitsyncOk() const; /** * Get list of errors from unitsync library in an array */ wxArrayString GetUnitsyncErrors() const; bool VersionSupports( SpringUnitSync::GameFeature feature ) const; int GetModIndex( const wxString& name ); wxString GetSpringVersion(); /** * Loads unitsync from any number of paths in succession, * queries the Spring versions supported by these unitsyncs, * and returns those. * * This is done by a single function because this "transaction" * needs to hold the unitsync lock the entire time. */ std::map GetSpringVersionList(const std::map& usync_paths); wxString GetSpringDataDir(); int GetSpringDataDirCount(); wxString GetSpringDataDirByIndex( const int index ); wxString GetConfigFilePath(); int GetMapCount(); wxString GetMapChecksum( int index ); wxString GetMapName( int index ); int GetMapArchiveCount( int index ); wxString GetMapArchiveName( int arnr ); wxArrayString GetMapDeps( int index ); /** * @brief Get information about a map. * @param version will get author if >=1. * @note Throws assert_exception if unsuccessful. */ MapInfo GetMapInfoEx( int index, int version ); /** * @brief Get minimap. * @note Throws assert_exception if unsuccessful. */ wxImage GetMinimap( const wxString& mapFileName ); /** * @brief Get metalmap. * @note Throws assert_exception if unsuccessful. */ wxImage GetMetalmap( const wxString& mapFileName ); /** * @brief Get heightmap. * @note Throws assert_exception if unsuccesful. */ wxImage GetHeightmap( const wxString& mapFileName ); wxString GetPrimaryModChecksum( int index ); int GetPrimaryModIndex( const wxString& modName ); wxString GetPrimaryModName( int index ); int GetPrimaryModCount(); wxString GetPrimaryModArchive( int index ); wxString GetPrimaryModShortName( int index ); wxString GetPrimaryModVersion( int index ); wxString GetPrimaryModMutator( int index ); wxString GetPrimaryModGame( int index ); wxString GetPrimaryModShortGame( int index ); wxString GetPrimaryModDescription( int index ); int GetPrimaryModArchiveCount( int index ); wxString GetPrimaryModArchiveList( int arnr ); wxString GetPrimaryModChecksumFromName( const wxString& name ); wxArrayString GetModDeps( int index ); wxArrayString GetSides( const wxString& modName ); /** * Add all achives. * @note Not sure what this does, but adding the mod archive path to this when setting new mod seems to work :) */ void AddAllArchives( const wxString& root ); void SetCurrentMod( const wxString& modname ); void UnSetCurrentMod( ); wxString GetFullUnitName( int index ); wxString GetUnitName( int index ); int GetUnitCount(); int ProcessUnitsNoChecksum(); /** * Search for a file pattern. * @param the search patterns * @return wxarraystring of results */ wxArrayString FindFilesVFS( const wxString& name ); wxArrayString DirListVFS(const wxString& path , const wxString &pattern, const wxString &modes = _T("Mmb") ); wxArrayString SubDirsVFS(const wxString& path , const wxString &pattern, const wxString &modes = _T("Mmb") ); int OpenFileVFS( const wxString& name ); int FileSizeVFS( int handle ); int ReadFileVFS( int handle, void* buffer, int bufferLength ); void CloseFileVFS( int handle ); int GetLuaAICount( const wxString& modname ); wxString GetLuaAIName( int aiIndex ); wxString GetLuaAIDesc( int aiIndex ); unsigned int GetValidMapCount( const wxString& modname ); wxString GetValidMapName( unsigned int MapIndex ); int GetMapOptionCount( const wxString& name ); int GetCustomOptionCount( const wxString& modname, const wxString& filename ); int GetModOptionCount( const wxString& name ); int GetAIOptionCount( const wxString& modname, int index ); wxString GetOptionKey( int optIndex ); wxString GetOptionName( int optIndex ); wxString GetOptionDesc( int optIndex ); wxString GetOptionSection( int optIndex ); wxString GetOptionStyle( int optIndex ); int GetOptionType( int optIndex ); int GetOptionBoolDef( int optIndex ); float GetOptionNumberDef( int optIndex ); float GetOptionNumberMin( int optIndex ); float GetOptionNumberMax( int optIndex ); float GetOptionNumberStep( int optIndex ); wxString GetOptionStringDef( int optIndex ); int GetOptionStringMaxLen( int optIndex ); int GetOptionListCount( int optIndex ); wxString GetOptionListDef( int optIndex ); wxString GetOptionListItemKey( int optIndex, int itemIndex ); wxString GetOptionListItemName( int optIndex, int itemIndex ); wxString GetOptionListItemDesc( int optIndex, int itemIndex ); int OpenArchive( const wxString& name ); void AddArchive( const wxString& name ); void CloseArchive( int archive ); int FindFilesArchive( int archive, int cur, wxString& nameBuf ); int OpenArchiveFile( int archive, const wxString& name ); int ReadArchiveFile( int archive, int handle, void* buffer, int numBytes) ; void CloseArchiveFile( int archive, int handle ); int SizeArchiveFile( int archive, int handle ); wxString GetArchivePath( const wxString& name ); int GetSpringConfigInt( const wxString& key, int defValue ); wxString GetSpringConfigString( const wxString& key, const wxString& defValue ); float GetSpringConfigFloat( const wxString& key, const float defValue ); void SetSpringConfigString( const wxString& key, const wxString& value ); void SetSpringConfigInt( const wxString& key, int value ); void SetSpringConfigFloat( const wxString& key, const float value ); /// AI info int GetSkirmishAICount( const wxString& modname ); /** * Get next search result. * @param the AI index within range of GetSkirmishAIInfoCount * @return an array made of blocks with this layout { key, value, description } */ wxArrayString GetAIInfo( int index ); wxString GetArchiveChecksum( const wxString& VFSPath ); /// lua parser void CloseParser(); bool OpenParserFile( const wxString& filename, const wxString& filemodes, const wxString& accessModes ); bool OpenParserSource( const wxString& source, const wxString& accessModes ); bool ParserExecute(); wxString ParserErrorLog(); void ParserAddTable( int key, bool override ); void ParserAddTable( const wxString& key, bool override ); void ParserEndTable(); void ParserAddTableValue( int key, int val ); void ParserAddTableValue( const wxString& key, int val ); void ParserAddTableValue( int key, bool val ); void ParserAddTableValue( const wxString& key, bool val ); void ParserAddTableValue( int key, const wxString& val ); void ParserAddTableValue( const wxString& key, const wxString& val ); void ParserAddTableValue( int key, float val ); void ParserAddTableValue( const wxString& key, float val ); bool ParserGetRootTable(); bool ParserGetRootTableExpression( const wxString& exp ); bool ParserGetSubTableInt( int key ); bool ParserGetSubTableString( const wxString& key ); bool ParserGetSubTableInt( const wxString& exp ); void ParserPopTable(); bool ParserKeyExists( int key ); bool ParserKeyExists( const wxString& key ); int ParserGetKeyType( int key ); int ParserGetKeyType( const wxString& key ); int ParserGetIntKeyListCount(); int ParserGetIntKeyListEntry( int index ); int ParserGetStringKeyListCount(); int ParserGetStringKeyListEntry( int index ); int GetKeyValue( int key, int defval ); bool GetKeyValue( int key, bool defval ); wxString GetKeyValue( int key, const wxString& defval ); float GetKeyValue( int key, float defval ); int GetKeyValue( const wxString& key, int defval ); bool GetKeyValue( const wxString& key, bool defval ); wxString GetKeyValue( const wxString& key, const wxString& defval ); float GetKeyValue( const wxString& key, float defval ); protected: wxArrayString FindVFSCommon(int handle ); SpringUnitSyncLib( const SpringUnitSyncLib& ); //! Keeps track if unitsync is loaded or not. bool m_loaded; //! Handle to the unitsync library. wxDynamicLibrary* m_libhandle; //! Critical section controlling access to unitsync functions. mutable wxCriticalSection m_lock; //! Path to unitsync. wxString m_path; //! the current loaded mod. wxString m_current_mod; /** * Loads the unitsync library from path. * @note this function is not threadsafe if called from code not locked. * @see Load() */ void _Load( const wxString& path ); /** * Initializes unitsync. */ void _Init(); /** * Calls RemoveAllArchives if available, _Init() otherwise. */ void _RemoveAllArchives(); /** * Internal Unload() function. * @note this function is not threadsafe if called from code not locked. * @see Unload() */ void _Unload(); /** * Returns true if the library is loaded. Internal. */ bool _IsLoaded() const; void _ConvertSpringMapInfo( const SpringMapInfo& in, MapInfo& out ); void _SetCurrentMod( const wxString& modname ); /** * \defgroup DllFuncPointers Pointers to the functions in unitsync. */ /*@{*/ InitPtr m_init; UnInitPtr m_uninit; GetNextErrorPtr m_get_next_error; GetWritableDataDirectoryPtr m_get_writeable_data_dir; GetDataDirectoryPtr m_get_data_dir_by_index; GetDataDirectoryCountPtr m_get_data_dir_count; GetMapCountPtr m_get_map_count; GetMapChecksumPtr m_get_map_checksum; GetMapNamePtr m_get_map_name; GetMapDescriptionPtr m_get_map_description; GetMapAuthorPtr m_get_map_author; GetMapWidthPtr m_get_map_width; GetMapHeightPtr m_get_map_height; GetMapTidalStrengthPtr m_get_map_tidalStrength; GetMapWindMinPtr m_get_map_windMin; GetMapWindMaxPtr m_get_map_windMax; GetMapGravityPtr m_get_map_gravity; GetMapResourceCountPtr m_get_map_resource_count; GetMapResourceNamePtr m_get_map_resource_name; GetMapResourceMaxPtr m_get_map_resource_max; GetMapResourceExtractorRadiusPtr m_get_map_resource_extractorRadius; GetMapPosCountPtr m_get_map_pos_count; GetMapPosXPtr m_get_map_pos_x; GetMapPosZPtr m_get_map_pos_z; GetMapInfoExPtr m_get_map_info_ex; GetMinimapPtr m_get_minimap; GetInfoMapSizePtr m_get_infomap_size; GetInfoMapPtr m_get_infomap; GetPrimaryModChecksumPtr m_get_mod_checksum; GetPrimaryModIndexPtr m_get_mod_index; GetPrimaryModNamePtr m_get_mod_name; GetPrimaryModCountPtr m_get_mod_count; GetPrimaryModArchivePtr m_get_mod_archive; GetSideCountPtr m_get_side_count; GetSideNamePtr m_get_side_name; AddAllArchivesPtr m_add_all_archives; RemoveAllArchivesPtr m_remove_all_archives; GetUnitCountPtr m_get_unit_count; GetUnitNamePtr m_get_unit_name; GetFullUnitNamePtr m_get_unit_full_name; ProcessUnitsNoChecksumPtr m_proc_units_nocheck; InitFindVFSPtr m_init_find_vfs; FindFilesVFSPtr m_find_files_vfs; OpenFileVFSPtr m_open_file_vfs; FileSizeVFSPtr m_file_size_vfs; ReadFileVFSPtr m_read_file_vfs; CloseFileVFSPtr m_close_file_vfs; InitDirListVFSPtr m_init_dirlist_vfs; InitSubDirsVFSPtr m_init_subdirs_vfs; GetSpringVersionPtr m_get_spring_version; ProcessUnitsPtr m_process_units; AddArchivePtr m_add_archive; GetArchiveChecksumPtr m_get_archive_checksum; GetArchivePathPtr m_get_archive_path; GetMapArchiveCountPtr m_get_map_archive_count; GetMapArchiveNamePtr m_get_map_archive_name; GetMapChecksumFromNamePtr m_get_map_checksum_from_name; GetPrimaryModShortNamePtr m_get_primary_mod_short_name; GetPrimaryModVersionPtr m_get_primary_mod_version; GetPrimaryModMutatorPtr m_get_primary_mod_mutator; GetPrimaryModGamePtr m_get_primary_mod_game; GetPrimaryModShortGamePtr m_get_primary_mod_short_game; GetPrimaryModDescriptionPtr m_get_primary_mod_description; GetPrimaryModArchivePtr m_get_primary_mod_archive; GetPrimaryModArchiveCountPtr m_get_primary_mod_archive_count; GetPrimaryModArchiveListPtr m_get_primary_mod_archive_list; GetPrimaryModChecksumFromNamePtr m_get_primary_mod_checksum_from_name; GetModValidMapCountPtr m_get_mod_valid_map_count; GetModValidMapPtr m_get_valid_map; GetLuaAICountPtr m_get_luaai_count; GetLuaAINamePtr m_get_luaai_name; GetLuaAIDescPtr m_get_luaai_desc; GetMapOptionCountPtr m_get_map_option_count; GetCustomOptionCountPtr m_get_custom_option_count; GetModOptionCountPtr m_get_mod_option_count; GetSkirmishAIOptionCountPtr m_get_skirmish_ai_option_count; GetOptionKeyPtr m_get_option_key; GetOptionNamePtr m_get_option_name; GetOptionDescPtr m_get_option_desc; GetOptionTypePtr m_get_option_type; GetOptionSectionPtr m_get_option_section; GetOptionStylePtr m_get_option_style; GetOptionBoolDefPtr m_get_option_bool_def; GetOptionNumberDefPtr m_get_option_number_def; GetOptionNumberMinPtr m_get_option_number_min; GetOptionNumberMaxPtr m_get_option_number_max; GetOptionNumberStepPtr m_get_option_number_step; GetOptionStringDefPtr m_get_option_string_def; GetOptionStringMaxLenPtr m_get_option_string_max_len; GetOptionListCountPtr m_get_option_list_count; GetOptionListDefPtr m_get_option_list_def; GetOptionListItemKeyPtr m_get_option_list_item_key; GetOptionListItemNamePtr m_get_option_list_item_name; GetOptionListItemDescPtr m_get_option_list_item_desc; OpenArchivePtr m_open_archive; CloseArchivePtr m_close_archive; FindFilesArchivePtr m_find_Files_archive; OpenArchiveFilePtr m_open_archive_file; ReadArchiveFilePtr m_read_archive_file; CloseArchiveFilePtr m_close_archive_file; SizeArchiveFilePtr m_size_archive_file; SetSpringConfigFilePtr m_set_spring_config_file_path; GetSpringConfigFilePtr m_get_spring_config_file_path; SetSpringConfigFloatPtr m_set_spring_config_float; GetSpringConfigFloatPtr m_get_spring_config_float; GetSpringConfigIntPtr m_get_spring_config_int; GetSpringConfigStringPtr m_get_spring_config_string; SetSpringConfigStringPtr m_set_spring_config_string; SetSpringConfigIntPtr m_set_spring_config_int; GetSkirmishAICountPtr m_get_skirmish_ai_count; GetSkirmishAIInfoCountPtr m_get_skirmish_ai_info_count; GetInfoKeyPtr m_get_skirmish_ai_info_key; GetInfoValuePtr m_get_skirmish_ai_info_value; GetInfoDescriptionPtr m_get_skirmish_ai_info_description; // lua parser section lpClosePtr m_parser_close; lpOpenFilePtr m_parser_open_file; lpOpenSourcePtr m_parser_open_source; lpExecutePtr m_parser_execute; lpErrorLogPtr m_parser_error_log; lpAddTableIntPtr m_parser_add_table_int; lpAddTableStrPtr m_parser_add_table_string; lpEndTablePtr m_parser_end_table; lpAddIntKeyIntValPtr m_parser_add_int_key_int_value; lpAddStrKeyIntValPtr m_parser_add_string_key_int_value; lpAddIntKeyBoolValPtr m_parser_add_int_key_bool_value; lpAddStrKeyBoolValPtr m_parser_add_string_key_bool_value; lpAddIntKeyFloatValPtr m_parser_add_int_key_float_value; lpAddStrKeyFloatValPtr m_parser_add_string_key_float_value; lpAddIntKeyStrValPtr m_parser_add_int_key_string_value; lpAddStrKeyStrValPtr m_parser_add_string_key_string_value; lpRootTablePtr m_parser_root_table; lpRootTableExprPtr m_parser_root_table_expression; lpSubTableIntPtr m_parser_sub_table_int; lpSubTableStrPtr m_parser_sub_table_string; lpSubTableExprPtr m_parser_sub_table_expression; lpPopTablePtr m_parser_pop_table; lpGetKeyExistsIntPtr m_parser_key_int_exists; lpGetKeyExistsStrPtr m_parser_key_string_exists; lpGetIntKeyTypePtr m_parser_int_key_get_type; lpGetStrKeyTypePtr m_parser_string_key_get_type; lpGetIntKeyListCountPtr m_parser_int_key_get_list_count; lpGetIntKeyListEntryPtr m_parser_int_key_get_list_entry; lpGetStrKeyListCountPtr m_parser_string_key_get_list_count; lpGetStrKeyListEntryPtr m_parser_string_key_get_list_entry; lpGetIntKeyIntValPtr m_parser_int_key_get_int_value; lpGetStrKeyIntValPtr m_parser_string_key_get_int_value; lpGetIntKeyBoolValPtr m_parser_int_key_get_bool_value; lpGetStrKeyBoolValPtr m_parser_string_key_get_bool_value; lpGetIntKeyFloatValPtr m_parser_int_key_get_float_value; lpGetStrKeyFloatValPtr m_parser_string_key_get_float_value; lpGetIntKeyStrValPtr m_parser_int_key_get_string_value; lpGetStrKeyStrValPtr m_parser_string_key_get_string_value; /*@}*/ }; SpringUnitSyncLib& susynclib(); #endif //SPRINGLOBBY_HEADERGUARD_SPRINGUNITSYNCLIB_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/stacktrace.c0000600000176000000410000007267512105760300020517 0ustar buildbotwww-data00000000000000//we include this here so we can use our own exception filter but still benefit from drmingw report stuff /* * exchndl.c * * Author: * Jos� Fonseca * * Originally based on Matt Pietrek's MSJEXHND.CPP in Microsoft Systems * Journal, April 1997. */ #include "stacktrace.h" #include #include #include #include #include #include //#define HAVE_BFD 1 // Declare the static variables static TCHAR szLogFileName[MAX_PATH] = _T(""); static LPTOP_LEVEL_EXCEPTION_FILTER prevExceptionFilter = NULL; static HANDLE hReportFile; static int __cdecl rprintf(const TCHAR * format, ...) { TCHAR szBuff[4096]; int retValue; DWORD cbWritten; va_list argptr; va_start(argptr, format); retValue = wvsprintf(szBuff, format, argptr); va_end(argptr); WriteFile(hReportFile, szBuff, retValue * sizeof(TCHAR), &cbWritten, 0); return retValue; } // The GetModuleBase function retrieves the base address of the module that contains the specified address. static DWORD GetModuleBase(DWORD dwAddress) { MEMORY_BASIC_INFORMATION Buffer; return VirtualQuery((LPCVOID) dwAddress, &Buffer, sizeof(Buffer)) ? (DWORD) Buffer.AllocationBase : 0; } #ifdef HAVE_BFD #include #include #include "coff/internal.h" #include "libcoff.h" // Read in the symbol table. static bfd_boolean slurp_symtab (bfd *abfd, asymbol ***syms, long *symcount) { long storage; if ((bfd_get_file_flags (abfd) & HAS_SYMS) == 0) return FALSE; storage = bfd_get_symtab_upper_bound (abfd); if (storage < 0) return FALSE; if((*syms = (asymbol **) malloc (storage)) == NULL) return FALSE; if((*symcount = bfd_canonicalize_symtab (abfd, *syms)) < 0) return FALSE; return TRUE; } // This stucture is used to pass information between translate_addresses and find_address_in_section. struct find_handle { asymbol **syms; bfd_vma pc; const char *filename; const char *functionname; unsigned int line; bfd_boolean found; }; // Look for an address in a section. This is called via bfd_map_over_sections. static void find_address_in_section (bfd *abfd, asection *section, PTR data) { struct find_handle *info = (struct find_handle *) data; bfd_vma vma; bfd_size_type size; if (info->found) return; if ((bfd_get_section_flags (abfd, section) & SEC_ALLOC) == 0) return; vma = bfd_get_section_vma (abfd, section); if (info->pc < vma) return; size = bfd_get_section_size (section); if (info->pc >= vma + size) return; info->found = bfd_find_nearest_line (abfd, section, info->syms, info->pc - vma, &info->filename, &info->functionname, &info->line); } static BOOL BfdDemangleSymName(LPCTSTR lpName, LPTSTR lpDemangledName, DWORD nSize) { char *res; assert(lpName != NULL); if((res = cplus_demangle(lpName, DMGL_ANSI /*| DMGL_PARAMS*/)) == NULL) { lstrcpyn(lpDemangledName, lpName, nSize); return FALSE; } else { lstrcpyn(lpDemangledName, res, nSize); free (res); return TRUE; } } static BOOL BfdGetSymFromAddr(bfd *abfd, asymbol **syms, long symcount, DWORD dwAddress, LPTSTR lpSymName, DWORD nSize) { HMODULE hModule; struct find_handle info; if(!(hModule = (HMODULE) GetModuleBase(dwAddress))) return FALSE; info.pc = dwAddress; if(!(bfd_get_file_flags (abfd) & HAS_SYMS) || !symcount) return FALSE; info.syms = syms; info.found = FALSE; bfd_map_over_sections (abfd, find_address_in_section, (PTR) &info); if (info.found == FALSE || info.line == 0) return FALSE; assert(lpSymName); if(info.functionname == NULL || *info.functionname == '\0') return FALSE; lstrcpyn(lpSymName, info.functionname, nSize); return TRUE; } static BOOL BfdGetLineFromAddr(bfd *abfd, asymbol **syms, long symcount, DWORD dwAddress, LPTSTR lpFileName, DWORD nSize, LPDWORD lpLineNumber) { HMODULE hModule; struct find_handle info; if(!(hModule = (HMODULE) GetModuleBase(dwAddress))) return FALSE; info.pc = dwAddress; if(!(bfd_get_file_flags (abfd) & HAS_SYMS) || !symcount) return FALSE; info.syms = syms; info.found = FALSE; bfd_map_over_sections (abfd, find_address_in_section, (PTR) &info); if (info.found == FALSE || info.line == 0) return FALSE; assert(lpFileName && lpLineNumber); lstrcpyn(lpFileName, info.filename, nSize); *lpLineNumber = info.line; return TRUE; } #endif /* HAVE_BFD */ #include static BOOL bSymInitialized = FALSE; static HMODULE hModule_Imagehlp = NULL; typedef BOOL (WINAPI *PFNSYMINITIALIZE)(HANDLE, LPSTR, BOOL); static PFNSYMINITIALIZE pfnSymInitialize = NULL; static BOOL WINAPI j_SymInitialize(HANDLE hProcess, PSTR UserSearchPath, BOOL fInvadeProcess) { if( (hModule_Imagehlp || (hModule_Imagehlp = LoadLibrary(_T("IMAGEHLP.DLL")))) && (pfnSymInitialize || (pfnSymInitialize = (PFNSYMINITIALIZE) GetProcAddress(hModule_Imagehlp, "SymInitialize"))) ) return pfnSymInitialize(hProcess, UserSearchPath, fInvadeProcess); else return FALSE; } typedef BOOL (WINAPI *PFNSYMCLEANUP)(HANDLE); static PFNSYMCLEANUP pfnSymCleanup = NULL; static BOOL WINAPI j_SymCleanup(HANDLE hProcess) { if( (hModule_Imagehlp || (hModule_Imagehlp = LoadLibrary(_T("IMAGEHLP.DLL")))) && (pfnSymCleanup || (pfnSymCleanup = (PFNSYMCLEANUP) GetProcAddress(hModule_Imagehlp, "SymCleanup"))) ) return pfnSymCleanup(hProcess); else return FALSE; } typedef DWORD (WINAPI *PFNSYMSETOPTIONS)(DWORD); static PFNSYMSETOPTIONS pfnSymSetOptions = NULL; static DWORD WINAPI j_SymSetOptions(DWORD SymOptions) { if( (hModule_Imagehlp || (hModule_Imagehlp = LoadLibrary(_T("IMAGEHLP.DLL")))) && (pfnSymSetOptions || (pfnSymSetOptions = (PFNSYMSETOPTIONS) GetProcAddress(hModule_Imagehlp, "SymSetOptions"))) ) return pfnSymSetOptions(SymOptions); else return FALSE; } typedef BOOL (WINAPI *PFNSYMUNDNAME)(PIMAGEHLP_SYMBOL, PSTR, DWORD); static PFNSYMUNDNAME pfnSymUnDName = NULL; static BOOL WINAPI j_SymUnDName(PIMAGEHLP_SYMBOL Symbol, PSTR UnDecName, DWORD UnDecNameLength) { if( (hModule_Imagehlp || (hModule_Imagehlp = LoadLibrary(_T("IMAGEHLP.DLL")))) && (pfnSymUnDName || (pfnSymUnDName = (PFNSYMUNDNAME) GetProcAddress(hModule_Imagehlp, "SymUnDName"))) ) return pfnSymUnDName(Symbol, UnDecName, UnDecNameLength); else return FALSE; } typedef PFUNCTION_TABLE_ACCESS_ROUTINE PFNSYMFUNCTIONTABLEACCESS; static PFNSYMFUNCTIONTABLEACCESS pfnSymFunctionTableAccess = NULL; static PVOID WINAPI j_SymFunctionTableAccess(HANDLE hProcess, DWORD AddrBase) { if( (hModule_Imagehlp || (hModule_Imagehlp = LoadLibrary(_T("IMAGEHLP.DLL")))) && (pfnSymFunctionTableAccess || (pfnSymFunctionTableAccess = (PFNSYMFUNCTIONTABLEACCESS) GetProcAddress(hModule_Imagehlp, "SymFunctionTableAccess"))) ) return pfnSymFunctionTableAccess(hProcess, AddrBase); else return NULL; } typedef PGET_MODULE_BASE_ROUTINE PFNSYMGETMODULEBASE; static PFNSYMGETMODULEBASE pfnSymGetModuleBase = NULL; static DWORD WINAPI j_SymGetModuleBase(HANDLE hProcess, DWORD dwAddr) { if( (hModule_Imagehlp || (hModule_Imagehlp = LoadLibrary(_T("IMAGEHLP.DLL")))) && (pfnSymGetModuleBase || (pfnSymGetModuleBase = (PFNSYMGETMODULEBASE) GetProcAddress(hModule_Imagehlp, "SymGetModuleBase"))) ) return pfnSymGetModuleBase(hProcess, dwAddr); else return 0; } typedef BOOL (WINAPI *PFNSTACKWALK)(DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID, PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE); static PFNSTACKWALK pfnStackWalk = NULL; static BOOL WINAPI j_StackWalk( DWORD MachineType, HANDLE hProcess, HANDLE hThread, LPSTACKFRAME StackFrame, PVOID ContextRecord, PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine, PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine, PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine, PTRANSLATE_ADDRESS_ROUTINE TranslateAddress ) { if( (hModule_Imagehlp || (hModule_Imagehlp = LoadLibrary(_T("IMAGEHLP.DLL")))) && (pfnStackWalk || (pfnStackWalk = (PFNSTACKWALK) GetProcAddress(hModule_Imagehlp, "StackWalk"))) ) return pfnStackWalk( MachineType, hProcess, hThread, StackFrame, ContextRecord, ReadMemoryRoutine, FunctionTableAccessRoutine, GetModuleBaseRoutine, TranslateAddress ); else return FALSE; } typedef BOOL (WINAPI *PFNSYMGETSYMFROMADDR)(HANDLE, DWORD, LPDWORD, PIMAGEHLP_SYMBOL); static PFNSYMGETSYMFROMADDR pfnSymGetSymFromAddr = NULL; static BOOL WINAPI j_SymGetSymFromAddr(HANDLE hProcess, DWORD Address, PDWORD Displacement, PIMAGEHLP_SYMBOL Symbol) { if( (hModule_Imagehlp || (hModule_Imagehlp = LoadLibrary(_T("IMAGEHLP.DLL")))) && (pfnSymGetSymFromAddr || (pfnSymGetSymFromAddr = (PFNSYMGETSYMFROMADDR) GetProcAddress(hModule_Imagehlp, "SymGetSymFromAddr"))) ) return pfnSymGetSymFromAddr(hProcess, Address, Displacement, Symbol); else return FALSE; } typedef BOOL (WINAPI *PFNSYMGETLINEFROMADDR)(HANDLE, DWORD, LPDWORD, PIMAGEHLP_LINE); static PFNSYMGETLINEFROMADDR pfnSymGetLineFromAddr = NULL; static BOOL WINAPI j_SymGetLineFromAddr(HANDLE hProcess, DWORD dwAddr, PDWORD pdwDisplacement, PIMAGEHLP_LINE Line) { if( (hModule_Imagehlp || (hModule_Imagehlp = LoadLibrary(_T("IMAGEHLP.DLL")))) && (pfnSymGetLineFromAddr || (pfnSymGetLineFromAddr = (PFNSYMGETLINEFROMADDR) GetProcAddress(hModule_Imagehlp, "SymGetLineFromAddr"))) ) return pfnSymGetLineFromAddr(hProcess, dwAddr, pdwDisplacement, Line); else return FALSE; } static BOOL ImagehlpDemangleSymName(LPCTSTR lpName, LPTSTR lpDemangledName, DWORD nSize) { BYTE symbolBuffer[sizeof(IMAGEHLP_SYMBOL) + 512]; PIMAGEHLP_SYMBOL pSymbol = (PIMAGEHLP_SYMBOL) symbolBuffer; memset( symbolBuffer, 0, sizeof(symbolBuffer) ); pSymbol->SizeOfStruct = sizeof(symbolBuffer); pSymbol->MaxNameLength = 512; lstrcpyn(pSymbol->Name, lpName, pSymbol->MaxNameLength); if(!j_SymUnDName(pSymbol, lpDemangledName, nSize)) return FALSE; return TRUE; } static BOOL ImagehlpGetSymFromAddr(HANDLE hProcess, DWORD dwAddress, LPTSTR lpSymName, DWORD nSize) { // IMAGEHLP is wacky, and requires you to pass in a pointer to a // IMAGEHLP_SYMBOL structure. The problem is that this structure is // variable length. That is, you determine how big the structure is // at runtime. This means that you can't use sizeof(struct). // So...make a buffer that's big enough, and make a pointer // to the buffer. We also need to initialize not one, but TWO // members of the structure before it can be used. BYTE symbolBuffer[sizeof(IMAGEHLP_SYMBOL) + 512]; PIMAGEHLP_SYMBOL pSymbol = (PIMAGEHLP_SYMBOL) symbolBuffer; DWORD dwDisplacement = 0; // Displacement of the input address, relative to the start of the symbol pSymbol->SizeOfStruct = sizeof(symbolBuffer); pSymbol->MaxNameLength = 512; assert(bSymInitialized); if(!j_SymGetSymFromAddr(hProcess, dwAddress, &dwDisplacement, pSymbol)) return FALSE; lstrcpyn(lpSymName, pSymbol->Name, nSize); return TRUE; } static BOOL ImagehlpGetLineFromAddr(HANDLE hProcess, DWORD dwAddress, LPTSTR lpFileName, DWORD nSize, LPDWORD lpLineNumber) { IMAGEHLP_LINE Line; DWORD dwDisplacement = 0; // Displacement of the input address, relative to the start of the symbol // Do the source and line lookup. memset(&Line, 0, sizeof(IMAGEHLP_LINE)); Line.SizeOfStruct = sizeof(IMAGEHLP_LINE); assert(bSymInitialized); #if 1 { // The problem is that the symbol engine only finds those source // line addresses (after the first lookup) that fall exactly on // a zero displacement. I will walk backwards 100 bytes to // find the line and return the proper displacement. DWORD dwTempDisp = 0 ; while (dwTempDisp < 100 && !j_SymGetLineFromAddr(hProcess, dwAddress - dwTempDisp, &dwDisplacement, &Line)) ++dwTempDisp; if(dwTempDisp >= 100) return FALSE; // It was found and the source line information is correct so // change the displacement if it was looked up multiple times. if (dwTempDisp < 100 && dwTempDisp != 0 ) dwDisplacement = dwTempDisp; } #else if(!j_SymGetLineFromAddr(hProcess, dwAddress, &dwDisplacement, &Line)) return FALSE; #endif assert(lpFileName && lpLineNumber); lstrcpyn(lpFileName, Line.FileName, nSize); *lpLineNumber = Line.LineNumber; return TRUE; } static BOOL PEGetSymFromAddr(HANDLE hProcess, DWORD dwAddress, LPTSTR lpSymName, DWORD nSize) { HMODULE hModule; PIMAGE_NT_HEADERS pNtHdr; IMAGE_NT_HEADERS NtHdr; PIMAGE_SECTION_HEADER pSection; DWORD dwNearestAddress = 0, dwNearestName; int i; if(!(hModule = (HMODULE) GetModuleBase(dwAddress))) return FALSE; { PIMAGE_DOS_HEADER pDosHdr; LONG e_lfanew; // Point to the DOS header in memory pDosHdr = (PIMAGE_DOS_HEADER)hModule; // From the DOS header, find the NT (PE) header if(!ReadProcessMemory(hProcess, &pDosHdr->e_lfanew, &e_lfanew, sizeof(e_lfanew), NULL)) return FALSE; pNtHdr = (PIMAGE_NT_HEADERS)((DWORD)hModule + (DWORD)e_lfanew); if(!ReadProcessMemory(hProcess, pNtHdr, &NtHdr, sizeof(IMAGE_NT_HEADERS), NULL)) return FALSE; } pSection = (PIMAGE_SECTION_HEADER) ((DWORD)pNtHdr + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER) + NtHdr.FileHeader.SizeOfOptionalHeader); // Look for export section for (i = 0; i < NtHdr.FileHeader.NumberOfSections; i++, pSection++) { IMAGE_SECTION_HEADER Section; PIMAGE_EXPORT_DIRECTORY pExportDir = NULL; BYTE ExportSectionName[IMAGE_SIZEOF_SHORT_NAME] = {'.', 'e', 'd', 'a', 't', 'a', '\0', '\0'}; if(!ReadProcessMemory(hProcess, pSection, &Section, sizeof(IMAGE_SECTION_HEADER), NULL)) return FALSE; if(memcmp(Section.Name, ExportSectionName, IMAGE_SIZEOF_SHORT_NAME) == 0) pExportDir = (PIMAGE_EXPORT_DIRECTORY) Section.VirtualAddress; else if ((NtHdr.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress >= Section.VirtualAddress) && (NtHdr.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress < (Section.VirtualAddress + Section.SizeOfRawData))) pExportDir = (PIMAGE_EXPORT_DIRECTORY) NtHdr.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress; if(pExportDir) { IMAGE_EXPORT_DIRECTORY ExportDir; if(!ReadProcessMemory(hProcess, (PVOID)((DWORD)hModule + (DWORD)pExportDir), &ExportDir, sizeof(IMAGE_EXPORT_DIRECTORY), NULL)) return FALSE; { PDWORD *AddressOfFunctions = alloca(ExportDir.NumberOfFunctions*sizeof(PDWORD)); int j; if(!ReadProcessMemory(hProcess, (PVOID)((DWORD)hModule + (DWORD)ExportDir.AddressOfFunctions), AddressOfFunctions, ExportDir.NumberOfFunctions*sizeof(PDWORD), NULL)) return FALSE; for(j = 0; j < ExportDir.NumberOfNames; ++j) { DWORD pFunction = (DWORD)hModule + (DWORD)AddressOfFunctions[j]; //ReadProcessMemory(hProcess, (DWORD) hModule + (DWORD) (&ExportDir.AddressOfFunctions[j]), &pFunction, sizeof(pFunction), NULL); if(pFunction <= dwAddress && pFunction > dwNearestAddress) { dwNearestAddress = pFunction; if(!ReadProcessMemory(hProcess, (PVOID)((DWORD)hModule + ExportDir.AddressOfNames + j*sizeof(DWORD)), &dwNearestName, sizeof(dwNearestName), NULL)) return FALSE; dwNearestName = (DWORD) hModule + dwNearestName; } } } } } if(!dwNearestAddress) return FALSE; if(!ReadProcessMemory(hProcess, (PVOID)dwNearestName, lpSymName, nSize, NULL)) return FALSE; lpSymName[nSize - 1] = 0; return TRUE; } static BOOL WINAPI IntelStackWalk( DWORD MachineType, HANDLE hProcess, HANDLE hThread, LPSTACKFRAME StackFrame, PCONTEXT ContextRecord, PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine, PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine, PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine, PTRANSLATE_ADDRESS_ROUTINE TranslateAddress ) { assert(MachineType == IMAGE_FILE_MACHINE_I386); if(ReadMemoryRoutine == NULL) ReadMemoryRoutine = ReadProcessMemory; if(!StackFrame->Reserved[0]) { StackFrame->Reserved[0] = 1; StackFrame->AddrPC.Mode = AddrModeFlat; StackFrame->AddrPC.Offset = ContextRecord->Eip; StackFrame->AddrStack.Mode = AddrModeFlat; StackFrame->AddrStack.Offset = ContextRecord->Esp; StackFrame->AddrFrame.Mode = AddrModeFlat; StackFrame->AddrFrame.Offset = ContextRecord->Ebp; StackFrame->AddrReturn.Mode = AddrModeFlat; if(!ReadMemoryRoutine(hProcess, (LPCVOID) (StackFrame->AddrFrame.Offset + sizeof(DWORD)), &StackFrame->AddrReturn.Offset, sizeof(DWORD), NULL)) return FALSE; } else { StackFrame->AddrPC.Offset = StackFrame->AddrReturn.Offset; //AddrStack = AddrFrame + 2*sizeof(DWORD); if(!ReadMemoryRoutine(hProcess, (LPCVOID) StackFrame->AddrFrame.Offset, &StackFrame->AddrFrame.Offset, sizeof(DWORD), NULL)) return FALSE; if(!ReadMemoryRoutine(hProcess, (LPCVOID) (StackFrame->AddrFrame.Offset + sizeof(DWORD)), &StackFrame->AddrReturn.Offset, sizeof(DWORD), NULL)) return FALSE; } ReadMemoryRoutine(hProcess, (LPCVOID) (StackFrame->AddrFrame.Offset + 2*sizeof(DWORD)), StackFrame->Params, sizeof(StackFrame->Params), NULL); return TRUE; } static BOOL StackBackTrace(HANDLE hProcess, HANDLE hThread, PCONTEXT pContext) { STACKFRAME StackFrame; HMODULE hModule = NULL; TCHAR szModule[MAX_PATH]; #ifdef HAVE_BFD bfd *abfd = NULL; asymbol **syms = NULL; // The symbol table. long symcount = 0; // Number of symbols in `syms'. #endif /* HAVE_BFD */ assert(!bSymInitialized); j_SymSetOptions(/* SYMOPT_UNDNAME | */ SYMOPT_LOAD_LINES); if(j_SymInitialize(hProcess, NULL, TRUE)) bSymInitialized = TRUE; memset( &StackFrame, 0, sizeof(StackFrame) ); // Initialize the STACKFRAME structure for the first call. This is only // necessary for Intel CPUs, and isn't mentioned in the documentation. StackFrame.AddrPC.Offset = pContext->Eip; StackFrame.AddrPC.Mode = AddrModeFlat; StackFrame.AddrStack.Offset = pContext->Esp; StackFrame.AddrStack.Mode = AddrModeFlat; StackFrame.AddrFrame.Offset = pContext->Ebp; StackFrame.AddrFrame.Mode = AddrModeFlat; rprintf( _T("Call stack:\r\n") ); if(0) rprintf( _T("AddrPC AddrReturn AddrFrame AddrStack\r\n") ); while ( 1 ) { BOOL bSuccess = FALSE; HMODULE hPrevModule = hModule; TCHAR szSymName[512] = _T(""); TCHAR szFileName[MAX_PATH] = _T(""); DWORD LineNumber = 0; if(bSymInitialized) { if(!j_StackWalk( IMAGE_FILE_MACHINE_I386, hProcess, hThread, &StackFrame, pContext, NULL, j_SymFunctionTableAccess, j_SymGetModuleBase, NULL ) ) break; } else { if(!IntelStackWalk( IMAGE_FILE_MACHINE_I386, hProcess, hThread, &StackFrame, pContext, NULL, NULL, NULL, NULL ) ) break; } // Basic sanity check to make sure the frame is OK. Bail if not. if ( 0 == StackFrame.AddrFrame.Offset ) break; if(0) { rprintf( _T("%08lX %08lX %08lX %08lX\r\n"), StackFrame.AddrPC.Offset, StackFrame.AddrReturn.Offset, StackFrame.AddrFrame.Offset, StackFrame.AddrStack.Offset ); rprintf( _T("%08lX %08lX %08lX %08lX\r\n"), StackFrame.Params[0], StackFrame.Params[1], StackFrame.Params[2], StackFrame.Params[3] ); } rprintf( _T("%08lX"), StackFrame.AddrPC.Offset); if((hModule = (HMODULE) GetModuleBase(StackFrame.AddrPC.Offset)) && GetModuleFileName(hModule, szModule, sizeof(szModule))) { #ifndef HAVE_BFD // rprintf( _T(" %s:ModulBase %08lX"), szModule, hModule); #else /* HAVE_BFD */ // rprintf( _T(" %s:%08lX"), szModule, StackFrame.AddrPC.Offset); if(hModule != hPrevModule) { if(syms) { free(syms); syms = NULL; symcount = 0; } if(abfd) bfd_close(abfd); if((abfd = bfd_openr (szModule, NULL))) if(bfd_check_format(abfd, bfd_object)) { bfd_vma adjust_section_vma = 0; /* If we are adjusting section VMA's, change them all now. Changing the BFD information is a hack. However, we must do it, or bfd_find_nearest_line will not do the right thing. */ if ((adjust_section_vma = (bfd_vma) hModule - pe_data(abfd)->pe_opthdr.ImageBase)) { asection *s; for (s = abfd->sections; s != NULL; s = s->next) { s->vma += adjust_section_vma; s->lma += adjust_section_vma; } } if(bfd_get_file_flags(abfd) & HAS_SYMS) /* Read in the symbol table. */ slurp_symtab(abfd, &syms, &symcount); } } if(!bSuccess && abfd && syms && symcount) if((bSuccess = BfdGetSymFromAddr(abfd, syms, symcount, StackFrame.AddrPC.Offset, szSymName, 512))) { /* framepointer = StackFrame.AddrFrame.Offset; hprocess = hProcess; */ BfdDemangleSymName(szSymName, szSymName, 512); rprintf( _T(" %s"), szSymName); if(BfdGetLineFromAddr(abfd, syms, symcount, StackFrame.AddrPC.Offset, szFileName, MAX_PATH, &LineNumber)) rprintf( _T(" %s:%ld"), szFileName, LineNumber); } #endif /* HAVE_BFD */ if(!bSuccess && bSymInitialized) if((bSuccess = ImagehlpGetSymFromAddr(hProcess, StackFrame.AddrPC.Offset, szSymName, 512))) { rprintf( _T(" %s"), szSymName); ImagehlpDemangleSymName(szSymName, szSymName, 512); if(ImagehlpGetLineFromAddr(hProcess, StackFrame.AddrPC.Offset, szFileName, MAX_PATH, &LineNumber)) rprintf( _T(" %s:%ld"), szFileName, LineNumber); } if(!bSuccess) if((bSuccess = PEGetSymFromAddr(hProcess, StackFrame.AddrPC.Offset, szSymName, 512))) rprintf( _T(" %s"), szSymName); } rprintf(_T("\r\n")); } #ifdef HAVE_BFD if(syms) { free(syms); syms = NULL; symcount = 0; } if(abfd) bfd_close(abfd); #endif /* HAVE_BFD */ if(bSymInitialized) { if(!j_SymCleanup(hProcess)) assert(0); bSymInitialized = FALSE; } return TRUE; } static void GenerateExceptionReport(PEXCEPTION_POINTERS pExceptionInfo) { PEXCEPTION_RECORD pExceptionRecord = pExceptionInfo->ExceptionRecord; TCHAR szModule[MAX_PATH]; HMODULE hModule; PCONTEXT pContext; #if defined(SHOW_EXTRA_REPORT_STUFF) // Start out with a banner rprintf(_T("-------------------\r\n\r\n")); { TCHAR *lpDayOfWeek[] = { _T("Sunday"), _T("Monday"), _T("Tuesday"), _T("Wednesday"), _T("Thursday"), _T("Friday"), _T("Saturday") }; TCHAR *lpMonth[] = { NULL, _T("January"), _T("February"), _T("March"), _T("April"), _T("May"), _T("June"), _T("July"), _T("August"), _T("September"), _T("October"), _T("November"), _T("December") }; SYSTEMTIME SystemTime; GetLocalTime(&SystemTime); rprintf(_T("Error occured on %s, %s %i, %i at %02i:%02i:%02i.\r\n\r\n"), lpDayOfWeek[SystemTime.wDayOfWeek], lpMonth[SystemTime.wMonth], SystemTime.wDay, SystemTime.wYear, SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond ); } // First print information about the type of fault rprintf(_T("%s caused "), GetModuleFileName(NULL, szModule, MAX_PATH) ? szModule : "Application"); switch(pExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: rprintf(_T("an Access Violation")); break; case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: rprintf(_T("an Array Bound Exceeded")); break; case EXCEPTION_BREAKPOINT: rprintf(_T("a Breakpoint")); break; case EXCEPTION_DATATYPE_MISALIGNMENT: rprintf(_T("a Datatype Misalignment")); break; case EXCEPTION_FLT_DENORMAL_OPERAND: rprintf(_T("a Float Denormal Operand")); break; case EXCEPTION_FLT_DIVIDE_BY_ZERO: rprintf(_T("a Float Divide By Zero")); break; case EXCEPTION_FLT_INEXACT_RESULT: rprintf(_T("a Float Inexact Result")); break; case EXCEPTION_FLT_INVALID_OPERATION: rprintf(_T("a Float Invalid Operation")); break; case EXCEPTION_FLT_OVERFLOW: rprintf(_T("a Float Overflow")); break; case EXCEPTION_FLT_STACK_CHECK: rprintf(_T("a Float Stack Check")); break; case EXCEPTION_FLT_UNDERFLOW: rprintf(_T("a Float Underflow")); break; case EXCEPTION_GUARD_PAGE: rprintf(_T("a Guard Page")); break; case EXCEPTION_ILLEGAL_INSTRUCTION: rprintf(_T("an Illegal Instruction")); break; case EXCEPTION_IN_PAGE_ERROR: rprintf(_T("an In Page Error")); break; case EXCEPTION_INT_DIVIDE_BY_ZERO: rprintf(_T("an Integer Divide By Zero")); break; case EXCEPTION_INT_OVERFLOW: rprintf(_T("an Integer Overflow")); break; case EXCEPTION_INVALID_DISPOSITION: rprintf(_T("an Invalid Disposition")); break; case EXCEPTION_INVALID_HANDLE: rprintf(_T("an Invalid Handle")); break; case EXCEPTION_NONCONTINUABLE_EXCEPTION: rprintf(_T("a Noncontinuable Exception")); break; case EXCEPTION_PRIV_INSTRUCTION: rprintf(_T("a Privileged Instruction")); break; case EXCEPTION_SINGLE_STEP: rprintf(_T("a Single Step")); break; case EXCEPTION_STACK_OVERFLOW: rprintf(_T("a Stack Overflow")); break; case DBG_CONTROL_C: rprintf(_T("a Control+C")); break; case DBG_CONTROL_BREAK: rprintf(_T("a Control+Break")); break; case DBG_TERMINATE_THREAD: rprintf(_T("a Terminate Thread")); break; case DBG_TERMINATE_PROCESS: rprintf(_T("a Terminate Process")); break; case RPC_S_UNKNOWN_IF: rprintf(_T("an Unknown Interface")); break; case RPC_S_SERVER_UNAVAILABLE: rprintf(_T("a Server Unavailable")); break; default: /* static TCHAR szBuffer[512] = { 0 }; // If not one of the "known" exceptions, try to get the string // from NTDLL.DLL's message table. FormatMessage(FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_HMODULE, GetModuleHandle(_T("NTDLL.DLL")), dwCode, 0, szBuffer, sizeof(szBuffer), 0); */ rprintf(_T("an Unknown [0x%lX] Exception"), pExceptionRecord->ExceptionCode); break; } // Now print information about where the fault occured rprintf(_T(" at location %08x"), (DWORD) pExceptionRecord->ExceptionAddress); if((hModule = (HMODULE) GetModuleBase((DWORD) pExceptionRecord->ExceptionAddress)) && GetModuleFileName(hModule, szModule, sizeof(szModule))) rprintf(_T(" in module %s"), szModule); // If the exception was an access violation, print out some additional information, to the error log and the debugger. if(pExceptionRecord->ExceptionCode == EXCEPTION_ACCESS_VIOLATION && pExceptionRecord->NumberParameters >= 2) rprintf(" %s location %08x", pExceptionRecord->ExceptionInformation[0] ? "Writing to" : "Reading from", pExceptionRecord->ExceptionInformation[1]); rprintf(".\r\n\r\n"); pContext = pExceptionInfo->ContextRecord; #ifdef _M_IX86 // Intel Only! // Show the registers rprintf(_T("Registers:\r\n")); if(pContext->ContextFlags & CONTEXT_INTEGER) rprintf( _T("eax=%08lx ebx=%08lx ecx=%08lx edx=%08lx esi=%08lx edi=%08lx\r\n"), pContext->Eax, pContext->Ebx, pContext->Ecx, pContext->Edx, pContext->Esi, pContext->Edi ); if(pContext->ContextFlags & CONTEXT_CONTROL) rprintf( _T("eip=%08lx esp=%08lx ebp=%08lx iopl=%1lx %s %s %s %s %s %s %s %s %s %s\r\n"), pContext->Eip, pContext->Esp, pContext->Ebp, (pContext->EFlags >> 12) & 3, // IOPL level value pContext->EFlags & 0x00100000 ? "vip" : " ", // VIP (virtual interrupt pending) pContext->EFlags & 0x00080000 ? "vif" : " ", // VIF (virtual interrupt flag) pContext->EFlags & 0x00000800 ? "ov" : "nv", // VIF (virtual interrupt flag) pContext->EFlags & 0x00000400 ? "dn" : "up", // OF (overflow flag) pContext->EFlags & 0x00000200 ? "ei" : "di", // IF (interrupt enable flag) pContext->EFlags & 0x00000080 ? "ng" : "pl", // SF (sign flag) pContext->EFlags & 0x00000040 ? "zr" : "nz", // ZF (zero flag) pContext->EFlags & 0x00000010 ? "ac" : "na", // AF (aux carry flag) pContext->EFlags & 0x00000004 ? "po" : "pe", // PF (parity flag) pContext->EFlags & 0x00000001 ? "cy" : "nc" // CF (carry flag) ); if(pContext->ContextFlags & CONTEXT_SEGMENTS) { rprintf( _T("cs=%04lx ss=%04lx ds=%04lx es=%04lx fs=%04lx gs=%04lx"), pContext->SegCs, pContext->SegSs, pContext->SegDs, pContext->SegEs, pContext->SegFs, pContext->SegGs, pContext->EFlags ); if(pContext->ContextFlags & CONTEXT_CONTROL) rprintf( _T(" efl=%08lx"), pContext->EFlags ); } else if(pContext->ContextFlags & CONTEXT_CONTROL) rprintf( _T(" efl=%08lx"), pContext->EFlags ); rprintf(_T("\r\n\r\n")); #endif #else pContext = pExceptionInfo->ContextRecord; #endif //SHOW_EXTRA_REPORT_STUFF StackBackTrace(GetCurrentProcess(), GetCurrentThread(), pContext); } #include #include #include // Entry point where control comes on an unhandled exception LONG WINAPI DrMingwGenerateStacktrace(PEXCEPTION_POINTERS pExceptionInfo, const char* report_filename ) { static BOOL bBeenHere = FALSE; strcpy(szLogFileName,report_filename); if(!bBeenHere) { UINT fuOldErrorMode; bBeenHere = TRUE; fuOldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); hReportFile = CreateFile( szLogFileName, GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_FLAG_WRITE_THROUGH, 0 ); #ifdef HAVE_BFD bfd_set_error_handler((bfd_error_handler_type) rprintf); #endif /* HAVE_BFD */ if (hReportFile) { SetFilePointer(hReportFile, 0, 0, FILE_END); GenerateExceptionReport(pExceptionInfo); CloseHandle(hReportFile); hReportFile = 0; } if(fuOldErrorMode & SEM_NOGPFAULTERRORBOX) { TCHAR szBuffer[4196]; wsprintf(szBuffer, _T("An unhandled exception ocurred\r\nSee %s for more details\r\n"), szLogFileName); MessageBox( NULL, szBuffer, _T("Error"), MB_OK | MB_ICONERROR ); } SetErrorMode(fuOldErrorMode); } if(prevExceptionFilter) return prevExceptionFilter(pExceptionInfo); else return EXCEPTION_CONTINUE_SEARCH; } springlobby-0.169/src/stacktrace.cpp0000600000176000000410000000273212105760300021042 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: StackTrace // #include "stacktrace.h" #include "utils/conversion.h" #if defined(ENABLE_DEBUG_REPORT) #if wxUSE_STACKWALKER void StackTrace::OnStackFrame ( const wxStackFrame& frame ) { // StackTraceString += wxFormat( _T("(%d) "), frame.GetLevel() ); // (frame_level_number) // PartToHash += wxFormat( _T("(%d) "), frame.GetLevel() ); StackTraceString += wxFormat( _T("%p ") ) % frame.GetAddress(); // [calling_address] StackTraceString += frame.GetName(); // function_name // PartToHash += frame.GetName() + _T("\n"); if ( frame.HasSourceLocation() ) { int paramcount = frame.GetParamCount(); if ( paramcount == 0 ){ StackTraceString += _T(" "); } else { StackTraceString += _T("("); while ( paramcount > 0 ) { wxString type; wxString name; wxString value; if ( frame.GetParam( paramcount, &type, &name, &value) ) // data_type var_name = value, { StackTraceString += _T(" ") + type; StackTraceString += _T(" ") + name; StackTraceString += _T(" = ") + value; } paramcount--; if ( paramcount > 0 ) StackTraceString += _T(","); } } StackTraceString += _T(" ") + frame.GetFileName() + wxFormat( _T(":%d") ) % frame.GetLine(); // File: file_name : line_number } StackTraceString += _T("\n"); } #endif //__MSW #endif //#if defined(ENABLE_DEBUG_REPORT) springlobby-0.169/src/stacktrace.h0000600000176000000410000000161412105760300020505 0ustar buildbotwww-data00000000000000#ifndef STACKTRACE_H_INCLUDED #define STACKTRACE_H_INCLUDED #if defined(ENABLE_DEBUG_REPORT) #ifdef __WXMSW__ #include #ifdef __cplusplus extern "C" { #endif LONG WINAPI DrMingwGenerateStacktrace(PEXCEPTION_POINTERS pExceptionInfo, const char* report_filename); #ifdef __cplusplus } #endif #else #include #include #if wxUSE_STACKWALKER class StackTrace : public wxStackWalker { public: StackTrace() {} ~StackTrace() {} wxString GetStackTrace() { return StackTraceString; } private: void OnStackFrame( const wxStackFrame& frame ); wxString StackTraceString; wxString PartToHash; }; #else #error "No usable stacktrace config, set ENABLE_DEBUG_REPORT=OFF in cmake" #endif //#if wxUSE_STACKWALKER #endif // __WXMSW__ #endif //#if defined(ENABLE_DEBUG_REPORT) #endif // SPRINGLOBBY_HEADERGUARD_STACKTRACE_H_INCLUDED springlobby-0.169/src/tasserver.cpp0000600000176000000410000022531212105760300020735 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include #include #include #include #include #include #include #include #include #include #include #include #include "base64.h" #include "utils/md5.h" #include "tasserver.h" #include "springunitsync.h" #include "user.h" #include "utils/debug.h" #include "utils/tasutil.h" #include "utils/conversion.h" #include "utils/platform.h" #include "updater/updatehelper.h" #include "battle.h" #include "serverevents.h" #include "socket.h" #include "channel/channel.h" #include "tasservertokentable.h" #include "pingthread.h" // for SL_MAIN_ICON #include "utils/customdialogs.h" #include "settings.h" const int udp_reply_timeout=10; //! @brief Struct used internally by the TASServer class to get client status information. struct TASClientstatus { unsigned int in_game : 1; unsigned int away : 1; unsigned int rank : 3; unsigned int moderator : 1; unsigned int bot : 1; }; //! @brief Union used internally by the TASServer class to get client status information. union UTASClientStatus { unsigned char byte; TASClientstatus tasdata; }; //! @brief Struct used internally by the TASServer class to get battle status information. //!TODO is that last member necessary? throws a warning baout bein used uninited struct TASBattleStatus { unsigned int : 1; unsigned int ready : 1; unsigned int team : 4; unsigned int ally : 4; unsigned int player : 1; unsigned int handicap: 7; unsigned int : 4; unsigned int sync : 2; unsigned int side : 4; unsigned int : 4; }; //! @brief Union used internally by the TASServer class to get battle status information. union UTASBattleStatus { int data; TASBattleStatus tasdata; }; //! @brief struct used internallby by tasserver to convert offer file bitfields struct OfferFileData { bool autoopen : 1; bool closelobbyondownload : 1; bool disconnectonrefuse : 1; }; //! @brief Union used internally by the TASServer class to get battle status information. union UTASOfferFileData { int data; OfferFileData tasdata; }; struct TASColor { unsigned int red : 8; unsigned int green : 8; unsigned int blue : 8; unsigned int zero: 8; }; union UTASColor { int data; TASColor color; }; /* myteamcolor: Should be 32-bit signed integer in decimal form (e.g. 255 and not FF) where each color channel should occupy 1 byte (e.g. in hexdecimal: $00BBGGRR, B = blue, G = green, R = red). Example: 255 stands for $000000FF. */ UserStatus ConvTasclientstatus( TASClientstatus ); UserBattleStatus ConvTasbattlestatus( TASBattleStatus ); TASBattleStatus ConvTasbattlestatus( UserBattleStatus ); IBattle::StartType IntToStartType( int start ); NatType IntToNatType( int nat ); IBattle::GameType IntToGameType( int gt ); TASServer::TASServer(int serverEventsMode): m_ping_thread(0), m_ser_ver(0), m_connected(false), m_online(false), m_debug_dont_catch( false ), m_id_transmission( true ), m_redirecting( false ), m_buffer(_T("")), m_last_udp_ping(0), m_last_net_packet(0), m_udp_private_port(0), m_battle_id(-1), m_server_lanmode(false), m_account_id_count(0), m_do_finalize_join_battle(false), m_finalize_join_battle_id(-1), m_token_transmission( false ) { m_se = IServerEvents::getInstance( *this, IServerEvents::ServerEventsMode(serverEventsMode) ); FillAliasMap(); m_relay_host_manager_list.Clear(); } TASServer::~TASServer() { Disconnect(); delete m_se; } bool TASServer::ExecuteSayCommand( const wxString& cmd ) { wxArrayString arrayparams = wxStringTokenize( cmd, _T(" ") ); if ( arrayparams.GetCount() == 0 ) return false; wxString subcmd = arrayparams[0]; wxString params = cmd.AfterFirst( ' ' ); if ( subcmd == _T("/ingame") ) { if ( arrayparams.GetCount() != 2 ) return false; SendCmd( _T("GETINGAMETIME"), arrayparams[1] ); return true; } else if ( subcmd == _T("/kick") ) { if ( arrayparams.GetCount() < 2 ) return false; SendCmd( _T("KICKUSER"), params ); return true; } else if ( subcmd == _T("/ban") ) { if ( arrayparams.GetCount() < 2 ) return false; SendCmd( _T("BAN"), params ); return true; } else if ( subcmd == _T("/unban") ) { if ( arrayparams.GetCount() != 2 ) return false; SendCmd( _T("UNBAN"), arrayparams[1] ); return true; } else if ( subcmd == _T("/banlist") ) { SendCmd( _T("BANLIST") ); return true; } else if ( subcmd == _T("/topic") ) { params.Replace( _T("\n"), _T("\\n") ); SendCmd( _T("CHANNELTOPIC"), params ); return true; } else if ( subcmd == _T("/chanmsg") ) { if ( arrayparams.GetCount() < 2 ) return false; SendCmd( _T("CHANNELMESSAGE"), params ); return true; } else if ( subcmd == _T("/ring") ) { if ( arrayparams.GetCount() != 2 ) return false; SendCmd( _T("RING"), arrayparams[1] ); return true; } else if ( subcmd == _T("/ip") ) { if ( arrayparams.GetCount() != 2 ) return false; SendCmd( _T("GETIP"), arrayparams[1] ); return true; } else if ( subcmd == _T("/mute") ) { if ( arrayparams.GetCount() < 4 ) return false; if ( arrayparams.GetCount() > 5 ) return false; SendCmd( _T("MUTE"), params ); return true; } else if ( subcmd == _T("/unmute") ) { if ( arrayparams.GetCount() != 3 ) return false; SendCmd( _T("UNMUTE"), arrayparams[1] + _T(" ") + arrayparams[2] ); return true; } else if ( subcmd == _T("/mutelist") ) { if ( arrayparams.GetCount() != 2 ) return false; SendCmd( _T("MUTELIST"), arrayparams[1] ); return true; } else if ( subcmd == _T("/lastlogin") ) { if ( arrayparams.GetCount() != 2 ) return false; SendCmd( _T("GETLASTLOGINTIME"), arrayparams[1] ); return true; } else if ( subcmd == _T("/findip") ) { if ( arrayparams.GetCount() != 2 ) return false; SendCmd( _T("FINDIP"), arrayparams[1] ); return true; } else if ( subcmd == _T("/lastip") ) { if ( arrayparams.GetCount() != 2 ) return false; SendCmd( _T("GETLASTIP"), arrayparams[1] ); return true; } else if ( subcmd == _T("/rename") ) { if ( arrayparams.GetCount() != 2 ) return false; SendCmd( _T("RENAMEACCOUNT"), arrayparams[1] ); sett().SetServerAccountNick( sett().GetDefaultServer(), arrayparams[1] ); // this code assumes that default server hasn't changed since login ( like it should atm ) return true; } else if ( subcmd == _T("/testmd5") ) { ExecuteCommand( _T("SERVERMSG"), GetPasswordHash(params) ); return true; } else if ( subcmd == _T("/hook") ) { SendCmd( _T("HOOK"), params ); return true; } else if ( subcmd == _T("/quit") ) { Disconnect(); return true; } else if ( subcmd == _T("/changepassword2") ) { if ( arrayparams.GetCount() < 1 ) return false; wxString oldpassword = sett().GetServerAccountPass( GetServerName() ); wxString newpassword = GetPasswordHash( params ); if ( oldpassword.IsEmpty() || !sett().GetServerAccountSavePass(GetServerName()) ) { m_se->OnServerMessage(_("There is no saved password for this account, please use /changepassword")); return true; } SendCmd( _T("CHANGEPASSWORD"), oldpassword + _T(" ") + newpassword ); return true; } else if ( subcmd == _T("/changepassword") ) { if ( arrayparams.GetCount() != 2 ) return false; wxString oldpassword = GetPasswordHash(arrayparams[1]); wxString newpassword = GetPasswordHash( arrayparams[2] ); SendCmd( _T("CHANGEPASSWORD"), oldpassword + _T(" ") + newpassword ); return true; } else if ( subcmd == _T("/ping") ) { Ping(); return true; } return false; } void TASServer::Connect( const wxString& servername ,const wxString& addr, const int port ) { m_server_name = servername; m_addr=addr; m_buffer = _T(""); m_sock->Connect( addr, port ); m_sock->SetSendRateLimit( 800 ); // 1250 is the server limit but 800 just to make sure :) m_connected = false; m_online = false; m_redirecting = false; m_agreement = _T(""); m_crc.ResetCRC(); m_last_net_packet = time( 0 ); wxString handle = m_sock->GetHandle(); if ( !handle.IsEmpty() ) m_crc.UpdateData( STD_STRING( wxString( handle + m_addr ) ) ); } void TASServer::Disconnect() { if (!m_connected) { return; } SendCmd( _T("EXIT") ); // EXIT command for new protocol compatibility m_sock->Disconnect(); } bool TASServer::IsConnected() { return (m_sock->State() == SS_Open); } bool TASServer::Register( const wxString& addr, const int port, const wxString& nick, const wxString& password, wxString& reason ) { wxLogDebugFunc( _T("") ); FakeNetClass temp; Socket tempsocket( temp, true, true ); tempsocket.Connect( addr, port ); if ( tempsocket.State() != SS_Open ) return false; wxString data = tempsocket.Receive().BeforeLast(_T('\n')); if ( data.Find( _T("\r") ) != wxNOT_FOUND ) data = data.BeforeLast(_T('\r')); if ( GetWordParam( data ) != _T("TASServer") ) return false; tempsocket.Send( _T("REGISTER ") + nick + _T(" ") + GetPasswordHash( password ) + _T("\n") ); data = tempsocket.Receive().BeforeLast(_T('\n')); tempsocket.Disconnect(); if ( data.Find( _T("\r") ) != wxNOT_FOUND ) data = data.BeforeLast(_T('\r')); if ( data.IsEmpty() ) { reason = _("Connection timed out"); return false; } wxString cmd = GetWordParam( data ); if ( cmd == _T("REGISTRATIONACCEPTED")) { return true; } else if ( cmd == _T("REGISTRATIONDENIED") ) { reason = data; return false; } reason = _("Unknown answer from server"); return false; } bool TASServer::IsPasswordHash( const wxString& pass ) const { return pass.length() == 24 && pass[22] == '=' && pass[23] == '='; } wxString TASServer::GetPasswordHash( const wxString& pass ) const { if ( IsPasswordHash(pass) ) return pass; md5_state_t state; md5_byte_t digest[16]; char hex_output[16*2 + 1]; int di; std::string str = STD_STRING(pass); char* cstr = new char [str.size()+1]; strcpy (cstr, str.c_str()); md5_init(&state); md5_append(&state, (const md5_byte_t *) cstr, strlen( cstr )); md5_finish(&state, digest); for (di = 0; di < 16; ++di) sprintf(hex_output + di * 2, "%02x", digest[di]); wxString coded = wxBase64::Encode( digest, 16 ); return coded; } User& TASServer::GetMe() { return GetUser( m_user ); } const User& TASServer::GetMe() const { return GetUser( m_user ); } wxString Useragent() { return sett().Get( _T("Useragent"), GetAppName() ) + _T(" ") + sett().Get( _T("Userversion"), GetSpringLobbyVersion(false) ); } void TASServer::Login() { wxLogDebugFunc( _T("") ); wxString pass = GetPasswordHash( m_pass ); wxString protocol = TowxString( m_crc.GetCRC() ); wxString localaddr; localaddr = m_sock->GetLocalAddress(); if ( localaddr.IsEmpty() ) localaddr = _T("*"); m_id_transmission = false; wxFormat login_cmd( _T("%s %s %s %s %s\t%s\ta m sp") ); SendCmd ( _T("LOGIN"), (login_cmd % m_user % pass % GetHostCPUSpeed() % localaddr % Useragent() % protocol).str() ); m_id_transmission = true; } void TASServer::Logout() { wxLogDebugFunc( _T("") ); Disconnect(); } bool TASServer::IsOnline() const { if ( !m_connected ) return false; return m_online; } void TASServer::RequestChannels() { SendCmd( _T("CHANNELS") ); } void TASServer::AcceptAgreement() { SendCmd( _T("CONFIRMAGREEMENT") ); } void TASServer::Update( int mselapsed ) { m_sock->OnTimer( mselapsed ); if ( !m_connected ) // We are not formally connected yet, but might be. { if ( IsConnected() ) { m_last_udp_ping = time( 0 ); m_connected = true; } return; } else // We are connected already. { if ( !IsConnected() ) return; time_t now = time( 0 ); //disabled until better timing is miplemented // if ( ( m_last_net_packet > 0 ) && ( ( now - m_last_net_packet ) > PING_TIMEOUT ) ) // { // m_se->OnServerMessage( _("Timeout assumed, disconnecting") ); // Disconnect(); // } // joining battle with nat traversal: // if we havent finalized joining yet, and udp_reply_timeout seconds has passed since // we did UdpPing(our name) , join battle anyway, but with warning message that nat failed. // (if we'd receive reply from server, we'd finalize already) // if (m_do_finalize_join_battle&&(m_last_udp_ping+udp_reply_timeoutGetNatType() == NAT_Hole_punching || ( battle->GetNatType() == NAT_Fixed_source_ports ) ) && !battle->GetInGame() ) { if ( battle->IsFounderMe() ) { UdpPingTheServer(m_user); UdpPingAllClients(); } else { UdpPingTheServer(m_user); } } else { // old logging for debug //if(battle->GetNatType()!=NAT_Hole_punching)wxLogMessage( _T("pinging: current battle not using NAT_Hole_punching") ); //if(battle->GetInGame())wxLogMessage( _T("pinging: current battle is in game") ); } } } } } } void TASServer::ExecuteCommand( const wxString& in ) { wxLogMessage( _T("%s"), in.c_str() ); wxString cmd; wxString params = in; long replyid = 0; if ( in.empty() ) return; try { ASSERT_LOGIC( params.AfterFirst( '\n' ).IsEmpty(), _T("losing data") ); } catch (...) { return; } if ( params[0] == '#' ) { wxString id = params.BeforeFirst( ' ' ).AfterFirst( '#' ); params = params.AfterFirst( ' ' ); id.ToLong( &replyid ); } cmd = params.BeforeFirst( ' ' ); params = params.AfterFirst( ' ' ); // decode message if tokenized wxString copy = cmd; cmd = DecodeTokenMessage( cmd ); if ( copy != cmd ) m_token_transmission = true; cmd.MakeUpper(); if ( m_debug_dont_catch ) { ExecuteCommand( cmd, params, replyid ); } else { try { ExecuteCommand( cmd, params, replyid ); } catch ( ... ) // catch everything so the app doesn't crash, may makes odd beahviours but it's better than crashing randomly for normal users { } } } void TASServer::ExecuteCommand( const wxString& cmd, const wxString& inparams, int replyid ) { wxString params = inparams; int pos, cpu, id, nat, port, maxplayers, rank, specs, units, top, left, right, bottom, ally, type; bool haspass,lanmode = false; wxString hash; wxString nick, contry, host, map, title, mod, channel, error, msg, owner, ai, supported_spring_version, topic; //NatType ntype; UserStatus cstatus; UTASClientStatus tasstatus; UTASBattleStatus tasbstatus; UserBattleStatus bstatus; UTASColor color; if ( cmd == _T("TASSERVER")) { mod = GetWordParam( params ); mod.ToDouble( &m_ser_ver ); supported_spring_version = GetWordParam( params ); m_nat_helper_port = (unsigned long)GetIntParam( params ); lanmode = GetBoolParam( params ); m_server_lanmode = lanmode; m_se->OnConnected( m_server_name, mod, (m_ser_ver > 0), supported_spring_version, lanmode ); } else if ( cmd == _T("ACCEPTED") ) { if ( m_online ) return; // in case is the server sends WTF m_online = true; m_user = params; m_ping_thread = new PingThread( *this, 10000 ); m_ping_thread->Init(); m_se->OnLogin( ); } else if ( cmd == _T("MOTD") ) { m_se->OnMotd( params ); } else if ( cmd == _T("ADDUSER") ) { nick = GetWordParam( params ); contry = GetWordParam( params ); cpu = GetIntParam( params ); if ( params.IsEmpty() ) { // if server didn't send any account id to us, fill with an always increasing number id = m_account_id_count; m_account_id_count++; } else { id = GetIntParam( params ); } m_se->OnNewUser( nick, contry, cpu, TowxString(id) ); if ( nick == m_relay_host_bot ) { RelayCmd( _T("OPENBATTLE"), m_delayed_open_command ); // relay bot is deployed, send host command m_delayed_open_command = _T(""); } } else if ( cmd == _T("CLIENTSTATUS") ) { nick = GetWordParam( params ); tasstatus.byte = GetIntParam( params ); cstatus = ConvTasclientstatus( tasstatus.tasdata ); m_se->OnUserStatus( nick, cstatus ); } else if ( cmd == _T("BATTLEOPENED") ) { id = GetIntParam( params ); type = GetIntParam( params ); nat = GetIntParam( params ); nick = GetWordParam( params ); host = GetWordParam( params ); port = GetIntParam( params ); maxplayers = GetIntParam( params ); haspass = GetBoolParam( params ); rank = GetIntParam( params ); hash = MakeHashUnsigned( GetWordParam( params ) ); map = GetSentenceParam( params ); title = GetSentenceParam( params ); mod = GetSentenceParam( params ); m_se->OnBattleOpened( id, (BattleType)type, IntToNatType( nat ), nick, host, port, maxplayers, haspass, rank, hash, map, title, mod ); if ( nick == m_relay_host_bot ) { GetBattle( id ).SetProxy( m_relay_host_bot ); JoinBattle( id, sett().GetLastHostPassword() ); // autojoin relayed host battles } } else if ( cmd == _T("JOINEDBATTLE") ) { id = GetIntParam( params ); nick = GetWordParam( params ); wxString userScriptPassword = GetWordParam( params ); m_se->OnUserJoinedBattle( id, nick, userScriptPassword ); } else if ( cmd == _T("UPDATEBATTLEINFO") ) { id = GetIntParam( params ); specs = GetIntParam( params ); haspass = GetBoolParam( params ); hash = MakeHashUnsigned( GetWordParam( params ) ); map = GetSentenceParam( params ); m_se->OnBattleInfoUpdated( id, specs, haspass, hash, map ); } else if ( cmd == _T("LOGININFOEND") ) { if ( sett().GetReportStats() ) { wxString version = GetSpringLobbyVersion(false); wxString aux = GetSpringLobbyAuxVersion(); aux.Replace( _T(" "), _T("") ); aux = _T(" ") + aux; wxString os = wxPlatformInfo::Get().GetOperatingSystemIdName(); os.Replace( _T(" "), _T("") ); wxString wxversion = wxVERSION_STRING; wxversion.Replace( _T(" "), _T("") ); wxString reportstring = _T("stats.report ") + version + _T(" ") + wxversion + _T(" ") + os + aux; if ( UserExists( _T("SL_bot") ) ) SayPrivate( _T("SL_bot"), reportstring ); } if ( UserExists( _T("RelayHostManagerList") ) ) SayPrivate( _T("RelayHostManagerList"), _T("!lm") ); m_se->OnLoginInfoComplete(); } else if ( cmd == _T("REMOVEUSER") ) { nick = GetWordParam( params ); if ( nick == m_user ) return; // to prevent peet doing nasty stuff to you, watch your back! m_se->OnUserQuit( nick ); } else if ( cmd == _T("BATTLECLOSED") ) { id = GetIntParam( params ); if ( m_battle_id == id ) m_relay_host_bot = _T(""); m_se->OnBattleClosed( id ); } else if ( cmd == _T("LEFTBATTLE") ) { id = GetIntParam( params ); nick = GetWordParam( params ); m_se->OnUserLeftBattle( id, nick ); } else if ( cmd == _T("PONG") ) { HandlePong( replyid ); } else if ( cmd == _T("JOIN") ) { channel = GetWordParam( params ); m_se->OnJoinChannelResult( true, channel, _T("") ); } else if ( cmd == _T("JOIN") ) { channel = GetWordParam( params ); error = GetSentenceParam( params ); m_se->OnJoinChannelResult( false, channel, error ); } else if ( cmd == _T("SAID") ) { channel = GetWordParam( params ); nick = GetWordParam( params ); m_se->OnChannelSaid( channel, nick, params ); } else if ( cmd == _T("JOINED") ) { channel = GetWordParam( params ); nick = GetWordParam( params ); m_se->OnUserJoinChannel( channel, nick ); } else if ( cmd == _T("LEFT") ) { channel = GetWordParam( params ); nick = GetWordParam( params ); msg = GetSentenceParam( params ); m_se->OnChannelPart( channel, nick, msg ); } else if ( cmd == _T("CHANNELTOPIC") ) { channel = GetWordParam( params ); nick = GetWordParam( params ); pos = GetIntParam( params ); params.Replace( _T("\\n"), _T("\n") ); m_se->OnChannelTopic( channel, nick, params, pos/1000 ); } else if ( cmd == _T("SAIDEX") ) { channel = GetWordParam( params ); nick = GetWordParam( params ); m_se->OnChannelAction( channel, nick, params ); } else if ( cmd == _T("CLIENTS") ) { channel = GetWordParam( params ); while ( (nick = GetWordParam( params )) != _T("") ) { m_se->OnChannelJoin( channel, nick ); } } else if ( cmd == _T("SAYPRIVATE") ) { nick = GetWordParam( params ); if ( ( ( nick == m_relay_host_bot ) || ( nick == m_relay_host_manager ) ) && params.StartsWith( _T("!") ) ) return; // drop the message if ( ( nick == _T("RelayHostManagerList") ) && ( params == _T("!lm") ) ) return;// drop the message if ( nick == _T("SL_bot") ) { if ( params.StartsWith( _T("stats.report") ) ) return; } m_se->OnPrivateMessage( nick, params, true ); } else if ( cmd == _T("SAYPRIVATEEX") ) { nick = GetWordParam( params ); m_se->OnPrivateMessageEx( nick, params, true ); } else if ( cmd == _T("SAIDPRIVATE") ) { nick = GetWordParam( params ); if ( nick == m_relay_host_bot ) { if ( params.StartsWith(_T("JOINEDBATTLE")) ) { GetWordParam( params ); // skip first word, it's the message itself id = GetIntParam( params ); wxString usernick = GetWordParam( params ); wxString userScriptPassword = GetWordParam( params ); try { User& usr = GetUser(usernick); usr.BattleStatus().scriptPassword = userScriptPassword; Battle* battle = GetCurrentBattle(); if (battle) { if ( battle->CheckBan( usr ) ) return; } SetRelayIngamePassword( usr ); } catch (...) {} return; } } if ( nick == m_relay_host_manager ) { if ( params.StartsWith( _T("\001") ) ) // error code { m_se->OnServerMessageBox( params.AfterFirst( _T(' ') ) ); } else { m_relay_host_bot = params; } m_relay_host_manager = _T(""); return; } if ( nick == _T("RelayHostManagerList") ) { if ( params.StartsWith(_T("list ")) ) { wxString list = params.AfterFirst( _T(' ') ); m_relay_host_manager_list = wxStringTokenize( list, _T("\t") ); return; } } m_se->OnPrivateMessage( nick, params, false ); } else if ( cmd == _T("SAIDPRIVATEEX") ) { nick = GetWordParam( params ); m_se->OnPrivateMessageEx( nick, params, false ); } else if ( cmd == _T("JOINBATTLE") ) { id = GetIntParam( params ); hash = MakeHashUnsigned( GetWordParam( params ) ); m_battle_id = id; m_se->OnJoinedBattle( id, hash ); m_se->OnBattleInfoUpdated( m_battle_id ); try { if (GetBattle(id).IsProxy()) RelayCmd(_T("SUPPORTSCRIPTPASSWORD")); // send flag to relayhost marking we support script passwords } catch(...) {} } else if ( cmd == _T("CLIENTBATTLESTATUS") ) { nick = GetWordParam( params ); tasbstatus.data = GetIntParam( params ); bstatus = ConvTasbattlestatus( tasbstatus.tasdata ); color.data = GetIntParam( params ); bstatus.colour = wxColour( color.color.red, color.color.green, color.color.blue ); m_se->OnClientBattleStatus( m_battle_id, nick, bstatus ); } else if ( cmd == _T("ADDSTARTRECT") ) { //ADDSTARTRECT allyno left top right bottom ally = GetIntParam( params ); left = GetIntParam( params ); top = GetIntParam( params ); right = GetIntParam( params ); bottom = GetIntParam( params );; m_se->OnBattleStartRectAdd( m_battle_id, ally, left, top, right, bottom ); } else if ( cmd == _T("REMOVESTARTRECT") ) { //REMOVESTARTRECT allyno ally = GetIntParam( params ); m_se->OnBattleStartRectRemove( m_battle_id, ally ); } else if ( cmd == _T("ENABLEALLUNITS") ) { //"ENABLEALLUNITS" params: "". m_se->OnBattleEnableAllUnits( m_battle_id ); } else if ( cmd == _T("ENABLEUNITS") ) { //ENABLEUNITS unitname1 unitname2 while ( (nick = GetWordParam( params )) !=_T( "") ) { m_se->OnBattleEnableUnit( m_battle_id, nick ); } } else if ( cmd == _T("DISABLEUNITS") ) { //"DISABLEUNITS" params: "arm_advanced_radar_tower arm_advanced_sonar_station arm_advanced_torpedo_launcher arm_dragons_teeth arm_energy_storage arm_eraser arm_fark arm_fart_mine arm_fibber arm_geothermal_powerplant arm_guardian" while ( (nick = GetWordParam( params )) != _T("") ) { m_se->OnBattleDisableUnit( m_battle_id, nick ); } } else if ( cmd == _T("CHANNEL") ) { channel = GetWordParam( params ); units = GetIntParam( params ); topic = GetSentenceParam( params ); m_se->OnChannelList( channel, units, topic ); } else if ( cmd == _T("ENDOFCHANNELS") ) { //Cmd: ENDOFCHANNELS params: } else if ( cmd == _T("REQUESTBATTLESTATUS") ) { m_se->OnRequestBattleStatus( m_battle_id ); } else if ( cmd == _T("SAIDBATTLE") ) { nick = GetWordParam( params ); m_se->OnSaidBattle( m_battle_id, nick, params ); } else if ( cmd == _T("SAIDBATTLEEX") ) { nick = GetWordParam( params ); m_se->OnBattleAction( m_battle_id, nick, params ); } else if ( cmd == _T("AGREEMENT") ) { msg = GetSentenceParam( params ); m_agreement += msg + _T("\n"); } else if ( cmd == _T("AGREEMENTEND") ) { m_se->OnAcceptAgreement( m_agreement ); m_agreement = _T(""); } else if ( cmd == _T("OPENBATTLE") ) { m_battle_id = GetIntParam( params ); m_se->OnHostedBattle( m_battle_id ); } else if ( cmd == _T("ADDBOT") ) { // ADDBOT BATTLE_ID name owner battlestatus teamcolor {AIDLL} id = GetIntParam( params ); nick = GetWordParam( params ); owner = GetWordParam( params ); tasbstatus.data = GetIntParam( params ); bstatus = ConvTasbattlestatus( tasbstatus.tasdata ); color.data = GetIntParam( params ); bstatus.colour = wxColour( color.color.red, color.color.green, color.color.blue ); ai = GetSentenceParam( params ); if ( ai.IsEmpty() ) { wxLogWarning( wxString::Format( _T("Recieved illegal ADDBOT (empty dll field) from %s for battle %d"), nick.c_str(), id ) ); ai = _T("INVALID|INVALID"); } if( usync().VersionSupports( SpringUnitSync::USYNC_GetSkirmishAI ) ) { if (ai.Find(_T('|')) != -1) { bstatus.aiversion = ai.AfterLast( _T('|') ); ai = ai.BeforeLast( _T('|') ); } bstatus.aishortname = ai; } else { bstatus.aishortname = ai; } bstatus.owner =owner; m_se->OnBattleAddBot( id, nick, bstatus ); } else if ( cmd == _T("UPDATEBOT") ) { id = GetIntParam( params ); nick = GetWordParam( params ); tasbstatus.data = GetIntParam( params ); bstatus = ConvTasbattlestatus( tasbstatus.tasdata ); color.data = GetIntParam( params ); bstatus.colour = wxColour( color.color.red, color.color.green, color.color.blue ); m_se->OnBattleUpdateBot( id, nick, bstatus ); //UPDATEBOT BATTLE_ID name battlestatus teamcolor } else if ( cmd == _T("REMOVEBOT") ) { id = GetIntParam( params ); nick = GetWordParam( params ); m_se->OnBattleRemoveBot( id, nick ); //REMOVEBOT BATTLE_ID name } else if ( cmd == _T("RING") ) { nick = GetWordParam( params ); m_se->OnRing( nick ); //RING username } else if ( cmd == _T("SERVERMSG") ) { m_se->OnServerMessage( params ); //SERVERMSG {message} } else if ( cmd == _T("JOINBATTLEFAILED") ) { msg = GetSentenceParam( params ); m_se->OnServerMessage( _T("Failed to join battle. ") + msg ); //JOINBATTLEFAILED {reason} } else if ( cmd == _T("OPENBATTLEFAILED") ) { msg = GetSentenceParam( params ); m_se->OnServerMessage( _T("Failed to host new battle on server. ") + msg ); //OPENBATTLEFAILED {reason} } else if ( cmd == _T("JOINFAILED") ) { channel = GetWordParam( params ); msg = GetSentenceParam( params ); m_se->OnServerMessage( _T("Failed to join channel #") + channel + _T(". ") + msg ); //JOINFAILED channame {reason} } else if ( cmd == _T("CHANNELMESSAGE") ) { channel = GetWordParam( params ); m_se->OnChannelMessage( channel, params ); //CHANNELMESSAGE channame {message} } else if ( cmd == _T("ACQUIREUSERID") ) { SendCmd( _T("USERID"), TowxString( m_crc.GetCRC() ) ); } else if ( cmd == _T("FORCELEAVECHANNEL") ) { channel = GetWordParam( params ); nick = GetWordParam( params ); msg = GetSentenceParam( params ); m_se->OnChannelPart( channel, GetMe().GetNick(), _T("Kicked by <") + nick + _T("> ") + msg ); //FORCELEAVECHANNEL channame username [{reason}] } else if ( cmd == _T("DENIED") ) { if ( m_online ) return; m_last_denied = msg = GetSentenceParam( params ); m_se->OnServerMessage( msg ); Disconnect(); //Command: "DENIED" params: "Already logged in". } else if ( cmd == _T("HOSTPORT") ) { unsigned int tmp_port = (unsigned int)GetIntParam( params ); m_se->OnHostExternalUdpPort( tmp_port ); //HOSTPORT port } else if ( cmd == _T("UDPSOURCEPORT") ) { unsigned int tmp_port = (unsigned int)GetIntParam( params ); m_se->OnMyExternalUdpSourcePort( tmp_port ); if (m_do_finalize_join_battle)FinalizeJoinBattle(); //UDPSOURCEPORT port } else if (cmd == _T("CLIENTIPPORT")) { // clientipport username ip port nick=GetWordParam( params ); wxString ip=GetWordParam(params); unsigned int u_port=(unsigned int)GetIntParam( params ); m_se->OnClientIPPort(nick, ip, u_port); } else if ( cmd == _T("SETSCRIPTTAGS") ) { wxString command; while ( (command = GetSentenceParam( params )) != _T("") ) { wxString key = command.BeforeFirst( '=' ).Lower(); wxString value = command.AfterFirst( '=' ); m_se->OnSetBattleInfo( m_battle_id, key, value ); } m_se->OnBattleInfoUpdated( m_battle_id ); // !! Command: "SETSCRIPTTAGS" params: "game/startpostype=0 game/maxunits=1000 game/limitdgun=0 game/startmetal=1000 game/gamemode=0 game/ghostedbuildings=-1 game/startenergy=1000 game/diminishingmms=0" } else if ( cmd == _T("SCRIPTSTART") ) { m_se->OnScriptStart( m_battle_id ); // !! Command: "SCRIPTSTART" params: "" } else if ( cmd == _T("SCRIPTEND") ) { m_se->OnScriptEnd( m_battle_id ); // !! Command: "SCRIPTEND" params: "" } else if ( cmd == _T("SCRIPT") ) { m_se->OnScriptLine( m_battle_id, params ); // !! Command: "SCRIPT" params: "[game]" } else if ( cmd == _T("FORCEQUITBATTLE")) { m_relay_host_bot = _T(""); m_se->OnKickedFromBattle(); } else if ( cmd == _T("BROADCAST")) { m_se->OnServerBroadcast( params ); } else if ( cmd == _T("SERVERMSGBOX")) { m_se->OnServerMessageBox( params ); } else if ( cmd == _T("REDIRECT") ) { if ( m_online ) return; wxString address = GetWordParam( params ); unsigned int u_port = GetIntParam( params ); if ( address.IsEmpty() ) return; if ( u_port == 0 ) u_port = DEFSETT_DEFAULT_SERVER_PORT; m_redirecting = true; m_se->OnRedirect( address, u_port , m_user, m_pass ); } else if ( cmd == _T("MUTELISTBEGIN") ) { m_current_chan_name_mutelist = GetWordParam( params ); m_se->OnMutelistBegin( m_current_chan_name_mutelist ); } else if ( cmd == _T("MUTELIST") ) { wxString mutee = GetWordParam( params ); wxString description = GetSentenceParam( params ); m_se->OnMutelistItem( m_current_chan_name_mutelist, mutee, description ); } else if ( cmd == _T("MUTELISTEND") ) { m_se->OnMutelistEnd( m_current_chan_name_mutelist ); m_current_chan_name_mutelist = _T(""); } // OFFERFILE options {filename} {url} {description} else if ( cmd == _T("OFFERFILE") ) { UTASOfferFileData parsingdata; parsingdata.data = GetIntParam( params ); wxString FileName = GetSentenceParam( params ); wxString url = GetSentenceParam( params ); wxString description = GetSentenceParam( params ); m_se->OnFileDownload( parsingdata.tasdata.autoopen, parsingdata.tasdata.closelobbyondownload, parsingdata.tasdata.disconnectonrefuse, FileName, url, description ); } else if ( cmd == _T("FORCEJOINBATTLE") ) { const int battleID = GetIntParam( params ); const wxString scriptpw = GetWordParam( params ); m_se->OnForceJoinBattle( battleID, scriptpw ); } else { wxLogMessage( _T("??? Cmd: %s params: %s"), cmd.c_str(), params.c_str() ); m_se->OnUnknownCommand( cmd, params ); } } void TASServer::RelayCmd( const wxString& command, const wxString& param ) { if ( m_relay_host_bot.IsEmpty() ) { wxLogWarning( _T("Trying to send relayed commands but no relay bot is set!") ); return; } wxString msg = _T("!"); // prefix comma,nds with ! if ( param.IsEmpty() ) msg << command.Lower(); else msg << command.Lower() << _T(" ") << param; SayPrivate( m_relay_host_bot, msg ); } void TASServer::SendCmd( const wxString& command, const wxString& param ) { wxString cmd, msg; if ( m_id_transmission ) { GetLastID()++; msg = msg + _T("#") + TowxString( GetLastID() ) + _T(" "); } if ( m_token_transmission ) { cmd = EncodeTokenMessage( command ); } else cmd = command; if ( param.IsEmpty() ) msg = msg + cmd + _T("\n"); else msg = msg + cmd + _T(" ") + param + _T("\n"); bool send_success = m_sock->Send( msg ); if ( command != _T("PING") ) { if ( send_success ) wxLogMessage( _T("sent: %s"), msg.c_str() ); else wxLogMessage( _T("sending: %s failed"), msg.c_str() ); } } void TASServer::SetRelayIngamePassword( const User& user ) { Battle* battle = GetCurrentBattle(); if (battle) { if ( !battle->GetInGame() ) return; } RelayCmd( _T("SETINGAMEPASSWORD"), user.GetNick() + _T(" ") + user.BattleStatus().scriptPassword ); } void TASServer::Ping() { SendCmd( _T("PING") ); TASPingListItem pli; pli.id = GetLastID(); pli.t = wxGetLocalTimeMillis(); GetPingList().push_back ( pli ); } void TASServer::HandlePong( int replyid ) { PingList& pinglistcopy = GetPingList(); PingList::iterator it; bool found = false; for ( it = pinglistcopy.begin(); it != pinglistcopy.end(); ++it ) { if (it->id == replyid ) { found = true; break; } } if ( found ) { m_se->OnPong( (wxGetLocalTimeMillis() - it->t) ); pinglistcopy.erase( it ); } } void TASServer::JoinChannel( const wxString& channel, const wxString& key ) { //JOIN channame [key] wxLogDebugFunc( channel ); m_channel_pw[channel] = key; m_id_transmission = false; // workaround a retarded server bug SendCmd ( _T("JOIN"), channel + _T(" ") + key ); m_id_transmission = true; } void TASServer::PartChannel( const wxString& channel ) { //LEAVE channame wxLogDebugFunc( channel ); SendCmd( _T("LEAVE"), channel ); } void TASServer::DoActionChannel( const wxString& channel, const wxString& msg ) { //SAYEX channame {message} wxLogDebugFunc( _T("") ); SendCmd( _T("SAYEX"), channel + _T(" ") + msg ); } void TASServer::SayChannel( const wxString& channel, const wxString& msg ) { //SAY channame {message} wxLogDebugFunc( _T("") ); SendCmd( _T("SAY"), channel + _T(" ") + msg ); } void TASServer::SayPrivate( const wxString& nick, const wxString& msg ) { //SAYPRIVATE username {message} wxLogDebugFunc( _T("") ); SendCmd( _T("SAYPRIVATE"), nick + _T(" ") + msg ); } void TASServer::DoActionPrivate( const wxString& nick, const wxString& msg ) { wxLogDebugFunc( _T("") ); SendCmd( _T("SAYPRIVATEEX"), nick + _T(" ") + msg ); } void TASServer::SayBattle( int /*unused*/, const wxString& msg ) { wxLogDebugFunc( _T("") ); SendCmd( _T("SAYBATTLE"), msg ); } void TASServer::DoActionBattle( int /*unused*/, const wxString& msg ) { wxLogDebugFunc( _T("") ); SendCmd( _T("SAYBATTLEEX"), msg ); } void TASServer::Ring( const wxString& nick ) { wxLogDebugFunc( _T("") ); try { ASSERT_EXCEPTION( m_battle_id != -1, _T("invalid m_battle_id value") ); ASSERT_EXCEPTION( BattleExists(m_battle_id), _T("battle doesn't exists") ); Battle& battle = GetBattle( m_battle_id ); ASSERT_EXCEPTION( battle.IsFounderMe(), _T("I'm not founder") ); if ( battle.IsProxy() ) { RelayCmd( _T("RING"), nick ); } else { SendCmd( _T("RING"), nick ); } } catch (...) { SendCmd( _T("RING"), nick ); } } void TASServer::ModeratorSetChannelTopic( const wxString& channel, const wxString& topic ) { wxString msgcopy = topic; msgcopy.Replace( _T("\n"), _T("\\n") ); SendCmd( _T("CHANNELTOPIC"), channel + _T(" ") + msgcopy ); } void TASServer::ModeratorSetChannelKey( const wxString& channel, const wxString& key) { SendCmd( _T("SETCHANNELKEY"), channel + _T(" ") + key ); } void TASServer::ModeratorMute( const wxString& channel, const wxString& nick, int duration, bool byip ) { SendCmd( _T("MUTE"), channel + _T(" ") + nick + _T(" ") + wxString::Format( _T("%d"), duration) + (byip?_T(" ip"):_T("") ) ); } void TASServer::ModeratorUnmute( const wxString& channel, const wxString& nick ) { SendCmd( _T("UNMUTE"), channel + _T(" ") + nick ); } void TASServer::ModeratorKick( const wxString& channel, const wxString& reason ) { SendCmd( _T("KICKUSER"), channel + _T(" ") + reason ); } void TASServer::ModeratorBan( const wxString& /*unused*/, bool /*unused*/ ) { // FIXME TASServer::ModeratorBan not yet implemented } void TASServer::ModeratorUnban( const wxString& /*unused*/ ) { // FIXME TASServer::ModeratorUnban not yet implemented } void TASServer::ModeratorGetIP( const wxString& nick ) { SendCmd( _T("GETIP"), nick ); } void TASServer::ModeratorGetLastLogin( const wxString& nick ) { SendCmd( _T("GETLASTLOGINTIME"), nick ); } void TASServer::ModeratorGetLastIP( const wxString& nick ) { SendCmd( _T("GETLASTIP"), nick ); } void TASServer::ModeratorFindByIP( const wxString& ipadress ) { SendCmd( _T("FINDIP"), ipadress ); } void TASServer::AdminGetAccountAccess( const wxString& /*unused*/ ) { // FIXME TASServer::AdminGetAccountAccess not yet implemented } void TASServer::AdminChangeAccountAccess( const wxString& /*unused*/, const wxString& /*unused*/ ) { // FIXME TASServer::AdminChangeAccountAccess not yet implemented } void TASServer::AdminSetBotMode( const wxString& nick, bool isbot ) { SendCmd( _T("SETBOTMODE"), nick + _T(" ") + (isbot?_T("1"):_T("0")) ); } void TASServer::HostBattle( BattleOptions bo, const wxString& password ) { wxLogDebugFunc( _T("") ); // to see ip addresses of users as they join (in the log), pretend you're hosting with NAT. int nat_type=bo.nattype; /* if(nat_type==0 && sett().GetShowIPAddresses()){ nat_type=1; }*/ wxLogMessage(_T("hosting with nat type %d"),nat_type); wxString cmd = wxString::Format( _T("0 %d "), nat_type ); cmd += (password.IsEmpty())?_T("*"):password; cmd += wxString::Format( _T(" %d %d "), bo.port, bo.maxplayers ); cmd += MakeHashSigned( bo.modhash ); cmd += wxString::Format( _T(" %d "), bo.rankneeded ); cmd += MakeHashSigned( bo.maphash ) + _T(" "); cmd += bo.mapname + _T("\t"); cmd += bo.description + _T("\t"); cmd += bo.modname; m_delayed_open_command = _T(""); if ( !bo.userelayhost ) { SendCmd( _T("OPENBATTLE"), cmd ); } else { if ( bo.relayhost.IsEmpty() ) { wxArrayString relaylist = GetRelayHostList(); unsigned int numbots = relaylist.GetCount(); if ( numbots > 0 ) { srand ( time(NULL) ); unsigned int choice = rand() % numbots; m_relay_host_manager = relaylist[choice]; m_delayed_open_command = cmd; SayPrivate( m_relay_host_manager, _T("!spawn") ); } } else { m_relay_host_manager = bo.relayhost; m_delayed_open_command = cmd; SayPrivate(bo.relayhost,_T("!spawn")); } } if (bo.nattype>0)UdpPingTheServer(m_user); // OPENBATTLE type natType password port maphash {map} {title} {modname} } void TASServer::JoinBattle( const int& battleid, const wxString& password ) { //JOINBATTLE BATTLE_ID [parameter] wxLogDebugFunc( _T("") ); m_finalize_join_battle_pw=password; m_finalize_join_battle_id=battleid; if (BattleExists(battleid)) { Battle *battle=&GetBattle(battleid); if (battle) { if ( ( battle->GetNatType() == NAT_Hole_punching ) || ( battle->GetNatType() == NAT_Fixed_source_ports ) ) { m_udp_private_port=sett().GetClientPort(); m_last_udp_ping = time(0); // its important to set time now, to prevent Update() // from calling FinalizeJoinBattle() on timeout. // m_do_finalize_join_battle must be set to true after setting time, not before. m_do_finalize_join_battle=true; for (int n=0;n<5;++n) // do 5 udp pings with tiny interval { UdpPingTheServer( m_user ); // sleep(0);// sleep until end of timeslice. } m_last_udp_ping = time(0);// set time again } else { // if not using nat, finalize now. m_do_finalize_join_battle=true; FinalizeJoinBattle(); } } else { wxLogMessage( _T("battle doesnt exist (null)") ); } } else { wxLogMessage( _T("battle doesnt exist") ); } //SendCmd( _T("JOINBATTLE"), wxString::Format( _T("%d"), battleid ) + _T(" ") + password ); } void TASServer::FinalizeJoinBattle() { if (m_do_finalize_join_battle) { srand ( time(NULL) ); wxString randomScriptPassword = wxString::Format(_T("%04x%04x"), rand()&0xFFFF, rand()&0xFFFF); SendCmd( _T("JOINBATTLE"), wxString::Format( _T("%d %s %s"), m_finalize_join_battle_id, m_finalize_join_battle_pw.c_str(), randomScriptPassword.c_str() ) ); m_do_finalize_join_battle=false; } } void TASServer::LeaveBattle( const int& /*unused*/ ) { //LEAVEBATTLE wxLogDebugFunc( _T("") ); m_relay_host_bot = _T(""); SendCmd( _T("LEAVEBATTLE") ); } void TASServer::SendHostInfo( HostInfo update ) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("invalid m_battle_id value") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); } catch (...) { return; } Battle& battle = GetBattle( m_battle_id ); try { ASSERT_LOGIC( battle.IsFounderMe(), _T("I'm not founder") ); } catch (...) { return; } //BattleOptions bo = battle.opts(); if ( ( update & ( IBattle::HI_Map | IBattle::HI_Locked | IBattle::HI_Spectators ) ) > 0 ) { // UPDATEBATTLEINFO SpectatorCount locked maphash {mapname} wxString cmd = wxString::Format( _T("%d %d "), battle.GetSpectators(), battle.IsLocked() ); cmd += MakeHashSigned( battle.LoadMap().hash ) + _T(" "); cmd += battle.LoadMap().name; if ( !battle.IsProxy() ) SendCmd( _T("UPDATEBATTLEINFO"), cmd ); else RelayCmd( _T("UPDATEBATTLEINFO"), cmd ); } if ( ( update & IBattle::HI_Send_All_opts ) > 0 ) { wxString cmd; OptionsWrapper::wxStringTripleVec optlistMap = battle.CustomBattleOptions().getOptions( OptionsWrapper::MapOption ); for (OptionsWrapper::wxStringTripleVec::const_iterator it = optlistMap.begin(); it != optlistMap.end(); ++it) { wxString newcmd = _T("game/mapoptions/") + it->first + _T("=") + it->second.second + _T("\t"); if ( cmd.size() + newcmd.size() > 900 ) // should be 1024 add margin for relayhost name and command itself { if ( !battle.IsProxy() ) SendCmd( _T("SETSCRIPTTAGS"), cmd ); else RelayCmd( _T("SETSCRIPTTAGS"), cmd ); cmd = _T(""); } cmd << newcmd; } OptionsWrapper::wxStringTripleVec optlistMod = battle.CustomBattleOptions().getOptions( OptionsWrapper::ModOption ); for (OptionsWrapper::wxStringTripleVec::const_iterator it = optlistMod.begin(); it != optlistMod.end(); ++it) { wxString newcmd = _T("game/modoptions/") + it->first + _T("=") + it->second.second + _T("\t"); if ( cmd.size() + newcmd.size() > 900 )// should be 1024 add margin for relayhost name and command itself { if ( !battle.IsProxy() ) SendCmd( _T("SETSCRIPTTAGS"), cmd ); else RelayCmd( _T("SETSCRIPTTAGS"), cmd ); cmd = _T(""); } cmd << newcmd; } OptionsWrapper::wxStringTripleVec optlistEng = battle.CustomBattleOptions().getOptions( OptionsWrapper::EngineOption ); for (OptionsWrapper::wxStringTripleVec::const_iterator it = optlistEng.begin(); it != optlistEng.end(); ++it) { wxString newcmd = _T("game/") + it->first + _T("=") + it->second.second + _T("\t"); if ( cmd.size() + newcmd.size() > 900 )// should be 1024 add margin for relayhost name and command itself { if ( !battle.IsProxy() ) SendCmd( _T("SETSCRIPTTAGS"), cmd ); else RelayCmd( _T("SETSCRIPTTAGS"), cmd ); cmd = _T(""); } cmd << newcmd; } if ( !battle.IsProxy() ) SendCmd( _T("SETSCRIPTTAGS"), cmd ); else RelayCmd( _T("SETSCRIPTTAGS"), cmd ); } if ( (update & IBattle::HI_StartRects) > 0 ) // Startrects should be updated. { unsigned int numrects = battle.GetLastRectIdx(); for ( unsigned int i = 0; i <= numrects; i++ ) // Loop through all, and remove updated or deleted. { wxString cmd; BattleStartRect sr = battle.GetStartRect( i ); if ( !sr.exist ) continue; if ( sr.todelete ) { if ( !battle.IsProxy() ) SendCmd( _T("REMOVESTARTRECT"), wxString::Format( _T("%d"), i ) ); else RelayCmd( _T("REMOVESTARTRECT"), wxString::Format( _T("%d"), i ) ); battle.StartRectRemoved( i ); } else if ( sr.toadd ) { if ( !battle.IsProxy() ) SendCmd( _T("ADDSTARTRECT"), wxString::Format( _T("%d %d %d %d %d"), sr.ally, sr.left, sr.top, sr.right, sr.bottom ) ); else RelayCmd( _T("ADDSTARTRECT"), wxString::Format( _T("%d %d %d %d %d"), sr.ally, sr.left, sr.top, sr.right, sr.bottom ) ); battle.StartRectAdded( i ); } else if ( sr.toresize ) { if ( !battle.IsProxy() ) { SendCmd( _T("REMOVESTARTRECT"), wxString::Format( _T("%d"), i ) ); SendCmd( _T("ADDSTARTRECT"), wxString::Format( _T("%d %d %d %d %d"), sr.ally, sr.left, sr.top, sr.right, sr.bottom ) ); } else { RelayCmd( _T("REMOVESTARTRECT"), wxString::Format( _T("%d"), i ) ); RelayCmd( _T("ADDSTARTRECT"), wxString::Format( _T("%d %d %d %d %d"), sr.ally, sr.left, sr.top, sr.right, sr.bottom ) ); } battle.StartRectResized( i ); } } } if ( (update & IBattle::HI_Restrictions) > 0 ) { std::map units = battle.RestrictedUnits(); if ( !battle.IsProxy() ) SendCmd( _T("ENABLEALLUNITS") ); else RelayCmd( _T("ENABLEALLUNITS") ); if ( !units.empty() ) { wxString msg; wxString scriptmsg; for ( std::map::const_iterator itor = units.begin(); itor != units.end(); ++itor ) { msg << itor->first + _T(" "); scriptmsg << _T("game/restrict/") + itor->first + _T("=") + TowxString(itor->second) + _T('\t'); // this is a serious protocol abuse, but on the other hand, the protocol fucking suck and it's unmaintained so it will do for now } if ( !battle.IsProxy() ) { SendCmd( _T("DISABLEUNITS"), msg ); SendCmd( _T("SETSCRIPTTAGS"), scriptmsg ); } else { RelayCmd( _T("DISABLEUNITS"), msg ); RelayCmd( _T("SETSCRIPTTAGS"), scriptmsg ); } } } } void TASServer::SendHostInfo( const wxString& Tag ) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("invalid m_battle_id value") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); } catch (...) { return; } Battle& battle = GetBattle( m_battle_id ); try { ASSERT_LOGIC( battle.IsFounderMe(), _T("I'm not founder") ); } catch (...) { return; } wxString cmd; long type; Tag.BeforeFirst( '_' ).ToLong( &type ); wxString key = Tag.AfterFirst( '_' ); if ( type == OptionsWrapper::MapOption ) { cmd << _T("game/mapoptions/") << key << _T("=") << battle.CustomBattleOptions().getSingleValue( key, OptionsWrapper::MapOption ); } else if ( type == OptionsWrapper::ModOption ) { cmd << _T("game/modoptions/") << key << _T("=") << battle.CustomBattleOptions().getSingleValue( key, OptionsWrapper::ModOption ); } else if ( type == OptionsWrapper::EngineOption ) { cmd << _T("game/") << key << _T("=") << battle.CustomBattleOptions().getSingleValue( key, OptionsWrapper::EngineOption ); } if ( !battle.IsProxy() ) SendCmd( _T("SETSCRIPTTAGS"), cmd ); else RelayCmd( _T("SETSCRIPTTAGS"), cmd ); } void TASServer::SendUserPosition( const User& user ) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("invalid m_battle_id value") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); Battle& battle = GetBattle( m_battle_id ); ASSERT_LOGIC( battle.IsFounderMe(), _T("I'm not founder") ); UserBattleStatus status = user.BattleStatus(); wxString msgx = _T("game/Team") + TowxString( status.team ) + _T("/StartPosX=") + TowxString( status.pos.x ); wxString msgy = _T("game/Team") + TowxString( status.team ) + _T("/StartPosY=") + TowxString( status.pos.y ); wxString netmessage = msgx + _T("\t") + msgy; if ( battle.IsProxy() ) { RelayCmd( _T("SETSCRIPTTAGS"), netmessage ); } else { SendCmd( _T("SETSCRIPTTAGS"), netmessage ); } } catch (...) { return; } } void TASServer::SendRaw( const wxString& raw ) { SendCmd( raw ); } void TASServer::RequestInGameTime( const wxString& nick ) { SendCmd( _T("GETINGAMETIME"), nick ); } Battle* TASServer::GetCurrentBattle() { try { ASSERT_EXCEPTION( m_battle_id != -1, _T("invalid m_battle_id value") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); } catch (...) { return NULL; } return &GetBattle( m_battle_id ); } void TASServer::SendMyBattleStatus( UserBattleStatus& bs ) { wxLogDebugFunc( _T("") ); UTASBattleStatus tasbs; tasbs.tasdata = ConvTasbattlestatus( bs ); UTASColor tascl; tascl.color.red = bs.colour.Red(); tascl.color.green = bs.colour.Green(); tascl.color.blue = bs.colour.Blue(); tascl.color.zero = 0; //MYBATTLESTATUS battlestatus myteamcolor SendCmd( _T("MYBATTLESTATUS"), wxString::Format( _T("%d %d"), tasbs.data, tascl.data ) ); } void TASServer::SendMyUserStatus() { wxLogDebugFunc( _T("") ); UserStatus& us = GetMe().Status(); UTASClientStatus taus; taus.tasdata.in_game = us.in_game; taus.tasdata.away = us.away; taus.tasdata.rank = us.rank; taus.tasdata.moderator = us.moderator; taus.tasdata.bot = us.bot; SendCmd( _T("MYSTATUS"), wxString::Format( _T("%d"), taus.byte ) ); } void TASServer::StartHostedBattle() { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("Invalid m_battle_id") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); } catch (...) { return; } Battle *battle=GetCurrentBattle(); if (battle) { if ( ( battle->GetNatType() == NAT_Hole_punching ) || ( battle->GetNatType() == NAT_Fixed_source_ports ) ) { UdpPingTheServer(m_user); for (int i=0;i<5;++i)UdpPingAllClients(); } } m_se->OnStartHostedBattle( m_battle_id ); } void TASServer::ForceSide( int battleid, User& user, int side ) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("Invalid m_battle_id") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); ASSERT_LOGIC( battleid == m_battle_id, _T("Not current battle") ); } catch (...) { return; } UserBattleStatus status = user.BattleStatus(); if ( &user == &GetMe() ) { status.side = side; SendMyBattleStatus( status ); return; } if ( status.IsBot() ) { status.side = side; UpdateBot( battleid, user, status ); } } void TASServer::ForceTeam( int battleid, User& user, int team ) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("Invalid m_battle_id") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); ASSERT_LOGIC( battleid == m_battle_id, _T("Not current battle") ); } catch (...) { return; } UserBattleStatus status = user.BattleStatus(); if ( status.IsBot() ) { status.team = team; UpdateBot( battleid, user, status ); return; } if ( &user == &GetMe() ) { status.team = team; SendMyBattleStatus( status ); return; } if ( !GetBattle(battleid).IsFounderMe() ) { DoActionBattle( battleid, _T("suggests that ") + user.GetNick() + _T(" changes to team #") + wxString::Format( _T("%d"), team + 1 ) + _T(".") ); return; } //FORCETEAMNO username teamno if( !GetBattle(battleid).IsProxy() ) SendCmd( _T("FORCETEAMNO"), user.GetNick() + wxString::Format(_T(" %d"), team ) ); else RelayCmd( _T("FORCETEAMNO"), user.GetNick() + wxString::Format(_T(" %d"), team ) ); } void TASServer::ForceAlly( int battleid, User& user, int ally ) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("Invalid m_battle_id") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); ASSERT_LOGIC( battleid == m_battle_id, _T("Not current battle") ); } catch (...) { return; } UserBattleStatus status = user.BattleStatus(); if ( status.IsBot() ) { status.ally = ally; UpdateBot( battleid, user, status ); return; } if ( &user == &GetMe() ) { status.ally = ally; SendMyBattleStatus( status ); return; } if ( !GetBattle(battleid).IsFounderMe() ) { DoActionBattle( battleid, _T("suggests that ") + user.GetNick() + _T(" changes to ally #") + wxString::Format( _T("%d"), ally + 1 ) + _T(".") ); return; } //FORCEALLYNO username teamno if( !GetBattle(battleid).IsProxy() ) SendCmd( _T("FORCEALLYNO"), user.GetNick() + wxString::Format( _T(" %d"), ally ) ); else RelayCmd( _T("FORCEALLYNO"), user.GetNick() + wxString::Format( _T(" %d"), ally ) ); } void TASServer::ForceColour( int battleid, User& user, const wxColour& col ) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("Invalid m_battle_id") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); ASSERT_LOGIC( battleid == m_battle_id, _T("Not current battle") ); } catch (...) { return; } UserBattleStatus status = user.BattleStatus(); if ( status.IsBot() ) { status.colour = col; UpdateBot( battleid, user, status ); return; } if ( &user == &GetMe() ) { status.colour = col; SendMyBattleStatus( status ); return; } if ( !GetBattle(battleid).IsFounderMe() ) { DoActionBattle( battleid, _T("sugests that ") + user.GetNick() + _T(" changes colour.") ); return; } UTASColor tascl; tascl.color.red = col.Red(); tascl.color.green = col.Green(); tascl.color.blue = col.Blue(); tascl.color.zero = 0; //FORCETEAMCOLOR username color if( !GetBattle(battleid).IsProxy() ) SendCmd( _T("FORCETEAMCOLOR"), user.GetNick() + _T(" ") + wxString::Format( _T("%d"), tascl.data ) ); else RelayCmd( _T("FORCETEAMCOLOR"), user.GetNick() + _T(" ") + wxString::Format( _T("%d"), tascl.data ) ); } void TASServer::ForceSpectator( int battleid, User& user, bool spectator ) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("Invalid m_battle_id") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); ASSERT_LOGIC( battleid == m_battle_id, _T("Not current battle") ); } catch (...) { return; } UserBattleStatus status = user.BattleStatus(); if ( status.IsBot() ) { status.spectator = spectator; UpdateBot( battleid, user, status ); return; } if ( &user == &GetMe() ) { status.spectator = spectator; SendMyBattleStatus( status ); return; } if ( !GetBattle(battleid).IsFounderMe() ) { if ( spectator ) DoActionBattle( battleid, _T("suggests that ") + user.GetNick() + _T(" becomes a spectator.") ); else DoActionBattle( battleid, _T("suggests that ") + user.GetNick() + _T(" plays.") ); return; } //FORCESPECTATORMODE username if( !GetBattle(battleid).IsProxy() ) SendCmd( _T("FORCESPECTATORMODE"), user.GetNick() ); else RelayCmd( _T("FORCESPECTATORMODE"), user.GetNick() ); } void TASServer::BattleKickPlayer( int battleid, User& user ) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("Invalid m_battle_id") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); ASSERT_LOGIC( battleid == m_battle_id, _T("Not current battle") ); } catch (...) { return; } UserBattleStatus status = user.BattleStatus(); if ( status.IsBot() ) { RemoveBot( battleid, user ); return; } if ( &user == &GetMe() ) { LeaveBattle( battleid ); return; } if ( !GetBattle(battleid).IsFounderMe() ) { DoActionBattle( battleid, _T("thinks ") + user.GetNick() + _T(" should leave.") ); return; } //KICKFROMBATTLE username if( !GetBattle(battleid).IsProxy() ) { user.BattleStatus().scriptPassword = wxString::Format(_T("%04x%04x"), rand()&0xFFFF, rand()&0xFFFF); // reset his password to something random, so he can't rejoin SetRelayIngamePassword( user ); SendCmd( _T("KICKFROMBATTLE"), user.GetNick() ); } else RelayCmd( _T("KICKFROMBATTLE"), user.GetNick() ); } void TASServer::SetHandicap( int battleid, User& user, int handicap) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("Invalid m_battle_id") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); ASSERT_LOGIC( battleid == m_battle_id, _T("Not current battle") ); } catch (...) { return; } UserBattleStatus status = user.BattleStatus(); if ( status.IsBot() ) { status.handicap = handicap; UpdateBot( battleid, user, status ); return; } if ( !GetBattle(battleid).IsFounderMe() ) { DoActionBattle( battleid, _T("thinks ") + user.GetNick() + _T(" should get a ") + wxString::Format( _T("%d"), handicap) + _T("% resource bonus") ); return; } //HANDICAP username value if( !GetBattle(battleid).IsProxy() ) SendCmd( _T("HANDICAP"), user.GetNick() + wxString::Format( _T(" %d"), handicap ) ); else RelayCmd( _T("HANDICAP"), user.GetNick() + wxString::Format( _T(" %d"), handicap ) ); } void TASServer::AddBot( int battleid, const wxString& nick, UserBattleStatus& status ) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("Invalid m_battle_id") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); ASSERT_LOGIC( battleid == m_battle_id, _T("Not current battle") ); } catch (...) { return; } UTASBattleStatus tasbs; tasbs.tasdata = ConvTasbattlestatus( status ); UTASColor tascl; tascl.color.red = status.colour.Red(); tascl.color.green = status.colour.Green(); tascl.color.blue = status.colour.Blue(); tascl.color.zero = 0; //ADDBOT name battlestatus teamcolor {AIDLL} wxString msg; wxString ailib; ailib += status.aishortname; if ( usync().VersionSupports( SpringUnitSync::USYNC_GetSkirmishAI ) ) ailib += _T("|") + status.aiversion; SendCmd( _T("ADDBOT"), nick + wxString::Format( _T(" %d %d "), tasbs.data, tascl.data ) + ailib ); } void TASServer::RemoveBot( int battleid, User& bot ) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("Invalid m_battle_id") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); ASSERT_LOGIC( battleid == m_battle_id, _T("Not current battle") ); } catch (...) { return; } Battle& battle = GetBattle( battleid ); ASSERT_LOGIC( &bot != 0, _T("Bot does not exist.") ); if ( !( battle.IsFounderMe() || ( bot.BattleStatus().owner == GetMe().GetNick() ) ) ) { DoActionBattle( battleid, _T("thinks the bot ") + bot.GetNick() + _T(" should be removed.") ); return; } //REMOVEBOT name if( !GetBattle(battleid).IsProxy() ) SendCmd( _T("REMOVEBOT"), bot.GetNick() ); else RelayCmd( _T("REMOVEBOT"), bot.GetNick() ); } void TASServer::UpdateBot( int battleid, User& bot, UserBattleStatus& status ) { wxLogDebugFunc( _T("") ); try { ASSERT_LOGIC( m_battle_id != -1, _T("Invalid m_battle_id") ); ASSERT_LOGIC( BattleExists(m_battle_id), _T("battle doesn't exists") ); ASSERT_LOGIC( battleid == m_battle_id, _T("Not current battle") ); } catch (...) { return; } UTASBattleStatus tasbs; tasbs.tasdata = ConvTasbattlestatus( status ); UTASColor tascl; tascl.color.red = status.colour.Red(); tascl.color.green = status.colour.Green(); tascl.color.blue = status.colour.Blue(); tascl.color.zero = 0; //UPDATEBOT name battlestatus teamcolor if( !GetBattle(battleid).IsProxy() ) SendCmd( _T("UPDATEBOT"), bot.GetNick() + wxString::Format( _T(" %d %d"), tasbs.data, tascl.data ) ); else RelayCmd( _T("UPDATEBOT"), bot.GetNick() + wxString::Format( _T(" %d %d"), tasbs.data, tascl.data ) ); } void TASServer::SendScriptToProxy( const wxString& script ) { wxArrayString strings = wxStringTokenize( script, _T("\n") ); int relaylenghtprefix = 10 + 1 + m_relay_host_bot.Len() + 2; // SAYPRIVATE + space + botname + space + exclamation mark lenght int lenght = script.size(); lenght += relaylenghtprefix + 11 + 1; // CLEANSCRIPT command size lenght += strings.GetCount() * ( relaylenghtprefix + 16 + 1 ); // num lines * APPENDSCRIPTLINE + space command size ( \n is already counted in script.size) lenght += relaylenghtprefix + 9 + 1; // STARTGAME command size int time = lenght / m_sock->GetSendRateLimit(); // calculate time in seconds to upload script DoActionBattle( m_battle_id, wxString::Format(_T("is preparing to start the game, game will start in approximately %d seconds"),time)); RelayCmd( _T("CLEANSCRIPT") ); wxStringTokenizer tkzr( script, _T("\n") ); while ( tkzr.HasMoreTokens() ) { wxString line = tkzr.GetNextToken(); RelayCmd( _T("APPENDSCRIPTLINE"), line ); } RelayCmd( _T("STARTGAME") ); } void TASServer::SendScriptToClients( const wxString& script ) { SendCmd( _T("SCRIPTSTART") ); wxStringTokenizer tkzr( script, _T("\n") ); while ( tkzr.HasMoreTokens() ) { wxString line = tkzr.GetNextToken(); SendCmd( _T("SCRIPT"), line ); } SendCmd( _T("SCRIPTEND") ); } void TASServer::OnConnected( Socket* /*unused*/ ) { wxLogDebugFunc( _T("") ); //TASServer* serv = (TASServer*)sock->GetUserdata(); m_last_udp_ping = time( 0 ); m_connected = true; m_online = false; m_token_transmission = false; m_relay_host_manager_list.Clear(); m_last_denied = _T(""); GetLastID() = 0; GetPingList().clear(); } void TASServer::OnDisconnected( Socket* /*unused*/ ) { wxLogDebugFunc( TowxString(m_connected) ); bool connectionwaspresent = m_online || !m_last_denied.IsEmpty() || m_redirecting; m_last_denied = _T(""); m_connected = false; m_online = false; m_redirecting = false; m_token_transmission = false; m_buffer = _T(""); m_relay_host_manager_list.Clear(); GetLastID() = 0; GetPingList().clear(); if ( m_ping_thread ) { m_ping_thread->Wait(); delete m_ping_thread; m_ping_thread = 0; } m_users.Nullify(); m_se->OnDisconnected( connectionwaspresent ); Server::OnDisconnected(); } void TASServer::OnDataReceived( Socket* sock ) { if ( sock == 0 ) return; m_last_net_packet = time( 0 ); wxString data = sock->Receive(); m_buffer << data; m_buffer.Replace( _T("\r\n"), _T("\n") ); int returnpos = m_buffer.Find( _T("\n") ); while ( returnpos != -1 ) { wxString cmd = m_buffer.Left( returnpos ); m_buffer = m_buffer.Mid( returnpos + 1 ); ExecuteCommand( cmd ); returnpos = m_buffer.Find( _T("\n") ); } } //! @brief Send udp ping. //! @note used for nat travelsal. unsigned int TASServer::UdpPing(unsigned int src_port, const wxString &target, unsigned int target_port, const wxString &message)// full parameters version, used to ping all clients when hosting. { int result=0; wxLogMessage(_T("UdpPing src_port=%d , target='%s' , target_port=%d , message='%s'"),src_port,target.c_str(),target_port, message.c_str()); wxIPV4address local_addr; local_addr.AnyAddress(); // <--- THATS ESSENTIAL! local_addr.Service(src_port); wxDatagramSocket udp_socket(local_addr,/* wxSOCKET_WAITALL*/wxSOCKET_NONE); wxIPV4address wxaddr; wxaddr.Hostname(target); wxaddr.Service(target_port); if (udp_socket.IsOk()&&!udp_socket.Error()) { std::string m=STD_STRING(message); udp_socket.SendTo( wxaddr, m.c_str(), m.length() ); wxIPV4address true_local_addr; if (udp_socket.GetLocal(true_local_addr)) { result=true_local_addr.Service(); } } else { wxLogMessage(_T("socket's IsOk() is false, no UDP ping done.")); } if (udp_socket.Error()) { wxLogWarning(_T("wxDatagramSocket Error=%d"),udp_socket.LastError()); } return result; } void TASServer::UdpPingTheServer(const wxString &message) { unsigned int port=UdpPing(m_udp_private_port,m_addr,m_nat_helper_port,message); if (port>0) { m_udp_private_port=port; m_se->OnMyInternalUdpSourcePort( m_udp_private_port ); } } // copypasta from spring.cpp , to get users ordered same way as in tasclient. struct UserOrder { int index;// user number for GetUser int order;// user order (we'll sort by it) bool operator<(UserOrder b) const // comparison function for sorting { return orderIsFounderMe())return; wxLogMessage(_T("UdpPingAllClients()")); // I'm gonna mimic tasclient's behavior. // It of course doesnt matter in which order pings are sent, // but when doing "fixed source ports", the port must be // FIRST_UDP_SOURCEPORT + index of user excluding myself // so users must be reindexed in same way as in tasclient // to get same source ports for pings. // copypasta from spring.cpp std::vector ordered_users; for ( UserList::user_map_t::size_type i = 0; i < battle->GetNumUsers(); i++ ) { User &user=battle->GetUser(i); if (&user == &(battle->GetMe()))continue;// dont include myself (change in copypasta) UserOrder tmp; tmp.index=i; ordered_users.push_back(tmp); } std::sort(ordered_users.begin(),ordered_users.end()); for (int i=0;iGetUser(ordered_users[i].index); wxString ip=user.BattleStatus().ip; unsigned int port=user.BattleStatus().udpport; unsigned int src_port=m_udp_private_port; if ( battle->GetNatType() == NAT_Fixed_source_ports ) { port = FIRST_UDP_SOURCEPORT + i; } wxLogMessage(_T(" pinging nick=%s , ip=%s , port=%u"),user.GetNick().c_str(),ip.c_str(),port); if (port!=0 && !ip.empty()) { UdpPing(src_port,ip,port,_T("hai!")); } } } //! @brief used to check if the NAT is done properly when hosting int TASServer::TestOpenPort( unsigned int port ) const { wxIPV4address local_addr; local_addr.AnyAddress(); // <--- THATS ESSENTIAL! local_addr.Service(port); wxSocketServer udp_socket(local_addr, wxSOCKET_NONE); wxHTTP connect_to_server; connect_to_server.SetTimeout( 10 ); if ( !connect_to_server.Connect( _T("zjt3.com") ) ) return porttest_unreachable; connect_to_server.GetInputStream(wxString::Format( _T("/porttest.php?port=%u"), port)); if (udp_socket.IsOk()) { if ( !udp_socket.WaitForAccept( 10 ) ) return porttest_timeout; } else { wxLogMessage(_T("socket's IsOk() is false, no UDP packets can be checked")); return porttest_socketNotOk; } if (udp_socket.Error()) { wxLogMessage(_T("Error=%d"),udp_socket.LastError()); return porttest_socketError; } return porttest_pass; } void TASServer::RequestSpringUpdate() { SendCmd( _T("REQUESTUPDATEFILE"), _T("Spring ") + usync().GetSpringVersion() ); } wxArrayString TASServer::GetRelayHostList() { if ( UserExists( _T("RelayHostManagerList") ) ) SayPrivate( _T("RelayHostManagerList"), _T("!lm") ); wxArrayString ret; for ( unsigned int i = 0; i < m_relay_host_manager_list.GetCount(); i++ ) { try { User& manager = GetUser( m_relay_host_manager_list[i] ); if ( manager.Status().in_game ) continue; // skip the manager is not connected or reports it's ingame ( no slots available ), or it's away ( functionality disabled ) if ( manager.Status().away ) continue; ret.Add( m_relay_host_manager_list[i] ); } catch(...){} } return ret; } //////////////////////// // Utility functions ////////////////////// UserStatus ConvTasclientstatus( TASClientstatus tas ) { UserStatus stat; stat.in_game = tas.in_game; stat.away = tas.away; stat.rank = (UserStatus::RankContainer)tas.rank; stat.moderator = tas.moderator; stat.bot = tas.bot; return stat; } UserBattleStatus ConvTasbattlestatus( TASBattleStatus tas ) { UserBattleStatus stat; stat.ally = tas.ally; stat.handicap = tas.handicap; stat.ready = (tas.ready==1)?true:false; stat.side = tas.side; stat.spectator = (tas.player == 0)?true:false; stat.sync = tas.sync; stat.team = tas.team; return stat; } TASBattleStatus ConvTasbattlestatus( UserBattleStatus bs) { TASBattleStatus stat; stat.ally = bs.ally; stat.handicap = bs.handicap; stat.ready = bs.ready?1:0; stat.side = bs.side; stat.player = bs.spectator?0:1; stat.sync = bs.sync; stat.team = bs.team; return stat; } IBattle::StartType IntToStartType( int start ) { switch ( start ) { case 0: return IBattle::ST_Fixed; case 1: return IBattle::ST_Random; case 2: return IBattle::ST_Choose; default: ASSERT_EXCEPTION( false, _T("invalid value") ); }; return IBattle::ST_Fixed; } NatType IntToNatType( int nat ) { switch ( nat ) { case 0: return NAT_None; case 1: return NAT_Hole_punching; case 2: return NAT_Fixed_source_ports; default: ASSERT_EXCEPTION( false, _T("invalid value") ); }; return NAT_None; } IBattle::GameType IntToGameType( int gt ) { switch ( gt ) { case 0: return IBattle::GT_ComContinue; case 1: return IBattle::GT_ComEnds; case 2: return IBattle::GT_Lineage; default: ASSERT_EXCEPTION( false, _T("invalid value") ); }; return IBattle::GT_ComContinue; } springlobby-0.169/src/tasserver.h0000600000176000000410000001656112105760300020406 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_TASSERVER_H #define SPRINGLOBBY_HEADERGUARD_TASSERVER_H #include #include #include #include "server.h" #include "crc.h" #include "mutexwrapper.h" const unsigned int FIRST_UDP_SOURCEPORT = 8300; class Ui; class Socket; class User; struct UserBattleStatus; class IServerEvents; class wxString; class PingThread; //! @brief TASServer protocol implementation. class TASServer : public Server { public: TASServer(int serverEventsMode = 0); ~TASServer(); // Overloaded functions from Server bool ExecuteSayCommand( const wxString& cmd ); void SetSocket( Socket* sock ); bool Register( const wxString& addr, const int port, const wxString& nick, const wxString& password,wxString& reason ); void AcceptAgreement(); void Connect( const wxString& servername, const wxString& addr, const int port ); void Disconnect(); bool IsConnected(); void Login(); void Logout(); bool IsOnline() const; void Update( int mselapsed ); void Ping(); void UDPPing();/// used for nat travelsal /// generic udp "ping" function /// return value: actual source port which was used. May differ from src_port /// 0 if udp ping failed unsigned int UdpPing(unsigned int src_port, const wxString &target, unsigned int target_port, const wxString &message); /// specialized udp ping functions void UdpPingTheServer( const wxString &message );/// used for nat travelsal. pings the server. void UdpPingAllClients();/// used when hosting with nat holepunching const User& GetMe() const; User& GetMe(); void JoinChannel( const wxString& channel, const wxString& key ); void PartChannel( const wxString& channel ); void DoActionChannel( const wxString& channel, const wxString& msg ); void SayChannel( const wxString& channel, const wxString& msg ); void DoActionPrivate( const wxString& nick, const wxString& msg ); void SayPrivate( const wxString& nick, const wxString& msg ); void SayBattle( int battleid, const wxString& msg ); void DoActionBattle( int battleid, const wxString& msg ); void Ring( const wxString& nick ); void ModeratorSetChannelTopic( const wxString& channel, const wxString& topic ); void ModeratorSetChannelKey( const wxString& channel, const wxString& key ); void ModeratorMute( const wxString& channel, const wxString& nick, int duration, bool byip ); void ModeratorUnmute( const wxString& channel, const wxString& nick ); void ModeratorKick( const wxString& channel, const wxString& reason ); void ModeratorBan( const wxString& nick, bool byip ); void ModeratorUnban( const wxString& nick ); void ModeratorGetIP( const wxString& nick ); void ModeratorGetLastLogin( const wxString& nick ); void ModeratorGetLastIP( const wxString& nick ); void ModeratorFindByIP( const wxString& ipadress ); void AdminGetAccountAccess( const wxString& nick ); void AdminChangeAccountAccess( const wxString& nick, const wxString& accesscode ); void AdminSetBotMode( const wxString& nick, bool isbot ); void HostBattle( BattleOptions bo, const wxString& password = _T("") ); void JoinBattle( const int& battleid, const wxString& password = _T("") ); void LeaveBattle( const int& battleid ); void SendMyBattleStatus( UserBattleStatus& bs ); void SendMyUserStatus(); void ForceSide( int battleid, User& user, int side ); void ForceTeam( int battleid, User& user, int team ); void ForceAlly( int battleid, User& user, int ally ); void ForceColour( int battleid, User& user, const wxColour& col ); void ForceSpectator( int battleid, User& user, bool spectator ); void BattleKickPlayer( int battleid, User& user ); void SetHandicap( int battleid, User& user, int handicap); void AddBot( int battleid, const wxString& nick, UserBattleStatus& status ); void RemoveBot( int battleid, User& bot ); void UpdateBot( int battleid, User& bot, UserBattleStatus& status ); void StartHostedBattle(); void SendHostInfo( HostInfo update ); void SendHostInfo( const wxString& Tag ); void SendUserPosition( const User& user ); void SendRaw( const wxString& raw ); void RequestInGameTime( const wxString& nick ); void SendUdpSourcePort( int udpport ); void SendNATHelperInfos( const wxString& username, const wxString& ip, int port ); Battle* GetCurrentBattle(); void RequestChannels(); // TASServer specific functions void ExecuteCommand( const wxString& in ); void ExecuteCommand( const wxString& cmd, const wxString& inparams, int replyid = -1 ); void HandlePong( int replyid ); void OnConnected( Socket* sock ); void OnDisconnected( Socket* sock ); void OnDataReceived( Socket* sock ); bool IsPasswordHash( const wxString& pass ) const; wxString GetPasswordHash( const wxString& pass ) const; int TestOpenPort( unsigned int port ) const; void SendScriptToProxy( const wxString& script ); void SendScriptToClients( const wxString& script ); void SetRelayIngamePassword( const User& user ); void RequestSpringUpdate(); wxArrayString GetRelayHostList() ; virtual const IServerEvents* serverEvents() const { return m_se; } protected: //! @brief Struct used internally by the TASServer class to calculate ping roundtimes. struct TASPingListItem { int id; wxLongLong t; }; PingThread* m_ping_thread; CRC m_crc; IServerEvents* m_se; double m_ser_ver; wxString m_last_denied; bool m_connected; bool m_online; bool m_debug_dont_catch; bool m_id_transmission; bool m_redirecting; wxString m_buffer; time_t m_last_udp_ping; time_t m_last_net_packet; MutexWrapper m_last_id; unsigned int& GetLastID() { ScopedLocker l_last_id(m_last_id); return l_last_id.Get(); } typedef std::list PingList; MutexWrapper m_pinglist; PingList& GetPingList() { ScopedLocker l_pinglist(m_pinglist); return l_pinglist.Get(); } unsigned long m_udp_private_port; unsigned long m_nat_helper_port; int m_battle_id; bool m_server_lanmode; unsigned int m_account_id_count; wxString m_agreement; wxString m_addr; wxString m_delayed_open_command; bool m_do_finalize_join_battle; int m_finalize_join_battle_id; wxString m_finalize_join_battle_pw; bool m_token_transmission; void FinalizeJoinBattle(); void SendCmd( const wxString& command, const wxString& param = _T("") ); void RelayCmd( const wxString& command, const wxString& param = _T("") ); wxString m_current_chan_name_mutelist; wxArrayString m_relay_host_manager_list; }; #endif // SPRINGLOBBY_HEADERGUARD_TASSERVER_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/tasservertokentable.h0000600000176000000410000001374212105760300022455 0ustar buildbotwww-data00000000000000#ifndef TASSERVERTOKENTABLE_H_INCLUDED #define TASSERVERTOKENTABLE_H_INCLUDED #include #include static std::map m_command_alias; static std::map m_send_command_alias; void FillAliasMap() { m_command_alias[_T("#")] = _T("PING"); m_command_alias[_T("$")] = _T("PONG"); m_command_alias[_T("%")] = _T("TASSERVER"); m_command_alias[_T("&")] = _T("REQUESTUPDATEFILE"); m_command_alias[_T("'")] = _T("REGISTER"); m_command_alias[_T("(")] = _T("REGISTRATIONDENIED"); m_command_alias[_T(")")] = _T("REGISTRATIONACCEPTED"); m_command_alias[_T("*")] = _T("RENAMEACCOUNT"); m_command_alias[_T("+")] = _T("CHANGEPASSWORD"); m_command_alias[_T(",")] = _T("LOGIN"); m_command_alias[_T("-")] = _T("ACCEPTED"); m_command_alias[_T(".")] = _T("DENIED"); m_command_alias[_T("/")] = _T("LOGININFOEND"); m_command_alias[_T("0")] = _T("AGREEMENT"); m_command_alias[_T("1")] = _T("AGREEMENTEND"); m_command_alias[_T("2")] = _T("CONFIRMAGREEMENT"); m_command_alias[_T("3")] = _T("MOTD"); m_command_alias[_T("4")] = _T("OFFERFILE"); m_command_alias[_T("5")] = _T("UDPSOURCEPORT"); m_command_alias[_T("6")] = _T("CLIENTIPPORT"); m_command_alias[_T("7")] = _T("HOSTPORT"); m_command_alias[_T("8")] = _T("SERVERMSG"); m_command_alias[_T("9")] = _T("SERVERMSGBOX"); m_command_alias[_T(":")] = _T("ADDUSER"); m_command_alias[_T(";")] = _T("REMOVEUSER"); m_command_alias[_T("<")] = _T("JOIN"); m_command_alias[_T("=")] = _T("JOINFAILED"); m_command_alias[_T(">")] = _T("CHANNELS"); m_command_alias[_T("?")] = _T("CHANNEL"); m_command_alias[_T("@")] = _T("ENDOFCHANNELS"); m_command_alias[_T("A")] = _T("MUTELIST"); m_command_alias[_T("B")] = _T("MUTELISTBEGIN"); m_command_alias[_T("C")] = _T("MUTELISTEND"); m_command_alias[_T("D")] = _T("CHANNELTOPIC"); m_command_alias[_T("E")] = _T("CLIENTS"); m_command_alias[_T("F")] = _T("JOINED"); m_command_alias[_T("G")] = _T("LEAVE"); m_command_alias[_T("H")] = _T("LEFT"); m_command_alias[_T("I")] = _T("FORCELEAVECHANNEL"); m_command_alias[_T("J")] = _T("CHANNELMESSAGE"); m_command_alias[_T("K")] = _T("SAY"); m_command_alias[_T("L")] = _T("SAID"); m_command_alias[_T("M")] = _T("SAYEX"); m_command_alias[_T("N")] = _T("SAIDEX"); m_command_alias[_T("O")] = _T("SAYPRIVATE"); m_command_alias[_T("P")] = _T("SAIDPRIVATE"); m_command_alias[_T("Q")] = _T("OPENBATTLE"); m_command_alias[_T("R")] = _T("BATTLEOPENED"); m_command_alias[_T("S")] = _T("BATTLECLOSED"); m_command_alias[_T("T")] = _T("JOINBATTLE"); m_command_alias[_T("U")] = _T("JOINEDBATTLE"); m_command_alias[_T("V")] = _T("LEFTBATTLE"); m_command_alias[_T("W")] = _T("LEAVEBATTLE"); m_command_alias[_T("X")] = _T("JOINBATTLEFAILED"); m_command_alias[_T("Y")] = _T("OPENBATTLEFAILED"); m_command_alias[_T("Z")] = _T("UPDATEBATTLEINFO"); m_command_alias[_T("[")] = _T("SAYBATTLE"); m_command_alias[_T("\\")] = _T("SAIDBATTLE"); m_command_alias[_T("]")] = _T("SAYBATTLEEX"); m_command_alias[_T("^")] = _T("SAIDBATTLEEX"); m_command_alias[_T("_")] = _T("MYSTATUS"); m_command_alias[_T("`")] = _T("CLIENTSTATUS"); m_command_alias[_T("a")] = _T("MYBATTLESTATUS"); m_command_alias[_T("b")] = _T("CLIENTBATTLESTATUS"); m_command_alias[_T("c")] = _T("REQUESTBATTLESTATUS"); m_command_alias[_T("d")] = _T("HANDICAP"); m_command_alias[_T("e")] = _T("KICKFROMBATTLE"); m_command_alias[_T("f")] = _T("FORCEQUITBATTLE"); m_command_alias[_T("g")] = _T("FORCETEAMNO"); m_command_alias[_T("h")] = _T("FORCEALLYNO"); m_command_alias[_T("i")] = _T("FORCETEAMCOLOR"); m_command_alias[_T("j")] = _T("FORCESPECTATORMODE"); m_command_alias[_T("k")] = _T("DISABLEUNITS"); m_command_alias[_T("l")] = _T("ENABLEUNITS"); m_command_alias[_T("m")] = _T("ENABLEALLUNITS"); m_command_alias[_T("n")] = _T("RING"); m_command_alias[_T("o")] = _T("REDIRECT"); m_command_alias[_T("p")] = _T("BROADCAST"); m_command_alias[_T("q")] = _T("ADDBOT"); m_command_alias[_T("r")] = _T("REMOVEBOT"); m_command_alias[_T("s")] = _T("UPDATEBOT"); m_command_alias[_T("t")] = _T("ADDSTARTRECT"); m_command_alias[_T("u")] = _T("REMOVESTARTRECT"); m_command_alias[_T("v")] = _T("MAPGRADES"); m_command_alias[_T("w")] = _T("MAPGRADESFAILED"); m_command_alias[_T("x")] = _T("SCRIPTSTART"); m_command_alias[_T("y")] = _T("SCRIPT"); m_command_alias[_T("z")] = _T("SCRIPTEND"); m_command_alias[_T("{")] = _T("SETSCRIPTTAGS"); m_command_alias[_T("|")] = _T("TESTLOGIN"); m_command_alias[_T("}")] = _T("TESTLOGINACCEPT"); m_command_alias[_T("~")] = _T("TESTLOGINDENY"); m_command_alias[_T("")] = _T("ACQUIREUSERID"); m_command_alias[_T("€")] = _T("USERID"); for ( std::map::const_iterator i = m_command_alias.begin(); i != m_command_alias.end(); ++i) m_send_command_alias[i->second] = i->first; //swap content for second map } // returns original if not found wxString DecodeTokenMessage( const wxString& cmd ) { std::map::const_iterator it = m_command_alias.find( cmd ); if ( it != m_command_alias.end() ) return it->second; else return cmd; } // returns original if not found wxString EncodeTokenMessage( const wxString& cmd ) { std::map::const_iterator it = m_send_command_alias.find( cmd ); if ( it != m_send_command_alias.end() ) return it->second; else return cmd; } #endif // TASSERVERTOKENTABLE_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/tdfcontainer.cpp0000600000176000000410000004153712105760300021404 0ustar buildbotwww-data00000000000000#include "tdfcontainer.h" #include "utils/conversion.h" #include "utils/debug.h" #include #include #include #include TDFWriter::TDFWriter( wxString &s ): m_stream( s ), m_depth( 0 ) { } TDFWriter::~TDFWriter() { Close(); } void TDFWriter::EnterSection( const wxString &name ) { Indent(); m_stream << _T( "[" ) << name << _T( "]\n" ); Indent(); m_stream << _T( "{\n" ); m_depth++; } void TDFWriter::LeaveSection() { m_depth--; Indent(); m_stream << _T( "}\n" ); } void TDFWriter::Indent() { for ( int i = 0;i < m_depth;++i )m_stream << _T( "\t" ); } //wxString GetCurrentPath(); void TDFWriter::Append( const wxString &name, wxString value ) { Indent(); m_stream << name << _T( "=" ) << value << _T( ";\n" ); } void TDFWriter::Close() { while ( m_depth > 0 ) LeaveSection(); if ( m_depth < 0 ) { wxLogWarning( _T( "error in TDFWriter usage: more LeaveSection() calls than EnterSection(). Please contact springlobby developers" ) ); } } void TDFWriter::AppendLineBreak() { m_stream << _T( "\n" ); } #include "sstream" #include "fstream" #include #include void Tokenizer::ReportError( const Token &t, const wxString &err ) { wxLogMessage( _T( "TDF parsing error at (%s), on token \"%s\" : %s" ), t.pos_string.c_str(), t.value_s.c_str(), err.c_str() ); errors++; } //#define ReportError(a) {std::cerr<<"error "<<(a);} //#define ReportError(a) {wxLogMessage(_T("error %s"),TowxString(a).c_str());} void Tokenizer::EnterStream( std::istream &stream_, const wxString &name ) { skip_eol = false; include_stack.push_back( IncludeCacheEntry( &stream_, false ) ); include_stack.back().name = name; } void Tokenizer::UnwindStack() { while ( ( !include_stack.empty() ) && include_stack.back().stream && ( !include_stack.back().stream->good() ) ) { include_stack.pop_back(); } } char Tokenizer::PeekNextChar() { UnwindStack(); //std::string tmp; char tmp = 0; if ( !include_stack.empty() )tmp = ( *include_stack.back().stream ).peek(); return tmp; } char Tokenizer::GetNextChar() { UnwindStack(); //std::string tmp; if ( include_stack.empty() )return 0; char c = ( *include_stack.back().stream ).get(); if ( ( !skip_eol ) && ( c == 10 || c == 13 ) ) {// end of line include_stack.back().line += 1; include_stack.back().column = 1; // if next is different we'll skip it. //std::istream &stream=(*include_stack.back().stream); char nc = ( *include_stack.back().stream ).peek(); if ( ( nc == 10 || nc == 13 ) && ( nc != c ) )skip_eol = true; } else { if ( !skip_eol )include_stack.back().column += 1; skip_eol = false; } return c; } bool Tokenizer::Good() { UnwindStack(); return !include_stack.empty(); } void Tokenizer::ReadToken( Token &token ) { start: SkipSpaces(); token.value_s.clear(); if ( !Good() ) { token.type = Token::type_eof; token.pos_string = _T( "EOF" ); return; } token.pos_string = wxString(); if ( !include_stack.empty() && !include_stack.back().name.empty() )token.pos_string << include_stack.back().name << _T( " , " ); token.pos_string << _( "line " ) << include_stack.back().line << _( " , column " ) << include_stack.back().column; char c = GetNextChar(); token.value_s += c; // first find what token is it, and handle all except numbers switch ( c ) { case '[': { token.type = Token::type_section_name; token.value_s.clear(); bool skip_next_eol_char = false; while ( Good() ) { c = GetNextChar(); // wxString has problem with zero characters, replace by space. if ( c == 0 ) { c = ' '; } if ( c == '\\' ) { if ( Good() ) { token.value_s += GetNextChar(); } else { ReportError( token, wxT( "Quotes not closed before end of file" ) ); return; } } else if ( c == ']' ) { return; } else { token.value_s += c; } // handle end of line if ( skip_next_eol_char ) { skip_next_eol_char = false; } else if ( c == 10 || c == 13 ) { //++line; //column=1; if ( ( PeekNextChar() == 10 || PeekNextChar() == 13 ) && ( PeekNextChar() != c ) )skip_next_eol_char = true; } } ReportError( token, wxT( "Quotes not closed before end of file" ) ); } case '{': token.type = Token::type_enter_section; return; case '}': token.type = Token::type_leave_section; return; case ';': token.type = Token::type_semicolon; return; case '=': token.type = Token::type_entry_value; token.value_s = _T( "" ); while ( Good() && PeekNextChar() != ';' ) { unsigned char c_ = GetNextChar(); token.value_s += c_; } return; case '/':// handle comments if ( PeekNextChar() == '/' ) { //SkipToEOL(); if ( !include_stack.empty() ) { std::string tmp; std::getline( ( *include_stack.back().stream ), tmp ); include_stack.back().line += 1; include_stack.back().column = 1; } goto start; } else if ( PeekNextChar() == '*' ) {// multi-line comment while ( Good() ) { char c1 = GetNextChar(); if ( ( c1 == '*' ) && ( PeekNextChar() == '/' ) ) { GetNextChar(); break; } } goto start; } default: while ( Good() && PeekNextChar() != '=' ) { unsigned char c_ = GetNextChar(); token.value_s += c_; } token.type = Token::type_entry_name; return; } } void Tokenizer::SkipSpaces() { while ( Good() && IsWhitespace( PeekNextChar() ) ) { GetNextChar(); } } Token Tokenizer::GetToken( int i ) { int p = buffer_pos + i; if ( p < 0 )return Token(); while ( int( token_buffer.size() ) < p + 1 ) { Token t; ReadToken( t ); if ( t.IsEOF() )return t; token_buffer.push_back( t ); } return token_buffer[p]; } void Tokenizer::Step( int i ) { buffer_pos += i; } namespace SL { Node::~Node() { //if(parent)parent->Remove(name); } DataList* Node::Parent() const { // parent list return parent; } bool Node::IsChildOf( DataList *what ) const { DataList *current = Parent(); while ( current ) { if ( current == what )return true; current = current->Parent(); } return false; } void Node::ListRemove() { //if(parent->list_first==this)parent->list_first=next; //if(parent->list_last==this)parent->list_last=prev; if ( list_prev ) { list_prev->list_next = this->list_next; } if ( list_next ) { list_next->list_prev = this->list_prev; } list_prev = NULL; list_next = NULL; } void Node::ListInsertAfter( Node *what ) { ListRemove(); if ( !what )return; this->list_next = what->list_next; if ( what->list_next )what->list_next->list_prev = this; what->list_next = this; this->list_prev = what; } wxString Node::Name() { return name; } bool Node::SetName( const wxString &name_ ) { if ( parent ) { return parent->Rename( name, name_ ); } name = name_; return true; } void Node::Save( TDFWriter &/*unused*/ ) { /// nothing to save there. } void Node::Load( Tokenizer &/*unused*/ ) { /// nothing to load there. //ASSERT_LOGIC(0,_T("this function should not be called.")); } /// *********************************************************** /// class DataList /// *********************************************************** DataList::DataList() { //parent = NULL; list_loop.list_prev = &list_loop; list_loop.list_next = &list_loop; list_loop.parent = this; list_loop.Reference(); } DataList::~DataList() {// disconnect from childs PNode node = First(); while ( node.Ok() && node != End() ) { //std::cout<<"printing"<parent = NULL; node->ListRemove(); node = nextnode; } } bool DataList::Insert( PNode node )/// return false if such entry already exists. { if ( !node.Ok() )return false; bool inserted = nodes.insert( std::pair( ( *node ).name.Lower(), node ) ).second; if ( !inserted )return false; node->parent = this; node->ListInsertAfter( list_loop.list_prev ); return true; } bool DataList::InsertAt( PNode node, PNode where )/// return false if such entry already exists. { if ( !node.Ok() )return false; if ( !( where->list_prev ) )return false; bool inserted = nodes.insert( std::pair( ( *node ).name, node ) ).second; if ( !inserted )return false; node->parent = this; node->ListInsertAfter( where->list_prev ); return true; } #ifdef use_std_string static const char* rename_prefix = "!"; #else static const wxChar* rename_prefix = _T( "!" ); #endif void DataList::InsertRename( PNode node ) {/// rename if such entry already exists. str contains new name. if ( !node.Ok() )return; if ( !Insert( node ) ) { wxString original_name = node->Name(); for ( int n = 0;n < 10000;++n ) { //wxString tmp=str+wxString(rename_prefix); #ifdef use_std_string std::ostringstream os; os << original_name << rename_prefix << n; node->name = os.str(); #else wxString tmp; tmp << original_name; tmp << rename_prefix; tmp << n; node->name = tmp; #endif if ( Insert( node ) ) { return; } } wxLogError( _T( "insertRename: iterated over 10 000 names, way too many" ) ); } } void DataList::InsertRenameAt( PNode node, PNode where ) {// rename if such entry already exists. str contains new name. if ( !node.Ok() )return; if ( !where->list_prev )return; if ( !InsertAt( node, where ) ) { for ( int n = 0;n < 10000;++n ) { #ifdef use_std_string std::ostringstream os; os << node->Name() << rename_prefix << n; node->name = os.str(); #else wxString tmp; tmp << ( node->Name() ); tmp << rename_prefix; tmp << n; node->name = tmp; #endif if ( InsertAt( node, where ) ) { return; } } wxLogError( _T( "insertRename: iterated over 10 000 names, way too many" ) ); } } bool DataList::Remove( const wxString &str ) { //PNode node=nodes.find(str.Lower())->last; PNode node = Find( str ); if ( !node.Ok() )return false; if ( nodes.erase( str.Lower() ) <= 0 ) return false; node->parent = NULL; node->ListRemove(); return true; } bool DataList::Remove( PNode node ) { if ( !node.Ok() )return false; if ( nodes.erase( node->Name().Lower() ) <= 0 ) return false; node->parent = NULL; node->ListRemove(); return true; } bool DataList::Rename( const wxString &old_name, const wxString &new_name ) { // check that new name is not used up. if ( nodes.find( new_name.Lower() ) != nodes.end() )return false; nodes_iterator i = nodes.find( old_name.Lower() ); if ( i == nodes.end() )return false; PNode node = i->second; ASSERT_LOGIC( node.Ok(), _T( "Internal TDF tree consistency (1)" ) ); ASSERT_LOGIC( node->Name().Lower() == old_name.Lower(), _T( "Internal TDF tree consistency (2)" ) ); node->name = new_name.Lower(); nodes.erase( i ); bool inserted = nodes.insert( std::pair( ( *node ).name.Lower(), node ) ).second; ASSERT_LOGIC( inserted, _T( "DataList::Rename failed" ) ); return inserted; } /// find by name. unused. PNode DataList::Find( const wxString &str ) { if ( str == _T( ".." ) )return Parent(); if ( str == _T( "." ) )return this; nodes_iterator i = nodes.find( str.Lower() ); if ( i != nodes.end() ) { ASSERT_LOGIC( i->second->Name().Lower() == str.Lower(), _T( "Internal TDF tree consistency (3)" ) ); return i->second; } return NULL; } wxString DataList::Path() { wxString result; PDataList tmp( this ); while ( tmp.Ok() ) { result = wxString( _T( "/" ) ) + tmp->Name(); tmp = tmp->Parent(); } return name; } PNode DataList::FindByPath( const wxString &str ) { if ( str.empty() )return this; int i = 0; wxString buff; PDataList current_dir( this ); if ( str[i] == '/' ) {// go to root PDataList tmp = Parent(); while ( tmp.Ok() ) { current_dir = tmp; tmp = tmp->Parent(); } } else { buff += str[0]; } i = 1; while ( ( unsigned int )( i ) < str.size() ) { if ( str[i] == '/' ) { if ( buff == _T( ".." ) ) { current_dir = current_dir->Parent(); if ( !current_dir.Ok() ) return NULL; } else if ( buff != _T( "." ) && !buff.empty() ) {// PNode node = current_dir->Find( buff ); if ( !node.Ok() ) return NULL; PDataList datalist( node ); if ( datalist.Ok() ) { current_dir = datalist; } else return NULL; } buff = _T( "" ); } else { buff += str[i]; } ++i; } if ( current_dir.Ok() ) { if ( !buff.empty() ) { return current_dir->Find( buff ); } else return PNode( current_dir ); } else { return NULL; } } PNode DataList::Next( PNode what ) { if ( what.Ok() )return what->list_next; return NULL; } PNode DataList::Prev( PNode what ) { if ( what.Ok() )return what->list_prev; return NULL; } PNode DataList::End() { return PNode( &list_loop ); } PNode DataList::First() { return PNode( list_loop.list_next ); } PNode DataList::Last() { return PNode( list_loop.list_prev ); } /* void DataList::PrintContent(std::ostream &s) { PNode node=First(); while(node.Ok() && node!=End()){ //std::cout<<"printing"<Name()<<"'={"; node->PrintContent(s); s<<"}"<Name().mb_str()<<"'={"; node->PrintContent(s); s<<"}"<ClassName().empty())continue; PDataList list( node ); if ( list.Ok() ) { f.EnterSection( list->Name() ); list->Save( f ); f.LeaveSection(); } else { PDataLeaf leaf( node ); if ( leaf.Ok() ) { leaf->Save( f ); } } node = Next( node ); } } void DataList::Load( Tokenizer &f ) { while ( f.Good() ) { Token t = f.TakeToken(); switch ( t.type ) { case Token::type_leave_section: case Token::type_eof: return; case Token::type_entry_name: { PDataLeaf new_leaf( new DataLeaf ); new_leaf->SetName( t.value_s ); new_leaf->Load( f ); Insert( PNode( new_leaf ) ); } break; case Token::type_section_name: { Token t2 = f.TakeToken(); if ( t2.type != Token::type_enter_section ) { f.ReportError( t, _T( "'{' expected" ) ); } else { PDataList new_list( new DataList ); new_list->SetName( t.value_s ); new_list->Load( f );// will eat the '}' Insert( PNode( new_list ) ); } } break; default: f.ReportError( t, _T( "[sectionname] or entryname= expected." ) ); } } } int DataList::GetInt( const wxString &f_name, int default_value, bool *it_worked ) { PDataLeaf leaf( Find( f_name ) ); if ( !leaf.ok() ) { if ( it_worked ) { *it_worked = false; } return default_value; } wxString s = leaf->GetValue(); long result = default_value; if ( !s.ToLong( &result ) ) { if ( it_worked ) { *it_worked = false; } return result; } if ( it_worked ) { *it_worked = true; } return result; } double DataList::GetDouble( const wxString &f_name, double default_value, bool *it_worked ) { PDataLeaf leaf( Find( f_name ) ); if ( !leaf.ok() ) { if ( it_worked ) { *it_worked = false; } return default_value; } wxString s = leaf->GetValue(); double result = default_value; if ( !s.ToDouble( &result ) ) { if ( it_worked ) { *it_worked = false; } return result; } if ( it_worked ) { *it_worked = true; } return result; } wxString DataList::GetString( const wxString &f_name, const wxString &default_value, bool *it_worked ) { PDataLeaf leaf( Find( f_name ) ); if ( !leaf.ok() ) { if ( it_worked ) { *it_worked = false; } return default_value; } if ( it_worked ) { *it_worked = true; } return leaf->GetValue(); } int DataList::GetDoubleArray( const wxString &f_name, int n_values, double *values ) { PDataLeaf leaf( Find( f_name ) ); if ( !leaf.ok() ) { return 0; } wxStringTokenizer tok( leaf->GetValue() ); int i = 0; int values_read = 0; for ( i = 0;i < n_values && tok.HasMoreTokens();++i ) { wxString s = tok.GetNextToken(); if ( s.ToDouble( values + i ) )values_read++; } return values_read; } wxColour DataList::GetColour( const wxString &f_name, const wxColour &default_value, bool *it_worked ) { double values[3]; if ( GetDoubleArray( f_name, 3, values ) != 3 ) { if ( it_worked ) { *it_worked = false; } return default_value; } if ( it_worked ) { *it_worked = true; } return wxColour( values[0]*255.99, values[1]*255.99, values[2]*255.99 ); } wxString DataLeaf::GetValue() { return value; } void DataLeaf::SetValue( const wxString &value_ ) { value = value_; } void DataLeaf::Save( TDFWriter &f ) { f.Append( Name(), GetValue() ); } void DataLeaf::Load( Tokenizer &f ) { Token t = f.TakeToken(); value = t.value_s; t = f.TakeToken(); if ( t.value_s != _T( ";" ) ) { f.ReportError( t, _T( "; expected" ) ); } } } // end namespace SL SL::PDataList ParseTDF( std::istream &s, int *error_count ) { Tokenizer t; t.EnterStream( s ); SL::PDataList result( new SL::DataList ); result->Load( t ); if ( error_count ) { *error_count = t.NumErrors(); } return result; } springlobby-0.169/src/tdfcontainer.h0000600000176000000410000001761112105760300021045 0ustar buildbotwww-data00000000000000#ifndef TDFCONTAINER_H #define TDFCONTAINER_H #include #include #include //#include "utils.h" #include "utils/conversion.h" class wxColour; /// Todo: add TDFContainer class. /// class TDFWriter { public: TDFWriter( wxString &s ); ~TDFWriter(); void EnterSection( const wxString &name ); void LeaveSection(); void Indent(); wxString GetCurrentPath(); void Append( const wxString &name, wxString value ); template void Append( const wxString &name, T value ); /// works like algorithms such as std::sort template void Append( const wxString &name, T begin, T end ); void AppendLineBreak(); void Close(); protected: private: wxString &m_stream; int m_depth; }; /// /// Parsing classes contributed by dmytry aka dizekat, copypasted from personal /// project: render_control_new/utils/parsing.h and cpp , database.h and cpp /// #include #include #include #include #include #include "utils/mixins.hh" class Tokenizer; namespace SL { class Node; typedef LSL::RefcountedPointer PNode; class DataList; typedef LSL::RefcountedPointer PDataList; class DataLeaf; typedef LSL::RefcountedPointer PDataLeaf; class Node: public LSL::RefcountedContainer , public SL::NonCopyable { friend class DataList; protected: DataList *parent; Node *list_prev; Node *list_next; void ListRemove(); void ListInsertAfter( Node *what ); wxString name; public: wxString Name(); // Sets the name, and updates parent if present bool SetName( const wxString &name_ ); Node(): parent( NULL ), list_prev( NULL ), list_next( NULL ), name( wxEmptyString ) {} virtual ~Node(); DataList* Parent() const;// parent list //void SetParent(DataList *parent_); bool IsChildOf( DataList *what ) const; virtual void Save( TDFWriter &f ); virtual void Load( Tokenizer &f ); }; /// Usage /// Parsing: /// int errs=0; /// PDataList root(ParseTDF(some istream, &errs));// errs is optional, gives number of errors when loading. /// Getting values: /// PDataList game(root->Find(_T("GAME"))) /// if(!game.ok()){wxLogMessage(_T("Game tag is missing"));return false;} /// wxString gamename=game->GetString(_T("Mapname")); /// (see optional parameters for setting default and knowing if it failed) /// and so on and so forth. /// Saving tdf: /// class DataList: public Node { protected: std::map nodes; Node list_loop;// next is first, prev is last in the list typedef std::map::iterator nodes_iterator; public: DataList(); ~DataList(); bool Insert( PNode node );// return false if such entry already exists. bool InsertAt( PNode node, PNode where );// return false if such entry already exists. Inserts right before given // rename if such entry already exists. Names is like name!1 or name!2 etc void InsertRename( PNode node ); void InsertRenameAt( PNode node, PNode where ); bool Remove( const wxString &str ); bool Remove( PNode node ); bool Rename( const wxString &old_name, const wxString &new_name ); PNode Find( const wxString &str );// find by name wxString Path(); PNode FindByPath( const wxString &str ); PNode Next( PNode what ); PNode Prev( PNode what ); PNode End(); PNode First(); PNode Last(); virtual void Save( TDFWriter &f ); virtual void Load( Tokenizer &f ); int GetInt( const wxString &name, int default_value = 0, bool *it_worked = NULL ); double GetDouble( const wxString &name, double default_value = 0, bool *it_worked = NULL ); wxString GetString( const wxString &name, const wxString &default_value = wxString(), bool *it_worked = NULL ); /// returns number of values that were successfully read int GetDoubleArray( const wxString &name, int n_values, double *values ); wxColour GetColour( const wxString &name, const wxColour &default_value = wxColour( 0, 0, 0 ), bool *it_worked = NULL ); }; class DataLeaf: public Node { friend class DataList; protected: wxString value; public: wxString GetValue(); void SetValue( const wxString &value ); virtual void Save( TDFWriter &f ); virtual void Load( Tokenizer &f ); }; } // end namespace SL inline bool IsLetter( char c ) { return ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) || ( c == '_' ); } inline bool IsNum( char c ) { return c >= '0' && c <= '9'; } inline bool IsNumDot( char c ) { return ( c >= '0' && c <= '9' ) || c == '.'; } inline bool IsAlphaNum( char c ) { return IsLetter( c ) || IsNum( c ); } inline bool IsWhitespace( char c ) { return ( c == ' ' ) || ( c == 10 ) || ( c == 13 ) || ( c == '\t' ); } struct Token { enum TokenType { type_none, type_section_name, type_enter_section, type_leave_section, type_entry_name, type_entry_value, type_semicolon, type_eof }; TokenType type; wxString value_s; wxString pos_string;// for error reporting bool IsEOF() const { return ( type == type_eof ); } Token(): type( type_eof ) { } }; class Tokenizer { /// todo: clean up, move to CPP file /// simple reference counted pointer to stream. struct IncludeCacheEntry { wxString name; ///< used for error reporting int line; int column; std::istream *stream; //bool must_delete; int *refcount; IncludeCacheEntry( std::istream *stream_, bool must_delete_ = false ): line( 1 ), column( 1 ), stream( stream_ ), refcount( NULL ) { if ( must_delete_ ) { refcount = new int; ( *refcount ) = 1; } } IncludeCacheEntry( const IncludeCacheEntry &other ): line( other.line ), column( other.column ), stream( other.stream ), refcount( other.refcount ) { stream = other.stream; refcount = other.refcount; if ( refcount )( *refcount ) += 1; } ~IncludeCacheEntry() { if ( refcount ) { ( *refcount )--; if ( ( *refcount ) <= 0 ) { delete stream; delete refcount; } } } }; std::vector include_stack; void UnwindStack(); std::deque token_buffer; //size_t max_buffer_size; size_t buffer_pos; bool skip_eol; char GetNextChar(); char PeekNextChar(); void ReadToken( Token &token ); void SkipSpaces(); int errors; public: Tokenizer(): buffer_pos( 0 ), skip_eol( false ), errors( 0 ) { } void EnterStream( std::istream &stream_, const wxString &name = _T( "" ) ); Token GetToken( int i = 0 ); void Step( int i = 1 ); inline Token TakeToken() { Token result = GetToken(); Step(); return result; } bool Good(); void ReportError( const Token &t, const wxString &err ); int NumErrors() const { return errors; } }; inline Tokenizer &operator >>( Tokenizer &tokenizer, Token &token ) { token = tokenizer.TakeToken(); return tokenizer; } SL::PDataList ParseTDF( std::istream &s, int *error_count = NULL ); //Defintions to not clutter up the class declaration template void TDFWriter:: Append( const wxString &name, T value ) { Append( name, TowxString( value ) ); } template void TDFWriter::Append( const wxString &name, T begin, T end ) { Indent(); m_stream << name << _T( "=" ); for ( T it = begin;it != end;++it ) { if ( it != begin )m_stream << _T( " " ); m_stream << ( *it ); } m_stream << _T( ";\n" ); } #endif // TDFCONTAINER_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/tests/CMakeLists.txt0000600000176000000410000000003612105760300022107 0ustar buildbotwww-data00000000000000add_subdirectory(headercheck) springlobby-0.169/src/tests/headercheck/CMakeLists.txt0000600000176000000410000000203312105760300024334 0ustar buildbotwww-data00000000000000# This file is part of the Spring engine (GPL v2 or later), see LICENSE.html OPTION(HEADERCHECK "adds build targets to check if all headers compile" OFF) if (HEADERCHECK) include_directories( ${springlobby_SOURCE_DIR}/src ${springlobby_SOURCE_DIR}/src/downloader/lib/src ${springlobby_SOURCE_DIR}/src/downloader/lib/src/lib ) FILE(GLOB_RECURSE headers ${springlobby_SOURCE_DIR}/src/*.h ) SET(headerchecklibs "") FOREACH( HEADER ${headers} ) #pseudo unique name string(REPLACE "${springlobby_SOURCE_DIR}" "" PLIST "${HEADER}") string(REPLACE "/" ";" PLIST "${PLIST}") SET(TEST_NAME "headercheck_") foreach(name ${PLIST}) SET(TEST_NAME "${TEST_NAME}_${name}") endforeach() SET(TEST_FILE ${CMAKE_CURRENT_BINARY_DIR}/src-generated/${TEST_NAME}.cpp) # create test file configure_file( headercheck.cpp.in ${TEST_FILE} ) # add library add_library( ${TEST_NAME} EXCLUDE_FROM_ALL ${TEST_FILE} ) list(APPEND headerchecklibs ${TEST_NAME}) ENDFOREACH( HEADER ) ADD_CUSTOM_TARGET( headercheck DEPENDS ${headerchecklibs}) endif() springlobby-0.169/src/tests/headercheck/headercheck.cpp.in0000600000176000000410000000007012105760300025132 0ustar buildbotwww-data00000000000000#include "@HEADER@" int main(int,char**) { return 0; }springlobby-0.169/src/thread.cpp0000600000176000000410000001130412105760300020160 0ustar buildbotwww-data00000000000000#include "thread.h" #include #include #ifdef SL_QT_MODE Thread::Thread(): // m_thread_sleep_semaphore( 0, 0 ), m_must_exit( false ) { } /** TODO this causes a segfault on exit for me (koshi) sometimes http://docs.wxwidgets.org/stable/wx_wxthread.html#wxthreadwait says to only call wxThread::Wait from another thread context **/ Thread::~Thread() { if ( isRunning() ) wait(); } bool Thread::Sleep( int milliseconds ) { // wxSemaError err = m_thread_sleep_semaphore.WaitTimeout( milliseconds ); usleep( milliseconds ); return false;//err == wxSEMA_TIMEOUT; } void Thread::WakeUp() { // m_thread_sleep_semaphore.Post(); } int Thread::Wait() { m_must_exit = true; // WakeUp(); // return wxThread::Wait(); return wait(); } wxThreadError Thread::Run() { m_must_exit = false; start(); return wxThreadError(); } void Thread::run() { Entry(); // exec(); } bool Thread::TestDestroy() { return true;//m_must_exit;//wxThread::TestDestroy() || m_must_exit; } wxThreadError Thread::Create() { return wxThreadError(); } void Thread::SetPriority(int priority) { } void Thread::Yield() { yieldCurrentThread(); } #else Thread::Thread(): wxThread( wxTHREAD_JOINABLE ), m_thread_sleep_semaphore( 0, 0 ), m_must_exit( false ) { } /** TODO this causes a segfault on exit for me (koshi) sometimes http://docs.wxwidgets.org/stable/wx_wxthread.html#wxthreadwait says to only call wxThread::Wait from another thread context **/ Thread::~Thread() { if ( IsAlive() )Wait(); } bool Thread::Sleep( int milliseconds ) { wxSemaError err = m_thread_sleep_semaphore.WaitTimeout( milliseconds ); return err == wxSEMA_TIMEOUT; } void Thread::WakeUp() { m_thread_sleep_semaphore.Post(); } Thread::ExitCode Thread::Wait() { m_must_exit = true; WakeUp(); return wxThread::Wait(); } wxThreadError Thread::Run() { m_must_exit = false; return wxThread::Run(); } bool Thread::TestDestroy() { return wxThread::TestDestroy() || m_must_exit; } #endif namespace { struct WorkItemCompare { bool operator()( const WorkItem* a, const WorkItem* b ) { return a->GetPriority() < b->GetPriority(); } }; } bool WorkItem::Cancel() { wxLogMessage( _T( "cancelling WorkItem %p" ), this ); if ( m_queue == NULL ) return false; return m_queue->Remove( this ); } void WorkItemQueue::Push( WorkItem* item ) { if ( item == NULL ) return; wxCriticalSectionLocker lock( m_lock ); m_queue.push_back( item ); std::push_heap( m_queue.begin(), m_queue.end(), WorkItemCompare() ); item->m_queue = this; } WorkItem* WorkItemQueue::Pop() { wxCriticalSectionLocker lock( m_lock ); if ( m_queue.empty() ) return NULL; WorkItem* item = m_queue.front(); std::pop_heap( m_queue.begin(), m_queue.end(), WorkItemCompare() ); m_queue.pop_back(); item->m_queue = NULL; return item; } bool WorkItemQueue::Remove( WorkItem* item ) { wxCriticalSectionLocker lock( m_lock ); if ( m_queue.empty() ) return false; // WARNING: this destroys the heap... std::vector::iterator new_end = std::remove( m_queue.begin(), m_queue.end(), item ); // did a WorkerThread process the item just before we got here? if ( new_end == m_queue.end() ) return false; m_queue.erase( new_end, m_queue.end() ); // recreate the heap... std::make_heap( m_queue.begin(), m_queue.end(), WorkItemCompare() ); item->m_queue = NULL; return true; } void WorkerThread::DoWork( WorkItem* item, int priority, bool toBeDeleted ) { wxLogMessage( _T( "scheduling WorkItem %p, prio = %d" ), item, priority ); item->m_priority = priority; item->m_toBeDeleted = toBeDeleted; m_workItems.Push( item ); WakeUp(); } void* WorkerThread::Entry() { WorkItem* item; wxLogMessage( _T( "WorkerThread started" ) ); while ( !TestDestroy() ) { // sleep an hour or until a new WorkItem arrives (DoWork() will wake us up). Sleep( 3600 * 1000 ); while ( !TestDestroy() && ( item = m_workItems.Pop() ) != NULL ) { try { wxLogMessage( _T( "running WorkItem %p, prio = %d" ), item, item->m_priority ); item->Run(); } catch ( ... ) { // better eat all exceptions thrown by WorkItem::Run(), // don't want to let the thread die on a single faulty WorkItem. wxLogMessage( _T( "WorkerThread caught exception thrown by WorkItem::Run" ) ); } CleanupWorkItem( item ); // give other threads some air Yield(); } } // cleanup leftover WorkItems while ( ( item = m_workItems.Pop() ) != NULL ) { CleanupWorkItem( item ); } wxLogMessage( _T( "WorkerThread stopped" ) ); return 0; } void WorkerThread::CleanupWorkItem( WorkItem* item ) { if ( item->m_toBeDeleted ) { try { delete item; } catch ( ... ) { // idem, eat exceptions from destructor wxLogMessage( _T( "WorkerThread caught exception thrown by WorkItem::~WorkItem" ) ); } } } springlobby-0.169/src/thread.h0000600000176000000410000001014512105760300017627 0ustar buildbotwww-data00000000000000#ifndef THREAD_H #define THREAD_H #include #include #include "utils/mixins.hh" /// joinable thread, with overridden Sleep and Wait methods. /// Sleep wakes up when you call Wait() #ifdef SL_QT_MODE #include class Thread: public QThread { // Q_OBJECT public: Thread(); /// destructor Waits for thread to complete ~Thread(); /// overrides wxThread::Wait . Wakes up from sleep if sleeping, to prevent delay. int Wait(); /// returns false when woken up bool Sleep(int milliseconds); /// call this from outside thread to wake up Sleep - ing thread void WakeUp(); /// overrides wxThread::TestDestroy , which can fail on Wait bool TestDestroy(); wxThreadError Create(); void SetPriority(int priority); wxThreadError Run(); protected: void run(); virtual void* Entry() = 0; void Yield(); protected: // wxSemaphore m_thread_sleep_semaphore; /// workaround for old wxWidgets bug bool m_must_exit; }; #else class Thread: public wxThread { public: Thread(); /// destructor Waits for thread to complete ~Thread(); /// overrides wxThread::Wait . Wakes up from sleep if sleeping, to prevent delay. ExitCode Wait(); /// returns false when woken up bool Sleep(int milliseconds); /// call this from outside thread to wake up Sleep - ing thread void WakeUp(); /// overrides wxThread::TestDestroy , which can fail on Wait bool TestDestroy(); wxThreadError Run(); protected: wxSemaphore m_thread_sleep_semaphore; /// workaround for old wxWidgets bug bool m_must_exit; }; #endif class WorkItemQueue; /** @brief Abstraction of a piece of work to be done by WorkerThread Inherit this class to define concrete work items. */ class WorkItem : public SL::NonCopyable { public: /** @brief Construct a new WorkItem */ WorkItem() : m_priority(0), m_toBeDeleted(true), m_queue(NULL) {} /** @brief Destructor */ virtual ~WorkItem() {} /** @brief Implement this in derived class to do the work */ virtual void Run() = 0; /** @brief Cancel this WorkItem, remove it from queue @return true if it was removed, false otherwise */ bool Cancel(); int GetPriority() const { return m_priority; } private: int m_priority; ///< Priority of item, highest is run first volatile bool m_toBeDeleted; ///< Should this item be deleted after it has run? WorkItemQueue* m_queue; friend class WorkItemQueue; friend class WorkerThread; }; /** @brief Priority queue of work items */ class WorkItemQueue { public: /** @brief Push more work onto the queue */ void Push(WorkItem* item); /** @brief Pop one work item from the queue @return A work item or NULL when the queue is empty */ WorkItem* Pop(); /** @brief Remove a specific workitem from the queue @return true if it was removed, false otherwise */ bool Remove(WorkItem* item); private: wxCriticalSection m_lock; // this is a priority queue maintained as a heap stored in a vector :o std::vector m_queue; }; /** @brief Thread which processes WorkItems in it's WorkItemQueue */ class WorkerThread : public Thread { public: /** @brief Adds a new WorkItem to the queue */ void DoWork(WorkItem* item, int priority = 0, bool toBeDeleted = true); /** @brief Overrides wxThread::Entry, thread entry point */ void* Entry(); private: void CleanupWorkItem(WorkItem* item); WorkItemQueue m_workItems; }; #endif // THREAD_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/toasterbox/ToasterBox.cpp0000600000176000000410000001346612105760300023210 0ustar buildbotwww-data00000000000000//--------------------------------------------------------------------------- // // Title: ToasterBox // Author: Aj Bommarito // Created: Wednesday, August 18, 2004 16:33:49 // // Description: Creates MSN "Toaster" style popups. // Version 1.0rc //--------------------------------------------------------------------------- #include //#include "wx/wxprec.h" #include #include #include #include #include #include "ToasterBox.h" ToasterBox::ToasterBox(wxWindow* _parent) : parent( _parent ), sleepTime( 10 ), pauseTime( 1700 ), popupText( _T("default") ), popupTop( wxPoint(0,0) ), popupPosition( wxPoint(100,100) ), popupSize( wxSize(150, 170) ), colFg( *wxWHITE ), colBg( *wxBLACK ), bitmapFile( wxEmptyString ), m_bitmap( wxNullBitmap ), m_stack_direction( StackUp ) { //where to keep track of all the toasterboxwindows winList = new ToasterBoxWindowList(); winList->DeleteContents(true); //set the bottom right corner of the dialog //at the bottom right of the screen bottomRight = wxPoint(wxGetDisplaySize().GetWidth(), wxGetDisplaySize().GetHeight()); } ToasterBox::~ToasterBox() { delete winList; winList = 0; } void ToasterBox::SetPopupPosition(int x, int y) { popupPosition = wxPoint(x, y); } void ToasterBox::SetPopupPosition(int pos) { bottomRight = wxPoint(wxGetDisplaySize().GetWidth(), wxGetDisplaySize().GetHeight()); //top left if(pos == 0) popupPosition = wxPoint(0,0); //top right if(pos == 1) popupPosition = wxPoint(wxGetDisplaySize().GetWidth() - popupSize.GetWidth(), 0); //bottom left if(pos == 2) popupPosition = wxPoint(0, wxGetDisplaySize().GetHeight() - popupSize.GetHeight()); //bottom right if(pos == 3) popupPosition = wxPoint(bottomRight.x - popupSize.GetWidth(), bottomRight.y - popupSize.GetHeight()); bottomRight = wxPoint(popupPosition.x + popupSize.GetWidth(), popupPosition.y + popupSize.GetHeight()); } void ToasterBox::SetPopupBackgroundColor(int r, int g, int b) { colBg = wxColour(r, g, b); } void ToasterBox::SetPopupTextColor(int r, int g, int b) { colFg = wxColour(r, g, b); } void ToasterBox::Play() { //create new window ToasterBoxWindow *tb = new ToasterBoxWindow(parent, this); tb->SetPopupSize(popupSize.GetWidth(), popupSize.GetHeight()); tb->SetPopupPosition(popupPosition.x, popupPosition.y); tb->SetPopupPauseTime(pauseTime); tb->SetPopupScrollSpeed(sleepTime); tb->SetPopupTextColor(colFg.Red(),colFg.Green(),colFg.Blue()); tb->SetPopupBackgroundColor(colBg.Red(),colBg.Green(),colBg.Blue()); if( m_bitmap.IsOk() ) tb->SetPopupBitmap( m_bitmap ); if(!bitmapFile.IsEmpty()) tb->SetPopupBitmap(bitmapFile); tb->SetPopupText(popupText, true); //clean up the list CleanList(); //check to see if there is already a window displayed //by looking at the linked list if(!winList->IsEmpty()) { //there ARE other windows displayed already //reclac where it should display MoveAbove(tb); } //shift new window on to the list winList->Append(tb); //play new window if(!tb->Play()) { //if we didn't show the window properly, remove it from the list winList->DeleteNode(winList->Item(winList->GetCount()-1)); //delete the object too. tb = 0; return; } } bool ToasterBox::DoesTextFit() { return false; } void ToasterBox::MoveAbove(ToasterBoxWindow *tb) { //recalc where to place this popup if( m_stack_direction == StackUp ) tb->SetPopupPosition(popupPosition.x, popupPosition.y - (popupSize.GetHeight() * winList->GetCount())); else tb->SetPopupPosition(popupPosition.x, popupPosition.y + (popupSize.GetHeight() * winList->GetCount())); } void ToasterBox::SetStackDirection( StackDirection dir ) { m_stack_direction = dir; } void ToasterBox::Notify() { //if the list is empty, skip this if(winList->IsEmpty()) return; wxLogDebug(_T("%s"), _T("clean&shrink")); //clean the window list CleanList(); //figure out how many blanks we have ToasterBoxWindowListNode node = winList->GetFirst(); if(!node) return; //( (our base position)-(position of this node) ) / (default height of the windows)+1 //long blanks = ((popupPosition.y - // node->GetData()->GetPosition().y) / popupSize.GetHeight()) +1; //move windows to fill in blank space for(int i = node->GetData()->GetPosition().y; i < popupPosition.y; i += 4) { if(i > popupPosition.y) i = popupPosition.y; //loop through all the windows for(unsigned int j = 0; j < winList->GetCount(); j++) { long ourNewHeight = i - (j * popupSize.GetHeight()-8); ToasterBoxWindowListNode tmpNode = winList->Item(j); ToasterBoxWindow *tmpTb = tmpNode->GetData(); //reset where the object THINKS its supposed to be tmpTb->SetPopupPosition(popupPosition.x, ourNewHeight); //actually move it tmpTb->SetSize(popupPosition.x, ourNewHeight, tmpTb->GetSize().GetWidth(), tmpTb->GetSize().GetHeight()); //tmpNode = 0; tmpTb = 0; } wxMilliSleep(sleepTime); //DrawText(); //Update(); } StartAll(); //node = 0; } void ToasterBox::CleanList() { //wxLogDebug("Items on list bc %i", winList->GetCount()); ToasterBoxWindowListNode node = winList->GetFirst(); while(node) { ToasterBoxWindow *tbTemp = node->GetData(); if(!tbTemp->IsShown()) { winList->DeleteNode(node); node = winList->GetFirst(); } else node = node->GetNext(); tbTemp = 0; } //node = 0; //wxLogDebug("Items on list ac %i", winList->GetCount()); } void ToasterBox::StartAll(bool /*start*/) { ToasterBoxWindowListNode node = winList->GetLast(); while(node) { ToasterBoxWindow *tbTemp = node->GetData(); tbTemp->PrintInfo(); node = node->GetPrevious(); tbTemp = 0; } //node = 0; } springlobby-0.169/src/toasterbox/ToasterBox.h0000600000176000000410000000351312105760300022645 0ustar buildbotwww-data00000000000000#ifndef SL_TOASTERBOX_HH #define SL_TOASTERBOX_HH #include "ToasterBoxWindow.h" #include "ToasterBoxWindowList.h" #include "../utils/mixins.hh" /* The toasterbox class should stay resident in memory. It creates and displays popups and handles the "stacking". */ class ToasterNotification; class ToasterBox : public wxTimer { public: ~ToasterBox(); void SetPopupText(wxString _text, bool /*_shrink*/ = false){popupText = _text;} void SetPopupSize(int x, int y){popupSize = wxSize(x, y);} void SetPopupPosition(int x, int y); void SetPopupPosition(int pos); void SetPopupPauseTime(int milliseconds){pauseTime = milliseconds;} void SetPopupBitmap(wxString _bitmapFile){bitmapFile = _bitmapFile;} void SetPopupBitmap(const wxBitmap& bitmap){ m_bitmap = bitmap; } void SetPopupBackgroundColor(int r, int g, int b); void SetPopupTextColor(int r, int g, int b); void SetPopupScrollSpeed(int _sleepTime){sleepTime = _sleepTime;} void MoveAbove(ToasterBoxWindow *tb); wxString GetPopupText(){return popupText;} void Play(); bool DoesTextFit(); void Notify(); void CleanList(); void StartAll(bool start = true); enum StackDirection { StackUp = -1, StackDown = 1 }; void SetStackDirection( StackDirection dir ); protected: friend class ToasterNotification; ToasterBox(wxWindow* _parent=(wxWindow *)NULL); private: wxWindow *parent; int sleepTime; //how long the box hangs around for int pauseTime; wxString popupText; wxPoint bottomRight, popupTop, popupPosition; wxSize popupSize; wxStaticBitmap sbm; wxColour colFg, colBg; wxString bitmapFile; ToasterBoxWindowList *winList; wxBitmap m_bitmap; //should we attempt to shrink the text //if it's too big for the popup? bool shrink; StackDirection m_stack_direction; }; #endif //SL_TOASTERBOX_HH springlobby-0.169/src/toasterbox/ToasterBoxWindow.cpp0000600000176000000410000001652412105760300024376 0ustar buildbotwww-data00000000000000 #include //#include "wx/wxprec.h" #include #include #include #include #include #include #include #include #include "ToasterBoxWindow.h" #include "../gui/wxbackgroundimage.h" #include "../images/notif_bg.png.h" #include "../uiutils.h" #include "../customizations.h" #ifndef __WXMSW__ typedef wxClientDC DCType; #else typedef wxBufferedPaintDC DCType; #endif long ToasterBoxWindow::count = 0; //BEGIN_EVENT_TABLE (ToasterBoxWindow, wxFrame) // EVT_KILL_FOCUS (ToasterBoxWindow::RejectFocus) // EVT_SET_FOCUS (ToasterBoxWindow::RejectFocus) //END_EVENT_TABLE () ToasterBoxWindow::ToasterBoxWindow(wxWindow* parent, wxTimer *_parent2): ToasterBase(parent, wxNO_BORDER|wxSTAY_ON_TOP|wxFRAME_NO_TASKBAR), startTime( wxGetLocalTime() ), parent2( _parent2 ), sleepTime( 10 ), step( 4 ), pauseTime( 1700 ), textColor( *wxWHITE ), popupText( _T("Change Me!") ), m_background_bitmap( charArr2wxBitmap( notif_bg_png, sizeof(notif_bg_png) ) ), pn(NULL), shrink(false) { SetBackgroundStyle(wxBG_STYLE_CUSTOM); SLcustomizations().GetBitmap( _T("notification_background"), m_background_bitmap ); count++; //the size we want the dialog to be wxSize dialogSize(150, 170); bottomRight = wxPoint(wxGetDisplaySize().GetWidth(),wxGetDisplaySize().GetHeight()); SetSize(bottomRight.x, bottomRight.y, dialogSize.GetWidth(), dialogSize.GetHeight()); ToasterBase::Connect( wxEVT_ERASE_BACKGROUND, (wxObjectEventFunction)& ToasterBoxWindow::OnEraseBackground); ToasterBase::Connect( wxEVT_PAINT, (wxObjectEventFunction)& ToasterBoxWindow::OnPaint); #ifndef __WXMSW__ PushEventHandler( new wxBackgroundBitmap( m_background_bitmap ) ); #endif } void ToasterBoxWindow::SetPopupBitmap(wxBitmap& bitmap) { sbm.Create(this, 0, bitmap, wxPoint(0,0)); } void ToasterBoxWindow::SetPopupBitmap(wxString _bitmapFile) { if(!_bitmapFile.IsEmpty()) { wxBitmap bm = wxBitmap(); bm.LoadFile(_bitmapFile, wxBITMAP_TYPE_BMP); if(bm.Ok()) sbm.Create(this, 0, bm, wxPoint(0,0)); } //wxBitmap bm2 = wxBitmap(); //bm2.LoadFile("back2.bmp", wxBITMAP_TYPE_BMP); //wxRegion reg(bm2); //wxLogDebug("%i", SetShape(*reg)); } void ToasterBoxWindow::SetPopupSize(int x, int y) { SetSize(bottomRight.x, bottomRight.y, x, y); } void ToasterBoxWindow::SetPopupPosition(int x, int y) { dialogTop = wxPoint(x,y); bottomRight = wxPoint(dialogTop.x + GetSize().GetWidth(), dialogTop.y + GetSize().GetHeight()); } //_shrink indicates if we should to transformations on //the text to make it "pretty" void ToasterBoxWindow::SetPopupText(wxString _text, bool _shrink) { popupText = _text; shrink = _shrink; } //activate the frame, raise it and set the timer bool ToasterBoxWindow::Play() { //do some checks to make sure this window is valid if(bottomRight.x < 1 || bottomRight.y < 1) return false; if(GetSize().GetWidth() < 50 || GetSize().GetWidth() < 50) { //toasterbox launches into a endless loop for some reason //when you try to make the window too small. return false; } ScrollUp(); Start(pauseTime, true); return true; } //return to the user if their text all fit or not bool ToasterBoxWindow::DoesTextFit() { wxCoord w, h; wxClientDC dc(this); dc.GetTextExtent(popupText, &w, &h); if(w > GetSize().GetWidth() || h > GetSize().GetHeight()) return false; return true; } void ToasterBoxWindow::SetPopupBackgroundColor(int r, int g, int b) { if(wxColor(r,g,b).Ok()) SetBackgroundColour(wxColor(r,g,b)); else wxLogDebug(_T("%s: %d,%d,%d"), _T("invalid color"), r, g, b); } void ToasterBoxWindow::SetPopupTextColor(int r, int g, int b) { if(wxColor(r,g,b).Ok()) textColor = wxColor(r,g,b); } //private functions void ToasterBoxWindow::ScrollUp() { wxLogDebug(_T("%s"), _T("Raising")); SetSize(dialogTop.x, dialogTop.y, GetSize().GetWidth(),GetSize().GetHeight() ); Show(true); // // // //walk the Y value up in a raise motion // int windowSize = 0; // for(int i = bottomRight.y; i > dialogTop.y; i -= step) // { // if(i < dialogTop.y) // i = dialogTop.y; // windowSize += step; // SetSize(dialogTop.x, i, GetSize().GetWidth(), // windowSize); // //Update(); // wxMilliSleep(sleepTime); // } // Update(); DrawText(); Update(); } void ToasterBoxWindow::ScrollDown( ) { wxLogDebug(_T("%s"), _T("Lowering")); // // //walk down the Y value // int windowSize = GetSize().GetHeight(); // for(int i = dialogTop.y; i < bottomRight.y; i += step) // { // if(i > bottomRight.y) // i = bottomRight.y; // windowSize -= step; // SetSize(dialogTop.x, i, GetSize().GetWidth(), // windowSize); // //Update(); // wxMilliSleep(sleepTime); // // } Hide(); if(parent2) parent2->Notify(); else wxLogDebug(_T("%s"), _T("not valid parent")); } #include "../settings.h" void ToasterBoxWindow::DrawText() { DCType dc( this ); #ifdef __WXMSW__ // dc.SetBackground( *wxBLACK_BRUSH ); // dc.Clear(); dc.DrawBitmap(m_background_bitmap, 0, 0, false); #endif //width and height of text wxCoord w = 0, h = 0; //where we will set the text wxCoord x = 0, y = 0; //border from sides and top to text (in pixels) int border_right = 7; int border_left = 102; if (sbm.GetBitmap().IsOk()) { border_left += sbm.GetBitmap().GetWidth(); } //how much space between text lines int textPadding = 4; //how much can we have on a line? int textColumns = 0; //how many lines can we fit vertically float textLines = 1; //the popupText after our transformations (if we do any) wxString pText = GetPopupText(); wxFont outFont( 9, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD ); dc.SetFont( outFont ); dc.GetTextExtent(pText, &w, &h); //shrink the text to fit in the popup box if(shrink) { while((w +(border_right + border_left))> GetSize().GetWidth()) { pText = pText.Left(pText.Length()-1); dc.GetTextExtent(pText, &w, &h); } textColumns = pText.Length(); //figure out how many lines of text we have textLines = (GetPopupText().Length() / textColumns) +.9; } //center the text // if(w < GetSize().GetWidth()) // x = (GetSize().GetWidth() - w) / 2; // if(h < GetSize().GetHeight()) // y = (GetSize().GetHeight() - h) / 2; dc.SetTextForeground(textColor); // //if we have multiple lines if(textLines > 1) { //how many lines we can fit in the height available float howManyLinesFit = GetSize().GetHeight() / (h+textPadding); if(textLines < howManyLinesFit) howManyLinesFit = textLines; y = (GetSize().GetHeight() - ((h+textPadding) * howManyLinesFit)) / 2; for(int i = 0; i < howManyLinesFit; i++) { dc.DrawText(GetPopupText().Mid((i*textColumns), textColumns), x + border_left,y); //move the text down a line y += h+textPadding; } } else dc.DrawText(pText, x,y); } void ToasterBoxWindow::Notify() { wxLogDebug(_T("Been up for: %i"), wxGetLocalTime() - startTime); ScrollDown( ); } void ToasterBoxWindow::PrintInfo() { wxLogDebug(_T("brX:%i brY:%i szW:%i szH:%i"), bottomRight.x, bottomRight.y, GetSize().GetWidth(), GetSize().GetHeight()); } void ToasterBoxWindow::OnPaint( wxPaintEvent& /*event*/ ) { DrawText(); } /// wxEVT_ERASE_BACKGROUND event handler for ID_WXGRADIENTBUTTON void ToasterBoxWindow::OnEraseBackground( wxEraseEvent& /*event*/ ) { DrawText(); } springlobby-0.169/src/toasterbox/ToasterBoxWindow.h0000600000176000000410000000343412105760300024037 0ustar buildbotwww-data00000000000000#ifndef TOASTERBOXWINDOW_HH_INCLUDED #define TOASTERBOXWINDOW_HH_INCLUDED #include #include #include #include "../utils/mixins.hh" #if wxUSE_POPUPWIN #include typedef wxPopupWindow ToasterBase; #else #include typedef wxWindow ToasterBase; #endif class ToasterBoxWindow: public ToasterBase, public wxTimer , public SL::NonCopyable { public: ToasterBoxWindow(wxWindow* parent, wxTimer *_parent2); void SetPopupText(wxString _text, bool _shrink = false); void SetPopupSize(int x, int y); void SetPopupPosition(int x, int y); void SetPopupPauseTime(int milliseconds){pauseTime = milliseconds;} void SetPopupBitmap(wxString bitmapFile); void SetPopupBitmap(wxBitmap& bitmap); void SetPopupBackgroundColor(int r, int g, int b); void SetPopupTextColor(int r, int g, int b); void SetPopupScrollSpeed(int _sleepTime){sleepTime = _sleepTime;} void PrintInfo(); wxString GetPopupText(){return popupText;} bool Play(); bool DoesTextFit(); static long count; virtual bool AcceptsFocus() const { return false; } private: void ScrollUp(); void ScrollDown(); void DrawText(); void Notify(); long startTime; wxTimer *parent2; int sleepTime; int step; //how long the box hangs around for int pauseTime; wxColour textColor; wxString popupText; wxBitmap m_background_bitmap; wxStaticBitmap sbm; wxPanel *pn; wxString bitmapFile; wxPoint bottomRight, dialogTop; //should we attempt to shrink the text //if it's too big for the popup? bool shrink; //!two dummy functions that do nothing currently void OnPaint( wxPaintEvent& event ); void OnEraseBackground( wxEraseEvent& event ); }; #endif //#define TOASTERBOXWINDOW_HH_INCLUDED springlobby-0.169/src/toasterbox/ToasterBoxWindowList.cpp0000600000176000000410000000053412105760300025224 0ustar buildbotwww-data00000000000000#include //#include "wx/wxprec.h" #include #include #include #include #include #include #include #include "ToasterBoxWindow.h" #include "ToasterBoxWindowList.h" #include WX_DEFINE_LIST(ToasterBoxWindowList) springlobby-0.169/src/toasterbox/ToasterBoxWindowList.h0000600000176000000410000000053012105760300024665 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_TOASTERWINDOWLIST_HEADERGUARD #define SPRINGLOBBY_TOASTERWINDOWLIST_HEADERGUARD #include #include "ToasterBoxWindow.h" WX_DECLARE_LIST(ToasterBoxWindow, ToasterBoxWindowList); typedef ToasterBoxWindowList::compatibility_iterator ToasterBoxWindowListNode; #endif // SPRINGLOBBY_TOASTERWINDOWLIST_HEADERGUARD springlobby-0.169/src/ui.cpp0000600000176000000410000012415412121446441017343 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ // // Class: Ui // #ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include #include #include #include #include #include #include #include #include "introguide.h" #include "ui.h" #include "tasserver.h" #include "settings.h" #include "server.h" #include "spring.h" #include "channel/channel.h" #include "connectwindow.h" #include "mainwindow.h" #include "user.h" #include "utils/debug.h" #include "utils/conversion.h" #include "utils/uievents.h" #include "updater/updatehelper.h" #include "uiutils.h" #include "chatpanel.h" #include "battlelist/battlelisttab.h" #include "hosting/battleroomtab.h" #include "hosting/mainjoinbattletab.h" #include "hosting/mainsingleplayertab.h" #include "battle.h" #include "mainchattab.h" #include "crashreport.h" #include "maindownloadtab.h" #include "downloader/prdownloader.h" #include "agreementdialog.h" #ifdef __WXMSW__ #include "updater/updatehelper.h" #include "Helper/tasclientimport.h" #include #endif #include "reconnectdialog.h" #include "utils/customdialogs.h" #include "utils/platform.h" #include "updater/versionchecker.h" #include "sound/alsound.h" #include "globalsmanager.h" #include "utils/misc.h" static const unsigned int s_reconnect_delay_ms = 6000; Ui& ui() { static LineInfo m( AT ); static GlobalObjectHolder > m_ui( m ); return m_ui; } Ui::Ui() : m_serv(0), m_main_win(0), m_con_win(0), m_reconnect_dialog(0), m_upd_counter_torrent(0), m_first_update_trigger(true), m_ingame(false), m_recconecting_wait(false), m_battle_info_updatedSink( this, &BattleEvents::GetBattleEventSender( ( BattleEvents::BattleInfoUpdate ) ) ) { m_main_win = new MainWindow( ); CustomMessageBoxBase::setLobbypointer(m_main_win); m_serv = new TASServer(); serverSelector().SetCurrentServer( m_serv ); } Ui::~Ui() { Disconnect(); delete m_serv; } ChatPanel* Ui::GetActiveChatPanel() { return mw().GetActiveChatPanel(); } MainWindow& Ui::mw() { ASSERT_LOGIC( m_main_win != 0, _T("m_main_win = 0") ); return *m_main_win; } const MainWindow& Ui::mw() const { ASSERT_LOGIC( m_main_win != 0, _T("m_main_win = 0") ); return *m_main_win; } bool Ui::IsMainWindowCreated() const { if ( m_main_win == 0 ) return false; else return true; } //! @brief Shows the main window on screen void Ui::ShowMainWindow() { ASSERT_LOGIC( m_main_win != 0, _T("m_main_win = 0") ); mw().Show(true); } //! @brief Show the connect window on screen //! //! @note It will create the ConnectWindow if not allready created void Ui::ShowConnectWindow() { if ( IsConnecting() || IsConnected() || m_recconecting_wait ) return; if ( m_con_win == 0 ) { ASSERT_LOGIC( m_main_win != 0, _T("m_main_win = 0") ); m_con_win = new ConnectWindow( m_main_win, *this ); } m_con_win->CenterOnParent(); m_con_win->Show(true); m_con_win->Raise(); } //! @brief Connects to default server or opens the ConnectWindow //! //! @todo Fix Auto Connect //! @see DoConnect void Ui::Connect() { wxString server_name = sett().GetDefaultServer(); wxString nick = sett().GetServerAccountNick( server_name ); bool autoconnect = sett().GetAutoConnect(); if ( !autoconnect || server_name.IsEmpty() || nick.IsEmpty() ) ShowConnectWindow(); else { m_con_win = 0; wxString pass = sett().GetServerAccountPass( server_name ); DoConnect( server_name, nick, pass); } } void Ui::Reconnect() { wxString servname = sett().GetDefaultServer(); wxString pass = sett().GetServerAccountPass(servname); if ( !sett().GetServerAccountSavePass(servname) ) { if ( !AskPassword( _("Server password"), _("Password"), pass ) ) return; } Disconnect(); DoConnect( servname, sett().GetServerAccountNick(servname), pass ); } void Ui::Disconnect() { if ( m_serv != 0 ) { if ( IsConnected() ) { serverSelector().GetServer().Disconnect(); } } } //! @brief Opens the accutial connection to a server. void Ui::DoConnect( const wxString& servername, const wxString& username, const wxString& password ) { if ( m_reconnect_delay_timer.IsRunning() ) { m_recconecting_wait = true; AutocloseMessageBox m( &mw(), _("Waiting for reconnect"), wxMessageBoxCaptionStr, s_reconnect_delay_ms ); int res = m.ShowModal(); m_recconecting_wait = false; if ( res == wxID_CANCEL ) { m_reconnect_delay_timer.Stop(); return; } } wxString host; int port; if ( servername != m_last_used_backup_server ) // do not save the server as default if it's a backup one { sett().SetDefaultServer( servername ); } else { m_last_used_backup_server = _T(""); } if ( !sett().ServerExists( servername ) ) { ASSERT_LOGIC( false, _T("Server does not exist in settings") ); return; } Disconnect(); serverSelector().GetServer().SetUsername( username ); serverSelector().GetServer().SetPassword( password ); if ( sett().GetServerAccountSavePass( servername ) ) { if ( serverSelector().GetServer().IsPasswordHash(password) ) sett().SetServerAccountPass( servername, password ); else sett().SetServerAccountPass( servername, serverSelector().GetServer().GetPasswordHash( password ) ); } else { sett().SetServerAccountPass( servername, _T("") ); } sett().SaveSettings(); host = sett().GetServerHost( servername ); port = sett().GetServerPort( servername ); AddServerWindow( servername ); serverSelector().GetServer().uidata.panel->StatusMessage( _T("Connecting to server ") + servername + _T("...") ); // Connect serverSelector().GetServer().Connect( servername, host, port ); } void Ui::AddServerWindow( const wxString& servername ) { if ( !serverSelector().GetServer().uidata.panel ) { serverSelector().GetServer().uidata.panel = m_main_win->GetChatTab().AddChatPanel( *m_serv, servername ); } } void Ui::ReopenServerTab() { if ( serverSelector().GetServer().IsOnline() ) { AddServerWindow( serverSelector().GetServer().GetServerName() ); // re-add all users to the user list const UserList& list = serverSelector().GetServer().GetUserList(); for ( unsigned int i = 0; i < list.GetNumUsers(); i++ ) { serverSelector().GetServer().uidata.panel->OnChannelJoin( list.GetUser(i) ); } } } bool Ui::DoRegister( const wxString& servername, const wxString& username, const wxString& password,wxString& reason) { wxString host; int port; if ( !sett().ServerExists( servername ) ) { ASSERT_LOGIC( false, _T("Server does not exist in settings") ); return false; } host = sett().GetServerHost( servername ); port = sett().GetServerPort( servername ); bool success = serverSelector().GetServer().Register( host, port, username, password,reason ); if ( success ) { customMessageBox(SL_MAIN_ICON, _("Registration successful,\nyou should now be able to login."), _("Registration successful"), wxOK ); } else { wxLogWarning( _T("registration failed, reason: %s"), reason.c_str() ); if ( reason == _("Connection timed out") || reason.IsEmpty() ) ConnectionFailurePrompt(); else customMessageBox(SL_MAIN_ICON,_("Registration failed, the reason was:\n")+ reason , _("Registration failed."), wxOK ); } return success; } bool Ui::IsConnecting() const { if ( m_reconnect_dialog != 0 ) return m_reconnect_dialog->IsShown(); return false; } bool Ui::IsConnected() const { if ( m_serv != 0 ) return m_serv->IsConnected(); return false; } void Ui::JoinChannel( const wxString& name, const wxString& password ) { if ( m_serv != 0 ) serverSelector().GetServer().JoinChannel( name, password ); } bool Ui::IsSpringRunning() const { return spring().IsRunning(); } //! @brief Quits the entire application void Ui::Quit() { Disconnect(); if ( m_con_win != 0 ) m_con_win->Close(); } void Ui::DownloadMap( const wxString& /*hash*/, const wxString& name ) { std::string sname = STD_STRING(name); int count = prDownloader().GetMap(sname); assert( count > 0 ); } void Ui::DownloadMod( const wxString& /*hash*/, const wxString& name ) { prDownloader().GetGame( STD_STRING(name) ); } //void Ui::DownloadFileWebsite( const wxString& name ) //{ // wxString newname = name; // newname.Replace( _T(" "), _T("+") ); // wxString url = _T("http://spring.jobjol.nl/search_result.php?search_cat=1&select_select=select_file_subject&Submit=Search&search=") + newname; // OpenWebBrowser ( url ); //} //! @brief Display a dialog asking a question with OK and Canel buttons //! //! @return true if OK button was pressed //! @note this does not return until the user pressed any of the buttons or closed the dialog. bool Ui::Ask( const wxString& heading, const wxString& question ) const { int answer = customMessageBox( SL_MAIN_ICON, question, heading, wxYES_NO ); return ( answer == wxYES ); } //! cannot be const because parent window cannot be const bool Ui::AskPassword( const wxString& heading, const wxString& message, wxString& password ) { wxPasswordEntryDialog pw_dlg( &mw(), message, heading, password ); int res = pw_dlg.ShowModal(); password = pw_dlg.GetValue(); return ( res == wxID_OK ); } bool Ui::AskText( const wxString& heading, const wxString& question, wxString& answer, long style ) { wxTextEntryDialog name_dlg( &mw(), question, heading, answer, style ); int res = name_dlg.ShowModal(); answer = name_dlg.GetValue(); return ( res == wxID_OK ); } void Ui::ShowMessage( const wxString& heading, const wxString& message ) const { if ( m_main_win == 0 ) return; serverMessageBox( SL_MAIN_ICON, message, heading, wxOK); } bool Ui::ExecuteSayCommand( const wxString& cmd ) { if ( !IsConnected() ) return false; if ( (cmd.BeforeFirst(' ').Lower() == _T("/join")) || (cmd.BeforeFirst(' ').Lower() == _T("/j")) ) { wxString channel = cmd.AfterFirst(' '); wxString pass = channel.AfterFirst(' '); if ( !pass.IsEmpty() ) channel = channel.BeforeFirst(' '); if ( channel.StartsWith(_T("#")) ) channel.Remove( 0, 1 ); serverSelector().GetServer().JoinChannel( channel, pass ); return true; } else if ( cmd.BeforeFirst(' ').Lower() == _T("/away") ) { serverSelector().GetServer().GetMe().Status().away = true; serverSelector().GetServer().GetMe().SendMyUserStatus(); mw().GetJoinTab().GetBattleRoomTab().UpdateMyInfo(); return true; } else if ( cmd.BeforeFirst(' ').Lower() == _T("/back") ) { if ( IsConnected() ) { serverSelector().GetServer().GetMe().Status().away = false; serverSelector().GetServer().GetMe().SendMyUserStatus(); mw().GetJoinTab().GetBattleRoomTab().UpdateMyInfo(); return true; } } else if ( cmd.BeforeFirst(' ').Lower() == _T("/ingame") ) { wxString nick = cmd.AfterFirst(' '); serverSelector().GetServer().RequestInGameTime( nick ); return true; } else if ( cmd.BeforeFirst(' ').Lower() == _T("/help") ) { wxString topic = cmd.AfterFirst(' '); ConsoleHelp( topic.Lower() ); return true; } else if ( cmd.BeforeFirst(' ').Lower() == _T("/msg") ) { wxString user = cmd.AfterFirst(' ').BeforeFirst(' '); wxString msg = cmd.AfterFirst(' ').AfterFirst(' '); serverSelector().GetServer().SayPrivate( user, msg ); return true; } else if ( cmd.BeforeFirst(' ').Lower() == _T("/channels") ) { mw().ShowChannelChooser(); return true; } return false; } void Ui::ConsoleHelp( const wxString& topic ) { ChatPanel* panel = GetActiveChatPanel(); if ( panel == 0 ) { ShowMessage( _("Help error"), _("Type /help in a chat box. (A bug currently prevents this from working in battleroom") ); return; } if ( topic == wxEmptyString ) { panel->ClientMessage( IdentityString( _("%s commands help.") ) ); panel->ClientMessage( _T("") ); panel->ClientMessage( _("Global commands:") ); panel->ClientMessage( _(" \"/away\" - Sets your status to away.") ); panel->ClientMessage( _(" \"/back\" - Resets your away status.") ); panel->ClientMessage( _(" \"/changepassword2 newpassword\" - Changes the current active account's password, needs the old password saved in login box") ); panel->ClientMessage( _(" \"/changepassword oldpassword newpassword\" - Changes the current active account's password, password cannot contain spaces") ); panel->ClientMessage( _(" \"/channels\" - Lists currently active channels.") ); panel->ClientMessage( _(" \"/help [topic]\" - Put topic if you want to know more specific information about a command.") ); panel->ClientMessage( _(" \"/join channel [password]\" - Joins a channel.") ); panel->ClientMessage( _(" \"/j\" - Alias to /join.") ); panel->ClientMessage( _(" \"/ingame\" - Shows how much time you have in game.") ); panel->ClientMessage( _(" \"/msg username [text]\" - Sends a private message containing text to username.") ); panel->ClientMessage( _(" \"/part\" - Leaves current channel.") ); panel->ClientMessage( _(" \"/p\" - Alias to /part.") ); panel->ClientMessage( _(" \"/rename newalias\" - Changes your nickname to newalias.") ); panel->ClientMessage( IdentityString( _(" \"/sayver\" - Says what version of %s you have in chat.") ) ); panel->ClientMessage( _(" \"/testmd5 text\" - Returns md5-b64 hash of given text.") ); panel->ClientMessage( IdentityString( _(" \"/ver\" - Displays what version of %s you have.") ) ); panel->ClientMessage( _(" \"/clear\" - Clears all text from current chat panel") ); panel->ClientMessage( _T("") ); panel->ClientMessage( _("Chat commands:") ); panel->ClientMessage( _(" \"/me action\" - Say IRC style action message.") ); panel->ClientMessage( _T("") ); panel->ClientMessage( _("If you are missing any commands, go to #springlobby and try to type it there :)") ); // panel->ClientMessage( _(" \"/\" - .") ); } else if ( topic == _T("topics") ) { panel->ClientMessage( _("No topics written yet.") ); } else { panel->ClientMessage( _("The topic \"") + topic + _("\" was not found. Type \"/help topics\" only for available topics.") ); } } ChatPanel* Ui::GetChannelChatPanel( const wxString& channel ) { return mw().GetChannelChatPanel( channel ); } //////////////////////////////////////////////////////////////////////////////////////////// // EVENTS //////////////////////////////////////////////////////////////////////////////////////////// void Ui::OnUpdate( int mselapsed ) { if ( serverSelector().GetServerStatus() ) { serverSelector().GetServer().Update( mselapsed ); } if ( m_first_update_trigger ) { m_first_update_trigger = false; if ( sett().GetAutoConnect() ) { Connect(); //the start tab is set from UI::onLoggedin } else { mw().ShowTab( sett().GetStartTab() ); } #ifdef __WXMSW__ //don't ask for updates on first run, that's a bit much for a newbie if ( sett().GetAutoUpdate() && !sett().IsFirstRun() ) CheckForUpdates(); #endif } if (m_upd_counter_torrent % 20 == 0 ) { mw().GetDownloadTab().OnUpdate(); } // prDownloader().UpdateFromTimer( mselapsed ); m_upd_counter_torrent++; } //! @brief Called when connected to a server //! //! @todo Display in servertab void Ui::OnConnected( Server& server, const wxString& server_name, const wxString& /*unused*/, bool /*supported*/ ) { wxLogDebugFunc( _T("") ); if ( !IsSpringCompatible() ) { #ifdef __WXMSW__ server.RequestSpringUpdate(); #endif } if ( server.uidata.panel ) server.uidata.panel->StatusMessage( _T("Connected to ") + server_name + _T(".") ); mw().GetBattleListTab().OnConnected(); delete m_con_win; m_con_win = 0; delete m_reconnect_dialog; m_reconnect_dialog = 0; } bool Ui::IsSpringCompatible() { sett().RefreshSpringVersionList(); if ( sett().GetDisableSpringVersionCheck() ) return true; wxString neededversion = serverSelector().GetServer().GetRequiredSpring(); if ( neededversion == _T("*") ) return true; // Server accepts any version. else if ( neededversion.IsEmpty() ) return false; std::map versionlist = sett().GetSpringVersionList(); if ( versionlist.empty() ) { wxLogWarning( _T("can't get spring version from any unitsync") ); customMessageBoxNoModal(SL_MAIN_ICON, _("Couldn't get your spring versions from any unitsync library.\n\nOnline play is currently disabled."), _("Spring error"), wxICON_EXCLAMATION|wxOK ); return false; } for ( std::map::const_iterator itor = versionlist.begin(); itor != versionlist.end(); ++itor ) { if ( itor->second == neededversion ) { if ( sett().GetCurrentUsedSpringIndex() != itor->first ) { wxLogMessage(_T("server enforce usage of version: %s, switching to profile: %s"), neededversion.c_str(), itor->first.c_str() ); sett().SetUsedSpringIndex( itor->first ); usync().AddReloadEvent(); } return true; } } wxString message = wxFormat( _("No compatible installed spring version has been found, this server requires version: %s\n") ) % neededversion; message << _("Your current installed versions are:"); for ( std::map::const_iterator itor = versionlist.begin(); itor != versionlist.end(); ++itor ) message << _T(" ") << itor->second; message << _T("\n") << _("Online play is currently disabled."); customMessageBoxNoModal (SL_MAIN_ICON, message, _("Spring error"), wxICON_EXCLAMATION|wxOK ); wxLogWarning ( _T("no spring version supported by the server found") ); return false; // no compatible version found } void Ui::OnLoggedIn( ) { if ( m_main_win == 0 ) return; mw().GetChatTab().RejoinChannels(); if ( sett().GetAutoConnect() ) mw().ShowTab( sett().GetStartTab() ); } void Ui::OnDisconnected( Server& server, bool wasonline ) { m_reconnect_delay_timer.Start( s_reconnect_delay_ms, true ); if ( m_main_win == 0 ) return; wxLogDebugFunc( _T("") ); if (!&server) { wxLogError(_T("WTF got null reference!!!")); return; } mw().GetJoinTab().LeaveCurrentBattle(); mw().GetBattleListTab().RemoveAllBattles(); mw().GetChatTab().LeaveChannels(); wxString disconnect_msg = wxFormat(_("disconnected from server: %s") ) % server.GetServerName(); UiEvents::GetStatusEventSender( UiEvents::addStatusMessage ).SendEvent( UiEvents::StatusData( disconnect_msg, 1 ) ); if ( !wxTheApp->IsActive() ) { UiEvents::GetNotificationEventSender().SendEvent( UiEvents::NotficationData( UiEvents::ServerConnection, disconnect_msg ) ); } if ( server.uidata.panel ) { server.uidata.panel->StatusMessage( disconnect_msg ); server.uidata.panel->SetServer( 0 ); } if ( !wasonline ) // couldn't even estabilish a socket, prompt the user to switch to another server { ConnectionFailurePrompt(); } } void Ui::ConnectionFailurePrompt() { if ( m_reconnect_dialog != 0 ) { return; } if ( m_recconecting_wait ) { return; } // if connect window instance exists, delete it to avoid 2 windows which do the same task delete m_con_win; m_con_win = 0; m_reconnect_dialog = new ReconnectDialog(); int returnval = m_reconnect_dialog->ShowModal(); delete m_reconnect_dialog; m_reconnect_dialog = 0; switch ( returnval ) { case wxID_YES: // try again with the same server/settings { Reconnect(); break; } case wxID_NO: // switch to next server in the list { m_last_used_backup_server = GetNextServer(); wxString current_server = sett().GetDefaultServer(); sett().SetDefaultServer( m_last_used_backup_server );// temp set backup server as default Connect(); sett().SetDefaultServer( current_server ); // restore original serv break; } default: case wxID_CANCEL: // do nothing { return; } } } wxString Ui::GetNextServer() { wxString previous_server = m_last_used_backup_server; if ( previous_server.IsEmpty() ) previous_server = sett().GetDefaultServer(); wxArrayString serverlist = sett().GetServers(); int position = serverlist.Index( previous_server ); if ( position == wxNOT_FOUND ) position = -1; position = ( position + 1) % serverlist.GetCount(); // switch to next in the list return serverlist[position]; } static inline bool IsAutoJoinChannel( Channel& chan ) { typedef std::vector Vec; typedef Vec::const_iterator VecIt; const Vec chans = sett().GetChannelsJoin(); for ( VecIt it = chans.begin(); it != chans.end(); ++it ) { if ( it->name == chan.GetName() ) return true; } return false; } //! @brief Called when client has joined a channel //! //! @todo Check if a pannel allready exists for this channel void Ui::OnJoinedChannelSuccessful( Channel& chan ) { bool doFocus = !sett().GetAutoConnect() || !IsAutoJoinChannel( chan ); bool panel_exists = mw().GetChannelChatPanel( chan.GetName() ) != NULL; OnJoinedChannelSuccessful( chan, !panel_exists && doFocus ); } void Ui::OnJoinedChannelSuccessful( Channel& chan, bool focusTab ) { if ( m_main_win == 0 ) return; wxLogDebugFunc( _T("") ); chan.uidata.panel = 0; mw().OpenChannelChat( chan, focusTab ); } //! @brief Called when something is said in a channel void Ui::OnChannelSaid( Channel& channel, User& user, const wxString& message ) { wxLogDebugFunc( _T("") ); if ( channel.uidata.panel == 0 ) { wxLogError( _T("ud->panel NULL") ); return; } channel.uidata.panel->Said( user.GetNick(), message ); } void Ui::OnChannelDidAction( Channel& channel , User& user, const wxString& action ) { wxLogDebugFunc( _T("") ); if ( channel.uidata.panel == 0 ) { wxLogError( _T("ud->panel NULL") ); return; } channel.uidata.panel->DidAction( user.GetNick(), action ); } void Ui::OnChannelMessage( const wxString& channel, const wxString& msg ) { ChatPanel* panel = GetChannelChatPanel( channel ); if ( panel != 0 ) { panel->StatusMessage( msg ); } } /** \brief this was used when channel was left via raw command in server tab, now it's not used by anything */ void Ui::OnLeaveChannel( wxString& name ) { ChatPanel* panel = GetChannelChatPanel( name ); if (panel) mw().GetChatTab().RemoveChatPanel( panel ); } void Ui::OnUserJoinedChannel( Channel& chan, User& user ) { //wxLogDebugFunc( _T("") ); if ( chan.uidata.panel == 0 ) { wxLogError( _T("ud->panel NULL") ); return; } chan.uidata.panel->Joined( user ); } void Ui::OnChannelJoin( Channel& chan, User& user ) { //wxLogDebugFunc( _T("") ); if ( chan.uidata.panel == 0 ) { wxLogError( _T("ud->panel NULL") ); return; } chan.uidata.panel->OnChannelJoin( user ); } void Ui::OnUserLeftChannel( Channel& chan, User& user, const wxString& reason ) { //wxLogDebugFunc( _T("") ); if ( chan.uidata.panel == 0 ) { wxLogError( _T("ud->panel NULL") ); return; } chan.uidata.panel->Parted( user, reason ); } void Ui::OnChannelTopic( Channel& channel, const wxString& user, const wxString& topic ) { wxLogDebugFunc( _T("") ); if ( channel.uidata.panel == 0 ) { wxLogError( _T("ud->panel NULL") ); return; } channel.uidata.panel->SetTopic( user, topic ); } void Ui::OnChannelList( const wxString& channel, const int& numusers ) { ChatPanel* panel = GetActiveChatPanel(); if ( panel == 0 ) { ShowMessage( _("error"), _("no active chat panels open.") ); return; } panel->StatusMessage( wxFormat( _("%s (%d users)") ) % channel % numusers ); } void Ui::OnUserOnline( User& user ) { if ( m_main_win == 0 ) return; /* UiUserData* data = new UiUserData(); data->panel = 0; user.SetUserData( (void*)data );*/ mw().GetChatTab().OnUserConnected( user ); } void Ui::OnUserOffline( User& user ) { if ( m_main_win == 0 ) return; mw().GetChatTab().OnUserDisconnected( user ); if ( user.uidata.panel ) { user.uidata.panel->SetUser( 0 ); user.uidata.panel = 0; } /* UiUserData* data = (UiUserData*)user.GetUserData(); if ( data == 0) return; delete data;*/ } void Ui::OnUserStatusChanged( User& user ) { if ( m_main_win == 0 ) return; for ( int i = 0; i < serverSelector().GetServer().GetNumChannels(); i++ ) { Channel& chan = serverSelector().GetServer().GetChannel( i ); if ( ( chan.UserExists(user.GetNick()) ) && ( chan.uidata.panel != 0 ) ) { chan.uidata.panel->UserStatusUpdated( user ); } } if ( user.uidata.panel ) { user.uidata.panel->UserStatusUpdated( user ); } if ( user.GetStatus().in_game ) mw().GetBattleListTab().UserUpdate( user ); try { ChatPanel& server = mw().GetChatTab().ServerChat(); server.UserStatusUpdated( user ); } catch(...){} } void Ui::OnUnknownCommand( Server& server, const wxString& command, const wxString& params ) { if ( server.uidata.panel != 0 ) server.uidata.panel->UnknownCommand( command, params ); } void Ui::OnMotd( Server& server, const wxString& message ) { if ( server.uidata.panel != 0 ) server.uidata.panel->Motd( message ); } void Ui::OnServerBroadcast( Server& /*server*/, const wxString& message ) { if ( m_main_win == 0 ) return; mw().GetChatTab().BroadcastMessage( message ); try // send it to battleroom too { mw().GetJoinTab().GetBattleRoomTab().GetChatPanel().StatusMessage(message); } catch(...) {} } void Ui::OnServerMessage( Server& server, const wxString& message ) { if ( !sett().GetBroadcastEverywhere() ) { if ( server.uidata.panel != 0 ) server.uidata.panel->StatusMessage( message ); } else { if ( server.uidata.panel != 0 ) server.uidata.panel->StatusMessage( message ); if ( m_main_win == 0 ) return; ChatPanel* activepanel = mw().GetChatTab().GetActiveChatPanel(); if ( activepanel != 0 ) { if (activepanel != server.uidata.panel) activepanel->StatusMessage(message); // don't send it twice to the server tab } try // send it to battleroom too { mw().GetJoinTab().GetBattleRoomTab().GetChatPanel().StatusMessage(message); } catch(...) {} } } void Ui::OnUserSaid( User& user, const wxString& message, bool fromme ) { if ( m_main_win == 0 ) return; if ( user.uidata.panel == 0 ) { mw().OpenPrivateChat( user ); } if ( fromme ) user.uidata.panel->Said( serverSelector().GetServer().GetMe().GetNick(), message ); else user.uidata.panel->Said( user.GetNick(), message ); } void Ui::OnUserSaidEx( User& user, const wxString& action, bool fromme ) { if ( m_main_win == 0 ) return; if ( user.uidata.panel == 0 ) { mw().OpenPrivateChat( user ); } if ( fromme ) user.uidata.panel->DidAction ( serverSelector().GetServer().GetMe().GetNick(), action ); else user.uidata.panel->DidAction( user.GetNick(), action ); } void Ui::OnBattleOpened( IBattle& battle ) { if ( m_main_win == 0 ) return; mw().GetBattleListTab().AddBattle( battle ); try { User& user = battle.GetFounder(); for ( int i = 0; i < serverSelector().GetServer().GetNumChannels(); i++ ) { Channel& chan = serverSelector().GetServer().GetChannel( i ); if ( ( chan.UserExists(user.GetNick()) ) && ( chan.uidata.panel != 0 ) ) { chan.uidata.panel->UserStatusUpdated( user ); } } }catch(...){} } void Ui::OnBattleClosed( IBattle& battle ) { if ( m_main_win == 0 ) return; mw().GetBattleListTab().RemoveBattle( battle ); try { if ( mw().GetJoinTab().GetBattleRoomTab().GetBattle() == &battle ) { if (!battle.IsFounderMe() ) customMessageBoxNoModal(SL_MAIN_ICON,_("The current battle was closed by the host."),_("Battle closed")); mw().GetJoinTab().LeaveCurrentBattle(); } } catch (...){} for ( unsigned int b = 0; b < battle.GetNumUsers(); b++ ) { User& user = battle.GetUser( b ); user.SetBattle(0); for ( int i = 0; i < serverSelector().GetServer().GetNumChannels(); i++ ) { Channel& chan = serverSelector().GetServer().GetChannel( i ); if ( ( chan.UserExists(user.GetNick()) ) && ( chan.uidata.panel != 0 ) ) { chan.uidata.panel->UserStatusUpdated( user ); } } } } void Ui::OnUserJoinedBattle( IBattle& battle, User& user ) { if ( m_main_win == 0 ) return; mw().GetBattleListTab().UpdateBattle( battle ); try { if ( mw().GetJoinTab().GetBattleRoomTab().GetBattle() == &battle ) { mw().GetJoinTab().GetBattleRoomTab().OnUserJoined( user ); OnBattleInfoUpdated( std::make_pair(&battle,wxString()) ); } } catch (...){} for ( int i = 0; i < serverSelector().GetServer().GetNumChannels(); i++ ) { Channel& chan = serverSelector().GetServer().GetChannel( i ); if ( ( chan.UserExists(user.GetNick()) ) && ( chan.uidata.panel != 0 ) ) { chan.uidata.panel->UserStatusUpdated( user ); } } } void Ui::OnUserLeftBattle( IBattle& battle, User& user, bool isbot ) { if ( m_main_win == 0 ) return; user.SetSideiconIndex( -1 ); //just making sure he's not running around with some icon still set user.BattleStatus().side = 0; // and reset side, so after rejoin we don't potentially stick with a num higher than avail mw().GetBattleListTab().UpdateBattle( battle ); try { if ( mw().GetJoinTab().GetBattleRoomTab().GetBattle() == &battle ) { mw().GetJoinTab().GetBattleRoomTab().OnUserLeft( user ); OnBattleInfoUpdated( std::make_pair(&battle,wxString()) ); if ( &user == &serverSelector().GetServer().GetMe() ) { mw().GetJoinTab().LeaveCurrentBattle(); } } } catch (...) {} if ( isbot ) return; for ( int i = 0; i < serverSelector().GetServer().GetNumChannels(); i++ ) { Channel& chan = serverSelector().GetServer().GetChannel( i ); if ( ( chan.UserExists(user.GetNick()) ) && ( chan.uidata.panel != 0 ) ) { chan.uidata.panel->UserStatusUpdated( user ); } } } void Ui::OnBattleInfoUpdated( BattleEvents::BattleEventData data ) { IBattle& battle = *data.first; const wxString& Tag = data.second; if ( m_main_win == 0 ) return; mw().GetBattleListTab().UpdateBattle( battle ); if ( mw().GetJoinTab().GetCurrentBattle() == &battle ) { if ( Tag.IsEmpty() ) mw().GetJoinTab().UpdateCurrentBattle(); else mw().GetJoinTab().UpdateCurrentBattle( Tag ); } } //void Ui::OnBattleInfoUpdated( IBattle& battle, const wxString& Tag ) //{ // if ( m_main_win == 0 ) return; // mw().GetBattleListTab().UpdateBattle( battle ); // if ( mw().GetJoinTab().GetCurrentBattle() == &battle ) // { // mw().GetJoinTab().UpdateCurrentBattle( Tag ); // } //} void Ui::OnJoinedBattle( Battle& battle ) { if ( m_main_win == 0 ) return; mw().GetJoinTab().JoinBattle( battle ); mw().FocusBattleRoomTab(); if ( !usync().IsLoaded() ) { customMessageBox(SL_MAIN_ICON, _("Your spring settings are probably not configured correctly,\nyou should take another look at your settings before trying\nto play online."), _("Spring settings error"), wxOK ); } if ( battle.GetNatType() != NAT_None ) { wxLogWarning( _T("joining game with NAT transversal") ); } } void Ui::OnHostedBattle( Battle& battle ) { if ( m_main_win == 0 ) return; mw().GetJoinTab().HostBattle( battle ); mw().FocusBattleRoomTab(); } void Ui::OnUserBattleStatus( IBattle& battle, User& user ) { if ( m_main_win == 0 ) return; mw().GetJoinTab().BattleUserUpdated( user ); OnBattleInfoUpdated( std::make_pair(&battle,wxString()) ); } void Ui::OnRequestBattleStatus( IBattle& battle ) { if ( m_main_win == 0 ) return; try { if ( mw().GetJoinTab().GetBattleRoomTab().GetBattle() == &battle ) { mw().GetJoinTab().GetBattleRoomTab().GetBattle()->OnRequestBattleStatus(); } } catch (...) {} } void Ui::OnBattleStarted( Battle& battle ) { if ( m_main_win == 0 ) return; wxLogDebugFunc( _T("") ); mw().GetBattleListTab().UpdateBattle( battle ); } void Ui::OnSaidBattle( IBattle& /*battle*/, const wxString& nick, const wxString& msg ) { if ( m_main_win == 0 ) return; try { mw().GetJoinTab().GetBattleRoomTab().GetChatPanel().Said( nick, msg ); } catch (...) {} } void Ui::OnSpringStarting() { m_ingame = true; prDownloader().SetIngameStatus( m_ingame ); } void Ui::OnSpringTerminated( long exit_code ) { m_ingame = false; prDownloader().SetIngameStatus( m_ingame ); if ( !m_serv ) return; try { serverSelector().GetServer().GetMe().Status().in_game = false; serverSelector().GetServer().GetMe().SendMyUserStatus(); Battle *battle = serverSelector().GetServer().GetCurrentBattle(); if ( !battle ) return; if( battle->IsFounderMe() && battle->GetAutoLockOnStart() ) { battle->SetIsLocked( false ); battle->SendHostInfo( IBattle::HI_Locked ); } } catch ( assert_exception ){} if ( false && exit_code ) { // disabled for now for stability #if wxUSE_DEBUGREPORT && defined(ENABLE_DEBUG_REPORT) SpringDebugReport report; if ( wxDebugReportPreviewStd().Show( report ) ) report.Process(); #else if ( customMessageBox( SL_MAIN_ICON, _T("The game has crashed.\nOpen infolog.txt?"), _T("Crash"), wxYES_NO ) == wxYES ) OpenFileInEditor( sett().GetCurrentUsedDataDir() + wxFileName::GetPathSeparator() + _T("infolog.txt") ); #endif } } void Ui::OnAcceptAgreement( const wxString& agreement ) { AgreementDialog dlg( m_main_win, agreement ); if ( dlg.ShowModal() == 1 ) { serverSelector().GetServer().AcceptAgreement(); serverSelector().GetServer().Login(); } } void Ui::OnRing( const wxString& from ) { if ( m_main_win == 0 ) return; m_main_win->RequestUserAttention(); if ( !wxTheApp->IsActive() ) { UiEvents::GetNotificationEventSender().SendEvent( UiEvents::NotficationData( UiEvents::ServerConnection, wxFormat(_("%s:\nring!") ) % from ) ); } const Battle* battle = serverSelector().GetServer().GetCurrentBattle(); if ( (battle != NULL) && (battle->GetMe().GetBattleStatus().sync == SYNC_UNSYNCED)) { wxString host_map_name = serverSelector().GetServer().GetCurrentBattle()->GetHostMapName(); // if(! usync().MapExists(host_map_name)) {//TODO // map_infos info_map = prDownloader().CollectGuiInfos(); // bool dling = false; // for(map_infos_iter iter = info_map.begin(); iter != info_map.end(); ++iter){ // if(iter->first == wxString(_T("global"))) // continue; // else if(iter->first == host_map_name) { // int eta = iter->second.eta; // if(eta <= 0) { // serverSelector().GetServer().GetCurrentBattle()->ExecuteSayCommand(_("/me map is not available for automatic downloading.")); // } else { // serverSelector().GetServer().GetCurrentBattle()->ExecuteSayCommand(wxString::Format( // _("/me downloading map eta: %d s"), eta) // ); // dling = true; // } // } // } // if(! dling) { //XXX is it possible to get eta from web dl in sl?, anyone using it instead torrent system? //there is no direct from-web downloading in SL currently // serverSelector().GetServer().GetCurrentBattle()->ExecuteSayCommand( // _("/me is not downloading map with SL torrent system")); // } // } } #ifndef DISABLE_SOUND if ( sett().GetChatPMSoundNotificationEnabled() ) sound().ring(); #else wxBell(); #endif } bool Ui::IsThisMe(User& other) const { return IsThisMe( other.GetNick() ); } bool Ui::IsThisMe(User* other) const { return ( ( other != 0 ) && IsThisMe( other->GetNick() ) ); } bool Ui::IsThisMe(const wxString& other) const { //if i'm not connected i have no identity if (!IsConnected() || m_serv==0) return false; else return ( other == serverSelector().GetServer().GetMe().GetNick() ); } int Ui::TestHostPort( unsigned int port ) const { return serverSelector().GetServer().TestOpenPort( port ); } void Ui::ReloadPresetList() { try { mw().GetSPTab().ReloadPresetList(); } catch (...) {} try { mw().GetJoinTab().ReloadPresetList(); } catch (...) {} } bool Ui::OnPresetRequiringMap( const wxString& mapname ) { if ( wxYES == customMessageBox( SL_MAIN_ICON, _("The selected preset requires the map ") + mapname + _(". Should it be downloaded? \ \n Selecting \"no\" will remove the missing map from the preset.\n\ Please reselect the preset after download finished"), _("Map missing"), wxYES_NO ) ) { DownloadMap( _T("") , mapname ); return true; } return false; } void Ui::OpenFileInEditor( const wxString& filepath ) { wxString editor_path = sett().GetEditorPath( ); if ( editor_path == wxEmptyString ) { customMessageBoxNoModal( SL_MAIN_ICON, _T("You have not chosen an external text editor to open files with.\nPlease Select one now."), _T("No editor set") ); mw().ShowConfigure( MainWindow::OPT_PAGE_GENERAL ); return; } bool success = ( wxExecute( editor_path + _T(" \"") + filepath + _T("\""), wxEXEC_ASYNC ) != 0 ); if ( !success ) { customMessageBoxNoModal( SL_MAIN_ICON, _T("There was a problem launching the editor.\nPlease make sure the path is correct and the binary executable for your user.\nNote it's currently not possible to use shell-only editors like ed, vi, etc."), _T("Problem launching editor") ); mw().ShowConfigure( MainWindow::OPT_PAGE_GENERAL ); } } void Ui::FirstRunWelcome() { if ( sett().IsFirstRun() ) { #ifdef __WXMSW__ sett().SetOldSpringLaunchMethod( true ); #endif wxLogMessage( _T("first time startup")); wxMessageBox( wxFormat( _("Hi %s,\nIt looks like this is your first time using %s. I have guessed a configuration that I think will work for you but you should review it, especially the Spring configuration.") ) % wxGetUserName() % GetAppName(), _("Welcome"), wxOK | wxICON_INFORMATION, &mw() ); IntroGuide* intro = new IntroGuide(); intro->Show(); // copy uikeys.txt wxPathList pl; pl.AddEnvList( _T("%ProgramFiles%") ); pl.AddEnvList( _T("XDG_DATA_DIRS") ); pl = PathlistFactory::AdditionalSearchPaths( pl ); wxString uikeyslocation = pl.FindValidPath( _T("uikeys.txt") ); if ( !uikeyslocation.IsEmpty() ) { wxCopyFile( uikeyslocation, sett().GetCurrentUsedDataDir() + wxFileName::GetPathSeparator() + _T("uikeys.txt"), false ); } #ifdef __WXMSW__ if ( TASClientPresent() && customMessageBox(SL_MAIN_ICON, _("Should I try to import (some) TASClient settings?\n" ),_("Import settings?"), wxYES_NO ) == wxYES ) { ImportTASClientSettings(); } #endif //this ensures that for new configs there's a default perspective to fall back on mw().SavePerspectives( _T("SpringLobby-default") ); mw().ShowConfigure(); } else { mw().ShowSingleplayer(); } } void Ui::CheckForUpdates() { wxString latestVersion = GetLatestVersion(); if (latestVersion == _T("-1")) { customMessageBoxNoModal(SL_MAIN_ICON, _("There was an error checking for the latest version.\nPlease try again later.\nIf the problem persists, please use Help->Report Bug to report this bug."), _("Error")); return; } //get current rev w/o AUX_VERSION added wxString myVersion = GetSpringLobbyVersion( false ) ; wxString msg = _("Your Version: ") + myVersion + _T("\n") + _("Latest Version: ") + latestVersion; if ( !latestVersion.IsSameAs(myVersion, false) ) { #ifdef __WXMSW__ int answer = customMessageBox(SL_MAIN_ICON, wxFormat( _("Your %s version is not up to date.\n\n%s\n\nWould you like for me to autodownload the new version? Changes will take effect next you launch the lobby again.") ) % GetAppName() % msg, _("Not up to date"), wxYES_NO); if (answer == wxYES) { wxString command = _T("\"") + wxPathOnly( wxStandardPaths::Get().GetExecutablePath() ) + wxFileName::GetPathSeparator() + _T("springlobby_updater.exe\""); wxString params = _T("-f \"") + wxStandardPaths::Get().GetExecutablePath() + _T("\"") + _T(" -r ") + latestVersion ; if( WinExecute( command, params ) > 0 ) { //returned pid > 0 -> proc started successfully // now close this instance immeadiately wxCloseEvent dummy; ui().mw().OnClose( dummy ); } else {//this will also happen if updater exe is not present so we don't really ne special check for existance of it customMessageBox(SL_MAIN_ICON, _("Automatic update failed\n\nyou will be redirected to a web page with instructions and the download link will be opened in your browser.") + msg, _("Updater error.") ); OpenWebBrowser( _T("http://projects.springlobby.info/wiki/springlobby/Install#Windows-Binary") ); OpenWebBrowser( GetDownloadUrl( latestVersion ) ); } } #else customMessageBoxNoModal(SL_MAIN_ICON, _("Your SpringLobby version is not up to date.\n\n") + msg, _("Not up to Date") ); #endif } /* TODO currently not usable cause automatic update calls this function too and we don't want a msg box everytime the check succeeds else customMessageBoxNoModal(SL_MAIN_ICON, _("Your SpringLobby version is up to date.\n\n") + msg, _("Up to Date") ); */ } springlobby-0.169/src/ui.h0000600000176000000410000001512712105760300017002 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_UI_H #define SPRINGLOBBY_HEADERGUARD_UI_H class Server; class TASServer; class ConnectWindow; class Spring; class MainWindow; class Channel; class User; class IBattle; class Battle; class SinglePlayerBattle; class OfflineBattle; class ChatPanel; class ReconnectDialog; //this removes the necessity to drag wx/event.h into almost every other file for a single type //if it's too "hackish" for someone's taste, just include that header again and remove this (koshi) #ifndef wxEventType typedef int wxEventType; #endif typedef int AlertEventType; extern const wxEventType torrentSystemStatusUpdateEvt; #include "utils/battleevents.h" #include #include #include "utils/mixins.hh" //! @brief UI main class class Ui : public SL::NonCopyable { public: Ui(); ~Ui(); enum PlaybackEnum { ReplayPlayback, SavegamePlayback }; ChatPanel* GetActiveChatPanel(); ChatPanel* GetChannelChatPanel( const wxString& channel ); bool ExecuteSayCommand( const wxString& cmd ); void ConsoleHelp( const wxString& topic ); void ShowMainWindow(); void ShowConnectWindow(); void Connect(); void Disconnect(); void Reconnect(); void DoConnect( const wxString& servername, const wxString& username, const wxString& password ); void AddServerWindow( const wxString& servername ); void ReopenServerTab(); void ConnectionFailurePrompt(); wxString GetNextServer(); bool DoRegister( const wxString& servername, const wxString& username, const wxString& password, wxString& reason ); bool IsConnecting() const; bool IsConnected() const; void JoinChannel( const wxString& name, const wxString& password ); bool IsSpringCompatible(); bool IsSpringRunning() const; void Quit(); void DownloadMap( const wxString& hash, const wxString& name ); void DownloadMod( const wxString& hash, const wxString& name ); bool Ask( const wxString& heading, const wxString& question ) const; bool AskText( const wxString& heading, const wxString& question, wxString& answer, long style = wxOK | wxCANCEL | wxCENTRE ); bool AskPassword( const wxString& heading, const wxString& message, wxString& password ); void ShowMessage( const wxString& heading, const wxString& message ) const; //void OnAlertEvent( AlertEventType ); //TODO alert system MainWindow& mw(); const MainWindow& mw() const; bool IsMainWindowCreated() const; void OnUpdate( int mselapsed ); void OnConnected( Server& server, const wxString& server_name, const wxString& server_ver, bool supported ); void OnLoggedIn( ); void OnDisconnected( Server& server, bool wasonline ); void OnJoinedChannelSuccessful( Channel& chan ); void OnJoinedChannelSuccessful( Channel& chan, bool focusTab ); void OnUserJoinedChannel( Channel& chan, User& user ); void OnChannelJoin( Channel& chan, User& user ); void OnUserLeftChannel( Channel& chan, User& user, const wxString& reason ); void OnChannelTopic( Channel& channel , const wxString& user, const wxString& topic ); void OnChannelSaid( Channel& channel , User& user, const wxString& message ); void OnChannelDidAction( Channel& channel , User& user, const wxString& action ); void OnChannelMessage( const wxString& channel, const wxString& msg ); void OnLeaveChannel( wxString& name ); void OnChannelList( const wxString& channel, const int& numusers ); void OnUserOnline( User& user ); void OnUserOffline( User& user ); void OnUserStatusChanged( User& user ); void OnUserSaid( User& user, const wxString& message, bool me = false ); void OnUserSaidEx( User& user, const wxString& action, bool me = false ); void OnUnknownCommand( Server& server, const wxString& command, const wxString& params ); void OnMotd( Server& server, const wxString& message ); void OnServerBroadcast( Server& server, const wxString& message ); void OnServerMessage( Server& server, const wxString& message ); void OnBattleOpened( IBattle& battle ); void OnBattleClosed( IBattle& battle ); void OnUserJoinedBattle( IBattle& battle, User& user ); void OnUserLeftBattle( IBattle& battle, User& user, bool isbot ); void OnBattleInfoUpdated( BattleEvents::BattleEventData data ); // void OnBattleInfoUpdated( IBattle& battle, const wxString& Tag ); void OnBattleStarted( Battle& battle ); void OnJoinedBattle( Battle& battle ); void OnHostedBattle( Battle& battle ); void OnUserBattleStatus( IBattle& battle, User& user ); void OnRequestBattleStatus( IBattle& battle ); void OnSaidBattle( IBattle& battle, const wxString& nick, const wxString& msg ); // void OnBattleAction( IBattle& battle, const wxString& nick, const wxString& msg ); void OnSpringStarting(); void OnSpringTerminated( long exit_code ); void OnAcceptAgreement( const wxString& agreement ); void OnMainWindowDestruct(); void OnRing( const wxString& from ); //! ask to download missing map, return true if download attempted bool OnPresetRequiringMap( const wxString& mapname ); bool IsThisMe(User& other) const; bool IsThisMe(User* other) const; bool IsThisMe(const wxString& other) const; int TestHostPort( unsigned int port ) const; void ReloadPresetList(); void OpenFileInEditor( const wxString& filepath ); //! the welcome box, should be called in all code paths directly after MainWindow might be shown for the first time void FirstRunWelcome(); void CheckForUpdates(); protected: Server* m_serv; MainWindow* m_main_win; ConnectWindow* m_con_win; wxTimer m_reconnect_delay_timer; ReconnectDialog* m_reconnect_dialog; wxString m_last_used_backup_server; unsigned int m_upd_counter_torrent; bool m_first_update_trigger; bool m_ingame; bool m_recconecting_wait; EventReceiverFunc m_battle_info_updatedSink; }; Ui& ui(); #endif // SPRINGLOBBY_HEADERGUARD_UI_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/uiutils.cpp0000600000176000000410000003735112105760300020421 0ustar buildbotwww-data00000000000000/// \file uiutils.cpp /* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include #include #include #include #include #include #include #include #include #include #include #include #include "uiutils.h" #include #include "utils/conversion.h" #include "utils/debug.h" #include "utils/customdialogs.h" #include "settings.h" #include "images/colourbox.xpm" wxString RTFtoText( const wxString& rtfinput ) { wxString ret = rtfinput; ret = ret.AfterFirst( '{' ).BeforeLast( '}' ); ret.Replace( _T("\\pard"), _T("") ); // remove a ambiguus char ret.Replace( _T("\\par"), _T(" \n") ); // convert the end of lines wxString BeforeBrack = ret.BeforeFirst( '{' ); wxString AfterBrack = ret.AfterLast( '}' ); ret = BeforeBrack + AfterBrack; // remove everyhting that matches { text } wxString out; while ( ret.Find('\\') >= 0 ) //remove anything in the form \please\ignore\this { out += ret.BeforeFirst( '\\' ); ret = ret.AfterFirst ( '\\' ); ret = ret.AfterFirst ( ' ' ); } ; return out; } bool AreColoursSimilar( const wxColour& col1, const wxColour& col2, int mindiff ) { int r,g,b; r = col1.Red() - col2.Red(); g = col1.Green() - col2.Green(); b = col1.Blue() - col2.Blue(); r = r>0?r:-r; g = g>0?g:-g; b = b>0?b:-b; int difference = std::min( r, g ); difference = std::min( difference, b ); return difference < mindiff; } void ColourDelta( int& r, int& g, int& b, const int& delta ) { int tmpdelta; if ( delta > 0 ) { r += delta; tmpdelta = delta; if ( r > 255 ) { tmpdelta += r - 255; r = 255; } g += tmpdelta; tmpdelta = delta; if ( g > 255 ) { tmpdelta += g - 255; g = 255; } b += tmpdelta; if ( b > 255 ) b = 255; } else { r += delta; tmpdelta = -delta; if ( r < 0 ) { tmpdelta -= r; r = 0; } g -= tmpdelta; tmpdelta = -delta; if ( g < 0 ) { tmpdelta -= g; g = 0; } b -= tmpdelta; if ( b < 0 ) b = 0; } } wxColour ColourDelta( const wxColour& colour, const int& delta ) { int r = colour.Red(); int g = colour.Green(); int b = colour.Blue(); ColourDelta( r, g, b, delta ); return wxColour( r, g, b ); } wxColour GetColorFromFloatStrng( const wxString& color_ ) { wxString colorstring = color_; wxString tmp_string; unsigned char* decimal_colors = new unsigned char[3]; for ( size_t i = 0; i < 3; ++i) { tmp_string = colorstring.BeforeFirst( ' ' ); colorstring = colorstring.AfterFirst( ' ' ); double float_color = 0; tmp_string.ToDouble( &float_color ); decimal_colors[i] = LSL::Util::Clamp( static_cast(float_color*256), static_cast(0), static_cast(255) ); } wxColour final_c( decimal_colors[0], decimal_colors[1], decimal_colors[2] ); delete[] decimal_colors; return final_c; } /** @brief Blends two images based on alpha channel present in foreground image. @param foreground Foreground image, must have an alpha channel @param background Background image, may have an alpha channel @param blend_alpha Whether the returned image will have an alpha channel. @return A copy of the background image with the foreground image blended on top of it. The returned image will have an alpha channel iff the background image has an alpha channel. In that case the alpha channel is blended identical to the red/green/blue channels. */ wxImage BlendImage( const wxImage& foreground, const wxImage& background, bool blend_alpha ) { if ( ( foreground.GetWidth() != background.GetWidth() ) || ( background.GetHeight() != foreground.GetHeight() ) ) { wxLogDebugFunc(_T("size mismatch while blending")); return background; } bool zhu = blend_alpha && background.HasAlpha(); if ( foreground.HasAlpha() ) { wxImage ret( background.GetWidth(), foreground.GetHeight() ); const unsigned char* background_data = background.GetData(); const unsigned char* foreground_data = foreground.GetData(); const unsigned char* background_alpha = NULL; const unsigned char* foreground_alpha = foreground.GetAlpha(); unsigned char* result_data = ret.GetData(); unsigned char* result_alpha = NULL; unsigned int pixel_count = background.GetWidth() * background.GetHeight(); if ( zhu ) { background_alpha = background.GetAlpha(); ret.InitAlpha(); result_alpha = ret.GetAlpha(); } for ( unsigned int i = 0, i_a = 0; i < pixel_count * 3; i+=3, i_a++ ) { unsigned char fore_alpha = foreground_alpha[i_a] ; float back_blend_fac = ( 255 - fore_alpha)/255.0; float fore_blend_fac = fore_alpha/255.0 ; result_data[i] = foreground_data[i] * fore_blend_fac + background_data[i] * back_blend_fac ; result_data[i+1] = foreground_data[i+1] * fore_blend_fac + background_data[i+1] * back_blend_fac ; result_data[i+2] = foreground_data[i+2] * fore_blend_fac + background_data[i+2] * back_blend_fac ; if ( zhu ) { unsigned char back_alpha = background_alpha[i_a] ; result_alpha[i_a] = fore_alpha * fore_blend_fac + back_alpha * back_blend_fac ; } } return ret; } wxLogDebugFunc(_T("cannot blend without alpha")); return background; } wxIcon charArr2wxIcon(const unsigned char * arg, int size) { wxIcon ic; ic.CopyFromBitmap( charArr2wxBitmap( arg, size ) ); return ic; } wxBitmap charArr2wxBitmap(const unsigned char * arg, int size) { return wxBitmap( charArr2wxImage( arg, size) ); } //wxBitmap charArr2wxBitmap(const unsigned char * arg, int size) //{ // return wxBitmap( charArr2wxImage( arg, size) ); //} wxImage charArr2wxImage(const unsigned char * arg, int size) { wxMemoryInputStream istream( arg, size ); return wxImage( istream, wxBITMAP_TYPE_PNG ); } wxBitmap charArr2wxBitmapWithBlending(const unsigned char * dest, int dest_size, const unsigned char * text, int text_size ) { wxImage dest_img( charArr2wxImage( dest, dest_size ) ); wxImage text_img( charArr2wxImage( text, text_size ) ); wxImage ret = BlendImage(text_img, dest_img ); return wxBitmap( ret ); } wxBitmap BlendBitmaps( const wxBitmap& background, const wxBitmap& overlay, const int /*dim*/ ) { wxImage back = background.ConvertToImage(); wxImage front = overlay.ConvertToImage(); wxImage ret = BlendImage( front, back ); return wxBitmap( ret ); } namespace { //! Helper class for BorderInvariantResizeImage struct Resizer { // Author: Tobi Vollebregt Resizer( wxImage& result, const wxImage& image, bool alpha ) : width( result.GetWidth() ) , height( result.GetHeight() ) , imwidth( image.GetWidth() ) , imheight( image.GetHeight() ) , half_min_width( (std::min(width, imwidth) + 1) / 2 ) // round up to cover middle pixel , half_min_height( (std::min(height, imheight) + 1) / 2 ) // if new width/height is uneven. , bytes_per_pixel( alpha ? 1 : 3 ) , image_data( alpha ? image.GetAlpha() : image.GetData() ) , result_data( alpha ? result.GetAlpha() : result.GetData() ) { } void CopyRow( int result_y, int image_y ) { unsigned char* result_row = result_data + bytes_per_pixel * result_y * width; const unsigned char* image_row = image_data + bytes_per_pixel * image_y * imwidth; const int bytes = bytes_per_pixel * half_min_width; memcpy( result_row, image_row, bytes ); memcpy( result_row + bytes_per_pixel * width - bytes, image_row + bytes_per_pixel * imwidth - bytes, bytes ); if ( width > imwidth ) { unsigned char* result_pixel = result_row + bytes; const unsigned char* image_pixel = image_row + bytes; for (int x = half_min_width; x < width - half_min_width; ++x, result_pixel += bytes_per_pixel) { memcpy( result_pixel, image_pixel, bytes_per_pixel ); } } } void CopyTopAndBottomRows() { for (int y = 0; y < half_min_height; ++y) { CopyRow( y, y ); CopyRow( height - 1 - y, imheight - 1 - y ); } } void CopyCenterRows() { for (int y = half_min_height; y < height - half_min_height; ++y) { CopyRow( y, half_min_height - 1 ); } } void operator () () { CopyTopAndBottomRows(); CopyCenterRows(); } const int width, height; const int imwidth, imheight; const int half_min_width, half_min_height; const int bytes_per_pixel; const unsigned char* const image_data; unsigned char* const result_data; }; } typedef std::vector huevec; void hue(huevec& out, int amount, int level) { if (level <= 1) { if (long(out.size()) < amount) out.push_back(0.0); if (long(out.size()) < amount) out.push_back(0.5); } else { hue(out, amount, level - 1); const int lower = out.size(); hue(out, amount, level - 1); const int upper = out.size(); for (int i = lower; i < upper; ++i) out.at(i) += 1.0 / (1 << level); } } void hue(huevec& out, int amount) { int level = 0; while ((1 << level) < amount) ++level; out.reserve(amount); hue(out, amount, level); } std::vector& GetBigFixColoursPalette( int numteams ) { static std::vector result; wxLogDebugFunc( TowxString(numteams) ); huevec huevector; static int satvalbifurcatepos; static std::vector satvalsplittings; if ( satvalsplittings.empty() ) // insert ranges to bifurcate { satvalsplittings.push_back( 1 ); satvalsplittings.push_back( 0 ); satvalbifurcatepos = 0; } hue( huevector, numteams ); int bisectionlimit = 20; for ( int i = result.size(); i < numteams; i++ ) { double hue = huevector[i]; double saturation = 1; double value = 1; int switccolors = i % 3; // why only 3 and not all combinations? because it's easy, plus the bisection limit cannot be divided integer by it if ( ( i % bisectionlimit ) == 0 ) { satvalbifurcatepos = satvalbifurcatepos % ( satvalsplittings.size() -1 ); std::vector::iterator toinsert = satvalsplittings.begin() + satvalbifurcatepos + 1; satvalsplittings.insert( toinsert, ( satvalsplittings[satvalbifurcatepos] - satvalsplittings[satvalbifurcatepos + 1] ) / 2 + satvalsplittings[satvalbifurcatepos + 1] ); satvalbifurcatepos += 2; } if ( switccolors == 1 ) { saturation = satvalsplittings[satvalbifurcatepos -1]; } else if ( switccolors == 2 ) { value = satvalsplittings[satvalbifurcatepos -1]; } hue += 0.17; // use as starting point a zone where color band is narrow so that small variations means high change in visual effect if ( hue > 1 ) hue-= 1; wxImage::HSVValue hsvcolor( hue, saturation, value ); wxImage::RGBValue rgbvalue = wxImage::HSVtoRGB( hsvcolor ); wxColour col( rgbvalue.red, rgbvalue.green, rgbvalue.blue ); result.push_back( col ); } return result; } wxImage BorderInvariantResizeImage( const wxImage& image, int width, int height ) { if ( !image.IsOk() || (width == image.GetWidth() && height == image.GetHeight()) ) return image; wxImage ret( width, height ); Resizer data_resize( ret, image, false ); data_resize(); if ( image.HasAlpha() ) { ret.InitAlpha(); Resizer alpha_resize( ret, image, true ); alpha_resize(); } return ret; } wxColour GetColourFromUser(wxWindow *parent, const wxColour& colInit, const wxString& caption, const wxString& palette) { wxColourData data; data = sett().GetCustomColors( palette ); data.SetChooseFull(true); if ( colInit.Ok() ) { data.SetColour((wxColour &)colInit); // const_cast } wxColour colRet; wxColourDialog dialog(parent, &data); if (!caption.empty()) dialog.SetTitle(caption); if ( dialog.ShowModal() == wxID_OK ) { colRet = dialog.GetColourData().GetColour(); } //else: leave it invalid sett().SaveCustomColors( dialog.GetColourData(), palette ); return colRet; } wxImage ReplaceChannelStatusColour( wxBitmap img, const wxColour& colour ) { wxImage ret = img.ConvertToImage(); wxImage::HSVValue origcolour = wxImage::RGBtoHSV( wxImage::RGBValue( colour.Red(), colour.Green(), colour.Blue() ) ); double bright = origcolour.value - 0.1*origcolour.value; bright = LSL::Util::Clamp( bright, 0.0, 1.0 ); wxImage::HSVValue hsvdarker1( origcolour.hue, origcolour.saturation, bright ); bright = origcolour.value - 0.5*origcolour.value; bright = LSL::Util::Clamp( bright, 0.0, 1.0 ); wxImage::HSVValue hsvdarker2( origcolour.hue, origcolour.saturation, bright ); wxImage::RGBValue rgbdarker1 = wxImage::HSVtoRGB( hsvdarker1 ); wxImage::RGBValue rgbdarker2 = wxImage::HSVtoRGB( hsvdarker2 ); ret.Replace( 164, 147, 0, rgbdarker2.red, rgbdarker2.green, rgbdarker2.blue ); ret.Replace( 255, 228, 0, rgbdarker1.red, rgbdarker1.green, rgbdarker1.blue ); ret.Replace( 255, 253, 234, colour.Red(), colour.Green(), colour.Blue() ); return ret; } wxSize MakeFit(const wxSize &original, const wxSize &bounds) { if( ( bounds.GetWidth() <= 0 ) || ( bounds.GetHeight() <= 0 ) ) return wxSize(0,0); int sizex = ( original.GetWidth() * bounds.GetHeight() ) / original.GetHeight(); if( sizex <= bounds.GetWidth() ) { return wxSize( sizex, bounds.GetHeight() ); } else { int sizey = ( original.GetHeight() * bounds.GetWidth() ) / original.GetWidth(); return wxSize( bounds.GetWidth(), sizey ); } } void CopyToClipboard( const wxString& text ) { if ( wxTheClipboard->Open() ) { // This data objects are held by the clipboard, // so do not delete them in the app. wxTheClipboard->SetData( new wxTextDataObject( text ) ); wxTheClipboard->Close(); } } void OpenWebBrowser( const wxString& url ) { if ( sett().GetWebBrowserUseDefault() // These shouldn't happen, but if they do we use the default browser anyway. || sett().GetWebBrowserPath() == wxEmptyString || sett().GetWebBrowserPath() == _T("use default") ) { if ( !wxLaunchDefaultBrowser( url ) ) { wxLogWarning( _T("can't launch default browser") ); customMessageBoxNoModal(SL_MAIN_ICON, _("Couldn't launch browser. URL is: ") + url, _("Couldn't launch browser.") ); } } else { if ( !wxExecute ( sett().GetWebBrowserPath() + _T(" ") + url, wxEXEC_ASYNC ) ) { wxLogWarning( _T("can't launch browser: %s"), sett().GetWebBrowserPath().c_str() ); customMessageBoxNoModal(SL_MAIN_ICON, _("Couldn't launch browser. URL is: ") + url + _("\nBroser path is: ") + sett().GetWebBrowserPath(), _("Couldn't launch browser.") ); } } } wxBitmap getColourIcon( const wxColour& colour ) { wxImage img( colourbox_xpm ); img.Replace( 1, 1, 1, colour.Red(), colour.Green(), colour.Blue() ); int r,g,b; r = colour.Red()+80; g = colour.Green()+80; b = colour.Blue()+80; img.Replace( 2, 2, 2, r>255?255:r, g>255?255:g, b>255?255:b ); /*r = colour.Red()-60; g = colour.Green()-60; b = colour.Blue()-60; img.Replace( 200, 200, 200, r<0?0:r, g<0?0:g, b<0?0:b );*/ return wxBitmap(img); // assert( IsOk() ); } #include #include "utils/customdialogs.h" TimerMessageBox::TimerMessageBox( const wxString& msg_format ) :m_start( new wxDateTime( wxDateTime::Now() ) ), m_msg_format( msg_format ) { } TimerMessageBox::~TimerMessageBox() { wxTimeSpan diff = wxDateTime::Now().Subtract( *m_start ); customMessageBoxNoModal( SL_MAIN_ICON, wxFormat( m_msg_format ) % diff.Format() ); delete m_start; } springlobby-0.169/src/uiutils.h0000600000176000000410000000564712105760300020071 0ustar buildbotwww-data00000000000000/// \file uiutils.h #ifndef SPRINGLOBBY_HEADERGUARD_UIUTILS_H #define SPRINGLOBBY_HEADERGUARD_UIUTILS_H #include #include #include #include "utils/mixins.hh" class wxColour; class wxImage; class wxIcon; class wxBitmap; wxString RTFtoText( const wxString& rtfinput ); bool AreColoursSimilar( const wxColour& col1, const wxColour& col2, int mindiff = 10 ); void ColourDelta( int& r, int& g, int& b, const int& delta ); wxColour ColourDelta( const wxColour& colour, const int& delta ); wxColour GetColorFromFloatStrng( const wxString& color ); //! takes best fitting size of original inside bounds keeping aspect ratio wxSize MakeFit(const wxSize &original, const wxSize &bounds); //! apply standard alpha blending to images wxImage BlendImage( const wxImage& foreground, const wxImage& background, bool blend_alpha = true ); wxBitmap BlendBitmaps( const wxBitmap& background, const wxBitmap& overlay, const int dim = 16 ); //! used to load png data into a wxImage wxImage charArr2wxImage(const unsigned char * arg, int size); //! used to load png data into a wxBitmap wxBitmap charArr2wxBitmap(const unsigned char * arg, int size); wxBitmap charArr2wxBitmapWithBlending(const unsigned char * arg, int size, const unsigned char * text, int text_size); //! png array data to Icon wxIcon charArr2wxIcon(const unsigned char * arg, int size); wxBitmap getColourIcon( const wxColour& colour ); //! shrinks/expands image by removing/duplicating rows/columns from the center of the image wxImage BorderInvariantResizeImage( const wxImage& image, int width, int height ); wxImage ReplaceChannelStatusColour( wxBitmap img, const wxColour& colour ); std::vector& GetBigFixColoursPalette( int numteams ); void CopyToClipboard( const wxString& text ); //! open either plattform default browser or binary saved in settings with given url void OpenWebBrowser( const wxString& url ); class wxDateTime; //! measures time diff between ctor and dtor, shows result in msg box struct TimerMessageBox: public SL::NonCopyable { //! msg_format must contain exactly one %s to be filled with the elapsed time TimerMessageBox( const wxString& msg_format ); ~TimerMessageBox(); wxDateTime* m_start; wxString m_msg_format; }; #endif // SPRINGLOBBY_HEADERGUARD_UIUTILS_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/updater/CMakeLists.txt0000600000176000000410000000101312105760300022405 0ustar buildbotwww-data00000000000000clear( updaterSrc) add_sources( updaterSrc updatermainwindow.cpp updater.cpp updaterapp.cpp ../utils/activitynotice.cpp ../utils/misc.cpp ) set(update_RC_FILE updater.rc) SET(updaterSrc ${updaterSrc} ${updater_RC_FILE}) ADD_EXECUTABLE(springlobby_updater WIN32 MACOSX_BUNDLE ${updaterSrc} ${SLSharedWithSettings} ${updater_RC_FILE} ) TARGET_LINK_LIBRARIES(springlobby_updater ${wxWidgets_LIBRARIES} libsettings ${CURL_LIBRARIES} ${CURL_LINKFLAGS} ) install(TARGETS springlobby_updater RUNTIME DESTINATION .) springlobby-0.169/src/updater/springlobby_updater.exe.manifest0000600000176000000410000000161212105760300026240 0ustar buildbotwww-data00000000000000 A free cross platform client for the Spring engine springlobby-0.169/src/updater/updatehelper.cpp0000600000176000000410000000124712105760300023044 0ustar buildbotwww-data00000000000000#include "updatehelper.h" #ifdef HAVE_CONFIG_H #include "springlobby_config.h" #else #define VERSION "unknown" #endif #include "../utils/conversion.h" wxString GetDownloadUrl( const wxString& version ) { return _T("springlobby.info/windows/springlobby-") + version + _T("-win32.zip"); } wxString GetSpringLobbyVersion( bool consider_aux ) { if ( consider_aux ) { return (TowxString(VERSION)).BeforeFirst( _T(' ') ) + _T(" ") + GetSpringLobbyAuxVersion(); } else { return (TowxString(VERSION)).BeforeFirst( _T(' ') ); } } wxString GetSpringLobbyAuxVersion() { #ifndef AUX_VERSION return wxEmptyString; #else return TowxString(AUX_VERSION); #endif } springlobby-0.169/src/updater/updatehelper.h0000600000176000000410000000041512105760300022505 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_UPDATEHELPER_H #define SPRINGLOBBY_HEADERGUARD_UPDATEHELPER_H class wxString; wxString GetDownloadUrl( const wxString& version ); wxString GetSpringLobbyVersion( bool consider_aux = true ); wxString GetSpringLobbyAuxVersion(); #endif springlobby-0.169/src/updater/updater.cpp0000600000176000000410000001324312105760300022025 0ustar buildbotwww-data00000000000000#include "updater.h" #include "updatehelper.h" #include "versionchecker.h" #include "../utils/customdialogs.h" #include "../utils/platform.h" #include "../utils/globalevents.h" #include "../settings.h" #include "../globalsmanager.h" #include "../ui.h" #include "../uiutils.h" #include #include #include #include BEGIN_EVENT_TABLE(UpdaterClass, wxEvtHandler) EVT_COMMAND(wxID_ANY, httpDownloadEvtComplete, UpdaterClass::OnDownloadEvent) EVT_COMMAND(wxID_ANY, httpDownloadEvtFailed, UpdaterClass::OnDownloadEvent) END_EVENT_TABLE() UpdaterClass& Updater() { static LineInfo m( AT ); static GlobalObjectHolder > m_upd( m ); return m_upd; } UpdaterClass::UpdaterClass() : m_http_thread( 0 ) { } UpdaterClass::~UpdaterClass() { delete m_http_thread; } #ifdef __WXMSW__ bool UpdaterClass::StartUpdate( const wxString& latestVersion, const wxString& exe_to_update ) { wxString sep = wxFileName::GetPathSeparator(); m_latest_version = latestVersion; m_currentexe = exe_to_update; if ( !wxFileName::IsDirWritable( wxPathOnly( m_currentexe ) ) ) { wxLogError( _T("dir not writable: ") + m_currentexe ); customMessageBox(SL_MAIN_ICON, _("Unable to write to the lobby installation directory.\nPlease update manually or enable write permissions for the current user."), _("Error")); return false; } m_newexe = sett().GetLobbyWriteDir() + _T("update") + sep; wxLogError( m_newexe ); if ( !wxDirExists( m_newexe ) ) { if ( !wxMkdir( m_newexe ) ){ wxLogError( _T("couldn't create update directory") ); return false; } } m_http_thread = new HttpDownloaderThread( GetDownloadUrl( m_latest_version ), m_newexe + _T("temp.zip"), *this, wxNewId(), true, true ); //could prolly use some test on the thread here instead return true; } #endif //all messageboxes need to be modal, updater closes immeadiately when receiving the UpdateFinished event void UpdaterClass::OnDownloadEvent( wxCommandEvent& event ) { int code = event.GetInt(); if ( code != 0) customMessageBox(SL_MAIN_ICON, _("There was an error downloading for the latest version.\nPlease try again later.\nIf the problem persists, please use Help->Report Bug to report this bug."), _("Error")); else { if (!PostMinGW44( m_newexe ) ) { customMessageBox(SL_MAIN_ICON, _("Automatic update failed\n\nyou will be redirected to a web page with instructions and the download link will be opened in your browser."), _("Updater error.") ); OpenWebBrowser( _T("http://projects.springlobby.info/wiki/springlobby/Install#Windows-Binary") ); OpenWebBrowser( GetDownloadUrl( m_latest_version ) ); } if ( !UpdateExe( m_newexe , false ) ) { customMessageBox(SL_MAIN_ICON, wxFormat( _("There was an error while trying to replace the current executable version.\n Please manually copy springlobby.exe from: %s\n to: %s\n") ) % m_newexe % m_currentexe, _("Error") ); } else { bool locale_ok = UpdateLocale( m_newexe, false ); if ( locale_ok ) { customMessageBox(SL_MAIN_ICON, IdentityString( _("Update complete. \nPlease restart %s now.") ), _("Success")); } else { customMessageBox(SL_MAIN_ICON, IdentityString( _("Binary updated successfully. \nSome translation files could not be updated.\nPlease report this in #springlobby. \nPlease restart %s now.") ), _("Partial success") ); } wxRmdir( m_newexe ); } } GetGlobalEventSender( GlobalEvents::UpdateFinished ).SendEvent( 0 ); } //! DO NOT use mw() global unless fromCli is false ! bool UpdaterClass::UpdateLocale( const wxString& tempdir, bool /*unused*/ ) { wxString target = wxPathOnly( wxStandardPaths::Get().GetExecutablePath() ) + wxFileName::GetPathSeparator() + _T("locale"); wxString origin = tempdir + _T("locale") + wxFileName::GetPathSeparator() ; return CopyDir( origin, target ); } //! DO NOT use mw() global unless fromCli is false ! bool UpdaterClass::UpdateExe( const wxString& newexe, bool /*unused*/ ) { //this always returns false on msw // if ( !wxFileName::IsFileExecutable( newexe + _T("springlobby.exe") ) ) // { // customMessageBoxNoModal(SL_MAIN_ICON, _("not exe."), _("Error")); // return false; // } wxString backupfile = m_currentexe + _T(".bak"); wxRemoveFile( backupfile ); if ( !wxRenameFile( m_currentexe, backupfile ) ) return false; if ( !wxCopyFile( newexe + _T("springlobby.exe"), m_currentexe ) ) { wxRenameFile( backupfile, m_currentexe.AfterLast( wxFileName::GetPathSeparator() ) ); //restore original file from backup on update failure return false; } return true; } bool UpdaterClass::PostMinGW44( const wxString& newdir ) { wxString current = GetSpringLobbyVersion(false); long minor = std::numeric_limits::max(); bool convert_ok = current.AfterLast( '.' ).ToLong( &minor ); wxLogMessage( (wxFormat( _T("Got minor rev %d") ) % minor ).c_str() ); if ( minor > 43 || !convert_ok ) //0.43 was the last build on old mingw return true; //all is well, we're already on a mingw4.4 build wxString base = wxPathOnly( wxStandardPaths::Get().GetExecutablePath() ) + wxFileName::GetPathSeparator() ; //use special copydir to overwrite locked files bool success = CopyDirWithFilebackupRename( newdir + wxFileName::GetPathSeparator(), base ); if ( !success ) { wxLogError( _T("Full dir copy failed") ); } return success; } springlobby-0.169/src/updater/updater.h0000600000176000000410000000276312105760300021477 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_UPDATER_H_INCLUDED #define SPRINGLOBBY_UPDATER_H_INCLUDED #include #include class UpdaterClass : public wxEvtHandler { public: UpdaterClass(); ~UpdaterClass(); void CheckForUpdates(); #ifdef __WXMSW__ bool StartUpdate( const wxString& latestVersion, const wxString& exe_to_update ); #endif void OnDownloadEvent( wxCommandEvent& event ); protected: bool UpdateExe( const wxString& newexe, bool WaitForReboot ); bool UpdateLocale( const wxString& newdir, bool WaitForReboot ); bool PostMinGW44( const wxString& newdir ); wxString m_newexe; wxString m_currentexe; wxString m_latest_version; HttpDownloaderThread* m_http_thread; DECLARE_EVENT_TABLE() }; UpdaterClass& Updater(); #endif // SPRINGLOBBY_GLOBALEVENTS_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/updater/updater.rc0000600000176000000410000000043612105760300021647 0ustar buildbotwww-data00000000000000#include springlobby_updater ICON "../images/SpringLobby.ico" #ifndef _RC_MSVC //don't use this on visual studio - it enables all the UAC rights and XP style management on its own. CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "springlobby_updater.exe.manifest" #endif springlobby-0.169/src/updater/updaterapp.cpp0000600000176000000410000001217712105760300022533 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007, 2008 The SpringLobby Team. All rights reserved. */ // // Class: UpdaterApp // #ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include #include #include #include #include #include #include #include //filesystem zip handler #include #ifdef __WXMSW__ #include #endif #include #include #include #include "updaterapp.h" #include "../settings.h" #include "../crashreport.h" #include "../utils/platform.h" #include "../utils/customdialogs.h" #include "updater.h" #include "../globalsmanager.h" #include "versionchecker.h" #include "updatermainwindow.h" #include "../defines.h" #include "../utils/conversion.h" const unsigned int TIMER_ID = 101; const unsigned int TIMER_INTERVAL = 100; IMPLEMENT_APP(UpdaterApp) BEGIN_EVENT_TABLE(UpdaterApp, wxApp) EVT_TIMER(TIMER_ID, UpdaterApp::OnTimer) END_EVENT_TABLE() UpdaterApp::UpdaterApp() : m_timer ( new wxTimer(this, TIMER_ID) ), m_version( _T("-1") ), m_updater_window( 0 ), m_logstream_target( new std::ofstream( STD_STRING(wxPathOnly( wxStandardPaths::Get().GetExecutablePath() ) + wxFileName::GetPathSeparator() + _T("update.log") ).c_str() ) ) { SetAppName( _T("springlobby_updater") ); } UpdaterApp::~UpdaterApp() { m_logstream_target->flush(); m_logstream_target->close(); delete m_logstream_target; delete m_timer; } //! @brief Initializes the application. //! //! It will open the main window and connect default to server or open the connect window. bool UpdaterApp::OnInit() { //this triggers the Cli Parser amongst other stuff if (!wxApp::OnInit()) return false; assert( m_logstream_target ); wxLogStream* m_log_stream = new wxLogStream( m_logstream_target ); m_log_stream->SetLogLevel( wxLOG_Trace ); wxLog::SetActiveTarget( m_log_stream ); wxLogMessage( _T("m_exe_to_update ") + m_exe_to_update); wxLogMessage( _T("m_version ") + m_version); #if wxUSE_ON_FATAL_EXCEPTION && !defined(__WXMAC__) if (!m_crash_handle_disable) wxHandleFatalExceptions( true ); #endif //this needs to called _before_ mainwindow instance is created wxInitAllImageHandlers(); //TODO needed? wxImage::AddHandler(new wxPNGHandler); wxFileSystem::AddHandler(new wxZipFSHandler); wxSocketBase::Initialize(); m_timer->Start( TIMER_INTERVAL ); if( m_version == _T("-1") ) m_version = GetLatestVersion(); m_updater_window = new UpdaterMainwindow( m_version ); m_updater_window->Show( true ); SetTopWindow( m_updater_window ); return Updater().StartUpdate( m_version, m_exe_to_update ); } //! @brief Finalizes the application int UpdaterApp::OnExit() { m_timer->Stop(); sett().SaveSettings(); // to make sure that cache path gets saved before destroying unitsync SetEvtHandlerEnabled(false); DestroyGlobals(); return 0; } //! @brief is called when the app crashes void UpdaterApp::OnFatalException() { #if wxUSE_DEBUGREPORT && defined(ENABLE_DEBUG_REPORT) #if wxUSE_STACKWALKER CrashReport::instance().GenerateReport(); #else EXCEPTION_POINTERS* p = new EXCEPTION_POINTERS; //lets hope this'll never get called CrashReport::instance().GenerateReport(p); #endif #else wxMessageBox( _("The application has generated a fatal error and will be terminated\nGenerating a bug report is not possible\n\nplease get a wxWidgets library that supports wxUSE_DEBUGREPORT"),_("Critical error"), wxICON_ERROR | wxOK ); #endif } //! @brief Is called every 1/10 seconds to update statuses void UpdaterApp::OnTimer( wxTimerEvent& event ) { } void UpdaterApp::OnInitCmdLine(wxCmdLineParser& parser) { #ifndef HAVE_WX29 #define STR _T #else #define STR #endif wxCmdLineEntryDesc cmdLineDesc[] = { { wxCMD_LINE_SWITCH, STR("h"), STR("help"), _("show this help message"), wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP }, { wxCMD_LINE_OPTION, STR("f"), STR("target-exe"), _("the SpringLobby executeable to be updated"), wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY | wxCMD_LINE_NEEDS_SEPARATOR }, { wxCMD_LINE_OPTION, STR("r"), STR("target-rev"), _("the SpringLobby revision to update to"), wxCMD_LINE_VAL_STRING, wxCMD_LINE_OPTION_MANDATORY | wxCMD_LINE_NEEDS_SEPARATOR }, { wxCMD_LINE_NONE }//while this throws warnings, it is mandatory according to http://docs.wxwidgets.org/stable/wx_wxcmdlineparser.html }; parser.SetDesc( cmdLineDesc ); parser.SetSwitchChars (_T("-")); #undef STR } //! @brief parses the command line and sets global app options like log verbosity or log target bool UpdaterApp::OnCmdLineParsed(wxCmdLineParser& parser) { #if wxUSE_CMDLINE_PARSER if ( parser.Found(_T("help")) ) return false; // not a syntax error, but program should stop if user asked for command line usage if ( parser.Found(_T("target-exe"), &m_exe_to_update ) && parser.Found(_T("target-rev"), &m_version) ) return true; #endif return true; } springlobby-0.169/src/updater/updaterapp.h0000600000176000000410000000273212105760300022174 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SPRINGLOBBYAPP_H #define SPRINGLOBBY_HEADERGUARD_SPRINGLOBBYAPP_H #include class wxTimer; class wxTimerEvent; class UpdaterMainwindow; //! @brief SpringLobby wxApp class UpdaterApp : public wxApp { public: UpdaterApp(); ~UpdaterApp(); virtual bool OnInit(); virtual int OnExit(); virtual void OnFatalException(); // System Events void OnTimer( wxTimerEvent& event ); virtual void OnInitCmdLine(wxCmdLineParser& parser); virtual bool OnCmdLineParsed(wxCmdLineParser& parser); protected: wxTimer* m_timer; wxString m_exe_to_update; wxString m_version; UpdaterMainwindow* m_updater_window; std::ofstream* m_logstream_target; DECLARE_EVENT_TABLE() }; DECLARE_APP(UpdaterApp) #endif // SPRINGLOBBY_HEADERGUARD_SPRINGLOBBYAPP_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/updater/updatermainwindow.cpp0000600000176000000410000000577112105760300024131 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include "updatermainwindow.h" #include #include #include #include "../utils/customdialogs.h" #include "../utils/activitynotice.h" #include "../uiutils.h" #include "../images/springlobby.xpm" class UpdaterPanel : public wxPanel { protected: wxBoxSizer* m_main_sizer; wxButton* m_changelog; ActivityNoticePanel* m_activity_panel; enum { ID_BUT_CHANGELOG = wxID_HIGHEST }; void OnChangelog( wxCommandEvent& ) { OpenWebBrowser( _T("http://projects.springlobby.info/embedded/springlobby/index.html") ); } DECLARE_EVENT_TABLE() public: UpdaterPanel ( wxWindow* parent, const wxString& rev_string ) : wxPanel( parent, -1 ) { m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_activity_panel = new ActivityNoticePanel( this, wxString::Format ( _T("Updating SpringLobby to %s, please wait."), rev_string.c_str() ), wxSize(450, 60) , wxSize(420, 15) ); m_main_sizer->Add( m_activity_panel, 0, wxALL, 0 ); m_changelog = new wxButton( this, ID_BUT_CHANGELOG,_("Open changelog in browser") ); m_main_sizer->Add( m_changelog, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); SetSizer( m_main_sizer); Layout(); } }; BEGIN_EVENT_TABLE( UpdaterPanel, wxPanel ) EVT_BUTTON ( ID_BUT_CHANGELOG, UpdaterPanel::OnChangelog ) END_EVENT_TABLE() BEGIN_EVENT_TABLE( UpdaterMainwindow, wxFrame ) EVT_CLOSE( UpdaterMainwindow::OnClose ) END_EVENT_TABLE() /** @brief ~UpdaterMainwindow * * @todo: document this function */ UpdaterMainwindow::~UpdaterMainwindow() { } /** @brief UpdaterMainwindow * * @todo: document this function */ UpdaterMainwindow::UpdaterMainwindow( const wxString& rev_string ) : wxFrame( (wxFrame*)0, -1, _("SpringLobby"), wxPoint(150, 150), wxSize(450, 120) ), // wxMINIMIZE_BOX | wxCAPTION | wxCLOSE_BOX | wxCLIP_CHILDREN ), m_onDownloadComplete( this, &GetGlobalEventSender( GlobalEvents::UpdateFinished) ) { SetIcon( wxIcon(springlobby_xpm) ); wxBoxSizer* top_sizer = new wxBoxSizer( wxVERTICAL ); UpdaterPanel* panel = new UpdaterPanel( this, rev_string ); top_sizer->Add( panel, 1, wxEXPAND|wxALL, 0 ); SetSizer( top_sizer ); Layout(); Center(); CustomMessageBoxBase::setLobbypointer( this ); } /** @brief OnClose * * @todo: document this function */ void UpdaterMainwindow::OnClose(wxCloseEvent&) { if ( timedMessageBox( SL_MAIN_ICON, _("Closing this window will abort the update, you may end up with a broken client.\nAbort?"), _("Warning"), 4000, wxYES_NO | wxICON_WARNING ) == wxYES ) { freeStaticBox(); Destroy(); } } void UpdaterMainwindow::OnDownloadComplete( GlobalEvents::GlobalEventData /*data*/ ) { freeStaticBox(); Destroy(); } springlobby-0.169/src/updater/updatermainwindow.h0000600000176000000410000000262712105760300023573 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_UPDATERMAINWINDOW_H #define SPRINGLOBBY_HEADERGUARD_UPDATERMAINWINDOW_H #include #include "../utils/globalevents.h" class wxCloseEvent; class UpdaterMainwindow : public wxFrame { public: UpdaterMainwindow( const wxString& rev_string ); virtual ~UpdaterMainwindow(); void OnClose( wxCloseEvent& evt ); void OnDownloadComplete( GlobalEvents::GlobalEventData /*data*/ ); protected: typedef EventReceiverFunc EventReceiverFunction; EventReceiverFunction m_onDownloadComplete; DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_HEADERGUARD_UPDATERMAINWINDOW_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/updater/versionchecker.cpp0000600000176000000410000000402312105760300023367 0ustar buildbotwww-data00000000000000#ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include #include #include #include "../utils/debug.h" #include "../utils/customdialogs.h" //! @brief gets latest version from version.springlobby.info via HTTP wxString GetLatestVersion() { wxHTTP versionRequest; versionRequest.SetHeader(_T("Content-type"), _T("text/html; charset=utf-8")); // normal timeout is 10 minutes.. set to 10 secs. versionRequest.SetTimeout(10); versionRequest.Connect( _T("version.springlobby.info"), 80); wxInputStream *stream = versionRequest.GetInputStream( _T("/current.txt") ); wxString result; if (versionRequest.GetError() == wxPROTO_NOERR) { wxStringOutputStream output(&result); stream->Read(output); } else { wxString err; switch (versionRequest.GetError()) { case wxPROTO_NETERR: err = _T("Network Error"); break; case wxPROTO_PROTERR: err = _T("Negotiation error"); break; case wxPROTO_CONNERR: err = _T("Failed to connect to server"); break; case wxPROTO_INVVAL: err = _T("Invalid Value"); break; case wxPROTO_NOHNDLR: err = _T("No Handler"); break; case wxPROTO_NOFILE: err = _T("File doesn't exit"); break; case wxPROTO_ABRT: err = _T("Action Aborted"); break; case wxPROTO_RCNCT: err = _T("Reconnection Error"); break; default: err = _T("Unknown Error"); break; } wxLogDebugFunc(_T("Error connecting! Error is: ") + err); customMessageBoxNoModal(SL_MAIN_ICON, _T("Error connecting! Error is: ") + err, _T("")); return _T("-1"); } wxDELETE(stream); versionRequest.Close(); // Need to replace crap chars or versions will always be inequal result.Replace(_T(" "), _T(""), true); result.Replace(_T("\n"), _T(""), true); result.Replace(_T("\t"), _T(""), true); return result; } springlobby-0.169/src/updater/versionchecker.h0000600000176000000410000000153112105760300023035 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_VERSIONCHECKER_H #define SPRINGLOBBY_HEADERGUARD_VERSIONCHECKER_H class wxString; wxString GetLatestVersion(); #endif // SPRINGLOBBY_HEADERGUARD_VERSIONCHECKER_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/user.cpp0000600000176000000410000001514612105760300017677 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ // // Class: User // #include "user.h" #include "battle.h" #include "server.h" //#include "utils.h" #include "chatpanel.h" #include "iconimagelist.h" #include #include User::User( Server& serv ) : CommonUser( _T(""),_T(""),0 ), m_serv(&serv), m_battle(0), m_flagicon_idx( icons().GetFlagIcon( _T("") ) ), m_rankicon_idx( icons().GetRankIcon( 0 ) ), m_statusicon_idx( icons().GetUserListStateIcon( m_status, false, false ) ), m_sideicon_idx( icons().ICON_NONE ) {} User::User( const wxString& nick, Server& serv ) : CommonUser( nick,_T(""),0 ), m_serv(&serv), m_battle(0), m_flagicon_idx( icons().GetFlagIcon( _T("") ) ), m_rankicon_idx( icons().GetRankIcon( 0 ) ), m_statusicon_idx( icons().GetUserListStateIcon( m_status, false, false ) ), m_sideicon_idx( icons().ICON_NONE ) {} User::User( const wxString& nick, const wxString& country, const int& cpu, Server& serv) : CommonUser( nick,country,cpu ), m_serv(&serv), m_battle(0), m_flagicon_idx( icons().GetFlagIcon( country ) ), m_rankicon_idx( icons().GetRankIcon( 0 ) ), m_statusicon_idx( icons().GetUserListStateIcon( m_status, false, false ) ), m_sideicon_idx( icons().ICON_NONE ) {} User::User( const wxString& nick ) : CommonUser( nick, wxEmptyString, 0 ), m_serv(0), m_battle(0), m_flagicon_idx( icons().GetFlagIcon( _T("") ) ), m_rankicon_idx( icons().GetRankIcon( 0 ) ), m_statusicon_idx( icons().GetUserListStateIcon( m_status, false, false ) ), m_sideicon_idx( icons().ICON_NONE ) {} User::User( const wxString& nick, const wxString& country, const int& cpu ) : CommonUser( nick,country,cpu ) , m_serv(0), m_battle(0), m_flagicon_idx( icons().GetFlagIcon( country ) ), m_rankicon_idx( icons().GetRankIcon( 0 ) ), m_statusicon_idx( icons().GetUserListStateIcon( m_status, false, false ) ), m_sideicon_idx( icons().ICON_NONE ) {} User::User() : CommonUser( wxEmptyString, wxEmptyString, 0 ), m_serv(0), m_battle(0), m_flagicon_idx( icons().GetFlagIcon( _T("") ) ), m_rankicon_idx( icons().GetRankIcon( 0 ) ), m_statusicon_idx( icons().GetUserListStateIcon( m_status, false, false ) ), m_sideicon_idx( icons().ICON_NONE ) {} User::~User(){ if(uidata.panel)uidata.panel->SetUser( 0 ); } wxString UserStatus::GetDiffString ( const UserStatus& old ) const { if ( old.away != away ) return ( away ? _("away") : _("back") ); if ( old.in_game != in_game ) return ( in_game ? _("ingame") : _("back from game") ); return wxEmptyString; } void User::Said( const wxString& /*message*/ ) const { } void User::Say( const wxString& message ) const { GetServer().SayPrivate( m_nick, message ); } void User::DoAction( const wxString& message ) const { GetServer().DoActionPrivate( m_nick, message ); } Battle* User::GetBattle() const { return m_battle; } void User::SetBattle( Battle* battle ) { m_battle = battle; m_statusicon_idx = icons().GetUserListStateIcon( m_status, false, m_battle != 0 ); } void User::SetStatus( const UserStatus& status ) { m_status = status; // If user is host of a game, then his in_game status tells if the game is on! if ( m_battle != 0 ) { try { User& user = m_battle->GetFounder(); if ( user.GetNick() == m_nick ) { m_battle->Update(); } }catch(...){} } m_statusicon_idx = icons().GetUserListStateIcon( m_status, false, m_battle != 0 ); m_rankicon_idx = icons().GetRankIcon( m_status.rank ); } void User::SetCountry( const wxString& country ) { m_country = country; m_flagicon_idx = icons().GetFlagIcon( country ); } void CommonUser::UpdateBattleStatus( const UserBattleStatus& status ) { // total 17 members to update. m_bstatus.team = status.team; m_bstatus.ally = status.ally; m_bstatus.colour = status.colour; m_bstatus.color_index = status.color_index; m_bstatus.handicap = status.handicap; m_bstatus.side = status.side; m_bstatus.sync = status.sync; m_bstatus.spectator = status.spectator; m_bstatus.ready = status.ready; if( !status.aishortname.IsEmpty() ) m_bstatus.aishortname = status.aishortname; if( !status.airawname.IsEmpty() ) m_bstatus.airawname = status.airawname; if( !status.aiversion.IsEmpty() ) m_bstatus.aiversion = status.aiversion; if( !status.aitype > 0 ) m_bstatus.aitype = status.aitype; if( !status.owner.IsEmpty() ) m_bstatus.owner = status.owner; if( status.pos.x > 0 ) m_bstatus.pos.x = status.pos.x; if( status.pos.y > 0 ) m_bstatus.pos.y = status.pos.y; // update ip and port if those were set. if( !status.ip.IsEmpty() ) m_bstatus.ip = status.ip; if( status.udpport != 0 ) m_bstatus.udpport = status.udpport;// 15 } void User::SendMyUserStatus() const { GetServer().SendMyUserStatus(); } bool User::ExecuteSayCommand( const wxString& cmd ) const { if ( cmd.BeforeFirst(' ').Lower() == _T("/me") ) { GetServer().DoActionPrivate( m_nick, cmd.AfterFirst(' ') ); return true; } else return false; } UserStatus::RankContainer User::GetRank() { return GetStatus().rank; } wxString User::GetRankName(UserStatus::RankContainer rank) { //TODO: better interface to ranks? switch( rank ) { case UserStatus::RANK_1: return _("Newbie"); case UserStatus::RANK_2: return _("Beginner"); case UserStatus::RANK_3: return _("Average"); case UserStatus::RANK_4: return _("Above average"); case UserStatus::RANK_5: return _("Experienced"); case UserStatus::RANK_6: return _("Highly experienced"); case UserStatus::RANK_7: return _("Veteran"); case UserStatus::RANK_8: return _("Badly needs to get laid"); default: return _("Unknown"); } } float User::GetBalanceRank() { return 1.0 + 0.1 * float( GetStatus().rank - UserStatus::RANK_1 ) / float( UserStatus::RANK_8 - UserStatus::RANK_1 ); } wxString User::GetClan() { wxString tmp = m_nick.AfterFirst('['); if ( tmp != m_nick ) { wxString clan = tmp.BeforeFirst(']'); if ( clan != tmp ) return clan; } return _T(""); } void CommonUser::SetStatus( const UserStatus& status ) { m_status = status; } //User& User::operator= ( const User& other ) //{ // if( this != &other ) { // //m_serv = (other.GetServer()); // m_status = other.GetStatus(); // m_battle = other.GetBattle(); // m_nick = other.GetNick(); // m_cpu = other.GetCpu(); // m_country = other.GetCountry(); // m_bstatus = other.GetBattleStatus(); // uidata = other.uidata; // // // } // return *this; //} springlobby-0.169/src/user.h0000600000176000000410000001514612105760300017344 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_USER_H #define SPRINGLOBBY_HEADERGUARD_USER_H #include #include #include "utils/mixins.hh" class Server; const unsigned int SYNC_UNKNOWN = 0; const unsigned int SYNC_SYNCED = 1; const unsigned int SYNC_UNSYNCED = 2; //! @brief Struct used to store a client's status. struct UserStatus { enum RankContainer { RANK_1, RANK_2, RANK_3, RANK_4, RANK_5, RANK_6, RANK_7, RANK_8 }; bool in_game; bool away; RankContainer rank; bool moderator; bool bot; UserStatus(): in_game(false), away(false), rank(RANK_1), moderator(false), bot(false) {} wxString GetDiffString ( const UserStatus& other ) const; }; struct UserPosition { int x; int y; UserPosition(): x(-1), y(-1) {} }; struct UserBattleStatus { //!!! when adding something to this struct, also modify User::UpdateBattleStatus() !! // total 17 members here int team; int ally; wxColour colour; int color_index; int handicap; int side; unsigned int sync; bool spectator; bool ready; bool isfromdemo; UserPosition pos; // for startpos = 4 // bot-only stuff wxString owner; wxString aishortname; wxString airawname; wxString aiversion; int aitype; // for nat holepunching wxString ip; unsigned int udpport; wxString scriptPassword; bool IsBot() const { return !aishortname.IsEmpty(); } UserBattleStatus(): team(0),ally(0),colour(wxColour(0,0,0)),color_index(-1),handicap(0),side(0),sync(SYNC_UNKNOWN),spectator(false),ready(false), isfromdemo(false), aitype(-1), udpport(0) {} bool operator == ( const UserBattleStatus& s ) const { return ( ( team == s.team ) && ( colour == s.colour ) && ( handicap == s.handicap ) && ( side == s.side ) && ( sync == s.sync ) && ( spectator == s.spectator ) && ( ready == s.ready ) && ( owner == s.owner ) && ( aishortname == s.aishortname ) && ( isfromdemo == s.isfromdemo ) && ( aitype == s.aitype ) ); } bool operator != ( const UserBattleStatus& s ) const { return ( ( team != s.team ) || ( colour != s.colour ) || ( handicap != s.handicap ) || ( side != s.side ) || ( sync != s.sync ) || ( spectator != s.spectator ) || ( ready != s.ready ) || ( owner != s.owner ) || ( aishortname != s.aishortname ) || ( isfromdemo != s.isfromdemo ) || ( aitype != s.aitype ) ); } }; class ChatPanel; class Battle; struct UiUserData { UiUserData(): panel(0) {} ChatPanel* panel; }; //! parent class leaving out server related functionality class CommonUser { public: CommonUser(const wxString& nick, const wxString& country, const int& cpu) : m_nick(wxString(nick)), m_country(wxString(country)), m_cpu(cpu) {} virtual ~CommonUser(){} const wxString& GetNick() const { return m_nick; } virtual void SetNick( const wxString& nick ) { m_nick = nick; } const wxString& GetCountry() const { return m_country; } virtual void SetCountry( const wxString& country ) { m_country = country; } int GetCpu() const { return m_cpu; } void SetCpu( const int& cpu ) { m_cpu = cpu; } const wxString& GetID() const { return m_id; } void SetID( const wxString& id ) { m_id = id; } UserStatus& Status() { return m_status; } UserStatus GetStatus() const { return m_status; } virtual void SetStatus( const UserStatus& status ); UserBattleStatus& BattleStatus() { return m_bstatus; } UserBattleStatus GetBattleStatus() const { return m_bstatus; } /** Read-only variant of BattleStatus() above. */ const UserBattleStatus& BattleStatus() const { return m_bstatus; } //void SetBattleStatus( const UserBattleStatus& status );/// dont use this to avoid overwriting data like ip and port, use following method. void UpdateBattleStatus( const UserBattleStatus& status ); /* void SetUserData( void* userdata ) { m_data = userdata; } void* GetUserData() { return m_data; }*/ bool Equals( const CommonUser& other ) const { return ( m_nick == other.GetNick() ); } protected: wxString m_nick; wxString m_country; wxString m_id; int m_cpu; UserStatus m_status; UserBattleStatus m_bstatus; //void* m_data; }; //! Class containing all the information about a user class User : public CommonUser { public: mutable UiUserData uidata; User( Server& serv ); User( const wxString& nick, Server& serv ); User( const wxString& nick, const wxString& country, const int& cpu, Server& serv); User( const wxString& nick ); User( const wxString& nick, const wxString& country, const int& cpu ); User(); virtual ~User(); // User interface Server& GetServer() const { return *m_serv; } void Said( const wxString& message ) const; void Say( const wxString& message ) const; void DoAction( const wxString& message ) const; Battle* GetBattle() const; void SetBattle( Battle* battle ); void SendMyUserStatus() const; void SetStatus( const UserStatus& status ); void SetCountry( const wxString& country ); bool ExecuteSayCommand( const wxString& cmd ) const; static wxString GetRankName(UserStatus::RankContainer rank); float GetBalanceRank(); UserStatus::RankContainer GetRank(); wxString GetClan(); int GetFlagIconIndex() const { return m_flagicon_idx; } int GetRankIconIndex() const { return m_rankicon_idx; } int GetStatusIconIndex() const { return m_statusicon_idx; } //bool operator< ( const User& other ) const { return m_nick < other.GetNick() ; } //User& operator= ( const User& other ); int GetSideiconIndex() const { return m_sideicon_idx; } void SetSideiconIndex( const int idx ) { m_sideicon_idx = idx; } protected: // User variables Server* m_serv; Battle* m_battle; int m_flagicon_idx; int m_rankicon_idx; int m_statusicon_idx; int m_sideicon_idx; //! copy-semantics? }; #endif // SPRINGLOBBY_HEADERGUARD_USER_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/useractions.cpp0000600000176000000410000001170112105760300021251 0ustar buildbotwww-data00000000000000#include "useractions.h" #include #include #include "settings.h" #include #include "utils/customdialogs.h" //for updating ui, anybody feel free to replace with fancy events stuff :P #include "ui.h" #include "mainwindow.h" #include "mainchattab.h" #include "hosting/mainjoinbattletab.h" #include "hosting/battleroomtab.h" #include "battlelist/battlelisttab.h" #include "chatpanel.h" #include #include #include "globalsmanager.h" UserActions& useractions() { static LineInfo m( AT ); static GlobalObjectHolder > m_useractions( m ); return m_useractions; } UserActions::UserActions() { Init(); } UserActions::~UserActions() { } bool UserActions::DoActionOnUser( const ActionType action, const wxString& name ) { // preventing action on oneself wasn't the best idea, login gets disabled //if ( m_knownUsers.Index( name ) == -1 || ui().IsThisMe(name) || action == ActNone ) if ( m_knownUsers.Index( name ) == -1 || action == ActNone ) return false; else return ( m_actionsGroups.find( action ) != m_actionsGroups.end() && m_actionsPeople[action].Index( name ) != -1 ); return false; } void UserActions::Init() { m_groupNames = sett().GetGroups(); m_groupMap.clear(); m_groupActions.clear(); m_actionsGroups.clear(); m_actionsPeople.clear(); m_knownUsers.Clear(); for ( unsigned int i = 0; i < m_groupNames.GetCount(); ++i) { wxString name = m_groupNames[i]; m_groupMap[name] = sett().GetPeopleList( name ); for ( unsigned int k = 0; k < m_groupMap[name].GetCount(); ++k) { wxString user = m_groupMap[name][k]; m_knownUsers.Add( user ); m_peopleGroup[ user ] = name; } m_groupActions[name] = sett().GetGroupActions( name ); } for ( int i = 0; i < m_numActions; ++i) { ActionType cur = (ActionType) (int) std::pow( 2.0, i); wxArrayString tmp; for ( unsigned int j = 0; j < m_groupNames.GetCount(); ++j) { wxString name = m_groupNames[j]; if ( ( m_groupActions[name] & cur ) != 0 ) { tmp.Add( name ); for ( unsigned int k = 0; k < m_groupMap[name].GetCount(); ++k) { m_actionsPeople[cur].Add( (m_groupMap[name])[k] ); } } } tmp.Sort(); m_actionsGroups[cur] = tmp; } m_actionsGroups[ActNone] = m_groupNames; m_groupNames.Sort(); m_knownUsers.Sort(); } void UserActions::UpdateUI() { try { ui().mw().GetBattleListTab().UpdateHighlights(); } catch(...){} try { ui().mw().GetChatTab().UpdateNicklistHighlights(); } catch(...){} try { ui().mw().GetJoinTab().GetBattleRoomTab().UpdateHighlights(); } catch(...){} } wxArrayString UserActions::GetGroupNames() const { return m_groupNames; } void UserActions::AddUserToGroup( const wxString& group, const wxString& name ) { if ( IsKnown( name , false ) || ui().IsThisMe( name ) ) return; m_groupMap[group].Add(name); sett().SetPeopleList( m_groupMap[group], group ); Init(); UpdateUI(); } void UserActions::DeleteGroup(const wxString& name ) { sett().DeleteGroup( name ); Init(); UpdateUI(); } void UserActions::AddGroup(const wxString& name ) { sett().AddGroup( name ); Init(); UpdateUI(); } void UserActions::ChangeAction( const wxString& group, const ActionType action, bool add ) { ActionType old = m_groupActions[group]; old = (ActionType) ( add ? (old | action) : (old & ~action ) ); sett().SetGroupActions( group, old ); Init(); UpdateUI(); } UserActions::ActionType UserActions::GetGroupAction( const wxString& group ) const { const GroupActionMap::const_iterator res = m_groupActions.find(group); return res->second; } wxString UserActions::GetGroupOfUser( const wxString& user ) const { const PeopleGroupMap::const_iterator res = m_peopleGroup.find(user); return res->second; } void UserActions::SetGroupColor( const wxString& group, const wxColour& color ) { sett().SetGroupHLColor( color, group ); Init(); UpdateUI(); } wxColour UserActions::GetGroupColor( const wxString& group ) const { return sett().GetGroupHLColor( group ); } bool UserActions::IsKnown( const wxString& name, bool outputWarning ) const { bool ret = m_knownUsers.Index( name ) != -1; if ( outputWarning ){ customMessageBoxNoModal( SL_MAIN_ICON, _("To prevent logical inconsistencies, adding a user to more than one group is not allowed"), _("Cannot add user to group") ); } return ret; } void UserActions::RemoveUser(const wxString& name ) { wxString group = m_peopleGroup[name]; m_groupMap[group].Remove(name); sett().SetPeopleList( m_groupMap[group], group ); Init(); UpdateUI(); } springlobby-0.169/src/useractions.h0000600000176000000410000001127412105760300020723 0ustar buildbotwww-data00000000000000#ifndef USERACTIONS_HH_INCLUDED #define USERACTIONS_HH_INCLUDED #include #include #include class wxColour; //!provide a simple mapping between enum type and string to display in gui const wxString m_actionNames[] = { _("none"),_("highlight"),_("notify login/out"),_("ignore chat"),_("ignore pm"), _("autokick"), _("notify hosted battle"),_("notify status change")}; //! Provide the names to be used by config file. const wxString m_configActionNames[] = { _T("none"),_T("highlight"),_T("notify_login"),_T("ignore_chat"),_T("ignore_pm"), _T("autokick"), _T("notify_hosted"),_T("notify_status")}; //!same for tooltips const wxString m_actionTooltips[] = { _("no action at all"), _("highlight user in nick list and battles he participates in"), _("popup a message box when user logs in/out from the server"), _("you won't see message by these users in normal channels"), _("ignore private messages of these users, no pm window will open if any of these try to contact you privately"), _("automatically kick users from battles hosted by yourself"), _("popup a message box when user hosts a new battle"), _("popup a message box when user changes away status") }; //! data handling for group / action management /** one single static instance is exposed as a global \n by forcing a write to settings handler on every change data consistency is ensured \n to keep runtime overhead as small as possible for the often called query funcs, all data is structured in multiple maps and wherever possible sortedArrays (binary search instead of linear!) are used \n the price is that on every change operation (very rare compared to queries) maps need to be cleared/reloaded \n currently Gui updates are handled old fashoined way by hangling around classes, this should be improved to dynamic events **/ class UserActions { public: UserActions(); ~UserActions(); enum ActionType { ActNone = 1, ActHighlight = 2, ActNotifLogin = 4, ActIgnoreChat = 8, ActIgnorePM = 16, ActAutokick = 32, ActNotifBattle = 64, ActNotifStatus = 128, /// update this when adding new actions. ActLast=ActNotifStatus }; static const int m_numActions = sizeof(m_actionNames) / sizeof(wxString); bool DoActionOnUser( const ActionType action, const wxString& name ) ; wxArrayString GetGroupNames() const; void AddUserToGroup( const wxString& group, const wxString& name ); void AddGroup(const wxString& name ); void DeleteGroup(const wxString& name ); void RemoveUser(const wxString& name ); void ChangeAction( const wxString& group, const ActionType action, bool add = true ); ActionType GetGroupAction( const wxString& group ) const; wxString GetGroupOfUser( const wxString& user ) const; void SetGroupColor( const wxString& group, const wxColour& color ); wxColour GetGroupColor( const wxString& group ) const; bool IsKnown( const wxString& name, bool outputWarning = false ) const; protected: //lotsa maps to keep runtime finds, etc ti a minimum typedef std::map GroupMap; /// groupname --> array of people in the group GroupMap m_groupMap; typedef std::map GroupActionMap; /// groupname --> ActionType for that group GroupActionMap m_groupActions; typedef std::map ActionGroupsMap; /// ActionType --> array of groups with that actiontype ActionGroupsMap m_actionsGroups; typedef std::map ActionPeopleMap; /// ActionType --> array of people with that actiontype ActionPeopleMap m_actionsPeople; ///nickname --> group map (we don't allow users to be in more than one group typedef std::map PeopleGroupMap; PeopleGroupMap m_peopleGroup; ///list all known users in groups wxArrayString m_knownUsers; //reload all maps and stuff void Init(); void UpdateUI(); wxArrayString m_groupNames; }; UserActions& useractions(); #endif // USERACTIONS_HH_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/userlist.cpp0000600000176000000410000000306412105760300020567 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007 The SpringLobby Team. All rights reserved. */ #include #include #include #include "userlist.h" #include "user.h" #include "utils/debug.h" #include "utils/conversion.h" const UserList::user_map_t::size_type SEEKPOS_INVALID = UserList::user_map_t::size_type(-1); UserList::UserList(): m_seek(m_users.end()), m_seekpos(SEEKPOS_INVALID) { } void UserList::AddUser( User& user ) { m_users[user.GetNick()] = &user; m_seekpos = SEEKPOS_INVALID; } void UserList::RemoveUser( const wxString& nick ) { m_users.erase(nick); m_seekpos = SEEKPOS_INVALID; } User& UserList::GetUser( const wxString& nick ) const { user_const_iter_t u = m_users.find(nick); ASSERT_EXCEPTION( u != m_users.end(), _T("UserList::GetUser(\"") + nick + _T("\"): no such user") ); //ASSERT_LOGIC( u != m_users.end(), _T("UserList::GetUser(\"") + nick + _T("\"): no such user") ); return *u->second; } User& UserList::GetUser( user_map_t::size_type index ) const { if ((m_seekpos == SEEKPOS_INVALID) || (m_seekpos > index)) { m_seek = m_users.begin(); m_seekpos = 0; } std::advance( m_seek, index - m_seekpos ); m_seekpos = index; return *m_seek->second; } bool UserList::UserExists( wxString const& nick ) const { return m_users.find(nick) != m_users.end(); } UserList::user_map_t::size_type UserList::GetNumUsers() const { return m_users.size(); } void UserList::Nullify() { for( user_map_t::iterator it = m_users.begin(); it != m_users.begin(); ++it ) { delete it->second; it->second = NULL; } } springlobby-0.169/src/userlist.h0000600000176000000410000000317012105760300020232 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_USERLIST_H #define SPRINGLOBBY_HEADERGUARD_USERLIST_H #include #include class User; class UserList { public: //! @brief mapping from nick to user object typedef std::map user_map_t; //! @brief iterator for user map typedef user_map_t::iterator user_iter_t; typedef user_map_t::const_iterator user_const_iter_t; UserList(); virtual ~UserList() {} void AddUser( User& user ); void RemoveUser( wxString const& nick ); User& GetUser( wxString const& nick ) const; User& GetUser( user_map_t::size_type index ) const; bool UserExists( wxString const& nick ) const; user_map_t::size_type GetNumUsers() const; void Nullify(); private: user_map_t m_users; // The following are used as internal cache to speed up random access: mutable user_const_iter_t m_seek; mutable user_map_t::size_type m_seekpos; }; #endif // SPRINGLOBBY_HEADERGUARD_USERLIST_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/usermenu.h0000600000176000000410000001255012105760300020225 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_USERMENU_H #define SPRINGLOBBY_USERMENU_H #include #include #include #include "utils/mixins.hh" //static const long GROUP_ID = wxNewId(); static const long GROUP_ID_NEW = wxNewId(); static const long GROUP_ID_REMOVE = wxNewId(); #include "ui.h" #include "useractions.h" namespace SL_GENERIC { template < class EventHandler_ > class UserMenu : public wxMenu, public SL::NonCopyable { protected: typedef EventHandler_ EventHandler; typedef EventHandler ParentType; public: UserMenu(wxEvtHandler * /*connectee*/, ParentType* parent, const wxString& title = wxEmptyString, long style = 0) : wxMenu( title, style ),m_groupsMenu(0), m_parent(parent),m_groupCounter(0) { assert ( m_parent ); m_groupsMenu = new wxMenu(); m_groupsnewItem = new wxMenuItem( m_groupsMenu, GROUP_ID_NEW, _("Create new group...") ); Connect( GROUP_ID_NEW, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( EventHandler::OnUserMenuCreateGroup ), 0, m_parent ); m_groupsMenu->Append( m_groupsnewItem ); m_groupsMenu->AppendSeparator(); // if ( !ui().IsThisMe( m_parent->GetSelectedUser() ) ) m_groupsMenuItem = AppendSubMenu( m_groupsMenu, _("Add to group...")); m_groupsDeleteItem = new wxMenuItem( m_groupsMenu, GROUP_ID_REMOVE, _("Remove from group") ); Connect( GROUP_ID_REMOVE, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( EventHandler::OnUserMenuDeleteFromGroup ), 0, m_parent ); Append( m_groupsDeleteItem ); } ~UserMenu(){} void EnableItems(bool isUserSelected, const wxString& nick) { if ( isUserSelected ) { bool enable = ( !ui().IsThisMe( nick ) ); m_groupsMenuItem->Enable( enable && !useractions().IsKnown( nick ) ) ; m_groupsnewItem->Enable( enable && !useractions().IsKnown( nick ) ) ; m_groupsDeleteItem->Enable( enable && useractions().IsKnown( nick ) ) ; UpdateGroups(); } else { m_groupsMenuItem->Enable( false ) ; m_groupsDeleteItem->Enable( false ) ; m_groupsnewItem->Enable( false ); } } wxString GetGroupByEvtID( const long id ) { return m_idNameMap[id]; } //we need these to circumvent the submneu events not firing via connecting the events in the parent class std::vector GetGroupIds() { std::vector ids; std::map::const_iterator it = m_idNameMap.begin(); for ( ; it != m_idNameMap.end(); ++it ) { long id = it->first; if ( id != GROUP_ID_NEW && id != GROUP_ID_REMOVE ) ids.push_back( id ); } return ids; } protected: wxMenu* m_groupsMenu; wxMenuItem* m_groupsMenuItem; wxMenuItem* m_groupsDeleteItem; wxMenuItem* m_groupsnewItem; wxArrayString m_oldGroups; ParentType* m_parent; unsigned int m_groupCounter; std::map m_idNameMap; std::map m_NameIdMap; void UpdateGroups() { wxArrayString groupNames = useractions().GetGroupNames(); bool first = m_oldGroups.GetCount() == 0; if ( first ) m_oldGroups = wxArrayString( groupNames ); for ( unsigned int i = 0; i < groupNames.GetCount(); ++i) { if ( m_oldGroups.Index( groupNames[i] ) == wxNOT_FOUND || first ) { long newID = wxNewId(); m_idNameMap[m_groupCounter] = groupNames[i]; wxMenuItem* addItem = new wxMenuItem( m_groupsMenu, newID, groupNames[i] , wxEmptyString, wxITEM_NORMAL ); m_groupsMenu->Append( addItem ); // Connect( newID, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( EventHandler::OnUserMenuAddToGroup ), 0, m_parent ); m_oldGroups.Add( groupNames[i] ); m_idNameMap[newID] = groupNames[i]; m_NameIdMap[groupNames[i]] = newID; m_groupCounter++; } else { //wxMenuItem* old = FindItem( m_NameIdMap[groupNames[i]] ); Destroy( m_NameIdMap[groupNames[i]] ); } } } //DECLARE_EVENT_TABLE(); }; } #endif // SPRINGLOBBY_USERMENU_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/CMakeLists.txt0000600000176000000410000000020412105760300022102 0ustar buildbotwww-data00000000000000add_sources(springlobbySrc activitynotice.cpp misc.cpp curlhelper.cpp tasutil.cpp networkevents.cpp md5.c battleevents.cpp )springlobby-0.169/src/utils/activitynotice.cpp0000600000176000000410000000506212105760300023113 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include "activitynotice.h" #include #include #include #ifndef __WXMSW__ #include //cannot forward this cause msw mixes up the types otherwise #endif BEGIN_EVENT_TABLE(ActivityNoticePanel,wxPanel) EVT_TIMER(wxID_ANY, ActivityNoticePanel::OnTimer) END_EVENT_TABLE() ActivityNotice::ActivityNotice(wxWindow* parent,const wxString& notice, const wxSize& gauge_size ) : wxDialog ( parent,wxID_ANY,_T(""),wxDefaultPosition, wxSize(190,60),wxBORDER_NONE|wxSTAY_ON_TOP) { wxBoxSizer* m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_panel = new ActivityNoticePanel( this, notice, gauge_size ); m_main_sizer->Add( m_panel, 1 , wxALL|wxEXPAND, 0 ); SetSizer(m_main_sizer); Layout(); } ActivityNoticePanel::ActivityNoticePanel(wxWindow* parent,const wxString& notice, const wxSize& panel_size, const wxSize& gauge_size ) : wxPanel ( parent,wxID_ANY,wxDefaultPosition, panel_size, wxBORDER_NONE), m_notice(notice) { static int timer_inc = 0; m_timer.SetOwner(this,timer_inc++); wxBoxSizer* m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_message = new wxStaticText(this,wxID_ANY,_T("") ); m_main_sizer->Add( m_message, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 ); m_gauge = new wxGauge(this, wxID_ANY,120,wxDefaultPosition, gauge_size ); m_gauge->Pulse(); m_main_sizer->Add( m_gauge, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 ); SetSizer( m_main_sizer ); SetString( m_notice ); Show(true); } void ActivityNoticePanel::SetString(const wxString& file) { m_notice = file; m_message->SetLabel( m_notice ); Layout(); } bool ActivityNoticePanel::Show(bool show ) { if ( show ) m_timer.Start( 80, wxTIMER_CONTINUOUS ); else m_timer.Stop (); bool ret = wxPanel::Show(show); Layout(); return ret; } void ActivityNoticePanel::OnTimer(wxTimerEvent& ) { m_gauge->Pulse(); } ActivityNoticeContainer::ActivityNoticeContainer(wxWindow* parent_,const wxString& notice, const wxSize& gauge_size ) { wxWindow* parent = ( parent_ ) ? parent_ : ( wxTheApp->GetTopWindow() ) ; m_window = new ActivityNotice( parent, notice, gauge_size ); m_window->Show(true); } ActivityNoticeContainer::~ActivityNoticeContainer() { m_window->Destroy(); } ScopedActivityNotice scopedActivityNotice(wxWindow* parent,const wxString& notice, const wxSize& gauge_size ) { return ScopedActivityNotice( new ActivityNoticeContainer( parent, notice, gauge_size ) ); } springlobby-0.169/src/utils/activitynotice.h0000600000176000000410000000457712105760300022572 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_ACTIVITYNOTICE_H #define SPRINGLOBBY_HEADERGUARD_ACTIVITYNOTICE_H #include #include #include #include #ifdef __WXMSW__ #include //cannot forward this cause msw mixes up the types otherwise #else class wxGauge; #endif #include "mixins.hh" class wxStaticText; class ActivityNoticePanel: public wxPanel, public SL::NonCopyable { public: ActivityNoticePanel(wxWindow* parent,const wxString& notice, const wxSize& panel_size = wxSize(190,6), const wxSize& gauge_size = wxSize(80,5) ); virtual ~ActivityNoticePanel() {} void SetString(const wxString& file); virtual bool Show(bool show = true); protected: wxString m_notice; wxGauge* m_gauge; wxStaticText* m_message; wxTimer m_timer; void OnTimer(wxTimerEvent& event); DECLARE_EVENT_TABLE() }; class ActivityNotice: public wxDialog { public: ActivityNotice(wxWindow* parent,const wxString& notice, const wxSize& gauge_size = wxSize(80,5) ); virtual ~ActivityNotice() {} protected: ActivityNoticePanel* m_panel; }; //! use this for a notice that closes automatically when going out of scope class ActivityNoticeContainer { public: ActivityNoticeContainer(wxWindow* parent,const wxString& notice, const wxSize& gauge_size = wxSize(80,5) ); ~ActivityNoticeContainer(); protected: ActivityNotice* m_window; }; typedef std::auto_ptr ScopedActivityNotice; ScopedActivityNotice scopedActivityNotice(wxWindow* parent,const wxString& notice, const wxSize& gauge_size = wxSize(80,5) ); #endif // SPRINGLOBBY_HEADERGUARD_ACTIVITYNOTICE_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/battleevents.cpp0000600000176000000410000000041712105760300022554 0ustar buildbotwww-data00000000000000#include "battleevents.h" #include namespace BattleEvents { static std::map< BattleEventsTypes, EventSender > BattleEvents; EventSender &GetBattleEventSender( BattleEventsTypes cmd ) { return BattleEvents[cmd]; } } springlobby-0.169/src/utils/battleevents.h0000600000176000000410000000074112105760300022221 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_BATTLEEVENTS_H #define SPRINGLOBBY_HEADERGUARD_BATTLEEVENTS_H #include "events.h" #include "../ibattle.h" #include namespace BattleEvents { enum BattleEventsTypes { AddBattle = 0, RemoveBattle = 1, UpdateBattle = 2, BattleInfoUpdate = 3 }; typedef std::pair BattleEventData; EventSender &GetBattleEventSender( BattleEventsTypes cmd ); } #endif // SPRINGLOBBY_HEADERGUARD_BATTLEEVENTS_H springlobby-0.169/src/utils/controls.cpp0000600000176000000410000000312512105760300021716 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include "controls.h" #include "../settings.h" #include #include #include bool main_app_has_focus; void UpdateMainAppHasFocus( bool focus ) { main_app_has_focus = focus; wxToolTip::Enable(sett().GetShowTooltips()&&main_app_has_focus); } const wxChar* TooltipEnable(const wxChar* input) { #if !defined(HAVE_WX29) || defined(__WXOSX_COCOA__) if (!main_app_has_focus) return _T(""); return sett().GetShowTooltips() ? input : _T(""); #else wxString dummy = wxEmptyString; if (!main_app_has_focus) return dummy.wc_str(); return sett().GetShowTooltips() ? input : dummy.wc_str(); #endif } const wxChar* TooltipEnable(const wxString& input) { //i know this duplicates the above function, but I couldn't figure out a proper conversion from wxString -> wxChar* in 2.9.x //and now it's completely useless to branch here? #if !defined(HAVE_WX29) || defined(__WXOSX_COCOA__) wxString dummy = wxEmptyString; if (!main_app_has_focus) return dummy.wc_str(); return sett().GetShowTooltips() ? input.wc_str() : dummy.wc_str(); #else wxString dummy = wxEmptyString; if (!main_app_has_focus) return dummy.wc_str(); return sett().GetShowTooltips() ? input.wc_str() : dummy.wc_str(); #endif } int GetMaxStringWidth( const wxWindow& win, const wxArrayString& strings ) { int max = -1; for (size_t i = 0; i < strings.Count(); ++i ) { wxSize size; win.GetTextExtent( strings[i], &size.x, &size.y ); max = std::max( max, size.x ); } return max; } springlobby-0.169/src/utils/controls.h0000600000176000000410000000400112105760300021355 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_CONTROLS_H #define SPRINGLOBBY_HEADERGUARD_CONTROLS_H class wxWindow; class wxColour; class wxArrayString; #include #include "../defines.h" #ifdef __WXMSW__ static const int CONTROL_HEIGHT = 22; #else static const int CONTROL_HEIGHT = 28; #endif static const int SCROLL_RATE = 3; #define bool2yn(b) ((b)?_("Yes"):_("No")) #ifdef __WXMSW__ const wxString DEFAULT_COLORDLG_TITLE = _("Choose color"); #else const wxString DEFAULT_COLORDLG_TITLE = _("Choose color (only first 16 will be saved)"); #endif //! when querying for a color, always use this (it'll autosave/retrieve custom defined colors) wxColour GetColourFromUser(wxWindow *parent, const wxColour& colInit, const wxString& caption = DEFAULT_COLORDLG_TITLE, const wxString& palette = _T("Default") ); #define TE(v) TooltipEnable(v) //! call this function everytime map app loses/acquires focus to enable/disable tooltips void UpdateMainAppHasFocus( bool focus ); /** @brief when setting tooltips use output of this func as input it outputs empty string if tooltips are disabled in SL settings */ const wxChar* TooltipEnable(const wxChar* input); #if defined(HAVE_WX29) const wxChar* TooltipEnable(const wxString input); #endif int GetMaxStringWidth( const wxWindow& win, const wxArrayString& strings ); #endif // SPRINGLOBBY_HEADERGUARD_CONTROLS_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/conversion.cpp0000600000176000000410000000146312105760300022243 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include "conversion.h" #include #include int ConvertWXArrayToC(const wxArrayString& aChoices, wxString **choices) { int n = aChoices.GetCount(); *choices = new wxString[n]; for ( int i = 0; i < n; i++ ) { (*choices)[i] = aChoices[i]; } return n; } TransformedArrayString::TransformedArrayString( const wxArrayString& original, wxString trans_op (const wxString& ) ) { for ( size_t i = 0; i < original.Count(); i++ ) Add( trans_op( original[i] ) ); } StringtokenizerVectorized::StringtokenizerVectorized( wxStringTokenizer tokenizer ) { reserve( tokenizer.CountTokens() ); while ( tokenizer.HasMoreTokens() ) push_back( tokenizer.GetNextToken() ); } springlobby-0.169/src/utils/conversion.h0000600000176000000410000001141312105760300021704 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_CONVERSION_H #define SPRINGLOBBY_HEADERGUARD_CONVERSION_H /** \name Type conversions **/ //! Converts an std::string to a wxString //static inline wxString WX_STRING( const std::string& v ) { // return wxString(v.c_str(),wxConvUTF8); //} #ifdef _MSC_VER typedef __int64 int64_t; #endif //! Converts a wxString to an std::string #define STD_STRING(v) std::string((const char*)(v).mb_str(wxConvUTF8)) //! converts a wxString to a c string #define C_STRING(v) (v).mb_str(wxConvUTF8) #include #include #include template static inline wxString TowxString(T arg){ std::stringstream s; s << arg; return wxString(s.str().c_str(),wxConvUTF8); } //template<> //inline wxString TowxString(const std::string& arg){ // return wxString( arg.c_str(), wxConvUTF8 ); //} template<> inline wxString TowxString(wxString arg){ return arg; } template<> inline wxString TowxString(const wxChar *arg){ return wxString(arg); } //static inline wxString TowxString(){ // return wxString(); //} template inline T FromwxString(const wxString& arg){ std::stringstream s; s << STD_STRING(arg); int64_t ret; s >> ret; return (T)ret; } #ifdef SL_QT_MODE #include #include template<> inline QString FromwxString(const wxString& arg) { return QString(arg.mb_str()); } template<> inline QVariant FromwxString(const wxString& arg) { return QVariant::fromValue( FromwxString( arg ) ); } template<> inline wxString TowxString(QString arg){ return wxString(arg.toStdString().c_str(),wxConvUTF8); } //template<> static inline QString ToQString(const wxString& arg){ return QString( arg.mbc_str() ); } #endif #define WX_STRINGC(v) wxString(v,wxConvUTF8) static inline long s2l( const wxString& arg ) { long ret; arg.ToLong(&ret); return ret; } static inline double s2d( const wxString& arg ) { double ret; arg.ToDouble(&ret); return ret; } /** @} */ static inline wxString MakeHashUnsigned( const wxString& hash ) { return TowxString( FromwxString( hash ) ); } static inline wxString MakeHashSigned( const wxString& hash ) { return TowxString( FromwxString( hash ) ); } //! convert wxArrayString into a wxString[] which must be delete[]d by caller int ConvertWXArrayToC(const wxArrayString& aChoices, wxString **choices); //! is a copy of given wxArrayString with a function applied on each element class TransformedArrayString : public wxArrayString { public: TransformedArrayString( const wxArrayString& original, wxString trans_op (const wxString& ) ); }; #include class wxStringTokenizer; //! converts a string tokneizer into a vector of string class StringtokenizerVectorized : public std::vector { public: StringtokenizerVectorized( wxStringTokenizer tokenizer ); }; #include //! a wxString extension class to boost::format struct wxFormat : public boost::format { explicit wxFormat( const wxString& format ) : boost::format( STD_STRING( format ) ) {} explicit wxFormat( const std::string& format ) : boost::format( format ) {} wxString str() const { return TowxString( boost::format::str() ); } wxString c_str() const { return TowxString( boost::format::str() ).c_str(); } //! conversion operator to wxString operator wxString () const { return str(); } //! overload the base class % operator to accept wxString input (and return our own type again) template wxFormat& operator%(const T& x) { return static_cast( boost::format::operator % ( x ) ); } //! this signature is needed to be able to specialize on wxChar and apply conversion template wxFormat& operator%(const T* x) { return static_cast( boost::format::operator % ( x ) ); } }; template <> inline wxFormat& wxFormat::operator%(const wxString& x) { return static_cast( boost::format::operator % ( STD_STRING(x) ) ); } template <> inline wxFormat& wxFormat::operator%(const wxChar* x) { return operator % ( wxString(x) ); } #endif // SPRINGLOBBY_HEADERGUARD_CONVERSION_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/crtpbase.h0000600000176000000410000000055312105760300021325 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_CRTPBASE_H #define SPRINGLOBBY_HEADERGUARD_CRTPBASE_H template class CRTPbase { public: virtual ~CRTPbase(){} protected: Derived& asImp () { return static_cast(*this); } const Derived& asImp () const { return static_cast(*this); } }; #endif // SPRINGLOBBY_HEADERGUARD_CRTPBASE_H springlobby-0.169/src/utils/curlhelper.cpp0000600000176000000410000000166112105760300022223 0ustar buildbotwww-data00000000000000#include "curlhelper.h" extern "C" { size_t wxcurl_string_write(void* ptr, size_t size, size_t nmemb, void* pcharbuf) { size_t iRealSize = size * nmemb; wxCharBuffer* pStr = (wxCharBuffer*) pcharbuf; if(pStr) { wxString str = wxCURL_BUF2STRING(*pStr) + wxString((const char*)ptr, wxConvLibc); *pStr = wxCURL_STRING2BUF(str); } return iRealSize; } size_t wxcurl_stream_write(void* ptr, size_t size, size_t nmemb, void* stream) { size_t iRealSize = size * nmemb; wxOutputStream* pBuf = (wxOutputStream*)stream; if(pBuf) { pBuf->Write(ptr, iRealSize); return pBuf->LastWrite(); } return 0; } /* reads from a stream */ size_t wxcurl_stream_read(void* ptr, size_t size, size_t nmemb, void* stream) { size_t iRealSize = size * nmemb; wxInputStream* pBuf = (wxInputStream*)stream; if(pBuf) { pBuf->Read(ptr, iRealSize); return pBuf->LastRead(); } return 0; } }//end extern "C" springlobby-0.169/src/utils/curlhelper.h0000600000176000000410000000203612105760300021665 0ustar buildbotwww-data00000000000000#ifndef CURLHELPER_H #define CURLHELPER_H #include #include #define wxCURL_BUF2STRING(x) wxString((const char*)(x), wxConvLibc) #if wxUSE_UNICODE #define wxCURL_STRING2BUF(x) ((x).ToAscii()) #else #define wxCURL_STRING2BUF(x) wxCharBuffer((x).c_str()) #endif #include #include extern "C" { int wxcurl_evt_progress_func(void* ptr, double rDlTotal, double rDlNow, double rUlTotal, double rUlNow); int wxcurl_verbose_stream_write (CURL * crlptr , curl_infotype info, char * cStrMessage, size_t msgSize, void * buffer); size_t wxcurl_header_func(void *ptr, size_t size, size_t nmemb, void *stream); size_t wxcurl_string_write(void* ptr, size_t size, size_t nmemb, void* stream); size_t wxcurl_stream_write(void* ptr, size_t size, size_t nmemb, void* stream); size_t wxcurl_string_read(void* ptr, size_t size, size_t nmemb, void* stream); size_t wxcurl_stream_read(void* ptr, size_t size, size_t nmemb, void* stream); } #endif // CURLHELPER_H springlobby-0.169/src/utils/customdialogs.cpp0000600000176000000410000004154412105760300022737 0ustar buildbotwww-data00000000000000#include "../utils/customdialogs.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "../utils/conversion.h" #include "../defines.h" #include "../settings.h" #include "uievents.h" #include "../customizations.h" #ifdef HAVE_WX29 //in < 29 this is defined in wxDialogBase, which seems to have disappeared enum { ButtonSizerFlags = wxOK|wxCANCEL|wxYES|wxNO|wxHELP|wxNO_DEFAULT }; #endif BEGIN_EVENT_TABLE(CustomMessageBox ,wxDialog) EVT_BUTTON(wxID_NO, CustomMessageBox::OnOptionsNo) END_EVENT_TABLE() wxWindow* CustomMessageBoxBase::m_settingsWindow = 0; wxWindow* CustomMessageBoxBase::m_lobbyWindow = 0; static CustomMessageBox* s_nonmodbox = 0; static ServerMessageBox* s_serverMsgBox = 0; static ActNotifBox* s_actNotifBox = 0; static MutelistWindow* s_mutelistWindow = 0; static TimedMessageBox* s_timedMessageBox = 0; CustomMessageBox::CustomMessageBox(wxIcon* icon ,wxWindow *parent, const wxString& message, const wxString& caption , long style, const wxPoint& pos ) : wxDialog(parent,-1,caption,pos,wxDefaultSize,style|wxFRAME_FLOAT_ON_PARENT|wxDEFAULT_DIALOG_STYLE) { if( icon ) SetIcon(*icon); //******** copied from wxsource/generic/msgdlgg.cpp with small modifications*********************************************************** wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer *icon_text = new wxBoxSizer( wxHORIZONTAL ); // 1) icon //! \todo use bitmap from customisation wxBitmap bitmap; switch ( style & wxICON_MASK ) { default: bitmap = wxArtProvider::GetIcon(wxART_INFORMATION, wxART_MESSAGE_BOX); break; case wxICON_ERROR: bitmap = wxArtProvider::GetIcon(wxART_ERROR, wxART_MESSAGE_BOX); break; case wxICON_INFORMATION: bitmap = wxArtProvider::GetIcon(wxART_INFORMATION, wxART_MESSAGE_BOX); break; case wxICON_WARNING: bitmap = wxArtProvider::GetIcon(wxART_WARNING, wxART_MESSAGE_BOX); break; case wxICON_QUESTION: bitmap = wxArtProvider::GetIcon(wxART_QUESTION, wxART_MESSAGE_BOX); break; } wxStaticBitmap *info_icon = new wxStaticBitmap(this, wxID_ANY, bitmap); icon_text->Add( info_icon, 0, wxCENTER ); // 2) text icon_text->Add( CreateTextSizer( message ), 0, wxALIGN_TOP| wxLEFT, 10 ); topsizer->Add( icon_text, 1, wxCENTER | wxLEFT|wxRIGHT|wxTOP, 10 ); topsizer->Add(0,10); // 3) buttons int center_flag = wxEXPAND; if (style & wxYES_NO) center_flag = wxALIGN_CENTRE; wxSizer *sizerBtn = CreateButtonSizer(style & ButtonSizerFlags); if ( sizerBtn ) topsizer->Add(sizerBtn, 0, center_flag | wxALL, 10 ); SetAutoLayout( true ); SetSizer( topsizer ); topsizer->SetSizeHints( this ); topsizer->Fit( this ); /* wxSize size( GetSize() ); if (size.x > size.y*3/2) { size.x = size.y*3/2; SetSize( size ); } */ Centre( wxBOTH | wxCENTER_FRAME); /***************************************************************************************************/ } CustomMessageBox::~CustomMessageBox() { } void CustomMessageBox::OnOptionsNo(wxCommandEvent& /*unused*/) { EndModal(wxID_NO); } void CustomMessageBoxBase::setLobbypointer(wxWindow* arg) { m_lobbyWindow = arg; } void CustomMessageBoxBase::setSettingspointer(wxWindow* arg) { m_settingsWindow = arg; } wxWindow* CustomMessageBoxBase::getLobbypointer() { // if (m_lobbyWindow==0) // wxLogWarning(_T("null parent window in custom message dialog")); return m_lobbyWindow; } wxWindow* CustomMessageBoxBase::getSettingspointer() { // if (m_settingsWindow==0) // wxLogWarning(_T("null parent window in custom message dialog")); return m_settingsWindow; } void getIcon( int whichIcon, wxIcon** icon, wxWindow** parent ) { switch (whichIcon) { case SL_MAIN_ICON: *icon = new wxIcon( SLcustomizations().GetAppIconBundle().GetIcon() ); *parent = CustomMessageBoxBase::getLobbypointer(); break; case SS_MAIN_ICON: *icon = new wxIcon( SLcustomizations().GetAppIconBundle().GetIcon() ); *parent = CustomMessageBoxBase::getSettingspointer(); break; default: *icon = new wxIcon(wxNullIcon); *parent = NULL; break; } assert( icon ); } int customMessageBox( int whichIcon , const wxString& message,const wxString& caption, long style , int x, int y ) { wxWindow* parent = 0; wxIcon* icon = 0; getIcon( whichIcon, &icon, &parent ); CustomMessageBox dlg(icon,parent,message,caption,style,wxPoint(x,y)); int re = dlg.ShowModal(); switch (re) { case wxID_OK: return wxOK; case wxID_CANCEL: return wxCANCEL; case wxID_YES: return wxYES; case wxID_NO: return wxNO; default: return -1; } } int timedMessageBox(int whichIcon , const wxString& message, const wxString& caption, unsigned int delay, // miliseconds long style , const int x , const int y ) { wxWindow* parent = 0; wxIcon* icon = 0; getIcon( whichIcon, &icon, &parent ); TimedMessageBox dlg(icon,parent,message,caption,delay,style,wxPoint(x,y)); int re = dlg.ShowModal(); switch (re) { case wxID_OK: return wxOK; case wxID_CANCEL: return wxCANCEL; case wxID_YES: return wxYES; case wxID_NO: return wxNO; } return -1; } void timedMessageBoxNoModal(int whichIcon , const wxString& message, const wxString& caption, unsigned int delay, // miliseconds long style , const int x , const int y ) { wxWindow* parent = 0; wxIcon* icon = 0; getIcon( whichIcon, &icon, &parent ); s_timedMessageBox = new TimedMessageBox(icon,parent,message,caption,delay,style,wxPoint(x,y)); s_timedMessageBox->Show( true ); } void customMessageBoxNoModal( int whichIcon , const wxString& message,const wxString& caption, long style , int x, int y ) { wxWindow* parent = 0; wxIcon* icon = 0; getIcon( whichIcon, &icon, &parent ); s_nonmodbox = new CustomMessageBox (icon,parent,message,caption,style,wxPoint(x,y)); s_nonmodbox->Show(true); } template void closeAndDestroy( T* win ) { if ( win ) { win->Show(false); win->Destroy(); win = 0; } } void freeStaticBox() { closeAndDestroy( s_nonmodbox ); closeAndDestroy( s_serverMsgBox ); closeAndDestroy( s_actNotifBox ); closeAndDestroy( s_mutelistWindow ); closeAndDestroy( s_timedMessageBox ); } CreditsDialog::CreditsDialog(wxWindow* parent,wxString title,int whichIcon) : wxDialog(parent,-1,title,wxDefaultPosition, wxDefaultSize,wxDEFAULT_DIALOG_STYLE|wxFRAME_FLOAT_ON_PARENT) { wxBoxSizer* container = new wxBoxSizer(wxVERTICAL); text_ctrl = new wxTextCtrl(this,-1,wxT(""),wxDefaultPosition,wxDefaultSize,wxTE_MULTILINE|wxTE_READONLY|wxTE_RICH); container->Add(text_ctrl,1,wxEXPAND); container->Add(wxDialog::CreateButtonSizer(wxOK)); SetSizer(container); wxIcon* icon = 0; wxWindow* dummy = 0; getIcon( whichIcon, &icon, &dummy ); SetIcons(SLcustomizations().GetAppIconBundle()); } void CreditsDialog::AddCredit(wxString person,wxString message) { wxFont heavyFont (10, wxDEFAULT, wxNORMAL, wxBOLD); text_ctrl->SetDefaultStyle(wxTextAttr(wxNullColour,wxNullColour,heavyFont)); text_ctrl->AppendText(person); if ( !message.IsEmpty() ) { text_ctrl->AppendText(_T(": ")); text_ctrl->SetDefaultStyle(wxTextAttr(wxNullColour,wxNullColour,*wxNORMAL_FONT)); text_ctrl->AppendText(message ); } text_ctrl->AppendText(_T("\n\n")); } CreditsDialog::~CreditsDialog() { } ServerMessageBox::~ServerMessageBox() { } ServerMessageBox::ServerMessageBox(wxIcon* icon ,wxWindow *parent, const wxString& message, const wxString& caption , long style, const wxPoint& pos ) : wxDialog(parent,-1,caption,pos,wxDefaultSize,style|wxFRAME_FLOAT_ON_PARENT|wxDEFAULT_DIALOG_STYLE|wxEXPAND) { if( icon ) SetIcon(*icon); m_messages = new wxListCtrl(this,-1,wxDefaultPosition,wxDefaultSize,wxLC_NO_HEADER|wxLC_REPORT); m_messages->InsertColumn(0,_T("")); topsizer = new wxBoxSizer( wxVERTICAL ); AppendMessage(message); topsizer->Add( m_messages, 1, wxALL|wxEXPAND|wxALIGN_CENTRE, 10 ); topsizer->Add(0,10); wxSizer *sizerBtn = CreateButtonSizer(wxOK); topsizer->Add(sizerBtn, 0, wxALL|wxALIGN_CENTRE, 10 ); SetSizer( topsizer ); Centre( wxBOTH | wxCENTER_FRAME); } void ServerMessageBox::AppendMessage(const wxString& message) { if ( message == wxEmptyString ) return; m_messages->InsertItem(m_messages->GetItemCount(),message); m_messages->SetColumnWidth(0, wxLIST_AUTOSIZE); SetSize(m_messages->GetColumnWidth(0)+25,-1); Layout(); } ActNotifBox::ActNotifBox(wxIcon* icon ,wxWindow *parent, const wxString& message, const wxString& caption , long style, const wxPoint& pos) : ServerMessageBox( icon , parent, message, caption, style, pos) {} ActNotifBox::~ActNotifBox(){} void ActNotifBox::AppendMessage( const wxString& message ) { wxDateTime now = wxDateTime::Now(); wxString msg = now.Format( _T("%H:%M: ") ) + message; ServerMessageBox::AppendMessage( msg ); } void serverMessageBox( int whichIcon , const wxString& message,const wxString& caption, long style , int x, int y ) { wxWindow* parent = 0; wxIcon* icon = 0; getIcon( whichIcon, &icon, &parent ); if ( s_serverMsgBox != 0 && s_serverMsgBox->IsShown() ) { s_serverMsgBox->AppendMessage(message); } else { s_serverMsgBox = new ServerMessageBox (icon,parent,message,caption,style,wxPoint(x,y)); s_serverMsgBox->Show(true); } } void actNotifBox( int whichIcon , const wxString& message,const wxString& caption, long style , int x, int y ) { if ( sett().GetUseNotificationPopups() ) { UiEvents::GetNotificationEventSender().SendEvent( UiEvents::NotficationData( UiEvents::UserAction, message ) ); } else { wxWindow* parent = 0; wxIcon* icon = 0; getIcon( whichIcon, &icon, &parent ); if ( s_actNotifBox != 0 && s_actNotifBox->IsShown() ) { s_actNotifBox->AppendMessage(message); } else { s_actNotifBox = new ActNotifBox(icon,parent,wxEmptyString,caption,style,wxPoint(x,y)); s_actNotifBox->AppendMessage(message); s_actNotifBox->Show(true); } } } int GetSingleChoiceIndex( const wxString& message, const wxString& caption, const wxArrayString& aChoices, const int selected, wxWindow *parent , int /*unused*/ , int /*unused*/ , bool /*unused*/ ) { wxString *choices; int n = ConvertWXArrayToC(aChoices, &choices); wxSingleChoiceDialog dialog(parent, message, caption, n, choices); dialog.SetSelection( selected ); int choice; if ( dialog.ShowModal() == wxID_OK ) choice = dialog.GetSelection(); else choice = -1; delete [] choices; return choice; } void mutelistWindow( const wxString& message, const wxString& caption, long style, const int x, const int y ) { wxWindow* parent = CustomMessageBoxBase::getLobbypointer(); wxIcon* icon = new wxIcon( SLcustomizations().GetAppIconBundle().GetIcon() ); if ( s_mutelistWindow != 0 && s_mutelistWindow->IsShown() ) { s_mutelistWindow->AppendMessage(message); } else { s_mutelistWindow = new MutelistWindow(icon,parent,wxEmptyString,caption,style,wxPoint(x,y)); s_mutelistWindow->AppendMessage(message); s_mutelistWindow->Show(true); } } MutelistWindow::MutelistWindow(wxIcon* icon ,wxWindow *parent, const wxString& message, const wxString& caption , long style, const wxPoint& pos) : ServerMessageBox( icon , parent, message, caption, style, pos) {} MutelistWindow::~MutelistWindow () {} BEGIN_EVENT_TABLE( TimedMessageBox, wxDialog ) EVT_CLOSE( TimedMessageBox::OnClose ) EVT_BUTTON(wxID_NO, TimedMessageBox::OnOptionsNo) END_EVENT_TABLE() TimedMessageBox::TimedMessageBox(wxIcon* icon ,wxWindow *parent, const wxString& message, const wxString& caption , unsigned int delay, long style, const wxPoint& pos ) : wxDialog(parent,-1,caption,pos,wxDefaultSize,style|wxFRAME_FLOAT_ON_PARENT|wxDEFAULT_DIALOG_STYLE), m_delay( delay ), m_display_hits(0) { SetIcon(*icon); //******** copied from wxsource/generic/msgdlgg.cpp with small modifications*********************************************************** topsizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer *icon_text = new wxBoxSizer( wxHORIZONTAL ); // 1) icon wxBitmap bitmap; switch ( style & wxICON_MASK ) { default: bitmap = wxArtProvider::GetIcon(wxART_INFORMATION, wxART_MESSAGE_BOX); break; case wxICON_ERROR: bitmap = wxArtProvider::GetIcon(wxART_ERROR, wxART_MESSAGE_BOX); break; case wxICON_INFORMATION: bitmap = wxArtProvider::GetIcon(wxART_INFORMATION, wxART_MESSAGE_BOX); break; case wxICON_WARNING: bitmap = wxArtProvider::GetIcon(wxART_WARNING, wxART_MESSAGE_BOX); break; case wxICON_QUESTION: bitmap = wxArtProvider::GetIcon(wxART_QUESTION, wxART_MESSAGE_BOX); break; } wxStaticBitmap *info_icon = new wxStaticBitmap(this, wxID_ANY, bitmap); icon_text->Add( info_icon, 0, wxCENTER ); // 2) text icon_text->Add( CreateTextSizer( message ), 0, wxALIGN_TOP| wxLEFT, 10 ); topsizer->Add( icon_text, 1, wxCENTER | wxLEFT|wxRIGHT|wxTOP, 10 ); topsizer->Add(0,10); // 3) buttons int center_flag = wxEXPAND; if (style & wxYES_NO) center_flag = wxALIGN_CENTRE; sizerBtn = CreateButtonSizer(style & ButtonSizerFlags); if ( sizerBtn ) { topsizer->Add(sizerBtn, 0, center_flag | wxALL, 10 ); sizerBtn->Show( false ); } m_delay_sizer = new wxBoxSizer( wxHORIZONTAL); m_delay_notif = new wxStaticText( this, -1, wxFormat( _("Please standby %d seconds") ) % ( delay / 1000 ) ); m_delay_sizer->Add( m_delay_notif, 0, center_flag | wxALL, 10 ); topsizer-> Add( m_delay_sizer ); SetAutoLayout( true ); SetSizer( topsizer ); topsizer->SetSizeHints( this ); topsizer->Fit( this ); /* wxSize size( GetSize() ); if (size.x > size.y*3/2) { size.x = size.y*3/2; SetSize( size ); } */ Centre( wxBOTH | wxCENTER_FRAME); wxWindowID delay_timerID = wxNewId(); wxWindowID display_timerID = wxNewId(); m_delay_timer.SetOwner( this, delay_timerID ); m_display_timer.SetOwner( this, display_timerID ); Connect( delay_timerID, wxEVT_TIMER, wxTimerEventHandler( TimedMessageBox::OnUnlock) ); Connect( display_timerID, wxEVT_TIMER, wxTimerEventHandler( TimedMessageBox::OnUpdate ) ); m_delay_timer.Start( m_delay, wxTIMER_ONE_SHOT ); m_display_timer.Start( m_update_interval, wxTIMER_CONTINUOUS ); /***************************************************************************************************/ } TimedMessageBox::~TimedMessageBox() { } void TimedMessageBox::OnOptionsNo(wxCommandEvent& ) { EndModal(wxID_NO); } void TimedMessageBox::OnUpdate( wxTimerEvent& ) { m_display_hits++; int remainder = ( m_delay - ( m_display_hits * m_update_interval ) ) / 1000; m_delay_notif->SetLabel( wxFormat( _("Please standby %d seconds") ) % remainder ); } void TimedMessageBox::OnClose( wxCloseEvent& ) { if ( !m_delay_timer.IsRunning() ) Close(); } void TimedMessageBox::OnUnlock( wxTimerEvent& ) { m_delay_sizer->Show( false ); sizerBtn->Show( true ); topsizer->SetSizeHints( this ); topsizer->Fit( this ); Layout(); } AutocloseMessageBox::AutocloseMessageBox( wxWindow *parent, const wxString& message, const wxString& caption , unsigned int delay, long style, const wxPoint& pos ) : TimedMessageBox( new wxIcon( SLcustomizations().GetAppIconBundle().GetIcon() ), parent, message, caption, delay, style, pos ) ,delay_timerID( wxNewId() ) { m_delay_timer.SetOwner( this, delay_timerID ); Connect( delay_timerID, wxEVT_TIMER, wxTimerEventHandler( AutocloseMessageBox::OnUnlock) ); wxSizer* topsizer = GetSizer(); wxSizer *sizerBtn = CreateSeparatedButtonSizer(wxCANCEL); topsizer->Add(sizerBtn, 0, wxALL|wxALIGN_CENTRE, 10 ); topsizer->SetSizeHints( this ); topsizer->Fit( this ); Layout(); } void AutocloseMessageBox::OnUnlock( wxTimerEvent& /*evt*/ ) { EndModal(wxID_OK); } AutocloseMessageBox::~AutocloseMessageBox() { } void AutocloseMessageBox::EndModal( int retCode ) { Disconnect( delay_timerID, wxEVT_TIMER, wxTimerEventHandler( AutocloseMessageBox::OnUnlock) ); m_delay_timer.Stop(); TimedMessageBox::EndModal( retCode ); } springlobby-0.169/src/utils/customdialogs.h0000600000176000000410000002112412105760300022374 0ustar buildbotwww-data00000000000000#ifndef CUSTOM_MSG_BOX_H_ #define CUSTOM_MSG_BOX_H_ #include #include #include #include #include #include "mixins.hh" const unsigned SL_MAIN_ICON = 1; const unsigned SS_MAIN_ICON = 2; class wxIcon; class wxWindow; class wxPoint; class wxString; class wxTextCtrl; class wxStaticText; class wxCommandEvent; class wxCloseEvent; class wxBoxSizer; class wxListCtrl; class wxGauge; #define SL_MAIN_WINDOW_PTR CustomMessageBox::getLobbypointer() #define SE_FRAME_PTR CustomMessageBox::getSettingspointer() /** \brief utlity function to display modal messagebox * \return wxOK|wxCANCEL|wxYES|wxNO according to option chosen */ int customMessageBox(int whichIcon , const wxString& message, const wxString& caption = wxMessageBoxCaptionStr, long style = wxOK|wxICON_INFORMATION, const int x = -1, const int y = -1 ); /** \brief utlity function to display modal messagebox * the dialog itself is statically allocated, therefore only one * one of these may exist at any given time. \n * It is possible to use this with other styles than wxOK|wxICON_INFORMATION, * but since it's displayed non-modal nothing would come of it */ void customMessageBoxNoModal(int whichIcon , const wxString& message, const wxString& caption = wxMessageBoxCaptionStr, long style = wxOK|wxICON_INFORMATION, const int x = -1, const int y = -1 ); /** \brief displays server messages when no chat window has focus * If dialog currently isn't shown, it's brought up. If dialog already is shown (not necessarily having focus) * message is appended, rather than old box replaced with new. */ void serverMessageBox(int whichIcon , const wxString& message, const wxString& caption = wxMessageBoxCaptionStr, long style = wxOK|wxICON_INFORMATION, const int x = -1, const int y = -1 ); /** \brief displays user action notifications * If dialog currently isn't shown, it's brought up. If dialog already is shown (not necessarily having focus) * message is appended, rather than old box replaced with new. */ void actNotifBox(int whichIcon , const wxString& message, const wxString& caption = _T("User action notification"), long style = wxOK|wxICON_INFORMATION, const int x = -1, const int y = -1 ); /** \brief show mutelist for a specific channel * */ void mutelistWindow( const wxString& message, const wxString& caption = _T("Mutelist"), long style = wxOK|wxICON_INFORMATION, const int x = -1, const int y = -1 ); /** \brief utlity function to display modal messagebox, closing is denied until timer ran down * \return wxOK|wxCANCEL|wxYES|wxNO according to option chosen */ int timedMessageBox(int whichIcon , const wxString& message, const wxString& caption = wxMessageBoxCaptionStr, unsigned int delay = 3000, // miliseconds long style = wxOK|wxICON_INFORMATION, const int x = -1, const int y = -1 ); /** \brief same as timedMessageBox, but not Modal --> no return val * \return wxOK|wxCANCEL|wxYES|wxNO according to option chosen */ void timedMessageBoxNoModal(int whichIcon , const wxString& message, const wxString& caption = wxMessageBoxCaptionStr, unsigned int delay = 3000, // miliseconds long style = wxOK|wxICON_INFORMATION, const int x = -1, const int y = -1 ); //! cleanup void freeStaticBox(); /** \brief used to display information throughout the app * almost identical to wx's own dialog except for the possibility * to set a custom icon */ class CustomMessageBox : public wxDialog { public: CustomMessageBox(wxIcon* icon ,wxWindow *parent, const wxString& message, const wxString& caption = wxMessageBoxCaptionStr, long style = wxOK|wxICON_INFORMATION, const wxPoint& pos = wxDefaultPosition); virtual ~CustomMessageBox(); void OnOptionsNo(wxCommandEvent& event); protected: DECLARE_EVENT_TABLE() }; /** \brief MessageBox variant with timer */ class TimedMessageBox : public wxDialog { public: TimedMessageBox(wxIcon* icon ,wxWindow *parent, const wxString& message, const wxString& caption = wxMessageBoxCaptionStr, unsigned int delay = 3000, // miliseconds long style = wxOK|wxICON_INFORMATION, const wxPoint& pos = wxDefaultPosition); virtual ~TimedMessageBox(); void OnOptionsNo(wxCommandEvent& event); protected: const int m_delay; wxSizer* sizerBtn; wxSizer* topsizer; wxSizer* m_delay_sizer; wxStaticText* m_delay_notif; wxTimer m_delay_timer; wxTimer m_display_timer; unsigned int m_display_hits; static const unsigned int m_update_interval = 500; void OnUpdate( wxTimerEvent& evt ); void OnUnlock( wxTimerEvent& evt ); void OnClose( wxCloseEvent& evt ); TimedMessageBox( const TimedMessageBox& ); const TimedMessageBox& operator = ( const TimedMessageBox& ); DECLARE_EVENT_TABLE() }; class AutocloseMessageBox : public TimedMessageBox { public: AutocloseMessageBox(wxWindow *parent, const wxString& message, const wxString& caption = wxMessageBoxCaptionStr, unsigned int delay = 3000, // miliseconds long style = wxOK|wxICON_INFORMATION, const wxPoint& pos = wxDefaultPosition); virtual ~AutocloseMessageBox(); virtual void EndModal( int retCode ); protected: void OnUnlock( wxTimerEvent& evt ); wxWindowID delay_timerID; }; /** \brief used to display server messages when no chatwindow has focus */ class ServerMessageBox : public wxDialog, public SL::NonCopyable { public: ServerMessageBox(wxIcon* icon ,wxWindow *parent, const wxString& message, const wxString& caption = wxMessageBoxCaptionStr, long style = wxOK, const wxPoint& pos = wxDefaultPosition); virtual ~ServerMessageBox(); virtual void AppendMessage(const wxString& message); protected: wxBoxSizer* topsizer; wxListCtrl* m_messages; }; /** \brief displays user action notifications */ class ActNotifBox : public ServerMessageBox { public: ActNotifBox (wxIcon* icon ,wxWindow *parent, const wxString& message, const wxString& caption = _T("User action notification") , long style = wxOK, const wxPoint& pos = wxDefaultPosition); virtual ~ActNotifBox (); virtual void AppendMessage(const wxString& message); }; /** \brief displays channel mutelist */ class MutelistWindow : public ServerMessageBox { public: MutelistWindow (wxIcon* icon ,wxWindow *parent, const wxString& message, const wxString& caption = _T("User action notification") , long style = wxOK, const wxPoint& pos = wxDefaultPosition); virtual ~MutelistWindow (); //virtual void AppendMessage(const wxString& message); }; /** \brief encapsulates pointers common to ServerMessageBox and CustomMessageBox * \todo this isn't really that well designed, make a real base class of this? */ class CustomMessageBoxBase { public: static void setLobbypointer(wxWindow*); static void setSettingspointer(wxWindow*); static wxWindow* getLobbypointer(); static wxWindow* getSettingspointer(); void AppendMessage(const wxString& message); protected: static wxWindow* m_settingsWindow; static wxWindow* m_lobbyWindow; wxListCtrl* m_messages; }; /** \brief A generic Credits dialog * See showCredits() for modal use */ class CreditsDialog: public wxDialog, public SL::NonCopyable { public: CreditsDialog(wxWindow* parent,wxString title, int whichIcon); virtual ~CreditsDialog(); /** \brief add a Name|Reason line to the dialog */ void AddCredit(wxString,wxString); private: wxTextCtrl* text_ctrl; CreditsDialog( const CreditsDialog& ); }; //! extends the wx method by allowing to set selection int GetSingleChoiceIndex( const wxString& message, const wxString& caption, const wxArrayString& aChoices, const int selected, wxWindow *parent = NULL, int x = wxDefaultCoord, int y = wxDefaultCoord, bool centre = true ); #endif /*CUSTOM_MSG_DLG_H_*/ /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/debug.cpp0000600000176000000410000000011212105760300021132 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ springlobby-0.169/src/utils/debug.h0000600000176000000410000000376112105760300020614 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_DEBUG_H #define SPRINGLOBBY_HEADERGUARD_DEBUG_H #include class assert_exception : public std::runtime_error { public: assert_exception(std::string msg) : std::runtime_error(msg) {} }; #ifndef __WXDEBUG__ #define wxLogDebugFunc( params ) wxLogVerbose( _T("%s"), wxString(wxString(__FUNCTION__, wxConvUTF8 ) + _T(" ( ") + wxString(params) + _T(" )")).c_str() ) #else #define wxLogDebugFunc( params ) wxLogTrace(_T("function calls"), params ) #endif #if wxUSE_DEBUGREPORT #define ASSERT_LOGIC(cond,msg) if(!(cond))\ {\ wxLogError(_T("logic error ( %s:%d ): %s"), TowxString(__FILE__).c_str(),__LINE__ , wxString(msg).c_str() );\ throw std::logic_error(std::string(wxString(msg).mb_str()));\ } #else #define ASSERT_LOGIC(cond,msg) if(!(cond))\ {\ wxLogError(_T("logic error ( %s:%d ): %s"), TowxString(__FILE__).c_str(),__LINE__ , wxString(msg).c_str() );\ throw std::logic_error(std::string(wxString(msg).mb_str()));\ } #endif #define ASSERT_EXCEPTION(cond,msg) if(!(cond))\ {wxLogMessage(_T("runtime assertion ( %s:%d ): %s"), TowxString(__FILE__).c_str(),__LINE__ , wxString(msg).c_str() );throw assert_exception(std::string(wxString(msg).mb_str()));} #define CATCH_ANY catch(...)\ {wxLogMessage(_T("%s-%d: undiff exception"),TowxString(__FILE__).c_str(),__LINE__ );} #endif // SPRINGLOBBY_HEADERGUARD_DEBUG_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/events.h0000600000176000000410000001534712105760300021035 0ustar buildbotwww-data00000000000000#ifndef EVENTS_H_INCLUDED #define EVENTS_H_INCLUDED #include #include "../utils/mixins.hh" #ifndef my_assert #define my_assert(x) assert(x) #endif /// Double linked cyclic list implementation. /// Beware! When a node is copied (duplicated), the copy is inserted after original into the list! /// This is done to make it work when you're storing nodes in some container which invokes copy constructor on components. class ListNodeBare { public: ListNodeBare * prev; ListNodeBare * next;// first and last for holder. inline void ConnectNextTo( ListNodeBare *a ) {/// connecting next to itself is equivalent to disconnect. Disconnect(); next = a->next; prev = a; next->prev = this; prev->next = this; } inline void ConnectPrevTo( ListNodeBare *a ) {/// connecting prev to itself is equivalent to disconnect. Disconnect(); next = a; prev = a->prev; next->prev = this; prev->next = this; } inline void StepNext() {/// moves itself forward in the ring ListNodeBare *a = next; next->prev = prev;/// disconnect itself prev->next = next; next = a->next;/// reconnect itself after next prev = a; next->prev = this; prev->next = this; } inline void StepPrev() {/// moves itself backward in the ring ListNodeBare *a = prev; next->prev = prev;/// disconnect itself prev->next = next; next = a;/// reconnect itself before prev prev = a->prev; next->prev = this; prev->next = this; } inline void SanityCheck() { my_assert( prev != 0 ); my_assert( next != 0 ); my_assert( prev->next == this ); my_assert( next->prev == this ); } inline void Disconnect() { if ( prev != this ) {//if we're connected my_assert( prev != 0 ); my_assert( next != 0 ); my_assert( next != this ); next->prev = prev; prev->next = next; // short itself. prev = this; next = this; } else { // we're not connected,must be so on both ends. my_assert( next == this ); }; } ListNodeBare() : prev( this ), next( this ) {} virtual ~ListNodeBare() { Disconnect(); } ListNodeBare( const ListNodeBare &a ) { next = a.next; prev = const_cast( &a ); next->prev = this; prev->next = this; } ListNodeBare& operator= ( const ListNodeBare &a ) { if( this != &a ) { next = a.next; prev = const_cast( &a ); next->prev = this; prev->next = this; } return *this; } }; /// A base class for event receivers template class EventReceiverFuncBase: public ListNodeBare { public: virtual void OnEvent( TParamType /*param*/ ) {} }; /// use EventSender::SendEvent to send events. template class EventSender: public EventReceiverFuncBase { public: EventSender() :m_enabled(true) {} void OnEvent( TParamType /*param */) { /// you may want to put assert(0) here, or log a message. /// This method is only called when you have multiple senders sharing same event list. /// Which happens when you unnecessarily make a copy of sender. } void SendEvent( TParamType param ) { //std::cout<<"SendEvent called "<( this ); //my_assert(pt->prev==end); EventReceiverFuncBase iterator_node; iterator_node.ConnectNextTo( end ); while ( m_enabled && ( iterator_node.next != end ) ) { iterator_node.SanityCheck(); ( static_cast *>( iterator_node.next ) )->OnEvent( param ); iterator_node.StepNext(); } } void Enable( bool enable = true ) { m_enabled = enable; } protected: bool m_enabled; }; /// Use EventReceiverFunc to make event receiver adaptor template < class TReceiverType, class TParamType, void ( TReceiverType::*TMethod )( TParamType ) > class EventReceiverFunc: public EventReceiverFuncBase, public SL::NonCopyable { TReceiverType *receiver_obj; public: EventReceiverFunc( TReceiverType *receiver_obj_, EventSender *sender = 0 ): receiver_obj( receiver_obj_ ) { if ( sender ) { ListNodeBare *a = static_cast( sender ); ListNodeBare::ConnectPrevTo( a ); } } void Connect( EventSender &sender ) { Connect( &sender ); } void Connect( EventSender *sender ) { if ( sender ) { ListNodeBare *a = static_cast( sender ); ListNodeBare::ConnectPrevTo( a ); } else { ListNodeBare::Disconnect(); } } virtual void OnEvent( TParamType param ) { if ( receiver_obj ) { ( receiver_obj->*TMethod )( param );/// TMethod is constant here at compile time, so chances are the call is inlined. It is faster than standard pointer-to-member function call. } } }; /// Use EventReceiverFunc to make event receiver adaptor template < class TReceiverType, class TParamType, class TAuxParamType, void ( TReceiverType::*TMethod )( TParamType, TAuxParamType ) > class EventReceiverFuncAux: public EventReceiverFuncBase { TReceiverType *receiver_obj; public: TAuxParamType aux_param; EventReceiverFuncAux( TReceiverType *receiver_obj_, EventSender *sender = 0, TAuxParamType aux_param_ = TAuxParamType() ): receiver_obj( receiver_obj_ ), aux_param( aux_param_ ) { if ( sender ) { ListNodeBare *a = static_cast( sender ); ListNodeBare::ConnectPrevTo( a ); } } void Connect( EventSender &sender ) { Connect( &sender ); } void Connect( EventSender *sender ) { if ( sender ) { ListNodeBare *a = static_cast( sender ); ListNodeBare::ConnectPrevTo( a ); } else { ListNodeBare::Disconnect(); } } virtual void OnEvent( TParamType param ) { if ( receiver_obj ) { ( receiver_obj->*TMethod )( param, aux_param );/// TMethod is constant here at compile time, so chances are the call is inlined. It is faster than standard pointer-to-member function call. } } }; #endif // EVENTS_H_INCLUDED /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/globalevents.cpp0000600000176000000410000000041212105760300022534 0ustar buildbotwww-data00000000000000#include "globalevents.h" namespace GlobalEvents { static std::map< GlobalEventsTypes, EventSender > GlobalEvents; EventSender &GetGlobalEventSender( GlobalEventsTypes cmd ) { return GlobalEvents[cmd]; } } springlobby-0.169/src/utils/globalevents.h0000600000176000000410000000116212105760300022204 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_GLOBALEVENTS_H #define SPRINGLOBBY_HEADERGUARD_GLOBALEVENTS_H #include "events.h" #include namespace GlobalEvents { enum GlobalEventsTypes { OnUnitsyncFirstTimeLoad, OnUnitsyncReloaded, OnSpringTerminated, OnSpringStarted, UpdateFinished, OnQuit, OnLogin, PlasmaResourceListParsed, PlasmaResourceListFailedDownload, BattleSyncReload, OnTimerUpdates }; typedef int GlobalEventData; EventSender &GetGlobalEventSender( GlobalEventsTypes cmd ); } #endif // SPRINGLOBBY_HEADERGUARD_GLOBALEVENTS_H springlobby-0.169/src/utils/isink.h0000600000176000000410000001024012105760300020631 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_ISINK_H #define SPRINGLOBBY_HEADERGUARD_ISINK_H #include "globalevents.h" #include "crtpbase.h" /** \brief mixin classes that provide automatic sink creation and setup originally created to work around name resolution problems when using sinks in templated classes **/ template class UnitsyncReloadedSink : public CRTPbase { protected: typedef UnitsyncReloadedSink BaseType; using CRTPbase::asImp; public: void OnUnitsyncReloaded( EventDataType data ) { asImp().OnUnitsyncReloaded( data ); } protected: typedef EventReceiverFunc EventReceiverFunction; EventReceiverFunction OnUsync_reload; public: UnitsyncReloadedSink () : OnUsync_reload( this, &GetGlobalEventSender( GlobalEvents::OnUnitsyncReloaded ) ) {} }; template class SpringTerminatedSink : public CRTPbase { protected: typedef SpringTerminatedSink BaseType; using CRTPbase::asImp; public: void OnSpringTerminated( EventDataType data ) { asImp().OnSpringTerminated( data ); } protected: typedef EventReceiverFunc EventReceiverFunction; EventReceiverFunction m_SpringTerminatedSink; public: SpringTerminatedSink () : m_SpringTerminatedSink( this, &GetGlobalEventSender( GlobalEvents::OnSpringTerminated ) ) {} }; template class OnQuitSink : public CRTPbase { protected: typedef OnQuitSink BaseType; using CRTPbase::asImp; public: void OnQuit( EventDataType data ) { asImp().OnQuit( data ); } protected: typedef EventReceiverFunc EventReceiverFunction; EventReceiverFunction m_OnQuitSink; public: OnQuitSink () : m_OnQuitSink( this, &GetGlobalEventSender( GlobalEvents::OnQuit) ) {} }; template class BattleSyncReloadSink : public CRTPbase { protected: typedef BattleSyncReloadSink BaseType; using CRTPbase::asImp; public: void OnBattleSyncReload( EventDataType data ) { asImp().OnBattleSyncReload( data ); } protected: typedef EventReceiverFunc EventReceiverFunction; EventReceiverFunction m_BattleSyncReloadSink; public: BattleSyncReloadSink () : m_BattleSyncReloadSink( this, &GetGlobalEventSender( GlobalEvents::BattleSyncReload) ) {} }; template class OnLoginSink : public CRTPbase { protected: typedef GlobalEvents::GlobalEventData EventDataType; typedef OnLoginSink BaseType; using CRTPbase::asImp; public: void OnLogin( EventDataType data ) { asImp().OnLogin( data ); } protected: typedef EventReceiverFunc EventReceiverFunction; EventReceiverFunction m_OnLoginSink; public: OnLoginSink() : m_OnLoginSink( this, &GetGlobalEventSender( GlobalEvents::OnLogin) ) {} }; #endif // SPRINGLOBBY_HEADERGUARD_ISINK_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/md5.c0000600000176000000410000003022212105760300020176 0ustar buildbotwww-data00000000000000/* Copyright (C) 1999, 2000, 2002 Aladdin Enterprises. All rights reserved. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. L. Peter Deutsch ghost@aladdin.com */ /* $Id: md5.c,v 1.6 2002/04/13 19:20:28 lpd Exp $ */ /* Independent implementation of MD5 (RFC 1321). This code implements the MD5 Algorithm defined in RFC 1321, whose text is available at http://www.ietf.org/rfc/rfc1321.txt The code is derived from the text of the RFC, including the test suite (section A.5) but excluding the rest of Appendix A. It does not include any code or documentation that is identified in the RFC as being copyrighted. The original and principal author of md5.c is L. Peter Deutsch . Other authors are noted in the change history that follows (in reverse chronological order): 2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order either statically or dynamically; added missing #include in library. 2002-03-11 lpd Corrected argument list for main(), and added int return type, in test program and T value program. 2002-02-21 lpd Added missing #include in test program. 2000-07-03 lpd Patched to eliminate warnings about "constant is unsigned in ANSI C, signed in traditional"; made test program self-checking. 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5). 1999-05-03 lpd Original version. */ #include "md5.h" #include #undef BYTE_ORDER /* 1 = big-endian, -1 = little-endian, 0 = unknown */ #ifdef ARCH_IS_BIG_ENDIAN # define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1) #else # define BYTE_ORDER 0 #endif #define T_MASK ((md5_word_t)~0) #define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87) #define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9) #define T3 0x242070db #define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111) #define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050) #define T6 0x4787c62a #define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec) #define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe) #define T9 0x698098d8 #define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850) #define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e) #define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841) #define T13 0x6b901122 #define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c) #define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71) #define T16 0x49b40821 #define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d) #define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf) #define T19 0x265e5a51 #define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855) #define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2) #define T22 0x02441453 #define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e) #define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437) #define T25 0x21e1cde6 #define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829) #define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278) #define T28 0x455a14ed #define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa) #define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07) #define T31 0x676f02d9 #define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375) #define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd) #define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e) #define T35 0x6d9d6122 #define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3) #define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb) #define T38 0x4bdecfa9 #define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f) #define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f) #define T41 0x289b7ec6 #define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805) #define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a) #define T44 0x04881d05 #define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6) #define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a) #define T47 0x1fa27cf8 #define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a) #define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb) #define T50 0x432aff97 #define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58) #define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6) #define T53 0x655b59c3 #define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d) #define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82) #define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e) #define T57 0x6fa87e4f #define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f) #define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb) #define T60 0x4e0811a1 #define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d) #define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca) #define T63 0x2ad7d2bb #define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e) static void md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/) { md5_word_t a = pms->abcd[0], b = pms->abcd[1], c = pms->abcd[2], d = pms->abcd[3]; md5_word_t t; #if BYTE_ORDER > 0 /* Define storage only for big-endian CPUs. */ md5_word_t X[16]; #else /* Define storage for little-endian or both types of CPUs. */ md5_word_t xbuf[16]; const md5_word_t *X; #endif { #if BYTE_ORDER == 0 /* * Determine dynamically whether this is a big-endian or * little-endian machine, since we can use a more efficient * algorithm on the latter. */ static const int w = 1; if (*((const md5_byte_t *)&w)) /* dynamic little-endian */ #endif #if BYTE_ORDER <= 0 /* little-endian */ { /* * On little-endian machines, we can process properly aligned * data without copying it. */ if (!((data - (const md5_byte_t *)0) & 3)) { /* data are properly aligned */ X = (const md5_word_t *)data; } else { /* not aligned */ memcpy(xbuf, data, 64); X = xbuf; } } #endif #if BYTE_ORDER == 0 else /* dynamic big-endian */ #endif #if BYTE_ORDER >= 0 /* big-endian */ { /* * On big-endian machines, we must arrange the bytes in the * right order. */ const md5_byte_t *xp = data; int i; # if BYTE_ORDER == 0 X = xbuf; /* (dynamic only) */ # else # define xbuf X /* (static only) */ # endif for (i = 0; i < 16; ++i, xp += 4) xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24); } #endif } #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n)))) /* Round 1. */ /* Let [abcd k s i] denote the operation a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */ #define F(x, y, z) (((x) & (y)) | (~(x) & (z))) #define SET(a, b, c, d, k, s, Ti)\ t = a + F(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 0, 7, T1); SET(d, a, b, c, 1, 12, T2); SET(c, d, a, b, 2, 17, T3); SET(b, c, d, a, 3, 22, T4); SET(a, b, c, d, 4, 7, T5); SET(d, a, b, c, 5, 12, T6); SET(c, d, a, b, 6, 17, T7); SET(b, c, d, a, 7, 22, T8); SET(a, b, c, d, 8, 7, T9); SET(d, a, b, c, 9, 12, T10); SET(c, d, a, b, 10, 17, T11); SET(b, c, d, a, 11, 22, T12); SET(a, b, c, d, 12, 7, T13); SET(d, a, b, c, 13, 12, T14); SET(c, d, a, b, 14, 17, T15); SET(b, c, d, a, 15, 22, T16); #undef SET /* Round 2. */ /* Let [abcd k s i] denote the operation a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */ #define G(x, y, z) (((x) & (z)) | ((y) & ~(z))) #define SET(a, b, c, d, k, s, Ti)\ t = a + G(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 1, 5, T17); SET(d, a, b, c, 6, 9, T18); SET(c, d, a, b, 11, 14, T19); SET(b, c, d, a, 0, 20, T20); SET(a, b, c, d, 5, 5, T21); SET(d, a, b, c, 10, 9, T22); SET(c, d, a, b, 15, 14, T23); SET(b, c, d, a, 4, 20, T24); SET(a, b, c, d, 9, 5, T25); SET(d, a, b, c, 14, 9, T26); SET(c, d, a, b, 3, 14, T27); SET(b, c, d, a, 8, 20, T28); SET(a, b, c, d, 13, 5, T29); SET(d, a, b, c, 2, 9, T30); SET(c, d, a, b, 7, 14, T31); SET(b, c, d, a, 12, 20, T32); #undef SET /* Round 3. */ /* Let [abcd k s t] denote the operation a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */ #define H(x, y, z) ((x) ^ (y) ^ (z)) #define SET(a, b, c, d, k, s, Ti)\ t = a + H(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 5, 4, T33); SET(d, a, b, c, 8, 11, T34); SET(c, d, a, b, 11, 16, T35); SET(b, c, d, a, 14, 23, T36); SET(a, b, c, d, 1, 4, T37); SET(d, a, b, c, 4, 11, T38); SET(c, d, a, b, 7, 16, T39); SET(b, c, d, a, 10, 23, T40); SET(a, b, c, d, 13, 4, T41); SET(d, a, b, c, 0, 11, T42); SET(c, d, a, b, 3, 16, T43); SET(b, c, d, a, 6, 23, T44); SET(a, b, c, d, 9, 4, T45); SET(d, a, b, c, 12, 11, T46); SET(c, d, a, b, 15, 16, T47); SET(b, c, d, a, 2, 23, T48); #undef SET /* Round 4. */ /* Let [abcd k s t] denote the operation a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */ #define I(x, y, z) ((y) ^ ((x) | ~(z))) #define SET(a, b, c, d, k, s, Ti)\ t = a + I(b,c,d) + X[k] + Ti;\ a = ROTATE_LEFT(t, s) + b /* Do the following 16 operations. */ SET(a, b, c, d, 0, 6, T49); SET(d, a, b, c, 7, 10, T50); SET(c, d, a, b, 14, 15, T51); SET(b, c, d, a, 5, 21, T52); SET(a, b, c, d, 12, 6, T53); SET(d, a, b, c, 3, 10, T54); SET(c, d, a, b, 10, 15, T55); SET(b, c, d, a, 1, 21, T56); SET(a, b, c, d, 8, 6, T57); SET(d, a, b, c, 15, 10, T58); SET(c, d, a, b, 6, 15, T59); SET(b, c, d, a, 13, 21, T60); SET(a, b, c, d, 4, 6, T61); SET(d, a, b, c, 11, 10, T62); SET(c, d, a, b, 2, 15, T63); SET(b, c, d, a, 9, 21, T64); #undef SET /* Then perform the following additions. (That is increment each of the four registers by the value it had before this block was started.) */ pms->abcd[0] += a; pms->abcd[1] += b; pms->abcd[2] += c; pms->abcd[3] += d; } void md5_init(md5_state_t *pms) { pms->count[0] = pms->count[1] = 0; pms->abcd[0] = 0x67452301; pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476; pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301; pms->abcd[3] = 0x10325476; } void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes) { const md5_byte_t *p = data; int left = nbytes; int offset = (pms->count[0] >> 3) & 63; md5_word_t nbits = (md5_word_t)(nbytes << 3); if (nbytes <= 0) return; /* Update the message length. */ pms->count[1] += nbytes >> 29; pms->count[0] += nbits; if (pms->count[0] < nbits) pms->count[1]++; /* Process an initial partial block. */ if (offset) { int copy = (offset + nbytes > 64 ? 64 - offset : nbytes); memcpy(pms->buf + offset, p, copy); if (offset + copy < 64) return; p += copy; left -= copy; md5_process(pms, pms->buf); } /* Process full blocks. */ for (; left >= 64; p += 64, left -= 64) md5_process(pms, p); /* Process a final partial block. */ if (left) memcpy(pms->buf, p, left); } void md5_finish(md5_state_t *pms, md5_byte_t digest[16]) { static const md5_byte_t pad[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; md5_byte_t data[8]; int i; /* Save the length before padding. */ for (i = 0; i < 8; ++i) data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3)); /* Pad to 56 bytes mod 64. */ md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1); /* Append the length. */ md5_append(pms, data, 8); for (i = 0; i < 16; ++i) digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3)); } springlobby-0.169/src/utils/md5.h0000600000176000000410000000650012105760300020205 0ustar buildbotwww-data00000000000000/* Copyright (C) 1999, 2002 Aladdin Enterprises. All rights reserved. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. L. Peter Deutsch ghost@aladdin.com */ /* $Id: md5.h,v 1.4 2002/04/13 19:20:28 lpd Exp $ */ /* Independent implementation of MD5 (RFC 1321). This code implements the MD5 Algorithm defined in RFC 1321, whose text is available at http://www.ietf.org/rfc/rfc1321.txt The code is derived from the text of the RFC, including the test suite (section A.5) but excluding the rest of Appendix A. It does not include any code or documentation that is identified in the RFC as being copyrighted. The original and principal author of md5.h is L. Peter Deutsch . Other authors are noted in the change history that follows (in reverse chronological order): 2002-04-13 lpd Removed support for non-ANSI compilers; removed references to Ghostscript; clarified derivation from RFC 1321; now handles byte order either statically or dynamically. 1999-11-04 lpd Edited comments slightly for automatic TOC extraction. 1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5); added conditionalization for C++ compilation from Martin Purschke . 1999-05-03 lpd Original version. */ #ifndef md5_INCLUDED # define md5_INCLUDED /* * This package supports both compile-time and run-time determination of CPU * byte order. If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is * defined as non-zero, the code will be compiled to run only on big-endian * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to * run on either big- or little-endian CPUs, but will run slightly less * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined. */ typedef unsigned char md5_byte_t; /* 8-bit byte */ typedef unsigned int md5_word_t; /* 32-bit word */ /* Define the state of the MD5 Algorithm. */ typedef struct md5_state_s { md5_word_t count[2]; /* message length in bits, lsw first */ md5_word_t abcd[4]; /* digest buffer */ md5_byte_t buf[64]; /* accumulate block */ } md5_state_t; #ifdef __cplusplus extern "C" { #endif /* Initialize the algorithm. */ void md5_init(md5_state_t *pms); /* Append a string to the message. */ void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes); /* Finish the message and return the digest. */ void md5_finish(md5_state_t *pms, md5_byte_t digest[16]); #ifdef __cplusplus } /* end extern "C" */ #endif #endif /* md5_INCLUDED */ springlobby-0.169/src/utils/misc.cpp0000600000176000000410000001037512105760300021013 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include "misc.h" #include #include "../settings.h" #include #include #include #include #include #include #include #include "curlhelper.h" double LevenshteinDistance(wxString s, wxString t) { s.MakeLower(); // case insensitive edit distance t.MakeLower(); const int m = s.length(), n = t.length(), _w = m + 1; std::vector _d((m + 1) * (n + 1)); #define D(x, y) _d[(y) * _w + (x)] for (int i = 0; i <= m; ++i) D(i,0) = i; for (int j = 0; j <= n; ++j) D(0,j) = j; for (int i = 1; i <= m; ++i) { for (int j = 1; j <= n; ++j) { const int cost = (s[i - 1] != t[j - 1]); D(i,j) = LSL::Util::Min(D(i-1,j) + 1, // deletion D(i,j-1) + 1, // insertion D(i-1,j-1) + cost); // substitution } } double d = (double) D(m,n) / std::max(m, n); wxLogMessage( _T("LevenshteinDistance('%s', '%s') = %g"), s.c_str(), t.c_str(), d ); return d; #undef D } wxString GetBestMatch(const wxArrayString& a, const wxString& s, double* distance ) { const unsigned int count = a.GetCount(); double minDistance = 1.0; int minDistanceIndex = -1; for (unsigned int i = 0; i < count; ++i) { const double distance_ = LevenshteinDistance(a[i], s); if (distance_ < minDistance) { minDistance = distance_; minDistanceIndex = i; } } if (distance != NULL) *distance = minDistance; if (minDistanceIndex == -1) return _T(""); return a[minDistanceIndex]; } wxString Paste2Pastebin( const wxString& message ) { #ifndef SL_QT_MODE #ifndef __WXMAC__ wxStringOutputStream response; wxStringOutputStream rheader; CURL *curl_handle; curl_handle = curl_easy_init(); struct curl_slist* m_pHeaders = NULL; struct curl_httppost* m_pPostHead = NULL; struct curl_httppost* m_pPostTail = NULL; static const char* url = "http://paste.springfiles.com/api/create"; // these header lines will overwrite/add to cURL defaults m_pHeaders = curl_slist_append(m_pHeaders, "Expect:") ; //we need to keep these buffers around for curl op duration wxCharBuffer message_buffer = message.mb_str(); wxCharBuffer nick_buffer = sett().GetServerAccountNick( sett().GetDefaultServer() ).mb_str(); curl_formadd(&m_pPostHead, &m_pPostTail, CURLFORM_COPYNAME, "text", CURLFORM_COPYCONTENTS, (const char*)message_buffer, CURLFORM_END); curl_formadd(&m_pPostHead, &m_pPostTail, CURLFORM_COPYNAME, "private", CURLFORM_COPYCONTENTS, "1", CURLFORM_END); curl_formadd(&m_pPostHead, &m_pPostTail, CURLFORM_COPYNAME, "name", CURLFORM_COPYCONTENTS, (const char*)nick_buffer, CURLFORM_END); curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, m_pHeaders); curl_easy_setopt(curl_handle, CURLOPT_URL, url ); // curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, wxcurl_stream_write); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&response); curl_easy_setopt(curl_handle, CURLOPT_WRITEHEADER, (void *)&rheader); curl_easy_setopt(curl_handle, CURLOPT_POST, TRUE); curl_easy_setopt(curl_handle, CURLOPT_HTTPPOST, m_pPostHead); CURLcode ret = curl_easy_perform(curl_handle); wxLogError( rheader.GetString() ); /* cleanup curl stuff */ curl_easy_cleanup(curl_handle); curl_formfree(m_pPostHead); if(ret == CURLE_OK) return response.GetString(); else #endif #endif return wxEmptyString; } /** Try to create the named directory, if it doesn't exist. * * @param name Path to directory that should exist or be created. * * @param perm Value of @p perm parameter for wxFileName::Mkdir. * * @param flags Value of @p flags parameter for wxFileName::Mkdir. * * @return @c true if the directory already exists, or the return * value of wxFileName::Mkdir if it does not. */ bool tryCreateDirectory( const wxString& name, int perm, int flags ) { if ( wxFileName::DirExists( name ) ) return true; else return wxFileName::Mkdir( name, perm, flags ); } springlobby-0.169/src/utils/misc.h0000600000176000000410000000354312105760300020457 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_MISC_H #define SPRINGLOBBY_HEADERGUARD_MISC_H class wxArrayString; class wxString; /** * @brief Computes Levenshtein distance (edit distance) between two strings. * @return the Levenshtein distance normalized by the longest string's length. * @note Source: http://en.wikipedia.org/wiki/Levenshtein_distance */ double LevenshteinDistance(wxString s, wxString t); /** * @brief Gets the closest match for s in a, using LevenshteinDistance. * @param distance If not NULL, *distance is set to the edit distance from s to the return value. */ wxString GetBestMatch(const wxArrayString& a, const wxString& s, double* distance = 0 ); wxString Paste2Pastebin( const wxString& message ); /** Try to create the named directory, if it doesn't exist. * * @param name Path to directory that should exist or be created * * @param perm Value of @p perm parameter for wxFileName::Mkdir. * * @param flags Value of @p flags parameter for wxFileName::Mkdir. * * @return @c true if the directory already exists, or the return * value of wxFileName::Mkdir if it does not. */ bool tryCreateDirectory( const wxString& name, int perm = 0775, int flags = 0 ); #endif // SPRINGLOBBY_HEADERGUARD_MISC_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/mixins.hh0000600000176000000410000000152212105760300021176 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_MIXINS_HH #define SPRINGLOBBY_HEADERGUARD_MIXINS_HH #include namespace SL { typedef boost::noncopyable NonCopyable; } #endif // SPRINGLOBBY_HEADERGUARD_MIXINS_HH /** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/networkevents.cpp0000600000176000000410000000042112105760300022765 0ustar buildbotwww-data00000000000000#include "networkevents.h" namespace NetworkEvents { static std::map< NetworkEventsTypes, EventSender > NetworkEvents; EventSender &GetNetworkEventSender( NetworkEventsTypes cmd ) { return NetworkEvents[cmd]; } } springlobby-0.169/src/utils/networkevents.h0000600000176000000410000000062612105760300022441 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_NETWORKEVENTS_H #define SPRINGLOBBY_HEADERGUARD_NETWORKEVENTS_H #include "events.h" #include #include namespace NetworkEvents { typedef wxString NetworkEventsTypes; typedef wxArrayString NetworkEventData; EventSender &GetNetworkEventSender( NetworkEventsTypes cmd ); } #endif // SPRINGLOBBY_HEADERGUARD_NETWORKEVENTS_H springlobby-0.169/src/utils/pathlistfactory.cpp0000600000176000000410000000573612105760300023305 0ustar buildbotwww-data00000000000000#include "pathlistfactory.h" #include #include "../defines.h" //to get HAVEWX?? #include "platform.h" #ifdef __WXMSW__ #include #include #endif #include #include #include const wxChar sep = wxFileName::GetPathSeparator(); const wxString sepstring = wxString(sep); wxPathList PathlistFactory::fromSinglePath(wxString path) { wxPathList pl; pl.Add( path ); return pl; } wxPathList PathlistFactory::ConfigFileSearchPaths() { wxPathList pl; pl.AddEnvList( _T( "%ProgramFiles%" ) ); pl.AddEnvList( _T( "LDPATH" ) ); pl.AddEnvList( _T( "LD_LIBRARY_PATH" ) ); pl.Add( _T( "/usr/local/lib/spring" ) ); pl.Add( _T( "/usr/local/lib64" ) ); pl.Add( _T( "/usr/local/games" ) ); pl.Add( _T( "/usr/local/games/lib" ) ); pl.Add( _T( "/usr/local/lib" ) ); pl.Add( _T( "/usr/lib64" ) ); pl.Add( _T( "/usr/lib" ) ); pl.Add( _T( "/usr/lib/spring" ) ); pl.Add( _T( "/usr/games" ) ); pl.Add( _T( "/usr/games/lib64" ) ); pl.Add( _T( "/usr/games/lib" ) ); pl = AdditionalSearchPaths( pl ); return pl; } wxPathList PathlistFactory::UikeysLocations() { wxPathList pl; pl.AddEnvList( _T("%ProgramFiles%") ); pl.AddEnvList( _T("XDG_DATA_DIRS") ); pl = AdditionalSearchPaths( pl ); return pl; } wxPathList PathlistFactory::AdditionalSearchPaths(wxPathList &pl) { wxPathList ret; wxStandardPathsBase& sp = wxStandardPathsBase::Get(); pl.Add( wxFileName::GetCwd() ); pl.Add( sp.GetExecutablePath().BeforeLast( sep ) ); pl.Add( wxFileName::GetHomeDir() ); #ifndef SL_QT_MODE pl.Add( sp.GetUserDataDir().BeforeLast( sep ) ); pl.Add( sp.GetDataDir().BeforeLast( sep ) ); pl.Add( sp.GetResourcesDir().BeforeLast( sep ) ); #endif pl.Add( wxGetOSDirectory() ); #ifdef __WXMSW__ pl.Add( sp.GetDocumentsDir() + sepstring + wxT("My Games") + sepstring + wxT("Spring") ); //maybe add more here like: //Appdata + \Spring //Mydocs + \Spring //http://projects.springlobby.info/issues/1530 wxRegKey base( _T("HKLM\\Software\\Spring") ); wxString usync_keyval = GetRegkeyVal( base, _T("SpringEngineHelper"), wxString() ); if ( usync_keyval != wxEmptyString ) { pl.Add( usync_keyval.BeforeLast( sep ) ); } wxString binary_keyval = GetRegkeyVal( base, _T("SpringEngine"), wxString() ); if ( binary_keyval != wxEmptyString ) { pl.Add( binary_keyval.BeforeLast( sep ) ); } #endif for ( size_t i = 0; i < pl.GetCount(); i++ ) { wxString path = pl[i]; if ( !path.EndsWith( sepstring ) ) path += sepstring; ret.Add( path ); ret.Add( path + _T( "Spring" ) + sepstring ); ret.Add( path + _T( "spring" ) + sepstring ); ret.Add( path + _T( "games" ) + sepstring + _T( "Spring" ) + sepstring ); ret.Add( path + _T( "games" ) + sepstring + _T( "spring" ) + sepstring ); } return ret; } springlobby-0.169/src/utils/pathlistfactory.h0000600000176000000410000000203712105760300022741 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_PATHLISTFACTORY_H #define SPRINGLOBBY_PATHLISTFACTORY_H class wxString; class wxPathList; class PathlistFactory { public: static wxPathList fromSinglePath( wxString path ); static wxPathList ConfigFileSearchPaths(); static wxPathList UikeysLocations(); static wxPathList AdditionalSearchPaths( wxPathList& pl ); }; #endif // SPRINGLOBBY_PATHLISTFACTORY_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/platform.cpp0000600000176000000410000003063012105760300021700 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include "platform.h" #include #include #include #include #include #include #include #include #ifdef __WXMSW__ #include #include #endif #include #include #include "conversion.h" #include "../updater/versionchecker.h" #include "customdialogs.h" #include #include "../crashreport.h" #ifdef SL_QT_MODE #include #include #endif #include "pathlistfactory.h" //!This is only ever used for unitsync and on daftalx notice it should actually be .dylib (wx returns .bundle ) wxString GetLibExtension() { #ifdef __APPLE__ return wxString(".dylib"); #endif return wxDynamicLibrary::CanonicalizeName(_T(""), wxDL_MODULE); } //! @brief Initializes the logging functions. ///initializes logging in an hidden stream and std::cout/gui messages wxLogWindow* InitializeLoggingTargets( wxFrame* parent, bool console, const wxString& logfilepath, bool showgui, bool /*logcrash*/, int verbosity, wxLogChain* logChain ) { wxLogWindow* loggerwin = 0; #if wxUSE_STD_IOSTREAM if ( console && verbosity != 0 ) { ///std::cout logging logChain = new wxLogChain( new wxLogStream( &std::cout ) ); } #else if ( console && verbosity != 0 ) { ///std::cerr logging logChain = new wxLogChain( new wxLogStderr( 0 ) ); } #endif if ( logfilepath.size() != 0 && verbosity != 0 ) { FILE* logfile = fopen(C_STRING(logfilepath), "w"); // even if it returns null, wxLogStderr will switch to stderr logging, so it's fine logChain = new wxLogChain( new wxLogStderr( logfile ) ); } if ( showgui && verbosity != 0 ) { ///gui window logging loggerwin = new wxLogWindow( (wxWindow*) parent, IdentityString( _("%s error console") ), showgui ); logChain = new wxLogChain( loggerwin ); } #if wxUSE_DEBUGREPORT && defined(ENABLE_DEBUG_REPORT) && wxUSE_STD_IOSTREAM ///hidden stream logging for crash reports wxLog *loggercrash = new wxLogStream( &CrashReport::instance().crashlog ); logChain = new wxLogChain( loggercrash ); // logCrashChain->SetLogLevel( wxLOG_Trace ); // logCrashChain->SetVerbose( true ); #endif if ( !( console || showgui ) || verbosity == 0 ){ new wxLogNull; return loggerwin; } if ( logChain ) { switch (verbosity) { case 1: logChain->SetLogLevel( wxLOG_FatalError ); break; case 2: logChain->SetLogLevel( wxLOG_Error ); break; case 3: logChain->SetLogLevel( wxLOG_Warning ); break; case 4: logChain->SetLogLevel( wxLOG_Message ); break; case 5: logChain->SetLogLevel( wxLOG_Trace ); logChain->SetVerbose( true ); break; default://meaning loglevel < 0 or > 5 , == 0 is handled seperately logChain->SetLogLevel( wxLOG_Warning ); break; } } return loggerwin; } wxString GetExecutableFolder() { return wxStandardPathsBase::Get().GetExecutablePath().BeforeLast( wxFileName::GetPathSeparator() ); } // ------------------------------------------------------------------------------------------------------------------------ /// /// Read out Host's CPU Speed /// /// \return Sum of each CPU's Speed of this Computer /// /// // ------------------------------------------------------------------------------------------------------------------------ wxString GetHostCPUSpeed() { int cpu_count = 0; int max_cpu_speed=0; #ifdef __WXMSW__ //afaik there is no way to determine the number of sub keys for a given key //so i'll hardcode some value here and hope bd doesn't hit me with a stick :P for (int i = 0; i< 16; ++i) { wxRegKey programreg( _T("HKEY_LOCAL_MACHINE\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\")+ wxFormat(_T("%d") ) % i); long tmp; if ( programreg.QueryValue( _T("~MHz"), &tmp ) ) { if ( max_cpu_speed < tmp ) max_cpu_speed = tmp; cpu_count++; } } #else wxTextFile file( _T("/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq") ); if ( file.Exists() ) { file.Open(); wxString line = file.GetFirstLine(); cpu_count++; int tmp = s2l( line ); tmp /= 1000; if ( max_cpu_speed < tmp ) max_cpu_speed = tmp; } else { wxTextFile file( _T("/proc/cpuinfo") ); if ( file.Exists() ) { file.Open(); for ( wxString line = file.GetFirstLine(); !file.Eof(); line = file.GetNextLine() ) { if ( line.Left(7) == _T("cpu MHz") ) { line = line.AfterLast( _T(' ') ).BeforeLast( _T('.') ); cpu_count++; int tmp = s2l( line ); if ( max_cpu_speed < tmp ) max_cpu_speed = tmp; } } } } #endif return TowxString( LSL::Util::Clamp( max_cpu_speed,0,max_cpu_speed ) ); } // copied from http://wxforum.shadonet.com/viewtopic.php?t=2080 //slightly modified bool CopyDir( wxString from, wxString to, bool overwrite ) { wxString sep = wxFileName::GetPathSeparator(); // append a slash if there is not one (for easier parsing) // because who knows what people will pass to the function. if ( !to.EndsWith( sep ) ) { to += sep; } // for both dirs if ( !from.EndsWith( sep ) ) { from += sep; } // first make sure that the source dir exists if(!wxDir::Exists(from)) { wxLogError(from + _T(" does not exist. Can not copy directory.") ); return false; } if (!wxDirExists(to)) wxMkdir(to); wxDir dir(from); wxString filename; bool bla = dir.GetFirst(&filename); if (bla){ do { if (wxDirExists(from + filename) ) { wxMkdir(to + filename); CopyDir(from + filename, to + filename, overwrite); } else{ wxCopyFile(from + filename, to + filename, overwrite); } } while (dir.GetNext(&filename) ); } return true; } bool CopyDirWithFilebackupRename( wxString from, wxString to, bool overwrite ) { wxString sep = wxFileName::GetPathSeparator(); // append a slash if there is not one (for easier parsing) // because who knows what people will pass to the function. if ( !to.EndsWith( sep ) ) { to += sep; } // for both dirs if ( !from.EndsWith( sep ) ) { from += sep; } // first make sure that the source dir exists if(!wxDir::Exists(from)) { wxLogError(from + _T(" does not exist. Can not copy directory.") ); return false; } if (!wxDirExists(to)) wxMkdir(to); wxDir dir(from); wxString filename; bool bla = dir.GetFirst(&filename); if (bla){ do { if (wxDirExists(from + filename) ) { wxMkdir(to + filename); CopyDir(from + filename, to + filename, overwrite); } else{ //if files exists move it to backup, this way we can use this func on windows to replace 'active' files if ( wxFileExists( to + filename ) ) { //delete prev backup if ( wxFileExists( to + filename + _T(".old") ) ) { wxRemoveFile( to + filename + _T(".old") ); } //make backup if ( !wxRenameFile( to + filename, to + filename + _T(".old") ) ) { wxLogError( _T("could not rename %s, copydir aborted"), (to + filename).c_str() ); return false; } } //do the actual copy if ( !wxCopyFile(from + filename, to + filename, overwrite) ) { wxLogError( _T("could not copy %s to %s, copydir aborted"), (from + filename).c_str(), (to + filename).c_str() ); return false; } } } while (dir.GetNext(&filename) ); } return true; } bool IsUACenabled() { #ifdef __WXMSW__ wxRegKey UACpath( _T("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System") ); // check if UAC is on, skip dialog if not if( UACpath.Exists() ) { long value; if( UACpath.QueryValue( _T("EnableLUA"), &value ) ) // reg key not present -> not vista { if( value != 0 ) { return true; } } } #endif return false; } #ifdef __WXMSW__ #include #include #include bool WinExecuteAdmin( const wxString& command, const wxString& params ) { SHELLEXECUTEINFO shExecInfo; shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); shExecInfo.fMask = 0; shExecInfo.hwnd = NULL; //on XP this would open the real runas dialog, which apparently is its own wonder //by default it has a checkbox enabled which makes sl unable to write to the working dir... if ( IsUACenabled() ) { if ( IsPreVistaWindows() ) shExecInfo.lpVerb = _T("open"); else shExecInfo.lpVerb = _T("runas"); #ifdef _MSC_VER //some strange compiler stupidity going on here shExecInfo.lpFile = command.c_str(); shExecInfo.lpParameters = params.c_str(); #else shExecInfo.lpFile = command.wc_str(); shExecInfo.lpParameters = params.wc_str(); #endif shExecInfo.lpDirectory = NULL; shExecInfo.hInstApp = NULL; } return ShellExecuteEx(&shExecInfo); } bool WinExecute( const wxString& command, const wxString& params ) { SHELLEXECUTEINFO shExecInfo; shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); shExecInfo.lpVerb = _T("open"); shExecInfo.fMask = 0; shExecInfo.hwnd = NULL; #ifdef _MSC_VER //some strange compiler stupidity going on here shExecInfo.lpFile = command.c_str(); shExecInfo.lpParameters = params.c_str(); #else shExecInfo.lpFile = command.wc_str(); shExecInfo.lpParameters = params.wc_str(); #endif shExecInfo.lpDirectory = NULL; shExecInfo.hInstApp = NULL; return ShellExecuteEx(&shExecInfo); } bool IsPreVistaWindows() { return wxPlatformInfo().GetOSMajorVersion() < 6; } #endif CwdGuard::CwdGuard( const wxString& new_cwd ) : m_old_cwd( wxGetCwd() ) { wxSetWorkingDirectory( new_cwd ); } CwdGuard::~CwdGuard() { wxSetWorkingDirectory( m_old_cwd ); } PwdGuard::PwdGuard( ) : m_old_pwd( wxGetCwd() ) {} PwdGuard::~PwdGuard() { wxSetWorkingDirectory( m_old_pwd ); } wxString GetAppName( const bool lowerCase ) { #ifdef SL_QT_MODE wxString name = TowxString( QCoreApplication::applicationName() ); #else wxString name = wxTheApp->GetAppName();//this would segfault in qt mode #endif if ( lowerCase ) name.MakeLower(); return name; } wxString IdentityString(const wxString& format, bool lowerCase ) { return wxFormat( format ) % GetAppName( lowerCase ) ; } //! this follows the wx implementation to the letter, just substituting our own app name function wxString AppendAppName(const wxString& dir) { wxString subdir(dir); // empty string indicates that an error has occurred, don't touch it then if ( !subdir.empty() ) { const wxString appname = GetAppName(); if ( !appname.empty() ) { const wxChar ch = *(subdir.end() - 1); if ( !wxFileName::IsPathSeparator(ch) && ch != _T('.') ) subdir += wxFileName::GetPathSeparator(); subdir += appname; } } return subdir; } wxString GetUserDataDir() { return AppendAppName( wxStandardPaths::Get().GetUserConfigDir() ); } wxString GetConfigfileDir() { #ifdef __WXMSW__ return GetUserDataDir(); #else return wxFormat( _T("%s/.%s") ) % wxStandardPaths::Get().GetUserConfigDir() % GetAppName(true); #endif //__WXMSW__ } wxString GetCustomizedEngineConfigFilePath() { const wxString path = GetConfigfileDir() + wxFileName::GetPathSeparator() + _T("engine.cfg"); return path; } //! copy uikeys.txt void CopyUikeys( wxString currentDatadir ) { wxString uikeyslocation = PathlistFactory::UikeysLocations().FindValidPath( _T("uikeys.txt") ); if ( !uikeyslocation.IsEmpty() ) { wxCopyFile( uikeyslocation, currentDatadir + wxFileName::GetPathSeparator() + _T("uikeys.txt"), false ); } } springlobby-0.169/src/utils/platform.h0000600000176000000410000000627512105760300021355 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_PLATFORM_H #define SPRINGLOBBY_HEADERGUARD_PLATFORM_H class wxLogWindow; class wxFrame; class wxString; class wxLogChain; #include /** let origin be /path/to/some/dir and destination /some/other/path this will copy dir (and everything below that recursively to /some/other/path/dir \return true if successful */ bool CopyDir( wxString origin, wxString destination, bool overwrite = true); bool CopyDirWithFilebackupRename( wxString origin, wxString destination, bool overwrite = true); /** \brief on vista execute command with admin temp eleveation, on earlier win it acts as "normal" shell execute **/ bool WinExecuteAdmin( const wxString& command, const wxString& params ); /** \brief "normal" shell execute **/ bool WinExecute( const wxString& command, const wxString& params ); //! returns false on !win, checks for regkey on win bool IsUACenabled(); /** \brief initialize logchain \return Logwindow pointer (may be 0), useful if parent frame should be created _after_ logging is set up **/ wxLogWindow* InitializeLoggingTargets( wxFrame* parent, bool console, const wxString& logfilepath, bool showgui, bool logcrash, int verbosity, wxLogChain* logChain ); wxString GetExecutableFolder(); wxString GetLibExtension(); wxString GetHostCPUSpeed(); //! set new cwd in ctor, reset to old in dtor class CwdGuard { wxString m_old_cwd; public: CwdGuard( const wxString& new_cwd ); ~CwdGuard(); }; //! remember pwd in ctor and reset in dtor class PwdGuard { wxString m_old_pwd; public: PwdGuard( ); ~PwdGuard(); }; #ifdef __WXMSW__ bool IsPreVistaWindows(); #endif //! simply return wxApp::GetAppName with letter lowercased on demand wxString GetAppName( const bool lowerCase = false ); wxString GetConfigfileDir(); wxString GetUserDataDir(); /** \in Format string with a single %s \out wxString with %s replaced with GetAppName() **/ wxString IdentityString(const wxString& format, bool lowerCase = false ); wxString GetCustomizedEngineConfigFilePath(); #ifdef __WXMSW__ #include template < typename T > static T GetRegkeyVal( const wxRegKey& reg, const wxString& name, const T& def ) { T val = def; if ( reg.QueryValue( name, &val ) ) return val; else return def; } template < > wxString GetRegkeyVal( const wxRegKey& reg, const wxString& name, const wxString& def ) { wxString val = def; if ( reg.QueryValue( name, val ) ) return val; else return def; } #endif //! void CopyUikeys(wxString currentDatadir); #endif // SPRINGLOBBY_HEADERGUARD_PLATFORM_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/sltipwin.cpp0000600000176000000410000000063112105760300021723 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include "sltipwin.h" #if wxUSE_TIPWINDOW BEGIN_EVENT_TABLE(SLTipWindow, wxTipWindow) EVT_MOUSEWHEEL(SLTipWindow::Cancel) END_EVENT_TABLE() SLTipWindow::SLTipWindow(wxWindow *parent, const wxString &text) : wxTipWindow(parent,text) {} void SLTipWindow::Cancel(wxMouseEvent& /*unused*/) { wxTipWindow::Close(); } #endif springlobby-0.169/src/utils/sltipwin.h0000600000176000000410000000214612105760300021373 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_UTIL_TIPWIN_H #define SPRINGLOBBY_HEADERGUARD_UTIL_TIPWIN_H #include #if wxUSE_TIPWINDOW #include //! A wxTipWindow that gets canceled on mousewheel events class SLTipWindow : public wxTipWindow{ public: SLTipWindow(wxWindow *parent, const wxString &text); void Cancel(wxMouseEvent& event); DECLARE_EVENT_TABLE() }; #endif #endif // SPRINGLOBBY_HEADERGUARD_UTIL_TIPWIN_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/stack.cpp0000600000176000000410000003044712105760300021167 0ustar buildbotwww-data00000000000000// Copyright 2007 Edd Dawson. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // http://www.mr-edd.co.uk/?p=66#more-66 #include "stack.h" #if defined(ENABLE_DEBUG_REPORT) && defined(__WXMSW__) #include #include #include #include #include #if defined(_WIN32) #include #include #if defined(__MINGW32__) #include "bfd.h" // link against libbfd and libiberty #include // link against psapi #include #endif #elif defined(__GNUC__) #include #include #endif namespace { #if defined(__GNUC__) std::string demangle(const char *name) { int status = 0; char *d = 0; std::string ret = name; try { if ((d = abi::__cxa_demangle(name, 0, 0, &status))) ret = d; } catch(...) { } free(d); return ret; } #endif #if defined(_WIN32) class uncopyable { public: uncopyable() { } private: uncopyable(const uncopyable &); // remains undefined uncopyable &operator= (const uncopyable &); // remains undefined }; #if defined(__MINGW32__) class bfd_context : uncopyable { private: struct find_data { std::string func; asymbol **symbol_table; bfd_vma counter; }; public: bfd_context() : abfd_(0), sec_(0), symbol_table_(0) { char procname[MAX_PATH]; GetModuleFileNameEx(GetCurrentProcess(), NULL, procname, sizeof procname); bfd_init(); abfd_ = bfd_openr(procname, 0); if (!abfd_) throw dbg::stack_error("Failed to parse object data for the executable"); char **formats = 0; bool b1 = bfd_check_format(abfd_, bfd_object); bool b2 = bfd_check_format_matches(abfd_, bfd_object, &formats); bool b3 = bfd_get_file_flags(abfd_) & HAS_SYMS; if (!(b1 && b2 && b3)) { bfd_close(abfd_); free(formats); throw dbg::stack_error("Failed to parse object data for the executable"); } free(formats); // Load symbol table unsigned dummy = 0; if (bfd_read_minisymbols(abfd_, FALSE, (void **)&symbol_table_, &dummy) == 0 && bfd_read_minisymbols(abfd_, TRUE, (void **)&symbol_table_, &dummy) < 0) { free(symbol_table_); bfd_close(abfd_); throw dbg::stack_error("Failed to parse object data for the executable"); } } ~bfd_context() { free(symbol_table_); bfd_close(abfd_); } std::string get_function_name(DWORD offset) { find_data data; data.symbol_table = symbol_table_; data.counter = offset; bfd_map_over_sections(abfd_, &find_function_name_in_section, &data); return data.func; } private: static void find_function_name_in_section(bfd *abfd, asection *sec, void *opaque_data) { assert(sec); assert(opaque_data); find_data &data = *static_cast(opaque_data); if (!data.func.empty()) return; // already found it if (!(bfd_get_section_flags(abfd, sec) & SEC_ALLOC)) return; bfd_vma vma = bfd_get_section_vma(abfd, sec); if (data.counter < vma || vma + bfd_get_section_size(sec) <= data.counter) return; const char *func = 0; const char *file = 0; unsigned line = 0; if (bfd_find_nearest_line(abfd, sec, data.symbol_table, data.counter - vma, &file, &func, &line) && func) data.func = demangle(func); } private: bfd *abfd_; asection *sec_; asymbol **symbol_table_; }; #endif // __MINGW32__ class auto_cast_function_ptr { public: template explicit auto_cast_function_ptr(FuncPtr f) : fptr_(reinterpret_cast(f)) { } template operator FuncPtr() const { return reinterpret_cast(fptr_); } private: void (*fptr_)(void); }; class windows_dll : uncopyable { public: explicit windows_dll(const std::string &libname) : name_(libname), lib_(LoadLibrary(name_.c_str())) { if (!lib_) throw dbg::stack_error("Failed to load dll " + name_); } ~windows_dll() { FreeLibrary(lib_); } const std::string &name() const { return name_; } auto_cast_function_ptr function(const std::string &func_name) const { FARPROC proc = GetProcAddress(lib_, func_name.c_str()); if (!proc) throw dbg::stack_error("failed to load function " + func_name + " from library " + name_); return auto_cast_function_ptr(proc); } private: std::string name_; HMODULE lib_; }; class symbol_context : uncopyable { public: symbol_context() { SymInitialize(GetCurrentProcess(), 0, true); } ~symbol_context() { SymCleanup(GetCurrentProcess()); } }; class mutex : uncopyable { public: mutex() { InitializeCriticalSection(&cs_); } ~mutex() { DeleteCriticalSection(&cs_); } void lock() { EnterCriticalSection(&cs_); } void unlock() { LeaveCriticalSection(&cs_); } private: CRITICAL_SECTION cs_; }; class scoped_lock : uncopyable { public: scoped_lock(mutex &m) : m_(m) { m_.lock(); } ~scoped_lock() { m_.unlock(); } private: mutex &m_; }; mutex fill_frames_mtx_; void fill_frames(std::list &frames, dbg::stack::depth_type limit) { scoped_lock lk(fill_frames_mtx_); #if defined(__MINGW32__) static bfd_context bfdc; #endif symbol_context sc; STACKFRAME frame; memset(&frame, 0, sizeof frame); CONTEXT context; memset(&context, 0, sizeof(CONTEXT)); context.ContextFlags = CONTEXT_FULL; windows_dll kernel32("kernel32.dll"); void (WINAPI *RtlCaptureContext_) (CONTEXT*) = kernel32.function("RtlCaptureContext"); RtlCaptureContext_(&context); frame.AddrPC.Offset = context.Eip; frame.AddrPC.Mode = AddrModeFlat; frame.AddrStack.Offset = context.Esp; frame.AddrStack.Mode = AddrModeFlat; frame.AddrFrame.Offset = context.Ebp; frame.AddrFrame.Mode = AddrModeFlat; HANDLE process = GetCurrentProcess(); HANDLE thread = GetCurrentThread(); dbg::stack::depth_type skip = 0; bool has_limit = limit != 0; char symbol_buffer[sizeof(IMAGEHLP_SYMBOL) + 255]; char module_name_raw[MAX_PATH]; while(StackWalk(IMAGE_FILE_MACHINE_I386, process, thread, &frame, &context, 0, SymFunctionTableAccess, SymGetModuleBase, 0 )) { if (skip < 1) { ++skip; continue; } if (has_limit && limit-- == 0) break; IMAGEHLP_SYMBOL *symbol = reinterpret_cast(symbol_buffer); symbol->SizeOfStruct = (sizeof *symbol) + 255; symbol->MaxNameLength = 254; DWORD module_base = SymGetModuleBase(process, frame.AddrPC.Offset); std::string module_name = "[unknown module]"; if( module_base && GetModuleFileName(reinterpret_cast(module_base), module_name_raw, MAX_PATH)) module_name = module_name_raw; #if defined(__MINGW32__) std::string func = bfdc.get_function_name(frame.AddrPC.Offset); if (func.empty()) { DWORD displacement = 0; // dummy variable BOOL got_symbol = SymGetSymFromAddr(process, frame.AddrPC.Offset, &displacement, symbol); func = got_symbol ? symbol->Name : "[unknown function]"; } #else DWORD displacement = 0; // dummy variable BOOL got_symbol = SymGetSymFromAddr(process, frame.AddrPC.Offset, &displacement, symbol); std::string func = got_symbol ? symbol->Name : "[unknown function]"; #endif dbg::stack_frame f(reinterpret_cast(frame.AddrPC.Offset), func + " in " + module_name); frames.push_back(f); } } #elif defined(__GNUC__) #if defined(__i386__) void fill_frames(std::list &frames, dbg::stack::depth_type limit) { // Based on code found at: // http://www.tlug.org.za/wiki/index.php/Obtaining_a_stack_trace_in_C_upon_SIGSEGV Dl_info info; void **frame = static_cast(__builtin_frame_address(0)); void **bp = static_cast(*frame); void *ip = frame[1]; bool has_limit = limit != 0; dbg::stack::depth_type skip = 0; while(bp && ip && dladdr(ip, &info)) { if (skip < 1) ++skip; else { if (has_limit && limit-- == 0) break; frames.push_back(dbg::stack_frame(ip, demangle(info.dli_sname) + " in " + info.dli_fname)); if(info.dli_sname && !strcmp(info.dli_sname, "main")) break; } ip = bp[1]; bp = static_cast(bp[0]); } } #elif defined(__ppc__) void fill_frames(std::list &frames, dbg::stack::depth_type limit) { // Based on code found at: // http://www.informit.com/articles/article.aspx?p=606582&seqNum=4&rl=1 void *ip = __builtin_return_address(0); void **frame = static_cast(__builtin_frame_address(1)); bool has_limit = limit != 0; Dl_info info; do { if (has_limit && limit-- == 0) break; if (dladdr(ip, &info)) frames.push_back(dbg::stack_frame(ip, demangle(info.dli_sname) + " in " + info.dli_fname)); if (frame && (frame = static_cast(*frame))) ip = *(frame + 2); } while (frame && ip); } #else // GNU, but neither x86 or PPC #error "Sorry but dbg::stack is not supported on this architecture" #endif #else // Unsupported compiler #error "Sorry but dbg::stack is not supported on this compiler" #endif } namespace dbg { stack_error::stack_error(const std::string &what) : what_(what) { } stack_error::~stack_error() throw() { } const char *stack_error::what() const throw() { return what_.c_str(); } stack_frame::stack_frame(const void *instruction, const std::string &function) : instruction_(instruction), function_(function) { } const void *stack_frame::instruction() const { return instruction_; } const std::string &stack_frame::function() const { return function_; } std::ostream &operator<< (std::ostream &out, const stack_frame &frame) { return out << frame.instruction() << ": " << frame.function(); } stack::stack(depth_type limit) { fill_frames(frames_, limit); } stack::const_iterator stack::begin() const { return frames_.begin(); } stack::const_iterator stack::end() const { return frames_.end(); } stack::depth_type stack::depth() const { return frames_.size(); } } // close namespace dbg #endif //#if defined(ENABLE_DEBUG_REPORT) springlobby-0.169/src/utils/stack.h0000600000176000000410000000307612105760300020632 0ustar buildbotwww-data00000000000000// Copyright 2007 Edd Dawson. // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef STACK_HPP_0022_01092007 #define STACK_HPP_0022_01092007 #include #if defined(ENABLE_DEBUG_REPORT) && defined(__WXMSW__) #include #include #include #include namespace dbg { class stack_error : public std::exception { public: stack_error(const std::string &what); ~stack_error() throw(); const char *what() const throw(); private: std::string what_; }; class stack_frame { public: stack_frame(const void *instruction, const std::string &function); const void *instruction() const; const std::string &function() const; private: const void *instruction_; const std::string function_; }; std::ostream &operator<< (std::ostream &out, const stack_frame &frame); class stack { public: typedef std::list::size_type depth_type; typedef std::list::const_iterator const_iterator; stack(depth_type limit = 0); const_iterator begin() const; const_iterator end() const; depth_type depth() const; private: std::list frames_; }; } // close namespace dbg #endif //#if defined(ENABLE_DEBUG_REPORT) #endif // STACK_HPP_0022_01092007 springlobby-0.169/src/utils/stringserializer.cpp0000600000176000000410000000464312105760300023461 0ustar buildbotwww-data00000000000000 #include #include #include "../settings.h" template StringSerializer::StringSerializer() {} template StringSerializer::~StringSerializer() {} /** @brief VectorFromFile * * @todo: document this function */ template std::vector StringSerializer::VectorFromFile(const wxString& filename) { wxString basedir = sett().GetCachePath(); wxTextFile file( basedir + wxFileName::GetPathSeparator() + filename ); if ( !file.Open() ) { return std::vector(); } std::vector vector; wxString line; for ( line = file.GetFirstLine(); !file.Eof(); line = file.GetNextLine() ) { ImpType obj; obj.FromString( line ); vector.push_back( obj ); } //this is the last line ImpType obj; obj.FromString( line ); vector.push_back( obj ); return vector; } /** @brief VectorToFile * * @todo: document this function */ template bool StringSerializer::VectorToFile(const std::vector& vector, const wxString& filename) { wxString basedir = sett().GetCachePath(); wxTextFile file( basedir + wxFileName::GetPathSeparator() + filename ); if ( !file.Open() ) { if ( !file.Create() ) return false; } file.Clear(); for ( typename std::vector::const_iterator it = vector.begin(); it != vector.end(); ++it ) { file.AddLine( it->ToString() ); } return file.Write(); } /** @brief FromFile * * @todo: document this function */ template bool StringSerializer::FromFile(const wxString& filename) { wxString basedir = sett().GetCachePath(); wxTextFile file( basedir + wxFileName::GetPathSeparator() + filename ); if ( !file.Open() ) { return false; } wxString line = file.GetFirstLine(); asImp().FromString( line ); return true; } /** @brief ToFile * * @todo: document this function */ template bool StringSerializer::ToFile(const wxString& filename) { wxString basedir = sett().GetCachePath(); wxTextFile file( basedir + wxFileName::GetPathSeparator() + filename ); if ( !file.Open() ) { if ( !file.Create() ) return false; } file.Clear(); file.AddLine( asImp().ToString() ); return file.Write(); } springlobby-0.169/src/utils/stringserializer.h0000600000176000000410000000423512105760300023123 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_STRINGSERIALIZER_H #define SPRINGLOBBY_HEADERGUARD_STRINGSERIALIZER_H #include "crtpbase.h" #include class wxString; template //! ImpType will need to provide a default constructor class StringSerializer : public CRTPbase { public: StringSerializer(); virtual ~StringSerializer(); /** \brief saves the data member in string representation to filename \param filename will be prepeneded with current cache path \return true on success, false on failure \note file will contain a single line with the string representation **/ bool ToFile( const wxString& filename ); //! companion function, needs to be implemented in ImpType wxString ToString() const; /** \brief loads the data member in string representation to filename \param filename will be prepeneded with current cache path \return true on success, false on failure \note if the file contains more than one string representation/line only the first will be loaded **/ bool FromFile( const wxString& filename ); //! companion function, needs to be implemented in ImpType void FromString( const wxString& ); /** \brief saves a vector of ImpType objects to file \param filename will be prepeneded with current cache path \return true on success, false on failure \note file will contain N lines with each line being a string representation **/ static bool VectorToFile( const std::vector& vector, const wxString& filename ); /** \brief loads the data member in string representation to filename \param filename will be prepeneded with current cache path \return vector of ImpType objects, possibly empty if error occured, otherwise with NumLine max ImpType objetcs **/ static std::vector VectorFromFile( const wxString& filename ); protected: using CRTPbase::asImp; }; #include "stringserializer.cpp" #endif // SPRINGLOBBY_HEADERGUARD_STRINGSERIALIZER_H springlobby-0.169/src/utils/tasutil.cpp0000600000176000000410000000230612105760300021540 0ustar buildbotwww-data00000000000000/* Copyright (C) 2007-2011 The SpringLobby Team. All rights reserved. */ #include "tasutil.h" #include "conversion.h" #include wxString GetWordParam( wxString& params ) { return GetParamByChar( params, _T(' ') ); } wxString GetSentenceParam( wxString& params ) { return GetParamByChar( params, _T('\t') ); } long GetIntParam( wxString& params ) { return s2l( GetParamByChar( params, _T(' ') ) ); } wxString GetParamByChar( wxString& params, const wxChar& sep ) { int pos = params.Find( sep ); wxString ret; if ( pos != -1 ) { ret = params.Left( pos ); params = params.Mid( pos + 1 ); } else { ret = params; params = _T(""); } return ret; } bool GetBoolParam( wxString& params ) { return (bool)GetIntParam( params ); } bool IsValidNickname( const wxString& _name ) { wxString name = _name; // The Regex Container //wxRegEx regex( wxT("[:graph:]") ); wxRegEx regex( wxT("[ \t\r\n\v\föäüß, .:<>\\!§$%&+-]" )); // We need to escape all regular Expression Characters, that have a special Meaning name.Replace( _T("["), _T("") ); name.Replace( _T("]"), _T("") ); if ( name.IsEmpty() ) return false; return !regex.Matches( name ); } springlobby-0.169/src/utils/tasutil.h0000600000176000000410000000227112105760300021206 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_SERVERUTIL_H #define SPRINGLOBBY_HEADERGUARD_SERVERUTIL_H #include #include class wxString; wxString GetWordParam( wxString& params ); wxString GetSentenceParam( wxString& params ); long GetIntParam( wxString& params ); bool GetBoolParam( wxString& params ); wxString GetParamByChar( wxString& params, const wxChar& sep ); //! matches against regex for printable ascii chars, excluding space bool IsValidNickname( const wxString& name ); #endif // SPRINGLOBBY_HEADERGUARD_SERVERUTIL_H /** This file is part of SpringLobby, Copyright (C) 2007-2011 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. SpringLobby 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 SpringLobby. If not, see . **/ springlobby-0.169/src/utils/uievents.cpp0000600000176000000410000000257112105760300021721 0ustar buildbotwww-data00000000000000#include "uievents.h" #include "../utils/conversion.h" namespace UiEvents { static std::map< UiEventsTypes, EventSender > UiEvents; EventSender &GetUiEventSender( UiEventsTypes cmd ) { return UiEvents[cmd]; } static EventSender NotificationEventSender; EventSender &GetNotificationEventSender( ) { return NotificationEventSender; } static std::map< StatusType, EventSender > StatusEvents; EventSender &GetStatusEventSender( StatusType cmd ) { return StatusEvents[cmd]; } inline void ScopedSend(const wxString& msg, unsigned int slot) { StatusData data( msg, slot ); GetStatusEventSender( UiEvents::addStatusMessage ).SendEvent( data ); } ScopedStatusMessage::ScopedStatusMessage( const wxString& msg, unsigned int slot ) : m_slot( slot ) { ScopedSend(msg, slot); } ScopedStatusMessage::ScopedStatusMessage(const std::string& msg, unsigned int slot) : m_slot( slot ) { ScopedSend( TowxString(msg), slot); } ScopedStatusMessage::~ScopedStatusMessage() { StatusData data( m_slot ); GetStatusEventSender( UiEvents::removeStatusMessage ).SendEvent( data ); } OnBattleActionData::OnBattleActionData( const wxString& nick, const wxString& msg ) { Add( nick ); Add( msg ); } } springlobby-0.169/src/utils/uievents.h0000600000176000000410000000332512105760300021364 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_HEADERGUARD_UIEVENTS_H #define SPRINGLOBBY_HEADERGUARD_UIEVENTS_H #include "events.h" #include #include #include #include namespace UiEvents { typedef wxString UiEventsTypes; typedef wxArrayString UiEventData; struct OnBattleActionData : public wxArrayString{ OnBattleActionData( const wxString& nick, const wxString& msg ); }; static const wxString OnBattleActionEvent = _T("OnBattleActionEvent"); EventSender &GetUiEventSender( UiEventsTypes cmd ); enum EventType { PrivateMessage, ServerConnection, Battleroom, UserAction }; typedef std::pair< EventType, wxString > NotficationData; EventSender &GetNotificationEventSender(); enum StatusType { addStatusMessage = 0, removeStatusMessage = 1 }; //! a message - slot number pair class StatusData : public std::pair { typedef std::pair BaseType; public: //! this is to be used for adding a message StatusData( const wxString& text, unsigned int slot = 0 ) : BaseType(text,slot) {} //! this is to be used for removing a message (we wont care about the message here) StatusData( unsigned int slot = 0) : BaseType(wxEmptyString,slot) {} }; //! sends add message in the ctor and remove in the dtor class ScopedStatusMessage { public: ScopedStatusMessage( const wxString& msg, unsigned int slot ); ScopedStatusMessage( const std::string& msg, unsigned int slot ); ~ScopedStatusMessage(); private: const unsigned int m_slot; }; EventSender &GetStatusEventSender( StatusType cmd ); } #endif // SPRINGLOBBY_HEADERGUARD_UIEVENTS_H springlobby-0.169/src/versiontest.cpp0000600000176000000410000000206312105760300021300 0ustar buildbotwww-data00000000000000/** This file is part of SpringLobby, Copyright (C) 2007-2010 SpringLobby is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. springsettings 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 SpringLobby. If not, see . **/ #include int main ( int , char** ) { #ifdef HAVE_CONFIG_H #include "springlobby_config.h" std::cout << "config.h found\n"; #else std::cout << "config.h NOT found\n"; #endif //HAVE_CONFIG_H #ifndef VERSION #define VERSION "unknown" std::cout << "VERSION not defined, set to unknown"; #else std::cout << "VERSION was defined to" << VERSION; #endif //VERSION std::cout << std::endl; return 0; } springlobby-0.169/src/widgets/CMakeLists.txt0000600000176000000410000000016412105760300022415 0ustar buildbotwww-data00000000000000add_sources(springlobbySrc downloadlistctrl.cpp downloaddialog.cpp downloadpanel.cpp infopanel.cpp widget.cpp )springlobby-0.169/src/widgets/downloaddialog.cpp0000600000176000000410000000140412105760300023346 0ustar buildbotwww-data00000000000000#include "downloaddialog.h" #include #include "downloadpanel.h" #include "../settings.h" WidgetDownloadDialog::WidgetDownloadDialog(wxWindow* parent, wxWindowID id, const wxString& title, long style ) : wxDialog ( parent, id, title, wxDefaultPosition, wxDefaultSize, style, _T("WIDGETDIALOG") ), WindowAttributesPickle( _T("WIDGETDIALOG"), this, wxSize( 670, 400 ) ) { m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_widgets_panel = new WidgetDownloadPanel( this, -1, _("widgets") ); m_main_sizer->Add( m_widgets_panel, 1, wxALL | wxEXPAND, 5 ); SetSizer( m_main_sizer ); Layout(); } WidgetDownloadDialog::~WidgetDownloadDialog() { } bool WidgetDownloadDialog::Show( bool show ) { return wxDialog::Show( show ); } springlobby-0.169/src/widgets/downloaddialog.h0000600000176000000410000000136412105760300023020 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_WIDGETDOWNLOADDIALOG_H_INCLUDED #define SPRINGLOBBY_WIDGETDOWNLOADDIALOG_H_INCLUDED #include #include "../gui/windowattributespickle.h" class wxBoxSizer; class WidgetDownloadPanel; class WidgetDownloadDialog : public wxDialog, public WindowAttributesPickle { public: WidgetDownloadDialog(wxWindow* parent, wxWindowID id, const wxString& title, long style = wxCAPTION | wxRESIZE_BORDER | wxCLOSE_BOX | wxMAXIMIZE_BOX | wxMINIMIZE_BOX | wxDEFAULT_DIALOG_STYLE ); virtual ~WidgetDownloadDialog(); bool Show( bool show = true ); protected: wxBoxSizer* m_main_sizer; WidgetDownloadPanel* m_widgets_panel; }; #endif // SPRINGLOBBY_WIDGETDOWNLOADDIALOG_H_INCLUDED springlobby-0.169/src/widgets/downloadlistctrl.cpp0000600000176000000410000001100412105760300023744 0ustar buildbotwww-data00000000000000#include "downloadlistctrl.h" #include "../utils/conversion.h" template<> SortOrder WidgetDownloadListctrl::BaseType::m_sortorder = SortOrder(); const unsigned int column_count = 4; BEGIN_EVENT_TABLE( WidgetDownloadListctrl, WidgetDownloadListctrl::BaseType ) EVT_LIST_ITEM_ACTIVATED( WIDGETLISTCTRL_ID, WidgetDownloadListctrl::OnActivateItem ) EVT_LIST_COL_CLICK( WIDGETLISTCTRL_ID, WidgetDownloadListctrl::OnColClick ) END_EVENT_TABLE() WidgetDownloadListctrl::WidgetDownloadListctrl(wxWindow* parent, wxWindowID /*unused*/, const wxString& /*unused*/, long /*unused*/, const wxPoint&/*unused*/, const wxSize& /*unused*/) : WidgetDownloadListctrl::BaseType(parent, WIDGETLISTCTRL_ID, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER | wxLC_REPORT | wxLC_SINGLE_SEL | wxLC_ALIGN_LEFT, _T("WidgetDownloadListCtrl"), 3, &WidgetDownloadListctrl::CompareOneCrit) { const int as = wxLIST_AUTOSIZE; #if defined(__WXMSW__) const int widths [column_count] = { as, as, as, as }; #elif defined(__WXMAC__) const int widths [column_count] = { as, as, as, as }; #else const int widths [column_count] = { as, as, as, as }; #endif AddColumn( 0, widths[0], _("Name"), _("Name") ); AddColumn( 1, widths[1], _("Author"), _("Author") ); AddColumn( 2, widths[2], _("Games"), _("Compatible games") ); AddColumn( 3, widths[3], _("Downloads"), _("Downloads") ); if ( m_sortorder.size() == 0 ) { m_sortorder[2].col = 2; m_sortorder[2].direction = 1; m_sortorder[0].col = 0; m_sortorder[0].direction = 1; m_sortorder[1].col = 1; m_sortorder[1].direction = 1; } } WidgetDownloadListctrl::~WidgetDownloadListctrl() { //dtor } int WidgetDownloadListctrl::CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const { switch ( col ) { case 0: return dir * u1.name.CmpNoCase( u2.name ); // case 1: return dir * u1.short_description.CmpNoCase( u2.short_description ); case 1: return dir * u1.author.CmpNoCase( u2.author ); case 2: return dir * u1.mods.CmpNoCase( u2.mods ); case 3: return dir * compareSimple( u1.num_downloads, u2.num_downloads ); // case 5: return dir * u1.date.CmpNoCase( u2.date ); default: return 0; } } void WidgetDownloadListctrl::AddWidget( const Widget& widget ) { if ( AddItem( widget ) ) return; wxLogWarning( _T("Widget already in list.") ); } wxString WidgetDownloadListctrl::GetItemText(long item, long column) const { if ( item > long(m_data.size()) || item < 0 ) return wxEmptyString; const Widget& widget = m_data[item]; switch ( column ) { default: return wxEmptyString; case 0: return widget.name; // case 1: return widget.short_description; case 1: return widget.author; case 2: return widget.mods; case 3: return TowxString( widget.num_downloads ); // case 5: return widget.date; } } int WidgetDownloadListctrl::GetItemImage(long /*unused*/) const { return -1; } int WidgetDownloadListctrl::GetItemColumnImage(long /*unused*/, long /*unused*/) const { return -1; } void WidgetDownloadListctrl::HighlightItem( long /*unused*/ ) { } void WidgetDownloadListctrl::Sort() { if ( m_data.size() > 0 ) { SaveSelection(); SLInsertionSort( m_data, m_comparator ); RestoreSelection(); } } int WidgetDownloadListctrl::GetIndexFromData( const DataType& data ) const { static long seekpos; seekpos = LSL::Util::Clamp( seekpos, 0l , (long)m_data.size() ); int index = seekpos; for ( DataCIter f_idx = m_data.begin() + seekpos; f_idx != m_data.end() ; ++f_idx ) { if ( data.Equals( *f_idx ) ) { seekpos = index; return seekpos; } index++; } //it's ok to init with seekpos, if it had changed this would not be reached int r_index = seekpos - 1; for ( DataRevCIter r_idx = m_data.rbegin() + ( m_data.size() - seekpos ); r_idx != m_data.rend() ; ++r_idx ) { if ( data.Equals( *r_idx ) ) { seekpos = r_index; return seekpos; } r_index--; } return -1; } Widget& WidgetDownloadListctrl::GetSelectedWidget() { return m_data[m_selected_index]; } void WidgetDownloadListctrl::OnActivateItem( wxListEvent& event ) { int index = event.GetIndex(); if ( index == -1 ) return; // WidgetInfoDialog* dl = new WidgetInfoDialog( m_data[index], (wxWindow*)this, -1, _("stuff") ); // dl->Show(true); } springlobby-0.169/src/widgets/downloadlistctrl.h0000600000176000000410000000251612105760300023421 0ustar buildbotwww-data00000000000000#ifndef WIDGETDOWNLOADLISTCTRL_H #define WIDGETDOWNLOADLISTCTRL_H #include "../customvirtlistctrl.h" #include "widget.h" class WidgetDownloadListctrl : public CustomVirtListCtrl { public: WidgetDownloadListctrl(wxWindow* parent, wxWindowID id, const wxString& name = _T("WidgetDownloadListCtrl"), long style = wxSUNKEN_BORDER | wxLC_REPORT | wxLC_ALIGN_LEFT, const wxPoint& pt = wxDefaultPosition, const wxSize& sz = wxDefaultSize); virtual ~WidgetDownloadListctrl(); void AddWidget( const Widget& widget ); Widget& GetSelectedWidget(); //these are overloaded to use list in virtual style wxString GetItemText(long item, long column) const; int GetItemImage(long item) const; int GetItemColumnImage(long item, long column) const; wxListItemAttr* GetItemAttr(long /*unused*/) const {return 0;} void Sort(); protected: int CompareOneCrit( DataType u1, DataType u2, int col, int dir ) const; void HighlightItem( long item ); void OnActivateItem( wxListEvent& event ); int GetIndexFromData( const DataType& data ) const; public: enum { WIDGETLISTCTRL_ID }; protected: DECLARE_EVENT_TABLE() }; #endif // WIDGETDOWNLOADLISTCTRL_H springlobby-0.169/src/widgets/downloadpanel.cpp0000600000176000000410000001240212105760300023206 0ustar buildbotwww-data00000000000000#ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include "downloadpanel.h" #include #include #include #include #include "../utils/conversion.h" #include "downloadlistctrl.h" #include "infopanel.h" #include "../settings.h" const int invalid_id = -1; const unsigned int max_short_desc_length = 50; BEGIN_EVENT_TABLE( WidgetDownloadPanel , wxScrolledWindow) EVT_SPLITTER_SASH_POS_CHANGED( wxID_ANY, WidgetDownloadPanel::OnSashChanged ) EVT_LIST_ITEM_SELECTED ( WidgetDownloadListctrl::WIDGETLISTCTRL_ID, WidgetDownloadPanel::OnSelect ) END_EVENT_TABLE() WidgetDownloadPanel::WidgetDownloadPanel(wxWindow* parent, wxWindowID id, const wxString& /*unused*/, const wxPoint& pos , const wxSize& size , long style ) : wxScrolledWindow (parent, id, pos, size, style, _T("widget-dl") ) { m_splitter = new wxSplitterWindow( this, -1, wxDefaultPosition, wxDefaultSize ); m_main_sizer = new wxBoxSizer ( wxHORIZONTAL ); m_list = new WidgetDownloadListctrl( m_splitter, WidgetDownloadListctrl::WIDGETLISTCTRL_ID ); PopulateList(); m_list->ResetColumnSizes(); Widget dummy; m_info_panel = new WidgetInfoPanel( dummy, m_splitter, ID_PANEL ); m_info_panel->Create(); m_splitter->SplitVertically( m_list, m_info_panel ); m_main_sizer->Add( m_splitter, 1, wxEXPAND|wxALL, 4 ); m_splitter->SetMinimumPaneSize( 400 ); m_splitter->SetSashPosition( sett().GetSashPosition( GetName() ) ); SetSizer( m_main_sizer ); Layout(); m_list->SortList( true ); } WidgetDownloadPanel::~WidgetDownloadPanel() { sett().SetSashPosition( GetName(), m_splitter->GetSashPosition( ) ); } void WidgetDownloadPanel::OnSashChanged( wxSplitterEvent& evt ) { sett().SetSashPosition( GetName(), evt.GetSashPosition( ) ); evt.Skip(); } void WidgetDownloadPanel::OnSelect( wxListEvent& event ) { m_list->OnSelected( event ); m_splitter->Unsplit(); m_info_panel = new WidgetInfoPanel( m_list->GetSelectedWidget(), m_splitter, ID_PANEL ); m_splitter->SplitVertically( m_list, m_info_panel ); m_splitter->SetSashPosition( sett().GetSashPosition( GetName() ) ); m_info_panel->Create(); Layout(); } bool WidgetDownloadPanel::PopulateList() { bool success = false; wxHTTP http; http.SetTimeout(6); http.Connect(widgetDownloader_baseUrl); // PHP file sending XML content wxInputStream *httpStream = http.GetInputStream(_T("/lua_manager.php?m=0")); if (http.GetError() == wxPROTO_NOERR) { wxXmlDocument xml(*httpStream); wxXmlNode *node = xml.GetRoot() ? xml.GetRoot()->GetChildren() : NULL; while (node) { int id = FromwxString( node->GetPropVal( _T("ID"), TowxString( invalid_id ) ) ); if ( id != invalid_id ) { Widget w; w.w_id = id; wxXmlNode* item = node->GetChildren(); while( item ) { wxString name = item->GetName(); if ( name == _T("ImageCount") ) { w.num_images = s2l( item->GetNodeContent() ); } else if ( name == _T("DownloadCount") ) { w.num_downloads = s2l( item->GetNodeContent() ); } else if ( name == _T("Version") ) { wxString rev = item->GetNodeContent(); w.rev_major = s2l( rev.BeforeFirst( '.' ) ); w.rev_minor = s2l( rev.AfterFirst( '.' ) ); w.rev = rev; } else if ( name == _T("NameId") ) { w.n_id = s2l( item->GetNodeContent() ); } else if ( name == _T("Changelog") ) { w.changelog = item->GetNodeContent(); } else if ( name == _T("Mods") ) {// NOT a "Mod" occurence to replace! w.mods = item->GetNodeContent(); } else if ( name == _T("Description") ) { wxString desc = item->GetNodeContent(); w.description = desc; desc.Replace( _T("\r\n"), _T(" "), true ); desc.Replace( _T("\n"), _T(" "), true ); desc.Replace( _T("\r"), _T(" "), true ); if ( desc.Len() > max_short_desc_length ) { desc = desc.Left( max_short_desc_length -1 ) + _T("..."); } w.short_description = desc; } else if ( name == _T("Author") ) { w.author = item->GetNodeContent(); } else if ( name == _T("Entry") ) { w.date = item->GetNodeContent(); } else if ( name == _T("Name") ) { w.name = item->GetNodeContent(); } item = item->GetNext(); } m_list->AddWidget( w ); } node = node->GetNext(); success = true; } } http.Close(); wxDELETE(httpStream); return success; } springlobby-0.169/src/widgets/downloadpanel.h0000600000176000000410000000214612105760300022657 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_WIDGETDOWNLOADPANEL_H_INCLUDED #define SPRINGLOBBY_WIDGETDOWNLOADPANEL_H_INCLUDED #include class WidgetDownloadListctrl; class WidgetInfoPanel; class wxBoxSizer; class wxButton; class wxTextCtrl; class wxStaticText; class wxListEvent; class wxSplitterWindow; class wxSplitterEvent; class WidgetDownloadPanel : public wxScrolledWindow { public: WidgetDownloadPanel(wxWindow* parent, wxWindowID id, const wxString& title = _T(""), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxHSCROLL | wxVSCROLL ); virtual ~WidgetDownloadPanel(); protected: bool PopulateList(); void OnSelect( wxListEvent& event ); WidgetDownloadListctrl* m_list; WidgetInfoPanel* m_info_panel; wxSplitterWindow* m_splitter; wxBoxSizer* m_main_sizer; void OnSashChanged( wxSplitterEvent& evt ); enum { ID_LIST, ID_PANEL }; protected: DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_WIDGETDOWNLOADPANEL_H_INCLUDED springlobby-0.169/src/widgets/infopanel.cpp0000600000176000000410000001422312105760300022335 0ustar buildbotwww-data00000000000000#include "infopanel.h" #include #include #include #include #include #include #include #include #include #include #include #include "widget.h" #include "../aui/artprovider.h" #include "../aui/slbook.h" #include "../utils/conversion.h" #include "../utils/customdialogs.h" #include "../Helper/imageviewer.h" #include "../Helper/slhtmlwindow.h" BEGIN_EVENT_TABLE( WidgetInfoPanel, wxPanel) EVT_BUTTON( WidgetInfoPanel::BUT_DOWNLOAD, WidgetInfoPanel::OnDownload ) EVT_BUTTON( WidgetInfoPanel::BUT_REMOVE, WidgetInfoPanel::OnRemove ) EVT_BUTTON( WidgetInfoPanel::BUT_UPDATE, WidgetInfoPanel::OnUpdate ) END_EVENT_TABLE() WidgetInfoPanel::WidgetInfoPanel( Widget& widget, wxWindow* parent, wxWindowID id, const wxString& /*unused*/, const wxPoint& pos , const wxSize& size , long style ) : wxScrolledWindow (parent, id, pos, size, style), m_widget( widget ) { m_busy_notice = new wxBoxSizer( wxVERTICAL ); wxStaticText* m_busy_notice_lbl = new wxStaticText( this, -1, _("getting infos") ); m_busy_notice->Add( m_busy_notice_lbl, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL ); SetSizer( m_busy_notice ); } void WidgetInfoPanel::Create() { wxWindowUpdateLocker locked( this ); if ( !m_widget.extendedinfo.parsed ) { m_widget.GetFileInfos(); m_widget.GetImageInfos(); m_widget.DownloadImages(); } m_widget.extendedinfo.parsed = true; m_busy_notice->DeleteWindows(); m_busy_notice->Show( false ); // m_busy_notice->Destroy(); m_main_sizer = new wxBoxSizer( wxVERTICAL ); m_left_sizer = new wxBoxSizer( wxVERTICAL ); m_left_button_sizer = new wxBoxSizer( wxHORIZONTAL ); m_grid_sizer = new wxGridSizer( 2, 5, 5 ); wxStaticText* name_lbl = new wxStaticText( this, -1, _("Name") ); m_grid_sizer->Add( name_lbl ); wxStaticText* name = new wxStaticText( this, -1, m_widget.name ); m_grid_sizer->Add( name ); wxStaticText* author_lbl = new wxStaticText( this, -1, _("Author") ); m_grid_sizer->Add( author_lbl ); wxStaticText* author = new wxStaticText( this, -1, m_widget.author ); m_grid_sizer->Add( author ); wxStaticText* mods_lbl = new wxStaticText( this, -1, _("Suitable games") ); m_grid_sizer->Add( mods_lbl ); wxStaticText* mods = new wxStaticText( this, -1, m_widget.mods ); m_grid_sizer->Add( mods ); wxStaticText* rev_lbl = new wxStaticText( this, -1, _("Current version") ); m_grid_sizer->Add( rev_lbl ); wxStaticText* rev = new wxStaticText( this, -1, m_widget.rev ); m_grid_sizer->Add( rev ); wxStaticText* dl_lbl = new wxStaticText( this, -1, _("# downloaded") ); m_grid_sizer->Add( dl_lbl ); wxStaticText* dl = new wxStaticText( this, -1, TowxString( m_widget.num_downloads ) ); m_grid_sizer->Add( dl ); wxStaticText* publ_lbl = new wxStaticText( this, -1, _("Published on") ); m_grid_sizer->Add( publ_lbl ); wxStaticText* publ = new wxStaticText( this, -1, m_widget.date ); m_grid_sizer->Add( publ ); m_left_sizer->Add( m_grid_sizer, 0, wxEXPAND | wxALL, 5 ); m_download = new wxButton( this, BUT_DOWNLOAD, _("Download") ); // m_update = new wxButton( this, BUT_UPDATE, _("Update") ); m_remove = new wxButton( this, BUT_REMOVE, _("Remove") ); const int flag = wxALL; const int spc = 5; m_left_button_sizer->Add( m_download, 0, flag, spc ); // m_button_sizer->Add( m_update, 0, flag, spc ); m_left_button_sizer->Add( m_remove, 0, flag, spc ); m_left_sizer->Add( m_left_button_sizer, 0, wxALL, 0 ); m_right_sizer = new wxBoxSizer ( wxVERTICAL ); m_desc = new slHtmlWindow( this, CTL_DESC, wxDefaultPosition, wxDefaultSize, wxHW_NO_SELECTION|wxHW_SCROLLBAR_AUTO ); wxString ct = _T("") + m_widget.description + _T("") ;//content m_desc->SetPage( ct ); m_changelog = new wxTextCtrl( this, -1, _T( "" ), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY ); wxStringTokenizer tk( m_widget.changelog, _T("\r\n") ); while ( tk.HasMoreTokens() ) m_changelog->AppendText( tk.GetNextToken() ); m_ext_info = new SLNotebook( this, _T("m_ext_info"), -1, wxDefaultPosition, wxDefaultSize, wxAUI_NB_LEFT ); m_ext_info->SetArtProvider(new SLArtProvider); m_ext_info->AddPage( m_desc, _("Description") , true ); m_ext_info->AddPage( m_changelog, _("Changelog") , false ); if ( m_widget.GetImageFilenames().GetCount() > 0 ) { m_imageviewer = new ImageViewerPanel( m_widget.GetImageFilenames(), false, this, -1, 0); m_ext_info->AddPage( m_imageviewer, _("Screenshots") , false ); } m_right_sizer->Add( m_ext_info, 1, wxEXPAND, 5 ); wxStaticBoxSizer* top_box = new wxStaticBoxSizer ( wxVERTICAL, this ); top_box->Add( m_left_sizer ); m_main_sizer->Add( top_box, 0, wxLEFT | wxEXPAND, 5 ); m_main_sizer->Add( new wxStaticLine( this ), 0, wxEXPAND ); m_main_sizer->Add( m_right_sizer, 1, wxLEFT|wxEXPAND, 5 ); SetButtonStates(); SetSizer( m_main_sizer ); Layout(); } void WidgetInfoPanel::SetButtonStates() { m_download->Enable( !m_widget.is_installed ); // m_update->Enable( false ); m_remove->Enable( m_widget.is_installed ); } WidgetInfoPanel::~WidgetInfoPanel() { //dtor } void WidgetInfoPanel::OnDownload( wxCommandEvent& /*unused*/ ) { if ( m_widget.Install() ) { customMessageBoxNoModal( SL_MAIN_ICON, _("Widget files have been installed."), _("Success") ); } else { customMessageBoxNoModal( SL_MAIN_ICON, _("Widget files have not been installed."), _("Error") ); } SetButtonStates(); } void WidgetInfoPanel::OnRemove( wxCommandEvent& /*unused*/ ) { if ( m_widget.Remove() ) { customMessageBoxNoModal( SL_MAIN_ICON, _("Widget files have been removed."), _("Success") ); } else { customMessageBoxNoModal( SL_MAIN_ICON, _("Widget files have not been removed."), _("Error") ); } SetButtonStates(); } void WidgetInfoPanel::OnUpdate( wxCommandEvent& /*unused*/ ) { } springlobby-0.169/src/widgets/infopanel.h0000600000176000000410000000371212105760300022003 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_WIDGETINFOPANEL_H_INCLUDED #define SPRINGLOBBY_WIDGETINFOPANEL_H_INCLUDED #include struct Widget; class wxGridSizer; class wxBoxSizer; class wxButton; class wxCommandEvent; class wxTextUrlEvent; class ServerMessageBox; class wxTextCtrl; class ImageViewerPanel; class wxHtmlWindow; class SLNotebook; class WidgetInfoPanel : public wxScrolledWindow { public: WidgetInfoPanel( Widget& widget, wxWindow* parent, wxWindowID id, const wxString& title = _T(""), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxHSCROLL | wxVSCROLL ); virtual ~WidgetInfoPanel(); void Create(); protected: Widget& m_widget; wxBoxSizer* m_main_sizer; wxBoxSizer* m_left_sizer; wxBoxSizer* m_right_sizer; wxBoxSizer* m_left_button_sizer; // wxBoxSizer* m_right_button_sizer; wxGridSizer* m_grid_sizer; // wxBoxSizer* m_desc_sizer; // wxBoxSizer* m_screeny_sizer; // wxBoxSizer* m_chglog_sizer; wxBoxSizer* m_variable_info_sizer; wxBoxSizer* m_busy_notice; wxTextCtrl* m_changelog; ImageViewerPanel* m_imageviewer; wxHtmlWindow* m_desc; SLNotebook* m_ext_info; wxButton* m_update; wxButton* m_remove; wxButton* m_download; void SetButtonStates(); void OnDownload( wxCommandEvent& evt ); void OnPics( wxCommandEvent& evt ); void OnChangeLog( wxCommandEvent& evt ); void OnDescription( wxCommandEvent& evt ); void OnRemove( wxCommandEvent& evt ); void OnUpdate( wxCommandEvent& evt ); enum { BUT_DOWNLOAD, BUT_CHG_LOG, BUT_UPDATE, BUT_REMOVE, BUT_PICS, CTL_DESC, BUT_DESC }; protected: DECLARE_EVENT_TABLE() }; #endif // SPRINGLOBBY_WIDGETINFOPANEL_H_INCLUDED springlobby-0.169/src/widgets/widget.cpp0000600000176000000410000001701212105760300021644 0ustar buildbotwww-data00000000000000#ifdef _MSC_VER #ifndef NOMINMAX #define NOMINMAX #endif // NOMINMAX #include #endif // _MSC_VER #include "widget.h" #include #include #include #include #include #include #include "../utils/misc.h" #include "../settings.h" #include "../springunitsync.h" const int invalid_id = -1; Widget::Widget(): w_id(-1), n_id(-1), num_downloads(-1), num_images(0), rev_major(-1), rev_minor(-1), is_installed(false) { //ctor } Widget::~Widget() { //dtor } bool Widget::IsInstalled() const { return false; } wxArrayString Widget::GetImageFilenames() const { wxArrayString ret; ExtendedInfo::Images::const_iterator it = extendedinfo.images.begin(); for ( ; it != extendedinfo.images.end(); ++it ) { ret.Add( it->local_path ); } return ret; } bool Widget::GetImageInfos() { bool success = false; wxHTTP http; http.SetTimeout(6); http.Connect(widgetDownloader_baseUrl); wxString query_url = _T("/lua_manager.php?m=4&id=") + TowxString( n_id ); // PHP file sending XML content wxInputStream *httpStream = http.GetInputStream( query_url ); if (http.GetError() == wxPROTO_NOERR) { // will crash here, if xml content is not formatted PERFECTLY wxXmlDocument xml(*httpStream); wxXmlNode *node = xml.GetRoot() ? xml.GetRoot()->GetChildren() : NULL; while (node) { int id = FromwxString( node->GetPropVal( _T("ID"), TowxString( invalid_id ) ) ); if ( id != invalid_id ) { WidgetImage file; file.id = id; wxXmlNode* item = node->GetChildren(); while( item ) { wxString item_name = item->GetName(); if ( item_name == _T("Url") ) { file.url = item->GetNodeContent(); } item = item->GetNext(); } extendedinfo.images.push_back( file ); } node = node->GetNext(); success = true; } } http.Close(); wxDELETE(httpStream); return success; } bool Widget::DownloadImages() { wxString sep ( wxFileName::GetPathSeparator() ); ExtendedInfo::Images& images = extendedinfo.images; ExtendedInfo::Images::iterator it = images.begin(); for ( ; it != images.end(); ++it ) { wxString fileurl = it->url; fileurl.Replace( _T("http://") , _T("") ); wxString destpath = sett().GetCachePath() + fileurl.AfterLast(_T('/')); tryCreateDirectory(destpath); it->local_path = destpath; if ( wxFileExists( destpath ) ) // no need to redownload images continue; wxHTTP FileDownloading; /// normal timeout is 10 minutes.. set to 10 secs. FileDownloading.SetTimeout(10); FileDownloading.Connect( fileurl.BeforeFirst(_T('/')), 80); wxInputStream* httpstream = FileDownloading.GetInputStream( _T("/") + fileurl.AfterFirst(_T('/')) ); if ( httpstream ) { try { wxFileOutputStream outs( destpath ); httpstream->Read(outs); outs.Close(); delete httpstream; httpstream = 0; //download success } catch (...) { wxLogMessage(_T("exception on download of") + fileurl); return false; } } } return true; } bool Widget::GetFileInfos() { bool success = false; unsigned int file_present_count = 0; wxString sep ( wxFileName::GetPathSeparator() ); wxHTTP http; http.SetTimeout(6); http.Connect(widgetDownloader_baseUrl); wxString query_url = _T("/lua_manager.php?m=1&id=") + TowxString( w_id ); // PHP file sending XML content wxInputStream *httpStream = http.GetInputStream( query_url ); if (http.GetError() == wxPROTO_NOERR) { // will crash here, if xml content is not formatted PERFECTLY wxXmlDocument xml(*httpStream); wxXmlNode *node = xml.GetRoot() ? xml.GetRoot()->GetChildren() : NULL; while (node) { int id = FromwxString( node->GetPropVal( _T("ID"), TowxString( invalid_id ) ) ); if ( id != invalid_id ) { WidgetFile file; file.id = id; wxXmlNode* item = node->GetChildren(); while( item ) { wxString item_name = item->GetName(); if ( item_name == _T("Url") ) { file.url = item->GetNodeContent(); } else if ( item_name == _T("MD5") ) { file.md5 = item->GetNodeContent(); } else if ( item_name == _T("LocalPath") ) { file.local_path = item->GetNodeContent(); file_present_count += usync().FileExists( file.local_path ); } item = item->GetNext(); } extendedinfo.files.push_back( file ); } node = node->GetNext(); success = true; } } http.Close(); wxDELETE(httpStream); if ( file_present_count == extendedinfo.files.size() ) is_installed = true; return success; } bool Widget::Install() { if ( !extendedinfo.parsed ) return false; wxString sep ( wxFileName::GetPathSeparator() ); wxChar sep_c ( wxFileName::GetPathSeparator() ); ExtendedInfo::Files& files = extendedinfo.files; ExtendedInfo::Files::iterator it = files.begin(); for ( ; it != files.end(); ++it ) { wxString fileurl = it->url; fileurl.Replace( _T("http://") , _T("") ); wxString destpath = sett().GetCurrentUsedDataDir() + it->local_path; wxHTTP FileDownloading; /// normal timeout is 10 minutes.. set to 10 secs. FileDownloading.SetTimeout(10); FileDownloading.Connect( fileurl.BeforeFirst(_T('/')), 80); wxInputStream* httpstream = FileDownloading.GetInputStream( _T("/") + fileurl.AfterFirst(_T('/')) ); if ( httpstream ) { try { const wxString c_path(destpath.BeforeLast( sep_c )); tryCreateDirectory( c_path, 0755, wxPATH_MKDIR_FULL ); wxFileOutputStream outs( destpath ); httpstream->Read(outs); outs.Close(); delete httpstream; httpstream = 0; //download success } catch (...) { wxLogMessage(_T("exception on download of") + fileurl); return false; } } } is_installed = true; return true; } bool Widget::Remove() { if ( !extendedinfo.parsed || !is_installed ) return false; unsigned int file_remove_successes = 0; ExtendedInfo::Files& files = extendedinfo.files; ExtendedInfo::Files::const_iterator it = files.begin(); for ( ; it != files.end(); ++it ) { wxString destpath = sett().GetCurrentUsedDataDir() + it->local_path; file_remove_successes += wxRemoveFile( destpath ); } if ( file_remove_successes == files.size() ) { is_installed = false; return true; } if ( file_remove_successes < files.size() && file_remove_successes > 0 ) { is_installed = false; return false; } return false; } bool Widget::Equals( const Widget& other ) const { return w_id == other.w_id && ( rev.CmpNoCase( other.rev ) == 0 ); } springlobby-0.169/src/widgets/widget.h0000600000176000000410000000232212105760300021307 0ustar buildbotwww-data00000000000000#ifndef SPRINGLOBBY_WIDGET_H_INCLUDED #define SPRINGLOBBY_WIDGET_H_INCLUDED #include #include class wxArrayString; struct WidgetFile { wxString url; wxString local_path; wxString md5; long id; }; struct WidgetImage { wxString url; wxString local_path; long id; }; struct ExtendedInfo { ExtendedInfo():parsed(false) {} bool parsed; typedef std::vector< WidgetFile > Files; Files files; typedef std::vector< WidgetImage > Images; Images images; }; struct Widget { public: Widget(); virtual ~Widget(); long w_id; long n_id; wxString name; wxString description; wxString short_description; long num_downloads; wxString mods; wxString author; long num_images; long rev_major; long rev_minor; wxString rev; wxString date; wxString changelog; ExtendedInfo extendedinfo; bool is_installed; bool IsInstalled() const; wxArrayString GetImageFilenames() const; bool GetImageInfos(); bool DownloadImages(); bool GetFileInfos(); bool Install(); bool Remove(); bool Equals( const Widget& other ) const ; }; #endif // SPRINGLOBBY_WIDGET_H_INCLUDED springlobby-0.169/src/wxkeybinder/CMakeLists.txt0000600000176000000410000000010312105760300023273 0ustar buildbotwww-data00000000000000add_sources(SettingsSrc keybinder.cpp wxKeyMonitorTextCtrl.cpp )springlobby-0.169/src/wxkeybinder/keybinder.cpp0000600000176000000410000022654412105760300023236 0ustar buildbotwww-data00000000000000///////////////////////////////////////////////////////////////////////////// // Name: keybinder.cpp // Purpose: wxKeyBind, wxCmd, wxKeyBinder, wxKeyConfigPanel // Author: Aleksandras Gluchovas // Modified by: Francesco Montorsi // Created: 2000/02/10 // RCS-ID: $Id: keybinder.cpp 443 2007-03-01 19:15:57Z frm $ // Copyright: (c) Aleksandras Gluchovas and (c) Francesco Montorsi // Licence: wxWidgets licence ///////////////////////////////////////////////////////////////////////////// // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include "wx/wx.h" #include "wx/log.h" #endif // includes #include "wx/statline.h" #include "keybinder.h" #include "menuutils.h" #include "wx/config.h" #include "wx/tokenzr.h" #include "wx/menu.h" #include #include "../springsettings/hotkeys/CommandOrderDlg.h" #include "../utils/conversion.h" #include "../springsettings/hotkeys/ChangeMetaDlg.h" // class definition for wxKeyProfile IMPLEMENT_CLASS(wxKeyProfile, wxKeyBinder) // event table for wxKeyBinder IMPLEMENT_CLASS(wxKeyBinder, wxObject)//EvtHandler) IMPLEMENT_CLASS(wxBinderEvtHandler, wxEvtHandler) BEGIN_EVENT_TABLE(wxBinderEvtHandler, wxEvtHandler) // this is obviously the most important event handler; we don't // want to intercept wxEVT_KEY_UP because we don't need them: // a command must be immediately executed when one of its shortcuts // is sent to the window. EVT_KEY_DOWN(wxBinderEvtHandler::OnChar) // if we intercept also these events, then we would have some problems // with the ENTER keypresses: the wxBinderEvtHandler would be called // three times with three different events which would then generate // three command executions #if 0 EVT_KEY_UP(wxBinderEvtHandler::OnChar) EVT_CHAR(wxBinderEvtHandler::OnChar) #endif #if defined( __WXMSW__ ) // supported only on Win32 #if wxCHECK_VERSION(2, 5, 1) // and from wxWidgets 2.5.1 // I don't think this is needed because wxEVT_HOTKEY are generated // only in some special cases... //FIXME: maybe re-enable this? //EVT_HOTKEY(wxID_ANY, wxBinderEvtHandler::OnChar) #endif #endif END_EVENT_TABLE() // event table for wxKeyConfigPanel IMPLEMENT_CLASS(wxKeyConfigPanel, wxPanel) BEGIN_EVENT_TABLE(wxKeyConfigPanel, wxPanel) // miscellaneous EVT_TEXT(wxKEYBINDER_KEY_FIELD_ID, wxKeyConfigPanel::OnKeyPressed) EVT_TEXT(wxKEYBINDER_KEYPROFILES_ID, wxKeyConfigPanel::OnProfileEditing) EVT_COMBOBOX(wxKEYBINDER_KEYPROFILES_ID, wxKeyConfigPanel::OnProfileSelected) EVT_LISTBOX(wxKEYBINDER_BINDINGS_BOX_ID, wxKeyConfigPanel::OnBindingSelected) // used when the treectrl is used EVT_TREE_SEL_CHANGED(wxKEYBINDER_COMMANDS_BOX_ID, wxKeyConfigPanel::OnTreeCommandSelected) // used when the listbox+combobox is used EVT_COMBOBOX(wxKEYBINDER_CATEGORIES_ID, wxKeyConfigPanel::OnCategorySelected) EVT_LISTBOX(wxKEYBINDER_COMMANDS_BOX_ID, wxKeyConfigPanel::OnListCommandSelected) // buttons EVT_BUTTON(wxID_APPLY, wxKeyConfigPanel::OnApplyChanges) EVT_BUTTON(wxKEYBINDER_ASSIGN_KEY_ID, wxKeyConfigPanel::OnAssignKey) EVT_BUTTON(wxKEYBINDER_REMOVE_KEY_ID, wxKeyConfigPanel::OnRemoveKey) EVT_BUTTON(wxKEYBINDER_REMOVEALL_KEY_ID, wxKeyConfigPanel::OnRemoveAllKey) EVT_BUTTON(wxKEYBINDER_ADD_PROFILEBTN_ID, wxKeyConfigPanel::OnAddProfile) EVT_BUTTON(wxKEYBINDER_REMOVE_PROFILEBTN_ID, wxKeyConfigPanel::OnRemoveProfile) // during idle cycles, wxKeyConfigPanel checks if the wxKeyMonitorTextCtrl // associated must be cleared... END_EVENT_TABLE() #if !wxCHECK_VERSION(2, 5, 1) // with wx previous to 2.5 we need to use wxWindow::Node* instead // of wxWindow::compatibility_iterator (thanks to Sebastien Berthet for this) #define compatibility_iterator Node* #endif // some statics int wxCmd::m_nCmdTypes = 0; wxCmd::wxCmdType wxCmd::m_arrCmdType[]; #ifdef __WXMSW__ #ifdef __MINGW32__ #define MAPVK_VK_TO_VSC (0) #define MAPVK_VSC_TO_VK (1) #define MAPVK_VK_TO_CHAR (2) #define MAPVK_VSC_TO_VK_EX (3) #if(WINVER >= 0x0600) #define MAPVK_VK_TO_VSC_EX (4) #endif /* WINVER >= 0x0600 */ #endif HKL wxMswKeyConverter::m_usLayout = 0; wxChar wxMswKeyConverter::ConvertUsToLocal( const wxChar& c ) { if ( !wxMswKeyConverter::m_usLayout ) wxMswKeyConverter::m_usLayout = LoadKeyboardLayout( _T("00000409"), 0 ); //spring uses us-keyboard layout symbols //so convert those first to windows virtual keys //and then back to characters with correct local layout SHORT vkcode = ( 0x00FF & VkKeyScanEx( c, wxMswKeyConverter::m_usLayout ) ); return static_cast( MapVirtualKey( vkcode, MAPVK_VK_TO_CHAR ) ); } wxChar wxMswKeyConverter::ConvertLocalToUs( const wxChar& c ) { if ( !wxMswKeyConverter::m_usLayout ) wxMswKeyConverter::m_usLayout = LoadKeyboardLayout( _T("00000409"), 0 ); //translate local keyboard layout back to us layout //as used by spring SHORT vkcode = ( 0x00FF & VkKeyScan( c ) ); return static_cast( MapVirtualKeyEx( vkcode, MAPVK_VK_TO_CHAR, wxMswKeyConverter::m_usLayout ) ); } #endif // ---------------------------------------------------------------------------- // wxKeyBind STATIC utilities // ---------------------------------------------------------------------------- const int wxKeyBind::m_usLayoutBitMask = ( 1 << (8 * sizeof(int) - 1) ); const wxString wxKeyBind::m_usMarker = wxT("[us]"); wxString wxKeyBind::NumpadKeyCodeToString(int keyCode) { wxString res; switch (keyCode) { // NUMPAD KEYS // --------------------------- case WXK_NUMPAD0: case WXK_NUMPAD1: case WXK_NUMPAD2: case WXK_NUMPAD3: case WXK_NUMPAD4: case WXK_NUMPAD5: case WXK_NUMPAD6: case WXK_NUMPAD7: case WXK_NUMPAD8: case WXK_NUMPAD9: res << keyCode - WXK_NUMPAD0; break; case WXK_NUMPAD_SPACE: res << wxT("SPACE"); break; case WXK_NUMPAD_TAB: res << wxT("TAB"); break; case WXK_NUMPAD_ENTER: res << wxT("ENTER"); break; case WXK_NUMPAD_F1: case WXK_NUMPAD_F2: case WXK_NUMPAD_F3: case WXK_NUMPAD_F4: res << wxT("F") << keyCode - WXK_NUMPAD_F1; break; case WXK_NUMPAD_LEFT: res << wxT("LEFT"); break; case WXK_NUMPAD_UP: res << wxT("UP"); break; case WXK_NUMPAD_RIGHT: res << wxT("RIGHT"); break; case WXK_NUMPAD_DOWN: res << wxT("DOWN"); break; case WXK_NUMPAD_HOME: res << wxT("HOME"); break; case WXK_NUMPAD_PAGEUP: res << wxT("PAGEUP"); break; case WXK_NUMPAD_PAGEDOWN: res << wxT("PAGEDOWN"); break; case WXK_NUMPAD_END: res << wxT("END"); break; case WXK_NUMPAD_BEGIN: res << wxT("BEGIN"); break; case WXK_NUMPAD_INSERT: res << wxT("INSERT"); break; case WXK_NUMPAD_DELETE: res << wxT("DELETE"); break; case WXK_NUMPAD_EQUAL: res << wxT("="); break; case WXK_NUMPAD_MULTIPLY: res << wxT("*"); break; case WXK_NUMPAD_ADD: res << wxT("+"); break; case WXK_NUMPAD_SEPARATOR: res << wxT("SEPARATOR"); break; case WXK_NUMPAD_SUBTRACT: res << wxT("-"); break; case WXK_NUMPAD_DECIMAL: res << wxT("."); break; case WXK_NUMPAD_DIVIDE: res << wxT("/"); break; } return res; } wxString wxKeyBind::KeyCodeToString(int keyCode, bool #if defined(__WXMSW__) inputUs #endif ) { wxString res; switch (keyCode) { // IGNORED KEYS // --------------------------- case WXK_START: case WXK_LBUTTON: case WXK_RBUTTON: case WXK_MBUTTON: case WXK_CLEAR: #ifndef wxKEYBINDER_ALLOW_PAUSE_KEY case WXK_PAUSE: #endif case WXK_NUMLOCK: case WXK_SCROLL : wxKBLogDebug(wxT("wxKeyBind::KeyCodeToString - ignored key: [%d]"), keyCode); return wxEmptyString; /* We want this behavior // these must be ABSOLUTELY ignored: they are key modifiers // we won't output any LOG message since these keys could be pressed // for long time while the user choose its preferred keycombination: // this would result into a long long queue of "ignored key" messages // which would be useless even in debug builds... case WXK_SHIFT: case WXK_CONTROL: return wxEmptyString; */ // FUNCTION KEYS // --------------------------- case WXK_F1: case WXK_F2: case WXK_F3: case WXK_F4: case WXK_F5: case WXK_F6: case WXK_F7: case WXK_F8: case WXK_F9: case WXK_F10: case WXK_F11: case WXK_F12: case WXK_F13: case WXK_F14: case WXK_F15: case WXK_F16: case WXK_F17: case WXK_F18: case WXK_F19: case WXK_F20: case WXK_F21: case WXK_F22: case WXK_F23: case WXK_F24: res << wxT('F') << keyCode - WXK_F1 + 1; break; // MISCELLANEOUS KEYS // --------------------------- case WXK_BACK: res << wxT("BACK"); break; case WXK_TAB: res << wxT("TAB"); break; case WXK_RETURN: res << wxT("RETURN"); break; case WXK_ESCAPE: res << wxT("ESCAPE"); break; case WXK_SPACE: res << wxT("SPACE"); break; case WXK_DELETE: res << wxT("DELETE"); break; case WXK_MULTIPLY: res << wxT("*"); break; case WXK_ADD: res << wxT("+"); break; case WXK_SEPARATOR: res << wxT("SEPARATOR"); break; case WXK_SUBTRACT: res << wxT("-"); break; case WXK_DECIMAL: res << wxT("."); break; case WXK_DIVIDE: res << wxT("/"); break; case WXK_PAGEUP: res << wxT("PAGEUP"); break; case WXK_PAGEDOWN: res << wxT("PAGEDOWN"); break; case WXK_LEFT: res << wxT("LEFT"); break; case WXK_UP: res << wxT("UP"); break; case WXK_RIGHT: res << wxT("RIGHT"); break; case WXK_DOWN: res << wxT("DOWN"); break; case WXK_SELECT: res << wxT("SELECT"); break; case WXK_PRINT: res << wxT("PRINT"); break; case WXK_EXECUTE: res << wxT("EXECUTE"); break; case WXK_SNAPSHOT: res << wxT("SNAPSHOT"); break; case WXK_INSERT: res << wxT("INSERT"); break; case WXK_HELP: res << wxT("HELP"); break; case WXK_CANCEL: res << wxT("CANCEL"); break; case WXK_MENU: res << wxT("MENU"); break; case WXK_CAPITAL: res << wxT("CAPITAL"); break; case WXK_END: res << wxT("END"); break; case WXK_HOME: res << wxT("HOME"); break; #ifdef wxKEYBINDER_ALLOW_PAUSE_KEY case WXK_PAUSE: res << wxT("PAUSE"); break; //pause added #endif case WXK_JOYLEFT: res << wxT("JOYLEFT"); break; case WXK_JOYRIGHT: res << wxT("JOYRIGHT"); break; case WXK_JOYUP: res << wxT("JOYUP"); break; case WXK_JOYDOWN: res << wxT("JOYDOWN"); break; case WXK_JOYW: res << wxT("JOYW"); break; case WXK_JOYX: res << wxT("JOYX"); break; case WXK_JOYY: res << wxT("JOYY"); break; case WXK_JOYZ: res << wxT("JOYY"); break; case WXK_JOY0: res << wxT("JOY0"); break; case WXK_JOY1: res << wxT("JOY1"); break; case WXK_JOY2: res << wxT("JOY2"); break; case WXK_JOY3: res << wxT("JOY3"); break; case WXK_JOY4: res << wxT("JOY4"); break; case WXK_JOY5: res << wxT("JOY5"); break; case WXK_JOY6: res << wxT("JOY6"); break; case WXK_JOY7: res << wxT("JOY7"); break; case WXK_CONTROL: res << wxT("CTRL"); break; case WXK_SHIFT: res << wxT("SHIFT"); break; case WXK_ALT: res << wxT("ALT"); break; default: // ASCII chars... #if defined(__WXMSW__) if ( keyCode & m_usLayoutBitMask && !inputUs ) { //this is a keycode in us layout. we could not find an equivalent in local layout. so just use it //and mark it as uslayout res << (wxChar)(keyCode & ~m_usLayoutBitMask) << wxKeyBind::m_usMarker; } else #endif if (keyCode < 256 #ifndef wxKEYBINDER_ALLOW_NON_ALPHANUM_KEYS && wxIsalnum(keyCode) #endif ) { #if defined(__WXMSW__) UINT transkey = keyCode; if ( inputUs ) transkey = wxMswKeyConverter::ConvertUsToLocal( keyCode ); if ( transkey ) res << (wxChar)transkey; else res << (wxChar)keyCode; //error in translation, use current char #else res << (wxChar)keyCode; #endif break; } else if ((res=NumpadKeyCodeToString(keyCode)) != wxEmptyString) { res << wxT(" (numpad)"); // so it is clear it's different from other keys break; } else { // we couldn't create a description for the given keycode... wxKBLogDebug(wxT("wxKeyBind::KeyCodeToString - unknown key: [%d]"), keyCode); return wxEmptyString; } } return res; } int wxKeyBind::StringToKeyCode(const wxString &keyName) { if ( keyName.StartsWith(wxT("0x")) ) { long value = 0; if ( !keyName.ToLong( &value, 16 ) ) { //error return (int)keyName.GetChar(0); } return static_cast( value ); } // a function key ? if (keyName.StartsWith(wxT("F")) && keyName.Len() > 1) { long n; keyName.Right(keyName.Len()-1).ToLong(&n); return WXK_F1+n-1; } // a special key ? if (keyName == wxT("BACK")) return WXK_BACK; if (keyName == wxT("ENTER")) return WXK_RETURN; if (keyName == wxT("RETURN")) return WXK_RETURN; if (keyName == wxT("TAB")) return WXK_TAB; if (keyName == wxT("ESCAPE")) return WXK_ESCAPE; if (keyName == wxT("SPACE")) return WXK_SPACE; if (keyName == wxT("DELETE")) return WXK_DELETE; if (keyName == wxT("INSERT")) return WXK_INSERT; if (keyName == wxT("HOME")) return WXK_HOME; if (keyName == wxT("END")) return WXK_END; if (keyName == wxT("PAGEUP")) return WXK_PAGEUP; if (keyName == wxT("PAGEDOWN")) return WXK_PAGEDOWN; if (keyName == wxT("RIGHT")) return WXK_RIGHT; if (keyName == wxT("LEFT")) return WXK_LEFT; if (keyName == wxT("UP")) return WXK_UP; if (keyName == wxT("DOWN")) return WXK_DOWN; if (keyName == wxT("CTRL")) return WXK_CONTROL; if (keyName == wxT("ALT")) return WXK_ALT; if (keyName == wxT("SHIFT")) return WXK_SHIFT; if (keyName == wxT("PAUSE")) return WXK_PAUSE; if (keyName == wxT("PRINT")) return WXK_PRINT; if (keyName == wxT("- (numpad)")) return WXK_NUMPAD_SUBTRACT; if (keyName == wxT("+ (numpad)")) return WXK_NUMPAD_ADD; if (keyName == wxT("* (numpad)")) return WXK_NUMPAD_MULTIPLY; if (keyName == wxT(". (numpad)")) return WXK_NUMPAD_DECIMAL; if (keyName == wxT("/ (numpad)")) return WXK_NUMPAD_DIVIDE; if (keyName == wxT("0 (numpad)")) return WXK_NUMPAD0; if (keyName == wxT("1 (numpad)")) return WXK_NUMPAD1; if (keyName == wxT("2 (numpad)")) return WXK_NUMPAD2; if (keyName == wxT("3 (numpad)")) return WXK_NUMPAD3; if (keyName == wxT("4 (numpad)")) return WXK_NUMPAD4; if (keyName == wxT("5 (numpad)")) return WXK_NUMPAD5; if (keyName == wxT("6 (numpad)")) return WXK_NUMPAD6; if (keyName == wxT("7 (numpad)")) return WXK_NUMPAD7; if (keyName == wxT("8 (numpad)")) return WXK_NUMPAD8; if (keyName == wxT("9 (numpad)")) return WXK_NUMPAD9; if (keyName == wxT("= (numpad)")) return WXK_NUMPAD_EQUAL; if (keyName == wxT("ENTER (numpad)")) return WXK_NUMPAD_ENTER; if (keyName == wxT("JOYLEFT")) return WXK_JOYLEFT; if (keyName == wxT("JOYRIGHT")) return WXK_JOYRIGHT; if (keyName == wxT("JOYUP")) return WXK_JOYUP; if (keyName == wxT("JOYDOWN")) return WXK_JOYDOWN; if (keyName == wxT("JOYW")) return WXK_JOYW; if (keyName == wxT("JOYX")) return WXK_JOYX; if (keyName == wxT("JOYY")) return WXK_JOYY; if (keyName == wxT("JOYZ")) return WXK_JOYZ; if (keyName == wxT("JOY0")) return WXK_JOY0; if (keyName == wxT("JOY1")) return WXK_JOY1; if (keyName == wxT("JOY2")) return WXK_JOY2; if (keyName == wxT("JOY3")) return WXK_JOY3; if (keyName == wxT("JOY4")) return WXK_JOY4; if (keyName == wxT("JOY5")) return WXK_JOY5; if (keyName == wxT("JOY6")) return WXK_JOY6; if (keyName == wxT("JOY7")) return WXK_JOY7; // it should be an ASCII key... int rc = static_cast( keyName.GetChar(0) ); if ( keyName.EndsWith( wxKeyBind::m_usMarker.Upper() ) ) rc |= wxKeyBind::m_usLayoutBitMask; return rc; } wxString wxKeyBind::KeyModifierToString(int keyModifier) { wxString result; if (keyModifier & wxACCEL_ANY) result += wxT("Any+"); else { if (keyModifier & wxACCEL_CTRL) result += wxT("Ctrl+"); if (keyModifier & wxACCEL_ALT) result += wxT("Alt+"); if (keyModifier & wxACCEL_SHIFT) result += wxT("Shift+"); if (keyModifier & wxACCEL_META) result += wxT("Meta+"); } return result; } int wxKeyBind::StringToKeyModifier(const wxString &keyModifier) { int mod = 0; // this search must be case-insensitive wxString str = keyModifier; str.MakeUpper(); if (str.Contains(wxT("ALT+"))) mod |= wxACCEL_ALT; if (str.Contains(wxT("CTRL+"))) mod |= wxACCEL_CTRL; if (str.Contains(wxT("SHIFT+"))) mod |= wxACCEL_SHIFT; if (str.Contains(wxT("ANY+"))) mod |= wxACCEL_ANY; if (str.Contains(wxT("META+"))) mod |= wxACCEL_META; return mod; } int wxKeyBind::GetKeyModifier(wxKeyEvent &event) { int mod = 0; if (event.AltDown()) mod |= wxACCEL_ALT; if (event.ControlDown()) mod |= wxACCEL_CTRL; if (event.ShiftDown()) mod |= wxACCEL_SHIFT; return mod; } wxString wxKeyBind::GetKeyStrokeString(wxKeyEvent &event) { // key stroke string = key modifiers (Ctrl, Alt or Shift) + key code event.GetRawKeyCode(); bool inputUs = false; #if defined(__WXMSW__) && !wxCHECK_VERSION(3, 0, 0) //TODO: check version (3?). we will probably get already local ascii chars in that version. inputUs = true; #endif const wxString str = KeyCodeToString(event.GetKeyCode(), inputUs); int mods = GetKeyModifier(event); //delete modifiers if the actual key is a modifier key if ( event.GetKeyCode() == WXK_CONTROL ) { mods &= ~wxACCEL_CTRL; } if ( event.GetKeyCode() == WXK_SHIFT ) { mods &= ~wxACCEL_SHIFT; } if ( event.GetKeyCode() == WXK_ALT ) { mods &= ~wxACCEL_ALT; } return KeyModifierToString(mods) + str; } // ---------------------------------------------------------------------------- // wxKeyBind // ---------------------------------------------------------------------------- bool wxKeyBind::MatchKey(const wxKeyEvent &key) const { bool b = (key.GetKeyCode() == m_nKeyCode); // all the flags must match b &= (key.AltDown() == ((m_nFlags & wxACCEL_ALT) != 0)); b &= (key.ControlDown() == ((m_nFlags & wxACCEL_CTRL) != 0)); b &= (key.ShiftDown() == ((m_nFlags & wxACCEL_SHIFT) != 0)); return b; } // -------------------- // wxCmd // -------------------- // static wxCmd::wxCmdType *wxCmd::FindCmdType(int type) { int found = -1; for (int i=0; i < m_nCmdTypes; i++) if (m_arrCmdType[i].type == type) found = i; if (found == -1) return NULL; return &m_arrCmdType[found]; } // static wxCmd *wxCmd::CreateNew(int type, int id) { wxCmdType *found = FindCmdType(type); if (!found) return NULL; // get the creation function address wxCmdCreationFnc fnc = found->cmdCreateFnc; wxASSERT(fnc); // for debug builds if (!fnc) return NULL; // for release builds // create the wxCmd-derived class & init it wxCmd *ret = fnc(id); wxASSERT(ret); // for debug builds if (!ret) return NULL; // for release builds ret->Update(); return ret; } // static void wxCmd::AddCmdType(int type, wxCmdCreationFnc f) { if (FindCmdType(type) != NULL) return; // already registered m_arrCmdType[m_nCmdTypes].type = type; m_arrCmdType[m_nCmdTypes].cmdCreateFnc = f; m_nCmdTypes++; } bool wxCmd::Save(wxConfigBase *p, const wxString &key, bool bCleanOld) const { // build the shortcut string separing each one with a "|" wxString shortcuts; for (int j=0; j < GetShortcutCount(); j++) shortcuts += GetShortcut(j)->GetStr() + wxT("|"); // write the entry in the format NAME|DESC|SHORTCUT1|SHORTCUT2...|SHORTCUTn wxString value = wxFormat(wxT("%s|%s|%s") ) % GetName() % GetDescription() % shortcuts; // does the given key already exists ? if (bCleanOld && p->Exists(key)) p->DeleteEntry(key); // delete old stuff... return p->Write(key, value); } bool wxCmd::Load(wxConfigBase *p, const wxString &key) { wxString fmt; if (!p->Read(key, &fmt, wxT("|"))) return FALSE; // extract name & desc wxStringTokenizer tknzr(fmt, wxT("|")); m_strName = tknzr.GetNextToken(); m_strDescription = tknzr.GetNextToken(); if (m_strName.IsEmpty()) return FALSE; // this is an invalid entry... // the ID of this command should have been already set by the caller // which created us... wxASSERT_MSG(m_nId != wxID_INVALID, wxT("ID must be set while creating of this wxCmd")); // extract the keybindings... while (tknzr.HasMoreTokens()) AddShortcut(tknzr.GetNextToken()); Update(); return TRUE; } // -------------------- // wxCmdArray // -------------------- void wxCmdArray::Remove(size_t n) { if ( n >= GetCount()) return; // first, delete the memory associated with the n-th wxCmd delete Item(n); // then, remove that pointer from the array m_arr.RemoveAt(n); } void wxCmdArray::Clear() { for (size_t i=GetCount(); i > 0; i--) Remove(0); // the array should be already empty m_arr.Clear(); } // ---------------------------------------------------------------------------- // wxBinderEvtHandler // ---------------------------------------------------------------------------- void wxBinderEvtHandler::OnChar(wxKeyEvent &p) { // we'll just call the wxKeyBinder OnChar function telling it // to execute the command on the next handler in the chain... // we do this because only wxKeyBinder holds the array of // commands & command-shortcuts... m_pBinder->OnChar(p, GetNextHandler()); } // ---------------------------------------------------------------------------- // wxKeyBinder // ---------------------------------------------------------------------------- wxBinderEvtHandler *wxKeyBinder::FindHandlerFor(wxWindow *p) const { int idx = FindHandlerIdxFor(p); if (idx == wxNOT_FOUND) return NULL; return (wxBinderEvtHandler *)m_arrHandlers.Item(idx); } int wxKeyBinder::FindHandlerIdxFor(wxWindow *p) const { for (int i=0; i<(int)m_arrHandlers.GetCount(); i++) if (((wxBinderEvtHandler *)m_arrHandlers.Item(i))->IsAttachedTo(p)) return i; return wxNOT_FOUND; } void wxKeyBinder::Attach(wxWindow *p) { if (!p || IsAttachedTo(p)) return; // already attached !!! if (p->GetExtraStyle() & wxWS_EX_TRANSIENT) return; // do not attach ourselves to temporary windows !! wxKBLogDebug(wxT("wxKeyBinder::Attach - attaching to [%s]"), p->GetName().wx_str()); // create a new event handler for this window wxEvtHandler *h = new wxBinderEvtHandler(this, p); // add the handler to our lists m_arrHandlers.Add((void*)h); // we need to update our commands... UpdateAllCmd(); } void wxKeyBinder::AttachRecursively(wxWindow *p) { if (!p) return; Attach(p); // this is the standard way wxWidgets uses to iterate through children... for (wxWindowList::compatibility_iterator node = p->GetChildren().GetFirst(); node; node = node->GetNext()) { // recursively attach each child wxWindow *win = (wxWindow *)node->GetData(); if (win) AttachRecursively(win); } } void wxKeyBinder::Detach(wxWindow *p) { if (!p || !IsAttachedTo(p)) return; // this is not attached... wxKBLogDebug(wxT("wxKeyBinder::Detach - detaching from [%s]"), p->GetName().wx_str()); // remove the event handler int idx = FindHandlerIdxFor(p); wxBinderEvtHandler *toremove = (wxBinderEvtHandler*)m_arrHandlers.Item(idx); m_arrHandlers.RemoveAt(idx, 1); // the wxBinderEvtHandler will remove itself from p's event handlers delete toremove; } void wxKeyBinder::DetachAll() { wxKBLogDebug(wxT("wxKeyBinder::DetachAll - detaching from all my [%d] targets"), (int)GetAttachedWndCount()); // delete all handlers (they will automatically remove themselves from // event handler chains) for (int i=0; i < (int)m_arrHandlers.GetCount(); i++) delete (wxBinderEvtHandler*)m_arrHandlers.Item(i); // and clear the array m_arrHandlers.Clear(); } void wxKeyBinder::OnChar(wxKeyEvent &event, wxEvtHandler *next) { // this is the first function which is called when the user presses // a key in the window Attach()ed to this key binder: we have to // find if the given keyevent matches a key shortcut and eventually // exec the command associated with that shortcut... wxCmd *p = GetMatchingCmd(event); // AVOID TO INTERCEPT Alt+F4 KEYPRESSES !!! // For some reasons on wxMSW 2.5.2 (at least) this provokes a crash // which is really difficult to spot... better leave it... if (p && p->IsBindTo(wxKeyBind(wxT("Alt+F4")))) { wxKBLogDebug(wxT("wxKeyBinder::OnChar - ignoring an Alt+F4 event [%d]"), event.GetKeyCode()); event.Skip(); return; } #if 0 // for some reason we need to avoid processing also of the ENTER keypresses... if (p && p->IsBindTo(wxKeyBind(wxT("ENTER")))) { wxKBLogDebug(wxT("wxKeyBinder::OnChar - ignoring an ENTER event [%d]"), event.GetKeyCode()); event.Skip(); return; } #endif // if the given event is not a shortcut key... if (p == NULL) { wxKBLogDebug(wxT("wxKeyBinder::OnChar - ignoring this keyevent [%d]"), event.GetKeyCode()); event.Skip(); // ... skip it } else { wxEvtHandler *client = next;//this->GetNextHandler(); /*if (client == NULL) { //int found = -1; for (int i=0; i < (int)m_arrAttachedWnd.GetCount(); i++) if (((wxWindow*)m_arrAttachedWnd.Item(i)) == event.GetEventObject())//->GetId() == event.GetId()) client = (wxWindow*)m_arrAttachedWnd.Item(i); }*/ if (client == NULL) { wxKBLogDebug(wxT("wxKeyBinder::OnChar - ignoring this keyevent [%d] because I'm not ") wxT("attached to the window which generated the keypress..."), event.GetKeyCode()); event.Skip(); // ... skip it return; } wxKBLogDebug(wxT("wxKeyBinder::OnChar - calling the Exec() function of the [%s] ") wxT("wxCmd on the keycode [%d] (event timestamp: %d)"), p->GetName().wx_str(), event.GetKeyCode(), event.GetTimestamp()); p->Exec(event.GetEventObject(), // otherwise, tell wxCmd to send the client); // associated wxEvent to the next handler in the chain } } bool wxKeyBinder::Save(wxConfigBase *cfg, const wxString &key, bool bCleanOld) const { wxString basekey = (key.IsEmpty() ? wxString(wxT("")) : wxString(key + wxT("/"))); bool b = TRUE; // does the given key already exists ? if (bCleanOld && cfg->Exists(basekey)) cfg->DeleteGroup(basekey); // delete old stuff... for (size_t i=0; i < m_arrCmd.GetCount(); i++) { wxCmd *curr = m_arrCmd.Item(i); // write the key in the format: bindID-typeID wxString keyname = wxFormat(wxT("%s%s%d-type%d") ) % basekey % wxCMD_CONFIG_PREFIX % curr->GetId() % curr->GetType(); // save this wxCmd... b &= curr->Save(cfg, keyname); } return b; } #include #include void wxKeyBinder::PrintOrdering() const { wxFileOutputStream outstream( wxT("D:\\out.txt") ); for (size_t i=0; i < m_arrCmd.GetCount(); i++) { wxCmd& curr = *m_arrCmd.Item(i); for( int j=0; j < curr.GetShortcutCount(); ++j ) { wxKeyBind& kb = *curr.GetShortcut( j ); wxLogError( wxT("%d - %s - %s"), kb.GetOrderIndex(), curr.GetName().c_str(), kb.GetStr().c_str() ); } } wxLogError( wxT("-----------------") ); } void wxKeyBinder::CommitOrdering( const CommandOrderDlg::ListIndexCmdMap& cmds ) { //PrintOrdering(); typedef std::set IdxList; IdxList idxList; IdxList idxListAny; { for( CommandOrderDlg::ListIndexCmdMap::const_iterator iter = cmds.begin(); iter != cmds.end(); ++iter ) { if ( !iter->second.any ) idxList.insert( iter->second.globalSortIdx ); else idxListAny.insert( iter->second.globalSortIdx ); } } typedef std::map SortLookup; SortLookup sortLook; SortLookup sortLookAny; //give new sort indices to non-any keys we dont want to modify size_t nextId = 1; for (size_t i=0; i < m_arrCmd.GetCount(); i++) { wxCmd& curr = *m_arrCmd.Item(i); for( int j=0; j < curr.GetShortcutCount(); ++j ) { wxKeyBind& kb = *curr.GetShortcut( j ); if ( kb.HasAnyModifier() ) continue; IdxList::const_iterator fiter = idxList.find( kb.GetOrderIndex() ); if ( fiter != idxList.end() ) continue; sortLook[ kb.GetOrderIndex() ] = nextId++; } } //give new sort indices to any keys we dont want to modify size_t nextIdAny = 1; for (size_t i=0; i < m_arrCmd.GetCount(); i++) { wxCmd& curr = *m_arrCmd.Item(i); for( int j=0; j < curr.GetShortcutCount(); ++j ) { wxKeyBind& kb = *curr.GetShortcut( j ); if ( !kb.HasAnyModifier() ) continue; IdxList::const_iterator fiter = idxListAny.find( kb.GetOrderIndex() ); if ( fiter != idxListAny.end() ) continue; sortLookAny[ kb.GetOrderIndex() ] = nextIdAny++; } } { //build sort lookup maps for the keys which we will change for( CommandOrderDlg::ListIndexCmdMap::const_iterator iter = cmds.begin(); iter != cmds.end(); ++iter ) { if ( !iter->second.any ) sortLook[ iter->second.globalSortIdx ] = nextId++; else sortLookAny[ iter->second.globalSortIdx ] = nextIdAny++; } } for (size_t i=0; i < m_arrCmd.GetCount(); i++) { wxCmd& curr = *m_arrCmd.Item(i); for( int j=0; j < curr.GetShortcutCount(); ++j ) { wxKeyBind& kb = *curr.GetShortcut( j ); size_t newIdx = 0; if ( kb.HasAnyModifier() ) { newIdx = sortLookAny.find( kb.GetOrderIndex() )->second; } else { newIdx = sortLook.find( kb.GetOrderIndex() )->second; } kb.SetOrderIndex( newIdx ); } } //PrintOrdering(); } bool wxKeyBinder::Load(wxConfigBase *p, const wxString &key) { wxString str; bool cont; bool b = TRUE; int total = 0; long idx; // before starting... p->SetPath(key); m_arrCmd.Clear(); cont = p->GetFirstEntry(str, idx); while (cont) { // try to decode this entry if (str.StartsWith(wxCMD_CONFIG_PREFIX)) { wxString id(str.BeforeFirst(wxT('-'))); wxString type(str.AfterFirst(wxT('-'))); id = id.Right(id.Len()-wxString(wxCMD_CONFIG_PREFIX).Len()); type = type.Right(type.Len()-wxString(wxT("type")).Len()); // is this a valid entry ? if (id.IsNumber() && type.IsNumber() && p->GetEntryType(str) == wxConfigBase::Type_String) { // we will interpret this group as a command ID int nid = wxAtoi(id); int ntype = wxAtoi(type); // create & load this command wxCmd *cmd = wxCmd::CreateNew(ntype, nid); if (!cmd || !cmd->Load(p, str)) { cont = FALSE; break; } m_arrCmd.Add(cmd); // add to the array total++; } } // proceed with next entry (if it does exist) cont &= p->GetNextEntry(str, idx); } return (b && total > 0); } // ---------------------------------------------------------------------------- // wxKeyProfile // ---------------------------------------------------------------------------- bool wxKeyProfile::Save(wxConfigBase *cfg, const wxString &key, bool bCleanOld) const { // we will encode our name into the key used to group all this profile wxString basekey = key.IsEmpty() ? wxString(wxT("")) : wxString(key + wxT("/")); // does the given key already exists ? if (bCleanOld && cfg->Exists(basekey)) cfg->DeleteGroup(basekey); // delete old stuff... // write our name & description into a specific key if (!cfg->Write(basekey + wxT("/desc"), GetDesc())) return FALSE; if (!cfg->Write(basekey + wxT("/name"), GetName())) return FALSE; // tell wxKeyBinder to save all keybindings into a group with our name // and also tell it NOT to delete the given key if it already exists // because it ALWAYS exists since we've just created it... return wxKeyBinder::Save(cfg, basekey, FALSE); } bool wxKeyProfile::Load(wxConfigBase *p, const wxString &key) { p->SetPath(key); // enter into this group wxString name; wxString desc; // do we have valid DESC & NAME entries ? if (p->HasEntry(wxT("desc")) && p->HasEntry(wxT("name"))) { if (!p->Read(wxT("desc"), &desc)) return FALSE; if (!p->Read(wxT("name"), &name)) return FALSE; // check for valid name & desc if (name.IsEmpty()) return FALSE; SetName(name); SetDesc(desc); // load from current path (we cannot use '.') return wxKeyBinder::Load(p, wxT("../") + key); } return FALSE; // no valid DESC/NAME entry... } // ---------------------------------------------------------------------------- // wxKeyProfileArray // ---------------------------------------------------------------------------- bool wxKeyProfileArray::Save(wxConfigBase *cfg, const wxString &key, bool bCleanOld) const { wxString basekey = (key.IsEmpty()) ? wxString(wxT("")) : wxString(key + wxT("/")); bool b = TRUE; cfg->SetPath(key); if (!cfg->Write(basekey + wxT("nSelProfile"), m_nSelected )) return FALSE; for (size_t i=0; iSave(cfg, basekey + wxKEYPROFILE_CONFIG_PREFIX + wxFormat(wxT("%d") ) % (int)i, bCleanOld); // if required, remove any previously stored key profile... if (bCleanOld) { // the Save() calls could have changed our current path... cfg->SetPath(key); // enumerate all groups wxString str; long n, idx; bool cont = cfg->GetFirstGroup(str, idx); while (cont) { if (str.StartsWith(wxKEYPROFILE_CONFIG_PREFIX)) { // extract the id of this group... wxString id=str.Right(str.Len()-wxString(wxKEYPROFILE_CONFIG_PREFIX).Len()); id.ToLong(&n); if (n >= (long)GetCount()) { // this is a profile which was saved in a previous session // but which has now been removed by the user... remove it // from our config settings... cfg->DeleteGroup(str); // re-start our enumeration; otherwise GetNextGroup() won't work... cont = cfg->GetFirstGroup(str, idx); if (!cont) break; } } // proceed with next one... cont &= cfg->GetNextGroup(str, idx); } } return b; } bool wxKeyProfileArray::Load(wxConfigBase *p, const wxString &key) { wxKeyProfile tmp; wxString str; bool cont; long idx; // before starting... p->SetPath(key); if (!p->Read(wxT("nSelProfile"), ( &m_nSelected ) )) return FALSE; cont = p->GetFirstGroup(str, idx); while (cont) { // try to decode this group name if (str.StartsWith(wxKEYPROFILE_CONFIG_PREFIX)) { // is this a valid entry ? if (!tmp.Load(p, str)) return FALSE; Add(new wxKeyProfile(tmp)); // yes, it is; add it to the array } // set the path again (it could have been changed...) p->SetPath(key); // proceed with next entry (if it does exist) cont &= p->GetNextGroup(str, idx); } return TRUE; } // ---------------------------------------------------------------------------- // wxKeyConfigPanel - BUILD functions // ---------------------------------------------------------------------------- bool wxKeyConfigPanel::Create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name, const wxString& customButton1Label, const wxObjectEventFunction customButton1Event, const wxString& customButton2Label, const wxObjectEventFunction customButton2Event, const wxString& customLabelText ) { if (!wxPanel::Create(parent, id, pos, size, style, name)) return false; m_eFilterState = FS_ALL; m_bProfileHasBeenModified = FALSE; m_bProfileModifiedOrChanged = FALSE; wxASSERT_MSG(HasFlag(wxKEYBINDER_USE_LISTBOX) || HasFlag(wxKEYBINDER_USE_TREECTRL), wxT("You must specify one of the two !!")); wxASSERT_MSG(!(HasFlag(wxKEYBINDER_USE_LISTBOX) && HasFlag(wxKEYBINDER_USE_TREECTRL)), wxT("You cannot specify them both !!")); if ( customButton1Label.size() > 0 && customButton1Event ) { m_pCustomButton1 = new wxButton( this, wxID_ANY, customButton1Label, wxPoint(20, 20) ); m_pCustomButton1->Connect( wxEVT_COMMAND_BUTTON_CLICKED, customButton1Event, NULL, parent ); } if ( customButton2Label.size() > 0 && customButton2Event ) { m_pCustomButton2 = new wxButton( this, wxID_ANY, customButton2Label, wxPoint(20, 20) ); m_pCustomButton2->Connect( wxEVT_COMMAND_BUTTON_CLICKED, customButton2Event, NULL, parent ); } wxCustomLabelText = customLabelText; // build everything BuildCtrls(); wxSizer *column1 = BuildColumn1(); wxSizer *column2 = BuildColumn2(); wxSizer *main = BuildMain(column1, column2, HasFlag(wxKEYBINDER_SHOW_APPLYBUTTON) != 0); // set the final sizer as window's sizer // SetSizer(main); // main->SetSizeHints(this); SetSizerAndFit(main); m_pBindings->Connect(wxEVT_CONTEXT_MENU, wxContextMenuEventHandler(wxKeyConfigPanel::OnContextMenuKeyList),NULL,this); // set up the controls: the user of the panel must call one of the // ImportXXXX() functions to enable the use of the panel !!!! GetMainCtrl()->SetFocus(); UpdateButtons(); return true; } wxKeyConfigPanel::~wxKeyConfigPanel() { this->RemoveAllProfiles(); } void wxKeyConfigPanel::BuildCtrls() { if (HasFlag(wxKEYBINDER_USE_TREECTRL)) { // use a wxTreeCtrl to show the commands hierarchy m_pCommandsTree = new wxTreeCtrl(this, wxKEYBINDER_COMMANDS_BOX_ID, wxDefaultPosition, wxSize(-1, 200), wxTR_HAS_BUTTONS | wxSUNKEN_BORDER); m_pCommandsTree->Connect(wxEVT_CONTEXT_MENU, wxContextMenuEventHandler(wxKeyConfigPanel::OnContextMenuCmdList),NULL,this); } else { // use a combobox + a listbox m_pCommandsList = new wxListBox(this, wxKEYBINDER_COMMANDS_BOX_ID, wxDefaultPosition, wxDefaultSize, (int)0, (const wxString *)NULL); m_pCategories = new wxComboBox(this, wxKEYBINDER_CATEGORIES_ID, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY); } m_pKeyField = new wxKeyMonitorTextCtrl(this, wxKEYBINDER_KEY_FIELD_ID); m_pBindings = new wxListBox(this, wxKEYBINDER_BINDINGS_BOX_ID); m_pAssignBtn = new wxButton(this, wxKEYBINDER_ASSIGN_KEY_ID, wxT("&Add")); m_pRemoveBtn = new wxButton(this, wxKEYBINDER_REMOVE_KEY_ID, wxT("&Remove")); m_pRemoveAllBtn = new wxButton(this, wxKEYBINDER_REMOVEALL_KEY_ID, wxT("Remove all")); m_pCurrCmdField = new wxStaticText( this, -1, wxT(""), wxDefaultPosition, wxSize(-1, 20), wxSIMPLE_BORDER | wxST_NO_AUTORESIZE | wxALIGN_CENTRE); // we won't make it white because it must be clear to the user that this // is not a text control... m_pCurrCmdField->SetBackgroundColour(wxColour(200, 200, 200)); #ifdef __WXGTK__ m_pDescLabel = new wxTextCtrl(this, -1, wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY | wxTE_MULTILINE); #else m_pDescLabel = new wxStaticText(this, -1, wxT(""), wxDefaultPosition, wxSize(-1, 40), wxSIMPLE_BORDER | wxST_NO_AUTORESIZE); m_pDescLabel->SetBackgroundColour(wxColour(255, 255, 255)); #endif // KEY PROFILES // create the key profiles combobox & panel m_bEnableKeyProfiles = TRUE; // the style of a combobox must be set at the beginning: // you cannot change the wxCB_READONLY flag presence later... // VERY IMPORTANT: *NEVER* ADD THE CB_SORT STYLE: // IT WOULD GIVE US GREAT PROBLEMS WHEN EDITING THE KEYPROFILE... long style = HasFlag(wxKEYBINDER_ENABLE_PROFILE_EDITING) ? 0 : wxCB_READONLY; m_pKeyProfiles = new wxComboBox(this, wxKEYBINDER_KEYPROFILES_ID, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, style); wxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); sizer->Add(m_pKeyProfiles, 6, wxGROW); if (HasFlag(wxKEYBINDER_SHOW_ADDREMOVE_PROFILE)) { // create the Add & remove profile buttons sizer->Add(new wxButton(this, wxKEYBINDER_ADD_PROFILEBTN_ID, wxT("Add new")), 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5); sizer->Add(new wxButton(this, wxKEYBINDER_REMOVE_PROFILEBTN_ID, wxT("Remove")), 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5); } m_pKeyProfilesSizer = new wxBoxSizer(wxVERTICAL); m_pKeyProfilesSizer->Add(new wxStaticText(this, -1, wxT("Key profile:")), 0, wxGROW | wxALL, 5); m_pKeyProfilesSizer->Add(sizer, 0, wxGROW | wxLEFT | wxRIGHT, 5); m_pKeyProfilesSizer->Add(new wxStaticLine(this, -1), 0, wxGROW | wxALL, 5); } wxSizer *wxKeyConfigPanel::BuildColumn1() { // FIRST COLUMN: "Groups" wxBoxSizer *column1 = new wxBoxSizer(wxVERTICAL); if (HasFlag(wxKEYBINDER_USE_TREECTRL)) { // add the treectrl column1->Add(new wxStaticText(this, -1, wxT("Commands:")), 0, wxGROW | wxALL, 5); column1->Add(m_pCommandsTree, 1, wxGROW | wxRIGHT | wxLEFT | wxBOTTOM, 5); } else { // add a combobox + listbox column1->Add(new wxStaticText(this, -1, wxT("Categories:")), 0, wxGROW | wxALL, 5); column1->Add(m_pCategories, 1, wxGROW | wxRIGHT | wxLEFT | wxBOTTOM, 5); column1->Add(new wxStaticText(this, -1, wxT("Commands:")), 0, wxGROW | wxRIGHT | wxLEFT | wxBOTTOM, 5); column1->Add(m_pCommandsList, 5, wxGROW | wxRIGHT | wxLEFT | wxBOTTOM, 5); } if ( m_pCustomButton1 ) { column1->Add( new wxStaticText(this, -1, wxCustomLabelText ), 0, wxGROW | wxALL, 5 ); wxSizer* pS = new wxBoxSizer( wxHORIZONTAL ); pS->Add(m_pCustomButton1, 0, wxGROW | wxALL, 5); pS->Add(m_pCustomButton2, 0, wxGROW | wxALL, 5); column1->Add(pS); } return column1; } wxSizer *wxKeyConfigPanel::BuildColumn2() { // SECOND COLUMN: wxT("Current keys") + "Press new shortcut key" wxBoxSizer *column2 = new wxBoxSizer(wxVERTICAL); column2->Add(new wxStaticText(this, -1, wxT("Current shortcuts:")), 0, wxGROW | wxALL, 5); column2->Add(m_pBindings, 2, wxGROW | wxRIGHT | wxLEFT, 5); wxBoxSizer *removebtns = new wxBoxSizer(wxHORIZONTAL); removebtns->Add(m_pRemoveBtn, 1, wxGROW | wxALL, 5); removebtns->Add(m_pRemoveAllBtn, 1, wxGROW | wxALL, 5); column2->Add(removebtns, 0, wxGROW); //column2->Add(new wxStaticLine(this, -1), 0, wxGROW | wxALL, 10); column2->Add(new wxStaticText(this, -1, wxT("New shortcut:")), 0, wxGROW | wxALL, 5); column2->Add(m_pKeyField, 0, wxGROW | wxLEFT | wxRIGHT, 5); column2->Add(new wxStaticText(this, -1, wxT("Currently assigned to:")), 0, wxGROW | wxALL, 5); column2->Add(m_pCurrCmdField, 0, wxGROW | wxLEFT | wxRIGHT, 5); column2->Add(m_pAssignBtn, 0, wxGROW | wxALL, 5); return column2; } wxSizer *wxKeyConfigPanel::BuildMain(wxSizer *column1, wxSizer *column2, bool bApplyBtn) { // set up the column container wxBoxSizer *cont = new wxBoxSizer(wxHORIZONTAL); cont->Add(column1, 4, wxGROW); cont->Add(1, 1, 0, wxGROW); cont->Add(column2, 4, wxGROW); // create the main sizer wxBoxSizer *main = new wxBoxSizer(wxVERTICAL); main->Add(m_pKeyProfilesSizer, 0, wxGROW); main->Add(cont, 5, wxGROW); main->Add(new wxStaticLine(this, -1), 0, wxGROW | wxALL, 5); // key description main->Add(new wxStaticText(this, -1, wxT("Description:")), 0, wxGROW | wxALL, 5); #ifdef __WXGTK__ main->Add(m_pDescLabel, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5); #else main->Add(m_pDescLabel, 1, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5); #endif // if required, add Apply and Cancel buttons if (bApplyBtn) { wxBoxSizer *btn = new wxBoxSizer(wxHORIZONTAL); wxButton *applyBtn = new wxButton(this, wxID_APPLY, wxT("A&pply")); wxButton *cancelBtn = new wxButton(this, wxID_CANCEL, wxT("C&ancel")); // create the button panel with some interleaved spacer btn->Add(1, 1, 1, wxGROW); btn->Add(applyBtn, 4, wxGROW | wxALL, 5); btn->Add(1, 1, 1, wxGROW); btn->Add(cancelBtn, 4, wxGROW | wxALL, 5); btn->Add(1, 1, 1, wxGROW); main->Add(1, 1, 0, wxGROW); main->Add(btn, 1, wxGROW | wxALL, 5); } return main; } // ---------------------------------------------------------------------------- // wxKeyConfigPanel - IMPORT functions // ---------------------------------------------------------------------------- void wxKeyConfigPanel::ImportRawList(const ControlMap& itemMap, const wxString &rootname) { m_commandMap = itemMap; m_sRootName = rootname; FillCommandTree(); } void wxKeyConfigPanel::FillCommandTree() { if (!IsUsingTreeCtrl()) { //not supported return; } const wxString& prevSelCmd = this->GetSelCmdStr(); // do some std things... Reset(); AddRootIfMissing(m_sRootName); wxTreeItemId rootid = m_pCommandsTree->GetRootItem(); for( ControlMap::const_iterator iter = m_commandMap.begin(); iter != m_commandMap.end(); ++iter ) { wxTreeItemId newId = m_pCommandsTree->AppendItem(rootid, iter->first); for( CommandList::const_iterator iiter = iter->second.begin(); iiter != iter->second.end(); ++iiter ) { bool add = false; if ( this->m_eFilterState == FS_ALL ) { add = true; } else if ( this->m_eFilterState == FS_HIDE_EMPTY ) { if ( m_kBinder.ContainsCommand( iiter->first ) ) add = true; } else if ( this->m_eFilterState == FS_DIFF_ONLY ) { const wxKeyProfile* pDefaultProf = GetProfile(0); const wxKeyProfile* pCurProf = this->GetSelProfile(); if ( (*pCurProf->GetCommandByName( iiter->first )) != (*pDefaultProf->GetCommandByName( iiter->first )) ) add = true; } if ( !add ) continue; wxExTreeItemData *treedata = new wxExTreeItemData(iiter->second); m_pCommandsTree->AppendItem(newId, iiter->first, -1, -1, treedata ); m_pCommandsTree->SortChildren(newId); } } m_pCommandsTree->SortChildren( rootid ); //try to select the previously selected command SelectCommand( prevSelCmd ); // expand the root (just for aesthetic/comfort reasons)... m_pCommandsTree->Expand(m_pCommandsTree->GetRootItem()); } // ---------------------------------------------------------------------------- // wxKeyConfigPanel - MISCELLANEOUS functions // ---------------------------------------------------------------------------- void wxKeyConfigPanel::AddProfile(const wxKeyProfile &p, bool markAsChanged) { // add a new profile to the array m_pKeyProfiles->Append(p.GetName(), (void *)(new wxKeyProfile(p))); if (m_pKeyProfiles->GetCount() == 1) // the profile we added is the only one present... select it SetSelProfile(0); if (markAsChanged) this->m_bProfileModifiedOrChanged = true; } void wxKeyConfigPanel::AddProfiles(const wxKeyProfileArray &arr) { // copy the given profiles into the listbox data list for (size_t i=0; i < arr.GetCount(); i++) { wxKeyProfile *copy = new wxKeyProfile(*arr.Item(i)); m_pKeyProfiles->Append(arr.Item(i)->GetName(), (void *)copy); } SetSelProfile( arr.GetSelProfileIdx() ); } void wxKeyConfigPanel::RemoveAllProfiles() { // with the AddXXXXX functions we created wxKeyProfiles which we // then added into the m_pKeyProfiles combobox... we now must delete them. for (size_t i=0; i < m_pKeyProfiles->GetCount(); i++) { wxKeyProfile *data = (wxKeyProfile *)static_cast(m_pKeyProfiles)->GetClientData(i); // we can delete the client data safely because wxComboBox will leave // the client data field untouched... if (data) delete data; } m_pKeyProfiles->Clear(); } wxTreeItemId wxKeyConfigPanel::FindTreeItem( wxTreeItemId root, const wxString& sSearchFor ) { wxTreeItemIdValue cookie; wxTreeItemId search; wxTreeItemId item = m_pCommandsTree->GetFirstChild( root, cookie ); wxTreeItemId child; while( item.IsOk() ) { wxString sData = m_pCommandsTree->GetItemText(item); if( sSearchFor.Cmp(sData) == 0 ) { return item; } if( m_pCommandsTree->ItemHasChildren( item ) ) { wxTreeItemId search = FindTreeItem( item, sSearchFor ); if( search.IsOk() ) { return search; } } item = m_pCommandsTree->GetNextChild( root, cookie); } /* Not found */ wxTreeItemId dummy; return dummy; } void wxKeyConfigPanel::SelectCommand( const wxString& cmd ) { wxTreeItemId id = this->FindTreeItem( m_pCommandsTree->GetRootItem(), cmd ); if ( id != wxTreeItemId() ) { m_pCommandsTree->SelectItem( id ); } } void wxKeyConfigPanel::SelectKeyString( const wxString& keyStr ) { for ( unsigned i = 0; i < this->m_pBindings->GetCount(); ++i ) { if ( this->m_pBindings->GetString( i ) == keyStr ) { this->m_pBindings->Select( i ); this->UpdateButtons(); return; } } } void wxKeyConfigPanel::SetSelProfile(int n) { wxASSERT(m_pKeyProfiles && n >= 0 && n < (int)m_pKeyProfiles->GetCount()); m_pKeyProfiles->SetSelection(n); m_nCurrentProf = n; // generate a fake event: SetSelection does not generate it wxCommandEvent ev; OnProfileSelected(ev); } void wxKeyConfigPanel::Reset() { if (IsUsingTreeCtrl()) { m_pCommandsTree->DeleteAllItems(); } else { m_pCommandsList->Clear(); m_pCategories->Clear(); } m_pBindings->Clear(); #ifdef __WXGTK__ m_pDescLabel->Clear(); #else m_pDescLabel->SetLabel(wxT("")); #endif m_pKeyField->Clear(); } void wxKeyConfigPanel::AddRootIfMissing(const wxString &rootname) { wxASSERT(IsUsingTreeCtrl()); // this function is treectrl-specific if (!m_pCommandsTree->GetRootItem().IsOk()) { // I don't know what happens if we try to create the root // of the control while there are still some items in the // control... even if I don't think some items maybe // present in the control if the root is not okay.... m_pCommandsTree->DeleteAllItems(); m_pCommandsTree->AddRoot(rootname); } } wxCmd *wxKeyConfigPanel::GetSelCmd() const { long id; if (IsUsingTreeCtrl()) { wxTreeItemId treeid = GetSelCmdId(); if (!treeid.IsOk()) return NULL; // each tree item has a wxMenuTreeItemData associated which contains // the ID of the menu item which is attached... id = ((wxExTreeItemData *)m_pCommandsTree->GetItemData(treeid))->GetMenuItemId(); } else { int sel = m_pCommandsList->GetSelection(); if (sel < 0) return NULL; id = (long)(m_pCommandsList->GetClientData(sel)); } return m_kBinder.GetCmd(id); } wxTreeItemId wxKeyConfigPanel::GetSelCmdId() const { wxTreeItemId selection = m_pCommandsTree->GetSelection(); // selection must be valid... if (!selection.IsOk()) return selection; // ...and the just selected must be a valid menu item... wxTreeItemData *p = m_pCommandsTree->GetItemData(selection); if (p == NULL) return wxTreeItemId(); // an empty wxTreeItemId is always invalid... return selection; } wxControl *wxKeyConfigPanel::GetMainCtrl() const { if (HasFlag(wxKEYBINDER_USE_TREECTRL)) return (wxControl*)m_pCommandsTree; return m_pCommandsList; } wxString wxKeyConfigPanel::GetSelCmdStr() const { wxTreeItemId id = GetSelCmdId(); // wxEmpyString is returned if there's no valid selection if (!id.IsOk()) return wxEmptyString; return m_pCommandsTree->GetItemText(id); } bool wxKeyConfigPanel::IsSelectedValidCmd() const { if (IsUsingTreeCtrl()) return GetSelCmdId().IsOk(); else return m_pCommandsList->GetSelection() >= 0; } wxKeyProfileArray wxKeyConfigPanel::GetProfiles() const { wxKeyProfileArray arr; // just copy the combobox item's client data (which are wxKeyProfiles) // into our array... // NB: it's very important to *copy* the profiles into the new array // since the ddestructor of wxKeyConfigPanel expect the m_pKeyProfiles // control to contain always valid pointers NOT shared with anyone else for (size_t i=0; iGetCount(); i++) arr.Add(new wxKeyProfile(*GetProfile(i))); arr.SetSelProfile(GetSelProfileIdx()); return arr; } // ---------------------------------------------------------------------------- // wxKeyConfigPanel - UPDATE functions // ---------------------------------------------------------------------------- void wxKeyConfigPanel::UpdateButtons() { wxKBLogDebug(wxT("wxKeyConfigPanel::UpdateButtons")); wxString str = wxT("None"); // is the remove button to be enabled ? m_pRemoveBtn->Enable(m_pBindings->GetSelection() >= 0); m_pRemoveAllBtn->Enable(m_pBindings->GetCount() > 0); bool enableAddBtn = false; // is the assign button to be enabled ? enableAddBtn = IsSelectedValidCmd() && m_pKeyField->IsValidKeyComb(); // must the "Currently assigned to" field be updated ? if (m_pKeyField->IsValidKeyComb()) { //check if binding already existing if ( this->GetSelProfile()->HasBindingStrict( m_pKeyField->GetValue(), this->GetSelCmdStr() ) ) enableAddBtn = false; CmdSet cmds = m_kBinder.GetCmdBindsTo(m_pKeyField->GetValue()); if ( cmds.size() == 0 ) { str = wxT("None"); m_pCurrCmd = NULL; } else { str.clear(); for ( CmdSet::const_iterator iter = cmds.begin(); iter != cmds.end(); ++iter ) { if ( iter != cmds.begin() ) { str += wxT(","); } m_pCurrCmd = (*iter); str += (*iter)->GetName(); } } } const wxString::size_type maxSize = 20; if ( str.length() > maxSize ) { m_pCurrCmdField->SetToolTip(str); str.RemoveLast( str.length() - maxSize ); str += wxT("..."); } m_pCurrCmdField->SetLabel(str); m_pAssignBtn->Enable(enableAddBtn); } void wxKeyConfigPanel::UpdateDesc() { wxKBLogDebug(wxT("wxKeyConfigPanel::UpdateDesc")); wxCmd *p = GetSelCmd(); if (p != NULL) { // and then update the description #ifdef __WXGTK__ m_pDescLabel->SetValue(p->GetDescription()); #else m_pDescLabel->SetLabel(p->GetDescription()); #endif } else { // an invalid command is selected ? clear this field... m_pDescLabel->SetLabel(wxT("")); } } void wxKeyConfigPanel::FillInBindings() { // remove (eventually present) previous shortcuts... m_pBindings->Clear(); // is the selected item okay ? wxCmd *p = GetSelCmd(); if (p == NULL) return; // update the listbox with the shortcuts for the selected menuitem m_pBindings->Append(p->GetShortcutsList()); // select the first shortcut... if (m_pBindings->GetCount() > 0) m_pBindings->SetSelection(0); } void wxKeyConfigPanel::ApplyChanges() { wxKBLogDebug(wxT("wxKeyConfigPanel::ApplyChanges")); wxKeyProfile *prof = GetSelProfile(); wxASSERT(prof); // just copy the internal key binder used to allow a sort of // "undo" feature into the currently selected profile prof->DeepCopy(m_kBinder); this->m_bProfileHasBeenModified = false; // and update the label of the m_pKeyProfiles control // (the name of the profile could have been changed) int id = GetSelProfileIdx(); if ( m_pKeyProfiles->GetString(id) != m_kBinder.GetName() ) { m_pKeyProfiles->SetString(id, m_kBinder.GetName()); } } void wxKeyConfigPanel::EnableKeyProfiles(bool bEnable) { m_bEnableKeyProfiles = bEnable; // we must hide the keyprofile combobox ShowSizer(m_pKeyProfilesSizer, m_bEnableKeyProfiles); } void wxKeyConfigPanel::ShowSizer(wxSizer *toshow, bool show) { // first of all, update the items of the sizer toshow->ShowItems(m_bEnableKeyProfiles); // then, since the size has been changed... wxSizer *main = GetSizer(); // check the old show state... // VERY IMPORTANT: this is not only an optimization // the code below expect a size change and // if the size change did not happen it will // set some vars to wrong values bool oldshow = main->IsShown(toshow); if ((show && oldshow) || (!show && !oldshow)) return; // add or detach the given sizer if (show) main->Prepend(toshow, 0, wxGROW); else #if wxCHECK_VERSION(2, 5, 1) main->Detach(toshow); #else main->Remove(toshow); #endif // THIS PIECE OF CODE HAS BEEN COPIED & PASTED // FROM THE wxLogDialog::OnDetails FUNCTION OF // THE wxWidgets/src/generic/logg.cpp FILE // ------------------------------------------- m_minHeight = m_maxHeight = -1; // wxSizer::FitSize() is private, otherwise we might use it directly... wxSize sizeTotal = GetSize(), sizeClient = GetClientSize(); wxSize size = main->GetMinSize(); size.x += sizeTotal.x - sizeClient.x; size.y += sizeTotal.y - sizeClient.y; // we don't want to allow expanding the dialog in vertical direction as // this would show the "hidden" details but we can resize the dialog // vertically while the details are shown if ( !show ) m_maxHeight = size.y; SetSizeHints(size.x, size.y, m_maxWidth, m_maxHeight); // don't change the width when expanding/collapsing #if wxCHECK_VERSION(2, 5, 1) SetSize(wxDefaultCoord, size.y); #else SetSize(-1, size.y); #endif #ifdef __WXGTK__ // VS: this is neccessary in order to force frame redraw under // WindowMaker or fvwm2 (and probably other broken WMs). // Otherwise, detailed list wouldn't be displayed. Show(); #endif // wxGTK } bool wxKeyConfigPanel::HasProfileBeenModifiedOrSelected() const { return this->m_bProfileModifiedOrChanged; } void wxKeyConfigPanel::ResetProfileBeenModifiedOrSelected() { this->m_bProfileModifiedOrChanged = false; } // ---------------------------------------------------------------------------- // wxKeyConfigPanel - event handlers // ---------------------------------------------------------------------------- void wxKeyConfigPanel::OnApplyChanges(wxCommandEvent &event) { // apply changed bindings to the original binder ApplyChanges(); event.Skip(); // let parent know that changes were applied } void wxKeyConfigPanel::OnProfileEditing(wxCommandEvent &) { wxASSERT(m_nCurrentProf != -1); wxString oldname = m_kBinder.GetName(); wxString newname = m_pKeyProfiles->GetValue();//ev.GetString(); if (newname == oldname) return; if ( GetSelProfile()->IsNotEditable() ) { wxMessageBox(wxT("This profile cannot be renamed."), wxT("Warning")); m_pKeyProfiles->Select(GetSelProfileIdx()); return; } // now the profile has been changed... m_bProfileHasBeenModified = TRUE; m_bProfileModifiedOrChanged = TRUE; // change the name of the current profile m_kBinder.SetName(newname); #ifdef wxKEYBINDER_AUTO_SAVE ApplyChanges(); #endif #if 0 // and the string of the combobox... int n = m_pKeyProfiles->FindString(oldname); if (n != wxNOT_FOUND) m_pKeyProfiles->SetString(n, newname); #endif } void wxKeyConfigPanel::OnTreeCommandSelected(wxTreeEvent &) { wxKBLogDebug(wxT("wxKeyConfigPanel::OnTreeCommandSelected")); // one of the group in the tree ctrl has been selected: // the listbox with the keybindings must be synchronized... FillInBindings(); // if the user selected an invalid/valid item in the tree ctrl, // the buttons must be disabled/enabled... UpdateButtons(); // ...and the description must be updated UpdateDesc(); } void wxKeyConfigPanel::OnListCommandSelected(wxCommandEvent &) { wxKBLogDebug(wxT("wxKeyConfigPanel::OnListCommandSelected")); // like OnTreeCommandSelected FillInBindings(); UpdateButtons(); UpdateDesc(); } void wxKeyConfigPanel::OnBindingSelected(wxCommandEvent &) { wxKBLogDebug(wxT("wxKeyConfigPanel::OnBindingSelected")); // the remove button should be enabled if the // element just selected is valid... UpdateButtons(); } void wxKeyConfigPanel::OnBindingDblClick() { wxKBLogDebug(wxT("wxKeyConfigPanel::OnBindingDblClick")); /* const int selIdx = m_pBindings->GetSelection(); if ( selIdx == wxNOT_FOUND ) { return; } */ CmdSet cmds = m_kBinder.GetCmdBindsTo(m_pBindings->GetStringSelection()); assert( cmds.size() > 0 ); CommandOrderDlg dlg( m_pBindings->GetStringSelection(), cmds, this ); if ( dlg.ShowModal() == wxID_OK ) { CommandOrderDlg::ListIndexCmdMap cmdList = dlg.getOrderedCommands(); this->m_kBinder.CommitOrdering( cmdList ); // now the user has modified the currently selected profile... m_bProfileHasBeenModified = TRUE; m_bProfileModifiedOrChanged = TRUE; #ifdef wxKEYBINDER_AUTO_SAVE ApplyChanges(); #endif } } void wxKeyConfigPanel::OnCategorySelected(wxCommandEvent &ev) { wxKBLogDebug(wxT("wxKeyConfigPanel::OnCategorySelected")); // update selection int sel = m_pCategories->GetSelection(); if (sel == -1) return; wxExComboItemData *data = (wxExComboItemData*)static_cast(m_pCategories)->GetClientObject(sel); wxArrayString &arr = data->GetCmdNameArr(); // clear the old elements & insert the new ones m_pCommandsList->Clear(); for (size_t i=0; i < arr.GetCount(); i++) m_pCommandsList->Append(arr.Item(i), (void *)data->GetID(i)); // select the first m_pCommandsList->Select(0); OnListCommandSelected(ev); } void wxKeyConfigPanel::OnProfileSelected(wxCommandEvent &e) { wxKBLogDebug(wxT("wxKeyConfigPanel::OnProfileSelected")); int selidx = m_pKeyProfiles->GetSelection(); wxKeyProfile *sel; if (selidx != -1) { // did the user modiy the old profile ? if (m_bProfileHasBeenModified) { // NB: m_nCurrentProf now retains the old profile index int choice = wxMessageBox( wxFormat(wxT("The previous profile (named \"%s\") has been modified.\n") wxT("Do you want to save the changes to that profile ?") ) % GetProfile(m_nCurrentProf)->GetName(), wxT("Warning"), wxYES_NO | wxICON_QUESTION); if (choice == wxYES) { ApplyChanges(); } else if (choice == wxCANCEL) { // WARNING: the wxCANCEL flag has been removed from the wxMessageBox // above because the call to m_pKeyProfiles->SetSelection below // provokes (even if wx docs says no) with wxMSW 2.5.4 another event // re select the old profile... without generating another event m_pKeyProfiles->SetSelection(m_nCurrentProf); return; // and abort this call } else if (choice == wxNO) { // just restore the original label of the old profile // into the wxcombobox... // NB: the original label is stored in the client data associated // with the previously selected combo item; the user-edited // label has been set only in the m_kBinder profile. m_pKeyProfiles->SetString(m_nCurrentProf, GetProfile(m_nCurrentProf)->GetName()); } } // update the current selected profile index m_nCurrentProf = selidx; sel = GetProfile(m_nCurrentProf); } else { // GetSelProfile() will use our current m_nCurrentProf element... sel = GetSelProfile(); } if (!sel) return; // copy original bindings to the temporary binder, // which is the one which the user edits (and which // will be copied in the original one if the // #ApplyChanges function is called...) m_kBinder.DeepCopy(*sel); m_bProfileHasBeenModified = FALSE; if ( e.GetClientData() != NULL ) { //mark as changed only if event was triggered by actually using the combobox //do not trigger on the fake event issued when adding a profile m_bProfileModifiedOrChanged = TRUE; } this->FillCommandTree(); // call other event handlers if (IsUsingTreeCtrl()) { wxTreeEvent ev; OnTreeCommandSelected(ev); } else { wxCommandEvent ev; OnListCommandSelected(ev); } } void wxKeyConfigPanel::OnMetaModifier() { wxString shortcut = m_pBindings->GetStringSelection(); wxCmd *sel = GetSelCmd(); wxKeyBind& kb = *sel->GetShortcut(shortcut); int newMods = kb.GetModifiers(); if ( shortcut.StartsWith(wxT("Meta+") ) ) { newMods = ( newMods & ~wxACCEL_META ); } else { newMods |= wxACCEL_META; } kb.Set( newMods, kb.GetKeyCode(), kb.GetOrderIndex() ); // now the user has modified the currently selected profile... m_bProfileHasBeenModified = TRUE; m_bProfileModifiedOrChanged = TRUE; // and update the list of the key bindings FillInBindings(); m_pKeyField->Clear(); //select previously selected key this->SelectKeyString( kb.GetStr() ); #ifdef wxKEYBINDER_AUTO_SAVE ApplyChanges(); #endif } void wxKeyConfigPanel::OnAnyModifier() { wxString shortcut = m_pBindings->GetStringSelection(); wxCmd *sel = GetSelCmd(); wxKeyBind& kb = *sel->GetShortcut(shortcut); int newMods = kb.GetModifiers(); if ( shortcut.StartsWith(wxT("Any+") ) ) { newMods = ( newMods & ~wxACCEL_ANY ); } else { newMods |= wxACCEL_ANY; } kb.Set( newMods, kb.GetKeyCode(), kb.GetOrderIndex() ); // now the user has modified the currently selected profile... m_bProfileHasBeenModified = TRUE; m_bProfileModifiedOrChanged = TRUE; // and update the list of the key bindings FillInBindings(); m_pKeyField->Clear(); //select previously selected key this->SelectKeyString( kb.GetStr() ); #ifdef wxKEYBINDER_AUTO_SAVE ApplyChanges(); #endif } void wxKeyConfigPanel::OnAssignKey(wxCommandEvent &) { if ( GetSelProfile()->IsNotEditable() ) { wxMessageBox(wxT("This profile cannot be changed."), wxT("Warning")); return; } // the new key combination should be valid because only when // it's valid this button is enabled... wxASSERT(m_pKeyField->IsValidKeyComb()); wxCmd *sel = GetSelCmd(); if (sel->GetShortcutCount() >= wxCMD_MAX_SHORTCUTS) { // sorry... wxMessageBox(wxFormat(wxT("Cannot add more than %d shortcuts ") wxT("to a single command...") ) % wxCMD_MAX_SHORTCUTS, wxT("Cannot add another shortcut")); return; } // actually add the new shortcut key // (if there are already the max. number of shortcuts for // this command, the shortcut won't be added). m_kBinder.AddShortcut( sel->GetId(), m_pKeyField->GetValue() ); // now the user has modified the currently selected profile... m_bProfileHasBeenModified = TRUE; m_bProfileModifiedOrChanged = TRUE; #ifndef wxKEYBINDER_MULTICMD_PER_KEY // if the just added key bind was owned by another command, // remove it from the old command... if (m_pCurrCmd) { wxKeyBind tmp(m_pKeyField->GetValue()); int n = -1; #ifdef __WXDEBUG__ bool bind = m_pCurrCmd->IsBindTo(tmp, &n); wxASSERT_MSG(bind, wxT("the m_pCurrCmd variable should be NULL then...")); #endif // to avoid warnings in release mode m_pCurrCmd->RemoveShortcut(n); } #endif // and update the list of the key bindings FillInBindings(); FillCommandTree(); //select the new key this->SelectKeyString( m_pKeyField->GetValue() ); m_pKeyField->Clear(); #ifdef wxKEYBINDER_AUTO_SAVE ApplyChanges(); #endif } void wxKeyConfigPanel::OnRemoveKey(wxCommandEvent &) { if ( GetSelProfile()->IsNotEditable() ) { wxMessageBox(wxT("This profile cannot be changed."), wxT("Warning")); return; } // now the user has modified the currently selected profile... m_bProfileHasBeenModified = TRUE; m_bProfileModifiedOrChanged = TRUE; // remove the selected shortcut m_kBinder.RemoveShortcut( GetSelCmd()->GetId(), m_pBindings->GetStringSelection() ); // and update the list of the key bindings FillInBindings(); UpdateButtons(); FillCommandTree(); #ifdef wxKEYBINDER_AUTO_SAVE ApplyChanges(); #endif } void wxKeyConfigPanel::OnRemoveAllKey(wxCommandEvent &) { if ( GetSelProfile()->IsNotEditable() ) { wxMessageBox(wxT("This profile cannot be changed."), wxT("Warning")); return; } // now the user has modified the currently selected profile... m_bProfileHasBeenModified = TRUE; m_bProfileModifiedOrChanged = TRUE; // remove the selected shortcut m_kBinder.RemoveAllShortcuts( GetSelCmd()->GetId() ); // and update the list of the key bindings FillInBindings(); UpdateButtons(); FillCommandTree(); #ifdef wxKEYBINDER_AUTO_SAVE ApplyChanges(); #endif } void wxKeyConfigPanel::OnAddProfile(wxCommandEvent &) { wxKeyProfile *sel = GetSelProfile(); if (!sel) return; // we'll use one of wx common dialogs wxTextEntryDialog dlg(this, wxT("Input the name of the new profile.\n") wxT("The new profile will be initially set to a copy of the last selected profile."), wxT("Add new profile")); dlg.SetValue(sel->GetName()); bool valid = FALSE; while (!valid) { if (dlg.ShowModal() == wxID_CANCEL) return; // if the name is the same of one of the existing profiles, we have to abort... valid = TRUE; for (size_t j=0; j < m_pKeyProfiles->GetCount(); j++) valid &= (GetProfile(j)->GetName() != dlg.GetValue()); if (!valid) { wxMessageBox(wxT("The given profile name is already in use.\n") wxT("Enter another name.")); } } // create the new profile copying the last selected one wxKeyProfile *newprof = new wxKeyProfile(*sel, false, false); //copies of profiles ARE deletable and editable newprof->SetName(dlg.GetValue()); // just change its name AddProfile(*newprof, true); delete newprof; // set the new profile as selected (the new profile is the last one) SetSelProfile(m_pKeyProfiles->GetCount()-1); } void wxKeyConfigPanel::OnRemoveProfile(wxCommandEvent &) { wxASSERT(m_nCurrentProf != -1); if (m_pKeyProfiles->GetCount() == 1) { wxMessageBox(wxT("Cannot delete this profile. It's the only available profile."), wxT("Warning")); return; } // delete the keyprofile associated with that item... wxKeyProfile* pCurProfile = (wxKeyProfile*)static_cast(m_pKeyProfiles)->GetClientData(m_nCurrentProf); if ( pCurProfile->IsNotDeletable() ) { wxMessageBox(wxT("This profile is not deletable."), wxT("Warning")); return; } delete (pCurProfile); m_pKeyProfiles->Delete(m_nCurrentProf); m_bProfileModifiedOrChanged = TRUE; // update the currently selected profile int newsel = m_nCurrentProf-1; if (newsel < 0) newsel=0; wxASSERT(newsel < (int)m_pKeyProfiles->GetCount()); // keep sync m_nCurrentProf with the currently really selected item SetSelProfile(newsel); } void wxKeyConfigPanel::OnKeyPressed(wxCommandEvent &) { // if there were no key combinations in the wxKeyMonitorTextCtrl // before this event, maybe that now there is one.... this means // that the "Assign" could be enabled... UpdateButtons(); } void wxKeyConfigPanel::OnContextMenuCmdList(wxContextMenuEvent &) { wxMenu menu; wxMenuItem* pItemAll = menu.AppendRadioItem( wxKEYBINDER_FILTER_ALL_ID, wxT("Show all commands"), wxT("")); wxMenuItem* pItemHideEmpty = menu.AppendRadioItem( wxKEYBINDER_FILTER_HIDE_EMPTY_ID, wxT("Hide empty commands"), wxT("")); wxMenuItem* pItemOnlyDiff = menu.AppendRadioItem( wxKEYBINDER_FILTER_ONLY_DIFF_ID, wxT("Show only differences"), wxT("Only shows commands that got changed in comparison to the default bindigns")); switch( this->m_eFilterState ) { case FS_ALL: pItemAll->Check(true); break; case FS_HIDE_EMPTY: pItemHideEmpty->Check(true); break; case FS_DIFF_ONLY: pItemOnlyDiff->Check(true); break; } menu.AppendSeparator(); wxMenuItem* pItemMeta = menu.Append( wxKEYBINDER_META_EDIT_ID, wxT("Edit Meta key"), wxT("Change your Meta-key here")); if ( GetSelProfile()->IsNotEditable() ) pItemMeta->Enable(false); menu.Connect( wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction)&wxKeyConfigPanel::OnCommandsCmdMenuSelected, NULL, this); // and then display PopupMenu(&menu); } void wxKeyConfigPanel::OnCommandsCmdMenuSelected(wxCommandEvent &evt) { switch(evt.GetId()) { case wxKEYBINDER_FILTER_ALL_ID: this->m_eFilterState = FS_ALL; this->FillCommandTree(); break; case wxKEYBINDER_FILTER_HIDE_EMPTY_ID: this->m_eFilterState = FS_HIDE_EMPTY; this->FillCommandTree(); break; case wxKEYBINDER_FILTER_ONLY_DIFF_ID: this->m_eFilterState = FS_DIFF_ONLY; this->FillCommandTree(); break; case wxKEYBINDER_META_EDIT_ID: ChangeMetaDlg dlg( GetSelProfile()->GetMetaKey(), this ); if ( dlg.ShowModal() ) { GetSelProfile()->SetMetaKey( dlg.GetNewMetaKey() ); } break; } } void wxKeyConfigPanel::OnContextMenuKeyList(wxContextMenuEvent &ev) { //select the item under the cursor wxPoint cPos = this->m_pBindings->ScreenToClient( ev.GetPosition() ); this->m_pBindings->Select( cPos.y / this->m_pBindings->GetCharHeight() ); if ( GetSelProfile()->IsNotEditable() ) { wxMessageBox(wxT("This profile cannot be changed."), wxT("Warning")); return; } int selId = this->m_pBindings->GetSelection(); if ( selId == wxNOT_FOUND ) return; const wxString& curSelKey = m_pBindings->GetStringSelection(); // create menu wxMenu menu; wxMenuItem* pItemAny = menu.AppendCheckItem( wxKEYBINDER_ANY_MODIFIER_ID, wxT("Any"), wxT("Toggles the key's Any-modifier")); pItemAny->Check( curSelKey.StartsWith( wxT("Any+") ) ); wxMenuItem* pItemMeta = menu.AppendCheckItem( wxKEYBINDER_META_MODIFIER_ID, wxT("Meta"), wxT("Toggles the key's Meta-modifier")); pItemMeta->Check( curSelKey.StartsWith( wxT("Meta+") ) ); menu.AppendSeparator(); menu.Append( wxKEYBINDER_SORT_EDIT_ID, wxT("Edit key priorities"), wxT("Specify the bind order for this key here")); menu.Connect( wxEVT_COMMAND_MENU_SELECTED, (wxObjectEventFunction)&wxKeyConfigPanel::OnBindingsCmdMenuSelected, NULL, this); // and then display PopupMenu(&menu); } void wxKeyConfigPanel::OnBindingsCmdMenuSelected(wxCommandEvent &evt) { // void *data=static_cast(evt.GetEventObject())->GetClientData(); switch(evt.GetId()) { case wxKEYBINDER_ANY_MODIFIER_ID: this->OnAnyModifier(); break; case wxKEYBINDER_META_MODIFIER_ID: this->OnMetaModifier(); break; case wxKEYBINDER_SORT_EDIT_ID: this->OnBindingDblClick(); break; } } springlobby-0.169/src/wxkeybinder/keybinder.h0000600000176000000410000015007212105760300022673 0ustar buildbotwww-data00000000000000///////////////////////////////////////////////////////////////////////////// // Name: keybinder.h // Purpose: Classes for binding keypresses to commands. // Author: Aleksandras Gluchovas // Modified by: Francesco Montorsi (6/1/2004) // Created: 2000/02/10 // RCS-ID: $Id: keybinder.h 443 2007-03-01 19:15:57Z frm $ // Copyright: (c) Aleksandras Gluchovas and (c) Francesco Montorsi // Licence: wxWidgets licence ///////////////////////////////////////////////////////////////////////////// #ifndef __KEYBINDER_G__ #define __KEYBINDER_G__ // required includes #include "wx/panel.h" #include "wx/dialog.h" #include "wx/listbox.h" #include "wx/treectrl.h" #include "wx/menu.h" #include "wx/button.h" #include "wx/stattext.h" #include "wx/textctrl.h" #include "wx/combobox.h" #include "wx/app.h" #include "wx/hashset.h" #include "wx/checkbox.h" #include "../springsettings/hotkeys/CommandOrderDlg.h" // The maximum number of shortcuts associated with each wxCmd. #define wxCMD_MAX_SHORTCUTS 10 #ifndef wxID_INVALID // A value used to represent an invalid id... #define wxID_INVALID -1 #endif #define wxACCEL_ANY 0x0008 // hold any key down #define wxACCEL_META 0x0010 // virtual meta enum WXK_JOYSTICK_KEYS { WXK_JOYDOWN = 0x0500, WXK_JOYLEFT, WXK_JOYRIGHT, WXK_JOYUP, WXK_JOYW, WXK_JOYX, WXK_JOYY, WXK_JOYZ, WXK_JOY0, WXK_JOY1, WXK_JOY2, WXK_JOY3, WXK_JOY4, WXK_JOY5, WXK_JOY6, WXK_JOY7 }; // define the following to true to enable lots of debug messages #define wxKEYBINDER_DEBUG_MSG 0 #if wxKEYBINDER_DEBUG_MSG #define wxKBLogDebug wxLogDebug #else inline void wxKBLogDebug(const wxChar *WXUNUSED(fmt), ...) { /* do nothing */ } #endif //configure for springsettings (should better by befined in Makefile) #define wxKEYBINDER_SPRINGSETTINGS #ifdef wxKEYBINDER_SPRINGSETTINGS #define wxKEYBINDER_AUTO_SAVE #define wxKEYBINDER_ALLOW_PAUSE_KEY #define wxKEYBINDER_ALLOW_NON_ALPHANUM_KEYS #define wxKEYBINDER_ALLOW_BACKSPACE #define wxKEYBINDER_MULTICMD_PER_KEY #endif #ifdef __WXMSW__ class wxMswKeyConverter { public: static wxChar ConvertUsToLocal( const wxChar& c ); static wxChar ConvertLocalToUs( const wxChar& c ); protected: static HKL m_usLayout; //save a handle to the us layout for key conversion }; #endif // defined later... class wxConfigBase; class wxKeyBinder; //! Identifies a keypress, that is a key binding. //! This class can be used to represent key combinations like: //! Ctrl+F Alt+Ctrl+Shift+K Shift+C ..... //! that is, combinations of [ALT, CTRL, SHIFT]+[ASCII character]. //! An array of wxKeyBind is contained in each wxCmd... see wxCmd //! for more info. //! //! \note This class implements a lot of static utilities which //! are used by the following classes. //! class wxKeyBind { protected: //! One of wxACCEL_ALT, wxACCEL_CTRL or wxACCEL_SHIFT flags. int m_nFlags; //! One of the wxWidgets key code which defines the key shortcut. int m_nKeyCode; size_t m_nOrderIndex; static const int m_usLayoutBitMask; //when this bit is set, it is an US key static wxString discardModifier( const wxString& keystring ) { wxString result; if ( keystring.EndsWith( wxT("+") ) ) //handle stuff like numpad+ or ctrl++ { wxString tmp = keystring; result = tmp.RemoveLast().AfterLast(wxT('+')) + wxT('+'); } else if ( keystring.StartsWith(wxT("+")) ) //handle stuff like "+ (numpad)" { result = keystring; } else { size_t lastAdd = keystring.find_last_of(wxT('+')); if ( ( lastAdd != keystring.npos ) && ( keystring.GetChar(lastAdd - 1) == wxT('+') ) ) { assert( (lastAdd > 0) && "character '+' found in unexcepted location!" ); result = keystring.substr( lastAdd ); } else { result = keystring.AfterLast('+'); } } return result; } public: static const wxString m_usMarker; //use this to mark keystrings as us-layout wxKeyBind() { m_nKeyCode = m_nFlags = -1; m_nOrderIndex = 0; } wxKeyBind(int flags, int keycode, size_t orderIndex = 0) { Set(flags, keycode, orderIndex); } wxKeyBind(const wxKeyBind &tocopy) { DeepCopy(tocopy); } wxKeyBind(const wxString &key, size_t orderIndex = 0) { Set( key, orderIndex ); } virtual void DeepCopy(const wxKeyBind &p) { m_nFlags = p.m_nFlags; m_nKeyCode = p.m_nKeyCode; m_nOrderIndex = p.m_nOrderIndex; } virtual bool operator!=( const wxKeyBind& other ) const { return !((*this) == other); } virtual bool operator==( const wxKeyBind& other ) const { if ( this->m_nFlags != other.m_nFlags ) return false; if ( this->m_nKeyCode != other.m_nKeyCode ) return false; //Check order index also? return true; } virtual ~wxKeyBind() {} public: //! Sets the key binding keycode and flags. void Set(int flags, int keycode, size_t orderIndex) { m_nFlags = flags; m_nKeyCode = keycode; m_nOrderIndex = orderIndex; } void Set(const wxString& key, size_t orderIndex) { Set( StringToKeyModifier(key), StringToKeyCode( wxKeyBind::discardModifier( key ) ),//.AfterLast('+')).AfterLast('-'));, orderIndex ); } //! Sets the key binding keycode and flags. //! \note This function is like #DeepCopy but uses a reference instead //! of a pointer allowing such syntaxes: //! mybind->Set(wxKeyBind("CTRL+ENTER")); void Set(const wxKeyBind &key) { Set( key.m_nFlags, key.m_nKeyCode, key.m_nOrderIndex); } //! Returns TRUE if the given key event matches this key binding. bool MatchKey(const wxKeyEvent &key) const; //! Returns TRUE if the given wxKeyBind object is equivalent to this. // It takes the ANY-modifier into account. ANY+c matches c and CTRL+c (if strict == false) bool Match(const wxKeyBind &key, bool strict = false) const { if ( m_nKeyCode != key.m_nKeyCode ) { return false; //if keycodes differ, never match } if ( !strict && ( (m_nFlags & wxACCEL_ANY) || (key.m_nFlags & wxACCEL_ANY) ) ) { return true; //match if one of the keys has ANY modifier } if (m_nFlags == key.m_nFlags) return TRUE; return FALSE; } bool MatchKeyCode(const wxKeyBind &key) const { if (m_nKeyCode == key.m_nKeyCode) return TRUE; return FALSE; } // Getters // ------------------ size_t GetOrderIndex() const { return m_nOrderIndex; } void SetOrderIndex(size_t orderIndex) { m_nOrderIndex = orderIndex; } int GetKeyCode() const { return m_nKeyCode; } int GetModifiers() const { return m_nFlags; } bool HasAnyModifier() const { return ( m_nFlags & wxACCEL_ANY) != 0; } // Returns the string which describes this key combination. wxString GetStr() const { return KeyModifierToString(m_nFlags) + KeyCodeToString(m_nKeyCode); } wxAcceleratorEntry GetAccelerator(int cmdId) const { return wxAcceleratorEntry(GetModifiers(), GetKeyCode(), cmdId); } public: // static utilities static wxString NumpadKeyCodeToString(int keyCode); static wxString KeyCodeToString(int keyCode, bool inputUs = false); static wxString KeyModifierToString(int keyModifier); static int StringToKeyCode(const wxString &keyName); static int StringToKeyModifier(const wxString &keyModifier); static int GetKeyModifier(wxKeyEvent &event); static wxString GetKeyStrokeString(wxKeyEvent &event); }; //! The maximum number of wxCmd-derived classes. #define wxCMD_MAX_TYPES 16 //! This is a string used by wxCmd::Load/Save to read/write //! wxCmds into wxConfig objects. #define wxCMD_CONFIG_PREFIX wxT("bind") //! Represents one of the commands which are handled by a wxKeyBinder. //! This is an abstract class so it cannot be allocated directly: it //! is used instead as base class for specific type of wxCmd. //! //! //! The command has up to wxCMD_MAX_SHORTCUTS associated key shortcuts. //! Besides, the command has three other properties: a description string, //! a name string and an ID which should be unique for each wxKeyBinder. //! class wxCmd { // wxKeyBinder must be allowed to call #Exec() friend class wxKeyBinder; protected: //! The shortcuts. wxKeyBind m_keyShortcut[wxCMD_MAX_SHORTCUTS]; int m_nShortcuts; //!< The numner of valid entries of m_keyShortcut. //! The name of this command. This should be a short string. wxString m_strName; //! The description associated with this command. wxString m_strDescription; //! The ID which identifies this command. int m_nId; protected: // static //! The wxCmd-derived class creation function. //! Such a function is required into wxCmd::Load. typedef wxCmd *(*wxCmdCreationFnc)(int id); //! A registered type of wxCmd-derived class. typedef struct { int type; wxCmdCreationFnc cmdCreateFnc; } wxCmdType; //! The array of registered command types. static wxCmdType m_arrCmdType[wxCMD_MAX_TYPES]; //! The number of registered command types. static int m_nCmdTypes; public: // static //! Creates a new command of the given type with the given ID. //! This function is used mainly in wxCmd::Load. static wxCmd *CreateNew(int type, int id); //! Adds a new command type to our static list. static void AddCmdType(int type, wxCmdCreationFnc fnc); //! Returns the wxCmdType associated with the given type ID. //! Returns NULL if no such type of wxCmd is registered. static wxCmdType *FindCmdType(int type); public: wxCmd(const wxKeyBind &first, int id, const wxString &name = wxEmptyString, const wxString &desc = wxEmptyString): m_nShortcuts(1), m_strName(name), m_strDescription(desc), m_nId(id) { m_keyShortcut[0] = first; } wxCmd(int id = wxID_INVALID, const wxString &name = wxEmptyString, const wxString &desc = wxEmptyString): m_nShortcuts(0), m_strName(name), m_strDescription(desc), m_nId(id) { } virtual void DeepCopy(const wxCmd *cmd) { m_strName = cmd->m_strName; m_strDescription = cmd->m_strDescription; m_nId = cmd->m_nId; m_nShortcuts = cmd->m_nShortcuts; for (int i=0; i < m_nShortcuts; i++) m_keyShortcut[i].DeepCopy(cmd->m_keyShortcut[i]); } virtual bool operator!=( const wxCmd& other ) const { return !( (*this) == other ); } virtual bool operator==( const wxCmd& other ) const { if ( this->m_nId != other.m_nId ) //also check m_strName? return false; for (int i=0; i < m_nShortcuts; i++) if ( m_keyShortcut[i] != other.m_keyShortcut[i] ) return false; return true; } virtual wxCmd *Clone() const = 0; // Destructor virtual ~wxCmd() {} public: // Add/Remove functions // ---------------------------- //! Adds the given key binding to this command. void AddShortcut(const wxKeyBind &key) { if (m_nShortcuts >= wxCMD_MAX_SHORTCUTS) return; m_keyShortcut[m_nShortcuts++] = key; Update(); } //! Builds and adds a key binding to this command. void AddShortcut(int flags, int keycode, size_t orderIndex) { if (m_nShortcuts >= wxCMD_MAX_SHORTCUTS) return; wxKeyBind key(flags, keycode, orderIndex); AddShortcut(key); // update is called by the previous call } //! Builds and adds a key binding to this command using the //! given key description. void AddShortcut(const wxString &key, size_t orderIndex) { if (m_nShortcuts >= wxCMD_MAX_SHORTCUTS) return; if (key.IsEmpty()) return; m_keyShortcut[m_nShortcuts++] = wxKeyBind(key, orderIndex); Update(); } //! Removes the n-th key shortcut associated to this command. void RemoveShortcut(int n) { for (int i=n; i < m_nShortcuts; i++) // shift array left m_keyShortcut[i] = m_keyShortcut[i+1]; m_nShortcuts--; Update(); } void RemoveShortcut(const wxString &key) { for (int i=0; i < m_nShortcuts; i++) { if ( m_keyShortcut[i].GetStr() == key ) { RemoveShortcut( i ); return; } } } //! Removes all the shortcuts associates to this command. void RemoveAllShortcuts() { m_nShortcuts=0; Update(); } // Miscellaneous // --------------------- //! Returns TRUE if at least one of the key bindings matches //! the given key event. bool MatchKey(const wxKeyEvent &ev) const { for (int i=0; i < m_nShortcuts; i++) if (m_keyShortcut[i].MatchKey(ev)) return TRUE; return FALSE; } //! Returns TRUE if this command is bind to a wxKeyBind object //! identic to the given one. //! If "n" is not NULL, it is set to the index of the entry //! which contains the given shortcut key (if there is such //! a shortcut registered in this class); otherwise it is //! left untouched. bool IsBindTo(const wxKeyBind &key, bool strict = false, int *n = NULL) const { for (int i=0; i < m_nShortcuts; i++) { if (m_keyShortcut[i].Match(key, strict)) { if (n) *n = i; return TRUE; } } return FALSE; } //! Saves the command into the given wxConfig object //! in the given key entry. //! \param bCleanOld If TRUE, this function will erase the given key //! before writing into it. bool Save(wxConfigBase *p, const wxString &key = wxEmptyString, bool bCleanOld = FALSE) const; //! Loads from the given wxConfig's key a command. //! Returns FALSE if the given key does not contain info about //! this command's type. bool Load(wxConfigBase *p, const wxString &key = wxEmptyString); // Getters // --------------------- wxKeyBind *GetShortcut(int n) { return &m_keyShortcut[n]; } const wxKeyBind *GetShortcut(int n) const { return &m_keyShortcut[n]; } //gets the EXACT shortcut wxKeyBind *GetShortcut(const wxString& keystring) { for(int i=0; i < m_nShortcuts; ++i) { if ( m_keyShortcut[i].GetStr() == keystring ) { return &m_keyShortcut[i]; } } return NULL; } wxAcceleratorEntry GetAccelerator(int n) const { return GetShortcut(n)->GetAccelerator(m_nId); } int GetId() const { return m_nId; } int GetShortcutCount() const { return m_nShortcuts; } wxString GetDescription() const { return m_strDescription; } wxString GetName() const { return m_strName; } wxArrayString GetShortcutsList() const { wxArrayString arr; for (int i=0; i < m_nShortcuts; i++) arr.Add(m_keyShortcut[i].GetStr()); return arr; } //! Returns the type ID for this wxCmd-derived class. virtual int GetType() const = 0; protected: //! Called after that an Add/Remove function is called. //! Default implementation does nothing. virtual void Update() {} //! Executes the command. //! - "origin" is the object which generated the event that //! was recognized as a shortcut key associated to this class. //! - "client" is the event handler which should receive the //! event associated with this command. virtual void Exec(wxObject *obj, wxEvtHandler *client) = 0; }; //! Defines a wxObjArray-like array of wxCmd. //! However, we cannot use the WX_DECLARE_OBJARRAY macro //! because wxCmd is an abstract class and thus we need //! to keep simple pointers stored, not the objects themselves. class wxCmdArray { wxArrayPtrVoid m_arr; public: wxCmdArray() {} wxCmdArray(const wxCmdArray &tocopy) { DeepCopy(tocopy); } virtual ~wxCmdArray() { Clear(); } void DeepCopy(const wxCmdArray &arr) { Clear(); for (size_t i=0; i < arr.GetCount(); i++) Add(arr.Item(i)->Clone()); } wxCmdArray &operator=(const wxCmdArray &tocopy) { DeepCopy(tocopy); return *this; } void Add(wxCmd *p) { m_arr.Add(p); } void Remove(size_t n); void Clear(); size_t GetCount() const { return m_arr.GetCount(); } wxCmd *Item(int n) const { return (wxCmd *)m_arr.Item(n); } }; //! This is a wxEvtHandler which can be attached to any wxWindow-derived //! class. It handles only the key events calling a wxKeyBinder to process //! them. wxKeyBinder will process only hotkeys and will skip any other //! unregistered key combination. //! In these cases wxBinderEvtHandler just returns and wxWidgets will call //! the next handler in the chain (which is usually the wxWindow which was //! attached to this wxBinderEvtHandler). class wxBinderEvtHandler : public wxEvtHandler { //! The wxKeyBinder called by wxBinderEvtHandler when receving a wxKeyEvent. wxKeyBinder *m_pBinder; //! The target window which will process the keyevents if they're not //! registered hotkeys (this check is done by wxKeyBinder). wxWindow *m_pTarget; protected: //! The event handler for wxKeyEvents. void OnChar(wxKeyEvent &event); public: //! Attaches this event handler to the given window. //! The given keybinder will be called on each keyevent. wxBinderEvtHandler(wxKeyBinder *p, wxWindow *tg) : m_pBinder(p), m_pTarget(tg) { m_pTarget->PushEventHandler(this); } //! Removes this event handler from the window you specified //! during construction (the target window). virtual ~wxBinderEvtHandler() { m_pTarget->RemoveEventHandler(this); } //! Returns TRUE if this event handler is attached to the given window. bool IsAttachedTo(wxWindow *p) { return p == m_pTarget; } //! Returns the wxKeyBinder which is called-back by this event handler. wxKeyBinder *GetBinder() const { return m_pBinder; } //! Returns the window which this event handler is filtering. wxWindow *GetTargetWnd() const { return m_pTarget; } private: DECLARE_CLASS(wxBinderEvtHandler) DECLARE_EVENT_TABLE() }; // Define the wxADD_KEYBINDER_SUPPORT: you should use it inside a protected // block of the windows which want to use the wxKeyBinder facilities #ifdef __WXMSW__ // This is a virtual function used in wxMSW which can be used to allow // or disable the message preprocessing and thus the preprocessing of // keyshortcuts; to add keybinder support, the preprocessing must be // disabled: wxKeyBinder will care of checking the keypresses for // eventual hotkeys... #define wxADD_KEYBINDER_SUPPORT() \ virtual bool MSWShouldPreProcessMessage(WXMSG*) { return FALSE; } #else // the other ports doesn't use MSWShouldPreProcessMessage... #define wxADD_KEYBINDER_SUPPORT() /* expand to nothing */ #endif //! This is the real keybinder. This object is an event handler which //! can be #Attach()ed to any wxWindow to intercept the keypresses //! that window receives and then to (if they match a shortcut key //! associated with one of the wxCmd contained) translate them in //! events (the type of the event which is generated depends from //! the type wxCmd which is triggered; see wxCmd::Exec) which are //! sent to the window which is #Attach()ed to this key binder. //! //! This class contains an array of wxCmd and exposes some utilities //! to add/remove/edit them and their wxKeyBind. //! //! VERY IMPORTANT: to allow the wxKeyBinder class to intercept *all* //! the keypresses which are sent to the #Attach()ed //! window, also hotkeys, you must use the //! wxADD_KEYBINDER_SUPPORT macro inside the declaration //! of that window. //! class wxKeyBinder : public wxObject { protected: //! The array of wxCmd-derived classes. wxCmdArray m_arrCmd; wxString m_metaKey; key_sym_map m_keySyms; key_sym_set_map m_keySymsSet; size_t m_nNextOderIndex; size_t m_nNextOderIndexAny; //! The array of windows attached to this keybinder. //! These info are very important when deleting the keybinder //! (which can automatically #Detach() himself). //! Besides, with this array, something interesting could be //! done in future (like global shortcuts: command events sent //! to all attached windows even if the command shortcut comes //! from one of the attached windows only)... //wxArrayPtrVoid m_arrAttachedWnd; //wxWindowList m_lstAttachedWnd; // I don't like wxList... //! The array of wxBinderEvtHandler which is hold by this keybinder. wxArrayPtrVoid m_arrHandlers; protected: void PrintOrdering() const; //! Returns the index of the first command with the given ID. int FindCmd(int id) const { for (int i=0; i < (int)m_arrCmd.GetCount(); i++) if (id == m_arrCmd.Item(i)->GetId()) return i; return -1; } //! Returns the index of the first command that contains the //! given key binding. int FindCmdBindTo(const wxKeyBind &key, int *n = NULL) const { for (int i=0; i < (int)m_arrCmd.GetCount(); i++) if (m_arrCmd.Item(i)->IsBindTo(key, false, n)) return i; return -1; } IdSet FindCmdBindsTo(const wxKeyBind &key, int *n = NULL) const { IdSet binds; for (int i=0; i < (int)m_arrCmd.GetCount(); i++) if (m_arrCmd.Item(i)->IsBindTo(key, false, n)) binds.insert( i ); return binds; } //! Returns the index of the first command which matches the //! given key event. int FindMatchingCmd(const wxKeyEvent &key) const { for (int i=0; i < (int)m_arrCmd.GetCount(); i++) if (m_arrCmd.Item(i)->MatchKey(key)) return i; return -1; } public: wxKeyBinder() : m_nNextOderIndex(1), m_nNextOderIndexAny(1) {} wxKeyBinder(const wxKeyBinder &tocopy):wxObject(tocopy) { DeepCopy(tocopy); } virtual ~wxKeyBinder() { DetachAll(); } public: // miscellaneous //! The event handler for wxKeyEvents. void OnChar(wxKeyEvent &event, wxEvtHandler *next); //! Deep copies the given object. void DeepCopy(const wxKeyBinder &p) { m_arrCmd.DeepCopy(p.m_arrCmd); m_metaKey = p.m_metaKey; m_nNextOderIndex = p.m_nNextOderIndex; m_nNextOderIndexAny = p.m_nNextOderIndex; m_keySyms = p.m_keySyms; m_keySymsSet = p.m_keySymsSet; // NEVER COPY THE ARRAY OF THE ATTACHED WINDOWs: // WE ARE NOT ATTACHED TO THE WINDOWS OF THE GIVEN BINDER !! // m_arrAttachedWnd = p->m_arrAttachedWnd; } wxKeyBinder &operator=(const wxKeyBinder &tocopy) { DeepCopy(tocopy); return *this; } //! Resets everything associated with this class. void Reset() { m_arrCmd.Clear(); m_keySyms.clear(); m_keySymsSet.clear(); m_metaKey.clear(); m_nNextOderIndex = 1; m_nNextOderIndexAny = 1; } //! Updates all the commands contained. void UpdateAllCmd() { if (m_arrHandlers.GetCount() == 0) return; // we are not attached to any window... we can skip // this update... for (int i=0; i < (int)m_arrCmd.GetCount(); i++) m_arrCmd.Item(i)->Update(); } //! Enables/disables all the wxBinderEvtHandler associated with //! the windows we've been attached to. void Enable(bool bEnable = TRUE) { for (int i=0; i < (int)m_arrHandlers.GetCount(); i++) ((wxBinderEvtHandler*)m_arrHandlers.Item(i))->SetEvtHandlerEnabled(bEnable); } //! Attaches this class to the given window. void Attach(wxWindow *p); //! Attaches this keybinder to the given window and recursively to //! all its children so that all hotkeys will be surely intercepted. void AttachRecursively(wxWindow *p); //! Detaches this event handler from the given window. void Detach(wxWindow *p); //! Detaches this event handler from all the window it's attached to. void DetachAll(); //! Returns TRUE if the given window is attached to this keybinder. bool IsAttachedTo(wxWindow *p) const { return FindHandlerIdxFor(p) != wxNOT_FOUND; } //! Returns the index of the handler for the given window. int FindHandlerIdxFor(wxWindow *p) const; //! Returns the wxBinderEvtHandler for the given window. wxBinderEvtHandler *FindHandlerFor(wxWindow *p) const; //! Saves the array of keybindings into the given wxConfig object. //! All the keybindings will be saved into subkeys of the given key. //! \param bCleanOld If TRUE, this function will erase the given key //! before writing into it. bool Save(wxConfigBase *p, const wxString &key = wxEmptyString, bool bCleanOld = FALSE) const; //! Loads from the given wxConfig object a set of keybindings. bool Load(wxConfigBase *p, const wxString &key = wxEmptyString); void CommitOrdering( const CommandOrderDlg::ListIndexCmdMap& cmds ); // Add functions // ------------------- void SetMetaKey( const wxString& key ) { this->m_metaKey = key; } const wxString& GetMetaKey() const { return this->m_metaKey; } void SetKeySyms( const key_sym_map& keySyms ) { this->m_keySyms = keySyms; } void SetKeySymsSet( const key_sym_set_map& keySymsSet ) { this->m_keySymsSet = keySymsSet; } const key_sym_map& GetKeySyms() const { return this->m_keySyms; } const key_sym_set_map& GetKeySymsSet() const { return this->m_keySymsSet; } void AddCmd(wxCmd *p) { m_arrCmd.Add(p); } void AddShortcut(int id, const wxString &key) { const bool anyMod = ( wxKeyBind::StringToKeyModifier( key ) & wxACCEL_ANY ) != 0; wxCmd *p = GetCmd(id); if (p) { size_t new_id = 0; if ( !anyMod ) new_id = m_nNextOderIndex++; else new_id = m_nNextOderIndexAny++; p->AddShortcut(key, new_id); } } void RemoveAllShortcuts(int id) { wxCmd *p = GetCmd(id); if (!p) { return; } while( p->GetShortcutCount() > 0 ) { this->RemoveShortcut( id, p->GetShortcut( 0 )->GetStr() ); } } void RemoveShortcut(int id, const wxString &key) { const bool anyMod = ( wxKeyBind::StringToKeyModifier( key ) & wxACCEL_ANY ) != 0; wxCmd *p = GetCmd(id); if (!p) { return; } const size_t remOrderIdx = p->GetShortcut(key)->GetOrderIndex(); p->RemoveShortcut( key ); //decrease all order indices after the removed one for (int i=0; i < (int)m_arrCmd.GetCount(); ++i) { for( int j=0; j < m_arrCmd.Item(i)->GetShortcutCount(); ++j ) { const bool curAny = ( m_arrCmd.Item(i)->GetShortcut(j)->GetModifiers() & wxACCEL_ANY ) != 0; if ( anyMod ^ curAny ) { continue; } const size_t curOrderIdx = m_arrCmd.Item(i)->GetShortcut(j)->GetOrderIndex(); if ( curOrderIdx >= remOrderIdx ) { m_arrCmd.Item(i)->GetShortcut(j)->SetOrderIndex( curOrderIdx - 1 ); } } } --m_nNextOderIndex; } // Getters // ------------------- int GetCmdCount() const { return m_arrCmd.GetCount(); } int GetAttachedWndCount() const { return m_arrHandlers.GetCount(); } wxWindow *GetWindow(int n) const { return ((wxBinderEvtHandler*)m_arrHandlers.Item(n))->GetTargetWnd(); } wxCmd *GetMatchingCmd(const wxKeyEvent &key) const { int i = FindMatchingCmd(key); if (i != -1) return m_arrCmd.Item(i); return NULL; } wxCmd *GetCmd(int id) const { int i = FindCmd(id); if (i != -1) return m_arrCmd.Item(i); return NULL; } wxCmd *GetCmdBindTo(const wxString &key, int *n = NULL) const { int i = FindCmdBindTo(wxKeyBind(key), n); if (i != -1) return m_arrCmd.Item(i); return NULL; } CmdSet GetCmdBindsTo(const wxString &key, int *n = NULL) const { IdSet binds = FindCmdBindsTo(wxKeyBind(key), n); CmdSet cmds; for ( IdSet::const_iterator iter = binds.begin(); iter != binds.end(); ++iter ) { cmds.insert( m_arrCmd.Item((*iter)) ); } return cmds; } //strict matching. match exact even on any-modifier (a does not match any+a) bool HasBindingStrict(const wxString &key, const wxString& cmd) { for (int i=0; i < (int)m_arrCmd.GetCount(); i++) { if ( cmd != m_arrCmd.Item(i)->GetName() ) continue; if (m_arrCmd.Item(i)->IsBindTo(key, true)) return true; } return false; } const wxCmd* GetCommandByName( const wxString& cmdName ) const { for (int i=0; i < (int)m_arrCmd.GetCount(); i++) { if ( m_arrCmd.Item(i)->GetName() == cmdName ) return m_arrCmd.Item(i); } return NULL; } bool ContainsCommand( const wxString& cmdName ) const { const wxCmd* pCmd = GetCommandByName( cmdName ); if ( pCmd && pCmd->GetShortcutCount() > 0 ) return true; return false; } wxKeyBind *GetShortcut(int id, int n) const { wxCmd *p = GetCmd(id); if (p) return p->GetShortcut(n); return NULL; } wxString GetShortcutStr(int id, int n) const { wxKeyBind *p = GetShortcut(id, n); if (p) return p->GetStr(); return wxEmptyString; } wxArrayString GetShortcutsList(int id) const { wxCmd *p = GetCmd(id); if (p) return p->GetShortcutsList(); return wxArrayString(); } wxArrayPtrVoid *GetHandlersArr() { return &m_arrHandlers; } wxCmdArray *GetArray() { return &m_arrCmd; } const wxCmdArray *GetArray() const { return &m_arrCmd; } private: DECLARE_CLASS(wxKeyBinder) }; //! A little extension of the wxKeyBinder class. //! wxKeyProfile adds a NAME and a DESCRIPTION to the wxKeyBinder class; //! these are useful when you want to support more than one wxKeyBinder in //! your application to give to the user the possibility to choose among //! different keymapping schemes... class wxKeyProfile : public wxKeyBinder { protected: //! The name of this profile. wxString m_strName; //! The description of this profile. wxString m_strDescription; bool m_notDeletable; bool m_notEditable; public: wxKeyProfile(const wxString &name = wxEmptyString, const wxString &desc = wxEmptyString, bool notDeletable = false, bool notEditable = false ) : m_strName(name), m_strDescription(desc), m_notDeletable(notDeletable), m_notEditable(notEditable) {} wxKeyProfile(const wxKeyProfile &tocopy) :wxKeyBinder() { DeepCopy(tocopy); } wxKeyProfile(const wxKeyProfile &tocopy, bool notDeletable, bool notEditable ) { DeepCopy(tocopy); m_notDeletable = notDeletable; m_notEditable = notEditable; } virtual ~wxKeyProfile() {} void DeepCopy(const wxKeyProfile &p) { wxKeyBinder::DeepCopy(p); m_strName = p.m_strName; m_strDescription = p.m_strDescription; m_notDeletable = p.m_notDeletable; m_notEditable = p.m_notEditable; } wxKeyProfile &operator=(const wxKeyProfile &tocopy) { DeepCopy(tocopy); return *this; } public: // miscellaneous void SetName(const wxString &name) { m_strName=name; } void SetDesc(const wxString &str) { m_strDescription=str; } wxString GetName() const { return m_strName; } wxString GetDesc() const { return m_strDescription; } bool Save(wxConfigBase *p, const wxString &key = wxEmptyString, bool bCleanOld = FALSE) const; bool Load(wxConfigBase *p, const wxString &key = wxEmptyString); bool IsNotDeletable() const { return m_notDeletable; } bool IsNotEditable() const { return m_notEditable; } private: DECLARE_CLASS(wxKeyProfile) }; //! This is a string used by wxKeyProfileArray::Load/Save to read/write //! wxKeyProfileArrays into wxConfig objects. #define wxKEYPROFILE_CONFIG_PREFIX wxT("keyprof") //! An array of wxKeyProfiles. //! This is an handy way to hold a set of pointers to wxKeyProfiles //! and to retrieve the profiles from a wxKeyConfigPanel after they //! have been added/removed/edited by the user. //! //! This class also holds a variable (#m_nSelected) which makes easier for //! the owner of the array to manage more than one key profile //! (this variables has sense only assuming that only one key profile at //! time is selected into app's windows...). //! Without this additional field, you would have to declare another variable //! to use together with wxKeyProfileArray. //! However, please note that this variable is *not* updated in any way by //! wxKeyProfileArray itself: this is still owner's task which can use the //! #SetSelProfile and #GetSelProfile functions to access this variable. class wxKeyProfileArray { //! The array of pointers to the wxKeyProfiles. //! Since this array hold pointers, instances of classes derived //! from wxKeyProfile can be used as well with wxKeyProfileArray. wxArrayPtrVoid m_arr; //! The index of the currently selected profile. int m_nSelected; public: wxKeyProfileArray() { m_nSelected=-1; } wxKeyProfileArray(const wxKeyProfileArray &tocopy) { DeepCopy(tocopy); } virtual ~wxKeyProfileArray() { Cleanup(); } //! \name wxArray-like functions. //! We cannot use wxArrayPtrVoid as base class (it does not have //! a virtual destructor) and so we are forced to re-implement the //! wxArray functions... @{ size_t GetCount() const { return m_arr.GetCount(); } int GetSelProfileIdx() const { return m_nSelected; } wxKeyProfile *Item(size_t n) { return (wxKeyProfile*)m_arr.Item(n); } wxKeyProfile *GetSelProfile() { wxASSERT(m_nSelected >= 0 && m_nSelected < static_cast(GetCount())); return Item(m_nSelected); } void Add(wxKeyProfile *p) { m_arr.Add(p); } void Clear() { m_arr.Clear(); } void Remove(wxKeyProfile *p) { m_arr.Remove(p); } void SetSelProfile(unsigned n) { wxASSERT(n < GetCount()); m_nSelected = n; } bool IsEmpty() const { return m_arr.IsEmpty(); } const wxKeyProfile *Item(unsigned n) const { return (wxKeyProfile*)m_arr.Item(n); } const wxKeyProfile *GetSelProfile() const { return Item(m_nSelected); } void RemoveAt(size_t i, size_t count = 1) { m_arr.RemoveAt(i, count); } void Insert(wxKeyProfile *p, int n) { m_arr.Insert(p, n); } //@} //! Copies the given array. void DeepCopy(const wxKeyProfileArray &p) { Cleanup(); for (size_t i=0; i < p.GetCount(); i++) Add(new wxKeyProfile(*p.Item(i))); m_nSelected = p.m_nSelected; } wxKeyProfileArray &operator=(const wxKeyProfileArray &tocopy) { DeepCopy(tocopy); return *this; } //! Deletes all the objects of the array. //! Unlike #Clear() this function also deletes the objects and //! does not only detach them from this array. void Cleanup() { for (size_t i=0; i < GetCount(); i++) delete Item(i); Clear(); } //! Attaches all the wxKeyProfiles to the given window. //! \note This function should be used very carefully ! //! If all the keybinders are attached to the same window //! void AttachAllTo(wxWindow *w) { for (size_t i=0; iAttach(w); } //! Enables/disables all the wxKeyProfiles. See wxKeyBinder::Enable. void EnableAll(bool bEnable = TRUE) { for (size_t i=0; iEnable(bEnable); } //! Detaches all the wxKeyProfiles from the given window. void DetachAllFrom(wxWindow *w) { for (size_t i=0; iDetach(w); } //! Detaches all the wxKeyProfiles from *all* their attached windows. void DetachAll() { for (size_t i=0; iDetachAll(); } //! Updates all the wxCmds contained. void UpdateAllCmd() { for (size_t i=0; iUpdateAllCmd(); } //! Stores the wxKeyProfiles into the given wxConfig object. //! \param bCleanOld If TRUE, this function will save all the mcStyleArrays //! it contains and then will delete any other group which starts with //! the mgSTYLES_CONFIG_PREFIX string. bool Save(wxConfigBase *p, const wxString &key = wxEmptyString, bool bCleanOld = FALSE) const; //! Loads from the given wxConfig object all the wxKeyProfiles found. //! The keyprofiles entries are detected using the wxKEYPROFILE_CONFIG_PREFIX //! prefix string. bool Load(wxConfigBase *p, const wxString &key = wxEmptyString); }; // IDs used by wxKeyConfigPanel #define wxKEYBINDER_BASEID 30000 // start from this value #define wxKEYBINDER_COMMANDS_BOX_ID wxKEYBINDER_BASEID+1 #define wxKEYBINDER_BINDINGS_BOX_ID wxKEYBINDER_BASEID+2 #define wxKEYBINDER_KEY_FIELD_ID wxKEYBINDER_BASEID+3 #define wxKEYBINDER_ASSIGN_KEY_ID wxKEYBINDER_BASEID+4 #define wxKEYBINDER_REMOVE_KEY_ID wxKEYBINDER_BASEID+5 #define wxKEYBINDER_REMOVEALL_KEY_ID wxKEYBINDER_BASEID+6 #define wxKEYBINDER_KEYPROFILES_ID wxKEYBINDER_BASEID+7 #define wxKEYBINDER_CATEGORIES_ID wxKEYBINDER_BASEID+8 #define wxKEYBINDER_ADD_PROFILEBTN_ID wxKEYBINDER_BASEID+9 #define wxKEYBINDER_REMOVE_PROFILEBTN_ID wxKEYBINDER_BASEID+10 #define wxKEYBINDER_ANY_MODIFIER_ID wxKEYBINDER_BASEID+11 #define wxKEYBINDER_META_MODIFIER_ID wxKEYBINDER_BASEID+12 #define wxKEYBINDER_SORT_EDIT_ID wxKEYBINDER_BASEID+13 #define wxKEYBINDER_META_EDIT_ID wxKEYBINDER_BASEID+14 #define wxKEYBINDER_FILTER_HIDE_EMPTY_ID wxKEYBINDER_BASEID+15 #define wxKEYBINDER_FILTER_ONLY_DIFF_ID wxKEYBINDER_BASEID+16 #define wxKEYBINDER_FILTER_ALL_ID wxKEYBINDER_BASEID+17 #define wxKEYBINDER_SELECTED_POSTFIX wxT(" (selected)") //! \name wxKeyConfigPanel styles //! These flags affect the way a wxKeyConfigPanel is created. //! See wxKeyConfigPanel::wxKeyConfigPanel. @{ //! If specified, the wxKeyConfigPanel will use a wxTreeCtrl to group //! the keybindings. //! \note This flag must be specified if and only if wxKEYBINDER_USE_LISTBOX //! has not been specified. #define wxKEYBINDER_USE_TREECTRL 1 //! If specified, the wxKeyConfigPanel will use a wxComboBox+wxListBox //! to group the keybindings. //! \note This flag must be specified if and only if wxKEYBINDER_USE_TREECTRL //! has not been specified. #define wxKEYBINDER_USE_LISTBOX 2 //! If specified, an "Apply" and a "Cancel" button will be added in the //! bottom part of the wxKeyConfigPanel. #define wxKEYBINDER_SHOW_APPLYBUTTON 4 //! If specified a "Add new" and a "Remove" button will be added next to //! key profiles combobox. #define wxKEYBINDER_SHOW_ADDREMOVE_PROFILE 8 //! If specified, the user will be able to edit the name of the currently //! selected profile. #define wxKEYBINDER_ENABLE_PROFILE_EDITING 16 //! The default style for a wxKeyConfigPanel. #define wxKEYBINDER_DEFAULT_STYLE \ (wxKEYBINDER_SHOW_APPLYBUTTON|wxKEYBINDER_USE_TREECTRL| \ wxKEYBINDER_SHOW_ADDREMOVE_PROFILE|wxKEYBINDER_ENABLE_PROFILE_EDITING| \ wxTAB_TRAVERSAL) /* wxTAB_TRAVERSAL is the default style for a wxPanel */ //@} //! A powerful keybinding editing panel. //! This is a flexible panel since it can be configured through the //! "build flags" and thus can be built in various different ways and //! because it is conceived to be eventually used as a base class of //! another panel which can modify its behaviour just overloading one of //! its various functions. //! The panel contains 4 main controls: //! //! - The tree control with all the commands whose shortcut keys can be //! changed by the given keybinder. The items in the tree control //! can be added through the #ImportXXXXXX() functions. //! If the wxKEYBINDER_USE_TREECTRL build flag is not used //! (and wxKEYBINDER_USE_LISTBOX must be set in this case), a //! combobox and a list box will be used instead of a wxTreeCtrl. //! The command hierarchy is still retained also using //! wxKEYBINDER_USE_LISTBOX even if a wxTreeCtrl looks better if //! you have deep-nested menu items. //! //! - The listbox with all the key combinations associated with the //! selected command //! //! - A wxKeyMonitorTextCtrl and the buttons which can be used by the //! user to remove & add new key combinations for the selected command. //! //! - The description field which can be used to view the help string //! attached to the selected command. //! //! If you want to use this panel you must: //! //! 1) create it as all other wxPanels. //! //! 2) use the #AddProfiles() or the #AddProfile() functions to init the //! panel with the original keybindings. //! //! 3) call one of the ImportXXXX() functions in order to create the //! tree control which will be used by the user to edit the key bindings. //! This is a step different from step #2 because wxKeyProfile does not //! contain hierarchical informations about the commands; also, you can //! fill the tree control of the panel with only some of the commands //! contained in the profiles you added with step #2: that way the user //! will be able to modify the keybindings only of the commands shown //! in the tree control which can thus be used as a "command filter". //! However, if you just want to make user-editable all the commands of //! a wxKeyProfile (and you don't care about hierarchical disposition), //! you can just use the #ImportKeyProfileCmd function. //! //! 4) when the user has finished to edit the key bindings, the //! #ApplyChanges() function is called by wxKeyConfigPanel and the //! temporary contents of the wxKeyBinder edited by the user are copied //! in the original wxKeyProfile. //! You can then retrieve the new array of wxKeyProfile (the user could //! have added/removed profiles) using #GetProfiles(). The last selected //! profile can be obtained using #GetSelProfile(). //! class wxKeyConfigPanel : public wxPanel { public: //! Constructs this panel and links it with the given key binder. wxKeyConfigPanel(wxWindow* parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxKEYBINDER_DEFAULT_STYLE, const wxString& name = wxT("wxKeyConfigPanel"), const wxString& customButton1Label = wxT(""), const wxObjectEventFunction customButton1Event = NULL, const wxString& customButton2Label = wxT(""), const wxObjectEventFunction customButton2Event = NULL, const wxString& customLabelText = wxT("") ) { Create(parent, id, pos, size, style, name, customButton1Label, customButton1Event, customButton2Label, customButton2Event, customLabelText); } bool Create(wxWindow* parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxKEYBINDER_DEFAULT_STYLE, const wxString& name = wxT("wxKeyConfigPanel"), const wxString& customButton1Label = wxT(""), const wxObjectEventFunction customButton1Event = NULL, const wxString& customButton2Label = wxT(""), const wxObjectEventFunction customButton2Event = NULL, const wxString& customLabelText = wxT("") ); virtual ~wxKeyConfigPanel(); public: // import commands (to call BEFORE ShowModal): // they affect the tree control only //! Adds to the tree of user-editable commands, the menuitems //! contained in the given menubar. //! //! If the root of the tree control doesn't exist (because none //! of the ImportXXXX functions have been called yet), this //! function creates it with the "rootname" label. // virtual void ImportMenuBarCmd(wxMenuBar *menuitems, // const wxString &rootname = wxT("Menu bar")); //! Additions by vbs WX_DECLARE_STRING_HASH_MAP( int, CommandList ); WX_DECLARE_STRING_HASH_MAP( CommandList, ControlMap ); //! Supports only tree control void ImportRawList(const ControlMap& itemMap, const wxString &rootname); //end of vbs public: // keyprofile utilities (to call BEFORE ShowModal): // they affect the keybindings only //! Adds a new keyprofile to the keyprofile combo box. //! \note This function does not select the given keyprofile //! (except in the case it's the first keyprofile added). //! To force the selection of a profile, you should use the //! SetSelProfile() function. virtual void AddProfile(const wxKeyProfile &p, bool markAsChanged = false); //! Adds all the profiles stored in the given array to the keyprofile //! combo box copying them into the panel for user modifications. //! \note The profile which is marked as selected into the given //! wxKeyProfileArray is selected (see wxKeyProfileArray::m_nSelected). virtual void AddProfiles(const wxKeyProfileArray &arr); //! Forces the panel to select the n-th profile in the keyprofile combo box. virtual void SetSelProfile(int n); virtual void RemoveAllProfiles(); virtual void SelectCommand( const wxString& cmd ); virtual void SelectKeyString( const wxString& keyStr ); public: // output-access utilities (to call AFTER ShowModal) //! Returns the n-th key profile of the profile combo box. wxKeyProfile *GetProfile(int n) const { wxASSERT(m_pKeyProfiles); return (wxKeyProfile *)static_cast(m_pKeyProfiles)->GetClientData(n); } //! Returns the currently selected key profile using #GetSelProfileIdx(). //! This is the profile owned by the profile combo box. wxKeyProfile *GetSelProfile() const { int n=GetSelProfileIdx(); return (n >= 0 ? GetProfile(n) : NULL); } //! Returns the index of the currently selected key profile. //! The currently selected key profile is the profile which is currently //! displayed by the keyprofile combobox; thus, this function needs the //! #m_pKeyProfiles combobox created (and initialized) to work. //! \note This function won't use wxComboBox::GetSelection() because //! when the label of the key profile has been edited, the function //! returns always -1... we will use the #m_nCurrentProf variable. int GetSelProfileIdx() const { wxASSERT(m_pKeyProfiles); return m_nCurrentProf; } //! Returns an array containing the pointers to the keyprofiles edited //! by this dialog. This function is typically used after the ShowModal() //! function has been called to retrieve the user-edited keyprofiles //! in case the user chose OK (and not cancel). //! \note The returned array has a valid profile selected which coincide //! with the last keyprofile selected in the combobox; i.e. you can //! use the wxKeyProfileArray::GetSelProfile function to retrieve //! the profile the user has chosen to select. wxKeyProfileArray GetProfiles() const; public: // miscellaneous //! Copies the internal key binder used to allow a sort of //! "undo" feature into the original binder set through the //! #SetBinder function. virtual void ApplyChanges(); //! Enables the key profiles combo box and thus you should check //! the keyprofiles. //! \note The key profiles are enabled by default. void EnableKeyProfiles(bool bEnable = TRUE); //! Disables the key profiles combo box. //! The profile used will be the first given. void DisableKeyProfiles() { EnableKeyProfiles(FALSE); } bool HasProfileBeenModifiedOrSelected() const; void ResetProfileBeenModifiedOrSelected(); protected: // event handlers void OnContextMenuKeyList(wxContextMenuEvent &event); void OnContextMenuCmdList(wxContextMenuEvent &event); //! Updates the wxKeyMonitorTextCtrl control... void OnIdle(wxIdleEvent &event); void OnTreeCommandSelected(wxTreeEvent &event); void OnListCommandSelected(wxCommandEvent &event); void OnBindingSelected(wxCommandEvent &event); void OnProfileSelected(wxCommandEvent &event); void OnCategorySelected(wxCommandEvent &event); void OnProfileEditing(wxCommandEvent &event); void OnApplyChanges(wxCommandEvent &event); void OnAssignKey(wxCommandEvent &event); void OnRemoveKey(wxCommandEvent &event); void OnRemoveAllKey(wxCommandEvent &event); void OnAddProfile(wxCommandEvent &event); void OnRemoveProfile(wxCommandEvent &event); void OnBindingsCmdMenuSelected(wxCommandEvent &event); void OnCommandsCmdMenuSelected(wxCommandEvent &event); //! Handles the notifications received from the wxKeyMonitorTextCtrl. void OnKeyPressed(wxCommandEvent &event); void OnAnyModifier(); void OnMetaModifier(); void OnBindingDblClick(); protected: // build functions; these ones can be overridden to // customize wxKeyConfigPanel appearances virtual void BuildCtrls(); virtual wxSizer *BuildColumn1(); virtual wxSizer *BuildColumn2(); virtual wxSizer *BuildMain(wxSizer *, wxSizer *, bool); protected: // utilities virtual void UpdateButtons(); virtual void UpdateDesc(); virtual void FillInBindings(); virtual void FillCommandTree(); virtual void Reset(); virtual void AddRootIfMissing(const wxString &rootname); //! Returns the tree item ID of the currently selected command. wxTreeItemId GetSelCmdId() const; //! Returns the control with the list of the customizable commands. wxControl *GetMainCtrl() const; //! Returns TRUE if the #m_pCommandsTree control is being used. //! Returns FALSE if the #m_pCommandsList and #m_pCategories are being used. bool IsUsingTreeCtrl() const { return HasFlag(wxKEYBINDER_USE_TREECTRL); } //! Returns TRUE if the currently selected command is valid. bool IsSelectedValidCmd() const; //! Returns the name of the currently selected command. wxString GetSelCmdStr() const; //! Returns the selected command. wxCmd *GetSelCmd() const; //! Hides/Shows the given sizer detaching it from the main sizer //! of this window or prepending it to the main sizer. virtual void ShowSizer(wxSizer *toshow, bool show); wxTreeItemId FindTreeItem( wxTreeItemId root, const wxString& sSearchFor ); protected: // members enum FilterState { FS_ALL, FS_DIFF_ONLY, FS_HIDE_EMPTY }; FilterState m_eFilterState; ControlMap m_commandMap; wxString m_sRootName; //! If TRUE, a keyprofiles combobox will be shown to allow the //! user to choose the keyprofile to modify. bool m_bEnableKeyProfiles; //! The currently selected command. wxCmd *m_pCurrCmd; //! The temporary keybinder used while interactively editing shortcuts //! to allow to eventually discard the changes. See #m_bProfileHasBeenModified. wxKeyProfile m_kBinder; //! The index of the currently selected profile. int m_nCurrentProf; //! TRUE if the current profile has been modified by the user. //! This is used to detect changes when the user choose to edit //! another profile using the m_pKeyProfiles control: if the current //! profile has been modified, a dialog will ask to the user if he wants //! to save its changes or not... bool m_bProfileHasBeenModified; //this is used to ask if anything in a profile has been changed and needs to be saved bool m_bProfileModifiedOrChanged; wxButton* m_pCustomButton1; wxButton* m_pCustomButton2; wxString wxCustomLabelText; protected: // the subwindows of this dialog //! The special text control used to intercept keypresses. wxKeyMonitorTextCtrl *m_pKeyField; wxButton *m_pAssignBtn; wxButton *m_pRemoveBtn; wxButton *m_pRemoveAllBtn; // used when wxKEYBINDER_USE_TREECTRL is in the build flags wxTreeCtrl *m_pCommandsTree; // used when wxKEYBINDER_USE_LISTBOX is in the build flags wxComboBox *m_pCategories; wxListBox *m_pCommandsList; wxListBox *m_pBindings; wxComboBox *m_pKeyProfiles; wxSizer *m_pKeyProfilesSizer; #ifdef __WXGTK__ // on wxGTK wxStaticText does not implement line wrapping // (which is required !!) so we will use a wxTextCtrl (on wxGTK) wxTextCtrl *m_pDescLabel; #else wxStaticText *m_pDescLabel; #endif wxStaticText *m_pCurrCmdField; private: DECLARE_CLASS(wxKeyConfigPanel) DECLARE_EVENT_TABLE() }; #endif // __KEYBINDER_G__ springlobby-0.169/src/wxkeybinder/menuutils.h0000600000176000000410000000432312105760300022741 0ustar buildbotwww-data00000000000000///////////////////////////////////////////////////////////////////////////// // Name: keybinder.h // Purpose: Classes for binding keypresses to commands. // Author: Francesco Montorsi // Created: 2004/02/19 // RCS-ID: $Id: menuutils.h 443 2007-03-01 19:15:57Z frm $ // Copyright: (c) Aleksandras Gluchovas and (c) Francesco Montorsi // Licence: wxWidgets licence ///////////////////////////////////////////////////////////////////////////// #ifndef __WX_MENUUTILS_H__ #define __WX_MENUUTILS_H__ // includes #include "wx/panel.h" #include "wx/dialog.h" #include "wx/listbox.h" #include "wx/treectrl.h" #include "keybinder.h" //! Returns the ID of the first menu item with the given name which //! is found inside the given menu bar. int wxFindMenuItem(wxMenuBar *, const wxString &strMenuItemName); //! The command type identifier for a wxMenuCmd. #define wxMENUCMD_TYPE 0x1234 //! The data associated to each node of a tree used by //! - wxMenuTreeWalker //! - wxKeyConfigPanel //! //! This is a simple class which just contains an additional field, //! which can be used to store the ID of the menu item associated //! with this tree item. //! The ID should be unique among all the commands contained in the //! same command collection so it should be enough to identify a wxCmd... class wxExTreeItemData : public wxTreeItemData { protected: int m_nMenuId; public: wxExTreeItemData(int id = wxID_INVALID) : m_nMenuId(id) {} virtual ~wxExTreeItemData() {} void SetMenuItemId(int n) { m_nMenuId = n; } int GetMenuItemId() { return m_nMenuId; } }; //! The data associated with each entry of the combobox given //! to the wxMenuComboListWalker class. //! Contains the array of labels of the menu items contained //! into a wxMenu and their IDs. class wxExComboItemData : public wxClientData { protected: wxArrayString m_arrStr; wxArrayLong m_arrID; public: wxExComboItemData() {} virtual ~wxExComboItemData() {} int GetID(size_t n) const { return m_arrID[n]; } wxArrayString &GetCmdNameArr() { return m_arrStr; } void Append(const wxString &name, int id) { m_arrStr.Add(name); m_arrID.Add(id); } void SetID(size_t n, int id) { m_arrID[n] = id; } }; #endif // __WX_MENUUTILS_H__ springlobby-0.169/src/wxkeybinder/wxKeyMonitorTextCtrl.cpp0000600000176000000410000000260112105760300025415 0ustar buildbotwww-data00000000000000#include "wxKeyMonitorTextCtrl.h" #include "keybinder.h" // event table for wxKeyMonitorTextCtrl IMPLEMENT_CLASS(wxKeyMonitorTextCtrl, wxTextCtrl) BEGIN_EVENT_TABLE(wxKeyMonitorTextCtrl, wxTextCtrl) // keydown events EVT_KEY_DOWN(wxKeyMonitorTextCtrl::OnKey) EVT_KEY_UP(wxKeyMonitorTextCtrl::OnKey) END_EVENT_TABLE() // ---------------------------------------------------------------------------- // wxKeyMonitorTextCtrl // ---------------------------------------------------------------------------- void wxKeyMonitorTextCtrl::OnKey(wxKeyEvent &event) { // backspace cannot be used as shortcut key... #ifndef wxKEYBINDER_ALLOW_BACKSPACE if (event.GetKeyCode() == WXK_BACK) { // this text ctrl contains something and the user pressed backspace... // we must delete the keypress... Clear(); return; } #endif if (event.GetEventType() == wxEVT_KEY_DOWN || (event.GetEventType() == wxEVT_KEY_UP && !IsValidKeyComb())) { // the user pressed some key combination which must be displayed // in this text control.... or he has just stopped pressing a // modifier key like shift, ctrl or alt without adding any // other alphanumeric char, thus generating an invalid keystroke // which must be cleared out... SetValue(wxKeyBind::GetKeyStrokeString(event)); SetInsertionPointEnd(); } } springlobby-0.169/src/wxkeybinder/wxKeyMonitorTextCtrl.h0000600000176000000410000000265312105760300025071 0ustar buildbotwww-data00000000000000#ifndef __WXKEYMONITORTEXTCTRL_G__ #define __WXKEYMONITORTEXTCTRL_G__ #include "wx/textctrl.h" //! A special text control where the user keypresses are displayed //! as the contained text. //! This class is used by wxKeyConfigPanel class to allow the user //! to input a shortcut key which can be associated with a wxCmd. //! //! Example: the user presses CTRL+SHIFT+A inside this window; //! the wxKeyMonitorTextCtrl displays exactly the string //! "Ctrl+Shift+A" //! class wxKeyMonitorTextCtrl : public wxTextCtrl { public: wxKeyMonitorTextCtrl( wxWindow* parent, wxWindowID id, const wxString& value = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxTE_PROCESS_ENTER, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxTextCtrlNameStr) : wxTextCtrl(parent, id, value, pos, size, style, validator, name) {} virtual ~wxKeyMonitorTextCtrl() {} public: //! Handles the keypresses and changes accordingly //! the text displayed in text ctrl. void OnKey(wxKeyEvent &); //! Returns TRUE if this window is containing a valid key combination. bool IsValidKeyComb() const { return !GetValue().IsEmpty(); //we allow '+' (&& GetValue().Last() != '+';) } private: DECLARE_CLASS(wxKeyMonitorTextCtrl) DECLARE_EVENT_TABLE() }; #endif springlobby-0.169/switch_build-dir0000700000176000000410000000005312105760300020575 0ustar buildbotwww-data00000000000000#!/bin/bash rm build-qt ln -s $1 build-qt springlobby-0.169/tools/.astylerc0000600000176000000410000000005212105760300020403 0ustar buildbotwww-data00000000000000--pad=paren-in --unpad=paren --style=ansi springlobby-0.169/tools/addFileToBuildsystems.sh0000700000176000000410000000173012105760300023360 0ustar buildbotwww-data00000000000000#!/usr/bin/env bash # dunno if it would work with plain sh, please verify # usage: tools/newfile src/myfilename [h] [cpp] [xpm] # not a portable app in the sense that it expects a lot of our dir hierarchy and it's own location # but you can be anywhere to call it # for xpm assume the file is moved to correct location before running this set -e cd $(dirname $0)/.. files=$* # takes 1 parameter, f.ex. src/images/foo.xpm add_sourcefile_to_project () { echo adding $1 sed -i 's,^springlobby_SOURCES = \\$,&\n\t'$1' \\,' Makefile.am if [ $2 = cpp ] ; then sed -i 's,^SET(SpringLobbySrc$,&\n\t'$1',' CMakeLists.txt git add CMakeLists.txt fi sed -i 's,.$,&\n\t,' springlobby.cbp git add $1 git add Makefile.am git add springlobby.cbp } for f in ${files} ; do echo ${f} ext=$(echo ${f}|awk -F . '{print $NF}') if [ -e ${f} ] ; then add_sourcefile_to_project ${f} ${ext} else echo file ${f} does not exist fi done exit 0 springlobby-0.169/tools/buildbot-add-locale-win-zip.sh0000700000176000000410000000014712105760300024300 0ustar buildbotwww-data00000000000000#!/usr/bin/env bash set -e cd $(dirname $0)/../build-mingw-wx28/ zip -ur ../../../../../${1} locale springlobby-0.169/tools/buildbot-regen-makefiles.sh0000700000176000000410000000021512105760300023752 0ustar buildbotwww-data00000000000000#!/usr/bin/env bash set -e cd $(dirname $0)/.. for f in build build-linux-wx28 build-mingw-wx28 ; do ( cd $f ; ./config.status ) done springlobby-0.169/tools/changelog.sh0000600000176000000410000000164012105760300021043 0ustar buildbotwww-data00000000000000#! /usr/bin/env bash GIT_DIR=$(git rev-parse --git-dir 2>/dev/null) if [ -z "$GIT_DIR" ]; then echo >&2 "fatal: post-receive: GIT_DIR not set" exit 1 fi cd ${GIT_DIR} REVS1=`git tag -l "r*"` REVS2=`git tag -l "0*"` REVS1=($REVS1) REVS2=($REVS2) REVS=( ${REVS1[@]} ${REVS2[@]} ) NUMREVS=${#REVS[*]} OFILE=/tmp/git.html cat /dev/null > $OFILE echo "